Warning: chmod(): Operation not permitted in /var/www/hopeinstoughton_www/wp-content/plugins/simple-universal-google-analytics/main.php on line 8
[0] in function chmod in /var/www/hopeinstoughton_www/wp-content/plugins/simple-universal-google-analytics/main.php on line 8
[1] in function include_once in /var/www/hopeinstoughton_www/wp-settings.php on line 560
[2] in function require_once in /var/www/hopeinstoughton_www/wp-config.php on line 85
[3] in function require_once in /var/www/hopeinstoughton_www/wp-load.php on line 50
[4] in function require_once in /var/www/hopeinstoughton_www/wp-blog-header.php on line 13
[5] in function require in /var/www/hopeinstoughton_www/index.php on line 17
403WebShell
403Webshell
Server IP : 94.177.8.99  /  Your IP : 216.73.217.165
Web Server : Apache/2.4.58 (Ubuntu)
System : Linux aries 6.8.0-134-generic #134-Ubuntu SMP PREEMPT_DYNAMIC Fri Jun 26 18:43:11 UTC 2026 x86_64
User : www-data ( 33)
PHP Version : 8.1.34
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /nuitka/eggshell.build/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /nuitka/eggshell.build/__constants.bin
Z�"��6.bytecodeh�hXo��@sRdZdZdddddddd	d
ddd
dddddgZddlZddlZddlZzddl	m	Z
mZWn$ek
r~dd�Z
dd�ZYnXdZ
dZdZdZdZdZd ZGd!d"�d"e�Zd#d$�ZGd%d�de�ZGd&d�de�ZGd'd	�d	e�ZGd(d�de�ZGd)d
�d
e�Zd*d+�ZGd,d�de�ZGd-d�de�ZGd.d�de�Z Gd/d0�d0e �Z!Gd1d2�d2e �Z"Gd3d4�d4e"�Z#Gd5d6�d6e"�Z$Gd7d8�d8e �Z%Gd9d:�d:e �Z&Gd;d<�d<e �Z'Gd=d>�d>e �Z(Gd?d@�d@e �Z)GdAdB�dBe �Z*GdCdD�dDe%�Z+GdEd�de�Z,GdFd�de�Z-GdGdH�dHe�Z.GdIdJ�dJe.�Z/GdKdL�dLe/�Z0GdMd�dee.�Z1dS)Na�
Command-line parsing library

This module is an optparse-inspired command-line parsing library that:

    - handles both optional and positional arguments
    - produces highly informative usage messages
    - supports parsers that dispatch to sub-parsers

The following is a simple usage example that sums integers from the
command-line and writes the result to a file::

    parser = argparse.ArgumentParser(
        description='sum the integers at the command line')
    parser.add_argument(
        'integers', metavar='int', nargs='+', type=int,
        help='an integer to be summed')
    parser.add_argument(
        '--log', default=sys.stdout, type=argparse.FileType('w'),
        help='the file where the sum should be written')
    args = parser.parse_args()
    args.log.write('%s' % sum(args.integers))
    args.log.close()

The module contains the following public classes:

    - ArgumentParser -- The main entry point for command-line parsing. As the
        example above shows, the add_argument() method is used to populate
        the parser with actions for optional and positional arguments. Then
        the parse_args() method is invoked to convert the args at the
        command-line into an object with attributes.

    - ArgumentError -- The exception raised by ArgumentParser objects when
        there are errors with the parser's actions. Errors raised while
        parsing the command-line are caught by ArgumentParser and emitted
        as command-line messages.

    - FileType -- A factory for defining types of files to be created. As the
        example above shows, instances of FileType are typically passed as
        the type= argument of add_argument() calls.

    - Action -- The base class for parser actions. Typically actions are
        selected by passing strings like 'store_true' or 'append_const' to
        the action= argument of add_argument(). However, for greater
        customization of ArgumentParser actions, subclasses of Action may
        be defined and passed as the action= argument.

    - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter,
        ArgumentDefaultsHelpFormatter -- Formatter classes which
        may be passed as the formatter_class= argument to the
        ArgumentParser constructor. HelpFormatter is the default,
        RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser
        not to change the formatting for help text, and
        ArgumentDefaultsHelpFormatter adds information about argument defaults
        to the help.

All other classes in this module are considered implementation details.
(Also note that HelpFormatter and RawDescriptionHelpFormatter are only
considered public as object names -- the API of the formatter objects is
still considered an implementation detail.)
z1.1�ArgumentParser�
ArgumentError�ArgumentTypeError�FileType�
HelpFormatter�ArgumentDefaultsHelpFormatter�RawDescriptionHelpFormatter�RawTextHelpFormatter�MetavarTypeHelpFormatter�	Namespace�Action�ONE_OR_MORE�OPTIONAL�PARSER�	REMAINDER�SUPPRESS�ZERO_OR_MORE�N)�gettext�ngettextcCs|S�N�)�messagerr�/usr/lib/python3.8/argparse.py�_^srcCs|dkr|S|SdS�N�r)�singular�plural�nrrrr`srz==SUPPRESS==�?�*�+zA...�...Z_unrecognized_argsc@s(eZdZdZdd�Zdd�Zdd�ZdS)	�_AttributeHolderaAbstract base class that provides __repr__.

    The __repr__ method returns a string in the format::
        ClassName(attr=name, attr=name, ...)
    The attributes are determined either by a class-level attribute,
    '_kwarg_names', or by inspecting the instance __dict__.
    cCs�t|�j}g}i}|��D]}|�t|��q|��D],\}}|��rZ|�d||f�q6|||<q6|rz|�dt|��d|d�|�fS)N�%s=%rz**%s�%s(%s)�, )�type�__name__�	_get_args�append�repr�_get_kwargs�isidentifier�join)�self�	type_name�arg_strings�	star_args�arg�name�valuerrr�__repr__|s

z_AttributeHolder.__repr__cCst|j���Sr)�sorted�__dict__�items�r/rrrr,�sz_AttributeHolder._get_kwargscCsgSrrr:rrrr)�sz_AttributeHolder._get_argsN)r(�
__module__�__qualname__�__doc__r6r,r)rrrrr#ssr#cCs6|dkrgSt|�tkr$|dd�Sddl}|�|�S)Nr)r'�list�copy)r9r?rrr�_copy_items�sr@c@s�eZdZdZd;dd�Zdd�Zd	d
�ZGdd�de�Zd
d�Z	dd�Z
dd�Zdd�Zd<dd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�ZdS)=rz�Formatter for generating usage messages and argument help strings.

    Only the name of this class is considered a public API. All the methods
    provided by the class are considered an implementation detail.
    ��NcCs�|dkr@zddl}|��j}|d8}Wntk
r>d}YnX||_||_t|t|d|d��|_||_	d|_
d|_d|_|�
|d�|_|j|_t�dtj�|_t�d�|_dS)NrrA�F�z\s+z\n\n\n+)�shutil�get_terminal_size�columns�ImportError�_prog�_indent_increment�min�max�_max_help_position�_width�_current_indent�_level�_action_max_length�_Section�
_root_section�_current_section�_re�compile�ASCII�_whitespace_matcher�_long_break_matcher)r/�prog�indent_increment�max_help_position�width�_shutilrrr�__init__�s(

�zHelpFormatter.__init__cCs"|j|j7_|jd7_dSr)rOrJrPr:rrr�_indent�szHelpFormatter._indentcCs4|j|j8_|jdks"td��|jd8_dS)NrzIndent decreased below 0.r)rOrJ�AssertionErrorrPr:rrr�_dedent�szHelpFormatter._dedentc@seZdZddd�Zdd�ZdS)zHelpFormatter._SectionNcCs||_||_||_g|_dSr)�	formatter�parent�headingr9)r/rcrdrerrrr_�szHelpFormatter._Section.__init__cCs�|jdk	r|j��|jj}|dd�|jD��}|jdk	rD|j��|sLdS|jtk	rz|jdk	rz|jj}d|d|jf}nd}|d||dg�S)NcSsg|]\}}||��qSrr)�.0�func�argsrrr�
<listcomp>�sz6HelpFormatter._Section.format_help.<locals>.<listcomp>�z%*s%s:
�
)	rdrcr`�_join_partsr9rbrerrO)r/r.�	item_help�current_indentrerrr�format_help�s



z"HelpFormatter._Section.format_help)N)r(r;r<r_rorrrrrR�s
rRcCs|jj�||f�dSr)rTr9r*)r/rgrhrrr�	_add_item�szHelpFormatter._add_itemcCs0|��|�||j|�}|�|jg�||_dSr)r`rRrTrpro)r/re�sectionrrr�
start_section�szHelpFormatter.start_sectioncCs|jj|_|��dSr)rTrdrbr:rrr�end_section�s
zHelpFormatter.end_sectioncCs$|tk	r |dk	r |�|j|g�dSr)rrp�_format_text)r/�textrrr�add_textszHelpFormatter.add_textcCs&|tk	r"||||f}|�|j|�dSr)rrp�
_format_usage)r/�usage�actions�groups�prefixrhrrr�	add_usageszHelpFormatter.add_usagecCsv|jtk	rr|j}||�g}|�|�D]}|�||��q$tdd�|D��}||j}t|j|�|_|�|j	|g�dS)NcSsg|]}t|��qSr��len�rf�srrrrisz.HelpFormatter.add_argument.<locals>.<listcomp>)
�helpr�_format_action_invocation�_iter_indented_subactionsr*rLrOrQrp�_format_action)r/�action�get_invocation�invocations�	subaction�invocation_length�
action_lengthrrr�add_arguments


�zHelpFormatter.add_argumentcCs|D]}|�|�qdSr)r�)r/ryr�rrr�
add_argumentsszHelpFormatter.add_argumentscCs.|j��}|r*|j�d|�}|�d�d}|S)N�

rk)rSrorY�sub�strip)r/r�rrrro%s

zHelpFormatter.format_helpcCsd�dd�|D��S)NrjcSsg|]}|r|tk	r|�qSr)r)rf�partrrrri-s�z-HelpFormatter._join_parts.<locals>.<listcomp>)r.)r/�part_stringsrrrrl,s
�zHelpFormatter._join_partscs6|dkrtd�}|dk	r,|t|jd�}�n�|dkrL|sLdt|jd�}�n�|dk�r*dt|jd�}g}g}|D] }|jr�|�|�qr|�|�qr|j}	|	|||�}
d�dd�||
fD��}|j|j�t	|�t	|��k�r*d}|	||�}|	||�}
t
�||�}t
�||
�}d�|�|k�s&t�d�|�|
k�s:t�d�fdd	�	}t	|�t	|�d
�k�r�dt	|�t	|�d}|�r�||g|||�}|�
|||��n |�r�||g|||�}n|g}nZdt	|�}||}|||�}t	|�dk�rg}|�
|||��|�
|||��|g|}d�|�}d
||fS)Nzusage: �rZz%(prog)s� cSsg|]}|r|�qSrrrrrrriMsz/HelpFormatter._format_usage.<locals>.<listcomp>z%\(.*?\)+(?=\s|$)|\[.*?\]+(?=\s|$)|\S+cs�g}g}|dk	rt|�d}nt|�d}|D]Z}|dt|��krn|rn|�|d�|��g}t|�d}|�|�|t|�d7}q.|r�|�|d�|��|dk	r�|dt|�d�|d<|S)Nrr�r)r~r*r.)�parts�indentr{�lines�line�line_lenr���
text_widthrr�	get_linesas"
z.HelpFormatter._format_usage.<locals>.get_linesg�?rrkz%s%s

)N)r�dictrI�option_stringsr*�_format_actions_usager.rNrOr~rU�findallra�extend)r/rxryrzr{rZ�	optionals�positionalsr��format�action_usage�part_regexp�	opt_usage�	pos_usage�	opt_parts�	pos_partsr�r�r�r�rr�rrw1s\
�




zHelpFormatter._format_usagec	Cs�t�}i}|D�]}z|�|jd�}Wntk
r@YqYqX|t|j�}|||�|jkr|jD]}|�|�qh|js�||kr�||d7<nd||<||kr�||d7<nd||<nF||kr�||d7<nd||<||k�r||d7<nd||<t|d|�D]}	d	||	<�qqg}
t|�D�]"\}	}|j	t
k�r�|
�d�|�|	�d	k�rr|�
|	�n"|�|	d�d	k�rX|�
|	d�n�|j�s�|�|�}|�||�}||k�r�|ddk�r�|d
dk�r�|dd
�}|
�|�nf|jd}
|jdk�rd|
}n"|�|�}|�||�}d|
|f}|j�sN||k�rNd
|}|
�|��q6t|dd�D]}	||	g|
|	|	�<�qhd�dd�|
D��}d}d}t�d|d|�}t�d|d|�}t�d||fd|�}t�dd|�}|��}|S)Nrz [�[�]z (�(�)r�|����%s�%s %s�[%s]T)�reverser�cSsg|]}|dk	r|�qSrr)rf�itemrrrri�sz7HelpFormatter._format_actions_usage.<locals>.<listcomp>z[\[(]z[\])]z(%s) z\1� (%s)z%s *%srjz\(([^|]*)\))�set�index�_group_actions�
ValueErrorr~�add�required�range�	enumerater�rr*�get�popr��#_get_default_metavar_for_positional�_format_args�nargs�!_get_default_metavar_for_optionalr7r.rUr�r�)r/ryrz�
group_actions�inserts�group�start�endr��ir��defaultr��
option_string�args_stringru�open�closerrrr��sz










z#HelpFormatter._format_actions_usagecCsFd|kr|t|jd�}t|j|jd�}d|j}|�|||�dS)Nz%(prog)r��r�r�)r�rIrLrNrO�
_fill_text)r/rur�r�rrrrt�s

zHelpFormatter._format_textc
Cs:t|jd|j�}t|j|d�}||jd}|�|�}|jsV|jd|f}d|}n@t|�|kr~|jd||f}d|}d}n|jd|f}d|}|}|g}|jr�|�	|�}	|�
|	|�}
|�d|d|
df�|
dd�D]}|�d|d|f�q�n|�d��s|�d�|�
|�D]}|�|�|���q|�|�S)	NrAr�rjz%*s%s
z	%*s%-*s  rrrk)rKrQrMrLrNrOr�r�r~�_expand_help�_split_linesr*�endswithr�r�rl)
r/r��
help_position�
help_width�action_width�
action_header�tup�indent_firstr��	help_text�
help_linesr�r�rrrr��s8
�



zHelpFormatter._format_actioncCs�|js&|�|�}|�||�d�\}|Sg}|jdkrB|�|j�n4|�|�}|�||�}|jD]}|�d||f�q^d�|�SdS)Nrrr�r&)	r�r��_metavar_formatterr�r�r�r�r*r.)r/r�r��metavarr�r�r�rrrr�.s



z'HelpFormatter._format_action_invocationcsP|jdk	r|j�n.|jdk	r<dd�|jD�}dd�|��n|��fdd�}|S)NcSsg|]}t|��qSr��str)rf�choicerrrriJsz4HelpFormatter._metavar_formatter.<locals>.<listcomp>z{%s}�,cst�t�r�S�f|SdSr)�
isinstance�tuple)�
tuple_size��resultrrr�Os
z0HelpFormatter._metavar_formatter.<locals>.format)r��choicesr.)r/r��default_metavar�choice_strsr�rr�rr�Fs

z HelpFormatter._metavar_formattercCs�|�||�}|jdkr$d|d�}n�|jtkr<d|d�}n�|jtkrTd|d�}n�|jtkrld|d�}n�|jtkr|d}nt|jtkr�d|d�}n\|jtkr�d	}nLzd
d�t|j�D�}Wnt	k
r�t
d�d�YnXd
�|�||j�}|S)Nr�rr�z
[%s [%s ...]]rAz%s [%s ...]r"z%s ...rjcSsg|]}d�qS)r�r)rfrrrrrihsz.HelpFormatter._format_args.<locals>.<listcomp>zinvalid nargs valuer�)r�r�r
rrrrrr��	TypeErrorr�r.)r/r�r��get_metavarr��formatsrrrr�Vs*






zHelpFormatter._format_argscCs�tt|�|jd�}t|�D]}||tkr||=qt|�D] }t||d�r:||j||<q:|�d�dk	r�d�dd�|dD��}||d<|�	|�|S)Nr�r(r�r&cSsg|]}t|��qSrr�)rf�crrrriwsz.HelpFormatter._expand_help.<locals>.<listcomp>)
r��varsrIr>r�hasattrr(r�r.�_get_help_string)r/r��paramsr4�choices_strrrrr�nszHelpFormatter._expand_helpccs@z
|j}Wntk
rYnX|��|�EdH|��dSr)�_get_subactions�AttributeErrorr`rb)r/r��get_subactionsrrrr�{s
z'HelpFormatter._iter_indented_subactionscCs&|j�d|���}ddl}|�||�S)Nr�r)rXr�r��textwrap�wrap)r/rur]r�rrrr��szHelpFormatter._split_linescCs,|j�d|���}ddl}|j||||d�S)Nr�r)�initial_indent�subsequent_indent)rXr�r�r��fill)r/rur]r�r�rrrr��s�zHelpFormatter._fill_textcCs|jSr)r��r/r�rrrr��szHelpFormatter._get_help_stringcCs
|j��Sr)�dest�upperr�rrrr��sz/HelpFormatter._get_default_metavar_for_optionalcCs|jSr)r�r�rrrr��sz1HelpFormatter._get_default_metavar_for_positional)rArBN)N) r(r;r<r=r_r`rb�objectrRrprrrsrvr|r�r�rorlrwr�rtr�r�r�r�r�r�r�r�r�r�r�rrrrr�s>�
"
`g/

c@seZdZdZdd�ZdS)rz�Help message formatter which retains any formatting in descriptions.

    Only the name of this class is considered a public API. All the methods
    provided by the class are considered an implementation detail.
    cs d��fdd�|jdd�D��S)Nrjc3s|]}�|VqdSrr)rfr��r�rr�	<genexpr>�sz9RawDescriptionHelpFormatter._fill_text.<locals>.<genexpr>T)�keepends)r.�
splitlines)r/rur]r�rr�rr��sz&RawDescriptionHelpFormatter._fill_textN)r(r;r<r=r�rrrrr�sc@seZdZdZdd�ZdS)rz�Help message formatter which retains formatting of all help text.

    Only the name of this class is considered a public API. All the methods
    provided by the class are considered an implementation detail.
    cCs|��Sr)r)r/rur]rrrr��sz!RawTextHelpFormatter._split_linesN)r(r;r<r=r�rrrrr�sc@seZdZdZdd�ZdS)rz�Help message formatter which adds default values to argument help.

    Only the name of this class is considered a public API. All the methods
    provided by the class are considered an implementation detail.
    cCs>|j}d|jkr:|jtk	r:ttg}|js2|j|kr:|d7}|S)Nz
%(default)z (default: %(default)s))r�r�rr
rr�r�)r/r�r��defaulting_nargsrrrr��s

z.ArgumentDefaultsHelpFormatter._get_help_stringN)r(r;r<r=r�rrrrr�sc@s eZdZdZdd�Zdd�ZdS)r	aHelp message formatter which uses the argument 'type' as the default
    metavar value (instead of the argument 'dest')

    Only the name of this class is considered a public API. All the methods
    provided by the class are considered an implementation detail.
    cCs|jjSr�r'r(r�rrrr��sz:MetavarTypeHelpFormatter._get_default_metavar_for_optionalcCs|jjSrrr�rrrr��sz<MetavarTypeHelpFormatter._get_default_metavar_for_positionalN)r(r;r<r=r�r�rrrrr	�scCsN|dkrdS|jrd�|j�S|jdtfkr2|jS|jdtfkrF|jSdSdS)N�/)r�r.r�rr�)�argumentrrr�_get_action_name�src@s eZdZdZdd�Zdd�ZdS)rz�An error from creating or using an argument (optional or positional).

    The string value of this exception is the message, augmented with
    information about the argument that caused it.
    cCst|�|_||_dSr)r�
argument_namer)r/rrrrrr_�s
zArgumentError.__init__cCs(|jdkrd}nd}|t|j|jd�S)Nz%(message)sz'argument %(argument_name)s: %(message)s)rr)rr�r)r/r�rrr�__str__�s
�zArgumentError.__str__N)r(r;r<r=r_r	rrrrr�sc@seZdZdZdS)rz@An error from trying to convert a command line string to a type.N)r(r;r<r=rrrrr�sc@s,eZdZdZd
dd�Zdd�Zddd	�ZdS)ra\	Information about how to convert command line strings to Python objects.

    Action objects are used by an ArgumentParser to represent the information
    needed to parse a single argument from one or more strings from the
    command line. The keyword arguments to the Action constructor are also
    all attributes of Action instances.

    Keyword Arguments:

        - option_strings -- A list of command-line option strings which
            should be associated with this action.

        - dest -- The name of the attribute to hold the created object(s)

        - nargs -- The number of command-line arguments that should be
            consumed. By default, one argument will be consumed and a single
            value will be produced.  Other values include:
                - N (an integer) consumes N arguments (and produces a list)
                - '?' consumes zero or one arguments
                - '*' consumes zero or more arguments (and produces a list)
                - '+' consumes one or more arguments (and produces a list)
            Note that the difference between the default and nargs=1 is that
            with the default, a single value will be produced, while with
            nargs=1, a list containing a single value will be produced.

        - const -- The value to be produced if the option is specified and the
            option uses an action that takes no values.

        - default -- The value to be produced if the option is not specified.

        - type -- A callable that accepts a single string argument, and
            returns the converted value.  The standard Python types str, int,
            float, and complex are useful examples of such callables.  If None,
            str is used.

        - choices -- A container of values that should be allowed. If not None,
            after a command-line argument has been converted to the appropriate
            type, an exception will be raised if it is not a member of this
            collection.

        - required -- True if the action must always be specified at the
            command line. This is only meaningful for optional command-line
            arguments.

        - help -- The help string describing the argument.

        - metavar -- The name to be used for the option's argument with the
            help string. If None, the 'dest' value will be used as the name.
    NFcCs@||_||_||_||_||_||_||_||_|	|_|
|_	dSr�
r�r�r��constr�r'r�r�r�r��r/r�r�r�rr�r'r�r�r�r�rrrr_5szAction.__init__c	s(ddddddddd	g	}�fd
d�|D�S)Nr�r�r�rr�r'r�r�r�csg|]}|t�|�f�qSr��getattr�rfr4r:rrriWsz&Action._get_kwargs.<locals>.<listcomp>r�r/�namesrr:rr,Ks�zAction._get_kwargscCsttd���dS)Nz.__call__() not defined)�NotImplementedErrorr�r/�parser�	namespace�valuesr�rrr�__call__YszAction.__call__)NNNNNFNN)N)r(r;r<r=r_r,rrrrrrs5�
cs(eZdZd�fdd�	Zddd�Z�ZS)	�_StoreActionNFcsT|dkrtd��|dk	r,|tkr,tdt��tt|�j|||||||||	|
d�
dS)Nrz�nargs for store actions must be != 0; if you have nothing to store, actions such as store true or store const may be more appropriate� nargs must be %r to supply constr
)r�r
�superrr_r��	__class__rrr__s 
�z_StoreAction.__init__cCst||j|�dSr)�setattrr�rrrrr|sz_StoreAction.__call__)NNNNNFNN)N�r(r;r<r_r�
__classcell__rrrrr]s�rcs(eZdZd�fdd�	Zddd�Z�ZS)	�_StoreConstActionNFc	s"tt|�j||d||||d�dS)Nr)r�r�r�rr�r�r�)rr r_�r/r�r�rr�r�r�r�rrrr_�s
�z_StoreConstAction.__init__cCst||j|j�dSr)rr�rrrrrr�sz_StoreConstAction.__call__)NFNN)Nrrrrrr �s�r cseZdZd�fdd�	Z�ZS)�_StoreTrueActionFNcs tt|�j||d|||d�dS)NT�r�r�rr�r�r�)rr"r_�r/r�r�r�r�r�rrrr_�s
�z_StoreTrueAction.__init__)FFN�r(r;r<r_rrrrrr"�s�r"cseZdZd�fdd�	Z�ZS)�_StoreFalseActionTFNcs tt|�j||d|||d�dS)NFr#)rr&r_r$rrrr_�s
�z_StoreFalseAction.__init__)TFNr%rrrrr&�s�r&cs(eZdZd�fdd�	Zddd�Z�ZS)	�
_AppendActionNFcsT|dkrtd��|dk	r,|tkr,tdt��tt|�j|||||||||	|
d�
dS)Nrz�nargs for append actions must be != 0; if arg strings are not supplying the value to append, the append const action may be more appropriaterr
)r�r
rr'r_rrrrr_�s 
�z_AppendAction.__init__cCs2t||jd�}t|�}|�|�t||j|�dSr)rr�r@r*r�r/rrrr�r9rrrr�s
z_AppendAction.__call__)NNNNNFNN)Nrrrrrr'�s�r'cs(eZdZd�fdd�	Zddd�Z�ZS)	�_AppendConstActionNFc
s$tt|�j||d|||||d�dS)Nr)r�r�r�rr�r�r�r�)rr)r_r!rrrr_�s
�z_AppendConstAction.__init__cCs4t||jd�}t|�}|�|j�t||j|�dSr)rr�r@r*rrr(rrrr�sz_AppendConstAction.__call__)NFNN)Nrrrrrr)�s�r)cs(eZdZd�fdd�	Zddd�Z�ZS)	�_CountActionNFcs tt|�j||d|||d�dS)Nr)r�r�r�r�r�r�)rr*r_r$rrrr_�s
�z_CountAction.__init__cCs0t||jd�}|dkrd}t||j|d�dS�Nrr)rr�r)r/rrrr��countrrrr
sz_CountAction.__call__)NFN)Nrrrrrr*�s
�r*cs.eZdZeedf�fdd�	Zddd�Z�ZS)�_HelpActionNcstt|�j|||d|d�dS�Nr)r�r�r�r�r�)rr-r_)r/r�r�r�r�rrrr_s
�z_HelpAction.__init__cCs|��|��dSr)�
print_help�exitrrrrrsz_HelpAction.__call__)N�r(r;r<rr_rrrrrrr-s
�r-cs0eZdZdeedf�fdd�	Zddd�Z�ZS)�_VersionActionNz&show program's version number and exitcs$tt|�j|||d|d�||_dSr.)rr2r_�version)r/r�r3r�r�r�rrrr_&s
�z_VersionAction.__init__cCsD|j}|dkr|j}|��}|�|�|�|��tj�|��dSr)r3�_get_formatterrv�_print_messagero�_sys�stdoutr0)r/rrrr�r3rcrrrr4s
z_VersionAction.__call__)Nr1rrrrr2$s�r2csPeZdZGdd�de�Zedddf�fdd�	Zdd�Zd	d
�Zd
dd�Z	�Z
S)�_SubParsersActioncseZdZ�fdd�Z�ZS)z&_SubParsersAction._ChoicesPseudoActioncs@|}}|r|dd�|�7}ttj|�}|jg|||d�dS)Nr�r&)r�r�r�r�)r.rr8�_ChoicesPseudoActionr_)r/r4�aliasesr�r�r��suprrrr_Bs
�z/_SubParsersAction._ChoicesPseudoAction.__init__r%rrrrr9@sr9FNc	s<||_||_i|_g|_tt|�j||t|j|||d�dS)N)r�r�r�r�r�r�r�)�_prog_prefix�
_parser_class�_name_parser_map�_choices_actionsrr8r_r)r/r�rZ�parser_classr�r�r�r�rrrr_Js	
�z_SubParsersAction.__init__cKs�|�d�dkr d|j|f|d<|�dd�}d|krX|�d�}|�|||�}|j�|�|jf|�}||j|<|D]}||j|<qr|S)NrZr�r:rr�)r�r<r�r9r?r*r=r>)r/r4�kwargsr:r��
choice_actionr�aliasrrr�
add_parseras

z_SubParsersAction.add_parsercCs|jSr)r?r:rrrr�xsz!_SubParsersAction._get_subactionscCs�|d}|dd�}|jtk	r,t||j|�z|j|}Wn<tk
rv|d�|j�d�}td�|}t||��YnX|�|d�\}	}t	|	��
�D]\}
}t||
|�q�|r�t	|��tg�t
|t��|�dS)Nrrr&)�parser_namer�z5unknown parser %(parser_name)r (choices: %(choices)s))r�rrr>�KeyErrorr.rr�parse_known_argsr�r9�
setdefault�_UNRECOGNIZED_ARGS_ATTRrr�)r/rrrr�rEr1rh�msg�subnamespace�keyr5rrrr{s$

�	z_SubParsersAction.__call__)N)r(r;r<rr9rr_rDr�rrrrrrr8>s�r8c@seZdZddd�ZdS)�
_ExtendActionNcCs2t||jd�}t|�}|�|�t||j|�dSr)rr�r@r�rr(rrrr�s
z_ExtendAction.__call__)N)r(r;r<rrrrrrM�srMc@s*eZdZdZddd�Zdd�Zd	d
�ZdS)ra�Factory for creating file object types

    Instances of FileType are typically passed as type= arguments to the
    ArgumentParser add_argument() method.

    Keyword Arguments:
        - mode -- A string indicating how the file is to be opened. Accepts the
            same values as the builtin open() function.
        - bufsize -- The file's desired buffer size. Accepts the same values as
            the builtin open() function.
        - encoding -- The file's encoding. Accepts the same values as the
            builtin open() function.
        - errors -- A string indicating how encoding and decoding errors are to
            be handled. Accepts the same value as the builtin open() function.
    �rr�NcCs||_||_||_||_dSr)�_mode�_bufsize�	_encoding�_errors)r/�mode�bufsize�encoding�errorsrrrr_�szFileType.__init__c
Cs�|dkr>d|jkrtjSd|jkr(tjStd�|j}t|��zt||j|j|j|j	�WSt
k
r�}z"||d�}td�}t||��W5d}~XYnXdS)N�-rN�wzargument "-" with mode %r)�filename�errorz$can't open '%(filename)s': %(error)s)rOr6�stdinr7rr�r�rPrQrR�OSErrorr)r/�stringrJ�erhrrrrr�s

�
zFileType.__call__cCsT|j|jf}d|jfd|jfg}d�dd�|D�dd�|D��}dt|�j|fS)NrUrVr&cSsg|]}|dkrt|��qS)r�)r+)rfr3rrrri�sz%FileType.__repr__.<locals>.<listcomp>cSs$g|]\}}|dk	rd||f�qS)Nr$r)rf�kwr3rrrri�s�r%)rOrPrQrRr.r'r()r/rhrA�args_strrrrr6�s�zFileType.__repr__)rNr�NN)r(r;r<r=r_rr6rrrrr�s
c@s(eZdZdZdd�Zdd�Zdd�ZdS)	r
z�Simple object for storing attributes.

    Implements equality by attribute names and values, and provides a simple
    string representation.
    cKs|D]}t||||�qdSr)r)r/rAr4rrrr_�szNamespace.__init__cCst|t�stSt|�t|�kSr)r�r
�NotImplementedr�)r/�otherrrr�__eq__�s
zNamespace.__eq__cCs
||jkSr)r8)r/rLrrr�__contains__�szNamespace.__contains__N)r(r;r<r=r_rcrdrrrrr
�scs�eZdZ�fdd�Zdd�Zd&dd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zd'dd�Zdd�Zd d!�Zd"d#�Zd$d%�Z�ZS)(�_ActionsContainercstt|���||_||_||_||_i|_|�ddt	�|�ddt	�|�ddt
�|�ddt�|�ddt�|�ddt
�|�ddt�|�ddt�|�dd	t�|�dd
t�|�ddt�|�ddt�|��g|_i|_g|_g|_i|_t�d
�|_g|_dS)Nr��store�store_const�
store_true�store_falser*�append_constr,r�r3�parsersr�z^-\d+$|^-\d*\.\d+$)rrer_�description�argument_default�prefix_chars�conflict_handler�_registries�registerrr r"r&r'r)r*r-r2r8rM�_get_handler�_actions�_option_string_actions�_action_groups�_mutually_exclusive_groups�	_defaultsrUrV�_negative_number_matcher�_has_negative_number_optionals)r/rlrnrmrorrrr_�s4z_ActionsContainer.__init__cCs|j�|i�}|||<dSr)rprH)r/�
registry_namer5r��registryrrrrq(sz_ActionsContainer.registerNcCs|j|�||�Sr)rpr�)r/rzr5r�rrr�
_registry_get,sz_ActionsContainer._registry_getcKs2|j�|�|jD]}|j|kr||j|_qdSr)rw�updatersr�r�)r/rAr�rrr�set_defaults2s

z_ActionsContainer.set_defaultscCs8|jD]"}|j|kr|jdk	r|jSq|j�|d�Sr)rsr�r�rwr�)r/r�r�rrr�get_default;s
z_ActionsContainer.get_defaultcOsD|j}|r&t|�dkrH|dd|krH|r:d|kr:td��|j||�}n|j||�}d|kr�|d}||jkr~|j||d<n|jdk	r�|j|d<|�|�}t|�s�td|f��|f|�}|�	d|j
|j
�}t|�s�td	|f��|tkr�td
|f��t|d��r:z|�
��|d�Wntk
�r8td��YnX|�|�S)
z�
        add_argument(dest, ..., name=value, ...)
        add_argument(option_string, option_string, ..., name=value, ...)
        rrr�z+dest supplied twice for positional argumentr�Nzunknown action "%s"r'�%r is not callablez<%r is a FileType class object, instance of it must be passedr4z,length of metavar tuple does not match nargs)rnr~r��_get_positional_kwargs�_get_optional_kwargsrwrm�_pop_action_class�callabler|r'rr�r4r�r��_add_action)r/rhrA�charsr��action_classr��	type_funcrrrr�Es:	 




�z_ActionsContainer.add_argumentcOs t|f|�|�}|j�|�|Sr)�_ArgumentGrouprur*)r/rhrAr�rrr�add_argument_groupxsz$_ActionsContainer.add_argument_groupcKst|f|�}|j�|�|Sr)�_MutuallyExclusiveGrouprvr*)r/rAr�rrr�add_mutually_exclusive_group}sz._ActionsContainer.add_mutually_exclusive_groupcCs`|�|�|j�|�||_|jD]}||j|<q"|jD]"}|j�|�r8|js8|j�d�q8|S)NT)	�_check_conflictrsr*�	containerr�rtrx�matchry)r/r�r�rrrr��s


z_ActionsContainer._add_actioncCs|j�|�dSr)rs�remover�rrr�_remove_action�sz _ActionsContainer._remove_actioncCs�i}|jD].}|j|kr.td�}t||j��|||j<q
i}|jD]D}|j|krn|j|j|j|jd�||j<|jD]}||j||<qtqD|jD]&}|j	|j
d�}|jD]}|||<q�q�|jD]}|�||��
|�q�dS)Nz.cannot merge actions - two groups are named %r)�titlerlro)r�)rur�rr�r�rlror�rvr�r�rsr�r�)r/r��title_group_mapr�rJ�	group_mapr��mutex_grouprrr�_add_container_actions�s0



�

�

z(_ActionsContainer._add_container_actionscKs^d|krtd�}t|��|�d�ttfkr2d|d<|�d�tkrPd|krPd|d<t||gd�S)Nr�z1'required' is an invalid argument for positionalsr�Tr��r�r�)rr�r�r
rr�)r/r�rArJrrrr��sz(_ActionsContainer._get_positional_kwargsc	Os�g}g}|D]n}|d|jkr>||jd�}td�}t||��|�|�|d|jkrt|�dkr|d|jkr|�|�q|�dd�}|dkr�|r�|d}n|d}|�|j�}|s�td�}t||��|�dd�}t|||d	�S)
Nr)�optionrnzNinvalid option string %(option)r: must start with a character %(prefix_chars)rrr�z%dest= is required for options like %rrWrr�)	rnrr�r*r~r��lstrip�replacer�)	r/rhrAr��long_option_stringsr�rJr��dest_option_stringrrrr��s2�

z&_ActionsContainer._get_optional_kwargscCs|�d|�}|�d||�S)Nr�)r�r|)r/rAr�r�rrrr��sz#_ActionsContainer._pop_action_classcCsFd|j}zt||�WStk
r@td�}t||j��YnXdS)Nz_handle_conflict_%sz%invalid conflict_resolution value: %r)rorr�rr�)r/�handler_func_namerJrrrrr�s
z_ActionsContainer._get_handlercCsLg}|jD]&}||jkr
|j|}|�||f�q
|rH|��}|||�dSr)r�rtr*rr)r/r��confl_optionalsr��confl_optionalrorrrr�s


z!_ActionsContainer._check_conflictcCs6tddt|��}d�dd�|D��}t|||��dS)Nzconflicting option string: %szconflicting option strings: %sr&cSsg|]\}}|�qSrr)rfr�r�rrrris�z<_ActionsContainer._handle_conflict_error.<locals>.<listcomp>)rr~r.r)r/r��conflicting_actionsr�conflict_stringrrr�_handle_conflict_errors�
�z(_ActionsContainer._handle_conflict_errorcCs>|D]4\}}|j�|�|j�|d�|js|j�|�qdSr)r�r�rtr�r�r�)r/r�r�r�rrr�_handle_conflict_resolves
z*_ActionsContainer._handle_conflict_resolve)N)N)r(r;r<r_rqr|r~rr�r�r�r�r�r�r�r�r�rrr�r�r�rrrrrre�s$5
	
3($
		recs6eZdZd�fdd�	Z�fdd�Z�fdd�Z�ZS)	r�Ncs�|j}|d|j�|d|j�|d|j�tt|�j}|fd|i|��||_g|_|j	|_	|j
|_
|j|_|j|_|j
|_
|j|_dS)Nrornrmrl)rHrornrmrr�r_r�r�rprsrtrwryrv)r/r�r�rlrAr}�
super_initrrrr_+s�z_ArgumentGroup.__init__cs tt|��|�}|j�|�|Sr)rr�r�r�r*r�rrrr�Asz_ArgumentGroup._add_actioncs tt|��|�|j�|�dSr)rr�r�r�r�r�rrrr�Fsz_ArgumentGroup._remove_action)NN�r(r;r<r_r�r�rrrrrr�)sr�cs.eZdZd�fdd�	Zdd�Zdd�Z�ZS)	r�Fcs tt|��|�||_||_dSr)rr�r_r��
_container)r/r�r�rrrr_Msz _MutuallyExclusiveGroup.__init__cCs2|jrtd�}t|��|j�|�}|j�|�|S)Nz-mutually exclusive arguments must be optional)r�rr�r�r�r�r*)r/r�rJrrrr�Rsz#_MutuallyExclusiveGroup._add_actioncCs|j�|�|j�|�dSr)r�r�r�r�r�rrrr�Zsz&_MutuallyExclusiveGroup._remove_action)Fr�rrrrr�Ksr�cs*eZdZdZddddgeddddddf�fdd�	Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dAdd�ZdBdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�ZdCd&d'�ZdDd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�ZdEd6d7�ZdFd8d9�ZdGd:d;�ZdHd=d>�Z d?d@�Z!�Z"S)Ira�Object for parsing command line strings into Python objects.

    Keyword Arguments:
        - prog -- The name of the program (default: sys.argv[0])
        - usage -- A usage message (default: auto-generated from arguments)
        - description -- A description of what the program does
        - epilog -- Text following the argument descriptions
        - parents -- Parsers whose arguments should be copied into this one
        - formatter_class -- HelpFormatter class for printing help messages
        - prefix_chars -- Characters that prefix optional arguments
        - fromfile_prefix_chars -- Characters that prefix files containing
            additional arguments
        - argument_default -- The default value for all arguments
        - conflict_handler -- String indicating how to handle conflicts
        - add_help -- Add a -h/-help option
        - allow_abbrev -- Allow long options to be abbreviated unambiguously
    NrWrZTc
	s"tt|�j}
|
|||	|
d�|dkr6tj�tjd�}||_||_	||_
||_||_||_
||_|j}|td��|_|td��|_d|_dd�}|�dd|�d|kr�dn|d}|j
r�|j|d	|d
ddttd�d
�|D]<}|�|�z
|j}Wntk
�rYq�X|j�|�q�dS)N)rlrnrmrorzpositional argumentszoptional argumentscSs|Srr)r]rrr�identity�sz)ArgumentParser.__init__.<locals>.identityr'rW�hrAr�zshow this help message and exit)r�r�r�)rrr_�_os�path�basenamer6�argvrZrx�epilog�formatter_class�fromfile_prefix_chars�add_help�allow_abbrevr�r�_positionals�
_optionals�_subparsersrqr�rr�rwr�r})r/rZrxrlr��parentsr�rnr�rmror�r��	superinit�	add_groupr��default_prefixrd�defaultsrrrr_rsJ�
�

zArgumentParser.__init__cs"ddddddg}�fdd�|D�S)	NrZrxrlr�ror�csg|]}|t�|�f�qSrr
rr:rrri�sz.ArgumentParser._get_kwargs.<locals>.<listcomp>rrrr:rr,�s�zArgumentParser._get_kwargsc	Ks�|jdk	r|�td��|�dt|��d|ks8d|krht|�dd��}t|�dd��}|�||�|_n|j|_|�d�dkr�|�	�}|�
�}|j}|�|j
||d�|����|d<|�|d�}|fd	gi|��}|j�|�|S)
Nz(cannot have multiple subparser argumentsr@r�rlZsubcommandsrZrjrkr�)r�rZrrHr'r�r�r�r�r4�_get_positional_actionsrvr|rxror�r�r�)	r/rAr�rlrcr�rz�
parsers_classr�rrr�add_subparsers�s$
zArgumentParser.add_subparserscCs$|jr|j�|�n|j�|�|Sr)r�r�r�r�r�rrrr��szArgumentParser._add_actioncCsdd�|jD�S)NcSsg|]}|jr|�qSr�r��rfr�rrrri�s�z8ArgumentParser._get_optional_actions.<locals>.<listcomp>�rsr:rrr�_get_optional_actions�s�z$ArgumentParser._get_optional_actionscCsdd�|jD�S)NcSsg|]}|js|�qSrr�r�rrrri�s�z:ArgumentParser._get_positional_actions.<locals>.<listcomp>r�r:rrrr��s�z&ArgumentParser._get_positional_actionscCs4|�||�\}}|r0td�}|�|d�|��|S�Nzunrecognized arguments: %sr�)rGrrZr.�r/rhrr�rJrrr�
parse_args�s
zArgumentParser.parse_argscCs|dkrtjdd�}nt|�}|dkr.t�}|jD]4}|jtk	r4t||j�s4|jtk	r4t	||j|j�q4|j
D] }t||�spt	|||j
|�qpz>|�||�\}}t|t�r�|�
t|t��t|t�||fWStk
�rt��d}|�t|��YnXdSr)r6r�r>r
rsr�rr�r�rrw�_parse_known_argsrIr�r�delattrr�exc_inforZr�)r/rhrr�r��errrrrrG�s,







zArgumentParser.parse_known_argscs�	jdk	r�	����i��	jD]R}|j}t|j�D]<\}}��|g�}|�|d|��|�||dd��q2qi�g}t��}	t|	�D]^\}}
|
dkr�|�d�|	D]}
|�d�q�q��	�	|
�}|dkr�d}n|�|<d}|�|�q�d�
|��t��t��d�����	fdd�	������	�fd	d
�}
�	�������	�fdd�}g�d
�
��r`t
��}nd}�
|k�r�t�
fdd��D��}�
|k�r�|�
�}|�
k�r�|�
�qdn|�
�
�k�r҈�
|�}��|�|�
|
�
��
�qd|�
�}���|d��g}�	jD]|}|�k�r|j�r(|�t|��nT|jdk	�rt|jt��rt�|j��r|jt�|j�k�rt�|j�	�||j���q|�r��	�td�d�
|���	jD]X}|j�r�|jD]}|�k�r��q��q�dd�|jD�}td�}�	�|d�
|���q���fS)Nr�--rW�A�Orjcs|��|���||�}||jk	rb��|���|g�D]*}|�kr6td�}t|�}t|||��q6|tk	rx|��||�dS)Nznot allowed with argument %s)r��_get_valuesr�r�rrrr)r��argument_stringsr��argument_values�conflict_actionrJ�action_name)�action_conflictsr�seen_actions�seen_non_default_actionsr/rr�take_actionLs


z5ArgumentParser._parse_known_args.<locals>.take_actioncs��|}|\}}}�j}g}|dkr:���|�|dS|dk	�r||d�}�j}|dkr�|d|kr�|�|g|f�|d}	|	|d}|dd�p�d}
�j}||kr�||}|
}ntd�}t|||��nB|dkr�|d}
|g}|�|||f��q\ntd�}t|||��q|d}�|d�}|||�}||}
�||
�}|�|||f��q\q|�sft�|D]\}}}�|||��qj|
S)Nrr�rzignored explicit argument %r)�_match_argumentr*rnrtrrra)�start_index�option_tupler�r��explicit_arg�match_argument�
action_tuples�	arg_countr��char�new_explicit_arg�
optionals_maprJ�stoprhr��selected_patterns)r1�arg_strings_pattern�extras�option_string_indicesr/r�rr�consume_optionalasN




z:ArgumentParser._parse_known_args.<locals>.consume_optionalcsn�j}�|d�}|�|�}t�|�D]*\}}�|||�}||7}�||�q&�t|�d��dd�<|Sr)�_match_arguments_partial�zipr~)r��
match_partial�selected_pattern�
arg_countsr�r�rh)r1r�r�r/r�rr�consume_positionals�s
z=ArgumentParser._parse_known_args.<locals>.consume_positionalsrr�csg|]}|�kr|�qSrr)rfr�)r�rrri�s�z4ArgumentParser._parse_known_args.<locals>.<listcomp>z(the following arguments are required: %sr&cSsg|]}|jtk	rt|��qSr)r�rrr�rrrri
s
�z#one of the arguments %s is requiredr�)N)r��_read_args_from_filesrvr�r�rHr��iterr*�_parse_optionalr.r�r�rLrKrsr�rr�r�r�r�r�rr�
_get_valuerZr)r/r1rr�r�r��mutex_action�	conflicts�arg_string_pattern_parts�arg_strings_iter�
arg_stringr��patternr�r��max_option_string_index�next_option_string_index�positionals_end_index�strings�
stop_index�required_actionsr�r�rrJr)r�r1r�r�rr�r�r�r�r/r�r�rr�s�





J

�






�
���
�



�z ArgumentParser._parse_known_argsc
Cs�g}|D]�}|r|d|jkr*|�|�qzdt|dd���J}g}|����D]}|�|�D]}|�|�q\qN|�|�}|�|�W5QRXWqtk
r�t	�
�d}|�t|��YqXq|Sr+)
r�r*r��readr�convert_arg_line_to_argsr�r�r\r6r�rZr�)r/r1�new_arg_stringsr��	args_file�arg_liner3r�rrrr�s 
z$ArgumentParser._read_args_from_filescCs|gSrr)r/r�rrrr�-sz'ArgumentParser.convert_arg_line_to_argscCsz|�|�}t�||�}|dkrldtd�ttd�ttd�i}|�|j�}|dkrbtdd|j�|j}t	||��t
|�d��S)Nzexpected one argumentzexpected at most one argumentzexpected at least one argumentzexpected %s argumentzexpected %s argumentsr)�_get_nargs_patternrUr�rr
rr�r�rrr~r�)r/r�r��
nargs_patternr��nargs_errorsrJrrrr�0s(
���
zArgumentParser._match_argumentcsrg}tt|�dd�D]X}|d|�}d��fdd�|D��}t�||�}|dk	r|�dd�|��D��qnq|S)Nrr�rjcsg|]}��|��qSr)r�r�r:rrriLs�z;ArgumentParser._match_arguments_partial.<locals>.<listcomp>cSsg|]}t|��qSrr})rfr]rrrriPs)r�r~r.rUr�r�rz)r/ryr�r�r��
actions_slicer�r�rr:rr�Fs�z'ArgumentParser._match_arguments_partialc
Cs|sdS|d|jkrdS||jkr8|j|}||dfSt|�dkrHdSd|kr~|�dd�\}}||jkr~|j|}|||fS|�|�}t|�dkr�d�dd�|D��}||d�}td�}|�||�nt|�dkr�|\}	|	S|j�	|�r�|j
s�dSd	|k�rdSd|dfS)
Nrr�=r&cSsg|]\}}}|�qSrr)rfr�r�r�rrrrius�z2ArgumentParser._parse_optional.<locals>.<listcomp>)r��matchesz4ambiguous option: %(option)s could match %(matches)sr�)rnrtr~�split�_get_option_tuplesr.rrZrxr�ry)
r/r�r�r�r��
option_tuples�optionsrhrJr�rrrr�Vs>







�

zArgumentParser._parse_optionalc
Cs0g}|j}|d|kr�|d|kr�|jr~d|krB|�dd�\}}n|}d}|jD],}|�|�rP|j|}|||f}|�|�qPn�|d|k�r|d|k�r|}d}|dd�}|dd�}	|jD]T}||kr�|j|}|||	f}|�|�q�|�|�r�|j|}|||f}|�|�q�n|�td�|�|S)NrrrrAzunexpected option string: %s)rnr�rrt�
startswithr*rZr)
r/r�r�r��
option_prefixr�r�r��short_option_prefix�short_explicit_argrrrr�s:









z!ArgumentParser._get_option_tuplescCs�|j}|dkrd}nf|tkr"d}nX|tkr0d}nJ|tkr>d}n<|tkrLd}n.|tkrZd}n |tkrhd}ndd	�d
|�}|jr�|�	d	d�}|�	dd�}|S)
Nz(-*A-*)z(-*A?-*)z	(-*[A-]*)z
(-*A[A-]*)z([-AO]*)z(-*A[-AO]*)z(-*-*)z(-*%s-*)z-*r�rjrW)
r�r
rrrrrr.r�r�)r/r�r�rrrrr��s(z!ArgumentParser._get_nargs_patterncCs4|�||�\}}|r0td�}|�|d�|��|Sr�)�parse_known_intermixed_argsrrZr.r�rrr�parse_intermixed_args�s
z$ArgumentParser.parse_intermixed_argsc	s�|���dd��D�}|r,td|dj���fdd�|jD�rHtd���zN|j}z�|jdkrp|��dd�|_�D] }|j|_t	|_|j|_t	|_qt|�
||�\}}�D]J}t||j�r�t
||j�gkr�ddlm}|d	|j|f�t||j�q�W5�D]}|j|_|j|_q�X|��}zJ|D]}|j|_d
|_�q$|jD]}	|	j|	_d
|	_�q@|�
||�\}}
W5|D]}|j|_�qn|jD]}	|	j|	_�q�XW5||_X||
fS)NcSsg|]}|jttfkr|�qSr)r�rrr�rrrri	s�z>ArgumentParser.parse_known_intermixed_args.<locals>.<listcomp>z3parse_intermixed_args: positional arg with nargs=%srcs&g|]}|jD]}|�kr|j�qqSr)r�r�)rfr�r��r�rrri		s
�z;parse_intermixed_args: positional in mutuallyExclusiveGroup�)�warnzDo not expect %s in %sF)r�r�r�rvrx�
save_nargs�save_defaultr��format_usagerrGr�r�r�warningsrr�r��
save_requiredr�)r/rhr�a�
save_usager��remaining_argsrr�r�r�rrrr
�s`
�
��


�
z*ArgumentParser.parse_known_intermixed_argscs��jttfkr2z|�d�Wntk
r0YnX|sz�jtkrz�jrN�j}n�j}t	|t
�rv���|�}���|��n|s��jt
kr��js��jdk	r��j}n|}���|�n�t|�dkr�jdtfkr�|\}���|�}���|�n��jtk�r��fdd�|D�}np�jtk�r@��fdd�|D�}���|d�n>�jtk�rRt}n,��fdd�|D�}|D]}���|��qj|S)Nr�rcsg|]}���|��qSr�r��rf�v�r�r/rrrif	sz.ArgumentParser._get_values.<locals>.<listcomp>csg|]}���|��qSrrrrrrrij	srcsg|]}���|��qSrrrrrrris	s)r�rrr�r�r
r�rr�r�r�r��_check_valuerr~r)r/r�r1r5r�rrrrr�B	sD
�
zArgumentParser._get_valuesc	Cs�|�d|j|j�}t|�s0td�}t|||��z||�}Wn�tk
r~t|jdt|j��}tt	�
�d�}t||��YnLttfk
r�t|jdt|j��}||d�}td�}t|||��YnX|S)Nr'r�r(r)r'r5z!invalid %(type)s value: %(value)r)
r|r'r�rrrrr+r�r6r�r�r�)r/r�r�r�rJr�r4rhrrrr�z	s 
zArgumentParser._get_valuecCsF|jdk	rB||jkrB|d�tt|j��d�}td�}t|||��dS)Nr&)r5r�z3invalid choice: %(value)r (choose from %(choices)s))r�r.�mapr+rr)r/r�r5rhrJrrrr�	s�zArgumentParser._check_valuecCs$|��}|�|j|j|j�|��Sr)r4r|rxrsrvro)r/rcrrrr�	s
�zArgumentParser.format_usagecCst|��}|�|j|j|j�|�|j�|jD]0}|�|j	�|�|j�|�
|j�|��q.|�|j
�|��Sr)r4r|rxrsrvrvrlrurrr�r�r�rsr�ro)r/rc�action_grouprrrro�	s�

zArgumentParser.format_helpcCs|j|jd�S)Nr�)r�rZr:rrrr4�	szArgumentParser._get_formattercCs"|dkrtj}|�|��|�dSr)r6r7r5r�r/�filerrr�print_usage�	szArgumentParser.print_usagecCs"|dkrtj}|�|��|�dSr)r6r7r5ror!rrrr/�	szArgumentParser.print_helpcCs |r|dkrtj}|�|�dSr)r6�stderr�write)r/rr"rrrr5�	szArgumentParser._print_messagercCs |r|�|tj�t�|�dSr)r5r6r$r0)r/�statusrrrrr0�	szArgumentParser.exitcCs0|�tj�|j|d�}|�dtd�|�dS)z�error(message: string)

        Prints a usage message incorporating the message to stderr and
        exits.

        If you override this in a subclass, it should not return -- it
        should either exit or raise an exception.
        )rZrrAz%(prog)s: error: %(message)s
N)r#r6r$rZr0r)r/rrhrrrrZ�	s	zArgumentParser.error)NN)NN)NN)NN)N)N)N)rN)#r(r;r<r=rr_r,r�r�r�r�r�rGr�r�r�r�r�r�rr�rr
r�r�rrror4r#r/r5r0rZrrrrrr_sV�@

#w:-1

M8


	
)2r=�__version__�__all__�osr��rerU�sysr6rrrrHrr
rrrrrIr�r#r@rrrrr	r�	Exceptionrrrrr r"r&r'r)r*r-r2r8rMrr
rer�r�rrrrr�<module>s�=�~
	[#&]7:"X��@sdZddlZddlTddlTddlTddlTddlTddlTddlTddl	Tddl
TddlTddlTddl
TddlTddl
mZejejejejejejeje	je
jejeje
jejZejdkr�ddlTeej7ZnddlTeej7ZdS)z'The asyncio package, tracking PEP 3156.�N�)�*)�_all_tasks_compat�win32)�__doc__�sys�base_events�
coroutines�events�
exceptions�futures�locks�	protocols�runners�queues�streams�
subprocess�tasks�
transportsr�__all__�platform�windows_events�unix_events�rr�&/usr/lib/python3.8/asyncio/__init__.py�<module>sZ��������	�
���
X<��@s�dZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZzddlZWnek
r�dZYnXddlmZddlmZddlmZddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZddlmZddl m!Z!dZ"dZ#dZ$e%e	d�Z&dZ'e(�Z)dd�Z*dd�Z+dd�Z,d+dd�Z-d,dd�Z.dd �Z/e%e	d!��r�d"d#�Z0nd$d#�Z0Gd%d&�d&ej1�Z2Gd'd(�d(ej3�Z4Gd)d*�d*ej5�Z6dS)-a�Base implementation of event loop.

The event loop can be broken up into a multiplexer (the part
responsible for notifying us of I/O events) and the event loop proper,
which wraps a multiplexer with functionality for scheduling callbacks,
immediately or at a given time in the future.

Whenever a public API takes a callback, subsequent positional
arguments will be passed to the callback if/when it is called.  This
avoids the proliferation of trivial lambdas implementing closures.
Keyword arguments for the callback are not supported; this is a
conscious design decision, leaving the door open for keyword arguments
to modify the meaning of the API call itself.
�N�)�	constants)�
coroutines)�events)�
exceptions)�futures)�	protocols)�sslproto)�	staggered)�tasks)�
transports)�trsock)�logger)�
BaseEventLoop�dg�?�AF_INET6i�QcCs0|j}tt|dd�tj�r$t|j�St|�SdS)N�__self__)�	_callback�
isinstance�getattrr�Task�reprr�str)�handle�cb�r�)/usr/lib/python3.8/asyncio/base_events.py�_format_handleJs
rcCs(|tjkrdS|tjkrdSt|�SdS)Nz<pipe>z<stdout>)�
subprocess�PIPE�STDOUTr)�fdrrr�_format_pipeSs


r"cCsLttd�std��n4z|�tjtjd�Wntk
rFtd��YnXdS)N�SO_REUSEPORTz)reuse_port not supported by socket modulerzTreuse_port not supported by socket module, SO_REUSEPORT defined but not implemented.)�hasattr�socket�
ValueError�
setsockopt�
SOL_SOCKETr#�OSError��sockrrr�_set_reuseport\s

r,c		Cs�ttd�sdS|dtjtjhks(|dkr,dS|tjkr>tj}n|tjkrPtj}ndS|dkrbd}nXt|t�rz|dkrzd}n@t|t�r�|dkr�d}n(zt	|�}Wnt
tfk
r�YdSX|tjkr�tj
g}tr�|�tj�n|g}t|t�r�|�d�}d|k�rdS|D]t}zVt�||�t�rJ|tjk�rJ|||d||||ffWS|||d||ffWSWntk
�rzYnX�q
dS)N�	inet_ptonr���idna�%)r$r%�IPPROTO_TCP�IPPROTO_UDP�SOCK_STREAM�
SOCK_DGRAMr�bytesr�int�	TypeErrorr&�	AF_UNSPEC�AF_INET�	_HAS_IPv6�appendr�decoder-r))	�host�port�family�type�proto�flowinfo�scopeid�afs�afrrr�_ipaddr_infogsN
�






rGcCs�t��}|D]*}|d}||kr(g||<||�|�qt|���}g}|dkr||�|dd|d��|dd|d�=|�dd�tj�tj	|��D��|S)z-Interleave list of addrinfo tuples by family.rrNcss|]}|dk	r|VqdS�Nr)�.0�arrr�	<genexpr>�s�z(_interleave_addrinfos.<locals>.<genexpr>)
�collections�OrderedDictr<�list�values�extend�	itertools�chain�
from_iterable�zip_longest)�	addrinfos�first_address_family_count�addrinfos_by_family�addrr@�addrinfos_lists�	reorderedrrr�_interleave_addrinfos�s"
��r[cCs4|��s"|��}t|ttf�r"dSt�|���dSrH)�	cancelled�	exceptionr�
SystemExit�KeyboardInterruptr�	_get_loop�stop)�fut�excrrr�_run_until_complete_cb�s
rd�TCP_NODELAYcCs@|jtjtjhkr<|jtjkr<|jtjkr<|�tjtj	d�dS�Nr)
r@r%r:rrAr4rBr2r'rer*rrr�_set_nodelay�s
�
�rgcCsdSrHrr*rrrrg�sc@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�_SendfileFallbackProtocolcCsht|tj�std��||_|��|_|��|_|j	|_
|��|�|�|j
r^|jj
��|_nd|_dS)Nz.transport should be _FlowControlMixin instance)rr�_FlowControlMixinr8�
_transport�get_protocol�_proto�
is_reading�_should_resume_reading�_protocol_paused�_should_resume_writing�
pause_reading�set_protocol�_loop�
create_future�_write_ready_fut)�self�transprrr�__init__�s


z"_SendfileFallbackProtocol.__init__c�s2|j��rtd��|j}|dkr$dS|IdHdS)NzConnection closed by peer)rj�
is_closing�ConnectionErrorru)rvrbrrr�drain�s
z_SendfileFallbackProtocol.draincCstd��dS)Nz?Invalid state: connection should have been established already.��RuntimeError)rv�	transportrrr�connection_made�sz)_SendfileFallbackProtocol.connection_madecCs@|jdk	r0|dkr$|j�td��n|j�|�|j�|�dS)NzConnection is closed by peer)ru�
set_exceptionrzrl�connection_lost)rvrcrrrr��s
�z)_SendfileFallbackProtocol.connection_lostcCs |jdk	rdS|jj��|_dSrH)rurjrsrt�rvrrr�
pause_writing�s
z'_SendfileFallbackProtocol.pause_writingcCs$|jdkrdS|j�d�d|_dS)NF)ru�
set_resultr�rrr�resume_writing�s
z(_SendfileFallbackProtocol.resume_writingcCstd��dS�Nz'Invalid state: reading should be pausedr|)rv�datarrr�
data_received�sz'_SendfileFallbackProtocol.data_receivedcCstd��dSr�r|r�rrr�eof_receivedsz&_SendfileFallbackProtocol.eof_receivedc�sF|j�|j�|jr|j��|jdk	r2|j��|jrB|j��dSrH)	rjrrrlrn�resume_readingru�cancelrpr�r�rrr�restores


z!_SendfileFallbackProtocol.restoreN)�__name__�
__module__�__qualname__rxr{rr�r�r�r�r�r�rrrrrh�srhc@sxeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
edd��Zdd�Z
dd�Zdd�Zdd�ZdS)�ServercCs@||_||_d|_g|_||_||_||_||_d|_d|_	dS)NrF)
rs�_sockets�
_active_count�_waiters�_protocol_factory�_backlog�_ssl_context�_ssl_handshake_timeout�_serving�_serving_forever_fut)rv�loop�sockets�protocol_factory�ssl_context�backlog�ssl_handshake_timeoutrrrrxszServer.__init__cCsd|jj�d|j�d�S)N�<z	 sockets=�>)�	__class__r�r�r�rrr�__repr__ szServer.__repr__cCs |jdk	st�|jd7_dSrf)r��AssertionErrorr�r�rrr�_attach#szServer._attachcCs<|jdkst�|jd8_|jdkr8|jdkr8|��dS)Nrr)r�r�r��_wakeupr�rrr�_detach'szServer._detachcCs,|j}d|_|D]}|��s|�|�qdSrH)r��doner�)rv�waiters�waiterrrrr�-s
zServer._wakeupc	CsJ|jr
dSd|_|jD].}|�|j�|j�|j||j||j|j�qdS)NT)	r�r��listenr�rs�_start_servingr�r�r�)rvr+rrrr�4s
�zServer._start_servingcCs|jSrH)rsr�rrr�get_loop>szServer.get_loopcCs|jSrH)r�r�rrr�
is_servingAszServer.is_servingcCs"|jdkrdStdd�|jD��S)Nrcss|]}t�|�VqdSrH)r
�TransportSocket)rI�srrrrKHsz!Server.sockets.<locals>.<genexpr>)r��tupler�rrrr�Ds
zServer.socketscCsn|j}|dkrdSd|_|D]}|j�|�qd|_|jdk	rX|j��sX|j��d|_|jdkrj|��dS)NFr)	r�rs�
_stop_servingr�r�r�r�r�r�)rvr�r+rrr�closeJs
�

zServer.closec�s"|��tjd|jd�IdHdS)Nr�r�)r�r�sleeprsr�rrr�
start_serving]szServer.start_servingc	�s�|jdk	rtd|�d���|jdkr4td|�d���|��|j��|_zLz|jIdHWn6tjk
r�z|��|�	�IdHW5�XYnXW5d|_XdS)Nzserver z, is already being awaited on serve_forever()z
 is closed)
r�r}r�r�rsrtr�CancelledErrorr��wait_closedr�rrr�
serve_forevercs 

�
zServer.serve_foreverc�s<|jdks|jdkrdS|j��}|j�|�|IdHdSrH)r�r�rsrtr<)rvr�rrrr�xs

zServer.wait_closedN)r�r�r�rxr�r�r�r�r�r�r��propertyr�r�r�r�r�rrrrr�s


r�c@sPeZdZdd�Zdd�Zdd�Zdd�d	d
�Zdd�Zd
d�Zd�ddd�dd�Z	d�ddddddd�dd�Z
d�dd�Zd�dd�Zd�dd�Z
d�dd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zejfd7d8�Zd9d:�Zd;d<�Zdd=�d>d?�Z dd=�d@dA�Z!dd=�dBdC�Z"dDdE�Z#dFdG�Z$dHdI�Z%dd=�dJdK�Z&dLdM�Z'dNdO�Z(dPdQ�Z)dRdRdRdRdS�dTdU�Z*d�dVdW�Z+d�ddX�dYdZ�Z,d[d\�Z-d]d^�Z.d_d`�Z/d�dadb�Z0d�ddRdRdRdddddddc�
ddde�Z1d�dfdg�Z2d�ddX�dhdi�Z3djdk�Z4dldm�Z5ddddn�dodp�Z6d�dRdRdRe7ddddq�drds�Z8dRe9j:dRdRdS�dtdu�Z;dvdw�Z<d�e9j=e9j>ddxddddddy�	dzd{�Z?ddd|�d}d~�Z@dd��ZAd�d��ZBd�d��ZCeDjEeDjEeDjEdddRdddd��	d�d��ZFeDjEeDjEeDjEdddRdddd��	d�d��ZGd�d��ZHd�d��ZId�d��ZJd�d��ZKd�d��ZLd�d��ZMd�d��ZNd�d��ZOd�d��ZPd�d��ZQd�d��ZRdS)�rcCs�d|_d|_d|_t��|_g|_d|_d|_d|_	t
�d�j|_
d|_|�t���d|_d|_d|_d|_d|_t��|_d|_dS)NrF�	monotonicg�������?)�_timer_cancelled_count�_closed�	_stoppingrL�deque�_ready�
_scheduled�_default_executor�
_internal_fds�
_thread_id�time�get_clock_info�
resolution�_clock_resolution�_exception_handler�	set_debugr�_is_debug_mode�slow_callback_duration�_current_handle�
_task_factory�"_coroutine_origin_tracking_enabled�&_coroutine_origin_tracking_saved_depth�weakref�WeakSet�
_asyncgens�_asyncgens_shutdown_calledr�rrrrx�s$

zBaseEventLoop.__init__c	Cs.d|jj�d|���d|���d|���d�	S)Nr�z	 running=z closed=z debug=r�)r�r��
is_running�	is_closed�	get_debugr�rrrr��s,�zBaseEventLoop.__repr__cCstj|d�S)z,Create a Future object attached to the loop.r�)r�Futurer�rrrrt�szBaseEventLoop.create_futureN)�namecCsN|��|jdkr2tj|||d�}|jrJ|jd=n|�||�}t�||�|S)zDSchedule a coroutine object.

        Return a task object.
        N)r�r����)�
_check_closedr�rr�_source_traceback�_set_task_name)rv�coror��taskrrr�create_task�s

zBaseEventLoop.create_taskcCs"|dk	rt|�std��||_dS)awSet a task factory that will be used by loop.create_task().

        If factory is None the default task factory will be set.

        If factory is a callable, it should have a signature matching
        '(loop, coro)', where 'loop' will be a reference to the active
        event loop, 'coro' will be a coroutine object.  The callable
        must return a Future.
        Nz'task factory must be a callable or None)�callabler8r�)rv�factoryrrr�set_task_factory�s
zBaseEventLoop.set_task_factorycCs|jS)z<Return a task factory, or None if the default one is in use.)r�r�rrr�get_task_factory�szBaseEventLoop.get_task_factory)�extra�servercCst�dS)zCreate socket transport.N��NotImplementedError)rvr+�protocolr�r�r�rrr�_make_socket_transport�sz$BaseEventLoop._make_socket_transportFT)�server_side�server_hostnamer�r�r��call_connection_madecCst�dS)zCreate SSL transport.Nr�)rv�rawsockr��
sslcontextr�r�r�r�r�r�r�rrr�_make_ssl_transport�sz!BaseEventLoop._make_ssl_transportcCst�dS)zCreate datagram transport.Nr�)rvr+r��addressr�r�rrr�_make_datagram_transport�sz&BaseEventLoop._make_datagram_transportcCst�dS)zCreate read pipe transport.Nr��rv�piper�r�r�rrr�_make_read_pipe_transport�sz'BaseEventLoop._make_read_pipe_transportcCst�dS)zCreate write pipe transport.Nr�r�rrr�_make_write_pipe_transport�sz(BaseEventLoop._make_write_pipe_transportc	
�st�dS)zCreate subprocess transport.Nr�)
rvr��args�shell�stdin�stdout�stderr�bufsizer��kwargsrrr�_make_subprocess_transport�sz(BaseEventLoop._make_subprocess_transportcCst�dS)z�Write a byte to self-pipe, to wake up the event loop.

        This may be called from a different thread.

        The subclass is responsible for implementing the self-pipe.
        Nr�r�rrr�_write_to_self�szBaseEventLoop._write_to_selfcCst�dS)zProcess selector events.Nr�)rv�
event_listrrr�_process_events�szBaseEventLoop._process_eventscCs|jrtd��dS)NzEvent loop is closed)r�r}r�rrrr��szBaseEventLoop._check_closedcCs*|j�|�|��s&|�|j|���dSrH)r��discardr��call_soon_threadsafer��aclose�rv�agenrrr�_asyncgen_finalizer_hook�sz&BaseEventLoop._asyncgen_finalizer_hookcCs.|jrtjd|�d�t|d�|j�|�dS)Nzasynchronous generator z3 was scheduled after loop.shutdown_asyncgens() call��source)r��warnings�warn�ResourceWarningr��addrrrr�_asyncgen_firstiter_hooks
�z&BaseEventLoop._asyncgen_firstiter_hookc�s�d|_t|j�sdSt|j�}|j��tjdd�|D�d|d��IdH}t||�D]*\}}t|t	�rT|�
d|��||d��qTdS)z,Shutdown all active asynchronous generators.TNcSsg|]}|���qSr)r)rI�agrrr�
<listcomp>sz4BaseEventLoop.shutdown_asyncgens.<locals>.<listcomp>)�return_exceptionsr�z;an error occurred during closing of asynchronous generator )�messager]�asyncgen)r��lenr�rN�clearr�gather�zipr�	Exception�call_exception_handler)rv�
closing_agens�results�resultrrrr�shutdown_asyncgenss"


�
�z BaseEventLoop.shutdown_asyncgenscCs(|��rtd��t��dk	r$td��dS)Nz"This event loop is already runningz7Cannot run the event loop while another loop is running)r�r}r�_get_running_loopr�rrr�_check_running&s�zBaseEventLoop._check_runningc	Cs�|��|��|�|j�t��|_t��}tj	|j
|jd�z t
�|�|��|jrLq^qLW5d|_d|_t
�d�|�d�tj	|�XdS)zRun until stop() is called.)�	firstiter�	finalizerFN)r�r�_set_coroutine_origin_tracking�_debug�	threading�	get_identr��sys�get_asyncgen_hooks�set_asyncgen_hooksrrr�r�_set_running_loop�	_run_once)rv�old_agen_hooksrrr�run_forever-s$
�


zBaseEventLoop.run_foreverc	Cs�|��|��t�|�}tj||d�}|r4d|_|�t�z<z|�
�Wn*|rp|��rp|��sp|�
��YnXW5|�	t�X|��s�td��|��S)a\Run until the Future is done.

        If the argument is a coroutine, it is wrapped in a Task.

        WARNING: It would be disastrous to call run_until_complete()
        with the same coroutine twice -- it would wrap it in two
        different Tasks and that can't be good.

        Return the Future's result, or raise its exception.
        r�Fz+Event loop stopped before Future completed.)r�rr�isfuturer�
ensure_future�_log_destroy_pending�add_done_callbackrd�remove_done_callbackr,r�r\r]r}r)rv�future�new_taskrrr�run_until_completeDs"
z BaseEventLoop.run_until_completecCs
d|_dS)z�Stop running the event loop.

        Every callback already scheduled will still run.  This simply informs
        run_forever to stop looping after a complete iteration.
        TN)r�r�rrrrajszBaseEventLoop.stopcCsj|��rtd��|jrdS|jr,t�d|�d|_|j��|j��|j	}|dk	rfd|_	|j
dd�dS)z�Close the event loop.

        This clears the queues and shuts down the executor,
        but does not wait for the executor to finish.

        The event loop must not be running.
        z!Cannot close a running event loopNzClose %rTF)�wait)r�r}r�r#r�debugr�rr�r��shutdown�rv�executorrrrr�rs

zBaseEventLoop.closecCs|jS)z*Returns True if the event loop was closed.)r�r�rrrr��szBaseEventLoop.is_closedcCs0|��s,|d|��t|d�|��s,|��dS)Nzunclosed event loop r)r�rr�r�)rv�_warnrrr�__del__�szBaseEventLoop.__del__cCs
|jdk	S)z*Returns True if the event loop is running.N)r�r�rrrr��szBaseEventLoop.is_runningcCst��S)z�Return the time according to the event loop's clock.

        This is a float expressed in seconds since an epoch, but the
        epoch, precision, accuracy and drift are unspecified and may
        differ per event loop.
        )r�r�r�rrrr��szBaseEventLoop.time)�contextcGs2|j|��||f|�d|i�}|jr.|jd=|S)a8Arrange for a callback to be called at a given time.

        Return a Handle: an opaque object with a cancel() method that
        can be used to cancel the call.

        The delay can be an int or float, expressed in seconds.  It is
        always relative to the current time.

        Each callback will be called exactly once.  If two callbacks
        are scheduled for exactly the same time, it undefined which
        will be called first.

        Any positional arguments after the callback will be passed to
        the callback when it is called.
        r<r�)�call_atr�r�)rv�delay�callbackr<r��timerrrr�
call_later�s�zBaseEventLoop.call_latercGsZ|��|jr"|��|�|d�t�|||||�}|jrB|jd=t�|j	|�d|_	|S)z|Like call_later(), but uses an absolute time.

        Absolute time corresponds to the event loop's time() method.
        r=r�T)
r�r#�
_check_thread�_check_callbackr�TimerHandler��heapq�heappushr�)rv�whenr?r<r�r@rrrr=�szBaseEventLoop.call_atcGsB|��|jr"|��|�|d�|�|||�}|jr>|jd=|S)aTArrange for a callback to be called as soon as possible.

        This operates as a FIFO queue: callbacks are called in the
        order in which they are registered.  Each callback will be
        called exactly once.

        Any positional arguments after the callback will be passed to
        the callback when it is called.
        �	call_soonr�)r�r#rBrC�
_call_soonr��rvr?r<r�rrrrrH�s
zBaseEventLoop.call_sooncCsDt�|�st�|�r$td|�d���t|�s@td|�d|����dS)Nzcoroutines cannot be used with z()z"a callable object was expected by z(), got )r�iscoroutine�iscoroutinefunctionr8r�)rvr?�methodrrrrC�s
�
��zBaseEventLoop._check_callbackcCs.t�||||�}|jr|jd=|j�|�|S)Nr�)r�Handler�r�r<)rvr?r�r<rrrrrI�s
zBaseEventLoop._call_sooncCs,|jdkrdSt��}||jkr(td��dS)aoCheck that the current thread is the thread running the event loop.

        Non-thread-safe methods of this class make this assumption and will
        likely behave incorrectly when the assumption is violated.

        Should only be called when (self._debug == True).  The caller is
        responsible for checking this condition for performance reasons.
        NzMNon-thread-safe operation invoked on an event loop other than the current one)r�r$r%r})rv�	thread_idrrrrB�s	

�zBaseEventLoop._check_threadcGsB|��|jr|�|d�|�|||�}|jr6|jd=|��|S)z"Like call_soon(), but thread-safe.rr�)r�r#rCrIr�r�rJrrrr�sz"BaseEventLoop.call_soon_threadsafecGsZ|��|jr|�|d�|dkr@|j}|dkr@tj��}||_tj|j|f|��|d�S)N�run_in_executorr�)	r�r#rCr��
concurrentr�ThreadPoolExecutor�wrap_future�submit)rvr9�funcr�rrrrPs
�zBaseEventLoop.run_in_executorcCs&t|tjj�st�dtd�||_dS)Nz{Using the default executor that is not an instance of ThreadPoolExecutor is deprecated and will be prohibited in Python 3.9�)rrQrrRr
r�DeprecationWarningr�r8rrr�set_default_executors�z"BaseEventLoop.set_default_executorcCs�|�d|��g}|r$|�d|���|r8|�d|���|rL|�d|���|r`|�d|���d�|�}t�d|�|��}t�||||||�}	|��|}
d|�d	|
d
d�d|	��}|
|jkr�t�|�n
t�|�|	S)
N�:zfamily=ztype=zproto=zflags=�, zGet address info %szGetting address info z took g@�@z.3fzms: )	r<�joinrr6r�r%�getaddrinfor��info)rvr>r?r@rArB�flags�msg�t0�addrinfo�dtrrr�_getaddrinfo_debugs&


z BaseEventLoop._getaddrinfo_debugr�r@rArBr^c
�s2|jr|j}ntj}|�d|||||||�IdHSrH)r#rcr%r\rP)rvr>r?r@rArBr^�getaddr_funcrrrr\2s�zBaseEventLoop.getaddrinfoc�s|�dtj||�IdHSrH)rPr%�getnameinfo)rv�sockaddrr^rrrrf<s�zBaseEventLoop.getnameinfo)�fallbackc
�s�|jr|��dkrtd��|�||||�z|�||||�IdHWStjk
rl}z
|s\�W5d}~XYnX|�||||�IdHS)Nrzthe socket must be non-blocking)r#�
gettimeoutr&�_check_sendfile_params�_sock_sendfile_nativer�SendfileNotAvailableError�_sock_sendfile_fallback)rvr+�file�offset�countrhrcrrr�
sock_sendfile@s��zBaseEventLoop.sock_sendfilec�st�d|�d���dS)Nz-syscall sendfile is not available for socket z and file {file!r} combination�rrl�rvr+rnrorprrrrkNs
�z#BaseEventLoop._sock_sendfile_nativec

�s�|r|�|�|rt|tj�ntj}t|�}d}zt|rNt|||�}|dkrNq�t|�d|�}|�d|j|�IdH}	|	szq�|�	||d|	��IdH||	7}q2|W�S|dkr�t|d�r�|�||�XdS)Nr�seek)
rt�minr�!SENDFILE_FALLBACK_READBUFFER_SIZE�	bytearrayr$�
memoryviewrP�readinto�sock_sendall)
rvr+rnrorp�	blocksize�buf�
total_sent�view�readrrrrmUs,
��
z%BaseEventLoop._sock_sendfile_fallbackcCs�dt|dd�krtd��|jtjks,td��|dk	rbt|t�sLtd�|���|dkrbtd�|���t|t�sztd�|���|dkr�td�|���dS)N�b�modez$file should be opened in binary modez+only SOCK_STREAM type sockets are supportedz+count must be a positive integer (got {!r})rz0offset must be a non-negative integer (got {!r}))	rr&rAr%r4rr7r8�formatrsrrrrjos2
��
����z$BaseEventLoop._check_sendfile_paramsc�s@g}|�|�|\}}}}}	d}
z�tj|||d�}
|
�d�|dk	r�|D]r\}}}}}z|
�|�Wq�WqHtk
r�}z0d|�d|j����}
t|j|
�}|�|�W5d}~XYqHXqH|���|�	|
|	�IdH|
WStk
�r}z"|�|�|
dk	�r
|
�
��W5d}~XYn |
dk	�r4|
�
��YnXdS)z$Create, bind and connect one socket.N�r@rArBFz*error while attempting to bind on address �: )r<r%�setblocking�bindr)�strerror�lower�errno�pop�sock_connectr�)rvr�	addr_info�local_addr_infos�
my_exceptionsr@�type_rB�_r�r+�laddrrcr_rrr�
_connect_sock�s:



�


zBaseEventLoop._connect_sock)
�sslr@rBr^r+�
local_addrr�r��happy_eyeballs_delay�
interleavec
	�sl|
dk	r|std��|
dkr0|r0|s,td��|}
|dk	rD|sDtd��|dk	rX|
dkrXd}
|dk	sj|dk	�r�|dk	rztd���j||f|tj||�d�IdH}|s�td��|	dk	r܈j|	|tj||�d�IdH��s�td��nd�|
r�t||
�}g�|dk�rH|D]D}z ���|��IdH}W�qvWntk
�r@Y�qYnX�qn.tj���fd	d
�|D�|�d�IdH\}}}|dk�r dd
��D��t	��dk�r��d�nJt
�d��t�fdd
��D���r҈d�td�d�
dd
��D�����n.|dk�rtd��|jtjk�r td|�����j||||
|d�IdH\}}�j�rd|�d�}t�d|||||�||fS)a�Connect to a TCP server.

        Create a streaming transport connection to a given Internet host and
        port: socket family AF_INET or socket.AF_INET6 depending on host (or
        family if specified), socket type SOCK_STREAM. protocol_factory must be
        a callable returning a protocol instance.

        This method is a coroutine which will try to establish the connection
        in the background.  When successful, the coroutine returns a
        (transport, protocol) pair.
        Nz+server_hostname is only meaningful with sslz:You must set server_hostname when using ssl without a host�1ssl_handshake_timeout is only meaningful with sslr�8host/port and sock can not be specified at the same time�r@rArBr^r��!getaddrinfo() returned empty listc3s |]}t��j�|��VqdSrH)�	functools�partialr�)rIra)r�laddr_infosrvrrrK�s��z2BaseEventLoop.create_connection.<locals>.<genexpr>r�cSsg|]}|D]}|�qqSrr)rI�subrcrrrr�sz3BaseEventLoop.create_connection.<locals>.<listcomp>rc3s|]}t|��kVqdSrH�r�rIrc)�modelrrrKszMultiple exceptions: {}rZcss|]}t|�VqdSrHr�r�rrrrK
sz5host and port was not specified and no sock specified�"A Stream Socket was expected, got )r�r%z%r connected to %s:%r: (%r, %r))r&�_ensure_resolvedr%r4r)r[r�r
�staggered_racerr�allr�r[rA�_create_connection_transportr#�get_extra_inforr6)rvr�r>r?r�r@rBr^r+r�r�r�r�r��infosrar�r~r�r)rr�r�rvr�create_connection�s�����


�
��

�
���
�zBaseEventLoop.create_connectionc	�s�|�d�|�}|��}|rHt|t�r*dn|}	|j|||	||||d�}
n|�|||�}
z|IdHWn|
���YnX|
|fS)NF�r�r�r�)r�rtr�boolr�r�r�)rvr+r�r�r�r�r�r�r�r�r~rrrr�%s*
�z*BaseEventLoop._create_connection_transportc
�s�|��rtd��t|dtjj�}|tjjkr:td|����|tjjkr�z|�||||�IdHWStj	k
r�}z
|sx�W5d}~XYnX|s�td|����|�
||||�IdHS)a�Send a file to transport.

        Return the total number of bytes which were sent.

        The method uses high-performance os.sendfile if available.

        file must be a regular file object opened in binary mode.

        offset tells from where to start reading the file. If specified,
        count is the total number of bytes to transmit as opposed to
        sending the file until EOF is reached. File position is updated on
        return or also in case of error in which case file.tell()
        can be used to figure out the number of bytes
        which were sent.

        fallback set to True makes asyncio to manually read and send
        the file when the platform does not support the sendfile syscall
        (e.g. Windows or SSL socket on Unix).

        Raise SendfileNotAvailableError if the system does not support
        sendfile syscall and fallback is False.
        zTransport is closing�_sendfile_compatiblez(sendfile is not supported for transport NzHfallback is disabled and native sendfile is not supported for transport )ryr}rr�
_SendfileMode�UNSUPPORTED�
TRY_NATIVE�_sendfile_nativerrl�_sendfile_fallback)rvr~rnrorprhr�rcrrr�sendfile?s4�����zBaseEventLoop.sendfilec�st�d��dS)Nz!sendfile syscall is not supportedrr)rvrwrnrorprrrr�ns�zBaseEventLoop._sendfile_nativec
�s�|r|�|�|rt|d�nd}t|�}d}t|�}z�|rXt|||�}|dkrX|W�bSt|�d|�}	|�d|j|	�IdH}
|
s�|W�0S|�	�IdH|�
|	d|
��||
7}q6W5|dkr�t|d�r�|�||�|��IdHXdS)Ni@rrt)rtrurwrhr$r�rxrPryr{�write)rvrwrnrorpr{r|r}rBr~rrrrr�rs*
z BaseEventLoop._sendfile_fallbackr�c
�s�tdkrtd��t|tj�s*td|����t|dd�sFtd|�d���|��}tj|||||||dd�}|�	�|�
|�|�|j|�}	|�|j
�}
z|IdHWn.tk
r�|��|	��|
���YnX|jS)	zzUpgrade transport to TLS.

        Return a new transport that *protocol* should start using
        immediately.
        Nz"Python ssl module is not availablez@sslcontext is expected to be an instance of ssl.SSLContext, got �_start_tls_compatibleFz
transport z  is not supported by start_tls())r�r�)r�r}r�
SSLContextr8rrtr	�SSLProtocolrqrrrHrr��
BaseExceptionr�r��_app_transport)rvr~r�r�r�r�r�r��ssl_protocol�
conmade_cb�	resume_cbrrr�	start_tls�sB	�
��
zBaseEventLoop.start_tls)r@rBr^�
reuse_address�
reuse_port�allow_broadcastr+c �s|
dk	r�|
jtjkr"td|
�����s>�s>|s>|s>|s>|s>|	r~t��||||||	d�}d�dd�|��D��}td|�d���|
�d	�d}
�n�s��s�|d
kr�td��||fdff}�n�ttd
��r�|tj	k�r���fD]}|dk	r�t
|t�s�td��qڈ�rx�d
dk�rxz"t
�t�
��j��r.t���WnFtk
�rFYn2tk
�rv}zt�d�|�W5d}~XYnX||f��fff}n�i}d
�fd�ffD]�\}}|dk	�r�t
|t��r�t|�dk�s�td��|j||tj|||d�IdH}|�std��|D]:\}}}}}||f}||k�r0ddg||<||||<�q�q���fdd�|��D�}|�sjtd��g}|tk	�r�|�r�td��ntjdtdd�|D]�\\}}\}}d}
d}
zxtj|tj|d�}
|�r�t|
�|	�r�|
�tj tj!d�|
�d	���r|
�"|���r*|	�s&|�#|
|�IdH|}
Wn^tk
�rl}z |
dk	�rR|
�$�|�%|�W5d}~XYn&|
dk	�r�|
�$��YnX�q��q�|d
�|�}|�&�}|�'|
||
|�}|j(�r��r�t�)d��||�nt�*d�||�z|IdHWn|�$��YnX||fS)zCreate datagram connection.NzA UDP Socket was expected, got )r��remote_addrr@rBr^r�r�r�rZcss$|]\}}|r|�d|��VqdS)�=Nr)rI�k�vrrrrK�sz9BaseEventLoop.create_datagram_endpoint.<locals>.<genexpr>zKsocket modifier keyword arguments can not be used when sock is specified. (�)Frzunexpected address family)NN�AF_UNIXzstring is expected)r�z2Unable to check or remove stale UNIX socket %r: %rrrVz2-tuple is expectedr�r�cs8g|]0\}}�r|ddks�r,|ddks||f�qS)rNrr)rI�key�	addr_pair�r�r�rrr�s�z:BaseEventLoop.create_datagram_endpoint.<locals>.<listcomp>zcan not get address informationz~Passing `reuse_address=True` is no longer supported, as the usage of SO_REUSEPORT in UDP poses a significant security concern.zdThe *reuse_address* parameter has been deprecated as of 3.5.10 and is scheduled for removal in 3.11.)�
stacklevelr�z@Datagram endpoint local_addr=%r remote_addr=%r created: (%r, %r)z2Datagram endpoint remote_addr=%r created: (%r, %r))+rAr%r5r&�dictr[�itemsr�r$r�rrr8�stat�S_ISSOCK�os�st_mode�remove�FileNotFoundErrorr)r�errorr�rr�r��_unsetr
rrWr,r'r(�SO_BROADCASTr�r�r�r<rtr�r#r]r6) rvr�r�r�r@rBr^r�r�r�r+�opts�problems�r_addr�addr_pairs_inforX�err�
addr_infos�idxr��famr��pror�r�r�
local_address�remote_addressrcr�r�r~rr�r�create_datagram_endpoint�s*�������
�

��
��
�

����




���z&BaseEventLoop.create_datagram_endpointc
�s\|dd�\}}t|||||f|dd���}	|	dk	r<|	gS|j||||||d�IdHSdS)NrVrd)rGr\)
rvr�r@rArBr^r�r>r?r]rrrr�Ls�zBaseEventLoop._ensure_resolvedc�s8|j||f|tj||d�IdH}|s4td|�d���|S)N)r@rAr^r�zgetaddrinfo(z) returned empty list)r�r%r4r))rvr>r?r@r^r�rrr�_create_server_getaddrinfoXs�z(BaseEventLoop._create_server_getaddrinfor)	r@r^r+r�r�r�r�r�r�c	�s�t|t�rtd��|dk	r*|dkr*td��|dk	s<�dk	�r"|dk	rLtd��|	dkrhtjdkoftjdk}	g}
|dkr|dg}n$t|t�s�t|t	j
j�s�|g}n|}����fdd	�|D�}tj
|d
�i�IdH}ttj�|��}d}�z|D�]}|\}}}}}zt�|||�}Wn8tjk
�rH�j�r@tjd|||d
d�Yq�YnX|
�|�|	�rl|�tjtjd
�|
�rzt|�t�r�|tjk�r�ttd��r�|�tj tj!d
�z|�"|�Wq�t#k
�r�}z t#|j$d||j%�&�f�d�W5d}~XYq�Xq�d
}W5|�s|
D]}|���qXn4|dk�r4td��|j'tj(k�rPtd|����|g}
|
D]}|�)d��qZt*�|
||||�}|�r�|�+�tj,d�d�IdH�j�r�t�-d|�|S)a1Create a TCP server.

        The host parameter can be a string, in that case the TCP server is
        bound to host and port.

        The host parameter can also be a sequence of strings and in that case
        the TCP server is bound to all hosts of the sequence. If a host
        appears multiple times (possibly indirectly e.g. when hostnames
        resolve to the same IP address), the server is only bound once to that
        host.

        Return a Server object which can be used to stop the service.

        This method is a coroutine.
        z*ssl argument must be an SSLContext or NoneNr�r��posix�cygwinr/csg|]}�j|���d��qS))r@r^)r�)rIr>�r@r^r?rvrrr�s�
�z/BaseEventLoop.create_server.<locals>.<listcomp>r�Fz:create_server() failed to create socket.socket(%r, %r, %r)T��exc_info�IPPROTO_IPV6z0error while attempting to bind on address %r: %sz)Neither host/port nor sock were specifiedr�rr�z
%r is serving).rr�r8r&r�r�r&�platformrrL�abc�Iterablerr�setrQrRrSr�r%r�r#r�warningr<r'r(�SO_REUSEADDRr,r;rr$r��IPV6_V6ONLYr�r)r�r�r�rAr4r�r�r�r�r])rvr�r>r?r@r^r+r�r�r�r�r�r�r��hosts�fsr��	completed�resrF�socktyperB�	canonname�sar�r�rr�r�
create_server`s�
��
��
�

������
�zBaseEventLoop.create_server)r�r�c�sv|jtjkrtd|����|dk	r.|s.td��|j|||dd|d�IdH\}}|jrn|�d�}t�d|||�||fS)	aHandle an accepted connection.

        This is used by servers that accept connections outside of
        asyncio but that use asyncio to handle connections.

        This method is a coroutine.  When completed, the coroutine
        returns a (transport, protocol) pair.
        r�Nr�r/T)r�r�r%z%r handled: (%r, %r))	rAr%r4r&r�r#r�rr6)rvr�r+r�r�r~r�rrr�connect_accepted_socket�s$��
z%BaseEventLoop.connect_accepted_socketc�sd|�}|��}|�|||�}z|IdHWn|���YnX|jr\t�d|��||�||fS)Nz Read pipe %r connected: (%r, %r))rtr�r�r#rr6�fileno�rvr�r�r�r�r~rrr�connect_read_pipe�s�zBaseEventLoop.connect_read_pipec�sd|�}|��}|�|||�}z|IdHWn|���YnX|jr\t�d|��||�||fS)Nz!Write pipe %r connected: (%r, %r))rtr�r�r#rr6r�r�rrr�connect_write_pipes�z BaseEventLoop.connect_write_pipecCs�|g}|dk	r"|�dt|����|dk	rJ|tjkrJ|�dt|����n8|dk	rf|�dt|����|dk	r�|�dt|����t�d�|��dS)Nzstdin=zstdout=stderr=zstdout=zstderr=� )r<r"rr rr6r[)rvr_r�r�r�r]rrr�_log_subprocessszBaseEventLoop._log_subprocess)	r�r�r��universal_newlinesr�r��encoding�errors�textc	�s�t|ttf�std��|r"td��|s.td��|dkr>td��|rJtd��|	dk	rZtd��|
dk	rjtd��|�}
d}|jr�d	|}|�||||�|j|
|d
||||f|�IdH}|jr�|dk	r�t�d||�||
fS)Nzcmd must be a string� universal_newlines must be Falsezshell must be Truer�bufsize must be 0�text must be False�encoding must be None�errors must be Nonezrun shell command %rT�%s: %r)	rr6rr&r#r�r�rr])rvr��cmdr�r�r�r�r�r�rrrr�r��	debug_logr~rrr�subprocess_shellsB��
zBaseEventLoop.subprocess_shellc	�s�|rtd��|rtd��|dkr(td��|r4td��|	dk	rDtd��|
dk	rTtd��|f|}|�}d}|jr�d|��}|�||||�|j||d	||||f|
�IdH}|jr�|dk	r�t�d
||�||fS)Nrzshell must be Falserrrrrzexecute program Fr)r&r#r�r�rr])rvr��programr�r�r�r�r�r�rrrr�r��
popen_argsr�r
r~rrr�subprocess_execCs@

��
zBaseEventLoop.subprocess_execcCs|jS)zKReturn an exception handler, or None if the default one is in use.
        )r�r�rrr�get_exception_handleresz#BaseEventLoop.get_exception_handlercCs(|dk	rt|�std|����||_dS)a�Set handler as the new event loop exception handler.

        If handler is None, the default exception handler will
        be set.

        If handler is a callable object, it should have a
        signature matching '(loop, context)', where 'loop'
        will be a reference to the active event loop, 'context'
        will be a dict object (see `call_exception_handler()`
        documentation for details about context).
        Nz+A callable object or None is expected, got )r�r8r�)rv�handlerrrr�set_exception_handlerjsz#BaseEventLoop.set_exception_handlerc	Cs|�d�}|sd}|�d�}|dk	r6t|�||jf}nd}d|kr`|jdk	r`|jjr`|jj|d<|g}t|�D]�}|dkr|qn||}|dkr�d	�t�|��}d
}||�	�7}n2|dkr�d	�t�|��}d}||�	�7}nt
|�}|�|�d|���qntj
d
�|�|d�dS)aEDefault exception handler.

        This is called when an exception occurs and no exception
        handler is set, and can be called by a custom exception
        handler that wants to defer to the default behavior.

        This default handler logs the error message and other
        context-dependent information.  In debug mode, a truncated
        stack trace is also appended showing where the given object
        (e.g. a handle or future or task) was created, if any.

        The context parameter has the same meaning as in
        `call_exception_handler()`.
        rz!Unhandled exception in event loopr]NF�source_tracebackZhandle_traceback>r]rr/z+Object created at (most recent call last):
z+Handle created at (most recent call last):
r��
r�)�getrA�
__traceback__r�r��sortedr[�	traceback�format_list�rstriprr<rr�)	rvr<rr]r��	log_linesr��value�tbrrr�default_exception_handler{s<

���z'BaseEventLoop.default_exception_handlercCs�|jdkrVz|�|�Wq�ttfk
r2�Yq�tk
rRtjddd�Yq�Xn�z|�||�Wn�ttfk
r��Ynttk
r�}zVz|�d||d��Wn:ttfk
r��Yn"tk
r�tjddd�YnXW5d}~XYnXdS)aDCall the current event loop's exception handler.

        The context argument is a dict containing the following keys:

        - 'message': Error message;
        - 'exception' (optional): Exception object;
        - 'future' (optional): Future instance;
        - 'task' (optional): Task instance;
        - 'handle' (optional): Handle instance;
        - 'protocol' (optional): Protocol instance;
        - 'transport' (optional): Transport instance;
        - 'socket' (optional): Socket instance;
        - 'asyncgen' (optional): Asynchronous generator that caused
                                 the exception.

        New keys maybe introduced in the future.

        Note: do not overload this method in an event loop subclass.
        For custom exception handling, use the
        `set_exception_handler()` method.
        Nz&Exception in default exception handlerTr�z$Unhandled error in exception handler)rr]r<zeException in default exception handler while handling an unexpected error in custom exception handler)r�rr^r_r�rr�)rvr<rcrrrr�s4
���z$BaseEventLoop.call_exception_handlercCs>t|tj�std��|jrdSt|tj�r.t�|j�|�dS)z3Add a Handle to _scheduled (TimerHandle) or _ready.zA Handle is required hereN)rrrNr��
_cancelledrDr�r<�rvrrrr�
_add_callback�s
zBaseEventLoop._add_callbackcCs|�|�|��dS)z6Like _add_callback() but called from a signal handler.N)r r�rrrr�_add_callback_signalsafe�s
z&BaseEventLoop._add_callback_signalsafecCs|jr|jd7_dS)z3Notification that a TimerHandle has been cancelled.rN)r�r�rrrr�_timer_handle_cancelled�sz%BaseEventLoop._timer_handle_cancelledc	Cs�t|j�}|tkr`|j|tkr`g}|jD]}|jr<d|_q*|�|�q*t�|�||_d|_n4|jr�|jdjr�|jd8_t�	|j�}d|_q`d}|j
s�|jr�d}n*|jr�|jdj}t
td||���t�}|j�|�}|�|�|��|j}|j�r:|jd}|j|k�r�q:t�	|j�}d|_|j
�|�q�t|j
�}t|�D]|}	|j
��}|j�rf�qL|j�r�zD||_|��}
|��|��|
}||jk�r�t�dt|�|�W5d|_Xn|���qLd}dS)z�Run one full iteration of the event loop.

        This calls all currently ready callbacks, polls for I/O,
        schedules the resulting callbacks, and finally schedules
        'call_later' callbacks.
        FrrNzExecuting %s took %.3f seconds)rr��_MIN_SCHEDULED_TIMER_HANDLESr��%_MIN_CANCELLED_TIMER_HANDLES_FRACTIONrr<rE�heapify�heappopr�r��_whenru�maxr��MAXIMUM_SELECT_TIMEOUT�	_selector�selectrr��range�popleftr#r��_runr�rr�r)rv�sched_count�
new_scheduledr�timeoutrGr�end_time�ntodo�ir`rbrrrr*�sj
��





�
zBaseEventLoop._run_oncecCsHt|�t|j�krdS|r2t��|_t�tj�nt�|j�||_dSrH)r�r�r&�#get_coroutine_origin_tracking_depthr��#set_coroutine_origin_tracking_depthr�DEBUG_STACK_DEPTH�rv�enabledrrrr"Fs���z,BaseEventLoop._set_coroutine_origin_trackingcCs|jSrH)r#r�rrrr�UszBaseEventLoop.get_debugcCs ||_|��r|�|j|�dSrH)r#r�rr"r8rrrr�XszBaseEventLoop.set_debug)N)N)NNN)NN)NN)N)r)rN)N)NN)FN)rN)NN)NN)Sr�r�r�rxr�rtr�r�r�r�r�r�r�r�r�r�rr�rrrrr,r4rar�r�r
rr;r�r�rAr=rHrCrIrBrrPrXrcr\rfrqrkrmrjr�r�r�r�r�r�r�r�r�r%r4r�r�r9�
AI_PASSIVEr�r�r�r�r�rrrrrrrrr r!r"r*r"r�r�rrrrr�sF���
�
�
�
�
		&	
	�

�
%���
�/�/���	��w��%�"29Nr)rr)r)7�__doc__rL�collections.abc�concurrent.futuresrQr�rErQr�r%r�rr$r�rr&r
r�r��ImportErrorr/rrrrrrr	r
rrr
�logr�__all__r#r$r$r;r)�objectr�rr"r,rGr[rdrg�Protocolrh�AbstractServerr��AbstractEventLooprrrrr�<module>sd

		
;


DoXZ�@sRdZddlZddlmZddlmZdZdZdZd	d
�Z	dd�Z
e�Zd
d�Z
dS)��N)�	get_ident�)�format_helpers�PENDING�	CANCELLED�FINISHEDcCst|jd�o|jdk	S)z�Check for a Future.

    This returns True when obj is a Future instance or is advertising
    itself as duck-type compatible by setting _asyncio_future_blocking.
    See comment in Future for more details.
    �_asyncio_future_blockingN)�hasattr�	__class__r	)�objrr�*/usr/lib/python3.8/asyncio/base_futures.py�isfutures�rcCs�t|�}|sd}dd�}|dkr2||dd�}n`|dkr`d�||dd�||dd��}n2|dkr�d�||dd�|d||d	d��}d
|�d�S)�#helper function for Future.__repr__�cSst�|d�S)Nr)r�_format_callback_source)�callbackrrr
�	format_cbsz$_format_callbacks.<locals>.format_cbrr�z{}, {}z{}, <{} more>, {}���zcb=[�])�len�format)�cb�sizerrrr
�_format_callbackss&�rc	Cs�|j��g}|jtkr�|jdk	r4|�d|j���nTt|�t�f}|tkrPd}n(t�|�zt
�|j�}W5t�	|�X|�d|���|j
r�|�t|j
��|jr�|jd}|�d|d�d|d	���|S)
rNz
exception=z...zresult=rzcreated at r�:r)�_state�lower�	_FINISHED�
_exception�append�idr�
_repr_running�add�discard�reprlib�repr�_result�
_callbacksr�_source_traceback)�future�info�key�result�framerrr
�_future_repr_info7s$



r0)�__all__r&�_threadrrr�_PENDING�
_CANCELLEDrrr�setr#r0rrrr
�<module>sX�$�@sxddlZddlZddlZddlmZddlmZddlmZGdd�dej�Z	Gdd	�d	ej
�ZGd
d�deej�Z
dS)�N�)�	protocols)�
transports)�loggercs�eZdZd0�fdd�	Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	e
jfdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Z�ZS)1�BaseSubprocessTransportNc
	s&t��|
�d|_||_||_d|_d|_d|_g|_t	�
�|_i|_d|_
|tjkr`d|jd<|tjkrtd|jd<|tjkr�d|jd<z"|jf||||||d�|��Wn|���YnX|jj|_|j|jd<|j���rt|ttf�r�|}n|d}t�d||j�|j�|�|	��dS)NFrr�)�args�shell�stdin�stdout�stderr�bufsize�
subprocesszprocess %r created: pid %s)�super�__init__�_closed�	_protocol�_loop�_proc�_pid�_returncode�
_exit_waiters�collections�deque�_pending_calls�_pipes�	_finishedr�PIPE�_start�close�pid�_extra�	get_debug�
isinstance�bytes�strr�debug�create_task�_connect_pipes)
�self�loop�protocolrr	r
rrr
�waiter�extra�kwargs�program��	__class__��-/usr/lib/python3.8/asyncio/base_subprocess.pyrsL






��

�z BaseSubprocessTransport.__init__cCs|jjg}|jr|�d�|jdk	r6|�d|j���|jdk	rT|�d|j���n |jdk	rj|�d�n
|�d�|j�d�}|dk	r�|�d|j���|j�d�}|j�d	�}|dk	r�||kr�|�d
|j���n6|dk	r�|�d|j���|dk	�r|�d|j���d
�	d�
|��S)N�closedzpid=zreturncode=�runningznot startedrzstdin=rrzstdout=stderr=zstdout=zstderr=z<{}>� )r1�__name__r�appendrrr�get�pipe�format�join)r)�infor
rrr2r2r3�__repr__7s,






z BaseSubprocessTransport.__repr__cKst�dS�N)�NotImplementedError)r)rr	r
rrr
r.r2r2r3rTszBaseSubprocessTransport._startcCs
||_dSr?�r)r)r+r2r2r3�set_protocolWsz$BaseSubprocessTransport.set_protocolcCs|jSr?rA�r)r2r2r3�get_protocolZsz$BaseSubprocessTransport.get_protocolcCs|jSr?)rrCr2r2r3�
is_closing]sz"BaseSubprocessTransport.is_closingcCs�|jr
dSd|_|j��D]}|dkr(q|j��q|jdk	r�|jdkr�|j��dkr�|j�	�rlt
�d|�z|j��Wnt
k
r�YnXdS)NTz$Close running child process: kill %r)rr�valuesr:rrr�pollrr"r�warning�kill�ProcessLookupError)r)�protor2r2r3r`s$
��
zBaseSubprocessTransport.closecCs&|js"|d|��t|d�|��dS)Nzunclosed transport )�source)r�ResourceWarningr)r)�_warnr2r2r3�__del__{szBaseSubprocessTransport.__del__cCs|jSr?)rrCr2r2r3�get_pid�szBaseSubprocessTransport.get_pidcCs|jSr?)rrCr2r2r3�get_returncode�sz&BaseSubprocessTransport.get_returncodecCs||jkr|j|jSdSdSr?)rr:)r)�fdr2r2r3�get_pipe_transport�s
z*BaseSubprocessTransport.get_pipe_transportcCs|jdkrt��dSr?)rrJrCr2r2r3�_check_proc�s
z#BaseSubprocessTransport._check_proccCs|��|j�|�dSr?)rTr�send_signal)r)�signalr2r2r3rU�sz#BaseSubprocessTransport.send_signalcCs|��|j��dSr?)rTr�	terminaterCr2r2r3rW�sz!BaseSubprocessTransport.terminatecCs|��|j��dSr?)rTrrIrCr2r2r3rI�szBaseSubprocessTransport.killc	
�spz�j}�j}|jdk	rB|��fdd�|j�IdH\}}|�jd<|jdk	rv|��fdd�|j�IdH\}}|�jd<|jdk	r�|��fdd�|j�IdH\}}|�jd<�jdk	s�t	�|�
�jj���jD]\}}|j
|f|��q�d�_Wn\t
tfk
�r�Yn`tk
�rL}z"|dk	�r<|���s<|�|�W5d}~XYn X|dk	�rl|���sl|�d�dS)Ncs
t�d�S)Nr)�WriteSubprocessPipeProtor2rCr2r3�<lambda>��z8BaseSubprocessTransport._connect_pipes.<locals>.<lambda>rcs
t�d�S)Nr��ReadSubprocessPipeProtor2rCr2r3rY�rZrcs
t�d�S)Nrr[r2rCr2r3rY�rZr)rrr
�connect_write_piperr�connect_read_piperr�AssertionError�	call_soonr�connection_made�
SystemExit�KeyboardInterrupt�
BaseException�	cancelled�
set_exception�
set_result)	r)r,�procr*�_r:�callback�data�excr2rCr3r(�sB

�


�


�

z&BaseSubprocessTransport._connect_pipescGs2|jdk	r|j�||f�n|jj|f|��dSr?)rr8rr`)r)�cbrkr2r2r3�_call�s
zBaseSubprocessTransport._callcCs|�|jj||�|��dSr?)rnr�pipe_connection_lost�_try_finish)r)rRrlr2r2r3�_pipe_connection_lost�sz-BaseSubprocessTransport._pipe_connection_lostcCs|�|jj||�dSr?)rnr�pipe_data_received)r)rRrkr2r2r3�_pipe_data_received�sz+BaseSubprocessTransport._pipe_data_receivedcCs�|dk	st|��|jdks$t|j��|j��r<t�d||�||_|jjdkrV||j_|�|j	j
�|��|jD]}|�
�sr|�|�qrd|_dS)Nz%r exited with return code %r)r_rrr"rr=r�
returncodernr�process_exitedrprrerg)r)rtr,r2r2r3�_process_exited�s

z'BaseSubprocessTransport._process_exitedc�s0|jdk	r|jS|j��}|j�|�|IdHS)zdWait until the process exit and return the process return code.

        This method is a coroutine.N)rr�
create_futurerr8)r)r,r2r2r3�_wait�s


zBaseSubprocessTransport._waitcCsH|jr
t�|jdkrdStdd�|j��D��rDd|_|�|jd�dS)Ncss|]}|dk	o|jVqdSr?)�disconnected)�.0�pr2r2r3�	<genexpr>�s�z6BaseSubprocessTransport._try_finish.<locals>.<genexpr>T)rr_r�allrrFrn�_call_connection_lostrCr2r2r3rp�s

�z#BaseSubprocessTransport._try_finishcCs*z|j�|�W5d|_d|_d|_XdSr?)rrr�connection_lost�r)rlr2r2r3r~�s
z-BaseSubprocessTransport._call_connection_lost)NN)r7�
__module__�__qualname__rr>rrBrDrEr�warnings�warnrOrPrQrSrTrUrWrIr(rnrqrsrvrxrpr~�
__classcell__r2r2r0r3r
s2�+&	rc@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)rXcCs||_||_d|_d|_dS)NF)rhrRr:ry)r)rhrRr2r2r3rsz!WriteSubprocessPipeProto.__init__cCs
||_dSr?)r:)r)�	transportr2r2r3rasz(WriteSubprocessPipeProto.connection_madecCs d|jj�d|j�d|j�d�S)N�<z fd=z pipe=�>)r1r7rRr:rCr2r2r3r>
sz!WriteSubprocessPipeProto.__repr__cCs d|_|j�|j|�d|_dS)NT)ryrhrqrRr�r2r2r3r
sz(WriteSubprocessPipeProto.connection_lostcCs|jj��dSr?)rhr�
pause_writingrCr2r2r3r�sz&WriteSubprocessPipeProto.pause_writingcCs|jj��dSr?)rhr�resume_writingrCr2r2r3r�sz'WriteSubprocessPipeProto.resume_writingN)	r7r�r�rrar>rr�r�r2r2r2r3rX�srXc@seZdZdd�ZdS)r\cCs|j�|j|�dSr?)rhrsrR)r)rkr2r2r3�
data_receivedsz%ReadSubprocessPipeProto.data_receivedN)r7r�r�r�r2r2r2r3r\sr\)rrr��rr�logr�SubprocessTransportr�BaseProtocolrX�Protocolr\r2r2r2r3�<module>sv�X��@sDddlZddlZddlmZddlmZdd�Zdd�Zd	d
�ZdS)�N�)�base_futures)�
coroutinescCsnt�|�}|jrd|d<|�dd|���t�|j�}|�dd|�d��|jdk	rj|�dd	|j���|S)
NZ
cancellingrrzname=%r�zcoro=<�>�z	wait_for=)	r�_future_repr_info�_must_cancel�insert�get_namer�_format_coroutine�_coro�_fut_waiter)�task�info�coro�r�(/usr/lib/python3.8/asyncio/base_tasks.py�_task_repr_infos

rcCs�g}t|jd�r|jj}n0t|jd�r0|jj}nt|jd�rF|jj}nd}|dk	r�|dk	r�|dk	rt|dkrlq�|d8}|�|�|j}qR|��nH|jdk	r�|jj	}|dk	r�|dk	r�|dkr�q�|d8}|�|j
�|j}q�|S)N�cr_frame�gi_frame�ag_framerr)�hasattrr
rrr�append�f_back�reverse�
_exception�
__traceback__�tb_frame�tb_next)r�limit�frames�f�tbrrr�_task_get_stacks6





r$cCs�g}t�}|j|d�D]Z}|j}|j}|j}|j}	||krN|�|�t�|�t�	|||j
�}
|�|||	|
f�q|j}|s�t
d|��|d�n2|dk	r�t
d|�d�|d�nt
d|�d�|d�tj||d�|dk	r�t�|j|�D]}
t
|
|dd�q�dS)	N)r z
No stack for )�filezTraceback for z (most recent call last):z
Stack for �)r%�end)�set�	get_stack�f_lineno�f_code�co_filename�co_name�add�	linecache�
checkcache�getline�	f_globalsrr�print�	traceback�
print_list�format_exception_only�	__class__)rr r%�extracted_list�checkedr"�lineno�co�filename�name�line�excrrr�_task_print_stack<s,

r@)r/r4r&rrrr$r@rrrr�<module>s#X5�@s2ddlZdZdZdZdZdZGdd�dej�ZdS)	�N���
gN@ic@s$eZdZe��Ze��Ze��ZdS)�
_SendfileModeN)�__name__�
__module__�__qualname__�enum�auto�UNSUPPORTED�
TRY_NATIVE�FALLBACK�rr�'/usr/lib/python3.8/asyncio/constants.pyrsr)r	�!LOG_THRESHOLD_FOR_CONNLOST_WRITES�ACCEPT_RETRY_DELAY�DEBUG_STACK_DEPTH�SSL_HANDSHAKE_TIMEOUT�!SENDFILE_FALLBACK_READBUFFER_SIZE�Enumrrrrr�<module>sX��@s�dZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZddl
mZddl
m
Z
ddlmZdd	�Ze�ZGd
d�d�Zdd
�Ze�Zdd�ZejejejjefZe�Zdd�Zdd�ZdS))�	coroutine�iscoroutinefunction�iscoroutine�N�)�base_futures)�	constants)�format_helpers)�loggercCs"tjjp tjjo ttj�d��S)NZPYTHONASYNCIODEBUG)�sys�flags�dev_mode�ignore_environment�bool�os�environ�get�rr�(/usr/lib/python3.8/asyncio/coroutines.py�_is_debug_modes�rc@s�eZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zddd
�Zdd�Z	e
dd��Ze
dd��Ze
dd��Z
dd�Ze
dd��Zdd�ZdS)�CoroWrapperNcCsZt�|�st�|�st|��||_||_t�t�	d��|_
t|dd�|_t|dd�|_
dS)Nr�__name__�__qualname__)�inspect�isgeneratorr�AssertionError�gen�funcr�
extract_stackr
�	_getframe�_source_traceback�getattrrr)�selfrrrrr�__init__'szCoroWrapper.__init__cCsJt|�}|jr4|jd}|d|d�d|d��7}d|jj�d|�d�S)	N���z
, created at r�:r�<� �>)�_format_coroutiner�	__class__r)r!�	coro_repr�framerrr�__repr__/s

zCoroWrapper.__repr__cCs|S�Nr�r!rrr�__iter__7szCoroWrapper.__iter__cCs|j�d�Sr-�r�sendr.rrr�__next__:szCoroWrapper.__next__cCs|j�|�Sr-r0)r!�valuerrrr1=szCoroWrapper.sendcCs|j�|||�Sr-)r�throw)r!�typer3�	tracebackrrrr4@szCoroWrapper.throwcCs
|j��Sr-)r�closer.rrrr7CszCoroWrapper.closecCs|jjSr-)r�gi_framer.rrrr8FszCoroWrapper.gi_framecCs|jjSr-)r�
gi_runningr.rrrr9JszCoroWrapper.gi_runningcCs|jjSr-)r�gi_coder.rrrr:NszCoroWrapper.gi_codecCs|Sr-rr.rrr�	__await__RszCoroWrapper.__await__cCs|jjSr-)r�gi_yieldfromr.rrrr<UszCoroWrapper.gi_yieldfromcCs�t|dd�}t|dd�}|dk	r||jdkr||�d�}t|dd�}|rrd�t�|��}|dtj�d	�7}||��7}t�	|�dS)
Nrr8r#z was never yielded fromrr�zB
Coroutine object created at (most recent call last, truncated to z last lines):
)
r �f_lasti�joinr6�format_listr�DEBUG_STACK_DEPTH�rstripr	�error)r!rr+�msg�tbrrr�__del__Ys
zCoroWrapper.__del__)N)NN)r�
__module__rr"r,r/r2r1r4r7�propertyr8r9r:r;r<rFrrrrr$s"





rcsztjdtdd�t���r�St���r.��nt����fdd���t�	���t
sX�}nt�����fdd��}t|_|S)z�Decorator to mark coroutines.

    If the coroutine is not yielded from before it is destroyed,
    an error message is logged.
    zN"@coroutine" decorator is deprecated since Python 3.8, use "async def" instead�)�
stacklevelc?sr�||�}t�|�s(t�|�s(t|t�r4|EdH}n:z
|j}Wntk
rRYnXt|tj	j
�rn|�EdH}|Sr-)r�isfuturerr�
isinstancerr;�AttributeError�collections�abc�	Awaitable)�args�kw�res�
await_meth�rrr�corozs
�
zcoroutine.<locals>.corocs@t�||��d�}|jr |jd=t�dd�|_t�dd�|_|S)NrUr#rr)rrr rr)rQ�kwds�w�rVrrr�wrapper�szcoroutine.<locals>.wrapper)�warnings�warn�DeprecationWarningrr�isgeneratorfunction�	functools�wraps�typesr�_DEBUG�
_is_coroutine)rrZrrYrris"�


rcCst�|�pt|dd�tkS)z6Return True if func is a decorated coroutine function.rcN)rrr rcrUrrrr�s
�rcCs@t|�tkrdSt|t�r8tt�dkr4t�t|��dSdSdS)z)Return True if obj is a coroutine object.T�dFN)r5�_iscoroutine_typecacherL�_COROUTINE_TYPES�len�add)�objrrrr�s
rc
stt|�st�t|t���fdd�}dd�}d}t|d�rF|jrF|j}nt|d�r\|jr\|j}||�}|s~||�rz|�d�S|Sd}t|d�r�|jr�|j}nt|d	�r�|jr�|j}|j	p�d
}d}��r0|j
dk	�r0t�|j
��s0t
�|j
�}|dk	r�|\}}|dk�r|�d|�d
|��}	n|�d|�d
|��}	n@|dk	�rV|j}|�d|�d
|��}	n|j}|�d|�d
|��}	|	S)Ncs`�rt�|jdi�St|d�r,|jr,|j}n*t|d�rD|jrD|j}ndt|�j�d�}|�d�S)Nrrrr%z without __name__>z())r�_format_callbackr�hasattrrrr5)rV�	coro_name��is_corowrapperrr�get_name�sz#_format_coroutine.<locals>.get_namecSsHz|jWStk
rBz|jWYStk
r<YYdSXYnXdS)NF)�
cr_runningrMr9)rVrrr�
is_running�sz%_format_coroutine.<locals>.is_running�cr_coder:z runningr8�cr_framez<empty co_filename>rz done, defined at r$z running, defined at z running at )rrrLrrkrrr:r8rs�co_filenamerrr^r�_get_function_source�f_lineno�co_firstlineno)
rVrorq�	coro_coderl�
coro_frame�filename�lineno�sourcer*rrmrr(�sL
	

�
�

r() �__all__�collections.abcrNr_rrr
r6rar[r=rrr�logr	rrbrr�objectrcr�
CoroutineType�
GeneratorTyperO�	Coroutinerf�setrerr(rrrr�<module>s2E8�X�m�@s|dZdZddlZddlZddlZddlZddlZddlZddlm	Z	ddlm
Z
Gdd�d�ZGd	d
�d
e�ZGdd�d�Z
Gd
d�d�ZGdd�d�ZGdd�de�Zdae��ZGdd�dej�Ze�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Z d)d*�Z!eZ"eZ#eZ$eZ%zdd+l&mZmZmZmZWne'k
�rfYnXeZ(eZ)eZ*eZ+dS),z!Event loop and event loop policy.)�AbstractEventLoopPolicy�AbstractEventLoop�AbstractServer�Handle�TimerHandle�get_event_loop_policy�set_event_loop_policy�get_event_loop�set_event_loop�new_event_loop�get_child_watcher�set_child_watcher�_set_running_loop�get_running_loop�_get_running_loop�N�)�format_helpers)�
exceptionsc@sFeZdZdZdZddd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)rz1Object returned by callback registration methods.)�	_callback�_args�
_cancelled�_loop�_source_traceback�_repr�__weakref__�_contextNcCs\|dkrt��}||_||_||_||_d|_d|_|j��rRt	�
t�d��|_
nd|_
dS)NFr)�contextvars�copy_contextrrrrrr�	get_debugr�
extract_stack�sys�	_getframer)�self�callback�args�loop�context�r'�$/usr/lib/python3.8/asyncio/events.py�__init__ s
�zHandle.__init__cCsl|jjg}|jr|�d�|jdk	r:|�t�|j|j��|jrh|jd}|�d|d�d|d���|S)N�	cancelled���zcreated at r�:r)	�	__class__�__name__r�appendrr�_format_callback_sourcerr)r"�info�framer'r'r(�
_repr_info/s


�
zHandle._repr_infocCs(|jdk	r|jS|��}d�d�|��S)Nz<{}>� )rr3�format�join)r"r1r'r'r(�__repr__;s
zHandle.__repr__cCs0|js,d|_|j��r t|�|_d|_d|_dS�NT)rrr�reprrrr�r"r'r'r(�cancelAs

z
Handle.cancelcCs|jS�N)rr:r'r'r(r*LszHandle.cancelledc
Cs�z|jj|jf|j��Wn|ttfk
r4�Yndtk
r�}zFt�|j|j�}d|��}|||d�}|j	rz|j	|d<|j
�|�W5d}~XYnXd}dS)NzException in callback )�message�	exception�handle�source_traceback)r�runrr�
SystemExit�KeyboardInterrupt�
BaseExceptionrr0rr�call_exception_handler)r"�exc�cb�msgr&r'r'r(�_runOs$�
�
zHandle._run)N)r.�
__module__�__qualname__�__doc__�	__slots__r)r3r7r;r*rIr'r'r'r(rs
rcs�eZdZdZddgZd�fdd�	Z�fdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
�fdd�Zdd�Z�ZS)rz7Object returned by timed callback registration methods.�
_scheduled�_whenNcs<|dk	st�t��||||�|jr,|jd=||_d|_dS)Nr+F)�AssertionError�superr)rrOrN)r"�whenr#r$r%r&�r-r'r(r)hszTimerHandle.__init__cs0t���}|jrdnd}|�|d|j���|S)N�rzwhen=)rQr3r�insertrO)r"r1�posrSr'r(r3ps
zTimerHandle._repr_infocCs
t|j�Sr<)�hashrOr:r'r'r(�__hash__vszTimerHandle.__hash__cCs|j|jkSr<�rO�r"�otherr'r'r(�__lt__yszTimerHandle.__lt__cCs|j|jkrdS|�|�Sr8�rO�__eq__rZr'r'r(�__le__|szTimerHandle.__le__cCs|j|jkSr<rYrZr'r'r(�__gt__�szTimerHandle.__gt__cCs|j|jkrdS|�|�Sr8r]rZr'r'r(�__ge__�szTimerHandle.__ge__cCs>t|t�r:|j|jko8|j|jko8|j|jko8|j|jkStSr<)�
isinstancerrOrrr�NotImplementedrZr'r'r(r^�s

�
�
�zTimerHandle.__eq__cCs|�|�}|tkrtS|Sr<)r^rc)r"r[�equalr'r'r(�__ne__�s
zTimerHandle.__ne__cs |js|j�|�t���dSr<)rr�_timer_handle_cancelledrQr;r:rSr'r(r;�szTimerHandle.cancelcCs|jS)z�Return a scheduled callback time.

        The time is an absolute timestamp, using the same time
        reference as loop.time().
        rYr:r'r'r(rR�szTimerHandle.when)N)r.rJrKrLrMr)r3rXr\r_r`rar^rer;rR�
__classcell__r'r'rSr(rcsrc@sPeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�ZdS)rz,Abstract server returned by create_server().cCst�dS)z5Stop serving.  This leaves existing connections open.N��NotImplementedErrorr:r'r'r(�close�szAbstractServer.closecCst�dS)z4Get the event loop the Server object is attached to.Nrhr:r'r'r(�get_loop�szAbstractServer.get_loopcCst�dS)z3Return True if the server is accepting connections.Nrhr:r'r'r(�
is_serving�szAbstractServer.is_servingc�st�dS)z�Start accepting connections.

        This method is idempotent, so it can be called when
        the server is already being serving.
        Nrhr:r'r'r(�
start_serving�szAbstractServer.start_servingc�st�dS)z�Start accepting connections until the coroutine is cancelled.

        The server is closed when the coroutine is cancelled.
        Nrhr:r'r'r(�
serve_forever�szAbstractServer.serve_foreverc�st�dS)z*Coroutine to wait until service is closed.Nrhr:r'r'r(�wait_closed�szAbstractServer.wait_closedc�s|Sr<r'r:r'r'r(�
__aenter__�szAbstractServer.__aenter__c�s|��|��IdHdSr<)rjro)r"rFr'r'r(�	__aexit__�szAbstractServer.__aexit__N)r.rJrKrLrjrkrlrmrnrorprqr'r'r'r(r�src@sVeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�dd�Zd d!�Zd"d#�Zd$d%�Zd&d&d&d&d'�d(d)�Zdud*d+�Zdvdd&d&d&ddddddd,�
d-d.�Zdwejejdd/ddddd0d1�	d2d3�Zdxd0d4�d5d6�Zd7ddd8�d9d:�Zdyddddd;�d<d=�Zdzdd/ddd0d>�d?d@�Zd{d&d&d&dddddA�dBdC�Z dDdE�Z!dFdG�Z"e#j$e#j$e#j$dH�dIdJ�Z%e#j$e#j$e#j$dH�dKdL�Z&dMdN�Z'dOdP�Z(dQdR�Z)dSdT�Z*dUdV�Z+dWdX�Z,dYdZ�Z-d[d\�Z.d]d^�Z/d|dd4�d_d`�Z0dadb�Z1dcdd�Z2dedf�Z3dgdh�Z4didj�Z5dkdl�Z6dmdn�Z7dodp�Z8dqdr�Z9dsdt�Z:dS)}rzAbstract event loop.cCst�dS)z*Run the event loop until stop() is called.Nrhr:r'r'r(�run_forever�szAbstractEventLoop.run_forevercCst�dS)zpRun the event loop until a Future is done.

        Return the Future's result, or raise its exception.
        Nrh)r"�futurer'r'r(�run_until_complete�sz$AbstractEventLoop.run_until_completecCst�dS)z�Stop the event loop as soon as reasonable.

        Exactly how soon that is may depend on the implementation, but
        no more I/O callbacks should be scheduled.
        Nrhr:r'r'r(�stop�szAbstractEventLoop.stopcCst�dS)z3Return whether the event loop is currently running.Nrhr:r'r'r(�
is_running�szAbstractEventLoop.is_runningcCst�dS)z*Returns True if the event loop was closed.Nrhr:r'r'r(�	is_closed�szAbstractEventLoop.is_closedcCst�dS)z�Close the loop.

        The loop should not be running.

        This is idempotent and irreversible.

        No other methods should be called after this one.
        Nrhr:r'r'r(rj�s	zAbstractEventLoop.closec�st�dS)z,Shutdown all active asynchronous generators.Nrhr:r'r'r(�shutdown_asyncgens�sz$AbstractEventLoop.shutdown_asyncgenscCst�dS)z3Notification that a TimerHandle has been cancelled.Nrh)r"r?r'r'r(rf�sz)AbstractEventLoop._timer_handle_cancelledcGs|jd|f|��S)Nr)�
call_later�r"r#r$r'r'r(�	call_soonszAbstractEventLoop.call_sooncGst�dSr<rh)r"�delayr#r$r'r'r(ryszAbstractEventLoop.call_latercGst�dSr<rh)r"rRr#r$r'r'r(�call_atszAbstractEventLoop.call_atcCst�dSr<rhr:r'r'r(�timeszAbstractEventLoop.timecCst�dSr<rhr:r'r'r(�
create_futureszAbstractEventLoop.create_futureN)�namecCst�dSr<rh)r"�coror�r'r'r(�create_taskszAbstractEventLoop.create_taskcGst�dSr<rhrzr'r'r(�call_soon_threadsafesz&AbstractEventLoop.call_soon_threadsafecGst�dSr<rh)r"�executor�funcr$r'r'r(�run_in_executorsz!AbstractEventLoop.run_in_executorcCst�dSr<rh)r"r�r'r'r(�set_default_executorsz&AbstractEventLoop.set_default_executorr)�family�type�proto�flagsc�st�dSr<rh)r"�host�portr�r�r�r�r'r'r(�getaddrinfo#szAbstractEventLoop.getaddrinfoc�st�dSr<rh)r"�sockaddrr�r'r'r(�getnameinfo'szAbstractEventLoop.getnameinfo)
�sslr�r�r��sock�
local_addr�server_hostname�ssl_handshake_timeout�happy_eyeballs_delay�
interleavec
�st�dSr<rh)r"�protocol_factoryr�r�r�r�r�r�r�r�r�r�r�r�r'r'r(�create_connection*sz#AbstractEventLoop.create_connection�dT)	r�r�r��backlogr��
reuse_address�
reuse_portr�rmc	
�st�dS)adA coroutine which creates a TCP server bound to host and port.

        The return value is a Server object which can be used to stop
        the service.

        If host is an empty string or None all interfaces are assumed
        and a list of multiple sockets will be returned (most likely
        one for IPv4 and another one for IPv6). The host parameter can also be
        a sequence (e.g. list) of hosts to bind to.

        family can be set to either AF_INET or AF_INET6 to force the
        socket to use IPv4 or IPv6. If not set it will be determined
        from host (defaults to AF_UNSPEC).

        flags is a bitmask for getaddrinfo().

        sock can optionally be specified in order to use a preexisting
        socket object.

        backlog is the maximum number of queued connections passed to
        listen() (defaults to 100).

        ssl can be set to an SSLContext to enable SSL over the
        accepted connections.

        reuse_address tells the kernel to reuse a local socket in
        TIME_WAIT state, without waiting for its natural timeout to
        expire. If not specified will automatically be set to True on
        UNIX.

        reuse_port tells the kernel to allow this endpoint to be bound to
        the same port as other existing endpoints are bound to, so long as
        they all set this flag when being created. This option is not
        supported on Windows.

        ssl_handshake_timeout is the time in seconds that an SSL server
        will wait for completion of the SSL handshake before aborting the
        connection. Default is 60s.

        start_serving set to True (default) causes the created server
        to start accepting connections immediately.  When set to False,
        the user should await Server.start_serving() or Server.serve_forever()
        to make the server to start accepting connections.
        Nrh)
r"r�r�r�r�r�r�r�r�r�r�r�rmr'r'r(�
create_server3s3zAbstractEventLoop.create_server)�fallbackc�st�dS)zRSend a file through a transport.

        Return an amount of sent bytes.
        Nrh)r"�	transport�file�offset�countr�r'r'r(�sendfilehszAbstractEventLoop.sendfileF)�server_sider�r�c�st�dS)z|Upgrade a transport to TLS.

        Return a new transport that *protocol* should start using
        immediately.
        Nrh)r"r��protocol�
sslcontextr�r�r�r'r'r(�	start_tlsps	zAbstractEventLoop.start_tls)r�r�r�r�c�st�dSr<rh)r"r��pathr�r�r�r�r'r'r(�create_unix_connection{sz(AbstractEventLoop.create_unix_connection)r�r�r�r�rmc�st�dS)a�A coroutine which creates a UNIX Domain Socket server.

        The return value is a Server object, which can be used to stop
        the service.

        path is a str, representing a file systsem path to bind the
        server socket to.

        sock can optionally be specified in order to use a preexisting
        socket object.

        backlog is the maximum number of queued connections passed to
        listen() (defaults to 100).

        ssl can be set to an SSLContext to enable SSL over the
        accepted connections.

        ssl_handshake_timeout is the time in seconds that an SSL server
        will wait for the SSL handshake to complete (defaults to 60s).

        start_serving set to True (default) causes the created server
        to start accepting connections immediately.  When set to False,
        the user should await Server.start_serving() or Server.serve_forever()
        to make the server to start accepting connections.
        Nrh)r"r�r�r�r�r�r�rmr'r'r(�create_unix_server�sz$AbstractEventLoop.create_unix_server)r�r�r�r�r��allow_broadcastr�c�st�dS)a�A coroutine which creates a datagram endpoint.

        This method will try to establish the endpoint in the background.
        When successful, the coroutine returns a (transport, protocol) pair.

        protocol_factory must be a callable returning a protocol instance.

        socket family AF_INET, socket.AF_INET6 or socket.AF_UNIX depending on
        host (or family if specified), socket type SOCK_DGRAM.

        reuse_address tells the kernel to reuse a local socket in
        TIME_WAIT state, without waiting for its natural timeout to
        expire. If not specified it will automatically be set to True on
        UNIX.

        reuse_port tells the kernel to allow this endpoint to be bound to
        the same port as other existing endpoints are bound to, so long as
        they all set this flag when being created. This option is not
        supported on Windows and some UNIX's. If the
        :py:data:`~socket.SO_REUSEPORT` constant is not defined then this
        capability is unsupported.

        allow_broadcast tells the kernel to allow this endpoint to send
        messages to the broadcast address.

        sock can optionally be specified in order to use a preexisting
        socket object.
        Nrh)r"r�r��remote_addrr�r�r�r�r�r�r�r'r'r(�create_datagram_endpoint�s!z*AbstractEventLoop.create_datagram_endpointc�st�dS)aRegister read pipe in event loop. Set the pipe to non-blocking mode.

        protocol_factory should instantiate object with Protocol interface.
        pipe is a file-like object.
        Return pair (transport, protocol), where transport supports the
        ReadTransport interface.Nrh�r"r��piper'r'r(�connect_read_pipe�sz#AbstractEventLoop.connect_read_pipec�st�dS)aRegister write pipe in event loop.

        protocol_factory should instantiate object with BaseProtocol interface.
        Pipe is file-like object already switched to nonblocking.
        Return pair (transport, protocol), where transport support
        WriteTransport interface.Nrhr�r'r'r(�connect_write_pipe�sz$AbstractEventLoop.connect_write_pipe)�stdin�stdout�stderrc�st�dSr<rh)r"r��cmdr�r�r��kwargsr'r'r(�subprocess_shell�sz"AbstractEventLoop.subprocess_shellc�st�dSr<rh)r"r�r�r�r�r$r�r'r'r(�subprocess_exec�sz!AbstractEventLoop.subprocess_execcGst�dSr<rh�r"�fdr#r$r'r'r(�
add_reader�szAbstractEventLoop.add_readercCst�dSr<rh�r"r�r'r'r(�
remove_reader�szAbstractEventLoop.remove_readercGst�dSr<rhr�r'r'r(�
add_writer�szAbstractEventLoop.add_writercCst�dSr<rhr�r'r'r(�
remove_writer�szAbstractEventLoop.remove_writerc�st�dSr<rh)r"r��nbytesr'r'r(�	sock_recvszAbstractEventLoop.sock_recvc�st�dSr<rh)r"r��bufr'r'r(�sock_recv_intosz AbstractEventLoop.sock_recv_intoc�st�dSr<rh)r"r��datar'r'r(�sock_sendallszAbstractEventLoop.sock_sendallc�st�dSr<rh)r"r��addressr'r'r(�sock_connectszAbstractEventLoop.sock_connectc�st�dSr<rh)r"r�r'r'r(�sock_acceptszAbstractEventLoop.sock_acceptc�st�dSr<rh)r"r�r�r�r�r�r'r'r(�
sock_sendfileszAbstractEventLoop.sock_sendfilecGst�dSr<rh)r"�sigr#r$r'r'r(�add_signal_handlersz$AbstractEventLoop.add_signal_handlercCst�dSr<rh)r"r�r'r'r(�remove_signal_handlersz'AbstractEventLoop.remove_signal_handlercCst�dSr<rh)r"�factoryr'r'r(�set_task_factorysz"AbstractEventLoop.set_task_factorycCst�dSr<rhr:r'r'r(�get_task_factory"sz"AbstractEventLoop.get_task_factorycCst�dSr<rhr:r'r'r(�get_exception_handler'sz'AbstractEventLoop.get_exception_handlercCst�dSr<rh)r"�handlerr'r'r(�set_exception_handler*sz'AbstractEventLoop.set_exception_handlercCst�dSr<rh�r"r&r'r'r(�default_exception_handler-sz+AbstractEventLoop.default_exception_handlercCst�dSr<rhr�r'r'r(rE0sz(AbstractEventLoop.call_exception_handlercCst�dSr<rhr:r'r'r(r5szAbstractEventLoop.get_debugcCst�dSr<rh)r"�enabledr'r'r(�	set_debug8szAbstractEventLoop.set_debug)r)NN)NN)rN)N)N)NN)rN);r.rJrKrLrrrtrurvrwrjrxrfr{ryr}r~rr�r�r�r�r�r�r��socket�	AF_UNSPEC�
AI_PASSIVEr�r�r�r�r�r�r�r��
subprocess�PIPEr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rErr�r'r'r'r(r�s��
��
��5�	�����!��%
���rc@s8eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
rz-Abstract policy for accessing the event loop.cCst�dS)a:Get the event loop for the current context.

        Returns an event loop object implementing the BaseEventLoop interface,
        or raises an exception in case no event loop has been set for the
        current context and the current policy does not specify to create one.

        It should never return None.Nrhr:r'r'r(r?sz&AbstractEventLoopPolicy.get_event_loopcCst�dS)z3Set the event loop for the current context to loop.Nrh�r"r%r'r'r(r	Isz&AbstractEventLoopPolicy.set_event_loopcCst�dS)z�Create and return a new event loop object according to this
        policy's rules. If there's need to set this loop as the event loop for
        the current context, set_event_loop must be called explicitly.Nrhr:r'r'r(r
Msz&AbstractEventLoopPolicy.new_event_loopcCst�dS)z$Get the watcher for child processes.Nrhr:r'r'r(rUsz)AbstractEventLoopPolicy.get_child_watchercCst�dS)z$Set the watcher for child processes.Nrh)r"�watcherr'r'r(rYsz)AbstractEventLoopPolicy.set_child_watcherN)	r.rJrKrLrr	r
rrr'r'r'r(r<s
rc@sFeZdZdZdZGdd�dej�Zdd�Zdd�Z	d	d
�Z
dd�ZdS)
�BaseDefaultEventLoopPolicya�Default policy implementation for accessing the event loop.

    In this policy, each thread has its own event loop.  However, we
    only automatically create an event loop by default for the main
    thread; other threads by default have no event loop.

    Other policies may have different rules (e.g. a single global
    event loop, or automatically creating an event loop per thread, or
    using some other notion of context to which an event loop is
    associated).
    Nc@seZdZdZdZdS)z!BaseDefaultEventLoopPolicy._LocalNF)r.rJrKr�_set_calledr'r'r'r(�_Localmsr�cCs|��|_dSr<)r��_localr:r'r'r(r)qsz#BaseDefaultEventLoopPolicy.__init__cCsX|jjdkr2|jjs2tt��tj�r2|�|���|jjdkrPt	dt��j
��|jjS)zvGet the event loop for the current context.

        Returns an instance of EventLoop or raises an exception.
        Nz,There is no current event loop in thread %r.)r�rr�rb�	threading�current_thread�_MainThreadr	r
�RuntimeErrorr�r:r'r'r(rts���z)BaseDefaultEventLoopPolicy.get_event_loopcCs*d|j_|dkst|t�st�||j_dS)zSet the event loop.TN)r�r�rbrrPrr�r'r'r(r	�sz)BaseDefaultEventLoopPolicy.set_event_loopcCs|��S)zvCreate a new event loop.

        You must call set_event_loop() to make this the current event
        loop.
        )�
_loop_factoryr:r'r'r(r
�sz)BaseDefaultEventLoopPolicy.new_event_loop)r.rJrKrLr�r��localr�r)rr	r
r'r'r'r(r�^sr�c@seZdZdZdS)�_RunningLoop)NNN)r.rJrK�loop_pidr'r'r'r(r��sr�cCst�}|dkrtd��|S)zrReturn the running event loop.  Raise a RuntimeError if there is none.

    This function is thread-specific.
    Nzno running event loop)rr��r%r'r'r(r�srcCs&tj\}}|dk	r"|t��kr"|SdS)z�Return the running event loop or None.

    This is a low-level function intended to be used by event loops.
    This function is thread-specific.
    N)�
_running_loopr��os�getpid)�running_loop�pidr'r'r(r�s
rcCs|t��ft_dS)z�Set the running event loop.

    This is a low-level function intended to be used by event loops.
    This function is thread-specific.
    N)r�r�r�r�r�r'r'r(r
�sr
c	Cs.t� tdkr ddlm}|�aW5QRXdS)Nr��DefaultEventLoopPolicy)�_lock�_event_loop_policy�r�r�r'r'r(�_init_event_loop_policy�sr�cCstdkrt�tS)z"Get the current event loop policy.N)r�r�r'r'r'r(r�srcCs|dkst|t�st�|adS)zZSet the current event loop policy.

    If policy is None, the default policy is restored.N)rbrrPr�)�policyr'r'r(r�srcCst�}|dk	r|St���S)aGReturn an asyncio event loop.

    When called from a coroutine or a callback (e.g. scheduled with call_soon
    or similar API), this function will always return the running event loop.

    If there is no running event loop set, the function will return
    the result of `get_event_loop_policy().get_event_loop()` call.
    N)rrr)�current_loopr'r'r(r�s
rcCst��|�dS)zCEquivalent to calling get_event_loop_policy().set_event_loop(loop).N)rr	r�r'r'r(r	�sr	cCs
t���S)z?Equivalent to calling get_event_loop_policy().new_event_loop().)rr
r'r'r'r(r
�sr
cCs
t���S)zBEquivalent to calling get_event_loop_policy().get_child_watcher().)rrr'r'r'r(r�srcCst��|�S)zMEquivalent to calling
    get_event_loop_policy().set_child_watcher(watcher).)rr)r�r'r'r(r�sr)rr
rr),rL�__all__rr�r�r�r r�r�rrrrrrrr�r��Lockr�r�r�r�rrr
r�rrrr	r
rr�_py__get_running_loop�_py__set_running_loop�_py_get_running_loop�_py_get_event_loop�_asyncio�ImportError�_c__get_running_loop�_c__set_running_loop�_c_get_running_loop�_c_get_event_loopr'r'r'r(�<module>sXJ@*q"9
	X�	�@sldZdZGdd�de�ZGdd�de�ZGdd�de�ZGdd	�d	e�ZGd
d�de	�Z
Gdd
�d
e�ZdS)zasyncio exceptions.)�CancelledError�InvalidStateError�TimeoutError�IncompleteReadError�LimitOverrunError�SendfileNotAvailableErrorc@seZdZdZdS)rz!The Future or Task was cancelled.N��__name__�
__module__�__qualname__�__doc__�rr�(/usr/lib/python3.8/asyncio/exceptions.pyr	src@seZdZdZdS)rz*The operation exceeded the given deadline.Nrrrrr
r
src@seZdZdZdS)rz+The operation is not allowed in this state.Nrrrrr
rsrc@seZdZdZdS)rz~Sendfile syscall is not available.

    Raised if OS does not support sendfile syscall for given socket or
    file type.
    Nrrrrr
rsrcs(eZdZdZ�fdd�Zdd�Z�ZS)rz�
    Incomplete read error. Attributes:

    - partial: read bytes string before the end of stream was reached
    - expected: total number of expected bytes (or None if unknown)
    cs@|dkrdnt|�}t��t|��d|�d��||_||_dS)N�	undefinedz bytes read on a total of z expected bytes)�repr�super�__init__�len�partial�expected)�selfrr�
r_expected��	__class__rr
r$szIncompleteReadError.__init__cCst|�|j|jffS�N)�typerr�rrrr
�
__reduce__+szIncompleteReadError.__reduce__�rr	r
rrr�
__classcell__rrrr
rsrcs(eZdZdZ�fdd�Zdd�Z�ZS)rz�Reached the buffer limit while looking for a separator.

    Attributes:
    - consumed: total number of to be consumed bytes.
    cst��|�||_dSr)rr�consumed)r�messagerrrr
r5szLimitOverrunError.__init__cCst|�|jd|jffS)N�)r�argsrrrrr
r9szLimitOverrunError.__reduce__rrrrr
r/srN)r�__all__�
BaseExceptionr�	Exceptionrr�RuntimeErrorr�EOFErrorrrrrrr
�<module>sX	�@sdddlZddlZddlZddlZddlZddlmZdd�Zdd�Zdd	�Z	ddd�Z
dd
d�ZdS)�N�)�	constantscCsVt�|�}t�|�r&|j}|j|jfSt|tj�r<t	|j
�St|tj�rRt	|j
�SdS�N)�inspect�unwrap�
isfunction�__code__�co_filename�co_firstlineno�
isinstance�	functools�partial�_get_function_source�func�
partialmethod)r�code�r�,/usr/lib/python3.8/asyncio/format_helpers.pyr
s



rcCs8t||d�}t|�}|r4|d|d�d|d��7}|S)Nz at r�:r)�_format_callbackr)r�args�	func_repr�sourcerrr�_format_callback_sources
rcCsHg}|r|�dd�|D��|r8|�dd�|��D��d�d�|��S)z�Format function arguments and keyword arguments.

    Special case for a single parameter: ('hello',) is formatted as ('hello').
    css|]}t�|�VqdSr��reprlib�repr)�.0�argrrr�	<genexpr>&sz*_format_args_and_kwargs.<locals>.<genexpr>css&|]\}}|�dt�|���VqdS)�=Nr)r�k�vrrrr(sz({})z, )�extend�items�format�join)r�kwargsr$rrr�_format_args_and_kwargssr(�cCs�t|tj�r.t||�|}t|j|j|j|�St|d�rF|j	rF|j	}n t|d�r^|j
r^|j
}nt|�}|t||�7}|r�||7}|S)N�__qualname__�__name__)rrr
r(rrr�keywords�hasattrr*r+r)rrr'�suffixrrrrr,srcCsD|dkrt��j}|dkr tj}tjjt�|�|dd�}|�	�|S)zlReplacement for traceback.extract_stack() that only does the
    necessary work for asyncio debug mode.
    NF)�limit�lookup_lines)
�sys�	_getframe�f_backr�DEBUG_STACK_DEPTH�	traceback�StackSummary�extract�
walk_stack�reverse)�fr/�stackrrr�
extract_stack>s
�r<)r))NN)rrrr1r5r)rrrr(rr<rrrr�<module>s
X�+�@s�dZdZddlZddlZddlZddlZddlmZddlm	Z	ddlm
Z
ddlmZejZej
Z
ejZejZejdZGd	d
�d
�ZeZdd�Zd
d�Zdd�Zdd�Zdd�Zdd�Zdd�dd�ZzddlZWnek
r�YnXejZZdS)z.A Future class similar to the one in PEP 3148.)�Future�wrap_future�isfuture�N�)�base_futures)�events)�
exceptions)�format_helpersc@s�eZdZdZeZdZdZdZdZ	dZ
dZdd�dd�Ze
jZdd�Zd	d
�Zedd��Zejd
d��Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�dd�Zdd �Zd!d"�Zd#d$�Zd%d&�Z e Z!dS)'ra,This class is *almost* compatible with concurrent.futures.Future.

    Differences:

    - This class is not thread-safe.

    - result() and exception() do not take a timeout argument and
      raise an exception when the future isn't done yet.

    - Callbacks registered with add_done_callback() are always called
      via the event loop's call_soon().

    - This class is not compatible with the wait() and as_completed()
      methods in the concurrent.futures package.

    (In Python 3.4 or later we may be able to unify the implementations.)
    NF��loopcCs@|dkrt��|_n||_g|_|j��r<t�t�d��|_	dS)z�Initialize the future.

        The optional event_loop argument allows explicitly setting the event
        loop object used by the future. If it's not provided, the future uses
        the default event loop.
        Nr)
r�get_event_loop�_loop�
_callbacks�	get_debugr	�
extract_stack�sys�	_getframe�_source_traceback��selfr�r�%/usr/lib/python3.8/asyncio/futures.py�__init__Ds
�zFuture.__init__cCsd�|jjd�|����S)Nz<{} {}>� )�format�	__class__�__name__�join�
_repr_info�rrrr�__repr__Vs
�zFuture.__repr__cCsF|js
dS|j}|jj�d�||d�}|jr6|j|d<|j�|�dS)Nz exception was never retrieved)�message�	exception�future�source_traceback)�_Future__log_traceback�
_exceptionrrrr
�call_exception_handler)r�exc�contextrrr�__del__Zs�
zFuture.__del__cCs|jS�N)r%rrrr�_log_tracebackjszFuture._log_tracebackcCst|�rtd��d|_dS)Nz'_log_traceback can only be set to FalseF)�bool�
ValueErrorr%)r�valrrrr,nscCs|j}|dkrtd��|S)z-Return the event loop the Future is bound to.Nz!Future object is not initialized.)r
�RuntimeErrorrrrr�get_looptszFuture.get_loopcCs&d|_|jtkrdSt|_|��dS)z�Cancel the future and schedule callbacks.

        If the future is already done or cancelled, return False.  Otherwise,
        change the future's state to cancelled, schedule the callbacks and
        return True.
        FT)r%�_state�_PENDING�
_CANCELLED�_Future__schedule_callbacksrrrr�cancel{s
z
Future.cancelcCsH|jdd�}|sdSg|jdd�<|D]\}}|jj|||d�q(dS)z�Internal: Ask the event loop to call all callbacks.

        The callbacks are scheduled to be called as soon as possible. Also
        clears the callback list.
        N�r))rr
�	call_soon)r�	callbacks�callback�ctxrrr�__schedule_callbacks�szFuture.__schedule_callbackscCs
|jtkS)z(Return True if the future was cancelled.)r2r4rrrr�	cancelled�szFuture.cancelledcCs
|jtkS)z�Return True if the future is done.

        Done means either that a result / exception are available, or that the
        future was cancelled.
        )r2r3rrrr�done�szFuture.donecCs@|jtkrtj�|jtkr$t�d��d|_|jdk	r:|j�|jS)aReturn the result this future represents.

        If the future has been cancelled, raises CancelledError.  If the
        future's result isn't yet available, raises InvalidStateError.  If
        the future is done and has an exception set, this exception is raised.
        zResult is not ready.FN)	r2r4r�CancelledError�	_FINISHED�InvalidStateErrorr%r&�_resultrrrr�result�s



z
Future.resultcCs0|jtkrtj�|jtkr$t�d��d|_|jS)a&Return the exception that was set on this future.

        The exception (or None if no exception was set) is returned only if
        the future is done.  If the future has been cancelled, raises
        CancelledError.  If the future isn't done yet, raises
        InvalidStateError.
        zException is not set.F)r2r4rr?r@rAr%r&rrrrr"�s


zFuture.exceptionr7cCsB|jtkr|jj|||d�n |dkr.t��}|j�||f�dS)z�Add a callback to be run when the future becomes done.

        The callback is called with a single argument - the future object. If
        the future is already done when this is called, the callback is
        scheduled with call_soon.
        r7N)r2r3r
r8�contextvars�copy_contextr�append)r�fnr)rrr�add_done_callback�s

zFuture.add_done_callbackcs<�fdd�|jD�}t|j�t|�}|r8||jdd�<|S)z}Remove all instances of a callback from the "call when done" list.

        Returns the number of callbacks removed.
        cs g|]\}}|�kr||f�qSrr)�.0�fr;�rGrr�
<listcomp>�s�z/Future.remove_done_callback.<locals>.<listcomp>N)r�len)rrG�filtered_callbacks�
removed_countrrKr�remove_done_callback�s
�zFuture.remove_done_callbackcCs8|jtkr t�|j�d|����||_t|_|��dS)z�Mark the future done and set its result.

        If the future is already done when this method is called, raises
        InvalidStateError.
        �: N)r2r3rrArBr@r5)rrCrrr�
set_result�s

zFuture.set_resultcCsb|jtkr t�|j�d|����t|t�r0|�}t|�tkrDtd��||_t	|_|�
�d|_dS)z�Mark the future done and set an exception.

        If the future is already done when this method is called, raises
        InvalidStateError.
        rQzPStopIteration interacts badly with generators and cannot be raised into a FutureTN)r2r3rrA�
isinstance�type�
StopIteration�	TypeErrorr&r@r5r%)rr"rrr�
set_exception�s

zFuture.set_exceptionccs,|��sd|_|V|��s$td��|��S)NTzawait wasn't used with future)r>�_asyncio_future_blockingr0rCrrrr�	__await__szFuture.__await__)"r�
__module__�__qualname__�__doc__r3r2rBr&r
rrXr%rr�_future_repr_inforr r*�propertyr,�setterr1r6r5r=r>rCr"rHrPrRrWrY�__iter__rrrrrs:

rcCs,z
|j}Wntk
rYnX|�S|jSr+)r1�AttributeErrorr
)�futr1rrr�	_get_loops
rccCs|��rdS|�|�dS)z?Helper setting the result only if the future was not cancelled.N)r=rR)rbrCrrr�_set_result_unless_cancelledsrdcCsXt|�}|tjjkr tj|j�S|tjjkr8tj|j�S|tjjkrPtj|j�S|SdSr+)rT�
concurrent�futuresr?r�args�TimeoutErrorrA)r(�	exc_classrrr�_convert_future_exc#srjcCs^|��st�|��r|��|��s(dS|��}|dk	rH|�t|��n|��}|�	|�dS)z8Copy state from a future to a concurrent.futures.Future.N)
r>�AssertionErrorr=r6�set_running_or_notify_cancelr"rWrjrCrR)re�sourcer"rCrrr�_set_concurrent_future_state/srncCsl|��st�|��rdS|��r$t�|��r6|��n2|��}|dk	rV|�t|��n|��}|�|�dS)zqInternal helper to copy state from another Future.

    The other Future may be a concurrent.futures.Future.
    N)	r>rkr=r6r"rWrjrCrR)rm�destr"rCrrr�_copy_future_state>s
rpcs�t��st�tjj�std��t��s<t�tjj�s<td��t��rLt��nd�t��r`t��nd�dd�����fdd�}����fdd	�}��|���|�dS)
aChain two futures so that when one completes, so does the other.

    The result (or exception) of source will be copied to destination.
    If destination is cancelled, source gets cancelled too.
    Compatible with both asyncio.Future and concurrent.futures.Future.
    z(A future is required for source argumentz-A future is required for destination argumentNcSs"t|�rt||�n
t||�dSr+)rrprn)r#�otherrrr�
_set_statebsz!_chain_future.<locals>._set_statecs2|��r.�dks��kr"���n���j�dSr+)r=r6�call_soon_threadsafe)�destination)�	dest_looprm�source_looprr�_call_check_cancelhs
z)_chain_future.<locals>._call_check_cancelcsJ���r�dk	r���rdS�dks,��kr8��|�n����|�dSr+)r=�	is_closedrs)rm)rrrurtrvrr�_call_set_stateos��z&_chain_future.<locals>._call_set_state)rrSrerfrrVrcrH)rmrtrwryr)rrrurtrmrvr�
_chain_futureRs��	
rzr
cCsNt|�r|St|tjj�s(td|����|dkr8t��}|��}t	||�|S)z&Wrap concurrent.futures.Future object.z+concurrent.futures.Future is expected, got N)
rrSrerfrrkrr�
create_futurerz)r#r�
new_futurerrrr|s�
r)r\�__all__�concurrent.futuresrerD�loggingr�rrrr	rr3r4r@�DEBUG�STACK_DEBUGr�	_PyFuturercrdrjrnrprzr�_asyncio�ImportError�_CFuturerrrr�<module>s:
q*
X�?�@s�dZdZddlZddlZddlZddlmZddlmZddlmZddlm	Z	Gd	d
�d
�Z
Gdd�d�ZGd
d�de�ZGdd�d�Z
Gdd�de�ZGdd�de�ZGdd�de�ZdS)zSynchronization primitives.)�Lock�Event�	Condition�	Semaphore�BoundedSemaphore�N�)�events)�futures)�
exceptions)�
coroutinesc@s(eZdZdZdd�Zdd�Zdd�ZdS)	�_ContextManagera\Context manager.

    This enables the following idiom for acquiring and releasing a
    lock around a block:

        with (yield from lock):
            <block>

    while failing loudly when accidentally using:

        with lock:
            <block>

    Deprecated, use 'async with' statement:
        async with lock:
            <block>
    cCs
||_dS�N)�_lock)�self�lock�r�#/usr/lib/python3.8/asyncio/locks.py�__init__"sz_ContextManager.__init__cCsdSr
r�rrrr�	__enter__%sz_ContextManager.__enter__cGsz|j��W5d|_XdSr
)r�release�r�argsrrr�__exit__*sz_ContextManager.__exit__N)�__name__�
__module__�__qualname__�__doc__rrrrrrrrsrc@sReZdZdd�Zdd�Zejdd��Zej	e_	dd�Z
d	d
�Zdd�Zd
d�Z
dS)�_ContextManagerMixincCstd��dS)Nz9"yield from" should be used as context manager expression)�RuntimeErrorrrrrr2s�z_ContextManagerMixin.__enter__cGsdSr
rrrrrr6sz_ContextManagerMixin.__exit__ccs&tjdtdd�|��EdHt|�S)NzD'with (yield from lock)' is deprecated use 'async with lock' instead���
stacklevel)�warnings�warn�DeprecationWarning�acquirerrrrr�__iter__;s�z_ContextManagerMixin.__iter__c�s|��IdHt|�Sr
)r&rrrrr�
__acquire_ctxUsz"_ContextManagerMixin.__acquire_ctxcCstjdtdd�|����S)Nz='with await lock' is deprecated use 'async with lock' insteadr r!)r#r$r%�!_ContextManagerMixin__acquire_ctx�	__await__rrrrr*Ys
�z_ContextManagerMixin.__await__c�s|��IdHdSr
)r&rrrr�
__aenter__`sz_ContextManagerMixin.__aenter__c�s|��dSr
)r)r�exc_type�exc�tbrrr�	__aexit__fsz_ContextManagerMixin.__aexit__N)rrrrr�types�	coroutiner'r�
_is_coroutiner)r*r+r/rrrrr1s
rcsNeZdZdZdd�dd�Z�fdd�Zdd	�Zd
d�Zdd
�Zdd�Z	�Z
S)ra�Primitive lock objects.

    A primitive lock is a synchronization primitive that is not owned
    by a particular coroutine when locked.  A primitive lock is in one
    of two states, 'locked' or 'unlocked'.

    It is created in the unlocked state.  It has two basic methods,
    acquire() and release().  When the state is unlocked, acquire()
    changes the state to locked and returns immediately.  When the
    state is locked, acquire() blocks until a call to release() in
    another coroutine changes it to unlocked, then the acquire() call
    resets it to locked and returns.  The release() method should only
    be called in the locked state; it changes the state to unlocked
    and returns immediately.  If an attempt is made to release an
    unlocked lock, a RuntimeError will be raised.

    When more than one coroutine is blocked in acquire() waiting for
    the state to turn to unlocked, only one coroutine proceeds when a
    release() call resets the state to unlocked; first coroutine which
    is blocked in acquire() is being processed.

    acquire() is a coroutine and should be called with 'await'.

    Locks also support the asynchronous context management protocol.
    'async with lock' statement should be used.

    Usage:

        lock = Lock()
        ...
        await lock.acquire()
        try:
            ...
        finally:
            lock.release()

    Context manager usage:

        lock = Lock()
        ...
        async with lock:
             ...

    Lock objects can be tested for locking state:

        if not lock.locked():
           await lock.acquire()
        else:
           # lock is acquired
           ...

    N��loopcCs:d|_d|_|dkr t��|_n||_tjdtdd�dS�NF�[The loop argument is deprecated since Python 3.8, and scheduled for removal in Python 3.10.r r!)�_waiters�_lockedr�get_event_loop�_loopr#r$r%�rr4rrrr�s�z
Lock.__init__csLt���}|jrdnd}|jr2|�dt|j���}d|dd��d|�d�S�	N�locked�unlocked�
, waiters:�<r���� [�]>)�super�__repr__r8r7�len�r�res�extra��	__class__rrrE�s

z
Lock.__repr__cCs|jS)z Return True if lock is acquired.)r8rrrrr=�szLock.lockedc	�s�|js.|jdks$tdd�|jD��r.d|_dS|jdkrBt��|_|j��}|j�|�z"z|IdHW5|j�|�XWn&t	j
k
r�|js�|���YnXd|_dS)z�Acquire a lock.

        This method blocks until the lock is unlocked, then sets it to
        locked and returns True.
        Ncss|]}|��VqdSr
)�	cancelled)�.0�wrrr�	<genexpr>�szLock.acquire.<locals>.<genexpr>T)r8r7�all�collections�dequer:�
create_future�append�remover
�CancelledError�_wake_up_first�r�futrrrr&�s&�


zLock.acquirecCs"|jrd|_|��ntd��dS)aGRelease a lock.

        When the lock is locked, reset it to unlocked, and return.
        If any other coroutines are blocked waiting for the lock to become
        unlocked, allow exactly one of them to proceed.

        When invoked on an unlocked lock, a RuntimeError is raised.

        There is no return value.
        FzLock is not acquired.N)r8rWrrrrrr�s
zLock.releasecCsJ|js
dSztt|j��}Wntk
r2YdSX|��sF|�d�dS)z*Wake up the first waiter if it isn't done.NT)r7�next�iter�
StopIteration�done�
set_resultrXrrrrW�szLock._wake_up_first)rrrrrrEr=r&rrW�
__classcell__rrrJrrjs5 rcsNeZdZdZdd�dd�Z�fdd�Zdd	�Zd
d�Zdd
�Zdd�Z	�Z
S)ra#Asynchronous equivalent to threading.Event.

    Class implementing event objects. An event manages a flag that can be set
    to true with the set() method and reset to false with the clear() method.
    The wait() method blocks until the flag is true. The flag is initially
    false.
    Nr3cCs>t��|_d|_|dkr$t��|_n||_tjdt	dd�dSr5)
rQrRr7�_valuerr9r:r#r$r%r;rrrrs
�zEvent.__init__csLt���}|jrdnd}|jr2|�dt|j���}d|dd��d|�d�S)	N�setZunsetr?r@rrArBrC)rDrEr`r7rFrGrJrrrEs

zEvent.__repr__cCs|jS)z5Return True if and only if the internal flag is true.�r`rrrr�is_setszEvent.is_setcCs.|js*d|_|jD]}|��s|�d�qdS)z�Set the internal flag to true. All coroutines waiting for it to
        become true are awakened. Coroutine that call wait() once the flag is
        true will not block at all.
        TN)r`r7r]r^rXrrrras

z	Event.setcCs
d|_dS)z�Reset the internal flag to false. Subsequently, coroutines calling
        wait() will block until set() is called to set the internal flag
        to true again.FNrbrrrr�clear"szEvent.clearc	�sF|jr
dS|j��}|j�|�z|IdHW�dS|j�|�XdS)z�Block until the internal flag is true.

        If the internal flag is true on entry, return True
        immediately.  Otherwise, block until another coroutine calls
        set() to set the flag to true, then return True.
        TN)r`r:rSr7rTrUrXrrr�wait(s

z
Event.wait)rrrrrrErcrardrer_rrrJrr�srcsReZdZdZddd�dd�Z�fdd�Zdd	�Zd
d�Zdd
d�Zdd�Z	�Z
S)raAsynchronous equivalent to threading.Condition.

    This class implements condition variable objects. A condition variable
    allows one or more coroutines to wait until they are notified by another
    coroutine.

    A new Lock object is created and used as the underlying lock.
    Nr3cCs~|dkrt��|_n||_tjdtdd�|dkr>t|d�}n|j|jk	rRtd��||_|j	|_	|j
|_
|j|_t�
�|_dS)Nr6r r!r3z"loop argument must agree with lock)rr9r:r#r$r%r�
ValueErrorrr=r&rrQrRr7)rrr4rrrrEs �zCondition.__init__csNt���}|��rdnd}|jr4|�dt|j���}d|dd��d|�d�Sr<)rDrEr=r7rFrGrJrrrE[s

zCondition.__repr__c�s�|��std��|��z@|j��}|j�	|�z|IdHW�W�dS|j�
|�XW5d}z|��IdHWq�Wq^tjk
r�d}Yq^Xq^|r�tj�XdS)a�Wait until notified.

        If the calling coroutine has not acquired the lock when this
        method is called, a RuntimeError is raised.

        This method releases the underlying lock, and then blocks
        until it is awakened by a notify() or notify_all() call for
        the same condition variable in another coroutine.  Once
        awakened, it re-acquires the lock and returns True.
        zcannot wait on un-acquired lockFNT)r=rrr&r
rVr:rSr7rTrU)rrLrYrrrrebs$

zCondition.waitc�s$|�}|s |��IdH|�}q|S)z�Wait until a predicate becomes true.

        The predicate should be a callable which result will be
        interpreted as a boolean value.  The final predicate value is
        the return value.
        N)re)r�	predicate�resultrrr�wait_for�s
zCondition.wait_forrcCsJ|��std��d}|jD]*}||kr*qF|��s|d7}|�d�qdS)aBy default, wake up one coroutine waiting on this condition, if any.
        If the calling coroutine has not acquired the lock when this method
        is called, a RuntimeError is raised.

        This method wakes up at most n of the coroutines waiting for the
        condition variable; it is a no-op if no coroutines are waiting.

        Note: an awakened coroutine does not actually return from its
        wait() call until it can reacquire the lock. Since notify() does
        not release the lock, its caller should.
        z!cannot notify on un-acquired lockrrFN)r=rr7r]r^)r�n�idxrYrrr�notify�s
zCondition.notifycCs|�t|j��dS)aWake up all threads waiting on this condition. This method acts
        like notify(), but wakes up all waiting threads instead of one. If the
        calling thread has not acquired the lock when this method is called,
        a RuntimeError is raised.
        N)rlrFr7rrrr�
notify_all�szCondition.notify_all)N)r)rrrrrrErerirlrmr_rrrJrr;s	%
rcsPeZdZdZddd�dd�Z�fdd�Zd	d
�Zdd�Zd
d�Zdd�Z	�Z
S)raA Semaphore implementation.

    A semaphore manages an internal counter which is decremented by each
    acquire() call and incremented by each release() call. The counter
    can never go below zero; when acquire() finds that it is zero, it blocks,
    waiting until some other thread calls release().

    Semaphores also support the context management protocol.

    The optional argument gives the initial value for the internal
    counter; it defaults to 1. If the value given is less than 0,
    ValueError is raised.
    rNr3cCsN|dkrtd��||_t��|_|dkr4t��|_n||_tj	dt
dd�dS)Nrz$Semaphore initial value must be >= 0r6r r!)rfr`rQrRr7rr9r:r#r$r%�r�valuer4rrrr�s
�zSemaphore.__init__csVt���}|��rdn
d|j��}|jr<|�dt|j���}d|dd��d|�d�S)	Nr=zunlocked, value:r?r@rrArBrC)rDrEr=r`r7rFrGrJrrrE�s

zSemaphore.__repr__cCs,|jr(|j��}|��s|�d�dSqdSr
)r7�popleftr]r^)r�waiterrrr�
_wake_up_next�s


zSemaphore._wake_up_nextcCs
|jdkS)z:Returns True if semaphore can not be acquired immediately.rrbrrrrr=�szSemaphore.lockedc�st|jdkrb|j��}|j�|�z|IdHWq|��|jdkrX|��sX|���YqXq|jd8_dS)a5Acquire a semaphore.

        If the internal counter is larger than zero on entry,
        decrement it by one and return True immediately.  If it is
        zero on entry, block, waiting until some other coroutine has
        called release() to make it larger than 0, and then return
        True.
        rNrT)r`r:rSr7rT�cancelrLrrrXrrrr&�s	


zSemaphore.acquirecCs|jd7_|��dS)z�Release a semaphore, incrementing the internal counter by one.
        When it was zero on entry and another coroutine is waiting for it to
        become larger than zero again, wake up that coroutine.
        rN)r`rrrrrrr�szSemaphore.release)r)rrrrrrErrr=r&rr_rrrJrr�s
rcs4eZdZdZd	dd��fdd�Z�fdd�Z�ZS)
rz�A bounded semaphore implementation.

    This raises ValueError in release() if it would increase the value
    above the initial value.
    rNr3cs.|rtjdtdd�||_t�j||d�dS)Nr6r r!r3)r#r$r%�_bound_valuerDrrnrJrrr
s�zBoundedSemaphore.__init__cs"|j|jkrtd��t���dS)Nz(BoundedSemaphore released too many times)r`rtrfrDrrrJrrrszBoundedSemaphore.release)r)rrrrrrr_rrrJrrs	r)r�__all__rQr0r#�rr	r
rrrrrrrrrrrr�<module>s "9DzNX��@sdZddlZe�e�ZdS)zLogging configuration.�N)�__doc__�logging�	getLogger�__package__�logger�rr�!/usr/lib/python3.8/asyncio/log.py�<module>sX�!�@sbdZdZGdd�d�ZGdd�de�ZGdd�de�ZGdd	�d	e�ZGd
d�de�Zdd
�ZdS)zAbstract Protocol base classes.)�BaseProtocol�Protocol�DatagramProtocol�SubprocessProtocol�BufferedProtocolc@s4eZdZdZdZdd�Zdd�Zdd�Zd	d
�ZdS)raCommon base class for protocol interfaces.

    Usually user implements protocols that derived from BaseProtocol
    like Protocol or ProcessProtocol.

    The only case when BaseProtocol should be implemented directly is
    write-only transport like write pipe
    �cCsdS)z�Called when a connection is made.

        The argument is the transport representing the pipe connection.
        To receive data, wait for data_received() calls.
        When the connection is closed, connection_lost() is called.
        Nr)�self�	transportrr�'/usr/lib/python3.8/asyncio/protocols.py�connection_madeszBaseProtocol.connection_madecCsdS)z�Called when the connection is lost or closed.

        The argument is an exception object or None (the latter
        meaning a regular EOF is received or the connection was
        aborted or closed).
        Nr�r�excrrr	�connection_lostszBaseProtocol.connection_lostcCsdS)aCalled when the transport's buffer goes over the high-water mark.

        Pause and resume calls are paired -- pause_writing() is called
        once when the buffer goes strictly over the high-water mark
        (even if subsequent writes increases the buffer size even
        more), and eventually resume_writing() is called once when the
        buffer size reaches the low-water mark.

        Note that if the buffer size equals the high-water mark,
        pause_writing() is not called -- it must go strictly over.
        Conversely, resume_writing() is called when the buffer size is
        equal or lower than the low-water mark.  These end conditions
        are important to ensure that things go as expected when either
        mark is zero.

        NOTE: This is the only Protocol callback that is not called
        through EventLoop.call_soon() -- if it were, it would have no
        effect when it's most needed (when the app keeps writing
        without yielding until pause_writing() is called).
        Nr�rrrr	�
pause_writing%szBaseProtocol.pause_writingcCsdS)zvCalled when the transport's buffer drains below the low-water mark.

        See pause_writing() for details.
        Nrrrrr	�resume_writing;szBaseProtocol.resume_writingN)	�__name__�
__module__�__qualname__�__doc__�	__slots__r
r
rrrrrr	r	s	rc@s$eZdZdZdZdd�Zdd�ZdS)ranInterface for stream protocol.

    The user should implement this interface.  They can inherit from
    this class but don't need to.  The implementations here do
    nothing (they don't raise exceptions).

    When the user wants to requests a transport, they pass a protocol
    factory to a utility function (e.g., EventLoop.create_connection()).

    When the connection is made successfully, connection_made() is
    called with a suitable transport object.  Then data_received()
    will be called 0 or more times with data (bytes) received from the
    transport; finally, connection_lost() will be called exactly once
    with either an exception object or None as an argument.

    State machine of calls:

      start -> CM [-> DR*] [-> ER?] -> CL -> end

    * CM: connection_made()
    * DR: data_received()
    * ER: eof_received()
    * CL: connection_lost()
    rcCsdS)zTCalled when some data is received.

        The argument is a bytes object.
        Nr)r�datarrr	�
data_received^szProtocol.data_receivedcCsdS�z�Called when the other end calls write_eof() or equivalent.

        If this returns a false value (including None), the transport
        will close itself.  If it returns a true value, closing the
        transport is up to the protocol.
        Nrrrrr	�eof_receiveddszProtocol.eof_receivedN)rrrrrrrrrrr	rBsrc@s,eZdZdZdZdd�Zdd�Zdd�Zd	S)
ra�Interface for stream protocol with manual buffer control.

    Important: this has been added to asyncio in Python 3.7
    *on a provisional basis*!  Consider it as an experimental API that
    might be changed or removed in Python 3.8.

    Event methods, such as `create_server` and `create_connection`,
    accept factories that return protocols that implement this interface.

    The idea of BufferedProtocol is that it allows to manually allocate
    and control the receive buffer.  Event loops can then use the buffer
    provided by the protocol to avoid unnecessary data copies.  This
    can result in noticeable performance improvement for protocols that
    receive big amounts of data.  Sophisticated protocols can allocate
    the buffer only once at creation time.

    State machine of calls:

      start -> CM [-> GB [-> BU?]]* [-> ER?] -> CL -> end

    * CM: connection_made()
    * GB: get_buffer()
    * BU: buffer_updated()
    * ER: eof_received()
    * CL: connection_lost()
    rcCsdS)aPCalled to allocate a new receive buffer.

        *sizehint* is a recommended minimal size for the returned
        buffer.  When set to -1, the buffer size can be arbitrary.

        Must return an object that implements the
        :ref:`buffer protocol <bufferobjects>`.
        It is an error to return a zero-sized buffer.
        Nr)r�sizehintrrr	�
get_buffer�szBufferedProtocol.get_buffercCsdS)z�Called when the buffer was updated with the received data.

        *nbytes* is the total number of bytes that were written to
        the buffer.
        Nr)r�nbytesrrr	�buffer_updated�szBufferedProtocol.buffer_updatedcCsdSrrrrrr	r�szBufferedProtocol.eof_receivedN)rrrrrrrrrrrr	rms
rc@s$eZdZdZdZdd�Zdd�ZdS)rz Interface for datagram protocol.rcCsdS)z&Called when some datagram is received.Nr)rr�addrrrr	�datagram_received�sz"DatagramProtocol.datagram_receivedcCsdS)z~Called when a send or receive operation raises an OSError.

        (Other than BlockingIOError or InterruptedError.)
        Nrrrrr	�error_received�szDatagramProtocol.error_receivedN)rrrrrrr rrrr	r�src@s,eZdZdZdZdd�Zdd�Zdd�Zd	S)
rz,Interface for protocol for subprocess calls.rcCsdS)z�Called when the subprocess writes data into stdout/stderr pipe.

        fd is int file descriptor.
        data is bytes object.
        Nr)r�fdrrrr	�pipe_data_received�sz%SubprocessProtocol.pipe_data_receivedcCsdS)z�Called when a file descriptor associated with the child process is
        closed.

        fd is the int file descriptor that was closed.
        Nr)rr!rrrr	�pipe_connection_lost�sz'SubprocessProtocol.pipe_connection_lostcCsdS)z"Called when subprocess has exited.Nrrrrr	�process_exited�sz!SubprocessProtocol.process_exitedN)rrrrrr"r#r$rrrr	r�s
rcCs�t|�}|r�|�|�}t|�}|s*td��||krL||d|�<|�|�dS|d|�|d|�<|�|�||d�}t|�}qdS)Nz%get_buffer() returned an empty buffer)�lenr�RuntimeErrorr)�protor�data_len�buf�buf_lenrrr	�_feed_data_to_buffered_proto�s


r+N)r�__all__rrrrrr+rrrr	�<module>s9+9X� �@s�dZddlZddlZddlZddlmZddlmZGdd�de�ZGdd	�d	e�Z	Gd
d�d�Z
Gdd
�d
e
�ZGdd�de
�ZdS))�Queue�
PriorityQueue�	LifoQueue�	QueueFull�
QueueEmpty�N�)�events)�locksc@seZdZdZdS)rz;Raised when Queue.get_nowait() is called on an empty Queue.N��__name__�
__module__�__qualname__�__doc__�rr�$/usr/lib/python3.8/asyncio/queues.pyrsrc@seZdZdZdS)rzDRaised when the Queue.put_nowait() method is called on a full Queue.Nr
rrrrrsrc@s�eZdZdZd)dd�dd�Zdd�Zd	d
�Zdd�Zd
d�Zdd�Z	dd�Z
dd�Zdd�Ze
dd��Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�ZdS)*raA queue, useful for coordinating producer and consumer coroutines.

    If maxsize is less than or equal to zero, the queue size is infinite. If it
    is an integer greater than 0, then "await put()" will block when the
    queue reaches maxsize, until an item is removed by get().

    Unlike the standard library Queue, you can reliably know this Queue's size
    with qsize(), since your single-threaded asyncio application won't be
    interrupted between calling qsize() and doing an operation on the Queue.
    rN��loopcCsp|dkrt��|_n||_tjdtdd�||_t��|_	t��|_
d|_tj
|d�|_|j��|�|�dS)Nz[The loop argument is deprecated since Python 3.8, and scheduled for removal in Python 3.10.�)�
stacklevelrr)r�get_event_loop�_loop�warnings�warn�DeprecationWarning�_maxsize�collections�deque�_getters�_putters�_unfinished_tasksr	�Event�	_finished�set�_init)�self�maxsizerrrr�__init__!s�


zQueue.__init__cCst��|_dS�N)rr�_queue�r$r%rrrr#6szQueue._initcCs
|j��Sr')r(�popleft�r$rrr�_get9sz
Queue._getcCs|j�|�dSr'�r(�append�r$�itemrrr�_put<sz
Queue._putcCs&|r"|��}|��s|�d�q"qdSr')r*�done�
set_result)r$�waiters�waiterrrr�_wakeup_nextAs

zQueue._wakeup_nextcCs(dt|�j�dt|�d�d|���d�S)N�<z at z#x� �>)�typer�id�_formatr+rrr�__repr__IszQueue.__repr__cCsdt|�j�d|���d�S)Nr7r8r9)r:rr<r+rrr�__str__Lsz
Queue.__str__cCs~d|j��}t|dd�r,|dt|j���7}|jrH|dt|j��d�7}|jrd|dt|j��d�7}|jrz|d|j��7}|S)Nzmaxsize=r(z _queue=z
 _getters[�]z
 _putters[z tasks=)r�getattr�listr(r�lenrr)r$�resultrrrr<Osz
Queue._formatcCs
t|j�S)zNumber of items in the queue.)rBr(r+rrr�qsize[szQueue.qsizecCs|jS)z%Number of items allowed in the queue.)rr+rrrr%_sz
Queue.maxsizecCs|jS)z3Return True if the queue is empty, False otherwise.�r(r+rrr�emptydszQueue.emptycCs |jdkrdS|��|jkSdS)z�Return True if there are maxsize items in the queue.

        Note: if the Queue was initialized with maxsize=0 (the default),
        then full() is never True.
        rFN)rrDr+rrr�fullhs
z
Queue.fullc�s�|��r�|j��}|j�|�z|IdHWq|��z|j�|�Wntk
r`YnX|��s~|��s~|�	|j��YqXq|�
|�S)z�Put an item into the queue.

        Put an item into the queue. If the queue is full, wait until a free
        slot is available before adding item.
        N)rGr�
create_futurerr.�cancel�remove�
ValueError�	cancelledr6�
put_nowait)r$r0�putterrrr�putss

z	Queue.putcCs>|��rt�|�|�|jd7_|j��|�|j�dS)zyPut an item into the queue without blocking.

        If no free slot is immediately available, raise QueueFull.
        rN)rGrr1rr!�clearr6rr/rrrrM�s

zQueue.put_nowaitc�s�|��r�|j��}|j�|�z|IdHWq|��z|j�|�Wntk
r`YnX|��s~|��s~|�	|j��YqXq|�
�S)zoRemove and return an item from the queue.

        If queue is empty, wait until an item is available.
        N)rFrrHrr.rIrJrKrLr6�
get_nowait)r$�getterrrr�get�s

z	Queue.getcCs$|��rt�|��}|�|j�|S)z�Remove and return an item from the queue.

        Return an item if one is immediately available, else raise QueueEmpty.
        )rFrr,r6rr/rrrrQ�s
zQueue.get_nowaitcCs8|jdkrtd��|jd8_|jdkr4|j��dS)a$Indicate that a formerly enqueued task is complete.

        Used by queue consumers. For each get() used to fetch a task,
        a subsequent call to task_done() tells the queue that the processing
        on the task is complete.

        If a join() is currently blocking, it will resume when all items have
        been processed (meaning that a task_done() call was received for every
        item that had been put() into the queue).

        Raises ValueError if called more times than there were items placed in
        the queue.
        rz!task_done() called too many timesrN)rrKr!r"r+rrr�	task_done�s


zQueue.task_donec�s|jdkr|j��IdHdS)aBlock until all items in the queue have been gotten and processed.

        The count of unfinished tasks goes up whenever an item is added to the
        queue. The count goes down whenever a consumer calls task_done() to
        indicate that the item was retrieved and all work on it is complete.
        When the count of unfinished tasks drops to zero, join() unblocks.
        rN)rr!�waitr+rrr�join�s
z
Queue.join)r)rrr
rr&r#r,r1r6r=r>r<rD�propertyr%rFrGrOrMrSrQrTrVrrrrrs(
rc@s4eZdZdZdd�Zejfdd�Zejfdd�Z	dS)	rz�A subclass of Queue; retrieves entries in priority order (lowest first).

    Entries are typically tuples of the form: (priority number, data).
    cCs
g|_dSr'rEr)rrrr#�szPriorityQueue._initcCs||j|�dSr'rE)r$r0�heappushrrrr1�szPriorityQueue._putcCs
||j�Sr'rE)r$�heappoprrrr,�szPriorityQueue._getN)
rrr
rr#�heapqrXr1rYr,rrrrr�src@s(eZdZdZdd�Zdd�Zdd�ZdS)	rzEA subclass of Queue that retrieves most recently added entries first.cCs
g|_dSr'rEr)rrrr#�szLifoQueue._initcCs|j�|�dSr'r-r/rrrr1�szLifoQueue._putcCs
|j��Sr')r(�popr+rrrr,�szLifoQueue._getN)rrr
rr#r1r,rrrrr�sr)
�__all__rrZr�rr	�	Exceptionrrrrrrrrr�<module>sKX��@sBdZddlmZddlmZddlmZdd�dd�Zd	d
�ZdS))�run�)�
coroutines)�events)�tasksN)�debugcCs�t��dk	rtd��t�|�s,td�|���t��}z*t�|�|dk	rR|�
|�|�|�W�Szt
|�|�|���W5t�d�|�	�XXdS)a�Execute the coroutine and return the result.

    This function runs the passed coroutine, taking care of
    managing the asyncio event loop and finalizing asynchronous
    generators.

    This function cannot be called when another asyncio event loop is
    running in the same thread.

    If debug is True, the event loop will be run in debug mode.

    This function always creates a new event loop and closes it at the end.
    It should be used as a main entry point for asyncio programs, and should
    ideally only be called once.

    Example:

        async def main():
            await asyncio.sleep(1)
            print('hello')

        asyncio.run(main())
    Nz8asyncio.run() cannot be called from a running event loopz"a coroutine was expected, got {!r})r�_get_running_loop�RuntimeErrorr�iscoroutine�
ValueError�format�new_event_loop�set_event_loop�close�_cancel_all_tasks�run_until_complete�shutdown_asyncgens�	set_debug)�mainr�loop�r�%/usr/lib/python3.8/asyncio/runners.pyrs"�



rcCsvt�|�}|sdS|D]}|��q|�tj||dd���|D]0}|��rNq@|��dk	r@|�d|��|d��q@dS)NT)r�return_exceptionsz1unhandled exception during asyncio.run() shutdown)�message�	exception�task)r�	all_tasks�cancelr�gather�	cancelledr�call_exception_handler)r�	to_cancelrrrrr6s"

��r)�__all__�rrrrrrrrr�<module>s
.X�s�@s.dZdZddlZddlZddlZddlZddlZddlZddlZzddl	Z	Wne
k
rddZ	YnXddlmZddlm
Z
ddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZdd�Zdd�ZGdd�dej�ZGdd�dejej�ZGdd�de�ZGdd�de�ZdS)z�Event loop using a selector and related classes.

A selector is a "notify-when-ready" multiplexer.  For a subclass which
also includes support for signal handling, see the unix_events sub-module.
)�BaseSelectorEventLoop�N�)�base_events)�	constants)�events)�futures)�	protocols)�sslproto)�
transports)�trsock)�loggercCs8z|�|�}Wntk
r$YdSXt|j|@�SdS�NF)�get_key�KeyError�boolr)�selector�fd�event�key�r�-/usr/lib/python3.8/asyncio/selector_events.py�_test_selector_event s
rcCs tdk	rt|tj�rtd��dS)Nz"Socket cannot be of type SSLSocket)�ssl�
isinstance�	SSLSocket�	TypeError)�sockrrr�_check_ssl_socket+srcs�eZdZdZdS�fdd�	ZdTddd�dd�ZdUddddejd	�d
d�ZdVdd
�Z	�fdd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdddejfdd�Zdddejfdd�Zddejfdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Zd;d<�Z d=d>�Z!d?d@�Z"dAdB�Z#dCdD�Z$dEdF�Z%dGdH�Z&dIdJ�Z'dKdL�Z(dMdN�Z)dOdP�Z*dQdR�Z+�Z,S)WrzJSelector event loop.

    See events.EventLoop for API specification.
    NcsFt���|dkrt��}t�d|jj�||_|�	�t
��|_dS)NzUsing selector: %s)
�super�__init__�	selectors�DefaultSelectorr�debug�	__class__�__name__�	_selector�_make_self_pipe�weakref�WeakValueDictionary�_transports)�selfr�r#rrr6s
zBaseSelectorEventLoop.__init__��extra�servercCst||||||�S�N)�_SelectorSocketTransport)r*r�protocol�waiterr-r.rrr�_make_socket_transport@s
�z,BaseSelectorEventLoop._make_socket_transportF)�server_side�server_hostnamer-r.�ssl_handshake_timeoutc	Cs0tj|||||||	d�}
t|||
||d�|
jS)N)r6r,)r	�SSLProtocolr0�_app_transport)r*�rawsockr1�
sslcontextr2r4r5r-r.r6�ssl_protocolrrr�_make_ssl_transportEs��z)BaseSelectorEventLoop._make_ssl_transportcCst||||||�Sr/)�_SelectorDatagramTransport)r*rr1�addressr2r-rrr�_make_datagram_transportRs
�z.BaseSelectorEventLoop._make_datagram_transportcsL|��rtd��|��rdS|��t���|jdk	rH|j��d|_dS)Nz!Cannot close a running event loop)�
is_running�RuntimeError�	is_closed�_close_self_piper�closer%�r*r+rrrDWs


zBaseSelectorEventLoop.closecCsB|�|j���|j��d|_|j��d|_|jd8_dS)Nr)�_remove_reader�_ssock�filenorD�_csock�
_internal_fdsrErrrrCbs

z&BaseSelectorEventLoop._close_self_pipecCsNt��\|_|_|j�d�|j�d�|jd7_|�|j��|j�dS)NFr)	�socket�
socketpairrGrI�setblockingrJ�_add_readerrH�_read_from_selfrErrrr&js
z%BaseSelectorEventLoop._make_self_pipecCsdSr/r�r*�datarrr�_process_self_datarsz(BaseSelectorEventLoop._process_self_datacCsXz"|j�d�}|sWqT|�|�Wqtk
r:YqYqtk
rPYqTYqXqdS)Ni)rG�recvrR�InterruptedError�BlockingIOErrorrPrrrrOusz%BaseSelectorEventLoop._read_from_selfcCsN|j}|dkrdSz|�d�Wn(tk
rH|jrDtjddd�YnXdS)N�z3Fail to write a null byte into the self-pipe socketT��exc_info)rI�send�OSError�_debugrr")r*�csockrrr�_write_to_self�s�z$BaseSelectorEventLoop._write_to_self�dc
Cs"|�|��|j||||||�dSr/)rNrH�_accept_connection)r*�protocol_factoryrr:r.�backlogr6rrr�_start_serving�s�z$BaseSelectorEventLoop._start_servingc
Cst|�D]�}z0|��\}}	|jr0t�d||	|�|�d�Wn�tttfk
rZYdSt	k
r�}
zd|
j
t
jt
jt
j
t
jfkr�|�d|
t�|�d��|�|���|�tj|j||||||�n�W5d}
~
XYqXd|	i}|�||||||�}|�|�qdS)Nz#%r got a new connection from %r: %rFz&socket.accept() out of system resource)�message�	exceptionrK�peername)�range�acceptr[rr"rMrUrT�ConnectionAbortedErrorrZ�errno�EMFILE�ENFILE�ENOBUFS�ENOMEM�call_exception_handlerr�TransportSocketrFrH�
call_laterr�ACCEPT_RETRY_DELAYrb�_accept_connection2�create_task)
r*r`rr:r.rar6�_�conn�addr�excr-rgrrrr_�sV�����z(BaseSelectorEventLoop._accept_connectionc
�s�d}d}zt|�}|��}	|r8|j||||	d|||d�}n|j|||	||d�}z|	IdHWntk
rx|���YnXWntttfk
r��Yn\tk
r�}
z>|jr�d|
d�}|dk	r�||d<|dk	r�||d<|�|�W5d}
~
XYnXdS)NT)r2r4r-r.r6)r2r-r.z3Error on transport creation for incoming connection)rcrdr1�	transport)	�
create_futurer<r3�
BaseExceptionrD�
SystemExit�KeyboardInterruptr[rn)r*r`rur-r:r.r6r1rxr2rw�contextrrrrr�sP���z)BaseSelectorEventLoop._accept_connection2c
Cs�|}t|t�sJzt|���}Wn*tttfk
rHtd|���d�YnXz|j|}Wntk
rlYnX|��s�t	d|�d|����dS)NzInvalid file object: zFile descriptor z is used by transport )
r�intrH�AttributeErrorr�
ValueErrorr)r�
is_closingrA)r*rrHrxrrr�_ensure_fd_no_transport�s
�z-BaseSelectorEventLoop._ensure_fd_no_transportc		Gs�|��t�|||d�}z|j�|�}Wn*tk
rR|j�|tj|df�Yn>X|j|j	}\}}|j�
||tjB||f�|dk	r�|��dSr/)�
_check_closedr�Handler%rr�registerr �
EVENT_READrQ�modify�cancel�	r*r�callback�args�handler�mask�reader�writerrrrrNs�
�z!BaseSelectorEventLoop._add_readercCs�|��rdSz|j�|�}Wntk
r2YdSX|j|j}\}}|tjM}|sd|j�|�n|j�	||d|f�|dk	r�|�
�dSdSdS�NFT)rBr%rrrrQr r��
unregisterr�r��r*rrr�r�r�rrrrFsz$BaseSelectorEventLoop._remove_readerc		Gs�|��t�|||d�}z|j�|�}Wn*tk
rR|j�|tjd|f�Yn>X|j|j	}\}}|j�
||tjB||f�|dk	r�|��dSr/)r�rr�r%rrr�r �EVENT_WRITErQr�r�r�rrr�_add_writer%s�
�z!BaseSelectorEventLoop._add_writercCs�|��rdSz|j�|�}Wntk
r2YdSX|j|j}\}}|tjM}|sd|j�|�n|j�	|||df�|dk	r�|�
�dSdSdS)�Remove a writer callback.FNT)rBr%rrrrQr r�r�r�r�r�rrr�_remove_writer4sz$BaseSelectorEventLoop._remove_writercGs|�|�|j||f|��S)zAdd a reader callback.)r�rN�r*rr�r�rrr�
add_readerKs
z BaseSelectorEventLoop.add_readercCs|�|�|�|�S)zRemove a reader callback.)r�rF�r*rrrr�
remove_readerPs
z#BaseSelectorEventLoop.remove_readercGs|�|�|j||f|��S)zAdd a writer callback..)r�r�r�rrr�
add_writerUs
z BaseSelectorEventLoop.add_writercCs|�|�|�|�S)r�)r�r�r�rrr�
remove_writerZs
z#BaseSelectorEventLoop.remove_writerc	�s�t|�|jr"|��dkr"td��z|�|�WSttfk
rFYnX|��}|��}|�	||j
|||�|�t�
|j|��|IdHS)z�Receive data from the socket.

        The return value is a bytes object representing the data received.
        The maximum amount of data to be received at once is specified by
        nbytes.
        r�the socket must be non-blockingN)rr[�
gettimeoutr�rSrUrTryrHr��
_sock_recv�add_done_callback�	functools�partial�_sock_read_done)r*r�n�futrrrr�	sock_recv_s�zBaseSelectorEventLoop.sock_recvcCs|�|�dSr/)r��r*rr�rrrr�tsz%BaseSelectorEventLoop._sock_read_donec
Cs�|��rdSz|�|�}Wn\ttfk
r4YdSttfk
rL�Yn6tk
rv}z|�|�W5d}~XYnX|�|�dSr/)	�donerSrUrTr{r|rz�
set_exception�
set_result)r*r�rr�rQrwrrrr�wsz BaseSelectorEventLoop._sock_recvc	�s�t|�|jr"|��dkr"td��z|�|�WSttfk
rFYnX|��}|��}|�	||j
|||�|�t�
|j|��|IdHS)z�Receive data from the socket.

        The received data is written into *buf* (a writable buffer).
        The return value is the number of bytes written.
        rr�N)rr[r�r��	recv_intorUrTryrHr��_sock_recv_intor�r�r�r�)r*r�bufr�rrrr�sock_recv_into�s�z$BaseSelectorEventLoop.sock_recv_intoc
Cs�|��rdSz|�|�}Wn\ttfk
r4YdSttfk
rL�Yn6tk
rv}z|�|�W5d}~XYnX|�|�dSr/)	r�r�rUrTr{r|rzr�r�)r*r�rr��nbytesrwrrrr��sz%BaseSelectorEventLoop._sock_recv_intoc	�s�t|�|jr"|��dkr"td��z|�|�}Wnttfk
rLd}YnX|t|�kr^dS|��}|�	�}|�
t�|j
|��|�||j||t|�|g�|IdHS)a�Send data to the socket.

        The socket must be connected to a remote socket. This method continues
        to send data from data until either all data has been sent or an
        error occurs. None is returned on success. On error, an exception is
        raised, and there is no way to determine how much data, if any, was
        successfully processed by the receiving end of the connection.
        rr�N)rr[r�r�rYrUrT�lenryrHr�r�r��_sock_write_doner��
_sock_sendall�
memoryview)r*rrQr�r�rrrr�sock_sendall�s&	
��z"BaseSelectorEventLoop.sock_sendallc
Cs�|��rdS|d}z|�||d��}Wnbttfk
rDYdSttfk
r\�Yn2tk
r�}z|�|�WY�dSd}~XYnX||7}|t|�kr�|�	d�n||d<dS)Nr)
r�rYrUrTr{r|rzr�r�r�)r*r�r�view�pos�startr�rwrrrr��s 
z#BaseSelectorEventLoop._sock_sendallc�s�t|�|jr"|��dkr"td��ttd�r8|jtjkrf|j||j|j	|d�IdH}|d\}}}}}|�
�}|�|||�|IdHS)zTConnect to a remote socket at address.

        This method is a coroutine.
        rr��AF_UNIX)�family�proto�loopN)rr[r�r��hasattrrKr�r��_ensure_resolvedr�ry�
_sock_connect)r*rr>�resolvedrtr�rrr�sock_connect�s�z"BaseSelectorEventLoop.sock_connectc
Cs�|��}z|�|�Wn�ttfk
rV|�t�|j|��|�||j	|||�YnNt
tfk
rn�Yn6tk
r�}z|�
|�W5d}~XYnX|�d�dSr/)rH�connectrUrTr�r�r�r�r��_sock_connect_cbr{r|rzr�r�)r*r�rr>rrwrrrr��s�z#BaseSelectorEventLoop._sock_connectcCs|�|�dSr/)r�r�rrrr�sz&BaseSelectorEventLoop._sock_write_donec
Cs�|��rdSz,|�tjtj�}|dkr6t|d|����WnZttfk
rPYnNtt	fk
rh�Yn6t
k
r�}z|�|�W5d}~XYnX|�d�dS)NrzConnect call failed )
r��
getsockoptrK�
SOL_SOCKET�SO_ERRORrZrUrTr{r|rzr�r�)r*r�rr>�errrwrrrr�sz&BaseSelectorEventLoop._sock_connect_cbc�sBt|�|jr"|��dkr"td��|��}|�|d|�|IdHS)aWAccept a connection.

        The socket must be bound to an address and listening for connections.
        The return value is a pair (conn, address) where conn is a new socket
        object usable to send and receive data on the connection, and address
        is the address bound to the socket on the other end of the connection.
        rr�FN)rr[r�r�ry�_sock_accept)r*rr�rrr�sock_acceptsz!BaseSelectorEventLoop.sock_acceptc
Cs�|��}|r|�|�|��r"dSz|��\}}|�d�Wnnttfk
rh|�||j|d|�YnRt	t
fk
r��Yn:tk
r�}z|�|�W5d}~XYnX|�
||f�dSr�)rHr�r�rgrMrUrTr�r�r{r|rzr�r�)r*r��
registeredrrrur>rwrrrr�*s
z"BaseSelectorEventLoop._sock_acceptc	�sp|j|j=|��}|��|��IdHz |j|j|||dd�IdHW�S|��|r^|��||j|j<XdS)NF)�fallback)	r)�_sock_fd�
is_reading�
pause_reading�_make_empty_waiter�_reset_empty_waiter�resume_reading�
sock_sendfile�_sock)r*�transp�file�offset�countr�rrr�_sendfile_native<s
�z&BaseSelectorEventLoop._sendfile_nativecCs�|D]v\}}|j|j}\}}|tj@rL|dk	rL|jrB|�|�n
|�|�|tj@r|dk	r|jrp|�|�q|�|�qdSr/)	�fileobjrQr r��
_cancelledrF�
_add_callbackr�r�)r*�
event_listrr�r�r�r�rrr�_process_eventsJs
z%BaseSelectorEventLoop._process_eventscCs|�|���|��dSr/)rFrHrD)r*rrrr�
_stop_servingXsz#BaseSelectorEventLoop._stop_serving)N)N)N)NNN)-r$�
__module__�__qualname__�__doc__rr3r�SSL_HANDSHAKE_TIMEOUTr<r?rDrCr&rRrOr]rbr_rrr�rNrFr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r��
__classcell__rrr+rr0s~
����
�
	�
.�
)rcs�eZdZdZeZdZd�fdd�	Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
ejfdd�Zddd�Zdd�Zdd�Zdd�Zdd�Z�ZS) �_SelectorTransportiNcs�t��||�t�|�|jd<z|��|jd<Wntk
rNd|jd<YnXd|jkr�z|��|jd<Wn tj	k
r�d|jd<YnX||_
|��|_d|_
|�|�||_|��|_d|_d|_|jdk	r�|j��||j|j<dS)NrKZsocknamereFr)rrrro�_extra�getsocknamerZ�getpeernamerK�errorr�rHr��_protocol_connected�set_protocol�_server�_buffer_factory�_buffer�
_conn_lost�_closing�_attachr))r*r�rr1r-r.r+rrris,





z_SelectorTransport.__init__cCs�|jjg}|jdkr |�d�n|jr0|�d�|�d|j���|jdk	r�|j��s�t|jj	|jt
j�}|rz|�d�n
|�d�t|jj	|jt
j�}|r�d}nd}|�
�}|�d|�d	|�d
��d�d�|��S)
N�closed�closingzfd=zread=pollingz	read=idle�pollingZidlezwrite=<z
, bufsize=�>z<{}>� )r#r$r��appendr�r��_looprBrr%r r�r��get_write_buffer_size�format�join)r*�infor��state�bufsizerrr�__repr__�s0


�
�z_SelectorTransport.__repr__cCs|�d�dSr/)�_force_closerErrr�abort�sz_SelectorTransport.abortcCs||_d|_dS�NT)�	_protocolr��r*r1rrrr��sz_SelectorTransport.set_protocolcCs|jSr/)rrErrr�get_protocol�sz_SelectorTransport.get_protocolcCs|jSr/)r�rErrrr��sz_SelectorTransport.is_closingcCsT|jr
dSd|_|j�|j�|jsP|jd7_|j�|j�|j�|jd�dS�NTr)	r�r�rFr�r�r�r��	call_soon�_call_connection_lostrErrrrD�sz_SelectorTransport.closecCs,|jdk	r(|d|��t|d�|j��dS)Nzunclosed transport )�source)r��ResourceWarningrD)r*�_warnrrr�__del__�s
z_SelectorTransport.__del__�Fatal error on transportcCsNt|t�r(|j��r@tjd||dd�n|j�||||jd��|�|�dS)Nz%r: %sTrW)rcrdrxr1)	rrZr��	get_debugrr"rnrr�)r*rwrcrrr�_fatal_error�s

�z_SelectorTransport._fatal_errorcCsd|jr
dS|jr(|j��|j�|j�|jsBd|_|j�|j�|jd7_|j�|j	|�dSr)
r�r��clearr�r�r�r�rFrr�r*rwrrrr��s
z_SelectorTransport._force_closecCsVz|jr|j�|�W5|j��d|_d|_d|_|j}|dk	rP|��d|_XdSr/)r�rDrr�r��_detachr��connection_lost)r*rwr.rrrr�s
z(_SelectorTransport._call_connection_lostcCs
t|j�Sr/)r�r�rErrrr��sz(_SelectorTransport.get_write_buffer_sizecGs"|jr
dS|jj||f|��dSr/)r�r�rNr�rrrrN�sz_SelectorTransport._add_reader)NN)r)r$r�r��max_size�	bytearrayr�r�rr�r�r�rr�rD�warnings�warnr
r
r�rr�rNr�rrr+rr�]s 

r�cs�eZdZdZejjZd#�fdd�	Z�fdd�Z	dd�Z
d	d
�Zdd�Zd
d�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Z�fdd�Zdd �Zd!d"�Z�ZS)$r0TNcs~d|_t��|||||�d|_d|_d|_t�|j�|j	�
|jj|�|j	�
|j
|j|j�|dk	rz|j	�
tj|d�dSr
)�_read_ready_cbrr�_eof�_paused�
_empty_waiterr�_set_nodelayr�r�rr�connection_maderNr��_read_readyr�_set_result_unless_cancelled)r*r�rr1r2r-r.r+rrr�s 
�
�z!_SelectorSocketTransport.__init__cs.t|tj�r|j|_n|j|_t��|�dSr/)rr�BufferedProtocol�_read_ready__get_bufferr�_read_ready__data_receivedrr�rr+rrr�	s
z%_SelectorSocketTransport.set_protocolcCs|jo|jSr/)rr�rErrrr�sz#_SelectorSocketTransport.is_readingcCs>|js|jrdSd|_|j�|j�|j��r:t�d|�dS)NTz%r pauses reading)r�rr�rFr�rrr"rErrrr�s
z&_SelectorSocketTransport.pause_readingcCs@|js|jsdSd|_|�|j|j�|j��r<t�d|�dS)NFz%r resumes reading)	r�rrNr�rr�rrr"rErrrr�s
z'_SelectorSocketTransport.resume_readingcCs|��dSr/)rrErrrr$sz$_SelectorSocketTransport._read_readyc
Cs`|jr
dSz |j�d�}t|�s(td��WnLttfk
rD�Yn4tk
rv}z|�|d�WY�dSd}~XYnXz|j	�
|�}Wndttfk
r�YdSttfk
r��Yn4tk
r�}z|�|d�WY�dSd}~XYnX|�s|�
�dSz|j�|�WnJttfk
�r,�Yn0tk
�rZ}z|�|d�W5d}~XYnXdS)N���z%get_buffer() returned an empty bufferz/Fatal error: protocol.get_buffer() call failed.�$Fatal read error on socket transportz3Fatal error: protocol.buffer_updated() call failed.)r�r�
get_bufferr�rAr{r|rzr
r�r�rUrT�_read_ready__on_eof�buffer_updated)r*r�rwr�rrrr'sF��z0_SelectorSocketTransport._read_ready__get_bufferc
Cs�|jr
dSz|j�|j�}Wndttfk
r6YdSttfk
rN�Yn4tk
r�}z|�	|d�WY�dSd}~XYnX|s�|�
�dSz|j�|�WnFttfk
r��Yn.tk
r�}z|�	|d�W5d}~XYnXdS)Nr"z2Fatal error: protocol.data_received() call failed.)
r�r�rSrrUrTr{r|rzr
r$r�
data_received)r*rQrwrrrr Ls.�z3_SelectorSocketTransport._read_ready__data_receivedc
Cs�|j��rt�d|�z|j��}WnLttfk
r>�Yn4tk
rp}z|�	|d�WY�dSd}~XYnX|r�|j�
|j�n|��dS)Nz%r received EOFz1Fatal error: protocol.eof_received() call failed.)
r�rrr"r�eof_receivedr{r|rzr
rFr�rD)r*�	keep_openrwrrrr$es
�z,_SelectorSocketTransport._read_ready__on_eofc
Cs6t|tttf�s$tdt|�j����|jr2td��|j	dk	rDtd��|sLdS|j
rz|j
tjkrht
�d�|j
d7_
dS|j�sz|j�|�}Wnbttfk
r�Ynbttfk
r��YnJtk
r�}z|�|d�WY�dSd}~XYnX||d�}|�sdS|j�|j|j�|j�|�|��dS)N�/data argument must be a bytes-like object, not z%Cannot call write() after write_eof()z(unable to write; sendfile is in progress�socket.send() raised exception.r�%Fatal write error on socket transport)r�bytesrr�r�typer$rrArr�r�!LOG_THRESHOLD_FOR_CONNLOST_WRITESr�warningr�r�rYrUrTr{r|rzr
r�r�r��_write_ready�extend�_maybe_pause_protocol)r*rQr�rwrrr�writezs:

z_SelectorSocketTransport.writec
Cs(|jstd��|jrdSz|j�|j�}Wn�ttfk
rBYn�ttfk
rZ�Yn�t	k
r�}z>|j
�|j�|j�
�|�|d�|jdk	r�|j�|�W5d}~XYnpX|r�|jd|�=|��|j�s$|j
�|j�|jdk	r�|j�d�|j�r|�d�n|j�r$|j�tj�dS)NzData should not be emptyr+)r��AssertionErrorr�r�rYrUrTr{r|rzr�r�r�rr
rr��_maybe_resume_protocolr�r�rr�shutdownrK�SHUT_WR)r*r�rwrrrr0�s4


z%_SelectorSocketTransport._write_readycCs.|js|jrdSd|_|js*|j�tj�dSr)r�rr�r�r6rKr7rErrr�	write_eof�s
z"_SelectorSocketTransport.write_eofcCsdSrrrErrr�
can_write_eof�sz&_SelectorSocketTransport.can_write_eofcs*t��|�|jdk	r&|j�td��dS)NzConnection is closed by peer)rrrr��ConnectionErrorrr+rrr�s

�z._SelectorSocketTransport._call_connection_lostcCs6|jdk	rtd��|j��|_|js0|j�d�|jS)NzEmpty waiter is already set)rrAr�ryr�r�rErrrr��s
z+_SelectorSocketTransport._make_empty_waitercCs
d|_dSr/)rrErrrr��sz,_SelectorSocketTransport._reset_empty_waiter)NNN)r$r�r��_start_tls_compatibler�
_SendfileMode�
TRY_NATIVE�_sendfile_compatiblerr�r�r�r�rrr r$r3r0r8r9rr�r�r�rrr+rr0�s*�%'r0csFeZdZejZd�fdd�	Zdd�Zdd�Zd
dd	�Z	d
d�Z
�ZS)r=Ncs^t��||||�||_|j�|jj|�|j�|j|j|j	�|dk	rZ|j�t
j|d�dSr/)rr�_addressr�rrrrNr�rrr)r*r�rr1r>r2r-r+rrr�s
�
�z#_SelectorDatagramTransport.__init__cCstdd�|jD��S)Ncss|]\}}t|�VqdSr/)r�)�.0rQrtrrr�	<genexpr>�szC_SelectorDatagramTransport.get_write_buffer_size.<locals>.<genexpr>)�sumr�rErrrr��sz0_SelectorDatagramTransport.get_write_buffer_sizec
Cs�|jr
dSz|j�|j�\}}Wn�ttfk
r8Yn�tk
rd}z|j�|�W5d}~XYnTt	t
fk
r|�Yn<tk
r�}z|�|d�W5d}~XYnX|j�
||�dS)Nz&Fatal read error on datagram transport)r�r��recvfromrrUrTrZr�error_receivedr{r|rzr
�datagram_received�r*rQrvrwrrrr�sz&_SelectorDatagramTransport._read_readyc
Cs�t|tttf�s$tdt|�j����|s,dS|jrV|d|jfkrPtd|j����|j}|j	r�|jr�|j	t
jkrxt�
d�|j	d7_	dS|j�slz,|jdr�|j�|�n|j�||�WdSttfk
r�|j�|j|j�Yn�tk
�r}z|j�|�WY�dSd}~XYnPttfk
�r6�Yn6tk
�rj}z|�|d�WY�dSd}~XYnX|j� t|�|f�|�!�dS)Nr)z!Invalid address: must be None or r*rre�'Fatal write error on datagram transport)"rr,rr�rr-r$r?r�r�rr.rr/r�r�r�rY�sendtorUrTr�r�r��
_sendto_readyrZrrDr{r|rzr
r�r2rFrrrrH�sH
�

�z!_SelectorDatagramTransport.sendtoc
Cs|jr�|j��\}}z*|jdr.|j�|�n|j�||�Wqttfk
rj|j�||f�Yq�Yqt	k
r�}z|j
�|�WY�dSd}~XYqtt
fk
r��Yqtk
r�}z|�|d�WY�dSd}~XYqXq|��|j�s|j�|j�|j�r|�d�dS)NrerG)r��popleftr�r�rYrHrUrT�
appendleftrZrrDr{r|rzr
r5r�r�r�r�rrFrrrrI*s2
�z(_SelectorDatagramTransport._sendto_ready)NNN)N)r$r�r��collections�dequer�rr�rrHrIr�rrr+rr=�s�

+r=)r��__all__rLrir�r rKrr'r�ImportError�rrrrrr	r
r�logrrr�
BaseEventLoopr�_FlowControlMixin�	Transportr�r0r=rrrr�<module>sF
1�oXbT�@s�ddlZddlZzddlZWnek
r4dZYnXddlmZddlmZddlmZddlmZddl	m
Z
dd	�Zd
ZdZ
dZd
ZGdd�de�ZGdd�dejej�ZGdd�dej�ZdS)�N�)�base_events)�	constants)�	protocols)�
transports)�loggercCs"|rtd��t��}|sd|_|S)Nz(Server side SSL needs a valid SSLContextF)�
ValueError�ssl�create_default_context�check_hostname)�server_side�server_hostname�
sslcontext�r�&/usr/lib/python3.8/asyncio/sslproto.py�_create_transport_contextsrZ	UNWRAPPEDZDO_HANDSHAKEZWRAPPED�SHUTDOWNc@s~eZdZdZdZddd�Zedd��Zedd	��Zed
d��Z	edd
��Z
ddd�Zddd�Zdd�Z
ddd�Zddd�ZdS)�_SSLPipeaAn SSL "Pipe".

    An SSL pipe allows you to communicate with an SSL/TLS protocol instance
    through memory buffers. It can be used to implement a security layer for an
    existing connection where you don't have access to the connection's file
    descriptor, or for some reason you don't want to use it.

    An SSL pipe can be in "wrapped" and "unwrapped" mode. In unwrapped mode,
    data is passed through untransformed. In wrapped mode, application level
    data is encrypted to SSL record level data and vice versa. The SSL record
    level is the lowest level in the SSL protocol suite and is what travels
    as-is over the wire.

    An SslPipe initially is in "unwrapped" mode. To start SSL, call
    do_handshake(). To shutdown SSL again, call unwrap().
    iNcCsH||_||_||_t|_t��|_t��|_d|_	d|_
d|_d|_dS)a�
        The *context* argument specifies the ssl.SSLContext to use.

        The *server_side* argument indicates whether this is a server side or
        client side transport.

        The optional *server_hostname* argument can be used to specify the
        hostname you are connecting to. You may only specify this parameter if
        the _ssl module supports Server Name Indication (SNI).
        NF)
�_context�_server_side�_server_hostname�
_UNWRAPPED�_stater	�	MemoryBIO�	_incoming�	_outgoing�_sslobj�
_need_ssldata�
_handshake_cb�_shutdown_cb)�self�contextrr
rrr�__init__8s

z_SSLPipe.__init__cCs|jS)z*The SSL context passed to the constructor.)r�r rrrr!Nsz_SSLPipe.contextcCs|jS)z^The internal ssl.SSLObject instance.

        Return None if the pipe is not wrapped.
        )rr#rrr�
ssl_objectSsz_SSLPipe.ssl_objectcCs|jS)zgWhether more record level data is needed to complete a handshake
        that is currently in progress.)rr#rrr�need_ssldata[sz_SSLPipe.need_ssldatacCs
|jtkS)zj
        Whether a security layer is currently in effect.

        Return False during handshake.
        )r�_WRAPPEDr#rrr�wrappedasz_SSLPipe.wrappedcCsb|jtkrtd��|jj|j|j|j|jd�|_	t
|_||_|jddd�\}}t
|�dks^t�|S)aLStart the SSL handshake.

        Return a list of ssldata. A ssldata element is a list of buffers

        The optional *callback* argument can be used to install a callback that
        will be called when the handshake is complete. The callback will be
        called with None if successful, else an exception instance.
        z"handshake in progress or completed)rr
�T)�only_handshaker)rr�RuntimeErrorr�wrap_biorrrrr�
_DO_HANDSHAKEr�feed_ssldata�len�AssertionError�r �callback�ssldata�appdatarrr�do_handshakejs	
�z_SSLPipe.do_handshakecCsj|jtkrtd��|jtkr$td��|jttfks6t�t|_||_|�d�\}}|gksf|dgksft�|S)a1Start the SSL shutdown sequence.

        Return a list of ssldata. A ssldata element is a list of buffers

        The optional *callback* argument can be used to install a callback that
        will be called when the shutdown is complete. The callback will be
        called without arguments.
        zno security layer presentzshutdown in progressr()	rrr*�	_SHUTDOWNr&r,r/rr-r0rrr�shutdowns	

z_SSLPipe.shutdowncCs2|j��|�d�\}}|gks.|dgks.t�dS)z�Send a potentially "ragged" EOF.

        This method will raise an SSL_ERROR_EOF exception if the EOF is
        unexpected.
        r(N)r�	write_eofr-r/)r r2r3rrr�feed_eof�s
z_SSLPipe.feed_eofFc
Cs�|jtkr"|r|g}ng}g|fSd|_|r8|j�|�g}g}z�|jtkrz|j��t|_|j	rl|�	d�|rz||fWS|jtkr�|j�
|j�}|�|�|s�q�q�nJ|jt
kr�|j��d|_t|_|jr�|��n|jtkr�|�|j�
��Wnztjtjfk
�rl}zRt|dd�}|tjtjtjfk�rP|jtk�rN|j	�rN|�	|��|tjk|_W5d}~XYnX|jj�r�|�|j�
��||fS)a�Feed SSL record level data into the pipe.

        The data must be a bytes instance. It is OK to send an empty bytes
        instance. This can be used to get ssldata for a handshake initiated by
        this endpoint.

        Return a (ssldata, appdata) tuple. The ssldata element is a list of
        buffers containing SSL data that needs to be sent to the remote SSL.

        The appdata element is a list of buffers containing plaintext data that
        needs to be forwarded to the application. The appdata list may contain
        an empty buffer indicating an SSL "close_notify" alert. This alert must
        be acknowledged by calling shutdown().
        FN�errno)rrrr�writer,rr4r&r�read�max_size�appendr5�unwraprr	�SSLError�CertificateError�getattr�SSL_ERROR_WANT_READ�SSL_ERROR_WANT_WRITE�SSL_ERROR_SYSCALLr�pending)r �datar)r3r2�chunk�exc�	exc_errnorrrr-�sZ










�

z_SSLPipe.feed_ssldatarc
Cs4d|krt|�ksnt�|jtkrT|t|�krD||d�g}ng}|t|�fSg}t|�}d|_z(|t|�kr�||j�||d��7}Wnhtj	k
r�}zHt
|dd�}|jdkr�tj}|_
|tjtjtjfkrڂ|tjk|_W5d}~XYnX|jj�r|�|j���|t|�k�s,|jr`�q,q`||fS)aFeed plaintext data into the pipe.

        Return an (ssldata, offset) tuple. The ssldata element is a list of
        buffers containing record level data that needs to be sent to the
        remote SSL instance. The offset is the number of plaintext bytes that
        were processed, which may be less than the length of data.

        NOTE: In case of short writes, this call MUST be retried with the SAME
        buffer passed into the *data* argument (i.e. the id() must be the
        same). This is an OpenSSL requirement. A further particularity is that
        a short write will always have offset == 0, because the _ssl module
        does not enable partial writes. And even though the offset is zero,
        there will still be encrypted data in ssldata.
        rNFr9ZPROTOCOL_IS_SHUTDOWN)r.r/rr�
memoryviewrrr:r	r?rA�reasonrBr9rCrDrrEr=r;)r rF�offsetr2�viewrHrIrrr�feed_appdata�s6

�
z_SSLPipe.feed_appdata)N)N)N)F)r)�__name__�
__module__�__qualname__�__doc__r<r"�propertyr!r$r%r'r4r6r8r-rNrrrrr$s 








Krc@s�eZdZejjZdd�Zd"dd�Zdd�Z	dd	�Z
d
d�Zdd
�Ze
jfdd�Zdd�Zdd�Zdd�Zd#dd�Zdd�Zedd��Zdd�Zdd�Zd d!�ZdS)$�_SSLProtocolTransportcCs||_||_d|_dS)NF)�_loop�
_ssl_protocol�_closed)r �loop�ssl_protocolrrrr"!sz_SSLProtocolTransport.__init__NcCs|j�||�S)z#Get optional transport information.)rV�_get_extra_info�r �name�defaultrrr�get_extra_info'sz$_SSLProtocolTransport.get_extra_infocCs|j�|�dS�N)rV�_set_app_protocol)r �protocolrrr�set_protocol+sz"_SSLProtocolTransport.set_protocolcCs|jjSr_)rV�
_app_protocolr#rrr�get_protocol.sz"_SSLProtocolTransport.get_protocolcCs|jSr_)rWr#rrr�
is_closing1sz _SSLProtocolTransport.is_closingcCsd|_|j��dS)a
Close the transport.

        Buffered data will be flushed asynchronously.  No more data
        will be received.  After all buffered data is flushed, the
        protocol's connection_lost() method will (eventually) called
        with None as its argument.
        TN)rWrV�_start_shutdownr#rrr�close4sz_SSLProtocolTransport.closecCs&|js"|d|��t|d�|��dS)Nzunclosed transport )�source)rW�ResourceWarningrg)r �_warnrrr�__del__?sz_SSLProtocolTransport.__del__cCs |jj}|dkrtd��|��S)Nz*SSL transport has not been initialized yet)rV�
_transportr*�
is_reading)r �trrrrrmDsz _SSLProtocolTransport.is_readingcCs|jj��dS)z�Pause the receiving end.

        No data will be passed to the protocol's data_received()
        method until resume_reading() is called.
        N)rVrl�
pause_readingr#rrrroJsz#_SSLProtocolTransport.pause_readingcCs|jj��dS)z�Resume the receiving end.

        Data received will once again be passed to the protocol's
        data_received() method.
        N)rVrl�resume_readingr#rrrrpRsz$_SSLProtocolTransport.resume_readingcCs|jj�||�dS)a�Set the high- and low-water limits for write flow control.

        These two values control when to call the protocol's
        pause_writing() and resume_writing() methods.  If specified,
        the low-water limit must be less than or equal to the
        high-water limit.  Neither value can be negative.

        The defaults are implementation-specific.  If only the
        high-water limit is given, the low-water limit defaults to an
        implementation-specific value less than or equal to the
        high-water limit.  Setting high to zero forces low to zero as
        well, and causes pause_writing() to be called whenever the
        buffer becomes non-empty.  Setting low to zero causes
        resume_writing() to be called only once the buffer is empty.
        Use of zero for either limit is generally sub-optimal as it
        reduces opportunities for doing I/O and computation
        concurrently.
        N)rVrl�set_write_buffer_limits)r �high�lowrrrrqZsz-_SSLProtocolTransport.set_write_buffer_limitscCs|jj��S)z,Return the current size of the write buffer.)rVrl�get_write_buffer_sizer#rrrrtosz+_SSLProtocolTransport.get_write_buffer_sizecCs
|jjjSr_)rVrl�_protocol_pausedr#rrrrussz&_SSLProtocolTransport._protocol_pausedcCs<t|tttf�s$tdt|�j����|s,dS|j�|�dS)z�Write some data bytes to the transport.

        This does not block; it buffers the data and arranges for it
        to be sent out asynchronously.
        z+data: expecting a bytes-like instance, got N)	�
isinstance�bytes�	bytearrayrJ�	TypeError�typerOrV�_write_appdata�r rFrrrr:xs
z_SSLProtocolTransport.writecCsdS)zAReturn True if this transport supports write_eof(), False if not.Frr#rrr�
can_write_eof�sz#_SSLProtocolTransport.can_write_eofcCs|j��d|_dS)z�Close the transport immediately.

        Buffered data will be lost.  No more data will be received.
        The protocol's connection_lost() method will (eventually) be
        called with None as its argument.
        TN)rV�_abortrWr#rrr�abort�s
z_SSLProtocolTransport.abort)N)NN)rOrPrQr�
_SendfileMode�FALLBACK�_sendfile_compatibler"r^rbrdrerg�warnings�warnrkrmrorprqrtrSrur:r}rrrrrrTs$



rTc@s�eZdZdZd,dd�Zdd�Zd-d	d
�Zdd�Zd
d�Zdd�Z	dd�Z
dd�Zdd�Zd.dd�Z
dd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd/d&d'�Zd(d)�Zd*d+�ZdS)0�SSLProtocolz�SSL protocol.

    Implementation of SSL on top of a socket using incoming and outgoing
    buffers which are ssl.MemoryBIO objects.
    FNTc		Cs�tdkrtd��|dkr tj}n|dkr6td|����|sDt||�}||_|rZ|sZ||_nd|_||_t	|d�|_
t��|_
d|_||_||_|�|�t|j|�|_d|_d|_d|_d|_d|_||_||_dS)Nzstdlib ssl module not availablerz7ssl_handshake_timeout should be a positive number, got )rF)r	r*r�SSL_HANDSHAKE_TIMEOUTrrrr�_sslcontext�dict�_extra�collections�deque�_write_backlog�_write_buffer_size�_waiterrUr`rT�_app_transport�_sslpipe�_session_established�
_in_handshake�_in_shutdownrl�_call_connection_made�_ssl_handshake_timeout)	r rX�app_protocolr�waiterrr
�call_connection_made�ssl_handshake_timeoutrrrr"�s@��

zSSLProtocol.__init__cCs||_t|tj�|_dSr_)rcrvr�BufferedProtocol�_app_protocol_is_buffer)r r�rrrr`�s
�zSSLProtocol._set_app_protocolcCsD|jdkrdS|j��s:|dk	r.|j�|�n|j�d�d|_dSr_)r��	cancelled�
set_exception�
set_result�r rHrrr�_wakeup_waiter�s

zSSLProtocol._wakeup_waitercCs&||_t|j|j|j�|_|��dS)zXCalled when the low-level connection is made.

        Start the SSL handshake.
        N)rlrr�rrr��_start_handshake)r �	transportrrr�connection_made�s�zSSLProtocol.connection_madecCsn|jr d|_|j�|jj|�n|jdk	r2d|j_d|_d|_t|dd�rT|j	�
�|�|�d|_d|_dS)z�Called when the low-level connection is lost or closed.

        The argument is an exception object or None (the latter
        meaning a regular EOF is received or the connection was
        aborted or closed).
        FNT�_handshake_timeout_handle)
r�rU�	call_soonrc�connection_lostr�rWrlrAr��cancelr�r�r�rrrr��s


zSSLProtocol.connection_lostcCs|j��dS)z\Called when the low-level transport's buffer goes over
        the high-water mark.
        N)rc�
pause_writingr#rrrr��szSSLProtocol.pause_writingcCs|j��dS)z^Called when the low-level transport's buffer drains below
        the low-water mark.
        N)rc�resume_writingr#rrrr�szSSLProtocol.resume_writingcCs"|jdkrdSz|j�|�\}}WnLttfk
r<�Yn4tk
rn}z|�|d�WY�dSd}~XYnX|D]}|j�|�qt|D]�}|�rz&|jr�t	�
|j|�n|j�|�WnPttfk
r��Yn8tk
�r
}z|�|d�WY�dSd}~XYnXq�|�
��qq�dS)zXCalled when some SSL data is received.

        The argument is a bytes object.
        NzSSL error in data receivedz/application protocol failed to receive SSL data)r�r-�
SystemExit�KeyboardInterrupt�
BaseException�_fatal_errorrlr:r�r�_feed_data_to_buffered_protorc�
data_receivedrf)r rFr2r3�erG�exrrrr�s<
��zSSLProtocol.data_receivedcCsTzB|j��rt�d|�|�t�|js@|j	�
�}|r@t�d�W5|j��XdS)aCalled when the other end of the low-level stream
        is half-closed.

        If this returns a false value (including None), the transport
        will close itself.  If it returns a true value, closing the
        transport is up to the protocol.
        z%r received EOFz?returning true from eof_received() has no effect when using sslN)rlrgrU�	get_debugr�debugr��ConnectionResetErrorr�rc�eof_received�warning)r �	keep_openrrrr�-s


zSSLProtocol.eof_receivedcCs4||jkr|j|S|jdk	r,|j�||�S|SdSr_)r�rlr^r[rrrrZCs



zSSLProtocol._get_extra_infocCs.|jr
dS|jr|��nd|_|�d�dS)NTr()r�r�r~r{r#rrrrfKs
zSSLProtocol._start_shutdowncCs.|j�|df�|jt|�7_|��dS)Nr)r�r=r�r.�_process_write_backlogr|rrrr{TszSSLProtocol._write_appdatacCs\|j��r$t�d|�|j��|_nd|_d|_|j�d�|j�	|j
|j�|_|�
�dS)Nz%r starts SSL handshakeT)r(r)rUr�rr��time�_handshake_start_timer�r�r=�
call_laterr��_check_handshake_timeoutr�r�r#rrrr�Ys

��zSSLProtocol._start_handshakecCs*|jdkr&d|j�d�}|�t|��dS)NTz$SSL handshake is taking longer than z! seconds: aborting the connection)r�r�r��ConnectionAbortedError)r �msgrrrr�hs
�z$SSLProtocol._check_handshake_timeoutc
Csd|_|j��|jj}z|dk	r&|�|��}Wnbttfk
rJ�YnJtk
r�}z,t	|t
j�rld}nd}|�||�WY�dSd}~XYnX|j
��r�|j
��|j}t�d||d�|jj||��|��|d�|jr�|j�|j�|��d|_|j
�|j�dS)NFz1SSL handshake failed on verifying the certificatezSSL handshake failedz%r: SSL handshake took %.1f msg@�@)�peercert�cipher�compressionr$T)r�r�r�r�r$�getpeercertr�r�r�rvr	r@r�rUr�r�r�rr�r��updater�r�r�rcr�r�r�r�r�r�)r �
handshake_exc�sslobjr�rHr��dtrrr�_on_handshake_completeqs8

�z"SSLProtocol._on_handshake_completec
CsP|jdks|jdkrdSz�tt|j��D]�}|jd\}}|rR|j�||�\}}n*|rj|j�|j�}d}n|j�|j	�}d}|D]}|j�
|�q�|t|�kr�||f|jd<|jjs�t�|jj
r�|j��q�|jd=|jt|�8_q(Wn^ttfk
�r�YnDtk
�rJ}z$|j�r.|�|�n|�|d�W5d}~XYnXdS)NrrzFatal error on SSL transport)rlr��ranger.r�rNr4r�r6�	_finalizer:r%r/�_pausedrpr�r�r�r�r�r�)r �irFrLr2rGrHrrrr��s<�
z"SSLProtocol._process_write_backlog�Fatal error on transportcCsVt|t�r(|j��r@tjd||dd�n|j�|||j|d��|jrR|j�|�dS)Nz%r: %sT)�exc_info)�message�	exceptionr�ra)	rv�OSErrorrUr�rr��call_exception_handlerrl�_force_close)r rHr�rrrr��s

�zSSLProtocol._fatal_errorcCsd|_|jdk	r|j��dSr_)r�rlrgr#rrrr��s
zSSLProtocol._finalizecCs(z|jdk	r|j��W5|��XdSr_)r�rlrr#rrrr~�s
zSSLProtocol._abort)FNTN)N)N)r�)rOrPrQrRr"r`r�r�r�r�r�r�r�rZrfr{r�r�r�r�r�r�r~rrrrr��s0�
.

&
		)+
r�)r�r�r	�ImportError�rrrr�logrrrr,r&r5�objectr�_FlowControlMixin�	TransportrT�Protocolr�rrrr�<module>s*
y�xX�
@s�dZdZddlZddlZddlmZddlmZddlmZddlm	Z	dd	�ej
ejgejfej
eejejejej
eejej
efd
�dd�ZdS)
zFSupport for running coroutines in parallel with staggered start times.)�staggered_race�N�)�events)�
exceptions)�locks)�tasks)�loop)�coro_fns�delayr�returnc		�s��p
t���t|��d�d�g�g�tjtjdd���������fdd�����d��}��|�zfd}|t
��kr�t���IdH\}}t
|�}|D]$}|�
�r�|��s�|��r�|���q�ql���fW�S�D]}|�	�q�XdS)a�Run coroutines with staggered start times and take the first to finish.

    This method takes an iterable of coroutine functions. The first one is
    started immediately. From then on, whenever the immediately preceding one
    fails (raises an exception), or when *delay* seconds has passed, the next
    coroutine is started. This continues until one of the coroutines complete
    successfully, in which case all others are cancelled, or until all
    coroutines fail.

    The coroutines provided should be well-behaved in the following way:

    * They should only ``return`` if completed successfully.

    * They should always raise an exception if they did not complete
      successfully. In particular, if they handle cancellation, they should
      probably reraise, like this::

        try:
            # do work
        except asyncio.CancelledError:
            # undo partially completed work
            raise

    Args:
        coro_fns: an iterable of coroutine functions, i.e. callables that
            return a coroutine object when called. Use ``functools.partial`` or
            lambdas to pass arguments.

        delay: amount of time, in seconds, between starting coroutines. If
            ``None``, the coroutines will run sequentially.

        loop: the event loop to use.

    Returns:
        tuple *(winner_result, winner_index, exceptions)* where

        - *winner_result*: the result of the winning coroutine, or ``None``
          if no coroutines won.

        - *winner_index*: the index of the winning coroutine in
          ``coro_fns``, or ``None`` if no coroutines won. If the winning
          coroutine may return None on success, *winner_index* can be used
          to definitively determine whether any coroutine won.

        - *exceptions*: list of exceptions returned by the coroutines.
          ``len(exceptions)`` is equal to the number of coroutines actually
          started, and the order is the same as in ``coro_fns``. The winning
          coroutine's entry is ``None``.

    N)�previous_failedrc	
�sN|dk	r6t�tj��t�|����IdHW5QRXzt��\}}Wntk
r\YdSXt	�
�}���|��}��|�t
��|dks�t���d�t
��|dks�t�z|�IdH}WnLttfk
r��Ynptk
�r}z|�|<|��W5d}~XYn>X�dk�st�|�|�t��D]\}}||k�r,|���q,dS)N�r)�
contextlib�suppress�exceptions_mod�TimeoutErrorr�wait_for�wait�next�
StopIterationr�Event�create_task�append�len�AssertionError�
SystemExit�KeyboardInterrupt�
BaseException�set�	enumerate�cancel)	r�
this_index�coro_fn�this_failed�	next_task�result�e�i�t�r
�
enum_coro_fnsrr�run_one_coro�
running_tasks�winner_index�
winner_result��'/usr/lib/python3.8/asyncio/staggered.pyr+Rs4 


z$staggered_race.<locals>.run_one_coror)r�get_running_loopr�typing�Optionalrrrrr rrr�done�	cancelled�	exception)	r	r
r�
first_taskr(�
done_countr4�_�dr/r)r0rs,=
�0
r)�__doc__�__all__rr2�rrrrr�Iterable�Callable�	Awaitabler3�float�AbstractEventLoop�Tuple�Any�int�List�	Exceptionrr/r/r/r0�<module>s&����X�P�@s&dZddlZddlZddlZddlZeed�r6ed7ZddlmZddlmZddlm	Z	dd	lm
Z
dd
lmZddlm
Z
ddlmZd
Zdded�dd�Zd ded�dd�Zeed�r�d!ded�dd�Zd"ded�dd�ZGdd�dej�ZGdd�deej�ZGdd�d�ZGdd�d�ZdS)#)�StreamReader�StreamWriter�StreamReaderProtocol�open_connection�start_server�N�AF_UNIX)�open_unix_connection�start_unix_server�)�
coroutines)�events)�
exceptions)�format_helpers)�	protocols)�logger)�sleepi)�loop�limitc	�st|dkrt��}ntjdtdd�t||d�}t||d��|j�fdd�||f|�IdH\}}t|�||�}||fS)	a�A wrapper for create_connection() returning a (reader, writer) pair.

    The reader returned is a StreamReader instance; the writer is a
    StreamWriter instance.

    The arguments are all the usual arguments to create_connection()
    except protocol_factory; most common are positional host and port,
    with various optional keyword arguments following.

    Additional optional keyword arguments are loop (to set the event loop
    instance to use) and limit (to set the buffer limit passed to the
    StreamReader).

    (If you want to customize the StreamReader and/or
    StreamReaderProtocol classes, just copy the code -- there's
    really nothing special here except some convenience.)
    N�[The loop argument is deprecated since Python 3.8, and scheduled for removal in Python 3.10.���
stacklevel�rr�rcs�S�N�r��protocolr�%/usr/lib/python3.8/asyncio/streams.py�<lambda>5�z!open_connection.<locals>.<lambda>)	r�get_event_loop�warnings�warn�DeprecationWarningrr�create_connectionr)	�host�portrr�kwds�reader�	transport�_�writerrrrrs"
�
��rc�sJ�dkrt���ntjdtdd����fdd�}�j|||f|�IdHS)a�Start a socket server, call back for each client connected.

    The first parameter, `client_connected_cb`, takes two parameters:
    client_reader, client_writer.  client_reader is a StreamReader
    object, while client_writer is a StreamWriter object.  This
    parameter can either be a plain callback function or a coroutine;
    if it is a coroutine, it will be automatically converted into a
    Task.

    The rest of the arguments are all the usual arguments to
    loop.create_server() except protocol_factory; most common are
    positional host and port, with various optional keyword arguments
    following.  The return value is the same as loop.create_server().

    Additional optional keyword arguments are loop (to set the event loop
    instance to use) and limit (to set the buffer limit passed to the
    StreamReader).

    The return value is the same as loop.create_server(), i.e. a
    Server object which can be used to stop the service.
    Nrrrcst��d�}t|��d�}|S�Nrr�rr�r)r��client_connected_cbrrrr�factoryXs
�zstart_server.<locals>.factory)rr!r"r#r$�
create_server)r1r&r'rrr(r2rr0rr:s
�rc�sr|dkrt��}ntjdtdd�t||d�}t||d��|j�fdd�|f|�IdH\}}t|�||�}||fS)	z@Similar to `open_connection` but works with UNIX Domain Sockets.Nrrrrrcs�Srrrrrrrpr z&open_unix_connection.<locals>.<lambda>)	rr!r"r#r$rr�create_unix_connectionr)�pathrrr(r)r*r+r,rrrrds 
�
��rc�sH�dkrt���ntjdtdd����fdd�}�j||f|�IdHS)z=Similar to `start_server` but works with UNIX Domain Sockets.Nrrrcst��d�}t|��d�}|Sr-r.r/r0rrr2~s
�z"start_unix_server.<locals>.factory)rr!r"r#r$�create_unix_server)r1r5rrr(r2rr0rr	ts
�r	c@sBeZdZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�FlowControlMixina)Reusable flow control logic for StreamWriter.drain().

    This implements the protocol methods pause_writing(),
    resume_writing() and connection_lost().  If the subclass overrides
    these it must call the super methods.

    StreamWriter.drain() must wait for _drain_helper() coroutine.
    NcCs0|dkrt��|_n||_d|_d|_d|_dS�NF)rr!�_loop�_paused�
_drain_waiter�_connection_lost)�selfrrrr�__init__�szFlowControlMixin.__init__cCs*|jr
t�d|_|j��r&t�d|�dS)NTz%r pauses writing)r:�AssertionErrorr9�	get_debugr�debug�r=rrr�
pause_writing�s

zFlowControlMixin.pause_writingcCsP|js
t�d|_|j��r&t�d|�|j}|dk	rLd|_|��sL|�d�dS)NFz%r resumes writing)	r:r?r9r@rrAr;�done�
set_result�r=�waiterrrr�resume_writing�s

zFlowControlMixin.resume_writingcCsVd|_|jsdS|j}|dkr"dSd|_|��r4dS|dkrH|�d�n
|�|�dS�NT)r<r:r;rDrE�
set_exception�r=�excrGrrr�connection_lost�sz FlowControlMixin.connection_lostc�sP|jrtd��|jsdS|j}|dks2|��s2t�|j��}||_|IdHdS)NzConnection lost)r<�ConnectionResetErrorr:r;�	cancelledr?r9�
create_futurerFrrr�
_drain_helper�s
zFlowControlMixin._drain_helpercCst�dSr)�NotImplementedError�r=�streamrrr�_get_close_waiter�sz"FlowControlMixin._get_close_waiter)N)
�__name__�
__module__�__qualname__�__doc__r>rCrHrMrQrUrrrrr7�s	
	r7csfeZdZdZdZd�fdd�	Zedd��Zdd�Z�fd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
�ZS)ra=Helper class to adapt between Protocol and StreamReader.

    (This is a helper class instead of making StreamReader itself a
    Protocol subclass, because the StreamReader has other potential
    uses, and to prevent the user of the StreamReader to accidentally
    call inappropriate methods of the protocol.)
    Ncsnt�j|d�|dk	r,t�|�|_|j|_nd|_|dk	r@||_d|_d|_d|_	||_
d|_|j�
�|_dS)NrF)�superr>�weakref�ref�_stream_reader_wr�_source_traceback�_strong_reader�_reject_connection�_stream_writer�
_transport�_client_connected_cb�	_over_sslr9rP�_closed)r=�
stream_readerr1r��	__class__rrr>�s
zStreamReaderProtocol.__init__cCs|jdkrdS|��Sr)r]rBrrr�_stream_reader�s
z#StreamReaderProtocol._stream_readercCs�|jr6ddi}|jr|j|d<|j�|�|��dS||_|j}|dk	rT|�|�|�d�dk	|_	|j
dk	r�t||||j�|_|�
||j�}t
�|�r�|j�|�d|_dS)N�messagezpAn open stream was garbage collected prior to establishing network connection; call "stream.close()" explicitly.�source_traceback�
sslcontext)r`r^r9�call_exception_handler�abortrbri�
set_transport�get_extra_infordrcrrar�iscoroutine�create_taskr_)r=r*�contextr)�resrrr�connection_made�s2�


��
z$StreamReaderProtocol.connection_madecsx|j}|dk	r*|dkr |��n
|�|�|j��sV|dkrJ|j�d�n|j�|�t��|�d|_d|_	d|_
dSr)ri�feed_eofrJrerDrErZrMr]rarb)r=rLr)rgrrrM
s


z$StreamReaderProtocol.connection_lostcCs|j}|dk	r|�|�dSr)ri�	feed_data)r=�datar)rrr�
data_receivedsz"StreamReaderProtocol.data_receivedcCs$|j}|dk	r|��|jr dSdS)NFT)rirvrd)r=r)rrr�eof_received sz!StreamReaderProtocol.eof_receivedcCs|jSr)rerSrrrrU+sz&StreamReaderProtocol._get_close_waitercCs"|j}|��r|��s|��dSr)rerDrO�	exception)r=�closedrrr�__del__.szStreamReaderProtocol.__del__)NN)rVrWrXrYr^r>�propertyrirurMryrzrUr}�
__classcell__rrrgrr�s
rc@sveZdZdZdd�Zdd�Zedd��Zdd	�Zd
d�Z	dd
�Z
dd�Zdd�Zdd�Z
dd�Zddd�Zdd�ZdS)ra'Wraps a Transport.

    This exposes write(), writelines(), [can_]write_eof(),
    get_extra_info() and close().  It adds drain() which returns an
    optional Future on which you can wait for flow control.  It also
    adds a transport property which references the Transport
    directly.
    cCsJ||_||_|dks"t|t�s"t�||_||_|j��|_|j�	d�dSr)
rb�	_protocol�
isinstancerr?�_readerr9rP�
_complete_futrE)r=r*rr)rrrrr>@szStreamWriter.__init__cCs@|jjd|j��g}|jdk	r0|�d|j���d�d�|��S)N�
transport=zreader=�<{}>� )rhrVrbr��append�format�join�r=�inforrr�__repr__Js
zStreamWriter.__repr__cCs|jSr)rbrBrrrr*PszStreamWriter.transportcCs|j�|�dSr)rb�write�r=rxrrrr�TszStreamWriter.writecCs|j�|�dSr)rb�
writelinesr�rrrr�WszStreamWriter.writelinescCs
|j��Sr)rb�	write_eofrBrrrr�ZszStreamWriter.write_eofcCs
|j��Sr)rb�
can_write_eofrBrrrr�]szStreamWriter.can_write_eofcCs
|j��Sr)rb�closerBrrrr�`szStreamWriter.closecCs
|j��Sr)rb�
is_closingrBrrrr�cszStreamWriter.is_closingc�s|j�|�IdHdSr)r�rUrBrrr�wait_closedfszStreamWriter.wait_closedNcCs|j�||�Sr)rbrp)r=�name�defaultrrrrpiszStreamWriter.get_extra_infoc�sL|jdk	r |j��}|dk	r |�|j��r8td�IdH|j��IdHdS)zyFlush the write buffer.

        The intended use is to write

          w.write(data)
          await w.drain()
        Nr)r�r{rbr�rr�rQ)r=rLrrr�drainls



zStreamWriter.drain)N)rVrWrXrYr>r�r~r*r�r�r�r�r�r�r�rpr�rrrrr6s	


rc@s�eZdZdZedfdd�Zdd�Zdd�Zdd	�Zd
d�Z	dd
�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zd&dd�Zd'dd�Zd d!�Zd"d#�Zd$d%�ZdS)(rNcCsv|dkrtd��||_|dkr*t��|_n||_t�|_d|_d|_d|_	d|_
d|_|j��rrt
�t�d��|_dS)NrzLimit cannot be <= 0Fr
)�
ValueError�_limitrr!r9�	bytearray�_buffer�_eof�_waiter�
_exceptionrbr:r@r�
extract_stack�sys�	_getframer^)r=rrrrrr>�s 
�zStreamReader.__init__cCs�dg}|jr"|�t|j��d��|jr2|�d�|jtkrN|�d|j���|jrf|�d|j���|jr~|�d|j���|jr�|�d|j���|j	r�|�d�d	�
d
�|��S)Nrz bytes�eofzlimit=zwaiter=z
exception=r�Zpausedr�r�)r�r��lenr�r��_DEFAULT_LIMITr�r�rbr:r�r�r�rrrr��s 


zStreamReader.__repr__cCs|jSr)r�rBrrrr{�szStreamReader.exceptioncCs0||_|j}|dk	r,d|_|��s,|�|�dSr)r�r�rOrJrKrrrrJ�szStreamReader.set_exceptioncCs*|j}|dk	r&d|_|��s&|�d�dS)z1Wakeup read*() functions waiting for data or EOF.N)r�rOrErFrrr�_wakeup_waiter�s
zStreamReader._wakeup_waitercCs|jdkstd��||_dS)NzTransport already set)rbr?)r=r*rrrro�szStreamReader.set_transportcCs*|jr&t|j�|jkr&d|_|j��dSr8)r:r�r�r�rb�resume_readingrBrrr�_maybe_resume_transport�sz$StreamReader._maybe_resume_transportcCsd|_|��dSrI)r�r�rBrrrrv�szStreamReader.feed_eofcCs|jo|jS)z=Return True if the buffer is empty and 'feed_eof' was called.)r�r�rBrrr�at_eof�szStreamReader.at_eofcCs�|jrtd��|sdS|j�|�|��|jdk	r~|js~t|j�d|jkr~z|j�	�Wnt
k
rvd|_YnXd|_dS)Nzfeed_data after feed_eofrT)r�r?r��extendr�rbr:r�r��
pause_readingrRr�rrrrw�s
��zStreamReader.feed_datac�sf|jdk	rt|�d���|jr&td��|jr<d|_|j��|j��|_z|jIdHW5d|_XdS)zpWait until feed_data() or feed_eof() is called.

        If stream was paused, automatically resume it.
        NzF() called while another coroutine is already waiting for incoming dataz_wait_for_data after EOFF)	r��RuntimeErrorr�r?r:rbr�r9rP)r=�	func_namerrr�_wait_for_data�s	
�
zStreamReader._wait_for_datac
�s�d}t|�}z|�|�IdH}Wn�tjk
rN}z|jWY�Sd}~XYnhtjk
r�}zH|j�||j�r�|jd|j|�=n
|j�	�|�
�t|jd��W5d}~XYnX|S)a�Read chunk of data from the stream until newline (b'
') is found.

        On success, return chunk that ends with newline. If only partial
        line can be read due to EOF, return incomplete line without
        terminating newline. When EOF was reached while no bytes read, empty
        bytes object is returned.

        If limit is reached, ValueError will be raised. In that case, if
        newline was found, complete line including newline will be removed
        from internal buffer. Else, internal buffer will be cleared. Limit is
        compared against part of the line without newline.

        If stream was paused, this function will automatically resume it if
        needed.
        �
Nr)
r��	readuntilr
�IncompleteReadError�partial�LimitOverrunErrorr��
startswith�consumed�clearr�r��args)r=�sep�seplen�line�errr�readline	s
 zStreamReader.readliner�c�s�t|�}|dkrtd��|jdk	r(|j�d}t|j�}|||kr||j�||�}|dkrZq�|d|}||jkr|t�d|��|jr�t	|j�}|j�
�t�|d��|�d�IdHq,||jkr�t�d|��|jd||�}|jd||�=|�
�t	|�S)	aVRead data from the stream until ``separator`` is found.

        On success, the data and separator will be removed from the
        internal buffer (consumed). Returned data will include the
        separator at the end.

        Configured stream limit is used to check result. Limit sets the
        maximal length of data that can be returned, not counting the
        separator.

        If an EOF occurs and the complete separator is still not found,
        an IncompleteReadError exception will be raised, and the internal
        buffer will be reset.  The IncompleteReadError.partial attribute
        may contain the separator partially.

        If the data cannot be read because of over limit, a
        LimitOverrunError exception  will be raised, and the data
        will be left in the internal buffer, so it can be read again.
        rz,Separator should be at least one-byte stringN���r
z2Separator is not found, and chunk exceed the limitr�z2Separator is found, but chunk is longer than limit)r�r�r�r��findr�r
r�r��bytesr�r�r�r�)r=�	separatorr��offset�buflen�isep�chunkrrrr�(s>


�


�zStreamReader.readuntilr�c�s�|jdk	r|j�|dkrdS|dkrVg}|�|j�IdH}|s@qL|�|�q(d�|�S|jsr|jsr|�d�IdHt|jd|��}|jd|�=|�	�|S)a�Read up to `n` bytes from the stream.

        If n is not provided, or set to -1, read until EOF and return all read
        bytes. If the EOF was received and the internal buffer is empty, return
        an empty bytes object.

        If n is zero, return empty bytes object immediately.

        If n is positive, this function try to read `n` bytes, and may return
        less or equal bytes than requested, but at least one byte. If EOF was
        received before any byte is read, this function returns empty byte
        object.

        Returned value is not limited with limit, configured at stream
        creation.

        If stream was paused, this function will automatically resume it if
        needed.
        Nrr �read)
r�r�r�r�r�r�r�r�r�r�)r=�n�blocks�blockrxrrrr��s"

zStreamReader.readc�s�|dkrtd��|jdk	r |j�|dkr,dSt|j�|krr|jr`t|j�}|j��t�||��|�	d�IdHq,t|j�|kr�t|j�}|j��nt|jd|��}|jd|�=|�
�|S)a�Read exactly `n` bytes.

        Raise an IncompleteReadError if EOF is reached before `n` bytes can be
        read. The IncompleteReadError.partial attribute of the exception will
        contain the partial read bytes.

        if n is zero, return empty bytes object.

        Returned value is not limited with limit, configured at stream
        creation.

        If stream was paused, this function will automatically resume it if
        needed.
        rz*readexactly size can not be less than zeroNr �readexactly)r�r�r�r�r�r�r�r
r�r�r�)r=r��
incompleterxrrrr��s&



zStreamReader.readexactlycCs|SrrrBrrr�	__aiter__�szStreamReader.__aiter__c�s|��IdH}|dkrt�|S)Nr )r��StopAsyncIteration)r=�valrrr�	__anext__�szStreamReader.__anext__)r�)r�)rVrWrXr^r�r>r�r{rJr�ror�rvr�rwr�r�r�r�r�r�r�rrrrr�s$	
[
2)r)NN)NN)N)N)�__all__�socketr�r"r[�hasattr�rrr
rr�logr�tasksrr�rrrr	�Protocolr7rrrrrrr�<module>sF
�!�'
��DkPX��@s�dZddlZddlZddlmZddlmZddlmZddlmZddlm	Z	ej
Z
ejZejZGd	d
�d
ej
ej�ZGdd�d�Zddddejfd
d�Zddddejd�dd�ZdS))�create_subprocess_exec�create_subprocess_shell�N�)�events)�	protocols)�streams)�tasks)�loggercsXeZdZdZ�fdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Z�ZS)�SubprocessStreamProtocolz0Like StreamReaderProtocol, but for a subprocess.csHt�j|d�||_d|_|_|_d|_d|_g|_|j	�
�|_dS)N��loopF)�super�__init__�_limit�stdin�stdout�stderr�
_transport�_process_exited�	_pipe_fds�_loop�
create_future�
_stdin_closed)�self�limitr��	__class__��(/usr/lib/python3.8/asyncio/subprocess.pyrsz!SubprocessStreamProtocol.__init__cCsn|jjg}|jdk	r&|�d|j���|jdk	rB|�d|j���|jdk	r^|�d|j���d�d�|��S)Nzstdin=zstdout=zstderr=z<{}>� )r�__name__r�appendrr�format�join)r�inforrr�__repr__s



z!SubprocessStreamProtocol.__repr__cCs�||_|�d�}|dk	rDtj|j|jd�|_|j�|�|j�	d�|�d�}|dk	r�tj|j|jd�|_
|j
�|�|j�	d�|�d�}|dk	r�tj||d|jd�|_dS)Nr�rr�r)�protocol�readerr)
r�get_pipe_transportr�StreamReaderrrr�
set_transportrr!r�StreamWriterr)r�	transport�stdout_transport�stderr_transport�stdin_transportrrr�connection_made)s,
�
�
�z(SubprocessStreamProtocol.connection_madecCs:|dkr|j}n|dkr |j}nd}|dk	r6|�|�dS)Nrr')rr�	feed_data)r�fd�datar)rrr�pipe_data_receivedAsz+SubprocessStreamProtocol.pipe_data_receivedcCs�|dkrN|j}|dk	r|��|�|�|dkr>|j�d�n|j�|�dS|dkr^|j}n|dkrn|j}nd}|dk	r�|dkr�|��n
|�|�||j	kr�|j	�
|�|��dS)Nrrr')r�close�connection_lostr�
set_result�
set_exceptionrr�feed_eofr�remove�_maybe_close_transport)rr4�exc�piper)rrr�pipe_connection_lostKs*



z-SubprocessStreamProtocol.pipe_connection_lostcCsd|_|��dS)NT)rr=�rrrr�process_exitedfsz'SubprocessStreamProtocol.process_exitedcCs(t|j�dkr$|jr$|j��d|_dS)Nr)�lenrrrr7rArrrr=js
z/SubprocessStreamProtocol._maybe_close_transportcCs||jkr|jSdS�N)rr)r�streamrrr�_get_close_waiteros
z*SubprocessStreamProtocol._get_close_waiter)
r �
__module__�__qualname__�__doc__rr%r2r6r@rBr=rF�
__classcell__rrrrr
s	

r
c@sjeZdZdd�Zdd�Zedd��Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Zdd�Zdd�Z
ddd�ZdS)�ProcesscCs8||_||_||_|j|_|j|_|j|_|��|_dSrD)r�	_protocolrrrr�get_pid�pid)rr.r(rrrrruszProcess.__init__cCsd|jj�d|j�d�S)N�<r�>)rr rNrArrrr%~szProcess.__repr__cCs
|j��SrD)r�get_returncoderArrr�
returncode�szProcess.returncodec�s|j��IdHS)z?Wait until the process exit and return the process return code.N)r�_waitrArrr�wait�szProcess.waitcCs|j�|�dSrD)r�send_signal)r�signalrrrrU�szProcess.send_signalcCs|j��dSrD)r�	terminaterArrrrW�szProcess.terminatecCs|j��dSrD)r�killrArrrrX�szProcess.killc
�s�|j��}|j�|�|r,t�d|t|��z|j��IdHWn8tt	fk
rx}z|rht�d||�W5d}~XYnX|r�t�d|�|j�
�dS)Nz%%r communicate: feed stdin (%s bytes)z%r communicate: stdin got %rz%r communicate: close stdin)r�	get_debugr�writer	�debugrC�drain�BrokenPipeError�ConnectionResetErrorr7)r�inputr[r>rrr�_feed_stdin�s 
� zProcess._feed_stdinc�sdSrDrrArrr�_noop�sz
Process._noopc�s�|j�|�}|dkr|j}n|dks(t�|j}|j��rV|dkrDdnd}t�d||�|�	�IdH}|j��r�|dkrzdnd}t�d||�|�
�|S)Nr'rrrz%r communicate: read %sz%r communicate: close %s)rr*r�AssertionErrorrrrYr	r[�readr7)rr4r.rE�name�outputrrr�_read_stream�s

zProcess._read_streamNc�s�|dk	r|�|�}n|��}|jdk	r2|�d�}n|��}|jdk	rP|�d�}n|��}tj||||jd�IdH\}}}|��IdH||fS)Nrr'r)	r`rarrfrr�gatherrrT)rr_rrrrrr�communicate�s


�zProcess.communicate)N)r rGrHrr%�propertyrRrTrUrWrXr`rarfrhrrrrrKts	
rKc
�sb�dkrt���ntjdtdd���fdd�}�j||f|||d�|��IdH\}}	t||	��S)N�ZThe loop argument is deprecated since Python 3.8 and scheduled for removal in Python 3.10.r'��
stacklevelcst��d�S�Nr&�r
rr&rr�<lambda>�s�z)create_subprocess_shell.<locals>.<lambda>�rrr)r�get_event_loop�warnings�warn�DeprecationWarning�subprocess_shellrK)
�cmdrrrrr�kwds�protocol_factoryr.r(rr&rr�s$
����r)rrrrrc�sf�dkrt���ntjdtdd���fdd�}�j||f|�|||d�|��IdH\}	}
t|	|
��S)Nrjr'rkcst��d�Srmrnrr&rrro�s�z(create_subprocess_exec.<locals>.<lambda>rp)rrqrrrsrt�subprocess_execrK)�programrrrrr�argsrwrxr.r(rr&rr�s(
�����r)�__all__�
subprocessrr�rrrr�logr	�PIPE�STDOUT�DEVNULL�FlowControlMixin�SubprocessProtocolr
rK�_DEFAULT_LIMITrrrrrr�<module>s.�bV�
�X�^�@svdZdZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZddlm
Z
ddlmZddlmZdd	lmZdd
l
mZe�d�jZdBdd�ZdCd
d�ZdDdd�Zdd�ZGdd�dej�ZeZzddlZWnek
r�YnXejZZdd�dd�Zejj Z ejj!Z!ejj"Z"dde"d�dd�Z#dd�Z$dd�dd�Z%d d!�Z&d"d#�Z'ddd$�d%d&�Z(ej)d'd(��Z*dEdd�d)d*�Z+dd�d+d,�Z,ej)d-d.��Z-ee-_Gd/d0�d0ej.�Z/dd1d2�d3d4�Z0dd�d5d6�Z1d7d8�Z2e
�3�Z4iZ5d9d:�Z6d;d<�Z7d=d>�Z8d?d@�Z9e6Z:e9Z;e7Z<e8Z=z$ddAlm6Z6m9Z9m7Z7m8Z8m4Z4m5Z5Wnek
�r`YnXe6Z>e9Z?e7Z@e8ZAdS)Fz0Support for tasks, coroutines and the scheduler.)�Task�create_task�FIRST_COMPLETED�FIRST_EXCEPTION�
ALL_COMPLETED�wait�wait_for�as_completed�sleep�gather�shield�
ensure_future�run_coroutine_threadsafe�current_task�	all_tasks�_register_task�_unregister_task�_enter_task�_leave_task�N�)�
base_tasks)�
coroutines)�events)�
exceptions)�futures)�
_is_coroutinecCs|dkrt��}t�|�S)z!Return a currently executed task.N)r�get_running_loop�_current_tasks�get��loop�r!�#/usr/lib/python3.8/asyncio/tasks.pyr"srcs^�dkrt���d}ztt�}WqLtk
rF|d7}|dkrB�YqXqLq�fdd�|D�S)z'Return a set of all tasks for the loop.Nrr��cs&h|]}t�|��kr|��s|�qSr!)r�	_get_loop�done��.0�trr!r"�	<setcomp><s�zall_tasks.<locals>.<setcomp>)rr�list�
_all_tasks�RuntimeError�r �i�tasksr!rr"r)srcs^�dkrt���d}ztt�}WqLtk
rF|d7}|dkrB�YqXqLq�fdd�|D�S)Nrrr#csh|]}t�|��kr|�qSr!)rr$r&rr!r"r)Usz$_all_tasks_compat.<locals>.<setcomp>)r�get_event_loopr*r+r,r-r!rr"�_all_tasks_compat@sr1cCs4|dk	r0z
|j}Wntk
r&Yn
X||�dS�N)�set_name�AttributeError)�task�namer3r!r!r"�_set_task_nameXs
r7cs�eZdZdZdZed%dd��Zed&dd��Zddd��fd	d
�
Z�fdd�Z	d
d�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�dd�Zddd�dd�Zdd �Zd'�fd!d"�	Zd#d$�Z�ZS)(rz A coroutine wrapped in a Future.TNcCs(tjdtdd�|dkr t��}t|�S)z�Return the currently running task in an event loop or None.

        By default the current task for the current event loop is returned.

        None is returned when called not in the context of a Task.
        zVTask.current_task() is deprecated since Python 3.7, use asyncio.current_task() instead���
stacklevelN)�warnings�warn�DeprecationWarningrr0r��clsr r!r!r"rts�zTask.current_taskcCstjdtdd�t|�S)z|Return a set of all tasks for an event loop.

        By default all tasks for the current event loop are returned.
        zPTask.all_tasks() is deprecated since Python 3.7, use asyncio.all_tasks() insteadr8r9)r;r<r=r1r>r!r!r"r�s
�zTask.all_tasks)r r6cs�t�j|d�|jr|jd=t�|�s:d|_td|����|dkrRdt���|_n
t	|�|_d|_
d|_||_t
��|_|jj|j|jd�t|�dS)Nr���Fza coroutine was expected, got zTask-��context)�super�__init__�_source_tracebackr�iscoroutine�_log_destroy_pending�	TypeError�_task_name_counter�_name�str�_must_cancel�_fut_waiter�_coro�contextvars�copy_context�_context�_loop�	call_soon�_Task__stepr)�self�coror r6��	__class__r!r"rD�s


z
Task.__init__csF|jtjkr8|jr8|dd�}|jr,|j|d<|j�|�t���dS)Nz%Task was destroyed but it is pending!)r5�message�source_traceback)	�_stater�_PENDINGrGrErR�call_exception_handlerrC�__del__)rUrBrWr!r"r^�s�
zTask.__del__cCs
t�|�Sr2)r�_task_repr_info�rUr!r!r"�
_repr_info�szTask._repr_infocCs|jSr2)rNr`r!r!r"�get_coro�sz
Task.get_corocCs|jSr2)rJr`r!r!r"�get_name�sz
Task.get_namecCst|�|_dSr2)rKrJ)rU�valuer!r!r"r3�sz
Task.set_namecCstd��dS)Nz*Task does not support set_result operation�r,)rU�resultr!r!r"�
set_result�szTask.set_resultcCstd��dS)Nz-Task does not support set_exception operationre)rU�	exceptionr!r!r"�
set_exception�szTask.set_exception)�limitcCst�||�S)a�Return the list of stack frames for this task's coroutine.

        If the coroutine is not done, this returns the stack where it is
        suspended.  If the coroutine has completed successfully or was
        cancelled, this returns an empty list.  If the coroutine was
        terminated by an exception, this returns the list of traceback
        frames.

        The frames are always ordered from oldest to newest.

        The optional limit gives the maximum number of frames to
        return; by default all available frames are returned.  Its
        meaning differs depending on whether a stack or a traceback is
        returned: the newest frames of a stack are returned, but the
        oldest frames of a traceback are returned.  (This matches the
        behavior of the traceback module.)

        For reasons beyond our control, only one stack frame is
        returned for a suspended coroutine.
        )r�_task_get_stack)rUrjr!r!r"�	get_stack�szTask.get_stack)rj�filecCst�|||�S)anPrint the stack or traceback for this task's coroutine.

        This produces output similar to that of the traceback module,
        for the frames retrieved by get_stack().  The limit argument
        is passed to get_stack().  The file argument is an I/O stream
        to which the output is written; by default output is written
        to sys.stderr.
        )r�_task_print_stack)rUrjrmr!r!r"�print_stack�s	zTask.print_stackcCs4d|_|��rdS|jdk	r*|j��r*dSd|_dS)a�Request that this task cancel itself.

        This arranges for a CancelledError to be thrown into the
        wrapped coroutine on the next cycle through the event loop.
        The coroutine then has a chance to clean up or even deny
        the request using try/except/finally.

        Unlike Future.cancel, this does not guarantee that the
        task will be cancelled: the exception might be caught and
        acted upon, delaying cancellation of the task or preventing
        cancellation completely.  The task may also return a value or
        raise a different exception.

        Immediately after this method is called, Task.cancelled() will
        not return True (unless the task was already cancelled).  A
        task will be marked as cancelled when the wrapped coroutine
        terminates with a CancelledError exception (even if cancel()
        was not called).
        FNT)�_log_tracebackr%rM�cancelrLr`r!r!r"rq�s

zTask.cancelc
s�|��rt�d|�d|����|jr>t|tj�s8t��}d|_|j}d|_t|j	|��zfz"|dkrp|�d�}n
|�|�}Wn�t
k
r�}z*|jr�d|_t���nt��|j�W5d}~XY�n�tjk
r�t���Y�n�ttfk
�r}zt��|��W5d}~XY�n�tk
�rL}zt��|�W5d}~XY�npXt|dd�}|dk	�r@t�|�|j	k	�r�td|�d|�d��}|j	j|j||jd�n�|�r||k�r�td	|���}|j	j|j||jd�n8d|_|j|j|jd�||_|j�r>|j���r>d|_n*td
|�d|���}|j	j|j||jd�n||dk�r`|j	j|j|jd�n\t �!|��r�td|�d|���}|j	j|j||jd�n$td
|���}|j	j|j||jd�W5t
|j	|�d}XdS)Nz_step(): already done: z, F�_asyncio_future_blockingzTask z got Future z attached to a different looprAzTask cannot await on itself: z-yield was used instead of yield from in task z with z;yield was used instead of yield from for generator in task zTask got bad yield: )"r%r�InvalidStateErrorrL�
isinstance�CancelledErrorrNrMrrRr�send�throw�
StopIterationrCrqrgrd�KeyboardInterrupt�
SystemExitri�
BaseException�getattrrr$r,rSrTrQrr�add_done_callback�
_Task__wakeup�inspect�isgenerator)rU�excrVrf�blocking�new_excrWr!r"�__steps��  
��
�����
���
zTask.__stepc
CsJz|��Wn,tk
r8}z|�|�W5d}~XYn
X|��d}dSr2)rfr{rT)rU�futurer�r!r!r"�__wakeup[sz
Task.__wakeup)N)N)N)�__name__�
__module__�__qualname__�__doc__rG�classmethodrrrDr^rarbrcr3rgrirlrorqrTr~�
__classcell__r!r!rWr"rbs&
!Tr)r6cCs t��}|�|�}t||�|S)z]Schedule the execution of a coroutine object in a spawn task.

    Return a Task object.
    )rrrr7)rVr6r r5r!r!r"rxs

r)r �timeout�return_whenc�s�t�|�st�|�r(tdt|�j����|s4td��|tt	t
fkrPtd|�����dkrbt���nt
jdtdd��fdd	�t|�D�}t|||��IdHS)
a�Wait for the Futures and coroutines given by fs to complete.

    The fs iterable must not be empty.

    Coroutines will be wrapped in Tasks.

    Returns two sets of Future: (done, pending).

    Usage:

        done, pending = await asyncio.wait(fs)

    Note: This does not raise TimeoutError! Futures that aren't done
    when the timeout occurs are returned in the second set.
    zexpect a list of futures, not z#Set of coroutines/Futures is empty.zInvalid return_when value: N�[The loop argument is deprecated since Python 3.8, and scheduled for removal in Python 3.10.r8r9csh|]}t|�d��qS�r�r�r'�frr!r"r)�szwait.<locals>.<setcomp>)r�isfuturerrFrH�typer��
ValueErrorrrrrrr;r<r=�set�_wait)�fsr r�r�r!rr"r�s
�rcGs|��s|�d�dSr2)r%rg)�waiter�argsr!r!r"�_release_waiter�sr�rc
�s�|dkrt��}ntjdtdd�|dkr4|IdHS|dkr�t||d�}|��rX|��St||d�IdHz|��Wn.t	j
k
r�}zt	��|�W5d}~XYn
Xt	���|��}|�
|t|�}t�t|�}t||d�}|�|�z�z|IdHWnPt	j
k
�rF|���r$|��YW�dS|�|�t||d�IdH�YnX|���r^|��W�*S|�|�t||d�IdHt	���W5|��XdS)a�Wait for the single Future or coroutine to complete, with timeout.

    Coroutine will be wrapped in Task.

    Returns result of the Future or coroutine.  When a timeout occurs,
    it cancels the task and raises TimeoutError.  To avoid the task
    cancellation, wrap it in shield().

    If the wait is cancelled, the task is also cancelled.

    This function is a coroutine.
    Nr�r8r9rr)rrr;r<r=rr%rf�_cancel_and_waitrru�TimeoutError�
create_future�
call_laterr��	functools�partialr}rq�remove_done_callback)�futr�r r�r��timeout_handle�cbr!r!r"r�sL

�





rc
�s�|std��|���d�|dk	r.|�|t���t|������fdd�}|D]}|�|�qLz�IdHW5�dk	r|���|D]}|�|�q�Xt�t�}}|D]"}|�	�r�|�
|�q�|�
|�q�||fS)zVInternal helper for wait().

    The fs argument must be a collection of Futures.
    zSet of Futures is empty.NcsZ�d8��dks4�tks4�tkrV|��sV|��dk	rV�dk	rD������sV��d�dS)Nrr)rr�	cancelledrhrqr%rg�r���counterr�r�r�r!r"�_on_completions���
�z_wait.<locals>._on_completion)�AssertionErrorr�r�r��lenr}rqr�r�r%�add)r�r�r�r r�r�r%�pendingr!r�r"r��s*r�c	�sF|��}t�t|�}|�|�z|��|IdHW5|�|�XdS)z<Cancel the *fut* future or task and wait until it completes.N)r�r�r�r�r}r�rq)r�r r�r�r!r!r"r�&s
r�)r r�c#s�t�|�st�|�r(tdt|�j����ddlm}|�d���dkrPt	�
��ntjdt
dd��fd	d
�t|�D��d����fdd�}���fd
d���fdd�}�D]}|���q��r�|dk	r҈�||��tt���D]}|�Vq�dS)a^Return an iterator whose values are coroutines.

    When waiting for the yielded coroutines you'll get the results (or
    exceptions!) of the original Futures (or coroutines), in the order
    in which and as soon as they complete.

    This differs from PEP 3148; the proper way to use this is:

        for f in as_completed(fs):
            result = await f  # The 'await' may raise.
            # Use result.

    If a timeout is specified, the 'await' will raise
    TimeoutError when the timeout occurs before all Futures are done.

    Note: The futures 'f' are not necessarily members of fs.
    z#expect an iterable of futures, not r)�QueuerNr�r8r9csh|]}t|�d��qSr�r�r�rr!r"r)Uszas_completed.<locals>.<setcomp>cs*�D]}|�����d�q���dSr2)r��
put_nowait�clearr�)r�r%�todor!r"�_on_timeoutXs
z!as_completed.<locals>._on_timeoutcs4�sdS��|���|��s0�dk	r0���dSr2)�remover�rqr�)r%r�r�r!r"r�^s

z$as_completed.<locals>._on_completionc�s$���IdH}|dkrtj�|��Sr2)rrr�rfr�)r%r!r"�
_wait_for_onefsz#as_completed.<locals>._wait_for_one)rr�rrFrHr�r��queuesr�rr0r;r<r=r�r}r��ranger�)r�r r�r�r�r�r��_r!)r�r%r r�r�r"r7s*

�rccs
dVdS)z�Skip one event loop run cycle.

    This is a private helper for 'asyncio.sleep()', used
    when the 'delay' is set to 0.  It uses a bare 'yield'
    expression (which Task.__step knows how to handle)
    instead of creating a Future object.
    Nr!r!r!r!r"�__sleep0us	r�c�sr|dkrt�IdH|S|dkr*t��}ntjdtdd�|��}|�|tj	||�}z|IdHW�S|�
�XdS)z9Coroutine that completes after a given time (in seconds).rNr�r8r9)r�rrr;r<r=r�r�r�_set_result_unless_cancelledrq)�delayrfr r��hr!r!r"r	�s$
��r	cCs�t�|�r6|dkrt��}|�|�}|jr2|jd=|St�|�rb|dk	r^|t�|�k	r^t	d��|St
�|�r|tt
|�|d�Std��dS)zmWrap a coroutine or an awaitable in a future.

    If the argument is a Future, it is returned directly.
    Nr@zRThe future belongs to a different loop than the one specified as the loop argumentrz:An asyncio.Future, a coroutine or an awaitable is required)rrFrr0rrErr�r$r�r�isawaitabler�_wrap_awaitablerH)�coro_or_futurer r5r!r!r"r�s



rccs|��EdHS)z�Helper for asyncio.ensure_future().

    Wraps awaitable (an object with __await__) into a coroutine
    that will later be wrapped in a Task by ensure_future().
    N)�	__await__)�	awaitabler!r!r"r��sr�cs.eZdZdZdd��fdd�
Zdd�Z�ZS)�_GatheringFuturez�Helper for gather().

    This overrides cancel() to cancel all the children and act more
    like Task.cancel(), which doesn't immediately mark itself as
    cancelled.
    Nrcst�j|d�||_d|_dS)NrF)rCrD�	_children�_cancel_requested)rU�childrenr rWr!r"rD�sz_GatheringFuture.__init__cCs6|��rdSd}|jD]}|��rd}q|r2d|_|S)NFT)r%r�rqr�)rU�ret�childr!r!r"rq�s
z_GatheringFuture.cancel)r�r�r�r�rDrqr�r!r!rWr"r��sr�F)r �return_exceptionscs�|s<|dkrt��}ntjdtdd�|�����g��S�����fdd�}i}g�d�d�|D]f}||kr�t||d�}|dkr�t�	|�}||k	r�d	|_
�d
7�|||<|�|�n||}��|�qdt
�|d���S)a�Return a future aggregating results from the given coroutines/futures.

    Coroutines will be wrapped in a future and scheduled in the event
    loop. They will not necessarily be scheduled in the same order as
    passed in.

    All futures must share the same event loop.  If all the tasks are
    done successfully, the returned future's result is the list of
    results (in the order of the original sequence, not necessarily
    the order of results arrival).  If *return_exceptions* is True,
    exceptions in the tasks are treated the same as successful
    results, and gathered in the result list; otherwise, the first
    raised exception will be immediately propagated to the returned
    future.

    Cancellation: if the outer Future is cancelled, all children (that
    have not completed yet) are also cancelled.  If any child is
    cancelled, this is treated as if it raised CancelledError --
    the outer Future is *not* cancelled in this case.  (This is to
    prevent the cancellation of one child to cause other children to
    be cancelled.)

    If *return_exceptions* is False, cancelling gather() after it
    has been marked done won't cancel any submitted awaitables.
    For instance, gather can be marked done after propagating an
    exception to the caller, therefore, calling ``gather.cancel()``
    after catching an exception (raised by one of the awaitables) from
    gather won't cancel any other awaitables.
    Nr�r8r9cs��d7����r$|��s |��dS�sd|��rFt��}��|�dS|��}|dk	rd��|�dS��kr�g}�D]8}|��r�t��}n|��}|dkr�|��}|�|�qt�jrĈ�t���n
��	|�dS)Nr)
r%r�rhrrurirf�appendr�rg)r�r��results�res�r��	nfinished�nfuts�outerr�r!r"�_done_callbacks4


zgather.<locals>._done_callbackrrFr)rr0r;r<r=r�rgrrr$rGr}r�r�)r r��coros_or_futuresr��
arg_to_fut�argr�r!r�r"r
�s:
�
1
r
cst|dk	rtjdtdd�t||d�����r0�St���}|����fdd����fdd	�}������|��S)
a.Wait for a future, shielding it from cancellation.

    The statement

        res = await shield(something())

    is exactly equivalent to the statement

        res = await something()

    *except* that if the coroutine containing it is cancelled, the
    task running in something() is not cancelled.  From the POV of
    something(), the cancellation did not happen.  But its caller is
    still cancelled, so the yield-from expression still raises
    CancelledError.  Note: If something() is cancelled by other means
    this will still cancel shield().

    If you want to completely ignore cancellation (not recommended)
    you can combine shield() with a try/except clause, as follows:

        try:
            res = await shield(something())
        except CancelledError:
            res = None
    Nr�r8r9rcs\���r|��s|��dS|��r.���n*|��}|dk	rJ��|�n��|���dSr2)r�rhrqrirgrf)�innerr��r�r!r"�_inner_done_callbackus
z$shield.<locals>._inner_done_callbackcs���s����dSr2)r%r�r�)r�r�r!r"�_outer_done_callback�sz$shield.<locals>._outer_done_callback)	r;r<r=rr%rr$r�r})r�r r�r!)r�r�r�r"rPs�


rcs:t���std��tj������fdd�}��|��S)zsSubmit a coroutine object to a given event loop.

    Return a concurrent.futures.Future to access the result.
    zA coroutine object is requiredc
slzt�t��d���WnNttfk
r2�Yn6tk
rf}z���rT��|��W5d}~XYnXdS)Nr)r�
_chain_futurerrzryr{�set_running_or_notify_cancelri)r��rVr�r r!r"�callback�s
z*run_coroutine_threadsafe.<locals>.callback)rrFrH�
concurrentr�Future�call_soon_threadsafe)rVr r�r!r�r"r
�s



r
cCst�|�dS)z3Register a new task in asyncio as executed by loop.N)r+r��r5r!r!r"r�srcCs4t�|�}|dk	r(td|�d|�d���|t|<dS)NzCannot enter into task z while another task z is being executed.�rrr,�r r5rr!r!r"r�s
rcCs2t�|�}||k	r(td|�d|�d���t|=dS)Nz
Leaving task z! does not match the current task �.r�r�r!r!r"r�s
rcCst�|�dS)zUnregister a task.N)r+�discardr�r!r!r"r�sr)rrrrr+r)N)N)N)N)Br��__all__�concurrent.futuresr�rOr�r�	itertools�typesr;�weakref�rrrrrr�count�__next__rIrrr1r7�	_PyFuturer�_PyTask�_asyncio�ImportError�_CTaskrrrrrr�rr�r�r�	coroutiner�r	rr�r�r�r
rr
�WeakSetr+rrrrr�_py_register_task�_py_unregister_task�_py_enter_task�_py_leave_task�_c_register_task�_c_unregister_task�
_c_enter_task�
_c_leave_taskr!r!r!r"�<module>s�	





#H,>

x?$X�/�@s|dZdZGdd�d�ZGdd�de�ZGdd�de�ZGdd	�d	ee�ZGd
d�de�ZGdd
�d
e�ZGdd�de�ZdS)zAbstract Transport class.)�
BaseTransport�
ReadTransport�WriteTransport�	Transport�DatagramTransport�SubprocessTransportc@sHeZdZdZdZddd�Zddd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)rzBase class for transports.��_extraNcCs|dkri}||_dS�Nr)�self�extra�r�(/usr/lib/python3.8/asyncio/transports.py�__init__szBaseTransport.__init__cCs|j�||�S)z#Get optional transport information.)r�get)r
�name�defaultrrr
�get_extra_infoszBaseTransport.get_extra_infocCst�dS)z2Return True if the transport is closing or closed.N��NotImplementedError�r
rrr
�
is_closingszBaseTransport.is_closingcCst�dS)aClose the transport.

        Buffered data will be flushed asynchronously.  No more data
        will be received.  After all buffered data is flushed, the
        protocol's connection_lost() method will (eventually) be
        called with None as its argument.
        Nrrrrr
�closeszBaseTransport.closecCst�dS)zSet a new protocol.Nr)r
�protocolrrr
�set_protocol%szBaseTransport.set_protocolcCst�dS)zReturn the current protocol.Nrrrrr
�get_protocol)szBaseTransport.get_protocol)N)N)�__name__�
__module__�__qualname__�__doc__�	__slots__rrrrrrrrrr
r	s


rc@s,eZdZdZdZdd�Zdd�Zdd�Zd	S)
rz#Interface for read-only transports.rcCst�dS)z*Return True if the transport is receiving.Nrrrrr
�
is_reading3szReadTransport.is_readingcCst�dS)z�Pause the receiving end.

        No data will be passed to the protocol's data_received()
        method until resume_reading() is called.
        Nrrrrr
�
pause_reading7szReadTransport.pause_readingcCst�dS)z�Resume the receiving end.

        Data received will once again be passed to the protocol's
        data_received() method.
        Nrrrrr
�resume_reading?szReadTransport.resume_readingN)rrrrrr r!r"rrrr
r.s
rc@sNeZdZdZdZddd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�ZdS)rz$Interface for write-only transports.rNcCst�dS)a�Set the high- and low-water limits for write flow control.

        These two values control when to call the protocol's
        pause_writing() and resume_writing() methods.  If specified,
        the low-water limit must be less than or equal to the
        high-water limit.  Neither value can be negative.

        The defaults are implementation-specific.  If only the
        high-water limit is given, the low-water limit defaults to an
        implementation-specific value less than or equal to the
        high-water limit.  Setting high to zero forces low to zero as
        well, and causes pause_writing() to be called whenever the
        buffer becomes non-empty.  Setting low to zero causes
        resume_writing() to be called only once the buffer is empty.
        Use of zero for either limit is generally sub-optimal as it
        reduces opportunities for doing I/O and computation
        concurrently.
        Nr�r
�high�lowrrr
�set_write_buffer_limitsMsz&WriteTransport.set_write_buffer_limitscCst�dS)z,Return the current size of the write buffer.Nrrrrr
�get_write_buffer_sizebsz$WriteTransport.get_write_buffer_sizecCst�dS)z�Write some data bytes to the transport.

        This does not block; it buffers the data and arranges for it
        to be sent out asynchronously.
        Nr)r
�datarrr
�writefszWriteTransport.writecCsd�|�}|�|�dS)z�Write a list (or any iterable) of data bytes to the transport.

        The default implementation concatenates the arguments and
        calls write() on the result.
        �N)�joinr))r
�list_of_datar(rrr
�
writelinesns
zWriteTransport.writelinescCst�dS)z�Close the write end after flushing buffered data.

        (This is like typing ^D into a UNIX program reading from stdin.)

        Data may still be received.
        Nrrrrr
�	write_eofwszWriteTransport.write_eofcCst�dS)zAReturn True if this transport supports write_eof(), False if not.Nrrrrr
�
can_write_eof�szWriteTransport.can_write_eofcCst�dS�z�Close the transport immediately.

        Buffered data will be lost.  No more data will be received.
        The protocol's connection_lost() method will (eventually) be
        called with None as its argument.
        Nrrrrr
�abort�szWriteTransport.abort)NN)rrrrrr&r'r)r-r.r/r1rrrr
rHs
		rc@seZdZdZdZdS)raSInterface representing a bidirectional transport.

    There may be several implementations, but typically, the user does
    not implement new transports; rather, the platform provides some
    useful transports that are implemented using the platform's best
    practices.

    The user never instantiates a transport directly; they call a
    utility function, passing it a protocol factory and other
    information necessary to create the transport and protocol.  (E.g.
    EventLoop.create_connection() or EventLoop.create_server().)

    The utility function will asynchronously create a transport and a
    protocol and hook them up by calling the protocol's
    connection_made() method, passing it the transport.

    The implementation here raises NotImplemented for every method
    except writelines(), which calls write() in a loop.
    rN)rrrrrrrrr
r�src@s&eZdZdZdZddd�Zdd�ZdS)	rz(Interface for datagram (UDP) transports.rNcCst�dS)aSend data to the transport.

        This does not block; it buffers the data and arranges for it
        to be sent out asynchronously.
        addr is target socket address.
        If addr is None use target address pointed on transport creation.
        Nr)r
r(�addrrrr
�sendto�szDatagramTransport.sendtocCst�dSr0rrrrr
r1�szDatagramTransport.abort)N)rrrrrr3r1rrrr
r�s

rc@s@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)rrcCst�dS)zGet subprocess id.Nrrrrr
�get_pid�szSubprocessTransport.get_pidcCst�dS)z�Get subprocess returncode.

        See also
        http://docs.python.org/3/library/subprocess#subprocess.Popen.returncode
        Nrrrrr
�get_returncode�sz"SubprocessTransport.get_returncodecCst�dS)z&Get transport for pipe with number fd.Nr)r
�fdrrr
�get_pipe_transport�sz&SubprocessTransport.get_pipe_transportcCst�dS)z�Send signal to subprocess.

        See also:
        docs.python.org/3/library/subprocess#subprocess.Popen.send_signal
        Nr)r
�signalrrr
�send_signal�szSubprocessTransport.send_signalcCst�dS)aLStop the subprocess.

        Alias for close() method.

        On Posix OSs the method sends SIGTERM to the subprocess.
        On Windows the Win32 API function TerminateProcess()
         is called to stop the subprocess.

        See also:
        http://docs.python.org/3/library/subprocess#subprocess.Popen.terminate
        Nrrrrr
�	terminate�szSubprocessTransport.terminatecCst�dS)z�Kill the subprocess.

        On Posix OSs the function sends SIGKILL to the subprocess.
        On Windows kill() is an alias for terminate().

        See also:
        http://docs.python.org/3/library/subprocess#subprocess.Popen.kill
        Nrrrrr
�kill�s	zSubprocessTransport.killN)
rrrrr4r5r7r9r:r;rrrr
r�srcsZeZdZdZdZd�fdd�	Zdd�Zdd	�Zd
d�Zddd
�Z	ddd�Z
dd�Z�ZS)�_FlowControlMixinavAll the logic for (write) flow control in a mix-in base class.

    The subclass must implement get_write_buffer_size().  It must call
    _maybe_pause_protocol() whenever the write buffer size increases,
    and _maybe_resume_protocol() whenever it decreases.  It may also
    override set_write_buffer_limits() (e.g. to specify different
    defaults).

    The subclass constructor must call super().__init__(extra).  This
    will call set_write_buffer_limits().

    The user may call set_write_buffer_limits() and
    get_write_buffer_size(), and their protocol's pause_writing() and
    resume_writing() may be called.
    )�_loop�_protocol_paused�_high_water�
_low_waterNcs0t��|�|dk	st�||_d|_|��dS)NF)�superr�AssertionErrorr=r>�_set_write_buffer_limits)r
r�loop��	__class__rr
rs
z_FlowControlMixin.__init__c
Cs�|��}||jkrdS|js�d|_z|j��WnRttfk
rJ�Yn:tk
r�}z|j�	d|||jd��W5d}~XYnXdS)NTzprotocol.pause_writing() failed��message�	exception�	transportr)
r'r?r>�	_protocol�
pause_writing�
SystemExit�KeyboardInterrupt�
BaseExceptionr=�call_exception_handler)r
�size�excrrr
�_maybe_pause_protocols 
�z'_FlowControlMixin._maybe_pause_protocolc
Cs�|jr||��|jkr|d|_z|j��WnRttfk
rB�Yn:tk
rz}z|j�	d|||jd��W5d}~XYnXdS)NFz protocol.resume_writing() failedrG)
r>r'r@rK�resume_writingrMrNrOr=rP)r
rRrrr
�_maybe_resume_protocol!s��z(_FlowControlMixin._maybe_resume_protocolcCs|j|jfSr	)r@r?rrrr
�get_write_buffer_limits1sz)_FlowControlMixin.get_write_buffer_limitscCsj|dkr|dkrd}nd|}|dkr.|d}||krBdksZntd|�d|�d���||_||_dS)Ni��zhigh (z) must be >= low (z) must be >= 0)�
ValueErrorr?r@r#rrr
rC4s�z*_FlowControlMixin._set_write_buffer_limitscCs|j||d�|��dS)N)r$r%)rCrSr#rrr
r&Dsz)_FlowControlMixin.set_write_buffer_limitscCst�dSr	rrrrr
r'Hsz'_FlowControlMixin.get_write_buffer_size)NN)NN)NN)
rrrrrrrSrUrVrCr&r'�
__classcell__rrrEr
r<�s

r<N)	r�__all__rrrrrrr<rrrr
�<module>s%F6X!�@s"ddlZddlZGdd�d�ZdS)�Nc@s�eZdZdZdZejd�dd�Zdd�Zedd	��Z	ed
d��Z
edd
��Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Z d8d9�Z!d:d;�Z"d<d=�Z#d>d?�Z$d@dA�Z%dBdC�Z&dDdE�Z'dFdG�Z(dHdI�Z)dJdK�Z*dLdM�Z+dNdO�Z,dPdQ�Z-dRdS�Z.dTdU�Z/dVdW�Z0dXdY�Z1dZd[�Z2d\S)]�TransportSocketz�A socket-like wrapper for exposing real transport sockets.

    These objects can be safely returned by APIs like
    `transport.get_extra_info('socket')`.  All potentially disruptive
    operations (like "socket.close()") are banned.
    ��_sock)�sockcCs
||_dS�Nr)�selfr�r�$/usr/lib/python3.8/asyncio/trsock.py�__init__szTransportSocket.__init__cCstjd|�d�t|d�dS)NzUsing z� on sockets returned from get_extra_info('socket') will be prohibited in asyncio 3.9. Please report your use case to bugs.python.org.)�source)�warnings�warn�DeprecationWarning)r�whatrrr	�_nas

�zTransportSocket._nacCs|jjSr)r�family�rrrr	rszTransportSocket.familycCs|jjSr)r�typerrrr	rszTransportSocket.typecCs|jjSr)r�protorrrr	r"szTransportSocket.protocCs�d|���d|j�d|j�d|j��}|��dkr�z|��}|rN|�d|��}Wntjk
rfYnXz|��}|r�|�d|��}Wntjk
r�YnX|�d�S)	Nz<asyncio.TransportSocket fd=z	, family=z, type=z, proto=���z, laddr=z, raddr=�>)�filenorrr�getsockname�socket�error�getpeername)r�s�laddr�raddrrrr	�__repr__&s $�zTransportSocket.__repr__cCstd��dS)Nz/Cannot serialize asyncio.TransportSocket object)�	TypeErrorrrrr	�__getstate__=szTransportSocket.__getstate__cCs
|j��Sr)rrrrrr	r@szTransportSocket.filenocCs
|j��Sr)r�duprrrr	r"CszTransportSocket.dupcCs
|j��Sr)r�get_inheritablerrrr	r#FszTransportSocket.get_inheritablecCs|j�|�dSr)r�shutdown)r�howrrr	r$IszTransportSocket.shutdowncOs|jj||�Sr)r�
getsockopt�r�args�kwargsrrr	r&NszTransportSocket.getsockoptcOs|jj||�dSr)r�
setsockoptr'rrr	r*QszTransportSocket.setsockoptcCs
|j��Sr)rrrrrr	rTszTransportSocket.getpeernamecCs
|j��Sr)rrrrrr	rWszTransportSocket.getsocknamecCs
|j��Sr)r�
getsockbynamerrrr	r+ZszTransportSocket.getsockbynamecCs|�d�|j��S)Nzaccept() method)rr�acceptrrrr	r,]s
zTransportSocket.acceptcOs|�d�|jj||�S)Nzconnect() method)rr�connectr'rrr	r-as
zTransportSocket.connectcOs|�d�|jj||�S)Nzconnect_ex() method)rr�
connect_exr'rrr	r.es
zTransportSocket.connect_excOs|�d�|jj||�S)Nz
bind() method)rr�bindr'rrr	r/is
zTransportSocket.bindcOs|�d�|jj||�S)Nzioctl() method)rr�ioctlr'rrr	r0ms
zTransportSocket.ioctlcOs|�d�|jj||�S)Nzlisten() method)rr�listenr'rrr	r1qs
zTransportSocket.listencCs|�d�|j��S)Nzmakefile() method)rr�makefilerrrr	r2us
zTransportSocket.makefilecOs|�d�|jj||�S)Nzsendfile() method)rr�sendfiler'rrr	r3ys
zTransportSocket.sendfilecCs|�d�|j��S)Nzclose() method)rr�closerrrr	r4}s
zTransportSocket.closecCs|�d�|j��S)Nzdetach() method)rr�detachrrrr	r5�s
zTransportSocket.detachcOs|�d�|jj||�S)Nzsendmsg_afalg() method)rr�
sendmsg_afalgr'rrr	r6�s
zTransportSocket.sendmsg_afalgcOs|�d�|jj||�S)Nzsendmsg() method)rr�sendmsgr'rrr	r7�s
zTransportSocket.sendmsgcOs|�d�|jj||�S)Nzsendto() method)rr�sendtor'rrr	r8�s
zTransportSocket.sendtocOs|�d�|jj||�S)Nz
send() method)rr�sendr'rrr	r9�s
zTransportSocket.sendcOs|�d�|jj||�S)Nzsendall() method)rr�sendallr'rrr	r:�s
zTransportSocket.sendallcOs|�d�|jj||�S)Nzset_inheritable() method)rr�set_inheritabler'rrr	r;�s
zTransportSocket.set_inheritablecCs|�d�|j�|�S)Nzshare() method)rr�share)r�
process_idrrr	r<�s
zTransportSocket.sharecOs|�d�|jj||�S)Nzrecv_into() method)rr�	recv_intor'rrr	r>�s
zTransportSocket.recv_intocOs|�d�|jj||�S)Nzrecvfrom_into() method)rr�
recvfrom_intor'rrr	r?�s
zTransportSocket.recvfrom_intocOs|�d�|jj||�S)Nzrecvmsg_into() method)rr�recvmsg_intor'rrr	r@�s
zTransportSocket.recvmsg_intocOs|�d�|jj||�S)Nzrecvmsg() method)rr�recvmsgr'rrr	rA�s
zTransportSocket.recvmsgcOs|�d�|jj||�S)Nzrecvfrom() method)rr�recvfromr'rrr	rB�s
zTransportSocket.recvfromcOs|�d�|jj||�S)Nz
recv() method)rr�recvr'rrr	rC�s
zTransportSocket.recvcCs|dkrdStd��dS)Nrz<settimeout(): only 0 timeout is allowed on transport sockets��
ValueError)r�valuerrr	�
settimeout�s
�zTransportSocket.settimeoutcCsdS)Nrrrrrr	�
gettimeout�szTransportSocket.gettimeoutcCs|sdStd��dS)Nz3setblocking(): transport sockets cannot be blockingrD)r�flagrrr	�setblocking�s
�zTransportSocket.setblockingcCs|�d�|j��S�Nzcontext manager protocol)rr�	__enter__rrrr	rL�s
zTransportSocket.__enter__cGs|�d�|jj|�SrK)rr�__exit__)r�errrrr	rM�s
zTransportSocket.__exit__N)3�__name__�
__module__�__qualname__�__doc__�	__slots__rr
r�propertyrrrrr!rr"r#r$r&r*rrr+r,r-r.r/r0r1r2r3r4r5r6r7r8r9r:r;r<r>r?r@rArBrCrGrHrJrLrMrrrr	rsb


r)rrrrrrr	�<module>sX���@s�dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
mZddl
mZddl
mZddl
mZddl
mZdd	l
mZdd
l
mZddl
mZddl
mZdd
l
mZddlmZdZe
jdkr�ed��dd�ZGdd�dej�ZGdd�dej �Z!Gdd�dej"ej#�Z$Gdd�dej%�Z&Gdd�d�Z'dd�Z(Gd d!�d!e'�Z)Gd"d#�d#e)�Z*Gd$d%�d%e)�Z+Gd&d'�d'e'�Z,Gd(d)�d)e'�Z-Gd*d+�d+ej.�Z/eZ0e/Z1dS),z2Selector event loop for Unix with signal handling.�N�)�base_events)�base_subprocess)�	constants)�
coroutines)�events)�
exceptions)�futures)�selector_events)�tasks)�
transports)�logger)�SelectorEventLoop�AbstractChildWatcher�SafeChildWatcher�FastChildWatcher�MultiLoopChildWatcher�ThreadedChildWatcher�DefaultEventLoopPolicy�win32z+Signals are not really supported on WindowscCsdS)zDummy signal handler.N�)�signum�framerr�)/usr/lib/python3.8/asyncio/unix_events.py�_sighandler_noop*srcs�eZdZdZd)�fdd�	Z�fdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
d*dd�Zd+dd�Zd,dd�Z
dd�Zd-ddddd�dd�Zd.dddddd�dd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Z�ZS)/�_UnixSelectorEventLoopzdUnix event loop.

    Adds signal handling and UNIX Domain Socket support to SelectorEventLoop.
    Ncst��|�i|_dS�N)�super�__init__�_signal_handlers)�self�selector��	__class__rrr5sz_UnixSelectorEventLoop.__init__csZt���t��s.t|j�D]}|�|�qn(|jrVtjd|�d�t	|d�|j�
�dS)NzClosing the loop z@ on interpreter shutdown stage, skipping signal handlers removal��source)r�close�sys�
is_finalizing�listr�remove_signal_handler�warnings�warn�ResourceWarning�clear�r �sigr"rrr&9s
�z_UnixSelectorEventLoop.closecCs|D]}|sq|�|�qdSr)�_handle_signal)r �datarrrr�_process_self_dataGsz)_UnixSelectorEventLoop._process_self_datac
GsLt�|�st�|�rtd��|�|�|��zt�|j�	��Wn2t
tfk
rt}ztt
|���W5d}~XYnXt�|||d�}||j|<zt�|t�t�|d�Wn�tk
�rF}zz|j|=|j�szt�d�Wn4t
tfk
�r}zt�d|�W5d}~XYnX|jtjk�r4td|�d���n�W5d}~XYnXdS)z�Add a handler for a signal.  UNIX only.

        Raise ValueError if the signal number is invalid or uncatchable.
        Raise RuntimeError if there is a problem setting up the handler.
        z3coroutines cannot be used with add_signal_handler()NF����set_wakeup_fd(-1) failed: %s�sig � cannot be caught)r�iscoroutine�iscoroutinefunction�	TypeError�
_check_signal�
_check_closed�signal�
set_wakeup_fd�_csock�fileno�
ValueError�OSError�RuntimeError�strr�Handlerr�siginterruptr
�info�errno�EINVAL)r r0�callback�args�exc�handle�nexcrrr�add_signal_handlerNs2
�

z)_UnixSelectorEventLoop.add_signal_handlercCs8|j�|�}|dkrdS|jr*|�|�n
|�|�dS)z2Internal helper that is the actual signal handler.N)r�get�
_cancelledr*�_add_callback_signalsafe)r r0rMrrrr1{sz%_UnixSelectorEventLoop._handle_signalc
Cs�|�|�z|j|=Wntk
r,YdSX|tjkr@tj}ntj}zt�||�WnBtk
r�}z$|jtj	kr�t
d|�d���n�W5d}~XYnX|js�zt�d�Wn2ttfk
r�}zt
�d|�W5d}~XYnXdS)zwRemove a handler for a signal.  UNIX only.

        Return True if a signal handler was removed, False if not.
        Fr6r7Nr4r5T)r;r�KeyErrorr=�SIGINT�default_int_handler�SIG_DFLrBrHrIrCr>rAr
rG)r r0�handlerrLrrrr*�s(

z,_UnixSelectorEventLoop.remove_signal_handlercCs6t|t�std|����|t��kr2td|����dS)z�Internal helper to validate a signal.

        Raise ValueError if the signal number is invalid or uncatchable.
        Raise RuntimeError if there is a problem setting up the handler.
        zsig must be an int, not zinvalid signal number N)�
isinstance�intr:r=�
valid_signalsrAr/rrrr;�s
z$_UnixSelectorEventLoop._check_signalcCst|||||�Sr)�_UnixReadPipeTransport�r �pipe�protocol�waiter�extrarrr�_make_read_pipe_transport�sz0_UnixSelectorEventLoop._make_read_pipe_transportcCst|||||�Sr)�_UnixWritePipeTransportr\rrr�_make_write_pipe_transport�sz1_UnixSelectorEventLoop._make_write_pipe_transportc	

�s�t����}
|
��std��|��}t||||||||f||d�|	��}|
�|��|j|�z|IdHWnDt	t
fk
r��Yn,tk
r�|��|�
�IdH�YnXW5QRX|S)NzRasyncio.get_child_watcher() is not activated, subprocess support is not installed.)r_r`)r�get_child_watcher�	is_activerC�
create_future�_UnixSubprocessTransport�add_child_handler�get_pid�_child_watcher_callback�
SystemExit�KeyboardInterrupt�
BaseExceptionr&�_wait)
r r^rK�shell�stdin�stdout�stderr�bufsizer`�kwargs�watcherr_�transprrr�_make_subprocess_transport�s8

���
�z1_UnixSelectorEventLoop._make_subprocess_transportcCs|�|j|�dSr)�call_soon_threadsafe�_process_exited)r �pid�
returncodervrrrrj�sz._UnixSelectorEventLoop._child_watcher_callback)�ssl�sock�server_hostname�ssl_handshake_timeoutc	�s |dkst|t�st�|r,|dkrLtd��n |dk	r<td��|dk	rLtd��|dk	r�|dk	rdtd��t�|�}t�tjtjd�}z |�	d�|�
||�IdHWq�|���Yq�Xn@|dkr�td��|jtjks�|j
tjkr�td|����|�	d�|j|||||d	�IdH\}}||fS)
Nz/you have to pass server_hostname when using sslz+server_hostname is only meaningful with ssl�1ssl_handshake_timeout is only meaningful with ssl�3path and sock can not be specified at the same timerFzno path and sock were specified�.A UNIX Domain Stream Socket was expected, got )r)rXrD�AssertionErrorrA�os�fspath�socket�AF_UNIX�SOCK_STREAM�setblocking�sock_connectr&�family�type�_create_connection_transport)	r �protocol_factory�pathr|r}r~r�	transportr^rrr�create_unix_connection�sT���



��
�z-_UnixSelectorEventLoop.create_unix_connection�dT)r}�backlogr|r�
start_servingc
�s�t|t�rtd��|dk	r&|s&td��|dk	�rH|dk	r@td��t�|�}t�tjtj�}|ddkr�z t	�
t�	|�j�r�t�|�WnBt
k
r�Yn0tk
r�}zt�d||�W5d}~XYnXz|�|�Wnltk
�r0}	z8|��|	jtjk�rd|�d�}
ttj|
�d�n�W5d}	~	XYn|���YnXn<|dk�rZtd	��|jtjk�sv|jtjk�r�td
|����|�d�t�||g||||�}|�r�|��tjd|d�IdH|S)
Nz*ssl argument must be an SSLContext or Noner�r�r)r�z2Unable to check or remove stale UNIX socket %r: %rzAddress z is already in usez-path was not specified, and no sock specifiedr�F)�loop)rX�boolr:rAr�r�r�r�r��stat�S_ISSOCK�st_mode�remove�FileNotFoundErrorrBr
�error�bindr&rH�
EADDRINUSEr�r�r�r�Server�_start_servingr�sleep)r r�r�r}r�r|rr��errrL�msg�serverrrr�create_unix_serversn
�
�
�

�
��
�z)_UnixSelectorEventLoop.create_unix_serverc
�s�z
tjWn,tk
r6}zt�d��W5d}~XYnXz|��}Wn2ttjfk
rv}zt�d��W5d}~XYnXzt�|�j	}Wn,t
k
r�}zt�d��W5d}~XYnX|r�|n|}	|	s�dS|��}
|�|
d|||||	d�|
IdHS)Nzos.sendfile() is not availableznot a regular filer)
r��sendfile�AttributeErrorr�SendfileNotAvailableErrorr@�io�UnsupportedOperation�fstat�st_sizerBrf�_sock_sendfile_native_impl)r r}�file�offset�countrLr@r��fsize�	blocksize�futrrr�_sock_sendfile_nativeJs2
��z,_UnixSelectorEventLoop._sock_sendfile_nativec	Cs,|��}	|dk	r|�|�|��r4|�|||�dS|rd||}|dkrd|�|||�|�|�dSzt�|	|||�}
W�nDttfk
r�|dkr�|�	||�|�
|	|j||	||||||�
Y�nbtk
�rj}z�|dk	�r|j
t
jk�rt|�tk	�rtdt
j�}||_|}|dk�rBt�d�}
|�|||�|�|
�n|�|||�|�|�W5d}~XYn�ttfk
�r��Yn�tk
�r�}z|�|||�|�|�W5d}~XYnjX|
dk�r�|�|||�|�|�nD||
7}||
7}|dk�r
|�	||�|�
|	|j||	||||||�
dS)Nrzsocket is not connectedzos.sendfile call failed)r@�
remove_writer�	cancelled�_sock_sendfile_update_filepos�
set_resultr�r��BlockingIOError�InterruptedError�_sock_add_cancellation_callback�
add_writerr�rBrH�ENOTCONNr��ConnectionError�	__cause__rr��
set_exceptionrkrlrm)r r��
registered_fdr}r@r�r�r��
total_sent�fd�sentrL�new_excr�rrrr�as�

�


�
��
�

�z1_UnixSelectorEventLoop._sock_sendfile_native_implcCs|dkrt�||tj�dS�Nr)r��lseek�SEEK_SET)r r@r�r�rrrr��sz4_UnixSelectorEventLoop._sock_sendfile_update_fileposcs��fdd�}|�|�dS)Ncs&|��r"���}|dkr"��|�dS)Nr4)r�r@r�)r�r��r r}rr�cb�szB_UnixSelectorEventLoop._sock_add_cancellation_callback.<locals>.cb)�add_done_callback)r r�r}r�rr�rr��sz6_UnixSelectorEventLoop._sock_add_cancellation_callback)N)NN)NN)N)N)N)�__name__�
__module__�__qualname__�__doc__rr&r3rOr1r*r;rarcrwrjr�r�r�r�r�r��
__classcell__rrr"rr/sH-
 �
�
�
��.��CFrcs�eZdZdZd�fdd�	Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Ze
jfdd�Zddd�Zdd�Zdd�Z�ZS) r[iNcs�t��|�||jd<||_||_|��|_||_d|_d|_	t
�|j�j}t
�|�s�t
�|�s�t
�|�s�d|_d|_d|_td��t
�|jd�|j�|jj|�|j�|jj|j|j�|dk	r�|j�tj|d�dS)Nr]Fz)Pipe transport is for pipes/sockets only.)rr�_extra�_loop�_piper@�_fileno�	_protocol�_closing�_pausedr�r�r�r��S_ISFIFOr��S_ISCHRrA�set_blocking�	call_soon�connection_made�_add_reader�_read_readyr	�_set_result_unless_cancelled)r r�r]r^r_r`�moder"rrr�s:


���
�z_UnixReadPipeTransport.__init__cCs�|jjg}|jdkr |�d�n|jr0|�d�|�d|j���t|jdd�}|jdk	r�|dk	r�t�	||jt
j�}|r�|�d�q�|�d�n |jdk	r�|�d�n
|�d�d�d	�
|��S)
N�closed�closing�fd=�	_selector�polling�idle�open�<{}>� )r#r�r��appendr�r��getattrr�r
�_test_selector_event�	selectors�
EVENT_READ�format�join)r rGr!r�rrr�__repr__�s(


�

z_UnixReadPipeTransport.__repr__c
Cs�zt�|j|j�}WnDttfk
r,Yn�tk
rX}z|�|d�W5d}~XYn^X|rl|j�	|�nJ|j
��r�t�
d|�d|_|j
�|j�|j
�|jj�|j
�|jd�dS)Nz"Fatal read error on pipe transport�%r was closed by peerT)r��readr��max_sizer�r�rB�_fatal_errorr��
data_receivedr��	get_debugr
rGr��_remove_readerr��eof_received�_call_connection_lost)r r2rLrrrr��s
z"_UnixReadPipeTransport._read_readycCs>|js|jrdSd|_|j�|j�|j��r:t�d|�dS)NTz%r pauses reading)r�r�r�r�r�r�r
�debug�r rrr�
pause_reading�s
z$_UnixReadPipeTransport.pause_readingcCsB|js|jsdSd|_|j�|j|j�|j��r>t�d|�dS)NFz%r resumes reading)	r�r�r�r�r�r�r�r
r�r�rrr�resume_readings
z%_UnixReadPipeTransport.resume_readingcCs
||_dSr�r��r r^rrr�set_protocol
sz#_UnixReadPipeTransport.set_protocolcCs|jSrrr�rrr�get_protocolsz#_UnixReadPipeTransport.get_protocolcCs|jSr�r�r�rrr�
is_closingsz!_UnixReadPipeTransport.is_closingcCs|js|�d�dSr)r��_closer�rrrr&sz_UnixReadPipeTransport.closecCs,|jdk	r(|d|��t|d�|j��dS�Nzunclosed transport r$�r�r-r&�r �_warnrrr�__del__s
z_UnixReadPipeTransport.__del__�Fatal error on pipe transportcCsZt|t�r4|jtjkr4|j��rLtjd||dd�n|j�||||j	d��|�
|�dS�Nz%r: %sT��exc_info)�message�	exceptionr�r^)rXrBrH�EIOr�r�r
r��call_exception_handlerr�r�r rLrrrrr�s
�z#_UnixReadPipeTransport._fatal_errorcCs(d|_|j�|j�|j�|j|�dS�NT)r�r�r�r�r�r��r rLrrrr-sz_UnixReadPipeTransport._closecCs4z|j�|�W5|j��d|_d|_d|_XdSr�r�r&r�r��connection_lostrrrrr�2s
z,_UnixReadPipeTransport._call_connection_lost)NN)r)r�r�r�r�rr�r�r�r�rrrr&r+r,rr�rr�r�rrr"rr[�s
r[cs�eZdZd%�fdd�	Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zejfdd�Zdd�Zd&dd �Zd'd!d"�Zd#d$�Z�ZS)(rbNc
s�t��||�||jd<||_|��|_||_t�|_d|_	d|_
t�|j�j
}t�|�}t�|�}t�|�}	|s�|s�|	s�d|_d|_d|_td��t�|jd�|j�|jj|�|	s�|r�tj�d�s�|j�|jj|j|j�|dk	r�|j�tj|d�dS)Nr]rFz?Pipe transport is only for pipes, sockets and character devices�aix)rrr�r�r@r�r��	bytearray�_buffer�
_conn_lostr�r�r�r�r�r�r�r�rAr�r�r�r�r'�platform�
startswithr�r�r	r�)
r r�r]r^r_r`r��is_char�is_fifo�	is_socketr"rrr?s:




�
�z _UnixWritePipeTransport.__init__cCs�|jjg}|jdkr |�d�n|jr0|�d�|�d|j���t|jdd�}|jdk	r�|dk	r�t�	||jt
j�}|r�|�d�n
|�d�|��}|�d|���n |jdk	r�|�d�n
|�d�d	�
d
�|��S)Nr�r�r�r�r�r�zbufsize=r�r�r�)r#r�r�r�r�r�r�r�r
r�r��EVENT_WRITE�get_write_buffer_sizer�r�)r rGr!r�rsrrrr�ds,


�


z _UnixWritePipeTransport.__repr__cCs
t|j�Sr)�lenrr�rrrr#|sz-_UnixWritePipeTransport.get_write_buffer_sizecCs6|j��rt�d|�|jr*|�t��n|��dS)Nr�)r�r�r
rGrr�BrokenPipeErrorr�rrrr�s

z#_UnixWritePipeTransport._read_readyc
CsRt|tttf�stt|���t|t�r.t|�}|s6dS|jsB|jrj|jtj	krXt
�d�|jd7_dS|j�s8zt
�|j|�}Wntttfk
r�d}YnZttfk
r��YnBtk
r�}z$|jd7_|�|d�WY�dSd}~XYnX|t|�k�rdS|dk�r&t|�|d�}|j�|j|j�|j|7_|��dS)Nz=pipe closed by peer or os.write(pipe, data) raised exception.rr�#Fatal write error on pipe transport)rX�bytesr�
memoryviewr��reprrr�r�!LOG_THRESHOLD_FOR_CONNLOST_WRITESr
�warningrr��writer�r�r�rkrlrmr�r$r��_add_writer�_write_ready�_maybe_pause_protocol)r r2�nrLrrrr,�s8


z_UnixWritePipeTransport.writec
Cs|jstd��zt�|j|j�}Wn�ttfk
r:Yn�ttfk
rR�Yn�t	k
r�}z6|j�
�|jd7_|j�
|j�|�|d�W5d}~XYnhX|t|j�kr�|j�
�|j�
|j�|��|jr�|j�|j�|�d�dS|dk�r|jd|�=dS)NzData should not be emptyrr&r)rr�r�r,r�r�r�rkrlrmr.rr��_remove_writerr�r$�_maybe_resume_protocolr�r�r�)r r0rLrrrr.�s,



z$_UnixWritePipeTransport._write_readycCsdSrrr�rrr�
can_write_eof�sz%_UnixWritePipeTransport.can_write_eofcCsB|jr
dS|jst�d|_|js>|j�|j�|j�|jd�dSr)	r�r�r�rr�r�r�r�r�r�rrr�	write_eof�s
z!_UnixWritePipeTransport.write_eofcCs
||_dSrrrrrrr�sz$_UnixWritePipeTransport.set_protocolcCs|jSrrr�rrrr�sz$_UnixWritePipeTransport.get_protocolcCs|jSrrr�rrrr�sz"_UnixWritePipeTransport.is_closingcCs|jdk	r|js|��dSr)r�r�r4r�rrrr&�sz_UnixWritePipeTransport.closecCs,|jdk	r(|d|��t|d�|j��dSrrr	rrrr�s
z_UnixWritePipeTransport.__del__cCs|�d�dSr)rr�rrr�abort�sz_UnixWritePipeTransport.abortrcCsNt|t�r(|j��r@tjd||dd�n|j�||||jd��|�|�dSr
)	rXrBr�r�r
r�rr�rrrrrr��s

�z$_UnixWritePipeTransport._fatal_errorcCsFd|_|jr|j�|j�|j��|j�|j�|j�|j|�dSr)	r�rr�r1r�r.r�r�r�rrrrr�s
z_UnixWritePipeTransport._closecCs4z|j�|�W5|j��d|_d|_d|_XdSrrrrrrr��s
z-_UnixWritePipeTransport._call_connection_lost)NN)r)N)r�r�r�rr�r#r�r,r.r3r4rrrr&r+r,rr5r�rr�r�rrr"rrb<s"%	#	

rbc@seZdZdd�ZdS)rgc		Ks�d}|tjkrt��\}}zPtj|f||||d|d�|��|_|dk	rh|��t|��d|d�|j_	d}W5|dk	r�|��|��XdS)NF)rorprqrr�universal_newlinesrs�wb)�	buffering)
�
subprocess�PIPEr��
socketpairr&�Popen�_procr��detachrp)	r rKrorprqrrrsrt�stdin_wrrr�_starts.
���z_UnixSubprocessTransport._startN)r�r�r�r@rrrrrg	srgc@sHeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)raHAbstract base class for monitoring child processes.

    Objects derived from this class monitor a collection of subprocesses and
    report their termination or interruption by a signal.

    New callbacks are registered with .add_child_handler(). Starting a new
    process must be done within a 'with' block to allow the watcher to suspend
    its activity until the new process if fully registered (this is needed to
    prevent a race condition in some implementations).

    Example:
        with watcher:
            proc = subprocess.Popen("sleep 1")
            watcher.add_child_handler(proc.pid, callback)

    Notes:
        Implementations of this class must be thread-safe.

        Since child watcher objects may catch the SIGCHLD signal and call
        waitpid(-1), there should be only one active object per process.
    cGs
t��dS)aRegister a new child handler.

        Arrange for callback(pid, returncode, *args) to be called when
        process 'pid' terminates. Specifying another callback for the same
        process replaces the previous handler.

        Note: callback() must be thread-safe.
        N��NotImplementedError�r rzrJrKrrrrh9s	z&AbstractChildWatcher.add_child_handlercCs
t��dS)z�Removes the handler for process 'pid'.

        The function returns True if the handler was successfully removed,
        False if there was nothing to remove.NrA�r rzrrr�remove_child_handlerDsz)AbstractChildWatcher.remove_child_handlercCs
t��dS)z�Attach the watcher to an event loop.

        If the watcher was previously attached to an event loop, then it is
        first detached before attaching to the new loop.

        Note: loop may be None.
        NrA�r r�rrr�attach_loopLsz AbstractChildWatcher.attach_loopcCs
t��dS)zlClose the watcher.

        This must be called to make sure that any underlying resource is freed.
        NrAr�rrrr&VszAbstractChildWatcher.closecCs
t��dS)z�Return ``True`` if the watcher is active and is used by the event loop.

        Return True if the watcher is installed and ready to handle process exit
        notifications.

        NrAr�rrrre]szAbstractChildWatcher.is_activecCs
t��dS)zdEnter the watcher's context and allow starting new processes

        This function must return selfNrAr�rrr�	__enter__fszAbstractChildWatcher.__enter__cCs
t��dS)zExit the watcher's contextNrA�r �a�b�crrr�__exit__lszAbstractChildWatcher.__exit__N)r�r�r�r�rhrErGr&rerHrMrrrrr"s
	rcCs2t�|�rt�|�St�|�r*t�|�S|SdSr)r��WIFSIGNALED�WTERMSIG�	WIFEXITED�WEXITSTATUS)�statusrrr�_compute_returncodeqs



rSc@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�BaseChildWatchercCsd|_i|_dSr)r��
_callbacksr�rrrr�szBaseChildWatcher.__init__cCs|�d�dSr)rGr�rrrr&�szBaseChildWatcher.closecCs|jdk	o|j��Sr)r��
is_runningr�rrrre�szBaseChildWatcher.is_activecCs
t��dSrrA)r �expected_pidrrr�_do_waitpid�szBaseChildWatcher._do_waitpidcCs
t��dSrrAr�rrr�_do_waitpid_all�sz BaseChildWatcher._do_waitpid_allcCs~|dkst|tj�st�|jdk	r<|dkr<|jr<t�dt�|jdk	rT|j�	t
j�||_|dk	rz|�t
j|j
�|��dS)NzCA loop is being detached from a child watcher with pending handlers)rXr�AbstractEventLoopr�r�rUr+r,�RuntimeWarningr*r=�SIGCHLDrO�	_sig_chldrYrFrrrrG�s�
zBaseChildWatcher.attach_loopc
Cs^z|��WnLttfk
r&�Yn4tk
rX}z|j�d|d��W5d}~XYnXdS)N�$Unknown exception in SIGCHLD handler)rr)rYrkrlrmr�rrrrrr]�s�zBaseChildWatcher._sig_chldN)
r�r�r�rr&rerXrYrGr]rrrrrTsrTcsPeZdZdZ�fdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
�ZS)rad'Safe' child watcher implementation.

    This implementation avoids disrupting other code spawning processes by
    polling explicitly each process in the SIGCHLD handler instead of calling
    os.waitpid(-1).

    This is a safe solution but it has a significant overhead when handling a
    big number of children (O(n) each time SIGCHLD is raised)
    cs|j��t���dSr)rUr.rr&r�r"rrr&�s
zSafeChildWatcher.closecCs|Srrr�rrrrH�szSafeChildWatcher.__enter__cCsdSrrrIrrrrM�szSafeChildWatcher.__exit__cGs||f|j|<|�|�dSr)rUrXrCrrrrh�sz"SafeChildWatcher.add_child_handlercCs*z|j|=WdStk
r$YdSXdS�NTF�rUrSrDrrrrE�s
z%SafeChildWatcher.remove_child_handlercCst|j�D]}|�|�q
dSr�r)rUrXrDrrrrY�sz SafeChildWatcher._do_waitpid_allcCs�|dkst�zt�|tj�\}}Wn(tk
rJ|}d}t�d|�Yn.X|dkrXdSt|�}|j�	�rxt�
d||�z|j�|�\}}Wn.t
k
r�|j�	�r�tjd|dd�YnX|||f|��dS)Nr��8Unknown child process pid %d, will report returncode 255�$process %s exited with returncode %s�'Child watcher got an unexpected pid: %rTr)r�r��waitpid�WNOHANG�ChildProcessErrorr
r+rSr�r�r�rU�poprS)r rWrzrRr{rJrKrrrrX�s6�

�
�zSafeChildWatcher._do_waitpid)r�r�r�r�r&rHrMrhrErYrXr�rrr"rr�s
rcsTeZdZdZ�fdd�Z�fdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
�ZS)raW'Fast' child watcher implementation.

    This implementation reaps every terminated processes by calling
    os.waitpid(-1) directly, possibly breaking other code spawning processes
    and waiting for their termination.

    There is no noticeable overhead when handling a big number of children
    (O(1) each time a child terminates).
    cs$t���t��|_i|_d|_dSr�)rr�	threading�Lock�_lock�_zombies�_forksr�r"rrrs

zFastChildWatcher.__init__cs"|j��|j��t���dSr)rUr.rmrr&r�r"rrr&s

zFastChildWatcher.closec
Cs0|j� |jd7_|W5QR�SQRXdS)Nr)rlrnr�rrrrHszFastChildWatcher.__enter__c	Cs^|j�B|jd8_|js"|js0W5QR�dSt|j�}|j��W5QRXt�d|�dS)Nrz5Caught subprocesses termination from unknown pids: %s)rlrnrmrDr.r
r+)r rJrKrL�collateral_victimsrrrrMs
�zFastChildWatcher.__exit__c	Gst|jstd��|j�Fz|j�|�}Wn.tk
rT||f|j|<YW5QR�dSXW5QRX|||f|��dS)NzMust use the context manager)rnr�rlrmrirSrU)r rzrJrKr{rrrrh'sz"FastChildWatcher.add_child_handlercCs*z|j|=WdStk
r$YdSXdSr_r`rDrrrrE5s
z%FastChildWatcher.remove_child_handlerc	Cs�zt�dtj�\}}Wntk
r,YdSX|dkr:dSt|�}|j��z|j�|�\}}WnNtk
r�|j	r�||j
|<|j��r�t
�d||�YW5QR�qd}YnX|j��r�t
�d||�W5QRX|dkr�t
�d||�q|||f|��qdS)Nr4rz,unknown process %s exited with returncode %srdz8Caught subprocess termination from unknown pid: %d -> %d)r�rfrgrhrSrlrUrirSrnrmr�r�r
r�r+)r rzrRr{rJrKrrrrY<s@

�

��z FastChildWatcher._do_waitpid_all)r�r�r�r�rr&rHrMrhrErYr�rrr"rr�s	rc@sheZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�ZdS)ra~A watcher that doesn't require running loop in the main thread.

    This implementation registers a SIGCHLD signal handler on
    instantiation (which may conflict with other code that
    install own handler for this signal).

    The solution is safe but it has a significant overhead when
    handling a big number of processes (*O(n)* each time a
    SIGCHLD is received).
    cCsi|_d|_dSr)rU�_saved_sighandlerr�rrrrzszMultiLoopChildWatcher.__init__cCs
|jdk	Sr)rpr�rrrre~szMultiLoopChildWatcher.is_activecCsT|j��|jdkrdSt�tj�}||jkr:t�d�nt�tj|j�d|_dS)Nz+SIGCHLD handler was changed by outside code)	rUr.rpr=�	getsignalr\r]r
r+)r rWrrrr&�s


zMultiLoopChildWatcher.closecCs|Srrr�rrrrH�szMultiLoopChildWatcher.__enter__cCsdSrr�r �exc_type�exc_val�exc_tbrrrrM�szMultiLoopChildWatcher.__exit__cGs&t��}|||f|j|<|�|�dSr)r�get_running_looprUrX)r rzrJrKr�rrrrh�sz'MultiLoopChildWatcher.add_child_handlercCs*z|j|=WdStk
r$YdSXdSr_r`rDrrrrE�s
z*MultiLoopChildWatcher.remove_child_handlercCsN|jdk	rdSt�tj|j�|_|jdkr<t�d�tj|_t�tjd�dS)NzaPrevious SIGCHLD handler was set by non-Python code, restore to default handler on watcher close.F)rpr=r\r]r
r+rVrFrFrrrrG�s


z!MultiLoopChildWatcher.attach_loopcCst|j�D]}|�|�q
dSrrarDrrrrY�sz%MultiLoopChildWatcher._do_waitpid_allc	Cs�|dkst�zt�|tj�\}}Wn,tk
rN|}d}t�d|�d}YnX|dkr\dSt|�}d}z|j�	|�\}}}Wn$t
k
r�tjd|dd�YnHX|��r�t�d||�n.|r�|��r�t�
d	||�|j|||f|��dS)
NrrbrcFTrer�%Loop %r that handles pid %r is closedrd)r�r�rfrgrhr
r+rSrUrirS�	is_closedr�r�rx)	r rWrzrRr{�	debug_logr�rJrKrrrrX�s<�
��z!MultiLoopChildWatcher._do_waitpidc	CsLz|��Wn:ttfk
r&�Yn"tk
rFtjddd�YnXdS)Nr^Tr)rYrkrlrmr
r+)r rrrrrr]�szMultiLoopChildWatcher._sig_chldN)r�r�r�r�rrer&rHrMrhrErGrYrXr]rrrrrgs%rc@sneZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	e
jfdd�Zdd�Z
dd�Zdd�Zdd�ZdS)raAThreaded child watcher implementation.

    The watcher uses a thread per process
    for waiting for the process finish.

    It doesn't require subscription on POSIX signal
    but a thread creation is not free.

    The watcher has O(1) complexity, its performance doesn't depend
    on amount of spawn processes.
    cCst�d�|_i|_dSr�)�	itertoolsr��_pid_counter�_threadsr�rrrr�szThreadedChildWatcher.__init__cCsdSrrr�rrrre�szThreadedChildWatcher.is_activecCs|��dSr)�
_join_threadsr�rrrr&�szThreadedChildWatcher.closecCs.dd�t|j���D�}|D]}|��qdS)z%Internal: Join all non-daemon threadscSsg|]}|��r|js|�qSr)�is_alive�daemon��.0�threadrrr�
<listcomp>�s�z6ThreadedChildWatcher._join_threads.<locals>.<listcomp>N)r)r|�valuesr�)r �threadsr�rrrr}�sz"ThreadedChildWatcher._join_threadscCs|Srrr�rrrrHszThreadedChildWatcher.__enter__cCsdSrrrrrrrrMszThreadedChildWatcher.__exit__cCs6dd�t|j���D�}|r2||j�d�t|d�dS)NcSsg|]}|��r|�qSr)r~r�rrrr�	s�z0ThreadedChildWatcher.__del__.<locals>.<listcomp>z0 has registered but not finished child processesr$)r)r|r�r#r-)r r
r�rrrrs�zThreadedChildWatcher.__del__cGsFt��}tj|jdt|j���||||fdd�}||j|<|��dS)Nzwaitpid-T)�target�namerKr)	rrvrj�ThreadrX�nextr{r|�start)r rzrJrKr�r�rrrrhs
�
z&ThreadedChildWatcher.add_child_handlercCsdSrrrDrrrrEsz)ThreadedChildWatcher.remove_child_handlercCsdSrrrFrrrrGsz ThreadedChildWatcher.attach_loopcCs�|dkst�zt�|d�\}}Wn(tk
rH|}d}t�d|�Yn Xt|�}|��rht�d||�|�	�r�t�d||�n|j
|||f|��|j�|�dS)Nrrbrcrdrw)
r�r�rfrhr
r+rSr�r�rxrxr|ri)r r�rWrJrKrzrRr{rrrrX"s(�
�z ThreadedChildWatcher._do_waitpidN)r�r�r�r�rrer&r}rHrMr+r,rrhrErGrXrrrrr�s	rcsHeZdZdZeZ�fdd�Zdd�Z�fdd�Zdd	�Z	d
d�Z
�ZS)�_UnixDefaultEventLoopPolicyz:UNIX event loop policy with a watcher for child processes.cst���d|_dSr)rr�_watcherr�r"rrrAs
z$_UnixDefaultEventLoopPolicy.__init__c	CsHtj�8|jdkr:t�|_tt��tj�r:|j�|j	j
�W5QRXdSr)rrlr�rrXrj�current_thread�_MainThreadrG�_localr�r�rrr�
_init_watcherEs
�z)_UnixDefaultEventLoopPolicy._init_watchercs6t��|�|jdk	r2tt��tj�r2|j�|�dS)z�Set the event loop.

        As a side effect, if a child watcher was set before, then calling
        .set_event_loop() from the main thread will call .attach_loop(loop) on
        the child watcher.
        N)r�set_event_loopr�rXrjr�r�rGrFr"rrr�Ms

�z*_UnixDefaultEventLoopPolicy.set_event_loopcCs|jdkr|��|jS)z~Get the watcher for child processes.

        If not yet set, a ThreadedChildWatcher object is automatically created.
        N)r�r�r�rrrrd[s
z-_UnixDefaultEventLoopPolicy.get_child_watchercCs4|dkst|t�st�|jdk	r*|j��||_dS)z$Set the watcher for child processes.N)rXrr�r�r&)r rurrr�set_child_watcheres

z-_UnixDefaultEventLoopPolicy.set_child_watcher)r�r�r�r�r�
_loop_factoryrr�r�rdr�r�rrr"rr�=s
r�)2r�rHr�rzr�r�r=r�r�r9r'rjr+�rrrrrrr	r
rr�logr
�__all__r�ImportErrorr�BaseSelectorEventLoopr�
ReadTransportr[�_FlowControlMixin�WriteTransportrb�BaseSubprocessTransportrgrrSrTrrrr�BaseDefaultEventLoopPolicyr�rrrrrr�<module>s`	
	�NO5Ji}Y3Xt�@sdS)N�rrr�)/usr/lib/python3.8/concurrent/__init__.py�<module>�XD�@sTdZdZddlmZmZmZmZmZmZm	Z	m
Z
mZmZm
Z
dZdd�Zdd�Zd	S)
z?Execute computations asynchronously using threads or processes.z"Brian Quinlan (brian@sweetapp.com)�)�FIRST_COMPLETED�FIRST_EXCEPTION�
ALL_COMPLETED�CancelledError�TimeoutError�InvalidStateError�BrokenExecutor�Future�Executor�wait�as_completed)rrrrrrr	r
rr�ProcessPoolExecutor�ThreadPoolExecutorcCstdS)N)�
__author__�__doc__)�__all__�rr�1/usr/lib/python3.8/concurrent/futures/__init__.py�__dir__$srcCsP|dkrddlm}|a|S|dkr8ddlm}|a|Stdt�d|����dS)Nr
�)r
r)rzmodule z has no attribute )�processr
�threadr�AttributeError�__name__)�name�pe�terrr�__getattr__(srN)rr�concurrent.futures._baserrrrrrrr	r
rrrrrrrrr�<module>s
4X�U�
@spdZddlZddlZddlZddlZdZdZdZdZdZ	dZ
d	Zd
ZdZ
e	e
eee
gZe	de
d
edede
diZe�d�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd �d e�ZGd!d"�d"e�Zd#d$�Zd%d&�Zd3d'd(�Ze� d)d*�Z!defd+d,�Z"Gd-d.�d.e�Z#Gd/d0�d0e�Z$Gd1d2�d2e%�Z&dS)4z"Brian Quinlan (brian@sweetapp.com)�N�FIRST_COMPLETED�FIRST_EXCEPTION�
ALL_COMPLETED�
_AS_COMPLETED�PENDING�RUNNING�	CANCELLED�CANCELLED_AND_NOTIFIED�FINISHED�pending�running�	cancelled�finishedzconcurrent.futuresc@seZdZdZdS)�Errorz-Base class for all future-related exceptions.N��__name__�
__module__�__qualname__�__doc__�rr�./usr/lib/python3.8/concurrent/futures/_base.pyr,src@seZdZdZdS)�CancelledErrorzThe Future was cancelled.Nrrrrrr0src@seZdZdZdS)�TimeoutErrorz*The operation exceeded the given deadline.Nrrrrrr4src@seZdZdZdS)�InvalidStateErrorz+The operation is not allowed in this state.Nrrrrrr8src@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�_Waiterz;Provides the event that wait() and as_completed() block on.cCst��|_g|_dS�N)�	threading�Event�event�finished_futures��selfrrr�__init__>s
z_Waiter.__init__cCs|j�|�dSr�r�append�r!�futurerrr�
add_resultBsz_Waiter.add_resultcCs|j�|�dSrr#r%rrr�
add_exceptionEsz_Waiter.add_exceptioncCs|j�|�dSrr#r%rrr�
add_cancelledHsz_Waiter.add_cancelledN)rrrrr"r'r(r)rrrrr<s
rcsDeZdZdZ�fdd�Z�fdd�Z�fdd�Z�fdd	�Z�ZS)
�_AsCompletedWaiterzUsed by as_completed().cstt|���t��|_dSr)�superr*r"r�Lock�lockr ��	__class__rrr"Nsz_AsCompletedWaiter.__init__c	s0|j� tt|��|�|j��W5QRXdSr)r-r+r*r'r�setr%r.rrr'Rsz_AsCompletedWaiter.add_resultc	s0|j� tt|��|�|j��W5QRXdSr)r-r+r*r(rr0r%r.rrr(Wsz _AsCompletedWaiter.add_exceptionc	s0|j� tt|��|�|j��W5QRXdSr)r-r+r*r)rr0r%r.rrr)\sz _AsCompletedWaiter.add_cancelled)	rrrrr"r'r(r)�
__classcell__rrr.rr*Ks
r*cs8eZdZdZ�fdd�Z�fdd�Z�fdd�Z�ZS)�_FirstCompletedWaiterz*Used by wait(return_when=FIRST_COMPLETED).cst��|�|j��dSr)r+r'rr0r%r.rrr'dsz _FirstCompletedWaiter.add_resultcst��|�|j��dSr)r+r(rr0r%r.rrr(hsz#_FirstCompletedWaiter.add_exceptioncst��|�|j��dSr)r+r)rr0r%r.rrr)lsz#_FirstCompletedWaiter.add_cancelled)rrrrr'r(r)r1rrr.rr2asr2csLeZdZdZ�fdd�Zdd�Z�fdd�Z�fdd	�Z�fd
d�Z�Z	S)�_AllCompletedWaiterz<Used by wait(return_when=FIRST_EXCEPTION and ALL_COMPLETED).cs$||_||_t��|_t���dSr)�num_pending_calls�stop_on_exceptionrr,r-r+r")r!r4r5r.rrr"ss
z_AllCompletedWaiter.__init__c	Cs4|j�$|jd8_|js&|j��W5QRXdS)N�)r-r4rr0r rrr�_decrement_pending_callsysz,_AllCompletedWaiter._decrement_pending_callscst��|�|��dSr)r+r'r7r%r.rrr'sz_AllCompletedWaiter.add_resultcs*t��|�|jr|j��n|��dSr)r+r(r5rr0r7r%r.rrr(�sz!_AllCompletedWaiter.add_exceptioncst��|�|��dSr)r+r)r7r%r.rrr)�sz!_AllCompletedWaiter.add_cancelled)
rrrrr"r7r'r(r)r1rrr.rr3psr3c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�_AcquireFutureszDA context manager that does an ordered acquire of Future conditions.cCst|td�|_dS)N)�key)�sorted�id�futures)r!r<rrrr"�sz_AcquireFutures.__init__cCs|jD]}|j��qdSr)r<�
_condition�acquirer%rrr�	__enter__�s
z_AcquireFutures.__enter__cGs|jD]}|j��qdSr)r<r=�release)r!�argsr&rrr�__exit__�s
z_AcquireFutures.__exit__N)rrrrr"r?rBrrrrr8�sr8cCs�|tkrt�}nZ|tkr t�}nJtdd�|D��}|tkrHt|dd�}n"|tkr^t|dd�}ntd|��|D]}|j	�
|�qn|S)Ncss|]}|jttfkVqdSr��_stater	r
��.0�frrr�	<genexpr>�sz._create_and_install_waiters.<locals>.<genexpr>T)r5FzInvalid return condition: %r)rr*rr2�sumrr3r�
ValueError�_waitersr$)�fs�return_when�waiter�
pending_countrGrrr�_create_and_install_waiters�s�rPc	csP|rL|d}|D]}|�|�q|j�|j�|�W5QRX~|��VqdS)a~
    Iterate on the list *fs*, yielding finished futures one by one in
    reverse order.
    Before yielding a future, *waiter* is removed from its waiters
    and the future is removed from each set in the collection of sets
    *ref_collect*.

    The aim of this function is to avoid keeping stale references after
    the future is yielded and before the iterator resumes.
    ���N)�remover=rK�pop)rLrN�ref_collectrG�futures_setrrr�_yield_finished_futures�srVc	csB|dk	r|t��}t|�}t|�}t|��*tdd�|D��}||}t|t�}W5QRXt|�}z�t|||fd�EdH|�r|dkr�d}n(|t��}|dkr�tdt|�|f��|j
�|�|j�|j}g|_|j
��W5QRX|��t||||fd�EdHq|W5|D]$}|j�|j	�
|�W5QRX�qXdS)anAn iterator over the given futures that yields each as it completes.

    Args:
        fs: The sequence of Futures (possibly created by different Executors) to
            iterate over.
        timeout: The maximum number of seconds to wait. If None, then there
            is no limit on the wait time.

    Returns:
        An iterator that yields the given Futures as they complete (finished or
        cancelled). If any given Futures are duplicated, they will be returned
        once.

    Raises:
        TimeoutError: If the entire result iterator could not be generated
            before the given timeout.
    Ncss |]}|jttfkr|VqdSrrCrErrrrH�s�zas_completed.<locals>.<genexpr>)rTrz%d (of %d) futures unfinished)�time�	monotonicr0�lenr8rPr�listr=rKrRrVrr�waitr-r�clear�reverse)	rL�timeout�end_time�
total_futuresrrrNrG�wait_timeoutrrr�as_completed�sL
�����rb�DoneAndNotDoneFuturesz
done not_donec
Cs
t|���tdd�|D��}t|�|}|tkrJ|rJt||�W5QR�S|tkr~|r~tdd�|D��r~t||�W5QR�St|�t|�kr�t||�W5QR�St||�}W5QRX|j�	|�|D]"}|j
�|j�|�W5QRXq�|�
|j�t|t|�|�S)aWait for the futures in the given sequence to complete.

    Args:
        fs: The sequence of Futures (possibly created by different Executors) to
            wait upon.
        timeout: The maximum number of seconds to wait. If None, then there
            is no limit on the wait time.
        return_when: Indicates when this function should return. The options
            are:

            FIRST_COMPLETED - Return when any future finishes or is
                              cancelled.
            FIRST_EXCEPTION - Return when any future finishes by raising an
                              exception. If no future raises an exception
                              then it is equivalent to ALL_COMPLETED.
            ALL_COMPLETED -   Return when all futures finish or are cancelled.

    Returns:
        A named 2-tuple of sets. The first set, named 'done', contains the
        futures that completed (is finished or cancelled) before the wait
        completed. The second set, named 'not_done', contains uncompleted
        futures.
    css |]}|jttfkr|VqdSrrCrErrrrH!s�zwait.<locals>.<genexpr>css&|]}|��s|��dk	r|VqdSr)r
�	exceptionrErrrrH(s�)r8r0rrcr�anyrYrPrr[r=rKrR�updater)rLr^rM�done�not_donerNrGrrrr[s"
r[c@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zddd�Z
d dd�Zdd�Zdd�Zdd�ZdS)!�Futurez5Represents the result of an asynchronous computation.cCs,t��|_t|_d|_d|_g|_g|_dS)z8Initializes the future. Should not be called by clients.N)	r�	Conditionr=rrD�_result�
_exceptionrK�_done_callbacksr rrrr"<s
zFuture.__init__c	Cs>|jD]2}z||�Wqtk
r6t�d|�YqXqdS)N�!exception calling callback for %r)rm�	Exception�LOGGERrd)r!�callbackrrr�_invoke_callbacksEs

zFuture._invoke_callbacksc
Cs�|j��|jtkrx|jrHd|jjt|�t|j|jjjfW5QR�Sd|jjt|�t|j|jjjfW5QR�Sd|jjt|�t|jfW5QR�SQRXdS)Nz<%s at %#x state=%s raised %s>z <%s at %#x state=%s returned %s>z<%s at %#x state=%s>)	r=rDr
rlr/rr;�_STATE_TO_DESCRIPTION_MAPrkr rrr�__repr__Ls(
���zFuture.__repr__c	Csf|j�N|jttfkr$W5QR�dS|jttfkr@W5QR�dSt|_|j��W5QRX|��dS)z�Cancel the future if possible.

        Returns True if the future was cancelled, False otherwise. A future
        cannot be cancelled if it is running or has already completed.
        FT)r=rDrr
rr	�
notify_allrrr rrr�cancel`sz
Future.cancelc
Cs,|j�|jttfkW5QR�SQRXdS)z(Return True if the future was cancelled.N)r=rDrr	r rrrr
sszFuture.cancelledc
Cs(|j�|jtkW5QR�SQRXdS)z1Return True if the future is currently executing.N)r=rDrr rrrrxszFuture.runningc
Cs.|j�|jtttfkW5QR�SQRXdS)z>Return True of the future was cancelled or finished executing.N)r=rDrr	r
r rrrrg}szFuture.donecCs$|jrz
|j�W5d}Xn|jSdSr)rlrkr rrr�__get_result�s

zFuture.__get_resultc	Csn|j�0|jtttfkr2|j�|�W5QR�dSW5QRXz||�Wn tk
rht�	d|�YnXdS)a%Attaches a callable that will be called when the future finishes.

        Args:
            fn: A callable that will be called with this future as its only
                argument when the future completes or is cancelled. The callable
                will always be called by a thread in the same process in which
                it was added. If the future has already completed or been
                cancelled then the callable will be called immediately. These
                callables are called in the order that they were added.
        Nrn)
r=rDrr	r
rmr$rorprd)r!�fnrrr�add_done_callback�szFuture.add_done_callbackNc
Cs�z�|j��|jttfkr t��n"|jtkrB|��W5QR�W�ZS|j�|�|jttfkrdt��n(|jtkr�|��W5QR�W�St��W5QRXW5d}XdS)aBReturn the result of the call that the future represents.

        Args:
            timeout: The number of seconds to wait for the result if the future
                isn't done. If None, then there is no limit on the wait time.

        Returns:
            The result of the call that the future represents.

        Raises:
            CancelledError: If the future was cancelled.
            TimeoutError: If the future didn't finish executing before the given
                timeout.
            Exception: If the call raised then that exception will be raised.
        N)	r=rDrr	rr
�_Future__get_resultr[r�r!r^rrr�result�s

z
Future.resultc
Cs�|j�||jttfkrt��n|jtkr:|jW5QR�S|j�|�|jttfkr\t��n"|jtkrx|jW5QR�St��W5QRXdS)aUReturn the exception raised by the call that the future represents.

        Args:
            timeout: The number of seconds to wait for the exception if the
                future isn't done. If None, then there is no limit on the wait
                time.

        Returns:
            The exception raised by the call that the future represents or None
            if the call completed without raising.

        Raises:
            CancelledError: If the future was cancelled.
            TimeoutError: If the future didn't finish executing before the given
                timeout.
        N)	r=rDrr	rr
rlr[rr{rrrrd�s

zFuture.exceptionc	Cs�|j�t|jtkr<t|_|jD]}|�|�qW5QR�dS|jtkrZt|_W5QR�dSt�	dt
|�|j�td��W5QRXdS)a�Mark the future as running or process any cancel notifications.

        Should only be used by Executor implementations and unit tests.

        If the future has been cancelled (cancel() was called and returned
        True) then any threads waiting on the future completing (though calls
        to as_completed() or wait()) are notified and False is returned.

        If the future was not cancelled then it is put in the running state
        (future calls to running() will return True) and True is returned.

        This method should be called by Executor implementations before
        executing the work associated with this future. If this method returns
        False then the work should not be executed.

        Returns:
            False if the Future was cancelled, True otherwise.

        Raises:
            RuntimeError: if this method was already called or if set_result()
                or set_exception() was called.
        FTz!Future %s in unexpected state: %szFuture in unexpected stateN)r=rDrr	rKr)rrrp�criticalr;�RuntimeError)r!rNrrr�set_running_or_notify_cancel�s


�z#Future.set_running_or_notify_cancelc	Csl|j�T|jttthkr*td�|j|���||_t|_|jD]}|�	|�q<|j�
�W5QRX|��dS)z�Sets the return value of work associated with the future.

        Should only be used by Executor implementations and unit tests.
        �{}: {!r}N)r=rDrr	r
r�formatrkrKr'rurr)r!r|rNrrr�
set_result
s
zFuture.set_resultc	Csl|j�T|jttthkr*td�|j|���||_t|_|jD]}|�	|�q<|j�
�W5QRX|��dS)z�Sets the result of the future as being the given exception.

        Should only be used by Executor implementations and unit tests.
        r�N)r=rDrr	r
rr�rlrKr(rurr)r!rdrNrrr�
set_exceptions
zFuture.set_exception)N)N)rrrrr"rrrtrvr
rrgrzryr|rdrr�r�rrrrri9s	

#
"(ric@sHeZdZdZdd�Zde_ddd�dd	�Zddd�Zd
d�Zdd�Z	dS)�ExecutorzCThis is an abstract base class for concrete asynchronous executors.cOs\t|�dkrnD|std��n6d|kr>ddl}|jdtdd�ntdt|�d	��t��dS)
a Submits a callable to be executed with the given arguments.

        Schedules the callable to be executed as fn(*args, **kwargs) and returns
        a Future instance representing the execution of the callable.

        Returns:
            A Future representing the given call.
        �z:descriptor 'submit' of 'Executor' object needs an argumentrxrNz.Passing 'fn' as keyword argument is deprecated)�
stacklevelz6submit expected at least 1 positional argument, got %dr6)rY�	TypeError�warnings�warn�DeprecationWarning�NotImplementedError)rA�kwargsr�rrr�submit.s	
�
�zExecutor.submitz($self, fn, /, *args, **kwargs)Nr6)r^�	chunksizecsB�dk	r�t�����fdd�t|�D�����fdd�}|�S)a}Returns an iterator equivalent to map(fn, iter).

        Args:
            fn: A callable that will take as many arguments as there are
                passed iterables.
            timeout: The maximum number of seconds to wait. If None, then there
                is no limit on the wait time.
            chunksize: The size of the chunks the iterable will be broken into
                before being passed to a child process. This argument is only
                used by ProcessPoolExecutor; it is ignored by
                ThreadPoolExecutor.

        Returns:
            An iterator equivalent to: map(func, *iterables) but the calls may
            be evaluated out-of-order.

        Raises:
            TimeoutError: If the entire result iterator could not be generated
                before the given timeout.
            Exception: If fn(*args) raises for any values.
        Ncsg|]}�j�f|���qSr)r�)rFrA)rxr!rr�
<listcomp>`sz Executor.map.<locals>.<listcomp>c	3s\zB����r@�dkr&�����Vq
�����t���Vq
W5�D]}|��qHXdSr)rvr]rSr|rWrX)r&)r_rLr^rr�result_iteratordsz%Executor.map.<locals>.result_iterator)rWrX�zip)r!rxr^r��	iterablesr�r)r_rxrLr!r^r�mapGs

zExecutor.mapTcCsdS)a�Clean-up the resources associated with the Executor.

        It is safe to call this method several times. Otherwise, no other
        methods can be called after this one.

        Args:
            wait: If True then shutdown will not return until all running
                futures have finished executing and the resources used by the
                executor have been reclaimed.
        Nr)r!r[rrr�shutdownsszExecutor.shutdowncCs|Srrr rrrr?�szExecutor.__enter__cCs|jdd�dS)NT)r[F)r�)r!�exc_type�exc_val�exc_tbrrrrB�szExecutor.__exit__)T)
rrrrr��__text_signature__r�r�r?rBrrrrr�+s,

r�c@seZdZdZdS)�BrokenExecutorzR
    Raised when a executor has become non-functional after a severe failure.
    Nrrrrrr��sr�)N)'�
__author__�collections�loggingrrWrrrrrrrr	r
�_FUTURE_STATESrs�	getLoggerrprorrrr�objectrr*r2r3r8rPrVrb�
namedtuplercr[rir�r~r�rrrr�<module>sh�	�	

>�1s]X<O�@s�dZdZddlZddlZddlmZddlZddlmZddlZ	ddl
ZddlmZddl
Z
ddlZddlmZddlZddlZddlZe��ZdaGd	d
�d
�Zdd�Zd
ZdZGdd�de�ZGdd�d�Zdd�ZGdd�de�Z Gdd�de�Z!Gdd�de�Z"Gdd�de�Z#dd�Z$dd �Z%d1d!d"�Z&d#d$�Z'd%d&�Z(d'd(�Z)da*da+d)d*�Z,d+d,�Z-Gd-d.�d.ej.�Z/Gd/d0�d0ej0�Z1e�2e�dS)2a-	Implements ProcessPoolExecutor.

The following diagram and text describe the data-flow through the system:

|======================= In-process =====================|== Out-of-process ==|

+----------+     +----------+       +--------+     +-----------+    +---------+
|          |  => | Work Ids |       |        |     | Call Q    |    | Process |
|          |     +----------+       |        |     +-----------+    |  Pool   |
|          |     | ...      |       |        |     | ...       |    +---------+
|          |     | 6        |    => |        |  => | 5, call() | => |         |
|          |     | 7        |       |        |     | ...       |    |         |
| Process  |     | ...      |       | Local  |     +-----------+    | Process |
|  Pool    |     +----------+       | Worker |                      |  #1..n  |
| Executor |                        | Thread |                      |         |
|          |     +----------- +     |        |     +-----------+    |         |
|          | <=> | Work Items | <=> |        | <=  | Result Q  | <= |         |
|          |     +------------+     |        |     +-----------+    |         |
|          |     | 6: call()  |     |        |     | ...       |    |         |
|          |     |    future  |     |        |     | 4, result |    |         |
|          |     | ...        |     |        |     | 3, except |    |         |
+----------+     +------------+     +--------+     +-----------+    +---------+

Executor.submit() called:
- creates a uniquely numbered _WorkItem and adds it to the "Work Items" dict
- adds the id of the _WorkItem to the "Work Ids" queue

Local worker thread:
- reads work ids from the "Work Ids" queue and looks up the corresponding
  WorkItem from the "Work Items" dict: if the work item has been cancelled then
  it is simply removed from the dict, otherwise it is repackaged as a
  _CallItem and put in the "Call Q". New _CallItems are put in the "Call Q"
  until "Call Q" is full. NOTE: the size of the "Call Q" is kept small because
  calls placed in the "Call Q" can no longer be cancelled with Future.cancel().
- reads _ResultItems from "Result Q", updates the future stored in the
  "Work Items" dict and deletes the dict entry

Process #1..n:
- reads _CallItems from "Call Q", executes the calls, and puts the resulting
  _ResultItems in "Result Q"
z"Brian Quinlan (brian@sweetapp.com)�N)�_base)�Full)�Queue)�partialFc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�
_ThreadWakeupcCstjdd�\|_|_dS)NF)�duplex)�mp�Pipe�_reader�_writer��self�r�0/usr/lib/python3.8/concurrent/futures/process.py�__init__Rsz_ThreadWakeup.__init__cCs|j��|j��dS�N)r�closer
rrrrrUs
z_ThreadWakeup.closecCs|j�d�dS)N�)r�
send_bytesrrrr�wakeupYsz_ThreadWakeup.wakeupcCs|j��r|j��qdSr)r
�poll�
recv_bytesrrrr�clear\s
z_ThreadWakeup.clearN)�__name__�
__module__�__qualname__rrrrrrrrrQsrcCs@datt���}|D]\}}|��q|D]\}}|��q*dS�NT)�_global_shutdown�list�_threads_wakeups�itemsr�join)r �_�
thread_wakeup�trrr�_python_exitas
r%��=c@seZdZdd�Zdd�ZdS)�_RemoteTracebackcCs
||_dSr��tb)r
r*rrrrzsz_RemoteTraceback.__init__cCs|jSrr)rrrr�__str__|sz_RemoteTraceback.__str__N)rrrrr+rrrrr(ysr(c@seZdZdd�Zdd�ZdS)�_ExceptionWithTracebackcCs0t�t|�||�}d�|�}||_d||_dS)N�z

"""
%s""")�	traceback�format_exception�typer!�excr*)r
r1r*rrrr�s
z _ExceptionWithTraceback.__init__cCst|j|jffSr)�_rebuild_excr1r*rrrr�
__reduce__�sz"_ExceptionWithTraceback.__reduce__N)rrrrr3rrrrr,sr,cCst|�|_|Sr)r(�	__cause__)r1r*rrrr2�s
r2c@seZdZdd�ZdS)�	_WorkItemcCs||_||_||_||_dSr)�future�fn�args�kwargs)r
r6r7r8r9rrrr�sz_WorkItem.__init__N�rrrrrrrrr5�sr5c@seZdZddd�ZdS)�_ResultItemNcCs||_||_||_dSr)�work_id�	exception�result)r
r<r=r>rrrr�sz_ResultItem.__init__)NNr:rrrrr;�sr;c@seZdZdd�ZdS)�	_CallItemcCs||_||_||_||_dSr)r<r7r8r9)r
r<r7r8r9rrrr�sz_CallItem.__init__Nr:rrrrr?�sr?cs.eZdZdZd�fdd�	Z�fdd�Z�ZS)�
_SafeQueuez=Safe Queue set exception to the future object linked to a jobrcs||_t�j||d�dS)N)�ctx)�pending_work_items�superr)r
�max_sizerArB��	__class__rrr�sz_SafeQueue.__init__cslt|t�rZt�t|�||j�}td�d�|���|_	|j
�|jd�}|dk	rh|j
�|�nt��||�dS)Nz

"""
{}"""r-)�
isinstancer?r.r/r0�
__traceback__r(�formatr!r4rB�popr<r6�
set_exceptionrC�_on_queue_feeder_error)r
�e�objr*�	work_itemrErrrL�s
z!_SafeQueue._on_queue_feeder_error)r)rrr�__doc__rrL�
__classcell__rrrErr@�sr@cgs,t|�}tt�||��}|s dS|VqdS)z, Iterates over zip()ed iterables in chunks. N)�zip�tuple�	itertools�islice)�	chunksize�	iterables�it�chunkrrr�_get_chunks�s
rZcs�fdd�|D�S)z� Processes a chunk of an iterable passed to map.

    Runs the function passed to map() on a chunk of the
    iterable passed to map.

    This function is run in a separate process.

    csg|]}�|��qSrr)�.0r8�r7rr�
<listcomp>�sz"_process_chunk.<locals>.<listcomp>r)r7rYrr\r�_process_chunk�s	r^c
Cs^z|�t|||d��Wn@tk
rX}z"t||j�}|�t||d��W5d}~XYnXdS)z.Safely send back the given result or exception)r>r=�r=N)�putr;�
BaseExceptionr,rH)�result_queuer<r>r=rMr1rrr�_sendback_result�s
�rcc
Cs�|dk	r<z||�Wn&tk
r:tjjddd�YdSX|jdd�}|dkrb|�t���dSz|j|j	|j
�}Wn>tk
r�}z t||j�}t
||j|d�W5d}~XYnXt
||j|d�~~q<dS)a�Evaluates calls from call_queue and places the results in result_queue.

    This worker is run in a separate process.

    Args:
        call_queue: A ctx.Queue of _CallItems that will be read and
            evaluated by the worker.
        result_queue: A ctx.Queue of _ResultItems that will written
            to by the worker.
        initializer: A callable initializer, or None
        initargs: A tuple of args for the initializer
    NzException in initializer:T)�exc_info��blockr_)r>)rar�LOGGER�critical�getr`�os�getpidr7r8r9r,rHrcr<)�
call_queuerb�initializer�initargs�	call_item�rrMr1rrr�_process_worker�s$
"rqcCsv|��rdSz|jdd�}Wntjk
r4YdSX||}|j��rh|jt||j|j	|j
�dd�q||=qqdS)aMFills call_queue with _WorkItems from pending_work_items.

    This function never blocks.

    Args:
        pending_work_items: A dict mapping work ids to _WorkItems e.g.
            {5: <_WorkItem...>, 6: <_WorkItem...>, ...}
        work_ids: A queue.Queue of work ids e.g. Queue([5, 6, ...]). Work ids
            are consumed and the corresponding _WorkItems from
            pending_work_items are transformed into _CallItems and put in
            call_queue.
        call_queue: A multiprocessing.Queue that will be filled with _CallItems
            derived from _WorkItems.
    NFreT)�fullri�queue�Emptyr6�set_running_or_notify_cancelr`r?r7r8r9)rB�work_idsrlr<rOrrr�_add_call_item_to_queue�s"
��rwc
sJd��fdd�}��fdd�}|j}	|j}
|	|
g}t||��dd����D�}tj�||�}
d}d}|	|
kr�z|	��}d	}Wq�tk
r�}zt�	t
|�||j�}W5d}~XYq�Xn|
|
kr�d	}d}|��|�rl|���dk	r�d
�_
d�_d�td�}|dk	�r tdd
�|��d��|_|��D]\}}|j�|�~�q(|�����D]}|���qR|�dSt|t��r�|��s�t���|�}|����s�|�dSnL|dk	�r�|�|jd�}|dk	�r�|j�r�|j�|j�n|j�|j�~~|��|��r@z&�dk	�rd�_|�s&|�WdSWntk
�r>YnXd�q2dS)a,Manages the communication between this process and the worker processes.

    This function is run in a local thread.

    Args:
        executor_reference: A weakref.ref to the ProcessPoolExecutor that owns
            this thread. Used to determine if the ProcessPoolExecutor has been
            garbage collected and that this function can exit.
        process: A list of the ctx.Process instances used as
            workers.
        pending_work_items: A dict mapping work ids to _WorkItems e.g.
            {5: <_WorkItem...>, 6: <_WorkItem...>, ...}
        work_ids_queue: A queue.Queue of work ids e.g. Queue([5, 6, ...]).
        call_queue: A ctx.Queue that will be filled with _CallItems
            derived from _WorkItems for processing by the process workers.
        result_queue: A ctx.SimpleQueue of _ResultItems generated by the
            process workers.
        thread_wakeup: A _ThreadWakeup to allow waking up the
            queue_manager_thread from the main Thread and avoid deadlocks
            caused by permanently locked queues.
    Ncstp�dkp�jSr)r�_shutdown_threadr)�executorrr�
shutting_down@s�z/_queue_management_worker.<locals>.shutting_downc	s�tdd����D��}|}d}||kr�|dkr�t||�D]6}z��d�|d7}Wq:tk
rnYqrYq:Xq:tdd����D��}q������D]}|��q�dS)Ncss|]}|��VqdSr��is_alive�r[�prrr�	<genexpr>FszD_queue_management_worker.<locals>.shutdown_worker.<locals>.<genexpr>rr&css|]}|��VqdSrr{r}rrrrRs)�sum�values�range�
put_nowaitrrr!)�n_children_alive�n_children_to_stop�n_sentinels_sent�ir~)rl�	processesrr�shutdown_workerDs
z1_queue_management_worker.<locals>.shutdown_workercSsg|]
}|j�qSr)�sentinelr}rrrr]isz,_queue_management_worker.<locals>.<listcomp>TFzKA child process terminated abruptly, the process pool is not usable anymorez^A process in the process pool was terminated abruptly while the future was running or pending.z
'''
r-z''') r
rwr�r�
connection�wait�recvrar.r/r0rHr�_brokenrx�BrokenProcessPoolr(r!r4r r6rK�	terminaterG�int�AssertionErrorrJr<r=�
set_resultr>r)�executor_referencer�rB�work_ids_queuerlrbr#rzr��
result_reader�
wakeup_reader�readers�worker_sentinels�ready�cause�	is_broken�result_itemrM�bper<rOr~r)rlryr�r�_queue_management_worker"s��	(
�




r�c	Csjtrtrtt��dazt�d�}Wnttfk
r<YdSX|dkrJdS|dkrVdSd|att��dS)NT�SC_SEM_NSEMS_MAX����z@system provides too few semaphores (%d available, 256 necessary))�_system_limits_checked�_system_limited�NotImplementedErrorrj�sysconf�AttributeError�
ValueError)�	nsems_maxrrr�_check_system_limits�s �r�ccs&|D]}|��|r|��VqqdS)z�
    Specialized implementation of itertools.chain.from_iterable.
    Each item in *iterable* should be a list.  This function is
    careful not to keep references to yielded objects.
    N)�reverserJ)�iterable�elementrrr�_chain_from_iterable_of_lists�sr�c@seZdZdZdS)r�zy
    Raised when a process in a ProcessPoolExecutor terminated abruptly
    while a future was in the running state.
    N)rrrrPrrrrr��sr�csteZdZddd�Zdd�Zdd�Zd	d
�Zejjj	e_	ejjj
e_
ddd��fd
d�
Zddd�Zejjj
e_
�Z
S)�ProcessPoolExecutorNrcCst�|dkr6t��pd|_tjdkrntt|j�|_n8|dkrHtd��n tjdkrh|tkrhtdt����||_|dkr~t	�
�}||_|dk	r�t|�s�t
d��||_||_d|_i|_d|_t��|_d|_d|_i|_|jt}t||j|jd	�|_d
|j_|��|_t� �|_!t"�|_#dS)aSInitializes a new ProcessPoolExecutor instance.

        Args:
            max_workers: The maximum number of processes that can be used to
                execute the given calls. If None or not given then as many
                worker processes will be created as the machine has processors.
            mp_context: A multiprocessing context to launch the workers. This
                object should provide SimpleQueue, Queue and Process.
            initializer: A callable used to initialize worker processes.
            initargs: A tuple of arguments to pass to the initializer.
        Nr&�win32rz"max_workers must be greater than 0zmax_workers must be <= zinitializer must be a callableF)rDrArBT)$r�rj�	cpu_count�_max_workers�sys�platform�min�_MAX_WINDOWS_WORKERSr�r�get_context�_mp_context�callable�	TypeError�_initializer�	_initargs�_queue_management_thread�
_processesrx�	threading�Lock�_shutdown_lockr��_queue_count�_pending_work_items�EXTRA_QUEUED_CALLSr@�_call_queue�
_ignore_epipe�SimpleQueue�
_result_queuersr�	_work_idsr�_queue_management_thread_wakeup)r
�max_workers�
mp_contextrmrn�
queue_sizerrrr�sP

�

��

�

zProcessPoolExecutor.__init__c	Csv|jdkrr|jfdd�}|��tjtt�||�|j|j	|j
|j|j|jfdd�|_d|j_
|j��|jt|j<dS)NcSstj�d�|��dS)Nz?Executor collected: triggering callback for QueueManager wakeup)r�util�debugr)r"r#rrr�
weakref_cbBszFProcessPoolExecutor._start_queue_management_thread.<locals>.weakref_cbZQueueManagerThread)�targetr8�nameT)r�r��_adjust_process_countr��Threadr��weakref�refr�r�r�r�r��daemon�startr)r
r�rrr�_start_queue_management_thread=s(
�

��

�z2ProcessPoolExecutor._start_queue_management_threadcCsPtt|j�|j�D]8}|jjt|j|j|j	|j
fd�}|��||j|j<qdS)N)r�r8)
r��lenr�r�r��Processrqr�r�r�r�r��pid)r
r"r~rrrr�Xs��z)ProcessPoolExecutor._adjust_process_countc
Os
t|�dkr|^}}}nV|s&td��nHd|krZ|�d�}|^}}ddl}|jdtdd�ntdt|�d��|j��|jr�t|j��|j	r�t
d	��tr�t
d
��t�
�}t||||�}||j|j<|j�|j�|jd7_|j��|��|W5QR�SQRXdS)N�zEdescriptor 'submit' of 'ProcessPoolExecutor' object needs an argumentr7rz.Passing 'fn' as keyword argument is deprecated)�
stacklevelz6submit expected at least 1 positional argument, got %dr&z*cannot schedule new futures after shutdownz6cannot schedule new futures after interpreter shutdown)r�r�rJ�warnings�warn�DeprecationWarningr�r�r�rx�RuntimeErrorrr�Futurer5r�r�r�r`r�rr�)r8r9r
r7r��f�wrrr�submitcs<

�
�

zProcessPoolExecutor.submitr&)�timeoutrVcs:|dkrtd��t�jtt|�t|d|i�|d�}t|�S)ajReturns an iterator equivalent to map(fn, iter).

        Args:
            fn: A callable that will take as many arguments as there are
                passed iterables.
            timeout: The maximum number of seconds to wait. If None, then there
                is no limit on the wait time.
            chunksize: If greater than one, the iterables will be chopped into
                chunks of size chunksize and submitted to the process pool.
                If set to one, the items in the list will be sent one at a time.

        Returns:
            An iterator equivalent to: map(func, *iterables) but the calls may
            be evaluated out-of-order.

        Raises:
            TimeoutError: If the entire result iterator could not be generated
                before the given timeout.
            Exception: If fn(*args) raises for any values.
        r&zchunksize must be >= 1.rV)r�)r�rC�maprr^rZr�)r
r7r�rVrW�resultsrErrr��s�zProcessPoolExecutor.mapTc	Cs�|j�d|_W5QRX|jr6|j��|r6|j��d|_|jdk	rd|j��|r^|j��d|_d|_	d|_
|jr�|j��d|_dSr)r�rxr�r�rr!r�r�join_threadr�r�)r
r�rrr�shutdown�s"





zProcessPoolExecutor.shutdown)NNNr)T)rrrrr�r�r�r�Executor�__text_signature__rPr�r�rQrrrErr��s�
K$
r�)NN)3rP�
__author__�atexitrj�concurrent.futuresrrsr�multiprocessingr�multiprocessing.connection�multiprocessing.queuesrr�r��	functoolsrrTr�r.�WeakKeyDictionaryrrrr%r�r��	Exceptionr(r,r2�objectr5r;r?r@rZr^rcrqrwr�r�r�r�r��BrokenExecutorr�r�r��registerrrrr�<module>sV*
		

)&!PX��@s�dZdZddlZddlmZddlZddlZddlZddlZddl	Z	e�
�Zdadd�Z
e�e
�Gdd	�d	e�Zd
d�ZGdd
�d
ej�ZGdd�dej�ZdS)zImplements ThreadPoolExecutor.z"Brian Quinlan (brian@sweetapp.com)�N)�_baseFcCsBdatt���}|D]\}}|�d�q|D]\}}|��q,dS�NT)�	_shutdown�list�_threads_queues�items�put�join)r�t�q�r�//usr/lib/python3.8/concurrent/futures/thread.py�_python_exit!src@seZdZdd�Zdd�ZdS)�	_WorkItemcCs||_||_||_||_dS�N)�future�fn�args�kwargs)�selfrrrrrrr
�__init__.sz_WorkItem.__init__c
Csf|j��sdSz|j|j|j�}Wn2tk
rT}z|j�|�d}W5d}~XYnX|j�|�dSr)r�set_running_or_notify_cancelrrr�
BaseException�
set_exception�
set_result)r�result�excrrr
�run4s
z
_WorkItem.runN)�__name__�
__module__�__qualname__rrrrrr
r-srcCs�|dk	rRz||�Wn<tk
rPtjjddd�|�}|dk	rJ|��YdSXzx|jdd�}|dk	r�|��~|�}|dk	r�|j��~qT|�}t	s�|dks�|j	r�|dk	r�d|_	|�
d�WdS~qTWn$tk
r�tjjddd�YnXdS)NzException in initializer:T)�exc_info)�blockzException in worker)rr�LOGGER�critical�_initializer_failed�getr�_idle_semaphore�releaserr)�executor_reference�
work_queue�initializer�initargs�executor�	work_itemrrr
�_workerBs8

r/c@seZdZdZdS)�BrokenThreadPoolzR
    Raised when a worker thread in a ThreadPoolExecutor failed initializing.
    N)rrr �__doc__rrrr
r0msr0c@sfeZdZe��jZddd�Zdd�Ze	j
jje_e	j
jje_dd	�Z
d
d�Zdd
d�Ze	j
jje_dS)�ThreadPoolExecutorN�rcCs�|dkrtdt��pdd�}|dkr.td��|dk	rFt|�sFtd��||_t��|_	t
�d�|_t
�|_d|_d|_t
��|_|p�d	|��|_||_||_dS)
a�Initializes a new ThreadPoolExecutor instance.

        Args:
            max_workers: The maximum number of threads that can be used to
                execute the given calls.
            thread_name_prefix: An optional name prefix to give our threads.
            initializer: A callable used to initialize worker threads.
            initargs: A tuple of arguments to pass to the initializer.
        N� ��rz"max_workers must be greater than 0zinitializer must be a callableFzThreadPoolExecutor-%d)�min�os�	cpu_count�
ValueError�callable�	TypeError�_max_workers�queue�SimpleQueue�_work_queue�	threading�	Semaphorer'�set�_threads�_brokenr�Lock�_shutdown_lock�_counter�_thread_name_prefix�_initializer�	_initargs)r�max_workers�thread_name_prefixr+r,rrr
rxs$


�zThreadPoolExecutor.__init__c
Os�t|�dkr|^}}}nV|s&td��nHd|krZ|�d�}|^}}ddl}|jdtdd�ntdt|�d��|j�f|jr�t|j��|j	r�t
d	��t	r�t
d
��t��}t
||||�}|j�|�|��|W5QR�SQRXdS)N�zDdescriptor 'submit' of 'ThreadPoolExecutor' object needs an argumentrrz.Passing 'fn' as keyword argument is deprecated)�
stacklevelz6submit expected at least 1 positional argument, got %dr5z*cannot schedule new futures after shutdownz6cannot schedule new futures after interpreter shutdown)�lenr<�pop�warnings�warn�DeprecationWarningrGrEr0r�RuntimeErrorr�Futurerr@r�_adjust_thread_count)rrrrrR�f�wrrr
�submit�s6

�
�
zThreadPoolExecutor.submitcCs�|jjdd�rdS|jfdd�}t|j�}||jkr�d|jp>||f}tj|t	t
�||�|j|j|j
fd�}d|_|��|j�|�|jt|<dS)Nr)�timeoutcSs|�d�dSr)r)�_rrrr
�
weakref_cb�sz;ThreadPoolExecutor._adjust_thread_count.<locals>.weakref_cbz%s_%d)�name�targetrT)r'�acquirer@rPrDr=rIrA�Threadr/�weakref�refrJrK�daemon�start�addr)rr]�num_threads�thread_namer
rrr
rW�s&


�
��z'ThreadPoolExecutor._adjust_thread_countc	Csb|j�Rd|_z|j��}Wntjk
r6YqTYnX|dk	r|j�t|j��qW5QRXdS)NzBA thread initializer failed, the thread pool is not usable anymore)	rGrEr@�
get_nowaitr>�Emptyrrr0)rr.rrr
r%�s
z&ThreadPoolExecutor._initializer_failedTc	Cs@|j�d|_|j�d�W5QRX|r<|jD]}|��q.dSr)rGrr@rrDr	)r�waitr
rrr
�shutdown�s
zThreadPoolExecutor.shutdown)Nr3Nr)T)rrr �	itertools�count�__next__rHrrZr�Executor�__text_signature__r1rWr%rlrrrr
r2ss
�
& 
r2)r1�
__author__�atexit�concurrent.futuresrrmr>rArbr8�WeakKeyDictionaryrrr�register�objectrr/�BrokenExecutorr0rpr2rrrr
�<module>s 	
+XL�@shdZddlTddlZddlZdd�Zdd�ZzeWn e	k
rTdd	lmZYnXd
d�Z
de
_dS)
z�curses

The main package for curses support for Python.  Normally used by importing
the package, and perhaps a particular module inside it.

   import curses
   from curses import textpad
   curses.initscr()
   ...

�)�*NcCspddl}ddl}ttj�dd�tj��d�|�	�}|j
��D],\}}|dd�dks^|dkr>t|||�q>|S)NrZTERM�unknown)�term�fd�ZACS_)�LINESZCOLS)
�_curses�curses�	setupterm�_os�environ�get�_sys�
__stdout__�fileno�initscr�__dict__�items�setattr)rr	�stdscr�key�value�r�%/usr/lib/python3.8/curses/__init__.pyrs�rcCs@ddl}ddl}|��}t|d�r*|j|_t|d�r<|j|_|S)Nr�COLORS�COLOR_PAIRS)rr	�start_color�hasattrrr)rr	�retvalrrrr*s

r�)�has_keyc	Os�|r|^}}n<d|kr:|�d�}ddl}|jdtdd�ntdt|���zHt�}t�t
�|�d	�z
t�WnYnX||f|�|�W�Sdt�kr�|�d�t�t	�t
�XdS)
aWrapper function that initializes curses and calls another function,
    restoring normal keyboard/screen behavior on error.
    The callable object 'func' is then passed the main window 'stdscr'
    as its first argument, followed by any other arguments passed to
    wrapper().
    �funcrNz0Passing 'func' as keyword argument is deprecated�)�
stacklevelz7wrapper expected at least 1 positional argument, got %drr)�pop�warnings�warn�DeprecationWarning�	TypeError�len�locals�keypad�echo�nocbreak�endwinr�noecho�cbreakr)�args�kwdsr!r%rrrr�wrapper?s6

��



r3z(func, /, *args, **kwds))�__doc__r�osr�sysrrrr �	NameErrorr3�__text_signature__rrrr�<module>s
2X��*@sddlZejdejdejdejdejdejdejdejd	ej	d
ej
dejdejd
ej
dejdejdejdejdejdejdejdejdejdejdejdejdejdejdejdejdejdejd ej d!ej!d"ej"d#ej#d$ej$d%ej%d&ej&d'ej'd(ej(d)ej)d*ej*d+ej+d,ej,d-ej-d.ej.d/ej/d0ej0d1ej1d2ej2d3ej3d4ej4d5ej5d6ej6d7ej7d8ej8d9ej9d:ej:d;ej;d<ej<d=ej=d>ej>d?ej?d@ej@dAejAdBejBdCejCdDejDdEejEdFejFdGejGdHejHdIejIdJejJdKejKdLejLdMejMdNejNdOejOdPejPdQejQdRejRdSejSdTejTdUejUdVejVdWejWdXejXdYejYdZejZd[ej[d\ej\d]ej]d^ej^d_ej_d`ej`daejadbejbdcejcddejddeejedfejfdgejgdhejhdiejidjejjdkejkdlejldmejmdnejndoejodpejpdqejqdrejrdsejsdtejtduejudvejvdwejwdxejxdyejydzejzd{ej{d|ej|d}ej}d~ej~dejd�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�ej�d�i�Z�d�d��Z�e�d�k�rzVgZ�e���e����D]<Z�e��e��Z�e�e��Z�e�e�k�r�e���d�e��e��e�e�f��q�W5e���e�D]Z�e�e���qXdS)��NZka1Zka3Zkb2ZkbsZkbegZkcbtZkc1Zkc3ZkcanZktbcZkclrZkcloZkcmdZkcpyZkcrtZkctabZkdch1Zkdl1Zkcud1ZkrmirZkendZkentZkelZkedZkextZkf0Zkf1Zkf10Zkf11Zkf12Zkf13Zkf14Zkf15Zkf16Zkf17Zkf18Zkf19Zkf2Zkf20Zkf21Zkf22Zkf23Zkf24Zkf25Zkf26Zkf27Zkf28Zkf29Zkf3Zkf30Zkf31Zkf32Zkf33Zkf34Zkf35Zkf36Zkf37Zkf38Zkf39Zkf4Zkf40Zkf41Zkf42Zkf43Zkf44Zkf45Zkf46Zkf47Zkf48Zkf49Zkf5Zkf50Zkf51Zkf52Zkf53Zkf54Zkf55Zkf56Zkf57Zkf58Zkf59Zkf6Zkf60Zkf61Zkf62Zkf63Zkf7Zkf8Zkf9ZkfndZkhlpZkhomeZkich1Zkil1Zkcub1ZkllZkmrkZkmsgZkmovZknxtZknpZkopnZkoptZkppZkprvZkprtZkrdoZkrefZkrfrZkrplZkrstZkresZkcuf1ZksavZkBEGZkCANZkCMDZkCPYZkCRTZkDCZkDLZksltZkENDZkEOLZkEXT�kindZkFNDZkHLPZkHOMZkICZkLFTZkMSGZkMOVZkNXTZkOPTZkPRVZkPRTZkriZkRDOZkRPLZkRITZkRESZkSAVZkSPDZkhtsZkUNDZkspdZkundZkcuu1cCs>t|t�rt|�}t�|�}|dkr(dSt�|�r6dSdSdS)NFT)�
isinstance�str�ord�_capability_names�get�_curses�tigetstr)�ch�capability_name�r�$/usr/lib/python3.8/curses/has_key.py�has_key�s


r�__main__z)Mismatch for key %s, system=%i, Python=%i)�r�KEY_A1�KEY_A3�KEY_B2�
KEY_BACKSPACE�KEY_BEG�KEY_BTAB�KEY_C1�KEY_C3�
KEY_CANCEL�	KEY_CATAB�	KEY_CLEAR�	KEY_CLOSE�KEY_COMMAND�KEY_COPY�
KEY_CREATE�KEY_CTAB�KEY_DC�KEY_DL�KEY_DOWN�KEY_EIC�KEY_END�	KEY_ENTER�KEY_EOL�KEY_EOS�KEY_EXIT�KEY_F0�KEY_F1�KEY_F10�KEY_F11�KEY_F12�KEY_F13�KEY_F14�KEY_F15�KEY_F16�KEY_F17�KEY_F18�KEY_F19�KEY_F2�KEY_F20�KEY_F21�KEY_F22�KEY_F23�KEY_F24�KEY_F25�KEY_F26�KEY_F27�KEY_F28�KEY_F29�KEY_F3�KEY_F30�KEY_F31�KEY_F32�KEY_F33�KEY_F34�KEY_F35�KEY_F36�KEY_F37�KEY_F38�KEY_F39�KEY_F4�KEY_F40�KEY_F41�KEY_F42�KEY_F43�KEY_F44�KEY_F45�KEY_F46�KEY_F47�KEY_F48�KEY_F49�KEY_F5�KEY_F50�KEY_F51�KEY_F52�KEY_F53�KEY_F54�KEY_F55�KEY_F56�KEY_F57�KEY_F58�KEY_F59�KEY_F6�KEY_F60�KEY_F61�KEY_F62�KEY_F63�KEY_F7�KEY_F8�KEY_F9�KEY_FIND�KEY_HELP�KEY_HOME�KEY_IC�KEY_IL�KEY_LEFT�KEY_LL�KEY_MARK�KEY_MESSAGE�KEY_MOVE�KEY_NEXT�	KEY_NPAGE�KEY_OPEN�KEY_OPTIONS�	KEY_PPAGE�KEY_PREVIOUS�	KEY_PRINT�KEY_REDO�
KEY_REFERENCE�KEY_REFRESH�KEY_REPLACE�KEY_RESTART�
KEY_RESUME�	KEY_RIGHT�KEY_SAVE�KEY_SBEG�KEY_SCANCEL�KEY_SCOMMAND�	KEY_SCOPY�KEY_SCREATE�KEY_SDC�KEY_SDL�
KEY_SELECT�KEY_SEND�KEY_SEOL�	KEY_SEXIT�KEY_SF�	KEY_SFIND�	KEY_SHELP�	KEY_SHOME�KEY_SIC�	KEY_SLEFT�KEY_SMESSAGE�	KEY_SMOVE�	KEY_SNEXT�KEY_SOPTIONS�
KEY_SPREVIOUS�
KEY_SPRINT�KEY_SR�	KEY_SREDO�KEY_SREPLACE�
KEY_SRIGHT�
KEY_SRSUME�	KEY_SSAVE�KEY_SSUSPEND�KEY_STAB�	KEY_SUNDO�KEY_SUSPEND�KEY_UNDO�KEY_UPrr�__name__�endwin�L�i�print�initscr�keys�key�system�python�append�keynamerrrr
�<module>sx��


�X��@sNdZddddddddd	d
ddd
ddddgZdd�Zdd
�Zdd
�Zdd�ZdS)z?A package for parsing, handling, and generating email messages.�
base64mime�charset�encoders�errors�
feedparser�	generator�header�	iterators�message�message_from_file�message_from_binary_file�message_from_string�message_from_bytes�mime�parser�
quoprimime�utilscOsddlm}|||��|�S)zvParse a string into a Message object model.

    Optional _class and strict are passed to the Parser constructor.
    ���Parser)�email.parserr�parsestr)�s�args�kwsr�r�$/usr/lib/python3.8/email/__init__.pyr scOsddlm}|||��|�S)z|Parse a bytes string into a Message object model.

    Optional _class and strict are passed to the Parser constructor.
    r��BytesParser)rr�
parsebytes)rrrrrrrr
(scOsddlm}|||��|�S)z�Read a file and parse its contents into a Message object model.

    Optional _class and strict are passed to the Parser constructor.
    rr)rr�parse)�fprrrrrrr
0scOsddlm}|||��|�S)z�Read a binary file and parse its contents into a Message object model.

    Optional _class and strict are passed to the Parser constructor.
    rr)rrr)r rrrrrrr8sN)�__doc__�__all__rr
r
rrrrr�<module>s,�X&�@s�dZddlZddlZddlZddlZddlmZmZddlm	Z	ddddd	d
ddgZ
e�e�d
�j
dd��Zdd�ZGdd�de�Ze�Zdeed�<dd�Zdd	�Zdd�Zdd�Zdd
�Zeed�Zdd�Zeed�Zeed�Zddd�ZdS) z� Routines for manipulating RFC2047 encoded words.

This is currently a package-private API, but will be considered for promotion
to a public API if there is demand.

�N)�
ascii_letters�digits)�errors�decode_q�encode_q�decode_b�encode_b�len_q�len_b�decode�encodes=([a-fA-F0-9]{2})cCst�|�d����S)N�)�bytes�fromhex�groupr)�m�r�*/usr/lib/python3.8/email/_encoded_words.py�<lambda>A�rcCs|�dd�}t|�gfS)N�_� )�replace�_q_byte_subber)�encodedrrrrCsc@s,eZdZde�d�e�d�Zdd�ZdS)�	_QByteMaps-!*+/�asciicCs.||jkrt|�||<nd�|�||<||S)Nz={:02X})�safe�chr�format)�self�keyrrr�__missing__Ms
z_QByteMap.__missing__N)�__name__�
__module__�__qualname__rrrrr"rrrrrIsr�_� cCsd�dd�|D��S)N�css|]}t|VqdS�N)�_q_byte_map��.0�xrrr�	<genexpr>Zszencode_q.<locals>.<genexpr>)�join��bstringrrrrYscCstdd�|D��S)Ncss|]}tt|�VqdSr))�lenr*r+rrrr.]szlen_q.<locals>.<genexpr>)�sumr0rrrr	\scCs�t|�d}|r ddd|�nd}z&tj||dd�|rDt��gngfWStjk
�r�ztj|dd�t��gfWYStjk
r�z,tj|ddd�t��t��gfWYYStjk
r�|t��gfYYYSXYnXYnXdS)N�s===rT)�validateFs==)	r2�base64�	b64decoder�InvalidBase64PaddingDefect�binascii�Error�InvalidBase64CharactersDefect�InvalidBase64LengthDefect)r�pad_err�missing_paddingrrrrds(��
��cCst�|��d�S)Nr)r6�	b64encoderr0rrrr�scCs&tt|�d�\}}|d|r dndS)N�r4r)�divmodr2)r1�groups_of_3�leftoverrrrr
�s)�q�bc	
Cs�|�d�\}}}}}|�d�\}}}|��}|�dd�}t||�\}}z|�|�}Wnvtk
r�|�t�	d�
|���|�|d�}YnBtk
r�|�dd�}|��dkr�|�t�d�
|���YnX||||fS)a�Decode encoded word and return (string, charset, lang, defects) tuple.

    An RFC 2047/2243 encoded word has the form:

        =?charset*lang?cte?encoded_string?=

    where '*lang' may be omitted but the other parts may not be.

    This function expects exactly such a string (that is, it does not check the
    syntax and may raise errors if the string is not well formed), and returns
    the encoded_string decoded first from its Content Transfer Encoding and
    then from the resulting bytes into unicode using the specified charset.  If
    the cte-decoded string does not successfully decode using the specified
    character set, a defect is added to the defects list and the unknown octets
    are replaced by the unicode 'unknown' character \uFDFF.

    The specified charset and language are returned.  The default for language,
    which is rarely if ever encountered, is the empty string.

    �?�*r�surrogateescapez:Encoded word contains bytes not decodable using {} charset�unknown-8bitz<Unknown charset {} in encoded word; decoded as unknown bytes)
�split�	partition�lowerr�
_cte_decodersr�UnicodeError�appendr�UndecodableBytesDefectr�LookupError�CharsetError)	�ewr&�charset�cte�
cte_string�langr1�defects�stringrrrr�s&���utf-8r(cCs||dkr|�dd�}n
|�|�}|dkrTtd|�}td|�}||dkrPdnd}t||�}|rld|}d	�||||�S)
aEncode string using the CTE encoding that produces the shorter result.

    Produces an RFC 2047/2243 encoded word of the form:

        =?charset*lang?cte?encoded_string?=

    where '*lang' is omitted unless the 'lang' parameter is given a value.
    Optional argument charset (defaults to utf-8) specifies the charset to use
    to encode the string to binary before CTE encoding it.  Optional argument
    'encoding' is the cte specifier for the encoding that should be used ('q'
    or 'b'); if it is None (the default) the encoding which produces the
    shortest encoded sequence is used, except that 'q' is preferred if it is up
    to five characters longer.  Optional argument 'lang' (default '') gives the
    RFC 2243 language string to specify in the encoded word.

    rIrrHNrDrE�rGz=?{}{}?{}?{}?=)r�_cte_encode_length�
_cte_encodersr)rYrT�encodingrWr1�qlen�blenrrrrr�s
)rZNr()�__doc__�rer6r9�	functoolsrYrr�emailr�__all__�partial�compile�subrr�dictrr*�ordrr	rrr
rMrr]r\rrrrr�<module>sL)��&�+��X-8�	@s�dZddlZddlZddlZddlmZddlmZddlm	Z
ddlmZddlmZe
d�Zee
d	�BZe
d
�ZeeBZee
d�Zee
d�Zee
d
�Be
d�ZeeBZee
d�BZeeBZee
d�Zdd�Ze�dejejB�ZGdd�de�ZGdd�de�Z Gdd�de�Z!Gdd�de�Z"Gdd�de�Z#Gdd�de �Z$Gdd �d e�Z%Gd!d"�d"e�Z&Gd#d$�d$e�Z'Gd%d&�d&e�Z(Gd'd(�d(e(�Z)Gd)d*�d*e �Z*Gd+d,�d,e�Z+Gd-d.�d.e�Z,Gd/d0�d0e�Z-Gd1d2�d2e�Z.Gd3d4�d4e�Z/Gd5d6�d6e�Z0Gd7d8�d8e�Z1Gd9d:�d:e�Z2Gd;d<�d<e�Z3Gd=d>�d>e�Z4Gd?d@�d@e�Z5GdAdB�dBe�Z6GdCdD�dDe�Z7GdEdF�dFe�Z8GdGdH�dHe�Z9GdIdJ�dJe�Z:GdKdL�dLe"�Z;GdMdN�dNe�Z<GdOdP�dPe�Z=GdQdR�dRe�Z>GdSdT�dTe�Z?GdUdV�dVe?�Z@GdWdX�dXe�ZAGdYdZ�dZe�ZBGd[d\�d\e�ZCGd]d^�d^e�ZDGd_d`�d`e�ZEGdadb�dbeE�ZFGdcdd�ddeE�ZGGdedf�dfe�ZHGdgdh�dhe�ZIGdidj�dje�ZJGdkdl�dleJ�ZKGdmdn�dneK�ZLGdodp�dpe�ZMGdqdr�dreN�ZOGdsdt�dteO�ZPGdudv�dveO�ZQGdwdx�dxeP�ZRGdydz�dzejS�ZTeQdd{�ZUeQd|d}�ZVeQd~d�ZWe�d��Xd��Ye���jZZ[e�d��Xe�\d��Ye����j]Z^e�d��j_Z`e�d��Xe�\d��Ye����j]Zae�d��Xe�\d��Ye����j]Zbe�d��Xe�\d��Ye����j]Zcd�d��Zdd�d��Zed�d��Zfd�d��Zgd�d��Zhd�d��Zid�d��Zjd�d��Zkd�d��Zld�d��Zmd�d��Znd�d��Zod�d��Zpd�d��Zqd�d��Zrd�d��Zsd�d��Ztd�d��Zud�d��Zvd�d��Zwd�d��Zxd�d��Zyd�d��Zzd�d��Z{d�d��Z|d�d��Z}d�d��Z~d�d��Zd�d��Z�d�d��Z�d�d��Z�d�dÄZ�d�dńZ�d�dDŽZ�d�dɄZ�d�d˄Z�d�d̈́Z�d�dτZ�d�dфZ�d�dӄZ�d�dՄZ�d�dׄZ�d�dلZ�d�dۄZ�d�d݄Z�d�d߄Z�d�d�Z�d�d�Z�d�d�Z�d�d�Z�d�d�Z�d�d�Z�d�d�Z�d�d�Z�d�d�Z�d�d�Z�d�d��Z�d�d��Z�dS)�alHeader value parser implementing various email-related RFC parsing rules.

The parsing methods defined in this module implement various email related
parsing rules.  Principal among them is RFC 5322, which is the followon
to RFC 2822 and primarily a clarification of the former.  It also implements
RFC 2047 encoded word decoding.

RFC 5322 goes to considerable trouble to maintain backward compatibility with
RFC 822 in the parse phase, while cleaning up the structure on the generation
phase.  This parser supports correct RFC 5322 generation by tagging white space
as folding white space only when folding is allowed in the non-obsolete rule
sets.  Actually, the parser is even more generous when accepting input than RFC
5322 mandates, following the spirit of Postel's Law, which RFC 5322 encourages.
Where possible deviations from the standard are annotated on the 'defects'
attribute of tokens that deviate.

The general structure of the parser follows RFC 5322, and uses its terminology
where there is a direct correspondence.  Where the implementation requires a
somewhat different structure than that used by the formal grammar, new terms
that mimic the closest existing terms are used.  Thus, it really helps to have
a copy of RFC 5322 handy when studying this code.

Input to the parser is a string that has already been unfolded according to
RFC 5322 rules.  According to the RFC this unfolding is the very first step, and
this parser leaves the unfolding step to a higher level message parser, which
will have already detected the line breaks that need unfolding while
determining the beginning and end of each header.

The output of the parser is a TokenList object, which is a list subclass.  A
TokenList is a recursive data structure.  The terminal nodes of the structure
are Terminal objects, which are subclasses of str.  These do not correspond
directly to terminal objects in the formal grammar, but are instead more
practical higher level combinations of true terminals.

All TokenList and Terminal objects have a 'value' attribute, which produces the
semantically meaningful value of that part of the parse subtree.  The value of
all whitespace tokens (no matter how many sub-tokens they may contain) is a
single space, as per the RFC rules.  This includes 'CFWS', which is herein
included in the general class of whitespace tokens.  There is one exception to
the rule that whitespace tokens are collapsed into single spaces in values: in
the value of a 'bare-quoted-string' (a quoted-string with no leading or
trailing whitespace), any whitespace that appeared between the quotation marks
is preserved in the returned value.  Note that in all Terminal strings quoted
pairs are turned into their unquoted values.

All TokenList and Terminal objects also have a string value, which attempts to
be a "canonical" representation of the RFC-compliant form of the substring that
produced the parsed subtree, including minimal use of quoted pair quoting.
Whitespace runs are not collapsed.

Comment tokens also have a 'content' attribute providing the string found
between the parens (including any nested comments) with whitespace preserved.

All TokenList and Terminal objects have a 'defects' attribute which is a
possibly empty list all of the defects found while creating the token.  Defects
may appear on any token in the tree, and a composite list of all defects in the
subtree is available through the 'all_defects' attribute of any node.  (For
Terminal notes x.defects == x.all_defects.)

Each object in a parse tree is called a 'token', and each has a 'token_type'
attribute that gives the name from the RFC 5322 grammar that it represents.
Not all RFC 5322 nodes are produced, and there is one non-RFC 5322 node that
may be produced: 'ptext'.  A 'ptext' is a string of printable ascii characters.
It is returned in place of lists of (ctext/quoted-pair) and
(qtext/quoted-pair).

XXX: provide complete list of token types.
�N)�	hexdigits)�
itemgetter)�_encoded_words)�errors)�utilsz 	�(z
()<>@,:;.\"[]�.z."(z/?=z*'%�%cCs dt|��dd��dd�dS)N�"�\�\\z\")�str�replace��value�r�0/usr/lib/python3.8/email/_header_value_parser.py�quote_string`srz�
   =\?            # literal =?
   [^?]*          # charset
   \?             # literal ?
   [qQbB]         # literal 'q' or 'b', case insensitive
   \?             # literal ?
  .*?             # encoded word
  \?=             # literal ?=
cs�eZdZdZdZdZ�fdd�Zdd�Z�fdd�Ze	d	d
��Z
e	dd��Zd
d�Ze	dd��Z
e	dd��Zdd�Zddd�Zddd�Zddd�Z�ZS)�	TokenListNTcst�j||�g|_dS�N)�super�__init__�defects)�self�args�kw��	__class__rrryszTokenList.__init__cCsd�dd�|D��S)N�css|]}t|�VqdSr�r
��.0�xrrr�	<genexpr>~sz$TokenList.__str__.<locals>.<genexpr>��join�rrrr�__str__}szTokenList.__str__csd�|jjt����S�Nz{}({})��formatr�__name__r�__repr__r&rrrr,�s
�zTokenList.__repr__cCsd�dd�|D��S)Nrcss|]}|jr|jVqdSrrr rrrr#�sz"TokenList.value.<locals>.<genexpr>r$r&rrrr�szTokenList.valuecCstdd�|D�|j�S)Ncss|]}|jVqdSr)�all_defectsr rrrr#�sz(TokenList.all_defects.<locals>.<genexpr>)�sumrr&rrrr-�szTokenList.all_defectscCs|d��S�Nr)�startswith_fwsr&rrrr0�szTokenList.startswith_fwscCstdd�|D��S)zATrue if all top level tokens of this part may be RFC2047 encoded.css|]}|jVqdSr)�
as_ew_allowed)r!�partrrrr#�sz*TokenList.as_ew_allowed.<locals>.<genexpr>)�allr&rrrr1�szTokenList.as_ew_allowedcCsg}|D]}|�|j�q|Sr)�extend�comments)rr5�tokenrrrr5�szTokenList.commentscCst||d�S)N��policy)�_refold_parse_tree�rr8rrr�fold�szTokenList.foldrcCst|j|d��dS)N��indent)�print�ppstr�rr=rrr�pprint�szTokenList.pprintcCsd�|j|d��S)N�
r<)r%�_ppr@rrrr?�szTokenList.ppstrccszd�||jj|j�V|D]4}t|d�s:|d�|�Vq|�|d�EdHq|jrdd�|j�}nd}d�||�VdS)Nz{}{}/{}(rCz*    !! invalid element in token list: {!r}z    z Defects: {}rz{}){})r*rr+�
token_type�hasattrrCr)rr=r6�extrarrrrC�s�
�
z
TokenList._pp)r)r)r)r+�
__module__�__qualname__rD�syntactic_break�ew_combine_allowedrr'r,�propertyrr-r0r1r5r;rAr?rC�
__classcell__rrrrrss&





rc@s$eZdZedd��Zedd��ZdS)�WhiteSpaceTokenListcCsdS�N� rr&rrrr�szWhiteSpaceTokenList.valuecCsdd�|D�S)NcSsg|]}|jdkr|j�qS)�comment)rD�contentr rrr�
<listcomp>�s
z0WhiteSpaceTokenList.comments.<locals>.<listcomp>rr&rrrr5�szWhiteSpaceTokenList.commentsN)r+rGrHrKrr5rrrrrM�s
rMc@seZdZdZdS)�UnstructuredTokenList�unstructuredN�r+rGrHrDrrrrrS�srSc@seZdZdZdS)�Phrase�phraseNrUrrrrrV�srVc@seZdZdZdS)�Word�wordNrUrrrrrX�srXc@seZdZdZdS)�CFWSList�cfwsNrUrrrrrZ�srZc@seZdZdZdS)�Atom�atomNrUrrrrr\�sr\c@seZdZdZdZdS)�Tokenr6FN)r+rGrHrD�encode_as_ewrrrrr^�sr^c@seZdZdZdZdZdZdS)�EncodedWord�encoded-wordN)r+rGrHrD�cte�charset�langrrrrr`�sr`c@s4eZdZdZedd��Zedd��Zedd��ZdS)	�QuotedString�
quoted-stringcCs"|D]}|jdkr|jSqdS�N�bare-quoted-string�rDr�rr"rrrrQ�s
zQuotedString.contentcCs>g}|D]*}|jdkr&|�t|��q|�|j�qd�|�S)Nrhr)rD�appendr
rr%)r�resr"rrr�quoted_value�s
zQuotedString.quoted_valuecCs"|D]}|jdkr|jSqdSrgri�rr6rrr�stripped_value�s
zQuotedString.stripped_valueN)r+rGrHrDrKrQrmrorrrrre�s

	rec@s$eZdZdZdd�Zedd��ZdS)�BareQuotedStringrhcCstd�dd�|D���S)Nrcss|]}t|�VqdSrrr rrrr#sz+BareQuotedString.__str__.<locals>.<genexpr>)rr%r&rrrr'�szBareQuotedString.__str__cCsd�dd�|D��S)Nrcss|]}t|�VqdSrrr rrrr#sz)BareQuotedString.value.<locals>.<genexpr>r$r&rrrrszBareQuotedString.valueN)r+rGrHrDr'rKrrrrrrp�srpc@s8eZdZdZdd�Zdd�Zedd��Zedd	��Zd
S)�CommentrPcs(d�tdg�fdd��D�dggg��S)Nrrcsg|]}��|��qSr)�quoter r&rrrRsz#Comment.__str__.<locals>.<listcomp>�))r%r.r&rr&rr's��zComment.__str__cCs2|jdkrt|�St|��dd��dd��dd�S)NrPrrrz\(rsz\))rDr
r)rrrrrrrs
��z
Comment.quotecCsd�dd�|D��S)Nrcss|]}t|�VqdSrrr rrrr#sz"Comment.content.<locals>.<genexpr>r$r&rrrrQszComment.contentcCs|jgSr)rQr&rrrr5szComment.commentsN)	r+rGrHrDr'rrrKrQr5rrrrrqs
rqc@s4eZdZdZedd��Zedd��Zedd��ZdS)	�AddressListzaddress-listcCsdd�|D�S)NcSsg|]}|jdkr|�qS)�address�rDr rrrrR's
z)AddressList.addresses.<locals>.<listcomp>rr&rrr�	addresses%szAddressList.addressescCstdd�|D�g�S)Ncss|]}|jdkr|jVqdS�ruN�rD�	mailboxesr rrrr#+s
�z(AddressList.mailboxes.<locals>.<genexpr>�r.r&rrrrz)s
��zAddressList.mailboxescCstdd�|D�g�S)Ncss|]}|jdkr|jVqdSrx�rD�
all_mailboxesr rrrr#0s
�z,AddressList.all_mailboxes.<locals>.<genexpr>r{r&rrrr}.s
��zAddressList.all_mailboxesN)r+rGrHrDrKrwrzr}rrrrrt!s

rtc@s4eZdZdZedd��Zedd��Zedd��ZdS)	�AddressrucCs|djdkr|djSdS)Nr�group�rD�display_namer&rrrr�8szAddress.display_namecCs4|djdkr|dgS|djdkr*gS|djS�Nr�mailbox�invalid-mailboxryr&rrrrz=s

zAddress.mailboxescCs:|djdkr|dgS|djdkr0|dgS|djSr�r|r&rrrr}Es


zAddress.all_mailboxesN)r+rGrHrDrKr�rzr}rrrrr~4s

r~c@s(eZdZdZedd��Zedd��ZdS)�MailboxList�mailbox-listcCsdd�|D�S)NcSsg|]}|jdkr|�qS)r�rvr rrrrRSs
z)MailboxList.mailboxes.<locals>.<listcomp>rr&rrrrzQszMailboxList.mailboxescCsdd�|D�S)NcSsg|]}|jdkr|�qS))r�r�rvr rrrrRWs
�z-MailboxList.all_mailboxes.<locals>.<listcomp>rr&rrrr}UszMailboxList.all_mailboxesN�r+rGrHrDrKrzr}rrrrr�Ms

r�c@s(eZdZdZedd��Zedd��ZdS)�	GroupList�
group-listcCs |r|djdkrgS|djS�Nrr�ryr&rrrrz_szGroupList.mailboxescCs |r|djdkrgS|djSr�r|r&rrrr}eszGroupList.all_mailboxesNr�rrrrr�[s

r�c@s4eZdZdZedd��Zedd��Zedd��ZdS)	�GrouprcCs|djdkrgS|djS�N�r�ryr&rrrrzpszGroup.mailboxescCs|djdkrgS|djSr�r|r&rrrr}vszGroup.all_mailboxescCs
|djSr/)r�r&rrrr�|szGroup.display_nameN)r+rGrHrDrKrzr}r�rrrrr�ls

r�c@sLeZdZdZedd��Zedd��Zedd��Zedd	��Zed
d��Z	dS)
�NameAddr�	name-addrcCst|�dkrdS|djS�N�r)�lenr�r&rrrr��szNameAddr.display_namecCs
|djS�N�����
local_partr&rrrr��szNameAddr.local_partcCs
|djSr���domainr&rrrr��szNameAddr.domaincCs
|djSr�)�router&rrrr��szNameAddr.routecCs
|djSr���	addr_specr&rrrr��szNameAddr.addr_specN�
r+rGrHrDrKr�r�r�r�r�rrrrr��s



r�c@s@eZdZdZedd��Zedd��Zedd��Zedd	��Zd
S)�	AngleAddrz
angle-addrcCs"|D]}|jdkr|jSqdS�N�	addr-spec)rDr�rjrrrr��s
zAngleAddr.local_partcCs"|D]}|jdkr|jSqdSr��rDr�rjrrrr��s
zAngleAddr.domaincCs"|D]}|jdkr|jSqdS)N�	obs-route)rD�domainsrjrrrr��s
zAngleAddr.routecCs<|D]2}|jdkr|jr"|jSt|j�|jSqdS)Nr�z<>)rDr�r�rrjrrrr��s

zAngleAddr.addr_specN)	r+rGrHrDrKr�r�r�r�rrrrr��s


r�c@seZdZdZedd��ZdS)�ObsRouter�cCsdd�|D�S)NcSsg|]}|jdkr|j�qSr�r�r rrrrR�s
z$ObsRoute.domains.<locals>.<listcomp>rr&rrrr��szObsRoute.domainsN)r+rGrHrDrKr�rrrrr��sr�c@sLeZdZdZedd��Zedd��Zedd��Zedd	��Zed
d��Z	dS)
�Mailboxr�cCs|djdkr|djSdS�Nrr�r�r&rrrr��szMailbox.display_namecCs
|djSr/r�r&rrrr��szMailbox.local_partcCs
|djSr/r�r&rrrr��szMailbox.domaincCs|djdkr|djSdSr�)rDr�r&rrrr��sz
Mailbox.routecCs
|djSr/r�r&rrrr��szMailbox.addr_specNr�rrrrr��s



r�c@s,eZdZdZedd��ZeZZZZ	dS)�InvalidMailboxr�cCsdSrrr&rrrr��szInvalidMailbox.display_nameNr�rrrrr��s
r�cs(eZdZdZdZe�fdd��Z�ZS)�Domainr�Fcsd�t�j���S�Nr�r%rr�splitr&rrrr��sz
Domain.domain)r+rGrHrDr1rKr�rLrrrrr��sr�c@seZdZdZdS)�DotAtom�dot-atomNrUrrrrr��sr�c@seZdZdZdZdS)�DotAtomTextz
dot-atom-textTN�r+rGrHrDr1rrrrr��sr�c@seZdZdZdZdS)�
NoFoldLiteralzno-fold-literalFNr�rrrrr�sr�c@sDeZdZdZdZedd��Zedd��Zedd��Zed	d
��Z	dS)�AddrSpecr�FcCs
|djSr/r�r&rrrr�
szAddrSpec.local_partcCst|�dkrdS|djS)N�r�)r�r�r&rrrr�szAddrSpec.domaincCs<t|�dkr|djS|dj��|dj|dj��S)Nr�rr�r�)r�r�rstrip�lstripr&rrrrs
zAddrSpec.valuecCsLt|j�}t|�t|t�kr*t|j�}n|j}|jdk	rH|d|jS|S)N�@)�setr�r��
DOT_ATOM_ENDSrr�)r�nameset�lprrrr�s

zAddrSpec.addr_specN)
r+rGrHrDr1rKr�r�rr�rrrrr�s


r�c@seZdZdZdZdS)�ObsLocalPartzobs-local-partFNr�rrrrr�&sr�cs4eZdZdZdZedd��Ze�fdd��Z�ZS)�DisplayNamezdisplay-nameFcCs�t|�}t|�dkr|jS|djdkr4|�d�n*|ddjdkr^t|ddd��|d<|djdkrv|��n*|ddjdkr�t|ddd��|d<|jS)Nrr[r�r�)rr�rrD�pop)rrlrrrr�1s
zDisplayName.display_namecs�d}|jrd}n|D]}|jdkrd}qt|�dkr�|r�d}}|djdks`|ddjdkrdd}|djdks�|ddjdkr�d}|t|j�|St�jSdS)	NFTrfrrr[rOr�)rrDr�rr�rr)rrrr"�pre�postrrrrBs
  zDisplayName.value)	r+rGrHrDrJrKr�rrLrrrrr�,s
r�c@s,eZdZdZdZedd��Zedd��ZdS)�	LocalPartz
local-partFcCs&|djdkr|djS|djSdS)Nrrf)rDrmrr&rrrr[s
zLocalPart.valuecCs�tg}t}d}|dtgD]�}|jdkr,q|r\|jdkr\|djdkr\t|dd��|d<t|t�}|r�|jdkr�|djdkr�|�t|dd���n
|�|�|d}|}qt|dd��}|jS)NFrr[�dotr�r�)�DOTrDr�
isinstancerkr)rrl�last�
last_is_tl�tok�is_tlrrrr�bs(
�
�
zLocalPart.local_partN)r+rGrHrDr1rKrr�rrrrr�Vs
r�cs4eZdZdZdZe�fdd��Zedd��Z�ZS)�
DomainLiteralzdomain-literalFcsd�t�j���Sr�r�r&rrrr�szDomainLiteral.domaincCs"|D]}|jdkr|jSqdS)N�ptextrirjrrr�ip�s
zDomainLiteral.ip)	r+rGrHrDr1rKr�r�rLrrrrr�zsr�c@seZdZdZdZdZdS)�MIMEVersionzmime-versionN)r+rGrHrD�major�minorrrrrr��sr�c@s4eZdZdZdZdZdZedd��Zedd��Z	dS)	�	Parameter�	parameterF�us-asciicCs|jr|djSdSr�)�	sectioned�numberr&rrr�section_number�szParameter.section_numbercCsf|D]\}|jdkr|jS|jdkr|D]4}|jdkr*|D] }|jdkr<|jSq<q*qdS)Nrrfrhr)rDrornrrr�param_value�s




zParameter.param_valueN)
r+rGrHrDr��extendedrcrKr�r�rrrrr��s
r�c@seZdZdZdS)�InvalidParameter�invalid-parameterNrUrrrrr��sr�c@seZdZdZedd��ZdS)�	Attribute�	attributecCs$|D]}|j�d�r|jSqdS)N�attrtext)rD�endswithrrnrrrro�szAttribute.stripped_valueN�r+rGrHrDrKrorrrrr��sr�c@seZdZdZdZdS)�Section�sectionN)r+rGrHrDr�rrrrr��sr�c@seZdZdZedd��ZdS)�ValuercCs2|d}|jdkr|d}|j�d�r,|jS|jS)Nrr[r�)rfr�zextended-attribute)rDr�rorrnrrrro�s
�zValue.stripped_valueNr�rrrrr��sr�c@s(eZdZdZdZedd��Zdd�ZdS)�MimeParameters�mime-parametersFc
cs�i}|D]T}|j�d�sq|djdkr*q|dj��}||krHg||<||�|j|f�q|��D�]~\}}t|td�d�}|dd}|j	}|j
s�t|�dkr�|dddkr�|ddj�t
�d��|dd�}g}d}|D]�\}	}
|	|k�r(|
j
�s|
j�t
�d��q�n|
j�t
�d��|d7}|
j}|
j
�r�ztj�|�}Wn&tk
�rttjj|d	d
�}YnRXz|�|d�}Wn"tk
�r�|�dd�}YnXt�|��r�|
j�t
���|�|�q�d
�|�}||fVqfdS)Nr�rr�)�keyr�z.duplicate parameter name; duplicate(s) ignoredz+duplicate parameter name; duplicate ignoredz(inconsistent RFC2231 parameter numberingzlatin-1)�encoding�surrogateescaper�r)rDr�r�striprkr��items�sortedrrcr�r�rr�InvalidHeaderDefectr��urllib�parse�unquote_to_bytes�UnicodeEncodeError�unquote�decode�LookupErrorr�_has_surrogates�UndecodableBytesDefectr%)r�paramsr6�name�parts�first_paramrc�value_parts�ir��paramrrrrr��s`�

�
�
zMimeParameters.paramscCsTg}|jD].\}}|r.|�d�|t|���q
|�|�q
d�|�}|rPd|SdS)N�{}={}z; rOr)r�rkr*rr%)rr�r�rrrrr's
zMimeParameters.__str__N)r+rGrHrDrIrKr�r'rrrrr��s

Er�c@seZdZdZedd��ZdS)�ParameterizedHeaderValueFcCs&t|�D]}|jdkr|jSqiS)Nr�)�reversedrDr�rnrrrr�-s
zParameterizedHeaderValue.paramsN)r+rGrHrIrKr�rrrrr�'sr�c@seZdZdZdZdZdZdS)�ContentTypezcontent-typeF�text�plainN)r+rGrHrDr1�maintype�subtyperrrrr�5sr�c@seZdZdZdZdZdS)�ContentDispositionzcontent-dispositionFN)r+rGrHrDr1�content_dispositionrrrrr�<sr�c@seZdZdZdZdZdS)�ContentTransferEncodingzcontent-transfer-encodingF�7bitN)r+rGrHrDr1rbrrrrrBsrc@seZdZdZdZdS)�HeaderLabelzheader-labelFNr�rrrrrHsrc@seZdZdZdZdd�ZdS)�MsgIDzmsg-idFcCst|�|jSr)r
�linesepr:rrrr;Qsz
MsgID.foldN)r+rGrHrDr1r;rrrrrMsrc@seZdZdZdS)�	MessageIDz
message-idNrUrrrrrVsrc@seZdZdZdS)�InvalidMessageIDzinvalid-message-idNrUrrrrrZsrc@seZdZdZdS)�Header�headerNrUrrrrr^srcsreZdZdZdZdZ�fdd�Z�fdd�Zdd�Ze	dd	��Z
d�fdd�	Zd
d�Ze	dd��Z
dd�Z�ZS)�TerminalTcst��||�}||_g|_|Sr)r�__new__rDr)�clsrrDrrrrrlszTerminal.__new__csd�|jjt����Sr(r)r&rrrr,rszTerminal.__repr__cCst|jjd|j�dS)N�/)r>rr+rDr&rrrrAuszTerminal.pprintcCs
t|j�Sr)�listrr&rrrr-xszTerminal.all_defectsrc	s2d�||jj|jt���|js"dn
d�|j��gS)Nz
{}{}/{}({}){}rz {})r*rr+rDrr,rr@rrrrC|s�zTerminal._ppcCsdSrrr&rrr�pop_trailing_ws�szTerminal.pop_trailing_wscCsgSrrr&rrrr5�szTerminal.commentscCst|�|jfSr)r
rDr&rrr�__getnewargs__�szTerminal.__getnewargs__)r)r+rGrHr1rJrIrr,rArKr-rCrr5rrLrrrrr
fs
	
r
c@s eZdZedd��Zdd�ZdS)�WhiteSpaceTerminalcCsdSrNrr&rrrr�szWhiteSpaceTerminal.valuecCsdS)NTrr&rrrr0�sz!WhiteSpaceTerminal.startswith_fwsN�r+rGrHrKrr0rrrrr�s
rc@s eZdZedd��Zdd�ZdS)�
ValueTerminalcCs|Srrr&rrrr�szValueTerminal.valuecCsdS)NFrr&rrrr0�szValueTerminal.startswith_fwsNrrrrrr�s
rc@s eZdZedd��Zdd�ZdS)�EWWhiteSpaceTerminalcCsdSr�rr&rrrr�szEWWhiteSpaceTerminal.valuecCsdSr�rr&rrrr'�szEWWhiteSpaceTerminal.__str__N)r+rGrHrKrr'rrrrr�s
rc@seZdZdZdS)�_InvalidEwErrorz1Invalid encoded word found while parsing headers.N)r+rGrH�__doc__rrrrr�srr��,�list-separatorr�zroute-component-markerz([{}]+)rz[^{}]+z[\x00-\x20\x7F]cCs>t|�}|r|j�t�|��t�|�r:|j�t�d��dS)z@If input token contains ASCII non-printables, register a defect.z*Non-ASCII characters found in header tokenN)�_non_printable_finderrrkr�NonPrintableDefectrr�r�)�xtext�non_printablesrrr�_validate_xtext�s

�rcCs�t|d�^}}g}d}d}tt|��D]L}||dkrJ|rDd}d}nd}q&|rTd}n|||krdq||�||�q&|d}d�|�d�||d�g|�|fS)akScan printables/quoted-pairs until endchars and return unquoted ptext.

    This function turns a run of qcontent, ccontent-without-comments, or
    dtext-with-quoted-printables into a single string by unquoting any
    quoted printables.  It returns the string, the remaining value, and
    a flag that is True iff there were any quoted printables decoded.

    r�FrTrN)�
_wsp_splitter�ranger�rkr%)r�endchars�fragment�	remainder�vchars�escape�had_qp�posrrr�_get_ptext_to_endchars�s$	r'cCs.|��}t|dt|�t|��d�}||fS)z�FWS = 1*WSP

    This isn't the RFC definition.  We're using fws to represent tokens where
    folding can be done, but when we are parsing the *un*folding has already
    been done so we don't need to watch out for CRLF.

    N�fws)r�rr�)r�newvaluer(rrr�get_fwssr*c
	Cs�t�}|�d�s t�d�|���|dd��dd�^}}||dd�krXt�d�|���d�|�}t|�dkr�|dtkr�|dtkr�|�	d	�dkr�|�dd�^}}|d|}t|���dkr�|j
�t�d
��||_
d�|�}zt�d|d�\}}}}	Wn*ttfk
�r*td�|j
���YnX||_||_|j
�|	�|�r�|dtk�rrt|�\}
}|�|
��qDt|d�^}}t|d�}t|�|�|�d�|�}�qD|�r�|dtk�r�|j
�t�d
��||fS)zE encoded-word = "=?" charset "?" encoding "?" encoded-text "?="

    �=?z"expected encoded word but found {}r�Nz?=r�rr�?zwhitespace inside encoded wordz!encoded word format invalid: '{}'�vtextz.missing trailing whitespace after encoded-word)r`�
startswithr�HeaderParseErrorr*r�r%r�r�countrrkr�rb�_ewr��
ValueError�KeyErrorrrcrdr4�WSPr*rrr)
r�ewr�r"�remstr�restr�rcrdrr6�charsr-rrr�get_encoded_wordsd
��

�
��
�

�




�r9cCsFt�}|�rB|dtkr0t|�\}}|�|�qd}|�d�r�zt|�\}}Wn,tk
rfd}Yn�tjk
rzYnrXd}t	|�dkr�|dj
dkr�|j�t�d��d}|r�t	|�dkr�|d	j
d
kr�t
|dd�|d<|�|�qt|d�^}}|�rt�|��r|�d�^}}t|d�}t|�|�|�d�|�}q|S)
aOunstructured = (*([FWS] vchar) *WSP) / obs-unstruct
       obs-unstruct = *((*LF *CR *(obs-utext) *LF *CR)) / FWS)
       obs-utext = %d0 / obs-NO-WS-CTL / LF / CR

       obs-NO-WS-CTL is control characters except WSP/CR/LF.

    So, basically, we have printable runs, plus control characters or nulls in
    the obsolete syntax, separated by whitespace.  Since RFC 2047 uses the
    obsolete syntax in its specification, but requires whitespace on either
    side of the encoded words, I can see no reason to need to separate the
    non-printable-non-whitespace from the printable runs if they occur, so we
    parse this into xtext tokens separated by WSP tokens.

    Because an 'unstructured' value must by definition constitute the entire
    value, this 'get' routine does not return a remaining value, only the
    parsed TokenList.

    rTr+Fr�r(z&missing whitespace before encoded wordr����rar-r)rSr4r*rkr.r9rrr/r�rDrr�rr�rfc2047_matcher�search�	partitionrrr%)rrTr6�valid_ew�have_wsr�r"r-rrr�get_unstructured?sJ


��


r@cCs*t|d�\}}}t|d�}t|�||fS)actext = <printable ascii except \ ( )>

    This is not the RFC ctext, since we are handling nested comments in comment
    and unquoting quoted-pairs here.  We allow anything except the '()'
    characters, but if we find any ASCII other than the RFC defined printable
    ASCII, a NonPrintableDefect is added to the token's defects list.  Since
    quoted pairs are converted to their unquoted values, what is returned is
    a 'ptext' token.  In this case it is a WhiteSpaceTerminal, so it's value
    is ' '.

    z()r�)r'rr�rr��_rrr�get_qp_ctext�s
rCcCs*t|d�\}}}t|d�}t|�||fS)aoqcontent = qtext / quoted-pair

    We allow anything except the DQUOTE character, but if we find any ASCII
    other than the RFC defined printable ASCII, a NonPrintableDefect is
    added to the token's defects list.  Any quoted pairs are converted to their
    unquoted values, so what is returned is a 'ptext' token.  In this case it
    is a ValueTerminal.

    r
r�)r'rrrArrr�get_qcontent�s

rDcCsNt|�}|st�d�|���|��}|t|�d�}t|d�}t|�||fS)z�atext = <matches _atext_matcher>

    We allow any non-ATOM_ENDS in atext, but add an InvalidATextDefect to
    the token's defects list if we find non-atext characters.
    zexpected atext but found '{}'N�atext)�_non_atom_end_matcherrr/r*rr�rr)r�mrErrr�	get_atext�s�
rHcCsr|ddkrt�d�|���t�}|dd�}|rT|ddkrTt|�\}}|�|�|�rB|ddk�rB|dtkr�t|�\}}n�|dd�dk�r*d}z&t|�\}}|j	�t�
d	��d
}Wn"tjk
r�t|�\}}YnX|�r6t|�dk�r6|djdk�r6|d
jdk�r6t
|dd�|d<nt|�\}}|�|�qT|�sb|j	�t�
d��||fS||dd�fS)z�bare-quoted-string = DQUOTE *([FWS] qcontent) [FWS] DQUOTE

    A quoted-string without the leading or trailing white space.  Its
    value is the text between the quote marks, with whitespace
    preserved and quoted pairs decoded.
    rr
zexpected '"' but found '{}'r�Nr�r+Fz!encoded word inside quoted stringTr�r(r:raz"end of header inside quoted string)rr/r*rprDrkr4r*r9rr�r�rDr)r�bare_quoted_stringr6r>rrr�get_bare_quoted_string�sL�

���

�rJcCs�|r |ddkr t�d�|���t�}|dd�}|r�|ddkr�|dtkr\t|�\}}n&|ddkrvt|�\}}nt|�\}}|�|�q2|s�|j	�t�
d��||fS||dd�fS)z�comment = "(" *([FWS] ccontent) [FWS] ")"
       ccontent = ctext / quoted-pair / comment

    We handle nested comments here, and quoted-pair in our qp-ctext routine.
    rrzexpected '(' but found '{}'r�Nrszend of header inside comment)rr/r*rqr4r*�get_commentrCrkrr�)rrPr6rrrrK�s&�
�rKcCsPt�}|rH|dtkrH|dtkr0t|�\}}nt|�\}}|�|�q||fS)z,CFWS = (1*([FWS] comment) [FWS]) / FWS

    r)rZ�CFWS_LEADERr4r*rKrk)rr[r6rrr�get_cfws�srMcCspt�}|r,|dtkr,t|�\}}|�|�t|�\}}|�|�|rh|dtkrht|�\}}|�|�||fS)z�quoted-string = [CFWS] <bare-quoted-string> [CFWS]

    'bare-quoted-string' is an intermediate class defined by this
    parser and not by the RFC grammar.  It is the quoted string
    without any attached CFWS.
    r)rerLrMrkrJ)r�
quoted_stringr6rrr�get_quoted_strings


rOcCs�t�}|r,|dtkr,t|�\}}|�|�|rL|dtkrLt�d�|���|�d�r�zt	|�\}}Wq�tjk
r�t
|�\}}Yq�Xnt
|�\}}|�|�|r�|dtkr�t|�\}}|�|�||fS)zPatom = [CFWS] 1*atext [CFWS]

    An atom could be an rfc2047 encoded word.
    rzexpected atom but found '{}'r+)r\rLrMrk�	ATOM_ENDSrr/r*r.r9rH)rr]r6rrr�get_atoms&
�


rQcCs�t�}|r|dtkr&t�d�|���|rt|dtkrtt|�\}}|�|�|r&|ddkr&|�t�|dd�}q&|dtkr�t�d�d|���||fS)z( dot-text = 1*atext *("." 1*atext)

    rz8expected atom at a start of dot-atom-text but found '{}'rr�Nr�z4expected atom at end of dot-atom-text but found '{}')r�rPrr/r*rHrkr�)r�
dot_atom_textr6rrr�get_dot_atom_text0s �

�rScCs�t�}|dtkr(t|�\}}|�|�|�d�rhzt|�\}}Wqttjk
rdt|�\}}YqtXnt|�\}}|�|�|r�|dtkr�t|�\}}|�|�||fS)z� dot-atom = [CFWS] dot-atom-text [CFWS]

    Any place we can have a dot atom, we could instead have an rfc2047 encoded
    word.
    rr+)	r�rLrMrkr.r9rr/rS)r�dot_atomr6rrr�get_dot_atomCs



rUcCs�|dtkrt|�\}}nd}|s,t�d��|ddkrFt|�\}}n*|dtkrdt�d�|���nt|�\}}|dk	r�|g|dd�<||fS)a�word = atom / quoted-string

    Either atom or quoted-string may start with CFWS.  We have to peel off this
    CFWS first to determine which type of word to parse.  Afterward we splice
    the leading CFWS, if any, into the parsed sub-token.

    If neither an atom or a quoted-string is found before the next special, a
    HeaderParseError is raised.

    The token returned is either an Atom or a QuotedString, as appropriate.
    This means the 'word' level of the formal grammar is not represented in the
    parse tree; this is because having that extra layer when manipulating the
    parse tree is more confusing than it is helpful.

    rNz5Expected 'atom' or 'quoted-string' but found nothing.r
z1Expected 'atom' or 'quoted-string' but found '{}')rLrMrr/rO�SPECIALSr*rQ)r�leaderr6rrr�get_word\s"��rXcCs�t�}zt|�\}}|�|�Wn(tjk
rH|j�t�d��YnX|r�|dtkr�|ddkr�|�t�|j�t�	d��|dd�}qJzt|�\}}WnDtjk
r�|dt
kr�t|�\}}|j�t�	d��n�YnX|�|�qJ||fS)a� phrase = 1*word / obs-phrase
        obs-phrase = word *(word / "." / CFWS)

    This means a phrase can be a sequence of words, periods, and CFWS in any
    order as long as it starts with at least one word.  If anything other than
    words is detected, an ObsoleteHeaderDefect is added to the token's defect
    list.  We also accept a phrase that starts with CFWS followed by a dot;
    this is registered as an InvalidHeaderDefect, since it is not supported by
    even the obsolete grammar.

    zphrase does not start with wordrrzperiod in 'phrase'r�Nzcomment found without atom)rVrXrkrr/rr��PHRASE_ENDSr��ObsoleteHeaderDefectrLrM)rrWr6rrr�
get_phrase~s4
�

�
�r[cCsvt�}d}|dtkr"t|�\}}|s6t�d�|���zt|�\}}Wn^tjk
r�zt|�\}}Wn6tjk
r�|ddkr�|dtkr��t	�}YnXYnX|dk	r�|g|dd�<|�
|�|�r4|ddks�|dtk�r4tt|�|�\}}|j
dk�r|j�
t�d��n|j�
t�d��||d<z|j�d�Wn(tk
�rl|j�
t�d	��YnX||fS)
z= local-part = dot-atom / quoted-string / obs-local-part

    Nrz"expected local-part but found '{}'r�invalid-obs-local-partz<local-part is not dot-atom, quoted-string, or obs-local-partz,local-part is not a dot-atom (contains CFWS)�asciiz)local-part contains non-ASCII characters))r�rLrMrr/r*rUrXrYrrk�get_obs_local_partr
rDrr�rZr�encoder��NonASCIILocalPartDefect)rr�rWr6�obs_local_partrrr�get_local_part�sJ�
 
�
�
�rbcCs�t�}d}|�r(|ddks*|dtk�r(|ddkrj|rL|j�t�d��|�t�d}|dd�}q
nD|ddkr�|�t|dd	��|dd�}|j�t�d
��d}q
|r�|djdkr�|j�t�d
��zt	|�\}}d}Wn4tj
k
�r|dtk�r
�t|�\}}YnX|�|�q
|djdk�sX|djdk�rj|djdk�rj|j�t�d��|djdk�s�|djdk�r�|djdk�r�|j�t�d��|j�r�d|_||fS)z' obs-local-part = word *("." word)
    Frrrzinvalid repeated '.'Tr�N�misplaced-specialz/'\' character outside of quoted-string/ccontentr�r�zmissing '.' between wordsr[z!Invalid leading '.' in local partr:z"Invalid trailing '.' in local partr\)
r�rYrrkrr�r�rrDrXr/rLrM)rra�last_non_ws_was_dotr6rrrr^�sj 
�
�
�
���
���
�r^cCs@t|d�\}}}t|d�}|r0|j�t�d��t|�||fS)a dtext = <printable ascii except \ [ ]> / obs-dtext
        obs-dtext = obs-NO-WS-CTL / quoted-pair

    We allow anything except the excluded characters, but if we find any
    ASCII other than the RFC defined printable ASCII, a NonPrintableDefect is
    added to the token's defects list.  Quoted pairs are converted to their
    unquoted values, so what is returned is a ptext token, in this case a
    ValueTerminal.  If there were quoted-printables, an ObsoleteHeaderDefect is
    added to the returned token's defect list.

    z[]r�z(quoted printable found in domain-literal)r'rrrkrrZr)rr�r%rrr�	get_dtext�s

�recCs,|rdS|�t�d��|�tdd��dS)NFz"end of input inside domain-literal�]�domain-literal-endT)rkrr�r)r�domain_literalrrr�_check_for_early_dl_ends�ricCsjt�}|dtkr(t|�\}}|�|�|s6t�d��|ddkrRt�d�|���|dd�}t||�rp||fS|�tdd��|dt	kr�t
|�\}}|�|�t|�\}}|�|�t||�r�||fS|dt	kr�t
|�\}}|�|�t||�r�||fS|ddk�rt�d	�|���|�tdd
��|dd�}|�rb|dtk�rbt|�\}}|�|�||fS)zB domain-literal = [CFWS] "[" *([FWS] dtext) [FWS] "]" [CFWS]

    rzexpected domain-literal�[z6expected '[' at start of domain-literal but found '{}'r�Nzdomain-literal-startrfz4expected ']' at end of domain-literal but found '{}'rg)r�rLrMrkrr/r*rirr4r*re)rrhr6rrr�get_domain_literalsH

�





�
rkcCsrt�}d}|dtkr"t|�\}}|s6t�d�|���|ddkrvt|�\}}|dk	rd|g|dd�<|�|�||fSzt|�\}}Wn"tjk
r�t	|�\}}YnX|r�|ddkr�t�d��|dk	r�|g|dd�<|�|�|�rj|ddk�rj|j
�t�d��|djd	k�r*|d|dd�<|�rj|ddk�rj|�t
�t	|d
d��\}}|�|��q*||fS)z] domain = dot-atom / domain-literal / obs-domain
        obs-domain = atom *("." atom))

    Nrzexpected domain but found '{}'rjr�zInvalid Domainrz(domain is not a dot-atom (contains CFWS)r�r�)r�rLrMrr/r*rkrkrUrQrrZrDr�)rr�rWr6rrr�
get_domain=sD�



�
rlcCs|t�}t|�\}}|�|�|r,|ddkrF|j�t�d��||fS|�tdd��t|dd��\}}|�|�||fS)z( addr-spec = local-part "@" domain

    rr�z#addr-spec local part with no domain�address-at-symbolr�N)r�rbrkrrr�rrl)rr�r6rrr�
get_addr_speccs

�
rncCs�t�}|rj|ddks"|dtkrj|dtkrFt|�\}}|�|�q|ddkr|�t�|dd�}q|rz|ddkr�t�d�|���|�t�t	|dd��\}}|�|�|�r>|ddk�r>|�t�|dd�}|s�q>|dtk�rt|�\}}|�|�|ddkr�|�t�t	|dd��\}}|�|�q�|�sNt�d��|ddk�rlt�d	�|���|�t
dd
��||dd�fS)z� obs-route = obs-domain-list ":"
        obs-domain-list = *(CFWS / ",") "@" domain *("," [CFWS] ["@" domain])

        Returns an obs-route token with the appropriate sub-tokens (that is,
        there is no obs-domain-list in the parse tree).
    rrr�Nr�z(expected obs-route domain but found '{}'z%end of header while parsing obs-route�:z4expected ':' marking end of obs-route but found '{}'zend-of-obs-route-marker)r�rLrMrk�
ListSeparatorrr/r*�RouteComponentMarkerrlr)r�	obs_router6rrr�
get_obs_routessF
�





�rscCs�t�}|dtkr(t|�\}}|�|�|r8|ddkrHt�d�|���|�tdd��|dd�}|ddkr�|�tdd��|j�t�	d	��|dd�}||fSzt
|�\}}Wnztjk
�r0z"t|�\}}|j�t�d
��Wn(tjk
�rt�d�|���YnX|�|�t
|�\}}YnX|�|�|�r^|ddk�r^|dd�}n|j�t�	d��|�tdd��|�r�|dtk�r�t|�\}}|�|�||fS)
z� angle-addr = [CFWS] "<" addr-spec ">" [CFWS] / obs-angle-addr
        obs-angle-addr = [CFWS] "<" obs-route addr-spec ">" [CFWS]

    r�<z"expected angle-addr but found '{}'zangle-addr-startr�N�>zangle-addr-endznull addr-spec in angle-addrz*obsolete route specification in angle-addrz.expected addr-spec or obs-route but found '{}'z"missing trailing '>' on angle-addr)
r�rLrMrkrr/r*rrr�rnrsrZ)r�
angle_addrr6rrr�get_angle_addr�sT
�
�
�
�



�
rwcCs<t�}t|�\}}|�|dd��|jdd�|_||fS)z� display-name = phrase

    Because this is simply a name-rule, we don't return a display-name
    token containing a phrase, but rather a display-name token with
    the content of the phrase.

    N)r�r[r4r)rr�r6rrr�get_display_name�s
rxcCs�t�}d}|dtkr6t|�\}}|s6t�d�|���|ddkr�|dtkr^t�d�|���t|�\}}|s~t�d�|���|dk	r�|g|ddd�<d}|�|�t	|�\}}|dk	r�|g|dd�<|�|�||fS)z, name-addr = [display-name] angle-addr

    Nrz!expected name-addr but found '{}'rt)
r�rLrMrr/r*rYrxrkrw)r�	name_addrrWr6rrr�
get_name_addr�s6���

rzcCs�t�}zt|�\}}WnNtjk
rdzt|�\}}Wn&tjk
r^t�d�|���YnXYnXtdd�|jD��r�d|_|�	|�||fS)z& mailbox = name-addr / addr-spec

    zexpected mailbox but found '{}'css|]}t|tj�VqdSr)r�rr�r rrrr#s�zget_mailbox.<locals>.<genexpr>r�)
r�rzrr/rnr*�anyr-rDrk)rr�r6rrr�get_mailbox�s ��
r|cCsdt�}|r\|d|kr\|dtkrD|�t|dd��|dd�}qt|�\}}|�|�q||fS)z� Read everything up to one of the chars in endchars.

    This is outside the formal grammar.  The InvalidMailbox TokenList that is
    returned acts like a Mailbox, but the data attributes are None.

    rrcr�N)r�rYrkrr[)rr �invalid_mailboxr6rrr�get_invalid_mailboxs�r~cCs�t�}|�r�|ddk�r�zt|�\}}|�|�W�ntjk
�r<d}|dtkr�t|�\}}|rv|ddkr�|�|�|j�t�d��n@t	|d�\}}|dk	r�|g|dd�<|�|�|j�t�
d��nb|ddkr�|j�t�d��nBt	|d�\}}|dk	�r|g|dd�<|�|�|j�t�
d��YnX|�r�|ddk�r�|d}d	|_t	|d�\}}|�|�|j�t�
d��|r|ddkr|�t
�|d
d�}q||fS)aJ mailbox-list = (mailbox *("," mailbox)) / obs-mbox-list
        obs-mbox-list = *([CFWS] ",") mailbox *("," [mailbox / CFWS])

    For this routine we go outside the formal grammar in order to improve error
    handling.  We recognize the end of the mailbox list only at the end of the
    value or at a ';' (the group terminator).  This is so that we can turn
    invalid mailboxes into InvalidMailbox tokens and continue parsing any
    remaining valid mailboxes.  We also allow all mailbox entries to be null,
    and this condition is handled appropriately at a higher level.

    r�;Nz,;zempty element in mailbox-listzinvalid mailbox in mailbox-listrr�r�r�)r�r|rkrr/rLrMrrZr~r�rDr4rp)r�mailbox_listr6rWr�rrr�get_mailbox_listsX

�

�
�


�

�
r�cCst�}|s$|j�t�d��||fSd}|r�|dtkr�t|�\}}|sl|j�t�d��|�|�||fS|ddkr�|�|�||fSt|�\}}t|j	�dkr�|dk	r�|�|�|�
|�|j�t�d��||fS|dk	r�|g|dd�<|�|�||fS)zg group-list = mailbox-list / CFWS / obs-group-list
        obs-group-list = 1*([CFWS] ",") [CFWS]

    zend of header before group-listNrzend of header in group-listrzgroup-list with empty entries)r�rrkrr�rLrMr�r�r}r4rZ)r�
group_listrWr6rrr�get_group_listWs>
�
�




�
r�cCs t�}t|�\}}|r"|ddkr2t�d�|���|�|�|�tdd��|dd�}|r�|ddkr�|�tdd��||dd�fSt|�\}}|�|�|s�|j�t�	d	��n|ddkr�t�d
�|���|�tdd��|dd�}|�r|dt
k�rt|�\}}|�|�||fS)z7 group = display-name ":" [group-list] ";" [CFWS]

    rroz8expected ':' at end of group display name but found '{}'zgroup-display-name-terminatorr�Nrzgroup-terminatorzend of header in groupz)expected ';' at end of group but found {})r�rxrr/r*rkrr�rr�rLrM)rrr6rrr�	get_group|s8�


��
r�cCsxt�}zt|�\}}WnNtjk
rdzt|�\}}Wn&tjk
r^t�d�|���YnXYnX|�|�||fS)a� address = mailbox / group

    Note that counter-intuitively, an address can be either a single address or
    a list of addresses (a group).  This is why the returned Address object has
    a 'mailboxes' attribute which treats a single address as a list of length
    one.  When you need to differentiate between to two cases, extract the single
    element, which is either a mailbox or a group token.

    zexpected address but found '{}')r~r�rr/r|r*rk)rrur6rrr�get_address�s�
r�c
Cs�t�}|�r�zt|�\}}|�|�W�n tjk
�rH}z�d}|dtkr�t|�\}}|rj|ddkr�|�|�|j�t�d��nFt	|d�\}}|dk	r�|g|dd�<|�t
|g��|j�t�d��nh|ddkr�|j�t�d��nHt	|d�\}}|dk	�r|g|dd�<|�t
|g��|j�t�d��W5d}~XYnX|�r�|ddk�r�|dd}d|_t	|d�\}}|�
|�|j�t�d��|r|�tdd	��|d
d�}q||fS)a� address_list = (address *("," address)) / obs-addr-list
        obs-addr-list = *([CFWS] ",") address *("," [address / CFWS])

    We depart from the formal grammar here by continuing to parse until the end
    of the input, assuming the input to be entirely composed of an
    address-list.  This is always true in email parsing, and allows us
    to skip invalid addresses to parse additional valid ones.

    Nrrz"address-list entry with no contentzinvalid address in address-listzempty element in address-listr�r�rr�)rtr�rkrr/rLrMrrZr~r~r�rDr4r)r�address_listr6�errrWr�rrr�get_address_list�sX


�
�
�

�

�r�cCs�t�}|st�d�|���|ddkr6t�d�|���|�tdd��|dd�}t|�\}}|�|�|rx|ddkr�t�d	�|���|�tdd
��||dd�fS)z& no-fold-literal = "[" *dtext "]"
    z'expected no-fold-literal but found '{}'rrjz;expected '[' at the start of no-fold-literal but found '{}'zno-fold-literal-startr�Nrfz9expected ']' at the end of no-fold-literal but found '{}'zno-fold-literal-end)r�rr/r*rkrre)r�no_fold_literalr6rrr�get_no_fold_literal�s.���
��r�cCs�t�}|r,|dtkr,t|�\}}|�|�|r<|ddkrLt�d�|���|�tdd��|dd�}zt|�\}}Wn`tjk
r�z"t	|�\}}|j
�t�d��Wn&tjk
r�t�d�|���YnXYnX|�|�|r�|dd	k�r@|j
�t�d
��|�r8|ddk�r8|�tdd��|dd�}||fS|�td	d
��|dd�}zt|�\}}Wn�tjk
�rzt
|�\}}Wnrtjk
�r}zPz"t|�\}}|j
�t�d��Wn(tjk
�r�t�d�|���YnXW5d}~XYnXYnX|�|�|�r6|ddk�r6|dd�}n|j
�t�d��|�tdd��|�r�|dtk�r�t|�\}}|�|�||fS)z�msg-id = [CFWS] "<" id-left '@' id-right  ">" [CFWS]
       id-left = dot-atom-text / obs-id-left
       id-right = dot-atom-text / no-fold-literal / obs-id-right
       no-fold-literal = "[" *dtext "]"
    rrtzexpected msg-id but found '{}'zmsg-id-startr�Nzobsolete id-left in msg-idz4expected dot-atom-text or obs-id-left but found '{}'r�zmsg-id with no id-rightruz
msg-id-endrmzobsolete id-right in msg-idzFexpected dot-atom-text, no-fold-literal or obs-id-right but found '{}'zmissing trailing '>' on msg-id)rrLrMrkrr/r*rrSr^rrZr�r�rl)r�msg_idr6�errr�
get_msg_ids~
�
�
��

�
�
��"

�
r�c
Cs�t�}zt|�\}}|�|�WnLtjk
rl}z,t|�}t|�}|j�t�d�	|���W5d}~XYnX|r�|j�t�d�	|���|S)z2message-id      =   "Message-ID:" msg-id CRLF
    zInvalid msg-id: {!r}NzUnexpected {!r})
rr�rkrr/r@rrr�r*)r�
message_idr6�exrrr�parse_message_idIs�
�r�cCs�t�}|s |j�t�d��|S|dtkrXt|�\}}|�|�|sX|j�t�d��d}|r�|ddkr�|dtkr�||d7}|dd�}q\|��s�|j�t�d�	|���|�t
|d	��nt|�|_|�t
|d
��|�r|dtk�rt|�\}}|�|�|�r|ddk�rT|jdk	�r:|j�t�d��|�rP|�t
|d	��|S|�t
dd��|dd�}|�r�|dtk�r�t|�\}}|�|�|�s�|jdk	�r�|j�t�d��|Sd}|�r�|dtk�r�||d7}|dd�}�q�|���s*|j�t�d
�	|���|�t
|d	��nt|�|_
|�t
|d
��|�rn|dtk�rnt|�\}}|�|�|�r�|j�t�d��|�t
|d	��|S)zE mime-version = [CFWS] 1*digit [CFWS] "." [CFWS] 1*digit [CFWS]

    z%Missing MIME version number (eg: 1.0)rz0Expected MIME version number but found only CFWSrrr�Nz1Expected MIME major version number but found {!r}r�digitsz0Incomplete MIME version; found only major numberzversion-separatorz1Expected MIME minor version number but found {!r}z'Excess non-CFWS text after MIME version)r�rrkr�HeaderMissingRequiredValuerLrM�isdigitr�r*r�intr�r�)r�mime_versionr6r�rrr�parse_mime_versiones�
�

�
�


�

�

�


�r�cCsdt�}|r\|ddkr\|dtkrD|�t|dd��|dd�}qt|�\}}|�|�q||fS)z� Read everything up to the next ';'.

    This is outside the formal grammar.  The InvalidParameter TokenList that is
    returned acts like a Parameter, but the data attributes are None.

    rrrcr�N)r�rYrkrr[)r�invalid_parameterr6rrr�get_invalid_parameter�s�r�cCsNt|�}|st�d�|���|��}|t|�d�}t|d�}t|�||fS)a8ttext = <matches _ttext_matcher>

    We allow any non-TOKEN_ENDS in ttext, but add defects to the token's
    defects list if we find non-ttext characters.  We also register defects for
    *any* non-printables even though the RFC doesn't exclude all of them,
    because we follow the spirit of RFC 5322.

    zexpected ttext but found '{}'N�ttext)�_non_token_end_matcherrr/r*rr�rr)rrGr�rrr�	get_ttext�s	�
r�cCs�t�}|r,|dtkr,t|�\}}|�|�|rL|dtkrLt�d�|���t|�\}}|�|�|r�|dtkr�t|�\}}|�|�||fS)z�token = [CFWS] 1*ttext [CFWS]

    The RFC equivalent of ttext is any US-ASCII chars except space, ctls, or
    tspecials.  We also exclude tabs even though the RFC doesn't.

    The RFC implies the CFWS but is not explicit about it in the BNF.

    r�expected token but found '{}')	r^rLrMrk�
TOKEN_ENDSrr/r*r�)r�mtokenr6rrr�	get_token�s	
�

r�cCsNt|�}|st�d�|���|��}|t|�d�}t|d�}t|�||fS)aQattrtext = 1*(any non-ATTRIBUTE_ENDS character)

    We allow any non-ATTRIBUTE_ENDS in attrtext, but add defects to the
    token's defects list if we find non-attrtext characters.  We also register
    defects for *any* non-printables even though the RFC doesn't exclude all of
    them, because we follow the spirit of RFC 5322.

    z expected attrtext but found {!r}Nr�)�_non_attribute_end_matcherrr/r*rr�rr�rrGr�rrr�get_attrtext�s	�
r�cCs�t�}|r,|dtkr,t|�\}}|�|�|rL|dtkrLt�d�|���t|�\}}|�|�|r�|dtkr�t|�\}}|�|�||fS)aH [CFWS] 1*attrtext [CFWS]

    This version of the BNF makes the CFWS explicit, and as usual we use a
    value terminal for the actual run of characters.  The RFC equivalent of
    attrtext is the token characters, with the subtraction of '*', "'", and '%'.
    We include tab in the excluded set just as we do for token.

    rr�)	r�rLrMrk�ATTRIBUTE_ENDSrr/r*r��rr�r6rrr�
get_attribute�s	
�

r�cCsNt|�}|st�d�|���|��}|t|�d�}t|d�}t|�||fS)z�attrtext = 1*(any non-ATTRIBUTE_ENDS character plus '%')

    This is a special parsing routine so that we get a value that
    includes % escapes as a single string (which we decode as a single
    string later).

    z)expected extended attrtext but found {!r}N�extended-attrtext)�#_non_extended_attribute_end_matcherrr/r*rr�rrr�rrr�get_extended_attrtext	s�
r�cCs�t�}|r,|dtkr,t|�\}}|�|�|rL|dtkrLt�d�|���t|�\}}|�|�|r�|dtkr�t|�\}}|�|�||fS)z� [CFWS] 1*extended_attrtext [CFWS]

    This is like the non-extended version except we allow % characters, so that
    we can pick up an encoded value as a single string.

    rr�)	r�rLrMrk�EXTENDED_ATTRIBUTE_ENDSrr/r*r�r�rrr�get_extended_attribute!	s
�

r�cCs�t�}|r|ddkr&t�d�|���|�tdd��|dd�}|rR|d��sbt�d�|���d}|r�|d��r�||d7}|dd�}qf|dd	kr�|d	kr�|j�t�d
��t	|�|_
|�t|d��||fS)a6 '*' digits

    The formal BNF is more complicated because leading 0s are not allowed.  We
    check for that and add a defect.  We also assume no CFWS is allowed between
    the '*' and the digits, though the RFC is not crystal clear on that.
    The caller should already have dealt with leading CFWS.

    r�*zExpected section but found {}zsection-markerr�Nz$Expected section number but found {}r�0z'section number has an invalid leading 0r�)r�rr/r*rkrr�r�InvalidHeaderErrorr�r�)rr�r�rrr�get_section7	s,	��
�
r�cCs�t�}|st�d��d}|dtkr0t|�\}}|sDt�d�|���|ddkr^t|�\}}nt|�\}}|dk	r�|g|dd�<|�|�||fS)z  quoted-string / attribute

    z&Expected value but found end of stringNrz Expected value but found only {}r
)	r�rr/rLrMr*rOr�rk)r�vrWr6rrr�	get_valueU	s"
�
r�cCs�t�}t|�\}}|�|�|r,|ddkrL|j�t�d�|���||fS|ddkr�z t|�\}}d|_|�|�Wntj	k
r�YnX|s�t�	d��|ddkr�|�t
dd��|dd	�}d|_|dd
kr�t�	d��|�t
d
d��|dd	�}d	}|�r,|dtk�r,t
|�\}}|�|�d	}|}|j�rF|�rF|dd
k�rFt|�\}}|j}d}|jdk�r�|�r�|ddk�r�d}n$t|�\}}	|	�r�|	ddk�r�d}n(zt|�\}}	WnYnX|	�s�d}|�r0|j�t�d��|�|�|D](}
|
jdk�rg|
d	d	�<|
}�q*�q|}nd	}|j�t�d��|�r`|ddk�r`d	}nt|�\}}|j�r�|jdk�r�|�r�|ddk�r�|�|�|d	k	�r�|�r�t|��|}||fS|j�t�d��|�s
|j�t�d��|�|�|d	k�r�||fSn�|d	k	�rN|D]}
|
jdk�r�q2�q|
jdk|�|
�|
j|_|ddk�rlt�	d�|���|�t
dd��|dd	�}|�r�|ddk�r�t|�\}}|�|�|j|_|�r�|ddk�r�t�	d�|���|�t
dd��|dd	�}|d	k	�rrt�}|�rl|dtk�r,t|�\}}n2|dd
k�rRt
d
d�}|dd	�}nt|�\}}|�|��q
|}nt|�\}}|�|�|d	k	�r�|�r�t|��|}||fS)aY attribute [section] ["*"] [CFWS] "=" value

    The CFWS is implied by the RFC but not made explicit in the BNF.  This
    simplified form of the BNF from the RFC is made to conform with the RFC BNF
    through some extra checks.  We do it this way because it makes both error
    recovery and working with the resulting parse tree easier.
    rrz)Parameter contains name ({}) but no valuer�TzIncomplete parameterzextended-parameter-markerr�N�=zParameter not followed by '='�parameter-separatorr
F�'z5Quoted string value for extended parameter is invalidrhzZParameter marked as extended but appears to have a quoted string value that is non-encodedzcApparent initial-extended-value but attribute was not marked as extended or was not initial sectionz(Missing required charset/lang delimitersr�r�z=Expected RFC2231 char/lang encoding delimiter, but found {!r}zRFC2231-delimiterz;Expected RFC2231 char/lang encoding delimiter, but found {}ZDQUOTE)r�r�rkrrr�r*r�r�r/rr�rLrMrOror�r�r�rDr��AssertionErrorrrcrdr�r4r*rD)rr�r6rWr"�appendto�qstring�inner_value�
semi_validr7�tr�rrr�
get_parameterk	s�
�



�


�


�
�






�
�



r�c
Csjt�}|�rfzt|�\}}|�|�Wn�tjk
r�}z�d}|dtkrVt|�\}}|sp|�|�|WY�xS|ddkr�|dk	r�|�|�|j�t�d��n@t	|�\}}|r�|g|dd�<|�|�|j�t�d�
|���W5d}~XYnX|�rD|ddk�rD|d}d|_t	|�\}}|�|�|j�t�d�
|���|r|�t
dd	��|d
d�}q|S)a! parameter *( ";" parameter )

    That BNF is meant to indicate this routine should only be called after
    finding and handling the leading ';'.  There is no corresponding rule in
    the formal RFC grammar, but it is more convenient for us for the set of
    parameters to be treated as its own TokenList.

    This is 'parse' routine because it consumes the remaining value, but it
    would never be called to parse a full header.  Instead it is called to
    parse everything after the non-parameter value of a specific MIME header.

    Nrrzparameter entry with no contentzinvalid parameter {!r}r�r�z)parameter with invalid trailing text {!r}r�r�)r�r�rkrr/rLrMrr�r�r*rDr4r)r�mime_parametersr6r�rWr�rrr�parse_mime_parameters�	sJ



�

�

�r�cCs�|rV|ddkrV|dtkr>|�t|dd��|dd�}qt|�\}}|�|�q|s^dS|�tdd��|�t|dd���dS)zBDo our best to find the parameters in an invalid MIME header

    rrrcr�Nr�)rYrkrr[r�)�	tokenlistrr6rrr�_find_mime_parameters-
sr�c
Cs�t�}d}|s$|j�t�d��|Szt|�\}}Wn<tjk
rp|j�t�d�|���t	||�|YSX|�|�|r�|ddkr�|j�t�d��|r�t	||�|S|j
����|_
|�tdd��|dd	�}zt|�\}}Wn>tjk
�r*|j�t�d
�|���t	||�|YSX|�|�|j
����|_|�sP|S|ddk�r�|j�t�d�|���|`
|`t	||�|S|�tdd
��|�t|dd	���|S)z� maintype "/" subtype *( ";" parameter )

    The maintype and substype are tokens.  Theoretically they could
    be checked against the official IANA list + x-token, but we
    don't do that.
    Fz"Missing content type specificationz(Expected content maintype but found {!r}rr
zInvalid content typezcontent-type-separatorr�Nz'Expected content subtype but found {!r}rz<Only parameters are valid after content type, but found {!r}r�)r�rrkrr�r�r/r�r*r�rr��lowerr�rr�r�)r�ctype�recoverr6rrr�parse_content_type_header=
sd
�
�



�

�



��
r�c
Cs�t�}|s |j�t�d��|Szt|�\}}Wn<tjk
rl|j�t�d�|���t	||�|YSX|�|�|j
����|_
|s�|S|ddkr�|j�t�d�|���t	||�|S|�tdd��|�t|dd���|S)	z* disposition-type *( ";" parameter )

    zMissing content dispositionz+Expected content disposition but found {!r}rrzCOnly parameters are valid after content disposition, but found {!r}r�r�N)r�rrkrr�r�r/r�r*r�rr�r�rrr�)r�disp_headerr6rrr� parse_content_disposition_headerv
s:
�
�



��
r�c
Cs�t�}|s |j�t�d��|Szt|�\}}Wn.tjk
r^|j�t�d�|���YnX|�|�|j	�
���|_|s�|S|r�|j�t�d��|dt
kr�|�t|dd��|dd�}q�t|�\}}|�|�q�|S)z mechanism

    z!Missing content transfer encodingz1Expected content transfer encoding but found {!r}z*Extra text after content transfer encodingrrcr�N)rrrkrr�r�r/r�r*rr�r�rbrYrr[)r�
cte_headerr6rrr�&parse_content_transfer_encoding_header�
s4
�
�

�r�cCsDd}|r@|dr@|ddtkr@|dd}|ddd�|d<|S)Nrr�)r4)�lines�wsprrr�_steal_trailing_WSP_if_exists�
s
r�cCs�|jp
tj}|jrdnd}dg}d}d}d}tdd�}t|�}	|	�r�|	�d�}
|
|kr`|d8}q>t|
�}|
jd	kr�t	|�t
@r�d
}z|�|�|}Wn6tk
r�t
dd�|
jD��r�d
}nd}d
}YnX|
jdkr�t|
|||�q>|�r�|�s�|
j�spd}d}|
j�rp|
j|d�dt|j��}
|j|
k�rpt|
�|t|d�k�r^t|�}|�|�|d|
7<q>t|
d��s�t|
�|	}	nt|||||
j|�}d}q>t|�|t|d�k�r�|d|7<q>|
j�rt|�d|k�rt|�}|�s|
���r|�||�d}q>t|
d��sNt|
�}|
j�sD|d7}|�|�||	}	q>|
j�rn|�sn|	�d|
�d
}q>t|�}|�s�|
���r�|�||�q>|d|7<q>|j�|�|jS)zLReturn string of contents of parse_tree folded according to RFC rules.

    �utf-8r�rNrF�wrap_as_ew_blockedr�r�Tcss|]}t|tj�VqdSr)r�rr�r rrrr#�
s�z%_refold_parse_tree.<locals>.<genexpr>�unknown-8bitr�r7r�r_)�max_line_length�sys�maxsize�utf8r
rr�r
rDr�rVr_r�r{r-�_fold_mime_parametersr1rIr;r�rr�rkrE�_fold_as_ewrJr0�insertr%)�
parse_treer8�maxlenr�r��last_ewr��
want_encoding�end_ew_not_allowedr�r2�tstrrc�encoded_part�newline�newpartsrrrr9�
s�


�



��
r9cCs�|dk	r<|r<tt|d|d�|��}|dd|�|d<|dtkr�|d}|dd�}t|d�|krz|�t|��|d|7<d}|dtkr�|d}|dd�}|dkr�t|d�n|}|dkr�dn|}	t|	�d}
|
d|kr�t�d	��|�r�|t|d�}||
}|dk�r,|�d
�q�|d|�}
tj	|
|	d�}t|�|}|dk�r�|
dd�}
tj	|
|	d�}t|�|}�qR|d|7<|t|
�d�}|r�|�d
�t|d�}q�|d|7<|�r�|SdS)a�Fold string to_encode into lines as encoded word, combining if allowed.
    Return the new value for last_ew, or None if ew_combine_allowed is False.

    If there is already an encoded word in the last line of lines (indicated by
    a non-None value for last_ew) and ew_combine_allowed is true, decode the
    existing ew, combine it with to_encode, and re-encode.  Otherwise, encode
    to_encode.  In either case, split to_encode as necessary so that the
    encoded segments fit within maxlen.

    Nr�rr�rr�r��z3max_line_length is too small to fit an encoded wordrO)rc)
r
r@r4r�rkr�rr/r1r_)�	to_encoder�r�r�rJrc�leading_wsp�trailing_wsp�new_last_ew�	encode_as�
chrome_len�remaining_space�
text_space�to_encode_word�encoded_word�excessrrrr�1sT��



r�c	Cs�|jD�]�\}}|d���d�s2|dd7<|}d}z|�|�d}Wn0tk
r|d}t�|�rtd}d}nd}YnX|r�tjj	|d	|d
�}	d�
|||	�}
nd�
|t|��}
t|d�t|
�d
|kr�|dd|
|d<qn"t|
�d|k�r
|�
d|
�qd}|d}|rt|�tt|��dt|�}
||
dk�rLd}||
d}}|d|�}tjj	|d	|d
�}	t|	�|k�r��q�|d
8}�q\|�
d�
||||	��d	}|d
7}||d�}|�r|dd7<�qqdS)a>Fold TokenList 'part' into the 'lines' list as mime parameters.

    Using the decoded list of parameters and values, format them according to
    the RFC rules, including using RFC2231 encoding if the value cannot be
    expressed in 'encoding' and/or the parameter+value is too long to fit
    within 'maxlen'.

    r�r�strictFTr�r�r�r)�saferz
{}*={}''{}r�r�rOr�rz''r��NNz {}*{}*={}{})r�r�r�r_r�rr�r�r�rrr*rr�rkr
)r2r�r�r�r�rrc�
error_handler�encoding_required�
encoded_valuer�r��extra_chromer��
splitpoint�maxchars�partialrrrr�rsn


� ��r�)�r�rer�r��stringr�operatorr�emailrr1rrr�r4rLrVrPr�rY�	TSPECIALSr��	ASPECIALSr�r�r�compile�VERBOSE�	MULTILINEr;rrrMrSrVrXrZr\r^r`rerprqrtr~r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrr
r
rrrr/rr�rprqr*r%r�rr$�matchrF�findallrr�r�r�rr'r*r9r@rCrDrHrJrKrMrOrQrSrUrXr[rbr^rerirkrlrnrsrwrxrzr|r~r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r9r�r�rrrr�<module>s.E
�C"	
!*$
V	+





����
1C+
"&'/'&).9%7ED49/gAX�0�@s�dZddddgZddlZddlZdZdZd	Zd
ddd
dddddddddddddddddddd gZd!d"d#d$d%d&d'gZddddd(d)d*d(d+d*d,d+d-d,d.�Z	d/d�Z
d0d1�Zd2d�Zd3d�Z
d4d�ZGd5d6�d6�ZGd7d8�d8e�ZdS)9zcEmail address parsing code.

Lifted directly from rfc822.py.  This should eventually be rewritten.
�	mktime_tz�	parsedate�parsedate_tz�quote�N� �z, �jan�feb�mar�apr�may�jun�jul�aug�sep�oct�nov�dec�january�february�march�april�june�july�august�	september�october�november�december�mon�tue�wed�thu�fri�sat�sunip���i���i���i����iD���i��)�UT�UTC�GMT�Z�AST�ADT�EST�EDT�CST�CDT�MST�MDT�PST�PDTcCs,t|�}|sdS|ddkr$d|d<t|�S)zQConvert a date string to a time tuple.

    Accounts for military timezones.
    N�	r)�
_parsedate_tz�tuple)�data�res�r9�&/usr/lib/python3.8/email/_parseaddr.pyr-sc
Cs�|sdS|��}|d�d�s.|d��tkr6|d=n.|d�d�}|dkrd|d|dd�|d<t|�dkr�|d�d�}t|�dkr�||dd�}t|�dkr�|d}|�d�}|d	kr�|�d�}|dkr�|d|�||d�g|dd�<n
|�d
�t|�dk�rdS|dd�}|\}}}}}|��}|tk�rX||��}}|tk�rXdSt�	|�d}|dk�rx|d8}|d	dk�r�|dd	�}|�d
�}|dk�r�||}}|d	dk�r�|dd	�}|d�
��s�||}}|d	dk�r�|dd	�}|�d
�}t|�dk�r"|\}	}
d}n~t|�dk�r<|\}	}
}ndt|�dk�r�d|dk�r�|d�d�}t|�dk�r�|\}	}
d}nt|�dk�r�|\}	}
}ndSz,t|�}t|�}t|	�}	t|
�}
t|�}Wntk
�r�YdSX|dk�r|dk�r|d7}n|d7}d}|�
�}|tk�r,t|}n>zt|�}Wntk
�rNYnX|dk�rj|�d��rjd}|�r�|dk�r�d	}
|}nd}
|
|dd|dd}||||	|
|ddd	|g
S)a�Convert date to extended time tuple.

    The last (additional) element is the time zone offset in seconds, except if
    the timezone was specified as -0000.  In that case the last element is
    None.  This indicates a UTC timestamp that explicitly declaims knowledge of
    the source timezone, as opposed to a +0000 timestamp that indicates the
    source timezone really was UTC.

    Nr�,���-��+���r���:��0�.�d�Dili�i�<)�split�endswith�lower�	_daynames�rfind�len�find�append�_monthnames�index�isdigit�int�
ValueError�upper�
_timezones�
startswith)r7�i�stuff�s�dd�mm�yy�tm�tz�thh�tmm�tss�tzoffset�tzsignr9r9r:r59s�


"














r5cCs&t|�}t|t�r|dd�S|SdS)z&Convert a time string to a time tuple.Nr4)r�
isinstancer6�r7�tr9r9r:r�s
cCs<|ddkr"t�|dd�d�St�|�}||dSdS)zETurn a 10-tuple as returned by parsedate_tz() into a POSIX timestamp.r4N�)rA)�time�mktime�calendar�timegmrir9r9r:r�s
cCs|�dd��dd�S)z�Prepare string to be used in a quoted string.

    Turns backslash and double quote characters into quoted pairs.  These
    are the only characters that need to be quoted inside a quoted string.
    Does not add the surrounding double quotes.
    �\z\\�"z\")�replace)�strr9r9r:r�sc@s|eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
ddd�Zdd�Zdd�Z
dd�Zddd�Zdd�ZdS) �
AddrlistClassaAddress parser class by Ben Escoto.

    To understand what this class does, it helps to have a copy of RFC 2822 in
    front of you.

    Note: this class interface is deprecated and may be removed in the future.
    Use email.utils.AddressList instead.
    cCsZd|_d|_d|_d|_|j|j|_|j|j|j|_|j�dd�|_||_g|_	dS)z�Initialize a new instance.

        `field' is an unparsed address header field, containing
        one or more addresses.
        z()<>@,:;."[]rz 	z
rGrN)
�specials�pos�LWS�CR�FWS�atomendsrr�
phraseends�field�commentlist��selfr|r9r9r:�__init__�szAddrlistClass.__init__cCs�g}|jt|j�kr�|j|j|jdkr\|j|jdkrL|�|j|j�|jd7_q|j|jdkr�|j�|���qq�qt�|�S)z&Skip white space and extract comments.z

r<�()	rvrPr|rwrRr}�
getcomment�EMPTYSTRING�join)r�wslistr9r9r:�gotonext�szAddrlistClass.gotonextcCs:g}|jt|j�kr6|��}|r*||7}q|�d�q|S)zVParse all addresses.

        Returns a list containing all of the addresses.
        )rr)rvrPr|�
getaddressrR)r�result�adr9r9r:�getaddrlist�s
zAddrlistClass.getaddrlistcCs�g|_|��|j}|j}|��}|��g}|jt|j�kr\|rXt�|j�|dfg}�n\|j|jdkr�||_||_|��}t�|j�|fg}�n"|j|jdk�rg}t|j�}|jd7_|jt|j�k�r�|��|j|k�r|j|jdk�r|jd7_�q�||�	�}q�n�|j|jdk�rx|�
�}|j�rft�|�dd�|j�d	|fg}nt�|�|fg}n@|�r�t�|j�|dfg}n"|j|j|jk�r�|jd7_|��|jt|j�k�r�|j|jd
k�r�|jd7_|S)zParse the next address.rz.@rDr<�;�<z (r�)r;)r}r�rv�
getphraselistrPr|�SPACEr��getaddrspecr��getrouteaddrru)r�oldpos�oldcl�plist�
returnlist�addrspec�fieldlen�	routeaddrr9r9r:r�sX

���$zAddrlistClass.getaddresscCs�|j|jdkrdSd}|jd7_|��d}|jt|j�kr�|rT|��d}n~|j|jdkrv|jd7_q�n\|j|jdkr�|jd7_d}n8|j|jd	kr�|jd7_n|��}|jd7_q�|��q2|S)
z�Parse a route address (Return-path value).

        This method just skips all the route stuff and returns the addrspec.
        r�NFr<r�>�@TrD)r|rvr�rP�	getdomainr�)r�expectroute�adlistr9r9r:r�?s.
zAddrlistClass.getrouteaddrcCsTg}|��|jt|j�kr�d}|j|jdkrf|rH|d��sH|��|�d�|jd7_d}nd|j|jdkr�|�dt|����n<|j|j|j	kr�|r�|d��s�|��q�n|�|�
��|��}|r|r|�|�q|jt|j�k�s
|j|jdk�rt�|�S|�d�|jd7_|��|�
�}|�sFtSt�|�|S)	zParse an RFC 2822 addr-spec.TrGrAr<Frqz"%s"r�)r�rvrPr|�strip�poprRr�getquoterz�getatomr�r�r�)r�aslist�preserve_ws�ws�domainr9r9r:r�_s:
$

zAddrlistClass.getaddrspeccCs�g}|jt|j�kr�|j|j|jkr6|jd7_q|j|jdkrX|j�|���q|j|jdkrx|�|���q|j|jdkr�|jd7_|�d�q|j|jdkr�tS|j|j|j	kr�q�q|�|�
��qt�|�S)z-Get the complete domain name from an address.r<r��[rGr�)rvrPr|rwr}rRr��getdomainliteralr�rzr�r�)r�sdlistr9r9r:r��s"zAddrlistClass.getdomainTcCs�|j|j|krdSdg}d}|jd7_|jt|j�kr�|rX|�|j|j�d}np|j|j|krz|jd7_q�nN|r�|j|jdkr�|�|���q,n(|j|jdkr�d}n|�|j|j�|jd7_q,t�|�S)a�Parse a header fragment delimited by special characters.

        `beginchar' is the start character for the fragment.
        If self is not looking at an instance of `beginchar' then
        getdelimited returns the empty string.

        `endchars' is a sequence of allowable end-delimiting characters.
        Parsing stops when one of these is encountered.

        If `allowcomments' is non-zero, embedded RFC 2822 comments are allowed
        within the parsed fragment.
        rFr<r�rpT)r|rvrPrRr�r�r�)r�	beginchar�endchars�
allowcomments�slistrr9r9r:�getdelimited�s(
zAddrlistClass.getdelimitedcCs|�ddd�S)z1Get a quote-delimited fragment from self's field.rqz"
F�r��rr9r9r:r��szAddrlistClass.getquotecCs|�ddd�S)z7Get a parenthesis-delimited fragment from self's field.r�z)
Tr�r�r9r9r:r��szAddrlistClass.getcommentcCsd|�ddd�S)z!Parse an RFC 2822 domain-literal.z[%s]r�z]
Fr�r�r9r9r:r��szAddrlistClass.getdomainliteralNcCsddg}|dkr|j}|jt|j�krZ|j|j|kr8qZn|�|j|j�|jd7_qt�|�S)aParse an RFC 2822 atom.

        Optional atomends specifies a different set of end token delimiters
        (the default is to use self.atomends).  This is used e.g. in
        getphraselist() since phrase endings must not include the `.' (which
        is legal in phrases).rNr<)rzrvrPr|rRr�r�)rrz�atomlistr9r9r:r��szAddrlistClass.getatomcCs�g}|jt|j�kr�|j|j|jkr6|jd7_q|j|jdkrV|�|���q|j|jdkrx|j�|���q|j|j|jkr�q�q|�|�	|j��q|S)z�Parse a sequence of RFC 2822 phrases.

        A phrase is a sequence of words, which are in turn either RFC 2822
        atoms or quoted-strings.  Phrases are canonicalized by squeezing all
        runs of continuous whitespace into one space.
        r<rqr�)
rvrPr|ryrRr�r}r�r{r�)rr�r9r9r:r��szAddrlistClass.getphraselist)T)N)�__name__�
__module__�__qualname__�__doc__r�r�r�r�r�r�r�r�r�r�r�r�r�r9r9r9r:rt�s	; &
%
rtc@sHeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)�AddressListz@An AddressList encapsulates a list of parsed RFC 2822 addresses.cCs&t�||�|r|��|_ng|_dS�N)rtr�r��addresslistr~r9r9r:r��szAddressList.__init__cCs
t|j�Sr�)rPr�r�r9r9r:�__len__szAddressList.__len__cCs>td�}|jdd�|_|jD]}||jkr|j�|�q|Sr��r�r�rR�r�other�newaddr�xr9r9r:�__add__s

zAddressList.__add__cCs&|jD]}||jkr|j�|�q|Sr�)r�rR�rr�r�r9r9r:�__iadd__
s

zAddressList.__iadd__cCs.td�}|jD]}||jkr|j�|�q|Sr�r�r�r9r9r:�__sub__s


zAddressList.__sub__cCs&|jD]}||jkr|j�|�q|Sr�)r��remover�r9r9r:�__isub__s

zAddressList.__isub__cCs
|j|Sr�)r�)rrTr9r9r:�__getitem__#szAddressList.__getitem__N)r�r�r�r�r�r�r�r�r�r�r�r9r9r9r:r��s	r�)r��__all__rlrnr�r��
COMMASPACErSrNrYrr5rrrrtr�r9r9r9r:�<module>sd���	u	

/X�9�@s�dZddlZddlmZddlmZddlmZdddgZGd	d
�d
�Z	dd�Z
d
d�ZGdd�de	ejd�Z
eGdd�de
��Ze�ZdS)zwPolicy framework for the email package.

Allows fine grained feature control of how the package parses and emits data.
�N)�header)�charset)�_has_surrogates�Policy�Compat32�compat32cs@eZdZdZ�fdd�Zdd�Zdd�Zdd	�Zd
d�Z�Z	S)�_PolicyBasea�Policy Object basic framework.

    This class is useless unless subclassed.  A subclass should define
    class attributes with defaults for any values that are to be
    managed by the Policy object.  The constructor will then allow
    non-default values to be set for these attributes at instance
    creation time.  The instance will be callable, taking these same
    attributes keyword arguments, and returning a new instance
    identical to the called instance except for those values changed
    by the keyword arguments.  Instances may be added, yielding new
    instances with any non-default values from the right hand
    operand overriding those in the left hand operand.  That is,

        A + B == A(<non-default values of B>)

    The repr of an instance can be used to reconstruct the object
    if and only if the repr of the values can be used to reconstruct
    those values.

    csH|��D]:\}}t||�r.tt|��||�qtd�||jj���qdS)z�Create new Policy, possibly overriding some defaults.

        See class docstring for a list of overridable attributes.

        �*{!r} is an invalid keyword argument for {}N)	�items�hasattr�superr�__setattr__�	TypeError�format�	__class__�__name__)�self�kw�name�value�r��'/usr/lib/python3.8/email/_policybase.py�__init__)s
��z_PolicyBase.__init__cCs*dd�|j��D�}d�|jjd�|��S)NcSsg|]\}}d�||��qS)z{}={!r})r)�.0rrrrr�
<listcomp>8s�z(_PolicyBase.__repr__.<locals>.<listcomp>z{}({})z, )�__dict__r
rrr�join)r�argsrrr�__repr__7s�z_PolicyBase.__repr__cKsr|j�|j�}|j��D]\}}t�|||�q|��D]4\}}t||�s^td�||jj	���t�|||�q8|S)z�Return a new instance with specified attributes changed.

        The new instance has the same attribute values as the current object,
        except for the changes passed in as keyword arguments.

        r	)
r�__new__rr
�objectr
rrrr)rr�	newpolicy�attrrrrr�clone<s
��z_PolicyBase.clonecCs,t||�rd}nd}t|�|jj|���dS)Nz'{!r} object attribute {!r} is read-onlyz!{!r} object has no attribute {!r})r�AttributeErrorrrr)rrr�msgrrrr
Ns
z_PolicyBase.__setattr__cCs|jf|j�S)z�Non-default values from right operand override those from left.

        The object returned is a new instance of the subclass.

        )r$r)r�otherrrr�__add__Usz_PolicyBase.__add__)
r�
__module__�__qualname__�__doc__rrr$r
r(�
__classcell__rrrrrsrcCs,|�dd�d}|�dd�d}|d|S)N�
�r)�rsplit�split)�doc�	added_docrrr�_append_doc^sr3cCs�|jr(|j�d�r(t|jdj|j�|_|j��D]V\}}|jr2|j�d�r2dd�|jD�D]*}tt||�d�}|r\t||j�|_q2q\q2|S)N�+rcss |]}|��D]
}|VqqdS)N)�mro)r�base�crrr�	<genexpr>hs
z%_extend_docstrings.<locals>.<genexpr>r+)r+�
startswithr3�	__bases__rr
�getattr)�clsrr#r7r1rrr�_extend_docstringscsr=c@s�eZdZdZdZdZdZdZdZdZ	dd�Z
d	d
�Zdd�Ze
jd
d��Ze
jdd��Ze
jdd��Ze
jdd��Ze
jdd��ZdS)raI	Controls for how messages are interpreted and formatted.

    Most of the classes and many of the methods in the email package accept
    Policy objects as parameters.  A Policy object contains a set of values and
    functions that control how input is interpreted and how output is rendered.
    For example, the parameter 'raise_on_defect' controls whether or not an RFC
    violation results in an error being raised or not, while 'max_line_length'
    controls the maximum length of output lines when a Message is serialized.

    Any valid attribute may be overridden when a Policy is created by passing
    it as a keyword argument to the constructor.  Policy objects are immutable,
    but a new Policy object can be created with only certain values changed by
    calling the Policy instance with keyword arguments.  Policy objects can
    also be added, producing a new Policy object in which the non-default
    attributes set in the right hand operand overwrite those specified in the
    left operand.

    Settable attributes:

    raise_on_defect     -- If true, then defects should be raised as errors.
                           Default: False.

    linesep             -- string containing the value to use as separation
                           between output lines.  Default '\n'.

    cte_type            -- Type of allowed content transfer encodings

                           7bit  -- ASCII only
                           8bit  -- Content-Transfer-Encoding: 8bit is allowed

                           Default: 8bit.  Also controls the disposition of
                           (RFC invalid) binary data in headers; see the
                           documentation of the binary_fold method.

    max_line_length     -- maximum length of lines, excluding 'linesep',
                           during serialization.  None or 0 means no line
                           wrapping is done.  Default is 78.

    mangle_from_        -- a flag that, when True escapes From_ lines in the
                           body of the message by putting a `>' in front of
                           them. This is used when the message is being
                           serialized by a generator. Default: True.

    message_factory     -- the class to use to create new message objects.
                           If the value is None, the default is Message.

    Fr-�8bit�NNcCs|jr
|�|�||�dS)aZBased on policy, either raise defect or call register_defect.

            handle_defect(obj, defect)

        defect should be a Defect subclass, but in any case must be an
        Exception subclass.  obj is the object on which the defect should be
        registered if it is not raised.  If the raise_on_defect is True, the
        defect is raised as an error, otherwise the object and the defect are
        passed to register_defect.

        This method is intended to be called by parsers that discover defects.
        The email package parsers always call it with Defect instances.

        N)�raise_on_defect�register_defect�r�obj�defectrrr�
handle_defect�szPolicy.handle_defectcCs|j�|�dS)a�Record 'defect' on 'obj'.

        Called by handle_defect if raise_on_defect is False.  This method is
        part of the Policy API so that Policy subclasses can implement custom
        defect handling.  The default implementation calls the append method of
        the defects attribute of obj.  The objects used by the email package by
        default that get passed to this method will always have a defects
        attribute with an append method.

        N)�defects�appendrBrrrrA�szPolicy.register_defectcCsdS)a[Return the maximum allowed number of headers named 'name'.

        Called when a header is added to a Message object.  If the returned
        value is not 0 or None, and there are already a number of headers with
        the name 'name' equal to the value returned, a ValueError is raised.

        Because the default behavior of Message's __setitem__ is to append the
        value to the list of headers, it is easy to create duplicate headers
        without realizing it.  This method allows certain headers to be limited
        in the number of instances of that header that may be added to a
        Message programmatically.  (The limit is not observed by the parser,
        which will faithfully produce as many headers as exist in the message
        being parsed.)

        The default implementation returns None for all header names.
        Nr)rrrrr�header_max_count�szPolicy.header_max_countcCst�dS)aZGiven a list of linesep terminated strings constituting the lines of
        a single header, return the (name, value) tuple that should be stored
        in the model.  The input lines should retain their terminating linesep
        characters.  The lines passed in by the email package may contain
        surrogateescaped binary data.
        N��NotImplementedError)r�sourcelinesrrr�header_source_parse�szPolicy.header_source_parsecCst�dS)z�Given the header name and the value provided by the application
        program, return the (name, value) that should be stored in the model.
        NrI�rrrrrr�header_store_parse�szPolicy.header_store_parsecCst�dS)awGiven the header name and the value from the model, return the value
        to be returned to the application program that is requesting that
        header.  The value passed in by the email package may contain
        surrogateescaped binary data if the lines were parsed by a BytesParser.
        The returned value should not contain any surrogateescaped data.

        NrIrMrrr�header_fetch_parse�s	zPolicy.header_fetch_parsecCst�dS)a�Given the header name and the value from the model, return a string
        containing linesep characters that implement the folding of the header
        according to the policy controls.  The value passed in by the email
        package may contain surrogateescaped binary data if the lines were
        parsed by a BytesParser.  The returned value should not contain any
        surrogateescaped data.

        NrIrMrrr�fold�s
zPolicy.foldcCst�dS)a%Given the header name and the value from the model, return binary
        data containing linesep characters that implement the folding of the
        header according to the policy controls.  The value passed in by the
        email package may contain surrogateescaped binary data.

        NrIrMrrr�fold_binaryszPolicy.fold_binary)rr)r*r+r@�linesep�cte_type�max_line_length�mangle_from_�message_factoryrErArH�abc�abstractmethodrLrNrOrPrQrrrrrps(0

	



)�	metaclassc@sLeZdZdZdZdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�ZdS)rz�+
    This particular policy is the backward compatibility Policy.  It
    replicates the behavior of the email package version 5.1.
    TcCs0t|t�s|St|�r(tj|tj|d�S|SdS)N�r�header_name)�
isinstance�strrr�Header�_charset�UNKNOWN8BITrMrrr�_sanitize_headers

�zCompat32._sanitize_headercCs>|d�dd�\}}|�d�d�|dd��}||�d�fS)a:+
        The name is parsed as everything up to the ':' and returned unmodified.
        The value is determined by stripping leading whitespace off the
        remainder of the first line, joining all subsequent lines together, and
        stripping any trailing carriage return or linefeed characters.

        r�:r.z 	�Nz
)r0�lstripr�rstrip)rrKrrrrrrL%szCompat32.header_source_parsecCs||fS)z>+
        The name and value are returned unmodified.
        rrMrrrrN1szCompat32.header_store_parsecCs|�||�S)z�+
        If the value contains binary data, it is converted into a Header object
        using the unknown-8bit charset.  Otherwise it is returned unmodified.
        )rarMrrrrO7szCompat32.header_fetch_parsecCs|j||dd�S)a+
        Headers are folded using the Header folding algorithm, which preserves
        existing line breaks in the value, and wraps each resulting line to the
        max_line_length.  Non-ASCII binary data are CTE encoded using the
        unknown-8bit charset.

        T��sanitize)�_foldrMrrrrP>sz
Compat32.foldcCs"|j|||jdkd�}|�dd�S)a�+
        Headers are folded using the Header folding algorithm, which preserves
        existing line breaks in the value, and wraps each resulting line to the
        max_line_length.  If cte_type is 7bit, non-ascii binary data is CTE
        encoded using the unknown-8bit charset.  Otherwise the original source
        header is used, with its existing line breaks and/or binary data.

        �7bitrf�ascii�surrogateescape)rhrS�encode)rrr�foldedrrrrQHs	zCompat32.fold_binarycCs�g}|�d|�t|t�r\t|�rL|r<tj|tj|d�}qZ|�|�d}q`tj||d�}n|}|dk	r�d}|jdk	r||j}|�|j	|j
|d��|�|j
�d�|�S)Nz%s: rZ)r[r)rR�
maxlinelenrc)rGr\r]rrr^r_r`rTrlrRr)rrrrg�parts�hrnrrrrhTs(
�


zCompat32._foldN)rr)r*r+rUrarLrNrOrPrQrhrrrrrs
)r+rW�emailrrr_�email.utilsr�__all__rr3r=�ABCMetarrrrrrr�<module>s �L
 fX��@stdZddddddgZddlmZdd	lmZmZd
ZdZdZ	d
Z
dd�Zddd�Zdefdd�Z
dd�ZeZeZdS)a�Base64 content transfer encoding per RFCs 2045-2047.

This module handles the content transfer encoding method defined in RFC 2045
to encode arbitrary 8-bit data using the three 8-bit bytes in four 7-bit
characters encoding known as Base64.

It is used in the MIME standards for email to attach images, audio, and text
using some 8-bit character sets to messages.

This module provides an interface to encode and decode both headers and bodies
with Base64 encoding.

RFC 2045 defines a method for including character set information in an
`encoded-word' in a header.  This method is commonly used for 8-bit real names
in To:, From:, Cc:, etc. fields, as well as Subject: lines.

This module does not do the line wrapping or end-of-line character conversion
necessary for proper internationalized headers; it only does dumb encoding and
decoding.  To deal with the various line wrapping issues, use the email.header
module.
�body_decode�body_encode�decode�decodestring�
header_encode�
header_length�)�	b64encode)�
b2a_base64�
a2b_base64z
�
��cCs*tt|�d�\}}|d}|r&|d7}|S)z6Return the length of s when it is encoded with base64.��)�divmod�len)�	bytearray�groups_of_3�leftover�n�r�&/usr/lib/python3.8/email/base64mime.pyr2s
�
iso-8859-1cCs6|sdSt|t�r|�|�}t|��d�}d||fS)z�Encode a single header line with Base64 encoding in a given charset.

    charset names the character set to use to encode the header.  It defaults
    to iso-8859-1.  Base64 encoding is defined in RFC 2045.
    r�asciiz=?%s?b?%s?=)�
isinstance�str�encoderr)�header_bytes�charset�encodedrrrr=s

�LcCs~|s|Sg}|dd}tdt|�|�D]J}t||||���d�}|�t�rh|tkrh|dd�|}|�|�q(t�|�S)a1Encode a string with base64.

    Each line will be wrapped at, at most, maxlinelen characters (defaults to
    76 characters).

    Each line of encoded text will end with eol, which defaults to "\n".  Set
    this to "\r\n" if you will be using the result of this function directly
    in an email.
    rrrrN���)	�rangerr	r�endswith�NL�append�EMPTYSTRING�join)�s�
maxlinelen�eol�encvec�
max_unencoded�i�encrrrrLs
cCs.|s
t�St|t�r"t|�d��St|�SdS)z�Decode a raw base64 string, returning a bytes object.

    This function does not parse a full MIME header value encoded with
    base64 (like =?iso-8859-1?b?bmloISBuaWgh?=) -- please use the high
    level email.header class for that functionality.
    zraw-unicode-escapeN)�bytesrrr
r)�stringrrrrfs

N)r)�__doc__�__all__�base64r�binasciir	r
�CRLFr$r&�MISC_LENrrrrrrrrrr�<module>s&�

X�,�@srddddgZddlmZddlZddlZddlmZddlmZd	Z	d
Z
dZdZd
Z
dZdZe	e	dfe	e	dfe	e	dfe	e	dfe	e	dfe	e	dfe	e	dfe	e	dfe	e	dfe	e	dfe	e	dfe	e	dfde
e
dfe
e
dfe
ddfe
ddfe
ddfe
e
dfee
dfd�Zddddddddddddddddddddddd d
d!�Zd"d#dd$�Zd+d%d�Zd&d�Zd'd�Zd(d)�ZGd*d�d�ZdS),�Charset�	add_alias�add_charset�	add_codec�)�partialN)�errors)�encode_7or8bit�����us-asciizunknown-8bit�)NNN�iso-2022-jp�utf-8)�
iso-8859-1�
iso-8859-2�
iso-8859-3�
iso-8859-4�
iso-8859-9�iso-8859-10�iso-8859-13�iso-8859-14�iso-8859-15�iso-8859-16zwindows-1252�visciir
�big5�gb2312�euc-jp�	shift_jisrzkoi8-rrrrrrrrrrrrzks_c_5601-1987rzeuc-kr)�latin_1zlatin-1�latin_2zlatin-2�latin_3zlatin-3�latin_4zlatin-4�latin_5zlatin-5�latin_6zlatin-6�latin_7zlatin-7�latin_8zlatin-8�latin_9zlatin-9�latin_10zlatin-10�cp949�euc_jp�euc_kr�ascii�eucgb2312_cn�big5_tw)rrr
cCs"|tkrtd��|||ft|<dS)a>Add character set properties to the global registry.

    charset is the input character set, and must be the canonical name of a
    character set.

    Optional header_enc and body_enc is either Charset.QP for
    quoted-printable, Charset.BASE64 for base64 encoding, Charset.SHORTEST for
    the shortest of qp or base64 encoding, or None for no encoding.  SHORTEST
    is only valid for header_enc.  It describes how message headers and
    message bodies in the input charset are to be encoded.  Default is no
    encoding.

    Optional output_charset is the character set that the output should be
    in.  Conversions will proceed from input charset, to Unicode, to the
    output charset when the method Charset.convert() is called.  The default
    is to output in the same character set as the input.

    Both input_charset and output_charset must have Unicode codec entries in
    the module's charset-to-codec mapping; use add_codec(charset, codecname)
    to add codecs the module does not know about.  See the codecs module's
    documentation for more information.
    z!SHORTEST not allowed for body_encN)�SHORTEST�
ValueError�CHARSETS)�charset�
header_enc�body_enc�output_charset�r7�#/usr/lib/python3.8/email/charset.pyrmscCs|t|<dS)z�Add a character set alias.

    alias is the alias name, e.g. latin-1
    canonical is the character set's canonical name, e.g. iso-8859-1
    N)�ALIASES)�alias�	canonicalr7r7r8r�scCs|t|<dS)a$Add a codec that map characters in the given charset to/from Unicode.

    charset is the canonical name of a character set.  codecname is the name
    of a Python codec, as appropriate for the second argument to the unicode()
    built-in, or to the encode() method of a Unicode string.
    N)�	CODEC_MAP)r3�	codecnamer7r7r8r�scCs"|tkr|�dd�S|�|�SdS)Nr-�surrogateescape)�UNKNOWN8BIT�encode)�string�codecr7r7r8�_encode�srCc@s\eZdZdZefdd�Zdd�Zdd�Zdd	�Zd
d�Z	dd
�Z
dd�Zdd�Zdd�Z
dS)ra@	Map character sets to their email properties.

    This class provides information about the requirements imposed on email
    for a specific character set.  It also provides convenience routines for
    converting between character sets, given the availability of the
    applicable codecs.  Given a character set, it will do its best to provide
    information on how to use that character set in an email in an
    RFC-compliant way.

    Certain character sets must be encoded with quoted-printable or base64
    when used in email headers or bodies.  Certain character sets must be
    converted outright, and are not allowed in email.  Instances of this
    module expose the following information about a character set:

    input_charset: The initial character set specified.  Common aliases
                   are converted to their `official' email names (e.g. latin_1
                   is converted to iso-8859-1).  Defaults to 7-bit us-ascii.

    header_encoding: If the character set must be encoded before it can be
                     used in an email header, this attribute will be set to
                     Charset.QP (for quoted-printable), Charset.BASE64 (for
                     base64 encoding), or Charset.SHORTEST for the shortest of
                     QP or BASE64 encoding.  Otherwise, it will be None.

    body_encoding: Same as header_encoding, but describes the encoding for the
                   mail message's body, which indeed may be different than the
                   header encoding.  Charset.SHORTEST is not allowed for
                   body_encoding.

    output_charset: Some character sets must be converted before they can be
                    used in email headers or bodies.  If the input_charset is
                    one of them, this attribute will contain the name of the
                    charset output will be converted to.  Otherwise, it will
                    be None.

    input_codec: The name of the Python codec used to convert the
                 input_charset to Unicode.  If no conversion codec is
                 necessary, this attribute will be None.

    output_codec: The name of the Python codec used to convert Unicode
                  to the output_charset.  If no conversion codec is necessary,
                  this attribute will have the same value as the input_codec.
    cCs�z$t|t�r|�d�n
t|d�}Wntk
rBt�|��YnX|��}t�||�|_	t
�|j	ttdf�\}}}|s~|j	}||_
||_t�||�|_t�|j	|j	�|_t�|j|j�|_dS)Nr-)�
isinstance�strr@�UnicodeErrorr�CharsetError�lowerr9�get�
input_charsetr2r0�BASE64�header_encoding�
body_encodingr6r<�input_codec�output_codec)�selfrJ�henc�benc�convr7r7r8�__init__�s,
�
��zCharset.__init__cCs
|j��S�N)rJrH�rPr7r7r8�__repr__�szCharset.__repr__cCst|�t|���kSrU)rErH)rP�otherr7r7r8�__eq__�szCharset.__eq__cCs2|jtkst�|jtkrdS|jtkr*dStSdS)aPReturn the content-transfer-encoding used for body encoding.

        This is either the string `quoted-printable' or `base64' depending on
        the encoding used, or it is a function in which case you should call
        the function with a single argument, the Message object being
        encoded.  The function should then set the Content-Transfer-Encoding
        header itself to whatever is appropriate.

        Returns "quoted-printable" if self.body_encoding is QP.
        Returns "base64" if self.body_encoding is BASE64.
        Returns conversion function otherwise.
        zquoted-printable�base64N)rMr0�AssertionError�QPrKrrVr7r7r8�get_body_encoding�s


zCharset.get_body_encodingcCs|jp
|jS)z�Return the output character set.

        This is self.output_charset if that is not None, otherwise it is
        self.input_charset.
        )r6rJrVr7r7r8�get_output_charsetszCharset.get_output_charsetcCs6|jpd}t||�}|�|�}|dkr*|S|�||�S)a�Header-encode a string by converting it first to bytes.

        The type of encoding (base64 or quoted-printable) will be based on
        this charset's `header_encoding`.

        :param string: A unicode string for the header.  It must be possible
            to encode this string to bytes using the character set's
            output codec.
        :return: The encoded string, with RFC 2047 chrome.
        r
N)rOrC�_get_encoder�
header_encode)rPrArB�header_bytes�encoder_moduler7r7r8r`s


zCharset.header_encodecCs|jpd}t||�}|�|�}t|j|d�}|��}t|�t}g}	g}
t|�|}|D]�}|
�	|�t
�|
�}
|�t|
|��}||krX|
�
�|	s�|
s�|	�	d�n.|	r�dnd}t
�|
�}t||�}|	�	||��|g}
t|�|}qXt
�|
�}t||�}|	�	||��|	S)afHeader-encode a string by converting it first to bytes.

        This is similar to `header_encode()` except that the string is fit
        into maximum line lengths as given by the argument.

        :param string: A unicode string for the header.  It must be possible
            to encode this string to bytes using the character set's
            output codec.
        :param maxlengths: Maximum line length iterator.  Each element
            returned from this iterator will provide the next maximum line
            length.  This parameter is used as an argument to built-in next()
            and should never be exhausted.  The maximum line lengths should
            not count the RFC 2047 chrome.  These line lengths are only a
            hint; the splitter does the best it can.
        :return: Lines of encoded strings, each with RFC 2047 chrome.
        r
)r3N� r)rOrCr_rr`r^�len�RFC2047_CHROME_LEN�next�append�EMPTYSTRING�join�
header_length�pop)rPrA�
maxlengthsrBrarb�encoderr3�extra�lines�current_line�maxlen�	character�	this_line�length�	separator�joined_liner7r7r8�header_encode_lines*s6








zCharset.header_encode_linescCs`|jtkrtjS|jtkr tjS|jtkrXtj�|�}tj�|�}||krPtjStjSndSdSrU)rLrK�email�
base64mimer\�
quoprimimer0rj)rPra�len64�lenqpr7r7r8r_hs


zCharset._get_encodercCs�|s|S|jtkr4t|t�r(|�|j�}tj�|�S|jt	krjt|t�rT|�|j�}|�
d�}tj�|�St|t�r�|�|j��
d�}|SdS)avBody-encode a string by converting it first to bytes.

        The type of encoding (base64 or quoted-printable) will be based on
        self.body_encoding.  If body_encoding is None, we assume the
        output charset is a 7bit encoding, so re-encoding the decoded
        string using the ascii codec produces the correct string version
        of the content.
        �latin1r-N)rMrKrDrEr@r6rxry�body_encoder\�decoderz)rPrAr7r7r8r~ws	





zCharset.body_encodeN)�__name__�
__module__�__qualname__�__doc__�DEFAULT_CHARSETrTrWrYr]r^r`rwr_r~r7r7r7r8r�s+!>)NNN)�__all__�	functoolsr�email.base64mimerx�email.quoprimimer�email.encodersrr\rKr0rer�r?rhr2r9r<rrrrCrr7r7r7r8�<module>s��� ��
	
X��@s.ddlZddlZddlZddlZddlmZGdd�d�Ze�Zd%dd�Ze�	de�d	d
�Z
d��D]Ze�	ee
�qfdd
�Z
d��D]Ze�	dee
�q�dd�Ze�	de�dd�Zdd�Zdd�Zdd�Zd&dd�Ze�ee�d'd d!�Ze�ejje�d(d#d$�ZeeefD]Ze�ee��qdS))�N)�
quoprimimec@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�ContentManagercCsi|_i|_dS�N)�get_handlers�set_handlers)�self�r�*/usr/lib/python3.8/email/contentmanager.py�__init__	szContentManager.__init__cCs||j|<dSr)r)r�key�handlerrrr	�add_get_handler
szContentManager.add_get_handlercOs||��}||jkr(|j||f|�|�S|��}||jkrP|j||f|�|�Sd|jkrp|jd|f|�|�St|��dS)N�)�get_content_typer�get_content_maintype�KeyError)r�msg�args�kw�content_type�maintyperrr	�get_contents


zContentManager.get_contentcCs||j|<dSr)r)r�typekeyrrrr	�add_set_handlerszContentManager.add_set_handlercOs>|��dkrtd��|�||�}|��|||f|�|�dS)N�	multipartz"set_content not valid on multipart)r�	TypeError�_find_set_handler�
clear_content)rr�objrrrrrr	�set_contents
zContentManager.set_contentc	Cs�d}t|�jD]�}||jkr*|j|S|j}t|dd�}|rNd�||f�n|}|dkr^|}||jkrv|j|S||jkr�|j|S|j}||jkr|j|Sqd|jkr�|jdSt|��dS)N�
__module__r�.)�type�__mro__r�__qualname__�getattr�join�__name__r)	rrr�full_path_for_error�typ�qname�modname�	full_path�namerrr	r's&





z ContentManager._find_set_handlerN)	r'r r$r
r
rrrrrrrr	rs	r�replacecCs&|jdd�}|�dd�}|j||d�S)NT��decode�charset�ASCII)�errors)�get_payload�	get_paramr0)rr3�contentr1rrr	�get_text_content@sr7�textcCs|jdd�S)NTr/�r4�rrrr	�get_non_text_contentGsr;zaudio image video applicationcCs
|�d�S�Nrr9r:rrr	�get_message_contentMsr=zrfc822 external-bodyzmessage/cCst|�d��Sr<)�bytesr4r:rrr	�%get_and_fixup_unknown_message_contentSsr?�messagec
s�d�||f�|d<|r�t|dd�s<|j��fdd�|D�}z(|D]}|jrV|jd�|||j<qBWn@tjjk
r�}ztd�	|j
|jd���|�W5d}~XYnXdS)	N�/zContent-Typerr-csg|]}�j��|g���qSr)�header_factory�header_source_parse)�.0�header��mprr	�
<listcomp>ds�z _prepare_set.<locals>.<listcomp>zInvalid header: {})�policy)r&�hasattrrI�defectsr-�emailr3�HeaderDefect�
ValueError�format�fold)rr�subtype�headersrE�excrrFr	�_prepare_set_s$
�
��rTcCsx|dkr|dk	rd}|dk	r$||d<|dk	r>|jd|ddd�|dk	rN||d<|dk	rt|��D]\}}|�||�q^dS)N�
attachmentzContent-Disposition�filenameT)rEr.z
Content-ID)�	set_param�items)r�dispositionrV�cid�paramsr�valuerrr	�
_finalize_setps�r]cCsVg}|dd}tdt|�|�D]*}||||�}|�t�|��d��q d�|�S)N��r�asciir)�range�len�append�binascii�
b2a_base64r0r&)�data�max_line_length�
encoded_lines�unencoded_bytes_per_line�i�thislinerrr	�_encode_base64�srlcs�|�|���}|j�d���fdd�}dd�}|dkr�tdd�|D�dd	�|jkr�zd
||��d�fWStk
rzYnX|jdkr�d||��dd�fS||dd
��}t�	|�d�|j�}t
�|�}	t|�t|	�kr�d}nd}t|�d
kr�||fS|d
k�r||��d�}
nj|dk�r,||��dd�}
nN|dk�rPt�	||��d�|j�}
n*|dk�rlt
||�|j�}
ntd�|���||
fS)Nr`cs��|��Sr�r&��lines��lineseprr	�
embedded_body��z#_encode_text.<locals>.embedded_bodycSsd�|�dS)N�
rmrnrrr	�normal_body�rsz!_encode_text.<locals>.normal_bodycss|]}t|�VqdSr)rb)rD�xrrr	�	<genexpr>�sz_encode_text.<locals>.<genexpr>r)�default�7bit�8bit�surrogateescape�
zlatin-1�base64�quoted-printablez$Unknown content transfer encoding {})�encode�
splitlinesrq�maxrgr0�UnicodeDecodeError�cte_typer�body_encoderdrerbrlrNrO)�stringr1�cterIrorrru�sniff�sniff_qp�sniff_base64rfrrpr	�_encode_text�sD
�



�
r��plain�utf-8c
Csdt|d||	�t||||j�\}}
|�|
�|jdtjj�||�dd�||d<t	|||||�dS)Nr8r1T)r.�Content-Transfer-Encoding)
rTr�rI�set_payloadrWrLr1�ALIASES�getr])rr�rQr1r�rYrVrZr[rR�payloadrrr	�set_text_content�s
�r��rfc822c		Cs�|dkrtd��|dkr@|dkr.td�|���|dkr:dn|}n0|dkrd|dkr^td	�|���d
}n|dkrpd
}t|d||�|�|g�||d<t|||||�dS)
N�partialz4message/partial is not supported for Message objectsr�)Nryrz�binaryz*message/rfc822 parts do not support cte={}rzz
external-body)Nryz1message/external-body parts do not support cte={}ryr@r�)rNrOrTr�r])	rr@rQr�rYrVrZr[rRrrr	�set_message_content�s(��r�r}c

Cs�t||||	�|dkr(t||jjd�}nN|dkrNtj|dddd�}|�d�}n(|dkrb|�d�n|d	krv|�dd
�}|�|�||d<t	|||||�dS)Nr})rgr~FT)�istextrE�	quotetabsr`ry)rzr�r{r�)
rTrlrIrgrd�b2a_qpr0rr�r])
rrfrrQr�rYrVrZr[rRrrr	�set_bytes_content�s
r�)r.)r�r�NNNNNN)r�NNNNNN)r}NNNNN)rd�
email.charsetrL�
email.message�email.errorsrr�raw_data_managerr7r
r;�splitrr=rQr?rTr]rlr�r�r�strr�r@�Messager�r>�	bytearray�
memoryviewr)rrrr	�<module>s^6
�	'�
�
�
X<�@sTdZddddgZddlmZddlmZdd	�Zd
d�Z	dd�Z
dd�Zd
d�ZdS)z Encodings and related functions.�encode_7or8bit�
encode_base64�encode_noop�
encode_quopri�)�encodebytes)�encodestringcCst|dd�}|�dd�S)NT)�	quotetabs� s=20)�
_encodestring�replace)�s�enc�r�$/usr/lib/python3.8/email/encoders.py�_qencodesrcCs0|jdd�}tt|�d�}|�|�d|d<dS)zlEncode the message's payload in Base64.

    Also, add an appropriate Content-Transfer-Encoding header.
    T��decode�ascii�base64�Content-Transfer-EncodingN)�get_payload�str�_bencode�set_payload��msg�orig�encdatarrrrs
cCs*|jdd�}t|�}|�|�d|d<dS)zvEncode the message's payload in quoted-printable.

    Also, add an appropriate Content-Transfer-Encoding header.
    Trzquoted-printablerN)rrrrrrrr&s
cCsX|jdd�}|dkr d|d<dSz|�d�Wntk
rJd|d<Yn
Xd|d<dS)z9Set the Content-Transfer-Encoding header to 7bit or 8bit.TrN�7bitrr�8bit)rr�UnicodeError)rrrrrr2scCsdS)zDo nothing.Nr)rrrrrDsN)
�__doc__�__all__rrr�quoprirr
rrrrrrrrr�<module>s�X�@s�dZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGd	d
�d
ee�ZGdd�de�ZGd
d�de	�Z
Gdd�de
�ZGdd�de
�ZGdd�de
�Z
Gdd�de
�ZGdd�de
�ZGdd�de
�ZeZGdd�de
�ZGdd�de
�ZGdd �d e
�ZGd!d"�d"e
�ZGd#d$�d$e
�ZGd%d&�d&e
�ZGd'd(�d(e
�ZGd)d*�d*e�ZGd+d,�d,e�ZGd-d.�d.e�ZGd/d0�d0e�ZGd1d2�d2e�Zd3S)4z email package exception classes.c@seZdZdZdS)�MessageErrorz+Base class for errors in the email package.N��__name__�
__module__�__qualname__�__doc__�rr�"/usr/lib/python3.8/email/errors.pyrsrc@seZdZdZdS)�MessageParseErrorz&Base class for message parsing errors.Nrrrrrr	sr	c@seZdZdZdS)�HeaderParseErrorzError while parsing headers.Nrrrrrr
sr
c@seZdZdZdS)�
BoundaryErrorz#Couldn't find terminating boundary.Nrrrrrrsrc@seZdZdZdS)�MultipartConversionErrorz(Conversion to a multipart is prohibited.Nrrrrrrsrc@seZdZdZdS)�CharsetErrorzAn illegal charset was given.Nrrrrrr
sr
cs"eZdZdZd�fdd�	Z�ZS)�
MessageDefectz Base class for a message defect.Ncs|dk	rt��|�||_dS�N)�super�__init__�line)�selfr��	__class__rrr$szMessageDefect.__init__)N�rrrrr�
__classcell__rrrrr!src@seZdZdZdS)�NoBoundaryInMultipartDefectzBA message claimed to be a multipart but had no boundary parameter.Nrrrrrr)src@seZdZdZdS)�StartBoundaryNotFoundDefectz+The claimed start boundary was never found.Nrrrrrr,src@seZdZdZdS)�CloseBoundaryNotFoundDefectzEA start boundary was found, but not the corresponding close boundary.Nrrrrrr/src@seZdZdZdS)�#FirstHeaderLineIsContinuationDefectz;A message had a continuation line as its first header line.Nrrrrrr2src@seZdZdZdS)�MisplacedEnvelopeHeaderDefectz?A 'Unix-from' header was found in the middle of a header block.Nrrrrrr5src@seZdZdZdS)� MissingHeaderBodySeparatorDefectzEFound line with no leading whitespace and no colon before blank line.Nrrrrrr8src@seZdZdZdS)�!MultipartInvariantViolationDefectz?A message claimed to be a multipart but no subparts were found.Nrrrrrr=src@seZdZdZdS)�-InvalidMultipartContentTransferEncodingDefectzEAn invalid content transfer encoding was set on the multipart itself.Nrrrrrr@src@seZdZdZdS)�UndecodableBytesDefectz0Header contained bytes that could not be decodedNrrrrrr Csr c@seZdZdZdS)�InvalidBase64PaddingDefectz/base64 encoded sequence had an incorrect lengthNrrrrrr!Fsr!c@seZdZdZdS)�InvalidBase64CharactersDefectz=base64 encoded sequence had characters not in base64 alphabetNrrrrrr"Isr"c@seZdZdZdS)�InvalidBase64LengthDefectz4base64 encoded sequence had invalid length (1 mod 4)Nrrrrrr#Lsr#cs eZdZdZ�fdd�Z�ZS)�HeaderDefectzBase class for a header defect.cst�j||�dSr)rr)r�args�kwrrrrTszHeaderDefect.__init__rrrrrr$Qsr$c@seZdZdZdS)�InvalidHeaderDefectz+Header is not valid, message gives details.Nrrrrrr'Wsr'c@seZdZdZdS)�HeaderMissingRequiredValuez(A header that must have a value had noneNrrrrrr(Zsr(cs(eZdZdZ�fdd�Zdd�Z�ZS)�NonPrintableDefectz8ASCII characters outside the ascii-printable range foundcst��|�||_dSr)rr�non_printables)rr*rrrr`szNonPrintableDefect.__init__cCsd�|j�S)Nz6the following ASCII non-printables found in header: {})�formatr*)rrrr�__str__ds�zNonPrintableDefect.__str__)rrrrrr,rrrrrr)]sr)c@seZdZdZdS)�ObsoleteHeaderDefectz0Header uses syntax declared obsolete by RFC 5322Nrrrrrr-hsr-c@seZdZdZdS)�NonASCIILocalPartDefectz(local_part contains non-ASCII charactersNrrrrrr.ksr.N)r�	Exceptionrr	r
r�	TypeErrorrr
�
ValueErrorrrrrrrr�MalformedHeaderDefectrrr r!r"r#r$r'r(r)r-r.rrrr�<module>s4X�)�@s�dZddgZddlZddlmZddlmZddlmZddl	m
Z
e�d	�Ze�d
�Z
e�d�Ze�d
�Ze�d�Zd
ZdZe�ZGdd�de�ZGdd�d�ZGdd�de�ZdS)aFeedParser - An email feed parser.

The feed parser implements an interface for incrementally parsing an email
message, line by line.  This has advantages for certain applications, such as
those reading email messages off a socket.

FeedParser.feed() is the primary interface for pushing new data into the
parser.  It returns when there's nothing more it can do with the available
data.  When you have no more data to push into the parser, call .close().
This completes the parsing and returns the root message object.

The other advantage of this parser is that it will never raise a parsing
exception.  Instead, when it finds something unexpected, it adds a 'defect' to
the current message.  Defects are just instances that live on the message
object's .defects attribute.
�
FeedParser�BytesFeedParser�N)�errors)�compat32)�deque)�StringIOz
\r\n|\r|\nz(\r\n|\r|\n)z(\r\n|\r|\n)\Zz%^(From |[\041-\071\073-\176]*:|[\t ])��
c@s`eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dS)�BufferedSubFileakA file-ish object that can have new data loaded into it.

    You can also push and pop line-matching predicates onto a stack.  When the
    current predicate matches the current line, a false EOF response
    (i.e. empty string) is returned instead.  This lets the parser adhere to a
    simple abstraction -- it parses until EOF closes the current message.
    cCs$tdd�|_t�|_g|_d|_dS)Nr)�newlineF)r�_partialr�_lines�	_eofstack�_closed��self�r�&/usr/lib/python3.8/email/feedparser.py�__init__5szBufferedSubFile.__init__cCs|j�|�dS�N)r�append)r�predrrr�push_eof_matcher@sz BufferedSubFile.push_eof_matchercCs
|j��Sr)r�poprrrr�pop_eof_matcherCszBufferedSubFile.pop_eof_matchercCs<|j�d�|�|j���|j�d�|j��d|_dS)NrT)r�seek�	pushlines�	readlines�truncaterrrrr�closeFs

zBufferedSubFile.closecCsL|js|jrdStS|j��}t|j�D]}||�r(|j�|�dSq(|S�Nr)r
r�NeedMoreData�popleft�reversedr�
appendleft)r�line�ateofrrr�readlineNs
zBufferedSubFile.readlinecCs|tk	st�|j�|�dSr)r!�AssertionErrorr
r$�rr%rrr�
unreadline`szBufferedSubFile.unreadlinecCsx|j�|�d|kr d|kr dS|j�d�|j��}|j�d�|j��|d�d�sj|j�|���|�|�dS)z$Push some new data into this object.r	�
Nr���)r�writerrr�endswithrr)r�data�partsrrr�pushes

zBufferedSubFile.pushcCs|j�|�dSr)r
�extend)r�linesrrrrzszBufferedSubFile.pushlinescCs|Srrrrrr�__iter__}szBufferedSubFile.__iter__cCs|��}|dkrt�|Sr )r'�
StopIterationr)rrr�__next__�szBufferedSubFile.__next__N)�__name__�
__module__�__qualname__�__doc__rrrrr'r*r1rr4r6rrrrr
-sr
c@s`eZdZdZded�dd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dS)rzA feed-style parser of email.N��policycCs�||_d|_|dkr<|jdkr2ddlm}||_qn|j|_n2||_z||jd�Wntk
rld|_YnXt�|_g|_	|�
�j|_d|_
d|_d|_dS)a_factory is called with no arguments to create a new message obj

        The policy keyword specifies a policy object that controls a number of
        aspects of the parser's operation.  The default policy maintains
        backward compatibility.

        FNr)�Messager;T)r<�_old_style_factory�message_factory�
email.messager=�_factory�	TypeErrorr
�_input�	_msgstack�	_parsegenr6�_parse�_cur�_last�_headersonly)rrAr<r=rrrr�s$

zFeedParser.__init__cCs
d|_dS)NT)rIrrrr�_set_headersonly�szFeedParser._set_headersonlycCs|j�|�|��dS)zPush more data into the parser.N)rCr1�_call_parse�rr/rrr�feed�szFeedParser.feedcCs&z|��Wntk
r YnXdSr)rFr5rrrrrK�szFeedParser._call_parsecCsR|j��|��|��}|jr$t�|��dkrN|��sNt�	�}|j
�||�|S)z<Parse all remaining data and return the root message object.�	multipart)rCrrK�_pop_messagerDr(�get_content_maintype�is_multipartr�!MultipartInvariantViolationDefectr<�
handle_defect)r�root�defectrrrr�s

�zFeedParser.closecCsn|jr|��}n|j|jd�}|jr<|j��dkr<|�d�|jrR|jd�|�|j�|�||_||_	dS)Nr;zmultipart/digestzmessage/rfc822r,)
r>rAr<rG�get_content_type�set_default_typerD�attachrrH)r�msgrrr�_new_message�s

zFeedParser._new_messagecCs(|j��}|jr|jd|_nd|_|S)Nr,)rDrrG)r�retvalrrrrO�s

zFeedParser._pop_messageccs$|��g}|jD]Z}|tkr&tVqt�|�sbt�|�s^t��}|j�	|j
|�|j�|�qn|�|�q|�
|�|jr�g}|j��}|tkr�tVq�|dkr�q�|�|�q�|j
�t�|��dS|j
��dk�r�|j�tj�|��D]}|tk�rtVq��qq�|��}|j��|j��}|tk�rDtV�q�qD�q|j��}|tk�rjtV�qD�qj�qD|dk�rx�q�|j�|�q�dS|j
��dk�r�|��D] }|tk�r�tV�q��qĐq�|��dS|j
��dk�r�|j
��}|dk�rRt��}|j�	|j
|�g}|jD]$}|tk�r.tV�q|�|��q|j
�t�|��dSt|j
�dd����dk�r�t��}|j�	|j
|�d|}t� d	t�!|�d
�}	d}
g}d}d}
|j��}|tk�r�tV�q�|dk�r�q�|	�|�}|�r�|�"d
��rd}
|�"d�}�q�|
�rr|�r^|d}t#�$|�}|�rP|dt%|�"d���|d<t�|�|j
_&d}
|j�|��q�|j��}|tk�r�tV�qr|	�|�}|�sr|j�|��q��qr|j�|	j�|��D] }|tk�r�tV�q��q�q�|j'��dk�rT|j'j(}|dk�rd|j'_(n:|dk	�r�t#�$|�}|�r�t%|�"d��}|d|�|j'_(nD|j'j)}t*|t��r�t#�$|�}|�r�|dt%|�"d���}||j'_)|j��|��|j
|_'n|
�s�t+�|�|��q�|
�r4t�,�}|j�	|j
|�|j
�t�|��g}|jD]}|tk�rtV�q�qt�|�|j
_(dS|
�sVt�-�}|j�	|j
|�dS|�rddg}ng}|jD]$}|tk�r�tV�qn|�|��qn|�r�|d}t.�|�}|�r�|t%|�"d��d�|d<t�|�|j
_(dSg}|jD]$}|tk�rtV�q�|�|��q�|j
�t�|��dS)Nrzmessage/delivery-status�messagerNzcontent-transfer-encoding�8bit)�7bitr]�binaryz--z(?P<sep>z4)(?P<end>--)?(?P<ws>[ \t]*)(?P<linesep>\r\n|\r|\n)?$TF�end�linesepr,r)/rZrCr!�headerRE�match�NLCREr� MissingHeaderBodySeparatorDefectr<rSrGr*r�_parse_headersrIr'�set_payload�EMPTYSTRING�joinrVrrErOrrP�get_boundary�NoBoundaryInMultipartDefect�str�get�lower�-InvalidMultipartContentTransferEncodingDefect�re�compile�escape�group�	NLCRE_eol�search�len�preamblerH�epilogue�_payload�
isinstancer(�StartBoundaryNotFoundDefect�CloseBoundaryNotFoundDefect�	NLCRE_bol)r�headersr%rUr3r[rY�boundary�	separator�
boundaryre�capturing_preamblerwra�close_boundary_seen�mo�lastline�eolmorxr`�payload�	firstline�bolmorrrrE�sb

















���

























zFeedParser._parsegenc	Csjd}g}t|�D�]8\}}|ddkrR|sFt�|�}|j�|j|�q|�|�q|rt|jj|j�|��dg}}|�	d�r�|dkr�t
�|�}|r�|dt|�
d���}|j�|�qn<|t|�dkr�|j�|�dSt�|�}|jj�|�q|�d�}|dk�r&t�d�}|jj�|�q|dk�s8td��|d|�}|g}q|�rf|jj|j�|��dS)	Nrrz 	zFrom ��:zMissing header name.z3_parse_headers fed line with no : and no leading WS)�	enumerater�#FirstHeaderLineIsContinuationDefectr<rSrGr�set_raw�header_source_parse�
startswithrtrurvrs�set_unixfromrCr*�MisplacedEnvelopeHeaderDefect�defects�find�InvalidHeaderDefectr()	rr3�
lastheader�	lastvalue�linenor%rUr��irrrrf�sH








zFeedParser._parse_headers)N)r7r8r9r:rrrJrMrKrrZrOrErfrrrrr�s

~cs eZdZdZ�fdd�Z�ZS)rz(Like FeedParser, but feed accepts bytes.cst��|�dd��dS)N�ascii�surrogateescape)�superrM�decoderL��	__class__rrrMszBytesFeedParser.feed)r7r8r9r:rM�
__classcell__rrr�rrs)r:�__all__rp�emailr�email._policybaser�collectionsr�iorrqrdr}rt�NLCRE_crackrbrh�NL�objectr!r
rrrrrr�<module>s(




[X�0�@s�dZdddgZddlZddlZddlZddlZddlmZddlm	Z	m
Z
ddlmZd	Z
d
Ze�d�Ze�dej�ZGd
d�d�ZGdd�de�ZdZGdd�de�Zeeejd��ZdeZejZdS)z:Classes to generate plain text from a message object tree.�	Generator�DecodedGenerator�BytesGenerator�N)�deepcopy)�StringIO�BytesIO)�_has_surrogates�_�
z
\r\n|\r|\nz^From c@s�eZdZdZd'dd�dd�Zdd�Zd(d	d
�Zdd�Zd
d�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�ZeZdd�Zdd�Zdd �Zd!d"�Zed)d#d$��Zed%d&��ZdS)*rz�Generates output from a Message object tree.

    This basic generator writes the message to the given file object as plain
    text.
    N��policycCs6|dkr|dkrdn|j}||_||_||_||_dS)a�Create the generator for message flattening.

        outfp is the output file-like object for writing the message to.  It
        must have a write() method.

        Optional mangle_from_ is a flag that, when True (the default if policy
        is not set), escapes From_ lines in the body of the message by putting
        a `>' in front of them.

        Optional maxheaderlen specifies the longest length for a non-continued
        header.  When a header line is longer (in characters, with tabs
        expanded to 8 spaces) than maxheaderlen, the header will split as
        defined in the Header class.  Set maxheaderlen to zero to disable
        header wrapping.  The default is 78, as recommended (but not required)
        by RFC 2822.

        The policy keyword specifies a policy object that controls a number of
        aspects of the generator's operation.  If no policy is specified,
        the policy associated with the Message object passed to the
        flatten method is used.

        NT)�mangle_from_�_fp�
_mangle_from_�maxheaderlenr)�self�outfpr
rr�r�%/usr/lib/python3.8/email/generator.py�__init__$szGenerator.__init__cCs|j�|�dS�N)r�write�r�srrrrDszGenerator.writeFcCs�|jdkr|jn|j}|dk	r*|j|d�}|jdk	rB|j|jd�}|j|_|�|j�|_d|_|�|j�|_|j}|j}zL||_||_|r�|�	�}|s�dt
�t
�
��}|�||j�|�
|�W5||_||_XdS)a�Print the message object tree rooted at msg to the output file
        specified when the Generator instance was created.

        unixfrom is a flag that forces the printing of a Unix From_ delimiter
        before the first object in the message tree.  If the original message
        has no From_ delimiter, a `standard' one is crafted.  By default, this
        is False to inhibit the printing of any From_ delimiter.

        Note that for subobjects, no From_ line is printed.

        linesep specifies the characters used to indicate a new line in
        the output.  The default value is determined by the policy specified
        when the Generator instance was created or, if none was specified,
        from the policy associated with the msg.

        N)�linesep��max_line_length�zFrom nobody )r�clonerr�_NL�_encode�_encoded_NL�_EMPTY�_encoded_EMPTY�get_unixfrom�time�ctimer�_write)r�msg�unixfromrr�old_gen_policy�old_msg_policy�ufromrrr�flattenHs,
zGenerator.flattencCs|j||jd|jd�S)z1Clone this generator with the exact same options.Nr)�	__class__rr)r�fprrrrys
�zGenerator.clonecCst�Sr)r�rrrr�_new_buffer�szGenerator._new_buffercCs|Srrrrrrr �szGenerator._encodecCsT|sdSt�|�}|dd�D]}|�|�|�|j�q|drP|�|d�dS)N���)�NLCRE�splitrr)r�lines�linerrr�_write_lines�s

zGenerator._write_linescCs�|j}z"d|_|��|_}|�|�W5||_|j}|`X|r�t|�}|�d�dkrd|d|d<n|�d|d�|�d|d�t|dd�}|dkr�|�|�n||�|j�	|�
��dS)N�content-transfer-encodingr�Content-Transfer-Encoding�content-type��_write_headers)r�
_munge_cter1�	_dispatchr�get�replace_header�getattrr<r�getvalue)rr(�oldfp�	munge_cte�sfp�methrrrr'�s&zGenerator._writecCst|��}|��}t�||f��dd�}t|d|d�}|dkrh|�dd�}t|d|d�}|dkrh|j}||�dS)N�-r	Z_handle_)�get_content_maintype�get_content_subtype�
UNDERSCORE�join�replacerA�
_writeBody)rr(�main�sub�specificrF�genericrrrr>�szGenerator._dispatchcCs6|��D]\}}|�|j�||��q|�|j�dSr)�	raw_itemsrr�foldr�rr(�h�vrrrr<�szGenerator._write_headerscCs�|��}|dkrdSt|t�s.tdt|���t|j�r~|�d�}|dk	r~t|�}|d=|�	||�|��}|d|df|_
|jr�t�
d|�}|�|�dS)Nzstring payload expected: %s�charsetr8r:�>From )�get_payload�
isinstance�str�	TypeError�typer�_payload�	get_paramr�set_payloadr=r�fcrerOr7)rr(�payloadrWrrr�_handle_text�s$


�zGenerator._handle_textcCs�g}|��}|dkrg}n(t|t�r2|�|�dSt|t�sB|g}|D]6}|��}|�|�}|j|d|jd�|�	|�
��qF|��}|s�|j�
|�}|�|�}|�|�|jdk	r�|jr�t�d|j�}	n|j}	|�|	�|�|j�|�d||j�|�r|j�|�d��|D],}
|�|jd||j�|j�|
��q|�|jd|d|j�|jdk	�r�|j�r�t�d|j�}n|j}|�|�dS)NF�r)rrXz--r)rYrZr[r�listr1rr-r�appendrB�get_boundaryr!rK�_make_boundary�set_boundary�preamblerrarOr7r�pop�epilogue)rr(�msgtexts�subparts�partr�g�boundary�alltextrj�	body_partrlrrr�_handle_multipartsJ







zGenerator._handle_multipartcCs0|j}|jdd�|_z|�|�W5||_XdS)Nrr)rrrt)rr(�prrr�_handle_multipart_signed<s
z"Generator._handle_multipart_signedcCs�g}|��D]t}|��}|�|�}|j|d|jd�|��}|�|j�}|rv|d|jkrv|�	|j�
|dd���q|�	|�q|j�|j�
|��dS)NFrdr2)
rYr1rr-rrBr4r!r#rfrKrr)rr(�blocksrorrp�textr5rrr�_handle_message_delivery_statusGs
z)Generator._handle_message_delivery_statuscCs^|��}|�|�}|j}t|t�rD|j|�d�d|jd�|��}n
|�	|�}|j
�|�dS)NrFrd)r1rr^rZrer-rYrrBr rr)rr(rrprbrrr�_handle_message\s




zGenerator._handle_messagecCsvt�tj�}dt|d}|dkr(|S|}d}|�dt�|�dtj�}|�	|�sXqr|dt
|�}|d7}q0|S)Nz===============z==rz^--z(--)?$�.r;)�random�	randrange�sys�maxsize�_fmt�_compile_re�re�escape�	MULTILINE�searchr[)�clsrx�tokenrq�b�counter�crerrrrhus

zGenerator._make_boundarycCst�||�Sr)r��compile�r�r�flagsrrrr��szGenerator._compile_re)NN)FN)N)�__name__�
__module__�__qualname__�__doc__rrr-rr1r r7r'r>r<rcrMrtrvryrz�classmethodrhr�rrrrrs.	� 
1'
:csPeZdZdZdd�Zdd�Zdd�Zdd	�Z�fd
d�ZeZ	e
dd
��Z�ZS)ra�Generates a bytes version of a Message object tree.

    Functionally identical to the base Generator except that the output is
    bytes and not string.  When surrogates were used in the input to encode
    bytes, these are decoded back to bytes for output.  If the policy has
    cte_type set to 7bit, then the message is transformed such that the
    non-ASCII bytes are properly content transfer encoded, using the charset
    unknown-8bit.

    The outfp object must accept bytes in its write method.
    cCs|j�|�dd��dS)N�ascii�surrogateescape)rr�encoderrrrr�szBytesGenerator.writecCst�Sr)rr0rrrr1�szBytesGenerator._new_buffercCs
|�d�S�Nr�)r�rrrrr �szBytesGenerator._encodecCs8|��D]\}}|j�|j�||��q|�|j�dSr)rRrrr�fold_binaryrrTrrrr<�szBytesGenerator._write_headerscs\|jdkrdSt|j�rH|jjdksH|jr:t�d|j�|_|�|j�ntt	|��
|�dS)N�7bitrX)r^rr�cte_typerrarOr7�superrrc)rr(�r.rrrc�s
zBytesGenerator._handle_textcCst�|�d�|�Sr�)r�r�r�r�rrrr��szBytesGenerator._compile_re)
r�r�r�r�rr1r r<rcrMr�r��
__classcell__rrr�rr�s
zD[Non-text (%(type)s) part of message omitted, filename %(filename)s]c@s(eZdZdZddd�dd�Zdd�ZdS)	rz�Generates a text representation of a message.

    Like the Generator base class, except that non-text parts are substituted
    with a format string representing the part.
    NrcCs.tj|||||d�|dkr$t|_n||_dS)a�Like Generator.__init__() except that an additional optional
        argument is allowed.

        Walks through all subparts of a message.  If the subpart is of main
        type `text', then it prints the decoded payload of the subpart.

        Otherwise, fmt is a format string that is used instead of the message
        payload.  fmt is expanded with the following keywords (in
        %(keyword)s format):

        type       : Full MIME type of the non-text part
        maintype   : Main MIME type of the non-text part
        subtype    : Sub-MIME type of the non-text part
        filename   : Filename of the non-text part
        description: Description associated with the non-text part
        encoding   : Content transfer encoding of the non-text part

        The default value for fmt is None, meaning

        [Non-text (%(type)s) part of message omitted, filename %(filename)s]
        rN)rr�_FMTr�)rrr
r�fmtrrrrr�s�zDecodedGenerator.__init__cCs�|��D]v}|��}|dkr2t|jdd�|d�q|dkr<qt|j|��|��|��|�d�|�dd�|�d	d
�d�|d�qdS)NrxF)�decode)�file�	multipartz
[no filename]zContent-Descriptionz[no description]r9z
[no encoding])r]�maintype�subtype�filename�description�encoding)	�walkrH�printrYr��get_content_typerI�get_filenamer?)rr(ror�rrrr>�s(���	�zDecodedGenerator._dispatch)NNN)r�r�r�r�rr>rrrrr�s
�r;z%%0%dd)r��__all__r�r~r%r|�copyr�iorr�email.utilsrrJ�NLr�r3r�rarrr�r�len�reprr�_widthr�rhrrrr�<module>s*

t3;X'@�@s�dZdddgZddlZddlZddlZddlZddlmZddlm	Z
e
jZdZd	Z
d
ZdZdZd
ZdZed�Zed�Ze�dejejB�Ze�d�Ze�d�ZejjZdd�Zddd�ZGdd�d�ZGdd�d�Z Gdd�de!�Z"dS)z+Header encoding and decoding functionality.�Header�
decode_header�make_header�N)�HeaderParseError)�charset�
� � z        ��Nz 	�us-asciizutf-8ai
  =\?                   # literal =?
  (?P<charset>[^?]*?)   # non-greedy up to the next ? is the charset
  \?                    # literal ?
  (?P<encoding>[qQbB])  # either a "q" or a "b", case insensitive
  \?                    # literal ?
  (?P<encoded>.*?)      # non-greedy up to the next ?= is the encoded string
  \?=                   # literal ?=
  z[\041-\176]+:$z
\n[^ \t]+:c	Cs�t|d�rdd�|jD�St�|�s.|dfgSg}|��D]�}t�|�}d}|r:|�d�}|rj|��}d}|r~|�|ddf�|rL|�d��	�}|�d��	�}|�d�}|�|||f�qLq:g}	t
|�D]J\}
}|
dkr�|dr�||
d	dr�||
dd��r�|	�|
d�q�t|	�D]}||=�qg}
|D]�\}}}|dk�rV|
�||f�n�|d
k�r|t
j�|�}|
�||f�n~|dk�r�t|�d}|�r�|d
dd|�7}zt
j�|�}Wn tjk
�r�td��YnX|
�||f�ntd|���q2g}d}}|
D]v\}}t|t��r,t|d�}|dk�r@|}|}nB||k�rb|�||f�|}|}n |dk�rz|t|7}n||7}�q|�||f�|S)a;Decode a message header value without converting charset.

    Returns a list of (string, charset) pairs containing each of the decoded
    parts of the header.  Charset is None for non-encoded parts of the header,
    otherwise a lower-case string containing the name of the character set
    specified in the encoded string.

    header may be a string that may or may not contain RFC2047 encoded words,
    or it may be a Header object.

    An email.errors.HeaderParseError may be raised when certain decoding error
    occurs (e.g. a base64 decoding exception).
    �_chunkscSs(g|] \}}t�|t|��t|�f�qS�)�_charset�_encode�str)�.0�stringrrr�"/usr/lib/python3.8/email/header.py�
<listcomp>Ms�z!decode_header.<locals>.<listcomp>NTrF���q�b�z===zBase64 decoding errorzUnexpected encoding: zraw-unicode-escape)�hasattrr
�ecre�search�
splitlines�split�pop�lstrip�append�lower�	enumerate�isspace�reversed�email�
quoprimime�
header_decode�len�
base64mime�decode�binascii�Errorr�AssertionError�
isinstancer�bytes�BSPACE)�header�words�line�parts�first�	unencodedr�encoding�encoded�droplist�n�w�d�
decoded_words�encoded_string�word�paderr�	collapsed�	last_word�last_charsetrrrr=s|
�




4







cCsFt|||d�}|D].\}}|dk	r4t|t�s4t|�}|�||�q|S)a�Create a Header from a sequence of pairs as returned by decode_header()

    decode_header() takes a header value string and returns a sequence of
    pairs of the format (decoded_string, charset) where charset is the string
    name of the character set.

    This function takes one of those sequence of pairs and returns a Header
    instance.  Optional maxlinelen, header_name, and continuation_ws are as in
    the Header constructor.
    )�
maxlinelen�header_name�continuation_wsN)rr0�Charsetr")�decoded_seqrFrGrH�h�srrrrr�s�c@sJeZdZddd�Zdd�Zdd	�Zdd
d�Zdd
�Zddd�Zdd�Z	dS)rNr�strictcCs||dkrt}nt|t�s t|�}||_||_g|_|dk	rH|�|||�|dkrTt}||_|dkrjd|_	nt
|�d|_	dS)aDCreate a MIME-compliant header that can contain many character sets.

        Optional s is the initial header value.  If None, the initial header
        value is not set.  You can later append to the header with .append()
        method calls.  s may be a byte string or a Unicode string, but see the
        .append() documentation for semantics.

        Optional charset serves two purposes: it has the same meaning as the
        charset argument to the .append() method.  It also sets the default
        character set for all subsequent .append() calls that omit the charset
        argument.  If charset is not provided in the constructor, the us-ascii
        charset is used both as s's initial charset and as the default for
        subsequent .append() calls.

        The maximum line length can be specified explicitly via maxlinelen. For
        splitting the first line to a shorter value (to account for the field
        header which isn't included in s, e.g. `Subject') pass in the name of
        the field in header_name.  The default maxlinelen is 78 as recommended
        by RFC 2822.

        continuation_ws must be RFC 2822 compliant folding whitespace (usually
        either a space or a hard tab) which will be prepended to continuation
        lines.

        errors is passed through to the .append() call.
        Nrr)�USASCIIr0rIr�_continuation_wsr
r"�
MAXLINELEN�_maxlinelen�
_headerlenr*)�selfrLrrFrGrH�errorsrrr�__init__�s
zHeader.__init__c	Cs�|��g}d}d}|jD]�\}}|}|tjkrH|�dd�}|�dd�}|r�|o\|�|d�}|dkr�|dkr�|s�|�t�d}n|dkr�|s�|�t�|o�|�|d�}|}|�|�qt	�
|�S)z&Return the string value of the header.N�ascii�surrogateescape�replacer�Nr���)�
_normalizer
r�UNKNOWN8BIT�encoder,�	_nonctextr"�SPACE�EMPTYSTRING�join)	rS�uchunks�lastcs�	lastspacerr�nextcs�original_bytes�hasspacerrr�__str__�s*


zHeader.__str__cCs|t|�kS�N)r)rS�otherrrr�__eq__sz
Header.__eq__cCs�|dkr|j}nt|t�s"t|�}t|t�sZ|jp4d}|tjkrN|�dd�}n|�||�}|jpbd}|tjkr�z|�||�Wn"t	k
r�|dkr��t
}YnX|j�||f�dS)a.Append a string to the MIME header.

        Optional charset, if given, should be a Charset instance or the name
        of a character set (which will be converted to a Charset instance).  A
        value of None (the default) means that the charset given in the
        constructor is used.

        s may be a byte string or a Unicode string.  If it is a byte string
        (i.e. isinstance(s, str) is false), then charset is the encoding of
        that byte string, and a UnicodeError will be raised if the string
        cannot be decoded with that charset.  If s is a Unicode string, then
        charset is a hint specifying the character set of the characters in
        the string.  In either case, when producing an RFC 2822 compliant
        header using RFC 2047 rules, the string will be encoded using the
        output codec of the charset.  If the string cannot be encoded to the
        output codec, a UnicodeError will be raised.

        Optional `errors' is passed as the errors argument to the decode
        call if s is a byte string.
        NrrW)
rr0rIr�input_codecr\r,�output_codecr]�UnicodeEncodeError�UTF8r
r")rSrLrrT�
input_charset�output_charsetrrrr"	s$






z
Header.appendcCs|��p|dkS)z=True if string s is not a ctext character of RFC822.
        )�(�)�\)r%)rSrLrrrr^4szHeader._nonctext�;, 	rcCs�|��|dkr|j}|dkr"d}t|j||j|�}d}d}}|jD�]\}}	|dk	r�|oh|�|d�}|dkr�|r~|	dkr�|��n|	dkr�|s�|��|o�|�|d�}|	}d}|��}
|
r�|�	d|
d|	�n|�	dd|	�|
dd�D]`}|�
�|	jdk	�r"|�	|jd	|��|	�q�|��}|dt
|�t
|��}
|�	|
||	�q�t
|
�dkrF|�
�qF|j�rx|��|�|�}t�|��r�td
�|���|S)a�Encode a message header into an RFC-compliant format.

        There are many issues involved in converting a given string for use in
        an email header.  Only certain character sets are readable in most
        email clients, and as header strings can only contain a subset of
        7-bit ASCII, care must be taken to properly convert and encode (with
        Base64 or quoted-printable) header strings.  In addition, there is a
        75-character length limit on any given encoded header field, so
        line-wrapping must be performed, even with double-byte character sets.

        Optional maxlinelen specifies the maximum length of each generated
        line, exclusive of the linesep string.  Individual lines may be longer
        than maxlinelen if a folding point cannot be found.  The first line
        will be shorter by the length of the header name plus ": " if a header
        name was specified at Header construction time.  The default value for
        maxlinelen is determined at header construction time.

        Optional splitchars is a string containing characters which should be
        given extra weight by the splitting algorithm during normal header
        wrapping.  This is in very rough support of RFC 2822's `higher level
        syntactic breaks':  split points preceded by a splitchar are preferred
        during line splitting, with the characters preferred in the order in
        which they appear in the string.  Space and tab may be included in the
        string to indicate whether preference should be given to one over the
        other as a split point when other split chars do not appear in the line
        being split.  Splitchars does not affect RFC 2047 encoded lines.

        Optional linesep is a string to be used to separate the lines of
        the value.  The default value is the most useful for typical
        Python applications, but it can be set to \r\n to produce RFC-compliant
        line separators when needed.
        Nri@BrYrZFr
rrz8header value appears to contain an embedded header: {!r})r[rQ�_ValueFormatterrRrOr
r^�add_transitionr�feed�newline�header_encodingr!r*�_str�_embedded_headerrr�format)rS�
splitcharsrF�linesep�	formatterrcrgrdrr�linesr5�sline�fws�valuerrrr]9sZ!�
�

�z
Header.encodecCsxg}d}g}|jD]B\}}||kr.|�|�q|dk	rJ|�t�|�|f�|g}|}q|rn|�t�|�|f�||_dSri)r
r"r_ra)rS�chunksrE�
last_chunkrrrrrr[�szHeader._normalize)NNNNrrM)NrM)ruNr)
�__name__�
__module__�__qualname__rUrhrkr"r^r]r[rrrrr�s�
/ 
+
Pc@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)rvcCs0||_||_t|�|_||_g|_t|�|_dSri)�_maxlenrOr*�_continuation_ws_len�_splitchars�_lines�_Accumulator�
_current_line)rS�	headerlen�maxlenrHr~rrrrU�s
z_ValueFormatter.__init__cCs|��|�|j�Sri)ryrar�)rSrrrrr{�sz_ValueFormatter._strcCs
|�t�Sri)r{�NL�rSrrrrh�sz_ValueFormatter.__str__cCsv|j��}|dkr|jj|�t|j�dkrh|j��rV|jrV|jdt|j�7<n|j�t|j��|j��dS)N)rr
rrZ)	r�r �pushr*�	is_onlywsr�rr"�reset)rS�end_of_linerrrry�s
z_ValueFormatter.newlinecCs|j�dd�dS)Nrr
)r�r�r�rrrrw�sz_ValueFormatter.add_transitioncCs�|jdkr|�|||j�dS|�||���}z|�d�}Wntk
rRYdSX|dk	rh|�||�z|��}Wntk
r�YdSX|��|j	�
|j|�|D]}|j�
|j|�q�dS�Nr)rz�_ascii_splitr��header_encode_lines�_maxlengthsr �
IndexError�
_append_chunkryr�r�rOr�r")rSr�rr�
encoded_lines�
first_line�	last_liner5rrrrx�s$
z_ValueFormatter.feedccs&|jt|j�V|j|jVqdSri)r�r*r�r�r�rrrr��sz_ValueFormatter._maxlengthscCsft�dtd||�}|dr0dg|dd�<n
|�d�tt|�gd�D]\}}|�||�qLdS)Nz([z]+)rr
r)�rer�FWSr �zip�iterr�)rSr�rr~r6�partrrrr��s
z_ValueFormatter._ascii_splitcCs|j�||�t|j�|jk�r|jD]v}t|j��ddd�D]T}|��rn|j|d}|rn|d|krnq�|j|dd}|r@|d|kr@q�q@q&q�q&|j��\}}|jj	dkr�|�
�|s�d}|j�||�dS|j�|�}|j�
t|j��|j�|�dS)NrrrZr)r�r�r*r�r��range�
part_countr%r �
_initial_sizery�pop_fromr�r"rr�)rSr�r�ch�i�prevpartr��	remainderrrrr��s.
z_ValueFormatter._append_chunkN)r�r�r�rUr{rhryrwrxr�r�r�rrrrrv�s%rvcsjeZdZd�fdd�	Zdd�Zddd�Z�fdd	�Zd
d�Zdd
�Zddd�Z	dd�Z
�fdd�Z�ZS)r�rcs||_t���dSri)r��superrU)rS�initial_size��	__class__rrrUsz_Accumulator.__init__cCs|�||f�dSri)r")rSr�rrrrr�#sz_Accumulator.pushcCs||d�}g||d�<|Srir)rSr��poppedrrrr�&sz_Accumulator.pop_fromcs|��dkrdSt���S)Nr)r
r
)r�r�r r�r�rrr +sz_Accumulator.popcCstdd�|D�|j�S)Ncss"|]\}}t|�t|�VqdSri)r*�rr�r�rrr�	<genexpr>1sz'_Accumulator.__len__.<locals>.<genexpr>)�sumr�r�rrr�__len__0s�z_Accumulator.__len__cCst�dd�|D��S)Ncss |]\}}t�||f�VqdSri�r`rar�rrrr�5s�z'_Accumulator.__str__.<locals>.<genexpr>r�r�rrrrh4s
�z_Accumulator.__str__NcCs"|dkrg}||dd�<d|_dSr�)r�)rS�startvalrrrr�8sz_Accumulator.resetcCs|jdko|pt|���Sr�)r�rr%r�rrrr�>sz_Accumulator.is_onlywscs
t���Sri)r�r�r�r�rrr�Asz_Accumulator.part_count)r)r)N)
r�r�r�rUr�r�r r�rhr�r�r��
__classcell__rrr�rr�s

r�)NNr)#�__doc__�__all__r�r-�email.quoprimimer'�email.base64mime�email.errorsrrrrIr�r_r2�SPACE8r`rPr�rNro�compile�VERBOSE�	MULTILINEr�fcrer|r(�_max_appendrrrrv�listr�rrrr�<module>sF�
�

_�
kXV�@szdZddlmZddlmZddlmZddlmZGdd�d�ZGdd	�d	�Z	Gd
d�de
�Zdd
�ZGdd�d�Z
Gdd�de
�ZGdd�d�ZGdd�de�ZGdd�d�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�d�ZGd d!�d!�ZGd"d#�d#e�ZGd$d%�d%e�ZGd&d'�d'�ZGd(d)�d)�Zeeeeeeeeeeeeeeeeeeeed*�ZGd+d,�d,�Zd-S).a;Representing and manipulating email headers via custom objects.

This module provides an implementation of the HeaderRegistry API.
The implementation is designed to flexibly follow RFC5322 rules.

Eventually HeaderRegistry will be a public API, but it isn't yet,
and will probably change some before that happens.

�)�MappingProxyType)�utils)�errors)�_header_value_parserc@s^eZdZddd�Zedd��Zedd��Zed	d
��Zedd��Zd
d�Z	dd�Z
dd�ZdS)�Address�NcCs�d�td||||f��}d|ks(d|kr0td��|dk	r�|s@|rHtd��t�|�\}}|rjtd�||���|jrz|jd�|j}|j	}||_
||_||_dS)	a�Create an object representing a full email address.

        An address can have a 'display_name', a 'username', and a 'domain'.  In
        addition to specifying the username and domain separately, they may be
        specified together by using the addr_spec keyword *instead of* the
        username and domain keywords.  If an addr_spec string is specified it
        must be properly quoted according to RFC 5322 rules; an error will be
        raised if it is not.

        An Address object has display_name, username, domain, and addr_spec
        attributes, all of which are read-only.  The addr_spec and the string
        value of the object are both quoted according to RFC5322 rules, but
        without any Content Transfer Encoding.

        rN�
�
z8invalid arguments; address parts cannot contain CR or LFz=addrspec specified when username and/or domain also specifiedz6Invalid addr_spec; only '{}' could be parsed from '{}'r)
�join�filter�
ValueError�	TypeError�parser�
get_addr_spec�format�all_defects�
local_part�domain�
_display_name�	_username�_domain)�self�display_name�usernamer�	addr_spec�inputs�a_s�rest�r�*/usr/lib/python3.8/email/headerregistry.py�__init__s&�
zAddress.__init__cCs|jS�N�r�rrrrr<szAddress.display_namecCs|jSr!)rr#rrrr@szAddress.usernamecCs|jSr!)rr#rrrrDszAddress.domaincCsTt|j�}t|�t|tj�kr.t�|j�}n|j}|jrH|d|jS|sPdS|S)z�The addr_spec (username@domain) portion of the address, quoted
        according to RFC 5322 rules, but with no Content Transfer Encoding.
        �@�<>)�setr�lenr�
DOT_ATOM_ENDS�quote_stringr)r�nameset�lprrrrHs
zAddress.addr_speccCsd�|jj|j|j|j�S)Nz1{}(display_name={!r}, username={!r}, domain={!r}))r�	__class__�__name__rrrr#rrr�__repr__Xs�zAddress.__repr__cCs^t|j�}t|�t|tj�kr.t�|j�}n|j}|rX|jdkrFdn|j}d�||�S|jS)Nr%rz{} <{}>)r&rr'r�SPECIALSr)rr)rr*�disprrrr�__str__]s
zAddress.__str__cCs8t|�t|�krdS|j|jko6|j|jko6|j|jkS�NF)�typerrr�r�otherrrr�__eq__hs
�
�zAddress.__eq__)rrrN)r-�
__module__�__qualname__r �propertyrrrrr.r1r6rrrrrs
*



rc@sFeZdZddd�Zedd��Zedd��Zdd	�Zd
d�Zdd
�Z	dS)�GroupNcCs||_|rt|�nt�|_dS)aCreate an object representing an address group.

        An address group consists of a display_name followed by colon and a
        list of addresses (see Address) terminated by a semi-colon.  The Group
        is created by specifying a display_name and a possibly empty list of
        Address objects.  A Group can also be used to represent a single
        address that is not in a group, which is convenient when manipulating
        lists that are a combination of Groups and individual Addresses.  In
        this case the display_name should be set to None.  In particular, the
        string representation of a Group whose display_name is None is the same
        as the Address object, if there is one and only one Address object in
        the addresses list.

        N)r�tuple�
_addresses)rr�	addressesrrrr rszGroup.__init__cCs|jSr!r"r#rrrr�szGroup.display_namecCs|jSr!)r<r#rrrr=�szGroup.addressescCsd�|jj|j|j�S)Nz${}(display_name={!r}, addresses={!r})rr,r-rr=r#rrrr.�s
�zGroup.__repr__cCs�|jdkr&t|j�dkr&t|jd�S|j}|dk	r\t|�}t|�t|tj�kr\t�|�}d�dd�|jD��}|r~d|n|}d�	||�S)N�r�, css|]}t|�VqdSr!��str)�.0�xrrr�	<genexpr>�sz Group.__str__.<locals>.<genexpr>� z{}:{};)
rr'r=rAr&rr/r)r
r)rr0r*�adrstrrrrr1�s
z
Group.__str__cCs,t|�t|�krdS|j|jko*|j|jkSr2)r3rr=r4rrrr6�s

�zGroup.__eq__)NN)
r-r7r8r r9rr=r.r1r6rrrrr:ps


r:c@sTeZdZdZdd�Zdd�Zedd��Zedd	��Zd
d�Z	e
dd
��Zdd�ZdS)�
BaseHeadera|Base class for message headers.

    Implements generic behavior and provides tools for subclasses.

    A subclass must define a classmethod named 'parse' that takes an unfolded
    value string and a dictionary as its arguments.  The dictionary will
    contain one key, 'defects', initialized to an empty list.  After the call
    the dictionary must contain two additional keys: parse_tree, set to the
    parse tree obtained from parsing the header, and 'decoded', set to the
    string value of the idealized representation of the data from the value.
    (That is, encoded words are decoded, and values that have canonical
    representations are so represented.)

    The defects key is intended to collect parsing defects, which the message
    parser will subsequently dispose of as appropriate.  The parser should not,
    insofar as practical, raise any errors.  Defects should be added to the
    list instead.  The standard header parsers register defects for RFC
    compliance issues, for obsolete RFC syntax, and for unrecoverable parsing
    errors.

    The parse method may add additional keys to the dictionary.  In this case
    the subclass must define an 'init' method, which will be passed the
    dictionary as its keyword arguments.  The method should use (usually by
    setting them as the value of similarly named attributes) and remove all the
    extra keys added by its parse method, and then use super to call its parent
    class with the remaining arguments and keywords.

    The subclass should also make sure that a 'max_count' attribute is defined
    that is either None or 1. XXX: need to better define this API.

    cCs\dgi}|�||�t�|d�r4t�|d�|d<t�||d�}|d=|j|f|�|S)N�defects�decoded)�parser�_has_surrogates�	_sanitizerA�__new__�init)�cls�name�value�kwdsrrrrrM�szBaseHeader.__new__cCs||_||_||_dSr!)�_name�_parse_tree�_defects)rrP�
parse_treerHrrrrN�szBaseHeader.initcCs|jSr!)rSr#rrrrP�szBaseHeader.namecCs
t|j�Sr!)r;rUr#rrrrH�szBaseHeader.defectscCst|jj|jjt|�f|jfSr!)�_reconstruct_headerr,r-�	__bases__rA�__dict__r#rrr�
__reduce__�s��zBaseHeader.__reduce__cCst�||�Sr!)rArM)rOrQrrr�_reconstruct�szBaseHeader._reconstructc	Cs`t�t�t�|jd�t�dd�g�g�}|jrH|�t�t�dd�g��|�|j�|j	|d�S)atFold header according to policy.

        The parsed representation of the header is folded according to
        RFC5322 rules, as modified by the policy.  If the parse tree
        contains surrogateescaped bytes, the bytes are CTE encoded using
        the charset 'unknown-8bit".

        Any non-ASCII characters in the parse tree are CTE encoded using
        charset utf-8. XXX: make this a policy setting.

        The returned value is an ASCII-only string possibly containing linesep
        characters, and ending with a linesep character.  The string includes
        the header name and the ': ' separator.

        zheader-name�:z
header-seprE�fws)�policy)
r�Header�HeaderLabel�
ValueTerminalrPrT�append�CFWSList�WhiteSpaceTerminal�fold)rr^�headerrrrre�s
���zBaseHeader.foldN)
r-r7r8�__doc__rMrNr9rPrHrZ�classmethodr[rerrrrrG�s 




rGcCst||i��|�Sr!)r3r[)�cls_name�basesrQrrrrW
srWc@s&eZdZdZeej�Zedd��Z	dS)�UnstructuredHeaderNcCs"|�|�|d<t|d�|d<dS)NrVrI)�value_parserrA�rOrQrRrrrrJszUnstructuredHeader.parse)
r-r7r8�	max_count�staticmethodr�get_unstructuredrlrhrJrrrrrks
rkc@seZdZdZdS)�UniqueUnstructuredHeaderr>N�r-r7r8rnrrrrrqsrqcsFeZdZdZdZeej�Ze	dd��Z
�fdd�Zedd��Z
�ZS)	�
DateHeadera�Header whose value consists of a single timestamp.

    Provides an additional attribute, datetime, which is either an aware
    datetime using a timezone, or a naive datetime if the timezone
    in the input string is -0000.  Also accepts a datetime as input.
    The 'value' attribute is the normalized form of the timestamp,
    which means it is the output of format_datetime on the datetime.
    NcCsz|s6|d�t���d|d<d|d<t��|d<dSt|t�rJt�|�}||d<t�	|d�|d<|�
|d�|d<dS)NrH�datetimerrIrV)rbr�HeaderMissingRequiredValuer�	TokenList�
isinstancerAr�parsedate_to_datetime�format_datetimerlrmrrrrJ.s

zDateHeader.parsecs|�d�|_t�j||�dS)Nrt)�pop�	_datetime�superrN�r�args�kw�r,rrrN<szDateHeader.initcCs|jSr!)r{r#rrrrt@szDateHeader.datetime)r-r7r8rgrnrorrprlrhrJrNr9rt�
__classcell__rrr�rrss	


rsc@seZdZdZdS)�UniqueDateHeaderr>Nrrrrrrr�Esr�csPeZdZdZedd��Zedd��Z�fdd�Ze	dd	��Z
e	d
d��Z�ZS)�
AddressHeaderNcCst�|�\}}|rtd��|S)Nzthis should not happen)r�get_address_list�AssertionError)rQ�address_listrrrrlNszAddressHeader.value_parsercCs�t|t�rV|�|�|d<}g}|jD]"}|�t|jdd�|jD���q&t|j	�}n"t
|d�sf|g}dd�|D�}g}||d<||d<d�d	d�|D��|d
<d|kr�|�|d
�|d<dS)NrVcSs*g|]"}t|jpd|jpd|jp"d��qS)r)rrrr)rB�mbrrr�
<listcomp>]s
�
�z'AddressHeader.parse.<locals>.<listcomp>�__iter__cSs&g|]}t|d�std|g�n|�qS)r=N)�hasattrr:�rB�itemrrrr�fs��groupsrHr?cSsg|]}t|��qSrr@r�rrrr�lsrI)rwrArlr=rbr:r�
all_mailboxes�listrr�r
)rOrQrRr�r��addrrHrrrrJTs*


��
�zAddressHeader.parsecs(t|�d��|_d|_t�j||�dS)Nr�)r;rz�_groupsr<r|rNr}r�rrrNpszAddressHeader.initcCs|jSr!)r�r#rrrr�uszAddressHeader.groupscCs&|jdkr tdd�|jD��|_|jS)Ncss|]}|jD]
}|VqqdSr!)r=)rB�group�addressrrrrD|s�z*AddressHeader.addresses.<locals>.<genexpr>)r<r;r�r#rrrr=ys
zAddressHeader.addresses)
r-r7r8rnrorlrhrJrNr9r�r=r�rrr�rr�Js


r�c@seZdZdZdS)�UniqueAddressHeaderr>Nrrrrrrr��sr�c@seZdZedd��ZdS)�SingleAddressHeadercCs(t|j�dkrtd�|j���|jdS)Nr>z9value of single address header {} is not a single addressr)r'r=rrrPr#rrrr��s
�zSingleAddressHeader.addressN)r-r7r8r9r�rrrrr��sr�c@seZdZdZdS)�UniqueSingleAddressHeaderr>Nrrrrrrr��sr�csZeZdZdZeej�Zedd��Z	�fdd�Z
edd��Zedd	��Z
ed
d��Z�ZS)�MIMEVersionHeaderr>cCs�|�|�|d<}t|�|d<|d�|j�|jdkr<dn|j|d<|j|d<|jdk	rtd�|d|d�|d<nd|d<dS)NrVrIrH�major�minorz{}.{}�version)rlrA�extendrr�r�r�rOrQrRrVrrrrJ�s

zMIMEVersionHeader.parsecs6|�d�|_|�d�|_|�d�|_t�j||�dS)Nr�r�r�)rz�_version�_major�_minorr|rNr}r�rrrN�szMIMEVersionHeader.initcCs|jSr!)r�r#rrrr��szMIMEVersionHeader.majorcCs|jSr!)r�r#rrrr��szMIMEVersionHeader.minorcCs|jSr!)r�r#rrrr��szMIMEVersionHeader.version)r-r7r8rnror�parse_mime_versionrlrhrJrNr9r�r�r�r�rrr�rr��s



r�cs8eZdZdZedd��Z�fdd�Zedd��Z�Z	S)�ParameterizedMIMEHeaderr>cCsZ|�|�|d<}t|�|d<|d�|j�|jdkrBi|d<ndd�|jD�|d<dS)NrVrIrH�paramscSs&i|]\}}t�|���t�|��qSr)rrL�lower)rBrPrQrrr�
<dictcomp>�s�z1ParameterizedMIMEHeader.parse.<locals>.<dictcomp>)rlrAr�rr�r�rrrrJ�s

�zParameterizedMIMEHeader.parsecs|�d�|_t�j||�dS)Nr�)rz�_paramsr|rNr}r�rrrN�szParameterizedMIMEHeader.initcCs
t|j�Sr!)rr�r#rrrr��szParameterizedMIMEHeader.params)
r-r7r8rnrhrJrNr9r�r�rrr�rr��s
r�csJeZdZeej�Z�fdd�Zedd��Z	edd��Z
edd��Z�ZS)	�ContentTypeHeadercs2t�j||�t�|jj�|_t�|jj�|_dSr!)	r|rNrrLrT�maintype�	_maintype�subtype�_subtyper}r�rrrN�szContentTypeHeader.initcCs|jSr!)r�r#rrrr��szContentTypeHeader.maintypecCs|jSr!)r�r#rrrr��szContentTypeHeader.subtypecCs|jd|jS)N�/)r�r�r#rrr�content_type�szContentTypeHeader.content_type)
r-r7r8ror�parse_content_type_headerrlrNr9r�r�r�r�rrr�rr��s


r�cs2eZdZeej�Z�fdd�Zedd��Z	�Z
S)�ContentDispositionHeadercs2t�j||�|jj}|dkr"|nt�|�|_dSr!)r|rNrT�content_dispositionrrL�_content_disposition)rr~r�cdr�rrrN�szContentDispositionHeader.initcCs|jSr!)r�r#rrrr��sz,ContentDispositionHeader.content_disposition)r-r7r8ror� parse_content_disposition_headerrlrNr9r�r�rrr�rr��s
r�csBeZdZdZeej�Zedd��Z	�fdd�Z
edd��Z�Z
S)�ContentTransferEncodingHeaderr>cCs2|�|�|d<}t|�|d<|d�|j�dS�NrVrIrH�rlrAr�rr�rrrrJsz#ContentTransferEncodingHeader.parsecs"t�j||�t�|jj�|_dSr!)r|rNrrLrT�cte�_cter}r�rrrNsz"ContentTransferEncodingHeader.initcCs|jSr!)r�r#rrrr�sz!ContentTransferEncodingHeader.cte)r-r7r8rnror�&parse_content_transfer_encoding_headerrlrhrJrNr9r�r�rrr�rr��s

r�c@s&eZdZdZeej�Zedd��Z	dS)�MessageIDHeaderr>cCs2|�|�|d<}t|�|d<|d�|j�dSr�r�r�rrrrJszMessageIDHeader.parseN)
r-r7r8rnror�parse_message_idrlrhrJrrrrr�s
r�)�subject�datezresent-datez	orig-dateZsenderz
resent-sender�toz	resent-to�ccz	resent-ccZbccz
resent-bcc�fromzresent-fromzreply-tozmime-versionzcontent-typezcontent-dispositionzcontent-transfer-encodingz
message-idc@s8eZdZdZeedfdd�Zdd�Zdd�Zd	d
�Z	dS)�HeaderRegistryz%A header_factory and header registry.TcCs&i|_||_||_|r"|j�t�dS)a�Create a header_factory that works with the Policy API.

        base_class is the class that will be the last class in the created
        header class's __bases__ list.  default_class is the class that will be
        used if "name" (see __call__) does not appear in the registry.
        use_default_map controls whether or not the default mapping of names to
        specialized classes is copied in to the registry when the factory is
        created.  The default is True.

        N)�registry�
base_class�
default_class�update�_default_header_map)rr�r��use_default_maprrrr 9s
zHeaderRegistry.__init__cCs||j|��<dS)zLRegister cls as the specialized class for handling "name" headers.

        N)r�r��rrPrOrrr�map_to_typeKszHeaderRegistry.map_to_typecCs,|j�|��|j�}td|j||jfi�S)N�_)r��getr�r�r3r-r�r�rrr�__getitem__QszHeaderRegistry.__getitem__cCs||||�S)a�Create a header instance for header 'name' from 'value'.

        Creates a header instance by creating a specialized class for parsing
        and representing the specified header by combining the factory
        base_class with a specialized class from the registry or the
        default_class, and passing the name and value to the constructed
        class's constructor.

        r)rrPrQrrr�__call__Us
zHeaderRegistry.__call__N)
r-r7r8rgrGrkr r�r�r�rrrrr�5s�
r�N)rg�typesr�emailrrrrrr:rArGrWrkrqrsr�r�r�r�r�r�r�r�r�r�r�r�r�rrrr�<module>sX	`6d'7
%�Xp�@sLdZdddgZddlZddlmZdd�Zdd	d�Zddd�Zddd
�ZdS)z1Various types of useful iterators and generators.�body_line_iterator�typed_subpart_iterator�walk�N)�StringIOccs.|V|��r*|��D]}|��EdHqdS)z�Walk over the message tree, yielding each subpart.

    The walk is performed in depth-first order.  This method is a
    generator.
    N)�is_multipart�get_payloadr)�self�subpart�r
�%/usr/lib/python3.8/email/iterators.pyrsFccs6|��D](}|j|d�}t|t�rt|�EdHqdS)z�Iterate over the parts, returning string payloads line-by-line.

    Optional decode (default False) is passed through to .get_payload().
    )�decodeN)rr�
isinstance�strr)�msgrr	�payloadr
r
rr"s
�textccs8|��D]*}|��|kr|dks,|��|kr|VqdS)z�Iterate over the subparts with a given MIME type.

    Use `maintype' as the main MIME type to match against; this defaults to
    "text".  Optional `subtype' is the MIME subtype to match against; if
    omitted, only the main type is matched.
    N)r�get_content_maintype�get_content_subtype)r�maintype�subtyper	r
r
rr-scCs�|dkrtj}d|d}t||��d|d�|rJtd|��|d�n
t|d�|��r||��D]}t|||d|�qddS)	zA handy debugging aidN� ��)�end�filez [%s])r�)�sys�stdout�print�get_content_type�get_default_typerr�
_structure)r�fp�level�include_default�tabr	r
r
rr!;s
r!)F)rN)NrF)	�__doc__�__all__r�iorrrrr!r
r
r
r�<module>s�

X��@s�dZddgZddlZddlZddlZddlmZmZddlm	Z	ddlm
Z
ddlmZm
Z
dd	lmZdd
lmZejZdZe�d�Zd
d�Zddd�Zdd�Zdd�ZGdd�d�ZGdd�de�ZGdd�de�ZdS)z8Basic message object for the email package object model.�Message�EmailMessage�N)�BytesIO�StringIO)�utils)�errors)�Policy�compat32��charset)�decode_bz; z[ \(\)<>@,;:\\"/\[\]\?=]cCs4t|��d�\}}}|s$|��dfS|��|��fS)N�;)�str�	partition�strip)�param�a�sep�b�r�#/usr/lib/python3.8/email/message.py�_splitparamsrTcCs�|dk	r�t|�dkr�t|t�rL|d7}t�|d|d|d�}d||fSz|�d�Wn6tk
r�|d7}t�|dd	�}d||fYSX|s�t�|�r�d
|t�	|�fSd||fSn|SdS)a~Convenience function to format and return a key=value pair.

    This will quote the value if needed or if quote is true.  If value is a
    three tuple (charset, language, value), it will be encoded according
    to RFC2231 rules.  If it contains non-ascii characters it will likewise
    be encoded according to RFC2231 rules, using the utf-8 charset and
    a null language.
    Nr�*���%s=%s�asciizutf-8�z%s="%s")
�len�
isinstance�tupler�encode_rfc2231�encode�UnicodeEncodeError�	tspecials�search�quote)r�valuer&rrr�_formatparam's	
r(cCs�dt|�}g}|dd�dkr�|dd�}|�d�}|dkrp|�dd|�|�dd|�drp|�d|d�}q6|dkr�t|�}|d|�}d|kr�|�d�}|d|�����d||dd���}|�|���||d�}q|S)Nr
rr�"z\"r�=)r�find�countr�indexr�lower�append)�s�plist�end�f�irrr�_parseparamIs 
(
,r5cCs4t|t�r&|d|dt�|d�fSt�|�SdS)Nrrr)rr r�unquote)r'rrr�
_unquotevalue]s
r7c@s�eZdZdZefdd�Zdd�Zddd	d
�Zdd�Zded
d�Z	dd�Z
dd�Zdd�Zdd�Z
dfdd�Zdgdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zdhd1d2�Zd3d4�Zd5d6�Zdid7d8�Zd9d:�Zd;d<�Z d=d>�Z!d?d@�Z"dAdB�Z#dCdD�Z$dEdF�Z%dGdH�Z&djdKdL�Z'dkdMdN�Z(dldQdR�Z)dmdSdT�Z*dndUdV�Z+dodWdX�Z,dpdYdZ�Z-d[d\�Z.dqd]d^�Z/drd_d`�Z0dadb�Z1ddcl2m3Z3dS)sra�Basic message object.

    A message object is defined as something that has a bunch of RFC 2822
    headers and a payload.  It may optionally have an envelope header
    (a.k.a. Unix-From or From_ header).  If the message is a container (i.e. a
    multipart or a message/rfc822), then the payload is a list of Message
    objects, otherwise it is a string.

    Message objects implement part of the `mapping' interface, which assumes
    there is exactly one occurrence of the header per message.  Some headers
    do in fact appear multiple times (e.g. Received) and for those headers,
    you must use the explicit API to set or get all the headers.  Not all of
    the mapping methods are implemented.
    cCs:||_g|_d|_d|_d|_d|_|_g|_d|_dS)N�
text/plain)	�policy�_headers�	_unixfrom�_payload�_charset�preamble�epilogue�defects�
_default_type)�selfr9rrr�__init__xszMessage.__init__cCs|��S)z9Return the entire formatted message as a string.
        )�	as_string�rBrrr�__str__�szMessage.__str__FrNcCsJddlm}|dkr|jn|}t�}||d||d�}|j||d�|��S)a�Return the entire formatted message as a string.

        Optional 'unixfrom', when true, means include the Unix From_ envelope
        header.  For backward compatibility reasons, if maxheaderlen is
        not specified it defaults to 0, so you must override it explicitly
        if you want a different maxheaderlen.  'policy' is passed to the
        Generator instance used to serialize the message; if it is not
        specified the policy associated with the message instance is used.

        If the message object contains binary data that is not encoded
        according to RFC standards, the non-compliant data will be replaced by
        unicode "unknown character" code points.
        r)�	GeneratorNF)�mangle_from_�maxheaderlenr9��unixfrom)�email.generatorrGr9r�flatten�getvalue)rBrKrIr9rG�fp�grrrrD�s�zMessage.as_stringcCs|��S)z?Return the entire formatted message as a bytes object.
        )�as_bytesrErrr�	__bytes__�szMessage.__bytes__cCsHddlm}|dkr|jn|}t�}||d|d�}|j||d�|��S)aJReturn the entire formatted message as a bytes object.

        Optional 'unixfrom', when true, means include the Unix From_ envelope
        header.  'policy' is passed to the BytesGenerator instance used to
        serialize the message; if not specified the policy associated with
        the message instance is used.
        r)�BytesGeneratorNF)rHr9rJ)rLrSr9rrMrN)rBrKr9rSrOrPrrrrQ�szMessage.as_bytescCst|jt�S)z6Return True if the message consists of multiple parts.)rr<�listrErrr�is_multipart�szMessage.is_multipartcCs
||_dS�N�r;)rBrKrrr�set_unixfrom�szMessage.set_unixfromcCs|jSrVrWrErrr�get_unixfrom�szMessage.get_unixfromcCsF|jdkr|g|_n.z|j�|�Wntk
r@td��YnXdS)z�Add the given payload to the current payload.

        The current payload will always be a list of objects after this method
        is called.  If you want to set the payload to a scalar object, use
        set_payload() instead.
        Nz=Attach is not valid on a message with a non-multipart payload)r<r/�AttributeError�	TypeError)rB�payloadrrr�attach�s

zMessage.attachcCs�|��r(|rdS|dkr|jS|j|S|dk	rNt|jt�sNtdt|j���|j}t|�dd����}t|t�r�t	�
|�r�|�dd�}|s�z|�|�
dd�d�}Wq�tk
r�|�dd�}Yq�Xn2|r�z|�d�}Wntk
r�|�d	�}YnX|�s|S|d
k�rt�|�S|dk�rVtd�|����\}}|D]}|j�||��q<|S|d
k�r�t|�}	t�}
ztj|	|
dd�|
��WStjk
�r�|YSXt|t��r�|S|S)aZReturn a reference to the payload.

        The payload will either be a list object or a string.  If you mutate
        the list object, you modify the message's payload in place.  Optional
        i returns that index into the payload.

        Optional decode is a flag indicating whether the payload should be
        decoded or not, according to the Content-Transfer-Encoding header
        (default is False).

        When True and the message is not a multipart, the payload will be
        decoded if this header's value is `quoted-printable' or `base64'.  If
        some other encoding is used, or the header is missing, or if the
        payload has bogus data (i.e. bogus base64 or uuencoded data), the
        payload is returned as-is.

        If the message is a multipart and the decode flag is True, then None
        is returned.
        NzExpected list, got %szcontent-transfer-encodingrr�surrogateescaper�replace�raw-unicode-escapezquoted-printable�base64�)z
x-uuencode�uuencode�uuezx-uueT)�quiet)rUr<rrTr[�typer�getr.r�_has_surrogatesr"�decode�	get_param�LookupError�UnicodeError�quopri�decodestringr�join�
splitlinesr9�
handle_defectr�uurN�Error)rBr4rir\�cte�bpayloadr'r@�defect�in_file�out_filerrr�get_payload�sV"








zMessage.get_payloadcCspt|d�r:|dkr||_dSt|t�s.t|�}|�|j�}t|d�rT|�dd�|_n||_|dk	rl|�|�dS)z�Set the payload to the given value.

        Optional charset sets the message's default character set.  See
        set_charset() for details.
        r"Nrirr^)�hasattrr<r�Charsetr"�output_charsetri�set_charset)rBr\rrrr�set_payload/s


zMessage.set_payloadcCs|dkr|�d�d|_dSt|t�s.t|�}||_d|krH|�dd�d|krf|jdd|��d�n|�d|���||��kr�|�|j�|_d|k�r|�	�}z||�Wnjt
k
�r|j}|r�z|�d	d
�}Wn tk
r�|�|j
�}YnX|�|�|_|�d|�YnXdS)a�Set the charset of the payload to a given character set.

        charset can be a Charset instance, a string naming a character set, or
        None.  If it is a string it will be converted to a Charset instance.
        If charset is None, the charset parameter will be removed from the
        Content-Type field.  Anything else will generate a TypeError.

        The message will be assumed to be of type text/* encoded with
        charset.input_charset.  It will be converted to charset.output_charset
        and encoded properly, if needed, when generating the plain text
        representation of the message.  MIME headers (MIME-Version,
        Content-Type, Content-Transfer-Encoding) will be added as needed.
        Nr�MIME-Version�1.0�Content-Typer8r
zContent-Transfer-Encodingrr^)�	del_paramr=rr{�
add_header�get_output_charset�	set_param�body_encoder<�get_body_encodingr[r"rlr|)rBrrtr\rrrr}Cs:

�
zMessage.set_charsetcCs|jS)zKReturn the Charset instance associated with the message's payload.
        )r=rErrr�get_charsetrszMessage.get_charsetcCs
t|j�S)z9Return the total number of headers, including duplicates.)rr:rErrr�__len__zszMessage.__len__cCs
|�|�S)a-Get a header value.

        Return None if the header is missing instead of raising an exception.

        Note that if the header appeared multiple times, exactly which
        occurrence gets returned is undefined.  Use get_all() to get all
        the values matching a header field name.
        )rg�rB�namerrr�__getitem__~s	zMessage.__getitem__cCsr|j�|�}|rX|��}d}|jD]4\}}|��|kr"|d7}||kr"td�||���q"|j�|j�||��dS)z�Set the value of a header.

        Note: this does not overwrite an existing header with the same field
        name.  Use __delitem__() first to delete any existing headers.
        rrz/There may be at most {} {} headers in a messageN)r9�header_max_countr.r:�
ValueError�formatr/�header_store_parse)rBr��val�	max_count�lname�found�k�vrrr�__setitem__�s�zMessage.__setitem__cCs@|��}g}|jD]"\}}|��|kr|�||f�q||_dS)zwDelete all occurrences of a header, if present.

        Does not raise an exception if the header is missing.
        N)r.r:r/)rBr��
newheadersr�r�rrr�__delitem__�szMessage.__delitem__cCs|��dd�|jD�kS)NcSsg|]\}}|���qSr)r.��.0r�r�rrr�
<listcomp>�sz(Message.__contains__.<locals>.<listcomp>)r.r:r�rrr�__contains__�szMessage.__contains__ccs|jD]\}}|VqdSrV�r:)rB�fieldr'rrr�__iter__�szMessage.__iter__cCsdd�|jD�S)a.Return a list of all the message's header field names.

        These will be sorted in the order they appeared in the original
        message, or were added to the message, and may contain duplicates.
        Any fields deleted and re-inserted are always appended to the header
        list.
        cSsg|]\}}|�qSrrr�rrrr��sz Message.keys.<locals>.<listcomp>r�rErrr�keys�szMessage.keyscs�fdd��jD�S)a)Return a list of all the message's header values.

        These will be sorted in the order they appeared in the original
        message, or were added to the message, and may contain duplicates.
        Any fields deleted and re-inserted are always appended to the header
        list.
        csg|]\}}�j�||��qSr�r9�header_fetch_parser�rErrr��s�z"Message.values.<locals>.<listcomp>r�rErrEr�values�s
�zMessage.valuescs�fdd��jD�S)a'Get all the message's header fields and values.

        These will be sorted in the order they appeared in the original
        message, or were added to the message, and may contain duplicates.
        Any fields deleted and re-inserted are always appended to the header
        list.
        cs"g|]\}}|�j�||�f�qSrr�r�rErrr��s�z!Message.items.<locals>.<listcomp>r�rErrEr�items�s
�z
Message.itemscCs:|��}|jD]&\}}|��|kr|j�||�Sq|S)z~Get a header value.

        Like __getitem__() but return failobj instead of None when the field
        is missing.
        )r.r:r9r�)rBr��failobjr�r�rrrrg�s
zMessage.getcCs|j�||f�dS)z�Store name and value in the model without modification.

        This is an "internal" API, intended only for use by a parser.
        N)r:r/)rBr�r'rrr�set_raw�szMessage.set_rawcCst|j���S)z�Return the (name, value) header pairs without modification.

        This is an "internal" API, intended only for use by a generator.
        )�iterr:�copyrErrr�	raw_items�szMessage.raw_itemscCsHg}|��}|jD](\}}|��|kr|�|j�||��q|sD|S|S)aQReturn a list of all the values for the named field.

        These will be sorted in the order they appeared in the original
        message, and may contain duplicates.  Any fields deleted and
        re-inserted are always appended to the header list.

        If no such fields exist, failobj is returned (defaults to None).
        )r.r:r/r9r�)rBr�r�r�r�r�rrr�get_all�s	zMessage.get_allcKspg}|��D]<\}}|dkr0|�|�dd��q|�t|�dd�|��q|dk	r^|�d|�t�|�||<dS)u�Extended header setting.

        name is the header field to add.  keyword arguments can be used to set
        additional parameters for the header field, with underscores converted
        to dashes.  Normally the parameter will be added as key="value" unless
        value is None, in which case only the key will be added.  If a
        parameter value contains non-ASCII characters it can be specified as a
        three-tuple of (charset, language, value), in which case it will be
        encoded according to RFC2231 rules.  Otherwise it will be encoded using
        the utf-8 charset and a language of ''.

        Examples:

        msg.add_header('content-disposition', 'attachment', filename='bud.gif')
        msg.add_header('content-disposition', 'attachment',
                       filename=('utf-8', '', Fußballer.ppt'))
        msg.add_header('content-disposition', 'attachment',
                       filename='Fußballer.ppt'))
        N�_�-r)r�r/r_r(�insert�	SEMISPACEro)rB�_name�_value�_params�partsr�r�rrrr�szMessage.add_headercCs\|��}ttt|j��|j�D]0\}\}}|��|kr|j�||�|j|<qXqt|��dS)z�Replace a header.

        Replace the first matching header found in the message, retaining
        header order and case.  If no matching header was found, a KeyError is
        raised.
        N)r.�zip�rangerr:r9r��KeyError)rBr�r�r4r�r�rrr�replace_header!s"zMessage.replace_headercCsHt�}|�d|�}||kr"|��St|�d��}|�d�dkrDdS|S)a0Return the message's content type.

        The returned string is coerced to lower case of the form
        `maintype/subtype'.  If there was no Content-Type header in the
        message, the default type as given by get_default_type() will be
        returned.  Since according to RFC 2045, messages always have a default
        type this will always return a value.

        RFC 2045 defines a message's default type to be text/plain unless it
        appears inside a multipart/digest container, in which case it would be
        message/rfc822.
        �content-typer�/rr8)�objectrg�get_default_typerr.r,)rB�missingr'�ctyperrr�get_content_type4s
zMessage.get_content_typecCs|��}|�d�dS)z�Return the message's main content type.

        This is the `maintype' part of the string returned by
        get_content_type().
        r�r�r��split�rBr�rrr�get_content_maintypeLszMessage.get_content_maintypecCs|��}|�d�dS)z�Returns the message's sub-content type.

        This is the `subtype' part of the string returned by
        get_content_type().
        r�rr�r�rrr�get_content_subtypeUszMessage.get_content_subtypecCs|jS)aReturn the `default' content type.

        Most messages have a default content type of text/plain, except for
        messages that are subparts of multipart/digest containers.  Such
        subparts have a default content type of message/rfc822.
        �rArErrrr�^szMessage.get_default_typecCs
||_dS)z�Set the `default' content type.

        ctype should be either "text/plain" or "message/rfc822", although this
        is not enforced.  The default content type is not stored in the
        Content-Type header.
        Nr�r�rrr�set_default_typegszMessage.set_default_typec		Cs�t�}|�||�}||kr|Sg}t|�D]X}z$|�dd�\}}|��}|��}Wn tk
rr|��}d}YnX|�||f�q*t�|�}|S)Nr*rr)	r�rgr5r�rr�r/r�
decode_params)	rBr��headerr�r'�params�pr�r�rrr�_get_params_preserveps 

zMessage._get_params_preserver�TcCs8t�}|�||�}||kr|S|r0dd�|D�S|SdS)amReturn the message's Content-Type parameters, as a list.

        The elements of the returned list are 2-tuples of key/value pairs, as
        split on the `=' sign.  The left hand side of the `=' is the key,
        while the right hand side is the value.  If there is no `=' sign in
        the parameter the value is the empty string.  The value is as
        described in the get_param() method.

        Optional failobj is the object to return if there is no Content-Type
        header.  Optional header is the header to search instead of
        Content-Type.  If unquote is True, the value is unquoted.
        cSsg|]\}}|t|�f�qSr)r7r�rrrr��sz&Message.get_params.<locals>.<listcomp>N)r�r�)rBr�r�r6r�r�rrr�
get_params�s
zMessage.get_paramscCsN||kr|S|�||�D]0\}}|��|��kr|r@t|�S|Sq|S)a�Return the parameter value if found in the Content-Type header.

        Optional failobj is the object to return if there is no Content-Type
        header, or the Content-Type header has no such parameter.  Optional
        header is the header to search instead of Content-Type.

        Parameter keys are always compared case insensitively.  The return
        value can either be a string, or a 3-tuple if the parameter was RFC
        2231 encoded.  When it's a 3-tuple, the elements of the value are of
        the form (CHARSET, LANGUAGE, VALUE).  Note that both CHARSET and
        LANGUAGE can be None, in which case you should consider VALUE to be
        encoded in the us-ascii charset.  You can usually ignore LANGUAGE.
        The parameter value (either the returned string, or the VALUE item in
        the 3-tuple) is always unquoted, unless unquote is set to False.

        If your application doesn't care whether the parameter was RFC 2231
        encoded, it can turn the return value into a string as follows:

            rawparam = msg.get_param('foo')
            param = email.utils.collapse_rfc2231_value(rawparam)

        )r�r.r7)rBrr�r�r6r�r�rrrrj�s
zMessage.get_paramr�rcCs
t|t�s|r|||f}||kr2|��dkr2d}n
|�|�}|j||d�st|s\t|||�}q�t�|t|||�g�}nbd}|j||d�D]N\}	}
d}|	��|��kr�t|||�}nt|	|
|�}|s�|}q�t�||g�}q�||�|�k�r|r�|�	||�n||=|||<dS)a�Set a parameter in the Content-Type header.

        If the parameter already exists in the header, its value will be
        replaced with the new value.

        If header is Content-Type and has not yet been defined for this
        message, it will be set to "text/plain" and the new parameter and
        value will be appended as per RFC 2045.

        An alternate header can be specified in the header argument, and all
        parameters will be quoted as necessary unless requote is False.

        If charset is specified, the parameter will be encoded according to RFC
        2231.  Optional language specifies the RFC 2231 language, defaulting
        to the empty string.  Both charset and language should be strings.
        r�r8)r�r�r�r6N)
rr r.rgrjr(r�ror�r�)rBrr'r��requoter�languager_r��	old_param�	old_value�append_paramrrrr��s6

��zMessage.set_paramcCs�||krdSd}|j||d�D]@\}}|��|��kr|sHt|||�}qt�|t|||�g�}q||�|�kr|||=|||<dS)a>Remove the given parameter completely from the Content-Type header.

        The header will be re-written in place without the parameter or its
        value. All values will be quoted as necessary unless requote is
        False.  Optional header specifies an alternative to the Content-Type
        header.
        Nrr�)r�r.r(r�rorg)rBrr�r��	new_ctyper�r�rrrr��s
�zMessage.del_paramcCs�|�d�dkst�|��dkr,|d=d|d<||kr@|||<dS|j||d�}||=|||<|dd�D]\}}|�||||�qhdS)	aKSet the main type and subtype for the Content-Type header.

        type must be a string in the form "maintype/subtype", otherwise a
        ValueError is raised.

        This method replaces the Content-Type header, keeping all the
        parameters in place.  If requote is False, this leaves the existing
        header's quoting as is.  Otherwise, the parameters will be quoted (the
        default).

        An alternative header can be specified in the header argument.  When
        the Content-Type header is set, we'll always also add a MIME-Version
        header.
        r�rr�zmime-versionr�rNr�)r,r�r.r�r�)rBrfr�r�r�r�r�rrr�set_typeszMessage.set_typecCsDt�}|�d|d�}||kr*|�d|d�}||kr6|St�|���S)a@Return the filename associated with the payload if present.

        The filename is extracted from the Content-Disposition header's
        `filename' parameter, and it is unquoted.  If that header is missing
        the `filename' parameter, this method falls back to looking for the
        `name' parameter.
        �filename�content-dispositionr�r�)r�rjr�collapse_rfc2231_valuer)rBr�r�r�rrr�get_filename&szMessage.get_filenamecCs,t�}|�d|�}||kr|St�|���S)z�Return the boundary associated with the payload if present.

        The boundary is extracted from the Content-Type header's `boundary'
        parameter, and it is unquoted.
        �boundary)r�rjrr��rstrip)rBr�r�r�rrr�get_boundary6s
zMessage.get_boundarycCst�}|�|d�}||kr$t�d��g}d}|D]:\}}|��dkr\|�dd|f�d}q0|�||f�q0|s�|�dd|f�g}|jD]z\}	}
|	��dkr�g}|D].\}}
|
dkr�|�|�q�|�d||
f�q�t�|�}
|�|j	�
|	|
��q�|�|	|
f�q�||_d	S)
a�Set the boundary parameter in Content-Type to 'boundary'.

        This is subtly different than deleting the Content-Type header and
        adding a new one with a new boundary parameter via add_header().  The
        main difference is that using the set_boundary() method preserves the
        order of the Content-Type header in the original message.

        HeaderParseError is raised if the message has no Content-Type header.
        r�zNo Content-Type header foundFr�z"%s"TrrN)r�r�r�HeaderParseErrorr.r/r:r�ror9r�)rBr�r�r��	newparams�foundp�pk�pvr��hr�r�r�r�rrr�set_boundaryCs2


zMessage.set_boundaryc	Cs�t�}|�d|�}||kr|St|t�rr|dp2d}z|d�d�}t||�}Wn ttfk
rp|d}YnXz|�d�Wntk
r�|YSX|��S)z�Return the charset parameter of the Content-Type header.

        The returned string is always coerced to lower case.  If there is no
        Content-Type header, or if that header has no charset parameter,
        failobj is returned.
        rrzus-asciirr`)	r�rjrr r"rrkrlr.)rBr�r�r�pcharsetrQrrr�get_content_charsetqs 

zMessage.get_content_charsetcs�fdd�|��D�S)a�Return a list containing the charset(s) used in this message.

        The returned list of items describes the Content-Type headers'
        charset parameter for this message and all the subparts in its
        payload.

        Each item will either be a string (the value of the charset parameter
        in the Content-Type header of that part) or the value of the
        'failobj' parameter (defaults to None), if the part does not have a
        main MIME type of "text", or the charset is not defined.

        The list will contain one string for each part of the message, plus
        one for the container message (i.e. self), so that a non-multipart
        message will still return a list of length 1.
        csg|]}|����qSr)r�)r��part�r�rrr��sz(Message.get_charsets.<locals>.<listcomp>��walk)rBr�rr�r�get_charsets�szMessage.get_charsetscCs*|�d�}|dkrdSt|�d��}|S)z�Return the message's content-disposition if it exists, or None.

        The return values can be either 'inline', 'attachment' or None
        according to the rfc2183.
        r�Nr)rgrr.)rBr'�c_drrr�get_content_disposition�s

zMessage.get_content_dispositionr�)FrN)FN)NF)N)N)N)Nr�T)Nr�T)r�TNrF)r�T)r�T)N)N)N)N)4�__name__�
__module__�__qualname__�__doc__r	rCrFrDrRrQrUrXrYr]ryr~r}r�r�r�r�r�r�r�r�r�r�rgr�r�r�r�r�r�r�r�r�r�r�r�rjr�r�r�r�r�r�r�r�r��email.iteratorsr�rrrrrisj


Z
/


				
�
"�
3

 


.


cs�eZdZd2dd�Zd3�fdd�	Zdd�Zd	d
�Zdd�Zd4dd�ZddddhZ	dd�Z
dd�Zdd�dd�Zdd�dd�Z
dd�Zd5dd �Zd6d!d"�Zd7d#d$�Zdd%�d&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Z�ZS)8�MIMEPartNcCs(|dkrddlm}|}t�||�dS)Nr)�default)�email.policyr�rrC)rBr9r�rrrrC�szMIMEPart.__init__Fcs0|dkr|jn|}|dkr |j}t�j||d�S)aReturn the entire formatted message as a string.

        Optional 'unixfrom', when true, means include the Unix From_ envelope
        header.  maxheaderlen is retained for backward compatibility with the
        base Message class, but defaults to None, meaning that the policy value
        for max_line_length controls the header maximum length.  'policy' is
        passed to the Generator instance used to serialize the message; if it
        is not specified the policy associated with the message instance is
        used.
        N)rIr9)r9�max_line_length�superrD)rBrKrIr9��	__class__rrrD�szMIMEPart.as_stringcCs|j|jjdd�d�S)NT)�utf8�r9)rDr9�clonerErrrrF�szMIMEPart.__str__cCs |�d�}|dkrdS|jdkS)Nr�F�
attachment)rg�content_disposition)rBr�rrr�
is_attachment�s
zMIMEPart.is_attachmentc	cs|��rdS|���d�\}}|dkrB||kr>|�|�|fVdS|dkrNdS|dkrz|��D]}|�||�EdHq^dSd|kr�|�d�|fVd}|�d�}|r�|��D]}|d|kr�|}q�q�|dkr�|��}|r�|dnd}|dk	�r|�||�EdHdS)Nr��text�	multipart�related�start�
content-idr)r�r�r�r-�
iter_parts�
_find_bodyrjry)	rBr��preferencelist�maintype�subtype�subpart�	candidater�subpartsrrrr�s6

zMIMEPart._find_body�r��html�plaincCsBt|�}d}|�||�D]$\}}||kr|}|}|dkrq>q|S)aReturn best candidate mime part for display as 'body' of message.

        Do a depth first search, starting with self, looking for the first part
        matching each of the items in preferencelist, and return the part
        corresponding to the first item that has a match, or None if no items
        have a match.  If 'related' is not included in preferencelist, consider
        the root part of any multipart/related encountered as a candidate
        match.  Ignore parts with 'Content-Disposition: attachment'.
        Nr)rr)rBr�	best_prio�body�prior�rrr�get_body�s
zMIMEPart.get_body)r�r)r�r)r�r�)r��alternativec
cs$|���d�\}}|dks"|dkr&dS|��}z|��}Wntk
rPYdSX|dkr�|dkr�|�d�}|r�d}g}|D]"}|�d�|kr�d	}q||�|�q||r�|EdHdS|�d
�|EdHdSg}	|D]L}|���d�\}}||f|j	k�r|�
��s||	k�r|	�|�q�|Vq�dS)aReturn an iterator over the non-main parts of a multipart.

        Skip the first of each occurrence of text/plain, text/html,
        multipart/related, or multipart/alternative in the multipart (unless
        they have a 'Content-Disposition: attachment' header) and include all
        remaining subparts in the returned iterator.  When applied to a
        multipart/related, return all parts except the root part.  Return an
        empty iterator when applied to a multipart/alternative or a
        non-multipart.
        r�r�rNr�rFrTr)r�r�ryr�rZrjrgr/�pop�_body_typesr�)
rBrrr\r�rr��attachmentsr��seenrrr�iter_attachmentssD



��
zMIMEPart.iter_attachmentsccs|��dkr|��EdHdS)z~Return an iterator over all immediate subparts of a multipart.

        Return an empty iterator for a non-multipart.
        r�N)r�ryrErrrr=szMIMEPart.iter_parts)�content_managercOs"|dkr|jj}|j|f|�|�SrV)r9r�get_content�rBr�args�kwrrrrEszMIMEPart.get_contentcOs&|dkr|jj}|j|f|�|�dSrV)r9r�set_contentrrrrrJszMIMEPart.set_contentc
Cs�|��dkr6|��}||f}||kr6td�||���g}g}|jD]4\}}|���d�rj|�||f�qD|�||f�qD|r�t|�|j	d�}	||	_|j
|	_
|	g|_
ng|_
||_d||d<|dk	r�|�d|�dS)Nr�zCannot convert {} to {}�content-r�z
multipart/r�r�)r�r�r�r�r:r.�
startswithr/rfr9r<r�)
rBr�disallowed_subtypesr��existing_subtype�keep_headers�part_headersr�r'r�rrr�_make_multipartOs0
�
zMIMEPart._make_multipartcCs|�dd|�dS)Nr�)r�mixed�r#�rBr�rrr�make_relatedjszMIMEPart.make_relatedcCs|�dd|�dS)Nr)r$r%r&rrr�make_alternativemszMIMEPart.make_alternativecCs|�dd|�dS)Nr$rr%r&rrr�
make_mixedpszMIMEPart.make_mixed)�_dispcOsf|��dks|��|kr(t|d|��t|�|jd�}|j||�|rXd|krX||d<|�|�dS)Nr��make_r�r�zContent-Disposition)r�r��getattrrfr9rr])rB�_subtyper*rrr�rrr�_add_multipartss
�zMIMEPart._add_multipartcOs|jd|�ddi|��dS)Nr�r*�inline)r��r.�rBrrrrr�add_related}szMIMEPart.add_relatedcOs|jd|�|�dS)Nr)rr0r1rrr�add_alternative�szMIMEPart.add_alternativecOs|jd|�ddi|��dS)Nr$r*r�)r$r0r1rrr�add_attachment�szMIMEPart.add_attachmentcCsg|_d|_dSrV�r:r<rErrr�clear�szMIMEPart.clearcCsdd�|jD�|_d|_dS)NcSs&g|]\}}|���d�s||f�qS)r)r.r)r��nr�rrrr��s�z*MIMEPart.clear_content.<locals>.<listcomp>r5rErrr�
clear_content�szMIMEPart.clear_content)N)FNN)r
)N)N)N)r�r�r�rCrDrFr�rrrrrrrr#r'r(r)r.r2r3r4r6r8�
__classcell__rrr�rr��s2

�7



r�cseZdZ�fdd�Z�ZS)rcs"t�j||�d|krd|d<dS)Nrr�)r�rr1r�rrr�szEmailMessage.set_content)r�r�r�rr9rrr�rr�s)NT)r��__all__�rerrrm�iorr�emailrr�email._policybaserr	rr=�email._encoded_wordsrr{r��compiler$rr(r5r7rr�rrrrr�<module>s6


"N`Xt�@sdS)N�rrr�)/usr/lib/python3.8/email/mime/__init__.py�<module>�X�@s4dZdgZddlZddlmZGdd�dej�ZdS)�$Base class for MIME specializations.�MIMEBase�N)�messagec@seZdZdZdd�dd�ZdS)rrN��policycKsH|dkrtjj}tjj||d�d||f}|jd|f|�d|d<dS)z�This constructor adds a Content-Type: and a MIME-Version: header.

        The Content-Type: header is taken from the _maintype and _subtype
        arguments.  Additional parameters for this header are taken from the
        keyword arguments.
        Nrz%s/%szContent-Typez1.0zMIME-Version)�emailr�compat32r�Message�__init__�
add_header)�self�	_maintype�_subtyper�_params�ctype�r�%/usr/lib/python3.8/email/mime/base.pyr
szMIMEBase.__init__)�__name__�
__module__�__qualname__�__doc__r
rrrrrs)r�__all__�email.policyrrr	rrrrr�<module>sX��@s*dZdgZddlmZGdd�de�ZdS)�.Base class for MIME multipart/* type messages.�
MIMEMultipart�)�MIMEBasec@s eZdZdZddd�dd�ZdS)rr�mixedN)�policycKsJtj|d|fd|i|��g|_|r8|D]}|�|�q(|rF|�|�dS)a�Creates a multipart/* type message.

        By default, creates a multipart/mixed message, with proper
        Content-Type and MIME-Version headers.

        _subtype is the subtype of the multipart content type, defaulting to
        `mixed'.

        boundary is the multipart boundary string.  By default it is
        calculated as needed.

        _subparts is a sequence of initial subparts for the payload.  It
        must be an iterable object, such as a list.  You can always
        attach new subparts to the message by using the attach() method.

        Additional parameters for the Content-Type header are taken from the
        keyword arguments (or passed into the _params argument).
        �	multipartrN)r�__init__�_payload�attach�set_boundary)�self�_subtype�boundary�	_subpartsr�_params�p�r�*/usr/lib/python3.8/email/mime/multipart.pyrszMIMEMultipart.__init__)rNN)�__name__�
__module__�__qualname__�__doc__rrrrrr
s�N)r�__all__�email.mime.baserrrrrr�<module>sX��@s6dZdgZddlmZddlmZGdd�de�ZdS)z9Base class for MIME type messages that are not multipart.�MIMENonMultipart�)�errors)�MIMEBasec@seZdZdZdd�ZdS)rz0Base class for MIME non-multipart type messages.cCst�d��dS)Nz4Cannot attach additional subparts to non-multipart/*)r�MultipartConversionError)�self�payload�r�-/usr/lib/python3.8/email/mime/nonmultipart.py�attachs�zMIMENonMultipart.attachN)�__name__�
__module__�__qualname__�__doc__r
rrrr	rsN)r�__all__�emailr�email.mime.baserrrrrr	�<module>sX�@s6dZdgZddlmZddlmZGdd�de�ZdS)z.Class representing text/* type MIME documents.�MIMEText�)�Charset)�MIMENonMultipartc@s eZdZdZddd�dd�ZdS)rz0Class for generating text/* type MIME documents.�plainN)�policycCsf|dkr4z|�d�d}Wntk
r2d}YnXtj|d|fd|idt|�i��|�||�dS)a~Create a text/* type MIME document.

        _text is the string for this message object.

        _subtype is the MIME sub content type, defaulting to "plain".

        _charset is the character set parameter added to the Content-Type
        header.  This defaults to "us-ascii".  Note that as a side-effect, the
        Content-Transfer-Encoding header will also be set.
        Nzus-asciizutf-8�textr�charset)�encode�UnicodeEncodeErrorr�__init__�str�set_payload)�self�_text�_subtype�_charsetr�r�%/usr/lib/python3.8/email/mime/text.pyrs


�zMIMEText.__init__)rN)�__name__�
__module__�__qualname__�__doc__rrrrrrsN)r�__all__�
email.charsetr�email.mime.nonmultipartrrrrrr�<module>sXJ�@s�dZddddddgZddlmZmZdd	lmZmZdd
lm	Z	Gdd�d�Z
Gdd�de
�ZGd
d�d�ZGdd�de�Z
dS)z-A parser of RFC 2822 and MIME email messages.�Parser�HeaderParser�BytesParser�BytesHeaderParser�
FeedParser�BytesFeedParser�)�StringIO�
TextIOWrapper)rr)�compat32c@s0eZdZd
ed�dd�Zddd�Zddd	�ZdS)
rN��policycCs||_||_dS)a�Parser of RFC 2822 and MIME email messages.

        Creates an in-memory object tree representing the email message, which
        can then be manipulated and turned over to a Generator to return the
        textual representation of the message.

        The string must be formatted as a block of RFC 2822 headers and header
        continuation lines, optionally preceded by a `Unix-from' header.  The
        header block is terminated either by the end of the string or by a
        blank line.

        _class is the class to instantiate for new message objects when they
        must be created.  This class must have a constructor that can take
        zero arguments.  Default is Message.Message.

        The policy keyword specifies a policy object that controls a number of
        aspects of the parser's operation.  The default policy maintains
        backward compatibility.

        N)�_classr)�selfr
r�r�"/usr/lib/python3.8/email/parser.py�__init__szParser.__init__FcCs@t|j|jd�}|r|��|�d�}|s,q8|�|�q|��S)a\Create a message structure from the data in a file.

        Reads all the data from the file and returns the root of the message
        structure.  Optional headersonly is a flag specifying whether to stop
        parsing after reading the headers or not.  The default is False,
        meaning it parses the entire contents of the file.
        ri )rr
r�_set_headersonly�read�feed�close)r�fp�headersonly�
feedparser�datarrr�parse)s
zParser.parsecCs|jt|�|d�S)a-Create a message structure from a string.

        Returns the root of the message structure.  Optional headersonly is a
        flag specifying whether to stop parsing after reading the headers or
        not.  The default is False, meaning it parses the entire contents of
        the file.
        �r)rr�r�textrrrr�parsestr;szParser.parsestr)N)F)F)�__name__�
__module__�__qualname__r
rrrrrrrrs
c@s eZdZddd�Zddd�ZdS)	rTcCst�||d�S�NT)rr�rrrrrrrHszHeaderParser.parsecCst�||d�Sr")rrrrrrrKszHeaderParser.parsestrN)T)T)rr r!rrrrrrrGs
c@s(eZdZdd�Zd	dd�Zd
dd�ZdS)rcOst||�|_dS)a�Parser of binary RFC 2822 and MIME email messages.

        Creates an in-memory object tree representing the email message, which
        can then be manipulated and turned over to a Generator to return the
        textual representation of the message.

        The input must be formatted as a block of RFC 2822 headers and header
        continuation lines, optionally preceded by a `Unix-from' header.  The
        header block is terminated either by the end of the input or by a
        blank line.

        _class is the class to instantiate for new message objects when they
        must be created.  This class must have a constructor that can take
        zero arguments.  Default is Message.Message.
        N)r�parser)r�args�kwrrrrQszBytesParser.__init__FcCs0t|ddd�}z|j�||�W�S|��XdS)acCreate a message structure from the data in a binary file.

        Reads all the data from the file and returns the root of the message
        structure.  Optional headersonly is a flag specifying whether to stop
        parsing after reading the headers or not.  The default is False,
        meaning it parses the entire contents of the file.
        �ascii�surrogateescape)�encoding�errorsN)r	�detachr$rr#rrrrcszBytesParser.parsecCs|jddd�}|j�||�S)a2Create a message structure from a byte string.

        Returns the root of the message structure.  Optional headersonly is a
        flag specifying whether to stop parsing after reading the headers or
        not.  The default is False, meaning it parses the entire contents of
        the file.
        �ASCIIr()r*)�decoder$rrrrr�
parsebytesrszBytesParser.parsebytesN)F)F)rr r!rrr.rrrrrOs
c@s eZdZddd�Zddd�ZdS)	rTcCstj||dd�S�NTr)rrr#rrrrszBytesHeaderParser.parsecCstj||dd�Sr/)rr.rrrrr.�szBytesHeaderParser.parsebytesN)T)T)rr r!rr.rrrrr~s
N)�__doc__�__all__�iorr	�email.feedparserrr�email._policybaser
rrrrrrrr�<module>s�7/X�%�@s�dZddlZddlZddlmZmZmZmZddlm	Z	ddl
mZddlm
Z
ddlmZdd	d
ddd
ddgZe�d�ZeGdd�de��Ze�Ze`ejdd�Zejdd�Zejddd�Zejdd�ZdS)zcThis will be the home for the policy that hooks in the new
code that adds all the email6 features.
�N)�Policy�Compat32�compat32�_extend_docstrings)�_has_surrogates)�HeaderRegistry)�raw_data_manager)�EmailMessagerrr�EmailPolicy�default�strict�SMTP�HTTPz\n|\rcspeZdZdZeZdZdZe�Z	e
Z�fdd�Zdd�Z
dd	�Zd
d�Zdd
�Zdd�Zdd�Zddd�Z�ZS)r
aQ+
    PROVISIONAL

    The API extensions enabled by this policy are currently provisional.
    Refer to the documentation for details.

    This policy adds new header parsing and folding algorithms.  Instead of
    simple strings, headers are custom objects with custom attributes
    depending on the type of the field.  The folding algorithm fully
    implements RFCs 2047 and 5322.

    In addition to the settable attributes listed above that apply to
    all Policies, this policy adds the following additional attributes:

    utf8                -- if False (the default) message headers will be
                           serialized as ASCII, using encoded words to encode
                           any non-ASCII characters in the source strings.  If
                           True, the message headers will be serialized using
                           utf8 and will not contain encoded words (see RFC
                           6532 for more on this serialization format).

    refold_source       -- if the value for a header in the Message object
                           came from the parsing of some source, this attribute
                           indicates whether or not a generator should refold
                           that value when transforming the message back into
                           stream form.  The possible values are:

                           none  -- all source values use original folding
                           long  -- source values that have any line that is
                                    longer than max_line_length will be
                                    refolded
                           all  -- all values are refolded.

                           The default is 'long'.

    header_factory      -- a callable that takes two arguments, 'name' and
                           'value', where 'name' is a header field name and
                           'value' is an unfolded header field value, and
                           returns a string-like object that represents that
                           header.  A default header_factory is provided that
                           understands some of the RFC5322 header field types.
                           (Currently address fields and date fields have
                           special treatment, while all other fields are
                           treated as unstructured.  This list will be
                           completed before the extension is marked stable.)

    content_manager     -- an object with at least two methods: get_content
                           and set_content.  When the get_content or
                           set_content method of a Message object is called,
                           it calls the corresponding method of this object,
                           passing it the message object as its first argument,
                           and any arguments or keywords that were passed to
                           it as additional arguments.  The default
                           content_manager is
                           :data:`~email.contentmanager.raw_data_manager`.

    F�longcs*d|krt�|dt��t�jf|�dS)N�header_factory)�object�__setattr__r�super�__init__)�self�kw��	__class__��"/usr/lib/python3.8/email/policy.pyr]szEmailPolicy.__init__cCs|j|jS)z�+
        The implementation for this class returns the max_count attribute from
        the specialized header class that would be used to construct a header
        of type 'name'.
        )r�	max_count)r�namerrr�header_max_countdszEmailPolicy.header_max_countcCs>|d�dd�\}}|�d�d�|dd��}||�d�fS)ac+
        The name is parsed as everything up to the ':' and returned unmodified.
        The value is determined by stripping leading whitespace off the
        remainder of the first line, joining all subsequent lines together, and
        stripping any trailing carriage return or linefeed characters.  (This
        is the same as Compat32).

        r�:�z 	�N�
)�split�lstrip�join�rstrip)r�sourcelinesr�valuerrr�header_source_parsevs	zEmailPolicy.header_source_parsecCsVt|d�r$|j��|��kr$||fSt|t�rFt|���dkrFtd��||�||�fS)a�+
        The name is returned unchanged.  If the input value has a 'name'
        attribute and it matches the name ignoring case, the value is returned
        unchanged.  Otherwise the name and value are passed to header_factory
        method, and the resulting custom header object is returned as the
        value.  In this case a ValueError is raised if the input value contains
        CR or LF characters.

        rrzDHeader values may not contain linefeed or carriage return characters)	�hasattrr�lower�
isinstance�str�len�
splitlines�
ValueErrorr�rrr'rrr�header_store_parse�s

zEmailPolicy.header_store_parsecCs*t|d�r|Sd�t�|��}|�||�S)ai+
        If the value has a 'name' attribute, it is returned to unmodified.
        Otherwise the name and the value with any linesep characters removed
        are passed to the header_factory method, and the resulting custom
        header object is returned.  Any surrogateescaped bytes get turned
        into the unicode unknown-character glyph.

        rr )r)r$�linesep_splitterr"rr0rrr�header_fetch_parse�s	
zEmailPolicy.header_fetch_parsecCs|j||dd�S)a+
        Header folding is controlled by the refold_source policy setting.  A
        value is considered to be a 'source value' if and only if it does not
        have a 'name' attribute (having a 'name' attribute means it is a header
        object of some sort).  If a source value needs to be refolded according
        to the policy, it is converted into a custom header object by passing
        the name and the value with any linesep characters removed to the
        header_factory method.  Folding of a custom header object is done by
        calling its fold method with the current policy.

        Source values are split into lines using splitlines.  If the value is
        not to be refolded, the lines are rejoined using the linesep from the
        policy and returned.  The exception is lines containing non-ascii
        binary data.  In that case the value is refolded regardless of the
        refold_source setting, which causes the binary data to be CTE encoded
        using the unknown-8bit charset.

        T��
refold_binary)�_foldr0rrr�fold�szEmailPolicy.foldcCs0|j|||jdkd�}|jr dnd}|�|d�S)a+
        The same as fold if cte_type is 7bit, except that the returned value is
        bytes.

        If cte_type is 8bit, non-ASCII binary data is converted back into
        bytes.  Headers with binary data are not refolded, regardless of the
        refold_header setting, since there is no way to know whether the binary
        data consists of single byte characters or multibyte characters.

        If utf8 is true, headers are encoded to utf8, otherwise to ascii with
        non-ASCII unicode rendered as encoded words.

        �7bitr4�utf8�ascii�surrogateescape)r6�cte_typer9�encode)rrr'�folded�charsetrrr�fold_binary�szEmailPolicy.fold_binarycs�t|d�r|j|d�S|jr"|jntj�|��}|jdkp�|jdko�|rdt|d�t|�d�kp�t�fdd�|d	d�D��}|s�|r�t	|�r�|�
|d
�|��j|d�S|d|j�|�|jS)Nr)�policy�allrr�c3s|]}t|��kVqdS)N)r-)�.0�x��maxlenrr�	<genexpr>�sz$EmailPolicy._fold.<locals>.<genexpr>rr z: )
r)r7�max_line_length�sys�maxsizer.�
refold_sourcer-�anyrrr$�linesep)rrr'r5�lines�refoldrrFrr6�s


 �zEmailPolicy._fold)F)�__name__�
__module__�__qualname__�__doc__r	�message_factoryr9rLrrr�content_managerrrr(r1r3r7r@r6�
__classcell__rrrrr
s:
T)�raise_on_defectr!)rN)rNrI)r9)rT�rerJ�email._policybaserrrr�email.utilsr�email.headerregistryr�email.contentmanagerr�
email.messager	�__all__�compiler2r
rr�clonerr
r�SMTPUTF8rrrr�<module>s4�
@X��
@sXdZddddddddd	d
g
ZddlZdd
lmZmZmZdZdZdZ	dd�e
d�D�Zedd�Zedd�Z
de�d�e�d�D]Zee�ee<q�deed�<dD]Zee�e
e<q�dd�Zdd�Zdd�Zdd�Zd,dd �Zd!d
�Zd"d	�Zd-d$d�Ze
dd�Zd%D]Zee�ee<�qd&efd'd�Zefd(d�ZeZeZd)d*�Zd+d�Z dS).aFQuoted-printable content transfer encoding per RFCs 2045-2047.

This module handles the content transfer encoding method defined in RFC 2045
to encode US ASCII-like 8-bit data called `quoted-printable'.  It is used to
safely encode text that is in a character set similar to the 7-bit US ASCII
character set, but that includes some 8-bit characters that are normally not
allowed in email bodies or headers.

Quoted-printable is very space-inefficient for encoding binary files; use the
email.base64mime module for that instead.

This module provides an interface to encode and decode both headers and bodies
with quoted-printable encoding.

RFC 2045 defines a method for including character set information in an
`encoded-word' in a header.  This method is commonly used for 8-bit real names
in To:/From:/Cc: etc. fields, as well as Subject: lines.

This module does not do the line wrapping or end-of-line character
conversion necessary for proper internationalized headers; it only
does dumb encoding and decoding.  To deal with the various line
wrapping issues, use the email.header module.
�body_decode�body_encode�body_length�decode�decodestring�
header_decode�
header_encode�
header_length�quote�unquote�N)�
ascii_letters�digits�	hexdigits�
�
�cCsg|]}d|�qS)z=%02X�)�.0�crr�&/usr/lib/python3.8/email/quoprimime.py�
<listcomp>7sr�s-!*+/�ascii�_� s_ !"#$%&'()*+,-./0123456789:;<>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~	cCst|�t|kS)z>Return True if the octet should be escaped with header quopri.)�chr�_QUOPRI_HEADER_MAP��octetrrr�header_checkJsrcCst|�t|kS)z<Return True if the octet should be escaped with body quopri.)r�_QUOPRI_BODY_MAPrrrr�
body_checkOsr!cCstdd�|D��S)a:Return a header quoted-printable encoding length.

    Note that this does not include any RFC 2047 chrome added by
    `header_encode()`.

    :param bytearray: An array of bytes (a.k.a. octets).
    :return: The length in bytes of the byte array when it is encoded with
        quoted-printable for headers.
    css|]}tt|�VqdS�N)�lenr�rrrrr�	<genexpr>^sz header_length.<locals>.<genexpr>��sum��	bytearrayrrrrTs
cCstdd�|D��S)z�Return a body quoted-printable encoding length.

    :param bytearray: An array of bytes (a.k.a. octets).
    :return: The length in bytes of the byte array when it is encoded with
        quoted-printable for bodies.
    css|]}tt|�VqdSr")r#r r$rrrr%hszbody_length.<locals>.<genexpr>r&r(rrrrascCsft|t�st|�}|s&|�|���n<t|d�t|�|krT|d||7<n|�|���dS)N���)�
isinstance�strr�append�lstripr#)�L�s�maxlen�extrarrr�_max_appendks
r3cCstt|dd�d��S)zDTurn a string in the form =AB to the ASCII character with value 0xab���)r�int�r0rrrr
vscCstt|�Sr")�_QUOPRI_MAP�ord)rrrrr	{s�
iso-8859-1cCs$|sdS|�d��t�}d||fS)a�Encode a single header line with quoted-printable (like) encoding.

    Defined in RFC 2045, this `Q' encoding is similar to quoted-printable, but
    used specifically for email header fields to allow charsets with mostly 7
    bit characters (and some 8 bit) to remain more or less readable in non-RFC
    2045 aware mail clients.

    charset names the character set to use in the RFC 2046 header.  It
    defaults to iso-8859-1.
    r�latin1z=?%s?q?%s?=)r�	translater)�header_bytes�charset�encodedrrrrss
�Lc
Cs�|dkrtd��|s|S|�t�}d|}|d}g}|j}|��D�]}d}t|�d|}	||	kr�||}
||
ddkr�||||
d��|
d}q^||
ddkr�||||
��|
d}q^||||
�d�|
}q^|�rR|ddk�rR||	}|d	k�rt|d�}n(|dk�r,|d|}n|t|d�}|||d�|�qD|||d
��qD|dtk�rz|d�|�|�S)a�Encode with quoted-printable, wrapping at maxlinelen characters.

    Each line of encoded text will end with eol, which defaults to "\n".  Set
    this to "\r\n" if you will be using the result of this function directly
    in an email.

    Each line will be wrapped at, at most, maxlinelen characters before the
    eol string (maxlinelen defaults to 76 characters, the maximum value
    permitted by RFC 2045).  Long lines will have the 'soft line break'
    quoted-printable character "=" appended to them, so the decoded text will
    be identical to the original text.

    The minimum maxlinelen is 4 to have room for a quoted character ("=XX")
    followed by a soft line break.  Smaller values will generate a
    ValueError.

    �zmaxlinelen must be at least 4�=r4r�r*z 	r5Nr)	�
ValueErrorr=�_QUOPRI_BODY_ENCODE_MAPr-�
splitlinesr#r	�CRLF�join)
�body�
maxlinelen�eol�
soft_break�maxlinelen1�encoded_bodyr-�line�start�	laststart�stop�room�qrrrr�sD




cCs|s|Sd}|��D]�}|��}|s.||7}qd}t|�}||kr||}|dkrd||7}|d7}nv|d|kr||d7}q:n^|d|kr�||dtkr�||dtkr�|t|||d��7}|d7}n||7}|d7}||kr:||7}q:q|ddk�r|�|��r|d	d�}|S)
z_Decode a quoted-printable string.

    Lines are separated with eol, which defaults to \n.
    rrrCr4rDr5r*rN)rG�rstripr#rr
�endswith)r@rL�decodedrP�i�nrrrrr�s8
,
cCs|�d�}t|�S)zCTurn a match in the form =AB to the ASCII character with value 0xabr)�groupr
)�matchr0rrr�_unquote_matchs
r]cCs |�dd�}tjdt|tjd�S)aDecode a string encoded with RFC 2045 MIME header `Q' encoding.

    This function does not parse a full MIME header value encoded with
    quoted-printable (like =?iso-8859-1?q?Hello_World?=) -- please use
    the high level email.header class for that functionality.
    rrz=[a-fA-F0-9]{2})�flags)�replace�re�subr]�ASCIIr8rrrr#s)r)r;)!�__doc__�__all__r`�stringrr
rrH�NL�EMPTYSTRING�ranger9rr �encoderrr:rr!rrr3r
r	rrFrrrrr]rrrrr�<module>sR�




O0X6%�@sjdZddddddddd	d
ddd
ddgZddlZddlZddlZddlZddlZddlZddlZ	ddl
mZddl
mZ
ddl
mZddl
mZmZmZddlmZdZdZdZdZdZe�d�Ze�d�Zdd�Zdd �Zd7d"d�Zd#d�Zd$d%�Z d8d'd�Z!d9d(d�Z"d:d)d	�Z#d*d�Z$d+d�Z%d,d�Z&d-d�Z'd;d.d�Z(e�d/ej)�Z*d0d�Z+d<d3d�Z,d=d5d6�Z-dS)>zMiscellaneous utilities.�collapse_rfc2231_value�
decode_params�decode_rfc2231�encode_rfc2231�
formataddr�
formatdate�format_datetime�getaddresses�
make_msgid�	mktime_tz�	parseaddr�	parsedate�parsedate_tz�parsedate_to_datetime�unquote�N)�quote)�AddressList)r
)rr
�
_parsedate_tz)�Charsetz, �z
�'z[][\\()<>@,:;".]z[\\"]cCs*z|��WdStk
r$YdSXdS)z8Return True if s contains surrogate-escaped binary data.FTN)�encode�UnicodeEncodeError)�s�r�!/usr/lib/python3.8/email/utils.py�_has_surrogates3s
rcCs|�dd�}|�dd�S)N�utf-8�surrogateescape�replace)r�decode)�string�original_bytesrrr�	_sanitize@sr#rcCs�|\}}|�d�|r�z|�d�Wn<tk
r`t|t�rFt|�}|�|�}d||fYSXd}t�|�rtd}t�	d|�}d||||fS|S)a�The inverse of parseaddr(), this takes a 2-tuple of the form
    (realname, email_address) and returns the string value suitable
    for an RFC 2822 From, To or Cc header.

    If the first element of pair is false, then the second element is
    returned unmodified.

    The optional charset is the character set that is used to encode
    realname in case realname is not ASCII safe.  Can be an instance of str or
    a Charset-like object which has a header_encode method.  Default is
    'utf-8'.
    �asciiz%s <%s>r�"z\\\g<0>z%s%s%s <%s>)
rr�
isinstance�strr�
header_encode�
specialsre�search�	escapesre�sub)�pair�charset�name�address�encoded_name�quotesrrrrLs 




cCst�|�}t|�}|jS)z7Return a list of (REALNAME, EMAIL) for each fieldvalue.)�
COMMASPACE�join�_AddressList�addresslist)�fieldvalues�all�arrrrns
cCsfddddddddg|d	|d
ddd
dddddddddg|dd|d|d|d|d|fS)Nz"%s, %02d %s %04d %02d:%02d:%02d %s�Mon�Tue�Wed�Thu�Fri�Sat�Sun���Jan�Feb�Mar�Apr�May�Jun�Jul�Aug�Sep�Oct�Nov�Dec�r���r)�	timetuple�zonerrr�_format_timetuple_and_zoneus&�
��rUFcCsR|dkrt��}|s|r,tj�|tjj�}ntj�|�}|rH|��}d}t||�S)a�Returns a date string as specified by RFC 2822, e.g.:

    Fri, 09 Nov 2001 01:08:47 -0000

    Optional timeval if given is a floating point time value as accepted by
    gmtime() and localtime(), otherwise the current time is used.

    Optional localtime is a flag that when True, interprets timeval, and
    returns a date relative to the local timezone instead of UTC, properly
    taking daylight savings time into account.

    Optional argument usegmt means that the timezone is written out as
    an ascii string, not numeric one (so "GMT" instead of "+0000"). This
    is needed for HTTP, and is only used when localtime==False.
    NF)�time�datetime�
fromtimestamp�timezone�utc�utcfromtimestamp�
astimezoner)�timeval�	localtime�usegmt�dtrrrr~scCsV|��}|r2|jdks$|jtjjkr,td��d}n|jdkrBd}n
|�d�}t||�S)a$Turn a datetime into a date string as specified in RFC 2822.

    If usegmt is True, dt must be an aware datetime with an offset of zero.  In
    this case 'GMT' will be rendered instead of the normal +0000 required by
    RFC2822.  This is to support HTTP headers involving date stamps.
    Nz%usegmt option requires a UTC datetime�GMTz-0000z%z)rS�tzinforWrYrZ�
ValueError�strftimerU)r`r_�nowrTrrrr�s

cCs^tt��d�}t��}t�d�}|dkr0d}nd|}|dkrHt��}d|||||f}|S)a{Returns a string suitable for RFC 2822 compliant Message-ID, e.g:

    <142480216486.20800.16526388040877946887@nightshade.la.mastaler.com>

    Optional idstring if given is a string used to strengthen the
    uniqueness of the message id.  Optional domain if given provides the
    portion of the message id after the '@'.  It defaults to the locally
    defined hostname.
    �d�@Nr�.z<%d.%d.%d%s@%s>)�intrV�os�getpid�random�getrandbits�socket�getfqdn)�idstring�domainr]�pid�randint�msgidrrrr	�s

cCsNt|��^}}|dkr(tj|dd��Stj|dd�dt�tj|d��i�S)NrArb��seconds)rrWrY�	timedelta)�data�dtuple�tzrrrr�s�cCst|�j}|sdS|dS)z�
    Parse addr into its constituent realname and email address parts.

    Return a tuple of realname and email address, unless the parse fails, in
    which case return a 2-tuple of ('', '').
    )rrr)r5r6)�addr�addrsrrrr�s
cCs`t|�dkr\|�d�r<|�d�r<|dd��dd��dd�S|�d�r\|�d�r\|dd�S|S)	zRemove quotes from a string.rOr%���z\\�\z\"�<�>)�len�
startswith�endswithr)r'rrrr�scCs&|�td�}t|�dkr"dd|fS|S)z#Decode string according to RFC 2231rBN)�split�TICKr�)r�partsrrrr�s
cCsDtjj|d|pdd�}|dkr*|dkr*|S|dkr6d}d|||fS)z�Encode string according to RFC 2231.

    If neither charset nor language is given, then s is returned as-is.  If
    charset is given but not language, the string is encoded using the empty
    string for language.
    rr$)�safe�encodingNz%s'%s'%s)�urllib�parser)rr.�languagerrrr�sz&^(?P<name>\w+)\*((?P<num>[0-9]+)\*?)?$c
Csl|dd�}g}i}|�d�\}}|�||f�|r�|�d�\}}|�d�rRd}nd}t|�}t�|�}|r�|�dd�\}}|dk	r�t|�}|�|g��|||f�q0|�|dt	|�f�q0|�rh|�
�D]�\}}g}d}	|��|D].\}}
}|�rtj
j|
d	d
�}
d}	|�|
�q�t	t�|��}|	�rTt|�\}}}|�|||d|ff�q�|�|d|f�q�|S)zDecode parameters list according to RFC 2231.

    params is a sequence of 2-tuples containing (param name, string value).
    Nr�*TFr/�numz"%s"zlatin-1)r�)�pop�appendr�r�rfc2231_continuation�match�groupri�
setdefaultr�items�sortr�r��EMPTYSTRINGr4r)
�params�
new_params�rfc2231_paramsr/�value�encoded�mor��
continuations�extendedrr.r�rrrrsD

r�us-asciicCsnt|t�rt|�dkrt|�S|\}}}|dkr4|}t|d�}zt|||�WStk
rht|�YSXdS)NrPzraw-unicode-escape)r&�tupler�r�bytesr'�LookupError)r��errors�fallback_charsetr.r��text�rawbytesrrrr9s

r}c	Cs|dkrtj�tjj���S|jdk	r.|��S|��dd�|f}t�|�}t�	|�}z tj
|jd�}t�||j�}Wn�t
k
r�|tjt�|�dd��}tjo�|jdk}|r�tjntj}|tj
|d�kr�t�|tj|�}n
t�|�}YnX|j|d�S)a�Return local time as an aware datetime object.

    If called without arguments, return current time.  Otherwise *dt*
    argument should be a datetime instance, and it is converted to the
    local time zone according to the system time zone database.  If *dt* is
    naive (that is, dt.tzinfo is None), it is assumed to be in local time.
    In this case, a positive or zero value for *isdst* causes localtime to
    presume initially that summer time (for example, Daylight Saving Time)
    is or is not (respectively) in effect for the specified time.  A
    negative value for *isdst* causes the localtime() function to attempt
    to divine whether summer time is in effect for the specified time.

    Nr}rurAr)rb)rWrerYrZr\rbrSrV�mktimer^rw�	tm_gmtoff�tm_zone�AttributeError�gmtime�daylight�tm_isdst�altzone�tznamer)	r`�isdst�tmrv�localtm�deltarz�dst�gmtoffrrrr^Ss$


r^)r)NFF)F)NN)NN)rr�)Nr}).�__doc__�__all__rj�rerVrlrnrW�urllib.parser��email._parseaddrrrr5r
rr
r�
email.charsetrr3r��UEMPTYSTRING�CRLFr��compiler)r+rr#rrrUrrr	rrrrr�ASCIIr�rrr^rrrr�<module>sp�



"	



�8�
X��@s&ddlmZdgZGdd�de�ZdS)�)�IntEnum�
HTTPStatusc@seZdZdZdAdd�ZdZdZdZdZd	Z	d
Z
dZdZd
Z
dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZd Z d!Z!d"Z"d#Z#d$Z$d%Z%d&Z&d'Z'd(Z(d)Z)d*Z*d+Z+d,Z,d-Z-d.Z.d/Z/d0Z0d1Z1d2Z2d3Z3d4Z4d5Z5d6Z6d7Z7d8Z8d9Z9d:Z:d;Z;d<Z<d=Z=d>Z>d?Z?d@S)Bra�HTTP status codes and reason phrases

    Status codes from the following RFCs are all observed:

        * RFC 7231: Hypertext Transfer Protocol (HTTP/1.1), obsoletes 2616
        * RFC 6585: Additional HTTP Status Codes
        * RFC 3229: Delta encoding in HTTP
        * RFC 4918: HTTP Extensions for WebDAV, obsoletes 2518
        * RFC 5842: Binding Extensions to WebDAV
        * RFC 7238: Permanent Redirect
        * RFC 2295: Transparent Content Negotiation in HTTP
        * RFC 2774: An HTTP Extension Framework
        * RFC 7725: An HTTP Status Code to Report Legal Obstacles
        * RFC 7540: Hypertext Transfer Protocol Version 2 (HTTP/2)
    �cCs"t�||�}||_||_||_|S)N)�int�__new__�_value_�phrase�description)�cls�valuerr	�obj�r
�#/usr/lib/python3.8/http/__init__.pyrs
zHTTPStatus.__new__)�d�Continuez!Request received, please continue)�ezSwitching Protocolsz.Switching to new protocol; obey Upgrade header)�f�
Processing)���OKz#Request fulfilled, document follows)���CreatedzDocument created, URL follows)���Acceptedz/Request accepted, processing continues off-line)��zNon-Authoritative InformationzRequest fulfilled from cache)��z
No Contentz"Request fulfilled, nothing follows)��z
Reset Contentz"Clear input form for further input)��zPartial ContentzPartial content follows)��zMulti-Status)��zAlready Reported)��zIM Used)i,zMultiple Choicesz,Object has several resources -- see URI list)i-zMoved Permanently�(Object moved permanently -- see URI list)i.�Found�(Object moved temporarily -- see URI list)i/z	See Otherz'Object moved -- see Method and URL list)i0zNot Modifiedz)Document has not changed since given time)i1z	Use Proxyz@You must use proxy specified in Location to access this resource)i3zTemporary Redirectr#)i4zPermanent Redirectr!)i�zBad Requestz(Bad request syntax or unsupported method)i��Unauthorizedz*No permission -- see authorization schemes)i�zPayment Requiredz"No payment -- see charging schemes)i��	Forbiddenz0Request forbidden -- authorization will not help)i�z	Not FoundzNothing matches the given URI)i�zMethod Not Allowedz-Specified method is invalid for this resource)i�zNot Acceptablez%URI not available in preferred format)i�zProxy Authentication Requiredz7You must authenticate with this proxy before proceeding)i�zRequest Timeoutz"Request timed out; try again later)i��ConflictzRequest conflict)i��Gonez5URI no longer exists and has been permanently removed)i�zLength Requiredz"Client must specify Content-Length)i�zPrecondition Failedz Precondition in headers is false)i�zRequest Entity Too LargezEntity is too large)i�zRequest-URI Too LongzURI is too long)i�zUnsupported Media Typez!Entity body in unsupported format)i�zRequested Range Not SatisfiablezCannot satisfy request range)i�zExpectation Failedz'Expect condition could not be satisfied)i�zMisdirected Requestz(Server is not able to produce a response)i�zUnprocessable Entity)i��Locked)i�zFailed Dependency)i�zUpgrade Required)i�zPrecondition Requiredz8The origin server requires the request to be conditional)i�zToo Many RequestszOThe user has sent too many requests in a given amount of time ("rate limiting"))i�zRequest Header Fields Too LargezVThe server is unwilling to process the request because its header fields are too large)i�zUnavailable For Legal ReasonszOThe server is denying access to the resource as a consequence of a legal demand)i�zInternal Server ErrorzServer got itself in trouble)i�zNot Implementedz&Server does not support this operation)i�zBad Gatewayz+Invalid responses from another server/proxy)i�zService Unavailablez8The server cannot process the request due to a high load)i�zGateway Timeoutz4The gateway server did not receive a timely response)i�zHTTP Version Not SupportedzCannot fulfill request)i�zVariant Also Negotiates)i�zInsufficient Storage)i�z
Loop Detected)i�zNot Extended)i�zNetwork Authentication Requiredz7The client needs to authenticate to gain network accessN)r)@�__name__�
__module__�__qualname__�__doc__r�CONTINUE�SWITCHING_PROTOCOLS�
PROCESSINGr�CREATED�ACCEPTED�NON_AUTHORITATIVE_INFORMATION�
NO_CONTENT�
RESET_CONTENT�PARTIAL_CONTENT�MULTI_STATUS�ALREADY_REPORTED�IM_USED�MULTIPLE_CHOICES�MOVED_PERMANENTLY�FOUND�	SEE_OTHER�NOT_MODIFIED�	USE_PROXY�TEMPORARY_REDIRECT�PERMANENT_REDIRECT�BAD_REQUEST�UNAUTHORIZED�PAYMENT_REQUIRED�	FORBIDDEN�	NOT_FOUND�METHOD_NOT_ALLOWED�NOT_ACCEPTABLE�PROXY_AUTHENTICATION_REQUIRED�REQUEST_TIMEOUT�CONFLICT�GONE�LENGTH_REQUIRED�PRECONDITION_FAILED�REQUEST_ENTITY_TOO_LARGE�REQUEST_URI_TOO_LONG�UNSUPPORTED_MEDIA_TYPE�REQUESTED_RANGE_NOT_SATISFIABLE�EXPECTATION_FAILED�MISDIRECTED_REQUEST�UNPROCESSABLE_ENTITY�LOCKED�FAILED_DEPENDENCY�UPGRADE_REQUIRED�PRECONDITION_REQUIRED�TOO_MANY_REQUESTS�REQUEST_HEADER_FIELDS_TOO_LARGE�UNAVAILABLE_FOR_LEGAL_REASONS�INTERNAL_SERVER_ERROR�NOT_IMPLEMENTED�BAD_GATEWAY�SERVICE_UNAVAILABLE�GATEWAY_TIMEOUT�HTTP_VERSION_NOT_SUPPORTED�VARIANT_ALSO_NEGOTIATES�INSUFFICIENT_STORAGE�
LOOP_DETECTED�NOT_EXTENDED�NETWORK_AUTHENTICATION_REQUIREDr
r
r
rrsz
	N)�enumr�__all__rr
r
r
r�<module>sXK��@sfdZddlZddlZddlZddlZddlZddlZddlZ	ddl
mZdddddd	d
ddd
ddddddddgZdZ
dZdZdZdZdZe��ejj�dd�ejj��D�ZdZdZe�d �jZe�d!�jZe�d"�Z e�d#�Z!d$d%d&hZ"dBd(d)�Z#Gd*d+�d+ej$j%�Z&d,d-�Z'e&fd.d/�Z(Gd0d�dej)�Z*Gd1d�d�Z+zddl,Z,Wne-k
�r`YnXGd2d3�d3e+�Z.e�/d3�Gd4d�de0�Z1Gd5d�de1�Z2Gd6d�de1�Z3Gd7d�de1�Z4Gd8d	�d	e1�Z5Gd9d
�d
e1�Z6Gd:d�de1�Z7Gd;d
�d
e1�Z8Gd<d�de8�Z9Gd=d�de8�Z:Gd>d�de8�Z;Gd?d�de1�Z<Gd@d�de1�Z=GdAd�de>e<�Z?e1Z@dS)Ca�
HTTP/1.1 client library

<intro stuff goes here>
<other stuff, too>

HTTPConnection goes through a number of "states", which define when a client
may legally make another request or fetch the response for a particular
request. This diagram details these state transitions:

    (null)
      |
      | HTTPConnection()
      v
    Idle
      |
      | putrequest()
      v
    Request-started
      |
      | ( putheader() )*  endheaders()
      v
    Request-sent
      |\_____________________________
      |                              | getresponse() raises
      | response = getresponse()     | ConnectionError
      v                              v
    Unread-response                Idle
    [Response-headers-read]
      |\____________________
      |                     |
      | response.read()     | putrequest()
      v                     v
    Idle                  Req-started-unread-response
                     ______/|
                   /        |
   response.read() |        | ( putheader() )*  endheaders()
                   v        v
       Request-started    Req-sent-unread-response
                            |
                            | response.read()
                            v
                          Request-sent

This diagram presents the following rules:
  -- a second request may not be started until {response-headers-read}
  -- a response [object] cannot be retrieved until {request-sent}
  -- there is no differentiation between an unread response body and a
     partially read response body

Note: this enforcement is applied by the HTTPConnection class. The
      HTTPResponse class does not enforce this state machine, which
      implies sophisticated clients may accelerate the request/response
      pipeline. Caution should be taken, though: accelerating the states
      beyond the above pattern may imply knowledge of the server's
      connection-close behavior for certain requests. For example, it
      is impossible to tell whether the server will close the connection
      UNTIL the response headers have been read; this means that further
      requests cannot be placed into the pipeline until it is known that
      the server will NOT be closing the connection.

Logical State                  __state            __response
-------------                  -------            ----------
Idle                           _CS_IDLE           None
Request-started                _CS_REQ_STARTED    None
Request-sent                   _CS_REQ_SENT       None
Unread-response                _CS_IDLE           <response_class>
Req-started-unread-response    _CS_REQ_STARTED    <response_class>
Req-sent-unread-response       _CS_REQ_SENT       <response_class>
�N)�urlsplit�HTTPResponse�HTTPConnection�
HTTPException�NotConnected�UnknownProtocol�UnknownTransferEncoding�UnimplementedFileMode�IncompleteRead�
InvalidURL�ImproperConnectionState�CannotSendRequest�CannotSendHeader�ResponseNotReady�
BadStatusLine�LineTooLong�RemoteDisconnected�error�	responses�Pi��UNKNOWN�IdlezRequest-startedzRequest-sentcCsi|]}||j�qS�)�phrase)�.0�vrr�!/usr/lib/python3.8/http/client.py�
<dictcomp>jsri�ds[^:\s][^:\r\n]*s\n(?![ \t])|\r(?![ \t\n])z[- ]z[-]�PATCH�POST�PUT�datac
Cshz|�d�WStk
rb}z8t|j|j|j|jd|��||j|j�|f�d�W5d}~XYnXdS)z<Call data.encode("latin-1") but show a better error message.�latin-1z`%s (%.20r) is not valid Latin-1. Use %s.encode('utf-8') if you want to send it encoded in UTF-8.N)�encode�UnicodeEncodeError�encoding�object�start�end�title)r"�name�errrrr�_encode�s���r-c@seZdZdd�ZdS)�HTTPMessagecCsj|��d}t|�}g}d}|��D]@}|d|���|krBd}n|dd���sVd}|r$|�|�q$|S)a�Find all header lines matching a given header name.

        Look through the list of headers and find all lines matching a given
        header name (and their continuation lines).  A list of the lines is
        returned, without interpretation.  If the header does not occur, an
        empty list is returned.  If the header occurs multiple times, all
        occurrences are returned.  Case is not important in the header name.

        �:rN�)�lower�len�keys�isspace�append)�selfr+�n�lst�hit�linerrr�getallmatchingheaders�s
z!HTTPMessage.getallmatchingheadersN)�__name__�
__module__�__qualname__r;rrrrr.�sr.cCsXg}|�td�}t|�tkr&td��|�|�t|�tkrHtdt��|dkrqTq|S)z�Reads potential header lines into a list from a file pointer.

    Length of line is limited by _MAXLINE, and number of
    headers is limited by _MAXHEADERS.
    r0�header linezgot more than %d headers��
�
�)�readline�_MAXLINEr2rr5�_MAXHEADERSr)�fp�headersr:rrr�
_read_headers�s
rIcCs,t|�}d�|��d�}tjj|d��|�S)aGParses only RFC2822 headers from a file pointer.

    email Parser wants to see strings rather than bytes.
    But a TextIOWrapper around self.rfile would buffer too many bytes
    from the stream, bytes which we later need to read as bytes.
    So we read the correct bytes here, as bytes, for email Parser
    to parse.

    rC�
iso-8859-1)�_class)rI�join�decode�email�parser�Parser�parsestr)rGrKrH�hstringrrr�
parse_headers�s
rScseZdZd@dd�Zdd�Zdd�Zd	d
�Zdd�Z�fd
d�Z�fdd�Z	dd�Z
dd�ZdAdd�Zdd�Z
dd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�ZdBd(d)�ZdCd*d+�ZdD�fd,d-�	Zd.d/�Zd0d1�Zd2d3�ZdEd4d5�Zd6d7�Zd8d9�Zd:d;�Zd<d=�Zd>d?�Z �Z!S)FrrNcCsR|�d�|_||_||_d|_|_t|_t|_t|_	t|_
t|_t|_t|_
dS)N�rb)�makefilerG�
debuglevel�_methodrH�msg�_UNKNOWN�version�status�reason�chunked�
chunk_left�length�
will_close)r6�sockrV�method�urlrrr�__init__�szHTTPResponse.__init__cCst|j�td�d�}t|�tkr*td��|jdkrBtdt|��|sNt	d��z|�
dd�\}}}WnFtk
r�z|�
dd�\}}d}Wntk
r�d}YnXYnX|�d	�s�|�
�t|��z$t|�}|d
ks�|dkr�t|��Wntk
�rt|��YnX|||fS)Nr0rJzstatus linerzreply:z-Remote end closed connection without response��zHTTP/ri�)�strrGrDrEr2rrV�print�reprr�split�
ValueError�
startswith�_close_connr�int)r6r:rZr[r\rrr�_read_statuss2

zHTTPResponse._read_statusc	Cs�|jdk	rdS|��\}}}|tkr&qHt|j�}|jdkrDtd|�~q||_|_|�	�|_
|dkrnd|_n|�d�r�d|_nt
|��t|j�|_|_|jdkr�|j��D]\}}td|d|�q�|j�d	�}|r�|��d
kr�d|_d|_nd|_|��|_d|_|j�d
�}|�rb|j�sbzt|�|_Wntk
�rLd|_YnX|jdk�rhd|_nd|_|tk�s�|tk�s�d|k�r�dk�s�n|jdk�r�d|_|j�s�|j�s�|jdk�r�d|_dS)Nrzheaders:)zHTTP/1.0zHTTP/0.9�
zHTTP/1.��header:r/�transfer-encodingr]TF�content-lengthr���HEAD)rHro�CONTINUErIrGrVrh�coder[�stripr\rZrlrrSrX�items�getr1r]r^�_check_closer`r_rnrk�
NO_CONTENT�NOT_MODIFIEDrW)	r6rZr[r\�skipped_headers�hdr�val�tr_encr_rrr�begin5sf







�
�
���zHTTPResponse.begincCsv|j�d�}|jdkr.|r*d|��kr*dSdS|j�d�r>dS|rRd|��krRdS|j�d�}|rrd|��krrdSdS)N�
connectionrq�closeTFz
keep-alivezproxy-connection)rHr{rZr1)r6�conn�pconnrrrr|}s
zHTTPResponse._check_closecCs|j}d|_|��dS�N)rGr�)r6rGrrrrm�szHTTPResponse._close_conncs$zt���W5|jr|��XdSr�)rGrm�superr��r6��	__class__rrr��szHTTPResponse.closecst���|jr|j��dSr�)r��flushrGr�r�rrr��s
zHTTPResponse.flushcCsdS)zAlways returns TrueTrr�rrr�readable�szHTTPResponse.readablecCs
|jdkS)z!True if the connection is closed.N)rGr�rrr�isclosed�szHTTPResponse.isclosedcCs�|jdkrdS|jdkr$|��dS|dk	rRt|�}|�|�}t|�d|���S|jr`|��S|j	dkrv|j�
�}n6z|�|j	�}Wntk
r�|���YnXd|_	|��|SdS)NrCrvr)
rGrWrm�	bytearray�readinto�
memoryview�tobytesr]�_readall_chunkedr_�read�
_safe_readr
)r6�amt�br7�srrrr��s*



zHTTPResponse.readcCs�|jdkrdS|jdkr$|��dS|jr4|�|�S|jdk	r^t|�|jkr^t|�d|j�}|j�|�}|s||r||��n&|jdk	r�|j|8_|js�|��|S)z^Read up to len(b) bytes into bytearray b and return the number
        of bytes read.
        Nrrv)	rGrWrmr]�_readinto_chunkedr_r2r�r�)r6r�r7rrrr��s$





zHTTPResponse.readintocCsr|j�td�}t|�tkr$td��|�d�}|dkrB|d|�}zt|d�WStk
rl|���YnXdS)Nr0z
chunk size�;r�)	rGrDrEr2r�findrnrkrm)r6r:�irrr�_read_next_chunk_sizes
z"HTTPResponse._read_next_chunk_sizecCs:|j�td�}t|�tkr$td��|s*q6|dkrq6qdS)Nr0ztrailer liner@)rGrDrEr2r�r6r:rrr�_read_and_discard_trailersz&HTTPResponse._read_and_discard_trailercCsl|j}|sh|dk	r|�d�z|��}Wntk
rDtd��YnX|dkrb|��|��d}||_|S)NrerCr)r^r�r�rkr
r�rm)r6r^rrr�_get_chunk_left s
zHTTPResponse._get_chunk_leftcCsp|jtkst�g}z6|��}|dkr&q>|�|�|��d|_qd�|�WStk
rjtd�|���YnXdS�NrrC)	r]rY�AssertionErrorr�r5r�r^rLr
)r6�valuer^rrrr�8szHTTPResponse._readall_chunkedcCs�|jtkst�d}t|�}zv|��}|dkr2|WSt|�|kr\|�|�}|||_||WS|d|�}|�|�}||d�}||7}d|_qWn(tk
r�tt	|d|����YnXdS)Nr)
r]rYr�r�r�r2�_safe_readintor^r
�bytes)r6r��total_bytes�mvbr^r7�temp_mvbrrrr�Fs$



zHTTPResponse._readinto_chunkedcCs.|j�|�}t|�|kr*t||t|���|S)aRead the number of bytes requested.

        This function should be used when <amt> bytes "should" be present for
        reading. If the bytes are truly not available (due to EOF), then the
        IncompleteRead exception can be used to detect the problem.
        )rGr�r2r
)r6r�r"rrrr�^szHTTPResponse._safe_readcCs:t|�}|j�|�}||kr6tt|d|��||��|S)z2Same as _safe_read, but for reading into a buffer.N)r2rGr�r
r�)r6r�r�r7rrrr�js
zHTTPResponse._safe_readinto���cCs�|jdks|jdkrdS|jr(|�|�S|jdk	rJ|dksD||jkrJ|j}|j�|�}|sh|rh|��n|jdk	r�|jt|�8_|S)zvRead with at most one underlying system call.  If at least one
        byte is buffered, return that instead.
        NrvrCr)rGrWr]�_read1_chunkedr_�read1rmr2)r6r7�resultrrrr�rs


zHTTPResponse.read1cCs4|jdks|jdkrdS|jr(|�|�S|j�|�S)NrvrC)rGrWr]�
_peek_chunked�peek)r6r7rrrr��s

zHTTPResponse.peekcs�|jdks|jdkrdS|jr*t��|�S|jdk	rL|dksF||jkrL|j}|j�|�}|sj|rj|��n|jdk	r�|jt|�8_|S)NrvrCr)rGrWr]r�rDr_rmr2)r6�limitr�r�rrrD�s

zHTTPResponse.readlinecCsd|��}|dks|dkrdSd|kr0|ks6n|}|j�|�}|jt|�8_|s`td��|Sr�)r�rGr�r^r2r
)r6r7r^r�rrrr��szHTTPResponse._read1_chunkedcCsDz|��}Wntk
r"YdSX|dkr0dS|j�|�d|�S)NrC)r�r
rGr�)r6r7r^rrrr��szHTTPResponse._peek_chunkedcCs
|j��Sr�)rG�filenor�rrrr��szHTTPResponse.filenocCsF|jdkrt��|j�|�p|}t|t�s4t|d�s8|Sd�|�SdS)axReturns the value of the header matching *name*.

        If there are multiple matching headers, the values are
        combined into a single string separated by commas and spaces.

        If no matching header is found, returns *default* or None if
        the *default* is not specified.

        If the headers are unknown, raises http.client.ResponseNotReady.

        N�__iter__z, )rHr�get_all�
isinstancerg�hasattrrL)r6r+�defaultrHrrr�	getheader�s
zHTTPResponse.getheadercCs|jdkrt��t|j���S)z&Return list of (header, value) tuples.N)rHr�listrzr�rrr�
getheaders�s
zHTTPResponse.getheaderscCs|Sr�rr�rrrr��szHTTPResponse.__iter__cCs|jS)ajReturns an instance of the class mimetools.Message containing
        meta-information associated with the URL.

        When the method is HTTP, these headers are those returned by
        the server at the head of the retrieved HTML page (including
        Content-Length and Content-Type).

        When the method is FTP, a Content-Length header will be
        present if (as is now usual) the server passed back a file
        length in response to the FTP retrieval request. A
        Content-Type header will be present if the MIME type can be
        guessed.

        When the method is local-file, returned headers will include
        a Date representing the file's last-modified time, a
        Content-Length giving file size, and a Content-Type
        containing a guess at the file's type. See also the
        description of the mimetools module.

        )rHr�rrr�info�szHTTPResponse.infocCs|jS)aZReturn the real URL of the page.

        In some cases, the HTTP server redirects a client to another
        URL. The urlopen() function handles this transparently, but in
        some cases the caller needs to know which URL the client was
        redirected to. The geturl() method can be used to get at this
        redirected URL.

        )rcr�rrr�geturl�s
zHTTPResponse.geturlcCs|jS)zuReturn the HTTP status code that was sent with the response,
        or None if the URL is not an HTTP URL.

        )r[r�rrr�getcode�szHTTPResponse.getcode)rNN)N)r�)r�)r�)N)"r<r=r>rdror�r|rmr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rDr�r�r�r�r�r�r�r�r��
__classcell__rrr�rr�s<	
!H

 "

	

c@s
eZdZdZdZeZeZdZ	dZ
edd��Zedd��Z
d	ejd	d
fdd�Zd7d
d�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd8d d!�Zd9d"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Z d:dd.�d/d0�Z!d	ifdd.�d1d2�Z"d3d4�Z#d5d6�Z$d	S);rrqzHTTP/1.1r0rcCst|tj�S)zFTest whether a file-like object is a text or a binary stream.
        )r��io�
TextIOBase)�streamrrr�
_is_textIOszHTTPConnection._is_textIOcCsf|dkr|��tkrdSdSt|d�r*dSzt|�}|jWStk
rNYnXt|t�rbt|�SdS)aGet the content-length based on the body.

        If the body is None, we set Content-Length: 0 for methods that expect
        a body (RFC 7230, Section 3.3.2). We also set the Content-Length for
        any method if the body is a str or bytes-like object and not a file.
        Nrr�)	�upper�_METHODS_EXPECTING_BODYr�r��nbytes�	TypeErrorr�rgr2)�bodyrb�mvrrr�_get_content_lengths

z"HTTPConnection._get_content_lengthN� cCsn||_||_||_d|_g|_d|_t|_d|_d|_	d|_
i|_|�||�\|_
|_|�|j
�tj|_dSr�)�timeout�source_address�	blocksizera�_buffer�_HTTPConnection__response�_CS_IDLE�_HTTPConnection__staterW�_tunnel_host�_tunnel_port�_tunnel_headers�
_get_hostport�host�port�_validate_host�socket�create_connection�_create_connection)r6r�r�r�r�r�rrrrd4szHTTPConnection.__init__cCs<|jrtd��|�||�\|_|_|r.||_n
|j��dS)aDSet up host and port for HTTP CONNECT tunnelling.

        In a connection that uses HTTP CONNECT tunneling, the host passed to the
        constructor is used as a proxy server that relays all communication to
        the endpoint passed to `set_tunnel`. This done by sending an HTTP
        CONNECT request to the proxy server when the connection is established.

        This method must be called before the HTTP connection has been
        established.

        The headers argument should be a mapping of extra HTTP headers to send
        with the CONNECT request.
        z.Can't set up tunnel for established connectionN)ra�RuntimeErrorr�r�r�r��clear)r6r�r�rHrrr�
set_tunnelJszHTTPConnection.set_tunnelcCs�|dkr�|�d�}|�d�}||kr�zt||dd��}WnHtk
r�||dd�dkrh|j}ntd||dd���YnX|d|�}n|j}|r�|ddkr�|ddkr�|dd�}||fS)	Nr/�]r0rfznonnumeric port: '%s'r�[r�)�rfindrnrk�default_portr)r6r�r�r��jrrrr�bs

zHTTPConnection._get_hostportcCs
||_dSr�)rV)r6�levelrrr�set_debuglevelvszHTTPConnection.set_debuglevelcCs�d|j|jf}|�d�}|�|�|j��D](\}}d||f}|�d�}|�|�q.|�d�|j|j|jd�}|�	�\}}	}
|	t
jjkr�|�
�td|	|
��f��|j�td�}t|�tkr�td	��|s�q�|d
kr�q�|jdkr�td|���q�dS)
NzCONNECT %s:%d HTTP/1.0
�asciiz%s: %s
r#rA�rbzTunnel connection failed: %d %sr0r?r@rrr)r�r�r$�sendr�rz�response_classrarWro�http�
HTTPStatus�OKr��OSErrorryrGrDrEr2rrVrhrM)r6�connect_str�
connect_bytes�headerr��
header_str�header_bytes�responserZrx�messager:rrr�_tunnelys4�



�
zHTTPConnection._tunnelcCsB|�|j|jf|j|j�|_|j�tjtj	d�|j
r>|��dS)z3Connect to the host and port specified in __init__.r0N)r�r�r�r�r�ra�
setsockoptr��IPPROTO_TCP�TCP_NODELAYr�r�r�rrr�connect�s
�zHTTPConnection.connectcCsBt|_z|j}|r d|_|��W5|j}|r<d|_|��XdS)z(Close the connection to the HTTP server.N)r�r�r�r�ra)r6r�rarrrr��szHTTPConnection.closecCs|jdkr |jr|��nt��|jdkr8tdt|��t|d�r�|jdkrTtd�|�|�}|rt|jdkrttd�|�	|j
�}|s�q�|r�|�d�}|j�|�qtdSz|j�|�WnLt
k
�rt|tjj�r�|D]}|j�|�q�nt
dt|���YnXdS)	z�Send `data' to the server.
        ``data`` can be a string object, a bytes object, an array object, a
        file-like object that supports a .read() method, or an iterable object.
        Nrzsend:r��sendIng a read()able�encoding file using iso-8859-1rJz9data should be a bytes-like object or an iterable, got %r)ra�	auto_openr�rrVrhrir�r�r�r�r$�sendallr�r��collections�abc�Iterable�type)r6r"r$�	datablock�drrrr��s8






�zHTTPConnection.sendcCs|j�|�dS)zuAdd a line of output to the current request buffer.

        Assumes that the line does *not* end with \r\n.
        N)r�r5)r6r�rrr�_output�szHTTPConnection._outputccs^|jdkrtd�|�|�}|r2|jdkr2td�|�|j�}|sDqZ|rR|�d�}|Vq2dS)Nrr�r�rJ)rVrhr�r�r�r$)r6r�r$rrrr�_read_readable�s


zHTTPConnection._read_readableFcCs |j�d�d�|j�}|jdd�=|�|�|dk	�rt|d�rN|�|�}nZzt|�WnFtk
r�zt|�}Wn$tk
r�tdt	|���YnXYnX|f}|D]R}|s�|j
dkr�td�q�|r�|jdkr�t
|�d	�d
��d�|d}|�|�q�|�r|jdk�r|�d�dS)
z�Send the currently buffered request and clear the buffer.

        Appends an extra \r\n to the buffer.
        A message_body may be specified, to be appended to the request.
        )rCrCrANr�zAmessage_body should be a bytes-like object or an iterable, got %rrzZero length chunk ignoredrq�Xz
r�s0

)r��extendrLr�r�rr�r��iterrrVrh�	_http_vsnr2r$)r6�message_body�encode_chunkedrX�chunks�chunkrrr�_send_output�s:


�
�zHTTPConnection._send_outputcCs�|jr|j��rd|_|jtkr(t|_n
t|j��|�|�||_|pHd}|�|�d|||j	f}|�
|�|��|jdk�r�|�s�d}|�
d�r�t|�\}}}}}|r�z|�d�}Wntk
r�|�d�}YnX|�d	|�n�|jr�|j}	|j}
n|j}	|j}
z|	�d�}Wn tk
�r4|	�d�}YnX|	�d
�dk�rRd|d
}|
|jk�rl|�d	|�n|�d�}|�d	d||
f�|�s�|�dd�ndS)a`Send a request to the server.

        `method' specifies an HTTP request method, e.g. 'GET'.
        `url' specifies the object being requested, e.g. '/index.html'.
        `skip_host' if True does not add automatically a 'Host:' header
        `skip_accept_encoding' if True does not add automatically an
           'Accept-Encoding:' header
        N�/z%s %s %srqrfr�r��idna�Hostr/r�[�]z%s:%szAccept-Encoding�identity)r�r�r�r��_CS_REQ_STARTEDr
�_validate_methodrW�_validate_path�
_http_vsn_strr�_encode_requestr	rlrr$r%�	putheaderr�r�r�r�r�r�rM)r6rbrc�	skip_host�skip_accept_encoding�request�netloc�nil�
netloc_encr�r��host_encrrr�
putrequest sP






zHTTPConnection.putrequestcCs
|�d�S)Nr�)r$)r6rrrrr�szHTTPConnection._encode_requestcCs,t�|�}|r(td|�d|���d���dS)z&Validate a method name for putrequest.z)method can't contain control characters. � (found at least �)N)�$_contains_disallowed_method_pchar_re�searchrk�group)r6rb�matchrrrr�s

�zHTTPConnection._validate_methodcCs,t�|�}|r(td|�d|���d���dS)zValidate a url for putrequest.�&URL can't contain control characters. r#r$N��!_contains_disallowed_url_pchar_rer&rr')r6rcr(rrrr�s
zHTTPConnection._validate_pathcCs,t�|�}|r(td|�d|���d���dS)z9Validate a host so it doesn't contain control characters.r)r#r$Nr*)r6r�r(rrrr��s
zHTTPConnection._validate_hostcGs�|jtkrt��t|d�r$|�d�}t|�s:td|f��t|�}t|�D]\\}}t|d�rl|�d�||<nt	|t
�r�t|��d�||<t||�rJtd||f��qJd�
|�}|d|}|�|�dS)	zkSend a request header line to the server.

        For example: h.putheader('Accept', 'text/html')
        r$r�zInvalid header name %rr#zInvalid header value %rs
	s: N)r�rrr�r$�_is_legal_header_namerkr��	enumerater�rnrg�_is_illegal_header_valuerLr)r6r��valuesr��	one_valuer�rrrr�s"





zHTTPConnection.putheader�rcCs*|jtkrt|_nt��|j||d�dS)z�Indicate that the last header line has been sent to the server.

        This method sends the request to the server.  The optional message_body
        argument can be used to pass a message body associated with the
        request.
        r1N)r�r�_CS_REQ_SENTrr)r6r
rrrr�
endheaders�s
zHTTPConnection.endheaderscCs|�|||||�dS)z&Send a complete request to the server.N)�
_send_request)r6rbrcr�rHrrrrr�szHTTPConnection.requestcCs�tdd�|D��}i}d|kr&d|d<d|kr6d|d<|j||f|�d|kr�d	|kr�d
}|�||�}|dkr�|dk	r�|jdkr�td|�d
}|�dd�q�|�dt|��nd
}|��D]\}	}
|�|	|
�q�t|t�r�t	|d�}|j
||d�dS)Ncss|]}|��VqdSr�)r1)r�krrr�	<genexpr>�sz/HTTPConnection._send_request.<locals>.<genexpr>r�r0rzaccept-encodingrrtrsFrzUnable to determine size of %rTzTransfer-Encodingr]zContent-Lengthr�r1)�	frozensetr"r�rVrhrrgrzr�r-r3)r6rbrcr�rHr�header_names�skips�content_lengthr�r�rrrr4�s0	


zHTTPConnection._send_requestcCs�|jr|j��rd|_|jtks&|jr0t|j��|jdkrR|j|j|j|jd�}n|j|j|jd�}z\z|�	�Wnt
k
r�|���YnX|jt
ks�t�t|_|jr�|��n||_|WS|���YnXdS)a)Get the response from the server.

        If the HTTPConnection is in the correct state, returns an
        instance of HTTPResponse or of whatever object is returned by
        the response_class variable.

        If a request has not been sent or if a previous response has
        not be handled, ResponseNotReady is raised.  If the HTTP
        response indicates that the connection should be closed, then
        it will be closed before the response is returned.  When the
        connection is closed, the underlying socket is closed.
        Nrr�)r�r�r�r2rrVr�rarWr��ConnectionErrorr�r`rYr�r�)r6r�rrr�getresponses0

�
zHTTPConnection.getresponse)NN)NF)FF)N)%r<r=r>r	rrr��	HTTP_PORTr�r�rV�staticmethodr�r�r��_GLOBAL_DEFAULT_TIMEOUTrdr�r�r�r�r�r�r�rrrr"rrrr�rr3rr4r<rrrrrsL

�

	&
6�
	
�.csHeZdZdZeZdddejdfdddd��fdd�Z�fdd�Z	�Z
S)	�HTTPSConnectionz(This class allows communication via SSL.Nr�)�context�check_hostnamer�cs�tt|�j|||||	d�|dk	s2|dk	s2|dk	rHddl}
|
�dtd�||_||_|dkrtt�	�}|j
dk	rtd|_
|jtjk}|dkr�|j
}|r�|s�td��|s�|r�|�||�|j
dk	r�d|_
||_|dk	r�||j_
dS)N)r�rzTkey_file, cert_file and check_hostname are deprecated, use a custom context instead.reTzMcheck_hostname needs a SSL context with either CERT_OPTIONAL or CERT_REQUIRED)r�r@rd�warnings�warn�DeprecationWarning�key_file�	cert_file�ssl�_create_default_https_context�post_handshake_auth�verify_mode�	CERT_NONErBrk�load_cert_chain�_context)r6r�r�rFrGr�r�rArBr�rC�will_verifyr�rrrdcs<���

zHTTPSConnection.__init__cs6t���|jr|j}n|j}|jj|j|d�|_dS)z(Connect to a host on a given (SSL) port.)�server_hostnameN)r�r�r�r�rN�wrap_socketra)r6rPr�rrr��s

�zHTTPSConnection.connect)r<r=r>�__doc__�
HTTPS_PORTr�r�r?rdr�r�rrr�rr@\s��$r@c@seZdZdS)rN�r<r=r>rrrrr�sc@seZdZdS)rNrTrrrrr�sc@seZdZdS)rNrTrrrrr�sc@seZdZdd�ZdS)rcCs|f|_||_dSr�)�argsrZ)r6rZrrrrd�szUnknownProtocol.__init__N�r<r=r>rdrrrrr�sc@seZdZdS)rNrTrrrrr�sc@seZdZdS)r	NrTrrrrr	�sc@s$eZdZddd�Zdd�ZejZdS)r
NcCs|f|_||_||_dSr�)rU�partial�expected)r6rWrXrrrrd�szIncompleteRead.__init__cCs2|jdk	rd|j}nd}d|jjt|j�|fS)Nz, %i more expectedrfz%s(%i bytes read%s))rXr�r<r2rW)r6�errr�__repr__�s
�zIncompleteRead.__repr__)N)r<r=r>rdrZr'�__str__rrrrr
�s
c@seZdZdS)rNrTrrrrr�sc@seZdZdS)r
NrTrrrrr
�sc@seZdZdS)rNrTrrrrr�sc@seZdZdS)rNrTrrrrr�sc@seZdZdd�ZdS)rcCs|st|�}|f|_||_dSr�)rirUr:r�rrrrd�szBadStatusLine.__init__NrVrrrrr�sc@seZdZdd�ZdS)rcCst�|dt|f�dS)Nz&got more than %d bytes when reading %s)rrdrE)r6�	line_typerrrrd�s�zLineTooLong.__init__NrVrrrrr�sc@seZdZdd�ZdS)rcOs"t�|d�tj|f|�|�dS)Nrf)rrd�ConnectionResetError)r6�pos�kwrrrrd�szRemoteDisconnected.__init__NrVrrrrr�s)r")ArR�email.parserrN�
email.messager�r��rer��collections.abcr��urllib.parser�__all__r=rSrYr�rr2�globals�updater��__members__r/rrErF�compile�	fullmatchr,r&r.r+r%r�r-r��Messager.rIrS�BufferedIOBaserrrH�ImportErrorr@r5�	Exceptionrrrrrr	r
rr
rrrrr]rrrrrr�<module>s�F�



W8
Xz��@sdZddddddddgZd	d
lZd	d
lZd	d
lZd	d
lZd	d
lZd	d
lZd	d
l	Zd	d
l
Zd	d
lZ
d	dlmZdZd
ad
d�Zee
jj�ZdZdd�ZdZdd�ZdddddddgZddddd d!d"d#d$d%d&d'gZgZeD]Ze�e� ��q�dud(d)�Z!dvd*d+�Z"d
d
d
d
d,�Z#e�$d-ej%�Z&d.d/�Z'd0d1�Z(e�$d2ej%�Z)e�$d3ej*ej%B�Z+e�$d4ej,ej%B�Z-d5d6�Z.e�$d7ej,ej%B�Z/d8d9�Z0d:d;�Z1e�$d<�Z2e�$d=�Z3e�$d>�Z4e�$d?�Z5d@dA�Z6e�$dB�Z7dCdD�Z8dEdF�Z9dGdH�Z:e�$dIej%�Z;dJdK�Z<dLdM�Z=dNdO�Z>dPdQ�Z?e�$dRej%�Z@dSdT�ZAdUdV�ZBdWdX�ZCdYdZ�ZDd[ZEe�$d\�ZFd]d^�ZGd_d`�ZHdadb�ZIdcdd�ZJGded�d�ZKGdfd�d�ZLGdgd�deL�ZMdhdi�ZNdjdk�ZOGdldm�dm�ZPGdnd�d�ZQGdod�deR�ZSGdpd�deQ�ZTdqdr�ZUGdsd�deT�ZVGdtd�deT�ZWd
S)wa�HTTP cookie handling for web clients.

This module has (now fairly distant) origins in Gisle Aas' Perl module
HTTP::Cookies, from the libwww-perl library.

Docstrings, comments and debug strings in this code refer to the
attributes of the HTTP cookie system as cookie-attributes, to distinguish
them clearly from Python attributes.

Class diagram (note that BSDDBCookieJar and the MSIE* classes are not
distributed with the Python standard library, but are available from
http://wwwsearch.sf.net/):

                        CookieJar____
                        /     \      \
            FileCookieJar      \      \
             /    |   \         \      \
 MozillaCookieJar | LWPCookieJar \      \
                  |               |      \
                  |   ---MSIEBase |       \
                  |  /      |     |        \
                  | /   MSIEDBCookieJar BSDDBCookieJar
                  |/
               MSIECookieJar

�Cookie�	CookieJar�CookiePolicy�DefaultCookiePolicy�
FileCookieJar�LWPCookieJar�	LoadError�MozillaCookieJar�N)�timegmFcGs(tsdStsddl}|�d�atj|�S)Nr	zhttp.cookiejar)�debug�logger�logging�	getLogger)�argsr
�r�$/usr/lib/python3.8/http/cookiejar.py�_debug,s
rzQa filename was not supplied (nor was the CookieJar instance initialised with one)cCsJddl}ddl}ddl}|��}|�d|�|��}|jd|dd�dS)Nr	zhttp.cookiejar bug!
%s�)�
stacklevel)�io�warnings�	traceback�StringIO�	print_exc�getvalue�warn)rrr�f�msgrrr�_warn_unhandled_exception:s
ri�cCs�|dd�\}}}}}}|tkr�d|kr4dkr�nnhd|krLdkr�nnPd|krddkr�nn8d|kr|dkr�nn d|kr�dkr�nnt|�SdSdS)	N����r	��;�=)�
EPOCH_YEARr
)�tt�year�month�mday�hour�min�secrrr�_timegmIs&8��
��
��
r.�Mon�Tue�Wed�Thu�Fri�Sat�Sun�Jan�Feb�Mar�Apr�May�Jun�Jul�Aug�Sep�Oct�Nov�DeccCs@|dkrtj��}ntj�|�}d|j|j|j|j|j|jfS)aHReturn a string representing time in seconds since epoch, t.

    If the function is called without an argument, it will use the current
    time.

    The format of the returned string is like "YYYY-MM-DD hh:mm:ssZ",
    representing Universal Time (UTC, aka GMT).  An example of this format is:

    1994-11-24 08:49:37Z

    Nz%04d-%02d-%02d %02d:%02d:%02dZ)	�datetime�utcnow�utcfromtimestampr(r)�dayr+�minute�second��t�dtrrr�	time2isozWs�rKcCsR|dkrtj��}ntj�|�}dt|��|jt|jd|j|j	|j
|jfS)z�Return a string representing time in seconds since epoch, t.

    If the function is called without an argument, it will use the current
    time.

    The format of the returned string is like this:

    Wed, DD-Mon-YYYY HH:MM:SS GMT

    Nz#%s, %02d-%s-%04d %02d:%02d:%02d GMTr )rBrCrD�DAYS�weekdayrE�MONTHSr)r(r+rFrGrHrrr�
time2netscapejs
�rO)�GMT�UTC�UT�Zz^([-+])?(\d\d?):?(\d\d)?$cCsjd}|tkrd}nTt�|�}|rfdt|�d��}|�d�rR|dt|�d��}|�d�dkrf|}|S)Nr	ir��<r �-)�	UTC_ZONES�TIMEZONE_RE�search�int�group)�tz�offset�mrrr�offset_from_tz_string�s

r_c
Cs�t|�}|tjkrdSzt�|���d}Wn^tk
r�zt|�}Wntk
r`YYdSXd|krvdkr�nn|}nYdSYnX|dkr�d}|dkr�d}|dkr�d}t|�}t|�}t|�}t|�}|dk�r6t�t���d}|d}	|}
|||	}|	|
}	t	|	�dk�r6|	dk�r.|d}n|d}t
|||||||f�}|dk	�r�|dk�rdd}|��}t|�}|dk�r�dS||}|S)Nr r!r	i��d�2rQ)
rZrB�MAXYEAR�MONTHS_LOWER�index�lower�
ValueError�time�	localtime�absr.�upperr_)
rE�mon�yr�hrr,r-r\�imon�cur_yrr^�tmprIr]rrr�	_str2time�sV







rqzV^[SMTWF][a-z][a-z], (\d\d) ([JFMASOND][a-z][a-z]) (\d\d\d\d) (\d\d):(\d\d):(\d\d) GMT$z+^(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)[a-z]*,?\s*a�^
    (\d\d?)            # day
       (?:\s+|[-\/])
    (\w+)              # month
        (?:\s+|[-\/])
    (\d+)              # year
    (?:
          (?:\s+|:)    # separator before clock
       (\d\d?):(\d\d)  # hour:min
       (?::(\d\d))?    # optional seconds
    )?                 # optional clock
       \s*
    (?:
       ([-+]?\d{2,4}|(?![APap][Mm]\b)[A-Za-z]+) # timezone
       \s*
    )?
    (?:
       \(\w+\)         # ASCII representation of timezone in parens.
       \s*
    )?$cCs�t�|�}|rl|��}t�|d���d}t|d�|t|d�t|d�t|d�t|d�f}t|�S|�	�}t
�d|d�}dgd	\}}}}}}	}
t�|�}|dk	r�|��\}}}}}}	}
ndSt
||||||	|
�S)
a�Returns time in seconds since epoch of time represented by a string.

    Return value is an integer.

    None is returned if the format of str is unrecognized, the time is outside
    the representable range, or the timezone string is not recognized.  If the
    string contains no timezone, UTC is assumed.

    The timezone in the string may be numerical (like "-0800" or "+0100") or a
    string timezone (like "UTC", "GMT", "BST" or "EST").  Currently, only the
    timezone strings equivalent to UTC (zero offset) are known to the function.

    The function loosely parses the following formats:

    Wed, 09 Feb 1994 22:23:32 GMT       -- HTTP format
    Tuesday, 08-Feb-94 14:15:29 GMT     -- old rfc850 HTTP format
    Tuesday, 08-Feb-1994 14:15:29 GMT   -- broken rfc850 HTTP format
    09 Feb 1994 22:23:32 GMT            -- HTTP format (no weekday)
    08-Feb-94 14:15:29 GMT              -- rfc850 format (no weekday)
    08-Feb-1994 14:15:29 GMT            -- broken rfc850 format (no weekday)

    The parser ignores leading and trailing whitespace.  The time may be
    absent.

    If the year is given with only 2 digits, the function will select the
    century that makes the year closest to the current date.

    r rr	rT���N�)�STRICT_DATE_RErY�groupsrcrdrerZ�floatr.�lstrip�
WEEKDAY_RE�sub�LOOSE_HTTP_DATE_RErq)�textr^�grkr'rErlrmr,r-r\rrr�	http2time�s$



�
ra�^
    (\d{4})              # year
       [-\/]?
    (\d\d?)              # numerical month
       [-\/]?
    (\d\d?)              # day
   (?:
         (?:\s+|[-:Tt])  # separator before clock
      (\d\d?):?(\d\d)    # hour:min
      (?::?(\d\d(?:\.\d*)?))?  # optional seconds (and fractional)
   )?                    # optional clock
      \s*
   (?:
      ([-+]?\d\d?:?(:?\d\d)?
       |Z|z)             # timezone  (Z is "zero meridian", i.e. GMT)
      \s*
   )?$c
Csd|��}dgd\}}}}}}}t�|�}|dk	rL|��\}}}}}}}}	ndSt|||||||�S)av
    As for http2time, but parses the ISO 8601 formats:

    1994-02-03 14:15:29 -0100    -- ISO 8601 format
    1994-02-03 14:15:29          -- zone is optional
    1994-02-03                   -- only date
    1994-02-03T14:15:29          -- Use T as separator
    19940203T141529Z             -- ISO 8601 compact format
    19940203                     -- only date

    Nru)ry�ISO_DATE_RErYrwrq)
r}rErkrlrmr,r-r\r^�_rrr�iso2time+s

r�cCs*|�d�\}}|jd|�|j|d�S)z)Return unmatched part of re.Match object.r	N)�span�string)�match�start�endrrr�	unmatchedLsr�z^\s*([^=\s;,]+)z&^\s*=\s*\"([^\"\\]*(?:\\.[^\"\\]*)*)\"z^\s*=\s*([^\s;,]*)z\\(.)c
Cs0t|t�rt�g}|D�]}|}g}|�rt�|�}|r�t|�}|�d�}t�|�}|rxt|�}|�d�}t�	d|�}n.t
�|�}|r�t|�}|�d�}|��}nd}|�||f�q$|�
��d�r�|�
�dd�}|r�|�|�g}q$t�dd|�\}}	|	dk�std|||f��|}q$|r|�|�q|S)	amParse header values into a list of lists containing key,value pairs.

    The function knows how to deal with ",", ";" and "=" as well as quoted
    values after "=".  A list of space separated tokens are parsed as if they
    were separated by ";".

    If the header_values passed as argument contains multiple values, then they
    are treated as if they were a single value separated by comma ",".

    This means that this function is useful for parsing header fields that
    follow this syntax (BNF as from the HTTP/1.1 specification, but we relax
    the requirement for tokens).

      headers           = #header
      header            = (token | parameter) *( [";"] (token | parameter))

      token             = 1*<any CHAR except CTLs or separators>
      separators        = "(" | ")" | "<" | ">" | "@"
                        | "," | ";" | ":" | "\" | <">
                        | "/" | "[" | "]" | "?" | "="
                        | "{" | "}" | SP | HT

      quoted-string     = ( <"> *(qdtext | quoted-pair ) <"> )
      qdtext            = <any TEXT except <">>
      quoted-pair       = "\" CHAR

      parameter         = attribute "=" value
      attribute         = token
      value             = token | quoted-string

    Each header is represented by a list of key/value pairs.  The value for a
    simple token (not part of a parameter) is None.  Syntactically incorrect
    headers will not necessarily be parsed as you would want.

    This is easier to describe with some examples:

    >>> split_header_words(['foo="bar"; port="80,81"; discard, bar=baz'])
    [[('foo', 'bar'), ('port', '80,81'), ('discard', None)], [('bar', 'baz')]]
    >>> split_header_words(['text/html; charset="iso-8859-1"'])
    [[('text/html', None), ('charset', 'iso-8859-1')]]
    >>> split_header_words([r'Basic realm="\"foo\bar\""'])
    [[('Basic', None), ('realm', '"foobar"')]]

    r z\1N�,z^[=\s;]*rtr	z&split_header_words bug: '%s', '%s', %s)�
isinstance�str�AssertionError�HEADER_TOKEN_RErYr�r[�HEADER_QUOTED_VALUE_RE�HEADER_ESCAPE_REr{�HEADER_VALUE_RE�rstrip�appendry�
startswith�re�subn)
�
header_values�resultr}�	orig_text�pairsr^�name�value�non_junk�
nr_junk_charsrrr�split_header_wordsUsJ-








��r��([\"\\])cCs|g}|D]h}g}|D]F\}}|dk	rPt�d|�sDt�d|�}d|}d||f}|�|�q|r|�d�|��qd�|�S)a�Do the inverse (almost) of the conversion done by split_header_words.

    Takes a list of lists of (key, value) pairs and produces a single header
    value.  Attribute values are quoted if needed.

    >>> join_header_words([[("text/plain", None), ("charset", "iso-8859-1")]])
    'text/plain; charset="iso-8859-1"'
    >>> join_header_words([[("text/plain", None)], [("charset", "iso-8859-1")]])
    'text/plain, charset="iso-8859-1"'

    Nz^\w+$�\\\1z"%s"�%s=%s�; �, )r�rY�HEADER_JOIN_ESCAPE_REr{r��join)�lists�headersr��attr�k�vrrr�join_header_words�sr�cCs0|�d�r|dd�}|�d�r,|dd�}|S)N�"r ���)r��endswith�r}rrr�strip_quotes�s


r�cCs�d}g}|D]�}g}d}t|�d��D]�\}}|��}|�d�\}}	}
|��}|sb|dkr&q�nq&|	rn|
��nd}
|dkr�|��}||kr�|}|dkr�|
dk	r�t|
�}
d}n|d	kr�|
dk	r�tt|
��}
|�||
f�q&|r|s�|�d
�|�|�q|S)a5Ad-hoc parser for Netscape protocol cookie-attributes.

    The old Netscape cookie format for Set-Cookie can for instance contain
    an unquoted "," in the expires field, so we have to use this ad-hoc
    parser instead of split_header_words.

    XXX This may not make the best possible effort to parse all the crap
    that Netscape Cookie headers contain.  Ronald Tschalar's HTTPClient
    parser is probably better, so could do worse than following that if
    this ever gives any trouble.

    Currently, this is also used for parsing RFC 2109 cookies.

    )�expires�domain�path�secure�version�port�max-ageF�;�=r	Nr�Tr�)r��0)�	enumerate�split�strip�	partitionrer�rr�)�
ns_headers�known_attrsr��	ns_headerr��version_set�ii�param�key�sep�val�lcrrr�parse_ns_headers�s>
r�z\.\d+$cCs:t�|�rdS|dkrdS|ddks2|ddkr6dSdS)z*Return True if text is a host domain name.Frtr	�.r�T��IPV4_RErYr�rrr�is_HDNs
r�cCsl|��}|��}||krdSt|�s(dS|�|�}|dksB|dkrFdS|�d�sTdSt|dd��shdSdS)a�Return True if domain A domain-matches domain B, according to RFC 2965.

    A and B may be host domain names or IP addresses.

    RFC 2965, section 1:

    Host names can be specified either as an IP address or a HDN string.
    Sometimes we compare one host name with another.  (Such comparisons SHALL
    be case-insensitive.)  Host A's name domain-matches host B's if

         *  their host name strings string-compare equal; or

         * A is a HDN string and has the form NB, where N is a non-empty
            name string, B has the form .B', and B' is a HDN string.  (So,
            x.y.com domain-matches .Y.com but not Y.com.)

    Note that domain-match is not a commutative operation: a.b.c.com
    domain-matches .c.com, but not the reverse.

    TFr�r	r�r N)rer��rfindr�)�A�B�irrr�domain_matchs

r�cCst�|�rdSdS)zdReturn True if text is a sort-of-like a host domain name.

    For accepting/blocking domains.

    FTr�r�rrr�liberal_is_HDNFs
r�cCs`|��}|��}t|�r t|�s0||kr,dSdS|�d�}|rL|�|�rLdS|s\||kr\dSdS)z\For blocking/accepting domains.

    A and B may be host domain names or IP addresses.

    TFr�)rer�r�r�)r�r��initial_dotrrr�user_domain_matchPs
r�z:\d+$cCsB|��}tj�|�d}|dkr,|�dd�}t�d|d�}|��S)z�Return request-host, as defined by RFC 2965.

    Variation from RFC: returned value is lowercased, for convenient
    comparison.

    r rt�Host)�get_full_url�urllib�parse�urlparse�
get_header�cut_port_rer{re)�request�url�hostrrr�request_hostesr�cCs4t|�}}|�d�dkr,t�|�s,|d}||fS)zzReturn a tuple (request-host, effective request-host name).

    As defined by RFC 2965, except both are lowercased.

    r�r��.local)r��findr�rY)r��erhn�req_hostrrr�eff_request_hostusr�cCs4|��}tj�|�}t|j�}|�d�s0d|}|S)z6Path component of request-URI, as defined by RFC 2965.�/)r�r�r��urlsplit�escape_pathr�r�)r�r��partsr�rrr�request_path�s

r�cCs`|j}|�d�}|dkrX||dd�}zt|�Wq\tk
rTtd|�YdSXnt}|S)N�:r	r znonnumeric port: '%s')r�r�rZrfr�DEFAULT_HTTP_PORT)r�r�r�r�rrr�request_port�s


r�z%/;:@&=+$,!~*'()z%([0-9a-fA-F][0-9a-fA-F])cCsd|�d���S)Nz%%%sr )r[rj)r�rrr�uppercase_escaped_char�sr�cCstj�|t�}t�t|�}|S)zEEscape any invalid characters in HTTP URL, and uppercase all escapes.)r�r��quote�HTTP_PATH_SAFE�ESCAPED_CHAR_REr{r�)r�rrrr��s
r�cCsP|�d�}|dkrL||dd�}|�d�}t|�rL|dksD|dkrLd|S|S)aBReturn reach of host h, as defined by RFC 2965, section 1.

    The reach R of a host name H is defined as follows:

       *  If

          -  H is the host domain name of a host; and,

          -  H has the form A.B; and

          -  A has no embedded (that is, interior) dots; and

          -  B has at least one embedded dot, or B is the string "local".
             then the reach of H is .B.

       *  Otherwise, the reach of H is H.

    >>> reach("www.acme.com")
    '.acme.com'
    >>> reach("acme.com")
    'acme.com'
    >>> reach("acme.local")
    '.local'

    r�r	r N�local)r�r�)�hr��brrr�reach�s

r�cCs$t|�}t|t|j��sdSdSdS)z�

    RFC 2965, section 3.3.6:

        An unverifiable transaction is to a third-party host if its request-
        host U does not domain-match the reach R of the request-host O in the
        origin transaction.

    TFN)r�r�r��origin_req_host)r�r�rrr�is_third_party�s
r�c@sNeZdZdZddd�Zdd�Zddd	�Zd
d�Zddd
�Zdd�Z	dd�Z
dS)ra�HTTP Cookie.

    This class represents both Netscape and RFC 2965 cookies.

    This is deliberately a very simple class.  It just holds attributes.  It's
    possible to construct Cookie instances that don't comply with the cookie
    standards.  CookieJar.make_cookies is the factory function for Cookie
    objects -- it deals with cookie parsing, supplying defaults, and
    normalising to the representation used in this class.  CookiePolicy is
    responsible for checking them to see whether they should be accepted from
    and returned to the server.

    Note that the port may be present in the headers, but unspecified ("Port"
    rather than"Port=80", for example); if this is the case, port is None.

    FcCs�|dk	rt|�}|dk	r$tt|��}|dkr<|dkr<td��||_||_||_||_||_|��|_	||_
||_|	|_|
|_
||_||_|
|_||_||_||_t�|�|_dS)NTz-if port is None, port_specified must be false)rZrxrfr�r�r�r��port_specifiedrer��domain_specified�domain_initial_dotr��path_specifiedr�r��discard�comment�comment_url�rfc2109�copy�_rest)�selfr�r�r�r�r�r�r�r�r�r�r�r�r�r�r��restr�rrr�__init__�s.

zCookie.__init__cCs
||jkS�N�r)rr�rrr�has_nonstandard_attrszCookie.has_nonstandard_attrNcCs|j�||�Sr)r�get)rr��defaultrrr�get_nonstandard_attrszCookie.get_nonstandard_attrcCs||j|<dSrr)rr�r�rrr�set_nonstandard_attr szCookie.set_nonstandard_attrcCs,|dkrt��}|jdk	r(|j|kr(dSdS�NTF)rgr�)r�nowrrr�
is_expired#s
zCookie.is_expiredcCsX|jdkrd}n
d|j}|j||j}|jdk	rFd|j|jf}n|j}d||fS)Nrtr�r�z<Cookie %s for %s>)r�r�r�r�r�)r�p�limit�	namevaluerrr�__str__)s


zCookie.__str__cCslg}dD]$}t||�}|�d|t|�f�q|�dt|j��|�dt|j��d|jjd�|�fS)N)r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�zrest=%sz
rfc2109=%sz%s(%s)r�)�getattrr��reprrr��	__class__�__name__r�)rrr�r�rrr�__repr__3s
zCookie.__repr__)F)N)N)r�
__module__�__qualname__�__doc__rrr
rrrrrrrrr�s�
*


c@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)ra Defines which cookies get accepted from and returned to server.

    May also modify cookies, though this is probably a bad idea.

    The subclass DefaultCookiePolicy defines the standard rules for Netscape
    and RFC 2965 cookies -- override that if you want a customized policy.

    cCs
t��dS)z�Return true if (and only if) cookie should be accepted from server.

        Currently, pre-expired cookies never get this far -- the CookieJar
        class deletes such cookies itself.

        N��NotImplementedError�r�cookier�rrr�set_okKszCookiePolicy.set_okcCs
t��dS)zAReturn true if (and only if) cookie should be returned to server.Nrrrrr�	return_okTszCookiePolicy.return_okcCsdS)zMReturn false if cookies should not be returned, given cookie domain.
        Tr)rr�r�rrr�domain_return_okXszCookiePolicy.domain_return_okcCsdS)zKReturn false if cookies should not be returned, given cookie path.
        Tr)rr�r�rrr�path_return_ok]szCookiePolicy.path_return_okN)rrrrrr r!r"rrrrrBs
	c
@s�eZdZdZdZdZdZdZeeBZdddddddddeddd	f
d
d�Z	dd
�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�ZdS)8rzBImplements the standard rules for accepting and returning cookies.r rrrr	NTF)�https�wsscCsv||_||_||_||_||_||_|	|_|
|_||_||_	|
|_
|dk	rVt|�|_nd|_|dk	rlt|�}||_
dS)zAConstructor arguments should be passed as keyword arguments only.Nr)�netscape�rfc2965�rfc2109_as_netscape�hide_cookie2�
strict_domain�strict_rfc2965_unverifiable�strict_ns_unverifiable�strict_ns_domain�strict_ns_set_initial_dollar�strict_ns_set_path�secure_protocols�tuple�_blocked_domains�_allowed_domains)r�blocked_domains�allowed_domainsr%r&r'r(r)r*r+r,r-r.r/rrrrms"zDefaultCookiePolicy.__init__cCs|jS)z4Return the sequence of blocked domains (as a tuple).)r1�rrrrr3�sz#DefaultCookiePolicy.blocked_domainscCst|�|_dS)z$Set the sequence of blocked domains.N)r0r1)rr3rrr�set_blocked_domains�sz'DefaultCookiePolicy.set_blocked_domainscCs |jD]}t||�rdSqdSr)r1r�)rr��blocked_domainrrr�
is_blocked�s

zDefaultCookiePolicy.is_blockedcCs|jS)z=Return None, or the sequence of allowed domains (as a tuple).)r2r5rrrr4�sz#DefaultCookiePolicy.allowed_domainscCs|dk	rt|�}||_dS)z-Set the sequence of allowed domains, or None.N)r0r2)rr4rrr�set_allowed_domains�sz'DefaultCookiePolicy.set_allowed_domainscCs.|jdkrdS|jD]}t||�rdSqdS)NFT)r2r�)rr��allowed_domainrrr�is_not_allowed�s


z"DefaultCookiePolicy.is_not_allowedcCsNtd|j|j�|jdk	st�dD]&}d|}t||�}|||�s"dSq"dS)z�
        If you override .set_ok(), be sure to call this method.  If it returns
        false, so should your subclass (assuming your subclass wants to be more
        strict about which cookies to accept).

        � - checking cookie %s=%sN)r��
verifiabilityr�r�r�r�Zset_ok_FT)rr�r�r�r�rrr��n�fn_name�fnrrrr�s

zDefaultCookiePolicy.set_okcCsZ|jdkrtd|j|j�dS|jdkr:|js:td�dS|jdkrV|jsVtd�dSdS)Nz0   Set-Cookie2 without version attribute (%s=%s)Fr	�$   RFC 2965 cookies are switched off�$   Netscape cookies are switched offT)r�rr�r�r&r%rrrr�set_ok_version�s
�z"DefaultCookiePolicy.set_ok_versioncCsJ|jrFt|�rF|jdkr*|jr*td�dS|jdkrF|jrFtd�dSdS�Nr	z>   third-party RFC 2965 cookie during unverifiable transactionFz>   third-party Netscape cookie during unverifiable transactionT��unverifiabler�r�r*rr+rrrr�set_ok_verifiability�sz(DefaultCookiePolicy.set_ok_verifiabilitycCs0|jdkr,|jr,|j�d�r,td|j�dSdS)Nr	�$z'   illegal name (starts with '$'): '%s'FT)r�r-r�r�rrrrr�set_ok_name�s
�zDefaultCookiePolicy.set_ok_namecCsL|jrHt|�}|jdks(|jdkrH|jrH|�|j|�sHtd|j|�dSdS)Nr	z7   path attribute %s is not a prefix of request path %sFT)r�r�r�r.r"r�r)rrr��req_pathrrr�set_ok_path�s
����zDefaultCookiePolicy.set_ok_pathc
Cs�|�|j�rtd|j�dS|�|j�r8td|j�dS|j�r�t|�\}}|j}|jr�|�d�dkr�|�d�}|�dd|�}|dkr�||dd�}||d|�}	|	�	�dkr�t
|�dkr�td	|�dS|�d�r�|dd�}
n|}
|
�d�dk}|�s|d
k�rtd|�dS|j
dk�rX|�|��sX|�d��sXd|�|��sXtd||�dS|j
dk�sr|j|j@�r�t||��s�td
||�dS|j
dk�s�|j|j@�r�|dt
|��}|�d�dk�r�t�|��s�td||�dSdS)N�"   domain %s is in user block-listF�&   domain %s is not in user allow-listr�rr	r )�coZac�comZeduZorg�netZgovZmilrZZaeroZbiz�catZcoop�info�jobsZmobiZmuseumr��proZtravel�euz&   country-code second level domain %sr�z/   non-local domain %s contains no embedded dotzO   effective request-host %s (even with added initial dot) does not end with %sz5   effective request-host %s does not domain-match %sz.   host prefix %s for domain %s contains a dotT)r8r�rr;r�r�r)�countr�re�lenr�r�r�r�r,�DomainRFC2965Matchr��DomainStrictNoDotsr�rY)
rrr�r�r�r�r��j�tld�sld�undotted_domain�
embedded_dots�host_prefixrrr�
set_ok_domain�s|

�

����
��
���z!DefaultCookiePolicy.set_ok_domainc	Cs�|jr�t|�}|dkrd}nt|�}|j�d�D]@}zt|�Wn"tk
rbtd|�YdSX||kr0q�q0td||j�dSdS)N�80r�z   bad port %s (not numeric)Fz$   request port (%s) not found in %sT)r�r�r�r�r�rZrfr�rrr��req_portrrrr�set_ok_port+s&

�zDefaultCookiePolicy.set_ok_portcCs@td|j|j�dD]&}d|}t||�}|||�sdSqdS)z�
        If you override .return_ok(), be sure to call this method.  If it
        returns false, so should your subclass (assuming your subclass wants to
        be more strict about which cookies to return).

        r<)r�r=r�r�r�r�Z
return_ok_FT)rr�r�rr>rrrr @s	

zDefaultCookiePolicy.return_okcCs<|jdkr|jstd�dS|jdkr8|js8td�dSdS)Nr	rBFrCT)r�r&rr%rrrr�return_ok_versionRsz%DefaultCookiePolicy.return_ok_versioncCsJ|jrFt|�rF|jdkr*|jr*td�dS|jdkrF|jrFtd�dSdSrErFrrrr�return_ok_verifiability[sz+DefaultCookiePolicy.return_ok_verifiabilitycCs"|jr|j|jkrtd�dSdS)Nz(   secure cookie with non-secure requestFT)r��typer/rrrrr�return_ok_securegsz$DefaultCookiePolicy.return_ok_securecCs|�|j�rtd�dSdS)Nz   cookie expiredFT)r�_nowrrrrr�return_ok_expiresmsz%DefaultCookiePolicy.return_ok_expirescCsN|jrJt|�}|dkrd}|j�d�D]}||kr&qJq&td||j�dSdS)Nrbr�z0   request port %s does not match cookie port %sFT)r�r�r�rrcrrr�return_ok_portss�z"DefaultCookiePolicy.return_ok_portcCs�t|�\}}|j}|r*|�d�s*d|}n|}|jdkr^|j|j@r^|js^||kr^td�dS|jdkr�t||�s�td||�dS|jdkr�d|�	|�s�td||�dSdS)Nr�r	zQ   cookie with unspecified domain does not string-compare equal to request domainFzQ   effective request-host name %s does not domain-match RFC 2965 cookie domain %sz;   request-host %s does not match Netscape cookie domain %sT)
r�r�r�r�r,�DomainStrictNonDomainr�rr�r�)rrr�r�r�r��	dotdomainrrr�return_ok_domain�s6


�����z$DefaultCookiePolicy.return_ok_domaincCs�t|�\}}|�d�sd|}|�d�s0d|}|rH|�d�sHd|}n|}|�|�sd|�|�sddS|�|�r|td|�dS|�|�r�td|�dSdS)Nr�FrMrNT)r�r�r�r8rr;)rr�r�r�r�rnrrrr!�s"






z$DefaultCookiePolicy.domain_return_okcCsbtd|�t|�}t|�}||kr&dS|�|�rR|�d�sN|||d�dkrRdStd||�dS)Nz- checking cookie path=%sTr�r z  %s does not path-match %sF)rr�rXr�r�)rr�r�rK�pathlenrrrr"�s

��z"DefaultCookiePolicy.path_return_ok) rrrrrZrmrY�
DomainLiberal�DomainStrictrr3r6r8r4r9r;rrDrHrJrLrarer rfrgrirkrlror!r"rrrrrcsT�
#	;	cCst|���}t|j|�Sr)�sorted�keys�mapr)�adictrtrrr�vals_sorted_by_key�srwc	csVt|�}|D]D}d}z
|jWntk
r2YnXd}t|�EdH|s|VqdS)zBIterates over nested mapping, depth-first, in sorted order by key.FTN)rw�items�AttributeError�
deepvalues)�mapping�values�objrrrrz�s
rzc@seZdZdS)�AbsentN�rrrrrrrr~�sr~c@s�eZdZdZe�d�Ze�d�Ze�d�Ze�d�Z	e�d�Z
e�dej�Zd3d	d
�Z
dd�Zd
d�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd4d%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Z d1d2�Z!dS)5rz�Collection of HTTP cookies.

    You may not need to know about this class: try
    urllib.request.build_opener(HTTPCookieProcessor).open(url).
    z\Wr�z\.?[^.]*z[^.]*z^\.+z^\#LWP-Cookies-(\d+\.\d+)NcCs(|dkrt�}||_t��|_i|_dSr)r�_policy�
_threading�RLock�
_cookies_lock�_cookies�r�policyrrrr�s

zCookieJar.__init__cCs
||_dSr)r�r�rrr�
set_policy�szCookieJar.set_policycCs�g}|j�||�sgStd|�|j|}|��D]T}|j�||�sFq2||}|��D].}|j�||�srtd�qVtd�|�|�qVq2|S)Nz!Checking %s for cookies to returnz   not returning cookiez   it's a match)	r�r!rr�rtr"r|r r�)rr�r��cookies�cookies_by_pathr��cookies_by_namerrrr�_cookies_for_domain�s 

zCookieJar._cookies_for_domaincCs*g}|j��D]}|�|�||��q|S)z2Return a list of cookies to be returned to server.)r�rt�extendr�)rr�r�r�rrr�_cookies_for_requestszCookieJar._cookies_for_requestc	Cs<|jdd�dd�d}g}|D�]}|j}|sHd}|dkrH|�d|�|jdk	rz|j�|j�rz|dkrz|j�d	|j�}n|j}|jdkr�|�|j�n|�d
|j|f�|dkr|j	r�|�d|j
�|j�d��r|j}|j
s�|�d�r�|d
d�}|�d|�|jdk	rd}|j�r,|d|j}|�|�q|S)z�Return a list of cookie-attributes to be returned to server.

        like ['foo="bar"; $Path="/"', ...]

        The $Version attribute is also added when appropriate (currently only
        once per request).

        cSs
t|j�Sr)rXr�)�arrr�<lambda>�z)CookieJar._cookie_attrs.<locals>.<lambda>T)r��reverseFr	z$Version=%sNr�r�z
$Path="%s"r�r z$Domain="%s"z$Portz="%s")�sortr�r�r��non_word_rerY�quote_rer{r�r�r�r�r�r�r�r�)	rr�r��attrsrr�r�r�rrrr�
_cookie_attrssF


��
�
zCookieJar._cookie_attrscCs�td�|j��z�tt���|j_|_|�|�}|�	|�}|r^|�
d�s^|�dd�|��|jj
r�|jjs�|�
d�s�|D]}|jdkr||�dd�q�q|W5|j��X|��dS)z�Add correct Cookie: header to request (urllib.request.Request object).

        The Cookie2 header is also added unless policy.hide_cookie2 is true.

        �add_cookie_headerrr�ZCookie2r z$Version="1"N)rr��acquire�releaserZrgr�rjr�r��
has_header�add_unredirected_headerr�r&r(r��clear_expired_cookies)rr�r�r�rrrrr�Is*



��

zCookieJar.add_cookie_headerc
Cs�g}d}d}|D�]z}|d\}}d}d}	i}
i}|dd�D�]0\}}
|��}||ks`||krd|}||krx|
dkrxd}
||
kr�q>|dkr�|
dkr�td	�d}	�qr|
��}
|d
kr�|r�q>|
dkr�td�q>|dk�r d}zt|
�}
Wn*tk
�rtd
�d}	Y�qrYnXd
}|j|
}
||k�s4||k�rh|
dk�r^|dk�r^td|�d}	�qr|
|
|<q>|
||<q>|	�rzq|�|||
|f�q|S)aReturn list of tuples containing normalised cookie information.

        attrs_set is the list of lists of key,value pairs extracted from
        the Set-Cookie or Set-Cookie2 headers.

        Tuples are name, value, standard, rest, where name and value are the
        cookie name and value, standard is a dictionary containing the standard
        cookie-attributes (discard, secure, version, expires or max-age,
        domain, path and port) and rest is a dictionary containing the rest of
        the cookie-attributes.

        )r�r�)r�r�r�r�r�r�r��
commenturlr	Fr NTr�z%   missing value for domain attributer�zM   missing or invalid value for expires attribute: treating as session cookier�z?   missing or invalid (non-numeric) value for max-age attribute)r�r�r�z!   missing value for %s attribute)rerrZrfrjr�)r�	attrs_set�
cookie_tuples�
boolean_attrs�value_attrs�cookie_attrsr�r��max_age_set�
bad_cookie�standardrr�r�r�rrr�_normalized_cookie_tuplesjsh





�

z#CookieJar._normalized_cookie_tuplescCs&|\}}}}|�dt�}|�dt�}|�dt�}	|�dt�}
|�dd�}|dk	rtzt|�}Wntk
rrYdSX|�dd�}|�dd�}
|�d	d�}|�d
d�}|tk	r�|dkr�d}t|�}nXd}t|�}|�d
�}|dk�r|dkr�|d|�}n|d|d�}t|�dk�rd
}|tk	}d}|�r:t|�	d��}|tk�rVt
|�\}}|}n|�	d��sjd|}d}|	tk	�r�|	dk�r�t|�}	nd}t�
dd|	�}	nd}	|
tk�r�d}
d}
nH|
|jk�rz|�|||�Wntk
�r�YnXtd|||�dSt||||	||||||||
|
|||�S)Nr�r�r�r�r�r�Fr�r�r�rtTr�r�r	r r�z\s+z2Expiring cookie, domain='%s', path='%s', name='%s')rr~rZrfr�r�r�rX�boolr�r�r�r�r{rj�clear�KeyErrorrr)r�tupr�r�r�r�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr�_cookie_from_cookie_tuple�s�







��z#CookieJar._cookie_from_cookie_tuplecCs6|�|�}g}|D]}|�||�}|r|�|�q|Sr)r�r�r�)rr�r�r�r�r�rrrr�_cookies_from_attrs_set's
z!CookieJar._cookies_from_attrs_setcCsHt|jdd�}|dkr |jj}|D]}|jdkr$d|_|r$d|_q$dS)Nr'r Tr	)rr�r&r�r�)rr��
rfc2109_as_nsrrrr�_process_rfc2109_cookies0s

z"CookieJar._process_rfc2109_cookiesc
Cs:|��}|�dg�}|�dg�}tt���|j_|_|jj}|jj}|sN|rf|sV|rf|s^|rf|sj|sjgSz|�t	|�|�}Wnt
k
r�t�g}YnX|�r6|�r6z|�t|�|�}	Wnt
k
r�t�g}	YnX|�
|	�|�r&i}
|D]}d|
|j|j|jf<q�|
fdd�}t||	�}	|	�r6|�|	�|S)zAReturn sequence of Cookie objects extracted from response object.zSet-Cookie2z
Set-CookieNcSs|j|j|jf}||kSr)r�r�r�)�	ns_cookie�lookupr�rrr�no_matching_rfc2965isz3CookieJar.make_cookies.<locals>.no_matching_rfc2965)rS�get_allrZrgr�rjr&r%r�r��	Exceptionrr�r�r�r�r��filterr�)
r�responser�r��rfc2965_hdrs�ns_hdrsr&r%r��
ns_cookiesr�rr�rrr�make_cookies<s^�������
�



zCookieJar.make_cookiescCsN|j��z2tt���|j_|_|j�||�r:|�|�W5|j��XdS)z-Set a cookie if policy says it's OK to do so.N)	r�r�r�rZrgr�rjr�
set_cookierrrr�set_cookie_if_okss
zCookieJar.set_cookie_if_okcCsl|j}|j��zJ|j|kr&i||j<||j}|j|krDi||j<||j}|||j<W5|j��XdS)z?Set a cookie, without checking whether or not it should be set.N)r�r�r�r�r�r�r�)rr�c�c2�c3rrrr��s






zCookieJar.set_cookiecCsbtd|���|j��z8|�||�D]&}|j�||�r&td|�|�|�q&W5|j��XdS)zAExtract cookies from response, where allowable given the request.zextract_cookies: %sz setting cookie: %sN)	rrSr�r�r�r�r�rr�)rr�r�rrrr�extract_cookies�s

zCookieJar.extract_cookiescCst|dk	r2|dks|dkr td��|j|||=n>|dk	rX|dkrJtd��|j||=n|dk	rj|j|=ni|_dS)a�Clear some cookies.

        Invoking this method without arguments will clear all cookies.  If
        given a single argument, only cookies belonging to that domain will be
        removed.  If given two arguments, cookies belonging to the specified
        path within that domain are removed.  If given three arguments, then
        the cookie with the specified name, path and domain is removed.

        Raises KeyError if no matching cookie exists.

        Nz8domain and path must be given to remove a cookie by namez.domain must be given to remove cookies by path)rfr�)rr�r�r�rrrr��s��
zCookieJar.clearcCsD|j��z(|D]}|jr|�|j|j|j�qW5|j��XdS)z�Discard all session cookies.

        Note that the .save() method won't save session cookies anyway, unless
        you ask otherwise by passing a true ignore_discard argument.

        N)r�r�r�r�r�r�r�r�)rrrrr�clear_session_cookies�s
zCookieJar.clear_session_cookiescCsP|j��z4t��}|D]"}|�|�r|�|j|j|j�qW5|j��XdS)a�Discard all expired cookies.

        You probably don't need to call this method: expired cookies are never
        sent back to the server (provided you're using DefaultCookiePolicy),
        this method is called by CookieJar itself every so often, and the
        .save() method won't save expired cookies anyway (unless you ask
        otherwise by passing a true ignore_expires argument).

        N)	r�r�r�rgrr�r�r�r�)rr
rrrrr��s


zCookieJar.clear_expired_cookiescCs
t|j�Sr)rzr�r5rrr�__iter__�szCookieJar.__iter__cCsd}|D]}|d}q|S)z#Return number of contained cookies.r	r r)rr�rrrr�__len__�s
zCookieJar.__len__cCs2g}|D]}|�t|��qd|jjd�|�fS�Nz<%s[%s]>r�)r�rrrr��r�rrrrrr�szCookieJar.__repr__cCs2g}|D]}|�t|��qd|jjd�|�fSr�)r�r�rrr�r�rrrr�szCookieJar.__str__)N)NNN)"rrrrr��compiler�r��strict_domain_re�	domain_re�dots_re�ASCII�magic_rerr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrr�s8





;!a\	7


c@seZdZdS)rNrrrrrr�sc@s8eZdZdZddd�Zd
dd�Zddd	�Zdd
d�ZdS)rz6CookieJar that can be loaded from and saved to a file.NFcCs2t�||�|dk	rt�|�}||_t|�|_dS)z}
        Cookies are NOT loaded from the named file until either the .load() or
        .revert() method is called.

        N)rr�os�fspath�filenamer��	delayload)rr�r�r�rrrr�s

zFileCookieJar.__init__cCs
t��dS)zSave cookies to a file.Nr)rr��ignore_discard�ignore_expiresrrr�save�szFileCookieJar.savec	CsJ|dkr"|jdk	r|j}ntt��t|��}|�||||�W5QRXdS)zLoad cookies from a file.N)r�rf�MISSING_FILENAME_TEXT�open�_really_load�rr�r�r�rrrr�loads

zFileCookieJar.loadcCs�|dkr"|jdk	r|j}ntt��|j��zFt�|j�}i|_z|�	|||�Wnt
k
rn||_�YnXW5|j��XdS)z�Clear all cookies and reload cookies from a saved file.

        Raises LoadError (or OSError) if reversion is not successful; the
        object's state will not be altered if this happens.

        N)r�rfr�r�r�r�r�deepcopyr�r��OSError)rr�r�r��	old_staterrr�revert	s

zFileCookieJar.revert)NFN)NFF)NFF)NFF)rrrrrr�r�r�rrrrr�s


	�cCs |j|jfd|jfd|jfg}|jdk	r8|�d|jf�|jrH|�d�|jrX|�d�|jrh|�d�|j	rx|�d�|j
r�|�d	tt|j
��f�|j
r�|�d
�|jr�|�d|jf�|jr�|�d|jf�t|j���}|D]}|�|t|j|�f�q�|�d
t|j�f�t|g�S)z�Return string representation of Cookie in the LWP cookie file format.

    Actually, the format is extended a bit -- see module docstring.

    r�r�Nr�)�	path_specN)�	port_specN)�
domain_dotN)r�Nr�)r�Nr�r�r�)r�r�r�r�r�r�r�r�r�r�r�rKrxr�r�r�rsrrtr�r�r�)rr�rtr�rrr�lwp_cookie_str$s:
�




�
r�c@s,eZdZdZddd�Zddd�Zd	d
�ZdS)
ra[
    The LWPCookieJar saves a sequence of "Set-Cookie3" lines.
    "Set-Cookie3" is the format used by the libwww-perl library, not known
    to be compatible with any browser, but which is easy to read and
    doesn't lose information about RFC 2965 cookies.

    Additional methods

    as_lwp_str(ignore_discard=True, ignore_expired=True)

    TcCsTt��}g}|D]2}|s |jr q|s0|�|�r0q|�dt|��qd�|dg�S)z�Return cookies as a string of "\n"-separated "Set-Cookie3" headers.

        ignore_discard and ignore_expires: see docstring for FileCookieJar.save

        zSet-Cookie3: %s�
rt)rgr�rr�r�r�)rr�r�r
r�rrrr�
as_lwp_strMs
zLWPCookieJar.as_lwp_strNFc	CsX|dkr"|jdk	r|j}ntt��t|d��"}|�d�|�|�||��W5QRXdS)N�wz#LWP-Cookies-2.0
)r�rfr�r��writer�r�rrrr�]s

zLWPCookieJar.savecCs0|��}|j�|�s$d|}t|��t��}d}d}	d}
�z�|��}|dkrP�q�|�|�s\q<|t|�d���}t|g�D�]f}|d\}
}i}i}|	D]}d||<q�|dd�D]n\}}|dk	r�|�	�}nd}||
ks�||	kr�|}||	k�r|dkr�d	}|||<q�||
k�r|||<q�|||<q�|j
}|d
�}|d�}|dk	�rJt|�}|dk�rXd	}|d�}|�d
�}t|d�|
||d�|d�|||d�|d�|d�|d�|||d�|d�|�}|�s�|j
�r�qz|�s�|�|��r�qz|�|�qzq<WnBtk
�r�Yn,tk
�r*t�td||f��YnXdS)Nz5%r does not look like a Set-Cookie3 (LWP) format filezSet-Cookie3:)r�r�r�r�r�)r�r�r�r�r�r�r�rtr	Fr Tr�r�r�r�r�r�r�r�r�r�r�r�r�z&invalid Set-Cookie3 format file %r: %r)�readliner�rYrrgr�rXr�r�rerr�rr�rr�r�r�r)rrr�r�r��magicrr
�headerr�r��line�datar�r�r�rr�r�r�r�r�r�r�r�r�rrrr�is��










�
�zLWPCookieJar._really_load)TT)NFF)rrrrr�r�r�rrrrr@s

c@s0eZdZdZe�d�ZdZdd�Zd
dd	�Z	dS)ra�

    WARNING: you may want to backup your browser's cookies file if you use
    this class to save cookies.  I *think* it works, but there have been
    bugs in the past!

    This class differs from CookieJar only in the format it uses to save and
    load cookies to and from a file.  This class uses the Mozilla/Netscape
    `cookies.txt' format.  lynx uses this file format, too.

    Don't expect cookies saved while the browser is running to be noticed by
    the browser (in fact, Mozilla on unix will overwrite your saved cookies if
    you change them on disk while it's running; on Windows, you probably can't
    save at all while the browser is running).

    Note that the Mozilla/Netscape format will downgrade RFC2965 cookies to
    Netscape cookies on saving.

    In particular, the cookie version and port number information is lost,
    together with information about whether or not Path, Port and Discard were
    specified by the Set-Cookie2 (or Set-Cookie) header, and whether or not the
    domain as set in the HTTP header started with a dot (yes, I'm aware some
    domains in Netscape files start with a dot and some don't -- trust me, you
    really don't want to know any more about this).

    Note that though Mozilla and Netscape use the same format, they use
    slightly different headers.  The class saves cookies using the Netscape
    header by default (Mozilla can cope with that).

    z#( Netscape)? HTTP Cookie Filezr# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This is a generated file!  Do not edit.

cCstt��}|��}|j�|�s(td|���z|��}|dkr@�q*|�d�rV|dd�}|���d�s,|��dkrrq,|�d�\}}	}
}}}
}|dk}|	dk}	|
dkr�|}
d}|�d�}|	|ks�t	�d	}|dkr�d}d
}t
d|
|dd	||	||
d	|||ddi�}|�s
|j�r
q,|�s|�|��rq,|�
|�q,WnBtk
�rD�Yn,tk
�rnt�td||f��YnXdS)
Nz4%r does not look like a Netscape format cookies filertr�r�)�#rI�	�TRUEr�FTr	z+invalid Netscape format cookies file %r: %r)rgr�r�rYrr�r�r�r�r�rr�rr�r�r�r)rrr�r�r�r
r�r�r�r�r�r�r�r�r�r�r�r�rrrr��st��

��
�
�zMozillaCookieJar._really_loadNFc
Cs�|dkr"|jdk	r|j}ntt��t|d���}|�|j�t��}|D]�}|sV|jrVqF|sf|�|�rfqF|j	rrd}nd}|j
�d�r�d}nd}|jdk	r�t
|j�}	nd}	|jdkr�d}
|j}n|j}
|j}|�d�|j
||j||	|
|g�d�qFW5QRXdS)Nr�r��FALSEr�rtr�r�)r�rfr�r�r�r�rgr�rr�r�r�r�r�r�r�r�r�)rr�r�r�rr
rr�r�r�r�r�rrrr� sH



���zMozillaCookieJar.save)NFF)
rrrrr�r�r�r�r�r�rrrrr�s

A)N)N)Xr�__all__r�rrBr�rg�urllib.parser��urllib.request�	threadingr��http.client�http�calendarr
rrrr��client�	HTTP_PORTr�r�rr&r.rLrNrcr)r�rerKrOrWr�r�rXr_rqrv�Irz�Xr|rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrwrzr~rr�rrr�rrrrrr�<module>s��
�

8�
�
�8
�!



U
D'


#b!b7xX�;�
@stdZddlZddlZdddgZdjZdjZdjZGd	d�de�Z	ej
ejd
ZedZ
dd
�eed��eeee
��D�Ze�ed�ded�di�e�de�e��jZdd�Ze�d�Ze�d�Zdd�Zddddddd gZdd!d"d#d$d%d&d'd(d)d*d+d,g
Zdeefd-d.�ZGd/d0�d0e�Z d1Z!e!d2Z"e�d3e!d4e"d5ej#ej$B�Z%Gd6d�de�Z&Gd7d�de&�Z'dS)8a.

Here's a sample session to show how to use this module.
At the moment, this is the only documentation.

The Basics
----------

Importing is easy...

   >>> from http import cookies

Most of the time you start by creating a cookie.

   >>> C = cookies.SimpleCookie()

Once you've created your Cookie, you can add values just as if it were
a dictionary.

   >>> C = cookies.SimpleCookie()
   >>> C["fig"] = "newton"
   >>> C["sugar"] = "wafer"
   >>> C.output()
   'Set-Cookie: fig=newton\r\nSet-Cookie: sugar=wafer'

Notice that the printable representation of a Cookie is the
appropriate format for a Set-Cookie: header.  This is the
default behavior.  You can change the header and printed
attributes by using the .output() function

   >>> C = cookies.SimpleCookie()
   >>> C["rocky"] = "road"
   >>> C["rocky"]["path"] = "/cookie"
   >>> print(C.output(header="Cookie:"))
   Cookie: rocky=road; Path=/cookie
   >>> print(C.output(attrs=[], header="Cookie:"))
   Cookie: rocky=road

The load() method of a Cookie extracts cookies from a string.  In a
CGI script, you would use this method to extract the cookies from the
HTTP_COOKIE environment variable.

   >>> C = cookies.SimpleCookie()
   >>> C.load("chips=ahoy; vienna=finger")
   >>> C.output()
   'Set-Cookie: chips=ahoy\r\nSet-Cookie: vienna=finger'

The load() method is darn-tootin smart about identifying cookies
within a string.  Escaped quotation marks, nested semicolons, and other
such trickeries do not confuse it.

   >>> C = cookies.SimpleCookie()
   >>> C.load('keebler="E=everybody; L=\\"Loves\\"; fudge=\\012;";')
   >>> print(C)
   Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=\012;"

Each element of the Cookie also supports all of the RFC 2109
Cookie attributes.  Here's an example which sets the Path
attribute.

   >>> C = cookies.SimpleCookie()
   >>> C["oreo"] = "doublestuff"
   >>> C["oreo"]["path"] = "/"
   >>> print(C)
   Set-Cookie: oreo=doublestuff; Path=/

Each dictionary element has a 'value' attribute, which gives you
back the value associated with the key.

   >>> C = cookies.SimpleCookie()
   >>> C["twix"] = "none for you"
   >>> C["twix"].value
   'none for you'

The SimpleCookie expects that all values should be standard strings.
Just to be sure, SimpleCookie invokes the str() builtin to convert
the value to a string, when the values are set dictionary-style.

   >>> C = cookies.SimpleCookie()
   >>> C["number"] = 7
   >>> C["string"] = "seven"
   >>> C["number"].value
   '7'
   >>> C["string"].value
   'seven'
   >>> C.output()
   'Set-Cookie: number=7\r\nSet-Cookie: string=seven'

Finis.
�N�CookieError�
BaseCookie�SimpleCookie�z; � c@seZdZdS)rN)�__name__�
__module__�__qualname__�r
r
�"/usr/lib/python3.8/http/cookies.pyr�sz!#$%&'*+-.^_`|~:z
 ()/<=>?@[]{}cCsi|]}|d|�qS)z\%03or
)�.0�nr
r
r�
<dictcomp>�s�r��"�\"�\z\\z[%s]+cCs*|dkst|�r|Sd|�t�dSdS)z�Quote a string for use in a cookie header.

    If the string does not need to be double-quoted, then just return the
    string.  Otherwise, surround the string in doublequotes and quote
    (with a \) special characters.
    Nr)�
_is_legal_key�	translate�_Translator��strr
r
r�_quote�srz\\[0-3][0-7][0-7]z[\\].cCsN|dkst|�dkr|S|ddks0|ddkr4|S|dd�}d}t|�}g}d|krf|k�rFnn�t�||�}t�||�}|s�|s�|�||d���qFd}}|r�|�d�}|r�|�d�}|�r|r�||k�r|�|||��|�||d�|d}qP|�|||��|�tt||d|d�d���|d}qPt|�S)N�rr������)	�len�
_OctalPatt�search�
_QuotePatt�append�start�chr�int�	_nulljoin)r�ir
�res�o_match�q_match�j�kr
r
r�_unquote�s6


$
r-�Mon�Tue�Wed�Thu�Fri�Sat�Sun�Jan�Feb�Mar�Apr�May�Jun�Jul�Aug�Sep�Oct�Nov�Decc	CsRddlm}m}|�}|||�\	}}}}	}
}}}
}d|||||||	|
|fS)Nr)�gmtime�timez#%s, %02d %3s %4d %02d:%02d:%02d GMT)rBrA)�future�weekdayname�	monthnamerArB�now�year�month�day�hh�mm�ss�wd�y�zr
r
r�_getdate�s�rPc
@s�eZdZdZdddddddd	d
d�	Zdd
hZdd�Zedd��Zedd��Z	edd��Z
dd�Zd2dd�Zdd�Z
ejZdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd3d*d+�ZeZd,d-�Zd4d.d/�Zd5d0d1�ZdS)6�MorselaCA class to hold ONE (key, value) pair.

    In a cookie, each such pair may have several attributes, so this class is
    used to keep the attributes associated with the appropriate key,value pair.
    This class also includes a coded_value attribute, which is used to hold
    the network representation of the value.
    �expires�Path�Comment�DomainzMax-AgeZSecureZHttpOnly�VersionZSameSite)	rR�path�comment�domain�max-age�secure�httponly�versionZsamesiter[r\cCs0d|_|_|_|jD]}t�||d�qdS)Nr)�_key�_value�_coded_value�	_reserved�dict�__setitem__)�self�keyr
r
r�__init__ s
zMorsel.__init__cCs|jS�N)r^�rdr
r
rre(sz
Morsel.keycCs|jSrg)r_rhr
r
r�value,szMorsel.valuecCs|jSrg)r`rhr
r
r�coded_value0szMorsel.coded_valuecCs2|��}||jkr td|f��t�|||�dS�NzInvalid attribute %r)�lowerrarrbrc)rd�K�Vr
r
rrc4s
zMorsel.__setitem__NcCs.|��}||jkr td|f��t�|||�Srk)rlrarrb�
setdefault)rdre�valr
r
rro:s
zMorsel.setdefaultcCs>t|t�stSt�||�o<|j|jko<|j|jko<|j|jkSrg)�
isinstancerQ�NotImplementedrb�__eq__r_r^r`�rd�morselr
r
rrs@s

�
�
�z
Morsel.__eq__cCs$t�}t�||�|j�|j�|Srg)rQrb�update�__dict__rtr
r
r�copyJszMorsel.copycCsRi}t|���D]0\}}|��}||jkr8td|f��|||<qt�||�dSrk)rb�itemsrlrarrv)rd�values�datarerpr
r
rrvPs

z
Morsel.updatecCs|��|jkSrg)rlra)rdrmr
r
r�
isReservedKeyYszMorsel.isReservedKeycCsH|��|jkrtd|f��t|�s2td|f��||_||_||_dS)Nz Attempt to set a reserved key %rzIllegal key %r)rlrarrr^r_r`)rdrerp�	coded_valr
r
r�set\sz
Morsel.setcCs|j|j|jd�S)N)rerirj�r^r_r`rhr
r
r�__getstate__gs�zMorsel.__getstate__cCs"|d|_|d|_|d|_dS)Nrerirjr)rd�stater
r
r�__setstate__ns

zMorsel.__setstate__�Set-Cookie:cCsd||�|�fS)Nz%s %s)�OutputString)rd�attrs�headerr
r
r�outputssz
Morsel.outputcCsd|jj|��fS)N�<%s: %s>)�	__class__rr�rhr
r
r�__repr__xszMorsel.__repr__cCsd|�|��dd�S)Nz�
        <script type="text/javascript">
        <!-- begin hiding
        document.cookie = "%s";
        // end hiding -->
        </script>
        rr)r��replace)rdr�r
r
r�	js_output{s�zMorsel.js_outputcCs$g}|j}|d|j|jf�|dkr,|j}t|���}|D]�\}}|dkrNq<||krXq<|dkr�t|t�r�|d|j|t|�f�q<|dkr�t|t�r�|d|j||f�q<|dkr�t|t	�r�|d|j|t
|�f�q<||jk�r|�r|t	|j|��q<|d|j||f�q<t|�S)N�%s=%srrRrZz%s=%drX)
r"rerjra�sortedryrqr%rPrr�_flags�_semispacejoin)rdr��resultr"ryrerir
r
rr��s,zMorsel.OutputString)N)Nr�)N)N)rrr	�__doc__rar�rf�propertyrerirjrcrors�object�__ne__rxrvr|r~r�r�r��__str__r�r�r�r
r
r
rrQ�sD�



	


rQz,\w\d!#%&'~_`><@,:/\$\*\+\-\.\^\|\)\(\?\}\{\=z\[\]z�
    \s*                            # Optional whitespace at start of cookie
    (?P<key>                       # Start of group 'key'
    [a	]+?   # Any word of at least one letter
    )                              # End of group 'key'
    (                              # Optional group: there may not be a value.
    \s*=\s*                          # Equal Sign
    (?P<val>                         # Start of group 'val'
    "(?:[^\\"]|\\.)*"                  # Any doublequoted string
    |                                  # or
    \w{3},\s[\w\d\s-]{9,11}\s[\d:]{8}\sGMT  # Special case for "expires" attr
    |                                  # or
    [a-]*      # Any word or empty string
    )                                # End of group 'val'
    )?                             # End of optional value group
    \s*                            # Any number of spaces.
    (\s+|;|$)                      # Ending either at space, semicolon, or EOS.
    c@sneZdZdZdd�Zdd�Zddd�Zd	d
�Zdd�Zddd�Z	e	Z
dd�Zddd�Zdd�Z
efdd�ZdS)rz'A container class for a set of Morsels.cCs||fS)a
real_value, coded_value = value_decode(STRING)
        Called prior to setting a cookie's value from the network
        representation.  The VALUE is the value read from HTTP
        header.
        Override this function to modify the behavior of cookies.
        r
�rdrpr
r
r�value_decode�szBaseCookie.value_decodecCst|�}||fS)z�real_value, coded_value = value_encode(VALUE)
        Called prior to setting a cookie's value from the dictionary
        representation.  The VALUE is the value being assigned.
        Override this function to modify the behavior of cookies.
        r�rdrp�strvalr
r
r�value_encode�szBaseCookie.value_encodeNcCs|r|�|�dSrg)�load)rd�inputr
r
rrf�szBaseCookie.__init__cCs.|�|t��}|�|||�t�|||�dS)z+Private method for setting a cookie's valueN)�getrQr~rbrc)rdre�
real_valuerj�Mr
r
r�__set�szBaseCookie.__setcCs:t|t�rt�|||�n|�|�\}}|�|||�dS)zDictionary style assignment.N)rqrQrbrcr��_BaseCookie__set)rdreri�rval�cvalr
r
rrc�s
zBaseCookie.__setitem__r��
cCs:g}t|���}|D]\}}|�|�||��q|�|�S)z"Return a string suitable for HTTP.)r�ryr"r��join)rdr�r��sepr�ryrerir
r
rr��s
zBaseCookie.outputcCsJg}t|���}|D] \}}|�d|t|j�f�qd|jjt|�fS)Nr�r�)r�ryr"�reprrir�r�
_spacejoin)rd�lryrerir
r
rr��s
zBaseCookie.__repr__cCs6g}t|���}|D]\}}|�|�|��qt|�S)z(Return a string suitable for JavaScript.)r�ryr"r�r&)rdr�r�ryrerir
r
rr�s
zBaseCookie.js_outputcCs4t|t�r|�|�n|��D]\}}|||<qdS)z�Load cookies from a string (presumably HTTP_COOKIE) or
        from a dictionary.  Loading cookies from a dictionary 'd'
        is equivalent to calling:
            map(Cookie.__setitem__, d.keys(), d.values())
        N)rqr�_BaseCookie__parse_stringry)rd�rawdatarerir
r
rr�
s


zBaseCookie.loadcCs�d}t|�}g}d}d}d}d|kr2|k�rnn�|�||�}	|	sJ�q|	�d�|	�d�}
}|	�d�}|
ddkr�|s|q|�||
dd�|f�q|
��tjkr�|s�dS|dkr�|
��tjkr�|�||
df�q�dSn|�||
t	|�f�q|dk	�r|�||
|�
|�f�d}qdSqd}|D]Z\}
}
}|
|k�rP|dk	�sFt�|||
<n,|
|k�s^t�|\}}|�|
||�||
}�q$dS)	NrFrrrerp�$T)
r�match�group�endr"rlrQrar�r-r��AssertionErrorr�)rdr�pattr'r
�parsed_items�morsel_seen�TYPE_ATTRIBUTE�
TYPE_KEYVALUEr�rerir��tpr�r�r
r
r�__parse_stringsJ



zBaseCookie.__parse_string)N)Nr�r�)N)rrr	r�r�r�rfr�rcr�r�r�r�r��_CookiePatternr�r
r
r
rr�s		
	

c@s eZdZdZdd�Zdd�ZdS)rz�
    SimpleCookie supports strings as cookie values.  When setting
    the value using the dictionary assignment notation, SimpleCookie
    calls the builtin str() to convert the value to a string.  Values
    received from HTTP are kept as strings.
    cCst|�|fSrg)r-r�r
r
rr�\szSimpleCookie.value_decodecCst|�}|t|�fSrg)rrr�r
r
rr�_szSimpleCookie.value_encodeN)rrr	r�r�r�r
r
r
rrUs)(r��re�string�__all__r�r&r�r��	Exceptionr�
ascii_letters�digits�_LegalChars�_UnescapedCharsr~�range�map�ordrrv�compile�escape�	fullmatchrrrr!r-�_weekdayname�
_monthnamerPrbrQ�_LegalKeyChars�_LegalValueChars�ASCII�VERBOSEr�rrr
r
r
r�<module>'sr]
��

2�4����
�
X��@sdddlZddlmZdd�eej�D�Ze��dd�eD��dZd	Z	d
ej
kr`ej
d
ej
d<dS)�N�)�contextcCsg|]}|�d�s|�qS)�_)�
startswith)�.0�x�r�./usr/lib/python3.8/multiprocessing/__init__.py�
<listcomp>s
r
ccs|]}|ttj|�fVqdS)N)�getattrr�_default_context)r�namerrr	�	<genexpr>sr���__main__�__mp_main__)�sys�r�dirr�__all__�globals�update�SUBDEBUG�
SUBWARNING�modulesrrrr	�<module>s
X�b�@sddddgZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZddl
mZm
Z
dd	lmZejZz$ddlZdd
lmZmZmZmZWn$ek
r�ejdkr‚dZYnXdZd
Ze��ZdZdgZeed�r�dZedg7Zejdk�rdZedg7Zefdd�Z dd�Z!dd�Z"dd�Z#dd�Z$Gdd�d�Z%e�rhGdd�de%�Z&Gdd �d e%�Z'Gd!d�de(�Z)dOd"d�Z*ejdk�r�dPd$d�Z+n
dQd%d�Z+Gd&d'�d'e(�Z,d(d)�Z-ejdk�r�Gd*d+�d+e(�Z.d,d-�Z/d.Z0d/Z1d0Z2d1Z3d2d3�Z4d4d5�Z5Gd6d7�d7e(�Z6d8d9�Z7d:d;�Z8Gd<d=�d=e)�Z9d>d?�Z:ejdk�rtd@dA�Z;ej<ej=hZ>dRdBd�Z?n,ddl@Z@ee@dC��r�e@jAZBne@jCZBdSdDd�Z?ejdk�r�dEdF�ZDdGdH�ZEe�Fe'eD�dIdJ�ZGdKdL�ZHe�Fe&eG�ndMdF�ZDdNdH�ZEe�Fe'eD�dS)T�Client�Listener�Pipe�wait�N�)�util)�AuthenticationError�BufferTooShort)�	reduction)�
WAIT_OBJECT_0�WAIT_ABANDONED_0�WAIT_TIMEOUT�INFINITE�win32i g4@�AF_INET�AF_UNIX�AF_PIPEcCst��|S�N��time�	monotonic)�timeout�r�0/usr/lib/python3.8/multiprocessing/connection.py�
_init_timeout;srcCst��|kSrr)�trrr�_check_timeout>srcCsX|dkrdS|dkr&tjdt��d�S|dkrLtjdt��tt�fdd�Std	��d
S)z?
    Return an arbitrary free address for the given family
    r)�	localhostrrz	listener-)�prefix�dirrz\\.\pipe\pyc-%d-%d-�zunrecognized familyN)	�tempfile�mktempr�get_temp_dir�os�getpid�next�
_mmap_counter�
ValueError��familyrrr�arbitrary_addressEs��r+cCsJtjdkr|dkrtd|��tjdkrF|dkrFtt|�sFtd|��dS)zD
    Checks if the family is valid for the current environment.
    rrzFamily %s is not recognized.rN)�sys�platformr(�hasattr�socketr)rrr�_validate_familySs

r0cCsTt|�tkrdSt|�tkr*|�d�r*dSt|�tks@t�|�rDdStd|��dS)z]
    Return the types of the address

    This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE'
    rz\\rrzaddress type of %r unrecognizedN)�type�tuple�str�
startswithr�is_abstract_socket_namespacer()�addressrrr�address_type_sr7c@s�eZdZdZd+dd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	e
dd��Ze
dd��Ze
dd��Z
dd�Zdd�Zd,dd�Zdd�Zd-dd�Zd.d d!�Zd"d#�Zd/d%d&�Zd'd(�Zd)d*�ZdS)0�_ConnectionBaseNTcCs>|��}|dkrtd��|s(|s(td��||_||_||_dS)Nrzinvalid handlez6at least one of `readable` and `writable` must be True)�	__index__r(�_handle�	_readable�	_writable)�self�handle�readable�writablerrr�__init__us�z_ConnectionBase.__init__cCs|jdk	r|��dSr�r:�_close�r=rrr�__del__�s
z_ConnectionBase.__del__cCs|jdkrtd��dS)Nzhandle is closed)r:�OSErrorrDrrr�
_check_closed�s
z_ConnectionBase._check_closedcCs|jstd��dS)Nzconnection is write-only)r;rFrDrrr�_check_readable�sz_ConnectionBase._check_readablecCs|jstd��dS)Nzconnection is read-only)r<rFrDrrr�_check_writable�sz_ConnectionBase._check_writablecCs"|jrd|_n|��td��dS)NFzbad message length)r<r;�closerFrDrrr�_bad_message_length�sz#_ConnectionBase._bad_message_lengthcCs
|jdkS)z True if the connection is closedN�r:rDrrr�closed�sz_ConnectionBase.closedcCs|jS)z"True if the connection is readable)r;rDrrrr?�sz_ConnectionBase.readablecCs|jS)z"True if the connection is writable)r<rDrrrr@�sz_ConnectionBase.writablecCs|��|jS)z+File descriptor or handle of the connection)rGr:rDrrr�fileno�sz_ConnectionBase.filenocCs$|jdk	r z|��W5d|_XdS)zClose the connectionNrBrDrrrrJ�s
z_ConnectionBase.closercCs�|��|��t|�}|jdkr.tt|��}t|�}|dkrFtd��||krVtd��|dkrh||}n&|dkrztd��n|||kr�td��|�||||��dS)z,Send the bytes data from a bytes-like objectrrzoffset is negativezbuffer length < offsetNzsize is negativezbuffer length < offset + size)rGrI�
memoryview�itemsize�bytes�lenr(�_send_bytes)r=�buf�offset�size�m�nrrr�
send_bytes�s"


z_ConnectionBase.send_bytescCs$|��|��|�t�|��dS)zSend a (picklable) objectN)rGrIrS�_ForkingPickler�dumps�r=�objrrr�send�sz_ConnectionBase.sendcCsJ|��|��|dk	r(|dkr(td��|�|�}|dkrB|��|��S)z7
        Receive bytes data as a bytes object.
        Nrznegative maxlength)rGrHr(�_recv_bytesrK�getvalue)r=�	maxlengthrTrrr�
recv_bytes�s
z_ConnectionBase.recv_bytesc
Cs�|��|��t|���}|j}|t|�}|dkr>td��n||krNtd��|��}|��}|||krvt|�	���|�
d�|�||||||��|W5QR�SQRXdS)zq
        Receive bytes data into a writeable bytes-like object.
        Return the number of bytes read.
        rznegative offsetzoffset too largeN)rGrHrOrPrRr(r_�tellr	r`�seek�readinto)r=rTrUrWrP�bytesize�resultrVrrr�recv_bytes_into�s$



�z_ConnectionBase.recv_bytes_intocCs&|��|��|��}t�|���S)zReceive a (picklable) object)rGrHr_rZ�loads�	getbuffer)r=rTrrr�recv�sz_ConnectionBase.recv�cCs|��|��|�|�S)z/Whether there is any input available to be read)rGrH�_poll�r=rrrr�poll�sz_ConnectionBase.pollcCs|SrrrDrrr�	__enter__sz_ConnectionBase.__enter__cCs|��dSr�rJ�r=�exc_type�	exc_value�exc_tbrrr�__exit__sz_ConnectionBase.__exit__)TT)rN)N)r)rl)�__name__�
__module__�__qualname__r:rArErGrHrIrK�propertyrMr?r@rNrJrYr^rbrhrkrorprvrrrrr8rs.








r8c@sDeZdZdZdZejfdd�Zdd�Zddd	�Z	d
d�Z
dd
�ZdS)�PipeConnectionz�
        Connection class based on a Windows named pipe.
        Overlapped I/O is used, so the handles must have been created
        with FILE_FLAG_OVERLAPPED.
        FcCs||j�dSrrL)r=�_CloseHandlerrrrCszPipeConnection._closec	Cs�tj|j|dd�\}}zHz,|tjkrBt�|jgdt�}|tksBt	�Wn|�
��YnXW5|�d�\}}X|dks|t	�|t|�ks�t	�dS)NT��
overlappedFr)�_winapi�	WriteFiler:�GetOverlappedResult�ERROR_IO_PENDING�WaitForMultipleObjects�eventrr�AssertionError�cancelrR)r=rT�ov�err�nwritten�waitresrrrrSs
�zPipeConnection._send_bytesNc	Cs2|jrd|_t��S|dkr dnt|d�}z�tj|j|dd�\}}dzHz,|tjkrpt�
|jgdt�}|tkspt�Wn|���YnXW5|�d�\}}|dkr�t��}|�|�	��|�WS|tj
kr�|�||��WSXWn:tk
�r$}z|jtjk�rt�n�W5d}~XYnXtd��dS)NF�Tr}rz.shouldn't get here; expected KeyboardInterrupt)�_got_empty_message�io�BytesIO�minr�ReadFiler:r��writerj�ERROR_MORE_DATA�_get_more_datar�r�r�rrr�r�rF�winerror�ERROR_BROKEN_PIPE�EOFError�RuntimeError)	r=�maxsize�bsizer�r��nread�fr��errrr_&s>
�

�
zPipeConnection._recv_bytescCs.|jst�|j�ddkrdStt|g|��S)NrT)r�r�
PeekNamedPiper:�boolrrnrrrrmFs
�zPipeConnection._pollcCs�|��}t��}|�|�t�|j�d}|dks6t�|dk	rVt|�||krV|�	�tj
|j|dd�\}}|�d�\}}|dks�t�||ks�t�|�|���|S)NrrTr})rjr�r�r�rr�r:r�rRrKr�r�)r=r�r�rTr��leftr��rbytesrrrr�Ls
zPipeConnection._get_more_data)N)rwrxry�__doc__r�r�CloseHandlerCrSr_rmr�rrrrr{s
 r{c@s|eZdZdZer,ejfdd�ZejZ	ej
Znej
fdd�ZejZ	ejZe	fdd�Zefdd�Zd	d
�Zddd
�Zdd�ZdS)�
Connectionzo
    Connection class based on an arbitrary file descriptor (Unix only), or
    a socket handle (Windows).
    cCs||j�dSrrL�r=rCrrrrCcszConnection._closecCs||j�dSrrLr�rrrrChscCs8t|�}||j|�}||8}|dkr&q4||d�}qdS�Nr)rRr:)r=rTr��	remainingrXrrr�_sendmszConnection._sendcCsbt��}|j}|}|dkr^|||�}t|�}|dkrJ||krBt�ntd��|�|�||8}q|S)Nrzgot end of file during message)r�r�r:rRr�rFr�)r=rV�readrTr>r��chunkrXrrr�_recvvs


zConnection._recvcCs�t|�}|dkrHt�dd�}t�d|�}|�|�|�|�|�|�n8t�d|�}|dkrr|�|�|�|�n|�||�dS)Ni����!i����!Qi@)rR�struct�packr�)r=rTrX�
pre_header�headerrrrrS�s


zConnection._send_bytesNcCs^|�d�}t�d|���\}|dkr@|�d�}t�d|���\}|dk	rT||krTdS|�|�S)N�r�r��r�)r�r��unpackr`)r=r�rTrVrrrr_�s

zConnection._recv_bytescCst|g|�}t|�Sr)rr�)r=r�rrrrrm�szConnection._poll)N)rwrxryr�r�_multiprocessing�closesocketrCr^�_writerk�_readr$rJr�r�r�r�rSr_rmrrrrr�\s	

r�c@sReZdZdZddd�Zdd�Zdd	�Zed
d��Zedd
��Z	dd�Z
dd�ZdS)rz�
    Returns a listener object.

    This is a wrapper for a bound socket which is 'listening' for
    connections, or for a Windows named pipe.
    NrcCsp|p|rt|�pt}|pt|�}t|�|dkr>t||�|_nt|||�|_|dk	rft|t�sft	d��||_
dS)Nr�authkey should be a byte string)r7�default_familyr+r0�PipeListener�	_listener�SocketListener�
isinstancerQ�	TypeError�_authkey)r=r6r*�backlog�authkeyrrrrA�s�zListener.__init__cCs>|jdkrtd��|j��}|jr:t||j�t||j�|S)zz
        Accept a connection on the bound socket or named pipe of `self`.

        Returns a `Connection` object.
        Nzlistener is closed)r�rF�acceptr��deliver_challenge�answer_challenge)r=�crrrr��s

zListener.acceptcCs |j}|dk	rd|_|��dS)zA
        Close the bound socket or named pipe of `self`.
        N)r�rJ)r=�listenerrrrrJ�szListener.closecCs|jjSr)r��_addressrDrrrr6�szListener.addresscCs|jjSr)r��_last_acceptedrDrrr�
last_accepted�szListener.last_acceptedcCs|SrrrDrrrrp�szListener.__enter__cCs|��dSrrqrrrrrrv�szListener.__exit__)NNrN)rwrxryr�rAr�rJrzr6r�rprvrrrrr�s
	

cCsh|p
t|�}t|�|dkr&t|�}nt|�}|dk	rHt|t�sHtd��|dk	rdt||�t||�|S)z=
    Returns a connection to the address of a `Listener`
    rNr�)	r7r0�
PipeClient�SocketClientr�rQr�r�r�)r6r*r�r�rrrr�s


TcCsj|r>t��\}}|�d�|�d�t|���}t|���}n$t��\}}t|dd�}t|dd�}||fS)�L
        Returns pair of connection objects at either end of a pipe
        TF�r@�r?)r/�
socketpair�setblockingr��detachr$�pipe)�duplex�s1�s2�c1�c2�fd1�fd2rrrrs

c

Cs�td�}|r*tj}tjtjB}tt}}ntj}tj}dt}}t�||tjBtj	Btj
tjBtjBd||tj
tj�}t�||dtjtjtjtj�}t�|tjdd�tj|dd�}|�d�\}	}
|
dks�t�t||d�}t||d�}||fS)	r�rrrNTr}r�r�)r+r�PIPE_ACCESS_DUPLEX�GENERIC_READ�
GENERIC_WRITE�BUFSIZEZPIPE_ACCESS_INBOUND�CreateNamedPipe�FILE_FLAG_OVERLAPPED�FILE_FLAG_FIRST_PIPE_INSTANCE�PIPE_TYPE_MESSAGE�PIPE_READMODE_MESSAGE�	PIPE_WAIT�NMPWAIT_WAIT_FOREVER�NULL�
CreateFile�
OPEN_EXISTING�SetNamedPipeHandleState�ConnectNamedPiper�r�r{)
r�r6�openmode�access�obsize�ibsize�h1�h2r~�_r�r�r�rrrrsV
�
��	��c@s*eZdZdZd
dd�Zdd�Zdd�Zd	S)r�zO
    Representation of a socket which is bound to an address and listening
    rcCs�t�tt|��|_zRtjdkr2|j�tjtjd�|j�d�|j�	|�|j�
|�|j��|_Wn t
k
r�|j���YnX||_d|_|dkr�t�|�s�tj|tj|fdd�|_nd|_dS)N�posixrTrr��args�exitpriority)r/�getattr�_socketr$�name�
setsockopt�
SOL_SOCKET�SO_REUSEADDRr��bind�listen�getsocknamer�rFrJ�_familyr�rr5�Finalize�unlink�_unlink)r=r6r*r�rrrrAGs0

�
�
zSocketListener.__init__cCs&|j��\}|_|�d�t|���S)NT)r�r�r�r�r�r��r=�srrrr�`s
zSocketListener.acceptcCs0z|j��W5|j}|dk	r*d|_|�XdSr)rr�rJ)r=rrrrrJeszSocketListener.closeN)r)rwrxryr�rAr�rJrrrrr�Cs
r�c
CsPt|�}t�tt|���.}|�d�|�|�t|���W5QR�SQRXdS)zO
    Return a connection object connected to the socket given by `address`
    TN)r7r/r�r��connectr�r�)r6r*rrrrr�os


r�c@s8eZdZdZddd�Zd
dd�Zdd	�Zed
d��ZdS)r�z0
        Representation of a named pipe
        NcCsL||_|jdd�g|_d|_t�d|j�tj|tj|j|jfdd�|_	dS)NT)�firstz listener created with address=%rrr�)
r��_new_handle�
_handle_queuer�r�	sub_debugrr��_finalize_pipe_listenerrJ)r=r6r�rrrrA�s
�zPipeListener.__init__Fc
CsHtjtjB}|r|tjO}t�|j|tjtjBtjBtj	t
t
tjtj�Sr)
rr�r�r�r�r�r�r�r�ZPIPE_UNLIMITED_INSTANCESr�r�r�)r=r�flagsrrrr�s

��zPipeListener._new_handlec
Cs�|j�|���|j�d�}ztj|dd�}Wn0tk
r^}z|jtjkrN�W5d}~XYn\Xz<zt�|jgdt
�}Wn |��t�|��YnXW5|�	d�\}}|dks�t
�Xt|�S)NrTr}F)r	�appendr�poprr�rFr��
ERROR_NO_DATAr�r�r�r�rr�r�r{)r=r>r�r�r�r��resrrrr��s(�
zPipeListener.acceptcCs$t�d|�|D]}t�|�qdS)Nz closing listener with address=%r)rr
rr�)�queuer6r>rrrr�sz$PipeListener._finalize_pipe_listener)N)F)	rwrxryr�rArr��staticmethodrrrrrr�s

r�c
Cs�t�}z6t�|d�t�|tjtjBdtjtjtjtj�}Wq�t	k
rz}z |j
tjtjfksht
|�rj�W5d}~XYqXq�q�t�|tjdd�t|�S)zU
        Return a connection object connected to the pipe given by `address`
        ��rN)rrZ
WaitNamedPiper�r�r�r�r�r�rFr��ERROR_SEM_TIMEOUT�ERROR_PIPE_BUSYrr�r�r{)r6r�hr�rrrr��s8
����r��s#CHALLENGE#s	#WELCOME#s	#FAILURE#cCs�ddl}t|t�s$td�t|����t�t�}|�	t
|�|�||d���}|�
d�}||krl|�	t�n|�	t�td��dS)Nr� Authkey must be bytes, not {0!s}�md5�zdigest received was wrong)�hmacr�rQr(�formatr1r$�urandom�MESSAGE_LENGTHrY�	CHALLENGE�new�digestrb�WELCOME�FAILUREr��
connectionr�r�messager!�responserrrr��s
�


r�cCs�ddl}t|t�s$td�t|����|�d�}|dtt��tksNt	d|��|tt�d�}|�
||d���}|�|�|�d�}|t
kr�td��dS)Nrrrzmessage = %rrzdigest sent was rejected)rr�rQr(rr1rbrRrr�r r!rYr"rr$rrrr��s
�
 

r�c@s$eZdZdd�Zdd�Zdd�ZdS)�ConnectionWrappercCs6||_||_||_dD]}t||�}t|||�qdS)N)rNrJrorbrY)�_conn�_dumps�_loadsr��setattr)r=�connr[ri�attrr]rrrrA�s
zConnectionWrapper.__init__cCs|�|�}|j�|�dSr)r*r)rY)r=r]rrrrr^s
zConnectionWrapper.sendcCs|j��}|�|�Sr)r)rbr+rrrrrks
zConnectionWrapper.recvN)rwrxryrAr^rkrrrrr(�sr(cCst�|fdddd��d�S)Nr�utf-8)�	xmlrpclibr[�encode)r]rrr�
_xml_dumpssr2cCst�|�d��\\}}|S)Nr/)r0ri�decode)rr]�methodrrr�
_xml_loadssr5c@seZdZdd�ZdS)�XmlListenercCs"ddlmat�|�}t|tt�Sr�)�
xmlrpc.client�clientr0rr�r(r2r5r\rrrr�s
zXmlListener.acceptN)rwrxryr�rrrrr6sr6cOsddlmatt||�tt�Sr�)r7r8r0r(rr2r5)r��kwdsrrr�	XmlClientsr:cCs�t|�}g}|r�t�|d|�}|tkr*q�n\t|krFtt|�krTnn
|t8}n2t|krptt|�kr~nn
|t8}ntd��|�||�||dd�}d}q|S)NFzShould not get hererr)	�listrr�r
rrRrr�r
)�handlesr�L�readyrrrr�_exhaustive_wait%s 
 
r?c
s^|dkrt}n|dkrd}nt|dd�}t|�}i�g}t��t�}�z@|D�]&}zt|d�}	Wn tk
r�|�|��<YqPXzt	�|	�dd�\}}Wn8tk
r�}zd|j}}|tkrƂW5d}~XYnX|t	jkr�|�|�|�|j<qP|�rjt��dd�d	k�rjz|�d
�\}}Wn*tk
�rP}z
|j}W5d}~XYnX|�sjt
|d��rjd|_��|�d}qPt���|�}W5|D]}|���q�|D]�}z|�d�\}}Wn6tk
�r�}z|j}|tk�r�W5d}~XYnX|t	j
k�r��|j}��|�|dk�r�t
|d��r�d|_�q�X���fdd�|D���fd
d�|D�S)��
        Wait till an object in object_list is ready/readable.

        Returns list of those objects in object_list which are ready/readable.
        Nrrg�?Tr�rN�)�rAFc3s|]}�|VqdSrr)�.0r)�waithandle_to_objrr�	<genexpr>�szwait.<locals>.<genexpr>csg|]}|�kr|�qSrr)rC�o)�
ready_objectsrr�
<listcomp>�s�wait.<locals>.<listcomp>)r�intr;�setr�r�rFr��
_ready_errorsr�ERROR_OPERATION_ABORTEDr��addr.r�r��AttributeErrorr9r�r�r
r,�getwindowsversionr?�keys�update)
�object_listr�ov_list�
ready_handlesr�r�r�r�rFrNr)rGrDrr;sh







�PollSelectorc
Cs�t���}|D]}|�|tj�q|dk	r4t��|}|�|�}|r\dd�|D�W5QR�S|dk	r4|t��}|dkr4|W5QR�Sq4W5QRXdS)r@NcSsg|]\}}|j�qSr)�fileobj)rC�key�eventsrrrrH�srIr)�
_WaitSelector�register�	selectors�
EVENT_READrr�select)rSr�selectorr]�deadliner>rrrr�s
c
CsZ|��}t�|tjtj��6}ddlm}|�|�}t||j	|j
ffW5QR�SQRXdS)Nr)�resource_sharer)rNr/�fromfdr�SOCK_STREAMr ra�	DupSocket�rebuild_connectionr?r@)r-r>rra�dsrrr�reduce_connection�s

rgcCs|��}t|��||�Sr�r�r�)rfr?r@�sockrrrre�srecCsB|jrtjnd|jrtjndB}t�|��|�}t||j|jffSr�)	r?rZFILE_GENERIC_READr@ZFILE_GENERIC_WRITEr
�	DupHandlerN�rebuild_pipe_connection)r-r��dhrrr�reduce_pipe_connection�s
�rmcCs|��}t|||�Sr)r�r{)rlr?r@r>rrrrk�srkcCs t�|���}t||j|jffSr)r
�DupFdrNrer?r@)r-�dfrrrrg�scCs|��}t|||�Srrh)ror?r@�fdrrrre�s)NN)T)T)N)N)I�__all__r�r$r,r/r�rr!�	itertoolsr�r rrr	�contextr
�ForkingPicklerrZrrrr
r�ImportErrorr-r��CONNECTION_TIMEOUT�countr'r��familiesr.rrr+r0r7r8r{r��objectrrrr�r�r�r�rrr"r#r�r�r(r2r5r6r:r?r�ZERROR_NETNAME_DELETEDrLrr\rVrZ�SelectSelectorrgrer[rmrkrrrr�<module>
s�




PT=

,,8	P
X�2�@s�ddlZddlZddlZddlmZddlmZdZGdd�de�ZGdd	�d	e�Z	Gd
d�de�Z
Gdd
�d
e�ZGdd�de�Z
Gdd�dej�ZGdd�de
�Zejdk�rRGdd�dej�ZGdd�dej�ZGdd�dej�ZGdd�de
�ZGdd�de
�ZGdd �d e
�Ze�e�e�d!�Zejd"k�rDeed#�Zneed$�Zn8Gd%d�dej�ZGd&d�de
�Zd#e�iZeed#�Zd'd(�Ze��Zd)d*�Zd+d,�Zd-d.�ZdS)/�N�)�process)�	reduction�c@seZdZdS)�ProcessErrorN��__name__�
__module__�__qualname__rrr�-/usr/lib/python3.8/multiprocessing/context.pyrsrc@seZdZdS)�BufferTooShortNrrrrrrsrc@seZdZdS)�TimeoutErrorNrrrrrr
sr
c@seZdZdS)�AuthenticationErrorNrrrrrrsrc@sXeZdZeZeZeZeZeej	�Z	eej
�Z
eej�Zdd�Zdd�Z
dCdd�Zdd	�Zd
d�ZdDd
d�ZdEdd�ZdFdd�Zdd�ZdGdd�ZdHdd�ZdIdd�Zdd�ZdJd d!�Zd"d#�Zd$d%�Zdd&�d'd(�Zdd&�d)d*�Zd+d,�Zd-d.�ZdKd/d0�Z d1d2�Z!d3d4�Z"d5d6�Z#dLd7d8�Z$dMd:d;�Z%dNd<d=�Z&e'd>d?��Z(e(j)d@d?��Z(dAdB�Z*dS)O�BaseContextcCs"t��}|dkrtd��n|SdS)z(Returns the number of CPUs in the systemNzcannot determine number of cpus)�os�	cpu_count�NotImplementedError)�self�numrrrr)s
zBaseContext.cpu_countcCs&ddlm}||��d�}|��|S)z�Returns a manager associated with a running server process

        The managers methods such as `Lock()`, `Condition()` and `Queue()`
        can be used to create shared objects.
        r)�SyncManager��ctx)�managersr�get_context�start)rr�mrrr�Manager1szBaseContext.ManagerTcCsddlm}||�S)z1Returns two connection object connected by a piper)�Pipe)�
connectionr)r�duplexrrrrr<szBaseContext.PipecCsddlm}||��d�S)z#Returns a non-recursive lock objectr)�Lockr)�synchronizer r)rr rrrr AszBaseContext.LockcCsddlm}||��d�S)zReturns a recursive lock objectr)�RLockr)r!r"r)rr"rrrr"FszBaseContext.RLockNcCsddlm}|||��d�S)zReturns a condition objectr)�	Conditionr)r!r#r)r�lockr#rrrr#KszBaseContext.ConditionrcCsddlm}|||��d�S)zReturns a semaphore objectr)�	Semaphorer)r!r%r)r�valuer%rrrr%PszBaseContext.SemaphorecCsddlm}|||��d�S)z"Returns a bounded semaphore objectr)�BoundedSemaphorer)r!r'r)rr&r'rrrr'UszBaseContext.BoundedSemaphorecCsddlm}||��d�S)zReturns an event objectr)�Eventr)r!r(r)rr(rrrr(ZszBaseContext.EventcCs ddlm}|||||��d�S)zReturns a barrier objectr)�Barrierr)r!r)r)r�parties�action�timeoutr)rrrr)_szBaseContext.BarrierrcCsddlm}|||��d�S)�Returns a queue objectr)�Queuer)�queuesr.r)r�maxsizer.rrrr.dszBaseContext.QueuecCsddlm}|||��d�S)r-r)�
JoinableQueuer)r/r1r)rr0r1rrrr1iszBaseContext.JoinableQueuecCsddlm}||��d�S)r-r)�SimpleQueuer)r/r2r)rr2rrrr2nszBaseContext.SimpleQueuercCs"ddlm}||||||��d�S)zReturns a process pool objectr)�Pool)�context)�poolr3r)r�	processes�initializer�initargs�maxtasksperchildr3rrrr3ss
�zBaseContext.PoolcGsddlm}||f|��S)zReturns a shared objectr)�RawValue)�sharedctypesr:)r�typecode_or_type�argsr:rrrr:zszBaseContext.RawValuecCsddlm}|||�S)zReturns a shared arrayr)�RawArray)r;r>)rr<�size_or_initializerr>rrrr>szBaseContext.RawArray)r$cGs&ddlm}||f|�||��d��S)z$Returns a synchronized shared objectr)�Value�r$r)r;r@r)rr<r$r=r@rrrr@�s�zBaseContext.ValuecCs ddlm}|||||��d�S)z#Returns a synchronized shared arrayr)�ArrayrA)r;rBr)rr<r?r$rBrrrrB�s�zBaseContext.ArraycCs,tjdkr(ttdd�r(ddlm}|�dS)z�Check whether this is a fake forked process in a frozen executable.
        If so then run code specified by commandline and exit.
        �win32�frozenFr)�freeze_supportN)�sys�platform�getattr�spawnrE)rrErrrrE�szBaseContext.freeze_supportcCsddlm}|�S)zZReturn package logger -- if it does not already exist then
        it is created.
        r)�
get_logger)�utilrJ)rrJrrrrJ�szBaseContext.get_loggercCsddlm}||�S)z8Turn on logging and add a handler which prints to stderrr)�
log_to_stderr)rKrL)r�levelrLrrrrL�szBaseContext.log_to_stderrcCsddlm}dS)zVInstall support for sending connections and sockets
        between processes
        r)rN)�r)rrrrr�allow_connection_pickling�sz%BaseContext.allow_connection_picklingcCsddlm}||�dS)z�Sets the path to a python.exe or pythonw.exe binary used to run
        child processes instead of sys.executable when using the 'spawn'
        start method.  Useful for people embedding Python.
        r)�set_executableN)rIrP)r�
executablerPrrrrP�szBaseContext.set_executablecCsddlm}||�dS)zkSet list of module names to try to load in forkserver process.
        This is really just a hint.
        r)�set_forkserver_preloadN)�
forkserverrR)r�module_namesrRrrrrR�sz"BaseContext.set_forkserver_preloadcCsH|dkr|Szt|}Wn"tk
r:td|�d�YnX|��|S)Nzcannot find context for %r)�_concrete_contexts�KeyError�
ValueError�_check_available)r�methodrrrrr�szBaseContext.get_contextFcCs|jS�N)�_name�r�
allow_nonerrr�get_start_method�szBaseContext.get_start_methodcCstd��dS)Nz+cannot set start method of concrete context)rW�rrY�forcerrr�set_start_method�szBaseContext.set_start_methodcCst��d�S)z_Controls how objects will be reduced to a form that can be
        shared with other processes.r)�globals�get�rrrr�reducer�szBaseContext.reducercCs|t�d<dS)Nr)rb)rrrrrre�scCsdSrZrrdrrrrX�szBaseContext._check_available)T)N)r)r)NN)r)r)NNrN)N)N)F)F)+rr	r
rrr
r�staticmethodr�current_process�parent_process�active_childrenrrrr r"r#r%r'r(r)r.r1r2r3r:r>r@rBrErJrLrOrPrRrr^ra�propertyre�setterrXrrrrrsR









�







rc@seZdZdZedd��ZdS)�ProcessNcCst��j�|�SrZ)�_default_contextrrl�_Popen)�process_objrrrrn�szProcess._Popen�rr	r
�
_start_methodrfrnrrrrrl�srlcsFeZdZeZdd�Zd
�fdd�	Zddd�Zdd	d
�Zdd�Z�Z	S)�DefaultContextcCs||_d|_dSrZ)rm�_actual_context)rr4rrr�__init__�szDefaultContext.__init__Ncs0|dkr |jdkr|j|_|jSt��|�SdSrZ)rsrm�superr)rrY��	__class__rrr�s

zDefaultContext.get_contextFcCs<|jdk	r|std��|dkr,|r,d|_dS|�|�|_dS)Nzcontext has already been set)rs�RuntimeErrorrr_rrrra�szDefaultContext.set_start_methodcCs"|jdkr|rdS|j|_|jjSrZ)rsrmr[r\rrrr^�s

zDefaultContext.get_start_methodcCsBtjdkrdgStjdkr"ddgnddg}tjr:|�d�|SdS)NrCrI�darwin�forkrS)rFrGr�HAVE_SEND_HANDLE�append)r�methodsrrr�get_all_start_methodss

z$DefaultContext.get_all_start_methods)N)F)F)
rr	r
rlrtrrar^r~�
__classcell__rrrvrrr�s

rrrCc@seZdZdZedd��ZdS)�ForkProcessrzcCsddlm}||�S�Nr)�Popen)�
popen_forkr��ror�rrrrnszForkProcess._PopenNrprrrrr�sr�c@seZdZdZedd��ZdS)�SpawnProcessrIcCsddlm}||�Sr�)�popen_spawn_posixr�r�rrrrns�SpawnProcess._PopenNrprrrrr�sr�c@seZdZdZedd��ZdS)�ForkServerProcessrScCsddlm}||�Sr�)�popen_forkserverr�r�rrrrn szForkServerProcess._PopenNrprrrrr�sr�c@seZdZdZeZdS)�ForkContextrzN)rr	r
r[r�rlrrrrr�%sr�c@seZdZdZeZdS��SpawnContextrIN�rr	r
r[r�rlrrrrr�)sr�c@seZdZdZeZdd�ZdS)�ForkServerContextrScCstjstd��dS)Nz%forkserver start method not available)rr{rWrdrrrrX0sz"ForkServerContext._check_availableN)rr	r
r[r�rlrXrrrrr�-sr�)rzrIrSryrIrzc@seZdZdZedd��ZdS)r�rIcCsddlm}||�Sr�)Zpopen_spawn_win32r�r�rrrrnDsr�Nrprrrrr�Bsc@seZdZdZeZdSr�r�rrrrr�IscCst|t_dSrZ)rUrmrs)rYrrr�_force_start_methodVsr�cCsttdd�S)N�spawning_popen)rH�_tlsrrrr�get_spawning_popen_sr�cCs
|t_dSrZ)r�r�)�popenrrr�set_spawning_popenbsr�cCs t�dkrtdt|�j��dS)NzF%s objects should only be shared between processes through inheritance)r�rx�typer)�objrrr�assert_spawninges
��r�) rrF�	threadingrNrr�__all__�	Exceptionrrr
r�objectr�BaseProcessrlrrrGr�r�r�r�r�r�rUrmr��localr�r�r�r�rrrr�<module>sL?,��X/�@sdddddddddd	d
ddd
ddgZddlZddlZddlZddlZddlmZddlmZmZm	Z	m
Z
ddlmZmZm
Z
ddlmZGdd�dej�ZeZejZe��e�_dd�Zdd�ZGdd�de�ZeZeZd'dd�ZGd d!�d!e�Zd"d�Zd#d$�Z d(d&d�Z!eZ"dS))�Process�current_process�active_children�freeze_support�Lock�RLock�	Semaphore�BoundedSemaphore�	Condition�Event�Barrier�Queue�Manager�Pipe�Pool�
JoinableQueue�N�)r)rrrr)r
r	r)rc@s4eZdZddddifdd�Zdd�Zedd��ZdS)	�DummyProcessN�cCs8tj�||||||�d|_t��|_d|_t�|_	dS)NF)
�	threading�Thread�__init__�_pid�weakref�WeakKeyDictionary�	_children�
_start_calledr�_parent)�self�group�target�name�args�kwargsrr�4/usr/lib/python3.8/multiprocessing/dummy/__init__.pyr$s

zDummyProcess.__init__cCsN|jt�k	r td�|jt����d|_t|jd�r>d|jj|<tj�	|�dS)Nz,Parent is {0!r} but current_process is {1!r}Tr)
rr�RuntimeError�formatr�hasattrrrr�start�rrrr$r(+s��zDummyProcess.startcCs|jr|��sdSdSdS)Nr)r�is_aliver)rrr$�exitcode5szDummyProcess.exitcode)�__name__�
__module__�__qualname__rr(�propertyr+rrrr$r"s
rcCs2t�j}t|�D]}|��s|�|d�qt|�S�N)rr�listr*�pop)�children�prrr$rDs
cCsdSr0rrrrr$rKsc@seZdZdd�Zdd�ZdS)�	NamespacecKs|j�|�dSr0)�__dict__�update)r�kwdsrrr$rSszNamespace.__init__cCsZt|j���}g}|D]$\}}|�d�s|�d||f�q|��d|jjd�|�fS)N�_z%s=%rz%s(%s)z, )	r1r6�items�
startswith�append�sort�	__class__r,�join)rr:�tempr!�valuerrr$�__repr__Us
zNamespace.__repr__N)r,r-r.rrBrrrr$r5Rsr5TcCst�||�Sr0)�array)�typecode�sequence�lockrrr$�ArrayasrGc@s8eZdZd
dd�Zedd��Zejdd��Zdd�Zd	S)�ValueTcCs||_||_dSr0)�	_typecode�_value)rrDrArFrrr$reszValue.__init__cCs|jSr0�rJr)rrr$rAiszValue.valuecCs
||_dSr0rK)rrArrr$rAmscCsdt|�j|j|jfS)Nz<%s(%r, %r)>)�typer,rIrJr)rrr$rBqszValue.__repr__N)T)r,r-r.rr/rA�setterrBrrrr$rHds


rHcCs
tjtSr0)�sys�modulesr,rrrr$r
tscCsdSr0rrrrr$�shutdownwsrPrcCsddlm}||||�S)N�)�
ThreadPool)�poolrR)�	processes�initializer�initargsrRrrr$rzs)T)NNr)#�__all__rrNrrC�
connectionrrrrrr
r	r�queuerrrr�current_threadrrrrr�objectr5�dictr1rGrHr
rPrrrrrr$�<module>sN�


X�	�@sRdddgZddlmZdgZGdd�de�Zdd�Zdd	d�ZGd
d�de�ZdS)
�Client�Listener�Pipe�)�QueueNc@sBeZdZddd�Zdd�Zdd�Zed	d
��Zdd�Zd
d�Z	dS)rN�cCst|�|_dS�N)r�_backlog_queue)�self�address�family�backlog�r
�6/usr/lib/python3.8/multiprocessing/dummy/connection.py�__init__szListener.__init__cCst|j���Sr)�
Connectionr�get�r	r
r
r�acceptszListener.acceptcCs
d|_dSr�rrr
r
r�closeszListener.closecCs|jSrrrr
r
rr
szListener.addresscCs|Srr
rr
r
r�	__enter__!szListener.__enter__cCs|��dSr�r�r	�exc_type�	exc_value�exc_tbr
r
r�__exit__$szListener.__exit__)NNr)
�__name__�
__module__�__qualname__rrr�propertyr
rrr
r
r
rrs

cCs&t�t�}}|�||f�t||�Sr)r�putr)r
�_in�_outr
r
rr(sTcCs"t�t�}}t||�t||�fSr)rr)�duplex�a�br
r
rr.sc@s6eZdZdd�Zd
dd�Zdd�Zdd	�Zd
d�ZdS)rcCs,||_||_|j|_|_|j|_|_dSr)r#r"r!�send�
send_bytesr�recv�
recv_bytes)r	r"r#r
r
rr5szConnection.__init__�c	CsN|j��dkrdS|dkrdS|jj�|jj�|�W5QRX|j��dkS)NrTr+F)r"�qsize�	not_empty�wait)r	�timeoutr
r
r�poll;s
zConnection.pollcCsdSrr
rr
r
rrDszConnection.closecCs|Srr
rr
r
rrGszConnection.__enter__cCs|��dSrrrr
r
rrJszConnection.__exit__N)r+)rrrrr0rrrr
r
r
rr3s

	r)T)	�__all__�queuer�families�objectrrrrr
r
r
r�<module>
s

X� �@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
ddl	mZddlm
Z
ddl	mZddl	mZddl	mZd	d
ddgZd
Ze�d�ZGdd�de�Zddd�Zdd�Zdd�Zdd�Ze�ZejZejZejZejZdS)�N�)�
connection)�process)�	reduction)�resource_tracker)�spawn)�util�ensure_running�get_inherited_fds�connect_to_new_process�set_forkserver_preload��qc@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�
ForkServercCs.d|_d|_d|_d|_t��|_dg|_dS)N�__main__)�_forkserver_address�_forkserver_alive_fd�_forkserver_pid�_inherited_fds�	threading�Lock�_lock�_preload_modules��self�r�0/usr/lib/python3.8/multiprocessing/forkserver.py�__init__"s
zForkServer.__init__c	Cs|j�|��W5QRXdS�N)r�_stop_unlockedrrrr�_stop*szForkServer._stopcCsV|jdkrdSt�|j�d|_t�|jd�d|_t�|j�sLt�|j�d|_dS)Nr)	r�os�closer�waitpidr�is_abstract_socket_namespacer�unlinkrrrrr/s
zForkServer._stop_unlockedcCs&tdd�|jD��std��||_dS)z>Set list of module names to try to load in forkserver process.css|]}t|�tkVqdSr)�type�str)�.0�modrrr�	<genexpr>@sz4ForkServer.set_forkserver_preload.<locals>.<genexpr>z&module_names must be a list of stringsN)�allr�	TypeError)r�
modules_namesrrrr>sz!ForkServer.set_forkserver_preloadcCs|jS)z�Return list of fds inherited from parent process.

        This returns None if the current process was not started by fork
        server.
        )rrrrrr
DszForkServer.get_inherited_fdsc
Cs�|��t|�dtkr td��t�tj���}|�|j�t�	�\}}t�	�\}}|||j
t��g}||7}zNz&t�||�||fWW�4W5QR�St�
|�t�
|��YnXW5t�
|�t�
|�XW5QRXdS)a;Request forkserver to create a child process.

        Returns a pair of fds (status_r, data_w).  The calling process can read
        the child process's pid and (eventually) its returncode from status_r.
        The calling process should write to data_w the pickled preparation and
        process data.
        �ztoo many fdsN)r	�len�MAXFDS_TO_SEND�
ValueError�socket�AF_UNIX�connectrr!�piperr�getfdr"r�sendfds)r�fds�client�parent_r�child_w�child_r�parent_w�allfdsrrrrLs(�


z!ForkServer.connect_to_new_processcs�|j��~t��|jdk	r`t�|jtj�\}}|sBW5QR�dSt�|j�d|_	d|_d|_d}|j
r�ddh�t�d�}�fdd�|�
�D�}ni}t�tj���}t�d�}|�|�t�|�s�t�|d	�|��t��\}}ztzV|��|g}	||��||j
|f;}t��}
|
gt��}|d
|g7}t�|
||	�}Wnt�|��YnXW5t�|�X||_	||_||_W5QRXW5QRXdS)z�Make sure that a fork server is running.

        This can be called from any process.  Note that usually a child
        process will just reuse the forkserver started by its parent, so
        ensure_running() will do nothing.
        NzCfrom multiprocessing.forkserver import main; main(%d, %d, %r, **%r)�	main_path�sys_path�ignorecsi|]\}}|�kr||�qSrr)r(�x�y��desired_keysrr�
<dictcomp>�sz-ForkServer.ensure_running.<locals>.<dictcomp>r3i�z-c)rrr	rr!r#�WNOHANGr"rrrr�get_preparation_data�itemsr2r3r�arbitrary_address�bindrr$�chmod�listenr5�fileno�get_executable�_args_from_interpreter_flags�spawnv_passfds)r�pid�status�cmd�data�listener�address�alive_r�alive_w�fds_to_pass�exe�argsrrDrr	isN





�
zForkServer.ensure_runningN)
�__name__�
__module__�__qualname__rr rrr
rr	rrrrr srcCs�|rdd|kr8|dk	r8dt��_zt�|�W5t��`X|D]&}zt|�Wq<tk
r`Yq<Xq<t��t	�
�\}}t	�|d�t	�|d�dd�}tj
|tjtji}	dd�|	��D�}
t�|�i}tjtj|d	���}t�����}
|��t_|
�|tj�|
�|tj�|
�|tj��z�d
d�|
��D�}|�r"�qB�q"||k�rjt	�|d�d
k�sftd��t�||k�r\t	�|d�zt	�dt	j �\}}Wnt!k
�r�Y�q\YnX|dk�rq\|�"|d�}|dk	�rJt	�#|��r�t	�$|�}n&t	�%|��std�&||���t	�'|�}zt(||�Wnt)k
�r<YnXt	�*|�nt+�,d|��q�||k�r�|�-�d��,}t.�/|t0d�}t1|�t0k�r�t2d�&t1|����|^}}}|�*�t	�3�}|dk�rNd}zpz<|�*�|
�*�||||g}|�5|�6��t7||||
�}Wn.t8k
�r:t9j:t9�;��t9j<�=�YnXW5t	�4|�XnNzt(||�Wnt)k
�rrYnX|||<t	�*|�|D]}t	�*|��q�W5QRXWn4t>k
�r�}z|j?t?j@k�r̂W5d}~XYnX�qW5QRXW5QRXdS)zRun forkserver.rNTFcWsdSrr)�_unusedrrr�sigchld_handler�szmain.<locals>.sigchld_handlercSsi|]\}}|t�||��qSr)�signal)r(�sig�valrrrrF�s�zmain.<locals>.<dictcomp>)rNcSsg|]\}}|j�qSr)�fileobj)r(�key�eventsrrr�
<listcomp>�szmain.<locals>.<listcomp>r�zNot at EOF?i���rzChild {0:n} status is {1:n}z.forkserver: waitpid returned unexpected pid %dzToo many ({0:n}) fds to send)Ar�current_process�_inheritingr�import_main_path�
__import__�ImportErrorr�_close_stdinr!r5�set_blockingrb�SIGCHLD�SIGINT�SIG_IGNrI�
set_wakeup_fdr2r3�	selectors�DefaultSelector�getsockname�_forkserverr�register�
EVENT_READ�select�read�AssertionError�
SystemExitr#rG�ChildProcessError�pop�WIFSIGNALED�WTERMSIG�	WIFEXITED�format�WEXITSTATUS�write_signed�BrokenPipeErrorr"�warnings�warn�acceptr�recvfdsr0r/�RuntimeError�fork�_exit�extend�values�
_serve_one�	Exception�sys�
excepthook�exc_info�stderr�flush�OSError�errno�ECONNABORTED)�listener_fdrX�preloadr?r@�modname�sig_r�sig_wra�handlers�old_handlers�	pid_to_fdrV�selector�rfdsrR�stsr;�
returncode�sr8r<�code�
unused_fds�fd�errr�main�s�

��
�




��
�

��

�
r�c	Csht�d�|��D]\}}t�||�q|D]}t�|�q,|^t_tj_	t_
t�|�}t�
||�}|S)Nrj)rbrurIr!r"ryrr�_resource_tracker�_fdr�dupr�_main)	r<r8r�r�rcrdr��parent_sentinelr�rrrr�1s
�
r�cCsNd}tj}t|�|kr@t�||t|��}|s6td��||7}q
t�|�dS)Nrizunexpected EOFr)�
SIGNED_STRUCT�sizer/r!r}�EOFError�unpack)r�rU�lengthr�rrr�read_signedHs
r�cCs<t�|�}|r8t�||�}|dkr*td��||d�}q
dS)Nrzshould not get here)r��packr!�writer�)r��n�msg�nbytesrrrr�Rs
r�)NN) r�r!rvrbr2�structr�rr��rr�contextrrrr�__all__r0�Structr��objectrr�r�r�r�ryr	r
rrrrrr�<module>s>�


X��@s�ddlZddlmZddlZddlZddlZddlZddlZddlm	Z	m
Z
ddlmZdgZ
ejdkr�ddlZGdd	�d	e�Zn,Gd
d	�d	e�Zdd�Zd
d�Ze	�ee�Gdd�de�ZGdd�de�ZdS)�N)�defaultdict�)�	reduction�assert_spawning)�util�
BufferWrapper�win32c@s0eZdZdZe��Zdd�Zdd�Zdd�Z	dS)	�ArenazL
        A shared memory area backed by anonymous memory (Windows).
        cCsx||_td�D]B}dt��t|j�f}tjd||d�}t��dkrHqZ|�	�qt
d��||_||_|j|jf|_
dS)N�dz	pym-%d-%s�����tagnamerzCannot find name for new mmap)�size�range�os�getpid�next�_rand�mmap�_winapi�GetLastError�close�FileExistsError�name�buffer�_state)�selfr�ir�buf�r�*/usr/lib/python3.8/multiprocessing/heap.py�__init__&s
�Arena.__init__cCst|�|jS�N)rr)rrrr �__getstate__5szArena.__getstate__cCs,|\|_|_|_tjd|j|jd�|_dS)Nrr)rrrrr)r�staterrr �__setstate__9szArena.__setstate__N)
�__name__�
__module__�__qualname__�__doc__�tempfile�_RandomNameSequencerr!r$r&rrrr r	s
r	c@s8eZdZdZejdkrdgZngZd
dd�Zdd�Zd	S)r	zJ
        A shared memory area backed by a temporary file (POSIX).
        �linuxz/dev/shmrcCsx||_||_|dkrbtjdt��|�|�d�\|_}t�|�t�	|tj
|jf�t�|j|�t�|j|j�|_
dS)Nrzpym-%d-)�prefix�dir)r�fdr+�mkstemprr�_choose_dir�unlinkr�Finalizer�	ftruncaterr)rrr0rrrr r!Ms
�
r"cCs6|jD]&}t�|�}|j|j|kr|Sqt��Sr#)�_dir_candidatesr�statvfs�f_bavail�f_frsizer�get_temp_dir)rr�d�strrr r2[s



zArena._choose_dirN)r)	r'r(r)r*�sys�platformr6r!r2rrrr r	Cs

cCs(|jdkrtd��t|jt�|j�ffS)NrzDArena is unpicklable because forking was enabled when it was created)r0�
ValueError�
rebuild_arenarr�DupFd)�arrr �reduce_arenads
rCcCst||���Sr#)r	�detach)r�dupfdrrr r@jsr@c@szeZdZdZdZdZejfdd�Ze	dd��Z
dd�Zd	d
�Zdd�Z
d
d�Zdd�Zdd�Zdd�Zdd�Zdd�ZdS)�Heap�i@cCsXt��|_t��|_||_g|_i|_i|_	i|_
tt�|_
g|_g|_d|_d|_dS�Nr)rr�_lastpid�	threading�Lock�_lock�_size�_lengths�_len_to_seq�_start_to_block�_stop_to_blockr�set�_allocated_blocks�_arenas�_pending_free_blocks�
_n_mallocs�_n_frees)rrrrr r!{s


z
Heap.__init__cCs|d}|||@S)Nrr)�n�	alignment�maskrrr �_roundup�sz
Heap._roundupcCsZ|�t|j|�tj�}|j|jkr0|jd9_t�d|�t|�}|j	�
|�|d|fS)N�z"allocating a new mmap of length %dr)r[�maxrMr�PAGESIZE�_DOUBLE_ARENA_SIZE_UNTILr�infor	rT�append)rr�length�arenarrr �
_new_arena�szHeap._new_arenacCs�|j}||jkrdS|j�|�}|r(t�|j|df=|j||f=|j�|�|j	|}|�|d|f�|s~|j	|=|j
�|�dSrH)r�_DISCARD_FREE_SPACE_LARGER_THANrS�pop�AssertionErrorrPrQrT�removerOrN)rrcrb�blocks�seqrrr �_discard_arena�s

zHeap._discard_arenac	Cs|t�|j|�}|t|j�kr&|�|�S|j|}|j|}|��}|sV|j|=|j|=|\}}}|j||f=|j||f=|Sr#)	�bisect�bisect_leftrN�lenrdrOrfrPrQ)	rrrrbrj�blockrc�start�stoprrr �_malloc�s



zHeap._mallocc	Cs�|\}}}z|j||f}Wntk
r0YnX|�|�\}}z|j||f}Wntk
rfYnX|�|�\}}|||f}||}z|j|�|�Wn.tk
r�|g|j|<t�|j|�YnX||j||f<||j||f<dSr#)	rQ�KeyError�_absorbrPrOrarl�insortrN)	rrorcrprq�
prev_block�_�
next_blockrbrrr �_add_free_block�s(

zHeap._add_free_blockcCs^|\}}}|j||f=|j||f=||}|j|}|�|�|sV|j|=|j�|�||fSr#)rPrQrOrhrN)rrorcrprqrbrjrrr rt�s


zHeap._absorbcCs4|\}}}|j|}|�||f�|s0|�|�dSr#)rSrhrk)rrorcrprqrirrr �_remove_allocated_block�s


zHeap._remove_allocated_blockcCsBz|j��}Wntk
r&Yq>YnX|�|�|�|�qdSr#)rUrf�
IndexErrorryrz�rrorrr �_free_pending_blockss

zHeap._free_pending_blockscCs~t��|jkr$td�t��|j���|j�d�s>|j�|�n<z.|j
d7_
|��|�|�|�
|�W5|j�	�XdS)Nz$My pid ({0:n}) is not last pid {1:n}Fr)rrrIr?�formatrL�acquirerUra�releaserWr}ryrzr|rrr �frees
��
z	Heap.freec
Cs�|dkrtd�|���tj|kr.td�|���t��|jkrD|��|j	��|j
d7_
|��|�t
|d�|j�}|�|�\}}}||}||kr�|�|||f�|j|�||f�|||fW5QR�SQRXdS)Nr�Size {0:n} out of range�Size {0:n} too larger)r?r~r=�maxsize�
OverflowErrorrrrIr!rLrVr}r[r]�
_alignmentrrryrS�add)rrrcrprq�	real_stoprrr �malloc(s 
zHeap.mallocN)r'r(r)r�rer_rr^r!�staticmethodr[rdrkrrryrtrzr}r�r�rrrr rFss

rFc@s"eZdZe�Zdd�Zdd�ZdS)rcCs^|dkrtd�|���tj|kr.td�|���tj�|�}||f|_t	j
|tjj|fd�dS)Nrr�r�)�args)r?r~r=r�r�r�_heapr�rrr4r�)rrrorrr r!Fs

zBufferWrapper.__init__cCs&|j\\}}}}t|j�|||�Sr#)r�
memoryviewr)rrcrprqrrrr �create_memoryviewOszBufferWrapper.create_memoryviewN)r'r(r)rFr�r!r�rrrr rBs	)rl�collectionsrrrr=r+rJ�contextrr�r�__all__r>r�objectr	rCr@�registerrFrrrrr �<module>
s&
$!PX:��@sBdddddgZddlZddlZddlZddlZddlZddlZddlZddlmZddl	m
Z
d	d
lmZd	dl
mZmZmZd	dlmZd	d
lmZd	dlmZd	dlmZzd	dlmZdZWnek
r�dZYnXdd�Ze�eje�dd�dD�Zedek	�r.dd�ZeD]Ze�ee��qGdd�de�Zdifdd�Z dd�Z!Gd d!�d!e"�Z#d"d#�Z$d$d%�Z%Gd&d'�d'e�Z&Gd(d)�d)e�Z'ej(ej)fej*ej+fd*�Z,Gd+d�de�Z-Gd,d-�d-e.�Z/Gd.d�de�Z0d/d0�Z1ifd1d2�Z2dld3d4�Z3Gd5d6�d6e�Z4Gd7d8�d8e�Z5dmd9d:�Z6Gd;d<�d<e0�Z7Gd=d>�d>e0�Z8Gd?d@�d@e8�Z9GdAdB�dBe0�Z:GdCdD�dDe0�Z;GdEdF�dFe0�Z<GdGdH�dHe0�Z=e2dIdJ�Z>GdKdL�dLe>�Z?e2dMdN�Z@dOdPie@_Ae2dQdR�ZBe2dSdT�ZCdUdUdUdPdPdV�eC_AGdWdS�dSeC�ZDGdXd�de-�ZEeE�dYejF�eE�dZejF�eE�d[ejGe:�eE�d\ejHe8�eE�d]ejIe8�eE�d^ejJe8�eE�d_ejKe8�eE�d`ejLe9�eE�daejMe;�eE�dbejNeD�eE�dcee?�eE�ddeOe@�eE�d8e5e=�eE�d:e6eB�eE�d6e4e<�eEjdPe7dde�eEjdUddf�e�r>Gdgdh�dh�ZPGdidj�dje&�ZQGdkd�de-�ZRdS)n�BaseManager�SyncManager�	BaseProxy�Token�SharedMemoryManager�N)�getpid)�
format_exc�)�
connection)�	reduction�get_spawning_popen�ProcessError)�pool)�process)�util)�get_context)�
shared_memoryTFcCstj|j|��ffS�N)�array�typecode�tobytes)�a�r�./usr/lib/python3.8/multiprocessing/managers.py�reduce_array-srcCsg|]}tti|����qSr)�type�getattr��.0�namerrr�
<listcomp>1sr )�items�keys�valuescCstt|�ffSr)�list��objrrr�rebuild_as_list3sr'c@s4eZdZdZdZdd�Zdd�Zdd�Zd	d
�ZdS)rz3
    Type to uniquely identify a shared object
    ��typeid�address�idcCs||||_|_|_dSrr()�selfr)r*r+rrr�__init__BszToken.__init__cCs|j|j|jfSrr(�r,rrr�__getstate__EszToken.__getstate__cCs|\|_|_|_dSrr(�r,�staterrr�__setstate__HszToken.__setstate__cCsd|jj|j|j|jfS)Nz %s(typeid=%r, address=%r, id=%r))�	__class__�__name__r)r*r+r.rrr�__repr__Ks�zToken.__repr__N)	r4�
__module__�__qualname__�__doc__�	__slots__r-r/r2r5rrrrr<srcCs8|�||||f�|��\}}|dkr*|St||��dS)zL
    Send a message to manager using connection `c` and return response
    �#RETURNN)�send�recv�convert_to_error)�cr+�
methodname�args�kwds�kind�resultrrr�dispatchSs
rDcCsd|dkr|S|dkrRt|t�s4td�||t|����|dkrHtd|�St|�Sntd�|��SdS)N�#ERROR)�
#TRACEBACK�#UNSERIALIZABLEz.Result {0!r} (kind '{1}') type is {2}, not strrGzUnserializable message: %s
zUnrecognized message type {!r})�
isinstance�str�	TypeError�formatr�RemoteError�
ValueError)rBrCrrrr=]s
��
r=c@seZdZdd�ZdS)rLcCsdt|jd�dS)NzM
---------------------------------------------------------------------------
rzK---------------------------------------------------------------------------)rIr@r.rrr�__str__mszRemoteError.__str__N)r4r6r7rNrrrrrLlsrLcCs2g}t|�D] }t||�}t|�r|�|�q|S)z4
    Return a list of names of methods of `obj`
    )�dirr�callable�append)r&�tempr�funcrrr�all_methodsts
rTcCsdd�t|�D�S)zP
    Return a list of names of methods of `obj` which do not start with '_'
    cSsg|]}|ddkr|�qS)r�_rrrrrr �sz"public_methods.<locals>.<listcomp>)rTr%rrr�public_methodssrVc	@s�eZdZdZdddddddd	d
g	Zdd�Zd
d�Zdd�Zdd�Zdd�Z	dd�Z
dd�Zdd�Zeee
d�Z
dd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&e_d'd(�Zd)d*�Zd+d,�Zd-d.�Zd/S)0�ServerzM
    Server class which runs in a process controlled by a manager object
    �shutdown�create�accept_connection�get_methods�
debug_info�number_of_objects�dummy�incref�decrefcCsxt|t�std�|t|����||_t�|�|_t	|\}}||dd�|_
|j
j|_ddi|_i|_
i|_t��|_dS)Nz&Authkey {0!r} is type {1!s}, not bytes�)r*�backlog�0�Nr)rH�bytesrJrKr�registryr�AuthenticationString�authkey�listener_client�listenerr*�	id_to_obj�id_to_refcount�id_to_local_proxy_obj�	threading�Lock�mutex)r,rfr*rh�
serializer�Listener�Clientrrrr-�s 
��

zServer.__init__c	Cs�t��|_|t��_zVtj|jd�}d|_|��z|j��sL|j�d�q4Wnttfk
rfYnXW5tjtjkr�t	�
d�tjt_tjt_t�
d�XdS)z(
        Run the server forever
        zresetting stdout, stderrr)�targetTr	N)rn�Event�
stop_eventr�current_process�_manager_server�sys�stdout�
__stdout__r�debug�
__stderr__�stderr�exit�Thread�accepter�daemon�start�is_set�wait�KeyboardInterrupt�
SystemExit)r,r�rrr�
serve_forever�s 




zServer.serve_forevercCsNz|j��}Wntk
r&YqYnXtj|j|fd�}d|_|��qdS)N�rtr@T)rj�accept�OSErrorrnr��handle_requestr�r�)r,r>�trrrr��s
zServer.acceptercCsLd}}}zTt�||j�t�||j�|��}|\}}}}||jksTtd|��t||�}Wntk
r~dt	�f}	Yn>Xz||f|�|�}Wntk
r�dt	�f}	Yn
Xd|f}	z|�
|	�Wnttk
�r>}
zTz|�
dt	�f�Wntk
�rYnXt�d|	�t�d|�t�d|
�W5d}
~
XYnX|�
�dS)z)
        Handle a new connection
        Nz%r unrecognizedrFr:zFailure to send message: %rz ... request was %r� ... exception was %r)r
�deliver_challengerh�answer_challenger<�public�AssertionErrorr�	Exceptionrr;r�info�close)r,r>�funcnamerC�request�ignorer@rArS�msg�errrr��s4zServer.handle_requestc
Cs�t�dt��j�|j}|j}|j}|j�	��s�zBd}}|�}|\}}}	}
z||\}}}Wn^t
k
r�}
z@z|j|\}}}Wn&t
k
r�}z|
�W5d}~XYnXW5d}
~
XYnX||kr�td|t
|�|f��t||�}z||	|
�}Wn,tk
�r"}zd|f}W5d}~XYnPX|�o4|�|d�}|�rj|�|||�\}}t||j|�}d||ff}nd|f}Wn�tk
�r�|dk�r�dt�f}nNz,|j|}|||||f|	�|
�}d|f}Wn tk
�r�dt�f}YnXYnPtk
�rt�dt��j�t�d	�Yn tk
�r<dt�f}YnXzDz||�Wn2tk
�r~}z|d
t�f�W5d}~XYnXWq$tk
�r�}z@t�dt��j�t�d|�t�d
|�|��t�d�W5d}~XYq$Xq$dS)zQ
        Handle requests from the proxies in a particular process/thread
        z$starting server thread to service %rNz+method %r of %r object is not in exposed=%rrE�#PROXYr:rFz$got EOF -- exiting thread serving %rrrGzexception in thread serving %rz ... message was %rr�r	)rr|rn�current_threadrr<r;rkrvr��KeyErrorrm�AttributeErrorrrr��getrYrr*r�fallback_mapping�EOFErrorryrr�r�)r,�connr<r;rkr?r&r��identr@rA�exposed�	gettypeid�ke�	second_ke�function�resr�r�r)�rident�rexposed�token�
fallback_funcrCrrr�serve_client�s���(��


����$�zServer.serve_clientcCs|Srr�r,r�r�r&rrr�fallback_getvalue5szServer.fallback_getvaluecCst|�Sr�rIr�rrr�fallback_str8szServer.fallback_strcCst|�Sr)�reprr�rrr�
fallback_repr;szServer.fallback_repr)rNr5�	#GETVALUEcCsdSrr�r,r>rrrr^DszServer.dummyc
Cs�|j�tg}t|j���}|��|D]<}|dkr&|�d||j|t|j|d�dd�f�q&d�|�W5QR�SQRXdS)zO
        Return some info --- useful to spot problems with refcounting
        rcz  %s:       refcount=%s
    %srN�K�
)	rpr$rlr"�sortrQrIrk�join)r,r>rCr"r�rrrr\Gs
��zServer.debug_infocCs
t|j�S)z*
        Number of shared objects
        )�lenrlr�rrrr]WszServer.number_of_objectscCsLz:zt�d�|�d�Wnddl}|��YnXW5|j��XdS)z'
        Shutdown this process
        z!manager received shutdown message�r:NrN)rv�setrr|r;�	traceback�	print_exc)r,r>r�rrrrX^s
zServer.shutdownc	Os�t|�dkr|^}}}}n�|s(td��n�d|krDtdt|�d��|�d�}t|�dkr~|^}}}ddl}|jd	tdd
�nFd|kr�tdt|�d��|�d�}|^}}ddl}|jdtdd
�t|�}|j��|j|\}}}}	|dk�r|�st|�dk�rt	d
��|d}
n
|||�}
|dk�r2t
|
�}|dk	�rlt|t��s\td�
|t|����t|�t|�}dt|
�}t�d||�|
t|�|f|j|<||jk�r�d|j|<W5QRX|�||�|t|�fS)z>
        Create a new shared object and return its id
        �z8descriptor 'create' of 'Server' object needs an argumentr)�7create expected at least 2 positional arguments, got %dr	�rNz2Passing 'typeid' as keyword argument is deprecated)�
stacklevelr>z-Passing 'c' as keyword argument is deprecatedz4Without callable, must have one non-keyword argumentz,Method_to_typeid {0!r}: type {1!s}, not dictz%xz&%r callable returned object with id %r)r�rJ�pop�warnings�warn�DeprecationWarning�tuplerprfrMrVrH�dictrKrr$r+rr|r�rkrlr_)r@rAr,r>r)r�rPr��method_to_typeid�	proxytyper&r�rrrrYksp

�

�
�
��

�



��z
Server.createz$($self, c, typeid, /, *args, **kwds)cCst|j|jd�S)zL
        Return the methods of the shared object indicated by token
        r	)r�rkr+)r,r>r�rrrr[�szServer.get_methodscCs"|t��_|�d�|�|�dS)z=
        Spawn a new thread to serve this connection
        r�N)rnr�rr;r�)r,r>rrrrrZ�s

zServer.accept_connectioncCs�|j��z|j|d7<Wnhtk
r�}zJ||jkrrd|j|<|j||j|<|j|\}}}t�d|�n|�W5d}~XYnXW5QRXdS)Nr	z&Server re-enabled tracking & INCREF %r)rprlr�rmrkrr|)r,r>r�r�r&r�r�rrrr_�s

�z
Server.increfc	Cs�||jkr$||jkr$t�d|�dS|j�Z|j|dkrXtd�||j||j|���|j|d8<|j|dkr�|j|=W5QRX||jkr�d|j|<t�d|�|j�|j|=W5QRXdS)NzServer DECREF skipping %rrz+Id {0!s} ({1!r}) has refcount {2:n}, not 1+r	)NrNzdisposing of obj with id %r)rlrmrr|rpr�rKrk)r,r>r�rrrr`�s,
���

z
Server.decrefN)r4r6r7r8r�r-r�r�r�r�r�r�r�r�r^r\r]rXrY�__text_signature__r[rZr_r`rrrrrW�s<�
"Q�
=rWc@seZdZdgZdZdZdZdS)�State�valuerr	r�N)r4r6r7r9�INITIAL�STARTED�SHUTDOWNrrrrr��sr�)�pickle�	xmlrpclibc@s�eZdZdZiZeZd"dd�Zdd�Zdd	�Z	d#dd�Z
ed$d
d��Zdd�Z
d%dd�Zdd�Zdd�Zdd�Zdd�Zedd��Zedd��Zed&d d!��ZdS)'rz!
    Base class for managers
    Nr�cCs\|dkrt��j}||_t�|�|_t�|_tj|j_	||_
t|\|_|_
|pTt�|_dSr)rrwrh�_addressrg�_authkeyr��_stater�r��_serializerri�	_Listener�_Clientr�_ctx)r,r*rhrq�ctxrrrr-s

zBaseManager.__init__cCsf|jjtjkrP|jjtjkr&td��n*|jjtjkr>td��ntd�|jj���t|j	|j
|j|j�S)zX
        Return server object with serve_forever() method and address attribute
        �Already started server�Manager has shut down�Unknown state {!r})
r�r�r�r�r�r
r�rKrW�	_registryr�r�r�r.rrr�
get_servers

�
�zBaseManager.get_servercCs8t|j\}}||j|jd�}t|dd�tj|j_dS)z>
        Connect manager object to the server process
        �rhNr^)	rir�r�r�rDr�r�r�r�)r,rrrsr�rrr�connectszBaseManager.connectrc	Cs4|jjtjkrP|jjtjkr&td��n*|jjtjkr>td��ntd�|jj���|dk	rht|�sht	d��t
jdd�\}}|jj
t|�j|j|j|j|j|||fd�|_d	�d
d�|jjD��}t|�jd||j_|j��|��|��|_|��tj|j_tj|t|�j|j|j|j|j|jfd
d�|_ dS)z@
        Spawn a server process for this manager object
        r�r�r�Nzinitializer must be a callableF)�duplexr��:css|]}t|�VqdSrr�)r�irrr�	<genexpr>Asz$BaseManager.start.<locals>.<genexpr>�-r�r@�exitpriority)!r�r�r�r�r�r
r�rKrPrJr
�Piper��Processr�_run_serverr�r�r�r��_processr��	_identityr4rr�r�r<r�Finalize�_finalize_managerr�rX)r,�initializer�initargs�reader�writerr�rrrr�(sH

���


��zBaseManager.startc	Cs^t�tjtj�|dk	r ||�|�||||�}|�|j�|��t�d|j�|�	�dS)z@
        Create a server, report its address and run it
        Nzmanager serving at %r)
�signal�SIGINT�SIG_IGN�_Serverr;r*r�rr�r�)	�clsrfr*rhrqr�r�r��serverrrrr�SszBaseManager._run_servercOsd|jjtjkstd��|j|j|jd�}zt	|dd|f||�\}}W5|��Xt
||j|�|fS)zP
        Create a new shared object; return the token and exposed tuple
        zserver not yet startedr�NrY)r�r�r�r�r�r�r�r�r�rDr)r,r)r@rAr�r+r�rrr�_createjs
zBaseManager._createcCs*|jdk	r&|j�|�|j��s&d|_dS)zC
        Join the manager process (if it has been spawned)
        N)r�r��is_alive�r,�timeoutrrrr�vs

zBaseManager.joincCs2|j|j|jd�}zt|dd�W�S|��XdS)zS
        Return some info about the servers shared objects and connections
        r�Nr\�r�r�r�r�rD�r,r�rrr�_debug_infoszBaseManager._debug_infocCs2|j|j|jd�}zt|dd�W�S|��XdS)z5
        Return the number of shared objects
        r�Nr]r�rrrr�_number_of_objects�szBaseManager._number_of_objectscCsj|jjtjkr|��|jjtjkrf|jjtjkr<td��n*|jjtjkrTtd��ntd�|jj���|S)NzUnable to start serverr�r�)	r�r�r�r�r�r�r
r�rKr.rrr�	__enter__�s

�zBaseManager.__enter__cCs|��dSr)rX�r,�exc_type�exc_val�exc_tbrrr�__exit__�szBaseManager.__exit__cCs�|��r�t�d�z,|||d�}zt|dd�W5|��XWntk
rRYnX|jdd�|��r�t�d�t|d�r�t�d	�|��|jd
d�|��r�t�d�t	j
|_ztj
|=Wntk
r�YnXdS)zQ
        Shutdown the manager process; will be registered as a finalizer
        z#sending shutdown message to managerr�NrXg�?)r�zmanager still alive�	terminatez'trying to `terminate()` manager processg�������?z#manager still alive after terminate)r�rr�r�rDr�r��hasattrr	r�r�r�r�_address_to_localr�)rr*rhr1r�r�rrrr��s.




zBaseManager._finalize_managercCs|jSr)r�r.rrrr*�szBaseManager.addressTc
s�d|jkr|j��|_�dkr"t�|p0t�dd�}|p@t�dd�}|r�t|���D]8\}}t|�tksrt	d|��t|�tksRt	d|��qR|||�f|j�<|r‡�fdd�}	�|	_
t|�|	�dS)z9
        Register a typeid with the manager type
        r�N�	_exposed_�_method_to_typeid_z%r is not a stringcs`t�d��|j�f|�|�\}}�||j||j|d�}|j|j|jd�}t|dd|jf�|S)Nz)requesting creation of a shared %r object��managerrhr�r�r`)	rr|r�r�r�r�r*rDr+)r,r@rAr��exp�proxyr��r�r)rrrR�s�z"BaseManager.register.<locals>.temp)�__dict__r��copy�	AutoProxyrr$r!rrIr�r4�setattr)
r�r)rPr�r�r��
create_method�keyr�rRrrr�register�s*

��

zBaseManager.register)NNr�N)Nr)Nr)N)NNNNT)r4r6r7r8r�rWr�r-r�r�r��classmethodr�r�r�rrrr�staticmethodr��propertyr*rrrrrr�s8�
	
+�
	




�c@seZdZdd�Zdd�ZdS)�ProcessLocalSetcCst�|dd��dS)NcSs|��Sr)�clearr%rrr�<lambda>��z*ProcessLocalSet.__init__.<locals>.<lambda>)r�register_after_forkr.rrrr-�szProcessLocalSet.__init__cCst|�dfSrd)rr.rrr�
__reduce__�szProcessLocalSet.__reduce__N)r4r6r7r-r"rrrrr�src@s�eZdZdZiZe��Zddd�Zdd�Z	d	ifd
d�Z
dd
�Zdd�Ze
dd��Zdd�Zdd�Zdd�Zdd�Zdd�ZdS)rz.
    A base for proxies of shared objects
    NTFc		Cs�tj�8tj�|jd�}|dkr:t��t�f}|tj|j<W5QRX|d|_|d|_	||_
|j
j|_||_
||_t|d|_||_|dk	r�t�|�|_n"|j
dk	r�|j
j|_nt��j|_|r�|��t�|tj�dS)Nrr	)r�_mutexrr�r*r�ForkAwareLocalr�_tls�_idset�_tokenr+�_id�_managerr�rir��_owned_by_managerrrgr�rwrh�_increfr!�_after_fork)	r,r�rqrrhr�r_�
manager_owned�	tls_idsetrrrr-s*



zBaseProxy.__init__cCsdt�d�t��j}t��jdkr4|dt��j7}|j|jj	|j
d�}t|dd|f�||j_
dS)Nzmaking connection to manager�
MainThread�|r�rZ)rr|rrwrrnr�r�r'r*r�rDr%r
)r,rr�rrr�_connect-s

zBaseProxy._connectrcCs�z|jj}Wn6tk
rBt�dt��j�|��|jj}YnX|�	|j
|||f�|��\}}|dkrp|S|dkr�|\}}|jj
|jd}	|jj|_|	||j|j|j|d�}
|j|j|jd�}t|dd|jf�|
St||��dS)	zV
        Try to call a method of the referent and return a copy of the result
        z#thread %r does not own a connectionr:r����rr�Nr`)r%r
r�rr|rnr�rr1r;r(r<r)r�r)r'r*r�r�r�rDr+r=)r,r?r@rAr�rBrCr�r�r�rrrr�_callmethod6s6�
�zBaseProxy._callmethodcCs
|�d�S)z9
        Get a copy of the value of the referent
        r��r3r.rrr�	_getvalueTszBaseProxy._getvaluec	Cs�|jrt�d|jj�dS|j|jj|jd�}t|dd|j	f�t�d|jj�|j
�|j	�|joj|jj
}tj|tj|j|j||j|j
|jfdd�|_dS)Nz%owned_by_manager skipped INCREF of %rr�r_z	INCREF %r�
r�)r*rr|r'r+r�r*r�rDr(r&�addr)r�r�r�_decrefr%�_close)r,r�r1rrrr+Zs$
��zBaseProxy._increfc
Cs�|�|j�|dks |jtjkr�z2t�d|j�||j|d�}t|dd|jf�Wq�t	k
r�}zt�d|�W5d}~XYq�Xnt�d|j�|s�t
|d�r�t�dt��j
�|j��|`dS)Nz	DECREF %rr�r`z... decref failed %sz%DECREF %r -- manager already shutdownr
z-thread %r has no more proxies so closing conn)�discardr+r�r�r�rr|r*rDr�r
rnr�rr
r�)r�rhr1�tls�idsetr�r�r�rrrr8ns �
zBaseProxy._decrefc
CsHd|_z|��Wn0tk
rB}zt�d|�W5d}~XYnXdS)Nzincref failed: %s)r)r+r�rr�)r,r�rrrr,�s
zBaseProxy._after_forkcCs^i}t�dk	r|j|d<t|dd�rB|j|d<tt|j|j|ffStt|�|j|j|ffSdS)Nrh�_isautoFr�)	rr�rr�RebuildProxyrr'r�r�r,rArrrr"�s


��zBaseProxy.__reduce__cCs|��Sr)r5)r,�memorrr�__deepcopy__�szBaseProxy.__deepcopy__cCsdt|�j|jjt|�fS)Nz<%s object, typeid %r at %#x>)rr4r'r)r+r.rrrr5�s�zBaseProxy.__repr__cCs:z|�d�WStk
r4t|�dd�dYSXdS)zV
        Return representation of the referent (or a fall-back if that fails)
        r5Nr2z; '__str__()' failed>)r3r�r�r.rrrrN�szBaseProxy.__str__)NNNTF)r4r6r7r8rr�ForkAwareThreadLockr#r-r1r3r5r+rr8r,r"rAr5rNrrrrr�s(�
)	

cCs�tt��dd�}|rT|j|jkrTt�d|�d|d<|j|jkrT|j|j|j|j<|�	dd�optt��dd�}|||fd|i|��S)	z5
    Function used for unpickling proxy objects.
    rxNz*Rebuild a proxy owned by manager, token=%rTr-r_�_inheritingF)
rrrwr*rr|r+rmrkr�)rSr�rqrAr�r_rrrr>�s
�
�r>cCspt|�}z|||fWStk
r*YnXi}|D]}td||f|�q4t|tf|�}||_||||f<|S)zB
    Return a proxy type whose methods are given by `exposed`
    zOdef %s(self, /, *args, **kwds):
        return self._callmethod(%r, args, kwds))r�r��execrrr)rr��_cache�dic�meth�	ProxyTyperrr�
MakeProxyType�s ��rIc
Cs�t|d}|dkrB||j|d�}zt|dd|f�}W5|��X|dkrX|dk	rX|j}|dkrjt��j}td|j	|�}||||||d�}	d|	_
|	S)z*
    Return an auto-proxy for `token`
    r	Nr�r[z
AutoProxy[%s])rrhr_T)rir*r�rDr�rrwrhrIr)r=)
r�rqrrhr�r_r�r�rHrrrrr�s 


�rc@seZdZdd�Zdd�ZdS)�	NamespacecKs|j�|�dSr)r�updater?rrrr-�szNamespace.__init__cCsZt|j���}g}|D]$\}}|�d�s|�d||f�q|��d|jjd�|�fS)NrUz%s=%rz%s(%s)z, )	r$rr!�
startswithrQr�r3r4r�)r,r!rRrr�rrrr5�s
zNamespace.__repr__N)r4r6r7r-r5rrrrrJ�srJc@s8eZdZddd�Zdd�Zdd�Zdd	�Zeee�Zd
S)�ValueTcCs||_||_dSr)�	_typecode�_value)r,rr��lockrrrr-szValue.__init__cCs|jSr�rOr.rrrr�sz	Value.getcCs
||_dSrrQ�r,r�rrrr�
sz	Value.setcCsdt|�j|j|jfS)Nz
%s(%r, %r))rr4rNrOr.rrrr5szValue.__repr__N)T)	r4r6r7r-r�r�r5rr�rrrrrMs

rMcCst�||�Sr)r)r�sequencerPrrr�ArraysrTc@s8eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�
IteratorProxy)�__next__r;�throwr�cCs|Srrr.rrr�__iter__szIteratorProxy.__iter__cGs|�d|�S)NrVr4�r,r@rrrrVszIteratorProxy.__next__cGs|�d|�S)Nr;r4rYrrrr;szIteratorProxy.sendcGs|�d|�S)NrWr4rYrrrrWszIteratorProxy.throwcGs|�d|�S)Nr�r4rYrrrr�!szIteratorProxy.closeN)	r4r6r7rrXrVr;rWr�rrrrrUsrUc@s2eZdZdZddd�Zdd�Zdd	�Zd
d�ZdS)
�
AcquirerProxy)�acquire�releaseTNcCs"|dkr|fn||f}|�d|�S�Nr[r4)r,�blockingr�r@rrrr['szAcquirerProxy.acquirecCs
|�d�S�Nr\r4r.rrrr\*szAcquirerProxy.releasecCs
|�d�Sr]r4r.rrrr,szAcquirerProxy.__enter__cCs
|�d�Sr_r4rrrrr.szAcquirerProxy.__exit__)TN)r4r6r7rr[r\rrrrrrrZ%s

rZc@s6eZdZdZddd�Zd
dd�Zdd	�Zdd
d�ZdS)�ConditionProxy)r[r\r��notify�
notify_allNcCs|�d|f�S�Nr�r4r�rrrr�4szConditionProxy.waitr	cCs|�d|f�S)Nrar4)r,�nrrrra6szConditionProxy.notifycCs
|�d�S)Nrbr4r.rrrrb8szConditionProxy.notify_allcCsd|�}|r|S|dk	r$t��|}nd}d}|s`|dk	rN|t��}|dkrNq`|�|�|�}q,|S)Nr)�time�	monotonicr�)r,�	predicater�rC�endtime�waittimerrr�wait_for:s
zConditionProxy.wait_for)N)r	)N)r4r6r7rr�rarbrjrrrrr`2s


r`c@s2eZdZdZdd�Zdd�Zdd�Zdd	d
�ZdS)�
EventProxy)r�r�rr�cCs
|�d�S)Nr�r4r.rrrr�OszEventProxy.is_setcCs
|�d�S�Nr�r4r.rrrr�QszEventProxy.setcCs
|�d�S)Nrr4r.rrrrSszEventProxy.clearNcCs|�d|f�Srcr4r�rrrr�UszEventProxy.wait)N)r4r6r7rr�r�rr�rrrrrkMs
rkc@sNeZdZdZddd�Zdd�Zdd�Zed	d
��Zedd��Z	ed
d��Z
dS)�BarrierProxy)�__getattribute__r��abort�resetNcCs|�d|f�Srcr4r�rrrr�[szBarrierProxy.waitcCs
|�d�S)Nror4r.rrrro]szBarrierProxy.abortcCs
|�d�S)Nrpr4r.rrrrp_szBarrierProxy.resetcCs|�dd�S)Nrn)�partiesr4r.rrrrqaszBarrierProxy.partiescCs|�dd�S)Nrn)�	n_waitingr4r.rrrrrdszBarrierProxy.n_waitingcCs|�dd�S)Nrn)�brokenr4r.rrrrsgszBarrierProxy.broken)N)r4r6r7rr�rorprrqrrrsrrrrrmYs


rmc@s(eZdZdZdd�Zdd�Zdd�ZdS)	�NamespaceProxy)rn�__setattr__�__delattr__cCs0|ddkrt�||�St�|d�}|d|f�S)NrrUr3rn)�objectrn�r,r�
callmethodrrr�__getattr__nszNamespaceProxy.__getattr__cCs4|ddkrt�|||�St�|d�}|d||f�S)NrrUr3ru)rwrurn)r,rr�ryrrrrusszNamespaceProxy.__setattr__cCs0|ddkrt�||�St�|d�}|d|f�S)NrrUr3rv)rwrvrnrxrrrrvxszNamespaceProxy.__delattr__N)r4r6r7rrzrurvrrrrrtlsrtc@s*eZdZdZdd�Zdd�Zeee�ZdS)�
ValueProxy)r�r�cCs
|�d�S)Nr�r4r.rrrr��szValueProxy.getcCs|�d|f�Srlr4rRrrrr��szValueProxy.setN)r4r6r7rr�r�rr�rrrrr{sr{�
BaseListProxy)�__add__�__contains__�__delitem__�__getitem__�__len__�__mul__�__reversed__�__rmul__�__setitem__rQ�count�extend�index�insertr��remove�reverser��__imul__c@seZdZdd�Zdd�ZdS)�	ListProxycCs|�d|f�|S)Nr�r4rRrrr�__iadd__�szListProxy.__iadd__cCs|�d|f�|S)Nr�r4rRrrrr��szListProxy.__imul__N)r4r6r7r�r�rrrrr��sr��	DictProxy)r~rr�rXr�r�rrr�r!r"r��popitem�
setdefaultrKr#rX�Iterator�
ArrayProxy)r�r�r��	PoolProxy)�apply�apply_asyncr��imap�imap_unorderedr��map�	map_async�starmap�
starmap_asyncr	�AsyncResult)r�r�r�r�r�c@seZdZdd�Zdd�ZdS)r�cCs|Srrr.rrrr�szPoolProxy.__enter__cCs|��dSr)r	rrrrr�szPoolProxy.__exit__N)r4r6r7rrrrrrr��sc@seZdZdZdS)ra(
    Subclass of `BaseManager` which supports a number of shared object types.

    The types registered are those intended for the synchronization
    of threads, plus `dict`, `list` and `Namespace`.

    The `multiprocessing.Manager()` function creates started instances of
    this class.
    N)r4r6r7r8rrrrr�s�Queue�
JoinableQueueruro�RLock�	Semaphore�BoundedSemaphore�	Condition�Barrier�Poolr$r�)r�r)rc@sLeZdZdZgfdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)�_SharedMemoryTrackerz+Manages one or more shared memory segments.cCs||_||_dSr��shared_memory_context_name�
segment_names)r,rr�rrrr-�sz_SharedMemoryTracker.__init__cCs(t�d|�dt����|j�|�dS)z6Adds the supplied shared memory block name to tracker.zRegister segment � in pid N)rr|rr�rQ�r,�segment_namerrr�register_segment�sz%_SharedMemoryTracker.register_segmentcCsBt�d|�dt����|j�|�t�|�}|��|��dS)z�Calls unlink() on the shared memory block with the supplied name
            and removes it from the list of blocks being tracked.zDestroy segment r�N)	rr|rr�r�r�SharedMemoryr��unlink)r,r��segmentrrr�destroy_segment�s

z$_SharedMemoryTracker.destroy_segmentcCs"|jdd�D]}|�|�qdS)z<Calls destroy_segment() on all tracked shared memory blocks.N)r�r�r�rrrr��sz_SharedMemoryTracker.unlinkcCs(t�d|jj�dt����|��dS)NzCall z.__del__ in )rr|r3r4rr�r.rrr�__del__�sz_SharedMemoryTracker.__del__cCs|j|jfSrr�r.rrrr/�sz!_SharedMemoryTracker.__getstate__cCs|j|�dSr)r-r0rrrr2sz!_SharedMemoryTracker.__setstate__N)r4r6r7r8r-r�r�r�r�r/r2rrrrr��s	r�c@sReZdZejdddgZdd�Zdd�Zde_d	d
�Zdd�Z	d
d�Z
dd�ZdS)�SharedMemoryServer�
track_segment�release_segment�
list_segmentscOsZtj|f|�|�|j}t|t�r,t�|�}td|�dt����|_	t
�dt����dS)NZshm_rUz"SharedMemoryServer started by pid )rWr-r*rHre�os�fsdecoder�r�shared_memory_contextrr|)r,r@�kwargsr*rrrr-
s

�zSharedMemoryServer.__init__cOstt|�dkr|d}n4d|kr(|d}n"|s6td��ntdt|�d��ttj|dd�rhtj|d	<tj||�S)
z�Create a new distributed-shared object (not backed by a shared
            memory block) and return its id to be used in a Proxy Object.r�r�r)zDdescriptor 'create' of 'SharedMemoryServer' object needs an argumentr�r	r2Z_shared_memory_proxyr�)r�rJr
r,rfr�rWrY)r@r��typeodr)rrrrYs



�
zSharedMemoryServer.createz&($self, c, typeid, /, *args, **kwargs)cCs|j��t�||�S)zACall unlink() on all tracked shared memory, terminate the Server.)r�r�rWrXr�rrrrX)s
zSharedMemoryServer.shutdowncCs|j�|�dS)z?Adds the supplied shared memory block name to Server's tracker.N)r�r��r,r>r�rrrr�.sz SharedMemoryServer.track_segmentcCs|j�|�dS)z�Calls unlink() on the shared memory block with the supplied name
            and removes it from the tracker instance inside the Server.N)r�r�r�rrrr�2sz"SharedMemoryServer.release_segmentcCs|jjS)zbReturns a list of names of shared memory blocks that the Server
            is currently tracking.)r�r�r�rrrr�7sz SharedMemoryServer.list_segmentsN)r4r6r7rWr�r-rYr�rXr�r�r�rrrrr�s�
r�c@s<eZdZdZeZdd�Zdd�Zdd�Zdd	�Z	d
d�Z
dS)
ra�Like SyncManager but uses SharedMemoryServer instead of Server.

        It provides methods for creating and returning SharedMemory instances
        and for creating a list-like object (ShareableList) backed by shared
        memory.  It also provides methods that create and return Proxy Objects
        that support synchronization across processes (i.e. multi-process-safe
        locks and semaphores).
        cOsNtjdkrddlm}|��tj|f|�|�t�|j	j
�dt����dS)N�posixr	)�resource_trackerz created by pid )r�r�r��ensure_runningrr-rr|r3r4r)r,r@r�r�rrrr-Is

zSharedMemoryManager.__init__cCst�|jj�dt����dS)Nz.__del__ by pid )rr|r3r4rr.rrrr�UszSharedMemoryManager.__del__cCsh|jjtjkrP|jjtjkr&td��n*|jjtjkr>td��ntd�|jj���|�|j	|j
|j|j�S)z@Better than monkeypatching for now; merge into Server ultimatelyz"Already started SharedMemoryServerz!SharedMemoryManager has shut downr�)
r�r�r�r�r�r
r�rKr�r�r�r�r�r.rrrr�Ys

��zSharedMemoryManager.get_servercCsx|j|j|jd��\}tjdd|d�}zt|dd|jf�Wn.tk
rh}z|��|�W5d}~XYnXW5QRX|S)zoReturns a new SharedMemory instance with the specified size in
            bytes, to be tracked by the manager.r�NT)rY�sizer�)	r�r�r�rr�rDr�
BaseExceptionr�)r,r�r��smsr�rrrr�fs z SharedMemoryManager.SharedMemorycCsv|j|j|jd��Z}t�|�}zt|dd|jjf�Wn0tk
rf}z|j�	�|�W5d}~XYnXW5QRX|S)z�Returns a new ShareableList instance populated with the values
            from the input sequence, to be tracked by the manager.r�Nr�)
r�r�r�r�
ShareableListrD�shmrr�r�)r,rSr��slr�rrrr�rs

 z!SharedMemoryManager.ShareableListN)r4r6r7r8r�r�r-r�r�r�r�rrrrr=s	
)NNNT)T)S�__all__ryrnr�r�queuerer�rr�rr�r
�contextrrr
rrrrr�	HAS_SHMEM�ImportErrorrr�
view_typesr$r'�	view_typerwrrDr=r�rLrTrVrWr�rrrs�XmlListener�	XmlClientrirr�rrr>rIrrJrMrTrUrZr`rkrmrtr{r|r�r�r
r��
BasePoolProxyr�rr�ruror�r�r�r�r�r�r�r�r�rrrrr�<module>s��


c

�	w
4�


	
	
�

�

�%8X�a�@sdddgZddlZddlZddlZddlZddlZddlZddlZddlZddlm	Z	ddl
mZddl
mZm
Z
ddlmZd	Zd
ZdZdZe��Zd
d�Zdd�ZGdd�de�ZGdd�d�Zdd�ZGdd�de�Zd+dd�Zdd�ZGdd �d e�Z Gd!d�de!�Z"Gd"d#�d#e!�Z#e#Z$Gd$d%�d%e#�Z%Gd&d'�d'e!�Z&Gd(d)�d)e&�Z'Gd*d�de"�Z(dS),�Pool�
ThreadPool�N)�Empty�)�util)�get_context�TimeoutError)�wait�INIT�RUN�CLOSE�	TERMINATEcCstt|��S�N)�list�map��args�r�*/usr/lib/python3.8/multiprocessing/pool.py�mapstar/srcCstt�|d|d��S)Nrr)r�	itertools�starmaprrrr�starmapstar2src@seZdZdd�Zdd�ZdS)�RemoteTracebackcCs
||_dSr��tb)�selfrrrr�__init__:szRemoteTraceback.__init__cCs|jSrr�rrrr�__str__<szRemoteTraceback.__str__N)�__name__�
__module__�__qualname__rrrrrrr9src@seZdZdd�Zdd�ZdS)�ExceptionWithTracebackcCs0t�t|�||�}d�|�}||_d||_dS)N�z

"""
%s""")�	traceback�format_exception�type�join�excr)rr)rrrrr@s
zExceptionWithTraceback.__init__cCst|j|jffSr)�rebuild_excr)rrrrr�
__reduce__Esz!ExceptionWithTraceback.__reduce__N)r r!r"rr+rrrrr#?sr#cCst|�|_|Sr)r�	__cause__)r)rrrrr*Hs
r*cs0eZdZdZ�fdd�Zdd�Zdd�Z�ZS)�MaybeEncodingErrorzVWraps possible unpickleable errors, so they can be
    safely sent through the socket.cs.t|�|_t|�|_tt|��|j|j�dSr)�reprr)�value�superr-r)rr)r/��	__class__rrrTs

zMaybeEncodingError.__init__cCsd|j|jfS)Nz(Error sending result: '%s'. Reason: '%s')r/r)rrrrrYs�zMaybeEncodingError.__str__cCsd|jj|fS)Nz<%s: %s>)r2r rrrr�__repr__]szMaybeEncodingError.__repr__)r r!r"�__doc__rrr3�
__classcell__rrr1rr-Psr-rFc
Cs�|dk	r(t|t�r|dks(td�|���|j}|j}t|d�rR|j��|j	��|dk	rb||�d}|dks~|�r�||k�r�z
|�}	Wn(t
tfk
r�t�
d�Y�q�YnX|	dkr�t�
d��q�|	\}
}}}
}zd||
|�f}WnHtk
�r0}z(|�r|tk	�rt||j�}d|f}W5d}~XYnXz||
||f�WnRtk
�r�}z2t||d�}t�
d	|�||
|d|ff�W5d}~XYnXd}	}
}}}
}|d7}qft�
d
|�dS)NrzMaxtasks {!r} is not valid�_writerrz)worker got EOFError or OSError -- exitingzworker got sentinel -- exitingTFz0Possible encoding error while sending result: %szworker exiting after %d tasks)�
isinstance�int�AssertionError�format�put�get�hasattrr6�close�_reader�EOFError�OSErrorr�debug�	Exception�_helper_reraises_exceptionr#�
__traceback__r-)�inqueue�outqueue�initializer�initargs�maxtasks�wrap_exceptionr;r<�	completed�task�job�i�funcr�kwds�result�e�wrappedrrr�workerasN�





�$
rUcCs|�dS)z@Pickle-able helper function for use by _guarded_task_generation.Nr)�exrrrrD�srDcs2eZdZdZdd��fdd�
Z�fdd�Z�ZS)�
_PoolCachez�
    Class that implements a cache for the Pool class that will notify
    the pool management threads every time the cache is emptied. The
    notification is done by the use of a queue that is provided when
    instantiating the cache.
    N��notifiercs||_t�j||�dSr)rYr0r)rrYrrQr1rrr�sz_PoolCache.__init__cs t��|�|s|j�d�dSr)r0�__delitem__rYr;)r�itemr1rrrZ�sz_PoolCache.__delitem__)r r!r"r4rrZr5rrr1rrW�srWc@s�eZdZdZdZedd��ZdLdd�Zej	e
fd	d
�Zdd�Zd
d�Z
edd��Zedd��Zdd�Zedd��Zedd��Zdd�Zdd�Zdifdd�ZdMdd �ZdNd!d"�ZdOd#d$�Zd%d&�ZdPd(d)�ZdQd*d+�Zdiddfd,d-�ZdRd.d/�ZdSd0d1�ZedTd2d3��Ze d4d5��Z!ed6d7��Z"ed8d9��Z#ed:d;��Z$d<d=�Z%d>d?�Z&d@dA�Z'dBdC�Z(edDdE��Z)e dFdG��Z*dHdI�Z+dJdK�Z,dS)UrzS
    Class which supports an async version of applying functions to arguments.
    TcOs|j||�Sr��Process)�ctxrrQrrrr]�szPool.ProcessNrcCsg|_t|_|pt�|_|��t��|_|j��|_	t
|j	d�|_||_||_
||_|dkrjt��phd}|dkrztd��|dk	r�t|�s�td��||_z|��WnHtk
r�|jD]}|jdkr�|��q�|jD]}|��q؂YnX|��}tjtj|j|j|j|j|j|j|j |j!|j
|j|j|j"||j	fd�|_#d|j#_$t%|j#_|j#�&�tjtj'|j|j(|j!|j|jfd�|_)d|j)_$t%|j)_|j)�&�tjtj*|j!|j+|jfd�|_,d|j,_$t%|j,_|j,�&�t-j.||j/|j|j |j!|j|j	|j#|j)|j,|jf	dd�|_0t%|_dS)	NrXrz&Number of processes must be at least 1zinitializer must be a callable��targetrT�)r�exitpriority)1�_poolr
�_stater�_ctx�
_setup_queues�queue�SimpleQueue�
_taskqueue�_change_notifierrW�_cache�_maxtasksperchild�_initializer�	_initargs�os�	cpu_count�
ValueError�callable�	TypeError�
_processes�_repopulate_poolrC�exitcode�	terminater(�_get_sentinels�	threading�Threadr�_handle_workersr]�_inqueue�	_outqueue�_wrap_exception�_worker_handler�daemonr�start�
_handle_tasks�
_quick_put�
_task_handler�_handle_results�
_quick_get�_result_handlerr�Finalize�_terminate_pool�
_terminate)r�	processesrHrI�maxtasksperchild�context�p�	sentinelsrrrr�s�





��
��
�
��z
Pool.__init__cCs>|j|kr:|d|��t|d�t|dd�dk	r:|j�d�dS)Nz&unclosed running multiprocessing pool )�sourcerj)rd�ResourceWarning�getattrrjr;)r�_warnrrrr�__del__s

�zPool.__del__c	Cs0|j}d|j�d|j�d|j�dt|j��d�	S)N�<�.z state=z pool_size=�>)r2r!r"rd�lenrc)r�clsrrrr3sz
Pool.__repr__cCs|jjg}|jjg}||�Sr)r}r?rj)r�task_queue_sentinels�self_notifier_sentinelsrrrrxs

zPool._get_sentinelscCsdd�|D�S)NcSsg|]}t|d�r|j�qS)�sentinel)r=r�)�.0rUrrr�
<listcomp>s
�z.Pool._get_worker_sentinels.<locals>.<listcomp>r��workersrrr�_get_worker_sentinelss�zPool._get_worker_sentinelscCsPd}ttt|���D]6}||}|jdk	rt�d|�|��d}||=q|S)z�Cleanup after any worker processes which have exited due to reaching
        their specified lifetime.  Returns True if any workers were cleaned up.
        FN�cleaning up worker %dT)�reversed�ranger�rvrrBr()�pool�cleanedrOrUrrr�_join_exited_workerss
zPool._join_exited_workerscCs0|�|j|j|j|j|j|j|j|j|j	|j
�
Sr)�_repopulate_pool_staticrer]rtrcr|r}rmrnrlr~rrrrru.s�zPool._repopulate_poolc

Csft|t|��D]P}
||t||||||	fd�}|j�dd�|_d|_|��|�|�t�	d�qdS)z�Bring the number of pool processes up to the specified number,
        for use after reaping workers which have exited.
        r_r]Z
PoolWorkerTzadded workerN)
r�r�rU�name�replacer�r��appendrrB)r^r]r�r�rFrGrHrIr�rKrO�wrrrr�7s��
zPool._repopulate_pool_staticc

Cs*t�|�r&t�||||||||||	�
dS)zEClean up any exited workers and start replacements for them.
        N)rr�r�)
r^r]r�r�rFrGrHrIr�rKrrr�_maintain_poolJs
�zPool._maintain_poolcCs4|j��|_|j��|_|jjj|_|jjj|_	dSr)
rerhr|r}r6�sendr�r?�recvr�rrrrrfVszPool._setup_queuescCs|jtkrtd��dS)NzPool not running)rdrrqrrrr�_check_running\s
zPool._check_runningcCs|�|||���S)zT
        Equivalent of `func(*args, **kwds)`.
        Pool must be running.
        )�apply_asyncr<)rrPrrQrrr�apply`sz
Pool.applycCs|�||t|���S)zx
        Apply `func` to each element in `iterable`, collecting the results
        in a list that is returned.
        )�
_map_asyncrr<�rrP�iterable�	chunksizerrrrgszPool.mapcCs|�||t|���S)z�
        Like `map()` method but the elements of the `iterable` are expected to
        be iterables as well and will be unpacked as arguments. Hence
        `func` and (a, b) becomes func(a, b).
        )r�rr<r�rrrrnszPool.starmapcCs|�||t|||�S)z=
        Asynchronous version of `starmap()` method.
        )r�r�rrPr�r��callback�error_callbackrrr�
starmap_asyncvs�zPool.starmap_asyncc
csjz,d}t|�D]\}}||||fifVqWn8tk
rd}z||dt|fifVW5d}~XYnXdS)z�Provides a generator of tasks for imap and imap_unordered with
        appropriate handling for iterables which throw exceptions during
        iteration.���rN)�	enumeraterCrD)r�
result_jobrPr�rO�xrSrrr�_guarded_task_generation~szPool._guarded_task_generationrcCs�|��|dkr:t|�}|j�|�|j||�|jf�|S|dkrPtd�|���t	�
|||�}t|�}|j�|�|jt|�|jf�dd�|D�SdS)zP
        Equivalent of `map()` -- can be MUCH slower than `Pool.map()`.
        rzChunksize must be 1+, not {0:n}css|]}|D]
}|Vq
qdSrr�r��chunkr[rrr�	<genexpr>�szPool.imap.<locals>.<genexpr>N)r��IMapIteratorrir;r��_job�_set_lengthrqr:r�
_get_tasksr�rrPr�r�rR�task_batchesrrr�imap�s4�������z	Pool.imapcCs�|��|dkr:t|�}|j�|�|j||�|jf�|S|dkrPtd�|���t	�
|||�}t|�}|j�|�|jt|�|jf�dd�|D�SdS)zL
        Like `imap()` method but ordering of results is arbitrary.
        rzChunksize must be 1+, not {0!r}css|]}|D]
}|Vq
qdSrrr�rrrr��sz&Pool.imap_unordered.<locals>.<genexpr>N)r��IMapUnorderedIteratorrir;r�r�r�rqr:rr�rr�rrr�imap_unordered�s0������zPool.imap_unorderedcCs6|��t|||�}|j�|jd|||fgdf�|S)z;
        Asynchronous version of `apply()` method.
        rN)r��ApplyResultrir;r�)rrPrrQr�r�rRrrrr��szPool.apply_asynccCs|�||t|||�S)z9
        Asynchronous version of `map()` method.
        )r�rr�rrr�	map_async�s�zPool.map_asyncc
Cs�|��t|d�st|�}|dkrJtt|�t|j�d�\}}|rJ|d7}t|�dkrZd}t�|||�}t||t|�||d�}	|j	�
|�|	j||�df�|	S)zY
        Helper function to implement map, starmap and their async counterparts.
        �__len__N�rr�r�)
r�r=r�divmodr�rcrr��	MapResultrir;r�r�)
rrPr��mapperr�r�r��extrar�rRrrrr��s,
����zPool._map_asynccCs"t||d�|��s|��qdS)N)�timeout)r	�emptyr<)r��change_notifierr�rrr�_wait_for_updates�szPool._wait_for_updatescCspt��}|jtks |rX|jtkrX|�|||||||	|
||�
|�|�|
�}|�||�q|�d�t	�
d�dS)Nzworker handler exiting)ry�current_threadrdrr
r�r�r�r;rrB)r��cache�	taskqueuer^r]r�r�rFrGrHrIr�rKr�r��thread�current_sentinelsrrrr{�s�
zPool._handle_workersc

Cspt��}t|jd�D]�\}}d}z�|D]�}|jtkrBt�d�q�z||�Wq&tk
r�}
zB|dd�\}	}z||	�	|d|
f�Wnt
k
r�YnXW5d}
~
XYq&Xq&|r�t�d�|r�|dnd}||d�W�qW�
�q
W5d}}}	Xqt�d�z6t�d�|�d�t�d	�|D]}|d��q.Wn tk
�r`t�d
�YnXt�d�dS)Nz'task handler found thread._state != RUN�Fzdoing set_length()rr�ztask handler got sentinelz/task handler sending sentinel to result handlerz(task handler sending sentinel to workersz/task handler got OSError when sending sentinelsztask handler exiting)
ryr��iterr<rdrrrBrC�_set�KeyErrorr;rA)
r�r;rGr�r�r��taskseq�
set_lengthrMrNrS�idxr�rrrr�sB






zPool._handle_tasksc	Cs�t��}z
|�}Wn$ttfk
r6t�d�YdSX|jtkr`|jtksTt	d��t�d�q�|dkrtt�d�q�|\}}}z||�
||�Wntk
r�YnXd}}}q|�rR|jtk�rRz
|�}Wn$ttfk
r�t�d�YdSX|dk�rt�d�q�|\}}}z||�
||�Wntk
�rBYnXd}}}q�t|d��r�t�d�z,t
d�D]}|j���s��q�|��qrWnttfk
�r�YnXt�d	t|�|j�dS)
Nz.result handler got EOFError/OSError -- exitingzThread not in TERMINATEz,result handler found thread._state=TERMINATEzresult handler got sentinelz&result handler ignoring extra sentinelr?z"ensuring that outqueue is not full�
z7result handler exiting: len(cache)=%s, thread._state=%s)ryr�rAr@rrBrdrr
r9r�r�r=r�r?�pollr�)rGr<r�r�rMrNrO�objrrrr�:s^











�zPool._handle_resultsccs0t|�}tt�||��}|s dS||fVqdSr)r��tupler�islice)rP�it�sizer�rrrr�vs
zPool._get_taskscCstd��dS)Nz:pool objects cannot be passed between processes or pickled)�NotImplementedErrorrrrrr+s�zPool.__reduce__cCs2t�d�|jtkr.t|_t|j_|j�d�dS)Nzclosing pool)rrBrdrrrrjr;rrrrr>�s


z
Pool.closecCst�d�t|_|��dS)Nzterminating pool)rrBr
rdr�rrrrrw�s
zPool.terminatecCsjt�d�|jtkrtd��n|jttfkr4td��|j��|j	��|j
��|jD]}|��qXdS)Nzjoining poolzPool is still runningzIn unknown state)rrBrdrrqrr
rr(r�r�rc)rr�rrrr(�s






z	Pool.joincCs@t�d�|j��|��r<|j��r<|j��t�	d�qdS)Nz7removing tasks from inqueue until task handler finishedr)
rrB�_rlock�acquire�is_aliver?r�r��time�sleep)rF�task_handlerr�rrr�_help_stuff_finish�s



zPool._help_stuff_finishc
CsXt�d�t|_|�d�t|_t�d�|�||t|��|��sXt|	�dkrXtd��t|_|�d�|�d�t�d�t	�
�|k	r�|��|r�t|dd�r�t�d�|D]}
|
j
dkr�|
��q�t�d�t	�
�|k	r�|��t�d	�t	�
�|k	�r|��|�rTt|dd��rTt�d
�|D](}
|
���r*t�d|
j�|
���q*dS)Nzfinalizing poolz&helping task handler/workers to finishrz.Cannot have cache with result_hander not alivezjoining worker handlerrwzterminating workerszjoining task handlerzjoining result handlerzjoining pool workersr�)rrBr
rdr;r�r�r�r9ryr�r(r=rvrw�pid)r�r�rFrGr�r��worker_handlerr��result_handlerr�r�rrrr��sB


�









zPool._terminate_poolcCs|��|Sr)r�rrrr�	__enter__�szPool.__enter__cCs|��dSr)rw)r�exc_type�exc_val�exc_tbrrr�__exit__�sz
Pool.__exit__)NNrNN)N)N)NNN)r)r)NNN)NNN)N)-r r!r"r4r~�staticmethodr]r�warnings�warnrr�r3rxr�r�rur�r�rfr�r�rrr�r�r�r�r�r�r�r��classmethodr{r�r�r�r+r>rwr(r�r�r�r�rrrrr�sx
�
P

	



�


�

�
�


-
;


5c@s@eZdZdd�Zdd�Zdd�Zddd	�Zdd
d�Zdd
�ZdS)r�cCs>||_t��|_tt�|_|j|_||_||_	||j|j<dSr)
rcry�Event�_event�next�job_counterr�rk�	_callback�_error_callback)rr�r�r�rrrr�s

zApplyResult.__init__cCs
|j��Sr)r�is_setrrrr�ready�szApplyResult.readycCs|��std�|���|jS)Nz{0!r} not ready)rrqr:�_successrrrr�
successful�szApplyResult.successfulNcCs|j�|�dSr)rr	�rr�rrrr	�szApplyResult.waitcCs,|�|�|��st�|jr"|jS|j�dSr)r	rrr�_valuer
rrrr<�s
zApplyResult.getcCsZ|\|_|_|jr$|jr$|�|j�|jr<|js<|�|j�|j��|j|j=d|_dSr)	rrrrr�setrkr�rc�rrOr�rrrr�s

zApplyResult._set)N)N)	r r!r"rrr	r	r<r�rrrrr��s	

	r�c@seZdZdd�Zdd�ZdS)r�cCshtj||||d�d|_dg||_||_|dkrNd|_|j��|j|j	=n||t
||�|_dS)Nr�Tr)r�rrr�
_chunksize�_number_leftrrrkr��bool)rr�r��lengthr�r�rrrrs
�
zMapResult.__init__cCs�|jd8_|\}}|rv|jrv||j||j|d|j�<|jdkr�|jrZ|�|j�|j|j=|j��d|_	nL|s�|jr�d|_||_|jdkr�|j
r�|�
|j�|j|j=|j��d|_	dS)NrrF)rrrrrrkr�rrrcr)rrO�success_result�successrRrrrr�$s&







zMapResult._setN)r r!r"rr�rrrrr�s
r�c@s:eZdZdd�Zdd�Zddd�ZeZdd	�Zd
d�ZdS)
r�cCsT||_t�t���|_tt�|_|j|_t	�
�|_d|_d|_
i|_||j|j<dS)Nr)rcry�	Condition�Lock�_condrrr�rk�collections�deque�_items�_index�_length�	_unsorted)rr�rrrrBs

zIMapIterator.__init__cCs|Srrrrrr�__iter__MszIMapIterator.__iter__NcCs�|j��z|j��}Wnztk
r�|j|jkr>d|_td�|j�|�z|j��}Wn2tk
r�|j|jkr�d|_td�t	d�YnXYnXW5QRX|\}}|r�|S|�dSr)
rr�popleft�
IndexErrorrrrc�
StopIterationr	r)rr�r[rr/rrrrPs&zIMapIterator.nextc	Cs�|j��|j|krn|j�|�|jd7_|j|jkrb|j�|j�}|j�|�|jd7_q,|j��n
||j|<|j|jkr�|j|j	=d|_
W5QRXdS�Nr)rrrr�r�pop�notifyrrkr�rcr
rrrr�hs


zIMapIterator._setc	CsB|j�2||_|j|jkr4|j��|j|j=d|_W5QRXdSr)rrrr#rkr�rc)rrrrrr�ys

zIMapIterator._set_length)N)	r r!r"rrr�__next__r�r�rrrrr�@s
r�c@seZdZdd�ZdS)r�c	CsV|j�F|j�|�|jd7_|j��|j|jkrH|j|j=d|_W5QRXdSr!)	rrr�rr#rrkr�rcr
rrrr��s

zIMapUnorderedIterator._setN)r r!r"r�rrrrr��sr�c@sVeZdZdZedd��Zddd�Zdd	�Zd
d�Zedd
��Z	edd��Z
dd�ZdS)rFcOsddlm}|||�S)Nrr\)�dummyr])r^rrQr]rrrr]�szThreadPool.ProcessNrcCst�||||�dSr)rr)rr�rHrIrrrr�szThreadPool.__init__cCs,t��|_t��|_|jj|_|jj|_dSr)rgrhr|r}r;r�r<r�rrrrrf�s


zThreadPool._setup_queuescCs
|jjgSr)rjr?rrrrrx�szThreadPool._get_sentinelscCsgSrrr�rrrr��sz ThreadPool._get_worker_sentinelscCsFz|jdd�qWntjk
r(YnXt|�D]}|�d�q2dS)NF)�block)r<rgrr�r;)rFr�r�rOrrrr��szThreadPool._help_stuff_finishcCst�|�dSr)r�r�)rr�r�r�rrrr��szThreadPool._wait_for_updates)NNr)r r!r"r~r�r]rrfrxr�r�r�rrrrr�s




)NrNF))�__all__rrrorgryr�r%r�rr$rrr�
connectionr	r
rrr
�countrrrrCrr#r*r-rUrD�dictrW�objectrr��AsyncResultr�r�r�rrrrr�<module>
sN	�
-=)+EXD
�@s6ddlZddlZddlmZdgZGdd�de�ZdS)�N�)�util�Popenc@s`eZdZdZdd�Zdd�Zejfdd�Zdd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�ZdS)r�forkcCs"t��d|_d|_|�|�dS�N)r�_flush_std_streams�
returncode�	finalizer�_launch)�self�process_obj�r
�0/usr/lib/python3.8/multiprocessing/popen_fork.py�__init__szPopen.__init__cCs|Srr
)r�fdr
r
r�duplicate_for_childszPopen.duplicate_for_childc
Cs�|jdkr�zt�|j|�\}}Wn(tk
rH}z
WY�dSd}~XYnX||jkr�t�|�rnt�|�|_n$t�|�s�td�	|���t�
|�|_|jS)NzStatus is {:n})r�os�waitpid�pid�OSError�WIFSIGNALED�WTERMSIG�	WIFEXITED�AssertionError�format�WEXITSTATUS)r�flagr�sts�er
r
r�polls


z
Popen.pollNcCsN|jdkrH|dk	r0ddlm}||jg|�s0dS|�|dkrBtjnd�S|jS)Nr)�waitg)r�multiprocessing.connectionr �sentinelrr�WNOHANG)r�timeoutr r
r
rr (s
z
Popen.waitcCsZ|jdkrVzt�|j|�Wn8tk
r0Yn&tk
rT|jdd�dkrP�YnXdS)Ng�������?)r$)rr�killr�ProcessLookupErrorrr )r�sigr
r
r�_send_signal2s
zPopen._send_signalcCs|�tj�dSr)r(�signal�SIGTERM�rr
r
r�	terminate<szPopen.terminatecCs|�tj�dSr)r(r)�SIGKILLr+r
r
rr%?sz
Popen.killc	Cs�d}t��\}}t��\}}t��|_|jdkrdz$t�|�t�|�|j|d�}W5t�|�Xn0t�|�t�|�t�|tj	||f�|_
||_dS)Nrr)�parent_sentinel)r�piperr�_exit�close�
_bootstrapr�Finalize�	close_fdsr	r")rr�code�parent_r�child_w�child_r�parent_wr
r
rr
Bs 






�z
Popen._launchcCs|jdk	r|��dSr)r	r+r
r
rr1Us
zPopen.close)N)�__name__�
__module__�__qualname__�methodrrrr#rr r(r,r%r
r1r
r
r
rrs


)rr)�r�__all__�objectrr
r
r
r�<module>sXa	�@s�ddlZddlZddlmZmZejs.ed��ddlmZddlm	Z	ddlm
Z
ddlmZd	gZGd
d�de
�ZGdd	�d	e	j�ZdS)
�N�)�	reduction�set_spawning_popenz,No support for sending fds between processes)�
forkserver)�
popen_fork)�spawn)�util�Popenc@seZdZdd�Zdd�ZdS)�_DupFdcCs
||_dS�N)�ind)�selfr�r�6/usr/lib/python3.8/multiprocessing/popen_forkserver.py�__init__sz_DupFd.__init__cCst��|jSr)r�get_inherited_fdsr)r
rrr�detachsz
_DupFd.detachN)�__name__�
__module__�__qualname__rrrrrrr
sr
csBeZdZdZeZ�fdd�Zdd�Zdd�Ze	j
fdd	�Z�ZS)
r	rcsg|_t��|�dSr)�_fds�superr)r
�process_obj��	__class__rrr!szPopen.__init__cCs|j�|�t|j�dS)Nr)r�append�len)r
�fdrrr�duplicate_for_child%szPopen.duplicate_for_childc	Cs�t�|j�}t��}t|�zt�||�t�||�W5td�Xt�	|j
�\|_}t�
|�}t�|tj||jf�|_t|ddd��}|�|���W5QRXt�|j�|_dS)N�wbT)�closefd)r�get_preparation_data�_name�io�BytesIOrr�dumpr�connect_to_new_processr�sentinel�os�dupr�Finalize�	close_fds�	finalizer�open�write�	getbuffer�read_signed�pid)r
r�	prep_data�buf�w�	_parent_w�frrr�_launch)s


�z
Popen._launchc	Csr|jdkrlddlm}|tjkr$dnd}||jg|�s:dSzt�|j�|_Wntt	fk
rjd|_YnX|jS)Nr)�wait�)
�
returncode�multiprocessing.connectionr8r(�WNOHANGr'rr0�OSError�EOFError)r
�flagr8�timeoutrrr�poll=s
z
Popen.poll)
rrr�methodr
�DupFdrrr7r(r<rA�
__classcell__rrrrr	s)r#r(�contextrr�HAVE_SEND_HANDLE�ImportError�rrrr�__all__�objectr
r	rrrr�<module>s
X��@spddlZddlZddlmZmZddlmZddlmZddlmZdgZ	Gdd	�d	e
�ZGd
d�dej�ZdS)�N�)�	reduction�set_spawning_popen)�
popen_fork)�spawn)�util�Popenc@seZdZdd�Zdd�ZdS)�_DupFdcCs
||_dS�N��fd��selfr�r�7/usr/lib/python3.8/multiprocessing/popen_spawn_posix.py�__init__sz_DupFd.__init__cCs|jSr
r)rrrr�detachsz
_DupFd.detachN)�__name__�
__module__�__qualname__rrrrrrr	sr	cs4eZdZdZeZ�fdd�Zdd�Zdd�Z�Z	S)rrcsg|_t��|�dSr
)�_fds�superr)r�process_obj��	__class__rrrszPopen.__init__cCs|j�|�|Sr
)r�appendr
rrr�duplicate_for_child"szPopen.duplicate_for_childcCsXddlm}|��}|j�|�t�|j�}t�	�}t
|�zt�||�t�||�W5t
d�Xd}}}}	z~t��\}}t��\}}	tj||d�}|j�||g�t
�t��||j�|_||_t|	ddd��}
|
�|���W5QRXW5g}
||	fD]}|dk	�r|
�|��qt
�|t
j|
�|_||fD]}|dk	�r6t�|��q6XdS)Nr)�resource_tracker)�
tracker_fd�pipe_handle�wbF)�closefd)�r�getfdrrr�get_preparation_data�_name�io�BytesIOrr�dumpr�Finalize�	close_fds�	finalizer�os�close�pipe�get_command_line�extend�spawnv_passfds�get_executable�pid�sentinel�open�write�	getbuffer)rrrr�	prep_data�fp�parent_r�child_w�child_r�parent_w�fds_to_closer�cmd�frrr�_launch&sB
�
�

z
Popen._launch)
rrr�methodr	�DupFdrrrA�
__classcell__rrrrrs
)
r&r,�contextrrr"rrr�__all__�objectr	rrrrr�<module>s
X�*�@s8ddddgZddlZddlZddlZddlZddlZddlmZzej�	e�
��ZWnek
rldZYnXdd�Z
dd�Zd	d�Zd
d�ZGdd�de�ZGd
d�de�ZGdd�de�ZGdd�de�Zdae�ae�d�ae�a[iZeej� ��D]0\Z!Z"e!dd�dkr�de!kr�de!��ee"<q�e�Z#dS)�BaseProcess�current_process�active_children�parent_process�N)�WeakSetcCstS)z@
    Return process object representing the current process
    )�_current_process�rr�-/usr/lib/python3.8/multiprocessing/process.pyr%scCst�tt�S)zN
    Return list of process objects corresponding to live child processes
    )�_cleanup�list�	_childrenrrrr	r+scCstS)z?
    Return process object representing the parent process
    )�_parent_processrrrr	r3scCs*tt�D]}|j��dk	rt�|�qdS�N)rr�_popen�poll�discard)�prrr	r
=sr
c@s�eZdZdZdd�Zddddifdd�dd�Zd	d
�Zdd�Zd
d�Zdd�Z	dd�Z
d,dd�Zdd�Zdd�Z
edd��Zejdd��Zedd��Zejdd��Zedd ��Zejd!d ��Zed"d#��Zed$d%��ZeZed&d'��Zd(d)�Zd-d*d+�ZdS).rz�
    Process objects represent activity that is run in a separate process

    The class is analogous to `threading.Thread`
    cCst�dSr)�NotImplementedError��selfrrr	�_PopenMszBaseProcess._PopenNr)�daemoncCs�|dkstd��tt�}tj|f|_tj��|_t��|_	tj
|_d|_d|_
||_t|�|_t|�|_|p�t|�jdd�dd�|jD��|_|dk	r�||_t�|�dS)Nz#group argument must be None for nowF�-�:css|]}t|�VqdSr)�str)�.0�irrr	�	<genexpr>^sz'BaseProcess.__init__.<locals>.<genexpr>)�AssertionError�next�_process_counterr�	_identity�_config�copy�os�getpid�_parent_pid�name�_parent_namer�_closed�_target�tuple�_args�dict�_kwargs�type�__name__�join�_namer�	_dangling�add)r�group�targetr'�args�kwargsr�countrrr	�__init__Ps"


�zBaseProcess.__init__cCs|jrtd��dS)Nzprocess object is closed)r)�
ValueErrorrrrr	�
_check_closedcszBaseProcess._check_closedcCs|jr|j|j|j�dS)zQ
        Method to be run in sub-process; can be overridden in sub-class
        N)r*r,r.rrrr	�rungszBaseProcess.runcCsz|��|jdkstd��|jt��ks0td��tj�d�rDtd��t	�|�
|�|_|jj|_|`
|`|`t�|�dS)z%
        Start child process
        Nzcannot start a process twicez:can only start a process object created by current processrz3daemonic processes are not allowed to have children)r<rrr&r$r%rr"�getr
r�sentinel�	_sentinelr*r,r.rr4rrrr	�startns��
zBaseProcess.startcCs|��|j��dS)zT
        Terminate process; sends SIGTERM signal or uses TerminateProcess()
        N)r<r�	terminaterrrr	rB�szBaseProcess.terminatecCs|��|j��dS)zT
        Terminate process; sends SIGKILL signal or uses TerminateProcess()
        N)r<r�killrrrr	rC�szBaseProcess.killcCsR|��|jt��kstd��|jdk	s0td��|j�|�}|dk	rNt�|�dS)z5
        Wait until child process terminates
        zcan only join a child processNzcan only join a started process)	r<r&r$r%rr�waitrr)r�timeout�resrrr	r1�szBaseProcess.joincCs`|��|tkrdS|jt��ks*td��|jdkr8dS|j��}|dkrNdSt�	|�dSdS)z1
        Return whether process is alive
        Tzcan only test a child processNF)
r<rr&r$r%rrrrr)r�
returncoderrr	�is_alive�s


zBaseProcess.is_alivecCsH|jdk	r>|j��dkr td��|j��d|_|`t�|�d|_dS)z�
        Close the Process object.

        This method releases resources held by the Process object.  It is
        an error to call this method if the child process is still running.
        Nz^Cannot close a process while it is still running. You should first call join() or terminate().T)rrr;�closer@rrr)rrrr	rI�s


zBaseProcess.closecCs|jSr)r2rrrr	r'�szBaseProcess.namecCst|t�std��||_dS)Nzname must be a string)�
isinstancerrr2)rr'rrr	r'�scCs|j�dd�S)z4
        Return whether process is a daemon
        rF)r"r>rrrr	r�szBaseProcess.daemoncCs |jdkstd��||jd<dS)z1
        Set whether process is a daemon
        Nzprocess has already startedr)rrr")r�daemonicrrr	r�scCs
|jdS)N�authkey)r"rrrr	rL�szBaseProcess.authkeycCst|�|jd<dS)z2
        Set authorization key of process
        rLN)�AuthenticationStringr")rrLrrr	rL�scCs"|��|jdkr|jS|j��S)zM
        Return exit code of process or `None` if it has yet to stop
        N)r<rrrrrr	�exitcode�s
zBaseProcess.exitcodecCs*|��|tkrt��S|jo$|jjSdS)zU
        Return identifier (PID) of process or `None` if it has yet to start
        N)r<rr$r%r�pidrrrr	�ident�szBaseProcess.identcCs4|��z|jWStk
r.td�d�YnXdS)z{
        Return a file descriptor (Unix) or handle (Windows) suitable for
        waiting for process termination.
        zprocess not startedN)r<r@�AttributeErrorr;rrrr	r?�s
zBaseProcess.sentinelcCs�d}|tkrd}nL|jrd}n@|jt��kr2d}n,|jdkrBd}n|j��}|dk	rZd}nd}t|�jd|j	g}|jdk	r�|�
d|jj�|�
d|j�|�
|�|dk	r�t�
||�}|�
d	|�|jr�|�
d
�dd�|�S)
N�started�closed�unknown�initial�stoppedzname=%rzpid=%sz	parent=%szexitcode=%srz<%s>� )rr)r&r$r%rrr/r0r2�appendrO�_exitcode_to_namer>rr1)rrN�status�inforrr	�__repr__s0




zBaseProcess.__repr__c
Csvddlm}m}�z>z�|jdk	r,|�|j�t	�
d�at�a
|��t}|at|j|j|�atjrnt����z|j��|��W5~X|�d�z|��d}W5|��XWn�tk
�r}zJ|js�d}n:t|jdt�r�|jd}nt j!�"t#|jd�d�d}W5d}~XYn2d}ddl$}t j!�"d|j%�|�&�YnXW5t��|�d|�|��X|S)N�)�util�contextz process exiting with exitcode %dz child process calling self.run()r�
zProcess %s:
)'�r^r_�	threading�	_shutdownr[�_flush_std_streams�
_start_method�_force_start_method�	itertoolsr9r �setr�_close_stdinr�_ParentProcessr(r&r
�_HAVE_THREAD_NATIVE_ID�main_thread�_set_native_id�_finalizer_registry�clear�_run_after_forkers�_exit_functionr=�
SystemExitr7rJ�int�sys�stderr�writer�	tracebackr'�	print_exc)r�parent_sentinelr^r_rN�old_process�erwrrr	�
_bootstrap"sR

�


zBaseProcess._bootstrap)N)N)r0�
__module__�__qualname__�__doc__rr:r<r=rArBrCr1rHrI�propertyr'�setterrrLrNrPrOr?r\r|rrrr	rGsD�







	


c@seZdZdd�ZdS)rMcCs,ddlm}|�dkrtd��tt|�ffS)Nr])�get_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)r_r��	TypeErrorrM�bytes)rr�rrr	�
__reduce__Xs
�zAuthenticationString.__reduce__N)r0r}r~r�rrrr	rMWsrMc@s6eZdZdd�Zdd�Zedd��Zd
dd	�ZeZdS)rjcCs4d|_||_||_d|_d|_d|_||_i|_dS)NrF)r!r2�_pidr&rr)r@r")rr'rOr?rrr	r:hsz_ParentProcess.__init__cCsddlm}||jgdd�S)Nr�rD�rE��multiprocessing.connectionrDr@)rrDrrr	rHrsz_ParentProcess.is_alivecCs|jSr)r�rrrr	rPvsz_ParentProcess.identNcCs ddlm}||jg|d�dS)z6
        Wait until parent process terminates
        rr�r�Nr�)rrErDrrr	r1zsz_ParentProcess.join)N)	r0r}r~r:rHr�rPr1rOrrrr	rjfs


rjc@seZdZdd�Zdd�ZdS)�_MainProcesscCs8d|_d|_d|_d|_d|_tt�d��dd�|_dS)NrZMainProcessF� z/mp)rLZ	semprefix)	r!r2r&rr)rMr$�urandomr"rrrr	r:�s�z_MainProcess.__init__cCsdSrrrrrr	rI�sz_MainProcess.closeN)r0r}r~r:rIrrrr	r��sr�r]�ZSIG�_r)$�__all__r$rt�signalrgrb�_weakrefsetr�path�abspath�getcwd�ORIGINAL_DIR�OSErrorrrrr
�objectrr�rMrjr�r
rr9r rhrrYr�__dict__�itemsr'�signumr3rrrr	�<module>
s@�


!
XB%�@s�dddgZddlZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
ddlZddlm
Z
ddlmZejjZdd	lmZmZmZmZmZGd
d�de�Ze�ZGdd�de�ZGdd�de�ZdS)
�Queue�SimpleQueue�
JoinableQueue�N)�Empty�Full�)�
connection)�context)�debug�info�Finalize�register_after_fork�
is_exitingc@s�eZdZd*dd�Zdd�Zdd�Zdd	�Zd+dd
�Zd,dd�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zd d!�Zed"d#��Zed$d%��Zed&d'��Zed(d)��ZdS)-rrcCs�|dkrddlm}||_tjdd�\|_|_|��|_t	�
�|_tj
dkrTd|_n
|��|_|�|�|_d|_|��tj
dkr�t|tj�dS)Nrr)�
SEM_VALUE_MAXF��duplex�win32)�synchronizer�_maxsizer�Pipe�_reader�_writer�Lock�_rlock�os�getpid�_opid�sys�platform�_wlock�BoundedSemaphore�_sem�
_ignore_epipe�_after_forkr
r��self�maxsize�ctx�r(�,/usr/lib/python3.8/multiprocessing/queues.py�__init__$s




zQueue.__init__cCs.t�|�|j|j|j|j|j|j|j|j	fS�N)
r	�assert_spawningr"rrrrrr!r�r%r(r(r)�__getstate__9s
�zQueue.__getstate__c	Cs0|\|_|_|_|_|_|_|_|_|��dSr+)	r"rrrrrr!rr#�r%�stater(r(r)�__setstate__>s�zQueue.__setstate__cCsbtd�t�t���|_t��|_d|_d|_	d|_
d|_d|_|j
j|_|jj|_|jj|_dS)NzQueue._after_fork()F)r
�	threading�	Conditionr�	_notempty�collections�deque�_buffer�_thread�_jointhread�_joincancelled�_closed�_closer�
send_bytes�_send_bytesr�
recv_bytes�_recv_bytes�poll�_pollr-r(r(r)r#Cs


zQueue._after_forkTNc	Csf|jrtd|�d���|j�||�s(t�|j�.|jdkrB|��|j�	|�|j�
�W5QRXdS�NzQueue z
 is closed)r;�
ValueErrorr!�acquirerr4r8�
_start_threadr7�append�notify�r%�obj�block�timeoutr(r(r)�putPs
z	Queue.putc	Cs�|jrtd|�d���|rH|dkrH|j�|��}W5QRX|j��nr|rXt��|}|j�||�sjt	�zB|r�|t��}|�
|�s�t	�n|�
�s�t	�|��}|j��W5|j��Xt�|�SrC)
r;rDrr@r!�release�time�	monotonicrErrB�_ForkingPickler�loads)r%rKrL�res�deadliner(r(r)�get\s*
z	Queue.getcCs|j|jj��Sr+)rr!�_semlock�
_get_valuer-r(r(r)�qsizevszQueue.qsizecCs
|��Sr+�rBr-r(r(r)�emptyzszQueue.emptycCs|jj��Sr+)r!rV�_is_zeror-r(r(r)�full}sz
Queue.fullcCs
|�d�S�NF)rUr-r(r(r)�
get_nowait�szQueue.get_nowaitcCs|�|d�Sr])rM�r%rJr(r(r)�
put_nowait�szQueue.put_nowaitcCs2d|_z|j��W5|j}|r,d|_|�XdS)NT)r;r<r�close)r%rar(r(r)ra�szQueue.closecCs.td�|jstd�|���|jr*|��dS)NzQueue.join_thread()zQueue {0!r} not closed)r
r;�AssertionError�formatr9r-r(r(r)�join_thread�szQueue.join_threadcCs6td�d|_z|j��Wntk
r0YnXdS)NzQueue.cancel_join_thread()T)r
r:r9�cancel�AttributeErrorr-r(r(r)�cancel_join_thread�szQueue.cancel_join_threadc
Cs�td�|j��tjtj|j|j|j|j	|j
j|j|j
|jfdd�|_d|j_td�|j��td�|js�t|jtjt�|j�gdd�|_t|tj|j|jgd	d�|_dS)
NzQueue._start_thread()ZQueueFeederThread)�target�args�nameTzdoing self._thread.start()z... done self._thread.start()���)�exitpriority�
)r
r7�clearr2�Threadr�_feedr4r>rrrar"�_on_queue_feeder_errorr!r8�daemon�startr:r�_finalize_join�weakref�refr9�_finalize_closer<r-r(r(r)rF�s<
��
�
�zQueue._start_threadcCs4td�|�}|dk	r(|��td�ntd�dS)Nzjoining queue threadz... queue thread joinedz... queue thread already dead)r
�join)�twr�threadr(r(r)rt�s
zQueue._finalize_joinc	Cs.td�|�|�t�|��W5QRXdS)Nztelling queue thread to quit)r
rG�	_sentinelrH)�buffer�notemptyr(r(r)rw�s
zQueue._finalize_closec
CsXtd�|j}|j}	|j}
|j}t}tjdkr<|j}
|j}nd}
z�|�z|sT|
�W5|	�Xzb|�}||kr�td�|�WWdSt�	|�}|
dkr�||�qb|
�z||�W5|�XqbWnt
k
r�YnXWq@tk
�rP}zV|�rt|dd�t
jk�rWY�6dSt��r.td|�WY�dS|��|||�W5d}~XYq@Xq@dS)Nz$starting thread to feed data to piperz%feeder thread got sentinel -- exiting�errnorzerror in queue thread: %s)r
rErN�wait�popleftr{rrrQ�dumps�
IndexError�	Exception�getattrr~�EPIPErr)r|r}r=�	writelockra�ignore_epipe�onerror�	queue_sem�nacquire�nrelease�nwait�bpopleft�sentinel�wacquire�wreleaserJ�er(r(r)rp�sN







zQueue._feedcCsddl}|��dS)z�
        Private API hook called when feeding data in the background thread
        raises an exception.  For overriding by concurrent.futures.
        rN)�	traceback�	print_exc)r�rJr�r(r(r)rq
szQueue._on_queue_feeder_error)r)TN)TN)�__name__�
__module__�__qualname__r*r.r1r#rMrUrXrZr\r^r`rardrgrF�staticmethodrtrwrprqr(r(r(r)r"s.



 
	

=c@s@eZdZddd�Zdd�Zdd�Zdd
d�Zdd
�Zdd�Zd	S)rrcCs*tj|||d�|�d�|_|��|_dS)N)r'r)rr*�	Semaphore�_unfinished_tasksr3�_condr$r(r(r)r*#szJoinableQueue.__init__cCst�|�|j|jfSr+)rr.r�r�r-r(r(r)r.(szJoinableQueue.__getstate__cCs,t�||dd��|dd�\|_|_dS)N���)rr1r�r�r/r(r(r)r1+szJoinableQueue.__setstate__TNc
Cs�|jrtd|�d���|j�||�s(t�|j�J|j�8|jdkrJ|��|j	�
|�|j��|j�
�W5QRXW5QRXdSrC)r;rDr!rErr4r�r8rFr7rGr�rNrHrIr(r(r)rM/s

zJoinableQueue.putc	Cs@|j�0|j�d�std��|jj��r2|j��W5QRXdS)NFz!task_done() called too many times)r�r�rErDrVr[�
notify_allr-r(r(r)�	task_done<s
zJoinableQueue.task_donec	Cs,|j�|jj��s|j��W5QRXdSr+)r�r�rVr[rr-r(r(r)rxCszJoinableQueue.join)r)TN)	r�r�r�r*r.r1rMr�rxr(r(r(r)r!s


c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)rcCsHtjdd�\|_|_|��|_|jj|_tj	dkr:d|_
n
|��|_
dS)NFrr)rrrrrrrArBrrr)r%r'r(r(r)r*Ns


zSimpleQueue.__init__cCs
|��Sr+rYr-r(r(r)rZWszSimpleQueue.emptycCst�|�|j|j|j|jfSr+)r	r,rrrrr-r(r(r)r.Zs
zSimpleQueue.__getstate__cCs"|\|_|_|_|_|jj|_dSr+)rrrrrArBr/r(r(r)r1^szSimpleQueue.__setstate__c	Cs&|j�|j��}W5QRXt�|�Sr+)rrr?rQrR)r%rSr(r(r)rUbszSimpleQueue.getc	CsDt�|�}|jdkr"|j�|�n|j�|j�|�W5QRXdSr+)rQr�rrr=r_r(r(r)rMhs


zSimpleQueue.putN)	r�r�r�r*rZr.r1rUrMr(r(r(r)rLs	)�__all__rrr2r5rOrur~�queuerr�_multiprocessing�rr	�	reduction�ForkingPicklerrQ�utilr
rrr
r�objectrr{rrr(r(r(r)�<module>
s$
v
+X��@sddlmZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
ddddd	gZejd
kp�e
ed�o�e
ed�o�e
ejd
�ZGdd�dej�ZejZd6dd	�Zejd
k�redddg7ZddlZd7dd�dd�Zdd�Zdd�Zdd�ZGdd�de�ZnHedddg7ZddlZejdkZdd�Zdd�Zd d�Zd!d�Zd"d�Zd#d$�ZGd%d&�d&�Z ee!e �j"�e�d'd(�Z#ee!e$j%�e#�ee!e&j'�e#�d)d*�Z(d+d,�Z)eej*e(�ejd
k�r�d-d.�Z+d/d0�Z,eeje+�nd1d.�Z+d2d0�Z,eeje+�Gd3d4�d4ed5�Z-dS)8�)�ABCMetaN�)�context�send_handle�recv_handle�ForkingPickler�register�dump�win32�CMSG_LEN�
SCM_RIGHTS�sendmsgcsJeZdZdZiZejZ�fdd�Ze	dd��Z
e	d	dd��Zej
Z
�ZS)
rz)Pickler subclass used by multiprocessing.cs*t�j|�|j��|_|j�|j�dS�N)�super�__init__�_copyreg_dispatch_table�copy�dispatch_table�update�_extra_reducers��self�args��	__class__��//usr/lib/python3.8/multiprocessing/reduction.pyr&szForkingPickler.__init__cCs||j|<dS)z&Register a reduce function for a type.N)r)�cls�type�reducerrrr+szForkingPickler.registerNcCs t��}|||��|�|��Sr)�io�BytesIOr	�	getbuffer)r�obj�protocol�bufrrr�dumps0szForkingPickler.dumps)N)�__name__�
__module__�__qualname__�__doc__r�copyregrrr�classmethodrr&�pickle�loads�
__classcell__rrrrr!s
cCst||��|�dS)z3Replacement for pickle.dump() using ForkingPickler.N)rr	)r#�filer$rrrr	:s�	DupHandle�	duplicate�steal_handleF)�source_processcCs6t��}|dkr|}|dkr |}t�|||d|tj�S)z<Duplicate a handle.  (target_process is a handle not a pid!)Nr)�_winapi�GetCurrentProcess�DuplicateHandle�DUPLICATE_SAME_ACCESS)�handle�target_process�inheritabler4�current_processrrrr2Gs�c	CsFt�tjd|�}z$t�||t��ddtjtjB�W�St�|�XdS)z5Steal a handle from process identified by source_pid.FrN)r5�OpenProcess�PROCESS_DUP_HANDLE�CloseHandler7r6r8�DUPLICATE_CLOSE_SOURCE)�
source_pidr9�source_process_handlerrrr3Ss�
�cCst|tj|�}|�|�dS�z&Send a handle over a local connection.N)r1r5r8�send)�connr9�destination_pid�dhrrrr_scCs|����S)�)Receive a handle over a local connection.)�recv�detach)rErrrrdsc@s"eZdZdZddd�Zdd�ZdS)r1zPicklable wrapper for a handle.Nc	Cs\|dkrt��}t�tjd|�}zt�t��|||dd�|_W5t�|�X||_	||_
dS)NFr)�os�getpidr5r=r>r?r7r6�_handle�_access�_pid)rr9�access�pid�procrrrrjs�
zDupHandle.__init__c	CsZ|jt��kr|jSt�tjd|j�}z"t�||jt�	�|j
dtj�W�St�|�XdS)z1Get the handle.  This should only be called once.FN)rOrKrLrMr5r=r>r?r7r6rNr@)rrRrrrrJys
��zDupHandle.detach)N)r'r(r)r*rrJrrrrr1hs
�DupFd�sendfds�recvfds�darwincCsVt�d|�}tt|�dg�}|�|gtjtj|fg�trR|�d�dkrRt	d��dS)z,Send an array of fds over an AF_UNIX socket.�i�r�Az%did not receive acknowledgement of fdN)
�array�bytes�lenr
�socket�
SOL_SOCKETr�ACKNOWLEDGErI�RuntimeError)�sock�fds�msgrrrrT�s
c	Cst�d�}|j|}|�dt�|��\}}}}|s:|s:t�z�trJ|�d�t|�dkrft	dt|���|d\}}	}
|tj
kr�|	tjkr�t|
�|jdkr�t�|�
|
�t|�d|dkr�td�t|�|d���t|�WSWnttfk
r�YnXt	d��d	S)
z/Receive an array of fds over an AF_UNIX socket.rWrrYzreceived %d items of ancdatarrXz Len is {0:n} but msg[0] is {1!r}zInvalid data receivedN)rZ�itemsize�recvmsgr]�
CMSG_SPACE�EOFErrorr_rDr\r`r^r�
ValueError�	frombytes�AssertionError�format�list�
IndexError)ra�size�a�
bytes_sizerc�ancdata�flags�addr�
cmsg_level�	cmsg_type�	cmsg_datarrrrU�s<


�
�
��c	Cs2t�|��tjtj��}t||g�W5QRXdSrC)r]�fromfd�fileno�AF_UNIX�SOCK_STREAMrT)rEr9rF�srrrr�sc
Cs<t�|��tjtj��}t|d�dW5QR�SQRXdS)rHrrN)r]rwrxryrzrU)rEr{rrrr�scCsFt��}|dk	r |�|�|��Str:ddlm}|�|�Std��dS)zReturn a wrapper for an fd.Nr)�resource_sharerz&SCM_RIGHTS appears not to be available)r�get_spawning_popenrS�duplicate_for_child�HAVE_SEND_HANDLE�r|rh)�fd�	popen_objr|rrrrS�s
cCs2|jdkrt|j|jjffSt|j|jjffSdSr)�__self__�getattrr�__func__r'��mrrr�_reduce_method�s
r�c@seZdZdd�ZdS)�_CcCsdSrr)rrrr�f�sz_C.fN)r'r(r)r�rrrrr��sr�cCst|j|jffSr)r��__objclass__r'r�rrr�_reduce_method_descriptor�sr�cCst|j|j|jpiffSr)�_rebuild_partial�funcr�keywords)�prrr�_reduce_partial�sr�cCstj|f|�|�Sr)�	functools�partial)r�rr�rrrr��sr�cCsddlm}t||�ffS)Nr)�	DupSocket)r|r��_rebuild_socket)r{r�rrr�_reduce_socket�sr�cCs|��Sr)rJ)�dsrrrr��sr�cCs"t|���}t||j|j|jffSr)rSrxr��familyr�proto)r{�dfrrrr��scCs|��}tj||||d�S)N)rx)rJr])r�r�rr�r�rrrr��sc@sdeZdZdZeZeZeZeZeZe	j
dkr8eZeZe
Z
neZeZeZeZeZeZeZeZdd�ZdS)�AbstractReducerz�Abstract base class for use in implementing a Reduction class
    suitable for use in replacing the standard reduction mechanism
    used in multiprocessing.r
cGsNttt�j�t�tttj�t�tttj	�t�tt
jt�tt
j
t�dSr)rrr�r�r�rl�appendr��int�__add__r�r�r�r]r�rrrrrs
zAbstractReducer.__init__N)r'r(r)r*rrr	rr�sys�platformr3r2r1rTrUrSr�r�r�r�r�rrrrrr��s&
r�)�	metaclass)N)NF).�abcrr+r�r rKr-r]r�r�r�__all__r��hasattrr�Picklerrrr	r5r2r3rr�objectr1rZr_rTrUrSr�r�rr�r�rlr�r�r�r�r�r�r�r�r�rrrr�<module>
sj

�
�	
�#
Xx�@s�ddlZddlZddlZddlZddlZddlmZddlmZddlm	Z	dgZ
ejdkrxe
dg7Z
Gd	d�de�Z
ne
d
g7Z
Gdd
�d
e�ZGdd
�d
e�Ze�ZejZdS)�N�)�process)�	reduction)�util�stop�win32�	DupSocketc@s eZdZdZdd�Zdd�ZdS)rzPicklable wrapper for a socket.cs(|����fdd�}t�|�j�|_dS)Ncs��|�}|�|�dS�N)�share�
send_bytes)�conn�pidr
��new_sock��5/usr/lib/python3.8/multiprocessing/resource_sharer.py�sends
z DupSocket.__init__.<locals>.send)�dup�_resource_sharer�register�close�_id)�self�sockrrrr�__init__szDupSocket.__init__c
Cs6t�|j�� }|��}t�|�W5QR�SQRXdS)z1Get the socket.  This should only be called once.N)r�get_connectionr�
recv_bytes�socketZ	fromshare)rrr
rrr�detach$szDupSocket.detachN��__name__�
__module__�__qualname__�__doc__rrrrrrrs�DupFdc@s eZdZdZdd�Zdd�ZdS)r$z-Wrapper for fd which can be used at any time.cs4t�|���fdd�}�fdd�}t�||�|_dS)Ncst�|�|�dSr	)r�send_handle)rr
��new_fdrrr1szDupFd.__init__.<locals>.sendcst���dSr	)�osrrr&rrr3szDupFd.__init__.<locals>.close)r(rrrr)r�fdrrrr&rr/s
zDupFd.__init__c
Cs.t�|j��}t�|�W5QR�SQRXdS)z-Get the fd.  This should only be called once.N)rrrr�recv_handle)rrrrrr7szDupFd.detachNrrrrrr$-sc@sNeZdZdZdd�Zdd�Zedd��Zdd	d
�Zdd�Z	d
d�Z
dd�ZdS)�_ResourceSharerz.Manager for resources using background thread.cCs@d|_i|_g|_t��|_d|_d|_d|_t	�
|tj�dS)Nr)
�_key�_cache�
_old_locks�	threading�Lock�_lock�	_listener�_address�_threadr�register_after_forkr+�
_afterfork)rrrrr?s
z_ResourceSharer.__init__c
CsZ|j�J|jdkr|��|jd7_||f|j|j<|j|jfW5QR�SQRXdS)z+Register resource, returning an identifier.Nr)r1r3�_startr,r-)rrrrrrrIs
z_ResourceSharer.registercCs<ddlm}|\}}||t��jd�}|�|t��f�|S)z<Return connection from which to receive identified resource.r��Client��authkey)�
connectionr9r�current_processr;rr(�getpid)�identr9�address�key�crrrrRs
z_ResourceSharer.get_connectionNc	Cs�ddlm}|j��|jdk	r�||jt��jd�}|�d�|��|j	�
|�|j	��rdt�
d�|j��d|_	d|_d|_|j��D]\}\}}|�q�|j��W5QRXdS)z:Stop the background thread and clear registered resources.rr8Nr:z._ResourceSharer thread did not stop when asked)r<r9r1r3rr=r;rrr4�join�is_aliver�sub_warningr2r-�items�clear)r�timeoutr9rBrArrrrrr[s$
�



z_ResourceSharer.stopcCsj|j��D]\}\}}|�q
|j��|j�|j�t��|_|jdk	rT|j�	�d|_d|_
d|_dSr	)r-rFrGr.�appendr1r/r0r2rr3r4)rrArrrrrr6ps



z_ResourceSharer._afterforkcCsjddlm}|jdkstd��t�d�|t��jd�|_|jj	|_
tj|j
d�}d|_|��||_dS)Nr)�ListenerzAlready have Listenerz0starting listener and thread for sending handlesr:)�targetT)r<rJr2�AssertionErrorr�debugrr=r;r@r3r/�Thread�_serve�daemon�startr4)rrJ�trrrr7~s

z_ResourceSharer._startc	Cs�ttd�rt�tjt���zh|j���T}|��}|dkrHW5QR�Wq�|\}}|j�	|�\}}z|||�W5|�XW5QRXWqt
��s�tj
t���YqXqdS)N�pthread_sigmask)�hasattr�signalrS�	SIG_BLOCK�
valid_signalsr2�accept�recvr-�popr�
is_exiting�sys�
excepthook�exc_info)rr�msgrA�destination_pidrrrrrrO�s
z_ResourceSharer._serve)N)r r!r"r#rr�staticmethodrrr6r7rOrrrrr+=s
	

r+)r(rUrr\r/�r�contextrr�__all__�platform�objectrr$r+rrrrrr�<module>s 


`XV�@s�ddlZddlZddlZddlZddlZddlmZddlmZdddgZe	ed�Z
ejejfZ
d	d
d�iZejdkr�ddlZddlZe�ejejd
��Gdd�de�Ze�ZejZejZejZejZdd�ZdS)�N�)�spawn)�util�ensure_running�register�
unregister�pthread_sigmaskZnoopcCsdS�N�r
r
r
�6/usr/lib/python3.8/multiprocessing/resource_tracker.py�<lambda>!�r�posix)Z	semaphore�
shared_memoryc@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)�ResourceTrackercCst��|_d|_d|_dSr	)�	threading�Lock�_lock�_fd�_pid��selfr
r
r�__init__0s
zResourceTracker.__init__c	CsT|j�D|jdkr W5QR�dSt�|j�d|_t�|jd�d|_W5QRXdS)Nr)rr�os�close�waitpidrrr
r
r�_stop5s
zResourceTracker._stopcCs|��|jSr	)rrrr
r
r�getfdBszResourceTracker.getfdcCst|j��b|jdk	r~|��r*W5QR�dSt�|j�z|jdk	rPt�|jd�Wntk
rfYnXd|_d|_t�	d�g}z|�
tj�
��Wntk
r�YnXd}t��\}}z�zr|�
|�t��}|gt��}|dt|�g7}z&t�rt�tjt�t�|||�}W5t�r,t�tjt�XWnt�|��YnX||_||_W5t�|�XW5QRXdS)z�Make sure that resource tracker process is running.

        This can be run from any process.  Usually a child process will use
        the resource created by its parent.NrzUresource_tracker: process died unexpectedly, relaunching.  Some resources might leak.z:from multiprocessing.resource_tracker import main;main(%d)z"--multiprocessing-resource-tracker)rr�_check_aliverrrr�ChildProcessError�warnings�warn�append�sys�stderr�fileno�	Exception�piper�get_executabler�_args_from_interpreter_flags�str�
_HAVE_SIGMASK�signalr�SIG_UNBLOCK�_IGNORED_SIGNALS�	SIG_BLOCK�spawnv_passfds)r�fds_to_pass�cmd�r�w�exe�args�pidr
r
rrFsJ






zResourceTracker.ensure_runningcCs2zt�|jd�Wntk
r(YdSXdSdS)z;Check that the pipe has not been closed by sending a probe.s
PROBE:0:noop
FTN)r�writer�OSErrorrr
r
rr�s
zResourceTracker._check_alivecCs|�d||�dS)z0Register name of resource with resource tracker.�REGISTERN��_send�r�name�rtyper
r
rr�szResourceTracker.registercCs|�d||�dS)z2Unregister name of resource with resource tracker.�
UNREGISTERNr;r=r
r
rr�szResourceTracker.unregistercCsb|��d�|||��d�}t|�dkr0td��t�|j|�}|t|�ks^td�|t|����dS)Nz{0}:{1}:{2}
�asciiiz
name too longznbytes {0:n} but len(msg) {1:n})	r�format�encode�len�
ValueErrorrr8r�AssertionError)rr2r>r?�msg�nbytesr
r
rr<�s�zResourceTracker._sendN)�__name__�
__module__�__qualname__rrrrrrrr<r
r
r
rr.s
@rc
Cst�tjtj�t�tjtj�tr2t�tjt�tj	tj
fD]&}z|��Wq>tk
rbYq>Xq>dd�t
��D�}z�t|d���}|D]�}z�|���d��d�\}}}t
�|d�}	|	dkr�td	|�d
|����|dkr�||�|�n2|dk�r||�|�n|d
k�rntd|��Wq�tk
�rTztjt���WnYnXYq�Xq�W5QRXW5|��D]�\}}|�r�zt�dt|�|f�Wntk
�r�YnX|D]V}zLzt
||�Wn6tk
�r�}zt�d||f�W5d}~XYnXW5X�q��qnXdS)zRun resource tracker.cSsi|]}|t��qSr
)�set)�.0r?r
r
r�
<dictcomp>�szmain.<locals>.<dictcomp>zQresource_tracker: There appear to be %d leaked %s objects to clean up at shutdownzresource_tracker: %r: %sN�rbrA�:zCannot register z. for automatic cleanup: unknown resource type r:r@ZPROBEzunrecognized command %r)r,�SIGINT�SIG_IGN�SIGTERMr+rr-r.r#�stdin�stdoutrr&�_CLEANUP_FUNCS�keys�itemsr r!rD�open�strip�decode�split�getrE�add�remove�RuntimeError�
excepthook�exc_info)
�fd�f�cacher?�rtype_cacher>�e�liner2�cleanup_funcr
r
r�main�s^�


�
(rj)rr,r#rr �rr�__all__�hasattrr+rQrSr.rVr>�_multiprocessing�_posixshmem�update�
sem_unlink�
shm_unlink�objectr�_resource_trackerrrrrrjr
r
r
r�<module>s4

�
�wX&8�@s�dZddgZddlmZddlZddlZddlZddlZddlZej	dkrXddl
Z
dZnddlZdZej
ejBZd	Zer~d
ZndZdd
�ZGdd�d�ZdZGdd�d�ZdS)z�Provides shared memory for direct access across processes.

The API of this package is currently provisional. Refer to the
documentation for details.
�SharedMemory�
ShareableList�)�partialN�ntFT�z/psm_Zwnsm_cCsBttt�d}|dks td��tt�|�}t|�tks>t�|S)z6Create a random filename for the shared memory object.�z_SHM_NAME_PREFIX too long)�_SHM_SAFE_NAME_LENGTH�len�_SHM_NAME_PREFIX�AssertionError�secrets�	token_hex)�nbytes�name�r�3/usr/lib/python3.8/multiprocessing/shared_memory.py�_make_filename&s
rc@s�eZdZdZdZdZdZdZej	Z
dZer.dndZ
ddd	�Zd
d�Zdd
�Zdd�Zedd��Zedd��Zedd��Zdd�Zdd�ZdS)ra�Creates a new shared memory block or attaches to an existing
    shared memory block.

    Every shared memory block is assigned a unique name.  This enables
    one process to create a shared memory block with a particular name
    so that a different process can attach to that same shared memory
    block using that same name.

    As a resource for sharing data across processes, shared memory blocks
    may outlive the original process that created them.  When one process
    no longer needs access to a shared memory block that might still be
    needed by other processes, the close() method should be called.
    When a shared memory block is no longer needed by any process, the
    unlink() method should be called to ensure proper cleanup.N���i�TFrc
	Csl|dkstd��|r0ttjB|_|dkr0td��|dkrL|jtj@sLtd��t�rH|dkr�t�}ztj	||j|j
d�|_Wntk
r�YqZYnX||_
q�qZn.|jr�d|n|}tj	||j|j
d�|_||_
z<|r�|r�t�|j|�t�|j�}|j}t�|j|�|_Wn tk
�r*|���YnXddlm}||j
d	��n|�r�|dk�r^t�n|}t�tjtjtj|d
?d@|d@|�}zXt��}|tjk�r�|dk	�r�tt j!t�"t j!�|tj��nW��qNtjd||d
�|_W5t�|�X||_
�qV�qNnX||_
t�#tj$d|�}zt�%|tj$ddd�}	W5t�|�Xt�&|	�}tjd||d
�|_||_'t(|j�|_)dS)Nrz!'size' must be a positive integerz4'size' must be a positive number different from zeroz&'name' can only be None if create=True)�mode�/�)�register�
shared_memory� l��r)�tagnameF)*�
ValueError�_O_CREX�os�O_RDWR�_flags�O_EXCL�
_USE_POSIXr�_posixshmem�shm_open�_mode�_fd�FileExistsError�_name�_prepend_leading_slash�	ftruncate�fstat�st_size�mmap�_mmap�OSError�unlink�resource_trackerr�_winapi�CreateFileMapping�INVALID_HANDLE_VALUE�NULL�PAGE_READWRITE�CloseHandle�GetLastError�ERROR_ALREADY_EXISTS�errno�EEXIST�strerror�OpenFileMapping�
FILE_MAP_READ�
MapViewOfFile�VirtualQuerySize�_size�
memoryview�_buf)
�selfr�create�size�statsr�	temp_name�h_map�last_error_code�p_bufrrr�__init__Is��
�
�

�
��
zSharedMemory.__init__cCs&z|��Wntk
r YnXdS�N)�closer.�rCrrr�__del__�szSharedMemory.__del__cCs|j|jd|jffS)NF)�	__class__rrErNrrr�
__reduce__�s��zSharedMemory.__reduce__cCs|jj�d|j�d|j�d�S)N�(z, size=�))rP�__name__rrErNrrr�__repr__�szSharedMemory.__repr__cCs|jS)z4A memoryview of contents of the shared memory block.)rBrNrrr�buf�szSharedMemory.bufcCs.|j}tr*|jr*|j�d�r*|jdd�}|S)z4Unique name that identifies the shared memory block.rrN)r'r!r(�
startswith)rC�
reported_namerrrr�s

zSharedMemory.namecCs|jS)zSize in bytes.)r@rNrrrrE�szSharedMemory.sizecCsX|jdk	r|j��d|_|jdk	r4|j��d|_trT|jdkrTt�|j�d|_dS)zkCloses access to the shared memory from this instance but does
        not destroy the shared memory block.Nrr)rB�releaser-rMr!r%rrNrrrrM�s



zSharedMemory.closecCs2tr.|jr.ddlm}t�|j�||jd�dS)z�Requests that the underlying shared memory block be destroyed.

        In order to ensure proper cleanup of resources, unlink should be
        called once (and only once) across all processes which have access
        to the shared memory block.r)�
unregisterrN)r!r'r0rZr"�
shm_unlink)rCrZrrrr/�s
zSharedMemory.unlink)NFr)rT�
__module__�__qualname__�__doc__r'r%r-rBrrrr$r!r(rKrOrQrU�propertyrVrrErMr/rrrrr0s(
l




�utf8c@seZdZdZedededededdj	diZ
dZd	d
�dd
�dd
�d
d
�d�Ze
dd��Zd6dd�dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zed$d%��Zed&d'��Zed(d)��Zed*d+��Zed,d-��Zed.d/��Zed0d1��Zd2d3�Z d4d5�Z!dS)7ra�Pattern for a mutable list-like object shareable via a shared
    memory block.  It differs from the built-in list type in that these
    lists can not change their overall length (i.e. no append, insert,
    etc.)

    Because values are packed into a memoryview as bytes, the struct
    packing format for any storable value must require no more than 8
    characters to describe its format.�q�dzxxxxxxx?z%dsNzxxxxxx?x�cCs|SrLr��valuerrr�<lambda>
�zShareableList.<lambda>cCs|�d��t�S�N�)�rstrip�decode�	_encodingrdrrrrfrgcCs
|�d�Srh)rjrdrrrrfrgcCsdSrLr)�_valuerrrrf
rg)rrr�cCs:t|ttdjf�sdSt|t�r$dSt|t�r2dSdSdS)z�Used in concert with _back_transforms_mapping to convert values
        into the appropriate Python objects when retrieving them from
        the list as well as when storing them.Nrrrrn)�
isinstance�str�bytesrPrdrrr�_extract_recreation_codes

z&ShareableList._extract_recreation_code�rcs�|dk	r��fdd�|D�}t|��_tdd�|D���jks@t�t�fdd�|D���_�fdd�|D�}t�d�jd�	|��j
�j�}nd	}|dk	r�|dkr�t|��_
nt|d
|d��_
|dk	�rjt�tjd�j�j
jd�jf�j��tjd�	|��j
j�jf�fd
d�|D���tj�j
�j
j�jf�fdd�|D���tj�j�j
j�jf|��n t���_t��j�j
jd	��_dS)NcsPg|]H}t|ttf�s$�jt|�n&�jt|��jt|��jdf�qS)r)rorprq�_types_mapping�type�
_alignmentr	��.0�itemrNrr�
<listcomp> s���z*ShareableList.__init__.<locals>.<listcomp>css|]}t|�dkVqdS)rcN)r	�rx�fmtrrr�	<genexpr>)sz)ShareableList.__init__.<locals>.<genexpr>c3s0|](}|ddkr�jnt|dd��VqdS)r�sN)rv�intr{rNrrr}*s�csg|]}��|��qSr)rrrwrNrrrz.sra�rcT)rDrErc3s&|]}t|t�r|���n|VqdSrL)rorp�encode�rx�v��_encrrr}Msc3s|]}|���VqdSrL)r�r�r�rrr}Ss)r	�	_list_len�sumr�tuple�_allocated_bytes�struct�calcsize�_format_size_metainfo�join�_format_packing_metainfo�_format_back_transform_codesr�shmrl�	pack_intorV�_offset_data_start�_offset_packing_formats�_offset_back_transform_codes�unpack_from)rC�sequencer�_formats�_recreation_codes�requested_sizer)r�rCrrKs|
�
�

�����
��������
�zShareableList.__init__cCsj|dkr|n||j}||jks*|jdkr2td��t�d|jj|j|d�d}|�d�}|�t	�}|S)z>Gets the packing format for a single value stored in the list.r� Requested position out of range.�8srcri)
r��
IndexErrorr�r�r�rVr�rjrkrl)rC�positionr�r|�
fmt_as_strrrr�_get_packing_formatds��

z!ShareableList._get_packing_formatcCs\|dkr|n||j}||jks*|jdkr2td��t�d|jj|j|�d}|j|}|S)z9Gets the back transformation function for a single value.rr��b)r�r�r�r�r�rVr��_back_transforms_mapping)rCr��transform_code�transform_functionrrr�_get_back_transformts��
z!ShareableList._get_back_transformcCs~|dkr|n||j}||jks*|jdkr2td��t�d|jj|j|d|�t��|�	|�}t�d|jj|j
||�dS)zvSets the packing format and back transformation code for a
        single value in the list at the specified position.rr�r�rcr�N)r�r�r�r�r�rVr�r�rlrrr�)rCr�r�rer�rrr�!_set_packing_format_and_transform�s �
�z/ShareableList._set_packing_format_and_transformcCsjz6|jt|jd|��}t�|�|�|jj|�\}Wntk
rRtd��YnX|�	|�}||�}|S)Nzindex out of range)
r�r�r�r�r�r�r�rVr�r�)rCr��offsetr��back_transformrrr�__getitem__�s��

zShareableList.__getitem__cCs�z&|jt|jd|��}|�|�}Wntk
rBtd��YnXt|ttf�sf|jt	|�}|}nZt|t�rz|�
t�n|}t|�|j|kr�t
d��|ddkr�|}n|jt|j|f}|�|||�t�||jj||�dS)Nzassignment index out of rangez(bytes/str item exceeds available storagerr~)r�r�r�r�r�rorprqrtrur�rlr	rr�r�r�r�rV)rCr�rer��current_format�
new_format�
encoded_valuerrr�__setitem__�s6�����zShareableList.__setitem__cCst|j|jjd�dfS)Nrsr)rrPr�rrNrrrrQ�szShareableList.__reduce__cCst�d|jjd�dS)Nrar)r�r�r�rVrNrrr�__len__�szShareableList.__len__cCs"|jj�dt|��d|jj�d�S)NrRz, name=rS)rPrT�listr�rrNrrrrU�szShareableList.__repr__csd��fdd�t�j�D��S)z>The struct packing format used by all currently stored values.r�c3s|]}��|�VqdSrL)r�)rx�irNrrr}�sz'ShareableList.format.<locals>.<genexpr>)r��ranger�rNrrNr�format�s�zShareableList.formatcCs|j�d�S)z=The struct packing format used for metainfo on storage sizes.ra�r�rNrrrr��sz#ShareableList._format_size_metainfocCs
d|jS)z?The struct packing format used for the values' packing formats.r�r�rNrrrr��sz&ShareableList._format_packing_metainfocCs
d|jS)z?The struct packing format used for the values' back transforms.r�r�rNrrrr��sz*ShareableList._format_back_transform_codescCs|jddS)Nrrcr�rNrrrr��sz ShareableList._offset_data_startcCs|jt|j�SrL)r�r�r�rNrrrr��sz%ShareableList._offset_packing_formatscCs|j|jdS)Nrc)r�r�rNrrrr��sz*ShareableList._offset_back_transform_codescst�fdd�|D��S)zCL.count(value) -> integer -- return number of occurrences of value.c3s|]}�|kVqdSrLr)rx�entryrdrrr}�sz&ShareableList.count.<locals>.<genexpr>)r�)rCrerrdr�count�szShareableList.countcCs4t|�D]\}}||kr|Sqt|�d���dS)zpL.index(value) -> integer -- return first index of value.
        Raises ValueError if the value is not present.z not in this containerN)�	enumerater)rCrer�r�rrr�index�s
zShareableList.index)N)"rTr\r]r^r�float�boolrprqrPrtrvr��staticmethodrrrKr�r�r�r�r�rQr�rUr_r�r�r�r�r�r�r�r�r�rrrrr�s^
��

F






)r^�__all__�	functoolsrr,rr9r�rrr1r!r"�O_CREATr rrr
rrrlrrrrr�<module>s,

EXy�@sBddlZddlZddlmZddlmZddlmZmZejZ	dddd	d
dgZ
ejejej
ejejejejejejejejejejejd�Zd
d�Zdd�Zdd�Zddd�dd�Zddd�dd	�Zdd
�Zd&dd�Z dd�Z!dd�Z"dd�Z#dZ$iZ%e�&�Z'Gdd�de(�Z)Gd d!�d!e)�Z*Gd"d#�d#e)�Z+Gd$d%�d%e+�Z,dS)'�N�)�heap)�get_context)�	reduction�assert_spawning�RawValue�RawArray�Value�Array�copy�synchronized)�c�u�b�B�h�H�i�I�l�L�q�Q�f�dcCs t�|�}t�|�}t||d�S�N)�ctypes�sizeofr�
BufferWrapper�
rebuild_ctype)�type_�size�wrapper�r#�2/usr/lib/python3.8/multiprocessing/sharedctypes.py�
_new_value's

r%cGs<t�||�}t|�}t�t�|�dt�|��|j|�|S)z>
    Returns a ctypes object allocated from shared memory
    r)�typecode_to_type�getr%r�memset�	addressofr�__init__)�typecode_or_type�argsr �objr#r#r$r,s

cCsjt�||�}t|t�rD||}t|�}t�t�|�dt�|��|S|t	|�}t|�}|j
|�|SdS)z=
    Returns a ctypes array allocated from shared memory
    rN)r&r'�
isinstance�intr%rr(r)r�lenr*)r+�size_or_initializerr r-�resultr#r#r$r6s

T)�lock�ctxcGsXt|f|��}|dkr|S|dkr4|p*t�}|��}t|d�sJtd|��t|||d�S)z6
    Return a synchronization wrapper for a Value
    F�TN�acquire�%r has no method 'acquire'�r4)rr�RLock�hasattr�AttributeErrorr)r+r3r4r,r-r#r#r$r	Fs

cCsTt||�}|dkr|S|dkr0|p&t�}|��}t|d�sFtd|��t|||d�S)z9
    Return a synchronization wrapper for a RawArray
    Fr5r6r7r8)rrr9r:r;r)r+r1r3r4r-r#r#r$r
Ts


cCstt|��}|t�|�d<|S)Nr)r%�typer�pointer)r-�new_objr#r#r$rbscCs�t|t�rtd��|pt�}t|tj�r4t|||�St|tj�rd|jtj	krXt
|||�St|||�St|�}zt
|}WnRtk
r�dd�|jD�}dd�|D�}d|j}t|tf|�}t
|<YnX||||�SdS)Nzobject already synchronizedcSsg|]}|d�qS)rr#)�.0�fieldr#r#r$�
<listcomp>vsz synchronized.<locals>.<listcomp>cSsi|]}|t|��qSr#)�
make_property)r?�namer#r#r$�
<dictcomp>wsz synchronized.<locals>.<dictcomp>�Synchronized)r.�SynchronizedBase�AssertionErrorrr�_SimpleCDatarEr
�_type_�c_char�SynchronizedString�SynchronizedArrayr<�class_cache�KeyError�_fields_�__name__)r-r3r4�cls�scls�namesr�	classnamer#r#r$rgs"

cCs@t|�t|tj�r(t|j|j|jffStt|�|jdffSdSr)	rr.rr
rrI�_wrapper�_length_r<)r-r#r#r$�reduce_ctype�srWcCs8|dk	r||}t�|t�|��}|�|�}||_|Sr)�_ForkingPickler�registerrW�create_memoryview�from_bufferrU)r r"�length�bufr-r#r#r$r�s
rcCsPz
t|WStk
rJi}tt|fd|�||t|<||YSXdS)N�)�
prop_cacherN�exec�template)rCrr#r#r$rB�s
rBz�
def get%s(self):
    self.acquire()
    try:
        return self._obj.%s
    finally:
        self.release()
def set%s(self, value):
    self.acquire()
    try:
        self._obj.%s = value
    finally:
        self.release()
%s = property(get%s, set%s)
c@sFeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dS)rFNcCsB||_|r||_n|ptdd�}|��|_|jj|_|jj|_dS)NT)�force)�_obj�_lockrr9r6�release)�selfr-r3r4r#r#r$r*�s

zSynchronizedBase.__init__cCs
|j��Sr)rd�	__enter__�rfr#r#r$rg�szSynchronizedBase.__enter__cGs|jj|�Sr)rd�__exit__)rfr,r#r#r$ri�szSynchronizedBase.__exit__cCst|�t|j|jffSr)rrrcrdrhr#r#r$�
__reduce__�szSynchronizedBase.__reduce__cCs|jSr�rcrhr#r#r$�get_obj�szSynchronizedBase.get_objcCs|jSr)rdrhr#r#r$�get_lock�szSynchronizedBase.get_lockcCsdt|�j|jfS)Nz<%s wrapper for %s>)r<rPrcrhr#r#r$�__repr__�szSynchronizedBase.__repr__)NN)
rP�
__module__�__qualname__r*rgrirjrlrmrnr#r#r#r$rF�s

rFc@seZdZed�ZdS)rE�valueN)rProrprBrqr#r#r#r$rE�srEc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)rLcCs
t|j�Sr)r0rcrhr#r#r$�__len__�szSynchronizedArray.__len__c
Cs&|�|j|W5QR�SQRXdSrrk)rfrr#r#r$�__getitem__�szSynchronizedArray.__getitem__c	Cs|�||j|<W5QRXdSrrk)rfrrqr#r#r$�__setitem__�szSynchronizedArray.__setitem__c
Cs*|�|j||�W5QR�SQRXdSrrk)rf�start�stopr#r#r$�__getslice__�szSynchronizedArray.__getslice__c	Cs"|�||j||�<W5QRXdSrrk)rfrurv�valuesr#r#r$�__setslice__�szSynchronizedArray.__setslice__N)rProrprrrsrtrwryr#r#r#r$rL�s
rLc@seZdZed�Zed�ZdS)rKrq�rawN)rProrprBrqrzr#r#r#r$rK�srK)NN)-r�weakref�rr�contextrr�ForkingPicklerrX�__all__rJ�c_wchar�c_byte�c_ubyte�c_short�c_ushort�c_int�c_uint�c_long�c_ulong�
c_longlong�c_ulonglong�c_float�c_doubler&r%rrr	r
rrrWrrBrar_�WeakKeyDictionaryrM�objectrFrErLrKr#r#r#r$�<module>
sL�


	 X�@s$ddlZddlZddlZddlZddlmZmZddlmZddlm	Z	ddlm
Z
ddd	d
ddd
gZejdkrzdZ
dZneedd�Z
ej���d�Zer�ej�ejd�anejadd	�Zdd
�Zdd�Zdd�Zdd�Zd&dd�Zdd�Zdd�Zdd�ZgZ dd �Z!d!d"�Z"d#d$�Z#d%d
�Z$dS)'�N�)�get_start_method�set_start_method)�process)�	reduction)�util�_main�freeze_support�set_executable�get_executable�get_preparation_data�get_command_line�import_main_path�win32F�frozenzpythonservice.exez
python.execCs|adS�N��_python_exe)�exe�r�+/usr/lib/python3.8/multiprocessing/spawn.pyr
)scCstSrrrrrrr-scCs$t|�dkr|ddkrdSdSdS)z=
    Return whether commandline indicates we are forking
    �r�--multiprocessing-forkTFN)�len)�argvrrr�
is_forking4srcCsdttj�r`i}tjdd�D]0}|�d�\}}|dkr@d||<qt|�||<qtf|�t��dS)zE
    Run code for process object if this in not the main process
    rN�=�None)r�sysr�split�int�
spawn_main�exit)�kwds�arg�name�valuerrrr	>s


cKshttdd�r(tjdgdd�|��D�Sd}|d�dd	�|��D��;}t��}tg|d
|dgSdS)zJ
    Returns prefix of command line used for spawning a child process
    rFrcSsg|]}d|�qS)�%s=%rr��.0�itemrrr�
<listcomp>Tsz$get_command_line.<locals>.<listcomp>z<from multiprocessing.spawn import spawn_main; spawn_main(%s)z, css|]}d|VqdS)r'Nrr(rrr�	<genexpr>Wsz#get_command_line.<locals>.<genexpr>z-cN)�getattrr�
executable�items�joinr�_args_from_interpreter_flagsr)r#�prog�optsrrrr
Ns�cCs�ttj�std��tjdkrrddl}ddl}|dk	rL|�|j|j	Bd|�}nd}t
j||d�}|�|t
j�}|}n"ddlm}	||	j_|}t
�|�}t||�}
t�|
�dS)	z7
    Run code specified by data received over pipe
    zNot forkingrrNF)�source_processr)�resource_tracker)rrr�AssertionError�platform�msvcrt�_winapiZOpenProcessZSYNCHRONIZEZPROCESS_DUP_HANDLEr�	duplicate�open_osfhandle�os�O_RDONLY�r5�_resource_tracker�_fd�duprr")�pipe_handle�
parent_pid�
tracker_fdr8r9r4�
new_handle�fd�parent_sentinelr5�exitcoderrrr!\s,

��

r!c	Cs`tj|ddd��@}dt��_z$tj�|�}t|�tj�|�}W5t��`XW5QRX|�	|�S)N�rbT)�closefd)
r<�fdopenr�current_process�_inheritingr�pickle�load�prepare�
_bootstrap)rFrG�from_parent�preparation_data�selfrrrrxs
cCstt��dd�rtd��dS)NrMFa
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.)r-rrL�RuntimeErrorrrrr�_check_not_importing_main�srVcCst�ttjt��jd�}tjdk	r2tj��|d<t	j
��}z|�d�}Wnt
k
r^YnXtj||<|j||t	jtjt��t�d�t	jd}t|jdd�}|dk	r�||d<nft	jd	ks�t�st�st|d
d�}|dk	�rtj
�|��s
tjdk	�r
tj
�tj|�}tj
�|�|d<|S)zM
    Return info about parent needed by child to unpickle process object
    )�
log_to_stderr�authkeyN�	log_levelr>)r%�sys_path�sys_argv�orig_dir�dir�start_method�__main__r%�init_main_from_namer�__file__�init_main_from_path)rV�dictr�_log_to_stderrrrLrX�_logger�getEffectiveLevelr�path�copy�index�
ValueError�ORIGINAL_DIR�updaterr<�getcwdr�modulesr-�__spec__r7�WINEXE�
WINSERVICE�isabsr0�normpath)r%�drZ�i�main_module�
main_mod_name�	main_pathrrrr�sD�


�


�cCs�d|kr|dt��_d|kr,|dt��_d|krD|drDt��d|kr^t���|d�d|krp|dt_	d|kr�|dt_
d|kr�t�|d�d|kr�|dt_
d	|kr�t|d	d
d�d|kr�t|d�nd
|kr�t|d
�dS)zE
    Try to get current process ready to unpickle process object
    r%rXrWrYrZr[r]r\r^T)�forcer`rbN)rrLr%rXrrW�
get_logger�setLevelrrgrr<�chdirrkr�_fixup_main_from_name�_fixup_main_from_path)�datarrrrP�s,


rPcCs~tjd}|dks|�d�r dSt|jdd�|kr6dSt�|�t�d�}t	j
|ddd�}|j�|�|tjd<tjd<dS)Nr_z	.__main__r%�__mp_main__T)�run_name�	alter_sys)
rrn�endswithr-ro�old_main_modules�append�types�
ModuleType�runpy�
run_module�__dict__rl)�mod_name�current_mainrv�main_contentrrrr}�s


�r}cCs�tjd}tj�tj�|��d}|dkr.dSt|dd�|krBdSt�|�t	�
d�}tj|dd�}|j
�|�|tjd<tjd<dS)Nr_rZipythonrar�)r�)rrnr<rg�splitext�basenamer-r�r�r�r�r��run_pathr�rl)rxr��	main_namervr�rrrr~	s


�r~cCst|�dS)z<
    Set sys.modules['__main__'] to module at main_path
    N)r~)rxrrrr%s)NN)%r<rr�r�r>rrr�contextrr�__all__r7rprqr-r.�lowerr�rgr0�exec_prefixrr
rrr	r
r!rrVrr�rPr}r~rrrrr�<module>sD�


2&X,�@s,ddddddgZddlZddlZddlZddlZddlZdd	lmZdd
lmZddlm	Z	zddlm
Z
mZWnek
r�ed
��YnXe
ed��\ZZej
jZGdd�de�Z
Gdd�de
�ZGdd�de�ZGdd�de
�ZGdd�de
�ZGdd�de�ZGdd�de�ZGdd�dej�ZdS)�Lock�RLock�	Semaphore�BoundedSemaphore�	Condition�Event�N�)�context)�process)�util)�SemLock�
sem_unlinkz�This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770.�c@s\eZdZe��Zdd�Zedd��Zdd�Z	dd�Z
d	d
�Zdd�Zd
d�Z
edd��ZdS)rc	Cs�|dkrtj��}|��}tjdkp*|dk}td�D]>}z t�||||�	�|�}|_
Wntk
rlYq4Xq|q4td��t�
d|j�|��tjdkr�dd�}	t�||	�|j
jdk	r�dd	lm}
|
|j
jd
�tj|tj|j
jfdd�dS)
N�win32�fork�dzcannot find name for semaphorezcreated semlock with handle %scSs|j��dS�N)�_semlock�_after_fork)�obj�r�1/usr/lib/python3.8/multiprocessing/synchronize.pyrGsz%SemLock.__init__.<locals>._after_forkr)�register�	semaphorer)�exitpriority)r	�_default_context�get_context�get_start_method�sys�platform�range�_multiprocessingr�
_make_namer�FileExistsErrorr�debug�handle�
_make_methods�register_after_fork�name�resource_trackerr�Finalize�_cleanup)�self�kind�value�maxvalue�ctxr(�
unlink_now�i�slrrrrr�__init__2s8
�
�zSemLock.__init__cCs"ddlm}t|�||d�dS)Nr)�
unregisterr)r)r5r
)r(r5rrrr+TszSemLock._cleanupcCs|jj|_|jj|_dSr)r�acquire�release�r,rrrr&Zs
zSemLock._make_methodscCs
|j��Sr)r�	__enter__r8rrrr9^szSemLock.__enter__cGs|jj|�Sr)r�__exit__�r,�argsrrrr:aszSemLock.__exit__cCsDt�|�|j}tjdkr,t���|j�}n|j}||j|j	|j
fS)Nr)r	�assert_spawningrrr�get_spawning_popen�duplicate_for_childr%r-r/r()r,r3�hrrr�__getstate__ds

zSemLock.__getstate__cCs,tjj|�|_t�d|d�|��dS)Nz recreated blocker with handle %rr)r!r�_rebuildrrr$r&�r,�staterrr�__setstate__mszSemLock.__setstate__cCsdt��jdttj�fS)Nz%s-%sZ	semprefix)r
�current_process�_config�nextr�_randrrrrr"rs�zSemLock._make_nameN)�__name__�
__module__�__qualname__�tempfile�_RandomNameSequencerIr4�staticmethodr+r&r9r:rArEr"rrrrr.s"
	rc@s&eZdZd	dd�Zdd�Zdd�ZdS)
rrcCstj|t|t|d�dS�N�r0)rr4�	SEMAPHORE�
SEM_VALUE_MAX�r,r.r0rrrr4}szSemaphore.__init__cCs
|j��Sr)r�
_get_valuer8rrr�	get_value�szSemaphore.get_valuecCs8z|j��}Wntk
r&d}YnXd|jj|fS)N�unknownz<%s(value=%s)>)rrU�	Exception�	__class__rJ�r,r.rrr�__repr__�s

zSemaphore.__repr__N)r)rJrKrLr4rVr[rrrrr{s
c@seZdZddd�Zdd�ZdS)rrcCstj|t|||d�dSrP�rr4rRrTrrrr4�szBoundedSemaphore.__init__cCs>z|j��}Wntk
r&d}YnXd|jj||jjfS)NrWz<%s(value=%s, maxvalue=%s)>)rrUrXrYrJr/rZrrrr[�s
�zBoundedSemaphore.__repr__N)r�rJrKrLr4r[rrrrr�s
c@seZdZdd�Zdd�ZdS)rcCstj|tdd|d�dS�NrrQr\�r,r0rrrr4�sz
Lock.__init__cCs�zf|j��r8t��j}t��jdkrd|dt��j7}n,|j��dkrLd}n|j��dkr`d}nd}Wnt	k
r~d}YnXd	|j
j|fS)
N�
MainThread�|r�Noner�SomeOtherThread�SomeOtherProcessrWz<%s(owner=%s)>)r�_is_miner
rFr(�	threading�current_threadrU�_countrXrYrJ)r,r(rrrr[�s


z
Lock.__repr__Nr]rrrrr�sc@seZdZdd�Zdd�ZdS)rcCstj|tdd|d�dSr^)rr4�RECURSIVE_MUTEXr_rrrr4�szRLock.__init__cCs�z||j��rBt��j}t��jdkr6|dt��j7}|j��}n8|j��dkrZd\}}n |j��dkrrd\}}nd\}}Wnt	k
r�d\}}YnXd	|j
j||fS)
Nr`rar)rbrr)rc�nonzero)rdrj)rWrW�<%s(%s, %s)>)rrer
rFr(rfrgrhrUrXrYrJ)r,r(�countrrrr[�s



zRLock.__repr__Nr]rrrrr�sc@sleZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	ddd�Z
ddd�Zdd�Zddd�Z
dS)rNcCs>|p
|��|_|�d�|_|�d�|_|�d�|_|��dS�Nr)r�_lockr�_sleeping_count�_woken_count�_wait_semaphorer&)r,�lockr0rrrr4�s
zCondition.__init__cCst�|�|j|j|j|jfSr)r	r=rnrorprqr8rrrrA�s

�zCondition.__getstate__cCs |\|_|_|_|_|��dSr)rnrorprqr&rCrrrrE�s
�
zCondition.__setstate__cCs
|j��Sr)rnr9r8rrrr9�szCondition.__enter__cGs|jj|�Sr)rnr:r;rrrr:�szCondition.__exit__cCs|jj|_|jj|_dSr)rnr6r7r8rrrr&�s
zCondition._make_methodscCsJz|jj��|jj��}Wntk
r4d}YnXd|jj|j|fS)NrWrk)rorrUrprXrYrJrn)r,�num_waitersrrrr[�s

�
zCondition.__repr__c	Cs~|jj��std��|j��|jj��}t|�D]}|j��q2z|j
�	d|�W�S|j��t|�D]}|j�	�qhXdS)Nz,must acquire() condition before using wait()T)rnrre�AssertionErrorror7rhr rpr6rq)r,�timeoutrlr2rrr�wait�s�

zCondition.waitrcCs�|jj��std��|j�d�r(td��|j�d�rN|j�d�}|s(td��q(d}||krz|j�d�rz|j��|d7}qR|r�t	|�D]}|j��q�|j�d�r�q�dS)Nzlock is not ownedFz<notify: Should not have been able to acquire _wait_semaphorez>notify: Bug in sleeping_count.acquire- res should not be Falserr)
rnrrertrqr6rpror7r )r,�n�res�sleepersr2rrr�notifys$��

zCondition.notifycCs|jtjd�dS)N)rw)rzr�maxsizer8rrr�
notify_all(szCondition.notify_allcCsd|�}|r|S|dk	r$t��|}nd}d}|s`|dk	rN|t��}|dkrNq`|�|�|�}q,|Srm)�time�	monotonicrv)r,�	predicateru�result�endtime�waittimerrr�wait_for+s
zCondition.wait_for)N)N)r)N)rJrKrLr4rArEr9r:r&r[rvrzr|r�rrrrr�s


c@s6eZdZdd�Zdd�Zdd�Zdd�Zdd
d�Zd	S)
rcCs |�|���|_|�d�|_dSrm)rr�_condr�_flagr_rrrr4CszEvent.__init__c	CsD|j�4|j�d�r,|j��W5QR�dSW5QR�dSQRXdS�NFT)r�r�r6r7r8rrr�is_setGs

zEvent.is_setc	Cs6|j�&|j�d�|j��|j��W5QRXdS�NF)r�r�r6r7r|r8rrr�setNs
z	Event.setc	Cs"|j�|j�d�W5QRXdSr�)r�r�r6r8rrr�clearTszEvent.clearNc	Csh|j�X|j�d�r |j��n|j�|�|j�d�rP|j��W5QR�dSW5QR�dSQRXdSr�)r�r�r6r7rv)r,rurrrrvXs
z
Event.wait)N)rJrKrLr4r�r�r�rvrrrrrAs
c@sZeZdZddd�Zdd�Zdd�Zedd	��Zejd
d	��Zedd��Z	e	jd
d��Z	dS)�BarrierNc	CsRddl}ddlm}||�d�d�}|��}|�|||||f�d|_d|_dS)Nrr)�
BufferWrapperr2r)�struct�heapr��calcsizerrE�_staterh)	r,�parties�actionrur0r�r��wrapper�condrrrr4jszBarrier.__init__cCs.|\|_|_|_|_|_|j���d�|_dS)Nr2)�_parties�_action�_timeoutr��_wrapper�create_memoryview�cast�_arrayrCrrrrEss
�zBarrier.__setstate__cCs|j|j|j|j|jfSr)r�r�r�r�r�r8rrrrAxs�zBarrier.__getstate__cCs
|jdSrm�r�r8rrrr�|szBarrier._statecCs||jd<dSrmr�rZrrrr��scCs
|jdS�Nrr�r8rrrrh�szBarrier._countcCs||jd<dSr�r�rZrrrrh�s)NN)
rJrKrLr4rErA�propertyr��setterrhrrrrr�hs
	


r�)�__all__rfrrMr!r}�r	r
rrr
�ImportError�listr rirRrS�objectrrrrrrr�rrrr�<module>s8�	Mo'X�,�@s�ddlZddlZddlZddlZddlZddlZddlmZddlm	Z	ddddd	d
ddd
ddddddgZ
dZdZdZ
dZdZdZdZdadadd�Zdd�Zdd�Zdd�Zdd	�Zd@d d
�Zd!d"�Zd#d$�Ze�Zd%d&�Zd'd�Ze��Z e�!�Z"d(d)�Z#d*d�Z$iZ%e�!�Z&Gd+d�de'�Z(dAd,d-�Z)d.d
�Z*da+eee)e	j,e	j-fd/d0�Z.e�/e.�Gd1d�de'�Z0Gd2d�dej1�Z2ze�3d3�Z4Wne5k
�r�d4Z4YnXd5d�Z6d6d7�Z7d8d9�Z8d:d;�Z9d<d=�Z:d>d?�Z;dS)B�N)�_args_from_interpreter_flags�)�process�	sub_debug�debug�info�sub_warning�
get_logger�
log_to_stderr�get_temp_dir�register_after_fork�
is_exiting�Finalize�ForkAwareThreadLock�ForkAwareLocal�close_all_fds_except�SUBDEBUG�
SUBWARNING��
���multiprocessingz+[%(levelname)s/%(processName)s] %(message)sFcGstrtjt|f|��dS�N)�_logger�logr��msg�args�r�*/usr/lib/python3.8/multiprocessing/util.pyr,scGstrtjt|f|��dSr)rr�DEBUGrrrr r0scGstrtjt|f|��dSr)rr�INFOrrrr r4scGstrtjt|f|��dSr)rrrrrrr r8scCs|ddl}|��z\tsj|�t�adt_ttd�rFt�	t
�t�t
�n$tj�
t
dif�tj�t
dif�W5|��XtS)z0
    Returns logger used by multiprocessing
    rN�
unregisterr)�logging�_acquireLock�_releaseLockr�	getLogger�LOGGER_NAME�	propagate�hasattr�atexitr#�_exit_function�register�
_exithandlers�remove�append)r$rrr r	<s



cCsJddl}t�}|�t�}|��}|�|�|�|�|rB|�|�dat	S)zB
    Turn on logging and add a handler which prints to stderr
    rNT)
r$r	�	Formatter�DEFAULT_LOGGING_FORMAT�
StreamHandler�setFormatter�
addHandler�setLevel�_log_to_stderrr)�levelr$�logger�	formatter�handlerrrr r
Ws



cCs tjdkrdSttd�rdSdS)N�linuxT�getandroidapilevelF)�sys�platformr*rrrr �#_platform_supports_abstract_socketsls


r@cCs@|sdSt|t�r|ddkSt|t�r4|ddkStd��dS)NFr�z(address type of {address!r} unrecognized)�
isinstance�bytes�str�	TypeError)�addressrrr �is_abstract_socket_namespacets

rGcCs&||�t��}|dk	r"d|jd<dS)N�tempdir)r�current_process�_config)�rmtreerHrIrrr �_remove_temp_dir�srLcCsft��j�d�}|dkrbddl}ddl}|jdd�}td|�tdt	|j
|fdd�|t��jd<|S)NrHrzpymp-)�prefixzcreated temp directory %si����)r�exitpriority)rrIrJ�get�shutil�tempfile�mkdtemprrrLrK)rHrPrQrrr r�s
�cCsftt���}|��|D]H\\}}}}z||�Wqtk
r^}ztd|�W5d}~XYqXqdS)Nz after forker raised exception %s)�list�_afterfork_registry�items�sort�	Exceptionr)rU�index�ident�func�obj�errr �_run_after_forkers�sr]cCs|ttt�t|�|f<dSr)rT�next�_afterfork_counter�id)r[rZrrr r�sc@sFeZdZdZddd�Zdeeejfdd�Z	dd	�Z
d
d�Zdd
�ZdS)rzA
    Class which supports object finalization using weakrefs
    rNcCs�|dk	r&t|t�s&td�|t|����|dk	r>t�||�|_n|dkrNtd��||_	||_
|p`i|_|tt
�f|_t��|_|t|j<dS)Nz3Exitpriority ({0!r}) must be None or int, not {1!s}z+Without object, exitpriority cannot be None)rB�intrE�format�type�weakref�ref�_weakref�
ValueError�	_callback�_args�_kwargsr^�_finalizer_counter�_key�os�getpid�_pid�_finalizer_registry)�selfr[�callbackr�kwargsrNrrr �__init__�s"��

zFinalize.__init__cCs�z||j=Wntk
r(|d�YnbX|j|�krD|d�d}n$|d|j|j|j�|j|j|j�}d|_|_|_|_|_|SdS)zQ
        Run the callback unless it has already been called or cancelled
        zfinalizer no longer registeredz+finalizer ignored because different processNz/finalizer calling %s with args %s and kwargs %s)rl�KeyErrorrorhrirjrf)rq�wrrprrn�resrrr �__call__�s$��zFinalize.__call__cCsDzt|j=Wntk
r Yn Xd|_|_|_|_|_dS)z3
        Cancel finalization of the object
        N)rprlrurfrhrirj�rqrrr �cancel�s��zFinalize.cancelcCs
|jtkS)zS
        Return whether this finalizer is still waiting to invoke callback
        )rlrpryrrr �still_active�szFinalize.still_activec	Cs�z|��}Wnttfk
r(d}YnX|dkr>d|jjSd|jjt|jd|j�f}|jrr|dt|j�7}|j	r�|dt|j	�7}|j
ddk	r�|dt|j
d�7}|dS)	Nz<%s object, dead>z<%s object, callback=%s�__name__z, args=z	, kwargs=rz, exitpriority=�>)rf�AttributeErrorrE�	__class__r|�getattrrhrirDrjrl)rqr[�xrrr �__repr__�s"
�zFinalize.__repr__)rNN)
r|�
__module__�__qualname__�__doc__rtrprrmrnrxrzr{r�rrrr r�s
�
c	s�tdkrdS�dkrdd��n�fdd���fdd�tt�D�}|jdd�|D]P}t�|�}|dk	rPtd	|�z
|�WqPtk
r�d
dl}|��YqPXqP�dkr�t��dS)z�
    Run all finalizers whose exit priority is not None and at least minpriority

    Finalizers with highest priority are called first; finalizers with
    the same priority will be called in reverse order of creation.
    NcSs|ddk	S�Nrr��prrr �<lambda>�z!_run_finalizers.<locals>.<lambda>cs|ddk	o|d�kSr�rr�)�minpriorityrr r�r�csg|]}�|�r|�qSrr)�.0�key)�frr �
<listcomp>#sz#_run_finalizers.<locals>.<listcomp>T)�reversez
calling %sr)	rprSrVrOrrW�	traceback�	print_exc�clear)r��keysr��	finalizerr�r)r�r�r �_run_finalizerss$



r�cCstp
tdkS)z6
    Returns true if the process is shutting down
    N)�_exitingrrrr r
8scCs�ts�da|d�|d�|d�|�dk	rr|�D] }|jr0|d|j�|j��q0|�D]}|d|j�|��qX|d�|�dS)NTzprocess shutting downz2running all "atexit" finalizers with priority >= 0rz!calling terminate() for daemon %szcalling join() for process %sz)running the remaining "atexit" finalizers)r��daemon�name�_popen�	terminate�join)rrr��active_childrenrIr�rrr r,@s	



r,c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
rcCs|��t|tj�dSr)�_resetrrryrrr rtqszForkAwareThreadLock.__init__cCs"t��|_|jj|_|jj|_dSr)�	threading�Lock�_lock�acquire�releaseryrrr r�us

zForkAwareThreadLock._resetcCs
|j��Sr)r��	__enter__ryrrr r�zszForkAwareThreadLock.__enter__cGs|jj|�Sr)r��__exit__)rqrrrr r�}szForkAwareThreadLock.__exit__N)r|r�r�rtr�r�r�rrrr rpsc@seZdZdd�Zdd�ZdS)rcCst|dd��dS)NcSs
|j��Sr)�__dict__r�)r[rrr r��r�z)ForkAwareLocal.__init__.<locals>.<lambda>)rryrrr rt�szForkAwareLocal.__init__cCst|�dfS)Nr)rcryrrr �
__reduce__�szForkAwareLocal.__reduce__N)r|r�r�rtr�rrrr r�s�SC_OPEN_MAX�cCsbt|�dtg}|��|dtks,td��tt|�d�D] }t�||d||d�q<dS)N���zfd too larger)rS�MAXFDrV�AssertionError�range�lenrm�
closerange)�fds�irrr r�s
c	Cs�tjdkrdSztj��Wnttfk
r4YnXz@t�tjtj�}zt|dd�t_Wnt�|��YnXWnttfk
r�YnXdS)NF)�closefd)	r>�stdin�close�OSErrorrgrm�open�devnull�O_RDONLY)�fdrrr �_close_stdin�s

r�c	CsTztj��Wnttfk
r&YnXztj��Wnttfk
rNYnXdSr)r>�stdout�flushr~rg�stderrrrrr �_flush_std_streams�sr�cCsxddl}tttt|���}t��\}}z6|�|t�	|�gd|dddddddd||ddd�W�St�|�t�|�XdS)NrTr�F)
�_posixsubprocess�tuple�sorted�maprarm�piper��	fork_exec�fsencode)�pathr�passfdsr��errpipe_read�
errpipe_writerrr �spawnv_passfds�s2
�
r�cGs|D]}t�|�qdS)z/Close each file descriptor given as an argumentN)rmr�)r�r�rrr �	close_fds�sr�cCsZddlm}t��ddlm}|j��ddlm}|j	��t
�|��|��dS)zKCleanup multiprocessing resources when multiprocessing tests
    completed.r)�support)�
forkserver)�resource_trackerN)
�testr�r�_cleanuprr��_forkserver�_stopr��_resource_trackerr��
gc_collect�
reap_children)r�r�r�rrr �_cleanup_tests�s

r�)N)N)<rm�	itertoolsr>rdr+r��
subprocessr�r�__all__�NOTSETrr!r"rr(r2rr7rrrrr	r
r@rG�abstract_sockets_supportedrLr�WeakValueDictionaryrT�countr_r]rrprk�objectrr�r
r�r�rIr,r-r�localr�sysconfr�rWrr�r�r�r�r�rrrr �<module>
s��

		V
,�
*



X19�&@s(dZdZdZdZdZdZdZdZdZdd	l	Z	dd	l
Z
dd	lZdd	lZdd
lTddd
ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0g&Z
d1d2�Zd3d�Zd4d�Zd5d
�Zd6d�Zd7d�Zd8d�Zejje_d9d�Zd:d�Zd;d�Zd<d�Zzdd=lmZWnek
�r(d	ZYnXd>d�Zd?d�Zd@d�ZdAd �Z dBdC�Z!zddDlm"Z"Wnek
�r|e!Z#Yn
XdEd!�Z#zddFlm$Z$m%Z&Wnek
�r�e#Z'YnXdGdH�Z(dIdJ�Z)dKd*�Z'e*e
dL��o�e
�+�dMdNkZ,dRdOd,�Z-dPd0�Z.zddQlm/Z0Wnek
�r"YnXd	S)Sz�Common pathname manipulations, WindowsNT/95 version.

Instead of importing this module directly, import os and refer to this
module as os.path.
�.�..�\�;�/z.;C:\bin�nul�N)�*�normcase�isabs�join�
splitdrive�split�splitext�basename�dirname�commonprefix�getsize�getmtime�getatime�getctime�islink�exists�lexists�isdir�isfile�ismount�
expanduser�
expandvars�normpath�abspath�curdir�pardir�sep�pathsep�defpath�altsep�extsep�devnull�realpath�supports_unicode_filenames�relpath�samefile�sameopenfile�samestat�
commonpathcCst|t�rdSdSdS)N�\/�\/)�
isinstance�bytes��path�r5�/usr/lib/python3.8/ntpath.py�
_get_bothseps"s
r7cCs8t�|�}t|t�r$|�dd���S|�dd���SdS)zaNormalize case of pathname.

    Makes all characters lowercase and all slashes into backslashes.�/�\rrN)�os�fspathr1r2�replace�lower��sr5r5r6r	,s

cCsjt�|�}t|t�r,|�dd��d�rBdSn|�dd��d�rBdSt|�d}t|�d	koh|d	t|�kS)
zTest whether a path is absoluter8r9�\\?\Trr�\\?\�r)	r:r;r1r2r<�
startswithr�lenr7r>r5r5r6r
=s

c

GsTt�|�}t|t�r"d}d}d}nd}d}d}z�|sD|dd�|t|�\}}ttj|�D]~}t|�\}}	|	r�|	d|kr�|s�|s�|}|	}q\n*|r�||kr�|��|��kr�|}|	}q\|}|r�|d|kr�||}||	}q\|�r|d|k�r|�r|dd�|k�r|||WS||WSttt	fk
�rNt
jd	|f|���YnXdS)
Nr9r/�:rr0�:r���r)r:r;r1r2r�mapr=�	TypeError�AttributeError�BytesWarning�genericpath�_check_arg_types)
r4�pathsr"�seps�colon�result_drive�result_path�p�p_drive�p_pathr5r5r6rMsL


��
cCst�|�}t|�dk�rt|t�r0d}d}d}nd}d}d}|�||�}|dd�|dkr�|dd	�|kr�|�|d�}|d
kr�|dd�|fS|�||d�}||dkr�|dd�|fS|d
kr�t|�}|d|�||d�fS|dd�|k�r|dd�|dd�fS|dd�|fS)
a�Split a pathname into drive/UNC sharepoint and relative path specifiers.
    Returns a 2-tuple (drive_or_unc, path); either part may be empty.

    If you assign
        result = splitdrive(p)
    It is always true that:
        result[0] + result[1] == p

    If the path contained a drive letter, drive_or_unc will contain everything
    up to and including the colon.  e.g. splitdrive("c:/dir") returns ("c:", "/dir")

    If the path contained a UNC path, the drive_or_unc will contain the host name
    and share up to but not including the fourth directory separator character.
    e.g. splitdrive("//host/computer/dir") returns ("//host/computer", "/dir")

    Paths cannot contain both a drive letter and a UNC path.

    �r9r8rErrrFr�rGNrB)r:r;rDr1r2r<�find)rSr"r%rP�normp�index�index2r5r5r6r|s.

$cCsxt�|�}t|�}t|�\}}t|�}|rD||d|krD|d8}q&|d|�||d�}}|�|�pj|}|||fS)z~Split a pathname.

    Return tuple (head, tail) where tail is everything after the final slash.
    Either part may be empty.rBN)r:r;r7rrD�rstrip)rSrO�d�i�head�tailr5r5r6r
�s

cCs8t�|�}t|t�r$t�|ddd�St�|ddd�SdS)Nr9r8�.rrr)r:r;r1r2rL�	_splitext�rSr5r5r6r�s

cCst|�dS)z)Returns the final component of a pathnamerB�r
rcr5r5r6r�scCst|�dS)z-Returns the directory component of a pathnamerrdrcr5r5r6r�sc
Cs8zt�|�}Wntttfk
r*YdSXt�|j�S)zhTest whether a path is a symbolic link.
    This will always return false for Windows prior to 6.0.
    F)r:�lstat�OSError�
ValueErrorrJ�stat�S_ISLNK�st_mode�r4�str5r5r6r�s
c	Cs.zt�|�}Wnttfk
r(YdSXdS)zCTest whether a path exists.  Returns True for broken symbolic linksFT)r:rerfrgrkr5r5r6r�s
)�_getvolumepathnamecCstt�|�}t|�}t|�}t|�\}}|rD|d|krD|pB||kS||krPdStrl|�|�t|��|�kSdSdS)zaTest whether a path is a mount point (a drive root, the root of a
    share, or a mounted volume)rTFN)r:r;r7rrrmr\)r4rO�root�restr5r5r6rs
cCs�t�|�}t|t�rd}nd}|�|�s,|Sdt|�}}||kr\||t|�kr\|d7}q:dtjkrrtjd}nFdtjkr�|Sztjd}Wntk
r�d}YnXt	|tjd�}t|t�r�t�
|�}|dkr�t	t|�|d|��}|||d�S)	zLExpand ~ and ~user constructs.

    If user or $HOME is unknown, do nothing.�~�~rB�USERPROFILE�HOMEPATH�	HOMEDRIVE�N)r:r;r1r2rCrDr7�environ�KeyErrorr�fsencoder)r4�tilder^�n�userhome�driver5r5r6r!s.








cCs2t�|�}t|t�rhd|kr(d|kr(|Sddl}t|j|jdd�}d}d}d}d	}d}ttd
d�}nFd|kr|d|kr||Sddl}|j|jd}d
}d}d}d}d}tj}|dd�}	d}
t	|�}|
|k�r.||
|
d�}||k�rX||
dd�}t	|�}z&|�
|�}
|	||d|
d�7}	Wn*tk
�rR|	||7}	|d}
YnX�n�||k�rJ||
d|
d�|k�r�|	|7}	|
d7}
n�||
dd�}t	|�}z|�
|�}
Wn*tk
�r�|	||7}	|d}
YnhX|d|
�}
z.|dk�rt�tjt�
|
��}n||
}Wn"tk
�r<||
|}YnX|	|7}	�n�||k�r||
d|
d�|k�r�|	|7}	|
d7}
�q$||
d|
d�|k�r^||
dd�}t	|�}z|�
|�}
Wn.tk
�r�|	|||7}	|d}
YnlX|d|
�}
z.|dk�r"t�tjt�
|
��}n||
}Wn&tk
�rR|||
|}YnX|	|7}	n�|dd�}
|
d7}
||
|
d�}|�r�||k�r�|
|7}
|
d7}
||
|
d�}�q�z.|dk�r�t�tjt�
|
��}n||
}Wntk
�r||
}YnX|	|7}	|�r$|
d8}
n|	|7}	|
d7}
q�|	S)zfExpand shell variables of the forms $var, ${var} and %var%.

    Unknown variables are left unchanged.�$�%rNz_-�ascii�'�{�}�environb�$�%�'�{�}rBrV)r:r;r1r2�string�
ascii_letters�digits�getattrrvrDrZrgrx�fsdecoderw)r4r��varchars�quote�percent�brace�rbrace�dollarrv�resrZ�pathlen�c�var�valuer5r5r6rQs�













c	CsPt�|�}t|t�r*d}d}d}d}d}nd}d}d}d	}d
}|�|�rL|S|�||�}t|�\}}|�|�r�||7}|�|�}|�|�}d}|t	|�k�r,||r�|||kr�||=q�|||k�r"|dkr�||d|kr�||d|d�=|d8}n&|dk�r|�
|��r||=n|d7}q�|d7}q�|�sB|�sB|�|�||�|�S)
z0Normalize path, eliminating double slashes, etc.r9r8ra�..)s\\.\r@rrrr)z\\.\rArrB)
r:r;r1r2rCr<r�lstripr
rD�endswith�appendr)	r4r"r%r r!�special_prefixes�prefix�compsr^r5r5r6r�sF









cCs@t�|�}t|�s8t|t�r&t��}nt��}t||�}t|�S)z�Return the absolute version of a path as a fallback function in case
    `nt._getfullpathname` is not available or raises OSError. See bpo-31047 for
    more.

    )	r:r;r
r1r2�getcwdb�getcwdrr)r4�cwdr5r5r6�_abspath_fallback�s



r�)�_getfullpathnamec	Cs4ztt|��WSttfk
r.t|�YSXdS)z&Return the absolute version of a path.N)rr�rfrgr�r3r5r5r6rs)�_getfinalpathname�readlinkc
Cs�d}t�}t|�|kr�|�t|��z:|}t|�}t|�s\t|�sJ|}Wq�ttt|�|��}Wq
t	k
r�}z|j
|kr�WY�q��W5d}~XYq
tk
r�Yq�Yq
Xq
|S)N)rBrVrW��� �2�C�Wi&i(i))�setr	�add�_nt_readlinkr
rrrrrf�winerrorrg)r4�allowed_winerror�seen�old_path�exr5r5r6�_readlink_deeps&
r�cCs�d}d}|r�zt|�}|r$t||�n|WStk
r�}z�|j|krF�z0t|�}||krt|rft||�n|WWY�TSWntk
r�YnXt|�\}}|r�|s�||WY�S|r�t||�n|}W5d}~XYqXq|S)N)rBrVrWr�r�r�r�r�r��{i�i�ru)r�rrfr�r�r
)r4r�r`r��new_path�namer5r5r6�_getfinalpathname_nonstrictCs(
 &r�c	
Cs^t|�}t|t�rBd}d}d}t��}t|�tt�t��krjdSn(d}d}d}t��}t|�tt�krjdS|�	|�}|s�t
|�s�t||�}zt|�}d	}Wn0t
k
r�}z|j}t|�}W5d}~XYnX|�sZ|�	|��rZ|�	|�r�||t|�d�}n|t|�d�}zt|�|k�r"|}Wn4t
k
�rX}z|j|k�rH|}W5d}~XYnX|S)
Nr@s\\?\UNC\s\\s\\.\NULrAz\\?\UNC\z\\z\\.\NULr)rr1r2r:r�r	rxr'r�rCr
rr�rfr�r�rD)	r4r��
unc_prefix�new_unc_prefixr��
had_prefix�initial_winerrorr��spathr5r5r6r(qsD



�getwindowsversionrWrVcCsft�|�}t|t�r"d}d}d}nd}d}d}|dkr:|}|sFtd��t�|�}z�tt|��}tt|��}t|�\}}t|�\}	}
t|�t|	�kr�td	|	|f��d
d�|�	|�D�}dd�|
�	|�D�}d
}
t
||�D]$\}}t|�t|�kr�q�|
d7}
q�|gt|�|
||
d�}|�s(|WSt|�WSt
ttttfk
�r`t�d||��YnXdS)z#Return a relative version of a pathr9rar�rrrNzno path specifiedz&path is on mount %r, start on mount %rcSsg|]}|r|�qSr5r5��.0�xr5r5r6�
<listcomp>�szrelpath.<locals>.<listcomp>cSsg|]}|r|�qSr5r5r�r5r5r6r��srrBr*)r:r;r1r2rgrrrr	r
�ziprDrrIrJrK�DeprecationWarningrLrM)r4�startr"r r!�	start_abs�path_abs�start_drive�
start_rest�
path_drive�	path_rest�
start_list�	path_listr^�e1�e2�rel_listr5r5r6r*�sJ


�

c	s�|std��tttj|��}t|dt�r8d�d�d�nd�d�d��z@��fd	d
�|D�}�fdd
�|D�}zt�fdd
�|D��\}Wntk
r�td�d�YnXttdd
�|D���dkr�td��t	|d�
����\}}|���}�fdd
�|D�}�fdd
�|D�}t|�}t
|�}t|�D]*\}	}
|
||	k�r*|d|	�}�qf�q*|dt|��}|�rt|�n|}|��|�WSttfk
�r�tjd|���YnXdS)zDGiven a sequence of path names, returns the longest common sub-path.z%commonpath() arg is an empty sequencerr9r8rarrrcs g|]}t|��������qSr5)rr<r=)r�rS)r%r"r5r6r��szcommonpath.<locals>.<listcomp>csg|]\}}|����qSr5rd�r�r]rS�r"r5r6r��sc3s"|]\}}|dd��kVqdS)NrBr5r�r�r5r6�	<genexpr>�szcommonpath.<locals>.<genexpr>z%Can't mix absolute and relative pathsNcss|]\}}|VqdS)Nr5r�r5r5r6r��srBzPaths don't have the same drivecsg|]}|r|�kr|�qSr5r5�r�r��r r5r6r��scsg|]}�fdd�|D��qS)csg|]}|r|�kr|�qSr5r5r�r�r5r6r�sz)commonpath.<locals>.<listcomp>.<listcomp>r5)r�r?r�r5r6r�sr.)r.)rg�tuplerHr:r;r1r2r�rDrr<r
�min�max�	enumeraterrIrJrLrM)rN�drivesplits�split_pathsr
r|r4�common�s1�s2r^r�r�r5)r%r r"r6r.�sF

)�_isdir)N)1�__doc__r r!r&r"r#r%r$r'r:�sysrhrL�__all__r7r	r
rrr
rrbrrrr�ntrm�ImportErrorrrrrr�r�rr�r�r�r(r�r��hasattrr�r)r*r.r�rr5r5r5r6�<module>s�	�
/8

0q2

*.2�
84X���G@s�dZddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZzddlZWnek
r�ddlZYnXzeWne k
�r e!ZYnXddl"m#Z#ddl$m%Z%m&Z&m'Z'ddlm(Z(zddlm)Z)m*Z*m+Z+d	Z,Wnek
�r�d
Z,YnXddlm-Z.ddl/m0Z0m1Z1zddl2m3Z4e4j5Wnek
�r�dZ4YnXd
dl6m7Z7ddl"m8Z8ddl"m9Z9e:d�e:d�e:d�e:d�e:d�e;Z<dej=k�r>dk�rJnne>d��e#j?�rZdZ@dZAdZBdZCdZDdZEdZFdZGdZHdZIdZJdZKdZLdZMdZNdZOdZPdZQdZRGdd�deS�ZTdd�ZUiZVdd�ZWdd �ZXd!d"�ZYd#d$�ZZd%d&�Z[d'd(�Z\d)d*�Z]d+d,�Z^Z_d-d.�Z`d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNddOddPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsgGZaGdtdJ�dJeb�ZcGdudK�dKec�ZdGdvdw�dwed�ZeGdxdL�dLec�ZfGdydM�dMec�ZgiZhdzjiej=�Zjd{Zkd|Zld
ZmdZnd}Zod~dn�Zpdd1�Zqgfd�d��Zrd�d��Zsd�d��Zte�ud��Zve�ud��ZwetZxd�dS�Zyd�d0�ZzezZ{d�d2�Z|d�d3�Z}�dd�d4�Z~d�d5�ZGd�da�da�Z�Gd�db�dbe��Z�Gd�dE�dE�Z�Gd�d��d�e��Z�Gd�dD�dD�Z�e�Z�Gd�dN�dNe>�Z�Gd�dF�dF�Z�d�dC�Z�d�dP�Z�d�dQ�Z�d�dV�Z�d�dW�Z�d�dX�Z��dd�dY�Z�Gd�dh�dh�Z�epe�e��Gd�di�die��Z�Gd�dj�dje��Z�e����Gd�df�dfe��Z�e��Z�Gd�d��d�e��Z�Gd�d��d�e��Z�Gd�dk�dke��Z�epe
j�e��Gd�dc�dce��Z�Gd�dd�dde��Z�Gd�de�dee��Z�eWd�id��d�dl�Z��dd�d@�Z��dd�d��Z�e�e
j�e���dd�d��Z�e�e�e��d�d��Z��dd�d��Z�d�d��Z�Gd�d��d��Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z�e�ej�e��e�e4d���r�e�e4j�e��eWd�ideWd�idÍd�dm�Z�d�dƄZ�d�dȄZ�d�d=�Z��dd�do�Z�d�d̄Z�e�ej�e��e�e
j�e��e�e4d���r*e�e4j�e��d�d΄Z�e�e�e��d�d[�Z�d�dфZ�ifd�dӄZ�d�dՄZ�d�dׄZ�d�dلZ�d�dT�Z�e�udۡj�Z�e�ud�ej�ej�B�j�Z�Gd�dI�dI�Z�d�d߄Z�d�d�Z�Gd�dG�dG�Z�Gd�d�d�eÃZ�Gd�d�d�eÃZ�e�e�e�d�Z�d�d�Z�Gd�d�d�eȃZ�d�dO�Z�Gd�dH�dHe9j�j̃Z�d�d�Z�d�d�Z�d�dZ�Z�d�d�Z�d�dU�Z�d�d��Z�ej�d�eTd	d��d�d��Z�e�eՃfd�d���Z�e�d�d���Z�G�ddq�dqe؃Z�dS(aZ
Package resource API
--------------------

A resource is a logical file contained within a package, or a logical
subdirectory thereof.  The package resource API expects resource names
to have their path parts separated with ``/``, *not* whatever the local
path separator is.  Do not use os.path operations to manipulate resource
names being passed into the API.

The package resource API is designed to work with normal filesystem packages,
.egg files, and unpacked .egg files.  It can also work in a limited way with
.zip files and with custom PEP 302 loaders that support the ``get_data()``
method.
�)�absolute_importN)�get_importer)�six)�urllib�map�filter)�utime)�mkdir�rename�unlinkTF)�open)�isdir�split�)�
py31compat)�appdirs)�	packagingz&pkg_resources.extern.packaging.versionz)pkg_resources.extern.packaging.specifiersz+pkg_resources.extern.packaging.requirementsz&pkg_resources.extern.packaging.markerszpkg_resources.py2_warn)�r)r�zPython 3.5 or later is requiredc@seZdZdZdS)�
PEP440Warningza
    Used when there is an issue with a version or specifier not complying with
    PEP 440.
    N��__name__�
__module__�__qualname__�__doc__�rr�8/usr/lib/python3/dist-packages/pkg_resources/__init__.pyrysrcCs8ztj�|�WStjjk
r2tj�|�YSXdS�N)r�version�Version�InvalidVersion�
LegacyVersion)�vrrr�
parse_version�sr#cKs"t��|�t�t�||��dSr)�globals�update�_state_vars�dict�fromkeys)�vartype�kwrrr�_declare_state�sr+cCs8i}t�}t��D] \}}|d|||�||<q|S)N�_sget_)r$r&�items��state�g�kr"rrr�__getstate__�s
r2cCs8t�}|��D]$\}}|dt|||||�q|S)N�_sset_)r$r-r&r.rrr�__setstate__�sr4cCs|��Sr)�copy��valrrr�
_sget_dict�sr8cCs|��|�|�dSr)�clearr%��key�obr/rrr�
_sset_dict�sr=cCs|��Sr)r2r6rrr�_sget_object�sr>cCs|�|�dSr)r4r:rrr�_sset_object�sr?cGsdSrr��argsrrr�<lambda>��rBcCsbt�}t�|�}|dk	r^tjdkr^z&dd�t�dd��|�d�f}Wntk
r\YnX|S)aZReturn this platform's maximum compatible version.

    distutils.util.get_platform() normally reports the minimum version
    of Mac OS X that would be required to *use* extensions produced by
    distutils.  But what we want when checking compatibility is to know the
    version of Mac OS X that we are *running*.  To allow usage of packages that
    explicitly require a newer version of Mac OS X, we must also know the
    current version of the OS.

    If this condition occurs for any other platform with a version in its
    platform strings, this function should be extended accordingly.
    N�darwinzmacosx-%s-%s�.�r)	�get_build_platform�macosVersionString�match�sys�platform�join�_macosx_vers�group�
ValueError)�plat�mrrr�get_supported_platform�s

&rR�require�
run_script�get_provider�get_distribution�load_entry_point�
get_entry_map�get_entry_info�iter_entry_points�resource_string�resource_stream�resource_filename�resource_listdir�resource_exists�resource_isdir�declare_namespace�working_set�add_activation_listener�find_distributions�set_extraction_path�cleanup_resources�get_default_cache�Environment�
WorkingSet�ResourceManager�Distribution�Requirement�
EntryPoint�ResolutionError�VersionConflict�DistributionNotFound�UnknownExtra�ExtractionError�parse_requirements�	safe_name�safe_version�get_platform�compatible_platforms�yield_lines�split_sections�
safe_extra�to_filename�invalid_marker�evaluate_marker�ensure_directory�normalize_path�EGG_DIST�BINARY_DIST�SOURCE_DIST�
CHECKOUT_DIST�DEVELOP_DIST�IMetadataProvider�IResourceProvider�FileMetadata�PathMetadata�EggMetadata�
EmptyProvider�empty_provider�NullProvider�EggProvider�DefaultProvider�ZipProvider�register_finder�register_namespace_handler�register_loader_type�fixup_namespace_packagesr�PkgResourcesDeprecationWarning�run_main�AvailableDistributionsc@seZdZdZdd�ZdS)rnz.Abstract base for dependency resolution errorscCs|jjt|j�Sr)�	__class__r�reprrA��selfrrr�__repr__�szResolutionError.__repr__N)rrrrr�rrrrrn�sc@s<eZdZdZdZedd��Zedd��Zdd�Zd	d
�Z	dS)roz�
    An already-installed version conflicts with the requested version.

    Should be initialized with the installed Distribution and the requested
    Requirement.
    z3{self.dist} is installed but {self.req} is requiredcCs
|jdS�Nrr@r�rrr�dist
szVersionConflict.distcCs
|jdS�Nrr@r�rrr�reqszVersionConflict.reqcCs|jjft��Sr��	_template�format�localsr�rrr�reportszVersionConflict.reportcCs|s|S|j|f}t|�S)zt
        If required_by is non-empty, return a version of self that is a
        ContextualVersionConflict.
        )rA�ContextualVersionConflict)r��required_byrArrr�with_contextszVersionConflict.with_contextN)
rrrrr��propertyr�r�r�r�rrrrros

c@s&eZdZdZejdZedd��ZdS)r�z�
    A VersionConflict that accepts a third parameter, the set of the
    requirements that required the installed Distribution.
    z by {self.required_by}cCs
|jdS)NrFr@r�rrrr�+sz%ContextualVersionConflict.required_byN)rrrrror�r�r�rrrrr�#s
r�c@sHeZdZdZdZedd��Zedd��Zedd��Zd	d
�Z	dd�Z
d
S)rpz&A requested distribution was not foundzSThe '{self.req}' distribution was not found and is required by {self.requirers_str}cCs
|jdSr�r@r�rrrr�6szDistributionNotFound.reqcCs
|jdSr�r@r�rrr�	requirers:szDistributionNotFound.requirerscCs|js
dSd�|j�S)Nzthe applicationz, )r�rLr�rrr�
requirers_str>sz"DistributionNotFound.requirers_strcCs|jjft��Srr�r�rrrr�DszDistributionNotFound.reportcCs|��Sr)r�r�rrr�__str__GszDistributionNotFound.__str__N)rrrrr�r�r�r�r�r�r�rrrrrp0s


c@seZdZdZdS)rqz>Distribution doesn't have an "extra feature" of the given nameNrrrrrrqKsz{}.{}rrF���cCs|t|<dS)aRegister `provider_factory` to make providers for `loader_type`

    `loader_type` is the type or class of a PEP 302 ``module.__loader__``,
    and `provider_factory` is a function that, passed a *module* object,
    returns an ``IResourceProvider`` for that module.
    N)�_provider_factories)�loader_type�provider_factoryrrrr�YscCstt|t�r$t�|�p"tt|��dSztj|}Wn&tk
rXt	|�tj|}YnXt
|dd�}tt|�|�S)z?Return an IResourceProvider for the named module or requirementr�
__loader__N)
�
isinstancerlrb�findrS�strrJ�modules�KeyError�
__import__�getattr�
_find_adapterr�)�moduleOrReq�module�loaderrrrrUcs
cCsd|s\t��d}|dkrLd}tj�|�rLttd�rLt�|�}d|krL|d}|�|�	d��|dS)Nr�z0/System/Library/CoreServices/SystemVersion.plist�	readPlist�ProductVersionrE)
rK�mac_ver�os�path�exists�hasattr�plistlibr��appendr)�_cacher�plist�
plist_contentrrrrMps

rMcCsddd��||�S)N�ppc)�PowerPC�Power_Macintosh)�get)�machinerrr�_macosx_arch�sr�cCs~ddlm}|�}tjdkrz|�d�szz>t�}t��d�dd�}dt	|d�t	|d	�t
|�fWStk
rxYnX|S)
z�Return this platform's string for platform-specific distributions

    XXX Currently this is the same as ``distutils.util.get_platform()``, but it
    needs some hacks for Linux and Mac OS X.
    r)rvrDzmacosx-�� �_zmacosx-%d.%d-%sr)�	sysconfigrvrJrK�
startswithrMr��uname�replace�intr�rO)rvrPrr�rrrrG�s

�rGzmacosx-(\d+)\.(\d+)-(.*)zdarwin-(\d+)\.(\d+)\.(\d+)-(.*)cCs�|dks|dks||krdSt�|�}|r�t�|�}|s�t�|�}|r�t|�d��}d|�d�|�d�f}|dkr||dks�|dkr�|d	kr�dSd
S|�d�|�d�ks�|�d�|�d�kr�d
St|�d��t|�d��kr�d
SdSd
S)z�Can code for the `provided` platform run on the `required` platform?

    Returns true if either platform is ``None``, or the platforms are equal.

    XXX Needs compatibility checks for Linux and other unixy OSes.
    NTrz%s.%srF�z10.3�z10.4Fr)rHrI�darwinVersionStringr�rN)�provided�required�reqMac�provMac�
provDarwin�dversion�macosversionrrrrw�s2


���cCs<t�d�j}|d}|��||d<t|�d�||�dS)z@Locate distribution `dist_spec` and run its `script_name` scriptrrrN�rJ�	_getframe�	f_globalsr9rSrT)�	dist_spec�script_name�ns�namerrrrT�s
cCs@t|tj�rt�|�}t|t�r(t|�}t|t�s<td|��|S)z@Return a current distribution object for a Requirement or stringz-Expected string, Requirement, or Distribution)r�r�string_typesrl�parserUrk�	TypeError�r�rrrrV�s



cCst|��||�S)zDReturn `name` entry point of `group` for `dist` or raise ImportError)rVrW�r�rNr�rrrrW�scCst|��|�S)�=Return the entry point map for `group`, or the full entry map)rVrX)r�rNrrrrX�scCst|��||�S�z<Return the EntryPoint object for `group`+`name`, or ``None``)rVrYr�rrrrY�sc@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)r�cCsdS)z;Does the package's distribution contain the named metadata?Nr�r�rrr�has_metadata�szIMetadataProvider.has_metadatacCsdS)z'The named metadata resource as a stringNrr�rrr�get_metadata�szIMetadataProvider.get_metadatacCsdS)z�Yield named metadata resource as list of non-blank non-comment lines

       Leading and trailing whitespace is stripped from each line, and lines
       with ``#`` as the first non-blank character are omitted.Nrr�rrr�get_metadata_lines�sz$IMetadataProvider.get_metadata_linescCsdS)z>Is the named metadata a directory?  (like ``os.path.isdir()``)Nrr�rrr�metadata_isdirsz IMetadataProvider.metadata_isdircCsdS)z?List of metadata names in the directory (like ``os.listdir()``)Nrr�rrr�metadata_listdirsz"IMetadataProvider.metadata_listdircCsdS)z=Execute the named script in the supplied namespace dictionaryNr)r��	namespacerrrrT
szIMetadataProvider.run_scriptN)	rrrr�r�r�r�r�rTrrrrr��sc@s@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)r�z3An object that provides access to package resourcescCsdS)zdReturn a true filesystem path for `resource_name`

        `manager` must be an ``IResourceManager``Nr��manager�
resource_namerrr�get_resource_filenamesz'IResourceProvider.get_resource_filenamecCsdS)ziReturn a readable file-like object for `resource_name`

        `manager` must be an ``IResourceManager``Nrr�rrr�get_resource_streamsz%IResourceProvider.get_resource_streamcCsdS)zmReturn a string containing the contents of `resource_name`

        `manager` must be an ``IResourceManager``Nrr�rrr�get_resource_stringsz%IResourceProvider.get_resource_stringcCsdS)z,Does the package contain the named resource?Nr�r�rrr�has_resource szIResourceProvider.has_resourcecCsdS)z>Is the named resource a directory?  (like ``os.path.isdir()``)Nrr�rrrr`#sz IResourceProvider.resource_isdircCsdS)z?List of resource names in the directory (like ``os.listdir()``)Nrr�rrrr^&sz"IResourceProvider.resource_listdirN)
rrrrr�r�r�r�r`r^rrrrr�sc@s�eZdZdZd'dd�Zedd��Zedd��Zd	d
�Zdd�Z	d
d�Z
d(dd�Zdd�Zdd�Z
d)dd�Zd*dd�Zd+dd�Zdd�Zd,dd �Zd!d"�Zd#d$�Zd%d&�ZdS)-rizDA collection of active distributions on sys.path (or a similar list)NcCs>g|_i|_i|_g|_|dkr&tj}|D]}|�|�q*dS)z?Create working set from list of path entries (default=sys.path)N)�entries�
entry_keys�by_key�	callbacksrJr��	add_entry)r�r��entryrrr�__init__-szWorkingSet.__init__cCsb|�}zddlm}Wntk
r.|YSXz|�|�Wntk
r\|�|�YSX|S)z1
        Prepare the master working set.
        r)�__requires__)�__main__r�ImportErrorrSro�_build_from_requirements)�cls�wsrrrr�
_build_master:s
zWorkingSet._build_mastercCsf|g�}t|�}|�|t��}|D]}|�|�q"tjD]}||jkr8|�|�q8|jtjdd�<|S)zQ
        Build a working set from a requirement spec. Rewrites sys.path.
        N)rs�resolverh�addrJr�r�r)r	�req_specr
�reqs�distsr�rrrrrNs

z#WorkingSet._build_from_requirementscCs<|j�|g�|j�|�t|d�D]}|�||d�q$dS)a�Add a path item to ``.entries``, finding any distributions on it

        ``find_distributions(entry, True)`` is used to find distributions
        corresponding to the path entry, and they are added.  `entry` is
        always appended to ``.entries``, even if it is already present.
        (This is because ``sys.path`` can contain the same value more than
        once, and the ``.entries`` of the ``sys.path`` WorkingSet should always
        equal ``sys.path``.)
        TFN)r��
setdefaultr�r�rdr
)r�rr�rrrrds
zWorkingSet.add_entrycCs|j�|j�|kS)z9True if `dist` is the active distribution for its project)rr�r;�r�r�rrr�__contains__sszWorkingSet.__contains__cCs,|j�|j�}|dk	r(||kr(t||��|S)a�Find a distribution matching requirement `req`

        If there is an active distribution for the requested project, this
        returns it as long as it meets the version requirement specified by
        `req`.  But, if there is an active distribution for the project and it
        does *not* meet the `req` requirement, ``VersionConflict`` is raised.
        If there is no active distribution for the requested project, ``None``
        is returned.
        N)rr�r;ro)r�r�r�rrrr�ws

zWorkingSet.findcs��fdd�|D�S)aYield entry point objects from `group` matching `name`

        If `name` is None, yields all entry points in `group` from all
        distributions in the working set, otherwise only ones matching
        both `group` and `name` are yielded (in distribution order).
        c3s8|]0}|�����D]}�dks*�|jkr|VqqdSr)rX�valuesr�)�.0r�r�rNr�rr�	<genexpr>�s
�z/WorkingSet.iter_entry_points.<locals>.<genexpr>r�r�rNr�rrrrZ�s�zWorkingSet.iter_entry_pointscCs>t�d�j}|d}|��||d<|�|�d�||�dS)z?Locate distribution for `requires` and run `script_name` scriptrrrNr�)r��requiresr�r�r�rrrrT�s
zWorkingSet.run_scriptccsLi}|jD]<}||jkrq
|j|D] }||kr$d||<|j|Vq$q
dS)z�Yield distributions for non-duplicate projects in the working set

        The yield order is the order in which the items' path entries were
        added to the working set.
        rN)r�r�r)r��seen�itemr;rrr�__iter__�s

zWorkingSet.__iter__TFcCs�|r|j|j||d�|dkr$|j}|j�|g�}|j�|jg�}|sV|j|jkrVdS||j|j<|j|krx|�|j�|j|kr�|�|j�|�|�dS)aAdd `dist` to working set, associated with `entry`

        If `entry` is unspecified, it defaults to the ``.location`` of `dist`.
        On exit from this routine, `entry` is added to the end of the working
        set's ``.entries`` (if it wasn't already present).

        `dist` is only added to the working set if it's for a project that
        doesn't already have a distribution in the set, unless `replace=True`.
        If it's added, any callbacks registered with the ``subscribe()`` method
        will be called.
        �r�N)	�	insert_onr��locationr�rr;rr��
_added_new)r�r�r�insertr��keys�keys2rrrr
�s

zWorkingSet.addcCsxt|�ddd�}i}i}g}t�}	t�t�}
|�rt|�d�}||krHq.|	�||�sVq.|�|j�}|dk�r|j	�|j�}|dks�||kr�|r�|}
|dkr�|dkr�t
|j�}nt
g�}tg�}
|j
||
||d�}||j<|dkr�|
�|d�}t||��|�|�||k�r$|
|}t||��|��|�|j�ddd�}|�|�|D] }|
|�|j�|j|	|<�qHd||<q.|S)a�List all distributions needed to (recursively) meet `requirements`

        `requirements` must be a sequence of ``Requirement`` objects.  `env`,
        if supplied, should be an ``Environment`` instance.  If
        not supplied, it defaults to all distributions available within any
        entry or distribution in the working set.  `installer`, if supplied,
        will be invoked with each requirement that cannot be met by an
        already-installed distribution; it should return a ``Distribution`` or
        ``None``.

        Unless `replace_conflicting=True`, raises a VersionConflict exception
        if
        any requirements are found on the path that have the correct name but
        the wrong version.  Otherwise, if an `installer` is supplied it will be
        invoked to obtain the correct version of the requirement and activate
        it.

        `extras` is a list of the extras to be used with these requirements.
        This is important because extra requirements may look like `my_req;
        extra = "my_extra"`, which would otherwise be interpreted as a purely
        optional requirement.  Instead, we want to be able to assert that these
        requirements are truly required.
        Nr�r)�replace_conflictingT)�list�
_ReqExtras�collections�defaultdict�set�pop�markers_passr�r;rrhr�ri�
best_matchrpr�ror�r�extras�extendr
�project_name)r��requirements�env�	installerr$r-�	processed�best�to_activate�
req_extrasr�r�r�r
r��
dependent_req�new_requirements�new_requirementrrrr�sT


�




zWorkingSet.resolvecCs
t|�}|��i}i}|dkr4t|j�}||7}n||}|�g�}	tt|	j|��|D]�}
||
D]�}|��g}z|	�|||�}
WnBt	k
r�}z$|||<|r�WY�qfn
WY�qZW5d}~XYqfXtt|	j|
��|�
t�|
��qZqfqZt|�}|��||fS)asFind all activatable distributions in `plugin_env`

        Example usage::

            distributions, errors = working_set.find_plugins(
                Environment(plugin_dirlist)
            )
            # add plugins+libs to sys.path
            map(working_set.add, distributions)
            # display errors
            print('Could not load', errors)

        The `plugin_env` should be an ``Environment`` instance that contains
        only distributions that are in the project's "plugin directory" or
        directories. The `full_env`, if supplied, should be an ``Environment``
        contains all currently-available distributions.  If `full_env` is not
        supplied, one is created automatically from the ``WorkingSet`` this
        method is called on, which will typically mean that every directory on
        ``sys.path`` will be scanned for distributions.

        `installer` is a standard installer callback as used by the
        ``resolve()`` method. The `fallback` flag indicates whether we should
        attempt to resolve older versions of a plugin if the newest version
        cannot be resolved.

        This method returns a 2-tuple: (`distributions`, `error_info`), where
        `distributions` is a list of the distributions found in `plugin_env`
        that were loadable, along with any other distributions that are needed
        to resolve their dependencies.  `error_info` is a dictionary mapping
        unloadable plugin distributions to an exception instance describing the
        error that occurred. Usually this will be a ``DistributionNotFound`` or
        ``VersionConflict`` instance.
        N)
r%�sortrhr�r�rr
�as_requirementrrnr%r'r()r��
plugin_env�full_envr2�fallback�plugin_projects�
error_info�
distributionsr1�
shadow_setr/r�r��	resolveesr"rrr�find_plugins(s4$




zWorkingSet.find_pluginscGs&|�t|��}|D]}|�|�q|S)a�Ensure that distributions matching `requirements` are activated

        `requirements` must be a string or a (possibly-nested) sequence
        thereof, specifying the distributions and versions required.  The
        return value is a sequence of the distributions that needed to be
        activated to fulfill the requirements; all relevant distributions are
        included, even if they were already activated in this working set.
        )rrsr
)r�r0�neededr�rrrrS|s	zWorkingSet.requirecCs8||jkrdS|j�|�|s"dS|D]}||�q&dS)z�Invoke `callback` for all distributions

        If `existing=True` (default),
        call on all existing ones, as well.
        N)rr�)r��callback�existingr�rrr�	subscribe�s
zWorkingSet.subscribecCs|jD]}||�qdSr)r)r�r�rFrrrr �s
zWorkingSet._added_newcCs,|jdd�|j��|j��|jdd�fSr)r�r�r5rrr�rrrr2�s
�zWorkingSet.__getstate__cCs@|\}}}}|dd�|_|��|_|��|_|dd�|_dSr)r�r5r�rr)r��e_k_b_cr�r"rrrrrr4�s


zWorkingSet.__setstate__)N)N)NTF)NNFN)NNT)T)rrrrr�classmethodrrrrr�rZrTrr
rrDrSrHr r2r4rrrrri*s4





�
]�
T
c@seZdZdZddd�ZdS)r&z>
    Map each requirement to the extras that demanded it.
    Ncs2�fdd�|��d�|pdD�}�jp0t|�S)z�
        Evaluate markers for req against each extra that
        demanded it.

        Return False if the req has a marker and fails
        evaluation. Otherwise, return True.
        c3s|]}�j�d|i�VqdS)�extraN��marker�evaluate)rrK�r�rrr�s�z*_ReqExtras.markers_pass.<locals>.<genexpr>rr)r�rM�any)r�r�r-�extra_evalsrrOrr+�s
�z_ReqExtras.markers_pass)N)rrrrr+rrrrr&�sr&c@sxeZdZdZde�efdd�Zdd�Zdd�Zdd	d
�Z	dd�Z
d
d�Zddd�Zddd�Z
dd�Zdd�Zdd�ZdS)rhz5Searchable snapshot of distributions on a search pathNcCs i|_||_||_|�|�dS)a!Snapshot distributions available on a search path

        Any distributions found on `search_path` are added to the environment.
        `search_path` should be a sequence of ``sys.path`` items.  If not
        supplied, ``sys.path`` is used.

        `platform` is an optional string specifying the name of the platform
        that platform-specific distributions must be compatible with.  If
        unspecified, it defaults to the current platform.  `python` is an
        optional string naming the desired version of Python (e.g. ``'3.6'``);
        it defaults to the current version.

        You may explicitly set `platform` (and/or `python`) to ``None`` if you
        wish to map *all* distributions, not just those compatible with the
        running platform or Python version.
        N)�_distmaprK�python�scan)r��search_pathrKrSrrrr�szEnvironment.__init__cCs2|jdkp|jdkp|j|jk}|o0t|j|j�S)z�Is distribution `dist` acceptable for this environment?

        The distribution must match the platform and python version
        requirements specified when this environment was created, or False
        is returned.
        N)rS�
py_versionrwrK)r�r��	py_compatrrr�can_add�s
�
�zEnvironment.can_addcCs|j|j�|�dS)z"Remove `dist` from the environmentN)rRr;�removerrrrrY�szEnvironment.removecCs4|dkrtj}|D]}t|�D]}|�|�qqdS)adScan `search_path` for distributions usable in this environment

        Any distributions found are added to the environment.
        `search_path` should be a sequence of ``sys.path`` items.  If not
        supplied, ``sys.path`` is used.  Only distributions conforming to
        the platform/python version defined at initialization are added.
        N)rJr�rdr
)r�rUrr�rrrrT�s
zEnvironment.scancCs|��}|j�|g�S)aReturn a newest-to-oldest list of distributions for `project_name`

        Uses case-insensitive `project_name` comparison, assuming all the
        project's distributions use their project's name converted to all
        lowercase as their key.

        )�lowerrRr�)r�r/�distribution_keyrrr�__getitem__�szEnvironment.__getitem__cCsL|�|�rH|��rH|j�|jg�}||krH|�|�|jt�d�dd�dS)zLAdd `dist` if we ``can_add()`` it and it has not already been added
        �hashcmpT�r;�reverseN)	rX�has_versionrRrr;r�r:�operator�
attrgetter)r�r�rrrrr
s

zEnvironment.addFcCsfz|�|�}Wntk
r,|s$�d}YnX|dk	r:|S||jD]}||krD|SqD|�||�S)a�Find distribution best matching `req` and usable on `working_set`

        This calls the ``find(req)`` method of the `working_set` to see if a
        suitable distribution is already active.  (This may raise
        ``VersionConflict`` if an unsuitable version of the project is already
        active in the specified `working_set`.)  If a suitable distribution
        isn't active, this method returns the newest distribution in the
        environment that meets the ``Requirement`` in `req`.  If no suitable
        distribution is found, and `installer` is supplied, then the result of
        calling the environment's ``obtain(req, installer)`` method will be
        returned.
        N)r�ror;�obtain)r�r�rbr2r$r�rrrr,s

zEnvironment.best_matchcCs|dk	r||�SdS)a�Obtain a distribution matching `requirement` (e.g. via download)

        Obtain a distro that matches requirement (e.g. via download).  In the
        base ``Environment`` class, this routine just returns
        ``installer(requirement)``, unless `installer` is None, in which case
        None is returned instead.  This method is a hook that allows subclasses
        to attempt other ways of obtaining a distribution before falling back
        to the `installer` argument.Nr)r��requirementr2rrrrc,s	zEnvironment.obtainccs"|j��D]}||r
|Vq
dS)z=Yield the unique project names of the available distributionsN)rRr"�r�r;rrrr8szEnvironment.__iter__cCsVt|t�r|�|�n<t|t�rD|D]}||D]}|�|�q0q$ntd|f��|S)z2In-place addition of a distribution or environmentzCan't add %r to environment)r�rkr
rhr�)r��other�projectr�rrr�__iadd__>s

zEnvironment.__iadd__cCs*|jgddd�}||fD]}||7}q|S)z4Add an environment or distribution to an environmentN)rKrS�r�)r�rf�newr1rrr�__add__Js
zEnvironment.__add__)N)NF)N)rrrrrR�PY_MAJORrrXrYrTr\r
r,rcrrhrkrrrrrh�s"�


�

c@seZdZdZdS)rraTAn error occurred extracting a resource

    The following attributes are available from instances of this exception:

    manager
        The resource manager that raised this exception

    cache_path
        The base directory for resource extraction

    original_error
        The exception instance that caused extraction to fail
    NrrrrrrrVsc@s�eZdZdZdZdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Zdd�Zddd�Z
edd��Zdd�Zdd�Zd dd�ZdS)!rjz'Manage resource extraction and packagesNcCs
i|_dSr)�cached_filesr�rrrrjszResourceManager.__init__cCst|��|�S)zDoes the named resource exist?)rUr��r��package_or_requirementr�rrrr_mszResourceManager.resource_existscCst|��|�S)z,Is the named resource an existing directory?)rUr`rnrrrr`qs�zResourceManager.resource_isdircCst|��||�S)z4Return a true filesystem path for specified resource)rUr�rnrrrr]ws�z!ResourceManager.resource_filenamecCst|��||�S)z9Return a readable file-like object for specified resource)rUr�rnrrrr\}s�zResourceManager.resource_streamcCst|��||�S)z%Return specified resource as a string)rUr�rnrrrr[�s�zResourceManager.resource_stringcCst|��|�S)z1List the contents of the named resource directory)rUr^rnrrrr^�s�z ResourceManager.resource_listdircCsRt��d}|jpt�}t�d���}t|jft	���}||_
||_||_|�dS)z5Give an error message for problems extracting file(s)ra
            Can't extract file(s) to egg cache

            The following error occurred while trying to extract file(s)
            to the Python egg cache:

              {old_exc}

            The Python egg cache directory is currently set to:

              {cache_path}

            Perhaps your account does not have write access to this directory?
            You can change the cache directory by setting the PYTHON_EGG_CACHE
            environment variable to point to an accessible directory.
            N)
rJ�exc_info�extraction_pathrg�textwrap�dedent�lstriprrr�r�r��
cache_path�original_error)r��old_excru�tmpl�errrrr�extraction_error�sz ResourceManager.extraction_errorrcCsf|jp
t�}tjj||df|��}zt|�Wntk
rL|��YnX|�|�d|j	|<|S)a�Return absolute location in cache for `archive_name` and `names`

        The parent directory of the resulting path will be created if it does
        not already exist.  `archive_name` should be the base filename of the
        enclosing egg (which may not be the name of the enclosing zipfile!),
        including its ".egg" extension.  `names`, if provided, should be a
        sequence of path name parts "under" the egg's extraction location.

        This method should only be called by resource providers that need to
        obtain an extraction location, and only for names they intend to
        extract, as it tracks the generated names for possible cleanup later.
        z-tmpr)
rqrgr�r�rL�_bypass_ensure_directory�	Exceptionrz�_warn_unsafe_extraction_pathrm)r��archive_name�names�extract_path�target_pathrrr�get_cache_path�s


zResourceManager.get_cache_pathcCsVtjdkr|�tjd�sdSt�|�j}|tj@s>|tj@rRd|}t�	|t
�dS)aN
        If the default extraction path is overridden and set to an insecure
        location, such as /tmp, it opens up an opportunity for an attacker to
        replace an extracted file with an unauthorized payload. Warn the user
        if a known insecure location is used.

        See Distribute #375 for more details.
        �nt�windirNz�%s is writable by group/others and vulnerable to attack when used with get_resource_filename. Consider a more secure location (set with .set_extraction_path or the PYTHON_EGG_CACHE environment variable).)r�r�r��environ�stat�st_mode�S_IWOTH�S_IWGRP�warnings�warn�UserWarning)r��mode�msgrrrr}�s
��z,ResourceManager._warn_unsafe_extraction_pathcCs.tjdkr*t�|�jdBd@}t�||�dS)a4Perform any platform-specific postprocessing of `tempname`

        This is where Mac header rewrites should be done; other platforms don't
        have anything special they should do.

        Resource providers should call this method ONLY after successfully
        extracting a compressed resource.  They must NOT call it on resources
        that are already in the filesystem.

        `tempname` is the current (temporary) name of the file, and `filename`
        is the name it will be renamed to by the caller after this routine
        returns.
        �posiximi�N)r�r�r�r��chmod)r��tempname�filenamer�rrr�postprocess�s
zResourceManager.postprocesscCs|jrtd��||_dS)a�Set the base path where resources will be extracted to, if needed.

        If you do not call this routine before any extractions take place, the
        path defaults to the return value of ``get_default_cache()``.  (Which
        is based on the ``PYTHON_EGG_CACHE`` environment variable, with various
        platform-specific fallbacks.  See that routine's documentation for more
        details.)

        Resources are extracted to subdirectories of this path based upon
        information given by the ``IResourceProvider``.  You may set this to a
        temporary directory, but then you must call ``cleanup_resources()`` to
        delete the extracted files when done.  There is no guarantee that
        ``cleanup_resources()`` will be able to remove all extracted files.

        (Note: you may not change the extraction path for a given resource
        manager once resources have been extracted, unless you first call
        ``cleanup_resources()``.)
        z5Can't change extraction path, files already extractedN)rmrOrq�r�r�rrrre�s
�z#ResourceManager.set_extraction_pathFcCsdS)aB
        Delete all extracted resource files and directories, returning a list
        of the file and directory names that could not be successfully removed.
        This function does not have any concurrency protection, so it should
        generally only be called when the extraction path is a temporary
        directory exclusive to a single process.  This method is not
        automatically called; you must call it explicitly or register it as an
        ``atexit`` function if you wish to ensure cleanup of a temporary
        directory used for extractions.
        Nr)r��forcerrrrfsz!ResourceManager.cleanup_resources)r)F)rrrrrqrr_r`r]r\r[r^rzr��staticmethodr}r�rerfrrrrrjfs 

cCstj�d�ptjdd�S)z�
    Return the ``PYTHON_EGG_CACHE`` environment variable
    or a platform-relevant user cache dir for an app
    named "Python-Eggs".
    �PYTHON_EGG_CACHEzPython-Eggs)�appname)r�r�r�r�user_cache_dirrrrrrgs
�cCst�dd|�S)z�Convert an arbitrary string to a standard distribution name

    Any runs of non-alphanumeric/. characters are replaced with a single '-'.
    �[^A-Za-z0-9.]+�-)�re�subr�rrrrt&scCsJzttj�|��WStjjk
rD|�dd�}t�dd|�YSXdS)zB
    Convert an arbitrary string to a standard version string
    r�rEr�r�N)r�rrrr r�r�r�)rrrrru.s
cCst�dd|���S)z�Convert an arbitrary string to a standard 'extra' name

    Any runs of non-alphanumeric characters are replaced with a single '_',
    and the result is always lowercased.
    z[^A-Za-z0-9.-]+r�)r�r�rZ)rKrrrrz:scCs|�dd�S)z|Convert a project or version name to its filename-escaped form

    Any '-' characters are currently replaced with '_'.
    r�r�rr�rrrr{Csc
CsHzt|�Wn6tk
rB}zd|_d|_|WY�Sd}~XYnXdS)zo
    Validate text as a PEP 508 environment marker; return an exception
    if invalid or False otherwise.
    NF)r}�SyntaxErrorr��lineno)�text�errrr|Ksc
CsJztj�|�}|��WStjjk
rD}zt|��W5d}~XYnXdS)z�
    Evaluate a PEP 508 environment marker.
    Return a boolean indicating the marker result in this environment.
    Raise SyntaxError if marker is invalid.

    This implementation uses the 'pyparsing' module.
    N)r�markers�MarkerrN�
InvalidMarkerr�)r�rKrMr�rrrr}Ys

c@s�eZdZdZdZdZdZdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zed'd(��Zd)d*�ZdS)+r�zETry to implement resources and metadata for arbitrary PEP 302 loadersNcCs(t|dd�|_tj�t|dd��|_dS)Nr��__file__r�)r�r�r�r��dirname�module_path�r�r�rrrroszNullProvider.__init__cCs|�|j|�Sr)�_fnr��r�r�r�rrrr�ssz"NullProvider.get_resource_filenamecCst�|�||��Sr)�io�BytesIOr�r�rrrr�vsz NullProvider.get_resource_streamcCs|�|�|j|��Sr)�_getr�r�r�rrrr�ysz NullProvider.get_resource_stringcCs|�|�|j|��Sr)�_hasr�r��r�r�rrrr�|szNullProvider.has_resourcecCs|�|j|�Sr)r��egg_info�r�r�rrr�_get_metadata_pathszNullProvider._get_metadata_pathcCs |js|jS|�|�}|�|�Sr)r�r�r��r�r�r�rrrr��s
zNullProvider.has_metadatac
Cst|js
dS|�|�}|�|�}tjr(|Sz|�d�WStk
rn}z|jd�||�7_�W5d}~XYnXdS)Nr��utf-8z in {} file at path: {})	r�r�r�r�PY2�decode�UnicodeDecodeError�reasonr�)r�r�r��value�excrrrr��s

zNullProvider.get_metadatacCst|�|��Sr�rxr�r�rrrr��szNullProvider.get_metadata_linescCs|�|�|j|��Sr)�_isdirr�r�r�rrrr`�szNullProvider.resource_isdircCs|jo|�|�|j|��Sr)r�r�r�r�rrrr��szNullProvider.metadata_isdircCs|�|�|j|��Sr)�_listdirr�r�r�rrrr^�szNullProvider.resource_listdircCs|jr|�|�|j|��SgSr)r�r�r�r�rrrr��szNullProvider.metadata_listdirc
Cs�d|}|�|�s$tdjft����|�|��dd�}|�dd�}|�|j|�}||d<tj	�
|�r�t|���}t
||d�}t|||�n>dd	lm}t|�d|�d�|f||<t
||d�}	t|	||�dS)
Nzscripts/z<Script {script!r} not found in metadata at {self.egg_info!r}z
�
�
r��execr)�cache)r�rnr�r�r�r�r�r�r�r�r�r�read�compiler��	linecacher��lenr)
r�r�r��script�script_text�script_filename�source�coder��script_coderrrrT�s.
���zNullProvider.run_scriptcCstd��dS�Nz9Can't perform this operation for unregistered loader type��NotImplementedErrorr�rrrr��s�zNullProvider._hascCstd��dSr�r�r�rrrr��s�zNullProvider._isdircCstd��dSr�r�r�rrrr��s�zNullProvider._listdircCs*|�|�|r&tjj|f|�d���S|S)N�/)�_validate_resource_pathr�r�rLr)r��baser�rrrr��s
zNullProvider._fncCsptjj|�tj�kp&t�|�p&t�|�}|s0dSd}t�|�rPt�|�sPt|��t	j
|dd�dtdd�dS)aO
        Validate the resource paths according to the docs.
        https://setuptools.readthedocs.io/en/latest/pkg_resources.html#basic-resource-access

        >>> warned = getfixture('recwarn')
        >>> warnings.simplefilter('always')
        >>> vrp = NullProvider._validate_resource_path
        >>> vrp('foo/bar.txt')
        >>> bool(warned)
        False
        >>> vrp('../foo/bar.txt')
        >>> bool(warned)
        True
        >>> warned.clear()
        >>> vrp('/foo/bar.txt')
        >>> bool(warned)
        True
        >>> vrp('foo/../../bar.txt')
        >>> bool(warned)
        True
        >>> warned.clear()
        >>> vrp('foo/f../bar.txt')
        >>> bool(warned)
        False

        Windows path separators are straight-up disallowed.
        >>> vrp(r'\foo/bar.txt')
        Traceback (most recent call last):
        ...
        ValueError: Use of .. or absolute path in a resource path is not allowed.

        >>> vrp(r'C:\foo/bar.txt')
        Traceback (most recent call last):
        ...
        ValueError: Use of .. or absolute path in a resource path is not allowed.

        Blank values are allowed

        >>> vrp('')
        >>> bool(warned)
        False

        Non-string values are not.

        >>> vrp(None)
        Traceback (most recent call last):
        ...
        AttributeError: ...
        Nz=Use of .. or absolute path in a resource path is not allowed.r�z/ and will raise exceptions in a future release.r�)�
stacklevel)r�r��pardirr�	posixpath�sep�isabs�ntpathrOr�r��DeprecationWarning)r��invalidr�rrrr��s6���z$NullProvider._validate_resource_pathcCs$t|jd�r|j�|�Std��dS)N�get_dataz=Can't perform this operation for loaders without 'get_data()')r�r�r�r�r�rrrr� s
�zNullProvider._get)rrrr�egg_namer�r�rr�r�r�r�r�r�r�r�r`r�r^r�rTr�r�r�r�r�r�r�rrrrr�hs2
Jc@s eZdZdZdd�Zdd�ZdS)r�z&Provider based on a virtual filesystemcCst�||�|��dSr)r�r�
_setup_prefixr�rrrr.szEggProvider.__init__cCsZ|j}d}||krVt|�r@tj�|�|_tj�|d�|_||_qV|}tj�	|�\}}q
dS)N�EGG-INFO)
r��_is_egg_pathr�r��basenamer�rLr��egg_rootr)r�r��oldr�rrrr�2szEggProvider._setup_prefixN)rrrrrr�rrrrr�+sc@sDeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Ze	dd
��Z
dS)r�z6Provides access to package resources in the filesystemcCstj�|�Sr)r�r�r�r�rrrr�DszDefaultProvider._hascCstj�|�Sr)r�r�r
r�rrrr�GszDefaultProvider._isdircCs
t�|�Sr)r��listdirr�rrrr�JszDefaultProvider._listdircCst|�|j|�d�S�N�rb)rr�r�r�rrrr�Msz#DefaultProvider.get_resource_streamc
Cs*t|d��}|��W5QR�SQRXdSr�)rr�)r�r��streamrrrr�PszDefaultProvider._getcCs,d}|D]}tt|td��}t||�qdS)N)�SourceFileLoader�SourcelessFileLoader)r��importlib_machinery�typer�)r	�loader_namesr��
loader_clsrrr�	_registerTszDefaultProvider._registerN)rrrrr�r�r�r�r�rJr�rrrrr�Asc@s8eZdZdZdZdd�ZZdd�Zdd�Zd	d
�Z	dS)r�z.Provider that returns nothing for all requestsNcCsdS�NFrr�rrrrBdrCzEmptyProvider.<lambda>cCsdS�Nr�rr�rrrr�fszEmptyProvider._getcCsgSrrr�rrrr�iszEmptyProvider._listdircCsdSrrr�rrrrlszEmptyProvider.__init__)
rrrrr�r�r�r�r�rrrrrr�_sc@s eZdZdZedd��ZeZdS)�ZipManifestsz
    zip manifest builder
    c
s@t�|��,��fdd����D�}t|�W5QR�SQRXdS)a
        Build a dictionary similar to the zipimport directory
        caches, except instead of tuples, store ZipInfo objects.

        Use a platform-specific path separator (os.sep) for the path keys
        for compatibility with pypy on Windows.
        c3s&|]}|�dtj���|�fVqdS)r�N)r�r�r��getinfo�rr���zfilerrr�s��z%ZipManifests.build.<locals>.<genexpr>N)�zipfile�ZipFile�namelistr')r	r�r-rr�r�buildxs
	
�zZipManifests.buildN)rrrrrJr��loadrrrrr�ss
r�c@s$eZdZdZe�dd�Zdd�ZdS)�MemoizedZipManifestsz%
    Memoized zipfile manifests.
    �manifest_modzmanifest mtimecCsRtj�|�}t�|�j}||ks.||j|krH|�|�}|�||�||<||jS)zW
        Load a manifest at path or return a suitable manifest already loaded.
        )	r�r��normpathr��st_mtime�mtimer�r��manifest)r�r�r�r�rrrr��s
zMemoizedZipManifests.loadN)rrrrr'�
namedtupler�r�rrrrr��sr�c@s�eZdZdZdZe�Zdd�Zdd�Zdd�Z	e
d	d
��Zdd�Ze
d
d��Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �ZdS)!r�z"Resource support for zips and eggsNcCs t�||�|jjtj|_dSr)r�rr��archiver�r��zip_prer�rrrr�szZipProvider.__init__cCsP|�tj�}||jjkrdS|�|j�r:|t|j�d�Std||jf��dS)Nr��%s is not a subpath of %s)	�rstripr�r�r�rr�rr��AssertionError�r��fspathrrr�
_zipinfo_name�s�zZipProvider._zipinfo_namecCsP|j|}|�|jtj�r:|t|j�dd��tj�Std||jf��dS)Nrr)rr�r�r�r�r�rr)r��zip_pathrrrr�_parts�s
�zZipProvider._partscCs|j�|jj�Sr)�_zip_manifestsr�r�rr�rrr�zipinfo�szZipProvider.zipinfocCs\|jstd��|�|�}|��}d�|�|��|krP|D]}|�||�|��q8|�||�S)Nz5resource_filename() only supported for .egg, not .zipr�)r�r��_resource_to_zip�_get_eager_resourcesrLr	�_extract_resource�
_eager_to_zip)r�r�r�r�eagersr�rrrr��s�
z!ZipProvider.get_resource_filenamecCs"|j}|jd}t�|�}||fS)N)rrr�)�	file_size�	date_time�time�mktime)�zip_stat�sizer�	timestamprrr�_get_date_and_size�s

zZipProvider._get_date_and_sizec
Csx||��kr@|��|D]}|�|tj�||��}qtj�|�S|�|j|�\}}ts`t	d��z�|�
|j|�|��}|�
||�r�|WStdtj�|�d�\}}	t�||j�|��t�|�t|	||f�|�|	|�zt|	|�Wnhtjk
�rNtj�|��rH|�
||��r |YWStjdk�rHt|�t|	|�|YWS�YnXWn tjk
�rr|��YnX|S)Nz>"os.rename" and "os.unlink" are not supported on this platformz	.$extract)�dirr�)�_indexrr�r�rLr�rr�
WRITE_SUPPORT�IOErrorr�r�r	�_is_current�_mkstemp�writer�r��closerr�r
�error�isfiler�rrz)
r�r�rr��lastrr�	real_path�outf�tmpnamrrrr�sN��
�




zZipProvider._extract_resourcec		Csx|�|j|�\}}tj�|�s$dSt�|�}|j|ksB|j|krFdS|j�	|�}t
|d��}|��}W5QRX||kS)zK
        Return True if the file_path is current for this zip_path
        Fr�)rrr�r�r"r��st_sizer�r�r�rr�)	r��	file_pathrrrr��zip_contents�f�
file_contentsrrrrs
zZipProvider._is_currentcCs>|jdkr8g}dD]}|�|�r|�|�|��q||_|jS)N)znative_libs.txtzeager_resources.txt)rr�r.r�)r�rr�rrrr
#s

z ZipProvider._get_eager_resourcesc	Cs�z|jWStk
r�i}|jD]V}|�tj�}|r"tj�|dd��}||krh||�|d�q"q2|��g||<q2q"||_|YSXdS)Nr�)	�	_dirindex�AttributeErrorrrr�r�rLr�r*)r��indr��parts�parentrrrr,s
zZipProvider._indexcCs |�|�}||jkp||��kSr)rrr)r�rrrrrr�=s
zZipProvider._hascCs|�|�|��kSr)rrrrrrr�AszZipProvider._isdircCst|���|�|�d��S�Nr)r%rr�rrrrrr�DszZipProvider._listdircCs|�|�|j|��Sr)rr�r�r�rrrrGszZipProvider._eager_to_zipcCs|�|�|j|��Sr)rr�r�r�rrrrJszZipProvider._resource_to_zip)rrrrrr�r
rrr	r�rr�r�rrrr
rr�r�r�rrrrrrr��s(



7	c@s@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)r�a*Metadata handler for standalone PKG-INFO files

    Usage::

        metadata = FileMetadata("/path/to/PKG-INFO")

    This provider rejects all data and metadata requests except for PKG-INFO,
    which is treated as existing, and will be the contents of the file at
    the provided location.
    cCs
||_dSr�r�r�rrrr]szFileMetadata.__init__cCs|jSrr2r�rrrr�`szFileMetadata._get_metadata_pathcCs|dkotj�|j�S)N�PKG-INFO)r�r�r"r�rrrr�cszFileMetadata.has_metadatac	CsD|dkrtd��tj|jddd��}|��}W5QRX|�|�|S)Nr3z(No metadata except PKG-INFO is availabler�r�)�encoding�errors)r�r�rr�r��_warn_on_replacement)r�r�r*�metadatarrrr�fs
zFileMetadata.get_metadatacCs2d�d�}||kr.d}|jft��}t�|�dS)Ns�r�z2{self.path} could not be properly decoded in UTF-8)r�r�r�r�r�)r�r7�replacement_charrxr�rrrr6os

z!FileMetadata._warn_on_replacementcCst|�|��Srr�r�rrrr�wszFileMetadata.get_metadata_linesN)
rrrrrr�r�r�r6r�rrrrr�Qs	c@seZdZdZdd�ZdS)r�asMetadata provider for egg directories

    Usage::

        # Development eggs:

        egg_info = "/path/to/PackageName.egg-info"
        base_dir = os.path.dirname(egg_info)
        metadata = PathMetadata(base_dir, egg_info)
        dist_name = os.path.splitext(os.path.basename(egg_info))[0]
        dist = Distribution(basedir, project_name=dist_name, metadata=metadata)

        # Unpacked egg directories:

        egg_path = "/path/to/PackageName-ver-pyver-etc.egg"
        metadata = PathMetadata(egg_path, os.path.join(egg_path,'EGG-INFO'))
        dist = Distribution.from_filename(egg_path, metadata=metadata)
    cCs||_||_dSr)r�r�)r�r�r�rrrr�szPathMetadata.__init__N�rrrrrrrrrr�{sc@seZdZdZdd�ZdS)r�z Metadata provider for .egg filescCsD|jtj|_||_|jr0tj�|j|j�|_n|j|_|�	�dS)z-Create a metadata provider from a zipimporterN)
rr�r�rr��prefixr�rLr�r�)r��importerrrrr�szEggMetadata.__init__Nr9rrrrr��sr'��_distribution_finderscCs|t|<dS)axRegister `distribution_finder` to find distributions in sys.path items

    `importer_type` is the type or class of a PEP 302 "Importer" (sys.path item
    handler), and `distribution_finder` is a callable that, passed a path
    item and the importer instance, yields ``Distribution`` instances found on
    that path item.  See ``pkg_resources.find_on_path`` for an example.Nr<)�
importer_type�distribution_finderrrrr��scCst|�}tt|�}||||�S)z.Yield distributions accessible via `path_item`)rr�r=)�	path_item�onlyr;�finderrrrrd�s
c	cs�|j�d�rdSt|�}|�d�r2tj||d�V|r:dS|�d�D]|}t|�r�tj	�
||�}tt�
|�|�}|D]
}|VqrqD|���d�rDtj	�
||�}tt�
|��}||_t�|||�VqDdS)z@
    Find eggs in zip files; possibly multiple nested eggs.
    z.whlNr3�r7r��
.dist-info)r�endswithr�r�rk�
from_filenamer^r�r�r�rL�find_eggs_in_zip�	zipimport�zipimporterrZr��
from_location)	r;r@rAr7�subitem�subpathrr��submetarrrrG�s$

rGcCsdSr1r)r;r@rArrr�find_nothing�srNcCsdd�}t||dd�S)aL
    Given a list of filenames, return them in descending order
    by version number.

    >>> names = 'bar', 'foo', 'Python-2.7.10.egg', 'Python-2.7.2.egg'
    >>> _by_version_descending(names)
    ['Python-2.7.10.egg', 'Python-2.7.2.egg', 'foo', 'bar']
    >>> names = 'Setuptools-1.2.3b1.egg', 'Setuptools-1.2.3.egg'
    >>> _by_version_descending(names)
    ['Setuptools-1.2.3.egg', 'Setuptools-1.2.3b1.egg']
    >>> names = 'Setuptools-1.2.3b1.egg', 'Setuptools-1.2.3.post1.egg'
    >>> _by_version_descending(names)
    ['Setuptools-1.2.3.post1.egg', 'Setuptools-1.2.3b1.egg']
    cSs2tj�|�\}}t�|�d�|g�}dd�|D�S)z6
        Parse each component of the filename
        r�cSsg|]}tj�|��qSr)rrr�)r�partrrr�
<listcomp>�sz?_by_version_descending.<locals>._by_version.<locals>.<listcomp>)r�r��splitext�	itertools�chainr)r��extr/rrr�_by_version�sz+_by_version_descending.<locals>._by_versionTr^)�sorted)rrUrrr�_by_version_descending�srWc
#s�t���t��r4tj�t�tj��d��d�VdSt��}��fdd�|D�}t	|�}|D]2}tj��|�}t
�|��}||�D]
}	|	Vq�q\dS)z6Yield distributions accessible on a sys.path directoryr�rCNc3s|]}t�|��r|VqdSr)�dist_factory)rr�rAr@rrrs�zfind_on_path.<locals>.<genexpr>)�_normalize_cached�_is_unpacked_eggrkrFr�r�r�rL�safe_listdirrWrX)
r;r@rAr��filtered�path_item_entriesr�fullpath�factoryr�rrYr�find_on_path�s(���racCsH|��}tt|jd��}|r tS|s0t|�r0tS|sB|�d�rBtSt�S)z9
    Return a dist_factory for a path_item and entry
    )�	.egg-inforDz	.egg-link)	rZrPrrE�distributions_from_metadatar�rd�resolve_egg_link�NoDists)r@rrArZ�is_metarrrrXs������rXc@s*eZdZdZdd�ZejreZdd�ZdS)rezS
    >>> bool(NoDists())
    False

    >>> list(NoDists()('anything'))
    []
    cCsdSr�rr�rrr�__bool__/szNoDists.__bool__cCstd�Sr1)�iter)r�r_rrr�__call__4szNoDists.__call__N)	rrrrrgrr��__nonzero__rirrrrre's
rec
Csvzt�|�WSttfk
r$YnNtk
rp}z0|jtjtjtjfkpXt	|dd�dk}|s`�W5d}~XYnXdS)zI
    Attempt to list contents of path, but suppress some exceptions.
    �winerrorNir)
r�r��PermissionError�NotADirectoryError�OSError�errno�ENOTDIR�EACCES�ENOENTr�)r�r��	ignorablerrrr\8s�r\ccsftj�|�}tj�|�r:tt�|��dkr.dSt||�}nt|�}tj�|�}t	j
|||td�VdS)Nr)�
precedence)r�r�r�r
r�r�r�r�r�rkrJr�)r��rootr7rrrrrcMs�rcc	cs4t|��"}|D]}|��}|r|VqW5QRXdS)z1
    Yield non-empty lines from file at path
    N)r�strip)r�r*�linerrr�non_empty_lines\s

rxcs.t��}�fdd�|D�}tt|�}t|d�S)za
    Given a path to an .egg-link, resolve distributions
    present in the referenced path.
    c3s$|]}tj�tj���|�VqdSr)r�r�rLr�)r�refr2rrrms�z#resolve_egg_link.<locals>.<genexpr>r)rxrrd�next)r��referenced_paths�resolved_paths�dist_groupsrr2rrdgs
�
rd�
FileFinder��_namespace_handlers)�_namespace_packagescCs|t|<dS)a�Register `namespace_handler` to declare namespace packages

    `importer_type` is the type or class of a PEP 302 "Importer" (sys.path item
    handler), and `namespace_handler` is a callable like this::

        def namespace_handler(importer, path_entry, moduleName, module):
            # return a path_entry to use for child packages

    Namespace handlers are only called if the importer object has already
    agreed that it can handle the relevant path item, and they should only
    return a subpath if the module __path__ does not already contain an
    equivalent subpath.  For an example namespace handler, see
    ``pkg_resources.file_ns_handler``.
    Nr)r>�namespace_handlerrrrr�~sc	Cs�t|�}|dkrdSt���t�d�|�|�}W5QRX|dkrHdStj�|�}|dkr�t�	|�}tj|<g|_
t|�nt|d�s�t
d|��tt|�}|||||�}|dk	r�|j
}|�|�|�|�t|||�|S)zEEnsure that named package includes a subpath of path_item (if needed)N�ignore�__path__�Not a package:)rr��catch_warnings�simplefilter�find_modulerJr�r��types�
ModuleTyper��_set_parent_nsr�r�r�r�r��load_module�_rebuild_mod_path)�packageNamer@r;r�r��handlerrLr�rrr�
_handle_ns�s.







r�csjdd�tjD���fdd����fdd�}t||d�}dd�|D�}t|jt�r`||jd	d	�<n||_d	S)
zq
    Rebuild module.__path__ ensuring that all entries are ordered
    corresponding to their sys.path order
    cSsg|]}t|��qSr�rZ�r�prrrrP�sz%_rebuild_mod_path.<locals>.<listcomp>cs.z��|�WStk
r(td�YSXdS)z/
        Workaround for #520 and #513.
        �infN)�indexrO�float)r)�sys_pathrr�safe_sys_path_index�sz._rebuild_mod_path.<locals>.safe_sys_path_indexcs<|�tj�}��d�d}|d|�}�ttj�|���S)zR
        Return the ordinal of the path based on its position in sys.path
        rErN)rr�r��countrZrL)r��
path_parts�module_partsr/)�package_namer�rr�position_in_sys_path�sz/_rebuild_mod_path.<locals>.position_in_sys_path)r;cSsg|]}t|��qSrr�r�rrrrP�sN)rJr�rVr�r�r%)�	orig_pathr�r�r��new_pathr)r�r�r�rr��s		r�cCs�t��z�|tkrW��dStj}|�d�\}}}|r|t|�|tkrLt|�ztj	|j
}Wntk
rztd|��YnXt�
|p�dg��|�t�
|g�|D]}t||�q�W5t��XdS)z9Declare that package 'packageName' is a namespace packageNrEr�)�_imp�acquire_lock�release_lockr�rJr��
rpartitionrar�r�r�r-r�rr�r�)r�r�r0r�r@rrrra�s&cCsFt��z.t�|d�D]}t||�}|rt||�qW5t��XdS)zDEnsure that previously-declared namespace packages include path_itemrN)r�r�r�r�r�r�r�)r@r0�packagerLrrrr��s
cCsDtj�||�d�d�}t|�}|jD]}t|�|kr&q@q&|SdS)zBCompute an ns-package subpath for a filesystem or zipfile importerrEr�N)r�r�rLrrZr�)r;r@r�r�rL�
normalizedrrrr�file_ns_handler�s
r�cCsdSrr)r;r@r�r�rrr�null_ns_handler	sr�cCs tj�tj�tj�t|����S)z1Normalize a file/dir name for comparison purposes)r�r��normcase�realpathr��
_cygwin_patch�r�rrrr	s�cCstjdkrtj�|�S|S)a
    Contrary to POSIX 2008, on Cygwin, getcwd (3) contains
    symlink components. Using
    os.path.abspath() works around this limitation. A fix in os.getcwd()
    would probably better, in Cygwin even more so, except
    that this seems to be by design...
    �cygwin)rJrKr�r��abspathr�rrrr� 	sr�cCs8z
||WStk
r2t|�||<}|YSXdSr)r�r)r�r��resultrrrrZ+	s

rZcCs|���d�S)z7
    Determine if given path appears to be an egg.
    �.egg)rZrEr2rrrr�3	sr�cCs t|�otj�tj�|dd��S)z@
    Determine if given path appears to be an unpacked egg.
    r�r3)r�r�r�r"rLr2rrrr[:	s�r[cCs<|�d�}|��}|r8d�|�}ttj||tj|�dS)NrE)rr*rL�setattrrJr�)r�r/r�r0rrrr�D	s


r�ccsZt|tj�r8|��D] }|��}|r|�d�s|Vqn|D]}t|�D]
}|VqHq<dS)z9Yield non-empty/non-comment lines of a string or sequence�#N)r�rr��
splitlinesrvr�rx)�strs�s�ssrrrrxL	s
z\w+(\.\w+)*$z�
    (?P<name>[^-]+) (
        -(?P<ver>[^-]+) (
            -py(?P<pyver>[^-]+) (
                -(?P<plat>.+)
            )?
        )?
    )?
    c@s�eZdZdZddd�Zdd�Zdd	�Zddd�Zd
d�Zddd�Z	e
�d�Ze
ddd��Ze
dd��Ze
ddd��Ze
ddd��ZdS) rmz3Object representing an advertised importable objectrNcCs<t|�std|��||_||_t|�|_t|�|_||_dS)NzInvalid module name)�MODULErOr��module_name�tuple�attrsr-r�)r�r�r�r�r-r�rrrrl	s


zEntryPoint.__init__cCsHd|j|jf}|jr*|dd�|j�7}|jrD|dd�|j�7}|S)Nz%s = %s�:rEz [%s]�,)r�r�r�rLr-)r�r�rrrr�u	szEntryPoint.__str__cCsdt|�S)NzEntryPoint.parse(%r)�r�r�rrrr�}	szEntryPoint.__repr__FcOs|r|j||�|��S)zH
        Require packages for this EntryPoint, then resolve it.
        )r�r�rSr)r�rSrA�kwargsrrrr��	szEntryPoint.loadc
CsXt|jdgdd�}zt�t|j|�WStk
rR}ztt|���W5d}~XYnXdS)zD
        Resolve the entry point from its module and attrs.
        rr)�fromlist�levelN)	r�r��	functools�reducer�r�r-rr�)r�r�r�rrrr�	s
zEntryPoint.resolvecCsL|jr|jstd|��|j�|j�}tj||||jd�}tttj|��dS)Nz&Can't require() without a distribution)r-)	r-r�rqrrbrr%rr
)r�r1r2rr-rrrrS�	s

zEntryPoint.requirez]\s*(?P<name>.+?)\s*=\s*(?P<module>[\w.]+)\s*(:\s*(?P<attr>[\w.]+))?\s*(?P<extras>\[.*\])?\s*$cCsf|j�|�}|sd}t||��|��}|�|d�}|drJ|d�d�nd}||d|d|||�S)aParse a single entry point from string `src`

        Entry point syntax follows the form::

            name = some.module:some.attr [extra1, extra2]

        The entry name and module name are required, but the ``:attrs`` and
        ``[extras]`` parts are optional
        z9EntryPoint must be in 'name=module:attrs [extras]' formatr-�attrrErr�r�)�patternrIrO�	groupdict�
_parse_extrasr)r	�srcr�rQr��resr-r�rrrr��	s
zEntryPoint.parsecCs(|sdSt�d|�}|jr"t��|jS)Nr�x)rlr��specsrOr-)r	�extras_specr�rrrr��	szEntryPoint._parse_extrascCsVt|�std|��i}t|�D]2}|�||�}|j|krFtd||j��|||j<q|S)zParse an entry point groupzInvalid group namezDuplicate entry point)r�rOrxr�r�)r	rN�linesr��thisrw�eprrr�parse_group�	s

zEntryPoint.parse_groupcCstt|t�r|��}nt|�}i}|D]J\}}|dkrB|s:q$td��|��}||kr\td|��|�|||�||<q$|S)z!Parse a map of entry point groupsNz%Entry points must be listed in groupszDuplicate group name)r�r'r-ryrOrvr�)r	�datar��mapsrNr�rrr�	parse_map�	s


zEntryPoint.parse_map)rrN)F)NN)N)N)N)rrrrrr�r�r�rrSr�r�r�rJr�r�r�r�rrrrrmi	s$
	



�	
cCs>|sdStj�|�}|d�d�r:tj�|dd�d�S|S)Nr�r�zmd5=)r�)rr��urlparser��
urlunparse)r�parsedrrr�_remove_md5_fragment�	sr�cCs@dd�}t||�}tt|�d�}|�d�\}}}t|���p>dS)z�
    Given an iterable of lines from a Metadata file, return
    the value of the Version field, if present, or None otherwise.
    cSs|���d�S)Nzversion:)rZr�)rwrrr�is_version_line�	sz+_version_from_file.<locals>.is_version_liner�r�N)rrzrh�	partitionrurv)r�r��
version_linesrwr�r�rrr�_version_from_file�	s

r�cs�eZdZdZdZddddedefdd�ZedSdd��Z	dd	�Z
ed
d��Zdd
�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zedd��Zedd��Zdd�Zed d!��Zed"d#��Zed$d%��Zd&d'�ZdTd)d*�Zd+d,�Zd-d.�Zd/d0�ZdUd2d3�Z d4d5�Z!d6d7�Z"d8d9�Z#d:d;�Z$�fd<d=�Z%e&e'd>��s4[%edVd?d@��Z(dAdB�Z)dCdD�Z*dWdEdF�Z+dGdH�Z,dXdIdJ�Z-dKdL�Z.dMdN�Z/dOdP�Z0edQdR��Z1�Z2S)Yrkz5Wrap an actual or potential sys.path entry w/metadatar3NcCsFt|pd�|_|dk	r t|�|_||_||_||_||_|p>t|_	dS)N�Unknown)
rtr/ru�_versionrVrKrrtr��	_provider)r�rr7r/rrVrKrtrrrr
s
zDistribution.__init__cKs~dgd\}}}}tj�|�\}}	|	��tkr^t|	��}t|�}
|
r^|
�dddd�\}}}}|||f||||d�|����S)Nr�r��ver�pyverrP)r/rrVrK)r�r�rQrZ�_distributionImpl�EGG_NAMErN�_reload_version)r	rr�r7r*r/rrVrKrTrIrrrrJ
s.����zDistribution.from_locationcCs|Srrr�rrrr�%
szDistribution._reload_versioncCs(|j|j|jt|j�|jpd|jp$dfSr�)�parsed_versionrtr;r�rrVrKr�rrrr](
s�zDistribution.hashcmpcCs
t|j�Sr)�hashr]r�rrr�__hash__3
szDistribution.__hash__cCs|j|jkSr�r]�r�rfrrr�__lt__6
szDistribution.__lt__cCs|j|jkSrr�r�rrr�__le__9
szDistribution.__le__cCs|j|jkSrr�r�rrr�__gt__<
szDistribution.__gt__cCs|j|jkSrr�r�rrr�__ge__?
szDistribution.__ge__cCst||j�sdS|j|jkSr�)r�r�r]r�rrr�__eq__B
szDistribution.__eq__cCs
||kSrrr�rrr�__ne__H
szDistribution.__ne__cCs6z|jWStk
r0|j��|_}|YSXdSr)�_keyr-r/rZrerrrr;O
s
zDistribution.keycCst|d�st|j�|_|jS)N�_parsed_version)r�r#rr�r�rrrr�W
s
zDistribution.parsed_versioncCsXtjj}t|j|�}|sdS|js&dSt�d����dd�}t	�
|jft|��t
�dS)Na>
            '{project_name} ({version})' is being parsed as a legacy,
            non PEP 440,
            version. You may find odd behavior and sort order.
            In particular it will be sorted as less than 0.0. It
            is recommended to migrate to PEP 440 compatible
            versions.
            r�r�)rrr!r�r�rrrsrvr�r�r�r��varsr)r��LV�	is_legacyrxrrr�_warn_legacy_version^
s�	z!Distribution._warn_legacy_versioncCsZz|jWStk
rT|��}|dkrL|�|j�}d�|j|�}t||��|YSXdS)Nz4Missing 'Version:' header and/or {} file at path: {})r�r-�_get_version�_get_metadata_path_for_display�PKG_INFOr�rO)r�rr�r�rrrrx
s��
zDistribution.versioncCs4z|jWStk
r,|�|���|_YnX|jS)z~
        A map of extra to its list of (direct) requirements
        for this distribution, including the null extra.
        )�_Distribution__dep_mapr-�_filter_extras�_build_dep_mapr�rrr�_dep_map�
s
zDistribution._dep_mapcCsrttd|��D]^}|}|�|�}|�d�\}}}|oDt|�pDt|�}|rNg}t|�pXd}|�|g��|�q|S)z�
        Given a mapping of extras to dependencies, strip off
        environment markers and filter out any dependencies
        not matching the markers.
        Nr�)	r%rr*r�r|r}rzrr.)�dmrK�	new_extrarr�rM�fails_markerrrrr��
s
�zDistribution._filter_extrascCs@i}dD]2}t|�|��D]\}}|�|g��t|��qq|S)N)zrequires.txtzdepends.txt)ry�
_get_metadatarr.rs)r�r�r�rKrrrrr��
s
zDistribution._build_dep_maprc	Csf|j}g}|�|�dd��|D]@}z|�|t|��Wq tk
r^td||f��Yq Xq |S)z@List of Requirements needed for this distro if `extras` are usedNrz%s has no such extra feature %r)r�r.r�rzr�rq)r�r-r��depsrTrrrr�
s
�zDistribution.requirescCs,z|j�|�}Wntk
r&YdSX|S)zK
        Return the path to the given metadata file, if available.
        z[could not detect])r�r�r|r�rrrr��
s
z+Distribution._get_metadata_path_for_displayccs$|�|�r |�|�D]
}|VqdSr)r�r�)r�r�rwrrrr��
s
zDistribution._get_metadatacCs|�|j�}t|�}|Sr)r�r�r�)r�r�rrrrr��
szDistribution._get_versionFcCsV|dkrtj}|j||d�|tjkrRt|j�|�d�D]}|tjkr:t|�q:dS)z>Ensure distribution is importable on `path` (default=sys.path)Nr�namespace_packages.txt)rJr�rr�rr�r�ra)r�r�r��pkgrrr�activate�
s


zDistribution.activatecCs8dt|j�t|j�|jptf}|jr4|d|j7}|S)z@Return what this distribution's standard .egg filename should bez
%s-%s-py%sr�)r{r/rrVrlrK)r�r�rrrr��
s�zDistribution.egg_namecCs |jrd||jfSt|�SdS)Nz%s (%s))rr�r�rrrr��
szDistribution.__repr__cCs@zt|dd�}Wntk
r(d}YnX|p0d}d|j|fS)Nrz[unknown version]z%s %s)r�rOr/)r�rrrrr��
s
zDistribution.__str__cCs|�d�rt|��t|j|�S)zADelegate all unrecognized public attributes to .metadata providerr�)r�r-r�r�)r�r�rrr�__getattr__�
s
zDistribution.__getattr__cs.tttt|����tdd�|j��D��B�S)Ncss|]}|�d�s|VqdS�r�N)r�)rr�rrrrs
�z'Distribution.__dir__.<locals>.<genexpr>)r%r)�superrk�__dir__r�r�rirrrs���zDistribution.__dir__rcKs|jt|�tj�|�|f|�Sr)rJrZr�r�r�)r	r�r7r*rrrrFs
��zDistribution.from_filenamecCs<t|jtjj�r"d|j|jf}nd|j|jf}t�|�S)z?Return a ``Requirement`` that matches this distribution exactlyz%s==%sz%s===%s)r�r�rrrr/rlr�)r��specrrrr;szDistribution.as_requirementcCs.|�||�}|dkr&td||ff��|��S)z=Return the `name` entry point of `group` or raise ImportErrorNzEntry point %r not found)rYrr�)r�rNr�r�rrrrW!szDistribution.load_entry_pointcCsPz
|j}Wn,tk
r6t�|�d�|�}|_YnX|dk	rL|�|i�S|S)r�zentry_points.txtN)�_ep_mapr-rmr�r�r�)r�rN�ep_maprrrrX(s
�zDistribution.get_entry_mapcCs|�|��|�Sr�)rXr�rrrrrY4szDistribution.get_entry_infoc
Cs4|p|j}|sdSt|�}tj�|�}dd�|D�}t|�D]|\}}||kr^|rVq�q�dSq<||kr<|jtkr<|s�|||d�kr�dS|tjkr�|�	�|�
||�|�
||�q�q<|tjkr�|�	�|r�|�
d|�n
|�|�dSz|�||d�}	Wnt
k
�rY�q0Yq�X||	=||	=|	}q�dS)a�Ensure self.location is on path

        If replace=False (default):
            - If location is already in path anywhere, do nothing.
            - Else:
              - If it's an egg and its parent directory is on path,
                insert just ahead of the parent.
              - Else: add to the end of path.
        If replace=True:
            - If location is already on path anywhere (not eggs)
              or higher priority than its parent (eggs)
              do nothing.
            - Else:
              - If it's an egg and its parent directory is on path,
                insert just ahead of the parent,
                removing any lower-priority entries.
              - Else: add it to the front of path.
        NcSsg|]}|rt|�p|�qSrr�r�rrrrPRsz*Distribution.insert_on.<locals>.<listcomp>rr)rrZr�r�r��	enumeratertr�rJ�check_version_conflictr!r�r�rO)
r�r��locr��nloc�bdir�npathr�r�nprrrr8s@



zDistribution.insert_oncCs�|jdkrdSt�|�d��}t|j�}|�d�D]p}|tjks2||ks2|tkrRq2|dkr\q2t	tj|dd�}|r�t|��
|�s2|�
|j�r�q2td|||jf�q2dS)N�
setuptoolsr�z
top_level.txt)�
pkg_resourcesr�siter�zIModule %s was already imported from %s, but %s is being added to sys.path)r;r'r(r�rrrJr�r�r�r��
issue_warning)r��nspr�modname�fnrrrr
|s*

�
�
��z#Distribution.check_version_conflictcCs6z
|jWn&tk
r0tdt|��YdSXdS)NzUnbuilt egg for FT)rrOrr�r�rrrr`�s
zDistribution.has_versioncKs@d}|��D]}|�|t||d��q|�d|j�|jf|�S)z@Copy this distribution, substituting in any changed keyword argsz<project_name version py_version platform location precedenceNr7)rrr�r�r�)r�r*rr�rrr�clone�s
zDistribution.clonecCsdd�|jD�S)NcSsg|]}|r|�qSrr)r�deprrrrP�sz'Distribution.extras.<locals>.<listcomp>)r�r�rrrr-�szDistribution.extras)N)r)NF)N)N)NF)3rrrrr�rlr�rrJrJr�r�r]r�r�r�r�r�r�r�r;r�r�rr�r�r�r�rr�r�r�rr�r�r�rrr��objectrFr;rWrXrYrr
r`rr-�
__classcell__rrrirrk
st�










		

Dc@seZdZdd�ZdS)�EggInfoDistributioncCs|��}|r||_|S)a�
        Packages installed by distutils (e.g. numpy or scipy),
        which uses an old safe_version, and so
        their version numbers can get mangled when
        converted to filenames (e.g., 1.11.0.dev0+2329eae to
        1.11.0.dev0_2329eae). These distributions will not be
        parsed properly
        downstream by Distribution and safe_version, so
        take an extra step and try to get the version number from
        the metadata file itself instead of the filename.
        )r�r�)r��
md_versionrrrr��sz#EggInfoDistribution._reload_versionN)rrrr�rrrrr�src@s>eZdZdZdZe�d�Zedd��Z	edd��Z
dd	�Zd
S)�DistInfoDistributionzV
    Wrap an actual or potential sys.path entry
    w/metadata, .dist-info style.
    �METADATAz([\(,])\s*(\d.*?)\s*([,\)])cCsFz|jWStk
r@|�|j�}tj���|�|_|jYSXdS)zParse and cache metadataN)�	_pkg_infor-r�r��email�parser�Parser�parsestr)r�r7rrr�_parsed_pkg_info�sz%DistInfoDistribution._parsed_pkg_infocCs2z|jWStk
r,|��|_|jYSXdSr)�_DistInfoDistribution__dep_mapr-�_compute_dependenciesr�rrrr��s

zDistInfoDistribution._dep_mapcs�dgi}|_g�|j�d�p gD]}��t|��q"�fdd�}t|d��}|d�|�|j�d�pjgD](}t|���}tt||��|�||<ql|S)z+Recompute this distribution's dependencies.Nz
Requires-Distc3s*�D] }|jr|j�d|i�r|VqdS)NrKrL)rKr��rrr�reqs_for_extra�szBDistInfoDistribution._compute_dependencies.<locals>.reqs_for_extrazProvides-Extra)	r%r$�get_allr.rs�	frozensetrzrvr%)r�r�r�r(�commonrK�s_extrarr'rr&�sz*DistInfoDistribution._compute_dependenciesN)rrrrr�r�r��EQEQr�r$r�r&rrrrr�s

	
r)r�rbrDcOsZd}t�}zt�|�j|kr&|d7}qWntk
r<YnXtj|d|di|��dS)Nrr�)r$rJr�r�rOr�r�)rAr*r�r0rrrr�src@seZdZdd�ZdS)�RequirementParseErrorcCsd�|j�S)Nr�)rLrAr�rrrr�szRequirementParseError.__str__N)rrrr�rrrrr.sr.c	cs�tt|��}|D]l}d|kr.|d|�d��}|�d�rr|dd���}z|t|�7}Wntk
rpYdSXt|�VqdS)z�Yield ``Requirement`` objects for each specification in `strs`

    `strs` must be a string, or a (possibly-nested) iterable thereof.
    z #N�\���)rhrxr�rErvrz�
StopIterationrl)r�r�rwrrrrss

csPeZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	d
d��Z
�ZS)rlc
s�ztt|��|�Wn2tjjk
rF}ztt|���W5d}~XYnX|j|_	t
|j�}||��|_|_
dd�|jD�|_ttt|j��|_|j
|j|jt|j�|jr�t|j�ndf|_t|j�|_dS)z>DO NOT CALL THIS UNDOCUMENTED METHOD; use Requirement.parse()!NcSsg|]}|j|jf�qSr)rar)rrrrrrP%sz(Requirement.__init__.<locals>.<listcomp>)rrlrrr0�InvalidRequirementr.r�r��unsafe_namertrZr/r;�	specifierr�r�rrzr-�urlr*rM�hashCmpr��_Requirement__hash)r��requirement_stringr�r/rirrrs$
��zRequirement.__init__cCst|t�o|j|jkSr)r�rlr6r�rrrr�1s

�zRequirement.__eq__cCs
||kSrrr�rrrr�7szRequirement.__ne__cCs0t|t�r |j|jkrdS|j}|jj|dd�S)NFT)�prereleases)r�rkr;rr4�contains)r�rrrrr:s

zRequirement.__contains__cCs|jSr)r7r�rrrr�FszRequirement.__hash__cCsdt|�S)NzRequirement.parse(%r)r�r�rrrr�IszRequirement.__repr__cCst|�\}|Sr)rs)r�r�rrrr�Ls
zRequirement.parse)rrrrr�r�rr�r�r�r�rrrrirrlscCst|kr|tfS|S)zJ
    Ensure object appears in the mro even
    for old-style classes.
    )r)�classesrrr�_always_objectRs
r<cCs<tt�t|dt|����}|D]}||kr||SqdS)z2Return an adapter factory for `ob` from `registry`r�N)r<�inspect�getmror�r�)�registryr<r��trrrr�\sr�cCstj�|�}tj|dd�dS)z1Ensure that the parent directory of `path` existsT)�exist_okN)r�r�r�r�makedirs)r�r�rrrr~dscCsXtstd��t|�\}}|rT|rTt|�sTt|�zt|d�Wntk
rRYnXdS)z/Sandbox-bypassing version of ensure_directory()z*"os.mkdir" not supported on this platform.i�N)rrrr
r{r	�FileExistsError)r�r�r�rrrr{jsr{ccsvd}g}t|�D]V}|�d�r\|�d�rP|s0|r:||fV|dd���}g}qftd|��q|�|�q||fVdS)asSplit a string or iterable thereof into (section, content) pairs

    Each ``section`` is a stripped version of the section header ("[section]")
    and each ``content`` is a list of stripped lines excluding blank lines and
    comment-only lines.  If there are any such lines before the first section
    header, they're returned in a first ``section`` of ``None``.
    N�[�]rr�zInvalid section heading)rxr�rErvrOr�)r��section�contentrwrrrryws


cOs*tj}ztt_tj||�W�S|t_XdSr)r�r�os_open�tempfile�mkstemp)rAr*�old_openrrrr�s
rr�)�categoryr�cOs|||�|Srr)r*rAr�rrr�_call_aside�s
rMcs.t���|d<|��fdd�t��D��dS)z=Set up global resource manager (deliberately not state-saved)�_managerc3s&|]}|�d�s|t�|�fVqdSr)r�r�r��r�rrr�s
�z_initialize.<locals>.<genexpr>N)rjr%r)r0rrOr�_initialize�s
�rPcCs|t��}td|d�|j}|j}|j}|j}|}tdd�|D��|dd�dd�g|_t	t
|jtj
��t��t��d	S)
aE
    Prepare the master working set and make the ``require()``
    API available.

    This function has explicit effects on the global state
    of pkg_resources. It is intended to be invoked once at
    the initialization of this module.

    Invocation by other packages is unsupported and done
    at their own risk.
    r)rbcss|]}|jdd�VqdS)FrN�r)rr�rrrr�s�z1_initialize_master_working_set.<locals>.<genexpr>cSs|jdd�S)NTrrQr�rrrrB�rCz0_initialize_master_working_set.<locals>.<lambda>F)rGN)rirr+rSrZrHrTr�r�r%rrrJr�r$r%r�)rbrSrZrcrTr�rrr�_initialize_master_working_set�s"
��rRc@seZdZdZdS)r�z�
    Base class for warning about deprecations in ``pkg_resources``

    This class is not derived from ``DeprecationWarning``, and as such is
    visible by default.
    Nrrrrrr��s)N)N)F)F)F)F)N)�r�
__future__rrJr�r�rr�r�r�rHr�r�r��pkgutilrarKr'�email.parserr rorIrrrRr=r�r�rr�r�imprC�	NameErrorrn�pkg_resources.externr�pkg_resources.extern.six.movesrrrrr	r
rrrrH�os.pathr
r�importlib.machinery�	machineryr�rr�rrrr�r��
__metaclass__�version_info�RuntimeErrorr�rlrmrSrbrc�resources_streamrf�resource_dirr\rer`r[rZr^r]r_r=r�r��RuntimeWarningrr#r&r+r2r4r8r=r>r?�
_sget_none�
_sset_nonerR�__all__r|rnror�rprqr�r�rlr�r�r�r�r�r�rUrMr�rGr�rHr�rvrwrTr�rVrWrXrYr�r�rir'r&rhr�rrrjrgrtrurzr{r|r}r�rr�r�r�r�r�r�r�r�rIr�r�r�r�rdrGrNrWrarXrer\rcrxrd�ImpImporterr�r~r�r�r�rar�r�r�rr�rZr�r[r�rxrIr��VERBOSE�
IGNORECASEr�rmr�r�rkrrr�rrOr.rsr0rlr<r�r~r{ryr�filterwarningsrMr$rPrR�Warningr�rrrr�<module>sZ



�2 




.
5	A
-*

 ""


	
�	
'3�
7


'X��@sdS)N�rrr�@/usr/lib/python3/dist-packages/pkg_resources/_vendor/__init__.py�<module>�X�O�@s�dZdZd�eee��ZddlZddlZejddkZ	e	r>eZ
ej�d�r�ddlZe�
�ddZe�d�rrdZq�e�d	�r�d
Zq�dZnejZd4d
d�Zd5dd�Zd6dd�Zd7dd�Zd8dd�Zd9dd�Zd:dd�ZGdd�de�Zdd�Zd d!�Zd"d#�Zd$d%�Zedk�r�ze�eZWnnek
�r�zdd&lm Z eZWnBek
�r�zddl!Z"eZWnek
�r|eZYnXYnXYnXe#d'k�r�d(Z$d)Z%d*Z&e'd+e�e'd,�ee$e%d-d.�Z(e&D]Z)e'd/e)e*e(e)�f��q�e'd0�ee$e%�Z(e&D]Z)e'd/e)e*e(e)�f��q�e'd1�ee$�Z(e&D]Z)e'd/e)e*e(e)�f��q,e'd2�ee$dd3�Z(e&D]Z)e'd/e)e*e(e)�f��qbdS);zyUtilities for determining application-specific dirs.

See <http://github.com/ActiveState/appdirs> for details and usage.
)����.�Nr�java�Windows�win32ZMac�darwinZlinux2FcCs�tdkr^|dkr|}|rdpd}tj�t|��}|r�|dk	rNtj�|||�}q�tj�||�}nNtdkr�tj�d�}|r�tj�||�}n&t�dtj�d	��}|r�tj�||�}|r�|r�tj�||�}|S)
aJReturn full path to the user-specific data dir for this application.

        "appname" is the name of application.
            If None, just the system directory is returned.
        "appauthor" (only used on Windows) is the name of the
            appauthor or distributing body for this application. Typically
            it is the owning company name. This falls back to appname. You may
            pass False to disable it.
        "version" is an optional version path element to append to the
            path. You might want to use this if you want multiple versions
            of your app to be able to run independently. If used, this
            would typically be "<major>.<minor>".
            Only applied when appname is present.
        "roaming" (boolean, default False) can be set True to use the Windows
            roaming appdata directory. That means that for users on a Windows
            network setup for roaming profiles, this user data will be
            sync'd on login. See
            <http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx>
            for a discussion of issues.

    Typical user data directories are:
        Mac OS X:               ~/Library/Application Support/<AppName>
        Unix:                   ~/.local/share/<AppName>    # or in $XDG_DATA_HOME, if defined
        Win XP (not roaming):   C:\Documents and Settings\<username>\Application Data\<AppAuthor>\<AppName>
        Win XP (roaming):       C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName>
        Win 7  (not roaming):   C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName>
        Win 7  (roaming):       C:\Users\<username>\AppData\Roaming\<AppAuthor>\<AppName>

    For Unix, we follow the XDG spec and support $XDG_DATA_HOME.
    That means, by default "~/.local/share/<AppName>".
    rN�
CSIDL_APPDATA�CSIDL_LOCAL_APPDATAFr	z~/Library/Application Support/�
XDG_DATA_HOMEz~/.local/share��system�os�path�normpath�_get_win_folder�join�
expanduser�getenv)�appname�	appauthor�version�roaming�constr�r�?/usr/lib/python3/dist-packages/pkg_resources/_vendor/appdirs.py�
user_data_dir-s& rcstdkrR|dkr�}tj�td��}�r�|dk	rBtj�||��}q�tj�|��}n�tdkrztj�d�}�r�tj�|��}ntt�dtj�dd	g��}d
d�|�	tj�D�}�r�|r�tj��|���fdd�|D�}|r�tj�|�}n|d
}|S��r|�rtj�||�}|S)aiReturn full path to the user-shared data dir for this application.

        "appname" is the name of application.
            If None, just the system directory is returned.
        "appauthor" (only used on Windows) is the name of the
            appauthor or distributing body for this application. Typically
            it is the owning company name. This falls back to appname. You may
            pass False to disable it.
        "version" is an optional version path element to append to the
            path. You might want to use this if you want multiple versions
            of your app to be able to run independently. If used, this
            would typically be "<major>.<minor>".
            Only applied when appname is present.
        "multipath" is an optional parameter only applicable to *nix
            which indicates that the entire list of data dirs should be
            returned. By default, the first item from XDG_DATA_DIRS is
            returned, or '/usr/local/share/<AppName>',
            if XDG_DATA_DIRS is not set

    Typical site data directories are:
        Mac OS X:   /Library/Application Support/<AppName>
        Unix:       /usr/local/share/<AppName> or /usr/share/<AppName>
        Win XP:     C:\Documents and Settings\All Users\Application Data\<AppAuthor>\<AppName>
        Vista:      (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.)
        Win 7:      C:\ProgramData\<AppAuthor>\<AppName>   # Hidden, but writeable on Win 7.

    For Unix, this is using the $XDG_DATA_DIRS[0] default.

    WARNING: Do not use this on Windows. See the Vista-Fail note above for why.
    rN�CSIDL_COMMON_APPDATAFr	z/Library/Application Support�
XDG_DATA_DIRSz/usr/local/sharez
/usr/sharecSs g|]}tj�|�tj���qSr�rrr�rstrip�sep��.0�xrrr�
<listcomp>�sz!site_data_dir.<locals>.<listcomp>csg|]}tj�|�g��qSr�rr"rr#�rrrr&�sr)
rrrrrrrr�pathsep�split�rrr�	multipathr�pathlistrr(r�
site_data_dirds6�r.cCsXtdkrt||d|�}n&t�dtj�d��}|r>tj�||�}|rT|rTtj�||�}|S)a�Return full path to the user-specific config dir for this application.

        "appname" is the name of application.
            If None, just the system directory is returned.
        "appauthor" (only used on Windows) is the name of the
            appauthor or distributing body for this application. Typically
            it is the owning company name. This falls back to appname. You may
            pass False to disable it.
        "version" is an optional version path element to append to the
            path. You might want to use this if you want multiple versions
            of your app to be able to run independently. If used, this
            would typically be "<major>.<minor>".
            Only applied when appname is present.
        "roaming" (boolean, default False) can be set True to use the Windows
            roaming appdata directory. That means that for users on a Windows
            network setup for roaming profiles, this user data will be
            sync'd on login. See
            <http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx>
            for a discussion of issues.

    Typical user config directories are:
        Mac OS X:               same as user_data_dir
        Unix:                   ~/.config/<AppName>     # or in $XDG_CONFIG_HOME, if defined
        Win *:                  same as user_data_dir

    For Unix, we follow the XDG spec and support $XDG_CONFIG_HOME.
    That means, by default "~/.config/<AppName>".
    �rr	N�XDG_CONFIG_HOMEz	~/.config�rrrrrrr�rrrrrrrr�user_config_dir�sr3cs�tdkr*t�|�}�r�|r�tj�||�}ndt�dd�}dd�|�tj�D�}�rt|rbtj��|���fdd�|D�}|r�tj�|�}n|d}|S)aReturn full path to the user-shared data dir for this application.

        "appname" is the name of application.
            If None, just the system directory is returned.
        "appauthor" (only used on Windows) is the name of the
            appauthor or distributing body for this application. Typically
            it is the owning company name. This falls back to appname. You may
            pass False to disable it.
        "version" is an optional version path element to append to the
            path. You might want to use this if you want multiple versions
            of your app to be able to run independently. If used, this
            would typically be "<major>.<minor>".
            Only applied when appname is present.
        "multipath" is an optional parameter only applicable to *nix
            which indicates that the entire list of config dirs should be
            returned. By default, the first item from XDG_CONFIG_DIRS is
            returned, or '/etc/xdg/<AppName>', if XDG_CONFIG_DIRS is not set

    Typical site config directories are:
        Mac OS X:   same as site_data_dir
        Unix:       /etc/xdg/<AppName> or $XDG_CONFIG_DIRS[i]/<AppName> for each value in
                    $XDG_CONFIG_DIRS
        Win *:      same as site_data_dir
        Vista:      (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.)

    For Unix, this is using the $XDG_CONFIG_DIRS[0] default, if multipath=False

    WARNING: Do not use this on Windows. See the Vista-Fail note above for why.
    r/�XDG_CONFIG_DIRSz/etc/xdgcSs g|]}tj�|�tj���qSrr r#rrrr&�sz#site_config_dir.<locals>.<listcomp>csg|]}tj�|�g��qSrr'r#r(rrr&�sr)rr.rrrrr*r)r+rr(r�site_config_dir�s
r5TcCs�tdkrd|dkr|}tj�td��}|r�|dk	rBtj�|||�}ntj�||�}|r�tj�|d�}nNtdkr�tj�d�}|r�tj�||�}n&t�dtj�d	��}|r�tj�||�}|r�|r�tj�||�}|S)
aReturn full path to the user-specific cache dir for this application.

        "appname" is the name of application.
            If None, just the system directory is returned.
        "appauthor" (only used on Windows) is the name of the
            appauthor or distributing body for this application. Typically
            it is the owning company name. This falls back to appname. You may
            pass False to disable it.
        "version" is an optional version path element to append to the
            path. You might want to use this if you want multiple versions
            of your app to be able to run independently. If used, this
            would typically be "<major>.<minor>".
            Only applied when appname is present.
        "opinion" (boolean) can be False to disable the appending of
            "Cache" to the base app data dir for Windows. See
            discussion below.

    Typical user cache directories are:
        Mac OS X:   ~/Library/Caches/<AppName>
        Unix:       ~/.cache/<AppName> (XDG default)
        Win XP:     C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName>\Cache
        Vista:      C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName>\Cache

    On Windows the only suggestion in the MSDN docs is that local settings go in
    the `CSIDL_LOCAL_APPDATA` directory. This is identical to the non-roaming
    app data dir (the default returned by `user_data_dir` above). Apps typically
    put cache data somewhere *under* the given dir here. Some examples:
        ...\Mozilla\Firefox\Profiles\<ProfileName>\Cache
        ...\Acme\SuperApp\Cache\1.0
    OPINION: This function appends "Cache" to the `CSIDL_LOCAL_APPDATA` value.
    This can be disabled with the `opinion=False` option.
    rNrF�Cacher	z~/Library/Caches�XDG_CACHE_HOMEz~/.cacher
�rrr�opinionrrrr�user_cache_dirs(!r:cCsXtdkrt||d|�}n&t�dtj�d��}|r>tj�||�}|rT|rTtj�||�}|S)aReturn full path to the user-specific state dir for this application.

        "appname" is the name of application.
            If None, just the system directory is returned.
        "appauthor" (only used on Windows) is the name of the
            appauthor or distributing body for this application. Typically
            it is the owning company name. This falls back to appname. You may
            pass False to disable it.
        "version" is an optional version path element to append to the
            path. You might want to use this if you want multiple versions
            of your app to be able to run independently. If used, this
            would typically be "<major>.<minor>".
            Only applied when appname is present.
        "roaming" (boolean, default False) can be set True to use the Windows
            roaming appdata directory. That means that for users on a Windows
            network setup for roaming profiles, this user data will be
            sync'd on login. See
            <http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx>
            for a discussion of issues.

    Typical user state directories are:
        Mac OS X:  same as user_data_dir
        Unix:      ~/.local/state/<AppName>   # or in $XDG_STATE_HOME, if defined
        Win *:     same as user_data_dir

    For Unix, we follow this Debian proposal <https://wiki.debian.org/XDGBaseDirectorySpecification#state>
    to extend the XDG spec and support $XDG_STATE_HOME.

    That means, by default "~/.local/state/<AppName>".
    r/N�XDG_STATE_HOMEz~/.local/stater1r2rrr�user_state_dir:sr<cCs�tdkr tj�tj�d�|�}nNtdkrLt|||�}d}|rntj�|d�}n"t|||�}d}|rntj�|d�}|r�|r�tj�||�}|S)a�Return full path to the user-specific log dir for this application.

        "appname" is the name of application.
            If None, just the system directory is returned.
        "appauthor" (only used on Windows) is the name of the
            appauthor or distributing body for this application. Typically
            it is the owning company name. This falls back to appname. You may
            pass False to disable it.
        "version" is an optional version path element to append to the
            path. You might want to use this if you want multiple versions
            of your app to be able to run independently. If used, this
            would typically be "<major>.<minor>".
            Only applied when appname is present.
        "opinion" (boolean) can be False to disable the appending of
            "Logs" to the base app data dir for Windows, and "log" to the
            base cache dir for Unix. See discussion below.

    Typical user log directories are:
        Mac OS X:   ~/Library/Logs/<AppName>
        Unix:       ~/.cache/<AppName>/log  # or under $XDG_CACHE_HOME if defined
        Win XP:     C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName>\Logs
        Vista:      C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName>\Logs

    On Windows the only suggestion in the MSDN docs is that local settings
    go in the `CSIDL_LOCAL_APPDATA` directory. (Note: I'm interested in
    examples of what some windows apps use for a logs dir.)

    OPINION: This function appends "Logs" to the `CSIDL_LOCAL_APPDATA`
    value for Windows and appends "log" to the user cache dir for Unix.
    This can be disabled with the `opinion=False` option.
    r	z~/Library/LogsrF�Logs�log)rrrrrrr:r8rrr�user_log_dirds" 
�r?c@sneZdZdZddd�Zedd��Zedd	��Zed
d��Zedd
��Z	edd��Z
edd��Zedd��ZdS)�AppDirsz1Convenience wrapper for getting application dirs.NFcCs"||_||_||_||_||_dS)N)rrrrr,)�selfrrrrr,rrr�__init__�s
zAppDirs.__init__cCst|j|j|j|jd�S�N)rr)rrrrr�rArrrr�s
�zAppDirs.user_data_dircCst|j|j|j|jd�S�N)rr,)r.rrrr,rDrrrr.�s
�zAppDirs.site_data_dircCst|j|j|j|jd�SrC)r3rrrrrDrrrr3�s
�zAppDirs.user_config_dircCst|j|j|j|jd�SrE)r5rrrr,rDrrrr5�s
�zAppDirs.site_config_dircCst|j|j|jd�S�N�r)r:rrrrDrrrr:�s
�zAppDirs.user_cache_dircCst|j|j|jd�SrF)r<rrrrDrrrr<�s
�zAppDirs.user_state_dircCst|j|j|jd�SrF)r?rrrrDrrrr?�s
�zAppDirs.user_log_dir)NNNFF)
�__name__�
__module__�__qualname__�__doc__rB�propertyrr.r3r5r:r<r?rrrrr@�s&�






r@cCsHtrddl}nddl}dddd�|}|�|jd�}|�||�\}}|S)z�This is a fallback technique at best. I'm not sure if using the
    registry for this guarantees us the correct answer for all CSIDL_*
    names.
    rN�AppDatazCommon AppDataz
Local AppData�r
rrz@Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders)�PY3�winreg�_winreg�OpenKey�HKEY_CURRENT_USER�QueryValueEx)�
csidl_namerQ�shell_folder_name�key�dir�typerrr�_get_win_folder_from_registry�s
���rZcCs�ddlm}m}|�dt||�dd�}z^t|�}d}|D]}t|�dkr8d}qRq8|r�zddl}|�|�}Wnt	k
r�YnXWnt
k
r�YnX|S)Nr)�shellcon�shellF�T)�win32com.shellr[r\�SHGetFolderPath�getattr�unicode�ord�win32api�GetShortPathName�ImportError�UnicodeError)rUr[r\rX�
has_high_char�crcrrr�_get_win_folder_with_pywin32�s$
ricCs�ddl}dddd�|}|�d�}|jj�d|dd|�d}|D]}t|�dkr@d	}qZq@|r�|�d�}|jj�|j|d�r�|}|jS)
Nr��#�rNiFr]T)	�ctypes�create_unicode_buffer�windll�shell32�SHGetFolderPathWrb�kernel32�GetShortPathNameW�value)rUrm�csidl_const�bufrgrh�buf2rrr�_get_win_folder_with_ctypes�s&��

rxcCs�ddl}ddlm}ddlm}|jjd}|�d|�}|jj	}|�
dt|j|�d|jj
|�|j�|����d�}d}|D]}	t|	�dkr|d	}q�q||r�|�d|�}|jj	}
|
�|||�r�|j�|����d�}|S)
Nr)�jna)r�rh�Fr]T)�array�com.sunry�com.sun.jna.platformr�WinDef�MAX_PATH�zeros�Shell32�INSTANCEr_r`�ShlObj�SHGFP_TYPE_CURRENT�Native�toString�tostringr!rb�Kernel32rd)rUr|ryr�buf_sizervr\rXrgrh�kernelrrr�_get_win_folder_with_jnas&r�)ro�__main__ZMyAppZ	MyCompany)rr3r:r<r?r.r5z-- app dirs %s --z%-- app dirs (with optional 'version')z1.0rGz%s: %sz)
-- app dirs (without optional 'version')z+
-- app dirs (without optional 'appauthor')z(
-- app dirs (with disabled 'appauthor'))r)NNNF)NNNF)NNNF)NNNF)NNNT)NNNF)NNNT)+rK�__version_info__r�map�str�__version__�sysr�version_inforOra�platform�
startswith�java_ver�os_namerrr.r3r5r:r<r?�objectr@rZrirxr�rerrmro�com.sun.jna�comrHrr�props�print�dirs�propr`rrrr�<module>s~



7
B
(
3
9
*
30


X�@sTddlmZmZmZddlmZmZmZmZm	Z	m
Z
mZmZdddddd	d
dgZ
dS)
�)�absolute_import�division�print_function�)�
__author__�
__copyright__�	__email__�__license__�__summary__�	__title__�__uri__�__version__rr
rr
rrr	rN)�
__future__rrr�	__about__rrrr	r
rrr
�__all__�rr�J/usr/lib/python3/dist-packages/pkg_resources/_vendor/packaging/__init__.py�<module>s(�X��@sPddlmZmZmZdddddddd	gZd
ZdZdZd
ZdZ	dZ
dZde	ZdS)�)�absolute_import�division�print_function�	__title__�__summary__�__uri__�__version__�
__author__�	__email__�__license__�
__copyright__�	packagingz"Core utilities for Python packagesz!https://github.com/pypa/packagingz16.8z)Donald Stufft and individual contributorszdonald@stufft.ioz"BSD or Apache License, Version 2.0zCopyright 2014-2016 %sN)
�
__future__rrr�__all__rrrrr	r
rr�rr�K/usr/lib/python3/dist-packages/pkg_resources/_vendor/packaging/__about__.py�<module>s"�X��@sVddlmZmZmZddlZejddkZejddkZerDefZ	ne
fZ	dd�ZdS)�)�absolute_import�division�print_functionN��cs&G��fdd�d��}t�|ddi�S)z/
    Create a base class with a metaclass.
    cseZdZ��fdd�ZdS)z!with_metaclass.<locals>.metaclasscs�|�|�S)N�)�cls�name�
this_bases�d��bases�metar�I/usr/lib/python3/dist-packages/pkg_resources/_vendor/packaging/_compat.py�__new__sz)with_metaclass.<locals>.metaclass.__new__N)�__name__�
__module__�__qualname__rrrrr�	metaclasssr�temporary_classr)�typer)rr
rrrr�with_metaclasssr)�
__future__rrr�sys�version_info�PY2�PY3�str�string_types�
basestringrrrrr�<module>sX�
�@sDddlmZmZmZGdd�de�Ze�ZGdd�de�Ze�ZdS)�)�absolute_import�division�print_functionc@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�InfinitycCsdS)Nr���selfrr�M/usr/lib/python3/dist-packages/pkg_resources/_vendor/packaging/_structures.py�__repr__	szInfinity.__repr__cCstt|��S�N��hash�reprrrrr	�__hash__szInfinity.__hash__cCsdS�NFr�r�otherrrr	�__lt__szInfinity.__lt__cCsdSrrrrrr	�__le__szInfinity.__le__cCst||j�Sr��
isinstance�	__class__rrrr	�__eq__szInfinity.__eq__cCst||j�Srrrrrr	�__ne__szInfinity.__ne__cCsdS�NTrrrrr	�__gt__szInfinity.__gt__cCsdSrrrrrr	�__ge__szInfinity.__ge__cCstSr)�NegativeInfinityrrrr	�__neg__!szInfinity.__neg__N��__name__�
__module__�__qualname__r
rrrrrrrrrrrr	rsrc@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)rcCsdS)Nz	-Infinityrrrrr	r
)szNegativeInfinity.__repr__cCstt|��Srrrrrr	r,szNegativeInfinity.__hash__cCsdSrrrrrr	r/szNegativeInfinity.__lt__cCsdSrrrrrr	r2szNegativeInfinity.__le__cCst||j�Srrrrrr	r5szNegativeInfinity.__eq__cCst||j�Srrrrrr	r8szNegativeInfinity.__ne__cCsdSrrrrrr	r;szNegativeInfinity.__gt__cCsdSrrrrrr	r>szNegativeInfinity.__ge__cCstSr)rrrrr	rAszNegativeInfinity.__neg__Nrrrrr	r'srN)�
__future__rrr�objectrrrrrr	�<module>sX�"�	@s@ddlmZmZmZddlZddlZddlZddlZddlm	Z	m
Z
mZmZddlm
Z
mZmZmZddlmZddlmZddlmZmZd	d
ddd
gZGdd	�d	e�ZGdd
�d
e�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�Z Gdd�de�Z!ed�ed�Bed�Bed�Bed�Bed�Bed�Bed �Bed!�Bed"�Bed#�Bed$�Bed%�Bed&�Bed'�Bed(�Bed)�Bed*�BZ"d#d"ddddd+�Z#e"�$d,d-��ed.�ed/�Bed0�Bed1�Bed2�Bed3�Bed4�Bed5�BZ%e%ed6�Bed7�BZ&e&�$d8d-��ed9�ed:�BZ'e'�$d;d-��ed<�ed=�BZ(e"e'BZ)ee)e&e)�Z*e*�$d>d-��ed?��+�Z,ed@��+�Z-e�Z.e*ee,e.e-�BZ/e.e/e
e(e.�>ee.eZ0dAdB�Z1dSdDdE�Z2dFd-�dGd-�ej3ej4ej5ej6ej7ej8dH�Z9dIdJ�Z:e�Z;dKdL�Z<dMdN�Z=dOdP�Z>dQd
�Z?GdRd�de�Z@dS)T�)�absolute_import�division�print_functionN)�ParseException�ParseResults�stringStart�	stringEnd)�
ZeroOrMore�Group�Forward�QuotedString)�Literal�)�string_types)�	Specifier�InvalidSpecifier�
InvalidMarker�UndefinedComparison�UndefinedEnvironmentName�Marker�default_environmentc@seZdZdZdS)rzE
    An invalid marker was found, users should refer to PEP 508.
    N��__name__�
__module__�__qualname__�__doc__�rr�I/usr/lib/python3/dist-packages/pkg_resources/_vendor/packaging/markers.pyrsc@seZdZdZdS)rzP
    An invalid operation was attempted on a value that doesn't support it.
    Nrrrrrrsc@seZdZdZdS)rz\
    A name was attempted to be used that does not exist inside of the
    environment.
    Nrrrrrr%sc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�NodecCs
||_dS�N)�value)�selfr rrr�__init__.sz
Node.__init__cCs
t|j�Sr)�strr �r!rrr�__str__1szNode.__str__cCsd�|jjt|��S)Nz<{0}({1!r})>)�format�	__class__rr#r$rrr�__repr__4sz
Node.__repr__cCst�dSr)�NotImplementedErrorr$rrr�	serialize7szNode.serializeN)rrrr"r%r(r*rrrrr,src@seZdZdd�ZdS)�VariablecCst|�Sr�r#r$rrrr*=szVariable.serializeN�rrrr*rrrrr+;sr+c@seZdZdd�ZdS)�ValuecCs
d�|�S)Nz"{0}")r&r$rrrr*CszValue.serializeNr-rrrrr.Asr.c@seZdZdd�ZdS)�OpcCst|�Srr,r$rrrr*IszOp.serializeNr-rrrrr/Gsr/�implementation_version�platform_python_implementation�implementation_name�python_full_version�platform_release�platform_version�platform_machine�platform_system�python_version�sys_platform�os_name�os.name�sys.platform�platform.version�platform.machine�platform.python_implementation�python_implementation�extra)r;r<r=r>r?r@cCstt�|d|d��S�Nr)r+�ALIASES�get��s�l�trrr�<lambda>i�rIz===�==�>=�<=�!=z~=�>�<�not in�incCst|d�SrB)r/rErrrrIwrJ�'�"cCst|d�SrB)r.rErrrrIzrJ�and�orcCst|d�SrB)�tuplerErrrrI�rJ�(�)cCs t|t�rdd�|D�S|SdS)NcSsg|]}t|��qSr)�_coerce_parse_result)�.0�irrr�
<listcomp>�sz(_coerce_parse_result.<locals>.<listcomp>)�
isinstancer)�resultsrrrrZ�s
rZTcCs�t|tttf�st�t|t�rHt|�dkrHt|dttf�rHt|d�St|t�r�dd�|D�}|rnd�|�Sdd�|�dSn"t|t�r�d�dd	�|D��S|SdS)
Nrrcss|]}t|dd�VqdS)F)�firstN)�_format_marker�r[�mrrr�	<genexpr>�sz!_format_marker.<locals>.<genexpr>� rXrYcSsg|]}|���qSr)r*rbrrrr]�sz"_format_marker.<locals>.<listcomp>)r^�listrWr�AssertionError�lenra�join)�markerr`�innerrrrra�s�


racCs||kSrr��lhs�rhsrrrrI�rJcCs||kSrrrlrrrrI�rJ)rRrQrPrMrKrNrLrOcCslztd�|��|g��}Wntk
r.YnX|�|�St�|���}|dkrbtd�|||���|||�S)N�z#Undefined {0!r} on {1!r} and {2!r}.)	rrir*r�contains�
_operatorsrDrr&)rm�oprn�spec�operrrr�_eval_op�s
�rucCs&|�|t�}|tkr"td�|���|S)Nz/{0!r} does not exist in evaluation environment.)rD�
_undefinedrr&)�environment�namer rrr�_get_env�s�ryc	Cs�gg}|D]�}t|tttf�s"t�t|t�rB|d�t||��q
t|t�r�|\}}}t|t�rtt||j	�}|j	}n|j	}t||j	�}|d�t
|||��q
|dks�t�|dkr
|�g�q
tdd�|D��S)N���)rUrVrVcss|]}t|�VqdSr)�all)r[�itemrrrrd�sz$_evaluate_markers.<locals>.<genexpr>)r^rfrWrrg�append�_evaluate_markersr+ryr ru�any)	�markersrw�groupsrjrmrrrn�	lhs_value�	rhs_valuerrrr~�s"



r~cCs2d�|�}|j}|dkr.||dt|j�7}|S)Nz{0.major}.{0.minor}.{0.micro}�finalr)r&�releaselevelr#�serial)�info�version�kindrrr�format_full_version�s

r�cCslttd�r ttjj�}tjj}nd}d}||tjt��t�	�t�
�t��t��t��t��dd�tjd�S)N�implementation�0ro�)r2r0r:r6r4r7r5r3r1r8r9)
�hasattr�sysr�r�r�rx�os�platform�machine�release�systemr8r@)�iverr2rrrr�s"

�c@s.eZdZdd�Zdd�Zdd�Zd
dd	�ZdS)rc
Cs`ztt�|��|_WnFtk
rZ}z(d�|||j|jd��}t|��W5d}~XYnXdS)Nz+Invalid marker: {0!r}, parse error at {1!r}�)rZ�MARKER�parseString�_markersrr&�locr)r!rj�e�err_strrrrr"s�zMarker.__init__cCs
t|j�Sr)rar�r$rrrr%szMarker.__str__cCsd�t|��S)Nz<Marker({0!r})>)r&r#r$rrrr(szMarker.__repr__NcCs$t�}|dk	r|�|�t|j|�S)a$Evaluate a marker.

        Return the boolean from evaluating the given marker against the
        environment. environment is an optional argument to override all or
        part of the determined environment.

        The environment is determined from the current Python process.
        N)r�updater~r�)r!rw�current_environmentrrr�evaluate s	
zMarker.evaluate)N)rrrr"r%r(r�rrrrrs)T)A�
__future__rrr�operatorr�r�r��pkg_resources.extern.pyparsingrrrrr	r
rrr
�L�_compatr�
specifiersrr�__all__�
ValueErrorrrr�objectrr+r.r/�VARIABLErC�setParseAction�VERSION_CMP�	MARKER_OP�MARKER_VALUE�BOOLOP�
MARKER_VAR�MARKER_ITEM�suppress�LPAREN�RPAREN�MARKER_EXPR�MARKER_ATOMr�rZra�lt�le�eq�ne�ge�gtrqrurvryr~r�rrrrrr�<module>s����������	�
���
���������������
�X�@srddlmZmZmZddlZddlZddlmZmZm	Z	m
Z
ddlmZmZm
Z
mZmZddlmZddlmZddlmZmZdd	lmZmZmZGd
d�de�Zeejej�Z ed��!�Z"ed
��!�Z#ed��!�Z$ed��!�Z%ed��!�Z&ed��!�Z'ed��!�Z(ed�Z)e ee)�e BZ*ee ee*��Z+e+d�Z,e+Z-ed�d�Z.e(e.Z/e-ee&e-�Z0e"e
e0�e#d�Z1eej2ej3ej4B�Z5eej2ej3ej4B�Z6e5e6AZ7ee7ee&e7�ddd�d�Z8e
e$e8e%e8B�Z9e9�:dd��e	e9�d�Z;e;�:dd��e	e��d�Ze�:d d��e'Z<e<eZ=e;e
e=�Z>e/e
e=�Z?e,e
e1�e?e>BZ@ee@eZAGd!d"�d"eB�ZCdS)#�)�absolute_import�division�print_functionN)�stringStart�	stringEnd�originalTextFor�ParseException)�
ZeroOrMore�Word�Optional�Regex�Combine)�Literal)�parse�)�MARKER_EXPR�Marker)�LegacySpecifier�	Specifier�SpecifierSetc@seZdZdZdS)�InvalidRequirementzJ
    An invalid requirement was found, users should refer to PEP 508.
    N)�__name__�
__module__�__qualname__�__doc__�rr�N/usr/lib/python3/dist-packages/pkg_resources/_vendor/packaging/requirements.pyrsr�[�]�(�)�,�;�@z-_.�namez[^ ]+�url�extrasF)�
joinString�adjacent�	_raw_speccCs
|jpdS)N�)r)��s�l�trrr�<lambda>6�r/�	specifiercCs|dS)Nrrr+rrrr/9r0�markercCst||j|j��S)N)r�_original_start�
_original_endr+rrrr/=r0c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�Requirementz�Parse a requirement.

    Parse a given requirement string into its parts, such as name, specifier,
    URL, and extras. Raises InvalidRequirement on a badly-formed requirement
    string.
    c
Cs�zt�|�}Wn@tk
rN}z"td�||j|jd����W5d}~XYnX|j|_|jr�t�|j�}|j	r�|j
r�|j	s�|j
s�td��|j|_nd|_t|jr�|j�
�ng�|_t|j�|_|jr�|jnd|_dS)Nz+Invalid requirement, parse error at "{0!r}"�zInvalid URL given)�REQUIREMENT�parseStringrr�format�locr$r%�urlparse�scheme�netloc�setr&�asListrr1r2)�self�requirement_string�req�e�
parsed_urlrrr�__init__Xs,����
zRequirement.__init__cCsz|jg}|jr*|�d�d�t|j����|jr@|�t|j��|jrX|�d�|j��|j	rp|�d�|j	��d�|�S)Nz[{0}]r!z@ {0}z; {0}r*)
r$r&�appendr9�join�sortedr1�strr%r2)r@�partsrrr�__str__mszRequirement.__str__cCsd�t|��S)Nz<Requirement({0!r})>)r9rI)r@rrr�__repr__~szRequirement.__repr__N)rrrrrErKrLrrrrr5Ksr5)D�
__future__rrr�string�re�pkg_resources.extern.pyparsingrrrrr	r
rrr
r�L�%pkg_resources.extern.six.moves.urllibrr;�markersrr�
specifiersrrr�
ValueErrorr�
ascii_letters�digits�ALPHANUM�suppress�LBRACKET�RBRACKET�LPAREN�RPAREN�COMMA�	SEMICOLON�AT�PUNCTUATION�IDENTIFIER_END�
IDENTIFIER�NAME�EXTRA�URI�URL�EXTRAS_LIST�EXTRAS�
_regex_str�VERBOSE�
IGNORECASE�VERSION_PEP440�VERSION_LEGACY�VERSION_ONE�VERSION_MANY�
_VERSION_SPEC�setParseAction�VERSION_SPEC�MARKER_SEPERATOR�MARKER�VERSION_AND_MARKER�URL_AND_MARKER�NAMED_REQUIREMENTr7�objectr5rrrr�<module>sf����X9M�@s�ddlmZmZmZddlZddlZddlZddlZddlm	Z	m
Z
ddlmZm
Z
mZGdd�de�ZGdd	�d	e
eje��ZGd
d�de�ZGdd
�d
e�Zdd�ZGdd�de�Ze�d�Zdd�Zdd�ZGdd�de�ZdS)�)�absolute_import�division�print_functionN�)�string_types�with_metaclass)�Version�
LegacyVersion�parsec@seZdZdZdS)�InvalidSpecifierzH
    An invalid specifier was found, users should refer to PEP 440.
    N)�__name__�
__module__�__qualname__�__doc__�rr�L/usr/lib/python3/dist-packages/pkg_resources/_vendor/packaging/specifiers.pyrsrc@s�eZdZejdd��Zejdd��Zejdd��Zejdd��Zej	d	d
��Z
e
jdd
��Z
ejdd
d��Zejddd��Z
dS)�
BaseSpecifiercCsdS)z�
        Returns the str representation of this Specifier like object. This
        should be representative of the Specifier itself.
        Nr��selfrrr�__str__szBaseSpecifier.__str__cCsdS)zF
        Returns a hash value for this Specifier like object.
        Nrrrrr�__hash__szBaseSpecifier.__hash__cCsdS)zq
        Returns a boolean representing whether or not the two Specifier like
        objects are equal.
        Nr�r�otherrrr�__eq__$szBaseSpecifier.__eq__cCsdS)zu
        Returns a boolean representing whether or not the two Specifier like
        objects are not equal.
        Nrrrrr�__ne__+szBaseSpecifier.__ne__cCsdS)zg
        Returns whether or not pre-releases as a whole are allowed by this
        specifier.
        Nrrrrr�prereleases2szBaseSpecifier.prereleasescCsdS)zd
        Sets whether or not pre-releases as a whole are allowed by this
        specifier.
        Nr�r�valuerrrr9sNcCsdS)zR
        Determines if the given item is contained within this specifier.
        Nr�r�itemrrrr�contains@szBaseSpecifier.containscCsdS)z�
        Takes an iterable of items and filters them so that only items which
        are contained within this specifier are allowed in it.
        Nr)r�iterablerrrr�filterFszBaseSpecifier.filter)N)N)rr
r�abc�abstractmethodrrrr�abstractpropertyr�setterr r"rrrrrs 





rc@s�eZdZiZd dd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zedd��Z
edd��Zedd��Zejdd��Zdd�Zd!dd�Zd"dd�ZdS)#�_IndividualSpecifier�NcCsF|j�|�}|std�|���|�d���|�d���f|_||_dS)NzInvalid specifier: '{0}'�operator�version)�_regex�searchr�format�group�strip�_spec�_prereleases)r�specr�matchrrr�__init__Rs�z_IndividualSpecifier.__init__cCs0|jdk	rd�|j�nd}d�|jjt|�|�S)N�, prereleases={0!r}r(z<{0}({1!r}{2})>)r1r-r�	__class__r�str�r�prerrr�__repr___s���z_IndividualSpecifier.__repr__cCsdj|j�S)Nz{0}{1})r-r0rrrrrlsz_IndividualSpecifier.__str__cCs
t|j�S�N)�hashr0rrrrrosz_IndividualSpecifier.__hash__cCsPt|t�r4z|�|�}WqDtk
r0tYSXnt||j�sDtS|j|jkSr;��
isinstancerr6r�NotImplementedr0rrrrrrs
z_IndividualSpecifier.__eq__cCsPt|t�r4z|�|�}WqDtk
r0tYSXnt||j�sDtS|j|jkSr;r=rrrrr}s
z_IndividualSpecifier.__ne__cCst|d�|j|��S)Nz_compare_{0})�getattrr-�
_operators)r�oprrr�
_get_operator�sz"_IndividualSpecifier._get_operatorcCst|ttf�st|�}|Sr;)r>r	rr
�rr*rrr�_coerce_version�sz$_IndividualSpecifier._coerce_versioncCs
|jdS)Nr�r0rrrrr)�sz_IndividualSpecifier.operatorcCs
|jdS)NrrFrrrrr*�sz_IndividualSpecifier.versioncCs|jSr;�r1rrrrr�sz _IndividualSpecifier.prereleasescCs
||_dSr;rGrrrrr�scCs
|�|�Sr;�r �rrrrr�__contains__�sz!_IndividualSpecifier.__contains__cCs:|dkr|j}|�|�}|jr&|s&dS|�|j�||j�S�NF)rrE�
is_prereleaserCr)r*rrrrr �s

z_IndividualSpecifier.containsccs�d}g}d|dk	r|ndi}|D]B}|�|�}|j|f|�r |jrX|sX|jsX|�|�q d}|Vq |s||r||D]
}|VqpdS)NFrT)rEr rLr�append)rr!r�yielded�found_prereleases�kwr*�parsed_versionrrrr"�s"
��z_IndividualSpecifier.filter)r(N)N)N)rr
rrAr4r:rrrrrCrE�propertyr)r*rr&rJr r"rrrrr'Ns(







r'c@sveZdZdZe�dedejejB�Zdddddd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS)�LegacySpecifiera�
        (?P<operator>(==|!=|<=|>=|<|>))
        \s*
        (?P<version>
            [^,;\s)]* # Since this is a "legacy" specifier, and the version
                      # string can be just about anything, we match everything
                      # except for whitespace, a semi-colon for marker support,
                      # a closing paren since versions can be enclosed in
                      # them, and a comma since it's a version separator.
        )
        �^\s*�\s*$�equal�	not_equal�less_than_equal�greater_than_equal�	less_than�greater_than)�==�!=�<=�>=�<�>cCst|t�stt|��}|Sr;)r>r	r7rDrrrrE�s
zLegacySpecifier._coerce_versioncCs||�|�kSr;�rE�r�prospectiver2rrr�_compare_equal�szLegacySpecifier._compare_equalcCs||�|�kSr;rbrcrrr�_compare_not_equal�sz"LegacySpecifier._compare_not_equalcCs||�|�kSr;rbrcrrr�_compare_less_than_equal�sz(LegacySpecifier._compare_less_than_equalcCs||�|�kSr;rbrcrrr�_compare_greater_than_equalsz+LegacySpecifier._compare_greater_than_equalcCs||�|�kSr;rbrcrrr�_compare_less_thansz"LegacySpecifier._compare_less_thancCs||�|�kSr;rbrcrrr�_compare_greater_thansz%LegacySpecifier._compare_greater_thanN)rr
r�
_regex_str�re�compile�VERBOSE�
IGNORECASEr+rArErerfrgrhrirjrrrrrS�s(�

��	rScst����fdd��}|S)Ncst|t�sdS�|||�SrK)r>rrc��fnrr�wrappeds
z)_require_version_compare.<locals>.wrapped)�	functools�wraps)rqrrrrpr�_require_version_compare
sruc	@s�eZdZdZe�dedejejB�Zdddddd	d
dd�Z	e
d
d��Ze
dd��Ze
dd��Z
e
dd��Ze
dd��Ze
dd��Ze
dd��Zdd�Zedd��Zejdd��Zd S)!�	Specifiera
        (?P<operator>(~=|==|!=|<=|>=|<|>|===))
        (?P<version>
            (?:
                # The identity operators allow for an escape hatch that will
                # do an exact string match of the version you wish to install.
                # This will not be parsed by PEP 440 and we cannot determine
                # any semantic meaning from it. This operator is discouraged
                # but included entirely as an escape hatch.
                (?<====)  # Only match for the identity operator
                \s*
                [^\s]*    # We just match everything, except for whitespace
                          # since we are only testing for strict identity.
            )
            |
            (?:
                # The (non)equality operators allow for wild card and local
                # versions to be specified so we have to define these two
                # operators separately to enable that.
                (?<===|!=)            # Only match for equals and not equals

                \s*
                v?
                (?:[0-9]+!)?          # epoch
                [0-9]+(?:\.[0-9]+)*   # release
                (?:                   # pre release
                    [-_\.]?
                    (a|b|c|rc|alpha|beta|pre|preview)
                    [-_\.]?
                    [0-9]*
                )?
                (?:                   # post release
                    (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
                )?

                # You cannot use a wild card and a dev or local version
                # together so group them with a | and make them optional.
                (?:
                    (?:[-_\.]?dev[-_\.]?[0-9]*)?         # dev release
                    (?:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)? # local
                    |
                    \.\*  # Wild card syntax of .*
                )?
            )
            |
            (?:
                # The compatible operator requires at least two digits in the
                # release segment.
                (?<=~=)               # Only match for the compatible operator

                \s*
                v?
                (?:[0-9]+!)?          # epoch
                [0-9]+(?:\.[0-9]+)+   # release  (We have a + instead of a *)
                (?:                   # pre release
                    [-_\.]?
                    (a|b|c|rc|alpha|beta|pre|preview)
                    [-_\.]?
                    [0-9]*
                )?
                (?:                                   # post release
                    (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
                )?
                (?:[-_\.]?dev[-_\.]?[0-9]*)?          # dev release
            )
            |
            (?:
                # All other operators only allow a sub set of what the
                # (non)equality operators do. Specifically they do not allow
                # local versions to be specified nor do they allow the prefix
                # matching wild cards.
                (?<!==|!=|~=)         # We have special cases for these
                                      # operators so we want to make sure they
                                      # don't match here.

                \s*
                v?
                (?:[0-9]+!)?          # epoch
                [0-9]+(?:\.[0-9]+)*   # release
                (?:                   # pre release
                    [-_\.]?
                    (a|b|c|rc|alpha|beta|pre|preview)
                    [-_\.]?
                    [0-9]*
                )?
                (?:                                   # post release
                    (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
                )?
                (?:[-_\.]?dev[-_\.]?[0-9]*)?          # dev release
            )
        )
        rTrU�
compatiblerVrWrXrYrZr[�	arbitrary)�~=r\r]r^r_r`ra�===cCsNd�tt�dd�t|���dd��}|d7}|�d�||�oL|�d�||�S)N�.cSs|�d�o|�d�S)N�post�dev)�
startswith��xrrr�<lambda>�s�z/Specifier._compare_compatible.<locals>.<lambda>����.*r_r\)�join�list�	itertools�	takewhile�_version_splitrC)rrdr2�prefixrrr�_compare_compatible�s�����zSpecifier._compare_compatiblecCsp|�d�rPt|j�}t|dd��}tt|��}|dt|��}t||�\}}nt|�}|jsht|j�}||kS)Nr����)�endswithr�publicr�r7�len�_pad_version�localrcrrrre�s


zSpecifier._compare_equalcCs|�||�Sr;)rercrrrrf�szSpecifier._compare_not_equalcCs|t|�kSr;�rrcrrrrg�sz"Specifier._compare_less_than_equalcCs|t|�kSr;r�rcrrrrh�sz%Specifier._compare_greater_than_equalcCs<t|�}||ksdS|js8|jr8t|j�t|j�kr8dSdS�NFT)rrL�base_versionrcrrrri�szSpecifier._compare_less_thancCs^t|�}||ksdS|js8|jr8t|j�t|j�kr8dS|jdk	rZt|j�t|j�krZdSdSr�)r�is_postreleaser�r�rcrrrrj�s
zSpecifier._compare_greater_thancCst|���t|���kSr;)r7�lowerrcrrr�_compare_arbitraryszSpecifier._compare_arbitrarycCsR|jdk	r|jS|j\}}|dkrN|dkr@|�d�r@|dd�}t|�jrNdSdS)N)r\r_r^ryrzr\r�r�TF)r1r0r�r
rL)rr)r*rrrrs


zSpecifier.prereleasescCs
||_dSr;rGrrrrrsN)rr
rrkrlrmrnror+rArur�rerfrgrhrirjr�rRrr&rrrrrvsD�_

��

"





rvz^([0-9]+)((?:a|b|c|rc)[0-9]+)$cCs@g}|�d�D],}t�|�}|r0|�|���q|�|�q|S)Nr{)�split�
_prefix_regexr,�extend�groupsrM)r*�resultrr3rrrr�'s
r�c
Cs�gg}}|�tt�dd�|���|�tt�dd�|���|�|t|d�d��|�|t|d�d��|�ddgtdt|d�t|d���|�ddgtdt|d�t|d���ttj|��ttj|��fS)NcSs|��Sr;��isdigitrrrrr�6�z_pad_version.<locals>.<lambda>cSs|��Sr;r�rrrrr�7r�rr�0)rMr�r�r�r��insert�max�chain)�left�right�
left_split�right_splitrrrr�2s 
"�"��r�c@s�eZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Zdd�Z	dd�Z
dd�Zedd��Z
e
jdd��Z
dd�Zddd�Zd dd�ZdS)!�SpecifierSetr(Nc	Csndd�|�d�D�}t�}|D]:}z|�t|��Wqtk
rV|�t|��YqXqt|�|_||_dS)NcSsg|]}|��r|���qSr)r/��.0�srrr�
<listcomp>Rsz)SpecifierSet.__init__.<locals>.<listcomp>�,)	r��set�addrvrrS�	frozenset�_specsr1)r�
specifiersr�parsed�	specifierrrrr4Os
zSpecifierSet.__init__cCs*|jdk	rd�|j�nd}d�t|�|�S)Nr5r(z<SpecifierSet({0!r}{1})>)r1r-rr7r8rrrr:ds
��zSpecifierSet.__repr__cCsd�tdd�|jD���S)Nr�css|]}t|�VqdSr;)r7r�rrr�	<genexpr>nsz'SpecifierSet.__str__.<locals>.<genexpr>)r��sortedr�rrrrrmszSpecifierSet.__str__cCs
t|j�Sr;)r<r�rrrrrpszSpecifierSet.__hash__cCs�t|t�rt|�}nt|t�s"tSt�}t|j|jB�|_|jdkrX|jdk	rX|j|_n<|jdk	rv|jdkrv|j|_n|j|jkr�|j|_ntd��|S)NzFCannot combine SpecifierSets with True and False prerelease overrides.)r>rr�r?r�r�r1�
ValueError)rrr�rrr�__and__ss 





�zSpecifierSet.__and__cCsFt|t�rt|�}n&t|t�r,tt|��}nt|t�s:tS|j|jkSr;�r>rr�r'r7r?r�rrrrr�s



zSpecifierSet.__eq__cCsFt|t�rt|�}n&t|t�r,tt|��}nt|t�s:tS|j|jkSr;r�rrrrr�s



zSpecifierSet.__ne__cCs
t|j�Sr;)r�r�rrrr�__len__�szSpecifierSet.__len__cCs
t|j�Sr;)�iterr�rrrr�__iter__�szSpecifierSet.__iter__cCs.|jdk	r|jS|jsdStdd�|jD��S)Ncss|]}|jVqdSr;�rr�rrrr��sz+SpecifierSet.prereleases.<locals>.<genexpr>)r1r��anyrrrrr�s

zSpecifierSet.prereleasescCs
||_dSr;rGrrrrr�scCs
|�|�Sr;rHrIrrrrJ�szSpecifierSet.__contains__csLt�ttf�st����dkr$|j��s2�jr2dSt��fdd�|jD��S)NFc3s|]}|j��d�VqdS)r�NrHr��rrrrr��s�z(SpecifierSet.contains.<locals>.<genexpr>)r>r	rr
rrL�allr�rrr�rr �s
�zSpecifierSet.containscCs�|dkr|j}|jr6|jD]}|j|t|�d�}q|Sg}g}|D]P}t|ttf�s^t|�}n|}t|t�rnqB|jr�|s�|s�|�	|�qB|�	|�qB|s�|r�|dkr�|S|SdS)Nr�)
rr�r"�boolr>r	rr
rLrM)rr!rr2�filteredrOrrQrrrr"�s*



zSpecifierSet.filter)r(N)N)N)rr
rr4r:rrr�rrr�r�rRrr&rJr r"rrrrr�Ms 
	




r�)�
__future__rrrr#rsr�rl�_compatrrr*rr	r
r�r�ABCMeta�objectrr'rSrurvrmr�r�r�r�rrrr�<module>s&9	4	
Xx)�	@s�ddlmZmZmZddlZddlZddlZddlmZddddd	gZ	e�
d
ddd
dddg�Zdd�ZGdd�de
�ZGdd�de�ZGdd�de�Ze�dej�Zdddddd�Zdd�Zdd�ZdZGd d�de�Zd!d"�Ze�d#�Zd$d%�Zd&d'�ZdS)(�)�absolute_import�division�print_functionN�)�Infinity�parse�Version�
LegacyVersion�InvalidVersion�VERSION_PATTERN�_Version�epoch�release�dev�pre�post�localcCs,z
t|�WStk
r&t|�YSXdS)z�
    Parse the given version string and return either a :class:`Version` object
    or a :class:`LegacyVersion` object depending on if the given version is
    a valid PEP 440 version or a legacy version.
    N)rr
r	)�version�r�I/usr/lib/python3/dist-packages/pkg_resources/_vendor/packaging/version.pyrs
c@seZdZdZdS)r
zF
    An invalid version was found, users should refer to PEP 440.
    N)�__name__�
__module__�__qualname__�__doc__rrrrr
$sc@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)�_BaseVersioncCs
t|j�S�N)�hash�_key��selfrrr�__hash__,sz_BaseVersion.__hash__cCs|�|dd��S)NcSs||kSrr��s�orrr�<lambda>0�z%_BaseVersion.__lt__.<locals>.<lambda>��_compare�r�otherrrr�__lt__/sz_BaseVersion.__lt__cCs|�|dd��S)NcSs||kSrrr!rrrr$3r%z%_BaseVersion.__le__.<locals>.<lambda>r&r(rrr�__le__2sz_BaseVersion.__le__cCs|�|dd��S)NcSs||kSrrr!rrrr$6r%z%_BaseVersion.__eq__.<locals>.<lambda>r&r(rrr�__eq__5sz_BaseVersion.__eq__cCs|�|dd��S)NcSs||kSrrr!rrrr$9r%z%_BaseVersion.__ge__.<locals>.<lambda>r&r(rrr�__ge__8sz_BaseVersion.__ge__cCs|�|dd��S)NcSs||kSrrr!rrrr$<r%z%_BaseVersion.__gt__.<locals>.<lambda>r&r(rrr�__gt__;sz_BaseVersion.__gt__cCs|�|dd��S)NcSs||kSrrr!rrrr$?r%z%_BaseVersion.__ne__.<locals>.<lambda>r&r(rrr�__ne__>sz_BaseVersion.__ne__cCst|t�stS||j|j�Sr)�
isinstancer�NotImplementedr)rr)�methodrrrr'As
z_BaseVersion._compareN)rrrr r*r+r,r-r.r/r'rrrrr*src@s`eZdZdd�Zdd�Zdd�Zedd��Zed	d
��Zedd��Z	ed
d��Z
edd��ZdS)r	cCst|�|_t|j�|_dSr)�str�_version�_legacy_cmpkeyr)rrrrr�__init__Js
zLegacyVersion.__init__cCs|jSr�r4rrrr�__str__NszLegacyVersion.__str__cCsd�tt|���S)Nz<LegacyVersion({0})>��format�reprr3rrrr�__repr__QszLegacyVersion.__repr__cCs|jSrr7rrrr�publicTszLegacyVersion.publiccCs|jSrr7rrrr�base_versionXszLegacyVersion.base_versioncCsdSrrrrrrr\szLegacyVersion.localcCsdS�NFrrrrr�
is_prerelease`szLegacyVersion.is_prereleasecCsdSr?rrrrr�is_postreleasedszLegacyVersion.is_postreleaseN)rrrr6r8r<�propertyr=r>rr@rArrrrr	Hs



z(\d+ | [a-z]+ | \.| -)�czfinal-�@)r�preview�-�rcrccs\t�|�D]F}t�||�}|r
|dkr(q
|dd�dkrF|�d�Vq
d|Vq
dVdS)N�.r�
0123456789��*�*final)�_legacy_version_component_re�split�_legacy_version_replacement_map�get�zfill)r"�partrrr�_parse_version_partsrsrScCszd}g}t|���D]T}|�d�r^|dkrD|rD|ddkrD|��q*|r^|ddkr^|��qD|�|�qt|�}||fS)N���rKrLz*final-�00000000)rS�lower�
startswith�pop�append�tuple)rr
�partsrRrrrr5�s


r5a�
    v?
    (?:
        (?:(?P<epoch>[0-9]+)!)?                           # epoch
        (?P<release>[0-9]+(?:\.[0-9]+)*)                  # release segment
        (?P<pre>                                          # pre-release
            [-_\.]?
            (?P<pre_l>(a|b|c|rc|alpha|beta|pre|preview))
            [-_\.]?
            (?P<pre_n>[0-9]+)?
        )?
        (?P<post>                                         # post release
            (?:-(?P<post_n1>[0-9]+))
            |
            (?:
                [-_\.]?
                (?P<post_l>post|rev|r)
                [-_\.]?
                (?P<post_n2>[0-9]+)?
            )
        )?
        (?P<dev>                                          # dev release
            [-_\.]?
            (?P<dev_l>dev)
            [-_\.]?
            (?P<dev_n>[0-9]+)?
        )?
    )
    (?:\+(?P<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))?       # local version
c@s|eZdZe�dedejejB�Zdd�Z	dd�Z
dd�Zed	d
��Z
edd��Zed
d��Zedd��Zedd��ZdS)rz^\s*z\s*$c
Cs�|j�|�}|std�|���t|�d�r8t|�d��ndtdd�|�d��d�D��t	|�d�|�d	��t	|�d
�|�d�p�|�d��t	|�d
�|�d��t
|�d��d�|_t|jj
|jj|jj|jj|jj|jj�|_dS)NzInvalid version: '{0}'r
rcss|]}t|�VqdSr)�int��.0�irrr�	<genexpr>�sz#Version.__init__.<locals>.<genexpr>rrH�pre_l�pre_n�post_l�post_n1�post_n2�dev_l�dev_nr�r
rrrrr)�_regex�searchr
r:r�groupr\rZrN�_parse_letter_version�_parse_local_versionr4�_cmpkeyr
rrrrrr)rr�matchrrrr6�s8�����zVersion.__init__cCsd�tt|���S)Nz<Version({0})>r9rrrrr<�szVersion.__repr__cCs�g}|jjdkr$|�d�|jj��|�d�dd�|jjD���|jjdk	rl|�d�dd�|jjD���|jjdk	r�|�d�|jjd	��|jjdk	r�|�d
�|jjd	��|jj	dk	r�|�d�d�dd�|jj	D����d�|�S)
Nr�{0}!rHcss|]}t|�VqdSr�r3�r^�xrrrr`�sz"Version.__str__.<locals>.<genexpr>�css|]}t|�VqdSrrqrrrrrr`�sz.post{0}rz.dev{0}z+{0}css|]}t|�VqdSrrqrrrrrr`s)
r4r
rYr:�joinrrrrr�rr[rrrr8�s�zVersion.__str__cCst|��dd�dS)N�+rr�r3rNrrrrr=
szVersion.publiccCsLg}|jjdkr$|�d�|jj��|�d�dd�|jjD���d�|�S)NrrprHcss|]}t|�VqdSrrqrrrrrr`sz'Version.base_version.<locals>.<genexpr>rt)r4r
rYr:rurrvrrrr>s
zVersion.base_versioncCs$t|�}d|kr |�dd�dSdS)Nrwrrx)r�version_stringrrrrsz
Version.localcCst|jjp|jj�Sr)�boolr4rrrrrrr@!szVersion.is_prereleasecCst|jj�Sr)rzr4rrrrrrA%szVersion.is_postreleaseN)rrr�re�compiler�VERBOSE�
IGNORECASErir6r<r8rBr=r>rr@rArrrrr�s"

�#



cCsv|rZ|dkrd}|��}|dkr&d}n(|dkr4d}n|dkrBd}n|dkrNd	}|t|�fS|sr|rrd	}|t|�fSdS)
Nr�alpha�a�beta�b)rCrrErG)�rev�rr)rVr\)�letter�numberrrrrl*s rlz[\._-]cCs$|dk	r tdd�t�|�D��SdS)zR
    Takes a string like abc.1.twelve and turns it into ("abc", 1, "twelve").
    Ncss&|]}|��s|��nt|�VqdSr)�isdigitrVr\)r^rRrrrr`Qs�z'_parse_local_version.<locals>.<genexpr>)rZ�_local_version_seperatorsrN)rrrrrmLs�rmcCs�tttt�dd�t|�����}|dkr@|dkr@|dk	r@t}n|dkrLt}|dkrZt}|dkrft}|dkrvt}ntdd�|D��}||||||fS)NcSs|dkS)Nrr)rsrrrr$`r%z_cmpkey.<locals>.<lambda>css*|]"}t|t�r|dfnt|fVqdS)rtN)r0r\rr]rrrr`�s�z_cmpkey.<locals>.<genexpr>)rZ�reversed�list�	itertools�	dropwhilerrhrrrrnWs,���
	�rn)�
__future__rrr�collectionsr�r{�_structuresr�__all__�
namedtuplerr�
ValueErrorr
�objectrr	r|r}rMrOrSr5rrrlr�rmrnrrrr�<module>sH��!�� k
X��i@s�dZdZdZdZddlZddlmZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlmZzddlmZWn ek
r�ddlmZYnXzdd	lmZdd
lmZWn,ek
r�dd	l
mZdd
l
mZYnXzddl
mZWnBek
�rFzddlmZWnek
�r@dZYnXYnXdd
ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtgiZee	j�ddu�ZeddukZ e �rpe	j!Z"e#Z$e%Z&e#Z'e(e)e*e+e,ee-e.e/e0e1gZ2n`e	j3Z"e4Z5dvdw�Z'gZ2ddl6Z6dx�7�D]8Z8ze2�9e:e6e8��Wne;k
�r�Y�q�YnX�q�e<dydz�e5d{�D��Z=d|d}�Z>Gd~d�de?�Z@ejAejBZCd�ZDeDd�ZEeCeDZFe%d��ZGd��Hd�dz�ejID��ZJGd�d#�d#eK�ZLGd�d%�d%eL�ZMGd�d'�d'eL�ZNGd�d)�d)eN�ZOGd�d,�d,eK�ZPGd�d��d�e?�ZQGd�d(�d(e?�ZRe�SeR�d�d?�ZTd�dP�ZUd�dM�ZVd�d��ZWd�d��ZXd�d��ZYd�dW�ZZ�d/d�d��Z[Gd�d*�d*e?�Z\Gd�d2�d2e\�Z]Gd�d�de]�Z^Gd�d�de]�Z_Gd�d�de]�Z`e`Zae`e\_bGd�d�de]�ZcGd�d�de`�ZdGd�d
�d
ec�ZeGd�dr�dre]�ZfGd�d5�d5e]�ZgGd�d-�d-e]�ZhGd�d+�d+e]�ZiGd�d�de]�ZjGd�d4�d4e]�ZkGd�d��d�e]�ZlGd�d�del�ZmGd�d�del�ZnGd�d�del�ZoGd�d0�d0el�ZpGd�d/�d/el�ZqGd�d7�d7el�ZrGd�d6�d6el�ZsGd�d&�d&e\�ZtGd�d�det�ZuGd�d"�d"et�ZvGd�d�det�ZwGd�d�det�ZxGd�d$�d$e\�ZyGd�d�dey�ZzGd�d�dey�Z{Gd�d��d�ey�Z|Gd�d�de|�Z}Gd�d8�d8e|�Z~Gd�d��d�e?�Ze�Z�Gd�d!�d!ey�Z�Gd�d.�d.ey�Z�Gd�d�dey�Z�Gd�dÄd�e��Z�Gd�d3�d3ey�Z�Gd�d�de��Z�Gd�d�de��Z�Gd�d�de��Z�Gd�d1�d1e��Z�Gd�d �d e?�Z�d�dh�Z��d0d�dF�Z��d1d�dB�Z�d�dЄZ�d�dU�Z�d�dT�Z�d�dԄZ��d2d�dY�Z�d�dG�Z��d3d�dm�Z�d�dn�Z�d�dp�Z�e^���dI�Z�en���dO�Z�eo���dN�Z�ep���dg�Z�eq���df�Z�egeGd�d�d܍��d�dބ�Z�ehd߃��d�dބ�Z�ehd���d�dބ�Z�e�e�Be�Bejd�d{d܍BZ�e�e�e�d�e��Z�e`d�e�d���d�e�e}e�e�B����d�d�Z�d�de�Z�d�dS�Z�d�db�Z�d�d`�Z�d�ds�Z�e�d�dބ�Z�e�d�dބ�Z�d�d�Z�d�dQ�Z�d�dR�Z�d�dk�Z�e?�e�_��d4d�dq�Z�e@�Z�e?�e�_�e?�e�_�e�d��e�d��fd�do�Z�e�Z�e�ehd��d����d��Z�e�ehd��d����d��Z�e�ehd��d�ehd��d�B����d�Z�e�ea�d�e�������d�Z�d�d�de���f�ddV�Z��d5�ddl�Z�e��d�Z�e��d�Z�e�egeCeF�d����d��\Z�Z�e�ed	�7��d
��Z�eh�d�d�Heàġ��d
����d�ZŐdda�Z�e�eh�d��d����d�Z�eh�d����d�Z�eh�d��ɡ���d�Z�eh�d����d�Z�e�eh�d��de�B����d�Z�e�Z�eh�d����d�Z�e�e}egeJdːd�e�eg�d�e`d˃eo�����ϡ���d�Z�e�e�e���e�Bd��d����d@�Z�G�d dt�dt�Z�eӐd!k�r�ed�d"�Z�ed�d#�Z�egeCeF�d$�Z�e�e֐d%dՐd&���e��Z�e�e�e׃����d'�Zؐd(e�BZ�e�e֐d%dՐd&���e��Z�e�e�eڃ����d)�Z�eԐd*�eِd'�e�eېd)�Z�eܠݐd+�e�jޠݐd,�e�jߠݐd,�e�j�ݐd-�ddl�Z�e�j᠝e�e�j��e�j�ݐd.�dS(6a�	
pyparsing module - Classes and methods to define and execute parsing grammars
=============================================================================

The pyparsing module is an alternative approach to creating and executing simple grammars,
vs. the traditional lex/yacc approach, or the use of regular expressions.  With pyparsing, you
don't need to learn a new syntax for defining grammars or matching expressions - the parsing module
provides a library of classes that you use to construct the grammar directly in Python.

Here is a program to parse "Hello, World!" (or any greeting of the form 
C{"<salutation>, <addressee>!"}), built up using L{Word}, L{Literal}, and L{And} elements 
(L{'+'<ParserElement.__add__>} operator gives L{And} expressions, strings are auto-converted to
L{Literal} expressions)::

    from pyparsing import Word, alphas

    # define grammar of a greeting
    greet = Word(alphas) + "," + Word(alphas) + "!"

    hello = "Hello, World!"
    print (hello, "->", greet.parseString(hello))

The program outputs the following::

    Hello, World! -> ['Hello', ',', 'World', '!']

The Python representation of the grammar is quite readable, owing to the self-explanatory
class names, and the use of '+', '|' and '^' operators.

The L{ParseResults} object returned from L{ParserElement.parseString<ParserElement.parseString>} can be accessed as a nested list, a dictionary, or an
object with named attributes.

The pyparsing module handles some of the problems that are typically vexing when writing text parsers:
 - extra or missing whitespace (the above program will also handle "Hello,World!", "Hello  ,  World  !", etc.)
 - quoted strings
 - embedded comments


Getting Started -
-----------------
Visit the classes L{ParserElement} and L{ParseResults} to see the base classes that most other pyparsing
classes inherit from. Use the docstrings for examples of how to:
 - construct literal match expressions from L{Literal} and L{CaselessLiteral} classes
 - construct character word-group expressions using the L{Word} class
 - see how to create repetitive expressions using L{ZeroOrMore} and L{OneOrMore} classes
 - use L{'+'<And>}, L{'|'<MatchFirst>}, L{'^'<Or>}, and L{'&'<Each>} operators to combine simple expressions into more complex ones
 - associate names with your parsed results using L{ParserElement.setResultsName}
 - find some helpful expression short-cuts like L{delimitedList} and L{oneOf}
 - find more useful common expressions in the L{pyparsing_common} namespace class
z2.2.1z18 Sep 2018 00:49 UTCz*Paul McGuire <ptmcg@users.sourceforge.net>�N)�ref)�datetime)�RLock)�Iterable)�MutableMapping)�OrderedDict�And�CaselessKeyword�CaselessLiteral�
CharsNotIn�Combine�Dict�Each�Empty�
FollowedBy�Forward�
GoToColumn�Group�Keyword�LineEnd�	LineStart�Literal�
MatchFirst�NoMatch�NotAny�	OneOrMore�OnlyOnce�Optional�Or�ParseBaseException�ParseElementEnhance�ParseException�ParseExpression�ParseFatalException�ParseResults�ParseSyntaxException�
ParserElement�QuotedString�RecursiveGrammarException�Regex�SkipTo�	StringEnd�StringStart�Suppress�Token�TokenConverter�White�Word�WordEnd�	WordStart�
ZeroOrMore�	alphanums�alphas�
alphas8bit�anyCloseTag�
anyOpenTag�
cStyleComment�col�commaSeparatedList�commonHTMLEntity�countedArray�cppStyleComment�dblQuotedString�dblSlashComment�
delimitedList�dictOf�downcaseTokens�empty�hexnums�htmlComment�javaStyleComment�line�lineEnd�	lineStart�lineno�makeHTMLTags�makeXMLTags�matchOnlyAtCol�matchPreviousExpr�matchPreviousLiteral�
nestedExpr�nullDebugAction�nums�oneOf�opAssoc�operatorPrecedence�
printables�punc8bit�pythonStyleComment�quotedString�removeQuotes�replaceHTMLEntity�replaceWith�
restOfLine�sglQuotedString�srange�	stringEnd�stringStart�traceParseAction�
unicodeString�upcaseTokens�
withAttribute�
indentedBlock�originalTextFor�ungroup�
infixNotation�locatedExpr�	withClass�
CloseMatch�tokenMap�pyparsing_common�cCsft|t�r|Sz
t|�WStk
r`t|��t��d�}td�}|�dd��|�	|�YSXdS)aDrop-in replacement for str(obj) that tries to be Unicode friendly. It first tries
           str(obj). If that fails with a UnicodeEncodeError, then it tries unicode(obj). It
           then < returns the unicode object | encodes it with the default encoding | ... >.
        �xmlcharrefreplacez&#\d+;cSs$dtt|ddd���dd�S)Nz\ur����)�hex�int��t�ry�A/usr/lib/python3/dist-packages/pkg_resources/_vendor/pyparsing.py�<lambda>��z_ustr.<locals>.<lambda>N)
�
isinstance�unicode�str�UnicodeEncodeError�encode�sys�getdefaultencodingr)�setParseAction�transformString)�obj�ret�
xmlcharrefryryrz�_ustr�s

r�z6sum len sorted reversed list tuple set any all min maxccs|]
}|VqdS�Nry)�.0�yryryrz�	<genexpr>�sr��cCs:d}dd�d��D�}t||�D]\}}|�||�}q |S)z/Escape &, <, >, ", ', etc. in a string of data.z&><"'css|]}d|dVqdS)�&�;Nry)r��sryryrzr��sz_xml_escape.<locals>.<genexpr>zamp gt lt quot apos)�split�zip�replace)�data�from_symbols�
to_symbols�from_�to_ryryrz�_xml_escape�s
r�c@seZdZdS)�
_ConstantsN)�__name__�
__module__�__qualname__ryryryrzr��sr��
0123456789ZABCDEFabcdef�\�ccs|]}|tjkr|VqdSr�)�string�
whitespace�r��cryryrzr��s
c@sPeZdZdZddd�Zedd��Zdd	�Zd
d�Zdd
�Z	ddd�Z
dd�ZdS)rz7base exception class for all parsing runtime exceptionsrNcCs>||_|dkr||_d|_n||_||_||_|||f|_dS�Nr�)�loc�msg�pstr�
parserElement�args)�selfr�r�r��elemryryrz�__init__�szParseBaseException.__init__cCs||j|j|j|j�S)z�
        internal factory method to simplify creating one type of ParseException 
        from another - avoids having __init__ signature conflicts among subclasses
        )r�r�r�r�)�cls�peryryrz�_from_exception�sz"ParseBaseException._from_exceptioncCsN|dkrt|j|j�S|dkr,t|j|j�S|dkrBt|j|j�St|��dS)z�supported attributes by name are:
            - lineno - returns the line number of the exception text
            - col - returns the column number of the exception text
            - line - returns the line containing the exception text
        rL)r;�columnrIN)rLr�r�r;rI�AttributeError)r��anameryryrz�__getattr__�szParseBaseException.__getattr__cCsd|j|j|j|jfS)Nz"%s (at char %d), (line:%d, col:%d))r�r�rLr��r�ryryrz�__str__�s�zParseBaseException.__str__cCst|�Sr��r�r�ryryrz�__repr__�szParseBaseException.__repr__�>!<cCs<|j}|jd}|r4d�|d|�|||d�f�}|��S)z�Extracts the exception line from the input string, and marks
           the location of the exception with a special symbol.
        r�r�N)rIr��join�strip)r��markerString�line_str�line_columnryryrz�
markInputline�s

�z ParseBaseException.markInputlinecCsd��tt|��S)Nzlineno col line)r��dir�typer�ryryrz�__dir__szParseBaseException.__dir__)rNN)r�)r�r�r��__doc__r��classmethodr�r�r�r�r�r�ryryryrzr�s



c@seZdZdZdS)r!aN
    Exception thrown when parse expressions don't match class;
    supported attributes by name are:
     - lineno - returns the line number of the exception text
     - col - returns the column number of the exception text
     - line - returns the line containing the exception text
        
    Example::
        try:
            Word(nums).setName("integer").parseString("ABC")
        except ParseException as pe:
            print(pe)
            print("column: {}".format(pe.col))
            
    prints::
       Expected integer (at char 0), (line:1, col:1)
        column: 1
    N�r�r�r�r�ryryryrzr!sc@seZdZdZdS)r#znuser-throwable exception thrown when inconsistent parse content
       is found; stops all parsing immediatelyNr�ryryryrzr#sc@seZdZdZdS)r%z�just like L{ParseFatalException}, but thrown internally when an
       L{ErrorStop<And._ErrorStop>} ('-' operator) indicates that parsing is to stop 
       immediately because an unbacktrackable syntax error has been foundNr�ryryryrzr%sc@s eZdZdZdd�Zdd�ZdS)r(zZexception thrown by L{ParserElement.validate} if the grammar could be improperly recursivecCs
||_dSr���parseElementTrace�r��parseElementListryryrzr�4sz"RecursiveGrammarException.__init__cCs
d|jS)NzRecursiveGrammarException: %sr�r�ryryrzr�7sz!RecursiveGrammarException.__str__N)r�r�r�r�r�r�ryryryrzr(2sc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�_ParseResultsWithOffsetcCs||f|_dSr���tup)r��p1�p2ryryrzr�;sz _ParseResultsWithOffset.__init__cCs
|j|Sr�r��r��iryryrz�__getitem__=sz#_ParseResultsWithOffset.__getitem__cCst|jd�S�Nr)�reprr�r�ryryrzr�?sz _ParseResultsWithOffset.__repr__cCs|jd|f|_dSr�r�r�ryryrz�	setOffsetAsz!_ParseResultsWithOffset.setOffsetN)r�r�r�r�r�r�r�ryryryrzr�:sr�c@s�eZdZdZd[dd�Zddddefdd�Zdd	�Zefd
d�Zdd
�Z	dd�Z
dd�Zdd�ZeZ
dd�Zdd�Zdd�Zdd�Zdd�Zer�eZeZeZn$eZeZeZdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd\d(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Z d2d3�Z!d4d5�Z"d6d7�Z#d8d9�Z$d:d;�Z%d<d=�Z&d]d?d@�Z'dAdB�Z(dCdD�Z)dEdF�Z*d^dHdI�Z+dJdK�Z,dLdM�Z-d_dOdP�Z.dQdR�Z/dSdT�Z0dUdV�Z1dWdX�Z2dYdZ�Z3dS)`r$aI
    Structured parse results, to provide multiple means of access to the parsed data:
       - as a list (C{len(results)})
       - by list index (C{results[0], results[1]}, etc.)
       - by attribute (C{results.<resultsName>} - see L{ParserElement.setResultsName})

    Example::
        integer = Word(nums)
        date_str = (integer.setResultsName("year") + '/' 
                        + integer.setResultsName("month") + '/' 
                        + integer.setResultsName("day"))
        # equivalent form:
        # date_str = integer("year") + '/' + integer("month") + '/' + integer("day")

        # parseString returns a ParseResults object
        result = date_str.parseString("1999/12/31")

        def test(s, fn=repr):
            print("%s -> %s" % (s, fn(eval(s))))
        test("list(result)")
        test("result[0]")
        test("result['month']")
        test("result.day")
        test("'month' in result")
        test("'minutes' in result")
        test("result.dump()", str)
    prints::
        list(result) -> ['1999', '/', '12', '/', '31']
        result[0] -> '1999'
        result['month'] -> '12'
        result.day -> '31'
        'month' in result -> True
        'minutes' in result -> False
        result.dump() -> ['1999', '/', '12', '/', '31']
        - day: 31
        - month: 12
        - year: 1999
    NTcCs"t||�r|St�|�}d|_|S�NT)r}�object�__new__�_ParseResults__doinit)r��toklist�name�asList�modal�retobjryryrzr�ks


zParseResults.__new__c
Csb|jrvd|_d|_d|_i|_||_||_|dkr6g}||t�rP|dd�|_n||t�rft|�|_n|g|_t	�|_
|dk	�r^|�r^|s�d|j|<||t�r�t|�}||_||t
d�ttf�r�|ddgfk�s^||t�r�|g}|�r(||t��rt|��d�||<ntt|d�d�||<|||_n6z|d||<Wn$tttfk
�r\|||<YnXdS)NFrr�)r��_ParseResults__name�_ParseResults__parent�_ParseResults__accumNames�_ParseResults__asList�_ParseResults__modal�list�_ParseResults__toklist�_generatorType�dict�_ParseResults__tokdictrvr�r��
basestringr$r��copy�KeyError�	TypeError�
IndexError)r�r�r�r�r�r}ryryrzr�tsB



$
zParseResults.__init__cCsPt|ttf�r|j|S||jkr4|j|ddStdd�|j|D��SdS)NrtrcSsg|]}|d�qS�rry�r��vryryrz�
<listcomp>�sz,ParseResults.__getitem__.<locals>.<listcomp>)r}rv�slicer�r�r�r$r�ryryrzr��s


zParseResults.__getitem__cCs�||t�r0|j�|t��|g|j|<|d}nD||ttf�rN||j|<|}n&|j�|t��t|d�g|j|<|}||t�r�t|�|_	dSr�)
r�r��getr�rvr�r�r$�wkrefr�)r��kr�r}�subryryrz�__setitem__�s


"
zParseResults.__setitem__c
Cs�t|ttf�r�t|j�}|j|=t|t�rH|dkr:||7}t||d�}tt|�|���}|��|j	�
�D]>\}}|D]0}t|�D]"\}\}}	t||	|	|k�||<q�qxqln|j	|=dS�Nrr�)
r}rvr��lenr�r��range�indices�reverser��items�	enumerater�)
r�r��mylen�removedr��occurrences�jr��value�positionryryrz�__delitem__�s

zParseResults.__delitem__cCs
||jkSr�)r�)r�r�ryryrz�__contains__�szParseResults.__contains__cCs
t|j�Sr�)r�r�r�ryryrz�__len__�r|zParseResults.__len__cCs
|jSr��r�r�ryryrz�__bool__�r|zParseResults.__bool__cCs
t|j�Sr���iterr�r�ryryrz�__iter__�r|zParseResults.__iter__cCst|jddd��S�Nrtr
r�ryryrz�__reversed__�r|zParseResults.__reversed__cCs$t|jd�r|j��St|j�SdS)N�iterkeys)�hasattrr�rrr�ryryrz�	_iterkeys�s
zParseResults._iterkeyscs�fdd����D�S)Nc3s|]}�|VqdSr�ry�r�r�r�ryrzr��sz+ParseResults._itervalues.<locals>.<genexpr>�rr�ryr�rz�_itervalues�szParseResults._itervaluescs�fdd����D�S)Nc3s|]}|�|fVqdSr�ryrr�ryrzr��sz*ParseResults._iteritems.<locals>.<genexpr>rr�ryr�rz�
_iteritems�szParseResults._iteritemscCst|���S)zVReturns all named result keys (as a list in Python 2.x, as an iterator in Python 3.x).)r�rr�ryryrz�keys�szParseResults.keyscCst|���S)zXReturns all named result values (as a list in Python 2.x, as an iterator in Python 3.x).)r��
itervaluesr�ryryrz�values�szParseResults.valuescCst|���S)zfReturns all named result key-values (as a list of tuples in Python 2.x, as an iterator in Python 3.x).)r��	iteritemsr�ryryrzr��szParseResults.itemscCs
t|j�S)z�Since keys() returns an iterator, this method is helpful in bypassing
           code that looks for the existence of any defined results names.)�boolr�r�ryryrz�haskeys�szParseResults.haskeyscOs�|s
dg}|��D]*\}}|dkr0|d|f}qtd|��qt|dt�sdt|�dksd|d|kr~|d}||}||=|S|d}|SdS)a�
        Removes and returns item at specified index (default=C{last}).
        Supports both C{list} and C{dict} semantics for C{pop()}. If passed no
        argument or an integer argument, it will use C{list} semantics
        and pop tokens from the list of parsed tokens. If passed a 
        non-integer argument (most likely a string), it will use C{dict}
        semantics and pop the corresponding value from any defined 
        results names. A second default return value argument is 
        supported, just as in C{dict.pop()}.

        Example::
            def remove_first(tokens):
                tokens.pop(0)
            print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
            print(OneOrMore(Word(nums)).addParseAction(remove_first).parseString("0 123 321")) # -> ['123', '321']

            label = Word(alphas)
            patt = label("LABEL") + OneOrMore(Word(nums))
            print(patt.parseString("AAB 123 321").dump())

            # Use pop() in a parse action to remove named result (note that corresponding value is not
            # removed from list form of results)
            def remove_LABEL(tokens):
                tokens.pop("LABEL")
                return tokens
            patt.addParseAction(remove_LABEL)
            print(patt.parseString("AAB 123 321").dump())
        prints::
            ['AAB', '123', '321']
            - LABEL: AAB

            ['AAB', '123', '321']
        rt�defaultrz-pop() got an unexpected keyword argument '%s'r�N)r�r�r}rvr�)r�r��kwargsr�r��indexr��defaultvalueryryrz�pop�s""
�
�zParseResults.popcCs||kr||S|SdS)ai
        Returns named result matching the given key, or if there is no
        such name, then returns the given C{defaultValue} or C{None} if no
        C{defaultValue} is specified.

        Similar to C{dict.get()}.
        
        Example::
            integer = Word(nums)
            date_str = integer("year") + '/' + integer("month") + '/' + integer("day")           

            result = date_str.parseString("1999/12/31")
            print(result.get("year")) # -> '1999'
            print(result.get("hour", "not specified")) # -> 'not specified'
            print(result.get("hour")) # -> None
        Nry)r��key�defaultValueryryrzr�3szParseResults.getcCsR|j�||�|j��D]4\}}t|�D]"\}\}}t||||k�||<q(qdS)a
        Inserts new element at location index in the list of parsed tokens.
        
        Similar to C{list.insert()}.

        Example::
            print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']

            # use a parse action to insert the parse location in the front of the parsed results
            def insert_locn(locn, tokens):
                tokens.insert(0, locn)
            print(OneOrMore(Word(nums)).addParseAction(insert_locn).parseString("0 123 321")) # -> [0, '0', '123', '321']
        N)r��insertr�r�r�r�)r�r�insStrr�rr�rrryryrzr#IszParseResults.insertcCs|j�|�dS)a�
        Add single element to end of ParseResults list of elements.

        Example::
            print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321']
            
            # use a parse action to compute the sum of the parsed integers, and add it to the end
            def append_sum(tokens):
                tokens.append(sum(map(int, tokens)))
            print(OneOrMore(Word(nums)).addParseAction(append_sum).parseString("0 123 321")) # -> ['0', '123', '321', 444]
        N)r��append)r��itemryryrzr%]szParseResults.appendcCs$t|t�r||7}n|j�|�dS)a
        Add sequence of elements to end of ParseResults list of elements.

        Example::
            patt = OneOrMore(Word(alphas))
            
            # use a parse action to append the reverse of the matched strings, to make a palindrome
            def make_palindrome(tokens):
                tokens.extend(reversed([t[::-1] for t in tokens]))
                return ''.join(tokens)
            print(patt.addParseAction(make_palindrome).parseString("lskdj sdlkjf lksd")) # -> 'lskdjsdlkjflksddsklfjkldsjdksl'
        N)r}r$r��extend)r��itemseqryryrzr'ks

zParseResults.extendcCs|jdd�=|j��dS)z7
        Clear all elements and results names.
        N)r�r��clearr�ryryrzr)}szParseResults.clearcCsjz
||WStk
r YdSX||jkrb||jkrH|j|ddStdd�|j|D��SndSdS)Nr�rtrcSsg|]}|d�qSr�ryr�ryryrzr��sz,ParseResults.__getattr__.<locals>.<listcomp>)r�r�r�r$�r�r�ryryrzr��s


zParseResults.__getattr__cCs|��}||7}|Sr��r�)r��otherr�ryryrz�__add__�szParseResults.__add__cs�|jrjt|j���fdd��|j��}�fdd�|D�}|D],\}}|||<t|dt�r<t|�|d_q<|j|j7_|j�	|j�|S)Ncs|dkr�S|�Sr�ry)�a)�offsetryrzr{�r|z'ParseResults.__iadd__.<locals>.<lambda>c	s4g|],\}}|D]}|t|d�|d��f�qqS�rr�)r��r�r��vlistr�)�	addoffsetryrzr��s�z)ParseResults.__iadd__.<locals>.<listcomp>r)
r�r�r�r�r}r$r�r�r��update)r�r,�
otheritems�otherdictitemsr�r�ry)r3r/rz�__iadd__�s


�zParseResults.__iadd__cCs&t|t�r|dkr|��S||SdSr�)r}rvr��r�r,ryryrz�__radd__�szParseResults.__radd__cCsdt|j�t|j�fS)Nz(%s, %s))r�r�r�r�ryryrzr��szParseResults.__repr__cCsdd�dd�|jD��dS)N�[�, css(|] }t|t�rt|�nt|�VqdSr�)r}r$r�r��r�r�ryryrzr��sz'ParseResults.__str__.<locals>.<genexpr>�])r�r�r�ryryrzr��szParseResults.__str__r�cCsLg}|jD]<}|r |r |�|�t|t�r8||��7}q
|�t|��q
|Sr�)r�r%r}r$�
_asStringListr�)r��sep�outr&ryryrzr>�s


zParseResults._asStringListcCsdd�|jD�S)a�
        Returns the parse results as a nested list of matching tokens, all converted to strings.

        Example::
            patt = OneOrMore(Word(alphas))
            result = patt.parseString("sldkj lsdkj sldkj")
            # even though the result prints in string-like form, it is actually a pyparsing ParseResults
            print(type(result), result) # -> <class 'pyparsing.ParseResults'> ['sldkj', 'lsdkj', 'sldkj']
            
            # Use asList() to create an actual list
            result_list = result.asList()
            print(type(result_list), result_list) # -> <class 'list'> ['sldkj', 'lsdkj', 'sldkj']
        cSs"g|]}t|t�r|��n|�qSry)r}r$r�)r��resryryrzr��sz'ParseResults.asList.<locals>.<listcomp>rr�ryryrzr��szParseResults.asListcs6tr|j}n|j}�fdd��t�fdd�|�D��S)a�
        Returns the named parse results as a nested dictionary.

        Example::
            integer = Word(nums)
            date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
            
            result = date_str.parseString('12/31/1999')
            print(type(result), repr(result)) # -> <class 'pyparsing.ParseResults'> (['12', '/', '31', '/', '1999'], {'day': [('1999', 4)], 'year': [('12', 0)], 'month': [('31', 2)]})
            
            result_dict = result.asDict()
            print(type(result_dict), repr(result_dict)) # -> <class 'dict'> {'day': '1999', 'year': '12', 'month': '31'}

            # even though a ParseResults supports dict-like access, sometime you just need to have a dict
            import json
            print(json.dumps(result)) # -> Exception: TypeError: ... is not JSON serializable
            print(json.dumps(result.asDict())) # -> {"month": "31", "day": "1999", "year": "12"}
        cs6t|t�r.|��r|��S�fdd�|D�Sn|SdS)Ncsg|]}�|��qSryryr���toItemryrzr��sz7ParseResults.asDict.<locals>.toItem.<locals>.<listcomp>)r}r$r�asDict)r�rBryrzrC�s

z#ParseResults.asDict.<locals>.toItemc3s|]\}}|�|�fVqdSr�ry�r�r�r�rBryrzr��sz&ParseResults.asDict.<locals>.<genexpr>)�PY_3r�rr�)r��item_fnryrBrzrD�s
	zParseResults.asDictcCs8t|j�}|j��|_|j|_|j�|j�|j|_|S)zA
        Returns a new copy of a C{ParseResults} object.
        )r$r�r�r�r�r�r4r��r�r�ryryrzr��s
zParseResults.copyFcCsLd}g}tdd�|j��D��}|d}|s8d}d}d}d}	|dk	rJ|}	n|jrV|j}	|	sf|rbdSd}	|||d|	d	g7}t|j�D]�\}
}t|t�r�|
|kr�||�||
|o�|dk||�g7}n||�d|o�|dk||�g7}q�d}|
|kr�||
}|�s|�rq�nd}t	t
|��}
|||d|d	|
d
|d	g	7}q�|||d
|	d	g7}d�|�S)z�
        (Deprecated) Returns the parse results as XML. Tags are created for tokens and lists that have defined results names.
        �
css(|] \}}|D]}|d|fVqqdS�r�Nryr1ryryrzr�s�z%ParseResults.asXML.<locals>.<genexpr>�  r�N�ITEM�<�>�</)r�r�r�r�r�r�r}r$�asXMLr�r�r�)r��doctag�namedItemsOnly�indent�	formatted�nlr@�
namedItems�nextLevelIndent�selfTagr�rA�resTag�xmlBodyTextryryrzrP�s^

�

�
�zParseResults.asXMLcCs:|j��D]*\}}|D]\}}||kr|Sqq
dSr�)r�r�)r�r�r�r2r�r�ryryrz�__lookup;s
zParseResults.__lookupcCs�|jr|jS|jr.|��}|r(|�|�SdSnNt|�dkrxt|j�dkrxtt|j����dddkrxtt|j����SdSdS)a(
        Returns the results name for this token expression. Useful when several 
        different expressions might match at a particular location.

        Example::
            integer = Word(nums)
            ssn_expr = Regex(r"\d\d\d-\d\d-\d\d\d\d")
            house_number_expr = Suppress('#') + Word(nums, alphanums)
            user_data = (Group(house_number_expr)("house_number") 
                        | Group(ssn_expr)("ssn")
                        | Group(integer)("age"))
            user_info = OneOrMore(user_data)
            
            result = user_info.parseString("22 111-22-3333 #221B")
            for item in result:
                print(item.getName(), ':', item[0])
        prints::
            age : 22
            ssn : 111-22-3333
            house_number : 221B
        Nr�r)rrt)	r�r��_ParseResults__lookupr�r��nextrrr)r��parryryrz�getNameBs
��zParseResults.getNamercCsZg}d}|�|t|����|�rP|��r�tdd�|��D��}|D]r\}}|r\|�|�|�d|d||f�t|t�r�|r�|�|�||d��q�|�t|��qF|�t	|��qFn�t
dd�|D���rP|}t|�D]r\}	}
t|
t��r$|�d|d||	|d|d|
�||d�f�q�|�d|d||	|d|dt|
�f�q�d	�|�S)
aH
        Diagnostic method for listing out the contents of a C{ParseResults}.
        Accepts an optional C{indent} argument so that this string can be embedded
        in a nested display of other data.

        Example::
            integer = Word(nums)
            date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
            
            result = date_str.parseString('12/31/1999')
            print(result.dump())
        prints::
            ['12', '/', '31', '/', '1999']
            - day: 1999
            - month: 31
            - year: 12
        rIcss|]\}}t|�|fVqdSr�)rrEryryrzr�~sz$ParseResults.dump.<locals>.<genexpr>z
%s%s- %s: rKr�css|]}t|t�VqdSr�)r}r$)r��vvryryrzr��sz
%s%s[%d]:
%s%s%sr�)
r%r�r�r�sortedr�r}r$�dumpr��anyr�r�)r�rS�depth�fullr@�NLr�r�r�r�r`ryryrzrbgs,

4,zParseResults.dumpcOstj|��f|�|�dS)a�
        Pretty-printer for parsed results as a list, using the C{pprint} module.
        Accepts additional positional or keyword args as defined for the 
        C{pprint.pprint} method. (U{http://docs.python.org/3/library/pprint.html#pprint.pprint})

        Example::
            ident = Word(alphas, alphanums)
            num = Word(nums)
            func = Forward()
            term = ident | num | Group('(' + func + ')')
            func <<= ident + Group(Optional(delimitedList(term)))
            result = func.parseString("fna a,b,(fnb c,d,200),100")
            result.pprint(width=40)
        prints::
            ['fna',
             ['a',
              'b',
              ['(', 'fnb', ['c', 'd', '200'], ')'],
              '100']]
        N)�pprintr��r�r�rryryrzrg�szParseResults.pprintcCs.|j|j��|jdk	r|��p d|j|jffSr�)r�r�r�r�r�r�r�ryryrz�__getstate__�s��zParseResults.__getstate__cCsN|d|_|d\|_}}|_i|_|j�|�|dk	rDt|�|_nd|_dSr�)r�r�r�r�r4r�r�)r��stater^�inAccumNamesryryrz�__setstate__�s
�zParseResults.__setstate__cCs|j|j|j|jfSr�)r�r�r�r�r�ryryrz�__getnewargs__�szParseResults.__getnewargs__cCstt|��t|���Sr�)r�r�r�rr�ryryrzr��szParseResults.__dir__)NNTT)N)r�)NFr�T)r�rT)4r�r�r�r�r�r}r�r�r�rrrr	�__nonzero__rrrrrrFrrr�rrrrr r�r#r%r'r)r�r-r7r9r�r�r>r�rDr�rPr\r_rbrgrirlrmr�ryryryrzr$Dsh&
	'	
4

#
=%
-
cCsF|}d|krt|�kr4nn||ddkr4dS||�dd|�S)aReturns current column within a string, counting newlines as line separators.
   The first column is number 1.

   Note: the default parsing behavior is to expand tabs in the input string
   before starting the parsing process.  See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information
   on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
   consistent view of the parsed string, the parse location, and line and column
   positions within the parsed string.
   rr�rI)r��rfind)r��strgr�ryryrzr;�s
cCs|�dd|�dS)aReturns current line number within a string, counting newlines as line separators.
   The first line is number 1.

   Note: the default parsing behavior is to expand tabs in the input string
   before starting the parsing process.  See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information
   on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
   consistent view of the parsed string, the parse location, and line and column
   positions within the parsed string.
   rIrr�)�count)r�rpryryrzrL�s
cCsF|�dd|�}|�d|�}|dkr2||d|�S||dd�SdS)zfReturns the line of text containing loc within a string, counting newlines as line separators.
       rIrr�N)ro�find)r�rp�lastCR�nextCRryryrzrI�s
cCs8tdt|�dt|�dt||�t||�f�dS)NzMatch z at loc z(%d,%d))�printr�rLr;)�instringr��exprryryrz�_defaultStartDebugAction�srxcCs$tdt|�dt|����dS)NzMatched z -> )rur�rr�)rv�startloc�endlocrw�toksryryrz�_defaultSuccessDebugAction�sr|cCstdt|��dS)NzException raised:)rur�)rvr�rw�excryryrz�_defaultExceptionDebugAction�sr~cGsdS)zG'Do-nothing' debug action, to suppress debugging output during parsing.Nry)r�ryryrzrS�srscs��tkr�fdd�Sdg�dg�tdd�dkrFddd�}dd	d
��ntj}tj�d}|dd�d
}|d|d|f�������fdd�}d}zt�dt�d�j�}Wntk
r�t��}YnX||_|S)Ncs�|�Sr�ry�r��lrx)�funcryrzr{r|z_trim_arity.<locals>.<lambda>rFrs)rq�cSs8tdkrdnd}tj||dd�|}|dd�gS)N)rqr�r������r���limitrs)�system_version�	traceback�
extract_stack)r�r/�
frame_summaryryryrzr�sz"_trim_arity.<locals>.extract_stackcSs$tj||d�}|d}|dd�gS)Nr�rtrs)r��
extract_tb)�tbr��framesr�ryryrzr�sz_trim_arity.<locals>.extract_tb�r�rtr�c	s�z"�|�dd��}d�d<|WStk
r��dr>�n4z.t��d}�|dd�ddd��ksj�W5~X�d�kr��dd7<Yq�YqXqdS)NrTrtrsr�r�)r�r��exc_info)r�r�r��r��
foundArityr�r��maxargs�pa_call_line_synthryrz�wrapper-s z_trim_arity.<locals>.wrapperz<parse action>r��	__class__)r)r)	�singleArgBuiltinsr�r�r�r��getattrr��	Exceptionr)r�r�r��	LINE_DIFF�	this_liner��	func_nameryr�rz�_trim_aritys,

�r�cs�eZdZdZdZdZedd��Zedd��Zd�dd	�Z	d
d�Z
dd
�Zd�dd�Zd�dd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd�dd �Zd!d"�Zd�d#d$�Zd%d&�Zd'd(�ZGd)d*�d*e�Zed+k	r�Gd,d-�d-e�ZnGd.d-�d-e�ZiZe�Zd/d/gZ d�d0d1�Z!eZ"ed2d3��Z#dZ$ed�d5d6��Z%d�d7d8�Z&e'dfd9d:�Z(d;d<�Z)e'fd=d>�Z*e'dfd?d@�Z+dAdB�Z,dCdD�Z-dEdF�Z.dGdH�Z/dIdJ�Z0dKdL�Z1dMdN�Z2dOdP�Z3dQdR�Z4dSdT�Z5dUdV�Z6dWdX�Z7dYdZ�Z8d�d[d\�Z9d]d^�Z:d_d`�Z;dadb�Z<dcdd�Z=dedf�Z>dgdh�Z?d�didj�Z@dkdl�ZAdmdn�ZBdodp�ZCdqdr�ZDgfdsdt�ZEd�dudv�ZF�fdwdx�ZGdydz�ZHd{d|�ZId}d~�ZJdd��ZKd�d�d��ZLd�d�d��ZM�ZNS)�r&z)Abstract base level parser element class.z 
	
FcCs
|t_dS)a�
        Overrides the default whitespace chars

        Example::
            # default whitespace chars are space, <TAB> and newline
            OneOrMore(Word(alphas)).parseString("abc def\nghi jkl")  # -> ['abc', 'def', 'ghi', 'jkl']
            
            # change to just treat newline as significant
            ParserElement.setDefaultWhitespaceChars(" \t")
            OneOrMore(Word(alphas)).parseString("abc def\nghi jkl")  # -> ['abc', 'def']
        N)r&�DEFAULT_WHITE_CHARS��charsryryrz�setDefaultWhitespaceCharsTs
z'ParserElement.setDefaultWhitespaceCharscCs
|t_dS)a�
        Set class to be used for inclusion of string literals into a parser.
        
        Example::
            # default literal class used is Literal
            integer = Word(nums)
            date_str = integer("year") + '/' + integer("month") + '/' + integer("day")           

            date_str.parseString("1999/12/31")  # -> ['1999', '/', '12', '/', '31']


            # change to Suppress
            ParserElement.inlineLiteralsUsing(Suppress)
            date_str = integer("year") + '/' + integer("month") + '/' + integer("day")           

            date_str.parseString("1999/12/31")  # -> ['1999', '12', '31']
        N)r&�_literalStringClass)r�ryryrz�inlineLiteralsUsingcsz!ParserElement.inlineLiteralsUsingcCs�t�|_d|_d|_d|_||_d|_tj|_	d|_
d|_d|_t�|_
d|_d|_d|_d|_d|_d|_d|_d|_d|_dS)NTFr�)NNN)r��parseAction�
failAction�strRepr�resultsName�
saveAsList�skipWhitespacer&r��
whiteChars�copyDefaultWhiteChars�mayReturnEmpty�keepTabs�ignoreExprs�debug�streamlined�
mayIndexError�errmsg�modalResults�debugActions�re�callPreparse�
callDuringTry)r��savelistryryrzr�xs(zParserElement.__init__cCs<t�|�}|jdd�|_|jdd�|_|jr8tj|_|S)a$
        Make a copy of this C{ParserElement}.  Useful for defining different parse actions
        for the same parsing pattern, using copies of the original parse element.
        
        Example::
            integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
            integerK = integer.copy().addParseAction(lambda toks: toks[0]*1024) + Suppress("K")
            integerM = integer.copy().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M")
            
            print(OneOrMore(integerK | integerM | integer).parseString("5K 100 640K 256M"))
        prints::
            [5120, 100, 655360, 268435456]
        Equivalent form of C{expr.copy()} is just C{expr()}::
            integerM = integer().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M")
        N)r�r�r�r�r&r�r�)r��cpyryryrzr��s
zParserElement.copycCs*||_d|j|_t|d�r&|j|j_|S)af
        Define name for this expression, makes debugging and exception messages clearer.
        
        Example::
            Word(nums).parseString("ABC")  # -> Exception: Expected W:(0123...) (at char 0), (line:1, col:1)
            Word(nums).setName("integer").parseString("ABC")  # -> Exception: Expected integer (at char 0), (line:1, col:1)
        �	Expected �	exception)r�r�rr�r�r*ryryrz�setName�s


zParserElement.setNamecCs4|��}|�d�r"|dd�}d}||_||_|S)aP
        Define name for referencing matching tokens as a nested attribute
        of the returned parse results.
        NOTE: this returns a *copy* of the original C{ParserElement} object;
        this is so that the client can define a basic element, such as an
        integer, and reference it in multiple places with different names.

        You can also set results names using the abbreviated syntax,
        C{expr("name")} in place of C{expr.setResultsName("name")} - 
        see L{I{__call__}<__call__>}.

        Example::
            date_str = (integer.setResultsName("year") + '/' 
                        + integer.setResultsName("month") + '/' 
                        + integer.setResultsName("day"))

            # equivalent form:
            date_str = integer("year") + '/' + integer("month") + '/' + integer("day")
        �*NrtT)r��endswithr�r�)r�r��listAllMatches�newselfryryrz�setResultsName�s
zParserElement.setResultsNameTcs@|r&|j�d�fdd�	}�|_||_nt|jd�r<|jj|_|S)z�Method to invoke the Python pdb debugger when this element is
           about to be parsed. Set C{breakFlag} to True to enable, False to
           disable.
        Tcsddl}|���||||�Sr�)�pdb�	set_trace)rvr��	doActions�callPreParser���_parseMethodryrz�breaker�sz'ParserElement.setBreak.<locals>.breaker�_originalParseMethod)TT)�_parser�r)r��	breakFlagr�ryr�rz�setBreak�s
zParserElement.setBreakcOs&tttt|���|_|�dd�|_|S)a
        Define one or more actions to perform when successfully matching parse element definition.
        Parse action fn is a callable method with 0-3 arguments, called as C{fn(s,loc,toks)},
        C{fn(loc,toks)}, C{fn(toks)}, or just C{fn()}, where:
         - s   = the original string being parsed (see note below)
         - loc = the location of the matching substring
         - toks = a list of the matched tokens, packaged as a C{L{ParseResults}} object
        If the functions in fns modify the tokens, they can return them as the return
        value from fn, and the modified list of tokens will replace the original.
        Otherwise, fn does not need to return any value.

        Optional keyword arguments:
         - callDuringTry = (default=C{False}) indicate if parse action should be run during lookaheads and alternate testing

        Note: the default parsing behavior is to expand tabs in the input string
        before starting the parsing process.  See L{I{parseString}<parseString>} for more information
        on parsing strings containing C{<TAB>}s, and suggested methods to maintain a
        consistent view of the parsed string, the parse location, and line and column
        positions within the parsed string.
        
        Example::
            integer = Word(nums)
            date_str = integer + '/' + integer + '/' + integer

            date_str.parseString("1999/12/31")  # -> ['1999', '/', '12', '/', '31']

            # use parse action to convert to ints at parse time
            integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
            date_str = integer + '/' + integer + '/' + integer

            # note that integer fields are now ints, not strings
            date_str.parseString("1999/12/31")  # -> [1999, '/', 12, '/', 31]
        r�F)r��mapr�r�r�r��r��fnsrryryrzr��s"zParserElement.setParseActioncOs4|jtttt|���7_|jp,|�dd�|_|S)z�
        Add one or more parse actions to expression's list of parse actions. See L{I{setParseAction}<setParseAction>}.
        
        See examples in L{I{copy}<copy>}.
        r�F)r�r�r�r�r�r�r�ryryrz�addParseActionszParserElement.addParseActioncs^|�dd��|�dd�rtnt�|D] ����fdd�}|j�|�q$|jpV|�dd�|_|S)a�Add a boolean predicate function to expression's list of parse actions. See 
        L{I{setParseAction}<setParseAction>} for function call signatures. Unlike C{setParseAction}, 
        functions passed to C{addCondition} need to return boolean success/fail of the condition.

        Optional keyword arguments:
         - message = define a custom message to be used in the raised exception
         - fatal   = if True, will raise ParseFatalException to stop parsing immediately; otherwise will raise ParseException
         
        Example::
            integer = Word(nums).setParseAction(lambda toks: int(toks[0]))
            year_int = integer.copy()
            year_int.addCondition(lambda toks: toks[0] >= 2000, message="Only support years 2000 and later")
            date_str = year_int + '/' + integer + '/' + integer

            result = date_str.parseString("1999/12/31")  # -> Exception: Only support years 2000 and later (at char 0), (line:1, col:1)
        �messagezfailed user-defined condition�fatalFcs$tt��|||��s �||���dSr�)rr�r��exc_type�fnr�ryrz�pa&sz&ParserElement.addCondition.<locals>.par�)r�r#r!r�r%r�)r�r�rr�ryr�rz�addConditionszParserElement.addConditioncCs
||_|S)aDefine action to perform if parsing fails at this expression.
           Fail acton fn is a callable function that takes the arguments
           C{fn(s,loc,expr,err)} where:
            - s = string being parsed
            - loc = location where expression match was attempted and failed
            - expr = the parse expression that failed
            - err = the exception thrown
           The function returns no value.  It may throw C{L{ParseFatalException}}
           if it is desired to stop parsing immediately.)r�)r�r�ryryrz�
setFailAction-s
zParserElement.setFailActionc	CsNd}|rJd}|jD]4}z|�||�\}}d}qWqtk
rDYqXqq|S�NTF)r�r�r!)r�rvr��
exprsFound�e�dummyryryrz�_skipIgnorables:s


zParserElement._skipIgnorablescCsH|jr|�||�}|jrD|j}t|�}||krD|||krD|d7}q&|S�Nr�)r�r�r�r�r�)r�rvr��wt�instrlenryryrz�preParseGs
zParserElement.preParsecCs|gfSr�ry�r�rvr�r�ryryrz�	parseImplSszParserElement.parseImplcCs|Sr�ry�r�rvr��	tokenlistryryrz�	postParseVszParserElement.postParsec
Cs�|j}|s|jr�|jdr,|jd|||�|rD|jrD|�||�}n|}|}zDz|�|||�\}}Wn(tk
r�t|t|�|j	|��YnXWnXt
k
r�}	z:|jdr�|jd||||	�|jr�|�||||	��W5d}	~	XYnXn�|�r|j�r|�||�}n|}|}|j�s&|t|�k�rjz|�|||�\}}Wn*tk
�rft|t|�|j	|��YnXn|�|||�\}}|�|||�}t
||j|j|jd�}
|j�r�|�s�|j�r�|�rTzN|jD]B}||||
�}|dk	�r�t
||j|j�o�t|t
tf�|jd�}
�q�WnFt
k
�rP}	z&|jd�r>|jd||||	��W5d}	~	XYnXnJ|jD]B}||||
�}|dk	�rZt
||j|j�o�t|t
tf�|jd�}
�qZ|�r�|jd�r�|jd|||||
�||
fS)Nrrs)r�r�r�)r�r�r�r�r�r�r�r!r�r�rr�r�r$r�r�r�r�r�r}r�)r�rvr�r�r��	debugging�preloc�tokensStart�tokens�err�	retTokensr�ryryrz�
_parseNoCacheZst





�

�
zParserElement._parseNoCachecCs@z|j||dd�dWStk
r:t|||j|��YnXdS)NF)r�r)r�r#r!r��r�rvr�ryryrz�tryParse�szParserElement.tryParsec	Cs4z|�||�Wnttfk
r*YdSXdSdS)NFT)r�r!r�r�ryryrz�canParseNext�s
zParserElement.canParseNextc@seZdZdd�ZdS)zParserElement._UnboundedCachecs~i�t�|_���fdd�}�fdd�}�fdd�}�fdd�}t�||�|_t�||�|_t�||�|_t�||�|_dS)	Ncs��|��Sr��r��r�r!��cache�not_in_cacheryrzr��sz3ParserElement._UnboundedCache.__init__.<locals>.getcs|�|<dSr�ry�r�r!r�r�ryrz�set�sz3ParserElement._UnboundedCache.__init__.<locals>.setcs���dSr��r)r�r�ryrzr)�sz5ParserElement._UnboundedCache.__init__.<locals>.clearcst��Sr��r�r�r�ryrz�	cache_len�sz9ParserElement._UnboundedCache.__init__.<locals>.cache_len)r�r��types�
MethodTyper�r�r)r)r�r�r�r)r�ryr�rzr��sz&ParserElement._UnboundedCache.__init__N�r�r�r�r�ryryryrz�_UnboundedCache�sr�Nc@seZdZdd�ZdS)�ParserElement._FifoCachecs�t�|_�t����fdd�}��fdd�}�fdd�}�fdd�}t�||�|_t�||�|_t�||�|_t�||�|_dS)	Ncs��|��Sr�r�r�r�ryrzr��s�.ParserElement._FifoCache.__init__.<locals>.getcs>|�|<t���kr:z��d�Wqtk
r6YqXqdS�NF)r��popitemr�r�)r��sizeryrzr��s�.ParserElement._FifoCache.__init__.<locals>.setcs���dSr�r�r�r�ryrzr)�s�0ParserElement._FifoCache.__init__.<locals>.clearcst��Sr�r�r�r�ryrzr��s�4ParserElement._FifoCache.__init__.<locals>.cache_len)	r�r��_OrderedDictr�r�r�r�r)r�r�rr�r�r)r�ry)r�r�rrzr��s�!ParserElement._FifoCache.__init__Nr�ryryryrz�
_FifoCache�sr
c@seZdZdd�ZdS)r�cs�t�|_�i�t�g�����fdd�}���fdd�}��fdd�}�fdd�}t�||�|_t�||�|_t�||�|_t�||�|_	dS)	Ncs��|��Sr�r�r�r�ryrzr��srcs4|�|<t���kr&�����d�q��|�dSr�)r�r �popleftr%r�)r��key_fiforryrzr��srcs������dSr�r�r�)r�rryrzr)�srcst��Sr�r�r�r�ryrzr��sr)
r�r��collections�dequer�r�r�r�r)rrry)r�rr�rrzr��sr	Nr�ryryryrzr
�srcCsd\}}|||||f}tj��tj}|�|�}	|	|jkr�tj|d7<z|�||||�}	Wn8tk
r�}
z|�||
j	|
j
���W5d}
~
XYn.X|�||	d|	d��f�|	W5QR�Sn@tj|d7<t|	t
�r�|	�|	d|	d��fW5QR�SW5QRXdS)Nr0r�r)r&�packrat_cache_lock�
packrat_cacher�r��packrat_cache_statsr�rr�r�r�r�r}r�)r�rvr�r�r��HIT�MISS�lookupr�rr�ryryrz�_parseCaches$


zParserElement._parseCachecCs(tj��dgttj�tjdd�<dSr�)r&rr)r�rryryryrz�
resetCaches
zParserElement.resetCache�cCs8tjs4dt_|dkr t��t_nt�|�t_tjt_dS)a�Enables "packrat" parsing, which adds memoizing to the parsing logic.
           Repeated parse attempts at the same string location (which happens
           often in many complex grammars) can immediately return a cached value,
           instead of re-executing parsing/validating code.  Memoizing is done of
           both valid results and parsing exceptions.
           
           Parameters:
            - cache_size_limit - (default=C{128}) - if an integer value is provided
              will limit the size of the packrat cache; if None is passed, then
              the cache size will be unbounded; if 0 is passed, the cache will
              be effectively disabled.
            
           This speedup may break existing programs that use parse actions that
           have side-effects.  For this reason, packrat parsing is disabled when
           you first import pyparsing.  To activate the packrat feature, your
           program must call the class method C{ParserElement.enablePackrat()}.  If
           your program uses C{psyco} to "compile as you go", you must call
           C{enablePackrat} before calling C{psyco.full()}.  If you do not do this,
           Python will crash.  For best results, call C{enablePackrat()} immediately
           after importing pyparsing.
           
           Example::
               import pyparsing
               pyparsing.ParserElement.enablePackrat()
        TN)r&�_packratEnabledr�rr
rr�)�cache_size_limitryryrz�
enablePackrat%szParserElement.enablePackratc
Cs�t��|js|��|jD]}|��q|js8|��}z<|�|d�\}}|rr|�||�}t	�t
�}|�||�Wn0tk
r�}ztjr��n|�W5d}~XYnX|SdS)aB
        Execute the parse expression with the given string.
        This is the main interface to the client code, once the complete
        expression has been built.

        If you want the grammar to require that the entire input string be
        successfully parsed, then set C{parseAll} to True (equivalent to ending
        the grammar with C{L{StringEnd()}}).

        Note: C{parseString} implicitly calls C{expandtabs()} on the input string,
        in order to report proper column numbers in parse actions.
        If the input string contains tabs and
        the grammar uses parse actions that use the C{loc} argument to index into the
        string being parsed, you can ensure you have a consistent view of the input
        string by:
         - calling C{parseWithTabs} on your grammar before calling C{parseString}
           (see L{I{parseWithTabs}<parseWithTabs>})
         - define your parse action using the full C{(s,loc,toks)} signature, and
           reference the input string using the parse action's C{s} argument
         - explictly expand the tabs in your input string before calling
           C{parseString}
        
        Example::
            Word('a').parseString('aaaaabaaa')  # -> ['aaaaa']
            Word('a').parseString('aaaaabaaa', parseAll=True)  # -> Exception: Expected end of text
        rN)
r&rr��
streamliner�r��
expandtabsr�r�rr+r�verbose_stacktrace)r�rv�parseAllr�r�r��ser}ryryrz�parseStringHs$

zParserElement.parseStringc
cs6|js|��|jD]}|��q|js4t|���}t|�}d}|j}|j}t	�
�d}	z�||kr�|	|kr�z |||�}
|||
dd�\}}Wntk
r�|
d}YqZX||kr�|	d7}	||
|fV|r�|||�}
|
|kr�|}q�|d7}q�|}qZ|
d}qZWn4tk
�r0}zt	j
�r�n|�W5d}~XYnXdS)a�
        Scan the input string for expression matches.  Each match will return the
        matching tokens, start location, and end location.  May be called with optional
        C{maxMatches} argument, to clip scanning after 'n' matches are found.  If
        C{overlap} is specified, then overlapping matches will be reported.

        Note that the start and end locations are reported relative to the string
        being parsed.  See L{I{parseString}<parseString>} for more information on parsing
        strings with embedded tabs.

        Example::
            source = "sldjf123lsdjjkf345sldkjf879lkjsfd987"
            print(source)
            for tokens,start,end in Word(alphas).scanString(source):
                print(' '*start + '^'*(end-start))
                print(' '*start + tokens[0])
        
        prints::
        
            sldjf123lsdjjkf345sldkjf879lkjsfd987
            ^^^^^
            sldjf
                    ^^^^^^^
                    lsdjjkf
                              ^^^^^^
                              sldkjf
                                       ^^^^^^
                                       lkjsfd
        rF�r�r�N)r�rr�r�r�rr�r�r�r&rr!rr)r�rv�
maxMatches�overlapr�r�r��
preparseFn�parseFn�matchesr��nextLocr��nextlocr}ryryrz�
scanStringzsB




zParserElement.scanStringc
Cs�g}d}d|_z�|�|�D]Z\}}}|�|||��|rpt|t�rR||��7}nt|t�rf||7}n
|�|�|}q|�||d��dd�|D�}d�tt	t
|���WStk
r�}ztj
rƂn|�W5d}~XYnXdS)af
        Extension to C{L{scanString}}, to modify matching text with modified tokens that may
        be returned from a parse action.  To use C{transformString}, define a grammar and
        attach a parse action to it that modifies the returned token list.
        Invoking C{transformString()} on a target string will then scan for matches,
        and replace the matched text patterns according to the logic in the parse
        action.  C{transformString()} returns the resulting transformed string.
        
        Example::
            wd = Word(alphas)
            wd.setParseAction(lambda toks: toks[0].title())
            
            print(wd.transformString("now is the winter of our discontent made glorious summer by this sun of york."))
        Prints::
            Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York.
        rTNcSsg|]}|r|�qSryry)r��oryryrzr��sz1ParserElement.transformString.<locals>.<listcomp>r�)r�r)r%r}r$r�r�r�r�r��_flattenrr&r)r�rvr@�lastErxr�r�r}ryryrzr��s(



zParserElement.transformStringc
CsRztdd�|�||�D��WStk
rL}ztjr8�n|�W5d}~XYnXdS)a�
        Another extension to C{L{scanString}}, simplifying the access to the tokens found
        to match the given parse expression.  May be called with optional
        C{maxMatches} argument, to clip searching after 'n' matches are found.
        
        Example::
            # a capitalized word starts with an uppercase letter, followed by zero or more lowercase letters
            cap_word = Word(alphas.upper(), alphas.lower())
            
            print(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity"))

            # the sum() builtin can be used to merge results into a single ParseResults object
            print(sum(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity")))
        prints::
            [['More'], ['Iron'], ['Lead'], ['Gold'], ['I'], ['Electricity']]
            ['More', 'Iron', 'Lead', 'Gold', 'I', 'Electricity']
        cSsg|]\}}}|�qSryry)r�rxr�r�ryryrzr��sz.ParserElement.searchString.<locals>.<listcomp>N)r$r)rr&r)r�rvr"r}ryryrz�searchString�szParserElement.searchStringc	csTd}d}|j||d�D]*\}}}|||�V|r<|dV|}q||d�VdS)a[
        Generator method to split a string using the given expression as a separator.
        May be called with optional C{maxsplit} argument, to limit the number of splits;
        and the optional C{includeSeparators} argument (default=C{False}), if the separating
        matching text should be included in the split results.
        
        Example::        
            punc = oneOf(list(".,;:/-!?"))
            print(list(punc.split("This, this?, this sentence, is badly punctuated!")))
        prints::
            ['This', ' this', '', ' this sentence', ' is badly punctuated', '']
        r)r"N)r))	r�rv�maxsplit�includeSeparators�splits�lastrxr�r�ryryrzr�s

zParserElement.splitcCsFt|t�rt�|�}t|t�s:tjdt|�tdd�dSt||g�S)a�
        Implementation of + operator - returns C{L{And}}. Adding strings to a ParserElement
        converts them to L{Literal}s by default.
        
        Example::
            greet = Word(alphas) + "," + Word(alphas) + "!"
            hello = "Hello, World!"
            print (hello, "->", greet.parseString(hello))
        Prints::
            Hello, World! -> ['Hello', ',', 'World', '!']
        �4Cannot combine element of type %s with ParserElementrs��
stacklevelN)	r}r�r&r��warnings�warnr��
SyntaxWarningrr8ryryrzr-s


�zParserElement.__add__cCsBt|t�rt�|�}t|t�s:tjdt|�tdd�dS||S)z]
        Implementation of + operator when left operand is not a C{L{ParserElement}}
        r2rsr3N�r}r�r&r�r5r6r�r7r8ryryrzr91s


�zParserElement.__radd__cCsJt|t�rt�|�}t|t�s:tjdt|�tdd�dS|t�	�|S)zQ
        Implementation of - operator, returns C{L{And}} with error stop
        r2rsr3N)
r}r�r&r�r5r6r�r7r�
_ErrorStopr8ryryrz�__sub__=s


�zParserElement.__sub__cCsBt|t�rt�|�}t|t�s:tjdt|�tdd�dS||S)z]
        Implementation of - operator when left operand is not a C{L{ParserElement}}
        r2rsr3Nr8r8ryryrz�__rsub__Is


�zParserElement.__rsub__cs�t|t�r|d}}n�t|t�r�|ddd�}|ddkrHd|df}t|dt�r�|ddkr�|ddkrvt��S|ddkr�t��S�|dt��Sq�t|dt�r�t|dt�r�|\}}||8}q�tdt|d�t|d���ntdt|���|dk�rtd��|dk�rtd	��||k�r6dk�rBnntd
��|�r���fdd��|�r�|dk�rt��|�}nt�g|��|�}n�|�}n|dk�r��}nt�g|�}|S)
a�
        Implementation of * operator, allows use of C{expr * 3} in place of
        C{expr + expr + expr}.  Expressions may also me multiplied by a 2-integer
        tuple, similar to C{{min,max}} multipliers in regular expressions.  Tuples
        may also include C{None} as in:
         - C{expr*(n,None)} or C{expr*(n,)} is equivalent
              to C{expr*n + L{ZeroOrMore}(expr)}
              (read as "at least n instances of C{expr}")
         - C{expr*(None,n)} is equivalent to C{expr*(0,n)}
              (read as "0 to n instances of C{expr}")
         - C{expr*(None,None)} is equivalent to C{L{ZeroOrMore}(expr)}
         - C{expr*(1,None)} is equivalent to C{L{OneOrMore}(expr)}

        Note that C{expr*(None,n)} does not raise an exception if
        more than n exprs exist in the input stream; that is,
        C{expr*(None,n)} does not enforce a maximum number of expr
        occurrences.  If this behavior is desired, then write
        C{expr*(None,n) + ~expr}
        r)NNNrsr�z7cannot multiply 'ParserElement' and ('%s','%s') objectsz0cannot multiply 'ParserElement' and '%s' objectsz/cannot multiply ParserElement by negative valuez@second tuple value must be greater or equal to first tuple valuez+cannot multiply ParserElement by 0 or (0,0)cs(|dkrt��|d��St��SdSr�)r��n��makeOptionalListr�ryrzr?�sz/ParserElement.__mul__.<locals>.makeOptionalList)	r}rv�tupler4rr�r��
ValueErrorr)r�r,�minElements�optElementsr�ryr>rz�__mul__UsD







zParserElement.__mul__cCs
|�|�Sr�)rDr8ryryrz�__rmul__�szParserElement.__rmul__cCsFt|t�rt�|�}t|t�s:tjdt|�tdd�dSt||g�S)zI
        Implementation of | operator - returns C{L{MatchFirst}}
        r2rsr3N)	r}r�r&r�r5r6r�r7rr8ryryrz�__or__�s


�zParserElement.__or__cCsBt|t�rt�|�}t|t�s:tjdt|�tdd�dS||BS)z]
        Implementation of | operator when left operand is not a C{L{ParserElement}}
        r2rsr3Nr8r8ryryrz�__ror__�s


�zParserElement.__ror__cCsFt|t�rt�|�}t|t�s:tjdt|�tdd�dSt||g�S)zA
        Implementation of ^ operator - returns C{L{Or}}
        r2rsr3N)	r}r�r&r�r5r6r�r7rr8ryryrz�__xor__�s


�zParserElement.__xor__cCsBt|t�rt�|�}t|t�s:tjdt|�tdd�dS||AS)z]
        Implementation of ^ operator when left operand is not a C{L{ParserElement}}
        r2rsr3Nr8r8ryryrz�__rxor__�s


�zParserElement.__rxor__cCsFt|t�rt�|�}t|t�s:tjdt|�tdd�dSt||g�S)zC
        Implementation of & operator - returns C{L{Each}}
        r2rsr3N)	r}r�r&r�r5r6r�r7rr8ryryrz�__and__�s


�zParserElement.__and__cCsBt|t�rt�|�}t|t�s:tjdt|�tdd�dS||@S)z]
        Implementation of & operator when left operand is not a C{L{ParserElement}}
        r2rsr3Nr8r8ryryrz�__rand__�s


�zParserElement.__rand__cCst|�S)zE
        Implementation of ~ operator - returns C{L{NotAny}}
        )rr�ryryrz�
__invert__�szParserElement.__invert__cCs|dk	r|�|�S|��SdS)a

        Shortcut for C{L{setResultsName}}, with C{listAllMatches=False}.
        
        If C{name} is given with a trailing C{'*'} character, then C{listAllMatches} will be
        passed as C{True}.
           
        If C{name} is omitted, same as calling C{L{copy}}.

        Example::
            # these are equivalent
            userdata = Word(alphas).setResultsName("name") + Word(nums+"-").setResultsName("socsecno")
            userdata = Word(alphas)("name") + Word(nums+"-")("socsecno")             
        N)r�r�r*ryryrz�__call__�s
zParserElement.__call__cCst|�S)z�
        Suppresses the output of this C{ParserElement}; useful to keep punctuation from
        cluttering up returned output.
        )r-r�ryryrz�suppress�szParserElement.suppresscCs
d|_|S)a
        Disables the skipping of whitespace before matching the characters in the
        C{ParserElement}'s defined pattern.  This is normally only used internally by
        the pyparsing module, but may be needed in some whitespace-sensitive grammars.
        F�r�r�ryryrz�leaveWhitespaceszParserElement.leaveWhitespacecCsd|_||_d|_|S)z8
        Overrides the default whitespace chars
        TF)r�r�r�)r�r�ryryrz�setWhitespaceChars
sz ParserElement.setWhitespaceCharscCs
d|_|S)z�
        Overrides default behavior to expand C{<TAB>}s to spaces before parsing the input string.
        Must be called before C{parseString} when the input grammar contains elements that
        match C{<TAB>} characters.
        T)r�r�ryryrz�
parseWithTabsszParserElement.parseWithTabscCsLt|t�rt|�}t|t�r4||jkrH|j�|�n|j�t|����|S)a�
        Define expression to be ignored (e.g., comments) while doing pattern
        matching; may be called repeatedly, to define multiple comment or other
        ignorable patterns.
        
        Example::
            patt = OneOrMore(Word(alphas))
            patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj']
            
            patt.ignore(cStyleComment)
            patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj', 'lskjd']
        )r}r�r-r�r%r�r8ryryrz�ignores


zParserElement.ignorecCs"|pt|pt|ptf|_d|_|S)zT
        Enable display of debugging messages while doing pattern matching.
        T)rxr|r~r�r�)r��startAction�
successAction�exceptionActionryryrz�setDebugActions6s�zParserElement.setDebugActionscCs|r|�ttt�nd|_|S)a�
        Enable display of debugging messages while doing pattern matching.
        Set C{flag} to True to enable, False to disable.

        Example::
            wd = Word(alphas).setName("alphaword")
            integer = Word(nums).setName("numword")
            term = wd | integer
            
            # turn on debugging for wd
            wd.setDebug()

            OneOrMore(term).parseString("abc 123 xyz 890")
        
        prints::
            Match alphaword at loc 0(1,1)
            Matched alphaword -> ['abc']
            Match alphaword at loc 3(1,4)
            Exception raised:Expected alphaword (at char 4), (line:1, col:5)
            Match alphaword at loc 7(1,8)
            Matched alphaword -> ['xyz']
            Match alphaword at loc 11(1,12)
            Exception raised:Expected alphaword (at char 12), (line:1, col:13)
            Match alphaword at loc 15(1,16)
            Exception raised:Expected alphaword (at char 15), (line:1, col:16)

        The output shown is that produced by the default debug actions - custom debug actions can be
        specified using L{setDebugActions}. Prior to attempting
        to match the C{wd} expression, the debugging message C{"Match <exprname> at loc <n>(<line>,<col>)"}
        is shown. Then if the parse succeeds, a C{"Matched"} message is shown, or an C{"Exception raised"}
        message is shown. Also note the use of L{setName} to assign a human-readable name to the expression,
        which makes debugging and exception messages easier to understand - for instance, the default
        name created for the C{Word} expression without calling C{setName} is C{"W:(ABCD...)"}.
        F)rWrxr|r~r�)r��flagryryrz�setDebug@s#zParserElement.setDebugcCs|jSr�)r�r�ryryrzr�iszParserElement.__str__cCst|�Sr�r�r�ryryrzr�lszParserElement.__repr__cCsd|_d|_|Sr�)r�r�r�ryryrzroszParserElement.streamlinecCsdSr�ryr�ryryrz�checkRecursiontszParserElement.checkRecursioncCs|�g�dS)zj
        Check defined expressions for valid structure, check for infinite recursive definitions.
        N)rZ)r��
validateTraceryryrz�validatewszParserElement.validatecCs�z|��}Wn2tk
r>t|d��}|��}W5QRXYnXz|�||�WStk
r~}ztjrj�n|�W5d}~XYnXdS)z�
        Execute the parse expression on the given file or filename.
        If a filename is specified (instead of a file object),
        the entire file is opened, read, and closed before parsing.
        �rN)�readr��openr rr&r)r��file_or_filenamer�
file_contents�fr}ryryrz�	parseFile}szParserElement.parseFilecsHt|t�r"||kp t|�t|�kSt|t�r6|�|�Stt|�|kSdSr�)r}r&�varsr�r&�superr8�r�ryrz�__eq__�s



zParserElement.__eq__cCs
||kSr�ryr8ryryrz�__ne__�szParserElement.__ne__cCstt|��Sr�)�hash�idr�ryryrz�__hash__�szParserElement.__hash__cCs||kSr�ryr8ryryrz�__req__�szParserElement.__req__cCs
||kSr�ryr8ryryrz�__rne__�szParserElement.__rne__cCs4z|jt|�|d�WdStk
r.YdSXdS)a�
        Method for quick testing of a parser against a test string. Good for simple 
        inline microtests of sub expressions while building up larger parser.
           
        Parameters:
         - testString - to test against this expression for a match
         - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests
            
        Example::
            expr = Word(nums)
            assert expr.matches("100")
        �rTFN)r r�r)r��
testStringrryryrzr&�s

zParserElement.matches�#cCs�t|t�r"tttj|������}t|t�r4t|�}g}g}d}	|D�]�}
|dk	r^|�	|
d�sf|rr|
sr|�
|
�qD|
sxqDd�|�|
g}g}z:|
�dd�}
|j
|
|d�}|�
|j|d��|	o�|}	Wn�tk
�rr}
z�t|
t�r�dnd	}d|
k�r*|�
t|
j|
��|�
d
t|
j|
�dd|�n|�
d
|
jd|�|�
d
t|
��|	�o\|}	|
}W5d}
~
XYnDtk
�r�}z$|�
dt|��|	�o�|}	|}W5d}~XYnX|�r�|�r�|�
d	�td�|��|�
|
|f�qD|	|fS)a3
        Execute the parse expression on a series of test strings, showing each
        test, the parsed results or where the parse failed. Quick and easy way to
        run a parse expression against a list of sample strings.
           
        Parameters:
         - tests - a list of separate test strings, or a multiline string of test strings
         - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests           
         - comment - (default=C{'#'}) - expression for indicating embedded comments in the test 
              string; pass None to disable comment filtering
         - fullDump - (default=C{True}) - dump results as list followed by results names in nested outline;
              if False, only dump nested list
         - printResults - (default=C{True}) prints test output to stdout
         - failureTests - (default=C{False}) indicates if these tests are expected to fail parsing

        Returns: a (success, results) tuple, where success indicates that all tests succeeded
        (or failed if C{failureTests} is True), and the results contain a list of lines of each 
        test's output
        
        Example::
            number_expr = pyparsing_common.number.copy()

            result = number_expr.runTests('''
                # unsigned integer
                100
                # negative integer
                -100
                # float with scientific notation
                6.02e23
                # integer with scientific notation
                1e-12
                ''')
            print("Success" if result[0] else "Failed!")

            result = number_expr.runTests('''
                # stray character
                100Z
                # missing leading digit before '.'
                -.100
                # too many '.'
                3.14.159
                ''', failureTests=True)
            print("Success" if result[0] else "Failed!")
        prints::
            # unsigned integer
            100
            [100]

            # negative integer
            -100
            [-100]

            # float with scientific notation
            6.02e23
            [6.02e+23]

            # integer with scientific notation
            1e-12
            [1e-12]

            Success
            
            # stray character
            100Z
               ^
            FAIL: Expected end of text (at char 3), (line:1, col:4)

            # missing leading digit before '.'
            -.100
            ^
            FAIL: Expected {real number with scientific notation | real number | signed integer} (at char 0), (line:1, col:1)

            # too many '.'
            3.14.159
                ^
            FAIL: Expected end of text (at char 4), (line:1, col:5)

            Success

        Each test string must be on a single line. If you want to test a string that spans multiple
        lines, create a test like this::

            expr.runTest(r"this is a test\n of strings that spans \n 3 lines")
        
        (Note that this is a raw string literal, you must include the leading 'r'.)
        TNFrI�\nrn)rez(FATAL)r�� r��^zFAIL: zFAIL-EXCEPTION: )r}r�r�r�rr��rstrip�
splitlinesrr&r%r�r�r rbrr#rIr�r;r�ru)r��testsr�comment�fullDump�printResults�failureTests�
allResults�comments�successrxr@�resultr�r�r}ryryrz�runTests�sNW




$


zParserElement.runTests)F)F)T)T)TT)TT)r)F)N)T)F)T)TrpTTF)Or�r�r�r�r�r�staticmethodr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr
rrrrrr�rrrr �_MAX_INTr)r�r-r�r-r9r:r;rDrErFrGrHrIrJrKrLrMrNrPrQrRrSrWrYr�r�rrZr\rcrgrhrkrlrmr&r�
__classcell__ryryrfrzr&Os�




&




G

"
2G+D
			

)

cs eZdZdZ�fdd�Z�ZS)r.zT
    Abstract C{ParserElement} subclass, for defining atomic matching patterns.
    cstt|�jdd�dS�NF�r�)rer.r�r�rfryrzr�@	szToken.__init__�r�r�r�r�r�r�ryryrfrzr.<	scs eZdZdZ�fdd�Z�ZS)rz,
    An empty token, will always match.
    cs$tt|���d|_d|_d|_dS)NrTF)rerr�r�r�r�r�rfryrzr�H	szEmpty.__init__r�ryryrfrzrD	scs*eZdZdZ�fdd�Zddd�Z�ZS)rz(
    A token that will never match.
    cs*tt|���d|_d|_d|_d|_dS)NrTFzUnmatchable token)rerr�r�r�r�r�r�rfryrzr�S	s
zNoMatch.__init__TcCst|||j|��dSr�)r!r�r�ryryrzr�Z	szNoMatch.parseImpl)T�r�r�r�r�r�r�r�ryryrfrzrO	scs*eZdZdZ�fdd�Zddd�Z�ZS)ra�
    Token to exactly match a specified string.
    
    Example::
        Literal('blah').parseString('blah')  # -> ['blah']
        Literal('blah').parseString('blahfooblah')  # -> ['blah']
        Literal('blah').parseString('bla')  # -> Exception: Expected "blah"
    
    For case-insensitive matching, use L{CaselessLiteral}.
    
    For keyword matching (force word break before and after the matched string),
    use L{Keyword} or L{CaselessKeyword}.
    cs�tt|���||_t|�|_z|d|_Wn*tk
rVtj	dt
dd�t|_YnXdt
|j�|_d|j|_d|_d|_dS)Nrz2null string passed to Literal; use Empty() insteadrsr3�"%s"r�F)rerr��matchr��matchLen�firstMatchCharr�r5r6r7rr�r�r�r�r�r��r��matchStringrfryrzr�l	s
�zLiteral.__init__TcCsJ|||jkr6|jdks&|�|j|�r6||j|jfSt|||j|��dSr�)r�r��
startswithr�r!r�r�ryryrzr�	s��zLiteral.parseImpl)Tr�ryryrfrzr^	s
csLeZdZdZedZd�fdd�	Zddd	�Z�fd
d�Ze	dd
��Z
�ZS)ra\
    Token to exactly match a specified string as a keyword, that is, it must be
    immediately followed by a non-keyword character.  Compare with C{L{Literal}}:
     - C{Literal("if")} will match the leading C{'if'} in C{'ifAndOnlyIf'}.
     - C{Keyword("if")} will not; it will only match the leading C{'if'} in C{'if x=1'}, or C{'if(y==2)'}
    Accepts two optional constructor arguments in addition to the keyword string:
     - C{identChars} is a string of characters that would be valid identifier characters,
          defaulting to all alphanumerics + "_" and "$"
     - C{caseless} allows case-insensitive matching, default is C{False}.
       
    Example::
        Keyword("start").parseString("start")  # -> ['start']
        Keyword("start").parseString("starting")  # -> Exception

    For case-insensitive matching, use L{CaselessKeyword}.
    �_$NFcs�tt|���|dkrtj}||_t|�|_z|d|_Wn$tk
r^t	j
dtdd�YnXd|j|_d|j|_
d|_d|_||_|r�|��|_|��}t|�|_dS)Nrz2null string passed to Keyword; use Empty() insteadrsr3r�r�F)rerr��DEFAULT_KEYWORD_CHARSr�r�r�r�r�r5r6r7r�r�r�r��caseless�upper�
caselessmatchr��
identChars)r�r�r�r�rfryrzr��	s*
�
zKeyword.__init__TcCs|jr|||||j���|jkr�|t|�|jksL|||j��|jkr�|dksj||d��|jkr�||j|jfSnv|||jkr�|jdks�|�|j|�r�|t|�|jks�|||j|jkr�|dks�||d|jkr�||j|jfSt	|||j
|��dSr�)r�r�r�r�r�r�r�r�r�r!r�r�ryryrzr��	s4����������zKeyword.parseImplcstt|���}tj|_|Sr�)rerr�r�r�)r�r�rfryrzr��	szKeyword.copycCs
|t_dS)z,Overrides the default Keyword chars
        N)rr�r�ryryrz�setDefaultKeywordChars�	szKeyword.setDefaultKeywordChars)NF)T)r�r�r�r�r5r�r�r�r�r�r�r�ryryrfrzr�	s
cs*eZdZdZ�fdd�Zddd�Z�ZS)r
al
    Token to match a specified string, ignoring case of letters.
    Note: the matched results will always be in the case of the given
    match string, NOT the case of the input text.

    Example::
        OneOrMore(CaselessLiteral("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD', 'CMD']
        
    (Contrast with example for L{CaselessKeyword}.)
    cs6tt|��|���||_d|j|_d|j|_dS)Nz'%s'r�)rer
r�r��returnStringr�r�r�rfryrzr��	szCaselessLiteral.__init__TcCs@||||j���|jkr,||j|jfSt|||j|��dSr�)r�r�r�r�r!r�r�ryryrzr��	szCaselessLiteral.parseImpl)Tr�ryryrfrzr
�	s
cs,eZdZdZd�fdd�	Zd	dd�Z�ZS)
r	z�
    Caseless version of L{Keyword}.

    Example::
        OneOrMore(CaselessKeyword("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD']
        
    (Contrast with example for L{CaselessLiteral}.)
    Ncstt|�j||dd�dS)NT�r�)rer	r�)r�r�r�rfryrzr��	szCaselessKeyword.__init__TcCsj||||j���|jkrV|t|�|jksF|||j��|jkrV||j|jfSt|||j|��dSr�)r�r�r�r�r�r�r!r�r�ryryrzr��	s��zCaselessKeyword.parseImpl)N)Tr�ryryrfrzr	�	scs,eZdZdZd�fdd�	Zd	dd�Z�ZS)
rnax
    A variation on L{Literal} which matches "close" matches, that is, 
    strings with at most 'n' mismatching characters. C{CloseMatch} takes parameters:
     - C{match_string} - string to be matched
     - C{maxMismatches} - (C{default=1}) maximum number of mismatches allowed to count as a match
    
    The results from a successful parse will contain the matched text from the input string and the following named results:
     - C{mismatches} - a list of the positions within the match_string where mismatches were found
     - C{original} - the original match_string used to compare against the input string
    
    If C{mismatches} is an empty list, then the match was an exact match.
    
    Example::
        patt = CloseMatch("ATCATCGAATGGA")
        patt.parseString("ATCATCGAAXGGA") # -> (['ATCATCGAAXGGA'], {'mismatches': [[9]], 'original': ['ATCATCGAATGGA']})
        patt.parseString("ATCAXCGAAXGGA") # -> Exception: Expected 'ATCATCGAATGGA' (with up to 1 mismatches) (at char 0), (line:1, col:1)

        # exact match
        patt.parseString("ATCATCGAATGGA") # -> (['ATCATCGAATGGA'], {'mismatches': [[]], 'original': ['ATCATCGAATGGA']})

        # close match allowing up to 2 mismatches
        patt = CloseMatch("ATCATCGAATGGA", maxMismatches=2)
        patt.parseString("ATCAXCGAAXGGA") # -> (['ATCAXCGAAXGGA'], {'mismatches': [[4, 9]], 'original': ['ATCATCGAATGGA']})
    r�csBtt|���||_||_||_d|j|jf|_d|_d|_dS)Nz&Expected %r (with up to %d mismatches)F)	rernr�r��match_string�
maxMismatchesr�r�r�)r�r�r�rfryrzr�

szCloseMatch.__init__TcCs�|}t|�}|t|j�}||kr�|j}d}g}	|j}
tt|||�|j��D]2\}}|\}}
||
krN|	�|�t|	�|
krNq�qN|d}t|||�g�}|j|d<|	|d<||fSt|||j|��dS)Nrr��original�
mismatches)	r�r�r�r�r�r%r$r!r�)r�rvr�r��startr��maxlocr��match_stringlocr�r��s_m�src�mat�resultsryryrzr�
s( 

zCloseMatch.parseImpl)r�)Tr�ryryrfrzrn�	s	cs8eZdZdZd
�fdd�	Zdd	d
�Z�fdd�Z�ZS)r1a	
    Token for matching words composed of allowed character sets.
    Defined with string containing all allowed initial characters,
    an optional string containing allowed body characters (if omitted,
    defaults to the initial character set), and an optional minimum,
    maximum, and/or exact length.  The default value for C{min} is 1 (a
    minimum value < 1 is not valid); the default values for C{max} and C{exact}
    are 0, meaning no maximum or exact length restriction. An optional
    C{excludeChars} parameter can list characters that might be found in 
    the input C{bodyChars} string; useful to define a word of all printables
    except for one or two characters, for instance.
    
    L{srange} is useful for defining custom character set strings for defining 
    C{Word} expressions, using range notation from regular expression character sets.
    
    A common mistake is to use C{Word} to match a specific literal string, as in 
    C{Word("Address")}. Remember that C{Word} uses the string argument to define
    I{sets} of matchable characters. This expression would match "Add", "AAA",
    "dAred", or any other word made up of the characters 'A', 'd', 'r', 'e', and 's'.
    To match an exact literal string, use L{Literal} or L{Keyword}.

    pyparsing includes helper strings for building Words:
     - L{alphas}
     - L{nums}
     - L{alphanums}
     - L{hexnums}
     - L{alphas8bit} (alphabetic characters in ASCII range 128-255 - accented, tilded, umlauted, etc.)
     - L{punc8bit} (non-alphabetic characters in ASCII range 128-255 - currency, symbols, superscripts, diacriticals, etc.)
     - L{printables} (any non-whitespace character)

    Example::
        # a word composed of digits
        integer = Word(nums) # equivalent to Word("0123456789") or Word(srange("0-9"))
        
        # a word with a leading capital, and zero or more lowercase
        capital_word = Word(alphas.upper(), alphas.lower())

        # hostnames are alphanumeric, with leading alpha, and '-'
        hostname = Word(alphas, alphanums+'-')
        
        # roman numeral (not a strict parser, accepts invalid mix of characters)
        roman = Word("IVXLCDM")
        
        # any string of non-whitespace characters, except for ','
        csv_value = Word(printables, excludeChars=",")
    Nr�rFcs�tt|����rFd��fdd�|D��}|rFd��fdd�|D��}||_t|�|_|rl||_t|�|_n||_t|�|_|dk|_	|dkr�t
d��||_|dkr�||_nt
|_|dkr�||_||_t|�|_d|j|_d	|_||_d
|j|jk�r�|dk�r�|dk�r�|dk�r�|j|jk�r8dt|j�|_nHt|j�dk�rfdt�|j�t|j�f|_nd
t|j�t|j�f|_|j�r�d|jd|_zt�|j�|_Wntk
�r�d|_YnXdS)Nr�c3s|]}|�kr|VqdSr�ryr���excludeCharsryrzr�`
sz Word.__init__.<locals>.<genexpr>c3s|]}|�kr|VqdSr�ryr�r�ryrzr�b
srr�zZcannot specify a minimum length < 1; use Optional(Word()) if zero-length word is permittedr�Frrz[%s]+z%s[%s]*z	[%s][%s]*z\b)rer1r�r��
initCharsOrigr��	initChars�
bodyCharsOrig�	bodyChars�maxSpecifiedrA�minLen�maxLenr�r�r�r�r��	asKeyword�_escapeRegexRangeChars�reStringr�r��escape�compiler�)r�r�r��min�max�exactr�r�rfr�rzr�]
s\



0
����z
Word.__init__Tc
Cs>|jr<|j�||�}|s(t|||j|��|��}||��fS|||jkrZt|||j|��|}|d7}t|�}|j}||j	}t
||�}||kr�|||kr�|d7}q�d}	|||jkr�d}	|jr�||kr�|||kr�d}	|j
�r|dkr�||d|k�s||k�r|||k�rd}	|	�r.t|||j|��||||�fS)Nr�FTr)r�r�r!r��end�groupr�r�r�r�r�r�r�r�)
r�rvr�r�r~r�r��	bodycharsr��throwExceptionryryrzr��
s6


2zWord.parseImplcsvztt|���WStk
r$YnX|jdkrpdd�}|j|jkr`d||j�||j�f|_nd||j�|_|jS)NcSs$t|�dkr|dd�dS|SdS)N��...r��r�ryryrz�
charsAsStr�
sz Word.__str__.<locals>.charsAsStrz	W:(%s,%s)zW:(%s))rer1r�r�r�r�r�)r�r�rfryrzr��
s
zWord.__str__)Nr�rrFN)T�r�r�r�r�r�r�r�r�ryryrfrzr1.
s.6
#csFeZdZdZee�d��Zd�fdd�	Zddd�Z	�fd	d
�Z
�ZS)
r)a�
    Token for matching strings that match a given regular expression.
    Defined with string specifying the regular expression in a form recognized by the inbuilt Python re module.
    If the given regex contains named groups (defined using C{(?P<name>...)}), these will be preserved as 
    named parse results.

    Example::
        realnum = Regex(r"[+-]?\d+\.\d*")
        date = Regex(r'(?P<year>\d{4})-(?P<month>\d\d?)-(?P<day>\d\d?)')
        # ref: http://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression
        roman = Regex(r"M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})")
    z[A-Z]rcs�tt|���t|t�r�|s,tjdtdd�||_||_	zt
�|j|j	�|_
|j|_Wq�t
jk
r�tjd|tdd��Yq�Xn2t|tj�r�||_
t|�|_|_||_	ntd��t|�|_d|j|_d|_d|_d	S)
z�The parameters C{pattern} and C{flags} are passed to the C{re.compile()} function as-is. See the Python C{re} module for an explanation of the acceptable patterns and flags.z0null string passed to Regex; use Empty() insteadrsr3�$invalid pattern (%s) passed to RegexzCRegex may only be constructed with a string or a compiled RE objectr�FTN)rer)r�r}r�r5r6r7�pattern�flagsr�r�r��
sre_constants�error�compiledREtyperrAr�r�r�r�r�)r�r�r�rfryrzr��
s:
�
�
�
zRegex.__init__TcCs`|j�||�}|s"t|||j|��|��}|��}t|���}|rX|D]}||||<qF||fSr�)r�r�r!r�r��	groupdictr$r�)r�rvr�r�r~�dr�r�ryryrzr��
szRegex.parseImplcsFztt|���WStk
r$YnX|jdkr@dt|j�|_|jS)NzRe:(%s))rer)r�r�r�r�r�r�rfryrzr�
s
z
Regex.__str__)r)T)r�r�r�r�r�r�r�r�r�r�r�r�ryryrfrzr)�
s
"

cs8eZdZdZd�fdd�	Zddd�Z�fd	d
�Z�ZS)
r'a�
    Token for matching strings that are delimited by quoting characters.
    
    Defined with the following parameters:
        - quoteChar - string of one or more characters defining the quote delimiting string
        - escChar - character to escape quotes, typically backslash (default=C{None})
        - escQuote - special quote sequence to escape an embedded quote string (such as SQL's "" to escape an embedded ") (default=C{None})
        - multiline - boolean indicating whether quotes can span multiple lines (default=C{False})
        - unquoteResults - boolean indicating whether the matched text should be unquoted (default=C{True})
        - endQuoteChar - string of one or more characters defining the end of the quote delimited string (default=C{None} => same as quoteChar)
        - convertWhitespaceEscapes - convert escaped whitespace (C{'\t'}, C{'\n'}, etc.) to actual whitespace (default=C{True})

    Example::
        qs = QuotedString('"')
        print(qs.searchString('lsjdf "This is the quote" sldjf'))
        complex_qs = QuotedString('{{', endQuoteChar='}}')
        print(complex_qs.searchString('lsjdf {{This is the "quote"}} sldjf'))
        sql_qs = QuotedString('"', escQuote='""')
        print(sql_qs.searchString('lsjdf "This is the quote with ""embedded"" quotes" sldjf'))
    prints::
        [['This is the quote']]
        [['This is the "quote"']]
        [['This is the quote with "embedded" quotes']]
    NFTc
sNtt����|��}|s0tjdtdd�t��|dkr>|}n"|��}|s`tjdtdd�t��|�_t	|��_
|d�_|�_t	|��_
|�_|�_|�_|�_|r�tjtjB�_dt��j�t�jd�|dk	r�t|�p�df�_n<d�_dt��j�t�jd�|dk	�rt|��pdf�_t	�j�d	k�rp�jd
d��fdd
�tt	�j�d	dd�D��d7_|�r��jdt�|�7_|�r��jdt�|�7_t��j�d�_�jdt��j�7_zt��j�j��_�j�_Wn0tjk
�r&tjd�jtdd��YnXt ���_!d�j!�_"d�_#d�_$dS)Nz$quoteChar cannot be the empty stringrsr3z'endQuoteChar cannot be the empty stringrz%s(?:[^%s%s]r�z%s(?:[^%s\n\r%s]r�z|(?:z)|(?:c3s4|],}dt��jd|��t�j|�fVqdS)z%s[^%s]N)r�r��endQuoteCharr�r<r�ryrzr�Xs��z(QuotedString.__init__.<locals>.<genexpr>rt�)z|(?:%s)z|(?:%s.)z(.)z)*%sr�r�FT)%rer'r�r�r5r6r7�SyntaxError�	quoteCharr��quoteCharLen�firstQuoteCharr��endQuoteCharLen�escChar�escQuote�unquoteResults�convertWhitespaceEscapesr��	MULTILINE�DOTALLr�r�r�r�r�r��escCharReplacePatternr�r�r�r�r�r�r�r�r�)r�r�r�r��	multiliner�r�r�rfr�rzr�/s|



��
������
zQuotedString.__init__c	Cs�|||jkr|j�||�pd}|s4t|||j|��|��}|��}|jr�||j|j	�}t
|t�r�d|kr�|jr�ddddd�}|�
�D]\}}|�||�}q�|jr�t�|jd|�}|jr�|�|j|j�}||fS)N�\�	rI��
)�\trqz\fz\rz\g<1>)r�r�r�r!r�r�r�r�r�r�r}r�r�r�r�r�r�r�r�r�)	r�rvr�r�r~r��ws_map�wslit�wscharryryrzr�ps* 
�zQuotedString.parseImplcsHztt|���WStk
r$YnX|jdkrBd|j|jf|_|jS)Nz.quoted string, starting with %s ending with %s)rer'r�r�r�r�r�r�rfryrzr��s
zQuotedString.__str__)NNFTNT)Tr�ryryrfrzr'sA
#cs8eZdZdZd�fdd�	Zddd�Z�fd	d
�Z�ZS)
ra�
    Token for matching words composed of characters I{not} in a given set (will
    include whitespace in matched characters if not listed in the provided exclusion set - see example).
    Defined with string containing all disallowed characters, and an optional
    minimum, maximum, and/or exact length.  The default value for C{min} is 1 (a
    minimum value < 1 is not valid); the default values for C{max} and C{exact}
    are 0, meaning no maximum or exact length restriction.

    Example::
        # define a comma-separated-value as anything that is not a ','
        csv_value = CharsNotIn(',')
        print(delimitedList(csv_value).parseString("dkls,lsdkjf,s12 34,@!#,213"))
    prints::
        ['dkls', 'lsdkjf', 's12 34', '@!#', '213']
    r�rcs�tt|���d|_||_|dkr*td��||_|dkr@||_nt|_|dkrZ||_||_t	|�|_
d|j
|_|jdk|_d|_
dS)NFr�zfcannot specify a minimum length < 1; use Optional(CharsNotIn()) if zero-length char group is permittedrr�)rerr�r��notCharsrAr�r�r�r�r�r�r�r�)r�r�r�r�r�rfryrzr��s 
zCharsNotIn.__init__TcCs�|||jkrt|||j|��|}|d7}|j}t||jt|��}||krb|||krb|d7}qD|||jkr�t|||j|��||||�fSr�)r�r!r�r�r�r�r�)r�rvr�r�r��notchars�maxlenryryrzr��s
�
zCharsNotIn.parseImplcsfztt|���WStk
r$YnX|jdkr`t|j�dkrTd|jdd�|_nd|j|_|jS)Nr�z
!W:(%s...)z!W:(%s))rerr�r�r�r�r�r�rfryrzr��s
zCharsNotIn.__str__)r�rr)Tr�ryryrfrzr�s
cs<eZdZdZdddddd�Zd�fdd�	Zddd�Z�ZS)r0a�
    Special matching class for matching whitespace.  Normally, whitespace is ignored
    by pyparsing grammars.  This class is included when some whitespace structures
    are significant.  Define with a string containing the whitespace characters to be
    matched; default is C{" \t\r\n"}.  Also takes optional C{min}, C{max}, and C{exact} arguments,
    as defined for the C{L{Word}} class.
    z<SPC>z<TAB>z<LF>z<CR>z<FF>)rrr�rIr�r�� 	
r�rcs�tt����|�_��d��fdd��jD���d�dd��jD���_d�_d�j�_	|�_
|dkrt|�_nt�_|dkr�|�_|�_
dS)Nr�c3s|]}|�jkr|VqdSr�)�
matchWhiter�r�ryrzr��s
z!White.__init__.<locals>.<genexpr>css|]}tj|VqdSr�)r0�	whiteStrsr�ryryrzr��sTr�r)
rer0r�r�rQr�r�r�r�r�r�r�r�)r��wsr�r�r�rfr�rzr��s zWhite.__init__TcCs�|||jkrt|||j|��|}|d7}||j}t|t|��}||krb|||jkrb|d7}qB|||jkr�t|||j|��||||�fSr�)r�r!r�r�r�r�r�)r�rvr�r�r�r�ryryrzr�	s

zWhite.parseImpl)r�r�rr)T)r�r�r�r�r�r�r�r�ryryrfrzr0�s�cseZdZ�fdd�Z�ZS)�_PositionTokencs(tt|���|jj|_d|_d|_dSr�)rer�r�r�r�r�r�r�r�rfryrzr�s
z_PositionToken.__init__�r�r�r�r�r�ryryrfrzr�sr�cs2eZdZdZ�fdd�Zdd�Zd	dd�Z�ZS)
rzb
    Token to advance to a specific column of input text; useful for tabular report scraping.
    cstt|���||_dSr�)rerr�r;)r��colnorfryrzr�$szGoToColumn.__init__cCs\t||�|jkrXt|�}|jr*|�||�}||krX||��rXt||�|jkrX|d7}q*|Sr�)r;r�r�r��isspace)r�rvr�r�ryryrzr�(s$
zGoToColumn.preParseTcCsDt||�}||jkr"t||d|��||j|}|||�}||fS)NzText not in expected column�r;r!)r�rvr�r��thiscol�newlocr�ryryrzr�1s

zGoToColumn.parseImpl)T)r�r�r�r�r�r�r�r�ryryrfrzr s	cs*eZdZdZ�fdd�Zddd�Z�ZS)ra�
    Matches if current position is at the beginning of a line within the parse string
    
    Example::
    
        test = '''        AAA this line
        AAA and this line
          AAA but not this one
        B AAA and definitely not this one
        '''

        for t in (LineStart() + 'AAA' + restOfLine).searchString(test):
            print(t)
    
    Prints::
        ['AAA', ' this line']
        ['AAA', ' and this line']    

    cstt|���d|_dS)NzExpected start of line)rerr�r�r�rfryrzr�OszLineStart.__init__TcCs*t||�dkr|gfSt|||j|��dSr�)r;r!r�r�ryryrzr�SszLineStart.parseImpl)Tr�ryryrfrzr:scs*eZdZdZ�fdd�Zddd�Z�ZS)rzU
    Matches if current position is at the end of a line within the parse string
    cs,tt|���|�tj�dd��d|_dS)NrIr�zExpected end of line)rerr�rQr&r�r�r�r�rfryrzr�\szLineEnd.__init__TcCsb|t|�kr6||dkr$|ddfSt|||j|��n(|t|�krN|dgfSt|||j|��dS)NrIr��r�r!r�r�ryryrzr�aszLineEnd.parseImpl)Tr�ryryrfrzrXscs*eZdZdZ�fdd�Zddd�Z�ZS)r,zM
    Matches if current position is at the beginning of the parse string
    cstt|���d|_dS)NzExpected start of text)rer,r�r�r�rfryrzr�pszStringStart.__init__TcCs0|dkr(||�|d�kr(t|||j|��|gfSr�)r�r!r�r�ryryrzr�tszStringStart.parseImpl)Tr�ryryrfrzr,lscs*eZdZdZ�fdd�Zddd�Z�ZS)r+zG
    Matches if current position is at the end of the parse string
    cstt|���d|_dS)NzExpected end of text)rer+r�r�r�rfryrzr�szStringEnd.__init__TcCs^|t|�krt|||j|��n<|t|�kr6|dgfS|t|�krJ|gfSt|||j|��dSr�r�r�ryryrzr��szStringEnd.parseImpl)Tr�ryryrfrzr+{scs.eZdZdZef�fdd�	Zddd�Z�ZS)r3ap
    Matches if the current position is at the beginning of a Word, and
    is not preceded by any character in a given set of C{wordChars}
    (default=C{printables}). To emulate the C{} behavior of regular expressions,
    use C{WordStart(alphanums)}. C{WordStart} will also match at the beginning of
    the string being parsed, or at the beginning of a line.
    cs"tt|���t|�|_d|_dS)NzNot at the start of a word)rer3r�r��	wordCharsr��r�r�rfryrzr��s
zWordStart.__init__TcCs@|dkr8||d|jks(|||jkr8t|||j|��|gfSr�)r�r!r�r�ryryrzr��s�zWordStart.parseImpl)T�r�r�r�r�rXr�r�r�ryryrfrzr3�scs.eZdZdZef�fdd�	Zddd�Z�ZS)r2aZ
    Matches if the current position is at the end of a Word, and
    is not followed by any character in a given set of C{wordChars}
    (default=C{printables}). To emulate the C{} behavior of regular expressions,
    use C{WordEnd(alphanums)}. C{WordEnd} will also match at the end of
    the string being parsed, or at the end of a line.
    cs(tt|���t|�|_d|_d|_dS)NFzNot at the end of a word)rer2r�r�r�r�r�r�rfryrzr��s
zWordEnd.__init__TcCsPt|�}|dkrH||krH|||jks8||d|jkrHt|||j|��|gfSr�)r�r�r!r�)r�rvr�r�r�ryryrzr��s�zWordEnd.parseImpl)Tr�ryryrfrzr2�scs�eZdZdZd�fdd�	Zdd�Zdd�Zd	d
�Z�fdd�Z�fd
d�Z	�fdd�Z
d�fdd�	Zgfdd�Z�fdd�Z
�ZS)r"z^
    Abstract subclass of ParserElement, for combining and post-processing parsed tokens.
    Fcs�tt|��|�t|t�r"t|�}t|t�r<t�|�g|_	nht|t
�rxt|�}tdd�|D��rlttj|�}t|�|_	n,zt|�|_	Wnt
k
r�|g|_	YnXd|_dS)Ncss|]}t|t�VqdSr�)r}r�)r�rwryryrzr��sz+ParseExpression.__init__.<locals>.<genexpr>F)rer"r�r}r�r�r�r&r��exprsr�allr�r�r��r�r�r�rfryrzr��s


zParseExpression.__init__cCs
|j|Sr�)r�r�ryryrzr��szParseExpression.__getitem__cCs|j�|�d|_|Sr�)r�r%r�r8ryryrzr%�szParseExpression.appendcCs0d|_dd�|jD�|_|jD]}|��q|S)z~Extends C{leaveWhitespace} defined in base class, and also invokes C{leaveWhitespace} on
           all contained expressions.FcSsg|]}|���qSryr+�r�r�ryryrzr��sz3ParseExpression.leaveWhitespace.<locals>.<listcomp>)r�r�rP)r�r�ryryrzrP�s


zParseExpression.leaveWhitespacecsrt|t�rB||jkrntt|��|�|jD]}|�|jd�q*n,tt|��|�|jD]}|�|jd�qX|Sr
)r}r-r�rer"rSr�)r�r,r�rfryrzrS�s



zParseExpression.ignorecsNztt|���WStk
r$YnX|jdkrHd|jjt|j�f|_|jS�Nz%s:(%s))	rer"r�r�r�r�r�r�r�r�rfryrzr��s
zParseExpression.__str__cs*tt|���|jD]}|��qt|j�dk�r|jd}t||j�r�|js�|jdkr�|j	s�|jdd�|jdg|_d|_
|j|jO_|j|jO_|jd}t||j��r|j�s|jdk�r|j	�s|jdd�|jdd�|_d|_
|j|jO_|j|jO_dt
|�|_|S)Nrsrr�rtr�)rer"rr�r�r}r�r�r�r�r�r�r�r�r�)r�r�r,rfryrzr�s<


���
���zParseExpression.streamlinecstt|��||�}|Sr�)rer"r�)r�r�r�r�rfryrzr�
szParseExpression.setResultsNamecCs6|dd�|g}|jD]}|�|�q|�g�dSr�)r�r\rZ)r�r[�tmpr�ryryrzr\
s
zParseExpression.validatecs$tt|���}dd�|jD�|_|S)NcSsg|]}|���qSryr+r�ryryrzr�%
sz(ParseExpression.copy.<locals>.<listcomp>)rer"r�r�rHrfryrzr�#
szParseExpression.copy)F)F)r�r�r�r�r�r�r%rPrSr�rr�r\r�r�ryryrfrzr"�s	
"csTeZdZdZGdd�de�Zd�fdd�	Zddd�Zd	d
�Zdd�Z	d
d�Z
�ZS)ra

    Requires all given C{ParseExpression}s to be found in the given order.
    Expressions may be separated by whitespace.
    May be constructed using the C{'+'} operator.
    May also be constructed using the C{'-'} operator, which will suppress backtracking.

    Example::
        integer = Word(nums)
        name_expr = OneOrMore(Word(alphas))

        expr = And([integer("id"),name_expr("name"),integer("age")])
        # more easily written as:
        expr = integer("id") + name_expr("name") + integer("age")
    cseZdZ�fdd�Z�ZS)zAnd._ErrorStopcs&ttj|�j||�d|_|��dS)N�-)rerr9r�r�rPrhrfryrzr�9
szAnd._ErrorStop.__init__r�ryryrfrzr98
sr9TcsRtt|��||�tdd�|jD��|_|�|jdj�|jdj|_d|_	dS)Ncss|]}|jVqdSr��r�r�ryryrzr�@
szAnd.__init__.<locals>.<genexpr>rT)
rerr�r�r�r�rQr�r�r�r�rfryrzr�>
s
zAnd.__init__c	Cs�|jdj|||dd�\}}d}|jdd�D]�}t|tj�rDd}q.|r�z|�|||�\}}Wq�tk
rt�Yq�tk
r�}zd|_t�|��W5d}~XYq�t	k
r�t|t
|�|j|��Yq�Xn|�|||�\}}|s�|��r.||7}q.||fS)NrFr!r�T)
r�r�r}rr9r%r�
__traceback__r�r�r�r�r)	r�rvr�r��
resultlist�	errorStopr��
exprtokensr�ryryrzr�E
s(
z
And.parseImplcCst|t�rt�|�}|�|�Sr��r}r�r&r�r%r8ryryrzr7^
s

zAnd.__iadd__cCs6|dd�|g}|jD]}|�|�|jsq2qdSr�)r�rZr��r�r��subRecCheckListr�ryryrzrZc
s


zAnd.checkRecursioncCs@t|d�r|jS|jdkr:dd�dd�|jD��d|_|jS)Nr��{rrcss|]}t|�VqdSr�r�r�ryryrzr�o
szAnd.__str__.<locals>.<genexpr>�}�rr�r�r�r�r�ryryrzr�j
s


 zAnd.__str__)T)T)r�r�r�r�rr9r�r�r7rZr�r�ryryrfrzr(
s
csDeZdZdZd�fdd�	Zddd�Zdd	�Zd
d�Zdd
�Z�Z	S)ra�
    Requires that at least one C{ParseExpression} is found.
    If two expressions match, the expression that matches the longest string will be used.
    May be constructed using the C{'^'} operator.

    Example::
        # construct Or using '^' operator
        
        number = Word(nums) ^ Combine(Word(nums) + '.' + Word(nums))
        print(number.searchString("123 3.1416 789"))
    prints::
        [['123'], ['3.1416'], ['789']]
    Fcs:tt|��||�|jr0tdd�|jD��|_nd|_dS)Ncss|]}|jVqdSr�r�r�ryryrzr��
szOr.__init__.<locals>.<genexpr>T)rerr�r�rcr�r�rfryrzr��
szOr.__init__TcCsRd}d}g}|jD]�}z|�||�}Wnvtk
rb}	zd|	_|	j|krR|	}|	j}W5d}	~	XYqtk
r�t|�|kr�t|t|�|j|�}t|�}YqX|�||f�q|�r(|j	dd�d�|D]^\}
}z|�
|||�WStk
�r$}	z d|	_|	j|k�r|	}|	j}W5d}	~	XYq�Xq�|dk	�r@|j|_|�nt||d|��dS)NrtcSs
|dSr�ry)�xryryrzr{�
r|zOr.parseImpl.<locals>.<lambda>)r!� no defined alternatives to match)r�r�r!r�r�r�r�r�r%�sortr�r�)r�rvr�r��	maxExcLoc�maxExceptionr&r��loc2r��_ryryrzr��
s<


zOr.parseImplcCst|t�rt�|�}|�|�Sr�r�r8ryryrz�__ixor__�
s

zOr.__ixor__cCs@t|d�r|jS|jdkr:dd�dd�|jD��d|_|jS)Nr�r�z ^ css|]}t|�VqdSr�r�r�ryryrzr��
szOr.__str__.<locals>.<genexpr>r�r�r�ryryrzr��
s


 z
Or.__str__cCs,|dd�|g}|jD]}|�|�qdSr��r�rZr�ryryrzrZ�
s
zOr.checkRecursion)F)T)
r�r�r�r�r�r�rr�rZr�ryryrfrzrt
s

&	csDeZdZdZd�fdd�	Zddd�Zdd	�Zd
d�Zdd
�Z�Z	S)ra�
    Requires that at least one C{ParseExpression} is found.
    If two expressions match, the first one listed is the one that will match.
    May be constructed using the C{'|'} operator.

    Example::
        # construct MatchFirst using '|' operator
        
        # watch the order of expressions to match
        number = Word(nums) | Combine(Word(nums) + '.' + Word(nums))
        print(number.searchString("123 3.1416 789")) #  Fail! -> [['123'], ['3'], ['1416'], ['789']]

        # put more selective expression first
        number = Combine(Word(nums) + '.' + Word(nums)) | Word(nums)
        print(number.searchString("123 3.1416 789")) #  Better -> [['123'], ['3.1416'], ['789']]
    Fcs:tt|��||�|jr0tdd�|jD��|_nd|_dS)Ncss|]}|jVqdSr�r�r�ryryrzr��
sz&MatchFirst.__init__.<locals>.<genexpr>T)rerr�r�rcr�r�rfryrzr��
szMatchFirst.__init__Tc	Cs�d}d}|jD]�}z|�|||�}|WStk
r`}z|j|krP|}|j}W5d}~XYqtk
r�t|�|kr�t|t|�|j|�}t|�}YqXq|dk	r�|j|_|�nt||d|��dS)Nrtr)r�r�r!r�r�r�r�r�)	r�rvr�r�rrr�r�r�ryryrzr��
s$


zMatchFirst.parseImplcCst|t�rt�|�}|�|�Sr�r�r8ryryrz�__ior__�
s

zMatchFirst.__ior__cCs@t|d�r|jS|jdkr:dd�dd�|jD��d|_|jS)Nr�r�� | css|]}t|�VqdSr�r�r�ryryrzr��
sz%MatchFirst.__str__.<locals>.<genexpr>r�r�r�ryryrzr��
s


 zMatchFirst.__str__cCs,|dd�|g}|jD]}|�|�qdSr�rr�ryryrzrZs
zMatchFirst.checkRecursion)F)T)
r�r�r�r�r�r�rr�rZr�ryryrfrzr�
s
	cs<eZdZdZd�fdd�	Zddd�Zdd�Zd	d
�Z�ZS)
ram
    Requires all given C{ParseExpression}s to be found, but in any order.
    Expressions may be separated by whitespace.
    May be constructed using the C{'&'} operator.

    Example::
        color = oneOf("RED ORANGE YELLOW GREEN BLUE PURPLE BLACK WHITE BROWN")
        shape_type = oneOf("SQUARE CIRCLE TRIANGLE STAR HEXAGON OCTAGON")
        integer = Word(nums)
        shape_attr = "shape:" + shape_type("shape")
        posn_attr = "posn:" + Group(integer("x") + ',' + integer("y"))("posn")
        color_attr = "color:" + color("color")
        size_attr = "size:" + integer("size")

        # use Each (using operator '&') to accept attributes in any order 
        # (shape and posn are required, color and size are optional)
        shape_spec = shape_attr & posn_attr & Optional(color_attr) & Optional(size_attr)

        shape_spec.runTests('''
            shape: SQUARE color: BLACK posn: 100, 120
            shape: CIRCLE size: 50 color: BLUE posn: 50,80
            color:GREEN size:20 shape:TRIANGLE posn:20,40
            '''
            )
    prints::
        shape: SQUARE color: BLACK posn: 100, 120
        ['shape:', 'SQUARE', 'color:', 'BLACK', 'posn:', ['100', ',', '120']]
        - color: BLACK
        - posn: ['100', ',', '120']
          - x: 100
          - y: 120
        - shape: SQUARE


        shape: CIRCLE size: 50 color: BLUE posn: 50,80
        ['shape:', 'CIRCLE', 'size:', '50', 'color:', 'BLUE', 'posn:', ['50', ',', '80']]
        - color: BLUE
        - posn: ['50', ',', '80']
          - x: 50
          - y: 80
        - shape: CIRCLE
        - size: 50


        color: GREEN size: 20 shape: TRIANGLE posn: 20,40
        ['color:', 'GREEN', 'size:', '20', 'shape:', 'TRIANGLE', 'posn:', ['20', ',', '40']]
        - color: GREEN
        - posn: ['20', ',', '40']
          - x: 20
          - y: 40
        - shape: TRIANGLE
        - size: 20
    Tcs8tt|��||�tdd�|jD��|_d|_d|_dS)Ncss|]}|jVqdSr�r�r�ryryrzr�?sz Each.__init__.<locals>.<genexpr>T)rerr�r�r�r�r��initExprGroupsr�rfryrzr�=sz
Each.__init__c	s�|jr�tdd�|jD��|_dd�|jD�}dd�|jD�}|||_dd�|jD�|_dd�|jD�|_dd�|jD�|_|j|j7_d	|_|}|jdd�}|jdd��g}d
}	|	�rj|�|j|j}
g}|
D]v}z|�||�}Wn t	k
�r|�
|�Yq�X|�
|j�t|�|��||k�r@|�
|�q�|�kr܈�
|�q�t|�t|
�kr�d	}	q�|�r�d�dd�|D��}
t	||d
|
��|�fdd�|jD�7}g}|D]"}|�|||�\}}|�
|��q�t|tg��}||fS)Ncss&|]}t|t�rt|j�|fVqdSr�)r}rrjrwr�ryryrzr�Es
z!Each.parseImpl.<locals>.<genexpr>cSsg|]}t|t�r|j�qSry�r}rrwr�ryryrzr�Fs
z"Each.parseImpl.<locals>.<listcomp>cSs g|]}|jrt|t�s|�qSry)r�r}rr�ryryrzr�Gs
cSsg|]}t|t�r|j�qSry)r}r4rwr�ryryrzr�Is
cSsg|]}t|t�r|j�qSry)r}rrwr�ryryrzr�Js
cSs g|]}t|tttf�s|�qSry)r}rr4rr�ryryrzr�KsFTr;css|]}t|�VqdSr�r�r�ryryrzr�fsz*Missing one or more required elements (%s)cs$g|]}t|t�r|j�kr|�qSryrr���tmpOptryrzr�js

)r
r�r��opt1map�	optionals�multioptionals�
multirequired�requiredr�r!r%r�rj�remover�r�r��sumr$)r�rvr�r��opt1�opt2�tmpLoc�tmpReqd�
matchOrder�keepMatching�tmpExprs�failedr��missingr�r��finalResultsryrrzr�CsP

zEach.parseImplcCs@t|d�r|jS|jdkr:dd�dd�|jD��d|_|jS)Nr�r�z & css|]}t|�VqdSr�r�r�ryryrzr�yszEach.__str__.<locals>.<genexpr>r�r�r�ryryrzr�ts


 zEach.__str__cCs,|dd�|g}|jD]}|�|�qdSr�rr�ryryrzrZ}s
zEach.checkRecursion)T)T)	r�r�r�r�r�r�r�rZr�ryryrfrzrs
5
1	csleZdZdZd�fdd�	Zddd�Zdd	�Z�fd
d�Z�fdd
�Zdd�Z	gfdd�Z
�fdd�Z�ZS)r za
    Abstract subclass of C{ParserElement}, for combining and post-processing parsed tokens.
    Fcs�tt|��|�t|t�r@ttjt�r2t�|�}nt�t	|��}||_
d|_|dk	r�|j|_|j
|_
|�|j�|j|_|j|_|j|_|j�|j�dSr�)rer r�r}r��
issubclassr&r�r.rrwr�r�r�rQr�r�r�r�r�r'�r�rwr�rfryrzr��s
zParseElementEnhance.__init__TcCs2|jdk	r|jj|||dd�Std||j|��dS)NFr!r�)rwr�r!r�r�ryryrzr��s
zParseElementEnhance.parseImplcCs*d|_|j��|_|jdk	r&|j��|Sr)r�rwr�rPr�ryryrzrP�s


z#ParseElementEnhance.leaveWhitespacecsrt|t�rB||jkrntt|��|�|jdk	rn|j�|jd�n,tt|��|�|jdk	rn|j�|jd�|Sr
)r}r-r�rer rSrwr8rfryrzrS�s



zParseElementEnhance.ignorecs&tt|���|jdk	r"|j��|Sr�)rer rrwr�rfryrzr�s

zParseElementEnhance.streamlinecCsB||krt||g��|dd�|g}|jdk	r>|j�|�dSr�)r(rwrZ)r�r�r�ryryrzrZ�s

z"ParseElementEnhance.checkRecursioncCs6|dd�|g}|jdk	r(|j�|�|�g�dSr��rwr\rZ�r�r[r�ryryrzr\�s
zParseElementEnhance.validatecsXztt|���WStk
r$YnX|jdkrR|jdk	rRd|jjt|j�f|_|jSr�)	rer r�r�r�rwr�r�r�r�rfryrzr��szParseElementEnhance.__str__)F)T)
r�r�r�r�r�r�rPrSrrZr\r�r�ryryrfrzr �s
cs*eZdZdZ�fdd�Zddd�Z�ZS)ra�
    Lookahead matching of the given parse expression.  C{FollowedBy}
    does I{not} advance the parsing position within the input string, it only
    verifies that the specified parse expression matches at the current
    position.  C{FollowedBy} always returns a null token list.

    Example::
        # use FollowedBy to match a label only if it is followed by a ':'
        data_word = Word(alphas)
        label = data_word + FollowedBy(':')
        attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
        
        OneOrMore(attr_expr).parseString("shape: SQUARE color: BLACK posn: upper left").pprint()
    prints::
        [['shape', 'SQUARE'], ['color', 'BLACK'], ['posn', 'upper left']]
    cstt|��|�d|_dSr�)rerr�r��r�rwrfryrzr��szFollowedBy.__init__TcCs|j�||�|gfSr�)rwr�r�ryryrzr��szFollowedBy.parseImpl)Tr�ryryrfrzr�scs2eZdZdZ�fdd�Zd	dd�Zdd�Z�ZS)
ra�
    Lookahead to disallow matching with the given parse expression.  C{NotAny}
    does I{not} advance the parsing position within the input string, it only
    verifies that the specified parse expression does I{not} match at the current
    position.  Also, C{NotAny} does I{not} skip over leading whitespace. C{NotAny}
    always returns a null token list.  May be constructed using the '~' operator.

    Example::
        
    cs0tt|��|�d|_d|_dt|j�|_dS)NFTzFound unwanted token, )rerr�r�r�r�rwr�r#rfryrzr��szNotAny.__init__TcCs&|j�||�rt|||j|��|gfSr�)rwr�r!r�r�ryryrzr��szNotAny.parseImplcCs4t|d�r|jS|jdkr.dt|j�d|_|jS)Nr�z~{r��rr�r�r�rwr�ryryrzr�s


zNotAny.__str__)Tr�ryryrfrzr�s

cs(eZdZd�fdd�	Zddd�Z�ZS)	�_MultipleMatchNcsFtt|��|�d|_|}t|t�r.t�|�}|dk	r<|nd|_dSr�)	rer%r�r�r}r�r&r��	not_ender)r�rw�stopOn�enderrfryrzr�s

z_MultipleMatch.__init__Tc	Cs�|jj}|j}|jdk	}|r$|jj}|r2|||�||||dd�\}}zV|j}	|r`|||�|	rp|||�}
n|}
|||
|�\}}|s�|��rR||7}qRWnttfk
r�YnX||fS�NFr!)	rwr�r�r&r�r�rr!r�)r�rvr�r��self_expr_parse�self_skip_ignorables�check_ender�
try_not_enderr��hasIgnoreExprsr��	tmptokensryryrzr�s*



z_MultipleMatch.parseImpl)N)T)r�r�r�r�r�r�ryryrfrzr%
sr%c@seZdZdZdd�ZdS)ra�
    Repetition of one or more of the given expression.
    
    Parameters:
     - expr - expression that must match one or more times
     - stopOn - (default=C{None}) - expression for a terminating sentinel
          (only required if the sentinel would ordinarily match the repetition 
          expression)          

    Example::
        data_word = Word(alphas)
        label = data_word + FollowedBy(':')
        attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join))

        text = "shape: SQUARE posn: upper left color: BLACK"
        OneOrMore(attr_expr).parseString(text).pprint()  # Fail! read 'color' as data instead of next label -> [['shape', 'SQUARE color']]

        # use stopOn attribute for OneOrMore to avoid reading label string as part of the data
        attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
        OneOrMore(attr_expr).parseString(text).pprint() # Better -> [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'BLACK']]
        
        # could also be written as
        (attr_expr * (1,)).parseString(text).pprint()
    cCs4t|d�r|jS|jdkr.dt|j�d|_|jS)Nr�r�z}...r$r�ryryrzr�Js


zOneOrMore.__str__N)r�r�r�r�r�ryryryrzr0scs8eZdZdZd
�fdd�	Zd�fdd�	Zdd	�Z�ZS)r4aw
    Optional repetition of zero or more of the given expression.
    
    Parameters:
     - expr - expression that must match zero or more times
     - stopOn - (default=C{None}) - expression for a terminating sentinel
          (only required if the sentinel would ordinarily match the repetition 
          expression)          

    Example: similar to L{OneOrMore}
    Ncstt|�j||d�d|_dS)N)r'T)rer4r�r�)r�rwr'rfryrzr�_szZeroOrMore.__init__Tc	s<ztt|��|||�WSttfk
r6|gfYSXdSr�)rer4r�r!r�r�rfryrzr�cszZeroOrMore.parseImplcCs4t|d�r|jS|jdkr.dt|j�d|_|jS)Nr�r:�]...r$r�ryryrzr�is


zZeroOrMore.__str__)N)Tr�ryryrfrzr4Ssc@s eZdZdd�ZeZdd�ZdS)�
_NullTokencCsdSrryr�ryryrzr	ssz_NullToken.__bool__cCsdSr�ryr�ryryrzr�vsz_NullToken.__str__N)r�r�r�r	rnr�ryryryrzr1rsr1cs6eZdZdZef�fdd�	Zd	dd�Zdd�Z�ZS)
raa
    Optional matching of the given expression.

    Parameters:
     - expr - expression that must match zero or more times
     - default (optional) - value to be returned if the optional expression is not found.

    Example::
        # US postal code can be a 5-digit zip, plus optional 4-digit qualifier
        zip = Combine(Word(nums, exact=5) + Optional('-' + Word(nums, exact=4)))
        zip.runTests('''
            # traditional ZIP code
            12345
            
            # ZIP+4 form
            12101-0001
            
            # invalid ZIP
            98765-
            ''')
    prints::
        # traditional ZIP code
        12345
        ['12345']

        # ZIP+4 form
        12101-0001
        ['12101-0001']

        # invalid ZIP
        98765-
             ^
        FAIL: Expected end of text (at char 5), (line:1, col:6)
    cs.tt|�j|dd�|jj|_||_d|_dS)NFr�T)rerr�rwr�r"r�)r�rwrrfryrzr��s
zOptional.__init__Tc	Cszz|jj|||dd�\}}WnTttfk
rp|jtk	rh|jjr^t|jg�}|j||jj<ql|jg}ng}YnX||fSr))rwr�r!r�r"�_optionalNotMatchedr�r$)r�rvr�r�r�ryryrzr��s


zOptional.parseImplcCs4t|d�r|jS|jdkr.dt|j�d|_|jS)Nr�r:r=r$r�ryryrzr��s


zOptional.__str__)T)	r�r�r�r�r2r�r�r�r�ryryrfrzrzs"
cs,eZdZdZd	�fdd�	Zd
dd�Z�ZS)r*a�	
    Token for skipping over all undefined text until the matched expression is found.

    Parameters:
     - expr - target expression marking the end of the data to be skipped
     - include - (default=C{False}) if True, the target expression is also parsed 
          (the skipped text and target expression are returned as a 2-element list).
     - ignore - (default=C{None}) used to define grammars (typically quoted strings and 
          comments) that might contain false matches to the target expression
     - failOn - (default=C{None}) define expressions that are not allowed to be 
          included in the skipped test; if found before the target expression is found, 
          the SkipTo is not a match

    Example::
        report = '''
            Outstanding Issues Report - 1 Jan 2000

               # | Severity | Description                               |  Days Open
            -----+----------+-------------------------------------------+-----------
             101 | Critical | Intermittent system crash                 |          6
              94 | Cosmetic | Spelling error on Login ('log|n')         |         14
              79 | Minor    | System slow when running too many reports |         47
            '''
        integer = Word(nums)
        SEP = Suppress('|')
        # use SkipTo to simply match everything up until the next SEP
        # - ignore quoted strings, so that a '|' character inside a quoted string does not match
        # - parse action will call token.strip() for each matched token, i.e., the description body
        string_data = SkipTo(SEP, ignore=quotedString)
        string_data.setParseAction(tokenMap(str.strip))
        ticket_expr = (integer("issue_num") + SEP 
                      + string_data("sev") + SEP 
                      + string_data("desc") + SEP 
                      + integer("days_open"))
        
        for tkt in ticket_expr.searchString(report):
            print tkt.dump()
    prints::
        ['101', 'Critical', 'Intermittent system crash', '6']
        - days_open: 6
        - desc: Intermittent system crash
        - issue_num: 101
        - sev: Critical
        ['94', 'Cosmetic', "Spelling error on Login ('log|n')", '14']
        - days_open: 14
        - desc: Spelling error on Login ('log|n')
        - issue_num: 94
        - sev: Cosmetic
        ['79', 'Minor', 'System slow when running too many reports', '47']
        - days_open: 47
        - desc: System slow when running too many reports
        - issue_num: 79
        - sev: Minor
    FNcs`tt|��|�||_d|_d|_||_d|_t|t	�rFt
�|�|_n||_dt
|j�|_dS)NTFzNo match found for )rer*r��
ignoreExprr�r��includeMatchr�r}r�r&r��failOnr�rwr�)r�r,�includerSr5rfryrzr��s
zSkipTo.__init__Tc	Cs&|}t|�}|j}|jj}|jdk	r,|jjnd}|jdk	rB|jjnd}	|}
|
|kr�|dk	rf|||
�rfq�|	dk	r�z|	||
�}
Wqntk
r�Yq�YqnXqnz|||
ddd�Wq�tt	fk
r�|
d7}
YqJXq�qJt|||j
|��|
}|||�}t|�}|j�r||||dd�\}}
||
7}||fS)NF)r�r�r�r!)
r�rwr�r5r�r3r�rr!r�r�r$r4)r�rvr�r�ryr�rw�
expr_parse�self_failOn_canParseNext�self_ignoreExpr_tryParse�tmploc�skiptext�
skipresultr�ryryrzr��s:
zSkipTo.parseImpl)FNN)Tr�ryryrfrzr*�s6
csbeZdZdZd�fdd�	Zdd�Zdd�Zd	d
�Zdd�Zgfd
d�Z	dd�Z
�fdd�Z�ZS)raK
    Forward declaration of an expression to be defined later -
    used for recursive grammars, such as algebraic infix notation.
    When the expression is known, it is assigned to the C{Forward} variable using the '<<' operator.

    Note: take care when assigning to C{Forward} not to overlook precedence of operators.
    Specifically, '|' has a lower precedence than '<<', so that::
        fwdExpr << a | b | c
    will actually be evaluated as::
        (fwdExpr << a) | b | c
    thereby leaving b and c out as parseable alternatives.  It is recommended that you
    explicitly group the values inserted into the C{Forward}::
        fwdExpr << (a | b | c)
    Converting to use the '<<=' operator instead will avoid this problem.

    See L{ParseResults.pprint} for an example of a recursive parser created using
    C{Forward}.
    Ncstt|�j|dd�dSr�)rerr�r8rfryrzr�@szForward.__init__cCsjt|t�rt�|�}||_d|_|jj|_|jj|_|�|jj	�|jj
|_
|jj|_|j�
|jj�|Sr�)r}r�r&r�rwr�r�r�rQr�r�r�r�r'r8ryryrz�
__lshift__Cs





zForward.__lshift__cCs||>Sr�ryr8ryryrz�__ilshift__PszForward.__ilshift__cCs
d|_|SrrOr�ryryrzrPSszForward.leaveWhitespacecCs$|js d|_|jdk	r |j��|Sr�)r�rwrr�ryryrzrWs


zForward.streamlinecCs>||kr0|dd�|g}|jdk	r0|j�|�|�g�dSr�r!r"ryryrzr\^s

zForward.validatecCsVt|d�r|jS|jjdSz|jdk	r4t|j�}nd}W5|j|_X|jjd|S)Nr�z: ...�Nonez: )rr�r�r��_revertClass�_ForwardNoRecurserwr�)r��	retStringryryrzr�es


zForward.__str__cs.|jdk	rtt|���St�}||K}|SdSr�)rwrerr�rHrfryrzr�vs

zForward.copy)N)
r�r�r�r�r�r=r>rPrr\r�r�r�ryryrfrzr-s
c@seZdZdd�ZdS)rAcCsdS)Nr�ryr�ryryrzr�sz_ForwardNoRecurse.__str__N)r�r�r�r�ryryryrzrA~srAcs"eZdZdZd�fdd�	Z�ZS)r/zQ
    Abstract subclass of C{ParseExpression}, for converting parsed results.
    Fcstt|��|�d|_dSr)rer/r�r�r rfryrzr��szTokenConverter.__init__)Fr�ryryrfrzr/�scs6eZdZdZd
�fdd�	Z�fdd�Zdd	�Z�ZS)ra�
    Converter to concatenate all matching tokens to a single string.
    By default, the matching patterns must also be contiguous in the input string;
    this can be disabled by specifying C{'adjacent=False'} in the constructor.

    Example::
        real = Word(nums) + '.' + Word(nums)
        print(real.parseString('3.1416')) # -> ['3', '.', '1416']
        # will also erroneously match the following
        print(real.parseString('3. 1416')) # -> ['3', '.', '1416']

        real = Combine(Word(nums) + '.' + Word(nums))
        print(real.parseString('3.1416')) # -> ['3.1416']
        # no match when there are internal spaces
        print(real.parseString('3. 1416')) # -> Exception: Expected W:(0123...)
    r�Tcs8tt|��|�|r|��||_d|_||_d|_dSr�)rerr�rP�adjacentr��
joinStringr�)r�rwrDrCrfryrzr��szCombine.__init__cs(|jrt�||�ntt|��|�|Sr�)rCr&rSrerr8rfryrzrS�szCombine.ignorecCsP|��}|dd�=|td�|�|j��g|jd�7}|jrH|��rH|gS|SdS)Nr�)r�)r�r$r�r>rDr�r�r)r�rvr�r��retToksryryrzr��s
"zCombine.postParse)r�T)r�r�r�r�r�rSr�r�ryryrfrzr�s
cs(eZdZdZ�fdd�Zdd�Z�ZS)ra�
    Converter to return the matched tokens as a list - useful for returning tokens of C{L{ZeroOrMore}} and C{L{OneOrMore}} expressions.

    Example::
        ident = Word(alphas)
        num = Word(nums)
        term = ident | num
        func = ident + Optional(delimitedList(term))
        print(func.parseString("fn a,b,100"))  # -> ['fn', 'a', 'b', '100']

        func = ident + Group(Optional(delimitedList(term)))
        print(func.parseString("fn a,b,100"))  # -> ['fn', ['a', 'b', '100']]
    cstt|��|�d|_dSr�)rerr�r�r#rfryrzr��szGroup.__init__cCs|gSr�ryr�ryryrzr��szGroup.postParse�r�r�r�r�r�r�r�ryryrfrzr�s
cs(eZdZdZ�fdd�Zdd�Z�ZS)r
aW
    Converter to return a repetitive expression as a list, but also as a dictionary.
    Each element can also be referenced using the first token in the expression as its key.
    Useful for tabular report scraping when the first column can be used as a item key.

    Example::
        data_word = Word(alphas)
        label = data_word + FollowedBy(':')
        attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join))

        text = "shape: SQUARE posn: upper left color: light blue texture: burlap"
        attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
        
        # print attributes as plain groups
        print(OneOrMore(attr_expr).parseString(text).dump())
        
        # instead of OneOrMore(expr), parse using Dict(OneOrMore(Group(expr))) - Dict will auto-assign names
        result = Dict(OneOrMore(Group(attr_expr))).parseString(text)
        print(result.dump())
        
        # access named fields as dict entries, or output as dict
        print(result['shape'])        
        print(result.asDict())
    prints::
        ['shape', 'SQUARE', 'posn', 'upper left', 'color', 'light blue', 'texture', 'burlap']

        [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']]
        - color: light blue
        - posn: upper left
        - shape: SQUARE
        - texture: burlap
        SQUARE
        {'color': 'light blue', 'posn': 'upper left', 'texture': 'burlap', 'shape': 'SQUARE'}
    See more examples at L{ParseResults} of accessing fields by results name.
    cstt|��|�d|_dSr�)rer
r�r�r#rfryrzr��sz
Dict.__init__cCs�t|�D]�\}}t|�dkrq|d}t|t�r@t|d���}t|�dkr\td|�||<qt|�dkr�t|dt�s�t|d|�||<q|��}|d=t|�dks�t|t�r�|�	�r�t||�||<qt|d|�||<q|j
r�|gS|SdS)Nrr�r�rs)r�r�r}rvr�r�r�r$r�rr�)r�rvr�r�r��tok�ikey�	dictvalueryryrzr��s$
zDict.postParserFryryrfrzr
�s#c@s eZdZdZdd�Zdd�ZdS)r-aV
    Converter for ignoring the results of a parsed expression.

    Example::
        source = "a, b, c,d"
        wd = Word(alphas)
        wd_list1 = wd + ZeroOrMore(',' + wd)
        print(wd_list1.parseString(source))

        # often, delimiters that are useful during parsing are just in the
        # way afterward - use Suppress to keep them out of the parsed output
        wd_list2 = wd + ZeroOrMore(Suppress(',') + wd)
        print(wd_list2.parseString(source))
    prints::
        ['a', ',', 'b', ',', 'c', ',', 'd']
        ['a', 'b', 'c', 'd']
    (See also L{delimitedList}.)
    cCsgSr�ryr�ryryrzr�szSuppress.postParsecCs|Sr�ryr�ryryrzrN"szSuppress.suppressN)r�r�r�r�r�rNryryryrzr-sc@s(eZdZdZdd�Zdd�Zdd�ZdS)	rzI
    Wrapper for parse actions, to ensure they are only called once.
    cCst|�|_d|_dSr)r��callable�called)r��
methodCallryryrzr�*s
zOnlyOnce.__init__cCs.|js|�|||�}d|_|St||d��dS)NTr�)rKrJr!)r�r�r�rxr�ryryrzrM-s
zOnlyOnce.__call__cCs
d|_dSr)rKr�ryryrz�reset3szOnlyOnce.resetN)r�r�r�r�r�rMrMryryryrzr&scs:t����fdd�}z�j|_Wntk
r4YnX|S)at
    Decorator for debugging parse actions. 
    
    When the parse action is called, this decorator will print C{">> entering I{method-name}(line:I{current_source_line}, I{parse_location}, I{matched_tokens})".}
    When the parse action completes, the decorator will print C{"<<"} followed by the returned value, or any exception that the parse action raised.

    Example::
        wd = Word(alphas)

        @traceParseAction
        def remove_duplicate_chars(tokens):
            return ''.join(sorted(set(''.join(tokens))))

        wds = OneOrMore(wd).setParseAction(remove_duplicate_chars)
        print(wds.parseString("slkdjs sld sldd sdlf sdljf"))
    prints::
        >>entering remove_duplicate_chars(line: 'slkdjs sld sldd sdlf sdljf', 0, (['slkdjs', 'sld', 'sldd', 'sdlf', 'sdljf'], {}))
        <<leaving remove_duplicate_chars (ret: 'dfjkls')
        ['dfjkls']
    c
s��j}|dd�\}}}t|�dkr8|djjd|}tj�d|t||�||f�z�|�}Wn8tk
r�}ztj�d||f��W5d}~XYnXtj�d||f�|S)Nr�rqr�.z">>entering %s(line: '%s', %d, %r)
z<<leaving %s (exception: %s)
z<<leaving %s (ret: %r)
)r�r�r�r��stderr�writerIr�)�paArgs�thisFuncr�r�rxr�r}�rbryrz�zLsztraceParseAction.<locals>.z)r�r�r�)rbrTryrSrzrd6s
�,FcCs`t|�dt|�dt|�d}|rBt|t||���|�S|tt|�|��|�SdS)a�
    Helper to define a delimited list of expressions - the delimiter defaults to ','.
    By default, the list elements and delimiters can have intervening whitespace, and
    comments, but this can be overridden by passing C{combine=True} in the constructor.
    If C{combine} is set to C{True}, the matching tokens are returned as a single token
    string, with the delimiters included; otherwise, the matching tokens are returned
    as a list of tokens, with the delimiters suppressed.

    Example::
        delimitedList(Word(alphas)).parseString("aa,bb,cc") # -> ['aa', 'bb', 'cc']
        delimitedList(Word(hexnums), delim=':', combine=True).parseString("AA:BB:CC:DD:EE") # -> ['AA:BB:CC:DD:EE']
    z [rrr0N)r�rr4r�r-)rw�delim�combine�dlNameryryrzrBbs
$csjt����fdd�}|dkr0tt��dd��}n|��}|�d�|j|dd�|��d	t��d
�S)a:
    Helper to define a counted list of expressions.
    This helper defines a pattern of the form::
        integer expr expr expr...
    where the leading integer tells how many expr expressions follow.
    The matched tokens returns the array of expr tokens as a list - the leading count token is suppressed.
    
    If C{intExpr} is specified, it should be a pyparsing expression that produces an integer value.

    Example::
        countedArray(Word(alphas)).parseString('2 ab cd ef')  # -> ['ab', 'cd']

        # in this parser, the leading integer value is given in binary,
        # '10' indicating that 2 values are in the array
        binaryConstant = Word('01').setParseAction(lambda t: int(t[0], 2))
        countedArray(Word(alphas), intExpr=binaryConstant).parseString('10 ab cd ef')  # -> ['ab', 'cd']
    cs.|d}�|r tt�g|��p&tt�>gSr�)rrrE)r�r�rxr=��	arrayExprrwryrz�countFieldParseAction�s"z+countedArray.<locals>.countFieldParseActionNcSst|d�Sr�)rvrwryryrzr{�r|zcountedArray.<locals>.<lambda>�arrayLenT�r�z(len) r�)rr1rTr�r�r�r�r�)rw�intExprr[ryrYrzr>us
cCs6g}|D](}t|t�r&|�t|��q|�|�q|Sr�)r}r�r'r+r%)�Lr�r�ryryrzr+�s
r+cs6t���fdd�}|j|dd���dt|���S)a*
    Helper to define an expression that is indirectly defined from
    the tokens matched in a previous expression, that is, it looks
    for a 'repeat' of a previous expression.  For example::
        first = Word(nums)
        second = matchPreviousLiteral(first)
        matchExpr = first + ":" + second
    will match C{"1:1"}, but not C{"1:2"}.  Because this matches a
    previous literal, will also match the leading C{"1:1"} in C{"1:10"}.
    If this is not desired, use C{matchPreviousExpr}.
    Do I{not} use with packrat parsing enabled.
    csP|rBt|�dkr�|d>qLt|���}�tdd�|D��>n
�t�>dS)Nr�rcss|]}t|�VqdSr�)r�r��ttryryrzr��szDmatchPreviousLiteral.<locals>.copyTokenToRepeater.<locals>.<genexpr>)r�r+r�rr)r�r�rx�tflat��repryrz�copyTokenToRepeater�sz1matchPreviousLiteral.<locals>.copyTokenToRepeaterTr]�(prev) )rr�r�r�)rwreryrcrzrQ�s


csFt��|��}�|K��fdd�}|j|dd���dt|���S)aS
    Helper to define an expression that is indirectly defined from
    the tokens matched in a previous expression, that is, it looks
    for a 'repeat' of a previous expression.  For example::
        first = Word(nums)
        second = matchPreviousExpr(first)
        matchExpr = first + ":" + second
    will match C{"1:1"}, but not C{"1:2"}.  Because this matches by
    expressions, will I{not} match the leading C{"1:1"} in C{"1:10"};
    the expressions are evaluated first, and then compared, so
    C{"1"} is compared with C{"10"}.
    Do I{not} use with packrat parsing enabled.
    cs*t|�����fdd�}�j|dd�dS)Ncs$t|���}|�kr tddd��dS)Nr�r)r+r�r!)r�r�rx�theseTokens��matchTokensryrz�mustMatchTheseTokens�szLmatchPreviousExpr.<locals>.copyTokenToRepeater.<locals>.mustMatchTheseTokensTr])r+r�r�)r�r�rxrjrcrhrzre�sz.matchPreviousExpr.<locals>.copyTokenToRepeaterTr]rf)rr�r�r�r�)rw�e2reryrcrzrP�scCs:dD]}|�|t|�}q|�dd�}|�dd�}t|�S)Nz\^-]rIrqr�r�)r��_bslashr�)r�r�ryryrzr��s
r�Tc
s�|rdd�}dd�}t�ndd�}dd�}t�g}t|t�rF|��}n$t|t�rZt|�}ntjdt	dd�|stt
�Sd	}|t|�d
k�r||}t||d
d��D]R\}}	||	|�r�|||d
=qxq�|||	�r�|||d
=|�
||	�|	}qxq�|d
7}qx|�s�|�r�zlt|�td�|��k�rTtd
d�dd�|D����d�|��WStd�dd�|D����d�|��WSWn&tk
�r�tjdt	dd�YnXt�fdd�|D���d�|��S)a�
    Helper to quickly define a set of alternative Literals, and makes sure to do
    longest-first testing when there is a conflict, regardless of the input order,
    but returns a C{L{MatchFirst}} for best performance.

    Parameters:
     - strs - a string of space-delimited literals, or a collection of string literals
     - caseless - (default=C{False}) - treat all literals as caseless
     - useRegex - (default=C{True}) - as an optimization, will generate a Regex
          object; otherwise, will generate a C{MatchFirst} object (if C{caseless=True}, or
          if creating a C{Regex} raises an exception)

    Example::
        comp_oper = oneOf("< = > <= >= !=")
        var = Word(alphas)
        number = Word(nums)
        term = var | number
        comparison_expr = term + comp_oper + term
        print(comparison_expr.searchString("B = 12  AA=23 B<=AA AA>12"))
    prints::
        [['B', '=', '12'], ['AA', '=', '23'], ['B', '<=', 'AA'], ['AA', '>', '12']]
    cSs|��|��kSr�)r��r.�bryryrzr{�r|zoneOf.<locals>.<lambda>cSs|���|���Sr�)r�r�rmryryrzr{�r|cSs||kSr�ryrmryryrzr{�r|cSs
|�|�Sr�)r�rmryryrzr{�r|z6Invalid argument to oneOf, expected string or iterablersr3rr�Nr�z[%s]css|]}t|�VqdSr�)r��r��symryryrzr�szoneOf.<locals>.<genexpr>r	�|css|]}t�|�VqdSr�)r�r�roryryrzr�sz7Exception creating Regex for oneOf, building MatchFirstc3s|]}�|�VqdSr�ryro��parseElementClassryrzr�$s)r
rr}r�r�rr�r5r6r7rr�r�r#r�r)r�r�r)
�strsr��useRegex�isequal�masks�symbolsr��currr,ryrrrzrU�sT



�


**�cCsttt||���S)a�
    Helper to easily and clearly define a dictionary by specifying the respective patterns
    for the key and value.  Takes care of defining the C{L{Dict}}, C{L{ZeroOrMore}}, and C{L{Group}} tokens
    in the proper order.  The key pattern can include delimiting markers or punctuation,
    as long as they are suppressed, thereby leaving the significant key text.  The value
    pattern can include named results, so that the C{Dict} results can include named token
    fields.

    Example::
        text = "shape: SQUARE posn: upper left color: light blue texture: burlap"
        attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join))
        print(OneOrMore(attr_expr).parseString(text).dump())
        
        attr_label = label
        attr_value = Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)

        # similar to Dict, but simpler call format
        result = dictOf(attr_label, attr_value).parseString(text)
        print(result.dump())
        print(result['shape'])
        print(result.shape)  # object attribute access works too
        print(result.asDict())
    prints::
        [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']]
        - color: light blue
        - posn: upper left
        - shape: SQUARE
        - texture: burlap
        SQUARE
        SQUARE
        {'color': 'light blue', 'shape': 'SQUARE', 'posn': 'upper left', 'texture': 'burlap'}
    )r
r4r)r!rryryrzrC&s!cCs^t��dd��}|��}d|_|d�||d�}|r@dd�}ndd�}|�|�|j|_|S)	a�
    Helper to return the original, untokenized text for a given expression.  Useful to
    restore the parsed fields of an HTML start tag into the raw tag text itself, or to
    revert separate tokens with intervening whitespace back to the original matching
    input text. By default, returns astring containing the original parsed text.  
       
    If the optional C{asString} argument is passed as C{False}, then the return value is a 
    C{L{ParseResults}} containing any results names that were originally matched, and a 
    single token containing the original matched text from the input string.  So if 
    the expression passed to C{L{originalTextFor}} contains expressions with defined
    results names, you must set C{asString} to C{False} if you want to preserve those
    results name values.

    Example::
        src = "this is test <b> bold <i>text</i> </b> normal text "
        for tag in ("b","i"):
            opener,closer = makeHTMLTags(tag)
            patt = originalTextFor(opener + SkipTo(closer) + closer)
            print(patt.searchString(src)[0])
    prints::
        ['<b> bold <i>text</i> </b>']
        ['<i>text</i>']
    cSs|Sr�ry)r�r�rxryryrzr{ar|z!originalTextFor.<locals>.<lambda>F�_original_start�
_original_endcSs||j|j�Sr�)rzr{rryryrzr{fr|cSs&||�d�|�d��g|dd�<dS)Nrzr{)r rryryrz�extractTexthsz$originalTextFor.<locals>.extractText)rr�r�r�r�)rw�asString�	locMarker�endlocMarker�	matchExprr|ryryrzriIs

cCst|��dd��S)zp
    Helper to undo pyparsing's default grouping of And expressions, even
    if all but one are non-empty.
    cSs|dSr�ryrwryryrzr{sr|zungroup.<locals>.<lambda>)r/r�)rwryryrzrjnscCs4t��dd��}t|d�|d�|����d��S)a�
    Helper to decorate a returned token with its starting and ending locations in the input string.
    This helper adds the following results names:
     - locn_start = location where matched expression begins
     - locn_end = location where matched expression ends
     - value = the actual parsed results

    Be careful if the input text contains C{<TAB>} characters, you may want to call
    C{L{ParserElement.parseWithTabs}}

    Example::
        wd = Word(alphas)
        for match in locatedExpr(wd).searchString("ljsdf123lksdjjf123lkkjj1222"):
            print(match)
    prints::
        [[0, 'ljsdf', 5]]
        [[8, 'lksdjjf', 15]]
        [[18, 'lkkjj', 23]]
    cSs|Sr�ryrryryrzr{�r|zlocatedExpr.<locals>.<lambda>�
locn_startr�locn_end)rr�rr�rP)rw�locatorryryrzrlusz\[]-*.$+^?()~ �r�cCs|ddSr�ryrryryrzr{�r|r{z\\0?[xX][0-9a-fA-F]+cCstt|d�d�d��S)Nrz\0x�)�unichrrv�lstriprryryrzr{�r|z	\\0[0-7]+cCstt|ddd�d��S)Nrr��)r�rvrryryrzr{�r|z\]r�r:rs�negate�bodyr=csFdd��z"d��fdd�t�|�jD��WStk
r@YdSXdS)a�
    Helper to easily define string ranges for use in Word construction.  Borrows
    syntax from regexp '[]' string range definitions::
        srange("[0-9]")   -> "0123456789"
        srange("[a-z]")   -> "abcdefghijklmnopqrstuvwxyz"
        srange("[a-z$_]") -> "abcdefghijklmnopqrstuvwxyz$_"
    The input string must be enclosed in []'s, and the returned string is the expanded
    character set joined into a single string.
    The values enclosed in the []'s may be:
     - a single character
     - an escaped character with a leading backslash (such as C{\-} or C{\]})
     - an escaped hex character with a leading C{'\x'} (C{\x21}, which is a C{'!'} character) 
         (C{\0x##} is also supported for backwards compatibility) 
     - an escaped octal character with a leading C{'\0'} (C{\041}, which is a C{'!'} character)
     - a range of any of the above, separated by a dash (C{'a-z'}, etc.)
     - any combination of the above (C{'aeiouy'}, C{'a-zA-Z0-9_$'}, etc.)
    cSs<t|t�s|Sd�dd�tt|d�t|d�d�D��S)Nr�css|]}t|�VqdSr�)r�r�ryryrzr��sz+srange.<locals>.<lambda>.<locals>.<genexpr>rr�)r}r$r�r��ord)�pryryrzr{�r|zsrange.<locals>.<lambda>r�c3s|]}�|�VqdSr�ry)r��part��	_expandedryrzr��szsrange.<locals>.<genexpr>N)r��_reBracketExprr r�r�r�ryr�rzra�s
"cs�fdd�}|S)zt
    Helper method for defining parse actions that require matching at a specific
    column in the input text.
    cs"t||��krt||d���dS)Nzmatched token not at column %dr�)rp�locnr{r<ryrz�	verifyCol�sz!matchOnlyAtCol.<locals>.verifyColry)r=r�ryr<rzrO�scs�fdd�S)a�
    Helper method for common parse actions that simply return a literal value.  Especially
    useful when used with C{L{transformString<ParserElement.transformString>}()}.

    Example::
        num = Word(nums).setParseAction(lambda toks: int(toks[0]))
        na = oneOf("N/A NA").setParseAction(replaceWith(math.nan))
        term = na | num
        
        OneOrMore(term).parseString("324 234 N/A 234") # -> [324, 234, nan, 234]
    cs�gSr�ryr��replStrryrzr{�r|zreplaceWith.<locals>.<lambda>ryr�ryr�rzr^�scCs|ddd�S)a
    Helper parse action for removing quotation marks from parsed quoted strings.

    Example::
        # by default, quotation marks are included in parsed results
        quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["'Now is the Winter of our Discontent'"]

        # use removeQuotes to strip quotation marks from parsed results
        quotedString.setParseAction(removeQuotes)
        quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["Now is the Winter of our Discontent"]
    rr�rtryrryryrzr\�scsN��fdd�}zt�dt�d�j�}Wntk
rBt��}YnX||_|S)aG
    Helper to define a parse action by mapping a function to all elements of a ParseResults list.If any additional 
    args are passed, they are forwarded to the given function as additional arguments after
    the token, as in C{hex_integer = Word(hexnums).setParseAction(tokenMap(int, 16))}, which will convert the
    parsed data to an integer using base 16.

    Example (compare the last to example in L{ParserElement.transformString}::
        hex_ints = OneOrMore(Word(hexnums)).setParseAction(tokenMap(int, 16))
        hex_ints.runTests('''
            00 11 22 aa FF 0a 0d 1a
            ''')
        
        upperword = Word(alphas).setParseAction(tokenMap(str.upper))
        OneOrMore(upperword).runTests('''
            my kingdom for a horse
            ''')

        wd = Word(alphas).setParseAction(tokenMap(str.title))
        OneOrMore(wd).setParseAction(' '.join).runTests('''
            now is the winter of our discontent made glorious summer by this sun of york
            ''')
    prints::
        00 11 22 aa FF 0a 0d 1a
        [0, 17, 34, 170, 255, 10, 13, 26]

        my kingdom for a horse
        ['MY', 'KINGDOM', 'FOR', 'A', 'HORSE']

        now is the winter of our discontent made glorious summer by this sun of york
        ['Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York']
    cs��fdd�|D�S)Ncsg|]}�|f����qSryry)r��tokn�r�r�ryrzr��sz(tokenMap.<locals>.pa.<locals>.<listcomp>ryrr�ryrzr��sztokenMap.<locals>.par�r�)r�r�r�r)r�r�r�r�ryr�rzro�s 
�cCst|���Sr��r�r�rwryryrzr{r|cCst|���Sr��r��lowerrwryryrzr{r|c	Cs�t|t�r|}t||d�}n|j}tttd�}|r�t���	t
�}td�|d�tt
t|td�|���tddgd��d	��	d
d��td�}n�d
�dd�tD��}t���	t
�t|�B}td�|d�tt
t|�	t�ttd�|����tddgd��d	��	dd��td�}ttd�|d�}|�dd
�|�dd��������d|�}|�dd
�|�dd��������d|�}||_||_||fS)zRInternal helper to construct opening and closing tag expressions, given a tag namer�z_-:rM�tag�=�/F�rrEcSs|ddkS�Nrr�ryrryryrzr{r|z_makeTags.<locals>.<lambda>rNr�css|]}|dkr|VqdS)rNNryr�ryryrzr�sz_makeTags.<locals>.<genexpr>cSs|ddkSr�ryrryryrzr{r|rOr��:rrz<%s>r�z</%s>)r}r�rr�r1r6r5r@r�r�r\r-r
r4rrr�r�rXr[rDr�_Lr��titler�r�r�)�tagStr�xml�resname�tagAttrName�tagAttrValue�openTag�printablesLessRAbrack�closeTagryryrz�	_makeTagss>
�������..r�cCs
t|d�S)a 
    Helper to construct opening and closing tag expressions for HTML, given a tag name. Matches
    tags in either upper or lower case, attributes with namespaces and with quoted or unquoted values.

    Example::
        text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>'
        # makeHTMLTags returns pyparsing expressions for the opening and closing tags as a 2-tuple
        a,a_end = makeHTMLTags("A")
        link_expr = a + SkipTo(a_end)("link_text") + a_end
        
        for link in link_expr.searchString(text):
            # attributes in the <A> tag (like "href" shown here) are also accessible as named results
            print(link.link_text, '->', link.href)
    prints::
        pyparsing -> http://pyparsing.wikispaces.com
    F�r��r�ryryrzrM(scCs
t|d�S)z�
    Helper to construct opening and closing tag expressions for XML, given a tag name. Matches
    tags only in the given upper/lower case.

    Example: similar to L{makeHTMLTags}
    Tr�r�ryryrzrN;scs8|r|dd��n|���dd��D���fdd�}|S)a<
    Helper to create a validating parse action to be used with start tags created
    with C{L{makeXMLTags}} or C{L{makeHTMLTags}}. Use C{withAttribute} to qualify a starting tag
    with a required attribute value, to avoid false matches on common tags such as
    C{<TD>} or C{<DIV>}.

    Call C{withAttribute} with a series of attribute names and values. Specify the list
    of filter attributes names and values as:
     - keyword arguments, as in C{(align="right")}, or
     - as an explicit dict with C{**} operator, when an attribute name is also a Python
          reserved word, as in C{**{"class":"Customer", "align":"right"}}
     - a list of name-value tuples, as in ( ("ns1:class", "Customer"), ("ns2:align","right") )
    For attribute names with a namespace prefix, you must use the second form.  Attribute
    names are matched insensitive to upper/lower case.
       
    If just testing for C{class} (with or without a namespace), use C{L{withClass}}.

    To verify that the attribute exists, but without specifying a value, pass
    C{withAttribute.ANY_VALUE} as the value.

    Example::
        html = '''
            <div>
            Some text
            <div type="grid">1 4 0 1 0</div>
            <div type="graph">1,3 2,3 1,1</div>
            <div>this has no type</div>
            </div>
                
        '''
        div,div_end = makeHTMLTags("div")

        # only match div tag having a type attribute with value "grid"
        div_grid = div().setParseAction(withAttribute(type="grid"))
        grid_expr = div_grid + SkipTo(div | div_end)("body")
        for grid_header in grid_expr.searchString(html):
            print(grid_header.body)
        
        # construct a match with any div tag having a type attribute, regardless of the value
        div_any_type = div().setParseAction(withAttribute(type=withAttribute.ANY_VALUE))
        div_expr = div_any_type + SkipTo(div | div_end)("body")
        for div_header in div_expr.searchString(html):
            print(div_header.body)
    prints::
        1 4 0 1 0

        1 4 0 1 0
        1,3 2,3 1,1
    NcSsg|]\}}||f�qSryryrEryryrzr�zsz!withAttribute.<locals>.<listcomp>csZ�D]P\}}||kr$t||d|��|tjkr|||krt||d||||f��qdS)Nzno matching attribute z+attribute '%s' has value '%s', must be '%s')r!rg�	ANY_VALUE)r�r�r��attrName�	attrValue��attrsryrzr�{s�zwithAttribute.<locals>.pa)r�)r��attrDictr�ryr�rzrgDs2cCs|rd|nd}tf||i�S)a�
    Simplified version of C{L{withAttribute}} when matching on a div class - made
    difficult because C{class} is a reserved word in Python.

    Example::
        html = '''
            <div>
            Some text
            <div class="grid">1 4 0 1 0</div>
            <div class="graph">1,3 2,3 1,1</div>
            <div>this &lt;div&gt; has no class</div>
            </div>
                
        '''
        div,div_end = makeHTMLTags("div")
        div_grid = div().setParseAction(withClass("grid"))
        
        grid_expr = div_grid + SkipTo(div | div_end)("body")
        for grid_header in grid_expr.searchString(html):
            print(grid_header.body)
        
        div_any_type = div().setParseAction(withClass(withAttribute.ANY_VALUE))
        div_expr = div_any_type + SkipTo(div | div_end)("body")
        for div_header in div_expr.searchString(html):
            print(div_header.body)
    prints::
        1 4 0 1 0

        1 4 0 1 0
        1,3 2,3 1,1
    z%s:class�class)rg)�	classname�	namespace�	classattrryryrzrm�s �(r�cCs�t�}||||B}t|�D�]l\}}|ddd�\}}	}
}|	dkrPd|nd|}|	dkr�|dkstt|�dkr|td��|\}
}t��|�}|
tjk�r^|	d	kr�t||�t|t	|��}n�|	dk�r|dk	r�t|||�t|t	||��}nt||�t|t	|��}nD|	dk�rTt||
|||�t||
|||�}ntd
��n�|
tj
k�rB|	d	k�r�t|t��s�t|�}t|j
|�t||�}n�|	dk�r�|dk	�r�t|||�t|t	||��}nt||�t|t	|��}nD|	dk�r8t||
|||�t||
|||�}ntd
��ntd��|�rvt|ttf��rl|j|�n
|�|�||�|�|BK}|}q||K}|S)aD

    Helper method for constructing grammars of expressions made up of
    operators working in a precedence hierarchy.  Operators may be unary or
    binary, left- or right-associative.  Parse actions can also be attached
    to operator expressions. The generated parser will also recognize the use 
    of parentheses to override operator precedences (see example below).
    
    Note: if you define a deep operator list, you may see performance issues
    when using infixNotation. See L{ParserElement.enablePackrat} for a
    mechanism to potentially improve your parser performance.

    Parameters:
     - baseExpr - expression representing the most basic element for the nested
     - opList - list of tuples, one for each operator precedence level in the
      expression grammar; each tuple is of the form
      (opExpr, numTerms, rightLeftAssoc, parseAction), where:
       - opExpr is the pyparsing expression for the operator;
          may also be a string, which will be converted to a Literal;
          if numTerms is 3, opExpr is a tuple of two expressions, for the
          two operators separating the 3 terms
       - numTerms is the number of terms for this operator (must
          be 1, 2, or 3)
       - rightLeftAssoc is the indicator whether the operator is
          right or left associative, using the pyparsing-defined
          constants C{opAssoc.RIGHT} and C{opAssoc.LEFT}.
       - parseAction is the parse action to be associated with
          expressions matching this operator expression (the
          parse action tuple member may be omitted); if the parse action
          is passed a tuple or list of functions, this is equivalent to
          calling C{setParseAction(*fn)} (L{ParserElement.setParseAction})
     - lpar - expression for matching left-parentheses (default=C{Suppress('(')})
     - rpar - expression for matching right-parentheses (default=C{Suppress(')')})

    Example::
        # simple example of four-function arithmetic with ints and variable names
        integer = pyparsing_common.signed_integer
        varname = pyparsing_common.identifier 
        
        arith_expr = infixNotation(integer | varname,
            [
            ('-', 1, opAssoc.RIGHT),
            (oneOf('* /'), 2, opAssoc.LEFT),
            (oneOf('+ -'), 2, opAssoc.LEFT),
            ])
        
        arith_expr.runTests('''
            5+3*6
            (5+3)*6
            -2--11
            ''', fullDump=False)
    prints::
        5+3*6
        [[5, '+', [3, '*', 6]]]

        (5+3)*6
        [[[5, '+', 3], '*', 6]]

        -2--11
        [[['-', 2], '-', ['-', 11]]]
    r�Nr�rqz%s termz	%s%s termrsz@if numterms=3, opExpr must be a tuple or list of two expressionsr�z6operator must be unary (1), binary (2), or ternary (3)z2operator must indicate right or left associativity)rr�r�rAr�rV�LEFTrrr�RIGHTr}rrwr@r�r�)�baseExpr�opList�lpar�rparr��lastExprr��operDef�opExpr�arity�rightLeftAssocr��termName�opExpr1�opExpr2�thisExprr�ryryrzrk�sZ=
&
�



&
�

z4"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*�"z string enclosed in double quotesz4'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*�'z string enclosed in single quotesz*quotedString using single or double quotes�uzunicode string literalcCs�||krtd��|dk�r*t|t��r"t|t��r"t|�dkr�t|�dkr�|dk	r�tt|t||tjdd����	dd��}n$t
��t||tj��	dd��}nx|dk	r�tt|t|�t|�ttjdd����	dd��}n4ttt|�t|�ttjdd����	d	d��}ntd
��t
�}|dk	�rd|tt|�t||B|B�t|��K}n$|tt|�t||B�t|��K}|�d||f�|S)a~	
    Helper method for defining nested lists enclosed in opening and closing
    delimiters ("(" and ")" are the default).

    Parameters:
     - opener - opening character for a nested list (default=C{"("}); can also be a pyparsing expression
     - closer - closing character for a nested list (default=C{")"}); can also be a pyparsing expression
     - content - expression for items within the nested lists (default=C{None})
     - ignoreExpr - expression for ignoring opening and closing delimiters (default=C{quotedString})

    If an expression is not provided for the content argument, the nested
    expression will capture all whitespace-delimited content between delimiters
    as a list of separate values.

    Use the C{ignoreExpr} argument to define expressions that may contain
    opening or closing characters that should not be treated as opening
    or closing characters for nesting, such as quotedString or a comment
    expression.  Specify multiple expressions using an C{L{Or}} or C{L{MatchFirst}}.
    The default is L{quotedString}, but if no expressions are to be ignored,
    then pass C{None} for this argument.

    Example::
        data_type = oneOf("void int short long char float double")
        decl_data_type = Combine(data_type + Optional(Word('*')))
        ident = Word(alphas+'_', alphanums+'_')
        number = pyparsing_common.number
        arg = Group(decl_data_type + ident)
        LPAR,RPAR = map(Suppress, "()")

        code_body = nestedExpr('{', '}', ignoreExpr=(quotedString | cStyleComment))

        c_function = (decl_data_type("type") 
                      + ident("name")
                      + LPAR + Optional(delimitedList(arg), [])("args") + RPAR 
                      + code_body("body"))
        c_function.ignore(cStyleComment)
        
        source_code = '''
            int is_odd(int x) { 
                return (x%2); 
            }
                
            int dec_to_hex(char hchar) { 
                if (hchar >= '0' && hchar <= '9') { 
                    return (ord(hchar)-ord('0')); 
                } else { 
                    return (10+ord(hchar)-ord('A'));
                } 
            }
        '''
        for func in c_function.searchString(source_code):
            print("%(name)s (%(type)s) args: %(args)s" % func)

    prints::
        is_odd (int) args: [['int', 'x']]
        dec_to_hex (int) args: [['char', 'hchar']]
    z.opening and closing strings cannot be the sameNr�r�cSs|d��Sr��r�rwryryrzr{gr|znestedExpr.<locals>.<lambda>cSs|d��Sr�r�rwryryrzr{jr|cSs|d��Sr�r�rwryryrzr{pr|cSs|d��Sr�r�rwryryrzr{tr|zOopening and closing arguments must be strings if no content expression is givenznested %s%s expression)rAr}r�r�rrrr&r�r�rEr�rrrr-r4r�)�opener�closer�contentr3r�ryryrzrR%sH:
���������
*$cs��fdd�}�fdd�}�fdd�}tt��d����}t�t��|��d�}t��|��d	�}t��|��d
�}	|r�tt|�|t|t|�t|��|	�}
n$tt|�t|t|�t|���}
|�	t
t��|
�d�S)a
	
    Helper method for defining space-delimited indentation blocks, such as
    those used to define block statements in Python source code.

    Parameters:
     - blockStatementExpr - expression defining syntax of statement that
            is repeated within the indented block
     - indentStack - list created by caller to manage indentation stack
            (multiple statementWithIndentedBlock expressions within a single grammar
            should share a common indentStack)
     - indent - boolean indicating whether block must be indented beyond the
            the current level; set to False for block of left-most statements
            (default=C{True})

    A valid block must contain at least one C{blockStatement}.

    Example::
        data = '''
        def A(z):
          A1
          B = 100
          G = A2
          A2
          A3
        B
        def BB(a,b,c):
          BB1
          def BBA():
            bba1
            bba2
            bba3
        C
        D
        def spam(x,y):
             def eggs(z):
                 pass
        '''


        indentStack = [1]
        stmt = Forward()

        identifier = Word(alphas, alphanums)
        funcDecl = ("def" + identifier + Group( "(" + Optional( delimitedList(identifier) ) + ")" ) + ":")
        func_body = indentedBlock(stmt, indentStack)
        funcDef = Group( funcDecl + func_body )

        rvalue = Forward()
        funcCall = Group(identifier + "(" + Optional(delimitedList(rvalue)) + ")")
        rvalue << (funcCall | identifier | Word(nums))
        assignment = Group(identifier + "=" + rvalue)
        stmt << ( funcDef | assignment | identifier )

        module_body = OneOrMore(stmt)

        parseTree = module_body.parseString(data)
        parseTree.pprint()
    prints::
        [['def',
          'A',
          ['(', 'z', ')'],
          ':',
          [['A1'], [['B', '=', '100']], [['G', '=', 'A2']], ['A2'], ['A3']]],
         'B',
         ['def',
          'BB',
          ['(', 'a', 'b', 'c', ')'],
          ':',
          [['BB1'], [['def', 'BBA', ['(', ')'], ':', [['bba1'], ['bba2'], ['bba3']]]]]],
         'C',
         'D',
         ['def',
          'spam',
          ['(', 'x', 'y', ')'],
          ':',
          [[['def', 'eggs', ['(', 'z', ')'], ':', [['pass']]]]]]] 
    csN|t|�krdSt||�}|�dkrJ|�dkr>t||d��t||d��dS)Nrtzillegal nestingznot a peer entry)r�r;r#r!�r�r�rx�curCol��indentStackryrz�checkPeerIndent�s
z&indentedBlock.<locals>.checkPeerIndentcs2t||�}|�dkr"��|�nt||d��dS)Nrtznot a subentry)r;r%r!r�r�ryrz�checkSubIndent�s
z%indentedBlock.<locals>.checkSubIndentcsN|t|�krdSt||�}�r6|�dkr6|�dksBt||d�����dS)Nrtr�znot an unindent)r�r;r!r r�r�ryrz�
checkUnindent�s
z$indentedBlock.<locals>.checkUnindentz	 �INDENTr��UNINDENTzindented block)rrrQrNrr�r�rrrSrl)�blockStatementExprr�rSr�r�r�rfr��PEER�UNDENT�smExprryr�rzrhs(N����z#[\0xc0-\0xd6\0xd8-\0xf6\0xf8-\0xff]z[\0xa1-\0xbf\0xd7\0xf7]z_:zany tagzgt lt amp nbsp quot aposz><& "'z&(?P<entity>rqz);zcommon HTML entitycCst�|j�S)zRHelper parser action to replace common HTML entities with their special characters)�_htmlEntityMapr��entityrwryryrzr]�sz/\*(?:[^*]|\*(?!/))*z*/zC style commentz<!--[\s\S]*?-->zHTML commentz.*zrest of linez//(?:\\\n|[^\n])*z
// commentzC++ style commentz#.*zPython style commentr�� 	�	commaItemr�c@s�eZdZdZee�Zee�Ze	e
��d��e�Z
e	e��d��eed��Zed��d��e�Ze��e�de��e��d�Ze�d	d
��eeeed���e�B�d�Ze�e�ed
��d��e�Zed��d��e�ZeeBeB��Zed��d��e�Ze	eded��d�Zed��d�Z ed��d�Z!e!de!d�d�Z"ee!de!d�dee!de!d��d�Z#e#�$dd
��d e �d!�Z%e&e"e%Be#B�d"���d"�Z'ed#��d$�Z(e)d=d&d'��Z*e)d>d)d*��Z+ed+��d,�Z,ed-��d.�Z-ed/��d0�Z.e/��e0��BZ1e)d1d2��Z2e&e3e4d3�e5�e	e6d3d4�ee7d5�������d6�Z8e9ee:�;�e8Bd7d8���d9�Z<e)ed:d
���Z=e)ed;d
���Z>d<S)?rpa�

    Here are some common low-level expressions that may be useful in jump-starting parser development:
     - numeric forms (L{integers<integer>}, L{reals<real>}, L{scientific notation<sci_real>})
     - common L{programming identifiers<identifier>}
     - network addresses (L{MAC<mac_address>}, L{IPv4<ipv4_address>}, L{IPv6<ipv6_address>})
     - ISO8601 L{dates<iso8601_date>} and L{datetime<iso8601_datetime>}
     - L{UUID<uuid>}
     - L{comma-separated list<comma_separated_list>}
    Parse actions:
     - C{L{convertToInteger}}
     - C{L{convertToFloat}}
     - C{L{convertToDate}}
     - C{L{convertToDatetime}}
     - C{L{stripHTMLTags}}
     - C{L{upcaseTokens}}
     - C{L{downcaseTokens}}

    Example::
        pyparsing_common.number.runTests('''
            # any int or real number, returned as the appropriate type
            100
            -100
            +100
            3.14159
            6.02e23
            1e-12
            ''')

        pyparsing_common.fnumber.runTests('''
            # any int or real number, returned as float
            100
            -100
            +100
            3.14159
            6.02e23
            1e-12
            ''')

        pyparsing_common.hex_integer.runTests('''
            # hex numbers
            100
            FF
            ''')

        pyparsing_common.fraction.runTests('''
            # fractions
            1/2
            -3/4
            ''')

        pyparsing_common.mixed_integer.runTests('''
            # mixed fractions
            1
            1/2
            -3/4
            1-3/4
            ''')

        import uuid
        pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID))
        pyparsing_common.uuid.runTests('''
            # uuid
            12345678-1234-5678-1234-567812345678
            ''')
    prints::
        # any int or real number, returned as the appropriate type
        100
        [100]

        -100
        [-100]

        +100
        [100]

        3.14159
        [3.14159]

        6.02e23
        [6.02e+23]

        1e-12
        [1e-12]

        # any int or real number, returned as float
        100
        [100.0]

        -100
        [-100.0]

        +100
        [100.0]

        3.14159
        [3.14159]

        6.02e23
        [6.02e+23]

        1e-12
        [1e-12]

        # hex numbers
        100
        [256]

        FF
        [255]

        # fractions
        1/2
        [0.5]

        -3/4
        [-0.75]

        # mixed fractions
        1
        [1]

        1/2
        [0.5]

        -3/4
        [-0.75]

        1-3/4
        [1.75]

        # uuid
        12345678-1234-5678-1234-567812345678
        [UUID('12345678-1234-5678-1234-567812345678')]
    �integerzhex integerr�z[+-]?\d+zsigned integerr��fractioncCs|d|dS)Nrrtryrwryryrzr{�r|zpyparsing_common.<lambda>r�z"fraction or mixed integer-fractionz
[+-]?\d+\.\d*zreal numberz+[+-]?\d+([eE][+-]?\d+|\.\d*([eE][+-]?\d+)?)z$real number with scientific notationz[+-]?\d+\.?\d*([eE][+-]?\d+)?�fnumberr�
identifierzK(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}zIPv4 addressz[0-9a-fA-F]{1,4}�hex_integerr��zfull IPv6 address)rr�z::zshort IPv6 addresscCstdd�|D��dkS)Ncss|]}tj�|�rdVqdSrJ)rp�
_ipv6_partr&r`ryryrzr��sz,pyparsing_common.<lambda>.<locals>.<genexpr>r�)rrwryryrzr{�r|z::ffff:zmixed IPv6 addresszIPv6 addressz:[0-9a-fA-F]{2}([:.-])[0-9a-fA-F]{2}(?:\1[0-9a-fA-F]{2}){4}zMAC address�%Y-%m-%dcs�fdd�}|S)a�
        Helper to create a parse action for converting parsed date string to Python datetime.date

        Params -
         - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%d"})

        Example::
            date_expr = pyparsing_common.iso8601_date.copy()
            date_expr.setParseAction(pyparsing_common.convertToDate())
            print(date_expr.parseString("1999-12-31"))
        prints::
            [datetime.date(1999, 12, 31)]
        c
sNzt�|d����WStk
rH}zt||t|���W5d}~XYnXdSr�)r�strptime�daterAr!r�r�r�rx�ve��fmtryrz�cvt_fn�sz.pyparsing_common.convertToDate.<locals>.cvt_fnry�r�r�ryr�rz�
convertToDate�szpyparsing_common.convertToDate�%Y-%m-%dT%H:%M:%S.%fcs�fdd�}|S)a
        Helper to create a parse action for converting parsed datetime string to Python datetime.datetime

        Params -
         - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%dT%H:%M:%S.%f"})

        Example::
            dt_expr = pyparsing_common.iso8601_datetime.copy()
            dt_expr.setParseAction(pyparsing_common.convertToDatetime())
            print(dt_expr.parseString("1999-12-31T23:59:59.999"))
        prints::
            [datetime.datetime(1999, 12, 31, 23, 59, 59, 999000)]
        c
sJzt�|d��WStk
rD}zt||t|���W5d}~XYnXdSr�)rr�rAr!rr�r�ryrzr��sz2pyparsing_common.convertToDatetime.<locals>.cvt_fnryr�ryr�rz�convertToDatetime�sz"pyparsing_common.convertToDatetimez7(?P<year>\d{4})(?:-(?P<month>\d\d)(?:-(?P<day>\d\d))?)?zISO8601 datez�(?P<year>\d{4})-(?P<month>\d\d)-(?P<day>\d\d)[T ](?P<hour>\d\d):(?P<minute>\d\d)(:(?P<second>\d\d(\.\d*)?)?)?(?P<tz>Z|[+-]\d\d:?\d\d)?zISO8601 datetimez2[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}�UUIDcCstj�|d�S)a
        Parse action to remove HTML tags from web page HTML source

        Example::
            # strip HTML links from normal text 
            text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>'
            td,td_end = makeHTMLTags("TD")
            table_text = td + SkipTo(td_end).setParseAction(pyparsing_common.stripHTMLTags)("body") + td_end
            
            print(table_text.parseString(text).body) # -> 'More info at the pyparsing wiki page'
        r)rp�_html_stripperr�)r�r�r�ryryrz�
stripHTMLTagss
zpyparsing_common.stripHTMLTagsrUr�r�r�r�r�zcomma separated listcCst|���Sr�r�rwryryrzr{"r|cCst|���Sr�r�rwryryrzr{%r|N)r�)r�)?r�r�r�r�rorv�convertToInteger�float�convertToFloatr1rTr�r�r�rFr�r)�signed_integerr�r�rrN�
mixed_integerr�real�sci_realr�numberr�r6r5r��ipv4_addressr��_full_ipv6_address�_short_ipv6_addressr��_mixed_ipv6_addressr�ipv6_address�mac_addressr�r�r��iso8601_date�iso8601_datetime�uuidr9r8r�r�rrrrXr0�
_commasepitemrBr[r��comma_separated_listrfrDryryryrzrpsV""
2
 
���__main__�select�fromr�rN)rW�columnsr�Ztables�commandaK
        # '*' as column list and dotted table name
        select * from SYS.XYZZY

        # caseless match on "SELECT", and casts back to "select"
        SELECT * from XYZZY, ABC

        # list of column names, and mixed case SELECT keyword
        Select AA,BB,CC from Sys.dual

        # multiple tables
        Select A, B, C from Sys.dual, Table2

        # invalid SELECT keyword - should fail
        Xelect A, B, C from Sys.dual

        # incomplete command - should fail
        Select

        # invalid column name - should fail
        Select ^^^ frox Sys.dual

        z]
        100
        -100
        +100
        3.14159
        6.02e23
        1e-12
        z 
        100
        FF
        z6
        12345678-1234-5678-1234-567812345678
        )rs)rUF)N)FT)T)r�)T)�r��__version__�__versionTime__�
__author__r��weakrefrr�r�r�r5r�r�r
rgr�r�r�_threadr�ImportError�	threading�collections.abcrrrr�ordereddict�__all__r@�version_infor�rF�maxsizer�rr��chrr�r�rr�ra�reversedr�r�rcr�r�r�r��maxint�xranger��__builtin__r��fnamer%r�r�r�r�r�r�r��ascii_uppercase�ascii_lowercaser6rTrFr5rlr��	printablerXr�rr!r#r%r(r�r$�registerr;rLrIrxr|r~rSr�r&r.rrrr�r�rr
r	rnr1r)r'rr0r�rrrr,r+r3r2r"rrrrr rrr%rr4r1r2rr*rrAr/rrr
r-rrdrBr>r+rQrPr�rUrCrirjrlr�rErKrJrcrbr��_escapedPunc�_escapedHexChar�_escapedOctChar�_singleChar�
_charRanger�r�rarOr^r\rorfrDr�rMrNrgr�rmrVr�r�rkrWr@r`r[rerRrhr7rYr9r8r�r�r�rr=r]r:rGrPr_rAr?rHrZrrr<rpr��selectToken�	fromToken�ident�
columnName�columnNameList�
columnSpec�	tableName�
tableNameList�	simpleSQLrr�r�r�rr�ryryryrz�<module>s��4�
8



@v&A= I
G3pLOD|M &#@sQ,A,	I#%0
,	?#p
��Zr

 (
 
���� 


"
	X\_�A@sRdZddlmZddlZddlZddlZddlZddlZdZdZ	ej
ddkZej
ddkZej
dd�dkZ
er�efZefZefZeZeZejZn~efZeefZeejfZeZeZej�d	�r�ed
�ZnHGdd�de�Z ze!e ��Wne"k
�red
�ZYn
Xed
�Z[ dd�Z#dd�Z$Gdd�de�Z%Gdd�de%�Z&Gdd�dej'�Z(Gdd�de%�Z)Gdd�de�Z*e*e+�Z,Gdd�de(�Z-e)dddd �e)d!d"d#d$d!�e)d%d"d"d&d%�e)d'd(d#d)d'�e)d*d(d+�e)d,d"d#d-d,�e)d.d/d/d0d.�e)d1d/d/d.d1�e)d2d(d#d3d2�e)d4d(e
�rd5nd6d7�e)d8d(d9�e)d:d;d<d=�e)d d d�e)d>d>d?�e)d@d@d?�e)dAdAd?�e)d3d(d#d3d2�e)dBd"d#dCdB�e)dDd"d"dEdD�e&d#d(�e&dFdG�e&dHdI�e&dJdKdL�e&dMdNdM�e&dOdPdQ�e&dRdSdT�e&dUdVdW�e&dXdYdZ�e&d[d\d]�e&d^d_d`�e&dadbdc�e&dddedf�e&dgdhdi�e&djdjdk�e&dldldk�e&dmdmdk�e&dndndo�e&dpdq�e&drds�e&dtdu�e&dvdwdv�e&dxdy�e&dzd{d|�e&d}d~d�e&d�d�d��e&d�d�d��e&d�d�d��e&d�d�d��e&d�d�d��e&d�d�d��e&d�d�d��e&d�d�d��e&d�d�d�e&d�d�d��e&d�d�d��e&d�d�d��e&d�e+d�d��e&d�e+d�d��e&d�e+d�e+d��e&d�d�d��e&d�d�d��e&d�d�d��g>Z.ejd�k�rRe.e&d�d��g7Z.e.D]2Z/e0e-e/j1e/�e2e/e&��rVe,�3e/d�e/j1��qV[/e.e-_.e-e+d��Z4e,�3e4d��Gd�d��d�e(�Z5e)d�d�d��e)d�d�d��e)d�d�d��e)d�d�d��e)d�d�d��e)d�d�d��e)d�d�d��e)d�d�d��e)d�d�d��e)d�d�d��e)d=d�d��e)d�d�d��e)d�d�d��e)d�d�d��e)d�d�d��e)d�d�d��e)d�d�d��e)d�d�d��e)d�d�d��e)d�d�d��e)d�d�d��e)d�d�d��e)d�d�d��gZ6e6D]Z/e0e5e/j1e/��q�[/e6e5_.e,�3e5e+d��d�dҡGd�dԄd�e(�Z7e)d�d�d��e)d�d�d��e)d�d�d��gZ8e8D]Z/e0e7e/j1e/��q[/e8e7_.e,�3e7e+d��d�dۡGd�d݄d�e(�Z9e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃e)d�d�d߃g!Z:e:D]Z/e0e9e/j1e/��q�[/e:e9_.e,�3e9e+�d��d�d�G�d�d��de(�Z;e)�dd��d�e)�dd��d�e)�dd��d�e)�d	d��d�gZ<e<D]Z/e0e;e/j1e/��q8[/e<e;_.e,�3e;e+�d
��d�d�G�d
�d��de(�Z=e)�dd�d��gZ>e>D]Z/e0e=e/j1e/��q�[/e>e=_.e,�3e=e+�d��d�d�G�d�d��dej'�Z?e,�3e?e+d���d��d�d�Z@�d�d�ZAe�	rH�dZB�dZC�dZD�dZE�dZF�dZGn$�d ZB�d!ZC�d"ZD�d#ZE�d$ZF�d%ZGzeHZIWn"eJk
�	r��d&�d'�ZIYnXeIZHzeKZKWn"eJk
�	r��d(�d)�ZKYnXe�	r�d*�d+�ZLejMZN�d,�d-�ZOeZPn>�d.�d+�ZL�d/�d0�ZN�d1�d-�ZOG�d2�d3��d3e�ZPeKZKe#eL�d4�e�QeB�ZRe�QeC�ZSe�QeD�ZTe�QeE�ZUe�QeF�ZVe�QeG�ZWe�
rԐd5�d6�ZX�d7�d8�ZY�d9�d:�ZZ�d;�d<�Z[e�\�d=�Z]e�\�d>�Z^e�\�d?�Z_nT�d@�d6�ZX�dA�d8�ZY�dB�d:�ZZ�dC�d<�Z[e�\�dD�Z]e�\�dE�Z^e�\�dF�Z_e#eX�dG�e#eY�dH�e#eZ�dI�e#e[�dJ�e�r�dK�dL�Z`�dM�dN�ZaebZcddldZded�e�dO�jfZg[de�hd�ZiejjZkelZmddlnZnenjoZoenjpZp�dPZqej
�dQ�dQk�r�dRZr�dSZsn�dTZr�dUZsnj�dV�dL�Z`�dW�dN�ZaecZcebZg�dX�dY�Zi�dZ�d[�Zke�tejuev�ZmddloZoeojoZoZp�d\Zq�dRZr�dSZse#e`�d]�e#ea�d^��d_�dP�Zw�d`�dT�Zx�da�dU�Zye�r�eze4j{�db�Z|�d|�dc�dd�Z}n�d}�de�df�Z|e|�dg�ej
dd��dhk�r�e|�di�n.ej
dd��dhk�
re|�dj�n�dk�dl�Z~eze4j{�dmd�Zedk�
rL�dn�do�Zej
dd��dpk�
rreZ��dq�do�Ze#e}�dr�ej
dd�dk�
r�ej�ej�f�ds�dt�Z�nej�Z��du�dv�Z��dw�dx�Z��dy�dz�Z�gZ�e+Z�e�����d{�dk	�
r�ge�_�ej��rBe�ej��D]4\Z�Z�ee��j+dk�re�j1e+k�rej�e�=�q>�q[�[�ej���e,�dS(~z6Utilities for writing code that runs on Python 2 and 3�)�absolute_importNz'Benjamin Peterson <benjamin@python.org>z1.10.0��)r��javai���c@seZdZdd�ZdS)�XcCsdS)Nl���selfrr�;/usr/lib/python3/dist-packages/pkg_resources/_vendor/six.py�__len__>sz	X.__len__N)�__name__�
__module__�__qualname__rrrrrr<srl����cCs
||_dS)z Add documentation to a function.N)�__doc__)�func�docrrr�_add_docKsrcCst|�tj|S)z7Import module, returning the module after the last dot.)�
__import__�sys�modules��namerrr�_import_modulePsrc@seZdZdd�Zdd�ZdS)�
_LazyDescrcCs
||_dS�Nr�r
rrrr�__init__Xsz_LazyDescr.__init__cCsB|��}t||j|�zt|j|j�Wntk
r<YnX|Sr)�_resolve�setattrr�delattr�	__class__�AttributeError)r
�obj�tp�resultrrr�__get__[sz_LazyDescr.__get__N)r
rrrr&rrrrrVsrcs.eZdZd�fdd�	Zdd�Zdd�Z�ZS)	�MovedModuleNcs2tt|��|�tr(|dkr |}||_n||_dSr)�superr'r�PY3�mod)r
r�old�new�r!rrriszMovedModule.__init__cCs
t|j�Sr)rr*r	rrrrrszMovedModule._resolvecCs"|��}t||�}t|||�|Sr)r�getattrr)r
�attr�_module�valuerrr�__getattr__us
zMovedModule.__getattr__)N)r
rrrrr2�
__classcell__rrr-rr'gs	r'cs(eZdZ�fdd�Zdd�ZgZ�ZS)�_LazyModulecstt|��|�|jj|_dSr)r(r4rr!rrr-rrr~sz_LazyModule.__init__cCs ddg}|dd�|jD�7}|S)Nrr
cSsg|]
}|j�qSrr)�.0r/rrr�
<listcomp>�sz'_LazyModule.__dir__.<locals>.<listcomp>)�_moved_attributes)r
�attrsrrr�__dir__�sz_LazyModule.__dir__)r
rrrr9r7r3rrr-rr4|sr4cs&eZdZd�fdd�	Zdd�Z�ZS)�MovedAttributeNcsdtt|��|�trH|dkr |}||_|dkr@|dkr<|}n|}||_n||_|dkrZ|}||_dSr)r(r:rr)r*r/)r
r�old_mod�new_mod�old_attr�new_attrr-rrr�szMovedAttribute.__init__cCst|j�}t||j�Sr)rr*r.r/)r
�modulerrrr�s
zMovedAttribute._resolve)NN)r
rrrrr3rrr-rr:�sr:c@sVeZdZdZdd�Zdd�Zdd�Zdd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZeZdS)�_SixMetaPathImporterz�
    A meta path importer to import six.moves and its submodules.

    This class implements a PEP302 finder and loader. It should be compatible
    with Python 2.5 and all existing versions of Python3
    cCs||_i|_dSr)r�
known_modules)r
�six_module_namerrrr�sz_SixMetaPathImporter.__init__cGs"|D]}||j|jd|<qdS�N�.�rAr)r
r*�	fullnames�fullnamerrr�_add_module�sz _SixMetaPathImporter._add_modulecCs|j|jd|SrCrE�r
rGrrr�_get_module�sz _SixMetaPathImporter._get_moduleNcCs||jkr|SdSr)rA)r
rG�pathrrr�find_module�s
z _SixMetaPathImporter.find_modulecCs2z|j|WStk
r,td|��YnXdS)Nz!This loader does not know module )rA�KeyError�ImportErrorrIrrr�__get_module�sz!_SixMetaPathImporter.__get_modulecCsTztj|WStk
r YnX|�|�}t|t�r@|��}n||_|tj|<|Sr)rrrM� _SixMetaPathImporter__get_module�
isinstancer'r�
__loader__)r
rGr*rrr�load_module�s



z _SixMetaPathImporter.load_modulecCst|�|�d�S)z�
        Return true, if the named module is a package.

        We need this method to get correct spec objects with
        Python 3.4 (see PEP451)
        �__path__)�hasattrrPrIrrr�
is_package�sz_SixMetaPathImporter.is_packagecCs|�|�dS)z;Return None

        Required, if is_package is implementedN)rPrIrrr�get_code�s
z_SixMetaPathImporter.get_code)N)
r
rrrrrHrJrLrPrSrVrW�
get_sourcerrrrr@�s
	r@c@seZdZdZgZdS)�_MovedItemszLazy loading of moved objectsN)r
rrrrTrrrrrY�srY�	cStringIO�io�StringIO�filter�	itertools�builtins�ifilter�filterfalse�ifilterfalse�input�__builtin__�	raw_input�internr�map�imap�getcwd�osZgetcwdu�getcwdb�range�xrange�
reload_module�	importlib�imp�reload�reduce�	functools�shlex_quoteZpipes�shlex�quote�UserDict�collections�UserList�
UserString�zip�izip�zip_longest�izip_longest�configparser�ConfigParser�copyreg�copy_reg�dbm_gnu�gdbmzdbm.gnu�
_dummy_thread�dummy_thread�http_cookiejar�	cookielibzhttp.cookiejar�http_cookies�Cookiezhttp.cookies�
html_entities�htmlentitydefsz
html.entities�html_parser�
HTMLParserzhtml.parser�http_client�httplibzhttp.client�email_mime_multipartzemail.MIMEMultipartzemail.mime.multipart�email_mime_nonmultipartzemail.MIMENonMultipartzemail.mime.nonmultipart�email_mime_textzemail.MIMETextzemail.mime.text�email_mime_basezemail.MIMEBasezemail.mime.base�BaseHTTPServerzhttp.server�
CGIHTTPServer�SimpleHTTPServer�cPickle�pickle�queue�Queue�reprlib�repr�socketserver�SocketServer�_thread�thread�tkinter�Tkinter�tkinter_dialog�Dialogztkinter.dialog�tkinter_filedialog�
FileDialogztkinter.filedialog�tkinter_scrolledtext�ScrolledTextztkinter.scrolledtext�tkinter_simpledialog�SimpleDialogztkinter.simpledialog�tkinter_tix�Tixztkinter.tix�tkinter_ttk�ttkztkinter.ttk�tkinter_constants�Tkconstantsztkinter.constants�tkinter_dnd�Tkdndztkinter.dnd�tkinter_colorchooser�tkColorChooserztkinter.colorchooser�tkinter_commondialog�tkCommonDialogztkinter.commondialog�tkinter_tkfiledialog�tkFileDialog�tkinter_font�tkFontztkinter.font�tkinter_messagebox�tkMessageBoxztkinter.messagebox�tkinter_tksimpledialog�tkSimpleDialog�urllib_parsez.moves.urllib_parsezurllib.parse�urllib_errorz.moves.urllib_errorzurllib.error�urllibz
.moves.urllib�urllib_robotparser�robotparserzurllib.robotparser�
xmlrpc_client�	xmlrpclibz
xmlrpc.client�
xmlrpc_server�SimpleXMLRPCServerz
xmlrpc.server�win32�winreg�_winregzmoves.z.moves�movesc@seZdZdZdS)�Module_six_moves_urllib_parsez7Lazy loading of moved objects in six.moves.urllib_parseN�r
rrrrrrrr�@sr��ParseResult�urlparse�SplitResult�parse_qs�	parse_qsl�	urldefrag�urljoin�urlsplit�
urlunparse�
urlunsplit�
quote_plus�unquote�unquote_plus�	urlencode�
splitquery�splittag�	splituser�
uses_fragment�uses_netloc�uses_params�
uses_query�
uses_relative�moves.urllib_parsezmoves.urllib.parsec@seZdZdZdS)�Module_six_moves_urllib_errorz7Lazy loading of moved objects in six.moves.urllib_errorNr�rrrrr�hsr��URLError�urllib2�	HTTPError�ContentTooShortErrorz.moves.urllib.error�moves.urllib_errorzmoves.urllib.errorc@seZdZdZdS)�Module_six_moves_urllib_requestz9Lazy loading of moved objects in six.moves.urllib_requestNr�rrrrr�|sr��urlopenzurllib.request�install_opener�build_opener�pathname2url�url2pathname�
getproxies�Request�OpenerDirector�HTTPDefaultErrorHandler�HTTPRedirectHandler�HTTPCookieProcessor�ProxyHandler�BaseHandler�HTTPPasswordMgr�HTTPPasswordMgrWithDefaultRealm�AbstractBasicAuthHandler�HTTPBasicAuthHandler�ProxyBasicAuthHandler�AbstractDigestAuthHandler�HTTPDigestAuthHandler�ProxyDigestAuthHandler�HTTPHandler�HTTPSHandler�FileHandler�
FTPHandler�CacheFTPHandler�UnknownHandler�HTTPErrorProcessor�urlretrieve�
urlcleanup�	URLopener�FancyURLopener�proxy_bypassz.moves.urllib.request�moves.urllib_requestzmoves.urllib.requestc@seZdZdZdS)� Module_six_moves_urllib_responsez:Lazy loading of moved objects in six.moves.urllib_responseNr�rrrrr�sr�addbasezurllib.response�addclosehook�addinfo�
addinfourlz.moves.urllib.response�moves.urllib_responsezmoves.urllib.responsec@seZdZdZdS)�#Module_six_moves_urllib_robotparserz=Lazy loading of moved objects in six.moves.urllib_robotparserNr�rrrrr�sr�RobotFileParserz.moves.urllib.robotparser�moves.urllib_robotparserzmoves.urllib.robotparserc@sNeZdZdZgZe�d�Ze�d�Ze�d�Z	e�d�Z
e�d�Zdd�Zd	S)
�Module_six_moves_urllibzICreate a six.moves.urllib namespace that resembles the Python 3 namespacer�r�rrrcCsdddddgS)N�parse�error�request�responser�rr	rrrr9�szModule_six_moves_urllib.__dir__N)
r
rrrrT�	_importerrJrrrrr�r9rrrrr�s




rzmoves.urllibcCstt|j|�dS)zAdd an item to six.moves.N)rrYr)�moverrr�add_move�srcCsXztt|�WnDtk
rRztj|=Wn"tk
rLtd|f��YnXYnXdS)zRemove item from six.moves.zno such move, %rN)r rYr"r��__dict__rMrrrr�remove_move�sr!�__func__�__self__�__closure__�__code__�__defaults__�__globals__�im_func�im_self�func_closure�	func_code�
func_defaults�func_globalscCs|��Sr)�next)�itrrr�advance_iteratorsr0cCstdd�t|�jD��S)Ncss|]}d|jkVqdS)�__call__N)r )r5�klassrrr�	<genexpr>szcallable.<locals>.<genexpr>)�any�type�__mro__)r#rrr�callablesr7cCs|Srr��unboundrrr�get_unbound_functionsr:cCs|Srr�r�clsrrr�create_unbound_methodsr=cCs|jSr)r(r8rrrr:"scCst�|||j�Sr)�types�
MethodTyper!)rr#rrr�create_bound_method%sr@cCst�|d|�Sr)r>r?r;rrrr=(sc@seZdZdd�ZdS)�IteratorcCst|��|�Sr)r5�__next__r	rrrr.-sz
Iterator.nextN)r
rrr.rrrrrA+srAz3Get the function out of a possibly unbound functioncKst|jf|��Sr)�iter�keys��d�kwrrr�iterkeys>srHcKst|jf|��Sr)rC�valuesrErrr�
itervaluesAsrJcKst|jf|��Sr)rC�itemsrErrr�	iteritemsDsrLcKst|jf|��Sr)rC�listsrErrr�	iterlistsGsrNrDrIrKcKs|jf|�Sr)rHrErrrrHPscKs|jf|�Sr)rJrErrrrJSscKs|jf|�Sr)rLrErrrrLVscKs|jf|�Sr)rNrErrrrNYs�viewkeys�
viewvalues�	viewitemsz1Return an iterator over the keys of a dictionary.z3Return an iterator over the values of a dictionary.z?Return an iterator over the (key, value) pairs of a dictionary.zBReturn an iterator over the (key, [values]) pairs of a dictionary.cCs
|�d�S)Nzlatin-1)�encode��srrr�bksrUcCs|SrrrSrrr�unsrVz>B�assertCountEqual�ZassertRaisesRegexpZassertRegexpMatches�assertRaisesRegex�assertRegexcCs|SrrrSrrrrU�scCst|�dd�d�S)Nz\\z\\\\Zunicode_escape)�unicode�replacerSrrrrV�scCst|d�S)Nr��ord)�bsrrr�byte2int�sr`cCst||�Srr])�buf�irrr�
indexbytes�srcZassertItemsEqualzByte literalzText literalcOst|t�||�Sr)r.�_assertCountEqual�r
�args�kwargsrrrrW�scOst|t�||�Sr)r.�_assertRaisesRegexrerrrrY�scOst|t�||�Sr)r.�_assertRegexrerrrrZ�s�execcCs*|dkr|�}|j|k	r"|�|��|�dSr)�
__traceback__�with_traceback)r$r1�tbrrr�reraise�s


rncCsB|dkr*t�d�}|j}|dkr&|j}~n|dkr6|}td�dS)zExecute code in a namespace.NrXzexec _code_ in _globs_, _locs_)r�	_getframe�	f_globals�f_localsrj)�_code_�_globs_�_locs_�framerrr�exec_�s
rvz9def reraise(tp, value, tb=None):
    raise tp, value, tb
)rrzrdef raise_from(value, from_value):
    if from_value is None:
        raise value
    raise value from from_value
zCdef raise_from(value, from_value):
    raise value from from_value
cCs|�dSrr)r1�
from_valuerrr�
raise_from�srx�printc
s.|�dtj���dkrdS�fdd�}d}|�dd�}|dk	r`t|t�rNd}nt|t�s`td��|�d	d�}|dk	r�t|t�r�d}nt|t�s�td
��|r�td��|s�|D]}t|t�r�d}q�q�|r�td�}td
�}nd}d
}|dkr�|}|dkr�|}t|�D] \}	}|	�r||�||��q||�dS)z4The new-style print function for Python 2.4 and 2.5.�fileNcsdt|t�st|�}t�t�rVt|t�rV�jdk	rVt�dd�}|dkrHd}|��j|�}��|�dS)N�errors�strict)	rQ�
basestring�strrzr[�encodingr.rR�write)�datar{��fprrr��s

��zprint_.<locals>.writeF�sepTzsep must be None or a string�endzend must be None or a stringz$invalid keyword arguments to print()�
� )�popr�stdoutrQr[r~�	TypeError�	enumerate)
rfrgr��want_unicoder�r��arg�newline�spacerbrr�r�print_�sL





r�)rrcOs<|�dtj�}|�dd�}t||�|r8|dk	r8|��dS)Nrz�flushF)�getrr�r��_printr�)rfrgr�r�rrrr�s

zReraise an exception.cs���fdd�}|S)Ncst�����|�}�|_|Sr)rs�wraps�__wrapped__)�f��assigned�updated�wrappedrr�wrapperszwraps.<locals>.wrapperr)r�r�r�r�rr�rr�sr�cs&G��fdd�d��}t�|ddi�S)z%Create a base class with a metaclass.cseZdZ��fdd�ZdS)z!with_metaclass.<locals>.metaclasscs�|�|�Srr)r<r�
this_basesrF��bases�metarr�__new__'sz)with_metaclass.<locals>.metaclass.__new__N)r
rrr�rr�rr�	metaclass%sr��temporary_classr)r5r�)r�r�r�rr�r�with_metaclass sr�cs�fdd�}|S)z6Class decorator for creating a class with a metaclass.csh|j��}|�d�}|dk	r@t|t�r,|g}|D]}|�|�q0|�dd�|�dd��|j|j|�S)N�	__slots__r �__weakref__)r �copyr�rQr~r�r
�	__bases__)r<�	orig_vars�slots�	slots_var�r�rrr�.s


zadd_metaclass.<locals>.wrapperr)r�r�rr�r�
add_metaclass,sr�cCs2tr.d|jkrtd|j��|j|_dd�|_|S)a
    A decorator that defines __unicode__ and __str__ methods under Python 2.
    Under Python 3 it does nothing.

    To support Python 2 and 3 with a single code base, define a __str__ method
    returning text and apply this decorator to the class.
    �__str__zY@python_2_unicode_compatible cannot be applied to %s because it doesn't define __str__().cSs|���d�S)Nzutf-8)�__unicode__rRr	rrr�<lambda>J�z-python_2_unicode_compatible.<locals>.<lambda>)�PY2r �
ValueErrorr
r�r�)r2rrr�python_2_unicode_compatible<s
�
r��__spec__)N)NN)�r�
__future__rrsr^�operatorrr>�
__author__�__version__�version_infor�r)�PY34r~�string_types�int�
integer_typesr5�class_types�	text_type�bytes�binary_type�maxsize�MAXSIZEr}�long�	ClassTyper[�platform�
startswith�objectr�len�
OverflowErrorrrrr'�
ModuleTyper4r:r@r
rrYr7r/rrrQrHr�r��_urllib_parse_moved_attributesr��_urllib_error_moved_attributesr�� _urllib_request_moved_attributesr�!_urllib_response_moved_attributesr�$_urllib_robotparser_moved_attributesrrr!�
_meth_func�
_meth_self�
_func_closure�
_func_code�_func_defaults�
_func_globalsr.r0�	NameErrorr7r:r?r@r=rA�
attrgetter�get_method_function�get_method_self�get_function_closure�get_function_code�get_function_defaults�get_function_globalsrHrJrLrN�methodcallerrOrPrQrUrV�chr�unichr�struct�Struct�pack�int2byte�
itemgetterr`�getitemrcrC�	iterbytesr[r\�BytesIOrdrhri�partialrhr^rWrYrZr.r_rvrnrxr�r��WRAPPER_ASSIGNMENTS�WRAPPER_UPDATESr�r�r�r�rT�__package__�globalsr�r��submodule_search_locations�	meta_pathr�rb�importer�appendrrrr�<module>s�

>





























��


�


�D�






















��


��
































�#�����
��





��



5��
XT	�@s,ddlZGdd�d�ZdZeee���dS)�Nc@s@eZdZdZddd�Zedd��Zddd	�Zd
d�Zdd
�Z	dS)�VendorImporterz�
    A PEP 302 meta path importer for finding optionally-vendored
    or otherwise naturally-installed packages from root_name.
    �NcCs&||_t|�|_|p|�dd�|_dS)N�extern�_vendor)�	root_name�set�vendored_names�replace�
vendor_pkg)�selfrrr
rr�?/usr/lib/python3/dist-packages/pkg_resources/extern/__init__.py�__init__
s
zVendorImporter.__init__ccs|jdVdVdS)zL
        Search first the vendor package then as a natural package.
        �.�N)r
�rrrr�search_pathszVendorImporter.search_pathcCs8|�|jd�\}}}|rdStt|j|j��s4dS|S)z�
        Return self when fullname starts with root_name and the
        target module is one vendored through this importer.
        rN)�	partitionr�any�map�
startswithr)r�fullname�path�root�base�targetrrr�find_moduleszVendorImporter.find_modulec	Cs�|�|jd�\}}}|jD]^}zD||}t|�tj|}|tj|<|r\tjdkr\tj|=|WStk
rxYqXqtdjft	����dS)zK
        Iterate over the search path to locate and load fullname.
        r)�rz�The '{target}' package is required; normally this is bundled with this package so if you get this warning, consult the packager of your distribution.N)
rrr�
__import__�sys�modules�version_info�ImportError�format�locals)rrrrr�prefix�extant�modrrr�load_module#s"



��zVendorImporter.load_modulecCs|tjkrtj�|�dS)zR
        Install this importer into sys.meta_path if not already present.
        N)r�	meta_path�appendrrrr�install@s
zVendorImporter.install)rN)N)
�__name__�
__module__�__qualname__�__doc__r
�propertyrrr'r*rrrrrs


r)�	packaging�	pyparsing�six�appdirs)rr�namesr+r*rrrr�<module>sDX��@sJddlZddlZddlZe�d�ZdZejdkoDe�eded�dS)�Na
    You are running Setuptools on Python 2, which is no longer
    supported and
    >>> SETUPTOOLS WILL STOP WORKING <<<
    in a subsequent release (no sooner than 2020-04-20).
    Please ensure you are installing
    Setuptools using pip 9.x or later or pin to `setuptools<45`
    in your environment.
    If you have done those things and are still encountering
    this message, please comment in
    https://github.com/pypa/setuptools/issues/1458
    about the steps that led to this unsupported combination.
    z)Setuptools will stop working on Python 2
)�z<************************************************************)�sys�warnings�textwrap�dedent�msg�pre�version_info�warn�rr�8/usr/lib/python3/dist-packages/pkg_resources/py2_warn.py�<module>s

XF�@s`ddlZddlZddlZddlmZd	dd�ZejpLdejkoHdknZerVenej	Z	dS)
�N�)�sixFc
CsHzt�|�Wn4tk
rB}z|r0|jtjkr2�W5d}~XYnXdS)N)�os�makedirs�OSError�errno�EEXIST)�path�exist_ok�exc�r�:/usr/lib/python3/dist-packages/pkg_resources/py31compat.py�_makedirs_31s
r)��)rrr)F)
rr�sys�externrr�PY2�version_info�needs_makedirsrrrrr
�<module>s
�X��@sdZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
ddgZGdd�de�Z
Gdd	�d	e�Zd d
d�Zd!dd
�Zefdd�ZGdd�de�Zd"dd�Zd#dd�Zefdd�Zdd�Zd$dd�Zedk�reej�dk�r�edejd�nejd=eejd�dS)%aZrunpy.py - locating and running Python code using the module namespace

Provides support for locating and running Python scripts using the Python
module namespace instead of the native filesystem.

This allows Python code to play nicely with non-filesystem based PEP 302
importers when locating support scripts as well as when importing modules.
�N)�	read_code�get_importer�
run_module�run_pathc@s(eZdZdZdd�Zdd�Zdd�ZdS)	�_TempModulezCTemporarily replace a module in sys.modules with an empty namespacecCs||_t�|�|_g|_dS�N)�mod_name�types�
ModuleType�module�
_saved_module��selfr�r�/usr/lib/python3.8/runpy.py�__init__sz_TempModule.__init__cCsB|j}z|j�tj|�Wntk
r0YnX|jtj|<|Sr)rr�append�sys�modules�KeyErrorrr
rrr�	__enter__ sz_TempModule.__enter__cGs.|jr|jdtj|j<n
tj|j=g|_dS�Nr)rrrr�r�argsrrr�__exit__)s
z_TempModule.__exit__N)�__name__�
__module__�__qualname__�__doc__rrrrrrrrs	rc@s$eZdZdd�Zdd�Zdd�ZdS)�_ModifiedArgv0cCs||_t�|_|_dSr)�value�object�_saved_value�	_sentinel)rr rrrr1sz_ModifiedArgv0.__init__cCs0|j|jk	rtd��tjd|_|jtjd<dS)NzAlready preserving saved valuer)r"r#�RuntimeErrorr�argvr )rrrrr5sz_ModifiedArgv0.__enter__cGs|j|_|jtjd<dSr)r#r r"rr%rrrrr;sz_ModifiedArgv0.__exit__N)rrrrrrrrrrr0src
	Csn|dk	r|�|�|dkr(d}|}d}	n |j}|j}|j}	|dkrH|j}|j|||	d|||d�t||�|S)z)Helper to run code in nominated namespaceN)r�__file__�
__cached__r�
__loader__�__package__�__spec__)�update�loader�origin�cached�parent�exec)
�code�run_globals�init_globalsr�mod_spec�pkg_name�script_namer,�fnamer.rrr�	_run_code@s*
�
r8c	
Cs^|dkr|n|j}t|��6}t|��"|jj}t|||||||�W5QRXW5QRX|��S)z5Helper to run code in new namespace with sys modifiedN)r-rrr�__dict__r8�copy)	r1r3rr4r5r6r7�temp_module�mod_globalsrrr�_run_module_codeZs�r=c
Cs2|�d�r|d��|�d�\}}}|r�zt|�WnHtk
rz}z*|jdksh|j|krj|�|jd�sj�W5d}~XYnXtj�|�}|dk	r�t|d�s�ddl	m
}dj||d�}|t|��zt
j�|�}WnJttttfk
�r}	z"d}||�|t|	�j|	��|	�W5d}	~	XYnX|dk�r2|d	|��|jdk	�r�|d
k�sT|�d��r\|d��z|d}
t|
|�WS|k
�r�}z"|tjk�r��|d
||f��W5d}~XYnX|j}|dk�r�|d|��z|�|�}Wn2tk
�r}z|t|��|�W5d}~XYnX|dk�r(|d|��|||fS)N�.z#Relative module names not supported�__path__r)�warnz�{mod_name!r} found in sys.modules after import of package {pkg_name!r}, but prior to execution of {mod_name!r}; this may result in unpredictable behaviour)rr5z:Error while finding module specification for {!r} ({}: {})zNo module named %s�__main__z	.__main__z%Cannot use package as __main__ modulez3%s; %r is a package and cannot be directly executedz0%r is a namespace package and cannot be executedzNo code object available for %s)�
startswith�
rpartition�
__import__�ImportError�namerr�get�hasattr�warningsr@�format�RuntimeWarning�	importlib�util�	find_spec�AttributeError�	TypeError�
ValueError�typer�submodule_search_locations�endswith�_get_module_detailsr,�get_code)
r�errorr5�_�e�existingr@�msg�spec�ex�
pkg_main_namer,r1rrrrUhsd
��,
�
� 
rUc@seZdZdZdS)�_ErrorzBError that _run_module_as_main() should report without a tracebackN)rrrrrrrrr_�sr_Tc
Cs�z0|s|dkr t|t�\}}}ntt�\}}}Wn:tk
rj}zdtj|f}t�|�W5d}~XYnXtjdj}|r�|jtj	d<t
||dd|�S)a�Runs the designated module in the __main__ namespace

       Note that the executed module will have full access to the
       __main__ namespace. If this is not desirable, the run_module()
       function should be used to run the module code in a fresh namespace.

       At the very least, these variables in __main__ will be overwritten:
           __name__
           __file__
           __cached__
           __loader__
           __package__
    rAz%s: %sNr)rUr_�_get_main_module_detailsr�
executable�exitrr9r-r%r8)r�
alter_argvr4r1�excr[�main_globalsrrr�_run_module_as_main�s�rfFcCs@t|�\}}}|dkr|}|r,t||||�St|i|||�SdS)znExecute a module's code without importing it

       Returns the resulting top level namespace dictionary
    N)rUr=r8)rr3�run_name�	alter_sysr4r1rrrr�sc
Cs�d}tj|}tj|=z\zt|�WW�NStk
rn}z*|t|�kr\|d|tjdf�|��W5d}~XYnXW5|tj|<XdS)NrAzcan't find %r module in %rr)rrrUrE�str�path)rW�	main_name�
saved_mainrdrrrr`�s
��r`c	Csftj�t�|��}t�|��}t|�}W5QRX|dkr^t�|��}t|��|d�}W5QRX||fS)Nr0)	�osrj�abspath�fsdecode�io�	open_coder�compile�read)rgr7�decoded_path�fr1rrr�_get_code_from_file�srvcCs$|dkrd}|�d�d}t|�}d}t|�jdkrFt|�jdkrFd}t|td��sX|rxt||�\}}t|||||d	�Stj	�
d|�znt
�\}}	}t|��P}
t|��<|
jj}t|||||	|���W5QR�W5QR�W�SQRXW5QRXW5ztj	�|�Wntk
�rYnXXdS)
a_Execute code located at the specified filesystem location

       Returns the resulting top level namespace dictionary

       The file path may refer directly to a Python script (i.e.
       one that could be directly executed with execfile) or else
       it may refer to a zipfile or directory containing a top
       level __main__.py script.
    Nz
<run_path>r>rF�imp�NullImporterT)r5r6)rCrrRrr�
isinstancervr=rrj�insert�removerQr`rrrr9r8r:)�	path_namer3rgr5�importer�is_NullImporterr1r7rr4r;r<rrrr�s<
�
��8rA�z!No module specified for execution)�file)NNNNN)NNNNN)T)NNF)NN)rr�importlib.machineryrL�importlib.utilrpr	rm�pkgutilrr�__all__r!rrr8r=rErU�	Exceptionr_rfrr`rvrr�lenr%�print�stderrrrrr�<module>sN��
�
:
�

1
XC�@s&dZddlZddlZddlZddlZddlZejejgada	da
dadd�Zdd�Z
dd�Zd	d
�Zdd�Zd2d
d�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd3dd�Zd4dd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Z d-d.�Z!ej"j#�s
e!�d/d0�Z$e%d1k�r"e$�dS)5a�Append module search paths for third-party packages to sys.path.

****************************************************************
* This module is automatically imported during initialization. *
****************************************************************

This will append site-specific paths to the module search path.  On
Unix (including Mac OSX), it starts with sys.prefix and
sys.exec_prefix (if different) and appends
lib/python3/dist-packages.
On other platforms (such as Windows), it tries each of the
prefixes directly, as well as with lib/site-packages appended.  The
resulting directories, if they exist, are appended to sys.path, and
also inspected for path configuration files.

For Debian and derivatives, this sys.path is augmented with directories
for packages distributed within the distribution. Local addons go
into /usr/local/lib/python<version>/dist-packages, Debian addons
install into /usr/lib/python3/dist-packages.
/usr/lib/python<version>/site-packages is not used.

If a file named "pyvenv.cfg" exists one directory above sys.executable,
sys.prefix and sys.exec_prefix are set to that directory and
it is also checked for site-packages (sys.base_prefix and
sys.base_exec_prefix will always be the "real" prefixes of the Python
installation). If "pyvenv.cfg" (a bootstrap configuration file) contains
the key "include-system-site-packages" set to anything other than "false"
(case-insensitive), the system-level prefixes will still also be
searched for site-packages; otherwise they won't.

All of the resulting site-specific directories, if they exist, are
appended to sys.path, and also inspected for path configuration
files.

A path configuration file is a file whose name has the form
<package>.pth; its contents are additional directories (one per line)
to be added to sys.path.  Non-existing directories (or
non-directories) are never added to sys.path; no directory is added to
sys.path more than once.  Blank lines and lines beginning with
'#' are skipped. Lines starting with 'import' are executed.

For example, suppose sys.prefix and sys.exec_prefix are set to
/usr/local and there is a directory /usr/local/lib/python2.5/site-packages
with three subdirectories, foo, bar and spam, and two path
configuration files, foo.pth and bar.pth.  Assume foo.pth contains the
following:

  # foo package configuration
  foo
  bar
  bletch

and bar.pth contains:

  # bar package configuration
  bar

Then the following directories are added to sys.path, in this order:

  /usr/local/lib/python2.5/site-packages/bar
  /usr/local/lib/python2.5/site-packages/foo

Note that bletch is omitted because it doesn't exist; bar precedes foo
because bar.pth comes alphabetically before foo.pth; and spam is
omitted because it is not mentioned in either path configuration file.

The readline module is also automatically configured to enable
completion for systems that support it.  This can be overridden in
sitecustomize, usercustomize or PYTHONSTARTUP.  Starting Python in
isolated mode (-I) disables automatic readline configuration.

After these operations, an attempt is made to import a module
named sitecustomize, which can perform arbitrary additional
site-specific customizations.  If this import fails with an
ImportError exception, it is silently ignored.
�NcGsBtjj|�}ztj�|�}Wntk
r0YnX|tj�|�fS�N)�os�path�join�abspath�OSError�normcase)�paths�dir�r�/usr/lib/python3.8/site.py�makepathasr
cCs�ttj���D]~}tt|dd�dd�dkr,qztj�|j�|_Wnt	t
tfk
rZYnXztj�|j�|_Wqt	t
tfk
r�YqXqdS)zESet all module __file__ and __cached__ attributes to an absolute path�
__loader__N�
__module__)�_frozen_importlib�_frozen_importlib_external)
�set�sys�modules�values�getattrrrr�__file__�AttributeErrorr�	TypeError�
__cached__)�mrrr�	abs_pathsjs�rcCsPg}t�}tjD],}t|�\}}||kr|�|�|�|�q|tjdd�<|S)zK Remove duplicate entries from sys.path along with making them
    absoluteN)rrrr
�append�add)�L�known_pathsr
�dircaserrr�removeduppathszs

r"c	CsVt�}tjD]D}z&tj�|�r4t|�\}}|�|�Wqtk
rNYqYqXq|S)zEReturn a set containing all existing file system items from sys.path.)rrrr�existsr
rr)�d�item�_�itemcaserrr�_init_pathinfo�s
r(cCsr|dkrt�}d}nd}tj�||�}zt�t�|��}Wntk
rPYdSX|��t|�D]�\}}|�	d�rvqbzZ|�	d�r�t
|�Wqb|��}t||�\}}	|	|kr�tj�
|�r�tj�|�|�|	�Wqbtk
�rVtd�|d|�tjd�d	dl}
|
jt���D](}|��D]}td
|tjd��q�qtdtjd�Y�qZYqbXqbW5QRX|�rnd}|S)z�Process a .pth file within the site-packages directory:
       For each line in the file, either combine it with sitedir to a path
       and add that to known_paths, or execute it if it starts with 'import '.
    NTF�#)zimport zimport	z"Error processing line {:d} of {}:
�)�filerz  z
Remainder of file ignored)r(rrr�io�
TextIOWrapper�	open_coder�	enumerate�
startswith�exec�rstripr
r#rrr�	Exception�print�format�stderr�	traceback�format_exception�exc_info�
splitlines)�sitedir�namer �reset�fullname�f�n�liner
r!r7�recordrrr�
addpackage�sF

�rCcCs�|dkrt�}d}nd}t|�\}}||krBtj�|�|�|�zt�|�}Wntk
rfYdSXdd�|D�}t	|�D]}t
|||�q~|r�d}|S)zTAdd 'sitedir' argument to sys.path if missing and handle .pth files in
    'sitedir'NTFcSsg|]}|�d�r|�qS)z.pth)�endswith)�.0r<rrr�
<listcomp>�s
zaddsitedir.<locals>.<listcomp>)r(r
rrrrr�listdirr�sortedrC)r;r r=�sitedircase�namesr<rrr�
addsitedir�s$
rKcCs`tjjrdSttd�r4ttd�r4t��t��kr4dSttd�r\ttd�r\t��t��kr\dSdS)a,Check if user site directory is safe for inclusion

    The function tests for the command line flag (including environment var),
    process uid/gid equal to effective uid/gid.

    None: Disabled for security reasons
    False: Disabled by user (command line option)
    True: Safe and enabled
    F�getuid�geteuidN�getgid�getegidT)	r�flags�no_user_site�hasattrrrMrLrOrNrrrr�check_enableusersite�s
rScCsztj�dd�}|r|Sdd�}tjdkrBtj�d�p6d}||d�Stjdkrptjrp|dd	tjd
tjdd��S|dd�S)
N�PYTHONUSERBASEcWstj�tjj|��Sr)rr�
expanduserr)�argsrrr�joinusersz_getuserbase.<locals>.joinuser�nt�APPDATA�~�Python�darwin�Libraryz%d.%d�z.local)r�environ�getr<r�platform�
_framework�version_info)�env_baserW�baserrr�_getuserbase�s


�rfcCsdtj}tjdkr,|�d|d�|d�d�StjdkrFtjrF|�d�S|�d|d�d	|d�d
�S)NrXz\Pythonrr*z\site-packagesr\z/lib/python/site-packagesz/lib/python�.z/site-packages)rrcrr<rarb)�userbase�versionrrr�	_get_paths

rjcCstdkrt�atS)z�Returns the `user base` directory path.

    The `user base` directory can be used to store data. If the global
    variable ``USER_BASE`` is not initialized yet, this function will also set
    it.
    N)�	USER_BASErfrrrr�getuserbasesrlcCst�}tdkrt|�atS)z�Returns the user-specific site-packages directory path.

    If the global variable ``USER_SITE`` is not initialized yet, this
    function will also set it.
    N)rl�	USER_SITErj)rhrrr�getusersitepackages)srncCs$t�}tr tj�|�r t||�|S)z�Add a per user site-package to sys.path

    Each user has its own python directory with site-packages in the
    home directory.
    )rn�ENABLE_USER_SITErr�isdirrK)r �	user_siterrr�addusersitepackages7s
rrcCsg}t�}|dkrt}|D]�}|r||kr,q|�|�tjdkr�dtjksVtjtjkr||�	tj
�|ddtjdd�d��|�	tj
�|ddtjdd�d	��|�	tj
�|dd
d	��|�	tj
�|ddtjdd�d	��q|�	|�|�	tj
�|dd��q|S)aReturns a list containing all global site-packages directories.

    For each directory present in ``prefixes`` (or the global ``PREFIXES``),
    this function will find its `site-packages` subdirectory depending on the
    system environment, and will return a list of full paths.
    N�/ZVIRTUAL_ENV�lib�python�z
site-packagesz	local/libz
dist-packages�python3)
r�PREFIXESrr�sepr_r�base_prefix�prefixrrrri)�prefixes�sitepackages�seenr{rrr�getsitepackagesEs:

����
rcCs(t|�D]}tj�|�rt||�q|S)zAdd site-packages to sys.path)rrrrprK)r r|r;rrr�addsitepackagesksr�cCs4tjdkrd}nd}t�d|�t_t�d|�t_dS)z�Define new builtins 'quit' and 'exit'.

    These are objects which make the interpreter exit when called.
    The repr of each object contains a hint at how it works.

    �\zCtrl-Z plus ReturnzCtrl-D (i.e. EOF)�quit�exitN)rry�
_sitebuiltins�Quitter�builtinsr�r�)�eofrrr�setquitss

r�cCs�t�dtj�t_tjdd�dkr2t�dd�t_nt�dd�t_gg}}ttd�r�tj	�
tj�}|�d	d
g�|�tj	�
|tj�|tjg�t�dd||�t_dS)
z)Set 'copyright' and 'credits' in builtins�	copyrightN��java�creditsz?Jython is maintained by the Jython developers (www.jython.org).z�    Thanks to CWI, CNRI, BeOpen.com, Zope Corporation and a cast of thousands
    for supporting Python development.  See www.python.org for more information.rzLICENSE.txtZLICENSE�licensez'See https://www.python.org/psf/license/)r��_Printerrr�r�rar�rRrr�dirnamer�extendr�pardir�curdirr�)�files�dirs�hererrr�setcopyright�s$�

�r�cCst��t_dSr)r��_Helperr��helprrrr�	sethelper�sr�cCsdd�}|t_dS)ajEnable default readline configuration on interactive prompts, by
    registering a sys.__interactivehook__.

    If the readline module can be imported, the hook will set the Tab key
    as completion key and register ~/.python_history as history file.
    This can be overridden in the sitecustomize or usercustomize module,
    or in a PYTHONSTARTUP file.
    cs�ddl}zddl�ddl}Wntk
r2YdSXt�dd�}|dk	r\d|kr\��d�n
��d�z���Wntk
r�YnX���dkr�t	j
�t	j
�d�d��z��
��Wntk
r�YnX��fd	d
�}|�|�dS)Nr�__doc__�Zlibeditzbind ^I rl_completez
tab: completerZz.python_historycs(z����Wntk
r"YnXdSr)�write_history_filerr��history�readlinerr�
write_history�szCenablerlcompleter.<locals>.register_readline.<locals>.write_history)�atexitr��rlcompleter�ImportErrorr�parse_and_bind�read_init_filer�get_current_history_lengthrrrrU�read_history_file�register)r�r��readline_docr�rr�r�register_readline�s0
�z,enablerlcompleter.<locals>.register_readlineN)r�__interactivehook__)r�rrr�enablerlcompleter�s	0r�c	CsHtj}tjdkr*d|kr*tjd}t_ntj}tj�tj�|��\}}tj�	|�}dt_
d}dd�tj�||�tj�||�fD�}|�rD|d}d}	t|dd	��\}
|
D]P}d
|kr�|�
d
�\}}}
|����}|
��}
|dkr�|
��}	q�|dkr�|
t_
q�W5QRX|t_t_t|tjg�|	dk�r8t�dtj�ntjgad
a|S)Nr\Z__PYVENV_LAUNCHER__z
pyvenv.cfgcSsg|]}tj�|�r|�qSr)rr�isfile)rE�conffilerrrrF�s�zvenv.<locals>.<listcomp>r�truezutf-8)�encoding�=zinclude-system-site-packages�homeF)rr_rra�_base_executable�
executabler�splitrr��_homer�open�	partition�strip�lowerr{�exec_prefixr�rx�insertro)r �envr��exe_dirr&�site_prefix�
conf_basename�candidate_confs�virtual_conf�system_siter?rA�key�valuerrr�venv�sB��

r�c
Cs�zBzddl}Wn0tk
r>}z|jdkr,n�W5d}~XYnXWnRtk
r�}z4tjjrltjt���ntj	�
d|jj|f�W5d}~XYnXdS)z,Run custom site specific code, if available.rN�
sitecustomizez@Error in sitecustomize; set PYTHONVERBOSE for traceback:
%s: %s
)
r�r�r<r3rrP�verbose�
excepthookr9r6�write�	__class__�__name__)r��exc�errrrr�execsitecustomize
s

��r�c
Cs�zBzddl}Wn0tk
r>}z|jdkr,n�W5d}~XYnXWnRtk
r�}z4tjjrltjt���ntj	�
d|jj|f�W5d}~XYnXdS)z,Run custom user specific code, if available.rN�
usercustomizez@Error in usercustomize; set PYTHONVERBOSE for traceback:
%s: %s
)
r�r�r<r3rrPr�r�r9r6r�r�r�)r�r�r�rrr�execusercustomize!s

��r�cCs~tjdd�}t�}|tjkr$t�t|�}tdkr:t�at|�}t|�}t	�t
�t�tjj
sjt�t�trzt�dS)z�Add standard site-specific directories to the module search path.

    This function is called automatically when this module is imported,
    unless the python interpreter was started with the -S flag.
    N)rrr"rr�rorSrrr�r�r�r�rP�isolatedr�r�r�)�	orig_pathr rrr�main5s"
r�cCs\d}tjdd�}|s�t�}t�}td�tjD]}td|f�q0td�td|tj�|�rbdndf�td	|tj�|�r�dndf�td
t�t�	d�g}d|kr�|�
t�d
|kr�|�
t�|�r(ttj
�|��tr�t�	d�n6tdk�rt�	d�n tdk�rt�	d�n
t�	d�n0ddl}t|�|tjdtj
f��t�	d�dS)Na�    %s [--user-base] [--user-site]

    Without arguments print some useful information
    With arguments print the value of USER_BASE and/or USER_SITE separated
    by '%s'.

    Exit codes with --user-base or --user-site:
      0 - user site directory is enabled
      1 - user site directory is disabled by user
      2 - uses site directory is disabled by super user
          or for security reasons
     >2 - unknown error
    r*zsys.path = [z    %r,�]zUSER_BASE: %r (%s)r#z
doesn't existzUSER_SITE: %r (%s)zENABLE_USER_SITE: %rrz--user-basez--user-siteFr^rv�
)r�argvrlrnr4rrrpror�rrkrm�pathsepr�textwrap�dedent)r�rV�	user_baserqr
�bufferr�rrr�_scriptWsD
��




r��__main__)N)N)N)&r�rrr�r�r,r{r�rxrormrkr
rr"r(rCrKrSrfrjrlrnrrrr�r�r�r�r�r�r�r�r�rP�no_siter�r�rrrr�<module>sHM	
*
 

&
;4
3
X��@s.zddlZWnek
r Yn
Xe��dS)�N)�apport_python_hook�ImportError�install�rr�#/usr/lib/python3.8/sitecustomize.py�<module>s.�KTDlll��������ZZf�?f�uca__module__a__class__a__name__a__package__a__metaclass__a__abstractmethods__a__dict__a__doc__a__file__a__path__a__enter__a__exit__a__builtins__a__all__a__init__a__cmp__a__iter__a__compiled__ainspectacompilearangeaopenasuperasumaformata__import__abytearrayastaticmethodaclassmethodakeysanameaglobalsalocalsafromlistalevelareadarbw/w\agetattra__cached__a__loader__aprintaendafileabytesw.asendathrowacloseasiteatypealenarepraintaitera__spec__a_initializingaparentatypesa__main__a__class_getitem__u/usr/bin/python3u/usr.OpenSSL.SSL!��a_problemsa_raise_current_erroraErrorapopTlu
        Raise an exception from the OpenSSL error queue or that was previously
        captured whe running a callback.
        a_CallbackExceptionHelpera__init__awrapsawrapperu_VerifyHelper.__init__.<locals>.wrappera_ffiacallbackuint (*)(int, X509_STORE_CTX *)a_libaX509_STORE_CTX_get_current_certaX509_up_refaX509a_from_raw_x509_ptraX509_STORE_CTX_get_erroraX509_STORE_CTX_get_error_depthaSSL_get_ex_data_X509_STORE_CTX_idxaX509_STORE_CTX_get_ex_dataaConnectiona_reverse_mappingaselfaappendlaX509_STORE_CTX_set_erroraX509_V_OKlu_NpnAdvertiseHelper.__init__.<locals>.wrapperuint (*)(SSL *, const unsigned char **, unsigned int *, void *)cajoinachainafrom_iterableanewuunsigned int *uunsigned char[]a_npn_advertise_callback_argslaint2byteu<genexpr>u_NpnAdvertiseHelper.__init__.<locals>.wrapper.<locals>.<genexpr>u_NpnSelectHelper.__init__.<locals>.wrapperuint (*)(SSL *, unsigned char **, unsigned char *, const unsigned char *, unsigned int, void *)abuffer:nnnainstraindexbytesaprotolistuunsigned char *a_npn_select_callback_argsu_ALPNSelectHelper.__init__.<locals>.wrappera_binary_typeuALPN callback must return a bytestring.a_alpn_select_callback_argsu_OCSPServerCallbackHelper.__init__.<locals>.wrapperuint (*)(SSL *, void *)aNULLafrom_handleuOCSP callback must return a bytestring.laOPENSSL_mallocaSSL_set_tlsext_status_ocsp_respu_OCSPClientCallbackHelper.__init__.<locals>.wrapperTuunsigned char **aSSL_get_tlsext_status_ocsp_respl��������ainteger_typesafilenouargument must be an int, or have a fileno() method.ufile descriptor cannot be a negative integer (%i)astringaSSLeay_versionu
    Return a string describing the version of OpenSSL in use.

    :param type: One of the :const:`SSLEAY_` constants defined in this module.
    a_requires_decoratoru_make_requires.<locals>._requires_decoratoru
    Builds a decorator that ensures that functions that rely on OpenSSL
    functions that are not present in this build raise NotImplementedError,
    rather than AttributeError coming out of cryptography.

    :param flag: A cryptography flag that guards the functions, e.g.
        ``Cryptography_HAS_NEXTPROTONEG``.
    :param error: The string to be used in the exception if the flag is false.
    aflagaexplodeu_make_requires.<locals>._requires_decorator.<locals>.explodeaerrorutoo many values to unpack (expected 2)uContext.<genexpr>umethod must be an integera_methodsuNo such protocola_openssl_assertaSSL_CTX_newagcaSSL_CTX_freeaSSL_CTX_set_ecdh_autoa_contexta_passphrase_helpera_passphrase_callbacka_passphrase_userdataa_verify_helpera_verify_callbacka_info_callbacka_tlsext_servername_callbacka_app_dataa_npn_advertise_helpera_npn_advertise_callbacka_npn_select_helpera_npn_select_callbacka_alpn_select_helpera_alpn_select_callbacka_ocsp_helpera_ocsp_callbacka_ocsp_dataaset_modeaSSL_MODE_ENABLE_PARTIAL_WRITEa_path_stringaSSL_CTX_load_verify_locationsu
        Let SSL know where we can find trusted certificates for the certificate
        chain.  Note that the certificates have to be in PEM format.

        If capath is passed, it must be a directory prepared using the
        ``c_rehash`` tool included with OpenSSL.  Either, but not both, of
        *pemfile* or *capath* may be :data:`None`.

        :param cafile: In which file we can find the certificates (``bytes`` or
            ``unicode``).
        :param capath: In which directory we can find the certificates
            (``bytes`` or ``unicode``).

        :return: None
        uContext._wrap_callback.<locals>.wrappera_PassphraseHelperaFILETYPE_PEMDamore_argsatruncatetpacallableucallback must be callablea_wrap_callbackaSSL_CTX_set_default_passwd_cbu
        Set the passphrase callback.  This function will be called
        when a private key with a passphrase is loaded.

        :param callback: The Python callback to use.  This must accept three
            positional arguments.  First, an integer giving the maximum length
            of the passphrase it may return.  If the returned passphrase is
            longer than this, it will be truncated.  Second, a boolean value
            which will be true if the user should be prompted for the
            passphrase twice and the callback should verify that the two values
            supplied are equal. Third, the value given as the *userdata*
            parameter to :meth:`set_passwd_cb`.  The *callback* must return
            a byte string. If an error occurs, *callback* should return a false
            value (e.g. an empty string).
        :param userdata: (optional) A Python object which will be given as
                         argument to the callback
        :return: None
        aSSL_CTX_set_default_verify_pathsaX509_get_default_cert_dir_envadecodeTaasciiaX509_get_default_cert_file_enva_check_env_vars_setaX509_get_default_cert_diraX509_get_default_cert_filea_CRYPTOGRAPHY_MANYLINUX1_CA_DIRa_CRYPTOGRAPHY_MANYLINUX1_CA_FILEa_fallback_default_verify_pathsa_CERTIFICATE_FILE_LOCATIONSa_CERTIFICATE_PATH_LOCATIONSu
        Specify that the platform provided CA certificates are to be used for
        verification purposes. This method has some caveats related to the
        binary wheels that cryptography (pyOpenSSL's primary dependency) ships:

        *   macOS will only load certificates using this method if the user has
            the ``openssl@1.1`` `Homebrew <https://brew.sh>`_ formula installed
            in the default location.
        *   Windows will not work.
        *   manylinux1 cryptography wheels will work on most common Linux
            distributions in pyOpenSSL 17.1.0 and above.  pyOpenSSL detects the
            manylinux1 wheel and attempts to load roots via a fallback path.

        :return: None
        aosaenvironagetu
        Check to see if the default cert dir/file environment vars are present.

        :return: bool
        apathaisfileaload_verify_locationsaisdiru
        Default verify paths are based on the compiled version of OpenSSL.
        However, when pyca/cryptography is compiled as a manylinux1 wheel
        that compiled location can potentially be wrong. So, like Go, we
        will try a predefined set of paths and attempt to load roots
        from there.

        :return: None
        aSSL_CTX_use_certificate_chain_fileu
        Load a certificate chain from a file.

        :param certfile: The name of the certificate chain file (``bytes`` or
            ``unicode``).  Must be PEM encoded.

        :return: None
        ufiletype must be an integeraSSL_CTX_use_certificate_fileu
        Load a certificate from a file

        :param certfile: The name of the certificate file (``bytes`` or
            ``unicode``).
        :param filetype: (optional) The encoding of the file, which is either
            :const:`FILETYPE_PEM` or :const:`FILETYPE_ASN1`.  The default is
            :const:`FILETYPE_PEM`.

        :return: None
        ucert must be an X509 instanceaSSL_CTX_use_certificatea_x509u
        Load a certificate from a X509 object

        :param cert: The X509 object
        :return: None
        ucertobj must be an X509 instanceaX509_dupaSSL_CTX_add_extra_chain_certaX509_freeu
        Add certificate to chain

        :param certobj: The X509 certificate object to add to the chain
        :return: None
        araise_if_problema_UNSPECIFIEDaSSL_CTX_use_PrivateKey_filea_raise_passphrase_exceptionu
        Load a private key from a file

        :param keyfile: The name of the key file (``bytes`` or ``unicode``)
        :param filetype: (optional) The encoding of the file, which is either
            :const:`FILETYPE_PEM` or :const:`FILETYPE_ASN1`.  The default is
            :const:`FILETYPE_PEM`.

        :return: None
        aPKeyupkey must be a PKey instanceaSSL_CTX_use_PrivateKeya_pkeyu
        Load a private key from a PKey object

        :param pkey: The PKey object
        :return: None
        aSSL_CTX_check_private_keyu
        Check if the private key (loaded with :meth:`use_privatekey`) matches
        the certificate (loaded with :meth:`use_certificate`)

        :return: :data:`None` (raises :exc:`Error` if something's wrong)
        aSSL_load_client_CA_filea_text_to_bytes_and_warnacafileaSSL_CTX_set_client_CA_listu
        Load the trusted certificates that will be sent to the client.  Does
        not actually imply any of the certificates are trusted; that must be
        configured separately.

        :param bytes cafile: The path to a certificates file in PEM format.
        :return: None
        abufaSSL_CTX_set_session_id_contextu
        Set the session id to *buf* within which a session can be reused for
        this Context object.  This is needed when doing session resumption,
        because there is no way for a stored session to know which Context
        object it is associated with.

        :param bytes buf: The session id.

        :returns: None
        umode must be an integeraSSL_CTX_set_session_cache_modeu
        Set the behavior of the session cache used by all connections using
        this Context.  The previously set mode is returned.  See
        :const:`SESS_CACHE_*` for details about particular modes.

        :param mode: One or more of the SESS_CACHE_* flags (combine using
            bitwise or)
        :returns: The previously set caching mode.

        .. versionadded:: 0.14
        aSSL_CTX_get_session_cache_modeu
        Get the current session cache mode.

        :returns: The currently used cache mode.

        .. versionadded:: 0.14
        a_VerifyHelperaSSL_CTX_set_verifyu
        et the verification flags for this Context object to *mode* and specify
        that *callback* should be used for verification callbacks.

        :param mode: The verify mode, this should be one of
            :const:`VERIFY_NONE` and :const:`VERIFY_PEER`. If
            :const:`VERIFY_PEER` is used, *mode* can be OR:ed with
            :const:`VERIFY_FAIL_IF_NO_PEER_CERT` and
            :const:`VERIFY_CLIENT_ONCE` to further control the behaviour.
        :param callback: The Python callback to use.  This should take five
            arguments: A Connection object, an X509 object, and three integer
            variables, which are in turn potential error number, error depth
            and return code. *callback* should return True if verification
            passes and False otherwise.
        :return: None

        See SSL_CTX_set_verify(3SSL) for further details.
        udepth must be an integeraSSL_CTX_set_verify_depthu
        Set the maximum depth for the certificate chain verification that shall
        be allowed for this Context object.

        :param depth: An integer specifying the verify depth
        :return: None
        aSSL_CTX_get_verify_modeu
        Retrieve the Context object's verify mode, as set by
        :meth:`set_verify`.

        :return: The verify mode
        aSSL_CTX_get_verify_depthu
        Retrieve the Context object's verify depth, as set by
        :meth:`set_verify_depth`.

        :return: The verify depth
        aBIO_new_filedraBIO_freeaPEM_read_bio_DHparamsaDH_freeaSSL_CTX_set_tmp_dhu
        Load parameters for Ephemeral Diffie-Hellman

        :param dhfile: The file to load EDH parameters from (``bytes`` or
            ``unicode``).

        :return: None
        aSSL_CTX_set_tmp_ecdha_to_EC_KEYu
        Select a curve to use for ECDHE key exchange.

        :param curve: A curve object to use as returned by either
            :meth:`OpenSSL.crypto.get_elliptic_curve` or
            :meth:`OpenSSL.crypto.get_elliptic_curves`.

        :return: None
        acipher_listucipher_list must be a byte string.aSSL_CTX_set_cipher_listaget_cipher_listLaTLS_AES_256_GCM_SHA384aTLS_CHACHA20_POLY1305_SHA256aTLS_AES_128_GCM_SHA256u
        Set the list of ciphers to be used in this context.

        See the OpenSSL manual for more information (e.g.
        :manpage:`ciphers(1)`).

        :param bytes cipher_list: An OpenSSL cipher string.
        :return: None
        ask_X509_NAME_new_nullaX509Nameuclient CAs must be X509Name objects, not %s objectsa__name__aX509_NAME_dupa_nameask_X509_NAME_pushaname_stackaX509_NAME_freeask_X509_NAME_freeu
        Set the list of preferred client certificate signers for this server
        context.

        This list of certificate authorities will be sent to the client when
        the server requests a client certificate.

        :param certificate_authorities: a sequence of X509Names.
        :return: None

        .. versionadded:: 0.10
        ucertificate_authority must be an X509 instanceaSSL_CTX_add_client_CAu
        Add the CA certificate to the list of preferred signers for this
        context.

        The list of certificate authorities will be sent to the client when the
        server requests a client certificate.

        :param certificate_authority: certificate authority's X509 certificate.
        :return: None

        .. versionadded:: 0.10
        utimeout must be an integeraSSL_CTX_set_timeoutu
        Set the timeout for newly created sessions for this Context object to
        *timeout*.  The default value is 300 seconds. See the OpenSSL manual
        for more information (e.g. :manpage:`SSL_CTX_set_timeout(3)`).

        :param timeout: The timeout in (whole) seconds
        :return: The previous session timeout
        aSSL_CTX_get_timeoutu
        Retrieve session timeout, as set by :meth:`set_timeout`. The default
        is 300 seconds.

        :return: The session timeout
        uContext.set_info_callback.<locals>.wrapperuvoid (*)(const SSL *, int, int)aSSL_CTX_set_info_callbacku
        Set the information callback to *callback*. This function will be
        called from time to time during SSL handshakes.

        :param callback: The Python callback to use.  This should take three
            arguments: a Connection object and two integers.  The first integer
            specifies where in the SSL handshake the function was called, and
            the other the return code from a (possibly failed) internal
            function call.
        :return: None
        u
        Get the application data (supplied via :meth:`set_app_data()`)

        :return: The application data
        u
        Set the application data (will be returned from get_app_data())

        :param data: Any Python object
        :return: None
        aSSL_CTX_get_cert_storeaX509Storea__new__a_storeu
        Get the certificate store for the context.  This can be used to add
        "trusted" certificates without using the
        :meth:`load_verify_locations` method.

        :return: A X509Store object or None if it does not have one.
        uoptions must be an integeraSSL_CTX_set_optionsu
        Add options. Options set before are not cleared!
        This method should be used with the :const:`OP_*` constants.

        :param options: The options to add.
        :return: The new option bitmask.
        aSSL_CTX_set_modeu
        Add modes via bitmask. Modes set before are not cleared!  This method
        should be used with the :const:`MODE_*` constants.

        :param mode: The mode to add.
        :return: The new mode bitmask.
        uContext.set_tlsext_servername_callback.<locals>.wrapperuint (*)(SSL *, int *, void *)aSSL_CTX_set_tlsext_servername_callbacku
        Specify a callback function to be called when clients specify a server
        name.

        :param callback: The callback function.  It will be invoked with one
            argument, the Connection instance.

        .. versionadded:: 0.13
        uprofiles must be a byte string.aSSL_CTX_set_tlsext_use_srtpu
        Enable support for negotiating SRTP keying material.

        :param bytes profiles: A colon delimited list of protection profile
            names, like ``b'SRTP_AES128_CM_SHA1_80:SRTP_AES128_CM_SHA1_32'``.
        :return: None
        a_NpnAdvertiseHelperaSSL_CTX_set_next_protos_advertised_cbu
        Specify a callback function that will be called when offering `Next
        Protocol Negotiation
        <https://technotes.googlecode.com/git/nextprotoneg.html>`_ as a server.

        :param callback: The callback function.  It will be invoked with one
            argument, the :class:`Connection` instance.  It should return a
            list of bytestrings representing the advertised protocols, like
            ``[b'http/1.1', b'spdy/2']``.

        .. versionadded:: 0.15
        a_NpnSelectHelperaSSL_CTX_set_next_proto_select_cbu
        Specify a callback function that will be called when a server offers
        Next Protocol Negotiation options.

        :param callback: The callback function.  It will be invoked with two
            arguments: the Connection, and a list of offered protocols as
            bytestrings, e.g. ``[b'http/1.1', b'spdy/2']``.  It should return
            one of those bytestrings, the chosen protocol.

        .. versionadded:: 0.15
        aSSL_CTX_set_alpn_protosu
        Specify the protocols that the client is prepared to speak after the
        TLS connection has been negotiated using Application Layer Protocol
        Negotiation.

        :param protos: A list of the protocols to be offered to the server.
            This list should be a Python list of bytestrings representing the
            protocols to offer, e.g. ``[b'http/1.1', b'spdy/2']``.
        uContext.set_alpn_protos.<locals>.<genexpr>a_ALPNSelectHelperaSSL_CTX_set_alpn_select_cbu
        Specify a callback function that will be called on the server when a
        client offers protocols using ALPN.

        :param callback: The callback function.  It will be invoked with two
            arguments: the Connection, and a list of offered protocols as
            bytestrings, e.g ``[b'http/1.1', b'spdy/2']``.  It should return
            one of those bytestrings, the chosen protocol.
        anew_handleaSSL_CTX_set_tlsext_status_cbaSSL_CTX_set_tlsext_status_argu
        This internal helper does the common work for
        ``set_ocsp_server_callback`` and ``set_ocsp_client_callback``, which is
        almost all of it.
        a_OCSPServerCallbackHelpera_set_ocsp_callbacku
        Set a callback to provide OCSP data to be stapled to the TLS handshake
        on the server side.

        :param callback: The callback function. It will be invoked with two
            arguments: the Connection, and the optional arbitrary data you have
            provided. The callback must return a bytestring that contains the
            OCSP data to staple to the handshake. If no OCSP data is available
            for this connection, return the empty bytestring.
        :param data: Some opaque data that will be passed into the callback
            function when called. This can be used to avoid needing to do
            complex data lookups or to keep track of what context is being
            used. This parameter is optional.
        a_OCSPClientCallbackHelperu
        Set a callback to validate OCSP data stapled to the TLS handshake on
        the client side.

        :param callback: The callback function. It will be invoked with three
            arguments: the Connection, a bytestring containing the stapled OCSP
            assertion, and the optional arbitrary data you have provided. The
            callback must return a boolean that indicates the result of
            validating the OCSP data: ``True`` if the OCSP data is valid and
            the certificate can be trusted, or ``False`` if either the OCSP
            data is invalid or the certificate has been revoked.
        :param data: Some opaque data that will be passed into the callback
            function when called. This can be used to avoid needing to do
            complex data lookups or to keep track of what context is being
            used. This parameter is optional.
        aContextucontext must be a Context instanceaSSL_newaSSL_freea_sslaSSL_set_modeaSSL_MODE_AUTO_RETRYa_socketaBIO_newaBIO_s_mema_into_ssla_from_sslaSSL_set_bioaSSL_set_fda_asFileDescriptoru
        Create a new Connection object, using the given OpenSSL.SSL.Context
        instance and socket.

        :param context: An SSL Context to use for this connection
        :param socket: The socket to use for transport layer
        u'%s' object has no attribute '%s'u
        Look up attributes on the wrapped socket object if they are not found
        on the Connection object.
        aSSL_get_erroraSSL_ERROR_WANT_READaWantReadErroraSSL_ERROR_WANT_WRITEaWantWriteErroraSSL_ERROR_ZERO_RETURNaZeroReturnErroraSSL_ERROR_WANT_X509_LOOKUPaWantX509LookupErroraSSL_ERROR_SYSCALLaERR_peek_erroraerrnoaSysCallErroraerrorcodeTl��������uUnexpected EOFaSSL_ERROR_NONEu
        Retrieve the :class:`Context` object associated with this
        :class:`Connection`.
        aSSL_set_SSL_CTXu
        Switch this connection to a new session context.

        :param context: A :class:`Context` instance giving the new session
            context to use.
        aSSL_get_servernameaTLSEXT_NAMETYPE_host_nameu
        Retrieve the servername extension value if provided in the client hello
        message, or None if there wasn't one.

        :return: A byte string giving the server name or :data:`None`.

        .. versionadded:: 0.13
        uname must be a byte stringduname must not contain NUL byteaSSL_set_tlsext_host_nameu
        Set the value of the servername extension to send in the client hello.

        :param name: A byte string giving the name.

        .. versionadded:: 0.13
        aSSL_pendingu
        Get the number of bytes that can be safely read from the SSL buffer
        (**not** the underlying transport buffer).

        :return: The number of bytes available in the receive buffer.
        atobytesa_bufferudata must be a memoryview, buffer or byte stringl���uCannot send more than 2**31-1 bytes at once.aSSL_writea_raise_ssl_erroru
        Send data on the connection. NOTE: If you get one of the WantRead,
        WantWrite or WantX509Lookup exceptions on this, you have to call the
        method again with the SAME buffer.

        :param buf: The string, buffer or memoryview to send
        :param flags: (optional) Included for compatibility with the socket
                      API, the value is ignored
        :return: The number of bytes written
        ubuf must be a memoryview, buffer or byte stringuchar[]aleft_to_sendadataatotal_sentaminu
        Send "all" data on the connection. This calls send() repeatedly until
        all data is sent. If an error occurs, it's impossible to tell how much
        data has been sent.

        :param buf: The string, buffer or memoryview to send
        :param flags: (optional) Included for compatibility with the socket
                      API, the value is ignored
        :return: The number of bytes written
        a_no_zero_allocatorasocketaMSG_PEEKaSSL_peekaSSL_readu
        Receive data on the connection.

        :param bufsiz: The maximum number of bytes to read
        :param flags: (optional) The only supported flag is ``MSG_PEEK``,
            all other flags are ignored.
        :return: The string read from the Connection
        u
        Receive data on the connection and copy it directly into the provided
        buffer, rather than creating a new string.

        :param buffer: The buffer to copy into.
        :param nbytes: (optional) The maximum number of bytes to read into the
            buffer. If not present, defaults to the size of the buffer. If
            larger than the size of the buffer, is reduced to the size of the
            buffer.
        :param flags: (optional) The only supported flag is ``MSG_PEEK``,
            all other flags are ignored.
        :return: The number of bytes read into the buffer.
        aBIO_should_retryaBIO_should_readaBIO_should_writeaBIO_should_io_specialuunknown bio failureuConnection sock was not Noneubufsiz must be an integeraBIO_reada_handle_bio_errorsaresultu
        If the Connection was created with a memory BIO, this method can be
        used to read bytes from the write end of that memory BIO.  Many
        Connection methods will add bytes which must be read in this manner or
        the buffer will eventually fill up and the Connection will be able to
        take no further actions.

        :param bufsiz: The maximum number of bytes to read
        :return: The string read.
        aBIO_writeu
        If the Connection was created with a memory BIO, this method can be
        used to add bytes to the read end of that memory BIO.  The Connection
        can then read the bytes (for example, in response to a call to
        :meth:`recv`).

        :param buf: The string to put into the memory BIO.
        :return: The number of bytes written
        arenegotiate_pendingaSSL_renegotiateu
        Renegotiate the session.

        :return: True if the renegotiation can be started, False otherwise
        :rtype: bool
        aSSL_do_handshakeu
        Perform an SSL handshake (usually called after :meth:`renegotiate` or
        one of :meth:`set_accept_state` or :meth:`set_accept_state`). This can
        raise the same exceptions as :meth:`send` and :meth:`recv`.

        :return: None.
        aSSL_renegotiate_pendingu
        Check if there's a renegotiation in progress, it will return False once
        a renegotiation is finished.

        :return: Whether there's a renegotiation in progress
        :rtype: bool
        aSSL_total_renegotiationsu
        Find out the total number of renegotiations.

        :return: The number of renegotiations.
        :rtype: int
        aSSL_set_connect_stateaconnectu
        Call the :meth:`connect` method of the underlying socket and set up SSL
        on the socket, using the :class:`Context` object supplied to this
        :class:`Connection` object at creation.

        :param addr: A remote address
        :return: What the socket's connect method returns
        aconnect_exaset_connect_stateu
        Call the :meth:`connect_ex` method of the underlying socket and set up
        SSL on the socket, using the Context object supplied to this Connection
        object at creation. Note that if the :meth:`connect_ex` method of the
        socket doesn't return 0, SSL won't be initialized.

        :param addr: A remove address
        :return: What the socket's connect_ex method returns
        aacceptaset_accept_stateu
        Call the :meth:`accept` method of the underlying socket and set up SSL
        on the returned socket, using the Context object supplied to this
        :class:`Connection` object at creation.

        :return: A *(conn, addr)* pair where *conn* is the new
            :class:`Connection` object created, and *address* is as returned by
            the socket's :meth:`accept`.
        aBIO_set_mem_eof_returnu
        If the Connection was created with a memory BIO, this method can be
        used to indicate that *end of file* has been reached on the read end of
        that memory BIO.

        :return: None
        aSSL_shutdownu
        Send the shutdown message to the Connection.

        :return: True if the shutdown completed successfully (i.e. both sides
                 have sent closure alerts), False otherwise (in which case you
                 call :meth:`recv` or :meth:`send` when the connection becomes
                 readable/writeable).
        acountaSSL_get_cipher_listaciphersa_nativeu
        Retrieve the list of ciphers used by the Connection object.

        :return: A list of native cipher strings.
        aSSL_get_client_CA_listask_X509_NAME_numask_X509_NAME_valueaca_namesu
        Get CAs whose certificates are suggested for client authentication.

        :return: If this is a server connection, the list of certificate
            authorities that will be sent or has been sent to the client, as
            controlled by this :class:`Connection`'s :class:`Context`.

            If this is a client connection, the list will be empty until the
            connection with the server is established.

        .. versionadded:: 0.10
        uCannot make file object of OpenSSL.SSL.Connectionu
        The makefile() method is not implemented, since there is no dup
        semantics for SSL connections

        :raise: NotImplementedError
        u
        Retrieve application data as set by :meth:`set_app_data`.

        :return: The application data
        u
        Set application data

        :param data: The application data
        :return: None
        aSSL_get_shutdownu
        Get the shutdown state of the Connection.

        :return: The shutdown state, a bitvector of SENT_SHUTDOWN,
            RECEIVED_SHUTDOWN.
        ustate must be an integeraSSL_set_shutdownu
        Set the shutdown state of the Connection.

        :param state: bitvector of SENT_SHUTDOWN, RECEIVED_SHUTDOWN.
        :return: None
        aSSL_state_string_longu
        Retrieve a verbose string detailing the state of the Connection.

        :return: A string representing the state
        :rtype: bytes
        aSSL_get_sessionaSSL_get_server_randomu
        Retrieve the random value used with the server hello message.

        :return: A string representing the state
        aSSL_get_client_randomu
        Retrieve the random value used with the client hello message.

        :return: A string representing the state
        aSSL_SESSION_get_master_keyu
        Retrieve the value of the master key for this session.

        :return: A string representing the state
        aSSL_export_keying_materialu
        Obtain keying material for application use.

        :param: label - a disambiguating label string as described in RFC 5705
        :param: olen - the length of the exported key material in bytes
        :param: context - a per-association context value
        :return: the exported key material bytes or None
        ashutdownu
        Call the :meth:`shutdown` method of the underlying socket.
        See :manpage:`shutdown(2)`.

        :return: What the socket's shutdown() method returns
        aSSL_get_certificateu
        Retrieve the local certificate (if any)

        :return: The local certificate
        aSSL_get_peer_certificateu
        Retrieve the other side's certificate (if any)

        :return: The peer's certificate
        aSSL_get_peer_cert_chainask_X509_numask_X509_valueacert_stacku
        Retrieve the other side's certificate (if any)

        :return: A list of X509 instances giving the peer's certificate chain,
                 or None if it does not have one.
        aSSL_want_readu
        Checks if more data has to be read from the transport layer to complete
        an operation.

        :return: True iff more data has to be read
        aSSL_want_writeu
        Checks if there is data to write to the transport layer to complete an
        operation.

        :return: True iff there is data to write
        aSSL_set_accept_stateu
        Set the connection to work in server mode. The handshake will be
        handled automatically by read/write.

        :return: None
        u
        Set the connection to work in client mode. The handshake will be
        handled automatically by read/write.

        :return: None
        aSSL_get1_sessionaSessionaSSL_SESSION_freea_sessionu
        Returns the Session currently used.

        :return: An instance of :class:`OpenSSL.SSL.Session` or
            :obj:`None` if no session exists.

        .. versionadded:: 0.14
        usession must be a Session instanceaSSL_set_sessionu
        Set the session to be used when the TLS/SSL connection is established.

        :param session: A Session instance representing the session to use.
        :returns: None

        .. versionadded:: 0.14
        Tuchar[]lu
        Helper to implement :meth:`get_finished` and
        :meth:`get_peer_finished`.

        :param function: Either :data:`SSL_get_finished`: or
            :data:`SSL_get_peer_finished`.

        :return: :data:`None` if the desired message has not yet been
            received, otherwise the contents of the message.
        :rtype: :class:`bytes` or :class:`NoneType`
        a_get_finished_messageaSSL_get_finishedu
        Obtain the latest TLS Finished message that we sent.

        :return: The contents of the message or :obj:`None` if the TLS
            handshake has not yet completed.
        :rtype: :class:`bytes` or :class:`NoneType`

        .. versionadded:: 0.15
        aSSL_get_peer_finishedu
        Obtain the latest TLS Finished message that we received from the peer.

        :return: The contents of the message or :obj:`None` if the TLS
            handshake has not yet completed.
        :rtype: :class:`bytes` or :class:`NoneType`

        .. versionadded:: 0.15
        aSSL_get_current_cipheraSSL_CIPHER_get_nameTuutf-8u
        Obtain the name of the currently used cipher.

        :returns: The name of the currently used cipher or :obj:`None`
            if no connection has been established.
        :rtype: :class:`unicode` or :class:`NoneType`

        .. versionadded:: 0.15
        aSSL_CIPHER_get_bitsu
        Obtain the number of secret bits of the currently used cipher.

        :returns: The number of secret bits of the currently used cipher
            or :obj:`None` if no connection has been established.
        :rtype: :class:`int` or :class:`NoneType`

        .. versionadded:: 0.15
        aSSL_CIPHER_get_versionu
        Obtain the protocol version of the currently used cipher.

        :returns: The protocol name of the currently used cipher
            or :obj:`None` if no connection has been established.
        :rtype: :class:`unicode` or :class:`NoneType`

        .. versionadded:: 0.15
        aSSL_get_versionu
        Retrieve the protocol version of the current connection.

        :returns: The TLS version of the current connection, for example
            the value for TLS 1.2 would be ``TLSv1.2``or ``Unknown``
            for connections that were not successfully established.
        :rtype: :class:`unicode`
        aSSL_versionu
        Retrieve the SSL or TLS protocol version of the current connection.

        :returns: The TLS version of the current connection.  For example,
            it will return ``0x769`` for connections made over TLS version 1.
        :rtype: :class:`int`
        Tuunsigned int *aSSL_get0_next_proto_negotiatedu
        Get the protocol that was negotiated by NPN.

        :returns: A bytestring of the protocol name.  If no protocol has been
            negotiated yet, returns an empty string.

        .. versionadded:: 0.15
        aSSL_set_alpn_protosu
        Specify the client's ALPN protocol list.

        These protocols are offered to the server during protocol negotiation.

        :param protos: A list of the protocols to be offered to the server.
            This list should be a Python list of bytestrings representing the
            protocols to offer, e.g. ``[b'http/1.1', b'spdy/2']``.
        uConnection.set_alpn_protos.<locals>.<genexpr>aSSL_get0_alpn_selectedu
        Get the protocol that was negotiated by ALPN.

        :returns: A bytestring of the protocol name.  If no protocol has been
            negotiated yet, returns an empty string.
        aSSL_set_tlsext_status_typeaTLSEXT_STATUSTYPE_ocspu
        Called to request that the server sends stapled OCSP data, if
        available. If this is not called on the client side then the server
        will not send OCSP data. Should be used in conjunction with
        :meth:`Context.set_ocsp_client_callback`.
        a__doc__u/usr/lib/python3/dist-packages/OpenSSL/SSL.pya__file__a__spec__aoriginahas_locationa__cached__alinuxaplatformapartialaitertoolsTacountachainaweakrefTaWeakValueDictionaryaWeakValueDictionaryTaerrorcodeucryptography.utilsTadeprecatedadeprecatedasixTabinary_typeainteger_typesaint2byteaindexbytesabinary_typeuOpenSSL._utilT	aUNSPECIFIEDaexception_from_error_queueaffialibamake_assertanativeapath_stringatext_to_bytes_and_warnano_zero_allocatoraUNSPECIFIEDaexception_from_error_queuea_exception_from_error_queueaffialibamake_asserta_make_assertanativeapath_stringatext_to_bytes_and_warnano_zero_allocatoruOpenSSL.cryptoTaFILETYPE_PEMa_PassphraseHelperaPKeyaX509NameaX509aX509StoreLRaOPENSSL_VERSION_NUMBERaSSLEAY_VERSIONaSSLEAY_CFLAGSaSSLEAY_PLATFORMaSSLEAY_DIRaSSLEAY_BUILT_ONaSENT_SHUTDOWNaRECEIVED_SHUTDOWNaSSLv2_METHODaSSLv3_METHODaSSLv23_METHODaTLSv1_METHODaTLSv1_1_METHODaTLSv1_2_METHODaOP_NO_SSLv2aOP_NO_SSLv3aOP_NO_TLSv1aOP_NO_TLSv1_1aOP_NO_TLSv1_2aMODE_RELEASE_BUFFERSaOP_SINGLE_DH_USEaOP_SINGLE_ECDH_USEaOP_EPHEMERAL_RSAaOP_MICROSOFT_SESS_ID_BUGaOP_NETSCAPE_CHALLENGE_BUGaOP_NETSCAPE_REUSE_CIPHER_CHANGE_BUGaOP_SSLREF2_REUSE_CERT_TYPE_BUGaOP_MICROSOFT_BIG_SSLV3_BUFFERaOP_MSIE_SSLV2_RSA_PADDINGaOP_SSLEAY_080_CLIENT_DH_BUGaOP_TLS_D5_BUGaOP_TLS_BLOCK_PADDING_BUGaOP_DONT_INSERT_EMPTY_FRAGMENTSaOP_CIPHER_SERVER_PREFERENCEaOP_TLS_ROLLBACK_BUGaOP_PKCS1_CHECK_1aOP_PKCS1_CHECK_2aOP_NETSCAPE_CA_DN_BUGaOP_NETSCAPE_DEMO_CIPHER_CHANGE_BUGaOP_NO_COMPRESSIONaOP_NO_QUERY_MTUaOP_COOKIE_EXCHANGEaOP_NO_TICKETaOP_ALLaVERIFY_PEERaVERIFY_FAIL_IF_NO_PEER_CERTaVERIFY_CLIENT_ONCEaVERIFY_NONEaSESS_CACHE_OFFaSESS_CACHE_CLIENTaSESS_CACHE_SERVERaSESS_CACHE_BOTHaSESS_CACHE_NO_AUTO_CLEARaSESS_CACHE_NO_INTERNAL_LOOKUPaSESS_CACHE_NO_INTERNAL_STOREaSESS_CACHE_NO_INTERNALaSSL_ST_CONNECTaSSL_ST_ACCEPTaSSL_ST_MASKaSSL_CB_LOOPaSSL_CB_EXITaSSL_CB_READaSSL_CB_WRITEaSSL_CB_ALERTaSSL_CB_READ_ALERTaSSL_CB_WRITE_ALERTaSSL_CB_ACCEPT_LOOPaSSL_CB_ACCEPT_EXITaSSL_CB_CONNECT_LOOPaSSL_CB_CONNECT_EXITaSSL_CB_HANDSHAKE_STARTaSSL_CB_HANDSHAKE_DONEaErroraWantReadErroraWantWriteErroraWantX509LookupErroraZeroReturnErroraSysCallErroraSSLeay_versionaSessionaContextaConnectiona__all__TOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %su<metaclass>uOpenSSL.SSLa__module__a__qualname__a__orig_bases__aOPENSSL_VERSION_NUMBERaSSLEAY_VERSIONaSSLEAY_CFLAGSaSSLEAY_PLATFORMaSSLEAY_DIRaSSLEAY_BUILT_ONaSSL_SENT_SHUTDOWNaSENT_SHUTDOWNaSSL_RECEIVED_SHUTDOWNaRECEIVED_SHUTDOWNaSSLv2_METHODaSSLv3_METHODaSSLv23_METHODlaTLSv1_METHODlaTLSv1_1_METHODlaTLSv1_2_METHODaSSL_OP_NO_SSLv2aOP_NO_SSLv2aSSL_OP_NO_SSLv3aOP_NO_SSLv3aSSL_OP_NO_TLSv1aOP_NO_TLSv1aSSL_OP_NO_TLSv1_1aOP_NO_TLSv1_1aSSL_OP_NO_TLSv1_2aOP_NO_TLSv1_2aSSL_MODE_RELEASE_BUFFERSaMODE_RELEASE_BUFFERSaSSL_OP_SINGLE_DH_USEaOP_SINGLE_DH_USEaSSL_OP_SINGLE_ECDH_USEaOP_SINGLE_ECDH_USEaSSL_OP_EPHEMERAL_RSAaOP_EPHEMERAL_RSAaSSL_OP_MICROSOFT_SESS_ID_BUGaOP_MICROSOFT_SESS_ID_BUGaSSL_OP_NETSCAPE_CHALLENGE_BUGaOP_NETSCAPE_CHALLENGE_BUGaSSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUGaOP_NETSCAPE_REUSE_CIPHER_CHANGE_BUGaSSL_OP_SSLREF2_REUSE_CERT_TYPE_BUGaOP_SSLREF2_REUSE_CERT_TYPE_BUGaSSL_OP_MICROSOFT_BIG_SSLV3_BUFFERaOP_MICROSOFT_BIG_SSLV3_BUFFERaSSL_OP_MSIE_SSLV2_RSA_PADDINGaOP_MSIE_SSLV2_RSA_PADDINGaSSL_OP_SSLEAY_080_CLIENT_DH_BUGaOP_SSLEAY_080_CLIENT_DH_BUGaSSL_OP_TLS_D5_BUGaOP_TLS_D5_BUGaSSL_OP_TLS_BLOCK_PADDING_BUGaOP_TLS_BLOCK_PADDING_BUGaSSL_OP_DONT_INSERT_EMPTY_FRAGMENTSaOP_DONT_INSERT_EMPTY_FRAGMENTSaSSL_OP_CIPHER_SERVER_PREFERENCEaOP_CIPHER_SERVER_PREFERENCEaSSL_OP_TLS_ROLLBACK_BUGaOP_TLS_ROLLBACK_BUGaSSL_OP_PKCS1_CHECK_1aOP_PKCS1_CHECK_1aSSL_OP_PKCS1_CHECK_2aOP_PKCS1_CHECK_2aSSL_OP_NETSCAPE_CA_DN_BUGaOP_NETSCAPE_CA_DN_BUGaSSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUGaOP_NETSCAPE_DEMO_CIPHER_CHANGE_BUGaSSL_OP_NO_COMPRESSIONaOP_NO_COMPRESSIONaSSL_OP_NO_QUERY_MTUaOP_NO_QUERY_MTUaSSL_OP_COOKIE_EXCHANGEaOP_COOKIE_EXCHANGEaSSL_OP_NO_TICKETaOP_NO_TICKETaSSL_OP_ALLaOP_ALLaSSL_VERIFY_PEERaVERIFY_PEERaSSL_VERIFY_FAIL_IF_NO_PEER_CERTaVERIFY_FAIL_IF_NO_PEER_CERTaSSL_VERIFY_CLIENT_ONCEaVERIFY_CLIENT_ONCEaSSL_VERIFY_NONEaVERIFY_NONEaSSL_SESS_CACHE_OFFaSESS_CACHE_OFFaSSL_SESS_CACHE_CLIENTaSESS_CACHE_CLIENTaSSL_SESS_CACHE_SERVERaSESS_CACHE_SERVERaSSL_SESS_CACHE_BOTHaSESS_CACHE_BOTHaSSL_SESS_CACHE_NO_AUTO_CLEARaSESS_CACHE_NO_AUTO_CLEARaSSL_SESS_CACHE_NO_INTERNAL_LOOKUPaSESS_CACHE_NO_INTERNAL_LOOKUPaSSL_SESS_CACHE_NO_INTERNAL_STOREaSESS_CACHE_NO_INTERNAL_STOREaSSL_SESS_CACHE_NO_INTERNALaSESS_CACHE_NO_INTERNALaSSL_ST_CONNECTaSSL_ST_ACCEPTaSSL_ST_MASKaCryptography_HAS_SSL_STaSSL_ST_INITaSSL_ST_BEFOREaSSL_ST_OKaSSL_ST_RENEGOTIATEaextendLaSSL_ST_INITaSSL_ST_BEFOREaSSL_ST_OKaSSL_ST_RENEGOTIATEaSSL_CB_LOOPaSSL_CB_EXITaSSL_CB_READaSSL_CB_WRITEaSSL_CB_ALERTaSSL_CB_READ_ALERTaSSL_CB_WRITE_ALERTaSSL_CB_ACCEPT_LOOPaSSL_CB_ACCEPT_EXITaSSL_CB_CONNECT_LOOPaSSL_CB_CONNECT_EXITaSSL_CB_HANDSHAKE_STARTaSSL_CB_HANDSHAKE_DONELu/etc/ssl/certs/ca-certificates.crtu/etc/pki/tls/certs/ca-bundle.crtu/etc/ssl/ca-bundle.pemu/etc/pki/tls/cacert.pemu/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pemLu/etc/ssl/certsc/opt/pyca/cryptography/openssl/certsc/opt/pyca/cryptography/openssl/cert.pemTEExceptionu
    An error occurred in an `OpenSSL.SSL` API.
    u
    A base class for wrapper classes that allow for intelligent exception
    handling in OpenSSL callbacks.

    :ivar list _problems: Any exceptions that occurred while executing in a
        context where they could not be raised in the normal way.  Typically
        this is because OpenSSL has called into some Python code and requires a
        return value.  The exceptions are saved to be raised later when it is
        possible to do so.
    u_CallbackExceptionHelper.__init__u_CallbackExceptionHelper.raise_if_problemu
    Wrap a callback such that it can be used as a certificate verification
    callback.
    u_VerifyHelper.__init__u
    Wrap a callback such that it can be used as an NPN advertisement callback.
    u_NpnAdvertiseHelper.__init__u
    Wrap a callback such that it can be used as an NPN selection callback.
    u_NpnSelectHelper.__init__u
    Wrap a callback such that it can be used as an ALPN selection callback.
    u_ALPNSelectHelper.__init__u
    Wrap a callback such that it can be used as an OCSP callback for the server
    side.

    Annoyingly, OpenSSL defines one OCSP callback but uses it in two different
    ways. For servers, that callback is expected to retrieve some OCSP data and
    hand it to OpenSSL, and may return only SSL_TLSEXT_ERR_OK,
    SSL_TLSEXT_ERR_FATAL, and SSL_TLSEXT_ERR_NOACK. For clients, that callback
    is expected to check the OCSP data, and returns a negative value on error,
    0 if the response is not acceptable, or positive if it is. These are
    mutually exclusive return code behaviours, and they mean that we need two
    helpers so that we always return an appropriate error code if the user's
    code throws an exception.

    Given that we have to have two helpers anyway, these helpers are a bit more
    helpery than most: specifically, they hide a few more of the OpenSSL
    functions so that the user has an easier time writing these callbacks.

    This helper implements the server side.
    u_OCSPServerCallbackHelper.__init__u
    Wrap a callback such that it can be used as an OCSP callback for the client
    side.

    Annoyingly, OpenSSL defines one OCSP callback but uses it in two different
    ways. For servers, that callback is expected to retrieve some OCSP data and
    hand it to OpenSSL, and may return only SSL_TLSEXT_ERR_OK,
    SSL_TLSEXT_ERR_FATAL, and SSL_TLSEXT_ERR_NOACK. For clients, that callback
    is expected to check the OCSP data, and returns a negative value on error,
    0 if the response is not acceptable, or positive if it is. These are
    mutually exclusive return code behaviours, and they mean that we need two
    helpers so that we always return an appropriate error code if the user's
    code throws an exception.

    Given that we have to have two helpers anyway, these helpers are a bit more
    helpery than most: specifically, they hide a few more of the OpenSSL
    functions so that the user has an easier time writing these callbacks.

    This helper implements the client side.
    u_OCSPClientCallbackHelper.__init__a_make_requiresaCryptography_HAS_NEXTPROTONEGuNPN not availablea_requires_npnaCryptography_HAS_ALPNuALPN not availablea_requires_alpnaCryptography_HAS_TLSEXT_HOSTNAMEuSNI not availablea_requires_sniu
    A class representing an SSL session.  A session defines certain connection
    parameters which may be re-used to speed up the setup of subsequent
    connections.

    .. versionadded:: 0.14
    u
    :class:`OpenSSL.SSL.Context` instances define the parameters for setting
    up new SSL connections.

    :param method: One of SSLv2_METHOD, SSLv3_METHOD, SSLv23_METHOD, or
        TLSv1_METHOD.
    aSSLv2_methodaSSLv3_methodaSSLv23_methodaTLSv1_methodaTLSv1_1_methodaTLSv1_2_methodadictaitemsuContext.__init__TnuContext.load_verify_locationsuContext._wrap_callbackaset_passwd_cbuContext.set_passwd_cbaset_default_verify_pathsuContext.set_default_verify_pathsuContext._check_env_vars_setuContext._fallback_default_verify_pathsause_certificate_chain_fileuContext.use_certificate_chain_fileause_certificate_fileuContext.use_certificate_fileause_certificateuContext.use_certificateaadd_extra_chain_certuContext.add_extra_chain_certuContext._raise_passphrase_exceptionause_privatekey_fileuContext.use_privatekey_fileause_privatekeyuContext.use_privatekeyacheck_privatekeyuContext.check_privatekeyaload_client_cauContext.load_client_caaset_session_iduContext.set_session_idaset_session_cache_modeuContext.set_session_cache_modeaget_session_cache_modeuContext.get_session_cache_modeaset_verifyuContext.set_verifyaset_verify_depthuContext.set_verify_depthaget_verify_modeuContext.get_verify_modeaget_verify_depthuContext.get_verify_depthaload_tmp_dhuContext.load_tmp_dhaset_tmp_ecdhuContext.set_tmp_ecdhaset_cipher_listuContext.set_cipher_listaset_client_ca_listuContext.set_client_ca_listaadd_client_cauContext.add_client_caaset_timeoutuContext.set_timeoutaget_timeoutuContext.get_timeoutaset_info_callbackuContext.set_info_callbackaget_app_datauContext.get_app_dataaset_app_datauContext.set_app_dataaget_cert_storeuContext.get_cert_storeaset_optionsuContext.set_optionsuContext.set_modeaset_tlsext_servername_callbackuContext.set_tlsext_servername_callbackaset_tlsext_use_srtpuContext.set_tlsext_use_srtpaset_npn_advertise_callbackuContext.set_npn_advertise_callbackaset_npn_select_callbackuContext.set_npn_select_callbackaset_alpn_protosuContext.set_alpn_protosaset_alpn_select_callbackuContext.set_alpn_select_callbackuContext._set_ocsp_callbackaset_ocsp_server_callbackuContext.set_ocsp_server_callbackaset_ocsp_client_callbackuContext.set_ocsp_client_callbackuContextType has been deprecated, use Context insteadaDeprecationWarningaContextTypeu
    uConnection.__init__a__getattr__uConnection.__getattr__uConnection._raise_ssl_erroraget_contextuConnection.get_contextaset_contextuConnection.set_contextaget_servernameuConnection.get_servernameaset_tlsext_host_nameuConnection.set_tlsext_host_nameapendinguConnection.pendingasenduConnection.sendawriteasendalluConnection.sendallarecvuConnection.recvareadTnnarecv_intouConnection.recv_intouConnection._handle_bio_errorsabio_readuConnection.bio_readabio_writeuConnection.bio_writearenegotiateuConnection.renegotiateado_handshakeuConnection.do_handshakeuConnection.renegotiate_pendingatotal_renegotiationsuConnection.total_renegotiationsuConnection.connectuConnection.connect_exuConnection.acceptabio_shutdownuConnection.bio_shutdownuConnection.shutdownuConnection.get_cipher_listaget_client_ca_listuConnection.get_client_ca_listamakefileuConnection.makefileuConnection.get_app_datauConnection.set_app_dataaget_shutdownuConnection.get_shutdownaset_shutdownuConnection.set_shutdownaget_state_stringuConnection.get_state_stringaserver_randomuConnection.server_randomaclient_randomuConnection.client_randomamaster_keyuConnection.master_keyaexport_keying_materialuConnection.export_keying_materialasock_shutdownuConnection.sock_shutdownaget_certificateuConnection.get_certificateaget_peer_certificateuConnection.get_peer_certificateaget_peer_cert_chainuConnection.get_peer_cert_chainawant_readuConnection.want_readawant_writeuConnection.want_writeuConnection.set_accept_stateuConnection.set_connect_stateaget_sessionuConnection.get_sessionaset_sessionuConnection.set_sessionuConnection._get_finished_messageaget_finisheduConnection.get_finishedaget_peer_finisheduConnection.get_peer_finishedaget_cipher_nameuConnection.get_cipher_nameaget_cipher_bitsuConnection.get_cipher_bitsaget_cipher_versionuConnection.get_cipher_versionaget_protocol_version_nameuConnection.get_protocol_version_nameaget_protocol_versionuConnection.get_protocol_versionaget_next_proto_negotiateduConnection.get_next_proto_negotiateduConnection.set_alpn_protosaget_alpn_proto_negotiateduConnection.get_alpn_proto_negotiatedarequest_ocspuConnection.request_ocspuConnectionType has been deprecated, use Connection insteadaConnectionTypeaSSL_library_initTa.0aidentifieranameTa.0wpTacallbackaselfu<module OpenSSL.SSL>Ta__class__TatypeTaselfanameTaselfTaselfacallbackawrapperTaselfacontextasocketasslaset_resultTaselfamethodamethod_funcamethod_objacontextaresTaobjafdamethTaselfadir_env_varafile_env_varTaselfafile_pathadir_pathacafileacapathTaselfafunctionaemptyasizeabufTaselfabioaresultTaflagaerrora_requires_decoratorTaselfasslaresultaerroraerrnoTafuncaexplodeaflagTaerroraflagTaselfahelperadataarcTaselfaclientaaddraconnTaselfacertificate_authorityaadd_resultTaselfacertobjacopyaadd_resultTaselfabufsizabufaresultTaselfabufaresultTaselfasessionalengthaoutpTaselfaaddrTaselfaaddraconnect_exTaselfaresultTaargsakwargsaerrorTaerrorT	aselfalabelaolenacontextaoutpacontext_bufacontext_lenause_contextasuccessTaselfadataadata_lenTaselfastoreapystoreTaselfacertTaselfacipherTaselfacipherswiaresultTaselfacipheranameTaselfacipheraversionTaselfaca_namesaresultwianameacopyapynameTaselfacert_stackaresultwiacertapycertTaselfaversionTaselfasessionapysessionTaselfacafileaca_listTaselfadhfileabioadhTaselfacafileacapathaload_resultTaselfaargsakwargsTaselfabufsizaflagsabufaresultTaselfabufferanbytesaflagsabufaresultTaselfarcTaselfabufaflagsaresultTaselfabufaflagsaleft_to_sendatotal_sentadataaresultTaselfaprotosaprotostrainput_strTaselfacallbackTaselfadataTaselfacipher_listatmpconnTaselfacertificate_authoritiesaname_stackaca_nameacopyapush_resultTaselfacontextTaselfaset_resultadir_env_varafile_env_varadefault_diradefault_fileTaselfamodeTaselfacallbackadataahelperTaselfaoptionsTaselfacallbackauserdataTaselfasessionaresultTaselfabufTaselfastateTaselfatimeoutTaselfaprofilesTaselfacurveTaselfamodeacallbackTaselfadepthTaselfacertause_resultTaselfacertfilearesultTaselfacertfileafiletypeause_resultTaselfapkeyause_resultTaselfakeyfileafiletypeause_resultT
aokastore_ctxax509acertaerror_numberaerror_depthaindexasslaconnectionaresultweacallbackaselfTasizeaverifyauserdataacallbackaselfTasslaalertaargacallbackTacallbackT
asslacdataaconnadataaocsp_dataaocsp_data_lengthadata_ptrweacallbackaselfTasslacdataaconnadataaocsp_ptraocsp_lenaocsp_dataavalidweacallbackaselfT
asslaoutaoutlenaargaconnaprotosaprotostrweacallbackaselfTasslaoutaoutlenain_ainlenaargaconnainstraprotolistaencoded_lenaprotoaoutstrweacallbackaselfTasslaoutaoutlenain_ainlenaargaconnainstraprotolistalengthaprotoaoutstrweacallbackaselfTasslawhereareturn_codeacallbacku.OpenSSL._utilmKuanativeaffiastringu
    Get a native string type representing of the given CFFI ``char*`` object.

    :param charp: A C-style string represented using CFFI.

    :return: :class:`str`
    alibaERR_get_errorlaerrorsaappendatextaERR_lib_error_stringaERR_func_error_stringaERR_reason_error_stringu
    Convert an OpenSSL library failure into a Python exception.

    When a call to the native OpenSSL library fails, this is usually signalled
    by the return value, and an error code is stored in an error queue
    associated with the current thread. The err library provides functions to
    obtain these error codes and textual error messages.
    u
        If *ok* is not True, retrieve the error from OpenSSL and raise it.
        aopenssl_assertumake_assert.<locals>.openssl_assertu
    Create an assert function that uses :func:`exception_from_error_queue` to
    raise an exception wrapped by *error*.
    aexception_from_error_queueaerrorabinary_typeatext_typeu%r is neither bytes nor unicodeaPY3adecodeTuutf-8aencodeu
    Convert :py:class:`bytes` or :py:class:`unicode` to the native
    :py:class:`str` type, using UTF-8 encoding if conversion is necessary.

    :raise UnicodeError: The input string is not UTF-8 decodeable.

    :raise TypeError: The input is neither :py:class:`bytes` nor
        :py:class:`unicode`.
    asysagetfilesystemencodinguPath must be represented as bytes or unicode stringu
    Convert a Python string to a :py:class:`bytes` string identifying the same
    path and which can be passed into an OpenSSL API accepting a filename.

    :param s: An instance of :py:class:`bytes` or :py:class:`unicode`.

    :return: An instance of :py:class:`bytes`.
    Tacharmapawarningsawarna_TEXT_WARNINGaformataDeprecationWarninglTacategoryastacklevelu
    If ``obj`` is text, emit a warning that it should be bytes instead and try
    to convert it to bytes automatically.

    :param str label: The name of the parameter from which ``obj`` was taken
        (so a developer can easily find the source of the problem and correct
        it).

    :return: If ``obj`` is the text string type, a ``bytes`` object giving the
        UTF-8 encoding of that text is returned.  Otherwise, ``obj`` itself is
        returned.
    a__doc__u/usr/lib/python3/dist-packages/OpenSSL/_util.pya__file__a__spec__aoriginahas_locationa__cached__asixTaPY3abinary_typeatext_typeucryptography.hazmat.bindings.openssl.bindingTaBindingaBindingabindingainit_static_locksanew_allocatorTFTashould_clear_after_allocano_zero_allocatoramake_assertapath_stringabyte_stringaUNSPECIFIEDa__name__u for {0} is no longer accepted, use bytesatext_to_bytes_and_warnu<module OpenSSL._util>TwsTaexception_typeaerrorsaerrorTaerroraopenssl_assertTaokaerrorTaerrorTacharpTalabelaobj.OpenSSL�u
pyOpenSSL - A simple wrapper around the OpenSSL library
a__doc__u/usr/lib/python3/dist-packages/OpenSSL/__init__.pya__file__Lu/usr/lib/python3/dist-packages/OpenSSLa__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aOpenSSLTacryptoaSSLacryptoaSSLuOpenSSL.versionTa__author__a__copyright__a__email__a__license__a__summary__a__title__a__uri__a__version__a__author__a__copyright__a__email__a__license__a__summary__a__title__a__uri__a__version__L
aSSLacryptoa__author__a__copyright__a__email__a__license__a__summary__a__title__a__uri__a__version__a__all__u<module OpenSSL>u.OpenSSL.crypto��Pucryptography.hazmat.backends.openssl.backendTabackendlabackendu
    Importing the backend from cryptography has the side effect of activating
    the osrandom engine. This mutates the global state of OpenSSL in the
    process and causes issues for various programs that use subinterpreters or
    embed Python. By putting the import in this function we can avoid
    triggering this side effect unless _get_backend is called.
    uUnknown %s failureu
    An OpenSSL API failed somehow.  Additionally, the failure which was
    encountered isn't one that's exercised by the test suite so future behavior
    of pyOpenSSL is now somewhat less predictable.
    a_libaBIO_newaBIO_s_memaBIO_freea_ffianewuchar[]aBIO_new_mem_bufafreeu_new_mem_buf.<locals>.freea_openssl_assertaNULLagcu
    Allocate a new OpenSSL memory BIO.

    Arrange for the garbage collector to clean it up automatically.

    :param buffer: None or some bytes to use to put into the BIO so that they
        can be read out.
    Tuchar**aBIO_get_mem_dataabuffer:nnnu
    Copy the contents of an OpenSSL BIO object into a Python byte string.
    uwhen must be a byte stringaASN1_TIME_set_stringuInvalid stringu
    The the time value of an ASN1 time object.

    @param boundary: An ASN1_TIME pointer (or an object safely
        castable to that type) which will have its value set.
    @param when: A string representation of the desired time value.

    @raise TypeError: If C{when} is not a L{bytes} string.
    @raise ValueError: If C{when} does not represent a time in the required
        format.
    @raise RuntimeError: If the time value cannot be set for some other
        (unspecified) reason.
    acastuASN1_STRING*aASN1_STRING_lengthaASN1_STRING_typeaV_ASN1_GENERALIZEDTIMEastringaASN1_STRING_dataTuASN1_GENERALIZEDTIME**aASN1_TIME_to_generalizedtimea_untested_errorTaASN1_TIME_to_generalizedtimeaASN1_GENERALIZEDTIME_freeu
    Retrieve the time value of an ASN1 time object.

    @param timestamp: An ASN1_GENERALIZEDTIME* (or an object safely castable to
        that type) from which the time value will be retrieved.

    @return: The time value from C{timestamp} as a L{bytes} string in a certain
        format.  Or C{None} if the object contains no time value.
    a_namesaappenda_nameaEVP_PKEY_newaEVP_PKEY_freea_pkeya_initializeda_get_backenda_only_publica_evp_pkey_to_public_keya_evp_pkey_to_private_keyu
        Export as a ``cryptography`` key.

        :rtype: One of ``cryptography``'s `key interfaces`_.

        .. _key interfaces: https://cryptography.io/en/latest/hazmat/            primitives/asymmetric/rsa/#key-interfaces

        .. versionadded:: 16.1.0
        arsaaRSAPublicKeyaRSAPrivateKeyadsaaDSAPublicKeyaDSAPrivateKeyuUnsupported key typea_evp_pkeyu
        Construct based on a ``cryptography`` *crypto_key*.

        :param crypto_key: A ``cryptography`` key.
        :type crypto_key: One of ``cryptography``'s `key interfaces`_.

        :rtype: PKey

        .. versionadded:: 16.1.0
        utype must be an integerubits must be an integeraTYPE_RSAuInvalid number of bitsaBN_newaBN_freeaBN_set_wordaRSA_F4aRSA_newaRSA_generate_key_exlaEVP_PKEY_assign_RSAaTYPE_DSAaDSA_newaDSA_freeaDSA_generate_parameters_exaDSA_generate_keyaEVP_PKEY_set1_DSAaErrorTuNo such key typeaselfu
        Generate a key pair of the given type, with the given number of bits.

        This generates a key "into" the this object.

        :param type: The key type.
        :type type: :py:data:`TYPE_RSA` or :py:data:`TYPE_DSA`
        :param bits: The number of bits.
        :type bits: :py:data:`int` ``>= 0``
        :raises TypeError: If :py:data:`type` or :py:data:`bits` isn't
            of the appropriate type.
        :raises ValueError: If the number of bits isn't an integer of
            the appropriate size.
        :return: ``None``
        upublic key onlyaEVP_PKEY_typeatypeaEVP_PKEY_RSAukey type unsupportedaEVP_PKEY_get1_RSAaRSA_freeaRSA_check_keya_raise_current_erroru
        Check the consistency of an RSA private key.

        This is the Python equivalent of OpenSSL's ``RSA_check_key``.

        :return: ``True`` if key is consistent.

        :raise OpenSSL.crypto.Error: if the key is inconsistent.

        :raise TypeError: if the key is of a type which cannot be checked.
            Only RSA keys can currently be checked.
        aEVP_PKEY_idu
        Returns the type of the key

        :return: The type of the key.
        aEVP_PKEY_bitsu
        Returns the number of bits of the key

        :return: The number of bits of the key.
        a_EllipticCurvea__ne__u
            Implement cooperation with the right-hand side argument of ``!=``.

            Python 3 seems to have dropped this cooperation in this very narrow
            circumstance.
            aEC_get_builtin_curvesuEC_builtin_curve[]u
        Get the curves supported by OpenSSL.

        :param lib: The OpenSSL library binding object.

        :return: A :py:type:`set` of ``cls`` instances giving the names of the
            elliptic curves the underlying library supports.
        aclsafrom_nidalibanidu<genexpr>u_EllipticCurve._load_elliptic_curves.<locals>.<genexpr>a_curvesa_load_elliptic_curvesu
        Get, cache, and return the curves supported by OpenSSL.

        :param lib: The OpenSSL library binding object.

        :return: A :py:type:`set` of ``cls`` instances giving the names of the
            elliptic curves the underlying library supports.
        aOBJ_nid2snadecodeTaasciiu
        Instantiate a new :py:class:`_EllipticCurve` associated with the given
        OpenSSL NID.

        :param lib: The OpenSSL library binding object.

        :param nid: The OpenSSL NID the resulting curve object will represent.
            This must be a curve NID (and not, for example, a hash NID) or
            subsequent operations will fail in unpredictable ways.
        :type nid: :py:class:`int`

        :return: The curve object.
        a_nidanameu
        :param _lib: The :py:mod:`cryptography` binding instance used to
            interface with OpenSSL.

        :param _nid: The OpenSSL NID identifying the curve this object
            represents.
        :type _nid: :py:class:`int`

        :param name: The OpenSSL short name identifying the curve this object
            represents.
        :type name: :py:class:`unicode`
        u<Curve %r>aEC_KEY_new_by_curve_nameaEC_KEY_freeu
        Create a new OpenSSL EC_KEY structure initialized to use this curve.

        The structure is automatically garbage collected when the Python object
        is garbage collected.
        a_get_elliptic_curvesu
    Return a set of objects representing the elliptic curves supported in the
    OpenSSL build in use.

    The curve objects have a :py:class:`unicode` ``name`` attribute by which
    they identify themselves.

    The curve objects are useful as values for the argument accepted by
    :py:meth:`Context.set_tmp_ecdh` to specify which elliptical curve should be
    used for ECDHE key exchange.
    aget_elliptic_curvesuunknown curve nameu
    Return a single curve object selected by name.

    See :py:func:`get_elliptic_curves` for information about curve objects.

    :param name: The OpenSSL short name identifying the curve object to
        retrieve.
    :type name: :py:class:`unicode`

    If the named curve is not supported then :py:class:`ValueError` is raised.
    aX509_NAME_dupaX509_NAME_freeu
        Create a new X509Name, copying the given X509Name instance.

        :param name: The name to copy.
        :type name: :py:class:`X509Name`
        astartswithTw_aX509Namea__setattr__uattribute name must be string, not '%.200s'a__name__aOBJ_txt2nida_byte_stringaNID_undefuNo such attributeaX509_NAME_entry_countaX509_NAME_get_entryaX509_NAME_ENTRY_get_objectaOBJ_obj2nidaX509_NAME_delete_entryaX509_NAME_ENTRY_freea_text_typeaencodeTuutf-8aX509_NAME_add_entry_by_NIDaMBSTRING_UTF8l��������a__getattr__aX509_NAME_get_index_by_NIDaX509_NAME_ENTRY_get_dataTuunsigned char**aASN1_STRING_to_UTF8aOPENSSL_freeu
        Find attribute. An X509Name object has the following attributes:
        countryName (alias C), stateOrProvince (alias ST), locality (alias L),
        organization (alias O), organizationalUnit (alias OU), commonName
        (alias CN) and more...
        wfuX509Name._cmp.<locals>.faX509_NAME_cmpaopTuchar[]laX509_NAME_onelineu<X509Name object '%s'>a_nativeu
        String representation of an X509Name
        aX509_NAME_hashu
        Return an integer representation of the first four bytes of the
        MD5 digest of the DER representation of the name.

        This is the Python equivalent of OpenSSL's ``X509_NAME_hash``.

        :return: The (integer) hash of this name.
        :rtype: :py:class:`int`
        ai2d_X509_NAMEu
        Return the DER encoding of this name.

        :return: The DER encoded form of this name.
        :rtype: :py:class:`bytes`
        aresultu
        Returns the components of this name, as a sequence of 2-tuples.

        :return: The components of this name.
        :rtype: :py:class:`list` of ``name, value`` tuples.
        TuX509V3_CTX*aX509V3_set_ctxaX509V3_set_ctx_nodbaX509uissuer must be an X509 instancea_x509aissuer_certusubject must be an X509 instanceasubject_certccritical,aX509V3_EXT_nconfaX509_EXTENSION_freea_extensionu
        Initializes an X509 extension.

        :param type_name: The name of the type of extension_ to create.
        :type type_name: :py:data:`bytes`

        :param bool critical: A flag indicating whether this is a critical
            extension.

        :param value: The value of the extension.
        :type value: :py:data:`bytes`

        :param subject: Optional X509 certificate to use as subject.
        :type subject: :py:class:`X509`

        :param issuer: Optional X509 certificate to use as issuer.
        :type issuer: :py:class:`X509`

        .. _extension: https://www.openssl.org/docs/manmaster/man5/
            x509v3_config.html#STANDARD-EXTENSIONS
        aX509_EXTENSION_get_objectuGENERAL_NAMES*aX509V3_EXT_d2iaGENERAL_NAMES_freeask_GENERAL_NAME_numask_GENERAL_NAME_valueanamesa_prefixesa_new_mem_bufaGENERAL_NAME_printapartsa_bio_to_stringwdaia5adataalengthalabelw:u, aNID_subject_alt_namea_subjectAltNameStringaX509V3_EXT_printu
        :return: a nice text representation of the extension
        aX509_EXTENSION_get_criticalu
        Returns the critical field of this X.509 extension.

        :return: The critical field.
        u
        Returns the short type name of this X.509 extension.

        The result is a byte string such as :py:const:`b"basicConstraints"`.

        :return: The short type name.
        :rtype: :py:data:`bytes`

        .. versionadded:: 0.12
        aX509_EXTENSION_get_datau
        Returns the data of the X509 extension, encoded as ASN.1.

        :return: The ASN.1 encoded data of this X509 extension.
        :rtype: :py:data:`bytes`

        .. versionadded:: 0.12
        aX509_REQ_newaX509_REQ_freea_reqaset_versionTlucryptography.hazmat.backends.openssl.x509Ta_CertificateSigningRequesta_CertificateSigningRequestu
        Export as a ``cryptography`` certificate signing request.

        :rtype: ``cryptography.x509.CertificateSigningRequest``

        .. versionadded:: 17.1.0
        ax509aCertificateSigningRequestuMust be a certificate signing requesta_x509_requ
        Construct based on a ``cryptography`` *crypto_req*.

        :param crypto_req: A ``cryptography`` X.509 certificate signing request
        :type crypto_req: ``cryptography.x509.CertificateSigningRequest``

        :rtype: X509Req

        .. versionadded:: 17.1.0
        aX509_REQ_set_pubkeyu
        Set the public key of the certificate signing request.

        :param pkey: The public key to use.
        :type pkey: :py:class:`PKey`

        :return: ``None``
        aPKeya__new__aX509_REQ_get_pubkeyu
        Get the public key of the certificate signing request.

        :return: The public key.
        :rtype: :py:class:`PKey`
        aX509_REQ_set_versionu
        Set the version subfield (RFC 2459, section 4.1.2.1) of the certificate
        request.

        :param int version: The version number.
        :return: ``None``
        aX509_REQ_get_versionu
        Get the version subfield (RFC 2459, section 4.1.2.1) of the certificate
        request.

        :return: The value of the version subfield.
        :rtype: :py:class:`int`
        aX509_REQ_get_subject_namea_owneru
        Return the subject of this certificate signing request.

        This creates a new :class:`X509Name` that wraps the underlying subject
        name field on the certificate signing request. Modifying it will modify
        the underlying signing request, and will have the effect of modifying
        any other :class:`X509Name` that refers to this subject.

        :return: The subject of this certificate signing request.
        :rtype: :class:`X509Name`
        ask_X509_EXTENSION_new_nullask_X509_EXTENSION_freeaX509ExtensionuOne of the elements is not an X509Extensionask_X509_EXTENSION_pushastackaX509_REQ_add_extensionsu
        Add extensions to the certificate signing request.

        :param extensions: The X.509 extensions to add.
        :type extensions: iterable of :py:class:`X509Extension`
        :return: ``None``
        aX509_REQ_get_extensionsask_X509_EXTENSION_numask_X509_EXTENSION_valueanative_exts_objaextsu
        Get X.509 extensions in the certificate signing request.

        :return: The X.509 extensions in this request.
        :rtype: :py:class:`list` of :py:class:`X509Extension` objects.

        .. versionadded:: 0.15
        uKey has only public partuKey is uninitializedaEVP_get_digestbynameuNo such digest methodaX509_REQ_signu
        Sign the certificate signing request with this key and digest type.

        :param pkey: The key pair to sign with.
        :type pkey: :py:class:`PKey`
        :param digest: The name of the message digest to use for the signature,
            e.g. :py:data:`b"sha256"`.
        :type digest: :py:class:`bytes`
        :return: ``None``
        upkey must be a PKey instanceaX509_REQ_verifyu
        Verifies the signature on this certificate signing request.

        :param PKey key: A public key.

        :return: ``True`` if the signature is correct.
        :rtype: bool

        :raises OpenSSL.crypto.Error: If the signature is invalid or there is a
            problem verifying the signature.
        aX509_newaX509_freea_X509NameInvalidatora_issuer_invalidatora_subject_invalidatorTa_Certificatea_Certificateu
        Export as a ``cryptography`` certificate.

        :rtype: ``cryptography.x509.Certificate``

        .. versionadded:: 17.1.0
        aCertificateuMust be a certificateu
        Construct based on a ``cryptography`` *crypto_cert*.

        :param crypto_key: A ``cryptography`` X.509 certificate.
        :type crypto_key: ``cryptography.x509.Certificate``

        :rtype: X509

        .. versionadded:: 17.1.0
        uversion must be an integeraX509_set_versionu
        Set the version number of the certificate. Note that the
        version value is zero-based, eg. a value of 0 is V1.

        :param version: The version number of the certificate.
        :type version: :py:class:`int`

        :return: ``None``
        aX509_get_versionu
        Return the version number of the certificate.

        :return: The version number of the certificate.
        :rtype: :py:class:`int`
        aX509_get_pubkeyu
        Get the public key of the certificate.

        :return: The public key.
        :rtype: :py:class:`PKey`
        aX509_set_pubkeyu
        Set the public key of the certificate.

        :param pkey: The public key.
        :type pkey: :py:class:`PKey`

        :return: :py:data:`None`
        uKey only has public partaX509_signu
        Sign the certificate with this key and digest type.

        :param pkey: The key to sign with.
        :type pkey: :py:class:`PKey`

        :param digest: The name of the message digest to use.
        :type digest: :py:class:`bytes`

        :return: :py:data:`None`
        aX509_get0_tbs_sigalgaalgorithmuUndefined signature algorithmaOBJ_nid2lnu
        Return the signature algorithm used in the certificate.

        :return: The name of the algorithm.
        :rtype: :py:class:`bytes`

        :raises ValueError: If the signature algorithm is undefined.

        .. versionadded:: 0.13
        uunsigned char[]aEVP_MAX_MD_SIZETuunsigned int[]laX509_digestd:ajoinab16encodeaupperu
        Return the digest of the X509 object.

        :param digest_name: The name of the digest algorithm to use.
        :type digest_name: :py:class:`bytes`

        :return: The digest of the object, formatted as
            :py:const:`b":"`-delimited hex pairs.
        :rtype: :py:class:`bytes`
        aX509_subject_name_hashu
        Return the hash of the X509 subject.

        :return: The hash of the subject.
        :rtype: :py:class:`bytes`
        a_integer_typesuserial must be an integer:lnnTuBIGNUM**aBN_hex2bnaASN1_INTEGER_setaX509_get_serialNumberaBN_to_ASN1_INTEGERaASN1_INTEGER_freeaX509_set_serialNumberu
        Set the serial number of the certificate.

        :param serial: The new serial number.
        :type serial: :py:class:`int`

        :return: :py:data`None`
        aASN1_INTEGER_to_BNaBN_bn2hexlu
        Return the serial number of this certificate.

        :return: The serial number.
        :rtype: int
        uamount must be an integeraX509_get_notAfteraX509_gmtime_adju
        Adjust the time stamp on which the certificate stops being valid.

        :param int amount: The number of seconds by which to adjust the
            timestamp.
        :return: ``None``
        aX509_get_notBeforeu
        Adjust the timestamp on which the certificate starts being valid.

        :param amount: The number of seconds by which to adjust the timestamp.
        :return: ``None``
        aget_notAfteradatetimeastrptimeu%Y%m%d%H%M%SZautcnowu
        Check whether the certificate has expired.

        :return: ``True`` if the certificate has expired, ``False`` otherwise.
        :rtype: bool
        a_get_asn1_timea_get_boundary_timeu
        Get the timestamp at which the certificate starts being valid.

        The timestamp is formatted as an ASN.1 TIME::

            YYYYMMDDhhmmssZ

        :return: A timestamp string, or ``None`` if there is none.
        :rtype: bytes or NoneType
        a_set_asn1_timea_set_boundary_timeu
        Set the timestamp at which the certificate starts being valid.

        The timestamp is formatted as an ASN.1 TIME::

            YYYYMMDDhhmmssZ

        :param bytes when: A timestamp string.
        :return: ``None``
        u
        Get the timestamp at which the certificate stops being valid.

        The timestamp is formatted as an ASN.1 TIME::

            YYYYMMDDhhmmssZ

        :return: A timestamp string, or ``None`` if there is none.
        :rtype: bytes or NoneType
        u
        Set the timestamp at which the certificate stops being valid.

        The timestamp is formatted as an ASN.1 TIME::

            YYYYMMDDhhmmssZ

        :param bytes when: A timestamp string.
        :return: ``None``
        uname must be an X509Namea_get_nameaX509_get_issuer_nameaaddu
        Return the issuer of this certificate.

        This creates a new :class:`X509Name` that wraps the underlying issuer
        name field on the certificate. Modifying it will modify the underlying
        certificate, and will have the effect of modifying any other
        :class:`X509Name` that refers to this issuer.

        :return: The issuer of this certificate.
        :rtype: :class:`X509Name`
        a_set_nameaX509_set_issuer_nameaclearu
        Set the issuer of this certificate.

        :param issuer: The issuer.
        :type issuer: :py:class:`X509Name`

        :return: ``None``
        aX509_get_subject_nameu
        Return the subject of this certificate.

        This creates a new :class:`X509Name` that wraps the underlying subject
        name field on the certificate. Modifying it will modify the underlying
        certificate, and will have the effect of modifying any other
        :class:`X509Name` that refers to this subject.

        :return: The subject of this certificate.
        :rtype: :class:`X509Name`
        aX509_set_subject_nameu
        Set the subject of this certificate.

        :param subject: The subject.
        :type subject: :py:class:`X509Name`

        :return: ``None``
        aX509_get_ext_countu
        Get the number of extensions on this certificate.

        :return: The number of extensions.
        :rtype: :py:class:`int`

        .. versionadded:: 0.12
        aX509_add_extu
        Add extensions to the certificate.

        :param extensions: The extensions to add.
        :type extensions: An iterable of :py:class:`X509Extension` objects.
        :return: ``None``
        aX509_get_extuextension index out of boundsaX509_EXTENSION_dupu
        Get a specific extension of the certificate by index.

        Extensions on a certificate are kept in order. The index
        parameter selects which extension will be returned.

        :param int index: The index of the extension to retrieve.
        :return: The extension at the specified index.
        :rtype: :py:class:`X509Extension`
        :raises IndexError: If the extension index was out of bounds.

        .. versionadded:: 0.12
        aX509_STORE_newaX509_STORE_freea_storeaX509_STORE_add_certaERR_peek_erroraERR_GET_REASONaX509_R_CERT_ALREADY_IN_HASH_TABLEaERR_clear_erroru
        Adds a trusted certificate to this store.

        Adding a certificate with this method adds this certificate as a
        *trusted* certificate.

        :param X509 cert: The certificate to add to this store.

        :raises TypeError: If the certificate is not an :class:`X509`.

        :raises OpenSSL.crypto.Error: If OpenSSL was unhappy with your
            certificate.

        :return: ``None`` if the certificate was added successfully.
        aX509_STORE_add_crla_crlu
        Add a certificate revocation list to this store.

        The certificate revocation lists added to a store will only be used if
        the associated flags are configured to check certificate revocation
        lists.

        .. versionadded:: 16.1.0

        :param CRL crl: The certificate revocation list to add to this store.
        :return: ``None`` if the certificate revocation list was added
            successfully.
        aX509_STORE_set_flagsu
        Set verification flags to this store.

        Verification flags can be combined by oring them together.

        .. note::

          Setting a verification flag sometimes requires clients to add
          additional information to the store, otherwise a suitable error will
          be raised.

          For example, in setting flags to enable CRL checking a
          suitable CRL must be added to the store otherwise an error will be
          raised.

        .. versionadded:: 16.1.0

        :param int flags: The verification flags to set on this store.
            See :class:`X509StoreFlags` for available constants.
        :return: ``None`` if the verification flags were successfully set.
        aX509_VERIFY_PARAM_newaX509_VERIFY_PARAM_freeaX509_VERIFY_PARAM_set_timeastrftimeTu%saX509_STORE_set1_paramu
        Set the time against which the certificates are verified.

        Normally the current time is used.

        .. note::

          For example, you can determine if a certificate was valid at a given
          time.

        .. versionadded:: 17.0.0

        :param datetime vfy_time: The verification time to set on this store.
        :return: ``None`` if the verification time was successfully set.
        aX509StoreContextErrora__init__acertificateaX509_STORE_CTX_newaX509_STORE_CTX_freea_store_ctxa_certa_initaX509_STORE_CTX_initu
        Set up the store context for a subsequent verification operation.

        Calling this method more than once without first calling
        :meth:`_cleanup` will leak memory.
        aX509_STORE_CTX_cleanupu
        Internally cleans up the store context.

        The store context can then be reused with a new call to :meth:`_init`.
        aX509_STORE_CTX_get_erroraX509_STORE_CTX_get_error_depthaX509_verify_cert_error_stringaX509_STORE_CTX_get_current_certaX509_dupa_from_raw_x509_ptru
        Convert an OpenSSL native context error failure into a Python
        exception.

        When a call to native OpenSSL X509_verify_cert fails, additional
        information about the failure can be obtained from the store context.
        u
        Set the context's X.509 store.

        .. versionadded:: 0.15

        :param X509Store store: The store description which will be used for
            the purposes of any *future* verifications.
        a_cleanupaX509_verify_certa_exception_from_contextu
        Verify a certificate in a context.

        .. versionadded:: 0.15

        :raises X509StoreContextError: If an error occurred when validating a
          certificate in the context. Sets ``certificate`` attribute to
          indicate which certificate caused the error.
        aFILETYPE_PEMaPEM_read_bio_X509aFILETYPE_ASN1ad2i_X509_bioutype argument must be FILETYPE_PEM or FILETYPE_ASN1u
    Load a certificate (X509) from the string *buffer* encoded with the
    type *type*.

    :param type: The file type (one of FILETYPE_PEM, FILETYPE_ASN1)

    :param bytes buffer: The buffer the certificate is stored in

    :return: The X509 object
    aPEM_write_bio_X509ai2d_X509_bioaFILETYPE_TEXTaX509_print_exutype argument must be FILETYPE_PEM, FILETYPE_ASN1, or FILETYPE_TEXTabiou
    Dump the certificate *cert* into a buffer string encoded with the type
    *type*.

    :param type: The file type (one of FILETYPE_PEM, FILETYPE_ASN1, or
        FILETYPE_TEXT)
    :param cert: The certificate to dump
    :return: The buffer with the dumped certificate in
    aPEM_write_bio_PUBKEYai2d_PUBKEY_biou
    Dump a public key to a buffer.

    :param type: The file type (one of :data:`FILETYPE_PEM` or
        :data:`FILETYPE_ASN1`).
    :param PKey pkey: The public key to dump
    :return: The buffer with the dumped key in it.
    :rtype: bytes
    upkey must be a PKeyuif a value is given for cipher one must also be given for passphraseaEVP_get_cipherbynameuInvalid cipher namea_PassphraseHelperaPEM_write_bio_PrivateKeyacallbackacallback_argsaraise_if_problemai2d_PrivateKey_biouOnly RSA keys are supported for FILETYPE_TEXTaRSA_printu
    Dump the private key *pkey* into a buffer string encoded with the type
    *type*.  Optionally (if *type* is :const:`FILETYPE_PEM`) encrypting it
    using *cipher* and *passphrase*.

    :param type: The file type (one of :const:`FILETYPE_PEM`,
        :const:`FILETYPE_ASN1`, or :const:`FILETYPE_TEXT`)
    :param PKey pkey: The PKey to dump
    :param cipher: (optional) if encrypted PEM format, the cipher to use
    :param passphrase: (optional) if encrypted PEM format, this can be either
        the passphrase to use, or a callback for providing the passphrase.

    :return: The buffer with the dumped key in
    :rtype: bytes
    aX509_REVOKED_newaX509_REVOKED_freea_revokedubad hex stringaX509_REVOKED_set_serialNumberu
        Set the serial number.

        The serial number is formatted as a hexadecimal number encoded in
        ASCII.

        :param bytes hex_str: The new serial number.

        :return: ``None``
        aX509_REVOKED_get0_serialNumberai2a_ASN1_INTEGERu
        Get the serial number.

        The serial number is formatted as a hexadecimal number encoded in
        ASCII.

        :return: The serial number.
        :rtype: bytes
        aX509_REVOKED_get_ext_countaX509_REVOKED_get_extaNID_crl_reasonaX509_REVOKED_delete_exta_delete_reasonureason must be None or a byte stringalowerareplaceTd ca_crl_reasonsaindexaASN1_ENUMERATED_newaASN1_ENUMERATED_freeaASN1_ENUMERATED_setaX509_REVOKED_add1_ext_i2du
        Set the reason of this revocation.

        If :data:`reason` is ``None``, delete the reason instead.

        :param reason: The reason string.
        :type reason: :class:`bytes` or :class:`NoneType`

        :return: ``None``

        .. seealso::

            :meth:`all_reasons`, which gives you a list of all supported
            reasons which you might pass to this method.
        aM_ASN1_OCTET_STRING_printu
        Get the reason of this revocation.

        :return: The reason, or ``None`` if there is none.
        :rtype: bytes or NoneType

        .. seealso::

            :meth:`all_reasons`, which gives you a list of all supported
            reasons this method might return.
        u
        Return a list of all the supported reason strings.

        This list is a copy; modifying it does not change the supported reason
        strings.

        :return: A list of reason strings.
        :rtype: :class:`list` of :class:`bytes`
        aX509_REVOKED_get0_revocationDateu
        Set the revocation timestamp.

        :param bytes when: The timestamp of the revocation,
            as ASN.1 TIME.
        :return: ``None``
        u
        Get the revocation timestamp.

        :return: The timestamp of the revocation, as ASN.1 TIME.
        :rtype: bytes
        aX509_CRL_newaX509_CRL_freeTa_CertificateRevocationLista_CertificateRevocationListu
        Export as a ``cryptography`` CRL.

        :rtype: ``cryptography.x509.CertificateRevocationList``

        .. versionadded:: 17.1.0
        aCertificateRevocationListuMust be a certificate revocation lista_x509_crlu
        Construct based on a ``cryptography`` *crypto_crl*.

        :param crypto_crl: A ``cryptography`` certificate revocation list
        :type crypto_crl: ``cryptography.x509.CertificateRevocationList``

        :rtype: CRL

        .. versionadded:: 17.1.0
        aX509_CRL_get_REVOKEDask_X509_REVOKED_numask_X509_REVOKED_valuearevoked_stackaCryptography_X509_REVOKED_dupaRevokedaresultsu
        Return the revocations in this certificate revocation list.

        These revocations will be provided by value, not by reference.
        That means it's okay to mutate them: it won't affect this CRL.

        :return: The revocations in this CRL.
        :rtype: :class:`tuple` of :class:`Revocation`
        aX509_CRL_add0_revokedu
        Add a revoked (by value not reference) to the CRL structure

        This revocation will be added by value, not by reference. That
        means it's okay to mutate it after adding: it won't affect
        this CRL.

        :param Revoked revoked: The new revocation.
        :return: ``None``
        aX509_CRL_get_issueru
        Get the CRL's issuer.

        .. versionadded:: 16.1.0

        :rtype: X509Name
        aX509_CRL_set_versionu
        Set the CRL version.

        .. versionadded:: 16.1.0

        :param int version: The version of the CRL.
        :return: ``None``
        aX509_CRL_get_lastUpdateu
        Set when the CRL was last updated.

        The timestamp is formatted as an ASN.1 TIME::

            YYYYMMDDhhmmssZ

        .. versionadded:: 16.1.0

        :param bytes when: A timestamp string.
        :return: ``None``
        aX509_CRL_get_nextUpdateu
        Set when the CRL will next be udpated.

        The timestamp is formatted as an ASN.1 TIME::

            YYYYMMDDhhmmssZ

        .. versionadded:: 16.1.0

        :param bytes when: A timestamp string.
        :return: ``None``
        aX509_CRL_set_issuer_nameaX509_CRL_sortaX509_CRL_signu
        Sign the CRL.

        Signing a CRL enables clients to associate the CRL itself with an
        issuer. Before a CRL is meaningful to other OpenSSL functions, it must
        be signed by an issuer.

        This method implicitly sets the issuer's name based on the issuer
        certificate and private key used to sign the CRL.

        .. versionadded:: 16.1.0

        :param X509 issuer_cert: The issuer's certificate.
        :param PKey issuer_key: The issuer's private key.
        :param bytes digest: The digest method to sign the CRL with.
        ucert must be an X509 instanceukey must be a PKey instancea_UNSPECIFIEDudigest must be providedaASN1_TIME_newaX509_CRL_set_lastUpdatell<aX509_CRL_set_nextUpdateadump_crlu
        Export the CRL as a string.

        :param X509 cert: The certificate used to sign the CRL.
        :param PKey key: The key used to sign the CRL.
        :param int type: The export format, either :data:`FILETYPE_PEM`,
            :data:`FILETYPE_ASN1`, or :data:`FILETYPE_TEXT`.
        :param int days: The number of days until the next update of this CRL.
        :param bytes digest: The name of the message digest to use (eg
            ``b"sha2566"``).
        :rtype: bytes
        aPKCS7_type_is_signeda_pkcs7u
        Check if this NID_pkcs7_signed object

        :return: True if the PKCS7 is of type signed
        aPKCS7_type_is_envelopedu
        Check if this NID_pkcs7_enveloped object

        :returns: True if the PKCS7 is of type enveloped
        aPKCS7_type_is_signedAndEnvelopedu
        Check if this NID_pkcs7_signedAndEnveloped object

        :returns: True if the PKCS7 is of type signedAndEnveloped
        aPKCS7_type_is_datau
        Check if this NID_pkcs7_data object

        :return: True if the PKCS7 is of type data
        u
        Returns the type name of the PKCS7 structure

        :return: A string with the typename
        a_cacertsa_friendlynameu
        Get the certificate in the PKCS #12 structure.

        :return: The certificate, or :py:const:`None` if there is none.
        :rtype: :py:class:`X509` or :py:const:`None`
        u
        Set the certificate in the PKCS #12 structure.

        :param cert: The new certificate, or :py:const:`None` to unset it.
        :type cert: :py:class:`X509` or :py:const:`None`

        :return: ``None``
        u
        Get the private key in the PKCS #12 structure.

        :return: The private key, or :py:const:`None` if there is none.
        :rtype: :py:class:`PKey`
        u
        Set the certificate portion of the PKCS #12 structure.

        :param pkey: The new private key, or :py:const:`None` to unset it.
        :type pkey: :py:class:`PKey` or :py:const:`None`

        :return: ``None``
        u
        Get the CA certificates in the PKCS #12 structure.

        :return: A tuple with the CA certificates in the chain, or
            :py:const:`None` if there are none.
        :rtype: :py:class:`tuple` of :py:class:`X509` or :py:const:`None`
        uiterable must only contain X509 instancesu
        Replace or set the CA certificates within the PKCS12 object.

        :param cacerts: The new CA certificates, or :py:const:`None` to unset
            them.
        :type cacerts: An iterable of :py:class:`X509` or :py:const:`None`

        :return: ``None``
        uname must be a byte string or None (not %r)u
        Set the friendly name in the PKCS #12 structure.

        :param name: The new friendly name, or :py:const:`None` to unset.
        :type name: :py:class:`bytes` or :py:const:`None`

        :return: ``None``
        u
        Get the friendly name in the PKCS# 12 structure.

        :returns: The friendly name,  or :py:const:`None` if there is none.
        :rtype: :py:class:`bytes` or :py:const:`None`
        a_text_to_bytes_and_warnapassphraseask_X509_new_nullask_X509_freeask_X509_pushacacertsaPKCS12_createaNID_pbe_WithSHA1And3_Key_TripleDES_CBCaPKCS12_freeai2d_PKCS12_biou
        Dump a PKCS12 object as a string.

        For more information, see the :c:func:`PKCS12_create` man page.

        :param passphrase: The passphrase used to encrypt the structure. Unlike
            some other passphrase arguments, this *must* be a string, not a
            callback.
        :type passphrase: :py:data:`bytes`

        :param iter: Number of times to repeat the encryption step.
        :type iter: :py:data:`int`

        :param maciter: Number of times to repeat the MAC step.
        :type maciter: :py:data:`int`

        :return: The string representation of the PKCS #12 structure.
        :rtype:
        aNETSCAPE_SPKI_newaNETSCAPE_SPKI_freea_spkiaNETSCAPE_SPKI_signu
        Sign the certificate request with this key and digest type.

        :param pkey: The private key to sign with.
        :type pkey: :py:class:`PKey`

        :param digest: The message digest to use.
        :type digest: :py:class:`bytes`

        :return: ``None``
        aNETSCAPE_SPKI_verifyu
        Verifies a signature on a certificate request.

        :param PKey key: The public key that signature is supposedly from.

        :return: ``True`` if the signature is correct.
        :rtype: bool

        :raises OpenSSL.crypto.Error: If the signature is invalid, or there was
            a problem verifying the signature.
        aNETSCAPE_SPKI_b64_encodeu
        Generate a base64 encoded representation of this SPKI object.

        :return: The base64 encoded string.
        :rtype: :py:class:`bytes`
        aNETSCAPE_SPKI_get_pubkeyu
        Get the public key of this certificate.

        :return: The public key.
        :rtype: :py:class:`PKey`
        aNETSCAPE_SPKI_set_pubkeyu
        Set the public key of the certificate

        :param pkey: The public key
        :return: ``None``
        uonly FILETYPE_PEM key format supports encryptiona_passphrasea_more_argsa_truncatea_problemsacallableapem_password_cba_read_passphraseuLast argument must be a byte string or a callable.a_exception_from_error_queueaexceptionTypeapopuString expectedupassphrase returned by callback is too longabufaPEM_read_bio_PUBKEYad2i_PUBKEY_biou
    Load a public key from a buffer.

    :param type: The file type (one of :data:`FILETYPE_PEM`,
        :data:`FILETYPE_ASN1`).
    :param buffer: The buffer the key is stored in.
    :type buffer: A Python string object, either unicode or bytestring.
    :return: The PKey object.
    :rtype: :class:`PKey`
    aPEM_read_bio_PrivateKeyad2i_PrivateKey_biou
    Load a private key (PKey) from the string *buffer* encoded with the type
    *type*.

    :param type: The file type (one of FILETYPE_PEM, FILETYPE_ASN1)
    :param buffer: The buffer the key is stored in
    :param passphrase: (optional) if encrypted PEM format, this can be
                       either the passphrase to use, or a callback for
                       providing the passphrase.

    :return: The PKey object
    aPEM_write_bio_X509_REQai2d_X509_REQ_bioaX509_REQ_print_exu
    Dump the certificate request *req* into a buffer string encoded with the
    type *type*.

    :param type: The file type (one of FILETYPE_PEM, FILETYPE_ASN1)
    :param req: The certificate request to dump
    :return: The buffer with the dumped certificate request in
    aPEM_read_bio_X509_REQad2i_X509_REQ_bioaX509Requ
    Load a certificate request (X509Req) from the string *buffer* encoded with
    the type *type*.

    :param type: The file type (one of FILETYPE_PEM, FILETYPE_ASN1)
    :param buffer: The buffer the certificate request is stored in
    :return: The X509Req object
    aCryptography_EVP_MD_CTX_newaCryptography_EVP_MD_CTX_freeaEVP_SignInitaEVP_SignUpdateaEVP_PKEY_sizeTuunsigned int *aEVP_SignFinalu
    Sign a data string using the given key and message digest.

    :param pkey: PKey to sign with
    :param data: data to be signed
    :param digest: message digest to use
    :return: signature

    .. versionadded:: 0.11
    aEVP_VerifyInitaEVP_VerifyUpdateaEVP_VerifyFinalu
    Verify the signature for a data string.

    :param cert: signing certificate (X509 object) corresponding to the
        private key which generated the signature.
    :param signature: signature returned by sign function
    :param data: data to be verified
    :param digest: message digest to use
    :return: ``None`` if the signature is correct, raise exception otherwise.

    .. versionadded:: 0.11
    aPEM_write_bio_X509_CRLai2d_X509_CRL_bioaX509_CRL_printu
    Dump a certificate revocation list to a buffer.

    :param type: The file type (one of ``FILETYPE_PEM``, ``FILETYPE_ASN1``, or
        ``FILETYPE_TEXT``).
    :param CRL crl: The CRL to dump.

    :return: The buffer with the CRL.
    :rtype: bytes
    aPEM_read_bio_X509_CRLad2i_X509_CRL_bioaCRLu
    Load Certificate Revocation List (CRL) data from a string *buffer*.
    *buffer* encoded with the type *type*.

    :param type: The file type (one of FILETYPE_PEM, FILETYPE_ASN1)
    :param buffer: The buffer the CRL is stored in

    :return: The PKey object
    aPEM_read_bio_PKCS7ad2i_PKCS7_bioaPKCS7aPKCS7_freeu
    Load pkcs7 data from the string *buffer* encoded with the type
    *type*.

    :param type: The file type (one of FILETYPE_PEM or FILETYPE_ASN1)
    :param buffer: The buffer with the pkcs7 data.
    :return: The PKCS7 object
    ad2i_PKCS12_bioTuEVP_PKEY**TuX509**TuCryptography_STACK_OF_X509**aPKCS12_parseTuint*aX509_alias_get0ask_X509_numask_X509_valueapycacertsaPKCS12u
    Load pkcs12 data from the string *buffer*. If the pkcs12 structure is
    encrypted, a *passphrase* must be included.  The MAC is always
    checked and thus required.

    See also the man page for the C function :py:func:`PKCS12_parse`.

    :param buffer: The buffer the certificate is stored in
    :param passphrase: (Optional) The password to decrypt the PKCS12 lump
    :returns: The PKCS12 object
    a__doc__u/usr/lib/python3/dist-packages/OpenSSL/crypto.pya__file__a__spec__aoriginahas_locationa__cached__abase64Tab16encodeapartialaoperatorTa__eq__a__ne__a__lt__a__le__a__gt__a__ge__a__eq__a__lt__a__le__a__gt__a__ge__asixTainteger_typesatext_typeaPY3ainteger_typesatext_typeaPY3a_PY3acryptographyTax509ucryptography.hazmat.primitives.asymmetricTadsaarsaucryptography.utilsTadeprecatedadeprecateduOpenSSL._utilTaffialibaexception_from_error_queueabyte_stringanativeaUNSPECIFIEDatext_to_bytes_and_warnamake_assertaffiaexception_from_error_queueabyte_stringanativeaUNSPECIFIEDatext_to_bytes_and_warnamake_asserta_make_assertL$aFILETYPE_PEMaFILETYPE_ASN1aFILETYPE_TEXTaTYPE_RSAaTYPE_DSAaErroraPKeyaget_elliptic_curvesaget_elliptic_curveaX509NameaX509ExtensionaX509ReqaX509aX509StoreFlagsaX509StoreaX509StoreContextErroraX509StoreContextaload_certificateadump_certificateadump_publickeyadump_privatekeyaRevokedaCRLaPKCS7aPKCS12aNetscapeSPKIaload_publickeyaload_privatekeyadump_certificate_requestaload_certificate_requestasignaverifyadump_crlaload_crlaload_pkcs7_dataaload_pkcs12a__all__aSSL_FILETYPE_PEMaSSL_FILETYPE_ASN1l��aEVP_PKEY_DSAaEVP_PKEY_DHaTYPE_DHaEVP_PKEY_ECaTYPE_ECTEExceptionametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %su<metaclass>uOpenSSL.cryptoa__module__u
    An error occurred in an `OpenSSL.crypto` API.
    a__qualname__a__orig_bases__TnTOobjectu_X509NameInvalidator.__init__u_X509NameInvalidator.addu_X509NameInvalidator.clearu
    A class representing an DSA or RSA public key or key pair.
    uPKey.__init__ato_cryptography_keyuPKey.to_cryptography_keyaclassmethodafrom_cryptography_keyuPKey.from_cryptography_keyagenerate_keyuPKey.generate_keyacheckuPKey.checkuPKey.typeabitsuPKey.bitsuPKeyType has been deprecated, use PKey insteadaDeprecationWarningaPKeyTypeu
    A representation of a supported elliptic curve.

    @cvar _curves: :py:obj:`None` until an attempt is made to load the curves.
        Thereafter, a :py:type:`set` containing :py:type:`_EllipticCurve`
        instances each of which represents one curve supported by the system.
    @type _curves: :py:type:`NoneType` or :py:type:`set`
    u_EllipticCurve.__ne__u_EllipticCurve._load_elliptic_curvesu_EllipticCurve._get_elliptic_curvesu_EllipticCurve.from_nidu_EllipticCurve.__init__a__repr__u_EllipticCurve.__repr__a_to_EC_KEYu_EllipticCurve._to_EC_KEYaget_elliptic_curveu
    An X.509 Distinguished Name.

    :ivar countryName: The country of the entity.
    :ivar C: Alias for  :py:attr:`countryName`.

    :ivar stateOrProvinceName: The state or province of the entity.
    :ivar ST: Alias for :py:attr:`stateOrProvinceName`.

    :ivar localityName: The locality of the entity.
    :ivar L: Alias for :py:attr:`localityName`.

    :ivar organizationName: The organization name of the entity.
    :ivar O: Alias for :py:attr:`organizationName`.

    :ivar organizationalUnitName: The organizational unit of the entity.
    :ivar OU: Alias for :py:attr:`organizationalUnitName`

    :ivar commonName: The common name of the entity.
    :ivar CN: Alias for :py:attr:`commonName`.

    :ivar emailAddress: The e-mail address of the entity.
    uX509Name.__init__uX509Name.__setattr__uX509Name.__getattr__a_cmpuX509Name._cmpuX509Name.__repr__ahashuX509Name.hashaderuX509Name.deraget_componentsuX509Name.get_componentsuX509NameType has been deprecated, use X509Name insteadaX509NameTypeu
    An X.509 v3 certificate extension.
    TnnuX509Extension.__init__apropertyuX509Extension._nidaGEN_EMAILaemailaGEN_DNSaDNSaGEN_URIaURIuX509Extension._subjectAltNameStringa__str__uX509Extension.__str__aget_criticaluX509Extension.get_criticalaget_short_nameuX509Extension.get_short_nameaget_datauX509Extension.get_datauX509ExtensionType has been deprecated, use X509Extension insteadaX509ExtensionTypeu
    An X.509 certificate signing requests.
    uX509Req.__init__ato_cryptographyuX509Req.to_cryptographyafrom_cryptographyuX509Req.from_cryptographyaset_pubkeyuX509Req.set_pubkeyaget_pubkeyuX509Req.get_pubkeyuX509Req.set_versionaget_versionuX509Req.get_versionaget_subjectuX509Req.get_subjectaadd_extensionsuX509Req.add_extensionsaget_extensionsuX509Req.get_extensionsasignuX509Req.signaverifyuX509Req.verifyuX509ReqType has been deprecated, use X509Req insteadaX509ReqTypeu
    An X.509 certificate.
    uX509.__init__uX509._from_raw_x509_ptruX509.to_cryptographyuX509.from_cryptographyuX509.set_versionuX509.get_versionuX509.get_pubkeyuX509.set_pubkeyuX509.signaget_signature_algorithmuX509.get_signature_algorithmadigestuX509.digestasubject_name_hashuX509.subject_name_hashaset_serial_numberuX509.set_serial_numberaget_serial_numberuX509.get_serial_numberagmtime_adj_notAfteruX509.gmtime_adj_notAfteragmtime_adj_notBeforeuX509.gmtime_adj_notBeforeahas_expireduX509.has_expireduX509._get_boundary_timeaget_notBeforeuX509.get_notBeforeuX509._set_boundary_timeaset_notBeforeuX509.set_notBeforeuX509.get_notAfteraset_notAfteruX509.set_notAfteruX509._get_nameuX509._set_nameaget_issueruX509.get_issueraset_issueruX509.set_issueruX509.get_subjectaset_subjectuX509.set_subjectaget_extension_countuX509.get_extension_countuX509.add_extensionsaget_extensionuX509.get_extensionuX509Type has been deprecated, use X509 insteadaX509TypeaX509StoreFlagsu
    Flags for X509 verification, used to change the behavior of
    :class:`X509Store`.

    See `OpenSSL Verification Flags`_ for details.

    .. _OpenSSL Verification Flags:
        https://www.openssl.org/docs/manmaster/man3/X509_VERIFY_PARAM_set_flags.html
    aX509_V_FLAG_CRL_CHECKaCRL_CHECKaX509_V_FLAG_CRL_CHECK_ALLaCRL_CHECK_ALLaX509_V_FLAG_IGNORE_CRITICALaIGNORE_CRITICALaX509_V_FLAG_X509_STRICTaX509_STRICTaX509_V_FLAG_ALLOW_PROXY_CERTSaALLOW_PROXY_CERTSaX509_V_FLAG_POLICY_CHECKaPOLICY_CHECKaX509_V_FLAG_EXPLICIT_POLICYaEXPLICIT_POLICYaX509_V_FLAG_INHIBIT_MAPaINHIBIT_MAPaX509_V_FLAG_NOTIFY_POLICYaNOTIFY_POLICYaX509_V_FLAG_CHECK_SS_SIGNATUREaCHECK_SS_SIGNATUREaX509_V_FLAG_CB_ISSUER_CHECKaCB_ISSUER_CHECKaX509Storeu
    An X.509 store.

    An X.509 store is used to describe a context in which to verify a
    certificate. A description of a context may include a set of certificates
    to trust, a set of certificate revocation lists, verification flags and
    more.

    An X.509 store, being only a description, cannot be used by itself to
    verify a certificate. To carry out the actual verification process, see
    :class:`X509StoreContext`.
    uX509Store.__init__aadd_certuX509Store.add_certaadd_crluX509Store.add_crlaset_flagsuX509Store.set_flagsaset_timeuX509Store.set_timeuX509StoreType has been deprecated, use X509Store insteadaX509StoreTypeu
    An exception raised when an error occurred while verifying a certificate
    using `OpenSSL.X509StoreContext.verify_certificate`.

    :ivar certificate: The certificate which caused verificate failure.
    :type certificate: :class:`X509`
    uX509StoreContextError.__init__aX509StoreContextu
    An X.509 store context.

    An X.509 store context is used to carry out the actual verification process
    of a certificate in a described context. For describing such a context, see
    :class:`X509Store`.

    :ivar _store_ctx: The underlying X509_STORE_CTX structure used by this
        instance.  It is dynamically allocated and automatically garbage
        collected.
    :ivar _store: See the ``store`` ``__init__`` parameter.
    :ivar _cert: See the ``certificate`` ``__init__`` parameter.
    :param X509Store store: The certificates which will be trusted for the
        purposes of any verifications.
    :param X509 certificate: The certificate to be verified.
    uX509StoreContext.__init__uX509StoreContext._inituX509StoreContext._cleanupuX509StoreContext._exception_from_contextaset_storeuX509StoreContext.set_storeaverify_certificateuX509StoreContext.verify_certificateaload_certificateadump_certificateadump_publickeyadump_privatekeyu
    A certificate revocation.
    LcunspecifiedckeyCompromisecCACompromisecaffiliationChangedcsupersededccessationOfOperationccertificateHolduRevoked.__init__aset_serialuRevoked.set_serialaget_serialuRevoked.get_serialuRevoked._delete_reasonaset_reasonuRevoked.set_reasonaget_reasonuRevoked.get_reasonaall_reasonsuRevoked.all_reasonsaset_rev_dateuRevoked.set_rev_dateaget_rev_dateuRevoked.get_rev_dateu
    A certificate revocation list.
    uCRL.__init__uCRL.to_cryptographyuCRL.from_cryptographyaget_revokeduCRL.get_revokedaadd_revokeduCRL.add_revokeduCRL.get_issueruCRL.set_versionuCRL._set_boundary_timeaset_lastUpdateuCRL.set_lastUpdateaset_nextUpdateuCRL.set_nextUpdateuCRL.signldaexportuCRL.exportuCRLType has been deprecated, use CRL insteadaCRLTypeatype_is_signeduPKCS7.type_is_signedatype_is_envelopeduPKCS7.type_is_envelopedatype_is_signedAndEnvelopeduPKCS7.type_is_signedAndEnvelopedatype_is_datauPKCS7.type_is_dataaget_type_nameuPKCS7.get_type_nameuPKCS7Type has been deprecated, use PKCS7 insteadaPKCS7Typeu
    A PKCS #12 archive.
    uPKCS12.__init__aget_certificateuPKCS12.get_certificateaset_certificateuPKCS12.set_certificateaget_privatekeyuPKCS12.get_privatekeyaset_privatekeyuPKCS12.set_privatekeyaget_ca_certificatesuPKCS12.get_ca_certificatesaset_ca_certificatesuPKCS12.set_ca_certificatesaset_friendlynameuPKCS12.set_friendlynameaget_friendlynameuPKCS12.get_friendlynameTnlluPKCS12.exportuPKCS12Type has been deprecated, use PKCS12 insteadaPKCS12TypeaNetscapeSPKIu
    A Netscape SPKI object.
    uNetscapeSPKI.__init__uNetscapeSPKI.signuNetscapeSPKI.verifyab64_encodeuNetscapeSPKI.b64_encodeuNetscapeSPKI.get_pubkeyuNetscapeSPKI.set_pubkeyuNetscapeSPKIType has been deprecated, use NetscapeSPKI insteadaNetscapeSPKITypeTFpu_PassphraseHelper.__init__u_PassphraseHelper.callbacku_PassphraseHelper.callback_argsu_PassphraseHelper.raise_if_problemu_PassphraseHelper._read_passphraseaload_publickeyaload_privatekeyadump_certificate_requestaload_certificate_requestaload_crlaload_pkcs7_dataaload_pkcs12aOpenSSL_add_all_algorithmsaSSL_load_error_stringsaASN1_STRING_set_default_mask_ascTcutf8onlyTa.0wcaclsalibu<listcomp>TachTwru<module OpenSSL.crypto>Ta__class__T
aselfanameanidaentry_indexaentryadataaresult_bufferadata_lengtharesulta__class__TaselfTaselfacrlTaselfalibanidanameTaselfamessageacertificatea__class__TaselfanameTaselfapkeyTaselfareqTaselfarevokedTaselfaspkiTaselfastoreTaselfastoreacertificateastore_ctxTaselfatypeapassphraseamore_argsatruncateTaselfatype_nameacriticalavalueasubjectaissueractxaextensionTaselfax509Taselfaothera__class__Taselfaresult_bufferaformat_resultT
aselfanameavalueanidwiaentaent_objaent_nidaadd_resulta__class__Taselfabioaprint_resultTabioaresult_bufferabuffer_lengthTaopwfTaselfwiaextaobjTaselfaerrorsa_x509a_certapycertTaclsax509acertTatimestampastring_timestampageneralized_timestampastring_dataastring_resultTaselfawhichTaclsalibTaselfawhichanameTaselfaretTaclsalibanum_curvesabuiltin_curvesTabufferabioafreeadataTaselfabufasizearwflagauserdataaresultwiweTaboundaryawhenaset_resultTaselfawhichawhenTaselfawhichanameaset_resultTaselfanamesapartswianamealabelabioavalueTaselfakeyTawhereTaselfacertacodeaerr_reasonTaselfaextensionsaextaadd_resultTaselfaextensionsastackaextaadd_resultTaselfarevokedacopyaadd_resultTaselfaencodedaresultTaselfarsaaresultTaselfaresult_bufferaencode_resultastring_resultTaselfadigest_nameadigestaresult_bufferaresult_lengthadigest_resultTatypeacertabioaresult_codeTatypeareqabioaresult_codeTatypeacrlabioaretT	atypeapkeyacipherapassphraseabioacipher_objahelperaresult_codearsaTatypeapkeyabioawrite_bioaresult_codeT
aselfacertakeyatypeadaysadigestadigest_objabioasometimeasign_resultT
aselfapassphraseaiteramaciteracacertsacertafriendlynameapkeyapkcs12abioTaselfaotheraresultaopTaopTabioarefTaclsacrypto_certacertTaclsacrypto_crlacrlTaclsacrypto_reqareqTaclsacrypto_keyapkeyTaclsalibanidTaselfatypeabitsaexponentarsaaresultadsaaresT	aselfaresultwiaentafnameafvalanidanameavalueTaselfaoctet_resultastring_resultachar_resultaresult_lengthTanameacurveTaselfaindexaextaextensionTaselfaextsanative_exts_objwiaextTaselfa_issueraissuerTaselfwiaextaobjabioaprint_resultTaselfadtTaselfaresultsarevoked_stackwiarevokedarevoked_copyapyrevTaselfabioaasn1_intaresultTaselfaasn1_serialabignum_serialahex_serialahexstring_serialaserialTaselfaobjanidTaselfaalgoranidTaselfanidastring_typeTaselfaamountanotAfterTaselfaamountanotBeforeTaselfatime_stringanot_afterTatypeabufferabioax509Tatypeabufferabioareqax509reqTatypeabufferabioacrlaresultTabufferapassphraseabioap12apkeyacertacacertsaparse_resultapykeyapycertafriendlynameafriendlyname_lengthafriendlyname_bufferapycacertswiax509apycacertapkcs12Tatypeabufferabioapkcs7apypkcs7Tatypeabufferapassphraseabioahelperaevp_pkeyapkeyTatypeabufferabioaevp_pkeyapkeyTaselfaexceptionTypeTaselfacacertsacertTaselfacertTaselfaflagsTaselfaissuerTaselfawhenTaselfapkeyaset_resultTaselfareasonareason_codeanew_reason_extaset_resultaadd_resultTaselfawhenadtTaselfahex_strabignum_serialabignum_ptrabn_resultaasn1_serialTaselfaserialahex_serialabignum_serialasmall_serialaset_resultaasn1_serialTaselfasubjectTaselfavfy_timeaparamTaselfaversionTaselfaversionaset_resultT	apkeyadataadigestadigest_objamd_ctxalengthasignature_bufferasignature_lengthafinal_resultTaselfaissuer_certaissuer_keyadigestadigest_objaresultTaselfapkeyadigestadigest_objasign_resultTaselfapkeyadigestaevp_mdasign_resultTaselfa_CertificateabackendTaselfa_CertificateRevocationListabackendTaselfa_CertificateSigningRequestabackendTaselfabackendTacertasignatureadataadigestadigest_objapkeyamd_ctxaverify_resultTaselfakeyaanswerTaselfapkeyaresultu.OpenSSL.versionfu
pyOpenSSL - A simple wrapper around the OpenSSL library
a__doc__u/usr/lib/python3/dist-packages/OpenSSL/version.pya__file__a__spec__aoriginahas_locationa__cached__La__author__a__copyright__a__email__a__license__a__summary__a__title__a__uri__a__version__a__all__u19.0.0a__version__apyOpenSSLa__title__uhttps://pyopenssl.org/a__uri__uPython wrapper module around the OpenSSL librarya__summary__uThe pyOpenSSL developersa__author__ucryptography-dev@python.orga__email__uApache License, Version 2.0a__license__uCopyright 2001-2017 {0}a__copyright__u<module OpenSSL.version>u.__main__A�a__mro_entries__abasesaurlaargsaIOLoopainstanceaioloopawsaconnectaPeriodicCallbackakeep_alivel NastartaenvuTERM=xterm-colorascriptu-eu-qu-cacommandu/dev/nullaSubprocessaSTREAMTastdoutastderrastdinaappaset_exit_callbackaexit_callbackarcawebsocket_connectaselfaincoming_messageTaon_message_callbackaprintuconnection errorareadonlyuaLISTENuRead-only view: %sareadwriteuInteractive view: %sarunuClient.connectajsonaloadsainputastdinawriteadataaencodeTuiso-8859-1ageometryasetGeometryllTuunknown commandTumissing commandasubprocessaPopenapsu--ppidapidu-oattyaPIPETastdoutashellacommunicateutoo many values to unpack (expected 2)awaitadecodeasplitTw
u/dev/aptyagetTTYasttyu-FarowsacolsadumpsDaseparatorsTw,w:astdoutaread_bytesTltTapartialaoutputawrite_messageaasJsonaStreamClosedErrorareturncodeastopafinisheduClient.runacomplete_internalareplaceu[rc]u[ro]u[rw]uNotification: %saurllibarequestaurlopenareadaargparseaArgumentParseraRawDescriptionHelpFormatteratextwrapadedentTu
         additional information:
           For information about GUIDs (aka UUID), please see
           https://eggshell.pjy.us/guid.  Alternatively, you may 
           specify a '.' and a random one will be generated for you.

           callback urls can contain the following placeholders:
           "[rc]"   to include the process return code
           "[ro]"   the read-only GUID
           "[rw]"   the read/write GUID
         Taformatter_classaepilogaadd_argumentTu-cu--commandtuthe command to be executed. Enclose in quotesTarequiredahelpTu-rou--readonlyaGUIDua guid (or ".") for read-only accessTametavarahelpTu-rwu--readwriteaGUIDua guid (or ".") for read/write accessTu-ciu--complete-internalaURLuurl to load when finished. Enclose in quotesTu-ou--overwriteastore_trueuoverwrite any existing outputTaactionahelpakeysu%s argument after ** must be a mapping, not %sacalledastar_arg_dicta__name__amapping_1__dictu%s got multiple values for keyword argument '%s'astar_arg_lista__iter__a__getitem__u%s argument after * must be an iterable, not %sTMMu()u objectakwa__doc__u/nuitka/eggshell.pya__file__a__cached__a__annotations__asysa_WINDOWSatornadoTagenagenutornado.ioloopTaIOLoopaPeriodicCallbackutornado.websocketTawebsocket_connectutornado.processTaSubprocessaCalledProcessErroraCalledProcessErrorutornado.iostreamTaStreamClosedErrorauuiduurllib.parseuurllib.requestatermiosastructafcntlareuwss://eggshell.pjy.us/ws/publish?readonly=%s&readwrite=%s&overwrite=%daURLuhttps://eggshell.pjy.us/v/%sabashaCOMMANDTOobjectametaclassa__prepare__aClientu%s.__prepare__() must return a mapping, not %su<metaclass>a__main__a__module__a__qualname__l��������a__init__uClient.__init__aretaintareturnuClient.exit_callbackacoroutineuClient.incoming_messageuClient.getTTYuClient.setGeometryuClient.asJsonanotify_internaluClient.notify_internaluClient.keep_alivea__orig_bases__amake_parseraparseraparse_argsauuid4w.aoverwriteaparseaquoteasafe_readonlyasafe_readwriteaclientu<module>Ta__class__TaselfaurlaargsaparamTaselfaparamTaselfweaurlTaselfaretTaselfapidwpaoutputaerralinesalinearesultTaselfamsgapayloadTaselfTaparserTaselfaurlapageaignored_contentTaselfalineapayloadTaselfarowsacolsapidaparamswpaoutputaerr.__parents_main__q
�aurlaargsaIOLoopainstanceaioloopawsaconnectaPeriodicCallbackakeep_alivel NastartaenvuTERM=xterm-colorascriptu-eu-qu-cacommandu/dev/nullaSubprocessaSTREAMTastdoutastderrastdinaappaset_exit_callbackaexit_callbackarcawebsocket_connectaselfaincoming_messageTaon_message_callbackaprintuconnection errorareadonlyuaLISTENuRead-only view: %sareadwriteuInteractive view: %sarunuClient.connectajsonaloadsainputastdinawriteadataaencodeTuiso-8859-1ageometryasetGeometryllTuunknown commandTumissing commandasubprocessaPopenapsu--ppidapidu-oattyaPIPETastdoutashellacommunicateutoo many values to unpack (expected 2)awaitadecodeasplitTw
u/dev/aptyagetTTYasttyu-FarowsacolsadumpsDaseparatorsTw,w:astdoutaread_bytesTltTapartialaoutputawrite_messageaasJsonaStreamClosedErrorareturncodeastopafinisheduClient.runacomplete_internalareplaceu[rc]u[ro]u[rw]uNotification: %saurllibarequestaurlopenareadaargparseaArgumentParseraRawDescriptionHelpFormatteratextwrapadedentTu
         additional information:
           For information about GUIDs (aka UUID), please see
           https://eggshell.pjy.us/guid.  Alternatively, you may 
           specify a '.' and a random one will be generated for you.

           callback urls can contain the following placeholders:
           "[rc]"   to include the process return code
           "[ro]"   the read-only GUID
           "[rw]"   the read/write GUID
         Taformatter_classaepilogaadd_argumentTu-cu--commandtuthe command to be executed. Enclose in quotesTarequiredahelpTu-rou--readonlyaGUIDua guid (or ".") for read-only accessTametavarahelpTu-rwu--readwriteaGUIDua guid (or ".") for read/write accessTu-ciu--complete-internalaURLuurl to load when finished. Enclose in quotesTu-ou--overwriteastore_trueuoverwrite any existing outputTaactionahelpa__doc__u/nuitka/eggshell.pya__file__a__spec__aoriginahas_locationa__cached__asysa_WINDOWSatornadoTagenagenutornado.ioloopTaIOLoopaPeriodicCallbackutornado.websocketTawebsocket_connectutornado.processTaSubprocessaCalledProcessErroraCalledProcessErrorutornado.iostreamTaStreamClosedErrorauuiduurllib.parseuurllib.requestatermiosastructafcntlareuwss://eggshell.pjy.us/ws/publish?readonly=%s&readwrite=%s&overwrite=%daURLuhttps://eggshell.pjy.us/v/%sabashaCOMMANDTOobjectametaclassa__prepare__aClienta__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>a__parents_main__a__module__a__qualname__l��������a__init__uClient.__init__aretaintareturnuClient.exit_callbackacoroutineuClient.incoming_messageuClient.getTTYuClient.setGeometryuClient.asJsonanotify_internaluClient.notify_internaluClient.keep_alivea__orig_bases__amake_parseramodulesa__main__u<lambda>umultiprocessing.spawnaspawna_fixup_main_from_pathafreeze_supportTamod_nameu<module __parents_main__>Ta__class__TaselfaurlaargsaparamTaselfaparamTaselfweaurlTaselfaretTaselfapidwpaoutputaerralinesalinearesultTaselfamsgapayloadTaselfTaparserTaselfaurlapageaignored_contentTaselfalineapayloadTaselfarowsacolsapidaparamswpaoutputaerr.apportiEagettextadecodeTuUTF-8awriteu%s: atimeastrftimeTu%x %XaprintuLog the given string to stdout. Prepend timestamp if requestedaerrorasysaexitTluPrint out an error message and exit the program.TuERROR: Tw
uPrint out an error message.TuWARNING: uPrint out an warning message.aAPPORT_MEMDEBUGaosaenvironu/proc/self/statusa__enter__a__exit__astartswithTaVmasplitutoo many values to unpack (expected 3)f�@amemstat:nl��������nTnnnuSize: %.1f MB, RSS: %.1f MB, Stk: %.1f MB @ %s
aVmSizeaVmRSSaVmStkuPrint current memory usage.

    This is only done if $APPORT_MEMDEBUG is set.
    a__doc__u/usr/lib/python3/dist-packages/apport/__init__.pya__file__Lu/usr/lib/python3/dist-packages/apporta__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__uapport.reportTaReportaReportuapport.packaging_implTaimplaimplapackagingaunicode_gettextTFalogafatalawarningamemdbgu<module apport>TamsgaargsTamessageatimestampTacheckpointamemstatwfalineafieldasizeaunitTastratransu.apport.fileutils*aosaaccessu/usr/bin/whoopsieaX_OKasubprocessacallLu/bin/systemctlu-quis-enableduwhoopsie.serviceluCheck whether crash reporting is enabled.astartswithTuunix:path=/run/user/u../Tw%w,w;asplitTw=luExtract the socket from a DBus address.apackagingaget_filesaendswithTu.desktopTu/etc/xdg/autostartTu/usr/share/applications/adesktopfilearba__enter__a__exit__cNoDisplay=trueareadTnnnuReturn a package's .desktop file.

    If given package is installed and has a single .desktop file, return the
    path to it, otherwise return None.
    L	u/bin/u/bootu/etc/u/initrdu/libu/sbin/u/optu/usr/u/varafileTu/usr/local/Tu/var/lib/uCheck whether the given file is likely to belong to a package.

    This is semi-decidable: A return value of False is definitive, a True value
    is only a guess which needs to be checked with find_file_package().
    However, this function is very fast and does not access the package
    database.
    apathutoo many values to unpack (expected 2)arealpathaisdirajoinalikely_packagedaget_file_packageuReturn the package that ships the given file.

    Return None if no package ships it.
    arequests_unixsocketaSessionagetuhttp+unix://%2Frun%2Fsnapd.socket/v2/snaps/{}astatus_codel�ajsonaresultuReturn the data of the given snap.

    Return None if the snap is not found to be installed.
    astatast_atimeast_mtimeast_sizeuCheck whether the report file has already been processed earlier.u%s.uploadarsplitTw.lu%s.uploadedaexistsauploadaunlinkwaaExecutablePathareplaceTw/w_ureport does not have the ExecutablePath attributeageteuidu%s.%s.%s.hangingareport_dirautimelatimeoutareportTlacloseatimeasleepTf�������?adelete_reportuMark given report file as seen.aglobu*.crashagetsizeaR_OKaW_OKareportsaappenduReturn a list with all report files accessible to the calling user.aget_all_reportsaseen_reportuGet new reports for calling user.

    Return a list with all report files which have not yet been processed
    and are accessible to the calling user.
    ast_uidl�apwdagetpwuidapw_nameTaguestuGet all system reports.

    Return a list with all report files which belong to a system user (i. e.
    uid < 500 according to LSB).
    aget_all_system_reportsuGet new system reports.

    Return a list with all report files which have not yet been processed
    and belong to a system user (i. e. uid < 500 according to LSB).
    wwatruncateTluDelete the given report file.

    If unlinking the file fails due to a permission error (if report_dir is not
    writable to normal users), the file will be truncated to 0 bytes instead.
    aProblemReportaloadDakey_filterLaCrashCounteraDateaCrashCounteramktimeastrptimeaDatealocaltimel�QTEValueErrorEKeyErroruReturn the number of recent crashes for the given report file.

    Return the number of recent crashes (currently, crashes which happened more
    than 24 hours ago are discarded).
    aPackageTnlureport has neither ExecutablePath nor Package attributeu%s.%s.crashaxbuConstruct a canonical pathname for a report and open it for writing

    If uid is not given, it defaults to the effective uid of the current process.
    The report file must not exist already, to prevent losing previous reports
    or symlink attacks.

    Return an open file object for binary writing.
    aPopenu/usr/bin/md5sumu-caPIPEw/TastdoutastderracwdaenvacommunicateadecodeareturncodeasplitlinesTaFAILEDamismatchesTw:luCheck file integrity against md5 sum file.

    sumfile must be md5sum(1) format (relative to /).

    Return a list of files that don't match.
    la_config_filew~uaget_configaconfigaConfigParserTnTainterpolationaopenaO_NOFOLLOWaO_RDONLYafstataS_ISREGast_modeafdopenwrTl�TEOSErrorpwfafdaread_stringaMissingSectionHeaderErroragetbooleanaNoOptionErroraNoSectionErroruReturn a setting from user configuration.

    This is read from ~/.config/apport/settings or path. If bool is True, the
    value is interpreted as a boolean.

    Privileges may need to be dropped before calling this.
    arfindTw)lluExtracts the starttime from the contents of a stat fileTuUid:TuGid:areal_uidareal_giduExtracts the uid and gid from the contents of a status fileuSearch for an ID in a map fdu/proc/sys/kernel/random/boot_idastripaboot_iduGets the kernel boot idaunknownareadlinkTaexeTadir_fduGets the process path from a proc directory file descriptoru/proc/%s/stataget_starttimeastat_contentsaget_process_pathTw.w_agetuiducore.%s.%s.%s.%s.%saget_boot_idapidacore_diruGet the path to a core filealistdirTapathTw.agetmtimeauid_filesTEIndexErrorEFileNotFoundErroruSearches the core file directory for files that belong to a
       specified uid. Returns a list of lists containing the filename and
       the file modification time.afind_core_files_by_uidasortedaitemgetterTakeyamax_corefiles_per_uidaremoveasorted_filesuRemoves old files from the core directory if there are more than
       the maximum allowed per uidalddaSTDOUTTastdoutastderrauniversal_newlinesastdoutTu=>lulinux-vdsoTw(alibsawaituGet libraries with which the specified binary is linked.

    Return a library name -> path mapping, for example 'libc.so.6' ->
    '/lib/x86_64-linux-gnu/libc.so.6'.
    ashared_librariesalibu.so.uCheck if the binary at path links with the library named lib.

    path should be a fully qualified path (e.g. report['ExecutablePath']),
    lib may be of the form 'lib<name>' or 'lib<name>.so.<version>'
    uFunctions to manage apport problem report files.a__doc__u/usr/lib/python3/dist-packages/apport/fileutils.pya__file__a__spec__aoriginahas_locationa__cached__uos.pathasysaoperatorTaitemgetteraconfigparserTaConfigParseraNoOptionErroraNoSectionErroraMissingSectionHeaderErroraproblem_reportTaProblemReportuapport.packaging_implTaimplaimplaenvironTaAPPORT_REPORT_DIRu/var/crashu/var/lib/apport/coredumpu~/.config/apport/settingsaallowed_to_reportaget_dbus_socketafind_package_desktopfileafind_file_packageafind_snapamark_report_uploadamark_hanging_processamark_report_seenaget_new_reportsaget_new_system_reportsaget_recent_crashesamake_report_fileacheck_files_md5TnnFaget_uid_and_gidasearch_mapTnnnnnaget_core_pathaclean_core_directoryalinks_with_shared_libraryu<listcomp>Twru<module apport.fileutils>TasumfilewmaoutamismatchesalineTauidauid_filesasorted_fileswxTareportwfTauidacore_filesauid_fileswfatimeTafileadiranamearesolved_dirTapackageadesktopfilealinewfTasnapasessionwrwjTareportswrTareportswrastapwTwfaboot_idT
asectionasettingadefaultapathaboolahomediracontentsafdwfastT	apidaexeauidatimestampaproc_pid_fdastat_fileastat_contentsacore_nameacore_pathTadbus_addrasearchapartsTaproc_pid_fdTareportapracountareport_timeacur_timeTacontentsastrippedTacontentsareal_uidareal_gidalineTafileapkg_whitelistawhitelist_matchwiTapathalibalibsalinked_libTareportauidasubjectapathTareportapidasubjectauidabaseapathTareportastatimeoutwfTareportauploadauploadedareport_staupload_stTamapfdauidalineafieldsahost_startahost_endTareportastTapathalibsalddalineanamearest.apport.hookutils'?badecodeTuUTF-8a_invalid_key_chars_reasubw.areplaceTw w_uGenerate a valid report key name from a file path.

    This will replace invalid punctuation symbols with valid ones.
    u../apath_to_keyapathaattach_fileuAttach file contents if file exists.

    If key is not specified, the key name will be derived from the file
    name with path_to_key().

    If overwrite is True, an existing key will be updated. If it is False, a
    new key with '_' appended will be added instead.

    If the contents is valid UTF-8, or force_unicode is True, then the value
    will be a string, otherwise it will be bytes.
    uError: invalid path.aosaopenaO_NOFOLLOWaO_RDONLYaO_NONBLOCKafstatarealpathast_inoastatacloseuError: path contained symlinks.aS_ISREGast_modeafdopenarba__enter__a__exit__areadastripTnnnuError: path was not a regular file.acontentsTuUTF-8areplaceTaerrorsuError: uReturn the contents of the specified path.

    If the contents is valid UTF-8, or force_unicode is True, then the value
    will a string, otherwise it will be bytes.

    Upon error, this will deliver a text representation of the error,
    instead of failing.
    akeyw_aread_fileTaforce_unicodeuAttach a file to the report.

    If key is not specified, the key name will be derived from the file
    name with path_to_key().

    If overwrite is True, an existing key will be updated. If it is False, a
    new key with '_' appended will be added instead.

    If the contents is valid UTF-8, or force_unicode is True, then the value
    will a string, otherwise it will be bytes.
    apackagingaget_modified_conffilesaitemsutoo many values to unpack (expected 2)umodified.conffile.u[deleted]astartswithTu[inaccessibleareportauiayesnouIt seems you have modified the contents of "%s".  Would you like to add the contents of it to your bug report?u[modified]adatetimeafromtimestampast_mtimeaisoformatumtime.conffile.uAttach information about any modified or deleted conffiles.

    If conffiles is given, only this subset will be attached. If ui is given,
    ask whether the contents of the file may be added to the report; if this is
    denied, or there is no UI, just mark it as "modified" in the report.
    aapportaget_filesaexistsTu/etc/init/Tu.confu.overrideuupstart.Tu/etc/init/uaattach_file_if_existsuAttach information about any Upstart override filesTu/usr/share/upstart/sessions/abasenameTu.confu.logajoinaenvironaXDG_CACHE_HOMEaupstartaHOMEu.cacheTu/usr/share/applications/aendswithTu.desktopasplitextluupstart.application.uapplication-%s.loguAttach information about a package's session upstart logsagetTaCurrentDmesguacommand_outputLadmesgaCurrentDmesguAttach information from the kernel ring buffer (dmesg).

    This will not overwrite already existing information.
    u/sys/class/dmi/idalistdirTu/sys/class/dmi/idu%s/%slTasubsystemaueventTEOSErrorpudmi.Tw_w.aattach_dmesgu/proc/interruptsaProcInterruptsu/proc/cpuinfoaProcCpuinfou/proc/cmdlineaProcKernelCmdLineu/sys/bus/pciLalspciu-vvnnaLspciLalspciu-vtuLspci-vtLalsusbaLsusbLalsusbu-vuLsusb-vLalsusbu-tuLsusb-tLasortu/proc/modulesaProcModulesLaudevadmainfou--export-dbaUdevDbaroot_command_outputLu/usr/share/apport/dump_acpi_tables.pyaacpidumpareuID_FS_LABEL=(.*)uID_FS_LABEL=<hidden>uID_FS_LABEL_ENC=(.*)uID_FS_LABEL_ENC=<hidden>uby-label/(.*)uby-label/<hidden>aattach_dmiudmi.sys.vendorudmi.product.nameu%s %saMachineTypeacommand_availableTaprtconfLaprtconfaPrtconfTapccardctlLapccardctlastatusaPccardctlStatusLapccardctlaidentaPccardctlIdentuAttach a standard set of hardware-related data to the report, including:

    - kernel dmesg (boot and current)
    - /proc/interrupts
    - /proc/cpuinfo
    - /proc/cmdline
    - /proc/modules
    - lspci -vvnn
    - lscpi -vt
    - lsusb
    - lsusb -v
    - lsusb -t
    - devices from udev
    - DMI information from /sys
    - prtconf (sparc)
    - pccardctl status/ident
    aexpanduserTu~/.asoundrcaUserAsoundrcTu~/.asoundrc.asoundconfaUserAsoundrcAsoundconfu/etc/asound.confu/proc/asound/versionaAlsaVersionLalsu-lu/dev/snd/aAlsaDevicesLaaplayu-laAplayDevicesLaarecordu-laArecordDevicesapci_devicesaPCI_MULTIMEDIAaPciMultimediau/proc/asound/cardsu]:alstripasplitacardsaappenduCard%d.Amixer.infoaamixeru-cainfouCard%d.Amixer.valuesaglobu/proc/asound/card%d/codec*aisfileuCard%d.Codecs.%sTakeyaisdiracodecpathuCard%d.Codecs.%s.%sacodecu (loosely based on http://www.alsa-project.org/alsa-info.sh)
    for systems where alsa-info is not installed (i e, *buntu 12.04 and earlier)
    u/usr/share/alsa-base/alsa-info.shLu/usr/share/alsa-base/alsa-info.shu--stdoutu--no-uploadaAlsaInfoaattach_alsa_oldLafuseru-vTu/dev/dsp*Tu/dev/snd/*Tu/dev/seq*aAudioDevicesInUseu/usr/bin/pacmdLapacmdalistaPulseListuAttach ALSA subsystem information to the report.
    aPATHapathsepacommandaaccessaX_OKuIs given command on the executable search path?acopywCaLC_MESSAGESasubprocessaPopenaPIPEaenvTastdoutastderrastdinaenvacommunicateareturncodecError: command aencodec failed with exit code c: uTry to execute given command (list) and return its stdout.

    In case of failure, a textual error gets returned. This function forces
    LC_MESSAGES to C, to avoid translated output in bug reports.

    If decode_utf8 is True (default), the output will be converted to a string,
    otherwise left as bytes.
    a_AGENTageteuidasysastdinaisattyu/usr/bin/pkttyagentapipe2Tlapkttyagentu--notify-fdu--fallbackTaclose_fdsastdinastdoutaselectaepollaregisterwraEPOLLINapollaEPOLLHUPaterminateawaitagetuidu/usr/bin/pkexeca_spawn_pkttyagentLapkexecTucommand must be a lista_root_command_prefixTakeep_localeadecode_utf8uTry to execute given command (list) as root and return its stdout.

    This passes the command through pkexec, unless the caller is already root.

    In case of failure, a textual error gets returned.

    If decode_utf8 is True (default), the output will be converted to a string,
    otherwise left as bytes.
    aabspathTaAPPORT_DATA_DIRu/usr/share/apportaroot_info_wrapperatempfileamkdtempu:script:wwTucommand must be a string (shell command)ascriptawriteu%s | cat > %s
aworkdirabufashutilarmtreeuExecute multiple commands as root and put their outputs into report.

    command_map is a keyname -> 'shell command' dictionary with the commands to
    run. They are all run through /bin/sh, so you need to take care of shell
    escaping yourself. To include stderr output of a command, end it with
    "2>&1".

    Just like root_command_output, this passes the command through pkexec,
    unless the caller is already root.

    This is preferrable to using root_command_output() multiple times, as that
    will ask for the password every time.
    uaprocessastdoutapatternasearchalinesatailu-nu10000Tastdoutu/run/systemd/systemTLajournalctlu--systemu--quietu-bu-au/var/log/syslogaR_OKTLatailu-nu10000u/var/log/sysloga__filter_re_processwpuExtract recent system messages which match a regex.

    pattern should be a "re" object. By default, messages are read from
    the systemd journal, or /var/log/syslog; but when giving "path", messages
    are read from there instead.
    Tu~/.xsession-errorsacompileTu^(\(.*:\d+\): \w+-(WARNING|CRITICAL|ERROR))|(Error: .*No Symbols named)|([^ ]+\[\d+\]: ([A-Z]+):)|([^ ]-[A-Z]+ \*\*:)|(received an X Window System error)|(^The error was \')|(^  \(Details: serial \d+ error_code)uExtract messages from ~/.xsession-errors.

    By default this parses out glib-style warnings, errors, criticals etc. and
    X window errors.  You can specify a "re" object as pattern to customize the
    filtering.

    Please note that you should avoid attaching the whole file to reports, as
    it can, and often does, contain sensitive and private data.
    Lalspciu-vvmmnnTu

Tw
Tw:laClass:l��������l��������nll�laSlotapci_classaslotaresultu

alspciu-vvnnsuReturn a text dump of PCI devices attached to the system.uReturn a text dump of USB devices attached to the system.afnmatchaglobpatuRetrieve a list of files owned by package, optionally matching globpatTaGsettingsChangesuu/nonexistingaXDG_CONFIG_HOMEagsettingsulist-recursivelyTaenvastdoutTnlutoo many values to unpack (expected 3)arstripadefaultsasetdefaultcorg.gnome.shellLccommand-historycfavorite-appsuredacted by apportacur_valueu%s %s %s
aGsettingsChangesuAttach user-modified gsettings keys of a schema.afiles_in_packageu/usr/share/glib-2.0/schemas/*.gschema.xml:nl�����naattach_gsettings_schemauAttach user-modified gsettings keys of all schemas in a package.aget_timestampu--since=@u--until=@Lu-bu--lines=1000Lajournalctlu--priority=warningaJournalErrorsuAttach journal warnings and errors.

    If the report contains a date, get the journal logs around that
    date (plus/minus the time_window in seconds). Otherwise attach the
    latest 1000 journal logs since the last boot.
    LaiparouteaIpRouteLaipaaddraIpAddraPCI_NETWORKaPciNetworku/etc/network/interfacesDakeyaIfupdownConfigTahttp_proxyaftp_proxyano_proxyuAttach generic network-related information to report.arecent_syslogTu(NetworkManager|modem-manager|dhclient|kernel|wpa_supplicant)(\[\d+\])?:aWifiSysloguESSID:(.*)uESSID:<hidden>uEncryption key:(.*)uEncryption key: <hidden>uAccess Point: (.*)uAccess Point: <hidden>LaiwconfigaIwConfigLarfkillalistaRfKillu/sbin/iwLaiwaregagetuN/AaCRDAu/var/log/wpa_supplicant.logDakeyaWpaSupplicantLoguAttach wireless (WiFi) network information to report.u/etc/papersizeaPapersizeu/var/log/cups/error_logaCupsErrorLogLalocaleaLocaleLalpstatu-vaLpstatTu/etc/cups/ppd/*.ppdLafgrepu-Hu*NickNameu/etc/cups/ppd/(.*).ppd:\*NickName: *"(.*)"u\g<1>: \g<2>aPpdFilesapackage_versionsT afoo2zjsufoomatic-dbufoomatic-db-engineufoomatic-db-gutenprintufoomatic-db-hpijsufoomatic-filtersufoomatic-guiahpijsahplipam2300wamin12xxwac2050ahpojapxljrapnm2ppaasplixuhp-ppduhpijs-ppdsulinuxprinting.org-ppdsuopenprinting-ppdsuopenprinting-ppds-extraaghostscriptacupsucups-driver-gutenprintufoomatic-db-gutenprintaijsgutenprintucupsys-driver-gutenprintugimp-gutenprintugutenprint-docugutenprint-localesusystem-config-printer-commonakdeprintaPrintingPackagesuAttach printing information to the report.

    Based on http://wiki.ubuntu.com/PrintingBugInfoScript.
    uaudit\(|apparmor|selinux|securityaIGNORECASEuapparmor="DENIED".+?profile=([^ ]+?)[ ]aKernLogTLadmesgaAuditLogu/var/run/auditd.pidaattach_root_command_outputsDaAuditLoguegrep "audit\(|apparmor|selinux|security" /var/log/audit/audit.logu/proc/version_signatureaProcVersionSignatureaProcCmdlineafindallTaKernLoguTaAuditLoguaprofilesa_add_tagaapparmorw":ll��������naversionw3afromhexTahexareplaceamatchw^w$aprofileuAttach MAC information and events to the report.TaTagsuw aTagsuAdds or appends a tag to the reportaRelatedPackageVersionsuAttach version information for related packages

    In the future, this might also run their hooks.
    apackage_name_globaversionsasortedaget_versionamaxalenu%%-%ds %%sw
afmtuReturn a text listing of package names and versions.

    Arguments may be package names or globs, e. g. "foo*"
    u/sbin/modinfoTastdoutastderrainvalidasplitlinesalicenseluReturn the license for a given kernel module.amodsa_get_module_licenseaGPLaBSDaMPLaMITanonfreeuCheck loaded modules and return a list of those which are not free.aconaueventamodesTd
d aedidabase64ab64encodeu-base64u%s: %s
wfu/sys/class/drmadrm_diraenableda__drm_con_infouDRM.uAdd information about DRM hardware.

    Collect information from /sys/class/drm/.
    TaXDG_SESSION_IDu/proc/self/cgroupuname=systemd:Tu.scopeu/session-alineTu/session-l:nl��������nalocaleagetlocaleaLC_TIMEasetlocaleatimeamktimeastrptimeaDateaErroru/run/systemd/sessions/uCheck if the problem happened in the currently running XDG session.

    This can be used to determine if e. g. ~/.xsession-errors is relevant and
    should be attached.

    Return None if this cannot be determined.
    Tu/etc/default/grubu/etc/default/grubareadlinesTapasswordu### PASSWORD LINE REMOVED ###uattach /etc/default/grub after filtering out password linesaskipaCasperMD5jsonucat '%s'ajsonaloadsachecksum_missmatchaCasperMD5CheckResultaCasperMD5CheckMismatchesapopTaCasperMD5jsonnuattach the results of the casper md5check of install mediauConvenience functions for use in package hooks.a__doc__u/usr/lib/python3/dist-packages/apport/hookutils.pya__file__a__spec__aoriginahas_locationa__cached__uapport.packaging_implTaimplaimpluapport.fileutilsTu[^0-9a-zA-Z_.-]TntFTFTnnaattach_conffilesaattach_upstart_overridesaattach_upstart_logsaattach_hardwareaattach_alsaaSTDOUTakill_pkttyagentTnaxsession_errorsaPCI_MASS_STORAGEllaPCI_DISPLAYlaPCI_MEMORYlaPCI_BRIDGElaPCI_SIMPLE_COMMUNICATIONSaPCI_BASE_SYSTEM_PERIPHERALSl	aPCI_INPUT_DEVICESl
aPCI_DOCKING_STATIONSlaPCI_PROCESSORSlaPCI_SERIAL_BUSausb_devicesaObsoleteaattach_gconfaattach_gsettings_packageTl
Dareturnnaattach_journal_errorsaattach_networkaattach_wifiaattach_printingaattach_mac_eventsaattach_related_packagesTu/proc/modulesanonfree_kernel_modulesaattach_drm_infoain_session_of_problemaattach_default_grubaattach_casper_md5checkafileutilsashared_librariesalinks_with_shared_libraryu<listcomp>TwfaglobpatTalineTwtTwvafmtu<module apport.hookutils>TaconainfowfapathavalTapatternaprocessalinesalineTareportatagacurrent_tagsTamoduleamodinfoaoutalineafieldsTwrwwaepollaeventsafdaevent_typeTareportTareportacardsafdalineafieldsacardakeyacodecpathacodecanameapathTareportalocationaresultamismatchesacheckT
areportapackageaconffilesauiamodifiedapathacontentsakeyaresponseamtimeTareportakeyapathwfafilteredTareportadmi_dirwfwpastavalueTareportadrm_dirwfaconTareportapathakeyaoverwriteaforce_unicodeTareportapackageTareportapackageaschema_fileaschemaT
areportaschemaacur_valueadefaultsaenvagsettingsalineaschema_nameakeyavalueTareportalabelsaoutTareportatime_windowacrash_timestampabefore_crashaafter_crashaargsT	areportaprofilesamac_regexamac_reaaa_regexaaa_reamatchaprofileasearch_profileTareportavarTareportappdsanicknamesTareportapackagesTareportacommand_mapawrapper_pathaworkdirascript_pathascriptakeynameacommandaspwfabufTareportapackageafileswfalogakeyadesktopnameTareportapackageafilesafileaoverrideakeyTareportaiw_outputTacommandapathaelementafilenameT
acommandainputastderrakeep_localeadecode_utf8aenvaspweaoutaresTapackageaglobpatafilesaresultTareportasession_idwfalineaorig_ctimeareport_timeasession_start_timeTamodule_listwfamodsanonfreewmwsT	apackagesaversionsapackage_patternamatching_packagesapackageaversionapackage_widthaversion_widthafmtTapathT
apci_classesaresultaoutputaparagraphapci_classaslotalineakeyavaluewnTapathaforce_unicodeafdastareal_pathwfacontentsweTapatternapathwpTacommandainputastderradecode_utf8aoutputTapatternapathalineswfaline.apport.packaging�#�uthis method must be implemented by a concrete subclassuReturn the installed version of a package.

        Throw ValueError if package does not exist.
        uReturn the latest available version of a package.

        Throw ValueError if package does not exist.
        uReturn a list of packages a package depends on.uReturn the source package name for a package.

        Throw ValueError if package does not exist.
        uReturn package origin.

        Return the repository name from which a package was installed, or None
        if it cannot be determined.

        Throw ValueError if package is not installed.
        uCheck package origin.

        Return True if the package is a genuine distro package, or False if it
        comes from a third-party source.

        Throw ValueError if package does not exist.
        uReturn the architecture of a package.

        This might differ on multiarch architectures (e. g. an i386 Firefox
        package on a x86_64 system)
        uReturn list of files shipped by a package.

        Throw ValueError if package does not exist.
        uReturn list of all modified files of a package.uReturn modified configuration files of a package.

        Return a file name -> file contents map of all configuration files of
        package. Please note that apport.hookutils.attach_conffiles() is the
        official user-facing API for this, which will ask for confirmation and
        allows filtering.
        uReturn the package a file belongs to.

        Return None if the file is not shipped by any package.

        If uninstalled is True, this will also find files of uninstalled
        packages; this is very expensive, though, and needs network access and
        lots of CPU and I/O resources. In this case, map_cachedir can be set to
        an existing directory which will be used to permanently store the
        downloaded maps. If it is not set, a temporary directory will be used.
        Also, release and arch can be set to a foreign release/architecture
        instead of the one from the current system.
        uReturn the architecture of the system.

        This should use the notation of the particular distribution.
        uExplicitly set a distribution mirror URL.

        This might be called for operations that need to fetch distribution
        files/packages from the network.

        By default, the mirror will be read from the system configuration
        files.
        uDownload a source package and unpack it into dir..

        dir should exist and be empty.

        This also has to care about applying patches etc., so that dir will
        eventually contain the actually compiled source.

        If version is given, this particular version will be retrieved.
        Otherwise this will fetch the latest available version.

        Return the directory that contains the actual source root directory
        (which might be a subdirectory of dir). Return None if the source is
        not available.
        uCompare two package versions.

        Return -1 for ver < ver2, 0 for ver1 == ver2, and 1 for ver1 > ver2.
        aconfigurationa__enter__a__exit__areadTnnnareasearchu^\s*enabled\s*=\s*0\s*$aconfwMuReturn whether Apport should generate crash reports.

        Signal crashes are controlled by /proc/sys/kernel/core_pattern, but
        some init script needs to set that value based on a configuration file.
        This also determines whether Apport generates reports for Python,
        package, or kernel crashes.

        Implementations should parse the configuration file which controls
        Apport (such as /etc/default/apport in Debian/Ubuntu).
        uReturn the actual Linux kernel package name.

        This is used when the user reports a bug against the "linux" package.
        uInstall packages into a sandbox (for apport-retrace).

        In order to work without any special permissions and without touching
        the running system, this should only download and unpack packages into
        the given root directory, not install them into the system.

        configdir points to a directory with by-release configuration files for
        the packaging system; this is completely dependent on the backend
        implementation, the only assumption is that this looks into
        configdir/release/, so that you can use retracing for multiple
        DistroReleases. As a special case, if configdir is None, it uses the
        current system configuration, and "release" is ignored.

        release is the value of the report's 'DistroRelease' field.

        packages is a list of ('packagename', 'version') tuples. If the version
        is None, it should install the most current available version.

        If cache_dir is given, then the downloaded packages will be stored
        there, to speed up subsequent retraces.

        If permanent_rootdir is True, then the sandbox created from the
        downloaded packages will be reused, to speed up subsequent retraces.

        If architecture is given, the sandbox will be created with packages of
        the given architecture (as specified in a report's "Architecture"
        field). If not given it defaults to the host system's architecture.

        If origins is given, the sandbox will be created with apt data sources
        for foreign origins.

        If install_deps is True, then the dependencies of packages will also
        be installed.

        Return a string with outdated packages, or None if all packages were
        installed.

        If something is wrong with the environment (invalid configuration,
        package servers down, etc.), this should raise a SystemError with a
        meaningful error message.
        uReturn known package names which match given glob.apackage_name_globTw*aselfais_distro_packageaget_versionuReturn a valid package name which is not installed.

        This is only used in the test suite. The default implementation should
        work, but might be slow for your backend, so you might want to
        reimplement this.
        a_os_versionu/etc/os-releaseastartswithTuNAME=asplitTw=llTw":ll��������nastripanameaendswithTuGNU/Linux:ll��������nTuVERSION_ID=aversionawriteTuinvalid /etc/os-release: Does not contain NAME and VERSION_ID
asubprocessaPopenaPIPETLalsb_releaseu-sirTastdoutastderracommunicateladecodeareplaceTw
w utoo many values to unpack (expected 2)uReturn (osname, osversion) tuple.

        This is read from /etc/os-release, or if that doesn't exist,
        'lsb_release -sir' output.
        uAbstraction of packaging operations.a__doc__u/usr/lib/python3/dist-packages/apport/packaging.pya__file__a__spec__aoriginahas_locationa__cached__aosasysametaclassTa__prepare__TaPackageInfoTa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uapport.packaginga__module__aPackageInfoa__qualname__u/etc/default/apportuPackageInfo.get_versionaget_available_versionuPackageInfo.get_available_versionaget_dependenciesuPackageInfo.get_dependenciesaget_sourceuPackageInfo.get_sourceaget_package_originuPackageInfo.get_package_originuPackageInfo.is_distro_packageaget_architectureuPackageInfo.get_architectureaget_filesuPackageInfo.get_filesaget_modified_filesuPackageInfo.get_modified_filesaget_modified_conffilesuPackageInfo.get_modified_conffilesTFnnnaget_file_packageuPackageInfo.get_file_packageaget_system_architectureuPackageInfo.get_system_architectureuReturn a list of default library search paths.

        The entries should be separated with a colon ':', like for
        $LD_LIBRARY_PATH. This needs to take any multiarch directories into
        account.
        u/lib:/usr/libaget_library_pathsuPackageInfo.get_library_pathsaset_mirroruPackageInfo.set_mirrorTnaget_source_treeuPackageInfo.get_source_treeacompare_versionsuPackageInfo.compare_versionsaenableduPackageInfo.enabledaget_kernel_packageuPackageInfo.get_kernel_packageTFnFnntFainstall_packagesuPackageInfo.install_packagesuPackageInfo.package_name_globuCheck if a package is one which has been white listed.

        Return True for a package which came from an origin which is listed in
        native-origins.d, False if it comes from a third-party source.
        ais_native_origin_packageuPackageInfo.is_native_origin_packageaget_uninstalled_packageuPackageInfo.get_uninstalled_packageaget_os_versionuPackageInfo.get_os_versionu<module apport.packaging>Ta__class__Taselfaver1aver2TaselfwfaconfTaselfapackageTaselfafileauninstalledamap_cachedirareleaseaarchTaselfTaselfanameaversionwfalinewpTaselfasrcpackageadiraversionTaselfwpTaselfarootdiraconfigdirareleaseapackagesaverboseacache_dirapermanent_rootdiraarchitectureaoriginsainstall_dbgainstall_depsTaselfaglobTaselfaurlu.apport.packaging_impl�T�a_apt_cachea_sandbox_apt_cachea_sandbox_apt_cache_archa_contents_dira_mirrora_virtual_mapping_obja_contents_mapping_objuhttps://api.launchpad.net/devela_launchpad_baseu/~%(user)s/+archive/%(distro)s/%(ppaname)sa_ppa_archive_urla_contents_updateashutilarmtreeajoinuvirtual_mapping.picklearba__enter__a__exit__apicklealoadTnnnawbadumpareleaseaarchucontents_mapping-%s-%s.pickleaosastatast_sizelaremoveamapping_fileaaptaprogressabaseaOpProgressaCacheDarootdirw/Tw/TarootdiruReturn apt.Cache() (initialized lazily).a_build_apt_sandboxaabspathaupdateacacheaFetchFailedExceptionaopenaclearuBuild apt sandbox and return apt.Cache(rootdir=) (initialized lazily).

        Clear the package selection on subsequent calls.
        a_cacheupackage %s does not existuReturn apt.Cache()[package] (initialized lazily).

        Throw a ValueError if the package does not exist.
        a_apt_pkgainstalledaversionuReturn the installed version of a package.acandidateuReturn the latest available version of a package.a_pkgacurrent_veradepends_listagetaDependsaPreDependsaRecommendsatarget_pkganameuReturn a list of packages a package depends on.asource_nameuReturn the source package name for a package.upackage is not installedaoriginsaoriginuReturn package origin.

        Return the repository name from which a package was installed, or None
        if it cannot be determined.

        Throw ValueError if package is not installed.
        aget_os_versionSuu/etc/system-image/channel.iniuCheck if a package is a genuine distro package.

        Return True for a native distro package, False if it comes from a
        third-party source.
        aglobTu/etc/apport/native-origins.d/*astripanative_originsaappenduCheck if a package originated from a native location

        Return True for a package which came from an origin which is listed in
        native-origins.d, False if it comes from a third-party source.
        aapt_pkgaconfigasetTuAPT::Get::AllowUnauthenticatedaTrueulaunchpadlib.launchpadTaLaunchpadaLaunchpadalogin_anonymouslyTuapport-retraceaproductionadevelTaversionadistributionsaubuntuagetSeriesasplitl��������Taname_or_versionagetDistroArchSeriesTaarchtagagetArchiveTaprimaryTanameagetPublishedBinariesTabinary_nameaversionadistro_arch_seriesaorderedaexact_matchTnnuastatusaDeletedaarchitecture_specificabinaryFileUrlsTtTainclude_metaadistro_arch_series_linkaendswithaurlasha1aurlopenagetcodel�aHTTPErroru%uaURLErroraapportawarningucannot connect to: %saunquoteareadufailure reading data at: %sadecodeTuutf-8ajsonaloadsaentriesuOpen, read and parse the json of a url

        Set entries to True when the json data returned by Launchpad
        has a dictionary with an entries key which contains the data
        desired.
        agetPublishedSourcesTasource_nameaversionaexact_matchasourceFileUrlsasource_filesaarchitectureaunknownuReturn the architecture of a package.

        This might differ on multiarch architectures (e. g. an i386 Firefox
        package on a x86_64 system)a_call_dpkgu-LasplitlinesastartswithTadiverteduReturn list of files shipped by a package.u/var/lib/dpkg/info/%s:%s.listaget_system_architectureu/var/lib/dpkg/info/%s.listaS_ISREGast_modeamaxast_mtimeast_ctimecu/var/lib/dpkg/info/%s:%s.md5sumsapackageu/var/lib/dpkg/info/%s.md5sumsdu%s contains NUL character, ignoring lineasumfileu%s contains empty line, ignoring linew/TuUTF-8aencodeasumsa_check_files_md5uReturn list of all modified files of a package.asubprocessaPopenudpkg-queryu-Wu--showformat=${Conffiles}u--aPIPETastdoutacommunicateareturncode:nlnutoo many values to unpack (expected 2)apathaexistsahashlibamd5acontentsahexdigestamodifiedu[inaccessible: %s]u[deleted]uReturn modified configuration files of a package.

        Return a file name -> file contents map of all configuration files of
        package. Please note that apport.hookutils.attach_conffiles() is the
        official user-facing API for this, which will ask for confirmation and
        allows filtering.
        ldamatchwiafgrepu-lxmw1afile_listaslice_sizeTastdinastdoutastderruCall fgrep for a pattern on given file list and return the first
        matching file, or None if no file matches.a_search_contentsudpkg-divertu--listTastdoutastderruhardening-wrapperasplitextabasenamealowerTu/var/lib/dpkg/info/*.listTw:alikely_listsaall_listsa_AptDpkgPackageInfo__fgrep_filesTu/usr:lnnu%suReturn the package a file belongs to.

        Return None if the file is not shipped by any package.

        If uninstalled is True, this will also find files of uninstalled
        packages; this is very expensive, though, and needs network access and
        lots of CPU and I/O resources. In this case, map_cachedir can be set to
        an existing directory which will be used to permanently store the
        downloaded maps. If it is not set, a temporary directory will be used.
        Also, release and arch can be set to a foreign release/architecture
        instead of the one from the current system.
        TLadpkgu--print-architectureuReturn the architecture of the system, in the notation used by the
        particular distribution.TLudpkg-architectureu-qDEB_HOST_MULTIARCHu/lib/%s:/libuReturn a list of default library search paths.

        The entries should be separated with a colon ':', like for
        $LD_LIBRARY_PATH. This needs to take any multiarch directories into
        account.
        uExplicitly set a distribution mirror URL for operations that need to
        fetch distribution files/packages from the network.

        By default, the mirror will be read from the system configuration
        files.
        aenvironacopyatempfileaNamedTemporaryFileawriteuDir "%s";
Dir::State::Status "/var/lib/dpkg/status";
Debug::NoLocking "true";
 aflushaAPT_CONFIGacallaenvTLuapt-getu-qqaupdateTaenvuapt-getu-qqu--assume-yesasourcew=aargvTacwdaenvaget_lp_source_packageaget_distro_nameafindTuAcquire::http::ProxyTuAcquire::http::ProxyuaAcquireProgressaAcquireaaf_queueaAcquireFileafetcheradirTadestdirarunaRESULT_CONTINUEuAcquire::http::Proxyu*.dscudpkg-sourceu-snu-xTastdoutacwdasrcpackageu-*aisdirarootTucould not determine source tree root directoryTu(debian/rules patch || debian/rules apply-patches || debian/rules apply-dpatches || debian/rules unpack || debian/rules patch-stamp || debian/rules setup) >/dev/null 2>&1TashellacwduDownload source package and unpack it into dir.

        This also has to care about applying patches etc., so that dir will
        eventually contain the actually compiled source. dir needs to exist and
        should be empty.

        If version is given, this particular version will be retrieved.
        Otherwise this will fetch the latest available version.

        If sandbox is given, it calls apt-get source in that sandbox, otherwise
        it uses the system apt configuration.

        If apt_update is True, it will call apt-get update before apt-get
        source. This is mostly necessary for freshly created sandboxes.

        Return the directory that contains the actual source root directory
        (which might be a subdirectory of dir). Return None if the source is
        not available.
        ulinux-image-aunameluReturn the actual Linux kernel package name.

        This is used when the user reports a bug against the "linux" package.
        aUnamelaArchitectureaPackageulinux-image-debug-%saisInstalledafind_dirTuDir::Cache::archivesu/partialu%s_%s_%s.ddebuhttp://ddebs.ubuntu.com/pool/main/l/linux/%swwTualinuxwuTl aoutacloseadpkgu-iTw_uInstall kernel debug package

        Ideally this would be just another package but the kernel is
        special in various ways currently so we can not use the apt
        method.
        u/etc/apt/sources.listaselfaget_distro_codenameacurrent_release_codenameusources.listaset_mirrora_get_primary_mirror_from_apt_sourcesucannot determine mirror: %sacodenameaapt_sourcesu%s does not existaconfigdirasystemamakedirsamkdtempuAPT::ArchitectureTuAcquire::LanguagesanoneTuAcquire::http::Proxy::api.launchpad.netaDIRECTTuAcquire::http::Proxy::launchpad.netaDIRECTatexta_sandbox_cacheaaptrootaSourceRecordsupackages.txtapkg_versionsafetchProgressupackage %s does not exist, ignoringareplaceTw%u%%aobsoletew
adependenciesapackagesacompare_versionsadepsaextendaversionsaget_lp_binary_packageaacquire_queueusha1:%saarchivedirTahashadestdiralp_cacheu%s version %s required, but %s is available
acache_pkgareal_pkgsaaddapkga_virtual_mappingaprovidesavirtual_mappingasetdefaultaConflictsarecordaparse_dependsaReplacesais_virtual_packageu%s_*.deba_deb_versionacheck_depaunlinkaallu-dbgaveradbguoutdated -dbg package for %s: package version %s -dbg version %s
adbg_pkgasrc_recordsarestartalookupabinariesTu-dbgatransitionaladescriptionadbgswpu-dbgsymadbgsymuoutdated debug symbol package for %s: package version %s dbgsym version %s
uno debug symbol package found for %s
amark_installTFpatimeafetch_archivesTafetcheraerroruPackage download error, try again later: %sasysaexitTlaprintTuExtracting downloaded debs...aitemsacheck_outputudpkg-debu--showadestfileagetctimeacheck_callarootdirTw_lakeysasortwfTw Tw
uapt fetcher did not fetch these packages: w a_save_virtual_mappinguInstall packages into a sandbox (for apport-retrace).

        In order to work without any special permissions and without touching
        the running system, this should only download and unpack packages into
        the given root directory, not install them into the system.

        configdir points to a directory with by-release configuration files for
        the packaging system; this is completely dependent on the backend
        implementation, the only assumption is that this looks into
        configdir/release/, so that you can use retracing for multiple
        DistroReleases. As a special case, if configdir is None, it uses the
        current system configuration, and "release" is ignored.

        release is the value of the report's 'DistroRelease' field.

        packages is a list of ('packagename', 'version') tuples. If the version
        is None, it should install the most current available version.

        If cache_dir is given, then the downloaded packages will be stored
        there, to speed up subsequent retraces.

        If permanent_rootdir is True, then the sandbox created from the
        downloaded packages will be reused, to speed up subsequent retraces.

        If architecture is given, the sandbox will be created with packages of
        the given architecture (as specified in a report's "Architecture"
        field). If not given it defaults to the host system's architecture.

        If origins is given, the sandbox will be created with apt data sources
        for foreign origins.

        If install_deps is True, then the dependencies of packages will also
        be installed.

        Return a string with outdated packages, or an empty string if all
        packages were installed.

        If something is wrong with the environment (invalid configuration,
        package servers down, etc.), this should raise a SystemError with a
        meaningful error message.
        afnmatchafilteruReturn known package names which match given glob.LadpkgTOinputupackage does not existuCall dpkg with given arguments and return output, or return None on
        error.u/usr/bin/md5sumu-cTastdoutastderracwdaenvTuUTF-8areplaceTaerrorsTumd5sum list value must be a byte arrayTLu/usr/bin/md5sumu-cTastdinastdoutastderracwdaenvwmTaFAILEDamismatchesarsplitTw:luInternal function for calling md5sum.

        This is separate from get_modified_files so that it is automatically
        testable.
        adebTw[Tuhttp://Tuhttps://ucannot determine default mirror: %s does not contain a valid deb lineuHeuristically determine primary mirror from an apt sources.listTu/etc/apt/sources.listuReturn the distribution mirror URL.

        If it has not been set yet, it will be read from the system
        configuration.uCannot map DistroRelease to a code name without install_packages()uMap a DistroRelease: field value to a release code namea_distro_release_to_codenameTu-proposeduu-securityu-updatesu%s%s-Contents-%s.gzl�Qu%s/dists/%s%s/Contents-%s.gza_get_mirrorahttplibTaHTTPConnectionaHTTPConnectionaurlparseTaurlparseuhttp.clientuurllib.parseadatetimeTadatetimearequestaHEADagetresponseagetheaderTulast-modifiednastrptimeu%a, %d %b %Y %H:%M:%S %ZafromtimestampastasrcTl@Ba_contents_mappingagzipaline_numLatrustyaxenialTd/cusrTclibclibexecclibx32cbincsbincsharecgamescBrothercshareTcdocciconscmanctexlivecgocodeclocalechelpTd,Tclibcbincsbinacontents_mappinga_save_contents_mapping:lnnTuusr/lib/x86_64-linux-gnu/Tuusr/lib/i386-linux-gnu/Tuusr/lib/systemd/Tuusr/lib/udev/Tuusr/bin/Tuusr/sbin/afilesuInternal function for searching file in Contents.gz.TuLP-PPA-Tw-:lnnTappaaindexacomponentsw-aclosingapackagingauseradistroappanameatry_ppaappa_nameudeb http://ppa.launchpad.net/%s/%s/%s %s mainuhttp://ppa.launchpad.net/%s/%s/%s/dists/%s/main/debugu main/debugu
deb-src:lnnuFor an origin from a Launchpad PPA create sources.list content.

        distro is the distribution for which content is being created e.g.
        ubuntu.

        release_codename is the codename of the release for which content is
        being created e.g. trusty.

        Return a string containing content suitable for writing to a sources.list
        file, or None if the origin is not a Launchpad PPA.
        avaralibalistsapartialaarchivesaetcuapt.conf.dupreferences.dusources.list.du.dacopytreealist_du.listuLP-PPAaorigin_pathaklassacreate_ppa_source_from_originadistro_namearelease_codenameasource_list_contentaapt_rootwaTw#uppa.launchpad.netllaorigin_datauCould not find or create source config for %sadirnameutrusted.gpgTu/etc/apt/trusted.gpgu/etc/apt/trusted.gpgutrusted.gpg.dTu/etc/apt/trusted.gpg.du/etc/apt/trusted.gpg.daquoteajson_requestasigning_key_fingerprintuError: can't find signing_key_fingerprint at %suapt-keyu--keyringatrusted_du%s.gpgaadvu--quietu--keyserverukeyserver.ubuntu.comu--recv-keyuUnable to import key for %su-faVersionuReturn the version of a .deb fileaversion_compareuCompare two package versions.

        Return -1 for ver < ver2, 0 for ver1 == ver2, and 1 for ver1 > ver2.a_distro_codenameTLalsb_releaseu-scuGet "lsb_release -sc", cache the result.a_distro_nameTw w-uGet osname from /etc/os-release, or if that doesn't exist,
           'lsb_release -sir' output and cache the result.uapport.PackageInfo class implementation for python-apt and dpkg.

This is used on Debian and derivatives such as Ubuntu.
a__doc__u/usr/lib/python3/dist-packages/apport/packaging_impl.pya__file__a__spec__ahas_locationa__cached__acontextlibTaclosingawarningsafilterwarningsaignoreuapt API not stable yetaFutureWarningacPickleaurllibTaurlopenaquoteaunquoteuurllib.errorTaURLErroraHTTPErroruurllib.requestTaurlopenTaquoteaunquoteuapport.packagingTaPackageInfoaPackageInfoametaclassa__prepare__a__AptDpkgPackageInfoa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uapport.packaging_impla__module__uConcrete apport.PackageInfo class implementation for python-apt and
    dpkg, as found on Debian and derivatives such as Ubuntu.a__qualname__a__init__u__AptDpkgPackageInfo.__init__a__del__u__AptDpkgPackageInfo.__del__u__AptDpkgPackageInfo._virtual_mappingu__AptDpkgPackageInfo._save_virtual_mappingu__AptDpkgPackageInfo._contents_mappingu__AptDpkgPackageInfo._save_contents_mappingu__AptDpkgPackageInfo._cacheu__AptDpkgPackageInfo._sandbox_cacheu__AptDpkgPackageInfo._apt_pkgaget_versionu__AptDpkgPackageInfo.get_versionaget_available_versionu__AptDpkgPackageInfo.get_available_versionaget_dependenciesu__AptDpkgPackageInfo.get_dependenciesaget_sourceu__AptDpkgPackageInfo.get_sourceaget_package_originu__AptDpkgPackageInfo.get_package_originais_distro_packageu__AptDpkgPackageInfo.is_distro_packageais_native_origin_packageu__AptDpkgPackageInfo.is_native_origin_packageu__AptDpkgPackageInfo.get_lp_binary_packageTFu__AptDpkgPackageInfo.json_requestu__AptDpkgPackageInfo.get_lp_source_packageaget_architectureu__AptDpkgPackageInfo.get_architectureaget_filesu__AptDpkgPackageInfo.get_filesaget_modified_filesu__AptDpkgPackageInfo.get_modified_filesaget_modified_conffilesu__AptDpkgPackageInfo.get_modified_conffilesa__fgrep_filesu__AptDpkgPackageInfo.__fgrep_filesTFnnnaget_file_packageu__AptDpkgPackageInfo.get_file_packageaclassmethodu__AptDpkgPackageInfo.get_system_architectureaget_library_pathsu__AptDpkgPackageInfo.get_library_pathsu__AptDpkgPackageInfo.set_mirrorTnnFaget_source_treeu__AptDpkgPackageInfo.get_source_treeaget_kernel_packageu__AptDpkgPackageInfo.get_kernel_packagea_install_debug_kernelu__AptDpkgPackageInfo._install_debug_kernelTFnFnntFainstall_packagesu__AptDpkgPackageInfo.install_packagesapackage_name_globu__AptDpkgPackageInfo.package_name_globu__AptDpkgPackageInfo._call_dpkgu__AptDpkgPackageInfo._check_files_md5u__AptDpkgPackageInfo._get_primary_mirror_from_apt_sourcesu__AptDpkgPackageInfo._get_mirroru__AptDpkgPackageInfo._distro_release_to_codenameu__AptDpkgPackageInfo._search_contentsu__AptDpkgPackageInfo.create_ppa_source_from_originu__AptDpkgPackageInfo._build_apt_sandboxu__AptDpkgPackageInfo._deb_versionu__AptDpkgPackageInfo.compare_versionsu__AptDpkgPackageInfo.get_distro_codenameu__AptDpkgPackageInfo.get_distro_namea__orig_bases__aimplu<listcomp>TwdTwfTwoTwpacacheTapkgu<module apport.packaging_impl>Ta__class__TaselfTaselfapatternafile_listamatchaslice_sizewiwpaoutTaselfapackageTaklassaapt_rootaapt_sourcesadistro_namearelease_codenameaoriginsalist_dasrcadestasource_list_contentaorigin_dataaoriginaorigin_pathasrc_extalineauserappaatrusted_gpgatrusted_dappa_userappa_nameappa_archive_urlappa_infoasigning_key_fingerprintaargvTaselfaprogressTaklassaargsadpkgaoutTaselfasumfilewmaoutamismatchesalineTaselfaconfigdirareleaseaarchamapping_fileafpTaklassapkgadpkgaoutTaselfareleaseTaklassaapt_sourceswfalineafieldsamirror_idxTaselfareportainstalledaoutdatedakveraarchaveradebug_pkgnamewcatarget_diradebaurlaoutwuablockaretT
aselfaaptrootaapt_sourcesafetchProgressadistro_namearelease_codenameaoriginsaarcharootdirweTaselfaconfigdiramapping_fileafpT aselfafileamap_cachedirareleaseaarchadirapocketamapaupdateastaageaurlaHTTPConnectionaurlparseadatetimeaserveraconnaresamodified_stramodifiedasrcwfadataacontents_mappingagzipacontentsaline_numalineapathapackageafilesapkgTaselfaver1aver2T
aklassaoriginadistroarelease_codenameacomponentsatry_ppaaindexauserappa_namearesponseappa_lineadebug_urlaadd_debugTaselfapackageacur_verTaselfalsb_releaseTaselfafileauninstalledamap_cachedirareleaseaarchadpkgaoutapkgafnameaall_listsalikely_listswfwpamatchTaselfapackagealistTaselfadpkgamultiarch_tripleTaselfadistro_idareleaseapackageaversionaarchaLaunchpadalaunchpadaubuntuaseriesadasaprimaryabpphabf_urlsabpabfT
aselfadistro_idapackageaversionaLaunchpadalaunchpadaubuntuaprimaryapssasfusapsasource_filesasfuT
aselfapackageadpkgaoutamodifiedalineapathadefault_md5sumafdacontentswmacalculated_md5sumweT
aselfapackagealistfilewsamax_timeasumsasumfileafdalineawordsTaselfapackageapkgaoriginTaselfasrcpackageadiraversionasandboxaapt_updateaenvwfaargvasf_urlsaproxyafetchProgressafetcheraaf_queueasfaresultadscarootwdTaklassadpkgaarchTaselfapackageapkgainstT>aselfarootdiraconfigdirareleaseapackagesaverboseacache_dirapermanent_rootdiraarchitectureaoriginsainstall_dbgainstall_depsaapt_sourcesaarch_apt_sourceswewfatmp_aptrootaaptroot_archaaptrootafetchProgressacacheaarchivediraobsoleteasrc_recordsapkg_listapkg_versionsalinewpwvareal_pkgsalp_cacheafetcheraacquire_queueadepsapkgaveracache_pkgwmadepadep_pkg_versainst_versionalp_urlasha1sumacandidateavirtual_mappingaconflictsaconflictaprovidersadebsapathadbg_pkgadbgapkg_foundadbgsadbgsym_pkgadbgsymarequested_pkgsalast_writtenwiaoutapkg_nameapkgsTaselfapackageapkgadistro_namewoTaselfapackageapkganative_originswfafdalinewoTaselfaurlaentriesaresponseacontentTaselfanameglobTaselfaurl.apport.reportXhapackagingaget_versionaget_dependenciesadepends_setaadda_transitive_dependenciesuRecursively add dependencies of package to depends_set.a_python2aosareadlinkTadir_fdu/proc/%s/%suUse readlink() to resolve link.

    Return a string representing the path to which the symbolic link points.
    aopenaO_RDONLYaO_CLOEXECaioarba__enter__a__exit__areadastripadecodeTuUTF-8areplaceTaerrorsTnnnTEOSErrorpuError: uRead file content.

    Return its content, or return a textual error if it failed.
    uError: unable to read /proc maps fileuError: python2 does not provide a secure way to read /proc maps fileamapsu<lambda>u_read_maps.<locals>.<lambda>uRead /proc/pid/maps.

    Since /proc/$pid/maps may become unreadable unless we are ptracing the
    process, detect this, and attempt to attach/detach.
    aproc_pid_fdasubprocessaPopenaPIPEaSTDOUTTastdoutastderraenvacommunicatelTainputatimeoutlaTimeoutExpiredakillutoo many values to unpack (expected 2)uError: command %s timedout with exit code %i: %sareturncodeuuError: command %s failed with exit code %i: %suRun command and capture its output.

    Try to execute given command (argv list) and return its stdout, or return
    a textual error if it failed.
    aattributesahas_keyTaurlaurlapatternachildNodesanodeTypeaxmladomaNodeaELEMENT_NODEanodeNameareakeyanodeValueanormalizeahasChildNodesaTEXT_NODEaencodeTuUTF-8aproblem_reportaCompressedValueaget_valueacompileasearchuCheck if given report matches the given bug pattern XML DOM node.

    Return the bug URL on match, otherwise None.
    aminidomaparseStringaExpatErroragetElementsByTagNameTapatterna_check_bug_patternareportaunlinkanodearemoveChilda_dom_remove_spaceuRecursively remove whitespace from given XML DOM node.auiahookasymbafdaexecu<string>aadd_infoastartswithTuadd_info()asplitextabasenameareplaceTw-w_atracebackaformat_excaHookError_aapportaerroruhook %s crashed:aprint_excaenvironacopyagetTaPATHuasplitapathsep:lpnajoinaPATHacheck_outputawhichaenvTaenvaCalledProcessErroruReturn path of command, preferring extra_pathaProblemReporta__init__apida_proc_maps_cacheuInitialize a fresh problem report.

        date is the desired date/time string; if None (default), the current
        local time is used.

        If the report is attached to a process ID, this should be set in
        self.pid, so that e. g. hooks can use it to collect additional data.
        aget_modified_filesu [modified: %s]w ais_distro_packageaget_package_originu [origin: %s]u [origin: unknown]uReturn a string suitable for appending to Package/Dependencies.

        If package has only unmodified files, return the empty string. If not,
        return ' [modified: ...]' with a list of modified files.
        u%s %s%su(not installed)a_customized_package_suffixaPackageuAdd Package: field

        Determine the version of the given package (uses "(not installed") for
        uninstalled packages) and add Package: field to report.
        This also checks for any modified files.

        Return determined package version (None for uninstalled).
        aExecutablePathaProblemTypeaKernelCrashafileutilsafind_file_packageaadd_packageaSourcePackageaget_sourceaget_architectureaPackageArchitectureaDependenciesasortedaselfw
uAdd packaging information.

        If package is not given, the report must have ExecutablePath.
        This adds:
        - Package: package name and installed version
        - SourcePackage: source package name (if possible to determine)
        - PackageArchitecture: processor architecture this package was built
          for
        - Dependencies: package names and versions of all dependencies and
          pre-dependencies; this also checks if the files are unmodified and
          appends a list of all modified files
        u%s %s (%s)TanameTaversionTachannelaunknownaSnapTacontactu^https?:\/\/.*launchpad\.net\/((?:[^\/]+\/\+source\/)?[^\/]+)(?:.*field\.tags?=([^&]+))?aunquoteTacontactuagroupTlwmaSnapSourceTlaSnapTagsuAdd info about an installed Snap

        This adds a Snap: field, containing name, version and channel.
        It adds a SnapSource: field, if the snap has a Launchpad contact defined.
        aDistroReleaseu%s %saget_os_versionaUnameaunameu%s %s %sllaArchitectureaget_system_architectureuAdd operating system information.

        This adds:
        - DistroRelease: NAME and VERSION from /etc/os-release, or
          'lsb_release -sir' output
        - Architecture: system architecture in distro specific notation
        - Uname: uname -srm output
        apwdagetpwuidageteuidagrpagetgrallutoo many values to unpack (expected 4)l�asortaUserGroupsuN/AuAdd information about the user.

        This adds:
        - UserGroups: system groups the user is in
        uReport._check_interpreted.<locals>.<lambda>ainterpretersaProcStatusasplitlinesTw	luName:aProcCmdlineTwLu/usr/bin/u/usr/sbin/u/bin/u/sbin/lTw-anameTapythonu-ma_python_module_pathaInterpreterPathuCannot determine path of python module %saUnreportableReasonTw.aProcCwdaaccessaR_OKarealpathapathatwistda_twistd_executableuCannot determine twistd client programuCheck if process is a script.

        Use ExecutablePath, ProcStatus and ProcCmdline to determine if
        process is an interpreted script. If so, set InterpreterPath
        accordingly.
        afnmatchaexebasename:lnnaargsTw=lTu--fileTu--pythonTu--sourcew-:lnnwfwywsapopTluDetermine the twistd client program from ProcCmdline.Tw/w.asysamoduleaimpafind_moduleapathlistutoo many values to unpack (expected 3)acloseaPKG_DIRECTORYLa__init__aendswithTu.pyc:nl��������nuDetermine path of given Python moduleagetpidu/proc/%saO_PATHaO_DIRECTORYaerrnoaEPERMaEACCESunot accessibleaENOENTuinvalid processa_read_proc_linkacwdaadd_proc_environTapidaproc_pid_fdaextraenva_read_proc_fileastatusacmdlinearstripa_read_mapsaProcMapsaexeTarofsarwfsasquashmntapersistmntu/%s/u/%saexistsu%s does not exista_check_interpretedastatast_mtimeaExecutableTimestampTw\u\\Tw u\ Tww agetuiduattr/currentaunconfinedaProcAttrCurrentaget_logind_sessiona_LogindSessionuAdd /proc/pid information.

        If neither pid nor self.pid are given, it defaults to the process'
        current pid and sets self.pid.

        This adds the following fields:
        - ExecutablePath: /proc/pid/exe contents; if the crashed process is
          interpreted, this contains the script path instead
        - InterpreterPath: /proc/pid/exe contents if the crashed process is
          interpreted; otherwise this key does not exist
        - ExecutableTimestamp: time stamp of ExecutablePath, for comparing at
          report time
        - ProcEnviron: A subset of the process' environment (only some standard
          variables that do not disclose potentially sensitive information, plus
          the ones mentioned in extraenv)
        - ProcCmdline: /proc/pid/cmdline contents
        - ProcStatus: /proc/pid/status contents
        - ProcMaps: /proc/pid/maps contents
        - ProcAttrCurrent: /proc/pid/attr/current contents, if not "unconfined"
        - CurrentDesktop: Value of $XDG_CURRENT_DESKTOP, if present
        - _LogindSession: logind cgroup path, if present (Used for filtering
          out crashes that happened in a session that is not running any more)
        LaSHELLaTERMaLANGUAGEaLANGaLC_CTYPEaLC_COLLATEaLC_TIMEaLC_NUMERICaLC_MONETARYaLC_MESSAGESaLC_PAPERaLC_NAMEaLC_ADDRESSaLC_TELEPHONEaLC_MEASUREMENTaLC_IDENTIFICATIONaLOCPATHaProcEnvironTw
u\nTuError:TuPATH=u/homeu/tmpuPATH=(custom, user)u/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/gamesuPATH=(custom, no user)TuXDG_RUNTIME_DIR=uXDG_RUNTIME_DIR=<set>TuLD_PRELOAD=uLD_PRELOAD=<set>TuLD_LIBRARY_PATH=uLD_LIBRARY_PATH=<set>TuXDG_CURRENT_DESKTOP=aCurrentDesktopuAdd environment information.

        If pid is not given, it defaults to the process' current pid.

        This adds the following fields:
        - ProcEnviron: A subset of the process' environment (only some standard
          variables that do not disclose potentially sensitive information, plus
          the ones mentioned in extraenv)
        - CurrentDesktop: Value of $XDG_CURRENT_DESKTOP, if present
        aVmCoreafindatempfileamkstempawriteacrashu/usr/lib/debug/boot/vmlinux-%sacoreTastdinastdoutastderrastdinTubt -a -f
Taps
Tarunq
Taquit
astdoutawaitaStacktraceuAdd information from kernel crash.

        This needs a VmCore in the Report.
        aCoreDumpDaRegistersaDisassemblyaStacktraceaThreadStacktraceaAssertionMessageaGLibAssertionMessageaNihAssertionMessageuinfo registersux/16i $pcubt fulluthread apply all bt fulluprint __abort_msg->msguprint __glib_assert_msguprint (char*) __nih_abort_msgagdb_commandastrerrorugdb not found in retracing envLu--batchu--exuset backtrace limit 2000avalue_keysaappendagdb_cmdu--exup -99TaseparatorLu--exup -99a_command_outputuis truncated: expected core file sizeuis not a core dump: file truncateduwarning:uWarning:uInvalid core dump: Tw
TuNo such file or directory.uexecutable file for coredump not foundu^\$\d+\s*=\s*-99$aMULTILINETu

u
.
aGLibAssertionMessageu"ERROR:aAssertionMessageaNihAssertionMessageTw$amatchu^\$\d+\s+=\s+0x[0-9a-fA-F]+\s+"(.*)"\s*$Tu\n:ll��������na_gen_stacktrace_topacrash_signature_addressesaStacktraceAddressSignatureuAdd information from gdb.

        This requires that the report has a CoreDump and an
        ExecutablePath. This adds the following fields:
        - Registers: Output of gdb's 'info registers' command
        - Disassembly: Output of gdb's 'x/16i $pc' command
        - Stacktrace: Output of gdb's 'bt full' command
        - ThreadStacktrace: Output of gdb's 'thread apply all bt full' command
        - StacktraceTop: simplified stacktrace (topmost 5 functions) for inline
          inclusion into bug reports and easier processing
        - AssertionMessage: Value of __abort_msg, __glib_assert_msg, or
          __nih_abort_msg if present

        The optional rootdir can specify a root directory which has the
        executable, libraries, and debug symbols. This does not require
        chroot() or root privileges, it just instructs gdb to search for the
        files there.

        Raises a IOError if the core dump is invalid/truncated, or OSError if
        calling gdb fails, or FileNotFoundError if gdb or the crashing
        executable cannot be found.
        SaIA__g_logvag_logvaIA__g_assert_warningaIA__g_logag_assert_warninga__GI_abortag_loga_XErrorLuppppTu^#(\d+)\s+(?:0x(?:\w+)\s+in\s+\*?(.*)|(<signal handler called>)\s*)$Tu^#(\d+)\s+(?:(.*)|(<signal handler called>)\s*)$Tu^(__.*_s?sse\d+(?:_\w+)?|__kernel_vsyscall)$abt_fn_reabt_fn_noaddr_reaunwoundaunwindingTw(aunwinding_xerrorTa_XLahandle_responseahandle_erroraXWindowEventTlafna_XErroradepthatoptraceaignore_functions_reaStacktraceTopuBuild field StacktraceTop as the top five functions of Stacktrace.

        Signal handler invocations and related functions are skipped since they
        are generally not useful for triaging and duplicate detection.
        a_add_hooks_infoakill_pkttyagentuRun hook script for collecting package specific data.

        A hook script needs to be in _hook_dir/<Package>.py or in
        _common_hook_dir/*.py and has to contain a function 'add_info(report,
        ui)' that takes and modifies a Report, and gets an UserInterface
        reference for interactivity.

        return True if the hook requested to stop the report filing process,
        False otherwise.
        TaPackagew/uinvalid Package: %sTaSourcePackageuinvalid SourcePackage: %sa_hook_dirTaExecutablePathua_opt_diraget_filesaisfileaopt_pathahook_dirsashareupackage-hooksadirnameagloba_common_hook_diru/*.pya_run_hookapackageu.pyusource_%s.pyasrcpackageaurlopenaURLErroru<title>404 Not Founda_check_bug_patternsuCheck bug patterns loaded from the specified url.

        Return bug URL on match, or None otherwise.

        The url must refer to a valid XML document with the following syntax:
        root element := <patterns>
        patterns := <pattern url="http://bug.url"> *
        pattern := <re key="report_key">regular expression*</re> +

        For example:
        <?xml version="1.0"?>
        <patterns>
            <pattern url="http://bugtracker.net/bugs/1">
                <re key="Foo">ba.*r</re>
            </pattern>
            <pattern url="http://bugtracker.net/bugs/2">
                <re key="Package">^\S* 1-2$</re> <!-- test for a particular version -->
                <re key="Foo">write_(hello|goodbye)</re>
            </pattern>
        </patterns>
        la_ignore_filew~aO_NOFOLLOWafstataS_ISREGast_modeafdopenwrTlP�agetDOMImplementationacreateDocumentTnaapportnu%s has invalid format: %sadocumentElementuRead ignore list XML file and return a DOM tree.

        Return an empty DOM tree if file does not exist.

        Raises ValueError if the file exists but is invalid XML.
        alistdira_blacklist_dira_whitelist_dirawhitelista_get_ignore_domTEValueErrorEKeyErrorTuCould not get ignore file:TaignoreagetAttributeTaprogramTamtimeuCheck if current report should not be presented.

        Reports can be suppressed by per-user blacklisting in
        ~/.apport-ignore.xml (in the real UID's home) and
        /etc/apport/blacklist.d/. For environments where you are only
        interested in crashes of some programs, you can also create a whitelist
        in /etc/apport/whitelist.d/, everything which does not match gets
        ignored then.

        This requires the ExecutablePath attribute. Throws a ValueError if the
        file has an invalid format.

        Privileges may need to be dropped before calling this.
        asetAttributeamtimeacreateElementaprogramaappendChildwwawritexmlDaaddindentanewlu  w
uIgnore future crashes of this executable.

        Add a ignore list entry for this report to ~/.apport-ignore.xml, so
        that future reports for this ExecutablePath are not presented to the
        user any more.

        Throws a ValueError if the file already exists and has an invalid
        format.

        Privileges may need to be dropped before calling this.
        TaStacktraceTopTu??acountTtf@uCheck whether StackTrace can be considered 'useful'.

        The current heuristic is to consider it useless if it either is shorter
        than three lines and has any unknown function, or for longer traces, a
        minority of known functions.
        TaStacktraceTopuu??uReturn topmost function in StacktraceTopTaSignalw6u%s assert failure: %saSignalDw4w6w8u11u13aSIGILLaSIGABRTaSIGFPEaSIGSEGVaSIGPIPEastacktrace_top_functionu in %s()aallu [non-native %s package]u%s crashed with %s%s%susignal aTracebacku%s crashed with %sTu^\s*File\s*"(\S+)".* in (.+)$aunknownwiatrace_rel��������Tw:u^%s: (.+)$aescapeu<module>amodule_patha__main__u%s()u%s crashed with %s in %su: %sTaProblemTypeupackage %s failed to install/upgradeTaErrorMessageu: aErrorMessageaKernelOopsaOopsTextTu------------[ cut here ]------------Tw
lTw
laFailureaMachineTypew[u] u failureaNonfreeKernelModulesu [non-free: w]uCreate an appropriate title for a crash database entry.

        This contains the topmost function name from the stack trace and the
        signal (for signal crashes) or the Python exception (for unhandled
        Python exceptions).

        Return None if the report is not a crash or a default title could not
        be generated.
        TaPackageuTaDependenciesu:nlnaget_available_versionaNoneacompare_versionsaobsoleteuReturn list of obsolete packages in Package and Dependencies.TaKernelCrashaKernelOopsakernelTu^\s*\#\d+\s\[\w+\]\s(\w+)aregexasigw:asubu0x[0-9a-f]{6,}aADDRu%s:%sTu^(?:([\w:~]+).*|(<signal handler called>)\s*)$u(\w+): Tu^\s+File "([^"]+).*line (\d+).*\sin (.*)$aloc_reaislinku:%s@%su(%s)a_PythonExceptionQualifierasuspendaresumeTaMachineTypeu:%sTudmi.bios.versionudmi.bios.versionTuBUG: unable to handleu^BUG: unable to handle (.*) at ucould not parse expected problem type line: %sapartsTuIP: a_extract_function_and_addressTuCall Trace:ain_trace_bodyuGet a signature string for a crash.

        This is suitable for identifying duplicates.

        For signal crashes this the concatenation of ExecutablePath, Signal
        number, and StacktraceTop function names, separated by a colon. If
        StacktraceTop has unknown functions or the report lacks any of those
        fields, return None. In this case, you can use
        crash_signature_addresses() to get a less precise duplicate signature
        based on addresses instead of symbol names.

        For assertion failures, it is the concatenation of ExecutablePath
        and assertion message, separated by colons.

        For Python crashes, this concatenates the ExecutablePath, exception
        name, and Traceback function names, again separated by a colon.

        For suspend/resume failures, this concatenates whether it was a suspend
        or resume failure with the hardware identifier and the BIOS version, if
        it exists.
        u\[.*\] (.*)$ucould not parse expected call trace line: %sw?uErrno 13Tw#Tu0xla_address_to_offsetastackTw:u..afailedu%s:%s:%suCompute heuristic duplicate signature for a signal crash.

        This should be used if crash_signature() fails, i. e. Stacktrace does
        not have enough symbols.

        This approach only uses addresses in the stack trace and does not rely
        on symbol resolution. As we can't unwind these stack traces, we cannot
        limit them to the top five frames and thus will end up with several or
        many different signatures for a particular crash. But these can be
        computed and synchronously checked with a crash database at the client
        side, which avoids having to upload and process the full report. So on
        the server-side crash database we will only have to deal with all the
        equivalence classes (i. e. same crash producing a number of possible
        signatures) instead of every single report.

        Return None when signature cannot be determined.
        u\b%s\bausernameareplacementsu/home/usernameTw,u(\b|\s)%s\bu\1User NameahostnameTaProcLaProcCpuinfoaProcMapsaProcStatusaProcInterruptsaProcModulesLaTracebackaPythonArgsaTitleaJournalErrorsaisspaceuRemove user identifying strings from the report.

        This particularly removes the user name, host name, and IPs
        from attributes which contain data read from the environment, and
        removes the ProcCwd attribute completely.
        ausrabina_which_extrapathagdbTupugdb-multiarchTuWARNING: Please install gdb-multiarch for processing reports from foreign architectures. Results with "gdb" will be very poor.
uset debug-file-directory %s/usr/lib/debuguset solib-absolute-prefix uadd-auto-load-safe-path uset solib-search-path %s/lib/%s:%s/usr/lib/%sux86_64-linux-gnuu%s/lib:%s/lib/%s:%s/usr/lib/%s:%s/usr/libu%s/usraLD_LIBRARY_PATHaPYTHONHOMEaGCONV_PATHu%s/usr/lib/%s/gconvainsertu%s/lib/%s/ld-linux-x86-64.so.2uset data-directory %s/usr/share/gdbufile "%s"Taapport_core_Taprefixaatexitaregisteragzipvalueawbucore-file uBuild gdb command for this report.

        This builds a gdb command for processing the given report, by setting
        the file to the ExecutablePath/InterpreterPath, unpacking the core dump
        and pointing "core-file" to it (if the report has a core dump), and
        setting up the paths when calling gdb in a package sandbox.

        When available, this calls "gdb-multiarch" instead of "gdb", for
        processing crash reports from foreign architectures.

        Return argv list for gdb and any environment variables.
        a_build_proc_maps_cacheu%s+%xuResolve a memory address to an ELF name and offset.

        This can be used for building duplicate signatures from non-symbolic
        stack traces. These often do not have enough symbols available to
        resolve function names, but taking the raw addresses also is not
        suitable due to ASLR. But the offsets within a library should be
        constant between crashes (assuming the same version of all libraries).

        This needs and uses the "ProcMaps" field to resolve addresses.

        Return 'path+offset' when found, or None if address is not in any
        mapped range.
        Tu^([0-9a-fA-F]+)-([0-9a-fA-F]+).*\s{2,}(\S.*$)Tu^([0-9a-fA-F]+)-([0-9a-fA-F]+)\safmtafmt_unknownucannot parse ProcMaps line: uGenerate self._proc_maps_cache from ProcMaps field.

        This only gets done once.
        acgroupu/proc/%s/cgroupuname=systemd:Tu.scopeu/session-alineTu/session-l:nl��������nu/run/systemd/sessions/amy_sessionuGet logind session path and start time.

        Return (session_id, session_start_timestamp) if process is in a logind
        session, or None otherwise.
        uRepresentation of and data collection for a problem report.a__doc__u/usr/lib/python3/dist-packages/apport/report.pya__file__a__spec__aoriginahas_locationa__cached__uos.pathuxml.domuxml.dom.minidomuxml.parsers.expatTaExpatErroruurllib.errorTaURLErroruurllib.requestTaurlopenuurllib.parseTaunquoteuapport.fileutilsuapport.packaging_implTaimplaimpluapport.hookutilsTakill_pkttyagentTaAPPORT_DATA_DIRu/usr/share/apporta_data_diru%s/package-hooks/u%s/general-hooks/u/optu~/.apport-ignore.xmlu/etc/apport/blacklist.du/etc/apport/whitelist.dLashabashadashacshatcshupython*uruby*aphpuperl*umono*aawkTnnametaclassa__prepare__aReporta__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uapport.reporta__module__uA problem report specific to apport (crash or bug).

    This class wraps a standard ProblemReport and adds methods for collecting
    standard debugging data.a__qualname__TaCrashnuReport.__init__uReport._customized_package_suffixuReport.add_packageTnaadd_package_infouReport.add_package_infoaadd_snap_infouReport.add_snap_infoaadd_os_infouReport.add_os_infoaadd_user_infouReport.add_user_infouReport._check_interpreteduReport._twistd_executableaclassmethoduReport._python_module_pathaadd_proc_infouReport.add_proc_infouReport.add_proc_environaadd_kernel_crash_infouReport.add_kernel_crash_infoaadd_gdb_infouReport.add_gdb_infouReport._gen_stacktrace_topaadd_hooks_infouReport.add_hooks_infouReport._add_hooks_infoasearch_bug_patternsuReport.search_bug_patternsuReport._get_ignore_domacheck_ignoreduReport.check_ignoredamark_ignoreuReport.mark_ignoreahas_useful_stacktraceuReport.has_useful_stacktraceuReport.stacktrace_top_functionastandard_titleuReport.standard_titleaobsolete_packagesuReport.obsolete_packagesacrash_signatureuReport.crash_signatureuReport._extract_function_and_addressuReport.crash_signature_addressesaanonymizeuReport.anonymizeuReport.gdb_commanduReport._address_to_offsetuReport._build_proc_maps_cacheuReport.get_logind_sessiona__orig_bases__TwiaexebasenameTaexebasenameTapathamodeaproc_pid_fdTaproc_pid_fdu<listcomp>TwfTalineTanamewpagidamembauseru<module apport.report>Ta__class__TaselfatypeadateT
aselfauiapackageasrcpackageahook_dirsaopt_pathaexec_pathwfahookahook_dirTaselfaaddrastartaendaelfTaselfafmtafmt_unknownalinewmTareportapatternwcakeyaregexpwvare_cTareportapatternsadomapatternaurlTaselfaexebasenameanamealinewkwvacmdargsabindirsapathwpaargvexeaexeTacommandainputaenvaspaoutaerrsTaselfapackageasuffixamodaoriginTanodewcTaselfalineaparsedamatchTaselfaunwind_functionsatoptraceadepthaunwoundaunwindingaunwinding_xerrorabt_fn_reabt_fn_noaddr_reaignore_functions_realinewmafnaframeafunctionT	aselfahomediraifpathacontentsafdwfastadomweTaklassamoduleapathlistapathanameafdadescTaproc_pid_fdamapsafdweTapathapidadir_fdaproc_fileafdweTapathapidadir_fdTareportauiahookasymbafdweahooknameTapackageadepends_setwdTaselfaargsaargaoptsTacommandaextra_pathaenvapartsTaselfarootdiragdb_sandboxagdb_reportsagdb_cmdaenvironavalue_keysanameacmdaoutawarningsareasonapart_reapartsapartwmaaddr_signatureTaselfauiapackageasrcpackagearetT
aselfadebugdiraunlink_corearetafdacoreakveracommandwpaoutTaselfwuTaselfapackageaversionTaselfapackageaversionadependenciesadepwvTaselfapidaextraenvaproc_pid_fdasafe_varsaenvalinewpTaselfapidaproc_pid_fdaextraenvwewpavalaretTaselfasnapwpwmTaselfauseragroupsT	aselfareplacementswpwsahostnamewkais_proc_fieldapatternareplTaselfwfafdalineawhitelistadomacur_mtimeaignoreTaselfasigaregexalinewmabt_fn_realinesatracealoc_rewfaexc_nameain_trace_bodyapartsaparsedamatchTaselfastackafailedalineaaddraoffsetTaselfasandboxagdb_sandboxaexecutableasame_archagdb_sandbox_binagdb_pathacommandaenvironamaanative_multiarchald_lib_pathapyhomeafdacorewfTaklassapidaproc_pid_fdacgroup_filewfalineamy_sessionasession_start_timeTaselfaunknown_fnTaselfadomamtimeweaignoreahomediraignore_file_pathafdTaselfaobsoletealineapkgaveraavailTaselfaurlwfapatternsTaselfalineafnameTaselfasignal_namesafnaarch_mismatchatraceatrace_rewiafunctionwmamodule_pathapathalast_lineaexceptionamessageacontextatitleaoops.apport_python_hook�	�arelaCONFIGa__enter__a__exit__areadTnnnasearchu^\s*enabled\s*=\s*0\s*$aconfwMuReturn whether Apport should generate crash reports.TEKeyboardInterruptaapt_pkgaDATEaenabledacStringIOTaStringIOaStringIOatracebackuapport.fileutilsTalikely_packagedaget_recent_crashesalikely_packagedaget_recent_crashesarealpathajoinaosagetcwdasysaargvTETypeErrorEAttributeErrorEIndexErrorareadlinku/proc/%i/exeagetpidaaccessaX_OKapathaisfileuapport.reportareportaReportaget_dbus_nameuorg.freedesktop.DBus.Error.NoReplyuorg.freedesktop.DBus.Error.ServiceUnknownadbus_service_unknown_analysisa_PythonExceptionQualifieraexc_objaerrnoapraprint_exceptionTafileagetvalueastripaTracebackaadd_proc_infoTLaPYTHONPATHaPYTHONHOMETaextraenvaadd_user_infoaExecutablePathaExecutableTimestampastatast_mtimeu%raPythonArgsacheck_ignoredasubw/w_agetuidu%s/%s.%i.crashaenvironagetTaAPPORT_REPORT_DIRu/var/crashaexistsafileutilsaseen_reportarblaunlinkaCrashCounterafdopenaopenaO_WRONLYaO_CREATaO_EXCLl�awbawritea__excepthook__uCatch an uncaught exception and make a traceback.aglobTaglobasubprocessaconfigparserTaConfigParseraNoSectionErroraNoOptionErroraConfigParseraNoSectionErroraNoOptionErroruname\s+(\S+)\s+was not provided by any .serviceaget_dbus_messageuError: cannot parse D-BUS name from exception: agroupTlTu/usr/share/dbus-1/*services/*.serviceTnTainterpolationDaencodinguUTF-8TuD-BUS ServiceaNameTuD-BUS ServiceaExecacallapidofu-sxaPIPETastdoutaservicesaappendastderruInvalid D-BUS .service file %s: %suno service file providing aDbusErrorAnalysisuprovided byutoo many values to unpack (expected 3)u %s (%s is %srunning)uunot aapport_excepthookaexcepthookuInstall the python apport hook.uPython sys.excepthook hook to generate apport crash dumps.a__doc__u/usr/lib/python3/dist-packages/apport_python_hook.pya__file__a__spec__aoriginahas_locationa__cached__u/etc/default/apportainstallu<module apport_python_hook>Taexc_typeaexc_objaexc_tbaapt_pkgaStringIOareatracebackalikely_packagedaget_recent_crashesabinaryaapportapranameatb_fileamangled_programauserapr_filenameacrash_counterwfTaexc_objareportaglobasubprocessareaConfigParseraNoSectionErroraNoOptionErrorwmadbus_nameaserviceswfacpaexearunningaserviceTarewfaconf.apt.cache�?�a_pathaapt_pkgaFileLockajoinalocka_locka__enter__aErroraLockFailedExceptionuFailed to lock directory %s: %sa__exit__acastaCachea_cacheaDepCachea_depcacheaPackageRecordsa_recordsaSourceLista_lista_callbacksa_callbacks2aweakrefaWeakValueDictionarya_weakrefaWeakSeta_weakversionsl��������a_changes_counta_sorted_setaconnectTacache_post_opena_inc_changes_countTacache_post_changea_inc_changes_countaconfigasetTuDir::Cache::pkgcacheuaabspathu/etc/apt/apt.confaread_config_fileu/etc/apt/apt.conf.daread_config_diraDiruDir::State::statusu/var/lib/dpkg/statusuDir::bin::dpkgausrabinadpkga_check_and_create_required_dirsainit_systemafind_dirTuDir::Cache::Archivesa_WrappedLocka_archive_lockaopenafix_brokenuFix broken packages.luIncrease the number of changesLu/var/lib/dpkg/statusu/etc/apt/sources.listLu/var/lib/dpkgu/etc/apt/u/var/cache/apt/archives/partialu/var/lib/apt/lists/partialaosapathaexistsarootdiramakedirswwacloseu
        check if the required apt directories/files are there and if
        not create them
        a_inc_changes_countaselfutoo many values to unpack (expected 3)u internal helper to run a callback aaptaprogressabaseaOpProgressaop_progressa_run_callbacksTacache_pre_openaread_main_lista_Cache__remapaget_architecturesa_have_multi_archadoneTacache_post_openu Open the package cache, after that it can be used like
            a dictionary
        akeysa_pkganameaarchitectureapackageaversion_listahashavera_candasizelamulti_archaver_straremoveuCalled after cache reopen() to relocate to new cache.

        Relocate objects like packages and versions from the old
        underlying cache to the new one.
        u Close the package cache u Enter the with statement u Exit the with statement uThe cache has no package named %ra_Cache__is_real_pkga_rawpkg_to_pkgu look like a dictionary (get key) uReturn *self*[*key*] or *default* if *key* not in *self*.

        .. versionadded:: 1.1
        aget_fullnameTtTaprettyasetdefaultaPackageuReturns the apt.Package object for an apt_pkg.Package object.

        .. versionadded:: 1.0.0
        a__iter__uCache.__iter__ahas_versionsuCheck if the apt_pkg.Package provided is a real package.asortedapackagesu<genexpr>uCache.keys.<locals>.<genexpr>amarked_keepachangesaappendu Get the marked changes acache_pre_changeaupgradeacache_post_changeuUpgrade all packages.

        If the parameter *dist_upgrade* is True, new dependencies will be
        installed as well (and conflicting packages may be removed). The
        default value is False.
        aCacheClosedExceptionTuCache object used after close() calledaPackageManageraAcquireaget_archivesafetch_neededuGet the size of the packages that are required to download.ausr_sizeuGet the size of the additional required space on the fs.aget_candidate_veraINSTSTATE_REINSTREQaINSTSTATE_HOLD_REINSTREQadownloadableainst_stateareqreinstaadduReturn the packages not downloadable packages in reqreinst state.afind_bTuAPT::Get::AllowUnauthenticatedFaitemsais_trustedaUntrustedExceptionuUntrusted packages:
%sw
arunuastatusaSTAT_DONEaSTAT_IDLEaerr_msguFailed to fetch %s %s
adesc_uriaerror_textaRESULT_CANCELLEDaFetchCancelledExceptionafailedaFetchFailedExceptionuCache._run_fetcher.<locals>.<genexpr>a_run_fetcheru fetch the needed archives uTakes a progress or a an Acquire objectatextaAcquireProgressa_fetch_archivesTnnnuFetch the archives for all packages marked for install/upgrade.

        You can specify either an :class:`apt.progress.base.AcquireProgress()`
        object for the parameter *progress*, or specify an already
        existing :class:`apt_pkg.Acquire` object for the parameter *fetcher*.

        The return value of the function is undefined. If an error occurred,
        an exception of type :class:`FetchFailedException` or
        :class:`FetchCancelledException` is raised.

        The keyword-only parameter *allow_unauthenticated* specifies whether
        to allow unauthenticated downloads. If not specified, it defaults to
        the configuration option `APT::Get::AllowUnauthenticated`.

        .. versionadded:: 0.8.0
        ahas_providesuReturn whether the package is a virtual package.aprovides_listaparent_pkgaprovidersarawpkguReturn a list of all packages providing a package.

        Return a list of packages which provide the virtual package of the
        specified name.

        If 'candidate_only' is False, return all packages with at
        least one version providing the virtual package. Otherwise,
        return only those packages where the candidate version
        provides the virtual package.

        If 'include_nonvirtual' is True then it will search for all
        packages providing pkgname, even if pkgname is not itself
        a virtual pkg.
        TuDir::State::ListsafindTuDir::Etc::sourcelistTuDir::Etc::sourcepartsTuAPT::List-CleanupuDir::Etc::sourcelistTuDir::Etc::sourcepartsaxxxTuAPT::List-Cleanupw0aupdateaslistaold_sources_listuDir::Etc::sourcepartsaold_sources_list_duAPT::List-Cleanupaold_cleanupuRun the equivalent of apt-get update.

        You probably want to call open() afterwards, in order to utilise the
        new cache. Otherwise, the old cache will be used which can lead to
        strange bugs.

        The first parameter *fetch_progress* may be set to an instance of
        apt.progress.FetchProgress, the default is apt.progress.FetchProgress()
        .
        sources_list -- Update a alternative sources.list than the default.
        Note that the sources.list.d directory is ignored in this case
        astartUpdateastart_updateapkgsystem_is_lockedapkgsystem_unlock_innerapkgsystem_lock_innerafinishUpdateafinish_updateu
        The first parameter *pm* refers to an object returned by
        apt_pkg.PackageManager().

        The second parameter *install_progress* refers to an InstallProgress()
        object of the module apt.progress.

        This releases a system lock in newer versions, if there is any,
        and reestablishes it afterwards.
        aInstallProgressaSystemLockafetcherapmaallow_unauthenticatedainstall_archivesainstall_progressaRESULT_COMPLETEDaRESULT_FAILEDuinstallArchives() failedaRESULT_INCOMPLETEuinternal-error: unknown result code from InstallArchives: %sashutdownaresuApply the marked changes to the cache.

        The first parameter, *fetch_progress*, refers to a FetchProgress()
        object as found in apt.progress, the default being
        apt.progress.FetchProgress().

        The second parameter, *install_progress*, is a
        apt.progress.InstallProgress() object.

        The keyword-only parameter *allow_unauthenticated* specifies whether
        to allow unauthenticated downloads. If not specified, it defaults to
        the configuration option `APT::Get::AllowUnauthenticated`.
        ainitu Unmark all changes Tacache_post_changeu called internally if the cache has changed, emit a signal then Tacache_pre_changeu called internally if the cache is about to change, emit
            a signal then awarningsawarnuconnect() likely causes a reference cycle, use connect2() insteadaRuntimeWarningluConnect to a signal.

        .. deprecated:: 1.0

            Please use connect2() instead, as this function is very
            likely to cause a memory leak.
        uConnect to a signal.

        The callback will be passed the cache as an argument, and
        any arguments passed to this function. Make sure that, if you
        pass a method of a class as your callback, your class does not
        contain a reference to the cache.

        Cyclic references to the cache can cause issues if the Cache object
        is replaced by a new one, because the cache keeps a lot of objects and
        tens of open file descriptors.

        currently only used for cache_{post,pre}_{changed,open}.

        .. versionadded:: 1.0
        aActionGroupuReturn an `ActionGroup` object for the current cache.

        Action groups can be used to speedup actions. The action group is
        active as soon as it is created, and disabled when the object is
        deleted or when release() is called.

        You can use the action group as a context manager, this is the
        recommended way::

            with cache.actiongroup():
                for package in my_selected_packages:
                    package.mark_install()

        This way, the action group is automatically released as soon as the
        with statement block is left. It also has the benefit of making it
        clear which parts of the code run with a action group and which
        don't.
        adirnameafind_fileTuDir::State::statusalistdiraupdatesafnmatchu[0-9]*uReturn True if the dpkg was interrupted

        All dpkg operations will fail until this is fixed, the action to
        fix the system if dpkg got interrupted is to run
        'dpkg --configure -a' as root.
        abroken_countuReturn the number of packages with broken dependencies.adel_countuReturn the number of packages marked for deletion.ainst_countuReturn the number of packages marked for installation.akeep_countuReturn the number of packages marked as keep.aProblemResolvera_resolveraclearuReset the package to the default state.aprotectuProtect a package so it won't be removed.uMark a package for removal.aresolveuResolve dependencies, try to remove packages where needed.aresolve_by_keepuResolve dependencies, do not try to remove packages.amarked_installamarked_deleteamarked_upgradeais_installeda_filtereda_filtersaconnect2afilter_cache_post_changeacache_post_openaapplyapkgu internal helper to refilter uSet the current active filter.a_reapply_filteruCalled internally if the cache changes, emit a signal then.acachea_FilteredCacheHelpera_helperuFilteredCache.__iter__aset_filteruwe try to look exactly like a real cache.aprintTucache pre changedTucache post changedTuCache self testacache_pre_changedacache_post_changedaaptitudeaget_changesTu/tmp/pytestu/tmp/pytest/partialamkdirTuDir::Cache::Archivesu/tmp/pytestTuTesting filtered cache (argument is old cache)aFilteredCacheaMarkedChangesFilterTuTesting filtered cache (no argument)TaprogressuInternal test code.a__doc__u/usr/lib/python3/dist-packages/apt/cache.pya__file__a__spec__aoriginahas_locationa__cached__aprint_functionaAnyaCallableaDictaIteratoraListaOptionalaSetaTupleaUnionaKeysViewuapt.packageTaPackageaVersionaVersionuapt.progress.textuapt.progress.baseTaAcquireProgressaInstallProgressaOpProgressTEOSErrorametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uapt.cachea__module__uException that is thrown when the user cancels a fetch operation.a__qualname__a__orig_bases__uException that is thrown when fetching fails.uException that is thrown when fetching fails for trust reasonsuException that is thrown when locking fails.TEExceptionuException that is thrown when the cache is used after close().TOobjectuWraps an apt_pkg.FileLock to raise LockFailedException.

    Initialized using a directory path.a__init__u_WrappedLock.__init__u_WrappedLock.__enter__u_WrappedLock.__exit__uDictionary-like package cache.

    The APT cache file contains a hash table mapping names of binary
    packages to their metadata. A Cache object is the in-core
    representation of the same. It provides access to APTs idea of the
    list of available packages.

    The cache can be used like a mapping from package names to Package
    objects (although only getting items is supported).

    Keyword arguments:
    progress -- a OpProgress object,
    rootdir  -- an alternative root directory. if that is given the system
    sources.list and system lists/files are not read, only file relative
    to the given rootdir,
    memonly  -- build the cache in memory only.


    .. versionchanged:: 1.0

        The cache now supports package names with special architecture
        qualifiers such as :all and :native. It does not export them
        in :meth:`keys()`, though, to keep :meth:`keys()` a unique set.
    TnnFuCache.__init__uCache.fix_brokenuCache._inc_changes_countuCache._check_and_create_required_dirsuCache._run_callbacksTnuCache.opena__remapuCache.__remapuCache.closeuCache.__enter__uCache.__exit__uCache.__getitem__agetuCache.getuCache._rawpkg_to_pkga__is_real_pkguCache.__is_real_pkgahas_keyuCache.has_keya__contains__uCache.__contains__a__len__uCache.__len__uCache.keysuCache.get_changesTFuCache.upgradeapropertyarequired_downloaduCache.required_downloadarequired_spaceuCache.required_spaceareq_reinstall_pkgsuCache.req_reinstall_pkgsuCache._run_fetcheruCache._fetch_archivesafetch_archivesuCache.fetch_archivesais_virtual_packageuCache.is_virtual_packageTtFaget_providing_packagesuCache.get_providing_packagesTnltnuCache.updateuCache.install_archivesacommituCache.commituCache.clearuCache.cache_post_changeuCache.cache_pre_changeuCache.connectuCache.connect2aactiongroupuCache.actiongroupadpkg_journal_dirtyuCache.dpkg_journal_dirtyuCache.broken_countadelete_countuCache.delete_countainstall_countuCache.install_countuCache.keep_countuResolve problems due to dependencies and conflicts.

    The first argument 'cache' is an instance of apt.Cache.
    uProblemResolver.__init__uProblemResolver.clearuProblemResolver.protectuProblemResolver.removeuProblemResolver.resolveuProblemResolver.resolve_by_keepaFilteru Filter base class u Filter function, return True if the package matchs a
            filter criteria and False otherwise
        uFilter.applyu Filter that returns all marked changes uMarkedChangesFilter.applyaInstalledFilteruFilter that returns all installed packages.

    .. versionadded:: 1.0.0
    uInstalledFilter.applyuHelper class for FilteredCache to break a reference cycle.u_FilteredCacheHelper.__init__u_FilteredCacheHelper._reapply_filteru_FilteredCacheHelper.set_filteru_FilteredCacheHelper.filter_cache_post_changeu A package cache that is filtered.

        Can work on a existing cache or create a new one
    TnnuFilteredCache.__init__uFilteredCache.__len__uFilteredCache.__getitem__uFilteredCache.keysuFilteredCache.has_keyuFilteredCache.__contains__uFilteredCache.set_filteruFilteredCache.filter_cache_post_changea__getattr__uFilteredCache.__getattr__a_testTa.0wiTa.0wpaselfu<listcomp>Taitemu<module apt.cache>Ta__class__TaselfakeyTaselfTaselfweTaselfaexc_typeaexc_valueatracebackTaselfatypavalueatracebackTaselfakeyarawpkgapkgTaselfacacheTaselfacacheaprogressTaselfapathTaselfaprogressarootdiramemonlyaarchive_dirTaselfarawpkgTaselfapkgnameTaselfapkgnameapkgTaselfakeyapkgaverwvTaselfarootdirafilesadirswdwfTaselfafetcherapmaallow_unauthenticatedTaselfarawpkgafullnameTaselfacacheapkgwfTaselfanameacallbackaargsakwdsTaselfafetcheraallow_unauthenticatedauntrustedaresafailedaerr_msgaitemTacacheapkgapkgnameachangesadirnameapmafetcherafilteredTaselfapkgTacacheTatypaobjTaselfapackageTaselfafetch_progressainstall_progressaallow_unauthenticatedapmafetcheraresTaselfanameacallbackTaselfadpkg_status_dirwfTaselfaprogressafetcheraallow_unauthenticatedTaselfakeyadefaultTaselfachangesamarked_keeparawpkgTaselfapkgnameacandidate_onlyainclude_nonvirtualaprovidersaget_candidate_veravpaprovidesaprovidesveraversionarawpkgTaselfapmainstall_progressadid_unlockaresTaselfaprogressTaselfareqreinstaget_candidate_verastatesapkgacandTaselfapmafetcherTaselfafilterTaselfafetch_progressapulse_intervalaraise_on_errorasources_listaold_sources_listaold_sources_list_daold_cleanupaslistaresweTaselfadist_upgrade.apt.cdrom\Baapt_pkgaCdroma__init__aCdromProgressa_progressaconfigasetuAcquire::cdrom::mountTuAPT::CDROM::NoMountatrueTuAPT::CDROM::NoMountafalseaadduAdd cdrom to the sources.list.aidentuIdentify the cdrom.aglobafind_dirTuDir::Etc::sourcepartsw*aappendafind_fileTuDir::Etc::sourcelista__enter__a__exit__alstripastartswithTw#TnnnuCheck if the cdrom is already in the current sources.list.uClasses related to cdrom handling.a__doc__u/usr/lib/python3/dist-packages/apt/cdrom.pya__file__a__spec__aoriginahas_locationa__cached__aprint_functionaOptionalluapt.progress.baseTaCdromProgressametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uapt.cdroma__module__uSupport for apt-cdrom like features.

    This class has several optional parameters for initialisation, which may
    be used to influence the behaviour of the object:

    The optional parameter `progress` is a CdromProgress() subclass, which will
    ask for the correct cdrom, etc. If not specified or None, a CdromProgress()
    object will be used.

    The optional parameter `mountpoint` may be used to specify an alternative
    mountpoint.

    If the optional parameter `nomount` is True, the cdroms will not be
    mounted. This is the default behaviour.
    a__qualname__TnntuCdrom.__init__TnuCdrom.adduCdrom.identapropertyain_sources_listuCdrom.in_sources_lista__orig_bases__u<module apt.cdrom>Ta__class__TaselfaprogressamountpointanomountTaselfaprogressTaselfacd_idasrcafnameafobjalineu.apt�!uHigh-Level Interface for working with apt.a__doc__u/usr/lib/python3/dist-packages/apt/__init__.pya__file__Lu/usr/lib/python3/dist-packages/apta__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aprint_functionaapt_pkguapt.packageTaPackageaVersionaPackageaVersionuapt.cacheTaCacheaProblemResolveraCacheaProblemResolveruapt.cdromTaCdromaCdromaAPTaconfigainit_configainit_systemLaCacheaCdromaPackagea__all__u<module apt>u.apt.package	g�avalueagetsizeapatha__enter__a__exit__aapt_pkgaHashesahashesTnnnuReturn ``True`` if the file is the same.a__eq__w<u<<w>u>>w=u==a_versiona_depu%s: %sarawtypearawstru<BaseDependency: name:%r relation:%r version:%r rawtype:%r>anamearelationaversionatarget_pkguThe name of the target package.a_BaseDependency__dstracomp_typeuThe relation (<, <=, =, !=, >=, >, '') in mathematical notation.

        The empty string will be returned in case of an unversioned dependency.
        acomp_type_debuThe relation (<<, <=, =, !=, >=, >>, '') in Debian notation.

        The empty string will be returned in case of an unversioned dependency.
        For more details see the Debian Policy Manual on the syntax of
        relationship fields:
        https://www.debian.org/doc/debian-policy/ch-relationships.html#s-depsyntax  # noqa

        .. versionadded:: 1.0.0
        atarget_veruThe target version or an empty string.

        Note that the version is only an empty string in case of an unversioned
        dependency. In this case the relation is also an empty string.
        aall_targetsaparent_pkgaselfapackagea_pcachea_rawpkg_to_pkgaVersionatversaappenduA list of all Version objects which satisfy this dependency.

        .. versionadded:: 1.0.0
        atarget_versionsais_installeduA list of all installed Version objects which satisfy this dep.

        .. versionadded:: 1.0.0
        u%s %s %sarelation_debuString represenation of the dependency.

        Returns the string representation of the dependency as it would be
        written in the debian/control file.  The string representation does not
        include the type of the dependency.

        Example for an unversioned dependency:
          python3

        Example for a versioned dependency:
          python3 >= 3.2

        .. versionadded:: 1.0.0
        adep_type_untranslateduType of the dependency.

        This should be one of 'Breaks', 'Conflicts', 'Depends', 'Enhances',
        'PreDepends', 'Recommends', 'Replaces', 'Suggests'.

        Additional types might be added in the future.
        aPreDependsuWhether this is a PreDepends.aDependencya__init__a_rawtypeu<Dependency: [%s]>u, u<genexpr>uDependency.__repr__.<locals>.<genexpr>u | uString represenation of the Or-group of dependencies.

        Returns the string representation of the Or-group of dependencies as it
        would be written in the debian/control file.  The string representation
        does not include the type of the Or-group of dependencies.

        Example:
          python2 >= 2.7 | python3

        .. versionadded:: 1.0.0
        uDependency.rawstr.<locals>.<genexpr>uType of the Or-group of dependency.

        This should be one of 'Breaks', 'Conflicts', 'Depends', 'Enhances',
        'PreDepends', 'Recommends', 'Replaces', 'Suggests'.

        Additional types might be added in the future.

        .. versionadded:: 1.0.0
        uA list of all Version objects which satisfy this Or-group of deps.

        .. versionadded:: 1.0.0
        aarchiveacomponentalabelaoriginacodenameasiteanot_automatica_listafind_indexais_trustedatrustedu<Origin component:%r archive:%r origin:%r label:%r site:%r isTrusted:%r>aTagSectiona_recakeysuAn iterator over the (key, value) items of the record.aiteritemsuRecord.iteritemsagetuReturn record[key] if key in record, else *default*.

        The parameter *default* must be either a string or None.
        udeprecated form of ``key in x``.a_canda_weakversionsaaddafullnamel��������laversion_compareaver_struCompares against another apt.Version object or a version string.

        This method behaves like Python 2's cmp builtin and returns an integer
        according to the outcome.  The return value is negative in case of
        self < other, zero if self == other and positive if self > other.

        The comparison includes the package name and architecture if other is
        an apt.Version object.  If other isn't an apt.Version object it'll be
        assumed that other is a version string (without package name/arch).

        .. versionchanged:: 1.0.0
        a_cmplahashu%s=%su<Version: package:%r version:%r>a_recordsalookupafile_listuCould not lookup recorduInternal helper that moves the Records to the right position.atranslated_descriptionapopTluInternal helper to get the translated description.ainstalled_sizeuReturn the size of the package when installed.ahomepageuReturn the homepage for the package.asizeuReturn the size of the package.aarchuReturn the architecture of the package version.adownloadableuReturn whether the version of the package is downloadable.ainstalledaiduReturn wether this version of the package is currently installed.

        .. versionadded:: 1.0.0
        uReturn the version as a string.a_translated_recordsashort_descuReturn the short description (one line summary).along_descureturn the long description (raw).asectionuReturn the section of the package.uw_TuMissing description for '%s'.Please report.aunicodeadecodeTuutf-8TuInvalid unicode in description for '%s' (%s). Please report.asplitTw
astripw.adescaendswithu

astartswithTu  u
%s
:lnnu%s
Tw :lnnuReturn the formatted long description.

        Return the formatted long description according to the Debian policy
        (Chapter 5.6.13).
        See http://www.debian.org/doc/debian-policy/ch-controlfields.html
        for more information.
        asource_pkgashortnameuReturn the name of the source package.asource_veruReturn the version of the source package.apriority_struReturn the priority of the package, as string.a_depcacheapolicyaget_priorityuReturn the internal policy priority as a number.
           See apt_preferences(5) for more information about what it means.
        aRecordarecorduReturn a Record() object for this version.

        Return a Record() object for this version which provides access
        to the raw attributes of the candidate version
        adepends_listabase_depsaBaseDependencyatype_uReturn a list of Dependency objects for the given types.

        Multiple types can be specified. Possible types are:
        'Breaks', 'Conflicts', 'Depends', 'Enhances', 'PreDepends',
        'Recommends', 'Replaces', 'Suggests'

        Additional types might be added in the future.
        aprovides_listu Return a list of names that this version provides.aget_dependenciesTaEnhancesuReturn the list of enhances for the package version.TaPreDependsaDependsuReturn the dependencies of the package version.TaRecommendsuReturn the recommends of the package version.TaSuggestsuReturn the suggests of the package version.utoo many values to unpack (expected 2)aoriginsaOriginuReturn a list of origins for the package version.afilenameuReturn the path to the file inside the archive.

        .. versionadded:: 0.7.10
        amd5_hashuReturn the md5sum of the binary.

        .. versionadded:: 0.7.10
        asha1_hashuReturn the sha1sum of the binary.

        .. versionadded:: 0.7.10
        asha256_hashuReturn the sha256sum of the binary.

        .. versionadded:: 0.7.10
        aTaskuGet the tasks of the package.

        A set of the names of the tasks this package belongs to.

        .. versionadded:: 0.8.0
        uReturn an iterator over all available urls.

        .. versionadded:: 0.7.10
        aarchive_uria_urisuVersion._urisuReturn a list of all available uris for the binary.

        .. versionadded:: 0.7.10
        uReturn a single URI for the binary.

        .. versionadded:: 0.7.10
        aconfigafind_bTuAPT::Get::AllowUnauthenticatedFabasenameajoina_file_is_samealoggingadebuguIgnoring already existing file: %saabspathaUntrustedErroruCould not fetch %s %s source package: Source %r is not trustedaindexadescribeu<unkown>auriuNo URI for this binary.ausableuThe item %r could not be fetched: No trusted hash found.aAcquireaaptaprogressatextaAcquireProgressaAcquireFileTadestfilearunastatusaSTAT_DONEaFetchErroruThe item %r could not be fetched: %sadestfileaerror_textuFetch the binary version of the package.

        The parameter *destdir* specifies the directory where the package will
        be fetched to.

        The parameter *progress* may refer to an apt_pkg.AcquireProgress()
        object. If not specified or None, apt.progress.text.AcquireProgress()
        is used.

        The keyword-only parameter *allow_unauthenticated* specifies whether
        to allow unauthenticated downloads. If not specified, it defaults to
        the configuration option `APT::Get::AllowUnauthenticated`.

        .. versionadded:: 0.7.10
        aSourceRecordsasource_lookupasrcasource_nameuNo source for %rafilesaosadestdiratypeadscaacqaitemsw-aupstream_versionasubprocessacheck_calludpkg-sourceu-xuGet the source code of a package.

        The parameter *destdir* specifies the directory where the source will
        be fetched to.

        The parameter *progress* may refer to an apt_pkg.AcquireProgress()
        object. If not specified or None, apt.progress.text.AcquireProgress()
        is used.

        The parameter *unpack* describes whether the source should be unpacked
        (``True``) or not (``False``). By default, it is unpacked.

        If *unpack* is ``True``, the path to the extracted directory is
        returned. Otherwise, the path to the .dsc file is returned.

        The keyword-only parameter *allow_unauthenticated* specifies whether
        to allow unauthenticated downloads. If not specified, it defaults to
        the configuration option `APT::Get::AllowUnauthenticated`.
        a_packagea_pkgaversion_lista_versionsuVersion: %r not found.u[%s]uVersionList.__str__.<locals>.<genexpr>u<VersionList: %r>uReturn an iterator over all value objects.uVersionList.__iter__.<locals>.<genexpr>uReturn a list of all versions, as strings.uReturn the key or the default.a_changelogu Init the Package object u<Package: name:%r architecture=%r id:%r>aarchitectureaget_candidate_veruReturn the candidate version of the package.

        This property is writeable to allow you to set the candidate version
        of the package. Just assign a Version() object, and it will be set as
        the candidate version.
        acache_pre_changeaset_candidate_veracache_post_changeuSet the candidate version of the package.acurrent_veruReturn the currently installed version of the package.

        .. versionadded:: 0.7.9
        aget_fullnameTtuReturn the name of the package, possibly including architecture.

        If the package is not part of the system's preferred architecture,
        return the same as :attr:`fullname`, otherwise return the same
        as :attr:`shortname`

        .. versionchanged:: 0.7.100.3

        As part of multi-arch, this field now may include architecture
        information.
        TFuReturn the name of the package, including architecture.

        Note that as for :meth:`architecture`, this returns the
        native architecture for Architecture: all packages.

        .. versionadded:: 0.7.100.3uReturn the name of the package, without architecture.

        .. versionadded:: 0.7.100.3uReturn a uniq ID for the package.

        This can be used eg. to store additional information about the pkg.aessentialuReturn True if the package is an essential part of the system.uReturn the Architecture of the package.

        Note that for Architecture: all packages, this returns the
        native architecture, as they are internally treated like native
        packages. To get the concrete architecture, look at the
        :attr:`Version.architecture` attribute.

        .. versionchanged:: 0.7.100.3
            This is now the package's architecture in the multi-arch sense,
            previously it was the architecture of the candidate version
            and deprecated.
        amarked_installuReturn ``True`` if the package is marked for install.amarked_upgradeuReturn ``True`` if the package is marked for upgrade.amarked_deleteuReturn ``True`` if the package is marked for delete.amarked_keepuReturn ``True`` if the package is marked for keep.amarked_downgradeu Package is marked for downgrade amarked_reinstalluReturn ``True`` if the package is marked for reinstall.uReturn ``True`` if the package is installed.ais_upgradableuReturn ``True`` if the package is upgradable.ais_garbageuReturn ``True`` if the package is no longer required.

        If the package has been installed automatically as a dependency of
        another package, and if no packages depend on it anymore, the package
        is no longer required.
        ais_auto_installeduReturn whether the package is marked as automatically installed.u/var/lib/dpkg/info/%s.listarbareaduReturn a list of files installed by the package.

        Return a list of unicode names of the files which have
        been installed by this package
        acandidateTuThe list of changes is not availableaDebianuhttp://packages.debian.org/changelogs/pool/%(src_section)s/%(prefix)s/%(src_pkg)s/%(src_pkg)s_%(src_ver)s/changelogaUbuntuuhttp://changelogs.ubuntu.com/changelogs/pool/%(src_section)s/%(prefix)s/%(src_pkg)s/%(src_pkg)s_%(src_ver)s/changelogamainasource_versionasrc_recordsasrc_pkgasrc_verTw/lTalibaliblTw:lasrc_sectionaprefixasocketagetdefaulttimeoutasetdefaulttimeoutTlais_setaurlopenu^%s \((.*)\)(.*)$areaescapeacancel_lockachangelog_fileareadlineamatcharegexpw:agroupTlachangelogaHTTPErrorTuThe list of changes is not available yet.

Please use http://launchpad.net/ubuntu/+source/%s/%s/+changelog
until the changes become available or try again later.aBadStatusLineTuFailed to download the list of changes. 
Please check your Internet connection.u
        Download the changelog of the package and return it as unicode
        string.

        The parameter *uri* refers to the uri of the changelog file. It may
        contain multiple named variables which will be substitued. These
        variables are (src_section, prefix, src_pkg, src_ver). An example is
        the Ubuntu changelog::

            "http://changelogs.ubuntu.com/changelogs/pool" \
                "/%(src_section)s/%(prefix)s/%(src_pkg)s" \
                "/%(src_pkg)s_%(src_ver)s/changelog"

        The parameter *cancel_lock* refers to an instance of threading.Event,
        which if set, prevents the download.
        aVersionListuReturn a VersionList() object for all available versions.

        .. versionadded:: 0.7.9
        ais_inst_brokenuReturn True if the to-be-installed package is broken.ais_now_brokenuReturn True if the installed package is broken.acurrent_stateaCURSTATE_CONFIG_FILESuChecks whether the package is is the config-files state.amark_keepuMark a package for keep.amark_deleteabroken_countaProblemResolveraclearaprotectaremovearesolveuMark a package for deletion.

        If *auto_fix* is ``True``, the resolver will be run, trying to fix
        broken packages.  This is the default.

        If *purge* is ``True``, remove the configuration files of the package
        as well.  The default is to keep the configuration.
        amark_installuMark a package for install.

        If *autoFix* is ``True``, the resolver will be run, trying to fix
        broken packages.  This is the default.

        If *autoInst* is ``True``, the dependencies of the packages will be
        installed automatically.  This is the default.

        If *fromUser* is ``True``, this package will not be marked as
        automatically installed. This is the default. Set it to False if you
        want to be able to automatically remove the package at a later stage
        when no other package depends on it.
        Tafrom_useramark_autoawriteuMarkUpgrade() called on a non-upgradeable pkg: '%s'
uMark a package for upgrade.uMark a package as automatically installed.

        Call this function to mark a package as automatically installed. If the
        optional parameter *auto* is set to ``False``, the package will not be
        marked as automatically installed anymore. The default is ``True``.
        acommituCommit the changes.

        The parameter *fprogress* refers to a apt_pkg.AcquireProgress() object,
        like apt.progress.text.AcquireProgress().

        The parameter *iprogress* refers to an InstallProgress() object, as
        found in apt.progress.base.
        aprintTuSelf-test for the Package modularandomainitaOpProgressaCacheuapt-utilsuName: %s uID: %s uPriority (Candidate): %s apriorityuPriority (Installed): %s uInstalled: %s uCandidate: %s uCandidateDownloadable: %suCandidateOrigins: %suSourcePkg: %s uSection: %s uSummary: %sasummaryuDescription (formatted) :
%sadescriptionuDescription (unformatted):
%saraw_descriptionuInstalledSize: %s uPackageSize: %s uDependencies: %sadependenciesuRecommends: %sarecommendsw,aor_dependenciesuarch: %suhomepage: %surec: u2vcardaget_changelogTtFuRunning install on random upgradable pkgs with AutoFix: acachearandintTllwiuBroken: %s uInstCount: %s ainst_countuRandomly remove some packages with AutoFix: %suError trying to remove: %s uDelCount: %s adel_countuSelf-test.u%s (%s) (%s) (%s)apre_dependu_test.<locals>.<genexpr>uFunctionality related to packages.a__doc__u/usr/lib/python3/dist-packages/apt/package.pya__file__a__spec__ahas_locationa__cached__aprint_functionasysathreadinguhttp.clientTaBadStatusLineuurllib.errorTaHTTPErroruurllib.requestTaurlopenahttplibaurllib2TaHTTPErroraurlopenaAnyaIterableaIteratoraListaOptionalaSetaTupleaUnionano_type_checkaoverloadaMappingaSequenceacollectionsTOobjectametaclassa__prepare__aGenericWrappera__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uapt.packagea__module__uTakes a non-generic type and adds __getitem__a__qualname__uGenericWrapper.__init__uGenericWrapper.__getitem__a__orig_bases__TOlistuapt.progress.textuapt.progress.baseTaAcquireProgressaInstallProgressaInstallProgressTagettextagettextTaBaseDependencyaDependencyaOriginaPackageaRecordaVersionaVersionLista__all__TEExceptionuRaised when a file could not be fetched.uRaised when a file did not have a trusted hash.uA single dependency.astra__dstruCompare helper for compatibility with old third-party code.

        Old third-party code might still compare the relation with the
        previously used relations (<<,<=,==,!=,>=,>>,) instead of the curently
        used ones (<,<=,=,!=,>=,>,). This compare helper lets < match to <<,
        > match to >> and = match to ==.
        uBaseDependency.__dstruBaseDependency.__dstr.__eq__a__ne__uBaseDependency.__dstr.__ne__uBaseDependency.__init__a__str__uBaseDependency.__str__a__repr__uBaseDependency.__repr__apropertyuBaseDependency.nameuBaseDependency.relationuBaseDependency.relation_debuBaseDependency.versionuBaseDependency.target_versionsainstalled_target_versionsuBaseDependency.installed_target_versionsuBaseDependency.rawstruBaseDependency.rawtypeuBaseDependency.pre_dependuRepresent an Or-group of dependencies.

    Attributes defined here:
        or_dependencies - The possible choices
        rawstr - String represenation of the Or-group of dependencies
        rawtype - The type of the dependencies in the Or-group
        target_version - A list of Versions which satisfy this Or-group of deps
    uDependency.__init__uDependency.__str__uDependency.__repr__uDependency.or_dependenciesuDependency.rawstruDependency.rawtypeuDependency.target_versionsuDependency.installed_target_versionsuThe origin of a version.

    Attributes defined here:
        archive   - The archive (eg. unstable)
        component - The component (eg. main)
        label     - The Label, as set in the Release file
        origin    - The Origin, as set in the Release file
        codename  - The Codename, as set in the Release file
        site      - The hostname of the site.
        trusted   - Boolean value whether this is trustworthy.
    uOrigin.__init__uOrigin.__repr__uRecord in a Packages file

    Represent a record as stored in a Packages file. You can use this like
    a dictionary mapping the field names of the record to their values::

        >>> record = Record("Package: python-apt\nVersion: 0.8.0\n\n")
        >>> record["Package"]
        'python-apt'
        >>> record["Version"]
        '0.8.0'

    For example, to get the tasks of a package from a cache, you could do::

        package.candidate.record["Tasks"].split()

    Of course, you can also use the :attr:`Version.tasks` property.

    uRecord.__init__a__hash__uRecord.__hash__uRecord.__str__uRecord.__getitem__a__contains__uRecord.__contains__a__iter__uRecord.__iter__TnuRecord.getahas_keyuRecord.has_keya__len__uRecord.__len__uRepresentation of a package version.

    The Version class contains all information related to a
    specific package version.

    .. versionadded:: 0.7.9
    uVersion.__init__uVersion._cmpuVersion.__eq__a__ge__uVersion.__ge__a__gt__uVersion.__gt__a__le__uVersion.__le__a__lt__uVersion.__lt__uVersion.__ne__uVersion.__hash__uVersion.__str__uVersion.__repr__uVersion._recordsuVersion._translated_recordsuVersion.installed_sizeuVersion.homepageuVersion.sizeuVersion.architectureuVersion.downloadableuVersion.is_installeduVersion.versionuVersion.summaryuVersion.raw_descriptionuVersion.sectionuVersion.descriptionuVersion.source_nameuVersion.source_versionuVersion.priorityapolicy_priorityuVersion.policy_priorityuVersion.recorduVersion.get_dependenciesaprovidesuVersion.providesaenhancesuVersion.enhancesuVersion.dependenciesuVersion.recommendsasuggestsuVersion.suggestsuVersion.originsuVersion.filenameamd5uVersion.md5asha1uVersion.sha1asha256uVersion.sha256atasksuVersion.tasksaurisuVersion.urisuVersion.uriTunnafetch_binaryuVersion.fetch_binaryTuntnafetch_sourceuVersion.fetch_sourceuProvide a mapping & sequence interface to all versions of a package.

    This class can be used like a dictionary, where version strings are the
    keys. It can also be used as a sequence, where integers are the keys.

    You can also convert this to a dictionary or a list, using the usual way
    of dict(version_list) or list(version_list). This is useful if you need
    to access the version objects multiple times, because they do not have to
    be recreated this way.

    Examples ('package.versions' being a version list):
        '0.7.92' in package.versions # Check whether 0.7.92 is a valid version.
        package.versions[0] # Return first version or raise IndexError
        package.versions[0:2] # Return a new VersionList for objects 0-2
        package.versions['0.7.92'] # Return version 0.7.92 or raise KeyError
        package.versions.keys() # All keys, as strings.
        max(package.versions)
    uVersionList.__init__uVersionList.__getitem__uVersionList.__str__uVersionList.__repr__uVersionList.__iter__uVersionList.__contains__uVersionList.__eq__uVersionList.__len__uVersionList.keysuVersionList.getaPackageuRepresentation of a package in a cache.

    This class provides methods and properties for working with a package. It
    lets you mark the package for installation, check if it is installed, and
    much more.
    uPackage.__init__uPackage.__str__uPackage.__repr__uPackage.__lt__uPackage.candidateasetteruPackage.installeduPackage.nameuPackage.fullnameuPackage.shortnameuPackage.iduPackage.essentialuPackage.architectureuPackage.marked_installuPackage.marked_upgradeuPackage.marked_deleteuPackage.marked_keepuPackage.marked_downgradeuPackage.marked_reinstalluPackage.is_installeduPackage.is_upgradableais_auto_removableuPackage.is_auto_removableuPackage.is_auto_installedainstalled_filesuPackage.installed_filesTnnuPackage.get_changelogaversionsuPackage.versionsuPackage.is_inst_brokenuPackage.is_now_brokenahas_config_filesuPackage.has_config_filesuPackage.mark_keepuPackage.mark_deleteTtppuPackage.mark_installamark_upgradeuPackage.mark_upgradeuPackage.mark_autouPackage.commita_testTa.0abdTa.0woTa.0averTa.0averaselfu<listcomp>TwpTatverTaveru<module apt.package>Ta__class__TaselfaitemaverTaselfakeyTaselfaotherTaselfTaselfapackageacandTaselfapackageaslice_TaselfapcacheapkgiterTaselfapkgapackagefileaindexfileTaselfarecord_strTaselfavalueTaselfaversionabase_depsarawtypea__class__TaselfaversionadepTaselfaotheraself_nameaother_nameTapathasizeahashesafobjTarandomaprogressacacheapkgadepwianameTaselfadesc_iterTaselfapackagefilea_unusedaindexfileTaselfacandTaselfaversionTaselfafprogressaiprogressTaselfadescarecordsadscaerralinesaraw_linealineTaselfadestdiraprogressaallow_unauthenticatedabaseadestfileapfileaoffsetaindexahashesaacqaacqfileTaselfadestdiraprogressaunpackaallow_unauthenticatedasrcaacqadscarecordasource_nameasource_versionasource_lookupafilesafilabaseadestfileaitemaoutdirTaselfakeyadefaultTaselfauriacancel_lockaresasrc_pkgasrc_sectionasectionasrc_verasrc_recordsasection_splitaprefixasrc_ver_splitatimeoutachangelog_fileachangelogaregexpaline_rawalineamatchainstalledachangelog_verTaselfatypesadepends_listadependsatype_adep_ver_listabase_depsadep_orTaselfanameapathafile_listTaselfainst_verTaselfaautoTaselfaauto_fixapurgeafixTaselfaauto_fixaauto_instafrom_userafixerTaselfafrom_useraautoTaargTaselfaoriginsapackagefilea_unusedTaselfarecordsTaselfatversa_tversa_tvera_pkgacacheapkgatverTaselfatversabdatver.apt.progress.base��Zacurrent_bytesacurrent_cpslacurrent_itemsaelapsed_timeafetched_bytesalast_bytesatotal_bytesatotal_itemsuInvoked when the Acquire process starts running.aosapipeutoo many values to unpack (expected 2)astatusfdawritefdafdopenwwawrite_streamwrastatus_streamafcntlaF_SETFLaO_NONBLOCKacloseaforkaset_inheritablea_exitado_installafilenoaspawnlpaP_WAITadpkgu--status-fdu-iawriteu%s
aapt_pkgaPackageManageraRESULT_FAILEDachild_pidawait_childaWEXITSTATUSuInstall using the object 'obj'.

        This functions runs install actions. The parameter 'obj' may either
        be a PackageManager object in which case its do_install() method is
        called or the path to a deb file.

        If the object is a PackageManager, the functions returns the result
        of calling its do_install() method. Otherwise, the function returns
        the exit status of dpkg. In both cases, 0 means that there were no
        problems.
        uFork.areadlineaerrnoaEAGAINaEWOULDBLOCKaprintastrerroruastartswithTapmasplitTw:lutoo many values to unpack (expected 4)TastatusTw:lutoo many values to unpack (expected 3)Taprocessingaprocessingastripapkgnameastatus_strapmerroraerroruconffile-promptapmconffileareamatchu\s*'(.*)'\s*'(.*)'.*aconffileagroupTlTlapmstatusapercentastatusastatus_changeadpkg_status_changeuUpdate the interface.Tlpaselectaselfaselect_timeoutaargsaEINTRaupdate_interfaceawaitpidaWNOHANGaECHILDaresuWait for child progress to exit.

        This method is responsible for calling update_interface() from time to
        time. It exits once the child has exited. The return values is the
        full status returned from os.waitpid() (not only the return code).
        uCalled periodically to update the user interface.

        You may use the optional argument 'percent' to set the attribute
        'percent' in this call.
        uBase classes for progress reporting.

Custom progress classes should inherit from these classes. They can also be
used as dummy progress classes which simply do nothing.
a__doc__u/usr/lib/python3/dist-packages/apt/progress/base.pya__file__a__spec__aoriginahas_locationa__cached__aprint_functionasysaOptionalaUnionaioLaAcquireProgressaCdromProgressaInstallProgressaOpProgressa__all__TOobjectametaclassa__prepare__aAcquireProgressa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uapt.progress.basea__module__uMonitor object for downloads controlled by the Acquire class.

    This is an mostly abstract class. You should subclass it and implement the
    methods to get something useful.
    a__qualname__uInvoked when an item is successfully and completely fetched.adoneuAcquireProgress.doneuInvoked when an item could not be fetched.afailuAcquireProgress.failuInvoked when some of the item's data is fetched.afetchuAcquireProgress.fetchuInvoked when an item is confirmed to be up-to-date.

        Invoked when an item is confirmed to be up-to-date. For instance,
        when an HTTP download is informed that the file on the server was
        not modified.
        aims_hituAcquireProgress.ims_hituPrompt the user to change the inserted removable media.

        The parameter 'media' decribes the name of the media type that
        should be changed, whereas the parameter 'drive' should be the
        identifying name of the drive whose media should be changed.

        This method should not return until the user has confirmed to the user
        interface that the media change is complete. It must return True if
        the user confirms the media change, or False to cancel it.
        amedia_changeuAcquireProgress.media_changeuPeriodically invoked while the Acquire process is underway.

        This method gets invoked while the Acquire progress given by the
        parameter 'owner' is underway. It should display information about
        the current state.

        This function returns a boolean value indicating whether the
        acquisition should be continued (True) or cancelled (False).
        apulseuAcquireProgress.pulseastartuAcquireProgress.startuInvoked when the Acquire process stops running.astopuAcquireProgress.stopa__orig_bases__aCdromProgressuBase class for reporting the progress of adding a cdrom.

    Can be used with apt_pkg.Cdrom to produce an utility like apt-cdrom. The
    attribute 'total_steps' defines the total number of steps and can be used
    in update() to display the current progress.
    atotal_stepsuAsk for the name of the cdrom.

        If a name has been provided, return it. Otherwise, return None to
        cancel the operation.
        aask_cdrom_nameuCdromProgress.ask_cdrom_nameuAsk for the CD-ROM to be changed.

        Return True once the cdrom has been changed or False to cancel the
        operation.
        achange_cdromuCdromProgress.change_cdromuPeriodically invoked to update the interface.

        The string 'text' defines the text which should be displayed. The
        integer 'current' defines the number of completed steps.
        aupdateuCdromProgress.updateaInstallProgressuClass to report the progress of installing packages.TlZf�������?ua__init__uInstallProgress.__init__u(Abstract) Start update.astart_updateuInstallProgress.start_updateu(Abstract) Called when update has finished.afinish_updateuInstallProgress.finish_updatea__enter__uInstallProgress.__enter__a__exit__uInstallProgress.__exit__u(Abstract) Called when a error is detected during the install.uInstallProgress.erroru(Abstract) Called when a conffile question from dpkg is detected.uInstallProgress.conffileu(Abstract) Called when the APT status changed.uInstallProgress.status_changeu(Abstract) Called when the dpkg status changed.uInstallProgress.dpkg_status_changeu(Abstract) Sent just before a processing stage starts.

        The parameter 'stage' is one of "upgrade", "install"
        (both sent before unpacking), "configure", "trigproc", "remove",
        "purge". This method is used for dpkg only.
        uInstallProgress.processingarunuInstallProgress.runuInstallProgress.forkuInstallProgress.update_interfaceuInstallProgress.wait_childaOpProgressuMonitor objects for operations.

    Display the progress of operations such as opening the cache.TFuZuamajor_changeaopasubopTnuOpProgress.updateuCalled once an operation has been completed.uOpProgress.doneu<module apt.progress.base>Ta__class__TaselfTaselfatypeavalueatracebackTaselfacurrentanewTaselfaitemTaselfapkgastatusTaselfapkgaerrormsgTaselfamediaadriveTaselfapkgastageTaselfaownerTaselfaobjapidwearesTaselfapkgapercentastatusTaselfapercentTaselfatextacurrentT	aselfalineaerrapkgnameastatusastatus_strapercentabaseamatchTaselfapidaresaerroraerrno_a_errstraerr.apt.progress�uProgress reporting.

This package provides progress reporting for the python-apt package. The module
'base' provides classes with no output, and the module 'text' provides classes
for terminals, etc.
a__doc__u/usr/lib/python3/dist-packages/apt/progress/__init__.pya__file__Lu/usr/lib/python3/dist-packages/apt/progressa__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aprint_functionaSequencea__all__u<module apt.progress>u.apt.progress.textl�aapt_pkgagettextaaptuTranslate the message, also try apt if translation is missing.a_filela_widthawriteTw
w amaxTw
aflushuWrite the message on the terminal, fill remaining space.aTextProgressa__init__abaseaOpProgressuaold_opaupdateamajor_changea_writeu%s... %i%%
aopapercentuCalled periodically to update the user interface.adonew_Tu%c%s... Donew
uCalled once an operation has been completed.aAcquireProgressa_signallPalongTla_idastartasignalaSIGWINCHa_winchuStart an Acquire progress.

        In this case, the function sets up a signal handler for SIGWINCH, i.e.
        window resize signals. And it also sets id to 1.
        afilenoaosaisattyafcntlatermiosastructaioctlaTIOCGWINSZc        aunpackahhhhutoo many values to unpack (expected 4)luSignal handler for window resize signals.aims_hitTuHit adescriptionaownerafilesizeu [%sB]asize_to_struCalled when an item is update (e.g. not modified on the server).afailastatusaSTAT_DONETuIgn TuErr u  %saerror_textuCalled when an item is failed.afetchacompleteaidTuGet:u%s %suCalled when some of the item's data is fetched.apulseacurrent_bytesacurrent_itemsfY@atotal_bytesatotal_itemsu%i%%acurrent_cpsu %sB/s %satime_to_straworkersacurrent_itemu [%s]atvalaselfu [%i %sashortdescu [%saactive_subprocessu %su %sBacurrent_sizeatotal_sizeu/%sB %i%%w]ashownTu [Working]aenduPeriodically invoked while the Acquire process is underway.

        Return False if the user asked to cancel the whole Acquire process.amedia_changeTuMedia change: please insert the disc labeled
 '%s'
in the drive '%s' and press enter
ainputTwcwCuPrompt the user to change the inserted removable media.astopTuFetched %sB in %s (%sB/s)
afetched_bytesaelapsed_timearstripuInvoked when the Acquire process stops running.aCdromProgressaask_cdrom_nameTuPlease provide a name for this Disc, such as 'Debian 2.1r1 Disk 1'Tw:uAsk the user to provide a name for the disc.uSet the current progress.achange_cdromTuPlease insert a Disc in the drive and press enteruAsk the user to change the CD-ROM.uProgress reporting for text interfaces.a__doc__u/usr/lib/python3/dist-packages/apt/progress/text.pya__file__a__spec__aoriginahas_locationa__cached__aprint_functionaioasysatypesaCallableaOptionalaUnionuapt.progressTabaseLaAcquireProgressaCdromProgressaOpProgressa__all__TOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uapt.progress.texta__module__uInternal Base class for text progress classes.a__qualname__TnuTextProgress.__init__TtFuTextProgress._writea__orig_bases__uOperation progress reporting.

    This closely resembles OpTextProgress in libapt-pkg.
    uOpProgress.__init__uOpProgress.updateuOpProgress.doneuAcquireProgress for the text interface.uAcquireProgress.__init__uAcquireProgress.startuAcquireProgress._winchuAcquireProgress.ims_hituAcquireProgress.failuAcquireProgress.fetchuAcquireProgress.pulseuAcquireProgress.media_changeuAcquireProgress.stopuText CD-ROM progress.uCdromProgress.ask_cdrom_nameuCdromProgress.updateuCdromProgress.change_cdromu<module apt.progress.text>Ta__class__TamsgaresTaselfaoutfileTaselfadummyafcntlatermiosastructabufacolTaselfamsganewlineamaximizeTaselfTaselfaitemTaselfaitemalineTaselfamediumadriveT	aselfaownerapercentashownatvalaendaetaaworkeravalTaselfasignalTaselfapercentTaselfatextacurrent.certifi!a__doc__u/usr/lib/python3/dist-packages/certifi/__init__.pya__file__Lu/usr/lib/python3/dist-packages/certifia__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__acoreTawherelawhereu2019.11.28a__version__u<module certifi>u.certifi.core!adirnamea__file__u/etc/ssl/certs/ca-certificates.crtu
certifi.py
~~~~~~~~~~

This module returns the installation location of cacert.pem.
a__doc__u/usr/lib/python3/dist-packages/certifi/core.pya__spec__aoriginahas_locationa__cached__aosawhereu<module certifi.core>Twfu.chardet.big5freq��a__doc__u/usr/lib/python3/dist-packages/chardet/big5freq.pya__file__a__spec__aoriginahas_locationa__cached__f�?aBIG5_TYPICAL_DISTRIBUTION_RATIOlaBIG5_TABLE_SIZETll	l�l�l�l�l	lRll�l�l�lal�llnl�l!l�llLl,lBll�l�l�l�l�ll{
l]
l�l�l
ljl�l�l.lNlil�ll�l:l�l�l�l?l�l�l=lNlKl�l�lklq	l�l�l�
ll�llbll
l�l�ll�
lol2l�lil�l�lcl8l�l�ll�l�l�l�l�l{l|l�l�l"l�
l�l@l\l�l�	l�l�l�l�l�l�lFl�l|
lQlHl�l�lPlvl�l�l�ll�lDl^
l�l�lFl}
l�lEl�lOl�l0l�lsl�l4l<l2l�l�l&lMl�l�l~
l�l�lGl�ll[l�l�l?lllallK	l*l�lgl�	lZl�
l:l�ll�lKl�	ll�	l�ll�l�l�l`llll�l�ll
	l lql�l~l�l�l
l�	ll�l�l�lcl�lull�l*ll�l	l�
l�l~lml�l�l�lel�lGl^l�lnl�llUlCl�lCl�l�l�l�ll�l ljlol/ll�lPl7	l[l�l�l�
l?l�l�l�lolSl(l�ll�lpl]l�l6ljll@lll�lll8ll+l3l[l�l�l\l�l�l�l�l�l]	lAl�l�l�l1l�l�lHl�
l�
ldl�l�l+l�l2l�l�l�l�
lOlL	l�llfl1l�l�l�l�l�l�ll3l9l�lll,l�l	ll�ll�l�l�l�lelz
lQlMl&l�lXl�l�l�l�l�l
l�l�l�lklpl�lMl�l�l�l%ll�l�l�l�l�l'l�	l�l\l�ll7l�lJl�l!l�l�ll�l�lNl�lBlPl_
lqll�l�
l�l�l�
l�
l�l l�ll lIl�l8	l�l�
ll{
ll�l
l�l�l�lml�l�lfl�l�lxl�l�l�l�l�
l�l
l�lgl�l�l
ll�l�l�ll�l�l&l�l'l�ll�l�l�l.l�l�ll�lM	l�l�l�l�l$l#l�lDlhlAl�	l�l�lrl�l�lUlGll�l�l
l�
lQlSlil�l�ldll0lFl�l�lCl�l�ll�l l�lJll�lUll�l�lN	l�
l�l�l<l�l�
l:lA
l�
l�l	l 	l9l�l}ll�	l�l�lWlPl�
ll)lDll�l�l4l�
l�	l)l�l�lr	l�lsl�l�ltll9	l�l�l�ls	l*ll�l�l�l�l�l]l�l�l�l�l�	lDljl(
l
l�l�l�
l�lul5lYljl	lll�lull�l�
l�l�l`
l
l=l�l�l�l�l�l�l�l5l�l!l�l�lTlElxl�l�lell�	l�lO	lPl�l|
l6lAl�
l/lkl�l�
llll!l	l�lBl�l`l�l
l�l�lAl�llll�l�
lvl�	l�l�lwl�l�l�lMl�
l�l�l�ll�la
l�l�l�
l}
l�lxl,l}l�l�lB
l�l�l�l�l�l�l�l�lFlklml�	l�l�
l�l	l�l�
l�lbl�l)
l^lP	l
l,l�l�l�l7l5l~
lyl|l�lzl�ll�l�
lC
l{lll�l�l�l�l�l�l�l1l�lbll�	l�
l�l�lt	l�l�
l�l_l�l�l�l�l�ll�
l�
lb
l�l�l�l5lDl�l�lll�l|l[l*
l�l�l�
l�l%llGl^	l�lll�l�l�
l�l`l�l�l�lpl�l�lnlclglmll�l'l2l�ll�l{l�l�l�l�l�l�lD
l�lfl	l�l|l:	l�l�ll�l�
l�l�
l
l�l�l�lnl�l�l�l�l;l�lIlYl}l�l�
lXl"l�l
l�l�l�l�l�l�l-l�lll�l�l�l�l�ll�l�lEl�l~l�l>l]l�l,l�l�l�lvlLlBlil&l�l�ll�l�l�lGl�l�llBl�l�
l+
l�ll�l�l�l�l�l�	l lall�l�l
lal�l}lE
l�lDl�l=l�l0ll�l�
l6l�ll�lvl!l�l�l�l�l�l�l�l�l9lHll�l�l�l�
lFl�l�l�l�l�l"l�lHl�l�l�l
loll�lRl*l�l.l�l�l�l�llIl3ll,
l�l*lSll�l�lXl�l�l/llblpl�l�	ll�l�l�l�l�lRlll�l7l�l2l�l�	l�l�l�l�l�l�l_	l�lbll�
l�l�l�l�	l�l�l�ll�l�l`	lOl�l�	l�l`l7l�
l�
l�l�l�l�l�lla	l�l�l�l�l�l�lgl�l�l�l�l
l_l�l~l�l�l�l�l�l�
lal�l�
lb	l�l�l�l�l�ll�l�	l;l�l�	l-l
l�lQ	l�l�l�lqll�l�l�l`l�l#l#l�ll�llrl�
lsll�l�ldltl�
l�lc
l�llklwl�l�l�l�l�l�l�ll�l�lgl�lQl�lUl
l�l�l�l�llClSl�lc	l�l�l5l�l�lBl�l_l�lclNl�l�lYl�l�l�l�
l�lLldl�
l�
l	lKl�l8lalGl�l�l
l�l�llsl6l�	ltl;	lNl�l�ll	l4l�l:l�l\lql�l�l�l.l�lllul�
l�l�l�l�l�
l�l
lrl�l�l�
l�
l�lcl�l�l�l@l�l�l�ll�l�ll�l/l9l�ll�ll�l�l�l�l�
l<	ld
ll�l�l8lvllCl�ll
l�lml�l�
l�l�l�l�l�lZl�l�l�l�lwl�	l{l�l�l�l�l$l�llMldl0lrl�l�l�lgllVl�l�ll�l:lZl�l�l{l$lel0l�ll$l�l�
l�
l�l5l�l[l�lvl�llcl�lVlR	l$l;ll�llflll�ldl�l�lWle
ll�l�lll�l�
llJl�ll�llul�l	l�l
l�ll�
lKl�l2l�lLl l.l�l�l2l�ll�l�ll�l�l%ll�l�ll
ll�ll�lll�l
l�
lxl�lMl�l}ll�lTll�l�ld	l�
ll�l�l�l`lll�l�l�	l3lll;l�llllylYlLl�l�l�	l�	llll�lUl\l�l�ll�l�lVlNl�ll�
l�l�l 
l�l"lxl%ll;l=	l l�l�l2lEl�l!l�l�l�l^l�l"lwl�
l#l�l�l�l�l�l$l<lQl�l�lrl%l�l]l�l&l�l<l'll3l6lBl�l�l(l�l�l�l�l�ll�lgl�
l�
l)l�
l	l*l+l!	lll�l�l:l�l7l�l^l�ll�ll(l�
l,l+lllxl-l�l/lhl=l.l�l�l�l�lVll�llhl�l�l/ll�l�l�l<l�l�l;l0l�l�l�l
l�	l1lzl�ll�l5l6l�
l_l)l2l3l�l4lyl"	ll�l�
l�l^l5l�l�l?l%l+lf
l�l6l_lWl�l�l�
l7l>ll�
lg
l#	l�lu	l8l�l�l9lh
lF
l�lVl{l�lOl�lIlwl~l�
l^ll�l:l�l�l�l�l�l�l�l�	l;lel1l�l�l�l�l�l�l�l�l�l�lllPl<l=l�l>l�
l�l(l`lRl?lYl�lIl�	l�l�l�l7l�l�
l?l�l�l�
l@l�lol�lqlYlnll�llll�l�l�l�l�
li
lElPlVl�l!
l�l�l�l�l�lnl�lAl�l|l�
ll
lBl�l�l�l�ll-
l�	lOl�
l�lCl�lDlWlTlTll�l�l�l�
l}lEl�l&l�
l�l�l�l�ll�l�
l�l�l~lG
l�
l�ll$	lWl�ll�lol�l
lFllGl�ll"
l�l�l�l#
l�l�lDl-lQl�lHlel�	lllIl�l�llJlzl
l�lKlllLl�l$
l�
l�l�l�l�lH
l�l�l�ll�l�lMl:l�	ll�lNl�lI
l�l�l�lHl�l�ll�lOl�l�l�	lPlQl�l�lklRlRl�l�l�l�
l
l�l�l�l�l�l�ll�lSlTl�l�l�l%
l�l�l�l�l�l&
lSlUll�lS	l�lCl�l�l�lVl~l�l!lXl�l�l�l�l�l,l�ll�l�lOl�l|l�ll�lPl�le	l�l�l�l�ll�l�l�l�l�l�l�l�lTlll�l�lWl�l�llXl�lYl�lRl�
lvlll�
ll�l=ll�lZl�lUl�l�l[l�l�l�lVl%	l\l�l�l]l�l�l^l8lT	l.
l'
l_l�lvl�l�l�l�lwltll`lalbl>	l�l�l"l{l�l�l�	l�lcl�ldl9l�lll�l[l9llldlhl
lel�l�l�lJ
l!l�l�lfl�l�ll�l�l�lTlgl�ll�l%l�lWlMlhll�lil�l�l�l�ll�l�l�l�l(
lj
l�lyl7lml�ljlkl�l?	lWl"l�l�l�llBl�lll|l�l�l)
lzl�l�l�
l�l�l�l�ll�l�lml�lnlulv	lwl�l	l*
ll�lolpl�llql7l.lrl�l�l
lll�
l�lfl�l�l�lsl&	lyll�l l�l�l�ll�l�
ll>l�l�l�l�llYl�l�ltl�lul/
l+
l�lvl�l�l�l@lwll�	l�	l�l�l3l�l�l�l,
lxl�l6l9l�
l	ll�l6l�l�ll!ll�lyl�lQl:lcl
l�ll-
lol�l�lFlXl�
l�l�lfl�llzl�
l�l�l�l�l�l{l/l�l�l'	l�	lbll�l`l�l�llul	lvl�l�ll�l�
l
l
l�l�l�l�l0lEl�lSl�l8l[l|l}lGl�ll�l!l~ll�lFlU	l�l�
lll�lelsl�l�l�lw	ll�l�l"llal	lZl&l�l�l�l�l�	l
l�l�l�lAl�l�l�
llill�l�l�l�l�l�ll�l
lol�ll�ll�
l
l�l	l�lAllJl0l�lx	l�
l�l�l�lYl�l�l�l�l�l�	l�ll�lZl8loll�lQl�l�l�l�l�
l�l�lalQl�l�lpl;ll�lPl�lbl�l�l�l�ll�l�l
l�l�l�l�	l�l�l�l�l�l�l�l�l�l�l�l]ll�ll�l�
l�l�ll�l�l'l�ll.
l�l�l
l�l�ll�l�lLl�l�l�l�ll�	l�l/
l�ll�l�lBl0
l[ll8l�l�l�l�l�	l�ll/l3l�l�l�ll�
ll�ll0l�lnl�l�l�ll�l�l�ll�	l�l�l�l�ll�lll�l4l�ll�ll<l�	ll
l�l�lYl�	l�ll�lCl�l�ll�
l�l�l�l�l}l1ll�
l�l�l�lKll�l�l0
lFl�l�l�l�
ll#l�l\l�l�l�lfll>l�
l�ll�
l�l�l�l�l�ll�
l�l�l�l�ljl�l�ll�ll-lpl9l@	l6lyll�l�ll
l1
l�l�ll�l�ll�lVl�l�l�l�l4l�l�l�lKl1
l�l�
lDl�l�l�l�ll�l#l�l�l�l�l2
ll�ll�	lZlHlpl�l�lgl�l�ll�
lqlrl
l�l�l�l�l�l�llK
lV	l�
l\l,l
l�l�l�ll�l]l�l�lull�
lll�l�l�l�ll�lZl�l�l�
lll�lljl�l�l0lhlhl�l�l�l�l�lEll�l	
l�ll�	l�l�l�l�l�l�l�ll�l�l�
lll�l2
l�l�l�l�l�llMl�lwl�l�l�ly	l?l�l�l�l

ltlml(	l�	l�l+l�l�l�l�l�l�l�llil�
l�l�	l�l�l�l
l�lL
l�l�l)	l�
ll�
l�llf	l�l�	l�lll�l�l�lRl"lA	l3
l�l�l-l1l�l$l�
l(l�l]l�l#l�l$l�
ll�l�l l*	l�l�l�l�l
l�l�l�
l=lk
l�l!l�l�
l�l�l�l�l�
l�l�l�l_l�l�l�l�l^l2ll�
l�l�l�l9l�l�l�l�l�l�l4
l�l�l�l
l�lbll�l�ll�l�ll�l5l�l�l�l�l"l	l�
ll�l�l�l�l4lIll�l#l�l�l�l�lll�lljl�l�ll$lkl�ll�
l�l\l�
lgl�lEl5
l�l�l�l�l�l�l�l�l�
l�l�l6
l�l�ll	l�l%ll�l�l�l�l[l�l�l�l�l�ll�l&lel�l�l�l�l�lol�l�lll	l}l�l�l�lzl�l+	l�l�l�ll�l�lnl-l�l�
l'llil
l�l�l�l(l�l�l�	l�l�ll�l�l�ll�
l�l�l�l�lBlilql�l�l�l<l�l*ljl)l"l*l�l>l)l7
l�l+l�l�l�ll�l�l�lzl�l,l�l�l�llM
l)lrl�l�l-l	l�l�l�l�l�l�lTl�lpl�l�l#l#l�l�ll�l�l�l�l�
l�ll�l	l�	l�l�l�lSl�l.l8
l�l�l�l�lz	l9
l=l�l�l�lml�lSlll�l�l�lxl�l�l/l�l�lql�ll3l�l5l�l:
l�l�
l�l�l�l�l�l�l�l
l;
l�l0l1l�lll�l�lnl�l_l�l]ll�lnl�l�l�l�l
l%l�l�l�l�l�l`l�l�l�l�lzlTlsl2l3
l�l
l{	l�l5l�l�ll�
lg	l�l�lkl�l�l�ll�
l�l�l3l4l�l�l�lcl l�l�l
l�
l�llal:l1l�l�l�l!lAlhl lol�
l6l"l�l�lll
l-l�l
lal5ll�	l�l
l�l�l#l!l�l$l�l�
l�l4
lfl�l	l%l&l�
lN
ll
l�lWl�lll�ll�
l'l�l$l�ll<
l�lNlllW	lkl�lO
l�l�lll�l�lX	l,	ll6l&ltl�lP
ll�l7l�
l�l�
l-	ljll	l�
l�lCl[lpl�l�l'l8l
lbl�lm
ll�
l�l{l(l�l�	l�l�	l9l�
l�	ll:l
l�
l^l�l�l�lB	l;ll�lll�l�
l�l�l
l�l	l�l)l<l=l�
ll�
l�l>lllll�
l=l�l�ll�ll�l�l�l�l�ln
l�lHlDl�
l?l�lUlWl�
l=
l�l:l�l�	lNl�lKlEl@l4lcl�
l�l>
l�lQ
l
lAll�lhl�ll�
l�
l(l]l�l�l�lBl*l�l�lll�lClDl�lElh	l�ll�l�l�l�lXllll�l+l�l�l�l+lJl�l�lUl�ll
l�lml lEllllFllGl
lkl�	lnl�l�
ldll�lll�l�l�lFl!l l�lrl@l�lHl"lClGl�l�l�l
l�l^l�
l�l�l8ltl)l;l�l?
l!l�lolIl�l"l#l#l$l�lJl�	l%l�
l&lrlKl'l5
l(l)l�lo
l@
l}lA
l�l,l�l*l4l1l+l�l�l�l�l�l"l�l,ll�
lC	l�lulrlD	l-l�
l-l�lLlvl{l�l|	lMl.l.lNlY	l6
lll�l/l0l/l�l�l1l$l�l2l%lGlRlB
l�l_l�l�lC
l�l�lD
l�l3l�l�l�l�l�l�ll.	l�l�	l4l@lwl�l5l�l6l7l�li	l�l&l0l�l8l	l&l�	l*l�l+lGlOlull#l�
l1lPlRl�lQl�l�l�l)l�l�l=l9l�lll�l�l�l�lE
lSl�lkl�l\l�	l�l�l�
lyl:l�l;l<lF
l%l=l�lRlll>ldl'l,l?lel$l�l2l3l-l�l�l4ll(lSl@lAlBl�l.lTl�lOl
l�l�l�l�l�l�
l&ll�l�l�
l<l�
l�ll�lCllDl�l�lUl�lp
lG
lel�
l�l�l�l�
lEl;lVlFl'lGl)l
l�l}	lHl*l�lWl�l�lIl�lTl�l�
l�
l�l�l�l�ll	l�lJl.lgl~l�lUl�lj	l	lllXl�l�l8l�l*l�	l�l�lKl~	l�l�l�lLllHl�
l�ll%l�l+lfl�l�l�l�ltl�lMlNl�l�l�ll	l�l 
l�l�lk	lYllYl�l�l�l*l/l�lOlR
lZlH
l�l#lIl�
l�	l�l�l5lS
l]lE	l[l\l
lslI
l+lPlQl,l�	l�
lRl�lSlTl�l,l�lUl]lVl�l�lLl-l!l�lT
l\l4lWl�llXlYlZl�l[l>lwl�l�l�l�l+l^llJ
l�l_l$l�l\l�l�llll.l]l`l�l^l_lq
l%l�l`lalll�l�
l6lglU
lblcldlal�
lqlxl�
lel
lblyl�lflhlglhl�l�l'lill�l�l	ljlrl�l
l0l	l=l�lbl|l�l�l�l�l�l�l	llhlkl�
llll�l�
lal�lclml�ll�lnl�
l�lul�l�ldlel�lslK
l/lol7l�l&l�	lJl8lplqliljlfl�l�	lgl	l�l�l(l�l`lrlsl�l�lll<lFlklfl�l�l�l�l]l�l�lIltl>l�lul�lvl�l�
l�l�l�
l0l�l-l�lwlL
l�l�	l�l�l�l�lGlal�l
ltl�l�l�
lSlKlxllylzl�l�lV
l�l�lOl�l1l�l�
l{l�
l�l�lF	lyl�l9lZ	l�l|l}l~lFl�l�l�l�
l�	l:l�llll2l�l�llpl�l;lG	l�l�l	lhl�l�l�ll7
l�l�l�llqll�lM
l�lll�lll�l�l�l�
l�l�l�
l(l8
l�lN
l	ll3l�	llO
l<ll�l�lTllW
l�	l�l�l�l�l(l�l�l�l1l�l�l�l�l�l�l�lulZll�
l�	lcl�ljlP
lpl�l�l
ll�l�l�lvliljl�l�
l�l�l�l�lQ
lKll�l�	l'l�l�l�ll�l9
ll�l
l�	lzl�l�	l
l�l�lkl�l�l�l�l�l�l2l	l�llll�l>l=lCl'l�l�l>l
llZl�l�l�l�lmlnl�l�lbll�l�	llql?l�l
l�ll�l�	l"l�l�
l?l
l}l�l�lol@l>llAl�l1l�l)l�l�l�l?l�
l�
l�ll�lxl	l�l	ll�	l3l�llhl�llll�l�l�l)l�l�
lpl�l'l�l�l�l4l�l�l
l�
l�l�l�lAl_l	lBl�lLl�l
lPlql�ll�lrlll�llX
llclsl!
l�l�llHl�l	lwl�l�l�lClDltll�l�l�l�l�lxl
ll�	l/	l�lll5l
l4lullr
l�ll_l�l�l/l�l<l�l~l7lylml�ll^l5lnlbl�
ltl�lll	l�l�l�l6l�l�	l7l�l�l�l�l�llvl�l�l�l�	l8l:
l�l�
l�l0	l�l1	l�lwllIl�l�l�l�l�l(l�llBl�l�l4lsl�
l�l�l�l�l
l�
l�l�l?lCllxl	lElHll�lFlylzlGl�ll�l�l{l�l�ll|l�l;
l}l9lmlH	l~l�lzl�l�ls
l�	l�lMl�l�ll�l�llm	l�l�lIl�l�lloll�ll�ll�l�l_ll�l�l�l2	l3	lHll*l�ll�
ll�l�l<
l�lil:l�l�
l�l�l�lAl�l�l�lR
l�l�l�lll�
l�l"
l�l�	l�l�l�l�l�l�
ll�
l�l�l�
l�l�lQll�
lY
lll�l�ll�ll{lKl�ll�l[llJl�l�lNl�lS
l�l�l�l�lI	ll�lT
l@ll�
l�l�l�
l�l@llRl�l�l�	lt
l�ll�lJlIl�l�
l�l�ll�l�
lU
l�lmll�l�l{l�	l�l�	l
l;lV
l�ll�	ll�l<l�ll�
ldl�l�l�lXl�l�l9l�l�l6l�l�lUl�l�l�l l�lLl!l=
l�l)l�l�
l	ll�l�l�	ll�l�l�
ll=l$l(lvl�ll&l�lcl�lll�l	l
l�l>l�l�l�l{l"l�l�l�l�l#l�l�l�l�lW
l�l�	l�l�l�l�	ll$l�
l%ll�l�l�l�l&l^l�l�l[	l�	l�l'll�l�ll�l�l�l(l l�ll2l\	lJl
lplpln	llu
lql)l�l�	lOl>
l�l�
l*lX
l�l�l�	l+l�l�l,l�
l�l�l�
l�l�l�l�lKl�l
l		l�lIl-l�l�l!l�l�l�l�l�l.lDl�l�lJlsl#
l�l�l�
l�l7l�l�l�l/lwl�l|lll�l�l�l"l4	l|l,lll�l�l�	l�l�ll�llll�l?lY
lPl0ll1lZ
lZ
l�
l�l�
l�	l�l�
l#l@l2ll|l�lzlll�l�lAl'l�l?
l�l	l�l8l�l�lyl�lLlVl
l3ll�	l�l$l�ll�lMl�l%l�ll�	l�
ll
l.ll4lNl�llll�
l�	l�l�ll�l�
l5l9l%ll�l�lKlQll�lxl6l7llBl�l
	lOlv
l[
l�l�l&ll�
ll�
l�llXl�l*l�l\
lPl�	l�
lNl+lw
lll�llWlCl�ll�	lQlDll?l]
l�lll^
lo	lRl	
l�lEll
llFll'l�lXllGllSl�llTlRll8lxl�	lklSl�lTl�ll l�l�l�lDl�l9l!l�l�ll�l(llLl"l#l$l%l_
l�l&lJl:lUl�l}ll)l�l

l;l<l
lEl+l'l�
l�lHl=lVl*lHlyl,l+lWl3l>l�l�l?l(lIl,l-l`
lql�la
ll�ll
l�l)l*lXl�	l+l�lOl�lYl,l-l�l.l�l/l�l�l0l.l�l�l�l1l�
lJlrl2l3l$
l	l4l�l5l6l7l�
l�lb
l�	l�l�l}l�	lfl�lKl�l�
l�
l�	l�	l8lZl9l�l:l�l�
lc
l�l:l�ll;lslJ	l@l�l�	ltl;l�
l/l<ld
ll�	l�l�lUl�l0l�le
l=l�lf
lulMl�l�l�l�l�
l>l	l[llAlLl�lil?l�	l
l�
l	l@lAlvlBlCl\l�ljl�l[
l�
lg
lDlEl�l�lFllBl�lGl�
l�lHl�l(l�lMlClh
l�lIlNlJllKlLl�l�lMl�l1l2lNl�l�ldlOldlVlDl`l�l#l5	lPl]lQlElnl
l�	l�l�l^lRl_lFlSlp	li
l�lTlUl�l

l�lVl�l�l�	l�lGl�l�l�lelHlOl�	l�lPl`lWlwlj
lXl ll3l�
lal�lIlYlJlxl7lll�l-l�
l4lk
llblZl-l�ll.lcl�l[l�	lrl;l�lKl5lLlXl�l l	l�l�l\l]l�l�l6l%
l^l_l�l�l~l`ll
lylalzl~l�l�lbl?l�lcl7ldl
l�l�lel�lzl�l�lMlflgl/lhl|l�l@ldl�llilNl�l�l�l8lfl�l�ljlkl�lOlPl�l�lllml@lnl9l�	lol�l�	l�l�l<lsll\
lQl.lRlNl@l�
l�lpllSl{lql�lAl�l�l�ll�lTl
l�l�l�l:l�l�lrl�
lsl@
lWl;ltlul�lvlwlxlyl|l�l�l�l�lzl�l�l3lQl�l�lml�lAl{l|l�l�	l�l}lOlRl�l�lglll~lZl�
ll�l�l�l�l�l\lm
l�l}l�l<lXl�l�	l�l�	l�
l�l�l�l
l�lYl�l�l�l0l�l�l�l�l=l�	l�l�l�lLl�l�l�l�lhl�l�l�lil>l>l�l/l?lUl�l�l�l�l�lel)lx
ltl�lflSl�l�
ly
l�
ln
l
ll�lTll@l�l�l�l�l�l�l�l�l�l�l�	l�l�lzlUlgl�lVl�lo
l�l�l6	lp
ltl�l�l�l�l�l�l�
lAl�lJlVlhlZl�	l�lWl�l�l�l�aBIG5_CHAR_TO_FREQ_ORDERu<module chardet.big5freq>u.chardet.big5prober41aBig5Probera__init__aCodingStateMachineaBIG5_SM_MODELacoding_smaBig5DistributionAnalysisadistribution_analyzerareseta__doc__u/usr/lib/python3/dist-packages/chardet/big5prober.pya__file__a__spec__aoriginahas_locationa__cached__ambcharsetproberTaMultiByteCharSetProberlaMultiByteCharSetProberlacodingstatemachineTaCodingStateMachineachardistributionTaBig5DistributionAnalysisambcssmTaBIG5_SM_MODELametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uchardet.big5probera__module__a__qualname__uBig5Prober.__init__apropertyaBig5acharset_nameuBig5Prober.charset_nameaChinesealanguageuBig5Prober.languagea__orig_bases__u<module chardet.big5prober>Ta__class__Taselfa__class__Taselfu.chardet.chardistributiong}a_char_to_freq_ordera_table_sizeatypical_distribution_ratioa_donea_total_charsa_freq_charsaresetlureset analyser, clear any statelaget_orderl��������llufeed a character with known lengthaMINIMUM_DATA_THRESHOLDaSURE_NOaSURE_YESureturn confidence based on existing dataaENOUGH_DATA_THRESHOLDaEUCTWDistributionAnalysisa__init__aEUCTW_CHAR_TO_FREQ_ORDERaEUCTW_TABLE_SIZEaEUCTW_TYPICAL_DISTRIBUTION_RATIOl�l^l�aEUCKRDistributionAnalysisaEUCKR_CHAR_TO_FREQ_ORDERaEUCKR_TABLE_SIZEaEUCKR_TYPICAL_DISTRIBUTION_RATIOl�aGB2312DistributionAnalysisaGB2312_CHAR_TO_FREQ_ORDERaGB2312_TABLE_SIZEaGB2312_TYPICAL_DISTRIBUTION_RATIOutoo many values to unpack (expected 2)aBig5DistributionAnalysisaBIG5_CHAR_TO_FREQ_ORDERaBIG5_TABLE_SIZEaBIG5_TYPICAL_DISTRIBUTION_RATIOl�l�l?l@aSJISDistributionAnalysisaJIS_CHAR_TO_FREQ_ORDERaJIS_TABLE_SIZEaJIS_TYPICAL_DISTRIBUTION_RATIOl�l�l�l�l�llaEUCJPDistributionAnalysisl�a__doc__u/usr/lib/python3/dist-packages/chardet/chardistribution.pya__file__a__spec__aoriginahas_locationa__cached__aeuctwfreqTaEUCTW_CHAR_TO_FREQ_ORDERaEUCTW_TABLE_SIZEaEUCTW_TYPICAL_DISTRIBUTION_RATIOaeuckrfreqTaEUCKR_CHAR_TO_FREQ_ORDERaEUCKR_TABLE_SIZEaEUCKR_TYPICAL_DISTRIBUTION_RATIOagb2312freqTaGB2312_CHAR_TO_FREQ_ORDERaGB2312_TABLE_SIZEaGB2312_TYPICAL_DISTRIBUTION_RATIOabig5freqTaBIG5_CHAR_TO_FREQ_ORDERaBIG5_TABLE_SIZEaBIG5_TYPICAL_DISTRIBUTION_RATIOajisfreqTaJIS_CHAR_TO_FREQ_ORDERaJIS_TABLE_SIZEaJIS_TYPICAL_DISTRIBUTION_RATIOTOobjectametaclassa__prepare__aCharDistributionAnalysisa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uchardet.chardistributiona__module__a__qualname__lf�G�z��?f{�G�z�?luCharDistributionAnalysis.__init__uCharDistributionAnalysis.resetafeeduCharDistributionAnalysis.feedaget_confidenceuCharDistributionAnalysis.get_confidenceagot_enough_datauCharDistributionAnalysis.got_enough_datauCharDistributionAnalysis.get_ordera__orig_bases__uEUCTWDistributionAnalysis.__init__uEUCTWDistributionAnalysis.get_orderuEUCKRDistributionAnalysis.__init__uEUCKRDistributionAnalysis.get_orderuGB2312DistributionAnalysis.__init__uGB2312DistributionAnalysis.get_orderuBig5DistributionAnalysis.__init__uBig5DistributionAnalysis.get_orderuSJISDistributionAnalysis.__init__uSJISDistributionAnalysis.get_orderuEUCJPDistributionAnalysis.__init__uEUCJPDistributionAnalysis.get_orderu<module chardet.chardistribution>Ta__class__TaselfTaselfa__class__Taselfacharachar_lenaorderTaselfwrTaselfabyte_strTaselfabyte_stracharTaselfabyte_strafirst_charTaselfabyte_strafirst_charasecond_charTaselfabyte_strafirst_charasecond_charaorderu.chardet.charsetgroupproberMCaCharSetGroupProbera__init__Talang_filterla_active_numaprobersa_best_guess_proberaresetaactiveaselflaget_confidenceacharset_namealanguageafeedabyte_straProbingStateaFOUND_ITastateaNOT_MEa_statef�G�z��?f{�G�z�?Zaloggeradebugu%s not activeu%s %s confidence = %sabest_confa__doc__u/usr/lib/python3/dist-packages/chardet/charsetgroupprober.pya__file__a__spec__aoriginahas_locationa__cached__aenumsTaProbingStateacharsetproberTaCharSetProberaCharSetProberametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uchardet.charsetgroupprobera__module__a__qualname__TnuCharSetGroupProber.__init__uCharSetGroupProber.resetapropertyuCharSetGroupProber.charset_nameuCharSetGroupProber.languageuCharSetGroupProber.feeduCharSetGroupProber.get_confidencea__orig_bases__u<module chardet.charsetgroupprober>Ta__class__Taselfalang_filtera__class__TaselfTaselfabyte_straproberastateTaselfastateabest_confaproberaconfTaselfaprobera__class__u.chardet.charsetprober!	Ua_statealang_filteraloggingagetLoggerTuchardet.charsetproberaloggeraProbingStateaDETECTINGareasubb([-])+d Bafindallc[a-zA-Z]*[�-�]+[a-zA-Z]*[^a-zA-Z�-�]?afilteredaextend:nl��������n:l��������nnaisalphad�alast_charu
        We define three types of bytes:
        alphabet: english alphabets [a-zA-Z]
        international: international characters [€-ÿ]
        marker: everything else [^a-zA-Z€-ÿ]

        The input buffer can be thought to contain a series of words delimited
        by markers. This function works to filter all words that contain at
        least one international character. All contiguous sequences of markers
        are replaced by a single space ascii character.

        This filter applies to all scripts which do not use English characters.
        lld>d<aprevain_tagTd u
        Returns a copy of ``buf`` that retains only the sequences of English
        alphabet and high byte characters that are not between <> characters.
        Also retains English alphabet and high byte characters immediately
        before occurrences of >.

        This filter can be applied to all scripts which contain both English
        characters and extended ASCII characters, but is currently only used by
        ``Latin1Prober``.
        a__doc__u/usr/lib/python3/dist-packages/chardet/charsetprober.pya__file__a__spec__aoriginahas_locationa__cached__aenumsTaProbingStateTOobjectametaclassa__prepare__aCharSetProbera__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uchardet.charsetprobera__module__a__qualname__fffffff�?aSHORTCUT_THRESHOLDTna__init__uCharSetProber.__init__aresetuCharSetProber.resetapropertyacharset_nameuCharSetProber.charset_nameafeeduCharSetProber.feedastateuCharSetProber.stateZaget_confidenceuCharSetProber.get_confidenceastaticmethodafilter_high_byte_onlyuCharSetProber.filter_high_byte_onlyafilter_international_wordsuCharSetProber.filter_international_wordsafilter_with_english_lettersuCharSetProber.filter_with_english_lettersa__orig_bases__u<module chardet.charsetprober>Ta__class__Taselfalang_filterTaselfTaselfabufTabufTabufafilteredawordsawordalast_charTabufafilteredain_tagaprevacurrabuf_charu.chardet.codingstatemachinez:a_modella_curr_byte_posa_curr_char_lena_curr_statealoggingagetLoggerTuchardet.codingstatemachinealoggeraresetaMachineStateaSTARTaclass_tableachar_len_tableaclass_factorastate_tablelanamealanguagea__doc__u/usr/lib/python3/dist-packages/chardet/codingstatemachine.pya__file__a__spec__aoriginahas_locationa__cached__aenumsTaMachineStateTOobjectametaclassa__prepare__aCodingStateMachinea__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uchardet.codingstatemachinea__module__u
    A state machine to verify a byte sequence for a particular encoding. For
    each byte the detector receives, it will feed that byte to every active
    state machine available, one byte at a time. The state machine changes its
    state based on its previous state and the byte it receives. There are 3
    states in a state machine that are of interest to an auto-detector:

    START state: This is the state to start with, or a legal byte sequence
                 (i.e. a valid code point) for character has been identified.

    ME state:  This indicates that the state machine identified a byte sequence
               that is specific to the charset it is designed for and that
               there is no other possible encoding which can contain this byte
               sequence. This will to lead to an immediate positive answer for
               the detector.

    ERROR state: This indicates the state machine identified an illegal byte
                 sequence for that encoding. This will lead to an immediate
                 negative answer for this encoding. Detector will exclude this
                 encoding from consideration from here on.
    a__qualname__a__init__uCodingStateMachine.__init__uCodingStateMachine.resetanext_stateuCodingStateMachine.next_stateaget_current_charlenuCodingStateMachine.get_current_charlenaget_coding_state_machineuCodingStateMachine.get_coding_state_machineapropertyuCodingStateMachine.languagea__orig_bases__u<module chardet.codingstatemachine>Ta__class__TaselfasmTaselfTaselfwcabyte_classacurr_stateu.chardet.compat�a__doc__u/usr/lib/python3/dist-packages/chardet/compat.pya__file__a__spec__aoriginahas_locationa__cached__asysaPY2aPY3TObytesOstrabase_stratext_typeu<module chardet.compat>u.chardet�uExpected object of type bytes or bytearray, got: {0}aUniversalDetectorafeedacloseu
    Detect the encoding of the given byte string.

    :param byte_str:     The byte sequence to examine.
    :type byte_str:      ``bytes`` or ``bytearray``
    a__doc__u/usr/lib/python3/dist-packages/chardet/__init__.pya__file__Lu/usr/lib/python3/dist-packages/chardeta__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__acompatTaPY2aPY3laPY2aPY3auniversaldetectorTaUniversalDetectoraversionTa__version__aVERSIONa__version__aVERSIONadetectu<module chardet>Tabyte_stradetectoru.chardet.cp949prober?1aCP949Probera__init__aCodingStateMachineaCP949_SM_MODELacoding_smaEUCKRDistributionAnalysisadistribution_analyzerareseta__doc__u/usr/lib/python3/dist-packages/chardet/cp949prober.pya__file__a__spec__aoriginahas_locationa__cached__achardistributionTaEUCKRDistributionAnalysisllacodingstatemachineTaCodingStateMachineambcharsetproberTaMultiByteCharSetProberaMultiByteCharSetProberambcssmTaCP949_SM_MODELametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uchardet.cp949probera__module__a__qualname__uCP949Prober.__init__apropertyaCP949acharset_nameuCP949Prober.charset_nameaKoreanalanguageuCP949Prober.languagea__orig_bases__u<module chardet.cp949prober>Ta__class__Taselfa__class__Taselfu.chardet.enums�Nu
All of the Enums that are used throughout the chardet package.

:author: Dan Blanchard (dan.blanchard@gmail.com)
a__doc__u/usr/lib/python3/dist-packages/chardet/enums.pya__file__a__spec__aoriginahas_locationa__cached__TOobjectametaclassla__prepare__aInputStatea__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uchardet.enumsa__module__u
    This enum represents the different states a universal detector can be in.
    a__qualname__aPURE_ASCIIlaESC_ASCIIlaHIGH_BYTEa__orig_bases__aLanguageFilteru
    This enum represents the different language filters we can apply to a
    ``UniversalDetector``.
    aCHINESE_SIMPLIFIEDaCHINESE_TRADITIONALlaJAPANESElaKOREANlaNON_CJKlaALLaCHINESEaCJKaProbingStateu
    This enum represents the different states a prober can be in.
    aDETECTINGaFOUND_ITaNOT_MEaMachineStateu
    This enum represents the different states a state machine can be in.
    aSTARTaERRORaITS_MEaSequenceLikelihoodu
    This enum represents the likelihood of a character following the previous one.
    aNEGATIVEaUNLIKELYaLIKELYlaPOSITIVEaclassmethodu:returns: The number of likelihood categories in the enum.aget_num_categoriesuSequenceLikelihood.get_num_categoriesaCharacterCategoryu
    This enum represents the different categories language models for
    ``SingleByteCharsetProber`` put characters into.

    Anything less than CONTROL is considered a letter.
    l�aUNDEFINEDl�aLINE_BREAKl�aSYMBOLl�aDIGITl�aCONTROLu<module chardet.enums>Ta__class__Taclsu.chardet.escproberRaEscCharSetProbera__init__Talang_filteracoding_smalang_filteraLanguageFilteraCHINESE_SIMPLIFIEDaappendaCodingStateMachineaHZ_SM_MODELaISO2022CN_SM_MODELaJAPANESEaISO2022JP_SM_MODELaKOREANaISO2022KR_SM_MODELaactive_sm_counta_detected_charseta_detected_languagea_statearesetaactivef�G�z��?Zaselfanext_statewcaMachineStateaERRORllaProbingStateaNOT_MEastateaITS_MEaFOUND_ITaget_coding_state_machinealanguagea__doc__u/usr/lib/python3/dist-packages/chardet/escprober.pya__file__a__spec__aoriginahas_locationa__cached__acharsetproberTaCharSetProberaCharSetProberacodingstatemachineTaCodingStateMachineaenumsTaLanguageFilteraProbingStateaMachineStateaescsmTaHZ_SM_MODELaISO2022CN_SM_MODELaISO2022JP_SM_MODELaISO2022KR_SM_MODELametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uchardet.escprobera__module__u
    This CharSetProber uses a "code scheme" approach for detecting encodings,
    whereby easily recognizable escape or shift sequences are relied on to
    identify these encodings.
    a__qualname__TnuEscCharSetProber.__init__uEscCharSetProber.resetapropertyacharset_nameuEscCharSetProber.charset_nameuEscCharSetProber.languageaget_confidenceuEscCharSetProber.get_confidenceafeeduEscCharSetProber.feeda__orig_bases__u<module chardet.escprober>Ta__class__Taselfalang_filtera__class__TaselfTaselfabyte_strwcacoding_smacoding_stateTaselfacoding_sma__class__u.chardet.escsm�;a__doc__u/usr/lib/python3/dist-packages/chardet/escsm.pya__file__a__spec__aoriginahas_locationa__cached__aenumsTaMachineStatelaMachineStatelTllpppppppppppppppppppppppppllppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppllllllpppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppaHZ_CLSaSTARTaERRORlaITS_MElllaHZ_STTlpppppaHZ_CHAR_LEN_TABLEaclass_tableaclass_factorastate_tableachar_len_tableanameuHZ-GB-2312alanguageaChineseaHZ_SM_MODELTllpppppppppppppppppppppppppllppppppppppppllppppppppppppppppppppppppllppppppppppppppppppppppppppppppppppppppppppppppppppppppppppplpppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppaISO2022CN_CLSaISO2022CN_STT	lppppppppaISO2022CN_CHAR_LEN_TABLEl	uISO-2022-CNaISO2022CN_SM_MODELTllpppppppppppplplppppppppppllpppppppllppllppppppppppppppppppppppllllllpppl	llpppppppppppppppppppppppppppppppppppppppppppppppppppplpppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppaISO2022JP_CLSaISO2022JP_STT
lpppppppppaISO2022JP_CHAR_LEN_TABLEl
uISO-2022-JPaJapaneseaISO2022JP_SM_MODELTllpppppppppppppppppppppppppllpppppppllpppllppppppppppppppppppppppppllppppppppppppppppppppppppppppppppppppppppppppppppppppppppppplpppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppaISO2022KR_CLSaISO2022KR_STaISO2022KR_CHAR_LEN_TABLEuISO-2022-KRaKoreanaISO2022KR_SM_MODELu<module chardet.escsm>u.chardet.eucjpproberXSaEUCJPProbera__init__aCodingStateMachineaEUCJP_SM_MODELacoding_smaEUCJPDistributionAnalysisadistribution_analyzeraEUCJPContextAnalysisacontext_analyzeraresetaselfanext_stateaMachineStateaERRORaloggeradebugu%s %s prober hit error at byte %sacharset_namealanguageaProbingStateaNOT_MEa_stateaITS_MEaFOUND_ITaSTARTaget_current_charlenla_last_charlafeedl��������astateaDETECTINGagot_enough_dataaget_confidenceaSHORTCUT_THRESHOLDamaxa__doc__u/usr/lib/python3/dist-packages/chardet/eucjpprober.pya__file__a__spec__aoriginahas_locationa__cached__aenumsTaProbingStateaMachineStateambcharsetproberTaMultiByteCharSetProberaMultiByteCharSetProberacodingstatemachineTaCodingStateMachineachardistributionTaEUCJPDistributionAnalysisajpcntxTaEUCJPContextAnalysisambcssmTaEUCJP_SM_MODELametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uchardet.eucjpprobera__module__a__qualname__uEUCJPProber.__init__uEUCJPProber.resetapropertyuEUC-JPuEUCJPProber.charset_nameaJapaneseuEUCJPProber.languageuEUCJPProber.feeduEUCJPProber.get_confidencea__orig_bases__u<module chardet.eucjpprober>Ta__class__Taselfa__class__TaselfTaselfabyte_strwiacoding_stateachar_lenTaselfacontext_confadistrib_confu.chardet.euckrfreq�Sa__doc__u/usr/lib/python3/dist-packages/chardet/euckrfreq.pya__file__a__spec__aoriginahas_locationa__cached__f@aEUCKR_TYPICAL_DISTRIBUTION_RATIOl0	aEUCKR_TABLE_SIZET0	l
l�lxltl�l�l�lHlal�l�l�l�l+l�lWlul�lhll]l�l�l�l�l�l�l�l�l�l�lvlwl�l�l�l�lmlFl!lpl�ll�ll�l�l�l�lxl�l/l�l�l�l�ll�l�l�l9ll�l�ltl�l-lyl�lKl�l�l�l�l�l�llOl�lnl�l�l�l�l�ll0l�l�l<l4l{l�l�l�l�l�lil�lrl�l�l�l�l�l�l�l�l�l�l�lXlXl�l�l�l�lYl�l�l&l�lPl�l�l�l�l�l�l�l^l�l�l�l�l�l�l�l9l�l�l�l�l�l�lQl�l"lltl�l�l�l�ll]l{l7l�ll�l{l�l;l�lul�lzl/l�l|l�l�l�l�l7l�l�l.l�l�l�l�ll�ll�llllll{llll#l|l}l�l~l�ltl8ll_l	l
lll
l!llll_ll�l�l�lll*l�lull`l"l�ll|lll�l�lllalllllll?llRl!l l/l�l�l!l"l=l�l�l#l�l$l%l&l'l(l)l,l�l'lbl$l*l�l+l�l-l�l,l�ll�l�l�l&lUl�l�l#ll�l-l.l'll�lfl/lsl�l0l�l�lll�l l�l9lel[l1l�l�llZl�l�l:l�l�l�l2l3l�lGll�llyl4l�l�l�l5l6l7l,lwl�l�lsl8l�l�l9l:ll�l~l;ll<l;l}l=l>l?lol)l�l�l@l�lAlBl�l�l2lYlClDl�l<lElFlGlHlIl%lJlKlLlMlNlOll`l>lPl�l=lQl�lRl�lSlTl;l�l�l�l�llUl�lVlWlXl4lYlllZl[l�l\l]lll^l�l�l_l"lPl�l�l`l;l�l~lHlallvl�lzl?ll�l�lbl�l�l<lcldldlelflcl0l�ldllglyl�l�lhlilsl0ljl=lkl�lll�l�l�l<lbl�l�lUll�ll�lIlmlnlollplqlrlsltlull�l�l�l6lvlwl�l*l�l]lxlyl�l�lzlZl�l-l:l�lbl
l{l|l�l&l'l�l�l5l�l�ll>l}l~lwllgl�l�l�l6l�l%l�l�l(l�lvl�ll�lwl�l�l�l�lEl�l�l�l�l�l�l�l�l�lfl�lVl�l7l�l�l�l�lBl�lNl�l[l�l'l�l�l�l�l�l�l�lSl�l�l�l�l�lel�llxl�l�l�l�l�l�l�l�l�ll�l�l�l�l�l�l�l�l�l�l�l?l�l�ll�lql�lfl�l(l)l�l�l~l�l\l�l�l�l�l�l)ll�l�ll�ll�l�l�l�l�l$ll�l�l�l�l�lll�l�l�ll~l�l�lCl�l�ll�l@l�l�l�l�l�l2l�l�lKllzlVll�l�l�l�lQlrlfllll�l�l lhl+l3ll1l�ll�l�l�llgl(l�l�l�lzl�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�lAl�l<ljll�lMlgl�l2l�l�l�l�l�l�l�l�l�lVlhll�lJl�l�l0l�llbll�l�l�ll�l�l�llYl�l�ll�ll�lal!l*l�l�l�l�l�lKlDl8llRllBl�l@l�l�l�ll�l�l�lyl�l�l�l�llXl:l�l�l#l�l�l�lil�lGl�l�lkl�l�l=l�l�l�l�l!l�l�l�lJl�l�l=l�l�l�l}l�lljll�l�l�l�l�l�l�l�l�l�l�lEl�l�l�l�l�ljlOl4l�l�l�l�l�l�l�l�l�l	lvl]l�lCl�l�l�l�l�l�l�lol�l�l�l�l
l�l�l�lllclAl�l�l�l�l�l�l�l�llTl�l�lkl�l�l�l�l�l�l3l*l�lql�l�l>l�ll�l�l�ll+llllll;l�lpllxll�l�l�llll�l�l	l�l
ll�ll
l�l�l�l�lllll�l�lll)l�ll�l�lml8l�llDll�llllll�ll�lll7lLlBl�llDll�ll�l�ltllll l!l
l"l#l$l%lRl&l'l(l)l*l�l+l,l�l,l-l.lml�l
l^l/lcl�lEl�l�l�lalml0lEl1l2l3ll�l�l4lTl�l�l�l5l�ll�l�l6l7llnl�l�lol8l9lFl�l�l�l:lGl;l<l=l>l?l@lAlBlClDlEl$lFlGl�l�l%l�l�lplHlIlJlKlLl�l�ll�l�l�l�lMlNlOlPlQlRll�lSl/lTl�lUl�lllVl�lIlHl�ll�l�l�lWl�lXl�lqlYlZl[l\l�lrl�lsl]l^l_l`llvlLlal�l�l.l�lblFl>l�l�ljlclZl�l�lBl6l�l`ldlell�l|llfl�l�l5lgl�lhl�lilHl�ljl�l�lkl�lll�l1lmlnlolplqlrlClsltlulvlwl�lxlylzl{l�l�l|l}l~ll�l�l�llll�lOl�l�l�l�l�l�ll�l�l�l�l�lEl�l�lql�llIl�l\l�l-l�l�lSl�l�l�l
l�lel�l�l�lll�lMll�lQllPlll^ll
l-lFl�l�l�ll�l�l�l�l�l�l�l�l�l�l�l�l�l�l
l.l�ltl�l�l�l�lJl�l�l�l�l�l�l�lgl�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�ll�l�l�l�l�lul�l�l�l9l	l�l�l�l	l�l$l�l�l�l�ll5l%l�lklLl�l�ll�l�l�l�ll�l�lAl�l�l�l�l�l�l�l�l�lRl�lul�l�l�ll�l)l�l�l:l�l�l�ll�l�l�l"l$lvl�l�l�lclZl�l�l�l�l�ll*lWllKl�lLl�l+l�ll�l�l�l�l�ll�l	lBl�l�l?l�l�l�ll�l�l�l�l�lMl[l5l�l�l�lnl�l�l�l�l�lCl�l'l�l�l�l�l�l�l�l�l
l�l�l�l	l�ll�l�l�l�l�lFlTl/l�l�l�l�ll8l�lul�l�l�lKl�l(lMl�llil�l�l�l�l�l�l�ll�l�lTl�l?ll�l�l�ll�llel l(l�l�l�l�l�l�l%l0lll�lOl�l	l8l	l	l	l	l	l�lll	l	l	ll�l#ll�l		l�l�lVl
lllPll lMlWl�l
	ll	l�l|l	l
	lSl�l�l�ll�l�l�l	l	l�l�l	l	l	l	l	l	l�l	l	l�l9lDlll�l�l�ll	l3l�l�l	l	l	l{l	ll�l	l	l	l�l 	l�l�l�ll�l!	lkl�l�ll�lNl�lYl�l"	l#	l$	l%	l&	l'	l(	l]l)	l*	l+	l,	l-	l.	l�l/	l�l�l>ll�l�l0	l1	l�l�l�l�l\l�l2	l�l3	l�l�l4	l5	l6	lwl7	l�l8	l�l3ll�l�l9	l:	lLll�l�l;	l�l<	l�ll�ll�l�ll�l�l�l=	l�lJl>	l?	l@	l�lA	l�lB	lC	lD	l�lE	l�l�lF	lG	lH	lI	l�l�l�l�l�l�lJ	lK	ll�lL	lM	lN	llIlO	lP	l�lQ	lR	lS	l�lT	l�lU	lV	lW	lX	l�lY	lZ	l[	l\	l]	l�l�l^	l_	l`	la	l�llb	lc	ld	le	ll�lf	lg	lUl�lxl lh	l�l�li	lj	l�ll�l4l&l�l�l�l!l�l�l�lSlyll�l�l"l
l�l#lk	l�ll	lm	ln	l�l�l�lplQl�l.lo	lUl�lOl�lp	l�lq	lr	ls	lxlt	l�lu	lv	lw	lll$lx	l�ly	l�l`lz	l{	l|	l}	l�l~	l	l�	l�	l�	l�	l�	l�	l�lCl�l�l�l�l%lyl�llol�	l�l�	l�	l�	l�	l�	l�	l�l�	l�	l�	l�	l�l�l�	l�l�l�	l�	ll@l�l�l�	lGl�	l�l�ll2l�l�l�l�l�	l�	l�	l�	lNl�	ll�l�l�l�l�	l�	l�	l�	l�	lrl�	l�lzlnl�l�l�lPl�	l#l�	l&lQl�	l�lml�	lcl�l�l�	l'l�	lwl�	l�	l�l(lll@l�l�l�l)l�l*l�	l�	l�	l�	l�l�	l�	l�	l�	l�l�l�	l�l�l�	l�	l�	lHl�l�	l�	ll�	ll�l�	l�	l�	l�l�	l�	lrl�	ll�lAl�	l�l�l�l�l�	l}l,l�l�l:l�ll�l�l
llIl�	lNl�l1l�	lWl�l�l�l�l�l�l�l�	l+l�	l�	l1l�lbl�l�	lql�	l,l�	l�l�lel�l�l_lldl�	l�	l�	l�	l�	l�	l�l�l2l�l�l�l�	l�l�	l�	l�	l�	ll�	l�l�	l�	l�l-l�	l�l�l�	l�	l�	l�	l�	l�	l�l�	l�	l�	l�	l�	l�	l�l�	l�l�	l�	ll�l7l�	l�l�	ll�	l�	l�	l�	l�	l�	l�	l�l�l�l�l�l�l�l�l,lGl�ll�l�	l�l^l�	l�	l.l�	l�lgl�l�	l�l�	l�	l�	l�l�l�	ll�ll_l�l�	l�	l�	l�l�lhlhll{l�	l|l�l�l�l3l�	l�	l�	l�l�l�	l
l
l\ll�l�ll
l
l
l
l
l
l
l�l	
l

l
l
ll�l�l
ljl
lil�l4ll
l
l
l
l
l
l�l�l
l
l
l
l�l6ldl�l/l
l
ll�l�lol
l�lRl�ll�l	l&l
lklnlzl�ll�l�l
l�l
l�l�lXl�ldllSl�l}l
l}ll�l~l�l�ll�l 
l!
lNl"
l�l�l�l�l�l�l#
l�l�lsl$
l%
l&
lflDll1l'
l�ll(
l@l)
l^l�l�l�l*
l�l+
l,
l-
l.
l/
lJl+l0
l1
l2
l�lTl�l3
l4
l5
l6
l�l7
lAl.l�l�l�l8
l9
ll"l:
l;
l�l<
l=
l>
ll�l0l?
l�l@
llA
lB
llC
lD
lE
lF
lG
l�l�l_l[lH
lI
l�ll`lalJ
l�ll�l�lK
lL
lM
lN
l�lO
l�lillllP
lQ
lR
aEUCKR_CHAR_TO_FREQ_ORDERu<module chardet.euckrfreq>u.chardet.euckrprober@1aEUCKRProbera__init__aCodingStateMachineaEUCKR_SM_MODELacoding_smaEUCKRDistributionAnalysisadistribution_analyzerareseta__doc__u/usr/lib/python3/dist-packages/chardet/euckrprober.pya__file__a__spec__aoriginahas_locationa__cached__ambcharsetproberTaMultiByteCharSetProberlaMultiByteCharSetProberlacodingstatemachineTaCodingStateMachineachardistributionTaEUCKRDistributionAnalysisambcssmTaEUCKR_SM_MODELametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uchardet.euckrprobera__module__a__qualname__uEUCKRProber.__init__apropertyuEUC-KRacharset_nameuEUCKRProber.charset_nameaKoreanalanguageuEUCKRProber.languagea__orig_bases__u<module chardet.euckrprober>Ta__class__Taselfa__class__Taselfu.chardet.euctwfreq��a__doc__u/usr/lib/python3/dist-packages/chardet/euctwfreq.pya__file__a__spec__aoriginahas_locationa__cached__f�?aEUCTW_TYPICAL_DISTRIBUTION_RATIOlaEUCTW_TABLE_SIZETlll�l�l�l�l	lRll�l�l�ll�l�
lnl�l!l�llLl,lAllsl�l�l�lllL
lS
l�ll�l�l�l�l.lNlil�ll�l:l�l�l�l?l�l�l=lNlKl�l�l�ll	l�l�l�
l�l�l�
l ll
ll�ll�
lol$l�lil�l�lcl8l�l�ll�l�l�l�l�lzl|l�ltl"l�
lel@l\l�l�	l�l�l�l�l�l�lFl�lM
lQlHl�l�lPlvl�lfl�ll�lDlT
l�l�lFlN
l�lEl�lOl�l/l�lsl�l3l<l2l�l�l&lLl�l�lO
l�l�lGl�llMl�l�l?lll`llF	l*l�lgl�	lZl�
l:l�ll�lKl�	ll�	l�ll�l�l�l`l�ll�lgll	l lql�l~l�l�lP
l�	ll�l�l�l!l�lull�l*ll�l	l�
l�l~l�l�l�l�lel�lGl^l�l�l�l�lUlCl�lBl�l�l�l�ll�l ljlol/ll�lOl2	l[l�l�l�
l&l�l�l�l�lSl(l�l�l�lpl]l�l6lil�
l'lll�lll8ll+l%l[l�l�l\l�l�l�ll�lX	l(l�l�l�l0l�l lHl�
l�
l"l!l�l+l�l1l"l�l�l�
lOlG	l�llfl1l�l�l�l�l�l�ll2l9l�lll,l�l	ll�ll�l�l}lhl#lq
lQlMl&l�lXl�l�l#l�l�l
l�l�l�ljl�l�lMl�l�l�l%ll�l�l$l�l�l'l�	l�lNlill7l�lJl�l!l�l�ll�l�lMl�l)lPlU
l�ll�l�
l�l%l�
l�
l�l l�l�
l lIl�l3	l�l�
llr
ll�l�l�l�l�lml�l�l$l�l�lxl�l�l�l�l�
l�l�l�l%l&l�l
ll�l�l�ll�l�l&l�l'l�ll'l�l�l.l�l�ll�lH	l�l�l�l�l$l#l�lDl&lAl�	l�l�l�l�l�lUlGll�l�l
lQ
lPlSl'l�l�ldl�l0lFl�l�l*l�l�ll�ll�lJll�lUll�l�lI	lR
l�l�l<l�lS
l:l7
l�
l�l	l	l9l�l}ll�	l�l�lVlPlT
ll)lCll�l�l&l�
l�	l)l�l�lm	l�l�l�l�l�ll4	l�l�l�ln	l*ll�l�ll�l�lOl�l�l�l�l�	l+l(l
l�l�l�lU
l(l�l5lYljl�
lll�lull)l�
l*l+lV
l
l=l�l�l�l�l�l�l�l4l�l!l�l�lTl,lxl�l�lell�	l�lJ	lPl�ls
l5lAlV
l/lkl�l�
llll!l	l�lAl�l`l�l�
l�l�lAl�l�
lll�l�
l�l�	l�l�l�l�l�l�lMl�
l�l�l�ll�lW
l�l�l�
lt
l�l�l+l}l�ljl8
l�l�l�l�l�l�l�l�l-l)lml�	l�lW
l�l		l�l�
l�lal�l
lPlK	l�l,l�l�l�l7l'lu
l�l{lkl�l�ll�l�
l9
l�lll�l�l�l�l�l�l�l1l�lbll�	l�
l�l�lo	l�lX
l,lQl�l�l�l�l�ll�
l�
lX
l�l�l�l5lDl�l�lll�l�l[l 
l�l�lY
l�l%ll.lY	l�l*l�l�l�
l�lRl�l�l�lpl�l�lnlclgl+ll�l'l2l�ll�l{l�lll�lml�l�l:
l�lfl
	l�l|l5	l�l�ll�lZ
l�l�
l�l�l�l�l,l�l�l�l�l;l�lIlYl�l�l[
lXl"l�l	l�l�l�l~l�l�l,l�lkl�l�l-l�l�ll�l�lDl�l�l�l>l]l�l,l�l�l�lvlLlBlil&l�l�l�
l�l�l�lGl�l�llBl�l�
l!
l�l�lul�l�l�l�l�	l lall�l�lv
lSl�l}l;
l�lDl�l=l�l0ll�l\
l(l�ll�lvl l�l�l�l�l�l.l�l�l9lHll�l�l�l]
lEl�l�l�l�l�l!l�l/l�l�l�ll-ll�lQl*l�l.l/l�l�l�ll0l3ll"
l�l*lRll�l�lWl�l�l/llbl.l�l�	ll�l�l�l�l�lRlll�l)l�l2l�l�	l�l�l�l�l�l�lZ	l�lTllw
l�l�l�l�	l�l�l�ll�l�l[	lOl�l�	l�l`l7lx
l^
l�l�l�l�l�l�l\	l�l�l�l�l�l�lgl�l�lnl�l
l_l�l~l�l�l�l0l�l�
lal�ly
l]	l�l�l�l�l�ll�l�	l;l�l�	l-l�l�lL	l�l�l�l/ll�l�l�l`l�l#l"l�ll�ll0l�
lsll�l�ldlsl�
l�lY
l�llklwlol�l�l�l�l�l1ll2l�lglplQl�lUl�lvl�l�l�llClSl�l^	l�l�l5l�l�lBl�l_l�lblNl�l�lXl�l�l�l�
l�lLlcl�
l�
l	lKlwl*lalGl3l�l
l�l�ll1l6l�	l2l6	lNl�l�ll	l3l�l:l�l\lql�l�ll-l�lll3l�
l�l�l�lxl�
l�l�lrl�l4l�
l_
l�lUl�l�l�l@l�l5l�ll�l�ll�l/l+l6ll�ll�l�l�l�l�
l7	lZ
ll�l�l8l4llCl�ll�l�lll�l`
l�l�l�l�l�lYl�l�l�l�l5l�	l{l�ll�l�l$l7llMlVl0lrl�l�l�lgllVl�l8l�l9l,lZl�l�l{l#lWl0lll$l�l�
l�
l�l4ll[l�lvl�llcl�lVlM	l$l-ll�llXlll�ldl�l�lWl[
ll�l�lllql�
ll1l�ll�lltl�ll�l	lll�
l2l�l2l:l3l l.l�l�l2l�l
l�l�ll�l�l%ll�l�lll
l�ll�lll�l
l�
l6l�l4l�l|ll�lSlll�l_	l�
ll�l�l�l`lll�l�l�	l3lll;lrllll7lYlLl;l�l�	l�	llll�lTl\l�l�ll<l�lVl5l�ll�
l�l�l�ll"lxl%ll;l8	l l�ll2lEl=l!l�ll�l^llwl�
l"l�l�llsl�l#l<lQll�lrl$ll]ll%l�l.l&ll3l5lBl�lyl'l�l�l�ll�ll>lYla
lb
l(l�
l	l)l*l	llll�l:l�l6l�l^lll�ll(l�
l+l+lllxl,l	l.lhl/l-lll�l
lVll�llhl�lzl.ll�l�l�l<l�l�l;l/l?l�ll
l�	l0l8l�ll�l5l6l�
l_l)l1l2l	l3lyl	ll�l�
ll^l4l�l�l?l$l+l\
l�l5l_lWl�llz
l6l0ll�
l]
l	l�lp	l7l�l�l8l^
l<
l�lVl9l�l6l�lIlwl}lc
l^ll
l9l@l�l
lAll�l�l�	l:lel1lllBl�l�l�l�ll�l�ll�l7l;l<l�l=l{
l�l(l`lRl1lYllIl�	l�ll�l6l�ld
l>l�l�le
l?l�lol�lqlYlnll�llllClDl{l�l�
l_
lElPlUl�l�l�l�ll�lElml�l@l�l:l�
ll
lAll�l�l�ll#
l�	lNl�
l�lBl�lClWlTlTll�l
l�lf
l;lDll&l�
l|l�l�l�ll�l�
l�l�l<l=
l�
l�ll	lVl�l�
llol�l�	lEl�
lFlll�l�l�l�l�lllDl-l8l�lGldl�	ll�
lHltl�llIlzl
llJl�
l�
lKll�l|
l�ll�l�l>
l�l�l�l�lllLl:l�	l=l�lMll?
l�l�llHl�l�ll�lNll�l�	lOlPllFlklQl9l�l�l�l�
l�	lullvll�ll�llRlSl�l�l}l
l>l�l�l�ll
l:lTl	l�lN	l�lCl�ll�lUl~l�l lWl�lGl�l�l�l,llll�lOl�l|ll�l�lOl?lVl`	l�l l�l~llwl�ll�l@l!l�l�l;lll�llWl�l"l�
lXl�lYllRlg
lull�
lh
l�
lxl=l
llZl�l<l�ll[l�l#ll=l 	l\l$ll]lHlIl^l7lO	l$
l
l_l%lvlJl�l l!lwltll`lalbl9	l&l�l"l{l�l�l�	l'lcl�ldl8l�ll�l�l[l9l�l�ldlZl�	lel�l�l�l@
l!l(l"lfl�l�ll�l#l$lTlglKll�l%l�lWlMlhll�lil�l�l�l%l�l�l�l�l�l
l`
l�lyl7lmlLljlkl�l:	l>l!l�l�l�llBl)lll|ll�l
lzl�l�li
l�lMl�l�l�
l�l�lml�lnlulq	lvl�l�
l
l*lNlolpl�llql7l.lrl�lyl�
lll�
l�lfl�l�l�lsl!	lyl�
lOl	l�l�l�l+lPlj
l�
l>l�l�l�l�llYl�lAltl�lul%
l
l�lvl�l�lzl2lwl,l�	l�	l�l�l3lQl�l�l
lxl�l6l9lk
l�ll&l6l�l�l-l
l�lRlyl�lQl9lcl�
l'l.l
lol(lBlFl?ll
l�l)lel�l�
lzl�
lSlTl�l�l�l{l/l�l�l"	l�	lbl/l�l`l�l�l0lul�lvl�l�l1l�l�
l�	l�lUl�l*l�l/lEl�lSl�l8lZl|l}lFl+ll�l!l~l2l,lFlP	l�lm
ll
l�lelsl�lCl�lr	ll�l�ll�lal3lZl%l-l�l�l�l�	l4l�l�l�lAl�l�l�
l�
lil
l�l�l�lDl.l�ll�l�	lnl�ll�l�l�
l�l�l	l�l3l5lJl0l�ls	l�
l�l�l�l@l�l�lVl�l/l�	l�l6lWlAl7lol�
l�lPl0l�l1l�ln
l�l�lalQl2l�lpl:ll�lPl�lbl�l�l�l�ll{l3l7lEl�l�l�	l�l�l|lFlGlXl�l�l�l�l�l]l�
l4l�l�l}
l�l�l�
l5l�l&l�l8l	
l�l�l�	l�l�l�l�l�lLl�l�l�l�l�
l�	lYl

l�ll�l�l4l
lBl9l8l�l�l�l�l�	lHl�
l/l3lZl[l�l�
lo
l�l�l:l0l�lnl\l�l]l�l^l�l�l�l�	l�l�l�lIl�l�l�l;l�l4l�l<l�l=l;l�	ll
l�l�lXl�	l�ll�l5l_l�l�
l�
l�l�l�l�l}l0l>lp
lJl�l�lKll�l�l&
lFl�l�l�l�
l�
l#l�l[l�l�l�lfll>lq
l�l?lr
l�l6l�l�l�ll�
l�l�l�l�ljl�l�ll�l@l-lpl9l;	l6lylAl�l�ll�	l'
l�l�ll�l�ll�lVl�l�l`l�l4l�l�l�lKl
lal�
l6l�l�l�l�ll�l"l�l�lKl�l

ll�l�l�	lYlGlol�lblflcl7lls
lplrl�	l8l�l�l�l�l�llA
lQ	l�
lCl,l
l�l�l�ll�l\lLl�lull~
l�
l�l�l9l�l�lBl�lZl�l�l
lCl�l�lljldl�l0lhlgl�lel�lMl}l7l�
l�l
l�lDl�	l�l�l�l�lfl:l�llNl;l�
lElFl�l(
l�l�l<l�l�lGlMl=lwlgl�l~lt	l?l�l�l�l
ltlml#	l�	l�l+l�l�lhl�l�l�l�ll[l�
lOl�	l�l�l�l
l�lB
l�l�l$	lt
ll�
l�lla	l�l�	l�lHll�l�l�lQl"l<	l
l�l�l-l1l�l#lu
l'l�lDl�ll�l
l�
lIl�l>lJl%	l�l�lPll
lil�l�
l=la
l�lKl�lv
l�l�l�l�l�
l�l�l�l_l�ljl�l?lEl1l�
l�
l�lkl�l8lQl�l�lll�l�l
l�lml@l
l�lbl�l�l�llRl�l�l�l5l�l�l�l�lLl	lw
llnl�l�l�l4lHll�lMl�l�l�l�ll�l�ll\l�lol�lNl]l�ll�
l�l\lx
lgl�lEl
l�l�l�l�l�l�lpl�l�
l�lql
l�l�l�l�l�lOl�l�l�lrl�lZl�lsltl�l�ll�lPlel�l�l�l�l�lol�l�l^ll}l�l�l�lzlAl&	l�l�l�l�
l�l�lnl-l�l�
lQllil
l�l�l�lRl�lul�	l�l�llBl�l�l�
ly
l�l�lvlwlBlhlql�l�l�l<l�l*lilSl"lTlCl>l)l
lxlUl�l�l�l~l�l�l�lzl�lVl�l�l�l�lC
l)lql�l�lWl
	l�l�l�lDl�lElTlFlpl�l�l#l#lyl�l�
l�l�lGl�lz
l�ll�l�l�	l�l�l�lSl�lXl
l�l�l�l�lu	l
l=lHl�l�l_l�lRlll�l�l�lwl�l�lYlzl{lql�ll3l�l5l�l
l�l{
l�l�l|l}lSl~l�l
l
l�lZl[l�lll�l�l`l�lFl�l]ll�lnl�l�lIl�l
ll�l�l�l�l�lGlTlJl�lKlzlSlrl\l)
ll
lv	l�l5l�l�ll�
lb	l�l�ljl�l�l�l�l�
l�l�l]l^l�l�l�lcl�l�l�ll�
l�l�
lal:l1l�l�l�l�lAlhllal�
l6l�l�l�llb
l-l�l
lHl_ll�	l�l
l�l�l�ll�l�l�l|
l�l*
lfl�l	l�ll�
lD
ll
lLlWl�lllUll�
ll�l$l�l
l
l�lNlllR	lkl�lE
l�l�lllMl�lS	l'	ll`l�lsl�lF
ll�lal}
l�l�
l(	ljll	l~
lVlBl[lblWl�l�lbl
lIl�lc
ll
l�l{l�l�l�	l�l�	lcl�
l�	lldl
l�
l]l�l�l�l=	lell�lll�l�
l�l�l
lNl	l�l�lflgl�
l�
l�
l�lhlllll�
l=l�lXll�ll�l�l�l�l�ld
l�lHlCl�
lil�lTlWl�
l
l�l9l�l�	lNl�lKlEljl4lJl�
lYl
l�lG
l	lkll�lhlOll�
l�
ll]lPlZl�lll�lQl[lkl�lmlnlRlolc	l�ll�l�l�lSlXllll\l+l�l�l�l�lIlTlUlUl�ll
l�lll�
lDllllpllql
lkl�	lml�l�
lKll�lll�l�lVl8l�
l l�lrl@lWlrl�
lClGl�l�l�l
l�l^l�
l�l�l8ltll:l�l
l!l�lnlsl�l"l�
l#l$l]ltl�	l%l�
l&lrlul'l+
l(l)l�le
l
l}l
l�l�l�l*l4l1l+l�l�l�l�l�ll�l,ll�
l>	lXltlrl?	l�l�
l-l�lvlul{l�lw	lwl�l.lxlT	l,
lll�l/l0l�l�l�l1l�
l�l2l�
lGlRl
l�l^l�lYl
lZl�l
l[l3l^l�l�l�l�l�l
l)	l\l�	l4l@lvl�l5l�l6l7l�ld	l]l�
l�l^l8l�l&l�	ll�ll9lylulll�
l�lzlRl�l{l�l�l�l(l_l�l<l9l�lll�l�l�l_l 
lSl`lkl�l[l�	l�l�l�
lxl:l�l;l<l!
l$l=l�l|ll�l>ldl�
ll?lell�l�l�ll�l�l�ll�
l}l@lAlBl�l.l~lalOl
l�l�l`lbl�l�
l%ll�l�l�
l;l�
l�ll�lCllDl�l�ll�lf
l"
lLl�
l�l�l�l�
lEl;l�lFl&lGl�
l
l�lx	lHl)l�l�lcl�lIldlTl�l�
l�
lel�l�l�ll	l�lJllgl~l�lUl�le	l	lll�lflal8lgl�
l�	lblhlKly	l�l�l�lLll:l�
l�lll�l*lMlil�l�lcltl�lMlNl�l�l�l�l	l�l
l�l�lf	l�l�lYldlel�l*ll�lOlH
l�l#
l�l#l;l�
l�	l�l�l�lI
l\l@	l�l�l�lsl$
l�
lPlQl�
l�	l�
lRljlSlTl�l+l�lUl�lVl�l�lLl�
l!l�lJ
l\l4lWl�llXlYlZl�l[l>lwlklfl�l�l+l�ll%
l�l�l$l�l\l�l�llll�
l]l�lll^l_lg
l%l�l`lalglll�l�
l�lNlK
lblcldl�l�
lclwl�
lel�lblyl�lflhlglhlhl�l'lillml�lz	ljldlil�ll	l<l�l�l|l�l�l�l�l�l�l�llOlkl�
llll�l�
lal�l�lml�l�l�lnl�
l�lul�lnl�l�l�lel&
l�
lol�l�ll�	l<l�lplqlPlQl�ljl�	l�l	l�l�l(l�l_lrlsl�l�l�ll<lElRlfl�l�l�l�l]l�l�lIltl=l�lul�lvl�l�
l�lol�
l�
lkl,lllwl'
l�l�	lml�l�l�lFl`l�l�lfl�l�l�
lSlJlxl�lylzlnl�lL
l�lplOl�ll�l�
l{l�
l�l�lA	lyl�l�lU	l�l|l}l~lFl�lql�l�
l�	l�l�ll�lll�l�llpl�l�lB	l�lol	l�l�l�lpll-
l�lrl�l�lqlql�l(
l�lrl�l�l�lsl�l�l�l�
l�l�l�
l(l.
lsl)
l�ltll�	ll*
l�lul�l�lTlvlM
l{	l�l�ltl�l'l�l�l�l�
l�l�l�l�l�l�l�lglZlwl�
l�	lcl�ljl+
lpl�l�l�lxl�l�l�lhl�l�l�l�
l�l�l�l�l,
l=ll�l�	llul�l�ll�l/
lyl�l
l�	lylvl�	l�l�lwl�l�l�l�l�l�l�l�
lzl�l�ll�l>l�lCl'l�l�l�l{llZl�l�l�l�l�l�l�l�lall�l�	l�lql?l�l
l�l|l�l�	l"l�l�
l�ll}l�l�l�l�l=llAl�l1l�l)l�l�l�l?l�
l�
l�ll�lxl	l�l	ll�	l�
l�l�lhl�lSl�l�l�l(l�l�
l�l�l'lxlyl�l�
l�l�l
l�
l�l�l�l�l_l	l�l�l>l�l}lPl�l�l�l�l�ll~l�l
lN
llcl�l
l�l�l�lHl�l	lil�l�l�l�l�l�ll�l�l�l�l�ljl�l�l�	l*	l�l�l�l�
l�ll�llh
l�l�l_l�l�l/l�l<l�l~l7lklTl�ll]llUlbl�
ltl�l�lg	l�lzl�l�
l�l|	ll�l�l�l�l�l�l�l{l�l�l�	ll0
l�l�
l�l+	l�l,	l�l�l�lIl�l�l�l�l�ll�llBl�l�l4lsl�
l�l�l�l�l�l�
l�l�l?lCl�l�l	l�lGl�l�l�l�l�l�l�l�l�l�l�l�l�ll�l|l1
l�llmlC	l�l�lll�l�li
l}	l�l?l�l�ll�l�l�lh	l�l�lIl�l�l�lVll�l�l�l�l�l�l^l�l�l�l�l-	l.	l�ll)l�l�l�
l�l�l�l2
l�lill�l�
l�l�l�lAl�l�l�l-
l�l�l�l�l�l�
l�l
l�l�	l�l�l�l�l�l�
l�l�
l�l�l�
l�l�lQl�l�
lO
l�l�l�l�ll�l�lzlKl�l�l�l[l�lJl�l�l@l�l.
l�l�l�l�lD	ll}l/
l@l�l�
l�l�l�
l�l@llRl�l�l�	lj
l~l�l�lJl�l�l�
l�l�l�l�l�
l0
l�lml�l�llml~	l�l	l�ll1
l�l�l�	l�l�ll�l�l�
ldl�l�l�lXl�l�l9l�l�ll�l�lUl�l�l�l�l�lLl�l3
l�ll�l�
l	l�l�l�l�	l�l�l�l�
l�ll$l(lvl�l�l&l�lbl�l�l�l�l�l�l�ll�l�l�l{l�l�l�l�l�l�l�l�l�l�l2
l�l�	l�l�l�l�	ll�l�
l�l�l�l�l�l�l�l^l�l�lV	l�	l�l�l�l�l�l�l�l�l�l�l�l�ll2lW	l�l
lWloli	llk
lXl�l�l�	lAl4
l�l�
l�l3
l�l�l�	l�l�l�l�l�
l�l�l�
l�l�l�l�l�l�l�l	l�lHl�l�l�l�l�lllll�lDll�lIlsl
l�l�l�
l�l l�l�l�l�lwl�l{lll�ll�l�l/	lnl,llll�l	l�	l�l�l
l�llll
ll4
lBl�ll�lP
l5
l�
l�l�
l�	l�l�
l�l	l�ll|l�lzlll�l�l
l'l�l5
l�ll�l!l�l�lyl�l�lVll�l�l�	l�l�l�ll�l�l�l�l�ll�	l�
lll-ll�l�l�ll�
ll�
l�	l�l�lll�
l�l"l%ll�l�lJlCll�lxl�l�lll�l	lll
l6
l�l�lll�
ll�
l�llXl�ll�l7
ll�	l�
lNllm
lll�l lWll�l!l�	ll
l�
l>l8
l�l"l#l9
lj	lDl�l�ll$l	
l%ll�
l�l�lXl&ll'lEl�l(lFll)l�lxl�	lkll�ll�l*l+l�l�l�lDl�l�l,l�l�ll�l�llKl-l.l/l:
l�l0lJl�ll1l|l�l�l�l�l�l�l�lEl*l2l�
l�ll�ll�lHlxll�ll3l�l�l�l�l3ll�l�l;
lpl�l<
ll�ll�l�l4l5l	l�	l6l�lOl�l
l7l8l�l9l�l:l�l�l;l�l�l�l�l<l�
llYl=l>l
l	l?l�l@lAlBl�
l�l�l=
l�	l�l�lol�	lfl�ll�l�
l�
l�	l�	lCllDl�l#l�l�
l>
l�lEl�l�lFlZlE	l�l�l�	l[l$l�
l�lGl?
ll�	l�l�lGl�l�l�l@
lHl�lA
l\lLl�l�l�l�l�
lIl	lll�ll�lilJl�	l�l�
l	lKlLl]lMlNl
l�ljl�lQ
l�
lB
lOlPl�l�lQl�
l�l�lRl�
lSlTl�l(l�ll�lC
l�lUllVl�lWlXl�l�lYl�l�l�lZl�l�ldl[lclHl�l_l�l#l0	l\ll]l�lnl

l�	l�l�ll^ll�l_lk	lD
l�l`lal�l�lbl�l�l�	lcl�l�l�l�ldl�ll�	l�llldl^lE
lelll�l�
ll�l�lfl�l_l7lll�l l�
l�lF
lllgl-l�ll!ll�lhl�	lql;l�l�l�l�lXl�l l	l�l�liljl�l�l�l
lklll�l�l~lmlG
l`lnlylpl�l�lol>l�lpl�lql
l�l�lrl�lal�l�l�lsltl"lul|l�l?ll�llvl�l�l�l�l�lel�l�lwlxlyl�l�l�l�lzl{l@l|l�l�	l}l�l�	l�l�l%lsllR
l�l.l�lMl?l�
l�l~ll�lbll�l@l�l�l�ll�l�l�l�l�l�l�l�l�l�l�
l�l6
lIl�l�l�l�l�l�l�l�lcl�l�l�l�l�l�l�l2ll�l�lml�l@l�l�l�l�	l�l�lNll�l�lflll�lZl�
l�l�l�l�l�l�l\lH
l�ldl�l�lJl�l�	l�l�	l�
l�l�l�l�l�lKl�l�l�l#l�l�l�l�l�l�	l�l�l�lKl�l�l�l�lgl�l�l�lhl�l>l�l.l�l�l�l�l�l�l�ll)ln
ltl�lll�l�
lo
l�
lI
l�l�
l�llql�l�lrl�l�l�l�l�l�lp
l�l�	l�l�lzlll�lUl�lJ
l�l�l1	lK
ltl�l�l�l�l�l�l�
l�l�lJl�llLl�	l�l�l�l�l�l�aEUCTW_CHAR_TO_FREQ_ORDERu<module chardet.euctwfreq>u.chardet.euctwprober@1aEUCTWProbera__init__aCodingStateMachineaEUCTW_SM_MODELacoding_smaEUCTWDistributionAnalysisadistribution_analyzerareseta__doc__u/usr/lib/python3/dist-packages/chardet/euctwprober.pya__file__a__spec__aoriginahas_locationa__cached__ambcharsetproberTaMultiByteCharSetProberlaMultiByteCharSetProberlacodingstatemachineTaCodingStateMachineachardistributionTaEUCTWDistributionAnalysisambcssmTaEUCTW_SM_MODELametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uchardet.euctwprobera__module__a__qualname__uEUCTWProber.__init__apropertyuEUC-TWacharset_nameuEUCTWProber.charset_nameaTaiwanalanguageuEUCTWProber.languagea__orig_bases__u<module chardet.euctwprober>Ta__class__Taselfa__class__Taselfu.chardet.gb2312freq/�a__doc__u/usr/lib/python3/dist-packages/chardet/gb2312freq.pya__file__a__spec__aoriginahas_locationa__cached__f�������?aGB2312_TYPICAL_DISTRIBUTION_RATIOl�aGB2312_TABLE_SIZET�l�l�l�l<	lTl�l	lQl�l�
l�
l�l�l<lwl�l9	l�l�	l�l�l�lZl�l�lql�l�l�
lW
lyll�lelol�lv
l�l�l�l�l�lllLlBllQ
l�l�l�lQl�l�lEllfl�ll�ll�l�l�ldl(lyll�l,l	l�l
lElel�l�
lWlRl�l�l|	lR
l�l�
l�l
lX
l�
ljlEl�ll+lPll�l�ll�ll;l�lml�lll�l�l�l�l�llelHl�l�l�l�l^lkl6l�l"lFl�l�
l�
l�
l^	l�l�
l�l�l�l?l`lul$l1l�
l�l�l lUl�l1l�l�lglll�ll		l�lGl�l2l�lq	l�l lPl�lL	l�l�l�lly	ll�l�
l�lMl�lkl�l4	l�ll�l�l�l
l�	l@	l`l�l5l�l�lN
l�l7l3l�lnllulGl&lblhl0l�lMlNll�	l
lY	l�
l�l�	l
l�l�l�
l&l�
lQl
l7l^lhl�l�lJl�lPl�l�l�lrl�l�l�ll�l�lT	l-lGl,lull�	l�l$ll�l<lBll$l>ll�lxlLlWll�lnl
l�lTl�lZl�l�
l�	l{ll�l�	l�lll�
l?l�
l0lbl;lDl�ll�l�lClSl�lUl>	l|lgl�l�l�	l�
lKl�l

l�l�l�l%
l5
l�l�ll�lll�lhl
ll�l?l�ll lUl�l�l�l�	l�l*l<
l�l�
l�l
l�l
l�l�l�
l�l�
l!	lX
l�l�l�	l�lQlgl�l�l�l�	l�lrl�
l�l�lql�l�
l�lz
l�l�	l3ll�l�l�l
l�
l]lclzlll7l�l_ll�lCl�l&lalHl|
lll
l�l=l�l�lIlPl�
l�l~
l8l`l�lw	l�l�
lTl�l�
l�l�l�l�l�
l�ll�l�l�l[lql�ll�	lgl�l|lCl	l�l�lNlIl�l�l5l�
l(l�l/lHlK
l
l�lll�l9l�lIl�l�l|l�l�l�l�
l�llWll�l�l�l^l~lll�l�	l�l=lXl�l3l�
lIl�ll�
l�l�l�l�l3lrll�l�loll�l�l{llilCl�l!lHl�	l�l�l�lfll=
ll1l[l�l|lDll%l�ltl�l�l�
l�l l�l.l�lllyllTl�l�l9
l�
ll#l�l�lJl�lnl�ll�l
l�l>lBl"l�l�lal�l�lMlKl�llWl�l�	l�	l!
lr	lFl+	l�
l
ll�lx
lHlJl�l�l�l�l2lKl�lR
l$ll9l�
lt
l�l�
l�l�l�l�l�ll�l�ll�l�l%l~l�
l`	l�l�l�l�l'lvlll�l�l|ll'll�ln
l*l�l�l�lFl�l%l�l)l~l�l
l�l�lJl&l�l
l!lDl�lwll[lll�	l�l	l'	l�	l�lkll�l	l�
l�
l�l�ll�ll�l�lh
lBl_l�l?llglhl�l'l�l�l�l�l�ll�l�l�ll�l�l5l]l�ll�l�ll�l�l�l�l1	l�l)la	ll�l�l�l;	ll�l_l�l�lQl/lu
l�
l�
ljl[l�l}l�l
l�l�l�	ll�l�lQl^
l�lGl�lzl�l�l�lVlOl�ll�l�l�l�lmlul�	l6l�l�l-l$l�l�lRl�l}	l
lplrl]
l�
lDlll�l�l�lilll�l�ll1lnl�l�lltlYlG	l�l�l/l|ltl0l�
l�l�ll�l\l�
l�l�lvl�l�l�lcl�ll�l�
l~lAl"l�l"	l!l8lCl8	ll�	ljl�
l1l�lll>l�
ll]
l�l�
l~l�lLl(l�l�lKldllvlDl�l�l�l%l�	l�l�l�	l,ll2l�l�
l�l�ljl-l.l�lmlKll�l�lol	l;l	l�l�ldl@lal	lM	l1
lLl@l2l�lwl�ltlQl
l/l�l l�l~l�l�l�l�l�
l/l�l�
l_	l#l�lOl�lOlGl�l�lkl[lOlol�l�l-
l
l�ll�	l!l�l�lIl�l�l�l{lrl�l.lhl�
llT
llll'lL
lal�l�
l@l�l�l�l�l�l�
lTl/
l�ll�l�ll�lMl�li
lll�ll�
l{l8l#l�
l�l�l9l�lSlRl�	lwl�lZl�l0
lElglgl�l�l
l�lLl�l�lpl�l�lSl
l�l�l�l�l�	l@l�lI	lLl;
lOlql�l�l)	ll:lFl�l5lJldlA
l�l
l)
lElLlYl�l�l�l�
lm	l�l�l�l�l�l�lcl�lRl�l!l�l�l�l�
l�l(l�l�l]lIl�l�
l�	l�lel�ll�l�l�l�l�l`l�ll�l�l
l�l[l�lC
l(lPl,l�l}lO	l'lLl\
l�
l�ll�l�llZl�l�lsl'l�	lUl�l�l�l�lN
ll�l�l�
l�l�lMl�l�l�l�l�l�l�l�lil�lgl'l�l�l	l�l
l�lPl0ls	lil�lp	l�	lnll�l�ll\l�
l�l�l�
l!lhl�l�lml(l&l
lCllBl)l5	l�l�l�ll�l�l
l�l�l>l�l�l�l�ll�	l�l{lNl�lllEl3llJl#l�lcl�l�
ll$
l�l5l�lxll]l�l�lkl�l�l�l�l�lP
l�l
lllrl�lLl�lzldl�l�l#l�
ll�l[lSllhllGl�l�ll�l�
lUl+l�	lyl�lwl"l�lVl2
l&lzl�	l�	l�lJ
lP	l�	l�l�l�l�l%	lZl$lolTlKl1l�
l�l`lVl�ll�ldl�l�l�l�l+l�l�lAl�l�l�l�l�l$l�l�	l_l3l\l�l�l�l�l�lbl�lfl�l�l�l�l�
lAlnll�lxl�lFl�
lOl[l�l�l(l�ll
l#l7l2	lxllf	l�	l�
l!l6l{
l�l�lYl�ll�l+l�l�l�l�l l�l�l�l�	l	lKlel�l�l�
lTl$l�l�llhll	lRl�l�l"l�l�lZl 
l_l�l@l�lall�ll3
l�
lkl)ljl�lllel�l
lAl^l�l
lW	l�l�lhl:
lz
l)
l�l|l�l�ll�ll8ljl�l�
ll�l3l�	l
lzl�lplyl�l�l2lolD	l=l�l.l�l9lalfl�l*l_l�l	l*l�ll�
l�
l�l�l-ll�
l}l�l�
l�l�l*	l�
ltl�ltl6
lql�l�l�l�l�l�l�lSl 	l�l�l!l)llyl�
l�lllj	l�l�	l�lVlIl�l�lg
lllLl�l�l�lplDl�l�l�l�l%l�l�lMl�l�l�l$l�l�l�lE	l"lU	l�le
l	l|l�	lQll�l�l�ll�l�
l1
l�l�l�l�l$l l]l4l&l�l�lzl�l�l`l�lwl�
llll�
l)l%
l&l�l�l�l*l�l�l8l2l>
lSl
l�l�l1l#l�l�l
l�l#l	l�
l�l�ll�lF
lll,	l>l+l
ll�lZl3lql�l�
l$l�l�
lVl�	l;l�l�lNl�lmlKlWl�l�l�l5l�
l�	lRl4l�lIllDl�l�l�l�
l�l�
l�l�l�ll%lKl|ll�l�
l�l�l�l�l9l�ln	l�l�l�
l-l3l2
lplll?
l�l~l�l�l�l�l�lCl�l[l�l�
l�l�l�l3	l>l�lll
l`lx	l�l�l�l�l#
l�l�l�l0l�l�l�l�	lL
l�l�lQl�lRl�l?l(lml�l`
l�l3ll�ll&
l�
lllslDl�l0	lb	lfl@l�	l�l�l�
ll=l�l
l<l�l�l�l�
l�l6ll�lsl�l�l�lSl�l�l�
l8lZ
l�l�l�l�l�l�l�ll�
l�l�
l�ll�lNl�	l�l
lLl�
lJ	l�l�l�	lbllgll�l[
l�l�ll�ll~l�l�	l�	l�l�lfl�l�lll�
ll`l4l=	l�l�l�lll?	l�lcl�ll�llil�l�l�l�l�l�l�l�lwl�l�l�l%ll�ld	l^l+l�l�l�lZl�lFlI
l�ltl�l�	l/l�	ll�lyl*
lsl&l+ll�l)ll�l�	l�l�ll�
l�le	l�l�lQl]	ll	l_l7	ll0lclul�l�lLlkl
l�l�l�l�l#ll�ll�l�l�l�l?l�l�ll�
lnl
l�l�l�l	l�l�l�	lHl�lYl�lu	l�l�
l�	l�lJl�l_l_l&l�l�ll�l�l�lZl%l�l�	lsl�lSllllVl�l�l�l�l�l1l'l�l�lFl\l
l|l�	lWl�l�l|l�lSlWl�	l*l	lRlllPl#l�ll-lq
l�l�l	l�l�l4l�l�l�l�l�lal�l�ll�l@
l�lXlil%l�l�l8
l3l,l�l}l�l�l�ldlxl�	l�l#	l�l6l�
l�
l.ll�lAl�
l�lr
l�
l�lRldl�ll+
l�l�l�l�
l{l{lHl�	l
l�l�l�l�l�lcl	l
l�l�l�l,l�lI
l�lcll�l�l�l�l=l�lJl.l,l>lll�lLlel]l�l�
lCl�l�l�l*l;l
l�l l�lpl�
l�l�lRl�l9l�
l�
ll�
l�l�l?l:l�	l�l�lQl'lsl�lwl[l�
l�l-l�
l)l�l�lMl�l�l�l�l]l}l6l@l
llUl�l�l�l/l�l�ls
l�	l�l�lk	l?l�l,
l=
l1lMl�l�l�l/lS
ldl�l�lo
l6	lklul�l�l�lWl{llxlWl�l�ll�l�lxl^l�l�l[	l+l7l:l�lUl�l�l!l�l�l�
l.lHlTl�lYl�l�l	ll@l"lClsl	l�	llG
lbl�l7l~l.
lUllql�	l�l�l�l{l�l�l�lYl/l�
l�l�lAl�
l�l*l:l8l'l�l�l�l�llAl_l0l�l�l�llil�lKl�
l�l�ltl*l�l�l�
l�l�l�l�l�	l�
l�l�lDll�ll>l�l�lvll

l�
l'l�lVl�l�l�
l�l�lklll\ll�l�l�l!ll�l*lU
l�l�l�l�llzl�l\lf
l�l�l�	l
l�l�l�l�l�l�l�l�l�llB	lll�l�l�l{ll=l�
l�l&l�
l�lVl�	l�l"l!l�
l�	l�l�l�
l(	l=l�l�
l�
l�l9ll�l4lal�l�l-lQ	l�l�
l�l�
lml�l�l�l�lCl�l�l7l}lqlDl4l�lull�	l�l�lvll�lF	l�lula
l�lHlol�
l
	lllKlA	l�l�l�	lzl4l�	l!
lH
l�l�	l�l5lljl�l`l�l�
lBl:lOlal�l#l�l�l�ldll�l(l�
l&
l�l^lmlg
lE
llo	l�l(lGl$l@l
lIll�lAlll`lXll7l�l/l�l$l�l�l�lhl�l�l�l�	lUl"lTll�l�l�lml�l�l!ll�l�ll�l l�lMl�	l�l�l�l�	l2lql�l�l9l�l�l�l�l�ll�l/l�l�l�llpl@lX	l�ljlli
l^
lbl�
l�lnllvll�l�lolol�llvl�l�l0l�l9l�l$	l�lflSlzl
llDl{l�lXl�ll�lVl3lYl
l�l�
lAl�l�l�l�l�lqlUl�
l:	ll2ljl�lll{	l�l�	lFl�l�
l�	ll	l�l�l�lclilR	l;lklhl�ll�
l�lYlOlxl�lzlZl<lv	ll�
l
l�
l�lIl�l�l4
lMl�l�l�l�lbl�ll�ll�l�l�lCl�l�
l�l�lOl�l8l�l�l�	l.l]llVlc
l�	l�l�l
lH	l�lTl�l�l�	l�l>
l
l�l�l3ll�l�l,l�l�lfl�l�llllTlWlHl.l'l>lpl�l�l�l"l�l�	lJl�l�
l�
lvl2l�l�l	lxl	l2l�lgl l4l�l�l�
l�
l�l�l{
lz	l�l�	l�
l�l�l�	l�l�ll�l�l?ll�l�l�	lJl�l�l�l�
l�	l8l�l�lElj
l\l�l8l8
ll ll�ll`l�l>lblSll�l�l�l�ll�l0l�l�l�lEl�l�ldl�l�l�l1l�l�l�lnl@l�l�l�lTll�	l�l�lQl�lCl�l�lKl;lkl�l�l�l�l�l_l\	lellwl�l�ll�lMl�l.	lrlall�l�
l�l�l�
l�l�l�lgl�l�l'l�
l�lll�	lTll�l4lol�l�	lXlyl�lxll�	l�
l
lU
l^l:l�l�l�l�ll"l#l�l�lll�	l�l�l�lNlUl�l�lpll"
l-l�l�	l�l�l:l�l
ll�	l�l�l�l�	l�l�lWl
lG
lLl�l�
lGlwlol�l�llMlrl�l�ll�lQ
l�lIlNl%l
lXlll�l7
l�
lal�l�ll�l�	l'
lilhl�l}lNlyl?ltl�l�lDl�l�l�l�l�lll�l�l�l	ll�lelJlsl2l*lyl�l�l�l�l�ll�lql�l�l5l}lsl$l�l�l�l5
lBl�l�l�l#ldlsl}l�l~l�llb
l�lO
l/	l]l�l�l�	l]l2l�llfl7l�l�lOl

lRll#
l	l[l�lEl�llf
lS
l�	ldlFl�l�l�lC	lV
l>l�l	l�lBl�ll	l1l6lml�ll	l�l�l�l�lp
l�ll�
l�l<lzl�
l|
lXl�l�l�lslel]ll�l�l
l�
llOl�l+l�	lll�l�l�l:l�	lAl�ll�l�l�l(
l�
lmll4lPl�l	lnl�l�
lolol�l�lmllylll8l	l�l<l�l�l<lc	lCl�l�l&lwl
l�	l$l 
l9l&l�l�l)l`l�l�ll�l�lGlblEl�l:lQlolFl�
l�l�l�	l�
lFl|l;l�
l�ll3l4l%l�l:l�	lcl�lpl6
l\lCl�l0l9
l�l�l�l�l�l~	l�ll"lhl�l�l�l�	l)ll�	l�
l�l�l*
l�ll
l
l%l�l	l�l�ll�
l.l�l�l9l	l�l�l�
l�l�l	l�l"l!l�l,
l�lg	lJlglF
l�ll�l�
l�l;li	lZlEl^lA
l�llll5l�l�l�l4l'
l�llkl	l�l�	l2l�l�
l�l	lXl7ll�l�
l{l�lBlxl=lel(lll�l�l'l�l�ll�l�ll�llll�lD
lilkll�l�l�l-l,l�
lel7
l�l�l�l�ll�l�lnl}
lpl7ljl�l�	l�l9l�l�
l�l�l�l�l0lPl�l�l�l�ll�lO
l�
l�l�	l�lUl
ll�l<
l�l�l�
lJl�ltlNl�l)ll.l�l�l*llAl�lr
l]l)l�ll�l�lGl�l_
lplk
l�l�l
	l%l
l�l�
l�l>lbl_l^l?ll:lYlDl%l�l�l�
l�ll�l�llYl�l�
l�l�ll�l�ll
lAl�l�	l�
l�	lDlBl�	l
l�l	l@
l(lv
l�l�l�lgl�
l�	l}lvl�l�l�l�
l�ll�l�ll�l�ll�ll�l�l l-l~l�lyl%l�	l�
l_l�l�ll�l�lljlMl�l�lGl+l�	ll�l�l�	l�l�ll3
l;l
lGl)l�l
l�l�ll�l�ll�l
l
l�l,lIl�	l�l�llXlAl\l�ll�lPlvl�l�	lVll=l�
l�
l6l<l�lXll�
l	ll8l-	lY
l�l�l�l�l�l�l�lcl�l�l�l9l�	l-
lul�l	l�l�
lRl�
lll6l�l�	l�lh	l}ll?
lw
ll�l�	lal(l�ll1l�l�
l�l>l�l�l�l�l�l]l�
lXlrlPl0l,ll+ljl�l`l�l�l�ll.lll
l�l&	lWlB
l�ll|l7lUl�l�	llWl�lYl�l�
l�lw
l�
ll�ll�ll�l�lul�lbl�lq
l�l�lbl�l�l�l�l=l$
l�lNlJl�l�lUl�ll�l�	ll�lilKl,l�l�l4lrl{l�llHl�lpl5ll�l=l�	l�lEl9l�l;ll<ll5l�
llil�l\ll�llpl�ll�l�lrl�lNl�ll^l�l�l�l�lKll�l*ll{l+
l�	l�l*l8ll�ll	ll�l�l�lj
ll@ll	l6l�l2l8l�l�	l�ll�l'l�l�l�lB
l�lll\l�l�lSlV	ll~l�l�l�l�l�l�
l�lVl�
lzl�l^l	l�l�l�l_
l}
lGlql�lIl�l�l�l8ltlhlS	l�l}lRl�	l9l�lSln
lPl�lBlll�lsl�lXl}lfl�l�ll�l�l�l�l�l�l�lnlIl^l�lTl�lxl�lrl�l�l_llbl�lOlPlQlRlSaGB2312_CHAR_TO_FREQ_ORDERu<module chardet.gb2312freq>u.chardet.gb2312proberL1aGB2312Probera__init__aCodingStateMachineaGB2312_SM_MODELacoding_smaGB2312DistributionAnalysisadistribution_analyzerareseta__doc__u/usr/lib/python3/dist-packages/chardet/gb2312prober.pya__file__a__spec__aoriginahas_locationa__cached__ambcharsetproberTaMultiByteCharSetProberlaMultiByteCharSetProberlacodingstatemachineTaCodingStateMachineachardistributionTaGB2312DistributionAnalysisambcssmTaGB2312_SM_MODELametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uchardet.gb2312probera__module__a__qualname__uGB2312Prober.__init__apropertyaGB2312acharset_nameuGB2312Prober.charset_nameaChinesealanguageuGB2312Prober.languagea__orig_bases__u<module chardet.gb2312prober>Ta__class__Taselfa__class__Taselfu.chardet.hebrewprober�`aHebrewProbera__init__a_final_char_logical_scorea_final_char_visual_scorea_preva_before_preva_logical_probera_visual_proberaresetlw aFINAL_KAFaFINAL_MEMaFINAL_NUNaFINAL_PEaFINAL_TSADIaNORMAL_KAFaNORMAL_MEMaNORMAL_NUNaNORMAL_PEastateaProbingStateaNOT_MEafilter_high_byte_onlyaselfais_finallais_non_finalaDETECTINGaMIN_FINAL_CHAR_DISTANCEaLOGICAL_HEBREW_NAMEaVISUAL_HEBREW_NAMEaget_confidenceaMIN_MODEL_DISTANCEZa__doc__u/usr/lib/python3/dist-packages/chardet/hebrewprober.pya__file__a__spec__aoriginahas_locationa__cached__acharsetproberTaCharSetProberaCharSetProberaenumsTaProbingStateametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uchardet.hebrewprobera__module__a__qualname__l�l�l�l�l�l�l�l�l�l�aNORMAL_TSADIlf{�G�z�?uISO-8859-8uwindows-1255uHebrewProber.__init__uHebrewProber.resetaset_model_probersuHebrewProber.set_model_probersuHebrewProber.is_finaluHebrewProber.is_non_finalafeeduHebrewProber.feedapropertyacharset_nameuHebrewProber.charset_nameaHebrewalanguageuHebrewProber.languageuHebrewProber.statea__orig_bases__u<module chardet.hebrewprober>Ta__class__Taselfa__class__TaselfafinalsubamodelsubTaselfabyte_stracurTaselfwcTaselfTaselfalogicalProberavisualProberu.chardet.jisfreq��a__doc__u/usr/lib/python3/dist-packages/chardet/jisfreq.pya__file__a__spec__aoriginahas_locationa__cached__f@aJIS_TYPICAL_DISTRIBUTION_RATIOlaJIS_TABLE_SIZETl(lll�l�l�l'lOll}l�l�l�l�l]l�
l�
ll�
l�l�l�l�ll�l�l�ll�l�lXl}l�l�lkllg
l�
l�lkl�l�l�lllll�l�l%l&l0l1l,l-l�l�lll�ll�l�l�l<ll�lpl�l�l�l�l�l�lgl�ll�lWlXl�l�lh
l"l�l�l�l�l
l	ll\l�l�l�
l/
l�l�l�l�ll�l0
l�l�
lhl�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�ll�l�l�l�l�l�l�llllllllll	l
lll
lllllllllllllllllll ll!l"l#l$l%l&l'l(l)l*l+l,l-l.l/l0l1l2l3l4l5l6l7l�lVljl4l�ll�lBll�l8l9l:l;l<l=l>lvl�l�l�lSl�lellfl�l�ld	l+l�l�lalwl�l�l�lIl�l~l�l�
ll?l@lAlBlClDl
ll-lllil�l�
llEl^l.l�l3lli
lFl/lYl�l�ll�ljl�
llGlHlIlJlqll1
llYllkl/ll2lll#lll�l*l�ll�ll�ll[ll\l5l�l!l!l	l%l@llll'lAllll4l
ll�l�lll<ll�l�l-l�ll7lSl�l�l~lKl=llEl�l;ll�l7l7l8lml&lll
llOlKl=l~ldlllLlMlNlOlPlQlRlSlTlUlVlYl>lJl"lp	lpl�l�ll�lTl_l�l�l.lXl�l�lLljlell9lPl lllyl�l�llDl�l�l�l)lhl�lFl?ll+lllglcll�lBl]lNl�l�l8ljl:l5lll7ll�lRl4lGldl�l�l�lnllhltl6l3l$lWlCl�l�l:
lxl�ll*lV	llWlXlYlZl[l\l]l^l_l`llalblcldlelflglhliljlklllmlnlolplqlrlsltl�
lulvlwlxlylzl{l|l�l�ll�lll}l�l~lll	l�l�
l�ll�l
l�l�ll�llll�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�lllllllkl�l�
l>l�
l�
l	l�l
	lj
l�l�l�lZl[l\l]llllll	l
lll
lllllllllllllllllll l!l"l#l$l%l&l'l(l)l*l+l,l-l.l/l0l1l2l3l4l5l6l7l8l9l:l;l<l=l>l?l@lAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl[l\l]l^l_l`lalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzl{l|l}l~ll�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�llllllllll	l
lll
lllllllllllllllllll l!l"l#l$l%l&l'l(l)l*l+l,l-l.l/l0l1l2l3l4l5l6l7l8l9l:l;l<l=l>l?l@lAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl[l\l]l^l_l`lalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzl{l|l}l~ll�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�llllllllll	l
lll
lllllllllllllllllll l!l"l#l$l%l&l'l(l)l*l+l,l-l.l/l0l1l2l3l4l5l6l7l8l9l:l;l<l=l>l?l@lAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl[l\l]l^l_l`lalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzl{l|l}l~ll�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�ll
l�l�l�l�ll�l2
l�l�l{lTl�la
l�
l^l�l�l|l�l=llmlk
l�l�l�l	lVlyl�	l�l
lq	ll�ll�
l�	l�l�l�l�l!l�l�	l�ll�l�l�lClOl3ll�l�l�l�lr	l�l�lnl�l+ll�l�l�
lplql�l;
lAl�l�l�lCl0l�lnl�
l�l�lTlClol
l�l
l#	ll�l~llPl�l�l�ll�l�	ll�	l�l$	lzl�l�l&l�l�l�l�ll�l�l�l�l_ll�lUl�l�
ls	l�	l�l�lIl�l�l�ll�l�l�l3
l�ll$lWl1l5lPl�	l�ll�l�l�l�lXl�l�l�ll
l�l�lHl�l�	ll�l�ll�l
l�
lWl�l~lpll$l�lll@lLl�l�	l�l�l�lulllJlI	lW	l�l�l_l�l�	l<l�l�ll]lDl�l�l�llhl�l�l�l�ll�lfl-l�l}lt	l�l�	ll�l�l�l,l�l
lbl�l�lXl�llFll{l`l�l�l+l3lql�lml�l4
l�l�l�l�l�lBlllX	l�
ll%
l�l�l%	l2lul�l�	l�	l�lJll|lrl�l@ll�lll�l�l�
l�l�	lL
lllll�l�lb
lJ	llcl�l�l�l�l�l�ll4	lRl�lm
lTl�l�ll�l�l�l�l�le	l�ll?l
l�l�l�ll-l	l�l*lEl�l�l+l�l�l&	l�	l�l�l/l�l�l.lsl[l�l+ll�
ll�
lBlc
l�l�l�l�l�l	l)ll,l�lu	ll	ll9l&
lll�l�l�lv	l�lYl�l3l�l
l�l�llDl�l�l�l�ldl�l�l|l(lyll�ll�l<l8l�	lilllld
l5
lBl�lnll�ll�l�l|l�	l!l�l)l@ln
lmll�	l0lal�l�l�	lzl'l�l�l�	lWl�l[lvl�l�l�	l�l�l	lo
ll�	l�l
ll�l'
l�ll"l�l�l9ll�ll�lJl�l�lhl�l�le
ll�l\l�l�llp
l@llQl9l�l�l�l	l�l�l�lw	lilEl�lJlIl�	l�l�l�l�llfl�l�l�l
l�l1l�l�l
l�l�l'	lrl
l�l�l�l�
l�l�lcl�	lql�lxl�ll
l2l�l�ll�l�	l*l�l�lblFl�lvl�ldl�
l�l�l!lRl�l�lQl�ll�lPl�lll�ll�l�l(	l�l�l_ll`l�l�lf
l�l6
l�lAll�lal�l�lulTll2l�l�lll�ll^lCl�l�
l�l[l�l�
lvl%l�l�l�lnl!lFl�lZl^l�ll�ldll�l�lx	l�l�l]l�lBllcl�
l�l�l�lPlql	llHlY	l�l�l(
l�l�
l�lgl}lKl�	l�ll4l�lWl�l�l�lClg
l-ldl�lkll4l}l�lq
l~l+l�	l�l�lhl@	l�	ll@lA	lDl:l�l�lel�
l�lqlwl�l�l�l�l�l�l�ldl�lZl�l*lM
l[l�l�lslZl�
l�l�l>l�l'l-l�l�
lll�l)	ll�l�l�ltlFl7
l�ltl#l�l�l�l�llYl�l�lflklbl1l�l�
l�l6lolcllql�	l�l�l�l�
lul�l:l�l�lN
l�lUl=l�	lvl�lllNl�l�l�l]l�l;l�l�l�
l�l�lllLl	l}l�l�ll�lB	l�l8
lQl�l#l`lTl�l�	lxllrl�	lll�l�l�l�	l�l3lnll�ll�ll�l{l�l�l@l�l�ll�l9
l�l�l�l5lh
ldlZ	l�l�lill�l�l�llsl-lr
l�lll�l[l�l0lll�l�l.lSl	lRlO
l�ll�l�l;l�l4ly	l�
l;l�lz	l�lpl�l�l l�l�l:
l(l|l�
l�l"l�l�l�l�l�l�lOl�lel�l�l�l
lC	ltl)
ll6lKl�l�l8l�lP
llhl�l�l�ll�l3l$l�l�l*
l=lblell�
l4l�l�l�	l.l7l�l\l�l�lljl�ll�l�l�l�l�l�l/ll�l�l�l=l�l^l�l5	l�l�l�	l\l�ll�l�l9l#l+l�
ls
l,l�l7ll�lYl�l�l�
lMl�l+
li
lQl�l�l6	l�l�l�l�llyl�llsl#l{	l�
lUlfl<l�l�lvl�l�l)l�
ll�ll�l�lml<lll�	l�l�lgl�l�	lll�l lD	lblul�
l�lDlBl�l�l�
l[	l�ll8l�l�l>ll�ll�l�l�l�ll]l�lDl�l�l�l6lZl�l�	l5l�l�
l�
l<lml�
l,l�	l�lul^l�	l�l�lgl�l�lIl�l�lgl�l�l\l:l
lMltl�	l�lEl�lol�l�l�l�lElRl�ll�lElj
l�lglWl�l�lKl�	lCl�l=l�l]l$l!l�l�	ll�l�l`lKlvlll0lil�l^l�l�l3l�l"ll�l�l�llalk
ll;
lwl�l�l�l�l�l�l�
lyll�l�l�lPll�l�	lwl�l�l�lt
l�l�l�ll�l�lJlall�l]l�l�l�l�	l�ll�llLlhll�l�l�
lu
ljl�ll#lCl�l�l	lal�l!lsl|	l�l	lYl�l
l�l�l�lhlOl5l�l�lzlil�
lSl�lLl�l.l�l&ll	l<
l7l�lslAl�l�lMl�
l�lsl�l*l,
l%l�
l�	l�lkl�l&lfl�lOljl"l�l(l-l�l[l�l�l�l�l-l=l�l}	l�l�lMlSl�l�l�ll�lll�l�l�l�
l
ll
l�l~	l�lJltlklvlelyll�l�l<
l�lfl�lMlkl�
ll�lol�l�l�lwlv
lll�l]l�ll.l�
l�l�l�l/lf	lql$lgl�lGl�l�lnl�l>l6l=
l�l�l�l�l�lNl�	lxl�lel*	llhll�l�l$l�l�l�lolbl,ll�l�lltl�l�l	l�ll�
lVl�l�
lill�l�l�lw
lllplHl�lVl�lil<lZl�	l8lrlwl�l&l�l�l�l/l�l�l�l�l>l�l>
lE	lxl�l&lel�lwl	l�l�l5l�l�l�
ll\l�l�l�lSlill�l�l�l2l�l�lll+l'l�l%l�l�lx
lOl�l
lQ
l�l�lll�l�l_lHl�l�ll�lgll�ly
l�l�
l0l&l+	ll�ll�l�ll
l'l�l'lzl�l	l	l�l_l�l�ll�l�l�l?
l�
l�l�	l�lz
l�lm
l|l
ll	lg	l0l�l�l l�l*l�l�l
l`lwll�l
l#l�lcl)l�l�lR
l�l�l�lTl�l�lrllVl�l�l�l_ll�ll�lrl�l�l�
l`lxl�l�l
l�l�lfl�lln
l=
l*lAll�	l(l�lxl�lS
l�l{lT
l�l9ll�lMl�lrl�ll;ll(ll%l�l[lalbll�lDl�l�ll-
l\	l�lll�lo
lElml)l�l!l�llcl�l,	l1ll]	l�l�l�l>lIl�l�l�	lTll�l�l�l�l�lyllklzlxl�lNl	l�l�l�l	l5l�l�l"l�lHl<ldl�l
l�l�lh	l�	l�l
lp
l�l�l:lLl1l�l�l�
ll�l>
l�lq
l?lZlMlIl�llBlK	lDl�l#l
l
lYl>l�l�lll`l�l�l�l�ll�l�l�ll�l�l�l l�l�lcl�ll�l�l�l�lTl�lall2lyl/l�l"lU
l�l�lbl�l�l�l/l�l�	l�ll
l{l
l�ljl�l�l�l5l*l�l�l�l�lalxl�l�l�	llFl�l�l�l7l�l�l�	l?l�lwl�lll�l�l+l�l8l�l�
lNl�
l�l�l,l�lnl�l
ll�lolsl_l?l�l�	l�l�ll�	l�l�l?l0l�	l�	l�lyl3lfl�l=l�l�llll�	llvl]l�l	l	l�l�lzl�
l�lyljllul�l�lpl�ljl�ll	
lilzll�lr
ll�l�l�l�l�lllFl�l'l�	l{
lnllxlul$ll�l�lMl�l�l�lkllpl�
l^	lql
l`l|l�l�	ll

l|
l�	l�
ll�l�	l
l�l�l�l�	lGll�l-l�lZl1lYl�l-	l	lel�l�l[lCl�l�l�lel�l.l-ll�l�l	l�l�l�
l�
l7	lblll	l�l�l�l{l�l.l	l�l�lzl�l�
l�
l�l?
l�ll9ll�
l�ll�l}l�l�
lal�l�	l
lQl�	ldl;lV
l�l/l^lDl�l?lml�
l�
l9lIl�
l�l�l
ll�l�
l{l}l l�ll�l�l�l&l�l~l�lXl�l�l}
l�
l�l9l�l�l:l�l"l\ll�l
l_	l�l8lWl~
l^l%lPlsl�lwl�l�ll8	l�lLl�ll.
l�l�l�
l�llNl�l�lPl�lSl�l�l�l:lRl'l0lbll�l�
l�l�l�l�lzll�	lllllKl�l�l�l�
lrl�lql
l�l�lnlL	ll�ll�l�l�l�l�l�lXl@
l�lglil�l�l4l�l:ll�l�lrl�	l�lQl�
ll	l;l'l�l>l�lblml�lwl�l�l�ls
l�ll�lA
l�lt
l9	ll�lll�	lol^l�l�l2l�lcl�ll�l�llrl�l�l�l!lltll1l{l�l�l�l�l�l�lsll�l�l�l�l�lxllvlalpl�l�l
l�lLlOl�llUl�l.ll�l)l.	l�lEl�	l"llyll	l�l�l�l�l(l�
ll�lqlEl6l
l�
l2lul6l�l�l�l�l.l�li	ll�lVl�llsl�
l�l�lGlGljltl�lWll�	l�l�l`l�l�l�lul�ll�
l�l{lQll�	lOlCl�l�l�
l�lJl�	l	l	l$l�l�l�l/	l�ll_ll�llj	lRl�l7ll�l/
ll3lDlu
l6lXl4l�l�lll�ll>l�lll0
l`l`	l
l�l�l�lUl�l l�
lrll�l)l�l5l�lHl�l 
l�ll~lrl�l�
l�l�l�l�l�	l�ll]l�l�ll�ll�ll@
l�l�l�
lal�lvl�l�l�l/l!l6l�l�l�l7lwl�l	l3lcl8lxll�l�lB
l�l�lM	l�l�lF	l�lgll�l�l(l�l
l:	ll�lHl�l�
lfl�l�l"l�
l~l�l�l�l�
lylll�l�l l!lNl�
l4lA
l�ldlel�l�lzll�l�l�l�l�l�l0	l�l�ll�l�l�ll�l{l�l�l�l�
l�lfl(lll�lGl�	l�l�l^lB
lmlFl|llUl�l�l2lRl�l�l#l�l�
l�l�lFl�llUl�l�l�l1l�lclkl�lN	lSl�	l�l�l�
l�l�l$lO	l�llYl�l�l�l
l�lGlll�lW
l	lC
l?l�ll�l~l�l�lUlFl�l�l�ll�l�l�l�
lC
l�	l�l�llel
l�l�l�ll/lQl_lv
l;l�l�lPl)l�lGlml�	l�l�lGl,lIlzl_l�	l�l	l9lnl�l�
lAl�	l�
lX
l�l#lVl)l<l%l�l}l�l�lHlw
l5l�lpl.ll�l�lmll�l�l�
l#lhl|lbl�l�l�l@l(l^lzl�llAl�
l ll"llgl�l|l�l�l�l�l�l6l�lXl�l�l,l�l�l		ll�l$l#lIlk	l�ll�l�l:l	l�lQllolhlVl$l�
l�ltl�l�l�lY
l,l�ll
l�lD
l�l�	l~l�
l�
l�l�l%l�ll l�l�l�ll�l�
l l7l/l
	l�l�l�l�	lElVl�l�
lE
lul�l&l�l�ll�l�	l�lol�l�lZl�lil�l�l	ll�l�l�l!l�lnl8l�l'l�l�l�ll�ll�l�	l�lGl�lRl2l�ll:l�l,l�llZ
lll�l(lXlP	l?l�ll�	lol�ll�l�l�l�lWl*ll�l;l8l�l&l)l�l�l
lol�ll�l�lHl_l�l�l0l�lx
l�l0l�l;	l�l
l�l�lXl�l	l�l�l1l�lZl*l%l�	l�ll|ldl`ll�lSljl}l\ll�l�lG	l�ll�	lflql%lBl�l1
lpl�l"ll�l�l�l�l|l�l�ll�	l�ll	l2
l�l�
l�
ll�l@lhl�l;l�l�ll	l�l	l�l�l&ll�l�l}l�l%l�l�lll?l�l�	l�la	ly
ll�
l�l�l�	l�l=l1l�l<l�l{l#ll�l�l�l�
lAl�l
l�ltl�l�l�	l�l>l
lKl3
l�l�l=l�ll\l�l�l'lAl+lgl�lb	lKl�l�l�l�l
l�l
l�l4
l�l*l�lm	l�	l�l�
lolNll0l(lil�l$l4l l{ll�l�lQ	l�l�lUl�l�l�l,l`ll�	l�ll�
ljl)l l�l-l6l�l�	lF
l2l)ll
l*l�lYaJIS_CHAR_TO_FREQ_ORDERu<module chardet.jisfreq>u.chardet.jpcntxI�]a_total_rela_rel_samplea_need_to_skip_char_numa_last_char_ordera_donearesetlLlaNUM_OF_CATEGORYl��������wianum_bytesaselfaget_orderlutoo many values to unpack (expected 2)laMAX_REL_THRESHOLDajp2CharContextaENOUGH_REL_THRESHOLDaMINIMUM_DATA_THRESHOLDaDONT_KNOWaSJISContextAnalysisa__init__aSHIFT_JISa_charset_nameTl��������ll�l�l�l�l�l�aCP932l�l�asecond_charl�l�l�afirst_charl�ll�l�a__doc__u/usr/lib/python3/dist-packages/chardet/jpcntx.pya__file__a__spec__aoriginahas_locationa__cached__TSTSlppllppppppppppppppppppppppppppppppppppllppppppppppppppppppppppppppllppllppppppppplTSlllllllllllpplllpllllplllpplllllpllllllllllllllllllllpllpllplllllplllllllppplllllllTSlpllppppppppppppppppppppppppppppppllpppppppppppppppppppppppppppppppppppppppppppppplTSllllllllllllpllllllllllplllpllllpllpllppllplllpllllllllllllllllllllllllllpllllllplpTSlppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppTSlllllllllllllpppllllplllpllllppplllplllpllplllllllpllpllpllplllpplllllllplllplllpllTSlpppppppppppppppppppppppppppppppppllpppppppppppppppppppppppppppppppppppppppppppppppTSlllllllllllpllpllllllppppllllpllplllllllpllpllplllllllllplllpllpllllllllpllllllllllTSlppppppppppppppppppppppppppppppppppppppllppppppppppppppppppppppppppppppppppppppppppTSllllllllllplllllllllppllpppllllppllplppllpllllllllplllplpplplllpllllllllplllplllpllTSllllllllllllpllllllpllllppplllllplllllllllplpllplllplplllllllllplllllllllpllllllpllTSllllllllllplllpplllpplllllplllllllllllllplllllllllllppllllllpllpplllllllllpplllllllTSlllllllllllplllllplllllllpllllllpllplllpllplllpllllllplllllllllppllppplppplllllplllTSlllllllllplllplllllllppllllllllllplplllplllpllpllpppllpllppppllllllppllpplplllllllpTSllllllllllpplpppppllllllllplllllllllllllllllllplllplpllllllplllpplllllllllpllllllllTSlllllllpplppllllpplllllllllllllppllpplllllllpllpllllppplllllplpllllpppplllllplllpllTSllllllllllplllllppllllllpplpllllllllllplppplplpplllpllllllplllllppllllllpplpllllplpTSlllllllllllppllllplllllllllplpllllllllllllpllllllllpllppllpppllppllllpplllllllllplpTSlllllllllllpllpllpllppllllllllpplllllllpllllllllllpllllllllllllppplllllllpplpllllllTSlllllllppllllllllpllllllllllplllllllllllllplplplpllppllppplplllllplllllplplllllllplTSlllllllllllpplllpplllllllplllpppllllllllllplplpllllllllllllplllpplllllllllllllllpllTSllllllllllllplllllllllllllpplllplplllpplllllllllpppppllppppppllplllllppllppllpllpllTSllllllllllllplllplpllllppplllllllllplllpllllplppllpllllllllplllppppplpllplplllllllpTSlllllllppllppllllllllllplplpllllllllllppllllplpllllplllpppllpllllllllppllpllplllllpTSlllllllllllpllppplllplllllllpllllllllllpllpllllplplppllllllplllpplllllllpllplpllllpTSllllllllllllpllpplllllllplpllllplplplllllplllpllllllppllllllllpllplllllllplpllllpllTSlllllllllllpplllpllllplllllllllllllllllpllpplpplllllpllpllppplllpplllpplpplllllplllTSlllllpplllllllppllllplplpllpllllllllllpllllplllppllppppppppppllllllllpplllllppllpllTSllllllllllllllpllpllllllllpplplplllllplpllplllllllplllllplllllplpplllllllpllllllpllTSllllllllllppplllllllplllllpplllplllllplpllllllplpllppppllppppllllllllllllllllllpllpTSlllllllllllpllllllllpllllpplllllpllpllpllpplllplllllllllpllllllplpllllllppplplllllpTSllllllllllllpllllllllllllllpllppplllllplllpllpllplllllllllllplllllllllllppllllllpllTSlllllllllllplppllpllpllpplpllllllllpllppllplllplllpllplllllplllllplllpllplplllllplpTSlllllpppplllllppppllllllpllpppllplllplllpplpllplppppllppppppplplpllllpplplpllpppplpTSlllppllpppllllllllllllllllllllllllplllllllllpplllllllpllpllplllpppppppppppllpppppppTSllllllllllllplllllllplllpppppllpllllpllpllplllllppllplpllllppllplllllllllllplllllllTSlllllpppplllllllllllllllppppllllpplllppllllplppplllppllpllpppllllplllppllllplppplllTSlllllllllllpllllplllllllllplllllpllpllpllpplllpllllplplllplpllllplllllllplllpllllllTSllllllllllplllllpplpplllllplllllpllpllppplllplpllllllllllpllplpllllllllllllllllpllpTSlllllllllllpplllplllpllllllllllplllpllllplplllplllpllpllllllllplllllllllllplplllplpTSllllllllplplplllllllllllllpllllpllllllppllpllllllllpllllllllllllllllllllllplpllpllpTSlllllllllllpllllllllllllllplllllllllllllllllllllllplllllllllllllpllllllllppllllllllTSllllllllllllllllpplllllllllllllpplllllppplllllllppppppllpllplllpplllllpllllpppllllpTSlllllllllllppllpplllppllllpplppllpllllllllplplpplllplllplllllllpllllllllpllplplpllpTSllllllllllpllpllpllllllllllpllllllppllllppplllllllplllllpllplllllplllppllppllppppllTSlllllllllllplpllplllpllppllllllpllpllplpllpllllllllllpllplllllllpllllllllplllllllllTSllllllllllplllppppllpppppllplllppllplplplplpllllpllpppllplllpllpllllllllpppplllllllTSlllllllllllllllllllllpllllpllllppllplplppllppppllllpllpllpllplllplllllllplplllllpllTSlppllpppppllllllppppllllllpppplllllllpplllllpllppppppppppppppppppppppppplllllppppplTSllllllllllpppllllpppppllplllllllllppllllllppppppllllllpllpllplllllllpllplllllllllllTSlllllllllllppllllllpllpllllllllllllplllpllllllplpllplllllllppllpllllllllppppllplllpTSlpppppppppllllllppppppllpppppplllllllllllpllpppppppppppppppppppppppplllllllppppppplTSlllllllllllppllllllllppllllllpllpllpllplllplllllllllllplllllplpllllllllllpplllllplpTSlllllllpplllpllllplllllllllllplppllplpllllplllllpllpppppllllpllllllllppllpplllllpllTSlppllllpppllppllpppppplpplpppppppplplppllppppppppppppppppppppppppppllpppllllpppppplTSllllllllllpplllppllllppllplpllllpllllllllplllllplllllllllpllllllllllllllplpllllllllTSlllllllllllllllllllllllllllpllllpllpllllllpllllllllpppppllppplllllllllllppllplpppllTSlppllpppppllllppppllppppppppppllpppppllppppppppppppppppppppppppppppppppplllpllpppplTSllllllllllllllllpllllpllppllllllllllllllpllplllllllpllppppllllpplllllllllplllllllllTSlpplllllllpllplllllllllllllllllllllplplllppllllppllpllppppppplplllpllpppllppplpppllTSlppllllpppllplllllllllpppppplllllllllplpllllpllppppppppllppppppppppppppppllpllpppllTSllllllllllllppllpplllplllppllllpllllllllllplpllplllllllllplplllllplllllllllllllllllTSllllllllllplllllllllppppppplllllplllllppllplllpllllplplllpllllllllllllllllllplllllpTSlllllllpplllpllllllllllllllllplppllpplllllpllllpllplllppllllpllllllllllllpllplllplpTSllllllllllllpllppllllpllpplpllllpllpllllpllllllllllppppllplplllpllllllllpllllllplllTSllllllllllplpllpplllllllllllllllllllllpppllllllllllplllllllllllpplllllllpplppllllllTSllllllllllpplplplplpllllplllllllllllllplpllllpllllpllllplllplllplplllppllpllplllpllTSlllllllppllplllllllppllllllllllplplllllllllllplllllllplpllllllpllllllllllpppplllllpTSlppllllppppplpplppppppppllpppppplllllpllppllpppppllpppppppppppppppppppppppppllpppplTSlllllllllllpplllllllppllllpllllllplplllplpppplllllpllllplllpllllllpppllplplllllllllTSlppllllpppllllllllllppllppllpplplpllpplllllllllppppppppppppllppppllppppppllpllpppplTSllllllllllllpllllllppllllllllllplplllplllllllpplllllplllpllllllllllllppllllpplllpllTSlllllllllllllpllpplllplllllllllllllpllllplplplppllplllllpllpllllppllllllplpllplllllTSlllllllllllpplpllllllllllllllllplllllllplllllllllllplllllllppllppllpllpllppllllllllTSlllllllllllpllllllllpllpplpplllpllpllllpllplllpllllllplplllllllllllllllllllllpllllpTSlllllllllllplpppplllllpplllplllllpppllpllpplllppllllllpllllllllllllllllllllllllllllTSlllllllllllplllllpppplllplpllppppllppllpllplplpllllllpllllllllpllllllllllllpllllplpTSlppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppTSlllllllllllllpplllllllpllpllllllllllppllllllllpllpllllllllpppllplllllllllpplllllpllTSlpppppppppppppllpppplpplplplpplllpllllllpllpplplpppppppppppppllllppllpplllllllpppplTSlppppppppllllpppllpppppllllppplllpplllllplllllplpllppppppppppllllppppllplllppppppplTSllllllllllpllllllllpplllllplllllllllllllpplpplpplllllllllllpplplpllllllllpplllllplpTSlllllllllllplpppllllpplpplpppllllplllllpppllllpllplpppllpllllllpplllllllllplllllpllTOobjectametaclassa__prepare__aJapaneseContextAnalysisa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uchardet.jpcntxa__module__a__qualname__lldl�luJapaneseContextAnalysis.__init__uJapaneseContextAnalysis.resetafeeduJapaneseContextAnalysis.feedagot_enough_datauJapaneseContextAnalysis.got_enough_dataaget_confidenceuJapaneseContextAnalysis.get_confidenceuJapaneseContextAnalysis.get_ordera__orig_bases__uSJISContextAnalysis.__init__apropertyacharset_nameuSJISContextAnalysis.charset_nameuSJISContextAnalysis.get_orderaEUCJPContextAnalysisuEUCJPContextAnalysis.get_orderu<module chardet.jpcntx>Ta__class__TaselfTaselfa__class__Taselfabyte_stranum_byteswiaorderachar_lenTaselfabyte_strTaselfabyte_strafirst_charachar_lenasecond_charu.chardet.langbulgarianmodel�Oa__doc__u/usr/lib/python3/dist-packages/chardet/langbulgarianmodel.pya__file__a__spec__aoriginahas_locationa__cached__Tl�pppppppppl�l�pl�l�pppppppppppppppppl�pppppppppppppppl�pppppppppl�pppppplMlZlcldlHlmlklelOl�lQlflLl^lRlnl�lll[lJlwlTl`lol�lsl�ppppplAlElFlBl?lDlplgl\l�lhl_lVlWlGltl�lUl]lalql�l�l�l�l�l�ppppl�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�lQl�l�l�l�l�lil�l�l�l�l�l�l-l�l�ll l#l+l%l,l7l/l(l;l!l.l&l$l)ll'll"l3l0l1l5l2l6l9l=l�lCl�l<l8lll	lllllllll
llll
llllllllllllKl4l�l*ll>l�l�l�l:l�lbl�l�l�l�l�l�l[l�l�aLatin5_BulgarianCharToOrderMapTl�pppppppppl�l�pl�l�pppppppppppppppppl�pppppppppppppppl�pppppppppl�pppppplMlZlcldlHlmlklelOl�lQlflLl^lRlnl�lll[lJlwlTl`lol�lsl�ppppplAlElFlBl?lDlplgl\l�lhl_lVlWlGltl�lUl]lalql�l�l�l�l�l�ppppl�l�l�l�l�l�l�l�lxl�l�l�l�l�l�l�l�lNl@lSlylblulil�l�l�l�l�l�l�l�lXl�l�l�l�lzlYljl�l�l�l�l�l-l�l�lIlPlvlrl�l�l�l�l�l>l:l�l�l�l�l�ll l#l+l%l,l7l/l(l;l!l.l&l$l)ll'll"l3l0l1l5l2l6l9l=l�lCl�l<l8lll	lllllllll
llll
llllllllllllKl4l�l*lawin1251BulgarianCharToOrderMapTllpppppppppppppppllpppppppllppppppppppppppppppppppppllpplpllpllplllpllpppppppppppllppppppppplllllppppppppplllplppppppppppppppppllppppppppppppppppllllpppppppllllpllppppppplplllpllppppppppppppplllpplppppppppppppllllppppppplllpppppppppppllpllppppppppppppppppplllpllpppppppppppllllppppppplllpppppppppppllpllppppppppppppppppplpppppppppplllpllppplpplpllllllpppppppppppllppppppppllpppppppppllpppppplllplplpllpllpppllllllllppppppppllpllppppppppllpppppppppllppppppllppppllllppppllplllllllpppppppppppllppppppppllpppppppppllpppppppllpllppllplllpplpllllllpppppppppppllppppppppllpppppppppllppppppppllpplplppllplllpllllpppllppppppppllpllpllppllpppppppppllppppppllpllllpplpppplpllllllllpppppppppppllpllpppppllpppppppppllppppllppppllppllplllppllllllllpppppppppppllppppppppllpppppppppllpppppppppplpplplllllpllpllllllppppllpppllllppppppppllpppppppppllpppplpllpllllppllllllpllppplllpppppppppppllppppppppllpppppppppllpppplllplpllllplpppllplpplllllllpppppppppllppppppppllpppppppppllppppppppppppppllplpplplpllllllpppppppppppllppppppppllppppppppplllllllpllppppllllllllllllllllllppppppppppppppllppppppppppppppppplppllppppppppppplplllpllplpplllpppppppppppllppppppppppppppppppppllpppllppppllplllplllppplllllpppppppppppppllppppppppllpppppppppllplpplpppppppppplplllplllppllllpppppppppppllpppppppppppppppppppplppppllplplllppppllllplppllppllpppppppppppllppppppppllpppppppppplpppplllllllllllplllllpllppllpppppppppppppllpppppppppppppppppppllpppllpppllpllpplplllppllplllllpppppppppppppppppppppllpppppppppllpppllllplllllpllllllpplppppppppppppppppppppppppppppppppppppppppllppplpllllpllpplllllpllpppppppppppppppppppppppppppppppppppppppllppllllpllllppllpllllllppllpppppppppppppppllppppppppppppppppppppllplplplllpplllplpllplpllplllllppppppppppppppppppppppppppppppppplpppllllllplllllpllllllppppppllpppppppppppllppppppppllpppppppppllppppplllllllllllllllpplpllplppllppplllplplplllpplplplplplpplplllpppplllpllllllllllllplppllllpppppppppppppllppppppppllpppppppppllpllplplllllllpplllllllppllllllplpppppplpplppppppllllpplpppplplpllllllllppllppppllllllpplllllpplpplppplllplllllpplppllpppllllpppllllplpllllllppplllllppppllpllllpllllplppllpplllplppppllpplplllplplplllllpllppllpllllppllllllllplppplllllpplppppppllpplppppplplpllllplplllplllpplplllpppppppllllpplpppplppllllllllpllllpllpppllplppplpppplllpppllllplllllllplllllpppppplplplllllllplpplpllpplplpllpppllpppppppppllplplppppplllllppplpllplppllllpppppllppplplpplpllpppllpllllpplppllllppllppplllplppllllplppllllppllpppllllpplplpllpppllllpllpppplllllppppppplllllppllppplppllllpplplpplpllpppllplplpllllllpppppplplllppppppplllplppppllplpllplllpppplllpllpplplpllllllppplllpplllpllllpllpppllppplpllllplplllllplpplplpplllllpppllllllllpppllplppllllplpllplllppplppppppllllplllpppplplppplllpppllppplpppllppllplplllllplppplllppppppppppppppppppppppppppppppppplpplllllllllpllllllllpplplppllpllplplpllpppllllpplplplpppllppllpllpppllpppppplllppppppllppppllppplppplpllllpplllllpplllppplllpppllpppppppppppppppppppppppppplllllpllllpppplppppppllppppppppppppplpplllpppllppppplplllppppppplllllppppplplppppllpllpppplpllpplplllllllllpllpplpllplppplpppppplllllpppllpppppppllplllllllpllpppllplpppplpllpllpppppllllppppppplllplpppplplllplllllppplplppppppppppllppplplllplppllpllllppppppppplplpplppppppppplllpllpllppppppppppllplllpllpllpppppllllppllppppppllplpllpplplplllplpplplpppppppppplllppllllplpllppllppplllllpppllpppllppppplplllppppplplpplpppppppllplllplppppllppppppppllppppppppppppppppppllpppppppppppppppppppplpppllpllllpppplpplllpppppppllpllllllplpllllllllpppllpppppppppppllpppllplllllpplpllllllppppppppllllpllpplplpllpllpplplpppppppppplpppplpllppllllppllllpppppppppplllllpplplpplllppppplplppppppppppllllplllppppplpllpllllppplppplpplpllppplpplplpllpppppppppppppppplpllllpllppppppplplllppppppppppllppppppplplpllppppppppppppppppppllppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppllplllpppppppppppllpppppppppllppplpllpplpllpllllppllppppllppppppllllplpppppppppplpllllpllllpllplpplplplllppllpllpppppppllppppppppppppplplpllpppppppppppppppplllllppppppllpppppllllplplpplllpppppllppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppllplpppppppppppppllllpllpppplllpppppppppppppppppppppppppppppppplaBulgarianLangModelachar_to_order_mapaprecedence_matrixatypical_positive_ratiof! _B�?akeep_english_letteracharset_nameuISO-8859-5alanguageaBulgairanaLatin5BulgarianModeluwindows-1251aBulgarianaWin1251BulgarianModelu<module chardet.langbulgarianmodel>u.chardet.langcyrillicmodell+a__doc__u/usr/lib/python3/dist-packages/chardet/langcyrillicmodel.pya__file__a__spec__aoriginahas_locationa__cached__Tl�pppppppppl�l�pl�l�pppppppppppppppppl�pppppppppppppppl�pppppppppl�ppppppl�l�l�l�l�l�l�l�l�l�l�lJl�lKl�l�l�l�l�l�l�l�l�l�l�l�l�ppppplGl�lBl�lAl�lLl�l@l�l�lMlHl�lElCl�lNlIl�l�lOl�l�l�l�l�ppppl�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�lDl�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�lllll
ll'llllllllllll	lllll
llllllll6l;l%l,l:l)l0l5l.l7l*l<l$l1l&ll"l#l+l-l l(l4l8l!l=l>l3l9l/l?l2lFaKOI8R_char_to_order_mapTl�pppppppppl�l�pl�l�pppppppppppppppppl�pppppppppppppppl�pppppppppl�ppppppl�l�l�l�l�l�l�l�l�l�l�lJl�lKl�l�l�l�l�l�l�l�l�l�l�l�l�ppppplGl�lBl�lAl�lLl�l@l�l�lMlHl�lElCl�lNlIl�l�lOl�l�l�l�l�ppppl�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�lDl�l�l�l�l�l�l�l%l,l!l.l)l0l8l3l*l<l$l1l&ll"l#l-l l(l4l5l7l:l2l9l?lFl>l=l/l;l+lll
ll
llllllllllll	llll'llllll6lllllawin1251_char_to_order_mapTl�pppppppppl�l�pl�l�pppppppppppppppppl�pppppppppppppppl�pppppppppl�ppppppl�l�l�l�l�l�l�l�l�l�l�lJl�lKl�l�l�l�l�l�l�l�l�l�l�l�l�ppppplGl�lBl�lAl�lLl�l@l�l�lMlHl�lElCl�lNlIl�l�lOl�l�l�l�l�ppppl�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l%l,l!l.l)l0l8l3l*l<l$l1l&ll"l#l-l l(l4l5l7l:l2l9l?lFl>l=l/l;l+lll
ll
llllllllllll	llll'llllll6llllll�lDl�l�l�l�l�l�l�l�l�l�l�l�l�l�alatin5_char_to_order_mapTl�pppppppppl�l�pl�l�pppppppppppppppppl�pppppppppppppppl�pppppppppl�ppppppl�l�l�l�l�l�l�l�l�l�l�lJl�lKl�l�l�l�l�l�l�l�l�l�l�l�l�ppppplGl�lBl�lAl�lLl�l@l�l�lMlHl�lElCl�lNlIl�l�lOl�l�l�l�l�ppppl%l,l!l.l)l0l8l3l*l<l$l1l&ll"l#l-l l(l4l5l7l:l2l9l?lFl>l=l/l;l+l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�lDllll
ll
llllllllllll	llll'llllll6lllll�amacCyrillic_char_to_order_mapTl�pppppppppl�l�pl�l�pppppppppppppppppl�pppppppppppppppl�pppppppppl�ppppppl�l�l�l�l�l�l�l�l�l�l�lJl�lKl�l�l�l�l�l�l�l�l�l�l�l�l�ppppplGl�lBl�lAl�lLl�l@l�l�lMlHl�lElCl�lNlIl�l�lOl�l�l�l�l�ppppl�l�l�l�lDl�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�ll;l6lFll%ll,ll:l
l)ll0l'l5ll.l�l�l�l�l�l�l�ll7ll*l�l�l�l�ll<l�l�l�l�l�l�l�ll$l�l�l�l�l�l�l�l�ll1ll&llll"ll�l�l�l�l#ll�l+l	l-ll ll(ll4ll8l
l!ll=l�l�ll>ll3ll9ll/ll?ll2l�l�l�aIBM855_char_to_order_mapTl�pppppppppl�l�pl�l�pppppppppppppppppl�pppppppppppppppl�pppppppppl�ppppppl�l�l�l�l�l�l�l�l�l�l�lJl�lKl�l�l�l�l�l�l�l�l�l�l�l�l�ppppplGl�lBl�lAl�lLl�l@l�l�lMlHl�lElCl�lNlIl�l�lOl�l�l�l�l�ppppl%l,l!l.l)l0l8l3l*l<l$l1l&ll"l#l-l l(l4l5l7l:l2l9l?lFl>l=l/l;l+lll
ll
llllllllllll�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l	llll'llllll6llllll�lDl�l�l�l�l�l�l�l�l�l�l�l�l�l�aIBM866_char_to_order_mapTllppppppppppppppplplpppllppllllppppppppppppppppppppppplllpppplpllppllpppppppppllplplppppppppllllpppppppllppppppppppppppppppppppplpplplppppppppllplplpppppppllpllpppppppllppppppppppppppppppppppplllllpppppppppppplplpppppppppplllppppppllpllpppppppppppppppppppplpppppppppppppllplplpppppppppplllppppllllppppppppppppppppppppppplppppppplpplllpllppplplllpplplllpppppppllpppppppppppppllpppppppplpppppllpppplplllpplllplllppppplpppppppllpppppppppppppllpppppppplpppppppppppppppppplpplllplpllllpppppppllppppppppppllpllpppppppplpppppllpllllplllppplpllllpllpplpppppppllppppppppppppppppppppppplppppppplplppppllppplppllpplppplpppppppllppppppppppppppppppppppplpppppppppllllppppplllpllllllpllpppppppllpppppppppppppllpppppppplppppppppppllplllpppllpllpplllllpppppppllppppppppppppppppppppppplpppppllplppplllllllllpllpllllllpppppppllppppppppppppppppppppppplppppppppppplplllpplpppllpppllplpppppppllpppppppppppppllppppppppllllplppppppppllllplpppllpppllllpppppppllpppppppppppppppppppppppllpppplplpllllllllllplllplllllplpppppppllpppppppppppppppppppppppllllllpppllpppllplplllppllllpllppppppppllpppppppppppppppppppppppllllllllllllplllllplllpllllllpllpppppppllpppppppppppppppppppppppllllllppppppplllllplplppllpllplppppppppppppppppppppppppppppppppplppppplplplpplplplppppllplppplllpppppppllppppppppppppppppppppppplppppplplppppppllllpllllllllplllppppppppppppppppppppppllpppppppplpppppllpplpppllllllpllllpppllllppppllppppppppppppppppllpppppppplplppppllpllllllpllpplplllllpppppppppppllpppppppppppppppppppppppllplplpplpllpllpllplplllpllpllplpppppppllppppppppppppppppppppppplllpppllppllllplplllllplllplplllpppppppllpppppppppppppppppppppppllppppllllplllllllllllplplppplllpppppppllppppppppppppppppppppppplpllpplpplplllllllllplllpllpplllpppppppllpppppppppppppllppppppppllpllllplpllplllllplpllllpppplllpppppppllppppppppppppppppppppppplpppplpllplplpllplllpplpplllplpppppppppppppppppppppppppppppppppplllppllpplllllllpllpppppppppppppppppppppppppppppppppppppppppppppllllplllppllppllllplppllllpplplpplpppplllppppllppppppllpppppppppllppplpppllpppllllllpppppplplplppllllllplpllllpppllppplllpllplpllpllpplllppppppplppppppllllpplllppppppppllpppppppppllllpllppllpllpplpppllplplppplpllllllplplllllpppppllllppplllplplpllllpllpplplllpllllppplllllllpplllplplpllplllppppllppllppllllllpppllpplpllplpllpplpplllppplllpllpppppllppplppllpllllpllplllplplpllppppppplpllllllllpppllppllplplpppppplplpllpplllllpllllpllplpllplppppllppppllplllppllpppppplppllllpplplpplllppppllllppppppllpppppllppppplplllllplllpplplllllplllppppppllpllpppppppllllpppllpplplplllpppppllllpppllpppllplllppllllplpllllpllpppppppllpppppppppppppppppppppppllppllplplpllplllpllpllpppplllllpplllppllllpllllppplllppppplllpllllllllplppllllllpplllpplllplpllpppllplppplplllpllplllppllllplplllllplpppppllplplpplpplpplllllllllppppppppppppplllppllllpllpplplllppplllpppppplllpplppllllplplllpplpllpplllplpllllllpppllppllpplplplplpplplppllllpllpppppppllpllllplplplpplpllpllplpllppppppppllllllllppplplppllllllppppllpllplppplllllllpllppppllplllplppppllpllllppllplpllllplpllppppppppllplplplpllplplpllplplplpllppppppppppllpllllllppppplplppllllllpplppplppllpllppplppllppllpppppppppllppllllpllllllllplllpplllpllpppllllplpppppppppppllllppplpplppplllplplpppllpllpppplllppplppplllllplllllppllllllplplllpplllppllplllpllllppllllplpppllpllppppppppppppllpplpplpllllppppllppllpppppppllpllpllplplpllllllllllpllpppppppplllplplplplplplpllplpllppppppplpllplplllppppllplllppllpplllppppllpppppppppplplppllpplppplppllplplplpppllllplpppllpllpppppppppppllppllpllppplllplplplpllppppppppppppllppppppppppppllpppppppppllpppppppppppppppppppppppppppppppppppllppplpplpplllllpllppppppppppplpllplplplppllpppppllpppppppppppppllppplpppllplpllpppllllpllpllppllpllpllpplplppppllplplppppppppppllpplpllllpppllplpppppppplplpplplplllplpppllpppplplpllppppppppppllllllppppllppllppllpppppppllppppplllplpppllppppllppllppppppppllllppplllllllpplllppllllpllllpppllppppllplplplplpppllpppppppppppllpllppppppppppppppppppppppppppplplppllpplplppppppllppppllpllppppllppppppppppppppppppppppppppppplppplllllplppplppllpppllppllllpppllppppppppppppppppppppppppppppplppllplllllppplpllplpppplllplllppplppplppppppppllpppppppppppppppppppppllpppllppppllpppppppppppllpaRussianLangModelachar_to_order_mapaprecedence_matrixatypical_positive_ratiofl���P@�?akeep_english_letteracharset_nameuKOI8-RalanguageaRussianaKoi8rModeluwindows-1251aWin1251CyrillicModeluISO-8859-5aLatin5CyrillicModelaMacCyrillicaMacCyrillicModelaIBM866aIbm866ModelaIBM855aIbm855Modelu<module chardet.langcyrillicmodel>u.chardet.langgreekmodel�Ca__doc__u/usr/lib/python3/dist-packages/chardet/langgreekmodel.pya__file__a__spec__aoriginahas_locationa__cached__Tl�pppppppppl�l�pl�l�pppppppppppppppppl�pppppppppppppppl�pppppppppl�pppppplRldlhl^lbleltlflol�lul\lXlqlUlOlvlilSlClrlwl_lclml�l�ppppplHlFlPlQl<l`l]lYlDlxlalMlVlEl7lNlslAlBl:lLljlglWlklpl�ppppl�pppppppppppppppppppppppppppppppl�l�lZl�ppppppppplJl�pppppl�l�l=l$l.lGlIl�l6l�lll{lnll3l+l)l"l[l(l4l/l,l5l&l1l;l'l#l0l�l%l!l-l8l2lTl9lxlylllll|llllll l
lllll
llll	llllllll*ll@lKllll�aLatin7_char_to_order_mapTl�pppppppppl�l�pl�l�pppppppppppppppppl�pppppppppppppppl�pppppppppl�pppppplRldlhl^lbleltlflol�lul\lXlqlUlOlvlilSlClrlwl_lclml�l�ppppplHlFlPlQl<l`l]lYlDlxlalMlVlEl7lNlslAlBl:lLljlglWlklpl�ppppl�pppppppppppppppppppppppppppppppl�l�l=l�ppppppppplJl�pppppl�l�pl$l.lGlIl�l6l�lll{lnll3l+l)l"l[l(l4l/l,l5l&l1l;l'l#l0l�l%l!l-l8l2lTl9lxlylllll|llllll l
lllll
llll	llllllll*ll@lKllll�awin1253_char_to_order_mapTlpppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppllplpppppppllppllplplllllllpplllppllppppllppppppppppppppppppppplppppllpllllpllllpplplllllpllppllpppppppppppppppppppppllpppppppplllplpppppppllppplllpllpppllpplllppllppppllpppppppppppppppppppppllpllpppppppppppllllpppllpllpllppppllppppllppppppppppppppppppppplpppllpppppllpllpppppppppllllplllllllppppllpppppppppppllpppppppplpppplllppplpllllppllpllppplpppllppllppppppppppppppppppppppppppplppppllllpppplllppllllppppllplpppppppppppppppppppppppppppppppppplppppplpplpppllllpppllpppppplplppppppppppppppppppppppppppppppppplppppllllpplpllpppplplllllllpppppppppppppppppppppppppppppppppppplllppplplplllllllpplplllllplplpppllppppppllppppppppppppppppppppplpppplllllpppllppppllpllllpllppppppppppppppppppppppppppppppppppplpllllpppppllllllpplllpllllppllllppppppppllppppppppppppppppppppppllpplppllplpllllpplllllllpllllppppllppppllppppppppppppppppppppppppppppppppppppppppppppppppppppppppllppppppppppppppppppppppppppplpppllpppppllplllpplpllpplpllllllppppppppllppppppppppppppppppppplppppllpllplpllpppplllllllplllppppppppppppppppppppppppppppppppppplplllppppplpllllpplplllllplpplllppllppppllppppppppppppppppppppplpppllppppplpllllpplllllllpllllllppppppppllpppppppppppppppppppppplllplpppppllllllpplplllllpllllllppppppppllppppppppppppppppppppplllpppllllpllllpppppllppllllpllppppppppppppppppppppppppppppppppplllpplpllpplplllllplplllllplpppppppppppppppppppppppppppppppppppppllpplppppplpllllpplplllllpllllppppllppppllppppppppppppppppppppplpppppllllllllllllllplllllplpppppppppppppppppppppppppppppppppppppllpllpppplpplllllpllpplllplplpppppppppppppppppppppppppppppppppplllpplllllllplllllplplllllplppppppppppppppppppppppppppppppppppppllppllpppppllllllppllllpllplpplppppppppppllppppppppppppppppppppppllpllpplllplllllpppllllllplpplppppppppppppppppppppppppppppppppplppppllllppllllllpplpllllppllppppppppppppppppppppppppppppppppppplllpplpllpppllllplppplllllplpppppppppppppppppppppppppppppppppppplpppllppppplllllllllplllllllppppppppppppppppppppppppppppppppppppppppplllplpllllllppllppplllllllplllllplplllppllppllpplpllpllpppplllpllpppppllllllpplpllllpllpppppppppppppppppppppppppppppppppppplllllllpllllpllllpplppppplllpplllllppplplppllllplpppppllllpppppppllllllplllllplpplplllpplpllllpllllllplplllppllppplpllppllllpppplllplplllpplpllpplllpllplpllpplllllpplllpppppplplllpllppllppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppllplplppllllplllppppplppllpllllllplplpppllplplllpllpppppllppppppllllllppllplpllllpplpllpppppppllplplplpplpppppllppllpppppppppppppllpllllpppplppllpppllllpllllppplppllplllllppllpppllplpllppppppppppppllppppppppllpppppllpppppppplllllplpppllllplplpllpppppppppppppllllpllpplplllppllplllllplpppppllppplplpppppllppppppppllpppppplpllplpppppllllllplppllllppppppppppppppppppppppppppppppppppppppplllllllllppppplplpppppppppppppllpllppplplplllllplllpllppllpppppplllpplpllppllpplllllppppplplpplllllppllpllppllpllpppppppllppppppppppppppllpppppllppppppppppppppplllllplllpllppplllllllpppppppppppllpplllplllpppllppllpllppplpplpppppppppppppppppppppppppppppppppllllllllppppppppppppllpllppppplllplplppppllllpplplllllplplpppppppppllppppppllpllpppppppllllppplllllppplplllllllppllpppppllpppppplllllpppppppppllplplpppllppppplllplppplplpppppllppppppppllpllppplppplppllpppppppllpppppllpppppllpllppplllppppplplplpppppllpppppplllpplpllpppppplpplppllpppppppllpllppplllpppppllppppllppppppppppllllpppppppllppppllppppppllpppllpllppplplpppllpllppppppppppppppplllpllpppppllplllpplpppppllpppllpllplllplpppllllppppllppllpppppppllpplpllplppppllpppppllpppppppppppppppppppppppppppppppppppppppppppppllppppllppppppppppppppppppppppllpppppppppppppppppllpllppppplpppplpppppllpppppppppppplplppllpppppplllpppppllpppppppppppppppppppppplplppppllpppppppllppppppppllppllppppllppplplppllpppppppppppppllpppppppppppllppppppppppppppppppppppppppppppppppppllpllllpppllllpppppppppppppllppppppppppppppllppplplppppppppppppppppppppppppppppppppppppppppppppppppppppppppppllppppppppppppllpppllpllllpppppppppplllpppppllpplllpppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppaGreekLangModelachar_to_order_mapaprecedence_matrixatypical_positive_ratiof���s�?akeep_english_letteracharset_nameuISO-8859-7alanguageaGreekaLatin7GreekModeluwindows-1253aWin1253GreekModelu<module chardet.langgreekmodel>u.chardet.langhebrewmodelo>a__doc__u/usr/lib/python3/dist-packages/chardet/langhebrewmodel.pya__file__a__spec__aoriginahas_locationa__cached__Tl�pppppppppl�l�pl�l�pppppppppppppppppl�pppppppppppppppl�pppppppppl�pppppplEl[lOlPl\lYlalZlDlolplRlIl_lUlNlylVlGlClflklTlrlglsl�pppppl2lJl<l=l*lLlFl@l5lil]l8lAl6l1lBlnl3l+l,l?lQlMlblKlll�ppppl|l�l�l�l�l(l:l�l�l�l�l�l�l�l�l�l�lSl4l/l.lHl l^l�lql�lml�l�l�l�l"ltl�lvldl�l�lulwlhl}l�l�lWlcl�ljlzl{l�l7l�l�lel�l�lxl�l0l'l9l�ll;l)lXl!l%l$lll#l�l>ll�l~l�l�l&l-l�l�l�l�l�ll�l�l�l�l�l�l�l	llllllllllllllllll
lllllll
ll�l�l�l`l�aWIN1255_CHAR_TO_ORDER_MAPTllpppppppppllppppppppppllllllllplllllplllllplllpplpppllppllplplllppppppppppppppppppppppppppplppplllllllpllppppllllpppppllppppplllpppppppppppppppppppppppppppplpplllllplpllppllllllpppppllppppppplppppppppppppppppppppppppllllplllllplplplplpppllllppllppppplllpllppppppppppppppppppppppllplpppllllllpplpllppppllpppppppllppppplllpppppppppppppppllplllpllppllppplllplpllllppppppllppllpppppppplllpppppppppppppppppppppppplllppppllllpplpllpppppppppppppllppppplllpppppppppppppppppppppppppllllppllllpplplllpppllllpppppllppppplllppppppppppllpppppppppppplllllppllllpplpllppppllpppppppllpppplpllppppppppllppllpppppppppppplllllllllpplplllpppllllpppppllppllplllpppppppppppppppppplllllplllllppllppppllllppplllppppppppppppppllllppppppppppppppllpllplpllpllpppppllppppllppppllpppppppppppppppplpppppppppppppppppppppppplpppppplllllplppppppppppppppppppppppplllppppppppllppllllpllppplllllllllllllpplplllpppllllpppppppppllplllppppppppllppllplplllllplllpllppllllpplplllpppllppppllpllppllplllppppppppppppllppllplpplppplllpplllllplppppppppppppppppppppppplllppppppppppppplplpplllppllpllpppllllpplpllppppllpppppppppppppplllppppppppppllppllllpllplpllppppplllllllpllppppllppppllpllppppplllpppppllllpllpppllllpppplppppppllllllllpppppppllpppppppllppppplllppppppppllllppppppllllllllllllplllplllpllppppllpppppppllppppplllppppppppllppplllllpplllpllllpppllpppplpppppppllppppllpllppppppplppppppppplllppllppllppplplpppppllllpllppppppppppppppppllppppplllpppppllpplplpplllllllppplllpplplllppplpllppppppppppppppppppppllllppppppppppppppppppplllppllppppllllppppllppppllllpppppppppppppplppppllpllllpppllllplpllplpllppplllllplplplppppppppppppllpppppllllplplllplplppllppppppppppppllplppppppppllpppppppppppppppppppppplllllllpllplpplpllpplpppppllppppppppppppllppppppppppppppppppppppllpplplllllppppppppllpppppppppppppppppppllpppppppppppppllpppppppllpllppppppllpllplpppppppllpllppllllppplpllppllppppppppppppppplllppllppppppppppppppllpllpplppllllppppppppppppppppppppppppppppppplppppppppppllppppppppppllplpppppppplplppppppppppppppppppppppppppllllppppppppppppppppppppplllllllppppllppppppppppppppppppppppppppllppppppppplplpppllppplpppppppppppppppppppppppppppppppllpppppppppllplppppllpplplppppppllplllppplpllpllpppppppppppppppppppppppppplllpppllpllllpppppppppplllppppppppllppppppplplppplplplplpppppllpllplppppppppppllpppplllllppplppppppllpppppppppppppppppppppppppppllllppppppppplllllpllppllllllllllpppllppppppppppppppppppppppppppplllppllppppppplllpppppllllplllllpppllppppppppppppppppppppppppppllllpppppppppllpppppppppppppplpplllllplpppppppppppppppppppppppllllppllpppppppppllllppllpppppppppppppppppppppppppppppppppppppppppllppppppllplllpllpllppppllpppppppppppppplllpplllpplpllplpppplplpplpplllppllllllpllpppllllplpppppppppppppppppppppppppppppppppppppllppppppppppppppppllppppppppppppllllppppllllplllplplplllllppllllllppppppppppppppppppppppppppppppppppppppllllllllplppppplllppllplllppppppppppppppppppppppppppppppppllppppllllplllplpplplpllppllplppllllppllllppplppllllppppppplpllllllllppppppppppppppppppppppppplllplllppplppppllppplplpppppppppppppppppppppllpppppppppppppppppplppppppppllllpppppppppplllpppppppppppppppplpplppplppllplllpplpllllllllllpllppppllpppppppppppppppppppppppppppppppppppppppppppppppllpppppppppppppppppppppppppppppppppppppplllpplllplpllpllllpplpllplpllpllppllpppppllppppppppppppppppppppplllpllllpppllpllllpplpllplppppppppppppppppppppppppppppppppppppppllllplllplplllplllpplpllllllplplppppppppppppppppppppppppppppppppppllplpppplplllpllppplllplppppppppppppppppppppppppppppppppppppppppllplpppllpplllplppllllplpllppppppppppppppppppppppppppppppppppplllpllllplplllplllpplplllplppllpllplllpppppllppllppppppppppppppppppllpppppppppppppppppppllppppppppppppppppppppppppppppppppppppppllllplllplplllllllpplpllllppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppllpppppllpllllplllllpllpppllppllppppllppppppppppppppppppppppppppppppppllpllpllpllpllpppppppppppppppppppppppppplllpllllplpplllpllppllplplpllpppppppppppppppppppppppppppllpppppplllplpllpllpppplllppplllllppllpppllpppppppppppllplppppppppppppppppppppppppppppppppppppppllppppppppppppppppppppppppppppppppppppppppllllpppplpppplllpplplpaHEBREW_LANG_MODELachar_to_order_mapaprecedence_matrixatypical_positive_ratiofC��|�?akeep_english_letteracharset_nameuwindows-1255alanguageaHebrewaWin1255HebrewModelu<module chardet.langhebrewmodel>u.chardet.langthaimodel8Ka__doc__u/usr/lib/python3/dist-packages/chardet/langthaimodel.pya__file__a__spec__aoriginahas_locationa__cached__Tl�pppppppppl�l�pl�l�pppppppppppppppppl�pppppppppppppppl�pppppppppl�ppppppl�ljlkldl�l�l�lel^l�l�lllmlnlol�l�l�lYl_lplql�l�l�l�l�pppppl@lHlIlrlJlsltlflQl�lulZlglNlRl`l�l[lOlTlhlilalbl\l�l�ppppl�l�l�l�l�lXl�l�l�l�l�l�l�lvl�l�l�l�lclUlSl�l�l�l�l�l�l�l�l�l�l�l�lll�ll�lKlll4l"l3lwl/l:l9l1l5l7l+lll,ll0llll'l>ll6l-l	lll=ll�ll*l.lllLllBl?ll
ll$ll
l(ll l#lVl�l�l�l�l�lll)ll!l�l2l%lllClMl&l]l�l�lDl8l;lAlEl<lFlPlGlWl�l�l�l�l�l�aTIS620CharToOrderMapTlllppplplpllpllppppppplplppllpppllplppllllpllpllllppplllllpllllplllplllplpllpllppppppppllllllpplllllpppllllllpllpllplpllpppppplplppllpppppppppplpppppplpllllplppllllllplplllpllllllllpllpppppplplplplppplllpppplppplplplplpllllplplllllplplllllplllllpllpppppllllppppplplppplllplplpllppplpllllpllllllllllpllplpllllppllpppppppplppllllplplllplllplllppllppppllllplplplllllpllllpplplpppplllpllplpllpllplpllpllplllplppllppllplpllllllpllllpllpplppplppppppppplllpllpllplplllllllppplllplppllplpllllllplllplllpppppllpllpppppppplplllllllpllllllllllplllllpllpppllplpppllllllpplllllplpppppppplllpllplllppllpllpllllpllllppllpplplllllpplllppppllllplppppppppllpllplllpppplplllplpppplpplpllpppllpllpppppplllppllllppppllppppppplllppplplllplllpllpppplplpplpplplpllpppllpllpllpllplllllpppppplllpppllppppppllllplpllppllplllllllpllpplpllllplpppplplpllppppppppllllllppllllplllllpllllplplllllpllplppplllplppppppllpppppppppppplppplllplplllllplllplllplllpppplllplllllllllppllllpppppppppppllplplplllpplllllllllpppllpllllllllllpllppllllplplppppppppppppppppllpllllpllllllplllllppllppllplllplpplllllpppllpllllllpppppppppppplppplllplplllllllllpllllppllppplllllpllllllplplpppplplllpppppppllpppplllllplplllplllplplllpllpppllllpllllllplllppppppppppppppppplppllllpllllpllllpllpllllpppppppllplppplpplplplpppppppppppppppplllplplllplllpllplllplllllllpppplllllpplppplplplpppllpppppppppppplpppppppllplllllllpllllplllpppplplplllllpppppppllppppppppppppppplllppllpllllllllplpppplllppllpllllllpppllllplplpllppppppppppppplllllllpllpllplllplllpplplplllppllpllpplpllllllppllppppllpppppppllllplllplpllllllllllpllllllllpppllplllllpllllpppppppppppppppppppllllppllllllpllllpllpppllpplllllpllppllplpppllllpllllpppplllpplllppplpppplllpplllplllllllpllppppllllllppllppllpppppppppppppppppppppllllplllppppppllpllppppppppppppllpppppppppppppppppppppppppppppplllllplllplllpllpplllplpplpplplpllpppllpppllppppppppllpppppppppppllllppppppppplllllplpllllppppppllpppppppppppppppppppppppppppplplllllllllllpllllpllllplppplllpllppplplllpllppppppppppppppppppplpppllllpplllppppplppplllllllpppppllllllplpllpppllpppppppppppllllllpllpllpllpllpllllpllplllppplllllpppllllpllplpllpppppllpppppppppllpllppllpllllllpplllppllpppllppllpppppppppppppppllpllpppppppplplllllpllpllllllllppppllppllpppllplpplppppppppllpppppppppppppppllllllpplpllpllllpplplppplllllpppppppppppllllppllppppppppppppppplllllllpllllllllllpppllpllpllplplllppppllllplplppllpppppppppppppllpllllplpllllllllllllppllllppllpllppppppppppppllppppppppppppppplllplplppllllllpllpplllplpplllppllplpppppllpllppppppppllpppppllllpplllllppplppplllllpplllppllppppppllpppppppppppppppppppppppppppppppplpppllpppppppppllpppppppppppppppppppppppppppppppppppppppppplllllplppllppplllllpllppllllpplplpllppppppllpllpppplplllpppppppplplplllpppllllllpplplppllllllplppllllpllllllpplllppppppppppppppplpllpllpppplpllpppllpllllppplplppllpppllpppppllppppppllppppppppplplppplllpllpppplllplppllllllplllllllpppllppppppppppppppppppppppllllppppppllppllppppppplplpppppllppllpllpppppppppppppppppppppppplpllppppplllllplllpllpllppppppppppppppllpplllllppllpppppplllpppplplplpllplllllppllplpllplllplpplppllpppppppppppllpllpppppppppppplppllpppllpppllppppppppllpppppppllppppllpppppppppppppppppppppppplllplplppllppppppllpppppppppppppppppppllppllppppppppppppppppppppllpppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppplplllllllplplllllpllpppllppllpppllplllplllpppppppppppppppppppppppllpppppplpllplllllppplplpppppplllpppppppppppppppppppppppppppppppppppppppppppppppppppppllpppppppppppppllppppppppppppppppppppppppllllllpllpllplpllplplppllpplplppllllppppppppppppppppppllppppppppllpllppppppppppppppppppllppppppllpppppppppppppppppppppppppppppppllppppppppppppppppppppppppppppppppppppppppppppppppppppppllplplppllpppppppppppllppppppppllpppppppppppppppppppppppppppppppppppppppllpppllppppppllppppppllllpppppppppppppppppppppppppppppppppppppppllppppppppppppppppppppppppppppppppppppppppppppppppppppppllplllppllppppppppppppppppppppppppppppppppppppppppppppppppppppppllpllpppllpppppppllpppllpppllpppppppppppppppppppppppppllpppppppppppppppppplplplllpllpllpppppppppppppppppppppppppllppppppppppppppppppppppllpppppppppppppllpppppppppppppppppppppppppppppppppppppppppppppppaThaiLangModelachar_to_order_mapaprecedence_matrixatypical_positive_ratiof��@��?akeep_english_letteracharset_nameuTIS-620alanguageaThaiaTIS620ThaiModelu<module chardet.langthaimodel>u.chardet.langturkishmodel�Qa__doc__u/usr/lib/python3/dist-packages/chardet/langturkishmodel.pya__file__a__spec__aoriginahas_locationa__cached__Tl�ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppll%l/l'll4l$l-l5l<ll1ll.l*l0lEl,l#ll3l&l>lAl+l8l�ppppplllllllllll
ll
llll@lll	ll l9l:lll�ppppl�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�lel�l�l�l�l�l�l�l�ljl�l�l�l�l�l�l�ldl�l�l�l�l�l�l�l�l^lPl]l�lil�l�l?l�l�l�l�l�ll~l}l|lhlIlclOlUl{l6lzlbl\lylxl[lglwlDlvlulaltlsl2lZlrlqlplol7l)l(lVlYlFl;lNlGlRlXl!lMlBlTlSlnlKl=l`llClmlJlWlfl"l_lQlllLlHllllkaLatin5_TurkishCharToOrderMapTlllppllpppppppllplpllpllppppllllplllplplppllplppplpppppplplpllplllplpllpppppplllllpllpllppppllllplplllllppppplppplpppppplplppllllpllpllpppppplllplpllplllpppllllplplppllppplplllllppllpppllppppllpppppllpppppppllpllllllpllplpplpplllpllplplppppppppppplllplllpllppllplllpppppplllllllllllplllplpllppppppppppllpppppppppppllllppllllpllpppppplllpllllllplppllllllllppppppppppppppppppppppppppppplppppppppppppppllppllllllllpllpllllpllpppppllpllpppppppplpplllpllppllpllpppllppllplplllplllplpplpplpppppppppppppppplplppllllllpllppllppppppllppllllllllpllllllplpplpllppppppppppppppppppllllpppplppllppppppllpplllpllllplppplppllplpppppppppppppppppppppllllllpplpppppplppplllpllplplplplplllpllllllppllppppppppppppppppllllpppllppllpplllplllpllllplpllpllllppllllppppppppllpppppppppppllllllpplppllplllpplppplllpllllplpllllplplpllpppppppppppppppppppppllllplllplpllpppppplplllpllplllpllllllllpppppppppllppppppppppppllppppplpplpllpppppppplpllllpllllppllllllppppppppplllllllpppppplplpllpllpplllpllpllplplllpllpllllppllllplllllpplplllplllpplllplppllppppllllpllpppplllppplllllllllllllllllpppppppllppppppppppppppppppppplppllplpllplllllllllllpplllplpplpplppppppppppppllppppppplplpllpplppllplplplplplllllllllplplllpplpllppppppppppppppppppppppppppppplppllllllpllplplllplllllplplplllplllpllllppppllpplplllllpppppllplppllllpllpplpplllpplpllllpplppllllpppppppppppppppppppppppppllpplppppplllplpppllllpplplplllplplppplpllpppppllpppppppppppppllllpplpllpllppppplpllllllllpppppplllllllllppplplpllplllpllpllllpllpplllplppllppllllplpppppppppllllppppllppppppppppppppppppppppppppppplpplppllllpllppllllllllplpppplpllllpppppppppppppllppppppllllllpplppllpppplllllplllpppppplllplpppllpppppppppppppppppppppppllppppplpplplpllpppplpllllplplplllllppppllpppppppppppppppppppppppllpppplpplpllpplllplplllpppllpllpllpplplpllpllppppppppppppppppppppppplppplpllpppplppllllllplplllpppppplpllllllllpllllpllpllllllllppllllppllppllpllplllllppllppllpllllpllpppppppppppppppppppppppppppppplpllplpllpllplplllplplllllpplllpllllllpllpppllllplllllllpppppppplpplllllllpplllllllllllplllplpplllppppppppppppppppppppppplplllpplppllplpllllllllllppllppllllpppplllpppppppppppppppppppppppppppppppplpllpllplplpppllllllppllpllllplppppllpppppppppppppppppppppppplppllpllllppplplllpllllllpllplllllplppplllpllpppllllllllllpppppplppllpllplplplplllplplllppppllppplllllllllplllllppllplllpppppppplppllllllpplplplllpllpllplllllllplllllllllplllllplllplllpplplpppllllllppppppplllllpllpllppppllpppplplpllllpllpplllllllpppppppppplpplplllplllllllllpllllllpppllllplllplpllllpllplpllpllllpppllpppllplplplpppppllpplppppllppppllllpllpppppllppppppllppllllppppppppppplpllllpllplplllllpplplplpplllllllpllpplllpplpllppplllplppppppplpllllpplpppllllllllplplplllplllplplllplplllllpllpllppllllllppplpllplllppppplllllpllpllppppllllpllplplllllplplpllppplllpppppppplpllpllpppllplplplpllpllllppllllpplplplllllplpllllllllpplplplppplpllplplpplpllplllllllllppppllllplplppppllpllpplplllllpppppppppplppllppllpllplllllpllpllppllllllplplplllllplplpllpppllplpppppppplppllllllplpllplllpllplllllpllpppplppplllpllppplpplpplllppllpppplppllplllpllpllllpppppllllppllppplplppllplllpllllpplllppppppppppllllppppppllplppplpllpllppppllllppllplllllplplplllllllllppllppppppplplllppplplpllllplllpppllplllppllllpppplllllppppppppllpppppppllplllllllplllpllllpplllplllpllllllllllplplplllpllpllppppppppppplpplllllppllplllllpllpllppllllllppppllllpllppplllllpplllppppppppppplpllplpllpppplplllpplllpplppplpllllppllpllllplllplllllpppppppllplpllpppppplplllpllpllppppllppplllppppllppppppllppllllpppppppppppllllpllplllpllppllllppppllppplllllllplpllllllplpllllllppppppplppllplppllpplllllpllpllppplllllppllppllpllpppppllllllpppppppppplppplllpplppplllpllppllpllppppppppppppppppppppppppppppppllpppppplpllllppllllppllpllppppppllppppppppppppppppppppppppllppppllppppllpllplllllplplpppllplplpllpppllpppppppppppppppppppppppppppppllpplpplppllppppplplplppppllppppppppppppllppllppppppppppppppppppppppppplplppllppllpppppplplppppppppppppppppppppppppppppppppppppppppplpplllllppppplplppppppllllppppppppppppppppppppppppppppppllpppllpppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppllppppppppplplppppppppppppppppppppppppppppppppppppppppppppppppaTurkishLangModelachar_to_order_mapaprecedence_matrixatypical_positive_ratiof�X4���?akeep_english_letteracharset_nameuISO-8859-9alanguageaTurkishaLatin5TurkishModelu<module chardet.langturkishmodel>u.chardet.latin1proberlOaLatin1Probera__init__a_last_char_classa_freq_counteraresetaOTHLlaFREQ_CAT_NUMaCharSetProberafilter_with_english_lettersaLatin1_CharToClassaLatin1ClassModelaselfaCLASS_NUMlaProbingStateaNOT_MEa_statelastatef{�G�z�?Zlf4@f\��(\�?a__doc__u/usr/lib/python3/dist-packages/chardet/latin1prober.pya__file__a__spec__aoriginahas_locationa__cached__acharsetproberTaCharSetProberaenumsTaProbingStatelaUDFlaASCaASSaACVlaACOlaASVlaASOlT@lpppppppplppppppllppppppllpplplpllppllllllpppppplllllppllllllplpametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uchardet.latin1probera__module__a__qualname__uLatin1Prober.__init__uLatin1Prober.resetapropertyuISO-8859-1acharset_nameuLatin1Prober.charset_nameualanguageuLatin1Prober.languageafeeduLatin1Prober.feedaget_confidenceuLatin1Prober.get_confidencea__orig_bases__u<module chardet.latin1prober>Ta__class__Taselfa__class__TaselfTaselfabyte_strwcachar_classafreqTaselfatotalaconfidence.chardet.mbcharsetprober�GaMultiByteCharSetProbera__init__Talang_filteradistribution_analyzeracoding_smLlpa_last_chararesetaselfanext_stateaMachineStateaERRORaloggeradebugu%s %s prober hit error at byte %sacharset_namealanguageaProbingStateaNOT_MEa_stateaITS_MEaFOUND_ITaSTARTaget_current_charlenllafeedl��������astateaDETECTINGagot_enough_dataaget_confidenceaSHORTCUT_THRESHOLDa__doc__u/usr/lib/python3/dist-packages/chardet/mbcharsetprober.pya__file__a__spec__aoriginahas_locationa__cached__acharsetproberTaCharSetProberaCharSetProberaenumsTaProbingStateaMachineStateametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uchardet.mbcharsetprobera__module__u
    MultiByteCharSetProber
    a__qualname__TnuMultiByteCharSetProber.__init__uMultiByteCharSetProber.resetapropertyuMultiByteCharSetProber.charset_nameuMultiByteCharSetProber.languageuMultiByteCharSetProber.feeduMultiByteCharSetProber.get_confidencea__orig_bases__u<module chardet.mbcharsetprober>Ta__class__Taselfalang_filtera__class__TaselfTaselfabyte_strwiacoding_stateachar_lenTaselfa__class__u.chardet.mbcsgroupprober�9aMBCSGroupProbera__init__Talang_filteraUTF8ProberaSJISProberaEUCJPProberaGB2312ProberaEUCKRProberaCP949ProberaBig5ProberaEUCTWProberaprobersareseta__doc__u/usr/lib/python3/dist-packages/chardet/mbcsgroupprober.pya__file__a__spec__aoriginahas_locationa__cached__acharsetgroupproberTaCharSetGroupProberlaCharSetGroupProberlautf8proberTaUTF8ProberasjisproberTaSJISProberaeucjpproberTaEUCJPProberagb2312proberTaGB2312ProberaeuckrproberTaEUCKRProberacp949proberTaCP949Proberabig5proberTaBig5ProberaeuctwproberTaEUCTWProberametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uchardet.mbcsgroupprobera__module__a__qualname__TnuMBCSGroupProber.__init__a__orig_bases__u<module chardet.mbcsgroupprober>Ta__class__Taselfalang_filtera__class__u.chardet.mbcssm3fa__doc__u/usr/lib/python3/dist-packages/chardet/mbcssm.pya__file__a__spec__aoriginahas_locationa__cached__aenumsTaMachineStatelaMachineStatelTlppppppppppppplplppppppppppllppppppppppppppppppppppppppppppppppplppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppllpppppppppppppppppppppppppppppppplppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppplaBIG5_CLSaERRORaSTARTlaITS_MEaBIG5_STTllpllaBIG5_CHAR_LEN_TABLEaclass_tableaclass_factorlastate_tableachar_len_tableanameaBig5aBIG5_SM_MODELTlppppppppppppplplppppppppppllpppppppppppppppppppppppppppppppppppplpppppppppppppppplpppppppplppppplppppppppppppppppppppppppplppppllppppppppppppppppppppppppppppppplppppppppppplpplpppppppppppppppppppppl	lpllpppppppppppppppppppppppppppppppppppppppppppppppppppplaCP949_CLSllaCP949_STT
lllllplpllaCP949_CHAR_LEN_TABLEl
aCP949aCP949_SM_MODELTlppppppppppppplplppppppppppllppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppplppppppppppppplllpppppppppppppppplpppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppplpppppppppppppppppppppppppppppplaEUCJP_CLSaEUCJP_STTlpplllaEUCJP_CHAR_LEN_TABLEuEUC-JPaEUCJP_SM_MODELTlppppppppppppplplppppppppppllppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppplpppppppppppppppppppppppppppppppplppppppppppplpplppppppppppppppppppppppppllpppppppppppppppppppppppppppppppppppppppppppppppppppplaEUCKR_CLSaEUCKR_STTllllaEUCKR_CHAR_LEN_TABLEuEUC-KRaEUCKR_SM_MODELTlppppppppppppplplppppppppppllppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppplpppppppppppppllpppppppppppppppppllppppplplppppppppppppppppppppppplllpppppppppppppppppppppppppppppppppppppppppppppppppppppppppplaEUCTW_CLSaEUCTW_STTlpllpplaEUCTW_CHAR_LEN_TABLElux-euc-twaEUCTW_SM_MODELTlppppppppppppplplppppppppppllppppppppppppppppppplppppppppplppppplpppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppplllppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppplaGB2312_CLSaGB2312_STTllpppplaGB2312_CHAR_LEN_TABLEaGB2312aGB2312_SM_MODELTlppppppppppppplplppppppppppllppppppppppppppppppppppppppppppppppplppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppllpppplplpppppppppppppppppppppppplppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppplpppppppppppplpplpppppppppppplppaSJIS_CLSaSJIS_STTllpllpaSJIS_CHAR_LEN_TABLEaShift_JISaSJIS_SM_MODELTlpppppppppllpllppppppppppppllpppppppppppplpppplpppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppllaUCS2BE_CLSlaUCS2BE_STTlppllpaUCS2BE_CHAR_LEN_TABLEuUTF-16BEaUCS2BE_SM_MODELaUCS2LE_CLSaUCS2LE_STTlpppppaUCS2LE_CHAR_LEN_TABLEuUTF-16LEaUCS2LE_SM_MODELTlppppppppppppplplppppppppppllppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppplppplppplppppppppppppppppppppppplppppppppppppppppppppppppppppppplplpppppppppppppppppppppppppppppllpppppppppppl	lpl
lppppppll
pplllpaUTF8_CLSll	laUTF8_STTlllpppllpplplplpaUTF8_CHAR_LEN_TABLEluUTF-8aUTF8_SM_MODELu<module chardet.mbcssm>u.chardet.sbcharsetprober�]aSingleByteCharSetProbera__init__a_modela_reverseda_name_probera_last_ordera_seq_countersa_total_seqsa_total_chara_freq_chararesetl�LlaSequenceLikelihoodaget_num_categorieslacharset_namealanguageagetTalanguageakeep_english_letterafilter_international_wordsastateachar_to_order_maputoo many values to unpack (expected 2)aCharacterCategoryaCONTROLaselflaSAMPLE_SIZEaprecedence_matrixaorderaProbingStateaDETECTINGaSB_ENOUGH_REL_THRESHOLDaget_confidenceaPOSITIVE_SHORTCUT_THRESHOLDaloggeradebugu%s confidence = %s, we have a winneraFOUND_ITa_stateaNEGATIVE_SHORTCUT_THRESHOLDu%s confidence = %s, below negative shortcut threshhold %saNOT_MEf{�G�z�?f�?aPOSITIVEatypical_positive_ratiof�G�z��?a__doc__u/usr/lib/python3/dist-packages/chardet/sbcharsetprober.pya__file__a__spec__aoriginahas_locationa__cached__acharsetproberTaCharSetProberaCharSetProberaenumsTaCharacterCategoryaProbingStateaSequenceLikelihoodametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uchardet.sbcharsetprobera__module__a__qualname__l@lfffffff�?f�������?TFnuSingleByteCharSetProber.__init__uSingleByteCharSetProber.resetapropertyuSingleByteCharSetProber.charset_nameuSingleByteCharSetProber.languageafeeduSingleByteCharSetProber.feeduSingleByteCharSetProber.get_confidencea__orig_bases__u<module chardet.sbcharsetprober>Ta__class__Taselfamodelareversedaname_probera__class__TaselfT	aselfabyte_strachar_to_order_mapwiwcaorderamodelacharset_nameaconfidenceTaselfwrTaselfa__class__u.chardet.sbcsgroupprober?@aSBCSGroupProbera__init__aSingleByteCharSetProberaWin1251CyrillicModelaKoi8rModelaLatin5CyrillicModelaMacCyrillicModelaIbm866ModelaIbm855ModelaLatin7GreekModelaWin1253GreekModelaLatin5BulgarianModelaWin1251BulgarianModelaTIS620ThaiModelaLatin5TurkishModelaprobersaHebrewProberaWin1255HebrewModelaset_model_probersaextendareseta__doc__u/usr/lib/python3/dist-packages/chardet/sbcsgroupprober.pya__file__a__spec__aoriginahas_locationa__cached__acharsetgroupproberTaCharSetGroupProberlaCharSetGroupProberlasbcharsetproberTaSingleByteCharSetProberalangcyrillicmodelTaWin1251CyrillicModelaKoi8rModelaLatin5CyrillicModelaMacCyrillicModelaIbm866ModelaIbm855ModelalanggreekmodelTaLatin7GreekModelaWin1253GreekModelalangbulgarianmodelTaLatin5BulgarianModelaWin1251BulgarianModelalangthaimodelTaTIS620ThaiModelalanghebrewmodelTaWin1255HebrewModelahebrewproberTaHebrewProberalangturkishmodelTaLatin5TurkishModelametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uchardet.sbcsgroupprobera__module__a__qualname__uSBCSGroupProber.__init__a__orig_bases__u<module chardet.sbcsgroupprober>Ta__class__Taselfahebrew_proberalogical_hebrew_proberavisual_hebrew_probera__class__u.chardet.sjisproberRTaSJISProbera__init__aCodingStateMachineaSJIS_SM_MODELacoding_smaSJISDistributionAnalysisadistribution_analyzeraSJISContextAnalysisacontext_analyzeraresetacharset_nameaselfanext_stateaMachineStateaERRORaloggeradebugu%s %s prober hit error at byte %salanguageaProbingStateaNOT_MEa_stateaITS_MEaFOUND_ITaSTARTaget_current_charlenla_last_charlafeedlll��������astateaDETECTINGagot_enough_dataaget_confidenceaSHORTCUT_THRESHOLDamaxa__doc__u/usr/lib/python3/dist-packages/chardet/sjisprober.pya__file__a__spec__aoriginahas_locationa__cached__ambcharsetproberTaMultiByteCharSetProberaMultiByteCharSetProberacodingstatemachineTaCodingStateMachineachardistributionTaSJISDistributionAnalysisajpcntxTaSJISContextAnalysisambcssmTaSJIS_SM_MODELaenumsTaProbingStateaMachineStateametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uchardet.sjisprobera__module__a__qualname__uSJISProber.__init__uSJISProber.resetapropertyuSJISProber.charset_nameaJapaneseuSJISProber.languageuSJISProber.feeduSJISProber.get_confidencea__orig_bases__u<module chardet.sjisprober>Ta__class__Taselfa__class__TaselfTaselfabyte_strwiacoding_stateachar_lenTaselfacontext_confadistrib_confu.chardet.universaldetector>�a_esc_charset_probera_charset_probersaresultadonea_got_dataa_input_statea_last_charalang_filteraloggingagetLoggerTuchardet.universaldetectoraloggera_has_win_bytesaresetDaencodingaconfidencealanguagenZnaInputStateaPURE_ASCIIcu
        Reset the UniversalDetector and all of its probers back to their
        initial states.  This is called by ``__init__``, so you only need to
        call this directly in between analyses of different documents.
        abyte_strastartswithacodecsaBOM_UTF8DaencodingaconfidencealanguageuUTF-8-SIGf�?uaBOM_UTF32_LEaBOM_UTF32_BEDaencodingaconfidencealanguageuUTF-32f�?uTb��DaencodingaconfidencealanguageuX-ISO-10646-UCS-4-3412f�?uTb��DaencodingaconfidencealanguageuX-ISO-10646-UCS-4-2143f�?uaBOM_LEaBOM_BEDaencodingaconfidencealanguageuUTF-16f�?uaencodingaHIGH_BYTE_DETECTORasearchaHIGH_BYTEaESC_DETECTORaESC_ASCII:l��������nnaEscCharSetProberafeedaProbingStateaFOUND_ITacharset_nameaconfidenceaget_confidencealanguageaMBCSGroupProberaLanguageFilteraNON_CJKaappendaSBCSGroupProberaLatin1ProberaWIN_BYTE_DETECTORu
        Takes a chunk of a document and feeds it through all of the relevant
        charset probers.

        After calling ``feed``, you can check the value of the ``done``
        attribute to see if you need to continue feeding the
        ``UniversalDetector`` more data, or if it has made a prediction
        (in the ``result`` attribute).

        .. note::
           You should always call ``close`` when you're done feeding in your
           document if ``done`` is not already ``True``.
        adebugTuno data received!Daencodingaconfidencealanguageaasciif�?uZamax_prober_confidenceamax_proberaMINIMUM_THRESHOLDalowerTuiso-8859aISO_WIN_MAPagetagetEffectiveLevelaDEBUGTuno probers hit minimum thresholdaCharSetGroupProberaprobersaselfu%s %s confidence = %saproberu
        Stop analyzing the current document and come up with a final
        prediction.

        :returns:  The ``result`` attribute, a ``dict`` with the keys
                   `encoding`, `confidence`, and `language`.
        u
Module containing the UniversalDetector detector class, which is the primary
class a user of ``chardet`` should use.

:author: Mark Pilgrim (initial port to Python)
:author: Shy Shalom (original C code)
:author: Dan Blanchard (major refactoring for 3.0)
:author: Ian Cordasco
a__doc__u/usr/lib/python3/dist-packages/chardet/universaldetector.pya__file__a__spec__aoriginahas_locationa__cached__lareacharsetgroupproberTaCharSetGroupProberlaenumsTaInputStateaLanguageFilteraProbingStateaescproberTaEscCharSetProberalatin1proberTaLatin1ProberambcsgroupproberTaMBCSGroupProberasbcsgroupproberTaSBCSGroupProberTOobjectametaclassa__prepare__aUniversalDetectora__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uchardet.universaldetectora__module__u
    The ``UniversalDetector`` class underlies the ``chardet.detect`` function
    and coordinates all of the different charset probers.

    To get a ``dict`` containing an encoding and its confidence, you can simply
    run:

    .. code::

            u = UniversalDetector()
            u.feed(some_bytes)
            u.close()
            detected = u.result

    a__qualname__f�������?acompileTc[�-�]Tc(|~{)Tc[�-�]Duiso-8859-1uiso-8859-2uiso-8859-5uiso-8859-6uiso-8859-7uiso-8859-8uiso-8859-9uiso-8859-13uWindows-1252uWindows-1250uWindows-1251uWindows-1256uWindows-1253uWindows-1255uWindows-1254uWindows-1257aALLa__init__uUniversalDetector.__init__uUniversalDetector.resetuUniversalDetector.feedacloseuUniversalDetector.closea__orig_bases__u<module chardet.universaldetector>Ta__class__Taselfalang_filterT	aselfaprober_confidenceamax_prober_confidenceamax_proberaproberacharset_namealower_charset_nameaconfidenceagroup_proberTaselfabyte_straproberTaselfaproberu.chardet.utf8proberNJaUTF8Probera__init__aCodingStateMachineaUTF8_SM_MODELacoding_sma_num_mb_charsaresetlaselfanext_stateaMachineStateaERRORaProbingStateaNOT_MEa_stateaITS_MEaFOUND_ITaSTARTaget_current_charlenllastateaDETECTINGaget_confidenceaSHORTCUT_THRESHOLDlf�G�z��?aONE_CHAR_PROBf�?a__doc__u/usr/lib/python3/dist-packages/chardet/utf8prober.pya__file__a__spec__aoriginahas_locationa__cached__acharsetproberTaCharSetProberaCharSetProberaenumsTaProbingStateaMachineStateacodingstatemachineTaCodingStateMachineambcssmTaUTF8_SM_MODELametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uchardet.utf8probera__module__a__qualname__f�?uUTF8Prober.__init__uUTF8Prober.resetapropertyuutf-8acharset_nameuUTF8Prober.charset_nameualanguageuUTF8Prober.languageafeeduUTF8Prober.feeduUTF8Prober.get_confidencea__orig_bases__u<module chardet.utf8prober>Ta__class__Taselfa__class__TaselfTaselfabyte_strwcacoding_stateTaselfaunlike.chardet.versioneu
This module exists only to simplify retrieving the version number of chardet
from within setup.py and from chardet subpackages.

:author: Dan Blanchard (dan.blanchard@gmail.com)
a__doc__u/usr/lib/python3/dist-packages/chardet/version.pya__file__a__spec__aoriginahas_locationa__cached__u3.0.4a__version__w.aVERSIONu<module chardet.version>u.colorama.ansi��aCSIwmaOSCu2;aBELwJwKastartswithTw_acode_to_charswAwBwCwDw;wHu
This module generates ANSI character codes to printing colors to terminals.
See: http://en.wikipedia.org/wiki/ANSI_escape_code
a__doc__u/usr/lib/python3/dist-packages/colorama/ansi.pya__file__a__spec__aoriginahas_locationa__cached__u]waset_titleTlaclear_screenaclear_lineTOobjectametaclassla__prepare__aAnsiCodesa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucolorama.ansia__module__a__qualname__a__init__uAnsiCodes.__init__a__orig_bases__aAnsiCursorTlaUPuAnsiCursor.UPaDOWNuAnsiCursor.DOWNaFORWARDuAnsiCursor.FORWARDaBACKuAnsiCursor.BACKTlpaPOSuAnsiCursor.POSaAnsiForelaBLACKlaREDl aGREENl!aYELLOWl"aBLUEl#aMAGENTAl$aCYANl%aWHITEl'aRESETlZaLIGHTBLACK_EXl[aLIGHTRED_EXl\aLIGHTGREEN_EXl]aLIGHTYELLOW_EXl^aLIGHTBLUE_EXl_aLIGHTMAGENTA_EXl`aLIGHTCYAN_EXlaaLIGHTWHITE_EXaAnsiBackl(l)l*l+l,l-l.l/l1ldlelflglhliljlkaAnsiStylelaBRIGHTlaDIMlaNORMALaRESET_ALLaForeaBackaStyleaCursoru<module colorama.ansi>Ta__class__TaselfwnTaselfwxwyTaselfanameavalueTamodeTacodeTatitleu.colorama.ansitowin32�a_StreamWrapper__wrappeda_StreamWrapper__convertora__enter__a__exit__awriteaPYCHARM_HOSTEDaosaenvironasysa__stdout__a__stderr__aisattyaclosedawrappedaautoresetaStreamWrapperastreamastripaconvertaget_win32_callsawin32_callsaon_stderru
        True if this class is actually needed. If false, then the output
        stream will not be affected, nor will win32 calls be issued, so
        wrapping stdout is not actually required. This will generally be
        False on non-Windows platforms, unless optional functionality like
        autoreset has been requested using kwargs to init()
        awintermaAnsiStyleaRESET_ALLareset_allaBRIGHTastyleaWinStyleaDIMaNORMALaAnsiForeaBLACKaforeaWinColoraREDaGREENaYELLOWaBLUEaMAGENTAaCYANaWHITEaGREYaRESETaLIGHTBLACK_EXaLIGHTRED_EXaLIGHTGREEN_EXaLIGHTYELLOW_EXaLIGHTBLUE_EXaLIGHTMAGENTA_EXaLIGHTCYAN_EXaLIGHTWHITE_EXaAnsiBackabackawrite_and_convertaflushacall_win32TwmTlaStylelaconvert_oscaANSI_CSI_REafinditeraspanutoo many values to unpack (expected 2)aselfawrite_plain_textatextacursoraconvert_ansiagroupsu
        Write the given text to our wrapped stream, stripping any ANSI
        sequences from the text, and optionally converting them into win32
        calls.
        aextract_paramsaHfasplitTw;aparamsTlaJKmTlaABCDlu<genexpr>uAnsiToWin32.extract_params.<locals>.<genexpr>wm:lnnwJaerase_screenTaon_stderrwKaerase_lineaset_cursor_positionwAwBwCwDacursor_adjustaANSI_OSC_REwu02aset_titlea__doc__u/usr/lib/python3/dist-packages/colorama/ansitowin32.pya__file__a__spec__aoriginahas_locationa__cached__areaansiTaAnsiForeaAnsiBackaAnsiStyleaStyleTaWinTermaWinColoraWinStyleaWinTermawin32Tawindllawinapi_testawindllawinapi_testTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucolorama.ansitowin32a__module__u
    Wraps a stream (such as stdout), acting as a transparent proxy for all
    attribute access apart from method 'write()', which is delegated to our
    Converter instance.
    a__qualname__a__init__uStreamWrapper.__init__a__getattr__uStreamWrapper.__getattr__uStreamWrapper.__enter__uStreamWrapper.__exit__uStreamWrapper.writeuStreamWrapper.isattyapropertyuStreamWrapper.closeda__orig_bases__aAnsiToWin32u
    Implements a 'write()' method which, on Windows, will strip ANSI character
    sequences from the text, and if outputting to a tty, will convert them into
    win32 function calls.
    acompileTu?\[((?:\d|;)*)([a-zA-Z])?Tu?\]((?:.|;)*?)()?TnnFuAnsiToWin32.__init__ashould_wrapuAnsiToWin32.should_wrapuAnsiToWin32.get_win32_callsuAnsiToWin32.writeuAnsiToWin32.reset_alluAnsiToWin32.write_and_convertuAnsiToWin32.write_plain_textuAnsiToWin32.convert_ansiuAnsiToWin32.extract_paramsuAnsiToWin32.call_win32uAnsiToWin32.convert_oscTa.0wpu<module colorama.ansitowin32>Ta__class__TaselfaargsakwargsTaselfanameTaselfawrappedaconvertastripaautoresetaon_windowsaconversion_supportedTaselfawrappedaconverterTaselfacommandaparamsaparamafunc_argsafuncaargsakwargswnwxwyTaselfastreamTaselfaparamstringacommandaparamsTaselfatextamatchastartaendaparamstringacommandaparamsTaselfacommandaparamstringaparamsTaselfTaselfastreamastream_isattyTaselfatextTaselfatextacursoramatchastartaendTaselfatextastartaendu.colorama�a__doc__u/usr/lib/python3/dist-packages/colorama/__init__.pya__file__Lu/usr/lib/python3/dist-packages/coloramaa__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__ainitialiseTainitadeinitareinitacolorama_textlainitadeinitareinitacolorama_textaansiTaForeaBackaStyleaCursoraForeaBackaStyleaCursoraansitowin32TaAnsiToWin32aAnsiToWin32u0.4.3a__version__u<module colorama>u.colorama.initialise�.aAnsiToWin32aorig_stdoutareset_alluwrap=False conflicts with any other arg=Trueaorig_stderrawrapped_stdoutawrap_streamasysastdoutastderrawrapped_stderraconvertastripaautoresetawrapaatexit_doneaatexitaregisterainitaargsakwargsadeinitacolorama_textTaconvertastripaautoresetashould_wrapastreama__doc__u/usr/lib/python3/dist-packages/colorama/initialise.pya__file__a__spec__aoriginahas_locationa__cached__lacontextlibaansitowin32TaAnsiToWin32lTFnntacontextmanagerareinitu<module colorama.initialise>TaargsakwargsTaautoresetaconvertastripawrapTastreamaconvertastripaautoresetawrapawrapperu.colorama.win32�eu(%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d)adwSizewYwXadwCursorPositionawAttributesasrWindowaTopaLeftaBottomaRightadwMaximumWindowSizeaCONSOLE_SCREEN_BUFFER_INFOa_GetConsoleScreenBufferInfoabyrefa_GetStdHandleaSTDOUTaSTDERRa_winapi_testu<genexpr>uwinapi_test.<locals>.<genexpr>a_SetConsoleTextAttributeaCOORDllaGetConsoleScreenBufferInfoa_SetConsoleCursorPositionaadjusted_positionac_charaencodeawintypesaDWORDTla_FillConsoleOutputCharacterAavalueaWORDa_FillConsoleOutputAttributeu FillConsoleOutputAttribute( hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten )a_SetConsoleTitleWa__doc__u/usr/lib/python3/dist-packages/colorama/win32.pya__file__a__spec__aoriginahas_locationa__cached__l��������l�����actypesaLibraryLoaderaWinDLLawindllTEAttributeErrorEImportErroru<lambda>aSetConsoleTextAttributeawinapi_testaStructureaPOINTERa_COORDametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucolorama.win32a__module__ustruct in wincon.h.a__qualname__aSMALL_RECTa_fields_a__str__uCONSOLE_SCREEN_BUFFER_INFO.__str__a__orig_bases__akernel32aGetStdHandleaargtypesaHANDLEarestypeaBOOLaSetConsoleCursorPositionaFillConsoleOutputCharacterAaFillConsoleOutputAttributeaSetConsoleTitleWaLPCWSTRTtaFillConsoleOutputCharacteraSetConsoleTitleTa.0whTw_u<module colorama.win32>Ta__class__Tastream_idaattralengthastartahandleaattributeanum_writtenTastream_idacharalengthastartahandleanum_writtenasuccessTastream_idahandleacsbiasuccessTastream_idapositionaadjustaadjusted_positionasrahandleTastream_idaattrsahandleTatitleTaselfTahandleacsbiasuccessu.colorama.winterm�{awin32aGetConsoleScreenBufferInfoaSTDOUTawAttributesa_defaultaset_attrsa_forea_default_forea_backa_default_backa_stylea_default_stylela_lightlllaWinStyleaBRIGHTaBRIGHT_BACKGROUNDaset_consoleTaattrsaselfTaon_stderraget_attrsaSTDERRaSetConsoleTextAttributeadwCursorPositionwXlwYaSetConsoleCursorPositionaget_positionDaadjustFadwSizeaCOORDTlplaFillConsoleOutputCharacterw aFillConsoleOutputAttributeTlpaSetConsoleTitlea__doc__u/usr/lib/python3/dist-packages/colorama/winterm.pya__file__a__spec__aoriginahas_locationa__cached__uTawin32TOobjectametaclassa__prepare__aWinColora__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucolorama.winterma__module__a__qualname__aBLACKaBLUEaGREENlaCYANaREDlaMAGENTAlaYELLOWaGREYa__orig_bases__aNORMALll�aWinTerma__init__uWinTerm.__init__uWinTerm.get_attrsuWinTerm.set_attrsTnareset_alluWinTerm.reset_allTnFpaforeuWinTerm.foreabackuWinTerm.backTnFastyleuWinTerm.styleuWinTerm.set_consoleuWinTerm.get_positionaset_cursor_positionuWinTerm.set_cursor_positionTFacursor_adjustuWinTerm.cursor_adjustTlFaerase_screenuWinTerm.erase_screenaerase_lineuWinTerm.erase_lineaset_titleuWinTerm.set_titleu<module colorama.winterm>Ta__class__TaselfTaselfabackalightaon_stderrTaselfwxwyaon_stderrahandleapositionaadjusted_positionTaselfamodeaon_stderrahandleacsbiafrom_coordacells_to_eraseT	aselfamodeaon_stderrahandleacsbiacells_in_screenacells_before_cursorafrom_coordacells_to_eraseTaselfaforealightaon_stderrTaselfahandleapositionTaselfaon_stderrTaselfavalueTaselfaattrsaon_stderrahandleTaselfapositionaon_stderrahandleTaselfatitleTaselfastyleaon_stderr.cryptography.__about__�a__doc__u/usr/lib/python3/dist-packages/cryptography/__about__.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionLa__title__a__summary__a__uri__a__version__a__author__a__email__a__license__a__copyright__a__all__acryptographya__title__ucryptography is a package which provides cryptographic recipes and primitives to Python developers.a__summary__uhttps://github.com/pyca/cryptographya__uri__u2.8a__version__uThe cryptography developersa__author__ucryptography-dev@python.orga__email__uBSD or Apache License, Version 2.0a__license__uCopyright 2013-2019 {}a__copyright__u<module cryptography.__about__>u.cryptographyna__doc__u/usr/lib/python3/dist-packages/cryptography/__init__.pya__file__Lu/usr/lib/python3/dist-packages/cryptographya__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aabsolute_importadivisionaprint_functionucryptography.__about__Ta__author__a__copyright__a__email__a__license__a__summary__a__title__a__uri__a__version__a__author__a__copyright__a__email__a__license__a__summary__a__title__a__uri__a__version__La__title__a__summary__a__uri__a__version__a__author__a__email__a__license__a__copyright__a__all__u<module cryptography>u.cryptography.exceptionsoDaUnsupportedAlgorithma__init__a_reasonaInternalErroraerr_codea__doc__u/usr/lib/python3/dist-packages/cryptography/exceptions.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionaenumTaEnumlaEnumametaclassa__prepare__a_Reasonsa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucryptography.exceptionsa__module__a__qualname__aBACKEND_MISSING_INTERFACElaUNSUPPORTED_HASHlaUNSUPPORTED_CIPHERlaUNSUPPORTED_PADDINGlaUNSUPPORTED_MGFlaUNSUPPORTED_PUBLIC_KEY_ALGORITHMlaUNSUPPORTED_ELLIPTIC_CURVElaUNSUPPORTED_SERIALIZATIONlaUNSUPPORTED_X509l	aUNSUPPORTED_EXCHANGE_ALGORITHMl
aUNSUPPORTED_DIFFIE_HELLMANlaUNSUPPORTED_MACa__orig_bases__TEExceptionTnuUnsupportedAlgorithm.__init__aAlreadyFinalizedaAlreadyUpdatedaNotYetFinalizedaInvalidTagaInvalidSignatureuInternalError.__init__aInvalidKeyu<module cryptography.exceptions>Ta__class__Taselfamessageareasona__class__Taselfamsgaerr_codea__class__u.cryptography.hazmat._der�{adataacheck_emptyais_emptyuInvalid DER input: trailing datauInvalid DER input: insufficient dataasixaindexbytesl:lnnaread_byteluInvalid DER input: unexpected high tag numberl�luInvalid DER input: indefinite length form is not allowed in DERalengthlaselfuInvalid DER input: length was not minimally-encodedaread_bytesaDERReaderaread_any_elementutoo many values to unpack (expected 2)uInvalid DER input: unexpected taga__enter__a__exit__aread_elementTnnnuInvalid DER input: empty integer contentsuNegative DER integers are not supportedluInvalid DER input: integer not minimally-encodedaint_from_bytesabigainteger_typesuValue must be an integeruNegative integers are not supportedabit_lengthaint_to_bytesaint2byteaappendachunksaextendcajoina__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/_der.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionucryptography.utilsTaint_from_bytesaint_to_bytesl aCONSTRUCTEDaCONTEXT_SPECIFIClaINTEGERlaBIT_STRINGlaOCTET_STRINGlaNULLlaOBJECT_IDENTIFIERlaSEQUENCElaSETlaPRINTABLE_STRINGlaUTC_TIMElaGENERALIZED_TIMETOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucryptography.hazmat._dera__module__a__qualname__a__init__uDERReader.__init__uDERReader.__enter__uDERReader.__exit__uDERReader.is_emptyuDERReader.check_emptyuDERReader.read_byteuDERReader.read_bytesuDERReader.read_any_elementuDERReader.read_elementaread_single_elementuDERReader.read_single_elementaread_optional_elementuDERReader.read_optional_elementaas_integeruDERReader.as_integera__orig_bases__aencode_der_integeraencode_deru<module cryptography.hazmat._der>Ta__class__TaselfTaselfaexc_typeaexc_valueatbTaselfadataTaselfafirstasecondTatagachildrenalengthachildachunksalength_bytesTwxwnTaselfatagalength_bytealengthwiabodyTaselfaretTaselfwnaretTaselfaexpected_tagatagabodyTaselfaexpected_tagu.cryptography.hazmat._oid�Ca_dotted_stringasplitTw.aintnodesaappendluMalformed OID: %s (non-integer nodes)uMalformed OID: %s (insufficient number of nodes)luMalformed OID: %s (first node outside valid range)ll(uMalformed OID: %s (second node outside valid range)aObjectIdentifieradotted_stringu<ObjectIdentifier(oid={}, name={})>a_nameucryptography.x509.oidTa_OID_NAMESa_OID_NAMESagetuUnknown OIDa__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/_oid.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacryptographyTautilsautilsTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucryptography.hazmat._oida__module__a__qualname__a__init__uObjectIdentifier.__init__a__eq__uObjectIdentifier.__eq__a__ne__uObjectIdentifier.__ne__a__repr__uObjectIdentifier.__repr__a__hash__uObjectIdentifier.__hash__apropertyuObjectIdentifier._namearead_only_propertyTa_dotted_stringa__orig_bases__u<module cryptography.hazmat._oid>Ta__class__TaselfaotherTaselfTaselfadotted_stringanodesaintnodesanodeTaselfa_OID_NAMESu.cryptography.hazmat.backends�a_default_backenducryptography.hazmat.backends.openssl.backendTabackendlabackenda__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/backends/__init__.pya__file__Lu/usr/lib/python3/dist-packages/cryptography/hazmat/backendsa__path__a__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aabsolute_importadivisionaprint_functionadefault_backendu<module cryptography.hazmat.backends>u.cryptography.hazmat.backends.interfaces!%�a__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/backends/interfaces.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionaabclasixTOobjectametaclassa__prepare__aCipherBackenda__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aadd_metaclassaABCMetaucryptography.hazmat.backends.interfacesa__module__a__qualname__aabstractmethodu
        Return True if the given cipher and mode are supported.
        acipher_supporteduCipherBackend.cipher_supportedu
        Get a CipherContext that can be used for encryption.
        acreate_symmetric_encryption_ctxuCipherBackend.create_symmetric_encryption_ctxu
        Get a CipherContext that can be used for decryption.
        acreate_symmetric_decryption_ctxuCipherBackend.create_symmetric_decryption_ctxa__orig_bases__aHashBackendu
        Return True if the hash algorithm is supported by this backend.
        ahash_supporteduHashBackend.hash_supportedu
        Create a HashContext for calculating a message digest.
        acreate_hash_ctxuHashBackend.create_hash_ctxaHMACBackendu
        Return True if the hash algorithm is supported for HMAC by this
        backend.
        ahmac_supporteduHMACBackend.hmac_supportedu
        Create a context for calculating a message authentication code.
        acreate_hmac_ctxuHMACBackend.create_hmac_ctxaCMACBackendu
        Returns True if the block cipher is supported for CMAC by this backend
        acmac_algorithm_supporteduCMACBackend.cmac_algorithm_supportedacreate_cmac_ctxuCMACBackend.create_cmac_ctxaPBKDF2HMACBackendu
        Return True if the hash algorithm is supported for PBKDF2 by this
        backend.
        apbkdf2_hmac_supporteduPBKDF2HMACBackend.pbkdf2_hmac_supportedu
        Return length bytes derived from provided PBKDF2 parameters.
        aderive_pbkdf2_hmacuPBKDF2HMACBackend.derive_pbkdf2_hmacaRSABackendu
        Generate an RSAPrivateKey instance with public_exponent and a modulus
        of key_size bits.
        agenerate_rsa_private_keyuRSABackend.generate_rsa_private_keyu
        Returns True if the backend supports the given padding options.
        arsa_padding_supporteduRSABackend.rsa_padding_supportedu
        Returns True if the backend supports the given parameters for key
        generation.
        agenerate_rsa_parameters_supporteduRSABackend.generate_rsa_parameters_supportedu
        Returns an RSAPrivateKey provider.
        aload_rsa_private_numbersuRSABackend.load_rsa_private_numbersu
        Returns an RSAPublicKey provider.
        aload_rsa_public_numbersuRSABackend.load_rsa_public_numbersaDSABackendu
        Generate a DSAParameters instance with a modulus of key_size bits.
        agenerate_dsa_parametersuDSABackend.generate_dsa_parametersu
        Generate a DSAPrivateKey instance with parameters as a DSAParameters
        object.
        agenerate_dsa_private_keyuDSABackend.generate_dsa_private_keyu
        Generate a DSAPrivateKey instance using key size only.
        agenerate_dsa_private_key_and_parametersuDSABackend.generate_dsa_private_key_and_parametersu
        Return True if the hash algorithm is supported by the backend for DSA.
        adsa_hash_supporteduDSABackend.dsa_hash_supportedu
        Return True if the parameters are supported by the backend for DSA.
        adsa_parameters_supporteduDSABackend.dsa_parameters_supportedu
        Returns a DSAPrivateKey provider.
        aload_dsa_private_numbersuDSABackend.load_dsa_private_numbersu
        Returns a DSAPublicKey provider.
        aload_dsa_public_numbersuDSABackend.load_dsa_public_numbersu
        Returns a DSAParameters provider.
        aload_dsa_parameter_numbersuDSABackend.load_dsa_parameter_numbersaEllipticCurveBackendu
        Returns True if the backend supports the named elliptic curve with the
        specified signature algorithm.
        aelliptic_curve_signature_algorithm_supporteduEllipticCurveBackend.elliptic_curve_signature_algorithm_supportedu
        Returns True if the backend supports the named elliptic curve.
        aelliptic_curve_supporteduEllipticCurveBackend.elliptic_curve_supportedu
        Return an object conforming to the EllipticCurvePrivateKey interface.
        agenerate_elliptic_curve_private_keyuEllipticCurveBackend.generate_elliptic_curve_private_keyu
        Return an EllipticCurvePublicKey provider using the given numbers.
        aload_elliptic_curve_public_numbersuEllipticCurveBackend.load_elliptic_curve_public_numbersu
        Return an EllipticCurvePrivateKey provider using the given numbers.
        aload_elliptic_curve_private_numbersuEllipticCurveBackend.load_elliptic_curve_private_numbersu
        Returns whether the exchange algorithm is supported by this backend.
        aelliptic_curve_exchange_algorithm_supporteduEllipticCurveBackend.elliptic_curve_exchange_algorithm_supportedu
        Compute the private key given the private value and curve.
        aderive_elliptic_curve_private_keyuEllipticCurveBackend.derive_elliptic_curve_private_keyaPEMSerializationBackendu
        Loads a private key from PEM encoded data, using the provided password
        if the data is encrypted.
        aload_pem_private_keyuPEMSerializationBackend.load_pem_private_keyu
        Loads a public key from PEM encoded data.
        aload_pem_public_keyuPEMSerializationBackend.load_pem_public_keyu
        Load encryption parameters from PEM encoded data.
        aload_pem_parametersuPEMSerializationBackend.load_pem_parametersaDERSerializationBackendu
        Loads a private key from DER encoded data. Uses the provided password
        if the data is encrypted.
        aload_der_private_keyuDERSerializationBackend.load_der_private_keyu
        Loads a public key from DER encoded data.
        aload_der_public_keyuDERSerializationBackend.load_der_public_keyu
        Load encryption parameters from DER encoded data.
        aload_der_parametersuDERSerializationBackend.load_der_parametersaX509Backendu
        Load an X.509 certificate from PEM encoded data.
        aload_pem_x509_certificateuX509Backend.load_pem_x509_certificateu
        Load an X.509 certificate from DER encoded data.
        aload_der_x509_certificateuX509Backend.load_der_x509_certificateu
        Load an X.509 CSR from DER encoded data.
        aload_der_x509_csruX509Backend.load_der_x509_csru
        Load an X.509 CSR from PEM encoded data.
        aload_pem_x509_csruX509Backend.load_pem_x509_csru
        Create and sign an X.509 CSR from a CSR builder object.
        acreate_x509_csruX509Backend.create_x509_csru
        Create and sign an X.509 certificate from a CertificateBuilder object.
        acreate_x509_certificateuX509Backend.create_x509_certificateu
        Create and sign an X.509 CertificateRevocationList from a
        CertificateRevocationListBuilder object.
        acreate_x509_crluX509Backend.create_x509_crlu
        Create a RevokedCertificate object from a RevokedCertificateBuilder
        object.
        acreate_x509_revoked_certificateuX509Backend.create_x509_revoked_certificateu
        Compute the DER encoded bytes of an X509 Name object.
        ax509_name_bytesuX509Backend.x509_name_bytesaDHBackendu
        Generate a DHParameters instance with a modulus of key_size bits.
        Using the given generator. Often 2 or 5.
        agenerate_dh_parametersuDHBackend.generate_dh_parametersu
        Generate a DHPrivateKey instance with parameters as a DHParameters
        object.
        agenerate_dh_private_keyuDHBackend.generate_dh_private_keyu
        Generate a DHPrivateKey instance using key size only.
        Using the given generator. Often 2 or 5.
        agenerate_dh_private_key_and_parametersuDHBackend.generate_dh_private_key_and_parametersu
        Load a DHPrivateKey from DHPrivateNumbers
        aload_dh_private_numbersuDHBackend.load_dh_private_numbersu
        Load a DHPublicKey from DHPublicNumbers.
        aload_dh_public_numbersuDHBackend.load_dh_public_numbersu
        Load DHParameters from DHParameterNumbers.
        aload_dh_parameter_numbersuDHBackend.load_dh_parameter_numbersTnu
        Returns whether the backend supports DH with these parameter values.
        adh_parameters_supporteduDHBackend.dh_parameters_supportedu
        Returns True if the backend supports the serialization of DH objects
        with subgroup order (q).
        adh_x942_serialization_supporteduDHBackend.dh_x942_serialization_supportedaScryptBackendu
        Return bytes derived from provided Scrypt parameters.
        aderive_scryptuScryptBackend.derive_scryptu<module cryptography.hazmat.backends.interfaces>Ta__class__TaselfacipheramodeTaselfaalgorithmTaselfakeyaalgorithmTaselfabuilderaprivate_keyaalgorithmTaselfabuilderTaselfaprivate_valueacurveTaselfaalgorithmalengthasaltaiterationsakey_materialTaselfakey_materialasaltalengthwnwrwpTaselfwpwgwqTaselfTaselfwpwqwgTaselfaalgorithmacurveTaselfasignature_algorithmacurveTaselfacurveTaselfageneratorakey_sizeTaselfaparametersTaselfakey_sizeTaselfapublic_exponentakey_sizeTaselfadataTaselfadataapasswordTaselfanumbersTaselfapaddingTaselfanameu.cryptography.hazmat.backends.openssl.aeadHucryptography.hazmat.primitives.ciphers.aeadTaAESCCMaAESGCMaChaCha20Poly1305laAESCCMaAESGCMaChaCha20Poly1305cchacha20-poly1305uaes-{}-ccma_keylaasciiuaes-{}-gcma_libaEVP_get_cipherbynameaopenssl_asserta_ffiaNULLaEVP_CIPHER_CTX_newagcaEVP_CIPHER_CTX_freeaEVP_CipherInit_exa_ENCRYPTaEVP_CIPHER_CTX_set_key_lengthaEVP_CIPHER_CTX_ctrlaEVP_CTRL_AEAD_SET_IVLENa_DECRYPTaEVP_CTRL_AEAD_SET_TAGaendswithTc-ccmafrom_bufferanewTuint *aEVP_CipherUpdateuunsigned char[]abuffer:nnnTaAESCCMa_aead_cipher_namea_aead_setupa_set_lengtha_process_aadactxa_process_dataadataaEVP_CipherFinal_exaEVP_CTRL_AEAD_GET_TAGaInvalidTagla_consume_errorsa__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/aead.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionucryptography.exceptionsTaInvalidTaga_encrypta_decryptu<module cryptography.hazmat.backends.openssl.aead>TacipheraAESCCMaAESGCMaChaCha20Poly1305Tabackendacipher_nameakeyanonceatagatag_lenaoperationaevp_cipheractxaresanonce_ptrakey_ptrTabackendacipheranonceadataaassociated_dataatag_lengthaAESCCMatagacipher_nameactxaoutlenabufaresaprocessed_dataTabackendacipheranonceadataaassociated_dataatag_lengthaAESCCMacipher_nameactxaprocessed_dataaoutlenaresatag_bufatagTabackendactxaassociated_dataaoutlenaresTabackendactxadataaoutlenabufaresTabackendactxadata_lenaintptraresu.cryptography.hazmat.backends.openssl.backendyabindingaBindinga_bindingaffia_ffialiba_liba_cipher_registrya_register_default_ciphersaactivate_osrandom_engineaEVP_PKEY_DHa_dh_typesaCryptography_HAS_EVP_PKEY_DHXaappendaEVP_PKEY_DHXa_openssl_assertaCryptography_HAS_ENGINEaENGINE_get_default_RANDaNULLaENGINE_unregister_RANDaRAND_set_rand_methodaopenssl_assertlaENGINE_finishaselfaENGINE_by_idaCryptography_osrandom_engine_idaENGINE_initaENGINE_freea_get_osurandom_engineuBackend._get_osurandom_engineaactivate_builtin_randoma__enter__a__exit__aENGINE_set_default_RANDTnnnanewTuchar[]l@aENGINE_ctrl_cmdcget_implementationlastringadecodeTaasciiaOpenSSL_versionaOPENSSL_VERSIONu
        Friendly string name of the loaded OpenSSL library. This is not
        necessarily the same version as it was compiled against.

        Example: OpenSSL 1.0.1e 11 Feb 2013
        aOpenSSL_version_numa_HMACContextanameablake2bablake2su{}{}adigest_sizelaasciiaencodeaEVP_get_digestbynamea_evp_md_from_algorithmahash_supporteda_HashContextuDuplicate registration for: {} {}.aCBCaCTRaECBaOFBaCFBaCFB8aGCMaregister_cipher_adapteraAESaGetCipherByNameTu{cipher.name}-{cipher.key_size}-{mode.name}aCamelliaaTripleDESTudes-ede3-{mode.name}Tudes-ede3aBlowfishTubf-{mode.name}aSEEDTuseed-{mode.name}aitertoolsaproductaCAST5aIDEAutoo many values to unpack (expected 2)Tu{cipher.name}-{mode.name}aARC4Tarc4aChaCha20Tachacha20aXTSa_get_xts_ciphera_CipherContexta_ENCRYPTa_DECRYPTahmac_supporteduunsigned char[]a_evp_md_non_null_from_algorithmafrom_bufferaPKCS5_PBKDF2_HMACabuffer:nnna_consume_errorsasixaPY2aBN_num_bytesaBN_bn2binafrom_bytesabigaBN_is_negativeaBN_bn2hexaOPENSSL_freelato_bytesabit_lengthf @aBN_bin2bnwL:lnnTuBIGNUM **aBN_hex2bnu
        Converts a python integer to a BIGNUM. The returned BIGNUM will not
        be garbage collected (to support adding them to structs that take
        ownership of the object). Be sure to register it for GC if it will
        be discarded after use.
        arsaa_verify_rsa_parametersaRSA_newagcaRSA_freea_int_to_bnaBN_freeaRSA_generate_key_exa_rsa_cdata_to_evp_pkeya_RSAPrivateKeylla_check_private_key_componentswpwqwdadmp1admq1aiqmpapublic_numberswewnaRSA_set0_factorsaRSA_set0_keyaRSA_set0_crt_paramsaRSA_blinding_ona_check_public_key_componentsa_RSAPublicKeyaEVP_PKEY_newaEVP_PKEY_freea_create_evp_pkey_gcaEVP_PKEY_set1_RSAaBIO_new_mem_bufa_MemoryBIOaBIO_freeu
        Return a _MemoryBIO namedtuple of (BIO, char*).

        The char* is the storage for the BIO and it must stay alive until the
        BIO is finished with.
        aBIO_s_memaBIO_newu
        Creates an empty memory BIO.
        Tuchar **aBIO_get_mem_datau
        Reads a memory BIO. This only works on memory BIOs.
        aEVP_PKEY_idaEVP_PKEY_RSAaEVP_PKEY_get1_RSAaEVP_PKEY_DSAaEVP_PKEY_get1_DSAaDSA_freea_DSAPrivateKeyaEVP_PKEY_ECaEVP_PKEY_get1_EC_KEYaEC_KEY_freea_EllipticCurvePrivateKeyaEVP_PKEY_get1_DHaDH_freea_DHPrivateKeyaEVP_PKEY_ED25519a_Ed25519PrivateKeyaEVP_PKEY_X448a_X448PrivateKeyaEVP_PKEY_X25519a_X25519PrivateKeyaEVP_PKEY_ED448a_Ed448PrivateKeyaUnsupportedAlgorithmTuUnsupported key type.u
        Return the appropriate type of PrivateKey given an evp_pkey cdata
        pointer.
        a_DSAPublicKeya_EllipticCurvePublicKeya_DHPublicKeya_Ed25519PublicKeya_X448PublicKeya_X25519PublicKeya_Ed448PublicKeyu
        Return the appropriate type of PublicKey given an evp_pkey cdata
        pointer.
        aCryptography_HAS_RSA_OAEP_MDahashesaSHA1aSHA224aSHA256aSHA384aSHA512aPKCS1v15aPSSa_mgfaMGF1apaddinga_algorithmaOAEPa_oaep_hash_supporteda_labelaCryptography_HAS_RSA_OAEP_LABELTllluKey size must be 1024 or 2048 or 3072 bits.aDSA_newaDSA_generate_parameters_exa_DSAParametersaDSAparams_dupa_dsa_cdataaDSA_generate_keya_dsa_cdata_to_evp_pkeyagenerate_dsa_parametersagenerate_dsa_private_keyaDSA_set0_pqgaDSA_set0_keyadsaa_check_dsa_private_numbersaparameter_numberswgwywxa_dsa_cdata_set_valuesa_check_dsa_parametersaEVP_PKEY_set1_DSAacipher_supporteddablock_sizea_CMACContextax509aCertificateSigningRequestBuilderuBuilder type mismatch.aed25519aEd25519PrivateKeyaed448aEd448PrivateKeyualgorithm must be None when signing via ed25519 or ed448aHashAlgorithmuAlgorithm must be a registered hash algorithm.aMD5aRSAPrivateKeyuMD5 is not a supported hash algorithm for EC/DSA CSRsa_evp_md_x509_null_if_eddsaaX509_REQ_newaX509_REQ_freeaX509_REQ_set_versionaVersionav1avalueaX509_REQ_set_subject_namea_encode_name_gca_subject_nameapublic_keyaX509_REQ_set_pubkeya_evp_pkeyask_X509_EXTENSION_new_nullu<lambda>uBackend.create_x509_csr.<locals>.<lambda>a_create_x509_extensionsa_extensionsa_EXTENSION_ENCODE_HANDLERSask_X509_EXTENSION_insertTaextensionsahandlersax509_objaadd_funcagcaX509_REQ_add_extensionsaX509_REQ_signa_lib_reason_matchaERR_LIB_RSAaRSA_R_DIGEST_TOO_BIG_FOR_RSA_KEYuDigest too big for RSA keya_CertificateSigningRequestask_X509_EXTENSION_pop_freeaaddressofa_original_libaX509_EXTENSION_freeaCertificateBuilderuMD5 is only (reluctantly) supported for RSA certificatesaX509_newabackendaX509_freeaX509_set_versiona_versionaX509_set_subject_nameaX509_set_pubkeya_public_keya_encode_asn1_int_gca_serial_numberaX509_set_serialNumbera_set_asn1_timeaX509_getm_notBeforea_not_valid_beforeaX509_getm_notAftera_not_valid_afteraX509_add_extaX509_set_issuer_namea_issuer_nameaX509_signa_CertificateayearlastrftimeTu%Y%m%d%H%M%SZTu%y%m%d%H%M%SZaASN1_TIME_set_stringaASN1_TIME_newaASN1_TIME_freeaCertificateRevocationListBuilderuMD5 is not a supported hash algorithm for EC/DSA CRLsaX509_CRL_newaX509_CRL_freeaX509_CRL_set_versionaX509_CRL_set_issuer_namea_create_asn1_timea_last_updateaX509_CRL_set_lastUpdatea_next_updateaX509_CRL_set_nextUpdatea_CRL_EXTENSION_ENCODE_HANDLERSaX509_CRL_add_exta_revoked_certificatesaCryptography_X509_REVOKED_dupa_x509_revokedaX509_CRL_add0_revokedax509_crlaX509_CRL_signa_CertificateRevocationLista_create_x509_extensionahandlersaadd_funcax509_obja_txt2obj_gcaoidadotted_stringaX509_EXTENSION_create_by_OBJacriticalaUnrecognizedExtensiona_encode_asn1_str_gca_create_raw_x509_extensionaTLSFeatureaencode_deraSEQUENCEaINTEGERaencode_der_integeraPrecertPoisonuExtension not supported: {}aOBJ_txt2nidaNID_undefaX509V3_EXT_i2daRevokedCertificateBuilderaX509_REVOKED_newaX509_REVOKED_freeaX509_REVOKED_set_serialNumbera_revocation_dateaX509_REVOKED_set_revocationDatea_CRL_ENTRY_EXTENSION_ENCODE_HANDLERSaX509_REVOKED_add_exta_RevokedCertificatea_load_keyaPEM_read_bio_PrivateKeya_evp_pkey_to_private_keya_bytes_to_bioaPEM_read_bio_PUBKEYabioa_evp_pkey_to_public_keyaBIO_resetaPEM_read_bio_RSAPublicKeya_handle_key_loading_erroraPEM_read_bio_DHparamsa_DHParametersa_evp_pkey_from_der_traditional_keyad2i_PKCS8PrivateKey_bioad2i_PrivateKey_biouPassword was given but private key is not encrypted.ad2i_PUBKEY_bioad2i_RSAPublicKey_bioad2i_DHparams_bioaCryptography_d2i_DHxparams_bioaPEM_read_bio_X509uUnable to load certificate. See https://cryptography.io/en/latest/faq/#why-can-t-i-import-my-pem-file for more details.ad2i_X509_biouUnable to load certificateaPEM_read_bio_X509_CRLuUnable to load CRL. See https://cryptography.io/en/latest/faq/#why-can-t-i-import-my-pem-file for more details.ad2i_X509_CRL_biouUnable to load CRLaPEM_read_bio_X509_REQuUnable to load request. See https://cryptography.io/en/latest/faq/#why-can-t-i-import-my-pem-file for more details.ad2i_X509_REQ_biouUnable to load requestTuCRYPTOGRAPHY_PASSWORD_DATA *autilsa_check_byteslikeapasswordalengthaCryptography_pem_password_cbaerrorl��������uPassword was not given but private key is encryptedl��������uPasswords longer than {} bytes are not supported by this backend.amaxsizeacalleduCould not deserialize key data.aERR_LIB_EVPaEVP_R_BAD_DECRYPTaERR_LIB_PKCS12aPKCS12_R_PKCS12_CIPHERFINAL_ERRORuBad decrypt. Incorrect password?aEVP_R_UNKNOWN_PBE_ALGORITHMaERR_LIB_PEMaPEM_R_UNSUPPORTED_ENCRYPTIONuPEM data is encrypted with an unsupported ciphera_ReasonsaUNSUPPORTED_CIPHERuUnsupported public key algorithm.aERR_LIB_ASN1aEVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHMu<genexpr>uBackend._handle_key_loading_error.<locals>.<genexpr>a_elliptic_curve_to_nidaEC_GROUP_new_by_curve_nameaERR_LIB_ECaEC_R_UNKNOWN_GROUPaEC_GROUP_freeaecaECDSAaelliptic_curve_supporteda_ec_key_new_by_curveaEC_KEY_generate_keya_ec_cdata_to_evp_pkeyuBackend object does not support {}.aUNSUPPORTED_ELLIPTIC_CURVEu
        Generate a new private key on the named curve.
        acurveaprivate_valueaBN_clear_freeaEC_KEY_set_private_keya_ec_key_set_public_key_affine_coordinatesaEC_KEY_get0_groupaEC_POINT_newaEC_POINT_freea_tmp_bn_ctxaEC_POINT_oct2pointuInvalid public bytes for the given curveaEC_KEY_set_public_keya_ec_key_determine_group_get_funcaEC_POINT_mulaBN_CTX_getaEC_KEY_new_by_curve_namead2i_OCSP_REQUEST_biouUnable to load OCSP requestaOCSP_REQUEST_freea_OCSPRequestad2i_OCSP_RESPONSE_biouUnable to load OCSP responseaOCSP_RESPONSE_freea_OCSPResponseaOCSP_REQUEST_newa_requestutoo many values to unpack (expected 3)aOCSP_cert_to_ida_x509aOCSP_request_add0_ida_OCSP_REQUEST_EXTENSION_ENCODE_HANDLERSaOCSP_REQUEST_add_extaOCSP_BASICRESP_newaOCSP_BASICRESP_freea_responsea_certa_issueraOCSP_CERTID_freea_revocation_reasona_CRL_ENTRY_REASON_ENUM_TO_CODEa_revocation_timea_this_updateaOCSP_basic_add1_statusa_cert_statusa_responder_idaOCSP_NOCERTSaocspaOCSPResponderEncodingaHASHaOCSP_RESPID_KEYa_certsaOCSP_basic_add1_certabasica_OCSP_BASICRESP_EXTENSION_ENCODE_HANDLERSaOCSP_BASICRESP_add_extaOCSP_basic_signaERR_LIB_X509aX509_R_KEY_VALUES_MISMATCHuresponder_cert must be signed by private_keyaOCSPResponseStatusaSUCCESSFULa_create_ocsp_basic_responseaOCSP_response_createaECDHaEVP_PKEY_set1_EC_KEYDasecp192r1asecp256r1aprime192v1aprime256v1aOBJ_sn2nidu{} is not a supported elliptic curveu
        Get the NID for a curve name.
        aBN_CTX_newaBN_CTX_freeaBN_CTX_startaBN_CTX_enduBackend._tmp_bn_ctxTccharacteristic-two-fieldaEC_GROUP_method_ofaEC_METHOD_get_field_typeaCryptography_HAS_EC2MaEC_POINT_get_affine_coordinates_GF2maEC_POINT_get_affine_coordinates_GFpu
        Given an EC_KEY determine the group and what function is required to
        get point coordinates.
        uInvalid EC key. Both x and y must be non-negative.aEC_KEY_set_public_key_affine_coordinatesuInvalid EC key.u
        Sets the public key point in the EC_KEY context to the affine x and y
        values.
        aserializationaPrivateFormatuformat must be an item from the PrivateFormat enumaEncodingaX962uX9.62 format is only valid for EC public keysaRawuraw format is invalid with this key or encodinguraw encoding is invalid with this key or formataKeySerializationEncryptionuEncryption algorithm must be a KeySerializationEncryption instanceaNoEncryptioncaBestAvailableEncryptionaEVP_get_cipherbynameTcaes-256-cbcuPasswords longer than 1023 bytes are not supported by this backenduUnsupported encryption typeaPEMaPKCS8aPEM_write_bio_PKCS8PrivateKeyaTraditionalOpenSSLaPEM_write_bio_RSAPrivateKeyaPEM_write_bio_DSAPrivateKeyaPEM_write_bio_ECPrivateKeyaDERaencryption_algorithmuEncryption is not supported for DER encoded traditional OpenSSL keysa_private_key_bytes_traditional_derai2d_PKCS8PrivateKey_biouencoding must be Encoding.PEM or Encoding.DERa_create_mem_bio_gca_read_mem_bioai2d_RSAPrivateKey_bioai2d_ECPrivateKey_bioai2d_DSAPrivateKey_biouencoding must be an item from the Encoding enumaPublicFormataUncompressedPointaCompressedPointuPoint formats are not valid for this key typeaOpenSSHuOpenSSH format must be used with OpenSSH encodinga_openssh_public_key_bytesaSubjectPublicKeyInfoaPEM_write_bio_PUBKEYai2d_PUBKEY_bioaPKCS1aPEM_write_bio_RSAPublicKeyai2d_RSAPublicKey_biouformat must be an item from the PublicFormat enumaRSAPublicKeycssh-rsa abase64ab64encodeassha_ssh_write_stringTcssh-rsaa_ssh_write_mpintaDSAPublicKeycssh-dss Tcssh-dssaEd25519PublicKeyapublic_bytescssh-ed25519 Tcssh-ed25519aEllipticCurvePublicKeyaSECP256R1cnistp256aSECP384R1cnistp384aSECP521R1cnistp521uOnly SECP256R1, SECP384R1, and SECP521R1 curves are supported by the SSH public key formatcecdsa-sha2-d uOpenSSH encoding is not supported for this key typeuOpenSSH encoding is not supportedaDH_get0_pqgaPEM_write_bio_DHxparamsaPEM_write_bio_DHparamsaCryptography_i2d_DHxparams_bioai2d_DHparams_biouDH key_size must be at least 512 bitsTlluDH generator must be 2 or 5aDH_newaDH_generate_parameters_exaEVP_PKEY_set1_DHa_dh_params_dupa_dh_cdataaDH_generate_keya_dh_cdata_to_evp_pkeyagenerate_dh_private_keyagenerate_dh_parametersaDH_set0_pqgaDH_set0_keyTuint[]laCryptography_DH_checklaDH_NOT_SUITABLE_GENERATORuDH private numbers did not pass safety checks.Tuunsigned char **ai2d_X509_NAMEuBackend.x509_name_bytes.<locals>.<lambda>uAn X25519 public key is 32 bytes longaEVP_PKEY_set_typeaNID_X25519aEVP_PKEY_set1_tls_encodedpointuAn X25519 private key is 32 bytes longa_zeroed_bytearrayTl0b0.0+en" :lln:lnnaevp_pkeyaEVP_PKEY_CTX_new_idaEVP_PKEY_CTX_freeaEVP_PKEY_keygen_initTuEVP_PKEY **aEVP_PKEY_keygena_evp_pkey_keygen_gcaCRYPTOGRAPHY_OPENSSL_110_OR_GREATERuAn X448 public key is 56 bytes longaEVP_PKEY_new_raw_public_keyaNID_X448uAn X448 private key is 56 bytes longaEVP_PKEY_new_raw_private_keyaCRYPTOGRAPHY_OPENSSL_LESS_THAN_111aCRYPTOGRAPHY_OPENSSL_LESS_THAN_111Ba_check_bytesadataa_ED25519_KEY_SIZEuAn Ed25519 public key is 32 bytes longaNID_ED25519uAn Ed25519 private key is 32 bytes longa_ED448_KEY_SIZEuAn Ed448 public key is 57 bytes longaNID_ED448uAn Ed448 private key is 57 bytes longaEVP_PBE_scryptascrypta_MEM_LIMITaERR_R_MALLOC_FAILUREaEVP_R_MEMORY_LIMIT_EXCEEDEDl�luNot enough memory to derive key. These parameters require {} MB of memory.aaeada_aead_cipher_nameu
        This method creates a bytearray, which we copy data into (hopefully
        also from a mutable buffer that can be dynamically erased!), and then
        zero when we're done.
        a_zero_datauBackend._zeroed_bytearrayarangeu
        This method takes bytes, which can be a bytestring or a mutable
        buffer like a bytearray, and yields a null-terminated version of that
        data. This is required because PKCS12_parse doesn't take a length with
        its password char * and ffi.from_buffer doesn't provide null
        termination. So, to support zeroing the data via bytearray we
        need to build this ridiculous construct that copies the memory, but
        zeroes it after use.
        uchar[]amemmoveacastuuint8_t *a_zeroed_null_terminated_bufuBackend._zeroed_null_terminated_bufad2i_PKCS12_biouCould not deserialize PKCS12 dataaPKCS12_freeTuX509 **TuCryptography_STACK_OF_X509 **aPKCS12_parsearesuInvalid password or PKCS12 dataask_X509_freeask_X509_numask_X509_valueask_x509aadditional_certificatesaCryptography_HAS_POLY1305akeya_POLY1305_KEY_SIZEuA poly1305 key is 32 bytes longa_Poly1305Contexta_fmtaformatTacipheramodealoweruaes-{}-xtsakey_sizea__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/backend.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacollectionsacontextlibTacontextmanageracontextmanagerusix.movesTarangeacryptographyTautilsax509ucryptography.exceptionsTaUnsupportedAlgorithma_Reasonsucryptography.hazmat._derTaINTEGERaNULLaSEQUENCEaencode_deraencode_der_integerucryptography.hazmat.backends.interfacesT
aCMACBackendaCipherBackendaDERSerializationBackendaDHBackendaDSABackendaEllipticCurveBackendaHMACBackendaHashBackendaPBKDF2HMACBackendaPEMSerializationBackendaRSABackendaScryptBackendaX509BackendaCMACBackendaCipherBackendaDERSerializationBackendaDHBackendaDSABackendaEllipticCurveBackendaHMACBackendaHashBackendaPBKDF2HMACBackendaPEMSerializationBackendaRSABackendaScryptBackendaX509Backenducryptography.hazmat.backends.opensslTaaeaducryptography.hazmat.backends.openssl.ciphersTa_CipherContextucryptography.hazmat.backends.openssl.cmacTa_CMACContextucryptography.hazmat.backends.openssl.decode_asn1Ta_CRL_ENTRY_REASON_ENUM_TO_CODEucryptography.hazmat.backends.openssl.dhTa_DHParametersa_DHPrivateKeya_DHPublicKeya_dh_params_dupucryptography.hazmat.backends.openssl.dsaTa_DSAParametersa_DSAPrivateKeya_DSAPublicKeyucryptography.hazmat.backends.openssl.ecTa_EllipticCurvePrivateKeya_EllipticCurvePublicKeyucryptography.hazmat.backends.openssl.ed25519Ta_Ed25519PrivateKeya_Ed25519PublicKeyucryptography.hazmat.backends.openssl.ed448Ta_ED448_KEY_SIZEa_Ed448PrivateKeya_Ed448PublicKeyucryptography.hazmat.backends.openssl.encode_asn1T	a_CRL_ENTRY_EXTENSION_ENCODE_HANDLERSa_CRL_EXTENSION_ENCODE_HANDLERSa_EXTENSION_ENCODE_HANDLERSa_OCSP_BASICRESP_EXTENSION_ENCODE_HANDLERSa_OCSP_REQUEST_EXTENSION_ENCODE_HANDLERSa_encode_asn1_int_gca_encode_asn1_str_gca_encode_name_gca_txt2obj_gcucryptography.hazmat.backends.openssl.hashesTa_HashContextucryptography.hazmat.backends.openssl.hmacTa_HMACContextucryptography.hazmat.backends.openssl.ocspTa_OCSPRequesta_OCSPResponseucryptography.hazmat.backends.openssl.poly1305Ta_POLY1305_KEY_SIZEa_Poly1305Contextucryptography.hazmat.backends.openssl.rsaTa_RSAPrivateKeya_RSAPublicKeyucryptography.hazmat.backends.openssl.x25519Ta_X25519PrivateKeya_X25519PublicKeyucryptography.hazmat.backends.openssl.x448Ta_X448PrivateKeya_X448PublicKeyucryptography.hazmat.backends.openssl.x509Ta_Certificatea_CertificateRevocationLista_CertificateSigningRequesta_RevokedCertificateucryptography.hazmat.bindings.opensslTabindingucryptography.hazmat.primitivesTahashesaserializationucryptography.hazmat.primitives.asymmetricTadsaaecaed25519aed448arsaucryptography.hazmat.primitives.asymmetric.paddingTaMGF1aOAEPaPKCS1v15aPSSucryptography.hazmat.primitives.ciphers.algorithmsT	aAESaARC4aBlowfishaCAST5aCamelliaaChaCha20aIDEAaSEEDaTripleDESucryptography.hazmat.primitives.ciphers.modesTaCBCaCFBaCFB8aCTRaECBaGCMaOFBaXTSucryptography.hazmat.primitives.kdfTascryptucryptography.hazmat.primitives.serializationTasshucryptography.x509TaocspanamedtupleLabioachar_ptrTOobjectametaclassa__prepare__aBackenda__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aregister_interfacearegister_interface_ifaCryptography_HAS_SCRYPTucryptography.hazmat.backends.openssl.backenda__module__u
    OpenSSL API binding interfaces.
    a__qualname__aopenssla__init__uBackend.__init__uBackend.openssl_assertuBackend.activate_builtin_randomuBackend.activate_osrandom_engineaosrandom_engine_implementationuBackend.osrandom_engine_implementationaopenssl_version_textuBackend.openssl_version_textaopenssl_version_numberuBackend.openssl_version_numberacreate_hmac_ctxuBackend.create_hmac_ctxuBackend._evp_md_from_algorithmuBackend._evp_md_non_null_from_algorithmuBackend.hash_supporteduBackend.hmac_supportedacreate_hash_ctxuBackend.create_hash_ctxuBackend.cipher_supporteduBackend.register_cipher_adapteruBackend._register_default_ciphersacreate_symmetric_encryption_ctxuBackend.create_symmetric_encryption_ctxacreate_symmetric_decryption_ctxuBackend.create_symmetric_decryption_ctxapbkdf2_hmac_supporteduBackend.pbkdf2_hmac_supportedaderive_pbkdf2_hmacuBackend.derive_pbkdf2_hmacuBackend._consume_errorsa_bn_to_intuBackend._bn_to_intTnuBackend._int_to_bnagenerate_rsa_private_keyuBackend.generate_rsa_private_keyagenerate_rsa_parameters_supporteduBackend.generate_rsa_parameters_supportedaload_rsa_private_numbersuBackend.load_rsa_private_numbersaload_rsa_public_numbersuBackend.load_rsa_public_numbersuBackend._create_evp_pkey_gcuBackend._rsa_cdata_to_evp_pkeyuBackend._bytes_to_biouBackend._create_mem_bio_gcuBackend._read_mem_biouBackend._evp_pkey_to_private_keyuBackend._evp_pkey_to_public_keyuBackend._oaep_hash_supportedarsa_padding_supporteduBackend.rsa_padding_supporteduBackend.generate_dsa_parametersuBackend.generate_dsa_private_keyagenerate_dsa_private_key_and_parametersuBackend.generate_dsa_private_key_and_parametersuBackend._dsa_cdata_set_valuesaload_dsa_private_numbersuBackend.load_dsa_private_numbersaload_dsa_public_numbersuBackend.load_dsa_public_numbersaload_dsa_parameter_numbersuBackend.load_dsa_parameter_numbersuBackend._dsa_cdata_to_evp_pkeyadsa_hash_supporteduBackend.dsa_hash_supportedadsa_parameters_supporteduBackend.dsa_parameters_supportedacmac_algorithm_supporteduBackend.cmac_algorithm_supportedacreate_cmac_ctxuBackend.create_cmac_ctxacreate_x509_csruBackend.create_x509_csracreate_x509_certificateuBackend.create_x509_certificateuBackend._evp_md_x509_null_if_eddsauBackend._set_asn1_timeuBackend._create_asn1_timeacreate_x509_crluBackend.create_x509_crluBackend._create_x509_extensionsuBackend._create_raw_x509_extensionuBackend._create_x509_extensionacreate_x509_revoked_certificateuBackend.create_x509_revoked_certificateaload_pem_private_keyuBackend.load_pem_private_keyaload_pem_public_keyuBackend.load_pem_public_keyaload_pem_parametersuBackend.load_pem_parametersaload_der_private_keyuBackend.load_der_private_keyuBackend._evp_pkey_from_der_traditional_keyaload_der_public_keyuBackend.load_der_public_keyaload_der_parametersuBackend.load_der_parametersaload_pem_x509_certificateuBackend.load_pem_x509_certificateaload_der_x509_certificateuBackend.load_der_x509_certificateaload_pem_x509_crluBackend.load_pem_x509_crlaload_der_x509_crluBackend.load_der_x509_crlaload_pem_x509_csruBackend.load_pem_x509_csraload_der_x509_csruBackend.load_der_x509_csruBackend._load_keyuBackend._handle_key_loading_erroruBackend.elliptic_curve_supportedaelliptic_curve_signature_algorithm_supporteduBackend.elliptic_curve_signature_algorithm_supportedagenerate_elliptic_curve_private_keyuBackend.generate_elliptic_curve_private_keyaload_elliptic_curve_private_numbersuBackend.load_elliptic_curve_private_numbersaload_elliptic_curve_public_numbersuBackend.load_elliptic_curve_public_numbersaload_elliptic_curve_public_bytesuBackend.load_elliptic_curve_public_bytesaderive_elliptic_curve_private_keyuBackend.derive_elliptic_curve_private_keyuBackend._ec_key_new_by_curveaload_der_ocsp_requestuBackend.load_der_ocsp_requestaload_der_ocsp_responseuBackend.load_der_ocsp_responseacreate_ocsp_requestuBackend.create_ocsp_requestuBackend._create_ocsp_basic_responseacreate_ocsp_responseuBackend.create_ocsp_responseaelliptic_curve_exchange_algorithm_supporteduBackend.elliptic_curve_exchange_algorithm_supporteduBackend._ec_cdata_to_evp_pkeyuBackend._elliptic_curve_to_niduBackend._ec_key_determine_group_get_funcuBackend._ec_key_set_public_key_affine_coordinatesa_private_key_bytesuBackend._private_key_bytesuBackend._private_key_bytes_traditional_dera_public_key_bytesuBackend._public_key_bytesuBackend._openssh_public_key_bytesa_parameter_bytesuBackend._parameter_bytesuBackend.generate_dh_parametersuBackend._dh_cdata_to_evp_pkeyuBackend.generate_dh_private_keyagenerate_dh_private_key_and_parametersuBackend.generate_dh_private_key_and_parametersaload_dh_private_numbersuBackend.load_dh_private_numbersaload_dh_public_numbersuBackend.load_dh_public_numbersaload_dh_parameter_numbersuBackend.load_dh_parameter_numbersadh_parameters_supporteduBackend.dh_parameters_supportedadh_x942_serialization_supporteduBackend.dh_x942_serialization_supportedax509_name_bytesuBackend.x509_name_bytesax25519_load_public_bytesuBackend.x25519_load_public_bytesax25519_load_private_bytesuBackend.x25519_load_private_bytesuBackend._evp_pkey_keygen_gcax25519_generate_keyuBackend.x25519_generate_keyax25519_supporteduBackend.x25519_supportedax448_load_public_bytesuBackend.x448_load_public_bytesax448_load_private_bytesuBackend.x448_load_private_bytesax448_generate_keyuBackend.x448_generate_keyax448_supporteduBackend.x448_supportedaed25519_supporteduBackend.ed25519_supportedaed25519_load_public_bytesuBackend.ed25519_load_public_bytesaed25519_load_private_bytesuBackend.ed25519_load_private_bytesaed25519_generate_keyuBackend.ed25519_generate_keyaed448_supporteduBackend.ed448_supportedaed448_load_public_bytesuBackend.ed448_load_public_bytesaed448_load_private_bytesuBackend.ed448_load_private_bytesaed448_generate_keyuBackend.ed448_generate_keyaderive_scryptuBackend.derive_scryptaaead_cipher_supporteduBackend.aead_cipher_supporteduBackend._zero_dataaload_key_and_certificates_from_pkcs12uBackend.load_key_and_certificates_from_pkcs12apoly1305_supporteduBackend.poly1305_supportedacreate_poly1305_ctxuBackend.create_poly1305_ctxa__orig_bases__uGetCipherByName.__init__a__call__uGetCipherByName.__call__Ta.0aerroraselfTapointeraselfTaselfTwxaselfu<listcomp>Twxu<module cryptography.hazmat.backends.openssl.backend>Ta__class__Taselfabackendacipheramodeacipher_nameTaselfafmtTaselfabnabn_num_bytesabin_ptrabin_lenavalahex_cdataahex_strTaselfadataadata_ptrabioTaselfatimeaasn1_timeTaselfaevp_pkeyTaselfabio_methodabioTaselfabuilderaprivate_keyaalgorithmabasicaevp_mdacertidareasonarev_timeanext_updateathis_updatearesaresponder_certaresponder_encodingaflagsacertaerrorsTaselfaextensionavalueaobjTaselfahandlersaextensionavalueaasn1aencodeaext_structanidT
aselfaextensionsahandlersax509_objaadd_funcagcwiaextensionax509_extensionaresTaselfadh_cdataaevp_pkeyaresTaselfadsa_cdatawpwqwgapub_keyapriv_keyaresTaselfadsa_cdataaevp_pkeyaresTaselfaec_cdataaevp_pkeyaresTaselfactxanid_two_fieldagroupamethodanidaget_funcTaselfacurveacurve_nidaec_cdataTaselfactxwxwyaresTaselfacurveacurve_aliasesacurve_nameacurve_nidTaselfaalgorithmaalgaevp_mdTaselfaalgorithmaevp_mdTaselfaprivate_keyaalgorithmTaselfabio_dataapasswordakeyTaselfanidaevp_pkey_ctxaresaevp_ppkeyaevp_pkeyTaselfaevp_pkeyakey_typearsa_cdataadsa_cdataaec_cdataadh_cdataTaselfwearesTabackendacipheramodeacipher_nameTaselfaerrorsTaselfanumabnabinaryabn_ptrahex_numaresT
aselfaopenssl_read_funcaconvert_funcadataapasswordamem_bioauserdataapassword_ptraevp_pkeyaerrorsTaselfaalgorithmTaselfakeyapublic_numbersaparameter_numbersaraw_bytesacurve_nameapointTaselfaencodingaformatacdatawqawrite_bioabioaresTaselfaencodingaformataencryption_algorithmaevp_pkeyacdataapasswordapasslenaevp_cipherakey_typeawrite_bioakeyabioaresTaselfakey_typeacdataawrite_bioabioaresT	aselfaencodingaformatakeyaevp_pkeyacdataawrite_bioabioaresTaselfabioabufabuf_lenabio_dataTaselfamode_clsacipher_clsTaselfarsa_cdataaevp_pkeyaresTaselfaasn1_timeatimeaasn1_straresTaselfabn_ctxTaselfadataalengthwiTaselfalengthabaTaselfadataadata_lenabufTaselfacipheracipher_nameTaselfacipheramodeaadapteraevp_cipherTaselfakeyaalgorithmT	aselfabuilderaocsp_reqacertaissueraalgorithmaevp_mdacertidaonereqTaselfaresponse_statusabuilderaprivate_keyaalgorithmabasicaocsp_respTaselfakeyTaselfacipheramodeT	aselfabuilderaprivate_keyaalgorithmaevp_mdax509_certaresaserial_numberaerrorsTaselfabuilderaprivate_keyaalgorithmaevp_mdax509_crlaresalast_updateanext_updatearevoked_certarevokedaerrorsT
aselfabuilderaprivate_keyaalgorithmaevp_mdax509_reqaresapublic_keyask_extensionaerrorsTaselfabuilderax509_revokedaserial_numberaresarev_dateTaselfaprivate_valueacurveaec_cdataaget_funcagroupapointavalueabn_ctxaresabn_xabn_yaprivateaevp_pkeyT
aselfaalgorithmalengthasaltaiterationsakey_materialabufaevp_mdakey_material_ptraresTaselfakey_materialasaltalengthwnwrwpabufakey_material_ptraresaerrorsamin_memoryTaselfwpwgwqadh_cdataaresacodesTaselfwpwqwgTaselfadataadata_ptraevp_pkeyTaselfadataaevp_pkeyTaselfaalgorithmacurveTaselfasignature_algorithmacurveTaselfacurveacurve_nidagroupaerrorsTaselfageneratorakey_sizeadh_param_cdataaresTaselfaparametersadh_key_cdataaresaevp_pkeyTaselfageneratorakey_sizeTaselfakey_sizeactxaresTaselfaparametersactxaevp_pkeyTaselfakey_sizeaparametersTaselfacurveaec_cdataaresaevp_pkeyTaselfapublic_exponentakey_sizeTaselfapublic_exponentakey_sizearsa_cdataabnaresaevp_pkeyTaselfadataamem_bioarequestTaselfadataamem_bioaresponseTaselfadataamem_bioadh_cdataaresTaselfadataapasswordabio_dataakeyTaselfadataamem_bioaevp_pkeyaresarsa_cdataTaselfadataamem_bioax509Taselfadataamem_bioax509_crlTaselfadataamem_bioax509_reqTaselfanumbersadh_cdatawpwgwqaresTaselfanumbersaparameter_numbersadh_cdatawpwgwqapub_keyapriv_keyaresacodesaevp_pkeyT
aselfanumbersadh_cdataaparameter_numberswpwgwqapub_keyaresaevp_pkeyTaselfanumbersadsa_cdatawpwqwgaresT
aselfanumbersaparameter_numbersadsa_cdatawpwqwgapub_keyapriv_keyaevp_pkeyT	aselfanumbersadsa_cdatawpwqwgapub_keyapriv_keyaevp_pkeyTaselfanumbersapublicaec_cdataaprivate_valuearesaevp_pkeyT	aselfacurveapoint_bytesaec_cdataagroupapointabn_ctxaresaevp_pkeyTaselfanumbersaec_cdataaevp_pkeyTaselfadataapasswordabioap12aevp_pkey_ptrax509_ptrask_x509_ptrapassword_bufaresacertakeyaadditional_certificatesaevp_pkeyax509ask_x509anumwiTaselfadataamem_bioadh_cdataTaselfadataapasswordT
aselfanumbersarsa_cdatawpwqwdadmp1admq1aiqmpwewnaresaevp_pkeyTaselfanumbersarsa_cdatawewnaresaevp_pkeyTaselfaokTaselfabufwearesTaselfacipher_clsamode_clsaadapterTaselfapaddingTaselfadataapkcs8_prefixabaabioaevp_pkeyTaselfadataaevp_pkeyaresTaselfanameax509_nameapparesu.cryptography.hazmat.backends.openssl.ciphers�a_backenda_ciphera_modea_operationa_tagaciphersaBlockCipherAlgorithmablock_sizela_block_size_bytesla_libaEVP_CIPHER_CTX_newa_ffiagcaEVP_CIPHER_CTX_freea_cipher_registryaUnsupportedAlgorithmucipher {} in {} mode is not supported by this backend.anamea_ReasonsaUNSUPPORTED_CIPHERaNULLucipher {0.name} uin {0.name} mode uis not supported by this backend (Your version of OpenSSL may be too old. Current version: {}.)aopenssl_version_textamodesaModeWithInitializationVectorafrom_bufferainitialization_vectoraModeWithTweakatweakaModeWithNonceanonceaEVP_CipherInit_exaopenssl_assertlaEVP_CIPHER_CTX_set_key_lengthakeyaGCMaEVP_CIPHER_CTX_ctrlaEVP_CTRL_AEAD_SET_IVLENatagaEVP_CTRL_AEAD_SET_TAGa_DECRYPTaCRYPTOGRAPHY_OPENSSL_LESS_THAN_102aCRYPTOGRAPHY_IS_LIBRESSLudelayed passing of GCM tag requires OpenSSL >= 1.0.2. To use this feature please update OpenSSLaiv_nonceaEVP_CIPHER_CTX_set_paddinga_ctxaupdate_intoubuffer must be at least {} bytes for this payloadacastuunsigned char *anewTuint *aEVP_CipherUpdateaupdateTcaModeWithAuthenticationTaguAuthentication tag must be provided when decrypting.uunsigned char[]aEVP_CipherFinal_exa_consume_errorsaInvalidTaga_lib_reason_matchaERR_LIB_EVPaEVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTHuThe length of the provided data is not a multiple of the block length.a_ENCRYPTaEVP_CTRL_AEAD_GET_TAGabuffer:nnnaEVP_CIPHER_CTX_cleanupufinalize_with_tag requires OpenSSL >= 1.0.2. To use this method please update OpenSSLa_min_tag_lengthuAuthentication tag must be {} bytes or longer.afinalizea__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/ciphers.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacryptographyTautilsautilsucryptography.exceptionsTaInvalidTagaUnsupportedAlgorithma_Reasonsucryptography.hazmat.primitivesTaciphersucryptography.hazmat.primitives.ciphersTamodesTOobjectametaclassa__prepare__a_CipherContexta__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aregister_interfaceaCipherContextaAEADCipherContextaAEADEncryptionContextaAEADDecryptionContextucryptography.hazmat.backends.openssl.ciphersa__module__a__qualname__a__init__u_CipherContext.__init__u_CipherContext.updateu_CipherContext.update_intou_CipherContext.finalizeafinalize_with_tagu_CipherContext.finalize_with_tagaauthenticate_additional_datau_CipherContext.authenticate_additional_dataaread_only_propertyTa_taga__orig_bases__u<module cryptography.hazmat.backends.openssl.ciphers>Ta__class__Taselfabackendacipheramodeaoperationactxaregistryaadapteraevp_cipheramsgaiv_noncearesTaselfadataaoutlenaresTaselfabufaoutlenaresaerrorsatag_bufTaselfatagaresTaselfadataabufwnTaselfadataabufaoutlenaresu.cryptography.hazmat.backends.openssl.cmac?^acmac_algorithm_supportedaUnsupportedAlgorithmuThis backend does not support CMAC.a_ReasonsaUNSUPPORTED_CIPHERa_backendakeya_keya_algorithmablock_sizela_output_lengtha_cipher_registryaCBCa_libaCMAC_CTX_newaopenssl_asserta_ffiaNULLagcaCMAC_CTX_freeafrom_bufferaCMAC_Initlactxaselfa_ctxaCMAC_Updateanewuunsigned char[]usize_t *aCMAC_Finalabuffer:nnnaCMAC_CTX_copya_CMACContextTactxafinalizeaconstant_timeabytes_eqaInvalidSignatureTuSignature did not match digest.a__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/cmac.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacryptographyTautilslautilsucryptography.exceptionsTaInvalidSignatureaUnsupportedAlgorithma_Reasonsucryptography.hazmat.primitivesTaconstant_timeucryptography.hazmat.primitives.ciphers.modesTaCBCTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucryptography.hazmat.backends.openssl.cmaca__module__a__qualname__Tna__init__u_CMACContext.__init__aread_only_propertyTa_algorithmaalgorithmaupdateu_CMACContext.updateu_CMACContext.finalizeacopyu_CMACContext.copyaverifyu_CMACContext.verifya__orig_bases__u<module cryptography.hazmat.backends.openssl.cmac>Ta__class__T	aselfabackendaalgorithmactxaregistryaadapteraevp_cipherakey_ptraresTaselfacopied_ctxaresTaselfabufalengtharesTaselfadataaresTaselfasignatureadigestu.cryptography.hazmat.backends.openssl�a__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/__init__.pya__file__Lu/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssla__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aabsolute_importadivisionaprint_functionucryptography.hazmat.backends.openssl.backendTabackendabackendLabackenda__all__u<module cryptography.hazmat.backends.openssl>u.cryptography.hazmat.backends.openssl.decode_asn1?)�a_ffianewTuchar[]lPa_libaOBJ_obj2txtlPllOuchar[]aopenssl_assertlabufferabuf:nnnadecodeaX509_NAME_ENTRY_get_objectaNULLaX509_NAME_ENTRY_get_dataa_asn1_string_to_utf8a_obj2txta_ASN1_TYPE_TO_ENUMatypeax509aNameAttributeaObjectIdentifieraX509_NAME_entry_countl��������abackendaX509_NAME_get_entryax509_namea_decode_x509_name_entryaCryptography_X509_NAME_ENTRY_setaprev_set_idaattributesaappendaaddaNameaRelativeDistinguishedNameu<genexpr>u_decode_x509_name.<locals>.<genexpr>ask_GENERAL_NAME_numask_GENERAL_NAME_valueagnsanamesa_decode_general_nameaGEN_DNSa_asn1_string_to_byteswdadNSNameTautf8aDNSNamea_init_without_validationaGEN_URIauniformResourceIdentifieraUniformResourceIdentifieraGEN_RIDaregisteredIDaRegisteredIDaGEN_IPADDaiPAddressaipaddressaip_addressl:lnnafindTw0w1uInvalid netmaskaip_networkaexplodedu/{}aIPAddressaGEN_DIRNAMEaDirectoryNamea_decode_x509_nameadirectoryNameaGEN_EMAILarfc822NameaRFC822NameaGEN_OTHERNAMEaotherNameatype_ida_asn1_to_deravalueaOtherNameaUnsupportedGeneralNameTypeu{} is not a supported typea_GENERAL_NAMESagetaOCSPNoCheckacastuASN1_INTEGER *agcaASN1_INTEGER_freeaCRLNumbera_asn1_integer_to_intaDeltaCRLIndicatoraext_countaget_extahandlersaselfax509_objaX509_EXTENSION_get_criticalaX509_EXTENSION_get_objectaseen_oidsaDuplicateExtensionuDuplicate {} extension foundaExtensionOIDaTLS_FEATUREaX509_EXTENSION_get_dataaDERReaderaread_single_elementaSEQUENCEafeaturesais_emptyaparsedaread_elementaINTEGERaas_integeraTLSFeaturea_TLS_FEATURE_TYPE_TO_ENUMaextensionsaExtensionaPRECERT_POISONacheck_emptyaPrecertPoisonadataalengthaUnrecognizedExtensionaX509V3_EXT_d2ia_consume_errorsuThe {} extension is invalid and can't be parsedaoidahandleracriticalaExtensionsuCryptography_STACK_OF_POLICYINFO *aCERTIFICATEPOLICIES_freeask_POLICYINFO_numask_POLICYINFO_valueacpapolicyidaqualifiersask_POLICYQUALINFO_numask_POLICYQUALINFO_valueapiapqualidaCertificatePoliciesOIDaCPS_QUALIFIERacpsuriTaasciiaCPS_USER_NOTICEa_decode_user_noticeausernoticeacertificate_policiesaPolicyInformationaCertificatePoliciesaexptextanoticerefaorganizationask_ASN1_INTEGER_numanoticenosask_ASN1_INTEGER_valueaunanotice_numbersaNoticeReferenceaUserNoticeuBASIC_CONSTRAINTS *aBASIC_CONSTRAINTS_freeacal�a_asn1_integer_to_int_or_noneapathlenaBasicConstraintsuASN1_OCTET_STRING *aASN1_OCTET_STRING_freeaSubjectKeyIdentifieruAUTHORITY_KEYID *aAUTHORITY_KEYID_freeakeyidaissuera_decode_general_namesaserialaAuthorityKeyIdentifieruCryptography_STACK_OF_ACCESS_DESCRIPTION *u<lambda>u_decode_authority_information_access.<locals>.<lambda>ask_ACCESS_DESCRIPTION_numask_ACCESS_DESCRIPTION_valueaaiaamethodalocationaaccess_descriptionsaAccessDescriptionaAuthorityInformationAccessask_ACCESS_DESCRIPTION_pop_freeaaddressofa_original_libaACCESS_DESCRIPTION_freeuASN1_BIT_STRING *aASN1_BIT_STRING_freeaASN1_BIT_STRING_get_bitllllllaKeyUsageuGENERAL_NAMES *aGENERAL_NAMES_freeaSubjectAlternativeNamea_decode_general_names_extensionaIssuerAlternativeNameuNAME_CONSTRAINTS *aNAME_CONSTRAINTS_freea_decode_general_subtreesapermittedSubtreesaexcludedSubtreesaNameConstraintsTapermitted_subtreesaexcluded_subtreesask_GENERAL_SUBTREE_numask_GENERAL_SUBTREE_valueastack_subtreesabaseasubtreesuISSUING_DIST_POINT *aISSUING_DIST_POINT_freeadistpointa_decode_distpointutoo many values to unpack (expected 2)aonlyuseraonlyCAaindirectCRLaonlyattraonlysomereasonsa_decode_reasonsaIssuingDistributionPointuPOLICY_CONSTRAINTS *aPOLICY_CONSTRAINTS_freearequireExplicitPolicyainhibitPolicyMappingaPolicyConstraintsuCryptography_STACK_OF_ASN1_OBJECT *ask_ASN1_OBJECT_freeask_ASN1_OBJECT_numask_ASN1_OBJECT_valueaskaekusaExtendedKeyUsageuCryptography_STACK_OF_DIST_POINT *aCRL_DIST_POINTS_freeask_DIST_POINT_numask_DIST_POINT_valueacdpsareasonsaCRLissueradist_pointsaDistributionPointasixaiteritemsa_REASON_BIT_MAPPINGaenum_reasonsa_DISTPOINT_TYPE_FULLNAMEanameafullnamearelativenameask_X509_NAME_ENTRY_numask_X509_NAME_ENTRY_valuearnsa_decode_dist_pointsaCRLDistributionPointsaFreshestCRLaInhibitAnyPolicyucryptography.hazmat.backends.openssl.x509Ta_SignedCertificateTimestampa_SignedCertificateTimestampuCryptography_STACK_OF_SCT *aSCT_LIST_freeask_SCT_numask_SCT_valueaasn1_sctsasctsaPrecertificateSignedCertificateTimestampsuASN1_ENUMERATED *aASN1_ENUMERATED_freeaASN1_ENUMERATED_getaCRLReasona_CRL_ENTRY_REASON_CODE_TO_ENUMuUnsupported reason code: {}uASN1_GENERALIZEDTIME *aASN1_GENERALIZEDTIME_freeaInvalidityDatea_parse_asn1_generalized_timeaCertificateIssuerTuunsigned char **ai2d_ASN1_TYPEu_asn1_to_der.<locals>.<lambda>aOPENSSL_freeaASN1_INTEGER_to_BNaBN_freea_bn_to_intaASN1_STRING_to_UTF8uUnsupported ASN1 string type. Type: {}u_asn1_string_to_utf8.<locals>.<lambda>aASN1_TIME_to_generalizedtimeuCouldn't parse ASN.1 time as generalizedtime {!r}a_asn1_string_to_asciiuASN1_STRING *adatetimeastrptimeu%Y%m%d%H%M%SZaOCSPNonceaX509_get_ext_countaX509_get_extask_X509_EXTENSION_numask_X509_EXTENSION_valueaX509_REVOKED_get_ext_countaX509_REVOKED_get_extaX509_CRL_get_ext_countaX509_CRL_get_extaOCSP_REQUEST_get_ext_countaOCSP_REQUEST_get_extaOCSP_BASICRESP_get_ext_countaOCSP_BASICRESP_get_exta__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/decode_asn1.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacryptographyTax509ucryptography.hazmat._derTaDERReaderaINTEGERaNULLaSEQUENCEucryptography.x509.extensionsTa_TLS_FEATURE_TYPE_TO_ENUMucryptography.x509.nameTa_ASN1_TYPE_TO_ENUMucryptography.x509.oidTaCRLEntryExtensionOIDaCertificatePoliciesOIDaExtensionOIDaOCSPExtensionOIDaCRLEntryExtensionOIDaOCSPExtensionOIDa_decode_ocsp_no_checka_decode_crl_numbera_decode_delta_crl_indicatorTOobjectametaclassa__prepare__a_X509ExtensionParsera__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucryptography.hazmat.backends.openssl.decode_asn1a__module__a__qualname__a__init__u_X509ExtensionParser.__init__aparseu_X509ExtensionParser.parsea__orig_bases__a_decode_certificate_policiesa_decode_basic_constraintsa_decode_subject_key_identifiera_decode_authority_key_identifiera_decode_authority_information_accessa_decode_key_usagea_decode_subject_alt_namea_decode_issuer_alt_namea_decode_name_constraintsa_decode_issuing_dist_pointa_decode_policy_constraintsa_decode_extended_key_usagea_DISTPOINT_TYPE_RELATIVENAMEaReasonFlagsakey_compromiseaca_compromiseaaffiliation_changedasupersededacessation_of_operationacertificate_holdaprivilege_withdrawnaaa_compromisea_decode_crl_distribution_pointsa_decode_freshest_crla_decode_inhibit_any_policya_decode_precert_signed_certificate_timestampsaunspecifiedaremove_from_crll	l
a_CRL_ENTRY_REASON_ENUM_TO_CODEa_decode_crl_reasona_decode_invalidity_datea_decode_cert_issuera_parse_asn1_timea_decode_nonceaBASIC_CONSTRAINTSaSUBJECT_KEY_IDENTIFIERaKEY_USAGEaSUBJECT_ALTERNATIVE_NAMEaEXTENDED_KEY_USAGEaAUTHORITY_KEY_IDENTIFIERaAUTHORITY_INFORMATION_ACCESSaCERTIFICATE_POLICIESaCRL_DISTRIBUTION_POINTSaFRESHEST_CRLaOCSP_NO_CHECKaINHIBIT_ANY_POLICYaISSUER_ALTERNATIVE_NAMEaNAME_CONSTRAINTSaPOLICY_CONSTRAINTSa_EXTENSION_HANDLERS_NO_SCTa_EXTENSION_HANDLERSaPRECERT_SIGNED_CERTIFICATE_TIMESTAMPSaCRL_REASONaINVALIDITY_DATEaCERTIFICATE_ISSUERa_REVOKED_EXTENSION_HANDLERSaCRL_NUMBERaDELTA_CRL_INDICATORaISSUING_DISTRIBUTION_POINTa_CRL_EXTENSION_HANDLERSaNONCEa_OCSP_REQ_EXTENSION_HANDLERSa_OCSP_BASICRESP_EXTENSION_HANDLERSTaext_countaget_extahandlersa_CERTIFICATE_EXTENSION_PARSER_NO_SCTa_CERTIFICATE_EXTENSION_PARSERa_CSR_EXTENSION_PARSERa_REVOKED_CERTIFICATE_EXTENSION_PARSERa_CRL_EXTENSION_PARSERa_OCSP_REQ_EXT_PARSERa_OCSP_BASICRESP_EXT_PARSERTa.0ardnTabackendwxTabackendwxwiTabufferabackendTabackendTwxabackendu<listcomp>Twxu<module cryptography.hazmat.backends.openssl.decode_asn1>Ta__class__Taselfaext_countaget_extahandlersTabackendaasn1_intabnTabackendaasn1_intTabackendaasn1_stringTabackendaasn1_stringabufaresTabackendaasn1_typeabufaresTabackendaaiaanumaaccess_descriptionswiaadaoidagnTabackendaakidakey_identifieraauthority_cert_issueraauthority_cert_serial_numberTabackendabc_stabasic_constraintsacaapath_lengthTabackendagnsageneral_namesTabackendacpanumacertificate_policieswiaqualifiersapiaoidaqnumwjapqiapqualidacpsuriauser_noticeTabackendacdpsadist_pointsTabackendaextaasn1_intTabackendaenumacodeT
abackendacdpsanumadist_pointswiafull_namearelative_nameacrl_issuerareasonsacdpT	abackendadistpointafull_namearnsarnumaattributeswiarnarelative_nameTabackendaskanumaekuswiaobjaoidTabackendagnadataaoidadata_lenabaseanetmaskabitsaprefixaipatype_idavalueTabackendagnsanumanameswiagnTabackendastack_subtreesanumasubtreeswiaobjanameTabackendaasn1_intaskip_certsTabackendainv_dateageneralized_timeTabackendaextT	abackendaidpafull_namearelative_nameaonly_useraonly_caaindirect_crlaonly_attraonly_some_reasonsTabackendabit_stringaget_bitadigital_signatureacontent_commitmentakey_enciphermentadata_enciphermentakey_agreementakey_cert_signacrl_signaencipher_onlyadecipher_onlyTabackendancapermittedaexcludedTabackendanonceTabackendapcarequire_explicit_policyainhibit_policy_mappingTabackendaasn1_sctsa_SignedCertificateTimestampasctswiasctTabackendareasonsaenum_reasonsabit_positionareasonT
abackendaunaexplicit_textanotice_referenceaorganizationanumanotice_numberswiaasn1_intanotice_numT	abackendax509_nameacountaattributesaprev_set_idwxaentryaattributeaset_idTabackendax509_name_entryaobjadataavalueaoidatypeTabackendaobjabuf_lenabufaresTabackendageneralized_timeatimeTabackendaasn1_timeageneralized_timeTaselfabackendax509_objaextensionsaseen_oidswiaextacritacriticalaoidadataadata_bytesafeaturesaparsedavalueareaderahandleraderaunrecognizedaext_datau.cryptography.hazmat.backends.openssl.dhI�a_liba_ffiaDHparams_dupaopenssl_assertaNULLagcaDH_freeaCRYPTOGRAPHY_OPENSSL_LESS_THAN_102anewTuBIGNUM **aDH_get0_pqgaBN_duplaDH_set0_pqglaparam_cdataa_dh_params_dupa_DHParametersa_backenda_dh_cdataa_bn_to_intadhaDHParameterNumbersTwpwgwqagenerate_dh_private_keyaserializationaParameterFormataPKCS3uOnly PKCS3 serialization is supportedaCryptography_HAS_EVP_PKEY_DHXaUnsupportedAlgorithmuDH X9.42 serialization is not supporteda_ReasonsaUNSUPPORTED_SERIALIZATIONa_parameter_bytesa_lib_reason_matchaERR_LIB_DHaDH_R_INVALID_PUBKEYuPublic key value is invalid for this exchange.aBN_num_bitsa_evp_pkeyaDH_sizea_key_size_bytesa_get_dh_num_bitsaDH_get0_keyaDHPrivateNumbersaDHPublicNumbersTaparameter_numberswyTapublic_numberswxuunsigned char[]aDH_compute_keyl��������a_consume_errorsa_handle_dh_compute_key_errorabufferdakeyaDH_set0_keya_dh_cdata_to_evp_pkeya_DHPublicKeya_dh_cdata_to_parametersaPrivateFormataPKCS8uDH private keys support only PKCS8 serializationa_private_key_bytesa_key_size_bitsaPublicFormataSubjectPublicKeyInfouDH public keys support only SubjectPublicKeyInfo serializationa_public_key_bytesa__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/dh.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacryptographyTautilsautilsucryptography.exceptionsTaUnsupportedAlgorithma_Reasonsucryptography.hazmat.primitivesTaserializationucryptography.hazmat.primitives.asymmetricTadhTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aregister_interfaceaDHParametersWithSerializationucryptography.hazmat.backends.openssl.dha__module__a__qualname__a__init__u_DHParameters.__init__aparameter_numbersu_DHParameters.parameter_numbersagenerate_private_keyu_DHParameters.generate_private_keyaparameter_bytesu_DHParameters.parameter_bytesa__orig_bases__a_DHPrivateKeyaDHPrivateKeyWithSerializationu_DHPrivateKey.__init__apropertyakey_sizeu_DHPrivateKey.key_sizeaprivate_numbersu_DHPrivateKey.private_numbersaexchangeu_DHPrivateKey.exchangeapublic_keyu_DHPrivateKey.public_keyaparametersu_DHPrivateKey.parametersaprivate_bytesu_DHPrivateKey.private_bytesaDHPublicKeyWithSerializationu_DHPublicKey.__init__u_DHPublicKey.key_sizeapublic_numbersu_DHPublicKey.public_numbersu_DHPublicKey.parametersapublic_bytesu_DHPublicKey.public_bytesu<module cryptography.hazmat.backends.openssl.dh>Ta__class__Taselfabackendadh_cdataTaselfabackendadh_cdataaevp_pkeyTadh_cdataabackendaparam_cdataTadh_cdataabackendalibaffiaparam_cdatawqaq_duparesTabackendadh_cdatawpTaerrorsabackendalibTaselfapeer_public_keyabufapub_keyaresaerrorsakeyapadTaselfTaselfaencodingaformatwqTaselfwpwgwqaq_valTaselfaencodingaformataencryption_algorithmwqTaselfwpwgwqaq_valapub_keyapriv_keyTaselfadh_cdataapub_keyapub_key_duparesaevp_pkeyTaselfwpwgwqaq_valapub_keyu.cryptography.hazmat.backends.openssl.dsa�a_libaDSA_sizea_dsa_cdataa_ffianewuunsigned char[]Tuunsigned int *aDSA_signlaopenssl_assertlabufferaDSA_verifya_consume_errorsaInvalidSignaturea_backenda_public_keya_signaturea_algorithmahashesaHasha_hash_ctxaupdateafinalizea_dsa_sig_verifya_private_keya_dsa_sig_signTuBIGNUM **aDSA_get0_pqgaNULLadsaaDSAParameterNumbersa_bn_to_intTwpwqwgagenerate_dsa_private_keya_evp_pkeyaBN_num_bitsa_key_sizea_warn_sign_verify_deprecateda_check_not_prehasheda_DSASignatureContextaDSA_get0_keyaDSAPrivateNumbersaDSAPublicNumbersTaparameter_numberswyTapublic_numberswxaDSAparams_dupagcaDSA_freeaBN_dupaDSA_set0_keya_dsa_cdata_to_evp_pkeya_DSAPublicKeya_DSAParametersa_private_key_bytesa_calculate_digest_and_algorithmutoo many values to unpack (expected 2)autilsa_check_bytesasignaturea_DSAVerificationContextaserializationaPublicFormataPKCS1uDSA public keys do not support PKCS1 serializationa_public_key_bytesa__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/dsa.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacryptographyTautilsucryptography.exceptionsTaInvalidSignatureucryptography.hazmat.backends.openssl.utilsTa_calculate_digest_and_algorithma_check_not_prehasheda_warn_sign_verify_deprecateducryptography.hazmat.primitivesTahashesaserializationucryptography.hazmat.primitives.asymmetricTaAsymmetricSignatureContextaAsymmetricVerificationContextadsaaAsymmetricSignatureContextaAsymmetricVerificationContextTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aregister_interfaceucryptography.hazmat.backends.openssl.dsaa__module__a__qualname__a__init__u_DSAVerificationContext.__init__u_DSAVerificationContext.updateaverifyu_DSAVerificationContext.verifya__orig_bases__u_DSASignatureContext.__init__u_DSASignatureContext.updateu_DSASignatureContext.finalizeaDSAParametersWithNumbersu_DSAParameters.__init__aparameter_numbersu_DSAParameters.parameter_numbersagenerate_private_keyu_DSAParameters.generate_private_keya_DSAPrivateKeyaDSAPrivateKeyWithSerializationu_DSAPrivateKey.__init__aread_only_propertyTa_key_sizeakey_sizeasigneru_DSAPrivateKey.signeraprivate_numbersu_DSAPrivateKey.private_numbersapublic_keyu_DSAPrivateKey.public_keyaparametersu_DSAPrivateKey.parametersaprivate_bytesu_DSAPrivateKey.private_bytesasignu_DSAPrivateKey.signaDSAPublicKeyWithSerializationu_DSAPublicKey.__init__averifieru_DSAPublicKey.verifierapublic_numbersu_DSAPublicKey.public_numbersu_DSAPublicKey.parametersapublic_bytesu_DSAPublicKey.public_bytesu_DSAPublicKey.verifyu<module cryptography.hazmat.backends.openssl.dsa>Ta__class__Taselfabackendadsa_cdataTaselfabackendadsa_cdataaevp_pkeywpTaselfabackendaprivate_keyaalgorithmTaselfabackendapublic_keyasignatureaalgorithmTabackendaprivate_keyadataasig_buf_lenasig_bufabuflenaresTabackendapublic_keyasignatureadataaresTaselfadata_to_signTaselfTaselfwpwqwgTaselfadsa_cdataTaselfaencodingaformataencryption_algorithmTaselfwpwqwgapub_keyapriv_keyTaselfaencodingaformatTaselfadsa_cdataapub_keyapub_key_duparesaevp_pkeyTaselfwpwqwgapub_keyTaselfadataaalgorithmTaselfasignature_algorithmTaselfadataTaselfasignatureasignature_algorithmTaselfadata_to_verifyTaselfasignatureadataaalgorithmu.cryptography.hazmat.backends.openssl.ec��aecaECDSAaUnsupportedAlgorithmuUnsupported elliptic curve signature algorithm.a_ReasonsaUNSUPPORTED_PUBLIC_KEY_ALGORITHMa_libaEC_KEY_get0_groupaopenssl_asserta_ffiaNULLaEC_GROUP_get_curve_nameaNID_undefuECDSA keys with unnamed curves are unsupported at this timeaCRYPTOGRAPHY_OPENSSL_110_OR_GREATERaEC_GROUP_get_asn1_flaglaOBJ_nid2snastringadecodeTaasciiaEC_KEY_set_asn1_flagaOPENSSL_EC_NAMED_CURVEu
    Set the named curve flag on the EC_KEY. This causes OpenSSL to
    serialize EC keys along with their curve OID which makes
    deserialization easier.
    a_CURVE_TYPESu{} is not a supported elliptic curveaUNSUPPORTED_ELLIPTIC_CURVEaECDSA_sizea_ec_keyanewuunsigned char[]Tuunsigned int[]laECDSA_signlabufferaECDSA_verifya_consume_errorsaInvalidSignaturea_backenda_private_keyahashesaHasha_digestaupdateafinalizea_ecdsa_sig_signa_public_keya_signaturea_ecdsa_sig_verifya_evp_pkeya_ec_key_curve_sna_sn_to_elliptic_curvea_curvea_mark_asn1_named_ec_curveacurveakey_sizea_warn_sign_verify_deprecateda_check_signature_algorithma_check_not_prehashedaalgorithma_ECDSASignatureContextaelliptic_curve_exchange_algorithm_supporteduThis backend does not support the ECDH algorithm.aUNSUPPORTED_EXCHANGE_ALGORITHManameupeer_public_key and self are not on the same curveaEC_GROUP_get_degreelluuint8_t[]aEC_KEY_get0_public_keyaECDH_compute_keyaEC_KEY_new_by_curve_nameagcaEC_KEY_freeaEC_KEY_set_public_keya_ec_cdata_to_evp_pkeya_EllipticCurvePublicKeyaEC_KEY_get0_private_keya_bn_to_intaEllipticCurvePrivateNumbersapublic_keyapublic_numbersTaprivate_valueapublic_numbersa_private_key_bytesa_calculate_digest_and_algorithma_algorithmutoo many values to unpack (expected 2)autilsa_check_bytesasignaturea_ECDSAVerificationContexta_ec_key_determine_group_get_funca_tmp_bn_ctxa__enter__a__exit__aBN_CTX_getTnnnaEllipticCurvePublicNumberswxwyTwxwyacurveaserializationaPublicFormataCompressedPointaPOINT_CONVERSION_COMPRESSEDaUncompressedPointaPOINT_CONVERSION_UNCOMPRESSEDaselfaEC_POINT_point2octuchar[]abuf:nnnaPKCS1uEC public keys do not support PKCS1 serializationaEncodingaX962uX962 encoding must be used with CompressedPoint or UncompressedPoint formata_encode_pointa_public_key_bytesa__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/ec.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacryptographyTautilsucryptography.exceptionsTaInvalidSignatureaUnsupportedAlgorithma_Reasonsucryptography.hazmat.backends.openssl.utilsTa_calculate_digest_and_algorithma_check_not_prehasheda_warn_sign_verify_deprecateducryptography.hazmat.primitivesTahashesaserializationucryptography.hazmat.primitives.asymmetricTaAsymmetricSignatureContextaAsymmetricVerificationContextaecaAsymmetricSignatureContextaAsymmetricVerificationContextTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aregister_interfaceucryptography.hazmat.backends.openssl.eca__module__a__qualname__a__init__u_ECDSASignatureContext.__init__u_ECDSASignatureContext.updateu_ECDSASignatureContext.finalizea__orig_bases__u_ECDSAVerificationContext.__init__u_ECDSAVerificationContext.updateaverifyu_ECDSAVerificationContext.verifya_EllipticCurvePrivateKeyaEllipticCurvePrivateKeyWithSerializationu_EllipticCurvePrivateKey.__init__aread_only_propertyTa_curveapropertyu_EllipticCurvePrivateKey.key_sizeasigneru_EllipticCurvePrivateKey.signeraexchangeu_EllipticCurvePrivateKey.exchangeu_EllipticCurvePrivateKey.public_keyaprivate_numbersu_EllipticCurvePrivateKey.private_numbersaprivate_bytesu_EllipticCurvePrivateKey.private_bytesasignu_EllipticCurvePrivateKey.signaEllipticCurvePublicKeyWithSerializationu_EllipticCurvePublicKey.__init__u_EllipticCurvePublicKey.key_sizeaverifieru_EllipticCurvePublicKey.verifieru_EllipticCurvePublicKey.public_numbersu_EllipticCurvePublicKey._encode_pointapublic_bytesu_EllipticCurvePublicKey.public_bytesu_EllipticCurvePublicKey.verifyu<module cryptography.hazmat.backends.openssl.ec>Ta__class__Taselfabackendaec_key_cdataaevp_pkeyasnTaselfabackendaprivate_keyaalgorithmTaselfabackendapublic_keyasignatureaalgorithmTasignature_algorithmTabackendaec_keyagroupanidacurve_nameasnTabackendaprivate_keyadataamax_sizeasigbufasiglen_ptraresTabackendapublic_keyasignatureadataaresT	aselfaformataconversionagroupapointabn_ctxabuflenabufaresTabackendaec_cdataTabackendasnTaselfaalgorithmapeer_public_keyagroupaz_lenaz_bufapeer_keywrTaselfadigestTaselfTaselfaencodingaformataencryption_algorithmTaselfabnaprivate_valueTaselfaencodingaformatTaselfagroupacurve_nidapublic_ec_keyapointaresaevp_pkeyT
aselfaget_funcagroupapointabn_ctxabn_xabn_yareswxwyTaselfadataasignature_algorithmaalgorithmTaselfasignature_algorithmTaselfadataTaselfasignatureasignature_algorithmTaselfasignatureadataasignature_algorithmaalgorithmu.cryptography.hazmat.backends.openssl.ed25519	ha_backenda_evp_pkeyaserializationaEncodingaRawaPublicFormatuWhen using Raw both encoding and format must be Rawa_raw_public_bytesa_PEM_DERaSubjectPublicKeyInfouformat must be SubjectPublicKeyInfo when encoding is PEM or DERa_public_key_bytesa_ffianewuunsigned char []a_ED25519_KEY_SIZEusize_t *a_libaEVP_PKEY_get_raw_public_keyaopenssl_assertllabuffer:nnnaCryptography_EVP_MD_CTX_newaNULLagcaCryptography_EVP_MD_CTX_freeaEVP_DigestVerifyInitaEVP_DigestVerifya_consume_errorsaexceptionsaInvalidSignatureaed25519_load_public_bytesaEVP_DigestSignInituunsigned char[]a_ED25519_SIG_SIZEaEVP_DigestSignaPrivateFormataNoEncryptionuWhen using Raw both encoding and format must be Raw and encryption_algorithm must be NoEncryption()a_raw_private_bytesaPKCS8uformat must be PKCS8 when encoding is PEM or DERa_private_key_bytesaEVP_PKEY_get_raw_private_keya__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/ed25519.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacryptographyTaexceptionsautilsautilsucryptography.hazmat.primitivesTaserializationucryptography.hazmat.primitives.asymmetric.ed25519TaEd25519PrivateKeyaEd25519PublicKeya_ED25519_KEY_SIZEa_ED25519_SIG_SIZEaEd25519PrivateKeyaEd25519PublicKeyTOobjectametaclassa__prepare__a_Ed25519PublicKeya__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aregister_interfaceucryptography.hazmat.backends.openssl.ed25519a__module__a__qualname__a__init__u_Ed25519PublicKey.__init__apublic_bytesu_Ed25519PublicKey.public_bytesu_Ed25519PublicKey._raw_public_bytesaverifyu_Ed25519PublicKey.verifya__orig_bases__a_Ed25519PrivateKeyu_Ed25519PrivateKey.__init__apublic_keyu_Ed25519PrivateKey.public_keyasignu_Ed25519PrivateKey.signaprivate_bytesu_Ed25519PrivateKey.private_bytesu_Ed25519PrivateKey._raw_private_bytesu<module cryptography.hazmat.backends.openssl.ed25519>Ta__class__Taselfabackendaevp_pkeyTaselfabufabuflenaresTaselfaencodingaformataencryption_algorithmTaselfaencodingaformatTaselfabufabuflenaresapublic_bytesTaselfadataaevp_md_ctxaresabufabuflenTaselfasignatureadataaevp_md_ctxaresu.cryptography.hazmat.backends.openssl.ed448�ja_backenda_evp_pkeyaserializationaEncodingaRawaPublicFormatuWhen using Raw both encoding and format must be Rawa_raw_public_bytesa_PEM_DERaSubjectPublicKeyInfouformat must be SubjectPublicKeyInfo when encoding is PEM or DERa_public_key_bytesa_ffianewuunsigned char []a_ED448_KEY_SIZEusize_t *a_libaEVP_PKEY_get_raw_public_keyaopenssl_assertllabuffer:nnnaCryptography_EVP_MD_CTX_newaNULLagcaCryptography_EVP_MD_CTX_freeaEVP_DigestVerifyInitaEVP_DigestVerifya_consume_errorsaexceptionsaInvalidSignatureaed448_load_public_bytesaEVP_DigestSignInituunsigned char[]a_ED448_SIG_SIZEaEVP_DigestSignaPrivateFormataNoEncryptionuWhen using Raw both encoding and format must be Raw and encryption_algorithm must be NoEncryption()a_raw_private_bytesaPKCS8uformat must be PKCS8 when encoding is PEM or DERa_private_key_bytesaEVP_PKEY_get_raw_private_keya__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/ed448.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacryptographyTaexceptionsautilsautilsucryptography.hazmat.primitivesTaserializationucryptography.hazmat.primitives.asymmetric.ed448TaEd448PrivateKeyaEd448PublicKeyaEd448PrivateKeyaEd448PublicKeyl9lrTOobjectametaclassa__prepare__a_Ed448PublicKeya__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aregister_interfaceucryptography.hazmat.backends.openssl.ed448a__module__a__qualname__a__init__u_Ed448PublicKey.__init__apublic_bytesu_Ed448PublicKey.public_bytesu_Ed448PublicKey._raw_public_bytesaverifyu_Ed448PublicKey.verifya__orig_bases__a_Ed448PrivateKeyu_Ed448PrivateKey.__init__apublic_keyu_Ed448PrivateKey.public_keyasignu_Ed448PrivateKey.signaprivate_bytesu_Ed448PrivateKey.private_bytesu_Ed448PrivateKey._raw_private_bytesu<module cryptography.hazmat.backends.openssl.ed448>Ta__class__Taselfabackendaevp_pkeyTaselfabufabuflenaresTaselfaencodingaformataencryption_algorithmTaselfaencodingaformatTaselfabufabuflenaresapublic_bytesTaselfadataaevp_md_ctxaresabufabuflenTaselfasignatureadataaevp_md_ctxaresu.cryptography.hazmat.backends.openssl.encode_asn1V {a_int_to_bna_ffiagca_libaBN_freeaBN_to_ASN1_INTEGERaNULLaopenssl_assertu
    Converts a python integer to an ASN1_INTEGER. The returned ASN1_INTEGER
    will not be garbage collected (to support adding them to structs that take
    ownership of the object). Be sure to register it for GC if it will be
    discarded after use.

    a_encode_asn1_intaASN1_INTEGER_freeaASN1_OCTET_STRING_newaASN1_OCTET_STRING_setlu
    Create an ASN1_OCTET_STRING from a Python byte string.
    aASN1_UTF8STRING_newaASN1_STRING_setaencodeTautf8u
    Create an ASN1_UTF8STRING from a Python unicode string.
    This object will be an ASN1_STRING with UTF8 type in OpenSSL and
    can be decoded with ASN1_STRING_to_UTF8.
    a_encode_asn1_straASN1_OCTET_STRING_freea_encode_asn1_int_gcaskip_certsaX509_NAME_newardnsla_encode_name_entryabackendaX509_NAME_ENTRY_freeaX509_NAME_add_entryasubjectl��������aset_flagu
    The X509_NAME created will not be gc'd. Use _encode_name_gc if needed.
    a_encode_nameaX509_NAME_freeask_X509_NAME_ENTRY_new_nullask_X509_NAME_ENTRY_pushastacku
    The sk_X509_NAME_ENTRY created will not be gc'd.
    a_typea_ASN1TypeaBMPStringavalueTautf_16_beaUniversalStringTautf_32_bea_txt2obj_gcaoidadotted_stringaX509_NAME_ENTRY_create_by_OBJacrl_numberaISSUING_DIST_POINT_newaISSUING_DIST_POINT_freeaonly_contains_user_certsl�aonlyuseraonly_contains_ca_certsaonlyCAaindirect_crlaindirectCRLaonly_contains_attribute_certsaonlyattraonly_some_reasonsa_encode_reasonflagsaonlysomereasonsafull_namea_encode_full_nameadistpointarelative_namea_encode_relative_nameaASN1_ENUMERATED_newaASN1_ENUMERATED_freeaASN1_ENUMERATED_seta_CRL_ENTRY_REASON_ENUM_TO_CODEareasonaASN1_GENERALIZEDTIME_setacalendaratimegmainvalidity_dateatimetupleaASN1_GENERALIZEDTIME_freeask_POLICYINFO_new_nullask_POLICYINFO_freeaPOLICYINFO_newask_POLICYINFO_pushacpa_txt2objapolicy_identifierapolicyidapolicy_qualifiersask_POLICYQUALINFO_new_nullaPOLICYQUALINFO_newask_POLICYQUALINFO_pushapqisasixatext_typeax509aOID_CPS_QUALIFIERapqualidTaasciiwdacpsuriaUserNoticeaOID_CPS_USER_NOTICEaUSERNOTICE_newausernoticeaexplicit_texta_encode_asn1_utf8_straexptexta_encode_notice_referenceanotice_referenceanoticerefaqualifiersaNOTICEREF_newaorganizationask_ASN1_INTEGER_new_nullanoticenosanotice_numbersask_ASN1_INTEGER_pushanotice_stackaOBJ_txt2obju
    Converts a Python string with an ASN.1 object ID in dotted form to a
    ASN1_OBJECT.
    aASN1_OBJECT_freeaASN1_NULL_newaASN1_BIT_STRING_set_bitaASN1_BIT_STRING_newaASN1_BIT_STRING_freeadigital_signatureacontent_commitmentlakey_enciphermentladata_enciphermentlakey_agreementlakey_cert_signlacrl_signlaencipher_onlyladecipher_onlyaAUTHORITY_KEYID_newaAUTHORITY_KEYID_freeakey_identifierakeyidaauthority_cert_issuera_encode_general_namesaissueraauthority_cert_serial_numberaserialaBASIC_CONSTRAINTS_newaBASIC_CONSTRAINTS_freeacaapath_lengthapathlenask_ACCESS_DESCRIPTION_new_nullu<lambda>u_encode_authority_information_access.<locals>.<lambda>aACCESS_DESCRIPTION_newaaccess_methoda_encode_general_name_preallocatedaaccess_locationalocationamethodask_ACCESS_DESCRIPTION_pushaaiaask_ACCESS_DESCRIPTION_pop_freeaaddressofa_original_libaACCESS_DESCRIPTION_freeaGENERAL_NAMES_newa_encode_general_nameask_GENERAL_NAME_pushageneral_namesaGENERAL_NAMES_freea_encode_asn1_str_gcadigestaGENERAL_NAME_newaDNSNameaGEN_DNSatypeaASN1_IA5STRING_newadNSNameaRegisteredIDaGEN_RIDaregisteredIDaDirectoryNameaGEN_DIRNAMEadirectoryNameaIPAddressaipaddressaIPv4Networkanetwork_addressapackedautilsaint_to_byteslanum_addressesaIPv6Networkl�laGEN_IPADDaiPAddressaOtherNameaOTHERNAME_newatype_idanewuunsigned char[]Tuunsigned char **ad2i_ASN1_TYPEa_consume_errorsuInvalid ASN.1 dataaGEN_OTHERNAMEaotherNameaRFC822NameaGEN_EMAILarfc822NameaUniformResourceIdentifieraGEN_URIauniformResourceIdentifieru{} is an unknown GeneralName typeask_ASN1_OBJECT_new_nullask_ASN1_OBJECT_freeask_ASN1_OBJECT_pushaekuabitmaska_CRLREASONFLAGSaDIST_POINT_NAME_newa_DISTPOINT_TYPE_FULLNAMEanameafullnamea_DISTPOINT_TYPE_RELATIVENAMEa_encode_sk_name_entryarelativenameask_DIST_POINT_new_nullask_DIST_POINT_freeaDIST_POINT_newareasonsacrl_issueraCRLissuerask_DIST_POINT_pushacdpaNAME_CONSTRAINTS_newaNAME_CONSTRAINTS_freea_encode_general_subtreeapermitted_subtreesapermittedSubtreesaexcluded_subtreesaexcludedSubtreesaPOLICY_CONSTRAINTS_newaPOLICY_CONSTRAINTS_freearequire_explicit_policyarequireExplicitPolicyainhibit_policy_mappingainhibitPolicyMappingask_GENERAL_SUBTREE_new_nullaGENERAL_SUBTREE_newabaseask_GENERAL_SUBTREE_pushageneral_subtreesanoncea__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/encode_asn1.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacryptographyTautilsax509ucryptography.hazmat.backends.openssl.decode_asn1Ta_CRL_ENTRY_REASON_ENUM_TO_CODEa_DISTPOINT_TYPE_FULLNAMEa_DISTPOINT_TYPE_RELATIVENAMEucryptography.x509.nameTa_ASN1Typeucryptography.x509.oidTaCRLEntryExtensionOIDaExtensionOIDaOCSPExtensionOIDaCRLEntryExtensionOIDaExtensionOIDaOCSPExtensionOIDa_encode_inhibit_any_policya_encode_name_gca_encode_crl_number_delta_crl_indicatora_encode_issuing_dist_pointa_encode_crl_reasona_encode_invalidity_datea_encode_certificate_policiesa_encode_ocsp_nochecka_encode_key_usagea_encode_authority_key_identifiera_encode_basic_constraintsa_encode_authority_information_accessa_encode_alt_namea_encode_subject_key_identifiera_encode_extended_key_usageaReasonFlagsakey_compromiseaca_compromiseaaffiliation_changedasupersededacessation_of_operationacertificate_holdaprivilege_withdrawnaaa_compromisea_encode_cdps_freshest_crla_encode_name_constraintsa_encode_policy_constraintsa_encode_nonceaBASIC_CONSTRAINTSaSUBJECT_KEY_IDENTIFIERaKEY_USAGEaSUBJECT_ALTERNATIVE_NAMEaISSUER_ALTERNATIVE_NAMEaEXTENDED_KEY_USAGEaAUTHORITY_KEY_IDENTIFIERaCERTIFICATE_POLICIESaAUTHORITY_INFORMATION_ACCESSaCRL_DISTRIBUTION_POINTSaFRESHEST_CRLaINHIBIT_ANY_POLICYaOCSP_NO_CHECKaNAME_CONSTRAINTSaPOLICY_CONSTRAINTSa_EXTENSION_ENCODE_HANDLERSaCRL_NUMBERaDELTA_CRL_INDICATORaISSUING_DISTRIBUTION_POINTa_CRL_EXTENSION_ENCODE_HANDLERSaCERTIFICATE_ISSUERaCRL_REASONaINVALIDITY_DATEa_CRL_ENTRY_EXTENSION_ENCODE_HANDLERSaNONCEa_OCSP_REQUEST_EXTENSION_ENCODE_HANDLERSa_OCSP_BASICRESP_EXTENSION_ENCODE_HANDLERSTwxabackendTabackendu<module cryptography.hazmat.backends.openssl.encode_asn1>Tabackendasanageneral_namesTabackendwxwiTabackendadatawsaresTabackendadatawsTabackendastringwsaresTabackendaauthority_info_accessaaiaaaccess_descriptionaadamethodaresTabackendaauthority_keyidaakidTabackendabasic_constraintsaconstraintsTabackendacdpsacdpapointadparesTabackendacertificate_policiesacpapolicy_infoapiaresaoidapqisaqualifierapqiaunTabackendaextTabackendacrl_reasonaasn1enumaresTabackendaextended_key_usageaekuaoidaobjaresTabackendafull_nameadpnTabackendanameagnTabackendanameagnaia5avaluearesaobjadir_nameapackedaipaddraother_nameatype_idadataadata_ptr_ptraasn1_strTabackendanamesageneral_namesanameagnaresTabackendasubtreesageneral_subtreesanameagsaresTabackendainhibit_any_policyTabackendainvalidity_dateatimeTabackendaextaidpTabackendakey_usageaset_bitakuaresTabackendanameasubjectardnaset_flagaattributeaname_entryaresTabackendaname_constraintsancapermittedaexcludedTabackendaattributeavalueaobjaname_entryTabackendaattributesasubjectTabackendanonceTabackendanoticeanranotice_stackanumberanumaresTabackendapolicy_constraintsapcTabackendareasonsabitmaskareasonaresTabackendarelative_nameadpnTabackendaattributesastackaattributeaname_entryaresTabackendaskiTabackendanameaobju.cryptography.hazmat.backends.openssl.hashesWa_algorithma_backenda_libaCryptography_EVP_MD_CTX_newa_ffiagcaCryptography_EVP_MD_CTX_freea_evp_md_from_algorithmaNULLaUnsupportedAlgorithmu{} is not a supported hash on this backend.anamea_ReasonsaUNSUPPORTED_HASHaEVP_DigestInit_exaopenssl_assertlactxaselfa_ctxaEVP_MD_CTX_copy_exa_HashContextaalgorithmTactxafrom_bufferaEVP_DigestUpdateahashesaExtendableOutputFunctiona_finalize_xofanewuunsigned char[]aEVP_MAX_MD_SIZETuunsigned int *aEVP_DigestFinal_exadigest_sizeabufferaEVP_DigestFinalXOFa__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/hashes.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacryptographyTautilsautilsucryptography.exceptionsTaUnsupportedAlgorithma_Reasonsucryptography.hazmat.primitivesTahashesTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aregister_interfaceaHashContextucryptography.hazmat.backends.openssl.hashesa__module__a__qualname__Tna__init__u_HashContext.__init__aread_only_propertyTa_algorithmacopyu_HashContext.copyaupdateu_HashContext.updateafinalizeu_HashContext.finalizeu_HashContext._finalize_xofa__orig_bases__u<module cryptography.hazmat.backends.openssl.hashes>Ta__class__Taselfabackendaalgorithmactxaevp_mdaresTaselfabufaresTaselfacopied_ctxaresTaselfabufaoutlenaresTaselfadataadata_ptraresu.cryptography.hazmat.backends.openssl.hmac6[a_algorithma_backenda_libaCryptography_HMAC_CTX_newaopenssl_asserta_ffiaNULLagcaCryptography_HMAC_CTX_freea_evp_md_from_algorithmaUnsupportedAlgorithmu{} is not a supported hash on this backendanamea_ReasonsaUNSUPPORTED_HASHafrom_bufferaHMAC_Init_exlactxaselfa_ctxakeya_keyaHMAC_CTX_copya_HMACContextaalgorithmTactxaHMAC_Updateanewuunsigned char[]aEVP_MAX_MD_SIZETuunsigned int *aHMAC_Finaladigest_sizeabufferafinalizeaconstant_timeabytes_eqaInvalidSignatureTuSignature did not match digest.a__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/hmac.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacryptographyTautilsautilsucryptography.exceptionsTaInvalidSignatureaUnsupportedAlgorithma_Reasonsucryptography.hazmat.primitivesTaconstant_timeahashesahashesTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aregister_interfaceaHashContextucryptography.hazmat.backends.openssl.hmaca__module__a__qualname__Tna__init__u_HMACContext.__init__aread_only_propertyTa_algorithmacopyu_HMACContext.copyaupdateu_HMACContext.updateu_HMACContext.finalizeaverifyu_HMACContext.verifya__orig_bases__u<module cryptography.hazmat.backends.openssl.hmac>Ta__class__Taselfabackendakeyaalgorithmactxaevp_mdakey_ptraresTaselfacopied_ctxaresTaselfabufaoutlenaresTaselfadataadata_ptraresTaselfasignatureadigestu.cryptography.hazmat.backends.openssl.ocsp@�afunctoolsawrapsawrapperu_requires_successful_response.<locals>.wrapperaresponse_statusaOCSPResponseStatusaSUCCESSFULuOCSP response status is not successful so the property has no valueafunca_ffianewTuASN1_OCTET_STRING **a_libaOCSP_id_get0_infoaNULLaopenssl_assertlla_asn1_string_to_bytesTuASN1_INTEGER **a_asn1_integer_to_intTuASN1_OBJECT **a_obj2txta_OIDS_TO_HASHaUnsupportedAlgorithmuSignature algorithm OID: {} not recognizeda_backenda_ocsp_responseaOCSP_response_statusa_RESPONSE_STATUS_TO_ENUMa_statusaOCSP_response_get1_basicagcaOCSP_BASICRESP_freea_basicaOCSP_resp_countaOCSP_resp_get0a_singleaOCSP_SINGLERESP_get0_ida_cert_idaOCSP_resp_get0_tbs_sigalgaalgorithmax509aObjectIdentifierasignature_algorithm_oida_SIG_OIDS_TO_HASHuSignature algorithm OID:{} not recognizedaOCSP_resp_get0_signatureaOCSP_resp_get0_respdataTuunsigned char **ai2d_OCSP_RESPDATAu<lambda>u_OCSPResponse.tbs_response_bytes.<locals>.<lambda>abuffer:nnnaselfaOPENSSL_freeaOCSP_resp_get0_certsask_X509_numask_X509_valueask_x509a_Certificatea_ocsp_respacertsaappenda_responder_key_nameutoo many values to unpack (expected 2)a_decode_x509_nameTuX509_NAME **aOCSP_resp_get0_idaOCSP_resp_get0_produced_ata_parse_asn1_generalized_timeaOCSP_single_get0_statusa_CERT_STATUS_TO_ENUMacertificate_statusaOCSPCertStatusaREVOKEDTuASN1_GENERALIZEDTIME **Tuint *l��������a_CRL_ENTRY_REASON_CODE_TO_ENUMa_issuer_key_hasha_issuer_name_hasha_hash_algorithma_serial_numbera_OCSP_BASICRESP_EXT_PARSERaparseaserializationaEncodingaDERuThe only allowed encoding value is Encoding.DERa_create_mem_bio_gcai2d_OCSP_RESPONSE_bioa_read_mem_bioaOCSP_request_onereq_countuOCSP request contains more than one requesta_ocsp_requestaOCSP_request_onereq_get0a_requestaOCSP_onereq_get0_ida_OCSP_REQ_EXT_PARSERai2d_OCSP_REQUEST_bioa__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/ocsp.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacryptographyTautilsax509autilsucryptography.exceptionsTaUnsupportedAlgorithmucryptography.hazmat.backends.openssl.decode_asn1Ta_CRL_ENTRY_REASON_CODE_TO_ENUMa_OCSP_BASICRESP_EXT_PARSERa_OCSP_REQ_EXT_PARSERa_asn1_integer_to_inta_asn1_string_to_bytesa_decode_x509_namea_obj2txta_parse_asn1_generalized_timeucryptography.hazmat.backends.openssl.x509Ta_Certificateucryptography.hazmat.primitivesTaserializationucryptography.x509.ocspTaOCSPCertStatusaOCSPRequestaOCSPResponseaOCSPResponseStatusa_CERT_STATUS_TO_ENUMa_OIDS_TO_HASHa_RESPONSE_STATUS_TO_ENUMaOCSPRequestaOCSPResponsea_requires_successful_responseTOobjectametaclassa__prepare__a_OCSPResponsea__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aregister_interfaceucryptography.hazmat.backends.openssl.ocspa__module__a__qualname__a__init__u_OCSPResponse.__init__aread_only_propertyTa_statusapropertyu_OCSPResponse.signature_algorithm_oidasignature_hash_algorithmu_OCSPResponse.signature_hash_algorithmasignatureu_OCSPResponse.signatureatbs_response_bytesu_OCSPResponse.tbs_response_bytesacertificatesu_OCSPResponse.certificatesaresponder_key_hashu_OCSPResponse.responder_key_hasharesponder_nameu_OCSPResponse.responder_nameu_OCSPResponse._responder_key_nameaproduced_atu_OCSPResponse.produced_atu_OCSPResponse.certificate_statusarevocation_timeu_OCSPResponse.revocation_timearevocation_reasonu_OCSPResponse.revocation_reasonathis_updateu_OCSPResponse.this_updateanext_updateu_OCSPResponse.next_updateaissuer_key_hashu_OCSPResponse.issuer_key_hashaissuer_name_hashu_OCSPResponse.issuer_name_hashahash_algorithmu_OCSPResponse.hash_algorithmaserial_numberu_OCSPResponse.serial_numberacached_propertyaextensionsu_OCSPResponse.extensionsapublic_bytesu_OCSPResponse.public_bytesa__orig_bases__a_OCSPRequestu_OCSPRequest.__init__u_OCSPRequest.issuer_key_hashu_OCSPRequest.issuer_name_hashu_OCSPRequest.serial_numberu_OCSPRequest.hash_algorithmu_OCSPRequest.extensionsu_OCSPRequest.public_bytesTapointeraselfTaselfu<module cryptography.hazmat.backends.openssl.ocsp>Ta__class__Taselfabackendaocsp_requestTaselfabackendaocsp_responseastatusabasicTabackendacert_idaasn1objaresaoidTabackendacert_idakey_hasharesTabackendacert_idaname_hasharesTafuncawrapperTaselfaasn1_stringax509_namearesTabackendacert_idanumaresTaselfastatusTaselfask_x509anumacertswiax509acertTaselfaasn1_timeTaselfaproduced_atTaselfaencodingabioaresTaselfw_aasn1_stringTaselfax509_namew_Taselfareason_ptrTaselfasigTaselfaalgaoidTaselfaoidTaselfarespdataapparesTaselfaargsafuncTafuncu.cryptography.hazmat.backends.openssl.poly13053Ha_backenda_ffiafrom_buffera_libaEVP_PKEY_new_raw_private_keyaNID_poly1305aNULLaopenssl_assertagcaEVP_PKEY_freea_evp_pkeyaCryptography_EVP_MD_CTX_newaCryptography_EVP_MD_CTX_freea_ctxaEVP_DigestSignInitlaEVP_DigestSignUpdatelanewuunsigned char[]a_POLY1305_TAG_SIZETusize_t *aEVP_DigestSignFinalabufferafinalizeaconstant_timeabytes_eqaInvalidSignatureTuValue did not match computed tag.a__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/poly1305.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionucryptography.exceptionsTaInvalidSignatureucryptography.hazmat.primitivesTaconstant_timell a_POLY1305_KEY_SIZETOobjectametaclassa__prepare__a_Poly1305Contexta__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucryptography.hazmat.backends.openssl.poly1305a__module__a__qualname__a__init__u_Poly1305Context.__init__aupdateu_Poly1305Context.updateu_Poly1305Context.finalizeaverifyu_Poly1305Context.verifya__orig_bases__u<module cryptography.hazmat.backends.openssl.poly1305>Ta__class__Taselfabackendakeyakey_ptraevp_pkeyactxaresTaselfabufaoutlenaresTaselfadataadata_ptraresTaselfatagamacu.cryptography.hazmat.backends.openssl.rsa��a_salt_lengthaMGF1aMAX_LENGTHaPSSacalculate_max_pss_salt_lengthaAsymmetricPaddinguPadding must be an instance of AsymmetricPadding.aPKCS1v15a_libaRSA_PKCS1_PADDINGaOAEPaRSA_PKCS1_OAEP_PADDINGa_mgfaUnsupportedAlgorithmuOnly MGF1 is supported by this backend.a_ReasonsaUNSUPPORTED_MGFarsa_padding_supporteduThis combination of padding and hash algorithm is not supported by this backend.aUNSUPPORTED_PADDINGu{} is not supported by this backend.anamea_enc_dec_rsa_pkey_ctxabackendapaddinga_RSAPublicKeyaEVP_PKEY_encrypt_initaEVP_PKEY_encryptaEVP_PKEY_decrypt_initaEVP_PKEY_decryptaEVP_PKEY_CTX_newa_evp_pkeya_ffiaNULLaopenssl_assertagcaEVP_PKEY_CTX_freelaEVP_PKEY_CTX_set_rsa_paddinglaEVP_PKEY_sizeaCryptography_HAS_RSA_OAEP_MDa_evp_md_non_null_from_algorithma_algorithmaEVP_PKEY_CTX_set_rsa_mgf1_mdaEVP_PKEY_CTX_set_rsa_oaep_mda_labelaOPENSSL_mallocamemmoveaEVP_PKEY_CTX_set0_rsa_oaep_labelanewusize_t *uunsigned char[]abufferaERR_clear_erroruEncryption/decryption failed.uExpected provider of AsymmetricPadding.adigest_sizeluDigest too large for key size. Use a larger key or different digest.aRSA_PKCS1_PSS_PADDINGa_rsa_sig_determine_paddingaEVP_PKEY_CTX_set_signature_mda_consume_errorsu{} is not supported by this backend for RSA signing.aUNSUPPORTED_HASHaEVP_PKEY_CTX_set_rsa_pss_saltlena_get_rsa_pss_salt_lengtha_rsa_sig_setupaEVP_PKEY_sign_initTusize_t *aEVP_PKEY_signalibaERR_LIB_RSAareasonaRSA_R_DATA_TOO_LARGE_FOR_KEY_SIZEuSalt length too long for key size. Try using MAX_LENGTH instead.aRSA_R_DIGEST_TOO_BIG_FOR_RSA_KEYuDigest too large for key size. Use a larger key.:nnnaEVP_PKEY_verify_initaEVP_PKEY_verifyaInvalidSignaturea_backenda_private_keya_paddingahashesaHasha_hash_ctxaupdatea_rsa_sig_signafinalizea_public_keya_signaturea_rsa_sig_verifya_rsa_cdataTuBIGNUM **aRSA_get0_keyaBN_num_bitsa_key_sizea_warn_sign_verify_deprecateda_check_not_prehasheda_RSASignatureContextamathaceilakey_sizef @uCiphertext length must be equal to key size.a_enc_dec_rsaaRSAPublicKey_dupaRSA_freeaRSA_blinding_ona_rsa_cdata_to_evp_pkeyaRSA_get0_factorsaRSA_get0_crt_paramsarsaaRSAPrivateNumbersa_bn_to_intaRSAPublicNumbersTwewnTwpwqwdadmp1admq1aiqmpapublic_numbersa_private_key_bytesa_calculate_digest_and_algorithmutoo many values to unpack (expected 2)autilsa_check_bytesasignaturea_RSAVerificationContexta_public_key_bytesa__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/rsa.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacryptographyTautilsucryptography.exceptionsTaInvalidSignatureaUnsupportedAlgorithma_Reasonsucryptography.hazmat.backends.openssl.utilsTa_calculate_digest_and_algorithma_check_not_prehasheda_warn_sign_verify_deprecateducryptography.hazmat.primitivesTahashesucryptography.hazmat.primitives.asymmetricTaAsymmetricSignatureContextaAsymmetricVerificationContextarsaaAsymmetricSignatureContextaAsymmetricVerificationContextucryptography.hazmat.primitives.asymmetric.paddingTaAsymmetricPaddingaMGF1aOAEPaPKCS1v15aPSSacalculate_max_pss_salt_lengthucryptography.hazmat.primitives.asymmetric.rsaTaRSAPrivateKeyWithSerializationaRSAPublicKeyWithSerializationaRSAPrivateKeyWithSerializationaRSAPublicKeyWithSerializationTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aregister_interfaceucryptography.hazmat.backends.openssl.rsaa__module__a__qualname__a__init__u_RSASignatureContext.__init__u_RSASignatureContext.updateu_RSASignatureContext.finalizea__orig_bases__u_RSAVerificationContext.__init__u_RSAVerificationContext.updateaverifyu_RSAVerificationContext.verifya_RSAPrivateKeyu_RSAPrivateKey.__init__aread_only_propertyTa_key_sizeasigneru_RSAPrivateKey.signeradecryptu_RSAPrivateKey.decryptapublic_keyu_RSAPrivateKey.public_keyaprivate_numbersu_RSAPrivateKey.private_numbersaprivate_bytesu_RSAPrivateKey.private_bytesasignu_RSAPrivateKey.signu_RSAPublicKey.__init__averifieru_RSAPublicKey.verifieraencryptu_RSAPublicKey.encryptapublic_numbersu_RSAPublicKey.public_numbersapublic_bytesu_RSAPublicKey.public_bytesu_RSAPublicKey.verifyu<module cryptography.hazmat.backends.openssl.rsa>Ta__class__Taselfabackendaprivate_keyapaddingaalgorithmTaselfabackendapublic_keyasignatureapaddingaalgorithmTaselfabackendarsa_cdataaevp_pkeywnTabackendakeyadataapaddingapadding_enumTabackendakeyadataapadding_enumapaddingainitacryptapkey_ctxaresabuf_sizeamgf1_mdaoaep_mdalabelptraoutlenabufaresbufTapssakeyahash_algorithmasaltTabackendakeyapaddingaalgorithmapkey_sizeapadding_enumTabackendapaddingaalgorithmakeyadataainit_funcapadding_enumaevp_mdapkey_ctxaresamgf1_mdTabackendapaddingaalgorithmaprivate_keyadataapkey_ctxabuflenaresabufaerrorsareasonTabackendapaddingaalgorithmapublic_keyasignatureadataapkey_ctxaresTaselfaciphertextapaddingakey_size_bytesTaselfaplaintextapaddingTaselfTaselfaencodingaformataencryption_algorithmT	aselfwnwewdwpwqadmp1admq1aiqmpTaselfaencodingaformatTaselfactxaresaevp_pkeyTaselfwnweTaselfadataapaddingaalgorithmTaselfapaddingaalgorithmTaselfadataTaselfasignatureapaddingaalgorithmTaselfasignatureadataapaddingaalgorithmu.cryptography.hazmat.backends.openssl.utils<a_libaEVP_PKEY_CTX_newa_ffiaNULLaopenssl_assertagcaEVP_PKEY_CTX_freeaEVP_PKEY_derive_initlaEVP_PKEY_derive_set_peera_evp_pkeyanewTusize_t *aEVP_PKEY_deriveluunsigned char[]uNull shared key derived from public/private pair.abuffer:nnnaPrehashedahashesaHashaupdateafinalizea_algorithmaalgorithmadigest_sizeuThe provided data must be the same length as the hash algorithm's digest size.uPrehashed is only supported in the sign and verify methods. It cannot be used with signer or verifier.awarningsawarnusigner and verifier have been deprecated. Please use sign and verify instead.autilsaPersistentlyDeprecated2017Dastacklevella__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/utils.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacryptographyTautilsucryptography.hazmat.primitivesTahashesucryptography.hazmat.primitives.asymmetric.utilsTaPrehasheda_evp_pkey_derivea_calculate_digest_and_algorithma_check_not_prehasheda_warn_sign_verify_deprecatedu<module cryptography.hazmat.backends.openssl.utils>Tabackendadataaalgorithmahash_ctxTasignature_algorithmTabackendaevp_pkeyapeer_public_keyactxaresakeylenabufu.cryptography.hazmat.backends.openssl.x25519@	ja_backenda_evp_pkeyuBoth encoding and format are requiredawarningsawarnupublic_bytes now requires encoding and format arguments. Support for calling without arguments will be removed in cryptography 2.7autilsaDeprecatedIn25aserializationaEncodingaRawaPublicFormatuWhen using Raw both encoding and format must be Rawa_raw_public_bytesa_PEM_DERaSubjectPublicKeyInfouformat must be SubjectPublicKeyInfo when encoding is PEM or DERa_public_key_bytesa_ffianewTuunsigned char **a_libaEVP_PKEY_get1_tls_encodedpointaopenssl_assertl laNULLagcaOPENSSL_freeabuffer:nnna_create_mem_bio_gcai2d_PUBKEY_biolad2i_PUBKEY_bioaEVP_PKEY_freea_X25519PublicKeyaX25519PublicKeyupeer_public_key must be X25519PublicKey.a_evp_pkey_deriveaPrivateFormataNoEncryptionuWhen using Raw both encoding and format must be Raw and encryption_algorithm must be NoEncryption()a_raw_private_bytesaPKCS8uformat must be PKCS8 when encoding is PEM or DERa_private_key_bytesai2d_PKCS8PrivateKey_bioa_read_mem_bioa_X25519_KEY_SIZEa__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/x25519.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacryptographyTautilsucryptography.hazmat.backends.openssl.utilsTa_evp_pkey_deriveucryptography.hazmat.primitivesTaserializationucryptography.hazmat.primitives.asymmetric.x25519TaX25519PrivateKeyaX25519PublicKeyaX25519PrivateKeyTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aregister_interfaceucryptography.hazmat.backends.openssl.x25519a__module__a__qualname__a__init__u_X25519PublicKey.__init__Tnnapublic_bytesu_X25519PublicKey.public_bytesu_X25519PublicKey._raw_public_bytesa__orig_bases__a_X25519PrivateKeyu_X25519PrivateKey.__init__apublic_keyu_X25519PrivateKey.public_keyaexchangeu_X25519PrivateKey.exchangeaprivate_bytesu_X25519PrivateKey.private_bytesu_X25519PrivateKey._raw_private_bytesu<module cryptography.hazmat.backends.openssl.x25519>Ta__class__Taselfabackendaevp_pkeyTaselfabioaresapkcs8TaselfaucharpparesadataTaselfapeer_public_keyTaselfaencodingaformataencryption_algorithmTaselfaencodingaformatTaselfabioaresaevp_pkeyu.cryptography.hazmat.backends.openssl.x448�\a_backenda_evp_pkeyaserializationaEncodingaRawaPublicFormatuWhen using Raw both encoding and format must be Rawa_raw_public_bytesa_PEM_DERaSubjectPublicKeyInfouformat must be SubjectPublicKeyInfo when encoding is PEM or DERa_public_key_bytesa_ffianewuunsigned char []a_X448_KEY_SIZEusize_t *a_libaEVP_PKEY_get_raw_public_keyaopenssl_assertllabuffer:nnnax448_load_public_bytesaX448PublicKeyupeer_public_key must be X448PublicKey.a_evp_pkey_deriveaPrivateFormataNoEncryptionuWhen using Raw both encoding and format must be Raw and encryption_algorithm must be NoEncryption()a_raw_private_bytesaPKCS8uformat must be PKCS8 when encoding is PEM or DERa_private_key_bytesaEVP_PKEY_get_raw_private_keya__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/x448.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacryptographyTautilsautilsucryptography.hazmat.backends.openssl.utilsTa_evp_pkey_deriveucryptography.hazmat.primitivesTaserializationucryptography.hazmat.primitives.asymmetric.x448TaX448PrivateKeyaX448PublicKeyaX448PrivateKeyl8TOobjectametaclassa__prepare__a_X448PublicKeya__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aregister_interfaceucryptography.hazmat.backends.openssl.x448a__module__a__qualname__a__init__u_X448PublicKey.__init__apublic_bytesu_X448PublicKey.public_bytesu_X448PublicKey._raw_public_bytesa__orig_bases__a_X448PrivateKeyu_X448PrivateKey.__init__apublic_keyu_X448PrivateKey.public_keyaexchangeu_X448PrivateKey.exchangeaprivate_bytesu_X448PrivateKey.private_bytesu_X448PrivateKey._raw_private_bytesu<module cryptography.hazmat.backends.openssl.x448>Ta__class__Taselfabackendaevp_pkeyTaselfabufabuflenaresTaselfapeer_public_keyTaselfaencodingaformataencryption_algorithmTaselfaencodingaformatu.cryptography.hazmat.backends.openssl.x509�Ia_backenda_x509u<Certificate(subject={}, ...)>asubjectax509aCertificatea_libaX509_cmplapublic_bytesaserializationaEncodingaDERahashesaHashaupdateafinalizeaX509_get_versionaVersionav1lav3aInvalidVersionu{} is not a valid X509 versionaX509_get_serialNumberaopenssl_asserta_ffiaNULLa_asn1_integer_to_intaX509_get_pubkeya_consume_errorsuCertificate public key is of an unknown typeagcaEVP_PKEY_freea_evp_pkey_to_public_keyaX509_getm_notBeforea_parse_asn1_timeaX509_getm_notAfteraX509_get_issuer_namea_decode_x509_nameaX509_get_subject_nameasignature_algorithm_oida_SIG_OIDS_TO_HASHaUnsupportedAlgorithmuSignature algorithm OID:{} not recognizedanewTuX509_ALGOR **aX509_get0_signaturea_obj2txtaalgorithmaObjectIdentifieraCRYPTOGRAPHY_OPENSSL_110_OR_GREATERa_CERTIFICATE_EXTENSION_PARSERaparsea_CERTIFICATE_EXTENSION_PARSER_NO_SCTTuASN1_BIT_STRING **a_asn1_string_to_bytesTuunsigned char **ai2d_re_X509_tbsu<lambda>u_Certificate.tbs_certificate_bytes.<locals>.<lambda>abuffer:nnnaselfaOPENSSL_freea_create_mem_bio_gcaPEMaPEM_write_bio_X509ai2d_X509_biouencoding must be an item from the Encoding enumla_read_mem_bioabioa_crla_x509_revokedaX509_REVOKED_get0_serialNumberaX509_REVOKED_get0_revocationDatea_REVOKED_CERTIFICATE_EXTENSION_PARSERa_x509_crlaCertificateRevocationListaX509_CRL_cmpai2d_X509_CRL_bioaX509_CRL_dupaX509_CRL_freeTuX509_REVOKED **a_encode_asn1_int_gcaX509_CRL_get0_by_seriala_sorted_crla_RevokedCertificateaX509_CRL_get0_signatureaX509_CRL_get_issueraX509_CRL_get_nextUpdateaX509_CRL_get_lastUpdateai2d_re_X509_CRL_tbsu_CertificateRevocationList.tbs_certlist_bytes.<locals>.<lambda>aPEM_write_bio_X509_CRLaX509_CRL_get_REVOKEDask_X509_REVOKED_valuea_revoked_certa__iter__u_CertificateRevocationList.__iter__aindicesutoo many values to unpack (expected 3)aoperatoraindexask_X509_REVOKED_numa_CRL_EXTENSION_PARSERadsaaDSAPublicKeyarsaaRSAPublicKeyaecaEllipticCurvePublicKeyuExpecting one of DSAPublicKey, RSAPublicKey, or EllipticCurvePublicKey.aX509_CRL_verifya_evp_pkeya_x509_reqa_CertificateSigningRequestaX509_REQ_get_pubkeyaX509_REQ_get_subject_nameaX509_REQ_get0_signatureaX509_REQ_get_extensionsu_CertificateSigningRequest.extensions.<locals>.<lambda>a_CSR_EXTENSION_PARSERask_X509_EXTENSION_pop_freeaaddressofa_original_libaX509_EXTENSION_freeaPEM_write_bio_X509_REQai2d_X509_REQ_bioai2d_re_X509_REQ_tbsu_CertificateSigningRequest.tbs_certrequest_bytes.<locals>.<lambda>aX509_REQ_verifya_sct_lista_sctaSCT_get_versionaSCT_VERSION_V1acertificate_transparencyaSCT_get0_log_idaSCT_get_timestampl�adatetimeautcfromtimestampareplaceTamicrosecondaSCT_get_log_entry_typeaCT_LOG_ENTRY_TYPE_PRECERTaLogEntryTypeaPRE_CERTIFICATEaSCT_get0_signaturea_signaturea_SignedCertificateTimestampa__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/x509.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacryptographyTautilsax509autilsucryptography.exceptionsTaUnsupportedAlgorithmucryptography.hazmat.backends.openssl.decode_asn1T
a_CERTIFICATE_EXTENSION_PARSERa_CERTIFICATE_EXTENSION_PARSER_NO_SCTa_CRL_EXTENSION_PARSERa_CSR_EXTENSION_PARSERa_REVOKED_CERTIFICATE_EXTENSION_PARSERa_asn1_integer_to_inta_asn1_string_to_bytesa_decode_x509_namea_obj2txta_parse_asn1_timeucryptography.hazmat.backends.openssl.encode_asn1Ta_encode_asn1_int_gcucryptography.hazmat.primitivesTahashesaserializationucryptography.hazmat.primitives.asymmetricTadsaaecarsaTOobjectametaclassa__prepare__a_Certificatea__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aregister_interfaceucryptography.hazmat.backends.openssl.x509a__module__a__qualname__a__init__u_Certificate.__init__a__repr__u_Certificate.__repr__a__eq__u_Certificate.__eq__a__ne__u_Certificate.__ne__a__hash__u_Certificate.__hash__afingerprintu_Certificate.fingerprintapropertyaversionu_Certificate.versionaserial_numberu_Certificate.serial_numberapublic_keyu_Certificate.public_keyanot_valid_beforeu_Certificate.not_valid_beforeanot_valid_afteru_Certificate.not_valid_afteraissueru_Certificate.issueru_Certificate.subjectasignature_hash_algorithmu_Certificate.signature_hash_algorithmu_Certificate.signature_algorithm_oidacached_propertyaextensionsu_Certificate.extensionsasignatureu_Certificate.signatureatbs_certificate_bytesu_Certificate.tbs_certificate_bytesu_Certificate.public_bytesa__orig_bases__aRevokedCertificateu_RevokedCertificate.__init__u_RevokedCertificate.serial_numberarevocation_dateu_RevokedCertificate.revocation_dateu_RevokedCertificate.extensionsa_CertificateRevocationListu_CertificateRevocationList.__init__u_CertificateRevocationList.__eq__u_CertificateRevocationList.__ne__u_CertificateRevocationList.fingerprintu_CertificateRevocationList._sorted_crlaget_revoked_certificate_by_serial_numberu_CertificateRevocationList.get_revoked_certificate_by_serial_numberu_CertificateRevocationList.signature_hash_algorithmu_CertificateRevocationList.signature_algorithm_oidu_CertificateRevocationList.issueranext_updateu_CertificateRevocationList.next_updatealast_updateu_CertificateRevocationList.last_updateu_CertificateRevocationList.signatureatbs_certlist_bytesu_CertificateRevocationList.tbs_certlist_bytesu_CertificateRevocationList.public_bytesu_CertificateRevocationList._revoked_certu_CertificateRevocationList.__getitem__a__len__u_CertificateRevocationList.__len__u_CertificateRevocationList.extensionsais_signature_validu_CertificateRevocationList.is_signature_validaCertificateSigningRequestu_CertificateSigningRequest.__init__u_CertificateSigningRequest.__eq__u_CertificateSigningRequest.__ne__u_CertificateSigningRequest.__hash__u_CertificateSigningRequest.public_keyu_CertificateSigningRequest.subjectu_CertificateSigningRequest.signature_hash_algorithmu_CertificateSigningRequest.signature_algorithm_oidu_CertificateSigningRequest.extensionsu_CertificateSigningRequest.public_bytesatbs_certrequest_bytesu_CertificateSigningRequest.tbs_certrequest_bytesu_CertificateSigningRequest.signatureu_CertificateSigningRequest.is_signature_validaSignedCertificateTimestampu_SignedCertificateTimestamp.__init__u_SignedCertificateTimestamp.versionalog_idu_SignedCertificateTimestamp.log_idatimestampu_SignedCertificateTimestamp.timestampaentry_typeu_SignedCertificateTimestamp.entry_typeu_SignedCertificateTimestamp._signatureu_SignedCertificateTimestamp.__hash__u_SignedCertificateTimestamp.__eq__u_SignedCertificateTimestamp.__ne__TapointeraselfTaselfTwxaselfu<listcomp>Twiaselfu<module cryptography.hazmat.backends.openssl.x509>Ta__class__TaselfaotherTaselfaotheraresTaselfaotheraself_bytesaother_bytesTaselfaidxastartastopastepTaselfabackendacrlax509_revokedTaselfabackendasct_listasctTaselfabackendax509Taselfabackendax509_crlTaselfabackendax509_reqTaselfwiTaselfarevokedTaselfaidxarevokedwrTaselfaptrptraresTaselfadupTaselfaentry_typeTaselfax509_extsTaselfaalgorithmwhTaselfaalgorithmwhabioaresaderTaselfaserial_numberarevokedaasn1_intaresTaselfapkeyaresTaselfapublic_keyaresTaselfaissuerTaselfaluTaselfaoutalog_id_lengthTaselfanuTaselfaasn1_timeTaselfaencodingabioaresTaselfapkeyTaselfaasn1_intTaselfasigTaselfaalgaoidTaselfaoidTaselfasubjectTaselfapparesTaselfatimestampamillisecondsTaselfaversionu.cryptography.hazmat.bindingsPa__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/bindings/__init__.pya__file__Lu/usr/lib/python3/dist-packages/cryptography/hazmat/bindingsa__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aabsolute_importadivisionaprint_functionu<module cryptography.hazmat.bindings>u.cryptography.hazmat.bindings.openssl._conditional�LaEC_POINT_set_affine_coordinates_GF2maEC_POINT_get_affine_coordinates_GF2maEC_POINT_set_compressed_coordinates_GF2mLaEC_curve_nid2nistLaSSL_CTX_set_ecdh_autoLaRSA_R_PKCS_DECODING_ERRORLaEVP_PKEY_CTX_set_rsa_oaep_mdLaEVP_PKEY_CTX_set0_rsa_oaep_labelLaSSLv3_methodaSSLv3_client_methodaSSLv3_server_methodLaSSL_CTX_set_alpn_protosaSSL_set_alpn_protosaSSL_CTX_set_alpn_select_cbaSSL_get0_alpn_selectedLaSSL_get_current_compressionaSSL_get_current_expansionaSSL_COMP_get_nameLaSSL_get_server_tmp_keyL	aX509_V_ERR_SUITE_B_INVALID_VERSIONaX509_V_ERR_SUITE_B_INVALID_ALGORITHMaX509_V_ERR_SUITE_B_INVALID_CURVEaX509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHMaX509_V_ERR_SUITE_B_LOS_NOT_ALLOWEDaX509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256aX509_V_ERR_HOSTNAME_MISMATCHaX509_V_ERR_EMAIL_MISMATCHaX509_V_ERR_IP_ADDRESS_MISMATCHLaX509_V_FLAG_SUITEB_128_LOS_ONLYaX509_V_FLAG_SUITEB_192_LOSaX509_V_FLAG_SUITEB_128_LOSaX509_VERIFY_PARAM_set1_hostaX509_VERIFY_PARAM_set1_emailaX509_VERIFY_PARAM_set1_ipaX509_VERIFY_PARAM_set1_ip_ascaX509_VERIFY_PARAM_set_hostflagsaSSL_get0_paramaX509_CHECK_FLAG_ALWAYS_CHECK_SUBJECTaX509_CHECK_FLAG_NO_WILDCARDSaX509_CHECK_FLAG_NO_PARTIAL_WILDCARDSaX509_CHECK_FLAG_MULTI_LABEL_WILDCARDSaX509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINSLaX509_CHECK_FLAG_NEVER_CHECK_SUBJECTLaX509_V_FLAG_TRUSTED_FIRSTLaX509_V_FLAG_PARTIAL_CHAINLaSSL_CTX_set_cert_cbaSSL_set_cert_cbLaSSL_ST_BEFOREaSSL_ST_OKaSSL_ST_INITaSSL_ST_RENEGOTIATELaTLS_ST_BEFOREaTLS_ST_OKLaCryptography_setup_ssl_threadsLaEVP_PBE_scryptLaDTLS_methodaDTLS_server_methodaDTLS_client_methodaSSL_OP_NO_DTLSv1aSSL_OP_NO_DTLSv1_2aDTLS_set_link_mtuaDTLS_get_link_min_mtuLaEVP_PKEY_DHXLaCryptography_CRYPTO_set_mem_functionsLaSCT_get_versionaSCT_get_log_entry_typeaSCT_get0_log_idaSCT_get0_signatureaSCT_get_timestampaSCT_set_sourceask_SCT_numask_SCT_valueaSCT_LIST_freeask_SCT_pushask_SCT_new_nullaSCT_newaSCT_set1_log_idaSCT_set_timestampaSCT_set_versionaSCT_set_log_entry_typeLaX509_STORE_get_get_issueraX509_STORE_set_get_issuerLaEVP_PKEY_X25519aNID_X25519LaEVP_PKEY_X448aNID_X448LaEVP_PKEY_ED448aNID_ED448LaNID_ED25519aEVP_PKEY_ED25519LaNID_poly1305aEVP_PKEY_POLY1305LaEVP_DigestSignaEVP_DigestVerifyLaEVP_DigestFinalXOFLaEVP_PKEY_get1_tls_encodedpointaEVP_PKEY_set1_tls_encodedpointLaFIPS_mode_setaFIPS_modeLaSSL_CTX_set1_sigalgs_listaSSL_get_sigalgsLaSSL_CTX_use_psk_identity_hintaSSL_CTX_set_psk_server_callbackaSSL_CTX_set_psk_client_callbackLaSSL_CTX_add_client_custom_extaSSL_CTX_add_server_custom_extaSSL_extension_supportedLaOPENSSL_cleanupLaSSL_CIPHER_is_aeadaSSL_CIPHER_get_cipher_nidaSSL_CIPHER_get_digest_nidaSSL_CIPHER_get_kx_nidaSSL_CIPHER_get_auth_nidL
aSSL_OP_NO_TLSv1_3aSSL_VERIFY_POST_HANDSHAKEaSSL_CTX_set_ciphersuitesaSSL_verify_client_post_handshakeaSSL_CTX_set_post_handshake_authaSSL_set_post_handshake_authaSSL_SESSION_get_max_early_dataaSSL_write_early_dataaSSL_read_early_dataaSSL_CTX_set_max_early_dataLaEVP_PKEY_new_raw_private_keyaEVP_PKEY_new_raw_public_keyaEVP_PKEY_get_raw_private_keyaEVP_PKEY_get_raw_public_keyLaEVP_R_MEMORY_LIMIT_EXCEEDEDL
aENGINE_by_idaENGINE_initaENGINE_finishaENGINE_get_default_RANDaENGINE_set_default_RANDaENGINE_unregister_RANDaENGINE_ctrl_cmdaENGINE_freeaENGINE_get_nameaCryptography_add_osrandom_engineLaSSL_get0_verified_chaina__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/bindings/openssl/_conditional.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacryptography_has_ec2macryptography_has_ec_1_0_2acryptography_has_set_ecdh_autoacryptography_has_rsa_r_pkcs_decoding_erroracryptography_has_rsa_oaep_mdacryptography_has_rsa_oaep_labelacryptography_has_ssl3_methodacryptography_has_alpnacryptography_has_compressionacryptography_has_get_server_tmp_keyacryptography_has_102_verification_error_codesacryptography_has_102_verification_paramsacryptography_has_110_verification_paramsacryptography_has_x509_v_flag_trusted_firstacryptography_has_x509_v_flag_partial_chainacryptography_has_set_cert_cbacryptography_has_ssl_stacryptography_has_tls_stacryptography_has_locking_callbacksacryptography_has_scryptacryptography_has_generic_dtls_methodacryptography_has_evp_pkey_dhxacryptography_has_mem_functionsacryptography_has_sctacryptography_has_x509_store_ctx_get_issueracryptography_has_x25519acryptography_has_x448acryptography_has_ed448acryptography_has_ed25519acryptography_has_poly1305acryptography_has_oneshot_evp_digest_sign_verifyacryptography_has_evp_digestfinal_xofacryptography_has_evp_pkey_get_set_tls_encodedpointacryptography_has_fipsacryptography_has_ssl_sigalgsacryptography_has_pskacryptography_has_custom_extacryptography_has_openssl_cleanupacryptography_has_cipher_detailsacryptography_has_tlsv13acryptography_has_raw_keyacryptography_has_evp_r_memory_limit_exceededacryptography_has_engineacryptography_has_verified_chainaCryptography_HAS_EC2MaCryptography_HAS_EC_1_0_2aCryptography_HAS_SET_ECDH_AUTOaCryptography_HAS_RSA_R_PKCS_DECODING_ERRORaCryptography_HAS_RSA_OAEP_MDaCryptography_HAS_RSA_OAEP_LABELaCryptography_HAS_SSL3_METHODaCryptography_HAS_ALPNaCryptography_HAS_COMPRESSIONaCryptography_HAS_GET_SERVER_TMP_KEYaCryptography_HAS_102_VERIFICATION_ERROR_CODESaCryptography_HAS_102_VERIFICATION_PARAMSaCryptography_HAS_110_VERIFICATION_PARAMSaCryptography_HAS_X509_V_FLAG_TRUSTED_FIRSTaCryptography_HAS_X509_V_FLAG_PARTIAL_CHAINaCryptography_HAS_SET_CERT_CBaCryptography_HAS_SSL_STaCryptography_HAS_TLS_STaCryptography_HAS_LOCKING_CALLBACKSaCryptography_HAS_SCRYPTaCryptography_HAS_GENERIC_DTLS_METHODaCryptography_HAS_EVP_PKEY_DHXaCryptography_HAS_MEM_FUNCTIONSaCryptography_HAS_SCTaCryptography_HAS_X509_STORE_CTX_GET_ISSUERaCryptography_HAS_X25519aCryptography_HAS_X448aCryptography_HAS_ED448aCryptography_HAS_ED25519aCryptography_HAS_POLY1305aCryptography_HAS_ONESHOT_EVP_DIGEST_SIGN_VERIFYaCryptography_HAS_EVP_PKEY_get_set_tls_encodedpointaCryptography_HAS_FIPSaCryptography_HAS_SIGALGSaCryptography_HAS_PSKaCryptography_HAS_CUSTOM_EXTaCryptography_HAS_OPENSSL_CLEANUPaCryptography_HAS_CIPHER_DETAILSaCryptography_HAS_TLSv1_3aCryptography_HAS_RAW_KEYaCryptography_HAS_EVP_DIGESTFINAL_XOFaCryptography_HAS_EVP_R_MEMORY_LIMIT_EXCEEDEDaCryptography_HAS_ENGINEaCryptography_HAS_VERIFIED_CHAINaCONDITIONAL_NAMESu<module cryptography.hazmat.bindings.openssl._conditional>u.cryptography.hazmat.bindings.openssl.binding
�a_codea_liba_funca_reasonalibareasonaERR_get_errorlaERR_GET_LIBaERR_GET_FUNCaERR_GET_REASONaerrorsaappenda_OpenSSLErrora_consume_errorsaffianewTuchar[]laERR_error_string_nacodeastringaerrors_with_texta_OpenSSLErrorWithTextafuncaInternalErroruUnknown OpenSSL error. This error is commonly encountered when another library is not cleaning up the OpenSSL error stack. If you are using cryptography with another library that uses OpenSSL try disabling it before reporting a bug. Otherwise please file an issue at https://github.com/pyca/cryptography/issues with information on how to reproduce this. ({0!r})atypesaModuleTypeTaliba_original_libaitemsutoo many values to unpack (expected 2)aexcluded_namesaupdatea_ensure_ffi_initializedaERR_clear_erroraCryptography_HAS_ENGINEaCryptography_add_osrandom_enginea_openssl_assertTlla_init_locka__enter__a__exit__a_lib_loadedabuild_conditional_libraryaCONDITIONAL_NAMESaSSL_library_initaOpenSSL_add_all_algorithmsaSSL_load_error_stringsa_register_osrandom_engineTnnna_lock_init_locka_sslaCryptography_HAS_LOCKING_CALLBACKSaCRYPTO_get_locking_callbackaNULLaCryptography_setup_ssl_threadslaCRYPTOGRAPHY_OPENSSL_LESS_THAN_102aCRYPTOGRAPHY_IS_LIBRESSLawarningsawarnuOpenSSL version 1.0.1 is no longer supported by the OpenSSL project, please upgrade. The next version of cryptography will drop support for it.autilsaCryptographyDeprecationWarningaCRYPTOGRAPHY_PACKAGE_VERSIONaencodeTaasciiuThe version of cryptography does not match the loaded shared object. This can happen if you have multiple copies of cryptography installed in your Python path. Please try creating a new virtual environment to resolve this issue. Loaded python version: {}, shared object version: {}a__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/bindings/openssl/binding.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacollectionsathreadingacryptographyTautilsucryptography.exceptionsTaInternalErrorucryptography.hazmat.bindings._opensslTaffialibucryptography.hazmat.bindings.openssl._conditionalTaCONDITIONAL_NAMESanamedtupleLacodealibafuncareasonareason_textTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucryptography.hazmat.bindings.openssl.bindinga__module__a__qualname__a__init__u_OpenSSLError.__init__a_lib_reason_matchu_OpenSSLError._lib_reason_matcharead_only_propertyTa_codeTa_libTa_funcTa_reasona__orig_bases__aBindingu
    OpenSSL API wrapper.
    aLockuBinding.__init__aclassmethoduBinding._register_osrandom_engineuBinding._ensure_ffi_initializedainit_static_locksuBinding.init_static_locksa_verify_openssl_versiona_verify_package_versiona__version__u<module cryptography.hazmat.bindings.openssl.binding>Ta__class__TaselfTaselfacodealibafuncareasonTalibaerrorsacodeaerr_libaerr_funcaerr_reasonTaclsTaselfalibareasonTalibaokaerrorsaerrors_with_textaerrabufaerr_text_reasonTaclsaresultTaversionaso_package_versionTalibaconditional_namesaconditional_libaexcluded_namesaconditionanames_cbaattrTaclsaresu.cryptography.hazmat.bindings.opensslha__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/bindings/openssl/__init__.pya__file__Lu/usr/lib/python3/dist-packages/cryptography/hazmat/bindings/openssla__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aabsolute_importadivisionaprint_functionu<module cryptography.hazmat.bindings.openssl>u.cryptography.hazmatu
Hazardous Materials

This is a "Hazardous Materials" module. You should ONLY use it if you're
100% absolutely sure that you know what you're doing because this module
is full of land mines, dragons, and dinosaurs with laser guns.
a__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/__init__.pya__file__Lu/usr/lib/python3/dist-packages/cryptography/hazmata__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aabsolute_importadivisionaprint_functionu<module cryptography.hazmat>u.cryptography.hazmat.primitives.asymmetric�/a__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/__init__.pya__file__Lu/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetrica__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aabsolute_importadivisionaprint_functionaabcasixTOobjectametaclassa__prepare__aAsymmetricSignatureContexta__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aadd_metaclassaABCMetaucryptography.hazmat.primitives.asymmetrica__module__a__qualname__aabstractmethodu
        Processes the provided bytes and returns nothing.
        aupdateuAsymmetricSignatureContext.updateu
        Returns the signature as bytes.
        afinalizeuAsymmetricSignatureContext.finalizea__orig_bases__aAsymmetricVerificationContextuAsymmetricVerificationContext.updateu
        Raises an exception if the bytes provided to update do not match the
        signature or the signature does not match the public key.
        averifyuAsymmetricVerificationContext.verifyu<module cryptography.hazmat.primitives.asymmetric>Ta__class__TaselfTaselfadatau.cryptography.hazmat.primitives.asymmetric.dh��agenerate_dh_parametersasixainteger_typesux must be an integer.aDHPublicNumbersupublic_numbers must be an instance of DHPublicNumbers.a_xa_public_numbersaDHPrivateNumbersaload_dh_private_numbersuy must be an integer.aDHParameterNumbersuparameters must be an instance of DHParameterNumbers.a_ya_parameter_numbersaload_dh_public_numbersup and g must be integersuq must be integer or NoneluDH generator must be 2 or greatera_pa_ga_qaload_dh_parameter_numbersa__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/dh.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionaabclacryptographyTautilsautilsagenerate_parametersTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucryptography.hazmat.primitives.asymmetric.dha__module__a__qualname__a__init__uDHPrivateNumbers.__init__a__eq__uDHPrivateNumbers.__eq__a__ne__uDHPrivateNumbers.__ne__aprivate_keyuDHPrivateNumbers.private_keyaread_only_propertyTa_public_numbersapublic_numbersTa_xwxa__orig_bases__uDHPublicNumbers.__init__uDHPublicNumbers.__eq__uDHPublicNumbers.__ne__apublic_keyuDHPublicNumbers.public_keyTa_ywyTa_parameter_numbersaparameter_numbersTnuDHParameterNumbers.__init__uDHParameterNumbers.__eq__uDHParameterNumbers.__ne__aparametersuDHParameterNumbers.parametersTa_pwpTa_gwgTa_qwqaDHParametersaadd_metaclassaABCMetaaabstractmethodu
        Generates and returns a DHPrivateKey.
        agenerate_private_keyuDHParameters.generate_private_keyu
        Returns the parameters serialized as bytes.
        aparameter_bytesuDHParameters.parameter_bytesu
        Returns a DHParameterNumbers.
        uDHParameters.parameter_numbersaDHParametersWithSerializationaDHPrivateKeyaabstractpropertyu
        The bit length of the prime modulus.
        akey_sizeuDHPrivateKey.key_sizeu
        The DHPublicKey associated with this private key.
        uDHPrivateKey.public_keyu
        The DHParameters object associated with this private key.
        uDHPrivateKey.parametersu
        Given peer's DHPublicKey, carry out the key exchange and
        return shared key as bytes.
        aexchangeuDHPrivateKey.exchangeaDHPrivateKeyWithSerializationu
        Returns a DHPrivateNumbers.
        aprivate_numbersuDHPrivateKeyWithSerialization.private_numbersu
        Returns the key serialized as bytes.
        aprivate_bytesuDHPrivateKeyWithSerialization.private_bytesaDHPublicKeyuDHPublicKey.key_sizeu
        The DHParameters object associated with this public key.
        uDHPublicKey.parametersu
        Returns a DHPublicNumbers.
        uDHPublicKey.public_numbersapublic_bytesuDHPublicKey.public_bytesaDHPublicKeyWithSerializationu<module cryptography.hazmat.primitives.asymmetric.dh>Ta__class__TaselfaotherTaselfwpwgwqTaselfwxapublic_numbersTaselfwyaparameter_numbersTaselfapeer_public_keyTageneratorakey_sizeabackendTaselfTaselfaencodingaformatTaselfabackendTaselfaencodingaformataencryption_algorithmu.cryptography.hazmat.primitives.asymmetric.dsa�agenerate_dsa_parametersagenerate_dsa_private_key_and_parameterswpabit_lengthLlllup must be exactly 1024, 2048, or 3072 bits longwqLl�l�luq must be exactly 160, 224, or 256 bits longwglug, p don't satisfy 1 < g < p.apublic_numbersaparameter_numbersa_check_dsa_parameterswxlux must be > 0 and < q.wyapowuy must be equal to (g ** x % p).asixainteger_typesuDSAParameterNumbers p, q, and g arguments must be integers.a_pa_qa_gaload_dsa_parameter_numbersaDSAParameterNumbersu<DSAParameterNumbers(p={self.p}, q={self.q}, g={self.g})>TaselfuDSAPublicNumbers y argument must be an integer.uparameter_numbers must be a DSAParameterNumbers instance.a_ya_parameter_numbersaload_dsa_public_numbersaDSAPublicNumbersu<DSAPublicNumbers(y={self.y}, parameter_numbers={self.parameter_numbers})>uDSAPrivateNumbers x argument must be an integer.upublic_numbers must be a DSAPublicNumbers instance.a_public_numbersa_xaload_dsa_private_numbersaDSAPrivateNumbersa__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/dsa.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionaabcacryptographyTautilsautilsTOobjectametaclassa__prepare__aDSAParametersa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aadd_metaclassaABCMetaucryptography.hazmat.primitives.asymmetric.dsaa__module__a__qualname__aabstractmethodu
        Generates and returns a DSAPrivateKey.
        agenerate_private_keyuDSAParameters.generate_private_keya__orig_bases__aDSAParametersWithNumbersu
        Returns a DSAParameterNumbers.
        uDSAParametersWithNumbers.parameter_numbersaDSAPrivateKeyaabstractpropertyu
        The bit length of the prime modulus.
        akey_sizeuDSAPrivateKey.key_sizeu
        The DSAPublicKey associated with this private key.
        apublic_keyuDSAPrivateKey.public_keyu
        The DSAParameters object associated with this private key.
        aparametersuDSAPrivateKey.parametersu
        Returns an AsymmetricSignatureContext used for signing data.
        asigneruDSAPrivateKey.signeru
        Signs the data
        asignuDSAPrivateKey.signaDSAPrivateKeyWithSerializationu
        Returns a DSAPrivateNumbers.
        aprivate_numbersuDSAPrivateKeyWithSerialization.private_numbersu
        Returns the key serialized as bytes.
        aprivate_bytesuDSAPrivateKeyWithSerialization.private_bytesaDSAPublicKeyuDSAPublicKey.key_sizeu
        The DSAParameters object associated with this public key.
        uDSAPublicKey.parametersu
        Returns an AsymmetricVerificationContext used for signing data.
        averifieruDSAPublicKey.verifieru
        Returns a DSAPublicNumbers.
        uDSAPublicKey.public_numbersapublic_bytesuDSAPublicKey.public_bytesu
        Verifies the signature of the data.
        averifyuDSAPublicKey.verifyaDSAPublicKeyWithSerializationagenerate_parametersa_check_dsa_private_numbersa__init__uDSAParameterNumbers.__init__aread_only_propertyTa_pTa_qTa_guDSAParameterNumbers.parametersa__eq__uDSAParameterNumbers.__eq__a__ne__uDSAParameterNumbers.__ne__a__repr__uDSAParameterNumbers.__repr__uDSAPublicNumbers.__init__Ta_yTa_parameter_numbersuDSAPublicNumbers.public_keyuDSAPublicNumbers.__eq__uDSAPublicNumbers.__ne__uDSAPublicNumbers.__repr__uDSAPrivateNumbers.__init__Ta_xTa_public_numbersaprivate_keyuDSAPrivateNumbers.private_keyuDSAPrivateNumbers.__eq__uDSAPrivateNumbers.__ne__u<module cryptography.hazmat.primitives.asymmetric.dsa>Ta__class__TaselfaotherTaselfwpwqwgTaselfwxapublic_numbersTaselfwyaparameter_numbersTaparametersTanumbersaparametersTakey_sizeabackendTaselfabackendTaselfaencodingaformataencryption_algorithmTaselfaencodingaformatTaselfadataaalgorithmTaselfasignature_algorithmTaselfasignatureasignature_algorithmTaselfasignatureadataaalgorithmu.cryptography.hazmat.primitives.asymmetric.ecrautilsa_check_bytesadataaEllipticCurveucurve must be an EllipticCurve instanceudata must not be an empty byte stringasixaindexbyteslLllluUnsupported elliptic curve point typeucryptography.hazmat.backends.openssl.backendTabackendabackendaload_elliptic_curve_public_bytesa_algorithmagenerate_elliptic_curve_private_keyainteger_typesuprivate_value must be an integer type.uprivate_value must be a positive integer.ucurve must provide the EllipticCurve interface.aderive_elliptic_curve_private_keyux and y must be integers.a_ya_xa_curveaload_elliptic_curve_public_numbersawarningsawarnuencode_point has been deprecated on EllipticCurvePublicNumbers and will be removed in a future version. Please use EllipticCurvePublicKey.public_bytes to obtain both compressed and uncompressed point encoding.aDeprecatedIn25Dastacklevellacurveakey_sizelldaint_to_byteswxwyuSupport for unsafe construction of public numbers from encoded data will be removed in a future version. Please use EllipticCurvePublicKey.from_encoded_pointastartswithTdllaint_from_bytesabiguInvalid elliptic curve point data lengthaEllipticCurvePublicNumbersanameu<EllipticCurvePublicNumbers(curve={0.curve.name}, x={0.x}, y={0.y}>uprivate_value must be an integer.upublic_numbers must be an EllipticCurvePublicNumbers instance.a_private_valuea_public_numbersaload_elliptic_curve_private_numbersaEllipticCurvePrivateNumbersaprivate_valueapublic_numbersa_OID_TO_CURVEuThe provided object identifier has no matching elliptic curve classa__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/ec.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionaabcacryptographyTautilsucryptography.hazmat._oidTaObjectIdentifieraObjectIdentifierTOobjectametaclassa__prepare__aEllipticCurveOIDa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucryptography.hazmat.primitives.asymmetric.eca__module__a__qualname__Tu1.2.840.10045.3.1.1aSECP192R1Tu1.3.132.0.33aSECP224R1Tu1.3.132.0.10aSECP256K1Tu1.2.840.10045.3.1.7aSECP256R1Tu1.3.132.0.34aSECP384R1Tu1.3.132.0.35aSECP521R1Tu1.3.36.3.3.2.8.1.1.7aBRAINPOOLP256R1Tu1.3.36.3.3.2.8.1.1.11aBRAINPOOLP384R1Tu1.3.36.3.3.2.8.1.1.13aBRAINPOOLP512R1Tu1.3.132.0.1aSECT163K1Tu1.3.132.0.15aSECT163R2Tu1.3.132.0.26aSECT233K1Tu1.3.132.0.27aSECT233R1Tu1.3.132.0.16aSECT283K1Tu1.3.132.0.17aSECT283R1Tu1.3.132.0.36aSECT409K1Tu1.3.132.0.37aSECT409R1Tu1.3.132.0.38aSECT571K1Tu1.3.132.0.39aSECT571R1a__orig_bases__aadd_metaclassaABCMetaaabstractpropertyu
        The name of the curve. e.g. secp256r1.
        uEllipticCurve.nameu
        Bit size of a secret scalar for the curve.
        uEllipticCurve.key_sizeaEllipticCurveSignatureAlgorithmu
        The digest algorithm used with this signature.
        aalgorithmuEllipticCurveSignatureAlgorithm.algorithmaEllipticCurvePrivateKeyaabstractmethodu
        Returns an AsymmetricSignatureContext used for signing data.
        asigneruEllipticCurvePrivateKey.signeru
        Performs a key exchange operation using the provided algorithm with the
        provided peer's public key.
        aexchangeuEllipticCurvePrivateKey.exchangeu
        The EllipticCurvePublicKey for this private key.
        apublic_keyuEllipticCurvePrivateKey.public_keyu
        The EllipticCurve that this key is on.
        uEllipticCurvePrivateKey.curveuEllipticCurvePrivateKey.key_sizeu
        Signs the data
        asignuEllipticCurvePrivateKey.signaEllipticCurvePrivateKeyWithSerializationu
        Returns an EllipticCurvePrivateNumbers.
        aprivate_numbersuEllipticCurvePrivateKeyWithSerialization.private_numbersu
        Returns the key serialized as bytes.
        aprivate_bytesuEllipticCurvePrivateKeyWithSerialization.private_bytesaEllipticCurvePublicKeyu
        Returns an AsymmetricVerificationContext used for signing data.
        averifieruEllipticCurvePublicKey.verifieruEllipticCurvePublicKey.curveuEllipticCurvePublicKey.key_sizeu
        Returns an EllipticCurvePublicNumbers.
        uEllipticCurvePublicKey.public_numbersapublic_bytesuEllipticCurvePublicKey.public_bytesu
        Verifies the signature of the data.
        averifyuEllipticCurvePublicKey.verifyaclassmethodafrom_encoded_pointuEllipticCurvePublicKey.from_encoded_pointaEllipticCurvePublicKeyWithSerializationaregister_interfaceasect571r1l:asect409r1l�asect283r1lasect233r1l�asect163r2l�asect571k1l;asect409k1asect283k1asect233k1asect163k1asecp521r1l	asecp384r1l�asecp256r1lasecp256k1asecp224r1l�asecp192r1l�aBrainpoolP256R1abrainpoolP256r1aBrainpoolP384R1abrainpoolP384r1aBrainpoolP512R1abrainpoolP512r1laprime192v1aprime256v1a_CURVE_TYPESaECDSAa__init__uECDSA.__init__aread_only_propertyTa_algorithmagenerate_private_keyaderive_private_keyuEllipticCurvePublicNumbers.__init__uEllipticCurvePublicNumbers.public_keyaencode_pointuEllipticCurvePublicNumbers.encode_pointuEllipticCurvePublicNumbers.from_encoded_pointTa_curveTa_xTa_ya__eq__uEllipticCurvePublicNumbers.__eq__a__ne__uEllipticCurvePublicNumbers.__ne__a__hash__uEllipticCurvePublicNumbers.__hash__a__repr__uEllipticCurvePublicNumbers.__repr__uEllipticCurvePrivateNumbers.__init__aprivate_keyuEllipticCurvePrivateNumbers.private_keyTa_private_valueTa_public_numbersuEllipticCurvePrivateNumbers.__eq__uEllipticCurvePrivateNumbers.__ne__uEllipticCurvePrivateNumbers.__hash__aECDHaget_curve_for_oidu<module cryptography.hazmat.primitives.asymmetric.ec>Ta__class__TaselfaotherTaselfTaselfaalgorithmTaselfaprivate_valueapublic_numbersTaselfwxwyacurveTaprivate_valueacurveabackendTaselfabyte_lengthTaselfaalgorithmapeer_public_keyTaclsacurveadataabackendTaclsacurveadataabyte_lengthwxwyTacurveabackendTaoidTaselfaencodingaformataencryption_algorithmTaselfabackendTaselfaencodingaformatTaselfadataasignature_algorithmTaselfasignature_algorithmTaselfasignatureasignature_algorithmTaselfasignatureadataasignature_algorithmu.cryptography.hazmat.primitives.asymmetric.ed25519Nucryptography.hazmat.backends.openssl.backendTabackendlabackendaed25519_supportedaUnsupportedAlgorithmued25519 is not supported by this version of OpenSSL.a_ReasonsaUNSUPPORTED_PUBLIC_KEY_ALGORITHMaed25519_load_public_bytesaed25519_generate_keyaed25519_load_private_bytesa__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/ed25519.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionaabcasixucryptography.exceptionsTaUnsupportedAlgorithma_Reasonsl a_ED25519_KEY_SIZEl@a_ED25519_SIG_SIZETOobjectametaclassa__prepare__aEd25519PublicKeya__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aadd_metaclassaABCMetaucryptography.hazmat.primitives.asymmetric.ed25519a__module__a__qualname__aclassmethodafrom_public_bytesuEd25519PublicKey.from_public_bytesaabstractmethodu
        The serialized bytes of the public key.
        apublic_bytesuEd25519PublicKey.public_bytesu
        Verify the signature.
        averifyuEd25519PublicKey.verifya__orig_bases__aEd25519PrivateKeyagenerateuEd25519PrivateKey.generateafrom_private_bytesuEd25519PrivateKey.from_private_bytesu
        The Ed25519PublicKey derived from the private key.
        apublic_keyuEd25519PrivateKey.public_keyu
        The serialized bytes of the private key.
        aprivate_bytesuEd25519PrivateKey.private_bytesu
        Signs the data.
        asignuEd25519PrivateKey.signu<module cryptography.hazmat.primitives.asymmetric.ed25519>Ta__class__TaclsadataabackendTaclsabackendTaselfaencodingaformataencryption_algorithmTaselfaencodingaformatTaselfTaselfadataTaselfasignatureadatau.cryptography.hazmat.primitives.asymmetric.ed448�Jucryptography.hazmat.backends.openssl.backendTabackendlabackendaed448_supportedaUnsupportedAlgorithmued448 is not supported by this version of OpenSSL.a_ReasonsaUNSUPPORTED_PUBLIC_KEY_ALGORITHMaed448_load_public_bytesaed448_generate_keyaed448_load_private_bytesa__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/ed448.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionaabcasixucryptography.exceptionsTaUnsupportedAlgorithma_ReasonsTOobjectametaclassa__prepare__aEd448PublicKeya__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aadd_metaclassaABCMetaucryptography.hazmat.primitives.asymmetric.ed448a__module__a__qualname__aclassmethodafrom_public_bytesuEd448PublicKey.from_public_bytesaabstractmethodu
        The serialized bytes of the public key.
        apublic_bytesuEd448PublicKey.public_bytesu
        Verify the signature.
        averifyuEd448PublicKey.verifya__orig_bases__aEd448PrivateKeyagenerateuEd448PrivateKey.generateafrom_private_bytesuEd448PrivateKey.from_private_bytesu
        The Ed448PublicKey derived from the private key.
        apublic_keyuEd448PrivateKey.public_keyu
        Signs the data.
        asignuEd448PrivateKey.signu
        The serialized bytes of the private key.
        aprivate_bytesuEd448PrivateKey.private_bytesu<module cryptography.hazmat.primitives.asymmetric.ed448>Ta__class__TaclsadataabackendTaclsabackendTaselfaencodingaformataencryption_algorithmTaselfaencodingaformatTaselfTaselfadataTaselfasignatureadatau.cryptography.hazmat.primitives.asymmetric.padding�Sa_mgfasixainteger_typesaMAX_LENGTHusalt_length must be an integer.aselflusalt_length must be zero or greater.a_salt_lengthahashesaHashAlgorithmuExpected instance of hashes.HashAlgorithm.a_algorithma_labelarsaaRSAPrivateKeyaRSAPublicKeyukey must be an RSA public or private keyamathaceilakey_sizelf @adigest_sizela__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/padding.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionaabcacryptographyTautilsautilsucryptography.hazmat.primitivesTahashesucryptography.hazmat.primitives.asymmetricTarsaTOobjectametaclassa__prepare__aAsymmetricPaddinga__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aadd_metaclassaABCMetaucryptography.hazmat.primitives.asymmetric.paddinga__module__a__qualname__aabstractpropertyu
        A string naming this padding (e.g. "PSS", "PKCS1").
        anameuAsymmetricPadding.namea__orig_bases__aPKCS1v15aregister_interfaceuEMSA-PKCS1-v1_5aPSSaobjectuEMSA-PSSa__init__uPSS.__init__aOAEPuEME-OAEPuOAEP.__init__aMGF1uMGF1.__init__acalculate_max_pss_salt_lengthu<module cryptography.hazmat.primitives.asymmetric.padding>Ta__class__TaselfaalgorithmTaselfamgfaalgorithmalabelTaselfamgfasalt_lengthTakeyahash_algorithmaemlenasalt_lengthTaselfu.cryptography.hazmat.primitives.asymmetric.rsaO�aRSABackendaUnsupportedAlgorithmuBackend object does not implement RSABackend.a_ReasonsaBACKEND_MISSING_INTERFACEa_verify_rsa_parametersagenerate_rsa_private_keylupublic_exponent must be >= 3.llupublic_exponent must be odd.lukey_size must be at least 512-bits.umodulus must be >= 3.up must be < modulus.uq must be < modulus.udmp1 must be < modulus.udmq1 must be < modulus.uiqmp must be < modulus.uprivate_exponent must be < modulus.upublic_exponent must be >= 3 and < modulus.udmp1 must be odd.udmq1 must be odd.up*q must equal modulus.un must be >= 3.ue must be >= 3 and < n.ue must be odd.Tllplutoo many values to unpack (expected 4)utoo many values to unpack (expected 2)wbwaax1ax2ay1ay2utoo many values to unpack (expected 6)u
    Modular Multiplicative Inverse. Returns x such that: (x*e) mod m == 1
    a_modinvu
    Compute the CRT (q ** -1) % p value from RSA primes p and q.
    u
    Compute the CRT private_exponent % (p - 1) value from the RSA
    private_exponent (d) and p.
    u
    Compute the CRT private_exponent % (q - 1) value from the RSA
    private_exponent (d) and q.
    wtlaspotteda_MAX_RECOVERY_ATTEMPTSwkapowwnagcduUnable to compute factors p and q from exponent d.wpasortedDareversetu
    Compute factors p and q from the private exponent d. We assume that n has
    no more than two factors. This function is adapted from code in PyCrypto.
    asixainteger_typesuRSAPrivateNumbers p, q, d, dmp1, dmq1, iqmp arguments must all be an integers.aRSAPublicNumbersuRSAPrivateNumbers public_numbers must be an RSAPublicNumbers instance.a_pa_qa_da_dmp1a_dmq1a_iqmpa_public_numbersaload_rsa_private_numbersaRSAPrivateNumberswqwdadmp1admq1aiqmpapublic_numbersuRSAPublicNumbers arguments must be integers.a_ea_naload_rsa_public_numbersu<RSAPublicNumbers(e={0.e}, n={0.n})>wea__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/rsa.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionaabcamathTagcdacryptographyTautilsautilsucryptography.exceptionsTaUnsupportedAlgorithma_Reasonsucryptography.hazmat.backends.interfacesTaRSABackendTOobjectametaclassa__prepare__aRSAPrivateKeya__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aadd_metaclassaABCMetaucryptography.hazmat.primitives.asymmetric.rsaa__module__a__qualname__aabstractmethodu
        Returns an AsymmetricSignatureContext used for signing data.
        asigneruRSAPrivateKey.signeru
        Decrypts the provided ciphertext.
        adecryptuRSAPrivateKey.decryptaabstractpropertyu
        The bit length of the public modulus.
        akey_sizeuRSAPrivateKey.key_sizeu
        The RSAPublicKey associated with this private key.
        apublic_keyuRSAPrivateKey.public_keyu
        Signs the data.
        asignuRSAPrivateKey.signa__orig_bases__aRSAPrivateKeyWithSerializationu
        Returns an RSAPrivateNumbers.
        aprivate_numbersuRSAPrivateKeyWithSerialization.private_numbersu
        Returns the key serialized as bytes.
        aprivate_bytesuRSAPrivateKeyWithSerialization.private_bytesaRSAPublicKeyu
        Returns an AsymmetricVerificationContext used for verifying signatures.
        averifieruRSAPublicKey.verifieru
        Encrypts the given plaintext.
        aencryptuRSAPublicKey.encryptuRSAPublicKey.key_sizeu
        Returns an RSAPublicNumbers
        uRSAPublicKey.public_numbersapublic_bytesuRSAPublicKey.public_bytesu
        Verifies the signature of the data.
        averifyuRSAPublicKey.verifyaRSAPublicKeyWithSerializationagenerate_private_keya_check_private_key_componentsa_check_public_key_componentsarsa_crt_iqmparsa_crt_dmp1arsa_crt_dmq1l�arsa_recover_prime_factorsa__init__uRSAPrivateNumbers.__init__aread_only_propertyTa_pTa_qTa_dTa_dmp1Ta_dmq1Ta_iqmpTa_public_numbersaprivate_keyuRSAPrivateNumbers.private_keya__eq__uRSAPrivateNumbers.__eq__a__ne__uRSAPrivateNumbers.__ne__a__hash__uRSAPrivateNumbers.__hash__uRSAPublicNumbers.__init__Ta_eTa_nuRSAPublicNumbers.public_keya__repr__uRSAPublicNumbers.__repr__uRSAPublicNumbers.__eq__uRSAPublicNumbers.__ne__uRSAPublicNumbers.__hash__u<module cryptography.hazmat.primitives.asymmetric.rsa>Ta__class__TaselfaotherTaselfTaselfwewnTaselfwpwqwdadmp1admq1aiqmpapublic_numbersTwpwqaprivate_exponentadmp1admq1aiqmpapublic_exponentamodulusTwewnTwewmax1ay1ax2ay2wawbwqwraxnaynTapublic_exponentakey_sizeTaselfaciphertextapaddingTaselfaplaintextapaddingTapublic_exponentakey_sizeabackendTaselfaencodingaformataencryption_algorithmTaselfabackendTaselfaencodingaformatTaprivate_exponentwpTaprivate_exponentwqTwpwqTwnwewdaktotwtaspottedwawkacandwpwqwrTaselfadataapaddingaalgorithmTaselfapaddingaalgorithmTaselfasignatureapaddingaalgorithmTaselfasignatureadataapaddingaalgorithmu.cryptography.hazmat.primitives.asymmetric.utils5;aDERReaderaread_single_elementaSEQUENCEa__enter__a__exit__aread_elementaINTEGERaas_integerTnnnaencode_deraencode_der_integerahashesaHashAlgorithmuExpected instance of HashAlgorithm.a_algorithmadigest_sizea_digest_sizea__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/utils.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacryptographyTautilslautilsucryptography.hazmat._derTaDERReaderaINTEGERaSEQUENCEaencode_deraencode_der_integerucryptography.hazmat.primitivesTahashesadecode_dss_signatureaencode_dss_signatureTOobjectametaclassa__prepare__aPrehasheda__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucryptography.hazmat.primitives.asymmetric.utilsa__module__a__qualname__a__init__uPrehashed.__init__aread_only_propertyTa_digest_sizea__orig_bases__u<module cryptography.hazmat.primitives.asymmetric.utils>Ta__class__TaselfaalgorithmTasignatureaseqwrwsTwrwsu.cryptography.hazmat.primitives.asymmetric.x25519[Fucryptography.hazmat.backends.openssl.backendTabackendlabackendax25519_supportedaUnsupportedAlgorithmuX25519 is not supported by this version of OpenSSL.a_ReasonsaUNSUPPORTED_EXCHANGE_ALGORITHMax25519_load_public_bytesax25519_generate_keyax25519_load_private_bytesa__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/x25519.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionaabcasixucryptography.exceptionsTaUnsupportedAlgorithma_ReasonsTOobjectametaclassa__prepare__aX25519PublicKeya__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aadd_metaclassaABCMetaucryptography.hazmat.primitives.asymmetric.x25519a__module__a__qualname__aclassmethodafrom_public_bytesuX25519PublicKey.from_public_bytesaabstractmethodTnnu
        The serialized bytes of the public key.
        apublic_bytesuX25519PublicKey.public_bytesa__orig_bases__aX25519PrivateKeyagenerateuX25519PrivateKey.generateafrom_private_bytesuX25519PrivateKey.from_private_bytesapublic_keyuX25519PrivateKey.public_keyu
        The serialized bytes of the private key.
        aprivate_bytesuX25519PrivateKey.private_bytesu
        Performs a key exchange operation using the provided peer's public key.
        aexchangeuX25519PrivateKey.exchangeu<module cryptography.hazmat.primitives.asymmetric.x25519>Ta__class__Taselfapeer_public_keyTaclsadataabackendTaclsabackendTaselfaencodingaformataencryption_algorithmTaselfaencodingaformatTaselfu.cryptography.hazmat.primitives.asymmetric.x4482Eucryptography.hazmat.backends.openssl.backendTabackendlabackendax448_supportedaUnsupportedAlgorithmuX448 is not supported by this version of OpenSSL.a_ReasonsaUNSUPPORTED_EXCHANGE_ALGORITHMax448_load_public_bytesax448_generate_keyax448_load_private_bytesa__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/x448.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionaabcasixucryptography.exceptionsTaUnsupportedAlgorithma_ReasonsTOobjectametaclassa__prepare__aX448PublicKeya__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aadd_metaclassaABCMetaucryptography.hazmat.primitives.asymmetric.x448a__module__a__qualname__aclassmethodafrom_public_bytesuX448PublicKey.from_public_bytesaabstractmethodu
        The serialized bytes of the public key.
        apublic_bytesuX448PublicKey.public_bytesa__orig_bases__aX448PrivateKeyagenerateuX448PrivateKey.generateafrom_private_bytesuX448PrivateKey.from_private_bytesapublic_keyuX448PrivateKey.public_keyu
        The serialized bytes of the private key.
        aprivate_bytesuX448PrivateKey.private_bytesu
        Performs a key exchange operation using the provided peer's public key.
        aexchangeuX448PrivateKey.exchangeu<module cryptography.hazmat.primitives.asymmetric.x448>Ta__class__Taselfapeer_public_keyTaclsadataabackendTaclsabackendTaselfaencodingaformataencryption_algorithmTaselfaencodingaformatTaselfu.cryptography.hazmat.primitives.ciphers.aead�labackendaaead_cipher_supportedaexceptionsaUnsupportedAlgorithmuChaCha20Poly1305 is not supported by this version of OpenSSLa_ReasonsaUNSUPPORTED_CIPHERautilsa_check_byteslikeakeyuChaCha20Poly1305 key must be 32 bytes.a_keyaosaurandomTl ca_MAX_SIZEuData or associated data too long. Max 2**32 bytesa_check_paramsaassociated_dataaaeada_encryptla_decryptanoncea_check_bytesadatauNonce must be 12 bytesTlll uAESCCM key must be 128, 192, or 256 bits.utag_length must be an integerTllll
llluInvalid tag_lengtha_tag_lengthuAESCCM is not supported by this version of OpenSSLubit_length must be an integerTl�l�lubit_length must be 128, 192, or 256la_validate_lengthsluNonce too long for datauNonce must be between 7 and 13 bytesuAESGCM key must be 128, 192, or 256 bits.uNonce must be at least 1 bytea__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/ciphers/aead.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacryptographyTaexceptionsautilslucryptography.hazmat.backends.opensslTaaeaducryptography.hazmat.backends.openssl.backendTabackendTOobjectametaclassa__prepare__aChaCha20Poly1305a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucryptography.hazmat.primitives.ciphers.aeada__module__a__qualname__la__init__uChaCha20Poly1305.__init__aclassmethodagenerate_keyuChaCha20Poly1305.generate_keyaencryptuChaCha20Poly1305.encryptadecryptuChaCha20Poly1305.decryptuChaCha20Poly1305._check_paramsa__orig_bases__aAESCCMTluAESCCM.__init__uAESCCM.generate_keyuAESCCM.encryptuAESCCM.decryptuAESCCM._validate_lengthsuAESCCM._check_paramsaAESGCMuAESGCM.__init__uAESGCM.generate_keyuAESGCM.encryptuAESGCM.decryptuAESGCM._check_paramsu<module cryptography.hazmat.primitives.ciphers.aead>Ta__class__TaselfakeyTaselfakeyatag_lengthTaselfanonceadataaassociated_dataTaselfanonceadata_lenal_valTaclsTaclsabit_lengthu.cryptography.hazmat.primitives.ciphers.algorithms�kautilsa_check_byteslikeakeylakey_sizesuInvalid key size ({}) for {}.anamea_verify_key_size:nlnanonceunonce must be 128-bits (16 bytes)a_noncea__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/ciphers/algorithms.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacryptographyTautilslucryptography.hazmat.primitives.ciphersTaBlockCipherAlgorithmaCipherAlgorithmaBlockCipherAlgorithmaCipherAlgorithmucryptography.hazmat.primitives.ciphers.modesTaModeWithNonceaModeWithNonceTOobjectametaclassa__prepare__aAESa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aregister_interfaceucryptography.hazmat.primitives.ciphers.algorithmsa__module__a__qualname__l�ablock_sizeafrozensetLl�l�llPl�lll�a__init__uAES.__init__apropertyakey_sizeuAES.key_sizea__orig_bases__aCamelliaacamelliaLl�l�lPl�ll�uCamellia.__init__uCamellia.key_sizeaTripleDESu3DESl@Ll@l�l�Pl@l�l�uTripleDES.__init__uTripleDES.key_sizeaBlowfisharangeTl l�l;l l�luBlowfish.__init__uBlowfish.key_sizeaCAST5Tl(l�l;l(l�luCAST5.__init__uCAST5.key_sizeaARC4aRC4Ll(l8l@lPl�l�l�lPl@ll�l�l�l(lPl8uARC4.__init__uARC4.key_sizeaIDEALl�Pl�uIDEA.__init__uIDEA.key_sizeaSEEDuSEED.__init__uSEED.key_sizeaChaCha20LlPluChaCha20.__init__aread_only_propertyTa_nonceuChaCha20.key_sizeu<module cryptography.hazmat.primitives.ciphers.algorithms>Ta__class__TaselfakeyTaselfakeyanonceTaalgorithmakeyTaselfu.cryptography.hazmat.primitives.ciphers.base��aCipherBackendaUnsupportedAlgorithmuBackend object does not implement CipherBackend.a_ReasonsaBACKEND_MISSING_INTERFACEaCipherAlgorithmuExpected interface of CipherAlgorithm.avalidate_for_algorithmaalgorithmamodea_backendamodesaModeWithAuthenticationTagataguAuthentication tag must be None when encrypting.acreate_symmetric_encryption_ctxa_wrap_ctxDaencrypttacreate_symmetric_decryption_ctxDaencryptFa_AEADEncryptionContexta_AEADCipherContexta_CipherContexta_ctxaAlreadyFinalizedTuContext was already finalized.aupdateaupdate_intoafinalizela_bytes_processeda_aad_bytes_processeda_taga_updateda_modea_MAX_ENCRYPTED_BYTESu{} has a maximum encrypted byte limit of {}anamea_check_limitafinalize_with_tagaAlreadyUpdatedTuUpdate has been called on this context.a_MAX_AAD_BYTESu{} has a maximum AAD byte limit of {}aauthenticate_additional_dataaNotYetFinalizedTuYou must finalize encryption before getting the tag.a__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/ciphers/base.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionaabcasixacryptographyTautilsautilsucryptography.exceptionsTaAlreadyFinalizedaAlreadyUpdatedaNotYetFinalizedaUnsupportedAlgorithma_Reasonsucryptography.hazmat.backends.interfacesTaCipherBackenducryptography.hazmat.primitives.ciphersTamodesTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aadd_metaclassaABCMetaucryptography.hazmat.primitives.ciphers.basea__module__a__qualname__aabstractpropertyu
        A string naming this mode (e.g. "AES", "Camellia").
        uCipherAlgorithm.nameu
        The size of the key being used as an integer in bits (e.g. 128, 256).
        akey_sizeuCipherAlgorithm.key_sizea__orig_bases__aBlockCipherAlgorithmu
        The size of a block as an integer in bits (e.g. 64, 128).
        ablock_sizeuBlockCipherAlgorithm.block_sizeaCipherContextaabstractmethodu
        Processes the provided bytes through the cipher and returns the results
        as bytes.
        uCipherContext.updateu
        Processes the provided bytes and writes the resulting data into the
        provided buffer. Returns the number of bytes written.
        uCipherContext.update_intou
        Returns the results of processing the final block as bytes.
        uCipherContext.finalizeaAEADCipherContextu
        Authenticates the provided bytes.
        uAEADCipherContext.authenticate_additional_dataaAEADDecryptionContextu
        Returns the results of processing the final block as bytes and allows
        delayed passing of the authentication tag.
        uAEADDecryptionContext.finalize_with_tagaAEADEncryptionContextu
        Returns tag bytes. This is only available after encryption is
        finalized.
        uAEADEncryptionContext.tagaCiphera__init__uCipher.__init__aencryptoruCipher.encryptoradecryptoruCipher.decryptoruCipher._wrap_ctxaregister_interfaceu_CipherContext.__init__u_CipherContext.updateu_CipherContext.update_intou_CipherContext.finalizeu_AEADCipherContext.__init__u_AEADCipherContext._check_limitu_AEADCipherContext.updateu_AEADCipherContext.update_intou_AEADCipherContext.finalizeu_AEADCipherContext.finalize_with_tagu_AEADCipherContext.authenticate_additional_dataapropertyu_AEADEncryptionContext.tagu<module cryptography.hazmat.primitives.ciphers.base>Ta__class__TaselfaalgorithmamodeabackendTaselfactxTaselfadata_sizeTaselfactxaencryptTaselfadataTaselfTaselfatagTaselfatagadataTaselfadataabufu.cryptography.hazmat.primitives.ciphers+a__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/ciphers/__init__.pya__file__Lu/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/ciphersa__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aabsolute_importadivisionaprint_functionucryptography.hazmat.primitives.ciphers.baseTaAEADCipherContextaAEADDecryptionContextaAEADEncryptionContextaBlockCipherAlgorithmaCipheraCipherAlgorithmaCipherContextaAEADCipherContextaAEADDecryptionContextaAEADEncryptionContextaBlockCipherAlgorithmaCipheraCipherAlgorithmaCipherContextLaCipheraCipherAlgorithmaBlockCipherAlgorithmaCipherContextaAEADCipherContextaAEADDecryptionContextaAEADEncryptionContexta__all__u<module cryptography.hazmat.primitives.ciphers>u.cryptography.hazmat.primitives.ciphers.modes
vakey_sizelanameaAESuOnly 128, 192, and 256 bit keys are allowed for this AES modeainitialization_vectorlablock_sizeuInvalid IV size ({}) for {}.a_check_aes_key_lengtha_check_iv_lengthautilsa_check_byteslikea_initialization_vectoratweakutweak must be 128-bits (16 bytes)a_tweakTlluThe XTS specification requires a 256-bit key for AES-128-XTS and 512-bit key for AES-256-XTSanoncea_nonceuInvalid nonce size ({}) for {}.uinitialization_vector must be at least 1 bytea_check_bytesataglumin_tag_length must be >= 4uAuthentication tag must be {} bytes or longer.a_taga_min_tag_lengtha__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/ciphers/modes.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionaabclasixacryptographyTautilsTOobjectametaclassa__prepare__aModea__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aadd_metaclassaABCMetaucryptography.hazmat.primitives.ciphers.modesa__module__a__qualname__aabstractpropertyu
        A string naming this mode (e.g. "ECB", "CBC").
        uMode.nameaabstractmethodu
        Checks that all the necessary invariants of this (mode, algorithm)
        combination are met.
        avalidate_for_algorithmuMode.validate_for_algorithma__orig_bases__aModeWithInitializationVectoru
        The value of the initialization vector for this mode as bytes.
        uModeWithInitializationVector.initialization_vectoraModeWithTweaku
        The value of the tweak for this mode as bytes.
        uModeWithTweak.tweakaModeWithNonceu
        The value of the nonce for this mode as bytes.
        uModeWithNonce.nonceaModeWithAuthenticationTagu
        The value of the tag supplied to the constructor of this mode.
        uModeWithAuthenticationTag.taga_check_iv_and_key_lengthaCBCaregister_interfacea__init__uCBC.__init__aread_only_propertyTa_initialization_vectoraXTSuXTS.__init__Ta_tweakuXTS.validate_for_algorithmaECBaOFBuOFB.__init__aCFBuCFB.__init__aCFB8uCFB8.__init__aCTRuCTR.__init__Ta_nonceuCTR.validate_for_algorithmaGCMl��a_MAX_ENCRYPTED_BYTESq a_MAX_AAD_BYTESTnluGCM.__init__Ta_taguGCM.validate_for_algorithmu<module cryptography.hazmat.primitives.ciphers.modes>Ta__class__Taselfainitialization_vectorTaselfainitialization_vectoratagamin_tag_lengthTaselfanonceTaselfatweakTaselfaalgorithmTaselfu.cryptography.hazmat.primitivesVa__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/__init__.pya__file__Lu/usr/lib/python3/dist-packages/cryptography/hazmat/primitivesa__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aabsolute_importadivisionaprint_functionu<module cryptography.hazmat.primitives>u.cryptography.hazmat.primitives.constant_time�ua and b must be bytes.ahmacacompare_digestalibaCryptography_constant_time_bytes_eqla__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/constant_time.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionlawarningsacryptographyTautilsautilsucryptography.hazmat.bindings._constant_timeTalibabytes_eqawarnuSupport for your Python version is deprecated. The next version of cryptography will remove support. Please upgrade to a release (2.7.7+) that supports hmac.compare_digest as soon as possible.aPersistentlyDeprecated2018u<module cryptography.hazmat.primitives.constant_time>Twawbu.cryptography.hazmat.primitives.hashesD
�aHashBackendaUnsupportedAlgorithmuBackend object does not implement HashBackend.a_ReasonsaBACKEND_MISSING_INTERFACEaHashAlgorithmuExpected instance of hashes.HashAlgorithm.a_algorithma_backendacreate_hash_ctxaalgorithma_ctxaAlreadyFinalizedTuContext was already finalized.autilsa_check_byteslikeadataaupdateaHashacopyTabackendactxafinalizeasixainteger_typesudigest_size must be an integerludigest_size must be a positive integera_digest_sizel@uDigest size must be 64l uDigest size must be 32a__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/hashes.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionaabclacryptographyTautilsucryptography.exceptionsTaAlreadyFinalizedaUnsupportedAlgorithma_Reasonsucryptography.hazmat.backends.interfacesTaHashBackendTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aadd_metaclassaABCMetaucryptography.hazmat.primitives.hashesa__module__a__qualname__aabstractpropertyu
        A string naming this algorithm (e.g. "sha256", "md5").
        anameuHashAlgorithm.nameu
        The size of the resulting digest in bytes.
        adigest_sizeuHashAlgorithm.digest_sizea__orig_bases__aHashContextu
        A HashAlgorithm that will be used by this context.
        uHashContext.algorithmaabstractmethodu
        Processes the provided bytes through the hash.
        uHashContext.updateu
        Finalizes the hash context and returns the hash digest as bytes.
        uHashContext.finalizeu
        Return a HashContext that is a copy of the current context.
        uHashContext.copyaExtendableOutputFunctionu
    An interface for extendable output functions.
    aregister_interfaceTna__init__uHash.__init__aread_only_propertyTa_algorithmuHash.updateuHash.copyuHash.finalizeaSHA1asha1lablock_sizeaSHA512_224usha512-224ll�aSHA512_256usha512-256aSHA224asha224aSHA256asha256aSHA384asha384l0aSHA512asha512aSHA3_224usha3-224aSHA3_256usha3-256aSHA3_384usha3-384aSHA3_512usha3-512aSHAKE128ashake128uSHAKE128.__init__Ta_digest_sizeaSHAKE256ashake256uSHAKE256.__init__aMD5amd5laBLAKE2bablake2ba_max_digest_sizea_min_digest_sizeuBLAKE2b.__init__aBLAKE2sablake2suBLAKE2s.__init__u<module cryptography.hazmat.primitives.hashes>Ta__class__TaselfaalgorithmabackendactxTaselfadigest_sizeTaselfTaselfadigestTaselfadatau.cryptography.hazmat.primitives.kdf*a__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/kdf/__init__.pya__file__Lu/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/kdfa__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aabsolute_importadivisionaprint_functionaabcasixTOobjectametaclassa__prepare__aKeyDerivationFunctiona__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aadd_metaclassaABCMetaucryptography.hazmat.primitives.kdfa__module__a__qualname__aabstractmethodu
        Deterministically generates and returns a new key based on the existing
        key material.
        aderiveuKeyDerivationFunction.deriveu
        Checks whether the key generated by the key material matches the
        expected derived key. Raises an exception if they do not match.
        averifyuKeyDerivationFunction.verifya__orig_bases__u<module cryptography.hazmat.primitives.kdf>Ta__class__Taselfakey_materialTaselfakey_materialaexpected_keyu.cryptography.hazmat.primitives.kdf.scryptPaScryptBackendaUnsupportedAlgorithmuBackend object does not implement ScryptBackend.a_ReasonsaBACKEND_MISSING_INTERFACEa_lengthautilsa_check_bytesasaltlllun must be greater than 1 and be a power of 2.ur must be greater than or equal to 1.up must be greater than or equal to 1.a_useda_saltwna_na_ra_pa_backendaAlreadyFinalizedTuScrypt instances can only be used once.a_check_byteslikeakey_materialaderive_scryptaderiveaconstant_timeabytes_eqaInvalidKeyTuKeys do not match.a__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/kdf/scrypt.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionasysacryptographyTautilsucryptography.exceptionsTaAlreadyFinalizedaInvalidKeyaUnsupportedAlgorithma_Reasonsucryptography.hazmat.backends.interfacesTaScryptBackenducryptography.hazmat.primitivesTaconstant_timeucryptography.hazmat.primitives.kdfTaKeyDerivationFunctionaKeyDerivationFunctionq�������?a_MEM_LIMITTOobjectametaclassa__prepare__aScrypta__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aregister_interfaceucryptography.hazmat.primitives.kdf.scrypta__module__a__qualname__a__init__uScrypt.__init__uScrypt.deriveaverifyuScrypt.verifya__orig_bases__u<module cryptography.hazmat.primitives.kdf.scrypt>Ta__class__TaselfasaltalengthwnwrwpabackendTaselfakey_materialTaselfakey_materialaexpected_keyaderived_keyu.cryptography.hazmat.primitives.serialization.base�Iaload_pem_private_keyaload_pem_public_keyaload_pem_parametersaload_der_private_keyaload_der_public_keyaload_der_parametersuPassword must be 1 or more bytes.apassworda__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/serialization/base.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionaabclaenumTaEnumaEnumasixacryptographyTautilsautilsametaclassa__prepare__aEncodinga__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucryptography.hazmat.primitives.serialization.basea__module__a__qualname__aPEMaDERaOpenSSHaRawuANSI X9.62aX962a__orig_bases__aPrivateFormataPKCS8aTraditionalOpenSSLaPublicFormatuX.509 subjectPublicKeyInfo with PKCS#1aSubjectPublicKeyInfouRaw PKCS#1aPKCS1uX9.62 Compressed PointaCompressedPointuX9.62 Uncompressed PointaUncompressedPointaParameterFormataPKCS3TOobjectaKeySerializationEncryptionaadd_metaclassaABCMetaaBestAvailableEncryptionaregister_interfacea__init__uBestAvailableEncryption.__init__aNoEncryptionu<module cryptography.hazmat.primitives.serialization.base>Ta__class__TaselfapasswordTadataabackendTadataapasswordabackendu.cryptography.hazmat.primitives.serializationA'a__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/serialization/__init__.pya__file__Lu/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/serializationa__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aabsolute_importadivisionaprint_functionucryptography.hazmat.primitives.serialization.baseT
aBestAvailableEncryptionaEncodingaKeySerializationEncryptionaNoEncryptionaParameterFormataPrivateFormataPublicFormataload_der_parametersaload_der_private_keyaload_der_public_keyaload_pem_parametersaload_pem_private_keyaload_pem_public_keyaBestAvailableEncryptionaEncodingaKeySerializationEncryptionaNoEncryptionaParameterFormataPrivateFormataPublicFormataload_der_parametersaload_der_private_keyaload_der_public_keyaload_pem_parametersaload_pem_private_keyaload_pem_public_keyucryptography.hazmat.primitives.serialization.sshTaload_ssh_public_keyaload_ssh_public_keyaPEMaDERa_PEM_DERLaload_der_parametersaload_der_private_keyaload_der_public_keyaload_pem_parametersaload_pem_private_keyaload_pem_public_keyaload_ssh_public_keyaEncodingaPrivateFormataPublicFormataParameterFormataKeySerializationEncryptionaBestAvailableEncryptionaNoEncryptiona__all__u<module cryptography.hazmat.primitives.serialization>u.cryptography.hazmat.primitives.serialization.ssh�\asplitTd luKey is not in the proper format or contains extra data.lcssh-rsaa_load_ssh_rsa_public_keycssh-dssa_load_ssh_dss_public_keyLcecdsa-sha2-nistp256cecdsa-sha2-nistp384cecdsa-sha2-nistp521a_load_ssh_ecdsa_public_keycssh-ed25519a_load_ssh_ed25519_public_keyaUnsupportedAlgorithmTuKey type is not supported.labase64ab64decodeuKey is not in the proper format.a_ssh_read_next_stringutoo many values to unpack (expected 2)uKey header and key body contain different key type values.a_ssh_read_next_mpintuKey body contains extra bytes.arsaaRSAPublicNumbersapublic_keyadsaaDSAParameterNumbersaDSAPublicNumberscecdsa-sha2-cnistp256aecaSECP256R1cnistp384aSECP384R1cnistp521aSECP521R1asixaindexbytesluCompressed elliptic curve points are not supportedaEllipticCurvePublicKeyafrom_encoded_pointaed25519aEd25519PublicKeyafrom_public_bytesuKey is not in the proper formatastructaunpacku>I:nlnutoo many values to unpack (expected 1)u
    Retrieves the next RFC 4251 string value from the data.

    While the RFC calls these strings, in Python they are bytes objects.
    autilsaint_from_bytesDabyteorderasignedabigFu
    Reads the next mpint from the data.

    Currently, all mpints are interpreted as unsigned.
    apackaint_to_bytesl�da_ssh_write_stringadataa__doc__u/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/serialization/ssh.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionacryptographyTautilsucryptography.exceptionsTaUnsupportedAlgorithmucryptography.hazmat.primitives.asymmetricTadsaaecaed25519arsaaload_ssh_public_keya_ssh_write_mpintu<module cryptography.hazmat.primitives.serialization.ssh>T
akey_typeadecoded_dataabackendwparestwqwgwyaparameter_numbersapublic_numbersTaexpected_key_typeadecoded_dataabackendacurve_namearestadataacurveTaexpected_key_typeadecoded_dataabackendadataarestTakey_typeadecoded_dataabackendwearestwnTadataampint_dataarestTadataastr_lenTavalueadataTadataT	adataabackendakey_partsakey_typealoaderakey_bodyadecoded_dataainner_key_typearestu.cryptography.utils-	{u{} must be bytesu{} must be bytes-likeu<lambda>uread_only_property.<locals>.<lambda>anamearegister_decoratoruregister_interface.<locals>.register_decoratoraverify_interfaceaifacearegisteruregister_interface_if.<locals>.register_decoratorapredicateaklassato_bytesabit_lengthlllabiga__abstractmethods__aInterfaceNotImplementedu{} is missing a {!r} methodaabcaabstractpropertyasignatureu{}.{}'s signature differs from the expected. Expected: {!r}. Received: {!r}avalueamessageawarning_classa_modulea_DeprecatedValueawarningsawarnDastacklevelladelattrLa_moduleasysamodulesa_ModuleWithDeprecationsu_cached_{}ainnerucached_property.<locals>.inneracached_nameasentinelafunca__doc__u/usr/lib/python3/dist-packages/cryptography/utils.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionlabinasciiainspectaUserWarningametaclassa__prepare__aCryptographyDeprecationWarninga__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucryptography.utilsa__module__a__qualname__a__orig_bases__aPersistentlyDeprecated2017aPersistentlyDeprecated2018aDeprecatedIn25aDeprecatedIn27a_check_bytesa_check_byteslikearead_only_propertyaregister_interfacearegister_interface_ifafrom_bytesaint_from_bytesTnaint_to_bytesTEExceptionagetargspecTOobjecta__init__u_DeprecatedValue.__init__u_ModuleWithDeprecations.__init__a__getattr__u_ModuleWithDeprecations.__getattr__a__setattr__u_ModuleWithDeprecations.__setattr__a__delattr__u_ModuleWithDeprecations.__delattr__a__dir__u_ModuleWithDeprecations.__dir__adeprecatedacached_propertyTaselfanameTanameu<module cryptography.utils>Ta__class__TaselfaattraobjTaselfTaselfamoduleTaselfavalueamessageawarning_classTaselfaattravalueTanameavalueTwxTafuncacached_nameasentinelainnerTavalueamodule_nameamessageawarning_classamoduleTainstanceacachearesultacached_nameasentinelafuncTacached_nameafuncasentinelTaintegeralengthTaklassaifaceTaifaceTaklassapredicateaifaceTaifaceapredicateTaifacearegister_decoratorTapredicateaifacearegister_decoratorTaifaceaklassamethodasigaactualu.cryptography.x509.baseH+RaoidaextensionuThis extension has already been set.atzinfoautcoffsetadatetimeatimedeltaareplaceTnTatzinfouNormalizes a datetime to a naive datetime in UTC.

    time -- datetime to normalize. Assumed to be in UTC if not timezone
            aware.
    aload_pem_x509_certificateaload_der_x509_certificateaload_pem_x509_csraload_der_x509_csraload_pem_x509_crlaload_der_x509_crlaInvalidVersiona__init__aparsed_versiona_subject_namea_extensionsu
        Creates an empty X.509 certificate request (v1).
        aNameuExpecting x509.Name object.uThe subject name may only be set once.aCertificateSigningRequestBuilderu
        Sets the certificate requestor's distinguished name.
        aExtensionTypeuextension must be an ExtensionTypeaExtensiona_reject_duplicate_extensionu
        Adds an X.509 extension to the certificate request.
        uA CertificateSigningRequest must have a subjectacreate_x509_csru
        Signs the request using the requestor's private key.
        aVersionav3a_versiona_issuer_namea_public_keya_serial_numbera_not_valid_beforea_not_valid_afteruThe issuer name may only be set once.aCertificateBuilderu
        Sets the CA's distinguished name.
        u
        Sets the requestor's distinguished name.
        adsaaDSAPublicKeyarsaaRSAPublicKeyaecaEllipticCurvePublicKeyaed25519aEd25519PublicKeyaed448aEd448PublicKeyuExpecting one of DSAPublicKey, RSAPublicKey, EllipticCurvePublicKey, Ed25519PublicKey or Ed448PublicKey.uThe public key may only be set once.u
        Sets the requestor's public key (as found in the signing request).
        asixainteger_typesuSerial number must be of integral type.uThe serial number may only be set once.luThe serial number should be positive.abit_lengthl�uThe serial number should not be more than 159 bits.u
        Sets the certificate serial number.
        uExpecting datetime object.uThe not valid before may only be set once.a_convert_to_naive_utc_timea_EARLIEST_UTC_TIMEuThe not valid before date must be on or after 1950 January 1).uThe not valid before date must be before the not valid after date.u
        Sets the certificate activation time.
        uThe not valid after may only be set once.uThe not valid after date must be on or after 1950 January 1.uThe not valid after date must be after the not valid before date.u
        Sets the certificate expiration time.
        u
        Adds an X.509 extension to the certificate.
        uA certificate must have a subject nameuA certificate must have an issuer nameuA certificate must have a serial numberuA certificate must have a not valid before timeuA certificate must have a not valid after timeuA certificate must have a public keyacreate_x509_certificateu
        Signs the certificate using the CA's private key.
        a_last_updatea_next_updatea_revoked_certificatesaCertificateRevocationListBuilderuLast update may only be set once.uThe last update date must be on or after 1950 January 1.uThe last update date must be before the next update date.uThe next update date must be after the last update date.u
        Adds an X.509 extension to the certificate revocation list.
        aRevokedCertificateuMust be an instance of RevokedCertificateu
        Adds a revoked certificate to the CRL.
        uA CRL must have an issuer nameuA CRL must have a last update timeuA CRL must have a next update timeacreate_x509_crla_revocation_dateuThe serial number should be positiveaRevokedCertificateBuilderuThe revocation date may only be set once.uThe revocation date must be on or after 1950 January 1.uA revoked certificate must have a serial numberuA revoked certificate must have a revocation dateacreate_x509_revoked_certificateautilsaint_from_bytesaosaurandomTlabigla__doc__u/usr/lib/python3/dist-packages/cryptography/x509/base.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionaabcaenumTaEnumaEnumacryptographyTautilsucryptography.hazmat.primitives.asymmetricTadsaaecaed25519aed448arsaucryptography.x509.extensionsTaExtensionaExtensionTypeucryptography.x509.nameTaNameTl�lpametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucryptography.x509.basea__module__a__qualname__av1la__orig_bases__TEExceptionuInvalidVersion.__init__TOobjectaCertificateaadd_metaclassaABCMetaaabstractmethodu
        Returns bytes using digest passed.
        afingerprintuCertificate.fingerprintaabstractpropertyu
        Returns certificate serial number
        aserial_numberuCertificate.serial_numberu
        Returns the certificate version
        aversionuCertificate.versionu
        Returns the public key
        apublic_keyuCertificate.public_keyu
        Not before time (represented as UTC datetime)
        anot_valid_beforeuCertificate.not_valid_beforeu
        Not after time (represented as UTC datetime)
        anot_valid_afteruCertificate.not_valid_afteru
        Returns the issuer name object.
        aissueruCertificate.issueru
        Returns the subject name object.
        asubjectuCertificate.subjectu
        Returns a HashAlgorithm corresponding to the type of the digest signed
        in the certificate.
        asignature_hash_algorithmuCertificate.signature_hash_algorithmu
        Returns the ObjectIdentifier of the signature algorithm.
        asignature_algorithm_oiduCertificate.signature_algorithm_oidu
        Returns an Extensions object.
        aextensionsuCertificate.extensionsu
        Returns the signature bytes.
        asignatureuCertificate.signatureu
        Returns the tbsCertificate payload bytes as defined in RFC 5280.
        atbs_certificate_bytesuCertificate.tbs_certificate_bytesu
        Checks equality.
        a__eq__uCertificate.__eq__u
        Checks not equal.
        a__ne__uCertificate.__ne__u
        Computes a hash.
        a__hash__uCertificate.__hash__u
        Serializes the certificate to PEM or DER format.
        apublic_bytesuCertificate.public_bytesaCertificateRevocationListu
        Serializes the CRL to PEM or DER format.
        uCertificateRevocationList.public_bytesuCertificateRevocationList.fingerprintu
        Returns an instance of RevokedCertificate or None if the serial_number
        is not in the CRL.
        aget_revoked_certificate_by_serial_numberuCertificateRevocationList.get_revoked_certificate_by_serial_numberuCertificateRevocationList.signature_hash_algorithmuCertificateRevocationList.signature_algorithm_oidu
        Returns the X509Name with the issuer of this CRL.
        uCertificateRevocationList.issueru
        Returns the date of next update for this CRL.
        anext_updateuCertificateRevocationList.next_updateu
        Returns the date of last update for this CRL.
        alast_updateuCertificateRevocationList.last_updateu
        Returns an Extensions object containing a list of CRL extensions.
        uCertificateRevocationList.extensionsuCertificateRevocationList.signatureu
        Returns the tbsCertList payload bytes as defined in RFC 5280.
        atbs_certlist_bytesuCertificateRevocationList.tbs_certlist_bytesuCertificateRevocationList.__eq__uCertificateRevocationList.__ne__u
        Number of revoked certificates in the CRL.
        a__len__uCertificateRevocationList.__len__u
        Returns a revoked certificate (or slice of revoked certificates).
        uCertificateRevocationList.__getitem__u
        Iterator over the revoked certificates
        a__iter__uCertificateRevocationList.__iter__u
        Verifies signature of revocation list against given public key.
        ais_signature_validuCertificateRevocationList.is_signature_validaCertificateSigningRequestuCertificateSigningRequest.__eq__uCertificateSigningRequest.__ne__uCertificateSigningRequest.__hash__uCertificateSigningRequest.public_keyuCertificateSigningRequest.subjectuCertificateSigningRequest.signature_hash_algorithmuCertificateSigningRequest.signature_algorithm_oidu
        Returns the extensions in the signing request.
        uCertificateSigningRequest.extensionsu
        Encodes the request to PEM or DER format.
        uCertificateSigningRequest.public_bytesuCertificateSigningRequest.signatureu
        Returns the PKCS#10 CertificationRequestInfo bytes as defined in RFC
        2986.
        atbs_certrequest_bytesuCertificateSigningRequest.tbs_certrequest_bytesu
        Verifies signature of signing request.
        uCertificateSigningRequest.is_signature_validu
        Returns the serial number of the revoked certificate.
        uRevokedCertificate.serial_numberu
        Returns the date of when this certificate was revoked.
        arevocation_dateuRevokedCertificate.revocation_dateu
        Returns an Extensions object containing a list of Revoked extensions.
        uRevokedCertificate.extensionsuCertificateSigningRequestBuilder.__init__asubject_nameuCertificateSigningRequestBuilder.subject_nameaadd_extensionuCertificateSigningRequestBuilder.add_extensionasignuCertificateSigningRequestBuilder.signuCertificateBuilder.__init__aissuer_nameuCertificateBuilder.issuer_nameuCertificateBuilder.subject_nameuCertificateBuilder.public_keyuCertificateBuilder.serial_numberuCertificateBuilder.not_valid_beforeuCertificateBuilder.not_valid_afteruCertificateBuilder.add_extensionuCertificateBuilder.signuCertificateRevocationListBuilder.__init__uCertificateRevocationListBuilder.issuer_nameuCertificateRevocationListBuilder.last_updateuCertificateRevocationListBuilder.next_updateuCertificateRevocationListBuilder.add_extensionaadd_revoked_certificateuCertificateRevocationListBuilder.add_revoked_certificateuCertificateRevocationListBuilder.signuRevokedCertificateBuilder.__init__uRevokedCertificateBuilder.serial_numberuRevokedCertificateBuilder.revocation_dateuRevokedCertificateBuilder.add_extensionabuilduRevokedCertificateBuilder.buildarandom_serial_numberu<module cryptography.x509.base>Ta__class__TaselfaotherTaselfaidxTaselfTaselfaissuer_namealast_updateanext_updateaextensionsarevoked_certificatesTaselfaissuer_nameasubject_nameapublic_keyaserial_numberanot_valid_beforeanot_valid_afteraextensionsTaselfamsgaparsed_versiona__class__Taselfaserial_numberarevocation_dateaextensionsTaselfasubject_nameaextensionsTatimeaoffsetTaextensionaextensionsweTaselfaextensionacriticalTaselfarevoked_certificateTaselfabackendTaselfaalgorithmTaselfaserial_numberTaselfapublic_keyTaselfaissuer_nameTaselfanameTaselfalast_updateTadataabackendTaselfanext_updateTaselfatimeTaselfaencodingTaselfakeyTaselfanumberTaselfaprivate_keyaalgorithmabackendu.cryptography.x509.certificate_transparencyY5a__doc__u/usr/lib/python3/dist-packages/cryptography/x509/certificate_transparency.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionaabclaenumTaEnumaEnumasixametaclassa__prepare__aLogEntryTypea__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucryptography.x509.certificate_transparencya__module__a__qualname__aX509_CERTIFICATElaPRE_CERTIFICATEa__orig_bases__aVersionav1TOobjectaSignedCertificateTimestampaadd_metaclassaABCMetaaabstractpropertyu
        Returns the SCT version.
        aversionuSignedCertificateTimestamp.versionu
        Returns an identifier indicating which log this SCT is for.
        alog_iduSignedCertificateTimestamp.log_idu
        Returns the timestamp for this SCT.
        atimestampuSignedCertificateTimestamp.timestampu
        Returns whether this is an SCT for a certificate or pre-certificate.
        aentry_typeuSignedCertificateTimestamp.entry_typeu<module cryptography.x509.certificate_transparency>Ta__class__Taselfu.cryptography.x509V�a__doc__u/usr/lib/python3/dist-packages/cryptography/x509/__init__.pya__file__Lu/usr/lib/python3/dist-packages/cryptography/x509a__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aabsolute_importadivisionaprint_functionucryptography.x509Tacertificate_transparencyacertificate_transparencyucryptography.x509.baseTaCertificateaCertificateBuilderaCertificateRevocationListaCertificateRevocationListBuilderaCertificateSigningRequestaCertificateSigningRequestBuilderaInvalidVersionaRevokedCertificateaRevokedCertificateBuilderaVersionaload_der_x509_certificateaload_der_x509_crlaload_der_x509_csraload_pem_x509_certificateaload_pem_x509_crlaload_pem_x509_csrarandom_serial_numberaCertificateaCertificateBuilderaCertificateRevocationListaCertificateRevocationListBuilderaCertificateSigningRequestaCertificateSigningRequestBuilderaInvalidVersionaRevokedCertificateaRevokedCertificateBuilderaVersionaload_der_x509_certificateaload_der_x509_crlaload_der_x509_csraload_pem_x509_certificateaload_pem_x509_crlaload_pem_x509_csrarandom_serial_numberucryptography.x509.extensionsT'aAccessDescriptionaAuthorityInformationAccessaAuthorityKeyIdentifieraBasicConstraintsaCRLDistributionPointsaCRLNumberaCRLReasonaCertificateIssueraCertificatePoliciesaDeltaCRLIndicatoraDistributionPointaDuplicateExtensionaExtendedKeyUsageaExtensionaExtensionNotFoundaExtensionTypeaExtensionsaFreshestCRLaGeneralNamesaInhibitAnyPolicyaInvalidityDateaIssuerAlternativeNameaIssuingDistributionPointaKeyUsageaNameConstraintsaNoticeReferenceaOCSPNoCheckaOCSPNonceaPolicyConstraintsaPolicyInformationaPrecertPoisonaPrecertificateSignedCertificateTimestampsaReasonFlagsaSubjectAlternativeNameaSubjectKeyIdentifieraTLSFeatureaTLSFeatureTypeaUnrecognizedExtensionaUserNoticeaAccessDescriptionaAuthorityInformationAccessaAuthorityKeyIdentifieraBasicConstraintsaCRLDistributionPointsaCRLNumberaCRLReasonaCertificateIssueraCertificatePoliciesaDeltaCRLIndicatoraDistributionPointaDuplicateExtensionaExtendedKeyUsageaExtensionaExtensionNotFoundaExtensionTypeaExtensionsaFreshestCRLaGeneralNamesaInhibitAnyPolicyaInvalidityDateaIssuerAlternativeNameaIssuingDistributionPointaKeyUsageaNameConstraintsaNoticeReferenceaOCSPNoCheckaOCSPNonceaPolicyConstraintsaPolicyInformationaPrecertPoisonaPrecertificateSignedCertificateTimestampsaReasonFlagsaSubjectAlternativeNameaSubjectKeyIdentifieraTLSFeatureaTLSFeatureTypeaUnrecognizedExtensionaUserNoticeucryptography.x509.general_nameT
aDNSNameaDirectoryNameaGeneralNameaIPAddressaOtherNameaRFC822NameaRegisteredIDaUniformResourceIdentifieraUnsupportedGeneralNameTypea_GENERAL_NAMESaDNSNameaDirectoryNameaGeneralNameaIPAddressaOtherNameaRFC822NameaRegisteredIDaUniformResourceIdentifieraUnsupportedGeneralNameTypea_GENERAL_NAMESucryptography.x509.nameTaNameaNameAttributeaRelativeDistinguishedNameaNameaNameAttributeaRelativeDistinguishedNameucryptography.x509.oidT	aAuthorityInformationAccessOIDaCRLEntryExtensionOIDaCertificatePoliciesOIDaExtendedKeyUsageOIDaExtensionOIDaNameOIDaObjectIdentifieraSignatureAlgorithmOIDa_SIG_OIDS_TO_HASHaAuthorityInformationAccessOIDaCRLEntryExtensionOIDaCertificatePoliciesOIDaExtendedKeyUsageOIDaExtensionOIDaNameOIDaObjectIdentifieraSignatureAlgorithmOIDa_SIG_OIDS_TO_HASHaAUTHORITY_INFORMATION_ACCESSaOID_AUTHORITY_INFORMATION_ACCESSaAUTHORITY_KEY_IDENTIFIERaOID_AUTHORITY_KEY_IDENTIFIERaBASIC_CONSTRAINTSaOID_BASIC_CONSTRAINTSaCERTIFICATE_POLICIESaOID_CERTIFICATE_POLICIESaCRL_DISTRIBUTION_POINTSaOID_CRL_DISTRIBUTION_POINTSaEXTENDED_KEY_USAGEaOID_EXTENDED_KEY_USAGEaFRESHEST_CRLaOID_FRESHEST_CRLaINHIBIT_ANY_POLICYaOID_INHIBIT_ANY_POLICYaISSUER_ALTERNATIVE_NAMEaOID_ISSUER_ALTERNATIVE_NAMEaKEY_USAGEaOID_KEY_USAGEaNAME_CONSTRAINTSaOID_NAME_CONSTRAINTSaOCSP_NO_CHECKaOID_OCSP_NO_CHECKaPOLICY_CONSTRAINTSaOID_POLICY_CONSTRAINTSaPOLICY_MAPPINGSaOID_POLICY_MAPPINGSaSUBJECT_ALTERNATIVE_NAMEaOID_SUBJECT_ALTERNATIVE_NAMEaSUBJECT_DIRECTORY_ATTRIBUTESaOID_SUBJECT_DIRECTORY_ATTRIBUTESaSUBJECT_INFORMATION_ACCESSaOID_SUBJECT_INFORMATION_ACCESSaSUBJECT_KEY_IDENTIFIERaOID_SUBJECT_KEY_IDENTIFIERaDSA_WITH_SHA1aOID_DSA_WITH_SHA1aDSA_WITH_SHA224aOID_DSA_WITH_SHA224aDSA_WITH_SHA256aOID_DSA_WITH_SHA256aECDSA_WITH_SHA1aOID_ECDSA_WITH_SHA1aECDSA_WITH_SHA224aOID_ECDSA_WITH_SHA224aECDSA_WITH_SHA256aOID_ECDSA_WITH_SHA256aECDSA_WITH_SHA384aOID_ECDSA_WITH_SHA384aECDSA_WITH_SHA512aOID_ECDSA_WITH_SHA512aRSA_WITH_MD5aOID_RSA_WITH_MD5aRSA_WITH_SHA1aOID_RSA_WITH_SHA1aRSA_WITH_SHA224aOID_RSA_WITH_SHA224aRSA_WITH_SHA256aOID_RSA_WITH_SHA256aRSA_WITH_SHA384aOID_RSA_WITH_SHA384aRSA_WITH_SHA512aOID_RSA_WITH_SHA512aRSASSA_PSSaOID_RSASSA_PSSaCOMMON_NAMEaOID_COMMON_NAMEaCOUNTRY_NAMEaOID_COUNTRY_NAMEaDOMAIN_COMPONENTaOID_DOMAIN_COMPONENTaDN_QUALIFIERaOID_DN_QUALIFIERaEMAIL_ADDRESSaOID_EMAIL_ADDRESSaGENERATION_QUALIFIERaOID_GENERATION_QUALIFIERaGIVEN_NAMEaOID_GIVEN_NAMEaLOCALITY_NAMEaOID_LOCALITY_NAMEaORGANIZATIONAL_UNIT_NAMEaOID_ORGANIZATIONAL_UNIT_NAMEaORGANIZATION_NAMEaOID_ORGANIZATION_NAMEaPSEUDONYMaOID_PSEUDONYMaSERIAL_NUMBERaOID_SERIAL_NUMBERaSTATE_OR_PROVINCE_NAMEaOID_STATE_OR_PROVINCE_NAMEaSURNAMEaOID_SURNAMEaTITLEaOID_TITLEaCLIENT_AUTHaOID_CLIENT_AUTHaCODE_SIGNINGaOID_CODE_SIGNINGaEMAIL_PROTECTIONaOID_EMAIL_PROTECTIONaOCSP_SIGNINGaOID_OCSP_SIGNINGaSERVER_AUTHaOID_SERVER_AUTHaTIME_STAMPINGaOID_TIME_STAMPINGaANY_POLICYaOID_ANY_POLICYaCPS_QUALIFIERaOID_CPS_QUALIFIERaCPS_USER_NOTICEaOID_CPS_USER_NOTICEaCERTIFICATE_ISSUERaOID_CERTIFICATE_ISSUERaCRL_REASONaOID_CRL_REASONaINVALIDITY_DATEaOID_INVALIDITY_DATEaCA_ISSUERSaOID_CA_ISSUERSaOCSPaOID_OCSPLJacertificate_transparencyaload_pem_x509_certificateaload_der_x509_certificateaload_pem_x509_csraload_der_x509_csraload_pem_x509_crlaload_der_x509_crlarandom_serial_numberaInvalidVersionaDeltaCRLIndicatoraDuplicateExtensionaExtensionNotFoundaUnsupportedGeneralNameTypeaNameAttributeaNameaRelativeDistinguishedNameaObjectIdentifieraExtensionTypeaExtensionsaExtensionaExtendedKeyUsageaFreshestCRLaIssuingDistributionPointaTLSFeatureaTLSFeatureTypeaOCSPNoCheckaBasicConstraintsaCRLNumberaKeyUsageaAuthorityInformationAccessaAccessDescriptionaCertificatePoliciesaPolicyInformationaUserNoticeaNoticeReferenceaSubjectKeyIdentifieraNameConstraintsaCRLDistributionPointsaDistributionPointaReasonFlagsaInhibitAnyPolicyaSubjectAlternativeNameaIssuerAlternativeNameaAuthorityKeyIdentifieraGeneralNamesaGeneralNameaRFC822NameaDNSNameaUniformResourceIdentifieraRegisteredIDaDirectoryNameaIPAddressaOtherNameaCertificateaCertificateRevocationListaCertificateRevocationListBuilderaCertificateSigningRequestaRevokedCertificateaRevokedCertificateBuilderaCertificateSigningRequestBuilderaCertificateBuilderaVersiona_SIG_OIDS_TO_HASHaOID_CA_ISSUERSaOID_OCSPa_GENERAL_NAMESaCertificateIssueraCRLReasonaInvalidityDateaUnrecognizedExtensionaPolicyConstraintsaPrecertificateSignedCertificateTimestampsaPrecertPoisonaOCSPNoncea__all__u<module cryptography.x509>u.cryptography.x509.extensions4O�aRSAPublicKeyapublic_bytesaserializationaEncodingaDERaPublicFormataPKCS1aEllipticCurvePublicKeyaX962aUncompressedPointaSubjectPublicKeyInfoaDERReaderaread_single_elementaSEQUENCEa__enter__a__exit__aread_elementaBIT_STRINGTnnnaalgorithmaOBJECT_IDENTIFIERais_emptyaread_any_elementapublic_keyaread_byteluInvalid public key encodingadataahashlibasha1adigestalen_methodu_make_sequence_methods.<locals>.len_methodaiter_methodu_make_sequence_methods.<locals>.iter_methodagetitem_methodu_make_sequence_methods.<locals>.getitem_methodafield_nameaDuplicateExtensiona__init__aoidaExtensionNotFounda_extensionsuNo {} extension was foundaUnrecognizedExtensionuUnrecognizedExtension can't be used with get_extension_for_class because more than one instance of the class may be present.avalueu<Extensions({})>asixainteger_typesucrl_number must be an integera_crl_numberaCRLNumberacrl_numberu<CRLNumber({})>uauthority_cert_issuer and authority_cert_serial_number must both be present or both Noneuauthority_cert_issuer must be a list of GeneralName objectsuauthority_cert_serial_number must be an integera_key_identifieraauthority_cert_issuera_authority_cert_issuera_authority_cert_serial_numberaGeneralNameu<genexpr>uAuthorityKeyIdentifier.__init__.<locals>.<genexpr>a_key_identifier_from_public_keyTakey_identifieraauthority_cert_issueraauthority_cert_serial_numberaSubjectKeyIdentifierawarningsawarnuExtension objects are deprecated as arguments to from_issuer_subject_key_identifier and support will be removed soon. Please migrate to passing a SubjectKeyIdentifier directly.autilsaDeprecatedIn27Dastacklevellu<AuthorityKeyIdentifier(key_identifier={0.key_identifier!r}, authority_cert_issuer={0.authority_cert_issuer}, authority_cert_serial_number={0.authority_cert_serial_number})>aAuthorityKeyIdentifierakey_identifieraauthority_cert_serial_numbera_digestu<SubjectKeyIdentifier(digest={0!r})>aconstant_timeabytes_equEvery item in the descriptions list must be an AccessDescriptiona_descriptionsaAccessDescriptionuAuthorityInformationAccess.__init__.<locals>.<genexpr>u<AuthorityInformationAccess({})>aAuthorityInformationAccessaObjectIdentifieruaccess_method must be an ObjectIdentifieruaccess_location must be a GeneralNamea_access_methoda_access_locationu<AccessDescription(access_method={0.access_method}, access_location={0.access_location})>aaccess_methodaaccess_locationuca must be a boolean valueupath_length must be None when ca is Falseupath_length must be a non-negative integer or Nonea_caa_path_lengthu<BasicConstraints(ca={0.ca}, path_length={0.path_length})>aBasicConstraintsacaapath_lengthaDeltaCRLIndicatoru<DeltaCRLIndicator(crl_number={0.crl_number})>udistribution_points must be a list of DistributionPoint objectsa_distribution_pointsaDistributionPointuCRLDistributionPoints.__init__.<locals>.<genexpr>u<CRLDistributionPoints({})>aCRLDistributionPointsuFreshestCRL.__init__.<locals>.<genexpr>u<FreshestCRL({})>aFreshestCRLuYou cannot provide both full_name and relative_name, at least one must be None.ufull_name must be a list of GeneralName objectsaRelativeDistinguishedNameurelative_name must be a RelativeDistinguishedNameucrl_issuer must be None or a list of general namesureasons must be None or frozenset of ReasonFlagsareasonsaReasonFlagsaunspecifiedaremove_from_crluunspecified and remove_from_crl are not valid reasons in a DistributionPointacrl_issuerafull_nameuYou must supply crl_issuer, full_name, or relative_name when reasons is not Nonea_full_namea_relative_namea_reasonsa_crl_issueruDistributionPoint.__init__.<locals>.<genexpr>u<DistributionPoint(full_name={0.full_name}, relative_name={0.relative_name}, reasons={0.reasons}, crl_issuer={0.crl_issuer})>arelative_nameurequire_explicit_policy must be a non-negative integer or Noneuinhibit_policy_mapping must be a non-negative integer or NoneuAt least one of require_explicit_policy and inhibit_policy_mapping must not be Nonea_require_explicit_policya_inhibit_policy_mappingu<PolicyConstraints(require_explicit_policy={0.require_explicit_policy}, inhibit_policy_mapping={0.inhibit_policy_mapping})>aPolicyConstraintsarequire_explicit_policyainhibit_policy_mappinguEvery item in the policies list must be a PolicyInformationa_policiesaPolicyInformationuCertificatePolicies.__init__.<locals>.<genexpr>u<CertificatePolicies({})>aCertificatePoliciesupolicy_identifier must be an ObjectIdentifiera_policy_identifierupolicy_qualifiers must be a list of strings and/or UserNotice objects or Noneapolicy_qualifiersa_policy_qualifiersatext_typeaUserNoticeuPolicyInformation.__init__.<locals>.<genexpr>u<PolicyInformation(policy_identifier={0.policy_identifier}, policy_qualifiers={0.policy_qualifiers})>apolicy_identifieraNoticeReferenceunotice_reference must be None or a NoticeReferencea_notice_referencea_explicit_textu<UserNotice(notice_reference={0.notice_reference}, explicit_text={0.explicit_text!r})>anotice_referenceaexplicit_texta_organizationunotice_numbers must be a list of integersa_notice_numbersuNoticeReference.__init__.<locals>.<genexpr>u<NoticeReference(organization={0.organization!r}, notice_numbers={0.notice_numbers})>aorganizationanotice_numbersuEvery item in the usages list must be an ObjectIdentifiera_usagesuExtendedKeyUsage.__init__.<locals>.<genexpr>u<ExtendedKeyUsage({})>aExtendedKeyUsageaOCSPNoCheckaPrecertPoisonufeatures must be a list of elements from the TLSFeatureType enuma_featuresaTLSFeatureTypeuTLSFeature.__init__.<locals>.<genexpr>u<TLSFeature(features={0._features})>aTLSFeatureuskip_certs must be an integeruskip_certs must be a non-negative integera_skip_certsu<InhibitAnyPolicy(skip_certs={0.skip_certs})>aInhibitAnyPolicyaskip_certsuencipher_only and decipher_only can only be true when key_agreement is truea_digital_signaturea_content_commitmenta_key_enciphermenta_data_enciphermenta_key_agreementa_key_cert_signa_crl_signa_encipher_onlya_decipher_onlyakey_agreementuencipher_only is undefined unless key_agreement is trueudecipher_only is undefined unless key_agreement is trueaencipher_onlyadecipher_onlyu<KeyUsage(digital_signature={0.digital_signature}, content_commitment={0.content_commitment}, key_encipherment={0.key_encipherment}, data_encipherment={0.data_encipherment}, key_agreement={0.key_agreement}, key_cert_sign={0.key_cert_sign}, crl_sign={0.crl_sign}, encipher_only={1}, decipher_only={2})>aKeyUsageadigital_signatureacontent_commitmentakey_enciphermentadata_enciphermentakey_cert_signacrl_signupermitted_subtrees must be a list of GeneralName objects or Nonea_validate_ip_nameuexcluded_subtrees must be a list of GeneralName objects or Noneaselfapermitted_subtreesaexcluded_subtreesuAt least one of permitted_subtrees and excluded_subtrees must not be Nonea_permitted_subtreesa_excluded_subtreesuNameConstraints.__init__.<locals>.<genexpr>aNameConstraintsuIPAddress name constraints must be an IPv4Network or IPv6Network objectaIPAddressaipaddressaIPv4NetworkaIPv6NetworkuNameConstraints._validate_ip_name.<locals>.<genexpr>u<NameConstraints(permitted_subtrees={0.permitted_subtrees}, excluded_subtrees={0.excluded_subtrees})>uoid argument must be an ObjectIdentifier instance.ucritical must be a boolean valuea_oida_criticala_valueu<Extension(oid={0.oid}, critical={0.critical}, value={0.value})>aExtensionacriticaluEvery item in the general_names list must be an object conforming to the GeneralName interfacea_general_namesuGeneralNames.__init__.<locals>.<genexpr>aOtherNameatypeuGeneralNames.get_values_for_type.<locals>.<genexpr>u<GeneralNames({})>aGeneralNamesaget_values_for_typeu<SubjectAlternativeName({})>aSubjectAlternativeNameu<IssuerAlternativeName({})>aIssuerAlternativeNameu<CertificateIssuer({})>aCertificateIssuerureason must be an element from ReasonFlagsa_reasonu<CRLReason(reason={})>aCRLReasonareasonadatetimeuinvalidity_date must be a datetime.datetimea_invalidity_dateu<InvalidityDate(invalidity_date={})>aInvalidityDateainvalidity_dateuEvery item in the signed_certificate_timestamps list must be a SignedCertificateTimestampa_signed_certificate_timestampsaSignedCertificateTimestampuPrecertificateSignedCertificateTimestamps.__init__.<locals>.<genexpr>u<PrecertificateSignedCertificateTimestamps({})>aPrecertificateSignedCertificateTimestampsunonce must be bytesa_nonceaOCSPNonceanonceu<OCSPNonce(nonce={0.nonce!r})>uonly_some_reasons must be None or frozenset of ReasonFlagsaonly_some_reasonsuunspecified and remove_from_crl are not valid reasons in an IssuingDistributionPointuonly_contains_user_certs, only_contains_ca_certs, indirect_crl and only_contains_attribute_certs must all be boolean.uOnly one of the following can be set to True: only_contains_user_certs, only_contains_ca_certs, indirect_crl, only_contains_attribute_certsuCannot create empty extension: if only_contains_user_certs, only_contains_ca_certs, indirect_crl, and only_contains_attribute_certs are all False, then either full_name, relative_name, or only_some_reasons must have a value.a_only_contains_user_certsa_only_contains_ca_certsa_indirect_crla_only_contains_attribute_certsa_only_some_reasonsuIssuingDistributionPoint.__init__.<locals>.<genexpr>u<IssuingDistributionPoint(full_name={0.full_name}, relative_name={0.relative_name}, only_contains_user_certs={0.only_contains_user_certs}, only_contains_ca_certs={0.only_contains_ca_certs}, only_some_reasons={0.only_some_reasons}, indirect_crl={0.indirect_crl}, only_contains_attribute_certs={0.only_contains_attribute_certs})>aIssuingDistributionPointaonly_contains_user_certsaonly_contains_ca_certsaindirect_crlaonly_contains_attribute_certsuoid must be an ObjectIdentifieru<UnrecognizedExtension(oid={0.oid}, value={0.value!r})>a__doc__u/usr/lib/python3/dist-packages/cryptography/x509/extensions.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionaabcaenumTaEnumaEnumacryptographyTautilsucryptography.hazmat._derTaBIT_STRINGaDERReaderaOBJECT_IDENTIFIERaSEQUENCEucryptography.hazmat.primitivesTaconstant_timeaserializationucryptography.hazmat.primitives.asymmetric.ecTaEllipticCurvePublicKeyucryptography.hazmat.primitives.asymmetric.rsaTaRSAPublicKeyucryptography.x509.certificate_transparencyTaSignedCertificateTimestampucryptography.x509.general_nameTaGeneralNameaIPAddressaOtherNameucryptography.x509.nameTaRelativeDistinguishedNameucryptography.x509.oidTaCRLEntryExtensionOIDaExtensionOIDaOCSPExtensionOIDaObjectIdentifieraCRLEntryExtensionOIDaExtensionOIDaOCSPExtensionOIDa_make_sequence_methodsTEExceptionametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucryptography.x509.extensionsa__module__a__qualname__uDuplicateExtension.__init__a__orig_bases__uExtensionNotFound.__init__TOobjectaExtensionTypeaadd_metaclassaABCMetaaabstractpropertyu
        Returns the oid associated with the given extension type.
        uExtensionType.oidaExtensionsuExtensions.__init__aget_extension_for_oiduExtensions.get_extension_for_oidaget_extension_for_classuExtensions.get_extension_for_classTa_extensionsutoo many values to unpack (expected 3)a__len__a__iter__a__repr__uExtensions.__repr__aregister_interfaceaCRL_NUMBERuCRLNumber.__init__a__eq__uCRLNumber.__eq__a__ne__uCRLNumber.__ne__a__hash__uCRLNumber.__hash__uCRLNumber.__repr__aread_only_propertyTa_crl_numberaAUTHORITY_KEY_IDENTIFIERuAuthorityKeyIdentifier.__init__aclassmethodafrom_issuer_public_keyuAuthorityKeyIdentifier.from_issuer_public_keyafrom_issuer_subject_key_identifieruAuthorityKeyIdentifier.from_issuer_subject_key_identifieruAuthorityKeyIdentifier.__repr__uAuthorityKeyIdentifier.__eq__uAuthorityKeyIdentifier.__ne__uAuthorityKeyIdentifier.__hash__Ta_key_identifierTa_authority_cert_issuerTa_authority_cert_serial_numberaSUBJECT_KEY_IDENTIFIERuSubjectKeyIdentifier.__init__afrom_public_keyuSubjectKeyIdentifier.from_public_keyTa_digestuSubjectKeyIdentifier.__repr__uSubjectKeyIdentifier.__eq__uSubjectKeyIdentifier.__ne__uSubjectKeyIdentifier.__hash__aAUTHORITY_INFORMATION_ACCESSuAuthorityInformationAccess.__init__Ta_descriptionsuAuthorityInformationAccess.__repr__uAuthorityInformationAccess.__eq__uAuthorityInformationAccess.__ne__uAuthorityInformationAccess.__hash__uAccessDescription.__init__uAccessDescription.__repr__uAccessDescription.__eq__uAccessDescription.__ne__uAccessDescription.__hash__Ta_access_methodTa_access_locationaBASIC_CONSTRAINTSuBasicConstraints.__init__Ta_caTa_path_lengthuBasicConstraints.__repr__uBasicConstraints.__eq__uBasicConstraints.__ne__uBasicConstraints.__hash__aDELTA_CRL_INDICATORuDeltaCRLIndicator.__init__uDeltaCRLIndicator.__eq__uDeltaCRLIndicator.__ne__uDeltaCRLIndicator.__hash__uDeltaCRLIndicator.__repr__aCRL_DISTRIBUTION_POINTSuCRLDistributionPoints.__init__Ta_distribution_pointsuCRLDistributionPoints.__repr__uCRLDistributionPoints.__eq__uCRLDistributionPoints.__ne__uCRLDistributionPoints.__hash__aFRESHEST_CRLuFreshestCRL.__init__uFreshestCRL.__repr__uFreshestCRL.__eq__uFreshestCRL.__ne__uFreshestCRL.__hash__uDistributionPoint.__init__uDistributionPoint.__repr__uDistributionPoint.__eq__uDistributionPoint.__ne__uDistributionPoint.__hash__Ta_full_nameTa_relative_nameTa_reasonsTa_crl_issuerakeyCompromiseakey_compromiseacACompromiseaca_compromiseaaffiliationChangedaaffiliation_changedasupersededacessationOfOperationacessation_of_operationacertificateHoldacertificate_holdaprivilegeWithdrawnaprivilege_withdrawnaaACompromiseaaa_compromisearemoveFromCRLaPOLICY_CONSTRAINTSuPolicyConstraints.__init__uPolicyConstraints.__repr__uPolicyConstraints.__eq__uPolicyConstraints.__ne__uPolicyConstraints.__hash__Ta_require_explicit_policyTa_inhibit_policy_mappingaCERTIFICATE_POLICIESuCertificatePolicies.__init__Ta_policiesuCertificatePolicies.__repr__uCertificatePolicies.__eq__uCertificatePolicies.__ne__uCertificatePolicies.__hash__uPolicyInformation.__init__uPolicyInformation.__repr__uPolicyInformation.__eq__uPolicyInformation.__ne__uPolicyInformation.__hash__Ta_policy_identifierTa_policy_qualifiersuUserNotice.__init__uUserNotice.__repr__uUserNotice.__eq__uUserNotice.__ne__uUserNotice.__hash__Ta_notice_referenceTa_explicit_textuNoticeReference.__init__uNoticeReference.__repr__uNoticeReference.__eq__uNoticeReference.__ne__uNoticeReference.__hash__Ta_organizationTa_notice_numbersaEXTENDED_KEY_USAGEuExtendedKeyUsage.__init__Ta_usagesuExtendedKeyUsage.__repr__uExtendedKeyUsage.__eq__uExtendedKeyUsage.__ne__uExtendedKeyUsage.__hash__aOCSP_NO_CHECKuOCSPNoCheck.__eq__uOCSPNoCheck.__ne__uOCSPNoCheck.__hash__u<OCSPNoCheck()>uOCSPNoCheck.__repr__aPRECERT_POISONuPrecertPoison.__eq__uPrecertPoison.__ne__uPrecertPoison.__hash__u<PrecertPoison()>uPrecertPoison.__repr__aTLS_FEATUREuTLSFeature.__init__Ta_featuresuTLSFeature.__repr__uTLSFeature.__eq__uTLSFeature.__ne__uTLSFeature.__hash__lastatus_requestlastatus_request_v2a_TLS_FEATURE_TYPE_TO_ENUMaINHIBIT_ANY_POLICYuInhibitAnyPolicy.__init__uInhibitAnyPolicy.__repr__uInhibitAnyPolicy.__eq__uInhibitAnyPolicy.__ne__uInhibitAnyPolicy.__hash__Ta_skip_certsaKEY_USAGEuKeyUsage.__init__Ta_digital_signatureTa_content_commitmentTa_key_enciphermentTa_data_enciphermentTa_key_agreementTa_key_cert_signTa_crl_signapropertyuKeyUsage.encipher_onlyuKeyUsage.decipher_onlyuKeyUsage.__repr__uKeyUsage.__eq__uKeyUsage.__ne__uKeyUsage.__hash__aNAME_CONSTRAINTSuNameConstraints.__init__uNameConstraints.__eq__uNameConstraints.__ne__uNameConstraints._validate_ip_nameuNameConstraints.__repr__uNameConstraints.__hash__Ta_permitted_subtreesTa_excluded_subtreesuExtension.__init__Ta_oidTa_criticalTa_valueuExtension.__repr__uExtension.__eq__uExtension.__ne__uExtension.__hash__uGeneralNames.__init__Ta_general_namesuGeneralNames.get_values_for_typeuGeneralNames.__repr__uGeneralNames.__eq__uGeneralNames.__ne__uGeneralNames.__hash__aSUBJECT_ALTERNATIVE_NAMEuSubjectAlternativeName.__init__uSubjectAlternativeName.get_values_for_typeuSubjectAlternativeName.__repr__uSubjectAlternativeName.__eq__uSubjectAlternativeName.__ne__uSubjectAlternativeName.__hash__aISSUER_ALTERNATIVE_NAMEuIssuerAlternativeName.__init__uIssuerAlternativeName.get_values_for_typeuIssuerAlternativeName.__repr__uIssuerAlternativeName.__eq__uIssuerAlternativeName.__ne__uIssuerAlternativeName.__hash__aCERTIFICATE_ISSUERuCertificateIssuer.__init__uCertificateIssuer.get_values_for_typeuCertificateIssuer.__repr__uCertificateIssuer.__eq__uCertificateIssuer.__ne__uCertificateIssuer.__hash__aCRL_REASONuCRLReason.__init__uCRLReason.__repr__uCRLReason.__eq__uCRLReason.__ne__uCRLReason.__hash__Ta_reasonaINVALIDITY_DATEuInvalidityDate.__init__uInvalidityDate.__repr__uInvalidityDate.__eq__uInvalidityDate.__ne__uInvalidityDate.__hash__Ta_invalidity_dateaPRECERT_SIGNED_CERTIFICATE_TIMESTAMPSuPrecertificateSignedCertificateTimestamps.__init__Ta_signed_certificate_timestampsuPrecertificateSignedCertificateTimestamps.__repr__uPrecertificateSignedCertificateTimestamps.__hash__uPrecertificateSignedCertificateTimestamps.__eq__uPrecertificateSignedCertificateTimestamps.__ne__aNONCEuOCSPNonce.__init__uOCSPNonce.__eq__uOCSPNonce.__ne__uOCSPNonce.__hash__uOCSPNonce.__repr__Ta_nonceaISSUING_DISTRIBUTION_POINTuIssuingDistributionPoint.__init__uIssuingDistributionPoint.__repr__uIssuingDistributionPoint.__eq__uIssuingDistributionPoint.__ne__uIssuingDistributionPoint.__hash__Ta_only_contains_user_certsTa_only_contains_ca_certsTa_only_some_reasonsTa_indirect_crlTa_only_contains_attribute_certsuUnrecognizedExtension.__init__uUnrecognizedExtension.__repr__uUnrecognizedExtension.__eq__uUnrecognizedExtension.__ne__uUnrecognizedExtension.__hash__Ta.0wiTa.0wiatypeTa.0anameTa.0asctTa.0wxu<listcomp>Twxu<module cryptography.x509.extensions>Ta__class__TaselfaotherTaselfTaselfaaciTaselfafnacrl_issuerTaselfapqTaselfapsaesTaselfaaccess_methodaaccess_locationTaselfacaapath_lengthTaselfacrl_numberTaselfadescriptionsTaselfadigestT
aselfadigital_signatureacontent_commitmentakey_enciphermentadata_enciphermentakey_agreementakey_cert_signacrl_signaencipher_onlyadecipher_onlyTaselfadistribution_pointsTaselfaextensionsTaselfafeaturesT	aselfafull_namearelative_nameaonly_contains_user_certsaonly_contains_ca_certsaonly_some_reasonsaindirect_crlaonly_contains_attribute_certsacrl_constraintsTaselfafull_namearelative_nameareasonsacrl_issuerTaselfageneral_namesTaselfainvalidity_dateTaselfakey_identifieraauthority_cert_issueraauthority_cert_serial_numberTaselfamsgaoida__class__TaselfanonceTaselfanotice_referenceaexplicit_textTaselfaoidacriticalavalueTaselfaoidavalueTaselfaorganizationanotice_numbersTaselfapermitted_subtreesaexcluded_subtreesTaselfapoliciesTaselfapolicy_identifierapolicy_qualifiersTaselfareasonTaselfarequire_explicit_policyainhibit_policy_mappingTaselfasigned_certificate_timestampsTaselfaskip_certsTaselfausagesTaselfaencipher_onlyadecipher_onlyTapublic_keyadataaserializedareaderapublic_key_infoaalgorithmTafield_namealen_methodaiter_methodagetitem_methodTaselfatreeTaclsapublic_keyadigestTaclsaskiadigestTaclsapublic_keyTaselfaextclassaextTaselfaoidaextTaselfatypeTaselfatypeaobjsTaselfaidxafield_nameTafield_nameTaselfafield_nameu.cryptography.x509.general_name��aidnaluidna is not installed, but a deprecated feature that requires it was used. See: https://cryptography.io/en/latest/faq/#importerror-idna-is-not-installedaUnsupportedGeneralNameTypea__init__atypeasixatext_typeaencodeTaasciia_idna_encodeawarningsawarnuRFC822Name values should be passed as an A-label string. This means unicode characters should be encoded via idna. Support for passing unicode strings (aka U-label) will be removed in a future version.autilsaPersistentlyDeprecated2017Dastacklevelluvalue must be stringaparseaddravalueutoo many values to unpack (expected 2)uInvalid rfc822name valueaselfa_valuea__new__a_lazy_import_idnaasplitTw@w@ladecodeu<RFC822Name(value={0!r})>aRFC822NameTu*.w.astartswithuDNSName values should be passed as an A-label string. This means unicode characters should be encoded via idna. Support for passing unicode strings (aka U-label) will be removed in a future version.u<DNSName(value={0!r})>aDNSNameuURI values should be passed as an A-label string. This means unicode characters should be encoded via idna. Support for passing unicode strings (aka U-label)  will be removed in a future version.aurllib_parseaurlparseaportahostnameu:{}aasciiaurlunparseaschemeapathaparamsaqueryafragmentu<UniformResourceIdentifier(value={0!r})>aUniformResourceIdentifieraNameuvalue must be a Nameu<DirectoryName(value={})>aDirectoryNameaObjectIdentifieruvalue must be an ObjectIdentifieru<RegisteredID(value={})>aRegisteredIDaipaddressaIPv4AddressaIPv6AddressaIPv4NetworkaIPv6Networkuvalue must be an instance of ipaddress.IPv4Address, ipaddress.IPv6Address, ipaddress.IPv4Network, or ipaddress.IPv6Networku<IPAddress(value={})>aIPAddressutype_id must be an ObjectIdentifieruvalue must be a binary stringa_type_idu<OtherName(type_id={}, value={!r})>atype_idaOtherNamea__doc__u/usr/lib/python3/dist-packages/cryptography/x509/general_name.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionaabcuemail.utilsTaparseaddrusix.movesTaurllib_parseacryptographyTautilsucryptography.x509.nameTaNameucryptography.x509.oidTaObjectIdentifierD	lllllllllaotherNamearfc822NameadNSNameax400AddressadirectoryNameaediPartyNameauniformResourceIdentifieraiPAddressaregisteredIDa_GENERAL_NAMESTEExceptionametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucryptography.x509.general_namea__module__a__qualname__uUnsupportedGeneralNameType.__init__a__orig_bases__TOobjectaGeneralNameaadd_metaclassaABCMetaaabstractpropertyu
        Return the value of the object
        uGeneralName.valuearegister_interfaceuRFC822Name.__init__aread_only_propertyTa_valueaclassmethoda_init_without_validationuRFC822Name._init_without_validationuRFC822Name._idna_encodea__repr__uRFC822Name.__repr__a__eq__uRFC822Name.__eq__a__ne__uRFC822Name.__ne__a__hash__uRFC822Name.__hash__uDNSName.__init__uDNSName._init_without_validationuDNSName.__repr__uDNSName.__eq__uDNSName.__ne__uDNSName.__hash__uUniformResourceIdentifier.__init__uUniformResourceIdentifier._init_without_validationuUniformResourceIdentifier._idna_encodeuUniformResourceIdentifier.__repr__uUniformResourceIdentifier.__eq__uUniformResourceIdentifier.__ne__uUniformResourceIdentifier.__hash__uDirectoryName.__init__uDirectoryName.__repr__uDirectoryName.__eq__uDirectoryName.__ne__uDirectoryName.__hash__uRegisteredID.__init__uRegisteredID.__repr__uRegisteredID.__eq__uRegisteredID.__ne__uRegisteredID.__hash__uIPAddress.__init__uIPAddress.__repr__uIPAddress.__eq__uIPAddress.__ne__uIPAddress.__hash__uOtherName.__init__Ta_type_iduOtherName.__repr__uOtherName.__eq__uOtherName.__ne__uOtherName.__hash__u<module cryptography.x509.general_name>Ta__class__TaselfaotherTaselfTaselfamsgatypea__class__Taselfatype_idavalueTaselfavalueTaselfavalueanameaaddressTaselfavalueaidnaw_aaddressapartsTaselfavalueaidnaaparsedanetlocTavalueaidnaaprefixTaclsavalueainstanceTaidnau.cryptography.x509.name�avalueu<genexpr>areplaceTw\u\\Tw"u\"Tw+u\+Tw,u\,Tw;u\;Tw<u\<Tw>u\>Twu\00lTw#w w\l��������w :nl��������nu\ uEscape special characters in RFC4514 Distinguished Name value.aObjectIdentifieruoid argument must be an ObjectIdentifier instance.asixatext_typeuvalue argument must be a text type.aNameOIDaCOUNTRY_NAMEaJURISDICTION_COUNTRY_NAMEaencodeTautf8uCountry name must be a 2 character country codeuValue cannot be an empty stringa_SENTINELa_NAMEOID_DEFAULT_TYPEageta_ASN1TypeaUTF8Stringu_type must be from the _ASN1Type enumaoida_oida_valuea_typea_NAMEOID_TO_NAMEadotted_stringu%s=%sa_escape_dn_valueu
        Format as RFC4514 Distinguished Name string.

        Use short attribute name if available, otherwise fall back to OID
        dotted string.
        aNameAttributeu<NameAttribute(oid={0.oid}, value={0.value!r})>ua relative distinguished name cannot be emptyuattributes must be an iterable of NameAttributea_attributesa_attribute_setuduplicate attributes are not alloweduRelativeDistinguishedName.__init__.<locals>.<genexpr>w+u
        Format as RFC4514 Distinguished Name string.

        Within each RDN, attributes are joined by '+', although that is rarely
        used in certificates.
        arfc4514_stringuRelativeDistinguishedName.rfc4514_string.<locals>.<genexpr>aRelativeDistinguishedNameu<RelativeDistinguishedName({})>uattributes must be a list of NameAttribute or a list RelativeDistinguishedNameuName.__init__.<locals>.<genexpr>w,u
        Format as RFC4514 Distinguished Name string.
        For example 'CN=foobar.com,O=Foo Corp,C=US'

        An X.509 name is a two-level structure: a list of sets of attributes.
        Each list element is separated by ',' and within each list element, set
        elements are separated by '+'. The latter is almost never used in
        real world certificates.
        uName.rfc4514_string.<locals>.<genexpr>ax509_name_bytesaNameaselfa__iter__uName.__iter__uName.__len__.<locals>.<genexpr>aPY2u<Name({})>a__doc__u/usr/lib/python3/dist-packages/cryptography/x509/name.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionaenumTaEnumaEnumacryptographyTautilsautilsucryptography.x509.oidTaNameOIDaObjectIdentifierametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucryptography.x509.namea__module__a__qualname__llaNumericStringlaPrintableStringlaT61StringlaIA5StringlaUTCTimelaGeneralizedTimelaVisibleStringlaUniversalStringlaBMPStringa__orig_bases__a_ASN1_TYPE_TO_ENUMaSERIAL_NUMBERaDN_QUALIFIERaEMAIL_ADDRESSaDOMAIN_COMPONENTaCOMMON_NAMEaCNaLOCALITY_NAMEwLaSTATE_OR_PROVINCE_NAMEaSTaORGANIZATION_NAMEwOaORGANIZATIONAL_UNIT_NAMEaOUwCaSTREET_ADDRESSaSTREETaDCaUSER_IDaUIDTOobjecta__init__uNameAttribute.__init__aread_only_propertyTa_oidTa_valueuNameAttribute.rfc4514_stringa__eq__uNameAttribute.__eq__a__ne__uNameAttribute.__ne__a__hash__uNameAttribute.__hash__a__repr__uNameAttribute.__repr__uRelativeDistinguishedName.__init__aget_attributes_for_oiduRelativeDistinguishedName.get_attributes_for_oiduRelativeDistinguishedName.rfc4514_stringuRelativeDistinguishedName.__eq__uRelativeDistinguishedName.__ne__uRelativeDistinguishedName.__hash__uRelativeDistinguishedName.__iter__a__len__uRelativeDistinguishedName.__len__uRelativeDistinguishedName.__repr__uName.__init__uName.rfc4514_stringuName.get_attributes_for_oidapropertyardnsuName.rdnsapublic_bytesuName.public_bytesuName.__eq__uName.__ne__uName.__hash__uName.__len__uName.__repr__Ta.0aattrTa.0wiTa.0ardnTa.0wxu<listcomp>TwiaoidTwxu<module cryptography.x509.name>Ta__class__TaselfaotherTaselfTaselfaattributesTaselfaoidavaluea_typeTaselfardnaavaTavalTaselfaoidTaselfabackendTaselfakeyu.cryptography.x509.ocsps�avalueu<genexpr>a_ALLOWED_HASHESuAlgorithm must be SHA1, SHA224, SHA256, SHA384, or SHA512ucryptography.hazmat.backends.openssl.backendTabackendlabackendaload_der_ocsp_requestaload_der_ocsp_responsea_requesta_extensionsuOnly one certificate can be added to a requesta_verify_algorithmax509aCertificateucert and issuer must be a CertificateaOCSPRequestBuilderaExtensionTypeuextension must be an ExtensionTypeaExtensionaoida_reject_duplicate_extensionuYou must add a certificate before buildingacreate_ocsp_requestadatetimeuthis_update must be a datetime objectunext_update must be a datetime object or Nonea_certa_issuera_algorithma_this_updatea_next_updateaOCSPCertStatusucert_status must be an item from the OCSPCertStatus enumaREVOKEDurevocation_time can only be provided if the certificate is revokedurevocation_reason can only be provided if the certificate is revokedurevocation_time must be a datetime objecta_convert_to_naive_utc_timea_EARLIEST_UTC_TIMEuThe revocation_time must be on or after 1950 January 1.aReasonFlagsurevocation_reason must be an item from the ReasonFlags enum or Nonea_cert_statusa_revocation_timea_revocation_reasona_responsea_responder_ida_certsuOnly one response per OCSPResponse.a_SingleResponseaOCSPResponseBuilderuresponder_id can only be set onceuresponder_cert must be a CertificateaOCSPResponderEncodinguencoding must be an element from OCSPResponderEncodingucertificates may only be set onceucerts must not be an empty listucerts must be a list of CertificatesuOCSPResponseBuilder.certificates.<locals>.<genexpr>uYou must add a response before signinguYou must add a responder_id before signingaed25519aEd25519PrivateKeyaed448aEd448PrivateKeyualgorithm must be None when signing via ed25519 or ed448ahashesaHashAlgorithmuAlgorithm must be a registered hash algorithm.acreate_ocsp_responseaOCSPResponseStatusaSUCCESSFULuresponse_status must be an item from OCSPResponseStatusuresponse_status cannot be SUCCESSFULa__doc__u/usr/lib/python3/dist-packages/cryptography/x509/ocsp.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionaabcaenumTaEnumaEnumasixacryptographyTax509ucryptography.hazmat.primitivesTahashesucryptography.hazmat.primitives.asymmetricTaed25519aed448ucryptography.x509.baseTa_EARLIEST_UTC_TIMEa_convert_to_naive_utc_timea_reject_duplicate_extensionu1.3.14.3.2.26aSHA1u2.16.840.1.101.3.4.2.4aSHA224u2.16.840.1.101.3.4.2.1aSHA256u2.16.840.1.101.3.4.2.2aSHA384u2.16.840.1.101.3.4.2.3aSHA512a_OIDS_TO_HASHametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucryptography.x509.ocspa__module__a__qualname__uBy HashaHASHuBy NameaNAMEa__orig_bases__laMALFORMED_REQUESTlaINTERNAL_ERRORlaTRY_LATERlaSIG_REQUIREDlaUNAUTHORIZEDa_RESPONSE_STATUS_TO_ENUMaGOODaUNKNOWNa_CERT_STATUS_TO_ENUMTOobjecta__init__uOCSPRequestBuilder.__init__aadd_certificateuOCSPRequestBuilder.add_certificateaadd_extensionuOCSPRequestBuilder.add_extensionabuilduOCSPRequestBuilder.buildu_SingleResponse.__init__uOCSPResponseBuilder.__init__aadd_responseuOCSPResponseBuilder.add_responsearesponder_iduOCSPResponseBuilder.responder_idacertificatesuOCSPResponseBuilder.certificatesuOCSPResponseBuilder.add_extensionasignuOCSPResponseBuilder.signaclassmethodabuild_unsuccessfuluOCSPResponseBuilder.build_unsuccessfulaOCSPRequestaadd_metaclassaABCMetaaabstractpropertyu
        The hash of the issuer public key
        aissuer_key_hashuOCSPRequest.issuer_key_hashu
        The hash of the issuer name
        aissuer_name_hashuOCSPRequest.issuer_name_hashu
        The hash algorithm used in the issuer name and key hashes
        ahash_algorithmuOCSPRequest.hash_algorithmu
        The serial number of the cert whose status is being checked
        aserial_numberuOCSPRequest.serial_numberaabstractmethodu
        Serializes the request to DER
        apublic_bytesuOCSPRequest.public_bytesu
        The list of request extensions. Not single request extensions.
        aextensionsuOCSPRequest.extensionsaOCSPResponseu
        The status of the response. This is a value from the OCSPResponseStatus
        enumeration
        aresponse_statusuOCSPResponse.response_statusu
        The ObjectIdentifier of the signature algorithm
        asignature_algorithm_oiduOCSPResponse.signature_algorithm_oidu
        Returns a HashAlgorithm corresponding to the type of the digest signed
        asignature_hash_algorithmuOCSPResponse.signature_hash_algorithmu
        The signature bytes
        asignatureuOCSPResponse.signatureu
        The tbsResponseData bytes
        atbs_response_bytesuOCSPResponse.tbs_response_bytesu
        A list of certificates used to help build a chain to verify the OCSP
        response. This situation occurs when the OCSP responder uses a delegate
        certificate.
        uOCSPResponse.certificatesu
        The responder's key hash or None
        aresponder_key_hashuOCSPResponse.responder_key_hashu
        The responder's Name or None
        aresponder_nameuOCSPResponse.responder_nameu
        The time the response was produced
        aproduced_atuOCSPResponse.produced_atu
        The status of the certificate (an element from the OCSPCertStatus enum)
        acertificate_statusuOCSPResponse.certificate_statusu
        The date of when the certificate was revoked or None if not
        revoked.
        arevocation_timeuOCSPResponse.revocation_timeu
        The reason the certificate was revoked or None if not specified or
        not revoked.
        arevocation_reasonuOCSPResponse.revocation_reasonu
        The most recent time at which the status being indicated is known by
        the responder to have been correct
        athis_updateuOCSPResponse.this_updateu
        The time when newer information will be available
        anext_updateuOCSPResponse.next_updateuOCSPResponse.issuer_key_hashuOCSPResponse.issuer_name_hashuOCSPResponse.hash_algorithmuOCSPResponse.serial_numberu
        The list of response extensions. Not single response extensions.
        uOCSPResponse.extensionsTa.0wxu<module cryptography.x509.ocsp>Ta__class__T	aselfacertaissueraalgorithmacert_statusathis_updateanext_updatearevocation_timearevocation_reasonTaselfarequestaextensionsTaselfaresponsearesponder_idacertsaextensionsTaalgorithmTaselfacertaissueraalgorithmTaselfaextensionacriticalT
aselfacertaissueraalgorithmacert_statusathis_updateanext_updatearevocation_timearevocation_reasonasinglerespTaselfabackendTaclsaresponse_statusabackendTaselfTaselfacertsTadataabackendTaselfaencodingTaselfaencodingaresponder_certTaselfaprivate_keyaalgorithmabackendu.cryptography.x509.oid�!a__doc__u/usr/lib/python3/dist-packages/cryptography/x509/oid.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importadivisionaprint_functionucryptography.hazmat._oidTaObjectIdentifierlaObjectIdentifierucryptography.hazmat.primitivesTahashesahashesTOobjectametaclassa__prepare__aExtensionOIDa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ucryptography.x509.oida__module__a__qualname__Tu2.5.29.9aSUBJECT_DIRECTORY_ATTRIBUTESTu2.5.29.14aSUBJECT_KEY_IDENTIFIERTu2.5.29.15aKEY_USAGETu2.5.29.17aSUBJECT_ALTERNATIVE_NAMETu2.5.29.18aISSUER_ALTERNATIVE_NAMETu2.5.29.19aBASIC_CONSTRAINTSTu2.5.29.30aNAME_CONSTRAINTSTu2.5.29.31aCRL_DISTRIBUTION_POINTSTu2.5.29.32aCERTIFICATE_POLICIESTu2.5.29.33aPOLICY_MAPPINGSTu2.5.29.35aAUTHORITY_KEY_IDENTIFIERTu2.5.29.36aPOLICY_CONSTRAINTSTu2.5.29.37aEXTENDED_KEY_USAGETu2.5.29.46aFRESHEST_CRLTu2.5.29.54aINHIBIT_ANY_POLICYTu2.5.29.28aISSUING_DISTRIBUTION_POINTTu1.3.6.1.5.5.7.1.1aAUTHORITY_INFORMATION_ACCESSTu1.3.6.1.5.5.7.1.11aSUBJECT_INFORMATION_ACCESSTu1.3.6.1.5.5.7.48.1.5aOCSP_NO_CHECKTu1.3.6.1.5.5.7.1.24aTLS_FEATURETu2.5.29.20aCRL_NUMBERTu2.5.29.27aDELTA_CRL_INDICATORTu1.3.6.1.4.1.11129.2.4.2aPRECERT_SIGNED_CERTIFICATE_TIMESTAMPSTu1.3.6.1.4.1.11129.2.4.3aPRECERT_POISONa__orig_bases__aOCSPExtensionOIDTu1.3.6.1.5.5.7.48.1.2aNONCEaCRLEntryExtensionOIDTu2.5.29.29aCERTIFICATE_ISSUERTu2.5.29.21aCRL_REASONTu2.5.29.24aINVALIDITY_DATEaNameOIDTu2.5.4.3aCOMMON_NAMETu2.5.4.6aCOUNTRY_NAMETu2.5.4.7aLOCALITY_NAMETu2.5.4.8aSTATE_OR_PROVINCE_NAMETu2.5.4.9aSTREET_ADDRESSTu2.5.4.10aORGANIZATION_NAMETu2.5.4.11aORGANIZATIONAL_UNIT_NAMETu2.5.4.5aSERIAL_NUMBERTu2.5.4.4aSURNAMETu2.5.4.42aGIVEN_NAMETu2.5.4.12aTITLETu2.5.4.44aGENERATION_QUALIFIERTu2.5.4.45aX500_UNIQUE_IDENTIFIERTu2.5.4.46aDN_QUALIFIERTu2.5.4.65aPSEUDONYMTu0.9.2342.19200300.100.1.1aUSER_IDTu0.9.2342.19200300.100.1.25aDOMAIN_COMPONENTTu1.2.840.113549.1.9.1aEMAIL_ADDRESSTu1.3.6.1.4.1.311.60.2.1.3aJURISDICTION_COUNTRY_NAMETu1.3.6.1.4.1.311.60.2.1.1aJURISDICTION_LOCALITY_NAMETu1.3.6.1.4.1.311.60.2.1.2aJURISDICTION_STATE_OR_PROVINCE_NAMETu2.5.4.15aBUSINESS_CATEGORYTu2.5.4.16aPOSTAL_ADDRESSTu2.5.4.17aPOSTAL_CODEaSignatureAlgorithmOIDTu1.2.840.113549.1.1.4aRSA_WITH_MD5Tu1.2.840.113549.1.1.5aRSA_WITH_SHA1Tu1.3.14.3.2.29a_RSA_WITH_SHA1Tu1.2.840.113549.1.1.14aRSA_WITH_SHA224Tu1.2.840.113549.1.1.11aRSA_WITH_SHA256Tu1.2.840.113549.1.1.12aRSA_WITH_SHA384Tu1.2.840.113549.1.1.13aRSA_WITH_SHA512Tu1.2.840.113549.1.1.10aRSASSA_PSSTu1.2.840.10045.4.1aECDSA_WITH_SHA1Tu1.2.840.10045.4.3.1aECDSA_WITH_SHA224Tu1.2.840.10045.4.3.2aECDSA_WITH_SHA256Tu1.2.840.10045.4.3.3aECDSA_WITH_SHA384Tu1.2.840.10045.4.3.4aECDSA_WITH_SHA512Tu1.2.840.10040.4.3aDSA_WITH_SHA1Tu2.16.840.1.101.3.4.3.1aDSA_WITH_SHA224Tu2.16.840.1.101.3.4.3.2aDSA_WITH_SHA256Tu1.3.101.112aED25519Tu1.3.101.113aED448aMD5aSHA1aSHA224aSHA256aSHA384aSHA512a_SIG_OIDS_TO_HASHaExtendedKeyUsageOIDTu1.3.6.1.5.5.7.3.1aSERVER_AUTHTu1.3.6.1.5.5.7.3.2aCLIENT_AUTHTu1.3.6.1.5.5.7.3.3aCODE_SIGNINGTu1.3.6.1.5.5.7.3.4aEMAIL_PROTECTIONTu1.3.6.1.5.5.7.3.8aTIME_STAMPINGTu1.3.6.1.5.5.7.3.9aOCSP_SIGNINGTu2.5.29.37.0aANY_EXTENDED_KEY_USAGEaAuthorityInformationAccessOIDTu1.3.6.1.5.5.7.48.2aCA_ISSUERSTu1.3.6.1.5.5.7.48.1aOCSPaCertificatePoliciesOIDTu1.3.6.1.5.5.7.2.1aCPS_QUALIFIERTu1.3.6.1.5.5.7.2.2aCPS_USER_NOTICETu2.5.29.32.0aANY_POLICYacommonNameacountryNamealocalityNameastateOrProvinceNameastreetAddressaorganizationNameaorganizationalUnitNameaserialNumberasurnameagivenNameatitleagenerationQualifierax500UniqueIdentifieradnQualifierapseudonymauserIDadomainComponentaemailAddressajurisdictionCountryNameajurisdictionLocalityNameajurisdictionStateOrProvinceNameabusinessCategoryapostalAddressapostalCodeamd5WithRSAEncryptionasha1WithRSAEncryptionasha224WithRSAEncryptionasha256WithRSAEncryptionasha384WithRSAEncryptionasha512WithRSAEncryptionuRSASSA-PSSuecdsa-with-SHA1uecdsa-with-SHA224uecdsa-with-SHA256uecdsa-with-SHA384uecdsa-with-SHA512udsa-with-sha1udsa-with-sha224udsa-with-sha256aed25519aed448aserverAuthaclientAuthacodeSigningaemailProtectionatimeStampingaOCSPSigningasubjectDirectoryAttributesasubjectKeyIdentifierakeyUsageasubjectAltNameaissuerAltNameabasicConstraintsasignedCertificateTimestampListactPoisonacRLReasonainvalidityDateacertificateIssueranameConstraintsacRLDistributionPointsacertificatePoliciesapolicyMappingsaauthorityKeyIdentifierapolicyConstraintsaextendedKeyUsageafreshestCRLainhibitAnyPolicyaissuingDistributionPointaauthorityInfoAccessasubjectInfoAccessaOCSPNoCheckacRLNumberadeltaCRLIndicatoraTLSFeatureacaIssuersuid-qt-cpsuid-qt-unoticeaOCSPNoncea_OID_NAMESu<module cryptography.x509.oid>Ta__class__u.distro�m2a_distroalinux_distributionu
    Return information about the current OS distribution as a tuple
    ``(id_name, version, codename)`` with items as follows:

    * ``id_name``:  If *full_distribution_name* is false, the result of
      :func:`distro.id`. Otherwise, the result of :func:`distro.name`.

    * ``version``:  The result of :func:`distro.version`.

    * ``codename``:  The result of :func:`distro.codename`.

    The interface of this function is compatible with the original
    :py:func:`platform.linux_distribution` function, supporting a subset of
    its parameters.

    The data it returns may not exactly be the same, because it uses more data
    sources than the original function, and that may lead to different data if
    the OS distribution is not consistent across multiple data sources it
    provides (there are indeed such distributions ...).

    Another reason for differences is the fact that the :func:`distro.id`
    method normalizes the distro ID string to a reliable machine-readable value
    for a number of popular OS distributions.
    aidu
    Return the distro ID of the current distribution, as a
    machine-readable string.

    For a number of OS distributions, the returned distro ID value is
    *reliable*, in the sense that it is documented and that it does not change
    across releases of the distribution.

    This package maintains the following reliable distro ID values:

    ==============  =========================================
    Distro ID       Distribution
    ==============  =========================================
    "ubuntu"        Ubuntu
    "debian"        Debian
    "rhel"          RedHat Enterprise Linux
    "centos"        CentOS
    "fedora"        Fedora
    "sles"          SUSE Linux Enterprise Server
    "opensuse"      openSUSE
    "amazon"        Amazon Linux
    "arch"          Arch Linux
    "cloudlinux"    CloudLinux OS
    "exherbo"       Exherbo Linux
    "gentoo"        GenToo Linux
    "ibm_powerkvm"  IBM PowerKVM
    "kvmibm"        KVM for IBM z Systems
    "linuxmint"     Linux Mint
    "mageia"        Mageia
    "mandriva"      Mandriva Linux
    "parallels"     Parallels
    "pidora"        Pidora
    "raspbian"      Raspbian
    "oracle"        Oracle Linux (and Oracle Enterprise Linux)
    "scientific"    Scientific Linux
    "slackware"     Slackware
    "xenserver"     XenServer
    "openbsd"       OpenBSD
    "netbsd"        NetBSD
    "freebsd"       FreeBSD
    ==============  =========================================

    If you have a need to get distros for reliable IDs added into this set,
    or if you find that the :func:`distro.id` function returns a different
    distro ID for one of the listed distros, please create an issue in the
    `distro issue tracker`_.

    **Lookup hierarchy and transformations:**

    First, the ID is obtained from the following sources, in the specified
    order. The first available and non-empty value is used:

    * the value of the "ID" attribute of the os-release file,

    * the value of the "Distributor ID" attribute returned by the lsb_release
      command,

    * the first part of the file name of the distro release file,

    The so determined ID value then passes the following transformations,
    before it is returned by this method:

    * it is translated to lower case,

    * blanks (which should not be there anyway) are translated to underscores,

    * a normalization of the ID is performed, based upon
      `normalization tables`_. The purpose of this normalization is to ensure
      that the ID is as reliable as possible, even across incompatible changes
      in the OS distributions. A common reason for an incompatible change is
      the addition of an os-release file, or the addition of the lsb_release
      command, with ID values that differ from what was previously determined
      from the distro release file name.
    anameu
    Return the name of the current OS distribution, as a human-readable
    string.

    If *pretty* is false, the name is returned without version or codename.
    (e.g. "CentOS Linux")

    If *pretty* is true, the version and codename are appended.
    (e.g. "CentOS Linux 7.1.1503 (Core)")

    **Lookup hierarchy:**

    The name is obtained from the following sources, in the specified order.
    The first available and non-empty value is used:

    * If *pretty* is false:

      - the value of the "NAME" attribute of the os-release file,

      - the value of the "Distributor ID" attribute returned by the lsb_release
        command,

      - the value of the "<name>" field of the distro release file.

    * If *pretty* is true:

      - the value of the "PRETTY_NAME" attribute of the os-release file,

      - the value of the "Description" attribute returned by the lsb_release
        command,

      - the value of the "<name>" field of the distro release file, appended
        with the value of the pretty version ("<version_id>" and "<codename>"
        fields) of the distro release file, if available.
    aversionu
    Return the version of the current OS distribution, as a human-readable
    string.

    If *pretty* is false, the version is returned without codename (e.g.
    "7.0").

    If *pretty* is true, the codename in parenthesis is appended, if the
    codename is non-empty (e.g. "7.0 (Maipo)").

    Some distributions provide version numbers with different precisions in
    the different sources of distribution information. Examining the different
    sources in a fixed priority order does not always yield the most precise
    version (e.g. for Debian 8.2, or CentOS 7.1).

    The *best* parameter can be used to control the approach for the returned
    version:

    If *best* is false, the first non-empty version number in priority order of
    the examined sources is returned.

    If *best* is true, the most precise version number out of all examined
    sources is returned.

    **Lookup hierarchy:**

    In all cases, the version number is obtained from the following sources.
    If *best* is false, this order represents the priority order:

    * the value of the "VERSION_ID" attribute of the os-release file,
    * the value of the "Release" attribute returned by the lsb_release
      command,
    * the version number parsed from the "<version_id>" field of the first line
      of the distro release file,
    * the version number parsed from the "PRETTY_NAME" attribute of the
      os-release file, if it follows the format of the distro release files.
    * the version number parsed from the "Description" attribute returned by
      the lsb_release command, if it follows the format of the distro release
      files.
    aversion_partsu
    Return the version of the current OS distribution as a tuple
    ``(major, minor, build_number)`` with items as follows:

    * ``major``:  The result of :func:`distro.major_version`.

    * ``minor``:  The result of :func:`distro.minor_version`.

    * ``build_number``:  The result of :func:`distro.build_number`.

    For a description of the *best* parameter, see the :func:`distro.version`
    method.
    amajor_versionu
    Return the major version of the current OS distribution, as a string,
    if provided.
    Otherwise, the empty string is returned. The major version is the first
    part of the dot-separated version string.

    For a description of the *best* parameter, see the :func:`distro.version`
    method.
    aminor_versionu
    Return the minor version of the current OS distribution, as a string,
    if provided.
    Otherwise, the empty string is returned. The minor version is the second
    part of the dot-separated version string.

    For a description of the *best* parameter, see the :func:`distro.version`
    method.
    abuild_numberu
    Return the build number of the current OS distribution, as a string,
    if provided.
    Otherwise, the empty string is returned. The build number is the third part
    of the dot-separated version string.

    For a description of the *best* parameter, see the :func:`distro.version`
    method.
    alikeu
    Return a space-separated list of distro IDs of distributions that are
    closely related to the current OS distribution in regards to packaging
    and programming interfaces, for example distributions the current
    distribution is a derivative from.

    **Lookup hierarchy:**

    This information item is only provided by the os-release file.
    For details, see the description of the "ID_LIKE" attribute in the
    `os-release man page
    <http://www.freedesktop.org/software/systemd/man/os-release.html>`_.
    acodenameu
    Return the codename for the release of the current OS distribution,
    as a string.

    If the distribution does not have a codename, an empty string is returned.

    Note that the returned codename is not always really a codename. For
    example, openSUSE returns "x86_64". This function does not handle such
    cases in any special way and just returns the string it finds, if any.

    **Lookup hierarchy:**

    * the codename within the "VERSION" attribute of the os-release file, if
      provided,

    * the value of the "Codename" attribute returned by the lsb_release
      command,

    * the value of the "<codename>" field of the distro release file.
    ainfou
    Return certain machine-readable information items about the current OS
    distribution in a dictionary, as shown in the following example:

    .. sourcecode:: python

        {
            'id': 'rhel',
            'version': '7.0',
            'version_parts': {
                'major': '7',
                'minor': '0',
                'build_number': ''
            },
            'like': 'fedora',
            'codename': 'Maipo'
        }

    The dictionary structure and keys are always the same, regardless of which
    information items are available in the underlying data sources. The values
    for the various keys are as follows:

    * ``id``:  The result of :func:`distro.id`.

    * ``version``:  The result of :func:`distro.version`.

    * ``version_parts -> major``:  The result of :func:`distro.major_version`.

    * ``version_parts -> minor``:  The result of :func:`distro.minor_version`.

    * ``version_parts -> build_number``:  The result of
      :func:`distro.build_number`.

    * ``like``:  The result of :func:`distro.like`.

    * ``codename``:  The result of :func:`distro.codename`.

    For a description of the *pretty* and *best* parameters, see the
    :func:`distro.version` method.
    aos_release_infou
    Return a dictionary containing key-value pairs for the information items
    from the os-release file data source of the current OS distribution.

    See `os-release file`_ for details about these information items.
    alsb_release_infou
    Return a dictionary containing key-value pairs for the information items
    from the lsb_release command data source of the current OS distribution.

    See `lsb_release command output`_ for details about these information
    items.
    adistro_release_infou
    Return a dictionary containing key-value pairs for the information items
    from the distro release file data source of the current OS distribution.

    See `distro release file`_ for details about these information items.
    auname_infou
    Return a dictionary containing key-value pairs for the information items
    from the distro release file data source of the current OS distribution.
    aos_release_attru
    Return a single named information item from the os-release file data source
    of the current OS distribution.

    Parameters:

    * ``attribute`` (string): Key of the information item.

    Returns:

    * (string): Value of the information item, if the item exists.
      The empty string, if the item does not exist.

    See `os-release file`_ for details about these information items.
    alsb_release_attru
    Return a single named information item from the lsb_release command output
    data source of the current OS distribution.

    Parameters:

    * ``attribute`` (string): Key of the information item.

    Returns:

    * (string): Value of the information item, if the item exists.
      The empty string, if the item does not exist.

    See `lsb_release command output`_ for details about these information
    items.
    adistro_release_attru
    Return a single named information item from the distro release file
    data source of the current OS distribution.

    Parameters:

    * ``attribute`` (string): Key of the information item.

    Returns:

    * (string): Value of the information item, if the item exists.
      The empty string, if the item does not exist.

    See `distro release file`_ for details about these information items.
    auname_attru
    Return a single named information item from the distro release file
    data source of the current OS distribution.

    Parameters:

    * ``attribute`` (string): Key of the information item.

    Returns:

    * (string): Value of the information item, if the item exists.
                The empty string, if the item does not exist.
    a__name__a_fnamea_fucall {} on an instanceajoina_UNIXCONFDIRa_OS_RELEASE_BASENAMEaos_release_fileuadistro_release_fileainclude_lsbainclude_unameu
        The initialization method of this class gathers information from the
        available data sources, and stores that in private instance attributes.
        Subsequent access to the information items uses these private instance
        attributes, so that the data sources are read only once.

        Parameters:

        * ``include_lsb`` (bool): Controls whether the
          `lsb_release command output`_ is included as a data source.

          If the lsb_release command is not available in the program execution
          path, the data source for the lsb_release command will be empty.

        * ``os_release_file`` (string): The path name of the
          `os-release file`_ that is to be used as a data source.

          An empty string (the default) will cause the default path name to
          be used (see `os-release file`_ for details).

          If the specified or defaulted os-release file does not exist, the
          data source for the os-release file will be empty.

        * ``distro_release_file`` (string): The path name of the
          `distro release file`_ that is to be used as a data source.

          An empty string (the default) will cause a default search algorithm
          to be used (see `distro release file`_ for details).

          If the specified distro release file does not exist, or if no default
          distro release file can be found, the data source for the distro
          release file will be empty.

        * ``include_name`` (bool): Controls whether uname command output is
          included as a data source. If the uname command is not available in
          the program execution path the data source for the uname command will
          be empty.

        Public instance attributes:

        * ``os_release_file`` (string): The path name of the
          `os-release file`_ that is actually used as a data source. The
          empty string if no distro release file is used as a data source.

        * ``distro_release_file`` (string): The path name of the
          `distro release file`_ that is actually used as a data source. The
          empty string if no distro release file is used as a data source.

        * ``include_lsb`` (bool): The result of the ``include_lsb`` parameter.
          This controls whether the lsb information will be loaded.

        * ``include_uname`` (bool): The result of the ``include_uname``
          parameter. This controls whether the uname information will
          be loaded.

        Raises:

        * :py:exc:`IOError`: Some I/O issue with an os-release file or distro
          release file.

        * :py:exc:`subprocess.CalledProcessError`: The lsb_release command had
          some issue (other than not being available in the program execution
          path).

        * :py:exc:`UnicodeError`: A data source has unexpected characters or
          uses an unexpected encoding.
        uLinuxDistribution(os_release_file={self.os_release_file!r}, distro_release_file={self.distro_release_file!r}, include_lsb={self.include_lsb!r}, include_uname={self.include_uname!r}, _os_release_info={self._os_release_info!r}, _lsb_release_info={self._lsb_release_info!r}, _distro_release_info={self._distro_release_info!r}, _uname_info={self._uname_info!r})TaselfuReturn repr of all info
        aselfu
        Return information about the OS distribution that is compatible
        with Python's :func:`platform.linux_distribution`, supporting a subset
        of its parameters.

        For details, see :func:`distro.linux_distribution`.
        anormalizeuLinuxDistribution.id.<locals>.normalizeTaidaNORMALIZED_OS_IDTadistributor_idaNORMALIZED_LSB_IDaNORMALIZED_DISTRO_IDuReturn the distro ID of the OS distribution, as a string.

        For details, see :func:`distro.id`.
        alowerareplaceTw w_agetTanameTapretty_nameTadescriptionTtTaprettyw u
        Return the name of the OS distribution, as a string.

        For details, see :func:`distro.name`.
        Taversion_idTareleasea_parse_distro_release_contentTaversion_iduacountTw.u{0} ({1})u
        Return the version of the OS distribution, as a string.

        For details, see :func:`distro.version`.
        TabestareacompileTu(\d+)\.?(\d+)?\.?(\d+)?amatchagroupsutoo many values to unpack (expected 3)Tuppu
        Return the version of the OS distribution, as a tuple of version
        numbers.

        For details, see :func:`distro.version_parts`.
        lu
        Return the major version number of the current distribution.

        For details, see :func:`distro.major_version`.
        lu
        Return the minor version number of the current distribution.

        For details, see :func:`distro.minor_version`.
        lu
        Return the build number of the current distribution.

        For details, see :func:`distro.build_number`.
        Taid_likeu
        Return the IDs of distributions that are like the OS distribution.

        For details, see :func:`distro.like`.
        a_os_release_infoTacodenameu
        Return the codename of the OS distribution.

        For details, see :func:`distro.codename`.
        amajoraminoru
        Return certain machine-readable information about the OS
        distribution.

        For details, see :func:`distro.info`.
        u
        Return a dictionary containing key-value pairs for the information
        items from the os-release file data source of the OS distribution.

        For details, see :func:`distro.os_release_info`.
        a_lsb_release_infou
        Return a dictionary containing key-value pairs for the information
        items from the lsb_release command data source of the OS
        distribution.

        For details, see :func:`distro.lsb_release_info`.
        a_distro_release_infou
        Return a dictionary containing key-value pairs for the information
        items from the distro release file data source of the OS
        distribution.

        For details, see :func:`distro.distro_release_info`.
        a_uname_infou
        Return a dictionary containing key-value pairs for the information
        items from the uname command data source of the OS distribution.

        For details, see :func:`distro.uname_info`.
        u
        Return a single named information item from the os-release file data
        source of the OS distribution.

        For details, see :func:`distro.os_release_attr`.
        u
        Return a single named information item from the lsb_release command
        output data source of the OS distribution.

        For details, see :func:`distro.lsb_release_attr`.
        u
        Return a single named information item from the distro release file
        data source of the OS distribution.

        For details, see :func:`distro.distro_release_attr`.
        u
        Return a single named information item from the uname command
        output data source of the OS distribution.

        For details, see :func:`distro.uname_release_attr`.
        a__enter__a__exit__a_parse_os_release_contentTnnnu
        Get the information items from the specified os-release file.

        Returns:
            A dictionary containing all information items.
        ashlexDaposixtawhitespace_splitw=asplitTw=lutoo many values to unpack (expected 2)adecodeTuutf-8apropsaversion_codenameaubuntu_codenameasearchu(\(\D+\))|,(\s+)?\D+agroupastripTu()Tw,u
        Parse the lines of an os-release file.

        Parameters:

        * lines: Iterable through the lines in the os-release file.
                 Each line must be a unicode string or a UTF-8 encoded byte
                 string.

        Returns:
            A dictionary containing all information items.
        aosadevnullwwasubprocessacheck_outputTTalsb_releaseu-aTastderrastdoutasysagetfilesystemencodingasplitlinesa_parse_lsb_release_contentu
        Get the information items from the lsb_release command output.

        Returns:
            A dictionary containing all information items.
        Tw
Tw:laupdateu
        Parse the output of the lsb_release command.

        Parameters:

        * lines: Iterable through the lines of the lsb_release output.
                 Each line must be a unicode string or a UTF-8 encoded byte
                 string.

        Returns:
            A dictionary containing all information items.
        TTaunameu-rsa_parse_uname_contentu^([^\s]+)\s+([\d\.]+)aLinuxareleasea_parse_distro_release_fileabasenamea_DISTRO_RELEASE_BASENAME_PATTERNacloudlinuxTladistro_infoalistdirasortLuSuSE-releaseuarch-releaseubase-releaseucentos-releaseufedora-releaseugentoo-releaseumageia-releaseumandrake-releaseumandriva-releaseumandrivalinux-releaseumanjaro-releaseuoracle-releaseuredhat-releaseusl-releaseuslackware-versionabasenamesa_DISTRO_RELEASE_IGNORE_BASENAMESapathu
        Get the information items from the specified distro release file.

        Returns:
            A dictionary containing all information items.
        areadlineTEOSErrorpu
        Parse a distro release file.

        Parameters:

        * filepath: Path name of the distro release file.

        Returns:
            A dictionary containing all information items.
        a_DISTRO_RELEASE_CONTENT_REVERSED_PATTERN:nnl��������TlTlaversion_idu
        Parse a line from a distro release file.

        Parameters:
        * line: Line from the distro release file. Must be a unicode string
                or a UTF-8 encoded byte string.

        Returns:
            A dictionary containing all information items.
        aloggingagetLoggerTadistroasetLevelaDEBUGaaddHandleraStreamHandleraargparseaArgumentParserTuOS distro info toolaadd_argumentTu--jsonu-juOutput in machine readable formatastore_trueTahelpaactionaparse_argsajsonadumpsDaindentasort_keysltuName: %suVersion: %suCodename: %su
The ``distro`` package (``distro`` stands for Linux Distribution) provides
information about the Linux distribution it runs on, such as a reliable
machine-readable distro ID, or version information.

It is the recommended replacement for Python's original
:py:func:`platform.linux_distribution` function, but it provides much more
functionality. An alternative implementation became necessary because Python
3.5 deprecated this function, and Python 3.8 will remove it altogether.
Its predecessor function :py:func:`platform.dist` was already
deprecated since Python 2.6 and will also be removed in Python 3.8.
Still, there are many cases in which access to OS distribution information
is needed. See `Python issue 1322 <https://bugs.python.org/issue1322>`_ for
more information.
a__doc__u/usr/lib/python3/dist-packages/distro.pya__file__a__spec__aoriginahas_locationa__cached__aenvironTaUNIXCONFDIRu/etcuos-releaseDaolaoracleDaenterpriseenterprisearedhatenterpriseworkstationaredhatenterpriseserveraoraclearhelarhelDaredhatarhelTu(?:[^)]*\)(.*)\()? *(?:STL )?([\d.+\-a-z]*\d) *(?:esaeler *)?(.+)Tu(\w+)[-_](release|version)$adebian_versionulsb-releaseuoem-releaseusystem-releaseTFTFpTOobjectametaclassa__prepare__acached_propertya__getitem__u%s.__prepare__() must return a mapping, not %su<metaclass>adistroa__module__uA version of @property which caches the value.  On access, it calls the
    underlying function and sets the value in `__dict__` so future accesses
    will not re-call the property.
    a__qualname__a__init__ucached_property.__init__a__get__ucached_property.__get__a__orig_bases__aLinuxDistributionu
    Provides information about a OS distribution.

    This package creates a private module-global instance of this class with
    default initialization arguments, that is used by the
    `consolidated accessor functions`_ and `single source accessor functions`_.
    By using default initialization arguments, that module-global instance
    returns data about the current OS distribution (i.e. the distro this
    package runs on).

    Normally, it is not necessary to create additional instances of this class.
    However, in situations where control is needed over the exact data sources
    that are used, instances of this class can be created with a specific
    distro release file, or a specific os-release file, or without invoking the
    lsb_release command.
    TtuptuLinuxDistribution.__init__a__repr__uLinuxDistribution.__repr__uLinuxDistribution.linux_distributionuLinuxDistribution.iduLinuxDistribution.nameuLinuxDistribution.versionuLinuxDistribution.version_partsuLinuxDistribution.major_versionuLinuxDistribution.minor_versionuLinuxDistribution.build_numberuLinuxDistribution.likeuLinuxDistribution.codenameuLinuxDistribution.infouLinuxDistribution.os_release_infouLinuxDistribution.lsb_release_infouLinuxDistribution.distro_release_infouLinuxDistribution.uname_infouLinuxDistribution.os_release_attruLinuxDistribution.lsb_release_attruLinuxDistribution.distro_release_attruLinuxDistribution.uname_attruLinuxDistribution._os_release_infoastaticmethoduLinuxDistribution._parse_os_release_contentuLinuxDistribution._lsb_release_infouLinuxDistribution._parse_lsb_release_contentuLinuxDistribution._uname_infouLinuxDistribution._parse_uname_contentuLinuxDistribution._distro_release_infouLinuxDistribution._parse_distro_release_fileuLinuxDistribution._parse_distro_release_contentamainu<module distro>Ta__class__TaselfaobjaowneraretTaselfwfTaselfainclude_lsbaos_release_fileadistro_release_fileainclude_unameTaselfadistro_infoabasenameamatchabasenamesafilepathTaselfadevnullacmdastdoutacontentTaselfarelease_fileTalineamatchesadistro_infoTaselfafilepathafpTalinesapropsalineakvwkwvTalinesapropsalexeratokensatokenwkwvacodenameTalinesapropsamatchanameaversionTaselfabestTaattributeTaselfaattributeTaselfanormalizeadistro_idTaprettyabestTaselfaprettyabestTafull_distribution_nameTaselfafull_distribution_nameTaloggeraparseraargsadistribution_versionadistribution_codenameTaselfaprettyanameaversionTadistro_idatableTaselfaprettyabestaversionsaversionwvTaselfabestaversion_straversion_regexamatchesamajoraminorabuild_number.entrypoints�aepstruCouldn't parse entry point spec: %raBadEntryPointawarningsawarnaerr_to_warningsuBadEntryPoint.err_to_warningsagroupanameuNo {!r} entry point found in group {!r}amodule_nameaobject_nameaextrasadistrouEntryPoint(%r, %r, %r, %r)aimport_moduleasplitTw.aobjuLoad the object to which this entry point refers.
        aentry_point_patternamatchTamodulenameaobjectnameaextrasutoo many values to unpack (expected 3)areu,\s*uParse an entry point from the syntax in entry_points.txt

        :param str epstr: The entry point string (not including 'name =')
        :param str name: The name of this entry point
        :param Distribution distro: The distribution in which the entry point was found
        :rtype: EntryPoint
        :raises BadEntryPoint: if *epstr* can't be parsed as an entry point.
        aversionuDistribution(%r, %r)apathasysarstripTu/\aendswithTu.eggaospabasenamew-aDistributionTw-:nlnarepeated_distroafirstadistro_names_seenaaddaisdirajoinuEGG-INFOuentry_points.txtaisfileaCaseSensitiveConfigParserTTw=Tadelimitersareadazipfileais_zipfileaZipFileagetinfoTuEGG-INFO/entry_points.txtaopena__enter__a__exit__aioaTextIOWrapperaread_fileTasourceTnnnainfolistafile_in_zip_patternafilenameTadist_versionTw-lazfafolderaitertoolsachainaglobaiglobu*.dist-infou*.egg-infoasplitextadirnamelaiter_files_distrosTapathutoo many values to unpack (expected 2)aEntryPointafrom_stringaNoSuchEntryPointuFind a single entry point.

    Returns an :class:`EntryPoint` object, or raises :exc:`NoSuchEntryPoint`
    if no match is found.
    aget_group_allaresultuFind a group of entry points with unique names.

    Returns a dictionary of names to :class:`EntryPoint` objects.
    aitemsaappenduFind all entry points in a group.

    Returns a list of :class:`EntryPoint` objects.
    uDiscover and load entry points from installed packages.a__doc__u/usr/lib/python3/dist-packages/entrypoints.pya__file__a__spec__aoriginahas_locationa__cached__acontextlibTacontextmanageracontextmanageruos.pathaconfigparseracompileu
(?P<modulename>\w+(\.\w+)*)
(:(?P<objectname>\w+(\.\w+)*))?
\s*
(\[(?P<extras>.+)\])?
$
aVERBOSEu
(?P<dist_version>[^/\\]+)\.(dist|egg)-info
[/\\]entry_points.txt$
u0.3a__version__TEExceptionametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aentrypointsa__module__uRaised when an entry point can't be parsed.
    a__qualname__a__init__uBadEntryPoint.__init__a__str__uBadEntryPoint.__str__astaticmethoda__orig_bases__uRaised by :func:`get_single` when no matching entry point is found.uNoSuchEntryPoint.__init__uNoSuchEntryPoint.__str__aConfigParserastraoptionxformTOobjectTnnuEntryPoint.__init__a__repr__uEntryPoint.__repr__aloaduEntryPoint.loadaclassmethodTnuEntryPoint.from_stringuDistribution.__init__uDistribution.__repr__Tnafirstaget_singleaget_group_namedu<module entrypoints>Ta__class__TaselfaepstrTaselfagroupanameTaselfanameamodule_nameaobject_nameaextrasadistroTaselfanameaversionTaselfTweTaclsaepstranameadistrowmamodaobjaextrasTagroupapatharesultaconfigadistroanameaepstrTagroupapatharesultaepTagroupanameapathaconfigadistroaepstrTapatharepeated_distroadistro_names_seenafolderaegg_nameadistroaep_pathacpwzainfowfafuazfwmadistro_name_versionTaselfamodaobjaattru.httplib2�Z�asocketa_GLOBAL_DEFAULT_TIMEOUTaresponseacontentaHttpLib2Errora__init__asslaSSLContextuhttplib2 requires Python 3.2+ for ssl.SSLContextaDEFAULT_TLS_VERSIONaCERT_NONEaCERT_REQUIREDaverify_modeamaximum_versionaTLSVersionusetting tls_maximum_version requires Python 3.7 and OpenSSL 1.1 or neweraminimum_versionusetting tls_minimum_version requires Python 3.7 and OpenSSL 1.1 or neweracheck_hostnameaload_verify_locationsaload_cert_chainaHOP_BY_HOPaextendagetTaconnectionuasplitTw,astripakeysaURIamatchagroupsllllluParses a URI using the regex given in Appendix B of RFC 3986.

        (scheme, authority, path, query, fragment) = parse_uri(uri)
    aparse_uriutoo many values to unpack (expected 5)aRelativeURIErroruOnly absolute URIs are allowed. uri = %salowerw/w?u://adecodeTuutf-8aencodea_md5ahexdigestare_url_schemeasubuafilenameare_unsafe:nlZnw,uReturn a filename suitable for the cache.
    Strips dangerous and common characters to create a filename we
    can use to store the cache in.
    aitemsutoo many values to unpack (expected 2)a_convert_byte_straNORMALIZE_SPACEw uutf-8ucache-controll��������afindTw=Tw=laUSE_WWW_AUTH_STRICT_PARSINGaWWW_AUTH_STRICTaWWW_AUTH_RELAXEDaauthenticateuauthentication-infoadigestTw lawww_authasearchutoo many values to unpack (expected 3)aUNQUOTE_PAIRSu\1aauth_paramsathe_restaretvalaMalformedHeaderTuWWW-AuthenticateuReturns a dictionary of dictionaries, one dict
    per auth_scheme.aSTALEa_parse_cache_controlapragmaTuno-cacheaTRANSPARENTuno-cacheuonly-if-cachedaFRESHadateacalendaratimegmaemailautilsaparsedate_tzatimeamaxlumax-ageaexpiresumin-freshuDetermine freshness from the Date, Expires and Cache-Control headers.

    We don't handle the following:

    1. Cache-Control: max-stale
    2. Age: headers are not used in the calculations.

    Not that this algorithm is simpler than you might think
    because we are operating as a private (non-shared) cache.
    This lets us ignore 's-maxage'. We can also ignore
    'proxy-invalidate' since we aren't a proxy.
    We will never return a stale document as
    fresh as a design decision, and thus the non-implementation
    of 'max-stale'. This also lets us safely ignore 'must-revalidate'
    since we operate as if every server has sent 'must-revalidate'.
    Since we are private we get to ignore both 'public' and
    'private' parameters. We also ignore 'no-transform' since
    we don't do any transformations.
    The 'no-store' parameter is handled at a higher level.
    So the only Cache-Control parameters we look at are:

    no-cache
    only-if-cached
    max-age
    min-fresh
    Tucontent-encodingnLagzipadeflateagzipaGzipFileaBytesIOTafileobjareadadeflateazlibadecompressaMAX_WBITSucontent-lengthucontent-encodingu-content-encodingaerroraFailedToDecompressContentw_TuContent purported to be compressed with %s but failed to decompress.Tucontent-encodinga_write_headersu_bind_write_headers.<locals>._write_headersamsgaprintu%s:aselfa_fpTaendafileaheaderaHeadera_maxheaderlenTamaxlinelenTafileTamaxlinelenacharsetaheader_nameuno-storeadeleteamessageaMessageLastatusucontent-encodingutransfer-encodingainfoTavarynareplaceTw uu-varied-%sastatusl0l�ustatus: %d
aas_stringa_bind_write_headersareu
(?!
)|(?<!
)
u
cajoinasetu%s:%sactime;lllu0123456789arandomarandrangeTll	:nlnabase64ab64encodea_shau%s%s%sapathahostacredentialsahttpacountTw/astartswithaAuthenticationuBasic aauthorizationuModify the request headers to add the appropriate
        Authorization header.a_parse_www_authenticateuwww-authenticateachallengeTaqopaauthaauthaqopaUnimplementedDigestAuthOptionErroruUnsupported value for qop: %s.TaalgorithmaMD5aupperaalgorithmaMD5uUnsupported value for algorithm: %s.w:arealmaA1ancu<lambda>uDigestAuthentication.request.<locals>.<lambda>a_cnonceacnonceu"%s"wHu%s:%s:%s:%s:%sanonceu%08xuDigest username="%s", realm="%s", nonce="%s", uri="%s", algorithm=%s, response=%s, qop=%s, nc=%08x, cnonce="%s"Taopaqueu, opaque="%s"aopaqueuModify the request headersatrueTastaleanextnonceahmacdigestTareasonaunauthorizedareasonLaunauthorizedaintegrityaunauthorizedTasaltuasaltTasnonceaUnimplementedHmacDigestAuthOptionErrorTuThe challenge doesn't contain a server nonce, or this one is empty.TaalgorithmuHMAC-SHA-1LuHMAC-SHA-1uHMAC-MD5Tupw-algorithmuSHA-1upw-algorithmLuSHA-1aMD5uUnsupported value for pw-algorithm: %s.uHMAC-MD5ahashmodapwhashmodanewakeya_get_end2end_headersu%s astrftimeu%Y-%m-%dT%H:%M:%SZagmtimeasnonceahmacuHMACDigest username="%s", realm="%s", snonce="%s", cnonce="%s", uri="%s", created="%s", response="%s", headers="%s"TareasonLaintegrityastaleuWSSE profile="UsernameToken"a_wsse_username_tokenuUsernameToken Username="%s", PasswordDigest="%s", Nonce="%s", Created="%s"uX-WSSEuurllib.parseTaurlencodeaurlencodeagoogleloginTaserviceaxapiaxapiTacalendaraclaEmailaPasswdaserviceasourceuuser-agentarequestaPOSTDuContent-Typeuapplication/x-www-form-urlencodedTuhttps://www.google.com/accounts/ClientLoginTamethodabodyaheadersTw
l�aAuthuGoogleLogin Auth=acacheasafeaosamakedirsarbacloseawbawritearemoveaappendadomainaiteruCredentials.iterutoo many values to unpack (expected 7)aproxy_typeaproxy_hostaproxy_portaproxy_rdnsaproxy_useraproxy_passaproxy_headersuArgs:

          proxy_type: The type of proxy server.  This must be set to one of
          socks.PROXY_TYPE_XXX constants.  For example:  p =
          ProxyInfo(proxy_type=socks.PROXY_TYPE_HTTP, proxy_host='localhost',
          proxy_port=8000)
          proxy_host: The hostname or IP address of the proxy server.
          proxy_port: The port that the proxy server is running on.
          proxy_rdns: If True (default), DNS queries will not be performed
          locally, and instead, handed to the proxy to resolve.  This is useful
          if the network does not allow resolution of non-local names. In
          httplib2 0.9 and earlier, this defaulted to False.
          proxy_user: The username used to authenticate with the proxy server.
          proxy_pass: The password used to authenticate with the proxy server.
          proxy_headers: Additional or modified headers for the proxy connect
          request.
        asocksabypass_hostabypass_hostsaAllHostsw.alstripTw.ahostnameaendswithuHas this host been excluded from the proxy configu<ProxyInfo type={p.proxy_type} host:port={p.proxy_host}:{p.proxy_port} rdns={p.proxy_rdns} user={p.proxy_user} headers={p.proxy_headers}>TwpTahttpahttpsa_proxyaenvironaproxy_info_from_urlDanoproxynuRead proxy info from the environment variables.
    aurllibaparseaurlparsew@Tw@lTw:lDahttpsahttpl�lPaProxyInfoTaproxy_typeaproxy_hostaproxy_portaproxy_useraproxy_passaproxy_headersano_proxyTaNO_PROXYuw*uConstruct a ProxyInfo from a URL (such as http_proxy env var)
    aclientaHTTPConnectionTaportatimeoutaproxy_infoTahttpaProxiesUnavailableErrorTuProxy support missing but proxy use was requested!aisgoodaapplies_toaastupleaportagetaddrinfoaSOCK_STREAMasocksocketasockasetproxyasetsockoptaIPPROTO_TCPaTCP_NODELAYahas_timeoutatimeoutasettimeoutadebugleveluconnect: ({0}, {1}) ************uproxy: {0} ************aconnect:lnnuconnect fail: ({0}, {1})uproxy: {0}asocket_erruConnect to the host and port specified in __init__.adisable_ssl_certificate_validationaCA_CERTSaca_certsTahttpsa_build_ssl_contextTamaximum_versionaminimum_versionaHTTPSConnectionWithTimeoutTaportakey_fileacert_fileatimeoutacontexta_contextawrap_socketTaserver_hostnameamatch_hostnameagetpeercertashutdownaSHUT_RDWRuconnect: ({0}, {1})aSSLErroraCertificateErroragaierroruConnect to a host on a given (SSL) port.atls_maximum_versionatls_minimum_versionaconnectionsaFileCacheaCredentialsaKeyCertsacertificatesaauthorizationsafollow_redirectsLaPUTaPATCHaoptimistic_concurrency_methodsafollow_all_redirectsaignore_etagaforce_exception_to_status_codeaforward_authorization_headersuIf 'cache' is a string then it is used as a directory name for
        a disk cache. Otherwise it must be an object that supports the
        same interface as FileCache.

        All timeouts are in seconds. If None is passed for timeout
        then Python's default timeout for sockets will be used. See
        for example the docs of socket.setdefaulttimeout():
        http://docs.python.org/library/socket.html#socket.setdefaulttimeout

        `proxy_info` may be:
          - a callable that takes the http scheme ('http' or 'https') and
            returns a ProxyInfo instance per request. By default, uses
            proxy_info_from_environment.
          - a ProxyInfo instance (static proxy config).
          - None (proxy disabled).

        ca_certs is the path of a file containing root CA certificates for SSL
        server certificate validation.  By default, a CA cert file bundled with
        httplib2 is used.

        If disable_ssl_certificate_validation is true, SSL cert validation will
        not be performed.

        tls_maximum_version / tls_minimum_version require Python 3.7+ /
        OpenSSL 1.1.0g+. A value of "TLSv1_3" requires OpenSSL 1.1.1+.
acopyaupdateuA generator that creates Authorization objects
           that can be applied to requests.
        aAUTH_SCHEME_ORDERaAUTH_SCHEME_CLASSESacredarequest_uriaheadersa_auth_from_challengeuHttp._auth_from_challengeaadduAdd a name and password that will be used
        any time a request requires authentication.uAdd a key and cert that will be used
        any time a request requires authentication.aclearuRemove all the names and passwords
        that are used for authenticationwiaRETRIESaconnamethodabodyaServerNotFoundErroruUnable to find the server at %saargsaerrnoaENETUNREACHaEADDRNOTAVAILaHTTPExceptionagetresponseaBadStatusLineaResponseNotReadyaseen_bad_status_lineaHEADaResponsea_decompressContentainscopeadepthasorteda_conn_requesta_stale_digestl�LaGETaHEADl/Ll,l-l.l/l3alocationl,aRedirectMissingLocationTuRedirected but the response is missing a Location: header.aurljoinl-u-x-permanent-redirect-urlucontent-locationaabsolute_uria_updateCacheuif-none-matchuif-modified-sinceadeepcopyLl.l/aGETTamethodabodyaheadersaredirectionsaold_responseapreviousaRedirectLimituRedirected more times than redirection_limit allows.Ll�l�uDo the actual request using the connection object
        and also follow one level of redirects if necessarya_normalize_headersuPython-httplib2/%s (gzip)a__version__airi2uriaurlnormutoo many values to unpack (expected 4)aSCHEME_TO_CONNECTIONTakey_fileacert_fileatimeoutaproxy_infoaca_certsadisable_ssl_certificate_validationatls_maximum_versionatls_minimum_versionTatimeoutaproxy_infoaca_certsadisable_ssl_certificate_validationatls_maximum_versionatls_minimum_versionTatimeoutaproxy_infoaset_debuglevelarangeuaccept-encodingugzip, deflateTc

lamessage_from_bytesTu=?Tu?=areplace_headeradecode_headerTEIndexErrorEValueErroraetaguif-matchacachekeyavaryacached_valueTamethodaheadersaredirectionsafromcachea_entry_dispositionu504ulast-modifieda_requestapopaconn_keyaHttpLib2ErrorWithResponsel�cRequest TimeoutDucontent-typeastatusucontent-lengthutext/plainu408luRequest Timeoutucontent-typeutext/plainu400uBad Requestu Performs a single HTTP request.
The 'uri' is the URI of the HTTP resource and can begin
with either 'http' or 'https'. The value of 'uri' must be an absolute URI.

The 'method' is the HTTP method to perform, such as GET, POST, DELETE, etc.
There is no restriction on the methods allowed.

The 'body' is the entity body to be sent with the request. It is a string
object.

Any extra headers that are to be sent with the request should be provided in the
'headers' dictionary.

The maximum number of redirect to follow before raising an
exception is 'redirections. The default is 5.

The return value is a tuple of (response, content), the first
being and instance of the 'Response' class, the second being
a string that contains the response entity body.
        aHTTPResponseagetheadersu, aversionadictuSmall, fast HTTP client library for Python.a__doc__u/usr/lib/python3/dist-packages/httplib2/__init__.pya__file__Lu/usr/lib/python3/dist-packages/httplib2a__path__a__spec__aoriginahas_locationasubmodule_search_locationsa__cached__uJoe Gregorio (joe@bitworking.org)a__author__uCopyright 2006, Joe Gregorioa__copyright__L	uThomas Broyer (t.broyer@ltgt.net)uJames AntilluXavier Verges FarrerouJonathan FeinberguBlair ZajacuSam RubyuLouis NyffeneggeruMark PilgrimuAlex Yua__contributors__aMITa__license__u0.14.0uemail.feedparserTaheaderuemail.messageuemail.utilsagettextTagettextahashlibTamd5amd5Tasha1asha1uhttp.clientaioasysTasocksTairi2uriLadebuglevelaFailedToDecompressContentaHttpaHttpLib2ErroraProxyInfoaRedirectLimitaRedirectMissingLocationaResponseaRETRIESaUnimplementedDigestAuthOptionErroraUnimplementedHmacDigestAuthOptionErrora__all__lTEExceptionametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ahttplib2a__module__a__qualname__a__orig_bases__uHttpLib2ErrorWithResponse.__init__laDEFAULT_MAX_REDIRECTSLaconnectionukeep-aliveuproxy-authenticateuproxy-authorizationateatrailersutransfer-encodingaupgradeu/etc/ssl/certs/ca-certificates.crtaPROTOCOL_TLSaPROTOCOL_SSLv23TnnnnacompileTu^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?Tu^\w+://u[^\w\-_.()=!]+aASCIIasafenameTu(?:\r\n)?[ \t]+Tu^(?:\s*(?:,\s*)?([^\0-\x1f\x7f-\xff()<>@,;:\\\"/[\]?={} \t]+)\s*=\s*\"?((?<=\")(?:[^\0-\x08\x0A-\x1f\x7f-\xff\\\"]|\\[\0-\x7f])*?(?=\")|(?<!\")[^\0-\x1f\x7f-\xff()<>@,;:\\\"/[\]?={} \t]+(?!\"))\"?)(.*)$Tu^(?:\s*(?:,\s*)?([^ \t\r\n=]+)\s*=\s*\"?((?<=\")(?:[^\\\"]|\\.)*?(?=\")|(?<!\")[^ \t\r\n,]+(?!\"))\"?)(.*)$Tu\\(.)Tuwww-authenticateTOobjectuAuthentication.__init__uAuthentication.depthuAuthentication.inscopeuModify the request headers to add the appropriate
        Authorization header. Over-rise this in sub-classes.uAuthentication.requestuGives us a chance to update with new nonces
        or such returned from the last authorized response.
        Over-rise this in sub-classes if necessary.

        Return TRUE is the request is to be retried, for
        example Digest may return stale=true.
        uAuthentication.responsea__eq__uAuthentication.__eq__a__ne__uAuthentication.__ne__a__lt__uAuthentication.__lt__a__gt__uAuthentication.__gt__a__le__uAuthentication.__le__a__ge__uAuthentication.__ge__a__bool__uAuthentication.__bool__aBasicAuthenticationuBasicAuthentication.__init__uBasicAuthentication.requestaDigestAuthenticationuOnly do qop='auth' and MD5, since that
    is all Apache currently implementsuDigestAuthentication.__init__TnuDigestAuthentication.requestuDigestAuthentication.responseaHmacDigestAuthenticationuAdapted from Robert Sayre's code and DigestAuthentication above.uThomas Broyer (t.broyer@ltgt.net)uHmacDigestAuthentication.__init__uHmacDigestAuthentication.requestuHmacDigestAuthentication.responseaWsseAuthenticationuThis is thinly tested and should not be relied upon.
    At this time there isn't any third party server to test against.
    Blogger and TypePad implemented this algorithm at one point
    but Blogger has since switched to Basic over HTTPS and
    TypePad has implemented it wrong, by never issuing a 401
    challenge but instead requiring your client to telepathically know that
    their endpoint is expecting WSSE profile="UsernameToken".uWsseAuthentication.__init__uWsseAuthentication.requestaGoogleLoginAuthenticationuGoogleLoginAuthentication.__init__uGoogleLoginAuthentication.requestabasicawsseLahmacdigestagoogleloginadigestawsseabasicuUses a local directory as a store for cached files.
    Not really safe to use if multiple threads or processes are going to
    be running on the same cache.
    uFileCache.__init__uFileCache.getuFileCache.setuFileCache.deleteuCredentials.__init__TuuCredentials.adduCredentials.clearuIdentical to Credentials except that
    name/password are mapped to key/cert.uCollect information required to use a proxy.TTtnnnuProxyInfo.__init__uProxyInfo.astupleuProxyInfo.isgooduProxyInfo.applies_touProxyInfo.bypass_hosta__repr__uProxyInfo.__repr__aproxy_info_from_environmentTahttpnaHTTPConnectionWithTimeoutuHTTPConnection subclass that supports timeouts

    HTTPConnection subclass that supports timeouts

    All timeouts are in seconds. If None is passed for timeout then
    Python's default timeout for sockets will be used. See for example
    the docs of socket.setdefaulttimeout():
    http://docs.python.org/library/socket.html#socket.setdefaulttimeout
    TnnnuHTTPConnectionWithTimeout.__init__uHTTPConnectionWithTimeout.connectaHTTPSConnectionuThis class allows communication via SSL.

    All timeouts are in seconds. If None is passed for timeout then
    Python's default timeout for sockets will be used. See for example
    the docs of socket.setdefaulttimeout():
    http://docs.python.org/library/socket.html#socket.setdefaulttimeout
    T	nnnnnnFnnuHTTPSConnectionWithTimeout.__init__uHTTPSConnectionWithTimeout.connectahttpsaHttpuAn HTTP client that handles:

    - all methods
    - caching
    - ETags
    - compression,
    - HTTPS
    - Basic
    - Digest
    - WSSE

    and more.
    uHttp.__init__a__getstate__uHttp.__getstate__a__setstate__uHttp.__setstate__aadd_credentialsuHttp.add_credentialsaadd_certificateuHttp.add_certificateaclear_credentialsuHttp.clear_credentialsuHttp._conn_requestuHttp._requestuHttp._normalize_headersuHttp.requestTOdictuAn object more like email.message than httplib.HTTPResponse.laOkuResponse.__init__a__getattr__uResponse.__getattr__TwswdwHTwHTwxu<listcomp>Taauthahostarequest_uriTaheaderahopbyhopTwiTwkTwkaheadersTakeyavalueTalineTanameTapartu<module httplib2>Ta__class__TaselfTaselfaauthTaselfanameTaselfastate_dictTaselfacacheasafeTaselfacacheatimeoutaproxy_infoaca_certsadisable_ssl_certificate_validationatls_maximum_versionatls_minimum_versionTaselfacredentialsahostarequest_uriaheadersaresponseacontentahttpT	aselfacredentialsahostarequest_uriaheadersaresponseacontentahttpachallengeT
aselfacredentialsahostarequest_uriaheadersaresponseacontentahttpachallengeaqopT
aselfacredentialsahostarequest_uriaheadersaresponseacontentahttpaschemeaauthorityapathaqueryafragmentTaselfacredentialsahostarequest_uriaheadersaresponseacontentahttpaurlencodeachallengeaserviceaautharespalineswdTaselfadescaresponseacontentT
aselfahostaportakey_fileacert_fileatimeoutaproxy_infoaca_certsadisable_ssl_certificate_validationatls_maximum_versionatls_minimum_versionacontexta__class__Taselfahostaportatimeoutaproxy_infoTaselfainfoakeyavalueaprevTaselfaproxy_typeaproxy_hostaproxy_portaproxy_rdnsaproxy_useraproxy_passaproxy_headersTaselfastateT	aselfahostarequest_uriaheadersaresponseacontentachallengesacredaschemeTamsga_write_headersTadisable_ssl_certificate_validationaca_certsacert_fileakey_fileamaximum_versionaminimum_versionacontextTadigTaselfaconnarequest_uriamethodabodyaheaderswiaseen_bad_status_lineweaerrno_aresponseacontentTwsTaresponseanew_contentacontentaencodingTaresponse_headersarequest_headersaretvalaccacc_responseadateanowacurrent_ageafreshness_lifetimeaexpiresamin_freshTaresponseahopbyhopTaheadersTaselfaheadersTaheadersaretvalapartsaparts_with_argsaparts_wo_argsTaheadersaheadernamearetvalaauthenticateawww_authaauth_schemeathe_restamatchaauth_paramsakeyavalueTaselfaconnahostaabsolute_uriarequest_uriamethodabodyaheadersaredirectionsacachekeyaauthsaautharesponseacontentaauthorizationalocationaschemeaauthorityapathaqueryafragmentaold_responsearedirect_methodTarequest_headersaresponse_headersacontentacacheacachekeyaccacc_responseainfoakeyavalueavaryavary_headersaheaderastatusastatus_headeraheader_stratextTaselfwhwvaheadersamsgTamsgTacnonceaiso_nowapasswordTaselfanameapasswordadomainTaselfakeyacertadomainTaselfahostnameTaselfahostnameaskip_nameTaselfause_proxyaproxy_typeaproxy_hostaproxy_portaproxy_rdnsaproxy_useraproxy_passaproxy_headersahostaportasocket_erraaddress_infoafamilyasocktypeaprotoacanonnameasockaddrasockweTaselfause_proxyaproxy_typeaproxy_hostaproxy_portaproxy_rdnsaproxy_useraproxy_passaproxy_headersahostaportasocket_erraresaafasocktypeaprotoacanonnameasaweTaselfakeyacacheFullPathTaselfarequest_uriaschemeaauthorityapathaqueryafragmentTaselfakeyaretvalacacheFullPathwfTatimeoutTaselfahostarequest_uriaschemeaauthorityapathaqueryafragmentTaselfadomainacdomainanameapasswordTauriagroupsTamethodaenv_varaurlTaurlamethodanoproxyausernameapasswordaportaidentahost_portahostaproxy_typeapiabypass_hostsTaselfamethodarequest_uriaheadersacontentT
aselfamethodarequest_uriaheadersacontentacnoncewHaKDaA2arequest_digestTaselfamethodarequest_uriaheadersacontentaiso_nowacnonceapassword_digestTaselfamethodarequest_uriaheadersacontentakeysakeylistaheaders_valacreatedacnoncearequest_digestT aselfauriamethodabodyaheadersaredirectionsaconnection_typeaconn_keyaschemeaauthorityarequest_uriadefrag_uriaconnacertsainfoacached_valueacachekeyacontentwkwvavaryavary_headersaheaderakeyavaluearesponseanew_contentaentry_dispositionamerged_responseaccweais_timeoutTaselfaresponseacontentTaselfaresponseacontentachallengeTaselfaresponseacontentachallengeaupdated_challengeTafilenameafilename_bytesafilemd5TaselfakeyavalueacacheFullPathwfTauriaschemeaauthorityapathaqueryafragmentarequest_uriadefrag_uri.httplib2.iri2uri�)aescape_rangeutoo many values to unpack (expected 2)uaencodeTuutf-8u%%%2Xaurllibaparseaurlsplitutoo many values to unpack (expected 5)TaidnaadecodeaurlunsplituConvert an IRI to a URI. Note that IRIs must be
    passed in a unicode strings. That is, do not utf-8 encode
    the IRI before passing it into the function.uConverts an IRI to a URI.a__doc__u/usr/lib/python3/dist-packages/httplib2/iri2uri.pya__file__a__spec__aoriginahas_locationa__cached__uJoe Gregorio (joe@bitworking.org)a__author__uCopyright 2006, Joe Gregorioa__copyright__a__contributors__u1.0.0a__version__aMITa__license__uurllib.parselLTl�l��Tl�l��Tl�l�Tl�l�Tll��Tll��Tll��Tll��Tll��Tll��Tll��Tll��Tl	l��	Tl
l��
Tll��Tll��Tl
l��
Tll��Tll��Tll��airi2uriu<listcomp>TwcTwou<module httplib2.iri2uri>TwcaretvalwialowahighTauriaschemeaauthorityapathaqueryafragment.httplib2.socks�#�a_defaultproxyusetdefaultproxy(proxytype, addr[, port[, rdns[, username[, password]]]])
    Sets a default proxy which all further socksocket objects will use,
    unless explicitly changed.
    asocksocketasocketaGeneralProxyErrorTTluno proxy specifieduwrapmodule(module)

    Attempts to replace a module's socket library with a SOCKS socket. Must set
    a default proxy using setdefaultproxy(...) first.
    This will only work on modules that import socket directly into the
    namespace;
    most of the Python Standard Library falls into this category.
    a_orgsocketa__init__a_socksocket__proxyTnnnnnna_socksocket__proxysocknamea_socksocket__proxypeernamea_socksocket__httptunnelarecvadataacountaselfTTluconnection closed unexpectedlyu__recvall(count) -> data
        Receive EXACTLY the number of bytes requested from the socket.
        Blocks until the required number of bytes have been received.
        a_socksocket__rewriteproxyasendallu override socket.socket.sendall method to rewrite the header
        for non-tunneling proxies if needed
        Tnnutoo many values to unpack (expected 2)asplitTu
alowerastartswithTuhost:TagetTapostahostaendptaremoveTw lllainsertla_socksocket__getauthheaderuHost: %su%s http://%s%s %slu
u rewrite HTTP request headers to support non-tunneling proxies
        (i.e. those which do not support the CONNECT method).
        This only works for HTTP (not HTTPS) since HTTPS requires tunneling.
        d:uProxy-Authorization: Basic abase64ab64encodeadecodeusetproxy(proxytype, addr[, port[, rdns[, username[, password]]]])

        Sets the proxy to be used.
        proxytype -    The type of the proxy to be used. Three types
                are supported: PROXY_TYPE_SOCKS4 (including socks4a),
                PROXY_TYPE_SOCKS5 and PROXY_TYPE_HTTP
        addr -        The address of the server (IP or DNS).
        port -        The port of the server. Defaults to 1080 for SOCKS
                servers and 8080 for HTTP proxy servers.
        rdns -        Should DNS queries be preformed on the remote side
                (rather than the local side). The default is True.
                Note: This has no effect with SOCKS4 servers.
        username -    Username to authenticate with to the server.
                The default is no authentication.
        password -    Password to authenticate with to the server.
                Only relevant when username is also provided.
        headers -     Additional or modified headers for the proxy connect
        request.
        astructapackTaBBBBllllTaBBBllla_socksocket__recvallTl:llnwaclosea_generalerrors:llnwwBaappendTlaextendwaSocks5AuthErrorla_socks5autherrorsuÿainet_atonaerrorwaencodeagethostbynameu>HTllaSocks5Errora_socks5errorsl	:lln:llnaunpackaipaddrainet_ntoau__negotiatesocks5(self,destaddr,destport)
        Negotiates a connection through a SOCKS5 server.
        ugetsockname() -> address info
        Returns the bound IP address and port number at the proxy.
        agetpeernameugetproxypeername() -> address info
        Returns the IP and port number of the proxy.
        ugetpeername() -> address info
        Returns the IP address and port number of the destination
        machine (note: getproxypeername returns the proxy)
        TaBBBBlpplu>BBHTlwZTl[l\l]aSocks4Errora_socks4errorslZl^:lnn:llnu__negotiatesocks4(self,destaddr,destport)
        Negotiates a connection through a SOCKS4 server.
        uCONNECT w:u HTTP/1.1
laiteritemsaheadersu: uproxy-authorizationawrote_host_headeruHost: adestaddrawrote_auth_headeruarespafindu

l��������asplitlinesw uHTTP/1.0uHTTP/1.1l�aHTTPErrorTu0.0.0.0lu__negotiatehttp(self,destaddr,destport)
        Negotiates a connection through an HTTP server.
        TOlistOtupleTOstrObytesaPROXY_TYPE_SOCKS5l8aconnecta_socksocket__negotiatesocks5adestpairaPROXY_TYPE_SOCKS4a_socksocket__negotiatesocks4aPROXY_TYPE_HTTPl�a_socksocket__negotiatehttpaPROXY_TYPE_HTTP_NO_TUNNELl�uconnect(self, despair)
        Connects to the specified destination through a proxy.
        destpar - A tuple of the IP/DNS address and the port number.
        (identical to socket's connect).
        To select the proxy server use setproxy().
        uSocksiPy - Python SOCKS module.

Version 1.00

Copyright 2006 Dan-Haim. All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.
3. Neither the name of Dan Haim nor the names of his contributors may be used
   to endorse or promote products derived from this software without specific
   prior written permission.

THIS SOFTWARE IS PROVIDED BY DAN HAIM "AS IS" AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
EVENT SHALL DAN HAIM OR HIS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMANGE.

This module provides a standard socket-like interface for Python
for tunneling connections through SOCKS proxies.

Minor modifications made by Christopher Gilbert (http://motomastyle.com/) for
use in PyLoris (http://pyloris.sourceforge.net/).

Minor modifications made by Mario Vilas (http://breakingcode.wordpress.com/)
mainly to merge bug fixes found in Sourceforge.
a__doc__u/usr/lib/python3/dist-packages/httplib2/socks.pya__file__a__spec__aoriginahas_locationa__cached__asysusocket.socket missing, proxy support unusableTEExceptionametaclassa__prepare__aProxyErrora__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uhttplib2.socksa__module__a__qualname__a__orig_bases__Tasuccessuinvalid dataunot connectedunot availableubad proxy typeubad inputT
asucceededugeneral SOCKS server failureuconnection not allowed by rulesetuNetwork unreachableuHost unreachableuConnection refuseduTTL expireduCommand not supporteduAddress type not supporteduUnknown errorTasucceededuauthentication is requireduall offered authentication methods were rejecteduunknown username or invalid passworduunknown errorTurequest grantedurequest rejected or failedurequest rejected because SOCKS server cannot connect to identd on the clienturequest rejected because the client program and identd report different user-idsuunknown errorTnnntnnasetdefaultproxyawrapmoduleusocksocket([family[, type[, proto]]]) -> socket object
    Open a SOCKS enabled socket. The parameters are the same as
    those of the standard socket init. In order for SOCKS to work,
    you must specify family=AF_INET, type=SOCK_STREAM and proto=0.
    aAF_INETaSOCK_STREAMusocksocket.__init__a__recvallusocksocket.__recvallusocksocket.sendalla__rewriteproxyusocksocket.__rewriteproxya__getauthheaderusocksocket.__getauthheaderTnnntnnnasetproxyusocksocket.setproxya__negotiatesocks5usocksocket.__negotiatesocks5agetproxysocknameusocksocket.getproxysocknameagetproxypeernameusocksocket.getproxypeernameusocksocket.getpeernamea__negotiatesocks4usocksocket.__negotiatesocks4a__negotiatehttpusocksocket.__negotiatehttpusocksocket.connectu<module httplib2.socks>TaselfaauthTaselfafamilyatypeaprotoa_sockTaselfadestaddradestportaaddraheadersawrote_host_headerawrote_auth_headerakeyavalarespastatuslineastatuscodeTaselfadestaddradestportarmtrslvaipaddrareqarespTaselfadestaddradestportachosenauthapacketaauthstatareqaipaddrarespaboundaddraboundportTaselfacountadatawdTaselfaheaderahostaendptahdrsahdrTaselfadestpairaportnumTaselfTaselfacontentaargsa__class__TaproxytypeaaddraportardnsausernameapasswordTaselfaproxytypeaaddraportardnsausernameapasswordaheadersTa__class__Tamodule.idna a__doc__u/usr/lib/python3/dist-packages/idna/__init__.pya__file__Lu/usr/lib/python3/dist-packages/idnaa__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__apackage_dataTa__version__la__version__acoreTw*u<module idna>u.idna.core�aunicodedataacombiningaunichrlanameuUnknown character in unicodedataaintranges_containaidnadataascriptsaencodeTapunycodeuU+{0:04X}l�l�lutoo many values to unpack (expected 2)abidirectionaluaIDNABidiErroruUnknown directionality in label {0} at position {1}LwRaALaANabidi_labelLwRaALwLuFirst codepoint in label {0} must be directionality L, R or ALL
wRaALaANaENaESaCSaETaONaBNaNSMuInvalid direction for codepoint at position {0} in a right-to-left labelLwRaALaENaANaNSMLaANaENanumber_typeTuCan not mix numeral types in a right-to-left labelLwLaENaESaCSaETaONaBNaNSMuInvalid direction for codepoint at position {0} in a left-to-right labelLwLaENavalid_endingTuLabel ends with illegal codepoint directionalityacategorywMaIDNAErrorTuLabel begins with an illegal combining character:llnu--TuLabel has disallowed hyphens in 3rd and 4th positionw-l��������TuLabel must not start or end with a hyphenanormalizeaNFCTuLabel must be in Normalization Form Cl a_combining_classa_virama_combining_classaposajoining_typesagetlTLlLlDLlRlDl
 l�alabellllua_is_scriptaGreekl�l�aHebrewl�0u・aHiraganaaKatakanaaHanl`lil�l�TObytesObytearrayadecodeTuutf-8TuEmpty Labelacheck_nfcacheck_hyphen_okacheck_initial_combineracodepoint_classesaPVALIDaCONTEXTJavalid_contextjaInvalidCodepointContextuJoiner {0} not allowed at position {1} in {2}a_unotuUnknown codepoint adjacent to joiner {0} at position {1} in {2}aCONTEXTOavalid_contextouCodepoint {0} not allowed at position {1} in {2}aInvalidCodepointuCodepoint {0} at position {1} of {2} not allowedacheck_bidiTaasciiaulabelavalid_label_lengthTuLabel too longTuNo Inputaunicodeacheck_labela_punycodea_alabel_prefixalowerastartswithauts46dataTauts46datalabisectabisect_leftwZlwVwDw3aoutputwIacode_pointuRe-map the characters in the string according to UTS46 processing.auts46_remapasplitTw.a_unicode_dots_reLuTuEmpty domainaalabelaresultaappendTuEmpty labelTcd.ajoinavalid_string_lengthTuDomain too longTuw.a__doc__u/usr/lib/python3/dist-packages/idna/core.pya__file__a__spec__aoriginahas_locationa__cached__TaidnadataareasysaintrangesTaintranges_containl	cxn--acompileTu[.。.。]achrTEUnicodeErrorametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uidna.corea__module__u Base exception for all IDNA-encoding related problems a__qualname__a__orig_bases__u Exception when bidirectional requirements are not satisfied u Exception when a disallowed or unallocated codepoint is used u Exception when the codepoint is not valid in the context it is used TFTtFTFpppTFppu<module idna.core>TacpwvTacpascriptTwsTalabelT	alabelacheck_ltrabidi_labelaidxacpadirectionartlavalid_endinganumber_typeTalabelaposacpacp_valueTwsastrictauts46astd3_rulesatrailing_dotaresultalabelsalabelT	wsastrictauts46astd3_rulesatransitionalatrailing_dotaresultalabelsalabelTadomainastd3_rulesatransitionalauts46dataaoutputaposacharacode_pointauts46rowastatusareplacementTalabelaposacp_valueaokwiajoining_typeTalabelaposaexceptionacp_valueacpTalabelatrailing_dot.idna.idnadataJMa__doc__u/usr/lib/python3/dist-packages/idna/idnadata.pya__file__a__spec__aoriginahas_locationa__cached__u11.0.0a__version__DaGreekaHanaHebrewaHiraganaaKatakanaT$ltplxul~zl�l��l��l��l��l��l��l�l+&lb]lkfl��lllF lNHlXPlZYl\[l^]l~_l��l��l��l��l��l��l��l'!&!lf�e�l�@l��lF��Tl�.�.l�.�.l�//l00l00l*0!0l<080l�M4l�Nln��l�p�lצl5��l�@�l�� �l����l��T	l��l��l��l7��l=�8�l?�>�lB�@�lE�C�lP�F�Tl�0A0l�0�0l��l��Tl�0�0l1�0l2�1l�2�2lX33lp�f�l��q�l��ascriptsD�lllllllll l!l"l#l$l%l&l'l(l)l*l+l,l-l.l/l0l1l2l3l4l5l6l7l8l9l:l;l<l=l>l?l@lAlBlClDlElFlGlHlIlJlnlolqlrlsltlulvlwlxlylzl{l|l}l~ll�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�lllllllllllllllll l!l"l#l$l%l&l'l(l)l*l+l,l-l.l/lMlNlOlPlQlRlSlTlUlVlWlXlYlZl[l\l]l^l_l`lalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzl{l|l}l~ll�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l@lAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXl`lalblcldlelflglhliljl�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�lll
ll l!l"l#l$l%l&l'l(l)l*l+l,l-l.l/l0l1l2l3l4l5l6l7l8l9l:l;l<l=l>l?l@lAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl[l\l]l^l_l`lalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxl�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l l
 l/ lf lg lh li l@�lA�lB�lC�lD�lE�lF�lG�lH�lI�lJ�lK�lL�lM�lN�lO�lP�lQ�lR�lS�lT�lU�lV�lW�lX�lY�lZ�l[�l\�l]�l^�l_�l`�la�lb�lc�ld�le�lf�lg�lh�li�lj�lk�ll�lm�ln�lo�lp�lq�lr�ls�l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�
l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l
l
l
l
l
l
l
l
l
l	
l

l
l
l

l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l
l 
l!
l"
l#
l0l1l2l3l4l5l6l7l8l9l:l;l<l=l>l?l@lAlBlClDlElQlRlSlTl�l�l�l�l�l�l�l�l�l�l�l	�l
�l�l�l
�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l �l!�l"�l#�l$�l%�l&�l'�l(�l)�l*�l+�l,�l-�l.�l/�l0�l1�l2�l3�l4�l5�l6�l7�l8�l9�l:�l;�l<�l=�l>�l?�l@�lA�lB�lC�lUppppppplDlUlRppplDlRlDlRlDpppplRppplDpppppppppppplClDpppppplRlDppplRpplUlRpplDppppppppppppppplRppppppppppppppppplDppppppppppppppppppppppppppppppppppppplRlDplRpppppppplDlRlDlRlDplRpplUlRplDppplTlRlDpplRpppplDppplRlDpppppppplRlDlRlDlRlDplRplDpppppppppplRpplDpppppppppppppplRplDppplRlDlRplDpplRplDpppppppppppppppppppppppppppppppppppppplClRlDpppplRplDlRlDppppppppplRlDlUpplDlUlDppplUlRlDlRplDppppppppplRpplUlRlDplRplDpppplRlDppplUplDlClUlDpppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppplUpppplTplDpppppppppppppppppppppppppppppppppplUlClUpppplDppppppppppppppppppppppppppppppppppppppppppppppppplLlUlDpppplRlUlRlUlRplUplLlRpppplDppplLlDpppplRlDpplRlUplRlDppplRlDlRlDlRpplDpplRlDplRlDlRplDlRpppplDplUlLlDpppppppppppppppppppppppppppppppplRlDppplRlDpppppppppppppppplUlDpplRlUplDpppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppajoining_typesDaPVALIDaCONTEXTJaCONTEXTOTql.-l:0l{al��l�lllll
	ll
lllllllll l"!l$#l&%l('l*)l,+l.-l0/l21l65l97l;:l=<l?>lCBlEDlGFlIHlLKlNMlPOlRQlTSlVUlXWlZYl\[l^]l`_lbaldclfelhgljillklnmlpolrqltslvulxwl{zl}|l~l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l�lllll
	ll
lllllllll l"!l$#l&%l('l*)l,+l.-l0/l21l:3l=<lA?lCBlHGlJIlLKlNMl�Ol��l��l��l��l@lCBlOFlpPlrqltslxwl~{l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l`0lbaldclfelhgljillklnmlpolrqltslvulxwlzyl|{l~}l�l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l�lllll
	ll
lllllllll l"!l$#l&%l('l*)l,+l.-l0/lZYl�`l��l��l��l��l��l��l��l��ll@ l`Alunl�yl��l��l��l�lKl�Ml��l��l.l\@lk`l��l��l��lX	�ld	`	lp	f	l�	q	l�	�	l�	�	l�	�	l�	�	l�	�	l�	�	l�	�	l�	�	l�	�	l�	�	l�	�	l�	�	l�	�	l�	�	l

l

l

l)

l1
*
l3
2
l6
5
l:
8
l=
<
lC
>
lI
G
lN
K
lR
Q
l]
\
lv
f
l�
�
l�
�
l�
�
l�
�
l�
�
l�
�
l�
�
l�
�
l�
�
l�
�
l�
�
l�
�
l�
�
l�
ll
ll)l1*l42l:5lE<lIGlNKlXVld_lpflrql��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l
ll)l:*lE=lIFlNJlWUl[Xld`lpfl��l��l��l��l��l��l��l��l��l��l��l��l��l��l

l


l

lE

lI
F
lO
J
lX
T
ld
_
lp
f
l�
z
l�
�
l�
�
l�
�
l�
�
l�
�
l�
�
l�
�
l�
�
l�
�
l�
�
l�
�
l�
�
l3l;4lO@lZPl��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��llll* l65l87l:9lC>lHDlMIlRNlWSl\Xli]lmjlsqlutl�zl��l��l��l��l��l��l��l��l��l��lJl�Pl��l�lIlNJlWPlYXl^Zl�`l��l��l��l��l��l��l��l�ll[l`]l��l��lml�ol��l��l��l
ll5 lT@lm`lqnltrl��l��l��l��l��lly l��l��ll, l<0lnFlupl��l��l��ll_ l}`l�l��l��l��lLlZPltkl��l8lJ@l~Ml��l��l,l0/l<;lONlxkl�yl��l�lllll
	ll
lllllllll l"!l$#l&%l('l*)l,+l.-l0/l21l43l65l87l:9l<;l>=l@?lBAlDClFElHGlJIlLKlNMlPOlRQlTSlVUlXWlZYl\[l^]l`_lbaldclfelhgljillklnmlpolrqltslvulxwlzyl|{l~}l�l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l��l�ll( l80lF@lXPlh`lqplsrlutlwvlyxl{zl}|l��l��l��l��l��l��l��l��lO!N!l�!�!l_,0,lb,a,lg,e,li,h,lk,j,lm,l,lr,q,lu,s,l|,v,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l�,�,l&--l(-'-l.---lh-0-l�--l�-�-l�-�-l�-�-l�-�-l�-�-l�-�-l�-�-l�-�-l.�-l0./.l00l.0*0l=0<0l�0A0l�0�0l�0�0l�0�0l�0�0l011l�1�1l2�1l�M4l�Nl���l��Фl
��l,��lB�A�lD�C�lF�E�lH�G�lJ�I�lL�K�lN�M�lP�O�lR�Q�lT�S�lV�U�lX�W�lZ�Y�l\�[�l^�]�l`�_�lb�a�ld�c�lf�e�lh�g�lj�i�ll�k�lp�m�l~�t�l���l����l����l����l����l����l����l����l����l����l����l����l����l����l����l���l��l ��l$�#�l&�%�l(�'�l*�)�l,�+�l.�-�l2�/�l4�3�l6�5�l8�7�l:�9�l<�;�l>�=�l@�?�lB�A�lD�C�lF�E�lH�G�lJ�I�lL�K�lN�M�lP�O�lR�Q�lT�S�lV�U�lX�W�lZ�Y�l\�[�l^�]�l`�_�lb�a�ld�c�lf�e�lh�g�lj�i�ll�k�ln�m�lp�o�ly�q�l{�z�l}�|�l���l����l����l����l����l����l����l����l����l����l����l����l����l����l����l����l����l����l����l����l����l����l����l����l(���lt�@�lƨ��lڨШl���l����l.���lT�0�l����lکϩl���l7��lN�@�lZ�P�lw�`�lêz�lު۪l��l���l��l�	�l��l'� �l/�(�l[�0�lf�`�l���l��l���l���l��l��l��l ��l"�!�l%�#�l*�'�l��l0� �lt�s�ll'
l;(l><lN?l^Pl��l��l��l��l��l lA-lJBl{Pl��l��l��l�(l��l��l(ld0l7lV@lh`ll	l6
l97l=<lV?lw`l��l��l��l		l:	 	l�	�	l�	�	l

l

l

l

l6

l;
8
l@
?
l}
`
l�
�
l�
�
l�
�
l6lV@ls`l��lIl��l(

l:
0
ll('lQ0lGlpfl�l��l��l5l@6lGDltPlwvl��l��l��l��ll8l?>l��l��l��l��l��l��l��ll
ll)l1*l42l:5lE;lIGlNKlQPlXWld]lmfluplKlZPl_^l��l��l��l��l��l��lAlEDlZPl��l��ll,l:0l;l��l�l?lHGl�Pl��l��l��l	l7
lA8lZPl�rl��l��ll
l7l;:l><lH?lZPlf`ligl�jl��l��l��l��l�# lD%�$l/40lGFDl9jhl_j@jljj`jl�j�jl�j�jl7kklDk@klZkPklxkckl�k}kl�n`nlEooloPol�o�ol�o�ol�pl��l��l��p�lk��l}�p�l����l����l����l7��lm�;�lv�u�l����l����l����l��l��l"��l%�#�l+�&�l���l����lK�"�lZ�P�lצl5��l�@�l�� �l����Tl  Tl��lvul��lj`l��l�0�0acodepoint_classesu<module idna.idnadata>u.idna.intrangesT!asortedl��������lalast_writearangesaappenda_encode_rangeluRepresent a list of integers as a sequence of ranges:
    ((start_0, end_0), (start_1, end_1), ...), such that the original
    integers are exactly those x such that start_i <= x < end_i for some i.

    Ranges are encoded as single integers (start << 32 | end), not as tuples.
    l l����abisectabisect_lefta_decode_rangeutoo many values to unpack (expected 2)aposuDetermine if `int_` falls into one of the ranges in `ranges`.u
Given a list of integers, made up of (hopefully) a small number of long runs
of consecutive integers, compute a representation of the form
((start1, end1), (start2, end2) ...). Then answer the question "was x present
in the original list?" in time O(log(# runs)).
a__doc__u/usr/lib/python3/dist-packages/idna/intranges.pya__file__a__spec__aoriginahas_locationa__cached__aintranges_from_listaintranges_containu<module idna.intranges>TwrTastartaendTaint_arangesatuple_aposaleftarightw_Talist_asorted_listarangesalast_writewiacurrent_rangeu.idna.package_data�a__doc__u/usr/lib/python3/dist-packages/idna/package_data.pya__file__a__spec__aoriginahas_locationa__cached__u2.8a__version__u<module idna.package_data>u.idna.uts46dataU�LdTlw3Tlw3Tlw3Tlw3Tlw3Tlw3Tlw3Tlw3Tlw3Tl	w3Tl
w3Tlw3Tlw3Tl
w3Tlw3Tlw3Tlw3Tlw3Tlw3Tlw3Tlw3Tlw3Tlw3Tlw3Tlw3Tlw3Tlw3Tlw3Tlw3Tlw3Tlw3Tlw3Tl w3Tl!w3Tl"w3Tl#w3Tl$w3Tl%w3Tl&w3Tl'w3Tl(w3Tl)w3Tl*w3Tl+w3Tl,w3Tl-wVTl.wVTl/w3Tl0wVTl1wVTl2wVTl3wVTl4wVTl5wVTl6wVTl7wVTl8wVTl9wVTl:w3Tl;w3Tl<w3Tl=w3Tl>w3Tl?w3Tl@w3TlAwMwaTlBwMwbTlCwMwcTlDwMwdTlEwMweTlFwMwfTlGwMwgTlHwMwhTlIwMwiTlJwMwjTlKwMwkTlLwMwlTlMwMwmTlNwMwnTlOwMwoTlPwMwpTlQwMwqTlRwMwrTlSwMwsTlTwMwtTlUwMwuTlVwMwvTlWwMwwTlXwMwxTlYwMwyTlZwMwzTl[w3Tl\w3Tl]w3Tl^w3Tl_w3Tl`w3TlawVTlbwVTlcwVLdTldwVTlewVTlfwVTlgwVTlhwVTliwVTljwVTlkwVTllwVTlmwVTlnwVTlowVTlpwVTlqwVTlrwVTlswVTltwVTluwVTlvwVTlwwVTlxwVTlywVTlzwVTl{w3Tl|w3Tl}w3Tl~w3Tlw3Tl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�wXTl�w3w Tl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�w3u ̈Tl�wVTl�wMwaTl�wVTl�wVTl�wITl�wVTl�w3u ̄Tl�wVTl�wVTl�wMw2Tl�wMw3Tl�w3u ́Tl�wMuμTl�wVTl�wVTl�w3u ̧Tl�wMw1Tl�wMwoTl�wVTl�wMu1⁄4Tl�wMu1⁄2Tl�wMu3⁄4Tl�wVTl�wMuàTl�wMuáTl�wMuâTl�wMuãTl�wMuäTl�wMuåTl�wMuæTl�wMuçLdTl�wMuèTl�wMuéTl�wMuêTl�wMuëTl�wMuìTl�wMuíTl�wMuîTl�wMuïTl�wMuðTl�wMuñTl�wMuòTl�wMuóTl�wMuôTl�wMuõTl�wMuöTl�wVTl�wMuøTl�wMuùTl�wMuúTl�wMuûTl�wMuüTl�wMuýTl�wMuþTl�wDassTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTl�wVTlwMuāTlwVTlwMuăTlwVTlwMuąTlwVTlwMućTlwVTlwMuĉTl	wVTl
wMuċTlwVTlwMučTl
wVTlwMuďTlwVTlwMuđTlwVTlwMuēTlwVTlwMuĕTlwVTlwMuėTlwVTlwMuęTlwVTlwMuěTlwVTlwMuĝTlwVTlwMuğTlwVTl wMuġTl!wVTl"wMuģTl#wVTl$wMuĥTl%wVTl&wMuħTl'wVTl(wMuĩTl)wVTl*wMuīTl+wVLdTl,wMuĭTl-wVTl.wMuįTl/wVTl0wMui̇Tl1wVTl2wMaijTl4wMuĵTl5wVTl6wMuķTl7wVTl9wMuĺTl:wVTl;wMuļTl<wVTl=wMuľTl>wVTl?wMul·TlAwMułTlBwVTlCwMuńTlDwVTlEwMuņTlFwVTlGwMuňTlHwVTlIwMuʼnTlJwMuŋTlKwVTlLwMuōTlMwVTlNwMuŏTlOwVTlPwMuőTlQwVTlRwMuœTlSwVTlTwMuŕTlUwVTlVwMuŗTlWwVTlXwMuřTlYwVTlZwMuśTl[wVTl\wMuŝTl]wVTl^wMuşTl_wVTl`wMušTlawVTlbwMuţTlcwVTldwMuťTlewVTlfwMuŧTlgwVTlhwMuũTliwVTljwMuūTlkwVTllwMuŭTlmwVTlnwMuůTlowVTlpwMuűTlqwVTlrwMuųTlswVTltwMuŵTluwVTlvwMuŷTlwwVTlxwMuÿTlywMuźTlzwVTl{wMużTl|wVTl}wMužTl~wVTlwMwsTl�wVTl�wMuɓTl�wMuƃTl�wVTl�wMuƅTl�wVTl�wMuɔTl�wMuƈTl�wVTl�wMuɖTl�wMuɗTl�wMuƌTl�wVTl�wMuǝTl�wMuəTl�wMuɛTl�wMuƒTl�wVTl�wMuɠLdTl�wMuɣTl�wVTl�wMuɩTl�wMuɨTl�wMuƙTl�wVTl�wMuɯTl�wMuɲTl�wVTl�wMuɵTl�wMuơTl�wVTl�wMuƣTl�wVTl�wMuƥTl�wVTl�wMuʀTl�wMuƨTl�wVTl�wMuʃTl�wVTl�wMuƭTl�wVTl�wMuʈTl�wMuưTl�wVTl�wMuʊTl�wMuʋTl�wMuƴTl�wVTl�wMuƶTl�wVTl�wMuʒTl�wMuƹTl�wVTl�wMuƽTl�wVTl�wMudžTl�wMaljTl�wManjTl�wMuǎTl�wVTl�wMuǐTl�wVTl�wMuǒTl�wVTl�wMuǔTl�wVTl�wMuǖTl�wVTl�wMuǘTl�wVTl�wMuǚTl�wVTl�wMuǜTl�wVTl�wMuǟTl�wVTl�wMuǡTl�wVTl�wMuǣTl�wVTl�wMuǥTl�wVTl�wMuǧTl�wVTl�wMuǩTl�wVTl�wMuǫTl�wVTl�wMuǭTl�wVTl�wMuǯTl�wVTl�wMadzTl�wMuǵTl�wVTl�wMuƕTl�wMuƿTl�wMuǹTl�wVTl�wMuǻTl�wVTl�wMuǽTl�wVTl�wMuǿTl�wVTlwMuȁTlwVTlwMuȃTlwVTlwMuȅTlwVTlwMuȇTlwVTlwMuȉTl	wVTl
wMuȋTlwVTlwMuȍLdTl
wVTlwMuȏTlwVTlwMuȑTlwVTlwMuȓTlwVTlwMuȕTlwVTlwMuȗTlwVTlwMușTlwVTlwMuțTlwVTlwMuȝTlwVTlwMuȟTlwVTl wMuƞTl!wVTl"wMuȣTl#wVTl$wMuȥTl%wVTl&wMuȧTl'wVTl(wMuȩTl)wVTl*wMuȫTl+wVTl,wMuȭTl-wVTl.wMuȯTl/wVTl0wMuȱTl1wVTl2wMuȳTl3wVTl:wMuⱥTl;wMuȼTl<wVTl=wMuƚTl>wMuⱦTl?wVTlAwMuɂTlBwVTlCwMuƀTlDwMuʉTlEwMuʌTlFwMuɇTlGwVTlHwMuɉTlIwVTlJwMuɋTlKwVTlLwMuɍTlMwVTlNwMuɏTlOwVTl�wMwhTl�wMuɦTl�wMwjTl�wMwrTl�wMuɹTl�wMuɻTl�wMuʁTl�wMwwTl�wMwyTl�wVTl�w3u ̆Tl�w3u ̇Tl�w3u ̊Tl�w3u ̨Tl�w3u ̃Tl�w3u ̋Tl�wVTl�wMuɣTl�wMwlTl�wMwsTl�wMwxTl�wMuʕTl�wVTl@wMùTlAwMúTlBwVTlCwMu̓TlDwMǘTlEwMuιTlFwVTlOwITlPwVTlpwMuͱTlqwVTlrwMuͳTlswVTltwMuʹTluwVTlvwMuͷTlwwVLdTlxwXTlzw3u ιTl{wVTl~w3w;TlwMuϳTl�wXTl�w3u ́Tl�w3u ̈́Tl�wMuάTl�wMu·Tl�wMuέTl�wMuήTl�wMuίTl�wXTl�wMuόTl�wXTl�wMuύTl�wMuώTl�wVTl�wMuαTl�wMuβTl�wMuγTl�wMuδTl�wMuεTl�wMuζTl�wMuηTl�wMuθTl�wMuιTl�wMuκTl�wMuλTl�wMuμTl�wMuνTl�wMuξTl�wMuοTl�wMuπTl�wMuρTl�wXTl�wMuσTl�wMuτTl�wMuυTl�wMuφTl�wMuχTl�wMuψTl�wMuωTl�wMuϊTl�wMuϋTl�wVTl�wDuσTl�wVTl�wMuϗTl�wMuβTl�wMuθTl�wMuυTl�wMuύTl�wMuϋTl�wMuφTl�wMuπTl�wVTl�wMuϙTl�wVTl�wMuϛTl�wVTl�wMuϝTl�wVTl�wMuϟTl�wVTl�wMuϡTl�wVTl�wMuϣTl�wVTl�wMuϥTl�wVTl�wMuϧTl�wVTl�wMuϩTl�wVTl�wMuϫTl�wVTl�wMuϭTl�wVTl�wMuϯTl�wVTl�wMuκTl�wMuρTl�wMuσTl�wVTl�wMuθTl�wMuεTl�wVTl�wMuϸTl�wVTl�wMuσTl�wMuϻTl�wVTl�wMuͻTl�wMuͼTl�wMuͽTlwMuѐTlwMuёTlwMuђLdTlwMuѓTlwMuєTlwMuѕTlwMuіTlwMuїTlwMuјTl	wMuљTl
wMuњTlwMuћTlwMuќTl
wMuѝTlwMuўTlwMuџTlwMuаTlwMuбTlwMuвTlwMuгTlwMuдTlwMuеTlwMuжTlwMuзTlwMuиTlwMuйTlwMuкTlwMuлTlwMuмTlwMuнTlwMuоTlwMuпTl wMuрTl!wMuсTl"wMuтTl#wMuуTl$wMuфTl%wMuхTl&wMuцTl'wMuчTl(wMuшTl)wMuщTl*wMuъTl+wMuыTl,wMuьTl-wMuэTl.wMuюTl/wMuяTl0wVTl`wMuѡTlawVTlbwMuѣTlcwVTldwMuѥTlewVTlfwMuѧTlgwVTlhwMuѩTliwVTljwMuѫTlkwVTllwMuѭTlmwVTlnwMuѯTlowVTlpwMuѱTlqwVTlrwMuѳTlswVTltwMuѵTluwVTlvwMuѷTlwwVTlxwMuѹTlywVTlzwMuѻTl{wVTl|wMuѽTl}wVTl~wMuѿTlwVTl�wMuҁTl�wVTl�wMuҋTl�wVTl�wMuҍTl�wVTl�wMuҏTl�wVTl�wMuґTl�wVTl�wMuғTl�wVTl�wMuҕTl�wVTl�wMuҗTl�wVTl�wMuҙTl�wVTl�wMuқTl�wVTl�wMuҝTl�wVLdTl�wMuҟTl�wVTl�wMuҡTl�wVTl�wMuңTl�wVTl�wMuҥTl�wVTl�wMuҧTl�wVTl�wMuҩTl�wVTl�wMuҫTl�wVTl�wMuҭTl�wVTl�wMuүTl�wVTl�wMuұTl�wVTl�wMuҳTl�wVTl�wMuҵTl�wVTl�wMuҷTl�wVTl�wMuҹTl�wVTl�wMuһTl�wVTl�wMuҽTl�wVTl�wMuҿTl�wVTl�wXTl�wMuӂTl�wVTl�wMuӄTl�wVTl�wMuӆTl�wVTl�wMuӈTl�wVTl�wMuӊTl�wVTl�wMuӌTl�wVTl�wMuӎTl�wVTl�wMuӑTl�wVTl�wMuӓTl�wVTl�wMuӕTl�wVTl�wMuӗTl�wVTl�wMuәTl�wVTl�wMuӛTl�wVTl�wMuӝTl�wVTl�wMuӟTl�wVTl�wMuӡTl�wVTl�wMuӣTl�wVTl�wMuӥTl�wVTl�wMuӧTl�wVTl�wMuөTl�wVTl�wMuӫTl�wVTl�wMuӭTl�wVTl�wMuӯTl�wVTl�wMuӱTl�wVTl�wMuӳTl�wVTl�wMuӵTl�wVTl�wMuӷTl�wVTl�wMuӹTl�wVTl�wMuӻTl�wVTl�wMuӽTl�wVTl�wMuӿTl�wVTlwMuԁTlwVTlwMuԃLdTlwVTlwMuԅTlwVTlwMuԇTlwVTlwMuԉTl	wVTl
wMuԋTlwVTlwMuԍTl
wVTlwMuԏTlwVTlwMuԑTlwVTlwMuԓTlwVTlwMuԕTlwVTlwMuԗTlwVTlwMuԙTlwVTlwMuԛTlwVTlwMuԝTlwVTlwMuԟTlwVTl wMuԡTl!wVTl"wMuԣTl#wVTl$wMuԥTl%wVTl&wMuԧTl'wVTl(wMuԩTl)wVTl*wMuԫTl+wVTl,wMuԭTl-wVTl.wMuԯTl/wVTl0wXTl1wMuաTl2wMuբTl3wMuգTl4wMuդTl5wMuեTl6wMuզTl7wMuէTl8wMuըTl9wMuթTl:wMuժTl;wMuիTl<wMuլTl=wMuխTl>wMuծTl?wMuկTl@wMuհTlAwMuձTlBwMuղTlCwMuճTlDwMuմTlEwMuյTlFwMuնTlGwMuշTlHwMuոTlIwMuչTlJwMuպTlKwMuջTlLwMuռTlMwMuսTlNwMuվTlOwMuտTlPwMuրTlQwMuցTlRwMuւTlSwMuփTlTwMuքTlUwMuօTlVwMuֆTlWwXTlYwVTl�wMuեւTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTlwVTlwXTlwVLdTluwMuاٴTlvwMuوٴTlwwMuۇٴTlxwMuيٴTlywVTl�wXTl�wVTlwXTlwVTlKwXTlMwVTl�wXTl�wVTl�wXTl�wVTl.wXTl0wVTl?wXTl@wVTl\wXTl^wVTl_wXTl`wVTlkwXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTlX	wMuक़TlY	wMuख़TlZ	wMuग़Tl[	wMuज़Tl\	wMuड़Tl]	wMuढ़Tl^	wMuफ़Tl_	wMuय़Tl`	wVTl�	wXTl�	wVTl�	wXTl�	wVTl�	wXTl�	wVTl�	wXTl�	wVTl�	wXTl�	wVTl�	wXTl�	wVTl�	wXTl�	wVTl�	wXTl�	wVTl�	wXTl�	wVTl�	wXTl�	wVTl�	wXTl�	wMuড়Tl�	wMuঢ়Tl�	wXTl�	wMuয়Tl�	wVTl�	wXTl�	wVTl�	wXTl
wVTl
wXTl
wVTl
wXTl
wVTl
wXTl
wVTl)
wXTl*
wVTl1
wXTl2
wVTl3
wMuਲ਼Tl4
wXTl5
wVTl6
wMuਸ਼Tl7
wXTl8
wVTl:
wXTl<
wVTl=
wXTl>
wVTlC
wXTlG
wVTlI
wXTlK
wVTlN
wXTlQ
wVTlR
wXTlY
wMuਖ਼TlZ
wMuਗ਼Tl[
wMuਜ਼LdTl\
wVTl]
wXTl^
wMuਫ਼Tl_
wXTlf
wVTlw
wXTl�
wVTl�
wXTl�
wVTl�
wXTl�
wVTl�
wXTl�
wVTl�
wXTl�
wVTl�
wXTl�
wVTl�
wXTl�
wVTl�
wXTl�
wVTl�
wXTl�
wVTl�
wXTl�
wVTl�
wXTl�
wVTl�
wXTl�
wVTl�
wXTl�
wVTl�
wXTl�
wVTlwXTlwVTlwXTlwVTl
wXTlwVTlwXTlwVTl)wXTl*wVTl1wXTl2wVTl4wXTl5wVTl:wXTl<wVTlEwXTlGwVTlIwXTlKwVTlNwXTlVwVTlXwXTl\wMuଡ଼Tl]wMuଢ଼Tl^wXTl_wVTldwXTlfwVTlxwXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTlwVTl
wXTlwVTlwXTlwVLdTl)wXTl*wVTl:wXTl=wVTlEwXTlFwVTlIwXTlJwVTlNwXTlUwVTlWwXTlXwVTl[wXTl`wVTldwXTlfwVTlpwXTlxwVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl
wVTl
wXTl
wVTl

wXTl
wVTl
wXTl
wVTlE
wXTlF
wVTlI
wXTlJ
wVTlP
wXTlT
wVTld
wXTlf
wVTl�
wXTl�
wVTl�
wXTl�
wVTl�
wXTl�
wVTl�
wXTl�
wVTl�
wXTl�
wVTl�
wXTl�
wVTl�
wXTl�
wVTl�
wXTl�
wVTl�
wXTl�
wVTl�
wXTl�
wVTl�
wXTl�
wVTl�
wXTl�
wVTl�
wXTlwVTl3wMuําTl4wVTl;wXTl?wVTl\wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVLdTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wMuໍາTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wMuຫນTl�wMuຫມTl�wVTl�wXTlwVTlwMu་Tl
wVTlCwMuགྷTlDwVTlHwXTlIwVTlMwMuཌྷTlNwVTlRwMuདྷTlSwVTlWwMuབྷTlXwVTl\wMuཛྷTl]wVTliwMuཀྵTljwVTlmwXTlqwVTlswMuཱིTltwVTluwMuཱུTlvwMuྲྀTlwwMuྲཱྀTlxwMuླྀTlywMuླཱྀTlzwVTl�wMuཱྀTl�wVTl�wMuྒྷTl�wVTl�wXTl�wVTl�wMuྜྷTl�wVTl�wMuྡྷTl�wVTl�wMuྦྷTl�wVTl�wMuྫྷTl�wVTl�wMuྐྵTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTlwVTl�wXTl�wMuⴧTl�wXTl�wMuⴭTl�wXTl�wVTl�wMuნTl�wVTl_wXTlawVTlIwXTlJwVTlNwXTlPwVTlWwXTlXwVTlYwXTlZwVTl^wXTl`wVTl�wXTl�wVLdTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTlwXTlwVTlwXTlwVTl[wXTl]wVTl}wXTl�wVTl�wXTl�wVTl�wXTl�wMuᏰTl�wMuᏱTl�wMuᏲTl�wMuᏳTl�wMuᏴTl�wMuᏵTl�wXTlwVTl�wXTl�wVTl�wXTl�wVTl�wXTlwVTl
wXTlwVTlwXTl wVTl7wXTl@wVTlTwXTl`wVTlmwXTlnwVTlqwXTlrwVTltwXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTlwVTlwXTlwVTlwITlwXTlwVTlwXTl wVTlywXTl�wVTl�wXTl�wVTl�wXTlwVTlwXTl wVTl,wXTl0wVTl<wXTl@wVTlAwXTlDwVTlnwXTlpwVTluwXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTlwXTlwVTl_wXTl`wVTl}wXTlwVTl�wXTl�wVLdTl�wXTl�wVTl�wXTl�wVTl�wXTlwVTlLwXTlPwVTl}wXTl�wVTl�wXTl�wVTl8wXTl;wVTlJwXTlMwVTl�wMuвTl�wMuдTl�wMuоTl�wMuсTl�wMuтTl�wMuъTl�wMuѣTl�wMuꙋTl�wXTl�wVTl�wXTl�wVTl�wXTlwVTl,wMwaTl-wMuæTl.wMwbTl/wVTl0wMwdTl1wMweTl2wMuǝTl3wMwgTl4wMwhTl5wMwiTl6wMwjTl7wMwkTl8wMwlTl9wMwmTl:wMwnTl;wVTl<wMwoTl=wMuȣTl>wMwpTl?wMwrTl@wMwtTlAwMwuTlBwMwwTlCwMwaTlDwMuɐTlEwMuɑTlFwMuᴂTlGwMwbTlHwMwdTlIwMweTlJwMuəTlKwMuɛTlLwMuɜTlMwMwgTlNwVTlOwMwkTlPwMwmTlQwMuŋTlRwMwoTlSwMuɔTlTwMuᴖTlUwMuᴗTlVwMwpTlWwMwtTlXwMwuTlYwMuᴝTlZwMuɯTl[wMwvTl\wMuᴥTl]wMuβTl^wMuγTl_wMuδTl`wMuφTlawMuχTlbwMwiTlcwMwrTldwMwuTlewMwvTlfwMuβTlgwMuγTlhwMuρTliwMuφTljwMuχTlkwVTlxwMuнTlywVTl�wMuɒTl�wMwcTl�wMuɕTl�wMuðLdTl�wMuɜTl�wMwfTl�wMuɟTl�wMuɡTl�wMuɥTl�wMuɨTl�wMuɩTl�wMuɪTl�wMuᵻTl�wMuʝTl�wMuɭTl�wMuᶅTl�wMuʟTl�wMuɱTl�wMuɰTl�wMuɲTl�wMuɳTl�wMuɴTl�wMuɵTl�wMuɸTl�wMuʂTl�wMuʃTl�wMuƫTl�wMuʉTl�wMuʊTl�wMuᴜTl�wMuʋTl�wMuʌTl�wMwzTl�wMuʐTl�wMuʑTl�wMuʒTl�wMuθTl�wVTl�wXTl�wVTlwMuḁTlwVTlwMuḃTlwVTlwMuḅTlwVTlwMuḇTlwVTlwMuḉTl	wVTl
wMuḋTlwVTlwMuḍTl
wVTlwMuḏTlwVTlwMuḑTlwVTlwMuḓTlwVTlwMuḕTlwVTlwMuḗTlwVTlwMuḙTlwVTlwMuḛTlwVTlwMuḝTlwVTlwMuḟTlwVTl wMuḡTl!wVTl"wMuḣTl#wVTl$wMuḥTl%wVTl&wMuḧTl'wVTl(wMuḩTl)wVTl*wMuḫTl+wVTl,wMuḭTl-wVTl.wMuḯTl/wVTl0wMuḱTl1wVTl2wMuḳTl3wVTl4wMuḵTl5wVTl6wMuḷTl7wVTl8wMuḹTl9wVTl:wMuḻTl;wVTl<wMuḽTl=wVTl>wMuḿTl?wVLdTl@wMuṁTlAwVTlBwMuṃTlCwVTlDwMuṅTlEwVTlFwMuṇTlGwVTlHwMuṉTlIwVTlJwMuṋTlKwVTlLwMuṍTlMwVTlNwMuṏTlOwVTlPwMuṑTlQwVTlRwMuṓTlSwVTlTwMuṕTlUwVTlVwMuṗTlWwVTlXwMuṙTlYwVTlZwMuṛTl[wVTl\wMuṝTl]wVTl^wMuṟTl_wVTl`wMuṡTlawVTlbwMuṣTlcwVTldwMuṥTlewVTlfwMuṧTlgwVTlhwMuṩTliwVTljwMuṫTlkwVTllwMuṭTlmwVTlnwMuṯTlowVTlpwMuṱTlqwVTlrwMuṳTlswVTltwMuṵTluwVTlvwMuṷTlwwVTlxwMuṹTlywVTlzwMuṻTl{wVTl|wMuṽTl}wVTl~wMuṿTlwVTl�wMuẁTl�wVTl�wMuẃTl�wVTl�wMuẅTl�wVTl�wMuẇTl�wVTl�wMuẉTl�wVTl�wMuẋTl�wVTl�wMuẍTl�wVTl�wMuẏTl�wVTl�wMuẑTl�wVTl�wMuẓTl�wVTl�wMuẕTl�wVTl�wMuaʾTl�wMuṡTl�wVTl�wMassTl�wVTl�wMuạTl�wVTl�wMuảTl�wVTl�wMuấTl�wVTl�wMuầTl�wVTl�wMuẩLdTl�wVTl�wMuẫTl�wVTl�wMuậTl�wVTl�wMuắTl�wVTl�wMuằTl�wVTl�wMuẳTl�wVTl�wMuẵTl�wVTl�wMuặTl�wVTl�wMuẹTl�wVTl�wMuẻTl�wVTl�wMuẽTl�wVTl�wMuếTl�wVTl�wMuềTl�wVTl�wMuểTl�wVTl�wMuễTl�wVTl�wMuệTl�wVTl�wMuỉTl�wVTl�wMuịTl�wVTl�wMuọTl�wVTl�wMuỏTl�wVTl�wMuốTl�wVTl�wMuồTl�wVTl�wMuổTl�wVTl�wMuỗTl�wVTl�wMuộTl�wVTl�wMuớTl�wVTl�wMuờTl�wVTl�wMuởTl�wVTl�wMuỡTl�wVTl�wMuợTl�wVTl�wMuụTl�wVTl�wMuủTl�wVTl�wMuứTl�wVTl�wMuừTl�wVTl�wMuửTl�wVTl�wMuữTl�wVTl�wMuựTl�wVTl�wMuỳTl�wVTl�wMuỵTl�wVTl�wMuỷTl�wVTl�wMuỹTl�wVTl�wMuỻTl�wVTl�wMuỽTl�wVTl�wMuỿTl�wVTlwMuἀTl	wMuἁTl
wMuἂTlwMuἃTlwMuἄTl
wMuἅTlwMuἆTlwMuἇTlwVTlwXTlwMuἐTlwMuἑTlwMuἒLdTlwMuἓTlwMuἔTlwMuἕTlwXTl wVTl(wMuἠTl)wMuἡTl*wMuἢTl+wMuἣTl,wMuἤTl-wMuἥTl.wMuἦTl/wMuἧTl0wVTl8wMuἰTl9wMuἱTl:wMuἲTl;wMuἳTl<wMuἴTl=wMuἵTl>wMuἶTl?wMuἷTl@wVTlFwXTlHwMuὀTlIwMuὁTlJwMuὂTlKwMuὃTlLwMuὄTlMwMuὅTlNwXTlPwVTlXwXTlYwMuὑTlZwXTl[wMuὓTl\wXTl]wMuὕTl^wXTl_wMuὗTl`wVTlhwMuὠTliwMuὡTljwMuὢTlkwMuὣTllwMuὤTlmwMuὥTlnwMuὦTlowMuὧTlpwVTlqwMuάTlrwVTlswMuέTltwVTluwMuήTlvwVTlwwMuίTlxwVTlywMuόTlzwVTl{wMuύTl|wVTl}wMuώTl~wXTl�wMuἀιTl�wMuἁιTl�wMuἂιTl�wMuἃιTl�wMuἄιTl�wMuἅιTl�wMuἆιTl�wMuἇιTl�wMuἀιTl�wMuἁιTl�wMuἂιTl�wMuἃιTl�wMuἄιTl�wMuἅιTl�wMuἆιTl�wMuἇιTl�wMuἠιTl�wMuἡιTl�wMuἢιTl�wMuἣιTl�wMuἤιTl�wMuἥιTl�wMuἦιTl�wMuἧιTl�wMuἠιTl�wMuἡιTl�wMuἢιTl�wMuἣιTl�wMuἤιTl�wMuἥιTl�wMuἦιTl�wMuἧιTl�wMuὠιTl�wMuὡιTl�wMuὢιTl�wMuὣιLdTl�wMuὤιTl�wMuὥιTl�wMuὦιTl�wMuὧιTl�wMuὠιTl�wMuὡιTl�wMuὢιTl�wMuὣιTl�wMuὤιTl�wMuὥιTl�wMuὦιTl�wMuὧιTl�wVTl�wMuὰιTl�wMuαιTl�wMuάιTl�wXTl�wVTl�wMuᾶιTl�wMuᾰTl�wMuᾱTl�wMuὰTl�wMuάTl�wMuαιTl�w3u ̓Tl�wMuιTl�w3u ̓Tl�w3u ͂Tl�w3u ̈͂Tl�wMuὴιTl�wMuηιTl�wMuήιTl�wXTl�wVTl�wMuῆιTl�wMuὲTl�wMuέTl�wMuὴTl�wMuήTl�wMuηιTl�w3u ̓̀Tl�w3u ̓́Tl�w3u ̓͂Tl�wVTl�wMuΐTl�wXTl�wVTl�wMuῐTl�wMuῑTl�wMuὶTl�wMuίTl�wXTl�w3u ̔̀Tl�w3u ̔́Tl�w3u ̔͂Tl�wVTl�wMuΰTl�wVTl�wMuῠTl�wMuῡTl�wMuὺTl�wMuύTl�wMuῥTl�w3u ̈̀Tl�w3u ̈́Tl�w3w`Tl�wXTl�wMuὼιTl�wMuωιTl�wMuώιTl�wXTl�wVTl�wMuῶιTl�wMuὸTl�wMuόTl�wMuὼTl�wMuώTl�wMuωιTl�w3u ́Tl�w3u ̔Tl�wXTl w3w Tl wITl wDuTl wXTl wVTl wMu‐Tl wVTl w3u ̳Tl wVTl$ wXTl' wVTl( wXTl/ w3w Tl0 wVTl3 wMu′′Tl4 wMu′′′Tl5 wVTl6 wMu‵‵Tl7 wMu‵‵‵LdTl8 wVTl< w3u!!Tl= wVTl> w3u ̅Tl? wVTlG w3u??TlH w3u?!TlI w3u!?TlJ wVTlW wMu′′′′TlX wVTl_ w3w Tl` wITla wXTld wITle wXTlp wMw0Tlq wMwiTlr wXTlt wMw4Tlu wMw5Tlv wMw6Tlw wMw7Tlx wMw8Tly wMw9Tlz w3w+Tl{ wMu−Tl| w3w=Tl} w3w(Tl~ w3w)Tl wMwnTl� wMw0Tl� wMw1Tl� wMw2Tl� wMw3Tl� wMw4Tl� wMw5Tl� wMw6Tl� wMw7Tl� wMw8Tl� wMw9Tl� w3w+Tl� wMu−Tl� w3w=Tl� w3w(Tl� w3w)Tl� wXTl� wMwaTl� wMweTl� wMwoTl� wMwxTl� wMuəTl� wMwhTl� wMwkTl� wMwlTl� wMwmTl� wMwnTl� wMwpTl� wMwsTl� wMwtTl� wXTl� wVTl� wMarsTl� wVTl� wXTl� wVTl� wXTl!w3ua/cTl!w3ua/sTl!wMwcTl!wMu°cTl!wVTl!w3uc/oTl!w3uc/uTl!wMuɛTl!wVTl	!wMu°fTl
!wMwgTl!wMwhTl!wMuħTl!wMwiTl!wMwlTl!wVTl!wMwnTl!wManoTl!wVTl!wMwpTl!wMwqTl!wMwrTl!wVTl !wMasmTl!!wMatelTl"!wMatmTl#!wVTl$!wMwzTl%!wVTl&!wMuωTl'!wVTl(!wMwzTl)!wVLdTl*!wMwkTl+!wMuåTl,!wMwbTl-!wMwcTl.!wVTl/!wMweTl1!wMwfTl2!wXTl3!wMwmTl4!wMwoTl5!wMuאTl6!wMuבTl7!wMuגTl8!wMuדTl9!wMwiTl:!wVTl;!wMafaxTl<!wMuπTl=!wMuγTl?!wMuπTl@!wMu∑TlA!wVTlE!wMwdTlG!wMweTlH!wMwiTlI!wMwjTlJ!wVTlP!wMu1⁄7TlQ!wMu1⁄9TlR!wMu1⁄10TlS!wMu1⁄3TlT!wMu2⁄3TlU!wMu1⁄5TlV!wMu2⁄5TlW!wMu3⁄5TlX!wMu4⁄5TlY!wMu1⁄6TlZ!wMu5⁄6Tl[!wMu1⁄8Tl\!wMu3⁄8Tl]!wMu5⁄8Tl^!wMu7⁄8Tl_!wMu1⁄Tl`!wMwiTla!wMaiiTlb!wMaiiiTlc!wMaivTld!wMwvTle!wMaviTlf!wMaviiTlg!wMaviiiTlh!wMaixTli!wMwxTlj!wMaxiTlk!wMaxiiTll!wMwlTlm!wMwcTln!wMwdTlo!wMwmTlp!wMwiTlq!wMaiiTlr!wMaiiiTls!wMaivTlt!wMwvTlu!wMaviTlv!wMaviiTlw!wMaviiiTlx!wMaixTly!wMwxTlz!wMaxiTl{!wMaxiiTl|!wMwlTl}!wMwcTl~!wMwdTl!wMwmTl�!wVTl�!wXTl�!wVTl�!wMu0⁄3Tl�!wVTl�!wXTl�!wVTl,"wMu∫∫Tl-"wMu∫∫∫Tl."wVTl/"wMu∮∮Tl0"wMu∮∮∮Tl1"wVTl`"w3Tla"wVTln"w3Tlp"wVTl)#wMu〈Tl*#wMu〉Tl+#wVTl'$wXTl@$wVTlK$wXTl`$wMw1Tla$wMw2LdTlb$wMw3Tlc$wMw4Tld$wMw5Tle$wMw6Tlf$wMw7Tlg$wMw8Tlh$wMw9Tli$wMu10Tlj$wMu11Tlk$wMu12Tll$wMu13Tlm$wMu14Tln$wMu15Tlo$wMu16Tlp$wMu17Tlq$wMu18Tlr$wMu19Tls$wMu20Tlt$w3u(1)Tlu$w3u(2)Tlv$w3u(3)Tlw$w3u(4)Tlx$w3u(5)Tly$w3u(6)Tlz$w3u(7)Tl{$w3u(8)Tl|$w3u(9)Tl}$w3u(10)Tl~$w3u(11)Tl$w3u(12)Tl�$w3u(13)Tl�$w3u(14)Tl�$w3u(15)Tl�$w3u(16)Tl�$w3u(17)Tl�$w3u(18)Tl�$w3u(19)Tl�$w3u(20)Tl�$wXTl�$w3u(a)Tl�$w3u(b)Tl�$w3u(c)Tl�$w3u(d)Tl�$w3u(e)Tl�$w3u(f)Tl�$w3u(g)Tl�$w3u(h)Tl�$w3u(i)Tl�$w3u(j)Tl�$w3u(k)Tl�$w3u(l)Tl�$w3u(m)Tl�$w3u(n)Tl�$w3u(o)Tl�$w3u(p)Tl�$w3u(q)Tl�$w3u(r)Tl�$w3u(s)Tl�$w3u(t)Tl�$w3u(u)Tl�$w3u(v)Tl�$w3u(w)Tl�$w3u(x)Tl�$w3u(y)Tl�$w3u(z)Tl�$wMwaTl�$wMwbTl�$wMwcTl�$wMwdTl�$wMweTl�$wMwfTl�$wMwgTl�$wMwhTl�$wMwiTl�$wMwjTl�$wMwkTl�$wMwlTl�$wMwmTl�$wMwnTl�$wMwoTl�$wMwpTl�$wMwqTl�$wMwrTl�$wMwsTl�$wMwtTl�$wMwuTl�$wMwvTl�$wMwwTl�$wMwxTl�$wMwyTl�$wMwzTl�$wMwaTl�$wMwbTl�$wMwcTl�$wMwdTl�$wMweTl�$wMwfTl�$wMwgTl�$wMwhTl�$wMwiLdTl�$wMwjTl�$wMwkTl�$wMwlTl�$wMwmTl�$wMwnTl�$wMwoTl�$wMwpTl�$wMwqTl�$wMwrTl�$wMwsTl�$wMwtTl�$wMwuTl�$wMwvTl�$wMwwTl�$wMwxTl�$wMwyTl�$wMwzTl�$wMw0Tl�$wVTl*wMu∫∫∫∫Tl
*wVTlt*w3u::=Tlu*w3u==Tlv*w3u===Tlw*wVTl�*wMu⫝̸Tl�*wVTlt+wXTlv+wVTl�+wXTl�+wVTl�+wXTl�+wVTl�+wXTl,wMuⰰTl,wMuⰱTl,wMuⰲTl,wMuⰳTl,wMuⰴTl,wMuⰵTl,wMuⰶTl,wMuⰷTl,wMuⰸTl	,wMuⰹTl
,wMuⰺTl,wMuⰻTl,wMuⰼTl
,wMuⰽTl,wMuⰾTl,wMuⰿTl,wMuⱀTl,wMuⱁTl,wMuⱂTl,wMuⱃTl,wMuⱄTl,wMuⱅTl,wMuⱆTl,wMuⱇTl,wMuⱈTl,wMuⱉTl,wMuⱊTl,wMuⱋTl,wMuⱌTl,wMuⱍTl,wMuⱎTl,wMuⱏTl ,wMuⱐTl!,wMuⱑTl",wMuⱒTl#,wMuⱓTl$,wMuⱔTl%,wMuⱕTl&,wMuⱖTl',wMuⱗTl(,wMuⱘTl),wMuⱙTl*,wMuⱚTl+,wMuⱛTl,,wMuⱜTl-,wMuⱝTl.,wMuⱞTl/,wXTl0,wVTl_,wXTl`,wMuⱡTla,wVTlb,wMuɫTlc,wMuᵽTld,wMuɽTle,wVTlg,wMuⱨTlh,wVTli,wMuⱪTlj,wVTlk,wMuⱬTll,wVTlm,wMuɑTln,wMuɱTlo,wMuɐTlp,wMuɒLdTlq,wVTlr,wMuⱳTls,wVTlu,wMuⱶTlv,wVTl|,wMwjTl},wMwvTl~,wMuȿTl,wMuɀTl�,wMuⲁTl�,wVTl�,wMuⲃTl�,wVTl�,wMuⲅTl�,wVTl�,wMuⲇTl�,wVTl�,wMuⲉTl�,wVTl�,wMuⲋTl�,wVTl�,wMuⲍTl�,wVTl�,wMuⲏTl�,wVTl�,wMuⲑTl�,wVTl�,wMuⲓTl�,wVTl�,wMuⲕTl�,wVTl�,wMuⲗTl�,wVTl�,wMuⲙTl�,wVTl�,wMuⲛTl�,wVTl�,wMuⲝTl�,wVTl�,wMuⲟTl�,wVTl�,wMuⲡTl�,wVTl�,wMuⲣTl�,wVTl�,wMuⲥTl�,wVTl�,wMuⲧTl�,wVTl�,wMuⲩTl�,wVTl�,wMuⲫTl�,wVTl�,wMuⲭTl�,wVTl�,wMuⲯTl�,wVTl�,wMuⲱTl�,wVTl�,wMuⲳTl�,wVTl�,wMuⲵTl�,wVTl�,wMuⲷTl�,wVTl�,wMuⲹTl�,wVTl�,wMuⲻTl�,wVTl�,wMuⲽTl�,wVTl�,wMuⲿTl�,wVTl�,wMuⳁTl�,wVTl�,wMuⳃTl�,wVTl�,wMuⳅTl�,wVTl�,wMuⳇTl�,wVTl�,wMuⳉTl�,wVTl�,wMuⳋTl�,wVTl�,wMuⳍTl�,wVTl�,wMuⳏTl�,wVTl�,wMuⳑTl�,wVTl�,wMuⳓTl�,wVTl�,wMuⳕTl�,wVTl�,wMuⳗTl�,wVTl�,wMuⳙTl�,wVTl�,wMuⳛLdTl�,wVTl�,wMuⳝTl�,wVTl�,wMuⳟTl�,wVTl�,wMuⳡTl�,wVTl�,wMuⳣTl�,wVTl�,wMuⳬTl�,wVTl�,wMuⳮTl�,wVTl�,wMuⳳTl�,wVTl�,wXTl�,wVTl&-wXTl'-wVTl(-wXTl--wVTl.-wXTl0-wVTlh-wXTlo-wMuⵡTlp-wVTlq-wXTl-wVTl�-wXTl�-wVTl�-wXTl�-wVTl�-wXTl�-wVTl�-wXTl�-wVTl�-wXTl�-wVTl�-wXTl�-wVTl�-wXTl�-wVTl�-wXTl�-wVTl�-wXTl�-wVTlO.wXTl�.wVTl�.wXTl�.wVTl�.wMu母Tl�.wVTl�.wMu龟Tl�.wXTl/wMu一Tl/wMu丨Tl/wMu丶Tl/wMu丿Tl/wMu乙Tl/wMu亅Tl/wMu二Tl/wMu亠Tl/wMu人Tl	/wMu儿Tl
/wMu入Tl/wMu八Tl/wMu冂Tl
/wMu冖Tl/wMu冫Tl/wMu几Tl/wMu凵Tl/wMu刀Tl/wMu力Tl/wMu勹Tl/wMu匕Tl/wMu匚Tl/wMu匸Tl/wMu十Tl/wMu卜Tl/wMu卩Tl/wMu厂Tl/wMu厶Tl/wMu又Tl/wMu口Tl/wMu囗Tl/wMu土Tl /wMu士Tl!/wMu夂Tl"/wMu夊Tl#/wMu夕Tl$/wMu大Tl%/wMu女Tl&/wMu子Tl'/wMu宀Tl(/wMu寸Tl)/wMu小Tl*/wMu尢Tl+/wMu尸Tl,/wMu屮Tl-/wMu山LdTl./wMu巛Tl//wMu工Tl0/wMu己Tl1/wMu巾Tl2/wMu干Tl3/wMu幺Tl4/wMu广Tl5/wMu廴Tl6/wMu廾Tl7/wMu弋Tl8/wMu弓Tl9/wMu彐Tl:/wMu彡Tl;/wMu彳Tl</wMu心Tl=/wMu戈Tl>/wMu戶Tl?/wMu手Tl@/wMu支TlA/wMu攴TlB/wMu文TlC/wMu斗TlD/wMu斤TlE/wMu方TlF/wMu无TlG/wMu日TlH/wMu曰TlI/wMu月TlJ/wMu木TlK/wMu欠TlL/wMu止TlM/wMu歹TlN/wMu殳TlO/wMu毋TlP/wMu比TlQ/wMu毛TlR/wMu氏TlS/wMu气TlT/wMu水TlU/wMu火TlV/wMu爪TlW/wMu父TlX/wMu爻TlY/wMu爿TlZ/wMu片Tl[/wMu牙Tl\/wMu牛Tl]/wMu犬Tl^/wMu玄Tl_/wMu玉Tl`/wMu瓜Tla/wMu瓦Tlb/wMu甘Tlc/wMu生Tld/wMu用Tle/wMu田Tlf/wMu疋Tlg/wMu疒Tlh/wMu癶Tli/wMu白Tlj/wMu皮Tlk/wMu皿Tll/wMu目Tlm/wMu矛Tln/wMu矢Tlo/wMu石Tlp/wMu示Tlq/wMu禸Tlr/wMu禾Tls/wMu穴Tlt/wMu立Tlu/wMu竹Tlv/wMu米Tlw/wMu糸Tlx/wMu缶Tly/wMu网Tlz/wMu羊Tl{/wMu羽Tl|/wMu老Tl}/wMu而Tl~/wMu耒Tl/wMu耳Tl�/wMu聿Tl�/wMu肉Tl�/wMu臣Tl�/wMu自Tl�/wMu至Tl�/wMu臼Tl�/wMu舌Tl�/wMu舛Tl�/wMu舟Tl�/wMu艮Tl�/wMu色Tl�/wMu艸Tl�/wMu虍Tl�/wMu虫Tl�/wMu血Tl�/wMu行Tl�/wMu衣Tl�/wMu襾LdTl�/wMu見Tl�/wMu角Tl�/wMu言Tl�/wMu谷Tl�/wMu豆Tl�/wMu豕Tl�/wMu豸Tl�/wMu貝Tl�/wMu赤Tl�/wMu走Tl�/wMu足Tl�/wMu身Tl�/wMu車Tl�/wMu辛Tl�/wMu辰Tl�/wMu辵Tl�/wMu邑Tl�/wMu酉Tl�/wMu釆Tl�/wMu里Tl�/wMu金Tl�/wMu長Tl�/wMu門Tl�/wMu阜Tl�/wMu隶Tl�/wMu隹Tl�/wMu雨Tl�/wMu靑Tl�/wMu非Tl�/wMu面Tl�/wMu革Tl�/wMu韋Tl�/wMu韭Tl�/wMu音Tl�/wMu頁Tl�/wMu風Tl�/wMu飛Tl�/wMu食Tl�/wMu首Tl�/wMu香Tl�/wMu馬Tl�/wMu骨Tl�/wMu高Tl�/wMu髟Tl�/wMu鬥Tl�/wMu鬯Tl�/wMu鬲Tl�/wMu鬼Tl�/wMu魚Tl�/wMu鳥Tl�/wMu鹵Tl�/wMu鹿Tl�/wMu麥Tl�/wMu麻Tl�/wMu黃Tl�/wMu黍Tl�/wMu黑Tl�/wMu黹Tl�/wMu黽Tl�/wMu鼎Tl�/wMu鼓Tl�/wMu鼠Tl�/wMu鼻Tl�/wMu齊Tl�/wMu齒Tl�/wMu龍Tl�/wMu龜Tl�/wMu龠Tl�/wXTl0w3w Tl0wVTl0wMw.Tl0wVTl60wMu〒Tl70wVTl80wMu十Tl90wMu卄Tl:0wMu卅Tl;0wVTl@0wXTlA0wVTl�0wXTl�0wVTl�0w3u ゙Tl�0w3u ゚Tl�0wVTl�0wMuよりTl�0wVTl�0wMuコトTl1wXTl1wVTl01wXTl11wMuᄀTl21wMuᄁTl31wMuᆪTl41wMuᄂTl51wMuᆬTl61wMuᆭTl71wMuᄃTl81wMuᄄLdTl91wMuᄅTl:1wMuᆰTl;1wMuᆱTl<1wMuᆲTl=1wMuᆳTl>1wMuᆴTl?1wMuᆵTl@1wMuᄚTlA1wMuᄆTlB1wMuᄇTlC1wMuᄈTlD1wMuᄡTlE1wMuᄉTlF1wMuᄊTlG1wMuᄋTlH1wMuᄌTlI1wMuᄍTlJ1wMuᄎTlK1wMuᄏTlL1wMuᄐTlM1wMuᄑTlN1wMuᄒTlO1wMuᅡTlP1wMuᅢTlQ1wMuᅣTlR1wMuᅤTlS1wMuᅥTlT1wMuᅦTlU1wMuᅧTlV1wMuᅨTlW1wMuᅩTlX1wMuᅪTlY1wMuᅫTlZ1wMuᅬTl[1wMuᅭTl\1wMuᅮTl]1wMuᅯTl^1wMuᅰTl_1wMuᅱTl`1wMuᅲTla1wMuᅳTlb1wMuᅴTlc1wMuᅵTld1wXTle1wMuᄔTlf1wMuᄕTlg1wMuᇇTlh1wMuᇈTli1wMuᇌTlj1wMuᇎTlk1wMuᇓTll1wMuᇗTlm1wMuᇙTln1wMuᄜTlo1wMuᇝTlp1wMuᇟTlq1wMuᄝTlr1wMuᄞTls1wMuᄠTlt1wMuᄢTlu1wMuᄣTlv1wMuᄧTlw1wMuᄩTlx1wMuᄫTly1wMuᄬTlz1wMuᄭTl{1wMuᄮTl|1wMuᄯTl}1wMuᄲTl~1wMuᄶTl1wMuᅀTl�1wMuᅇTl�1wMuᅌTl�1wMuᇱTl�1wMuᇲTl�1wMuᅗTl�1wMuᅘTl�1wMuᅙTl�1wMuᆄTl�1wMuᆅTl�1wMuᆈTl�1wMuᆑTl�1wMuᆒTl�1wMuᆔTl�1wMuᆞTl�1wMuᆡTl�1wXTl�1wVTl�1wMu一Tl�1wMu二Tl�1wMu三Tl�1wMu四Tl�1wMu上Tl�1wMu中Tl�1wMu下Tl�1wMu甲Tl�1wMu乙Tl�1wMu丙Tl�1wMu丁Tl�1wMu天LdTl�1wMu地Tl�1wMu人Tl�1wVTl�1wXTl�1wVTl�1wXTl�1wVTl2w3u(ᄀ)Tl2w3u(ᄂ)Tl2w3u(ᄃ)Tl2w3u(ᄅ)Tl2w3u(ᄆ)Tl2w3u(ᄇ)Tl2w3u(ᄉ)Tl2w3u(ᄋ)Tl2w3u(ᄌ)Tl	2w3u(ᄎ)Tl
2w3u(ᄏ)Tl2w3u(ᄐ)Tl2w3u(ᄑ)Tl
2w3u(ᄒ)Tl2w3u(가)Tl2w3u(나)Tl2w3u(다)Tl2w3u(라)Tl2w3u(마)Tl2w3u(바)Tl2w3u(사)Tl2w3u(아)Tl2w3u(자)Tl2w3u(차)Tl2w3u(카)Tl2w3u(타)Tl2w3u(파)Tl2w3u(하)Tl2w3u(주)Tl2w3u(오전)Tl2w3u(오후)Tl2wXTl 2w3u(一)Tl!2w3u(二)Tl"2w3u(三)Tl#2w3u(四)Tl$2w3u(五)Tl%2w3u(六)Tl&2w3u(七)Tl'2w3u(八)Tl(2w3u(九)Tl)2w3u(十)Tl*2w3u(月)Tl+2w3u(火)Tl,2w3u(水)Tl-2w3u(木)Tl.2w3u(金)Tl/2w3u(土)Tl02w3u(日)Tl12w3u(株)Tl22w3u(有)Tl32w3u(社)Tl42w3u(名)Tl52w3u(特)Tl62w3u(財)Tl72w3u(祝)Tl82w3u(労)Tl92w3u(代)Tl:2w3u(呼)Tl;2w3u(学)Tl<2w3u(監)Tl=2w3u(企)Tl>2w3u(資)Tl?2w3u(協)Tl@2w3u(祭)TlA2w3u(休)TlB2w3u(自)TlC2w3u(至)TlD2wMu問TlE2wMu幼TlF2wMu文TlG2wMu箏TlH2wVTlP2wMapteTlQ2wMu21TlR2wMu22TlS2wMu23TlT2wMu24TlU2wMu25TlV2wMu26TlW2wMu27TlX2wMu28TlY2wMu29TlZ2wMu30Tl[2wMu31Tl\2wMu32Tl]2wMu33Tl^2wMu34Tl_2wMu35Tl`2wMuᄀTla2wMuᄂTlb2wMuᄃTlc2wMuᄅLdTld2wMuᄆTle2wMuᄇTlf2wMuᄉTlg2wMuᄋTlh2wMuᄌTli2wMuᄎTlj2wMuᄏTlk2wMuᄐTll2wMuᄑTlm2wMuᄒTln2wMu가Tlo2wMu나Tlp2wMu다Tlq2wMu라Tlr2wMu마Tls2wMu바Tlt2wMu사Tlu2wMu아Tlv2wMu자Tlw2wMu차Tlx2wMu카Tly2wMu타Tlz2wMu파Tl{2wMu하Tl|2wMu참고Tl}2wMu주의Tl~2wMu우Tl2wVTl�2wMu一Tl�2wMu二Tl�2wMu三Tl�2wMu四Tl�2wMu五Tl�2wMu六Tl�2wMu七Tl�2wMu八Tl�2wMu九Tl�2wMu十Tl�2wMu月Tl�2wMu火Tl�2wMu水Tl�2wMu木Tl�2wMu金Tl�2wMu土Tl�2wMu日Tl�2wMu株Tl�2wMu有Tl�2wMu社Tl�2wMu名Tl�2wMu特Tl�2wMu財Tl�2wMu祝Tl�2wMu労Tl�2wMu秘Tl�2wMu男Tl�2wMu女Tl�2wMu適Tl�2wMu優Tl�2wMu印Tl�2wMu注Tl�2wMu項Tl�2wMu休Tl�2wMu写Tl�2wMu正Tl�2wMu上Tl�2wMu中Tl�2wMu下Tl�2wMu左Tl�2wMu右Tl�2wMu医Tl�2wMu宗Tl�2wMu学Tl�2wMu監Tl�2wMu企Tl�2wMu資Tl�2wMu協Tl�2wMu夜Tl�2wMu36Tl�2wMu37Tl�2wMu38Tl�2wMu39Tl�2wMu40Tl�2wMu41Tl�2wMu42Tl�2wMu43Tl�2wMu44Tl�2wMu45Tl�2wMu46Tl�2wMu47Tl�2wMu48Tl�2wMu49Tl�2wMu50Tl�2wMu1月Tl�2wMu2月Tl�2wMu3月Tl�2wMu4月Tl�2wMu5月Tl�2wMu6月Tl�2wMu7月Tl�2wMu8月LdTl�2wMu9月Tl�2wMu10月Tl�2wMu11月Tl�2wMu12月Tl�2wMahgTl�2wMaergTl�2wMaevTl�2wMaltdTl�2wMuアTl�2wMuイTl�2wMuウTl�2wMuエTl�2wMuオTl�2wMuカTl�2wMuキTl�2wMuクTl�2wMuケTl�2wMuコTl�2wMuサTl�2wMuシTl�2wMuスTl�2wMuセTl�2wMuソTl�2wMuタTl�2wMuチTl�2wMuツTl�2wMuテTl�2wMuトTl�2wMuナTl�2wMuニTl�2wMuヌTl�2wMuネTl�2wMuノTl�2wMuハTl�2wMuヒTl�2wMuフTl�2wMuヘTl�2wMuホTl�2wMuマTl�2wMuミTl�2wMuムTl�2wMuメTl�2wMuモTl�2wMuヤTl�2wMuユTl�2wMuヨTl�2wMuラTl�2wMuリTl�2wMuルTl�2wMuレTl�2wMuロTl�2wMuワTl�2wMuヰTl�2wMuヱTl�2wMuヲTl�2wXTl3wMuアパートTl3wMuアルファTl3wMuアンペアTl3wMuアールTl3wMuイニングTl3wMuインチTl3wMuウォンTl3wMuエスクードTl3wMuエーカーTl	3wMuオンスTl
3wMuオームTl3wMuカイリTl3wMuカラットTl
3wMuカロリーTl3wMuガロンTl3wMuガンマTl3wMuギガTl3wMuギニーTl3wMuキュリーTl3wMuギルダーTl3wMuキロTl3wMuキログラムTl3wMuキロメートルTl3wMuキロワットTl3wMuグラムTl3wMuグラムトンTl3wMuクルゼイロTl3wMuクローネTl3wMuケースTl3wMuコルナTl3wMuコーポTl3wMuサイクルTl 3wMuサンチームTl!3wMuシリングTl"3wMuセンチTl#3wMuセントTl$3wMuダースTl%3wMuデシTl&3wMuドルTl'3wMuトンTl(3wMuナノTl)3wMuノットTl*3wMuハイツTl+3wMuパーセントLdTl,3wMuパーツTl-3wMuバーレルTl.3wMuピアストルTl/3wMuピクルTl03wMuピコTl13wMuビルTl23wMuファラッドTl33wMuフィートTl43wMuブッシェルTl53wMuフランTl63wMuヘクタールTl73wMuペソTl83wMuペニヒTl93wMuヘルツTl:3wMuペンスTl;3wMuページTl<3wMuベータTl=3wMuポイントTl>3wMuボルトTl?3wMuホンTl@3wMuポンドTlA3wMuホールTlB3wMuホーンTlC3wMuマイクロTlD3wMuマイルTlE3wMuマッハTlF3wMuマルクTlG3wMuマンションTlH3wMuミクロンTlI3wMuミリTlJ3wMuミリバールTlK3wMuメガTlL3wMuメガトンTlM3wMuメートルTlN3wMuヤードTlO3wMuヤールTlP3wMuユアンTlQ3wMuリットルTlR3wMuリラTlS3wMuルピーTlT3wMuルーブルTlU3wMuレムTlV3wMuレントゲンTlW3wMuワットTlX3wMu0点TlY3wMu1点TlZ3wMu2点Tl[3wMu3点Tl\3wMu4点Tl]3wMu5点Tl^3wMu6点Tl_3wMu7点Tl`3wMu8点Tla3wMu9点Tlb3wMu10点Tlc3wMu11点Tld3wMu12点Tle3wMu13点Tlf3wMu14点Tlg3wMu15点Tlh3wMu16点Tli3wMu17点Tlj3wMu18点Tlk3wMu19点Tll3wMu20点Tlm3wMu21点Tln3wMu22点Tlo3wMu23点Tlp3wMu24点Tlq3wMahpaTlr3wMadaTls3wMaauTlt3wMabarTlu3wMaovTlv3wMapcTlw3wMadmTlx3wMadm2Tly3wMadm3Tlz3wMaiuTl{3wMu平成Tl|3wMu昭和Tl}3wMu大正Tl~3wMu明治Tl3wMu株式会社Tl�3wMapaTl�3wManaTl�3wMuμaTl�3wMamaTl�3wMakaTl�3wMakbTl�3wMambTl�3wMagbTl�3wMacalTl�3wMakcalTl�3wMapfTl�3wManfTl�3wMuμfTl�3wMuμgTl�3wMamgTl�3wMakgLdTl�3wMahzTl�3wMakhzTl�3wMamhzTl�3wMaghzTl�3wMathzTl�3wMuμlTl�3wMamlTl�3wMadlTl�3wMaklTl�3wMafmTl�3wManmTl�3wMuμmTl�3wMammTl�3wMacmTl�3wMakmTl�3wMamm2Tl�3wMacm2Tl�3wMam2Tl�3wMakm2Tl�3wMamm3Tl�3wMacm3Tl�3wMam3Tl�3wMakm3Tl�3wMum∕sTl�3wMum∕s2Tl�3wMapaTl�3wMakpaTl�3wMampaTl�3wMagpaTl�3wMaradTl�3wMurad∕sTl�3wMurad∕s2Tl�3wMapsTl�3wMansTl�3wMuμsTl�3wMamsTl�3wMapvTl�3wManvTl�3wMuμvTl�3wMamvTl�3wMakvTl�3wMamvTl�3wMapwTl�3wManwTl�3wMuμwTl�3wMamwTl�3wMakwTl�3wMamwTl�3wMukωTl�3wMumωTl�3wXTl�3wMabqTl�3wMaccTl�3wMacdTl�3wMuc∕kgTl�3wXTl�3wMadbTl�3wMagyTl�3wMahaTl�3wMahpTl�3wMainTl�3wMakkTl�3wMakmTl�3wMaktTl�3wMalmTl�3wMalnTl�3wMalogTl�3wMalxTl�3wMambTl�3wMamilTl�3wMamolTl�3wMaphTl�3wXTl�3wMappmTl�3wMaprTl�3wMasrTl�3wMasvTl�3wMawbTl�3wMuv∕mTl�3wMua∕mTl�3wMu1日Tl�3wMu2日Tl�3wMu3日Tl�3wMu4日Tl�3wMu5日Tl�3wMu6日Tl�3wMu7日Tl�3wMu8日Tl�3wMu9日Tl�3wMu10日Tl�3wMu11日Tl�3wMu12日Tl�3wMu13日Tl�3wMu14日Tl�3wMu15日Tl�3wMu16日Tl�3wMu17日Tl�3wMu18日Tl�3wMu19日Tl�3wMu20日LdTl�3wMu21日Tl�3wMu22日Tl�3wMu23日Tl�3wMu24日Tl�3wMu25日Tl�3wMu26日Tl�3wMu27日Tl�3wMu28日Tl�3wMu29日Tl�3wMu30日Tl�3wMu31日Tl�3wMagalTl4wVTl�MwXTl�MwVTl�wXTl�wVTl��wXTl��wVTlǤwXTlФwVTl,�wXTl@�wMuꙁTlA�wVTlB�wMuꙃTlC�wVTlD�wMuꙅTlE�wVTlF�wMuꙇTlG�wVTlH�wMuꙉTlI�wVTlJ�wMuꙋTlK�wVTlL�wMuꙍTlM�wVTlN�wMuꙏTlO�wVTlP�wMuꙑTlQ�wVTlR�wMuꙓTlS�wVTlT�wMuꙕTlU�wVTlV�wMuꙗTlW�wVTlX�wMuꙙTlY�wVTlZ�wMuꙛTl[�wVTl\�wMuꙝTl]�wVTl^�wMuꙟTl_�wVTl`�wMuꙡTla�wVTlb�wMuꙣTlc�wVTld�wMuꙥTle�wVTlf�wMuꙧTlg�wVTlh�wMuꙩTli�wVTlj�wMuꙫTlk�wVTll�wMuꙭTlm�wVTl��wMuꚁTl��wVTl��wMuꚃTl��wVTl��wMuꚅTl��wVTl��wMuꚇTl��wVTl��wMuꚉTl��wVTl��wMuꚋTl��wVTl��wMuꚍTl��wVTl��wMuꚏTl��wVTl��wMuꚑTl��wVTl��wMuꚓTl��wVTl��wMuꚕTl��wVTl��wMuꚗTl��wVTl��wMuꚙTl��wVTl��wMuꚛTl��wVTl��wMuъTl��wMuьTl��wVTl��wXLdTl�wVTl"�wMuꜣTl#�wVTl$�wMuꜥTl%�wVTl&�wMuꜧTl'�wVTl(�wMuꜩTl)�wVTl*�wMuꜫTl+�wVTl,�wMuꜭTl-�wVTl.�wMuꜯTl/�wVTl2�wMuꜳTl3�wVTl4�wMuꜵTl5�wVTl6�wMuꜷTl7�wVTl8�wMuꜹTl9�wVTl:�wMuꜻTl;�wVTl<�wMuꜽTl=�wVTl>�wMuꜿTl?�wVTl@�wMuꝁTlA�wVTlB�wMuꝃTlC�wVTlD�wMuꝅTlE�wVTlF�wMuꝇTlG�wVTlH�wMuꝉTlI�wVTlJ�wMuꝋTlK�wVTlL�wMuꝍTlM�wVTlN�wMuꝏTlO�wVTlP�wMuꝑTlQ�wVTlR�wMuꝓTlS�wVTlT�wMuꝕTlU�wVTlV�wMuꝗTlW�wVTlX�wMuꝙTlY�wVTlZ�wMuꝛTl[�wVTl\�wMuꝝTl]�wVTl^�wMuꝟTl_�wVTl`�wMuꝡTla�wVTlb�wMuꝣTlc�wVTld�wMuꝥTle�wVTlf�wMuꝧTlg�wVTlh�wMuꝩTli�wVTlj�wMuꝫTlk�wVTll�wMuꝭTlm�wVTln�wMuꝯTlo�wVTlp�wMuꝯTlq�wVTly�wMuꝺTlz�wVTl{�wMuꝼTl|�wVTl}�wMuᵹTl~�wMuꝿTl�wVTl��wMuꞁTl��wVTl��wMuꞃTl��wVTl��wMuꞅTl��wVTl��wMuꞇTl��wVTl��wMuꞌTl��wVTl��wMuɥTl��wVTl��wMuꞑTl��wVLdTl��wMuꞓTl��wVTl��wMuꞗTl��wVTl��wMuꞙTl��wVTl��wMuꞛTl��wVTl��wMuꞝTl��wVTl��wMuꞟTl��wVTl��wMuꞡTl��wVTl��wMuꞣTl��wVTl��wMuꞥTl��wVTl��wMuꞧTl��wVTl��wMuꞩTl��wVTl��wMuɦTl��wMuɜTl��wMuɡTl��wMuɬTl��wMuɪTl��wVTl��wMuʞTl��wMuʇTl��wMuʝTl��wMuꭓTl��wMuꞵTl��wVTl��wMuꞷTl��wVTl��wXTl��wVTl��wXTl��wVTl��wMuħTl��wMuœTl��wVTl,�wXTl0�wVTl:�wXTl@�wVTlx�wXTl��wVTlƨwXTlΨwVTlڨwXTl�wVTlT�wXTl_�wVTl}�wXTl��wVTlΩwXTlϩwVTlکwXTlީwVTl��wXTl�wVTl7�wXTl@�wVTlN�wXTlP�wVTlZ�wXTl\�wVTlêwXTl۪wVTl��wXTl�wVTl�wXTl	�wVTl�wXTl�wVTl�wXTl �wVTl'�wXTl(�wVTl/�wXTl0�wVTl\�wMuꜧTl]�wMuꬷTl^�wMuɫTl_�wMuꭒTl`�wVTlf�wXTlp�wMuᎠTlq�wMuᎡTlr�wMuᎢTls�wMuᎣTlt�wMuᎤTlu�wMuᎥTlv�wMuᎦTlw�wMuᎧTlx�wMuᎨTly�wMuᎩTlz�wMuᎪLdTl{�wMuᎫTl|�wMuᎬTl}�wMuᎭTl~�wMuᎮTl�wMuᎯTl��wMuᎰTl��wMuᎱTl��wMuᎲTl��wMuᎳTl��wMuᎴTl��wMuᎵTl��wMuᎶTl��wMuᎷTl��wMuᎸTl��wMuᎹTl��wMuᎺTl��wMuᎻTl��wMuᎼTl��wMuᎽTl��wMuᎾTl��wMuᎿTl��wMuᏀTl��wMuᏁTl��wMuᏂTl��wMuᏃTl��wMuᏄTl��wMuᏅTl��wMuᏆTl��wMuᏇTl��wMuᏈTl��wMuᏉTl��wMuᏊTl��wMuᏋTl��wMuᏌTl��wMuᏍTl��wMuᏎTl��wMuᏏTl��wMuᏐTl��wMuᏑTl��wMuᏒTl��wMuᏓTl��wMuᏔTl��wMuᏕTl��wMuᏖTl��wMuᏗTl��wMuᏘTl��wMuᏙTl��wMuᏚTl��wMuᏛTl��wMuᏜTl��wMuᏝTl��wMuᏞTl��wMuᏟTl��wMuᏠTl��wMuᏡTl��wMuᏢTl��wMuᏣTl��wMuᏤTl��wMuᏥTl��wMuᏦTl��wMuᏧTl��wMuᏨTl��wMuᏩTl��wMuᏪTl��wMuᏫTl��wMuᏬTl��wMuᏭTl��wMuᏮTl��wMuᏯTl��wVTl�wXTl�wVTl��wXTl�wVTl��wXTl��wVTl��wXTl��wVTl��wXTl�wMu豈Tl�wMu更Tl�wMu車Tl�wMu賈Tl�wMu滑Tl�wMu串Tl�wMu句Tl�wMu龜Tl	�wMu契Tl
�wMu金Tl�wMu喇Tl�wMu奈Tl
�wMu懶Tl�wMu癩Tl�wMu羅Tl�wMu蘿Tl�wMu螺Tl�wMu裸Tl�wMu邏Tl�wMu樂Tl�wMu洛LdTl�wMu烙Tl�wMu珞Tl�wMu落Tl�wMu酪Tl�wMu駱Tl�wMu亂Tl�wMu卵Tl�wMu欄Tl�wMu爛Tl�wMu蘭Tl �wMu鸞Tl!�wMu嵐Tl"�wMu濫Tl#�wMu藍Tl$�wMu襤Tl%�wMu拉Tl&�wMu臘Tl'�wMu蠟Tl(�wMu廊Tl)�wMu朗Tl*�wMu浪Tl+�wMu狼Tl,�wMu郎Tl-�wMu來Tl.�wMu冷Tl/�wMu勞Tl0�wMu擄Tl1�wMu櫓Tl2�wMu爐Tl3�wMu盧Tl4�wMu老Tl5�wMu蘆Tl6�wMu虜Tl7�wMu路Tl8�wMu露Tl9�wMu魯Tl:�wMu鷺Tl;�wMu碌Tl<�wMu祿Tl=�wMu綠Tl>�wMu菉Tl?�wMu錄Tl@�wMu鹿TlA�wMu論TlB�wMu壟TlC�wMu弄TlD�wMu籠TlE�wMu聾TlF�wMu牢TlG�wMu磊TlH�wMu賂TlI�wMu雷TlJ�wMu壘TlK�wMu屢TlL�wMu樓TlM�wMu淚TlN�wMu漏TlO�wMu累TlP�wMu縷TlQ�wMu陋TlR�wMu勒TlS�wMu肋TlT�wMu凜TlU�wMu凌TlV�wMu稜TlW�wMu綾TlX�wMu菱TlY�wMu陵TlZ�wMu讀Tl[�wMu拏Tl\�wMu樂Tl]�wMu諾Tl^�wMu丹Tl_�wMu寧Tl`�wMu怒Tla�wMu率Tlb�wMu異Tlc�wMu北Tld�wMu磻Tle�wMu便Tlf�wMu復Tlg�wMu不Tlh�wMu泌Tli�wMu數Tlj�wMu索Tlk�wMu參Tll�wMu塞Tlm�wMu省Tln�wMu葉Tlo�wMu說Tlp�wMu殺Tlq�wMu辰Tlr�wMu沈Tls�wMu拾Tlt�wMu若Tlu�wMu掠Tlv�wMu略Tlw�wMu亮Tlx�wMu兩Tly�wMu凉LdTlz�wMu梁Tl{�wMu糧Tl|�wMu良Tl}�wMu諒Tl~�wMu量Tl�wMu勵Tl��wMu呂Tl��wMu女Tl��wMu廬Tl��wMu旅Tl��wMu濾Tl��wMu礪Tl��wMu閭Tl��wMu驪Tl��wMu麗Tl��wMu黎Tl��wMu力Tl��wMu曆Tl��wMu歷Tl��wMu轢Tl��wMu年Tl��wMu憐Tl��wMu戀Tl��wMu撚Tl��wMu漣Tl��wMu煉Tl��wMu璉Tl��wMu秊Tl��wMu練Tl��wMu聯Tl��wMu輦Tl��wMu蓮Tl��wMu連Tl��wMu鍊Tl��wMu列Tl��wMu劣Tl��wMu咽Tl��wMu烈Tl��wMu裂Tl��wMu說Tl��wMu廉Tl��wMu念Tl��wMu捻Tl��wMu殮Tl��wMu簾Tl��wMu獵Tl��wMu令Tl��wMu囹Tl��wMu寧Tl��wMu嶺Tl��wMu怜Tl��wMu玲Tl��wMu瑩Tl��wMu羚Tl��wMu聆Tl��wMu鈴Tl��wMu零Tl��wMu靈Tl��wMu領Tl��wMu例Tl��wMu禮Tl��wMu醴Tl��wMu隸Tl��wMu惡Tl��wMu了Tl��wMu僚Tl��wMu寮Tl��wMu尿Tl��wMu料Tl��wMu樂Tl��wMu燎Tl��wMu療Tl�wMu蓼Tl�wMu遼Tl�wMu龍Tl�wMu暈Tl�wMu阮Tl�wMu劉Tl�wMu杻Tl�wMu柳Tl�wMu流Tl�wMu溜Tl�wMu琉Tl�wMu留Tl�wMu硫Tl�wMu紐Tl�wMu類Tl�wMu六Tl�wMu戮Tl�wMu陸Tl�wMu倫Tl�wMu崙Tl�wMu淪Tl�wMu輪Tl�wMu律Tl�wMu慄Tl�wMu栗Tl�wMu率Tl�wMu隆Tl�wMu利LdTl�wMu吏Tl�wMu履Tl�wMu易Tl�wMu李Tl�wMu梨Tl�wMu泥Tl�wMu理Tl�wMu痢Tl�wMu罹Tl�wMu裏Tl�wMu裡Tl�wMu里Tl�wMu離Tl�wMu匿Tl�wMu溺Tl�wMu吝Tl�wMu燐Tl�wMu璘Tl�wMu藺Tl�wMu隣Tl�wMu鱗Tl�wMu麟Tl�wMu林Tl��wMu淋Tl��wMu臨Tl��wMu立Tl��wMu笠Tl��wMu粒Tl��wMu狀Tl��wMu炙Tl��wMu識Tl��wMu什Tl��wMu茶Tl��wMu刺Tl�wMu切Tl�wMu度Tl�wMu拓Tl�wMu糖Tl�wMu宅Tl�wMu洞Tl�wMu暴Tl�wMu輻Tl�wMu行Tl	�wMu降Tl
�wMu見Tl�wMu廓Tl�wMu兀Tl
�wMu嗀Tl�wVTl�wMu塚Tl�wVTl�wMu晴Tl�wVTl�wMu凞Tl�wMu猪Tl�wMu益Tl�wMu礼Tl�wMu神Tl�wMu祥Tl�wMu福Tl�wMu靖Tl�wMu精Tl�wMu羽Tl�wVTl �wMu蘒Tl!�wVTl"�wMu諸Tl#�wVTl%�wMu逸Tl&�wMu都Tl'�wVTl*�wMu飯Tl+�wMu飼Tl,�wMu館Tl-�wMu鶴Tl.�wMu郞Tl/�wMu隷Tl0�wMu侮Tl1�wMu僧Tl2�wMu免Tl3�wMu勉Tl4�wMu勤Tl5�wMu卑Tl6�wMu喝Tl7�wMu嘆Tl8�wMu器Tl9�wMu塀Tl:�wMu墨Tl;�wMu層Tl<�wMu屮Tl=�wMu悔Tl>�wMu慨Tl?�wMu憎Tl@�wMu懲TlA�wMu敏TlB�wMu既TlC�wMu暑TlD�wMu梅TlE�wMu海TlF�wMu渚LdTlG�wMu漢TlH�wMu煮TlI�wMu爫TlJ�wMu琢TlK�wMu碑TlL�wMu社TlM�wMu祉TlN�wMu祈TlO�wMu祐TlP�wMu祖TlQ�wMu祝TlR�wMu禍TlS�wMu禎TlT�wMu穀TlU�wMu突TlV�wMu節TlW�wMu練TlX�wMu縉TlY�wMu繁TlZ�wMu署Tl[�wMu者Tl\�wMu臭Tl]�wMu艹Tl_�wMu著Tl`�wMu褐Tla�wMu視Tlb�wMu謁Tlc�wMu謹Tld�wMu賓Tle�wMu贈Tlf�wMu辶Tlg�wMu逸Tlh�wMu難Tli�wMu響Tlj�wMu頻Tlk�wMu恵Tll�wMu𤋮Tlm�wMu舘Tln�wXTlp�wMu並Tlq�wMu况Tlr�wMu全Tls�wMu侀Tlt�wMu充Tlu�wMu冀Tlv�wMu勇Tlw�wMu勺Tlx�wMu喝Tly�wMu啕Tlz�wMu喙Tl{�wMu嗢Tl|�wMu塚Tl}�wMu墳Tl~�wMu奄Tl�wMu奔Tl��wMu婢Tl��wMu嬨Tl��wMu廒Tl��wMu廙Tl��wMu彩Tl��wMu徭Tl��wMu惘Tl��wMu慎Tl��wMu愈Tl��wMu憎Tl��wMu慠Tl��wMu懲Tl��wMu戴Tl��wMu揄Tl��wMu搜Tl��wMu摒Tl��wMu敖Tl��wMu晴Tl��wMu朗Tl��wMu望Tl��wMu杖Tl��wMu歹Tl��wMu殺Tl��wMu流Tl��wMu滛Tl��wMu滋Tl��wMu漢Tl��wMu瀞Tl��wMu煮Tl��wMu瞧Tl��wMu爵Tl��wMu犯Tl��wMu猪Tl��wMu瑱Tl��wMu甆Tl��wMu画Tl��wMu瘝Tl��wMu瘟Tl��wMu益Tl��wMu盛Tl��wMu直Tl��wMu睊Tl��wMu着Tl��wMu磌Tl��wMu窱LdTl��wMu節Tl��wMu类Tl��wMu絛Tl��wMu練Tl��wMu缾Tl��wMu者Tl��wMu荒Tl��wMu華Tl��wMu蝹Tl��wMu襁Tl��wMu覆Tl��wMu視Tl��wMu調Tl��wMu諸Tl��wMu請Tl��wMu謁Tl��wMu諾Tl��wMu諭Tl��wMu謹Tl��wMu變Tl��wMu贈Tl�wMu輸Tl�wMu遲Tl�wMu醙Tl�wMu鉶Tl�wMu陼Tl�wMu難Tl�wMu靖Tl�wMu韛Tl�wMu響Tl�wMu頋Tl�wMu頻Tl�wMu鬒Tl�wMu龜Tl�wMu𢡊Tl�wMu𢡄Tl�wMu𣏕Tl�wMu㮝Tl�wMu䀘Tl�wMu䀹Tl�wMu𥉉Tl�wMu𥳐Tl�wMu𧻓Tl�wMu齃Tl�wMu龎Tl�wXTl�wMaffTl�wMafiTl�wMaflTl�wMaffiTl�wMafflTl�wMastTl�wXTl�wMuմնTl�wMuմեTl�wMuմիTl�wMuվնTl�wMuմխTl�wXTl�wMuיִTl�wVTl�wMuײַTl �wMuעTl!�wMuאTl"�wMuדTl#�wMuהTl$�wMuכTl%�wMuלTl&�wMuםTl'�wMuרTl(�wMuתTl)�w3w+Tl*�wMuשׁTl+�wMuשׂTl,�wMuשּׁTl-�wMuשּׂTl.�wMuאַTl/�wMuאָTl0�wMuאּTl1�wMuבּTl2�wMuגּTl3�wMuדּTl4�wMuהּTl5�wMuוּTl6�wMuזּTl7�wXTl8�wMuטּTl9�wMuיּTl:�wMuךּTl;�wMuכּTl<�wMuלּTl=�wXTl>�wMuמּTl?�wXTl@�wMuנּTlA�wMuסּTlB�wXTlC�wMuףּTlD�wMuפּTlE�wXLdTlF�wMuצּTlG�wMuקּTlH�wMuרּTlI�wMuשּTlJ�wMuתּTlK�wMuוֹTlL�wMuבֿTlM�wMuכֿTlN�wMuפֿTlO�wMuאלTlP�wMuٱTlR�wMuٻTlV�wMuپTlZ�wMuڀTl^�wMuٺTlb�wMuٿTlf�wMuٹTlj�wMuڤTln�wMuڦTlr�wMuڄTlv�wMuڃTlz�wMuچTl~�wMuڇTl��wMuڍTl��wMuڌTl��wMuڎTl��wMuڈTl��wMuژTl��wMuڑTl��wMuکTl��wMuگTl��wMuڳTl��wMuڱTl��wMuںTl��wMuڻTl��wMuۀTl��wMuہTl��wMuھTl��wMuےTl��wMuۓTl��wVTl�wXTl�wMuڭTl�wMuۇTl�wMuۆTl�wMuۈTl�wMuۇٴTl�wMuۋTl�wMuۅTl�wMuۉTl�wMuېTl�wMuىTl�wMuئاTl�wMuئەTl�wMuئوTl�wMuئۇTl�wMuئۆTl�wMuئۈTl��wMuئېTl��wMuئىTl��wMuیTl�wMuئجTl�wMuئحTl�wMuئمTl�wMuئىTl�wMuئيTl�wMuبجTl�wMuبحTl�wMuبخTl�wMuبمTl	�wMuبىTl
�wMuبيTl�wMuتجTl�wMuتحTl
�wMuتخTl�wMuتمTl�wMuتىTl�wMuتيTl�wMuثجTl�wMuثمTl�wMuثىTl�wMuثيTl�wMuجحTl�wMuجمTl�wMuحجTl�wMuحمTl�wMuخجTl�wMuخحTl�wMuخمTl�wMuسجTl�wMuسحTl�wMuسخTl�wMuسمTl �wMuصحTl!�wMuصمTl"�wMuضجTl#�wMuضحTl$�wMuضخTl%�wMuضمTl&�wMuطحLdTl'�wMuطمTl(�wMuظمTl)�wMuعجTl*�wMuعمTl+�wMuغجTl,�wMuغمTl-�wMuفجTl.�wMuفحTl/�wMuفخTl0�wMuفمTl1�wMuفىTl2�wMuفيTl3�wMuقحTl4�wMuقمTl5�wMuقىTl6�wMuقيTl7�wMuكاTl8�wMuكجTl9�wMuكحTl:�wMuكخTl;�wMuكلTl<�wMuكمTl=�wMuكىTl>�wMuكيTl?�wMuلجTl@�wMuلحTlA�wMuلخTlB�wMuلمTlC�wMuلىTlD�wMuليTlE�wMuمجTlF�wMuمحTlG�wMuمخTlH�wMuممTlI�wMuمىTlJ�wMuميTlK�wMuنجTlL�wMuنحTlM�wMuنخTlN�wMuنمTlO�wMuنىTlP�wMuنيTlQ�wMuهجTlR�wMuهمTlS�wMuهىTlT�wMuهيTlU�wMuيجTlV�wMuيحTlW�wMuيخTlX�wMuيمTlY�wMuيىTlZ�wMuييTl[�wMuذٰTl\�wMuرٰTl]�wMuىٰTl^�w3u ٌّTl_�w3u ٍّTl`�w3u َّTla�w3u ُّTlb�w3u ِّTlc�w3u ّٰTld�wMuئرTle�wMuئزTlf�wMuئمTlg�wMuئنTlh�wMuئىTli�wMuئيTlj�wMuبرTlk�wMuبزTll�wMuبمTlm�wMuبنTln�wMuبىTlo�wMuبيTlp�wMuترTlq�wMuتزTlr�wMuتمTls�wMuتنTlt�wMuتىTlu�wMuتيTlv�wMuثرTlw�wMuثزTlx�wMuثمTly�wMuثنTlz�wMuثىTl{�wMuثيTl|�wMuفىTl}�wMuفيTl~�wMuقىTl�wMuقيTl��wMuكاTl��wMuكلTl��wMuكمTl��wMuكىTl��wMuكيTl��wMuلمTl��wMuلىTl��wMuليTl��wMuماTl��wMuممTl��wMuنرLdTl��wMuنزTl��wMuنمTl��wMuننTl��wMuنىTl��wMuنيTl��wMuىٰTl��wMuيرTl��wMuيزTl��wMuيمTl��wMuينTl��wMuيىTl��wMuييTl��wMuئجTl��wMuئحTl��wMuئخTl��wMuئمTl��wMuئهTl��wMuبجTl��wMuبحTl��wMuبخTl��wMuبمTl��wMuبهTl��wMuتجTl��wMuتحTl��wMuتخTl��wMuتمTl��wMuتهTl��wMuثمTl��wMuجحTl��wMuجمTl��wMuحجTl��wMuحمTl��wMuخجTl��wMuخمTl��wMuسجTl��wMuسحTl��wMuسخTl��wMuسمTl��wMuصحTl��wMuصخTl��wMuصمTl��wMuضجTl��wMuضحTl��wMuضخTl��wMuضمTl��wMuطحTl��wMuظمTl��wMuعجTl��wMuعمTl��wMuغجTl��wMuغمTl��wMuفجTl��wMuفحTl��wMuفخTl��wMuفمTl�wMuقحTl�wMuقمTl�wMuكجTl�wMuكحTl�wMuكخTl�wMuكلTl�wMuكمTl�wMuلجTl�wMuلحTl�wMuلخTl�wMuلمTl�wMuلهTl�wMuمجTl�wMuمحTl�wMuمخTl�wMuممTl�wMuنجTl�wMuنحTl�wMuنخTl�wMuنمTl�wMuنهTl�wMuهجTl�wMuهمTl�wMuهٰTl�wMuيجTl�wMuيحTl�wMuيخTl�wMuيمTl�wMuيهTl�wMuئمTl�wMuئهTl�wMuبمTl�wMuبهTl�wMuتمTl�wMuتهTl�wMuثمTl�wMuثهTl�wMuسمTl�wMuسهTl�wMuشمTl�wMuشهTl�wMuكلTl�wMuكمTl�wMuلمTl�wMuنمLdTl�wMuنهTl�wMuيمTl�wMuيهTl�wMuـَّTl�wMuـُّTl�wMuـِّTl��wMuطىTl��wMuطيTl��wMuعىTl��wMuعيTl��wMuغىTl��wMuغيTl��wMuسىTl��wMuسيTl��wMuشىTl��wMuشيTl��wMuحىTl�wMuحيTl�wMuجىTl�wMuجيTl�wMuخىTl�wMuخيTl�wMuصىTl�wMuصيTl�wMuضىTl�wMuضيTl	�wMuشجTl
�wMuشحTl�wMuشخTl�wMuشمTl
�wMuشرTl�wMuسرTl�wMuصرTl�wMuضرTl�wMuطىTl�wMuطيTl�wMuعىTl�wMuعيTl�wMuغىTl�wMuغيTl�wMuسىTl�wMuسيTl�wMuشىTl�wMuشيTl�wMuحىTl�wMuحيTl�wMuجىTl�wMuجيTl�wMuخىTl �wMuخيTl!�wMuصىTl"�wMuصيTl#�wMuضىTl$�wMuضيTl%�wMuشجTl&�wMuشحTl'�wMuشخTl(�wMuشمTl)�wMuشرTl*�wMuسرTl+�wMuصرTl,�wMuضرTl-�wMuشجTl.�wMuشحTl/�wMuشخTl0�wMuشمTl1�wMuسهTl2�wMuشهTl3�wMuطمTl4�wMuسجTl5�wMuسحTl6�wMuسخTl7�wMuشجTl8�wMuشحTl9�wMuشخTl:�wMuطمTl;�wMuظمTl<�wMuاًTl>�wVTl@�wXTlP�wMuتجمTlQ�wMuتحجTlS�wMuتحمTlT�wMuتخمTlU�wMuتمجTlV�wMuتمحTlW�wMuتمخTlX�wMuجمحTlZ�wMuحميTl[�wMuحمىTl\�wMuسحجTl]�wMuسجحTl^�wMuسجىTl_�wMuسمحTla�wMuسمجTlb�wMuسممTld�wMuصححTlf�wMuصممTlg�wMuشحمTli�wMuشجيLdTlj�wMuشمخTll�wMuشممTln�wMuضحىTlo�wMuضخمTlq�wMuطمحTls�wMuطممTlt�wMuطميTlu�wMuعجمTlv�wMuعممTlx�wMuعمىTly�wMuغممTlz�wMuغميTl{�wMuغمىTl|�wMuفخمTl~�wMuقمحTl�wMuقممTl��wMuلحمTl��wMuلحيTl��wMuلحىTl��wMuلججTl��wMuلخمTl��wMuلمحTl��wMuمحجTl��wMuمحمTl��wMuمحيTl��wMuمجحTl��wMuمجمTl��wMuمخجTl��wMuمخمTl��wXTl��wMuمجخTl��wMuهمجTl��wMuهممTl��wMuنحمTl��wMuنحىTl��wMuنجمTl��wMuنجىTl��wMuنميTl��wMuنمىTl��wMuيممTl��wMuبخيTl��wMuتجيTl��wMuتجىTl��wMuتخيTl��wMuتخىTl��wMuتميTl��wMuتمىTl��wMuجميTl��wMuجحىTl��wMuجمىTl��wMuسخىTl��wMuصحيTl��wMuشحيTl��wMuضحيTl��wMuلجيTl��wMuلميTl��wMuيحيTl��wMuيجيTl��wMuيميTl��wMuمميTl��wMuقميTl��wMuنحيTl��wMuقمحTl��wMuلحمTl��wMuعميTl��wMuكميTl��wMuنجحTl��wMuمخيTl��wMuلجمTl��wMuكممTl��wMuلجمTl��wMuنجحTl��wMuجحيTl��wMuحجيTl��wMuمجيTl��wMuفميTl�wMuبحيTl�wMuكممTl�wMuعجمTl�wMuصممTl�wMuسخيTl�wMuنجيTl�wXTl�wMuصلےTl�wMuقلےTl�wMuاللهTl�wMuاكبرTl�wMuمحمدTl��wMuصلعمTl��wMuرسولTl��wMuعليهTl��wMuوسلمTl��wMuصلىTl��w3uصلى الله عليه وسلمTl��w3uجل جلالهTl��wMuریالTl��wVTl��wXTl�wITl�w3w,LdTl�wMu、Tl�wXTl�w3w:Tl�w3w;Tl�w3w!Tl�w3w?Tl�wMu〖Tl�wMu〗Tl�wXTl �wVTl0�wXTl1�wMu—Tl2�wMu–Tl3�w3w_Tl5�w3w(Tl6�w3w)Tl7�w3w{Tl8�w3w}Tl9�wMu〔Tl:�wMu〕Tl;�wMu【Tl<�wMu】Tl=�wMu《Tl>�wMu》Tl?�wMu〈Tl@�wMu〉TlA�wMu「TlB�wMu」TlC�wMu『TlD�wMu』TlE�wVTlG�w3w[TlH�w3w]TlI�w3u ̅TlM�w3w_TlP�w3w,TlQ�wMu、TlR�wXTlT�w3w;TlU�w3w:TlV�w3w?TlW�w3w!TlX�wMu—TlY�w3w(TlZ�w3w)Tl[�w3w{Tl\�w3w}Tl]�wMu〔Tl^�wMu〕Tl_�w3w#Tl`�w3w&Tla�w3w*Tlb�w3w+Tlc�wMw-Tld�w3w<Tle�w3w>Tlf�w3w=Tlg�wXTlh�w3w\Tli�w3w$Tlj�w3w%Tlk�w3w@Tll�wXTlp�w3u ًTlq�wMuـًTlr�w3u ٌTls�wVTlt�w3u ٍTlu�wXTlv�w3u َTlw�wMuـَTlx�w3u ُTly�wMuـُTlz�w3u ِTl{�wMuـِTl|�w3u ّTl}�wMuـّTl~�w3u ْTl�wMuـْTl��wMuءTl��wMuآTl��wMuأTl��wMuؤTl��wMuإTl��wMuئTl��wMuاTl��wMuبTl��wMuةTl��wMuتTl��wMuثTl��wMuجTl��wMuحTl��wMuخTl��wMuدTl��wMuذTl��wMuرTl��wMuزTl��wMuسTl��wMuشTl��wMuصLdTl��wMuضTl��wMuطTl�wMuظTl�wMuعTl�wMuغTl�wMuفTl�wMuقTl�wMuكTl�wMuلTl�wMuمTl�wMuنTl�wMuهTl�wMuوTl�wMuىTl�wMuيTl��wMuلآTl��wMuلأTl��wMuلإTl��wMuلاTl��wXTl��wITl�wXTl�w3w!Tl�w3w"Tl�w3w#Tl�w3w$Tl�w3w%Tl�w3w&Tl�w3w'Tl�w3w(Tl	�w3w)Tl
�w3w*Tl�w3w+Tl�w3w,Tl
�wMw-Tl�wMw.Tl�w3w/Tl�wMw0Tl�wMw1Tl�wMw2Tl�wMw3Tl�wMw4Tl�wMw5Tl�wMw6Tl�wMw7Tl�wMw8Tl�wMw9Tl�w3w:Tl�w3w;Tl�w3w<Tl�w3w=Tl�w3w>Tl�w3w?Tl �w3w@Tl!�wMwaTl"�wMwbTl#�wMwcTl$�wMwdTl%�wMweTl&�wMwfTl'�wMwgTl(�wMwhTl)�wMwiTl*�wMwjTl+�wMwkTl,�wMwlTl-�wMwmTl.�wMwnTl/�wMwoTl0�wMwpTl1�wMwqTl2�wMwrTl3�wMwsTl4�wMwtTl5�wMwuTl6�wMwvTl7�wMwwTl8�wMwxTl9�wMwyTl:�wMwzTl;�w3w[Tl<�w3w\Tl=�w3w]Tl>�w3w^Tl?�w3w_Tl@�w3w`TlA�wMwaTlB�wMwbTlC�wMwcTlD�wMwdTlE�wMweTlF�wMwfTlG�wMwgTlH�wMwhTlI�wMwiTlJ�wMwjTlK�wMwkTlL�wMwlTlM�wMwmTlN�wMwnLdTlO�wMwoTlP�wMwpTlQ�wMwqTlR�wMwrTlS�wMwsTlT�wMwtTlU�wMwuTlV�wMwvTlW�wMwwTlX�wMwxTlY�wMwyTlZ�wMwzTl[�w3w{Tl\�w3w|Tl]�w3w}Tl^�w3w~Tl_�wMu⦅Tl`�wMu⦆Tla�wMw.Tlb�wMu「Tlc�wMu」Tld�wMu、Tle�wMu・Tlf�wMuヲTlg�wMuァTlh�wMuィTli�wMuゥTlj�wMuェTlk�wMuォTll�wMuャTlm�wMuュTln�wMuョTlo�wMuッTlp�wMuーTlq�wMuアTlr�wMuイTls�wMuウTlt�wMuエTlu�wMuオTlv�wMuカTlw�wMuキTlx�wMuクTly�wMuケTlz�wMuコTl{�wMuサTl|�wMuシTl}�wMuスTl~�wMuセTl�wMuソTl��wMuタTl��wMuチTl��wMuツTl��wMuテTl��wMuトTl��wMuナTl��wMuニTl��wMuヌTl��wMuネTl��wMuノTl��wMuハTl��wMuヒTl��wMuフTl��wMuヘTl��wMuホTl��wMuマTl��wMuミTl��wMuムTl��wMuメTl��wMuモTl��wMuヤTl��wMuユTl��wMuヨTl��wMuラTl��wMuリTl��wMuルTl��wMuレTl��wMuロTl��wMuワTl��wMuンTl��wMu゙Tl��wMu゚Tl��wXTl��wMuᄀTl��wMuᄁTl��wMuᆪTl��wMuᄂTl��wMuᆬTl��wMuᆭTl��wMuᄃTl��wMuᄄTl��wMuᄅTl��wMuᆰTl��wMuᆱTl��wMuᆲTl��wMuᆳTl��wMuᆴTl��wMuᆵTl��wMuᄚTl��wMuᄆTl��wMuᄇLdTl��wMuᄈTl��wMuᄡTl��wMuᄉTl��wMuᄊTl��wMuᄋTl��wMuᄌTl��wMuᄍTl��wMuᄎTl��wMuᄏTl��wMuᄐTl��wMuᄑTl��wMuᄒTl��wXTl�wMuᅡTl�wMuᅢTl�wMuᅣTl�wMuᅤTl�wMuᅥTl�wMuᅦTl�wXTl�wMuᅧTl�wMuᅨTl�wMuᅩTl�wMuᅪTl�wMuᅫTl�wMuᅬTl�wXTl�wMuᅭTl�wMuᅮTl�wMuᅯTl�wMuᅰTl�wMuᅱTl�wMuᅲTl�wXTl�wMuᅳTl�wMuᅴTl�wMuᅵTl�wXTl�wMu¢Tl�wMu£Tl�wMu¬Tl�w3u ̄Tl�wMu¦Tl�wMu¥Tl�wMu₩Tl�wXTl�wMu│Tl�wMu←Tl�wMu↑Tl�wMu→Tl�wMu↓Tl�wMu■Tl�wMu○Tl�wXTlwVTlwXTl
wVTl'wXTl(wVTl;wXTl<wVTl>wXTl?wVTlNwXTlPwVTl^wXTl�wVTl�wXTlwVTlwXTlwVTl4wXTl7wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTlwVTl$wXTl-wVTlKwXTlPwVTl{wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTlwMu𐐨TlwMu𐐩LdTlwMu𐐪TlwMu𐐫TlwMu𐐬TlwMu𐐭TlwMu𐐮TlwMu𐐯TlwMu𐐰Tl	wMu𐐱Tl
wMu𐐲TlwMu𐐳TlwMu𐐴Tl
wMu𐐵TlwMu𐐶TlwMu𐐷TlwMu𐐸TlwMu𐐹TlwMu𐐺TlwMu𐐻TlwMu𐐼TlwMu𐐽TlwMu𐐾TlwMu𐐿TlwMu𐑀TlwMu𐑁TlwMu𐑂TlwMu𐑃TlwMu𐑄TlwMu𐑅TlwMu𐑆TlwMu𐑇Tl wMu𐑈Tl!wMu𐑉Tl"wMu𐑊Tl#wMu𐑋Tl$wMu𐑌Tl%wMu𐑍Tl&wMu𐑎Tl'wMu𐑏Tl(wVTl�wXTl�wVTl�wXTl�wMu𐓘Tl�wMu𐓙Tl�wMu𐓚Tl�wMu𐓛Tl�wMu𐓜Tl�wMu𐓝Tl�wMu𐓞Tl�wMu𐓟Tl�wMu𐓠Tl�wMu𐓡Tl�wMu𐓢Tl�wMu𐓣Tl�wMu𐓤Tl�wMu𐓥Tl�wMu𐓦Tl�wMu𐓧Tl�wMu𐓨Tl�wMu𐓩Tl�wMu𐓪Tl�wMu𐓫Tl�wMu𐓬Tl�wMu𐓭Tl�wMu𐓮Tl�wMu𐓯Tl�wMu𐓰Tl�wMu𐓱Tl�wMu𐓲Tl�wMu𐓳Tl�wMu𐓴Tl�wMu𐓵Tl�wMu𐓶Tl�wMu𐓷Tl�wMu𐓸Tl�wMu𐓹Tl�wMu𐓺Tl�wMu𐓻Tl�wXTl�wVTl�wXTlwVTl(wXTl0wVTldwXTlowVTlpwXTlwVTl7wXTl@wVTlVwXTl`wVTlhwXTlwVTlwXTlwVTl	wXTl
wVTl6wXTl7wVLdTl9wXTl<wVTl=wXTl?wVTlVwXTlWwVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl	wXTl	wVTl:	wXTl?	wVTl@	wXTl�	wVTl�	wXTl�	wVTl�	wXTl�	wVTl
wXTl
wVTl
wXTl
wVTl
wXTl
wVTl
wXTl
wVTl6
wXTl8
wVTl;
wXTl?
wVTlI
wXTlP
wVTlY
wXTl`
wVTl�
wXTl�
wVTl�
wXTl�
wVTl�
wXTlwVTl6wXTl9wVTlVwXTlXwVTlswXTlxwVTl�wXTl�wVTl�wXTl�wVTl�wXTlwVTlIwXTl�wMu𐳀Tl�wMu𐳁Tl�wMu𐳂Tl�wMu𐳃Tl�wMu𐳄Tl�wMu𐳅Tl�wMu𐳆Tl�wMu𐳇Tl�wMu𐳈Tl�wMu𐳉Tl�wMu𐳊Tl�wMu𐳋Tl�wMu𐳌Tl�wMu𐳍Tl�wMu𐳎Tl�wMu𐳏Tl�wMu𐳐Tl�wMu𐳑Tl�wMu𐳒Tl�wMu𐳓Tl�wMu𐳔Tl�wMu𐳕Tl�wMu𐳖Tl�wMu𐳗Tl�wMu𐳘Tl�wMu𐳙Tl�wMu𐳚Tl�wMu𐳛Tl�wMu𐳜Tl�wMu𐳝Tl�wMu𐳞Tl�wMu𐳟Tl�wMu𐳠Tl�wMu𐳡Tl�wMu𐳢Tl�wMu𐳣Tl�wMu𐳤Tl�wMu𐳥Tl�wMu𐳦Tl�wMu𐳧Tl�wMu𐳨LdTl�wMu𐳩Tl�wMu𐳪Tl�wMu𐳫Tl�wMu𐳬Tl�wMu𐳭Tl�wMu𐳮Tl�wMu𐳯Tl�wMu𐳰Tl�wMu𐳱Tl�wMu𐳲Tl�wXTl�wVTl�wXTl�wVTl(
wXTl0
wVTl:
wXTl`wVTlwXTlwVTl(wXTl0wVTlZwXTlwVTlNwXTlRwVTlpwXTlwVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTlwVTl5wXTl6wVTlGwXTlPwVTlwwXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTlwVTlwXTlwVTl?wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTlwVTlwXTlwVTl
wXTlwVTlwXTlwVTl)wXTl*wVTl1wXTl2wVTl4wXTl5wVTl:wXTl;wVTlEwXTlGwVTlIwXTlKwVTlNwXTlPwVTlQwXTlWwVTlXwXTl]wVTldwXTlfwVTlmwXTlpwVTluwXTlwVTlZwXTl[wVTl\wXTl]wVLdTl_wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTlwVTlEwXTlPwVTlZwXTl`wVTlmwXTl�wVTl�wXTl�wVTl�wXTlwVTlwXTlwVTl,wXTl0wVTl@wXTlwVTl<wXTl�wMu𑣀Tl�wMu𑣁Tl�wMu𑣂Tl�wMu𑣃Tl�wMu𑣄Tl�wMu𑣅Tl�wMu𑣆Tl�wMu𑣇Tl�wMu𑣈Tl�wMu𑣉Tl�wMu𑣊Tl�wMu𑣋Tl�wMu𑣌Tl�wMu𑣍Tl�wMu𑣎Tl�wMu𑣏Tl�wMu𑣐Tl�wMu𑣑Tl�wMu𑣒Tl�wMu𑣓Tl�wMu𑣔Tl�wMu𑣕Tl�wMu𑣖Tl�wMu𑣗Tl�wMu𑣘Tl�wMu𑣙Tl�wMu𑣚Tl�wMu𑣛Tl�wMu𑣜Tl�wMu𑣝Tl�wMu𑣞Tl�wMu𑣟Tl�wVTl�wXTl�wVTlwXTlwVTlHwXTlPwVTl�wXTl�wVTl�wXTl�wVTl�wXTlwVTl	wXTl
wVTl7wXTl8wVTlFwXTlPwVTlmwXTlpwVTl�wXTl�wVTl�wXTl�wVTl�wXTlwVTlwXTlwVTl
wXTlwVTl7wXTl:wVTl;wXTl<wVTl>wXTl?wVTlHwXTlPwVTlZwXTl`wVLdTlfwXTlgwVTliwXTljwVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl�wXTl wVTl�#wXTl$wVTlo$wXTlp$wVTlu$wXTl�$wVTlD%wXTl0wVTl/4wXTlDwVTlGFwXTlhwVTl9jwXTl@jwVTl_jwXTl`jwVTljjwXTlnjwVTlpjwXTl�jwVTl�jwXTl�jwVTl�jwXTlkwVTlFkwXTlPkwVTlZkwXTl[kwVTlbkwXTlckwVTlxkwXTl}kwVTl�kwXTl`nwVTl�nwXTlowVTlEowXTlPowVTlowXTl�owVTl�owXTl�owVTl�owXTlpwVTl�wXTl�wVTl�wXTl�wVTl�wXTlp�wVTl��wXTl�wVTlk�wXTlp�wVTl}�wXTl��wVTl��wXTl��wVTl��wXTl��wVTl��wITl��wXTl�wVTl��wXTl�wVTl'�wXTl)�wVTl^�wMu𝅗𝅥Tl_�wMu𝅘𝅥Tl`�wMu𝅘𝅥𝅮Tla�wMu𝅘𝅥𝅯Tlb�wMu𝅘𝅥𝅰Tlc�wMu𝅘𝅥𝅱Tld�wMu𝅘𝅥𝅲Tle�wVTls�wXTl{�wVTl��wMu𝆹𝅥Tl��wMu𝆺𝅥Tl��wMu𝆹𝅥𝅮Tl��wMu𝆺𝅥𝅮Tl��wMu𝆹𝅥𝅯Tl��wMu𝆺𝅥𝅯Tl��wVTl��wXTl�wVLdTlF�wXTl��wVTl��wXTl�wVTlW�wXTl`�wVTly�wXTl�wMwaTl�wMwbTl�wMwcTl�wMwdTl�wMweTl�wMwfTl�wMwgTl�wMwhTl�wMwiTl	�wMwjTl
�wMwkTl�wMwlTl�wMwmTl
�wMwnTl�wMwoTl�wMwpTl�wMwqTl�wMwrTl�wMwsTl�wMwtTl�wMwuTl�wMwvTl�wMwwTl�wMwxTl�wMwyTl�wMwzTl�wMwaTl�wMwbTl�wMwcTl�wMwdTl�wMweTl�wMwfTl �wMwgTl!�wMwhTl"�wMwiTl#�wMwjTl$�wMwkTl%�wMwlTl&�wMwmTl'�wMwnTl(�wMwoTl)�wMwpTl*�wMwqTl+�wMwrTl,�wMwsTl-�wMwtTl.�wMwuTl/�wMwvTl0�wMwwTl1�wMwxTl2�wMwyTl3�wMwzTl4�wMwaTl5�wMwbTl6�wMwcTl7�wMwdTl8�wMweTl9�wMwfTl:�wMwgTl;�wMwhTl<�wMwiTl=�wMwjTl>�wMwkTl?�wMwlTl@�wMwmTlA�wMwnTlB�wMwoTlC�wMwpTlD�wMwqTlE�wMwrTlF�wMwsTlG�wMwtTlH�wMwuTlI�wMwvTlJ�wMwwTlK�wMwxTlL�wMwyTlM�wMwzTlN�wMwaTlO�wMwbTlP�wMwcTlQ�wMwdTlR�wMweTlS�wMwfTlT�wMwgTlU�wXTlV�wMwiTlW�wMwjTlX�wMwkTlY�wMwlTlZ�wMwmTl[�wMwnTl\�wMwoLdTl]�wMwpTl^�wMwqTl_�wMwrTl`�wMwsTla�wMwtTlb�wMwuTlc�wMwvTld�wMwwTle�wMwxTlf�wMwyTlg�wMwzTlh�wMwaTli�wMwbTlj�wMwcTlk�wMwdTll�wMweTlm�wMwfTln�wMwgTlo�wMwhTlp�wMwiTlq�wMwjTlr�wMwkTls�wMwlTlt�wMwmTlu�wMwnTlv�wMwoTlw�wMwpTlx�wMwqTly�wMwrTlz�wMwsTl{�wMwtTl|�wMwuTl}�wMwvTl~�wMwwTl�wMwxTl��wMwyTl��wMwzTl��wMwaTl��wMwbTl��wMwcTl��wMwdTl��wMweTl��wMwfTl��wMwgTl��wMwhTl��wMwiTl��wMwjTl��wMwkTl��wMwlTl��wMwmTl��wMwnTl��wMwoTl��wMwpTl��wMwqTl��wMwrTl��wMwsTl��wMwtTl��wMwuTl��wMwvTl��wMwwTl��wMwxTl��wMwyTl��wMwzTl��wMwaTl��wXTl��wMwcTl��wMwdTl��wXTl��wMwgTl��wXTl��wMwjTl��wMwkTl��wXTl��wMwnTl��wMwoTl��wMwpTl��wMwqTl��wXTl��wMwsTl��wMwtTl��wMwuTl��wMwvTl��wMwwTl��wMwxTl��wMwyTl��wMwzTl��wMwaTl��wMwbTl��wMwcTl��wMwdTl��wXTl��wMwfTl��wXTl��wMwhTl��wMwiTl��wMwjTl��wMwkTl��wMwlTl��wMwmTl��wMwnLdTl��wXTl��wMwpTl��wMwqTl��wMwrTl��wMwsTl��wMwtTl��wMwuTl��wMwvTl��wMwwTl��wMwxTl��wMwyTl��wMwzTl��wMwaTl��wMwbTl��wMwcTl��wMwdTl��wMweTl��wMwfTl��wMwgTl��wMwhTl��wMwiTl��wMwjTl��wMwkTl��wMwlTl��wMwmTl��wMwnTl��wMwoTl��wMwpTl��wMwqTl��wMwrTl��wMwsTl��wMwtTl��wMwuTl��wMwvTl��wMwwTl��wMwxTl��wMwyTl��wMwzTl��wMwaTl��wMwbTl��wMwcTl��wMwdTl��wMweTl��wMwfTl��wMwgTl��wMwhTl��wMwiTl��wMwjTl��wMwkTl��wMwlTl��wMwmTl��wMwnTl��wMwoTl��wMwpTl��wMwqTl��wMwrTl��wMwsTl��wMwtTl��wMwuTl��wMwvTl�wMwwTl�wMwxTl�wMwyTl�wMwzTl�wMwaTl�wMwbTl�wXTl�wMwdTl�wMweTl	�wMwfTl
�wMwgTl�wXTl
�wMwjTl�wMwkTl�wMwlTl�wMwmTl�wMwnTl�wMwoTl�wMwpTl�wMwqTl�wXTl�wMwsTl�wMwtTl�wMwuTl�wMwvTl�wMwwTl�wMwxTl�wMwyTl�wXTl�wMwaTl�wMwbTl �wMwcTl!�wMwdTl"�wMweTl#�wMwfTl$�wMwgTl%�wMwhTl&�wMwiTl'�wMwjTl(�wMwkLdTl)�wMwlTl*�wMwmTl+�wMwnTl,�wMwoTl-�wMwpTl.�wMwqTl/�wMwrTl0�wMwsTl1�wMwtTl2�wMwuTl3�wMwvTl4�wMwwTl5�wMwxTl6�wMwyTl7�wMwzTl8�wMwaTl9�wMwbTl:�wXTl;�wMwdTl<�wMweTl=�wMwfTl>�wMwgTl?�wXTl@�wMwiTlA�wMwjTlB�wMwkTlC�wMwlTlD�wMwmTlE�wXTlF�wMwoTlG�wXTlJ�wMwsTlK�wMwtTlL�wMwuTlM�wMwvTlN�wMwwTlO�wMwxTlP�wMwyTlQ�wXTlR�wMwaTlS�wMwbTlT�wMwcTlU�wMwdTlV�wMweTlW�wMwfTlX�wMwgTlY�wMwhTlZ�wMwiTl[�wMwjTl\�wMwkTl]�wMwlTl^�wMwmTl_�wMwnTl`�wMwoTla�wMwpTlb�wMwqTlc�wMwrTld�wMwsTle�wMwtTlf�wMwuTlg�wMwvTlh�wMwwTli�wMwxTlj�wMwyTlk�wMwzTll�wMwaTlm�wMwbTln�wMwcTlo�wMwdTlp�wMweTlq�wMwfTlr�wMwgTls�wMwhTlt�wMwiTlu�wMwjTlv�wMwkTlw�wMwlTlx�wMwmTly�wMwnTlz�wMwoTl{�wMwpTl|�wMwqTl}�wMwrTl~�wMwsTl�wMwtTl��wMwuTl��wMwvTl��wMwwTl��wMwxTl��wMwyTl��wMwzTl��wMwaTl��wMwbTl��wMwcTl��wMwdTl��wMweTl��wMwfTl��wMwgTl��wMwhTl��wMwiLdTl��wMwjTl��wMwkTl��wMwlTl��wMwmTl��wMwnTl��wMwoTl��wMwpTl��wMwqTl��wMwrTl��wMwsTl��wMwtTl��wMwuTl��wMwvTl��wMwwTl��wMwxTl��wMwyTl��wMwzTl��wMwaTl��wMwbTl��wMwcTl��wMwdTl��wMweTl��wMwfTl��wMwgTl��wMwhTl��wMwiTl��wMwjTl��wMwkTl��wMwlTl��wMwmTl��wMwnTl��wMwoTl��wMwpTl��wMwqTl��wMwrTl��wMwsTl��wMwtTl��wMwuTl��wMwvTl��wMwwTl��wMwxTl��wMwyTl��wMwzTl��wMwaTl��wMwbTl��wMwcTl��wMwdTl��wMweTl��wMwfTl��wMwgTl��wMwhTl��wMwiTl��wMwjTl��wMwkTl��wMwlTl��wMwmTl��wMwnTl��wMwoTl��wMwpTl��wMwqTl��wMwrTl��wMwsTl��wMwtTl��wMwuTl��wMwvTl��wMwwTl��wMwxTl��wMwyTl��wMwzTl��wMwaTl��wMwbTl��wMwcTl��wMwdTl��wMweTl��wMwfTl��wMwgTl��wMwhTl��wMwiTl��wMwjTl��wMwkTl��wMwlTl��wMwmTl��wMwnTl��wMwoTl��wMwpTl��wMwqTl��wMwrTl��wMwsTl��wMwtTl��wMwuTl��wMwvTl��wMwwTl��wMwxTl��wMwyTl��wMwzTl��wMwaTl��wMwbTl��wMwcTl��wMwdTl��wMweLdTl��wMwfTl��wMwgTl��wMwhTl��wMwiTl��wMwjTl��wMwkTl��wMwlTl��wMwmTl��wMwnTl��wMwoTl��wMwpTl��wMwqTl��wMwrTl�wMwsTl�wMwtTl�wMwuTl�wMwvTl�wMwwTl�wMwxTl�wMwyTl�wMwzTl�wMwaTl	�wMwbTl
�wMwcTl�wMwdTl�wMweTl
�wMwfTl�wMwgTl�wMwhTl�wMwiTl�wMwjTl�wMwkTl�wMwlTl�wMwmTl�wMwnTl�wMwoTl�wMwpTl�wMwqTl�wMwrTl�wMwsTl�wMwtTl�wMwuTl�wMwvTl�wMwwTl�wMwxTl �wMwyTl!�wMwzTl"�wMwaTl#�wMwbTl$�wMwcTl%�wMwdTl&�wMweTl'�wMwfTl(�wMwgTl)�wMwhTl*�wMwiTl+�wMwjTl,�wMwkTl-�wMwlTl.�wMwmTl/�wMwnTl0�wMwoTl1�wMwpTl2�wMwqTl3�wMwrTl4�wMwsTl5�wMwtTl6�wMwuTl7�wMwvTl8�wMwwTl9�wMwxTl:�wMwyTl;�wMwzTl<�wMwaTl=�wMwbTl>�wMwcTl?�wMwdTl@�wMweTlA�wMwfTlB�wMwgTlC�wMwhTlD�wMwiTlE�wMwjTlF�wMwkTlG�wMwlTlH�wMwmTlI�wMwnTlJ�wMwoTlK�wMwpTlL�wMwqTlM�wMwrTlN�wMwsTlO�wMwtTlP�wMwuTlQ�wMwvTlR�wMwwTlS�wMwxTlT�wMwyTlU�wMwzTlV�wMwaLdTlW�wMwbTlX�wMwcTlY�wMwdTlZ�wMweTl[�wMwfTl\�wMwgTl]�wMwhTl^�wMwiTl_�wMwjTl`�wMwkTla�wMwlTlb�wMwmTlc�wMwnTld�wMwoTle�wMwpTlf�wMwqTlg�wMwrTlh�wMwsTli�wMwtTlj�wMwuTlk�wMwvTll�wMwwTlm�wMwxTln�wMwyTlo�wMwzTlp�wMwaTlq�wMwbTlr�wMwcTls�wMwdTlt�wMweTlu�wMwfTlv�wMwgTlw�wMwhTlx�wMwiTly�wMwjTlz�wMwkTl{�wMwlTl|�wMwmTl}�wMwnTl~�wMwoTl�wMwpTl��wMwqTl��wMwrTl��wMwsTl��wMwtTl��wMwuTl��wMwvTl��wMwwTl��wMwxTl��wMwyTl��wMwzTl��wMwaTl��wMwbTl��wMwcTl��wMwdTl��wMweTl��wMwfTl��wMwgTl��wMwhTl��wMwiTl��wMwjTl��wMwkTl��wMwlTl��wMwmTl��wMwnTl��wMwoTl��wMwpTl��wMwqTl��wMwrTl��wMwsTl��wMwtTl��wMwuTl��wMwvTl��wMwwTl��wMwxTl��wMwyTl��wMwzTl��wMuıTl��wMuȷTl��wXTl��wMuαTl��wMuβTl��wMuγTl��wMuδTl��wMuεTl��wMuζTl��wMuηTl��wMuθTl��wMuιTl��wMuκTl��wMuλTl��wMuμTl��wMuνTl��wMuξTl��wMuοTl��wMuπTl��wMuρTl��wMuθTl��wMuσTl��wMuτLdTl��wMuυTl��wMuφTl��wMuχTl��wMuψTl��wMuωTl��wMu∇Tl��wMuαTl��wMuβTl��wMuγTl��wMuδTl��wMuεTl��wMuζTl��wMuηTl��wMuθTl��wMuιTl��wMuκTl��wMuλTl��wMuμTl��wMuνTl��wMuξTl��wMuοTl��wMuπTl��wMuρTl��wMuσTl��wMuτTl��wMuυTl��wMuφTl��wMuχTl��wMuψTl��wMuωTl��wMu∂Tl��wMuεTl��wMuθTl��wMuκTl��wMuφTl��wMuρTl��wMuπTl��wMuαTl��wMuβTl��wMuγTl��wMuδTl��wMuεTl��wMuζTl��wMuηTl��wMuθTl��wMuιTl��wMuκTl��wMuλTl��wMuμTl��wMuνTl��wMuξTl��wMuοTl��wMuπTl��wMuρTl��wMuθTl��wMuσTl��wMuτTl��wMuυTl��wMuφTl��wMuχTl��wMuψTl��wMuωTl��wMu∇Tl��wMuαTl��wMuβTl��wMuγTl��wMuδTl�wMuεTl�wMuζTl�wMuηTl�wMuθTl�wMuιTl�wMuκTl�wMuλTl�wMuμTl�wMuνTl	�wMuξTl
�wMuοTl�wMuπTl�wMuρTl
�wMuσTl�wMuτTl�wMuυTl�wMuφTl�wMuχTl�wMuψTl�wMuωTl�wMu∂Tl�wMuεTl�wMuθTl�wMuκTl�wMuφTl�wMuρTl�wMuπTl�wMuαTl�wMuβTl�wMuγTl�wMuδTl �wMuεTl!�wMuζLdTl"�wMuηTl#�wMuθTl$�wMuιTl%�wMuκTl&�wMuλTl'�wMuμTl(�wMuνTl)�wMuξTl*�wMuοTl+�wMuπTl,�wMuρTl-�wMuθTl.�wMuσTl/�wMuτTl0�wMuυTl1�wMuφTl2�wMuχTl3�wMuψTl4�wMuωTl5�wMu∇Tl6�wMuαTl7�wMuβTl8�wMuγTl9�wMuδTl:�wMuεTl;�wMuζTl<�wMuηTl=�wMuθTl>�wMuιTl?�wMuκTl@�wMuλTlA�wMuμTlB�wMuνTlC�wMuξTlD�wMuοTlE�wMuπTlF�wMuρTlG�wMuσTlI�wMuτTlJ�wMuυTlK�wMuφTlL�wMuχTlM�wMuψTlN�wMuωTlO�wMu∂TlP�wMuεTlQ�wMuθTlR�wMuκTlS�wMuφTlT�wMuρTlU�wMuπTlV�wMuαTlW�wMuβTlX�wMuγTlY�wMuδTlZ�wMuεTl[�wMuζTl\�wMuηTl]�wMuθTl^�wMuιTl_�wMuκTl`�wMuλTla�wMuμTlb�wMuνTlc�wMuξTld�wMuοTle�wMuπTlf�wMuρTlg�wMuθTlh�wMuσTli�wMuτTlj�wMuυTlk�wMuφTll�wMuχTlm�wMuψTln�wMuωTlo�wMu∇Tlp�wMuαTlq�wMuβTlr�wMuγTls�wMuδTlt�wMuεTlu�wMuζTlv�wMuηTlw�wMuθTlx�wMuιTly�wMuκTlz�wMuλTl{�wMuμTl|�wMuνTl}�wMuξTl~�wMuοTl�wMuπTl��wMuρTl��wMuσTl��wMuτTl��wMuυTl��wMuφTl��wMuχTl��wMuψLdTl��wMuωTl��wMu∂Tl��wMuεTl��wMuθTl��wMuκTl��wMuφTl��wMuρTl��wMuπTl��wMuαTl��wMuβTl��wMuγTl��wMuδTl��wMuεTl��wMuζTl��wMuηTl��wMuθTl��wMuιTl��wMuκTl��wMuλTl��wMuμTl��wMuνTl��wMuξTl��wMuοTl��wMuπTl��wMuρTl��wMuθTl��wMuσTl��wMuτTl��wMuυTl��wMuφTl��wMuχTl��wMuψTl��wMuωTl��wMu∇Tl��wMuαTl��wMuβTl��wMuγTl��wMuδTl��wMuεTl��wMuζTl��wMuηTl��wMuθTl��wMuιTl��wMuκTl��wMuλTl��wMuμTl��wMuνTl��wMuξTl��wMuοTl��wMuπTl��wMuρTl��wMuσTl��wMuτTl��wMuυTl��wMuφTl��wMuχTl��wMuψTl��wMuωTl��wMu∂Tl��wMuεTl��wMuθTl��wMuκTl��wMuφTl��wMuρTl��wMuπTl��wMuϝTl��wXTl��wMw0Tl��wMw1Tl��wMw2Tl��wMw3Tl��wMw4Tl��wMw5Tl��wMw6Tl��wMw7Tl��wMw8Tl��wMw9Tl��wMw0Tl��wMw1Tl��wMw2Tl��wMw3Tl��wMw4Tl��wMw5Tl��wMw6Tl��wMw7Tl��wMw8Tl��wMw9Tl��wMw0Tl��wMw1Tl��wMw2Tl��wMw3Tl��wMw4Tl��wMw5Tl��wMw6Tl��wMw7Tl��wMw8Tl��wMw9Tl��wMw0Tl��wMw1Tl��wMw2LdTl��wMw3Tl��wMw4Tl��wMw5Tl��wMw6Tl��wMw7Tl��wMw8Tl��wMw9Tl��wMw0Tl��wMw1Tl��wMw2Tl��wMw3Tl��wMw4Tl��wMw5Tl��wMw6Tl��wMw7Tl��wMw8Tl��wMw9Tl�wVTl��wXTl��wVTl��wXTl��wVTl��wXTl�wVTl�wXTl�wVTl�wXTl�wVTl"�wXTl#�wVTl%�wXTl&�wVTl+�wXTl�wVTl��wXTl��wVTl��wXTl�wMu𞤢Tl�wMu𞤣Tl�wMu𞤤Tl�wMu𞤥Tl�wMu𞤦Tl�wMu𞤧Tl�wMu𞤨Tl�wMu𞤩Tl�wMu𞤪Tl	�wMu𞤫Tl
�wMu𞤬Tl�wMu𞤭Tl�wMu𞤮Tl
�wMu𞤯Tl�wMu𞤰Tl�wMu𞤱Tl�wMu𞤲Tl�wMu𞤳Tl�wMu𞤴Tl�wMu𞤵Tl�wMu𞤶Tl�wMu𞤷Tl�wMu𞤸Tl�wMu𞤹Tl�wMu𞤺Tl�wMu𞤻Tl�wMu𞤼Tl�wMu𞤽Tl�wMu𞤾Tl�wMu𞤿Tl�wMu𞥀Tl�wMu𞥁Tl �wMu𞥂Tl!�wMu𞥃Tl"�wVTlK�wXTlP�wVTlZ�wXTl^�wVTl`�wXTlq�wVTl��wXTl�wMuاTl�wMuبTl�wMuجTl�wMuدTl�wXTl�wMuوTl�wMuزTl�wMuحTl�wMuطTl	�wMuيTl
�wMuكTl�wMuلTl�wMuمTl
�wMuنTl�wMuسTl�wMuعTl�wMuفTl�wMuصTl�wMuقTl�wMuرTl�wMuشLdTl�wMuتTl�wMuثTl�wMuخTl�wMuذTl�wMuضTl�wMuظTl�wMuغTl�wMuٮTl�wMuںTl�wMuڡTl�wMuٯTl �wXTl!�wMuبTl"�wMuجTl#�wXTl$�wMuهTl%�wXTl'�wMuحTl(�wXTl)�wMuيTl*�wMuكTl+�wMuلTl,�wMuمTl-�wMuنTl.�wMuسTl/�wMuعTl0�wMuفTl1�wMuصTl2�wMuقTl3�wXTl4�wMuشTl5�wMuتTl6�wMuثTl7�wMuخTl8�wXTl9�wMuضTl:�wXTl;�wMuغTl<�wXTlB�wMuجTlC�wXTlG�wMuحTlH�wXTlI�wMuيTlJ�wXTlK�wMuلTlL�wXTlM�wMuنTlN�wMuسTlO�wMuعTlP�wXTlQ�wMuصTlR�wMuقTlS�wXTlT�wMuشTlU�wXTlW�wMuخTlX�wXTlY�wMuضTlZ�wXTl[�wMuغTl\�wXTl]�wMuںTl^�wXTl_�wMuٯTl`�wXTla�wMuبTlb�wMuجTlc�wXTld�wMuهTle�wXTlg�wMuحTlh�wMuطTli�wMuيTlj�wMuكTlk�wXTll�wMuمTlm�wMuنTln�wMuسTlo�wMuعTlp�wMuفTlq�wMuصTlr�wMuقTls�wXTlt�wMuشTlu�wMuتTlv�wMuثTlw�wMuخTlx�wXTly�wMuضTlz�wMuظTl{�wMuغTl|�wMuٮTl}�wXTl~�wMuڡTl�wXTl��wMuاTl��wMuبTl��wMuجTl��wMuدLdTl��wMuهTl��wMuوTl��wMuزTl��wMuحTl��wMuطTl��wMuيTl��wXTl��wMuلTl��wMuمTl��wMuنTl��wMuسTl��wMuعTl��wMuفTl��wMuصTl��wMuقTl��wMuرTl��wMuشTl��wMuتTl��wMuثTl��wMuخTl��wMuذTl��wMuضTl��wMuظTl��wMuغTl��wXTl��wMuبTl��wMuجTl��wMuدTl��wXTl��wMuوTl��wMuزTl��wMuحTl��wMuطTl��wMuيTl��wXTl��wMuلTl��wMuمTl��wMuنTl��wMuسTl��wMuعTl��wMuفTl��wMuصTl��wMuقTl��wMuرTl��wMuشTl��wMuتTl��wMuثTl��wMuخTl��wMuذTl��wMuضTl��wMuظTl��wMuغTl��wXTl��wVTl��wXTl�wVTl,�wXTl0�wVTl��wXTl��wVTl��wXTl��wVTl��wXTl��wVTl��wXTl��wVTl��wXTl�w3u0,Tl�w3u1,Tl�w3u2,Tl�w3u3,Tl�w3u4,Tl�w3u5,Tl�w3u6,Tl�w3u7,Tl	�w3u8,Tl
�w3u9,Tl�wVTl
�wXTl�w3u(a)Tl�w3u(b)Tl�w3u(c)Tl�w3u(d)Tl�w3u(e)Tl�w3u(f)Tl�w3u(g)Tl�w3u(h)Tl�w3u(i)Tl�w3u(j)Tl�w3u(k)Tl�w3u(l)Tl�w3u(m)Tl�w3u(n)Tl�w3u(o)Tl�w3u(p)Tl �w3u(q)Tl!�w3u(r)Tl"�w3u(s)Tl#�w3u(t)Tl$�w3u(u)LdTl%�w3u(v)Tl&�w3u(w)Tl'�w3u(x)Tl(�w3u(y)Tl)�w3u(z)Tl*�wMu〔s〕Tl+�wMwcTl,�wMwrTl-�wMacdTl.�wMawzTl/�wVTl0�wMwaTl1�wMwbTl2�wMwcTl3�wMwdTl4�wMweTl5�wMwfTl6�wMwgTl7�wMwhTl8�wMwiTl9�wMwjTl:�wMwkTl;�wMwlTl<�wMwmTl=�wMwnTl>�wMwoTl?�wMwpTl@�wMwqTlA�wMwrTlB�wMwsTlC�wMwtTlD�wMwuTlE�wMwvTlF�wMwwTlG�wMwxTlH�wMwyTlI�wMwzTlJ�wMahvTlK�wMamvTlL�wMasdTlM�wMassTlN�wMappvTlO�wMawcTlP�wVTlj�wMamcTlk�wMamdTll�wXTlp�wVTl��wMadjTl��wVTl��wXTl��wVTl�wMuほかTl�wMuココTl�wMuサTl�wXTl�wMu手Tl�wMu字Tl�wMu双Tl�wMuデTl�wMu二Tl�wMu多Tl�wMu解Tl�wMu天Tl�wMu交Tl�wMu映Tl�wMu無Tl�wMu料Tl�wMu前Tl�wMu後Tl�wMu再Tl�wMu新Tl �wMu初Tl!�wMu終Tl"�wMu生Tl#�wMu販Tl$�wMu声Tl%�wMu吹Tl&�wMu演Tl'�wMu投Tl(�wMu捕Tl)�wMu一Tl*�wMu三Tl+�wMu遊Tl,�wMu左Tl-�wMu中Tl.�wMu右Tl/�wMu指Tl0�wMu走Tl1�wMu打Tl2�wMu禁Tl3�wMu空Tl4�wMu合Tl5�wMu満Tl6�wMu有Tl7�wMu月Tl8�wMu申Tl9�wMu割Tl:�wMu営Tl;�wMu配LdTl<�wXTl@�wMu〔本〕TlA�wMu〔三〕TlB�wMu〔二〕TlC�wMu〔安〕TlD�wMu〔点〕TlE�wMu〔打〕TlF�wMu〔盗〕TlG�wMu〔勝〕TlH�wMu〔敗〕TlI�wXTlP�wMu得TlQ�wMu可TlR�wXTl`�wVTlf�wXTl�wVTl�wXTl�wVTl�wXTl�wVTl��wXTl�wVTlt�wXTl��wVTl�wXTl�wVTl�wXTl�wVTlH�wXTlP�wVTlZ�wXTl`�wVTl��wXTl��wVTl��wXTl�wVTl�wXTl�wVTl?�wXTl@�wVTlq�wXTls�wVTlw�wXTlz�wVTl{�wXTl|�wVTl��wXTl��wVTl��wXTl��wVTl�wXTl�wVTl�wXTl`�wVTln�wXTlwVTlצwXTl�wVTl5�wXTl@�wVTl�wXTl �wVTl��wXTl��wVTl��wXTl�wMu丽Tl�wMu丸Tl�wMu乁Tl�wMu𠄢Tl�wMu你Tl�wMu侮Tl�wMu侻Tl�wMu倂Tl�wMu偺Tl	�wMu備Tl
�wMu僧Tl�wMu像Tl�wMu㒞Tl
�wMu𠘺Tl�wMu免Tl�wMu兔Tl�wMu兤Tl�wMu具Tl�wMu𠔜Tl�wMu㒹Tl�wMu內Tl�wMu再Tl�wMu𠕋Tl�wMu冗Tl�wMu冤Tl�wMu仌Tl�wMu冬Tl�wMu况Tl�wMu𩇟Tl�wMu凵Tl�wMu刃Tl�wMu㓟Tl �wMu刻Tl!�wMu剆LdTl"�wMu割Tl#�wMu剷Tl$�wMu㔕Tl%�wMu勇Tl&�wMu勉Tl'�wMu勤Tl(�wMu勺Tl)�wMu包Tl*�wMu匆Tl+�wMu北Tl,�wMu卉Tl-�wMu卑Tl.�wMu博Tl/�wMu即Tl0�wMu卽Tl1�wMu卿Tl4�wMu𠨬Tl5�wMu灰Tl6�wMu及Tl7�wMu叟Tl8�wMu𠭣Tl9�wMu叫Tl:�wMu叱Tl;�wMu吆Tl<�wMu咞Tl=�wMu吸Tl>�wMu呈Tl?�wMu周Tl@�wMu咢TlA�wMu哶TlB�wMu唐TlC�wMu啓TlD�wMu啣TlE�wMu善TlG�wMu喙TlH�wMu喫TlI�wMu喳TlJ�wMu嗂TlK�wMu圖TlL�wMu嘆TlM�wMu圗TlN�wMu噑TlO�wMu噴TlP�wMu切TlQ�wMu壮TlR�wMu城TlS�wMu埴TlT�wMu堍TlU�wMu型TlV�wMu堲TlW�wMu報TlX�wMu墬TlY�wMu𡓤TlZ�wMu売Tl[�wMu壷Tl\�wMu夆Tl]�wMu多Tl^�wMu夢Tl_�wMu奢Tl`�wMu𡚨Tla�wMu𡛪Tlb�wMu姬Tlc�wMu娛Tld�wMu娧Tle�wMu姘Tlf�wMu婦Tlg�wMu㛮Tlh�wXTli�wMu嬈Tlj�wMu嬾Tll�wMu𡧈Tlm�wMu寃Tln�wMu寘Tlo�wMu寧Tlp�wMu寳Tlq�wMu𡬘Tlr�wMu寿Tls�wMu将Tlt�wXTlu�wMu尢Tlv�wMu㞁Tlw�wMu屠Tlx�wMu屮Tly�wMu峀Tlz�wMu岍Tl{�wMu𡷤Tl|�wMu嵃Tl}�wMu𡷦Tl~�wMu嵮Tl�wMu嵫Tl��wMu嵼Tl��wMu巡Tl��wMu巢Tl��wMu㠯Tl��wMu巽Tl��wMu帨Tl��wMu帽Tl��wMu幩Tl��wMu㡢Tl��wMu𢆃LdTl��wMu㡼Tl��wMu庰Tl��wMu庳Tl��wMu庶Tl��wMu廊Tl��wMu𪎒Tl��wMu廾Tl��wMu𢌱Tl��wMu舁Tl��wMu弢Tl��wMu㣇Tl��wMu𣊸Tl��wMu𦇚Tl��wMu形Tl��wMu彫Tl��wMu㣣Tl��wMu徚Tl��wMu忍Tl��wMu志Tl��wMu忹Tl��wMu悁Tl��wMu㤺Tl��wMu㤜Tl��wMu悔Tl��wMu𢛔Tl��wMu惇Tl��wMu慈Tl��wMu慌Tl��wMu慎Tl��wMu慌Tl��wMu慺Tl��wMu憎Tl��wMu憲Tl��wMu憤Tl��wMu憯Tl��wMu懞Tl��wMu懲Tl��wMu懶Tl��wMu成Tl��wMu戛Tl��wMu扝Tl��wMu抱Tl��wMu拔Tl��wMu捐Tl��wMu𢬌Tl��wMu挽Tl��wMu拼Tl��wMu捨Tl��wMu掃Tl��wMu揤Tl��wMu𢯱Tl��wMu搢Tl��wMu揅Tl��wMu掩Tl�wMu㨮Tl�wMu摩Tl�wMu摾Tl�wMu撝Tl�wMu摷Tl�wMu㩬Tl�wMu敏Tl�wMu敬Tl�wMu𣀊Tl�wMu旣Tl�wMu書Tl�wMu晉Tl�wMu㬙Tl�wMu暑Tl�wMu㬈Tl�wMu㫤Tl�wMu冒Tl�wMu冕Tl�wMu最Tl�wMu暜Tl�wMu肭Tl�wMu䏙Tl�wMu朗Tl�wMu望Tl�wMu朡Tl�wMu杞Tl�wMu杓Tl�wMu𣏃Tl�wMu㭉Tl�wMu柺Tl�wMu枅Tl�wMu桒Tl�wMu梅Tl�wMu𣑭Tl�wMu梎Tl�wMu栟Tl�wMu椔Tl�wMu㮝Tl�wMu楂Tl�wMu榣Tl�wMu槪Tl�wMu檨Tl�wMu𣚣Tl�wMu櫛Tl�wMu㰘Tl�wMu次LdTl�wMu𣢧Tl�wMu歔Tl�wMu㱎Tl�wMu歲Tl�wMu殟Tl��wMu殺Tl��wMu殻Tl��wMu𣪍Tl��wMu𡴋Tl��wMu𣫺Tl��wMu汎Tl��wMu𣲼Tl��wMu沿Tl��wMu泍Tl��wMu汧Tl��wMu洖Tl�wMu派Tl�wMu海Tl�wMu流Tl�wMu浩Tl�wMu浸Tl�wMu涅Tl�wMu𣴞Tl�wMu洴Tl�wMu港Tl	�wMu湮Tl
�wMu㴳Tl�wMu滋Tl�wMu滇Tl
�wMu𣻑Tl�wMu淹Tl�wMu潮Tl�wMu𣽞Tl�wMu𣾎Tl�wMu濆Tl�wMu瀹Tl�wMu瀞Tl�wMu瀛Tl�wMu㶖Tl�wMu灊Tl�wMu災Tl�wMu灷Tl�wMu炭Tl�wMu𠔥Tl�wMu煅Tl�wMu𤉣Tl�wMu熜Tl�wXTl �wMu爨Tl!�wMu爵Tl"�wMu牐Tl#�wMu𤘈Tl$�wMu犀Tl%�wMu犕Tl&�wMu𤜵Tl'�wMu𤠔Tl(�wMu獺Tl)�wMu王Tl*�wMu㺬Tl+�wMu玥Tl,�wMu㺸Tl.�wMu瑇Tl/�wMu瑜Tl0�wMu瑱Tl1�wMu璅Tl2�wMu瓊Tl3�wMu㼛Tl4�wMu甤Tl5�wMu𤰶Tl6�wMu甾Tl7�wMu𤲒Tl8�wMu異Tl9�wMu𢆟Tl:�wMu瘐Tl;�wMu𤾡Tl<�wMu𤾸Tl=�wMu𥁄Tl>�wMu㿼Tl?�wMu䀈Tl@�wMu直TlA�wMu𥃳TlB�wMu𥃲TlC�wMu𥄙TlD�wMu𥄳TlE�wMu眞TlF�wMu真TlH�wMu睊TlI�wMu䀹TlJ�wMu瞋TlK�wMu䁆TlL�wMu䂖TlM�wMu𥐝TlN�wMu硎TlO�wMu碌TlP�wMu磌TlQ�wMu䃣TlR�wMu𥘦TlS�wMu祖TlT�wMu𥚚TlU�wMu𥛅LdTlV�wMu福TlW�wMu秫TlX�wMu䄯TlY�wMu穀TlZ�wMu穊Tl[�wMu穏Tl\�wMu𥥼Tl]�wMu𥪧Tl_�wXTl`�wMu䈂Tla�wMu𥮫Tlb�wMu篆Tlc�wMu築Tld�wMu䈧Tle�wMu𥲀Tlf�wMu糒Tlg�wMu䊠Tlh�wMu糨Tli�wMu糣Tlj�wMu紀Tlk�wMu𥾆Tll�wMu絣Tlm�wMu䌁Tln�wMu緇Tlo�wMu縂Tlp�wMu繅Tlq�wMu䌴Tlr�wMu𦈨Tls�wMu𦉇Tlt�wMu䍙Tlu�wMu𦋙Tlv�wMu罺Tlw�wMu𦌾Tlx�wMu羕Tly�wMu翺Tlz�wMu者Tl{�wMu𦓚Tl|�wMu𦔣Tl}�wMu聠Tl~�wMu𦖨Tl�wMu聰Tl��wMu𣍟Tl��wMu䏕Tl��wMu育Tl��wMu脃Tl��wMu䐋Tl��wMu脾Tl��wMu媵Tl��wMu𦞧Tl��wMu𦞵Tl��wMu𣎓Tl��wMu𣎜Tl��wMu舁Tl��wMu舄Tl��wMu辞Tl��wMu䑫Tl��wMu芑Tl��wMu芋Tl��wMu芝Tl��wMu劳Tl��wMu花Tl��wMu芳Tl��wMu芽Tl��wMu苦Tl��wMu𦬼Tl��wMu若Tl��wMu茝Tl��wMu荣Tl��wMu莭Tl��wMu茣Tl��wMu莽Tl��wMu菧Tl��wMu著Tl��wMu荓Tl��wMu菊Tl��wMu菌Tl��wMu菜Tl��wMu𦰶Tl��wMu𦵫Tl��wMu𦳕Tl��wMu䔫Tl��wMu蓱Tl��wMu蓳Tl��wMu蔖Tl��wMu𧏊Tl��wMu蕤Tl��wMu𦼬Tl��wMu䕝Tl��wMu䕡Tl��wMu𦾱Tl��wMu𧃒Tl��wMu䕫Tl��wMu虐Tl��wMu虜Tl��wMu虧Tl��wMu虩Tl��wMu蚩Tl��wMu蚈Tl��wMu蜎Tl��wMu蛢LdTl��wMu蝹Tl��wMu蜨Tl��wMu蝫Tl��wMu螆Tl��wXTl��wMu蟡Tl��wMu蠁Tl�wMu䗹Tl�wMu衠Tl�wMu衣Tl�wMu𧙧Tl�wMu裗Tl�wMu裞Tl�wMu䘵Tl�wMu裺Tl�wMu㒻Tl�wMu𧢮Tl�wMu𧥦Tl�wMu䚾Tl�wMu䛇Tl�wMu誠Tl�wMu諭Tl�wMu變Tl�wMu豕Tl�wMu𧲨Tl�wMu貫Tl�wMu賁Tl�wMu贛Tl�wMu起Tl�wMu𧼯Tl�wMu𠠄Tl�wMu跋Tl�wMu趼Tl�wMu跰Tl�wMu𠣞Tl�wMu軔Tl�wMu輸Tl�wMu𨗒Tl�wMu𨗭Tl�wMu邔Tl�wMu郱Tl�wMu鄑Tl�wMu𨜮Tl�wMu鄛Tl�wMu鈸Tl�wMu鋗Tl�wMu鋘Tl�wMu鉼Tl�wMu鏹Tl�wMu鐕Tl�wMu𨯺Tl�wMu開Tl�wMu䦕Tl�wMu閷Tl�wMu𨵷Tl�wMu䧦Tl�wMu雃Tl�wMu嶲Tl��wMu霣Tl��wMu𩅅Tl��wMu𩈚Tl��wMu䩮Tl��wMu䩶Tl��wMu韠Tl��wMu𩐊Tl��wMu䪲Tl��wMu𩒖Tl��wMu頋Tl�wMu頩Tl�wMu𩖶Tl�wMu飢Tl�wMu䬳Tl�wMu餩Tl�wMu馧Tl�wMu駂Tl�wMu駾Tl�wMu䯎Tl	�wMu𩬰Tl
�wMu鬒Tl�wMu鱀Tl�wMu鳽Tl
�wMu䳎Tl�wMu䳭Tl�wMu鵧Tl�wMu𪃎Tl�wMu䳸Tl�wMu𪄅Tl�wMu𪈎Tl�wMu𪊑Tl�wMu麻Tl�wMu䵖Tl�wMu黹Tl�wMu黾Tl�wMu鼅Tl�wMu鼏Tl�wMu鼖Tl�wMu鼻Tl�wMu𪘀Tl�wXTlwILTl�wXuIDNA Mapping Table from UTS46.a__doc__u/usr/lib/python3/dist-packages/idna/uts46data.pya__file__a__spec__aoriginahas_locationa__cached__u11.0.0a__version__a_seg_0a_seg_1a_seg_2a_seg_3a_seg_4a_seg_5a_seg_6a_seg_7a_seg_8a_seg_9a_seg_10a_seg_11a_seg_12a_seg_13a_seg_14a_seg_15a_seg_16a_seg_17a_seg_18a_seg_19a_seg_20a_seg_21a_seg_22a_seg_23a_seg_24a_seg_25a_seg_26a_seg_27a_seg_28a_seg_29a_seg_30a_seg_31a_seg_32a_seg_33a_seg_34a_seg_35a_seg_36a_seg_37a_seg_38a_seg_39a_seg_40a_seg_41a_seg_42a_seg_43a_seg_44a_seg_45a_seg_46a_seg_47a_seg_48a_seg_49a_seg_50a_seg_51a_seg_52a_seg_53a_seg_54a_seg_55a_seg_56a_seg_57a_seg_58a_seg_59a_seg_60a_seg_61a_seg_62a_seg_63a_seg_64a_seg_65a_seg_66a_seg_67a_seg_68a_seg_69a_seg_70a_seg_71a_seg_72a_seg_73a_seg_74a_seg_75a_seg_76a_seg_77a_seg_78auts46datau<module idna.uts46data>u.jwt.algorithms��anoneaNoneAlgorithmaHS256aHMACAlgorithmaSHA256aHS384aSHA384aHS512aSHA512ahas_cryptoaRS256aRSAAlgorithmaRS384aRS512aES256aECAlgorithmaES384aES521aES512aPS256aRSAPSSAlgorithmaPS384aPS512adefault_algorithmsu
    Returns the algorithms that are implemented by the library.
    u
        Performs necessary validation and conversions on the key and returns
        the key value in the proper format for sign() and verify().
        u
        Returns a digital signature for the specified message
        using the specified key value.
        u
        Verifies that the specified digital signature is valid
        for the specified message and key values.
        u
        Serializes a given RSA key into a JWK
        u
        Deserializes a given RSA key from JWK back into a PublicKey or PrivateKey object
        uaInvalidKeyErrorTuWhen alg = "none", key value must be None.ahash_algaforce_bytesais_pem_formatais_ssh_keyTuThe specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.ajsonadumpswkaforce_unicodeabase64url_encodeaktyaoctaloadsagetTaktyTuNot an HMAC keyabase64url_decodeahmacanewadigestaconstant_time_compareasignaRSAPrivateKeyaRSAPublicKeyastring_typesastartswithTcssh-rsaaload_ssh_public_keyadefault_backendTabackendaload_pem_private_keyTapasswordabackendaload_pem_public_keyuExpecting a PEM-formatted key.aprivate_numbersaRSAakey_opsLasignwnato_base64url_uintapublic_numberswewdwpwqadpadmp1adqadmq1aqiaiqmpaverifyLaverifyTuNot a public or private keyTuKey is not valid JSONTuNot an RSA keyaothTuUnsupported RSA private key: > 2 primes not supportedLwpwqadpadqaqiTuRSA key must include all parameters if any are present besides daRSAPublicNumbersafrom_base64url_uintaRSAPrivateNumbersTwdwpwqadmp1admq1aiqmpapublic_numbersarsa_recover_prime_factorsutoo many values to unpack (expected 2)arsa_crt_dmp1arsa_crt_dmq1arsa_crt_iqmpaprivate_keyapublic_keyapaddingaPKCS1v15aInvalidSignatureaEllipticCurvePrivateKeyaEllipticCurvePublicKeyTcecdsa-sha2-aecaECDSAader_to_raw_signatureacurvearaw_to_der_signatureaPSSaMGF1adigest_sizeTamgfasalt_lengtha__doc__u/usr/lib/python3/dist-packages/jwt/algorithms.pya__file__a__spec__aoriginahas_locationa__cached__ahashliblacompatTaconstant_time_compareastring_typeslaexceptionsTaInvalidKeyErrorautilsT
abase64url_decodeabase64url_encodeader_to_raw_signatureaforce_bytesaforce_unicodeafrom_base64url_uintaraw_to_der_signatureato_base64url_uintais_pem_formatais_ssh_keyucryptography.hazmat.primitivesTahashesahashesucryptography.hazmat.primitives.serializationTaload_pem_private_keyaload_pem_public_keyaload_ssh_public_keyucryptography.hazmat.primitives.asymmetric.rsaTaRSAPrivateKeyaRSAPublicKeyaRSAPrivateNumbersaRSAPublicNumbersarsa_recover_prime_factorsarsa_crt_dmp1arsa_crt_dmq1arsa_crt_iqmpucryptography.hazmat.primitives.asymmetric.ecTaEllipticCurvePrivateKeyaEllipticCurvePublicKeyucryptography.hazmat.primitives.asymmetricTaecapaddingucryptography.hazmat.backendsTadefault_backenducryptography.exceptionsTaInvalidSignatureS
aRS256aES512aES256aES521aRS384aPS384aPS256aRS512aPS512aES384arequires_cryptographyaget_default_algorithmsTOobjectametaclassa__prepare__aAlgorithma__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ujwt.algorithmsa__module__u
    The interface for an algorithm used to sign and verify tokens.
    a__qualname__aprepare_keyuAlgorithm.prepare_keyuAlgorithm.signuAlgorithm.verifyastaticmethodato_jwkuAlgorithm.to_jwkafrom_jwkuAlgorithm.from_jwka__orig_bases__u
    Placeholder for use when no signing or verification
    operations are required.
    uNoneAlgorithm.prepare_keycuNoneAlgorithm.signuNoneAlgorithm.verifyu
    Performs signing and verification operations using HMAC
    and the specified hash function.
    asha256asha384asha512a__init__uHMACAlgorithm.__init__uHMACAlgorithm.prepare_keyuHMACAlgorithm.to_jwkuHMACAlgorithm.from_jwkuHMACAlgorithm.signuHMACAlgorithm.verifyu
        Performs signing and verification operations using
        RSASSA-PKCS-v1_5 and the specified hash function.
        uRSAAlgorithm.__init__uRSAAlgorithm.prepare_keyuRSAAlgorithm.to_jwkuRSAAlgorithm.from_jwkuRSAAlgorithm.signuRSAAlgorithm.verifyu
        Performs signing and verification operations using
        ECDSA and the specified hash function
        uECAlgorithm.__init__uECAlgorithm.prepare_keyuECAlgorithm.signuECAlgorithm.verifyu
        Performs a signature using RSASSA-PSS with MGF1
        uRSAPSSAlgorithm.signuRSAPSSAlgorithm.verifyu<listcomp>Tapropaobju<module jwt.algorithms>Ta__class__Taselfahash_algTajwkTajwkaobjT
ajwkaobjaother_propsaprops_foundaany_props_foundapublic_numbersanumberswdwpwqTadefault_algorithmsTaselfakeyTaselfamsgakeyTaselfamsgakeyader_sigTakey_objTakey_objaobjanumbersTaselfamsgakeyasigTaselfamsgakeyasigader_sig.jwt.api_jws��aget_default_algorithmsa_algorithmsaselfa_valid_algsakeysamerge_dicta_get_default_optionsaoptionsDaverify_signaturetuAlgorithm already has a handler.aAlgorithmuObject is not of type `Algorithm`aaddu
        Registers a new Algorithm for use when creating and verifying tokens.
        uThe specified algorithm could not be removed because it is not registered.aremoveu
        Unregisters an Algorithm for use when creating and verifying tokens
        Throws KeyError if algorithm is not registered.
        u
        Returns a list of supported values for the 'alg' parameter.
        anoneatypaheader_typaalga_validate_headersaforce_bytesajsonadumpsaheaderTw,w:Taseparatorsaclsaappendabase64url_encoded.ajoinaprepare_keyasignahas_cryptoarequires_cryptographyuAlgorithm '%s' could not be found. Do you have cryptography installed?uAlgorithm not supportedaverify_signatureawarningsawarnuIt is strongly recommended that you pass in a value for the "algorithms" argument when calling decode(). This argument will be mandatory in a future version.aDeprecationWarninga_loadutoo many values to unpack (expected 4)uThe verify parameter is deprecated. Please use verify_signature in options instead.Dastacklevella_verify_signatureapayloadluReturns back the JWT header parameters as a dict()

        Note: The signature is not verified so the header parameters
        should not be fully trusted until signature verification is complete
        atext_typeaencodeTuutf-8abinary_typeaDecodeErroruInvalid token type. Token must be a {0}arsplitTd.lutoo many values to unpack (expected 2)asplitTuNot enough segmentsabase64url_decodeabinasciiaErrorTuInvalid header paddingaloadsadecodeuInvalid header string: %saMappingTuInvalid header string: must be a json objectTuInvalid payload paddingTuInvalid crypto paddingagetTaalgaInvalidAlgorithmErrorTuThe specified alg value is not allowedaverifyaInvalidSignatureErrorTuSignature verification failedTuAlgorithm not supportedakida_validate_kidastring_typesaInvalidTokenErrorTuKey ID header parameter must be a stringa__doc__u/usr/lib/python3/dist-packages/jwt/api_jws.pya__file__a__spec__aoriginahas_locationa__cached__laCallableaDictaListaOptionalaUnionaalgorithmsTaAlgorithmaget_default_algorithmsahas_cryptoarequires_cryptographylacompatTaMappingabinary_typeastring_typesatext_typeaexceptionsTaDecodeErroraInvalidAlgorithmErroraInvalidSignatureErroraInvalidTokenErrorautilsTabase64url_decodeabase64url_encodeaforce_bytesamerge_dictTOobjectametaclassa__prepare__aPyJWSa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ujwt.api_jwsa__module__a__qualname__aJWTTnna__init__uPyJWS.__init__astaticmethoduPyJWS._get_default_optionsaregister_algorithmuPyJWS.register_algorithmaunregister_algorithmuPyJWS.unregister_algorithmaget_algorithmsuPyJWS.get_algorithmsTaHS256nnuPyJWS.encodeTutnnuPyJWS.decodeaget_unverified_headeruPyJWS.get_unverified_headeruPyJWS._loadTunuPyJWS._verify_signatureuPyJWS._validate_headersuPyJWS._validate_kida__orig_bases__a_jws_global_obju<module jwt.api_jws>Ta__class__TaselfaalgorithmsaoptionsakeyTaselfajwtasigning_inputacrypto_segmentaheader_segmentapayload_segmentaheader_dataaheaderweapayloadasignatureTaselfaheadersTaselfakidT	aselfapayloadasigning_inputaheaderasignatureakeyaalgorithmsaalgaalg_objT
aselfajwtakeyaverifyaalgorithmsaoptionsakwargsamerged_optionsaverify_signatureapayloadasigning_inputaheaderasignatureTaselfapayloadakeyaalgorithmaheadersajson_encoderasegmentsaheaderajson_headerasigning_inputaalg_objasignatureTaselfTaselfajwtaheadersTaselfaalg_idaalg_objTaselfaalg_idu.jwt.api_jwt�
�D	averify_signatureaverify_expaverify_nbfaverify_iataverify_audaverify_issarequire_exparequire_iatarequire_nbftpppppFppaMappinguExpecting a mapping object, as JWT only supports JSON objects as payloads.TaexpaiatanbfapayloadagetadatetimeatimegmautctimetupleajsonadumpsTw,w:TaseparatorsaclsaencodeTuutf-8aPyJWTawarningsawarnuIt is strongly recommended that you pass in a value for the "algorithms" argument when calling decode(). This argument will be mandatory in a future version.aDeprecationWarninga_loadutoo many values to unpack (expected 4)averify_signatureasetdefaultadecodeakeyaalgorithmsaoptionsaloadsaDecodeErroruInvalid payload string: %sTuInvalid payload string: must be a json objectaverifyamerge_dicta_validate_claimsaverify_expirationaverify_expuThe verify_expiration parameter is deprecated. Please use verify_exp in options instead.atimedeltaatotal_secondsastring_typesaIterableuaudience must be a string, iterable, or Nonea_validate_required_claimsautcnowaiatTaverify_iata_validate_iatanbfTaverify_nbfa_validate_nbfanowaleewayaexpTaverify_expa_validate_expTaverify_issa_validate_issTaverify_auda_validate_audTarequire_expTaexpaMissingRequiredClaimErrorTarequire_iatTaiatTarequire_nbfTanbfaInvalidIssuedAtErrorTuIssued At claim (iat) must be an integer.TuNot Before claim (nbf) must be an integer.aImmatureSignatureErrorTuThe token is not yet valid (nbf)TuExpiration Time claim (exp) must be an integer.aExpiredSignatureErrorTuSignature has expiredaaudTaaudaInvalidAudienceErrorTuInvalid audienceTuInvalid claim format in tokenu<genexpr>uPyJWT._validate_aud.<locals>.<genexpr>aaudience_claimsaissTaissaInvalidIssuerErrorTuInvalid issuera__doc__u/usr/lib/python3/dist-packages/jwt/api_jwt.pya__file__a__spec__aoriginahas_locationa__cached__lacalendarTatimegmTadatetimeatimedeltaaCallableaDictaListaOptionalaUnionaapi_jwsTaPyJWSlaPyJWSTaAlgorithmaget_default_algorithmsaAlgorithmaget_default_algorithmsacompatTaIterableaMappingastring_typesaexceptionsTaDecodeErroraExpiredSignatureErroraImmatureSignatureErroraInvalidAudienceErroraInvalidIssuedAtErroraInvalidIssuerErroraMissingRequiredClaimErrorautilsTamerge_dictametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ujwt.api_jwta__module__a__qualname__aJWTaheader_typeastaticmethoda_get_default_optionsuPyJWT._get_default_optionsTaHS256nnuPyJWT.encodeTutnnuPyJWT.decodeTnnluPyJWT._validate_claimsuPyJWT._validate_required_claimsuPyJWT._validate_iatuPyJWT._validate_nbfuPyJWT._validate_expuPyJWT._validate_auduPyJWT._validate_issa__orig_bases__a_jwt_global_objaregister_algorithmaunregister_algorithmaget_unverified_headerTa.0aaudaaudience_claimsTa.0wcu<module jwt.api_jwt>Ta__class__Taselfapayloadaaudienceaaudience_claimsTaselfapayloadaoptionsaaudienceaissueraleewayakwargsanowTaselfapayloadanowaleewayaexpTaselfapayloadanowaleewayTaselfapayloadaissuerTaselfapayloadanowaleewayanbfTaselfapayloadaoptionsT
aselfajwtakeyaverifyaalgorithmsaoptionsakwargsapayloadw_adecodedweamerged_optionsa__class__T	aselfapayloadakeyaalgorithmaheadersajson_encoderatime_claimajson_payloada__class__u.jwt.compat�.lutoo many values to unpack (expected 2)aresultu
        Returns True if the two strings are equal, False otherwise.

        The time taken is independent of the number of characters that match.
        aremaininglabyte_lengthlato_bytesabigDasignedFavallabufaappendareverseastructapacku%sBu
The `compat` module provides support for backwards compatibility with older
versions of python, and compatibility wrappers around optional packages.
a__doc__u/usr/lib/python3/dist-packages/jwt/compat.pya__file__a__spec__aoriginahas_locationa__cached__ahmacasysaPY3atext_typeabinary_typeastring_typesucollections.abcTaIterableaMappingaIterableaMappingacollectionsacompare_digestaconstant_time_compareabytes_from_intu<module jwt.compat>TavalabufaremainderTavalaremainingabyte_lengthTaval1aval2aresultwxwyu.jwt4u
JSON Web Token implementation

Minimum implementation based on this spec:
http://self-issued.info/docs/draft-jones-json-web-token-01.html
a__doc__u/usr/lib/python3/dist-packages/jwt/__init__.pya__file__Lu/usr/lib/python3/dist-packages/jwta__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__apyjwta__title__u1.7.1a__version__uJosé Padillaa__author__aMITa__license__uCopyright 2015-2018 José Padillaa__copyright__aapi_jwtTaencodeadecodearegister_algorithmaunregister_algorithmaget_unverified_headeraPyJWTlaencodeadecodearegister_algorithmaunregister_algorithmaget_unverified_headeraPyJWTaapi_jwsTaPyJWSaPyJWSaexceptionsTaInvalidTokenErroraDecodeErroraInvalidAlgorithmErroraInvalidAudienceErroraExpiredSignatureErroraImmatureSignatureErroraInvalidIssuedAtErroraInvalidIssuerErroraExpiredSignatureaInvalidAudienceaInvalidIssueraMissingRequiredClaimErroraInvalidSignatureErroraPyJWTErroraInvalidTokenErroraDecodeErroraInvalidAlgorithmErroraInvalidAudienceErroraExpiredSignatureErroraImmatureSignatureErroraInvalidIssuedAtErroraInvalidIssuerErroraExpiredSignatureaInvalidAudienceaInvalidIssueraMissingRequiredClaimErroraInvalidSignatureErroraPyJWTErroru<module jwt>u.jwt.exceptionsM.aclaimuToken is missing the "%s" claima__doc__u/usr/lib/python3/dist-packages/jwt/exceptions.pya__file__a__spec__aoriginahas_locationa__cached__TEExceptionametaclassla__prepare__aPyJWTErrora__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ujwt.exceptionsa__module__u
    Base class for all exceptions
    a__qualname__a__orig_bases__aInvalidTokenErroraDecodeErroraInvalidSignatureErroraExpiredSignatureErroraInvalidAudienceErroraInvalidIssuerErroraInvalidIssuedAtErroraImmatureSignatureErroraInvalidKeyErroraInvalidAlgorithmErroraMissingRequiredClaimErrora__init__uMissingRequiredClaimError.__init__a__str__uMissingRequiredClaimError.__str__aExpiredSignatureaInvalidAudienceaInvalidIssueru<module jwt.exceptions>Ta__class__TaselfaclaimTaselfu.jwt.utils_labinary_typeadecodeTuutf-8atext_typeuExpected a string valueaencodeTaasciild=abase64aurlsafe_b64decodeainputaurlsafe_b64encodeareplaceTd=cluMust be a positive integerabytes_from_intdabase64url_encodeaint_bytesabase64url_decodeastructaunpacku%sBuu%02xlacopyaupdateTEAttributeErrorEValueErroruoriginal and updates must be a dictionary: %su%0*xlabinasciiaa2b_hexaasciiab2a_hexakey_sizelladecode_dss_signatureutoo many values to unpack (expected 2)anumber_to_bytesuInvalid signatureabytes_to_numberaencode_dss_signaturea_PEM_REasearcha_SSH_KEY_FORMATSa_SSH_PUBKEY_RCamatchagroupTla_CERT_SUFFIXakeyu<genexpr>uis_ssh_key.<locals>.<genexpr>a__doc__u/usr/lib/python3/dist-packages/jwt/utils.pya__file__a__spec__aoriginahas_locationa__cached__areacompatTabinary_typeabytes_from_intatext_typelucryptography.hazmat.primitives.asymmetric.utilsTadecode_dss_signatureaencode_dss_signatureaforce_unicodeaforce_bytesato_base64url_uintafrom_base64url_uintamerge_dictader_to_raw_signaturearaw_to_der_signatureScCERTIFICATE REQUESTcNEW CERTIFICATE REQUESTcEC PRIVATE KEYcTRUSTED CERTIFICATEcSSH2 PUBLIC KEYcX509 CRLcOPENSSH PRIVATE KEYcPUBLIC KEYcPRIVATE KEYcCERTIFICATEcDSA PRIVATE KEYcENCRYPTED PRIVATE KEYcRSA PUBLIC KEYcRSA PRIVATE KEYcDH PARAMETERScSSH2 ENCRYPTED PRIVATE KEYa_PEMSacompilec----[- ]BEGIN (d|ajoinc)[- ]----
?
.+?
?
----[- ]END \1[- ]----
?
?aDOTALLDakeyareturnObytesOboolais_pem_formatc-cert-v01@openssh.comTc\A(\S+)[ \t]+(\S+)Lcssh-ed25519cssh-rsacssh-dsscecdsa-sha2-nistp256cecdsa-sha2-nistp384cecdsa-sha2-nistp521ais_ssh_keyTa.0astring_valueakeyu<listcomp>Tabyteu<module jwt.utils>TainputaremTainputTastringTader_sigacurveanum_bitsanum_byteswrwsTavalueTavaladataabufTakeyTakeyassh_pubkey_matchakey_typeTaoriginalaupdatesamerged_optionsweTanumanum_bytesapadded_hexabig_endianTaraw_sigacurveanum_bitsanum_byteswrwsTavalaint_bytes.keyring.backend��aKeyringBackendMetaa__init__a_classesa__abstractmethods__aaddaerrorsaExceptionRaisedContexta__enter__a__exit__apriorityTnnnafilteraoperatoraattrgetterTaviableu
        Return all subclasses deemed viable.
        a__module__arpartitionTw.utoo many values to unpack (expected 3)areplaceTw_w w a__name__u
        The keyring name, suitable for display.

        The name is derived from module and class name.
        u%s.%s (priority: %g)aPasswordSetErrorTareasonuSet password for the username of the service.

        If the backend cannot store passwords, raise
        NotImplementedError.
        aPasswordDeleteErroruDelete the password for the username of the service.

        If the backend cannot store passwords, raise
        NotImplementedError.
        aget_passwordacredentialsaSimpleCredentialuGets the username and password for the service.
        Returns a Credential instance.

        The *username* argument is optional and may be omitted by
        the caller or ignored by the backend. Callers must use the
        returned username.
        aentrypointsaget_group_allTukeyring.backendsTagroupalogainfouLoading %sanamealoadacallableaexceptionuError initializing plugin %s.u
    Locate all setuptools entry points by the name 'keyring backends'
    and initialize them.
    Any third-party library may register an entry point by adding the
    following to their setup.py::

        entry_points = {
            'keyring.backends': [
                'plugin_name = mylib.mymodule:initialize_func',
            ],
        },

    `plugin_name` can be anything, and is only used to display the name
    of the plugin at initialization time.

    `initialize_func` is optional, but will be invoked if callable.
    a_load_pluginsaKeyringBackendaget_viable_backendsautilasuppress_exceptionsDaexceptionsETypeErroru
    Return a list of all implemented keyrings that can be constructed without
    parameters.
    u
Keyring implementation support
a__doc__u/usr/lib/python3/dist-packages/keyring/backend.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importaabclalogginguTacredentialsaerrorsautillTapropertiesapropertiesapy27compatTaadd_metaclassafilteraadd_metaclassa__metaclass__agetLoggerTukeyring.backendTapriorityaby_prioritya_limitaABCMetaametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %su<metaclass>ukeyring.backendu
    A metaclass that's both an ABCMeta and a type that keeps a registry of
    all (non-abstract) types.
    a__qualname__uKeyringBackendMeta.__init__a__orig_bases__TTaKeyringBackendTuThe abstract base class of the keyring, every backend must implement
    this interface.
    u
        Each backend class must supply a priority, a number (float or integer)
        indicating the priority of the backend relative to all other backends.
        The priority need not be static -- it may (and should) vary based
        attributes of the environment in which is runs (platform, available
        packages, etc.).

        A higher number indicates a higher priority. The priority should raise
        a RuntimeError with a message indicating the underlying cause if the
        backend is not suitable for the current environment.

        As a rule of thumb, a priority between zero but less than one is
        suitable, but a priority of one or greater is recommended.
        uKeyringBackend.priorityaClassPropertyaclassmethodaviableuKeyringBackend.viableuKeyringBackend.get_viable_backendsuKeyringBackend.namea__str__uKeyringBackend.__str__aabstractmethoduGet password of the username for the service
        uKeyringBackend.get_passwordaset_passworduKeyringBackend.set_passwordadelete_passworduKeyringBackend.delete_passwordaget_credentialuKeyringBackend.get_credentialTaCrypterTuBase class providing encryption and decryption
    aCrypteruEncrypt the value.
        aencryptuCrypter.encryptuDecrypt the value.
        adecryptuCrypter.decryptaNullCrypteruA crypter that does nothing
    uNullCrypter.encryptuNullCrypter.decryptaonceaget_all_keyringu<module keyring.backend>Ta__class__Taclsanameabasesadictaclassesa__class__Taselfakeyring_classTagroupaentry_pointsaepainit_funcTaselfavalueTaselfaserviceausernameTaviable_classesaringsTaselfaserviceausernameapasswordTaclsTaclsaparentasepamod_nameTaclsaexc.keyring.backends
a__doc__u/usr/lib/python3/dist-packages/keyring/backends/__init__.pya__file__Lu/usr/lib/python3/dist-packages/keyring/backendsa__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__u<module keyring.backends>u.keyring.backends.fail&aNoKeyringErrorTuNo recommended backend was available. Install a recommended 3rd party backend package; or, install the keyrings.alt package if you want to use the non-recommended backends. See https://pypi.org/project/keyring for details.a__doc__u/usr/lib/python3/dist-packages/keyring/backends/fail.pya__file__a__spec__aoriginahas_locationa__cached__abackendTaKeyringBackendlaKeyringBackendlaerrorsTaNoKeyringErrorametaclassa__prepare__aKeyringa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ukeyring.backends.faila__module__u
    Keyring that raises error on every operation.

    >>> kr = Keyring()
    >>> kr.get_password('svc', 'user')
    Traceback (most recent call last):
    ...
    keyring.errors.NoKeyringError: ...No recommended backend...
    a__qualname__apriorityTnaget_passworduKeyring.get_passwordaset_passwordadelete_passworda__orig_bases__u<module keyring.backends.fail>Ta__class__Taselfaserviceausernameapasswordamsgu.keyring�a__doc__u/usr/lib/python3/dist-packages/keyring/__init__.pya__file__Lu/usr/lib/python3/dist-packages/keyringa__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aabsolute_importacoreTaset_keyringaget_keyringaset_passwordaget_passwordadelete_passwordaget_credentiallaset_keyringaget_keyringaset_passwordaget_passwordadelete_passwordaget_credentiala__all__u<module keyring>u.keyring.coresabackendaKeyringBackenduThe keyring must be a subclass of KeyringBackenda_keyring_backenduSet current keyring backend.
    uGet current keyring backend.
    aplatformaconfig_rootaosamakedirsapathajoinarootukeyringrc.cfgaexistsuRefusing to overwrite {filename}aformatafilenamewwa__enter__a__exit__awriteTu[backend]
default-keyring=keyring.backends.null.KeyringTnnnu
    Configure the null keyring as the default.
    aget_passworduGet password from the specified service.
    aset_passworduSet password for the user in the specified service.
    adelete_passworduDelete the password for the user in the specified service.
    aget_credentialuGet a Credential for the specified service.
    apriorityla_limitafilteraget_all_keyringaset_keyringaload_envaload_configamaxafailaKeyringaby_priorityTadefaultakeyu
    Load a keyring specified in the config file or infer the best available.

    Limit, if supplied, should be a callable taking a backend and returning
    True if that backend should be included for consideration.
    arpartitionTw.utoo many values to unpack (expected 3)asysamodulesu
    Load the keyring class indicated by name.

    These popular names are tested to ensure their presence.

    >>> popular_names = [
    ...      'keyring.backends.Windows.WinVaultKeyring',
    ...      'keyring.backends.OS_X.Keyring',
    ...      'keyring.backends.kwallet.DBusKeyring',
    ...      'keyring.backends.SecretService.Keyring',
    ...  ]
    >>> list(map(_load_keyring_class, popular_names))
    [...]

    These legacy names are retained for compatibility.

    >>> legacy_names = [
    ...  ]
    >>> list(map(_load_keyring_class, legacy_names))
    [...]
    a_load_keyring_classu
    Load the specified keyring by name (a fully-qualified name to the
    keyring, such as 'keyring.backends.file.PlaintextKeyring')
    aload_keyringaenvironaPYTHON_KEYRING_BACKENDuLoad a keyring configured in the environment variable.aconfigparseraRawConfigParserareada_load_keyring_pathahas_sectionTabackendagetTabackendudefault-keyringastripaNoOptionErroraloggingagetLoggerTakeyringawarninguKeyring config file contains incorrect values.
uConfig file: %suLoad a keyring using the config file in the config root.Tabackendukeyring-pathainsertlaNoSectionErroruload the keyring-path option (if present)u
Core API functions and initialization routines.
a__doc__u/usr/lib/python3/dist-packages/keyring/core.pya__file__a__spec__aoriginahas_locationa__cached__apy27compatTaconfigparserafilterapy33compatTamaxuautilTaplatform_aplatform_abackendsTafailTukeyring.corealogaget_keyringadisablearecommendedTnainit_backendu<module keyring.core>Takeyring_nameamodule_nameasepaclass_nameamoduleTaconfigapathTaservice_nameausernameTarootafilenameamsgafileTalimitakeyringsTafilenameakeyring_cfgaconfigakeyring_namealoggerTakeyring_nameaclass_Taservice_nameausernameapassword.keyring.credentials�@a_usernamea_passwordauser_env_varapwd_env_varaosaenvironagetuMissing environment variable:%suHelper to read an environment variable
        a_get_enva__doc__u/usr/lib/python3/dist-packages/keyring/credentials.pya__file__a__spec__aoriginahas_locationa__cached__aabclapy27compatTaadd_metaclasslaadd_metaclassa__metaclass__ametaclassTa__prepare__TaCredentialTa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aABCMetaukeyring.credentialsa__module__uAbstract class to manage credentials
    aCredentiala__qualname__aabstractpropertyausernameuCredential.usernameapassworduCredential.passwordaSimpleCredentialuSimple credentials implementation
    a__init__uSimpleCredential.__init__apropertyuSimpleCredential.usernameuSimpleCredential.passworda__orig_bases__aEnvironCredentialuSource credentials from environment variables.
       Actual sourcing is deferred until requested.
    uEnvironCredential.__init__uEnvironCredential._get_envuEnvironCredential.usernameuEnvironCredential.passwordu<module keyring.credentials>Ta__class__Taselfauser_env_varapwd_env_varTaselfausernameapasswordTaselfaenv_varavalueTaselfu.keyring.errorsk@aExpectedExceptionaexc_infoa__new__aExceptionInfoa__init__atypeasysutoo many values to unpack (expected 3)avalueu
        Return True if an exception occurred
        a__doc__u/usr/lib/python3/dist-packages/keyring/errors.pya__file__a__spec__aoriginahas_locationa__cached__a__metaclass__TEExceptionametaclassla__prepare__aKeyringErrora__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ukeyring.errorsa__module__uBase class for exceptions in keyring
    a__qualname__a__orig_bases__aPasswordSetErroruRaised when the password can't be set.
    aPasswordDeleteErroruRaised when the password can't be deleted.
    aInitErroruRaised when the keyring could not be initialised
    aKeyringLockeduRaised when the keyring failed unlocking
    aNoKeyringErroruRaised when there is no keyring backend
    TTaExceptionRaisedContextTu
    An exception-trapping context that indicates whether an exception was
    raised.
    aExceptionRaisedContextaExceptionuExceptionRaisedContext.__init__a__enter__uExceptionRaisedContext.__enter__a__exit__uExceptionRaisedContext.__exit__TaExceptionInfoTuExceptionInfo.__init__a__bool__uExceptionInfo.__bool__a__nonzero__u<module keyring.errors>Ta__class__TaselfTaselfaexc_infoTaselfaExpectedExceptionTaselfainfow_u.keyring.py27compat�+awrapperuadd_metaclass.<locals>.wrapperuClass decorator for creating a class with a metaclass.acopyapopTa__dict__nTa__weakref__nagetTa__slots__Taorig_varsametaclassa__name__a__bases__u
Compatibility support for Python 2.7. Remove when Python 2.7 support is
no longer required.
a__doc__u/usr/lib/python3/dist-packages/keyring/py27compat.pya__file__a__spec__aoriginahas_locationa__cached__aconfigparserlaConfigParseraraw_inputainputaunicodeatext_typeastring_typesTOstracPickleapickleaitertoolsTaifilteraifilterafilteraadd_metaclassabuiltinsu<module keyring.py27compat>TametaclassawrapperTaclsaorig_varsaslots_varametaclassTametaclassu.keyring.py32compat�a__doc__u/usr/lib/python3/dist-packages/keyring/py32compat.pya__file__a__spec__aoriginahas_locationa__cached__acollectionsTaabclaabcLaabca__all__u<module keyring.py32compat>u.keyring.py33compatYadefaultabuiltinsamaxuempty sequenceu
    Add support for 'default' kwarg.

    >>> max([], default='res')
    'res'

    >>> max(default='res')
    Traceback (most recent call last):
    ...
    TypeError: ...

    >>> max('a', 'b', default='other')
    'b'
    u
Compatibility support for Python 3.3. Remove when Python 3.3 support is
no longer required.
a__doc__u/usr/lib/python3/dist-packages/keyring/py33compat.pya__file__a__spec__aoriginahas_locationa__cached__apy27compatTabuiltinsllu<module keyring.py33compat>Taargsakwargsamissingadefaultaexcu.keyring.utilrawrapperuonce.<locals>.wrapperafunctoolsawrapsu
    Decorate func so it's only ever called the first time.

    This decorator can ensure that an expensive or non-idempotent function
    will not be expensive on subsequent calls and is idempotent.

    >>> func = once(lambda a: a+3)
    >>> func(3)
    6
    >>> func(9)
    6
    >>> func('12')
    6
    afuncaalways_returnsu
    yield the results of calling each element of callables, suppressing
    any indicated exceptions.
    acallablesaexceptionsasuppress_exceptionsa__doc__u/usr/lib/python3/dist-packages/keyring/util/__init__.pya__file__Lu/usr/lib/python3/dist-packages/keyring/utila__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aonceu<module keyring.util>TafuncawrapperTacallablesaexceptionsacallableTaargsakwargsafuncTafuncu.keyring.util.platform_�8ajoinaosaenvironaUSERPROFILEuLocal SettingsagetaLOCALAPPDATATaProgramDataw.aplatformawin32_verutoo many values to unpack (expected 4)aXPa_settings_root_XPa_settings_root_VistauPython KeyringaexpanduserTu~/.local/shareTaXDG_DATA_HOMEnapython_keyringu
    Use freedesktop.org Base Dir Specfication to determine storage
    location.
    u<lambda>u_check_old_config_root.<locals>.<lambda>a_check_old_config_roota_config_root_Linuxukeyringrc.cfga_data_root_LinuxuKeyring config exists only in the old location {config_file_old} and should be moved to {config_file_new} to work with this version of keyring.aformataconfig_file_newaconfig_file_oldamsgu
    Prior versions of keyring would search for the config
    in XDG_DATA_HOME, but should probably have been
    searching for config in XDG_CONFIG_HOME. If the
    config exists in the former but not in the latter,
    raise a RuntimeError to force the change.
    TaXDG_CONFIG_HOMEnu
    Use freedesktop.org Base Dir Specfication to determine config
    location.
    a__doc__u/usr/lib/python3/dist-packages/keyring/util/platform_.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importla_data_root_Windowsa_config_root_Windowsa_data_root_asystemadata_roota_config_rootaconfig_rootu<module keyring.util.platform_>Taconfig_file_newaconfig_file_oldamsgTafallbackakeyarootTafallbackarootTareleaseaversionacsdaptypearootu.keyring.util.properties�.afgeta__get__Tufget cannot be noneaabcaCallableTufget must be callablea__doc__u/usr/lib/python3/dist-packages/keyring/util/properties.pya__file__a__spec__aoriginahas_locationa__cached__apy32compatTaabclla__metaclass__TOpropertyametaclassa__prepare__aClassPropertya__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ukeyring.util.propertiesa__module__u
    An implementation of a property callable on a class. Used to decorate a
    classmethod but to then treat it like a property.

    Example:

    >>> class MyClass:
    ...    @ClassProperty
    ...    @classmethod
    ...    def skillz(cls):
    ...        return cls.__name__.startswith('My')
    >>> MyClass.skillz
    True
    >>> class YourClass(MyClass): pass
    >>> YourClass.skillz
    False
    a__qualname__uClassProperty.__get__a__orig_bases__TTaNonDataPropertyTuMuch like the property builtin, but only implements __get__,
    making it a non-data property, and can be subsequently reset.

    See http://users.rcn.com/python/download/Descriptor.htm for more
    information.

    >>> class X:
    ...   @NonDataProperty
    ...   def foo(self):
    ...     return 3
    >>> x = X()
    >>> x.foo
    3
    >>> x.foo = 4
    >>> x.foo
    4
    aNonDataPropertya__init__uNonDataProperty.__init__TnuNonDataProperty.__get__u<module keyring.util.properties>Ta__class__TaselfaclsaownerTaselfaobjaobjtypeTaselfafgetu.launchpadlibDa__doc__u/usr/lib/python3/dist-packages/launchpadlib/__init__.pya__file__Lu/usr/lib/python3/dist-packages/launchpadliba__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__apkg_resourcesalaunchpadlibuversion.txtaresource_stringastripa__version__u<module launchpadlib>u.launchpadlib.credentials�FgaosaenvironagetTaLP_DISABLE_SSL_CERTIFICATE_VALIDATIONFuWhether the user has disabled SSL certificate connection.

    Some testing servers have broken certificates.  Rather than raising an
    error, we allow an environment variable,
    ``LP_DISABLE_SSL_CERTIFICATE_VALIDATION`` to disable the check.
    a_ssl_certificate_validation_disabledahttplib2aHttpTadisable_ssl_certificate_validationarequestaPOSTaurlencodeTamethodaheadersabodyutoo many values to unpack (expected 2)astatusl�aHTTPErroruPOST to ``url`` with ``headers`` and a body of urlencoded ``params``.

    Wraps it up to make sure we avoid the SSL certificate validation if our
    environment tells us to.  Also, raises an error on non-200 statuses.
    aStringIOasaveagetvalueaunicode_typeaencodeTuutf-8uTurn this object into a string.

        This should probably be moved into OAuthAuthorizer.
        adecodealoaduCreate a `Credentials` object from a serialized string.

        This should probably be moved into OAuthAuthorizer.
        aconsumerTuConsumer not specified.aaccess_tokenTuAccess token already obtained.aurisalookup_web_rootaoauth_consumer_keyakeyaoauth_signature_methodaPLAINTEXTaoauth_signaturew&arequest_token_pageaRefereraDICT_TOKEN_FORMATuapplication/jsonaAccepta_http_postaheadersajsonaloadsulp.contextaAccessTokenafrom_paramsaparamsa_request_tokenafrom_stringu%s%s?oauth_token=%saauthorize_token_pageacontextu&lp.context=%suRequest an OAuth token to Launchpad.

        Also store the token in self._request_token.

        This method must not be called on an object with no consumer
        specified or if an access token has already been obtained.

        :param context: The context of this token, that is, its scope of
            validity within Launchpad.
        :param web_root: The URL of the website on which the token
            should be requested.
        :token_format: How the token should be
            presented. URI_TOKEN_FORMAT means just return the URL to
            the page that authorizes the token.  DICT_TOKEN_FORMAT
            means return a dictionary describing the token
            and the site's authentication policy.

        :return: If token_format is URI_TOKEN_FORMAT, the URL for the
            user to authorize the `AccessToken` provided by
            Launchpad. If token_format is DICT_TOKEN_FORMAT, a dict of
            information about the new access token.
        Tuget_request_token() doesn't seem to have been called.aoauth_tokenu&%sasecretaaccess_token_pageuExchange the previously obtained request token for an access token.

        This method must not be called unless get_request_token() has been
        called and completed successfully.

        The access token will be stored as self.access_token.

        :param web_root: The base URL of the website that granted the
            request token.
        aoauth_token_secretTulp.contextuCreate and return a new `AccessToken` from the given dict.aparse_qsDakeep_blank_valuesFTuQuery string must have exactly one oauth_token.lTuQuery string must have exactly one secret.TuQuery string must have exactly one contextuCreate and return a new `AccessToken` from the given string.aAnonymousAccessTokena__init__Tupacredential_save_faileduConstructor.

        :param credential_save_failed: A callback to be invoked if the
            save to local storage fails. You should never invoke this
            callback yourself! Instead, you should raise an exception
            from do_save().
        ado_saveaEXPLOSIVE_ERRORSacredentialsuSave the credentials and invoke the callback on failure.

        Do not override this method when subclassing. Override
        do_save() instead.
        uStore newly-authorized credentials locally for later use.

        :param credentials: A Credentials object to save.
        :param unique_consumer_id: A string uniquely identifying an
            OAuth consumer on a Launchpad instance.
        ado_loaduRetrieve credentials from a local store.

        This method is the inverse of `save`.

        There's no special behavior in this method--it just calls
        `do_load`. There _is_ special behavior in `save`, and this
        way, developers can remember to implement `do_save` and
        `do_load`, not `do_save` and `load`.

        :param unique_key: A string uniquely identifying an OAuth consumer
            on a Launchpad instance.

        :return: A `Credentials` object if one is found in the local
            store, and None otherise.
        uRetrieve credentials from a local store.

        This method is the inverse of `do_save`.

        :param unique_key: A string uniquely identifying an OAuth consumer
            on a Launchpad instance.

        :return: A `Credentials` object if one is found in the local
            store, and None otherise.
        aKeyringCredentialStorea_fallbackaMemoryCredentialStoreakeyringaNoKeyringErrorukeyring.errorsTaNoKeyringErroruEnsure the keyring module is imported (postponing side effects).

        The keyring module initializes the environment-dependent backend at
        import time (nasty).  We want to avoid that initialization because it
        may do things like prompt the user to unlock their password store
        (e.g., KWallet).
        a_ensure_keyring_importedaserializeaB64MARKERab64encodeaset_passwordalaunchpadlibuNo recommended backend was availableuStore newly-authorized credentials in the keyring.aget_passwordTautf8astartswithab64decodeaCredentialsacredential_stringuRetrieve credentials from the keyring.aUnencryptedFileCredentialStoreafilenameasave_to_pathuSave the credentials to disk.astataST_SIZEaload_from_pathuLoad the credentials from disk.a_credentialsuStore the credentials in our dictuRetrieve the credentials from our dictalookup_service_rootaservice_rootaweb_root_for_service_rootaweb_rootuYou must provide either application_name or consumer_name.uYou must provide only one of application_name and consumer_name. (You provided %r and %r.)LaDESKTOP_INTEGRATIONaSystemWideConsumeraConsumeraapplication_nameaallow_access_levelsuBase class initialization.

        :param service_root: The root of the Launchpad instance being
            used.

        :param application_name: The name of the application that
            wants to use launchpadlib. This is used in conjunction
            with a desktop-wide integration.

            If you specify this argument, your values for
            consumer_name and allow_access_levels are ignored.

        :param consumer_name: The OAuth consumer name, for an
            application that wants its own point of integration into
            Launchpad. In almost all cases, you want to specify
            application_name instead and do a desktop-wide
            integration. The exception is when you're integrating a
            third-party website into Launchpad.

        :param allow_access_levels: A list of the Launchpad access
            levels to present to the user. ('READ_PUBLIC' and so on.)
            Your value for this argument will be ignored during a
            desktop-wide integration.
        :type allow_access_levels: A list of strings.
        w@uReturn a string identifying this consumer on this host.u%s?oauth_token=%su&allow_permission=aurljoinuReturn the authorization URL for a request token.

        This is the URL the end-user must visit to authorize the
        token. How exactly does this happen? That depends on the
        subclass implementation.
        aget_request_tokenamake_end_user_authorize_tokenaunique_consumer_iduAuthorize a token and associate it with the given credentials.

        If the credential store runs into a problem storing the
        credential locally, the `credential_save_failed` callback will
        be invoked. The callback will not be invoked if there's a
        problem authorizing the credentials.

        :param credentials: A `Credentials` object. If the end-user
            authorizes these credentials, this object will have its
            .access_token property set.

        :param credential_store: A `CredentialStore` object. If the
            end-user authorizes the credentials, they will be
            persisted locally using this object.

        :return: If the credentials are successfully authorized, the
            return value is the `Credentials` object originally passed
            in. Otherwise the return value is None.
        Taweb_rootatoken_formatuGet a new request token from the server.

        :param return: The request token.
        uAuthorize the given request token using the given credentials.

        Your subclass must implement this method: it has no default
        implementation.

        Because an access token may expire or be revoked in the middle
        of a session, this method may be called at arbitrary points in
        a launchpadlib session, or even multiple times during a single
        session (with a different request token each time).

        In most cases, however, this method will be called at the
        beginning of a launchpadlib session, or not at all.
        aprintuDisplay a message.

        By default, prints the message to standard output. The message
        does not require any user interaction--it's solely
        informative.
        aoutputaWAITING_FOR_USERuNotify the end-user of the URL.aexchange_request_token_for_access_tokenaresponsel�aEndUserDeclinedAuthorizationacontentl�TuUnexpected response from Launchpad:aEndUserNoAuthorizationuCheck if the end-user authorizedaWAITING_FOR_LAUNCHPADastdinareadlineacheck_end_user_authorizationuWait for the end-user to authorizeaauthorization_urlanotify_end_user_authorization_urlawait_for_end_user_authorizationuHave the end-user authorize the token using a URL.aAuthorizeRequestTokenWithBrowseruConstructor.

        :param service_root: See `RequestTokenAuthorizationEngine`.
        :param application_name: See `RequestTokenAuthorizationEngine`.
        :param consumer_name: The value of this argument is
            ignored. If we have the capability to open the end-user's
            web browser, we must be running on the end-user's computer,
            so we should do a full desktop integration.
        :param credential_save_failed: See `RequestTokenAuthorizationEngine`.
        :param allow_access_levels: The value of this argument is
            ignored, for the same reason as consumer_name.
        awebbrowserabasenameaTERMINAL_BROWSERSaErroraTIMEOUT_MESSAGEaTIMEOUTaselectutoo many values to unpack (expected 3)aopenatimeasleepaaccess_token_poll_timeaselfastart_timeaaccess_token_poll_timeoutaTokenAuthorizationTimedOutuTimed out after %d seconds.a__doc__u/usr/lib/python3/dist-packages/launchpadlib/credentials.pya__file__a__spec__aoriginahas_locationa__cached__aprint_functiona__metaclass__LaAccessTokenaAnonymousAccessTokenaAuthorizeRequestTokenWithBrowseraCredentialStoreaRequestTokenAuthorizationEngineaConsumeraCredentialsa__all__acStringIOTaStringIOTaselectuurllib.parseTaurlencodeaurllibTaurljoinaurlparseabase64Tab64decodeab64encodeasimplejsonusix.moves.urllib.parseTaparse_qsulazr.restfulclient.errorsTaHTTPErrorulazr.restfulclient.authorize.oauthTaAccessTokenaConsumeraOAuthAuthorizeraSystemWideConsumera_AccessTokenaOAuthAuthorizerTaurisu+request-tokenu+access-tokenu+authorize-tokenll�TEMemoryErrorEKeyboardInterruptESystemExitametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ulaunchpadlib.credentialsa__module__uStandard credentials storage and usage class.

    :ivar consumer: The consumer (application)
    :type consumer: `Consumer`
    :ivar access_token: Access information on behalf of the user
    :type access_token: `AccessToken`
    a__qualname__auriaURI_TOKEN_FORMATadictu<BR>aITEM_SEPARATORw
aNEWLINEuCredentials.serializeaclassmethoduCredentials.from_stringaSTAGING_WEB_ROOTuCredentials.get_request_tokenuCredentials.exchange_request_token_for_access_tokena__orig_bases__uAn OAuth access token.uAccessToken.from_paramsuAccessToken.from_stringuAn OAuth access token that doesn't authenticate anybody.

    This token can be used for anonymous access.
    uAnonymousAccessToken.__init__TOobjectaCredentialStoreuStore OAuth credentials locally.

    This is a generic superclass. To implement a specific way of
    storing credentials locally you'll need to subclass this class,
    and implement `do_save` and `do_load`.
    TnuCredentialStore.__init__uCredentialStore.saveuCredentialStore.do_saveuCredentialStore.loaduCredentialStore.do_loaduStore credentials in the GNOME keyring or KDE wallet.

    This is a good solution for desktop applications and interactive
    scripts. It doesn't work for non-interactive scripts, or for
    integrating third-party websites into Launchpad.
    c<B64>TnFuKeyringCredentialStore.__init__astaticmethoduKeyringCredentialStore._ensure_keyring_importeduKeyringCredentialStore.do_saveuKeyringCredentialStore.do_loaduStore credentials unencrypted in a file on disk.

    This is a good solution for scripts that need to run without any
    user interaction.
    uUnencryptedFileCredentialStore.__init__uUnencryptedFileCredentialStore.do_saveuUnencryptedFileCredentialStore.do_loaduCredentialStore that stores keys only in memory.

    This can be used to provide a CredentialStore instance without
    actually saving any key to persistent storage.
    uMemoryCredentialStore.__init__uMemoryCredentialStore.do_saveuMemoryCredentialStore.do_loadaRequestTokenAuthorizationEngineuThe superclass of all request token authorizers.

    This base class does not implement request token authorization,
    since that varies depending on how you want the end-user to
    authorize a request token. You'll need to subclass this class and
    implement `make_end_user_authorize_token`.
    aUNAUTHORIZEDaUNAUTHORIZED_ACCESS_LEVELTnnnuRequestTokenAuthorizationEngine.__init__apropertyuRequestTokenAuthorizationEngine.unique_consumer_iduRequestTokenAuthorizationEngine.authorization_urla__call__uRequestTokenAuthorizationEngine.__call__uRequestTokenAuthorizationEngine.get_request_tokenuRequestTokenAuthorizationEngine.make_end_user_authorize_tokenaAuthorizeRequestTokenWithURLuAuthorize using a URL.

    This authorizer simply shows the URL for the user to open for
    authorization, and waits until the server responds.
    uPlease open this authorization page:
 (%s)
in your browser. Use your browser to authorize
this program to access Launchpad on your behalf.uPress Enter after authorizing in your browser.uAuthorizeRequestTokenWithURL.outputuAuthorizeRequestTokenWithURL.notify_end_user_authorization_urluAuthorizeRequestTokenWithURL.check_end_user_authorizationuAuthorizeRequestTokenWithURL.wait_for_end_user_authorizationuAuthorizeRequestTokenWithURL.make_end_user_authorize_tokenuAuthorize using a URL that pops-up automatically in a browser.

    This authorizer simply opens up the end-user's web browser to a
    Launchpad URL and lets the end-user authorize the request token
    themselves.

    This is the same as its superclass, except this class also
    performs the browser automatic opening of the URL.
    uThe authorization page:
 (%s)
should be opening in your browser. Use your browser to authorize
this program to access Launchpad on your behalf.uPress Enter to continue or wait (%d) seconds...lTuwww-browseralinksalinks2alynxaelinksuelinks-liteanetrikaw3muWaiting to hear from Launchpad about your decision...uAuthorizeRequestTokenWithBrowser.__init__uAuthorizeRequestTokenWithBrowser.notify_end_user_authorization_urluAuthorizeRequestTokenWithBrowser.wait_for_end_user_authorizationTEExceptionaTokenAuthorizationExceptionaRequestTokenAlreadyAuthorizedaEndUserAuthorizationFaileduSuperclass exception for all failures of end-user authorizationuEnd-user declined authorizationuEnd-user did not perform any authorizationuEnd-user did not perform any authorization in timeout periodaClientErroraServerErroraNoLaunchpadAccountaTooManyAuthenticationFailuresu<module launchpadlib.credentials>Ta__class__Taselfacredentialsacredential_storearequest_token_stringTaselfa__class__Taselfacredential_save_failedTaselfacredential_save_faileda__class__Taselfacredential_save_failedafallbacka__class__Taselfafilenameacredential_save_faileda__class__Taselfaservice_rootaapplication_nameaconsumer_nameaallow_access_levelsaconsumerTaselfaservice_rootaapplication_nameaconsumer_nameacredential_save_failedaallow_access_levelsa__class__Taurlaheadersaparamsacert_disabledaresponseacontentTaselfarequest_tokenapageaallow_permissionTaselfacredentialsweTaselfaunique_keyTaselfaunique_keyacredential_stringweacredentialsTaselfacredentialsaunique_consumer_idTaselfacredentialsaunique_keyTaselfacredentialsaunique_keyaserializedweTaselfaweb_rootaparamsaurlaheadersaresponseacontentTaclsaparamsakeyasecretacontextTaclsaquery_stringaparamsakeyasecretacontextTaclsavalueacredentialsT	aselfacontextaweb_rootatoken_formataparamsaurlaheadersaresponseacontentTaselfacredentialsaauthorization_jsonTaselfacredentialsarequest_tokenTaselfacredentialsarequest_tokenaauthorization_urlTaselfaauthorization_urlTaselfaauthorization_urlabrowser_objabrowseraconsole_browserarlistw_a__class__TaselfamessageTaselfacredentialsaunique_consumer_idweTaselfasioaserializedTaselfTaselfacredentialsTaselfacredentialsastart_timeu.launchpadlib.launchpad�?�a_roota_root_uriaensureSlashw~uTransform a username into the URL to a person resource.ubugs/uTransform a bug ID into the URL to a bug resource.uTransform a project name into the URL to a project resource.alaunchpadaauthorization_engineaLaunchpadOAuthAwareHttpa__init__astatusl�astartswithTcExpired tokenTcInvalid tokenTcUnknown access tokenuHelper method to detect an error caused by a bad OAuth token.a_requestutoo many values to unpack (expected 2)aretry_on_bad_tokena_bad_oauth_tokenacredentialsaaccess_tokenacredential_storeuIf the response indicates a bad token, get a new token and retry.

        Otherwise, just return the response.
        aurisalookup_service_rootaendswithw/uIt looks like you're using a service root that incorporates the name of the web service version ("%s"). Please use one of the constants from launchpadlib.uris instead, or at least remove the version name from the root URI.aLaunchpaduRoot access to the Launchpad API.

        :param credentials: The credentials used to access Launchpad.
        :type credentials: `Credentials`
        :param authorization_engine: The object used to get end-user input
            for authorizing OAuth request tokens. Used when an OAuth
            access token expires or becomes invalid during a
            session, or is discovered to be invalid once launchpadlib
            starts up.
        :type authorization_engine: `RequestTokenAuthorizationEngine`
        :param service_root: The URL to the root of the web service.
        :type service_root: string
        SaSUDO_UIDaSUDO_USERaSUDO_GIDaosaenvironakeysa_is_sudoaAuthorizeRequestTokenWithURLaAuthorizeRequestTokenWithBrowseraMemoryCredentialStoreaKeyringCredentialStoreDafallbackta_warn_of_deprecated_login_methodTaloginaAccessTokenaCredentialsTaconsumer_nameaaccess_tokenaauthorization_engine_factoryacredential_store_factoryaservice_rootuConvenience method for setting up access credentials.

        When all three pieces of credential information (the consumer
        name, the access token and the access secret) are available, this
        method can be used to quickly log into the service root.

        This method is deprecated as of launchpadlib version
        1.9.0. You should use Launchpad.login_anonymously() for
        anonymous access, and Launchpad.login_with() for all other
        purposes.

        :param consumer_name: the application name.
        :type consumer_name: string
        :param token_string: the access token, as appropriate for the
            `AccessToken` constructor
        :type token_string: string
        :param access_secret: the access token's secret, as appropriate for
            the `AccessToken` constructor
        :type access_secret: string
        :param service_root: The URL to the root of the web service.
        :type service_root: string
        :param authorization_engine: See `Launchpad.__init__`. If you don't
            provide an authorization engine, a default engine will be
            constructed using your values for `service_root` and
            `credential_save_failed`.
        :param allow_access_levels: This argument is ignored, and only
            present to preserve backwards compatibility.
        :param max_failed_attempts: This argument is ignored, and only
            present to preserve backwards compatibility.
        :return: The web service root
        :rtype: `Launchpad`
        Taget_token_and_logina_authorize_token_and_loginuGet credentials from Launchpad and log into the service root.

        This method is deprecated as of launchpadlib version
        1.9.0. You should use Launchpad.login_anonymously() for
        anonymous access and Launchpad.login_with() for all other
        purposes.

        :param consumer_name: Either a consumer name, as appropriate for
            the `Consumer` constructor, or a premade Consumer object.
        :type consumer_name: string
        :param service_root: The URL to the root of the web service.
        :type service_root: string
        :param authorization_engine: See `Launchpad.__init__`. If you don't
            provide an authorization engine, a default engine will be
            constructed using your values for `service_root` and
            `credential_save_failed`.
        :param allow_access_levels: This argument is ignored, and only
            present to preserve backwards compatibility.
        :return: The web service root
        :rtype: `Launchpad`
        aConsumeraSystemWideConsumerTnaconsumeraconsumer_nameaclsa_assert_login_argument_consistencyacredential_save_failedaloadaunique_consumer_idaapplication_nameuAuthorize a request token. Log in with the resulting access token.

        This is the private, non-deprecated implementation of the
        deprecated method get_token_and_login(). Once
        get_token_and_login() is removed, this code can be streamlined
        and moved into its other call site, login_with().
        a_get_pathsutoo many values to unpack (expected 4)aAnonymousAccessTokenTaaccess_tokenTaservice_rootacacheatimeoutaproxy_infoaversionuGet access to Launchpad without providing any credentials.uAt least one of application_name, consumer_name, or authorization_engine must be provided.uAt most one of credentials_file and credential_store must be provided.aUnencryptedFileCredentialStoreakeyaallow_access_levelsuLog in to Launchpad, possibly acquiring and storing credentials.

        Use this method to get a `Launchpad` object. If the end-user
        has no cached Launchpad credential, their browser will open
        and they'll be asked to log in and authorize a desktop
        integration. The authorized Launchpad credential will be
        stored securely: in the GNOME keyring, the KDE Wallet, or in
        an encrypted file on disk.

        The next time your program (or any other program run by that
        user on the same computer) invokes this method, the end-user
        will be prompted to unlock their keyring (or equivalent), and
        the credential will be retrieved from local storage and
        reused.

        You can customize this behavior in three ways:

        1. Pass in a filename to `credentials_file`. The end-user's
           credential will be written to that file, and on subsequent
           runs read from that file.

        2. Subclass `CredentialStore` and pass in an instance of the
           subclass as `credential_store`. This lets you change how
           the end-user's credential is stored and retrieved locally.

        3. Subclass `RequestTokenAuthorizationEngine` and pass in an
           instance of the subclass as `authorization_engine`. This
           lets you change change what happens when the end-user needs
           to authorize the Launchpad credential.

        :param application_name: The application name. This is *not*
            the OAuth consumer name. Unless a consumer_name is also
            provided, the OAuth consumer will be a system-wide
            consumer representing the end-user's computer as a whole.
        :type application_name: string

        :param service_root: The URL to the root of the web service.
        :type service_root: string.  Can either be the full URL to a service
            or one of the short service names.

        :param launchpadlib_dir: The directory used to store cached
           data obtained from Launchpad. The cache is shared by all
           consumers, and each Launchpad service root has its own
           cache.
        :type launchpadlib_dir: string

        :param authorization_engine: A strategy for getting the
            end-user to authorize an OAuth request token, for
            exchanging the request token for an access token, and for
            storing the access token locally so that it can be
            reused. By default, launchpadlib will open the end-user's
            web browser to have them authorize the request token.
        :type authorization_engine: `RequestTokenAuthorizationEngine`

        :param allow_access_levels: The acceptable access levels for
            this application.

            This argument is used to construct the default
            `authorization_engine`, so if you pass in your own
            `authorization_engine` any value for this argument will be
            ignored. This argument will also be ignored unless you
            also specify `consumer_name`.

        :type allow_access_levels: list of strings

        :param max_failed_attempts: Ignored; only present for
            backwards compatibility.

        :param credentials_file: The path to a file in which to store
            this user's OAuth access token.

        :param version: The version of the Launchpad web service to use.

        :param consumer_name: The consumer name, as appropriate for
            the `Consumer` constructor. You probably don't want to
            provide this, since providing it will prevent you from
            taking advantage of desktop-wide integration.
        :type consumer_name: string

        :param credential_save_failed: a callback that is called upon
           a failure to save the credentials locally. This argument is
           used to construct the default `credential_store`, so if
           you pass in your own `credential_store` any value for
           this argument will be ignored.
        :type credential_save_failed: A callable

        :param credential_store: A strategy for storing an OAuth
            access token locally. By default, tokens are stored in the
            GNOME keyring (or equivalent). If `credentials_file` is
            provided, then tokens are stored unencrypted in that file.
        :type credential_store: `CredentialStore`

        :return: A web service root authorized as the end-user.
        :rtype: `Launchpad`

        awarningsawarnuThe Launchpad.%s() method is deprecated. You should use Launchpad.login_anonymous() for anonymous access and Launchpad.login_with() for all other purposes.aDeprecationWarninguInconsistent values given for %s: (%r passed in, versus %r in %s). You don't need to pass in %s if you pass in %s, so just omit that argument.uHelper to find conflicting values passed into the login methods.

        Many of the arguments to login_with are used to build other
        objects--the authorization engine or the credential store. If
        these objects are provided directly, many of the arguments
        become redundant. We'll allow redundant arguments through, but
        if a argument *conflicts* with the corresponding value in the
        provided object, we raise an error.
        ajoinTw~u.launchpadlibaexpanduser:nlnuMust set $HOME or pass 'launchpadlib_dir' to indicate location to store cached dataamakedirsl�aerrnoaEEXISTachmodalaunchpadlib_diraurlsplitutoo many values to unpack (expected 5)acacheuLocate launchpadlib-related user paths and ensure they exist.

        This is a helper function used by login_with() and
        login_anonymously().

        :param service_root: The service root the user wants to
            connect to. This may be an alias (which will be
            dereferenced to a URL and returned) or a URL (which will
            be returned as is).
        :param launchpadlib_dir: The user's base launchpadlib
            directory, if known. This may be modified, expanded, or
            determined from the environment if missing. A definitive
            value will be returned.

        :return: A 4-tuple:
            (service_root_uri, launchpadlib_dir, cache_dir, service_root_dir)
        uRoot Launchpad API class.a__doc__u/usr/lib/python3/dist-packages/launchpadlib/launchpad.pya__file__a__spec__aoriginahas_locationa__cached__a__metaclass__LaLaunchpada__all__luurllib.parseTaurlsplitaurlparseahttplib2Taproxy_info_from_environmentaproxy_info_from_environmentTaProxyInfoaProxyInfoafrom_environmentulazr.restfulclient.resourceTaCollectionWithKeyBasedLookupaHostedFileaScalarValueaServiceRootaCollectionWithKeyBasedLookupaHostedFileaScalarValueaServiceRootulazr.restfulclient.authorize.oauthTaSystemWideConsumerulazr.restfulclient._browserTaRestfulHttpaRestfulHttpulaunchpadlib.credentialsT	aAccessTokenaAnonymousAccessTokenaAuthorizeRequestTokenWithBrowseraAuthorizeRequestTokenWithURLaConsumeraCredentialsaMemoryCredentialStoreaKeyringCredentialStoreaUnencryptedFileCredentialStorealaunchpadlibTaurisulaunchpadlib.urisTaSTAGING_SERVICE_ROOTaEDGE_SERVICE_ROOTaSTAGING_SERVICE_ROOTaEDGE_SERVICE_ROOTuhttps://api.launchpad.netaOAUTH_REALMametaclassa__prepare__aPersonSeta__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ulaunchpadlib.launchpada__module__uA custom subclass capable of person lookup by username.a__qualname__a_get_url_from_iduPersonSet._get_url_from_idateamacollection_ofa__orig_bases__aBugSetuA custom subclass capable of bug lookup by bug ID.uBugSet._get_url_from_idabugaPillarSetuA custom subclass capable of lookup by pillar name.

    Projects, project groups, and distributions are all pillars.
    uPillarSet._get_url_from_idaProjectSetuA custom subclass for accessing the collection of projects.aprojectaProjectGroupSetuA custom subclass for accessing the collection of project groups.aproject_groupaDistributionSetadistributionuDetects expired/invalid OAuth tokens and tries to get a new token.uLaunchpadOAuthAwareHttp.__init__uLaunchpadOAuthAwareHttp._bad_oauth_tokenuLaunchpadOAuthAwareHttp._requestuLaunchpadOAuthAwareHttp.retry_on_bad_tokenuRoot Launchpad API class.

    :ivar credentials: The credentials instance used to access Launchpad.
    :type credentials: `Credentials`
    u1.0aDEFAULT_VERSIONabugsadistributionsapeopleaproject_groupsaprojectsaRESOURCE_TYPE_CLASSESaupdateuLaunchpad.__init__ahttpFactoryuLaunchpad.httpFactoryaclassmethoduLaunchpad._is_sudouLaunchpad.authorization_engine_factoryuLaunchpad.credential_store_factoryaloginuLaunchpad.loginaget_token_and_loginuLaunchpad.get_token_and_loginuLaunchpad._authorize_token_and_loginalogin_anonymouslyuLaunchpad.login_anonymouslyalogin_withuLaunchpad.login_withuLaunchpad._warn_of_deprecated_login_methodTuauthorization engineuLaunchpad._assert_login_argument_consistencyuLaunchpad._get_pathsu<module launchpadlib.launchpad>Ta__class__Taselfacredentialsaauthorization_engineacredential_storeaservice_rootacacheatimeoutaproxy_infoaversionaerrora__class__Taselfalaunchpadaauthorization_engineaargsa__class__Taclsaargument_nameaargument_valueaobject_valueaobject_nameainconsistent_value_messageTaclsaconsumer_nameaservice_rootacacheatimeoutaproxy_infoaauthorization_engineaallow_access_levelsacredential_storeacredential_save_failedaversionaconsumeracredentialsacached_credentialsTaselfaresponseacontentTaclsaservice_rootalaunchpadlib_diraerraschemeahost_nameapathaqueryafragmentaservice_root_diracache_pathTaselfakeyTaclsTaselfaargsaresponseacontenta__class__TaclsanameTaclsaargsTaclsacredential_save_failedTaclsaconsumer_nameaservice_rootacacheatimeoutaproxy_infoaauthorization_engineaallow_access_levelsamax_failed_attemptsacredential_storeacredential_save_failedaversionTaselfacredentialsacacheatimeoutaproxy_infoTaclsaconsumer_nameatoken_stringaaccess_secretaservice_rootacacheatimeoutaproxy_infoaauthorization_engineaallow_access_levelsamax_failed_attemptsacredential_storeacredential_save_failedaversionaaccess_tokenacredentialsTaclsaconsumer_nameaservice_rootalaunchpadlib_diratimeoutaproxy_infoaversionacache_pathaservice_root_diratokenacredentialsTaclsaapplication_nameaservice_rootalaunchpadlib_diratimeoutaproxy_infoaauthorization_engineaallow_access_levelsamax_failed_attemptsacredentials_fileaversionaconsumer_nameacredential_save_failedacredential_storeacache_pathaservice_root_dirTaselfaresponseacontentaargsu.launchpadlib.uris	PaedgeawarningsawarnuLaunchpad edge server no longer exists. Using 'production' instead.aDeprecationWarningaurlparseutoo many values to unpack (expected 6)uu%s is not a valid URL or an alias for any Launchpad serveruDereference what might a URL or an alias for a URL.aEDGE_SERVICE_ROOTa_dereference_aliasaservice_rootsuDereference an alias to a service root.

    A recognized server alias such as "staging" gets turned into the
    appropriate URI. A URI gets returned as is. Any other string raises a
    ValueError.
    aEDGE_WEB_ROOTaweb_rootsuDereference an alias to a website root.

    A recognized server alias such as "staging" gets turned into the
    appropriate URI. A URI gets returned as is. Any other string raises a
    ValueError.
    alookup_service_rootaURIapathahostareplaceTuapi.ulaensureSlashuTurn a service root URL into a web root URL.

    This is done heuristically, not with a lookup.
    uLaunchpad-specific URIs and convenience lookup functions.

The code in this module lets users say "staging" when they mean
"https://api.staging.launchpad.net/".
a__doc__u/usr/lib/python3/dist-packages/launchpadlib/uris.pya__file__a__spec__aoriginahas_locationa__cached__a__metaclass__Lalookup_service_rootalookup_web_rootaweb_root_for_service_roota__all__uurllib.parseTaurlparselulazr.uriTaURIuhttps://api.launchpad.net/aLPNET_SERVICE_ROOTuhttps://api.qastaging.launchpad.net/aQASTAGING_SERVICE_ROOTuhttps://api.staging.launchpad.net/aSTAGING_SERVICE_ROOTuhttps://api.launchpad.test/aDEV_SERVICE_ROOTuhttps://api.dogfood.paddev.net/aDOGFOOD_SERVICE_ROOTuhttp://api.launchpad.test:8085/aTEST_DEV_SERVICE_ROOTuhttps://launchpad.net/aLPNET_WEB_ROOTuhttps://qastaging.launchpad.net/aQASTAGING_WEB_ROOTuhttps://staging.launchpad.net/aSTAGING_WEB_ROOTuhttps://launchpad.test/aDEV_WEB_ROOTuhttps://dogfood.paddev.net/aDOGFOOD_WEB_ROOTuhttp://launchpad.test:8085/aTEST_DEV_WEB_ROOTuhttps://api.edge.launchpad.net/uhttps://edge.launchpad.net/aproductionaqastagingastagingadogfoodadevatest_devalookup_web_rootaweb_root_for_service_rootu<module launchpadlib.uris>TarootaaliasesaschemeanetlocapathaparametersaqueryafragmentTaservice_rootTaweb_rootTaservice_rootaweb_root_uriaweb_root.lazr}a_NamespacePathlalazrLu/usr/lib/python3/dist-packages/lazra__path__u/usr/lib/python3/dist-packages/lazru.lazr.restfulclient._browser)!adecodeTuutf-8are_url_scheme_samatchafilenameaencodeTaidnaaunicode_typeamd5ahexdigestare_url_schemeasubcare_slashd,aRestfulHttpamaximum_cache_filename_lengthl lw,uReturn a filename suitable for the cache.

    Strips dangerous and common characters to create a filename we
    can use to store the cache in.
    aosaenvironagetTaLP_DISABLE_SSL_CERTIFICATE_VALIDATIONFuWhether the user has disabled SSL certificate connection.

    Some testing servers have broken certificates.  Rather than raising an
    error, we allow an environment variable,
    ``LP_DISABLE_SSL_CERTIFICATE_VALIDATION`` to disable the check.
    assl_certificate_validation_disableda__init__aSYSTEM_CA_CERTSTadisable_ssl_certificate_validationaca_certsaauthorizeraauthorizeSessionaauthorizationaauthorizeRequesta_requestaabsolute_uriamethodabodyaheadersuUse the authorizer to authorize an outgoing request.acacheaMultipleRepresentationCachea_getCachedHeaderuRetrieve a cached value for an HTTP header.anormpatha_cache_dira_get_safe_nameamakedirsaerrnoaEEXISTuConstruct an ``AtomicFileCache``.

        :param cache: The directory to use as a cache.
        :param safe: A function that takes a key and returns a name that's
            safe to use as a filename.  The key must never return a string
            that begins with ``TEMPFILE_PREFIX``.  By default uses
            ``safename``.
        astartswithaTEMPFILE_PREFIXuCache key cannot start with '%s'ajoinuReturn the path on disk where ``key`` is stored.a_get_key_patharbareadacloseTEOSErrorpaENOENTuGet the value of ``key`` if set.

        This behaves slightly differently to ``FileCache`` in that if
        ``set()`` fails to store a key, this ``get()`` will behave as if that
        key were never set whereas ``FileCache`` returns the empty string.

        :param key: The key to retrieve.  Must be either bytes or unicode
            text.
        :return: The value of ``key`` if set, None otherwise.
        atempfileamkstempTaprefixadirutoo many values to unpack (expected 2)afdopenawbawritearenameuSet ``key`` to ``value``.

        :param key: The key to set.  Must be either bytes or unicode text.
        :param value: The value to set ``key`` to.  Must be bytes.
        aremoveuDelete ``key`` from the cache.

        If ``key`` has not already been set then has no effect.

        :param key: The key to delete.  Must be either bytes or unicode text.
        aappend_media_typearequest_media_typeuTell FileCache to call append_media_type when generating keys.w-asafenameuAppend the request media type to the cache key.

        This ensures that representations of the same resource will be
        cached separately, so long as they're served as different
        media types.
        aurlnormutoo many values to unpack (expected 4)w:aBytesIOaheader_startastripamkdtempaatexitaregisterashutilarmtreeastr_typesahttpFactorya_connectionauser_agentamax_retriesuInitialize, possibly creating a cache.

        If no cache is provided, a temporary directory will be used as
        a cache. The temporary directory will be automatically removed
        when the Python process exits.
        laselfarequestaurlTamethodabodyaheadersastatusLl�l�lasleeparesponseacontentutag:launchpad.net:2008:redacteduYou tried to access a resource that you don't have the server-side permission to see.aAcceptuUser-Agentaupdatea_request_and_retryl0uIf-None-MatchuIf-Modified-SinceaNOT_MODIFIEDaHTTPErrorl�aerror_foruCreate an authenticated request object.aURIaget_methodTagetabuild_request_urlTaextra_headersuGET a representation of the given resource or URI.Damedia_typeuapplication/vnd.sun.wadl+xmlaApplicationuGET a WADL representation of the resource at the requested url.uws.opaurlencodeaPOSTuPOST a request to the web service.uContent-TypeaPUTaextra_headersuPUT the given representation to the URL.DamethodaDELETEuDELETE the resource at the given URL.DuContent-Typeuapplication/jsonaetagaignore_etaguIf-MatchadumpsaDatetimeJSONEncoderTaclsaPATCHuPATCH the object at url with the updated representation.uBrowser object to make requests of lazr.restful web services.

The `Browser` class does some massage of HTTP requests and responses,
and handles custom caches. It is not part of the public
lazr.restfulclient API. (But maybe it should be?)
a__doc__u/usr/lib/python3/dist-packages/lazr/restfulclient/_browser.pya__file__a__spec__aoriginahas_locationa__cached__a__metaclass__LaBrowseraRestfulHttpassl_certificate_validation_disableda__all__ahashlibTamd5areasysatimeTasleepahttplib2TaHttpaurlnormaHttpTaproxy_info_from_environmentaproxy_info_from_environmentTaProxyInfoaProxyInfoafrom_environmentajsonTadumpsasimplejsonuurllib.parseTaurlencodeaurllibuwadllib.applicationTaApplicationulazr.uriTaURIulazr.restfulclient.errorsTaerror_foraHTTPErrorulazr.restfulclient._jsonTaDatetimeJSONEncoderacompileTc^\w+://Tu^\w+://Tc[?/:|]+u/etc/ssl/certs/ca-certificates.crtTaCA_CERTSaCA_CERTSametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ulazr.restfulclient._browsera__module__uAn Http subclass with some custom behavior.

    This Http client uses the TE header instead of the Accept-Encoding
    header to ask for compressed representations. It also knows how to
    react when its cache is a MultipleRepresentationCache.
    a__qualname__l�uRestfulHttp.__init__uRestfulHttp._requestuRestfulHttp._getCachedHeadera__orig_bases__TOobjectaAtomicFileCacheuA FileCache that can be shared by multiple processes.

    Based on a patch found at
    <http://code.google.com/p/httplib2/issues/detail?id=125>.
    u.tempuAtomicFileCache.__init__uAtomicFileCache._get_key_pathuAtomicFileCache.getasetuAtomicFileCache.setadeleteuAtomicFileCache.deleteuA cache that can hold different representations of the same resource.

    If a resource has two representations with two media types,
    FileCache will only store the most recently fetched
    representation. This cache can keep track of multiple
    representations of the same resource.

    This class works on the assumption that outside calling code sets
    an instance's request_media_type attribute to the value of the
    'Accept' header before initiating the request.

    This class is very much not thread-safe, but FileCache isn't
    thread-safe anyway.
    uMultipleRepresentationCache.__init__uMultipleRepresentationCache.append_media_typeuMultipleRepresentationCache._getCachedHeaderTTaBrowserTuA class for making calls to lazr.restful web services.aBrowseraobjectlaMAX_RETRIESuBrowser.__init__uBrowser._request_and_retryTnaGETuapplication/jsonnuBrowser._requestTnFuBrowser.getaget_wadl_applicationuBrowser.get_wadl_applicationapostuBrowser.postTnaputuBrowser.putuBrowser.deleteapatchuBrowser.patchu<module lazr.restfulclient._browser>Ta__class__Taselfaauthorizeracacheatimeoutaproxy_infoacert_disableda__class__Taselfacachea__class__TaselfacacheasafeweTaselfaservice_rootacredentialsacacheatimeoutaproxy_infoauser_agentamax_retriesTaselfauriaheaderT
aselfauriaheaderaschemeaauthorityarequest_uriacachekeyacached_valueaheader_startalineTaselfakeyasafe_keyTaselfaconnahostaabsolute_uriarequest_uriamethodabodyaheadersaredirectionsacachekeya__class__T
aselfaurladataamethodamedia_typeaextra_headersaheadersaresponseacontentaerrorT	aselfaurlamethodabodyaheadersaretry_countaresponseacontentasleep_forTaselfakeyTaselfakeyacache_full_pathweTaselfaurlTaselfakeyacache_full_pathwfweTaselfaresource_or_uriaheadersareturn_responseaurlamethodaresponseacontentTaselfaurlawadl_typearesponseacontentTaselfaurlarepresentationaheadersaextra_headersacached_etagTaselfaurlamethod_nameakwsadataTaselfaurlarepresentationamedia_typeaheadersaextra_headersTafilenameafilename_matchafilemd5amaximum_filename_lengthamaximum_length_before_md5_sumTaselfakeyavalueahandleapath_namewfacache_full_pathu.lazr.restfulclient._json�$adatetimeaisoformataJSONEncoderadefaultuClasses for working with JSON.a__doc__u/usr/lib/python3/dist-packages/lazr/restfulclient/_json.pya__file__a__spec__aoriginahas_locationa__cached__a__metaclass__LaDatetimeJSONEncodera__all__lajsonTaJSONEncoderasimplejsonametaclassa__prepare__aDatetimeJSONEncodera__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ulazr.restfulclient._jsona__module__uA JSON encoder that understands datetime objects.

    Datetime objects are formatted according to ISO 1601.
    a__qualname__uDatetimeJSONEncoder.defaulta__orig_bases__u<module lazr.restfulclient._json>Ta__class__Taselfaobju.lazr.restfulclient.authorizey
?uAny parameters necessary to identify this user agent.

        By default this is an empty dict (because authentication
        details don't contain any information about the application
        making the request), but when a resource is protected by
        OAuth, the OAuth consumer name is part of the user agent.
        ausernameapassworduConstructor.

        :param username: User to send as authorization for all requests.
        :param password: Password to send as authorization for all requests.
        uBasic abase64ab64encodeu%s:%sastripaauthorizationuSet up credentials for a single request.

        This sets the authorization header with the username/password.
        aadd_credentialsuClasses to authorize lazr.restfulclient with various web services.

This module includes an authorizer classes for HTTP Basic Auth,
as well as a base-class authorizer that does nothing.

A set of classes for authorizing with OAuth is located in the 'oauth'
module.
a__doc__u/usr/lib/python3/dist-packages/lazr/restfulclient/authorize/__init__.pya__file__Lu/usr/lib/python3/dist-packages/lazr/restfulclient/authorizea__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__a__metaclass__LaBasicHttpAuthorizeraHttpAuthorizera__all__ametaclassTa__prepare__TaHttpAuthorizerTa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ulazr.restfulclient.authorizea__module__uHandles authentication for HTTP requests.

    There are two ways to authenticate.

    The authorize_session() method is called once when the client is
    initialized. This works for authentication methods like Basic
    Auth.  The authorize_request is called for every HTTP request,
    which is useful for authentication methods like Digest and OAuth.

    The base class is a null authorizer which does not perform any
    authentication at all.
    aHttpAuthorizera__qualname__uSet up credentials for the entire session.aauthorizeSessionuHttpAuthorizer.authorizeSessionuSet up credentials for a single request.

        This probably involves setting the Authentication header.
        aauthorizeRequestuHttpAuthorizer.authorizeRequestapropertyauser_agent_paramsuHttpAuthorizer.user_agent_paramsaBasicHttpAuthorizeruHandles authentication for services that use HTTP Basic Auth.a__init__uBasicHttpAuthorizer.__init__uBasicHttpAuthorizer.authorizeRequestuBasicHttpAuthorizer.authorizeSessiona__orig_bases__u<module lazr.restfulclient.authorize>Ta__class__TaselfausernameapasswordTaselfaabsolute_uriamethodabodyaheadersTaselfaclientTaselfu.lazr.restfulclient.authorize.oauth��akeyasecretaapplication_nameuInitialize

        :param key: The OAuth consumer key
        :param secret: The OAuth consumer secret. Don't use this. It's
            a misfeature, and lazr.restful doesn't expect it.
        :param application_name: An application name, if different
            from the consumer key. If present, this will be used in
            the User-Agent header.
        acontextaSystemWideConsumera__init__aconsumer_keyuConstructor.

        :param application_name: An application name. This will be
            used in the User-Agent header.
        :param secret: The OAuth consumer secret. Don't use this. It's
            a misfeature, and lazr.restful doesn't expect it.
        adistrolanameuaplatformasystemaKEY_FORMATasocketagethostnameuThe system-wide OAuth consumer key for this computer.

        This key identifies the platform and the computer's
        hostname. It does not identify the active user.
        aconsumeraConsumeraaccess_tokenaoauth_realmaoauth_consumeraapplicationuAny information necessary to identify this user agent.

        In this case, the OAuth consumer name.
        aSafeConfigParseraread_fileareadfpahas_sectionaCREDENTIALS_FILE_VERSIONaCredentialsFileErroruNo configuration for version %sagetaconsumer_secretaaccess_secretaAccessTokenuLoad credentials from a file-like object.

        This overrides the consumer and access token given in the constructor
        and replaces them with the values read from the file.

        :param readable_file: A file-like object to read the credentials from
        :type readable_file: Any object supporting the file-like `read()`
            method
        wraloadacloseuConvenience method for loading credentials from a file.

        Open the file, create the Credentials and load from the file,
        and finally close the file and return the newly created
        Credentials instance.

        :param path: In which file the credential file should be saved.
        :type path: string
        :return: The loaded Credentials instance.
        :rtype: `Credentials`
        TuNo consumerTuNo access tokenaadd_sectionasetawriteuWrite the credentials to the file-like object.

        :param writable_file: A file-like object to write the credentials to
        :type writable_file: Any object supporting the file-like `write()`
            method
        :raise CredentialsFileError: when there is either no consumer or no
            access token
        aosafdopenaopenaO_CREATaO_TRUNCaO_WRONLYastataS_IREADaS_IWRITEwwasaveuConvenience method for saving credentials to a file.

        Create the file, call self.save(), and close the
        file. Existing files are overwritten. The resulting file will
        be readable and writable only by the user.

        :param path: In which file the credential file should be saved.
        :type path: string
        aoauth1aClientaTruthyStringaSIGNATURE_PLAINTEXTTaclient_secretaresource_owner_keyaresource_owner_secretasignature_methodarealmaresource_owner_keyasignutoo many values to unpack (expected 3)aitemsutoo many values to unpack (expected 2)asixaPY2aencodeTuUTF-8aheadersuSign a request with OAuth credentials.uOAuth classes for use with lazr.restfulclient.a__doc__u/usr/lib/python3/dist-packages/lazr/restfulclient/authorize/oauth.pya__file__a__spec__aoriginahas_locationa__cached__aconfigparserTaConfigParseraConfigParserTaSafeConfigParseraoauthlibTaoauth1ulazr.restfulclient.authorizeTaHttpAuthorizeraHttpAuthorizerulazr.restfulclient.errorsTaCredentialsFileErrora__metaclass__LaAccessTokenaConsumeraOAuthAuthorizeraSystemWideConsumera__all__w1ametaclassTa__prepare__TaConsumerTa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ulazr.restfulclient.authorize.oautha__module__uAn OAuth consumer (application).a__qualname__TunuConsumer.__init__TaAccessTokenTuAn OAuth access token.uAccessToken.__init__atext_typeuA Unicode string which is always true.a__bool__uTruthyString.__bool__a__nonzero__a__orig_bases__uA consumer associated with the logged-in user rather than an app.

    This can be used to share a single OAuth token among multiple
    desktop applications. The OAuth consumer key will be derived from
    system information (platform and hostname).
    uSystem-wide: %s (%s)TuuSystemWideConsumer.__init__apropertyuSystemWideConsumer.consumer_keyaOAuthAuthorizeruA client that signs every outgoing request with OAuth credentials.TnunaOAuthnuOAuthAuthorizer.__init__auser_agent_paramsuOAuthAuthorizer.user_agent_paramsuOAuthAuthorizer.loadaclassmethodaload_from_pathuOAuthAuthorizer.load_from_pathuOAuthAuthorizer.saveasave_to_pathuOAuthAuthorizer.save_to_pathaauthorizeRequestuOAuthAuthorizer.authorizeRequestu<module lazr.restfulclient.authorize.oauth>Ta__class__TaselfTaselfaapplication_nameasecreta__class__Taselfaconsumer_nameaconsumer_secretaaccess_tokenaoauth_realmaapplication_nameTaselfakeyasecretaapplication_nameTaselfakeyasecretacontextT
aselfaabsolute_uriamethodabodyaheadersaclientw_asigned_headersakeyavalueTaselfadistroadistnameTaselfareadable_fileaparserareaderaconsumer_keyaconsumer_secretaaccess_tokenaaccess_secretTaclsapathacredentialsacredentials_fileTaselfawritable_fileaparserTaselfapathacredentials_fileTaselfaparams.lazr.restfulclientpa__doc__u/usr/lib/python3/dist-packages/lazr/restfulclient/__init__.pya__file__Lu/usr/lib/python3/dist-packages/lazr/restfulclienta__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__apkg_resourcesulazr.restfulclientuversion.txtaresource_stringastripa__version__adecodeTaASCIIu<module lazr.restfulclient>u.lazr.restfulclient.errors	
WaRestfulErrora__init__aresponseacontentu%s: %sastatusareasonw
asortedaitemsuHTTP Error %s: %s
Response headers:
---
%s
---
Response body:
---
%s
---
uShow the error code, response headers, and response body.l�aBadRequestl�aUnauthorizedl�aNotFoundl�aMethodNotAllowedl�aConflictl�aPreconditionFailedldlaHTTPErrorlaServerErrorlaClientErroruTurn an HTTP response into an HTTPError subclass.

    :return: None if the response code is 1xx, 2xx or 3xx. Otherwise,
    an instance of an appropriate HTTPError subclass (or HTTPError
    if nothing else is appropriate.
    ulazr.restfulclient errors.a__doc__u/usr/lib/python3/dist-packages/lazr/restfulclient/errors.pya__file__a__spec__aoriginahas_locationa__cached__a__metaclass__LaBadRequestaConflictaClientErroraCredentialsErroraCredentialsFileErroraHTTPErroraMethodNotAllowedaNotFoundaPreconditionFailedaRestfulErroraResponseErroraServerErroraUnauthorizedaUnexpectedResponseErrora__all__TEExceptionametaclassla__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>ulazr.restfulclient.errorsa__module__uBase error for the lazr.restfulclient API library.a__qualname__a__orig_bases__aCredentialsErroruBase credentials/authentication error.aCredentialsFileErroruError in credentials file.aResponseErroruError in response.uResponseError.__init__aUnexpectedResponseErroruAn unexpected response was received.a__str__uUnexpectedResponseError.__str__uAn HTTP non-2xx response code was received.uHTTPError.__str__uAn exception representing a client-side error.uAn exception representing an authentication failure.uAn exception representing a nonexistent resource.uAn exception raised when you use an unsupported HTTP method.

    This is most likely because you tried to delete a resource that
    can't be deleted.
    uAn exception representing a problem with a client request.uAn exception representing a conflict with another client.uAn exception representing the failure of a conditional PUT/PATCH.

    The most likely explanation is that another client changed this
    object while you were working on it, and your version of the
    object is now out of date.
    uAn exception representing a server-side error.aerror_foru<listcomp>Tapairu<module lazr.restfulclient.errors>Ta__class__TaselfaresponseacontentTaselfTaselfaheadersTaresponseacontentahttp_errors_by_status_codeaclsu.lazr.restfulclient.resource@�awrapped_dictionaryagetaloweruRetrieve a value, converting the key to lowercase.amissingaitemsutoo many values to unpack (expected 2)aResourceaself_linkanew_dictionaryaselfa_get_external_param_nameuTurn a lazr.restful name into something to be sent over HTTP.

        For resources this may involve sticking '_link' or
        '_collection_link' on the end of the parameter name. For
        arguments to named operations, the parameter name is returned
        as is.
        a_roota_wadl_resourceuInitialize with respect to a wadllib Resource object.a_get_parameter_namesaFIND_COLLECTIONSuName the collections this resource links to.aFIND_ENTRIESuName the entries this resource links to.aFIND_ATTRIBUTESuName this resource's scalar attributes.amethod_iteranamearequestaparamsLaqueryaplainapostTuapplication/x-www-form-urlencodedumultipart/form-dataamethodaget_representation_definitionaresolve_definitionadefinitionuws.opanamesaappendafixed_valueuName all of this resource's custom operations.uA hook into dir() that returns web service-derived members.aparametersaJSON_MEDIA_TYPEalinkacan_followaendswithTa_collection_link:nl�����n:nl��������nuRetrieve some subset of the resource's parameters.uDoes this resource have a parameter with the given name?a_ensure_representationTa_linka_collection_linkaget_parameteraparam_nameaget_valuealinked_resourcea_create_bound_resourceTaparam_nameuNo such parameter: %suGet the value of one of the resource's parameters.

        :return: A scalar value if the parameter is not a link. A new
                 Resource object, whose resource is bound to a
                 representation, if the parameter is a link.
        aget_methodTagetTaquery_paramsTapostTarepresentation_paramsuNo operation with name: %saNamedOperationuGet a custom operation with the given name.

        :return: A NamedOperation instance that can be called with
                 appropriate arguments to invoke the operation.
        atype_urlaurlparsel��������aEntryTu-pageaCollectionaRESOURCE_TYPE_CLASSESabindTarepresentation_definitionaresourceuCreate a lazr.restful Resource subclass from a wadllib Resource.

        :param resource: The wadllib Resource to wrap.
        :param representation: A previously fetched representation of
            this resource, to be reused. If not provided, this method
            will act just like the Resource constructor.
        :param representation_media_type: The media type of any previously
            fetched representation.
        :param representation_needs_processing: Set to False if the
            'representation' parameter should be used as
            is.
        :param representation_definition: A wadllib
            RepresentationDefinition object describing the structure
            of this representation. Used in cases when the representation
            isn't the result of sending a standard GET to the resource.
        :param param_name: The name of the link that was followed to get
            to this resource.
        :return: An instance of the appropriate lazr.restful Resource
            subclass.
        a_urluIf-None-Matcha_browseraheadersTaheadersaNOT_MODIFIEDuUpdate this resource's representation.alp_get_named_operationalp_get_parameteru%s object has no attribute '%s'uTry to retrive a named operation or parameter of the given name.aoptionsavalueuFind the set of possible values for a parameter.Ta_linka_collection_linkuuWhat's this parameter's name in the underlying representation?arepresentationabinary_typeadecodeTuutf-8aloadsaresource_type_linka_wadlaget_resource_typeatagDarepresentation_needs_processingFuMake sure this resource has a representation fetched.uInequality operator.uReturn the scalar value.TwrwwaHostedFileBufferuInvalid mode. Supported modes are: r, wuOpen the file on the server for read or write access.adeleteaurluDelete the file from the server.uHostedFile objects define no web service parameters.uEquality comparison.

        Two hosted files are the same if they have the same URL.

        There is no need to check the contents because the only way to
        retrieve or modify the hosted file contents is to open a
        filehandle, which goes direct to the server.
        w/aURIa_root_uria_base_client_nameacredentialsaBrowsera_user_agentaget_wadl_applicationaget_resource_by_pathTuuapplication/jsonaServiceRoota__init__uRoot access to a lazr.restful API.

        :param credentials: The credentials used to access the service.
        :param service_root: The URL to the root of the web service.
        :type service_root: string
        ulazr.restfulclient %sa__version__uu (w)aMessageuUser-Agentauser_agent_paramsasortedamessageaset_paramuThe value for the User-Agent header.

        This will be something like:
        launchpadlib 1.6.1, lazr.restfulclient 1.0.0; application=apport

        That is, a string describing lazr.restfulclient and an
        optional custom client built on top, and parameters containing
        any authorization-specific information that identifies the
        user agent (such as the application name).
        aRestfulHttpascheme:nln:lnnu%s doesn't serve a JSON document.Taresource_type_linkuCouldn't determine the resource type of %s.aWadlResourceuLoad a resource given its URL.arootawadl_methoduInitialize with respect to a WADL Method objectuMethod must be called with keyword args.a_transform_resources_to_linksTagetaheadadeleteaquery_paramsTumultipart/form-dataTuapplication/x-www-form-urlencodedTuA POST named operation must define a multipart or form-urlencoded request representation.atypeabinaryadumpsaDatetimeJSONEncoderTaclsaargsabuild_request_urlabuild_representationuContent-typea_requestaupperTaextra_headersastatusl�a_handle_201_responsel-alocationalp_refresha_handle_200_responsearesponseuInvoke the method and process the result.aHeaderDictionaryTaLocationucontent-typeuHandle the creation of a new resource by fetching it.arepresentation_definitionTarepresentation_needs_processingarepresentation_definitionuProcess the return value of an operation.uNamed operation parameter names are sent as is.a_dirty_attributesu<%s at %s>afragmentuReturn the WADL resource type and the URL to the resource.uDelete the resource.uReturn the URL to the resource.a__getattr__uTry to retrive a parameter of the given name.alp_has_parameteru'%s' object has no attribute '%s'a__name__uSet the parameter of the given name.ahttp_etaguEquality operator.

        Two entries are the same if their self_link and http_etag
        attributes are the same, and if their dirty attribute dicts
        contain the same values.
        aclearuIf-Matchapatchl�amedia_typeuSave changes to the entry.uCreate a collection object.atotal_sizeaScalarValueucollection size is not availableuThe number of items in the collection.

        :return: length of the collection
        :rtype: int
        uIterate over the items in the collection.

        :return: iterator
        :rtype: sequence of `Entry`
        a_convert_dicts_to_entriesacurrent_pageaentriesTanext_collection_linka__iter__uCollection.__iter__a_get_slicelulist index out of rangeluLook up a slice, or a subordinate resource by index.

        To discourage situations where a lazr.restful client fetches
        all of an enormous list, all collection slices must have a
        definitive end point. For performance reasons, all collection
        slices must be indexed from the start of the list rather than
        the end.
        astartastopuCollection slices must have a nonnegative start point.uCollection slices must have a definite, nonnegative end point.a_with_url_query_variable_setuws.startamore_neededapage_urlaentry_dictsadesired_sizeafirst_page_sizeuws.sizeastepuRetrieve a slice of a collection.uConvert dictionaries describing entries to Entry objects.

        The dictionaries come from the 'entries' field of the JSON
        dictionary you get when you GET a page of a collection. Each
        dictionary is the same as you'd get if you sent a GET request
        to the corresponding entry resource. So each of these
        dictionaries can be treated as a preprocessed representation
        of an entry resource, and turned into an Entry instance.

        :yield: A sequence of Entry instances.
        aapplicationuCollection._convert_dicts_to_entriesaqueryaparse_qsaurlencodeuA helper method to set a query variable in a URL.aCollectionWithKeyBasedLookupa__getitem__a_get_url_from_iduunsubscriptable objectaHTTPErrorl�uLook up a slice, or a subordinate resource by unique ID.acollection_ofaurljoinamarkup_urlw#Tarepresentationarepresentation_needs_processinguRetrieve a member from this collection without looking it up.uTransform the unique ID of an object into its URL.wruFiles opened for read access can't specify content_type.uFiles opened for read access can't specify filename.Dareturn_responsetTulast-modifieducontent-locationlaunquoteasplitTw/wwuFiles opened for write access must specify content_type.uFiles opened for write access must specify filename.ahosted_fileamodeacontent_typeafilenamealast_modifiedaBytesIOuattachment; filename="%s"aputagetvalueuContent-DispositionacloseawriteuCommon support for web service resources.a__doc__u/usr/lib/python3/dist-packages/lazr/restfulclient/resource.pya__file__a__spec__aoriginahas_locationa__cached__a__metaclass__LaCollectionaCollectionWithKeyBasedLookupaEntryaNamedOperationaResourceaServiceRoota__all__uemail.messageTaMessageuemail.MessageajsonTadumpsaloadsasimplejsonuurllib.parseTaurljoinaurlparseaparse_qsaunquoteaurlencodeTaurljoinaurlparseaparse_qsaurllibTaunquoteaurlencodeasysatext_typeulazr.uriTaURIuwadllib.applicationTaResourceulazr.restfulclientTa__version__ulazr.restfulclient._browserTaBrowseraRestfulHttpulazr.restfulclient._jsonTaDatetimeJSONEncoderulazr.restfulclient.errorsTaHTTPErrorametaclassTa__prepare__TaHeaderDictionaryTu%s.__prepare__() must return a mapping, not %su<metaclass>ulazr.restfulclient.resourcea__module__uA dictionary that bridges httplib2's and wadllib's expectations.

    httplib2 expects all header dictionary access to give lowercase
    header names. wadllib expects to access the header exactly as it's
    specified in the WADL file, which means the official HTTP header name.

    This class transforms keys to lowercase before doing a lookup on
    the underlying dictionary. That way wadllib can pass in the
    official header name and httplib2 will get the lowercased name.
    a__qualname__uHeaderDictionary.__init__TnuHeaderDictionary.getuHeaderDictionary.__getitem__TaRestfulBaseTuBase class for classes that know about lazr.restful services.aRestfulBaseuRestfulBase._transform_resources_to_linksuRestfulBase._get_external_param_nameuBase class for lazr.restful HTTP resources.uResource.__init__aobjectapropertyalp_collectionsuResource.lp_collectionsalp_entriesuResource.lp_entriesalp_attributesuResource.lp_attributesalp_operationsuResource.lp_operationsa__members__uResource.__members__a__methods__uResource._get_parameter_namesuResource.lp_has_parameteruResource.lp_get_parameteruResource.lp_get_named_operationaclassmethodTnuapplication/jsontnnuResource._create_bound_resourceTnnuResource.lp_refreshuResource.__getattr__alp_values_foruResource.lp_values_foruResource._get_external_param_nameuResource._ensure_representationa__ne__uResource.__ne__a__orig_bases__uA resource representing a single scalar value.uScalarValue.valueaHostedFileuA resource representing a file managed by a lazr.restful service.TwrnnaopenuHostedFile.openuHostedFile.deleteuHostedFile._get_parameter_namesa__eq__uHostedFile.__eq__uEntry point to the service. Subclass this for a service-specific client.

    :ivar credentials: The credentials instance used to access Launchpad.
    aMAX_RETRIESuServiceRoot.__init__uServiceRoot._user_agentahttpFactoryuServiceRoot.httpFactoryaloaduServiceRoot.loaduA class for a named operation to be invoked with GET or POST.uNamedOperation.__init__a__call__uNamedOperation.__call__uNamedOperation._handle_201_responseuNamedOperation._handle_200_responseuNamedOperation._get_external_param_nameuA class for an entry-type resource that can be updated with PATCH.uEntry.__init__a__repr__uEntry.__repr__alp_deleteuEntry.lp_deletea__str__uEntry.__str__uEntry.__getattr__a__setattr__uEntry.__setattr__uEntry.__eq__uEntry.lp_refreshalp_saveuEntry.lp_saveuA collection-type resource that supports pagination.uCollection.__init__a__len__uCollection.__len__uCollection.__getitem__uCollection._get_sliceuCollection._with_url_query_variable_setuA collection-type resource that supports key-based lookup.

    This collection can be sliced, but any single index passed into
    __getitem__ will be treated as a custom lookup key.
    uCollectionWithKeyBasedLookup.__getitem__uCollectionWithKeyBasedLookup.__call__uCollectionWithKeyBasedLookup._get_url_from_iduThe contents of a file hosted by a lazr.restful service.uHostedFileBuffer.__init__uHostedFileBuffer.closeuHostedFileBuffer.writeu<listcomp>TaoptionTaparamTaresourceu<module lazr.restfulclient.resource>Ta__class__Taselfaargsakwargsahttp_methodarequestaparamsadefinitionasend_as_is_paramsakeyavalueaurlain_representationaextra_headersamedia_typearesponseacontentTaselfakeyaurlarepresentationaresource_type_linkaurl_getaerroraresourceTaselfaotherTaselfaattrTaselfanamea__class__Taselfakeyafound_sliceTaselfakeyaurlashim_resourcewea__class__TaselfakeyavalueTaselfaauthorizeraservice_rootacacheatimeoutaproxy_infoaversionabase_client_nameamax_retriesaroot_resourceabound_roota__class__T
aselfahosted_fileamodeacontent_typeafilenamearesponseavaluealast_modifiedacontent_locationapathTaselfarootaresourceawadl_methodTaselfarootawadl_resourceTaselfarootawadl_resourcea__class__Taselfawrapped_dictionaryTaselfacurrent_pagearesourceanext_linkanext_getTaselfatotal_sizeTaselfTaselfanameavalueTaselfaentriesaentry_dictaresource_urlaresource_type_linkawadl_applicationaresource_typearesourceTaclsarootaresourcearepresentationarepresentation_media_typearepresentation_needs_processingarepresentation_definitionaparam_nameatype_urlaresource_typeadefaultar_classTaselfarepresentationatype_linkaresource_typeTaselfaparam_nameTaselfaparam_nameasuffixanameTaselfakindsTaselfakindsanamesaparameteranamealinkTaselfasliceastartastopaexisting_representationaentry_pageafirst_page_sizeaentry_dictsapage_urladesired_sizeamore_neededapage_getarepresentationacurrent_page_entriesTaselfakeyT
aselfaurlaresponseacontentacontent_typearesponse_definitionarepresentation_definitionadocumentaresource_typeawadl_resourceTaselfaurlaresponseacontentawadl_responseawadl_parameterawadl_resourceTaselfadictionaryanew_dictionaryakeyavalueTaselfabase_portionamessageauser_agent_paramsakeyavalueTaselfaurlavariableanew_valueauriaparamsTaselfadispositionTaselfakeyadefaultTaselfaauthorizeracacheatimeoutaproxy_infoTaselfaurlaparsedadocumentarepresentationatype_linkaresource_typeawadl_resourceTaselfaoperation_nameaparamsamethodTaselfaparam_nameasuffixaparamalinked_resourceTaselfanamesamethodanameaparamsamedia_typeadefinitionaparamTaselfanew_urlaetaga__class__Taselfanew_urlaetagaheadersarepresentationTaselfarepresentationaheadersaetagaresponseacontentacontent_typeanew_representationTaselfaparam_nameaparameteraoptionsTaselfamodeacontent_typeafilenameTaselfwb.lazr.uri._uri+�uw/arfindTw/luMerge two URI path components into a single path component.

    Follows rules specified in Section 5.2.3 of RFC 3986.

    The algorithm in the RFC treats the empty basepath edge case
    differently for URIs with and without an authority section, which
    is why the third argument is necessary.
    apathastartswithTu../:lnnTu./:lnnTu/./u/.Tu/../u/..:lnnaoutputl��������Lw.u..afindTw/llaappenduRemove '.' and '..' segments from a URI path.

    Follows the rules specified in Section 5.2.4 of RFC 3986.
    asplitTw%utoo many values to unpack (expected 2):nlnluABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~aresultu%%%02X%suReturn a version of 's' where no unreserved characters are encoded.

    Unreserved characters are defined in Section 2.3 of RFC 3986.

    Percent encoded sequences are normalised to upper case.
    TuURI() must be called with a single string argument or with URI components given as keyword arguments.aunicodeaencodeTaASCIIaInvalidURIErrorTuURIs must consist of ASCII charactersauri_patamatchauriu"%s" is not a valid URIagroupTaschemeaschemeTauserinfoauserinfoTahostahostTaportaportTahierpartTaauthorityTaqueryaqueryTafragmentafragmentTuURIs must have a schemeTuhost must be given if userinfo or port areTuURIs must have a patha_normaliseL
ahttpahttpsaftpagopheratelnetaimapammsartspasvnusvn+sshabzrubzr+httpubzr+sshu%s URIs must have a host nameuCreate a URI instance.

        Can be called with either a string URI or the component parts
        of the URI as keyword arguments.

        In either case, all arguments are expected to be appropriately
        URI encoded.
        aloweranormalise_unreserveda_default_portagetaremove_dot_segmentsuPerform normalisation of URI components.u%s@%su%s:%suThe authority part of the URIaauthorityu//%s%suThe hierarchical part of the URIahier_partu?%su#%su%s(%r)a__name__a__eq__uReplace one or more parts of the URI, returning the result.arelative_ref_patTuInvalid relative referenceTarelativepartamergeTahas_authorityapartsuResolve the given URI reference relative to this URI.

        Uses the rules from Section 5.2 of RFC 3986 to resolve the new
        URI.
        aensureSlasharesolveuAppend the given path to this URI.

        The path must not start with a slash, but a slash is added to
        base URI (before appending the path), in case it doesn't end
        with a slash.
        aendswithaotherpathabasepathuReturns True if the URI 'other' is contained by this one.Tw.uReturn True if the given domain name a parent of the URL's host.areplaceTapathuReturn a URI with the path normalised to end with a slash.arstripuReturn a URI with the path normalised to not end with a slash.uScan a block of text for URIs, and yield the ones found.apossible_uri_patafinditeratextauri_trailers_patasubaURIafind_uris_in_textuFunctions for working with generic syntax URIs.a__doc__u/usr/lib/python3/dist-packages/lazr/uri/_uri.pya__file__a__spec__aoriginahas_locationa__cached__a__metaclass__LaURIaInvalidURIErrorafind_uris_in_textapossible_uri_reamergearemove_dot_segmentsa__all__areD*aacapadavadictadnsaftpagoagopherah323ahttpahttpsaimapaippuiris.beepaldapamtqpamupdateanfsanntpapopartspasipasipsasnmpusoap.beepusoap.beepsatelnetatftpatipavemmiuxmlrpc.beepuxmlrpc.beepsuz39.50ruz39.50saprosperoawaisubzr+httpubzr+sshaircasftpasshasvnusvn+sshu674u80u2628u53u21u1096u70u1720u80u443u143u631u702u389u1038u3905u2049u119u110u554u5060u5061u161u605u605u23u69u3372u575u602u602u210u210u1525u210u80u22u6667u22u22u3690u22u(?P<scheme>[a-z][-a-z0-9+.]*)ascheme_reu(?P<userinfo>(?:[-a-z0-9._~!$&\'()*+,;=:]|%[0-9a-f]{2})*)auserinfo_reu(?P<host>[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}|(?:[-a-z0-9._~!$&\'()*+,;=]|%[0-9a-f]{2})*|\[[0-9a-z:.]+\])ahost_reu(?P<port>[0-9]*)aport_reu(?P<authority>(?:%s@)?%s(?::%s)?)aauthority_reu(?:/(?:[-a-z0-9._~!$&\'()*+,;=:@]|%[0-9a-f]{2})*)*apath_abempty_reu(?:[-a-z0-9._~!$&\'()*+,;=@]|%[0-9a-f]{2})+(?:/(?:[-a-z0-9._~!$&\'()*+,;=:@]|%[0-9a-f]{2})*)*apath_noscheme_reu(?:[-a-z0-9._~!$&\'()*+,;=:@]|%[0-9a-f]{2})+(?:/(?:[-a-z0-9._~!$&\'()*+,;=:@]|%[0-9a-f]{2})*)*apath_rootless_reu/(?:%s)?apath_absolute_reapath_empty_reu(?P<hierpart>//%s%s|%s|%s|%s)ahier_part_reu(?P<relativepart>//%s%s|%s|%s|%s)arelative_part_reu(?P<query>(?:[-a-z0-9._~!$&\'()*+,;=:@/?\[\]]|%[0-9a-f]{2})*)aquery_reu(?P<fragment>(?:[-a-z0-9._~!$&\'()*+,;=:@/?]|%[0-9a-f]{2})*)afragment_reu%s:%s(?:\?%s)?(?:#%s)?$auri_reu%s(?:\?%s)?(?:#%s)?$arelative_ref_reacompileaIGNORECASETEExceptionametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %su<metaclass>ulazr.uri._uria__module__uInvalid URIa__qualname__a__orig_bases__TTaURITuA class that represents a URI.

    This class can represent arbitrary URIs that conform to the
    generic syntax described in RFC 3986.
    Tnnnnnnnna__init__uURI.__init__uURI._normaliseapropertyuURI.authorityuURI.hier_parta__str__uURI.__str__a__repr__uURI.__repr__uURI.__eq__a__ne__uURI.__ne__uURI.replaceuURI.resolveuURI.appendacontainsuURI.containsaunderDomainuURI.underDomainuURI.ensureSlashaensureNoSlashuURI.ensureNoSlashu
\b
(?:about|gopher|http|https|sftp|news|ftp|mailto|file|irc|jabber|xmpp)
:
(?:
  (?:
    # "//" authority path-abempty
    //
    (?: # userinfo
      [-a-zA-Z0-9._~%!$&'()*+,;=:]*
      @
    )?
    (?: # host
      \d+\.\d+\.\d+\.\d+ |
      [-a-zA-Z0-9._~%!$&'()*+,;=]*
    )
    (?: # port
      : \d*
    )?
    (?: / [-a-zA-Z0-9._~%!$&'()*+,;=:@]* )*
  ) | (?:
    # path-absolute
    /
    (?: [-a-zA-Z0-9._~%!$&'()*+,;=:@]+
        (?: / [-a-zA-Z0-9._~%!$&'()*+,;=:@]* )* )?
  ) | (?:
    # path-rootless
    [-a-zA-Z0-9._~%!$&'()*+,;=@]
    [-a-zA-Z0-9._~%!$&'()*+,;=:@]*
    (?: / [-a-zA-Z0-9._~%!$&'()*+,;=:@]* )*
  )
)
(?: # query
  \?
  [-a-zA-Z0-9._~%!$&'()*+,;=:@/\?\[\]]*
)?
(?: # fragment
  \#
  [-a-zA-Z0-9._~%!$&'()*+,;=:@/\?]*
)?
apossible_uri_reaVERBOSETu([,.?:);>]+)$u<module lazr.uri._uri>Ta__class__TaselfaotherTaselfauriaschemeauserinfoahostaportapathaqueryafragmentamatchahierpartaauthorityTaselfaotheraequalTaselfTaselfauriTaselfapathTaselfaauthorityTaselfaotherabasepathaotherpathTatextamatchauri_stringauriTabasepatharelpathahas_authorityaslashTastringaresultaunreservedaindexaitemachTapathaoutputaslashTaselfapartsabasepartsTaselfareferenceamatchapartsaauthorityapathaqueryTaselfadomainaour_segmentsadomain_segments.lazr.uri�uFunctions for working with generic syntax URIs.a__doc__u/usr/lib/python3/dist-packages/lazr/uri/__init__.pya__file__Lu/usr/lib/python3/dist-packages/lazr/uria__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__apkg_resourcesulazr.uriuversion.txtaresource_stringastripa__version__ulazr.uri._uriTw*Ta__all__a__all__aImportErroru<module lazr.uri>u.multiprocessing-postLoad"$aim_selfagetattraim_classaim_funca__name__a__doc__u/usr/lib/python3.8/multiprocessing/multiprocessing-postLoad.pya__file__a__spec__aoriginahas_locationa__cached__umultiprocessing.forkingTaForkingPicklerlaForkingPicklerumultiprocessing.reductionametaclassTa__prepare__TwCTa__getitem__u%s.__prepare__() must return a mapping, not %su<metaclass>umultiprocessing-postLoada__module__wCa__qualname__wfuC.fa_reduce_compiled_methodaregisteru<module multiprocessing-postLoad>Ta__class__Twmu.multiprocessing-preLoad�a__doc__u/usr/lib/python3.8/multiprocessing/multiprocessing-preLoad.pya__file__a__spec__aoriginahas_locationa__cached__asysaoslafrozenaargvlaexecutableu<module multiprocessing-preLoad>u.oauthlib.common��aunicode_typeaencodeTuutf-8a_quoteadecodea_unquoteaencode_params_utf8a_urlencodeutoo many values to unpack (expected 2)aencodedaappenduEnsures that all parameters in a list of 2-element tuples are encoded to
    bytestrings using UTF-8
    adecodeduEnsures that all parameters in a list of 2-element tuples are decoded to
    unicode using UTF-8.
    aurlencodeduError trying to decode a non urlencoded string. Found invalid characters: %s in the string: '%s'. Please ensure the request/response body is x-www-form-urlencoded.aqueryaINVALID_HEX_PATTERNasearchuInvalid hex encoding in query string.aPY3aurlparseaparse_qslDakeep_blank_valuestadecode_params_utf8uDecode a query string in x-www-form-urlencoded format into a sequence
    of two-element tuples.

    Unlike urlparse.parse_qsl(..., strict_parsing=True) urldecode will enforce
    correct formatting of the query string by validation. If validation fails
    a ValueError will be raised. urllib.parse_qsl will only raise errors if
    any of name-value pairs omits the equals sign.
    aurldecodea__iter__aitemsaparamsuExtract parameters and return them as a list of 2-tuples.

    Will successfully extract parameters from urlencoded query strings,
    dicts, or lists of 2-tuples. Empty strings/dicts/lists will return an
    empty list of parameters. Any other input will result in a return
    value of None.
    arandbitsTl@agenerate_timestampuGenerate pseudorandom nonce that is unlikely to repeat.

    Per `section 3.3`_ of the OAuth 1 RFC 5849 spec.
    Per `section 3.2.1`_ of the MAC Access Authentication spec.

    A random 64-bit number is appended to the epoch timestamp for both
    randomness and to decrease the likelihood of collisions.

    .. _`section 3.2.1`: https://tools.ietf.org/html/draft-ietf-oauth-v2-http-mac-01#section-3.2.1
    .. _`section 3.3`: https://tools.ietf.org/html/rfc5849#section-3.3
    atimeuGet seconds since epoch (UTC).

    Per `section 3.3`_ of the OAuth 1 RFC 5849 spec.
    Per `section 3.2.1`_ of the MAC Access Authentication spec.

    .. _`section 3.2.1`: https://tools.ietf.org/html/draft-ietf-oauth-v2-http-mac-01#section-3.2.1
    .. _`section 3.3`: https://tools.ietf.org/html/rfc5849#section-3.3
    aSystemRandomuuGenerates a non-guessable OAuth token

    OAuth (1 and 2) does not specify the format of tokens except that they
    should be strings of random characters. Tokens should not be guessable
    and entropy when generating the random characters is important. Which is
    why SystemRandom is used instead of the default random.choice method.
    arandachoiceacharsu<genexpr>ugenerate_token.<locals>.<genexpr>ajwtladatetimeautcnowascopeaexpatimedeltaaexpires_inTasecondsaclaimsaRS256ato_unicodeuUTF-8DaalgorithmsLaRS256agenerate_tokenuGenerates an OAuth client_id

    OAuth 2 specify the format of client_id in
    https://tools.ietf.org/html/rfc6749#appendix-A.
    aextendaurlencodeuExtend a query with a list of two-tuples.utoo many values to unpack (expected 6)aadd_params_to_qsaurlunparseuAdd a list of two-tuples to the uri query components.aresultu Near-constant time string comparison.

    Used in order to avoid timing attacks on sensitive information such
    as secret keys during request verification (`rootLabs`_).

    .. _`rootLabs`: http://rdist.root.org/2010/01/07/timing-independent-array-comparison/

    TaencodinguConvert a number of different types of objects to unicode.aencodinguto_unicode.<locals>.<genexpr>aproxyaselfaloweruCaseInsensitiveDict.__init__.<locals>.<genexpr>aCaseInsensitiveDicta__delitem__a__getitem__a__setitem__aupdateu<lambda>uRequest.__init__.<locals>.<lambda>auriahttp_methodaheadersabodyaextract_paramsadecoded_bodyaoauth_paramsavalidator_logDaaccess_tokenaclientaclient_idaclient_secretacodeacode_challengeacode_challenge_methodacode_verifieraextra_credentialsagrant_typearedirect_uriarefresh_tokenarequest_tokenaresponse_typeascopeascopesastateatokenauseratoken_type_hintaresponse_modeanonceadisplayapromptaclaimsamax_ageaui_localesaid_token_hintalogin_hintaacr_valuesnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna_paramsauri_queryaget_debugu<oauthlib.Request SANITIZED>acopyaSANITIZE_PATTERNasubu<SANITIZED>aAuthorizationu<SANITIZED>u<oauthlib.Request url="%s", http_method="%s", headers="%s", body="%s">Dakeep_blank_valuesastrict_parsingtpacollectionsadefaultdictTOintauri_query_paramsaseen_keysluRequest.duplicate_params.<locals>.<genexpr>u
oauthlib.common
~~~~~~~~~~~~~~

This module provides data structures and utilities common
to all implementations of OAuth.
a__doc__u/usr/lib/python3/dist-packages/oauthlib/common.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importaunicode_literalsaloggingareasysTaget_debugasecretsTarandbitsTaSystemRandomarandomTagetrandbitsagetrandbitsaurllibTaquoteaquoteTaunquoteaunquoteTaurlencodeuurllib.parseaparseaabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789aUNICODE_ASCII_CHARACTER_SETu !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}aCLIENT_ID_CHARACTER_SETacompileu([^&;]*(?:password|token)[^=]*=)[^&;]+aIGNORECASETu%[^0-9A-Fa-f]|%[0-9A-Fa-f][^0-9A-Fa-f]uABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.-aalways_safeagetLoggerTaoauthlibalogTd/Sw?w=w/w:w~w@w*w(w!w$w;w%w&w,w)w+w'agenerate_noncelagenerate_signed_tokenaverify_signed_tokenagenerate_client_idTFaadd_params_to_uriasafe_string_equalsTuUTF-8TOdictametaclassa__prepare__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uoauthlib.commona__module__uBasic case insensitive dict with strings only keys.a__qualname__a__init__uCaseInsensitiveDict.__init__a__contains__uCaseInsensitiveDict.__contains__uCaseInsensitiveDict.__delitem__uCaseInsensitiveDict.__getitem__TnagetuCaseInsensitiveDict.getuCaseInsensitiveDict.__setitem__uCaseInsensitiveDict.updatea__orig_bases__TOobjectaRequestuA malleable representation of a signable HTTP request.

    Body argument may contain any data, but parameters will only be decoded if
    they are one of:

    * urlencoded query string
    * dict
    * list of 2-tuples

    Anything else will be treated as raw body data to be passed through
    unmolested.
    TaGETnnuutf-8uRequest.__init__a__getattr__uRequest.__getattr__a__repr__uRequest.__repr__apropertyuRequest.uri_queryuRequest.uri_query_paramsaduplicate_paramsuRequest.duplicate_paramsTa.0wiaencodingTa.0wkTa.0wkwvaencodingTa.0wpTa.0wxarandacharsTwxaencodingu<listcomp>Twkwcu<module oauthlib.common>Ta__class__TaselfwkTaselfwkakeya__class__TaselfanameTaselfadatawkTaselfauriahttp_methodabodyaheadersaencodingaencodeTaselfabodyaheadersTaselfwkwva__class__TaqueryaparamsaqueryparamsT	auriaparamsafragmentaschanetapathaparaqueryafraTaparamsadecodedwkwvTaselfaseen_keysaall_keyswkTaparamsaencodedwkwvTarawaparamsTalengthacharsTaprivate_pemarequestajwtanowaclaimsatokenTalengthacharsarandTaselfwkadefaultTwsasafeTwawbaresultwxwyTadataaencodingTwsTaselfaargsakwargswka__class__TaselfTaqueryaerroraparamsTaparamsautf8_paramsaurlencodedTapublic_pematokenajwt.oauthlib%a_DEBUGuSet value of debug flag
	
    :param debug_val: Value to set. Must be a bool value.
	uGet debug mode value. 
	
	:return: `True` if debug mode is on, `False` otherwise
	u
    oauthlib
    ~~~~~~~~

    A generic, spec-compliant, thorough implementation of the OAuth
    request-signing logic.

    :copyright: (c) 2019 by The OAuthlib Community
    :license: BSD, see LICENSE for details.
a__doc__u/usr/lib/python3/dist-packages/oauthlib/__init__.pya__file__Lu/usr/lib/python3/dist-packages/oauthliba__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aloggingTaNullHandleraNullHandleruThe OAuthlib Communitya__author__u3.1.0a__version__agetLoggerTaoauthlibaaddHandleraset_debugaget_debugu<module oauthlib>Tadebug_valu.oauthlib.oauth13u
oauthlib.oauth1
~~~~~~~~~~~~~~

This module is a wrapper for the most recent implementation of OAuth 1.0 Client
and Server classes.
a__doc__u/usr/lib/python3/dist-packages/oauthlib/oauth1/__init__.pya__file__Lu/usr/lib/python3/dist-packages/oauthlib/oauth1a__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aabsolute_importaunicode_literalsarfc5849TaClientlaClientTaSIGNATURE_HMACaSIGNATURE_HMAC_SHA1aSIGNATURE_HMAC_SHA256aSIGNATURE_RSAaSIGNATURE_PLAINTEXTaSIGNATURE_HMACaSIGNATURE_HMAC_SHA1aSIGNATURE_HMAC_SHA256aSIGNATURE_RSAaSIGNATURE_PLAINTEXTTaSIGNATURE_TYPE_AUTH_HEADERaSIGNATURE_TYPE_QUERYaSIGNATURE_TYPE_AUTH_HEADERaSIGNATURE_TYPE_QUERYTaSIGNATURE_TYPE_BODYaSIGNATURE_TYPE_BODYurfc5849.request_validatorTaRequestValidatoraRequestValidatorurfc5849.endpointsTaRequestTokenEndpointaAuthorizationEndpointaRequestTokenEndpointaAuthorizationEndpointTaAccessTokenEndpointaResourceEndpointaAccessTokenEndpointaResourceEndpointTaSignatureOnlyEndpointaWebApplicationServeraSignatureOnlyEndpointaWebApplicationServerurfc5849.errorsTaInsecureTransportErroraInvalidClientErroraInvalidRequestErroraInvalidSignatureMethodErroraOAuth1ErroraInsecureTransportErroraInvalidClientErroraInvalidRequestErroraInvalidSignatureMethodErroraOAuth1Erroru<module oauthlib.oauth1>u.oauthlib.oauth1.rfc5849��aSIGNATURE_METHODSu<lambda>uClient.__init__.<locals>.<lambda>aclient_keyaclient_secretaresource_owner_keyaresource_owner_secretasignature_methodasignature_typeacallback_uriarsa_keyaverifierarealmaencodingadecodinganonceatimestampuCreate an OAuth 1 client.

        :param client_key: Client key (consumer key), mandatory.
        :param resource_owner_key: Resource owner key (oauth token).
        :param resource_owner_secret: Resource owner secret (oauth token secret).
        :param callback_uri: Callback used when obtaining request token.
        :param signature_method: SIGNATURE_HMAC, SIGNATURE_RSA or SIGNATURE_PLAINTEXT.
        :param signature_type: SIGNATURE_TYPE_AUTH_HEADER (default),
                               SIGNATURE_TYPE_QUERY or SIGNATURE_TYPE_BODY
                               depending on where you want to embed the oauth
                               credentials.
        :param rsa_key: RSA key used with SIGNATURE_RSA.
        :param verifier: Verifier used when obtaining an access token.
        :param realm: Realm (scope) to which access is being requested.
        :param encoding: If you provide non-unicode input you may use this
                         to have oauthlib automatically convert.
        :param decoding: If you wish that the returned uri, headers and body
                         from sign be encoded back from unicode, then set
                         decoding to your preferred encoding, i.e. utf-8.
        :param nonce: Use this nonce instead of generating one. (Mainly for testing)
        :param timestamp: Use this timestamp instead of using current. (Mainly for testing)
        ato_unicodeacopyu****u, aitemsu<%s %s>a__name__utoo many values to unpack (expected 2)u%s=%su<genexpr>uClient.__repr__.<locals>.<genexpr>aSIGNATURE_PLAINTEXTasignatureasign_plaintexta_renderutoo many values to unpack (expected 3)acollect_parametersaurlparseaqueryTauri_queryabodyaheadersalogadebuguCollected params: {0}anormalize_parametersabase_string_uriagetTaHostnuNormalized params: {0}uNormalized URI: {0}asignature_base_stringahttp_methoduSigning: signature base string: {0}uInvalid signature method.uSignature: {0}uGet an OAuth signature to be used in signing a request

        To satisfy `section 3.4.1.2`_ item 2, if the request argument's
        headers dict attribute contains a Host item, its value will
        replace any netloc part of the request argument's uri attribute
        value.

        .. _`section 3.4.1.2`: https://tools.ietf.org/html/rfc5849#section-3.4.1.2
        agenerate_nonceagenerate_timestampaoauth_nonceaoauth_timestampTaoauth_versionu1.0aoauth_signature_methodaoauth_consumer_keyaappendaoauth_tokenaparamsaoauth_callbackaoauth_verifieraheadersTuContent-TypenafindTuapplication/x-www-form-urlencodedlabodyaoauth_body_hashabase64ab64encodeahashlibasha1aencodeTuutf-8adigestadecodeuGet the basic OAuth parameters to be used in generating a signature.
        auriaSIGNATURE_TYPE_AUTH_HEADERaparametersaprepare_headersaoauth_paramsTarealmaSIGNATURE_TYPE_BODYadecoded_bodyaprepare_form_encoded_bodyaurlencodeuapplication/x-www-form-urlencodeduContent-TypeaSIGNATURE_TYPE_QUERYaprepare_request_uri_queryuUnknown signature type specified.uRender a signed request according to signature type

        Returns a 3-tuple containing the request URI, headers, and body.

        If the formencode argument is True and the body contains parameters, it
        is escaped and returned as a valid formencoded string.
        aRequestTaencodingastartswithTumultipart/acontent_typeaCONTENT_TYPE_FORM_URLENCODEDuHeaders indicate a multipart body but body contains parameters.uHeaders indicate a formencoded body but body was not decodable.uBody contains parameters but Content-Type header was {0} instead of {1}unot setuBody signatures may only be used with form-urlencoded contentaupperTaGETaHEADuGET/HEAD requests should not include body.aget_oauth_paramsaoauth_signatureaget_oauth_signatureTaformencodearealmuEncoding URI, headers and body to %s.aselfanew_headersuSign a request

        Signs an HTTP request with the specified parts.

        Returns a 3-tuple of the signed request's URI, headers, and body.
        Note that http_method is not returned as it is unaffected by the OAuth
        signing process. Also worth noting is that duplicate parameters
        will be included in the signature, regardless of where they are
        specified (query, body).

        The body argument may be a dict, a list of 2-tuples, or a formencoded
        string. The Content-Type header must be 'application/x-www-form-urlencoded'
        if it is present.

        If the body argument is not one of the above, it will be returned
        verbatim as it is unaffected by the OAuth signing process. Attempting to
        sign a request with non-formencoded data using the OAuth body signature
        type is invalid and will raise an exception.

        If the body does contain parameters, it will be returned as a properly-
        formatted formencoded string.

        Body may not be included if the http_method is either GET or HEAD as
        this changes the semantic meaning of the request.

        All string data MUST be unicode or be encoded with the same encoding
        scheme supplied to the Client constructor, default utf-8. This includes
        strings inside body dicts, for example.
        u
oauthlib.oauth1.rfc5849
~~~~~~~~~~~~~~

This module is an implementation of various logic needed
for signing and checking OAuth 1.0 RFC 5849 requests.
a__doc__u/usr/lib/python3/dist-packages/oauthlib/oauth1/rfc5849/__init__.pya__file__Lu/usr/lib/python3/dist-packages/oauthlib/oauth1/rfc5849a__path__a__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aabsolute_importaunicode_literalsaloggingagetLoggerTuoauthlib.oauth1.rfc5849asysuurllib.parseaparseuoauthlib.commonTaRequestaurlencodeagenerate_nonceTagenerate_timestampato_unicodeuTaparametersasignatureluHMAC-SHA1aSIGNATURE_HMAC_SHA1uHMAC-SHA256aSIGNATURE_HMAC_SHA256aSIGNATURE_HMACuRSA-SHA1aSIGNATURE_RSAaPLAINTEXTaAUTH_HEADERaQUERYaBODYTOobjectametaclassa__prepare__aClienta__getitem__u%s.__prepare__() must return a mapping, not %su<metaclass>uoauthlib.oauth1.rfc5849a__module__uA client used to sign OAuth 1.0 RFC 5849 requests.a__qualname__asign_hmac_sha1_with_clientasign_hmac_sha256_with_clientasign_rsa_sha1_with_clientasign_plaintext_with_clientaclassmethodaregister_signature_methoduClient.register_signature_methoduutf-8a__init__uClient.__init__a__repr__uClient.__repr__uClient.get_oauth_signatureuClient.get_oauth_paramsTFnuClient._renderTaGETnnnasignuClient.signa__orig_bases__Ta.0wkwvTwxaencodingu<module oauthlib.oauth1.rfc5849>Ta__class__Taselfaclient_keyaclient_secretaresource_owner_keyaresource_owner_secretacallback_uriasignature_methodasignature_typearsa_keyaverifierarealmaencodingadecodinganonceatimestampaencodeTaselfaattrsaattribute_strTaselfarequestaformencodearealmauriaheadersabodyTaselfarequestanonceatimestampaparamsacontent_typeacontent_type_eligibleT
aselfarequestauriaheadersabodyacollected_paramsanormalized_paramsanormalized_uriabase_stringasigTaclsamethod_nameamethod_callbackTaselfauriahttp_methodabodyaheadersarealmarequestacontent_typeamultipartashould_have_paramsahas_paramsanew_headerswkwv.oauthlib.oauth1.rfc5849.endpoints.access_tokenOjarequest_validatoraget_realmsaresource_owner_keyarealmsaoauth_tokenatoken_generatoraoauth_token_secretaoauth_authorized_realmsw asave_access_tokenaurlencodeaitemsuCreate and save a new access token.

        Similar to OAuth 2, indication of granted scopes will be included as a
        space separated list in ``oauth_authorized_realms``.

        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :returns: The token as an urlencoded string.
        DuContent-Typeuapplication/x-www-form-urlencodeda_create_requestavalidate_access_token_requestutoo many values to unpack (expected 2)acreate_access_tokenainvalidate_request_tokenaclient_keyl�TDnl�aerrorsaOAuth1Erroraurlencodedastatus_codeuCreate an access token response, with a new request token if valid.

        :param uri: The full URI of the token request.
        :param http_method: A valid HTTP verb, i.e. GET, POST, PUT, HEAD, etc.
        :param body: The request body as a string.
        :param headers: The request headers as a dict.
        :param credentials: A list of extra credentials to include in the token.
        :returns: A tuple of 3 elements.
                  1. A dict of headers to set on the response.
                  2. The response body as a string.
                  3. The response status code as an integer.

        An example of a valid request::

            >>> from your_validator import your_validator
            >>> from oauthlib.oauth1 import AccessTokenEndpoint
            >>> endpoint = AccessTokenEndpoint(your_validator)
            >>> h, b, s = endpoint.create_access_token_response(
            ...     'https://your.provider/access_token?foo=bar',
            ...     headers={
            ...         'Authorization': 'OAuth oauth_token=234lsdkf....'
            ...     },
            ...     credentials={
            ...         'my_specific': 'argument',
            ...     })
            >>> h
            {'Content-Type': 'application/x-www-form-urlencoded'}
            >>> b
            'oauth_token=lsdkfol23w54jlksdef&oauth_token_secret=qwe089234lkjsdf&oauth_authorized_realms=movies+pics&my_specific=argument'
            >>> s
            200

        An response to invalid request would have a different body and status::

            >>> b
            'error=invalid_request&description=missing+resource+owner+key'
            >>> s
            400

        The same goes for an an unauthorized request:

            >>> b
            ''
            >>> s
            401
        a_check_transport_securitya_check_mandatory_parametersaInvalidRequestErrorTuMissing resource owner.Tadescriptionacheck_request_tokenTuInvalid resource owner key format.averifierTuMissing verifier.acheck_verifierTuInvalid verifier format.avalidate_timestamp_and_nonceatimestampanonceTarequest_tokenavalidate_client_keyadummy_clientavalidate_request_tokenadummy_request_tokenavalidate_verifiera_check_signatureDais_token_requesttavalidator_logaclientaresource_ownerasignaturealogainfoTu[Failure] request verification failed.uValid client:, %suValid token:, %suValid verifier:, %suValid signature:, %suValidate an access token request.

        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :raises: OAuth1Error if the request is invalid.
        :returns: A tuple of 2 elements.
                  1. The validation result (True or False).
                  2. The request object.
        u
oauthlib.oauth1.rfc5849.endpoints.access_token
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This module is an implementation of the access token provider logic of
OAuth 1.0 RFC 5849. It validates the correctness of access token requests,
creates and persists tokens as well as create the proper response to be
returned to the client.
a__doc__u/usr/lib/python3/dist-packages/oauthlib/oauth1/rfc5849/endpoints/access_token.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importaunicode_literalsaloggingluoauthlib.commonTaurlencodeuTaerrorslabaseTaBaseEndpointlaBaseEndpointagetLoggerTuoauthlib.oauth1.rfc5849.endpoints.access_tokenametaclassa__prepare__aAccessTokenEndpointa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uoauthlib.oauth1.rfc5849.endpoints.access_tokena__module__uAn endpoint responsible for providing OAuth 1 access tokens.

    Typical use is to instantiate with a request validator and invoke the
    ``create_access_token_response`` from a view function. The tuple returned
    has all information necessary (body, status, headers) to quickly form
    and return a proper response. See :doc:`/oauth1/validator` for details on which
    validator methods to implement for this endpoint.
    a__qualname__uAccessTokenEndpoint.create_access_tokenTaGETnnnacreate_access_token_responseuAccessTokenEndpoint.create_access_token_responseuAccessTokenEndpoint.validate_access_token_requesta__orig_bases__u<module oauthlib.oauth1.rfc5849.endpoints.access_token>Ta__class__TaselfarequestacredentialsatokenTaselfauriahttp_methodabodyaheadersacredentialsaresp_headersarequestavalidaprocessed_requestatokenweTaselfarequestavalid_clientavalid_resource_owneravalid_verifieravalid_signaturewv.oauthlib.oauth1.rfc5849.endpoints.authorizationOaoauth_tokenaresource_owner_keyaoauth_verifieratoken_generatorarequest_validatorasave_verifieruCreate and save a new request token.

        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :param credentials: A dict of extra token credentials.
        :returns: The verifier as a dict.
        a_create_requestTahttp_methodabodyaheadersaerrorsaInvalidRequestErrorTuMissing mandatory parameter oauth_token.averify_request_tokenaInvalidClientErrorarealmsaverify_realmsTuUser granted access to realms outside of what the client may request.Tadescriptionacreate_verifieraget_redirect_uriaoobDuContent-Typeuapplication/x-www-form-urlencodedaurlencodel�aadd_params_to_uriaitemsaLocationl.uCreate an authorization response, with a new request token if valid.

        :param uri: The full URI of the token request.
        :param http_method: A valid HTTP verb, i.e. GET, POST, PUT, HEAD, etc.
        :param body: The request body as a string.
        :param headers: The request headers as a dict.
        :param credentials: A list of credentials to include in the verifier.
        :returns: A tuple of 3 elements.
                  1. A dict of headers to set on the response.
                  2. The response body as a string.
                  3. The response status code as an integer.

        If the callback URI tied to the current token is "oob", a response with
        a 200 status code will be returned. In this case, it may be desirable to
        modify the response to better display the verifier to the client.

        An example of an authorization request::

            >>> from your_validator import your_validator
            >>> from oauthlib.oauth1 import AuthorizationEndpoint
            >>> endpoint = AuthorizationEndpoint(your_validator)
            >>> h, b, s = endpoint.create_authorization_response(
            ...     'https://your.provider/authorize?oauth_token=...',
            ...     credentials={
            ...         'extra': 'argument',
            ...     })
            >>> h
            {'Location': 'https://the.client/callback?oauth_verifier=...&extra=argument'}
            >>> b
            None
            >>> s
            302

        An example of a request with an "oob" callback::

            >>> from your_validator import your_validator
            >>> from oauthlib.oauth1 import AuthorizationEndpoint
            >>> endpoint = AuthorizationEndpoint(your_validator)
            >>> h, b, s = endpoint.create_authorization_response(
            ...     'https://your.provider/authorize?foo=bar',
            ...     credentials={
            ...         'extra': 'argument',
            ...     })
            >>> h
            {'Content-Type': 'application/x-www-form-urlencoded'}
            >>> b
            'oauth_verifier=...&extra=argument'
            >>> s
            200
        aget_realmsuFetch realms and credentials for the presented request token.

        :param uri: The full URI of the token request.
        :param http_method: A valid HTTP verb, i.e. GET, POST, PUT, HEAD, etc.
        :param body: The request body as a string.
        :param headers: The request headers as a dict.
        :returns: A tuple of 2 elements.
                  1. A list of request realms.
                  2. A dict of credentials which may be useful in creating the
                  authorization form.
        u
oauthlib.oauth1.rfc5849.endpoints.authorization
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This module is an implementation of various logic needed
for signing and checking OAuth 1.0 RFC 5849 requests.
a__doc__u/usr/lib/python3/dist-packages/oauthlib/oauth1/rfc5849/endpoints/authorization.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importaunicode_literalsuoauthlib.commonTaRequestaadd_params_to_urilaRequestuTaerrorslabaseTaBaseEndpointlaBaseEndpointaurllibTaurlencodeuurllib.parseametaclassa__prepare__aAuthorizationEndpointa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uoauthlib.oauth1.rfc5849.endpoints.authorizationa__module__uAn endpoint responsible for letting authenticated users authorize access
    to their protected resources to a client.

    Typical use would be to have two views, one for displaying the authorization
    form and one to process said form on submission.

    The first view will want to utilize ``get_realms_and_credentials`` to fetch
    requested realms and useful client credentials, such as name and
    description, to be used when creating the authorization form.

    During form processing you can use ``create_authorization_response`` to
    validate the request, create a verifier as well as prepare the final
    redirection URI used to send the user back to the client.

    See :doc:`/oauth1/validator` for details on which validator methods to implement
    for this endpoint.
    a__qualname__uAuthorizationEndpoint.create_verifierTaGETnnnnacreate_authorization_responseuAuthorizationEndpoint.create_authorization_responseTaGETnnaget_realms_and_credentialsuAuthorizationEndpoint.get_realms_and_credentialsa__orig_bases__u<module oauthlib.oauth1.rfc5849.endpoints.authorization>Ta__class__T
aselfauriahttp_methodabodyaheadersarealmsacredentialsarequestaverifieraredirect_uriaresponse_headersaresponse_bodyapopulated_redirectTaselfarequestacredentialsaverifierTaselfauriahttp_methodabodyaheadersarequestarealms.oauthlib.oauth1.rfc5849.endpoints.base�arequest_validatoragenerate_tokenatoken_generatorasignatureacollect_parametersaheadersTaheadersaexclude_oauth_signatureawith_realmabodyTabodyaexclude_oauth_signatureauri_queryTauri_queryaexclude_oauth_signatureaextendu<lambda>uBaseEndpoint._get_signature_type_and_params.<locals>.<lambda>aSIGNATURE_TYPE_AUTH_HEADERautilsafilter_oauth_paramsaSIGNATURE_TYPE_BODYaSIGNATURE_TYPE_QUERYlaerrorsaInvalidRequestErroruoauth_ params must come from only 1 signaturetype but were found in %su, Tadescriptionutoo many values to unpack (expected 3)TuMissing mandatory OAuth parameters.uExtracts parameters from query, headers and body. Signature type
        is set to the source in which parameters were found.
        laCaseInsensitiveDictuContent-TypeaCONTENT_TYPE_FORM_URLENCODEDaRequestua_get_signature_type_and_paramsTuDuplicate OAuth1 entries.aoauth_signatureaoauth_consumer_keyaclient_keyaoauth_tokenaresource_owner_keyaoauth_nonceanonceaoauth_timestampatimestampaoauth_callbackaredirect_uriaoauth_verifieraverifieraoauth_signature_methodasignature_methodarealmaoauth_paramsutoo many values to unpack (expected 2)aparamsagetTaAuthorizationuaenforce_sslaurialowerastartswithTuhttps://aInsecureTransportErroraallowed_signature_methodsaInvalidSignatureMethodErroruInvalid signature, %s not in %r.aoauth_versionu1.0TuInvalid OAuth version.TuInvalid timestamp sizeTuTimestamp must be an integer.atimeatimestamp_lifetimeuTimestamp given is invalid, differ from allowed by over %s seconds.acheck_client_keyTuInvalid client key format.acheck_nonceTuInvalid nonce format.aSIGNATURE_RSAaget_rsa_keyaverify_rsa_sha1aget_client_secretaget_request_token_secretaget_access_token_secretaSIGNATURE_HMAC_SHA1averify_hmac_sha1aSIGNATURE_HMAC_SHA256averify_hmac_sha256averify_plaintextu
oauthlib.oauth1.rfc5849.endpoints.base
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This module is an implementation of various logic needed
for signing and checking OAuth 1.0 RFC 5849 requests.
a__doc__u/usr/lib/python3/dist-packages/oauthlib/oauth1/rfc5849/endpoints/base.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importaunicode_literalsuoauthlib.commonTaCaseInsensitiveDictaRequestagenerate_tokenT
aCONTENT_TYPE_FORM_URLENCODEDaSIGNATURE_HMAC_SHA1aSIGNATURE_HMAC_SHA256aSIGNATURE_RSAaSIGNATURE_TYPE_AUTH_HEADERaSIGNATURE_TYPE_BODYaSIGNATURE_TYPE_QUERYaerrorsasignatureautilsTOobjectametaclassa__prepare__aBaseEndpointa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uoauthlib.oauth1.rfc5849.endpoints.basea__module__a__qualname__Tna__init__uBaseEndpoint.__init__uBaseEndpoint._get_signature_type_and_paramsa_create_requestuBaseEndpoint._create_requesta_check_transport_securityuBaseEndpoint._check_transport_securitya_check_mandatory_parametersuBaseEndpoint._check_mandatory_parametersTFa_check_signatureuBaseEndpoint._check_signaturea__orig_bases__Twsu<listcomp>Twkwvu<module oauthlib.oauth1.rfc5849.endpoints.base>Ta__class__Taselfarequest_validatoratoken_generatorTaselfarequestatsTaselfarequestais_token_requestarsa_keyavalid_signatureaclient_secretaresource_owner_secretTaselfarequestT	aselfauriahttp_methodabodyaheadersarequestasignature_typeaparamsaoauth_paramsT
aselfarequestaheader_paramsabody_paramsaquery_paramsaparamsasignature_types_with_oauth_paramsafound_typesasignature_typeaoauth_params.oauthlib.oauth1.rfc5849.endpoints�$a__doc__u/usr/lib/python3/dist-packages/oauthlib/oauth1/rfc5849/endpoints/__init__.pya__file__Lu/usr/lib/python3/dist-packages/oauthlib/oauth1/rfc5849/endpointsa__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aabsolute_importabaseTaBaseEndpointlaBaseEndpointarequest_tokenTaRequestTokenEndpointaRequestTokenEndpointaauthorizationTaAuthorizationEndpointaAuthorizationEndpointaaccess_tokenTaAccessTokenEndpointaAccessTokenEndpointaresourceTaResourceEndpointaResourceEndpointasignature_onlyTaSignatureOnlyEndpointaSignatureOnlyEndpointapre_configuredTaWebApplicationServeraWebApplicationServeru<module oauthlib.oauth1.rfc5849.endpoints>u.oauthlib.oauth1.rfc5849.endpoints.pre_configured�!aRequestTokenEndpointa__init__aAuthorizationEndpointaAccessTokenEndpointaResourceEndpointa__doc__u/usr/lib/python3/dist-packages/oauthlib/oauth1/rfc5849/endpoints/pre_configured.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importaunicode_literalsuTaAccessTokenEndpointaAuthorizationEndpointaRequestTokenEndpointaResourceEndpointllametaclassa__prepare__aWebApplicationServera__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uoauthlib.oauth1.rfc5849.endpoints.pre_configureda__module__a__qualname__uWebApplicationServer.__init__a__orig_bases__u<module oauthlib.oauth1.rfc5849.endpoints.pre_configured>Ta__class__Taselfarequest_validator.oauthlib.oauth1.rfc5849.endpoints.request_token�haoauth_tokenatoken_generatoraoauth_token_secretaoauth_callback_confirmedatruearequest_validatorasave_request_tokenaurlencodeaitemsuCreate and save a new request token.

        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :param credentials: A dict of extra token credentials.
        :returns: The token as an urlencoded string.
        DuContent-Typeuapplication/x-www-form-urlencodeda_create_requestavalidate_request_token_requestutoo many values to unpack (expected 2)acreate_request_tokenl�TDnl�aerrorsaOAuth1Erroraurlencodedastatus_codeuCreate a request token response, with a new request token if valid.

        :param uri: The full URI of the token request.
        :param http_method: A valid HTTP verb, i.e. GET, POST, PUT, HEAD, etc.
        :param body: The request body as a string.
        :param headers: The request headers as a dict.
        :param credentials: A list of extra credentials to include in the token.
        :returns: A tuple of 3 elements.
                  1. A dict of headers to set on the response.
                  2. The response body as a string.
                  3. The response status code as an integer.

        An example of a valid request::

            >>> from your_validator import your_validator
            >>> from oauthlib.oauth1 import RequestTokenEndpoint
            >>> endpoint = RequestTokenEndpoint(your_validator)
            >>> h, b, s = endpoint.create_request_token_response(
            ...     'https://your.provider/request_token?foo=bar',
            ...     headers={
            ...         'Authorization': 'OAuth realm=movies user, oauth_....'
            ...     },
            ...     credentials={
            ...         'my_specific': 'argument',
            ...     })
            >>> h
            {'Content-Type': 'application/x-www-form-urlencoded'}
            >>> b
            'oauth_token=lsdkfol23w54jlksdef&oauth_token_secret=qwe089234lkjsdf&oauth_callback_confirmed=true&my_specific=argument'
            >>> s
            200

        An response to invalid request would have a different body and status::

            >>> b
            'error=invalid_request&description=missing+callback+uri'
            >>> s
            400

        The same goes for an an unauthorized request:

            >>> b
            ''
            >>> s
            401
        a_check_transport_securitya_check_mandatory_parametersarealmasplitTw arealmsaget_default_realmsaclient_keyacheck_realmsaInvalidRequestErroruInvalid realm %s. Allowed are %r.Tadescriptionaredirect_uriTuMissing callback URI.avalidate_timestamp_and_nonceatimestampanoncearesource_owner_keyTarequest_tokenavalidate_client_keyadummy_clientavalidate_requested_realmsavalidate_redirect_uriuRedirect URI must either be provided or set to a default during validation.a_check_signatureavalidator_logaclientacallbackasignaturealogainfoTu[Failure] request verification failed.uValid client: %s.uValid realm: %s.uValid callback: %s.uValid signature: %s.uValidate a request token request.

        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :raises: OAuth1Error if the request is invalid.
        :returns: A tuple of 2 elements.
                  1. The validation result (True or False).
                  2. The request object.
        u
oauthlib.oauth1.rfc5849.endpoints.request_token
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This module is an implementation of the request token provider logic of
OAuth 1.0 RFC 5849. It validates the correctness of request token requests,
creates and persists tokens as well as create the proper response to be
returned to the client.
a__doc__u/usr/lib/python3/dist-packages/oauthlib/oauth1/rfc5849/endpoints/request_token.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importaunicode_literalsaloggingluoauthlib.commonTaurlencodeuTaerrorslabaseTaBaseEndpointlaBaseEndpointagetLoggerTuoauthlib.oauth1.rfc5849.endpoints.request_tokenametaclassa__prepare__aRequestTokenEndpointa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uoauthlib.oauth1.rfc5849.endpoints.request_tokena__module__uAn endpoint responsible for providing OAuth 1 request tokens.

    Typical use is to instantiate with a request validator and invoke the
    ``create_request_token_response`` from a view function. The tuple returned
    has all information necessary (body, status, headers) to quickly form
    and return a proper response. See :doc:`/oauth1/validator` for details on which
    validator methods to implement for this endpoint.
    a__qualname__uRequestTokenEndpoint.create_request_tokenTaGETnnnacreate_request_token_responseuRequestTokenEndpoint.create_request_token_responseuRequestTokenEndpoint.validate_request_token_requesta__orig_bases__u<module oauthlib.oauth1.rfc5849.endpoints.request_token>Ta__class__TaselfarequestacredentialsatokenTaselfauriahttp_methodabodyaheadersacredentialsaresp_headersarequestavalidaprocessed_requestatokenweTaselfarequestavalid_clientavalid_realmavalid_redirectavalid_signaturewv.oauthlib.oauth1.rfc5849.endpoints.resource�
Ja_create_requestaerrorsaOAuth1ErrorTFna_check_transport_securitya_check_mandatory_parametersaresource_owner_keyarequest_validatoracheck_access_tokenavalidate_timestamp_and_nonceaclient_keyatimestampanonceTaaccess_tokenavalidate_client_keyadummy_clientavalidate_access_tokenadummy_access_tokenavalidate_realmsauriTauriarealmsa_check_signatureavalidator_logaclientaresource_ownerarealmasignaturealogainfoTu[Failure] request verification failed.uValid client: %suValid token: %suValid realm: %suValid signature: %suCreate a request token response, with a new request token if valid.

        :param uri: The full URI of the token request.
        :param http_method: A valid HTTP verb, i.e. GET, POST, PUT, HEAD, etc.
        :param body: The request body as a string.
        :param headers: The request headers as a dict.
        :param realms: A list of realms the resource is protected under.
                       This will be supplied to the ``validate_realms``
                       method of the request validator.
        :returns: A tuple of 2 elements.
                  1. True if valid, False otherwise.
                  2. An oauthlib.common.Request object.
        u
oauthlib.oauth1.rfc5849.endpoints.resource
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This module is an implementation of the resource protection provider logic of
OAuth 1.0 RFC 5849.
a__doc__u/usr/lib/python3/dist-packages/oauthlib/oauth1/rfc5849/endpoints/resource.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importaunicode_literalsaloggingluTaerrorslabaseTaBaseEndpointlaBaseEndpointagetLoggerTuoauthlib.oauth1.rfc5849.endpoints.resourceametaclassa__prepare__aResourceEndpointa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uoauthlib.oauth1.rfc5849.endpoints.resourcea__module__uAn endpoint responsible for protecting resources.

    Typical use is to instantiate with a request validator and invoke the
    ``validate_protected_resource_request`` in a decorator around a view
    function. If the request is valid, invoke and return the response of the
    view. If invalid create and return an error response directly from the
    decorator.

    See :doc:`/oauth1/validator` for details on which validator methods to implement
    for this endpoint.

    An example decorator::

        from functools import wraps
        from your_validator import your_validator
        from oauthlib.oauth1 import ResourceEndpoint
        endpoint = ResourceEndpoint(your_validator)

        def require_oauth(realms=None):
            def decorator(f):
                @wraps(f)
                def wrapper(request, *args, **kwargs):
                    v, r = provider.validate_protected_resource_request(
                            request.url,
                            http_method=request.method,
                            body=request.data,
                            headers=request.headers,
                            realms=realms or [])
                    if v:
                        return f(*args, **kwargs)
                    else:
                        return abort(403)
    a__qualname__TaGETnnnavalidate_protected_resource_requestuResourceEndpoint.validate_protected_resource_requesta__orig_bases__u<module oauthlib.oauth1.rfc5849.endpoints.resource>Ta__class__Taselfauriahttp_methodabodyaheadersarealmsarequestavalid_clientavalid_resource_owneravalid_realmavalid_signaturewv.oauthlib.oauth1.rfc5849.endpoints.signature_only�Aa_create_requestaerrorsaOAuth1ErroralogainfouException caught while validating request, %s.TFna_check_transport_securitya_check_mandatory_parametersarequest_validatoravalidate_timestamp_and_nonceaclient_keyatimestampanonceadebugTu[Failure] verification failed: timestamp/nonceavalidate_client_keyadummy_clienta_check_signatureavalidator_logaclientasignatureTu[Failure] request verification failed.uValid client: %suValid signature: %suValidate a signed OAuth request.

        :param uri: The full URI of the token request.
        :param http_method: A valid HTTP verb, i.e. GET, POST, PUT, HEAD, etc.
        :param body: The request body as a string.
        :param headers: The request headers as a dict.
        :returns: A tuple of 2 elements.
                  1. True if valid, False otherwise.
                  2. An oauthlib.common.Request object.
        u
oauthlib.oauth1.rfc5849.endpoints.signature_only
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This module is an implementation of the signing logic of OAuth 1.0 RFC 5849.
a__doc__u/usr/lib/python3/dist-packages/oauthlib/oauth1/rfc5849/endpoints/signature_only.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importaunicode_literalsaloggingluTaerrorslabaseTaBaseEndpointlaBaseEndpointagetLoggerTuoauthlib.oauth1.rfc5849.endpoints.signature_onlyametaclassa__prepare__aSignatureOnlyEndpointa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uoauthlib.oauth1.rfc5849.endpoints.signature_onlya__module__uAn endpoint only responsible for verifying an oauth signature.a__qualname__TaGETnnavalidate_requestuSignatureOnlyEndpoint.validate_requesta__orig_bases__u<module oauthlib.oauth1.rfc5849.endpoints.signature_only>Ta__class__T
aselfauriahttp_methodabodyaheadersarequestaerravalid_clientavalid_signaturewv.oauthlib.oauth1.rfc5849.errors�?adescriptionaselfu(%s) %saerrorw aOAuth1Errora__init__auriastatus_codeu
        description:    A human-readable ASCII [USASCII] text providing
                        additional information, used to assist the client
                        developer in understanding the error that occurred.
                        Values for the "error_description" parameter MUST NOT
                        include characters outside the set
                        x20-21 / x23-5B / x5D-7E.

        uri:    A URI identifying a human-readable web page with information
                about the error, used to provide the client developer with
                additional information about the error.  Values for the
                "error_uri" parameter MUST conform to the URI- Reference
                syntax, and thus MUST NOT include characters outside the set
                x21 / x23-5B / x5D-7E.

        state:  A CSRF protection value received from the client.

        request:  Oauthlib Request object
        aadd_params_to_uriatwotuplesaappendaerror_descriptionaerror_uriaurlencodeu
oauthlib.oauth1.rfc5849.errors
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Error used both by OAuth 1 clients and provicers to represent the spec
defined error responses for all four core grant types.
a__doc__u/usr/lib/python3/dist-packages/oauthlib/oauth1/rfc5849/errors.pya__file__a__spec__aoriginahas_locationa__cached__aunicode_literalsuoauthlib.commonTaadd_params_to_uriaurlencodelTEExceptionametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uoauthlib.oauth1.rfc5849.errorsa__module__a__qualname__uTnnl�nuOAuth1Error.__init__ain_uriuOAuth1Error.in_uriapropertyuOAuth1Error.twotuplesaurlencodeduOAuth1Error.urlencodeda__orig_bases__aInsecureTransportErrorainsecure_transport_protocoluOnly HTTPS connections are permitted.aInvalidSignatureMethodErrorainvalid_signature_methodaInvalidRequestErrorainvalid_requestaInvalidClientErrorainvalid_clientu<module oauthlib.oauth1.rfc5849.errors>Ta__class__Taselfadescriptionauriastatus_codearequestamessagea__class__TaselfauriTaselfaerrorTaself.oauthlib.oauth1.rfc5849.parameters�
8utoo many values to unpack (expected 2)autilsaescapeu{0}="{1}"aauthorization_header_parameters_partsaappendu, urealm="%s", uOAuth %saAuthorizationu**Prepare the Authorization header.**
    Per `section 3.5.1`_ of the spec.

    Protocol parameters can be transmitted using the HTTP "Authorization"
    header field as defined by `RFC2617`_ with the auth-scheme name set to
    "OAuth" (case insensitive).

    For example::

        Authorization: OAuth realm="Example",
            oauth_consumer_key="0685bd9184jfhq22",
            oauth_token="ad180jjd733klru7",
            oauth_signature_method="HMAC-SHA1",
            oauth_signature="wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D",
            oauth_timestamp="137131200",
            oauth_nonce="4572616e48616d6d65724c61686176",
            oauth_version="1.0"


    .. _`section 3.5.1`: https://tools.ietf.org/html/rfc5849#section-3.5.1
    .. _`RFC2617`: https://tools.ietf.org/html/rfc2617
    aextendasortu<lambda>u_append_params.<locals>.<lambda>TakeyuAppend OAuth params to an existing set of parameters.

    Both params and oauth_params is must be lists of 2-tuples.

    Per `section 3.5.2`_ and `3.5.3`_ of the spec.

    .. _`section 3.5.2`: https://tools.ietf.org/html/rfc5849#section-3.5.2
    .. _`3.5.3`: https://tools.ietf.org/html/rfc5849#section-3.5.3

    lastartswithTaoauth_a_append_paramsuPrepare the Form-Encoded Body.

    Per `section 3.5.2`_ of the spec.

    .. _`section 3.5.2`: https://tools.ietf.org/html/rfc5849#section-3.5.2

    aurlparseutoo many values to unpack (expected 6)aurlencodeaextract_paramsaurlunparseuPrepare the Request URI Query.

    Per `section 3.5.3`_ of the spec.

    .. _`section 3.5.3`: https://tools.ietf.org/html/rfc5849#section-3.5.3

    u
oauthlib.parameters
~~~~~~~~~~~~~~~~~~~

This module contains methods related to `section 3.5`_ of the OAuth 1.0a spec.

.. _`section 3.5`: https://tools.ietf.org/html/rfc5849#section-3.5
a__doc__u/usr/lib/python3/dist-packages/oauthlib/oauth1/rfc5849/parameters.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importaunicode_literalsuoauthlib.commonTaextract_paramsaurlencodeuTautilslTaurlparseaurlunparseuurllib.parseafilter_paramsTnnaprepare_headersaprepare_form_encoded_bodyaprepare_request_uri_queryTwiu<module oauthlib.oauth1.rfc5849.parameters>Taoauth_paramsaparamsamergedTaoauth_paramsabodyTaoauth_paramsaheadersarealmaauthorization_header_parameters_partsaoauth_parameter_nameavalueaescaped_nameaescaped_valueapartaauthorization_header_parametersaauthorization_headerafull_headersTaoauth_paramsauriaschanetapathaparaqueryafra.oauthlib.oauth1.rfc5849.request_validator<t�aSIGNATURE_METHODSautilsaUNICODE_ASCII_CHARACTER_SETaclient_key_lengthutoo many values to unpack (expected 2)asafe_charactersuCheck that the client key only contains safe characters
        and is no shorter than lower and no longer than upper.
        arequest_token_lengthuChecks that the request token contains only safe characters
        and is no shorter than lower and no longer than upper.
        aaccess_token_lengthuChecks that the token contains only safe characters
        and is no shorter than lower and no longer than upper.
        anonce_lengthuChecks that the nonce only contains only safe characters
        and is no shorter than lower and no longer than upper.
        averifier_lengthuChecks that the verifier contains only safe characters
        and is no shorter than lower and no longer than upper.
        uCheck that the realm is one of a set allowed realms.aselfarealmsu<genexpr>uRequestValidator.check_realms.<locals>.<genexpr>uMissing function implementation in {}: {}u
        Returns a NotImplementedError for a function that should be implemented.
        :param fn: name of the function
        a_subclass_must_implementTadummy_clientuDummy client used when an invalid client key is supplied.

        :returns: The dummy client key string.

        The dummy client should be associated with either a client secret,
        a rsa key or both depending on which signature methods are supported.
        Providers should make sure that

        get_client_secret(dummy_client)
        get_rsa_key(dummy_client)

        return a valid secret or key for the dummy client.

        This method is used by

        * AccessTokenEndpoint
        * RequestTokenEndpoint
        * ResourceEndpoint
        * SignatureOnlyEndpoint
        Tadummy_request_tokenuDummy request token used when an invalid token was supplied.

        :returns: The dummy request token string.

        The dummy request token should be associated with a request token
        secret such that get_request_token_secret(.., dummy_request_token)
        returns a valid secret.

        This method is used by

        * AccessTokenEndpoint
        Tadummy_access_tokenuDummy access token used when an invalid token was supplied.

        :returns: The dummy access token string.

        The dummy access token should be associated with an access token
        secret such that get_access_token_secret(.., dummy_access_token)
        returns a valid secret.

        This method is used by

        * ResourceEndpoint
        Taget_client_secretuRetrieves the client secret associated with the client key.

        :param client_key: The client/consumer key.
        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :returns: The client secret as a string.

        This method must allow the use of a dummy client_key value.
        Fetching the secret using the dummy key must take the same amount of
        time as fetching a secret for a valid client::

            # Unlikely to be near constant time as it uses two database
            # lookups for a valid client, and only one for an invalid.
            from your_datastore import ClientSecret
            if ClientSecret.has(client_key):
                return ClientSecret.get(client_key)
            else:
                return 'dummy'

            # Aim to mimic number of latency inducing operations no matter
            # whether the client is valid or not.
            from your_datastore import ClientSecret
            return ClientSecret.get(client_key, 'dummy')

        Note that the returned key must be in plaintext.

        This method is used by

        * AccessTokenEndpoint
        * RequestTokenEndpoint
        * ResourceEndpoint
        * SignatureOnlyEndpoint
        Taget_request_token_secretuRetrieves the shared secret associated with the request token.

        :param client_key: The client/consumer key.
        :param token: The request token string.
        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :returns: The token secret as a string.

        This method must allow the use of a dummy values and the running time
        must be roughly equivalent to that of the running time of valid values::

            # Unlikely to be near constant time as it uses two database
            # lookups for a valid client, and only one for an invalid.
            from your_datastore import RequestTokenSecret
            if RequestTokenSecret.has(client_key):
                return RequestTokenSecret.get((client_key, request_token))
            else:
                return 'dummy'

            # Aim to mimic number of latency inducing operations no matter
            # whether the client is valid or not.
            from your_datastore import RequestTokenSecret
            return ClientSecret.get((client_key, request_token), 'dummy')

        Note that the returned key must be in plaintext.

        This method is used by

        * AccessTokenEndpoint
        Taget_access_token_secretuRetrieves the shared secret associated with the access token.

        :param client_key: The client/consumer key.
        :param token: The access token string.
        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :returns: The token secret as a string.

        This method must allow the use of a dummy values and the running time
        must be roughly equivalent to that of the running time of valid values::

            # Unlikely to be near constant time as it uses two database
            # lookups for a valid client, and only one for an invalid.
            from your_datastore import AccessTokenSecret
            if AccessTokenSecret.has(client_key):
                return AccessTokenSecret.get((client_key, request_token))
            else:
                return 'dummy'

            # Aim to mimic number of latency inducing operations no matter
            # whether the client is valid or not.
            from your_datastore import AccessTokenSecret
            return ClientSecret.get((client_key, request_token), 'dummy')

        Note that the returned key must be in plaintext.

        This method is used by

        * ResourceEndpoint
        Taget_default_realmsuGet the default realms for a client.

        :param client_key: The client/consumer key.
        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :returns: The list of default realms associated with the client.

        The list of default realms will be set during client registration and
        is outside the scope of OAuthLib.

        This method is used by

        * RequestTokenEndpoint
        Taget_realmsuGet realms associated with a request token.

        :param token: The request token string.
        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :returns: The list of realms associated with the request token.

        This method is used by

        * AuthorizationEndpoint
        * AccessTokenEndpoint
        Taget_redirect_uriuGet the redirect URI associated with a request token.

        :param token: The request token string.
        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :returns: The redirect URI associated with the request token.

        It may be desirable to return a custom URI if the redirect is set to "oob".
        In this case, the user will be redirected to the returned URI and at that
        endpoint the verifier can be displayed.

        This method is used by

        * AuthorizationEndpoint
        Taget_rsa_keyuRetrieves a previously stored client provided RSA key.

        :param client_key: The client/consumer key.
        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :returns: The rsa public key as a string.

        This method must allow the use of a dummy client_key value. Fetching
        the rsa key using the dummy key must take the same amount of time
        as fetching a key for a valid client. The dummy key must also be of
        the same bit length as client keys.

        Note that the key must be returned in plaintext.

        This method is used by

        * AccessTokenEndpoint
        * RequestTokenEndpoint
        * ResourceEndpoint
        * SignatureOnlyEndpoint
        Tainvalidate_request_tokenuInvalidates a used request token.

        :param client_key: The client/consumer key.
        :param request_token: The request token string.
        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :returns: None

        Per `Section 2.3`__ of the spec:

        "The server MUST (...) ensure that the temporary
        credentials have not expired or been used before."

        .. _`Section 2.3`: https://tools.ietf.org/html/rfc5849#section-2.3

        This method should ensure that provided token won't validate anymore.
        It can be simply removing RequestToken from storage or setting
        specific flag that makes it invalid (note that such flag should be
        also validated during request token validation).

        This method is used by

        * AccessTokenEndpoint
        Tavalidate_client_keyuValidates that supplied client key is a registered and valid client.

        :param client_key: The client/consumer key.
        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :returns: True or False

        Note that if the dummy client is supplied it should validate in same
        or nearly the same amount of time as a valid one.

        Ensure latency inducing tasks are mimiced even for dummy clients.
        For example, use::

            from your_datastore import Client
            try:
                return Client.exists(client_key, access_token)
            except DoesNotExist:
                return False

        Rather than::

            from your_datastore import Client
            if access_token == self.dummy_access_token:
                return False
            else:
                return Client.exists(client_key, access_token)

        This method is used by

        * AccessTokenEndpoint
        * RequestTokenEndpoint
        * ResourceEndpoint
        * SignatureOnlyEndpoint
        Tavalidate_request_tokenuValidates that supplied request token is registered and valid.

        :param client_key: The client/consumer key.
        :param token: The request token string.
        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :returns: True or False

        Note that if the dummy request_token is supplied it should validate in
        the same nearly the same amount of time as a valid one.

        Ensure latency inducing tasks are mimiced even for dummy clients.
        For example, use::

            from your_datastore import RequestToken
            try:
                return RequestToken.exists(client_key, access_token)
            except DoesNotExist:
                return False

        Rather than::

            from your_datastore import RequestToken
            if access_token == self.dummy_access_token:
                return False
            else:
                return RequestToken.exists(client_key, access_token)

        This method is used by

        * AccessTokenEndpoint
        Tavalidate_access_tokenuValidates that supplied access token is registered and valid.

        :param client_key: The client/consumer key.
        :param token: The access token string.
        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :returns: True or False

        Note that if the dummy access token is supplied it should validate in
        the same or nearly the same amount of time as a valid one.

        Ensure latency inducing tasks are mimiced even for dummy clients.
        For example, use::

            from your_datastore import AccessToken
            try:
                return AccessToken.exists(client_key, access_token)
            except DoesNotExist:
                return False

        Rather than::

            from your_datastore import AccessToken
            if access_token == self.dummy_access_token:
                return False
            else:
                return AccessToken.exists(client_key, access_token)

        This method is used by

        * ResourceEndpoint
        Tavalidate_timestamp_and_nonceuValidates that the nonce has not been used before.

        :param client_key: The client/consumer key.
        :param timestamp: The ``oauth_timestamp`` parameter.
        :param nonce: The ``oauth_nonce`` parameter.
        :param request_token: Request token string, if any.
        :param access_token: Access token string, if any.
        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :returns: True or False

        Per `Section 3.3`_ of the spec.

        "A nonce is a random string, uniquely generated by the client to allow
        the server to verify that a request has never been made before and
        helps prevent replay attacks when requests are made over a non-secure
        channel.  The nonce value MUST be unique across all requests with the
        same timestamp, client credentials, and token combinations."

        .. _`Section 3.3`: https://tools.ietf.org/html/rfc5849#section-3.3

        One of the first validation checks that will be made is for the validity
        of the nonce and timestamp, which are associated with a client key and
        possibly a token. If invalid then immediately fail the request
        by returning False. If the nonce/timestamp pair has been used before and
        you may just have detected a replay attack. Therefore it is an essential
        part of OAuth security that you not allow nonce/timestamp reuse.
        Note that this validation check is done before checking the validity of
        the client and token.::

           nonces_and_timestamps_database = [
              (u'foo', 1234567890, u'rannoMstrInghere', u'bar')
           ]

           def validate_timestamp_and_nonce(self, client_key, timestamp, nonce,
              request_token=None, access_token=None):

              return ((client_key, timestamp, nonce, request_token or access_token)
                       not in self.nonces_and_timestamps_database)

        This method is used by

        * AccessTokenEndpoint
        * RequestTokenEndpoint
        * ResourceEndpoint
        * SignatureOnlyEndpoint
        Tavalidate_redirect_uriuValidates the client supplied redirection URI.

        :param client_key: The client/consumer key.
        :param redirect_uri: The URI the client which to redirect back to after
                             authorization is successful.
        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :returns: True or False

        It is highly recommended that OAuth providers require their clients
        to register all redirection URIs prior to using them in requests and
        register them as absolute URIs. See `CWE-601`_ for more information
        about open redirection attacks.

        By requiring registration of all redirection URIs it should be
        straightforward for the provider to verify whether the supplied
        redirect_uri is valid or not.

        Alternatively per `Section 2.1`_ of the spec:

        "If the client is unable to receive callbacks or a callback URI has
        been established via other means, the parameter value MUST be set to
        "oob" (case sensitive), to indicate an out-of-band configuration."

        .. _`CWE-601`: http://cwe.mitre.org/top25/index.html#CWE-601
        .. _`Section 2.1`: https://tools.ietf.org/html/rfc5849#section-2.1

        This method is used by

        * RequestTokenEndpoint
        Tavalidate_requested_realmsuValidates that the client may request access to the realm.

        :param client_key: The client/consumer key.
        :param realms: The list of realms that client is requesting access to.
        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :returns: True or False

        This method is invoked when obtaining a request token and should
        tie a realm to the request token and after user authorization
        this realm restriction should transfer to the access token.

        This method is used by

        * RequestTokenEndpoint
        Tavalidate_realmsuValidates access to the request realm.

        :param client_key: The client/consumer key.
        :param token: A request token string.
        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :param uri: The URI the realms is protecting.
        :param realms: A list of realms that must have been granted to
                       the access token.
        :returns: True or False

        How providers choose to use the realm parameter is outside the OAuth
        specification but it is commonly used to restrict access to a subset
        of protected resources such as "photos".

        realms is a convenience parameter which can be used to provide
        a per view method pre-defined list of allowed realms.

        Can be as simple as::

            from your_datastore import RequestToken
            request_token = RequestToken.get(token, None)

            if not request_token:
                return False
            return set(request_token.realms).issuperset(set(realms))

        This method is used by

        * ResourceEndpoint
        Tavalidate_verifieruValidates a verification code.

        :param client_key: The client/consumer key.
        :param token: A request token string.
        :param verifier: The authorization verifier string.
        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :returns: True or False

        OAuth providers issue a verification code to clients after the
        resource owner authorizes access. This code is used by the client to
        obtain token credentials and the provider must verify that the
        verifier is valid and associated with the client as well as the
        resource owner.

        Verifier validation should be done in near constant time
        (to avoid verifier enumeration). To achieve this we need a
        constant time string comparison which is provided by OAuthLib
        in ``oauthlib.common.safe_string_equals``::

            from your_datastore import Verifier
            correct_verifier = Verifier.get(client_key, request_token)
            from oauthlib.common import safe_string_equals
            return safe_string_equals(verifier, correct_verifier)

        This method is used by

        * AccessTokenEndpoint
        Taverify_request_tokenuVerify that the given OAuth1 request token is valid.

        :param token: A request token string.
        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :returns: True or False

        This method is used only in AuthorizationEndpoint to check whether the
        oauth_token given in the authorization URL is valid or not.
        This request is not signed and thus similar ``validate_request_token``
        method can not be used.

        This method is used by

        * AuthorizationEndpoint
        Taverify_realmsuVerify authorized realms to see if they match those given to token.

        :param token: An access token string.
        :param realms: A list of realms the client attempts to access.
        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :returns: True or False

        This prevents the list of authorized realms sent by the client during
        the authorization step to be altered to include realms outside what
        was bound with the request token.

        Can be as simple as::

            valid_realms = self.get_realms(token)
            return all((r in valid_realms for r in realms))

        This method is used by

        * AuthorizationEndpoint
        Tasave_access_tokenuSave an OAuth1 access token.

        :param token: A dict with token credentials.
        :param request: OAuthlib request.
        :type request: oauthlib.common.Request

        The token dictionary will at minimum include

        * ``oauth_token`` the access token string.
        * ``oauth_token_secret`` the token specific secret used in signing.
        * ``oauth_authorized_realms`` a space separated list of realms.

        Client key can be obtained from ``request.client_key``.

        The list of realms (not joined string) can be obtained from
        ``request.realm``.

        This method is used by

        * AccessTokenEndpoint
        Tasave_request_tokenuSave an OAuth1 request token.

        :param token: A dict with token credentials.
        :param request: OAuthlib request.
        :type request: oauthlib.common.Request

        The token dictionary will at minimum include

        * ``oauth_token`` the request token string.
        * ``oauth_token_secret`` the token specific secret used in signing.
        * ``oauth_callback_confirmed`` the string ``true``.

        Client key can be obtained from ``request.client_key``.

        This method is used by

        * RequestTokenEndpoint
        Tasave_verifieruAssociate an authorization verifier with a request token.

        :param token: A request token string.
        :param verifier A dictionary containing the oauth_verifier and
                        oauth_token
        :param request: OAuthlib request.
        :type request: oauthlib.common.Request

        We need to associate verifiers with tokens for validation during the
        access token request.

        Note that unlike save_x_token token here is the ``oauth_token`` token
        string from the request token saved previously.

        This method is used by

        * AuthorizationEndpoint
        u
oauthlib.oauth1.rfc5849
~~~~~~~~~~~~~~

This module is an implementation of various logic needed
for signing and checking OAuth 1.0 RFC 5849 requests.
a__doc__u/usr/lib/python3/dist-packages/oauthlib/oauth1/rfc5849/request_validator.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importaunicode_literalsasysuTaSIGNATURE_METHODSautilsllTOobjectametaclassa__prepare__aRequestValidatora__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uoauthlib.oauth1.rfc5849.request_validatora__module__uA validator/datastore interaction base class for OAuth 1 providers.

    OAuth providers should inherit from RequestValidator and implement the
    methods and properties outlined below. Further details are provided in the
    documentation for each method and property.

    Methods used to check the format of input parameters. Common tests include
    length, character set, membership, range or pattern. These tests are
    referred to as `whitelisting or blacklisting`_. Whitelisting is better
    but blacklisting can be usefull to spot malicious activity.
    The following have methods a default implementation:

    - check_client_key
    - check_request_token
    - check_access_token
    - check_nonce
    - check_verifier
    - check_realms

    The methods above default to whitelist input parameters, checking that they
    are alphanumerical and between a minimum and maximum length. Rather than
    overloading the methods a few properties can be used to configure these
    methods.

    * @safe_characters -> (character set)
    * @client_key_length -> (min, max)
    * @request_token_length -> (min, max)
    * @access_token_length -> (min, max)
    * @nonce_length -> (min, max)
    * @verifier_length -> (min, max)
    * @realms -> [list, of, realms]

    Methods used to validate/invalidate input parameters. These checks usually
    hit either persistent or temporary storage such as databases or the
    filesystem. See each methods documentation for detailed usage.
    The following methods must be implemented:

    - validate_client_key
    - validate_request_token
    - validate_access_token
    - validate_timestamp_and_nonce
    - validate_redirect_uri
    - validate_requested_realms
    - validate_realms
    - validate_verifier
    - invalidate_request_token

    Methods used to retrieve sensitive information from storage.
    The following methods must be implemented:

    - get_client_secret
    - get_request_token_secret
    - get_access_token_secret
    - get_rsa_key
    - get_realms
    - get_default_realms
    - get_redirect_uri

    Methods used to save credentials.
    The following methods must be implemented:

    - save_request_token
    - save_verifier
    - save_access_token

    Methods used to verify input parameters. This methods are used during
    authorizing request token by user (AuthorizationEndpoint), to check if
    parameters are valid. During token authorization request is not signed,
    thus 'validation' methods can not be used. The following methods must be
    implemented:

    - verify_realms
    - verify_request_token

    To prevent timing attacks it is necessary to not exit early even if the
    client key or resource owner key is invalid. Instead dummy values should
    be used during the remaining verification process. It is very important
    that the dummy client and token are valid input parameters to the methods
    get_client_secret, get_rsa_key and get_(access/request)_token_secret and
    that the running time of those methods when given a dummy value remain
    equivalent to the running time when given a valid client/resource owner.
    The following properties must be implemented:

    * @dummy_client
    * @dummy_request_token
    * @dummy_access_token

    Example implementations have been provided, note that the database used is
    a simple dictionary and serves only an illustrative purpose. Use whichever
    database suits your project and how to access it is entirely up to you.
    The methods are introduced in an order which should make understanding
    their use more straightforward and as such it could be worth reading what
    follows in chronological order.

    .. _`whitelisting or blacklisting`: https://www.schneier.com/blog/archives/2011/01/whitelisting_vs.html
    a__qualname__a__init__uRequestValidator.__init__apropertyaallowed_signature_methodsuRequestValidator.allowed_signature_methodsuRequestValidator.safe_charactersTlluRequestValidator.client_key_lengthuRequestValidator.request_token_lengthuRequestValidator.access_token_lengthlXatimestamp_lifetimeuRequestValidator.timestamp_lifetimeuRequestValidator.nonce_lengthuRequestValidator.verifier_lengthuRequestValidator.realmsaenforce_ssluRequestValidator.enforce_sslacheck_client_keyuRequestValidator.check_client_keyacheck_request_tokenuRequestValidator.check_request_tokenacheck_access_tokenuRequestValidator.check_access_tokenacheck_nonceuRequestValidator.check_nonceacheck_verifieruRequestValidator.check_verifieracheck_realmsuRequestValidator.check_realmsuRequestValidator._subclass_must_implementadummy_clientuRequestValidator.dummy_clientadummy_request_tokenuRequestValidator.dummy_request_tokenadummy_access_tokenuRequestValidator.dummy_access_tokenaget_client_secretuRequestValidator.get_client_secretaget_request_token_secretuRequestValidator.get_request_token_secretaget_access_token_secretuRequestValidator.get_access_token_secretaget_default_realmsuRequestValidator.get_default_realmsaget_realmsuRequestValidator.get_realmsaget_redirect_uriuRequestValidator.get_redirect_uriaget_rsa_keyuRequestValidator.get_rsa_keyainvalidate_request_tokenuRequestValidator.invalidate_request_tokenavalidate_client_keyuRequestValidator.validate_client_keyavalidate_request_tokenuRequestValidator.validate_request_tokenavalidate_access_tokenuRequestValidator.validate_access_tokenTnnavalidate_timestamp_and_nonceuRequestValidator.validate_timestamp_and_nonceavalidate_redirect_uriuRequestValidator.validate_redirect_uriavalidate_requested_realmsuRequestValidator.validate_requested_realmsavalidate_realmsuRequestValidator.validate_realmsavalidate_verifieruRequestValidator.validate_verifieraverify_request_tokenuRequestValidator.verify_request_tokenaverify_realmsuRequestValidator.verify_realmsasave_access_tokenuRequestValidator.save_access_tokenasave_request_tokenuRequestValidator.save_request_tokenasave_verifieruRequestValidator.save_verifiera__orig_bases__Ta.0wraselfu<module oauthlib.oauth1.rfc5849.request_validator>Ta__class__TaselfTaselfafnwmTaselfarequest_tokenaloweraupperTaselfaclient_keyaloweraupperTaselfanoncealoweraupperTaselfarealmsTaselfaverifieraloweraupperTaselfaclient_keyatokenarequestTaselfaclient_keyarequestTaselfatokenarequestTaselfaclient_keyarequest_tokenarequestTaselfatokenaverifierarequestTaselfaclient_keyatokenarequestauriarealmsTaselfaclient_keyaredirect_uriarequestTaselfaclient_keyarealmsarequestTaselfaclient_keyatimestampanoncearequestarequest_tokenaaccess_tokenTaselfaclient_keyatokenaverifierarequestTaselfatokenarealmsarequest.oauthlib.oauth1.rfc5849.signature�6�autilsaescapeaupperw&u**Construct the signature base string.**
    Per `section 3.4.1.1`_ of the spec.

    For example, the HTTP request::

        POST /request?b5=%3D%253D&a3=a&c%40=&a2=r%20b HTTP/1.1
        Host: example.com
        Content-Type: application/x-www-form-urlencoded
        Authorization: OAuth realm="Example",
            oauth_consumer_key="9djdj82h48djs9d2",
            oauth_token="kkk9d7dh3k39sjv7",
            oauth_signature_method="HMAC-SHA1",
            oauth_timestamp="137131201",
            oauth_nonce="7d8f3e4a",
            oauth_signature="bYT5CMsGcbgUdFHObYMEfcx6bsw%3D"

        c2&a3=2+q

    is represented by the following signature base string (line breaks
    are for display purposes only)::

        POST&http%3A%2F%2Fexample.com%2Frequest&a2%3Dr%2520b%26a3%3D2%2520q
        %26a3%3Da%26b5%3D%253D%25253D%26c%2540%3D%26c2%3D%26oauth_consumer_
        key%3D9djdj82h48djs9d2%26oauth_nonce%3D7d8f3e4a%26oauth_signature_m
        ethod%3DHMAC-SHA1%26oauth_timestamp%3D137131201%26oauth_token%3Dkkk
        9d7dh3k39sjv7

    .. _`section 3.4.1.1`: https://tools.ietf.org/html/rfc5849#section-3.4.1.1
    aunicode_typeuuri must be a unicode object.aurlparseutoo many values to unpack (expected 6)uuri must include a scheme and netlocw/alowerw:asplitTw:lutoo many values to unpack (expected 2)TTahttpu80Tahttpsu443aurlunparseanetlocuareplaceTw u%20u**Base String URI**
    Per `section 3.4.1.2`_ of RFC 5849.

    For example, the HTTP request::

        GET /r%20v/X?id=123 HTTP/1.1
        Host: EXAMPLE.COM:80

    is represented by the base string URI: "http://example.com/r%20v/X".

    In another example, the HTTPS request::

        GET /?q=1 HTTP/1.1
        Host: www.example.net:8080

    is represented by the base string URI: "https://www.example.net:8080/".

    .. _`section 3.4.1.2`: https://tools.ietf.org/html/rfc5849#section-3.4.1.2

    The host argument overrides the netloc part of the uri argument.
    aextendaurldecodeaitemsaauthorizationaparamsaparse_authorization_headerlarealmaextract_paramsastartswithTaoauth_aunescapeaunescaped_paramsaappendu<lambda>ucollect_parameters.<locals>.<lambda>u**Parameter Sources**

    Parameters starting with `oauth_` will be unescaped.

    Body parameters must be supplied as a dict, a list of 2-tuples, or a
    formencoded query string.

    Headers must be supplied as a dict.

    Per `section 3.4.1.3.1`_ of the spec.

    For example, the HTTP request::

        POST /request?b5=%3D%253D&a3=a&c%40=&a2=r%20b HTTP/1.1
        Host: example.com
        Content-Type: application/x-www-form-urlencoded
        Authorization: OAuth realm="Example",
            oauth_consumer_key="9djdj82h48djs9d2",
            oauth_token="kkk9d7dh3k39sjv7",
            oauth_signature_method="HMAC-SHA1",
            oauth_timestamp="137131201",
            oauth_nonce="7d8f3e4a",
            oauth_signature="djosJKDKJSD8743243%2Fjdk33klY%3D"

        c2&a3=2+q

    contains the following (fully decoded) parameters used in the
    signature base sting::

        +------------------------+------------------+
        |          Name          |       Value      |
        +------------------------+------------------+
        |           b5           |       =%3D       |
        |           a3           |         a        |
        |           c@           |                  |
        |           a2           |        r b       |
        |   oauth_consumer_key   | 9djdj82h48djs9d2 |
        |       oauth_token      | kkk9d7dh3k39sjv7 |
        | oauth_signature_method |     HMAC-SHA1    |
        |     oauth_timestamp    |     137131201    |
        |       oauth_nonce      |     7d8f3e4a     |
        |           c2           |                  |
        |           a3           |        2 q       |
        +------------------------+------------------+

    Note that the value of "b5" is "=%3D" and not "==".  Both "c@" and
    "c2" have empty values.  While the encoding rules specified in this
    specification for the purpose of constructing the signature base
    string exclude the use of a "+" character (ASCII code 43) to
    represent an encoded space character (ASCII code 32), this practice
    is widely used in "application/x-www-form-urlencoded" encoded values,
    and MUST be properly decoded, as demonstrated by one of the "a3"
    parameter instances (the "a3" parameter is used twice in this
    request).

    .. _`section 3.4.1.3.1`: https://tools.ietf.org/html/rfc5849#section-3.4.1.3.1
    u<genexpr>ucollect_parameters.<locals>.<genexpr>aoauth_signatureasortu{0}={1}u**Parameters Normalization**
    Per `section 3.4.1.3.2`_ of the spec.

    For example, the list of parameters from the previous section would
    be normalized as follows:

    Encoded::

    +------------------------+------------------+
    |          Name          |       Value      |
    +------------------------+------------------+
    |           b5           |     %3D%253D     |
    |           a3           |         a        |
    |          c%40          |                  |
    |           a2           |       r%20b      |
    |   oauth_consumer_key   | 9djdj82h48djs9d2 |
    |       oauth_token      | kkk9d7dh3k39sjv7 |
    | oauth_signature_method |     HMAC-SHA1    |
    |     oauth_timestamp    |     137131201    |
    |       oauth_nonce      |     7d8f3e4a     |
    |           c2           |                  |
    |           a3           |       2%20q      |
    +------------------------+------------------+

    Sorted::

    +------------------------+------------------+
    |          Name          |       Value      |
    +------------------------+------------------+
    |           a2           |       r%20b      |
    |           a3           |       2%20q      |
    |           a3           |         a        |
    |           b5           |     %3D%253D     |
    |          c%40          |                  |
    |           c2           |                  |
    |   oauth_consumer_key   | 9djdj82h48djs9d2 |
    |       oauth_nonce      |     7d8f3e4a     |
    | oauth_signature_method |     HMAC-SHA1    |
    |     oauth_timestamp    |     137131201    |
    |       oauth_token      | kkk9d7dh3k39sjv7 |
    +------------------------+------------------+

    Concatenated Pairs::

    +-------------------------------------+
    |              Name=Value             |
    +-------------------------------------+
    |               a2=r%20b              |
    |               a3=2%20q              |
    |                 a3=a                |
    |             b5=%3D%253D             |
    |                c%40=                |
    |                 c2=                 |
    | oauth_consumer_key=9djdj82h48djs9d2 |
    |         oauth_nonce=7d8f3e4a        |
    |   oauth_signature_method=HMAC-SHA1  |
    |      oauth_timestamp=137131201      |
    |     oauth_token=kkk9d7dh3k39sjv7    |
    +-------------------------------------+

    and concatenated together into a single string (line breaks are for
    display purposes only)::

        a2=r%20b&a3=2%20q&a3=a&b5=%3D%253D&c%40=&c2=&oauth_consumer_key=9dj
        dj82h48djs9d2&oauth_nonce=7d8f3e4a&oauth_signature_method=HMAC-SHA1
        &oauth_timestamp=137131201&oauth_token=kkk9d7dh3k39sjv7

    .. _`section 3.4.1.3.2`: https://tools.ietf.org/html/rfc5849#section-3.4.1.3.2
    asign_hmac_sha1aclient_secretaresource_owner_secretaencodeTuutf-8ahmacanewahashlibasha1abinasciiab2a_base64adigest:nl��������nadecodeu**HMAC-SHA1**

    The "HMAC-SHA1" signature method uses the HMAC-SHA1 signature
    algorithm as defined in `RFC2104`_::

        digest = HMAC-SHA1 (key, text)

    Per `section 3.4.2`_ of the spec.

    .. _`RFC2104`: https://tools.ietf.org/html/rfc2104
    .. _`section 3.4.2`: https://tools.ietf.org/html/rfc5849#section-3.4.2
    asign_hmac_sha256asha256u**HMAC-SHA256**

    The "HMAC-SHA256" signature method uses the HMAC-SHA256 signature
    algorithm as defined in `RFC4634`_::

        digest = HMAC-SHA256 (key, text)

    Per `section 3.4.2`_ of the spec.

    .. _`RFC4634`: https://tools.ietf.org/html/rfc4634
    .. _`section 3.4.2`: https://tools.ietf.org/html/rfc5849#section-3.4.2
    a_jwtrs1ujwt.algorithmsaalgorithmsaRSAAlgorithmahashesaSHA1a_jwt_rs1_signing_algorithma_prepare_key_plusasignu**RSA-SHA1**

    Per `section 3.4.3`_ of the spec.

    The "RSA-SHA1" signature method uses the RSASSA-PKCS1-v1_5 signature
    algorithm as defined in `RFC3447, Section 8.2`_ (also known as
    PKCS#1), using SHA-1 as the hash function for EMSA-PKCS1-v1_5.  To
    use this method, the client MUST have established client credentials
    with the server that included its RSA public key (in a manner that is
    beyond the scope of this specification).

    .. _`section 3.4.3`: https://tools.ietf.org/html/rfc5849#section-3.4.3
    .. _`RFC3447, Section 8.2`: https://tools.ietf.org/html/rfc3447#section-8.2

    arsa_keyursa_key is required when using RSA signature method.asign_rsa_sha1uSign a request using plaintext.

    Per `section 3.4.4`_ of the spec.

    The "PLAINTEXT" method does not employ a signature algorithm.  It
    MUST be used with a transport-layer mechanism such as TLS or SSL (or
    sent over a secure channel with equivalent protections).  It does not
    utilize the signature base string or the "oauth_timestamp" and
    "oauth_nonce" parameters.

    .. _`section 3.4.4`: https://tools.ietf.org/html/rfc5849#section-3.4.4

    asign_plaintextanormalize_parametersabase_string_uriauriasignature_base_stringahttp_methodasafe_string_equalsasignaturealogadebuguVerify HMAC-SHA1 failed: signature base string: %suVerify a HMAC-SHA1 signature.

    Per `section 3.4`_ of the spec.

    .. _`section 3.4`: https://tools.ietf.org/html/rfc5849#section-3.4

    To satisfy `RFC2616 section 5.2`_ item 1, the request argument's uri
    attribute MUST be an absolute URI whose netloc part identifies the
    origin server or gateway on which the resource resides. Any Host
    item of the request argument's headers dict attribute will be
    ignored.

    .. _`RFC2616 section 5.2`: https://tools.ietf.org/html/rfc2616#section-5.2

    uVerify HMAC-SHA256 failed: signature base string: %suVerify a HMAC-SHA256 signature.

    Per `section 3.4`_ of the spec.

    .. _`section 3.4`: https://tools.ietf.org/html/rfc5849#section-3.4

    To satisfy `RFC2616 section 5.2`_ item 1, the request argument's uri
    attribute MUST be an absolute URI whose netloc part identifies the
    origin server or gateway on which the resource resides. Any Host
    item of the request argument's headers dict attribute will be
    ignored.

    .. _`RFC2616 section 5.2`: https://tools.ietf.org/html/rfc2616#section-5.2

    aprepare_keyaa2b_base64averifyuVerify RSA-SHA1 failed: signature base string: %suVerify a RSASSA-PKCS #1 v1.5 base64 encoded signature.

    Per `section 3.4.3`_ of the spec.

    Note this method requires the jwt and cryptography libraries.

    .. _`section 3.4.3`: https://tools.ietf.org/html/rfc5849#section-3.4.3

    To satisfy `RFC2616 section 5.2`_ item 1, the request argument's uri
    attribute MUST be an absolute URI whose netloc part identifies the
    origin server or gateway on which the resource resides. Any Host
    item of the request argument's headers dict attribute will be
    ignored.

    .. _`RFC2616 section 5.2`: https://tools.ietf.org/html/rfc2616#section-5.2
    TuVerify PLAINTEXT faileduVerify a PLAINTEXT signature.

    Per `section 3.4`_ of the spec.

    .. _`section 3.4`: https://tools.ietf.org/html/rfc5849#section-3.4
    u
oauthlib.oauth1.rfc5849.signature
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This module represents a direct implementation of `section 3.4`_ of the spec.

Terminology:
 * Client: software interfacing with an OAuth API
 * Server: the API provider
 * Resource Owner: the user who is granting authorization to the client

Steps for signing a request:

1. Collect parameters from the uri query, auth header, & body
2. Normalize those parameters
3. Normalize the uri
4. Pass the normalized uri, normalized parameters, and http method to
   construct the base string
5. Pass the base string and any keys needed to a signing function

.. _`section 3.4`: https://tools.ietf.org/html/rfc5849#section-3.4
a__doc__u/usr/lib/python3/dist-packages/oauthlib/oauth1/rfc5849/signature.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importaunicode_literalsalogginguoauthlib.commonTaextract_paramsasafe_string_equalsaunicode_typeaurldecodeTautilsluurllib.parseaparseagetLoggerTuoauthlib.oauth1.rfc5849.signatureTnacollect_parametersasign_hmac_sha1_with_clientasign_hmac_sha256_with_clientasign_rsa_sha1_with_clientasign_plaintext_with_clientTnnaverify_hmac_sha1averify_hmac_sha256averify_rsa_sha1averify_plaintextTa.0wkwvTwiu<listcomp>Twiawith_realmTwkwvu<module oauthlib.oauth1.rfc5849.signature>TajwtalgoTaalgakeystrTauriahostaschemeanetlocapathaparamsaqueryafragmentadefault_portsaportwvTauri_queryabodyaheadersaexclude_oauth_signatureawith_realmaparamsaheaders_loweraauthorization_headerabodyparamsaunescaped_paramswkwvTaparamsakey_valuesaparameter_partsTabase_stringaclient_secretaresource_owner_secretatextakeyakey_utf8atext_utf8asignatureTabase_stringaclientTaclient_secretaresource_owner_secretasignatureTabase_stringarsa_private_keyaalgakeywsTahttp_methodabase_str_urianormalized_encoded_request_parametersabase_stringTarequestaclient_secretaresource_owner_secretanorm_paramsabs_uriasig_base_strasignatureamatchTarequestaclient_secretaresource_owner_secretasignatureamatchT	arequestarsa_public_keyanorm_paramsabs_uriasig_base_strasigaalgakeyaverify_ok.oauthlib.oauth1.rfc5849.utils�>awrapperufilter_params.<locals>.wrappera__doc__uDecorator which filters params to remove non-oauth_* parameters

    Assumes the decorated method takes a params dict or list of tuples as its
    first argument.
    afilter_oauth_paramsatargetu<lambda>ufilter_oauth_params.<locals>.<lambda>aitemsuRemoves all non oauth parameters from a dict or a list of params.lastartswithTaoauth_aunicode_typeuOnly unicode objects are escapable. uGot %r of type %s.aquoteDasafed~uEscape a unicode string in an OAuth-compatible fashion.

    Per `section 3.6`_ of the spec.

    .. _`section 3.6`: https://tools.ietf.org/html/rfc5849#section-3.6

    uOnly unicode objects are unescapable.aunquoteaurllib2aparse_keqv_listuA unicode-safe version of urllib2.parse_keqv_listaparse_http_listuA unicode-safe version of urllib2.parse_http_list:nlnalowerTuoauth :lnnTEIndexErrorEValueErroruMalformed authorization headeruParse an OAuth authorization header into a list of 2-tuplesu
oauthlib.utils
~~~~~~~~~~~~~~

This module contains utility methods used by various parts of the OAuth
spec.
u/usr/lib/python3/dist-packages/oauthlib/oauth1/rfc5849/utils.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importaunicode_literalsuoauthlib.commonTaquoteaunicode_typeaunquoteuurllib.requestarequestaabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789aUNICODE_ASCII_CHARACTER_SETafilter_paramsaescapeaunescapeaparse_authorization_headerTakvu<module oauthlib.oauth1.rfc5849.utils>TwuTaparamsais_oauthTatargetawrapperTaauthorization_headeraauth_schemeaitemsTwlTaparamsaargsakwargsatargetTatargetu.pkg_resources-postLoad0aosalistdira_fnamodule_patharba__enter__a__exit__areadTnnna__doc__u/usr/lib/python3/dist-packages/pkg_resources/pkg_resources-postLoad.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importaregister_loader_typelaEggProviderametaclassa__prepare__aNuitkaProvidera__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>upkg_resources-postLoada__module__a__qualname__a_hasuNuitkaProvider._hasa_isdiruNuitkaProvider._isdira_listdiruNuitkaProvider._listdiraget_resource_streamuNuitkaProvider.get_resource_streama_getuNuitkaProvider._geta__orig_bases__a__loader__u<module pkg_resources-postLoad>Ta__class__TaselfapathastreamTaselfapathTaselfamanageraresource_nameu.problem_report�"4agzipvalueanamealegacy_zlibaset_valueuInitialize an empty CompressedValue object with an optional name.aBytesIOagzipaGzipFileawblTamodeafileobjamtimeawriteagetvalueuSet uncompressed value.azlibadecompressTafileobjareaduReturn uncompressed value.agzTlafileuWrite uncompressed value into given file-like object.aget_valueastructaunpacku<L:l��������nnuReturn length of uncompressed value.asplitlinesuBehaves like splitlines() for a normal string.atimeaasctimeaProblemTypeaDateadataaold_keysuInitialize a fresh problem report.

        type can be 'Crash', 'Packaging', 'KernelCrash' or 'KernelOops'.
        date is the desired date/time string; if None (default), the
        current local time is used.
        a_assert_bin_modeaclearastartswithTd ab64_blockakeyavalueabase64ab64decodeabdacompressedcTc�ablockadecompressobjaMAX_WBITSaselfa_strip_gzip_headerd
aendswithTd
:ll��������n:lnnaflusharemaining_keysaremovea_try_unicodeasplitTd:lutoo many values to unpack (expected 2)a_python2adecodeTaASCIIastripcbase64aCompressedValueaencodeakeysuInitialize problem report from a file-like object.

        If binary is False, binary data is not loaded; the dictionary key is
        created, but its value will be an empty string. If it is True, it is
        transparently uncompressed and available as dictionary byte array values.
        If binary is 'compressed', the compressed value is retained, and the
        dictionary value will be a CompressedValue object. This is useful if
        the compressed value is still useful (to avoid recompression if the
        file needs to be written back).

        file needs to be opened in binary mode.

        If key_filter is given, only those keys will be loaded.

        Files are in RFC822 format, but with case sensitive keys.
        alineamissing_keysaosapathajoinadira__enter__a__exit__aoutTnnnuunable to open %suCannot find %s in reportu, avaluesu%s has no binary contentaitemsuExtract only one binary element from the problem_report

        Binary elements like kernel crash dumps can be very big. This method
        extracts directly files without loading the report into memory.
        alocaleagetlocaleaLC_TIMEasetlocalewCamktimeastrptimeaErroruGet timestamp (seconds since epoch) from Date field

        Return None if it is not present.
        uuCheck if the report has any keys which were not loaded.

        This could happen when using binary=False in load().
        l aisspaceuCheck if the given strings contains binary data.a_is_binaryTuUTF-8uTry to convert bytearray value to unicodeafindabinkeysaappendaasckeyslasortTaProblemTypeainsertTlaProblemTypellarbwvudid not get any data for field Tc:
 areplaceTd
c
 Tc: atellTc: base64
 ab64encodeb
��dTc
 acrc32TcacompressobjlaDEFLATEDaDEF_MEM_LEVELacompresswfasizeacrcaseekatruncateabcacloseudid not get any data for field %s from %sapackl����uWrite information into the given file-like object.

        If only_new is True, only keys which have been added since the last
        load() are written (i. e. those returned by new_keys()).

        If a value is a string, it is written directly. Otherwise it must be a
        tuple of the form (file, encode=True, limit=None, fail_on_empty=False).
        The first argument can be a file name or a file-like object,
        which will be read and its content will become the value of this key.
        'encode' specifies whether the contents will be
        gzip compressed and base64-encoded (this defaults to True). If limit is
        set to a positive integer, the file is not attached if it's larger
        than the given limit, and the entire key will be removed. If
        fail_on_empty is True, reading zero bytes will cause an IOError.

        file needs to be opened in binary mode.

        Files are written in RFC822 format.
        astataabachmodautimeast_atimeast_mtimeastast_modeuAdd this report's data to an already existing report file.

        The file will be temporarily chmod'ed to 000 to prevent frontends
        from picking up a hal-updated report file. If keep_times
        is True, then the file's atime and mtime restored after updating.
        asortedacounterTu.gzagfaMIMEBaseTaapplicationux-gzipwkaadd_headerTuContent-DispositionaattachmentTafilenameu.gzaattaset_payloadaencode_base64aattachmentsTuUTF-8areplacearstripatextu: w
u:
 Tw
Tw
u
 aMIMETextDa_charsetuUTF-8u.txtTuContent-DispositionainlineaMIMEMultipartamsgaattachaas_stringuWrite MIME/Multipart RFC 2822 formatted data into file.

        file must be a file-like object, not a path.  It needs to be opened in
        binary mode.

        If a value is a string or a CompressedValue, it is written directly.
        Otherwise it must be a tuple containing the source file and an optional
        boolean value (in that order); the first argument can be a file name or
        a file-like object, which will be read and its content will become the
        value of this key.  The file will be gzip compressed, unless the key
        already ends in .gz.

        attach_treshold specifies the maximum number of lines for a value to be
        included into the first inline text part. All bigger values (as well as
        all non-ASCII ones) will become an attachment, as well as text
        values bigger than 1 kB.

        Extra MIME preamble headers can be specified, too, as a dictionary.

        skip_keys is a set/list specifying keys which are filtered out and not
        written to the destination file.

        priority_fields is a set/list specifying the order in which keys should
        appear in the destination file.
        aisalnumTw.uTw-uTw_uukey '%s' contains invalid characters (only numbers, letters, '.', '_', and '-' are allowed)TtFuvalue for key %s must be a string, CompressedValue, or a file referencea__setitem__uReturn newly added keys.

        Return the set of keys which have been added to the report since it
        was constructed or loaded.
        a_strip_gzip_header_py2l
llaoffsetluStrip gzip header from line and return the rest.uStrip gzip header from line and return the rest. (Python 2)wbamodeTufile stream must be in binary modeaencodinguAssert that given file object is in binary modeuStore, load, and handle problem reports.a__doc__u/usr/lib/python3/dist-packages/problem_report.pya__file__a__spec__aoriginahas_locationa__cached__asysuemail.encodersTaencode_base64uemail.mime.multipartTaMIMEMultipartuemail.mime.baseTaMIMEBaseuemail.mime.textTaMIMETextacollectionsTaUserDictaUserDictametaclassTa__prepare__TaCompressedValueTa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>aproblem_reporta__module__uRepresent a ProblemReport value which is gzip compressed.a__qualname__Tnna__init__uCompressedValue.__init__uCompressedValue.set_valueuCompressedValue.get_valueuCompressedValue.writea__len__uCompressedValue.__len__uCompressedValue.splitlinesaProblemReportTaCrashnuProblemReport.__init__TtnaloaduProblemReport.loadaextract_keysuProblemReport.extract_keysareturnaintaget_timestampuProblemReport.get_timestampahas_removed_fieldsuProblemReport.has_removed_fieldsaclassmethoduProblemReport._is_binaryuProblemReport._try_unicodeTFuProblemReport.writeaadd_to_existinguProblemReport.add_to_existinglawrite_mimeuProblemReport.write_mimeuProblemReport.__setitem__anew_keysuProblemReport.new_keysuProblemReport._strip_gzip_headeruProblemReport._strip_gzip_header_py2uProblemReport._assert_bin_modea__orig_bases__u<listcomp>Taitemaelementu<module problem_report>Ta__class__TaselfatypeadateTaselfavalueanameTaselfTaselfwkwvTaklassafileTaklassastringwcTaklassalineaflagsaoffsetTaklassavalueTaselfareportfileakeep_timesastwfTaselfafileabin_keysadirakeyavalueamissing_keysab64_blockabdaoutalineablockTaselfaorig_ctimeTaselfafileabinaryakey_filterakeyavalueab64_blockabdaremaining_keysalineablockTaselfavalueaoutTaselfafileagzablockTaselfafileaonly_newaasckeysabinkeyswkwvalimitafail_on_emptywfasizeacurr_posagzip_headeracrcabcaoutblockablockTaselfafileaattach_tresholdaextra_headersaskip_keysapriority_fieldsakeysatextaattachmentsacounterapriority_fieldwkwvaattach_valuewfaioagfablockaattasizealinesamsgwa.requests.__version__�a__doc__u/usr/lib/python3/dist-packages/requests/__version__.pya__file__a__spec__aoriginahas_locationa__cached__arequestsa__title__uPython HTTP for Humans.a__description__uhttp://python-requests.orga__url__u2.22.0a__version__l"a__build__uKenneth Reitza__author__ume@kennethreitz.orga__author_email__uApache 2.0a__license__uCopyright 2019 Kenneth Reitza__copyright__u✨ 🍰 ✨a__cake__u<module requests.__version__>u.requests._internal_utils�abuiltin_strais_py2aencodeadecodeuGiven a string object, regardless of type, returns a representation of
    that string in the native string type, encoding and decoding where
    necessary. This assumes ASCII unless told otherwise.
    astrTaasciiuDetermine if unicode string only contains ASCII characters.

    :param str u_string: unicode string to check. Must be unicode
        and not Python 2 `str`.
    :rtype: bool
    u
requests._internal_utils
~~~~~~~~~~~~~~

Provides utility functions that are consumed internally by Requests
which depend on extremely few external helpers (such as compat)
a__doc__u/usr/lib/python3/dist-packages/requests/_internal_utils.pya__file__a__spec__aoriginahas_locationa__cached__acompatTais_py2abuiltin_strastrllato_native_stringaunicode_is_asciiu<module requests._internal_utils>TastringaencodingaoutTau_stringu.requests.adapters�0aInvalidSchemaTuMissing dependencies for SOCKS support.aBaseAdaptera__init__uSends PreparedRequest object. Returns Response object.

        :param request: The :class:`PreparedRequest <PreparedRequest>` being sent.
        :param stream: (optional) Whether to stream the request content.
        :param timeout: (optional) How long to wait for the server to send
            data before giving up, as a float, or a :ref:`(connect timeout,
            read timeout) <timeouts>` tuple.
        :type timeout: float or tuple
        :param verify: (optional) Either a boolean, in which case it controls whether we verify
            the server's TLS certificate, or a string, in which case it must be a path
            to a CA bundle to use
        :param cert: (optional) Any user-provided SSL certificate to be trusted.
        :param proxies: (optional) The proxies dictionary to apply to the request.
        uCleans up adapter specific items.aDEFAULT_RETRIESaRetryTlFTareadamax_retriesafrom_intaconfigaproxy_manageraHTTPAdaptera_pool_connectionsa_pool_maxsizea_pool_blockainit_poolmanagerTablocka__attrs__aitemsutoo many values to unpack (expected 2)aPoolManageranum_poolsamaxsizeablockastrictapoolmanageruInitializes a urllib3 PoolManager.

        This method should not be called from user code, and is only
        exposed for use when subclassing the
        :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`.

        :param connections: The number of urllib3 connection pools to cache.
        :param maxsize: The maximum number of connections to save in the pool.
        :param block: Block when no free connections are available.
        :param pool_kwargs: Extra keyword arguments used to initialize the Pool Manager.
        alowerastartswithTasocksaget_auth_from_urlaSOCKSProxyManagerausernameapasswordaproxy_headersaproxy_from_urluReturn urllib3 ProxyManager for the given proxy.

        This method should not be called from user code, and is only
        exposed for use when subclassing the
        :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`.

        :param proxy: The proxy to return a urllib3 ProxyManager for.
        :param proxy_kwargs: Extra keyword arguments used to configure the Proxy Manager.
        :returns: ProxyManager
        :rtype: urllib3.ProxyManager
        Tahttpsaextract_zipped_pathsaDEFAULT_CA_BUNDLE_PATHaosapathaexistsuCould not find a suitable TLS CA certificate bundle, invalid path: {}acert_locaCERT_REQUIREDacert_reqsaisdiraca_certsaca_cert_diraCERT_NONEabasestringlacert_filelakey_fileuCould not find the TLS certificate file, invalid path: {}uCould not find the TLS key file, invalid path: {}uVerify a SSL certificate. This method should not be called from user
        code, and is only exposed for use when subclassing the
        :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`.

        :param conn: The urllib3 connection object associated with the cert.
        :param url: The requested URL.
        :param verify: Either a boolean, in which case it controls whether we verify
            the server's TLS certificate, or a string, in which case it must be a path
            to a CA bundle to use
        :param cert: The SSL certificate to verify.
        aResponseastatusastatus_codeaCaseInsensitiveDictaheadersaget_encoding_from_headersaencodingarawareasonaurladecodeTuutf-8aextract_cookies_to_jaracookiesarequestaconnectionuBuilds a :class:`Response <requests.Response>` object from a urllib3
        response. This should not be called from user code, and is only exposed
        for use when subclassing the
        :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`

        :param req: The :class:`PreparedRequest <PreparedRequest>` used to generate the response.
        :param resp: The urllib3 response object.
        :rtype: requests.Response
        aselect_proxyaprepend_scheme_if_neededahttpaparse_urlahostaInvalidProxyURLTuPlease check proxy URL. It is malformed and could be missing the host.aproxy_manager_foraconnection_from_urlaurlparseageturluReturns a urllib3 connection for the given URL. This should not be
        called from user code, and is only exposed for use when subclassing the
        :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`.

        :param url: The URL to connect to.
        :param proxies: (optional) A Requests-style dictionary of proxies used on this request.
        :rtype: urllib3.ConnectionPool
        aclearavaluesuDisposes of any internal state.

        Currently, this closes the PoolManager and any active ProxyManager,
        which closes any pooled connections.
        aschemeahttpsapath_urlaurldefragauthuObtain the url to use when making the final request.

        If the message is being sent through a HTTP proxy, the full URL has to
        be used. Otherwise, we should only use the path portion of the URL.

        This should not be called from user code, and is only exposed for use
        when subclassing the
        :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`.

        :param request: The :class:`PreparedRequest <PreparedRequest>` being sent.
        :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs.
        :rtype: str
        a_basic_auth_struProxy-AuthorizationuReturns a dictionary of the headers to add to any request sent
        through a proxy. This works with urllib3 magic to ensure that they are
        correctly sent to the proxy, rather than in a tunnelled request if
        CONNECT is being used.

        This should not be called from user code, and is only exposed for use
        when subclassing the
        :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`.

        :param proxy: The url of the proxy being used for this request.
        :rtype: dict
        aget_connectionaLocationValueErroraInvalidURLTarequestacert_verifyarequest_urlaadd_headersTastreamatimeoutaverifyacertaproxiesabodyuContent-LengthaTimeoutSauceTaconnectareaduInvalid timeout {}. Pass a (connect, read) timeout tuple, or a single float to set both timeouts to the same valueaurlopenamethodatimeoutT
amethodaurlabodyaheadersaredirectaassert_same_hostapreload_contentadecode_contentaretriesatimeoutaproxy_poolaconna_get_connaDEFAULT_POOL_TIMEOUTTatimeoutaputrequestDaskip_accept_encodingtalow_connaputheaderaendheadersasend:lnnaencodeTc
Tc0

agetresponseTtTabufferingaHTTPResponseafrom_httplibTapoolaconnectionapreload_contentadecode_contentacloseaProtocolErrorasocketaerroraConnectionErroraMaxRetryErroraConnectTimeoutErroraNewConnectionErroraConnectTimeoutaResponseErroraRetryErrora_ProxyErroraProxyErrora_SSLErroraSSLErroraClosedPoolErrora_HTTPErroraReadTimeoutErroraReadTimeoutabuild_responseuSends PreparedRequest object. Returns Response object.

        :param request: The :class:`PreparedRequest <PreparedRequest>` being sent.
        :param stream: (optional) Whether to stream the request content.
        :param timeout: (optional) How long to wait for the server to send
            data before giving up, as a float, or a :ref:`(connect timeout,
            read timeout) <timeouts>` tuple.
        :type timeout: float or tuple or urllib3 Timeout object
        :param verify: (optional) Either a boolean, in which case it controls whether
            we verify the server's TLS certificate, or a string, in which case it
            must be a path to a CA bundle to use
        :param cert: (optional) Any user-provided SSL certificate to be trusted.
        :param proxies: (optional) The proxies dictionary to apply to the request.
        :rtype: requests.Response
        u
requests.adapters
~~~~~~~~~~~~~~~~~

This module contains the transport adapters that Requests uses to define
and maintain connections.
a__doc__u/usr/lib/python3/dist-packages/requests/adapters.pya__file__a__spec__aoriginahas_locationa__cached__uos.pathuurllib3.poolmanagerTaPoolManageraproxy_from_urluurllib3.responseTaHTTPResponseuurllib3.utilTaparse_urlTaTimeoutaTimeoutuurllib3.util.retryTaRetryuurllib3.exceptionsTaClosedPoolErrorTaConnectTimeoutErrorTaHTTPErroraHTTPErrorTaMaxRetryErrorTaNewConnectionErrorTaProxyErrorTaProtocolErrorTaReadTimeoutErrorTaSSLErrorTaResponseErrorTaLocationValueErroramodelsTaResponseacompatTaurlparseabasestringautilsTaDEFAULT_CA_BUNDLE_PATHaextract_zipped_pathsaget_encoding_from_headersaprepend_scheme_if_neededaget_auth_from_urlaurldefragauthaselect_proxyastructuresTaCaseInsensitiveDictTaextract_cookies_to_jaraexceptionsT	aConnectionErroraConnectTimeoutaReadTimeoutaSSLErroraProxyErroraRetryErroraInvalidSchemaaInvalidProxyURLaInvalidURLaauthTa_basic_auth_struurllib3.contrib.socksTaSOCKSProxyManageraDEFAULT_POOLBLOCKl
aDEFAULT_POOLSIZETOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>urequests.adaptersa__module__uThe Base Transport Adaptera__qualname__uBaseAdapter.__init__TFntnnuBaseAdapter.senduBaseAdapter.closea__orig_bases__uThe built-in HTTP Adapter for urllib3.

    Provides a general-case interface for Requests sessions to contact HTTP and
    HTTPS urls by implementing the Transport Adapter interface. This class will
    usually be created by the :class:`Session <Session>` class under the
    covers.

    :param pool_connections: The number of urllib3 connection pools to cache.
    :param pool_maxsize: The maximum number of connections to save in the pool.
    :param max_retries: The maximum number of retries each connection
        should attempt. Note, this applies only to failed DNS lookups, socket
        connections and connection timeouts, never to requests where data has
        made it to the server. By default, Requests does not retry failed
        connections. If you need granular control over the conditions under
        which we retry a request, import urllib3's ``Retry`` class and pass
        that instead.
    :param pool_block: Whether the connection pool should block for connections.

    Usage::

      >>> import requests
      >>> s = requests.Session()
      >>> a = requests.adapters.HTTPAdapter(max_retries=3)
      >>> s.mount('http://', a)
    Lamax_retriesaconfiga_pool_connectionsa_pool_maxsizea_pool_blockuHTTPAdapter.__init__a__getstate__uHTTPAdapter.__getstate__a__setstate__uHTTPAdapter.__setstate__uHTTPAdapter.init_poolmanageruHTTPAdapter.proxy_manager_foruHTTPAdapter.cert_verifyuHTTPAdapter.build_responseTnuHTTPAdapter.get_connectionuHTTPAdapter.closeuHTTPAdapter.request_urluAdd any headers needed by the connection. As of v2.0 this does
        nothing by default, but is left for overriding by users that subclass
        the :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`.

        This should not be called from user code, and is only exposed for use
        when subclassing the
        :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`.

        :param request: The :class:`PreparedRequest <PreparedRequest>` to add headers to.
        :param kwargs: The keyword arguments from the call to send().
        uHTTPAdapter.add_headersuHTTPAdapter.proxy_headersuHTTPAdapter.sendu<dictcontraction>Taattraselfu<module requests.adapters>Ta__class__TaargsakwargsTaselfTaselfa__class__Taselfapool_connectionsapool_maxsizeamax_retriesapool_blocka__class__TaselfastateaattravalueTaselfarequestakwargsTaselfareqaresparesponseTaselfaconnaurlaverifyacertacert_locTaselfaproxyTaselfaurlaproxiesaproxyaproxy_urlaproxy_manageraconnaparsedTaselfaconnectionsamaxsizeablockapool_kwargsTaselfaproxyaheadersausernameapasswordTaselfaproxyaproxy_kwargsamanagerausernameapasswordaproxy_headersT	aselfarequestaproxiesaproxyaschemeais_proxied_http_requestausing_socks_proxyaproxy_schemeaurlTaselfarequestastreamatimeoutaverifyacertaproxiesTaselfarequestastreamatimeoutaverifyacertaproxiesaconnweaurlachunkedaconnectareadaerrarespalow_connaheaderavaluewiwru.requests.api}/asessionsaSessiona__enter__a__exit__arequestamethodaurlTnnnuConstructs and sends a :class:`Request <Request>`.

    :param method: method for the new :class:`Request` object.
    :param url: URL for the new :class:`Request` object.
    :param params: (optional) Dictionary, list of tuples or bytes to send
        in the query string for the :class:`Request`.
    :param data: (optional) Dictionary, list of tuples, bytes, or file-like
        object to send in the body of the :class:`Request`.
    :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`.
    :param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`.
    :param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`.
    :param files: (optional) Dictionary of ``'name': file-like-objects`` (or ``{'name': file-tuple}``) for multipart encoding upload.
        ``file-tuple`` can be a 2-tuple ``('filename', fileobj)``, 3-tuple ``('filename', fileobj, 'content_type')``
        or a 4-tuple ``('filename', fileobj, 'content_type', custom_headers)``, where ``'content-type'`` is a string
        defining the content type of the given file and ``custom_headers`` a dict-like object containing additional headers
        to add for the file.
    :param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth.
    :param timeout: (optional) How many seconds to wait for the server to send data
        before giving up, as a float, or a :ref:`(connect timeout, read
        timeout) <timeouts>` tuple.
    :type timeout: float or tuple
    :param allow_redirects: (optional) Boolean. Enable/disable GET/OPTIONS/POST/PUT/PATCH/DELETE/HEAD redirection. Defaults to ``True``.
    :type allow_redirects: bool
    :param proxies: (optional) Dictionary mapping protocol to the URL of the proxy.
    :param verify: (optional) Either a boolean, in which case it controls whether we verify
            the server's TLS certificate, or a string, in which case it must be a path
            to a CA bundle to use. Defaults to ``True``.
    :param stream: (optional) if ``False``, the response content will be immediately downloaded.
    :param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair.
    :return: :class:`Response <Response>` object
    :rtype: requests.Response

    Usage::

      >>> import requests
      >>> req = requests.request('GET', 'https://httpbin.org/get')
      <Response [200]>
    aallow_redirectsagetaparamsuSends a GET request.

    :param url: URL for the new :class:`Request` object.
    :param params: (optional) Dictionary, list of tuples or bytes to send
        in the query string for the :class:`Request`.
    :param \*\*kwargs: Optional arguments that ``request`` takes.
    :return: :class:`Response <Response>` object
    :rtype: requests.Response
    aoptionsuSends an OPTIONS request.

    :param url: URL for the new :class:`Request` object.
    :param \*\*kwargs: Optional arguments that ``request`` takes.
    :return: :class:`Response <Response>` object
    :rtype: requests.Response
    aheaduSends a HEAD request.

    :param url: URL for the new :class:`Request` object.
    :param \*\*kwargs: Optional arguments that ``request`` takes.
    :return: :class:`Response <Response>` object
    :rtype: requests.Response
    apostadataajsonuSends a POST request.

    :param url: URL for the new :class:`Request` object.
    :param data: (optional) Dictionary, list of tuples, bytes, or file-like
        object to send in the body of the :class:`Request`.
    :param json: (optional) json data to send in the body of the :class:`Request`.
    :param \*\*kwargs: Optional arguments that ``request`` takes.
    :return: :class:`Response <Response>` object
    :rtype: requests.Response
    aputuSends a PUT request.

    :param url: URL for the new :class:`Request` object.
    :param data: (optional) Dictionary, list of tuples, bytes, or file-like
        object to send in the body of the :class:`Request`.
    :param json: (optional) json data to send in the body of the :class:`Request`.
    :param \*\*kwargs: Optional arguments that ``request`` takes.
    :return: :class:`Response <Response>` object
    :rtype: requests.Response
    apatchuSends a PATCH request.

    :param url: URL for the new :class:`Request` object.
    :param data: (optional) Dictionary, list of tuples, bytes, or file-like
        object to send in the body of the :class:`Request`.
    :param json: (optional) json data to send in the body of the :class:`Request`.
    :param \*\*kwargs: Optional arguments that ``request`` takes.
    :return: :class:`Response <Response>` object
    :rtype: requests.Response
    adeleteuSends a DELETE request.

    :param url: URL for the new :class:`Request` object.
    :param \*\*kwargs: Optional arguments that ``request`` takes.
    :return: :class:`Response <Response>` object
    :rtype: requests.Response
    u
requests.api
~~~~~~~~~~~~

This module implements the Requests API.

:copyright: (c) 2012 by Kenneth Reitz.
:license: Apache2, see LICENSE for more details.
a__doc__u/usr/lib/python3/dist-packages/requests/api.pya__file__a__spec__aoriginahas_locationa__cached__uTasessionsllTnTnnu<module requests.api>TaurlakwargsTaurlaparamsakwargsTaurladataakwargsTaurladataajsonakwargsTamethodaurlakwargsasession.requests.auth��abasestringawarningsawarnuNon-string usernames will no longer be supported in Requests 3.0.0. Please convert the object you've passed in ({!r}) to a string or bytes object in the near future to avoid problems.aDeprecationWarningTacategoryastruNon-string passwords will no longer be supported in Requests 3.0.0. Please convert the object you've passed in ({!r}) to a string or bytes object in the near future to avoid problems.aencodeTalatin1uBasic ato_native_stringab64encoded:ajoinastripuReturns a Basic Auth string.uAuth hooks must be callable.ausernameapassworda_basic_auth_straheadersaAuthorizationuProxy-Authorizationathreadingalocala_thread_localainitualast_noncelanonce_countachalaposanum_401_callsarealmanonceagetTaqopTaalgorithmTaopaqueaMD5aupperuMD5-SESSamd5_utf8uHTTPDigestAuth.build_digest_header.<locals>.md5_utf8aSHAasha_utf8uHTTPDigestAuth.build_digest_header.<locals>.sha_utf8uSHA-256asha256_utf8uHTTPDigestAuth.build_digest_header.<locals>.sha256_utf8uSHA-512asha512_utf8uHTTPDigestAuth.build_digest_header.<locals>.sha512_utf8u<lambda>uHTTPDigestAuth.build_digest_header.<locals>.<lambda>aurlparseapathw/aqueryw?u%s:%s:%su%s:%slu%08xTuutf-8atimeactimeaosaurandomTlahashlibasha1ahexdigest:nlnaauthasplitTw,u%s:%s:%s:%s:%suusername="%s", realm="%s", nonce="%s", uri="%s", response="%s"u, opaque="%s"aalgorithmu, algorithm="%s"aqopu, qop="auth", nc=%s, cnonce="%s"uDigest %su
        :rtype: str
        amd5asha256asha512ahash_utf8ais_redirectuReset num_401_calls counter on redirects.astatus_codel�l�arequestabodyaseekTuwww-authenticateuadigestalowerlareacompileaIGNORECASETudigest Taflagsaparse_dict_headerasubDacountlacontentacloseacopyaextract_cookies_to_jara_cookiesarawaprepare_cookiesabuild_digest_headeramethodaurlaconnectionasendahistoryaappendu
        Takes the given response and tries digest-auth, if needed.

        :rtype: requests.Response
        ainit_per_thread_statewratellaregister_hookaresponseahandle_401ahandle_redirectu
requests.auth
~~~~~~~~~~~~~

This module contains the authentication handlers for Requests.
a__doc__u/usr/lib/python3/dist-packages/requests/auth.pya__file__a__spec__aoriginahas_locationa__cached__abase64Tab64encodeacompatTaurlparseastrabasestringacookiesTaextract_cookies_to_jara_internal_utilsTato_native_stringautilsTaparse_dict_headeruapplication/x-www-form-urlencodedaCONTENT_TYPE_FORM_URLENCODEDumultipart/form-dataaCONTENT_TYPE_MULTI_PARTTOobjectametaclassa__prepare__aAuthBasea__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>urequests.autha__module__uBase class that all auth implementations derive froma__qualname__a__call__uAuthBase.__call__a__orig_bases__aHTTPBasicAuthuAttaches HTTP Basic Authentication to the given Request object.a__init__uHTTPBasicAuth.__init__a__eq__uHTTPBasicAuth.__eq__a__ne__uHTTPBasicAuth.__ne__uHTTPBasicAuth.__call__aHTTPProxyAuthuAttaches HTTP Proxy Authentication to a given Request object.uHTTPProxyAuth.__call__aHTTPDigestAuthuAttaches HTTP Digest Authentication to the given Request object.uHTTPDigestAuth.__init__uHTTPDigestAuth.init_per_thread_stateuHTTPDigestAuth.build_digest_headeruHTTPDigestAuth.handle_redirectuHTTPDigestAuth.handle_401uHTTPDigestAuth.__call__uHTTPDigestAuth.__eq__uHTTPDigestAuth.__ne__Twswdahash_utf8Tahash_utf8u<module requests.auth>Ta__class__TaselfwrTaselfaotherTaselfausernameapasswordTausernameapasswordaauthstrTaselfamethodaurlarealmanonceaqopaalgorithmaopaqueahash_utf8a_algorithmamd5_utf8asha_utf8asha256_utf8asha512_utf8aKDaentdigap_parsedapathaA1aA2aHA1aHA2ancvaluewsacnoncearespdiganoncebitabaseTaselfwrakwargsas_authapataprepa_rTaselfwrakwargsTaselfTwx.requests.certs�u
requests.certs
~~~~~~~~~~~~~~

This module returns the preferred default CA certificate bundle. There is
only one — the one from the certifi package.

If you are packaging Requests, e.g., for a Linux distribution or a managed
environment, you can change the definition of where() to return a separately
packaged CA bundle.
a__doc__u/usr/lib/python3/dist-packages/requests/certs.pya__file__a__spec__aoriginahas_locationa__cached__acertifiTawherelawhereu<module requests.certs>u.requests.compat�Iu
requests.compat
~~~~~~~~~~~~~~~

This module handles import compatibility issues between Python 2 and
Python 3.
a__doc__u/usr/lib/python3/dist-packages/requests/compat.pya__file__a__spec__aoriginahas_locationa__cached__achardetlasysa_verlais_py2lais_py3asimplejsonajsonaurllibT	aquoteaunquoteaquote_plusaunquote_plusaurlencodeagetproxiesaproxy_bypassaproxy_bypass_environmentagetproxies_environmentaquoteaunquoteaquote_plusaunquote_plusaurlencodeagetproxiesaproxy_bypassaproxy_bypass_environmentagetproxies_environmentaurlparseTaurlparseaurlunparseaurljoinaurlsplitaurldefragaurlunparseaurljoinaurlsplitaurldefragaurllib2Taparse_http_listaparse_http_listacookielibaCookieTaMorselaMorselaStringIOTaStringIOacollectionsTaCallableaMappingaMutableMappingaOrderedDictaCallableaMappingaMutableMappingaOrderedDictastrabuiltin_strabytesaunicodeabasestringalonganumeric_typesainteger_typesuurllib.parseT
aurlparseaurlunparseaurljoinaurlsplitaurlencodeaquoteaunquoteaquote_plusaunquote_plusaurldefraguurllib.requestTaparse_http_listagetproxiesaproxy_bypassaproxy_bypass_environmentagetproxies_environmentahttpTacookiejaracookiejaruhttp.cookiesTaOrderedDictucollections.abcTaCallableaMappingaMutableMappingTOintOfloatTOintu<module requests.compat>u.requests�
nasplitTw.LadevaappendTw0utoo many values to unpack (expected 3)lll:nlnllLllluOld version of cryptography ({}) may cause slowdown.awarningsawarnaRequestsDependencyWarningu
Requests HTTP Library
~~~~~~~~~~~~~~~~~~~~~

Requests is an HTTP library, written in Python, for human beings. Basic GET
usage:

   >>> import requests
   >>> r = requests.get('https://www.python.org')
   >>> r.status_code
   200
   >>> 'Python is a programming language' in r.content
   True

... or POST:

   >>> payload = dict(key1='value1', key2='value2')
   >>> r = requests.post('https://httpbin.org/post', data=payload)
   >>> print(r.text)
   {
     ...
     "form": {
       "key2": "value2",
       "key1": "value1"
     },
     ...
   }

The other HTTP methods are supported - see `requests.api`. Full documentation
is at <http://python-requests.org>.

:copyright: (c) 2017 by Kenneth Reitz.
:license: Apache 2.0, see LICENSE for more details.
a__doc__u/usr/lib/python3/dist-packages/requests/__init__.pya__file__Lu/usr/lib/python3/dist-packages/requestsa__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aurllib3achardetaexceptionsTaRequestsDependencyWarningacheck_compatibilitya_check_cryptographya__version__TEAssertionErrorEValueErroruurllib3 ({}) or chardet ({}) doesn't match a supported version!uurllib3.contribTapyopensslapyopensslainject_into_urllib3acryptographyTa__version__acryptography_versionuurllib3.exceptionsTaDependencyWarningaDependencyWarningasimplefilteraignoreTa__title__a__description__a__url__a__version__a__title__a__description__a__url__Ta__build__a__author__a__author_email__a__license__a__build__a__author__a__author_email__a__license__Ta__copyright__a__cake__a__copyright__a__cake__uTautilsautilsTapackagesapackagesamodelsTaRequestaResponseaPreparedRequestaRequestaResponseaPreparedRequestaapiTarequestagetaheadapostapatchaputadeleteaoptionsarequestagetaheadapostapatchaputadeleteaoptionsasessionsTasessionaSessionasessionaSessionastatus_codesTacodesacodesT	aRequestExceptionaTimeoutaURLRequiredaTooManyRedirectsaHTTPErroraConnectionErroraFileModeWarningaConnectTimeoutaReadTimeoutaRequestExceptionaTimeoutaURLRequiredaTooManyRedirectsaHTTPErroraConnectionErroraFileModeWarningaConnectTimeoutaReadTimeoutaloggingTaNullHandleraNullHandleragetLoggerTarequestsaaddHandleradefaultDaappendtu<module requests>Tacryptography_versionawarningTaurllib3_versionachardet_versionamajoraminorapatch.requests.cookiesO,a_ra_new_headersaurlparseaurlaschemeatypeanetlocaget_hostaheadersagetTaHostato_native_stringaHostDaencodinguutf-8aurlunparseapathaparamsaqueryafragmentuCookie headers should be added with add_unredirected_header()ucookielib has no legitimate use for this method; add it back if you find one.ais_unverifiableaget_origin_req_hosta_headersuMake a MockResponse for `cookielib` to read.

        :param headers: a httplib.HTTPMessage or analogous carrying the headers
        agetheadersa_original_responseaMockRequestaMockResponsearesponseamsgaextract_cookiesuExtract the cookies from the response into a CookieJar.

    :param jar: cookielib.CookieJar (not necessarily a RequestsCookieJar)
    :param request: our own requests.Request object
    :param response: urllib3.HTTPResponse object
    aadd_cookie_headeraget_new_headersTaCookieu
    Produce an appropriate Cookie header string to be sent with `request`, or None.

    :rtype: str
    anameadomainaclearablesaappendutoo many values to unpack (expected 3)acookiejaraclearuUnsets a cookie by name, by default over all domains and paths.

    Wraps CookieJar.clear(), is O(n).
    a_find_no_duplicatesuDict-like get() that also supports optional domain and path args in
        order to resolve naming collisions from using one cookie jar over
        multiple domains.

        .. warning:: operation is O(n), not O(1).
        aremove_cookie_by_nameTadomainapathaMorselamorsel_to_cookieacreate_cookieaset_cookieuDict-like set() that also supports optional domain and path args in
        order to resolve naming collisions from using one cookie jar over
        multiple domains.
        uDict-like iterkeys() that returns an iterator of names of cookies
        from the jar.

        .. seealso:: itervalues() and iteritems().
        aselfaiterkeysuRequestsCookieJar.iterkeysuDict-like keys() that returns a list of names of cookies from the
        jar.

        .. seealso:: values() and items().
        uDict-like itervalues() that returns an iterator of values of cookies
        from the jar.

        .. seealso:: iterkeys() and iteritems().
        avalueaitervaluesuRequestsCookieJar.itervaluesuDict-like values() that returns a list of values of cookies from the
        jar.

        .. seealso:: keys() and items().
        uDict-like iteritems() that returns an iterator of name-value tuples
        from the jar.

        .. seealso:: iterkeys() and itervalues().
        aiteritemsuRequestsCookieJar.iteritemsuDict-like items() that returns a list of name-value tuples from the
        jar. Allows client-code to call ``dict(RequestsCookieJar)`` and get a
        vanilla python dict of key value pairs.

        .. seealso:: keys() and values().
        adomainsuUtility method to list all the domains in the jar.apathsuUtility method to list all the paths in the jar.uReturns True if there are multiple domains in the jar.
        Returns False otherwise.

        :rtype: bool
        acookieadictionaryuTakes as an argument an optional domain and path and returns a plain
        old Python dict of name-value pairs of cookies that meet the
        requirements.

        :rtype: dict
        aRequestsCookieJara__contains__aCookieConflictErroruDict-like __getitem__() for compatibility with client code. Throws
        exception if there are more than one cookie with name. In that case,
        use the more explicit get() method instead.

        .. warning:: operation is O(n), not O(1).
        asetuDict-like __setitem__ for compatibility with client code. Throws
        exception if there is already a cookie of that name in the jar. In that
        case, use the more explicit set() method instead.
        uDeletes a cookie given a name. Wraps ``cookielib.CookieJar``'s
        ``remove_cookie_by_name()``.
        astartswithTw"aendswithareplaceTu\"uacookielibaCookieJaracopyaupdateuUpdates this jar with cookies from another CookieJar or dict-likeuname=%r, domain=%r, path=%ruRequests uses this method internally to get cookie values.

        If there are conflicting cookies, _find arbitrarily chooses one.
        See _find_no_duplicates if you want an exception thrown if there are
        conflicting cookies.

        :param name: a string containing name of cookie
        :param domain: (optional) string containing domain of cookie
        :param path: (optional) string containing path of cookie
        :return: cookie.value
        atoReturnuThere are multiple cookies with name, %ruBoth ``__get_item__`` and ``get`` call this function: it's never
        used elsewhere in Requests.

        :param name: a string containing name of cookie
        :param domain: (optional) string containing domain of cookie
        :param path: (optional) string containing path of cookie
        :raises KeyError: if cookie is not found
        :raises CookieConflictError: if there are multiple cookies
            that match name and optionally domain and path
        :return: cookie.value
        apopTa_cookies_lockuUnlike a normal CookieJar, this class is pickleable.a_cookies_lockathreadingaRLockaset_policyaget_policyuReturn a copy of this RequestsCookieJar.a_policyuReturn the CookiePolicy instance used.anew_jaraversionlaportuw/asecureaexpiresadiscardacommentacomment_urlarestDaHttpOnlynarfc2109ucreate_cookie() got unexpected keyword arguments: %saport_specifiedadomain_specifiedTw.adomain_initial_dotapath_specifiedaCookieuMake a cookie from underspecified parameters.

    By default, the pair of `name` and `value` will be set for the domain ''
    and sent on every request (this is sometimes called a "supercookie").
    umax-ageatimeumax-age: %s must be integeracalendaratimegmastrptimeu%a, %d-%b-%Y %H:%M:%S GMTakeyaHttpOnlyahttponlyT
acommentacomment_urladiscardadomainaexpiresanameapathaportarestarfc2109asecureavalueaversionuConvert a Morsel object into a Cookie containing the one k/v pair.uReturns a CookieJar from a key/value dictionary.

    :param cookie_dict: Dict of key/values to insert into CookieJar.
    :param cookiejar: (optional) A cookiejar to add the cookies to.
    :param overwrite: (optional) If False, will not replace cookies
        already in the jar with new ones.
    :rtype: CookieJar
    uYou can only merge into CookieJaracookiejar_from_dictTacookiejaraoverwriteacookiesuAdd cookies to cookiejar and returns a merged CookieJar.

    :param cookiejar: CookieJar object to add the cookies to.
    :param cookies: Dictionary or CookieJar object to be added.
    :rtype: CookieJar
    u
requests.cookies
~~~~~~~~~~~~~~~~

Compatibility code to be able to use `cookielib.CookieJar` with requests.

requests.utils imports from here, so be careful with imports.
a__doc__u/usr/lib/python3/dist-packages/requests/cookies.pya__file__a__spec__aoriginahas_locationa__cached__a_internal_utilsTato_native_stringlacompatTacookielibaurlparseaurlunparseaMorselaMutableMappingaMutableMappingadummy_threadingTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>urequests.cookiesa__module__uWraps a `requests.Request` to mimic a `urllib2.Request`.

    The code in `cookielib.CookieJar` expects this interface in order to correctly
    manage cookie policies, i.e., determine whether a cookie can be set, given the
    domains of the request and the cookie.

    The original request object is read-only. The client is responsible for collecting
    the new headers via `get_new_headers()` and interpreting them appropriately. You
    probably want `get_cookie_header`, defined below.
    a__qualname__a__init__uMockRequest.__init__aget_typeuMockRequest.get_typeuMockRequest.get_hostuMockRequest.get_origin_req_hostaget_full_urluMockRequest.get_full_urluMockRequest.is_unverifiableahas_headeruMockRequest.has_headerTnaget_headeruMockRequest.get_headeraadd_headeruMockRequest.add_headeraadd_unredirected_headeruMockRequest.add_unredirected_headeruMockRequest.get_new_headersapropertyaunverifiableuMockRequest.unverifiableaorigin_req_hostuMockRequest.origin_req_hostahostuMockRequest.hosta__orig_bases__uWraps a `httplib.HTTPMessage` to mimic a `urllib.addinfourl`.

    ...what? Basically, expose the parsed HTTP headers from the server response
    the way `cookielib` expects to see them.
    uMockResponse.__init__ainfouMockResponse.infouMockResponse.getheadersaextract_cookies_to_jaraget_cookie_headerTnnTERuntimeErroruThere are two cookies that meet the criteria specified in the cookie jar.
    Use .get and .set and include domain and path args in order to be more specific.
    uCompatibility class; is a cookielib.CookieJar, but exposes a dict
    interface.

    This is the CookieJar we create by default for requests and sessions that
    don't specify one, since some clients may expect response.cookies and
    session.cookies to support dict operations.

    Requests does not use the dict interface internally; it's just for
    compatibility with external client code. All requests code should work
    out of the box with externally provided instances of ``CookieJar``, e.g.
    ``LWPCookieJar`` and ``FileCookieJar``.

    Unlike a regular CookieJar, this class is pickleable.

    .. warning:: dictionary operations that are normally O(1) may be O(n).
    TnnnuRequestsCookieJar.getuRequestsCookieJar.setakeysuRequestsCookieJar.keysavaluesuRequestsCookieJar.valuesaitemsuRequestsCookieJar.itemsalist_domainsuRequestsCookieJar.list_domainsalist_pathsuRequestsCookieJar.list_pathsamultiple_domainsuRequestsCookieJar.multiple_domainsaget_dictuRequestsCookieJar.get_dictuRequestsCookieJar.__contains__uRequestsCookieJar.__getitem__a__setitem__uRequestsCookieJar.__setitem__a__delitem__uRequestsCookieJar.__delitem__uRequestsCookieJar.set_cookieuRequestsCookieJar.updatea_finduRequestsCookieJar._finduRequestsCookieJar._find_no_duplicatesa__getstate__uRequestsCookieJar.__getstate__a__setstate__uRequestsCookieJar.__setstate__uRequestsCookieJar.copyuRequestsCookieJar.get_policya_copy_cookie_jarTntamerge_cookiesu<listcomp>Tacookieu<module requests.cookies>Ta__class__Taselfanamea__class__TaselfanameTaselfastateTaselfaheadersTaselfarequestTaselfanameavalueTajaranew_jaracookieTaselfanameadomainapathacookieTaselfanameadomainapathatoReturnacookieTaselfakeyavalTacookie_dictacookiejaraoverwriteanames_from_jaranameTaselfanew_cjTanameavalueakwargsaresultabadargsaerrTajararequestaresponseareqaresTaselfanameadefaultadomainapathTajararequestwrTaselfadomainapathadictionaryacookieTaselfahostaparsedTaselfanameadefaultTaselfTaselfacookieTaselfadomainsacookieTaselfapathsacookieTacookiejaracookiesacookie_in_jarTamorselaexpiresatime_templateTacookiejaranameadomainapathaclearablesacookieTaselfanameavalueakwargswcTaselfacookieaargsakwargsa__class__Taselfaotheracookiea__class__.requests.exceptions2	SaresponseapopTarequestnarequestaselfaRequestExceptiona__init__uInitialize RequestException with `request` and `response` objects.u
requests.exceptions
~~~~~~~~~~~~~~~~~~~

This module contains the set of Requests' exceptions.
a__doc__u/usr/lib/python3/dist-packages/requests/exceptions.pya__file__a__spec__aoriginahas_locationa__cached__uurllib3.exceptionsTaHTTPErrorlaHTTPErroraBaseHTTPErrorTEOSErrorametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>urequests.exceptionsa__module__uThere was an ambiguous exception that occurred while handling your
    request.
    a__qualname__uRequestException.__init__a__orig_bases__uAn HTTP error occurred.aConnectionErroruA Connection error occurred.aProxyErroruA proxy error occurred.aSSLErroruAn SSL error occurred.aTimeoutuThe request timed out.

    Catching this error will catch both
    :exc:`~requests.exceptions.ConnectTimeout` and
    :exc:`~requests.exceptions.ReadTimeout` errors.
    aConnectTimeoutuThe request timed out while trying to connect to the remote server.

    Requests that produced this error are safe to retry.
    aReadTimeoutuThe server did not send any data in the allotted amount of time.aURLRequireduA valid URL is required to make a request.aTooManyRedirectsuToo many redirects.aMissingSchemauThe URL schema (e.g. http or https) is missing.aInvalidSchemauSee defaults.py for valid schemas.aInvalidURLuThe URL provided was somehow invalid.aInvalidHeaderuThe header value provided was somehow invalid.aInvalidProxyURLuThe proxy URL provided is invalid.aChunkedEncodingErroruThe server declared chunked encoding but sent an invalid chunk.aContentDecodingErroruFailed to decode response contentaStreamConsumedErroruThe content for this response was already consumedaRetryErroruCustom retries logic failedaUnrewindableBodyErroruRequests encountered an error when trying to rewind a bodyaWarningaRequestsWarninguBase warning for Requests.aDeprecationWarningaFileModeWarninguA file was opened in text mode, but Requests determined its binary length.aRequestsDependencyWarninguAn imported dependency doesn't match the expected version range.u<module requests.exceptions>Ta__class__Taselfaargsakwargsaresponsea__class__u.requests.hooksaHOOKSageta__call__ahook_datauDispatches a hook dictionary on a given piece of data.u
requests.hooks
~~~~~~~~~~~~~~

This module provides the capabilities for the Requests hooks system.

Available hooks:

``response``:
    The response generated from a Request.
a__doc__u/usr/lib/python3/dist-packages/requests/hooks.pya__file__a__spec__aoriginahas_locationa__cached__Laresponseadefault_hooksadispatch_hooku<dictcontraction>Taeventu<module requests.hooks>Takeyahooksahook_dataakwargsahooka_hook_datau.requests.models�6�aurlsplitaurlapathw/aappendaqueryTw?uuBuild the path URL to use.astrabytesareada__iter__ato_key_val_listutoo many values to unpack (expected 2)abasestringaresultwkaencodeTuutf-8aurlencodeDadoseqtuEncode parameters in a piece of data.

        Will successfully encode parameters when passed as a dict or a list of
        2-tuples. Order is retained if data is a list of 2-tuples but arbitrary
        if parameters are supplied as a dict.
        uFiles must be provided.uData must not be a string.anew_fieldsafieldadecodeTOtupleOlistutoo many values to unpack (expected 3)utoo many values to unpack (expected 4)aguess_filenameaRequestFieldTanameadataafilenameaheadersamake_multipartTacontent_typeaencode_multipart_formdatauBuild the body for a multipart/form-data request.

        Will successfully encode files when passed as a dict or a list of
        tuples. Order is retained if data is a list of tuples but arbitrary
        if parameters are supplied as a dict.
        The tuples may be 2-tuples (filename, fileobj), 3-tuples (filename, fileobj, contentype)
        or 4-tuples (filename, fileobj, contentype, custom_headers).
        ahooksuUnsupported event specified, with event name "%s"aCallableaextenduProperly register a hook.u<genexpr>uRequestHooksMixin.register_hook.<locals>.<genexpr>aremoveuDeregister a previously registered hook.
        Returns True if the hook existed, False if not.
        adefault_hooksaitemsaselfaregister_hookTaeventahookamethodaheadersafilesadataajsonaparamsaauthacookiesu<Request [%s]>aPreparedRequestaprepareT
amethodaurlaheadersafilesadataajsonaparamsaauthacookiesahooksuConstructs a :class:`PreparedRequest <PreparedRequest>` for transmission and returns it.a_cookiesabodya_body_positionaprepare_methodaprepare_urlaprepare_headersaprepare_cookiesaprepare_bodyaprepare_authaprepare_hooksuPrepares the entire request with the given parameters.u<PreparedRequest [%s]>acopya_copy_cookie_jarato_native_stringaupperuPrepares the given HTTP method.aidnalDauts46taIDNAErrorTautf8ais_py2aunicodealstripw:alowerastartswithTahttpaparse_urlutoo many values to unpack (expected 7)aLocationParseErroraInvalidURLaargsuInvalid URL {0!r}: No schema supplied. Perhaps you meant http://{0}?autf8aMissingSchemauInvalid URL %r: No host suppliedaunicode_is_asciia_get_idna_encoded_hostTuURL has an invalid label.Tw*w@ahosta_encode_paramsu%s&%sarequote_uriaurlunparseuPrepares the given HTTP URL.aCaseInsensitiveDictacheck_header_validityuPrepares the given HTTP headers.uapplication/jsonacomplexjsonadumpsaMappingasuper_lenaUnsupportedOperationatellTEOSErrorpuStreamed bodies and files are mutually exclusive.abuiltin_struContent-LengthachunkeduTransfer-Encodinga_encode_filesuapplication/x-www-form-urlencodedaprepare_content_lengthucontent-typeuContent-TypeuPrepares the given HTTP body data.TaGETaHEADagetTuContent-Lengthw0uPrepare Content-Length header based on request method and bodyaget_auth_from_urlaHTTPBasicAuthaupdateuPrepares the given HTTP auth data.acookielibaCookieJaracookiejar_from_dictaget_cookie_headeraCookieuPrepares the given HTTP cookie data.

        This function eventually generates a ``Cookie`` header from the
        given cookies using cookielib. Due to cookielib's design, the header
        will not be regenerated if it already exists, meaning this function
        can only be called once for the life of the
        :class:`PreparedRequest <PreparedRequest>` object. Any subsequent calls
        to ``prepare_cookies`` will have no actual effect, unless the "Cookie"
        header is removed beforehand.
        uPrepares the given hooks.a_contenta_content_consumeda_nextastatus_codearawaencodingahistoryareasonadatetimeatimedeltaTlaelapsedarequestacloseacontenta__attrs__u<Response [%s]>aokuReturns True if :attr:`status_code` is less than 400.

        This attribute checks if the status code of the response is between
        400 and 600 to see if there was a client error or a server error. If
        the status code, is between 200 and 400, this will return True. This
        is **not** a check to see if the response code is ``200 OK``.
        aiter_contentTl�uAllows you to use a response as an iterator.araise_for_statusaHTTPErroruReturns True if :attr:`status_code` is less than 400, False if not.

        This attribute checks if the status code of the response is between
        400 and 600 to see if there was a client error or a server error. If
        the status code is between 200 and 400, this will return True. This
        is **not** a check to see if the response code is ``200 OK``.
        alocationaREDIRECT_STATIuTrue if this Response is a well-formed HTTP redirect that could have
        been processed automatically (by :meth:`Session.resolve_redirects`).
        acodesamoved_permanentlyapermanent_redirectuTrue if this Response one of the permanent versions of redirect.uReturns a PreparedRequest for the next request in a redirect chain, if there is one.achardetadetectuThe apparent encoding, provided by the chardet library.agenerateuResponse.iter_content.<locals>.generateaStreamConsumedErroruchunk_size must be an int, it is instead a %s.aiter_slicesastream_decode_response_unicodeuIterates over the response data.  When stream=True is set on the
        request, this avoids reading the content at once into memory for
        large responses.  The chunk size is the number of bytes it should
        read into memory.  This is not necessarily the length of each item
        returned as decoding can take place.

        chunk_size must be of type int or None. A value of None will
        function differently depending on the value of `stream`.
        stream=True will read data as it arrives in whatever size the
        chunks are received. If stream=False, data is returned as
        a single chunk.

        If decode_unicode is True, content will be decoded using the best
        available encoding based on the response.
        astreamachunk_sizeDadecode_contenttaProtocolErroraChunkedEncodingErroraDecodeErroraContentDecodingErroraReadTimeoutErroraConnectionErroruIterates over the response data, one line at a time.  When
        stream=True is set on the request, this avoids reading the
        content at once into memory for large responses.

        .. note:: This method is not reentrant safe.
        adecode_unicodeTachunk_sizeadecode_unicodeapendingadelimiterasplitasplitlinesl��������achunkapopaiter_linesuResponse.iter_linesuThe content for this response was already consumedcajoinaCONTENT_CHUNK_SIZEuContent of the response, in bytes.Tuaapparent_encodingDaerrorsareplaceTELookupErrorETypeErroruContent of the response, in unicode.

        If Response.encoding is None, encoding will be guessed using
        ``chardet``.

        The encoding of the response content is determined based solely on HTTP
        headers, following RFC 2616 to the letter. If you can take advantage of
        non-HTTP knowledge to make a better guess at the encoding, you should
        set ``r.encoding`` appropriately before accessing this property.
        aguess_json_utfaloadsatextuReturns the json-encoded content of a response, if any.

        :param \*\*kwargs: Optional arguments that ``json.loads`` takes.
        :raises ValueError: If the response body does not contain valid json.
        Talinkaparse_header_linksTarelTaurlwluReturns the parsed header links of the response, if any.Tuiso-8859-1l�l�u%s Client Error: %s for url: %slXu%s Server Error: %s for url: %sTaresponseuRaises stored :class:`HTTPError`, if one occurred.arelease_connuReleases the connection back to the pool. Once this method has been
        called the underlying ``raw`` object must not be accessed again.

        *Note: Should not normally need to be called explicitly.*
        u
requests.models
~~~~~~~~~~~~~~~

This module contains the primary objects that power Requests.
a__doc__u/usr/lib/python3/dist-packages/requests/models.pya__file__a__spec__aoriginahas_locationa__cached__asysuencodings.idnaaencodingsuurllib3.fieldsTaRequestFielduurllib3.filepostTaencode_multipart_formdatauurllib3.utilTaparse_urluurllib3.exceptionsTaDecodeErroraReadTimeoutErroraProtocolErroraLocationParseErrorTadefault_hookslastructuresTaCaseInsensitiveDictTaHTTPBasicAuthTacookiejar_from_dictaget_cookie_headera_copy_cookie_jaraexceptionsTaHTTPErroraMissingSchemaaInvalidURLaChunkedEncodingErroraContentDecodingErroraConnectionErroraStreamConsumedErrora_internal_utilsTato_native_stringaunicode_is_asciiautilsT
aguess_filenameaget_auth_from_urlarequote_uriastream_decode_response_unicodeato_key_val_listaparse_header_linksaiter_slicesaguess_json_utfasuper_lenacheck_header_validityacompatTaCallableaMappingacookielibaurlunparseaurlsplitaurlencodeastrabytesais_py2achardetabuiltin_strabasestringTajsonastatus_codesTacodesamovedafoundaotheratemporary_redirectlaDEFAULT_REDIRECT_LIMITl(laITER_CHUNK_SIZETOobjectametaclassa__prepare__aRequestEncodingMixina__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>urequests.modelsa__module__a__qualname__apropertyapath_urluRequestEncodingMixin.path_urlastaticmethoduRequestEncodingMixin._encode_paramsuRequestEncodingMixin._encode_filesa__orig_bases__aRequestHooksMixinuRequestHooksMixin.register_hookaderegister_hookuRequestHooksMixin.deregister_hookaRequestuA user-created :class:`Request <Request>` object.

    Used to prepare a :class:`PreparedRequest <PreparedRequest>`, which is sent to the server.

    :param method: HTTP method to use.
    :param url: URL to send.
    :param headers: dictionary of headers to send.
    :param files: dictionary of {filename: fileobject} files to multipart upload.
    :param data: the body to attach to the request. If a dictionary or
        list of tuples ``[(key, value)]`` is provided, form-encoding will
        take place.
    :param json: json for the body to attach to the request (if files or data is not specified).
    :param params: URL parameters to append to the URL. If a dictionary or
        list of tuples ``[(key, value)]`` is provided, form-encoding will
        take place.
    :param auth: Auth handler or (user, pass) tuple.
    :param cookies: dictionary or CookieJar of cookies to attach to this request.
    :param hooks: dictionary of callback hooks, for internal usage.

    Usage::

      >>> import requests
      >>> req = requests.Request('GET', 'https://httpbin.org/get')
      >>> req.prepare()
      <PreparedRequest [GET]>
    T
nnnnnnnnnna__init__uRequest.__init__a__repr__uRequest.__repr__uRequest.prepareuThe fully mutable :class:`PreparedRequest <PreparedRequest>` object,
    containing the exact bytes that will be sent to the server.

    Generated from either a :class:`Request <Request>` object or manually.

    Usage::

      >>> import requests
      >>> req = requests.Request('GET', 'https://httpbin.org/get')
      >>> r = req.prepare()
      <PreparedRequest [GET]>

      >>> s = requests.Session()
      >>> s.send(r)
      <Response [200]>
    uPreparedRequest.__init__uPreparedRequest.prepareuPreparedRequest.__repr__uPreparedRequest.copyuPreparedRequest.prepare_methoduPreparedRequest._get_idna_encoded_hostuPreparedRequest.prepare_urluPreparedRequest.prepare_headersTnuPreparedRequest.prepare_bodyuPreparedRequest.prepare_content_lengthuPreparedRequest.prepare_authuPreparedRequest.prepare_cookiesuPreparedRequest.prepare_hooksaResponseuThe :class:`Response <Response>` object, which contains a
    server's response to an HTTP request.
    L
a_contentastatus_codeaheadersaurlahistoryaencodingareasonacookiesaelapsedarequestuResponse.__init__a__enter__uResponse.__enter__a__exit__uResponse.__exit__a__getstate__uResponse.__getstate__a__setstate__uResponse.__setstate__uResponse.__repr__a__bool__uResponse.__bool__a__nonzero__uResponse.__nonzero__uResponse.__iter__uResponse.okais_redirectuResponse.is_redirectais_permanent_redirectuResponse.is_permanent_redirectanextuResponse.nextuResponse.apparent_encodingTlFuResponse.iter_contentuResponse.contentuResponse.textuResponse.jsonalinksuResponse.linksuResponse.raise_for_statusuResponse.closeu<dictcontraction>TaattraselfTa.0whu<module requests.models>Ta__class__TaselfTaselfaargsT
aselfamethodaurlaheadersafilesadataaparamsaauthacookiesahooksajsonwkwvTaselfastateanameavalueTafilesadataanew_fieldsafieldsafieldavalwvwkaftafhafnafpafdataarfabodyacontent_typeTadataaresultwkavswvTahostaidnaTaselfarelease_connTaselfwpTaselfaeventahookTachunkweaselfachunk_sizeTachunk_sizeaselfTaselfachunk_sizeadecode_unicodeagenerateareused_chunksastream_chunksachunksTaselfachunk_sizeadecode_unicodeadelimiterapendingachunkalinesalineTaselfakwargsaencodingTaselfaheaderwlalinksalinkakeyTaselfaurlwpapathaqueryTaselfamethodaurlaheadersafilesadataaparamsaauthacookiesahooksajsonTaselfaauthaurlaurl_authwrTaselfadataafilesajsonabodyacontent_typeais_streamalengthTaselfabodyalengthTaselfacookiesacookie_headerTaselfaheadersaheaderanameavalueTaselfahooksaeventTaselfamethodTaselfaurlaparamsaschemeaauthahostaportapathaqueryafragmentweaerroranetlocaenc_paramsTaselfahttp_error_msgareasonTaselfacontentaencoding.requests.packages�a__doc__u/usr/lib/python3/dist-packages/requests/packages.pya__file__a__spec__aoriginahas_locationa__cached__asysTaurllib3aidnaachardetapackageamodulesamodastartswithw.urequests.packages.u<module requests.packages>u.requests.sessions93<aMappingato_key_val_listaupdateaitemsutoo many values to unpack (expected 2)uDetermines appropriate setting for a given request, taking into account
    the explicit setting on that request, and the setting in the session. If a
    setting is a dictionary, they will be merged together using `dict_class`
    agetTaresponseasession_hooksamerge_settingarequest_hooksuProperly merges both requests and session hooks.

    This is necessary because when request_hooks == {'response': []}, the
    merge breaks Session hooks entirely.
    ais_redirectaheadersalocationais_py3aencodeTalatin1ato_native_stringautf8uReceives a Response. Returns a redirect URI or ``None``aurlparseahostnameaschemeahttpaportTlPnahttpsTl�naDEFAULT_PORTSuDecide whether Authorization header should be removed when redirectinguReceives a Response. Returns a generator of Responses or Requests.aselfaget_redirect_targetarespareqaurlafragmentacopyahistaappend:lnnahistoryacontentaChunkedEncodingErroraContentDecodingErrorarawareadTFTadecode_contentamax_redirectsaTooManyRedirectsuExceeded %s redirects.acloseastartswithTu//u%s:%suaprevious_fragmenta_replaceTafragmentaparsedageturlanetlocaurljoinarequote_uriarebuild_methodastatus_codeacodesatemporary_redirectapermanent_redirectTuContent-LengthuContent-TypeuTransfer-Encodingaprepared_requestapopabodyaCookieaextract_cookies_to_jara_cookiesamerge_cookiesacookiesaprepare_cookiesarebuild_proxiesaproxiesarebuild_autha_body_positionuContent-LengthuTransfer-Encodingarewind_bodyayield_requestsasendastreamatimeoutaverifyacertaallow_redirectsaadapter_kwargsaresolve_redirectsuSessionRedirectMixin.resolve_redirectsaAuthorizationashould_strip_autharequestatrust_envaget_netrc_authaprepare_authuWhen being redirected we may want to strip authentication from the
        request to avoid leaking credentials. This method intelligently removes
        and reapplies authentication where possible to avoid credential loss.
        Tano_proxyashould_bypass_proxiesaget_environ_proxiesTaallasetdefaultuProxy-Authorizationaget_auth_from_urlanew_proxiesTnna_basic_auth_struThis method re-evaluates the proxy configuration by considering the
        environment variables. If we are redirected to a URL covered by
        NO_PROXY, we strip the proxy configuration. Otherwise, we set missing
        proxy keys for this URL (in case they were stripped by a previous
        redirect).

        This method also replaces the Proxy-Authorization header where
        necessary.

        :rtype: dict
        amethodasee_otheraHEADaGETafoundamovedaPOSTuWhen being redirected we may want to change the method of the request
        based on certain specs or browser behavior.
        adefault_headersaauthadefault_hooksahooksaparamsaDEFAULT_REDIRECT_LIMITacookiejar_from_dictaOrderedDictaadaptersamountuhttps://aHTTPAdapteruhttp://acookielibaCookieJaraRequestsCookieJaraPreparedRequestaprepareaupperafilesadataajsonaCaseInsensitiveDictTadict_classamerge_hooksT
amethodaurlafilesadataajsonaheadersaparamsaauthacookiesahooksuConstructs a :class:`PreparedRequest <PreparedRequest>` for
        transmission and returns it. The :class:`PreparedRequest` has settings
        merged from the :class:`Request <Request>` instance and those of the
        :class:`Session`.

        :param request: :class:`Request` instance to prepare with this
            session's settings.
        :rtype: requests.PreparedRequest
        aRequestT
amethodaurlaheadersafilesadataajsonaparamsaauthacookiesahooksaprepare_requestamerge_environment_settingsuConstructs a :class:`Request <Request>`, prepares it and sends it.
        Returns :class:`Response <Response>` object.

        :param method: method for the new :class:`Request` object.
        :param url: URL for the new :class:`Request` object.
        :param params: (optional) Dictionary or bytes to be sent in the query
            string for the :class:`Request`.
        :param data: (optional) Dictionary, list of tuples, bytes, or file-like
            object to send in the body of the :class:`Request`.
        :param json: (optional) json to send in the body of the
            :class:`Request`.
        :param headers: (optional) Dictionary of HTTP Headers to send with the
            :class:`Request`.
        :param cookies: (optional) Dict or CookieJar object to send with the
            :class:`Request`.
        :param files: (optional) Dictionary of ``'filename': file-like-objects``
            for multipart encoding upload.
        :param auth: (optional) Auth tuple or callable to enable
            Basic/Digest/Custom HTTP Auth.
        :param timeout: (optional) How long to wait for the server to send
            data before giving up, as a float, or a :ref:`(connect timeout,
            read timeout) <timeouts>` tuple.
        :type timeout: float or tuple
        :param allow_redirects: (optional) Set to True by default.
        :type allow_redirects: bool
        :param proxies: (optional) Dictionary mapping protocol or protocol and
            hostname to the URL of the proxy.
        :param stream: (optional) whether to immediately download the response
            content. Defaults to ``False``.
        :param verify: (optional) Either a boolean, in which case it controls whether we verify
            the server's TLS certificate, or a string, in which case it must be a path
            to a CA bundle to use. Defaults to ``True``.
        :param cert: (optional) if String, path to ssl client cert file (.pem).
            If Tuple, ('cert', 'key') pair.
        :rtype: requests.Response
        uSends a GET request. Returns :class:`Response` object.

        :param url: URL for the new :class:`Request` object.
        :param \*\*kwargs: Optional arguments that ``request`` takes.
        :rtype: requests.Response
        aOPTIONSuSends a OPTIONS request. Returns :class:`Response` object.

        :param url: URL for the new :class:`Request` object.
        :param \*\*kwargs: Optional arguments that ``request`` takes.
        :rtype: requests.Response
        uSends a HEAD request. Returns :class:`Response` object.

        :param url: URL for the new :class:`Request` object.
        :param \*\*kwargs: Optional arguments that ``request`` takes.
        :rtype: requests.Response
        uSends a POST request. Returns :class:`Response` object.

        :param url: URL for the new :class:`Request` object.
        :param data: (optional) Dictionary, list of tuples, bytes, or file-like
            object to send in the body of the :class:`Request`.
        :param json: (optional) json to send in the body of the :class:`Request`.
        :param \*\*kwargs: Optional arguments that ``request`` takes.
        :rtype: requests.Response
        aPUTuSends a PUT request. Returns :class:`Response` object.

        :param url: URL for the new :class:`Request` object.
        :param data: (optional) Dictionary, list of tuples, bytes, or file-like
            object to send in the body of the :class:`Request`.
        :param \*\*kwargs: Optional arguments that ``request`` takes.
        :rtype: requests.Response
        aPATCHuSends a PATCH request. Returns :class:`Response` object.

        :param url: URL for the new :class:`Request` object.
        :param data: (optional) Dictionary, list of tuples, bytes, or file-like
            object to send in the body of the :class:`Request`.
        :param \*\*kwargs: Optional arguments that ``request`` takes.
        :rtype: requests.Response
        aDELETEuSends a DELETE request. Returns :class:`Response` object.

        :param url: URL for the new :class:`Request` object.
        :param \*\*kwargs: Optional arguments that ``request`` takes.
        :rtype: requests.Response
        uYou can only send PreparedRequests.Taallow_redirectstTastreamaget_adapterTaurlapreferred_clockatimedeltaTasecondsaelapsedadispatch_hookaresponseainsertlwrDayield_requeststa_nextuSend a given PreparedRequest.

        :rtype: requests.Response
        aosaenvironTaREQUESTS_CA_BUNDLETaCURL_CA_BUNDLEu
        Check the environment and merge it with some settings.

        :rtype: dict
        aloweraInvalidSchemauNo connection adapters were found for '%s'u
        Returns the appropriate connection adapter for the given URL.

        :rtype: requests.adapters.BaseAdapter
        avaluesuCloses all adapters and as such the sessionuRegisters a connection adapter to a prefix.

        Adapters are sorted in descending order by prefix length.
        a__attrs__aSessionu
    Returns a :class:`Session` for context-management.

    .. deprecated:: 1.0.0

        This method has been deprecated since version 1.0.0 and is only kept for
        backwards compatibility. New code should use :class:`~requests.sessions.Session`
        to create a session. This may be removed at a future date.

    :rtype: Session
    u
requests.session
~~~~~~~~~~~~~~~~

This module provides a Session object to manage and persist settings across
requests (cookies, auth, proxies).
a__doc__u/usr/lib/python3/dist-packages/requests/sessions.pya__file__a__spec__aoriginahas_locationa__cached__asysatimeadatetimeTatimedeltaTa_basic_auth_strlacompatTacookielibais_py3aOrderedDictaurljoinaurlparseaMappingTacookiejar_from_dictaextract_cookies_to_jaraRequestsCookieJaramerge_cookiesamodelsTaRequestaPreparedRequestaDEFAULT_REDIRECT_LIMITTadefault_hooksadispatch_hooka_internal_utilsTato_native_stringautilsTato_key_val_listadefault_headersaDEFAULT_PORTSaexceptionsTaTooManyRedirectsaInvalidSchemaaChunkedEncodingErroraContentDecodingErrorastructuresTaCaseInsensitiveDictTaHTTPAdapterTarequote_uriaget_environ_proxiesaget_netrc_authashould_bypass_proxiesaget_auth_from_urlarewind_bodyastatus_codesTacodesTaREDIRECT_STATIaREDIRECT_STATITOobjectametaclassa__prepare__aSessionRedirectMixina__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>urequests.sessionsa__module__a__qualname__uSessionRedirectMixin.get_redirect_targetuSessionRedirectMixin.should_strip_authTFntnnFuSessionRedirectMixin.rebuild_authuSessionRedirectMixin.rebuild_proxiesuSessionRedirectMixin.rebuild_methoda__orig_bases__uA Requests session.

    Provides cookie persistence, connection-pooling, and configuration.

    Basic Usage::

      >>> import requests
      >>> s = requests.Session()
      >>> s.get('https://httpbin.org/get')
      <Response [200]>

    Or as a context manager::

      >>> with requests.Session() as s:
      >>>     s.get('https://httpbin.org/get')
      <Response [200]>
    L
aheadersacookiesaauthaproxiesahooksaparamsaverifyacertaprefetchaadaptersastreamatrust_envamax_redirectsa__init__uSession.__init__a__enter__uSession.__enter__a__exit__uSession.__exit__uSession.prepare_requestTnnnnnnntnnnnnnuSession.requestuSession.getaoptionsuSession.optionsaheaduSession.headapostuSession.postTnaputuSession.putapatchuSession.patchadeleteuSession.deleteuSession.senduSession.merge_environment_settingsuSession.get_adapteruSession.closeuSession.mounta__getstate__uSession.__getstate__a__setstate__uSession.__setstate__asessionu<dictcontraction>Taattraselfu<listcomp>TwkaprefixTwkwvTarespu<module requests.sessions>Ta__class__TaselfTaselfaargsTaselfastateTaselfastateaattravalueTaselfwvTaselfaurlakwargsTaselfaurlaprefixaadapterTaselfarespalocationT
aselfaurlaproxiesastreamaverifyacertano_proxyaenv_proxieswkwvTarequest_hooksasession_hooksadict_classTarequest_settingasession_settingadict_classamerged_settinganone_keysakeyTaselfaprefixaadapterakeys_to_moveakeyTaselfaurladataakwargsTaselfaurladataajsonakwargsTaselfarequestacookiesamerged_cookiesaauthwpTaselfaprepared_requestaresponseaheadersaurlanew_authTaselfaprepared_requestaresponseamethodT
aselfaprepared_requestaproxiesaheadersaurlaschemeanew_proxiesano_proxyabypass_proxyaenviron_proxiesaproxyausernameapasswordTaselfamethodaurlaparamsadataaheadersacookiesafilesaauthatimeoutaallow_redirectsaproxiesahooksastreamaverifyacertajsonareqaprepasettingsasend_kwargsarespTaselfarespareqastreamatimeoutaverifyacertaproxiesayield_requestsaadapter_kwargsahistaurlaprevious_fragmentaprepared_requestaparsed_rurlaparsedapurged_headersaheaderaheadersarewindableT
aselfarequestakwargsaallow_redirectsastreamahooksaadapterastartwraelapsedarespagenahistoryTaselfaold_urlanew_urlaold_parsedanew_parsedachanged_portachanged_schemeadefault_port.requests.status_codes(a_codesaitemsutoo many values to unpack (expected 2)acodesastartswithTTw\w/aupperadocu_init.<locals>.doca__doc__w
asortedu, u* %d: %su``%s``u<genexpr>u_init.<locals>.doc.<locals>.<genexpr>u_init.<locals>.<genexpr>u
The ``codes`` object defines a mapping from common names for HTTP statuses
to their numerical codes, accessible either as attributes or as dictionary
items.

>>> requests.codes['temporary_redirect']
307
>>> requests.codes.teapot
418
>>> requests.codes['\o/']
200

Some codes have multiple names, and both upper- and lower-case versions of
the names are allowed. For example, ``codes.ok``, ``codes.OK``, and
``codes.okay`` all correspond to the HTTP status code 200.
u/usr/lib/python3/dist-packages/requests/status_codes.pya__file__a__spec__aoriginahas_locationa__cached__astructuresTaLookupDictlaLookupDictlDDldlelflglzl�l�l�l�l�l�l�l�l�l�l,l-l.l/l0l1l2l3l4l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�l�TacontinueTaswitching_protocolsTaprocessingTacheckpointTauri_too_longarequest_uri_too_longTaokaokayaall_okaall_okayaall_goodu\o/u✓TacreatedTaacceptedTanon_authoritative_infoanon_authoritative_informationTano_contentTareset_contentaresetTapartial_contentapartialTamulti_statusamultiple_statusamulti_statiamultiple_statiTaalready_reportedTaim_usedTamultiple_choicesTamoved_permanentlyamovedu\o-TafoundTasee_otheraotherTanot_modifiedTause_proxyTaswitch_proxyTatemporary_redirectatemporary_movedatemporaryTapermanent_redirectaresume_incompletearesumeTabad_requestabadTaunauthorizedTapayment_requiredapaymentTaforbiddenTanot_foundu-o-Tamethod_not_allowedanot_allowedTanot_acceptableTaproxy_authentication_requiredaproxy_authaproxy_authenticationTarequest_timeoutatimeoutTaconflictTagoneTalength_requiredTaprecondition_failedapreconditionTarequest_entity_too_largeTarequest_uri_too_largeTaunsupported_media_typeaunsupported_mediaamedia_typeTarequested_range_not_satisfiablearequested_rangearange_not_satisfiableTaexpectation_failedTaim_a_teapotateapotai_am_a_teapotTamisdirected_requestTaunprocessable_entityaunprocessableTalockedTafailed_dependencyadependencyTaunordered_collectionaunorderedTaupgrade_requiredaupgradeTaprecondition_requiredapreconditionTatoo_many_requestsatoo_manyTaheader_fields_too_largeafields_too_largeTano_responseanoneTaretry_witharetryTablocked_by_windows_parental_controlsaparental_controlsTaunavailable_for_legal_reasonsalegal_reasonsTaclient_closed_requestTainternal_server_erroraserver_erroru/o\u✗Tanot_implementedTabad_gatewayTaservice_unavailableaunavailableTagateway_timeoutTahttp_version_not_supportedahttp_versionTavariant_also_negotiatesTainsufficient_storageTabandwidth_limit_exceededabandwidthTanot_extendedTanetwork_authentication_requiredanetwork_authanetwork_authenticationTastatus_codesTanamea_initTa.0acodeadocTa.0wnu<module requests.status_codes>TacodeatitlesatitleadocTacodeanamesu.requests.structures�	OaOrderedDicta_storeaupdatealowerlavaluesutoo many values to unpack (expected 2)u<genexpr>uCaseInsensitiveDict.__iter__.<locals>.<genexpr>aitemsuLike iteritems(), but with all lowercase keys.uCaseInsensitiveDict.lower_items.<locals>.<genexpr>aMappingaCaseInsensitiveDictalower_itemsanameaLookupDicta__init__u<lookup '%s'>agetu
requests.structures
~~~~~~~~~~~~~~~~~~~

Data structures that power Requests.
a__doc__u/usr/lib/python3/dist-packages/requests/structures.pya__file__a__spec__aoriginahas_locationa__cached__acompatTaOrderedDictaMappingaMutableMappinglaMutableMappingametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>urequests.structuresa__module__uA case-insensitive ``dict``-like object.

    Implements all methods and operations of
    ``MutableMapping`` as well as dict's ``copy``. Also
    provides ``lower_items``.

    All keys are expected to be strings. The structure remembers the
    case of the last key to be set, and ``iter(instance)``,
    ``keys()``, ``items()``, ``iterkeys()``, and ``iteritems()``
    will contain case-sensitive keys. However, querying and contains
    testing is case insensitive::

        cid = CaseInsensitiveDict()
        cid['Accept'] = 'application/json'
        cid['aCCEPT'] == 'application/json'  # True
        list(cid) == ['Accept']  # True

    For example, ``headers['content-encoding']`` will return the
    value of a ``'Content-Encoding'`` response header, regardless
    of how the header name was originally stored.

    If the constructor, ``.update``, or equality comparison
    operations are given keys that have equal ``.lower()``s, the
    behavior is undefined.
    a__qualname__TnuCaseInsensitiveDict.__init__a__setitem__uCaseInsensitiveDict.__setitem__uCaseInsensitiveDict.__getitem__a__delitem__uCaseInsensitiveDict.__delitem__a__iter__uCaseInsensitiveDict.__iter__a__len__uCaseInsensitiveDict.__len__uCaseInsensitiveDict.lower_itemsa__eq__uCaseInsensitiveDict.__eq__acopyuCaseInsensitiveDict.copya__repr__uCaseInsensitiveDict.__repr__a__orig_bases__TOdictuDictionary lookup object.uLookupDict.__init__uLookupDict.__repr__uLookupDict.__getitem__uLookupDict.getTa.0acasedkeyamappedvalueTa.0alowerkeyakeyvalu<module requests.structures>Ta__class__TaselfakeyTaselfaotherTaselfadataakwargsTaselfanamea__class__TaselfTaselfakeyavalueTaselfakeyadefaultu.requests.utils�3�aitemsuReturns an internal sequence dictionary update.la__len__alenafilenoaioaUnsupportedOperationaosafstatast_sizewbamodeawarningsawarnuRequests has determined the content-length for this request using the binary size of the file: however, the file has been opened in text mode (i.e. without the 'b' flag in the mode). This may lead to an incorrect content-length. In Requests 3.0, support will be removed for files in text mode.aFileModeWarningwoatellTEOSErrorpaseekatotal_lengthTllamaxanetrcTanetrcaNetrcParseErroraNetrcParseErroraNETRC_FILESapathaexpanduseru~/{}aexistsaurlparsed:astraasciianetlocasplitaauthenticatorsllTEImportErrorEAttributeErroruReturns the Requests tuple auth for a given url from netrc.anameabasestringw<l��������w>abasenameuTries to guess the filename of the given object.utoo many values to unpack (expected 2)aarchivew/amemberazipfileais_zipfileaZipFileanamelistatempfileagettempdirajoinTw/aextractTapathaextracted_pathuReplace nonexistent paths that look like they refer to a member of a zip
    archive with the location of an extracted copy of the target, or else
    just return the provided path unchanged.
    abytesucannot encode objects that are not 2-tuplesaOrderedDictuTake an object and test to see if it can be represented as a
    dictionary. Unless it can not be represented as such, return an
    OrderedDict, e.g.,

    ::

        >>> from_key_val_list([('key', 'val')])
        OrderedDict([('key', 'val')])
        >>> from_key_val_list('string')
        ValueError: cannot encode objects that are not 2-tuples
        >>> from_key_val_list({'key': 'val'})
        OrderedDict([('key', 'val')])

    :rtype: OrderedDict
    aMappinguTake an object and test to see if it can be represented as a
    dictionary. If it can be, return a list of tuples, e.g.,

    ::

        >>> to_key_val_list([('key', 'val')])
        [('key', 'val')]
        >>> to_key_val_list({'key': 'val'})
        [('key', 'val')]
        >>> to_key_val_list('string')
        ValueError: cannot encode objects that are not 2-tuples.

    :rtype: list
    a_parse_list_header:l��������nn:nlnw"aunquote_header_value:ll��������naresultaappenduParse lists as described by RFC 2068 Section 2.

    In particular, parse comma-separated lists where the elements of
    the list may include quoted-strings.  A quoted-string could
    contain a comma.  A non-quoted string could have quotes in the
    middle.  Quotes are removed automatically after parsing.

    It basically works like :func:`parse_set_header` just that items
    may appear multiple times and case sensitivity is preserved.

    The return value is a standard :class:`list`:

    >>> parse_list_header('token, "quoted value"')
    ['token', 'quoted value']

    To create a header from the :class:`list` again, use the
    :func:`dump_header` function.

    :param value: a string with a list header.
    :return: :class:`list`
    :rtype: list
    w=Tw=luParse lists of key, value pairs as described by RFC 2068 Section 2 and
    convert them into a python dict:

    >>> d = parse_dict_header('foo="is a fish", bar="as well"')
    >>> type(d) is dict
    True
    >>> sorted(d.items())
    [('bar', 'as well'), ('foo', 'is a fish')]

    If there is no value for a key it will be `None`:

    >>> parse_dict_header('key_without_value')
    {'key_without_value': None}

    To create a header from the :class:`dict` again, use the
    :func:`dump_header` function.

    :param value: a string with a dict header.
    :return: :class:`dict`
    :rtype: dict
    :nlnu\\areplaceTu\\w\Tu\"w"uUnquotes a header value.  (Reversal of :func:`quote_header_value`).
    This does not use the real unquoting but what browsers are actually
    using for quoting.

    :param value: the header value to unquote.
    :rtype: str
    avalueacookie_dictuReturns a key/value dictionary from a CookieJar.

    :param cj: CookieJar object to extract cookies from.
    :rtype: dict
    acookiejar_from_dictuReturns a CookieJar from a key/value dictionary.

    :param cj: CookieJar to insert cookies into.
    :param cookie_dict: Dict of key/values to insert into CookieJar.
    :rtype: CookieJar
    uIn requests 3.0, get_encodings_from_content will be removed. For more information, please see the discussion on issue #2266. (This warning should only appear once.)aDeprecationWarningareacompilewITu<meta.*?charset=["\']*(.+?)["\'>]TaflagsTu<meta.*?content=["\']*;?charset=(.+?)["\'>]Tu^<\?xml.*?encoding=["\']*(.+?)["\'>]afindalluReturns encodings from given content string.

    :param content: bytestring to extract encodings from.
    Tw;astrip:lnnu"' afindTw=aitems_to_stripaparams_dictaloweruReturns content type and parameters from given header

    :param header: string
    :return: tuple containing content type and dictionary of
         parameters
    agetTucontent-typea_parse_content_type_headeracharsetTu'"atextuISO-8859-1uReturns encodings from given HTTP Header Dict.

    :param headers: dictionary to extract encoding from.
    :rtype: str
    uStream decodes a iterator.wraencodingaiteratoracodecsagetincrementaldecoderTareplaceTaerrorsadecoderadecodeTctTafinalastream_decode_response_unicodeuIterate over slices of a string.aslice_lengthastringaposaiter_slicesuIn requests 3.0, get_unicode_from_response will be removed. For more information, please see the discussion on issue #2266. (This warning should only appear once.)aget_encoding_from_headersaheadersacontentDaerrorsareplaceuReturns the requested content back in unicode.

    :param r: Response object to get unicode content from.

    Tried:

    1. charset from content-type
    2. fall back and replace all unicode characters

    :rtype: str
    Tw%aparts:llnaisalnumlaInvalidURLuInvalid percent-escape sequence: '%s'aUNRESERVED_SET:lnnw%uuUn-escape any percent-escape sequences in a URI that are unreserved
    characters. This leaves all reserved, illegal and non-ASCII bytes encoded.

    :rtype: str
    aquoteaunquote_unreservedDasafeu!#$%&'()*+,/:;=?@[]~Dasafeu!#$&'()*+,/:;=?@[]~uRe-quote the given URI.

    This function passes the given URI through an unquote/quote cycle to
    ensure that it is fully and consistently quoted.

    :rtype: str
    astructaunpacku=Lasocketainet_atonadotted_netmaskuThis function allows you to check if an IP belongs to a network subnet

    Example: returns True if ip = 192.168.1.1 and net = 192.168.1.0/24
             returns False if ip = 192.168.1.1 and net = 192.168.100.0/24

    :rtype: bool
    l����l ainet_ntoaapacku>IuConverts mask from /xx format to xxx.xxx.xxx.xxx

    Example: if mask is 24 function returns 255.255.255.0

    :rtype: str
    aerroru
    :rtype: bool
    acountu
    Very simple check of the cidr format in no_proxy variable.

    :rtype: bool
    uSet the environment variable 'env_name' to 'value'

    Save previous value, yield, and then restore the previous value stored in
    the environment variable 'env_name'.

    If 'value' is None, do nothingaenvironaenv_nameaold_valueaset_environu<lambda>ushould_bypass_proxies.<locals>.<lambda>Tano_proxyahostnameano_proxyTw uTw,ais_ipv4_addressais_valid_cidraaddress_in_networkaparsedaportu:{}aendswithahost_with_porta__enter__a__exit__aproxy_bypassagaierrorTnnnabypassu
    Returns whether we should bypass proxies or not.

    :rtype: bool
    aupperu<genexpr>ushould_bypass_proxies.<locals>.<genexpr>ashould_bypass_proxiesagetproxiesu
    Return a dict of environment proxies.

    :rtype: dict
    aschemeTaallu://uall://aalluSelect a proxy for the url, if applicable.

    :param url: The url being for the request
    :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs
    u%s/%sa__version__u
    Return a string representing the default user agent.

    :rtype: str
    aCaseInsensitiveDictuUser-Agentadefault_user_agentuAccept-Encodingugzip, deflateaAcceptu*/*aConnectionukeep-aliveu
    :rtype: requests.structures.CaseInsensitiveDict
    u '"u, *<Tw;laurlTu<> '"areplace_charsalinkalinksuReturn a list of parsed link headers proxies.

    i.e. Link: <http:/.../front.jpeg>; rel=front; type="image/jpeg",<http://.../back.jpeg>; rel=back;type="image/jpeg"

    :rtype: list
    :nlnaBOM_UTF32_LEaBOM_UTF32_BEuutf-32:nlnaBOM_UTF8uutf-8-sigaBOM_UTF16_LEaBOM_UTF16_BEuutf-16a_nulluutf-8:nnla_null2uutf-16-be:lnluutf-16-lela_null3uutf-32-beuutf-32-leu
    :rtype: str
    utoo many values to unpack (expected 6)aurlunparseuGiven a URL that may or may not have a scheme, prepend the given scheme.
    Does not replace a present scheme with the one provided as an argument.

    :rtype: str
    aunquoteausernameapasswordTEAttributeErrorETypeErrorTupuGiven a url with authentication components, extract them into a tuple of
    username,password.

    :rtype: (str,str)
    a_CLEAN_HEADER_REGEX_BYTEa_CLEAN_HEADER_REGEX_STRamatchaInvalidHeaderuInvalid return character or leading space in header: %suValue for header {%s: %s} must be of type str or bytes, not %suVerifies that header value is a string which doesn't contain
    leading whitespace or return characters. This prevents unintended
    header injection.

    :param header: tuple, in the format (name, value).
    arsplitTw@lu
    Given a url remove the fragment and the authentication part.

    :rtype: str
    abodya_body_positionainteger_typesaUnrewindableBodyErrorTuAn error occurred when rewinding request body for redirect.TuUnable to rewind request body for redirect.uMove file pointer back to its recorded starting position
    so it can be read again on redirect.
    u
requests.utils
~~~~~~~~~~~~~~

This module provides utility functions that are used within Requests
that are also useful for external consumption.
a__doc__u/usr/lib/python3/dist-packages/requests/utils.pya__file__a__spec__aoriginahas_locationa__cached__acontextlibasysTa__version__Tacertsacertsa_internal_utilsTato_native_stringato_native_stringacompatTaparse_http_listaparse_http_listTaquoteaurlparseabytesastraOrderedDictaunquoteagetproxiesaproxy_bypassaurlunparseabasestringainteger_typesais_py3aproxy_bypass_environmentagetproxies_environmentaMappingais_py3aproxy_bypass_environmentagetproxies_environmentacookiesTacookiejar_from_dictastructuresTaCaseInsensitiveDictaexceptionsTaInvalidURLaInvalidHeaderaFileModeWarningaUnrewindableBodyErrorTu.netrca_netrcawhereaDEFAULT_CA_BUNDLE_PATHDahttpahttpslPl�aDEFAULT_PORTSadict_to_sequenceasuper_lenTFaget_netrc_authaguess_filenameaextract_zipped_pathsafrom_key_val_listato_key_val_listaparse_list_headeraparse_dict_headeradict_from_cookiejaraadd_dict_to_cookiejaraget_encodings_from_contentaget_unicode_from_responsePBwMwFwYwiwrwxw2wpw-wdw8wXwKwQwcwDwywlwEwSwOw3whwHwmw.wPwBwUwJwzwVwAw6wIwLwkw5wowaw0wZw7w_wgw1wTwGwfwewWwuwwwRwnwbwqwjwtw~wNwsw4w9wvwCarequote_uriacontextmanagerTnaget_environ_proxiesaselect_proxyTupython-requestsadefault_headersaparse_header_linkswaguess_json_utfaprepend_scheme_if_neededaget_auth_from_urlTc^\S[^\r\n]*$|^$Tu^\S[^\r\n]*$|^$acheck_header_validityaurldefragautharewind_bodyTa.0ahostTwku<module requests.utils>T
aheaderatokensacontent_typeaparamsaparams_dictaitems_to_stripaparamakeyavalueaindex_of_equalsTacjacookie_dictTaipanetaipaddranetaddrabitsanetmaskanetworkTaheaderanameavalueapatTanameTacjacookie_dictacookieTwdTamaskabitsTapathaarchiveamemberaprefixazip_fileatmpaextracted_pathTavalueTaurlaparsedaauthTaheadersacontent_typeaparamsTacontentacharset_reapragma_reaxml_reTaurlano_proxyTaurlaraise_errorsanetrcaNetrcParseErroranetrc_pathwfalocariasplitstrahosta_netrcalogin_iTwratried_encodingsaencodingTaobjanameTadataasampleanullcountTastring_ipTastring_networkamaskTastringaslice_lengthaposTavaluearesultaitemanameT	avaluealinksareplace_charsavalaurlaparamsalinkaparamakeyTavaluearesultaitemTaurlanew_schemeaschemeanetlocapathaparamsaqueryafragmentTauriasafe_with_percentasafe_without_percentTaprepared_requestabody_seekTaurlaproxiesaurlpartsaproxy_keysaproxyaproxy_keyTaenv_nameavalueavalue_changedaold_valueT	aurlano_proxyaget_proxyano_proxy_argaparsedaproxy_ipahost_with_portahostabypassTaiteratorwraitemadecoderachunkarvTwoatotal_lengthacurrent_positionafilenoTavalueais_filenameTauriapartswiwhwcTaurlaschemeanetlocapathaparamsaqueryafragment.requests_unixsocket.adapters�`aUnixHTTPConnectiona__init__TalocalhostTatimeoutaunix_socket_urlatimeoutasockuCreate an HTTP connection to a unix domain socket

        :param unix_socket_url: A URL with a scheme of 'http+unix' and the
        netloc is a percent-encoded path to a unix domain socket. E.g.:
        'http+unix://%2Ftmp%2Fprofilesvc.sock/status/pid'
        acloseasocketaAF_UNIXaSOCK_STREAMasettimeoutaunquoteaurlparseanetlocaconnectaUnixHTTPConnectionPoolasocket_pathaUnixAdapteraurllib3a_collectionsaRecentlyUsedContaineru<lambda>uUnixAdapter.__init__.<locals>.<lambda>Tadispose_funcapoolsagetaloweraschemeu%s does not support specifying proxiesa__name__alocka__enter__a__exit__Tnnnapoolapath_urlacleara__doc__u/usr/lib/python3/dist-packages/requests_unixsocket/adapters.pya__file__a__spec__aoriginahas_locationa__cached__lurequests.adaptersTaHTTPAdapteraHTTPAdapterurequests.compatTaurlparseaunquoteuhttp.clientaclientahttpliburequests.packagesTaurllib3aHTTPConnectionametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %su<metaclass>urequests_unixsocket.adaptersa__module__a__qualname__Tl<uUnixHTTPConnection.__init__a__del__uUnixHTTPConnection.__del__uUnixHTTPConnection.connecta__orig_bases__aconnectionpoolaHTTPConnectionPooluUnixHTTPConnectionPool.__init__a_new_connuUnixHTTPConnectionPool._new_connTl<luUnixAdapter.__init__Tnaget_connectionuUnixAdapter.get_connectionarequest_urluUnixAdapter.request_urluUnixAdapter.closeTwpu<module requests_unixsocket.adapters>Ta__class__TaselfTaselfasocket_pathatimeouta__class__Taselfatimeoutapool_connectionsaargsakwargsa__class__Taselfaunix_socket_urlatimeouta__class__Taselfasockasocket_pathTaselfaurlaproxiesaproxyapoolTaselfarequestaproxiesu.requests_unixsocketMaSessiona__init__amountaUnixAdapterasessiona_get_global_requests_moduleTarequestagetaheadapostapatchaputadeleteaoptionsamethodsaorig_methodsarequestsu<genexpr>umonkeypatch.__init__.<locals>.<genexpr>asysamodulesaselfarequestamethodaurlaallow_redirectsagetaheadapostadataajsonapatchaputadeleteaoptionsa__doc__u/usr/lib/python3/dist-packages/requests_unixsocket/__init__.pya__file__Lu/usr/lib/python3/dist-packages/requests_unixsocketa__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aadaptersTaUnixAdapterluhttp+unix://aDEFAULT_SCHEMEametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>arequests_unixsocketa__module__a__qualname__uSession.__init__a__orig_bases__TOobjectamonkeypatchumonkeypatch.__init__umonkeypatch._get_global_requests_modulea__enter__umonkeypatch.__enter__a__exit__umonkeypatch.__exit__TnnTnTa.0wmarequestsu<module requests_unixsocket>Ta__class__TaselfTaselfaargsarequestswmTaselfaurl_schemeaargsakwargsa__class__Taselfaurl_schemearequestswgwmTaurlakwargsTaurladataakwargsTaurladataajsonakwargsTamethodaurlakwargsasessionu.simplejson.compatlalatin1uPython 3 compatibility shims
a__doc__u/usr/lib/python3/dist-packages/simplejson/compat.pya__file__a__spec__aoriginahas_locationa__cached__asysaPY3areloadlareload_modulewbaStringIOaBytesIOatext_typeabinary_typeTOstrastring_typesTOintainteger_typesachraunichrl��������along_typeu<module simplejson.compat>Twsu.simplejsonBJ~acollectionslaOrderedDictuTaordered_dictlaordered_dicta_speedupsTamake_encoderamake_encoderuutf-8a_default_encoderaiterencodeaJSONEncoderaskipkeysaensure_asciiacheck_circularaallow_nanaindentaseparatorsaencodingadefaultause_decimalanamedtuple_as_objectatuple_as_arrayaiterable_as_arrayabigint_as_stringasort_keysaitem_sort_keyafor_jsonaignore_nanaint_as_string_bitcountafpawriteuSerialize ``obj`` as a JSON formatted stream to ``fp`` (a
    ``.write()``-supporting file-like object).

    If *skipkeys* is true then ``dict`` keys that are not basic types
    (``str``, ``unicode``, ``int``, ``long``, ``float``, ``bool``, ``None``)
    will be skipped instead of raising a ``TypeError``.

    If *ensure_ascii* is false, then the some chunks written to ``fp``
    may be ``unicode`` instances, subject to normal Python ``str`` to
    ``unicode`` coercion rules. Unless ``fp.write()`` explicitly
    understands ``unicode`` (as in ``codecs.getwriter()``) this is likely
    to cause an error.

    If *check_circular* is false, then the circular reference check
    for container types will be skipped and a circular reference will
    result in an ``OverflowError`` (or worse).

    If *allow_nan* is false, then it will be a ``ValueError`` to
    serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``)
    in strict compliance of the original JSON specification, instead of using
    the JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``). See
    *ignore_nan* for ECMA-262 compliant behavior.

    If *indent* is a string, then JSON array elements and object members
    will be pretty-printed with a newline followed by that string repeated
    for each level of nesting. ``None`` (the default) selects the most compact
    representation without any newlines. For backwards compatibility with
    versions of simplejson earlier than 2.1.0, an integer is also accepted
    and is converted to a string with that many spaces.

    If specified, *separators* should be an
    ``(item_separator, key_separator)`` tuple.  The default is ``(', ', ': ')``
    if *indent* is ``None`` and ``(',', ': ')`` otherwise.  To get the most
    compact JSON representation, you should specify ``(',', ':')`` to eliminate
    whitespace.

    *encoding* is the character encoding for str instances, default is UTF-8.

    *default(obj)* is a function that should return a serializable version
    of obj or raise ``TypeError``. The default simply raises ``TypeError``.

    If *use_decimal* is true (default: ``True``) then decimal.Decimal
    will be natively serialized to JSON with full precision.

    If *namedtuple_as_object* is true (default: ``True``),
    :class:`tuple` subclasses with ``_asdict()`` methods will be encoded
    as JSON objects.

    If *tuple_as_array* is true (default: ``True``),
    :class:`tuple` (and subclasses) will be encoded as JSON arrays.

    If *iterable_as_array* is true (default: ``False``),
    any object not in the above table that implements ``__iter__()``
    will be encoded as a JSON array.

    If *bigint_as_string* is true (default: ``False``), ints 2**53 and higher
    or lower than -2**53 will be encoded as strings. This is to avoid the
    rounding that happens in Javascript otherwise. Note that this is still a
    lossy operation that will not round-trip correctly and should be used
    sparingly.

    If *int_as_string_bitcount* is a positive number (n), then int of size
    greater than or equal to 2**n or lower than or equal to -2**n will be
    encoded as strings.

    If specified, *item_sort_key* is a callable used to sort the items in
    each dictionary. This is useful if you want to sort items other than
    in alphabetical order by key. This option takes precedence over
    *sort_keys*.

    If *sort_keys* is true (default: ``False``), the output of dictionaries
    will be sorted by item.

    If *for_json* is true (default: ``False``), objects with a ``for_json()``
    method will use the return value of that method for encoding as JSON
    instead of the object.

    If *ignore_nan* is true (default: ``False``), then out of range
    :class:`float` values (``nan``, ``inf``, ``-inf``) will be serialized as
    ``null`` in compliance with the ECMA-262 specification. If true, this will
    override *allow_nan*.

    To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
    ``.default()`` method to serialize additional types), specify it with
    the ``cls`` kwarg. NOTE: You should use *default* or *for_json* instead
    of subclassing whenever possible.

    aencodeuSerialize ``obj`` to a JSON formatted ``str``.

    If ``skipkeys`` is false then ``dict`` keys that are not basic types
    (``str``, ``unicode``, ``int``, ``long``, ``float``, ``bool``, ``None``)
    will be skipped instead of raising a ``TypeError``.

    If ``ensure_ascii`` is false, then the return value will be a
    ``unicode`` instance subject to normal Python ``str`` to ``unicode``
    coercion rules instead of being escaped to an ASCII ``str``.

    If ``check_circular`` is false, then the circular reference check
    for container types will be skipped and a circular reference will
    result in an ``OverflowError`` (or worse).

    If ``allow_nan`` is false, then it will be a ``ValueError`` to
    serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``) in
    strict compliance of the JSON specification, instead of using the
    JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).

    If ``indent`` is a string, then JSON array elements and object members
    will be pretty-printed with a newline followed by that string repeated
    for each level of nesting. ``None`` (the default) selects the most compact
    representation without any newlines. For backwards compatibility with
    versions of simplejson earlier than 2.1.0, an integer is also accepted
    and is converted to a string with that many spaces.

    If specified, ``separators`` should be an
    ``(item_separator, key_separator)`` tuple.  The default is ``(', ', ': ')``
    if *indent* is ``None`` and ``(',', ': ')`` otherwise.  To get the most
    compact JSON representation, you should specify ``(',', ':')`` to eliminate
    whitespace.

    ``encoding`` is the character encoding for str instances, default is UTF-8.

    ``default(obj)`` is a function that should return a serializable version
    of obj or raise TypeError. The default simply raises TypeError.

    If *use_decimal* is true (default: ``True``) then decimal.Decimal
    will be natively serialized to JSON with full precision.

    If *namedtuple_as_object* is true (default: ``True``),
    :class:`tuple` subclasses with ``_asdict()`` methods will be encoded
    as JSON objects.

    If *tuple_as_array* is true (default: ``True``),
    :class:`tuple` (and subclasses) will be encoded as JSON arrays.

    If *iterable_as_array* is true (default: ``False``),
    any object not in the above table that implements ``__iter__()``
    will be encoded as a JSON array.

    If *bigint_as_string* is true (not the default), ints 2**53 and higher
    or lower than -2**53 will be encoded as strings. This is to avoid the
    rounding that happens in Javascript otherwise.

    If *int_as_string_bitcount* is a positive number (n), then int of size
    greater than or equal to 2**n or lower than or equal to -2**n will be
    encoded as strings.

    If specified, *item_sort_key* is a callable used to sort the items in
    each dictionary. This is useful if you want to sort items other than
    in alphabetical order by key. This option takes precendence over
    *sort_keys*.

    If *sort_keys* is true (default: ``False``), the output of dictionaries
    will be sorted by item.

    If *for_json* is true (default: ``False``), objects with a ``for_json()``
    method will use the return value of that method for encoding as JSON
    instead of the object.

    If *ignore_nan* is true (default: ``False``), then out of range
    :class:`float` values (``nan``, ``inf``, ``-inf``) will be serialized as
    ``null`` in compliance with the ECMA-262 specification. If true, this will
    override *allow_nan*.

    To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
    ``.default()`` method to serialize additional types), specify it with
    the ``cls`` kwarg. NOTE: You should use *default* instead of subclassing
    whenever possible.

    aloadsareadaclsaobject_hookaparse_floataparse_intaparse_constantaobject_pairs_hookuDeserialize ``fp`` (a ``.read()``-supporting file-like object containing
    a JSON document) to a Python object.

    *encoding* determines the encoding used to interpret any
    :class:`str` objects decoded by this instance (``'utf-8'`` by
    default).  It has no effect when decoding :class:`unicode` objects.

    Note that currently only encodings that are a superset of ASCII work,
    strings of other encodings should be passed in as :class:`unicode`.

    *object_hook*, if specified, will be called with the result of every
    JSON object decoded and its return value will be used in place of the
    given :class:`dict`.  This can be used to provide custom
    deserializations (e.g. to support JSON-RPC class hinting).

    *object_pairs_hook* is an optional function that will be called with
    the result of any object literal decode with an ordered list of pairs.
    The return value of *object_pairs_hook* will be used instead of the
    :class:`dict`.  This feature can be used to implement custom decoders
    that rely on the order that the key and value pairs are decoded (for
    example, :func:`collections.OrderedDict` will remember the order of
    insertion). If *object_hook* is also defined, the *object_pairs_hook*
    takes priority.

    *parse_float*, if specified, will be called with the string of every
    JSON float to be decoded.  By default, this is equivalent to
    ``float(num_str)``. This can be used to use another datatype or parser
    for JSON floats (e.g. :class:`decimal.Decimal`).

    *parse_int*, if specified, will be called with the string of every
    JSON int to be decoded.  By default, this is equivalent to
    ``int(num_str)``.  This can be used to use another datatype or parser
    for JSON integers (e.g. :class:`float`).

    *parse_constant*, if specified, will be called with one of the
    following strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``.  This
    can be used to raise an exception if invalid JSON numbers are
    encountered.

    If *use_decimal* is true (default: ``False``) then it implies
    parse_float=decimal.Decimal for parity with ``dump``.

    To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
    kwarg. NOTE: You should use *object_hook* or *object_pairs_hook* instead
    of subclassing whenever possible.

    a_default_decoderadecodeaJSONDecoderakwuuse_decimal=True implies parse_float=DecimalaDecimaluDeserialize ``s`` (a ``str`` or ``unicode`` instance containing a JSON
    document) to a Python object.

    *encoding* determines the encoding used to interpret any
    :class:`str` objects decoded by this instance (``'utf-8'`` by
    default).  It has no effect when decoding :class:`unicode` objects.

    Note that currently only encodings that are a superset of ASCII work,
    strings of other encodings should be passed in as :class:`unicode`.

    *object_hook*, if specified, will be called with the result of every
    JSON object decoded and its return value will be used in place of the
    given :class:`dict`.  This can be used to provide custom
    deserializations (e.g. to support JSON-RPC class hinting).

    *object_pairs_hook* is an optional function that will be called with
    the result of any object literal decode with an ordered list of pairs.
    The return value of *object_pairs_hook* will be used instead of the
    :class:`dict`.  This feature can be used to implement custom decoders
    that rely on the order that the key and value pairs are decoded (for
    example, :func:`collections.OrderedDict` will remember the order of
    insertion). If *object_hook* is also defined, the *object_pairs_hook*
    takes priority.

    *parse_float*, if specified, will be called with the string of every
    JSON float to be decoded.  By default, this is equivalent to
    ``float(num_str)``. This can be used to use another datatype or parser
    for JSON floats (e.g. :class:`decimal.Decimal`).

    *parse_int*, if specified, will be called with the string of every
    JSON int to be decoded.  By default, this is equivalent to
    ``int(num_str)``.  This can be used to use another datatype or parser
    for JSON integers (e.g. :class:`float`).

    *parse_constant*, if specified, will be called with one of the
    following strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``.  This
    can be used to raise an exception if invalid JSON numbers are
    encountered.

    If *use_decimal* is true (default: ``False``) then it implies
    parse_float=decimal.Decimal for parity with ``dump``.

    To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
    kwarg. NOTE: You should use *object_hook* or *object_pairs_hook* instead
    of subclassing whenever possible.

    TadecoderadecoderTaencoderaencoderTascannerascannera_import_c_make_encoderac_scanstringapy_scanstringascanstringac_make_encoderac_encode_basestring_asciiapy_encode_basestring_asciiaencode_basestring_asciiac_make_scannerapy_make_scanneramake_scannerascanadecTnnnTaencodingaobject_hookaobject_pairs_hookTFtppnnuutf-8nTaskipkeysaensure_asciiacheck_circularaallow_nanaindentaseparatorsaencodingadefaultTOlistOdictOtupleuHelper function to pass to item_sort_key to sort simple
    elements to the top, then container elements.
    uJSON (JavaScript Object Notation) <http://json.org> is a subset of
JavaScript syntax (ECMA-262 3rd edition) used as a lightweight data
interchange format.

:mod:`simplejson` exposes an API familiar to users of the standard library
:mod:`marshal` and :mod:`pickle` modules. It is the externally maintained
version of the :mod:`json` library contained in Python 2.6, but maintains
compatibility back to Python 2.5 and (currently) has significant performance
advantages, even without using the optional C extension for speedups.

Encoding basic Python object hierarchies::

    >>> import simplejson as json
    >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
    '["foo", {"bar": ["baz", null, 1.0, 2]}]'
    >>> print(json.dumps("\"foo\bar"))
    "\"foo\bar"
    >>> print(json.dumps(u'\u1234'))
    "\u1234"
    >>> print(json.dumps('\\'))
    "\\"
    >>> print(json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True))
    {"a": 0, "b": 0, "c": 0}
    >>> from simplejson.compat import StringIO
    >>> io = StringIO()
    >>> json.dump(['streaming API'], io)
    >>> io.getvalue()
    '["streaming API"]'

Compact encoding::

    >>> import simplejson as json
    >>> obj = [1,2,3,{'4': 5, '6': 7}]
    >>> json.dumps(obj, separators=(',',':'), sort_keys=True)
    '[1,2,3,{"4":5,"6":7}]'

Pretty printing::

    >>> import simplejson as json
    >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent='    '))
    {
        "4": 5,
        "6": 7
    }

Decoding JSON::

    >>> import simplejson as json
    >>> obj = [u'foo', {u'bar': [u'baz', None, 1.0, 2]}]
    >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') == obj
    True
    >>> json.loads('"\\"foo\\bar"') == u'"foo\x08ar'
    True
    >>> from simplejson.compat import StringIO
    >>> io = StringIO('["streaming API"]')
    >>> json.load(io)[0] == 'streaming API'
    True

Specializing JSON object decoding::

    >>> import simplejson as json
    >>> def as_complex(dct):
    ...     if '__complex__' in dct:
    ...         return complex(dct['real'], dct['imag'])
    ...     return dct
    ...
    >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}',
    ...     object_hook=as_complex)
    (1+2j)
    >>> from decimal import Decimal
    >>> json.loads('1.1', parse_float=Decimal) == Decimal('1.1')
    True

Specializing JSON object encoding::

    >>> import simplejson as json
    >>> def encode_complex(obj):
    ...     if isinstance(obj, complex):
    ...         return [obj.real, obj.imag]
    ...     raise TypeError('Object of type %s is not JSON serializable' %
    ...                     obj.__class__.__name__)
    ...
    >>> json.dumps(2 + 1j, default=encode_complex)
    '[2.0, 1.0]'
    >>> json.JSONEncoder(default=encode_complex).encode(2 + 1j)
    '[2.0, 1.0]'
    >>> ''.join(json.JSONEncoder(default=encode_complex).iterencode(2 + 1j))
    '[2.0, 1.0]'


Using simplejson.tool from the shell to validate and pretty-print::

    $ echo '{"json":"obj"}' | python -m simplejson.tool
    {
        "json": "obj"
    }
    $ echo '{ 1.2:3.4}' | python -m simplejson.tool
    Expecting property name: line 1 column 3 (char 2)
a__doc__u/usr/lib/python3/dist-packages/simplejson/__init__.pya__file__Lu/usr/lib/python3/dist-packages/simplejsona__path__a__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aabsolute_importu3.16.0a__version__L
adumpadumpsaloadaloadsaJSONDecoderaJSONDecodeErroraJSONEncoderaOrderedDictasimple_firstaRawJSONa__all__uBob Ippolito <bob@redivi.com>a__author__adecimalTaDecimalaerrorsTaJSONDecodeErroraJSONDecodeErroraraw_jsonTaRawJSONaRawJSONTaJSONDecoderTaJSONEncoderaJSONEncoderForHTMLaJSONEncoderForHTMLa_import_OrderedDictTFtppnnuutf-8ntppFpnFpnTaskipkeysaensure_asciiacheck_circularaallow_nanaindentaseparatorsaencodingadefaultause_decimalanamedtuple_as_objectatuple_as_arrayaiterable_as_arrayabigint_as_stringaitem_sort_keyafor_jsonaignore_nanaint_as_string_bitcountTFtppnnnuutf-8ntppFpnFpnFadumpadumpsT
nnnnnnnFtpaloadTnnnnnnnFa_toggle_speedupsasimple_firstu<module simplejson>Tacollectionsaordered_dictTaenabledadecaencascanac_make_encoderTaobjafpaskipkeysaensure_asciiacheck_circularaallow_nanaclsaindentaseparatorsaencodingadefaultause_decimalanamedtuple_as_objectatuple_as_arrayabigint_as_stringasort_keysaitem_sort_keyafor_jsonaignore_nanaint_as_string_bitcountaiterable_as_arrayakwaiterableachunkTaobjaskipkeysaensure_asciiacheck_circularaallow_nanaclsaindentaseparatorsaencodingadefaultause_decimalanamedtuple_as_objectatuple_as_arrayabigint_as_stringasort_keysaitem_sort_keyafor_jsonaignore_nanaint_as_string_bitcountaiterable_as_arrayakwTafpaencodingaclsaobject_hookaparse_floataparse_intaparse_constantaobject_pairs_hookause_decimalanamedtuple_as_objectatuple_as_arrayakwT
wsaencodingaclsaobject_hookaparse_floataparse_intaparse_constantaobject_pairs_hookause_decimalakwTakv.simplejson.decoder��a_speedupsTascanstringlascanstringlaDEFAULT_ENCODINGaappenda_mwsaendaJSONDecodeErroruUnterminated string starting atagroupsutoo many values to unpack (expected 2)aunicodeaencodinga_appendw"w\uInvalid control character %r atwuuInvalid \X escape sequence %ruInvalid \uXXXX escape sequencel:llnwxwXll��l�lu\ull
aunichruScan the string s for a JSON string. End is the index of the
    character in s after the quote that started the JSON string.
    Unescapes all valid JSON string escape sequences and raises ValueError
    on attempt to decode an invalid string. If strict is False then literal
    control characters are allowed in the string.

    Returns a tuple of the decoded string and the index of the character in s
    after the end quote.asetdefaultw}uExpecting property name enclosed in double quotesastrictamemo_getw:a_wuExpecting ':' delimiterascan_onceapairsuw,uExpecting ',' delimiter or '}'w]uExpecting value or ']'uExpecting ',' delimiter or ']'aobject_hookaobject_pairs_hookaparse_floataparse_inta_CONSTANTSa__getitem__aparse_constantaJSONObjectaparse_objectaJSONArrayaparse_arrayaparse_stringamemoamake_scanneru
        *encoding* determines the encoding used to interpret any
        :class:`str` objects decoded by this instance (``'utf-8'`` by
        default).  It has no effect when decoding :class:`unicode` objects.

        Note that currently only encodings that are a superset of ASCII work,
        strings of other encodings should be passed in as :class:`unicode`.

        *object_hook*, if specified, will be called with the result of every
        JSON object decoded and its return value will be used in place of the
        given :class:`dict`.  This can be used to provide custom
        deserializations (e.g. to support JSON-RPC class hinting).

        *object_pairs_hook* is an optional function that will be called with
        the result of any object literal decode with an ordered list of pairs.
        The return value of *object_pairs_hook* will be used instead of the
        :class:`dict`.  This feature can be used to implement custom decoders
        that rely on the order that the key and value pairs are decoded (for
        example, :func:`collections.OrderedDict` will remember the order of
        insertion). If *object_hook* is also defined, the *object_pairs_hook*
        takes priority.

        *parse_float*, if specified, will be called with the string of every
        JSON float to be decoded.  By default, this is equivalent to
        ``float(num_str)``. This can be used to use another datatype or parser
        for JSON floats (e.g. :class:`decimal.Decimal`).

        *parse_int*, if specified, will be called with the string of every
        JSON int to be decoded.  By default, this is equivalent to
        ``int(num_str)``.  This can be used to use another datatype or parser
        for JSON integers (e.g. :class:`float`).

        *parse_constant*, if specified, will be called with one of the
        following strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``.  This
        can be used to raise an exception if invalid JSON numbers are
        encountered.

        *strict* controls the parser's behavior when it encounters an
        invalid control character in a string. The default setting of
        ``True`` means that unescaped control characters are parse errors, if
        ``False`` then control characters will be allowed in strings.

        aselfaraw_decodeuExtra datauReturn the Python representation of ``s`` (a ``str`` or ``unicode``
        instance containing a JSON document)

        uExpecting valueuInput string must be text, not bytesl��l�luaidxTaidxuDecode a JSON document from ``s`` (a ``str`` or ``unicode``
        beginning with a JSON document) and return a 2-tuple of the Python
        representation and the index in ``s`` where the document ended.
        Optionally, ``idx`` can be used to specify an offset in ``s`` where
        the JSON document begins.

        This can be used to decode a JSON document from a string that may
        have extraneous data at the end.

        uImplementation of JSONDecoder
a__doc__u/usr/lib/python3/dist-packages/simplejson/decoder.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importareasysastructacompatTaPY3aunichraPY3ascannerTamake_scanneraJSONDecodeErrora_import_c_scanstringac_scanstringLaJSONDecodera__all__aVERBOSEaMULTILINEaDOTALLaFLAGSTZZZa_floatconstantsutoo many values to unpack (expected 3)aNaNaPosInfaNegInfu-InfinityaInfinityacompileu(.*?)(["\\\x00-\x1f])aSTRINGCHUNKDw"w\w/wbwfwnwrwtw"w\w/www
w
w	aBACKSLASHuutf-8amatchajoinamaxunicodeapy_scanstringu[ \t\n\r]*aWHITESPACEu 	

aWHITESPACE_STRTOobjectametaclassa__prepare__aJSONDecoderu%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>usimplejson.decodera__module__uSimple JSON <http://json.org> decoder

    Performs the following translations in decoding by default:

    +---------------+-------------------+
    | JSON          | Python            |
    +===============+===================+
    | object        | dict              |
    +---------------+-------------------+
    | array         | list              |
    +---------------+-------------------+
    | string        | str, unicode      |
    +---------------+-------------------+
    | number (int)  | int, long         |
    +---------------+-------------------+
    | number (real) | float             |
    +---------------+-------------------+
    | true          | True              |
    +---------------+-------------------+
    | false         | False             |
    +---------------+-------------------+
    | null          | None              |
    +---------------+-------------------+

    It also understands ``NaN``, ``Infinity``, and ``-Infinity`` as
    their corresponding ``float`` values, which is outside the JSON spec.

    a__qualname__Tnnnnntna__init__uJSONDecoder.__init__adecodeuJSONDecoder.decodeuJSONDecoder.raw_decodea__orig_bases__u<module simplejson.decoder>T
astateascan_oncea_wa_wswsaendavaluesanextchara_appendavalueTa__class__Tastateaencodingastrictascan_onceaobject_hookaobject_pairs_hookamemoa_wa_wswsaendamemo_getapairsanextchararesultakeyavalueTaselfaencodingaobject_hookaparse_floataparse_intaparse_constantastrictaobject_pairs_hookTa_BYTESananainfTaselfwsa_wa_PY3aobjaendTwsaendaencodingastricta_ba_ma_joina_PY3a_maxunicodeachunksa_appendabeginachunkacontentaterminatoramsgaescacharaescXauniaesc2auni2Taselfwsaidxa_wa_PY3aord0.simplejson.encoder�5�uTa_speedupsla_speedupslaencode_basestring_asciiamake_encoderTnnuutf-8a__str__aHAS_UTF8asearchaunicodewsa__getnewargs__areplaceuencode_basestring.<locals>.replaceaESCAPEasubuReturn a JSON representation of a Python string

    aESCAPE_DCTagroupTlupy_encode_basestring_ascii.<locals>.replacew"aESCAPE_ASCIIuReturn an ASCII-only JSON representation of a Python string

    lu\u%04xl�l
l�l�u\u%04x\u%04xaskipkeysaensure_asciiacheck_circularaallow_nanasort_keysause_decimalanamedtuple_as_objectatuple_as_arrayaiterable_as_arrayabigint_as_stringaitem_sort_keyafor_jsonaignore_nanaint_as_string_bitcountastring_typesw aindentutoo many values to unpack (expected 2)aitem_separatorakey_separatorw,adefaultaencodinguConstructor for JSONEncoder, with sensible defaults.

        If skipkeys is false, then it is a TypeError to attempt
        encoding of keys that are not str, int, long, float or None.  If
        skipkeys is True, such items are simply skipped.

        If ensure_ascii is true, the output is guaranteed to be str
        objects with all incoming unicode characters escaped.  If
        ensure_ascii is false, the output will be unicode object.

        If check_circular is true, then lists, dicts, and custom encoded
        objects will be checked for circular references during encoding to
        prevent an infinite recursion (which would cause an OverflowError).
        Otherwise, no such check takes place.

        If allow_nan is true, then NaN, Infinity, and -Infinity will be
        encoded as such.  This behavior is not JSON specification compliant,
        but is consistent with most JavaScript based encoders and decoders.
        Otherwise, it will be a ValueError to encode such floats.

        If sort_keys is true, then the output of dictionaries will be
        sorted by key; this is useful for regression tests to ensure
        that JSON serializations can be compared on a day-to-day basis.

        If indent is a string, then JSON array elements and object members
        will be pretty-printed with a newline followed by that string repeated
        for each level of nesting. ``None`` (the default) selects the most compact
        representation without any newlines. For backwards compatibility with
        versions of simplejson earlier than 2.1.0, an integer is also accepted
        and is converted to a string with that many spaces.

        If specified, separators should be an (item_separator, key_separator)
        tuple.  The default is (', ', ': ') if *indent* is ``None`` and
        (',', ': ') otherwise.  To get the most compact JSON representation,
        you should specify (',', ':') to eliminate whitespace.

        If specified, default is a function that gets called for objects
        that can't otherwise be serialized.  It should return a JSON encodable
        version of the object or raise a ``TypeError``.

        If encoding is not None, then all input strings will be
        transformed into unicode using that encoding prior to JSON-encoding.
        The default is UTF-8.

        If use_decimal is true (default: ``True``), ``decimal.Decimal`` will
        be supported directly by the encoder. For the inverse, decode JSON
        with ``parse_float=decimal.Decimal``.

        If namedtuple_as_object is true (the default), objects with
        ``_asdict()`` methods will be encoded as JSON objects.

        If tuple_as_array is true (the default), tuple (and subclasses) will
        be encoded as JSON arrays.

        If *iterable_as_array* is true (default: ``False``),
        any object not in the above table that implements ``__iter__()``
        will be encoded as a JSON array.

        If bigint_as_string is true (not the default), ints 2**53 and higher
        or lower than -2**53 will be encoded as strings. This is to avoid the
        rounding that happens in Javascript otherwise.

        If int_as_string_bitcount is a positive number (n), then int of size
        greater than or equal to 2**n or lower than or equal to -2**n will be
        encoded as strings.

        If specified, item_sort_key is a callable used to sort the items in
        each dictionary. This is useful if you want to sort items other than
        in alphabetical order by key.

        If for_json is true (not the default), objects with a ``for_json()``
        method will use the return value of that method for encoding as JSON
        instead of the object.

        If *ignore_nan* is true (default: ``False``), then out of range
        :class:`float` values (``nan``, ``inf``, ``-inf``) will be serialized
        as ``null`` in compliance with the ECMA-262 specification. If true,
        this will override *allow_nan*.

        uObject of type %s is not JSON serializablea__name__uImplement this method in a subclass such that it returns
        a serializable object for ``o``, or calls the base implementation
        (to raise a ``TypeError``).

        For example, to support arbitrary iterators, you could
        implement default like this::

            def default(self, o):
                try:
                    iterable = iter(o)
                except TypeError:
                    pass
                else:
                    return list(iterable)
                return JSONEncoder.default(self, o)

        abinary_typeatext_typeaselfaencode_basestringaiterencodeDa_one_shottTOlistOtupleuReturn a JSON string representation of a Python data structure.

        >>> from simplejson import JSONEncoder
        >>> JSONEncoder().encode({"foo": ["bar", "baz"]})
        '{"foo": ["bar", "baz"]}'

        a_encoderuJSONEncoder.iterencode.<locals>._encoderaFLOAT_REPRaPosInfafloatstruJSONEncoder.iterencode.<locals>.floatstrl5ac_make_encoderadecimalaDecimala_make_iterencodeTaDecimalaclearuEncode the given object and yield each string
        representation as available.

        For example::

            for chunk in JSONEncoder().iterencode(bigobject):
                mysocket.write(chunk)

        aNaNaInfinityu-InfinityanulluOut of range float values are not JSON compliant: aJSONEncoderForHTMLwoa_one_shotTw&u\u0026Tw<u\u003cTw>u\u003eTu
u\u2028Tu
u\u2029uJSONEncoderForHTML.iterencodea_item_sort_keyacallableuitem_sort_key must be None or callableaitemgettera_int_as_string_bitcountaisinstanceainteger_typesuint_as_string_bitcount must be a positive integera_encode_intu_make_iterencode.<locals>._encode_inta_iterencode_listu_make_iterencode.<locals>._iterencode_lista_stringify_keyu_make_iterencode.<locals>._stringify_keya_iterencode_dictu_make_iterencode.<locals>._iterencode_dicta_iterencodeu_make_iterencode.<locals>._iterencodel��������astravaluealstu[]amarkersaidaValueErrorTuCircular reference detectedw[a_indenta_current_indent_levelw
a_item_separatorafirstaseparatorabufa_PY3a_encodingaRawJSONaencoded_jsonatrueafalseafloata_floatstra_use_decimala_for_jsonalista_namedtuple_as_objecta_asdicta_tuple_as_arrayatupleadictanewline_indentw]amarkeridakeya_skipkeysukeys must be str, int, float, bool or None, not %sadctu{}w{aitemsaiteritemsaappendwkasortTakeya_key_separatorw}a_iterable_as_arrayaitera_defaultuImplementation of JSONEncoder
a__doc__u/usr/lib/python3/dist-packages/simplejson/encoder.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importareaoperatorTaitemgetteracompatTaunichrabinary_typeatext_typeastring_typesainteger_typesaPY3aunichraPY3a_import_speedupsac_encode_basestring_asciiadecoderTaPosInfaraw_jsonTaRawJSONacompileTu[\x00-\x1f\\"]Tu([\\"]|[^\ -~])Tu[\x80-\xff]Dw\w"www
w
w	u\\u\"u\bu\fu\nu\ru\t;ll lwiasetdefaultareprapy_encode_basestring_asciiTOobjectametaclassa__prepare__aJSONEncodera__getitem__u%s.__prepare__() must return a mapping, not %su<metaclass>usimplejson.encodera__module__uExtensible JSON <http://json.org> encoder for Python data structures.

    Supports the following objects and types by default:

    +-------------------+---------------+
    | Python            | JSON          |
    +===================+===============+
    | dict, namedtuple  | object        |
    +-------------------+---------------+
    | list, tuple       | array         |
    +-------------------+---------------+
    | str, unicode      | string        |
    +-------------------+---------------+
    | int, long, float  | number        |
    +-------------------+---------------+
    | True              | true          |
    +-------------------+---------------+
    | False             | false         |
    +-------------------+---------------+
    | None              | null          |
    +-------------------+---------------+

    To extend this to recognize other objects, subclass and implement a
    ``.default()`` method with another method that returns a serializable
    object for ``o`` if possible, otherwise it should call the superclass
    implementation (to raise ``TypeError``).

    a__qualname__u, u: TFtppFnnuutf-8ntppFnFpnFa__init__uJSONEncoder.__init__uJSONEncoder.defaultaencodeuJSONEncoder.encodeTFuJSONEncoder.iterencodea__orig_bases__uAn encoder that produces JSON safe to embed in HTML.

    To embed JSON content in, say, a script tag on a web page, the
    characters &, < and > should be escaped. They cannot be escaped
    with the usual entities (e.g. &amp;) because they are not expanded
    within <script> tags.

    This class also escapes the line separator and paragraph separator
    characters U+2028 and U+2029, irrespective of the ensure_ascii setting,
    as these characters are not valid in JavaScript strings (see
    http://timelessrepo.com/json-isnt-a-javascript-subset).
    uJSONEncoderForHTML.encodeu<module simplejson.encoder>Ta__class__Taselfaskipkeysaensure_asciiacheck_circularaallow_nanasort_keysaindentaseparatorsaencodingadefaultause_decimalanamedtuple_as_objectatuple_as_arrayabigint_as_stringaitem_sort_keyafor_jsonaignore_nanaint_as_string_bitcountaiterable_as_arrayTavalueaskip_quotinga_int_as_string_bitcountainteger_typesastrTa_int_as_string_bitcountainteger_typesastrTwoa_orig_encodera_encodingT!woa_current_indent_levelafor_jsonachunka_asdictamarkeridaisinstanceastring_typesa_encodera_PY3a_encodingainteger_typesa_encode_intafloata_floatstra_for_jsona_iterencodealista_iterencode_lista_namedtuple_as_objecta_iterencode_dicta_tuple_as_arrayatupleadicta_use_decimalaDecimalastra_iterable_as_arrayaiteramarkersaidaValueErrora_defaultTaDecimalaValueErrora_PY3a_defaulta_encode_inta_encodera_encodinga_floatstra_for_jsona_iterable_as_arraya_iterencodea_iterencode_dicta_iterencode_lista_namedtuple_as_objecta_tuple_as_arraya_use_decimaladictafloataidainteger_typesaisinstanceaiteralistamarkersastrastring_typesatupleT-adcta_current_indent_levelamarkeridanewline_indentaitem_separatorafirstaiteritemsaitemswkwvakeyavalueafor_jsonachunksa_asdictachunkamarkersaidaValueErrora_indenta_item_separatora_PY3a_item_sort_keyaisinstanceastring_typesa_stringify_keya_encodera_key_separatora_encodingainteger_typesa_encode_intafloata_floatstra_use_decimalaDecimalastra_for_jsona_iterencodealista_iterencode_lista_namedtuple_as_objecta_iterencode_dicta_tuple_as_arrayatupleadictTaDecimalaValueErrora_PY3a_encode_inta_encodera_encodinga_floatstra_for_jsona_indenta_item_separatora_item_sort_keya_iterencodea_iterencode_dicta_iterencode_lista_key_separatora_namedtuple_as_objecta_stringify_keya_tuple_as_arraya_use_decimaladictafloataidainteger_typesaisinstancealistamarkersastrastring_typesatupleT&alsta_current_indent_levelamarkeridabufanewline_indentaseparatorafirstavalueafor_jsonachunksa_asdictachunkamarkersaidaValueErrora_indenta_item_separatoraisinstanceastring_typesa_encodera_PY3a_encodingainteger_typesa_encode_intafloata_floatstra_use_decimalaDecimalastra_for_jsona_iterencodealista_iterencode_lista_namedtuple_as_objecta_iterencode_dicta_tuple_as_arrayatupleadictTaDecimalaValueErrora_PY3a_encode_inta_encodera_encodinga_floatstra_for_jsona_indenta_item_separatora_iterencodea_iterencode_dicta_iterencode_lista_namedtuple_as_objecta_tuple_as_arraya_use_decimaladictafloataidainteger_typesaisinstancealistamarkersastrastring_typesatupleT$amarkersa_defaulta_encodera_indenta_floatstra_key_separatora_item_separatora_sort_keysa_skipkeysa_one_shota_use_decimala_namedtuple_as_objecta_tuple_as_arraya_int_as_string_bitcounta_item_sort_keya_encodinga_for_jsona_iterable_as_arraya_PY3aValueErrorastring_typesaDecimaladictafloataidainteger_typesaisinstancealistastratupleaitera_encode_inta_iterencode_lista_stringify_keya_iterencode_dicta_iterencodeTakeyaisinstanceastring_typesa_PY3a_encodingastrafloata_floatstrainteger_typesa_use_decimalaDecimala_skipkeysTaDecimala_PY3a_encodinga_floatstra_skipkeysa_use_decimalafloatainteger_typesaisinstanceastrastring_typesTaselfwoTaselfwoa_encodingachunksTaselfwoachunksTwsa_PY3a_qareplaceTwoaallow_nanaignore_nana_repra_infa_neginfatextT	aselfwoa_one_shotamarkersa_encoderafloatstrakey_memoaint_as_string_bitcounta_iterencodeTaselfwoa_one_shotachunksachunka__class__Twsa_PY3areplaceTamatchTamatchwswnas1as2.simplejson.errorsu9acountw
llarindexalinecolutoo many values to unpack (expected 2)areplaceu%ru%s: line %d column %d (char %d)u%s: line %d column %d - line %d column %d (char %d - %d)a__init__aerrmsgTaendamsgadocaposaendalinenoacolnoaendlinenoaendcolnoTnnuError classes used by simplejson
a__doc__u/usr/lib/python3/dist-packages/simplejson/errors.pya__file__a__spec__aoriginahas_locationa__cached__LaJSONDecodeErrora__all__TnTEValueErrorametaclassa__prepare__aJSONDecodeErrora__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>usimplejson.errorsa__module__uSubclass of ValueError with the following additional properties:

    msg: The unformatted error message
    doc: The JSON document being parsed
    pos: The start index of doc where parsing failed
    end: The end index of doc where parsing failed (may be None)
    lineno: The line corresponding to pos
    colno: The column corresponding to pos
    endlineno: The line corresponding to end (may be None)
    endcolno: The column corresponding to end (may be None)

    a__qualname__uJSONDecodeError.__init__a__reduce__uJSONDecodeError.__reduce__a__orig_bases__u<module simplejson.errors>Ta__class__TaselfamsgadocaposaendTaselfT	amsgadocaposaendalinenoacolnoafmtaendlinenoaendcolnoTadocaposalinenoacolnou.simplejson.ordered_dict`^uexpected at most 1 arguments, got %da_OrderedDict__endaclearaupdatea_OrderedDict__maplla__setitem__aselfa__delitem__apoputoo many values to unpack (expected 3)acurrla__iter__uOrderedDict.__iter__a__reversed__uOrderedDict.__reversed__udictionary is emptyanextacopyutoo many values to unpack (expected 2)u%s()a__name__u%s(%r)aitemswdaOrderedDicta__eq__u<genexpr>uOrderedDict.__eq__.<locals>.<genexpr>uDrop-in replacement for collections.OrderedDict by Raymond Hettinger

http://code.activestate.com/recipes/576693/

a__doc__u/usr/lib/python3/dist-packages/simplejson/ordered_dict.pya__file__a__spec__aoriginahas_locationa__cached__aUserDictTaDictMixinaDictMixinametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %su<metaclass>usimplejson.ordered_dicta__module__a__qualname__a__init__uOrderedDict.__init__uOrderedDict.clearuOrderedDict.__setitem__uOrderedDict.__delitem__TtapopitemuOrderedDict.popitema__reduce__uOrderedDict.__reduce__akeysuOrderedDict.keysasetdefaultavaluesaiterkeysaitervaluesaiteritemsa__repr__uOrderedDict.__repr__uOrderedDict.copyaclassmethodTnafromkeysuOrderedDict.fromkeysuOrderedDict.__eq__a__ne__uOrderedDict.__ne__a__orig_bases__Ta.0wpwqu<listcomp>Twkaselfu<module simplejson.ordered_dict>Ta__class__TaselfakeyaprevanextTaselfaotherTaselfaargsakwdsTaselfaendacurrTaselfaitemsatmpainst_dictTaselfTaselfakeyavalueaendacurrTaselfaendTaclsaiterableavaluewdakeyTaselfalastakeyavalueu.simplejson.raw_jsonaencoded_jsonuImplementation of RawJSON
a__doc__u/usr/lib/python3/dist-packages/simplejson/raw_json.pya__file__a__spec__aoriginahas_locationa__cached__TOobjectametaclassla__prepare__aRawJSONa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>usimplejson.raw_jsona__module__uWrap an encoded JSON document for direct embedding in the output

    a__qualname__a__init__uRawJSON.__init__a__orig_bases__u<module simplejson.raw_json>Ta__class__Taselfaencoded_jsonu.simplejson.scannerDQa_speedupsTamake_scannerlamake_scannerlaparse_objectaparse_arrayaparse_stringaNUMBER_REamatchaencodingastrictaparse_floataparse_intaparse_constantaobject_hookaobject_pairs_hookamemoa_scan_onceupy_make_scanner.<locals>._scan_onceascan_onceupy_make_scanner.<locals>.scan_onceaJSONDecodeErroruExpecting valuew"w{w[wnlanullaidxwtatruewflafalseamatch_numberagroupsutoo many values to unpack (expected 3)uaendwNlaNaNTaNaNwIlaInfinityTaInfinityw-l	u-InfinityTu-InfinityaclearuJSON token scanner
a__doc__u/usr/lib/python3/dist-packages/simplejson/scanner.pya__file__a__spec__aoriginahas_locationa__cached__areaerrorsTaJSONDecodeErrora_import_c_make_scannerac_make_scannerLamake_scanneraJSONDecodeErrora__all__acompileu(-?(?:0|[1-9]\d*))(\.\d+)?([eE][-+]?\d+)?aVERBOSEaMULTILINEaDOTALLapy_make_scanneru<module simplejson.scanner>Tastringaidxaerrmsganextcharwmaintegerafracaexparesaparse_stringaencodingastrictaparse_objecta_scan_onceaobject_hookaobject_pairs_hookamemoaparse_arrayamatch_numberaparse_floataparse_intaparse_constantT
a_scan_onceaencodingamatch_numberamemoaobject_hookaobject_pairs_hookaparse_arrayaparse_constantaparse_floataparse_intaparse_objectaparse_stringastrictTacontextaparse_objectaparse_arrayaparse_stringamatch_numberaencodingastrictaparse_floataparse_intaparse_constantaobject_hookaobject_pairs_hookamemoa_scan_onceascan_onceTastringaidxa_scan_onceamemoTa_scan_onceamemo.sixI:#a__doc__uAdd documentation to a function.asysamodulesuImport module, returning the module after the last dot.anamea_resolveadelattraMovedModulea__init__aPY3amoda_import_modulea_LazyModuleLa__doc__a__name__a_moved_attributesaMovedAttributeaattraknown_modulesaselfw.uThis loader does not know module a_SixMetaPathImporter__get_modulea__loader__a__path__u
        Return true, if the named module is a package.

        We need this method to get correct spec objects with
        Python 3.4 (see PEP451)
        uReturn None

        Required, if is_package is implementedLaparseaerrorarequestaresponsearobotparsera_MovedItemsuAdd an item to six.moves.amovesuno such move, %ruRemove item from six.moves.anexta__mro__a__call__u<genexpr>ucallable.<locals>.<genexpr>aim_funcatypesaMethodTypea__next__akeysavaluesaitemsalistsaiterkeysaitervaluesaiteritemsaiterlistsaencodeTulatin-1aunicodeareplaceTu\\u\\\\aunicode_escapela_assertCountEquala_assertRaisesRegexa_assertRegexa_assertNotRegexa__traceback__awith_tracebacka_getframeTlaf_globalsaf_localsa_code_a_globs_a_locs_aframeuexec _code_ in _globs_, _locs_u<string>aexecuExecute code in a namespace.afileastdoutawriteuprint_.<locals>.writeapopTasepnusep must be None or a stringTaendnuend must be None or a stringuinvalid keyword arguments to print()Tw
Tw w
w aargsutoo many values to unpack (expected 2)asepuThe new-style print function for Python 2.4 and 2.5.abasestringafpaencodingaerrorsastrictTOtypeametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>asixa__module__uwith_metaclass.<locals>.metaclassa__qualname__a__new__uwith_metaclass.<locals>.metaclass.__new__aclassmethoduwith_metaclass.<locals>.metaclass.__prepare__a__orig_bases__atemporary_classTuCreate a base class with a metaclass.aversion_info:nlnTllaresolve_basesabasesametawdawrapperuadd_metaclass.<locals>.wrapperuClass decorator for creating a class with a metaclass.acopyagetTa__slots__aorig_varsTa__dict__nTa__weakref__na__bases__atext_typeabinary_typeunot expecting type '%s'uCoerce **s** to six.binary_type.

    For Python 2:
      - `unicode` -> encoded to `str`
      - `str` -> `str`

    For Python 3:
      - `str` -> encoded to `bytes`
      - `bytes` -> `bytes`
    aPY2adecodeuCoerce *s* to `str`.

    For Python 2:
      - `unicode` -> encoded to `str`
      - `str` -> `str`

    For Python 3:
      - `str` -> `str`
      - `bytes` -> decoded to `str`
    uCoerce *s* to six.text_type.

    For Python 2:
      - `unicode` -> `unicode`
      - `str` -> `unicode`

    For Python 3:
      - `str` -> `str`
      - `bytes` -> decoded to `str`
    a__str__u@python_2_unicode_compatible cannot be applied to %s because it doesn't define __str__().a__unicode__u<lambda>upython_2_unicode_compatible.<locals>.<lambda>aklassu
    A class decorator that defines __unicode__ and __str__ methods under Python 2.
    Under Python 3 it does nothing.

    To support Python 2 and 3 with a single code base, define a __str__ method
    returning text and apply this decorator to the class.
    Tuutf-8uUtilities for writing code that runs on Python 2 and 3u/usr/lib/python3/dist-packages/six.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importafunctoolsaitertoolsaoperatoruBenjamin Peterson <benjamin@python.org>a__author__u1.14.0a__version__aPY34TOstrastring_typesTOintainteger_typesaclass_typesq�������aMAXSIZEa_add_docTOobjecta_LazyDescru_LazyDescr.__init__a__get__u_LazyDescr.__get__TnuMovedModule.__init__uMovedModule._resolvea__getattr__uMovedModule.__getattr__aModuleTypeu_LazyModule.__init__a__dir__u_LazyModule.__dir__TnnuMovedAttribute.__init__uMovedAttribute._resolvea_SixMetaPathImporteru
    A meta path importer to import six.moves and its submodules.

    This class implements a PEP302 finder and loader. It should be compatible
    with Python 2.5 and all existing versions of Python3
    u_SixMetaPathImporter.__init__a_add_moduleu_SixMetaPathImporter._add_modulea_get_moduleu_SixMetaPathImporter._get_moduleafind_moduleu_SixMetaPathImporter.find_modulea__get_moduleu_SixMetaPathImporter.__get_moduleaload_moduleu_SixMetaPathImporter.load_moduleais_packageu_SixMetaPathImporter.is_packageaget_codeu_SixMetaPathImporter.get_codeaget_sourceTasixa_importeruLazy loading of moved objectsTacStringIOacStringIOaioaStringIOTafilteraitertoolsabuiltinsaifilterafilterTafilterfalseaitertoolsaitertoolsaifilterfalseafilterfalseTainputa__builtin__abuiltinsaraw_inputainputTainterna__builtin__asysTamapaitertoolsabuiltinsaimapamapTagetcwdaosaosagetcwduagetcwdTagetcwdbaosaosagetcwdagetcwdbTagetoutputacommandsasubprocessTarangea__builtin__abuiltinsaxrangearangeareload_modulea__builtin__aimportlibaimpareloadTareducea__builtin__afunctoolsTashlex_quoteapipesashlexaquoteTaStringIOaStringIOaioTaUserDictaUserDictacollectionsTaUserListaUserListacollectionsTaUserStringaUserStringacollectionsTaxrangea__builtin__abuiltinsaxrangearangeTazipaitertoolsabuiltinsaizipazipTazip_longestaitertoolsaitertoolsaizip_longestazip_longestTabuiltinsa__builtin__TaconfigparseraConfigParserTacollections_abcacollectionsucollections.abcTacopyregacopy_regTadbm_gnuagdbmudbm.gnuTadbm_ndbmadbmudbm.ndbmTa_dummy_threadadummy_threada_dummy_threadTahttp_cookiejaracookielibuhttp.cookiejarTahttp_cookiesaCookieuhttp.cookiesTahtml_entitiesahtmlentitydefsuhtml.entitiesTahtml_parseraHTMLParseruhtml.parserTahttp_clientahttplibuhttp.clientTaemail_mime_baseuemail.MIMEBaseuemail.mime.baseTaemail_mime_imageuemail.MIMEImageuemail.mime.imageTaemail_mime_multipartuemail.MIMEMultipartuemail.mime.multipartTaemail_mime_nonmultipartuemail.MIMENonMultipartuemail.mime.nonmultipartTaemail_mime_textuemail.MIMETextuemail.mime.textTaBaseHTTPServeraBaseHTTPServeruhttp.serverTaCGIHTTPServeraCGIHTTPServeruhttp.serverTaSimpleHTTPServeraSimpleHTTPServeruhttp.serverTacPickleacPickleapickleTaqueueaQueueTareprlibareprTasocketserveraSocketServerTa_threadathreada_threadTatkinteraTkinterTatkinter_dialogaDialogutkinter.dialogTatkinter_filedialogaFileDialogutkinter.filedialogTatkinter_scrolledtextaScrolledTextutkinter.scrolledtextTatkinter_simpledialogaSimpleDialogutkinter.simpledialogTatkinter_tixaTixutkinter.tixTatkinter_ttkattkutkinter.ttkTatkinter_constantsaTkconstantsutkinter.constantsTatkinter_dndaTkdndutkinter.dndTatkinter_colorchooseratkColorChooserutkinter.colorchooserTatkinter_commondialogatkCommonDialogutkinter.commondialogTatkinter_tkfiledialogatkFileDialogutkinter.filedialogTatkinter_fontatkFontutkinter.fontTatkinter_messageboxatkMessageBoxutkinter.messageboxTatkinter_tksimpledialogatkSimpleDialogutkinter.simpledialogTaurllib_parseusix.moves.urllib_parseuurllib.parseTaurllib_errorusix.moves.urllib_erroruurllib.errorTaurllibusix.moves.urllibusix.moves.urllibTaurllib_robotparserarobotparseruurllib.robotparserTaxmlrpc_clientaxmlrpclibuxmlrpc.clientTaxmlrpc_serveraSimpleXMLRPCServeruxmlrpc.serverumoves.Tusix.movesaModule_six_moves_urllib_parseuLazy loading of moved objects in six.moves.urllib_parseTaParseResultaurlparseuurllib.parseTaSplitResultaurlparseuurllib.parseTaparse_qsaurlparseuurllib.parseTaparse_qslaurlparseuurllib.parseTaurldefragaurlparseuurllib.parseTaurljoinaurlparseuurllib.parseTaurlparseaurlparseuurllib.parseTaurlsplitaurlparseuurllib.parseTaurlunparseaurlparseuurllib.parseTaurlunsplitaurlparseuurllib.parseTaquoteaurllibuurllib.parseTaquote_plusaurllibuurllib.parseTaunquoteaurllibuurllib.parseTaunquote_plusaurllibuurllib.parseTaunquote_to_bytesaurllibuurllib.parseaunquoteaunquote_to_bytesTaurlencodeaurllibuurllib.parseTasplitqueryaurllibuurllib.parseTasplittagaurllibuurllib.parseTasplituseraurllibuurllib.parseTasplitvalueaurllibuurllib.parseTauses_fragmentaurlparseuurllib.parseTauses_netlocaurlparseuurllib.parseTauses_paramsaurlparseuurllib.parseTauses_queryaurlparseuurllib.parseTauses_relativeaurlparseuurllib.parsea_urllib_parse_moved_attributesTusix.moves.urllib_parseumoves.urllib_parseumoves.urllib.parseaModule_six_moves_urllib_erroruLazy loading of moved objects in six.moves.urllib_errorTaURLErroraurllib2uurllib.errorTaHTTPErroraurllib2uurllib.errorTaContentTooShortErroraurllibuurllib.errora_urllib_error_moved_attributesTusix.moves.urllib.errorumoves.urllib_errorumoves.urllib.erroraModule_six_moves_urllib_requestuLazy loading of moved objects in six.moves.urllib_requestTaurlopenaurllib2uurllib.requestTainstall_openeraurllib2uurllib.requestTabuild_openeraurllib2uurllib.requestTapathname2urlaurllibuurllib.requestTaurl2pathnameaurllibuurllib.requestTagetproxiesaurllibuurllib.requestTaRequestaurllib2uurllib.requestTaOpenerDirectoraurllib2uurllib.requestTaHTTPDefaultErrorHandleraurllib2uurllib.requestTaHTTPRedirectHandleraurllib2uurllib.requestTaHTTPCookieProcessoraurllib2uurllib.requestTaProxyHandleraurllib2uurllib.requestTaBaseHandleraurllib2uurllib.requestTaHTTPPasswordMgraurllib2uurllib.requestTaHTTPPasswordMgrWithDefaultRealmaurllib2uurllib.requestTaAbstractBasicAuthHandleraurllib2uurllib.requestTaHTTPBasicAuthHandleraurllib2uurllib.requestTaProxyBasicAuthHandleraurllib2uurllib.requestTaAbstractDigestAuthHandleraurllib2uurllib.requestTaHTTPDigestAuthHandleraurllib2uurllib.requestTaProxyDigestAuthHandleraurllib2uurllib.requestTaHTTPHandleraurllib2uurllib.requestTaHTTPSHandleraurllib2uurllib.requestTaFileHandleraurllib2uurllib.requestTaFTPHandleraurllib2uurllib.requestTaCacheFTPHandleraurllib2uurllib.requestTaUnknownHandleraurllib2uurllib.requestTaHTTPErrorProcessoraurllib2uurllib.requestTaurlretrieveaurllibuurllib.requestTaurlcleanupaurllibuurllib.requestTaURLopeneraurllibuurllib.requestTaFancyURLopeneraurllibuurllib.requestTaproxy_bypassaurllibuurllib.requestTaparse_http_listaurllib2uurllib.requestTaparse_keqv_listaurllib2uurllib.requesta_urllib_request_moved_attributesTusix.moves.urllib.requestumoves.urllib_requestumoves.urllib.requestaModule_six_moves_urllib_responseuLazy loading of moved objects in six.moves.urllib_responseTaaddbaseaurllibuurllib.responseTaaddclosehookaurllibuurllib.responseTaaddinfoaurllibuurllib.responseTaaddinfourlaurllibuurllib.responsea_urllib_response_moved_attributesTusix.moves.urllib.responseumoves.urllib_responseumoves.urllib.responseaModule_six_moves_urllib_robotparseruLazy loading of moved objects in six.moves.urllib_robotparserTaRobotFileParserarobotparseruurllib.robotparsera_urllib_robotparser_moved_attributesTusix.moves.urllib.robotparserumoves.urllib_robotparserumoves.urllib.robotparseraModule_six_moves_urllibuCreate a six.moves.urllib namespace that resembles the Python 3 namespaceTumoves.urllib_parseaparseTumoves.urllib_erroraerrorTumoves.urllib_requestarequestTumoves.urllib_responsearesponseTumoves.urllib_robotparserarobotparseruModule_six_moves_urllib.__dir__Tusix.moves.urllibumoves.urllibaadd_movearemove_movea__func__a_meth_funca__self__a_meth_selfa__closure__a_func_closurea__code__a_func_codea__defaults__a_func_defaultsa__globals__a_func_globalsaim_selfafunc_closureafunc_codeafunc_defaultsafunc_globalsaadvance_iteratoracallableaget_unbound_functionacreate_bound_methodacreate_unbound_methodaIteratoruIterator.nextuGet the function out of a possibly unbound functionaattrgetteraget_method_functionaget_method_selfaget_function_closureaget_function_codeaget_function_defaultsaget_function_globalsamethodcallerTakeysaviewkeysTavaluesaviewvaluesTaitemsaviewitemsTaviewkeysTaviewvaluesTaviewitemsuReturn an iterator over the keys of a dictionary.uReturn an iterator over the values of a dictionary.uReturn an iterator over the (key, value) pairs of a dictionary.uReturn an iterator over the (key, [values]) pairs of a dictionary.wbwuachraunichrastructaStructTu>Bapackaint2byteaitemgetterTlabyte2intagetitemaindexbytesaiteraiterbytesaioaStringIOaBytesIOaassertCountEqualaassertRaisesRegexaassertRegexaassertNotRegexapartialaimapaordaassertItemsEqualaassertRaisesRegexpaassertRegexpMatchesaassertNotRegexpMatchesuByte literaluText literalabuiltinsaexec_areraiseTudef reraise(tp, value, tb=None):
    try:
        raise tp, value, tb
    finally:
        tb = None
Tudef raise_from(value, from_value):
    try:
        raise value from from_value
    finally:
        value = None
aprintaprint_uReraise an exception.awrapsawith_metaclassaadd_metaclassTuutf-8astrictaensure_binaryaensure_straensure_textapython_2_unicode_compatiblea__package__Ta__spec__asubmodule_search_locationsameta_pathwiaimporteraappendTa.0aklassTaselfu<listcomp>Taattru<module six>Ta__class__TaselfaattrsTaselfaobjatparesultTaselfafullnameTaselfaattra_moduleavalueTaselfanameTaselfanamea__class__Taselfanameaoldanewa__class__Taselfanameaold_modanew_modaold_attranew_attra__class__Taselfasix_module_nameTaclsanameathis_baseswdaresolved_basesabasesametaTabasesametaTaclsanameathis_basesametaabasesTafuncadocTaselfamodafullnamesafullnameTanameTaselfamoduleTametaclassawrapperTamoveTaitTaselfaargsakwargsTwsTabsTaobjTafuncaobjTafuncaclsTwsaencodingaerrorsTa_code_a_globs_a_locs_aframeTaselfafullnameapathTaunboundTabufwiTwdakwTaselfafullnameamodTaargsakwargsafpawriteawant_unicodeasepaendaarganewlineaspacewiTaklassTatpavalueatbTametaabasesametaclassTaclsaorig_varsaslotsaslots_varametaclassTametaclassTadataaerrorsafpTafpu.tornado._locale_dataM
uData used by the tornado.locale module.a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/_locale_data.pya__file__a__spec__aoriginahas_locationa__cached__D>aaf_ZAaam_ETaar_ARabg_BGabn_INabs_BAaca_ESacs_CZacy_GBada_DKade_DEael_GRaen_GBaen_USaes_ESaes_LAaet_EEaeu_ESafa_IRafi_FIafr_CAafr_FRaga_IEagl_ESahe_ILahi_INahr_HRahu_HUaid_IDais_ISait_ITaja_JPako_KRalt_LTalv_LVamk_MKaml_INams_MYanb_NOanl_NLann_NOapa_INapl_PLapt_BRapt_PTaro_ROaru_RUask_SKasl_SIasq_ALasr_RSasv_SEasw_KEata_INate_INath_THatl_PHatr_TRauk_UAavi_VNazh_CNazh_TWDaname_enanameaAfrikaansaAfrikaansDaname_enanameaAmharicuአማርኛDaname_enanameaArabicuالعربيةDaname_enanameaBulgarianuБългарскиDaname_enanameaBengaliuবাংলাDaname_enanameaBosnianaBosanskiDaname_enanameaCatalanuCatalàDaname_enanameaCzechuČeštinaDaname_enanameaWelshaCymraegDaname_enanameaDanishaDanskDaname_enanameaGermanaDeutschDaname_enanameaGreekuΕλληνικάDaname_enanameuEnglish (UK)uEnglish (UK)Daname_enanameuEnglish (US)uEnglish (US)Daname_enanameuSpanish (Spain)uEspañol (España)Daname_enanameaSpanishuEspañolDaname_enanameaEstonianaEestiDaname_enanameaBasqueaEuskaraDaname_enanameaPersianuفارسیDaname_enanameaFinnishaSuomiDaname_enanameuFrench (Canada)uFrançais (Canada)Daname_enanameaFrenchuFrançaisDaname_enanameaIrishaGaeilgeDaname_enanameaGalicianaGalegoDaname_enanameaHebrewuעבריתDaname_enanameaHindiuहिन्दीDaname_enanameaCroatianaHrvatskiDaname_enanameaHungarianaMagyarDaname_enanameaIndonesianuBahasa IndonesiaDaname_enanameaIcelandicuÍslenskaDaname_enanameaItalianaItalianoDaname_enanameaJapaneseu日本語Daname_enanameaKoreanu한국어Daname_enanameaLithuanianuLietuviųDaname_enanameaLatvianuLatviešuDaname_enanameaMacedonianuМакедонскиDaname_enanameaMalayalamuമലയാളംDaname_enanameaMalayuBahasa MelayuDaname_enanameuNorwegian (bokmal)uNorsk (bokmål)Daname_enanameaDutchaNederlandsDaname_enanameuNorwegian (nynorsk)uNorsk (nynorsk)Daname_enanameaPunjabiuਪੰਜਾਬੀDaname_enanameaPolishaPolskiDaname_enanameuPortuguese (Brazil)uPortuguês (Brasil)Daname_enanameuPortuguese (Portugal)uPortuguês (Portugal)Daname_enanameaRomanianuRomânăDaname_enanameaRussianuРусскийDaname_enanameaSlovakuSlovenčinaDaname_enanameaSlovenianuSlovenščinaDaname_enanameaAlbanianaShqipDaname_enanameaSerbianuСрпскиDaname_enanameaSwedishaSvenskaDaname_enanameaSwahiliaKiswahiliDaname_enanameaTamiluதமிழ்Daname_enanameaTeluguuతెలుగుDaname_enanameaThaiuภาษาไทยDaname_enanameaFilipinoaFilipinoDaname_enanameaTurkishuTürkçeDaname_enanameuUkraini uУкраїнськаDaname_enanameaVietnameseuTiếng ViệtDaname_enanameuChinese (Simplified)u中文(简体)Daname_enanameuChinese (Traditional)u中文(繁體)aLOCALE_NAMESu<module tornado._locale_data>u.tornado.autoreload��aioloopaIOLoopacurrenta_io_loopsagen_logawarningTutornado.autoreload started more than once in the same processapartiala_reload_on_updateaPeriodicCallbackastartuBegins watching source files for changes.

    .. versionchanged:: 5.0
       The ``io_loop`` argument (deprecated since version 4.1) has been removed.
    aadd_callbackuWait for a watched file to change, then restart the process.

    Intended to be used at the end of scripts like unit test runners,
    to run the tests again after any source file changes (but see also
    the command-line interface in `main`)
    a_watched_filesaadduAdd a file to the watch list.

    All imported modules are watched by default.
    a_reload_hooksaappenduAdd a function to be called before reloading the process.

    Note that for open file and socket handles it is generally
    preferable to set the ``FD_CLOEXEC`` flag (using `fcntl` or
    `os.set_inheritable`) instead of using a reload hook to close them.
    a_reload_attemptedaprocessatask_idasysamodulesavaluesatypesaModuleTypea__file__aendswithTu.pycTu.pyo:nl��������na_check_fileamodify_timesapathaosastatast_mtimeainfou%s modified; restarting servera_reloadasignalasetitimeraITIMER_REALla_autoreload_is_maina_original_argva_original_speca__main__a__spec__aargvu-maname:lnnw.apathsepuaenvironagetTaPYTHONPATHuastartswithapath_prefixaPYTHONPATHa_has_execvasubprocessaPopenaexecutablea_exitTlaexecvaspawnvaP_NOWAITutornado.autoreloadaautoreload:nnnlamodulel:llnascriptaprinta_USAGETafileaexitTlamodearunpyarun_moduleDarun_nameaalter_sysa__main__ta__enter__a__exit__a__package__aexec_inareadTnnnuScript exited with status %sacodeTuScript exited with uncaught exceptiontTaexc_infoatracebackaextract_tbaexc_infoutoo many values to unpack (expected 4)awatchafilenameTuScript exited normallyapkgutilaget_loaderaget_filenameawaituCommand-line wrapper to re-run a script whenever its source changes.

    Scripts may be specified by filename or module name::

        python -m tornado.autoreload -m tornado.test.runtests
        python -m tornado.autoreload tornado/test/runtests.py

    Running a script with this wrapper is similar to calling
    `tornado.autoreload.wait` at the end of the script, but this wrapper
    can catch import-time problems like syntax errors that would otherwise
    prevent the script from reaching its call to `wait`.
    uAutomatically restart the server when a source file is modified.

Most applications should not access this module directly.  Instead,
pass the keyword argument ``autoreload=True`` to the
`tornado.web.Application` constructor (or ``debug=True``, which
enables this setting and several others).  This will enable autoreload
mode as well as checking for changes to templates and static
resources.  Note that restarting is a destructive operation and any
requests in progress will be aborted when the process restarts.  (If
you want to disable autoreload while using other debug-mode features,
pass both ``debug=True`` and ``autoreload=False``).

This module can also be used as a command-line wrapper around scripts
such as unit test runners.  See the `main` method for details.

The command-line wrapper and Application debug modes can be used together.
This combination is encouraged as the wrapper catches syntax errors and
other import-time failures, while debug mode catches changes once
the server has started.

This module will not work correctly when `.HTTPServer`'s multi-process
mode is used.

Reloading loses any Python interpreter command-line arguments (e.g. ``-u``)
because it re-executes Python using ``sys.executable`` and ``sys.argv``.
Additionally, modifying these variables will cause reloading to behave
incorrectly.

a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/autoreload.pyaoriginahas_locationa__cached__afunctoolsaweakrefatornadoTaiolooputornado.logTagen_logTaprocessutornado.utilTaexec_inatypingaCallableaDictaWeakKeyDictionaryTl�Dacheck_timeareturnOintnDareturnnDafilenameareturnOstrnafnTLnareturnaadd_reload_hookTOstrOfloatuUsage:
  python -m tornado.autoreload -m module.to.run [args...]
  python -m tornado.autoreload path/to/script.py [args...]
amainu<module tornado.autoreload>Tamodify_timesapathamodifiedTafnaspecaargvapath_prefixTamodify_timesamoduleapathTafnTatornadoaoriginal_argvaoriginal_specamodeamoduleascriptarunpywfweafilenamealinenoanamealinealoaderTacheck_timeaio_loopamodify_timesacallbackaschedulerTaio_loopTafilename.tornado.concurrentZ�aFUTURESafuturesaFutureafuture_set_result_unless_cancelledafuture_set_exc_infoasysaexc_infoafnaCallableareturnarun_on_executor_decoratorurun_on_executor.<locals>.run_on_executor_decoratorucannot combine positional and keyword argsluexpected 1 argument, got %duDecorator to run a synchronous method asynchronously on an executor.

    Returns a future.

    The executor to be used is determined by the ``executor``
    attributes of ``self``. To use a different attribute name, pass a
    keyword argument to the decorator::

        @run_on_executor(executor='_thread_pool')
        def foo(self):
            pass

    This decorator should not be confused with the similarly-named
    `.IOLoop.run_in_executor`. In general, using ``run_in_executor``
    when *calling* a blocking method is recommended instead of using
    this decorator when *defining* a method. If compatibility with older
    versions of Tornado is required, consider defining an executor
    and using ``executor.submit()`` at the call site.

    .. versionchanged:: 4.2
       Added keyword arguments to use alternative attributes.

    .. versionchanged:: 5.0
       Always uses the current IOLoop instead of ``self.io_loop``.

    .. versionchanged:: 5.1
       Returns a `.Future` compatible with ``await`` instead of a
       `concurrent.futures.Future`.

    .. deprecated:: 5.1

       The ``callback`` argument is deprecated and will be removed in
       6.0. The decorator itself is discouraged in new code but will
       not be removed in 6.0.

    .. versionchanged:: 6.0

       The ``callback`` argument was removed.
    akwargsagetTaexecutoraexecutorafunctoolsawrapsaselfaAnyaargsawrapperurun_on_executor.<locals>.run_on_executor_decorator.<locals>.wrapperaexecutorasubmitachain_futureDafutureareturnuFuture[_T]nacopyuchain_future.<locals>.copyafuture_add_done_callbackutornado.ioloopTaIOLoopaIOLoopacurrentaadd_futureuChain two futures together so that when one completes, so does the other.

    The result (success or failure) of ``a`` will be copied to ``b``, unless
    ``b`` has already been completed or cancelled by the time ``a`` finishes.

    .. versionchanged:: 5.0

       Now accepts both Tornado/asyncio `Future` objects and
       `concurrent.futures.Future`.

    wawbadoneaexceptionaset_exceptionaset_resultaresultacancelleduSet the given ``value`` as the `Future`'s result, if not cancelled.

    Avoids ``asyncio.InvalidStateError`` when calling ``set_result()`` on
    a cancelled `asyncio.Future`.

    .. versionadded:: 5.0
    aapp_logaerrorTuException after Future was cancelledTaexc_infouSet the given ``exc`` as the `Future`'s exception.

    If the Future is already canceled, logs the exception instead. If
    this logging is not desired, the caller should explicitly check
    the state of the Future and call ``Future.set_exception`` instead of
    this wrapper.

    Avoids ``asyncio.InvalidStateError`` when calling ``set_exception()`` on
    a cancelled `asyncio.Future`.

    .. versionadded:: 6.0

    lufuture_set_exc_info called with no exceptionafuture_set_exception_unless_cancelleduSet the given ``exc_info`` as the `Future`'s exception.

    Understands both `asyncio.Future` and the extensions in older
    versions of Tornado to enable better tracebacks on Python 2.

    .. versionadded:: 5.0

    .. versionchanged:: 6.0

       If the future is already cancelled, this function is a no-op.
       (previously ``asyncio.InvalidStateError`` would be raised)

    aadd_done_callbackuArrange to call ``callback`` when ``future`` is complete.

    ``callback`` is invoked with one argument, the ``future``.

    If ``future`` is already done, ``callback`` is invoked immediately.
    This may differ from the behavior of ``Future.add_done_callback``,
    which makes no such guarantee.

    .. versionadded:: 5.0
    uUtilities for working with ``Future`` objects.

Tornado previously provided its own ``Future`` class, but now uses
`asyncio.Future`. This module contains utility functions for working
with `asyncio.Future` in a way that is backwards-compatible with
Tornado's old ``Future`` implementation.

While this module is an important part of Tornado's internal
implementation, applications rarely need to interact with it
directly.

a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/concurrent.pya__file__a__spec__aoriginahas_locationa__cached__aasyncioaconcurrentTafuturesatypesutornado.logTaapp_logatypingaOptionalaTupleaUnionaTypeVarTa_Ta_TTEExceptionametaclassa__prepare__aReturnValueIgnoredErrora__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>utornado.concurrenta__module__a__qualname__a__orig_bases__wxais_futureaExecutoraDummyExecutorufutures.Future[_T]uDummyExecutor.submitTtawaitaboolashutdownuDummyExecutor.shutdownadummy_executorarun_on_executora_NO_RESULTDwawbareturnuFuture[_T]uFuture[_T]nafutureuUnion[futures.Future[_T], Future[_T]]avalueDafutureaexcareturnuUnion[futures.Future[_T], Future[_T]]EBaseExceptionnaTracebackTypeaoverloadacallbackTLufutures.Future[_T]nuFuture[_T]TLuFuture[_T]nTQnu<module tornado.concurrent>Ta__class__TwawbacopyaIOLoopTafutureaa_excwawbTwawbTafutureacallbackTafutureaexc_infoTafutureaexcTafutureavalueTwxTaargsakwargsarun_on_executor_decoratorTafnaexecutorawrapperakwargsTakwargsTaselfawaitTaselfafnaargsakwargsafutureTaselfaargsakwargsaasync_futureaconc_futureaexecutorafnTaexecutorafnu.tornadoVuThe Tornado web server and tools.a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/__init__.pya__file__Lu/usr/local/lib/python3.8/dist-packages/tornadoa__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__u6.2aversionTlllpaversion_infou<module tornado>u.tornado.escape��a_XHTML_ESCAPE_REasubu<lambda>uxhtml_escape.<locals>.<lambda>ato_basestringuEscapes a string so it is valid within HTML or XML.

    Escapes the characters ``<``, ``>``, ``"``, ``'``, and ``&``.
    When used in attribute values the escaped strings must be enclosed
    in quotes.

    .. versionchanged:: 3.2

       Added the single quote to the list of escaped characters.
    a_XHTML_ESCAPE_DICTagroupTlareu&(#?)(\w+?);a_convert_entitya_unicodeuUn-escapes an XML-escaped string.ajsonadumpsareplaceTu</u<\/uJSON-encodes the given Python object.aloadsuReturns Python objects for the given JSON string.

    Supports both `str` and `bytes` inputs.
    u[\x00-\x20]+w astripuReplace all sequences of whitespace chars with a single space.aurllibaparseaquote_plusaquoteautf8uReturns a URL-encoded version of the given value.

    If ``plus`` is true (the default), spaces will be represented
    as "+" instead of "%20".  This is appropriate for query strings
    but not for the path component of a URL.  Note that this default
    is the reverse of Python's urllib module.

    .. versionadded:: 3.1
        The ``plus`` argument
    Tw+w aunquote_to_bytesaunquote_plusaunquoteTaencodinguDecodes the given value from a URL.

    The argument may be either a byte or unicode string.

    If encoding is None, the result will be a byte string.  Otherwise,
    the result is a unicode string in the specified encoding.

    If ``plus`` is true (the default), plus signs will be interpreted
    as spaces (literal plus signs must be represented as "%2B").  This
    is appropriate for query strings and form-encoded values but not
    for the path component of a URL.  Note that this default is the
    reverse of Python's urllib module.

    .. versionadded:: 3.1
       The ``plus`` argument
    adecodeTalatin1aparse_qsDaencodingaerrorsalatin1astrictaitemsutoo many values to unpack (expected 2)aencodeaencodeduParses a query string like urlparse.parse_qs,
    but takes bytes and returns the values as byte strings.

    Keys still become type str (interpreted as latin1 in python3!)
    because it's too painful to keep them as byte strings in
    python3 and in practice they're nearly always ascii anyway.
    a_UTF8_TYPESaunicode_typeuExpected bytes, unicode, or None; got %rTuutf-8uConverts a string argument to a byte string.

    If the argument is already a byte string or None, it is returned unchanged.
    Otherwise it must be a unicode string and is encoded as utf8.
    a_TO_UNICODE_TYPESuConverts a string argument to a unicode string.

    If the argument is already a unicode string or None, it is returned
    unchanged.  Otherwise it must be a byte string and is decoded as utf8.
    ato_unicodeuWalks a simple data structure, converting byte strings to unicode.

    Supports lists, tuples, and dictionaries.
    arecursive_unicodeu<genexpr>urecursive_unicode.<locals>.<genexpr>acallableaextra_paramswmatypingaMatchareturnamake_linkulinkify.<locals>.make_linkaxhtml_escapea_URL_REuConverts plain text into HTML with links.

    For example: ``linkify("Hello http://tornadoweb.org!")`` would return
    ``Hello <a href="http://tornadoweb.org">http://tornadoweb.org</a>!``

    Parameters:

    * ``shorten``: Long urls will be shortened for display.

    * ``extra_params``: Extra text to include in the link tag, or a callable
      taking the link as an argument and returning the extra text
      e.g. ``linkify(text, extra_params='rel="nofollow" class="external"')``,
      or::

          def extra_params_cb(url):
              if url.startswith("http://example.com"):
                  return 'class="internal"'
              else:
                  return 'class="external" rel="nofollow"'
          linkify(text, extra_params=extra_params_cb)

    * ``require_protocol``: Only linkify urls which include a protocol. If
      this is False, urls such as www.facebook.com will also be linkified.

    * ``permitted_protocols``: List (or set) of protocols which should be
      linkified, e.g. ``linkify(text, permitted_protocols=["http", "ftp",
      "mailto"])``. It is very unsafe to include protocols such as
      ``javascript``.
    TlTlarequire_protocolapermitted_protocolsuhttp://ashortenaurlTlulasplitTw/w/l:nlnTw?Tw.f�F@:nlnarfindTw&lu...u title="%s"u<a href="%s"%s>%s</a>w#:nlnalowerwx:lnnlu&#%s;a_HTML_UNICODE_MAPu&%s;ahtmlaentitiesaname2codepointaunicode_mapuEscaping/unescaping methods for HTML, JSON, URLs, and others.

Also includes a few other miscellaneous string manipulation functions that
have crept in over time.
a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/escape.pya__file__a__spec__aoriginahas_locationa__cached__uhtml.entitiesuurllib.parseutornado.utilTaunicode_typeaUnionaAnyaOptionalaDictaListaCallableacompileTu[&<>"']Dw&w<w>w"w'u&amp;u&lt;u&gt;u&quot;u&#39;avalueTOstrObytesaxhtml_unescapeajson_encodeajson_decodeDavalueareturnOstrpasqueezeTtaplusaurl_escapeaoverloadaencodingaurl_unescapeTuutf-8tTFpaqsakeep_blank_valuesastrict_parsingaparse_qs_bytesTObytesMDavalueareturnObytespDavalueareturnOstrObytesDavalueareturnnnTnOstrObytesDavalueareturnObytesOstranative_straobjTu\b((?:([\w-]+):(/{1,3})|www[.])(?:(?:(?:[^\s&()]|&amp;|&quot;)*(?:[^!"#$%&'()*+,.:;<=>?@\[\]^`{|}~\s]))|(?:\((?:[^\s&()]|&amp;|&quot;)*\)))+)LahttpahttpsatextTLOstrOstralinkifyTOstrpa_build_unicode_mapTa.0wiTa.0wkwvTamatchu<listcomp>Twiu<module tornado.escape>Taunicode_mapanameavalueTwmTavalueTatextashortenaextra_paramsarequire_protocolapermitted_protocolsamake_linkTwmaurlaprotoahrefaparamsamax_lenabefore_clipaproto_lenapartsaamparequire_protocolapermitted_protocolsaextra_paramsashortenTaextra_paramsapermitted_protocolsarequire_protocolashortenTaqsakeep_blank_valuesastrict_parsingaresultaencodedwkwvTaobjTavalueaplusaquoteTavalueaencodingaplusTavalueaencodingaplusaunquote.tornado.genMF$avalueaargslTEAttributeErrorEIndexErroraFuturea_source_tracebackTl��������a__file__afunctoolsawrapsawrapperucoroutine.<locals>.wrappera__wrapped__a__tornado_coroutine__uDecorator for asynchronous generators.

    For compatibility with older versions of Python, coroutines may
    also "return" by raising the special exception `Return(value)
    <Return>`.

    Functions with this decorator return a `.Future`.

    .. warning::

       When exceptions occur inside a coroutine, the exception
       information will be stored in the `.Future` object. You must
       examine the result of the `.Future` object, or the exception
       may go unnoticed by your code. This means yielding the function
       if called from another coroutine, using something like
       `.IOLoop.run_sync` for top-level calls, or passing the `.Future`
       to `.IOLoop.add_future`.

    .. versionchanged:: 6.0

       The ``callback`` argument was removed. Use the returned
       awaitable object instead.

    a_create_futureacontextvarsacopy_contextaruna_fake_ctx_runafuncaReturna_value_from_stopiterationafuture_set_exc_infoasysaexc_infoaGeneratoranextafuture_set_result_unless_cancelledaRunnerafutureayieldedaadd_done_callbacku<lambda>ucoroutine.<locals>.wrapper.<locals>.<lambda>arunneruReturn whether *func* is a coroutine function, i.e. a function
    wrapped with `~.gen.coroutine`.

    .. versionadded:: 4.5
    a__class__a__init__uYou must provide args or kwargs, not botha_unfinishedacollectionsadequea_finishedacurrent_indexacurrent_futurea_running_futureafuture_add_done_callbackaselfa_done_callbackutoo many values to unpack (expected 2)u<genexpr>uWaitIterator.__init__.<locals>.<genexpr>uReturns True if this iterator has no more results.a_return_resultapopleftuReturns a `.Future` that will yield the next available result.

        Note that this `.Future` will not be the same object as any of
        the inputs.
        adoneaappenduno future is runningachain_futureapopuCalled set the returned future's state that of the future
        we yielded, and set the current future for the iterator.
        abuiltinsaStopAsyncIterationamulti_futureTaquiet_exceptionsuRuns multiple asynchronous operations in parallel.

    ``children`` may either be a list or a dict whose values are
    yieldable objects. ``multi()`` returns a new yieldable
    object that resolves to a parallel structure containing their
    results. If ``children`` is a list, the result is a list of
    results in the same order; if it is a dict, the result is a dict
    with the same keys.

    That is, ``results = yield multi(list_of_futures)`` is equivalent
    to::

        results = []
        for future in list_of_futures:
            results.append(yield future)

    If any children raise exceptions, ``multi()`` will raise the first
    one. All others will be logged, unless they are of types
    contained in the ``quiet_exceptions`` argument.

    In a ``yield``-based coroutine, it is not normally necessary to
    call this function directly, since the coroutine runner will
    do it automatically when a list or dict is yielded. However,
    it is necessary in ``await``-based coroutines, or to pass
    the ``quiet_exceptions`` argument.

    This function is available under the names ``multi()`` and ``Multi()``
    for historical reasons.

    Cancelling a `.Future` returned by ``multi()`` does not cancel its
    children. `asyncio.gather` is similar to ``multi()``, but it does
    cancel its children.

    .. versionchanged:: 4.2
       If multiple yieldables fail, any exceptions after the first
       (which is raised) will be logged. Added the ``quiet_exceptions``
       argument to suppress this logging for selected exception types.

    .. versionchanged:: 4.3
       Replaced the class ``Multi`` and the function ``multi_future``
       with a unified function ``multi``. Added support for yieldables
       other than ``YieldPoint`` and `.Future`.

    akeysavaluesaconvert_yieldedafutareturnacallbackumulti_future.<locals>.callbackalisteningaadduWait for multiple asynchronous futures in parallel.

    Since Tornado 6.0, this function is exactly the same as `multi`.

    .. versionadded:: 4.0

    .. versionchanged:: 4.2
       If multiple ``Futures`` fail, any exceptions after the first (which is
       raised) will be logged. Added the ``quiet_exceptions``
       argument to suppress this logging for selected exception types.

    .. deprecated:: 4.3
       Use `multi` instead.
    ais_futurea_NullFutureumulti_future.<locals>.<genexpr>aunfinished_childrenaremoveachildren_futsaresult_listaresultaquiet_exceptionsaapp_logaerrorTuMultiple exceptions in yield listtTaexc_infoaset_resultuConverts ``x`` into a `.Future`.

    If ``x`` is already a `.Future`, it is simply returned; otherwise
    it is wrapped in a new `.Future`.  This is suitable for use as
    ``result = yield gen.maybe_future(f())`` when you don't know whether
    ``f()`` returns a `.Future` or not.

    .. deprecated:: 4.3
       This function only handles ``Futures``, not other yieldable objects.
       Instead of `maybe_future`, check for the non-future result types
       you expect (often just ``None``), and ``yield`` anything unknown.
    aIOLoopacurrentaerror_callbackuwith_timeout.<locals>.error_callbackDareturnnatimeout_callbackuwith_timeout.<locals>.timeout_callbackaadd_timeoutuwith_timeout.<locals>.<lambda>aadd_futureuWraps a `.Future` (or other yieldable object) in a timeout.

    Raises `tornado.util.TimeoutError` if the input future does not
    complete before ``timeout``, which may be specified in any form
    allowed by `.IOLoop.add_timeout` (i.e. a `datetime.timedelta` or
    an absolute time relative to `.IOLoop.time`)

    If the wrapped `.Future` fails after it has timed out, the exception
    will be logged unless it is either of a type contained in
    ``quiet_exceptions`` (which may be an exception type or a sequence of
    types), or an ``asyncio.CancelledError``.

    The wrapped `.Future` is not canceled when the timeout expires,
    permitting it to be reused. `asyncio.wait_for` is similar to this
    function but it does cancel the wrapped `.Future` on timeout.

    .. versionadded:: 4.0

    .. versionchanged:: 4.1
       Added the ``quiet_exceptions`` argument and the logging of unhandled
       exceptions.

    .. versionchanged:: 4.4
       Added support for yieldable objects other than `.Future`.

    .. versionchanged:: 6.0.3
       ``asyncio.CancelledError`` is now always considered "quiet".

    .. versionchanged:: 6.2
       ``tornado.util.TimeoutError`` is now an alias to ``asyncio.TimeoutError``.

    aasyncioaCancelledErroruException in Future %r after timeoutDaexc_infotaset_exceptionaTimeoutErrorTaTimeoutafuture_convertedaio_looparemove_timeoutatimeout_handleacall_laterusleep.<locals>.<lambda>uReturn a `.Future` that resolves after the given number of seconds.

    When used with ``yield`` in a coroutine, this is a non-blocking
    analogue to `time.sleep` (which should not be used in coroutines
    because it is blocking)::

        yield gen.sleep(0.5)

    Note that calling this function on its own does nothing; you must
    wait on the `.Future` it returns (usually by yielding it).

    .. versionadded:: 4.1
    wfactx_runagenaresult_futurea_null_futurearunningafinishedahandle_yielduNo pending futureathrowasenduStarts or resumes the generator, running until it reaches a
        yield point that is not ready.
        aBadYieldErroramomentaadd_callbackuno pending futureaAnyainneruRunner.handle_yield.<locals>.innerTOlistOdictamultiatypingacastaisawaitablea_wrap_awaitableuyielded unknown object %ruConvert a yielded object into a `.Future`.

    The default implementation accepts lists, dictionaries, and
    Futures. This has the side effect of starting any coroutines that
    did not start themselves, similar to `asyncio.ensure_future`.

    If the `~functools.singledispatch` library is available, this function
    may be extended to support additional types. For example::

        @convert_yielded.register(asyncio.Future)
        def _(asyncio_future):
            return tornado.platform.asyncio.to_tornado_future(asyncio_future)

    .. versionadded:: 4.1

    u``tornado.gen`` implements generator-based coroutines.

.. note::

   The "decorator and generator" approach in this module is a
   precursor to native coroutines (using ``async def`` and ``await``)
   which were introduced in Python 3.5. Applications that do not
   require compatibility with older versions of Python should use
   native coroutines instead. Some parts of this module are still
   useful with native coroutines, notably `multi`, `sleep`,
   `WaitIterator`, and `with_timeout`. Some of these functions have
   counterparts in the `asyncio` module which may be used as well,
   although the two may not necessarily be 100% compatible.

Coroutines provide an easier way to work in an asynchronous
environment than chaining callbacks. Code using coroutines is
technically asynchronous, but it is written as a single generator
instead of a collection of separate functions.

For example, here's a coroutine-based handler:

.. testcode::

    class GenAsyncHandler(RequestHandler):
        @gen.coroutine
        def get(self):
            http_client = AsyncHTTPClient()
            response = yield http_client.fetch("http://example.com")
            do_something_with_response(response)
            self.render("template.html")

.. testoutput::
   :hide:

Asynchronous functions in Tornado return an ``Awaitable`` or `.Future`;
yielding this object returns its result.

You can also yield a list or dict of other yieldable objects, which
will be started at the same time and run in parallel; a list or dict
of results will be returned when they are all finished:

.. testcode::

    @gen.coroutine
    def get(self):
        http_client = AsyncHTTPClient()
        response1, response2 = yield [http_client.fetch(url1),
                                      http_client.fetch(url2)]
        response_dict = yield dict(response3=http_client.fetch(url3),
                                   response4=http_client.fetch(url4))
        response3 = response_dict['response3']
        response4 = response_dict['response4']

.. testoutput::
   :hide:

If ``tornado.platform.twisted`` is imported, it is also possible to
yield Twisted's ``Deferred`` objects. See the `convert_yielded`
function to extend this mechanism.

.. versionchanged:: 3.2
   Dict support added.

.. versionchanged:: 4.1
   Support added for yielding ``asyncio`` Futures and Twisted Deferreds
   via ``singledispatch``.

a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/gen.pya__spec__aoriginahas_locationa__cached__ucollections.abcTaGeneratoruconcurrent.futuresaconcurrentadatetimeasingledispatchainspectTaisawaitableatypesutornado.concurrentTaFutureais_futureachain_futureafuture_set_exc_infoafuture_add_done_callbackafuture_set_result_unless_cancelledutornado.ioloopTaIOLooputornado.logTaapp_logutornado.utilTaTimeoutErroraUnionaCallableaListaTypeaTupleaAwaitableaDictaoverloadaTypeVarTa_Ta_Tafuturesa_YieldableTEExceptionametaclassa__prepare__aKeyReuseErrora__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>utornado.gena__module__a__qualname__a__orig_bases__aUnknownKeyErroraLeakedCallbackErroraReturnValueIgnoredErrorweTEStopIterationaReturnakwTQuGenerator[Any, Any, _T]TQuFuture[_T]acoroutineais_coroutine_functionuSpecial exception to return a value from a `coroutine`.

    If this exception is raised, its value argument is used as the
    result of the coroutine::

        @gen.coroutine
        def fetch_json(url):
            response = yield AsyncHTTPClient().fetch(url)
            raise gen.Return(json_decode(response.body))

    In Python 3.3, this exception is no longer necessary: the ``return``
    statement can be used directly to return a value (previously
    ``yield`` and ``return`` with a value could not be combined in the
    same function).

    By analogy with the return statement, the value argument is optional,
    but it is never necessary to ``raise gen.Return()``.  The ``return``
    statement can be used with no arguments instead.
    TnuReturn.__init__TOobjectaWaitIteratoruProvides an iterator to yield the results of awaitables as they finish.

    Yielding a set of awaitables like this:

    ``results = yield [awaitable1, awaitable2]``

    pauses the coroutine until both ``awaitable1`` and ``awaitable2``
    return, and then restarts the coroutine with the results of both
    awaitables. If either awaitable raises an exception, the
    expression will raise that exception and all the results will be
    lost.

    If you need to get the result of each awaitable as soon as possible,
    or if you need the result of some awaitables even if others produce
    errors, you can use ``WaitIterator``::

      wait_iterator = gen.WaitIterator(awaitable1, awaitable2)
      while not wait_iterator.done():
          try:
              result = yield wait_iterator.next()
          except Exception as e:
              print("Error {} from {}".format(e, wait_iterator.current_future))
          else:
              print("Result {} received from {} at {}".format(
                  result, wait_iterator.current_future,
                  wait_iterator.current_index))

    Because results are returned as soon as they are available the
    output from the iterator *will not be in the same order as the
    input arguments*. If you need to know which future produced the
    current result, you can use the attributes
    ``WaitIterator.current_future``, or ``WaitIterator.current_index``
    to get the index of the awaitable from the input list. (if keyword
    arguments were used in the construction of the `WaitIterator`,
    ``current_index`` will use the corresponding keyword).

    On Python 3.5, `WaitIterator` implements the async iterator
    protocol, so it can be used with the ``async for`` statement (note
    that in this version the entire iteration is aborted if any value
    raises an exception, while the previous example can continue past
    individual errors)::

      async for result in gen.WaitIterator(future1, future2):
          print("Result {} received from {} at {}".format(
              result, wait_iterator.current_future,
              wait_iterator.current_index))

    .. versionadded:: 4.1

    .. versionchanged:: 4.3
       Added ``async for`` support in Python 3.5.

    akwargsuWaitIterator.__init__abooluWaitIterator.doneuWaitIterator.nextuWaitIterator._done_callbackuWaitIterator._return_resultaAsyncIteratora__aiter__uWaitIterator.__aiter__a__anext__uWaitIterator.__anext__TTachildrenuUnion[Type[Exception], Tuple[Type[Exception], ...]]uUnion[Future[List], Future[Dict]]aMultiwxamaybe_futureatimeoutatimedeltaawith_timeoutDadurationareturnOfloatuFuture[None]asleepu_NullFuture resembles a Future that finished with a result of None.

    It's not actually a `Future` to avoid depending on a particular event loop.
    Handled as a special case in the coroutine runner.

    We lie and tell the type checker that a _NullFuture is a Future so
    we don't have to leak _NullFuture into lots of public APIs. But
    this means that the type checker can't warn us when we're passing
    a _NullFuture into a code path that doesn't understand what to do
    with it.
    u_NullFuture.resultu_NullFuture.doneuA special object which may be yielded to allow the IOLoop to run for
one iteration.

This is not needed in normal use but it can be helpful in long-running
coroutines that are likely to yield Futures that are ready instantly.

Usage: ``yield gen.moment``

In native coroutines, the equivalent of ``yield gen.moment`` is
``await asyncio.sleep(0)``.

.. versionadded:: 4.0

.. deprecated:: 4.5
   ``yield None`` (or ``yield`` with no argument) is now equivalent to
    ``yield gen.moment``.
uInternal implementation of `tornado.gen.coroutine`.

    Maintains information about pending callbacks and their results.

    The results of the generator are stored in ``result_future`` (a
    `.Future`)
    uGenerator[_Yieldable, Any, _T]uFuture[_T]afirst_yieldeduRunner.__init__uRunner.runuRunner.handle_yieldatypaExceptionatbaTracebackTypeahandle_exceptionuRunner.handle_exceptionaensure_futureaasyncTa.0wiTa.0wiwfTa.0wkwfTw_arunnerTarunnerTwfTafutureaio_loopatimeout_handleTaio_loopatimeout_handleu<module tornado.gen>Ta__class__TaselfTaselfaargsakwargsafuturesafutureTaselfactx_runagenaresult_futureafirst_yieldedTaselfavaluea__class__Tafutureasource_tracebackafilenameTaselfadoneTwfaargsakwTaselfadonearesTweT	afutaresult_listwfweaunfinished_childrenachildren_futsafutureaquiet_exceptionsakeysTachildren_futsafutureakeysaquiet_exceptionsaunfinished_childrenTayieldedTafuncTafuncawrapperTafutureweaquiet_exceptionsTaselfatypavalueatbTaselfayieldedainnerTwfaselfTwxafutTachildrenaquiet_exceptionsT
achildrenaquiet_exceptionsakeysachildren_seqachildren_futsaunfinished_childrenafutureacallbackalisteningwfTaselfafutureaexc_infoavalueayieldedweTadurationwfTaresultafuture_convertedaerror_callbackTaerror_callbackafuture_convertedaresultT	atimeoutafutureaquiet_exceptionsafuture_convertedaresultaio_loopaerror_callbackatimeout_callbackatimeout_handleT	aargsakwargsafutureactx_runaresultweayieldedarunnerafuncu.tornado.http1connectionQ+�aloggeraerrorTuUncaught exceptionTaexc_infoa_QuietExceptionano_keep_alivelachunk_sizeamax_header_sizeaheader_timeoutamax_body_sizeabody_timeoutadecompressu
        :arg bool no_keep_alive: If true, always close the connection after
            one request.
        :arg int chunk_size: how much data to read into memory at once
        :arg int max_header_size:  maximum amount of data for HTTP headers
        :arg float header_timeout: how long to wait for all headers (seconds)
        :arg int max_body_size: maximum amount of data for body
        :arg float body_timeout: how long to wait while reading body (seconds)
        :arg bool decompress: if true, decode incoming
            ``Content-Encoding: gzip``
        ais_clientastreamaHTTP1ConnectionParametersaparamsacontextamax_buffer_sizea_max_body_sizea_body_timeouta_write_finisheda_read_finishedaFuturea_finish_futurea_disconnect_on_finisha_clear_callbacksa_request_start_linea_response_start_linea_request_headersa_chunking_outputa_expected_content_remaininga_pending_writeu
        :arg stream: an `.IOStream`
        :arg bool is_client: client or server
        :arg params: a `.HTTP1ConnectionParameters` instance or ``None``
        :arg context: an opaque application-defined object that can be accessed
            as ``connection.context``.
        a_GzipMessageDelegatea_read_messageuRead a single HTTP response.

        Typical client-mode usage is to write a request using `write_headers`,
        `write`, and `finish`, and then call ``read_response``.

        :arg delegate: a `.HTTPMessageDelegate`

        Returns a `.Future` that resolves to a bool after the full response has
        been read. The result is true if the stream is still open.
        aselfaread_until_regexTc
?

?
Tamax_bytesagenawith_timeoutaio_loopatimeaiostreamaStreamClosedErrorTaquiet_exceptionsaTimeoutErroraclosea_parse_headersutoo many values to unpack (expected 2)ahttputilaparse_response_start_lineaparse_request_start_linea_can_keep_alivea_ExceptionLoggingContextaapp_loga__enter__a__exit__adelegateaheaders_receivedaheadersTnnnaResponseStartLineamethodaHEADacodel0ldl�uContent-LengthuTransfer-EncodingaHTTPInputErroruResponse code %d cannot have bodyagetTaExpectu100-continueawriteTcHTTP/1.1 100 (Continue)

a_read_bodyaresp_start_linelagen_logainfouTimeout reading body from %safinishadoneaclosedaset_close_callbacka_on_connection_closeuMalformed HTTP message from %s: %sTcHTTP/1.1 400 Bad Request

aon_connection_closeuHTTP1Connection._read_messagea_write_callbacka_write_futurea_close_callbackTnuClears the callback attributes.

        This allows the request handler to be garbage collected more
        quickly in CPython by breaking up reference cycles.
        uSets a callback that will be run when the connection is closed.

        Note that this callback is slightly different from
        `.HTTPMessageDelegate.on_connection_close`: The
        `.HTTPMessageDelegate` method is called when the connection is
        closed while receiving a message. This callback is used when
        there is not an active delegate (for example, on the server
        side this callback is used if the client closes the connection
        after sending its request but before receiving all the
        response.
        afuture_set_result_unless_cancelleduTake control of the underlying stream.

        Returns the underlying `.IOStream` object and stops all further
        HTTP processing.  May only be called during
        `.HTTPMessageDelegate.headers_received`.  Intended for implementing
        protocols like websockets that tunnel over an HTTP handshake.
        uSets the body timeout for a single request.

        Overrides the value from `.HTTP1ConnectionParameters`.
        uSets the body size limit for a single request.

        Overrides the value from `.HTTP1ConnectionParameters`.
        aRequestStartLineaappendautf8u%s %s HTTP/1.1lTaPOSTaPUTaPATCHachunkeduHTTP/1.1 %d %slaversionuHTTP/1.1Tl�l0aConnectionuHTTP/1.0TaConnectionualowerukeep-aliveuKeep-Aliveacastastart_lineaget_allalinesaextendd
uNewline in header: aset_exceptionaexceptionc
ajoinc

a_format_chunkafuture_add_done_callbacka_on_write_completeafutureuImplements `.HTTPConnection.write_headers`.anative_stru: u<genexpr>uHTTP1Connection.write_headers.<locals>.<genexpr>aencodeTalatin1aHTTPOutputErrorTuTried to write more data than Content-Lengthachunku%xuImplements `.HTTPConnection.write`.

        For backwards compatibility it is allowed but deprecated to
        skip `write_headers` and instead call `write()` with a
        pre-encoded header block.
        uTried to write %d bytes less than Content-LengthTc0

aadd_done_callbackaset_nodelayTta_finish_requestuImplements `.HTTPConnection.finish`.aresultaadd_callbackTaConnectionTuTransfer-EncodinguTaHEADaGETTFadecodealstripTu
afindTw
arstripTw
aHTTPHeadersaparseTuResponse with both Transfer-Encoding and Content-Lengthw,areasplitu,\s*uMultiple unequal Content-Lengths: %ruOnly integer Content-Length is allowed: %sTuContent-Length too longl�acontent_lengthTnluResponse with code %d should not have bodya_read_fixed_bodya_read_chunked_bodya_read_body_until_closeapiecesuHTTP1Connection._read_body.<locals>.<genexpr>aread_bytesaminDapartialtadata_receiveduHTTP1Connection._read_fixed_bodyaread_untilTc
l@astriplTlTuimproperly terminated chunked requestatotal_sizeTuchunked body too largeabytes_to_readuHTTP1Connection._read_chunked_bodyaread_until_closeuHTTP1Connection._read_body_until_closea_delegatea_chunk_sizea_decompressorTuContent-EncodinguagzipaGzipDecompressoraadduX-Consumed-Content-EncodinguContent-Encodingacompressed_dataaunconsumed_tailadecompressedTuencountered unconsumed gzip data without making progressu_GzipMessageDelegate.data_receivedaflushudecompressor.flush returned data; possible truncated inputa_serving_futureu
        :arg stream: an `.IOStream`
        :arg params: a `.HTTP1ConnectionParameters` or None
        :arg context: an opaque application-defined object that is accessible
            as ``connection.context``
        uCloses the connection.

        Returns a `.Future` that resolves after the serving loop has exited.
        uHTTP1ServerConnection.closeaHTTPServerConnectionDelegateaconvert_yieldeda_server_request_loopaadd_futureu<lambda>uHTTP1ServerConnection.start_serving.<locals>.<lambda>uStarts serving requests on this connection.

        :arg delegate: a `.HTTPServerConnectionDelegate`
        aHTTP1Connectionastart_requestaread_responseaUnsatisfiableReadErroraasyncioaCancelledErrorTuUncaught exceptiontasleepTlaon_closeuHTTP1ServerConnection._server_request_loopuClient and server implementations of HTTP/1.x.

.. versionadded:: 4.0
a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/http1connection.pya__file__a__spec__aoriginahas_locationa__cached__aloggingatypesutornado.concurrentTaFutureafuture_add_done_callbackafuture_set_result_unless_cancelledutornado.escapeTanative_strautf8atornadoTagenTahttputilTaiostreamutornado.logTagen_logaapp_logutornado.utilTaGzipDecompressoraOptionalaTypeaAwaitableaCallableaUnionaTupleTEExceptionametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>utornado.http1connectiona__module__a__qualname__Dareturnna__init__u_QuietException.__init__a__orig_bases__TOobjectuUsed with the ``with`` statement when calling delegate methods to
    log any exceptions with the given logger.  Any exceptions caught are
    converted to _QuietException
    aLoggerareturnu_ExceptionLoggingContext.__init__u_ExceptionLoggingContext.__enter__atypuOptional[Type[BaseException]]avalueaBaseExceptionatbaTracebackTypeu_ExceptionLoggingContext.__exit__uParameters for `.HTTP1Connection` and `.HTTP1ServerConnection`.TFnnnnnFaboolaintafloatuHTTP1ConnectionParameters.__init__aHTTPConnectionuImplements the HTTP/1.x protocol.

    This class can be on its own for clients, or via `HTTP1ServerConnection`
    for servers.
    TnnaIOStreamaobjectuHTTP1Connection.__init__aHTTPMessageDelegateuHTTP1Connection.read_responseuHTTP1Connection._clear_callbacksacallbackTLnuHTTP1Connection.set_close_callbackuHTTP1Connection._on_connection_closeuHTTP1Connection.closeadetachuHTTP1Connection.detachatimeoutaset_body_timeoutuHTTP1Connection.set_body_timeoutaset_max_body_sizeuHTTP1Connection.set_max_body_sizeabytesuFuture[None]awrite_headersuHTTP1Connection.write_headersuHTTP1Connection._format_chunkuHTTP1Connection.writeuHTTP1Connection.finishDafutureareturnuFuture[None]nuHTTP1Connection._on_write_completeuHTTP1Connection._can_keep_aliveDafutureareturnuOptional[Future[None]]nuHTTP1Connection._finish_requestadataastruHTTP1Connection._parse_headersuHTTP1Connection._read_bodyuWraps an `HTTPMessageDelegate` to decode ``Content-Encoding: gzip``.u_GzipMessageDelegate.__init__u_GzipMessageDelegate.headers_receivedu_GzipMessageDelegate.finishu_GzipMessageDelegate.on_connection_closeaHTTP1ServerConnectionuAn HTTP/1.x server.uHTTP1ServerConnection.__init__astart_servinguHTTP1ServerConnection.start_servingTa.0wiapiecesTa.0alineTa.0wnwvTwfu<module tornado.http1connection>Ta__class__TaselfTaselfatypavalueatbTaselfadelegateachunk_sizeTaselfaloggerTaselfano_keep_aliveachunk_sizeamax_header_sizeaheader_timeoutamax_body_sizeabody_timeoutadecompressTaselfastreamais_clientaparamsacontextTaselfastreamaparamsacontextTaselfastart_lineaheadersaconnection_headerTaselfafutureTaselfachunkTaselfacallbackTaselfafutureaexcacallbackTaselfadataadata_straeolastart_lineaheadersTaselfacodeaheadersadelegateapiecesacontent_lengthTaselfadelegateabodyaretT	aselfadelegateatotal_sizeachunk_len_strachunk_lenacrlfabytes_to_readachunkaretTaselfacontent_lengthadelegateabodyaretTaselfadelegateaneed_delegate_closeaheader_futureaheader_dataastart_line_straheadersaresp_start_lineastart_lineareq_start_lineaheader_recv_futureaskip_bodyacodeabody_futureweTaselfadelegateaconnarequest_delegatearetTaselfachunkacompressed_dataadecompressedaretTaselfastreamTaselfatailTaselfastart_lineaheadersTaselfadelegateTaselfatimeoutTaselfamax_body_sizeTaselfadelegateafutTaselfachunkafutureT	aselfastart_lineaheadersachunkalinesaheader_linesalineafutureadatau.tornado.httpclient�V%a_closedaIOLoopTFTamake_currenta_io_loopaAsyncHTTPClientDareturnaAsyncHTTPClientamake_clientuHTTPClient.__init__.<locals>.make_clientarun_synca_async_clientagenasleepTlaasync_client_classakwargsacloseuCloses the HTTPClient, freeing any resources used.apartialafetchuExecutes a request, returning an `HTTPResponse`.

        The request may be either a string URL or an `HTTPRequest` object.
        If it is a string, we construct an `HTTPRequest` using any additional
        kwargs: ``HTTPRequest(request, **kwargs)``

        If an error occurs during the fetch, we raise an `HTTPError` unless
        the ``raise_error`` keyword argument is set to False.
        utornado.simple_httpclientTaSimpleAsyncHTTPClientlaSimpleAsyncHTTPClienta_async_client_dict_a__name__aweakrefaWeakKeyDictionaryacurrenta_async_clientsaclsa__new__a_instance_cacheaio_loopainstanceaHTTPRequesta_DEFAULTSadefaultsaupdateaselfapopuinconsistent AsyncHTTPClient cacheuDestroys this HTTP client, freeing any file descriptors used.

        This method is **not needed in normal use** due to the way
        that `AsyncHTTPClient` objects are transparently reused.
        ``close()`` is generally only necessary when either the
        `.IOLoop` is also being closed, or the ``force_instance=True``
        argument was used when creating the `AsyncHTTPClient`.

        No other methods may be called on the `AsyncHTTPClient` after
        ``close()``.

        ufetch() called on closed AsyncHTTPClientaurlukwargs can't be used if request is an HTTPRequest objectahttputilaHTTPHeadersaheadersa_RequestProxyaFutureDaresponseareturnaHTTPResponsenahandle_responseuAsyncHTTPClient.fetch.<locals>.handle_responseafetch_implacastuExecutes a request, asynchronously returning an `HTTPResponse`.

        The request may be either a string URL or an `HTTPRequest` object.
        If it is a string, we construct an `HTTPRequest` using any additional
        kwargs: ``HTTPRequest(request, **kwargs)``

        This method returns a `.Future` whose result is an
        `HTTPResponse`. By default, the ``Future`` will raise an
        `HTTPError` if the request returned a non-200 response code
        (other errors may also be raised if the server could not be
        contacted). Instead, if ``raise_error`` is set to False, the
        response will always be returned regardless of the response
        code.

        If a ``callback`` is given, it will be invoked with the `HTTPResponse`.
        In the callback interface, `HTTPError` is not automatically raised.
        Instead, you must check the response's ``error`` attribute or
        call its `~HTTPResponse.rethrow` method.

        .. versionchanged:: 6.0

           The ``callback`` argument was removed. Use the returned
           `.Future` instead.

           The ``raise_error=False`` argument only affects the
           `HTTPError` raised when a non-200 response code is used,
           instead of suppressing all errors.
        aerroraraise_errora_error_is_response_codeafuture_set_exception_unless_cancelledafutureafuture_set_result_unless_cancelledaconfigureuConfigures the `AsyncHTTPClient` subclass to use.

        ``AsyncHTTPClient()`` actually creates an instance of a subclass.
        This method may be called with either a class object or the
        fully-qualified name of such a class (or ``None`` to use the default,
        ``SimpleAsyncHTTPClient``)

        If additional keyword arguments are given, they will be passed
        to the constructor of each subclass instance created.  The
        keyword argument ``max_clients`` determines the maximum number
        of simultaneous `~AsyncHTTPClient.fetch()` operations that can
        execute in parallel on each `.IOLoop`.  Additional arguments
        may be supported depending on the implementation class in use.

        Example::

           AsyncHTTPClient.configure("tornado.curl_httpclient.CurlAsyncHTTPClient")
        aformat_timestampuIf-Modified-Sinceaproxy_hostaproxy_portaproxy_usernameaproxy_passwordaproxy_auth_modeamethodabodyabody_produceraauth_usernameaauth_passwordaauth_modeaconnect_timeoutarequest_timeoutafollow_redirectsamax_redirectsauser_agentadecompress_responseanetwork_interfaceastreaming_callbackaheader_callbackaprepare_curl_callbackaallow_nonstandard_methodsavalidate_certaca_certsaallow_ipv6aclient_keyaclient_certassl_optionsaexpect_100_continueatimeastart_timeuAll parameters except ``url`` are optional.

        :arg str url: URL to fetch
        :arg str method: HTTP method, e.g. "GET" or "POST"
        :arg headers: Additional HTTP headers to pass on the request
        :type headers: `~tornado.httputil.HTTPHeaders` or `dict`
        :arg body: HTTP request body as a string (byte or unicode; if unicode
           the utf-8 encoding will be used)
        :type body: `str` or `bytes`
        :arg collections.abc.Callable body_producer: Callable used for
           lazy/asynchronous request bodies.
           It is called with one argument, a ``write`` function, and should
           return a `.Future`.  It should call the write function with new
           data as it becomes available.  The write function returns a
           `.Future` which can be used for flow control.
           Only one of ``body`` and ``body_producer`` may
           be specified.  ``body_producer`` is not supported on
           ``curl_httpclient``.  When using ``body_producer`` it is recommended
           to pass a ``Content-Length`` in the headers as otherwise chunked
           encoding will be used, and many servers do not support chunked
           encoding on requests.  New in Tornado 4.0
        :arg str auth_username: Username for HTTP authentication
        :arg str auth_password: Password for HTTP authentication
        :arg str auth_mode: Authentication mode; default is "basic".
           Allowed values are implementation-defined; ``curl_httpclient``
           supports "basic" and "digest"; ``simple_httpclient`` only supports
           "basic"
        :arg float connect_timeout: Timeout for initial connection in seconds,
           default 20 seconds (0 means no timeout)
        :arg float request_timeout: Timeout for entire request in seconds,
           default 20 seconds (0 means no timeout)
        :arg if_modified_since: Timestamp for ``If-Modified-Since`` header
        :type if_modified_since: `datetime` or `float`
        :arg bool follow_redirects: Should redirects be followed automatically
           or return the 3xx response? Default True.
        :arg int max_redirects: Limit for ``follow_redirects``, default 5.
        :arg str user_agent: String to send as ``User-Agent`` header
        :arg bool decompress_response: Request a compressed response from
           the server and decompress it after downloading.  Default is True.
           New in Tornado 4.0.
        :arg bool use_gzip: Deprecated alias for ``decompress_response``
           since Tornado 4.0.
        :arg str network_interface: Network interface or source IP to use for request.
           See ``curl_httpclient`` note below.
        :arg collections.abc.Callable streaming_callback: If set, ``streaming_callback`` will
           be run with each chunk of data as it is received, and
           ``HTTPResponse.body`` and ``HTTPResponse.buffer`` will be empty in
           the final response.
        :arg collections.abc.Callable header_callback: If set, ``header_callback`` will
           be run with each header line as it is received (including the
           first line, e.g. ``HTTP/1.0 200 OK\r\n``, and a final line
           containing only ``\r\n``.  All lines include the trailing newline
           characters).  ``HTTPResponse.headers`` will be empty in the final
           response.  This is most useful in conjunction with
           ``streaming_callback``, because it's the only way to get access to
           header data while the request is in progress.
        :arg collections.abc.Callable prepare_curl_callback: If set, will be called with
           a ``pycurl.Curl`` object to allow the application to make additional
           ``setopt`` calls.
        :arg str proxy_host: HTTP proxy hostname.  To use proxies,
           ``proxy_host`` and ``proxy_port`` must be set; ``proxy_username``,
           ``proxy_pass`` and ``proxy_auth_mode`` are optional.  Proxies are
           currently only supported with ``curl_httpclient``.
        :arg int proxy_port: HTTP proxy port
        :arg str proxy_username: HTTP proxy username
        :arg str proxy_password: HTTP proxy password
        :arg str proxy_auth_mode: HTTP proxy Authentication mode;
           default is "basic". supports "basic" and "digest"
        :arg bool allow_nonstandard_methods: Allow unknown values for ``method``
           argument? Default is False.
        :arg bool validate_cert: For HTTPS requests, validate the server's
           certificate? Default is True.
        :arg str ca_certs: filename of CA certificates in PEM format,
           or None to use defaults.  See note below when used with
           ``curl_httpclient``.
        :arg str client_key: Filename for client SSL key, if any.  See
           note below when used with ``curl_httpclient``.
        :arg str client_cert: Filename for client SSL certificate, if any.
           See note below when used with ``curl_httpclient``.
        :arg ssl.SSLContext ssl_options: `ssl.SSLContext` object for use in
           ``simple_httpclient`` (unsupported by ``curl_httpclient``).
           Overrides ``validate_cert``, ``ca_certs``, ``client_key``,
           and ``client_cert``.
        :arg bool allow_ipv6: Use IPv6 when available?  Default is True.
        :arg bool expect_100_continue: If true, send the
           ``Expect: 100-continue`` header and wait for a continue response
           before sending the request body.  Only supported with
           ``simple_httpclient``.

        .. note::

            When using ``curl_httpclient`` certain options may be
            inherited by subsequent fetches because ``pycurl`` does
            not allow them to be cleanly reset.  This applies to the
            ``ca_certs``, ``client_key``, ``client_cert``, and
            ``network_interface`` arguments.  If you use these
            options, you should pass them on every request (you don't
            have to always use the same values, but it's not possible
            to mix requests that specify these options with ones that
            use the defaults).

        .. versionadded:: 3.1
           The ``auth_mode`` argument.

        .. versionadded:: 4.0
           The ``body_producer`` and ``expect_100_continue`` arguments.

        .. versionadded:: 4.2
           The ``ssl_options`` argument.

        .. versionadded:: 4.5
           The ``proxy_auth_mode`` argument.
        a_headersa_bodyautf8arequestacodearesponsesagetaUnknownareasonabufferaeffective_urll�l,aHTTPErrorTamessagearesponsearequest_timeatime_infocagetvalueuIf there was an error on the request, raise an `HTTPError`.w,asortedaitemsu%s(%s)u%s=%ru<genexpr>uHTTPResponse.__repr__.<locals>.<genexpr>amessagearesponsea__class__a__init__uHTTP %d: %sutornado.optionsTadefineaoptionsaparse_command_lineadefineaoptionsaparse_command_lineTaprint_headersOboolFTatypeadefaultTaprint_bodyObooltTafollow_redirectsObooltTavalidate_certObooltTaproxy_hostOstrTatypeTaproxy_portOintaHTTPClientaclientTafollow_redirectsavalidate_certaproxy_hostaproxy_portaprint_headersaprintaprint_bodyanative_struBlocking and non-blocking HTTP client interfaces.

This module defines a common interface shared by two implementations,
``simple_httpclient`` and ``curl_httpclient``.  Applications may either
instantiate their chosen implementation class directly or use the
`AsyncHTTPClient` class from this module, which selects an implementation
that can be overridden with the `AsyncHTTPClient.configure` method.

The default implementation is ``simple_httpclient``, and this is expected
to be suitable for most users' needs.  However, some applications may wish
to switch to ``curl_httpclient`` for reasons such as the following:

* ``curl_httpclient`` has some features not found in ``simple_httpclient``,
  including support for HTTP proxies and the ability to use a specified
  network interface.

* ``curl_httpclient`` is more likely to be compatible with sites that are
  not-quite-compliant with the HTTP spec, or sites that use little-exercised
  features of HTTP.

* ``curl_httpclient`` is faster.

Note that if you are using ``curl_httpclient``, it is highly
recommended that you use a recent version of ``libcurl`` and
``pycurl``.  Currently the minimum supported version of libcurl is
7.22.0, and the minimum version of pycurl is 7.18.2.  It is highly
recommended that your ``libcurl`` installation is built with
asynchronous DNS resolver (threaded or c-ares), otherwise you may
encounter various problems with request timeouts (for more
information, see
http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTCONNECTTIMEOUTMS
and comments in curl_httpclient.py).

To select ``curl_httpclient``, call `AsyncHTTPClient.configure` at startup::

    AsyncHTTPClient.configure("tornado.curl_httpclient.CurlAsyncHTTPClient")
a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/httpclient.pya__file__a__spec__aoriginahas_locationa__cached__adatetimeafunctoolsaBytesIOasslutornado.concurrentTaFutureafuture_set_result_unless_cancelledafuture_set_exception_unless_cancelledutornado.escapeTautf8anative_stratornadoTagenahttputilutornado.ioloopTaIOLooputornado.utilTaConfigurableaConfigurableaTypeaAnyaUnionaDictaCallableaOptionalTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %su<metaclass>utornado.httpclienta__module__uA blocking HTTP client.

    This interface is provided to make it easier to share code between
    synchronous and asynchronous applications. Applications that are
    running an `.IOLoop` must use `AsyncHTTPClient` instead.

    Typical usage looks like this::

        http_client = httpclient.HTTPClient()
        try:
            response = http_client.fetch("http://www.google.com/")
            print(response.body)
        except httpclient.HTTPError as e:
            # HTTPError is raised for non-200 responses; the response
            # can be found in e.response.
            print("Error: " + str(e))
        except Exception as e:
            # Other errors are possible, such as IOError.
            print("Error: " + str(e))
        http_client.close()

    .. versionchanged:: 5.0

       Due to limitations in `asyncio`, it is no longer possible to
       use the synchronous ``HTTPClient`` while an `.IOLoop` is running.
       Use `AsyncHTTPClient` instead.

    a__qualname__TnuOptional[Type[AsyncHTTPClient]]areturnuHTTPClient.__init__Dareturnna__del__uHTTPClient.__del__uHTTPClient.closeastraHTTPResponseuHTTPClient.fetcha__orig_bases__uAn non-blocking HTTP client.

    Example usage::

        async def f():
            http_client = AsyncHTTPClient()
            try:
                response = await http_client.fetch("http://www.google.com")
            except Exception as e:
                print("Error: %s" % e)
            else:
                print(response.body)

    The constructor for this class is magic in several respects: It
    actually creates an instance of an implementation-specific
    subclass, and instances are reused as a kind of pseudo-singleton
    (one per `.IOLoop`). The keyword argument ``force_instance=True``
    can be used to suppress this singleton behavior. Unless
    ``force_instance=True`` is used, no arguments should be passed to
    the `AsyncHTTPClient` constructor. The implementation subclass as
    well as arguments to its constructor can be set with the static
    method `configure()`

    All `AsyncHTTPClient` implementations support a ``defaults``
    keyword argument, which can be used to set default values for
    `HTTPRequest` attributes.  For example::

        AsyncHTTPClient.configure(
            None, defaults=dict(user_agent="MyUserAgent"))
        # or with force_instance:
        client = AsyncHTTPClient(force_instance=True,
            defaults=dict(user_agent="MyUserAgent"))

    .. versionchanged:: 5.0
       The ``io_loop`` argument (deprecated since version 4.1) has been removed.

    aclassmethodaconfigurable_baseuAsyncHTTPClient.configurable_baseaconfigurable_defaultuAsyncHTTPClient.configurable_defaultuAsyncHTTPClient._async_clientsaforce_instanceabooluAsyncHTTPClient.__new__ainitializeuAsyncHTTPClient.initializeuAsyncHTTPClient.closeTtuFuture[HTTPResponse]uAsyncHTTPClient.fetchacallbackTLaHTTPResponsenuAsyncHTTPClient.fetch_implaimpluUnion[None, str, Type[Configurable]]uAsyncHTTPClient.configureuHTTP client request object.adictTf4@f4@tltuFtTaconnect_timeoutarequest_timeoutafollow_redirectsamax_redirectsadecompress_responseaproxy_passwordaallow_nonstandard_methodsavalidate_certDaconnect_timeoutarequest_timeoutafollow_redirectsamax_redirectsadecompress_responseaproxy_passwordaallow_nonstandard_methodsavalidate_certf4@f4@tltuFtT aGETnnnnnnnnnnnnnnnnnnnnnnnnnnnnFnnabytesafloataif_modified_sinceaintause_gzipuFuture[None]aSSLContextuHTTPRequest.__init__apropertyuHTTPRequest.headersasetteravalueuHTTPRequest.bodyuHTTP Response object.

    Attributes:

    * ``request``: HTTPRequest object

    * ``code``: numeric HTTP status code, e.g. 200 or 404

    * ``reason``: human-readable reason phrase describing the status code

    * ``headers``: `tornado.httputil.HTTPHeaders` object

    * ``effective_url``: final location of the resource after following any
      redirects

    * ``buffer``: ``cStringIO`` object for response body

    * ``body``: response body as bytes (created on demand from ``self.buffer``)

    * ``error``: Exception object, if any

    * ``request_time``: seconds from request start to finish. Includes all
      network operations from DNS resolution to receiving the last byte of
      data. Does not include time spent in the queue (due to the
      ``max_clients`` option). If redirects were followed, only includes
      the final request.

    * ``start_time``: Time at which the HTTP operation started, based on
      `time.time` (not the monotonic clock used by `.IOLoop.time`). May
      be ``None`` if the request timed out while in the queue.

    * ``time_info``: dictionary of diagnostic timing information from the
      request. Available data are subject to change, but currently uses timings
      available from http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html,
      plus ``queue``, which is the delay (if any) introduced by waiting for
      a slot under `AsyncHTTPClient`'s ``max_clients`` setting.

    .. versionadded:: 5.1

       Added the ``start_time`` attribute.

    .. versionchanged:: 5.1

       The ``request_time`` attribute previously included time spent in the queue
       for ``simple_httpclient``, but not in ``curl_httpclient``. Now queueing time
       is excluded in both implementations. ``request_time`` is now more accurate for
       ``curl_httpclient`` because it uses a monotonic clock when available.
    TnnnnnnnnaBaseExceptionuHTTPResponse.__init__uHTTPResponse.bodyarethrowuHTTPResponse.rethrowa__repr__uHTTPResponse.__repr__TEExceptionaHTTPClientErroruException thrown for an unsuccessful HTTP request.

    Attributes:

    * ``code`` - HTTP error integer error code, e.g. 404.  Error code 599 is
      used when no HTTP response was received, e.g. for a timeout.

    * ``response`` - `HTTPResponse` object, if any.

    Note that if ``follow_redirects`` is False, redirects become HTTPErrors,
    and you can look at ``error.response.headers['Location']`` to see the
    destination of the redirect.

    .. versionchanged:: 5.1

       Renamed from ``HTTPError`` to ``HTTPClientError`` to avoid collisions with
       `tornado.web.HTTPError`. The name ``tornado.httpclient.HTTPError`` remains
       as an alias.
    TnnuHTTPClientError.__init__a__str__uHTTPClientError.__str__uCombines an object with a dictionary of defaults.

    Used internally by AsyncHTTPClient implementations.
    u_RequestProxy.__init__anamea__getattr__u_RequestProxy.__getattr__amainTa.0wiu<module tornado.httpclient>Ta__class__TaselfTaselfanamearequest_attrTaselfaasync_client_classakwargsamake_clientTaselfacodeamessagearesponsea__class__Taselfarequestacodeaheadersabufferaeffective_urlaerrorarequest_timeatime_infoareasonastart_timeTaselfarequestadefaultsT"aselfaurlamethodaheadersabodyaauth_usernameaauth_passwordaauth_modeaconnect_timeoutarequest_timeoutaif_modified_sinceafollow_redirectsamax_redirectsauser_agentause_gzipanetwork_interfaceastreaming_callbackaheader_callbackaprepare_curl_callbackaproxy_hostaproxy_portaproxy_usernameaproxy_passwordaproxy_auth_modeaallow_nonstandard_methodsavalidate_certaca_certsaallow_ipv6aclient_keyaclient_certabody_produceraexpect_100_continueadecompress_responseassl_optionsTaclsaforce_instanceakwargsaio_loopainstance_cacheainstancea__class__TaselfaargsTaclsaattr_nameTaselfavalueTaselfacached_valTaclsTaclsaSimpleAsyncHTTPClientTaclsaimplakwargsa__class__TaselfarequestakwargsaresponseTaselfarequestaraise_errorakwargsarequest_proxyafutureahandle_responseTaselfarequestacallbackTaresponsearaise_errorafutureTafuturearaise_errorTaselfadefaultsTadefineaoptionsaparse_command_lineaargsaclientaargaresponseweTaasync_client_classakwargsu.tornado.httpserver�%�arequest_callbackaxheadersaprotocolaHTTP1ConnectionParameterslTadecompressachunk_sizeamax_header_sizeaheader_timeoutamax_body_sizeabody_timeoutano_keep_aliveaconn_paramsaTCPServera__init__Tassl_optionsamax_buffer_sizearead_chunk_sizea_connectionsatrusted_downstreamaHTTPServeruClose all open connections and asynchronously wait for them to finish.

        This method is used in combination with `~.TCPServer.stop` to
        support clean shutdowns (especially for unittests). Typical
        usage would call ``stop()`` first to stop accepting new
        connections, then ``await close_all_connections()`` to wait for
        existing connections to finish.

        This method does not currently close open websocket connections.

        Note that this method is a coroutine and must be called with ``await``.

        aselfacloseaclose_all_connectionsuHTTPServer.close_all_connectionsa_HTTPRequestContextaHTTP1ServerConnectionaaddastart_servingahttputilaHTTPServerConnectionDelegateastart_requesta_CallableAdaptera_ProxyAdapterarequest_connaremoveatypingacastaconnectionarequestadelegatea_chunksaHTTPServerRequestaRequestStartLineTaconnectionastart_lineaheadersaappendcajoinabodya_parse_bodyaaddressasocketafamilyaaddress_familyaAF_INETaAF_INET6laremote_ipu0.0.0.0aiostreamaSSLIOStreamahttpsahttpa_orig_remote_ipa_orig_protocolanative_stragetuX-Forwarded-ForasplitTw,uX-Real-Ipaipanetutilais_valid_ipuX-SchemeuX-Forwarded-Protol��������astripTahttpahttpsuRewrite the ``remote_ip`` and ``protocol`` fields.u<genexpr>u_HTTPRequestContext._apply_xheaders.<locals>.<genexpr>uUndo changes from `_apply_xheaders`.

        Xheaders are per-request so they should not leak to the next
        request on the same connection.
        acontexta_apply_xheadersaheaders_receivedadata_receivedafinisha_cleanupaon_connection_closea_unapply_xheadersuA non-blocking, single-threaded HTTP server.

Typical applications have little direct interaction with the `HTTPServer`
class except to start a server at the beginning of the process
(and even that is often done indirectly via `tornado.web.Application.listen`).

.. versionchanged:: 4.0

   The ``HTTPRequest`` class that used to live in this module has been moved
   to `tornado.httputil.HTTPServerRequest`.  The old name remains as an alias.
a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/httpserver.pya__file__a__spec__aoriginahas_locationa__cached__asslutornado.escapeTanative_strutornado.http1connectionTaHTTP1ServerConnectionaHTTP1ConnectionParametersatornadoTahttputilTaiostreamTanetutilutornado.tcpserverTaTCPServerutornado.utilTaConfigurableaConfigurableaUnionaAnyaDictaCallableaListaTypeaTupleaOptionalaAwaitableametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>utornado.httpservera__module__uA non-blocking, single-threaded HTTP server.

    A server is defined by a subclass of `.HTTPServerConnectionDelegate`,
    or, for backwards compatibility, a callback that takes an
    `.HTTPServerRequest` as an argument. The delegate is usually a
    `tornado.web.Application`.

    `HTTPServer` supports keep-alive connections by default
    (automatically for HTTP/1.1, or for HTTP/1.0 when the client
    requests ``Connection: keep-alive``).

    If ``xheaders`` is ``True``, we support the
    ``X-Real-Ip``/``X-Forwarded-For`` and
    ``X-Scheme``/``X-Forwarded-Proto`` headers, which override the
    remote IP and URI scheme/protocol for all requests.  These headers
    are useful when running Tornado behind a reverse proxy or load
    balancer.  The ``protocol`` argument can also be set to ``https``
    if Tornado is run behind an SSL-decoding proxy that does not set one of
    the supported ``xheaders``.

    By default, when parsing the ``X-Forwarded-For`` header, Tornado will
    select the last (i.e., the closest) address on the list of hosts as the
    remote host IP address.  To select the next server in the chain, a list of
    trusted downstream hosts may be passed as the ``trusted_downstream``
    argument.  These hosts will be skipped when parsing the ``X-Forwarded-For``
    header.

    To make this server serve SSL traffic, send the ``ssl_options`` keyword
    argument with an `ssl.SSLContext` object. For compatibility with older
    versions of Python ``ssl_options`` may also be a dictionary of keyword
    arguments for the `ssl.wrap_socket` method.::

       ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
       ssl_ctx.load_cert_chain(os.path.join(data_dir, "mydomain.crt"),
                               os.path.join(data_dir, "mydomain.key"))
       HTTPServer(application, ssl_options=ssl_ctx)

    `HTTPServer` initialization follows one of three patterns (the
    initialization methods are defined on `tornado.tcpserver.TCPServer`):

    1. `~tornado.tcpserver.TCPServer.listen`: single-process::

            async def main():
                server = HTTPServer()
                server.listen(8888)
                await asyncio.Event.wait()

            asyncio.run(main())

       In many cases, `tornado.web.Application.listen` can be used to avoid
       the need to explicitly create the `HTTPServer`.

       While this example does not create multiple processes on its own, when
       the ``reuse_port=True`` argument is passed to ``listen()`` you can run
       the program multiple times to create a multi-process service.

    2. `~tornado.tcpserver.TCPServer.add_sockets`: multi-process::

            sockets = bind_sockets(8888)
            tornado.process.fork_processes(0)
            async def post_fork_main():
                server = HTTPServer()
                server.add_sockets(sockets)
                await asyncio.Event().wait()
            asyncio.run(post_fork_main())

       The ``add_sockets`` interface is more complicated, but it can be used with
       `tornado.process.fork_processes` to run a multi-process service with all
       worker processes forked from a single parent.  ``add_sockets`` can also be
       used in single-process servers if you want to create your listening
       sockets in some way other than `~tornado.netutil.bind_sockets`.

       Note that when using this pattern, nothing that touches the event loop
       can be run before ``fork_processes``.

    3. `~tornado.tcpserver.TCPServer.bind`/`~tornado.tcpserver.TCPServer.start`:
       simple **deprecated** multi-process::

            server = HTTPServer()
            server.bind(8888)
            server.start(0)  # Forks multiple sub-processes
            IOLoop.current().start()

       This pattern is deprecated because it requires interfaces in the
       `asyncio` module that have been deprecated since Python 3.10. Support for
       creating multiple processes in the ``start`` method will be removed in a
       future version of Tornado.

    .. versionchanged:: 4.0
       Added ``decompress_request``, ``chunk_size``, ``max_header_size``,
       ``idle_connection_timeout``, ``body_timeout``, ``max_body_size``
       arguments.  Added support for `.HTTPServerConnectionDelegate`
       instances as ``request_callback``.

    .. versionchanged:: 4.1
       `.HTTPServerConnectionDelegate.start_request` is now called with
       two arguments ``(server_conn, request_conn)`` (in accordance with the
       documentation) instead of one ``(request_conn)``.

    .. versionchanged:: 4.2
       `HTTPServer` is now a subclass of `tornado.util.Configurable`.

    .. versionchanged:: 4.5
       Added the ``trusted_downstream`` argument.

    .. versionchanged:: 5.0
       The ``io_loop`` argument has been removed.
    a__qualname__aargsakwargsareturnuHTTPServer.__init__TFpnnFnnnnnnnano_keep_aliveaboolassl_optionsastraSSLContextadecompress_requestachunk_sizeaintamax_header_sizeaidle_connection_timeoutafloatabody_timeoutamax_body_sizeamax_buffer_sizeainitializeuHTTPServer.initializeaclassmethodaconfigurable_baseuHTTPServer.configurable_baseaconfigurable_defaultuHTTPServer.configurable_defaultDareturnnastreamaIOStreamahandle_streamuHTTPServer.handle_streamaserver_connaobjectaHTTPConnectionaHTTPMessageDelegateuHTTPServer.start_requestaon_closeuHTTPServer.on_closea__orig_bases__u_CallableAdapter.__init__astart_lineaResponseStartLineaheadersaHTTPHeadersu_CallableAdapter.headers_receivedachunkabytesu_CallableAdapter.data_receivedu_CallableAdapter.finishu_CallableAdapter.on_connection_closeTOobjectTnu_HTTPRequestContext.__init__a__str__u_HTTPRequestContext.__str__u_HTTPRequestContext._apply_xheadersu_HTTPRequestContext._unapply_xheadersu_ProxyAdapter.__init__u_ProxyAdapter.headers_receivedu_ProxyAdapter.data_receivedu_ProxyAdapter.finishu_ProxyAdapter.on_connection_closeu_ProxyAdapter._cleanupaHTTPRequestTa.0acandu<module tornado.httpserver>Ta__class__TaselfaargsakwargsTaselfadelegatearequest_connTaselfarequest_callbackarequest_connTaselfastreamaaddressaprotocolatrusted_downstreamTaselfTaselfaheadersaipaproto_headerTaselfaconnTaclsTaselfachunkTaselfastreamaaddressacontextaconnTaselfastart_lineaheadersTaselfarequest_callbackano_keep_aliveaxheadersassl_optionsaprotocoladecompress_requestachunk_sizeamax_header_sizeaidle_connection_timeoutabody_timeoutamax_body_sizeamax_buffer_sizeatrusted_downstreamTaselfaserver_connTaselfaserver_connarequest_connadelegateu.tornado.httputil�N�w-asplitTw-acapitalizeuMap a header name to Http-Header-Case.

    >>> _normalize_header("coNtent-TYPE")
    'Content-Type'
    a_dicta_as_lista_last_keylaHTTPHeadersaget_allutoo many values to unpack (expected 2)aselfaaddaupdateakwargsa_normalize_headeranative_strw,aappenduAdds a new value for the given key.agetuReturns all values for the given header as a list.uReturns an iterable of all (name, value) pairs.

        If a header has multiple values, multiple pairs will be
        returned with the same name.
        aitemsuHTTPHeaders.get_allaisspaceaHTTPInputErrorTufirst header line cannot start with whitespacew alstripl��������Tw:lTuno colon in header lineastripuUpdates the dictionary with a single header line.

        >>> h = HTTPHeaders()
        >>> h.parse_line("Content-Type: text/html")
        >>> h.get('content-type')
        'text/html'
        Tw
aendswithTw
:nl��������nalinewhaparse_lineuReturns a dictionary from HTTP header text.

        >>> h = HTTPHeaders.parse("Content-Type: text/html\r\nContent-Length: 42\r\n")
        >>> sorted(h.items())
        [('Content-Length', '42'), ('Content-Type', 'text/html')]

        .. versionchanged:: 5.1

           Raises `HTTPInputError` on malformed headers instead of a
           mix of `KeyError`, and `ValueError`.

        alinesu%s: %s
uutoo many values to unpack (expected 3)amethodauriaversionaheaderscabodyacontextaremote_ipaprotocolahttpTaHostu127.0.0.1ahostasplit_host_and_portalowerahost_nameafilesaconnectionaserver_connectionatimea_start_timea_finish_timeapartitionTw?apathaqueryaparse_qs_bytesDakeep_blank_valuestaargumentsacopyadeepcopyaquery_argumentsabody_argumentsa_cookiesacookiesaSimpleCookieaCookieaparse_cookieaparseduA dictionary of ``http.cookies.Morsel`` objects.u://uReconstructs the full URL for this request.uReturns the amount of time it took for this request to execute.astreamasocketagetpeercertTabinary_formaSSLErroruReturns the client's SSL certificate, if any.

        To use client certificates, the HTTPServer's
        `ssl.SSLContext.verify_mode` field must be set, e.g.::

            ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
            ssl_ctx.load_cert_chain("foo.crt", "foo.key")
            ssl_ctx.load_verify_locations("cacerts.pem")
            ssl_ctx.verify_mode = ssl.CERT_REQUIRED
            server = HTTPServer(app, ssl_options=ssl_ctx)

        By default, the return value is a dictionary (or None, if no
        client certificate is present).  If ``binary_form`` is true, a
        DER-encoded form of the certificate is returned instead.  See
        SSLSocket.getpeercert() in the standard library for more
        details.
        http://docs.python.org/library/ssl.html#sslsocket-objects
        aparse_body_argumentsTuContent-Typeuasetdefaultaextendu, Taprotocolahostamethodauriaversionaremote_ipu%s=%ru%s(%s)a__name__uThis method is called by the server when a new request has started.

        :arg server_conn: is an opaque object representing the long-lived
            (e.g. tcp-level) connection.
        :arg request_conn: is a `.HTTPConnection` object for a single
            request/response exchange.

        This method should return a `.HTTPMessageDelegate`.
        uWrite an HTTP header block.

        :arg start_line: a `.RequestStartLine` or `.ResponseStartLine`.
        :arg headers: a `.HTTPHeaders` instance.
        :arg chunk: the first (optional) chunk of data.  This is an optimization
            so that small responses can be written in the same call as their
            headers.

        The ``version`` field of ``start_line`` is ignored.

        Returns a future for flow control.

        .. versionchanged:: 6.0

           The ``callback`` argument was removed.
        uWrites a chunk of body data.

        Returns a future for flow control.

        .. versionchanged:: 6.0

           The ``callback`` argument was removed.
        uIndicates that the last body data has been written.aurlparseaparse_qslu'args' parameter should be dict, list or tuple. Not {0}aurlencodeaparsed_queryaurlunparseaparsed_urllllluConcatenate url and arguments regardless of whether
    url has existing query parameters.

    ``args`` may be either a dictionary or a list of key-value pairs
    (the latter allows for multiple values with the same key.

    >>> url_concat("http://example.com/foo", dict(c="d"))
    'http://example.com/foo?c=d'
    >>> url_concat("http://example.com/foo?a=b", dict(c="d"))
    'http://example.com/foo?a=b&c=d'
    >>> url_concat("http://example.com/foo?a=b", [("c", "d"), ("c", "d2")])
    'http://example.com/foo?a=b&c=d&c=d2'
    Tw=abytesa_int_or_noneuParses a Range header.

    Returns either ``None`` or tuple ``(start, end)``.
    Note that while the HTTP headers use inclusive byte positions,
    this method returns indexes suitable for use in slices.

    >>> start, end = _parse_request_range("bytes=1-2")
    >>> start, end
    (1, 3)
    >>> [0, 1, 2, 3, 4][start:end]
    [1, 2]
    >>> _parse_request_range("bytes=6-")
    (6, None)
    >>> _parse_request_range("bytes=-6")
    (-6, None)
    >>> _parse_request_range("bytes=-0")
    (None, 0)
    >>> _parse_request_range("bytes=")
    (None, None)
    >>> _parse_request_range("foo=42")
    >>> _parse_request_range("bytes=1-2,6-10")

    Note: only supports one range (ex, ``bytes=1-2,6-10`` is not allowed).

    See [0] for the details of the range header.

    [0]: http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p5-range-latest.html#byte.ranges
    ubytes %s-%s/%suReturns a suitable Content-Range header:

    >>> print(_get_content_range(None, 1, 4))
    bytes 0-0/4
    >>> print(_get_content_range(1, 3, 4))
    bytes 1-2/4
    >>> print(_get_content_range(None, None, 4))
    bytes 0-3/4
    astartswithTuapplication/x-www-form-urlencodeduContent-Encodingagen_logawarninguUnsupported Content-Encoding: %suInvalid x-www-form-urlencoded body: %sTumultipart/form-dataTw;aboundaryaparse_multipart_form_dataautf8umultipart boundary not founduInvalid multipart/form-data: %suParses a form request body.

    Supports ``application/x-www-form-urlencoded`` and
    ``multipart/form-data``.  The ``content_type`` parameter should be
    a string and ``body`` should be a byte string.  The ``arguments``
    and ``files`` parameters are dictionaries that will be updated
    with the parsed contents.
    Td":ll��������narfindc--TuInvalid multipart/form-data: no final boundaryc
afindTc

Tumultipart/form-data missing headersaparseadecodeTuutf-8TuContent-Dispositionua_parse_headeruform-dataTc
TuInvalid multipart/form-datall��������TanameTumultipart/form-data value missing nameanameTafilenameTuContent-Typeuapplication/unknownaHTTPFileafilenameTafilenameabodyacontent_typeuParses a ``multipart/form-data`` body.

    The ``boundary`` and ``data`` parameters are both byte strings.
    The dictionaries given in the arguments and files parameters
    will be updated with the contents of the body.

    .. versionchanged:: 5.1

       Now recognizes non-ASCII filenames in RFC 2231/5987
       (``filename*=``) format.
    TOintOfloatastruct_timeacalendaratimegmadatetimeautctimetupleuunknown timestamp type: %raemailautilsaformatdateDausegmttuFormats a timestamp in the format used by HTTP.

    The argument may be a numeric timestamp as returned by `time.time`,
    a time tuple as returned by `time.gmtime`, or a `datetime.datetime`
    object.

    >>> format_timestamp(1359312200)
    'Sun, 27 Jan 2013 18:43:20 GMT'
    Tw TuMalformed HTTP request linea_http_version_reamatchuMalformed HTTP version in HTTP Request-Line: %raRequestStartLineuReturns a (method, path, version) tuple for an HTTP 1.x request line.

    The response is a `collections.namedtuple`.

    >>> parse_request_start_line("GET /foo HTTP/1.1")
    RequestStartLine(method='GET', path='/foo', version='HTTP/1.1')
    a_http_response_line_reTuError parsing response start lineaResponseStartLineagroupTlTlTluReturns a (version, code, reason) tuple for an HTTP 1.x response line.

    The response is a `collections.namedtuple`.

    >>> parse_response_start_line("HTTP/1.1 200 OK")
    ResponseStartLine(version='HTTP/1.1', code=200, reason='OK')
    ws:nlnw;:lnnaendacountw"u\"a_parseparamLTaDummyavalueaparamsadecode_paramsapopTlacollapse_rfc2231_valueavalueapdictuParse a Content-type like header.

    Return the main content-type and a dictionary of options.

    >>> d = "form-data; foo=\"b\\\\a\\\"r\"; file*=utf-8''T%C3%A4st"
    >>> ct, d = _parse_header(d)
    >>> ct
    'form-data'
    >>> d['file'] == r'T\u00e4st'.encode('ascii').decode('unicode_escape')
    True
    >>> d['foo']
    'b\\a"r'
    asortedaoutu%s=%su; uInverse of _parse_header.

    >>> _encode_header('permessage-deflate',
    ...     {'client_max_window_bits': 15, 'client_no_context_takeover': None})
    'permessage-deflate; client_max_window_bits=15; client_no_context_takeover'
    aunicode_typeaunicodedataanormalizeaNFCd:uEncodes a username/password pair in the format used by HTTP auth.

    The return value is a byte string in the form ``username:password``.

    .. versionadded:: 5.1
    a_netloc_reuReturns ``(host, port)`` tuple from ``netloc``.

    Returned ``port`` will be ``None`` if not present.

    .. versionadded:: 4.1
    uGenerator converting a result of ``parse_qs`` back to name-value pairs.

    .. versionadded:: 5.0
    aqsaqs_to_qslwia_OctalPattasearcha_QuotePattaresastartaq_matchao_matchla_nulljoinuHandle double quotes and escaping in cookie values.

    This method is copied verbatim from the Python 3.5 standard
    library (http.cookies._unquote) so we don't have to depend on
    non-public interfaces.
    w=Tw=la_unquote_cookieacookiedictuParse a ``Cookie`` HTTP header into a dict of name/value pairs.

    This function attempts to mimic browser cookie parsing behavior;
    it specifically does not follow any of the cookie-related RFCs
    (because browsers don't either).

    The algorithm used is identical to that used by Django version 1.9.10.

    .. versionadded:: 4.4.2
    uHTTP utility code shared by clients and servers.

This module also defines the `HTTPServerRequest` class which is exposed
via `tornado.web.RequestHandler.request`.
a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/httputil.pya__file__a__spec__aoriginahas_locationa__cached__ucollections.abcacollectionsuemail.utilsalru_cacheuhttp.clientTaresponsesaresponsesuhttp.cookiesareasslTaSSLErroruurllib.parseTaurlencodeaurlparseaurlunparseaparse_qslutornado.escapeTanative_straparse_qs_bytesautf8utornado.logTagen_logutornado.utilTaObjectDictaunicode_typeaObjectDictatypingaTupleaIterableaListaMappingaIteratoraDictaUnionaOptionalaAwaitableaGeneratoraAnyStrTl�DanameareturnOstrpaabcaMutableMappingametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %su<metaclass>utornado.httputila__module__uA dictionary that maintains ``Http-Header-Case`` for all keys.

    Supports multiple values per key via a pair of new methods,
    `add()` and `get_list()`.  The regular dictionary interface
    returns a single value per key, with multiple values joined by a
    comma.

    >>> h = HTTPHeaders({"content-type": "text/html"})
    >>> list(h.keys())
    ['Content-Type']
    >>> h["Content-Type"]
    'text/html'

    >>> h.add("Set-Cookie", "A=B")
    >>> h.add("Set-Cookie", "C=D")
    >>> h["set-cookie"]
    'A=B,C=D'
    >>> h.get_list("set-cookie")
    ['A=B', 'C=D']

    >>> for (k,v) in sorted(h.get_all()):
    ...    print('%s: %s' % (k,v))
    ...
    Content-Type: text/html
    Set-Cookie: A=B
    Set-Cookie: C=D
    a__qualname__aoverloada_HTTPHeaders__argastrareturna__init__uHTTPHeaders.__init__aargsaAnyuHTTPHeaders.addaget_listuHTTPHeaders.get_listuHTTPHeaders.parse_lineaclassmethoduHTTPHeaders.parsea__setitem__uHTTPHeaders.__setitem__uHTTPHeaders.__getitem__a__delitem__uHTTPHeaders.__delitem__ainta__len__uHTTPHeaders.__len__a__iter__uHTTPHeaders.__iter__DareturnaHTTPHeadersuHTTPHeaders.copya__copy__a__str__uHTTPHeaders.__str__a__unicode__a__orig_bases__TOobjectaHTTPServerRequestuA single HTTP request.

    All attributes are type `str` unless otherwise noted.

    .. attribute:: method

       HTTP request method, e.g. "GET" or "POST"

    .. attribute:: uri

       The requested uri.

    .. attribute:: path

       The path portion of `uri`

    .. attribute:: query

       The query portion of `uri`

    .. attribute:: version

       HTTP version specified in request, e.g. "HTTP/1.1"

    .. attribute:: headers

       `.HTTPHeaders` dictionary-like object for request headers.  Acts like
       a case-insensitive dictionary with additional methods for repeated
       headers.

    .. attribute:: body

       Request body, if present, as a byte string.

    .. attribute:: remote_ip

       Client's IP address as a string.  If ``HTTPServer.xheaders`` is set,
       will pass along the real IP address provided by a load balancer
       in the ``X-Real-Ip`` or ``X-Forwarded-For`` header.

    .. versionchanged:: 3.1
       The list format of ``X-Forwarded-For`` is now supported.

    .. attribute:: protocol

       The protocol used, either "http" or "https".  If ``HTTPServer.xheaders``
       is set, will pass along the protocol used by a load balancer if
       reported via an ``X-Scheme`` header.

    .. attribute:: host

       The requested hostname, usually taken from the ``Host`` header.

    .. attribute:: arguments

       GET/POST arguments are available in the arguments property, which
       maps arguments names to lists of values (to support multiple values
       for individual names). Names are of type `str`, while arguments
       are byte strings.  Note that this is different from
       `.RequestHandler.get_argument`, which returns argument values as
       unicode strings.

    .. attribute:: query_arguments

       Same format as ``arguments``, but contains only arguments extracted
       from the query string.

       .. versionadded:: 3.2

    .. attribute:: body_arguments

       Same format as ``arguments``, but contains only arguments extracted
       from the request body.

       .. versionadded:: 3.2

    .. attribute:: files

       File uploads are available in the files property, which maps file
       names to lists of `.HTTPFile`.

    .. attribute:: connection

       An HTTP request is attached to a single HTTP connection, which can
       be accessed through the "connection" attribute. Since connections
       are typically kept open in HTTP/1.1, multiple requests can be handled
       sequentially on a single connection.

    .. versionchanged:: 4.0
       Moved from ``tornado.httpserver.HTTPRequest``.
    a_body_futureT
nnuHTTP/1.0nnnnnnnaHTTPConnectionastart_lineaobjectuHTTPServerRequest.__init__apropertyaMorseluHTTPServerRequest.cookiesafull_urluHTTPServerRequest.full_urlafloatarequest_timeuHTTPServerRequest.request_timeTFabinary_formaboolaget_ssl_certificateuHTTPServerRequest.get_ssl_certificateDareturnna_parse_bodyuHTTPServerRequest._parse_bodya__repr__uHTTPServerRequest.__repr__TEExceptionuException class for malformed HTTP requests or responses
    from remote sources.

    .. versionadded:: 4.0
    aHTTPOutputErroruException class for errors in HTTP output.

    .. versionadded:: 4.0
    aHTTPServerConnectionDelegateuImplement this interface to handle requests from `.HTTPServer`.

    .. versionadded:: 4.0
    aserver_connarequest_connaHTTPMessageDelegateastart_requestuHTTPServerConnectionDelegate.start_requestuThis method is called when a connection has been closed.

        :arg server_conn: is a server connection that has previously been
            passed to ``start_request``.
        aon_closeuHTTPServerConnectionDelegate.on_closeuImplement this interface to handle an HTTP request or response.

    .. versionadded:: 4.0
    TaRequestStartLineaResponseStartLineuCalled when the HTTP headers have been received and parsed.

        :arg start_line: a `.RequestStartLine` or `.ResponseStartLine`
            depending on whether this is a client or server message.
        :arg headers: a `.HTTPHeaders` instance.

        Some `.HTTPConnection` methods can only be called during
        ``headers_received``.

        May return a `.Future`; if it does the body will not be read
        until it is done.
        aheaders_receiveduHTTPMessageDelegate.headers_receivedachunkuCalled when a chunk of data has been received.

        May return a `.Future` for flow control.
        adata_receiveduHTTPMessageDelegate.data_receiveduCalled after the last chunk of data has been received.afinishuHTTPMessageDelegate.finishuCalled if the connection is closed without finishing the request.

        If ``headers_received`` is called, either ``finish`` or
        ``on_connection_close`` will be called, but not both.
        aon_connection_closeuHTTPMessageDelegate.on_connection_closeuApplications use this interface to write their responses.

    .. versionadded:: 4.0
    TnuFuture[None]awrite_headersuHTTPConnection.write_headersawriteuHTTPConnection.writeuHTTPConnection.finishaurlTOstrpaurl_concatuRepresents a file uploaded via a form.

    For backwards compatibility, its instance attributes are also
    accessible as dictionary keys.

    * ``filename``
    * ``body``
    * ``content_type``
    a__annotations__acontent_typearange_headera_parse_request_rangeatotala_get_content_rangeavaladataatsaformat_timestampanamedtupleLamethodapathaversionacompileTu^HTTP/1\.[0-9]$aparse_request_start_lineLaversionacodeareasonTu(HTTP/1.[0-9]) ([0-9]+) ([^\r]*)aparse_response_start_lineTOstrnnakeya_encode_headerausernameTOstrObytesapasswordaencode_username_passwordadoctestsTu^(.+):(\d+)$anetlocTu\\[0-3][0-7][0-7]Tu[\\].ajoinDwsareturnOstrpacookieu<listcomp>TwnaselfTwwu<module tornado.httputil>Ta__class__Taselfanameanorm_nameTaselfanameTaselfa_HTTPHeaders__argTaselfaargsTaselfaargsakwargswkwvTaselfakwargsT
aselfamethodauriaversionaheadersabodyahostafilesaconnectionastart_lineaserver_connectionacontextasepTaselfTaselfaattrsaargsTaselfanameavalueanorm_nameTaselfalinesanameavalueTakeyapdictaoutwkwvTastartaendatotalTavalTaselfwkwvTalineapartsakeyaparamswpwianameavalueadecoded_paramsapdictadecoded_valueTarange_headeraunitw_avalueastart_baend_bastartaendTwsaendwfTwswiwnaresao_matchaq_matchwjwkTaselfaparsedwkwvTaselfachunkTausernameapasswordTatsatime_numTaselfanameavaluesavalueTaselfabinary_formTaselfastart_lineaheadersTaselfaserver_connTaclsaheaderswhalineTacontent_typeabodyaargumentsafilesaheadersauri_argumentsweanameavaluesafieldsafieldwkasepwvTacookieacookiedictachunkakeyavalTaselfalineanew_partanameavalueTaboundaryadataaargumentsafilesafinal_boundary_indexapartsapartaeohaheadersadisp_headeradispositionadisp_paramsavalueanameactypeTalineamethodapathaversionTalineamatchTaqswkavswvTanetlocamatchahostaportTaselfaserver_connarequest_connTaurlaargsaparsed_urlaparsed_queryaerrafinal_queryTaselfastart_lineaheadersachunk.tornado.ioloop\[butornado.platform.asyncioTaBaseAsyncIOLooplaBaseAsyncIOLoopaimport_objectuonly AsyncIOLoop is allowed when asyncio is availableaIOLoopaconfigureacurrentuDeprecated alias for `IOLoop.current()`.

        .. versionchanged:: 5.0

           Previously, this method returned a global singleton
           `IOLoop`, in contrast with the per-thread `IOLoop` returned
           by `current()`. In nearly all cases the two were the same
           (when they differed, it was generally used from non-Tornado
           threads to communicate back to the main thread's `IOLoop`).
           This distinction is not present in `asyncio`, so in order
           to facilitate integration with that package `instance()`
           was changed to be an alias to `current()`. Applications
           using the cross-thread communications aspect of
           `instance()` should instead set their own global variable
           to point to the `IOLoop` they want to use.

        .. deprecated:: 5.0
        amake_currentuDeprecated alias for `make_current()`.

        .. versionchanged:: 5.0

           Previously, this method would set this `IOLoop` as the
           global singleton used by `IOLoop.instance()`. Now that
           `instance()` is an alias for `current()`, `install()`
           is an alias for `make_current()`.

        .. deprecated:: 5.0
        aclear_currentuDeprecated alias for `clear_current()`.

        .. versionchanged:: 5.0

           Previously, this method would clear the `IOLoop` used as
           the global singleton by `IOLoop.instance()`. Now that
           `instance()` is an alias for `current()`,
           `clear_instance()` is an alias for `clear_current()`.

        .. deprecated:: 5.0

        aasyncioaget_event_loopTERuntimeErrorEAssertionErrora_ioloop_for_asyncioTaAsyncIOMainLoopaAsyncIOMainLoopTtTamake_currentuReturns the current thread's `IOLoop`.

        If an `IOLoop` is currently running or has been marked as
        current by `make_current`, returns that instance.  If there is
        no current `IOLoop` and ``instance`` is true, creates one.

        .. versionchanged:: 4.1
           Added ``instance`` argument to control the fallback to
           `IOLoop.instance()`.
        .. versionchanged:: 5.0
           On Python 3, control of the current `IOLoop` is delegated
           to `asyncio`, with this and other methods as pass-through accessors.
           The ``instance`` argument now controls whether an `IOLoop`
           is created automatically when there is none, instead of
           whether we fall back to `IOLoop.instance()` (which is now
           an alias for this method). ``instance=False`` is deprecated,
           since even if we do not create an `IOLoop`, this method
           may initialize the asyncio loop.

        .. deprecated:: 6.2
           It is deprecated to call ``IOLoop.current()`` when no `asyncio`
           event loop is running.
        uMakes this the `IOLoop` for the current thread.

        An `IOLoop` automatically becomes current for its thread
        when it is started, but it is sometimes useful to call
        `make_current` explicitly before starting the `IOLoop`,
        so that code run at startup time can find the right
        instance.

        .. versionchanged:: 4.1
           An `IOLoop` created while there is no current `IOLoop`
           will automatically become current.

        .. versionchanged:: 5.0
           This method also sets the current `asyncio` event loop.

        .. deprecated:: 6.2
           The concept of an event loop that is "current" without
           currently running is deprecated in asyncio since Python
           3.10. All related functionality in Tornado is also
           deprecated. Instead, start the event loop with `asyncio.run`
           before interacting with it.
        awarningsawarnuclear_current is deprecatedaDeprecationWarningDastacklevella_clear_currentuClears the `IOLoop` for the current thread.

        Intended primarily for use by test frameworks in between tests.

        .. versionchanged:: 5.0
           This method also clears the current `asyncio` event loop.
        .. deprecated:: 6.2
        TFTainstancea_clear_current_hookTaAsyncIOLoopaAsyncIOLoopucurrent IOLoop already existsuCloses the `IOLoop`, freeing any resources used.

        If ``all_fds`` is true, all file descriptors registered on the
        IOLoop will be closed (not just the ones created by the
        `IOLoop` itself).

        Many applications will only use a single `IOLoop` that runs for the
        entire lifetime of the process.  In that case closing the `IOLoop`
        is not necessary since everything will be cleaned up when the
        process exits.  `IOLoop.close` is provided mainly for scenarios
        such as unit tests, which create and destroy a large number of
        ``IOLoops``.

        An `IOLoop` must be completely stopped before it can be closed.  This
        means that `IOLoop.stop()` must be called *and* `IOLoop.start()` must
        be allowed to return before attempting to call `IOLoop.close()`.
        Therefore the call to `close` will usually appear just after
        the call to `start` rather than near the call to `stop`.

        .. versionchanged:: 3.1
           If the `IOLoop` implementation supports non-integer objects
           for "file descriptors", those objects will have their
           ``close`` method when ``all_fds`` is true.
        uRegisters the given handler to receive the given events for ``fd``.

        The ``fd`` argument may either be an integer file descriptor or
        a file-like object with a ``fileno()`` and ``close()`` method.

        The ``events`` argument is a bitwise or of the constants
        ``IOLoop.READ``, ``IOLoop.WRITE``, and ``IOLoop.ERROR``.

        When an event occurs, ``handler(fd, events)`` will be run.

        .. versionchanged:: 4.0
           Added the ability to pass file-like objects in addition to
           raw file descriptors.
        uChanges the events we listen for ``fd``.

        .. versionchanged:: 4.0
           Added the ability to pass file-like objects in addition to
           raw file descriptors.
        uStop listening for events on ``fd``.

        .. versionchanged:: 4.0
           Added the ability to pass file-like objects in addition to
           raw file descriptors.
        uStarts the I/O loop.

        The loop will run until one of the callbacks calls `stop()`, which
        will make the loop stop after the current event iteration completes.
        uStop the I/O loop.

        If the event loop is not currently running, the next call to `start()`
        will return immediately.

        Note that even after `stop` has been called, the `IOLoop` is not
        completely stopped until `IOLoop.start` has also returned.
        Some work that was scheduled before the call to `stop` may still
        be run before the `IOLoop` shuts down.
        LnDareturnnarunuIOLoop.run_sync.<locals>.runaadd_callbackatimeout_callbackuIOLoop.run_sync.<locals>.timeout_callbackaadd_timeoutatimeastartatimeoutaremove_timeoutatimeout_handleacancelledadoneaTimeoutErroruOperation timed out after %s secondsaresultuStarts the `IOLoop`, runs the given function, and stops the loop.

        The function must return either an awaitable object or
        ``None``. If the function returns an awaitable object, the
        `IOLoop` will run until the awaitable is resolved (and
        `run_sync()` will return the awaitable's result). If it raises
        an exception, the `IOLoop` will stop and the exception will be
        re-raised to the caller.

        The keyword-only argument ``timeout`` may be used to set
        a maximum duration for the function.  If the timeout expires,
        a `asyncio.TimeoutError` is raised.

        This method is useful to allow asynchronous calls in a
        ``main()`` function::

            async def main():
                # do stuff...

            if __name__ == '__main__':
                IOLoop.current().run_sync(main)

        .. versionchanged:: 4.3
           Returning a non-``None``, non-awaitable value is now an error.

        .. versionchanged:: 5.0
           If a timeout occurs, the ``func`` coroutine will be cancelled.

        .. versionchanged:: 6.2
           ``tornado.util.TimeoutError`` is now an alias to ``asyncio.TimeoutError``.
        afuncutornado.genTaconvert_yieldedaconvert_yieldedaFutureafuture_cellafuture_set_exc_infoasysaexc_infoais_futureaset_resultaselfaadd_futureu<lambda>uIOLoop.run_sync.<locals>.run.<locals>.<lambda>astopacanceluReturns the current time according to the `IOLoop`'s clock.

        The return value is a floating-point number relative to an
        unspecified time in the past.

        Historically, the IOLoop could be customized to use e.g.
        `time.monotonic` instead of `time.time`, but this is not
        currently supported and so this method is equivalent to
        `time.time`.

        anumbersaRealacall_atadatetimeatimedeltaatotal_secondsuUnsupported deadline %ruRuns the ``callback`` at the time ``deadline`` from the I/O loop.

        Returns an opaque handle that may be passed to
        `remove_timeout` to cancel.

        ``deadline`` may be a number denoting a time (on the same
        scale as `IOLoop.time`, normally `time.time`), or a
        `datetime.timedelta` object for a deadline relative to the
        current time.  Since Tornado 4.0, `call_later` is a more
        convenient alternative for the relative case since it does not
        require a timedelta object.

        Note that it is not safe to call `add_timeout` from other threads.
        Instead, you must use `add_callback` to transfer control to the
        `IOLoop`'s thread, and then call `add_timeout` from there.

        Subclasses of IOLoop must implement either `add_timeout` or
        `call_at`; the default implementations of each will call
        the other.  `call_at` is usually easier to implement, but
        subclasses that wish to maintain compatibility with Tornado
        versions prior to 4.0 must use `add_timeout` instead.

        .. versionchanged:: 4.0
           Now passes through ``*args`` and ``**kwargs`` to the callback.
        uRuns the ``callback`` after ``delay`` seconds have passed.

        Returns an opaque handle that may be passed to `remove_timeout`
        to cancel.  Note that unlike the `asyncio` method of the same
        name, the returned object does not have a ``cancel()`` method.

        See `add_timeout` for comments on thread-safety and subclassing.

        .. versionadded:: 4.0
        uRuns the ``callback`` at the absolute time designated by ``when``.

        ``when`` must be a number using the same reference point as
        `IOLoop.time`.

        Returns an opaque handle that may be passed to `remove_timeout`
        to cancel.  Note that unlike the `asyncio` method of the same
        name, the returned object does not have a ``cancel()`` method.

        See `add_timeout` for comments on thread-safety and subclassing.

        .. versionadded:: 4.0
        uCancels a pending timeout.

        The argument is a handle as returned by `add_timeout`.  It is
        safe to call `remove_timeout` even if the callback has already
        been run.
        uCalls the given callback on the next I/O loop iteration.

        It is safe to call this method from any thread at any time,
        except from a signal handler.  Note that this is the **only**
        method in `IOLoop` that makes this thread-safety guarantee; all
        other interaction with the `IOLoop` must be done from that
        `IOLoop`'s thread.  `add_callback()` may be used to transfer
        control from other threads to the `IOLoop`'s thread.

        To add a callback from a signal handler, see
        `add_callback_from_signal`.
        uCalls the given callback on the next I/O loop iteration.

        Safe for use from a Python signal handler; should not be used
        otherwise.
        uCalls the given callback on the next IOLoop iteration.

        As of Tornado 6.0, this method is equivalent to `add_callback`.

        .. versionadded:: 4.0
        aadd_done_callbackuIOLoop.add_future.<locals>.<lambda>afuture_add_done_callbackuSchedules a callback on the ``IOLoop`` when the given
        `.Future` is finished.

        The callback is invoked with one argument, the
        `.Future`.

        This method only accepts `.Future` objects and not other
        awaitables (unlike most of Tornado where the two are
        interchangeable).
        a_run_callbackapartialacallbackafuturea_executorutornado.processTacpu_countacpu_countaconcurrentafuturesaThreadPoolExecutorlTamax_workersasubmituIOLoop.run_in_executor.<locals>.<lambda>uRuns a function in a ``concurrent.futures.Executor``. If
        ``executor`` is ``None``, the IO loop's default executor will be used.

        Use `functools.partial` to pass keyword arguments to ``func``.

        .. versionadded:: 5.0
        achain_futureat_futureuSets the default executor to use with :meth:`run_in_executor`.

        .. versionadded:: 5.0
        atornadoTagenagenaBadYieldErrorareta_discard_future_resultaCancelledErroraapp_logaerroruException in callback %rDaexc_infotuRuns a callback with error handling.

        .. versionchanged:: 6.0

           CancelledErrors are no longer logged.
        uAvoid unhandled-exception warnings from spawned coroutines.afilenoaosacloseadeadlinea_timeout_counteratdeadlineTlTamillisecondsacallback_timeuPeriodic callback must have a positive callback_timeajittera_runninga_timeoutaio_loopa_next_timeouta_schedule_nextuStarts the timer.uStops the timer.uReturns ``True`` if this `.PeriodicCallback` has been started.

        .. versionadded:: 4.1
        aisawaitableavala_runuPeriodicCallback._runa_update_nextf@�@larandomf�?amathaflooruAn I/O event loop for non-blocking sockets.

In Tornado 6.0, `.IOLoop` is a wrapper around the `asyncio` event loop, with a
slightly different interface. The `.IOLoop` interface is now provided primarily
for backwards compatibility; new code should generally use the `asyncio` event
loop interface directly. The `IOLoop.current` class method provides the
`IOLoop` instance corresponding to the running `asyncio` event loop.

a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/ioloop.pya__file__a__spec__aoriginahas_locationa__cached__uconcurrent.futuresafunctoolsainspectTaisawaitableutornado.concurrentTaFutureais_futureachain_futureafuture_set_exc_infoafuture_add_done_callbackutornado.logTaapp_logutornado.utilTaConfigurableaTimeoutErroraimport_objectaConfigurableatypingaUnionaAnyaTypeaOptionalaCallableaTypeVaraTupleaAwaitableaProtocolametaclassa__prepare__a_Selectablea__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>utornado.ioloopa__module__a__qualname__areturnaintu_Selectable.filenou_Selectable.closea__orig_bases__Ta_Ta_TTa_STabounda_SuAn I/O event loop.

    As of Tornado 6.0, `IOLoop` is a wrapper around the `asyncio` event loop.

    Example usage for a simple TCP server:

    .. testcode::

        import asyncio
        import errno
        import functools
        import socket

        import tornado.ioloop
        from tornado.iostream import IOStream

        async def handle_connection(connection, address):
            stream = IOStream(connection)
            message = await stream.read_until_close()
            print("message from client:", message.decode().strip())

        def connection_ready(sock, fd, events):
            while True:
                try:
                    connection, address = sock.accept()
                except BlockingIOError:
                    return
                connection.setblocking(0)
                io_loop = tornado.ioloop.IOLoop.current()
                io_loop.spawn_callback(handle_connection, connection, address)

        async def main():
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
            sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
            sock.setblocking(0)
            sock.bind(("", 8888))
            sock.listen(128)

            io_loop = tornado.ioloop.IOLoop.current()
            callback = functools.partial(connection_ready, sock)
            io_loop.add_handler(sock.fileno(), callback, io_loop.READ)
            await asyncio.Event().wait()

        if __name__ == "__main__":
            asyncio.run(main())

    .. testoutput::
       :hide:

    Most applications should not attempt to construct an `IOLoop` directly,
    and instead initialize the `asyncio` event loop and use `IOLoop.current()`.
    In some cases, such as in test frameworks when initializing an `IOLoop`
    to be run in a secondary thread, it may be appropriate to construct
    an `IOLoop` with ``IOLoop(make_current=False)``. Constructing an `IOLoop`
    without the ``make_current=False`` argument is deprecated since Tornado 6.2.

    In general, an `IOLoop` cannot survive a fork or be shared across processes
    in any way. When multiple processes are being used, each process should
    create its own `IOLoop`, which also implies that any objects which depend on
    the `IOLoop` (such as `.AsyncHTTPClient`) must also be created in the child
    processes. As a guideline, anything that starts processes (including the
    `tornado.process` and `multiprocessing` modules) should do so as early as
    possible, ideally the first thing the application does after loading its
    configuration, and *before* any calls to `.IOLoop.start` or `asyncio.run`.

    .. versionchanged:: 4.2
       Added the ``make_current`` keyword argument to the `IOLoop`
       constructor.

    .. versionchanged:: 5.0

       Uses the `asyncio` event loop by default. The ``IOLoop.configure`` method
       cannot be used on Python 3 except to redundantly specify the `asyncio`
       event loop.

    .. deprecated:: 6.2
       It is deprecated to create an event loop that is "current" but not
       running. This means it is deprecated to pass
       ``make_current=True`` to the ``IOLoop`` constructor, or to create
       an ``IOLoop`` while no asyncio event loop is running unless
       ``make_current=False`` is used.
    aNONEaREADlaWRITElaERRORadictaclassmethodaimpluUnion[None, str, Type[Configurable]]akwargsuIOLoop.configureastaticmethodDareturnaIOLoopainstanceuIOLoop.instanceainstalluIOLoop.installaclear_instanceuIOLoop.clear_instanceaoverloaduIOLoop.currentabooluIOLoop.make_currentuIOLoop.clear_currentuIOLoop._clear_currentuInstance method called when an IOLoop ceases to be current.

        May be overridden by subclasses as a counterpart to make_current.
        uIOLoop._clear_current_hookaconfigurable_baseuIOLoop.configurable_baseaconfigurable_defaultuIOLoop.configurable_defaultTnainitializeuIOLoop.initializeaall_fdsuIOLoop.closeafdahandleraeventsaadd_handleruIOLoop.add_handlerTQnaupdate_handleruIOLoop.update_handleraremove_handleruIOLoop.remove_handleruIOLoop.startuIOLoop.stopafloatarun_syncuIOLoop.run_syncuIOLoop.timeaargsaobjectuIOLoop.add_timeoutadelayacall_lateruIOLoop.call_laterawhenuIOLoop.call_atuIOLoop.remove_timeoutuIOLoop.add_callbackaadd_callback_from_signaluIOLoop.add_callback_from_signalaspawn_callbackuIOLoop.spawn_callbackuUnion[Future[_T], concurrent.futures.Future[_T]]TLuFuture[_T]nuIOLoop.add_futureaexecutoraExecutorarun_in_executoruIOLoop.run_in_executoraset_default_executoruIOLoop.set_default_executoruIOLoop._run_callbackuIOLoop._discard_future_resultasplit_fduIOLoop.split_fdaclose_fduIOLoop.close_fdTOobjecta_TimeoutuAn IOLoop timeout, a UNIX timestamp and a callbackLadeadlineacallbackatdeadlinea__slots__TLna__init__u_Timeout.__init__aothera__lt__u_Timeout.__lt__a__le__u_Timeout.__le__aPeriodicCallbackuSchedules the given callback to be called periodically.

    The callback is called every ``callback_time`` milliseconds when
    ``callback_time`` is a float. Note that the timeout is given in
    milliseconds, while most other time-related functions in Tornado use
    seconds. ``callback_time`` may alternatively be given as a
    `datetime.timedelta` object.

    If ``jitter`` is specified, each callback time will be randomly selected
    within a window of ``jitter * callback_time`` milliseconds.
    Jitter can be used to reduce alignment of events with similar periods.
    A jitter of 0.1 means allowing a 10% variation in callback time.
    The window is centered on ``callback_time`` so the total number of calls
    within a given interval should not be significantly affected by adding
    jitter.

    If the callback runs for longer than ``callback_time`` milliseconds,
    subsequent invocations will be skipped to get back on schedule.

    `start` must be called after the `PeriodicCallback` is created.

    .. versionchanged:: 5.0
       The ``io_loop`` argument (deprecated since version 4.1) has been removed.

    .. versionchanged:: 5.1
       The ``jitter`` argument is added.

    .. versionchanged:: 6.2
       If the ``callback`` argument is a coroutine, and a callback runs for
       longer than ``callback_time``, subsequent invocations will be skipped.
       Previously this was only true for regular functions, not coroutines,
       which were "fire-and-forget" for `PeriodicCallback`.

       The ``callback_time`` argument now accepts `datetime.timedelta` objects,
       in addition to the previous numeric milliseconds.
    TluPeriodicCallback.__init__uPeriodicCallback.startuPeriodicCallback.stopais_runninguPeriodicCallback.is_runninguPeriodicCallback._schedule_nextacurrent_timeuPeriodicCallback._update_nextTwfaselfacallbackafutureTacallbackafutureaselfTwfat_futureTat_futureTafutureaselfTaselfu<module tornado.ioloop>Ta__class__Taselfacallbackacallback_timeajitterTaselfadeadlineacallbackaio_loopTaselfaotherTaoldTaselfafutureTaselfavalTaselfacallbackaretagenTaselfacurrent_timeacallback_time_secTaselfacallbackaargsakwargsTaselfafutureacallbackTaselfafdahandleraeventsTaselfadeadlineacallbackaargsakwargsTaselfawhenacallbackaargsakwargsTaselfadelayacallbackaargsakwargsTaselfaall_fdsTaselfafdTaclsTaclsaAsyncIOLoopTaclsaimplakwargsaBaseAsyncIOLoopa__class__TainstancealoopaAsyncIOMainLoopacurrentTaselfamake_currentacurrentTaselfatimeoutTaresultaconvert_yieldedafutafuncafuture_cellaselfTafuncafuture_cellaselfTaselfaexecutorafuncaargsacpu_countac_futureat_futureTaselfafuncatimeoutafuture_cellarunatimeout_callbackatimeout_handleTaselfaexecutorTafuture_cellaselfTaselfafdaeventsu.tornado.iostream�e�a__class__a__init__TuStream is closedareal_erroracollectionsadequea_buffersla_first_posa_sizea_large_buf_thresholdaappendadatal��������utoo many values to unpack (expected 2)wbu
        Append the given piece of data (should be a buffer-compatible object).
        Tcatypingacastu
        Get a view over at most ``size`` bytes (possibly fewer) at the
        current buffer position.
        aselfabuffersasizeaposapopleftlu
        Advance the current buffer position by ``size`` bytes.
        aioloopaIOLoopacurrentaio_loopl@amax_buffer_sizeaminlaread_chunk_sizeamax_write_buffer_sizeaerrorBa_read_buffera_read_buffer_posa_read_buffer_sizea_user_read_buffera_after_user_read_buffera_StreamBuffera_write_buffera_total_write_indexa_total_write_done_indexa_read_delimitera_read_regexa_read_max_bytesa_read_bytesa_read_partiala_read_until_closea_read_futurea_write_futuresa_close_callbacka_connect_futurea_ssl_connect_futurea_connectinga_statea_closedu`BaseIOStream` constructor.

        :arg max_buffer_size: Maximum amount of incoming data to buffer;
            defaults to 100MB.
        :arg read_chunk_size: Amount of data to read at one time from the
            underlying transport; defaults to 64KB.
        :arg max_write_buffer_size: Amount of outgoing data to buffer;
            defaults to unlimited.

        .. versionchanged:: 4.0
           Add the ``max_write_buffer_size`` parameter.  Changed default
           ``read_chunk_size`` to 64KB.
        .. versionchanged:: 5.0
           The ``io_loop`` argument (deprecated since version 4.1) has been
           removed.
        uReturns the file descriptor for this stream.uCloses the file underlying this stream.

        ``close_fd`` is called by `BaseIOStream` and should not be called
        elsewhere; other users should call `close` instead.
        uAttempts to write ``data`` to the underlying file.

        Returns the number of bytes written.
        uAttempts to read from the underlying file.

        Reads up to ``len(buf)`` bytes, storing them in the buffer.
        Returns the number of bytes read. Returns None if there was
        nothing to read (the socket returned `~errno.EWOULDBLOCK` or
        equivalent), and zero on EOF.

        .. versionchanged:: 5.0

           Interface redesigned to take a buffer and return a number
           of bytes instead of a freshly-allocated object.
        a_start_readareacompilea_try_inline_readaUnsatisfiableReadErroragen_logainfouUnsatisfiable read, closing connection: %sacloseTaexc_infoaadd_done_callbacku<lambda>uBaseIOStream.read_until_regex.<locals>.<lambda>uAsynchronously read until we have matched the given regex.

        The result includes the data that matches the regex and anything
        that came before it.

        If ``max_bytes`` is not None, the connection will be closed
        if more than ``max_bytes`` bytes have been read and the regex is
        not satisfied.

        .. versionchanged:: 4.0
            Added the ``max_bytes`` argument.  The ``callback`` argument is
            now optional and a `.Future` will be returned if it is omitted.

        .. versionchanged:: 6.0

           The ``callback`` argument was removed. Use the returned
           `.Future` instead.

        aexceptionuBaseIOStream.read_until.<locals>.<lambda>uAsynchronously read until we have found the given delimiter.

        The result includes all the data read including the delimiter.

        If ``max_bytes`` is not None, the connection will be closed
        if more than ``max_bytes`` bytes have been read and the delimiter
        is not found.

        .. versionchanged:: 4.0
            Added the ``max_bytes`` argument.  The ``callback`` argument is
            now optional and a `.Future` will be returned if it is omitted.

        .. versionchanged:: 6.0

           The ``callback`` argument was removed. Use the returned
           `.Future` instead.
        anumbersaIntegraluBaseIOStream.read_bytes.<locals>.<lambda>uAsynchronously read a number of bytes.

        If ``partial`` is true, data is returned as soon as we have
        any bytes to return (but never more than ``num_bytes``)

        .. versionchanged:: 4.0
            Added the ``partial`` argument.  The callback argument is now
            optional and a `.Future` will be returned if it is omitted.

        .. versionchanged:: 6.0

           The ``callback`` and ``streaming_callback`` arguments have
           been removed. Use the returned `.Future` (and
           ``partial=True`` for ``streaming_callback``) instead.

        :nnnuBaseIOStream.read_into.<locals>.<lambda>uAsynchronously read a number of bytes.

        ``buf`` must be a writable buffer into which data will be read.

        If ``partial`` is true, the callback is run as soon as any bytes
        have been read.  Otherwise, it is run when the ``buf`` has been
        entirely filled with read data.

        .. versionadded:: 5.0

        .. versionchanged:: 6.0

           The ``callback`` argument was removed. Use the returned
           `.Future` instead.

        acloseda_finish_readuBaseIOStream.read_until_close.<locals>.<lambda>uAsynchronously reads all data from the socket until it is closed.

        This will buffer all available data until ``max_buffer_size``
        is reached. If flow control or cancellation are desired, use a
        loop with `read_bytes(partial=True) <.read_bytes>` instead.

        .. versionchanged:: 4.0
            The callback argument is now optional and a `.Future` will
            be returned if it is omitted.

        .. versionchanged:: 6.0

           The ``callback`` and ``streaming_callback`` arguments have
           been removed. Use the returned `.Future` (and `read_bytes`
           with ``partial=True`` for ``streaming_callback``) instead.

        a_check_closedTwBaStreamBufferFullErrorTuReached maximum write buffer sizeaFutureuBaseIOStream.write.<locals>.<lambda>a_handle_writea_add_io_stateaWRITEa_maybe_add_error_listeneruAsynchronously write the given data to this stream.

        This method returns a `.Future` that resolves (with a result
        of ``None``) when the write has been completed.

        The ``data`` argument may be of type `bytes` or `memoryview`.

        .. versionchanged:: 4.0
            Now returns a `.Future` if no callback is given.

        .. versionchanged:: 4.5
            Added support for `memoryview` arguments.

        .. versionchanged:: 6.0

           The ``callback`` argument was removed. Use the returned
           `.Future` instead.

        uCall the given callback when the stream is closed.

        This mostly is not necessary for applications that use the
        `.Future` interface; all outstanding ``Futures`` will resolve
        with a `StreamClosedError` when the stream is closed. However,
        it is still useful as a way to signal that the stream has been
        closed while no other read or write is in progress.

        Unlike other callback-based interfaces, ``set_close_callback``
        was not removed in Tornado 6.0.
        lasysaexc_infoa_find_read_posa_read_from_bufferaremove_handlerafilenoaclose_fda_signal_closeduClose this stream.

        If ``exc_info`` is true, set the ``error`` attribute to the current
        exception from `sys.exc_info` (or if ``exc_info`` is a tuple,
        use that instead of `sys.exc_info`).
        afuturesaclearadoneaset_exceptionaStreamClosedErrorTareal_erroraasyncioaCancelledErroraadd_callbackuReturns ``True`` if we are currently reading from the stream.uReturns ``True`` if we are currently writing to the stream.uReturns ``True`` if the stream has been closed.awarninguGot events for closed stream %sa_handle_connectaREADa_handle_readaERRORaget_fd_errorareadingawritingTushouldn't happen: _handle_events without self._stateaupdate_handlerTuUncaught exception, closing connection.ta_read_to_bufferanext_find_posa_read_to_buffer_loopuerror on read: %sTuAlready readinga_consumeafuture_set_result_unless_cancelleduAttempt to complete the current read operation from buffered data.

        If the read can be completed without blocking, schedules the
        read callback on the next IOLoop iteration; otherwise starts
        listening for reads on the socket.
        aread_from_fdasocketa_is_connresetabufTuReached maximum read buffer sizeuReads from the socket and appends the result to the read buffer.

        Returns the number of bytes read.  Returns 0 if there is nothing
        to read (i.e. the read returns EWOULDBLOCK or equivalent).  On
        error closes the socket and raises an exception.
        uAttempts to complete the currently-pending read from the buffer.

        The argument is either a position in the read buffer or None,
        as returned by _find_read_pos.
        afinda_check_max_bytesasearchaenduAttempts to find a position in the read buffer that satisfies
        the currently-pending read.

        Returns a position in the buffer if the current read can be satisfied,
        or None if it cannot.
        udelimiter %r not found within %d bytesa_WINDOWSlawrite_to_fdapeekaadvanceuWrite error on %s: %scatobytesaadd_handlera_handle_eventsuAdds `state` (IOLoop.{READ,WRITE} flags) to our event handler.

        Implementation notes: Reads and writes have a fast path and a
        slow path.  The fast path reads synchronously from socket
        buffers, while the slow path uses `_add_io_state` to schedule
        an IOLoop callback.

        To detect closed connections, we must have called
        `_add_io_state` at some point, but we want to delay this as
        much as possible so we don't have to set an `IOLoop.ERROR`
        listener that will be overwritten by the next slow-path
        operation. If a sequence of fast-path ops do not end in a
        slow-path op, (e.g. for an @asynchronous long-poll request),
        we must add the error handler.

        TODO: reevaluate this now that callbacks are gone.

        aerrno_from_exceptiona_ERRNO_CONNRESETuReturn ``True`` if exc is ECONNRESET or equivalent.

        May be overridden in subclasses.
        asetblockingTFagetsockoptaSOL_SOCKETaSO_ERRORaosastrerrorarecv_intoasenduFuture[IOStream]aconnectuConnect error on fd %s: %sweuConnects the socket to a remote address without blocking.

        May only be called if the socket passed to the constructor was
        not previously connected.  The address parameter is in the
        same format as for `socket.connect <socket.socket.connect>` for
        the type of socket passed to the IOStream constructor,
        e.g. an ``(ip, port)`` tuple.  Hostnames are accepted here,
        but will be resolved synchronously and block the IOLoop.
        If you have a hostname instead of an IP address, the `.TCPClient`
        class is recommended instead of calling this method directly.
        `.TCPClient` will do asynchronous DNS resolution and handle
        both IPv4 and IPv6.

        If ``callback`` is specified, it will be called with no
        arguments when the connection is completed; if not this method
        returns a `.Future` (whose result after a successful
        connection will be the stream itself).

        In SSL mode, the ``server_hostname`` parameter will be used
        for certificate validation (unless disabled in the
        ``ssl_options``) and SNI (if supported; requires Python
        2.7.9+).

        Note that it is safe to call `IOStream.write
        <BaseIOStream.write>` while the connection is pending, in
        which case the data will be written as soon as the connection
        is ready.  Calling `IOStream` read methods before the socket is
        connected works on some platforms but is non-portable.

        .. versionchanged:: 4.0
            If no callback is given, returns a `.Future`.

        .. versionchanged:: 4.2
           SSL certificates are validated by default; pass
           ``ssl_options=dict(cert_reqs=ssl.CERT_NONE)`` or a
           suitably-configured `ssl.SSLContext` to the
           `SSLIOStream` constructor to disable.

        .. versionchanged:: 6.0

           The ``callback`` argument was removed. Use the returned
           `.Future` instead.

        uIOStream is not idle; cannot convert to SSLa_server_ssl_defaultsa_client_ssl_defaultsassl_wrap_socketTaserver_hostnameaserver_sideado_handshake_on_connectaSSLIOStreamTassl_optionsaset_close_callbackuConvert this `IOStream` to an `SSLIOStream`.

        This enables protocols that begin in clear-text mode and
        switch to SSL after some initial negotiation (such as the
        ``STARTTLS`` extension to SMTP and IMAP).

        This method cannot be used if there are outstanding reads
        or writes on the stream, or if there is any data in the
        IOStream's buffer (data in the operating system's socket
        buffer is allowed).  This means it must generally be used
        immediately after reading or writing the last clear-text
        data.  It can also be used immediately after connecting,
        before any reads or writes.

        The ``ssl_options`` argument may be either an `ssl.SSLContext`
        object or a dictionary of keyword arguments for the
        `ssl.wrap_socket` function.  The ``server_hostname`` argument
        will be used for certificate validation unless disabled
        in the ``ssl_options``.

        This method returns a `.Future` whose result is the new
        `SSLIOStream`.  After this method has been called,
        any other operation on the original stream is undefined.

        If a close callback is defined on this stream, it will be
        transferred to the new stream.

        .. versionadded:: 4.0

        .. versionchanged:: 4.2
           SSL certificates are validated by default; pass
           ``ssl_options=dict(cert_reqs=ssl.CERT_NONE)`` or a
           suitably-configured `ssl.SSLContext` to disable.
        aerrnoaENOPROTOOPTaerraerrorcodeafamilyaAF_INETaAF_INET6asetsockoptaIPPROTO_TCPaTCP_NODELAYaEINVALassl_optionsa_ssl_optionsa_ssl_acceptinga_handshake_readinga_handshake_writinga_server_hostnameagetpeernameuThe ``ssl_options`` keyword argument may either be an
        `ssl.SSLContext` object or a dictionary of keywords arguments
        for `ssl.wrap_socket`
        ado_handshakeasslaSSLErroraargsaSSL_ERROR_WANT_READaSSL_ERROR_WANT_WRITEaSSL_ERROR_EOFaSSL_ERROR_ZERO_RETURNaSSL_ERROR_SSLu(not connected)uSSL Error on %s %s: %saCertificateErroraEBADFaENOTCONNa_verify_certagetpeercerta_finish_ssl_connectagetacert_reqsaCERT_NONEaSSLContextaverify_modeaCERT_REQUIREDaCERT_OPTIONALTuNo SSL certificate givenamatch_hostnameuInvalid SSL certificate: %suReturns ``True`` if peercert is valid according to the configured
        validation mode and hostname.

        The ssl handshake already tested the certificate for a valid
        CA signature; the only thing that remains is to check
        the hostname.
        a_do_ssl_handshakeuSSLIOStream.connect.<locals>.<lambda>await_for_handshakeTaserver_hostnameado_handshake_on_connectaserver_sideuAlready waitinguWait for the initial SSL handshake to complete.

        If a ``callback`` is given, it will be called with no
        arguments once the handshake is complete; otherwise this
        method returns a `.Future` which will resolve to the
        stream itself after the handshake is complete.

        Once the handshake is complete, information such as
        the peer's certificate and NPN/ALPN selections may be
        accessed on ``self.socket``.

        This method is intended for use on server-side streams
        or after using `IOStream.start_tls`; it should not be used
        with `IOStream.connect` (which already waits for the
        handshake to complete). It may only be called once per stream.

        .. versionadded:: 4.2

        .. versionchanged:: 6.0

           The ``callback`` argument was removed. Use the returned
           `.Future` instead.

        l:nl@nafdaioaFileIOur+a_fioaset_blockingawriteareadintoTEOSErrorpuUtility classes to write to and read from non-blocking files and sockets.

Contents:

* `BaseIOStream`: Generic interface for reading and writing.
* `IOStream`: Implementation of BaseIOStream using non-blocking sockets.
* `SSLIOStream`: SSL-aware version of IOStream.
* `PipeIOStream`: Pipe-based IOStream implementation.
a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/iostream.pya__file__a__spec__aoriginahas_locationa__cached__utornado.concurrentTaFutureafuture_set_result_unless_cancelledatornadoTaiolooputornado.logTagen_logutornado.netutilTassl_wrap_socketa_client_ssl_defaultsa_server_ssl_defaultsutornado.utilTaerrno_from_exceptionaUnionaOptionalaAwaitableaCallableaPatternaAnyaDictaTypeVaraTupleaTracebackTypeTa_IOStreamTypeaIOStreamTabounda_IOStreamTypeaECONNRESETaECONNABORTEDaEPIPEaETIMEDOUTaWSAECONNRESETaWSAECONNABORTEDaWSAETIMEDOUTTEOSErrorametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>utornado.iostreama__module__uException raised by `IOStream` methods when the stream is closed.

    Note that the close callback is scheduled to run *after* other
    callbacks on the stream (to allow for buffered data to be processed),
    so you may see this error before you see the close callback.

    The ``real_error`` attribute contains the underlying error that caused
    the stream to close (if any).

    .. versionchanged:: 4.3
       Added the ``real_error`` attribute.
    a__qualname__TnaBaseExceptionareturnuStreamClosedError.__init__a__orig_bases__TEExceptionuException raised when a read cannot be satisfied.

    Raised by ``read_until`` and ``read_until_regex`` with a ``max_bytes``
    argument.
    uException raised by `IOStream` methods when the buffer is full.TOobjectu
    A specialized buffer that tries to avoid copies when large pieces
    of data are encountered.
    Dareturnnu_StreamBuffer.__init__ainta__len__u_StreamBuffer.__len__labytesabytearrayamemoryviewu_StreamBuffer.appendu_StreamBuffer.peeku_StreamBuffer.advanceaBaseIOStreamuA utility class to write to and read from a non-blocking file or socket.

    We support a non-blocking ``write()`` and a family of ``read_*()``
    methods. When the operation completes, the ``Awaitable`` will resolve
    with the data read (or ``None`` for ``write()``). All outstanding
    ``Awaitables`` will resolve with a `StreamClosedError` when the
    stream is closed; `.BaseIOStream.set_close_callback` can also be used
    to be notified of a closed stream.

    When a stream is closed due to an error, the IOStream's ``error``
    attribute contains the exception object.

    Subclasses must implement `fileno`, `close_fd`, `write_to_fd`,
    `read_from_fd`, and optionally `get_fd_error`.

    TnnnuBaseIOStream.__init__a_SelectableuBaseIOStream.filenouBaseIOStream.close_fduBaseIOStream.write_to_fduBaseIOStream.read_from_fdaExceptionuReturns information about any error on the underlying file.

        This method is called after the `.IOLoop` has signaled an error on the
        file descriptor, and should return an Exception (such as `socket.error`
        with additional information, or None if no such information is
        available.
        uBaseIOStream.get_fd_erroraregexamax_bytesaread_until_regexuBaseIOStream.read_until_regexadelimiteraread_untiluBaseIOStream.read_untilanum_bytesapartialaboolaread_bytesuBaseIOStream.read_bytesaread_intouBaseIOStream.read_intoaread_until_closeuBaseIOStream.read_until_closeuFuture[None]uBaseIOStream.writeacallbackTLnuBaseIOStream.set_close_callbackuOptional[Type[BaseException]]uBaseIOStream.closeuBaseIOStream._signal_closeduBaseIOStream.readinguBaseIOStream.writinguBaseIOStream.closedavalueuSets the no-delay flag for this stream.

        By default, data written to TCP streams may be held for a time
        to make the most efficient use of bandwidth (according to
        Nagle's algorithm).  The no-delay flag requests that data be
        written as soon as possible, even if doing so would consume
        additional bandwidth.

        This flag is currently defined only for TCP-based ``IOStreams``.

        .. versionadded:: 3.1
        aset_nodelayuBaseIOStream.set_nodelayuBaseIOStream._handle_connectaeventsuBaseIOStream._handle_eventsuBaseIOStream._read_to_buffer_loopuBaseIOStream._handle_readuBaseIOStream._start_readuBaseIOStream._finish_readuBaseIOStream._try_inline_readuBaseIOStream._read_to_bufferuBaseIOStream._read_from_bufferuBaseIOStream._find_read_posuBaseIOStream._check_max_bytesuBaseIOStream._handle_writealocuBaseIOStream._consumeuBaseIOStream._check_closeduBaseIOStream._maybe_add_error_listenerastateuBaseIOStream._add_io_stateaexcuBaseIOStream._is_connresetaIOStreamuSocket-based `IOStream` implementation.

    This class supports the read and write methods from `BaseIOStream`
    plus a `connect` method.

    The ``socket`` parameter may either be connected or unconnected.
    For server operations the socket is the result of calling
    `socket.accept <socket.socket.accept>`.  For client operations the
    socket is created with `socket.socket`, and may either be
    connected before passing it to the `IOStream` or connected with
    `IOStream.connect`.

    A very simple (and broken) HTTP client using this class:

    .. testcode::

        import tornado.ioloop
        import tornado.iostream
        import socket

        async def main():
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
            stream = tornado.iostream.IOStream(s)
            await stream.connect(("friendfeed.com", 80))
            await stream.write(b"GET / HTTP/1.0\r\nHost: friendfeed.com\r\n\r\n")
            header_data = await stream.read_until(b"\r\n\r\n")
            headers = {}
            for line in header_data.split(b"\r\n"):
                parts = line.split(b":")
                if len(parts) == 2:
                    headers[parts[0].strip()] = parts[1].strip()
            body_data = await stream.read_bytes(int(headers[b"Content-Length"]))
            print(body_data)
            stream.close()

        if __name__ == '__main__':
            asyncio.run(main())

    .. testoutput::
       :hide:

    akwargsuIOStream.__init__uIOStream.filenouIOStream.close_fduIOStream.get_fd_erroruIOStream.read_from_fduIOStream.write_to_fdaaddressaserver_hostnameastruFuture[_IOStreamType]uIOStream.connectTnnaserver_sideastart_tlsuIOStream.start_tlsuIOStream._handle_connectuIOStream.set_nodelayuA utility class to write to and read from a non-blocking SSL socket.

    If the socket passed to the constructor is already connected,
    it should be wrapped with::

        ssl.wrap_socket(sock, do_handshake_on_connect=False, **kwargs)

    before constructing the `SSLIOStream`.  Unconnected sockets will be
    wrapped when `IOStream.connect` is finished.
    uSSLIOStream.__init__uSSLIOStream.readinguSSLIOStream.writinguSSLIOStream._do_ssl_handshakeuSSLIOStream._finish_ssl_connectapeercertuSSLIOStream._verify_certuSSLIOStream._handle_readuSSLIOStream._handle_writeuFuture[SSLIOStream]uSSLIOStream.connectuSSLIOStream._handle_connectDareturnuFuture[SSLIOStream]uSSLIOStream.wait_for_handshakeuSSLIOStream.write_to_fduSSLIOStream.read_from_fduSSLIOStream._is_connresetaPipeIOStreamuPipe-based `IOStream` implementation.

    The constructor takes an integer file descriptor (such as one returned
    by `os.pipe`) rather than an open file object.  Pipes are generally
    one-way, so a `PipeIOStream` can be used for reading or writing but not
    both.

    ``PipeIOStream`` is only available on Unix-based platforms.
    uPipeIOStream.__init__uPipeIOStream.filenouPipeIOStream.close_fduPipeIOStream.write_to_fduPipeIOStream.read_from_fdadoctestsTwfu<listcomp>Tw_afutureu<module tornado.iostream>Ta__class__TaselfTaselfaargsakwargsa__class__Taselfafdaargsakwargsa__class__Taselfamax_buffer_sizearead_chunk_sizeamax_write_buffer_sizeTaselfareal_errora__class__Taselfasocketaargsakwargsa__class__TaselfastateTaselfadelimiterasizeTaselfalocwbTaselfaerrapeerTaselfanum_bytesalocadelimiter_lenwmTaselfasizearesultafutureTaselfafutureTaselfaerrweafutureTaselfaold_statea__class__TaselfafdaeventsastateweTaselfa__class__TaselfaposweTaselfasizeanum_bytesweaindexafutureTaselfwea__class__TaselfaexcTaselfaposTaselfabufabytes_readweTaselfatarget_bytesanext_find_posaposTaselfafuturesafutureacbTaselfapeercertaverify_modeacertweTaselfasizeaposabuffersais_largewbab_remainTaselfadataasizeais_memviewwbanew_bufTaselfaexc_infoaposTaselfaaddressaserver_hostnameafuta__class__Taselfaaddressaserver_hostnameafutureweTaselfaerrnoTaselfasizeais_memviewwbaposTaselfanum_bytesapartialafutureTaselfabufTaselfabufweTaselfabufapartialafutureaavailable_byteswnaendTaselfadelimiteramax_bytesafutureweTaselfaregexamax_bytesafutureweTaselfacallbackTaselfavalueTaselfavalueweTaselfaserver_sideassl_optionsaserver_hostnameasocketaorig_close_callbackafutureassl_streamTaselfadataafutureTaselfadataTaselfadataweu.tornado.locale�(,aLocaleaget_closestuReturns the closest match for the given locale codes.

    We iterate over all given locale codes in order. If we have a tight
    or a loose match for the code (e.g., "en" for "en_US"), we return
    the locale. Otherwise we move to the next code in the list.

    By default we return ``en_US`` if no translations are found for any of
    the specified locales. You can change the default locale with
    `set_default_locale()`.
    a_default_localea_translationsakeysa_supported_localesuSets the default locale.

    The default locale is assumed to be the language used for all strings
    in the system. The translations loaded from disk are mappings from
    the default locale to the destination locale. Consequently, you don't
    need to create a translation file for the default locale.
    aosalistdiraendswithTu.csvasplitTw.utoo many values to unpack (expected 2)areamatchu[a-z]+(_[A-Z]+)?$agen_logaerroruUnrecognized locale %r (path: %s)apathajoinadirectoryaencodingarba__enter__a__exit__areadacodecsaBOM_UTF16_LETnnnadataaBOM_UTF16_BEuutf-16uutf-8-sigacsvareaderarowaescapeato_unicodeastrip:nlnlaunknownTapluralasingularaunknownuUnrecognized plural indicator %r in %s line %dlasetdefaultadebuguSupported locales: %sasorteduLoads translations from CSV files in a directory.

    Translations are strings with optional Python-style named placeholders
    (e.g., ``My name is %(name)s``) and their associated translations.

    The directory should have translation files of the form ``LOCALE.csv``,
    e.g. ``es_GT.csv``. The CSV files should have two or three columns: string,
    translation, and an optional plural indicator. Plural indicators should
    be one of "plural" or "singular". A given string can have both singular
    and plural forms. For example ``%(name)s liked this`` may have a
    different verb conjugation depending on whether %(name)s is one
    name or a list of names. There should be two rows in the CSV file for
    that string, one with plural indicator "singular", and one "plural".
    For strings with no verbs that would change on translation, simply
    use "unknown" or the empty string (or don't include the column at all).

    The file is read using the `csv` module in the default "excel" dialect.
    In this format there should not be spaces after the commas.

    If no ``encoding`` parameter is given, the encoding will be
    detected automatically (among UTF-8 and UTF-16) if the file
    contains a byte-order marker (BOM), defaulting to UTF-8 if no BOM
    is present.

    Example translation ``es_LA.csv``::

        "I love you","Te amo"
        "%(name)s liked this","A %(name)s les gustó esto","plural"
        "%(name)s liked this","A %(name)s le gustó esto","singular"

    .. versionchanged:: 4.3
       Added ``encoding`` parameter. Added support for BOM-based encoding
       detection, UTF-16, and UTF-8-with-BOM.
    aglobw*aLC_MESSAGESu.moabasenameadirnameagettextatranslationadomainTalanguagesuCannot load translation for '%s': %sa_use_gettextuLoads translations from `gettext`'s locale tree

    Locale tree is similar to system's ``/usr/share/locale``, like::

        {directory}/{lang}/LC_MESSAGES/{domain}.mo

    Three steps are required to have your app translated:

    1. Generate POT translation file::

        xgettext --language=Python --keyword=_:1,2 -d mydomain file1.py file2.html etc

    2. Merge against existing POT file::

        msgmerge old.po mydomain.po > new.po

    3. Compile::

        msgfmt mydomain.po -o {directory}/pt_BR/LC_MESSAGES/mydomain.mo
    uReturns a list of all the supported locale codes.areplaceTw-w_Tw_lalowerw_aupperacodeagetuReturns the closest match for the given locale code.a_cacheaCSVLocaleaGettextLocaleuReturns the Locale for the given locale code.

        If it is not supported, we raise an exception.
        aLOCALE_NAMESTanameaUnknownanameartlTafaaaraheaselfastartswithatranslateTaJanuaryTaFebruaryTaMarchTaAprilTaMayTaJuneTaJulyTaAugustTaSeptemberTaOctoberTaNovemberTaDecembera_monthsTaMondayTaTuesdayTaWednesdayTaThursdayTaFridayTaSaturdayTaSundaya_weekdaysuReturns the translation for the given message for this locale.

        If ``plural_message`` is given, you must also provide
        ``count``. We return ``plural_message`` when ``count != 1``,
        and we return the singular form for the given message when
        ``count == 1``.
        TOintOfloatadatetimeautcfromtimestampautcnowasecondsl<anowadateatimedeltaTaminutesTlTahoursadaysl2u1 second agou%(seconds)d seconds agol�aroundfN@u1 minute agou%(minutes)d minutes agoaminutesf �@u1 hour agou%(hours)d hours agoahoursTu%(time)sadayTayesterdayTuyesterday at %(time)slTu%(weekday)sTu%(weekday)s at %(time)slNTu%(month_name)s %(day)sTu%(month_name)s %(day)s at %(time)sTu%(month_name)s %(day)s, %(year)sTu%(month_name)s %(day)s, %(year)s at %(time)sTaenaen_USazh_CNu%d:%02dalocal_dateahouraminuteazh_CNu%s%d:%02dTu上午u下午lu%d:%02d %sTaamapmamonth_nameamonthaweekdayayearatimeuFormats the given date (which should be GMT).

        By default, we return a relative time (e.g., "2 minutes ago"). You
        can return an absolute date string with ``relative=False``.

        You can force a full format date ("July 10, 1980") with
        ``full_format=True``.

        This method is primarily intended for dates in the past.
        For dates in the future, we fall back to full format.
        Tu%(weekday)s, %(month_name)s %(day)suFormats the given date as a day of week.

        Example: "Monday, January 22". You can remove the day of week with
        ``dow=False``.
        uTafau و u, Tu%(commas)s and %(last)sacommas:nl��������nalastuReturns a comma-separated list for the given list of parts.

        The format is, e.g., "A, B and C", "A and B" or just "A" for lists
        of size 1.
        Taenaen_USwsapartsaappend:l��������nn:nl��������nw,uReturns a comma-separated number for the given integer.atranslationsa__class__a__init__apluralasingularawarningTupgettext is not supported by CSVLocaleangettextu%s%s%saCONTEXT_SEPARATORuAllows to set context for translation, accepts plural forms.

        Usage example::

            pgettext("law", "right")
            pgettext("good", "right")

        Plural message example::

            pgettext("organization", "club", "clubs", len(clubs))
            pgettext("stick", "club", "clubs", len(clubs))

        To generate POT file with context, add following options to step 1
        of `load_gettext_translations` sequence::

            xgettext [basic options] --keyword=pgettext:1c,2 --keyword=pgettext:1c,2,3

        .. versionadded:: 4.2
        uTranslation methods for generating localized strings.

To load a locale and generate a translated string::

    user_locale = tornado.locale.get("es_LA")
    print(user_locale.translate("Sign out"))

`tornado.locale.get()` returns the closest matching locale, not necessarily the
specific locale you requested. You can support pluralization with
additional arguments to `~Locale.translate()`, e.g.::

    people = [...]
    message = user_locale.translate(
        "%(list)s is online", "%(list)s are online", len(people))
    print(message % {"list": user_locale.list(people)})

The first string is chosen if ``len(people) == 1``, otherwise the second
string is chosen.

Applications should call one of `load_translations` (which uses a simple
CSV format) or `load_gettext_translations` (which uses the ``.mo`` format
supported by `gettext` and related tools).  If neither method is called,
the `Locale.translate` method will simply return the original string.
a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/locale.pya__file__a__spec__aoriginahas_locationa__cached__atornadoTaescapeutornado.logTagen_logutornado._locale_dataTaLOCALE_NAMESaIterableaAnyaUnionaDictaOptionalaen_USwDalocale_codesareturnOstraLocaleDacodeareturnOstrnaset_default_localeTnareturnaload_translationsDadirectoryadomainareturnOstrpnaload_gettext_translationsaget_supported_localesTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>utornado.localea__module__uObject representing a locale.

    After calling one of `load_translations` or `load_gettext_translations`,
    call `get` or `get_closest` to get a Locale object.
    a__qualname__aclassmethodalocale_codesastruLocale.get_closestuLocale.getuLocale.__init__Tnnamessageaplural_messageacountaintuLocale.translateacontextapgettextuLocale.pgettextTltFpafloatagmt_offsetarelativeaboolashorterafull_formataformat_dateuLocale.format_dateTltadowaformat_dayuLocale.format_dayalistuLocale.listavalueafriendly_numberuLocale.friendly_numbera__orig_bases__uLocale implementation using tornado's CSV translation format.uCSVLocale.__init__uCSVLocale.translateuCSVLocale.pgettextuLocale implementation using the `gettext` module.aNullTranslationsuGettextLocale.__init__uGettextLocale.translateuGettextLocale.pgettextu<listcomp>Twcu<module tornado.locale>Ta__class__Taselfacodeaprefixw_Taselfacodeatranslationsa__class__Taselfadateagmt_offsetarelativeashorterafull_formatanowalocal_datealocal_nowalocal_yesterdayadifferenceasecondsadaysw_aformataminutesahoursatfhour_clockastr_timeTaselfadateagmt_offsetadowalocal_datew_TaselfavaluewsapartsTaclsacodeatranslationsalocaleTalocale_codesTaclsalocale_codesacodeapartsTaselfapartsw_acommaTadirectoryadomainafilenamealangweTadirectoryaencodingapathalocaleaextensionafull_pathabfadatawfwiarowaenglishatranslationapluralTaselfacontextamessageaplural_messageacountTaselfacontextamessageaplural_messageacountamsgs_with_ctxtaresultamsg_with_ctxtTacodeTaselfamessageaplural_messageacountTaselfamessageaplural_messageacountamessage_dict.tornado.locks�-�acollectionsadequea_waitersla_timeoutslldadoneu<genexpr>u_TimeoutGarbageCollector._garbage_collect.<locals>.<genexpr>u<%sa__name__u waiters[%s]w>aFutureaappendDareturnnaon_timeoutuCondition.wait.<locals>.on_timeoutaioloopaIOLoopacurrentaadd_timeoutaadd_done_callbacku<lambda>uCondition.wait.<locals>.<lambda>uWait for `.notify`.

        Returns a `.Future` that resolves ``True`` if the condition is notified,
        or ``False`` after a timeout.
        awaiterafuture_set_result_unless_cancelledaselfa_garbage_collectaio_looparemove_timeoutatimeout_handlewnapopleftawaitersuWake ``n`` waiters.anotifyuWake all waiters.a_valueu<%s %s>ais_setasetaclearuReturn ``True`` if the internal flag is true.aset_resultTnuSet the internal flag to ``True``. All waiters are awakened.

        Calling `.wait` once the flag is set will not block.
        uReset the internal flag to ``False``.

        Calls to `.wait` will block until `.set` is called.
        aadduEvent.wait.<locals>.<lambda>agenawith_timeoutuBlock until the internal flag is true.

        Returns an awaitable, which raises `tornado.util.TimeoutError` after a
        timeout.
        aremoveafutacancela_objareleasea__class__a__init__usemaphore initial value must be >= 0a__repr__alockeduunlocked,value:{0}u{0},waiters:{1}u<{0} [{1}]>:ll��������na_ReleasingContextManageruIncrement the counter and wake one waiter.uSemaphore.acquire.<locals>.on_timeoutuSemaphore.acquire.<locals>.<lambda>uDecrement the counter. Returns an awaitable.

        Block if the counter is zero and wait for a `.release`. The awaitable
        raises `.TimeoutError` after the deadline.
        aset_exceptionaTimeoutErroruUse 'async with' instead of 'with' for Semaphorea__enter__aacquirea__aenter__uSemaphore.__aenter__a__aexit__uSemaphore.__aexit__Tavaluea_initial_valueuSemaphore released too many timesaBoundedSemaphoreTla_blocku<%s _block=%s>uAttempt to lock. Returns an awaitable.

        Returns an awaitable, which raises `tornado.util.TimeoutError` after a
        timeout.
        urelease unlocked lockuUnlock.

        The first coroutine in line waiting for `acquire` gets the lock.

        If not locked, raise a `RuntimeError`.
        uUse `async with` instead of `with` for LockuLock.__aenter__uLock.__aexit__a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/locks.pya__file__a__spec__aoriginahas_locationa__cached__adatetimeatypesatornadoTagenaiolooputornado.concurrentTaFutureafuture_set_result_unless_cancelledaUnionaOptionalaTypeaAnyaAwaitableatypingLaConditionaEventaSemaphoreaBoundedSemaphoreaLocka__all__TOobjectametaclassa__prepare__a_TimeoutGarbageCollectora__getitem__u%s.__prepare__() must return a mapping, not %su<metaclass>utornado.locksa__module__uBase class for objects that periodically clean up timed-out waiters.

    Avoids memory leak in a common pattern like:

        while True:
            yield condition.wait(short_timeout)
            print('looping....')
    a__qualname__u_TimeoutGarbageCollector.__init__u_TimeoutGarbageCollector._garbage_collecta__orig_bases__aConditionuA condition allows one or more coroutines to wait until notified.

    Like a standard `threading.Condition`, but does not need an underlying lock
    that is acquired and released.

    With a `Condition`, coroutines can wait to be notified by other coroutines:

    .. testcode::

        import asyncio
        from tornado import gen
        from tornado.locks import Condition

        condition = Condition()

        async def waiter():
            print("I'll wait right here")
            await condition.wait()
            print("I'm done waiting")

        async def notifier():
            print("About to notify")
            condition.notify()
            print("Done notifying")

        async def runner():
            # Wait for waiter() and notifier() in parallel
            await gen.multi([waiter(), notifier()])

        asyncio.run(runner())

    .. testoutput::

        I'll wait right here
        About to notify
        Done notifying
        I'm done waiting

    `wait` takes an optional ``timeout`` argument, which is either an absolute
    timestamp::

        io_loop = IOLoop.current()

        # Wait up to 1 second for a notification.
        await condition.wait(timeout=io_loop.time() + 1)

    ...or a `datetime.timedelta` for a timeout relative to the current time::

        # Wait up to 1 second.
        await condition.wait(timeout=datetime.timedelta(seconds=1))

    The method returns False if there's no notification before the deadline.

    .. versionchanged:: 5.0
       Previously, waiters could be notified synchronously from within
       `notify`. Now, the notification will always be received on the
       next iteration of the `.IOLoop`.
    areturnastruCondition.__repr__atimeoutafloatatimedeltaaboolawaituCondition.waitaintuCondition.notifyanotify_alluCondition.notify_allaEventuAn event blocks coroutines until its internal flag is set to True.

    Similar to `threading.Event`.

    A coroutine can wait for an event to be set. Once it is set, calls to
    ``yield event.wait()`` will not block unless the event has been cleared:

    .. testcode::

        import asyncio
        from tornado import gen
        from tornado.locks import Event

        event = Event()

        async def waiter():
            print("Waiting for event")
            await event.wait()
            print("Not waiting this time")
            await event.wait()
            print("Done")

        async def setter():
            print("About to set the event")
            event.set()

        async def runner():
            await gen.multi([waiter(), setter()])

        asyncio.run(runner())

    .. testoutput::

        Waiting for event
        About to set the event
        Not waiting this time
        Done
    uEvent.__init__uEvent.__repr__uEvent.is_setuEvent.setuEvent.clearuEvent.waituReleases a Lock or Semaphore at the end of a "with" statement.

    with (yield semaphore.acquire()):
        pass

    # Now semaphore.release() has been called.
    aobju_ReleasingContextManager.__init__u_ReleasingContextManager.__enter__aexc_typeuOptional[Type[BaseException]]aexc_valaBaseExceptionaexc_tbaTracebackTypea__exit__u_ReleasingContextManager.__exit__aSemaphoreuA lock that can be acquired a fixed number of times before blocking.

    A Semaphore manages a counter representing the number of `.release` calls
    minus the number of `.acquire` calls, plus an initial value. The `.acquire`
    method blocks if necessary until it can return without making the counter
    negative.

    Semaphores limit access to a shared resource. To allow access for two
    workers at a time:

    .. testsetup:: semaphore

       from collections import deque

       from tornado import gen
       from tornado.ioloop import IOLoop
       from tornado.concurrent import Future

       inited = False

       async def simulator(futures):
           for f in futures:
               # simulate the asynchronous passage of time
               await gen.sleep(0)
               await gen.sleep(0)
               f.set_result(None)

       def use_some_resource():
           global inited
           global futures_q
           if not inited:
               inited = True
               # Ensure reliable doctest output: resolve Futures one at a time.
               futures_q = deque([Future() for _ in range(3)])
               IOLoop.current().add_callback(simulator, list(futures_q))

           return futures_q.popleft()

    .. testcode:: semaphore

        import asyncio
        from tornado import gen
        from tornado.locks import Semaphore

        sem = Semaphore(2)

        async def worker(worker_id):
            await sem.acquire()
            try:
                print("Worker %d is working" % worker_id)
                await use_some_resource()
            finally:
                print("Worker %d is done" % worker_id)
                sem.release()

        async def runner():
            # Join all workers.
            await gen.multi([worker(i) for i in range(3)])

        asyncio.run(runner())

    .. testoutput:: semaphore

        Worker 0 is working
        Worker 1 is working
        Worker 0 is done
        Worker 2 is working
        Worker 1 is done
        Worker 2 is done

    Workers 0 and 1 are allowed to run concurrently, but worker 2 waits until
    the semaphore has been released once, by worker 0.

    The semaphore can be used as an async context manager::

        async def worker(worker_id):
            async with sem:
                print("Worker %d is working" % worker_id)
                await use_some_resource()

            # Now the semaphore has been released.
            print("Worker %d is done" % worker_id)

    For compatibility with older versions of Python, `.acquire` is a
    context manager, so ``worker`` could also be written as::

        @gen.coroutine
        def worker(worker_id):
            with (yield sem.acquire()):
                print("Worker %d is working" % worker_id)
                yield use_some_resource()

            # Now the semaphore has been released.
            print("Worker %d is done" % worker_id)

    .. versionchanged:: 4.3
       Added ``async with`` support in Python 3.5.

    avalueuSemaphore.__init__uSemaphore.__repr__uSemaphore.releaseuSemaphore.acquireuSemaphore.__enter__atypatracebackuSemaphore.__exit__atbuA semaphore that prevents release() being called too many times.

    If `.release` would increment the semaphore's value past the initial
    value, it raises `ValueError`. Semaphores are mostly used to guard
    resources with limited capacity, so a semaphore released too many times
    is a sign of a bug.
    uBoundedSemaphore.__init__uBoundedSemaphore.releaseaLockuA lock for coroutines.

    A Lock begins unlocked, and `acquire` locks it immediately. While it is
    locked, a coroutine that yields `acquire` waits until another coroutine
    calls `release`.

    Releasing an unlocked lock raises `RuntimeError`.

    A Lock can be used as an async context manager with the ``async
    with`` statement:

    >>> from tornado import locks
    >>> lock = locks.Lock()
    >>>
    >>> async def f():
    ...    async with lock:
    ...        # Do something holding the lock.
    ...        pass
    ...
    ...    # Now the lock is released.

    For compatibility with older versions of Python, the `.acquire`
    method asynchronously returns a regular context manager:

    >>> async def f2():
    ...    with (yield lock.acquire()):
    ...        # Do something holding the lock.
    ...        pass
    ...
    ...    # Now the lock is released.

    .. versionchanged:: 4.3
       Added ``async with`` support in Python 3.5.

    uLock.__init__uLock.__repr__uLock.acquireuLock.releaseuLock.__enter__uLock.__exit__Ta.0wwTw_aio_loopatimeout_handleTaio_loopatimeout_handleTafutaselfTaselfTatfafutTafutu<module tornado.locks>Ta__class__TaselfatypavalueatbTaselfaexc_typeaexc_valaexc_tbTaselfatypavalueatracebackTaselfaobjTaselfavaluea__class__Taselfaresaextraa__class__TaselfaresultTaselfatimeoutTaselfatimeoutawaiteraon_timeoutaio_loopatimeout_handleTaselfwnawaitersawaiterTawaiteraselfTaselfawaiterTaselfa__class__TaselfafutTaselfatimeoutafutatimeout_futu.tornado.log��aisattyacursesasetuptermatigetnumTacolorslacoloramaainitialiseawrapped_stderra_unicodealoggingaFormattera__init__Tadatefmta_fmta_colorsa_stderr_supports_coloratigetstrTasetafTasetfcaitemsutoo many values to unpack (expected 2)aunicode_typeatparmafg_coloraasciiaselfTasgr0a_normaluu[2;3%dmuu
        :arg bool color: Enables color support.
        :arg str fmt: Log message format.
          It will be applied to the attributes dict of log records. The
          text between ``%(color)s`` and ``%(end_color)s`` will be colored
          depending on the level if color support is on.
        :arg dict colors: color mappings from logging level to terminal color
          code
        :arg str datefmt: Datetime format.
          Used for formatting ``(asctime)`` placeholder in ``prefix_fmt``.

        .. versionchanged:: 3.2

           Added ``fmt`` and ``datefmt`` arguments.
        agetMessageabasestring_typea_safe_unicodeamessageuBad message (%r): %raformatTimeacastadatefmtaasctimealevelnoacoloraend_coloraexc_infoaexc_textaformatExceptionarstripaextendasplitTw
w
areplaceTw
u
    u<genexpr>uLogFormatter.format.<locals>.<genexpr>utornado.optionsaoptionsaloweranoneagetLoggerasetLevelaupperalog_file_prefixalog_rotate_modeasizeahandlersaRotatingFileHandleralog_file_max_sizealog_file_num_backupsuutf-8TafilenameamaxBytesabackupCountaencodingatimeaTimedRotatingFileHandleralog_rotate_whenalog_rotate_intervalTafilenameawhenaintervalabackupCountaencodinguThe value of log_rotate_mode option should be u"size" or "time", not "%s".asetFormatteraLogFormatterTFTacoloraaddHandleralog_to_stderraStreamHandleruTurns on formatted logging output as configured.

    This is called automatically by `tornado.options.parse_command_line`
    and `tornado.options.parse_config_file`.
    adefineTaloggingainfouSet the Python log level. If 'none', tornado won't touch the logging configuration.udebug|info|warning|error|noneTadefaultahelpametavarTalog_to_stderrOboolnuSend log output to stderr (colorized if possible). By default use stderr if --log_file_prefix is not set and no other logging is configured.TatypeadefaultahelpTalog_file_prefixOstrnaPATHuPath prefix for log files. Note that if you are running multiple tornado processes, log_file_prefix must be different for each of them (e.g. include the port number)TatypeadefaultametavarahelpTalog_file_max_sizeOintl�umax size of log files before rolloverTalog_file_num_backupsOintl
unumber of log files to keepTalog_rotate_whenOstramidnightuspecify the type of TimedRotatingFileHandler interval other options:('S', 'M', 'H', 'D', 'W0'-'W6')Talog_rotate_intervalOintluThe interval value of timed rotatingTalog_rotate_modeOstrasizeuThe mode of rotating files(time or size)aadd_parse_callbacku<lambda>udefine_logging_options.<locals>.<lambda>uAdd logging-related flags to ``options``.

    These options are present automatically on the default options instance;
    this method is only necessary if you have created your own `.OptionParser`.

    .. versionadded:: 4.2
        This function existed in prior versions but was broken and undocumented until 4.2.
    aenable_pretty_logginguLogging support for Tornado.

Tornado uses three logger streams:

* ``tornado.access``: Per-request logging for Tornado's HTTP servers (and
  potentially other servers in the future)
* ``tornado.application``: Logging of errors from application code (i.e.
  uncaught exceptions from callbacks)
* ``tornado.general``: General-purpose logging, including any errors
  or warnings from Tornado itself.

These streams may be configured independently using the standard library's
`logging` module.  For example, you may wish to send ``tornado.access`` logs
to a separate file for analysis.
a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/log.pya__file__a__spec__aoriginahas_locationa__cached__ulogging.handlersasysutornado.escapeTa_unicodeutornado.utilTaunicode_typeabasestring_typeaDictaAnyaOptionalTutornado.accessaaccess_logTutornado.applicationaapp_logTutornado.generalagen_logDareturnOboolwsareturnametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>utornado.loga__module__uLog formatter used in Tornado.

    Key features of this formatter are:

    * Color support when logging to a terminal that supports it.
    * Timestamps on every log line.
    * Robust against str/bytes encoding problems.

    This formatter is enabled automatically by
    `tornado.options.parse_command_line` or `tornado.options.parse_config_file`
    (unless ``--logging=none`` is used).

    Color support on Windows versions that do not support ANSI color codes is
    enabled by use of the colorama__ library. Applications that wish to use
    this must first initialize colorama with a call to ``colorama.init``.
    See the colorama documentation for details.

    __ https://pypi.python.org/pypi/colorama

    .. versionchanged:: 4.5
       Added support for ``colorama``. Changed the constructor
       signature to be compatible with `logging.config.dictConfig`.
    a__qualname__u%(color)s[%(levelname)1.1s %(asctime)s %(module)s:%(lineno)d]%(end_color)s %(message)saDEFAULT_FORMATu%y%m%d %H:%M:%SaDEFAULT_DATE_FORMATaDEBUGlaINFOlaWARNINGlaERRORlaCRITICALlaDEFAULT_COLORSw%afmtastrastyleaboolacolorsaintuLogFormatter.__init__arecordaformatuLogFormatter.formata__orig_bases__TnnaloggeraLoggerTnadefine_logging_optionsTa.0alnTaoptionsu<module tornado.log>Ta__class__T
aselfafmtadatefmtastyleacoloracolorsafg_coloralevelnoacodeanormalTwsTaoptionsatornadoTaoptionsaloggeratornadoarotate_modeachannelaerror_messageTaselfarecordamessageweaformattedalines.tornado.netutil�/asocketaSO_REUSEPORTuthe platform doesn't support SO_REUSEPORTuahas_ipv6aAF_UNSPECaAF_INETaAI_PASSIVEasortedagetaddrinfoaSOCK_STREAMlu<lambda>ubind_sockets.<locals>.<lambda>Takeyaunique_addressesaaddutoo many values to unpack (expected 5)asysaplatformadarwinalocalhostaAF_INET6laerroraerrno_from_exceptionaerrnoaEAFNOSUPPORTaosanameantasetsockoptaSOL_SOCKETaSO_REUSEADDRlaENOPROTOOPTasockaIPPROTO_IPV6aIPV6_V6ONLY:nlnutoo many values to unpack (expected 2)abound_port:lnnasetblockingTFabindaEADDRNOTAVAILu::1acloseagetsocknamealistenabacklogasocketsaappenduCreates listening sockets bound to the given port and address.

    Returns a list of socket objects (multiple sockets are returned if
    the given address maps to multiple IP addresses, which is most common
    for mixed IPv4 and IPv6 use).

    Address may be either an IP address or hostname.  If it's a hostname,
    the server will listen on all IP addresses associated with the
    name.  Address may be an empty string or None to listen on all
    available interfaces.  Family may be set to either `socket.AF_INET`
    or `socket.AF_INET6` to restrict to IPv4 or IPv6 addresses, otherwise
    both will be used if available.

    The ``backlog`` argument has the same meaning as for
    `socket.listen() <socket.socket.listen>`.

    ``flags`` is a bitmask of AI_* flags to `~socket.getaddrinfo`, like
    ``socket.AI_PASSIVE | socket.AI_NUMERICHOST``.

    ``reuse_port`` option sets ``SO_REUSEPORT`` option for every socket
    in the list. If your platform doesn't support this option ValueError will
    be raised.
    aAF_UNIXastataS_ISSOCKastast_modearemoveafileuFile %s exists and is not a socketachmoduCreates a listening unix socket.

        If a socket with the given name already exists, it will be deleted.
        If any other file with that name exists, an exception will be
        raised.

        Returns a socket object (not a list of socket objects like
        `bind_sockets`)
        aIOLoopacurrentLFafdaeventsareturnaaccept_handleruadd_accept_handler.<locals>.accept_handlerDareturnnaremove_handleruadd_accept_handler.<locals>.remove_handleraadd_handleraREADuAdds an `.IOLoop` event handler to accept new connections on ``sock``.

    When a connection is accepted, ``callback(connection, address)`` will
    be run (``connection`` is a socket object, and ``address`` is the
    address of the other end of the connection).  Note that this signature
    is different from the ``callback(fd, events)`` signature used for
    `.IOLoop` handlers.

    A callable is returned which, when called, will remove the `.IOLoop`
    event handler and stop processing further incoming connections.

    .. versionchanged:: 5.0
       The ``io_loop`` argument (deprecated since version 4.1) has been removed.

    .. versionchanged:: 5.0
       A callable is returned (``None`` was returned before).
    a_DEFAULT_BACKLOGaremovedaacceptacallbackaio_loopwaAI_NUMERICHOSTagaierroraargsaEAI_NONAMEuReturns ``True`` if the given string is a well-formed IP address.

    Supports IPv4 and IPv6.
    aResolveraDefaultLoopResolveruResolves an address.

        The ``host`` argument is a string which may be a hostname or a
        literal IP address.

        Returns a `.Future` whose result is a list of (family,
        address) pairs, where address is a tuple suitable to pass to
        `socket.connect <socket.socket.connect>` (i.e. a ``(host,
        port)`` pair for IPv4; additional fields may be present for
        IPv6). If a ``callback`` is passed, it will be run with the
        result as an argument when it is complete.

        :raises IOError: if the address cannot be resolved.

        .. versionchanged:: 4.4
           Standardized all implementations to raise `IOError`.

        .. versionchanged:: 6.0 The ``callback`` argument was removed.
           Use the returned awaitable object instead.

        aresultsarun_in_executora_resolve_addrahostaportafamilyaresolveuDefaultExecutorResolver.resolveaasyncioaget_running_loopTafamilyatypeuDefaultLoopResolver.resolveaexecutoraclose_executoradummy_executorashutdowna__class__ainitializeaThreadedResolvera_create_threadpoolTaexecutoraclose_executoragetpida_threadpool_pida_threadpoolaconcurrentafuturesaThreadPoolExecutoraresolveramappingasslaSSLContextaPROTOCOL_TLSaPROTOCOL_TLS_SERVERaPROTOCOL_TLS_CLIENTagetassl_versionacertfileaload_cert_chainTakeyfilenacert_reqsaCERT_NONEacontextacheck_hostnameaverify_modeaca_certsaload_verify_locationsaciphersaset_ciphersaOP_NO_COMPRESSIONaoptionsuTry to convert an ``ssl_options`` dictionary to an
    `~ssl.SSLContext` object.

    The ``ssl_options`` dictionary contains keywords to be passed to
    `ssl.wrap_socket`.  In Python 2.7.9+, `ssl.SSLContext` objects can
    be used instead.  This function converts the dict form to its
    `~ssl.SSLContext` equivalent, and may be used when a component which
    accepts both forms needs to upgrade to the `~ssl.SSLContext` version
    to use features like SNI or NPN.

    .. versionchanged:: 6.2

       Added server_side argument. Omitting this argument will
       result in a DeprecationWarning on Python 3.10.

    a_SSL_CONTEXT_KEYWORDSu<genexpr>ussl_options_to_context.<locals>.<genexpr>assl_options_to_contextTaserver_sideaHAS_SNIawrap_socketaserver_hostnameaserver_sideuReturns an ``ssl.SSLSocket`` wrapping the given socket.

    ``ssl_options`` may be either an `ssl.SSLContext` object or a
    dictionary (as accepted by `ssl_options_to_context`).  Additional
    keyword arguments are passed to ``wrap_socket`` (either the
    `~ssl.SSLContext` method or the `ssl` module function as
    appropriate).

    .. versionchanged:: 6.2

       Added server_side argument. Omitting this argument will
       result in a DeprecationWarning on Python 3.10.
    uMiscellaneous network utility code.a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/netutil.pya__file__a__spec__aoriginahas_locationa__cached__uconcurrent.futuresutornado.concurrentTadummy_executorarun_on_executorarun_on_executorutornado.ioloopTaIOLooputornado.utilTaConfigurableaerrno_from_exceptionaConfigurableaListaCallableaAnyaTypeaDictaUnionaTupleaAwaitableaOptionalacreate_default_contextaPurposeaSERVER_AUTHa_client_ssl_defaultsaCLIENT_AUTHa_server_ssl_defaultsafooaidnaalatin1l�aaddressaAddressFamilyaflagsareuse_portabind_socketsl�amodeabind_unix_socketTLnaadd_accept_handlerDaipareturnOstrOboolais_valid_ipametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>utornado.netutila__module__uConfigurable asynchronous DNS resolver interface.

    By default, a blocking implementation is used (which simply calls
    `socket.getaddrinfo`).  An alternative implementation can be
    chosen with the `Resolver.configure <.Configurable.configure>`
    class method::

        Resolver.configure('tornado.netutil.ThreadedResolver')

    The implementations of this interface included with Tornado are

    * `tornado.netutil.DefaultLoopResolver`
    * `tornado.netutil.DefaultExecutorResolver` (deprecated)
    * `tornado.netutil.BlockingResolver` (deprecated)
    * `tornado.netutil.ThreadedResolver` (deprecated)
    * `tornado.netutil.OverrideResolver`
    * `tornado.platform.twisted.TwistedResolver` (deprecated)
    * `tornado.platform.caresresolver.CaresResolver` (deprecated)

    .. versionchanged:: 5.0
       The default implementation has changed from `BlockingResolver` to
       `DefaultExecutorResolver`.

    .. versionchanged:: 6.2
       The default implementation has changed from `DefaultExecutorResolver` to
       `DefaultLoopResolver`.
    a__qualname__aclassmethodaconfigurable_baseuResolver.configurable_baseaconfigurable_defaultuResolver.configurable_defaultastraintuResolver.resolveuCloses the `Resolver`, freeing any resources used.

        .. versionadded:: 3.1

        uResolver.closea__orig_bases__aDefaultExecutorResolveruResolver implementation using `.IOLoop.run_in_executor`.

    .. versionadded:: 5.0

    .. deprecated:: 6.2

       Use `DefaultLoopResolver` instead.
    uResolver implementation using `asyncio.loop.getaddrinfo`.aExecutorResolveruResolver implementation using a `concurrent.futures.Executor`.

    Use this instead of `ThreadedResolver` when you require additional
    control over the executor being used.

    The executor will be shut down when the resolver is closed unless
    ``close_resolver=False``; use this if you want to reuse the same
    executor elsewhere.

    .. versionchanged:: 5.0
       The ``io_loop`` argument (deprecated since version 4.1) has been removed.

    .. deprecated:: 5.0
       The default `Resolver` now uses `asyncio.loop.getaddrinfo`;
       use that instead of this class.
    TntaExecutorabooluExecutorResolver.initializeuExecutorResolver.closeuExecutorResolver.resolveaBlockingResolveruDefault `Resolver` implementation, using `socket.getaddrinfo`.

    The `.IOLoop` will be blocked during the resolution, although the
    callback will not be run until the next `.IOLoop` iteration.

    .. deprecated:: 5.0
       The default `Resolver` now uses `.IOLoop.run_in_executor`; use that instead
       of this class.
    uBlockingResolver.initializeuMultithreaded non-blocking `Resolver` implementation.

    Requires the `concurrent.futures` package to be installed
    (available in the standard library since Python 3.2,
    installable with ``pip install futures`` in older versions).

    The thread pool size can be configured with::

        Resolver.configure('tornado.netutil.ThreadedResolver',
                           num_threads=10)

    .. versionchanged:: 3.1
       All ``ThreadedResolvers`` share a single thread pool, whose
       size is set by the first one to be created.

    .. deprecated:: 5.0
       The default `Resolver` now uses `.IOLoop.run_in_executor`; use that instead
       of this class.
    Tl
anum_threadsuThreadedResolver.initializeuThreadedResolver._create_threadpoolaOverrideResolveruWraps a resolver with a mapping of overrides.

    This can be used to make local DNS changes (e.g. for testing)
    without modifying system-wide settings.

    The mapping can be in three formats::

        {
            # Hostname to host or ip
            "example.com": "127.0.1.1",

            # Host+port to host+port
            ("login.example.com", 443): ("localhost", 1443),

            # Host+port+address family to host+port
            ("login.example.com", 443, socket.AF_INET6): ("::1", 1443),
        }

    .. versionchanged:: 5.0
       Added support for host-port-family triplets.
    adictuOverrideResolver.initializeuOverrideResolver.closeuOverrideResolver.resolvePacertfileaca_certsacert_reqsakeyfileassl_versionaciphersTnassl_optionsTnnakwargsaSSLSocketassl_wrap_socketTa.0wkTwxu<listcomp>Tafamw_aaddressu<module tornado.netutil>Ta__class__Taclsanum_threadsapidT
ahostaportafamilyaaddrinfoaresultsafamasocktypeaprotoacanonnameaaddressTafdaeventswiaconnectionaaddressaremovedasockacallbackTacallbackaremovedasockTasockacallbackaio_looparemovedaaccept_handleraremove_handlerTaportaaddressafamilyabacklogaflagsareuse_portasocketsabound_portaunique_addressesaresaafasocktypeaprotoacanonnameasockaddrasockweahostarequested_portTafileamodeabacklogasockweastTaselfTaclsTaselfa__class__Taselfaexecutoraclose_executorTaselfanum_threadsathreadpoola__class__TaselfaresolveramappingTaiparesweTaio_loopasockaremovedTaio_looparemovedasockTaselfahostaportafamilyTaselfahostaportafamilyaresultTassl_optionsaserver_sideadefault_versionacontextTasocketassl_optionsaserver_hostnameaserver_sideakwargsacontext.tornado.options�;,a_optionsa_parse_callbacksadefineushow this help informationa_help_callbackTahelpTatypeahelpacallbackareplaceTw_w-a_normalize_nameageta_OptionavalueuUnrecognized option %rasetavaluesanameu<genexpr>uOptionParser.__iter__.<locals>.<genexpr>a__getattr__a__setattr__aitemsutoo many values to unpack (expected 2)uAn iterable of (name, value) pairs.

        .. versionadded:: 3.1
        uThe set of option-groups created by ``define``.

        .. versionadded:: 3.1
        agroup_nameuOptionParser.groups.<locals>.<genexpr>uThe names and values of options in a group.

        Useful for copying options into Application settings::

            from tornado.options import define, parse_command_line, options

            define('template_path', group='application')
            define('static_path', group='application')

            parse_command_line()

            application = Application(
                handlers, **options.group_dict('application'))

        .. versionadded:: 3.1
        agroupaoptuOptionParser.group_dict.<locals>.<genexpr>uThe names and values of all options.

        .. versionadded:: 3.1
        uOptionParser.as_dict.<locals>.<genexpr>aErroruOption %r already defined in %safile_nameasysa_getframeTlaf_codeaco_filenameaf_backaco_nameaframeu<unknown>aoptions_fileuadefaultTafile_nameadefaultatypeahelpametavaramultipleagroup_nameacallbackuDefines a new command line option.

        ``type`` can be any of `str`, `int`, `float`, `bool`,
        `~datetime.datetime`, or `~datetime.timedelta`. If no ``type``
        is given but a ``default`` is, ``type`` is the type of
        ``default``. Otherwise, ``type`` defaults to `str`.

        If ``multiple`` is True, the option value is a list of ``type``
        instead of an instance of ``type``.

        ``help`` and ``metavar`` are used to construct the
        automatically generated command line help string. The help
        message is formatted like::

           --name=METAVAR      help string

        ``group`` is used to group the defined options in logical
        groups. By default, command line options are grouped by the
        file in which they are defined.

        Command line option names must be unique globally.

        If a ``callback`` is given, it will be run with the new value whenever
        the option is changed.  This can be used to combine command-line
        and file-based options::

            define("config", type=str, help="path to config file",
                   callback=lambda path: parse_config_file(path, final=False))

        With this definition, options in the file specified by ``--config`` will
        override options set earlier on the command line, but can be overridden
        by later flags.

        aargvlastartswithTw-u--alstripapartitionTw=utoo many values to unpack (expected 3)aselfaprint_helpuUnrecognized command line option: %ratypeatrueuOption %r requires a valueaoptionaparsearun_parse_callbacksuParses all options given on the command line (defaults to
        `sys.argv`).

        Options look like ``--option=value`` and are parsed according
        to their ``type``. For boolean options, ``--option`` is
        equivalent to ``--option=true``

        If the option has ``multiple=True``, comma-separated values
        are accepted. For multi-value integer options, the syntax
        ``x:y`` is also accepted and equivalent to ``range(x, y)``.

        Note that ``args[0]`` is ignored since it is the program name
        in `sys.argv`.

        We return a list of all arguments that are not parsed as options.

        If ``final`` is ``False``, parse callbacks will not be run.
        This is useful for applications that wish to combine configurations
        from multiple sources.

        a__file__aabspatharba__enter__a__exit__aexec_inanative_strareadTnnnamultipleTOlistOstruOption %r is required to be a list of %s or a comma-separated stringa__name__uParses and loads the config file at the given path.

        The config file contains Python code that will be executed (so
        it is **not safe** to use untrusted config files). Anything in
        the global namespace that matches a defined option will be
        used to set that option's value.

        Options may either be the specified type for the option or
        strings (in which case they will be parsed the same way as in
        `.parse_command_line`)

        Example (using the options defined in the top-level docs of
        this module)::

            port = 80
            mysql_host = 'mydb.example.com:3306'
            # Both lists and comma-separated strings are allowed for
            # multiple=True.
            memcache_hosts = ['cache1.example.com:11011',
                              'cache2.example.com:11011']
            memcache_hosts = 'cache1.example.com:11011,cache2.example.com:11011'

        If ``final`` is ``False``, parse callbacks will not be run.
        This is useful for applications that wish to combine configurations
        from multiple sources.

        .. note::

            `tornado.options` is primarily a command-line library.
            Config file support is provided for applications that wish
            to use it, but applications that prefer config files may
            wish to look at other libraries instead.

        .. versionchanged:: 4.1
           Config files are now always interpreted as utf-8 instead of
           the system default encoding.

        .. versionchanged:: 4.4
           The special variable ``__file__`` is available inside config
           files, specifying the absolute path to the config file itself.

        .. versionchanged:: 5.1
           Added the ability to set options via strings in config files.

        aprintuUsage: %s [OPTIONS]lTafileTu
Options:
aby_groupasetdefaultaappendasortedu
%s options:
aosapathanormpathasortu<lambda>uOptionParser.print_help.<locals>.<lambda>Takeyametavarw=ahelpu (default %s)atextwrapawrapl,alinesainsertTluu  --%-30s %s:lnnu%-34s %sw uPrints all the command line options to stderr (or another file).aexituAdds a parse callback, to be invoked when option parsing is done.a_MockableuReturns a wrapper around self that is compatible with
        `mock.patch <unittest.mock.patch>`.

        The `mock.patch <unittest.mock.patch>` function (included in
        the standard library `unittest.mock` package since Python 3.3,
        or in the third-party ``mock`` package for older versions of
        Python) is incompatible with objects like ``options`` that
        override ``__getattr__`` and ``__setattr__``.  This function
        returns an object that can be used with `mock.patch.object
        <unittest.mock.patch.object>` to modify option values::

            with mock.patch.object(options.mockable(), 'name', value):
                assert options.name == value
        a_originalsTudon't reuse mockable objectsapoputype must not be NoneacallbackaUNSETa_valueadatetimea_parse_datetimeatimedeltaa_parse_timedeltaa_parse_boolabasestring_typea_parse_stringasplitTw,anumbersaIntegralTw:a_parseaextenduOption %r is required to be a list of %suOption %r is required to be a %s (%s given)a_DATETIME_FORMATSastrptimeuUnrecognized date/time format: %rastarta_TIMEDELTA_PATTERNamatchTlTlasecondsa_TIMEDELTA_ABBREV_DICTasumaendalowerTafalsew0wfa_unicodeaoptionsTadefaultatypeahelpametavaramultipleagroupacallbackuDefines an option in the global namespace.

    See `OptionParser.define`.
    aparse_command_lineTafinaluParses global options from the command line.

    See `OptionParser.parse_command_line`.
    aparse_config_fileuParses global options from a config file.

    See `OptionParser.parse_config_file`.
    uPrints all the command line options to stderr (or another file).

    See `OptionParser.print_help`.
    aadd_parse_callbackuAdds a parse callback, to be invoked when option parsing is done.

    See `OptionParser.add_parse_callback`
    uA command line parsing module that lets modules define their own options.

This module is inspired by Google's `gflags
<https://github.com/google/python-gflags>`_. The primary difference
with libraries such as `argparse` is that a global registry is used so
that options may be defined in any module (it also enables
`tornado.log` by default). The rest of Tornado does not depend on this
module, so feel free to use `argparse` or other configuration
libraries if you prefer them.

Options must be defined with `tornado.options.define` before use,
generally at the top level of a module. The options are then
accessible as attributes of `tornado.options.options`::

    # myapp/db.py
    from tornado.options import define, options

    define("mysql_host", default="127.0.0.1:3306", help="Main user DB")
    define("memcache_hosts", default="127.0.0.1:11011", multiple=True,
           help="Main user memcache servers")

    def connect():
        db = database.Connection(options.mysql_host)
        ...

    # myapp/server.py
    from tornado.options import define, options

    define("port", default=8080, help="port to listen on")

    def start_server():
        app = make_app()
        app.listen(options.port)

The ``main()`` method of your application does not need to be aware of all of
the options used throughout your program; they are all automatically loaded
when the modules are loaded.  However, all modules that define options
must have been imported before the command line is parsed.

Your ``main()`` method can parse the command line or parse a config file with
either `parse_command_line` or `parse_config_file`::

    import myapp.db, myapp.server
    import tornado.options

    if __name__ == '__main__':
        tornado.options.parse_command_line()
        # or
        tornado.options.parse_config_file("/etc/server.conf")

.. note::

   When using multiple ``parse_*`` functions, pass ``final=False`` to all
   but the last one, or side effects may occur twice (in particular,
   this can result in log messages being doubled).

`tornado.options.options` is a singleton instance of `OptionParser`, and
the top-level functions in this module (`define`, `parse_command_line`, etc)
simply call methods on it.  You may create additional `OptionParser`
instances to define isolated sets of options, such as for subcommands.

.. note::

   By default, several options are defined that will configure the
   standard `logging` module when `parse_command_line` or `parse_config_file`
   are called.  If you want Tornado to leave the logging configuration
   alone so you can manage it yourself, either pass ``--logging=none``
   on the command line or do the following to disable it in code::

       from tornado.options import options, parse_command_line
       options.logging = None
       parse_command_line()

.. note::

   `parse_command_line` or `parse_config_file` function should called after
   logging configuration and user-defined command line flags using the
   ``callback`` option definition, or these configurations will not take effect.

.. versionchanged:: 4.3
   Dashes and underscores are fully interchangeable in option names;
   options can be defined, set, and read with any mix of the two.
   Dashes are typical for command-line usage while config files require
   underscores.
a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/options.pya__spec__aoriginahas_locationa__cached__areutornado.escapeTa_unicodeanative_strutornado.logTadefine_logging_optionsadefine_logging_optionsutornado.utilTabasestring_typeaexec_inaAnyaIteratoraIterableaTupleaSetaDictaCallableaListaTextIOaOptionalTEExceptionametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %su<metaclass>utornado.optionsa__module__uException raised by errors in the options module.a__qualname__a__orig_bases__TOobjectaOptionParseruA collection of options, a dictionary with object-like access.

    Normally accessed via static functions in the `tornado.options` module,
    which reference a global instance.
    Dareturnna__init__uOptionParser.__init__astrareturnuOptionParser._normalize_nameuOptionParser.__getattr__uOptionParser.__setattr__a__iter__uOptionParser.__iter__aboola__contains__uOptionParser.__contains__uOptionParser.__getitem__a__setitem__uOptionParser.__setitem__uOptionParser.itemsagroupsuOptionParser.groupsagroup_dictuOptionParser.group_dictaas_dictuOptionParser.as_dictTnnnnFnnuOptionParser.defineTntaargsafinaluOptionParser.parse_command_lineTtuOptionParser.parse_config_fileTnafileuOptionParser.print_helpuOptionParser._help_callbackTLnuOptionParser.add_parse_callbackuOptionParser.run_parse_callbacksDareturna_MockableamockableuOptionParser.mockableu`mock.patch` compatible wrapper for `OptionParser`.

    As of ``mock`` version 1.0.1, when an object uses ``__getattr__``
    hooks instead of ``__dict__``, ``patch.__exit__`` tries to delete
    the attribute it set instead of setting a new one (assuming that
    the object does not capture ``__setattr__``, so the patch
    created a new attribute in ``__dict__``).

    _Mockable's getattr and setattr pass through to the underlying
    OptionParser, and delattr undoes the effect of a previous setattr.
    u_Mockable.__init__u_Mockable.__getattr__u_Mockable.__setattr__a__delattr__u_Mockable.__delattr__aobjectTnnnnFnnnu_Option.__init__u_Option.valueu_Option.parseu_Option.setL
u%a %b %d %H:%M:%S %Yu%Y-%m-%d %H:%M:%Su%Y-%m-%d %H:%Mu%Y-%m-%dT%H:%Mu%Y%m%d %H:%M:%Su%Y%m%d %H:%Mu%Y-%m-%du%Y%m%du%H:%M:%Su%H:%Mu_Option._parse_datetimeD	whwmaminwsasecamsauswdwwahoursaminutesaminutesasecondsasecondsamillisecondsamicrosecondsadaysaweeksu[-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?a_FLOAT_PATTERNacompileu\s*(%s)\s*(\w*)\s*aIGNORECASEu_Option._parse_timedeltau_Option._parse_boolu_Option._parse_stringDapathafinalareturnOstrOboolnTa.0anameaoptTa.0anameaoptagroupTa.0aoptTaoptionu<listcomp>Tanameaoptu<module tornado.options>Ta__class__TaselfanameTaselfT
aselfanameadefaultatypeahelpametavaramultipleafile_nameagroup_nameacallbackTaselfaoptionsTaselfanameavalueTaselfavalueTaselfavalueaformatTaselfavalueasumastartwmanumaunitsTacallbackTaselfacallbackTanameadefaultatypeahelpametavaramultipleagroupacallbackTaselfanameadefaultatypeahelpametavaramultipleagroupacallbackanormalizedaframeaoptions_fileafile_nameagroup_nameaoptionTaselfagroupT	aselfavaluea_parseapartalo_strw_ahi_straloahiTaargsafinalT
aselfaargsafinalaremainingwiaarganameaequalsavalueaoptionTapathafinalTaselfapathafinalaconfigwfanameanormalizedaoptionT
aselfafileaby_groupaoptionafilenamewoaprefixadescriptionalinesalineTaselfavalueaitem.tornado.platform.asyncio�%a_selector_loopsa_select_conda__enter__a__exit__a_closing_selectoranotifyTnnna_waker_wasendTdaa_threadajoinaclearaasyncio_loopaselector_loopaasyncioaProactorEventLoopaAddThreadSelectorEventLoopahandlersareadersawritersaclosingaIOLoopa_ioloop_for_asyncioacopyais_closedasetdefaultuIOLoop uu already associated with asyncio loop a__class__ainitializeaselfutoo many values to unpack (expected 2)aremove_handleraclose_fdacloseasplit_fdufd %s added twiceaREADaadd_readera_handle_eventsaaddaWRITEaadd_writerafdaremove_readeraremovearemove_writera_get_event_loopTERuntimeErrorEAssertionErroraset_event_looparun_foreverastopacall_lateramaxlatimea_run_callbackapartialacancelaget_running_loopacall_soonacall_soon_threadsafearun_in_executoraset_default_executoraget_event_loopais_currentanew_event_loopakwargsa_clear_currentTaall_fdsawarningsawarnumake_current is deprecated; start the event loop firstaDeprecationWarningDastacklevellaold_asynciouConvert an `asyncio.Future` to a `tornado.concurrent.Future`.

    .. versionadded:: 4.1

    .. deprecated:: 5.0
       Tornado ``Futures`` have been merged with `asyncio.Future`,
       so this method is now a no-op.
    aconvert_yieldeduConvert a Tornado yieldable object to an `asyncio.Future`.

    .. versionadded:: 4.1

    .. versionchanged:: 4.3
       Now accepts any yieldable object, not just
       `tornado.concurrent.Future`.

    .. deprecated:: 5.0
       Tornado ``Futures`` have been merged with `asyncio.Future`,
       so this method is now equivalent to `tornado.gen.convert_yielded`.
    a__init__uAnyThreadEventLoopPolicy is deprecated, use asyncio.run or asyncio.new_event_loop insteadaMY_ATTRIBUTESa__getattribute__a_real_loopathreadingaConditiona_select_argsaThreaduTornado selectora_run_selectTanameadaemonatargetastarta_start_selecta_readersa_writersasocketasocketpaira_waker_rasetblockingTFa_consume_wakeradiscarda_wake_selectorarecvTlakeysawaitaselectato_readato_writeutoo many values to unpack (expected 3)aerrnoaWSAENOTSOCKaEBADFafilenoa_handle_selecta_handle_eventuBridges between the `asyncio` module and Tornado IOLoop.

.. versionadded:: 3.2

This module integrates Tornado with the ``asyncio`` module introduced
in Python 3.4. This makes it possible to combine the two libraries on
the same event loop.

.. deprecated:: 5.0

   While the code in this module is still used, it is now enabled
   automatically when `asyncio` is available, so applications should
   no longer need to refer to this module directly.

.. note::

   Tornado is designed to use a selector-based event loop. On Windows,
   where a proactor-based event loop has been the default since Python 3.8,
   a selector event loop is emulated by running ``select`` on a separate thread.
   Configuring ``asyncio`` to use a selector event loop may improve performance
   of Tornado (but may reduce performance of other ``asyncio``-based libraries
   in the same process).
a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/platform/asyncio.pya__file__a__spec__aoriginahas_locationa__cached__aatexituconcurrent.futuresaconcurrentafunctoolsasysatypingutornado.genTaconvert_yieldedutornado.ioloopTaIOLoopa_Selectablea_SelectableaAnyaTypeVaraAwaitableaCallableaUnionaOptionalaListaTupleaDictTa_Ta_TDareturnna_atexit_callbackaregisterTaget_event_loopametaclassa__prepare__aBaseAsyncIOLoopa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>utornado.platform.asyncioa__module__a__qualname__aAbstractEventLoopareturnuBaseAsyncIOLoop.initializeaall_fdsabooluBaseAsyncIOLoop.closeaintahandlerTQnaeventsaadd_handleruBaseAsyncIOLoop.add_handleraupdate_handleruBaseAsyncIOLoop.update_handleruBaseAsyncIOLoop.remove_handleruBaseAsyncIOLoop._handle_eventsuBaseAsyncIOLoop.startuBaseAsyncIOLoop.stopawhenafloatacallbackaargsaobjectacall_atuBaseAsyncIOLoop.call_atatimeoutaremove_timeoutuBaseAsyncIOLoop.remove_timeoutaadd_callbackuBaseAsyncIOLoop.add_callbackaadd_callback_from_signaluBaseAsyncIOLoop.add_callback_from_signalaexecutorafuturesaExecutorafuncuBaseAsyncIOLoop.run_in_executoruBaseAsyncIOLoop.set_default_executora__orig_bases__aAsyncIOMainLoopu``AsyncIOMainLoop`` creates an `.IOLoop` that corresponds to the
    current ``asyncio`` event loop (i.e. the one returned by
    ``asyncio.get_event_loop()``).

    .. deprecated:: 5.0

       Now used automatically when appropriate; it is no longer necessary
       to refer to this class directly.

    .. versionchanged:: 5.0

       Closing an `AsyncIOMainLoop` now closes the underlying asyncio loop.
    uAsyncIOMainLoop.initializeamake_currentuAsyncIOMainLoop.make_currentaAsyncIOLoopu``AsyncIOLoop`` is an `.IOLoop` that runs on an ``asyncio`` event loop.
    This class follows the usual Tornado semantics for creating new
    ``IOLoops``; these loops are not necessarily related to the
    ``asyncio`` default event loop.

    Each ``AsyncIOLoop`` creates a new ``asyncio.EventLoop``; this object
    can be accessed with the ``asyncio_loop`` attribute.

    .. versionchanged:: 6.2

       Support explicit ``asyncio_loop`` argument
       for specifying the asyncio loop to attach to,
       rather than always creating a new one with the default policy.

    .. versionchanged:: 5.0

       When an ``AsyncIOLoop`` becomes the current `.IOLoop`, it also sets
       the current `asyncio` event loop.

    .. deprecated:: 5.0

       Now used automatically when appropriate; it is no longer necessary
       to refer to this class directly.
    uAsyncIOLoop.initializeuAsyncIOLoop.closeuAsyncIOLoop.make_currenta_clear_current_hookuAsyncIOLoop._clear_current_hookaasyncio_futureaFutureato_tornado_futureatornado_futureato_asyncio_futureaDefaultEventLoopPolicya_BasePolicyaAnyThreadEventLoopPolicyuEvent loop policy that allows loop creation on any thread.

    The default `asyncio` event loop policy only automatically creates
    event loops in the main threads. Other threads must create event
    loops explicitly or `asyncio.get_event_loop` (and therefore
    `.IOLoop.current`) will fail. Installing this policy allows event
    loops to be created automatically on any thread, matching the
    behavior of Tornado versions prior to 5.0 (or 5.0 on Python 2).

    Usage::

        asyncio.set_event_loop_policy(AnyThreadEventLoopPolicy())

    .. versionadded:: 5.0

    .. deprecated:: 6.2

        ``AnyThreadEventLoopPolicy`` affects the implicit creation
        of an event loop, which is deprecated in Python 3.10 and
        will be removed in a future version of Python. At that time
        ``AnyThreadEventLoopPolicy`` will no longer be useful.
        If you are relying on it, use `asyncio.new_event_loop`
        or `asyncio.run` explicitly in any non-main threads that
        need event loops.
    uAnyThreadEventLoopPolicy.__init__uAnyThreadEventLoopPolicy.get_event_loopuWrap an event loop to add implementations of the ``add_reader`` method family.

    Instances of this class start a second thread to run a selector.
    This thread is completely hidden from the user; all callbacks are
    run on the wrapped event loop's thread.

    This class is used automatically by Tornado; applications should not need
    to refer to it directly.

    It is safe to wrap any event loop with this class, although it only makes sense
    for event loops that do not implement the ``add_reader`` family of methods
    themselves (i.e. ``WindowsProactorEventLoop``)

    Closing the ``AddThreadSelectorEventLoop`` also closes the wrapped event loop.

    Sacloseaadd_writera_consume_wakera_threada_waker_ra_closing_selectora_readersa_handle_eventaremove_readera_waker_wa_real_loopa_select_conda_wake_selectora_writersa_select_argsaremove_writera_run_selectaadd_readera_start_selecta_handle_selectanameastruAddThreadSelectorEventLoop.__getattribute__areal_loopuAddThreadSelectorEventLoop.__init__a__del__uAddThreadSelectorEventLoop.__del__uAddThreadSelectorEventLoop.closeuAddThreadSelectorEventLoop._wake_selectoruAddThreadSelectorEventLoop._consume_wakeruAddThreadSelectorEventLoop._start_selectuAddThreadSelectorEventLoop._run_selectarsa_FileDescriptorLikeawsuAddThreadSelectorEventLoop._handle_selectacb_mapuAddThreadSelectorEventLoop._handle_eventuAddThreadSelectorEventLoop.add_readeruAddThreadSelectorEventLoop.add_writerDafdareturna_FileDescriptorLikenuAddThreadSelectorEventLoop.remove_readeruAddThreadSelectorEventLoop.remove_writeru<module tornado.platform.asyncio>Ta__class__TaselfTaselfanamea__class__Taselfa__class__Taselfareal_loopTaloopTaselfafdacb_mapacallbackTaselfafdaeventsafileobjahandler_funcTaselfarsawswrwwTaselfato_readato_writearsawsaxswew_Taselfacallbackaargsakwargsacall_soonTaselfacallbackaargsakwargsTaselfafdahandleraeventsafileobjTaselfafdacallbackaargsTaselfawhenacallbackaargsakwargsTaselfaall_fdsa__class__Taselfaall_fdsafdafileobjahandler_funcTaselfaloopa__class__Taselfaasyncio_loopakwargsaloopaexisting_loopa__class__Taselfakwargsa__class__Taselfakwargsaloopa__class__TaselfafdafileobjTaselfafdTaselfatimeoutTaselfaexecutorafuncaargsTaselfaexecutorTaselfaold_loopTatornado_futureTaasyncio_futureTaselfafdaeventsafileobj.tornado.platform
a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/platform/__init__.pya__file__Lu/usr/local/lib/python3.8/dist-packages/tornado/platforma__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__u<module tornado.platform>u.tornado.processG�amultiprocessinglacpu_countaosasysconfTaSC_NPROCESSORS_CONFTEAttributeErrorEValueErroragen_logaerrorTuCould not detect number of processors; assuming 1uReturns the number of processors on this machine.arandomasysamoduleslahexlifyaurandomTllatimel�agetpidaseedlda_task_idainfouStarting %d processeswiareturnaOptionalastart_childufork_processes.<locals>.start_childachildrenawaitutoo many values to unpack (expected 2)apopaWIFSIGNALEDawarninguchild %d (pid %d) killed by signal %d, restartingaWTERMSIGaWEXITSTATUSuchild %d (pid %d) exited with status %d, restartinguchild %d (pid %d) exited normallyanum_restartsuToo many child restarts, giving upaidaexitTluStarts multiple worker processes.

    If ``num_processes`` is None or <= 0, we detect the number of cores
    available on this machine and fork that number of child
    processes. If ``num_processes`` is given and > 0, we fork that
    specific number of sub-processes.

    Since we use processes and not threads, there is no shared memory
    between any server code.

    Note that multiple processes are not compatible with the autoreload
    module (or the ``autoreload=True`` option to `tornado.web.Application`
    which defaults to True when ``debug=True``).
    When using multiple processes, no IOLoops can be created or
    referenced until after the call to ``fork_processes``.

    In each child process, ``fork_processes`` returns its *task id*, a
    number between 0 and ``num_processes``.  Processes that exit
    abnormally (due to a signal or non-zero exit status) are restarted
    with the same id (up to ``max_restarts`` times).  In the parent
    process, ``fork_processes`` calls ``sys.exit(0)`` after all child
    processes have exited normally.

    max_restarts defaults to 100.

    Availability: Unix
    aforka_reseed_randomuReturns the current task id, if any.

    Returns None if this process was not created by `fork_processes`.
    aioloopaIOLoopacurrentaio_loopastdinaSubprocessaSTREAMapipeaextendaappendaPipeIOStreamakwargsagetTastdoutastdoutapipe_fdsato_closeTastderrastderrasubprocessaPopenaprocacloseapidTastdinastdoutastderraselfa_exit_callbackareturncodeainitializea_waitinga_try_cleanup_processuRuns ``callback`` when this process exits.

        The callback takes one argument, the return code of the process.

        This method uses a ``SIGCHLD`` handler, which is a global setting
        and may conflict if you have other libraries trying to handle the
        same signal.  If you are using more than one ``IOLoop`` it may
        be necessary to call `Subprocess.initialize` first to designate
        one ``IOLoop`` to run the signal handlers.

        In many cases a close callback on the stdout or stderr streams
        can be used as an alternative to an exit callback if the
        signal handler is causing a problem.

        Availability: Unix
        aFutureDaretareturnOintnacallbackuSubprocess.wait_for_exit.<locals>.callbackaset_exit_callbackuReturns a `.Future` which resolves when the process exits.

        Usage::

            ret = yield proc.wait_for_exit()

        This is a coroutine-friendly alternative to `set_exit_callback`
        (and a replacement for the blocking `subprocess.Popen.wait`).

        By default, raises `subprocess.CalledProcessError` if the process
        has a non-zero exit status. Use ``wait_for_exit(raise_error=False)``
        to suppress this behavior and return the exit status without raising.

        .. versionadded:: 4.2

        Availability: Unix
        araise_errorafuture_set_exception_unless_cancelledafutureaCalledProcessErroraunknownafuture_set_result_unless_cancelleda_initializedasignalaSIGCHLDu<lambda>uSubprocess.initialize.<locals>.<lambda>a_old_sigchlduInitializes the ``SIGCHLD`` handler.

        The signal handler is run on an `.IOLoop` to avoid locking issues.
        Note that the `.IOLoop` used for signal handling need not be the
        same one used by individual Subprocess objects (as long as the
        ``IOLoops`` are each running in separate threads).

        .. versionchanged:: 5.0
           The ``io_loop`` argument (deprecated since version 4.1) has been
           removed.

        Availability: Unix
        aadd_callback_from_signalaclsa_cleanupuRemoves the ``SIGCHLD`` handler.akeysawaitpidaWNOHANGa_set_returncodeaWIFEXITEDuUtilities for working with multiple processes, including both forking
the server into multiple processes and managing subprocesses.
a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/process.pya__file__a__spec__aoriginahas_locationa__cached__abinasciiTahexlifyutornado.concurrentTaFutureafuture_set_result_unless_cancelledafuture_set_exception_unless_cancelledatornadoTaiolooputornado.iostreamTaPipeIOStreamutornado.logTagen_logatypingaAnyaCallableDareturnOintDareturnnTnanum_processesamax_restartsafork_processesatask_idTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>utornado.processa__module__uWraps ``subprocess.Popen`` with IOStream support.

    The constructor is the same as ``subprocess.Popen`` with the following
    additions:

    * ``stdin``, ``stdout``, and ``stderr`` may have the value
      ``tornado.process.Subprocess.STREAM``, which will make the corresponding
      attribute of the resulting Subprocess a `.PipeIOStream`. If this option
      is used, the caller is responsible for closing the streams when done
      with them.

    The ``Subprocess.STREAM`` option and the ``set_exit_callback`` and
    ``wait_for_exit`` methods do not work on Windows. There is
    therefore no reason to use this class instead of
    ``subprocess.Popen`` on that platform.

    .. versionchanged:: 5.0
       The ``io_loop`` argument (deprecated since version 4.1) has been removed.

    a__qualname__aobjectaargsa__init__uSubprocess.__init__aintuSubprocess.set_exit_callbackTtabooluFuture[int]await_for_exituSubprocess.wait_for_exitaclassmethoduSubprocess.initializeauninitializeuSubprocess.uninitializeuSubprocess._cleanupuSubprocess._try_cleanup_processastatusuSubprocess._set_returncodea__orig_bases__Tasigaframeaio_loopaclsTaclsaio_loopu<module tornado.process>Ta__class__T
aselfaargsakwargsapipe_fdsato_closeain_rain_waout_raout_waerr_raerr_wafdaattrTaclsapidTarandomaseedTaselfastatusacallbackTaclsapidaret_pidastatusasubprocTaretaraise_errorafutureTafuturearaise_errorT
anum_processesamax_restartsachildrenastart_childwiaidanum_restartsapidastatusanew_idTaselfacallbackTwiapidachildrenTachildrenTaclsTaselfaraise_errorafutureacallbacku.tornado.queuesC �Dareturnnaon_timeoutu_set_timeout.<locals>.on_timeoutaioloopaIOLoopacurrentaadd_timeoutaadd_done_callbacku<lambda>u_set_timeout.<locals>.<lambda>afutureadoneaset_exceptionagenaTimeoutErroraio_looparemove_timeoutatimeout_handlewqagetumaxsize can't be Nonelumaxsize can't be negativea_maxsizea_initacollectionsadequea_gettersa_puttersa_unfinished_tasksaEventa_finishedasetuNumber of items allowed in the queue.a_queueuNumber of items in the queue.amaxsizeaqsizeaFutureaput_nowaitaQueueFullaappendaitema_set_timeoutaset_resultTnuPut an item into the queue, perhaps waiting until there is room.

        Returns a Future, which raises `tornado.util.TimeoutError` after a
        timeout.

        ``timeout`` may be a number denoting a time (on the same
        scale as `tornado.ioloop.IOLoop.time`, normally `time.time`), or a
        `datetime.timedelta` object for a deadline relative to the
        current time.
        a_consume_expiredaemptyTuqueue non-empty, why are getters waiting?apoplefta_Queue__put_internalafuture_set_result_unless_cancelleda_getafulluPut an item into the queue without blocking.

        If no free slot is immediately available, raise `QueueFull`.
        aget_nowaitaQueueEmptyuRemove and return an item from the queue.

        Returns an awaitable which resolves once an item is available, or raises
        `tornado.util.TimeoutError` after a timeout.

        ``timeout`` may be a number denoting a time (on the same
        scale as `tornado.ioloop.IOLoop.time`, normally `time.time`), or a
        `datetime.timedelta` object for a deadline relative to the
        current time.

        .. note::

           The ``timeout`` argument of this method differs from that
           of the standard library's `queue.Queue.get`. That method
           interprets numeric values as relative timeouts; this one
           interprets them as absolute deadlines and requires
           ``timedelta`` objects for relative timeouts (consistent
           with other timeouts in Tornado).

        Tuqueue not full, why are putters waiting?utoo many values to unpack (expected 2)uRemove and return an item from the queue without blocking.

        Return an item if one is immediately available, else raise
        `QueueEmpty`.
        utask_done() called too many timesluIndicate that a formerly enqueued task is complete.

        Used by queue consumers. For each `.get` used to fetch a task, a
        subsequent call to `.task_done` tells the queue that the processing
        on the task is complete.

        If a `.join` is blocking, it resumes when all items have been
        processed; that is, when every `.put` is matched by a `.task_done`.

        Raises `ValueError` if called more times than `.put`.
        awaituBlock until all items in the queue are processed.

        Returns an awaitable, which raises `tornado.util.TimeoutError` after a
        timeout.
        a_QueueIteratoracleara_putaselfu<%s at %s %s>a__name__a_formatu<%s %s>umaxsize=%ru queue=%ru getters[%s]u putters[%s]u tasks=%saheapqaheappushaheappopapopuAsynchronous queues for coroutines. These classes are very similar
to those provided in the standard library's `asyncio package
<https://docs.python.org/3/library/asyncio-queue.html>`_.

.. warning::

   Unlike the standard library's `queue` module, the classes defined here
   are *not* thread-safe. To use these queues from another thread,
   use `.IOLoop.add_callback` to transfer control to the `.IOLoop` thread
   before calling any queue methods.

a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/queues.pya__file__a__spec__aoriginahas_locationa__cached__adatetimeatornadoTagenaiolooputornado.concurrentTaFutureafuture_set_result_unless_cancelledutornado.locksTaEventaUnionaTypeVaraGenericaAwaitableaOptionalatypingTa_Ta_TLaQueueaPriorityQueueaLifoQueueaQueueFullaQueueEmptya__all__TEExceptionametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %su<metaclass>utornado.queuesa__module__uRaised by `.Queue.get_nowait` when the queue has no items.a__qualname__a__orig_bases__uRaised by `.Queue.put_nowait` when a queue is at its maximum size.atimeoutatimedeltaareturnDwqareturnuQueue[_T]na__init__u_QueueIterator.__init__a__anext__u_QueueIterator.__anext__aQueueuCoordinate producer and consumer coroutines.

    If maxsize is 0 (the default) the queue size is unbounded.

    .. testcode::

        import asyncio
        from tornado.ioloop import IOLoop
        from tornado.queues import Queue

        q = Queue(maxsize=2)

        async def consumer():
            async for item in q:
                try:
                    print('Doing work on %s' % item)
                    await asyncio.sleep(0.01)
                finally:
                    q.task_done()

        async def producer():
            for item in range(5):
                await q.put(item)
                print('Put %s' % item)

        async def main():
            # Start consumer without waiting (since it never finishes).
            IOLoop.current().spawn_callback(consumer)
            await producer()     # Wait for producer to put all tasks.
            await q.join()       # Wait for consumer to finish all tasks.
            print('Done')

        asyncio.run(main())

    .. testoutput::

        Put 0
        Put 1
        Doing work on 0
        Put 2
        Doing work on 1
        Put 3
        Doing work on 2
        Put 4
        Doing work on 3
        Doing work on 4
        Done


    In versions of Python without native coroutines (before 3.5),
    ``consumer()`` could be written as::

        @gen.coroutine
        def consumer():
            while True:
                item = yield q.get()
                try:
                    print('Doing work on %s' % item)
                    yield gen.sleep(0.01)
                finally:
                    q.task_done()

    .. versionchanged:: 4.3
       Added ``async for`` support in Python 3.5.

    TlaintuQueue.__init__apropertyuQueue.maxsizeuQueue.qsizeabooluQueue.emptyuQueue.fullafloatuFuture[None]aputuQueue.putuQueue.put_nowaituQueue.getuQueue.get_nowaitatask_doneuQueue.task_doneajoinuQueue.joina__aiter__uQueue.__aiter__uQueue._inituQueue._getuQueue._puta__put_internaluQueue.__put_internaluQueue._consume_expiredastra__repr__uQueue.__repr__a__str__uQueue.__str__uQueue._formataPriorityQueueuA `.Queue` that retrieves entries in priority order, lowest first.

    Entries are typically tuples like ``(priority number, data)``.

    .. testcode::

        import asyncio
        from tornado.queues import PriorityQueue

        async def main():
            q = PriorityQueue()
            q.put((1, 'medium-priority item'))
            q.put((0, 'high-priority item'))
            q.put((10, 'low-priority item'))

            print(await q.get())
            print(await q.get())
            print(await q.get())

        asyncio.run(main())

    .. testoutput::

        (0, 'high-priority item')
        (1, 'medium-priority item')
        (10, 'low-priority item')
    uPriorityQueue._inituPriorityQueue._putuPriorityQueue._getaLifoQueueuA `.Queue` that retrieves the most recently put items first.

    .. testcode::

        import asyncio
        from tornado.queues import LifoQueue

        async def main():
            q = LifoQueue()
            q.put(3)
            q.put(2)
            q.put(1)

            print(await q.get())
            print(await q.get())
            print(await q.get())

        asyncio.run(main())

    .. testoutput::

        1
        2
        3
    uLifoQueue._inituLifoQueue._putuLifoQueue._getTw_aio_loopatimeout_handleTaio_loopatimeout_handleu<module tornado.queues>Ta__class__TaselfTaselfamaxsizeTaselfwqTaselfaitemTaselfaresultTafutureatimeoutaon_timeoutaio_loopatimeout_handleTaselfatimeoutafutureTaselfaitemaputterTaselfatimeoutTafutureTaselfaitematimeoutafutureTaselfaitemagetteru.tornado.routing�<
uMust be implemented to return an appropriate instance of `~.httputil.HTTPMessageDelegate`
        that can serve the request.
        Routing implementations may pass additional kwargs to extend the routing logic.

        :arg httputil.HTTPServerRequest request: current HTTP request.
        :arg kwargs: additional keyword arguments passed by routing implementation.
        :returns: an instance of `~.httputil.HTTPMessageDelegate` that will be used to
            process the request.
        a_RoutingDelegateuReturns url string for a given route name and arguments
        or ``None`` if no match is found.

        :arg str name: route name.
        :arg args: url parameters.
        :returns: parametrized url string for a given route name (or ``None``).
        aserver_connarequest_connadelegatearouterahttputilaRequestStartLineaHTTPServerRequestTaconnectionaserver_connectionastart_lineaheadersafind_handleraapp_logadebuguDelegate for %s %s request not foundamethodapatha_DefaultMessageDelegateaheaders_receivedadata_receivedafinishaon_connection_closeaconnectionawrite_headersaResponseStartLineTuHTTP/1.1l�uNot FoundaHTTPHeadersarulesaadd_rulesuConstructs a router from an ordered list of rules::

            RuleRouter([
                Rule(PathMatches("/handler"), Target),
                # ... more rules
            ])

        You can also omit explicit `Rule` constructor and use tuples of arguments::

            RuleRouter([
                (PathMatches("/handler"), Target),
            ])

        `PathMatches` is a default matcher, so the example above can be simplified::

            RuleRouter([
                ("/handler", Target),
            ])

        In the examples above, ``Target`` can be a nested `Router` instance, an instance of
        `~.httputil.HTTPServerConnectionDelegate` or an old-style callable,
        accepting a request argument.

        :arg rules: a list of `Rule` instances or tuples of `Rule`
            constructor arguments.
        TOtupleOlistTllllabasestring_typeaRuleaPathMatches:lnnaselfaappendaprocess_ruleuAppends new rules to the router.

        :arg rules: a list of Rule instances (or tuples of arguments, which are
            passed to Rule constructor).
        uOverride this method for additional preprocessing of each rule.

        :arg Rule rule: a rule to be processed.
        :returns: the same or modified Rule instance.
        amatcheramatcharequestatarget_kwargsaget_target_delegateatargetatarget_paramsaRouteraHTTPServerConnectionDelegateastart_requestaserver_connectionacallablea_CallableAdapterapartialuReturns an instance of `~.httputil.HTTPMessageDelegate` for a
        Rule's target. This method is called by `~.find_handler` and can be
        extended to provide additional target types.

        :arg target: a Rule's target.
        :arg httputil.HTTPServerRequest request: current request.
        :arg target_params: additional parameters that can be useful
            for `~.httputil.HTTPMessageDelegate` creation.
        anamed_rulesa__class__a__init__anameawarninguMultiple handlers named %s; replacing previous valueareverseaReversibleRouterareverse_urlaimport_objectuConstructs a Rule instance.

        :arg Matcher matcher: a `Matcher` instance used for determining
            whether the rule should be considered a match for a specific
            request.
        :arg target: a Rule's target (typically a ``RequestHandler`` or
            `~.httputil.HTTPServerConnectionDelegate` subclass or even a nested `Router`,
            depending on routing implementation).
        :arg dict target_kwargs: a dict of parameters that can be useful
            at the moment of target instantiation (for example, ``status_code``
            for a ``RequestHandler`` subclass). They end up in
            ``target_params['target_kwargs']`` of `RuleRouter.get_target_delegate`
            method.
        :arg str name: the name of the rule that can be used to find it
            in `ReversibleRouter.reverse_url` implementation.
        u%s(%r, %s, kwargs=%r, name=%r)a__name__uMatches current instance against the request.

        :arg httputil.HTTPServerRequest request: current HTTP request
        :returns: a dict of parameters to be passed to the target handler
            (for example, ``handler_kwargs``, ``path_args``, ``path_kwargs``
            can be passed for proper `~.web.RequestHandler` instantiation).
            An empty dict is a valid (and common) return value to indicate a match
            when the argument-passing features are not used.
            ``None`` must be returned to indicate that there is no match.aendswithTw$w$areacompileahost_patternahost_nameaapplicationuX-Real-Ipaheadersadefault_hostapath_patternaregexagroupindexagroupsugroups in url regexes must either be all named or all positional: %rapatterna_find_groupsutoo many values to unpack (expected 2)a_patha_group_countagroupdictaitemsa_unquote_or_noneapath_argsapath_kwargsu<genexpr>uPathMatches.match.<locals>.<genexpr>uCannot reverse url regex Turequired number of arguments not foundaunicode_typeaconverted_argsaurl_escapeautf8DaplusFastartswithTw^:nl��������nacountTw(Tnnasplitw)aindexTw)are_unescapelapiecesu%suuReturns a tuple (reverse string, group count) for a url.

        For example: Given the url pattern /([0-9]{4})/([a-z-]+)/, this method
        would return ('/%s/%s/', 2).
        ahandler_classakwargsuParameters:

        * ``pattern``: Regular expression to be matched. Any capturing
          groups in the regex will be passed in to the handler's
          get/post/etc methods as arguments (by keyword if named, by
          position if unnamed. Named and unnamed capturing groups
          may not be mixed in the same rule).

        * ``handler``: `~.web.RequestHandler` subclass to be invoked.

        * ``kwargs`` (optional): A dictionary of additional arguments
          to be passed to the handler's constructor.

        * ``name`` (optional): A name for this handler.  Used by
          `~.web.Application.reverse_url`.

        aurl_unescapeDaencodingaplusnFuNone-safe wrapper around url_unescape to handle unmatched optional
    groups correctly.

    Note that args are passed as bytes so the handler can decide what
    encoding to use.
    uFlexible routing implementation.

Tornado routes HTTP requests to appropriate handlers using `Router`
class implementations. The `tornado.web.Application` class is a
`Router` implementation and may be used directly, or the classes in
this module may be used for additional flexibility. The `RuleRouter`
class can match on more criteria than `.Application`, or the `Router`
interface can be subclassed for maximum customization.

`Router` interface extends `~.httputil.HTTPServerConnectionDelegate`
to provide additional routing capabilities. This also means that any
`Router` implementation can be used directly as a ``request_callback``
for `~.httpserver.HTTPServer` constructor.

`Router` subclass must implement a ``find_handler`` method to provide
a suitable `~.httputil.HTTPMessageDelegate` instance to handle the
request:

.. code-block:: python

    class CustomRouter(Router):
        def find_handler(self, request, **kwargs):
            # some routing logic providing a suitable HTTPMessageDelegate instance
            return MessageDelegate(request.connection)

    class MessageDelegate(HTTPMessageDelegate):
        def __init__(self, connection):
            self.connection = connection

        def finish(self):
            self.connection.write_headers(
                ResponseStartLine("HTTP/1.1", 200, "OK"),
                HTTPHeaders({"Content-Length": "2"}),
                b"OK")
            self.connection.finish()

    router = CustomRouter()
    server = HTTPServer(router)

The main responsibility of `Router` implementation is to provide a
mapping from a request to `~.httputil.HTTPMessageDelegate` instance
that will handle this request. In the example above we can see that
routing is possible even without instantiating an `~.web.Application`.

For routing to `~.web.RequestHandler` implementations we need an
`~.web.Application` instance. `~.web.Application.get_handler_delegate`
provides a convenient way to create `~.httputil.HTTPMessageDelegate`
for a given request and `~.web.RequestHandler`.

Here is a simple example of how we can we route to
`~.web.RequestHandler` subclasses by HTTP method:

.. code-block:: python

    resources = {}

    class GetResource(RequestHandler):
        def get(self, path):
            if path not in resources:
                raise HTTPError(404)

            self.finish(resources[path])

    class PostResource(RequestHandler):
        def post(self, path):
            resources[path] = self.request.body

    class HTTPMethodRouter(Router):
        def __init__(self, app):
            self.app = app

        def find_handler(self, request, **kwargs):
            handler = GetResource if request.method == "GET" else PostResource
            return self.app.get_handler_delegate(request, handler, path_args=[request.path])

    router = HTTPMethodRouter(Application())
    server = HTTPServer(router)

`ReversibleRouter` interface adds the ability to distinguish between
the routes and reverse them to the original urls using route's name
and additional arguments. `~.web.Application` is itself an
implementation of `ReversibleRouter` class.

`RuleRouter` and `ReversibleRuleRouter` are implementations of
`Router` and `ReversibleRouter` interfaces and can be used for
creating rule-based routing configurations.

Rules are instances of `Rule` class. They contain a `Matcher`, which
provides the logic for determining whether the rule is a match for a
particular request and a target, which can be one of the following.

1) An instance of `~.httputil.HTTPServerConnectionDelegate`:

.. code-block:: python

    router = RuleRouter([
        Rule(PathMatches("/handler"), ConnectionDelegate()),
        # ... more rules
    ])

    class ConnectionDelegate(HTTPServerConnectionDelegate):
        def start_request(self, server_conn, request_conn):
            return MessageDelegate(request_conn)

2) A callable accepting a single argument of `~.httputil.HTTPServerRequest` type:

.. code-block:: python

    router = RuleRouter([
        Rule(PathMatches("/callable"), request_callable)
    ])

    def request_callable(request):
        request.write(b"HTTP/1.1 200 OK\r\nContent-Length: 2\r\n\r\nOK")
        request.finish()

3) Another `Router` instance:

.. code-block:: python

    router = RuleRouter([
        Rule(PathMatches("/router.*"), CustomRouter())
    ])

Of course a nested `RuleRouter` or a `~.web.Application` is allowed:

.. code-block:: python

    router = RuleRouter([
        Rule(HostMatches("example.com"), RuleRouter([
            Rule(PathMatches("/app1/.*"), Application([(r"/app1/handler", Handler)])),
        ]))
    ])

    server = HTTPServer(router)

In the example below `RuleRouter` is used to route between applications:

.. code-block:: python

    app1 = Application([
        (r"/app1/handler", Handler1),
        # other handlers ...
    ])

    app2 = Application([
        (r"/app2/handler", Handler2),
        # other handlers ...
    ])

    router = RuleRouter([
        Rule(PathMatches("/app1.*"), app1),
        Rule(PathMatches("/app2.*"), app2)
    ])

    server = HTTPServer(router)

For more information on application-level routing see docs for `~.web.Application`.

.. versionadded:: 4.5

a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/routing.pya__file__a__spec__aoriginahas_locationa__cached__atornadoTahttputilutornado.httpserverTa_CallableAdapterutornado.escapeTaurl_escapeaurl_unescapeautf8utornado.logTaapp_logutornado.utilTabasestring_typeaimport_objectare_unescapeaunicode_typeaAnyaUnionaOptionalaAwaitableaListaDictaPatternaTupleaoverloadametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %su<metaclass>utornado.routinga__module__uAbstract router interface.a__qualname__areturnaHTTPMessageDelegateuRouter.find_handleraobjectaHTTPConnectionuRouter.start_requesta__orig_bases__uAbstract router interface for routers that can handle named routes
    and support reversing them to original urls.
    astraargsuReversibleRouter.reverse_urlu_RoutingDelegate.__init__astart_lineu_RoutingDelegate.headers_receivedachunkabytesu_RoutingDelegate.data_receivedDareturnnu_RoutingDelegate.finishu_RoutingDelegate.on_connection_closeu_DefaultMessageDelegate.__init__u_DefaultMessageDelegate.finishTOstraMatchera_RuleListaRuleRouteruRule-based router implementation.TnuRuleRouter.__init__uRuleRouter.add_rulesDaruleareturnaRuleaRuleuRuleRouter.process_ruleuRuleRouter.find_handleruRuleRouter.get_target_delegateaReversibleRuleRouteruA rule-based router that implements ``reverse_url`` method.

    Each rule added to this router may have a ``name`` attribute that can be
    used to reconstruct an original uri. The actual reconstruction takes place
    in a rule's matcher (see `Matcher.reverse`).
    uReversibleRuleRouter.__init__uReversibleRuleRouter.process_ruleuReversibleRuleRouter.reverse_urlTOobjectuA routing rule.aMatcheruRule.__init__uRule.reversea__repr__uRule.__repr__uRepresents a matcher for request features.uMatcher.matchuReconstructs full url from matcher instance and additional arguments.uMatcher.reverseaAnyMatchesuMatches any request.uAnyMatches.matchaHostMatchesuMatches requests from hosts specified by ``host_pattern`` regex.uHostMatches.__init__uHostMatches.matchaDefaultHostMatchesuMatches requests from host that is equal to application's default_host.
    Always returns no match if ``X-Real-Ip`` header is present.
    uDefaultHostMatches.__init__uDefaultHostMatches.matchuMatches requests with paths specified by ``path_pattern`` regex.uPathMatches.__init__uPathMatches.matchuPathMatches.reverseaintuPathMatches._find_groupsaURLSpecuSpecifies mappings between URLs and handlers.

    .. versionchanged: 4.5
       `URLSpec` is now a subclass of a `Rule` with `PathMatches` matcher and is preserved for
       backwards compatibility.
    ahandleruURLSpec.__init__uURLSpec.__repr__DwsareturnOstrObytesDwsareturnnnwsTa.0wkwvu<listcomp>Twsu<module tornado.routing>Ta__class__Taselfaapplicationahost_patternTaselfaconnectionTaselfahost_patternTaselfamatcheratargetatarget_kwargsanameTaselfapath_patternTaselfapatternahandlerakwargsanameamatchera__class__Taselfarouteraserver_connarequest_connTaselfarulesTaselfarulesa__class__TaselfTaselfapatternapiecesafragmentaparen_locaunescaped_fragmentTaselfarulesaruleTaselfachunkTaselfarequestakwargsTaselfarequestakwargsaruleatarget_paramsadelegateTaselfatargetarequestatarget_paramsTaselfastart_lineaheadersarequestTaselfarequestTaselfarequestamatchapath_argsapath_kwargsTaselfaruleTaselfarulea__class__TaselfaargsTaselfaargsaconverted_argswaTaselfanameaargsTaselfanameaargsaruleareversed_urlTaselfaserver_connarequest_conn.tornado.simple_httpclient'�a__class__a__init__TlWTamessageamessageaTimeoutuStream closedainitializeTadefaultsamax_clientsacollectionsadequeaqueueaactiveawaitingamax_buffer_sizeamax_header_sizeamax_body_sizearesolveraown_resolveraResolveraOverrideResolverTaresolveramappingaTCPClientaselfTaresolveratcp_clientacloseaappendaconnect_timeoutarequest_timeoutaminaio_loopaadd_timeoutatimeapartiala_on_timeoutuin request queuea_process_queueagen_logadebugumax_clients limit reached, request queued. %d active, %d queued requests.apopleftutoo many values to unpack (expected 3)a_remove_timeoutafunctoolsa_release_fetcha_handle_requesta_HTTPConnectiona_connection_classaremove_timeoutaremoveuTimeout {0}aHTTPResponselWaHTTPTimeoutErrorastart_timeTaerrorarequest_timeaadd_callbackuTimeout callback of request.

        Construct a timeout HTTPResponse when a timeout occurs.

        :arg object key: A simple object to mark the request.
        :info string key: More detailed timeout information.
        aIOLoopacurrentastart_wall_timeaclientarequestarelease_callbackafinal_callbackacodeaheadersachunksa_decompressora_timeouta_sockaddraadd_futureagenaconvert_yieldedarunu<lambda>u_HTTPConnection.__init__.<locals>.<lambda>aresultaurllibaparseaurlsplita_unicodeaurlaparsedaschemeTahttpahttpsuUnsupported url scheme: %sanetlocw@arpartitionTw@ahttputilasplit_host_and_portutoo many values to unpack (expected 2)ahttpsl�lPareamatchu^\[.*\]$:ll��������nahostaparsed_hostnameaallow_ipv6asocketaAF_INETaAF_UNSPECa_get_ssl_optionsanetwork_interfaceais_valid_ipuUnrecognized IPv4 or IPv6 address for network_interface, got %rluwhile connectingaconnectTaafassl_optionsamax_buffer_sizeasource_ipastreamaset_close_callbackaon_connection_closeuduring requestamethoda_SUPPORTED_METHODSaallow_nonstandard_methodsuunknown method %sTaproxy_hostaproxy_portaproxy_usernameaproxy_passwordaproxy_auth_modeu%s not supportedaConnectionaHostl��������Tnnausernameapasswordaauth_usernameaauth_passworduaauth_modeTnabasicuunsupported auth_mode %suBasic abase64ab64encodeaencode_username_passwordaAuthorizationauser_agentuUser-AgentagetTuUser-AgentuTornado/{}aversionTaPOSTaPATCHaPUTabodyabody_produceruBody must %sbe None for method %s (unless allow_nonstandard_methods is true)unot aexpect_100_continueu100-continueaExpectuContent-LengthaPOSTuContent-Typeuapplication/x-www-form-urlencodedadecompress_responseagzipuAccept-Encodingapathw/aqueryw?a_create_connectionaconnectionaRequestStartLineawrite_headersaread_responsea_write_bodyTta_handle_exceptionasysaexc_infou_HTTPConnection.runassl_optionsavalidate_certaca_certsaclient_certaclient_keya_client_ssl_defaultsasslacreate_default_contextaPurposeaSERVER_AUTHTacafileacheck_hostnameaCERT_NONEaverify_modeaload_cert_chainaOP_NO_COMPRESSIONassl_ctxaoptionsuTimeout callback of _HTTPConnection instance.

        Raise a `HTTPTimeoutError` when a timeout occurs.

        :info string key: More detailed timeout information.
        aset_nodelayaHTTP1ConnectionaHTTP1ConnectionParametersTano_keep_aliveamax_header_sizeamax_body_sizeadecompressawriteafinishastart_readaStreamClosedErroru_HTTPConnection._write_bodya_releaseareal_erroraHTTPStreamClosedErrorTuStream closeda_run_callbackTaerrorarequest_timeastart_timeaerrorTuConnection closedafirst_lineaResponseStartLineldTFareasona_should_follow_redirectaheader_callbacku%s %s %s
aget_allu%s: %s
Tu
aheaders_receivedu_HTTPConnection.headers_receivedafollow_redirectsamax_redirectsTl-l.l/l3l4TaLocationcajoinaoriginal_requesta_RequestProxyacopyaurljoinaLocationll/aHEADTl-l.aGETTuContent-LengthuContent-TypeuContent-EncodinguTransfer-EncodingafetchDaraise_errorFaadd_done_callbacku_HTTPConnection.finish.<locals>.<lambda>a_on_end_requestastreaming_callbackaBytesIOTareasonaheadersarequest_timeastart_timeabufferaeffective_urla__doc__u/usr/local/lib/python3.8/dist-packages/tornado/simple_httpclient.pya__file__a__spec__aoriginahas_locationa__cached__utornado.escapeTa_unicodeatornadoTagenaversionutornado.httpclientTaHTTPResponseaHTTPErroraAsyncHTTPClientamaina_RequestProxyaHTTPRequestaHTTPErroraAsyncHTTPClientamainaHTTPRequestTahttputilutornado.http1connectionTaHTTP1ConnectionaHTTP1ConnectionParametersutornado.ioloopTaIOLooputornado.iostreamTaStreamClosedErroraIOStreamaIOStreamutornado.netutilTaResolveraOverrideResolvera_client_ssl_defaultsais_valid_iputornado.logTagen_logutornado.tcpclientTaTCPClientuurllib.parseaDictaAnyaCallableaOptionalaTypeaUnionaTracebackTypeatypingametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>utornado.simple_httpclienta__module__uError raised by SimpleAsyncHTTPClient on timeout.

    For historical reasons, this is a subclass of `.HTTPClientError`
    which simulates a response code of 599.

    .. versionadded:: 5.1
    a__qualname__astrareturnuHTTPTimeoutError.__init__a__str__uHTTPTimeoutError.__str__a__orig_bases__uError raised by SimpleAsyncHTTPClient when the underlying stream is closed.

    When a more specific exception is available (such as `ConnectionResetError`),
    it may be raised instead of this one.

    For historical reasons, this is a subclass of `.HTTPClientError`
    which simulates a response code of 599.

    .. versionadded:: 5.1
    uHTTPStreamClosedError.__init__uHTTPStreamClosedError.__str__aSimpleAsyncHTTPClientuNon-blocking HTTP client with no external dependencies.

    This class implements an HTTP 1.1 client on top of Tornado's IOStreams.
    Some features found in the curl-based AsyncHTTPClient are not yet
    supported.  In particular, proxies are not supported, connections
    are not reused, and callers cannot select the network interface to be
    used.

    This implementation supports the following arguments, which can be passed
    to ``configure()`` to control the global singleton, or to the constructor
    when ``force_instance=True``.

    ``max_clients`` is the number of concurrent requests that can be
    in progress; when this limit is reached additional requests will be
    queued. Note that time spent waiting in this queue still counts
    against the ``request_timeout``.

    ``defaults`` is a dict of parameters that will be used as defaults on all
    `.HTTPRequest` objects submitted to this client.

    ``hostname_mapping`` is a dictionary mapping hostnames to IP addresses.
    It can be used to make local DNS changes when modifying system-wide
    settings like ``/etc/hosts`` is not possible or desirable (e.g. in
    unittests). ``resolver`` is similar, but using the `.Resolver` interface
    instead of a simple mapping.

    ``max_buffer_size`` (default 100MB) is the number of bytes
    that can be read into memory at once. ``max_body_size``
    (defaults to ``max_buffer_size``) is the largest response body
    that the client will accept.  Without a
    ``streaming_callback``, the smaller of these two limits
    applies; with a ``streaming_callback`` only ``max_body_size``
    does.

    .. versionchanged:: 4.2
        Added the ``max_body_size`` argument.
    Tl
nl@nnnnaintahostname_mappingadefaultsuSimpleAsyncHTTPClient.initializeDareturnnuSimpleAsyncHTTPClient.closeacallbackafetch_impluSimpleAsyncHTTPClient.fetch_impluSimpleAsyncHTTPClient._process_queueatypeuSimpleAsyncHTTPClient._connection_classTLnuSimpleAsyncHTTPClient._handle_requestakeyaobjectuSimpleAsyncHTTPClient._release_fetchuSimpleAsyncHTTPClient._remove_timeoutTnainfouSimpleAsyncHTTPClient._on_timeoutaHTTPMessageDelegateasetLaGETaHEADaPOSTaPUTaDELETEaPATCHaOPTIONSSaGETaPUTaDELETEaHEADaPATCHaOPTIONSaPOSTu_HTTPConnection.__init__aSSLContextu_HTTPConnection._get_ssl_optionsu_HTTPConnection._on_timeoutu_HTTPConnection._remove_timeoutu_HTTPConnection._create_connectionaboolu_HTTPConnection._releasearesponseu_HTTPConnection._run_callbackatypuOptional[Type[BaseException]]avalueaBaseExceptionatbu_HTTPConnection._handle_exceptionu_HTTPConnection.on_connection_closeaHTTPHeadersu_HTTPConnection._should_follow_redirectu_HTTPConnection.finishu_HTTPConnection._on_end_requestachunkabytesadata_receivedu_HTTPConnection.data_receivedTwfTwfafinal_callbackTafinal_callbacku<module tornado.simple_httpclient>Ta__class__T	aselfaclientarequestarelease_callbackafinal_callbackamax_buffer_sizeatcp_clientamax_header_sizeamax_body_sizeTaselfamessagea__class__TaselfTaselfastreamaconnectionTaselfaschemeassl_ctxTaselfatypavalueatbTaselfarequestarelease_callbackafinal_callbackTaselfainfoaerror_messageTaselfakeyainfoarequestacallbackatimeout_handleaerror_messageatimeout_responseTaselfakeyarequestacallbackarelease_callbackTaselfarelease_callbackTaselfakeyTaselfakeyarequestacallbackatimeout_handleTaselfaresponseafinal_callbackTaselfastart_readafutTaselfa__class__TaselfachunkTaselfarequestacallbackakeyatimeout_handleatimeoutT	aselfadataaoriginal_requestanew_requestwhafinal_callbackafutabufferaresponseTaselfafirst_lineaheaderswkwvT	aselfamax_clientsahostname_mappingamax_buffer_sizearesolveradefaultsamax_header_sizeamax_body_sizea__class__TaselfamessageTaselfanetlocauserpassw_ahostaportaafassl_optionsasource_ipatimeoutastreamakeyausernameapasswordabody_expectedabody_presentareq_pathastart_line.tornado.tcpclient=�aIOLoopacurrentaio_loopaconnectaFutureafutureatimeoutaconnect_timeoutalast_erroraremainingasplitutoo many values to unpack (expected 2)aprimary_addrsasecondary_addrsastreamslaprimaryaappendasecondaryuPartition the ``addrinfo`` list by address family.

        Returns two lists.  The first list contains the first entry from
        ``addrinfo`` and all others with the same family, and the
        second list contains all other addresses (normally one list will
        be AF_INET and the other AF_INET6, although non-standard resolvers
        may return additional families).
        atry_connectaset_timeoutaset_connect_timeoutadoneaset_exceptionuconnection failedaaddafuture_add_done_callbackapartialaon_connect_donelaresultaremove_timeoutaon_timeoutaclear_timeoutsacloseadiscardaset_resultaclose_streamsaadd_timeoutatimeaon_connect_timeoutaTimeoutErroraresolvera_own_resolveraResolveruConnect to the given host and port.

        Asynchronously returns an `.IOStream` (or `.SSLIOStream` if
        ``ssl_options`` is not None).

        Using the ``source_ip`` kwarg, one can specify the source
        IP address to use when establishing the connection.
        In case the user needs to resolve and
        use a specific interface, it has to be handled outside
        of Tornado as this depends very much on the platform.

        Raises `TimeoutError` if the input future does not complete before
        ``timeout``, which may be specified in any form allowed by
        `.IOLoop.add_timeout` (i.e. a `datetime.timedelta` or an absolute time
        relative to `.IOLoop.time`)

        Similarly, when the user requires a certain source port, it can
        be specified using the ``source_port`` arg.

        .. versionchanged:: 4.5
           Added the ``source_ip`` and ``source_port`` arguments.

        .. versionchanged:: 5.0
           Added the ``timeout`` argument.
        anumbersaRealadatetimeatimedeltaatotal_secondsuUnsupported timeout %ragenawith_timeoutaselfaresolveahostaportaafa_Connectora_create_streamamax_buffer_sizeasource_ipasource_portTasource_ipasource_portastartTaconnect_timeoututoo many values to unpack (expected 3)assl_optionsastart_tlsTFTassl_optionsaserver_hostnameuTCPClient.connectasocketaAF_INET6u::1u127.0.0.1abindaerroraIOStreamasocket_objTamax_buffer_sizeulocal variable 'stream' referenced before assignmentuA non-blocking TCP connection factory.
a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/tcpclient.pya__file__a__spec__aoriginahas_locationa__cached__afunctoolsasslutornado.concurrentTaFutureafuture_add_done_callbackutornado.ioloopTaIOLooputornado.iostreamTaIOStreamatornadoTagenutornado.netutilTaResolverutornado.genTaTimeoutErroraAnyaUnionaDictaTupleaListaCallableaIteratoraOptionalaSetf333333�?a_INITIAL_CONNECT_TIMEOUTTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>utornado.tcpclienta__module__uA stateless implementation of the "Happy Eyeballs" algorithm.

    "Happy Eyeballs" is documented in RFC6555 as the recommended practice
    for when both IPv4 and IPv6 addresses are available.

    In this implementation, we partition the addresses by family, and
    make the first connection attempt to whichever address was
    returned first by ``getaddrinfo``.  If that connection fails or
    times out, we begin a connection in parallel to the first address
    of the other family.  If there are additional failures we retry
    with other addresses, keeping one connection attempt per family
    in flight at a time.

    http://tools.ietf.org/html/rfc6555

    a__qualname__aaddrinfoaAddressFamilyuFuture[IOStream]areturna__init__u_Connector.__init__astaticmethodu_Connector.splitafloatuFuture[Tuple[socket.AddressFamily, Any, IOStream]]u_Connector.startaaddrsu_Connector.try_connectaaddru_Connector.on_connect_doneu_Connector.set_timeoutDareturnnu_Connector.on_timeoutaclear_timeoutu_Connector.clear_timeoutu_Connector.set_connect_timeoutu_Connector.on_connect_timeoutu_Connector.clear_timeoutsu_Connector.close_streamsa__orig_bases__aTCPClientuA non-blocking TCP connection factory.

    .. versionchanged:: 5.0
       The ``io_loop`` argument (deprecated since version 4.1) has been removed.
    TnuTCPClient.__init__uTCPClient.closeaAF_UNSPECastraintaSSLContextTnnuTCPClient._create_streamu<module tornado.tcpclient>Ta__class__TaselfaaddrinfoaconnectTaselfaresolverTaselfamax_buffer_sizeaafaaddrasource_ipasource_portasource_port_bindasource_ip_bindasocket_objastreamweafuTaselfTaselfastreamT
aselfahostaportaafassl_optionsamax_buffer_sizeasource_ipasource_portatimeoutaaddrinfoaconnectoraaddrastreamTaselfaaddrsaafaaddrafutureastreamweTaselfaconnect_timeoutTaselfatimeoutTaaddrinfoaprimaryasecondaryaprimary_afaafaaddrTaselfatimeoutaconnect_timeoutTaselfaaddrsaafaaddrastreamafutureu.tornado.tcpserver2(�assl_optionsa_socketsa_handlersa_pending_socketsa_starteda_stoppedamax_buffer_sizearead_chunk_sizeacertfileumissing key "certfile" in ssl_optionsucertfile "%s" does not existakeyfileukeyfile "%s" does not existabind_socketsTaaddressafamilyabacklogaflagsareuse_portaadd_socketsuStarts accepting connections on the given port.

        This method may be called more than once to listen on multiple ports.
        `listen` takes effect immediately; it is not necessary to call
        `TCPServer.start` afterwards.  It is, however, necessary to start the
        event loop if it is not already running.

        All arguments have the same meaning as in
        `tornado.netutil.bind_sockets`.

        .. versionchanged:: 6.2

           Added ``family``, ``backlog``, ``flags``, and ``reuse_port``
           arguments to match `tornado.netutil.bind_sockets`.
        aselfafilenoaadd_accept_handlera_handle_connectionuMakes this server start accepting connections on the given sockets.

        The ``sockets`` parameter is a list of socket objects such as
        those returned by `~tornado.netutil.bind_sockets`.
        `add_sockets` is typically used in combination with that
        method and `tornado.process.fork_processes` to provide greater
        control over the initialization of a multi-process server.
        uSingular version of `add_sockets`.  Takes a single socket object.aextenduBinds this server to the given port on the given address.

        To start the server, call `start`. If you want to run this server in a
        single process, you can call `listen` as a shortcut to the sequence of
        `bind` and `start` calls.

        Address may be either an IP address or hostname.  If it's a hostname,
        the server will listen on all IP addresses associated with the name.
        Address may be an empty string or None to listen on all available
        interfaces.  Family may be set to either `socket.AF_INET` or
        `socket.AF_INET6` to restrict to IPv4 or IPv6 addresses, otherwise both
        will be used if available.

        The ``backlog`` argument has the same meaning as for `socket.listen
        <socket.socket.listen>`. The ``reuse_port`` argument has the same
        meaning as for `.bind_sockets`.

        This method may be called multiple times prior to `start` to listen on
        multiple ports or interfaces.

        .. versionchanged:: 4.4
           Added the ``reuse_port`` argument.

        .. versionchanged:: 6.2
           Added the ``flags`` argument to match `.bind_sockets`.

        .. deprecated:: 6.2
           Use either ``listen()`` or ``add_sockets()`` instead of ``bind()``
           and ``start()``. The ``bind()/start()`` pattern depends on
           interfaces that have been deprecated in Python 3.10 and will be
           removed in future versions of Python.
        laprocessafork_processesuStarts this server in the `.IOLoop`.

        By default, we run the server in this process and do not fork any
        additional child process.

        If num_processes is ``None`` or <= 0, we detect the number of cores
        available on this machine and fork that number of child
        processes. If num_processes is given and > 1, we fork that
        specific number of sub-processes.

        Since we use processes and not threads, there is no shared memory
        between any server code.

        Note that multiple processes are not compatible with the autoreload
        module (or the ``autoreload=True`` option to `tornado.web.Application`
        which defaults to True when ``debug=True``).
        When using multiple processes, no IOLoops can be created or
        referenced until after the call to ``TCPServer.start(n)``.

        Values of ``num_processes`` other than 1 are not supported on Windows.

        The ``max_restarts`` argument is passed to `.fork_processes`.

        .. versionchanged:: 6.0

           Added ``max_restarts`` argument.

        .. deprecated:: 6.2
           Use either ``listen()`` or ``add_sockets()`` instead of ``bind()``
           and ``start()``. The ``bind()/start()`` pattern depends on
           interfaces that have been deprecated in Python 3.10 and will be
           removed in future versions of Python.
        aitemsutoo many values to unpack (expected 2)apopacloseuStops listening for new connections.

        Requests currently in progress may still continue after the
        server is stopped.
        uOverride to handle a new `.IOStream` from an incoming connection.

        This method may be a coroutine; if so any exceptions it raises
        asynchronously will be logged. Accepting of incoming connections
        will not be blocked by this coroutine.

        If this `TCPServer` is configured for SSL, ``handle_stream``
        may be called before the SSL handshake has completed. Use
        `.SSLIOStream.wait_for_handshake` if you need to verify the client's
        certificate or use NPN/ALPN.

        .. versionchanged:: 4.2
           Added the option for this method to be a coroutine.
        asslTuPython 2.6+ and OpenSSL required for SSLassl_wrap_socketDaserver_sideado_handshake_on_connecttFaSSLErroraargslaSSL_ERROR_EOFasocketaerroraerrno_from_exceptionaerrnoaECONNABORTEDaEINVALaSSLIOStreamTamax_buffer_sizearead_chunk_sizeaIOStreamahandle_streamaIOLoopacurrentaadd_futureagenaconvert_yieldedu<lambda>uTCPServer._handle_connection.<locals>.<lambda>aapp_logTuError in connection callbacktTaexc_infoaresultuA non-blocking, single-threaded TCP server.a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/tcpserver.pya__file__a__spec__aoriginahas_locationa__cached__aosatornadoTagenutornado.logTaapp_logutornado.ioloopTaIOLooputornado.iostreamTaIOStreamaSSLIOStreamutornado.netutilTabind_socketsaadd_accept_handlerassl_wrap_socketa_DEFAULT_BACKLOGa_DEFAULT_BACKLOGTaprocessutornado.utilTaerrno_from_exceptionatypingaUnionaDictaAnyaIterableaOptionalaAwaitableTOobjectametaclassa__prepare__aTCPServera__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>utornado.tcpservera__module__uA non-blocking, single-threaded TCP server.

    To use `TCPServer`, define a subclass which overrides the `handle_stream`
    method. For example, a simple echo server could be defined like this::

      from tornado.tcpserver import TCPServer
      from tornado.iostream import StreamClosedError

      class EchoServer(TCPServer):
          async def handle_stream(self, stream, address):
              while True:
                  try:
                      data = await stream.read_until(b"\n") await
                      stream.write(data)
                  except StreamClosedError:
                      break

    To make this server serve SSL traffic, send the ``ssl_options`` keyword
    argument with an `ssl.SSLContext` object. For compatibility with older
    versions of Python ``ssl_options`` may also be a dictionary of keyword
    arguments for the `ssl.wrap_socket` method.::

       ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
       ssl_ctx.load_cert_chain(os.path.join(data_dir, "mydomain.crt"),
                               os.path.join(data_dir, "mydomain.key"))
       TCPServer(ssl_options=ssl_ctx)

    `TCPServer` initialization follows one of three patterns:

    1. `listen`: single-process::

            async def main():
                server = TCPServer()
                server.listen(8888)
                await asyncio.Event.wait()

            asyncio.run(main())

       While this example does not create multiple processes on its own, when
       the ``reuse_port=True`` argument is passed to ``listen()`` you can run
       the program multiple times to create a multi-process service.

    2. `add_sockets`: multi-process::

            sockets = bind_sockets(8888)
            tornado.process.fork_processes(0)
            async def post_fork_main():
                server = TCPServer()
                server.add_sockets(sockets)
                await asyncio.Event().wait()
            asyncio.run(post_fork_main())

       The `add_sockets` interface is more complicated, but it can be used with
       `tornado.process.fork_processes` to run a multi-process service with all
       worker processes forked from a single parent.  `add_sockets` can also be
       used in single-process servers if you want to create your listening
       sockets in some way other than `~tornado.netutil.bind_sockets`.

       Note that when using this pattern, nothing that touches the event loop
       can be run before ``fork_processes``.

    3. `bind`/`start`: simple **deprecated** multi-process::

            server = TCPServer()
            server.bind(8888)
            server.start(0)  # Forks multiple sub-processes
            IOLoop.current().start()

       This pattern is deprecated because it requires interfaces in the
       `asyncio` module that have been deprecated since Python 3.10. Support for
       creating multiple processes in the ``start`` method will be removed in a
       future version of Tornado.

    .. versionadded:: 3.1
       The ``max_buffer_size`` argument.

    .. versionchanged:: 5.0
       The ``io_loop`` argument has been removed.
    a__qualname__TnnnastraSSLContextaintareturna__init__uTCPServer.__init__aAF_UNSPECaportaaddressafamilyaAddressFamilyabacklogaflagsareuse_portaboolalistenuTCPServer.listenasocketsuTCPServer.add_socketsaadd_socketuTCPServer.add_socketabinduTCPServer.bindTlnanum_processesamax_restartsastartuTCPServer.startDareturnnastopuTCPServer.stopastreamatupleuTCPServer.handle_streamaconnectionuTCPServer._handle_connectiona__orig_bases__Twfu<module tornado.tcpserver>Ta__class__Taselfassl_optionsamax_buffer_sizearead_chunk_sizeTaselfaconnectionaaddressaerrastreamafutureTaselfasocketTaselfasocketsasockTaselfaportaaddressafamilyabacklogaflagsareuse_portasocketsTaselfastreamaaddressTaselfanum_processesamax_restartsasocketsTaselfafdasocku.tornado.template/D�aallasingleareasubu([\t ]+)w u(\s*\n\s*)w
aonelineu(\s+)uinvalid whitespace mode %suTransform whitespace in ``text`` according to ``mode``.

    Available modes are:

    * ``all``: Return all whitespace unmodified.
    * ``single``: Collapse consecutive whitespace with a single whitespace
      character, preserving newlines.
    * ``oneline``: Collapse all runs of whitespace into a single space
      character, removing all newlines in the process.

    .. versionadded:: 4.3
    aescapeanative_stranamea_UNSETucannot set both whitespace and compress_whitespaceawhitespacealoaderaendswithTu.htmlTu.jsafilter_whitespaceua_UnsetMarkeraautoescapea_DEFAULT_AUTOESCAPEanamespacea_TemplateReadera_Filea_parseafilea_generate_pythonacodeato_unicodeu%s.generated.pyareplaceTw.w_aexecacompileda_format_codearstripaapp_logaerroru%s code:
%suConstruct a Template.

        :arg str template_string: the contents of the template file.
        :arg str name: the filename from which the template was loaded
            (used for error message).
        :arg tornado.template.BaseLoader loader: the `~tornado.template.BaseLoader` responsible
            for this template, used to resolve ``{% include %}`` and ``{% extend %}`` directives.
        :arg bool compress_whitespace: Deprecated since Tornado 4.3.
            Equivalent to ``whitespace="single"`` if true and
            ``whitespace="all"`` if false.
        :arg str autoescape: The name of a function in the template
            namespace, or ``None`` to disable escaping by default.
        :arg str whitespace: A string specifying treatment of whitespace;
            see `filter_whitespace` for options.

        .. versionchanged:: 4.3
           Added ``whitespace`` parameter; deprecated ``compress_whitespace``.
        axhtml_escapeaurl_escapeajson_encodeasqueezealinkifyadatetimea_tt_utf8autf8a_tt_string_typesaunicode_typea__name__a__loader__aObjectDictu<lambda>uTemplate.generate.<locals>.<lambda>Taget_sourceaupdateaexec_inatypingacastaCallableTLObytesa_tt_executealinecacheaclearcacheuGenerate this template with the given arguments.aselfaStringIOa_get_ancestorsareverseafind_named_blocksanamed_blocksa_CodeWriterlatemplateagenerateagetvalueacloseabodyachunksa_ExtendsBlockaParseErrorTu{% extends %} block found, but no template loaderaloadaancestorsaextendatemplatesathreadingaRLockalockuConstruct a template loader.

        :arg str autoescape: The name of a function in the template
            namespace, such as "xhtml_escape", or ``None`` to disable
            autoescaping by default.
        :arg dict namespace: A dictionary to be added to the default template
            namespace, or ``None``.
        :arg str whitespace: A string specifying default behavior for
            whitespace in templates; see `filter_whitespace` for options.
            Default is "single" for files ending in ".html" and ".js" and
            "all" for other files.

        .. versionchanged:: 4.3
           Added ``whitespace`` parameter.
        a__enter__a__exit__TnnnuResets the cache of compiled templates.uConverts a possibly-relative path to absolute (used internally).aresolve_pathTaparent_patha_create_templateuLoads a template.a__class__a__init__aosapathaabspatharootastartswithTw<Tw/ajoinaparent_pathadirnamearbaTemplateareadTanamealoaderadictaposixpathanormpathaeach_childalineawrite_lineudef _tt_execute():aindentu_tt_buffer = []u_tt_append = _tt_buffer.appendureturn _tt_utf8('').join(_tt_buffer)awriteraincludea_Nodeatemplate_nameamethodu_tt_apply%daapply_counterludef %s():u_tt_append(_tt_utf8(%s(%s())))astatementu%s:apassaindent_sizeaexpressionarawu_tt_tmp = %suif isinstance(_tt_tmp, _tt_string_types): _tt_tmp = _tt_utf8(_tt_tmp)uelse: _tt_tmp = _tt_utf8(str(_tt_tmp))acurrent_templateu_tt_tmp = _tt_utf8(%s(_tt_tmp))u_tt_append(_tt_tmp)u_tt_modules.Darawtavalueu<pre>u_tt_append(%r)amessageafilenamealinenou%s at %s:%dainclude_stacka_indentTOobjectametaclassa__prepare__aIndentera__getitem__u%s.__prepare__() must return a mapping, not %su<metaclass>utornado.templatea__module__u_CodeWriter.indent.<locals>.Indentera__qualname__Dareturna_CodeWriteru_CodeWriter.indent.<locals>.Indenter.__enter__aargsaAnyareturnu_CodeWriter.indent.<locals>.Indenter.__exit__a__orig_bases__aappendaIncludeTemplateu_CodeWriter.include.<locals>.IncludeTemplateu_CodeWriter.include.<locals>.IncludeTemplate.__enter__u_CodeWriter.include.<locals>.IncludeTemplate.__exit__apopu  # %s:%dutoo many values to unpack (expected 2)u%s:%du (via %s)u, aprintu    Tafileatextaposafindl��������acountaremainingaindicesutoo many values to unpack (expected 3)asplitlinesu%%%dd  %%s
aformata_ChunkListareaderw{acurlyaraise_parse_erroruMissing {%% end %%} block for %sa_TextaconsumeTw{w%w#lTlw!Tlu{#Tu#}TuMissing end comment #}astripu{{Tu}}TuMissing end expression }}TuEmpty expressiona_Expressionu{%Tu%}TuMissing end block %}TuEmpty block tag ({% %})apartitionTw DaelseaelifaexceptafinallySaforatryawhileaifSaifSatrySatryu%s outside %s blocku%s block cannot be attached to %s blocka_IntermediateControlBlockaendTuExtra {% end %} blockT
aextendsaincludeasetaimportafromacommentaautoescapeawhitespacearawamoduleacommentaextendsTw"Tw'Tuextends missing file pathTaimportafromTuimport missing statementa_StatementTuinclude missing file patha_IncludeBlockasetTuset missing statementaNoneamodulea_ModuleablockTaapplyablockatryaifaforawhileTaforawhileaapplyain_loopaoperatorTuapply missing method namea_ApplyBlockTublock missing namea_NamedBlocka_ControlBlockTabreakacontinueSaforawhileuunknown operator: %ruA simple template system that compiles templates to Python code.

Basic usage looks like::

    t = template.Template("<html>{{ myvalue }}</html>")
    print(t.generate(myvalue="XXX"))

`Loader` is a class that loads templates from a root directory and caches
the compiled templates::

    loader = template.Loader("/home/btaylor")
    print(loader.load("test.html").generate(myvalue="XXX"))

We compile all templates to raw Python. Error-reporting is currently... uh,
interesting. Syntax for the templates::

    ### base.html
    <html>
      <head>
        <title>{% block title %}Default title{% end %}</title>
      </head>
      <body>
        <ul>
          {% for student in students %}
            {% block student %}
              <li>{{ escape(student.name) }}</li>
            {% end %}
          {% end %}
        </ul>
      </body>
    </html>

    ### bold.html
    {% extends "base.html" %}

    {% block title %}A bolder title{% end %}

    {% block student %}
      <li><span style="bold">{{ escape(student.name) }}</span></li>
    {% end %}

Unlike most other template systems, we do not put any restrictions on the
expressions you can include in your statements. ``if`` and ``for`` blocks get
translated exactly into Python, so you can do complex expressions like::

   {% for student in [p for p in people if p.student and p.age > 23] %}
     <li>{{ escape(student.name) }}</li>
   {% end %}

Translating directly to Python means you can apply functions to expressions
easily, like the ``escape()`` function in the examples above. You can pass
functions in to your template just like any other variable
(In a `.RequestHandler`, override `.RequestHandler.get_template_namespace`)::

   ### Python code
   def add(x, y):
      return x + y
   template.execute(add=add)

   ### The template
   {{ add(1, 2) }}

We provide the functions `escape() <.xhtml_escape>`, `.url_escape()`,
`.json_encode()`, and `.squeeze()` to all templates by default.

Typical applications do not create `Template` or `Loader` instances by
hand, but instead use the `~.RequestHandler.render` and
`~.RequestHandler.render_string` methods of
`tornado.web.RequestHandler`, which load templates automatically based
on the ``template_path`` `.Application` setting.

Variable names beginning with ``_tt_`` are reserved by the template
system and should not be used by application code.

Syntax Reference
----------------

Template expressions are surrounded by double curly braces: ``{{ ... }}``.
The contents may be any python expression, which will be escaped according
to the current autoescape setting and inserted into the output.  Other
template directives use ``{% %}``.

To comment out a section so that it is omitted from the output, surround it
with ``{# ... #}``.


To include a literal ``{{``, ``{%``, or ``{#`` in the output, escape them as
``{{!``, ``{%!``, and ``{#!``, respectively.


``{% apply *function* %}...{% end %}``
    Applies a function to the output of all template code between ``apply``
    and ``end``::

        {% apply linkify %}{{name}} said: {{message}}{% end %}

    Note that as an implementation detail apply blocks are implemented
    as nested functions and thus may interact strangely with variables
    set via ``{% set %}``, or the use of ``{% break %}`` or ``{% continue %}``
    within loops.

``{% autoescape *function* %}``
    Sets the autoescape mode for the current file.  This does not affect
    other files, even those referenced by ``{% include %}``.  Note that
    autoescaping can also be configured globally, at the `.Application`
    or `Loader`.::

        {% autoescape xhtml_escape %}
        {% autoescape None %}

``{% block *name* %}...{% end %}``
    Indicates a named, replaceable block for use with ``{% extends %}``.
    Blocks in the parent template will be replaced with the contents of
    the same-named block in a child template.::

        <!-- base.html -->
        <title>{% block title %}Default title{% end %}</title>

        <!-- mypage.html -->
        {% extends "base.html" %}
        {% block title %}My page title{% end %}

``{% comment ... %}``
    A comment which will be removed from the template output.  Note that
    there is no ``{% end %}`` tag; the comment goes from the word ``comment``
    to the closing ``%}`` tag.

``{% extends *filename* %}``
    Inherit from another template.  Templates that use ``extends`` should
    contain one or more ``block`` tags to replace content from the parent
    template.  Anything in the child template not contained in a ``block``
    tag will be ignored.  For an example, see the ``{% block %}`` tag.

``{% for *var* in *expr* %}...{% end %}``
    Same as the python ``for`` statement.  ``{% break %}`` and
    ``{% continue %}`` may be used inside the loop.

``{% from *x* import *y* %}``
    Same as the python ``import`` statement.

``{% if *condition* %}...{% elif *condition* %}...{% else %}...{% end %}``
    Conditional statement - outputs the first section whose condition is
    true.  (The ``elif`` and ``else`` sections are optional)

``{% import *module* %}``
    Same as the python ``import`` statement.

``{% include *filename* %}``
    Includes another template file.  The included file can see all the local
    variables as if it were copied directly to the point of the ``include``
    directive (the ``{% autoescape %}`` directive is an exception).
    Alternately, ``{% module Template(filename, **kwargs) %}`` may be used
    to include another template with an isolated namespace.

``{% module *expr* %}``
    Renders a `~tornado.web.UIModule`.  The output of the ``UIModule`` is
    not escaped::

        {% module Template("foo.html", arg=42) %}

    ``UIModules`` are a feature of the `tornado.web.RequestHandler`
    class (and specifically its ``render`` method) and will not work
    when the template system is used on its own in other contexts.

``{% raw *expr* %}``
    Outputs the result of the given expression without autoescaping.

``{% set *x* = *y* %}``
    Sets a local variable.

``{% try %}...{% except %}...{% else %}...{% finally %}...{% end %}``
    Same as the python ``try`` statement.

``{% while *condition* %}... {% end %}``
    Same as the python ``while`` statement.  ``{% break %}`` and
    ``{% continue %}`` may be used inside the loop.

``{% whitespace *mode* %}``
    Sets the whitespace mode for the remainder of the current file
    (or until the next ``{% whitespace %}`` directive). See
    `filter_whitespace` for available options. New in Tornado 4.3.
a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/template.pya__file__a__spec__aoriginahas_locationa__cached__uos.pathatornadoTaescapeutornado.logTaapp_logutornado.utilTaObjectDictaexec_inaunicode_typeaUnionaListaDictaIterableaOptionalaTextIOTTa_UnsetMarkerTDamodeatextareturnOstrppuA compiled template.

    We compile into Python from the given template_string. You can generate
    the template from variables with generate().
    u<string>atemplate_stringastrabytesaBaseLoaderacompress_whitespaceabooluTemplate.__init__akwargsuTemplate.generateuTemplate._generate_pythonuTemplate._get_ancestorsuBase class for template loaders.

    You must use a template loader to use template constructs like
    ``{% extends %}`` and ``{% include %}``. The loader caches all
    templates after they are loaded the first time.
    uBaseLoader.__init__DareturnnaresetuBaseLoader.resetTnuBaseLoader.resolve_pathuBaseLoader.loaduBaseLoader._create_templateaLoaderuA template loader that loads from a single root directory.aroot_directoryuLoader.__init__uLoader.resolve_pathuLoader._create_templateaDictLoaderuA template loader that loads from a dictionary.uDictLoader.__init__uDictLoader.resolve_pathuDictLoader._create_templateu_Node.each_childDawriterareturna_CodeWriternu_Node.generateu_Node.find_named_blocksu_File.__init__u_File.generateu_File.each_childu_ChunkList.__init__u_ChunkList.generateu_ChunkList.each_childaintu_NamedBlock.__init__u_NamedBlock.each_childu_NamedBlock.generateu_NamedBlock.find_named_blocksu_ExtendsBlock.__init__u_IncludeBlock.__init__u_IncludeBlock.find_named_blocksu_IncludeBlock.generateu_ApplyBlock.__init__u_ApplyBlock.each_childu_ApplyBlock.generateu_ControlBlock.__init__u_ControlBlock.each_childu_ControlBlock.generateu_IntermediateControlBlock.__init__u_IntermediateControlBlock.generateu_Statement.__init__u_Statement.generateTFu_Expression.__init__u_Expression.generateu_Module.__init__u_Text.__init__u_Text.generateTEExceptionuRaised for template syntax errors.

    ``ParseError`` instances have ``filename`` and ``lineno`` attributes
    indicating the position of the error.

    .. versionchanged:: 4.3
       Added ``filename`` and ``lineno`` attributes.
    TnluParseError.__init__a__str__uParseError.__str__u_CodeWriter.__init__u_CodeWriter.indent_sizeDareturnaContextManageru_CodeWriter.indentaContextManageru_CodeWriter.includealine_numberu_CodeWriter.write_lineu_TemplateReader.__init__Tlnaneedleastartu_TemplateReader.findu_TemplateReader.consumeu_TemplateReader.remaininga__len__u_TemplateReader.__len__akeyasliceu_TemplateReader.__getitem__u_TemplateReader.__str__amsgu_TemplateReader.raise_parse_errorDacodeareturnOstrpTnnain_blockTanameaselfTaselfu<listcomp>TwialineaformatTatmplalinenou<module tornado.template>Ta__class__Tw_aselfTw_aargsaselfTaselfakeyasizeastartastopastepTaselfaautoescapeanamespaceawhitespaceTaselfachunksTaselfadictakwargsa__class__Taselfaexpressionalinea__class__TaselfaexpressionalinearawTaselfafileanamed_blocksaloaderacurrent_templateTaselfamessageafilenamealinenoTaselfamethodalineabodyTaselfanameTaselfanameabodyatemplatealineTaselfanameareaderalineTaselfanameatextawhitespaceTaselfaroot_directoryakwargsa__class__TaselfastatementalineTaselfastatementalineabodyTaselfatemplateabodyT	aselfatemplate_stringanamealoaderacompress_whitespaceaautoescapeawhitespaceareaderaformatted_codeTaselfavaluealineawhitespaceTaselfanameapathwfatemplateTacodealinesaformatTaselfaloaderabufferanamed_blocksaancestorsaancestorawriterTaselfaloaderaancestorsachunkatemplateTareaderatemplateain_blockain_loopabodyacurlyaconsastart_bracealineaendacontentsaoperatoraspaceasuffixaintermediate_blocksaallowed_parentsablockafnamodeablock_bodyTaselfacountanewposwsTamodeatextTaselfaneedleastartaendaposaindexTaselfaloaderanamed_blocksTaselfaloaderanamed_blocksachildTaselfaloaderanamed_blocksaincludedTaselfakwargsanamespaceaexecuteTaselfawriterTaselfawriterablockTaselfawriterachunkTaselfawriteraincludedTaselfawriteramethod_nameTaselfawriteravalueTaselfatemplatealineaIncludeTemplateTaselfaIndenterTaselfanameaparent_pathTaselfamsgTaselfanameaparent_pathacurrent_pathafile_dirarelative_pathTaselfanameaparent_pathafile_dirTaselfalinealine_numberaindentaline_commentaancestors.tornado.util#"�aatexitaregisteru<lambda>u_get_emulated_is_finalizing.<locals>.<lambda>DareturnOboolais_finalizingu_get_emulated_is_finalizing.<locals>.is_finalizingwLaappendTnazlibadecompressobjlaMAX_WBITSadecompressuDecompress a chunk, returning newly-available data.

        Some data may be buffered for later processing; `flush` must
        be called when there is no more input data to ensure that
        all data was processed.

        If ``max_length`` is given, some input data may be left over
        in ``unconsumed_tail``; you must retrieve this value and pass
        it back to a future call to `decompress` if it is not empty.
        aunconsumed_tailuReturns the unconsumed portion left overaflushuReturn any remaining buffered data not yet returned by decompress.

        Also checks for errors such as truncated input.
        No other methods may be called on this object after `flush`.
        acountTw.lasplitw.:nl��������nl��������uNo module named %suImports an object by name.

    ``import_object('x')`` is equivalent to ``import x``.
    ``import_object('x.y.z')`` is equivalent to ``from x.y import z``.

    >>> import tornado.escape
    >>> import_object('tornado.escape') is tornado.escape
    True
    >>> import_object('tornado.escape.utf8') is tornado.escape.utf8
    True
    >>> import_object('tornado') is tornado
    True
    >>> import_object('tornado.missing_module')
    Traceback (most recent call last):
        ...
    ImportError: No module named missing_module
    u<string>aexecacodeaglobaloclawith_tracebackluraise_exc_info called with no exceptionaerrnoaargsuProvides the errno from an Exception object.

    There are cases that the errno attribute was not set so we pull
    the errno out of the args but if someone instantiates an Exception
    without any args you will get a tuple error. So this function
    abstracts all that behavior to give you a safe way to get the
    errno.
    agroupTla_alphanumucannot unescape '\\%s'a_re_unescape_patternasuba_re_unescape_replacementuUnescape a string escaped by `re.escape`.

    May raise ``ValueError`` for regular expressions which could not
    have been produced by `re.escape` (for example, strings containing
    ``\d`` cannot be unescaped).

    .. versionadded:: 4.4
    aconfigurable_baseaconfigured_classa_Configurable__impl_kwargsainit_kwargsaupdateaConfigurablea__new__ainitializeuReturns the base class of a configurable hierarchy.

        This will normally return the class in which it is defined.
        (which is *not* necessarily the same as the ``cls`` classmethod
        parameter).

        uReturns the implementation class to be used if none is configured.atypingacastaTypeaimport_objectuInvalid subclass of %sa_Configurable__impl_classuSets the class to use when the base class is instantiated.

        Keyword arguments will be saved and added to the arguments passed
        to the constructor.  This can be used to set global defaults for
        some parameters.
        agetTa_Configurable__impl_classaconfigurable_defaultuconfigured class not founduReturns the currently configured class.anamea_getargnamesaindexaarg_posagetfullargspecafunc_codeaco_varnamesaco_argcountuReturns the old value of the named argument without replacing it.

        Returns ``default`` if the argument is not present.
        akwargsuReplace the named argument in ``args, kwargs`` with ``new_value``.

        Returns ``(old_value, args, kwargs)``.  The returned ``args`` and
        ``kwargs`` objects may not be the same as the input objects, or
        the input objects may be mutated.

        If the named argument was not found, ``new_value`` will be added
        to ``kwargs`` and None will be returned as ``old_value``.
        atotal_secondsuEquivalent to ``td.total_seconds()`` (introduced in Python 2.7).aarraywBaunmasked_arrlatobytesuWebsocket masking function.

    `mask` is a `bytes` object of length 4; `data` is a `bytes` object of any length.
    Returns a `bytes` object of the same length as `data` with the mask applied
    as specified in section 5.3 of RFC 6455.

    This pure-python implementation may be replaced by an optimized version when available.
    uMiscellaneous utility functions and classes.

This module is used internally by Tornado.  It is not necessarily expected
that the functions and classes defined here will be useful to other
applications, but they are documented here in case they are.

The one public-facing part of this module is the `Configurable` class
and its `~Configurable.configure` method, which becomes a part of the
interface of its subclasses, including `.AsyncHTTPClient`, `.IOLoop`,
and `.Resolver`.
a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/util.pya__file__a__spec__aoriginahas_locationa__cached__aasyncioainspectTagetfullargspecaosareaAnyaOptionalaDictaMappingaListaTupleaMatchaCallableaSequenceabytes_typeaunicode_typeabasestring_typeareturnTLOboola_get_emulated_is_finalizingaTimeoutErrorametaclassa__prepare__aObjectDicta__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>utornado.utila__module__uMakes a dictionary behave like an object, with attribute-style access.a__qualname__astra__getattr__uObjectDict.__getattr__avaluea__setattr__uObjectDict.__setattr__a__orig_bases__TOobjectaGzipDecompressoruStreaming gzip decompressor.

    The interface is like that of `zlib.decompressobj` (without some of the
    optional arguments, but it understands gzip headers and checksums.
    Dareturnna__init__uGzipDecompressor.__init__Tlabytesamax_lengthaintuGzipDecompressor.decompressapropertyuGzipDecompressor.unconsumed_tailuGzipDecompressor.flushaexec_inaexc_infoaTracebackTypeaNoReturnaraise_exc_infoweaerrno_from_exceptionP>wMwFwxwiwrwYw2wpwdw8wXwcwKwQwDwywlwEwSwOw3whwmwHwPwBwUwJwzwVwAw6wkwIwLw5wowaw0wZw7wgw1wTwfwuwewGwWwwwRwnwbwqwjwtwswNw4w9wvwCamatchacompileu\\(.)aDOTALLDwsareturnOstrpare_unescapeuBase class for configurable interfaces.

    A configurable interface is an (abstract) class whose constructor
    acts as a factory function for one of its implementation subclasses.
    The implementation subclass as well as optional keyword arguments to
    its initializer can be set globally at runtime with `configure`.

    By using the constructor as the factory method, the interface
    looks like a normal class, `isinstance` works as usual, etc.  This
    pattern is most useful when the choice of implementation is likely
    to be a global decision (e.g. when `~select.epoll` is available,
    always use it instead of `~select.select`), or when a
    previously-monolithic class has been split into specialized
    subclasses.

    Configurable subclasses must define the class methods
    `configurable_base` and `configurable_default`, and use the instance
    method `initialize` instead of ``__init__``.

    .. versionchanged:: 5.0

       It is now possible for configuration to be specified at
       multiple levels of a class hierarchy.

    uConfigurable.__new__aclassmethoduConfigurable.configurable_baseuConfigurable.configurable_defaulta_initializeuConfigurable._initializeaconfigureuConfigurable.configureuConfigurable.configured_classa_save_configurationuConfigurable._save_configurationa_restore_configurationuConfigurable._restore_configurationaArgReplaceruReplaces one value in an ``args, kwargs`` pair.

    Inspects the function signature to find an argument by name
    whether it is passed by position or keyword.  For use in decorators
    and similar wrappers.
    afuncuArgReplacer.__init__uArgReplacer._getargnamesadefaultaget_old_valueuArgReplacer.get_old_valueanew_valueareplaceuArgReplacer.replaceatimedelta_to_secondsDamaskadataareturnObytesppa_websocket_mask_pythonaenvironTaTORNADO_NO_EXTENSIONTaTORNADO_EXTENSIONw0a_websocket_maskutornado.speedupsTawebsocket_maskawebsocket_maskw1adoctestsTwLu<module tornado.util>Ta__class__TaselfanameTaselfTaselfafuncanameTaclsaargsakwargsabaseainit_kwargsaimplainstancea__class__TaselfanameavalueTwLais_finalizingTaselfafuncacodeTamatchagroupTaclsasavedabaseTaclsabaseTamaskadataamask_arraunmasked_arrwiTaclsTaclsaimplakwargsabaseTaselfavalueamax_lengthTweTacodeaglobalocTaselfaargsakwargsadefaultTanameapartsaobjTaexc_infoTwsTaselfanew_valueaargsakwargsaold_valueTatdu.tornado.web�!a__class__a__init__aapplicationarequesta_headers_writtena_finisheda_auto_finisha_prepared_futureaObjectDictaui_methodsaitemsauia_UIModuleNamespaceaui_modulesa_tt_modulesamodulesaclearaconnectionaset_close_callbackaon_connection_closeainitializeutoo many values to unpack (expected 2)aselfa_ui_methodu<genexpr>uRequestHandler.__init__.<locals>.<genexpr>asettingsuAn alias for `self.application.settings <Application.settings>`.aHTTPErrorTl�a_has_stream_request_bodya_body_futureadoneaset_exceptionaiostreamaStreamClosedErroraexceptionuCalled in async handlers if the client closed the connection.

        Override this to clean up resources associated with
        long-lived connections.  Note that this method is called only if
        the connection was closed during asynchronous processing; if you
        need to do cleanup after every request override `on_finish`
        instead.

        Proxies may keep a connection open for a time (perhaps
        indefinitely) after the client has gone away, so this method
        may not be called promptly after the end user closes their
        connection.
        ahttputilaHTTPHeadersaServeruTornadoServer/%satornadoaversionuContent-Typeutext/html; charset=UTF-8aDateaformat_timestampatimea_headersaset_default_headersa_write_bufferl�a_status_codearesponsesa_reasonuResets all headers and content for this response.aescapeanative_stragetaUnknownuSets the status code for our response.

        :arg int status_code: Response status code.
        :arg str reason: Human-readable reason phrase describing the status
            code. If ``None``, it will be filled in from
            `http.client.responses` or "Unknown".

        .. versionchanged:: 5.0

           No longer validates that the response code is in
           `http.client.responses`.
        uReturns the status code for our response.a_convert_header_valueuSets the given response header name and value.

        All header values are converted to strings (`datetime` objects
        are formatted according to the HTTP specification for the
        ``Date`` header).

        aadduAdds the given response header and value.

        Unlike `set_header`, `add_header` may be called multiple times
        to return multiple values for the same header.
        uClears an outgoing header, undoing a previous `set_header` call.

        Note that this method does not apply to multi-valued headers
        set by `add_header`.
        adecodeTalatin1anumbersaIntegraladatetimeuUnsupported header value %raRequestHandlera_INVALID_HEADER_CHAR_REasearchuUnsafe header value %ra_get_argumentaargumentsuReturns the value of the argument with the given name.

        If default is not provided, the argument is considered to be
        required, and we raise a `MissingArgumentError` if it is missing.

        If the argument appears in the request more than once, we return the
        last value.

        This method searches both the query and body arguments.
        a_get_argumentsuReturns a list of the arguments with the given name.

        If the argument is not present, returns an empty list.

        This method searches both the query and body arguments.
        abody_argumentsuReturns the value of the argument with the given name
        from the request body.

        If default is not provided, the argument is considered to be
        required, and we raise a `MissingArgumentError` if it is missing.

        If the argument appears in the url more than once, we return the
        last value.

        .. versionadded:: 3.2
        uReturns a list of the body arguments with the given name.

        If the argument is not present, returns an empty list.

        .. versionadded:: 3.2
        aquery_argumentsuReturns the value of the argument with the given name
        from the request query string.

        If default is not provided, the argument is considered to be
        required, and we raise a `MissingArgumentError` if it is missing.

        If the argument appears in the url more than once, we return the
        last value.

        .. versionadded:: 3.2
        uReturns a list of the query arguments with the given name.

        If the argument is not present, returns an empty list.

        .. versionadded:: 3.2
        Tastripa_ArgDefaultMarkeraMissingArgumentErrorl��������adecode_argumentanameTanameaunicode_typea_remove_control_chars_regexasubw astripavaluesaappenda_unicodel�uInvalid unicode in %s: %raurl:nl(nuDecodes an argument from the request.

        The argument has been percent-decoded and is now a byte string.
        By default, this method decodes the argument as utf-8 and returns
        a unicode string, but this may be overridden in subclasses.

        This method is used as a filter for both `get_argument()` and for
        values extracted from the url and passed to `get()`/`post()`/etc.

        The name of the argument is provided if known, but may be None
        (e.g. for unnamed groups in the url regex).
        acookiesuAn alias for
        `self.request.cookies <.httputil.HTTPServerRequest.cookies>`.avalueuReturns the value of the request cookie with the given name.

        If the named cookie is not present, returns ``default``.

        This method only returns cookies that were present in the request.
        It does not see the outgoing cookies set by `set_cookie` in this
        handler.
        areu[\x00-\x20]uInvalid cookie %r: %ra_new_cookieahttpaSimpleCookieadomainautcnowatimedeltaTadaysamorselaexpiresapathamax_ageumax-ageLahttponlyasecureuSets an outgoing cookie name/value with the given options.

        Newly-set cookies are not immediately visible via `get_cookie`;
        they are not present until the next request.

        expires may be a numeric timestamp as returned by `time.time`,
        a time tuple as returned by `time.gmtime`, or a
        `datetime.datetime` object.

        Additional keyword arguments are set on the cookies.Morsel
        directly.
        See https://docs.python.org/3/library/http.cookies.html#http.cookies.Morsel
        for available attributes.
        Tlmaset_cookieuTavalueapathaexpiresadomainuDeletes the cookie with the given name.

        Due to limitations of the cookie protocol, you must pass the same
        path and domain to clear a cookie as were used when that cookie
        was set (but there is no way to find out on the server side
        which values were used for a given cookie).

        Similar to `set_cookie`, the effect of this method will not be
        seen until the following request.
        aclear_cookieTapathadomainuDeletes all the cookies the user sent with this request.

        See `clear_cookie` for more information on the path and domain
        parameters.

        Similar to `set_cookie`, the effect of this method will not be
        seen until the following request.

        .. versionchanged:: 3.2

           Added the ``path`` and ``domain`` parameters.
        acreate_signed_valueTaversionaexpires_daysuSigns and timestamps a cookie so it cannot be forged.

        You must specify the ``cookie_secret`` setting in your Application
        to use this method. It should be a long, random sequence of bytes
        to be used as the HMAC secret for the signature.

        To read a cookie set with this method, use `get_secure_cookie()`.

        Note that the ``expires_days`` parameter sets the lifetime of the
        cookie in the browser, but is independent of the ``max_age_days``
        parameter to `get_secure_cookie`.
        A value of None limits the lifetime to the current browser session.

        Secure cookies may contain arbitrary byte values, not just unicode
        strings (unlike regular cookies)

        Similar to `set_cookie`, the effect of this method will not be
        seen until the following request.

        .. versionchanged:: 3.2.1

           Added the ``version`` argument.  Introduced cookie version 2
           and made it the default.
        arequire_settingTacookie_secretusecure cookiesacookie_secretTakey_versionukey_version setting must be used for secret_key dictsakey_versionTaversionakey_versionuSigns and timestamps a string so it cannot be forged.

        Normally used via set_secure_cookie, but provided as a separate
        method for non-cookie uses.  To decode a value not stored
        as a cookie use the optional value argument to get_secure_cookie.

        .. versionchanged:: 3.2.1

           Added the ``version`` argument.  Introduced cookie version 2
           and made it the default.
        aget_cookieadecode_signed_valueTamax_age_daysamin_versionuReturns the given signed cookie if it validates, or None.

        The decoded cookie value is returned as a byte string (unlike
        `get_cookie`).

        Similar to `get_cookie`, this method only returns cookies that
        were present in the request. It does not see outgoing cookies set by
        `set_secure_cookie` in this handler.

        .. versionchanged:: 3.2.1

           Added the ``min_version`` argument.  Introduced cookie version 2;
           both versions 1 and 2 are accepted by default.
        aget_signature_key_versionuReturns the signing key version of the secure cookie.

        The version is returned as int.
        uCannot redirect after headers have been writtenl-l.l,l�aset_statusastatusaset_headeraLocationautf8afinishuSends a redirect to the given (optionally relative) URL.

        If the ``status`` argument is specified, that value is used as the
        HTTP status code; otherwise either 301 (permanent) or 302
        (temporary) is chosen based on the ``permanent`` argument.
        The default is 302 (temporary).
        uCannot write() after finish()uwrite() only accepts bytes, unicode, and dict objectsu. Lists not accepted for security reasons; see http://www.tornadoweb.org/en/stable/web.html#tornado.web.RequestHandler.writeajson_encodeTuContent-Typeuapplication/json; charset=UTF-8uWrites the given chunk to the output buffer.

        To write the output to the network, use the `flush()` method below.

        If the given chunk is a dictionary, we write it as JSON and set
        the Content-Type of the response to be ``application/json``.
        (if you want to send JSON as a different ``Content-Type``, call
        ``set_header`` *after* calling ``write()``).

        Note that lists are not converted to JSON because of a potential
        cross-site security vulnerability.  All JSON output should be
        wrapped in a dictionary.  More details at
        http://haacked.com/archive/2009/06/25/json-hijacking.aspx/ and
        https://github.com/facebook/tornado/issues/1009
        uCannot render() after finish()arender_stringa_active_modulesaembedded_javascriptajs_embedajavascript_filesajs_filesaextendaembedded_cssacss_embedacss_filesahtml_headahtml_headsahtml_bodyahtml_bodiesarender_linked_jsarindexTc</body>d
arender_embed_jsarender_linked_cssaindexTc</head>arender_embed_csscajoinuRenders the template with the given arguments as the response.

        ``render()`` calls ``finish()``, so no other output methods can be called
        after it.

        Returns a `.Future` with the same semantics as the one returned by `finish`.
        Awaiting this `.Future` is optional.

        .. versionchanged:: 5.1

           Now returns a `.Future` instead of ``None``.
        ais_absoluteastatic_urlaunique_pathsapathsuDefault method used to render the final js links for the
        rendered webpage.

        Override this method in a sub-classed controller to change the output.
        u<script src="axhtml_escapeu" type="text/javascript"></script>uRequestHandler.render_linked_js.<locals>.<genexpr>c<script type="text/javascript">
//<![CDATA[
c
//]]>
</script>uDefault method used to render the final embedded js for the
        rendered webpage.

        Override this method in a sub-classed controller to change the output.
        uDefault method used to render the final css links for the
        rendered webpage.

        Override this method in a sub-classed controller to change the output.
        u<link href="u" type="text/css" rel="stylesheet"/>uRequestHandler.render_linked_css.<locals>.<genexpr>c<style type="text/css">
c
</style>uDefault method used to render the final embedded css for the
        rendered webpage.

        Override this method in a sub-classed controller to change the output.
        aget_template_pathasysa_getframeTlaf_codeaco_filenameaframeaf_backaosadirnamea_template_loader_locka__enter__a__exit__a_template_loadersacreate_template_loaderTnnnaloaderaloadaget_template_namespaceaupdateagenerateuGenerate the given template with the given arguments.

        We return the generated byte string (in utf8). To generate and
        write a template as a response, use render() above.
        ahandleracurrent_useralocalew_atranslateapgettextaxsrf_form_htmlareverse_urluReturns a dictionary to be used as the default template namespace.

        May be overridden by subclasses to add or modify values.

        The results of this method will be combined with additional
        defaults in the `tornado.template` module and keyword arguments
        to `render` or `render_string`.
        atemplate_loaderaautoescapeatemplate_whitespaceakwargsawhitespaceatemplateaLoaderuReturns a new template loader for the given path.

        May be overridden by subclasses.  By default returns a
        directory-based loader on the given path, using the
        ``autoescape`` and ``template_whitespace`` application
        settings.  If a ``template_loader`` application setting is
        supplied, uses that instead.
        a_transformsachunkatransform_first_chunkainclude_footersutoo many values to unpack (expected 3)amethodaHEADaadd_headeruSet-CookieaOutputStringTnaResponseStartLineawrite_headersatransform_chunkawriteaFutureaset_resultuFlushes the current output buffer to the network.

        .. versionchanged:: 4.0
           Now returns a `.Future` if no callback is given.

        .. versionchanged:: 6.0

           The ``callback`` argument was removed.
        ufinish() called twiceTaGETaHEADaEtagaset_etag_headeracheck_etag_headerTl0Tl�l0lduCannot send body with %sa_clear_representation_headersuContent-LengthaflushTtTainclude_footersa_logaon_finisha_break_cyclesuFinishes this response, ending the HTTP request.

        Passing a ``chunk`` to ``finish()`` is equivalent to passing that
        chunk to ``write()`` and then calling ``finish()`` with no arguments.

        Returns a `.Future` which may optionally be awaited to track the sending
        of the response to the client. This `.Future` resolves when all the response
        data has been sent, and raises an error if the connection is closed before all
        data can be sent.

        .. versionchanged:: 5.1

           Now returns a `.Future` instead of ``None``.
        uRequestHandler.finish.<locals>.<genexpr>adetachuTake control of the underlying stream.

        Returns the underlying `.IOStream` object and stops all
        further HTTP processing. Intended for implementing protocols
        like websockets that tunnel over an HTTP handshake.

        This method is only supported when HTTP/1.1 is used.

        .. versionadded:: 5.1
        agen_logaerrorTuCannot send error response after headers writtenTuFailed to flush partial responsetTaexc_infoareasonaexc_infolTareasonawrite_erroraapp_logTuUncaught exception in write_errortuSends the given HTTP error code to the browser.

        If `flush()` has already been called, it is not possible to send
        an error, so this method will simply terminate the response.
        If output has been written but not yet flushed, it will be discarded
        and replaced with the error page.

        Override `write_error()` to customize the error page that is returned.
        Additional keyword arguments are passed through to `write_error`.
        Taserve_tracebackTuContent-Typeutext/plainatracebackaformat_exceptionu<html><title>%(code)d: %(message)s</title><body>%(code)d: %(message)s</body></html>acodeamessageuOverride to implement custom error pages.

        ``write_error`` may call `write`, `render`, `set_header`, etc
        to produce output as usual.

        If this error was caused by an uncaught exception (including
        HTTPError), an ``exc_info`` triple will be available as
        ``kwargs["exc_info"]``.  Note that this exception may not be
        the "current" exception for purposes of methods like
        ``sys.exc_info()`` or ``traceback.format_exc``.
        a_localeaget_user_localeaget_browser_localeuThe locale for the current session.

        Determined by either `get_user_locale`, which you can override to
        set the locale based on, e.g., a user preference stored in a
        database, or `get_browser_locale`, which uses the ``Accept-Language``
        header.

        .. versionchanged: 4.1
           Added a property setter.
        uAccept-LanguageaheadersasplitTw,Tw;astartswithTuq=:lnnlTEValueErrorETypeErrorZf�?alocalesasortu<lambda>uRequestHandler.get_browser_locale.<locals>.<lambda>TakeyareverseuDetermines the user's locale from ``Accept-Language`` header.

        See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4
        a_current_useraget_current_useruThe authenticated user for this request.

        This is set in one of two ways:

        * A subclass may override `get_current_user()`, which will be called
          automatically the first time ``self.current_user`` is accessed.
          `get_current_user()` will only be called once per request,
          and is cached for future access::

              def get_current_user(self):
                  user_cookie = self.get_secure_cookie("user")
                  if user_cookie:
                      return json.loads(user_cookie)
                  return None

        * It may be set as a normal variable, typically from an overridden
          `prepare()`::

              @gen.coroutine
              def prepare(self):
                  user_id_cookie = self.get_secure_cookie("user_id")
                  if user_id_cookie:
                      self.current_user = yield load_user(user_id_cookie)

        Note that `prepare()` may be a coroutine while `get_current_user()`
        may not, so the latter form is necessary if loading the user requires
        asynchronous operations.

        The user object may be any type of the application's choosing.
        Talogin_urlu@tornado.web.authenticatedalogin_urluOverride to customize the login URL based on the request.

        By default, we use the ``login_url`` application setting.
        Tatemplate_pathuOverride to customize template path for each handler.

        By default, we use the ``template_path`` application setting.
        Return None to load templates relative to the calling file.
        a_xsrf_tokena_get_raw_xsrf_tokenTaxsrf_cookie_versionlaxsrf_cookie_kwargsabinasciiab2a_hexlaurandomTld|d2a_websocket_maskuunknown xsrf cookie version %dla_xsrfacookie_kwargsuThe XSRF-prevention token for the current user/session.

        To prevent cross-site request forgery, we set an '_xsrf' cookie
        and include the same '_xsrf' value as an argument with all POST
        requests. If the two do not match, we reject the form submission
        as a potential forgery.

        See http://en.wikipedia.org/wiki/Cross-site_request_forgery

        This property is of type `bytes`, but it contains only ASCII
        characters. If a character string is required, there is no
        need to base64-encode it; just decode the byte string as
        UTF-8.

        .. versionchanged:: 3.2.2
           The xsrf token will now be have a random mask applied in every
           request, which makes it safe to include the token in pages
           that are compressed.  See http://breachattack.com for more
           information on the issue fixed by this change.  Old (version 1)
           cookies will be converted to version 2 when this method is called
           unless the ``xsrf_cookie_version`` `Application` setting is
           set to 1.

        .. versionchanged:: 4.3
           The ``xsrf_cookie_kwargs`` `Application` setting may be
           used to supply additional cookie options (which will be
           passed directly to `set_cookie`). For example,
           ``xsrf_cookie_kwargs=dict(httponly=True, secure=True)``
           will set the ``secure`` and ``httponly`` flags on the
           ``_xsrf`` cookie.
        a_raw_xsrf_tokenTa_xsrfa_decode_xsrf_tokenTluRead or generate the xsrf token in its raw form.

        The raw_xsrf_token is a tuple containing:

        * version: the version of the cookie from which this token was read,
          or None if we generated a new token in this request.
        * token: the raw token data; random (non-ascii) bytes.
        * timestamp: the time this token was generated (will not be accurate
          for version 1 cookies)
        a_signed_value_version_reamatchagroupTlTw|utoo many values to unpack (expected 4)aa2b_hexuUnknown xsrf cookie versionaErroradebugTuUncaught exception in _decode_xsrf_tokentuConvert a cookie string into a the tuple form returned by
        _get_raw_xsrf_token.
        aget_argumentTa_xsrfnTuX-XsrftokenTuX-CsrftokenTl�u'_xsrf' argument missing from POSTTl�u'_xsrf' argument has invalid formatahmacacompare_digestTl�uXSRF cookie does not match POST argumentuVerifies that the ``_xsrf`` cookie matches the ``_xsrf`` argument.

        To prevent cross-site request forgery, we set an ``_xsrf``
        cookie and include the same value as a non-cookie
        field with all ``POST`` requests. If the two do not match, we
        reject the form submission as a potential forgery.

        The ``_xsrf`` value may be set as either a form field named ``_xsrf``
        or in a custom HTTP header named ``X-XSRFToken`` or ``X-CSRFToken``
        (the latter is accepted for compatibility with Django).

        See http://en.wikipedia.org/wiki/Cross-site_request_forgery

        .. versionchanged:: 3.2.2
           Added support for cookie version 2.  Both versions 1 and 2 are
           supported.
        u<input type="hidden" name="_xsrf" value="axsrf_tokenu"/>uAn HTML ``<input/>`` element to be included with all POST forms.

        It defines the ``_xsrf`` input value, which we check on all POST
        requests to prevent cross-site request forgery. If you have set
        the ``xsrf_cookies`` application setting, you must include this
        HTML within all of your HTML forms.

        In a template, this method should be called with ``{% module
        xsrf_form_html() %}``

        See `check_xsrf_cookie()` above for more information.
        Tastatic_pathastatic_urlastatic_handler_classaStaticFileHandleramake_static_urlainclude_hostaprotocolu://ahostuReturns a static URL for the given relative static file path.

        This method requires you set the ``static_path`` setting in your
        application (which specifies the root directory of your static
        files).

        This method returns a versioned url (by default appending
        ``?v=<signature>``), which allows the static files to be
        cached indefinitely.  This can be disabled by passing
        ``include_version=False`` (in the default implementation;
        other static file implementations are not required to support
        this, but they may support other options).

        By default this method returns URLs relative to the current
        host, but if ``include_host`` is true the URL returned will be
        absolute.  If this handler has an ``include_host`` attribute,
        that value will be used as the default for all `static_url`
        calls that do not pass ``include_host`` as a keyword argument.

        uYou must define the '%s' setting in your application to use %suRaises an exception if the given app setting is not defined.uAlias for `Application.reverse_url`.ahashlibasha1ahasheru"%s"ahexdigestuComputes the etag header to be used for this request.

        By default uses a hash of the content written so far.

        May be overridden to provide custom etag implementations,
        or may return None to disable tornado's default etag support.
        acompute_etaguSets the response's Etag header using ``self.compute_etag()``.

        Note: no header will be set if ``compute_etag()`` returns ``None``.

        This method is called automatically when the request is finished.
        TaEtaguafindallc\*|(?:W/)?"[^"]*"TuIf-None-Matchud*DwxareturnObytespavaluRequestHandler.check_etag_header.<locals>.valacomputed_etaguChecks the ``Etag`` header against requests's ``If-None-Match``.

        Returns ``True`` if the request's Etag matches and a 304 should be
        returned. For example::

            self.set_etag_header()
            if self.check_etag_header():
                self.set_status(304)
                return

        This method is called automatically when the request is finished,
        but may be called earlier for applications that override
        `compute_etag` and want to do an early check for ``If-None-Match``
        before completing the request.  The ``Etag`` header should be set
        (perhaps with `set_etag_header`) before calling this method.
        TcW/uExecutes this request with the given output transforms.atransformsaSUPPORTED_METHODSaargsapath_argsapath_kwargsTaGETaHEADaOPTIONSTaxsrf_cookiesacheck_xsrf_cookieaprepareafuture_set_result_unless_cancelledalowera_handle_request_exceptionTuException in exception handlerta_executeuRequestHandler._executeuRequestHandler._execute.<locals>.<genexpr>uImplement this method to handle streamed request data.

        Requires the `.stream_request_body` decorator.

        May be a coroutine for flow control.
        alog_requestuLogs the current request.

        Sort of deprecated since this functionality was moved to the
        Application, but left in place for the benefit of existing apps
        that have overridden this method.
        u%s %s (%s)auriaremote_ipaFinishalog_exceptionTuError in exception loggertasend_errorastatus_codeTl�alog_messageu%d %s: a_request_summaryawarninguUncaught exception %s
%ruOverride to customize logging of uncaught exceptions.

        By default logs instances of `HTTPError` as warnings without
        stack traces (on the ``tornado.general`` logger), and all
        other exceptions as errors with stack traces (on the
        ``tornado.application`` logger).

        .. versionadded:: 3.1
        DareturnOstrarenderuRequestHandler._ui_module.<locals>.renderamoduleuRequestHandler._ui_method.<locals>.<lambda>LuContent-EncodinguContent-LanguageuContent-Typeaclear_headeruexpected subclass of RequestHandler, got %ra_stream_request_bodyuApply to `RequestHandler` subclasses to enable streaming body support.

    This decorator implies the following changes:

    * `.HTTPServerRequest.body` is undefined, and body arguments will not
      be included in `RequestHandler.get_argument`.
    * `RequestHandler.prepare` is called when the request headers have been
      read instead of after the entire body has been read.
    * The subclass must define a method ``data_received(self, data):``, which
      will be called zero or more times as data is available.  Note that
      if the request has an empty body, ``data_received`` may not be called.
    * ``prepare`` and ``data_received`` may return Futures (such as via
      ``@gen.coroutine``, in which case the next method will not be called
      until those futures have completed.
    * The regular HTTP method (``post``, ``put``, etc) will be called after
      the entire body has been read.

    See the `file receiver demo <https://github.com/tornadoweb/tornado/tree/master/demos/file_upload/>`_
    for example usage.
    afunctoolsawrapsareturnaOptionalaAwaitableawrapperuremoveslash.<locals>.wrapperuUse this decorator to remove trailing slashes from the request path.

    For example, a request to ``/foo/`` would redirect to ``/foo`` with this
    decorator. Your request handler mapping should use a regular expression
    like ``r'/foo/*'`` in conjunction with using the decorator.
    aendswithTw/arstripaqueryw?aredirectDapermanenttTl�uaddslash.<locals>.wrapperuUse this decorator to add a missing trailing slash to the request path.

    For example, a request to ``/foo`` would redirect to ``/foo/`` with this
    decorator. Your request handler mapping should use a regular expression
    like ``r'/foo/?'`` in conjunction with using the decorator.
    w/aApplicationaprocess_ruleatargetTOlistOtuplea_ApplicationRouteraisclassaget_handler_delegateaget_target_delegateacompress_responseagzipaGZipContentEncodingadefault_hostalinkifya_linkifya_xsrf_form_htmlaTemplateaTemplateModulea_load_ui_modulesa_load_ui_methodsTastatic_pathastatic_pathastatic_url_prefixu/static/astatic_handler_argsu(.*)u/(favicon\.ico)u/(robots\.txt)ahandlersainsertTadebugasetdefaultTaautoreloadtTacompiled_template_cacheFTastatic_hash_cacheFTaserve_tracebacktawildcard_routeraRuleaAnyMatchesadefault_routerTaautoreloadaautoreloadastartaHTTPServeralistenTaaddressafamilyabacklogaflagsareuse_portuStarts an HTTP server for this application on the given port.

        This is a convenience alias for creating an `.HTTPServer` object and
        calling its listen method.  Keyword arguments not supported by
        `HTTPServer.listen <.TCPServer.listen>` are passed to the `.HTTPServer`
        constructor.  For advanced uses (e.g. multi-process mode), do not use
        this method; create an `.HTTPServer` and call its
        `.TCPServer.bind`/`.TCPServer.start` methods directly.

        Note that after calling this method you still need to call
        ``IOLoop.current().start()`` (or run within ``asyncio.run``) to start
        the server.

        Returns the `.HTTPServer` object.

        .. versionchanged:: 4.3
           Now returns the `.HTTPServer` object.

        .. versionchanged:: 6.2
           Added support for new keyword arguments in `.TCPServer.listen`,
           including ``reuse_port``.
        aHostMatchesarulesaadd_rulesaDefaultHostMatchesahost_patternuAppends the given handlers to our handler list.

        Host patterns are processed sequentially in the order they were
        added. All matching patterns will be considered.
        atypesaModuleTypeTw_a__call__amethodsuApplication._load_ui_methods.<locals>.<genexpr>aUIModuleuApplication._load_ui_modules.<locals>.<genexpr>afind_handleraexecuteacasta_HandlerDelegateTadefault_handler_classadefault_handler_classadefault_handler_argsaErrorHandlerDastatus_codel�uReturns `~.httputil.HTTPMessageDelegate` that can serve a request
        for application and `RequestHandler` subclass.

        :arg httputil.HTTPServerRequest request: current HTTP request.
        :arg RequestHandler target_class: a `RequestHandler` class.
        :arg dict target_kwargs: keyword arguments for ``target_class`` constructor.
        :arg list path_args: positional arguments for ``target_class`` HTTP method that
            will be executed while handling a request (``get``, ``post`` or any other).
        :arg dict path_kwargs: keyword arguments for ``target_class`` HTTP method.
        u%s not found in named urlsuReturns a URL path for handler named ``name``

        The handler must be added to the application as a named `URLSpec`.

        Args will be substituted for capturing groups in the `URLSpec` regex.
        They will be converted to strings if necessary, encoded as utf8,
        and url-escaped.
        alog_functionaget_statusaaccess_logainfol�f@�@arequest_timeu%d %s %.2fmsuWrites a completed HTTP request to the logs.

        By default writes to the python root logger.  To change
        this behavior either subclass Application and override this method,
        or pass a function in the application settings dictionary as
        ``log_function``.
        ahandler_classahandler_kwargsachunksastream_request_bodyadata_receivedabodya_parse_bodyTacompiled_template_cachetaresetTastatic_hash_cachetagenaconvert_yieldedaadd_done_callbacku_HandlerDelegate.execute.<locals>.<lambda>aresultareplaceTw%u%%uHTTP %d: %su (w)uMissing argument %saarg_namea_urla_permanentaformataurl_concataqs_to_qslTapermanentarootadefault_filenamea_locka_static_hashesDainclude_bodyFaparse_url_pathaget_absolute_pathavalidate_absolute_pathaabsolute_pathaget_modified_timeamodifiedaset_headersashould_return_304TaRangea_parse_request_rangeaget_content_sizeasizeTl�uContent-Rangeubytes */%sTl�a_get_content_rangeaendainclude_bodyaget_contentuStaticFileHandler.geta_get_cached_versionuSets the ``Etag`` header based on static url version.

        This allows efficient ``If-None-Match`` checks against cached
        versions, and sends the correct ``Etag`` for a partial response
        (i.e. the same ``Etag`` as the full file).

        .. versionadded:: 3.1
        TuAccept-RangesabytesuLast-Modifiedaget_content_typeaget_cache_timeacontent_typeaExpiresTasecondsuCache-Controlumax-age=aset_extra_headersuSets the content and caching headers on the response.

        .. versionadded:: 3.1
        TuIf-None-MatchTuIf-Modified-Sinceaemailautilsaparsedate:nlnuReturns True if the headers indicate that we should return 304.

        .. versionadded:: 3.1
        aabspathuReturns the absolute location of ``path`` relative to ``root``.

        ``root`` is the path configured for this `StaticFileHandler`
        (in most cases the ``static_path`` `Application` setting).

        This class method may be overridden in subclasses.  By default
        it returns a filesystem path, but other strings may be used
        as long as they are unique and understood by the subclass's
        overridden `get_content`.

        .. versionadded:: 3.1
        asepl�u%s is not in root static directoryaisdiraexistsaisfileu%s is not a fileuValidate and return the absolute path.

        ``root`` is the configured path for the `StaticFileHandler`,
        and ``path`` is the result of `get_absolute_path`

        This is an instance method called during request processing,
        so it may raise `HTTPError` or use methods like
        `RequestHandler.redirect` (return None after redirecting to
        halt further processing).  This is where 404 errors for missing files
        are generated.

        This method may modify the path before returning it, but note that
        any such modifications will not be understood by `make_static_url`.

        In instance methods, this method's result is available as
        ``self.absolute_path``.

        .. versionadded:: 3.1
        uRetrieve the content of the requested resource which is located
        at the given absolute path.

        This class method may be overridden by subclasses.  Note that its
        signature is different from other overridable class methods
        (no ``settings`` argument); this is deliberate to ensure that
        ``abspath`` is able to stand on its own as a cache key.

        This method should either return a byte string or an iterator
        of byte strings.  The latter is preferred for large files
        as it helps reduce memory fragmentation.

        .. versionadded:: 3.1
        arbaseeklaremainingafileareaduStaticFileHandler.get_contentasha512uReturns a version string for the resource at the given path.

        This class method may be overridden by subclasses.  The
        default implementation is a SHA-512 hash of the file's contents.

        .. versionadded:: 3.1
        a_stat_resultastata_statast_sizeuRetrieve the total size of the resource at the given path.

        This method may be overridden by subclasses.

        .. versionadded:: 3.1

        .. versionchanged:: 4.0
           This method is now always called, instead of only when
           partial results are requested.
        autcfromtimestampast_mtimeuReturns the time that ``self.absolute_path`` was last modified.

        May be overridden in subclasses.  Should return a `~datetime.datetime`
        object or None.

        .. versionadded:: 3.1
        amimetypesaguess_typeuapplication/gzipuapplication/octet-streamuReturns the ``Content-Type`` header to be used for this request.

        .. versionadded:: 3.1
        wvaCACHE_MAX_AGEuOverride to customize cache control behavior.

        Return a positive number of seconds to make the result
        cacheable for that amount of time or 0 to mark resource as
        cacheable for an unspecified amount of time (subject to
        browser heuristics).

        By default returns cache expiry of 10 years for resources requested
        with ``v`` argument.
        Tastatic_url_prefixu/static/aget_versionu%s?v=%suConstructs a versioned url for the given path.

        This method may be overridden in subclasses (but note that it
        is a class method rather than an instance method).  Subclasses
        are only required to implement the signature
        ``make_static_url(cls, settings, path)``; other keyword
        arguments may be passed through `~RequestHandler.static_url`
        but are not standard.

        ``settings`` is the `Application.settings` dictionary.  ``path``
        is the static path being requested.  The url returned should be
        relative to the current host.

        ``include_version`` determines whether the generated URL should
        include the query string containing the version hash of the
        file corresponding to the given ``path``.

        uConverts a static URL path into a filesystem path.

        ``url_path`` is the path component of the URL with
        ``static_url_prefix`` removed.  The return value should be
        filesystem path relative to ``static_path``.

        This is the inverse of `make_static_url`.
        uGenerate the version string to be used in static URLs.

        ``settings`` is the `Application.settings` dictionary and ``path``
        is the relative location of the requested asset on the filesystem.
        The returned value should be a string, or ``None`` if no version
        could be determined.

        .. versionchanged:: 3.1
           This method was previously recommended for subclasses to override;
           `get_content_version` is now preferred as it allows the base
           class to handle caching of the result.
        aget_content_versionuCould not open static file %rahashesaabs_pathafallbackTuAccept-Encodingua_gzippingTutext/aCONTENT_TYPESaVaryu, Accept-EncodinguAccept-EncodingTuContent-Typeua_compressible_typeaMIN_LENGTHuContent-EncodingaBytesIOa_gzip_valueaGzipFilewwaGZIP_LEVELTamodeafileobjacompresslevela_gzip_fileacloseagetvalueatruncateuauthenticated.<locals>.wrapperuDecorate methods with this to require that the user be logged in.

    If the user is not logged in, they will be redirected to the configured
    `login url <RequestHandler.get_login_url>`.

    If you configure a login url with a query parameter, Tornado will
    assume you know what you're doing and use it as-is.  If not, it
    will add a `next` parameter so the login page knows where to send
    you once you're logged in.
    aget_login_urlaurllibaparseaurlsplitaschemeafull_urlaurlencodeanextTl�uOverride in subclasses to return this module's output.uRenders a template and returns it as a string.a_resource_lista_resource_dictaset_resourcesuTemplateModule.render.<locals>.set_resourcesuset_resources called with different resources for the same templateakeyuTemplateModule._get_resources.<locals>.<genexpr>w
a_get_resourcesTaembedded_javascriptTajavascript_filesTaembedded_cssTacss_filesTahtml_headTahtml_bodya_ui_moduleaDEFAULT_SIGNED_VALUE_VERSIONabase64ab64encodea_create_signature_v1wsaUnionTOstrObytesaformat_fielducreate_signed_value.<locals>.format_fieldTuKey version must be set when sign key dict is usedTuVersion must be at least 2 for key version supporta_create_signature_v2uUnsupported version %du%d:l�aDEFAULT_SIGNED_VALUE_MIN_VERSIONuUnsupported min_version %da_get_versiona_decode_signed_value_v1a_decode_signed_value_v2Td|uInvalid cookie signature %rl�QuExpired cookie %rl��(uCookie timestamp in future; possible tampering %rTd0uTampered cookie %rab64decodeaTupleTObytespa_consume_fieldu_decode_fields_v2.<locals>._consume_fieldapartitionTd:umalformed v2 signed value fielda_decode_fields_v2utoo many values to unpack (expected 5)anewTadigestmodahashasha256Tw/uhttp:uhttps:uis_absolute.<locals>.<genexpr>u``tornado.web`` provides a simple web framework with asynchronous
features that allow it to scale to large numbers of open connections,
making it ideal for `long polling
<http://en.wikipedia.org/wiki/Push_technology#Long_polling>`_.

Here is a simple "Hello, world" example app:

.. testcode::

    import asyncio
    import tornado.web

    class MainHandler(tornado.web.RequestHandler):
        def get(self):
            self.write("Hello, world")

    async def main():
        application = tornado.web.Application([
            (r"/", MainHandler),
        ])
        application.listen(8888)
        await asyncio.Event().wait()

    if __name__ == "__main__":
        asyncio.run(main())

.. testoutput::
   :hide:


See the :doc:`guide` for additional information.

Thread-safety notes
-------------------

In general, methods on `RequestHandler` and elsewhere in Tornado are
not thread-safe. In particular, methods such as
`~RequestHandler.write()`, `~RequestHandler.finish()`, and
`~RequestHandler.flush()` must only be called from the main thread. If
you use multiple threads it is important to use `.IOLoop.add_callback`
to transfer control back to the main thread before finishing the
request, or to limit your use of other threads to
`.IOLoop.run_in_executor` and ensure that your callbacks running in
the executor do not refer to Tornado objects.

a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/web.pya__file__a__spec__aoriginahas_locationa__cached__uemail.utilsuhttp.cookiesainspectTaisclassuos.pathasocketathreadinguurllib.parseTaurlencodeutornado.concurrentTaFutureafuture_set_result_unless_cancelledTaescapeTagenutornado.httpserverTaHTTPServerTahttputilTaiostreamutornado.localeTalocaleutornado.logTaaccess_logaapp_logagen_logutornado.netutilTatemplateutornado.escapeTautf8a_unicodeutornado.routingTaAnyMatchesaDefaultHostMatchesaHostMatchesaReversibleRouteraRuleaReversibleRuleRouteraURLSpeca_RuleListaReversibleRouteraReversibleRuleRouteraURLSpeca_RuleListutornado.utilTaObjectDictaunicode_typea_websocket_maskaDictaAnyaListaCallableaIterableaGeneratoraTypeaTypeVaraoverloadaTracebackTypeatypinga_HeaderTypesTOintOstrTOintObytesa_CookieSecretTypesaMIN_SUPPORTED_SIGNED_VALUE_VERSIONaMAX_SUPPORTED_SIGNED_VALUE_VERSIONametaclassTa__prepare__Ta_ArgDefaultMarkerTa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>utornado.weba__module__a__qualname__a_ARG_DEFAULTTOobjectuBase class for HTTP request handlers.

    Subclasses must define at least one of the methods defined in the
    "Entry points" section below.

    Applications should not construct `RequestHandler` objects
    directly and subclasses should not override ``__init__`` (override
    `~RequestHandler.initialize` instead).

    TaGETaHEADaPOSTaDELETEaPATCHaPUTaOPTIONSaLockacompileTu[\x00-\x08\x0e-\x1f]aHTTPServerRequestuRequestHandler.__init__Dareturnna_initializeuRequestHandler._initializeapropertyastruRequestHandler.settingsa_unimplemented_methoduRequestHandler._unimplemented_methodaheadapostadeleteapatchaputaoptionsuCalled at the beginning of a request before  `get`/`post`/etc.

        Override this method to perform common initialization regardless
        of the request method.

        Asynchronous support: Use ``async def`` or decorate this method with
        `.gen.coroutine` to make it asynchronous.
        If this method returns an  ``Awaitable`` execution will not proceed
        until the ``Awaitable`` is done.

        .. versionadded:: 3.1
           Asynchronous support.
        uRequestHandler.prepareuCalled after the end of a request.

        Override this method to perform cleanup, logging, etc.
        This method is a counterpart to `prepare`.  ``on_finish`` may
        not produce any output, as it is called after the response
        has been sent to the client.
        uRequestHandler.on_finishuRequestHandler.on_connection_closeuRequestHandler.clearuOverride this to set HTTP headers at the beginning of the request.

        For example, this is the place to set a custom ``Server`` header.
        Note that setting such headers in the normal flow of request
        processing may not do what you want, since headers may be reset
        during error handling.
        uRequestHandler.set_default_headersaintuRequestHandler.set_statusuRequestHandler.get_statusuRequestHandler.set_headeruRequestHandler.add_headeruRequestHandler.clear_headerTu[\x00-\x1f]uRequestHandler._convert_header_valueadefaultabooluRequestHandler.get_argumentaget_argumentsuRequestHandler.get_argumentsaget_body_argumentuRequestHandler.get_body_argumentaget_body_argumentsuRequestHandler.get_body_argumentsaget_query_argumentuRequestHandler.get_query_argumentaget_query_argumentsuRequestHandler.get_query_argumentsasourceabytesuRequestHandler._get_argumentuRequestHandler._get_argumentsuRequestHandler.decode_argumentaMorseluRequestHandler.cookiesuRequestHandler.get_cookieTnnw/nafloatuRequestHandler.set_cookieTw/nuRequestHandler.clear_cookieaclear_all_cookiesuRequestHandler.clear_all_cookiesTlnaset_secure_cookieuRequestHandler.set_secure_cookieuRequestHandler.create_signed_valueTnlnamax_age_daysamin_versionaget_secure_cookieuRequestHandler.get_secure_cookieaget_secure_cookie_key_versionuRequestHandler.get_secure_cookie_key_versionTFnapermanentuRequestHandler.redirectadictuRequestHandler.writeatemplate_nameuFuture[None]uRequestHandler.renderuRequestHandler.render_linked_jsuRequestHandler.render_embed_jsuRequestHandler.render_linked_cssuRequestHandler.render_embed_cssuRequestHandler.render_stringuRequestHandler.get_template_namespaceatemplate_pathaBaseLoaderuRequestHandler.create_template_loaderTFuRequestHandler.flushuRequestHandler.finishaIOStreamuRequestHandler.detachuRequestHandler._break_cyclesuRequestHandler.send_erroruRequestHandler.write_erroraLocaleuRequestHandler.localeasetteruOverride to determine the locale from the authenticated user.

        If None is returned, we fall back to `get_browser_locale()`.

        This method should return a `tornado.locale.Locale` object,
        most likely obtained via a call like ``tornado.locale.get("en")``
        uRequestHandler.get_user_localeTaen_USuRequestHandler.get_browser_localeuRequestHandler.current_useruOverride to determine the current user from, e.g., a cookie.

        This method may not be a coroutine.
        uRequestHandler.get_current_useruRequestHandler.get_login_urluRequestHandler.get_template_pathuRequestHandler.xsrf_tokenuRequestHandler._get_raw_xsrf_tokenacookieuRequestHandler._decode_xsrf_tokenuRequestHandler.check_xsrf_cookieuRequestHandler.xsrf_form_htmluRequestHandler.static_urlTuthis featureafeatureuRequestHandler.require_settinguRequestHandler.reverse_urluRequestHandler.compute_etaguRequestHandler.set_etag_headeruRequestHandler.check_etag_headeraOutputTransformuRequestHandler.data_receiveduRequestHandler._loguRequestHandler._request_summaryweaBaseExceptionuRequestHandler._handle_request_exceptionatypuOptional[Type[BaseException]]atbuRequestHandler.log_exceptionuRequestHandler._ui_moduleuRequestHandler._ui_methoduRequestHandler._clear_representation_headersa__orig_bases__Ta_RequestHandlerTypeTabounda_RequestHandlerTypeaclsaremoveslashaaddslashuRouting implementation used internally by `Application`.

    Provides a binding between `Application` and `RequestHandler`.
    This implementation extends `~.routing.ReversibleRuleRouter` in a couple of ways:
        * it allows to use `RequestHandler` subclasses as `~.routing.Rule` target and
        * it allows to use a list/tuple of rules as `~.routing.Rule` target.
        ``process_rule`` implementation will substitute this list with an appropriate
        `_ApplicationRouter` instance.
    u_ApplicationRouter.__init__aruleu_ApplicationRouter.process_ruleatarget_paramsaHTTPMessageDelegateu_ApplicationRouter.get_target_delegateuA collection of request handlers that make up a web application.

    Instances of this class are callable and can be passed directly to
    HTTPServer to serve the application::

        application = web.Application([
            (r"/", MainPageHandler),
        ])
        http_server = httpserver.HTTPServer(application)
        http_server.listen(8080)

    The constructor for this class takes in a list of `~.routing.Rule`
    objects or tuples of values corresponding to the arguments of
    `~.routing.Rule` constructor: ``(matcher, target, [target_kwargs], [name])``,
    the values in square brackets being optional. The default matcher is
    `~.routing.PathMatches`, so ``(regexp, target)`` tuples can also be used
    instead of ``(PathMatches(regexp), target)``.

    A common routing target is a `RequestHandler` subclass, but you can also
    use lists of rules as a target, which create a nested routing configuration::

        application = web.Application([
            (HostMatches("example.com"), [
                (r"/", MainPageHandler),
                (r"/feed", FeedHandler),
            ]),
        ])

    In addition to this you can use nested `~.routing.Router` instances,
    `~.httputil.HTTPMessageDelegate` subclasses and callables as routing targets
    (see `~.routing` module docs for more information).

    When we receive requests, we iterate over the list in order and
    instantiate an instance of the first request class whose regexp
    matches the request path. The request class can be specified as
    either a class object or a (fully-qualified) name.

    A dictionary may be passed as the third element (``target_kwargs``)
    of the tuple, which will be used as keyword arguments to the handler's
    constructor and `~RequestHandler.initialize` method. This pattern
    is used for the `StaticFileHandler` in this example (note that a
    `StaticFileHandler` can be installed automatically with the
    static_path setting described below)::

        application = web.Application([
            (r"/static/(.*)", web.StaticFileHandler, {"path": "/var/www"}),
        ])

    We support virtual hosts with the `add_handlers` method, which takes in
    a host regular expression as the first argument::

        application.add_handlers(r"www\.myhost\.com", [
            (r"/article/([0-9]+)", ArticleHandler),
        ])

    If there's no match for the current request's host, then ``default_host``
    parameter value is matched against host regular expressions.


    .. warning::

       Applications that do not use TLS may be vulnerable to :ref:`DNS
       rebinding <dnsrebinding>` attacks. This attack is especially
       relevant to applications that only listen on ``127.0.0.1`` or
       other private networks. Appropriate host patterns must be used
       (instead of the default of ``r'.*'``) to prevent this risk. The
       ``default_host`` argument must not be used in applications that
       may be vulnerable to DNS rebinding.

    You can serve static files by sending the ``static_path`` setting
    as a keyword argument. We will serve those files from the
    ``/static/`` URI (this is configurable with the
    ``static_url_prefix`` setting), and we will serve ``/favicon.ico``
    and ``/robots.txt`` from the same directory.  A custom subclass of
    `StaticFileHandler` can be specified with the
    ``static_handler_class`` setting.

    .. versionchanged:: 4.5
       Integration with the new `tornado.routing` module.

    uApplication.__init__afamilyaAF_UNSPECabackloganetutila_DEFAULT_BACKLOGaflagsareuse_portaportaaddressaAddressFamilyuApplication.listenahost_handlersaadd_handlersuApplication.add_handlersatransform_classaadd_transformuApplication.add_transformuApplication._load_ui_methodsuApplication._load_ui_modulesuApplication.__call__uApplication.find_handleratarget_classatarget_kwargsuApplication.get_handler_delegateuApplication.reverse_urluApplication.log_requestu_HandlerDelegate.__init__astart_lineaRequestStartLineaheaders_receivedu_HandlerDelegate.headers_receivedadatau_HandlerDelegate.data_receivedu_HandlerDelegate.finishu_HandlerDelegate.on_connection_closeu_HandlerDelegate.executeTEExceptionuAn exception that will turn into an HTTP error response.

    Raising an `HTTPError` is a convenient alternative to calling
    `RequestHandler.send_error` since it automatically ends the
    current function.

    To customize the response sent with an `HTTPError`, override
    `RequestHandler.write_error`.

    :arg int status_code: HTTP status code.  Must be listed in
        `httplib.responses <http.client.responses>` unless the ``reason``
        keyword argument is given.
    :arg str log_message: Message to be written to the log for this error
        (will not be shown to the user unless the `Application` is in debug
        mode).  May contain ``%s``-style placeholders, which will be filled
        in with remaining positional parameters.
    :arg str reason: Keyword-only argument.  The HTTP "reason" phrase
        to pass in the status line along with ``status_code``.  Normally
        determined automatically from ``status_code``, but can be used
        to use a non-standard numeric code.
    Tl�nuHTTPError.__init__a__str__uHTTPError.__str__uAn exception that ends the request without producing an error response.

    When `Finish` is raised in a `RequestHandler`, the request will
    end (calling `RequestHandler.finish` if it hasn't already been
    called), but the error-handling methods (including
    `RequestHandler.write_error`) will not be called.

    If `Finish()` was created with no arguments, the pending response
    will be sent as-is. If `Finish()` was given an argument, that
    argument will be passed to `RequestHandler.finish()`.

    This can be a more convenient way to implement custom error pages
    than overriding ``write_error`` (especially in library code)::

        if self.current_user is None:
            self.set_status(401)
            self.set_header('WWW-Authenticate', 'Basic realm="something"')
            raise Finish()

    .. versionchanged:: 4.3
       Arguments passed to ``Finish()`` will be passed on to
       `RequestHandler.finish`.
    uException raised by `RequestHandler.get_argument`.

    This is a subclass of `HTTPError`, so if it is uncaught a 400 response
    code will be used instead of 500 (and a stack trace will not be logged).

    .. versionadded:: 3.1
    uMissingArgumentError.__init__uGenerates an error response with ``status_code`` for all requests.uErrorHandler.initializeuErrorHandler.prepareuErrorHandler.check_xsrf_cookieaRedirectHandleruRedirects the client to the given URL for all GET requests.

    You should provide the keyword argument ``url`` to the handler, e.g.::

        application = web.Application([
            (r"/oldpath", web.RedirectHandler, {"url": "/newpath"}),
        ])

    `RedirectHandler` supports regular expression substitutions. E.g., to
    swap the first and second parts of a path while preserving the remainder::

        application = web.Application([
            (r"/(.*?)/(.*?)/(.*)", web.RedirectHandler, {"url": "/{1}/{0}/{2}"}),
        ])

    The final URL is formatted with `str.format` and the substrings that match
    the capturing groups. In the above example, a request to "/a/b/c" would be
    formatted like::

        str.format("/{1}/{0}/{2}", "a", "b", "c")  # -> "/b/a/c"

    Use Python's :ref:`format string syntax <formatstrings>` to customize how
    values are substituted.

    .. versionchanged:: 4.5
       Added support for substitutions into the destination URL.

    .. versionchanged:: 5.0
       If any query arguments are present, they will be copied to the
       destination URL.
    uRedirectHandler.initializeuRedirectHandler.getuA simple handler that can serve static content from a directory.

    A `StaticFileHandler` is configured automatically if you pass the
    ``static_path`` keyword argument to `Application`.  This handler
    can be customized with the ``static_url_prefix``, ``static_handler_class``,
    and ``static_handler_args`` settings.

    To map an additional path to this handler for a static data directory
    you would add a line to your application like::

        application = web.Application([
            (r"/content/(.*)", web.StaticFileHandler, {"path": "/var/www"}),
        ])

    The handler constructor requires a ``path`` argument, which specifies the
    local root directory of the content to be served.

    Note that a capture group in the regex is required to parse the value for
    the ``path`` argument to the get() method (different than the constructor
    argument above); see `URLSpec` for details.

    To serve a file like ``index.html`` automatically when a directory is
    requested, set ``static_handler_args=dict(default_filename="index.html")``
    in your application settings, or add ``default_filename`` as an initializer
    argument for your ``StaticFileHandler``.

    To maximize the effectiveness of browser caching, this class supports
    versioned urls (by default using the argument ``?v=``).  If a version
    is given, we instruct the browser to cache this file indefinitely.
    `make_static_url` (also available as `RequestHandler.static_url`) can
    be used to construct a versioned url.

    This handler is intended primarily for use in development and light-duty
    file serving; for heavy traffic it will be more efficient to use
    a dedicated static file server (such as nginx or Apache).  We support
    the HTTP ``Accept-Ranges`` mechanism to return partial content (because
    some browsers require this functionality to be present to seek in
    HTML5 audio or video).

    **Subclassing notes**

    This class is designed to be extensible by subclassing, but because
    of the way static urls are generated with class methods rather than
    instance methods, the inheritance patterns are somewhat unusual.
    Be sure to use the ``@classmethod`` decorator when overriding a
    class method.  Instance methods may use the attributes ``self.path``
    ``self.absolute_path``, and ``self.modified``.

    Subclasses should only override methods discussed in this section;
    overriding other methods is error-prone.  Overriding
    ``StaticFileHandler.get`` is particularly problematic due to the
    tight coupling with ``compute_etag`` and other methods.

    To change the way static urls are generated (e.g. to match the behavior
    of another server or CDN), override `make_static_url`, `parse_url_path`,
    `get_cache_time`, and/or `get_version`.

    To replace all interaction with the filesystem (e.g. to serve
    static content from a database), override `get_content`,
    `get_content_size`, `get_modified_time`, `get_absolute_path`, and
    `validate_absolute_path`.

    .. versionchanged:: 3.1
       Many of the methods for subclasses were added in Tornado 3.1.
    l�uStaticFileHandler.initializeaclassmethoduStaticFileHandler.resetuStaticFileHandler.headuStaticFileHandler.compute_etaguStaticFileHandler.set_headersuStaticFileHandler.should_return_304uStaticFileHandler.get_absolute_pathuStaticFileHandler.validate_absolute_pathTnnuStaticFileHandler.get_content_versionastat_resultuStaticFileHandler._statuStaticFileHandler.get_content_sizeuStaticFileHandler.get_modified_timeuStaticFileHandler.get_content_typeuFor subclass to add extra headers to the responseuStaticFileHandler.set_extra_headersamime_typeuStaticFileHandler.get_cache_timeainclude_versionuStaticFileHandler.make_static_urlaurl_pathuStaticFileHandler.parse_url_pathuStaticFileHandler.get_versionuStaticFileHandler._get_cached_versionaFallbackHandleruA `RequestHandler` that wraps another HTTP server callback.

    The fallback is a callable object that accepts an
    `~.httputil.HTTPServerRequest`, such as an `Application` or
    `tornado.wsgi.WSGIContainer`.  This is most useful to use both
    Tornado ``RequestHandlers`` and WSGI in the same server.  Typical
    usage::

        wsgi_app = tornado.wsgi.WSGIContainer(
            django.core.handlers.wsgi.WSGIHandler())
        application = tornado.web.Application([
            (r"/foo", FooHandler),
            (r".*", FallbackHandler, dict(fallback=wsgi_app),
        ])
    uFallbackHandler.initializeuFallbackHandler.prepareuA transform modifies the result of an HTTP request (e.g., GZip encoding)

    Applications are not expected to create their own OutputTransforms
    or interact with them directly; the framework chooses which transforms
    (if any) to apply.
    uOutputTransform.__init__afinishinguOutputTransform.transform_first_chunkuOutputTransform.transform_chunkuApplies the gzip content encoding to the response.

    See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11

    .. versionchanged:: 4.0
        Now compresses all mime types beginning with ``text/``, instead
        of just a whitelist. (the whitelist is still used for certain
        non-text mime types).
    asetLuapplication/javascriptuapplication/x-javascriptuapplication/xmluapplication/atom+xmluapplication/jsonuapplication/xhtml+xmluimage/svg+xmlSuapplication/xmluapplication/xhtml+xmluapplication/x-javascriptuapplication/jsonuapplication/atom+xmluapplication/javascriptuimage/svg+xmllluGZipContentEncoding.__init__actypeuGZipContentEncoding._compressible_typeuGZipContentEncoding.transform_first_chunkuGZipContentEncoding.transform_chunkaauthenticateduA re-usable, modular UI unit on a page.

    UI modules often execute additional queries, and they can include
    additional CSS and JavaScript that will be included in the output
    page, which is automatically inserted on page render.

    Subclasses of UIModule must override the `render` method.
    uUIModule.__init__uUIModule.current_useruUIModule.renderuOverride to return a JavaScript string
        to be embedded in the page.uUIModule.embedded_javascriptuOverride to return a list of JavaScript files needed by this module.

        If the return values are relative paths, they will be passed to
        `RequestHandler.static_url`; otherwise they will be used as-is.
        uUIModule.javascript_filesuOverride to return a CSS string
        that will be embedded in the page.uUIModule.embedded_cssuOverride to returns a list of CSS files required by this module.

        If the return values are relative paths, they will be passed to
        `RequestHandler.static_url`; otherwise they will be used as-is.
        uUIModule.css_filesuOverride to return an HTML string that will be put in the <head/>
        element.
        uUIModule.html_headuOverride to return an HTML string that will be put at the end of
        the <body/> element.
        uUIModule.html_bodyuUIModule.render_stringatextu_linkify.renderu_xsrf_form_html.renderuUIModule that simply renders the given template.

    {% module Template("foo.html") %} is similar to {% include "foo.html" %},
    but the module version gets its own namespace (with kwargs passed to
    Template()) instead of inheriting the outer template's namespace.

    Templates rendered through this module also get access to UIModule's
    automatic JavaScript/CSS features.  Simply call set_resources
    inside the template and give it keyword arguments corresponding to
    the methods on UIModule: {{ set_resources(js_files=static_url("my.js")) }}
    Note that these resources are output once per template file, not once
    per instantiation of the template, so they must not depend on
    any arguments to the template.
    uTemplateModule.__init__uTemplateModule.renderuTemplateModule._get_resourcesuTemplateModule.embedded_javascriptuTemplateModule.javascript_filesuTemplateModule.embedded_cssuTemplateModule.css_filesuTemplateModule.html_headuTemplateModule.html_bodyuLazy namespace which creates UIModule proxies bound to a handler.u_UIModuleNamespace.__init__u_UIModuleNamespace.__getitem__a__getattr__u_UIModuleNamespace.__getattr__asecretaclockTLOfloatTc^([1-9][0-9]*)\|(.*)$DavalueareturnObytesOintTlnnTnOstrObytesTOintObytespppapartsDapathareturnOstrOboolTa.0wkwvaselfTa.0wnwmaselfTa__class__Ta.0wnamethodsTa.0wnamodulesTa.0wpTa.0apartTa.0wrakeyTa.0wxapathTaargsakwargsamethodaselfTamethodaselfTwfTapairu<listcomp>TaargaselfTalocTwtaselfu<module tornado.web>TaselfarequestadispatcherTaselfakeyweTaselfakeyTaselfaapplicationarequestahandler_classahandler_kwargsapath_argsapath_kwargsTaselfaapplicationarequestakwargsa__class__Taselfaapplicationarulesa__class__Taselfaarg_namea__class__TaselfahandlerTaselfahandlera__class__Taselfahandleraui_modulesTaselfahandlersadefault_hostatransformsasettingsapathastatic_url_prefixastatic_handler_classastatic_handler_argsapatternaautoreloadTaselfarequestTaselfastatus_codealog_messageaargsakwargsTaselfamessageTaselfTaselfaheaderswhTaselfactypeTwsalengthw_arestwnafield_valueTaselfavaluearetvalTasecretapartsahashapartTasecretwsahashTavaluea_consume_fieldarestakey_versionatimestampaname_fieldavalue_fieldapassed_sigTasecretanameavalueamax_age_daysaclockapartsasignatureatimestampT
asecretanameavalueamax_age_daysaclockakey_versionatimestamp_bytesaname_fieldavalue_fieldapassed_sigasigned_stringaexpected_sigatimestampTaselfacookiewmaversionw_amask_stramasked_tokenatimestamp_stramaskatokenatimestampTaselfatransformsaargsakwargsaresultamethodweTaselfanameadefaultasourceastripaargsTaselfanameasourceastripavalueswvwsTaclsaabs_pathahashesahshTaselfacookieaversionatokenatimestampTavaluewmaversionTaselfweTaclsTaselfamethodswmanameafnTaselfamoduleswmanameaclsTaselfamethodTaselfanameamodulearenderTaselfaargsakwargsTaselfahost_patternahost_handlersahost_matcheraruleTaselfanameavalueTaselfatransform_classTamethodawrapperTaselfacomputed_etagaetagsamatchavalaetagTaselfatokenw_aexpected_tokenTaselfapathadomainanameTaselfanameapathadomainaexpiresTaselfanameTaselfahasherapartTaselfaversion_hashT
asecretanameavalueaversionaclockakey_versionatimestampasignatureaformat_fieldato_signTaselfanameavalueaversionasecretakey_versionTaselfatemplate_pathasettingsakwargsTaselfaresultwfTaselfavalueTaselfachunkTaselfadataTaselfavalueanameTasecretanameavalueamax_age_daysaclockamin_versionaversionTaselfaloaderastatic_handler_classatransformsafutTaselfarequestakwargsarouteTaselfachunkacontent_lengthafutureTaselfainclude_footersachunkatransformacookieastart_lineafutureTwsTaselfapathainclude_bodyaabsolute_patharequest_rangearange_headerasizeastartaendacontent_lengthacontentachunkTaselfaargsakwargsato_urlTaclsarootapathaabspathTaselfanameadefaultastripTaselfanameastripTaselfadefaultalanguagesalocalesalanguageapartsascoreacodesTaselfapathamodifiedamime_typeTaclsaabspathastartaendafilearemainingachunk_sizeachunkTaselfastat_resultTaselfamime_typeaencodingTaclsaabspathadataahasherachunkTaselfanameadefaultTaselfarequestatarget_classatarget_kwargsapath_argsapath_kwargsTaselfastat_resultamodifiedTaselfanameavalueamax_age_daysamin_versionTavalueaversionakey_versionw_Taselfatargetarequestatarget_paramsa__class__TaselfanamespaceTaclsasettingsapathaabs_pathTaselfapathTaselfastart_lineaheadersTaselfafallbackTaselfapathadefault_filenameTaselfastatus_codeTaselfaurlapermanentTapathT	aselfaportaaddressafamilyabacklogaflagsareuse_portakwargsaserverTaselfalocTaselfatypavalueatbaformataargsTaselfahandleralog_methodarequest_timeTaclsasettingsapathainclude_versionaurlaversion_hashTaselfaurl_pathTaselfarulea__class__TaselfaurlapermanentastatusTaargsakwargsarenderedaselfanameamoduleTamoduleanameaselfTaselfapathakwargsaset_resourcesTaselfatemplate_nameakwargsahtmlajs_embedajs_filesacss_embedacss_filesahtml_headsahtml_bodiesamoduleaembed_partafile_partahead_partabody_partajsaslocajs_bytesacssahlocacss_bytesTaselfatextakwargsTaselfacss_embedTaselfajs_embedTaselfacss_filesapathsaunique_pathsapathTaselfajs_filesapathsaunique_pathsapathTaselfapathakwargsT	aselfatemplate_nameakwargsatemplate_pathaframeaweb_filealoaderwtanamespaceTaselfanameafeatureTaselfanameaargsTaselfanameaargsareversed_urlTaselfastatus_codeakwargsareasonaexceptionTaselfanameavalueadomainaexpiresapathaexpires_daysakwargsamorselwkwvTaselfaetagTaselfacontent_typeacache_timeTakwargsapathaselfTapathaselfTaselfanameavalueaexpires_daysaversionakwargsTaselfastatus_codeareasonTaselfaims_valueadate_tupleaif_sinceTaselfapathainclude_hostakwargsaget_urlabaseTaselfachunkafinishingTaselfastatus_codeaheadersachunkafinishingTaselfastatus_codeaheadersachunkafinishingactypeTwxTaselfarootaabsolute_pathTaselfaargsakwargsauriamethodTamethodTaselfaargsakwargsaurlanext_urlamethodTaselfachunkamessageTaselfastatus_codeakwargsalineTaselfaversionatokenatimestampaoutput_versionacookie_kwargsamask.tornado.websockets�aping_intervalaping_timeoutamax_message_sizeacompression_optionsa__class__a__init__aws_connectionaclose_codeaclose_reasona_on_close_calledaargsaselfaopen_argsakwargsaopen_kwargsarequestaheadersagetTaUpgradeualowerawebsocketaset_statusTl�afinishTuCan "Upgrade" only to "WebSocket".agen_logadebugu<lambda>uWebSocketHandler.get.<locals>.<lambda>TaConnectionuasplitTw,aupgradeTu"Connection" must be "Upgrade".aOriginTaOriginTuSec-Websocket-Originnacheck_originTl�TuCross origin websockets not allowedaget_websocket_protocolaaccept_connectionTl�uUpgrade Requiredaset_headerTuSec-WebSocket-Versionu7, 8, 13uWebSocketHandler.getastripasettingsTawebsocket_ping_intervalnuThe interval for websocket keep-alive pings.

        Set websocket_ping_interval = 0 to disable pings.
        Tawebsocket_ping_timeoutnuIf no ping is received in this many seconds,
        close the websocket connection (VPNs, etc. can fail to cleanly close ws connections).
        Default is max of 3 pings or 30 seconds.
        awebsocket_max_message_sizea_default_max_message_sizeuMaximum allowed message size.

        If the remote peer sends a message larger than this, the connection
        will be closed.

        Default is 10MiB.
        ais_closingaWebSocketClosedErroratornadoaescapeajson_encodeawrite_messageTabinaryuSends the given message to the client of this Web Socket.

        The message may be either a string or a dict (which will be
        encoded as json).  If the ``binary`` argument is false, the
        message will be sent as utf8; in binary mode any byte string
        is allowed.

        If the connection is already closed, raises `WebSocketClosedError`.
        Returns a `.Future` which can be used for flow control.

        .. versionchanged:: 3.2
           `WebSocketClosedError` was added (previously a closed connection
           would raise an `AttributeError`)

        .. versionchanged:: 4.3
           Returns a `.Future` which can be used for flow control.

        .. versionchanged:: 5.0
           Consistently raises `WebSocketClosedError`. Previously could
           sometimes raise `.StreamClosedError`.
        aselected_subprotocoluThe subprotocol returned by `select_subprotocol`.

        .. versionadded:: 5.1
        uHandle incoming messages on the WebSocket

        This method must be overridden.

        .. versionchanged:: 4.5

           ``on_message`` can be a coroutine.
        autf8awrite_pinguSend ping frame to the remote end.

        The data argument allows a small amount of data (up to 125
        bytes) to be sent as a part of the ping message. Note that not
        all websocket implementations expose this data to
        applications.

        Consider using the ``websocket_ping_interval`` application
        setting instead of sending pings manually.

        .. versionchanged:: 5.1

           The data argument is now optional.

        acloseuCloses this Web Socket.

        Once the close handshake is successful the socket will be closed.

        ``code`` may be a numeric status code, taken from the values
        defined in `RFC 6455 section 7.4.1
        <https://tools.ietf.org/html/rfc6455#section-7.4.1>`_.
        ``reason`` may be a textual message about why the connection is
        closing.  These values are made available to the client, but are
        not otherwise interpreted by the websocket protocol.

        .. versionchanged:: 4.0

           Added the ``code`` and ``reason`` arguments.
        aurlparseanetlocTaHostuOverride to enable support for allowing alternate origins.

        The ``origin`` argument is the value of the ``Origin`` HTTP
        header, the url responsible for initiating this request.  This
        method is not called for clients that do not send this header;
        such requests are always allowed (because all browsers that
        implement WebSockets support this header, and non-browser
        clients do not have the same cross-site security concerns).

        Should return ``True`` to accept the request or ``False`` to
        reject it. By default, rejects all requests with an origin on
        a host other than this one.

        This is a security protection against cross site scripting attacks on
        browsers, since WebSockets are allowed to bypass the usual same-origin
        policies and don't use CORS headers.

        .. warning::

           This is an important security measure; don't disable it
           without understanding the security implications. In
           particular, if your authentication is cookie-based, you
           must either restrict the origins allowed by
           ``check_origin()`` or implement your own XSRF-like
           protection for websocket connections. See `these
           <https://www.christian-schneider.net/CrossSiteWebSocketHijacking.html>`_
           `articles
           <https://devcenter.heroku.com/articles/websocket-security>`_
           for more.

        To accept all cross-origin traffic (which was the default prior to
        Tornado 4.0), simply override this method to always return ``True``::

            def check_origin(self, origin):
                return True

        To allow connections from any subdomain of your site, you might
        do something like::

            def check_origin(self, origin):
                parsed_origin = urllib.parse.urlparse(origin)
                return parsed_origin.netloc.endswith(".mydomain.com")

        .. versionadded:: 4.0

        aset_nodelayuSet the no-delay flag for this stream.

        By default, small messages may be delayed and/or combined to minimize
        the number of packets sent.  This can sometimes cause 200-500ms delays
        due to the interaction between Nagle's algorithm and TCP delayed
        ACKs.  To reduce this delay (at the expense of possibly increasing
        bandwidth usage), call ``self.set_nodelay(True)`` once the websocket
        connection is established.

        See `.BaseIOStream.set_nodelay` for additional details.

        .. versionadded:: 3.1
        aon_connection_closeaon_closea_break_cyclesaget_statusleTuSec-WebSocket-VersionTw7w8u13a_WebSocketParamsaget_compression_optionsTaping_intervalaping_timeoutamax_message_sizeacompression_optionsaWebSocketProtocol13Tawritearedirectaset_headeraset_cookieaset_statusaflushafinisha_raise_not_supported_for_websocketsadetachuMethod not supported for Web Socketsahandlerastreamaclient_terminatedaserver_terminatedalog_exceptionasysaexc_infoa_abortagenaconvert_yieldedaio_loopaadd_futureuWebSocketProtocol._run_callback.<locals>.<lambda>aresultuRuns the given callback with exception handling.

        If the callback is a coroutine, returns its Future. On error, aborts the
        websocket connection and returns None.
        uInstantly aborts the WebSocket connection by closing the socketuWebSocketProtocol.accept_connectiona_receive_frame_loopuWebSocketProtocol._receive_frame_loopazlibaMAX_WBITSluInvalid max_wbits value %r; allowed range 8-%da_max_wbitsacompression_levelawebaGZipContentEncodingaGZIP_LEVELa_compression_levelamem_levela_mem_levela_create_compressora_compressoracompressobjaDEFLATEDacompressaflushaZ_SYNC_FLUSHaendswithTb��:nl��������na_max_message_sizea_create_decompressora_decompressoradecompressobjadecompressb��aunconsumed_taila_DecompressTooLargeErroraWebSocketProtocolamask_outgoingaparamsa_final_framea_frame_opcodea_masked_framea_frame_maska_frame_lengtha_fragmented_message_buffera_fragmented_message_opcodea_waitinga_compression_optionsa_frame_compressedla_message_bytes_ina_message_bytes_outa_wire_bytes_ina_wire_bytes_outaping_callbackZalast_pingalast_ponga_selected_subprotocola_handle_websocket_headersTuMissing/Invalid WebSocket headersa_accept_connectionaasyncioaCancelledErrorTuMalformed WebSocket request receivedtTaexc_infouWebSocketProtocol13.accept_connectionuWebSocketProtocol13._handle_websocket_headers.<locals>.<lambda>TaHostuSec-Websocket-KeyuSec-Websocket-VersionuMissing/Invalid WebSocket headersuVerifies all invariant- and required headers

        If a header is missing or have an incorrect value ValueError will be
        raised
        ahashlibasha1aupdateTc258EAFA5-E914-47DA-95CA-C5AB0DC85B11anative_strabase64ab64encodeadigestuComputes the value for the Sec-WebSocket-Accept header,
        given the value for Sec-WebSocket-Key.
        acompute_accept_valueacastTuSec-Websocket-KeyTuSec-WebSocket-Protocolaselect_subprotocoluSec-WebSocket-Protocola_parse_extensions_headerupermessage-deflatea_create_compressorsaserverlaclient_max_window_bitsuSec-WebSocket-Extensionsahttputila_encode_headeraclear_headerTuContent-TypeTleTaUpgradeawebsocketTaConnectionaUpgradeuSec-WebSocket-Accepta_challenge_responsea_detach_streamastart_pingingaopenuWebSocketProtocol13._accept_connectionTuSec-WebSocket-Extensionsua_parse_headeraUpgradeaConnectionuSec-Websocket-Acceptaclientuunsupported extension %rTuSec-WebSocket-ProtocolnuProcess the headers sent by the server to this client connection.

        'key' is the websocket handshake challenge/response key.
        apersistenta_no_context_takeovera_max_window_bitsamax_wbitsaoptionsuConverts a websocket agreed_parameters set to keyword arguments
        for our compressor objects.
        Saserver_no_context_takeoveraclient_no_context_takeoveraserver_max_window_bitsaclient_max_window_bitsuunsupported compression parameter %ra_PerMessageDeflateCompressora_get_compressor_optionsa_PerMessageDeflateDecompressorucontrol frames may not be fragmenteducontrol frame payloads may not exceed 125 bytesaFINastructapackwBl�u!BHl~u!BQlaosaurandomTla_websocket_maskadataawritelaRSV1a_write_frameamessageTaflagsaStreamClosedErrorDareturnnawrapperuWebSocketProtocol13.write_message.<locals>.wrapperaensure_futureuSends the given message to the client of this Web Socket.afutl	uSend ping frame.a_receive_frameaon_ws_connection_closeuWebSocketProtocol13._receive_frame_looparead_byteswna_read_bytesuWebSocketProtocol13._read_bytesTlaunpackaBButoo many values to unpack (expected 2)aRSV_MASKaOPCODE_MASKu!HTlu!QTl�umessage too biga_handle_messageaopcodeuWebSocketProtocol13._receive_frameTl�umessage too big after decompressionadecodeTuutf-8a_run_callbackaon_messageu>H:nlnato_unicode:lnnl
aon_pingaIOLoopacurrentatimeaon_ponguExecute on_message, returning its Future if it is a coroutine.aclosedl�caremove_timeoutaadd_timeoutlastopuCloses the WebSocket connection.uReturn ``True`` if this connection is closing.

        The connection is considered closing if either side has
        initiated its closing handshake or if the stream has been
        shut down uncleanly.
        amaxllaPeriodicCallbackaperiodic_pingastartuStart sending periodic pings to keep the connection aliveTcuSend a ping to keep the websocket alive

        Called periodically if the websocket_ping_interval is set and non-zero.
        aFutureaconnect_futureaQueueTlaread_queueTlakeya_on_message_callbackaurlapartitionTw:utoo many values to unpack (expected 3)DawsawssahttpahttpsuSec-WebSocket-KeyuSec-WebSocket-Versionu13w,upermessage-deflate; client_max_window_bitsafollow_redirectsaTCPClientatcp_clientuWebSocketClientConnection.__init__.<locals>.<lambda>a_on_http_responsel@laprotocoluCloses the websocket connection.

        ``code`` and ``reason`` are documented under
        `WebSocketHandler.close`.

        .. versionadded:: 3.2

        .. versionchanged:: 4.0

           Added the ``code`` and ``reason`` arguments.
        adoneaset_exceptiona_on_messageTnaerroraWebSocketErrorTuNon-websocket responseastart_lineaResponseStartLineacodeaheaders_receiveda_timeouta_process_server_headersaconnectionaadd_callbackafinal_callbackafuture_set_result_unless_cancelleduWebSocketClientConnection.headers_receivedTuClient connection has been closeduSends a message to the WebSocket server.

        If the stream is closed, raises `WebSocketClosedError`.
        Returns a `.Future` which can be used for flow control.

        .. versionchanged:: 5.0
           Exception raised on a closed stream changed from `.StreamClosedError`
           to `WebSocketClosedError`.
        aawaitableuReads a message from the WebSocket server.

        If on_message_callback was specified at WebSocket
        initialization, this function will never return messages

        Returns a future whose result is the message, or None
        if the connection is closed.  If a callback argument
        is given it will be called with the future when it is
        ready.
        aputuSend ping frame to the remote end.

        The data argument allows a small amount of data (up to 125
        bytes) to be sent as a part of the ping message. Note that not
        all websocket implementations expose this data to
        applications.

        Consider using the ``ping_interval`` argument to
        `websocket_connect` instead of sending pings manually.

        .. versionadded:: 5.1

        Tamask_outgoingaparamsuThe subprotocol selected by the server.

        .. versionadded:: 5.1
        aapp_loguUncaught exception %sahttpclientaHTTPRequestaHTTPHeadersTaconnect_timeouta_RequestProxya_DEFAULTSaWebSocketClientConnectionTaon_message_callbackacompression_optionsaping_intervalaping_timeoutamax_message_sizeasubprotocolsaconnuClient-side websocket support.

    Takes a url and returns a Future whose result is a
    `WebSocketClientConnection`.

    ``compression_options`` is interpreted in the same way as the
    return value of `.WebSocketHandler.get_compression_options`.

    The connection supports two styles of operation. In the coroutine
    style, the application typically calls
    `~.WebSocketClientConnection.read_message` in a loop::

        conn = yield websocket_connect(url)
        while True:
            msg = yield conn.read_message()
            if msg is None: break
            # Do something with msg

    In the callback style, pass an ``on_message_callback`` to
    ``websocket_connect``. In both styles, a message of ``None``
    indicates that the connection has been closed.

    ``subprotocols`` may be a list of strings specifying proposed
    subprotocols. The selected protocol may be found on the
    ``selected_subprotocol`` attribute of the connection object
    when the connection is complete.

    .. versionchanged:: 3.2
       Also accepts ``HTTPRequest`` objects in place of urls.

    .. versionchanged:: 4.1
       Added ``compression_options`` and ``on_message_callback``.

    .. versionchanged:: 4.5
       Added the ``ping_interval``, ``ping_timeout``, and ``max_message_size``
       arguments, which have the same meaning as in `WebSocketHandler`.

    .. versionchanged:: 5.0
       The ``io_loop`` argument (deprecated since version 4.1) has been removed.

    .. versionchanged:: 5.1
       Added the ``subprotocols`` argument.
    uImplementation of the WebSocket protocol.

`WebSockets <http://dev.w3.org/html5/websockets/>`_ allow for bidirectional
communication between the browser and server.

WebSockets are supported in the current versions of all major browsers,
although older versions that do not support WebSockets are still in use
(refer to http://caniuse.com/websockets for details).

This module implements the final version of the WebSocket protocol as
defined in `RFC 6455 <http://tools.ietf.org/html/rfc6455>`_.  Certain
browser versions (notably Safari 5.x) implemented an earlier draft of
the protocol (known as "draft 76") and are not compatible with this module.

.. versionchanged:: 4.0
   Removed support for the draft 76 protocol version.
a__doc__u/usr/local/lib/python3.8/dist-packages/tornado/websocket.pya__file__a__spec__aoriginahas_locationa__cached__aabcutornado.escapeutornado.webuurllib.parseTaurlparseutornado.concurrentTaFutureafuture_set_result_unless_cancelledTautf8anative_strato_unicodeTagenahttpclientahttputilutornado.ioloopTaIOLoopaPeriodicCallbackutornado.iostreamTaStreamClosedErroraIOStreamaIOStreamutornado.logTagen_logaapp_logTasimple_httpclientasimple_httpclientutornado.queuesTaQueueutornado.tcpclientTaTCPClientutornado.utilTa_websocket_maskaTYPE_CHECKINGaAnyaOptionalaDictaUnionaListaAwaitableaCallableaTupleaTypeaTracebackTypel�TEExceptionametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>utornado.websocketa__module__a__qualname__a__orig_bases__uRaised by operations on a closed connection.

    .. versionadded:: 3.2
    TOobjectafloataintastrareturnu_WebSocketParams.__init__aRequestHandleraWebSocketHandleruSubclass this class to create a basic WebSocket handler.

    Override `on_message` to handle incoming messages, and use
    `write_message` to send messages to the client. You can also
    override `open` and `on_close` to handle opened and closed
    connections.

    Custom upgrade response headers can be sent by overriding
    `~tornado.web.RequestHandler.set_default_headers` or
    `~tornado.web.RequestHandler.prepare`.

    See http://dev.w3.org/html5/websockets/ for details on the
    JavaScript interface.  The protocol is specified at
    http://tools.ietf.org/html/rfc6455.

    Here is an example WebSocket handler that echos back all received messages
    back to the client:

    .. testcode::

      class EchoWebSocket(tornado.websocket.WebSocketHandler):
          def open(self):
              print("WebSocket opened")

          def on_message(self, message):
              self.write_message(u"You said: " + message)

          def on_close(self):
              print("WebSocket closed")

    .. testoutput::
       :hide:

    WebSockets are not standard HTTP connections. The "handshake" is
    HTTP, but after the handshake, the protocol is
    message-based. Consequently, most of the Tornado HTTP facilities
    are not available in handlers of this type. The only communication
    methods available to you are `write_message()`, `ping()`, and
    `close()`. Likewise, your request handler class should implement
    `open()` method rather than ``get()`` or ``post()``.

    If you map the handler above to ``/websocket`` in your application, you can
    invoke it in JavaScript with::

      var ws = new WebSocket("ws://localhost:8888/websocket");
      ws.onopen = function() {
         ws.send("Hello, world");
      };
      ws.onmessage = function (evt) {
         alert(evt.data);
      };

    This script pops up an alert box that says "You said: Hello, world".

    Web browsers allow any site to open a websocket connection to any other,
    instead of using the same-origin policy that governs other network
    access from JavaScript.  This can be surprising and is a potential
    security hole, so since Tornado 4.0 `WebSocketHandler` requires
    applications that wish to receive cross-origin websockets to opt in
    by overriding the `~WebSocketHandler.check_origin` method (see that
    method's docs for details).  Failure to do so is the most likely
    cause of 403 errors when making a websocket connection.

    When using a secure websocket connection (``wss://``) with a self-signed
    certificate, the connection from a browser may fail because it wants
    to show the "accept this certificate" dialog but has nowhere to show it.
    You must first visit a regular HTML page using the same certificate
    to accept it before the websocket connection will succeed.

    If the application setting ``websocket_ping_interval`` has a non-zero
    value, a ping will be sent periodically, and the connection will be
    closed if a response is not received before the ``websocket_ping_timeout``.

    Messages larger than the ``websocket_max_message_size`` application setting
    (default 10MiB) will not be accepted.

    .. versionchanged:: 4.5
       Added ``websocket_ping_interval``, ``websocket_ping_timeout``, and
       ``websocket_max_message_size``.
    aapplicationaApplicationaHTTPServerRequestuWebSocketHandler.__init__apropertyuWebSocketHandler.ping_intervaluWebSocketHandler.ping_timeoutuWebSocketHandler.max_message_sizeTFabytesabinaryabooluFuture[None]uWebSocketHandler.write_messageasubprotocolsuOverride to implement subprotocol negotiation.

        ``subprotocols`` is a list of strings identifying the
        subprotocols proposed by the client.  This method may be
        overridden to return one of those strings to select it, or
        ``None`` to not select a subprotocol.

        Failure to select a subprotocol does not automatically abort
        the connection, although clients may close the connection if
        none of their proposed subprotocols was selected.

        The list may be empty, in which case this method must return
        None. This method is always called exactly once even if no
        subprotocols were proposed so that the handler can be advised
        of this fact.

        .. versionchanged:: 5.1

           Previously, this method was called with a list containing
           an empty string instead of an empty list if no subprotocols
           were proposed by the client.
        uWebSocketHandler.select_subprotocoluWebSocketHandler.selected_subprotocoluOverride to return compression options for the connection.

        If this method returns None (the default), compression will
        be disabled.  If it returns a dict (even an empty one), it
        will be enabled.  The contents of the dict may be used to
        control the following compression options:

        ``compression_level`` specifies the compression level.

        ``mem_level`` specifies the amount of memory used for the internal compression state.

         These parameters are documented in details here:
         https://docs.python.org/3.6/library/zlib.html#zlib.compressobj

        .. versionadded:: 4.1

        .. versionchanged:: 4.5

           Added ``compression_level`` and ``mem_level``.
        uWebSocketHandler.get_compression_optionsuInvoked when a new WebSocket is opened.

        The arguments to `open` are extracted from the `tornado.web.URLSpec`
        regular expression, just like the arguments to
        `tornado.web.RequestHandler.get`.

        `open` may be a coroutine. `on_message` will not be called until
        `open` has returned.

        .. versionchanged:: 5.1

           ``open`` may be a coroutine.
        uWebSocketHandler.openuWebSocketHandler.on_messageapinguWebSocketHandler.pinguInvoked when the response to a ping frame is received.uWebSocketHandler.on_ponguInvoked when the a ping frame is received.uWebSocketHandler.on_pinguInvoked when the WebSocket is closed.

        If the connection was closed cleanly and a status code or reason
        phrase was supplied, these values will be available as the attributes
        ``self.close_code`` and ``self.close_reason``.

        .. versionchanged:: 4.0

           Added ``close_code`` and ``close_reason`` attributes.
        uWebSocketHandler.on_closeTnnareasonuWebSocketHandler.closeuWebSocketHandler.check_originavalueuWebSocketHandler.set_nodelayuWebSocketHandler.on_connection_closeuWebSocketHandler.on_ws_connection_closeuWebSocketHandler._break_cyclesuWebSocketHandler.get_websocket_protocoluWebSocketHandler._detach_streamaABCuBase class for WebSocket protocol versions.Dahandlerareturna_WebSocketDelegatenuWebSocketProtocol.__init__acallbackuOptional[Future[Any]]uWebSocketProtocol._run_callbackuWebSocketProtocol.on_connection_closeuWebSocketProtocol._abortaabstractmethoduWebSocketProtocol.closeuWebSocketProtocol.is_closinguWebSocketProtocol.write_messageuWebSocketProtocol.selected_subprotocoluWebSocketProtocol.write_pinguWebSocketProtocol._process_server_headersuWebSocketProtocol.start_pingingwxuWebSocketProtocol.set_nodelayu_PerMessageDeflateCompressor.__init__Dareturna_Compressoru_PerMessageDeflateCompressor._create_compressoru_PerMessageDeflateCompressor.compressu_PerMessageDeflateDecompressor.__init__Dareturna_Decompressoru_PerMessageDeflateDecompressor._create_decompressoru_PerMessageDeflateDecompressor.decompressuImplementation of the WebSocket protocol from RFC 6455.

    This class supports versions 7 and 8 of the protocol in addition to the
    final version 13.
    l@l aRSV2laRSV3la_WebSocketDelegateuWebSocketProtocol13.__init__uWebSocketProtocol13.selected_subprotocolasetteruWebSocketProtocol13._handle_websocket_headersastaticmethoduWebSocketProtocol13.compute_accept_valueuWebSocketProtocol13._challenge_responseuWebSocketProtocol13._parse_extensions_headeruWebSocketProtocol13._process_server_headersasideaagreed_parametersuWebSocketProtocol13._get_compressor_optionsuWebSocketProtocol13._create_compressorsTlafinaflagsuWebSocketProtocol13._write_frameuWebSocketProtocol13.write_messageuWebSocketProtocol13.write_pinguOptional[Future[None]]uWebSocketProtocol13._handle_messageuWebSocketProtocol13.closeuWebSocketProtocol13.is_closinguWebSocketProtocol13.ping_intervaluWebSocketProtocol13.ping_timeoutuWebSocketProtocol13.start_pinginguWebSocketProtocol13.periodic_pinguWebSocketProtocol13.set_nodelaya_HTTPConnectionuWebSocket client connection.

    This class should not be instantiated directly; use the
    `websocket_connect` function instead.
    aon_message_callbackuWebSocketClientConnection.__init__uWebSocketClientConnection.closeuWebSocketClientConnection.on_connection_closeuWebSocketClientConnection.on_ws_connection_closearesponseaHTTPResponseuWebSocketClientConnection._on_http_responseaRequestStartLineuWebSocketClientConnection.write_messageTLuFuture[Union[None, str, bytes]]naread_messageuWebSocketClientConnection.read_messageuWebSocketClientConnection.on_messageuWebSocketClientConnection._on_messageuWebSocketClientConnection.pinguWebSocketClientConnection.on_ponguWebSocketClientConnection.on_pinguWebSocketClientConnection.get_websocket_protocoluWebSocketClientConnection.selected_subprotocolatypuOptional[Type[BaseException]]aBaseExceptionatbuWebSocketClientConnection.log_exceptionTLuFuture[WebSocketClientConnection]naconnect_timeoutTnOstrObytesuAwaitable[WebSocketClientConnection]awebsocket_connectTwfTwfahandlerTahandlerTwsu<listcomp>Tweu<module tornado.websocket>Ta__class__Taselfaapplicationarequestakwargsa__class__TaselfahandlerTaselfahandleramask_outgoingaparamsTaselfapersistentamax_wbitsacompression_optionsTaselfapersistentamax_wbitsamax_message_sizeacompression_optionsTaselfaping_intervalaping_timeoutamax_message_sizeacompression_optionsTaselfarequestaon_message_callbackacompression_optionsaping_intervalaping_timeoutamax_message_sizeasubprotocolsaschemeaseparesta__class__TaselfTaselfahandlerasubprotocol_headerasubprotocolsaextensionsaextaopen_resultTaselfa__class__Taselfasideaagreed_parametersacompression_optionsaallowed_keysakeyaother_sideTaselfamethodTaselfasideaagreed_parametersacompression_optionsaoptionsawbits_headerTaselfaopcodeadataadecodedTaselfahandlerafieldsTaselfaresponseTaselfamessageTaselfaheadersaextensionsTaselfakeyaheadersTaselfakeyaheadersaacceptaextensionsaextTaargsakwargsTaselfwnadataTaselfadataaheaderamask_payloadlenais_final_frameareserved_bitsaopcodeaopcode_is_controlais_maskedapayloadlenanew_lenahandled_futureTaselfacallbackaargsakwargsaresultT
aselfafinaopcodeadataaflagsadata_lenafinbitaframeamask_bitamaskTaselfahandleralog_msgTaselfaoriginaparsed_originahostTaselfacodeareasonTaselfacodeareasonaclose_dataTaselfadataacompressorTakeyasha1TaselfadataadecompressoraresultTaselfaargsakwargsalog_msgaheadersaconnectionaoriginTaselfawebsocket_versionaparamsTaselfastart_lineaheadersa__class__TaselfatypavalueatbTaselfadataTaselfaclose_codeaclose_reasonTaselfaargsakwargsTaselfanowasince_last_pongasince_last_pingTaselfaintervalTaselfatimeoutTaselfacallbackaawaitableTaselfasubprotocolsTaselfavalueTaselfwxTaurlacallbackaconnect_timeoutaon_message_callbackacompression_optionsaping_intervalaping_timeoutamax_message_sizeasubprotocolsarequestaconnTafutTaselfamessageabinaryTaselfamessageabinaryaopcodeaflagsafutawrapperu.urllib3._collectionsu�a_maxsizeadispose_funcaContainerClsa_containeraRLockalocka__enter__a__exit__apopTnnna_NullagetapopitemTFTalastutoo many values to unpack (expected 2)avalueuIteration over this class is unlikely to be threadsafe.aitervaluesaclearavaluesaselfaiterkeysaHTTPHeaderDicta__init__aOrderedDicta_copy_fromaextendaloweru, :lnnaMappingakeysaitermergedu<genexpr>uHTTPHeaderDict.__eq__.<locals>.<genexpr>a__eq__la__iter__uHTTPHeaderDict.__iter__a_HTTPHeaderDict__markeruD.pop(k[,d]) -> v, remove specified key and return the corresponding value.
          If key is not found, d is returned if given, otherwise KeyError is raised.
        asetdefaultaappenduAdds a (name, value) pair, doesn't overwrite the value if it already
        exists.

        >>> headers = HTTPHeaderDict(foo='bar')
        >>> headers.add('Foo', 'baz')
        >>> headers['foo']
        'bar, baz'
        uextend() takes at most 1 positional arguments ({0} given)TaiteritemsaadduGeneric import function for any type of header-like object.
        Adapted version of MutableMapping.update in order to insert items
        with self.add instead of self.__setitem__
        uReturns a list of all the values for the named field. Returns an
        empty list if the key doesn't exist.u%s(%s)a__name__aotheragetlistuIterate over all header lines, including duplicate ones.uHTTPHeaderDict.iteritemsuIterate over all headers, merging duplicate ones together.uHTTPHeaderDict.itermergedTw w	aheadersastartswithaobs_fold_continued_leadersaInvalidHeaderuHeader continuation with no previous header: %sl��������w astripasplitTw:luRead headers from a Python 2 httplib message object.a__doc__u/usr/lib/python3/dist-packages/urllib3/_collections.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importucollections.abcTaMappingaMutableMappingaMutableMappingacollectionsathreadingTaRLockametaclassa__prepare__TaRLockTa__getitem__u%s.__prepare__() must return a mapping, not %su<metaclass>uurllib3._collectionsa__module__a__qualname__uRLock.__enter__uRLock.__exit__TaOrderedDictaexceptionsTaInvalidHeaderlasixTaiterkeysaitervaluesaPY3aPY3LaRecentlyUsedContaineraHTTPHeaderDicta__all__aRecentlyUsedContaineru
    Provides a thread-safe dict-like container which maintains up to
    ``maxsize`` keys while throwing away the least-recently-used keys beyond
    ``maxsize``.

    :param maxsize:
        Maximum number of recent elements to retain.

    :param dispose_func:
        Every time an item is evicted from the container,
        ``dispose_func(value)`` is called.  Callback which will get called
    Tl
nuRecentlyUsedContainer.__init__uRecentlyUsedContainer.__getitem__a__setitem__uRecentlyUsedContainer.__setitem__a__delitem__uRecentlyUsedContainer.__delitem__a__len__uRecentlyUsedContainer.__len__uRecentlyUsedContainer.__iter__uRecentlyUsedContainer.clearuRecentlyUsedContainer.keysa__orig_bases__u
    :param headers:
        An iterable of field-value pairs. Must not contain multiple field names
        when compared case-insensitively.

    :param kwargs:
        Additional field-value pairs to pass in to ``dict.update``.

    A ``dict`` like container for storing HTTP Headers.

    Field names are stored and compared case-insensitively in compliance with
    RFC 7230. Iteration provides the first case-sensitive key seen for each
    case-insensitive pair.

    Using ``__setitem__`` syntax overwrites fields that compare equal
    case-insensitively in order to maintain ``dict``'s api. For fields that
    compare equal, instead create a new ``HTTPHeaderDict`` and use ``.add``
    in a loop.

    If multiple fields that are equal case-insensitively are passed to the
    constructor or ``.update``, the behavior is undefined and some will be
    lost.

    >>> headers = HTTPHeaderDict()
    >>> headers.add('Set-Cookie', 'foo=bar')
    >>> headers.add('set-cookie', 'baz=quxx')
    >>> headers['content-length'] = '7'
    >>> headers['SET-cookie']
    'foo=bar, baz=quxx'
    >>> headers['Content-Length']
    '7'
    TnuHTTPHeaderDict.__init__uHTTPHeaderDict.__setitem__uHTTPHeaderDict.__getitem__uHTTPHeaderDict.__delitem__a__contains__uHTTPHeaderDict.__contains__uHTTPHeaderDict.__eq__a__ne__uHTTPHeaderDict.__ne__aobjectuHTTPHeaderDict.__len__uHTTPHeaderDict.popadiscarduHTTPHeaderDict.discarduHTTPHeaderDict.adduHTTPHeaderDict.extenduHTTPHeaderDict.getlistagetheadersagetallmatchingheadersaigetaget_alla__repr__uHTTPHeaderDict.__repr__uHTTPHeaderDict._copy_fromacopyuHTTPHeaderDict.copyaitemsuHTTPHeaderDict.itemsaclassmethodafrom_httplibuHTTPHeaderDict.from_httplibTa.0wkwvu<module urllib3._collections>Ta__class__TaselfakeyTaselfakeyavalueTaselfTaselfaotherTaselfaexc_typeaexc_valueatracebackTaselfakeyaitemTaselfakeyavalTaselfaheadersakwargsa__class__Taselfamaxsizeadispose_funcTaselfavalsTaselfakeyavalueaevicted_valuea_keyTaselfaotherakeyavalTaselfakeyavalakey_loweranew_valsavalsTaselfavaluesavalueTaselfacloneTaselfaargsakwargsaotherakeyavalavalueTaclsamessageaobs_fold_continued_leadersaheadersalineakeyavalueTaselfakeyadefaultavalsTaselfakeyavalsavalTaselfakeyadefaultavalueu.urllib3.connectionN�asixaPY2astrictakwagetTasource_addressasource_addressapopasocket_optionsadefault_socket_optionsa_HTTPConnectiona__init__a_dns_hostarstripTw.u
        Getter method to remove any trailing dots that indicate the hostname is an FQDN.

        In general, SSL certificates don't include the trailing dot indicating a
        fully-qualified domain name, and thus, they don't validate properly when
        checked against a domain name that includes the dot. In addition, some
        servers may not expect to receive the trailing dot when provided.

        However, the hostname with trailing dot is critical to DNS resolution; doing a
        lookup with the trailing dot will properly only resolve the appropriate FQDN,
        whereas a lookup without a trailing dot will search the system's search domain
        list. Thus, it's important to keep the original host around for use only in
        those cases where it's appropriate (i.e., when doing DNS lookup to establish the
        actual TCP connection across which we're going to send HTTP requests).
        u
        Setter for the `host` property.

        We assume that only urllib3 uses the _dns_host attribute; httplib itself
        only uses `host`, and it seems reasonable that other libraries follow suit.
        aextra_kwaconnectionacreate_connectionaportatimeoutaSocketTimeoutaConnectTimeoutErroruConnection to %s timed out. (connect timeout=%s)ahostaSocketErroraNewConnectionErroruFailed to establish a new connection: %su Establish a socket connection and set nodelay settings on it.

        :return: New socket connection.
        asocka_tunnel_hosta_tunnellaauto_opena_new_conna_prepare_conna_CONTAINS_CONTROL_CHAR_REasearchuMethod cannot contain non-token characters %r (found at least %r)agroupaputrequestuSend a request to the serveraHTTPHeaderDictuaccept-encodingTaskip_accept_encodingaskip_hostaitemsutoo many values to unpack (expected 2)aselfaputheaderutransfer-encodingTuTransfer-Encodingachunkedaendheadersastring_typesTObytesaencodeTautf8:lnnasendTuutf-8Tc
Tc0

u
        Alternative to the common request method, which sends the
        body with chunked encoding and not as one block
        aHTTPConnectionakey_fileacert_fileakey_passwordassl_contextaserver_hostnameahttpsa_protocolaverify_modearesolve_cert_reqsTnacert_reqsaassert_hostnameaassert_fingerprintaexpanduseraca_certsaca_cert_diru
        This method should only be called once, before the connection is used.
        adatetimeadateatodayaRECENT_DATEawarningsawarnuSystem time is way off (before {0}). This will probably lead to SSL verification errorsaSystemTimeWarningacreate_urllib3_contextaresolve_ssl_versionassl_versionTassl_versionacert_reqsaload_default_certsassl_wrap_socketacontextTasockakeyfileacertfileakey_passwordaca_certsaca_cert_diraserver_hostnameassl_contextagetpeercertTtTabinary_formasslaCERT_NONEacheck_hostnameTasubjectAltNameTuCertificate for {0} has no `subjectAltName`, falling back to check for a `commonName` for now. This feature is being removed by major browsers and deprecated by RFC 2818. (See https://github.com/urllib3/urllib3/issues/497 for details.)aSubjectAltNameWarninga_match_hostnameaCERT_REQUIREDais_verifiedamatch_hostnameaCertificateErroralogawarninguCertificate did not match expected hostname: %s. Certificate: %saasserted_hostnameacerta_peer_certa__doc__u/usr/lib/python3/dist-packages/urllib3/connection.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importarealoggingaosasocketTaerroratimeoutaerrorusix.moves.http_clientTaHTTPConnectionTaHTTPExceptionaHTTPExceptionaSSLErroraBaseSSLErrorTEImportErrorEAttributeErrorTEBaseExceptionametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uurllib3.connectiona__module__a__qualname__a__orig_bases__aConnectionErrorTEExceptionaexceptionsTaNewConnectionErroraConnectTimeoutErroraSubjectAltNameWarningaSystemTimeWarninglupackages.ssl_match_hostnameTamatch_hostnameaCertificateErroruutil.ssl_Taresolve_cert_reqsaresolve_ssl_versionaassert_fingerprintacreate_urllib3_contextassl_wrap_socketautilTaconnectiona_collectionsTaHTTPHeaderDictagetLoggerTuurllib3.connectionDahttpahttpslPl�aport_by_schemeTl�lpacompileTu[^-!#$%&'*+.^_`|~0-9a-zA-Z]TOobjectaDummyConnectionuUsed to detect a failed ConnectionCls import.u
    Based on httplib.HTTPConnection but provides an extra constructor
    backwards-compatibility layer between older and newer Pythons.

    Additional keyword parameters are used to configure attributes of the connection.
    Accepted parameters include:

      - ``strict``: See the documentation on :class:`urllib3.connectionpool.HTTPConnectionPool`
      - ``source_address``: Set the source address for the current connection.
      - ``socket_options``: Set specific options on the underlying socket. If not specified, then
        defaults are loaded from ``HTTPConnection.default_socket_options`` which includes disabling
        Nagle's algorithm (sets TCP_NODELAY to 1) unless the connection is behind a proxy.

        For example, if you wish to enable TCP Keep Alive in addition to the defaults,
        you might pass::

            HTTPConnection.default_socket_options + [
                (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1),
            ]

        Or you may want to disable the defaults by passing an empty list (e.g., ``[]``).
    ahttpadefault_portaIPPROTO_TCPaTCP_NODELAYuHTTPConnection.__init__apropertyuHTTPConnection.hostasetteruHTTPConnection._new_connuHTTPConnection._prepare_connaconnectuHTTPConnection.connectuHTTPConnection.putrequestTnnarequest_chunkeduHTTPConnection.request_chunkedaHTTPSConnectiona_GLOBAL_DEFAULT_TIMEOUTuHTTPSConnection.__init__aVerifiedHTTPSConnectionu
    Based on httplib.HTTPSConnection but wraps the socket with
    SSL certification.
    Tnnnnnnnnaset_certuVerifiedHTTPSConnection.set_certuVerifiedHTTPSConnection.connectaUnverifiedHTTPSConnectionu<module urllib3.connection>Ta__class__TaselfaargsakwTaselfahostaportakey_fileacert_fileakey_passwordastrictatimeoutassl_contextaserver_hostnameakwTacertaasserted_hostnameweTaselfaextra_kwaconnweTaselfaconnTaselfaconnahostnameaserver_hostnameais_time_offadefault_ssl_contextacontextacertTaselfTaselfavalueTaselfamethodaurlaargsakwargsamatchTaselfamethodaurlabodyaheadersaskip_accept_encodingaskip_hostaheaderavalueastringish_typesachunkalen_strT	aselfakey_fileacert_fileacert_reqsakey_passwordaca_certsaassert_hostnameaassert_fingerprintaca_cert_diru.urllib3.connectionpool�BOaLocationValueErrorTuNo host specified.a_normalize_hostaschemeTaschemeahostalowera_proxy_hostaportu%s(host=%r, port=%r)a__name__acloseaConnectionPoola__init__aRequestMethodsastrictaTimeoutafrom_floataRetryaDEFAULTatimeoutaretriesaQueueClsapoolablockaproxyaproxy_headersaxrangeaselfaputTnlanum_connectionsanum_requestsaconn_kwasetdefaultasocket_optionslalogadebuguStarting new HTTP connection (%d): %s:%su80aConnectionClsaconnect_timeoutu
        Return a fresh :class:`HTTPConnection`.
        agetTablockatimeoutaClosedPoolErroruPool is closed.aqueueaEmptyaEmptyPoolErroruPool reached maximum size and no more connections are allowed.ais_connection_droppeduResetting dropped connection: %saconnaauto_opena_new_connu
        Get a connection. Will return a pooled connection if one is available.

        If no connections are available and :prop:`.block` is ``False``, then a
        fresh connection is returned.

        :param timeout:
            Seconds to wait before giving up and raising
            :class:`urllib3.exceptions.EmptyPoolError` if the pool is empty and
            :prop:`.block` is ``True``.
        DablockFaFullawarninguConnection pool is full, discarding connection: %su
        Put a connection back into the pool.

        :param conn:
            Connection object for the current host and port as returned by
            :meth:`._new_conn` or :meth:`._get_conn`.

        If the pool is already full, the connection is closed and discarded
        because we exceeded maxsize. If connections are discarded frequently,
        then maxsize should be increased.

        If the pool is closed, then the connection will be closed and discarded.
        a_Defaultacloneu Helper that always returns a :class:`urllib3.util.Timeout` aSocketTimeoutaReadTimeoutErroruRead timed out. (read timeout=%s)aerrnoa_blocking_errnosutimed outaerrudid not complete (read)uIs the error actually a timeout? Will raise a ReadTimeout or passa_get_timeoutastart_connecta_validate_connaBaseSSLErrora_raise_timeoutTaerraurlatimeout_valuearequest_chunkedarequestaread_timeoutasockaDEFAULT_TIMEOUTasettimeoutasocketagetdefaulttimeoutagetresponseTtTabufferingasixaraise_fromaSocketErrora_http_vsn_struHTTP/?u%s://%s:%s "%s %s %s" %s %sahttplib_responseastatusalengthaassert_header_parsingamsgaHeaderParsingErroruFailed to parse headers (url=%s): %sa_absolute_urlDaexc_infotu
        Perform a request on a given urllib connection object taken from our
        pool.

        :param conn:
            a connection from one of our connection pools

        :param timeout:
            Socket timeout in seconds for the request. This can be a
            float or integer, which will set the same timeout value for
            the socket connect and the socket read, or an instance of
            :class:`urllib3.util.Timeout`, which gives you more fine-grained
            control over your timeouts.
        aUrlTaschemeahostaportapathaurlutoo many values to unpack (expected 2)aold_poolTFTablocku
        Close all pooled connections and disable the pool.
        astartswithTw/aget_hostutoo many values to unpack (expected 3)aport_by_schemeu
        Check if the given ``url`` is a member of the same host as this
        connection pool.
        aheadersafrom_intTaredirectadefaultapreload_contentais_same_hostaHostChangedErroraensure_stra_encode_targetaparse_urlahttpacopyaupdateaset_file_positiona_get_connTatimeouta_prepare_proxya_make_requestTatimeoutabodyaheadersachunkedarequest_methodaResponseClsafrom_httplibaconnectionuNo pool connections are available.aTimeoutErroraHTTPExceptionaProtocolErroraSSLErroraCertificateErroraNewConnectionErroraProxyErroruCannot connect to proxy.uConnection aborted.aincrementasysaexc_infolTaerrora_poola_stacktraceasleepa_put_connuRetrying (%r) after connection broken by '%r': %saurlopenaredirectapool_timeoutarelease_connachunkedabody_posadrain_and_release_connuHTTPConnectionPool.urlopen.<locals>.drain_and_release_connaresponseaget_redirect_locationl/aGETamethodTaresponsea_poolaMaxRetryErroraraise_on_redirectasleep_for_retryuRedirecting %s -> %saassert_same_hostagetheaderTuRetry-Afterais_retryaraise_on_statusuRetry: %su
        Get a connection from the pool and perform an HTTP request. This is the
        lowest level call for making a request, so you'll need to specify all
        the raw details.

        .. note::

           More commonly, it's appropriate to use a convenience method provided
           by :class:`.RequestMethods`, such as :meth:`request`.

        .. note::

           `release_conn` will only behave as expected if
           `preload_content=False` because we want to make
           `preload_content=False` the default behaviour someday soon without
           breaking backwards compatibility.

        :param method:
            HTTP request method (such as GET, POST, PUT, etc.)

        :param body:
            Data to send in the request body (useful for creating
            POST requests, see HTTPConnectionPool.post_url for
            more convenience).

        :param headers:
            Dictionary of custom headers to send, such as User-Agent,
            If-None-Match, etc. If None, pool headers are used. If provided,
            these headers completely replace any pool-specific headers.

        :param retries:
            Configure the number of retries to allow before raising a
            :class:`~urllib3.exceptions.MaxRetryError` exception.

            Pass ``None`` to retry until you receive a response. Pass a
            :class:`~urllib3.util.retry.Retry` object for fine-grained control
            over different types of retries.
            Pass an integer number to retry connection errors that many times,
            but no other types of errors. Pass zero to never retry.

            If ``False``, then retries are disabled and any exception is raised
            immediately. Also, instead of raising a MaxRetryError on redirects,
            the redirect response will be returned.

        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.

        :param redirect:
            If True, automatically handle redirects (status codes 301, 302,
            303, 307, 308). Each redirect counts as a retry. Disabling retries
            will disable redirect, too.

        :param assert_same_host:
            If ``True``, will make sure that the host of the pool requests is
            consistent else will raise HostChangedError. When False, you can
            use the pool on an HTTP proxy and request foreign hosts.

        :param timeout:
            If specified, overrides the default timeout for this one
            request. It may be a float (in seconds) or an instance of
            :class:`urllib3.util.Timeout`.

        :param pool_timeout:
            If set and the pool is set to block=True, then this method will
            block for ``pool_timeout`` seconds and raise EmptyPoolError if no
            connection is available within the time period.

        :param release_conn:
            If False, then the urlopen call will not release the connection
            back into the pool once a response is received (but will release if
            you read the entire contents of the response such as when
            `preload_content=True`). This is useful if you're not preloading
            the response's content immediately. You will need to call
            ``r.release_conn()`` on the response ``r`` to return the connection
            back into the pool. If None, it takes the value of
            ``response_kw.get('preload_content', True)``.

        :param chunked:
            If True, urllib3 will send the body using chunked transfer
            encoding. Otherwise, urllib3 will send the body using the standard
            content-length form. Defaults to False.

        :param int body_pos:
            Position to seek to in file-like body in the event of a retry or
            redirect. Typically this won't need to be set because urllib3 will
            auto-populate the value when needed.

        :param \**response_kw:
            Additional parameters are passed to
            :meth:`urllib3.response.HTTPResponse.from_httplib`
        areadaHTTPConnectionPoolakey_fileacert_fileacert_reqsakey_passwordaca_certsaca_cert_dirassl_versionaassert_hostnameaassert_fingerprintaVerifiedHTTPSConnectionaset_certTakey_fileakey_passwordacert_fileacert_reqsaca_certsaca_cert_diraassert_hostnameaassert_fingerprintu
        Prepare the ``connection`` for :meth:`urllib3.util.ssl_wrap_socket`
        and establish the tunnel if proxy is used.
        aset_tunnelaconnectu
        Establish tunnel connection early, because otherwise httplib
        would improperly set Host: header to proxy's IP:port.
        uStarting new HTTPS connection (%d): %s:%su443aDummyConnectionTuCan't connect to HTTPS URL because the SSL module is not available.a_prepare_connu
        Return a fresh :class:`httplib.HTTPSConnection`.
        aHTTPSConnectionPoolais_verifiedawarningsawarnuUnverified HTTPS request is being made to host '%s'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warningsaInsecureRequestWarningu
        Called right before a request is made, after the socket is created.
        lPahttpsu
    Given a url, return an :class:`.ConnectionPool` instance of its host.

    This is a shortcut for not having to parse out the scheme, host, and port
    of the url before creating an :class:`.ConnectionPool` instance.

    :param url:
        Absolute URL string that must include the scheme. Port is optional.

    :param \**kw:
        Passes additional parameters to the constructor of the appropriate
        :class:`.ConnectionPool`. Useful for specifying things like
        timeout, maxsize, headers, etc.

    Example::

        >>> conn = connection_from_url('http://google.com/')
        >>> r = conn.request('GET', '/')
    anormalize_hostTw[aendswithTw]:ll��������nu
    Normalize hosts for comparisons and use with sockets.
    a__doc__u/usr/lib/python3/dist-packages/urllib3/connectionpool.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importaloggingTaerroratimeoutaerroraexceptionsT
aClosedPoolErroraProtocolErroraEmptyPoolErroraHeaderParsingErroraHostChangedErroraLocationValueErroraMaxRetryErroraProxyErroraReadTimeoutErroraSSLErroraTimeoutErroraInsecureRequestWarningaNewConnectionErrorupackages.ssl_match_hostnameTaCertificateErrorusix.movesTaqueueTaport_by_schemeaDummyConnectionaHTTPConnectionaHTTPSConnectionaVerifiedHTTPSConnectionaHTTPExceptionaBaseSSLErroraHTTPConnectionaHTTPSConnectionTaRequestMethodsTaHTTPResponseaHTTPResponseuutil.connectionTais_connection_droppeduutil.requestTaset_file_positionuutil.responseTaassert_header_parsinguutil.retryTaRetryuutil.timeoutTaTimeoutuutil.urlTaget_hostaparse_urlaUrla_normalize_hosta_encode_targetuutil.queueTaLifoQueueaLifoQueueamovesagetLoggerTuurllib3.connectionpoolTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %su<metaclass>uurllib3.connectionpoola__module__u
    Base class for all connection pools, such as
    :class:`.HTTPConnectionPool` and :class:`.HTTPSConnectionPool`.
    a__qualname__uConnectionPool.__init__a__str__uConnectionPool.__str__a__enter__uConnectionPool.__enter__a__exit__uConnectionPool.__exit__uConnectionPool.closea__orig_bases__aEAGAINaEWOULDBLOCKu
    Thread-safe connection pool for one host.

    :param host:
        Host used for this HTTP Connection (e.g. "localhost"), passed into
        :class:`httplib.HTTPConnection`.

    :param port:
        Port used for this HTTP Connection (None is equivalent to 80), passed
        into :class:`httplib.HTTPConnection`.

    :param strict:
        Causes BadStatusLine to be raised if the status line can't be parsed
        as a valid HTTP/1.0 or 1.1 status line, passed into
        :class:`httplib.HTTPConnection`.

        .. note::
           Only works in Python 2. This parameter is ignored in Python 3.

    :param timeout:
        Socket timeout in seconds for each individual connection. This can
        be a float or integer, which sets the timeout for the HTTP request,
        or an instance of :class:`urllib3.util.Timeout` which gives you more
        fine-grained control over request timeouts. After the constructor has
        been parsed, this is always a `urllib3.util.Timeout` object.

    :param maxsize:
        Number of connections to save that can be reused. More than 1 is useful
        in multithreaded situations. If ``block`` is set to False, more
        connections will be created but they will not be saved once they've
        been used.

    :param block:
        If set to True, no more than ``maxsize`` connections will be used at
        a time. When no free connections are available, the call will block
        until a connection has been released. This is a useful side effect for
        particular multithreaded situations where one does not want to use more
        than maxsize connections per host to prevent flooding.

    :param headers:
        Headers to include with all requests, unless other headers are given
        explicitly.

    :param retries:
        Retry configuration to use by default with requests in this pool.

    :param _proxy:
        Parsed proxy URL, should not be used directly, instead, see
        :class:`urllib3.connectionpool.ProxyManager`"

    :param _proxy_headers:
        A dictionary with proxy headers, should not be used directly,
        instead, see :class:`urllib3.connectionpool.ProxyManager`"

    :param \**conn_kw:
        Additional parameters are used to create fresh :class:`urllib3.connection.HTTPConnection`,
        :class:`urllib3.connection.HTTPSConnection` instances.
    uHTTPConnectionPool.__init__uHTTPConnectionPool._new_connuHTTPConnectionPool._get_connuHTTPConnectionPool._put_connuHTTPConnectionPool._validate_connuHTTPConnectionPool._prepare_proxyuHTTPConnectionPool._get_timeoutuHTTPConnectionPool._raise_timeoutuHTTPConnectionPool._make_requestuHTTPConnectionPool._absolute_urluHTTPConnectionPool.closeuHTTPConnectionPool.is_same_hostuHTTPConnectionPool.urlopenu
    Same as :class:`.HTTPConnectionPool`, but HTTPS.

    When Python is compiled with the :mod:`ssl` module, then
    :class:`.VerifiedHTTPSConnection` is used, which *can* verify certificates,
    instead of :class:`.HTTPSConnection`.

    :class:`.VerifiedHTTPSConnection` uses one of ``assert_fingerprint``,
    ``assert_hostname`` and ``host`` in this order to verify connections.
    If ``assert_hostname`` is False, no verification is done.

    The ``key_file``, ``cert_file``, ``cert_reqs``, ``ca_certs``,
    ``ca_cert_dir``, ``ssl_version``, ``key_password`` are only used if :mod:`ssl`
    is available and are fed into :meth:`urllib3.util.ssl_wrap_socket` to upgrade
    the connection socket into an SSL socket.

    On Debian, SSL certificate validation is required by default
    aCERT_REQUIREDu/etc/ssl/certs/ca-certificates.crtuHTTPSConnectionPool.__init__uHTTPSConnectionPool._prepare_connuHTTPSConnectionPool._prepare_proxyuHTTPSConnectionPool._new_connuHTTPSConnectionPool._validate_connaconnection_from_urlu<module urllib3.connectionpool>Ta__class__TaselfTaselfaexc_typeaexc_valaexc_tbTaselfahostaportT
aselfahostaportastrictatimeoutamaxsizeablockaheadersaretriesa_proxya_proxy_headersaconn_kww_Taselfahostaportastrictatimeoutamaxsizeablockaheadersaretriesa_proxya_proxy_headersakey_fileacert_fileacert_reqsakey_passwordaca_certsassl_versionaassert_hostnameaassert_fingerprintaca_cert_diraconn_kwTaselfapathTaselfatimeoutaconnTaselfatimeoutT
aselfaconnamethodaurlatimeoutachunkedahttplib_request_kwatimeout_objwearead_timeoutahttplib_responseahttp_versionahpeTaselfaactual_hostaactual_portaconnTaselfaconnTahostaschemeTaselfaerraurlatimeout_valueTaselfaconna__class__Taselfaold_poolaconnTaurlakwaschemeahostaportTaresponseTaselfaurlaschemeahostaportTaselfamethodaurlabodyaheadersaretriesaredirectaassert_same_hostatimeoutapool_timeoutarelease_connachunkedabody_posaresponse_kwaconnarelease_this_connaerraclean_exitatimeout_objais_new_proxy_connahttplib_responsearesponse_connaresponseweadrain_and_release_connaredirect_locationahas_retry_afteru.urllib3LUaloggingagetLoggerTaurllib3aStreamHandlerasetFormatteraFormatterTu%(asctime)s %(levelname)s %(message)saaddHandlerasetLeveladebugTuAdded a stderr logging handler to logger: %saurllib3u
    Helper for quickly adding a StreamHandler to the logger. Useful for
    debugging.

    Returns the handler after adding it.
    awarningsasimplefilteraignoreu
    Helper for quickly disabling all urllib3 warnings.
    u
urllib3 - Thread-safe connection pooling and re-using.
a__doc__u/usr/lib/python3/dist-packages/urllib3/__init__.pya__file__Lu/usr/lib/python3/dist-packages/urllib3a__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aabsolute_importaconnectionpoolTaHTTPConnectionPoolaHTTPSConnectionPoolaconnection_from_urllaHTTPConnectionPoolaHTTPSConnectionPoolaconnection_from_urluTaexceptionsaexceptionsafilepostTaencode_multipart_formdataaencode_multipart_formdataapoolmanagerTaPoolManageraProxyManageraproxy_from_urlaPoolManageraProxyManageraproxy_from_urlaresponseTaHTTPResponseaHTTPResponseuutil.requestTamake_headersamake_headersuutil.urlTaget_hostaget_hostuutil.timeoutTaTimeoutaTimeoutuutil.retryTaRetryaRetryTaNullHandleraNullHandleruAndrey Petrov (andrey.petrov@shazow.net)a__author__aMITa__license__u1.25.8a__version__TaHTTPConnectionPoolaHTTPSConnectionPoolaPoolManageraProxyManageraHTTPResponseaRetryaTimeoutaadd_stderr_loggeraconnection_from_urladisable_warningsaencode_multipart_formdataaget_hostamake_headersaproxy_from_urla__all__aDEBUGaadd_stderr_loggeraalwaysaSecurityWarningDaappendtadefaultaSubjectAltNameWarningaInsecurePlatformWarningaSNIMissingWarningaHTTPWarningadisable_warningsu<module urllib3>TalevelaloggerahandlerTacategory.urllib3.contrib._appengine_environais_local_appengineais_prod_appengineais_appengineaosaenvironaAPPENGINE_RUNTIMEapython27uReports if the app is running in the first generation sandbox.

    The second generation runtimes are technically still in a sandbox, but it
    is much less restrictive, so generally you shouldn't need to check for it.
    see https://cloud.google.com/appengine/docs/standard/runtimes
    agetTaSERVER_SOFTWAREuastartswithTuDevelopment/TuGoogle App Engine/u
This module provides means to detect the App Engine environment.
a__doc__u/usr/lib/python3/dist-packages/urllib3/contrib/_appengine_environ.pya__file__a__spec__aoriginahas_locationa__cached__ais_appengine_sandboxuDeprecated.ais_prod_appengine_mvmsu<module urllib3.contrib._appengine_environ>u.urllib3.contrib.appengine��aurlfetchaAppEnginePlatformErrorTuURLFetch is not available in this environment.awarningsawarnuurllib3 is using URLFetch on Google App Engine sandbox instead of sockets. To use sockets directly instead of URLFetch see https://urllib3.readthedocs.io/en/latest/reference/urllib3.contrib.html.aAppEnginePlatformWarningaRequestMethodsa__init__avalidate_certificateaurlfetch_retriesaRetryaDEFAULTaretriesa_get_retriesaredirectlatotalafetcha_get_absolute_timeoutTapayloadamethodaheadersaallow_truncatedafollow_redirectsadeadlineavalidate_certificateaDeadlineExceededErroraTimeoutErroraInvalidURLErrorutoo largeuURLFetch request too large, URLFetch only supports requests up to 10mb in size.aProtocolErroraDownloadErroruToo many redirectsaMaxRetryErrorTareasonaResponseTooLargeErroruURLFetch response too large, URLFetch only supportsresponses up to 32mb in size.aSSLCertificateErroraSSLErroraInvalidMethodErroruURLFetch does not support method: %sa_urlfetch_response_to_http_responseaget_redirect_locationaraise_on_redirectutoo many redirectsahttp_responseastatusl/aGETaincrementamethodTaresponsea_poolasleep_for_retryalogadebuguRedirecting %s -> %saurljoinaurlopenatimeoutagetheaderTuRetry-Afterais_retryuRetry: %sasleepabodyaheadersais_prod_appengineagetTucontent-encodingadeflateucontent-encodingaurlfetch_respTutransfer-encodingachunkedasplitTw,aremoveTachunkedw,utransfer-encodingaHTTPResponseaBytesIOacontentamsgaheader_msgastatus_codeaoriginal_responseaTimeoutaDEFAULT_TIMEOUTa_reada_connectuURLFetch does not support granular timeout settings, reverting to total or default URLFetch timeout.afrom_intTaredirectadefaultaconnectareaduURLFetch only supports total retries and does not recognize connect, read, or redirect retry parameters.u
This module provides a pool manager that uses Google App Engine's
`URLFetch Service <https://cloud.google.com/appengine/docs/python/urlfetch>`_.

Example usage::

    from urllib3 import PoolManager
    from urllib3.contrib.appengine import AppEngineManager, is_appengine_sandbox

    if is_appengine_sandbox():
        # AppEngineManager uses AppEngine's URLFetch API behind the scenes
        http = AppEngineManager()
    else:
        # PoolManager uses a socket-level API behind the scenes
        http = PoolManager()

    r = http.request('GET', 'https://google.com/')

There are `limitations <https://cloud.google.com/appengine/docs/python/urlfetch/#Python_Quotas_and_limits>`_ to the URLFetch service and it may not be
the best choice for your application. There are three options for using
urllib3 on Google App Engine:

1. You can use :class:`AppEngineManager` with URLFetch. URLFetch is
   cost-effective in many circumstances as long as your usage is within the
   limitations.
2. You can use a normal :class:`~urllib3.PoolManager` by enabling sockets.
   Sockets also have `limitations and restrictions
   <https://cloud.google.com/appengine/docs/python/sockets/   #limitations-and-restrictions>`_ and have a lower free quota than URLFetch.
   To use sockets, be sure to specify the following in your ``app.yaml``::

        env_variables:
            GAE_USE_SOCKETS_HTTPLIB : 'true'

3. If you are using `App Engine Flexible
<https://cloud.google.com/appengine/docs/flexible/>`_, you can use the standard
:class:`PoolManager` without any configuration or special environment variables.
a__doc__u/usr/lib/python3/dist-packages/urllib3/contrib/appengine.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importaioaloggingusix.moves.urllib.parseTaurljoinaexceptionsTaHTTPErroraHTTPWarningaMaxRetryErroraProtocolErroraTimeoutErroraSSLErrorlaHTTPErroraHTTPWarningarequestTaRequestMethodsaresponseTaHTTPResponseuutil.timeoutTaTimeoutuutil.retryTaRetryuTa_appengine_environla_appengine_environugoogle.appengine.apiTaurlfetchagetLoggerTuurllib3.contrib.appengineametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uurllib3.contrib.appenginea__module__a__qualname__a__orig_bases__aAppEngineManageru
    Connection manager for Google App Engine sandbox applications.

    This manager uses the URLFetch service directly instead of using the
    emulated httplib, and is subject to URLFetch limitations as described in
    the App Engine documentation `here
    <https://cloud.google.com/appengine/docs/python/urlfetch>`_.

    Notably it will raise an :class:`AppEnginePlatformError` if:
        * URLFetch is not available.
        * If you attempt to use this on App Engine Flexible, as full socket
          support is available.
        * If a request size is more than 10 megabytes.
        * If a response size is more than 32 megabtyes.
        * If you use an unsupported request method such as OPTIONS.

    Beyond those cases, it will raise normal urllib3 errors.
    TnntpuAppEngineManager.__init__a__enter__uAppEngineManager.__enter__a__exit__uAppEngineManager.__exit__uAppEngineManager.urlopenuAppEngineManager._urlfetch_response_to_http_responseuAppEngineManager._get_absolute_timeoutuAppEngineManager._get_retriesais_appengineais_appengine_sandboxais_local_appengineais_prod_appengine_mvmsu<module urllib3.contrib.appengine>Ta__class__TaselfTaselfaexc_typeaexc_valaexc_tbTaselfaheadersaretriesavalidate_certificateaurlfetch_retriesTaselfatimeoutTaselfaretriesaredirectTaselfaurlfetch_resparesponse_kwacontent_encodingatransfer_encodingaencodingsaoriginal_responseTaselfamethodaurlabodyaheadersaretriesaredirectatimeoutaresponse_kwafollow_redirectsaresponseweahttp_responsearedirect_locationaredirect_urlahas_retry_after.urllib3.contrib�
a__doc__u/usr/lib/python3/dist-packages/urllib3/contrib/__init__.pya__file__Lu/usr/lib/python3/dist-packages/urllib3/contriba__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__u<module urllib3.contrib>u.urllib3.contrib.pyopenssl� utoo many values to unpack (expected 2)u<genexpr>a_validate_dependencies_metaPyOpenSSLContextautilaSSLContextassl_aHAS_SNIaIS_PYOPENSSLuMonkey-patch urllib3 with PyOpenSSL-backed SSL-support.aorig_util_SSLContextaorig_util_HAS_SNIuUndo monkey-patching by :func:`inject_into_urllib3`.ucryptography.x509.extensionsTaExtensionslaExtensionsaget_extension_for_classu'cryptography' module missing required functionality.  Try upgrading to v1.3.4 or newer.uOpenSSL.cryptoTaX509aX509a_x509u'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.u
    Verifies that PyOpenSSL's package-level dependencies have been met.
    Throws `ImportError` if they are not met.
    u
        Borrowed wholesale from the Python Cryptography Project. It turns out
        that we can't just safely call `idna.encode`: it can explode for
        wildcard names. This avoids that problem.
        aidna_encodeu_dnsname_to_stdlib.<locals>.idna_encodew:adecodeTuutf-8u
    Converts a dNSName SubjectAlternativeName field to the form used by the
    standard library on the given Python version.

    Cryptography produces a dNSName as a unicode string that was idna-decoded
    from ASCII bytes. We need to idna-encode that string to get it back, and
    then on Python 3 we also need to convert to unicode via UTF-8 (the stdlib
    uses PyUnicode_FromStringAndSize on it, which decodes via UTF-8).

    If the name cannot be idna-encoded then we return None signalling that
    the name given should be skipped.
    aidnaTu*.w.anameastartswithaencodeTaasciiacoreaIDNAErrorato_cryptographya_Certificateaopenssl_backendaextensionsax509aSubjectAlternativeNameavalueaExtensionNotFoundaDuplicateExtensionaUnsupportedExtensionaUnsupportedGeneralNameTypealogawarninguA problem was encountered with the certificate that prevented urllib3 from finding the SubjectAlternativeName field. This can affect certificate validation. The error was %sa_dnsname_to_stdlibaget_values_for_typeaDNSNameaDNSaextendaIPAddressu
    Given an PyOpenSSL certificate, provides all the subject alternative names.
    uIP Addressuget_subj_alt_name.<locals>.<genexpr>aconnectionasocketasuppress_ragged_eofsa_makefile_refsa_closedafilenolaclosearecvaOpenSSLaSSLaSysCallErroraargsTl��������uUnexpected EOFcaSocketErrorweaZeroReturnErroraget_shutdownaRECEIVED_SHUTDOWNaWantReadErrorawait_for_readagettimeoutatimeoutTuThe read operation timed outaErrorasslaSSLErroruread error: %rarecv_intoasettimeoutaselfasendadataaWantWriteErrorawait_for_writeatotal_senta_send_until_doneaSSL_WRITE_BLOCKSIZEashutdownaget_peer_certificateacryptoadump_certificateaFILETYPE_ASN1asubjectacommonNameaget_subjectaCNasubjectAltNameaget_subj_alt_nameaget_protocol_version_namea_fileobjectDacloseta_openssl_versionsaprotocolaContexta_ctxa_optionsacheck_hostnameaset_optionsa_openssl_to_stdlib_verifyaget_verify_modeaset_verifya_stdlib_to_openssl_verifya_verify_callbackaset_default_verify_pathsasixatext_typeaset_cipher_listaload_verify_locationsaBytesIOause_certificate_chain_fileabinary_typeaset_passwd_cbu<lambda>uPyOpenSSLContext.load_cert_chain.<locals>.<lambda>ause_privatekey_fileapasswordaConnectionaset_tlsext_host_nameacnxaset_connect_stateado_handshakeasockTuselect timed outubad handshake: %raWrappedSocketu
SSL with SNI_-support for Python 2. Follow these instructions if you would
like to verify SSL certificates in Python 2. Note, the default libraries do
*not* do certificate checking; you need to do additional work to validate
certificates yourself.

This needs the following packages installed:

* pyOpenSSL (tested with 16.0.0)
* cryptography (minimum 1.3.4, from pyopenssl)
* idna (minimum 2.0, from cryptography)

However, pyopenssl depends on cryptography, which depends on idna, so while we
use all three directly here we end up having relatively few packages required.

You can install them with the following command:

    pip install pyopenssl cryptography idna

To activate certificate checking, call
:func:`~urllib3.contrib.pyopenssl.inject_into_urllib3` from your Python code
before you begin making HTTP requests. This can be done in a ``sitecustomize``
module, or at any other time before your application begins using ``urllib3``,
like this::

    try:
        import urllib3.contrib.pyopenssl
        urllib3.contrib.pyopenssl.inject_into_urllib3()
    except ImportError:
        pass

Now you can use :mod:`urllib3` as you normally would, and it will support SNI
when the required modules are installed.

Activating this module also has the positive side effect of disabling SSL/TLS
compression in Python 2 (see `CRIME attack`_).

If you want to configure the default list of supported cipher suites, you can
set the ``urllib3.contrib.pyopenssl.DEFAULT_SSL_CIPHER_LIST`` variable.

.. _sni: https://en.wikipedia.org/wiki/Server_Name_Indication
.. _crime attack: https://en.wikipedia.org/wiki/CRIME_(security_exploit)
a__doc__u/usr/lib/python3/dist-packages/urllib3/contrib/pyopenssl.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importuOpenSSL.SSLacryptographyTax509ucryptography.hazmat.backends.opensslTabackendabackenducryptography.hazmat.backends.openssl.x509Ta_Certificateucryptography.x509TaUnsupportedExtensionTEExceptionametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uurllib3.contrib.pyopenssla__module__a__qualname__a__orig_bases__TatimeoutaerroraerrorTa_fileobjectupackages.backports.makefileTabackport_makefilelabackport_makefilealoggingasysuTautilLainject_into_urllib3aextract_from_urllib3a__all__aPROTOCOL_TLSaSSLv23_METHODaPROTOCOL_TLSv1aTLSv1_METHODaPROTOCOL_SSLv3aSSLv3_METHODaPROTOCOL_TLSv1_1aTLSv1_1_METHODaPROTOCOL_TLSv1_2aTLSv1_2_METHODaCERT_NONEaVERIFY_NONEaCERT_OPTIONALaVERIFY_PEERaCERT_REQUIREDaVERIFY_FAIL_IF_NO_PEER_CERTl@agetLoggerTuurllib3.contrib.pyopensslainject_into_urllib3aextract_from_urllib3TOobjectuAPI-compatibility wrapper for Python OpenSSL's Connection-class.

    Note: _makefile_refs, _drop() and _reuse() are needed for the garbage
    collector of pypy.
    Tta__init__uWrappedSocket.__init__uWrappedSocket.filenoa_decref_socketiosuWrappedSocket._decref_socketiosuWrappedSocket.recvuWrappedSocket.recv_intouWrappedSocket.settimeoutuWrappedSocket._send_until_doneasendalluWrappedSocket.sendalluWrappedSocket.shutdownuWrappedSocket.closeTFagetpeercertuWrappedSocket.getpeercertaversionuWrappedSocket.versiona_reuseuWrappedSocket._reusea_dropuWrappedSocket._dropTl��������amakefileu
    I am a wrapper class for the PyOpenSSL ``Context`` object. I am responsible
    for translating the interface of the standard library ``SSLContext`` object
    to calls into PyOpenSSL.
    uPyOpenSSLContext.__init__apropertyaoptionsuPyOpenSSLContext.optionsasetteraverify_modeuPyOpenSSLContext.verify_modeuPyOpenSSLContext.set_default_verify_pathsaset_ciphersuPyOpenSSLContext.set_ciphersTnnnuPyOpenSSLContext.load_verify_locationsTnnaload_cert_chainuPyOpenSSLContext.load_cert_chainTFtpnawrap_socketuPyOpenSSLContext.wrap_socketTa.0wkwvTa.0anameTw_apasswordTapasswordu<listcomp>Tanameu<module urllib3.contrib.pyopenssl>Ta__class__Taselfaconnectionasocketasuppress_ragged_eofsTaselfaprotocolTaselfTanameaidna_encodeTaselfadataweTaExtensionsaX509ax509Tacnxax509aerr_noaerr_depthareturn_codeTapeer_certacertaextweanamesTaselfabinary_formax509TanameaidnaaprefixTaselfacertfileakeyfileapasswordTaselfacafileacapathacadataTaselfamodeabufsizeTaselfavalueTaselfaargsakwargsadataweTaselfaargsakwargsweTaselfadataatotal_sentasentTaselfaciphersTaselfatimeoutTaselfasockaserver_sideado_handshake_on_connectasuppress_ragged_eofsaserver_hostnameacnxwe.urllib3.contrib.socks�pa_socks_optionsaSOCKSConnectiona__init__asource_addressasocket_optionsaextra_kwasocksacreate_connectionahostaportaproxy_typeasocks_versionaproxy_addraproxy_hostaproxy_portaproxy_usernameausernameaproxy_passwordapasswordaproxy_rdnsardnsatimeoutaSocketTimeoutaConnectTimeoutErroruConnection to %s timed out. (connect timeout=%s)aProxyErrorasocket_erraNewConnectionErroruFailed to establish a new connection: %saSocketErroru
        Establish a new connection via the SOCKS proxy.
        aparse_urlaauthaparsedasplitTw:utoo many values to unpack (expected 2)aschemeasocks5aPROXY_TYPE_SOCKS5asocks5hasocks4aPROXY_TYPE_SOCKS4asocks4auUnable to determine SOCKS version from %saproxy_urlaSOCKSProxyManagerapool_classes_by_schemeu
This module contains provisional support for SOCKS proxies from within
urllib3. This module supports SOCKS4, SOCKS4A (an extension of SOCKS4), and
SOCKS5. To enable its functionality, either install PySocks or install this
module with the ``socks`` extra.

The SOCKS implementation supports the full range of urllib3 features. It also
supports the following SOCKS features:

- SOCKS4A (``proxy_url='socks4a://...``)
- SOCKS4 (``proxy_url='socks4://...``)
- SOCKS5 with remote DNS (``proxy_url='socks5h://...``)
- SOCKS5 with local DNS (``proxy_url='socks5://...``)
- Usernames and passwords for the SOCKS proxy

 .. note::
    It is recommended to use ``socks5h://`` or ``socks4a://`` schemes in
    your ``proxy_url`` to ensure that DNS resolution is done from the remote
    server instead of client-side when connecting to a domain name.

SOCKS4 supports IPv4 and domain names with the SOCKS4A extension. SOCKS5
supports IPv4, IPv6, and domain names.

When connecting to a SOCKS4 proxy the ``username`` portion of the ``proxy_url``
will be sent as the ``userid`` section of the SOCKS request::

    proxy_url="socks4a://<userid>@proxy-host"

When connecting to a SOCKS5 proxy the ``username`` and ``password`` portion
of the ``proxy_url`` will be sent as the username/password to authenticate
with the proxy::

    proxy_url="socks5h://<username>:<password>@proxy-host"

a__doc__u/usr/lib/python3/dist-packages/urllib3/contrib/socks.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importlawarningsaexceptionsTaDependencyWarninglaDependencyWarningawarnuSOCKS support in urllib3 requires the installation of optional dependencies: specifically, PySocks.  For more information, see https://urllib3.readthedocs.io/en/latest/contrib.html#socks-proxiesasocketTaerroratimeoutaerroraconnectionTaHTTPConnectionaHTTPSConnectionaHTTPConnectionaHTTPSConnectionaconnectionpoolTaHTTPConnectionPoolaHTTPSConnectionPoolaHTTPConnectionPoolaHTTPSConnectionPoolTaConnectTimeoutErroraNewConnectionErrorapoolmanagerTaPoolManageraPoolManageruutil.urlTaparse_urlasslametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uurllib3.contrib.socksa__module__u
    A plain-text HTTP connection that connects via a SOCKS proxy.
    a__qualname__uSOCKSConnection.__init__a_new_connuSOCKSConnection._new_conna__orig_bases__aSOCKSHTTPSConnectionaSOCKSHTTPConnectionPoolaConnectionClsaSOCKSHTTPSConnectionPoolu
    A version of the urllib3 ProxyManager that routes connections via the
    defined SOCKS proxy.
    ahttpahttpsTnnl
nuSOCKSProxyManager.__init__u<module urllib3.contrib.socks>Ta__class__Taselfaargsakwargsa__class__T
aselfaproxy_urlausernameapasswordanum_poolsaheadersaconnection_pool_kwaparsedasplitasocks_versionardnsasocks_optionsa__class__Taselfaextra_kwaconnweaerroru.urllib3.exceptions��apoolaHTTPErrora__init__u%s: %sTnnaurlaPoolErrorareasonuMax retries exceeded with url: %s (Caused by %r)aRequestErroruTried to open a foreign host with url: %saretriesuFailed to parse: %salocationaIncompleteReaduIncompleteRead(%i bytes read, %i more expected)apartialaexpecteduNot supported proxy scheme %saProxySchemeUnknownu%s, unparsed data: %raUnknownaHeaderParsingErrora__doc__u/usr/lib/python3/dist-packages/urllib3/exceptions.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importusix.moves.http_clientTaIncompleteReadlahttplib_IncompleteReadTEExceptionametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uurllib3.exceptionsa__module__uBase exception used by this module.a__qualname__a__orig_bases__aWarningaHTTPWarninguBase warning used by this module.uBase exception for errors caused within a pool.uPoolError.__init__a__reduce__uPoolError.__reduce__uBase exception for PoolErrors that have associated URLs.uRequestError.__init__uRequestError.__reduce__aSSLErroruRaised when SSL certificate fails in an HTTPS connection.aProxyErroruRaised when the connection to a proxy fails.aDecodeErroruRaised when automatic decoding based on Content-Type fails.aProtocolErroruRaised when something unexpected happens mid-request/response.aConnectionErroraMaxRetryErroruRaised when the maximum number of retries is exceeded.

    :param pool: The connection pool
    :type pool: :class:`~urllib3.connectionpool.HTTPConnectionPool`
    :param string url: The requested Url
    :param exceptions.Exception reason: The underlying error

    TnuMaxRetryError.__init__aHostChangedErroruRaised when an existing pool gets a request for a foreign host.TluHostChangedError.__init__aTimeoutStateErroru Raised when passing an invalid state to a timeout aTimeoutErroru Raised when a socket timeout error occurs.

    Catching this error will catch both :exc:`ReadTimeoutErrors
    <ReadTimeoutError>` and :exc:`ConnectTimeoutErrors <ConnectTimeoutError>`.
    aReadTimeoutErroruRaised when a socket timeout occurs while receiving data from a serveraConnectTimeoutErroruRaised when a socket timeout occurs while connecting to a serveraNewConnectionErroruRaised when we fail to establish a new connection. Usually ECONNREFUSED.aEmptyPoolErroruRaised when a pool runs out of connections and no more are allowed.aClosedPoolErroruRaised when a request enters a pool after the pool has been closed.aLocationValueErroruRaised when there is something wrong with a given URL input.aLocationParseErroruRaised when get_host or similar fails to parse the URL input.uLocationParseError.__init__aResponseErroruUsed as a container for an error reason supplied in a MaxRetryError.utoo many error responsesaGENERIC_ERRORutoo many {status_code} error responsesaSPECIFIC_ERRORaSecurityWarninguWarned when performing security reducing actionsaSubjectAltNameWarninguWarned when connecting to a host with a certificate missing a SAN.aInsecureRequestWarninguWarned when making an unverified HTTPS request.aSystemTimeWarninguWarned when system time is suspected to be wrongaInsecurePlatformWarninguWarned when certain SSL configuration is not available on a platform.aSNIMissingWarninguWarned when making a HTTPS request without SNI available.aDependencyWarningu
    Warned when an attempt is made to import a module with missing optional
    dependencies.
    aResponseNotChunkeduResponse needs to be chunked in order to read it as chunks.aBodyNotHttplibCompatibleu
    Body should be httplib.HTTPResponse like (have an fp attribute which
    returns raw chunks) for read_chunked().
    u
    Response length doesn't match expected Content-Length

    Subclass of http_client.IncompleteRead to allow int value
    for `partial` to avoid creating large objects on streamed
    reads.
    uIncompleteRead.__init__a__repr__uIncompleteRead.__repr__aInvalidHeaderuThe header provided was somehow invalid.TEAssertionErrorEValueErroruProxyManager does not support the supplied schemeuProxySchemeUnknown.__init__uRaised by assert_header_parsing, but we convert it to a log.warning statement.uHeaderParsingError.__init__aUnrewindableBodyErroruurllib3 encountered an error when trying to rewind a bodyu<module urllib3.exceptions>Ta__class__Taselfadefectsaunparsed_dataamessagea__class__TaselfalocationamessageTaselfapartialaexpecteda__class__TaselfapoolamessageTaselfapoolaurlamessageTaselfapoolaurlareasonamessageTaselfapoolaurlaretriesamessageTaselfaschemeamessagea__class__Taselfu.urllib3.fields��amimetypesaguess_typelu
    Guess the "Content-Type" of a file.

    :param filename:
        The filename to guess the "Content-Type" of using :mod:`mimetypes`.
    :param default:
        If no "Content-Type" can be guessed, default to `default`.
    asixabinary_typeadecodeTuutf-8u"\
u%s="%s"avalueaasciiTEUnicodeEncodeErrorEUnicodeDecodeErroraPY2aencodeaemailautilsaencode_rfc2231uutf-8u%s*=%su
    Helper function to format and quote a single header parameter using the
    strategy defined in RFC 2231.

    Particularly useful for header parameters which might contain
    non-ASCII values, like file names. This follows RFC 2388 Section 4.4.

    :param name:
        The name of the parameter, a string expected to be ASCII only.
    :param value:
        The value of the parameter, provided as ``bytes`` or `str``.
    :ret:
        An RFC-2231-formatted unicode string.
    u<genexpr>uformat_header_param_rfc2231.<locals>.<genexpr>areplaceru_replace_multiple.<locals>.replacerareacompilew|akeysaescapeasubaneedles_and_replacementsagroupTla_replace_multiplea_HTML5_REPLACEMENTSu
    Helper function to format and quote a single header parameter using the
    HTML5 strategy.

    Particularly useful for header parameters which might contain
    non-ASCII values, like file names. This follows the `HTML5 Working Draft
    Section 4.10.22.7`_ and matches the behavior of curl and modern browsers.

    .. _HTML5 Working Draft Section 4.10.22.7:
        https://w3c.github.io/html/sec-forms.html#multipart-form-data

    :param name:
        The name of the parameter, a string expected to be ASCII only.
    :param value:
        The value of the parameter, provided as ``bytes`` or `str``.
    :ret:
        A unicode string, stripped of troublesome characters.
    a_namea_filenameadataaheadersaheader_formatterutoo many values to unpack (expected 3)utoo many values to unpack (expected 2)aguess_content_typeafilenameTafilenameaheader_formatteramake_multipartTacontent_typeu
        A :class:`~urllib3.fields.RequestField` factory from old-style tuple parameters.

        Supports constructing :class:`~urllib3.fields.RequestField` from
        parameter of key/value strings AND key/filetuple. A filetuple is a
        (filename, data, MIME type) tuple where the MIME type is optional.
        For example::

            'foo': 'bar',
            'fakefile': ('foofile.txt', 'contents of foofile'),
            'realfile': ('barfile.txt', open('realfile').read()),
            'typedfile': ('bazfile.bin', open('bazfile').read(), 'image/jpeg'),
            'nonamefile': 'contents of nonamefile field',

        Field names and filenames must be unicode.
        u
        Overridable helper function to format a single header parameter. By
        default, this calls ``self.header_formatter``.

        :param name:
            The name of the parameter, a string expected to be ASCII only.
        :param value:
            The value of the parameter, provided as a unicode string.
        aitemsapartsaappendaselfa_render_partu; u
        Helper function to format and quote a single header.

        Useful for single headers that are composed of multiple items. E.g.,
        'Content-Disposition' fields.

        :param header_parts:
            A sequence of (k, v) tuples or a :class:`dict` of (k, v) to format
            as `k1="v1"; k2="v2"; ...`.
        LuContent-DispositionuContent-TypeuContent-Locationagetalinesu%s: %sTu
u
u
        Renders the headers for this request field.
        uform-datauContent-Dispositionua_render_partsanameuContent-TypeuContent-Locationu
        Makes this request field into a multipart request field.

        This method overrides "Content-Disposition", "Content-Type" and
        "Content-Location" headers to the request parameter.

        :param content_type:
            The 'Content-Type' of the request body.
        :param content_location:
            The 'Content-Location' of the request body.

        a__doc__u/usr/lib/python3/dist-packages/urllib3/fields.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importuemail.utilsTuapplication/octet-streamaformat_header_param_rfc2231Dw"w\u%22u\\;ll lTlaunichru%{:02X}aformat_header_param_html5aformat_header_paramTOobjectametaclassa__prepare__aRequestFielda__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uurllib3.fieldsa__module__u
    A data container for request body parameters.

    :param name:
        The name of this request field. Must be unicode.
    :param data:
        The data/value body.
    :param filename:
        An optional filename of the request field. Must be unicode.
    :param headers:
        An optional dict-like object of headers to initially use for the field.
    :param header_formatter:
        An optional callable that is used to encode and format the headers. By
        default, this is :func:`format_header_param_html5`.
    a__qualname__a__init__uRequestField.__init__aclassmethodafrom_tuplesuRequestField.from_tuplesuRequestField._render_partuRequestField._render_partsarender_headersuRequestField.render_headersTnnnuRequestField.make_multiparta__orig_bases__u<dictcontraction>TaccTa.0achavalueu<listcomp>Taneedleu<module urllib3.fields>Ta__class__Taselfanameadataafilenameaheadersaheader_formatterTaselfanameavalueTaselfaheader_partsapartsaiterableanameavalueTavalueaneedles_and_replacementsareplacerapatternaresultTanameavalueTanameavaluearesultTaclsafieldnameavalueaheader_formatterafilenameadataacontent_typearequest_paramTafilenameadefaultTaselfacontent_dispositionacontent_typeacontent_locationTaselfalinesasort_keysasort_keyaheader_nameaheader_valueTamatchaneedles_and_replacementsTaneedles_and_replacements.urllib3.filepostx>abinasciiahexlifyaosaurandomTlasixaPY2adecodeTaasciiu
    Our embarrassingly-simple replacement for mimetools.choose_boundary.
    u
    Iterate over fields.

    Supports list of (k, v) tuples and dicts, and lists of
    :class:`~urllib3.fields.RequestField`.

    afieldsaiteritemsaRequestFieldafrom_tuplesaiter_field_objectsu
    .. deprecated:: 1.6

    Iterate over fields.

    The addition of :class:`~urllib3.fields.RequestField` makes this function
    obsolete. Instead, use :func:`iter_field_objects`, which returns
    :class:`~urllib3.fields.RequestField` objects.

    Supports list of (k, v) tuples and dicts.
    utoo many values to unpack (expected 2)u<genexpr>uiter_fields.<locals>.<genexpr>aBytesIOachoose_boundaryabodyawritewbu--%s
aboundaryawriterarender_headersadataatext_typeTc
u--%s--
umultipart/form-data; boundary=%sagetvalueu
    Encode a dictionary of ``fields`` using the multipart/form-data MIME format.

    :param fields:
        Dictionary of fields or list of (key, :class:`~urllib3.fields.RequestField`).

    :param boundary:
        If not specified, then a random boundary will be generated using
        :func:`urllib3.filepost.choose_boundary`.
    a__doc__u/usr/lib/python3/dist-packages/urllib3/filepost.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importlacodecsTwbTaRequestFieldlalookupTuutf-8laiter_fieldsTnaencode_multipart_formdataTa.0wkwvu<module urllib3.filepost>TaboundaryTafieldsaboundaryabodyafieldadataacontent_typeTafieldswiafieldTafieldsu.urllib3.packages.backports
a__doc__u/usr/lib/python3/dist-packages/urllib3/packages/backports/__init__.pya__file__Lu/usr/lib/python3/dist-packages/urllib3/packages/backportsa__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__u<module urllib3.packages.backports>u.urllib3.packages.backports.makefile%"Swrwbwwuinvalid mode %r (only r, w, b allowed)wwwrwbuaSocketIOa_makefile_refsll��������laioaDEFAULT_BUFFER_SIZEuunbuffered streams must be binaryaBufferedRWPairaBufferedReaderaBufferedWriteraTextIOWrapperamodeu
    Backport of ``socket.makefile`` from Python 3.5.
    u
backports.makefile
~~~~~~~~~~~~~~~~~~

Backports the Python 3 ``socket.makefile`` method for use with anything that
wants to create a "fake" socket object.
a__doc__u/usr/lib/python3/dist-packages/urllib3/packages/backports/makefile.pya__file__a__spec__aoriginahas_locationa__cached__asocketTaSocketIOTwrnnnnabackport_makefileu<module urllib3.packages.backports.makefile>T
aselfamodeabufferingaencodingaerrorsanewlineawritingareadingabinaryarawmodearawabufferatext.urllib3.packagesa__doc__u/usr/lib/python3/dist-packages/urllib3/packages/__init__.pya__file__Lu/usr/lib/python3/dist-packages/urllib3/packagesa__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aabsolute_importTassl_match_hostnamea__all__asslTaCertificateErroraCertificateErrorassl_match_hostnameulu<module urllib3.packages>.urllib3.packages.ssl_match_hostname._implementationQasplitTw.l:lnnacountTw*aCertificateErrorutoo many wildcards in certificate DNS name: alowerw*aappendTu[^.]+astartswithTuxn--areaescapeareplaceTu\*u[^.]*apatsacompileu\Au\.u\ZaIGNORECASEamatchahostnameuMatching according to RFC 6125, section 6.4.3

    http://tools.ietf.org/html/rfc6125#section-6.4.3
    aipaddressaip_addressa_to_unicodearstripuExact matching of IP addresses.

    RFC 6125 explicitly doesn't define an algorithm for this
    (section 1.7.2 - "Out of Scope").
    uempty or no certificate, match_hostname needs a SSL socket or SSL context with either CERT_OPTIONAL or CERT_REQUIREDagetTasubjectAltNameTutoo many values to unpack (expected 2)aDNSahost_ipa_dnsname_matchadnsnamesavalueuIP Addressa_ipaddress_matchTasubjectTacommonNameuhostname %r doesn't match either of %su, arepruhostname %r doesn't match %rTuno appropriate commonName or subjectAltName fields were founduVerify that *cert* (in decoded format as returned by
    SSLSocket.getpeercert()) matches the *hostname*.  RFC 2818 and RFC 6125
    rules are followed, but IP addresses are not accepted for *hostname*.

    CertificateError is raised on failure. On success, the function
    returns nothing.
    uThe match_hostname() function from Python 3.3.3, essential when using SSL.a__doc__u/usr/lib/python3/dist-packages/urllib3/packages/ssl_match_hostname/_implementation.pya__file__a__spec__aoriginahas_locationa__cached__asysu3.5.0.1a__version__TEValueErrorametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uurllib3.packages.ssl_match_hostname._implementationa__module__a__qualname__a__orig_bases__Tlamatch_hostnameu<module urllib3.packages.ssl_match_hostname._implementation>T
adnahostnameamax_wildcardsapatsapartsaleftmostaremainderawildcardsafragapatTaipnameahost_ipaipTaobjTacertahostnameahost_ipadnsnamesasanakeyavalueasubu.urllib3.packages.ssl_match_hostname�a__doc__u/usr/lib/python3/dist-packages/urllib3/packages/ssl_match_hostname/__init__.pya__file__Lu/usr/lib/python3/dist-packages/urllib3/packages/ssl_match_hostnamea__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__asysasslTaCertificateErroramatch_hostnameaCertificateErroramatch_hostnameubackports.ssl_match_hostnamea_implementationla__all__u<module urllib3.packages.ssl_match_hostname>u.urllib3.poolmanager%�acopyaschemealowerahostTaheadersa_proxy_headersa_socks_optionsacontextaitemsagetTasocket_optionsasocket_optionsakeysapopakey_a_fieldsu
    Create a pool key out of a request context dictionary.

    According to RFC 3986, both the scheme and host are case-insensitive.
    Therefore, this function normalizes both before constructing the pool
    key for an HTTPS request. If you wish to change this behaviour, provide
    alternate callables to ``key_fn_by_scheme``.

    :param key_class:
        The class to use when constructing the key. This should be a namedtuple
        with the ``scheme`` and ``host`` keys at a minimum.
    :type  key_class: namedtuple
    :param request_context:
        A dictionary-like object that contain the context for a request.
    :type  request_context: dict

    :return: A namedtuple that can be used as a connection pool key.
    :rtype:  PoolKey
    aRequestMethodsa__init__aconnection_pool_kwaRecentlyUsedContaineru<lambda>uPoolManager.__init__.<locals>.<lambda>Tadispose_funcapoolsapool_classes_by_schemeakey_fn_by_schemeacloseaclearTaschemeahostaportarequest_contextahttpaSSL_KEYWORDSu
        Create a new :class:`ConnectionPool` based on host, port, scheme, and
        any additional pool keyword arguments.

        If ``request_context`` is provided, it is provided as keyword arguments
        to the pool class used. This method is used to actually create the
        connection pools handed out by :meth:`connection_from_url` and
        companion methods. It is intended to be overridden for customization.
        u
        Empty our store of pools and direct them all to close.

        This will not affect in-flight connections, but they will not be
        re-used after completion.
        aLocationValueErrorTuNo host specified.a_merge_pool_kwargsaport_by_schemelPaportaconnection_from_contextu
        Get a :class:`ConnectionPool` based on the host, port, and scheme.

        If ``port`` isn't given, it will be derived from the ``scheme`` using
        ``urllib3.connectionpool.port_by_scheme``. If ``pool_kwargs`` is
        provided, it is merged with the instance's ``connection_pool_kw``
        variable and used to create the new connection pool, if one is
        needed.
        aconnection_from_pool_keyTarequest_contextu
        Get a :class:`ConnectionPool` based on the request context.

        ``request_context`` must at least contain the ``scheme`` key and its
        value must be a key in ``key_fn_by_scheme`` instance variable.
        alocka__enter__a__exit__a_new_poolTnnnapoolu
        Get a :class:`ConnectionPool` based on the provided pool key.

        ``pool_key`` should be a namedtuple that only contains immutable
        objects. At a minimum it must have the ``scheme``, ``host``, and
        ``port`` fields.
        aparse_urlaconnection_from_hostTaportaschemeapool_kwargsu
        Similar to :func:`urllib3.connectionpool.connection_from_url`.

        If ``pool_kwargs`` is not provided and a new pool needs to be
        constructed, ``self.connection_pool_kw`` is used to initialize
        the :class:`urllib3.connectionpool.ConnectionPool`. If ``pool_kwargs``
        is provided, it is used instead. Note that if a new pool does not
        need to be created for the request, the provided ``pool_kwargs`` are
        not used.
        utoo many values to unpack (expected 2)abase_pool_kwargsu
        Merge a dictionary of override values for self.connection_pool_kw.

        This does not modify self.connection_pool_kw and returns a new dict.
        Any keys in the override dictionary with a value of ``None`` are
        removed from the merged dictionary.
        Taportaschemeaassert_same_hostaredirectaheadersaproxyaurlopenarequest_uriaget_redirect_locationaresponseaurljoinastatusl/aGETTaretriesaRetryafrom_intTaredirectaremove_headers_on_redirectaconnais_same_hostasixaiterkeysaretriesaincrementTaresponsea_poolaMaxRetryErroraraise_on_redirectalogainfouRedirecting %s -> %saredirect_locationu
        Same as :meth:`urllib3.connectionpool.HTTPConnectionPool.urlopen`
        with custom cross-host redirect logic and only sends the request-uri
        portion of the ``url``.

        The given ``url`` parameter must be absolute, such that an appropriate
        :class:`urllib3.connectionpool.ConnectionPool` can be chosen for it.
        aHTTPConnectionPoolu%s://%s:%ia_replaceTaportTahttpahttpsaProxySchemeUnknownaproxy_headersa_proxya_proxy_headersaProxyManagerahttpsTapool_kwargsDaAcceptu*/*anetlocaHostaheaders_aupdateu
        Sets headers needed by proxies: specifically, the Accept and Host
        headers. Only sets headers not provided by the user.
        a_set_proxy_headersaselfakwuSame as HTTP(S)ConnectionPool.urlopen, ``url`` must be absolute.aproxy_urla__doc__u/usr/lib/python3/dist-packages/urllib3/poolmanager.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importacollectionslafunctoolsalogginga_collectionsTaRecentlyUsedContainerlaconnectionpoolTaHTTPConnectionPoolaHTTPSConnectionPoolaHTTPSConnectionPoolTaport_by_schemeaexceptionsTaLocationValueErroraMaxRetryErroraProxySchemeUnknownusix.moves.urllib.parseTaurljoinarequestTaRequestMethodsuutil.urlTaparse_urluutil.retryTaRetryLaPoolManageraProxyManageraproxy_from_urla__all__agetLoggerTuurllib3.poolmanagerTakey_fileacert_fileacert_reqsaca_certsassl_versionaca_cert_dirassl_contextakey_passwordTakey_schemeakey_hostakey_portakey_timeoutakey_retriesakey_strictakey_blockakey_source_addressakey_key_fileakey_key_passwordakey_cert_fileakey_cert_reqsakey_ca_certsakey_ssl_versionakey_ca_cert_dirakey_ssl_contextakey_maxsizeakey_headersakey__proxyakey__proxy_headersakey_socket_optionsakey__socks_optionsakey_assert_hostnameakey_assert_fingerprintakey_server_hostnamea_key_fieldsanamedtupleaPoolKeya_default_key_normalizerapartialametaclassa__prepare__aPoolManagera__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uurllib3.poolmanagera__module__u
    Allows for arbitrary requests while transparently keeping track of
    necessary connection pools for you.

    :param num_pools:
        Number of connection pools to cache before discarding the least
        recently used pool.

    :param headers:
        Headers to include with all requests, unless other headers are given
        explicitly.

    :param \**connection_pool_kw:
        Additional parameters are used to create fresh
        :class:`urllib3.connectionpool.ConnectionPool` instances.

    Example::

        >>> manager = PoolManager(num_pools=2)
        >>> r = manager.request('GET', 'http://google.com/')
        >>> r = manager.request('GET', 'http://google.com/mail')
        >>> r = manager.request('GET', 'http://yahoo.com/')
        >>> len(manager.pools)
        2

    a__qualname__Tl
nuPoolManager.__init__uPoolManager.__enter__uPoolManager.__exit__TnuPoolManager._new_pooluPoolManager.clearTnahttpnuPoolManager.connection_from_hostuPoolManager.connection_from_contextuPoolManager.connection_from_pool_keyaconnection_from_urluPoolManager.connection_from_urluPoolManager._merge_pool_kwargsTtuPoolManager.urlopena__orig_bases__u
    Behaves just like :class:`PoolManager`, but sends all requests through
    the defined proxy, using the CONNECT method for HTTPS URLs.

    :param proxy_url:
        The URL of the proxy to be used.

    :param proxy_headers:
        A dictionary containing headers that will be sent to the proxy. In case
        of HTTP they are being sent with each request, while in the
        HTTPS/CONNECT case they are sent only once. Could be used for proxy
        authentication.

    Example:
        >>> proxy = urllib3.ProxyManager('http://localhost:3128/')
        >>> r1 = proxy.request('GET', 'http://google.com/')
        >>> r2 = proxy.request('GET', 'http://httpbin.org/')
        >>> len(proxy.pools)
        1
        >>> r3 = proxy.request('GET', 'https://httpbin.org/')
        >>> r4 = proxy.request('GET', 'https://twitter.com/')
        >>> len(proxy.pools)
        3

    Tl
nnuProxyManager.__init__uProxyManager.connection_from_hostuProxyManager._set_proxy_headersuProxyManager.urlopenaproxy_from_urlTwpu<module urllib3.poolmanager>Ta__class__TaselfTaselfaexc_typeaexc_valaexc_tbTaselfanum_poolsaheadersaconnection_pool_kwT	aselfaproxy_urlanum_poolsaheadersaproxy_headersaconnection_pool_kwaproxyaporta__class__Takey_classarequest_contextacontextakeyasocket_optsafieldTaselfaoverrideabase_pool_kwargsakeyavalueTaselfaschemeahostaportarequest_contextapool_clsakeyakwTaselfaurlaheadersaheaders_anetlocTaselfarequest_contextaschemeapool_key_constructorapool_keyTaselfahostaportaschemeapool_kwargsa__class__Taselfahostaportaschemeapool_kwargsarequest_contextTaselfapool_keyarequest_contextapoolaschemeahostaportTaselfaurlapool_kwargswuTaurlakwTaselfamethodaurlaredirectakwwuaconnaresponsearedirect_locationaretriesaheadersaheaderTaselfamethodaurlaredirectakwwuaheadersa__class__u.urllib3.request
IaheadersuClasses extending RequestMethods must implement their own ``urlopen`` method.aupperarequest_urla_encode_url_methodsarequest_encode_urlafieldsarequest_encode_bodyu
        Make a request using :meth:`urlopen` with the appropriate encoding of
        ``fields`` based on the ``method`` used.

        This is a convenience method that requires the least amount of manual
        effort. It can be used in most situations, while still having the
        option to drop down to more specific methods when necessary, such as
        :meth:`request_encode_url`, :meth:`request_encode_body`,
        or even the lowest level :meth:`urlopen`.
        w?aurlencodeaselfaurlopenu
        Make a request using :meth:`urlopen` with the ``fields`` encoded in
        the url. This is useful for request methods like GET, HEAD, DELETE, etc.
        DaheadersDabodyurequest got values for both 'fields' and 'body', can only specify one.aencode_multipart_formdataTaboundaryutoo many values to unpack (expected 2)uapplication/x-www-form-urlencodeduContent-Typeaextra_kwaupdateu
        Make a request using :meth:`urlopen` with the ``fields`` encoded in
        the body. This is useful for request methods like POST, PUT, PATCH, etc.

        When ``encode_multipart=True`` (default), then
        :meth:`urllib3.filepost.encode_multipart_formdata` is used to encode
        the payload with the appropriate content type. Otherwise
        :meth:`urllib.urlencode` is used with the
        'application/x-www-form-urlencoded' content type.

        Multipart encoding must be used when posting files, and it's reasonably
        safe to use it in other times too. However, it may break request
        signing, such as with OAuth.

        Supports an optional ``fields`` parameter of key/value strings AND
        key/filetuple. A filetuple is a (filename, data, MIME type) tuple where
        the MIME type is optional. For example::

            fields = {
                'foo': 'bar',
                'fakefile': ('foofile.txt', 'contents of foofile'),
                'realfile': ('barfile.txt', open('realfile').read()),
                'typedfile': ('bazfile.bin', open('bazfile').read(),
                              'image/jpeg'),
                'nonamefile': 'contents of nonamefile field',
            }

        When uploading a file, providing a filename (the first parameter of the
        tuple) is optional but recommended to best mimic behavior of browsers.

        Note that if ``headers`` are supplied, the 'Content-Type' header will
        be overwritten because it depends on the dynamic random boundary string
        which is used to compose the body of the request. The random boundary
        string can be explicitly set with the ``multipart_boundary`` parameter.
        a__doc__u/usr/lib/python3/dist-packages/urllib3/request.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importafilepostTaencode_multipart_formdatallusix.moves.urllib.parseTaurlencodeLaRequestMethodsa__all__TOobjectametaclassa__prepare__aRequestMethodsa__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uurllib3.requesta__module__u
    Convenience mixin for classes who implement a :meth:`urlopen` method, such
    as :class:`~urllib3.connectionpool.HTTPConnectionPool` and
    :class:`~urllib3.poolmanager.PoolManager`.

    Provides behavior for making common types of HTTP request methods and
    decides which type of request field encoding to use.

    Specifically,

    :meth:`.request_encode_url` is for sending requests whose fields are
    encoded in the URL (such as GET, HEAD, DELETE).

    :meth:`.request_encode_body` is for sending requests whose fields are
    encoded in the *body* of the request using multipart or www-form-urlencoded
    (such as for POST, PUT, PATCH).

    :meth:`.request` is for making any kind of request, it will look up the
    appropriate encoding format and use one of the above two methods to make
    the request.

    Initializer parameters:

    :param headers:
        Headers to include with all requests, unless other headers are given
        explicitly.
    a__qualname__SaGETaHEADaOPTIONSaDELETETna__init__uRequestMethods.__init__TnntnuRequestMethods.urlopenTnnarequestuRequestMethods.requestuRequestMethods.request_encode_urluRequestMethods.request_encode_bodya__orig_bases__u<module urllib3.request>Ta__class__TaselfaheadersTaselfamethodaurlafieldsaheadersaurlopen_kwTaselfamethodaurlafieldsaheadersaencode_multipartamultipart_boundaryaurlopen_kwaextra_kwabodyacontent_typeTaselfamethodaurlafieldsaheadersaurlopen_kwaextra_kwTaselfamethodaurlabodyaheadersaencode_multipartamultipart_boundaryakwu.urllib3.responseu*5a_first_tryca_dataazlibadecompressobja_objadecompressaerroraMAX_WBITSlaGzipDecoderStateaFIRST_MEMBERa_stateBaSWALLOW_DATAaretaselfadataaOTHER_MEMBERSaunused_dataabrotliaDecompressoraprocessaflushasplitTw,a_get_decoderastripa_decoderslw,aMultiDecoderagzipaGzipDecoderabraBrotliDecoderaDeflateDecoderaHTTPHeaderDictaheadersastatusaversionareasonastrictadecode_contentaretriesaenforce_content_lengthaauto_closea_decodera_bodya_fpa_original_responsea_fp_bytes_readamsga_request_urlabasestringa_poola_connectionareadachunkedachunk_leftagetTutransfer-encodingualowera_init_lengthalength_remainingTadecode_contentu<genexpr>uHTTPResponse.__init__.<locals>.<genexpr>aREDIRECT_STATUSESTalocationu
        Should we redirect and where to?

        :returns: Truthy redirect location string if we got a redirect status
            code and valid location. ``None`` if redirect status and no
            location. ``False`` if not a redirect status code.
        a_put_connTtTacache_contentais_fp_closedu
        Obtain the number of bytes pulled over the wire so far. May differ from
        the amount of content returned by :meth:``HTTPResponse.read`` if bytes
        are encoded on the wire (e.g, compressed).
        Tucontent-lengthalogawarningTuReceived response with both Content-Length and Transfer-Encoding set. This is expressly forbidden by RFC 7230 sec 3.3.2. Ignoring Content-Length and attempting to process response as Transfer-Encoding: chunked.aInvalidHeaderuContent-Length contained multiple unmatching values (%s)apopTl�l0ldl�aHEADu
        Set initial length value for Response content if available.
        Tucontent-encodinguaCONTENT_DECODERSu
        Set-up the _decoder attribute if necessary.
        aDECODER_ERROR_CLASSESaDecodeErroruReceived response with content-encoding: %s, but failed to decode it.a_flush_decoderu
        Decode the data passed in and potentially flush the decoder.
        Tcu
        Flushes the decoder. Should only be called if the decoder is actually
        being used.
        u
        Catch low-level python exceptions, instead re-raising urllib3
        variants, so that low-level exceptions are not leaked in the
        high-level api.

        On exit, release the connection back to the pool.
        aSocketTimeoutaReadTimeoutErroruRead timed out.aBaseSSLErroruread operation timed outaHTTPExceptionaSocketErroraProtocolErroruConnection broken: %racloseaisclosedarelease_conna_error_catcheruHTTPResponse._error_catchera_init_decoderacloseda__enter__a__exit__TlnaIncompleteReadTnnna_decodeu
        Similar to :meth:`httplib.HTTPResponse.read`, but with two additional
        parameters: ``decode_content`` and ``cache_content``.

        :param amt:
            How much of the content to read. If specified, caching is skipped
            because it doesn't make sense to cache partial content as the full
            response.

        :param decode_content:
            If True, will attempt to decode the body based on the
            'content-encoding' header.

        :param cache_content:
            If True, will save the returned data such that the same result is
            returned despite of the state of the underlying file object. This
            is useful if you want the ``.data`` property to continue working
            after having ``.read()`` the file object. (Overridden if ``amt`` is
            set.)
        u
        A generator wrapper for the read() method. A call will block until
        ``amt`` bytes have been read from the connection or until the
        connection is closed.

        :param amt:
            How much of the content to read. The generator will return up to
            much data per iteration, but may return less. This is particularly
            likely when using compressed data. However, the empty string will
            never be returned.

        :param decode_content:
            If True, will attempt to decode the body based on the
            'content-encoding' header.
        asupports_chunked_readsaread_chunkedaamtTaamtadecode_contentastreamuHTTPResponse.streamaPY3aitemsafrom_httplibabodyaoriginal_responseu
        Given an :class:`httplib.HTTPResponse` instance ``r``, return a
        corresponding :class:`urllib3.response.HTTPResponse` object.

        Remaining parameters are passed to the HTTPResponse constructor, along
        with ``original_response=r``.
        aioaIOBasea__get__uHTTPResponse has no file to get a fileno fromafilenouThe file-like object this HTTPResponse is wrapped around has no file descriptorafpu
        Checks if the underlying file-like object looks like a
        httplib.HTTPResponse object. We do this by testing for the fp
        attribute. If it is present we assume it returns raw chunks as
        processed by read_chunked().
        areadlineTd;lahttpliba_safe_readTlu
        Similar to :meth:`HTTPResponse.read`, but with an additional
        parameter: ``decode_content``.

        :param amt:
            How much of the content to read. If specified, caching is skipped
            because it doesn't make sense to cache partial content as the full
            response.

        :param decode_content:
            If True, will attempt to decode the body based on the
            'content-encoding' header.
        aResponseNotChunkedTuResponse is not chunked. Header 'transfer-encoding: chunked' is missing.aBodyNotHttplibCompatibleTuBody should be httplib.HTTPResponse like. It should have have an fp attribute which returns raw chunks.ais_response_to_heada_update_chunk_lengtha_handle_chunkTadecode_contentaflush_decoderc
uHTTPResponse.read_chunkedahistoryl��������aredirect_locationu
        Returns the URL that was the source of this response.
        If the request that generated this response redirected, this method
        will return the final redirect location.
        d
Td
ajoinabuffer:ll��������naappenda__iter__uHTTPResponse.__iter__a__doc__u/usr/lib/python3/dist-packages/urllib3/response.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importacontextlibTacontextmanageracontextmanageraloggingasocketTatimeoutatimeoutTaerrora_collectionsTaHTTPHeaderDictlaexceptionsTaBodyNotHttplibCompatibleaProtocolErroraDecodeErroraReadTimeoutErroraResponseNotChunkedaIncompleteReadaInvalidHeaderasixTastring_typesaPY3astring_typesusix.movesTahttp_clientahttp_clientaconnectionTaHTTPExceptionaBaseSSLErroruutil.responseTais_fp_closedais_response_to_headagetLoggerTuurllib3.responseTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uurllib3.responsea__module__a__qualname__a__init__uDeflateDecoder.__init__a__getattr__uDeflateDecoder.__getattr__uDeflateDecoder.decompressa__orig_bases__luGzipDecoder.__init__uGzipDecoder.__getattr__uGzipDecoder.decompressuBrotliDecoder.__init__uBrotliDecoder.decompressuBrotliDecoder.flushu
    From RFC7231:
        If one or more encodings have been applied to a representation, the
        sender that applied the encodings MUST generate a Content-Encoding
        header field that lists the content codings in the order in which
        they were applied.
    uMultiDecoder.__init__uMultiDecoder.flushuMultiDecoder.decompressaHTTPResponseu
    HTTP Response container.

    Backwards-compatible to httplib's HTTPResponse but the response ``body`` is
    loaded and decoded on-demand when the ``data`` property is accessed.  This
    class is also compatible with the Python standard library's :mod:`io`
    module, and can hence be treated as a readable object in the context of that
    framework.

    Extra parameters for behaviour not present in httplib.HTTPResponse:

    :param preload_content:
        If True, the response's body will be preloaded during construction.

    :param decode_content:
        If True, will attempt to decode the body based on the
        'content-encoding' header.

    :param original_response:
        When this HTTPResponse wrapper is generated from an httplib.HTTPResponse
        object, it's convenient to include the original for debug purposes. It's
        otherwise unused.

    :param retries:
        The retries contains the last :class:`~urllib3.util.retry.Retry` that
        was used during the request.

    :param enforce_content_length:
        Enforce content length checking. Body returned by server must match
        value of Content-Length header, if present. Otherwise, raise error.
    LagzipadeflateLabrLl-l.l/l3l4TunlpnltpnnnnnFnntuHTTPResponse.__init__aget_redirect_locationuHTTPResponse.get_redirect_locationuHTTPResponse.release_connapropertyuHTTPResponse.datauHTTPResponse.connectionuHTTPResponse.isclosedatelluHTTPResponse.telluHTTPResponse._init_lengthuHTTPResponse._init_decoderaIOErroruHTTPResponse._decodeuHTTPResponse._flush_decoderTnnFuHTTPResponse.readTlnaclassmethoduHTTPResponse.from_httplibagetheadersuHTTPResponse.getheadersTnagetheaderuHTTPResponse.getheaderainfouHTTPResponse.infouHTTPResponse.closeuHTTPResponse.closeduHTTPResponse.filenouHTTPResponse.flushareadableuHTTPResponse.readableareadintouHTTPResponse.readintouHTTPResponse.supports_chunked_readsuHTTPResponse._update_chunk_lengthuHTTPResponse._handle_chunkTnnageturluHTTPResponse.geturlTa.0aencu<listcomp>TweaselfTwmTavalu<module urllib3.response>Ta__class__TaselfanameTaselfTaselfabodyaheadersastatusaversionareasonastrictapreload_contentadecode_contentaoriginal_responseapoolaconnectionamsgaretriesaenforce_content_lengtharequest_methodarequest_urlaauto_closeatr_encaencodingsTaselfamodesTaselfabufferachunkwxTaselfadataadecode_contentaflush_decoderweacontent_encodingTaselfaclean_exitweTaselfabufTamodeTaselfaamtareturned_chunkachunkavalueTaselfacontent_encodingaencodingsTaselfarequest_methodalengthalengthsastatusTaselfalineTaselfadataTaselfadatawdTaselfadataadecompressedTaselfadataaretaprevious_stateTaResponseClswraresponse_kwaheadersastrictarespTaselfanameadefaultTaselfaamtadecode_contentacache_contentaflush_decoderafp_closedadataTaselfaamtadecode_contentachunkadecodedalineTaselfwbatempTaselfaamtadecode_contentalineadatau.urllib3.util.connection�Aasockawait_for_readDatimeoutZaNoWayToWaitForSocketErroru
    Returns True if the connection is dropped and should be closed.

    :param conn:
        :class:`httplib.HTTPConnection` object.

    Note: For platforms like AppEngine, this will always return ``False`` to
    let the platform handle connection recycling transparently for us.
    utoo many values to unpack (expected 2)astartswithTw[astripTu[]aallowed_gai_familyasocketagetaddrinfoahostaSOCK_STREAMutoo many values to unpack (expected 5)a_set_socket_optionsasocket_optionsatimeouta_GLOBAL_DEFAULT_TIMEOUTasettimeoutasource_addressabindaconnectaerroracloseaerrTugetaddrinfo returns an empty listuConnect to *address* and return the socket object.

    Convenience function.  Connect to *address* (a 2-tuple ``(host,
    port)``) and return the socket object.  Passing the optional
    *timeout* parameter will set the timeout on the socket instance
    before attempting to connect.  If no *timeout* is supplied, the
    global default timeout setting returned by :func:`getdefaulttimeout`
    is used.  If *source_address* is set it must be a tuple of (host, port)
    for the socket to bind as a source address before making the connection.
    An host of '' or port 0 tells the OS to use the default.
    asetsockoptaAF_INETaHAS_IPV6aAF_UNSPECuThis function is designed to work in the context of
    getaddrinfo, where family=socket.AF_UNSPEC is the default and
    will perform a DNS search for both IPv6 and IPv4 records.a_appengine_environais_appengine_sandboxahas_ipv6aAF_INET6lu Returns True if the system can bind an IPv6 address. a__doc__u/usr/lib/python3/dist-packages/urllib3/util/connection.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importawaitTaNoWayToWaitForSocketErrorawait_for_readlacontribTa_appengine_environlais_connection_droppedacreate_connectiona_has_ipv6Tu::1u<module urllib3.util.connection>Tahostasockahas_ipv6TasockaoptionsaoptTafamilyTaaddressatimeoutasource_addressasocket_optionsahostaportaerrafamilyaresaafasocktypeaprotoacanonnameasaasockweTaconnasocku.urllib3.util6a__doc__u/usr/lib/python3/dist-packages/urllib3/util/__init__.pya__file__Lu/usr/lib/python3/dist-packages/urllib3/utila__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__aabsolute_importaconnectionTais_connection_droppedlais_connection_droppedarequestTamake_headersamake_headersaresponseTais_fp_closedais_fp_closedassl_T	aSSLContextaHAS_SNIaIS_PYOPENSSLaIS_SECURETRANSPORTaassert_fingerprintaresolve_cert_reqsaresolve_ssl_versionassl_wrap_socketaPROTOCOL_TLSaSSLContextaHAS_SNIaIS_PYOPENSSLaIS_SECURETRANSPORTaassert_fingerprintaresolve_cert_reqsaresolve_ssl_versionassl_wrap_socketaPROTOCOL_TLSatimeoutTacurrent_timeaTimeoutacurrent_timeaTimeoutaretryTaRetryaRetryaurlTaget_hostaparse_urlasplit_firstaUrlaget_hostaparse_urlasplit_firstaUrlawaitTawait_for_readawait_for_writeawait_for_readawait_for_writeTaHAS_SNIaIS_PYOPENSSLaIS_SECURETRANSPORTaSSLContextaPROTOCOL_TLSaRetryaTimeoutaUrlaassert_fingerprintacurrent_timeais_connection_droppedais_fp_closedaget_hostaparse_urlamake_headersaresolve_cert_reqsaresolve_ssl_versionasplit_firstassl_wrap_socketawait_for_readawait_for_writea__all__u<module urllib3.util>u.urllib3.util.queueg.acollectionsadequeaqueueaappendapopa__doc__u/usr/lib/python3/dist-packages/urllib3/util/queue.pya__file__a__spec__aoriginahas_locationa__cached__lasixusix.movesTaqueueaPY2aQueuea_unused_module_Queueametaclassa__prepare__aLifoQueuea__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uurllib3.util.queuea__module__a__qualname__a_inituLifoQueue._initalena_qsizeuLifoQueue._qsizea_putuLifoQueue._puta_getuLifoQueue._geta__orig_bases__u<module urllib3.util.queue>Ta__class__TaselfTaselfw_TaselfaitemTaselfalenu.urllib3.util.requesto	:w,aACCEPT_ENCODINGuaccept-encodingaheadersuuser-agentukeep-aliveaconnectionuBasic ab64encodewbadecodeTuutf-8aauthorizationuproxy-authorizationuno-cacheucache-controlu
    Shortcuts for generating request headers.

    :param keep_alive:
        If ``True``, adds 'connection: keep-alive' header.

    :param accept_encoding:
        Can be a boolean, list, or string.
        ``True`` translates to 'gzip,deflate'.
        List will get joined by comma.
        String will be used as provided.

    :param user_agent:
        String representing the user-agent you want, such as
        "python-urllib3/0.6"

    :param basic_auth:
        Colon-separated username:password string for 'authorization: basic ...'
        auth header.

    :param proxy_basic_auth:
        Colon-separated username:password string for 'proxy-authorization: basic ...'
        auth header.

    :param disable_cache:
        If ``True``, adds 'cache-control: no-cache' header.

    Example::

        >>> make_headers(keep_alive=True, user_agent="Batman/1.0")
        {'connection': 'keep-alive', 'user-agent': 'Batman/1.0'}
        >>> make_headers(accept_encoding=True)
        {'accept-encoding': 'gzip,deflate'}
    arewind_bodyatellTEOSErrorpa_FAILEDTELLaposu
    If a position is provided, move file to that point.
    Otherwise, we'll attempt to record a position for future use.
    aseekainteger_typesaUnrewindableBodyErrorTuAn error occurred when rewinding request body for redirect/retry.TuUnable to record file position for rewinding request body during a redirect/retry.ubody_pos must be of type integer, instead it was %s.u
    Attempt to rewind body to a certain position.
    Primarily used for request redirects and retries.

    :param body:
        File-like object that supports seek.

    :param int pos:
        Position to seek to in file.
    a__doc__u/usr/lib/python3/dist-packages/urllib3/util/request.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importabase64Tab64encodelasixTwbainteger_typesaexceptionsTaUnrewindableBodyErrorlugzip,deflateabrotlia_unused_module_brotliu,brTnnnnnnamake_headersaset_file_positionu<module urllib3.util.request>Takeep_aliveaaccept_encodingauser_agentabasic_authaproxy_basic_authadisable_cacheaheadersTabodyabody_posabody_seekTabodyaposu.urllib3.util.response +aisclosedaclosedafpuUnable to determine whether fp is closed.u
    Checks whether a given file-like object is closed.

    :param obj:
        The file-like object to check.
    ahttplibaHTTPMessageuexpected httplib.Message, got {0}.adefectsaget_payloadais_multipartTObytesOstraHeaderParsingErrorTadefectsaunparsed_datau
    Asserts whether all headers have been successfully parsed.
    Extracts encountered errors from the result of parsing headers.

    Only works on Python 3.

    :param headers: Headers to verify.
    :type headers: `httplib.HTTPMessage`.

    :raises urllib3.exceptions.HeaderParsingError:
        If parsing errors are found.
    a_methodlaupperaHEADu
    Checks whether the request of a response has been a HEAD-request.
    Handles the quirks of AppEngine.

    :param conn:
    :type conn: :class:`httplib.HTTPResponse`
    a__doc__u/usr/lib/python3/dist-packages/urllib3/util/response.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importusix.movesTahttp_clientlahttp_clientaexceptionsTaHeaderParsingErrorlais_fp_closedaassert_header_parsingais_response_to_headu<module urllib3.util.response>Taheadersadefectsaget_payloadaunparsed_dataapayloadTaobjTaresponseamethodu.urllib3.util.retry&�atotalaconnectareadastatuslaredirectastatus_forcelistamethod_whitelistabackoff_factoraraise_on_redirectaraise_on_statusTahistoryarespect_retry_after_headeraloweraremove_headers_on_redirectaDEFAULTaRetryaclsTaredirectalogadebuguConverted retries value: %r -> %ru Backwards-compatibility for the old retries format.atakewhileu<lambda>uRetry.get_backoff_time.<locals>.<lambda>laminaBACKOFF_MAXu Formula for computing the current backoff

        :rtype: float
        aredirect_locationareamatchu^\s*[0-9]+\s*$aemailautilsaparsedateaInvalidHeaderuInvalid Retry-After header: %satimeamktimeagetheaderTuRetry-Afteraparse_retry_afteru Get the value of Retry-After in seconds. aget_retry_afterasleepaget_backoff_timeasleep_for_retrya_sleep_backoffu Sleep between retry attempts.

        This method will respect a server's ``Retry-After`` response header
        and sleep the duration of the time requested. If that is not present, it
        will use an exponential backoff. By default, the backoff factor is 0 and
        this method will return immediately.
        aConnectTimeoutErroru Errors when we're fairly sure that the server did not receive the
        request, so it should be safe to retry.
        aReadTimeoutErroraProtocolErroru Errors that occur after the request has been started, so we should
        assume that the server began processing it.
        aupperu Checks if a given HTTP method should be retried upon, depending if
        it is included on the method whitelist.
        a_is_method_retryableaRETRY_AFTER_STATUS_CODESu Is this method/status code retryable? (Based on whitelists and control
        variables such as the number of total retries to allow, whether to
        respect the Retry-After header, whether this header is present, and
        whether the returned status code is on the list of status codes to
        be retried upon on the presence of the aforementioned header)
        u Are we out of retries? asixareraiselaunknowna_is_connection_erroraerrora_is_read_erroraget_redirect_locationutoo many redirectsaresponseaResponseErroraGENERIC_ERRORaSPECIFIC_ERRORaformatTastatus_codeaRequestHistoryamethodanewTatotalaconnectareadaredirectastatusahistoryais_exhaustedaMaxRetryErroruIncremented Retry for (url='%s'): %ru Return a new Retry object with incremented retry counters.

        :param response: A response object, or None, if the server did not
            return a response.
        :type response: :class:`~urllib3.response.HTTPResponse`
        :param Exception error: An error encountered during the request, or
            None if the response was received successfully.

        :return: A new ``Retry`` object.
        u{cls.__name__}(total={self.total}, connect={self.connect}, read={self.read}, redirect={self.redirect}, status={self.status})Taclsaselfa__doc__u/usr/lib/python3/dist-packages/urllib3/util/retry.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importaloggingacollectionsTanamedtupleanamedtupleaitertoolsTatakewhileaexceptionsTaConnectTimeoutErroraMaxRetryErroraProtocolErroraReadTimeoutErroraResponseErroraInvalidHeaderagetLoggerTuurllib3.util.retryLamethodaurlaerrorastatusaredirect_locationTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uurllib3.util.retrya__module__u Retry configuration.

    Each retry attempt will create a new Retry object with updated values, so
    they can be safely reused.

    Retries can be defined as a default for a pool::

        retries = Retry(connect=5, read=2, redirect=5)
        http = PoolManager(retries=retries)
        response = http.request('GET', 'http://example.com/')

    Or per-request (which overrides the default for the pool)::

        response = http.request('GET', 'http://example.com/', retries=Retry(10))

    Retries can be disabled by passing ``False``::

        response = http.request('GET', 'http://example.com/', retries=False)

    Errors will be wrapped in :class:`~urllib3.exceptions.MaxRetryError` unless
    retries are disabled, in which case the causing exception will be raised.

    :param int total:
        Total number of retries to allow. Takes precedence over other counts.

        Set to ``None`` to remove this constraint and fall back on other
        counts. It's a good idea to set this to some sensibly-high value to
        account for unexpected edge cases and avoid infinite retry loops.

        Set to ``0`` to fail on the first retry.

        Set to ``False`` to disable and imply ``raise_on_redirect=False``.

    :param int connect:
        How many connection-related errors to retry on.

        These are errors raised before the request is sent to the remote server,
        which we assume has not triggered the server to process the request.

        Set to ``0`` to fail on the first retry of this type.

    :param int read:
        How many times to retry on read errors.

        These errors are raised after the request was sent to the server, so the
        request may have side-effects.

        Set to ``0`` to fail on the first retry of this type.

    :param int redirect:
        How many redirects to perform. Limit this to avoid infinite redirect
        loops.

        A redirect is a HTTP response with a status code 301, 302, 303, 307 or
        308.

        Set to ``0`` to fail on the first retry of this type.

        Set to ``False`` to disable and imply ``raise_on_redirect=False``.

    :param int status:
        How many times to retry on bad status codes.

        These are retries made on responses, where status code matches
        ``status_forcelist``.

        Set to ``0`` to fail on the first retry of this type.

    :param iterable method_whitelist:
        Set of uppercased HTTP method verbs that we should retry on.

        By default, we only retry on methods which are considered to be
        idempotent (multiple requests with the same parameters end with the
        same state). See :attr:`Retry.DEFAULT_METHOD_WHITELIST`.

        Set to a ``False`` value to retry on any verb.

    :param iterable status_forcelist:
        A set of integer HTTP status codes that we should force a retry on.
        A retry is initiated if the request method is in ``method_whitelist``
        and the response status code is in ``status_forcelist``.

        By default, this is disabled with ``None``.

    :param float backoff_factor:
        A backoff factor to apply between attempts after the second try
        (most errors are resolved immediately by a second try without a
        delay). urllib3 will sleep for::

            {backoff factor} * (2 ** ({number of total retries} - 1))

        seconds. If the backoff_factor is 0.1, then :func:`.sleep` will sleep
        for [0.0s, 0.2s, 0.4s, ...] between retries. It will never be longer
        than :attr:`Retry.BACKOFF_MAX`.

        By default, backoff is disabled (set to 0).

    :param bool raise_on_redirect: Whether, if the number of redirects is
        exhausted, to raise a MaxRetryError, or to return a response with a
        response code in the 3xx range.

    :param bool raise_on_status: Similar meaning to ``raise_on_redirect``:
        whether we should raise an exception, or return a response,
        if status falls in ``status_forcelist`` range and retries have
        been exhausted.

    :param tuple history: The history of the request encountered during
        each call to :meth:`~Retry.increment`. The list is in the order
        the requests occurred. Each list item is of class :class:`RequestHistory`.

    :param bool respect_retry_after_header:
        Whether to respect Retry-After header on status codes defined as
        :attr:`Retry.RETRY_AFTER_STATUS_CODES` or not.

    :param iterable remove_headers_on_redirect:
        Sequence of headers to remove from the request when a response
        indicating a redirect is returned before firing off the redirected
        request.
    a__qualname__afrozensetLaHEADaGETaPUTaDELETEaOPTIONSaTRACEPaGETaPUTaDELETEaHEADaOPTIONSaTRACEaDEFAULT_METHOD_WHITELISTLl�l�l�Pl�l�l�LaAuthorizationPaAuthorizationaDEFAULT_REDIRECT_HEADERS_BLACKLISTlxl
a__init__uRetry.__init__uRetry.newaclassmethodTtnafrom_intuRetry.from_intuRetry.get_backoff_timeuRetry.parse_retry_afteruRetry.get_retry_afterTnuRetry.sleep_for_retryuRetry._sleep_backoffuRetry.sleepuRetry._is_connection_erroruRetry._is_read_erroruRetry._is_method_retryableTFais_retryuRetry.is_retryuRetry.is_exhaustedTnnnnnnaincrementuRetry.incrementa__repr__uRetry.__repr__a__orig_bases__TlTwxu<listcomp>Twhu<module urllib3.util.retry>Ta__class__Taselfatotalaconnectareadaredirectastatusamethod_whitelistastatus_forcelistabackoff_factoraraise_on_redirectaraise_on_statusahistoryarespect_retry_after_headeraremove_headers_on_redirectTaselfTaselfaerrTaselfamethodTaselfabackoffTaclsaretriesaredirectadefaultanew_retriesTaselfaconsecutive_errors_lenabackoff_valueTaselfaresponsearetry_afterTaselfamethodaurlaresponseaerrora_poola_stacktraceatotalaconnectareadaredirectastatus_countacauseastatusaredirect_locationahistoryanew_retryTaselfaretry_countsTaselfamethodastatus_codeahas_retry_afterTaselfakwaparamsTaselfaretry_afterasecondsaretry_date_tuplearetry_dateTaselfaresponseasleptu.urllib3.util.ssl_��utoo many values to unpack (expected 2)aresultlu
    Compare two digests of equal length in constant time.

    The digests must be of type str/bytes.
    Returns True if the digests match, and False otherwise.
    aprotocolacheck_hostnameasslaCERT_NONEaverify_modeaca_certsaoptionsacertfileakeyfileaciphersaSSLErrorTuCA directories not supported in older PythonsawarningsawarnuA true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warningsaInsecurePlatformWarningacert_reqsassl_versionaserver_sideawrap_socketareplaceTw:ualoweraHASHFUNC_MAPagetuFingerprint of invalid length: {0}aunhexlifyaencodeadigesta_const_compare_digestuFingerprints did not match. Expected "{0}", got "{1}".ahexlifyu
    Checks if given fingerprint matches the supplied certificate.

    :param cert:
        Certificate as bytes object.
    :param fingerprint:
        Fingerprint as string of hexdigits, can be interspersed by colons.
    aCERT_REQUIREDaCERT_u
    Resolves the argument to a numeric constant, which can be passed to
    the wrap_socket function/method from the ssl module.
    Defaults to :data:`ssl.CERT_REQUIRED`.
    If given a string it is assumed to be the name of the constant in the
    :mod:`ssl` module or its abbreviation.
    (So you can specify `REQUIRED` instead of `CERT_REQUIRED`.
    If it's neither `None` nor a string we assume it is already the numeric
    constant which can directly be passed to wrap_socket.
    aPROTOCOL_TLSaPROTOCOL_u
    like resolve_cert_reqs
    aSSLContextaset_ciphersaDEFAULT_CIPHERSaOP_NO_SSLv2aOP_NO_SSLv3aOP_NO_COMPRESSIONapost_handshake_authuAll arguments have the same meaning as ``ssl_wrap_socket``.

    By default, this function does a lot of the same work that
    ``ssl.create_default_context`` does on Python 3.4+. It:

    - Disables SSLv2, SSLv3, and compression
    - Sets a restricted set of server ciphers

    If you wish to enable SSLv3, you can do::

        from urllib3.util import ssl_
        context = ssl_.create_urllib3_context()
        context.options &= ~ssl_.OP_NO_SSLv3

    You can do the same to enable compression (substituting ``COMPRESSION``
    for ``SSLv3`` in the last line above).

    :param ssl_version:
        The desired protocol version to use. This will default to
        PROTOCOL_SSLv23 which will negotiate the highest protocol that both
        the server and your installation of OpenSSL support.
    :param cert_reqs:
        Whether to require the certificate verification. This defaults to
        ``ssl.CERT_REQUIRED``.
    :param options:
        Specific OpenSSL options. These default to ``ssl.OP_NO_SSLv2``,
        ``ssl.OP_NO_SSLv3``, ``ssl.OP_NO_COMPRESSION``.
    :param ciphers:
        Which cipher suites to allow the server to select.
    :returns:
        Constructed SSLContext object with specified options
    :rtype: SSLContext
    acreate_urllib3_contextTaciphersaload_verify_locationsaerrnoaENOENTaload_default_certsa_is_key_file_encryptedTuClient private key is encrypted, password is requiredacontextaload_cert_chainais_ipaddressaIS_SECURETRANSPORTaHAS_SNIaserver_hostnameTaserver_hostnameuAn HTTPS request has been made, but the SNI (Server Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warningsaSNIMissingWarningu
    All arguments except for server_hostname, ssl_context, and ca_cert_dir have
    the same meaning as they do when using :func:`ssl.wrap_socket`.

    :param server_hostname:
        When SNI is supported, the expected hostname of the certificate
    :param ssl_context:
        A pre-made :class:`SSLContext` object. If none is provided, one will
        be created using :func:`create_urllib3_context`.
    :param ciphers:
        A string of ciphers we wish the client to support.
    :param ca_cert_dir:
        A directory containing CA certificates in multiple separate files, as
        supported by OpenSSL's -CApath flag or the capath argument to
        SSLContext.load_verify_locations().
    :param key_password:
        Optional password if the keyfile is encrypted.
    asixaPY2adecodeTaasciiaIPV4_REamatchaBRACELESS_IPV6_ADDRZ_REuDetects whether the hostname given is an IPv4 or IPv6 address.
    Also detects IPv6 addresses with Zone IDs.

    :param str hostname: Hostname to examine.
    :return: True if the hostname is an IP address, False otherwise.
    wra__enter__a__exit__aENCRYPTEDTnnnuDetects if a key file is encrypted or not.a__doc__u/usr/lib/python3/dist-packages/urllib3/util/ssl_.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importahmacasysabinasciiTahexlifyaunhexlifyahashlibTamd5asha1asha256amd5asha1asha256aurlTaIPV4_REaBRACELESS_IPV6_ADDRZ_RElaexceptionsTaSSLErroraInsecurePlatformWarningaSNIMissingWarninglaIS_PYOPENSSLl l(l@a_const_compare_digest_backportacompare_digestTawrap_socketaCERT_REQUIREDTaHAS_SNITaPROTOCOL_TLSaPROTOCOL_SSLv23TaPROTOCOL_SSLv23TaOP_NO_SSLv2aOP_NO_SSLv3aOP_NO_COMPRESSIONTllluECDHE+AESGCM:ECDHE+CHACHA20:DHE+AESGCM:DHE+CHACHA20:ECDH+AESGCM:DH+AESGCM:ECDH+AES:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!eNULL:!MD5:!DSSTaSSLContextTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uurllib3.util.ssl_a__module__a__qualname__a__init__uSSLContext.__init__uSSLContext.load_cert_chainTnnuSSLContext.load_verify_locationsuSSLContext.set_ciphersTnFuSSLContext.wrap_socketa__orig_bases__aassert_fingerprintaresolve_cert_reqsaresolve_ssl_versionTnnnnT
nnnnnnnnnnassl_wrap_socketu<module urllib3.util.ssl_>Ta__class__Taselfaprotocol_versionTwawbaresultwlwrTakey_filewfalineTacertafingerprintadigest_lengthahashfuncafingerprint_bytesacert_digestTassl_versionacert_reqsaoptionsaciphersacontextTahostnameTaselfacertfileakeyfileTaselfacafileacapathTacandidatearesTaselfacipher_suiteT
asockakeyfileacertfileacert_reqsaca_certsaserver_hostnameassl_versionaciphersassl_contextaca_cert_dirakey_passwordacontextweTaselfasocketaserver_hostnameaserver_sideakwargsu.urllib3.util.timeoutYUa_validate_timeoutaconnecta_connectareada_readatotala_start_connectu%s(connect=%r, read=%r, total=%r)a__name__a_DefaultaDEFAULT_TIMEOUTuTimeout cannot be a boolean value. It must be an int, float or None.TETypeErrorEValueErroruTimeout value %s was %s, but it must be an int, float or None.luAttempted to set %s timeout to %s, but the timeout cannot be set to a value less than or equal to 0.u Check that a timeout attribute is valid.

        :param value: The timeout value to validate
        :param name: The name of the timeout attribute to validate. This is
            used to specify in error messages.
        :return: The validated and casted version of the given value.
        :raises ValueError: If it is a numeric value less than or equal to
            zero, or the type is not an integer, float, or None.
        aTimeoutTareadaconnectu Create a new Timeout from a legacy timeout value.

        The timeout value used by httplib.py sets the same timeout on the
        connect(), and recv() socket requests. This creates a :class:`Timeout`
        object that sets the individual timeouts to the ``timeout`` value
        passed to this function.

        :param timeout: The legacy timeout value.
        :type timeout: integer, float, sentinel default object, or None
        :return: Timeout object
        :rtype: :class:`Timeout`
        Taconnectareadatotalu Create a copy of the timeout object

        Timeout properties are stored per-pool but each request needs a fresh
        Timeout object to ensure each one has its own start/stop configured.

        :return: a copy of the timeout object
        :rtype: :class:`Timeout`
        aTimeoutStateErrorTuTimeout timer has already been started.acurrent_timeu Start the timeout clock, used during a connect() attempt

        :raises urllib3.exceptions.TimeoutStateError: if you attempt
            to start a timer that has been started already.
        TuCan't get connect duration for timer that has not started.u Gets the time elapsed since the call to :meth:`start_connect`.

        :return: Elapsed time in seconds.
        :rtype: float
        :raises urllib3.exceptions.TimeoutStateError: if you attempt
            to get duration for a timer that hasn't been started.
        aminu Get the value to use when setting a connection timeout.

        This will be a positive float or integer, the value None
        (never timeout), or the default system timeout.

        :return: Connect timeout.
        :rtype: int, float, :attr:`Timeout.DEFAULT_TIMEOUT` or None
        amaxaget_connect_durationu Get the value for the read timeout.

        This assumes some time has elapsed in the connection timeout and
        computes the read timeout appropriately.

        If self.total is set, the read timeout is dependent on the amount of
        time taken by the connect timeout. If the connection time has not been
        established, a :exc:`~urllib3.exceptions.TimeoutStateError` will be
        raised.

        :return: Value to use for the read timeout.
        :rtype: int, float, :attr:`Timeout.DEFAULT_TIMEOUT` or None
        :raises urllib3.exceptions.TimeoutStateError: If :meth:`start_connect`
            has not yet been called on this object.
        a__doc__u/usr/lib/python3/dist-packages/urllib3/util/timeout.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importasocketTa_GLOBAL_DEFAULT_TIMEOUTa_GLOBAL_DEFAULT_TIMEOUTatimeaexceptionsTaTimeoutStateErrorlamonotonicTOobjectametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %su<metaclass>uurllib3.util.timeouta__module__u Timeout configuration.

    Timeouts can be defined as a default for a pool::

        timeout = Timeout(connect=2.0, read=7.0)
        http = PoolManager(timeout=timeout)
        response = http.request('GET', 'http://example.com/')

    Or per-request (which overrides the default for the pool)::

        response = http.request('GET', 'http://example.com/', timeout=Timeout(10))

    Timeouts can be disabled by setting all the parameters to ``None``::

        no_timeout = Timeout(connect=None, read=None)
        response = http.request('GET', 'http://example.com/, timeout=no_timeout)


    :param total:
        This combines the connect and read timeouts into one; the read timeout
        will be set to the time leftover from the connect attempt. In the
        event that both a connect timeout and a total are specified, or a read
        timeout and a total are specified, the shorter timeout will be applied.

        Defaults to None.

    :type total: integer, float, or None

    :param connect:
        The maximum amount of time (in seconds) to wait for a connection
        attempt to a server to succeed. Omitting the parameter will default the
        connect timeout to the system default, probably `the global default
        timeout in socket.py
        <http://hg.python.org/cpython/file/603b4d593758/Lib/socket.py#l535>`_.
        None will set an infinite timeout for connection attempts.

    :type connect: integer, float, or None

    :param read:
        The maximum amount of time (in seconds) to wait between consecutive
        read operations for a response from the server. Omitting the parameter
        will default the read timeout to the system default, probably `the
        global default timeout in socket.py
        <http://hg.python.org/cpython/file/603b4d593758/Lib/socket.py#l535>`_.
        None will set an infinite timeout.

    :type read: integer, float, or None

    .. note::

        Many factors can affect the total amount of time for urllib3 to return
        an HTTP response.

        For example, Python's DNS resolver does not obey the timeout specified
        on the socket. Other factors that can affect total request time include
        high CPU load, high swap, the program running at a low priority level,
        or other behaviors.

        In addition, the read and total timeouts only measure the time between
        read operations on the socket connecting the client and the server,
        not the total amount of time for the request to return a complete
        response. For most requests, the timeout is raised because the server
        has not sent the first byte in the specified time. This is not always
        the case; if a server streams one byte every fifteen seconds, a timeout
        of 20 seconds will not trigger, even though the request will take
        several minutes to complete.

        If your goal is to cut off any request after a set amount of wall clock
        time, consider having a second "watcher" thread to cut off a slow
        request.
    a__qualname__a__init__uTimeout.__init__a__str__uTimeout.__str__aclassmethoduTimeout._validate_timeoutafrom_floatuTimeout.from_floatacloneuTimeout.cloneastart_connectuTimeout.start_connectuTimeout.get_connect_durationapropertyaconnect_timeoutuTimeout.connect_timeoutaread_timeoutuTimeout.read_timeouta__orig_bases__u<module urllib3.util.timeout>Ta__class__TaselfatotalaconnectareadTaselfTaclsavalueanameTaclsatimeoutu.urllib3.util.url��astartswithTw/w/apathaloweraUrla__new__ahostuFor backwards-compatibility with urlparse. We're nice like that.aqueryw?uAbsolute path including the query string.aportu%s:%duNetwork location including host and portutoo many values to unpack (expected 7)uu://w@w:w#u
        Convert self into a url

        This function should more or less round-trip with :func:`.parse_url`. The
        returned url may not be exactly the same as the url inputted to
        :func:`.parse_url`, but it should be equivalent by the RFC (e.g., urls
        with a blank port will have : removed).

        Example: ::

            >>> U = parse_url('http://google.com/mail/')
            >>> U.url
            'http://google.com/mail/'
            >>> Url('http', 'username:password', 'host.com', 80,
            ... '/path', 'query', 'fragment').url
            'http://username:password@host.com:80/path?query#fragment'
        aurlwsafindlamin_idxlamin_delimu
    .. deprecated:: 1.25

    Given a string and an iterable of delimiters, split on the first found
    delimiter. Return two split parts and the matched delimiter.

    If not found, then the first part is the full input string.

    Example::

        >>> split_first('foo/bar?baz', '?/=')
        ('foo', 'bar?baz', '/')
        >>> split_first('foo/bar?baz', '123')
        ('foo/bar?baz', '', None)

    Scales linearly with number of delims. Not ideal for large number of delims.
    asixaensure_textaPERCENT_REasubnu<lambda>u_encode_invalid_chars.<locals>.<lambda>utoo many values to unpack (expected 2)aencodeTuutf-8asurrogatepassacountTd%Bd%l�adecodeaencoded_componentabyteaextend:lnnazfillTlaupperuPercent-encodes a URI component without reapplying
    onto an already percent-encoded component.
    agroupTlasplitw.u..aoutputaappendapopainsertTluaendswithTTu/.u/..Tuabinary_typeaensure_straNORMALIZABLE_SCHEMESaIPV6_ADDRZ_REamatchaZONE_ID_REasearchaspanTlTu%25u%25:lnn:lnnw%a_encode_invalid_charsaUNRESERVED_CHARSaIPV4_REd.ajoinTw.a_idna_encodeaidnaaraise_fromaLocationParseErrorTuUnable to parse URL without the 'idna' moduleanameDastrictastd3_rulestpaIDNAErroruName '%s' is not a valid IDNA labelTaasciiaTARGET_REagroupsaPATH_CHARSaQUERY_CHARSuPercent-encodes a request target so that there are no invalid charactersaSCHEME_REu//aURI_REutoo many values to unpack (expected 5)aschemeaSUBAUTHORITY_REutoo many values to unpack (expected 3)aUSERINFO_CHARSTnnnl��a_normalize_hosta_remove_path_dot_segmentsaFRAGMENT_CHARSTEValueErrorEAttributeErroratext_typeaensure_typeuparse_url.<locals>.ensure_typeTaschemeaauthahostaportapathaqueryafragmentu
    Given a url, return a parsed :class:`.Url` namedtuple. Best-effort is
    performed to parse incomplete urls. Fields not provided will be None.
    This parser is RFC 3986 compliant.

    The parser logic and helper functions are based heavily on
    work done in the ``rfc3986`` module.

    :param str url: URL to parse into a :class:`.Url` namedtuple.

    Partly backwards-compatible with :mod:`urlparse`.

    Example::

        >>> parse_url('http://google.com/mail/')
        Url(scheme='http', host='google.com', port=None, path='/mail/', ...)
        >>> parse_url('google.com:80')
        Url(scheme=None, host='google.com', port=80, path=None, ...)
        >>> parse_url('/foo?bar')
        Url(scheme=None, host=None, port=None, path='/foo', query='bar', ...)
    aensure_funcaparse_urlahttpahostnameu
    Deprecated. Use :func:`parse_url` instead.
    a__doc__u/usr/lib/python3/dist-packages/urllib3/util/url.pya__file__a__spec__aoriginahas_locationa__cached__aabsolute_importareacollectionsTanamedtupleanamedtupleaexceptionsTaLocationParseErrorlLaschemeaauthahostaportapathaqueryafragmentaurl_attrsTahttpahttpsnacompileTu%[a-fA-F0-9]{2}Tu^(?:[a-zA-Z][a-zA-Z0-9+-]*:|/)u^(?:([a-zA-Z][a-zA-Z0-9+.-]*):)?(?://([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?$aUNICODEaDOTALLu(?:[0-9]{1,3}\.){3}[0-9]{1,3}aIPV4_PATu[0-9A-Fa-f]{1,4}aHEX_PATu(?:{hex}:{hex}|{ipv4})Tahexaipv4aLS32_PATahexals32a_subsL	u(?:%(hex)s:){6}%(ls32)su::(?:%(hex)s:){5}%(ls32)su(?:%(hex)s)?::(?:%(hex)s:){4}%(ls32)su(?:(?:%(hex)s:)?%(hex)s)?::(?:%(hex)s:){3}%(ls32)su(?:(?:%(hex)s:){0,2}%(hex)s)?::(?:%(hex)s:){2}%(ls32)su(?:(?:%(hex)s:){0,3}%(hex)s)?::%(hex)s:%(ls32)su(?:(?:%(hex)s:){0,4}%(hex)s)?::%(ls32)su(?:(?:%(hex)s:){0,5}%(hex)s)?::%(hex)su(?:(?:%(hex)s:){0,6}%(hex)s)?::a_variationsuABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._!\-~aUNRESERVED_PATu(?:w|w)aIPV6_PATu(?:%25|%)(?:[u]|%[a-fA-F0-9]{2})+aZONE_ID_PATu\[u)?\]aIPV6_ADDRZ_PATu(?:[^\[\]%:/?#]|%[a-fA-F0-9]{2})*aREG_NAME_PATTu^(/[^?#]*)(?:\?([^#]*))?(?:#.*)?$w^w$aIPV6_RE:ll��������naBRACELESS_IPV6_ADDRZ_REw(u)\]$u^(?:(.*)@)?(%s|%s|%s)(?::([0-9]{0,5}))?$aSUBAUTHORITY_PATSBwMwFwYwiwrwxw2wpw-wdw8wXwKwQwcwDwywlwEwSwOw3whwHwmw.wPwBwUwJwzwVwAw6wIwLwkw5wowaw0wZw7w_wgw1wTwGwfwewWwuwwwRwnwbwqwjwtw~wNwsw4w9wvwCSw=w(w*w!w$w;w&w,w)w+w'aSUB_DELIM_CHARSSw:Sw@w/Sw?ametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uurllib3.util.urla__module__u
    Data structure for representing an HTTP URL. Used as a return value for
    :func:`parse_url`. Both the scheme and host are normalized as they are
    both case-insensitive according to RFC 3986.
    a__qualname__Ta__slots__TnnnnnnnuUrl.__new__apropertyuUrl.hostnamearequest_uriuUrl.request_urianetlocuUrl.netlocuUrl.urla__str__uUrl.__str__a__orig_bases__asplit_firstTuutf-8a_encode_targetaget_hostTamatchu<listcomp>TalabelTwxu<module urllib3.util.url>Ta__class__T	aclsaschemeaauthahostaportapathaqueryafragmenta__class__TaselfT
acomponentaallowed_charsaencodingapercent_encodingsauri_bytesais_percent_encodedaencoded_componentwiabyteabyte_ordTatargetapathaqueryTanameaidnaTahostaschemeais_ipv6amatchastartaendazone_idTapathasegmentsaoutputasegmentTwxaensure_funcTaensure_funcTaurlwpT
aurlasource_urlaschemeaauthorityapathaqueryafragmentanormalize_uriaauthahostaportaensure_funcaensure_typeTaselfauriTwsadelimsamin_idxamin_delimwdaidxT	aselfaschemeaauthahostaportapathaqueryafragmentaurl.urllib3.util.wait�Dumust specify at least one of read=True, write=Trueaappendasockapartialaselectarcheckawchecka_retry_on_intrutoo many values to unpack (expected 3)laPOLLINaPOLLOUTapollaregisterado_pollupoll_wait_for_socket.<locals>.do_polll�apoll_objaNoWayToWaitForSocketErrorTuno select-equivalent availableTEAttributeErrorEOSErrora_have_working_pollapoll_wait_for_socketawait_for_socketaselect_wait_for_socketanull_wait_for_socketTareadatimeoutu Waits for reading to be available on a given socket.
    Returns True if the socket is readable, or False if the timeout expired.
    Tawriteatimeoutu Waits for writing to be available on a given socket.
    Returns True if the socket is readable, or False if the timeout expired.
    a__doc__u/usr/lib/python3/dist-packages/urllib3/util/wait.pya__file__a__spec__aoriginahas_locationa__cached__aerrnoasysatimeTamonotonicamonotonicLaNoWayToWaitForSocketErrorawait_for_readawait_for_writea__all__TEExceptionametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uurllib3.util.waita__module__a__qualname__a__orig_bases__TFpnTnawait_for_readawait_for_writeu<module urllib3.util.wait>Tapoll_objTafnatimeoutTwtapoll_objTaargsakwargsTasockareadawriteatimeoutamaskapoll_objado_pollT
asockareadawriteatimeoutarcheckawcheckafnarreadyawreadyaxreadyTasockatimeoutu.wadllib.application�eu{http://research.sun.com/wadl/2006/10}uScope a tag name with the WADL namespace.u./awadl_taguTurn a tag name into an XPath path.afinalaupdateuMerge any number of dictionaries, some of which may be None.aresourceuCould not find any particular resourceaselfatagafindallawadl_xpathTaparamaattribagetTastyleaParameteruFind subsidiary parameters that have the given styles.a_merge_dictsanameafixed_valueaparam_valuesuValue '%s' for parameter '%s' conflicts with fixed value '%s'aoptionsavalueuInvalid value '%s' for parameter '%s': valid values are: "%s"u", "ais_requireduNo value for required parameter '%s'avalidated_valuesuUnrecognized parameter(s): '%s'u', 'akeysuMake sure the given valueset is valid.

        A valueset might be invalid because it contradicts a fixed
        value or (if enforce_completeness is True) because it lacks a
        required value.

        :param params: A list of Parameter objects.
        :param param_values: A dictionary of parameter values. May include
           paramters whose names are not valid Python identifiers.
        :param enforce_completeness: If True, this method will raise
           an exception when the given value set lacks a value for a
           required parameter.
        :param kw_param_values: A dictionary of parameter values.
        :return: A dictionary of validated parameter values.
        a_definitionaapplicationuInitialize with a WADL application.

        :param application: A WADLDefinition. Relative links are
            assumed to be relative to this object's URL.
        a_get_definition_urlalookup_xml_ida_definition_factoryuNo such XML ID: "%s"uReturn the definition of this object, wherever it is.

        Resource is a good example. A WADL <resource> tag
        may contain a large number of nested tags describing a
        resource, or it may just contain a 'type' attribute that
        references a <resource_type> which contains those same
        tags. Resource.resolve_definition() will return the original
        Resource object in the first case, and a
        ResourceType object in the second case.
        uTransform an XML ID into a wadllib wrapper object.

        Which kind of object it is depends on the subclass.
        uFind the URL that identifies an external reference.

        How to do this depends on the subclass.
        aResourcea__init__a_urla_string_typesaget_resource_typearepresentationuapplication/jsonajsonaloadsa_make_unicodeaUnsupportedMediaTypeErroruThis resource doesn't define a representation for media type %samedia_typearepresentation_definitionaget_representation_definitionu
        :param application: A WADLApplication.
        :param url: The URL to this resource.
        :param resource_type: An ElementTree <resource> or <resource_type> tag.
        :param representation: A string representation.
        :param media_type: The media type of the representation.
        :param representation_needs_processing: Set to False if the
            'representation' parameter should be used as
            is. Otherwise, it will be transformed from a string into
            an appropriate Python data structure, depending on its
            media type.
        :param representation_definition: A RepresentationDefinition
            object describing the structure of this
            representation. Used in cases when the representation
            isn't the result of sending a standard GET to the
            resource.
        uReturn the URL to this resource.TatypeTaidaURIamarkup_urlaensureSlashw#uReturn the URL to the type definition for this resource, if any.aiduReturn the ID of this resource.aurluBind the resource to a representation of that resource.

        :param representation: A string representation
        :param media_type: The media type of the representation.
        :param representation_needs_processing: Set to False if the
            'representation' parameter should be used as
            is.
        :param representation_definition: A RepresentationDefinition
            object describing the structure of this
            representation. Used in cases when the representation
            isn't the result of sending a standard GET to the
            resource.
        :return: A Resource bound to a particular representation.
        aget_methodTaGETaresponsearesolve_definitionTamediaTypeuNo definition for representation with media type %s.uGet a description of one of this resource's representations.a_method_tag_iterTanameualowerahttp_methodaMethodais_described_byaquery_paramsarepresentation_paramsuLook up one of this resource's methods by HTTP method.

        :param http_method: The HTTP method used to invoke the desired
                            method. Case-insensitive and optional.

        :param media_type: The media type of the representation
                           accepted by the method. Optional.

        :param query_params: The names and values of any fixed query
                             parameters used to distinguish between
                             two methods that use the same HTTP
                             method. Optional.

        :param representation_params: The names and values of any
                             fixed representation parameters used to
                             distinguish between two methods that use
                             the same HTTP method and have the same
                             media type. Optional.

        :return: A MethodDefinition, or None if there's no definition
                  that fits the given constraints.
        a_find_representation_definitionaparamsuA list of this resource's parameters.

        :param media_type: Media type of the representation definition
            whose parameters are being named. Must be present unless
            this resource is bound to a representation.

        :raise NoBoundRepresentationError: If this resource is not
            bound to a representation and media_type was not provided.
        aparameter_namesuA list naming this resource's parameters.

        :param media_type: Media type of the representation definition
            whose parameters are being named. Must be present unless
            this resource is bound to a representation.

        :raise NoBoundRepresentationError: If this resource is not
            bound to a representation and media_type was not provided.
        uAn iterator over the methods defined on this resource.amethod_iteruResource.method_iterTanameuFind a parameter within a representation definition.

        :param param_name: Name of the parameter to find.

        :param media_type: Media type of the representation definition
            whose parameters are being named. Must be present unless
            this resource is bound to a representation.

        :raise NoBoundRepresentationError: If this resource is not
            bound to a representation and media_type was not provided.
        aNoBoundRepresentationErrorTuResource is not bound to any representation.astyleaplainuDon't know how to find value for a parameter of type %s.a_dereference_namespaceatypeutoo many values to unpack (expected 2)aXML_SCHEMA_NS_URILadateTimeadateaiso_strptimeadatetimeatimeastrptimeu%Y-%m-%d:llnuPath traversal not implemented for a representation of media type %s.uFind the value of a parameter, given the Parameter object.

        :raise ValueError: If the parameter value can't be converted into
        its defined type.
        w:asplitTw:luaNS_MAPuSplits a value into namespace URI and value.

        :param tag: A tag to use as context when mapping namespace
        names to URIs.
        aresource_typesuGiven an ID, find a ResourceType for that ID.uReturn the URL that shows where a resource is 'really' defined.

        If a resource's capabilities are defined by reference, the
        <resource> tag's 'type' attribute will contain the URL to the
        <resource_type> that defines them.
        TuResource is not bound to any representation, and no media media type was specified.uGet the most appropriate representation definition.

        If media_type is provided, the most appropriate definition is
        the definition of the representation of that media type.

        If this resource is bound to a representation, the most
        appropriate definition is the definition of that
        representation. Otherwise, the most appropriate definition is
        the definition of the representation served in response to a
        standard GET.

        :param media_type: Media type of the definition to find. Must
            be present unless the resource is bound to a
            representation.

        :raise NoBoundRepresentationError: If this resource is not
            bound to a representation and media_type was not provided.

        :return: A RepresentationDefinition
        uIterate over this resource's <method> tags.TamethoduResource._method_tag_iteruInitialize with a <method> tag.

        :param method_tag: An ElementTree <method> tag.
        aRequestDefinitionafindTarequestuReturn the definition of a request that invokes the WADL method.aResponseDefinitionTaresponseuReturn the definition of the response to the WADL method.uThe XML ID of the WADL method definition.uThe name of the WADL method definition.

        This is also the name of the HTTP method (GET, POST, etc.)
        that should be used to invoke the WADL method.
        arequestabuild_urluReturn the request URL to use to invoke this method.uBuild a representation to be sent when invoking this method.

        :return: A 2-tuple of (media_type, representation).
        avalidate_param_valuesaquery_valuesarepresentation_valuesarepresentationsuReturns true if this method fits the given constraints.

        :param media_type: The method must accept this media type as a
                           representation.

        :param query_values: These key-value pairs must be acceptable
                           as values for this method's query
                           parameters. This need not be a complete set
                           of parameters acceptable to the method.

        :param representation_values: These key-value pairs must be
                           acceptable as values for this method's
                           representation parameters. Again, this need
                           not be a complete set of parameters
                           acceptable to the method.
        amethoduInitialize with a <request> tag.

        :param resource: The resource to which this request can be sent.
        :param request_tag: An ElementTree <request> tag.
        LaqueryuReturn the query parameters for this method.TarepresentationaRepresentationDefinitionuRequestDefinition.representationsuReturn the appropriate representation definition.uCannot build representation of media type %sabinduBuild a representation to be sent along with this request.

        :return: A 2-tuple of (media_type, representation).
        w?w&aurlencodeasortedaitemsaheadersuInitialize with a <response> tag.

        :param response_tag: An ElementTree <response> tag.
        uGet an iterator over the representation definitions.

        These are the representations returned in response to an
        invocation of this method.
        a__iter__uResponseDefinition.__iter__uBind the response to a set of HTTP headers.

        A WADL response can have associated header parameters, but no
        other kind.
        aheaderuFind a header parameter within the response.TuResponse object is not bound to any headers.uFind the value of a parameter, given the Parameter object.uGet one of the possible representations of the response.LaqueryaplainuReturn the names of all parameters.amediaTypeuThe media type of the representation described here.arandomarandrangeTq�������u===============u%019du==lu^--areaescapewbu(--)?$aencodeTaasciiasearchaall_partsaMULTILINETaflagsaboundaryw.acounterluMake a random boundary that does not appear in `all_parts`.abufawriteTuUTF-8Tc: Tc
uWrite MIME headers to a file object.Tc--uWrite a multipart boundary to a file object.utoo many values to unpack (expected 3)aioaBytesIOuapplication/octet-streamuform-data; name="%s"; filename="%s"aquoteutext/plain; charset="utf-8"uform-data; name="%s"a_write_headersTuMIME-Versionu1.0uContent-TypeuContent-Dispositionubytes payload expected: %sustr payload expected: %su\r\n|\r|\n:nl��������nl��������aencoded_partsaappendagetvaluea_make_boundaryc
ajoinumultipart/form-data; boundary="%s"a_write_boundaryDaclosingtuGenerate a multipart/form-data message.

        This is very loosely based on the email module in the Python standard
        library.  However, that module doesn't really support directly embedding
        binary data in a form: various versions of Python have mangled line
        separators in different ways, and none of them get it quite right.
        Since we only need a tiny subset of MIME here, it's easier to implement
        it ourselves.

        :return: a tuple of two elements: the Content-Type of the message, and
            the entire encoded message as a byte string.
        uapplication/x-www-form-urlencodedumultipart/form-dataamissingapartsabinarya_generate_multipart_formadumpsuUnsupported media type: '%s'uBind the definition to parameter values, creating a document.

        :return: A 2-tuple (media_type, document).
        arepresentation_definitionsuTurn a representation ID into a RepresentationDefinition.TahrefuFind the URL containing the representation's 'real' definition.

        If a representation's structure is defined by reference, the
        <representation> tag's 'href' attribute will contain the URL
        to the <representation> that defines the structure.
        avalue_containeruInitialize with respect to a value container.

        :param value_container: Usually the resource whose representation
            has this parameter. If the resource is bound to a representation,
            you'll be able to find the value of this parameter in the
            representation. This may also be a server response whose headers
            define a value for this parameter.
        :tag: The ElementTree <param> tag for this parameter.
        uThe name of this parameter.uThe style of this parameter.uThe XSD type of this parameter.TafixeduThe value to which this parameter is fixed, if any.

        A fixed parameter must be present in invocations of a WADL
        method, and it must have a particular value. This is commonly
        used to designate one parameter as containing the name of the
        server-side operation to be invoked.
        TarequiredafalseLw1atrueuWhether or not a value for this parameter is required.aget_parameter_valueuThe value of this parameter in the bound representation/headers.

        :raise NoBoundRepresentationError: If this parameter's value
               container is not bound to a representation or a set of
               headers.
        TaoptionaOptionuReturn the set of acceptable values for this parameter.TalinkaLinkuGet the link to another resource.

        The link may be examined and, if its type is of a known WADL
        description, it may be followed.

        :return: A Link object, or None.
        alinkuThis parameter isn't a link to anything.afollowuFollow a link from this parameter to a new resource.

        This only works for parameters whose WADL definition includes a
        <link> tag that points to a known WADL description.

        :return: A Resource object for the resource at the other end
        of the link.
        aparameteruInitialize the option.

        :param parameter: A Parameter.
        :param link_tag: An ElementTree <option> tag.
        TavalueuInitialize the link.

        :param parameter: A Parameter.
        :param link_tag: An ElementTree <link> tag.
        acan_followaWADLErrorTuCannot follow a link when the target has no WADL description. Try using a general HTTP client instead.uFollow the link to another Resource.uCan this link be followed within wadllib?

        wadllib can follow a link if it points to a resource that has
        a WADL definition.
        aget_valueuTurn a resource type ID into a ResourceType.Taresource_typeTuParameter is a link, but not to a resource with a known WADL description.uFind the URL containing the definition .uInitialize with a <resource_type> tag.

        :param resource_type_tag: An ElementTree <resource_type> tag.
        areada_from_streamadoca_from_stringTaresourcesaresourcesTabasearesource_baseaResourceTypeuParse WADL and find the most important parts of the document.

        :param markup_url: The URL from which this document was obtained.
        :param markup: The WADL markup itself, or an open filehandle to it.
        aETaiterparseTastartustart-nsuend-nsustart-nsans_mapuend-nsapopastartarootaelemasetaElementTreeuTurns markup into a document.

        Just a wrapper around ElementTree which keeps track of namespaces.
        uTurns markup into a document.uRetrieve a resource type by the URL of its description.aensureNoSlashafragmentastartswithTahttparesolveamarkup_uriuCan't look up definition in another url (%s)uA helper method for locating a part of a WADL document.

        :param url: The URL (with anchor) of the desired part of the
        WADL document.
        :return: The XML ID corresponding to the anchor.
        apathuMore than one resource defined with path %samergeuLocate one of the resources described by this document.

        :param path: The path to the resource.
        uNavigate the resources exposed by a web service.

The wadllib library helps a web client navigate the resources
exposed by a web service. The service defines its resources in a
single WADL file. wadllib parses this file and gives access to the
resources defined inside. The client code can see the capabilities of
a given resource and make the corresponding HTTP requests.

If a request returns a representation of the resource, the client can
bind the string representation to the wadllib Resource object.
a__doc__u/usr/lib/python3/dist-packages/wadllib/application.pya__file__a__spec__aoriginahas_locationa__cached__a__metaclass__L
aApplicationaLinkaMethodaNoBoundRepresentationErroraParameteraRepresentationDefinitionaResponseDefinitionaResourceaResourceTypeaWADLErrora__all__uemail.utilsTaquoteasysuurllib.parseTaurlencodeaurllibuxml.etree.cElementTreeaetreeacElementTreeulazr.uriTaURIamergeawadllibTa_make_unicodea_string_typesuwadllib.iso_strptimeTaiso_strptimeuxmlns:mapuhttp://www.w3.org/2001/XMLSchemaTEExceptionametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uwadllib.applicationa__module__uAn exception having to do with the state of the WADL application.a__qualname__a__orig_bases__uAn unbound resource was used where wadllib expected a bound resource.

    To obtain the value of a resource's parameter, you first must bind
    the resource to a representation. Otherwise the resource has no
    idea what the value is and doesn't even know if you've given it a
    parameter name that makes sense.
    uA media type was given that's not supported in this context.

    A resource can only be bound to media types it has representations
    of.
    TOobjectaWADLBaseuA base class for objects that contain WADL-derived information.TTaHasParametersMixinTuA mixin class for objects that have associated Parameter objects.aHasParametersMixinTnuHasParametersMixin.paramsTtuHasParametersMixin.validate_param_valuesaWADLResolvableDefinitionuA base class for objects whose definitions may be references.uWADLResolvableDefinition.__init__uWADLResolvableDefinition.resolve_definitionuWADLResolvableDefinition._definition_factoryuWADLResolvableDefinition._get_definition_urluA resource, possibly bound to a representation.TnntnuResource.__init__apropertyuResource.urlatype_urluResource.type_urluResource.idTuapplication/jsontnuResource.binduResource.get_representation_definitionTnnnnuResource.get_methodaparametersuResource.parametersuResource.parameter_namesaget_parameteruResource.get_parameteruResource.get_parameter_valueuResource._dereference_namespaceuResource._definition_factoryuResource._get_definition_urluResource._find_representation_definitionuA wrapper around an XML <method> tag.
    uMethod.__init__uMethod.requestuMethod.responseuMethod.iduMethod.nameabuild_request_urluMethod.build_request_urlTnnabuild_representationuMethod.build_representationTnnnuMethod.is_described_byuA wrapper around the description of the request invoking a method.uRequestDefinition.__init__uRequestDefinition.query_paramsuRequestDefinition.get_representation_definitionuRequestDefinition.representationuRequestDefinition.build_urluA wrapper around the description of a response to a method.uResponseDefinition.__init__uResponseDefinition.binduResponseDefinition.get_parameteruResponseDefinition.get_parameter_valueuResponseDefinition.get_representation_definitionuA definition of the structure of a representation.uRepresentationDefinition.__init__uRepresentationDefinition.paramsuRepresentationDefinition.parameter_namesuRepresentationDefinition.media_typeuRepresentationDefinition._make_boundaryuRepresentationDefinition._write_headersTFuRepresentationDefinition._write_boundaryuRepresentationDefinition._generate_multipart_formuRepresentationDefinition.binduRepresentationDefinition._definition_factoryuRepresentationDefinition._get_definition_urluOne of the parameters of a representation definition.uParameter.__init__uParameter.nameuParameter.styleuParameter.typeuParameter.fixed_valueuParameter.is_requireduParameter.get_valueuParameter.optionsuParameter.linkalinked_resourceuParameter.linked_resourceuOne of a set of possible values for a parameter.uOption.__init__uOption.valueuA link from one resource to another.

    Calling resolve_definition() on a Link will give you a Resource for the
    type of resource linked to. An alias for this is 'follow'.
    uLink.__init__uLink.followuLink.can_followuLink._definition_factoryuLink._get_definition_urluA wrapper around an XML <resource_type> tag.uResourceType.__init__aApplicationuA WADL document made programmatically accessible.uApplication.__init__uApplication._from_streamuApplication._from_stringuApplication.get_resource_typeuApplication.lookup_xml_idaget_resource_by_pathuApplication.get_resource_by_pathu<listcomp>Taoption_tagaselfTaparam_tagastylesaresourceTaresourceapathu<module wadllib.application>Ta__class__TaselfaapplicationTaselfaapplicationaresourcearepresentation_taga__class__T	aselfaapplicationaurlaresource_typearepresentationamedia_typearepresentation_needs_processingarepresentation_definitiona__class__Taselfamarkup_urlamarkuparepresentationaidadefinitionaresource_typeTaselfamethodarequest_tagTaselfaparameteralink_taga__class__Taselfaparameteraoption_tagTaselfaresourceamethod_tagTaselfaresourcearesponse_tagaheadersTaselfaresource_type_tagTaselfavalue_containeratagTaselfapatharepresentation_tagTaselfaidTaselfatagavalueanamespaceans_mapanamespace_urlTaselfamedia_typeadefinitionTaselfastreamaeventsarootans_mapaeventaelemTaselfamarkupT
aselfapartsaencoded_partsais_binaryanameavalueabufactypeacdispalinesalineaboundaryaencoded_partTaselfTaselfatypeT	aselfaall_partsa_widtha_fmtatokenaboundarywbacounterapatternTadictsafinaladictTaselfadefinitionamethod_tagTaselfabufaboundaryaclosingTaselfabufaheadersakeyavalueTaselfaheadersTaselfaparam_valuesakw_param_valuesadefinitionaparamsavalidated_valuesamedia_typeadocapartsamissingaparamavalueTaselfarepresentationamedia_typearepresentation_needs_processingarepresentation_definitionTaselfamedia_typeaparam_valuesakw_param_valuesTaselfaparam_valuesakw_param_valuesTaselfaparam_valuesakw_param_valuesavalidated_valuesaurlaappendTaselfadefinition_urlTaselfahttp_methodamedia_typeaquery_paramsarepresentation_paramsamethod_taganameamethodTaselfaparam_nameamedia_typeadefinitionarepresentation_tagaparam_tagTaselfaparam_nameaparam_tagTaselfaparameterTaselfaparameteravalueanamespace_urladata_typeTaselfamedia_typeadefault_get_responsearepresentationarepresentation_tagTaselfamedia_typearepresentationTaselfapathamatchingTaselfaresource_type_urlaxml_idaresource_typeTaselfamedia_typeaquery_valuesarepresentation_valuesarepresentationarequestTaselfalink_tagTaselfalinkTaselfaurlamarkup_uriathis_uriapossible_xml_idTaselfamethod_tagTaselfamedia_typeTaselfaresourceTaselfaresourcea__class__Taselfastylesaresourceaparam_tagsTaselfamedia_typeaparam_valuesakw_param_valuesadefinitionTaselfadefinitionTaselfaobject_urlaxml_idadefinitionTaselfaurlatype_idabaseT	aselfaparamsaparam_valuesaenforce_completenessakw_param_valuesavalidated_valuesaparamanameaoptionsTatag_name.wadllibbadecodea__doc__u/usr/lib/python3/dist-packages/wadllib/__init__.pya__file__Lu/usr/lib/python3/dist-packages/wadlliba__path__la__spec__aoriginahas_locationasubmodule_search_locationsa__cached__asysapkg_resourcesawadllibuversion.txtaresource_stringastripa__version__a_string_typesa_make_unicodeu<module wadllib>Twbu.wadllib.iso_strptimeIalstripTu-+asplitTw:utoo many values to unpack (expected 2)adatetimeatimedeltaTahoursaminutesastdoffsetastartswithTw-l��������uTimeZone(%s)adaysll<asecondsTlaRE_TIMEamatchagroupTayearTamonthTadayTahourTaminutesTasecondsTamicrosecondsareplaceTamicrosecondTatz_offsetaTimeZoneTatzinfou
Parser for ISO 8601 time strings
================================

>>> d = iso_strptime("2008-01-07T05:30:30.345323+03:00")
>>> d
datetime.datetime(2008, 1, 7, 5, 30, 30, 345323, tzinfo=TimeZone(10800))
>>> d.timetuple()
(2008, 1, 7, 5, 30, 30, 0, 7, 0)
>>> d.utctimetuple()
(2008, 1, 7, 2, 30, 30, 0, 7, 0)
>>> iso_strptime("2008-01-07T05:30:30.345323-03:00")
datetime.datetime(2008, 1, 7, 5, 30, 30, 345323, tzinfo=TimeZone(-10800))
>>> iso_strptime("2008-01-07T05:30:30.345323")
datetime.datetime(2008, 1, 7, 5, 30, 30, 345323)
>>> iso_strptime("2008-01-07T05:30:30")
datetime.datetime(2008, 1, 7, 5, 30, 30)
>>> iso_strptime("2008-01-07T05:30:30+02:00")
datetime.datetime(2008, 1, 7, 5, 30, 30, tzinfo=TimeZone(7200))
a__doc__u/usr/lib/python3/dist-packages/wadllib/iso_strptime.pya__file__a__spec__aoriginahas_locationa__cached__arelacompileu^
   # pattern matching date
   (?P<year>\d{4})\-(?P<month>\d{2})\-(?P<day>\d{2})
   # separator
   T
   # pattern matching time
   (?P<hour>\d{2})\:(?P<minutes>\d{2})\:(?P<seconds>\d{2})
   # pattern matching optional microseconds
   (\.(?P<microseconds>\d{6}))?
   # pattern matching optional timezone offset
   (?P<tz_offset>[\-\+]\d{2}\:\d{2})?
   $aVERBOSEatzinfoametaclassa__prepare__a__getitem__u%s.__prepare__() must return a mapping, not %sa__name__u<metaclass>uwadllib.iso_strptimea__module__a__qualname__a__init__uTimeZone.__init__a__repr__uTimeZone.__repr__autcoffsetuTimeZone.utcoffsetadstuTimeZone.dsta__orig_bases__aiso_strptimeu<module wadllib.iso_strptime>Ta__class__Taselfatz_stringahoursaminutesTaselfTaselfadtTatime_strwxwdu.

Youez - 2016 - github.com/yon3zu
LinuXploit