Your IP : 18.188.211.246


Current Path : /opt/alt/python312/lib64/python3.12/__pycache__/
Upload File :
Current File : //opt/alt/python312/lib64/python3.12/__pycache__/cgi.cpython-312.opt-2.pyc

�

�Q�f�����	dZddlmZmZmZddlmZddlZddlZddl	Z
ddlmZddl
mZddlZddlZddlZddlZgd�Zej(ed�	�d
adad�Zd�Zd
�Zd�Zeadadej<dddfd�Zd!d�Z d�Z!d�Z"Gd�d�Z#Gd�d�Z$ej<fd�Z%d"d�Z&ej<fd�Z'd�Z(d�Z)d�Z*d�Z+d�Z,ed k(re%�yy)#z2.6�)�StringIO�BytesIO�
TextIOWrapper)�MappingN)�
FeedParser)�Message)�MiniFieldStorage�FieldStorage�parse�parse_multipart�parse_header�test�print_exception�
print_environ�
print_form�print_directory�print_arguments�print_environ_usage)��
)�remove�c���	tjdtd��trts	ttdd��atstantat|�y#t$rY�'wxYw)Nz7cgi.log() is deprecated as of 3.10. Use logging instead�)�
stacklevel�a�locale)�encoding)
�warnings�warn�DeprecationWarning�logfile�logfp�open�OSError�nolog�log�dolog��allargss �*/opt/alt/python312/lib64/python3.12/cgi.py�initlogr,As_���.
�M�M�K�$��4��u�	���#��9�E��������M��
�	��	�s�A�	A%�$A%c�<�	tj||zdz�y)N�
)r#�write)�fmt�argss  r+r(r(fs��G�	�K�K��D��4�� �c��	y�N�r)s r+r&r&js��C�r2c�N�	datrtj�datay)Nr)r"r#�closer,r'r5r2r+�closelogr8ns ����G��
���
���
�Cr2�&c���	|�tj}t|d�r
|j}nd}t	|t
�r|j}d|vrd|d<|ddk(r�t|d�\}}|dk(rt|||��S|d	k(rIt|d
�}tr|tkDrtd��|j|�j|�}	nd}	d
|vr|	r|	dz}	|	|d
z}	n0tjddr|	r|	dz}	|	tjdz}	|	|d
<n8d
|vr|d
}	n.tjddrtjd}	nd}	|	|d
<tj j#|	||||��S)Nrzlatin-1�REQUEST_METHOD�GET�POST�CONTENT_TYPEzmultipart/form-data)�	separator�!application/x-www-form-urlencoded�CONTENT_LENGTH�Maximum content length exceededr�QUERY_STRINGr9�)rr?)�sys�stdin�hasattrr�
isinstancer�bufferr
r�int�maxlen�
ValueError�read�decode�argv�urllibr�parse_qs)
�fp�environ�keep_blank_values�strict_parsingr?r�ctype�pdict�clength�qss
          r+rr�s����,
�z�
�Y�Y���r�*���;�;�����"�m�$�
�Y�Y���w�&�$)�� �!��� �F�*�#�G�N�$;�<���u��)�)�"�2�u�	�B�B�
�9�
9��'�"2�3�4�G��'�F�*� �!B�C�C�����!�(�(��2�B��B��W�$���S��2��g�n�-�-�B�
�X�X�a�b�\���S��2��c�h�h�q�k�!�B�"$����	�7�	"�
�^�
$���8�8�A�B�<����!��B��B�"$�����<�<� � ��%6��*2�i�!�I�Ir2c�$�	|djd�}dj|�}t�}|j|�	|d|d<t||||ddi|��}|D�	cic]}	|	|j
|	���c}	S#t$rY�>wxYwcc}	w)	N�boundary�asciiz multipart/form-data; boundary={}zCONTENT-LENGTHzContent-Lengthr;r=)�headersr�errorsrSr?)rN�formatr�set_type�KeyErrorr
�getlist)
rRrWrr^r?r[rVr]�fs�ks
          r+rr�s�����Z� �'�'��0�H�.�5�5�h�?�E��i�G����U��
�$)�*:�$;�� �!�
�b�'�H�V�!�6�*�i�
A�B�&(�)�b��A�r�z�z�!�}��b�)�)��	�
��
��*s�A>�"B
�>	B
�	B
c#�K�|dddk(r�|dd}|jd�}|dkDro|jdd|�|jdd|�z
dzrE|jd|dz�}|dkDr+|jdd|�|jdd|�z
dzr�E|dkrt|�}|d|}|j���||d}|dddk(r��yy�w)NrD�;r�"�\"r)�find�count�len�strip)�s�end�fs   r+�_parseparamrp�s�����
�B�Q�%�3�,�
�a�b�E���f�f�S�k���A�g�1�7�7�3��3�/�!�'�'�%��C�2H�H�A�M��&�&��c�A�g�&�C��A�g�1�7�7�3��3�/�!�'�'�%��C�2H�H�A�M���7��a�&�C�
�d�s�G���g�g�i��
�c�d�G���B�Q�%�3�,�s�BC�4C�
Cc��	td|z�}|j�}i}|D]�}|jd�}|dk\s�|d|j�j	�}||dzdj�}t|�dk\r;|d|dcxk(rdk(r*nn'|dd}|j
dd	�j
d
d�}|||<��||fS)Nrf�=rrDr���rgz\\�\rh)rp�__next__rirl�lowerrk�replace)�line�parts�keyrW�p�i�name�values        r+r
r
�s����

��d�
�#�E�
�.�.�
�C��E�
��
�F�F�3�K����6��R�a�5�;�;�=�&�&�(�D��a��c�d�G�M�M�O�E��5�z�Q��5��8�u�R�y�#?�C�#?��a�����
�
�f�d�3�;�;�E�3�G���E�$�K����:�r2c�:�eZdZ	dZdZdZdZiZdZiZ	iZ
d�Zd�Zy)r	Nc�"�	||_||_yr4�r}r~��selfr}r~s   r+�__init__zMiniFieldStorage.__init__s��4���	���
r2c�<�d|j�d|j�d�S)NzMiniFieldStorage(�, �)r��r�s r+�__repr__zMiniFieldStorage.__repr__s��.�-1�Y�Y��
�
�C�Cr2)
�__name__�
__module__�__qualname__�filename�list�type�file�type_options�disposition�disposition_optionsr]r�r�r5r2r+r	r	s;��G��H��D��D��D��L��K����G��Dr2r	c���eZdZ	dddejdddddddfd�Zd�Zd	�Zd
�Zd�Z	d�Z
d
�Zd�Zd!d�Z
d!d�Zd�Zd�Zd�Zd�Zd�Zd�ZdZd�Zd�ZdZd�Zd�Zd�Zd�Zd�Zd�Zd �Zy)"r
Nr2r�utf-8rwr9c�8�	d}||_||_|
|_||_d|vr|dj	�}d|_|dk(s|dk(rhd|vr|d}
n)tjddrtjd}
nd}
|
jtj�d�}
t|
�}|�dd	i}|�3i}|d
k(rd	|d<d|vr|d|d<d|vr
|d|_d|vr*|d|d
<n!t|ttf�std��||_|� tj"j$|_nLt|t(�r|j$|_n*t+|d�rt+|d�std��||_||_|	|_t|t0�s!tdt3|�j4z��||_d|_||_di}}d|j vrt=|j d�\}}||_||_ d|_!d|vr
|d|_!d|_"d|vr
|d|_"|jDdu|_#d|j vrt=|j d�\}}n|j6s|d
k7rdi}}nd	i}}||_||_$d|vr/|dj|j,|j.�|_%nd|_%d}d
|j vr3	tM|j d
�}tPr|tPkDrtOd��||_)|j:�|dk\r||_dx|_*|_+d|_,|d	k(r|j[�y|dddk(r|j]|||�y|j_�y#tN$rY��wxYw)Nr<r;�HEADrCrDr�surrogateescapezcontent-typer@r=r>rA�content-lengthz?headers must be mapping or an instance of email.message.MessagerM�readlinezfp must be file pointerz#outerboundary must be bytes, not %srzcontent-dispositionr}r�z
text/plainr[r2rsrB�
z
multipart/)0rTrU�max_num_fieldsr?�upper�
qs_on_postrErO�encoder�getpreferredencodingrrHrr�	TypeErrorr]rFrIrRrrGrr^�bytesr�r��
outerboundary�
bytes_read�limitr
r�r�r}r��_binary_filer��
innerboundaryrJrLrK�lengthr�r��done�read_urlencoded�
read_multi�read_single)r�rRr]r�rSrTrUr�rr^r�r?�methodrY�cdisprWrV�clens                  r+r�zFieldStorage.__init__Js���*	�V��!2���,���,���"����w�&��-�.�4�4�6�F�����U�?�f��.���(��^�,�����!�"���X�X�a�[�������6�6�6�8�:K�L�B����B���)�>�@���?��G����*M���'���(�*1�.�*A���'���(�")�.�"9����7�*�,3�4D�,E��(�)��w��'�(:�;��!8�9�9����
�:��i�i�&�&�D�G�
��M�
*��i�i�D�G��B��'�G�B�
�,C�� 9�:�:��D�G� ��
�����-��/��A�"�=�1�:�:�;�<�
<�*��������
��2�u�� �D�L�L�0�'����5J�(K�L�L�E�5� ���#(�� ���	��U�?��f�
�D�I���
����!�*�-�D�M� �M�M��5����T�\�\�)�'����^�(D�E�L�E�5�
�
�
�6�V�#3�'��5�E�>��5�E���	�!������!&�z�!2�!9�!9�$�-�-�:>�+�+�"G�D��"%�D�����t�|�|�+�
��4�<�<�(8�9�:���$��-� �!B�C�C�����:�:��$�!�)��D�J� $�$��	�D�I���	��7�7�� � �"�
�3�B�Z�<�
'��O�O�G�%6��G�������
��
�s�$N
�
	N�Nc�X�	|jj�y#t$rYywxYwr4)r�r7�AttributeErrorr�s r+�__del__zFieldStorage.__del__�s'��	��I�I�O�O����	��	�s��	)�)c��|Sr4r5r�s r+�	__enter__zFieldStorage.__enter__�s���r2c�8�|jj�yr4)r�r7)r�r1s  r+�__exit__zFieldStorage.__exit__�s���	�	���r2c�V�d|j�d|j�d|j�d�S)Nz
