ÿØÿà 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                 @   s  d Z ddddg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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ZddlmZ dZd	ZG d
d dejZG dd dejZG dd deZdd Zdadd Zdd Z G dd deZ!eedddfddZ"e#dkrej$ Z%e%j&dddd e%j&dddd d!d" e%j&d#d$de'd%d&d' e%j( Z)e)j*rze!Z+neZ+e"e+e)j,e)j-d( dS ))z0.6
HTTPServerBaseHTTPRequestHandlerSimpleHTTPRequestHandlerCGIHTTPRequestHandler    N)
HTTPStatusa  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
        <title>Error response</title>
    </head>
    <body>
        <h1>Error response</h1>
        <p>Error code: %(code)d</p>
        <p>Message: %(message)s.</p>
        <p>Error code explanation: %(code)s - %(explain)s.</p>
    </body>
</html>
ztext/html;charset=utf-8c               @   s   e Zd ZdZdd ZdS )r      c             C   s4   t jj|  | jd d \}}tj|| _|| _d S )N   )socketserver	TCPServerserver_bindserver_addresssocketZgetfqdnserver_nameserver_port)selfhostport r   #/usr/lib64/python3.6/http/server.pyr      s    zHTTPServer.server_bindN)__name__
__module____qualname__Zallow_reuse_addressr   r   r   r   r   r      s   c               @   s  e Zd Zdejj d  Zde Ze	Z
eZdZdd Zdd Zd	d
 Zdd Zd?ddZd@ddZdAddZdd Zdd Zdd ZdBddZdd Zdd  Zd!d" ZdCd#d$Zd%d& Zd'd(d)d*d+d,d-gZdd.d/d0d1d2d3d4d5d6d7d8d9gZd:d; Z d<Z!e"j#j$Z%d=d> e&j'j( D Z)dS )Dr   zPython/r   z	BaseHTTP/zHTTP/0.9c             C   s  d | _ | j | _}d| _t| jd}|jd}|| _|j }t	|dkr|\}}}yZ|d d dkrjt
|jddd }|jd	}t	|d
krt
t|d t|d f}W n* t
tfk
r   | jtjd|  dS X |dkr| jdkrd| _|dkrr| jtjd|  dS n^t	|d
krR|\}}d| _|dkrr| jtjd|  dS n |s\dS | jtjd|  dS |||  | _ | _| _| jjdrd| jjd | _ytjj| j| jd| _W nr tjjk
r } z| jtjdt| dS d }~X n: tjjk
r4 } z| jtjdt| dS d }~X nX | jjdd}	|	j dkrZd| _n |	j dkrz| jdkrzd| _| jjdd}
|
j dkr| jdkr| jdkr| j  sdS dS )NTz
iso-8859-1z
      zHTTP//r   .r   r   zBad request version (%r)FzHTTP/1.1zInvalid HTTP version (%s)ZGETzBad HTTP/0.9 request type (%r)zBad request syntax (%r)z//)Z_classzLine too longzToo many headers
Connection closez
keep-aliveZExpectz100-continue)r   r   )r   r   )!commanddefault_request_versionrequest_versionclose_connectionstrraw_requestlinerstriprequestlinesplitlen
ValueErrorint
IndexError
send_errorr   ZBAD_REQUESTprotocol_versionZHTTP_VERSION_NOT_SUPPORTEDpath
startswithlstriphttpclientZparse_headersrfileMessageClassheadersZLineTooLongZREQUEST_HEADER_FIELDS_TOO_LARGEZHTTPExceptiongetlowerhandle_expect_100)r   versionr&   wordsr   r.   Zbase_version_numberZversion_numbererrZconntypeZexpectr   r   r   parse_request  s    












z$BaseHTTPRequestHandler.parse_requestc             C   s   | j tj | j  dS )NT)send_response_onlyr   ZCONTINUEend_headers)r   r   r   r   r8   n  s    z(BaseHTTPRequestHandler.handle_expect_100c             C   s   y| j jd| _t| jdkr@d| _d| _d| _| jtj	 d S | jsPd| _
d S | j s\d S d| j }t| |s| jtjd| j  d S t| |}|  | jj  W n4 tjk
r } z| jd| d| _
d S d }~X nX d S )Ni  i   r   TZdo_zUnsupported method (%r)zRequest timed out: %r)r3   readliner$   r(   r&   r!   r   r,   r   ZREQUEST_URI_TOO_LONGr"   r<   hasattrNOT_IMPLEMENTEDgetattrwfileflushr   Ztimeout	log_error)r   Zmnamemethoder   r   r   handle_one_request  s4    


z)BaseHTTPRequestHandler.handle_one_requestc             C   s&   d| _ | j  x| j s | j  qW d S )NT)r"   rH   )r   r   r   r   handle  s    zBaseHTTPRequestHandler.handleNc             C   s
  y| j | \}}W n tk
