ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     3
i*                 @   sn  d dl Zd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 ddddddd	d
ddddddddddgZdZdZdZdZdZdZe jejj dd ejjj D ZdZdZdZejd jZejd!jZejd"Z ejd#Z!d$d%d&hZ"dBd(d)Z#G d*d+ d+ej$j%Z&d,d- Z'e&fd.d/Z(G d0d dej)Z*G d1d dZ+yd dl,Z,W n e-k
rh   Y nX G d2d3 d3e+Z.ej/d3 G d4d de0Z1G d5d de1Z2G d6d de1Z3G d7d de1Z4G d8d de1Z5G d9d	 d	e1Z6G d:d
 d
e1Z7G d;d de1Z8G d<d de8Z9G d=d de8Z:G d>d de8Z;G d?d de1Z<G d@d de1Z=G dAd de>e<Z?e1Z@dS )C    N)urlsplitHTTPResponseHTTPConnectionHTTPExceptionNotConnectedUnknownProtocolUnknownTransferEncodingUnimplementedFileModeIncompleteRead
InvalidURLImproperConnectionStateCannotSendRequestCannotSendHeaderResponseNotReadyBadStatusLineLineTooLongRemoteDisconnectederror	responsesP   i  ZUNKNOWNZIdlezRequest-startedzRequest-sentc             C   s   i | ]}|j |qS  )phrase).0vr   r   #/usr/lib64/python3.6/http/client.py
<dictcomp>k   s    r   i   i   d   s   [^:\s][^:\r\n]*s   \n(?![ \t])|\r(?![ \t\n])z[ - ]z[ -]ZPATCHZPOSTZPUTdatac             C   sf   y
| j dS  tk
r` } z:t|j|j|j|jd|j | |j|j |f d W Y d d }~X nX d S )Nzlatin-1z`%s (%.20r) is not valid Latin-1. Use %s.encode('utf-8') if you want to send it encoded in UTF-8.)encodeUnicodeEncodeErrorencodingobjectstartendtitle)r   nameerrr   r   r   _encode   s    
r'   c               @   s   e Zd Zdd ZdS )HTTPMessagec             C   sn   |j  d }t|}g }d}xL| j D ]@}|d | j  |krDd}n|d d j sXd}|r&|j| q&W |S )N:r      )lowerlenkeysisspaceappend)selfr%   nZlstZhitliner   r   r   getallmatchingheaders   s    
z!HTTPMessage.getallmatchingheadersN)__name__
__module____qualname__r3   r   r   r   r   r(      s   r(   c             C   s\   g }xR| j td }t|tkr(td|j| t|tkrJtdt |dkrP qW |S )Nr*   zheader linezgot more than %d headers   
   
    )r7   r8   r9   )readline_MAXLINEr,   r   r/   _MAXHEADERSr   )fpheadersr2   r   r   r   _read_headers   s    
r?   c             C   s,   t | }dj|jd}tjj|dj|S )Nr9   z
iso-8859-1)_class)r?   joindecodeemailparserZParserZparsestr)r=   r@   r>   Zhstringr   r   r   parse_headers   s    
rE   c                   s  e Zd Zd@ddZdd Zdd Zd	d
 Zdd Z fddZ fddZ	dd Z
dd ZdAd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dCd(d)ZdEd*d+ZdG fd,d-	Zd.d/ Zd0d1 Zd2d3 ZdHd4d5Zd6d7 Zd8d9 Zd:d; Zd<d= Zd>d? Z   Z!S )Ir   r   Nc             C   sR   |j d| _|| _|| _d  | _| _t| _t| _t| _	t| _
t| _t| _t| _d S )Nrb)makefiler=   
debuglevel_methodr>   msg_UNKNOWNversionstatusreasonchunked
chunk_leftlength
will_close)r0   sockrH   methodurlr   r   r   __init__   s    zHTTPResponse.__init__c             C   s  t | jjtd d}t|tkr*td| jdkrBtdt| |sNt	dy|j
d d\}}}W nF tk
r   y|j
d d\}}d}W n tk
r   d}Y nX Y nX |jd	s| j  t|y$t|}|d
k s|dkrt|W n tk
r   t|Y nX |||fS )Nr*   z
iso-8859-1zstatus liner   zreply:z-Remote end closed connection without response    zHTTP/r   i  )strr=   r:   r;   r,   r   rH   printreprr   split
ValueError
startswith_close_connr   int)r0   r2   rL   rM   rN   r   r   r   _read_status  s2    