FieldStorage(r�r�)r}r�r~r�s r+r�zFieldStorage.__repr__�s"��0��	�	�4�=�=�$�*�*�6�	6r2c�4�t|j��Sr4)�iter�keysr�s r+�__iter__zFieldStorage.__iter__s���D�I�I�K� � r2c��|dk7rt|��|jrR|jjd�|jj�}|jjd�|S|j�|j}|Sd}|S)Nr~r)r�r��seekrMr�r�s   r+�__getattr__zFieldStorage.__getattr__sz���7�?� ��&�&��9�9��I�I�N�N�1���I�I�N�N�$�E��I�I�N�N�1��
��	�Y�Y�
"��I�I�E����E��r2c���	|j�td��g}|jD]#}|j|k(s�|j|��%|st	|��t|�dk(r|dS|S)N�
not indexablerDr)r�r�r}�appendrark)r�rz�found�items    r+�__getitem__zFieldStorage.__getitem__sj��(��9�9���O�,�,����I�I�D��y�y�C�����d�!3����3�-���u�:��?���8�O��Lr2c��	||vr;||}t|t�r|D�cgc]}|j��c}S|jS|Scc}wr4�rHr�r~)r�rz�defaultr~�xs     r+�getvaluezFieldStorage.getvaluesL��F��$�;���I�E��%��&�).�/��A�����/�/��{�{�"��N��	0s�Ac�p�	||vr0||}t|t�r|djS|jS|S�Nrr�)r�rzr�r~s    r+�getfirstzFieldStorage.getfirst)s<��/��$�;���I�E��%��&��Q�x�~�~�%��{�{�"��Nr2c��	||vr<||}t|t�r|D�cgc]}|j��c}S|jgSgScc}wr4r�)r�rzr~r�s    r+rbzFieldStorage.getlist4sN��.��$�;���I�E��%��&�).�/��A�����/�/����}�$��I��	0s�Ac�|�	|j�td��ttd�|jD���S)Nr�c3�4K�|]}|j���y�wr4�r})�.0r�s  r+�	<genexpr>z$FieldStorage.keys.<locals>.<genexpr>Cs����8�i�d��	�	�i�s�)r�r��setr�s r+r�zFieldStorage.keys?s4��-��9�9���O�,�,��C�8�d�i�i�8�8�9�9r2c�p��	|j�td��t�fd�|jD��S)Nr�c3�<�K�|]}|j�k(���y�wr4r�)r�r�rzs  �r+r�z,FieldStorage.__contains__.<locals>.<genexpr>Is�����:�	��4�9�9��#�	�s�)r�r��any)r�rzs `r+�__contains__zFieldStorage.__contains__Es0���3��9�9���O�,�,��:��	�	�:�:�:r2c�6�	t|j��Sr4)rkr�r�s r+�__len__zFieldStorage.__len__Ks��.��4�9�9�;��r2c�Z�|j�td��t|j�S)NzCannot be converted to bool.)r�r��boolr�s r+�__bool__zFieldStorage.__bool__Os&���9�9���:�;�;��D�I�I��r2c	��	|jj|j�}t|t�s-t|j�dt
|�j����|j|j|j�}|jr|d|jzz
}tjj||j|j |j|j|j"|j$��}|D��cgc]\}}t'||���c}}|_|j+�ycc}}w)N� should return bytes, got r9�rr^r�r?)rRrMr�rHr�rLr�r�rNrr^r�rPr�	parse_qslrTrUr�r?r	r��
skip_lines)r�rY�queryrzr~s     r+r�zFieldStorage.read_urlencodedTs���9�
�W�W�\�\�$�+�+�
&���"�e�$�� $����b��):�):�<�=�
=�
�Y�Y�t�}�}�d�k�k�
2���?�?��#����'�'�B����&�&���&�&��(;�(;��]�]�4�;�;��.�.�$�.�.�'�J��EJ�J�E�j�c�5�%�c�5�1�E�J��	������Ks�D?c
�~�	|j}t|�std|����g|_|jr�t
jj|j|j|j|j|j|j|j��}|jjd�|D��|jxs|j }|j"j%�}t'|t(�s-t|j"�dt+|�j,����|xj.t1|�z
c_|j3�d|jzk7r]|r[|j"j%�}|xj.t1|�z
c_|j3�d|jzk7r|r�[|j}|�|t1|j�z}	t5�}	d}
	|j"j%�}|