r.   d\}}Y nX |d kr<|}|d krH|}| jd|| | j|| | jdd d }|dkr|tjtjtjfkr| j	|t
j|ddt
j|ddd }|jd	d
}| jd| j | jdtt| | j  | jdko|r| jj| d S )N???zcode %d, message %sr   r      F)quote)codemessageexplainzUTF-8replacezContent-TypezContent-LengthZHEAD)rJ   rJ   )	responsesKeyErrorrE   send_responsesend_headerr   Z
NO_CONTENTZRESET_CONTENTZNOT_MODIFIEDerror_message_formathtmlescapeencodeerror_content_typer#   r(   r>   r   rC   write)r   rM   rN   rO   ZshortmsgZlongmsgZbodyZcontentr   r   r   r,     s4    
z!BaseHTTPRequestHandler.send_errorc             C   s:   | j | | j|| | jd| j  | jd| j  d S )NZServerZDate)log_requestr=   rT   version_stringdate_time_string)r   rM   rN   r   r   r   rS     s    
z$BaseHTTPRequestHandler.send_responsec             C   sd   | j dkr`|d kr0|| jkr,| j| d }nd}t| ds@g | _| jjd| j||f jdd d S )NzHTTP/0.9r   r   _headers_bufferz
%s %d %s
zlatin-1strict)r!   rQ   r@   r^   appendr-   rX   )r   rM   rN   r   r   r   r=     s    


z)BaseHTTPRequestHandler.send_response_onlyc             C   sl   | j dkr6t| dsg | _| jjd||f jdd |j dkrh|j dkrVd| _n|j d	krhd
| _d S )NzHTTP/0.9r^   z%s: %s
zlatin-1r_   Z
connectionr   Tz
keep-aliveF)r!   r@   r^   r`   rX   r7   r"   )r   keywordvaluer   r   r   rT     s    