zHTTPResponse._read_statusc             C   s  | j d k	rd S x<| j \}}}|tkr(P t| j}| jdkrFtd| ~qW | | _| _|j	 | _
|dkrrd| _n|jdrd| _nt|t| j | _ | _| jdkrx&| j D ]}td|d	 | j j| qW | j jd
}|r|j dkrd| _d | _nd| _| j | _d | _| j jd}| j jd
}|rx| j rxyt|| _W n tk
rb   d | _Y nX | jdk r~d | _nd | _|tks|tksd|  kodk n  s| jdkrd| _| j r| j r| jd krd| _d S )Nr   zheaders:HTTP/1.0HTTP/0.9
   zHTTP/1.   zheader:r)   ztransfer-encodingrO   TFzcontent-lengthr      HEAD)rb   rc   )r>   ra   ZCONTINUEr?   r=   rH   rZ   coderM   striprN   rL   r^   r   rE   rJ   getr+   rO   rP   _check_closerR   rQ   r`   r]   Z
NO_CONTENTZNOT_MODIFIEDrI   )r0   rL   rM   rN   Zskipped_headershdrZtr_encrQ   r   r   r   begin9  s\    









zHTTPResponse.beginc             C   s   | j jd}| jdkr:| j jd}|r6d|j kr6dS dS | j jdrJdS |r^d|j kr^dS | j jd}|r~d|j kr~dS dS )NZ
connectionre   closeTFz
keep-alivezproxy-connection)r>   rj   rL   r+   )r0   ZconnZpconnr   r   r   rk     s    
zHTTPResponse._check_closec             C   s   | j }d | _ |j  d S )N)r=   rn   )r0   r=   r   r   r   r_     s    zHTTPResponse._close_connc          
      s$   zt  j  W d | jr| j  X d S )N)superrn   r=   r_   )r0   )	__class__r   r   rn     s    zHTTPResponse.closec                s   t  j  | jr| jj  d S )N)ro   flushr=   )r0   )rp   r   r   rq     s    
zHTTPResponse.flushc             C   s   dS )NTr   )r0   r   r   r   readable  s    zHTTPResponse.readablec             C   s
   | j d kS )N)r=   )r0   r   r   r   isclosed  s    zHTTPResponse.isclosedc             C   s   | j d krdS | jdkr$| j  dS |d k	rRt|}| j|}t|d | j S | jr`| j S | j	d krv| j j
 }n6y| j| j	}W n tk
r   | j   Y nX d| _	| j  |S d S )Nr9   rg   r   )r=   rI   r_   	bytearrayreadinto
memoryviewtobytesrO   _readall_chunkedrQ   read
_safe_readr
   )r0   amtbr1   sr   r   r   ry     s*    



zHTTPResponse.readc             C   s   | j d krdS | jdkr$| j  dS | jr4| j|S | jd k	r^t|| jkr^t|d| j }| j j|}| r~|r~| j  n&| jd k	r|  j|8  _| js| j  |S )Nr   rg   )	r=   rI   r_   rO   _readinto_chunkedrQ   r,   rv   ru   )r0   r|   r1   r   r   r   ru     s$    