|z
}
|j3�sn�1|
s�nq|xj.t1|
�z
c_|	j7|
j9|j|j��|	j;�}d|vr|d=|j<�dn|j<|j.z
}
||j"||||||
|j|j||j�}|�9|dz}|jr|t1|j�z}|d	krtd
��|xj.|j.z
c_|jj?|�|j@s"|j.|jBcxk\rd	kDrnnn���|jE�y)Nz$Invalid boundary in multipart form: r�c3�:K�|]\}}t||����y�wr4)r	)r�rzr~s   r+r�z*FieldStorage.read_multi.<locals>.<genexpr>qs����R�E�j�c�5�-�c�5�9�E�s�r��--r2r�rDrzMax number of fields exceeded)#r��valid_boundaryrLr�r�rPrr�rTrUrr^r�r?�extend�FieldStorageClass�	__class__rRr�rHr�r�r�r�rkrlr�feedrNr7r�r�r�r�r�)r�rSrTrU�ibr��klass�
first_liner��parser�hdr_text�datar]r��parts               r+r�zFieldStorage.read_multifs��=�
�
�
���b�!���M�N�N���	��?�?��L�L�*�*�����!7�!7��9L�9L����t�{�{�#�2�2�d�n�n�+�N�E�
�I�I���R�E�R�R��&�&�8�$�.�.���W�W�%�%�'�
��*�e�,�� $����j�)9�)B�)B�D�E�
E����3�z�?�*�����!�e�d�.@�.@�&@�A�����)�)�+�J��O�O�s�:��.�O����!�e�d�.@�.@�&@�A��
�,�,���%��c�$�)�)�n�,�N���\�F��H���w�w�'�'�)���D� ���z�z�|��	�
���O�O�s�8�}�,�O��K�K�����
�
�t�{�{�C�D��l�l�n�G� �7�*��,�-� �J�J�.�D��Z�Z�$�/�/�1�
�����'�2�w�8I�'��������^�T�^�^�U�D��)��!�#���9�9�"�c�$�)�)�n�4�N�!�A�%�$�%D�E�E��O�O�t���.�O��I�I���T�"��y�y�D�O�O�t�{�{�>�Q�>��G�H	
���r2c��	|jdk\r!|j�|j�n|j�|jjd�yr�)r��read_binaryr��
read_linesr�r�r�s r+r�zFieldStorage.read_single�sA��,��;�;�!�������O�O���O�O���	�	���q�r2i c���	|j�|_|j}|dk\r�|dkDr�|jj	t||j��}t|t�s-t|j�dt|�j����|xjt|�z
c_|sd|_y|jj|�|t|�z
}|dkDr��yyy)Nrr�rs)�	make_filer�r�rRrM�min�bufsizerHr�rLr�r�r�rkr�r/)r��todor�s   r+r�zFieldStorage.read_binary�s���)��N�N�$��	��{�{���1�9���(��w�w�|�|�C��d�l�l�$;�<��!�$��.�$�(,����d��1D�1D�&F�G�G����3�t�9�,��� "�D�I���	�	����%��c�$�i�'����(�r2c���	|jrt�x|_|_nt	�x|_|_|j
r|j
�y|j�yr4)r�rr��_FieldStorage__filerr��read_lines_to_outerboundary�read_lines_to_eofr�s r+r�zFieldStorage.read_lines�sO��>����&-�i�/�D�I���&.�j�0�D�I�������,�,�.��"�"�$r2c���	|j�z|jj�t|�zdkDrQ|j�|_|jj�}|jj
|�d|_|jr|jj
|�y|jj
|j|j|j��y)Ni�)r��tellrkr�r�r�r/r�rNrr^)r�rxr�s   r+�__writezFieldStorage.__write�s���.��;�;�"��{�{���!�C��I�-��4� �N�N�,��	��{�{�+�+�-���	�	����%�"�������I�I�O�O�D�!�
�I�I�O�O�D�K�K��
�
�t�{�{�C�Dr2c��		|jjd�}|xjt|�z
c_|sd|_y|j|��U)N�rs)rRr�r�rkr��_FieldStorage__write)r�rxs  r+r�zFieldStorage.read_lines_to_eof�sL��-���7�7�#�#�E�*�D��O�O�s�4�y�(�O����	���L�L���
r2c��	d|jz}|dz}d}d}d}	|j�d|jcxkr|kry|jjd�}|xjt|�z
c_|t|�z
}|sd|_y|dk(r||z}d}|jd�r%|r#|j�}||k(ry||k(rd|_y|}|jd	�r
d	}|dd
}d}n:|jd�r
d}|dd}d}n|jd�r
d}|dd}d}nd}d}|j||z���#)
Nr�r2TrrDrrs�
s
����
F)r�r�rRr�r�rkr��
startswith�rstrip�endswithr)	r��
next_boundary�
last_boundary�delim�last_line_lfend�_readrx�strippedline�odelims	         r+r�z(FieldStorage.read_lines_to_outerboundary�sn��	��� 2� 2�2�
�%��-�
���������z�z�%�!�t�z�z�*B�U�*B��+C��7�7�#�#�E�*�D��O�O�s�4�y�(�O��S��Y��E����	����~��t�|�������u�%�/�#�{�{�}���=�0���=�0� !�D�I���F��}�}�W�%����C�R�y��"&�����u�%����C�R�y��"&�����u�%����C�R�y��"'����"'���L�L��$��'�Mr2c�z�	|jr|jryd|jz}|dz}d}	|jjd�}|xjt|�z
c_|sd|_y|j
d�r%|r#|j�}||k(ry||k(rd|_y|j
d�}��)Nr�TrrsrDr)r�r�rRr�r�rkr
rl)r�rrrrxrs      r+r�zFieldStorage.skip_liness���C��!�!�T�Y�Y���� 2� 2�2�
�%��-�
�����7�7�#�#�E�*�D��O�O�s�4�y�(�O����	���}�}�U�#��#�z�z�|���=�0���=�0� !�D�I��"�m�m�E�2�O�r2c��	|jrtjd�Stjd|jd��S)Nzwb+zw+r.)r�newline)r��tempfile�
TemporaryFilerr�s r+r�zFieldStorage.make_file3sA��	�.����)�)�%�0�0��)�)�$����$�8�
8r2r4) r�r�r��osrSr�r�r�r�r�r�r�r�r�r�rbr�r�r�r�r�r�r�r�r�r�r�rr�r�r�r�r5r2r+r
r
s���(�R��C����q���g�i� $��c�J���6�
!���	�	�	�:�;� ��
� ��C�J��G�(�"	%�
E��0(�d3�,8r2r
c���	td�t�tjt_	t	�}t�t
�t|�t|�t�d�}|fd�}td�|�td�da	t	�}t�t
�t|�t|�y#t�Y�QxYw#t�YyxYw)NzContent-type: text/htmlc��td�y)Nz,testing print_exception() -- <I>italics?</I>)�execr5r2r+roztest.<locals>.ffs���?�@r2c��|�yr4r5)ros r+�gztest.<locals>.ghs��
�Cr2z9<H3>What follows is a test, not an actual exception:</H3>z*<H1>Second try with a small maxlen...</H1>�2)�printrE�stdout�stderrr
rrrrrrrK)rS�formrors    r+rrUs����
�
#�$�	�G����C�J���~�������4���g����	A��	�
�I�J�	��
�
6�7��F���~�������4���g����������s�AC�4C�C�C+c
�P�|�tj�\}}}ddl}t�td�|j	||�|j||�z}tdt
jdj|dd���dt
j|d��d��~y)Nrz+<H3>Traceback (most recent call last):</H3>z<PRE>rrsz<B>z
</B></PRE>)	rE�exc_info�	tracebackr�	format_tb�format_exception_only�html�escape�join)r�r~�tbr�r$r�s      r+rr|s����|��,�,�.���e�R��	�G�	�
7�8����r�5�)��*�*�4��7�8�D�	����B�G�G�D��"�I�&�'����D��H��
��	r2c
��	t|j��}t�td�td�|D]9}tdtj|�dtj||���;td�t�y)Nz<H3>Shell Environment:</H3>�<DL>�<DT>�<DD>�</DL>)�sortedr�rr'r()rSr�rzs   r+rr�sd��-��'�,�,�.�!�D�	�G�	�
'�(�	�&�M���
�f�d�k�k�#�&�����G�C�L�0I�J��	�'�N�	�Gr2c���	t|j��}t�td�|std�td�|D]�}tdtj|�zdzd��||}tdtjtt
|���zd	z�td
tjt|��z���td�t�y)Nz<H3>Form Contents:</H3>z<P>No form fields.r,r-�:� )rnz<i>z</i>r.r/)r0r�rr'r(�reprr�)r!r�rzr~s    r+rr�s���.��$�)�)�+��D�	�G�	�
#�$��
�"�#�	�&�M���
�f�t�{�{�3�'�'�#�-�3�7��S�	��
�e�d�k�k�$�t�E�{�"3�4�4�v�=�>�
�f�t�{�{�4��;�/�/�0�	�

�'�N�	�Gr2c	�:�	t�td�	tj�}ttj|��t�y#t
$r<}tdtjt
|���Yd}~t�yd}~wwxYw)Nz#<H3>Current Working Directory:</H3>zOSError:)rr�getcwdr'r(r%�str)�pwd�msgs  r+rr�sn��-�	�G�	�
/�0� ��i�i�k��	�d�k�k�#���	�G��	�1�
�j�$�+�+�c�#�h�/�0�0�
�G��	1�s�A�	B�(B�Bc��t�td�t�ttj�t�y)Nz <H3>Command Line Arguments:</H3>)rrErOr5r2r+rr�s%��	�G�	�
,�-�	�G�	�#�(�(�O�	�Gr2c��	td�y)Na�
<H3>These environment variables could have been set:</H3>
<UL>
<LI>AUTH_TYPE
<LI>CONTENT_LENGTH
<LI>CONTENT_TYPE
<LI>DATE_GMT
<LI>DATE_LOCAL
<LI>DOCUMENT_NAME
<LI>DOCUMENT_ROOT
<LI>DOCUMENT_URI
<LI>GATEWAY_INTERFACE
<LI>LAST_MODIFIED
<LI>PATH
<LI>PATH_INFO
<LI>PATH_TRANSLATED
<LI>QUERY_STRING
<LI>REMOTE_ADDR
<LI>REMOTE_HOST
<LI>REMOTE_IDENT
<LI>REMOTE_USER
<LI>REQUEST_METHOD
<LI>SCRIPT_NAME
<LI>SERVER_NAME
<LI>SERVER_PORT
<LI>SERVER_PROTOCOL
<LI>SERVER_ROOT
<LI>SERVER_SOFTWARE
</UL>
In addition, HTTP headers sent by the server may be passed in the
environment as well.  Here are some common variable names:
<UL>
<LI>HTTP_ACCEPT
<LI>HTTP_CONNECTION
<LI>HTTP_HOST
<LI>HTTP_PRAGMA
<LI>HTTP_REFERER
<LI>HTTP_USER_AGENT
</UL>
)rr5r2r+rr�s��C�	�'�'r2c�X�ddl}t|t�rd}nd}|j||�S)Nrs^[ -~]{0,200}[!-~]$z^[ -~]{0,200}[!-~]$)�rerHr��match)rmr=�_vb_patterns   r+r�r��s*��
��!�U��,��+��
�8�8�K��#�#r2�__main__)r�rwr9)NNNN)-�__version__�iorrr�collections.abcrrEr�urllib.parserP�email.parserr�
email.messagerr'rrr�__all__�_deprecatedr�r"r#r,r(r&r8r'rKrSrrrpr
r	r
rrrrrrrr�r5r2r+�<module>rIs��	�*��0�/�#�
�	��#�!��
���"������X�f�-�

����#�J!�	����
��
�2�:�:���c�CI�L*�6
��0D�D�2p8�p8�l���%�N��*�*�	�� 
��)�^$��z���F�r2

?>