z"BaseHTTPRequestHandler.send_headerc             C   s"   | j dkr| jjd | j  d S )NzHTTP/0.9s   
)r!   r^   r`   flush_headers)r   r   r   r   r>     s    
z"BaseHTTPRequestHandler.end_headersc             C   s(   t | dr$| jjdj| j g | _d S )Nr^       )r@   rC   rZ   joinr^   )r   r   r   r   rc     s    
z$BaseHTTPRequestHandler.flush_headers-c             C   s.   t |tr|j}| jd| jt|t| d S )Nz
"%s" %s %s)
isinstancer   rb   log_messager&   r#   )r   rM   sizer   r   r   r[     s    
z"BaseHTTPRequestHandler.log_requestc             G   s   | j |f|  d S )N)rh   )r   formatargsr   r   r   rE   !  s    z BaseHTTPRequestHandler.log_errorc             G   s&   t jjd| j | j || f  d S )Nz%s - - [%s] %s
)sysstderrrZ   address_stringlog_date_time_string)r   rj   rk   r   r   r   rh   /  s    z"BaseHTTPRequestHandler.log_messagec             C   s   | j d | j S )N )server_versionsys_version)r   r   r   r   r\   E  s    z%BaseHTTPRequestHandler.version_stringc             C   s    |d krt j  }tjj|ddS )NT)Zusegmt)timeemailZutilsZ
formatdate)r   Z	timestampr   r   r   r]   I  s    z'BaseHTTPRequestHandler.date_time_stringc          	   C   sB   t j  }t j|\	}}}}}}}}	}
d|| j| ||||f }|S )Nz%02d/%3s/%04d %02d:%02d:%02d)rs   Z	localtime	monthname)r   ZnowZyearZmonthZdayZhhZmmZssxyzsr   r   r   ro   O  s
    z+BaseHTTPRequestHandler.log_date_time_stringZMonZTueZWedZThuZFriZSatZSunZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDecc             C   s
   | j d S )Nr   )client_address)r   r   r   r   rn   ]  s    z%BaseHTTPRequestHandler.address_stringzHTTP/1.0c             C   s   i | ]}|j |jf|qS r   )phraseZdescription).0vr   r   r   
<dictcomp>l  s   z!BaseHTTPRequestHandler.<dictcomp>)NN)N)N)rf   rf   )N)*r   r   r   rl   r9   r'   rr   __version__rq   DEFAULT_ERROR_MESSAGErU   DEFAULT_ERROR_CONTENT_TYPErY   r    r<   r8   rH   rI   r,   rS   r=   rT   r>   rc   r[   rE   rh   r\   r]   ro   Zweekdaynameru   rn   r-   r1   r2   ZHTTPMessager4   r   __members__valuesrQ   r   r   r   r   r      s<   ig%
5



	c               @   sx   e Zd Zde Zdd Zdd Zdd Zdd	 Zd
d Z	dd Z
dd ZejsVej  ejj Zejddddd dS )r   zSimpleHTTP/c          
   C   s.   | j  }|r*z| j|| j W d |j  X d S )N)	send_headcopyfilerC   r   )r   fr   r   r   do_GET  s
    zSimpleHTTPRequestHandler.do_GETc             C   s   | j  }|r|j  d S )N)r   r   )r   r   r   r   r   do_HEAD  s    z SimpleHTTPRequestHandler.do_HEADc       	      C   sx  | j | j}d }tjj|rtjj| j}|jjds| jt	j
 |d |d |d d |d |d f}tjj|}| jd| | j  d S x6dD ]$}tjj||}tjj|r|}P qW | j|S | j|}yt|d
}W n$ tk
r    | jt	jd d S X yZ| jt	j | jd| tj|j }| jdt|d  | jd| j|j | j  |S    |j   Y nX d S )Nr   r   r   r   r      ZLocation
index.html	index.htmrbzFile not foundzContent-typezContent-Length   zLast-Modified)r   r   )translate_pathr.   osisdirurllibparseZurlsplitendswithrS   r   ZMOVED_PERMANENTLYZ
urlunsplitrT   r>   re   existslist_directory
guess_typeopenOSErrorr,   	NOT_FOUNDOKfstatfilenor#   r]   st_mtimer   )	r   r.   r   partsZ	new_partsZnew_urlindexZctypeZfsr   r   r   r     sF    


z"SimpleHTTPRequestHandler.send_headc             C   s  yt j|}W n" tk
r0   | jtjd d S X |jdd d g }ytjj	| j
dd}W n  tk
r|   tjj	|}Y nX tj|dd}tj }d	| }|jd
 |jd |jd|  |jd|  |jd|  |jd x~|D ]v}t j
j||}| }	}
t j
j|r"|d }	|d }
t j
j|r8|d }	|jdtjj|
ddtj|	ddf  qW |jd dj|j|d}tj }|j| |jd | jtj | jdd|  | jdtt| | j  |S )NzNo permission to list directoryc             S   s   | j  S )N)r7   )ar   r   r   <lambda>  s    z9SimpleHTTPRequestHandler.list_directory.<locals>.<lambda>)keysurrogatepass)errorsF)rL   zDirectory listing for %szZ<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">z<html>
<head>z@<meta http-equiv="Content-Type" content="text/html; charset=%s">z<title>%s</title>
</head>z<body>
<h1>%s</h1>z	<hr>
<ul>r   @z<li><a href="%s">%s</a></li>z</ul>
<hr>
</body>
</html>

surrogateescaper   zContent-typeztext/html; charset=%szContent-Length) r   listdirr   r,   r   r   sortr   r   unquoter.   UnicodeDecodeErrorrV   rW   rl   getfilesystemencodingr`   re   r   islinkrL   rX   ioBytesIOrZ   seekrS   r   rT   r#   r(   r>   )r   r.   listrZdisplaypathenctitlenamefullnameZdisplaynameZlinknameZencodedr   r   r   r   r     s\    







z'SimpleHTTPRequestHandler.list_directoryc             C   s   |j ddd }|j ddd }|j jd}ytjj|dd}W n  tk
rb   tjj|}Y nX tj|}|j d}t	d |}t
j }x8|D ]0}t
jj|s|t
jt
jfkrqt
jj||}qW |r|d7 }|S )N?r   r   #r   r   )r   )r'   r%   r   r   r   r   r   	posixpathnormpathfilterr   getcwdr.   dirnamecurdirpardirre   )r   r.   Ztrailing_slashr:   Zwordr   r   r   r     s$    	