zHTTPResponse.readintoc             C   sp   | j jtd }t|tkr$td|jd}|dkrB|d | }y
t|dS  tk
rj   | j   Y nX d S )Nr*   z
chunk size   ;r      )	r=   r:   r;   r,   r   findr`   r]   r_   )r0   r2   ir   r   r   _read_next_chunk_size
  s    

z"HTTPResponse._read_next_chunk_sizec             C   s>   x8| j jtd }t|tkr&td|s,P |dkrP qW d S )Nr*   ztrailer line   
r8   r9   )r   r8   r9   )r=   r:   r;   r,   r   )r0   r2   r   r   r   _read_and_discard_trailer  s    z&HTTPResponse._read_and_discard_trailerc             C   sl   | j }|sh|d k	r| jd y| j }W n tk
rD   tdY nX |dkrb| j  | j  d }|| _ |S )NrW   r9   r   )rP   rz   r   r]   r
   r   r_   )r0   rP   r   r   r   _get_chunk_left(  s    
zHTTPResponse._get_chunk_leftc             C   sd   g }y8x,| j  }|d krP |j| j| d| _qW dj|S  tk
r^   tdj|Y nX d S )Nr   r9   )r   r/   rz   rP   rA   r
   )r0   valuerP   r   r   r   rx   @  s    

zHTTPResponse._readall_chunkedc             C   s   d}t |}yvxp| j }|d kr$|S t||krL| j|}|| | _|| S |d | }| j|}||d  }||7 }d| _qW W n( tk
r   tt|d| Y nX d S )Nr   )rv   r   r,   _safe_readintorP   r
   bytes)r0   r|   total_bytesmvbrP   r1   temp_mvbr   r   r   r~   N  s$    


zHTTPResponse._readinto_chunkedc             C   sX   g }xH|dkrL| j jt|t}|s4tdj|||j| |t|8 }qW dj|S )Nr   r9   )r=   ry   min	MAXAMOUNTr
   rA   r/   r,   )r0   r{   r}   chunkr   r   r   rz   f  s    

zHTTPResponse._safe_readc             C   s   d}t |}xt|t|k rtt|k r@|dt }| jj|}n| jj|}|sjtt|d| t|||d  }||7 }qW |S )Nr   )rv   r,   r   r=   ru   r
   r   )r0   r|   r   r   r   r1   r   r   r   r   }  s    zHTTPResponse._safe_readintor*   c             C   s   | j d ks| jdkrdS | jr(| j|S | jd k	rJ|dk sD|| jkrJ| j}y| j j|}W n* tk
r   |dkrt | j jd}Y nX | r|r| j  n| jd k	r|  jt|8  _|S )Nrg   r9   r   r   i   i @  )	r=   rI   rO   _read1_chunkedrQ   read1r]   r_   r,   )r0   r1   resultr   r   r   r     s"    



zHTTPResponse.read1c             C   s4   | j d ks| jdkrdS | jr(| j|S | j j|S )Nrg   r9   )r=   rI   rO   _peek_chunkedpeek)r0   r1   r   r   r   r     s
    
zHTTPResponse.peekc                s   | j d ks| jdkrdS | jr*t j|S | jd k	rL|dk sF|| jkrL| j}| j j|}| rl|rl| j  n| jd k	r|  jt|8  _|S )Nrg   r9   r   )r=   rI   rO   ro   r:   rQ   r_   r,   )r0   limitr   )rp   r   r   r:     s    


zHTTPResponse.readlinec             C   sf   | j  }|d ks|dkrdS d|  ko.|kn  s8|}| jj|}|  jt|8  _|sbtd|S )Nr   r9   )r   r=   r   rP   r,   r
   )r0   r1   rP   ry   r   r   r   r     s    zHTTPResponse._read1_chunkedc             C   sB   y| j  }W n tk
r    dS X |d kr.dS | jj|d | S )Nr9   )r   r
   r=   r   )r0   r1   rP   r   r   r   r     s    zHTTPResponse._peek_chunkedc             C   s
   | j j S )N)r=   fileno)r0   r   r   r   r     s    zHTTPResponse.filenoc             C   sH   | j d krt | j j|p|}t|ts6t|d r:|S dj|S d S )N__iter__z, )r>   r   Zget_all
isinstancerY   hasattrrA   )r0   r%   defaultr>   r   r   r   	getheader  s    
zHTTPResponse.getheaderc             C   s   | j d krt t| j j S )N)r>   r   listitems)r0   r   r   r   
getheaders  s    
zHTTPResponse.getheadersc             C   s   | S )Nr   )r0   r   r   r   r     s    zHTTPResponse.__iter__c             C   s   | j S )N)r>   )r0   r   r   r   info  s    zHTTPResponse.infoc             C   s   | j S )N)rU   )r0   r   r   r   geturl  s    
zHTTPResponse.geturlc             C   s   | j S )N)rM   )r0   r   r   r   getcode  s    zHTTPResponse.getcode)r   NN)N)r   r   )r   r   )r   )N)"r4   r5   r6   rV   ra   rm   rk   r_   rn   rq   rr   rs   ry   ru   r   r   r   rx   r~   rz   r   r   r   r:   r   r   r   r   r   r   r   r   r   __classcell__r   r   )rp   r   r      s<   	
!K

 "

	
c               @   s   e Zd ZdZdZeZeZdZ	dZ
edd Zedd Zd	ejd	fd
dZd0d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d1dd Zd2d!d"Zd#d$ Zd%d& Zd3dd'd(d)Zd	i fdd'd*d+Zd,d- Z d.d/ Z!d	S )4r   re   zHTTP/1.1r*   r   c             C   s   t | tjS )N)r   io
TextIOBase)streamr   r   r   
_is_textIO0  s    zHTTPConnection._is_textIOc             C   sd   | d kr|j  tkrdS d S t| dr*d S yt| }|jS  tk
rL   Y nX t| tr`t| S d S )Nr   ry   )	upper_METHODS_EXPECTING_BODYr   rv   nbytes	TypeErrorr   rY   r,   )bodyrT   Zmvr   r   r   _get_content_length6  s    

z"HTTPConnection._get_content_lengthNc             C   s\   || _ || _d | _g | _d | _t| _d | _d | _d | _	i | _
| j||\| _| _tj| _d S )N)timeoutsource_addressrS   _buffer_HTTPConnection__response_CS_IDLE_HTTPConnection__staterI   _tunnel_host_tunnel_port_tunnel_headers_get_hostporthostportsocketZcreate_connection_create_connection)r0   r   r   r   r   r   r   r   rV   V  s    zHTTPConnection.__init__c             C   s<   | j rtd| j||\| _| _|r.|| _n
| jj  d S )Nz.Can't set up tunnel for established connection)rS   RuntimeErrorr   r   r   r   clear)r0   r   r   r>   r   r   r   
set_tunneli  s    zHTTPConnection.set_tunnelc             C   s   |d kr|j d}|j d}||kryt||d d  }W nH tk
r   ||d d  dkrh| j}ntd||d d   Y nX |d | }n| j}|r|d dkr|d dkr|dd	 }||fS )
Nr)   ]r*   rX   znonnumeric port: '%s'r   [r   r   )rfindr`   r]   default_portr   )r0   r   r   r   jr   r   r   r     s    

zHTTPConnection._get_hostportc             C   s
   || _ d S )N)rH   )r0   levelr   r   r   set_debuglevel  s    zHTTPConnection.set_debuglevelc             C   s  d| j | jf }|jd}| j| x6| jj D ](\}}d||f }|jd}| j| q0W | jd | j| j| jd}|j	 \}}	}
|	t
jjkr| j  td|	|
j f xP|jjtd }t|tkrtd	|sP |dkrP | jdkrtd|j  qW d S )NzCONNECT %s:%d HTTP/1.0
asciiz%s: %s
zlatin-1   
)rT   zTunnel connection failed: %d %sr*   zheader liner8   r9   r   zheader:)r   r8   r9   )r   r   r   sendr   r   response_classrS   rI   ra   http
HTTPStatusZOKrn   OSErrorri   r=   r:   r;   r,   r   rH   rZ   rB   )r0   Zconnect_strZconnect_bytesheaderr   Z
header_strZheader_bytesresponserL   rh   messager2   r   r   r   _tunnel  s2    





zHTTPConnection._tunnelc             C   sB   | j | j| jf| j| j| _| jjtjtj	d | j
r>| j  d S )Nr*   )r   r   r   r   r   rS   Z
setsockoptr   ZIPPROTO_TCPZTCP_NODELAYr   r   )r0   r   r   r   connect  s
    zHTTPConnection.connectc             C   sB   t | _z| j}|r d | _|j  W d | j}|r<d | _|j  X d S )N)r   r   rS   rn   r   )r0   rS   r   r   r   r   rn     s    zHTTPConnection.closec             C   s  | j d kr | jr| j  nt | jdkr8tdt| d}t|dr| jdkrXtd | j|}|rx| jdkrxtd x.|j	|}|sP |r|j
d}| j j| qzW d S y| j j| W nN tk
r
   t|tjrx*|D ]}| j j| qW ntdt| Y nX d S )	Nr   zsend:i    ry   zsendIng a read()ablezencoding file using iso-8859-1z
iso-8859-1z9data should be a bytes-like object or an iterable, got %r)rS   	auto_openr   r   rH   rZ   r[   r   r   ry   r   Zsendallr   r   collectionsIterabletype)r0   r   	blocksizer   	datablockdr   r   r   r     s:    








zHTTPConnection.sendc             C   s   | j j| d S )N)r   r/   )r0   r}   r   r   r   _output  s    zHTTPConnection._outputc             c   sd   d}| j dkrtd | j|}|r6| j dkr6td x(|j|}|sHP |rV|jd}|V  q8W d S )Ni    r   zsendIng a read()ablezencoding file using iso-8859-1z
iso-8859-1)rH   rZ   r   ry   r   )r0   rr   r   r   r   r   r   r   _read_readable  s    



zHTTPConnection._read_readableFc             C   s$  | j jd dj| j }| j d d = | j| |d k	r t|drN| j|}nZyt| W nF tk
r   yt|}W n$ tk
r   tdt	| Y nX Y nX |f}xZ|D ]R}|s| j
dkrtd q|r| jdkrt|dd	jd
| d }| j| qW |r | jdkr | jd d S )Nr9   s   
ry   zAmessage_body should be a bytes-like object or an iterable, got %rr   zZero length chunk ignoredre   Xz
r   s   0

)r9   r9   )r   extendrA   r   r   r   rv   r   iterr   rH   rZ   	_http_vsnr,   r   )r0   message_bodyencode_chunkedrJ   Zchunksr   r   r   r   _send_output  s4    




zHTTPConnection._send_outputc             C   s  | j r| j j rd | _ | jtkr(t| _n
t| j| j| || _|sJd}tj	|}|rrt
d|d|j dd||| jf }| j|jd | jdkr|sd}|jd	rt|\}}}}}|ry|jd}	W n tk
r   |jd
}	Y nX | jd|	 n| jr| j}
| j}n| j}
| j}y|
jd}W n  tk
rV   |
jd
}Y nX |
jddkrtd| d }|| jkr| jd| n|jd}| jdd||f  |s| jdd n d S )N/z&URL can't contain control characters. z (found at least )z%s %s %sr   re   rX   r   ZidnaZHostr)   r      [   ]z%s:%szAccept-EncodingZidentity)r   rs   r   r   _CS_REQ_STARTEDr   _validate_methodrI   !_contains_disallowed_url_pchar_researchr   group_http_vsn_strr   r   r   r^   r   r   	putheaderr   r   r   r   r   r   rB   )r0   rT   rU   	skip_hostskip_accept_encodingmatchrequestZnetlocZnilZ
netloc_encr   r   Zhost_encr   r   r   
putrequestA  sV    






zHTTPConnection.putrequestc             C   s,   t j|}|r(td|d|j dd S )Nz)method can't contain control characters. z (found at least r   )$_contains_disallowed_method_pchar_rer   r]   r   )r0   rT   r   r   r   r   r     s    
zHTTPConnection._validate_methodc             G   s   | j tkrt t|dr$|jd}t|s:td|f t|}xht|D ]\\}}t|drn|jd||< nt	|t
rt|jd||< t|| rLtd|| f qLW dj|}|d | }| j| d S )Nr   r   zInvalid header name %rzlatin-1zInvalid header value %rs   
	s   : )r   r   r   r   r   _is_legal_header_namer]   r   	enumerater   r`   rY   _is_illegal_header_valuerA   r   )r0   r   valuesr   Z	one_valuer   r   r   r   r     s"    