z'SimpleHTTPRequestHandler.translate_pathc             C   s   t j|| d S )N)shutilZcopyfileobj)r   sourceZ
outputfiler   r   r   r     s    z!SimpleHTTPRequestHandler.copyfilec             C   sL   t j|\}}|| jkr"| j| S |j }|| jkr>| j| S | jd S d S )Nr   )r   splitextextensions_mapr7   )r   r.   baseZextr   r   r   r   )  s    



z#SimpleHTTPRequestHandler.guess_typezapplication/octet-streamz
text/plain)r   z.pyz.cz.hN)r   r   r   r   rq   r   r   r   r   r   r   r   	mimetypesZinitedZinitZ	types_mapcopyr   updater   r   r   r   r   r  s    	1:
c       	      C   s   | j d\} }}tjj| } | jd}g }x<|d d D ],}|dkrN|j  q8|r8|dkr8|j| q8W |r|j }|r|dkr|j  d}q|dkrd}nd}|rdj||f}ddj| |f}dj|}|S )Nr   r   r   z..r   r   )	partitionr   r   r   r'   popr`   re   )	r.   _query
path_partsZ
head_partspartZ	tail_partZ	splitpathcollapsed_pathr   r   r   _url_collapse_pathN  s.    


r   c              C   sp   t rt S ydd l} W n tk
r(   dS X y| jdd a W n. tk
rj   dtdd | j D  a Y nX t S )Nr   r   nobodyr   c             s   s   | ]}|d  V  qdS )r   Nr   )r|   rv   r   r   r   	<genexpr>  s    znobody_uid.<locals>.<genexpr>r   )r   pwdImportErrorgetpwnamrR   maxZgetpwall)r   r   r   r   
nobody_uid  s     r   c             C   s   t j| t jS )N)r   accessX_OK)r.   r   r   r   
executable  s    r   c               @   sR   e Zd ZeedZdZdd Zdd Zdd Z	d	d
gZ
dd Zdd Zdd ZdS )r   forkr   c             C   s$   | j  r| j  n| jtjd d S )NzCan only POST to CGI scripts)is_cgirun_cgir,   r   rA   )r   r   r   r   do_POST  s
    
zCGIHTTPRequestHandler.do_POSTc             C   s   | j  r| j S tj| S d S )N)r   r   r   r   )r   r   r   r   r     s    zCGIHTTPRequestHandler.send_headc             C   sP   t | j}|jdd}|d | ||d d   }}|| jkrL||f| _dS dS )Nr   r   TF)r   r.   findcgi_directoriescgi_info)r   r   Zdir_sepheadtailr   r   r   r     s    


zCGIHTTPRequestHandler.is_cgiz/cgi-binz/htbinc             C   s   t |S )N)r   )r   r.   r   r   r   is_executable  s    z#CGIHTTPRequestHandler.is_executablec             C   s   t jj|\}}|j dkS )N.py.pyw)r   r   )r   r.   r   r7   )r   r.   r   r   r   r   r   	is_python  s    zCGIHTTPRequestHandler.is_pythonc       )      C   s  | j \}}|d | }|jdt|d }x`|dkr|d | }||d d  }| j|}tjj|r|| }}|jdt|d }q,P q,W |jd\}}}	|jd}|dkr|d | ||d   }
}n
|d }
}|d |
 }| j|}tjj|s| j	t