zHTTPConnection.putheader)r   c            C   s*   | j tkrt| _ nt | j||d d S )N)r   )r   r   _CS_REQ_SENTr   r   )r0   r   r   r   r   r   
endheaders  s    
zHTTPConnection.endheadersc            C   s   | j ||||| d S )N)_send_request)r0   rT   rU   r   r>   r   r   r   r   r     s    zHTTPConnection.requestc             C   s   t dd |D }i }d|kr&d|d< d|kr6d|d< | j||f| d|krd	|krd
}| j||}|d kr|d k	r| jdkrtd|  d}| jdd q| jdt| nd
}x |j D ]\}	}
| j|	|
 qW t|trt	|d}| j
||d d S )Nc             s   s   | ]}|j  V  qd S )N)r+   )r   kr   r   r   	<genexpr>  s    z/HTTPConnection._send_request.<locals>.<genexpr>r   r*   r   zaccept-encodingr   zcontent-lengthztransfer-encodingFr   zUnable to determine size of %rTzTransfer-EncodingrO   zContent-Lengthr   )r   )	frozensetr   r   rH   rZ   r   rY   r   r   r'   r   )r0   rT   rU   r   r>   r   Zheader_namesZskipsZcontent_lengthrl   r   r   r   r   r     s0    	


zHTTPConnection._send_requestc             C   s   | j r| j j rd | _ | jtks&| j r0t| j| jdkrR| j| j| j| jd}n| j| j| jd}yLy|j	  W n t
k
r   | j   Y nX t| _|jr| j  n|| _ |S    |j   Y nX d S )Nr   )rT   )r   rs   r   r   r   rH   r   rS   rI   rm   ConnectionErrorrn   r   rR   )r0   r   r   r   r   getresponse)  s,    


zHTTPConnection.getresponse)NN)NF)FF)N)"r4   r5   r6   r   r   r   r   	HTTP_PORTr   r   rH   staticmethodr   r   r   _GLOBAL_DEFAULT_TIMEOUTrV   r   r   r   r   r   rn   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   &  s<    
	'
6 
 	.c                   sB   e Zd ZeZdddejdfddd fddZ fddZ  Z	S )HTTPSConnectionN)contextcheck_hostnamec               s   t t| j|||| |d k	s.|d k	s.|d k	rDdd l}	|	jdtd || _|| _|d krptj	 }|j
d k	rpd|_
|jtjk}
|d kr|j}|r|
 rtd|s|r|j|| |j
d k	rd|_
|| _|| _d S )Nr   zTkey_file, cert_file and check_hostname are deprecated, use a custom context instead.rW   TzMcheck_hostname needs a SSL context with either CERT_OPTIONAL or CERT_REQUIRED)ro   r  rV   warningswarnDeprecationWarningkey_file	cert_filesslZ_create_default_https_contextZpost_handshake_authZverify_modeZ	CERT_NONEr  r]   Zload_cert_chain_context_check_hostname)r0   r   r   r  r	  r   r   r  r  r  Zwill_verify)rp   r   r   rV   t  s0    


zHTTPSConnection.__init__c                s   t  j  | jr| j}n| j}| jj| j|d| _| jj r| jryt	j
| jj | W n. tk
r   | jjtj | jj   Y nX d S )N)server_hostname)ro   r   r   r   r  Zwrap_socketrS   r  r  r
  Zmatch_hostnameZgetpeercert	ExceptionZshutdownr   Z	SHUT_RDWRrn   )r0   r  )rp   r   r   r     s    



zHTTPSConnection.connect)
r4   r5   r6   
HTTPS_PORTr   r   r  rV   r   r   r   r   )rp   r   r  m  s   r  c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r     s   c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r     s   c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r     s   c               @   s   e Zd Zdd ZdS )r   c             C   s   |f| _ || _d S )N)argsrL   )r0   rL   r   r   r   rV     s    zUnknownProtocol.__init__N)r4   r5   r6   rV   r   r   r   r   r     s   c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r     s   c               @   s   e Zd ZdS )r	   N)r4   r5   r6   r   r   r   r   r	     s   c               @   s&   e Zd ZdddZdd Zdd ZdS )	r
   Nc             C   s   |f| _ || _|| _d S )N)r  partialexpected)r0   r  r  r   r   r   rV     s    zIncompleteRead.__init__c             C   s2   | j d k	rd| j  }nd}d| jjt| j|f S )Nz, %i more expectedrX   z%s(%i bytes read%s))r  rp   r4   r,   r  )r0   er   r   r   __repr__  s
    
zIncompleteRead.__repr__c             C   s   t | S )N)r[   )r0   r   r   r   __str__  s    zIncompleteRead.__str__)N)r4   r5   r6   rV   r  r  r   r   r   r   r
     s   
c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r     s   c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r     s   c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r     s   c               @   s   e Zd ZdS )r   N)r4   r5   r6   r   r   r   r   r     s   c               @   s   e Zd Zdd ZdS )r   c             C   s   |st |}|f| _|| _d S )N)r[   r  r2   )r0   r2   r   r   r   rV     s    zBadStatusLine.__init__N)r4   r5   r6   rV   r   r   r   r   r     s   c               @   s   e Zd Zdd ZdS )r   c             C   s   t j| dt|f  d S )Nz&got more than %d bytes when reading %s)r   rV   r;   )r0   Z	line_typer   r   r   rV     s    zLineTooLong.__init__N)r4   r5   r6   rV   r   r   r   r   r     s   c               @   s   e Zd Zdd ZdS )r   c             O   s"   t j| d tj| f|| d S )NrX   )r   rV   ConnectionResetError)r0   poskwr   r   r   rV     s    zRemoteDisconnected.__init__N)r4   r5   r6   rV   r   r   r   r   r     s   )r   )AZemail.parserrC   Zemail.messager   r   osrer   r   Zurllib.parser   __all__r   r  rK   r   r   r   globalsupdater   __members__r   r   r   r;   r<   compile	fullmatchr   r   r   r   r   r   r'   r   ZMessager(   r?   rE   BufferedIOBaser   r   r
  ImportErrorr  r/   r  r   r   r   r   r   r	   r
   r   r   r   r   r   r   r  r   r   r   r   r   r   <module>G   s   



    9    F=