jd|  d S tjj|s2| j	t
jd|  d S | j|}| jsL| rn| j|sn| j	t
jd|  d S tjtj}| j |d	< | jj|d
< d|d< | j|d< t| jj|d< | j|d< tjj|}||d< | j||d< ||d< |	r|	|d< | jd |d< | jj d}|r|j! }t|dkrdd l"}dd l#}|d |d< |d j$ dkry"|d j%d}|j&|j'd}W n |j(t)fk
r   Y n&X |j!d}t|dkr|d |d< | jj dd kr| jj* |d< n| jd |d< | jj d}|r||d< | jj d }|r"||d!< g }xN| jj+d"D ]>}|d d d#krZ|j,|j-  n||d$d  j!d% }q4W d%j.||d&< | jj d'}|r||d(< t/d | jj0d)g }d*j.|}|r||d+< xd<D ]}|j1|d qW | j2t
j3d- | j4  |	j5d.d/}| jr.|
g}d0|kr*|j,| t6 }| j7j8  tj9 }|dkrtj:|d\}}x0t;j;| j<gg g dd r| j<j=ds^P q^W |r| j>d1| d S y\ytj?| W n t@k
r   Y nX tjA| j<jB d tjA| j7jB d tjC||| W n(   | jjD| jE| j tjFd2 Y nX ndd lG} |g}!| j|rtHjI}"|"j$ jJd3rv|"d d= |"d>d   }"|"d6g|! }!d0|	kr|!j,|	 | jKd7| jL|! ytM|}#W n tNtOfk
r   d}#Y nX | jP|!| jQ| jQ| jQ|d8}$| jj$ d9kr|#dkr| j<j=|#}%nd }%x4t;j;| j<jRgg g dd rN| j<jRjSdsP qW |$jT|%\}&}'| j7jU|& |'r|| j>d:|' |$jVjW  |$jXjW  |$jY}(|(r| j>d1|( n
| jKd; d S )?Nr   r   r   r   r   zNo such CGI script (%r)z#CGI script is not a plain file (%r)z!CGI script is not executable (%r)ZSERVER_SOFTWAREZSERVER_NAMEzCGI/1.1ZGATEWAY_INTERFACEZSERVER_PROTOCOLZSERVER_PORTZREQUEST_METHODZ	PATH_INFOZPATH_TRANSLATEDZSCRIPT_NAMEQUERY_STRINGZREMOTE_ADDRauthorizationr   Z	AUTH_TYPEZbasicascii:ZREMOTE_USERzcontent-typeZCONTENT_TYPEzcontent-lengthCONTENT_LENGTHrefererHTTP_REFERERacceptz	
    ,ZHTTP_ACCEPTz
user-agentHTTP_USER_AGENTZcookiez, HTTP_COOKIEREMOTE_HOSTzScript output follows+rp   =zCGI script exit status %#x   zw.exer   r   z-uzcommand: %s)stdinstdoutrm   envZpostz%szCGI script exited OK)r   r   r   r   r   r   )Zr   r   r(   r   r   r.   r   r   r   r,   r   r   isfileZ	FORBIDDENr   	have_forkr   r   deepcopyenvironr\   Zserverr   r-   r#   r   r   r   r   r   rz   r5   r6   r'   base64binasciir7   rX   ZdecodebytesdecodeErrorUnicodeErrorZget_content_typeZgetallmatchingheadersr`   stripre   r   Zget_all
setdefaultrS   r   rc   rP   r   rC   rD   r   waitpidselectr3   readrE   setuidr   dup2r   execveZhandle_errorZrequest_exit
subprocessrl   r   r   rh   Zlist2cmdliner*   	TypeErrorr)   PopenPIPEZ_sockZrecvZcommunicaterZ   rm   r   r   
returncode))r   dirrestr.   iZnextdirZnextrestZ	scriptdirr   r   ZscriptZ
scriptnameZ
scriptfileZispyr   Zuqrestr   r  r  Zlengthr   r   lineZuacoZ
cookie_strkZdecoded_queryrk   r   pidstsr  ZcmdlineZinterpnbytespdatar   rm   Zstatusr   r   r   r     s4   

























zCGIHTTPRequestHandler.run_cgiN)r   r   r   r@   r   r   Zrbufsizer   r   r   r   r   r   r   r   r   r   r   r     s   
zHTTP/1.0i@  r   c       	      C   s   ||f}|| _ ||| b}|jj }d}t|j|d |d d y|j  W n& tk
rt   td tjd Y nX W d Q R X d S )Nz>Serving HTTP on {host} port {port} (http://{host}:{port}/) ...r   r   )r   r   z&
Keyboard interrupt received, exiting.)	r-   r   Zgetsocknameprintrj   Zserve_foreverKeyboardInterruptrl   exit)	HandlerClassZServerClassZprotocolr   bindr   ZhttpdZsaZserve_messager   r   r   test  s    
r$  __main__z--cgi
store_truezRun as CGI Server)actionhelpz--bindz-bZADDRESSz8Specify alternate bind address [default: all interfaces])defaultmetavarr(  r   Zstorer   z&Specify alternate port [default: 8000])r'  r)  typenargsr(  )r"  r   r#  ).r   __all__Zemail.utilsrt   rV   Zhttp.clientr1   r   r   r   r   r	  r   r   r	   rl   rs   Zurllib.parser   r   argparser   r   r   r
   r   ZStreamRequestHandlerr   r   r   r   r   r   r   r$  r   ArgumentParserparseradd_argumentr*   
parse_argsrk   ZcgiZhandler_classr   r#  r   r   r   r   <module>S   sh      g ]0  
