
    i                    #   d dl mZm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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 dlm Z m!Z!m"Z"m#Z# d dl$m%Z% 	 d dl&m'Z( d dl&m&Z) e(ejT                  d<   d	d
l+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 d	dl7m8Z8m9Z9 d Z:	 d dl;m;Z;m<Z< e<jz                  Z>e0reCZDd	dlEmFZF  eFj                          ej                  dk\  se1r ej                         dk(  reJZKnd dlmLZK d ZM eMd      ZN eMd      ZO eMd      ZP eMd      ZQ eMd      ZR eMd      ZS eMd      ZT eMd      ZUdZVdZWd ZXd!ZYeYj                  d"      Z[ e\eY      Z] e\e[      Z^	 d dl_Z_d#Z` eae_d$      Zb	 d dlcZc	 ej                  j                  d&      r ef       d dlgZg	  egj                   eid'      d#(      Zj	 ej                  j                  d)      r ef       	 ej                  j                  d*      sej                  j                  d+      r ek       d	d,llmmZm d#Zo	 ej                  j                  d.      r ef       d#Zpd dlqZq eaeqd/      sJ 	 	 d dlrZs etesj                  j                  d0            Zw	 ej                  j                  d1      r ef       d#Zxd dlyZy	 ej                  j                  d2      se,r"ej                  j                  d3      s ef       d dlzZzej                  j                  d4      rd d5l{m|Z|  e}d6 e|em             e2rd	d7l~mZ d	d8lmZ d	d9lmZ d%Z	 ej                  j                  d:      r ek       d dlZe0sd d;lmZ nd d<lmZ 	 ej                  j                  d=      r ef        ej                  ej                  d>       d#Ze.r 	  ej                  ej                  d?       	  ej                  dBdC       ej                   Zej                  Z	  ej&                  dF      dGz  Ze,xs e0xs e. Z ej,                  dI      Z ej,                  dJ      Z ej,                  dKej2                        Z ej,                  dLej2                        Z ej,                  dMej2                        Z ej,                  dNej2                        Z ej,                  dO      Z ej,                  dP      Ze0rdQ ZneijB                  Z edRdS      Z edTdU      Z edVdW      Z edXdY      xZxZZe,rene/rendZe,rene/rendZe,rene/rendZejV                  j                  d"      Ze4re0rdZZn ej\                         Ze1xr ej^                  ej`                  v Zd[Zd\Zd]Zd^Zed_z   Zi d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddd
ZddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddggZe,rejs                  ddgg       ddggZg dZ e\e      ZddddZdddZd Z e        ej                         D  ci c]  \  } }|| 
 c}} Zded<   ddiZdZdZdZdÐj                         j                  dī      D ci c]D  }|j                         j                  dū      d	d D ]  }|r||j                  dd	      d     F c}}ZeȐj                         D  ci c]  \  } }| j                         | c}} ZdZ e\ej                  dZ      j                               Z e\eːj                               ZdZ ej,                  eΫ      ZdZd	dddddddϜZdddddҜZ e\g dӢ      ZdԄ Z eԫ       \  ZZej                  xs dZe-r9dZd֐j                         D ]#  Z	 e,redz  Z ej                  e٫      ZereZ n% d؄ Zdل Zdڄ Z	  eݫ       Z	 d dlm7Z 	 ej                  j                  dݫ      r ef       d dlmZ 	 ej                  j                  d߫      r ef       d dlm7Z 	 ej                  j                  d      r ef       d dlm7Z  e۫       Zdj                  e9e8eeeeee      Z	 ejC                  dd      ZejC                  dd      Zd Zd Zd Zd ZdZ ej                  e      Ze ee      k7  se ee      k7  r efd      	  G d def      Zd Z G d dej                        Z G d de      Z G d de      Z G d dej                         Z G d de      Z G d de      Z G d de      ZeZ G d de      Z G d de      Z G d  de      Z	 G d dej                        Z
 G d de      Z G d de      Z G d d	e      Z G d
 de      Ze4r,ej                  dk  rej                  Zd Zee_        d Zd Zd Zd Zd ZddZd Zd Zd Zd Zd Zerene:Zd ZddZd Z  G d de      Z!d Z"d Z#d  Z$d! Z%d" Z&e,re&ne%Z'd# Z(d$j                         Z)d%j                         Z*d&Z+dd'Z,	 dd(Z-d) Z.dd*Z/d+ Z0dd,Z1dd-Z2d. Z3d/ Z4d0 Z5d1 Z6d2 Z7d3 Z8d4 Z9d5 Z:d6 Z;d7 Z<d8 Z=d9 Z>d: Z?d; Z@d< ZAd= ZBdd>ZCdd?ZDd@ ZEdA ZFe0sdBZG eDdC      D ci c]'  }||eGvrdD|fz  n eH|      j                  dZ      ) c}ZIdEeIdF<   dG ZJeJZKdHZLeLD ci c]1  }eLD ])  }||z   j                         ej                  ||z         + 3 c}}ZNdI ZOd dJlPmQZR nd dKlSmRZR d dLlSmOZO eEZKdM ZTdN ZUdO ZVdP ZWdQ ZXdR ZYdS ZZdT Z[dU Z\dV Z]dW Z^dX Z_dY Z`dZ Zad[ Zbd\ Zce0se^ne\Zde0se_ne]Zed] Zfd^ Zge0se4reeZheaZiecZje`ZkebZln1e0re4seexZjxZiZhedZkeiZlnd_ Zmd` ZnemxZjxZiZhenZkeiZlda Zodb Zpdc Zqdd Zrde Zsdf Ztdg Zudh Zvdi Zwdj Zxdk Zye,se/sdl Zzndm ZzddnZ{do Z|dp Z}	 ddqZ~dr ZddsZ	 ddtZ	 dduZdv Zdw Zdx Zdy Zdz Zd{ Zd| Zd} Zd~ Zd Zd Z	 ddZd Zd Zd Z e       Zej                  dZ      Z	 ddZd ZddZ	 	 	 ddZd Zd Zi ZddddZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zi Zd Zd Zd Zej                  j                  d      reZne,reZne`reZneZd Ze,reZneZ	 ej                  dk  sej                  j                  d      r ek       d dlmZ 	 ej                  dkD  r ek       d dlZd Zd Zd Zi Zd Zd ZddZ G d def      Z G d de      Ze(ee)eeReOeeeef
Zg dZy#  d dl(Z(d dl)Z)Y xY w#  d dl;m;Z;m?Z?m@Z@  e?d       ZA G d de@      ZB eB       Z>Y xY w#  d%Z`d%ZbY :xY w#  Y =xY w#  dZgY  xY w#  dZjY xY w# ek$ r
 d d,lnmmZm Y w xY w#  d%Zodd-ZmY xY w#  d%ZpY xY w#  d%ZwY xY w#  d%ZxY axY w#  Y %xY w# ek$ r dZY w xY w#  ej                  Zd@ Zee_        Y pxY w#  dA Zee_        d%ZY xY w#  dD ZdE ZY cxY w#   ej&                  dH      dGz  ZY jxY wc c}} w c c}}w c c}} w #  Y xY w#  dZY uxY w#  dZY xxY w#  dZY YxY w#  dZY :xY w#  dZY xY w# ef$ rLZej                  Zej                  Zej                  Zej                  Ze1r e}de       Y dZ[dZ[ww xY wc c}w c c}}w # ek$ r 	 d dlZn# ek$ r dZY nw xY wY Uw xY w# ek$ r dZY Fw xY w(      )print_functionunicode_literalsN)Counter)IPv4AddressIPv4NetworkIPv6AddressIPv6Network)Queue)gzip_ng)zlib_nggzip   )ANYWINEXEGRAALMACOSPY2PY36TYPE_CHECKINGVT100WINDOWS	EnvParamsunicode)
S_BUILD_DT	S_VERSIONc                       y N )akas     A/home/ubuntu/myenv/lib/python3.12/site-packages/copyparty/util.pynoopr"   =   s        )datetimetimezone)r$   	timedeltatzinfoc                       e Zd Zd Zd Zd Zy)_UTCc                     t         S r   TD_ZEROselfdts     r!   	utcoffsetz_UTC.utcoffsetK       Nr#   c                      y)NUTCr   r-   s     r!   tznamez_UTC.tznameN   s    r#   c                     t         S r   r+   r-   s     r!   dstz_UTC.dstQ   r1   r#   N)__name__
__module____qualname__r0   r4   r6   r   r#   r!   r)   r)   J   s    			r#   r)   )surrogateescape)      CPython)OrderedDictc                     g }| j                         D ]"  }	 |j                  t        t        |             $ t	        |      S #  Y 4xY wr   )splitappendgetattrerrnotuple)wantretvs      r!   _ensrH   f   sJ    CZZ\ 	JJwua() :	s   AAz0ENOTCONN EUNATCH EBADF WSAENOTSOCK WSAECONNRESETzEPIPE ESHUTDOWN EBADFDzEADDRNOTAVAIL WSAEADDRNOTAVAILzEADDRINUSE WSAEADDRINUSEzEACCES WSAEACCESz7EHOSTUNREACH WSAEHOSTUNREACH ENETUNREACH WSAENETUNREACHzEPERM EACCES ENOENT ENOTCAPABLEzEIO EFAULT EUCLEAN ENOTBLKz0:0:0:0:0:0:0:0)fe8fe9feafeb)rI   rJ   rK   rL   z169.254z@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789._asciiTFICLONEFPRTY_NO_CTYPESkernel32)use_last_errorPRTY_NO_IFADDRPRTY_SYS_ALLPRTY_SYS_IFADDR)get_adaptersc                     g S r   r   )include_unconfigureds    r!   rU   rU      s    	r#   PRTY_NO_SQLITEconnectzmqPRTY_NO_PSUTILPRTY_NO_MAGICPRTY_FORCE_MAGICPRTY_MODSPEC)getsourcefilezPRTY_MODSPEC: ifaddr:)VFS)	BrokerCli)Up2k
PRTY_NO_MP)BytesIO)StringIOPRTY_NO_IPV6::1	127.0.0.1c                 j    | t         j                  k(  rt        j                  |      S t        | |      S r   )socketAF_INET	inet_aton
_inet_ptonfamips     r!   	inet_ptonrq     s,    &..(!++B//!#r**r#   c                 ,    t        j                  |      S r   )rj   rl   rn   s     r!   rq   rq     s    ##r#   s   >is   idgic                 L    t        j                  | j                  d      g| S NrM   )structpackdecodefmtr   s     r!   spackrz     s    {{3::g.333r#   c                 L    t        j                  | j                  d      |      S rt   )ru   unpackrw   rx   s     r!   sunpackr}     s    }}SZZ0!44r#      P   Pz\[[^mK]*[mK]z[<>&$?`\"';]z^content-type: *([^; ]+)z^content-disposition: *([^; ]+)z/^content-disposition:(?: *|.*; *)name="([^"]+)"z0^content-disposition:(?: *|.*; *)filename="(.*)"z^MemTotal:.* kBz^MemAvailable:.* kBc                 r    t        | |      D ci c]  \  }}t        |      t        |       c}}S c c}}w r   )zipord)s1s2c1c2s       r!   umktransr   9  s-    /22r{;VRBR ;;;s   3z	<>:|?*"\/u   ＜＞：｜？＊＂＼／z<>:|?*"\u   ＜＞：｜？＊＂＼z<>:|?*"/u   ＜＞：｜？＊＂／:u   ：utf-8z1<meta name="robots" content="noindex, nofollow">
zaBarkrowler|bingbot|BLEXBot|Googlebot|GoogleOther|GPTBot|PetalBot|SeekportBot|SemrushBot|YandexBotz5https://www.gyan.dev/ffmpeg/builds/ffmpeg-git-full.7zz!https://github.com/9001/copypartyz-/issues/new?labels=bug&template=bug_report.md   OK   Created   Accepted   z
No Content   zPartial Content   zMulti-Statusi-  zMoved Permanentlyi.  Foundi0  zNot Modified  zBad Requesti  Unauthorizedi  	Forbidden  z	Not Foundi  zMethod Not Allowedi  Conflicti  zLength Requiredi  zPrecondition FailedzPayload Too LargezUnsupported Media TypezRequested Range Not SatisfiablezUnprocessable EntityLockedzToo Many RequestszInternal Server ErrorzNot ImplementedzService Unavailable	MissingNo)
i  i  i    i  i  i  i  i    e2dsae2dse2de2tsre2tse2te2vue2ve2vphardlink_onlyhardlinkdeduptftpvvtftpvnodupemnodupe	no_dupe_mno_dupesftpvvsftpvsmbwsmbsmb1smbvvvsmbvvsmbvzvzmvzsvzzmzszmvvzm4zm6zmsno_davdaw)contentclasscreationdatedefaultdocumentdisplaynamegetcontentlanguagegetcontentlengthgetcontenttypegetlastmodifiedhrefiscollectionishidden
isreadonlyisrootisstructureddocumentlastaccessedname
parentnameresourcetypesupportedlockz	image/gifz	image/pngzimage/svg+xml)gifpngsvgzaudio/ogg; codecs=opuszaudio/webm; codecs=opus)opusowac                     dj                         D ]S  } | j                  dd      \  }}|j                         j                         D ]  }dj                  ||      t        |<    U dj                         D ]g  } | j                  dd      \  }}|j                         j                         D ]/  }|j                  d      \  }}dj                  ||      t        |<   1 i y )Nztext css html csv
application json wasm xml pdf rtf zip jar fits wasm
image webp jpeg png gif bmp jxl jp2 jxs jxr tiff bpg heic heif avif
audio aac ogg wav flac ape amr
video webm mp4 mpeg
font woff woff2 otf ttf
 r   z{}/{}a  text md=plain txt=plain js=javascript
application 7z=x-7z-compressed tar=x-tar bz2=x-bzip2 gz=gzip rar=x-rar-compressed zst=zstd xz=x-xz lz=lzip cpio=x-cpio
application msi=x-ms-installer cab=vnd.ms-cab-compressed rpm=x-rpm crx=x-chrome-extension
application epub=epub+zip mobi=x-mobipocket-ebook lit=x-ms-reader rss=rss+xml atom=atom+xml torrent=x-bittorrent
application p7s=pkcs7-signature dcm=dicom shx=vnd.shx shp=vnd.shp dbf=x-dbf gml=gml+xml gpx=gpx+xml amf=x-amf
application swf=x-shockwave-flash m3u=vnd.apple.mpegurl db3=vnd.sqlite3 sqlite=vnd.sqlite3
text ass=plain ssa=plain
image jpg=jpeg xpm=x-xpixmap psd=vnd.adobe.photoshop jpf=jpx tif=tiff ico=x-icon djvu=vnd.djvu
image heics=heic-sequence heifs=heif-sequence hdr=vnd.radiance svg=svg+xml
image arw=x-sony-arw cr2=x-canon-cr2 crw=x-canon-crw dcr=x-kodak-dcr dng=x-adobe-dng erf=x-epson-erf
image k25=x-kodak-k25 kdc=x-kodak-kdc mrw=x-minolta-mrw nef=x-nikon-nef orf=x-olympus-orf
image pef=x-pentax-pef raf=x-fuji-raf raw=x-panasonic-raw sr2=x-sony-sr2 srf=x-sony-srf x3f=x-sigma-x3f
audio caf=x-caf mp3=mpeg m4a=mp4 mid=midi mpc=musepack aif=aiff au=basic qcp=qcelp
video mkv=x-matroska mov=quicktime avi=x-msvideo m4v=x-m4v ts=mp2t
video asf=x-ms-asf flv=x-flv 3gp=3gpp 3g2=3gpp2 rmvb=vnd.rn-realmedia-vbr
font ttc=collection
=)
splitlinesr@   stripformatMIMES)lnkvsrG   emsemextmimes           r!   
_add_mimesr     s     JL	, a 2!!# 	,A~~a+E!H	,	,  JL!1" #q!3))+##% 	1BIC 40E#J	1%1r#   r   zvnd.mozilla.apngjpegjpgzoself.ip self.ua self.uname self.host cfg.name cfg.logout vf.scan vf.thsize hdr.cf-ipcountry srv.itime srv.htimezb.files,circle,album,.tn,artist,title,tdate,.bpm,key,.dur,.q,.vq,.aq,vc,ac,fmt,res,.fps,ahash,vhashz tdate,.vq,.aq,vc,ac,fmt,res,.fpsa  
1B 6d B
2B 7d Gb F#
3B 8d Db C#
4B 9d Ab G#
5B 10d Eb D#
6B 11d Bb A#
7B 12d F
8B 1d C
9B 2d G
10B 3d D
11B 4d A
12B 5d E
1A 6m Abm G#m
2A 7m Ebm D#m
3A 8m Bbm A#m
4A 9m Fm
5A 10m Cm
6A 11m Gm
7A 12m Dm
8A 1m Am
9A 2m Em
10A 3m Bm
11A 4m Gbm F#m
12A 5m Dbm C#m

r   z<python3 python ffmpeg ffprobe cfssl cfssljson cfssl-certinfoz/(__MACOS|Icon\r\r)|/\.(_|DS_Store|AppleDouble|LSOverride|DocumentRevisions-|fseventsd|Spotlight-|TemporaryItems|Trashes|VolumeIcon\.icns|com\.apple\.timemachine\.donotpresent|AppleDB|AppleDesktop|apdisk))BKiBMiBGiBTiBPiBEiB      i   @l        l           l            )br   mgtpe   皙?)mv_re_trm_re_tmv_re_rrm_re_r)z.prologue.htmlz.epilogue.htmlz	readme.mdz
preadme.mdc                     dx} }	 t        ddd      5 }|j                  d      j                  dd      j                  d      }d d d        t        t        fdD              }t        t        |j                         d	         d
z  dz        dz  } t        t        fd|D              }t        t        |j                         d	         d
z  dz        dz  }| |fS # 1 sw Y   xY w#  Y | |fS xY w)Nr   z/proc/meminforbi   rM   replacer   c              3   F   K   | ]  }j                  |      s|  y wr   match.0xr   s     r!   	<genexpr>zread_ram.<locals>.<genexpr>H       0QWWQZ10   !!r   r   d   c              3   F   K   | ]  }j                  |      s|  y wr   r  r	  s     r!   r  zread_ram.<locals>.<genexpr>L  r  r  )openreadrw   r@   RE_MEMTOTALnextintRE_MEMAVAIL)r   r   fzslr   r   s        @r!   read_ramr  ?  s     IA/41 	IQ&&/(()<BB4HC	I 0c01RXXZ]#h.#56<0c01RXXZ]#h.#56< a4K	I 	Ia4Ks#   C- 1C!BC- !C*&C- -C4 zpython3 python.exec                  &   t        j                         } dj                  t        j                  D cg c]  }t        |       c}      }|j                  d      }|dkD  r|d | }dt        j                  v r|dz  }t        j                         }t        j                         j                  d      d   }t        j                  dt        j                               }|r|j                  d      nd	}d
j                  | ||t        ||      S c c}w )N.z.final.r   zfree-threadingr   httpz([0-9]+\.[0-9\.]+)r   r  z{:>9} v{} on {}{} {} [{}])platformpython_implementationjoinsysversion_infostrfindversionsystempython_compilerr@   researchgroupr   BITNESS)interpr  py_verofshost_oscompilerr   os_vers           r!   py_descr3  f  s    ++-FXXs'7'78!s1v89F
++i
 C
Qw3;;&#ooG'')//7:H
		')9)9);<AQWWQZ"F&--&(  9s   Dc                      	 dd l } dj                  | j                  D cg c]  }t        |       c}      S c c}w #  Y yxY w)Nr   r  ?)pyexpatr!  r#  r$  )r6  r  s     r!   	expat_verr7  z  s;    xx)=)=>AQ>??>s   = 8= = Ac                     	 t        j                  d      } | j                         }	 |j                  d      j	                         }t        d |D              }|j                          | j                          dj                  t         j                  |      S #  |j                  d      j	                         }Y uxY w#  d}Y LxY w)Nz:memory:z$select * from pragma_compile_optionszpragma compile_optionsc              3   t   K   | ]0  }|d    j                  d      s|d    j                  d      d    2 yw)r   zTHREADSAFE=r   r   N)
startswithr@   r
  r  s     r!   r  z_sqlite_ver.<locals>.<genexpr>  s0     R1Q4??=3Q1C#Rs   88Wz{}*{})	sqlite3rY   cursorexecutefetchallr  closer   sqlite_version)cocurr   rG   s       r!   _sqlite_verrE    s    __Z(iik	BCDMMOB RRRR		

 >>'00!44	B56??AB
s"   %B? B 2B? !B<:B? ?Cz(None))__version__PRTY_NO_PYFTPD)__ver__PRTY_NO_PARTFTPYPRTY_NO_PARAMIKOzMcopyparty v{} ({})
{}
   sqlite {} | jinja {} | pyftpd {} | tftp {} | miko {}s   +/s   -_c                 Z    t        j                  | d      }|j                  t              S NF)newline)binascii
b2a_base64	translate_b64_enc_tl)bsr  s     r!   ub64encrS    s#    E2{{;''r#   c                 V    | j                  t              } t        j                  |       S r   )rP  _b64_dec_tlrN  
a2b_base64rR  s    r!   ub64decrX    s!    \\+&""2&&r#   c                 0    t        j                  | d      S rL  )rN  rO  rW  s    r!   b64encrZ    s    ""2u55r#   c                 ,    t        j                  |       S r   )rN  rV  rW  s    r!   b64decr\    s    ""2&&r#   s   >>>????z	bad smokez#using fallback base64 codec due to c                       e Zd Zy)NotUTF8Nr7   r8   r9   r   r#   r!   r^  r^        r#   r^  c                    t        |d      5 }|j                         }d d d        j                  d      r|dd  }	 |j                  dd      S # 1 sw Y   2xY w# t        $ r}|j
                  }|||dz    }Y d }~nd }~ww xY w|s3d}||||fz  }| r
 | |d       nt        |       |j                  dd      S d	}||||fz  }| r | |d       t        |      t        |       t        |      )
Nr  s   ﻿r;   r   strictr   a  WARNING: The file [%s] is not using the UTF-8 character encoding; some characters in the file will be skipped/ignored. The first unreadable character was byte %r at offset %d. Please convert this file to UTF-8 by opening the file in your text-editor and saving it as UTF-8.r  zERROR: The file [%s] is not using the UTF-8 character encoding, and cannot be loaded. The first unreadable character was byte %r at offset %d. Please convert this file to UTF-8 by opening the file in your text-editor and saving it as UTF-8.)r  r  r:  rw   UnicodeDecodeErrorstartprintr^  )	logaprb  r  bufexeoebr   s	            r!   	read_utf8rl    s
   	b$ 1ffh ~~o&!"gzz'8,,   XXb1f  `R1I!Hzz'9-- 	{A	RRLA
Aq	 !* 	a
!*s"   AA A	B$A==Bc                   "    e Zd Z	 	 	 	 ddZd Zy)DaemonNc                     t         j                  j                  | |       |xs d| _        |xs i | _        || _        d| _        |r| j                          y y )Nr   r   T)	threadingThread__init__r   r    fundaemonrd  )r.   targetr   r   rr    s         r!   rs  zDaemon.__init__
  sR     	!!$T!2b(JJL r#   c                     t         rQt        j                  t        j                  t        j                  t        j
                  t        j                  g        | j                  | j                  i | j                   y r   )
CAN_SIGMASKsignalpthread_sigmask	SIG_BLOCKSIGINTSIGTERMSIGUSR1rt  r   r    r.   s    r!   runz
Daemon.run  sN    ""  6==&..&.."Q 	$&&$DGG$r#   )NNTN)r7   r8   r9   rs  r  r   r#   r!   rn  rn  	  s      %r#   rn  c                   *    e Zd Zd Zd Zd Zd Zd Zy)Netdevc                 <    || _         || _        || _        || _        y r   )rp   idxr   desc)r.   rp   r  r   r  s        r!   rs  zNetdev.__init__$  s    		r#   c                 d    dj                  | j                  | j                  | j                        S )Nz{}-{}{})r   r  r   r  r  s    r!   __str__zNetdev.__str__*  s#    $))TYY??r#   c                 N    dj                  | j                  | j                        S )Nz'{}-{}')r   r  r   r  s    r!   __repr__zNetdev.__repr__-  s    $))44r#   c                 0    t        |       t        |      k  S r   r$  r.   rhss     r!   __lt__zNetdev.__lt__0  s    4y3s8##r#   c                 0    t        |       t        |      k(  S r   r  r  s     r!   __eq__zNetdev.__eq__3  s    4yCH$$r#   N)r7   r8   r9   rs  r  r  r  r  r   r#   r!   r  r  #  s    @5$%r#   r  c                       e Zd Zd Zd Zy)Cooldownc                 `    || _         t        j                         | _        i | _        d| _        y N        )maxagerq  Lockmutexhistoldestr.   r  s     r!   rs  zCooldown.__init__8  s%    ^^%
	r#   c                     | j                   5  t        j                         }d}| j                  j                  |d      }||z
  | j                  kD  r|| j                  |<   d}| j
                  |z
  | j                  dz  kD  rq| j                  j                         D ci c]  \  }}||z
  | j                  k  s|| c}}| _        t        | j                  j                               d   | _        |cd d d        S c c}}w # 1 sw Y   y xY w)NFr   T   )	r  timer  getr  r  itemssortedvalues)r.   keynowrF   pvr   rG   s          r!   pokezCooldown.poke>  s    ZZ 	))+CC))--Q'BRx$++%!$		#{{S 4;;?2%)YY__%6!Q#'DKK:OAqD	 %TYY%5%5%78;	 		 	s$   BDC>:C>?5D>DDN)r7   r8   r9   rs  r  r   r#   r!   r  r  7  s    r#   r  c                   $    e Zd Zd Zd Zd Zd Zy)HLogc                     t         j                  j                  |        || _        t	        j
                  d      | _        t	        j
                  d      | _        y )Nz^([0-9a-f:\.]+:[0-9]{1,5})-\[z$^(Callback added|Config file parsed))loggingHandlerrs  log_funcr)  compileptn_ftpptn_smb_ign)r.   r  s     r!   rs  zHLog.__init__R  s>      & zz"BC::&MNr#   c                 z    t        j                  | j                        }d| j                  j                  d|dS )N<z cpp(z)>)r  getLevelNamelevel	__class__r7   )r.   r  s     r!   r  zHLog.__repr__X  s+    $$TZZ0!%!8!8%@@r#   c                      y r   r   r  s    r!   flushz
HLog.flush\  s    r#   c                    | j                  |      }|j                  }|t        j                  k  rd}n.|t        j                  k  rd}n|t        j
                  k  rd}nd}|j                  dk(  rc| j                  j                  |      }|r|j                  d      }|t        |      dz   d  }|j                  d      r|dd  |_        nn||_        nf|j                  j                  d      r| j                  j                  |      r0y |j                  j                  d	      r|j                  d
d  |_        | j                  |j                  dd  ||       y )N   r   r;   r   	pyftpdlib::ffff:r<   impacketz	partftpy.	   i)r   levelnor  INFOWARNINGERRORr   r  r  r+  lenr:  r  r  )r.   recordmsglvcr   rp   s          r!   emitz	HLog.emit_  s   kk&!^^A'//!A'--AA;;+%""3'AWWQZ#b'A+-(==+"$QR&FK"$FK[[##J/%%c*[[##K0 ++ab/FKfkk#$'a0r#   N)r7   r8   r9   rs  r  r  r  r   r#   r!   r  r  Q  s    OA1r#   r  c                   &    e Zd Z	 	 	 ddZd Zd Zy)NetMapc           	         |rdnt        j                         | _        d|v rX|D cg c]
  }|dk7  s	| c}t        |D cg c]  }d|v s|j	                  d      d    c}      z   }|j                  d       d|v rG|D cg c]
  }|dk7  s	| c}t        |D cg c]  }d|vs|j	                  d      d    c}      z   }|s|D cg c]	  }|dvs| }}t        ||      }i | _        i | _        i | _	        g | _
        |D ]  }d|v }|rt        j                  nt        j                  }	t        j                  |	|j	                  d      d         }
| j                  j                  |
       |j	                  d      d   | j                  |
<    |rt        nt         ||      | j                  |
<    | j                  j#                  d	       yc c}w c c}w c c}w c c}w c c}w )
zq
        ips: list of plain ipv4/ipv6 IPs, not cidr
        cidrs: list of cidr-notation IPs (ip/prefix)
        N::r   /r   z0.0.0.0)rg   rh   T)reverse)rq  r  r  listr@   rA   find_prefixcacheb2sipb2netbiprj   AF_INET6rk   rq   r	   r   sort)r.   ipscidrskeep_lostrict_cidrdefer_mutexr  rp   v6ro   r  s              r!   rs  zNetMap.__init__~  s    *dy~~/?
3;!/Q$Y1/$*/<Q3!8a<3 C JJy!!4Q)^14t*/@Q3a<a@8 C !CQ.B%B1CCC#u%


 	TBB%'&//V^^C""3a(89CHHOOC  hhsmA.DJJsOAb{k2{SDJJsO	T 	d#7 0<
 5@ Ds:   
GG 	G

G

GG	G"
&G"
	G'G'c                     |j                  d      r|dd  }	 | j                  |   S #  | j                  5  | j                  |      cd d d        cY S # 1 sw Y   Y y xY wxY w)Nr  r<   )r:  r  r  _map)r.   rp   s     r!   mapz
NetMap.map  s[    ==#ABB	%::b>!	%  %yy}% % %s&   ' AA
AA	AAc                     d|v }|rt        |      n
t        |      t         fd j                  D        d       }|r j                  |   nd}t         j                        dkD  ri  _        | j                  |<   |S )Nr   c              3   F   K   | ]  }j                   |   v s|  y wr   )r  )r
  r  cir.   s     r!   r  zNetMap._map.<locals>.<genexpr>  s      ?!2A+>A?r  r  (#  )r   r   r  r  r  r  r  )r.   rp   r  r  rF   r  s   `    @r!   r  zNetMap._map  sm    BY "[_B?txx?F!$djjo"tzz?T!DJ

2
r#   N)FFF)r7   r8   r9   rs  r  r  r   r#   r!   r  r  }  s    
 ,$\
%r#   r  c                       e Zd Zy)	UnrecvEOFNr_  r   r#   r!   r  r    r`  r#   r  c                   ,    e Zd ZdZd ZddZddZd Zy)	_Unrecvz,
    undo any number of socket recv ops
    c                 J    || _         || _        d| _        d| _        d| _        y )Nr#   r   )srf  rh  nbte)r.   r  rf  s      r!   rs  z_Unrecv.__init__  s%    r#   c                    | j                   rC| j                   d | }| j                   |d  | _         | xj                  t        |      z  c_        |S 	 	 | j                  j	                  |      }	 |st        d      | xj                  t        |      z  c_        |S # t
        j                  $ r |dz  }|dk  rd}Y NY n d}Y UxY w)Nr   r   r#   zclient stopped sending data)rh  r  r  r  recvrj   timeoutr  )r.   nbytesspinsrF   s       r!   r  z_Unrecv.recv  s    88((7F#Cxx(DHGGs3xGJffkk&) 9::3s8
 >> 
A:Cs   B C>Cc                 j   d}	 |t        |      kD  r/|| j                  |t        |      z
        z  }|t        |      kD  r/|S # t        $ rf d}|s||fz  }n+|dz  }||t        |      fz  }t        |      dk  r|d|z  }|rt        d|      | j                  r| j	                  |d       Y |S w xY w)zread an exact number of bytesr#   z<client stopped sending data; expected at least %d more bytesz, only got %d   z; r   r;   )r  r  OSErrorr  rf  )r.   r  raise_on_truncrF   r   s        r!   recv_exz_Unrecv.recv_ex  s    	3s8#tyy#c(!233 3s8#" 
  	NA	M_$S**s8r>3(A1o%A
	s   <A A+B21B2c                 h    || j                   z   | _         | xj                  t        |      z  c_        y r   )rh  r  r  )r.   rh  s     r!   unrecvz_Unrecv.unrecv  s#    >3s8r#   N)r   T)r7   r8   r9   __doc__rs  r  r  r  r   r#   r!   r  r    s    6.r#   r  c                       e Zd Zd Zd Zd Zy)	CachedSetc                 .    i | _         || _        d| _        y r  r  r  r  r  s     r!   rs  zCachedSet.__init__  s    r#   c                 F    t        j                          | j                  |<   y r   )r  r  )r.   rG   s     r!   addzCachedSet.add  s    IIKq	r#   c                 ^   t        j                          }|| j                  z
  | j                  k  ry | j                  j	                         D ci c]  \  }}||z
  | j                  k  s|| c}}x}| _        	 |t        ||j                           | _        y c c}}w #  || _        Y y xY w)N)r  )r  r  r  r  r  minr  )r.   r  r   rG   r  s        r!   clnzCachedSet.cln  s    iikt{{*'+vv||~Otq!q4;;9NadOODF	Cquu-.DK P	DKs   B*B;B! !	B,N)r7   r8   r9   rs  r  r  r   r#   r!   r  r    s    
 	r#   r  c                       e Zd Zd Zd Zd Zy)
CachedDictc                 .    i | _         || _        d| _        y r  r  r  s     r!   rs  zCachedDict.__init__%  s    r#   c                    t        j                          }||f| j                  |<   || j                  z
  | j                  k  ry | j                  j	                         D ci c]  \  }}||d   z
  | j                  k  s||  c}}x}| _        	 t        |j                         D cg c]  }|d   	 c}      | _        y c c}}w c c}w #  || _        Y y xY wNr   )r  r  r  r  r  r   r  )r.   r   rG   r  r  r  s         r!   setzCachedDict.set*  s    iik!Hq	t{{*'+vv||~Rtq!qtdkk9QadRRDF	QXXZ8qt89DK S8	DKs*    B?>B?C
 &C2C
 C
 
	Cc                     	 | j                   |   \  }}t        j                         }||z
  | j                  kD  r| j                   |= y |S #  Y y xY wr   )r  r  r  )r.   r   tsrF   r  s        r!   r  zCachedDict.get6  sP    	ffQiGB))+CRx$++%FF1IJ	s   AA
 A
 
AN)r7   r8   r9   rs  r  r  r   r#   r!   r  r  $  s    

	r#   r  c                   @    e Zd Z G d de      Zd Zd Zd Zd Zd Z	y)	FHCc                       e Zd Zd Zy)FHC.CEc                 D    d| _         |g| _        t        |g      | _        y r  )r	  fhsr  all_fhs)r.   fhs     r!   rs  zFHC.CE.__init__D  s    DGtDHt9DLr#   N)r7   r8   r9   rs  r   r#   r!   CEr  C  s    	%r#   r  c                      i | _         i | _        y r   )r  apsr  s    r!   rs  zFHC.__init__I  s    
r#   c                     	 | j                   |   }|j                  D ]  }|j                           | j                   |= | j                  |= y #  Y y xY wr   )r  r  rA  r  )r.   pathcer  s       r!   rA  z	FHC.closeM  sV    	D!B && 	BHHJ	 JJtHHTN	s   A Ac                    | j                   sy i }t        j                         }| j                   j                         D ]>  \  }}||j                  dz   k  r|||<   |j                  D ]  }|j                           @ || _         y )Nr   )r  r  r  r	  r  rA  )r.   keepr  r  r  r  s         r!   cleanz	FHC.cleanY  sy    zziik

((* 	HD"RUUQYT
&& BHHJ		 
r#   c                 P    | j                   |   j                  j                         S r   )r  r  pop)r.   r  s     r!   r  zFHC.poph  s     zz$##''))r#   c                 J   || j                   vrd| j                   |<   	 | j                  |   }|j                  j                  |       |j                  j                  |       t        j                         |_        y #  | j                  |      }|| j                  |<   Y >xY wr  )	r  r  r  r  r  rA   r  r  r	  )r.   r  r  r  s       r!   putzFHC.putk  s    txxDHHTN	"D!BJJNN2FFMM"
 				"B!DJJts   AA> >"B"N)
r7   r8   r9   objectr  rs  rA  r  r  r  r   r#   r!   r  r  B  s'    %V %
*r#   r  c                       e Zd ZdZd Zd Zy)ProgressPrinterz<
    periodically print progress info without linefeeds
    c                     t         j                  j                  | d       d| _        || _        || _        d| _        d| _        d| _        y )Npprp  Tr  F)	rq  rr  rs  ru  rf  argsr  endn)r.   rf  r%  s      r!   rs  zProgressPrinter.__init__  sE    !!$T!2	r#   c                    t                d}d }| j                  j                  }t        || j                  j                        }| j                  j
                  xs ||k(  }t        rdnd}| j                  st        j                  |       || j                  k(  s| j                  r=| j                  }t        j                         }|r||z
  |k\  r|}| j                  d|d       |rt        |j                  |             t        rt        j                   j#                          | j                  s|ry t        rt%        dd       n|rt%        d	       t        j                   j#                          y )
Nr   z {}[Kz {} $z
progress: r  z[Kr  r&  z------------------------)sigblockr%  	scan_pr_rr   	scan_st_rqr   r&  r  sleepr  rf  uprintr   r   r"  stdoutr  re  )r.   tpr  slp_prslp_ps	no_stdoutry   r  s           r!   r  zProgressPrinter.run  s   
$$VTYY001IIKK36V#3	$m)((JJvdhh$((((C))+CsRx6)30!43::c?#

  "! (($ (#,-

r#   N)r7   r8   r9   r  rs  r  r   r#   r!   r!  r!  z  s    "r#   r!  c                   ,    e Zd Zd Z	 	 	 ddZd Zd Zy)MTHashc                    d | _         d | _        d| _        d| _        d| _        dt
        xs ddk  rdndz  | _        t        j                         | _	        t        j                         | _
        t               | _        t               | _        g | _        t        |      D ]?  }t!        | j"                  dt%        |      z         }| j                  j'                  |       A y )Nr   Fr   r  r      zmth-)r#  r  szcszstop	RAM_AVAILreadszrq  r  omuteximutexr
   work_qdone_qthrsrangern  workerr$  rA   )r.   coresr'  r   s       r!   rs  zMTHash.__init__  s    	!9>Q*>QBGnn&nn&w'	u 	 At{{FSVO4AIIQ	 r#   Nc                 h   | j                   5  || _        || _        || _        i }t	        t        j                  ||z              }t        |      D ]  }	| j                  j                  |	        d }
t        |      D ]P  }	| j                  j                         }	 |\  }	}}}|||f||	<   |s0||	|z  z
  dz  }|t        |      z   |z   |_        R |
r|
g }t        |      D ]  }|j                  ||           d | _        d| _        d| _        |cd d d        S #  |
xs |}
Y zxY w# 1 sw Y   y xY w)Nr   r   )r>  r  r9  r:  r  mathceilrC  r@  r  rA  r  r$  r  rA   )r.   r  fszchunkszr#  prefixsuffixchunksnchunksnchri  qedigr/  r:  mbrF   r'  s                     r!   hashzMTHash.hash  sO    [[ !	DFDGDHF$))C'M23GW~ %$% BW~ 
7[[__&")+&Cc3#&S/F3K g-;?B#c"g-6BF
7 C7^ &

6!9%& DFDHDGC!	 !	 "rB#!	 !	s+   BD(D+D(.A#D(D%#D((D1c                     	 | j                   j                         }	 | j                  |      }| j                  j                  |       H# t        $ r}|}Y d }~,d }~ww xY wr   )r@  r  hash_at	ExceptionrA  r  )r.   r/  rG   ri  s       r!   rD  zMTHash.worker  sV    ++//#CLL% KKOOA   s   A
 
	AAAc                    | j                   }|| j                  z  x}}t        | j                  | j                  |z
        x}}| j                  r|d||fS t        j                         }|dkD  r| j                  5  |j                  |       |j                  t        || j                              }d d d        st        dt        |      z         |j                  |       |t        |      z  }|t        |      z  }|dkD  r|j                         d d }	t!        |	      j#                  d      }
||
||fS # 1 sw Y   xY w)Nr  r   zEOF at !   rM   )r  r:  r   r9  r;  hashlibsha512r?  seekr  r=  rV  r$  updater  digestrS  rw   )r.   rO  r  r/  ofs0chunk_sz	chunk_remhashobjrh  bdigudigs              r!   rU  zMTHash.hash_at  s$   FF488^#d"488TWWs];;999D(**.."!m :sffSDKK89: 	CH 455NN3S!I3s8OC !m ~~$t}##G,D$((: :s   :7D88E)Nr  r  )r7   r8   r9   rs  rS  rD  rU  r   r#   r!   r6  r6    s"     * *X)r#   r6  c                       e Zd Zd Zd Zd Zy)HMaccasc                    || _         i | _        	 t        |d      5 }|j                         | _        t        | j                        dk7  r
t               	 d d d        y # 1 sw Y   y xY w#  t        j                  d      | _        t        |d      5 }|j                  | j                         d d d        Y y # 1 sw Y   Y y xY wxY w)Nr  @   wb)
retlenr  r  r  r  r  rV  osurandomwrite)r.   keypathri  r  s       r!   rs  zHMaccas.__init__  s    
	"gt$ &668txx=B&#+% '& & &	"zz"~DHgt$ "!" " "sF   A* 8AA* A'#A* 'A* *(CB8.C8C	=CCc                 X   	 | j                   |   S #  t        | j                         dkD  ri | _         t        j                  | j                  |t
        j                        j                         }t        |      d | j                   j                  d      }|| j                   |<   |cY S xY w)Nr  rM   )r  r  hmacnewr  rY  rZ  r]  rS  ri  rw   )r.   r  zbr   s       r!   r   z	HMaccas.b  s    		::c?"	4::%
$((C8??AB]t{{+227;B DJJsOIs
    BB)c                 D    | j                  |j                  dd            S )Nr   r  )r   encode)r.   r  s     r!   r  z	HMaccas.s'  s    vvcjj)455r#   N)r7   r8   r9   rs  r   r  r   r#   r!   re  re    s    "
6r#   re  c                       e Zd Zd Zd Zy)Magicianc                 R    d| _         t        j                         | _        d | _        y NF)	bad_magicrq  r  r  magicr  s    r!   rs  zMagician.__init__,  s    ^^%

r#   c                    	 | j                   r
t               | j                  s>	 | j                  5  | j                  st        j                  dd      | _        d d d        | j                  5  | j                  j                  |      }d d d        j                  d      d   }t        j                  ||      }d|vr|S t        j
                  |d      }t        j                  d|d	
      d   }	 t        |   S # 1 sw Y   xY w#  d| _          xY w# 1 sw Y   xY w#  d}Y xY w#  Y nxY wt        j                  |      }|r|d	d  S t               )NFT)
uncompress	extensionr5  r  r   r   z[; ]r   )maxsplit)rx  rV  ry  r  Magic	from_filer@   	MAGIC_MAPr  r)  EXTS	mimetypesguess_extension)r.   fpathrF   r   mgs        r!   r   zMagician.ext1  s>   	~~k!:: W#zz).QU)VDJW  2jj**512
 iinQmmC%c>Ju40xxq1!4	:)W W%)DN2 2	C	&&t,ab6M+s]   "D# D
 )C>D
 "D# .D
D# 5D, >DD
 

DD# D D# #D),D0N)r7   r8   r9   rs  r   r   r#   r!   ru  ru  +  s    
#r#   ru  c                   *    e Zd ZdZddZd Zd Zd Zy)Gardaz!ban clients for repeated offensesc                 (   || _         	 |j                         j                  d      \  }}}t        |      | _        t        |      dz  | _        t        |      dz  | _        i | _        i | _        d| _	        y #  dx| _        x| _        | _        Y /xY w)N,<   r   )
uniqr   r@   r  limwinpenctprevlast_cln)r.   cfgr  r   r   r  s         r!   rs  zGarda.__init__Z  s    		/iik'',GAq!1vDH1v{DH1v{DH 		/-..DH.tx$(s   AA8 8Bc                 .   d}t        t        j                         | j                  z
        }| j                  |   D ]  }||k  r|dz  } n |r@| j                  |   |d  }|r|| j                  |<   y | j                  |= 	 | j                  |= y y #  Y y xY w)Nr   r   )r  r  r  r  r  )r.   rp   r'  okrG   r  s         r!   r  z	Garda.clnh  s    txx'( 	A2vQ		
 QRB GGBK		" s   B Bc                     t        | j                        D ]  }| j                  |        t        t	        j                               | _        y r   )r  r  r  r  r  r  )r.   r   s     r!   allclnzGarda.allcln{  s8    dgg 	AHHQK	 DIIK(r#   c                 Z   | j                   sd|fS d|v rt        |      j                  d d }|r=| j                  r1| j                  j                  |      |k(  rd|fS || j                  |<   t        t        j                               }	 | j                  |   j                  |       || j                  z
  dkD  r| j                          n| j                  |       t        | j                  |         | j                   k\  r|| j                  z   |fS d|fS #  |g| j                  |<   Y xY w)Nr   r   ,  )r  r   explodedr  r  r  r  r  r  rA   r  r  r  r  r  )r.   rp   r  r  s       r!   bonkz
Garda.bonk  s    xxb5L"9R))$3/BDIIyy}}R D("u DIIbM$))+	 GGBKs# $KKMHHRLtwwr{txx'>2%%b5L	 %DGGBKs   
D D*Nr  )r7   r8   r9   r  rs  r  r  r  r   r#   r!   r  r  W  s    +&)r#   r  )r;   r   c                     t        j                         }| D cg c]"  }t        |d      r|j                  |d      n|$ } }t	        | g|i |S c c}w )Nrw   r  )r"  getfilesystemencodinghasattrrw   _popen)r  r   r    encr  s        r!   _spopenr    sW    '')NOPH)=QXXc9%1DPPa"!"r"" Qs   'Ac                     	 t        | d       y # t        $ rb 	 t        | j                  dd      j                         d       Y y #  t        | j                  dd      j                         d       Y Y y xY ww xY w)Nr  r)  r   r  rM   )re  UnicodeEncodeErrorrs  rw   r  s    r!   r/  r/    sp    Ccr C	C#**Wi0779rB	C#**Wi0779rBB	Cs     	A;+A-A74A;7A;c                      t        | d       y )Nr   )r/  r  s    r!   nuprintr    s    
S?r#   c                    d}| j                  dd      j                  d      }|D ]4  }|j                         }t        |      t        |      z
  }|s-||kD  s3|}6 dj	                  |D cg c]  }||d  	 c}      S c c}w )Nrg  r  r   )r  r@   lstripr  r!  )txtpadlnsr   r   pad2s         r!   dedentr    s    
C
++dB

%
%d
+C YY[2wR #*C	
 99-2bh-..-s   ,A?c                      t        j                         j                  } t        dt	        d|       dd        }dj                  d |D              dz   S )Ns   BBBBBs   >Qr  c              3   >   K   | ]  }d j                  |        yw)z[1;37;48;5;{0}m{0:02x}N)r   r;  s     r!   r  zrice_tid.<locals>.<genexpr>  s     Ea/66q9Es   z[0m)rq  current_threadidentr}   rz   r!  )tidr  s     r!   rice_tidr    sJ    

"
"
$
*
*C%s+BC01A77E1EE	QQr#   c                  P   t        j                          }dj                  d t        j                         dd D              }d|fz  t	               |g}| r|j                  t        |              |r|j                  t        |             dj                  |      }t        |       y )Nr  c              3   ~   K   | ]5  }d |d   j                  t        j                        d   dd d|d    7 yw)z[36mr   r$  N[33mr   )r@   rj  sepr;  s     r!   r  ztrace.<locals>.<genexpr>  s>       #$A$**RVV"4R"8""=qtDs   ;=r;   r$  z%.6fz[0m )r  r!  	tracebackextract_stackr  rA   reprr  )r%  kwargsr   stackpartsr  s         r!   tracer    s    		AGG ((*1R0 E qd]HJ.ET$Z T&\"
//%
 CCLr#   c           	         i }t        t        j                         D cg c]  }|j                  |j                  f c}      }t        j                         j                         D ]=  \  }}| rd|j                  |      |fz  }nt        |j                  |            }|||<   ? g }g }| rdnd}	t        |j                               D ]  \  }}d|g}
d }t        j                  |      D ]  \  }}}}t        j                  j                  |j!                  t        j                        |	d        }|
j#                  d|||fz         |sa|
j#                  dt        |j%                               z          d|v sd} |r!||
d	   g|
d
d  D cg c]  }||z   	 c}z   z  }|j'                  |
        dj                  ||z         dz   S c c}w c c}w )Nz%s (%x)r  z

# zFile: "%s", line %d, in %sz  zself.not_empty.wait()z    r   r   r   )dictrq  	enumerater  r   r"  _current_framesr  r  r$  r  r  r  rj  r  r!  r@   rA   r   extend)verbosethreadsr   namesr  r  r   rretbretnprF   r  fnlnoliner  s                   r!   alltracer    s   GY-@-@-BC177AFF#CDE))+113 
U		#44Duyy~&D DDBBgmmo. e!#$#,#:#:5#A 	"BT4RXXbff-bc23BJJ3r3oEF

4#djjl"334*d2!C	" SVHQR9Aa999DKK  99TD[!D((7 D.  :s   GG
c                     |rdj                  |      nd}| j                  dd      \  }}t        |      }t        t        d|z   |||f       y )Nz-{}r  r  r   stackmon)r   rsplitr  rn  r  )arg_strnidrL  fpr  zis         r!   start_stackmonr    sI    "%U\\#2FNN3"EB	QB
8Z&(2r6*:;r#   c                    d}| }	 |dz  }|} t        j                  |       dj                  |t        j                          t                     }|j	                  dd      }| j                  d      rt        j                  |d      }n(| j                  d	      rdd l}|j                  |d
      }d| v rKt        j                  t              }dD ]-  }	d|	z   }	|	| v s| j                  |	|j                  |	            } / d| v r)	 t        j                  | j!                  dd      d          t#        | |z   d      5 }
|
j%                  |       d d d        S#  Y /xY w# 1 sw Y   xY w)Nr   r   z	{}, {}
{}r   r  z.gzr  )compresslevelz.xz)preset%YmdHMSr  rh  )r  r.  r   r  rs  endswithr   compresslzmar$   r  r3   r  strftimerj  makedirsr  r  rl  )r  ivalrL  ctrfp0strh  r  r/   fsr  s              r!   r  r    sN   
C
C
q

4  diik8:>ii+;;u --15C[[ --A-.C"9c"B 92X8BB8B9
 "9BIIc1-a01 "v+t$ 	GGCL	A :	 	s   (E =E E E)c                     t        |      }dx}}|r)dj                  |t        j                               }|dd  }t	        t
        || ||f       y )Nzlog-thrszlogthr-n{}-i{:x}r;   )floatr   rj  getpidrn  log_thrs)loggerr  r  tnamelnames        r!   start_log_thrsr  +  sP     ;DEE
"))#ryy{;ab	
8UVT512r#   c                     	 t        j                  |       t        j                         D cg c]  }|j                   }}|D cg c]E  }|j                  d      s2|j                  d      d   dv r|j                  d      d   nd|v rdn|G }}t        t        |      j                               D cg c]  \  }}dj                  ||       }}} | |dj                  |      d	       c c}w c c}w c c}}w )
Nzpydevd.-r   )httpconnthumbtaggerz-listen-listenz	{}[36m{}z
[0m [33mr;   )r  r.  rq  r  r   r:  r@   r  r   r  r   r!  )rf  r  r   r  tvr   rG   s          r!   r  r  7  s    


4'1134aff44 
 <<	* wws|A"AA GGCLO Q 	
 
 7=WR[=N=N=P6QRdan##Aq)RRD$))"-q1 4
 Ss   C0A
C57C:c                      t        j                  t         j                  t         j                  t         j                  t         j
                  g       y r   )rz  r{  r|  r}  r~  r  r   r#   r!   	_sigblockr  H  s.    
6==&..&..Ir#   c                    |}| D ]9  }|j                   j                  d      }|j                  j                  d      }|j                  j                  d      }d|z   dz   }|r4|j	                  ||      }|j	                  |j	                  dd      |      }|r4|j	                  ||      }|j	                  |j	                  dd      |      }|j                  |j
                  k7  s|j
                  j                  d      }d|z   dz   }	|j	                  ||	      }|j	                  |j	                  dd      |	      }< ||k7  r|dz  }|S )Nr   s   $hist(/   )   \   \\s   $db(/s=   
NOTE: filepaths sanitized; see serverlog for correct values)realpathrs  histpathvpathr  dbpath)
volsr  txt0volbapbhpbvpbvphbdpbdphs
             r!   vol_sanr  Q  s5   D All!!'*ll!!'*iiw'C$&++c3'C++ckk%93?C++c4(C++ckk%94@C<<3::%**##G,Cc>D(D++c4(C++ckk%94@C#A& d{QQJr#   c                    t        j                         \  }}}|rt        j                  |      nt        j                         d d }d}|D 	
cg c]0  \  }}}	}
||j                  t        j                        d   ||	|
fz  2 }}	}}}
|s|s|r%|j                  d|r|j                  ndd|       dj                  ||  d  d d |r	d         S d         S c c}
}	}}w )Nr$  z%s:%d <%s>: %s[z(anonymous)z] r   r   )r"  exc_infor  
extract_tbr  r@   rj  r  rA   r7   r!  )	max_linesr  etevtbstbry   r  r   rt  r  ri  s               r!   min_exr  l  s    JBB&()

r
"i.E.E.G.LC
CMP	Q	Q9IRc#"&&!"%r34
4	QB	Q	R2
		br{{mCRHI99R
_%<g%<=>>1%<=>> 
Rs   5C
c                    |j                  dt              }|j                  dd       }|j                  dd       }|j                  dd       }|xr d|v }| t        j                  k(  r || g|i || fS |r*| j	                  d      d   }t        |      dk  r|d|z   z  }| }	| }
d	}	 |
j                  d      }|dk  s|t        |
      dz
  k  rn|
|d  |z   }|
d | }
6d}d	}	 d }	 |r!t        j                  j                  ||       }n| }|r7t        j                  j                  t        |            r||z  }| |z  } ||z  } |t        |      g|i |}|rrd|d}t        j                  j                  ||      }t        t        |      d      5 }|j                  |	j                  d             |rt        ||       d d d        |rt        ||       || fS # 1 sw Y   xY w# t        $ r}|}|r|j                          |j                   t         j"                  t         j$                  fv rc|sad
}g }|
| fD ]K  }|j                  dd      j'                  d      }t)        j*                  dd|      }|j-                  |       M |\  }
} Y d }~|j                   t         j.                  t         j0                  t         j2                  fvr$t4        r|j                   t         j"                  k7  r Y d }~nd }~ww xY w|sU|	d|j                  dd      }t7        t9        j:                  |      j=                         d d       j'                  d      }t        |       }t        |       |k\  rkt        |
      dk  r|t        |
      t        |      kD  r|
d d }
n&	 |j	                  dd      \  }}n#  d|dd  z   }Y nxY w|
d||} t        |       |k\  rk)Nrt  fdirrL  vffpermsr  r$  r<   r  Tr   Fz	fn-trunc.z.txtrh  r   rM   r  z[^][a-zA-Z0-9(){}.,+=!-]_r   r8  r   r   r  ~)r  r  rj  devnullr@   r  rfindr  r!  lexistsfsencrl  rs  
set_fpermsr  rA  rC   EINVALEPERMrw   r)  subrA   ENAMETOOLONGENOSRENOTSUPr   rS  rY  rZ  r]  )fnamer%  r  rt  r  rL  r  r  r   	orig_namebnamer/  	asciifiedb64r  r  fp2f2ex_ri  r  r   badlenr  s                           r!   ren_openr1  v  s   
**UD
!C::fd#DZZ$'F	D$	B"HNF

5*4*6*E11kk#r"s8a<cCiFIE
C
kk#7cCJN*CDkCds  I
C
-	T51"''//%,7vE%L24262A+.0ggll4-%*d+ +rHHY--g67"2r*+
 1b!e8O+ +  	B	 xxELL%++66y 	 %. #B7I6==gFB ;S"EBJJrN#  #u xx 2 2EKKOOrxx5<<7)	, '088)LB'..,335cr:;BB7KCU%jF"5zA~5zCH$cr
( YYsA.FAs(AB-C!&S1E %jF"m sE   'B0G, /G G,  G)%G, ,
L6BK=AK==L#N9 9
Oc                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
MultipartParserc                    || _         || _        || _        || _        	 t	        |d         | _        d|_        t        | _        t        | _
        t        | _        t        | _        d| _        d | _        y #  d| _        Y FxY w)Nzcontent-lengthr   r#   )srrf  r%  headersr  clenr  RE_CTYPEre_ctypeRE_CDISPre_cdispRE_CDISP_FIELDre_cdisp_fieldRE_CDISP_FILEre_cdisp_fileboundarygen)r.   r  r%  r5  http_headerss        r!   rs  zMultipartParser.__init__  sz     	#	L)9:;DIBE ! ,*JN	DIs   A3 3	A>c                    t        | j                  dd      D ]  }| j                  t        |             | j                  j                  |      }|r/|j                  d      j                         dk(  rt        dd      j| j                  j                  |      }|s|j                  d      j                         dk7  rt        dd|      	 | j                  j                  |      j                  d      }	 | j                  j                  |      j                  d      }	 d| j                  d   j                         v }|r||j                  d      d   fc S |j                  d      d   j                  d      s||j                  d      d   fc S d}d}|D ])  }|rd}|dvr|dz  }||z  }|dk(  rd}|dk(  r n||z  }+ ||fc S  t        dd      #  t        dd	|      xY w#  |d
fcY c S xY w#  d}Y xY w)a1  
        returns [fieldname, filename] after eating a block of multipart headers
        while doing a decent job at dealing with the absolute mess that is
        rfc1341/rfc1521/rfc2047/rfc2231/rfc2388/rfc6266/the-real-world
        (only the fallback non-js uploader relies on these filenames)
        r  i ' r   zmultipart/mixedr   z;you can't use that browser to upload multiple files at oncez	form-dataznot form-data: zmissing field name: Napplewebkitz
user-agentF"r   \r  )rE  rF  Tz9server expected a multipart header but you never sent one)read_headerr5  rf  r  r9  r  r+  lowerPebkacr;  r=  r?  r6  r@   r  )	r.   r   r   fieldr  	is_webkitrF   escchs	            r!   _read_headerzMultipartParser._read_header  s2    dggq'2 C	BHHT"X##B'A771:##%):: !U 
  ##B'Awwqz![0S"=>>D++11"5;;A>#''--b177:
")T\\,-G-M-M-OO	
  bhhsmA... 88C=#,,T2bhhsmA...
 CC C,t2IC4ZC3Y2IC #:GC	J SUVVYDSb"BCC#d{""!	s$   *G!=*G5(H!G25G?Hc              #     K   t        | j                        }| j                  j                  }	 	 | j                  j                  |      }	 |j                  | j                        }|dk7  r)| j                  j                  |||z   d         |d |  y t        |      |z
  }|dkD  r|d |  ||d  }d}t        dt        |      dz         D ]  }|| d  | j                  vs|dz  } n |dk(  s| j                  j                  || d        sn.||k(  r	|d |   y 	 || j                  j                  |      z  }| #  t        dd      xY w#  t        dd      xY ww)Nr   z client d/c during multipart postr$  r   r   )r  r@  r%  s_rd_szr5  r  rI  r%  r  rC  r:  )r.   blenbufszrh  r/  dr'  s          r!   
_read_datazMultipartParser._read_dataG  s    4==!		!!Fggll5)
 hht}}-"9GGNN3sTz|#45ds)OHtOq5 bq'Mab'C q#c(Q,/ Ars8t}}4Q
 6!9!9#qbc(!C19cr(NJ477<<..C? H IW FS"DEEDJ &HIIs;   -E'E BE'$;E' E >E'EE'E$$E'c              #   z  K   d}|r| j                         \  }}||| j                         f | j                  j                  dd      }|dk(  rD| j                  | j                  j
                  k(  rd}n| j                  j                  dd      }d}|dk7  rd}t        d|j                  |            |ryyw)	zu
        yields [fieldname, unsanitized_filename, fieldvalue]
        where fieldvalue yields chunks of data
        Tr  F   --   
z8protocol error after field value: want b'\r\n', got {!r}r   N)rN  rT  r5  r  r7  r  rI  r   )r.   r  	fieldnamefilenametailr   s         r!   _run_genzMultipartParser._run_genw  s      "&"3"3"5Ixh(9::77??1e,Du}99

*"D77??1e4DwPS!((4.11! s   B6B;9B;c                 V    d}|D ]!  }||z  }t        |      |kD  st        dd       |S )Nr#   r   zfield length is too long)r  rI  )r.   iterablemax_lenrF   rh  s        r!   _read_valuezMultipartParser._read_value  s@     	>C3JC3x'!S"<==	>
 
r#   c                    t        | j                        }|j                  d      r|j                  d      r|dd }| j	                  d|       d|j                  d      z   | _        | j                         D ]6  }|s|j                  dd      }| j	                  dt        |      |fz         8 d	| j                  z   | _        | j                         | _        y )
NrE  r   r$  z	boundary=rV  r   r  zdiscarding preamble |%d| %rrW  )get_boundaryr6  r:  r  rf  rs  r@  rT  rw   r  r[  rA  )r.   r@  junkjtxts       r!   parsezMultipartParser.parse  s    -s#(9(9#(>"~H(,-  88 OO% 	HD;;w	2DHH2c$i5FFG	H  $--/==?r#   c                     t        | j                        \  }}}||k7  rt        ||||      | j                  ||      j	                  dd      S )z
        returns the value of the next field in the multipart body,
        raises if the field name is not as expected
        r   r:   )r  rA  WrongPostKeyr_  rw   )r.   
field_namer^  p_fieldp_fnamep_datas         r!   requirezMultipartParser.require  sR    
 $(> &j z7GVDD077ARSSr#   c                 <    | j                   D ]  \  }}}|D ]  }  y)z%discards the remaining multipart bodyN)rA  )r.   r  datas      r!   dropzMultipartParser.drop  s-    (( 	JAq$ 	r#   N)r7   r8   r9   rs  rN  rT  r[  r_  rd  rk  rn  r   r#   r!   r3  r3    s0    O:LW\.`24#,	Tr#   r3  c                     d}| d   }t        j                  ||t         j                        }|st        dd|      |j	                  d      S )Nz1^multipart/form-data *; *(.*; *)?boundary=([^;]+)zcontent-typer   z+invalid content-type for a multipart post: r  )r)  r  
IGNORECASErI  r+  )r6  ptnr  r   s       r!   ra  ra    sJ     ?C		 B
b"--(ASRQRR771:r#   c           	         t        j                          }d}	 t        j                          |z
  |k\  rg S 	 || j                  d|dz        z  }|j	                  d	      }|d
k  rt        |      dkD  rt        dd      gt        |      |dz   kD  r| j                  ||dz   d         |d | j                  dd      j                  d      j                  d      S #  |sg cY S t        dd|j                  dd            xY w)Nr#   r   r  r   z$protocol error while reading headersr   r  )rf  s   

r      zheader 2big   r:   z
)	r  r  rI  rw   r%  r  r  r  r@   )r5  t_idlet_tott0rF   r/  s         r!   rG  rG    s   	B
C
99;u$I
	27741--C hh{#73x)#S-00s8cAgIIc#')n%4Cy):;BB6JPPQWXX)		6JJw	2 s   C C?!C?c           
         d}	 d|j                  dd      d   z   }t        d      D ]  }t        d      D ]  }|r ||z   }dd|z  z   dz  }t        t        j                  |            }	|	d | j                  d      |z   }t        j                  j                  t        t        j                  j                  | |                   }  |S #  d}Y xY w)	NFr  r   r  r  r  r   rM   )
r  rC  rS  rj  rk  rw   r  existsr   r!  )
r  r  rndr  r   extrar  ncr  rq  s
             r!   	rand_namer}    s    	BBIIc1%a(( r 	Cr 	CAuBa"f*"BB(BCR(3.BWW^^E"'',,tR*@$ABBB	C	C Is   C Cc                     | dk(  r|d|d|d|}n|d|}|j                  dd      }t        t        j                  |      j	                               j                  d      S )Nr   r   r   r  rM   )rs  rS  rY  rZ  r]  rw   )algsaltfspathfsizeinoder   rq  s          r!   _gen_filekeyr    sY    
ax"FE59f%	7I	&B7>>"%,,./66w??r#   c                 @    t        | ||j                  dd      ||      S )Nr  rF  )r  r  )r  r  r  r  r  s        r!   _gen_filekey_wr    s     T6>>#t#<eUKKr#   c           	      D   t        | ||||      }|j                  |      r^	 dd ldj                  fdt	        dd      D              }d}		 t        |      }	|	|k7  r
t               	 d
}
 ||
|d d |||||fz  d       |S #  d}Y =xY w#  d}
 ||
||	fz  d	       Y 6xY w)Nr   r  c              3   X   K   | ]!  }j                         |   j                   # y wr   )r  function)r
  r'  inspects     r!   r  z"gen_filekey_dbg.<locals>.<genexpr>#  s"     L17==?1-66Ls   '*r  r   r  r   z2maybe wrong abspath for filekey;
orig: %r
real: %rr   z4fk(%s) salt(%s) size(%d) inode(%d) fspath(%r) at(%s)r   )gen_filekeyr*  r  r!  rC  absrealrV  )r  r  r  r  r  rf  log_ptnrF   ctxp2r   r  s              @r!   gen_filekey_dbgr    s     c4
6C~~f	((LaLLC 	%BV|k!  CARa$ufc::A>J	C	%FAVRL !$s   (B B BBzMon Tue Wed Thu Fri Sat Sunz/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Decz#%s, %02d %s %04d %02d:%02d:%02d GMTc           	          t        j                  |       \	  }}}}}}}}}t        t        |   |t        |dz
     ||||fz  S Nr   )r  gmtimeRFC2822WKDAYSMONTHS)	r	  ymorS  hmir  wdr  s	            r!   
formatdater  ;  sH    #';;r? Ar1aQAqfRj!VBF^Q2qAAAr#   c                     |j                  dd      j                  dd      }|r!t        t        j                         |z         }nd}d}|| ||||rdnd||rd	fz  S d
fz  S )Nr  z%25;z%3BzFri, 15 Aug 1997 01:00:00 GMTz,%s=%s; Path=/%s; Expires=%s%s%s; SameSite=%sz; Securer  LaxStrict)r  r  r  )	r   rG   rw  laxtlsdurr  expr   s	            r!   	gencookier  A  s     	
		#u%%c51A
s*+-6A			
r   #  r#   c                    t         }t        }| j                  dd      j                  dd      } | j                  dd      }t        sL|D cg c]@  }||v rt        |      j                  d      ndj                  |      j                  d      B }}n6|D cg c]+  }||v rt        |      ndj                  t        |            - }}dj                  |      j                  d      }d	j                  | D cg c]
  }||v r|nd c}      j                  d
      }d|v r|j                  dd
      }d|v rd|d|S c c}w c c}w c c}w )Nr  r  rF  r   xmlcharrefreplacez%{:02X}rM   r#   r  r  ..zattachment; filename="z"; filename*=UTF-8'')UC_CDISP_SETBC_CDISP_SETr  rs  r   chrr   r   r   r!  rw   r  )r  safebsaferq  r  zblufnafns           r!   gen_content_dispositionr  V  sN   DE	C		%	%dC	0B	7/	0B
 	
  Ez FMM'"!!!$++G45
 
 PRR!Q%ZwqzY-=-=c!f-EERR
((3-

w
'C
''B7qT	1s*7
8
?
?
DC
#+kk$$ #+ BEcJJ
 S 8s   AE 0E8E
c                     t         D ]  }| dk  r n| dz  }  |r$t        |       d d j                  d      d d S t        |       d d j                  d      dS )Nr   g      @rt  r  r   r   )HUMANSIZE_UNITSr$  rstrip)r9  terseunits      r!   	humansizer  m  so     9
f	 R!++C0$r(;;b'"1+,,S1488r#   c                     	 t        |       S #  Y nxY w| dd  j                         }t        j                  |d      }t        t	        | d d       |z        S )Nr$  r   )r  rH  UNHUMANIZE_UNITSr  r  )r9  mcr  s      r!   
unhumanizer  z  sW    2w	BCB			b!	$BuRW~"##s   
 c                    |t        j                          }| ||z
  xs dz  }t        |       j                  dd      j                  dd      }t        |      j                  dd      j                  dd      }|d|dS )	NMbP?r   r  iBr  z[35mz [0mz/s[0m)r  r  r  )nbyterw  r   bpsr   r   s         r!   get_spdr    sw    yIIK
AF$u
%C	5		!	!#z	2	:	:4	DB	3		Z	0	8	8r	BB&("--r#   c                 z    t        |       } t        | d      \  }} t        | d      \  }} |s	|rd|| fz  S d||| fz  S )N  r  z%d:%02dz%d:%02d:%02d)r  divmod)r  
optional_hr  r   s       r!   s2hmsr    sN    AA!T?DAq!R=DAqAq6!!Q1I%%r#   c                  f    t        j                  j                  | D cg c]  }|s|	 c} S c c}w )z3joins without adding a trailing slash on blank args)rj  r  r!  )pathsr  s     r!   djoinr    s%    77<<U0a!0110s   ..c                     t        |       dk  s| j                  d      s| S t        |       dkD  r
| d   dk7  r| S | d   d| dd  S )Nr  r  r   z:\r;   )r  r:  )r  s    r!   uncygr    sL    
4y1}DOOC0
4y1}aCQab**r#   c                     g }| j                  d      D ]3  }|dk(  s|s|dk(  r|r|j                          #|j                  |       5 dj                  |      S )Nr  r  r  )r@   r  rA   r!  )r  rF   nodes      r!   undotr    s\    C

3 	3;d4<	

4	 88C=r#   c                     | j                  dd      j                  d      d   } t        rt        | t              } | j	                         S )NrF  r  r$  )r  r@   APTL_OSsanitize_tor   )r  s    r!   sanitize_fnr    s=    	D#		$	$S	)"	-BW%88:r#   c                     | j                  |      } t        rXg d}t        dd      D ]  }|d|d|j                  d      z  } | j	                         j                  d      d   |v rd	| z   } | S )
N)conprnauxnulr   
   comz lptr   r  r   r  )rP  r   rC  r@   rH  )r  tlbadr'  s       r!   r  r    su    	b	B*q" 	7AQ*11#66C	7 88:C #s*rBIr#   c                     t         s| S | j                  t        j                  d      j	                  d      }|D cg c]  }t        |t                }}dj                  |      S c c}w Nr  )r  r  rj  r  r@   r  r!  )vpr  r  rF   s       r!   sanitize_vpathr    sV    	JJrvvs#))#.E,1
2q;q'"
2C
288C= 3s   A&c                     d| v ryt         r6d| v sd| v ryt        j                  dd|       }|| k7  rdj                  |      S y)	N z[nul]r   r  zx
xz[\\:*?"<>|]r  z[{}])r   r)  r$  r   )rpr   s     r!   relchkr    sJ    |2:FF>2r*7==##r#   c           	      4   	 t        t        j                  j                  t        j                  j	                  t        |                         S #  t        s t        j                  j                  t        j                  j	                  |             cY S xY wr   )fsdecrj  r  abspathr  afsencr   )r  s    r!   r  r    sc    	8RWW__RWW%5%5fUm%DEFF8
 wwrww//677s   AA ABc                     	 | j                  dd      j                  dd      S #  | j                  dd      j                  dd      cY S xY w)Nr   r  r  )rs  rw   r  s    r!   u8safer    sM    Izz'#67>>w	RRIzz'9-44WiHHs	   !$ $A
c                 t    | D cg c](  }|j                  d      d   j                  d      r'|* c}S c c}w )Nr  r$  r  r@   r:  )	filepathsr  s     r!   exclude_dotfilesr    s0     I!R(8(C(CC(HAIIIs   (55c                 z    | D cg c]+  }|d   j                  d      d   j                  d      r*|- c}S c c}w )Nr   r  r$  r  r  )vfs_lsr  s     r!   exclude_dotfiles_lsr    s6     I!QqTZZ_R%8%C%CC%HAIIIs   +88c                 r   |j                  d      D cg c]  }|s|	 }}|dd  j                  d      D cg c]  }|s|	 }}| j                         }|j                  d      r|D ]  }d||<   	 |S |d d dv r|D ]  }|j                  |d         |S t	        j
                  |d      }|S c c}w c c}w )Nr  r   +T)r  r  )r@   copyr:  r  ODictfromkeys)baseothr  words0words1rF   r   s          r!   odfusionr   	  s     3-A1a-F-QRs+1Aqa1F1
))+C
~~c 	ACF	 J 
RaJ	 	AGGAt	
 J nnVT*J .1s   B/B/B4 B4c                 >    d| v rt        |       j                  d d S | S )Nr   r  )r   r  )rp   s    r!   ipnormr  	  s%    
by2''--Ir#   c                 l    g }| D ]+  t        fd|D        d       }|s|j                  |       - |S )Nc              3   V   K   | ]   }|j                  d z         s|k(  s| " yw)r  N)r:  )r
  r  rp   s     r!   r  zfind_prefix.<locals>.<genexpr>	  s&     J!R#X(>"'AJs   )))r  rA   )r  r  rF   hitrp   s       @r!   r  r  	  s>    
C JuJDQJJsO Jr#   c                     t        j                  t        d|       j                  dd      } | j                  dd      j                  dd      } | S )Nr  r   z%20r  r   )r)  r$  
RE_HTML_SHr  r  s    r!   html_sh_escr  %	  sC    
z3"**36A			$$$T3/AHr#   c                 f    | j                  dd      j                  dd      j                  dd      S )Nr  z\u003c>z\u003e&z\u0026r  r  s    r!   	json_hescr	  +	  s-    99S)$,,S)<DDS)TTr#   c                     | j                  dd      j                  dd      j                  dd      } |r"| j                  dd      j                  d	d
      } |r"| j                  dd      j                  dd      } | S )zhtml.escape but also newlinesr  z&amp;r  z&lt;r  z&gt;rE  z&quot;'z&#x27;r  z&#13;r   z&#10;r  r  quotcrlfs      r!   html_escaper  /	  sq    			#w''V4<<S&IAIIc8$,,S(;IIdG$,,T7;Hr#   c                     | j                  dd      j                  dd      j                  dd      } |r"| j                  dd      j                  d	d
      } |r"| j                  dd      j                  dd      } | S )zhtml.escape but bytestrings   &s   &amp;   <s   &lt;   >s   &gt;   "s   &quot;   's   &#x27;   s   &#13;   
s   &#10;r  r  s      r!   html_bescaper  :	  sq    			$!))$8@@wOAIIdI&..tY?IIeX&..uh?Hr#   c                 n    | syt        |       }t        |d      }t        |j                  dd            S )+url quoter which deals with bytes correctlyr     /r         +)w8encquotew8decr  r  btxtr  s      r!   _quotep2r$  E	  s3    :DD!DdD)**r#   c                     | syt        |       }t        |d      j                  d      }t        |j	                  dd            S )r  r  r  r  r   r  r  )r  r   rs  r!  r  r"  s      r!   _quotep3r&  N	  s>    :DD!((1DdD)**r#   sC   ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.-~/   z%%%02Xr  r  c                     | syt        |       }|j                  t              r(t        }dj	                  |D cg c]  }||   	 c}      }t        |      S c c}w )r  r  r#   )r  r  _uqsb_uqtlr!  r!  )r  r#  lutrM  s       r!   	_quotep3br,  _	  sN    Sz;;uC88t4SW45DT{ 5s   A0123456789ABCDEFabcdefc                 F   t         }t        | j                  d            }t        |      g}|D ]`  }|j	                  |d d       }|#|j                  d       |j                  |       <|j                  |       |j                  |dd         b dj                  |      S )N   %r  r#   )_hex2biterr@   r  r  rA   r!  )r#  h2br  rF   itemr  s         r!   unquoter4  n	  s    TZZ%&E{m 	%DRa!Ay

4 

4 

1

48$	% xx}r#   )quote_from_bytes)r   )r4  c                 D    t        |       }t        |      }t        |      S )z-url unquoter which deals with bytes correctly)r  r4  r!  )r  r#  unq2s      r!   unquotepr8  	  s    :D4=D;r#   c                     | rQ|rOd| v r| j                  dd      nd| f}d|v r|j                  dd      nd|f}|d   |d   k7  rn|d   } |d   }| r|rO| rd| dnd|rd|dfS dfS )z@
    input("q/w/e/r","a/s/d/e/r") output("/q/w/","/a/s/d/")
    r  r   r  r   r  )vp1vp2zt1zt2s       r!   vrootsr?  	  s     #$'3Jcjja RI$'3Jcjja RIq6SV!f!f # #C# $' r#   c                 6    d| vrd| fS | j                  dd      S )Nr  r  r   r:  r  s    r!   vsplitrB  	  s%    
%5y<<Qr#   c                 &    | r
|r| dz   |z   S | xs |S r  r   rdr  s     r!   vjoinrF  	  s    	bCx"}xRr#   c                 b    | r(|r&| j                  d      dz   |j                  d      z   S | xs |S r  )r  r  rD  s     r!   ujoinrH  	  s0    	byy~#biin44xRr#   c                     | sy| j                         } | j                  d      }| j                  d      }|s|sd| fS d| dd  fS |sd| d d fS d| dd fS )	Nr   r  ^$r   r  r;   r$  rt  )rH  r:  r  )r  r   r   s      r!   
str_anchorrM  	  sq    
))+CsASAc6M#ab'z#cr({c!Bi<r#   c                 t    |\  }}	}
\  }}d} | |||||
||	|
||
|j                   |j                   ||fz         y )Nzreloc %s:
old ap %r
new ap %r[36m/%r[0m
old vp %r
new vp %r[36m/%r[0m
old fn %r
new fn %r
old vfs %r
new vfs %r
old rem %r
new rem %rrA  )rf  r)  pmrg  r  r  vnremnapnvpnfnnvnnremr   s                 r!   	log_relocrW  	  sO     "$Cc;C 	jARS#r3Rbhh		3PTUUVr#   c                    d}t         j                  j                  |      }t        |      \  }}|j	                  d      r|d   }|}|df|dffD ]>  \  }}||vr||   j                  t         j                  d      }|j                  d      r|}	nX|dk(  rt        t        ||            }	n=t         j                  j                  t         j                  j                  ||            }	|dk(  r|	j                  d      }|	j                  dt         j                        }	| j                  D ]^  \  }
}|	j                  |
      s|	t        |
      d  j                  t         j                  d      }t        |d   j                  |      } > A |dk(  ry | j	                  |ddd      \  }}|j                   st#        d	      |j%                  |      }|||||ffS )
Nr   r  rg  r  r  r   *Fzunmapped vfs)rj  r  dirnamerB  r  r  r  r:  r  rF  r  r!  r  all_apsr  r  r  rV  	canonical)vfsrg  r  modrS  r  refr   msr  vn_apvnsr   rP  rQ  s                  r!   pathmodrc  	  s    C		BBZFB
wwt}Y:Dz* QC<V^^BFFC(==B$YuS"~&Bc2!67B9))C.C ZZRVV$++ 	JE3=='CJL!))"&&#6BAb)C	%2 d{ggc3u-GB;;''	c	BsBS	!!r#   c                 ,    t        j                  |       S ) decodes filesystem-bytes to wtf8)r:   decodefilenamer  s    r!   _w8dec2rg  
      ))#..r#   c                 ,    t        j                  |       S ) encodes wtf8 to filesystem-bytes)r:   encodefilenamer  s    r!   _w8enc2rl  	
  rh  r#   c                 .    | j                  t        d      S )re  r:   )rw   FS_ENCODINGr  s    r!   _w8dec3ro  
      ::k#455r#   c                 .    | j                  t        d      S )rj  r:   )rs  rn  r  s    r!   _w8enc3rr  
  rp  r#   c                 ^    | j                  t        d      }|j                  d      r|dd  S |S )Nr:   \\?\rt  )rw   rn  r:  r  rF   s     r!   _msdecrv  
  s/    
**["3
4CnnY/3qr78S8r#   c                 N    | j                  dd      j                  t        d      S )Nr  rF  r:   )r  rs  rn  r  s    r!   _msaencrx  
  s!    ;;sD!((6GHHr#   c                     | j                  dd      } d| vr| j                  d      st        |       } | j                  d      r| S d| z   S )Nr  rF  r   \\rt  )r  r:  r  r  s    r!   _uncifyr{  !
  sG    
++c4
 C
#~cnnV4cl..(3=i#o=r#   c                     | j                  dd      } d| vr| j                  d      st        |       } | j                  t        d      }|j                  d      r|S d|z   S )Nr  rF  r   rz  r:   r  s   \\?\)r  r:  r  rs  rn  ru  s     r!   _msencr}  )
  sY    
++c4
 C
#~cnnV4cl
**["3
4C..)3?zC/??r#   c                 H    t        t        | j                  d                  S )z(decodes base64(filesystem-bytes) to wtf8rM   )r!  rX  rs  r  s    r!   w8b64decr  6
  s    G,-..r#   c                 H    t        t        |             j                  d      S )z(encodes wtf8 to base64(filesystem-bytes)rM   )rS  r  rw   r  s    r!   w8b64encr  ;
  s    5:%%g..r#   c                     | S r   r   r  s    r!   _not_actually_mbcs_encr  M
      
r#   c                     | S r   r   r  s    r!   _not_actually_mbcs_decr  P
  r  r#   c                     g }||fD ]'  }	 | j                  d|f       |j                  |       ) |d   |d   fS #  |j                  dt        |      z          Y UxY w)Nzselect * from a where b = ?//r   r   )r?  rA   r  )mem_currE  r  rF   rG   s        r!   s3encr  X
  sk    C"X +	+OO9A4@JJqM+ q63q6>		+JJthqk)*s	   $;Ac                     | j                  d      rt        | dd        n| |j                  d      rt        |dd        fS |fS )Nr  r  )r:  r  rD  s     r!   s3decr  e
  sM    MM$/ABRMM$/AB 57 r#   c                 H    t        |      dk7  ryt        t        d| |f       y)Nzdatabase is lockedFdbexT)r$  rn  lsof)rf  ri  db_paths      r!   	db_ex_chkr  l
  s%    
2w&&
4#w(r#   c                     	 t        ddt        |      gd      \  }}}|j                         dz   |j                         z   j                         } | d|d|d|d       y #   | d	t               z   d       Y y xY w)
Ns   lsofs   -R-   r  r   zlsof z = r;   zlsof failed; )runcmdr   r   r  )rf  r  rcsoser   s         r!   r  r  t
  sq    +WeU7^<bI
Bhhj4"((*,335'2r2A6+Ofh&*s   A!A$ $A<c                     | j                         }d|v rt        j                  ||d          d|v rt        j                  ||d   |d          y y Nchmod_fchownuidgid)filenorj  fchmodfchown)r  r  fnos      r!   r!  r!  }
  sJ    
((*CB
		#r)}%"}
		#r%y"U), r#   c                     t        |       }d|v rt        j                  ||d          d|v rt        j                  ||d   |d          y y r  )r   rj  chmodr  )rg  r  rq  s      r!   set_ap_permsr  
  sH    	rBB
R	]#"}
RY5	* r#   c           	          	 t        j                  ||      S #  t        j                         \  }}}t	        j
                  |      D ]-  \  }}}}|dk(  s| rd} | |||t               fz  d       |c cY S   xY w)Ncopystatzkwarning: failed to retain some file attributes (timestamp and/or permissions) during copy from %r to %r:
%sr;   )shutilcopy2r"  r  r  r  r  )rf  srcr6   r  r  rt  r   s          r!   trystat_shutil_copy2r  
  s    ||C%%
 <<>1b%004 	LAq#qj  GAS#vx00!4
	 	s    <A8A86A8c           	         t        |      }t        |      }|rd}d}t        j                  }	||g}
n2|rd}d}t        j                  }	||g}
nd}d}t        j                  }	|g}
|j                  |dz   d      }|j                  |dz   d      }|d	k  rd
}d}t        j                         x}}t        d      D ]  }	 |r4t        j                  |      j                  |k7  rd} | |||fz  d        y|r3|s1t        j                  j                  |      rd} | |||fz  d        y |	|
  |r+t        j                         }d} | ||||z
  |dz   |fz          y y# t        $ r}t        j                         }|j                  t        j                  k(  rY d }~ y|sM|j                  t        j                  k(  r0d} | ||j                   ||fz         t"        j$                  }	Y d }~4||z
  |kD  s|dk(  r |sCt&        st        j                  |      j                  }d} | |||j                  |dz   |fz         Y d }~nd }~ww xY wt        j(                  |       )Nmv_re_zatomic-renamerenamerm_re_deleter   r  rw  r  r   r   ib` z!src inode changed; aborting %s %rr   Fz4something appeared at dst; aborting rename %r ==> %rz%sd in %.2f sec, attempt %d: %rTz using copy+delete (%s)
  %s
  %sia` z+%s failed (err.%d); retrying for %d sec: %rgGz?)r   rj  r  r  unlinkr  r  rC  statst_inor  ry  r  rC   ENOENTEXDEVstrerrorr  mover   r.  )rf  r  r6   atomicflagsbsrcbdstr   actosfunr%  maxtimechillinorw  r  attemptr   ri  s                      r!   _fs_mvrmr  
  s<    :D:D

d|			d|		viiC%GIIa#gs#Eu}
Cyy{B< !	>rwwt}++s27Ac
NA&Ft(<JAc
NA&4Liik5AcBh!S99:!F '  	>))+Cxx5<<'rxx5;;68Ac3//0Rx'!W%5''$-..CAAbhh$<<=	>" 	

5s2   <4E23E'2E	I	&1IA	I,AII	c                 ,   t        |      }t        |      }t        r>t        j                  j	                  |      rt        | |dd|       t        | ||d|       y |j                  d      rt        | ||d|       y 	 t        j                  ||       y # t        $ rv}|j                  t        j                  k7  r d} | ||j                  ||fz         	 t        j                  |       n#  Y nxY wt        j                  ||       Y d }~y d }~ww xY w)Nr  Fr   Tz!using copy+delete (%s);
  %s
  %s)r   r   rj  r  ry  r  r  r  r  rC   r  r  r  r  r  )rf  r  r6   r  r  r  ri  r   s           r!   atomic_mover  
  s    :D:D
77>>$S#r5%0c3u-	9	c3e,	$JJtT" 		$xx5;;&5AR[[#s++,		$KKd##		$s0   =B 	D8DC,+D,C0.DDc                     |j                  d      st        j                  t        |             yt	        | |dd|      S )Nr   Tr  F)r  rj  r  r   r  )rf  r  r  s      r!   wunlinkr  
  s4    99Y
		%.!C"eU33r#   c                 l   	 t        |       }|rjt        j                  j                  |      sKt        |v rC|j                  t        d      d   }|r(t        j                  j                  |      s	t        |v rCt        rt        |      } t        j                  d      }t        j                  d      }t        j                  d      }t        j                  t        j                  |       t        j                  |      t        j                  |      t        j                  |             |j                  |j                  dfS t        j                  |      }|j                   |j"                  z  }|j                   |j$                  z  }||dfS # t&        $ r}	ddt)        |	      fcY d }	~	S d }	~	ww xY w)Nr   r   r  )r   rj  r  isdirBOS_SEPr  r   r  ctypesc_ulonglongwk32GetDiskFreeSpaceExW	c_wchar_ppointervaluestatvfsf_frsizef_bavailf_blocksrV  r  )
r  prunerg  bfreebtotalbavailsvfreetotalri  s
             r!   get_dfr    sK    7^BGGMM"-'R-7A&q)B BGGMM"-'R- BiG&&q)E''*F''*F$$  )v&v&u%	 LL&,,33BB;;,DKK"++-E%$$  1d2h s,   A6F 9CF AF 	F3F.(F3.F3c                     	 t        j                  | j                         t        j                  d      }t        d|      d   S #  Y yxY w)N   AAAA   Ir   r   )fcntlioctlr  termiosTIOCOUTQr}   )sckrq  s     r!   siocoutqr     sA    	SZZ\7+;+;WEB4$Q''	s   AA Ac                      yr  r   )r  s    r!   r  r  ,  s    r#   c                    t        j                          }|j                         }|dk(  r|j                          y 	 |j                  |       |j	                  t
        j                         	 t        j                          |z
  |k  r9t        |      sn-|j                  d      snt        j                          |z
  |k  r9|j	                  t
        j                         t        j                          |z
  }|dk\  r | dj                  ||      d       |j                          y #  Y JxY w# t        $ r"} | d||j                  fz  d       Y d }~sd }~wt        $ r#} | dj                  ||      d       Y d }~d }~ww xY w# t        j                          |z
  }|dk\  r | dj                  ||      d       |j                          w xY w)Nr$  rs  z1shut(%d): ok; client has already disconnected; %s90zshut({}): {}r   zshut({}) in {:.3f} sec)r  r  rA  
settimeoutshutdownrj   SHUT_WRr  r  	SHUT_RDWRr  rC   rV  r   )rf  r  r  rw  fdri  tds          r!   shut_socketr  0  sv   	B	B	Rx		wV^^$	))+"W,} xx	* ))+"W, LL))* YY[27(//B7>			 X?2rxx.PRVWW 1N!!"b)4001 YY[27(//B7>		sU   0D, -AD%  D% %D)'D, ,	F5EF FE<7F <FF AGc              #      K   |}|dkD  r2||kD  r|}	 | j                  |      }|t	        |      z  }| |dkD  r1y y # t        $ r" d}t        d|j                  ||z
  |            w xY ww)Nr   z@client d/c during binary post after {} bytes, {} bytes remainingr   )r  r  rI  r   r  )r5  rR  
total_sizeremainsrh  r   s         r!   read_socketr  S  s      G
A+7?E	G''%.C
 	3s8	 A+  	GRAahhzG';WEFF	Gs   A+= A+A++A((A+c              #   D   K   	 	 | j                  |       #  Y y xY wwr   )r  )r5  rR  s     r!   read_socket_unboundedr  e  s*     ''%.  s      c              #   $  K   d}	 d}d|vr3	 || j                  d      z  }t        |      dkD  r
t               	 d|vr3|j                  d	      s| j                  d
       	 t        |j                  d      d      }|dk(  r<| j                  dd      }|dk(  rd| _
        y d}t        d|j                  |            |r |d|fz         t        | ||      D ]  }|  | j                  dd      }|dk7  rd}t        d|j                  |            #  |j                  |j	                  dd      t        |            }t        d|      xY w#  |j                  |j	                  dd      t        |            }t        d|      xY ww)Nz<upload aborted: expected chunk length, got [{}] |{}| insteadr#   r  r  r  r   r  r   r  r   rW  r   Fz8protocol error after final chunk: want b'\r\n', got {!r}zreceiving %d byte chunkz9protocol error in chunk separator: want b'\r\n', got {!r})r  r  rV  r   rw   rI  r  r  r  r  r  r  )	r5  rR  rf  errrh  chunklenr  r   chunks	            r!   read_socket_chunkedr  m  s     IC
3'rwwqz!s8b=#+% ! 3 ||E"GGAJ	#3::g.3H
 q=

1e$AG|LAahhqk**)XK78 UH5 	EK	 JJq% <MAahhqk**M 'jjGY!?SJS#&&	#**SZZ;SXFCc""s9   
F,D F"F"E =BF9EF9FFc                     t               } t               D ]e  }|j                  D ]T  }t        |j                        dk  r| j                  |j                  d          :| j                  |j                         V g t        |       S )Nr<   r   )r  rU   r  r  rp   r  r  )rF   nicipos      r!   list_ipsr    sk    5C~  77 	 C366{Qq	"		   9r#   c                    | j                         j                         } | dv ry | j                  d      D cg c]#  }|j                         s|j                         % }}d}dD ]#  }||v s|s	|g dz  }d}|j                  |       % t        s|D cg c]	  }d|vs| }}g }|D ]  }|j                  d      s|j                  |       &t        |j                  d      j                  d            }|d	k(  r|d
z  }n%|dk(  r|dz  }n|dk(  r|dz  }nt        d|d      |j                  |        |D cg c]  }|j                  d      d    }	}t        |	|dd|      S c c}w c c}w c c}w )N)anyallnor  r  r  F)lanlocalprivateprvt)z
10.0.0.0/8z172.16.0.0/12z192.168.0.0/16zfd00::/8z169.254.0.0/16z	fe80::/10z127.0.0.0/8z::1/128Tr   r  r   z0.0.0/8r  z0.0/16r;   z0/24zinvalid config value []r  r   )rH  r   r@   remove	HAVE_IPV6r  rA   r  r  rV  r  )
csvr  r  srcsexpanded_shorthands	shorthandr  r   wordsr  s
             r!   build_netmapr    s   
))+


C
++"yy~;!AGGI;D;8 #	&   '+#KK	"%#( 0a3a<00E {{3LL BIIcN((-.A:)OBaZ(NBaZ&LB2?@@R!$ %*
*q1773<?
*C
*#udE;77] <0 1* +s   E+E+	E0E0?E5c                    ddi}i }|D ][  }	 |j                  d      \  }}|j                  d      \  }}	|j                  |      }|d}
t        |
|||fz        |||<   |||<   ] 	 t        dgt	        |j                               dd|      }||fS #  d}
t        |
|fz        xY w# t        $ r}d	}
 | d
|
|fz  d        d }~ww xY w)Nr  rY  r   r  zR
  invalid value %r for argument --ipu; must be CIDR=UNAME (192.168.0.0/16=amelia)zD
  invalid value %r for argument --ipu; cidr %s already mapped to %rr  TzIfailed to translate --ipu into netmap, probably due to invalid config: %rrootr   )r@   rV  r  r  r  keys)rf  ipusr  ip_ucidr_uipucidrunamecipr:  r   uname2nmri  s                 r!   load_ipur    s    9DF 	())C.KD%zz#HC D!WAAdF 3344tS	TFD/t[I
 8O	(eAAJ''  WFAIq!s#   (B('B) B&)	C2CCc                     i }|D ]>  }	 |j                  d      \  }}|j                  d      }	 t        dg|dd|      }	|	||<   @ |S #  d}t        ||fz        xY w# t        $ r}
d} | d||
fz  d        d }
~
ww xY w)	Nr   r  z_
  invalid value %r for argument --ipr; must be CIDR[,CIDR[,...]]=UNAME (192.168.0.0/16=amelia)r  TzIfailed to translate --ipr into netmap, probably due to invalid config: %rr  r   )r@   rV  r  )rf  iprsr  rF   iprr   r  r  r   r  ri  s              r!   load_iprr     s     C 	(		#IBHHSME	tT;?B
 E
 J	(rAAJ''  	[ARE	1%	s"   %AAA	A='A88A=c              #      K   t        |d      }t        t        |       d|      5 }	 |j                  |      }|sn| 	 d d d        y # 1 sw Y   y xY ww)Ni   r  )r   r  r   r  )r  rR  r=  r  rh  s        r!   	yieldfiler"    s]     
#F	eBiu	% &&.CI  	  s   #AA
	A
AAc                     d}| D ]A  }|t        |      z  }|r||kD  r|j                  |       |s-t        j                  |       C |ddfS )Nr   zchecksum-disabled)r  rl  r  r.  )finfoutra  max_szslptlenrh  s          r!   justcopyr)    s\     D CdVm

3JJsO $&999r#   c              #      K   |j                         dk(  }| D ],  }|j                  dd      }|r|j                  dd      }| . y w)Nr  r  r#   r  rW  )rH  r  )r$  convr  rh  s       r!   eol_convr,  ,  sO      ::<6!D kk%%++eW-C		s   AAc                 \   |st        j                         }d}| D ]R  }|t        |      z  }|r||kD  r|j                  |       |j	                  |       |s>t        j                  |       T t        |j                         d d       j                  d      }||j                         |fS )Nr   rX  rM   )rY  rZ  r  r\  rl  r  r.  rS  r]  rw   	hexdigest)r$  r%  ra  r&  r'  r(  rh  
digest_b64s           r!   hashcopyr0  7  s     .."D CdVms

3JJsO )#2./66w?J""$j00r#   c
                 Z   d}
||z
  }|j                  |       |dkD  r|rt        j                  |       |j                  t	        ||            }|s|S 	 |j                  |       |t        |      z  }|	r'|
t        |      z  }
t        j                         |
f||	<   |dkD  ry#  |cY S xY wr  )r[  r  r.  r  r   sendallr  )rf  rH  upperr  r  rR  r'  use_polldlsdl_idsentr  rh  s                r!   sendfile_pyr8  P  s     DemGFF5M
A+JJsOffS()N	IIcNs3xG CHD))+t,CJ! A+$ 	Ns   B$ $B*c
                 b   |j                         }
|j                         }|}d}|r4t        j                         }|j                  |
t        j                         ||k  r|xs t        j
                         }	 t        d||z
        }|rj                  d       nt        j                  g |
gg d       t        j                  |
|||      }d}|dk  r||z
  S ||z  }|	rt        j
                         ||z
  f||	<   ||k  ry# t        $ r`}t        j
                         |z
  }|dk  r8|j                  t        j                  k(  rt        j                  d       Y d }~d}Y d }~d }~wt        $ r;}d}t        j
                         |z
  } | dj                  ||             Y d }~d }~ww xY w)	Nr  i   i'  r  r   r  g{Gz?z&sendfile failed after {:.3f} sec: {!r})r  selectpollregisterPOLLOUTr  r   rj  sendfiler  rC   EWOULDBLOCKr.  rV  r   )rf  rH  r3  r  r  rR  r'  r4  r5  r6  out_fdin_fdr/  stuckr;  reqr'  ri  rS  s                      r!   sendfile_kernrD  t  sz    XXZFHHJE
CE{{}ffnn-
+$	Hi-C		% b6(B3FE34AE 63;q))+sU{3CJ9 +@ -  			e#A4xBHH(9(99

4 A 	HA		e#A8??2FGG	Hs,   9AD 	F.AE' E''F.31F))F.c              #     K   |rt         rd}|r(t        s t        j                  t        j                  vrd}d}	 t        |      }|rdt        t        d      rTd}t        j                  |      5 }|D ]-  }	 t        |j                        |j                  |       f / 	 d d d        y d}|rt        j                  nt        j                  }
t        j                  j                  |d      }t        j                   |      D ]  }||z   }	 t        |       |
|      f  y # t        $ rG}	| sY d }	~	 | |dj                  t        |	      t        |j                              d       Y d }	~	d }	~	ww xY w# 1 sw Y   y xY w# t        $ r=}	| sY d }	~	 | |dj                  t        |	      t        |            d       Y d }	~	d }	~	ww xY w# t        $ rz}	|r6t#        |	d	d
      }|t$        j&                  k(  rt)        dt+        |	             dj                  t        |	      |      }| r | ||d       nt-        |       Y d }	~	y Y d }	~	y d }	~	ww xY ww)NFstatdirscandir)follow_symlinksz[s] {} @ {}r  listdirr#   rC   r   r   z{} @ {}r   )r   r   rj  r  supports_follow_symlinksr   r  rG  r  r   rV  r   r  r  lstatr!  rI  rB   rC   r  rI  r$  re  )r  rG  rK  topthrowr  btopdhr  ri  rt  btop_r   r  r  r   s                   r!   rF  rF    s     #(C(CC
C&Szwr9-CD! WR WBW$RWW~rww5yw/QRRWW W C$288"''CGGLLs+E

4( S$,S ;G55S % W%$sM$8$8b5>$RTUVV	W	W W" ! S! 3 4 4T"XuW~ NPQRR	S  Wa(BU\\!S#b'**T"Xs+31!HH s   7I4G .E85*D%E8"G *I+A!G F"G $I%	E5.E00E856E0+E80E55E88F=G  IG 	G
GG ,G G G

G 	IA+I
IIIc                 .    t        | |d|d      D ]  } y y)NFT)rF  )r  rG  rL  r  s       r!   dir_is_emptyrR    s$    VWeS%8 r#   c           	         t         j                  j                  t        |            s$t         j                  j	                  |      }|dz  }t        | |||d      }|D cg c]*  }t        j                  |d   j                        s&|d   , }}|r2t         j                  j                  |d      }|D cg c]  }||z   	 }}g }	g }
t        |      D ]!  }t        | ||||dz         \  }}|	|z  }	|
|z  }
# |r4	 t        j                  t        |             |	j                  |       |	|
fS |	|
fS c c}w c c}w #  |
j                  |       Y |	|
fS xY w)z rmdir all descendants, then selfr   Fr   r  )rj  r  r  r   rZ  rF  r  S_ISDIRst_moder!  reversedrmdirsrmdirrA   )r  rG  rK  rL  depthstatsr  dirstop_r  ngrS  r   r   s                 r!   rW  rW    sC    77==s$ggooc"
FGUC7E>Q4<<!#=AaD>D>ww||C$"&'Qq''	B	Bd^ fgua;1
a
a
 	HHU3Z IIcN r6M2r6M% ? (	IIcNr6Ms    'D2D27D7;/D< <Ec                     | |k(  rg | gfS 	 t        j                  t        |              t         j                  j	                  |       }|r||k(  r| gg fS t        ||      \  }}| g|z   |fS #  g | gfcY S xY w)zrmdir on self, then all parents)rj  rX  r   r  rZ  	rmdirs_up)rL  r;  parr  r]  s        r!   r_  r_    s    
d{C5y
s ''//#
C#+ubysD!FB52:r>C5ys   A, ,A5c           
         |j                  d      s| d d } g }d}| D ]o  }|dk(  r|r|j                  |       |}|r?||z  }t        |      dk(  s4	 |j                  t        t	        |dd  d                   d}_|j                  |       q |r|j                  |       dj                  |      S #  |j                  |       Y OxY w)Ncppwr;   r  r  r   r  )r:  rA   r  r  r  r!  )origr   rF   rL  rM  s        r!   unescape_cookierd    s    ??6"BQx
C
C 9

3C2IC3x1}$JJs3s12w#345  JJrN!$ 

3773<$JJsOs   'B33Cc                 P   	 | j                  dd      d   j                         }t        j                  |      }|s3t	        j
                  |       }|d   rdj                  |d         n|d   }|s[|rY	 t        t        |      dd      5 }t        j                  |j                  d      d	      }|j                  d
      rd}d d d        |s|}d|vr'|j                  d      s|j                  d      r|dz  }|S #  d}Y xY w# 1 sw Y   CxY w# t        $ r
}Y d }~Td }~ww xY w)Nr  r   r  zapplication/{}r   r     Tr}  ztext/htmz
text/plainr  ztext/z/javascriptz; charset=utf-8)r  rH  r   r  r  
guess_typer   r  r   ry  from_bufferr  r:  rV  r  )urlr  fallbackr   rF   r  r  ri  s           r!   
guess_mimerk  2  s   jja #))+ ))C.C  %/0t%%ad+14	eDk4+ 'q''t4@>>*-&C	' 
#~>>'"cll=&A$$CJ5' '
  		s5   #C= 4D 
:DD =DDD 	D% D%c                     g }| D ]U  }	 |r*t        j                  |      |k(  r8|j                  |       n&t        j                  |       |j                  |       W |S #  Y ^xY wr   )rj  getpgidrA   psutilProcess)pidspgidalivepids       r!   getalivert  T  sf    E 
	::c?d*LL% s#S! L	s   AAA#c                    	 t        j                  t        j                               }t        rm| g}t	        j
                  |       }|j                  d      D ]-  }|j                  |j                         |j                          / |j                          d}n|rg }| g}|ru|d   }|dd }|j                  |       t        ddt        |      g      \  }}}||j                         j                  d      D 	cg c]  }	|	st        |	       c}	z  }|rut        ||      }|D ]&  }t        j                   |t"        j$                         ( n%t        j                   | t"        j$                         yt'        d	      D ]3  }
t)        j*                  d
       t        ||      }|r|
dkD  s,|| gk(  s3 n |D ]'  }	 t        j                   |t"        j,                         ) y#  d}Y xY wc c}	w #  Y >xY w)zstill racy but i triedr   T)	recursiveNr   pgrepz-Pr   r  r   r;   )rj  rm  r  HAVE_PSUTILrn  ro  childrenrA   rs  	terminater  r$  r   r@   r  rt  killrz  r~  rC  r  r.  SIGKILL)r  rq  rp  parentchildchkrs  r  r   r  r'  s              r!   killtreer  f  s   zz"))+& v%__t_4 	EKK		"OO	 		fa&Cab'CKKgtSX67GAq!AGGIOOD$9?qQCF??C  d# 	)CGGC(	) 	fnn%2Y 

3d#q1u$	  	GGC(I& @&	s#   'G% =G/G/>$G4%G,4G8c                      t         ry	 t        j                  d      } | r| S 	 dD ]*  } | dz  } t        j                  j                  |       s(| c S  y#  Y 4xY w)Nr  nice)z/binz/sbinz/usr/binz	/usr/sbinz/nice)r   r  whichrj  r  ry  )r   s    r!   
_find_nicer    sf    \\&!I  9 
g77>>"I
 s   A Ac                    t        | d   t        t        f      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd       }|rt        j
                  |d<   |d	v rt        j
                  nd }|d
v rt        j
                  nd }	t        r3|r| d   t        v r&| dxx   dz  cc<   n| d   t        v r| dxx   dz  cc<   |j                  dd       r)t        rd|d<   nt        r|rt        g| z   } n
t        g| z   } t	        j                  | f||	d|}
|rTt        sNt        sH	 t        d|
j                  fz  d      5 }|j!                  d|fz  j#                  d             d d d        |rt$        r|
j'                  |      \  }}n	 |
j'                  ||      \  }}|r|j/                  dd      nd}|	r|j/                  dd      nd}|
j0                  }|d}|||fS # 1 sw Y   ~xY w#  Y xY w# t        j(                  $ rW |dk(  rY y|dk(  r|
j+                          nt-        |
j                         	 |
j'                  d      \  }}n#  d}d}Y nxY wY w xY w)Nr   oomr{  r   capturer;   sinstdin)r   r;   )r  r;   s   .exer  r  i @  creationflagsr0  stderrz/proc/%d/oom_score_adjrh  z%d
r   r  r'  )ir  r  r   r   r#   r  r  i)
isinstancebytes	bytearrayr  spPIPEr   CMD_EXEBCMD_EXESr   NICEBNICESPopenr   r  rs  rl  rs  r   communicateTimeoutExpiredr{  r  rw   
returncode)argvr  r    isbytesr  r{  r  r  coutcerrr   r  boutberrr0  r  r  s                    r!   r  r    s\   
 a5)"45G
&&
C66&#DffY"G66%C
gg7'277TD'277TD Aw("Q7"Aw("Q6!	vvfd"(Bw~w~
6d4626A
6%	.!%%94@ ;A3&009:;
 c]]3'
d	sG<JD$ 15T[[),"F04T[[),"F
,,B	zvv?; ;	    	s{"]]1]5
d	sT   ?H %G;>H $H ;H H HI8(+I8I*)I8*I20I87I8c                 d    t        | fi |\  }}}|dk7  rt        || |       t        |      ||fS r  )r  retchkrV  )r  r    r  soutserrs        r!   chkcmdr    s>    D'B'NBd	Qwr4o:r#   c                 L   t         r<t        t        j                  d      5 }t	        j
                  | ||      }d d d        n5t	        j
                  | t        j                  t        j                  |      }rt	        j                  || d   d| d   f      y # 1 sw Y   +xY w)Nrh  r  )r0  r  r  r   s   ...r$  )r   r  rj  r  r  callDEVNULLCalledProcessError)r  r  r  rvs       r!   mchkcmdr    s    
"**d# 	3qa2B	3 	3 WWT"**RZZQ	##Ba&$r((CDD 
	3 	3s   BB#c                 n   | dk  rd| z
  } | r| dk  r|sy d }| dkD  r#	 t        t        j                  | dz
              }n| dk(  rd}n| dk(  rd}n|rd}nd}|rd	j                  | |      }nt        |       }	 d
j	                  |D cg c]  }t        |       c}      }	dj                  ||	      }|rOt        |      dkD  r'd}
|
|d d |dd  j                         t        |      fz  }|j                  dd      }|d|z   z  }|r
 |||       y t        |      #  Y xY wc c}w #  t        |      }	Y xY w)Nr      ~   zinvalid program   zprogram not foundunknownzinvalid retcodez{} <{}>r   zerror {} from [{}]i    z9%s
[ ...TRUNCATED... ]
%s
[ NOTE: full msg was %d chars ]rf  i r   z	
stderr: )
r$  rz  Signalsr   r!  r  r  r  r  rV  )r  cmdr  r  colorr  r  r   r  r  r   s              r!   r  r    sX    
Av2Xc'A	Cx	FNN28,-A 
s	s	R#GHH,1eAh,- 	##Aq)At9tOBetd56l&9&9&;SYGGD||D,/	\D  q%lA	  -Hs)   !D 7D% D D% D D% %D4c           	      6   d}d}d}d}d}d}d}d}	d}
d}|}d|d d v r|j                  dd      \  }}|d	k(  rd
}n|dk(  rd
}n|dk(  rd
}n|dk(  rd
}n|dk(  rd
}n|j                  d      rt        |dd        }n|j                  d      rt        |dd        }	n|j                  d	      rt        |dd        }ne|j                  d      r|dd  }
nN|j                  d      r|dd  }n7|j                  d      rn%|sn+d} | xs t        |j                  ||             d|d d v rt        j                  j                         }	 t        r
t               t        j                  j                  t        j                  j                  t        j                  j                  t                          }t        |      gt         j                  D cg c]  }|st        |       c}z   }t        t        j"                  j%                  |            }||d<   |d
d|	|
|d}d|v r|j                  d      n|g}t        j                  j'                  t        j                  j)                  |d               |d<   |||||||||f	S c c}w #  t        s Y ~xY w)Nr  Fr  r   r   r  r  r   r  Tr  jIr  wr   r   izhook: invalid flag {} in {}
PYTHONPATHr  )envr  r  r  r{  r  )r@   r:  r  r  re  r   rj  environr  r   rV  r  r  rZ  __file__r$  r"  pathsepr!  
expandvars
expanduser)rf  r  areqr  forkrc  impr  waittoutr{  capocmdargr   r  pypathr  r  sp_kar  s                        r!   
_parsehookr  A  s|    D
CDD
C
CDDD
CD
Ra.99S!$S#:CCZDCZDCZCCZC^^C QR>D^^C QR>D^^C c!"g,C^^C qr7D^^C qr7D^^C -AS\E188C./9 Ra.< **//
C
+1J!KL6{msxx=!1s1v==RZZ__S)*"L E !CZ399S>cUDgg  !3!3DG!<=DGc4dD%==) > s%   	B
J JJ(2J J 	Jc                    t        | |      \	  }}}}}}}	}
}|D cg c]  }t        |       }}|d   j                  d      rt        t              g|z   }|D cg c]#  }t	        t        t        |d   |d                % }}|D cg c]  }t        |j                  |       }}|rnt        |||      D cg c]+  \  }}}t        |      ||d   d d |d   |d   |d   |d	   d
- }}}}t        j                  |      j                  dd      |
d<   ndj                  d |D              |
d<   |d   j                  d      rM	 |
d   j!                  dd      }t#        | |d|d   dd  j%                         ||	|
       |r| r | d|dd	       yt)        j(                         }|rt+        t,        |||
       n$t-        |fi |
\  }}}|r|rt/        |||| d       y|	r4|	t)        j(                         |z
  z  }	|	dkD  rt)        j0                  |	       yc c}w c c}w c c}w c c}}}w # t&        $ r}| r | d|       Y d }~yd }~ww xY w)Nr   .pyr;   rt  r  r   r  r   r  )rg  r  warkmtr9  rp   atr   r  r  r  c              3   2   K   | ]  }t        |        y wr   )r   r;  s     r!   r  zrunihook.<locals>.<genexpr>  s     !8q%(!8s   zmq:xiuz
hook(xiu) z OKzzeromq failed: Tr    F)r  sfsencr  pybinrF  r  r  r  r  r   uncifyjsondumpsrs  r!  r:  rw   	_zmq_hookrH  rV  r  rn  r  r  r.  )rf  r  r  r  upsr  r  r  rc  r  r  acmdr  bcmdvpsr  r  rg  jar  ri  rw  r  rG   r  s                            r!   runihookr    sd    3=S#2F/AsAtQdE4#$!F1I$D$Awu%47
8q5$uQqT1Q4()*
8C
8+.
/a5q!
/C
/ !c3/
 
 2r Rj!Sb	dddd
 
 zz"~,,Wi@ezz!8C!88eAw&!	1,%%gy9Cc7E4712;+<+<+>T5Q3.2 	BvsDU+D*E*
As22tS#q)		b  !8JJtc % 9
/
,  	12/0	1s0   H(HH":0H'AH. .	I7I		Iz0fire-and-forget to all/any connected SUB-clientsz4fire-and-forget to one of the connected PULL-clientsz7send messages to a REP-server and blocking-wait for ack)pubpushrC  c           	         dd l }	 t        d   }d}	d}
t	        j                         }|r| r | d|d|dd       |5  	 t        |   \  }}}d d d        |r| r | d|d|dd       |5  |r| r | d||t/        |      fz  d       j1                  |       dk(  r{|r| r | d|d|dd       	 |j3                         j5                  dd      }	|	j7                  d      r5t9        j:                  d|	d d       }|rt%        |j=                  d
            }
d d d        |	r| r | d|d|d|	d       |r4|t	        j                         |z
  z  }|dkD  rt	        j
                  |       |
|	fS #  t        j                         t        d<   t	        j
                  d       t        d   }Y xY w#  |j                  d	d
      \  }}	 t        |   }| r)d} | ||j                         |j                  ||fz         n#  t        d      xY w	 t        d   }n #  |j                         x}t        d<   Y nxY w|d   }|dk(  r^|j                  |j                        }|j                  |j                  d       |j!                  |       t	        j
                  d
       n|dk(  r^|j                  |j"                        }|rt%        |dz        |_        |j                  |j                  d       |j!                  |       nm|dk(  r^|j                  |j(                        }|rt%        |dz        |_        |j                  |j                  d       |j-                  |       n
t               t        j                         }|||ft        |<   Y HxY w# 1 sw Y   MxY w#  |j?                          t        |= t        d      xY w# 1 sw Y   xY w)Nr   mtxr   r  hook() z entering zmq-main-lockr  r   r   z!libzmq(%s) pyzmq(%s) init(%s); %sz-the only supported ZMQ modes are REQ PUB PUSHr  r  r  r  i  rC  z entering socket-lockzhook(%s) %r sending |%d|z awaiting ack from reqr   r  zreturn z^return ([0-9]+)r8  zack timeout; zmq socket killedz ACK: ) rZ   ZMQrq  r  r  r.  r@   ZMQ_DESCzmq_versionrF  rV  Contextrj   PUB
setsockoptLINGERbindPUSHr  SNDTIMEOREQRCVTIMEOrY   r  send_stringr  rw   r:  r)  r*  r+  rA  )rf  r  r  r  r  r  r  rZ   r  rF   nretrw  moder  urir  r   r  r  r   s                       r!   r  r    sj    %j CD	B3C=qA	 )((	( XND#s)(V 3#s;Q?	 Bs*c3C-AA1E5=33DaH	Bhhj'';>>),		"4c#2h?A"1771:B( sS#s3Q7		b  !8JJt9k^^%E


3%j&	(		#q)ID#Q~;AS__.dKKLQ OPP1%j1#&;;=0c%jI&Gu}jj)szz1-

1jj*#&w~#6CLszz1-jj)#&w~#6CLszz1-C k!.."Cc3'CHS)( )(zB		H @AA%B Bsx   	E0 NF1*AO2A&N$0;F.1N	4G>=N>HN	HNH64ENNN!$$OOOc                    ddi}t        | |      \	  }}}}}}}}}|r"|D ]  }||vsd}| r | |||||fz         |c S  |s|rr|||	|
||xs t        j                         ||||d
}|r|d   |d<   |d   |d<   |r%| |d<   t        |d   d	      }|j                  |      S t	        j
                  |      }n	|r|d   n|}|d   j                  d
      rZt        | |||d   dd  j                         |||      \  }}|rt        d|fz        	 t	        j                  |      }d|vrd|d<   |S |r|dz   j                  dd      |d<   n||gz  }|d   j                  d      r
t        g|z   }|D cg c]  }||k(  rt        |      n
t        |       } }t        j                         }!|rt!        t"        || g|       ndt#        | fi |\  }"}#}$|r |"r|"|d<   |"dk(  rdn|"}t%        || |$| d       n2	 t	        j                  |#      }	 d|vr|#|d<   d|vr|$|d<   d|vr|"|d<   |r4|t        j                         |!z
  z  }|dkD  rt        j&                  |       |S #  d|dcY S xY wc c}w #  Y ixY w#  |"|#|$d}Y ZxY w)Nr  r   z:user %s not allowed to run hook %s; need perms %s, have %s)
rg  r  r  r9  rp   r  hostuserpermsr  r  r   bodyrf  Fr  rt  zzmq says %d)r  r0  r   r   r  r  r  r  r  r   r0  r  )r  r0  r  )r  r  loadpymainr  r  r:  r  rH  rV  loadsrs  r  r  r   r  rn  r  r  r.  )%rf  r  r  r  rg  r  r  r  r  r  r9  rp   r  r  rF   r  r  r  r  r  rc  r  r  r  rM  r   r  r^  r  r  r   r  r  rw  r  rG   r  s%                                        r!   _runhookr  3  s     )C9CC9M6D#sD#tT5$ 	BPUCu556
	 d#		
 ABuIQBvJBuIa%(C88B<jjnc!fAw&!3d1gabk.?.?.A3eTBMRE122	+**R.C3D	J d
**7I>eAww~8<=1RE!HVAY.=D=	BvsTFu-D*E*
As2CICiRB2tS#q)jjm=3&$%CM3&$'CMs? "CI 		b  !8JJtJW	+r** >=1<s*   I /"I&1I+ I2 I#+I/2I<c                    |xs |j                   }|j                  }|j                  dd      }ddi}d}|D ]  }	 t        | ||||||||	|
||||      }|r| r | d|d|d|d	       |j	                         D ]  \  }}|d
v r8|r6|r|j                  d|||       #|j                  j                  |||f       B|dk(  r|r||d<   O|dk(  r|rd}|dk(  rdn|||<   e||v r|dk(  so|sr||   rx|||<   ~|||<    	 |s |S  |S # t        $ r4} | xs t        d|d|       dd|z   v rddicY d }~c S Y d }~ |S d }~ww xY w)NrF  r  r  r   Fr  r  z	 => [32mr  )r  delzup2k.hook_fxrelocTr  r0  zhook: z, z,c,r  r   )
r%  hook_vr  r  r  say
fx_backlogrA   rV  re  )rf  brokerup2kr  cmdsrg  r  r  r  r  r  r9  rp   r  r  r%  r  rF   r;  r  hrr   rG   ri  s                           r!   runhookr    s   " Nd  DkkG	D#	B)CD 	Wc3BeUBBPRTWB 33R@!D
 1&1

>1a<..1bz:'\a#$CL$Y1D"#s(QCF#XH}3q6!"ACF!, JA@ J  	S\ER45c	!ay  J	s0   B,D(D+D1D	E E 1E Ec                    t         j                  j                  t         j                  j                  |             } t         j                  j	                  t        |             \  }}|j                  dd      d   }t        j                  j                  d|       t        rt        |      }|r6t        |       n*ddl} |j                  |      }|r |j                  |       t        j                  j                  |       |S )z
    a nice can of worms capable of causing all sorts of bugs
    depending on what other inconveniently named files happen
    to be in the same folder
    r  r   r   N)rj  r  r  r  r@   r  r  r"  insertr   
__import__reload	importlibimport_moduler  )rg  hotmdirmfilemnamer^  r  s          r!   r  r    s     
		BGG..r2	3B''--,KD%LLa #EHHOOAt
3K%i%%e,IS!HHOODJr#   c                 n    t        t        |       d      5 }t        |      cd d d        S # 1 sw Y   y xY w)Nr  )r  r   gzip_file_orig_sz)r  r  s     r!   gzip_orig_szr    s/    	eBi	 $! #$ $ $s   +4c                     | j                         }| j                  dd       | j                  d      }| j                  |d       t        d|      d   S )Nr  rt  r   r  )tellr[  r  r}   )r  rd  r  s      r!   r  r    sG    FFHEFF2qM	
BFF5!4Qr#   c           
         g }d}| D ]I  }|j                  d      D cg c]  }|s|	 }}t        |t        |            }|j                  |       K dg|z  }|D ]0  }t	        |      D ]   \  }}t        ||   t        |            ||<   " 2 |D cg c]$  }dj                  d t        ||      D              & c}S c c}w c c}w )Nr   r   r  c              3   J   K   | ]  \  }}|j                  |d z           yw)r  N)ljust)r
  r  r  s      r!   r  zalign_tab.<locals>.<genexpr>  s      >tq!AGGAEN>s   !#)r@   maxr  rA   r  r!  r   )	linesrowsncolsr   r  rowlensr'  cols	            r!   	align_tabr#    s    DE ((3--Q1q--E3s8$C
 3;D -n 	-FAs$q'3s8,DG	-- KOO3BGG>s3~>>OO . Ps   B>B>)Cc                 6   d}d}d }d}| D ]  }|dk(  r|r|t        |      z  }d}d }|s||v s#d}&|r,||z  }|j                  d      rd}n|t        |      z  }d}d }T|dk(  r|}]t        |      }|dk  s|dk\  r|d	k  s
|d
k\  r|dk  r|dz  }|dz  } |S )N4abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZr   Tz[Fr'  i %  i%  i (  i(  r   r  )r  r:  r   )r  eocr7  pendcountingrM  rC  s          r!   visual_lengthr*    s    
@CDDH #" <DCIDHDSy
??7+$HCI%D#H<#%DRB U
&LR6\&LR6\	 	G#"H Kr#   c                 D   t        j                  dd| j                               j                  d      }||z
  }g }|D ]  }t	        |      dz  |k  st        |      |k  r|j                  |       4t        |      |k\  r1|j                  |d |dz
   dz          ||dz
  d  }t        |      |k\  r1|sv|j                  |        |}g }d}d}|D ]9  }t        |      }	||	z   |kD  r|j                  |       |}d}d	|z  }||z  }||	z  }; |r|j                  |       |S )
Nz([, ])z\1\nr   r  r   r  r  r   r   )r)  r$  r  r@   r  r*  rA   )
r  maxlenmaxlen2r  r  rF   wordr   spentwls
             r!   wrapr1  8  sD   FF9gszz|4::4@E
7
C
C !t9q=6!]4%86%AJJt%/

4&1*-34FQJL)  %/ 

4 ! E
C	BE 4 2:JJrNFEsB
d
 


2Jr#   c                     	 t        j                         \  } }| |fS #  Y nxY wt         j                  }d } |d      xs  |d      xs  |d      }|s\	 t        j                  t        j                         t         j
                        } ||      }t        j                  |       n#  Y nxY w	 |xs t        |d         t        |d         fS #  Y yxY w)Nc                     	 t        dt        j                  | t        j                  d            }|d d d   S #  Y y xY w)Ns   hhr  r$  )r}   r  r  r  
TIOCGWINSZ)r  crs     r!   ioctl_GWINSZztermsize.<locals>.ioctl_GWINSZc  s=    	B0B0BG LMBdd8O	s   69 =r   r   r  COLUMNSLINES)P      )rj  get_terminal_sizer  r  ctermidO_RDONLYrA  r  )r  r  r  r6  r5  r  s         r!   termsizer>  Z  s    ##%1!t
**C 
a	>LO	>|AB	r{{3Bb!BHHRL	=c#i.)3s7|+<==s!    !AB* *B.2C Cc                     t         r4	 t        }|j                  |       }|dk\  r|j                  | |dz         y y y #  Y y xY w)Nr   r  )r   r  GetFileAttributesWSetFileAttributesW)dpk32attrss      r!   hidedirrE  y  sN    	C**2.Ez&&r5195 	 	s	   1< A c                      y)NTr   )rg  s    r!   _lock_file_nooprG    s    r#   c                 B   	 t         j                  |       }t        j                  |       t        j                  | t        j
                  t        j                  z  d      }	 t        j                  |t        j                  t        j                  z         |t         | <   y#  Y zxY w# t        $ rl}t        |dd      }	 t        j                  |       n#  Y nxY w|t        j                  t        j                  fv rY d }~yt!        d||fz         Y d }~yd }~ww xY w)N  TrC   r$  Fz1WARNING: unexpected errno %d from fcntl.lockf; %r)_flocksr  rj  rA  r  O_RDWRO_CREATr  lockfLOCK_EXLOCK_NBrV  rB   rC   EAGAINEACCESre  )rg  r  ri  enos       r!   _lock_file_ioctlrS    s    [[_
 
RYY+S	1B
B56  	b'2&	HHRL	5<<..AS"IMN	sA   *B" #>B) "B&)	D2D CDC'DDDc                    	 dd l }	 t        j                  |       }t        j                  |       t        j
                  | t        j                  t        j                  z  d      }|j                  ||j                  d       y#  Y XxY w# t        $ r?}t        |dd      }|t        j                  k(  rY d }~yt        d||fz         Y d }~yd }~ww xY w)	Nr   rI  r   TrC   r$  Fz4WARNING: unexpected errno %d from msvcrt.locking; %r)msvcrtrJ  r  rj  rA  r  rK  rL  lockingLK_NBLCKrV  rB   rC   rQ  re  )rg  rU  r  ri  rR  s        r!   _lock_file_windowsrX    s    	RBHHRL WWRRZZ/5r6??A.	
  b'2&%,,DRyPQs4   B *B AB B	B 	C C:CCPRTY_NO_DB_LOCKc           	      @   dd l }	 | j                  dd      }t        j                  |ddd ddd       }|dk(  r)t	        j
                         }t	        j                  |      |j                  |t        j                        }t        j                  |d	      S #  | }Y xY w)
Nr   r   r  l        r<   r;   r  r$  r  )rU  rw   r  CreateFileWr  get_last_errorWinErroropen_osfhandlerj  r=  fdopen)r  r   r    rU  rg  r  ecr  s           r!   _open_nolock_windowsra    s    ZZ+ 
		"j!T1dD	AB	Rx""$oob!!			r2;;	/B99Rs   B B)r;   r  PRTY_NO_IMPRESOc                 \    t         sy	 t        j                  | |      S # t        $ r Y yw xY wrw  )pkg_resourcesresource_existsNotImplementedError)pkgr   s     r!   _pkg_resource_existsrh    s2    ,,S$77 s    	++c                     | j                   |z   }t        j                  j                  |      rt        j                  t        |            S y r   )mod_rj  r  ry  r  r   )Er   r  s      r!   stat_resourcerl    s5    66D=D	ww~~dwwuT{##r#   c                 n    	 t        j                  |       }|j                  |      S # t        $ r Y y w xY wr   )impresourcesfilesImportErrorjoinpath)rg  r   ro  s      r!   _find_impresourcerr     s<    ""3' >>$  s   ( 	44c                 Z   	 t         |    S #  Y nxY wt        t               dkD  rt         j                          t        j                  t
           }t        r(t        ||       }|r|j                         r
dt         | <   yt        r t        |j                  |       r
dt         | <   ydt         | <   y)Nr   TF)_rescache_hasr  clearr"  modules__package__rn  rr  is_filerd  rh  r7   )r   rg  ress      r!   _has_resourcerz    s    T""
=C
++k
"CT*3;;="&M$d3"&M$M$s    c                 t    t        |      xs, t        j                  j                  | j                  |z         S r   )rz  rj  r  ry  rj  )rk  r   s     r!   has_resourcer|  &  s'    ?"''..$"??r#   c                 *   d|v rd nd}t         rYt        t        j                  t           |      }|r6|j                         r&|r|j                  ||      S |j                  |      S t        rlt        j                  t           }t        |j                  |      r?t        j                  |j                  |      }|r t        j                  |      |      }|S | j                  |z   }t        rt        j                  |d|      S t        |||      S )Nr   r   )encodingrw  )rn  rr  r"  rv  rw  rx  r  rd  rh  r7   resource_streamcodecs	getreaderrj  r   )rk  r   r  r  ry  rg  streamrg  s           r!   load_resourcer  *  s    +$7CK 8$?3;;=xxsx33 xx~%kk+&d3"223<<FF.))#.v6M	
$B
{{2sS11D3''r#   c                   (     e Zd Z	 d fd	Zd Z xZS )rI  c                 ^    t         t        |   |xs	 t        |          || _        || _        y r   )superrI  rs  HTTPCODEcoderf  )r.   r  r  rf  r  s       r!   rs  zPebkac.__init__G  s+     	fd$S%:HTN;	r#   c                 `    dj                  | j                  t        | j                              S )NzPebkac({}, {}))r   r  r  r%  r  s    r!   r  zPebkac.__repr__N  s!    &&tyy$tyy/BBr#   )NN)r7   r8   r9   rs  r  __classcell__r  s   @r!   rI  rI  F  s    )-Cr#   rI  c                        e Zd Z fdZ xZS )rf  c                     dj                  ||      }t        t        |   d|       || _        || _        || _        || _        y )Nzexpected field "{}", got "{}"r   )r   r  rf  rs  expectedgotr(  datagen)r.   r  r  r(  r  r  r  s         r!   rs  zWrongPostKey.__init__S  sD     .44XsClD*34 
r#   )r7   r8   r9   rs  r  r  s   @r!   rf  rf  R  s     r#   rf  )
r   mpzlibrd   r   r4  
SQLITE_VER	JINJA_VER
PYFTPD_VERPARTFTPY_VER)Fr  )r   Fr   rJ  )FF)r;   )r  zapplication/octet-stream)r  )Nr   F)r  (  
__future__r   r   argparsebase64rN  r  rC   rY  ro  r  r  rG  r  rj  r  r)  r:  r  rz  rj   r  ru   
subprocessr  r"  rq  r  r  collectionsr   	ipaddressr   r   r   r	   queuer
   r   r   r   r  rv  rs  r   r   r   r   r   r   r   r   r   r   r   rF  r   r   r"   r$   r%   utcr3   r&   r'   r,   r)   xrangerC  stolenr:   register_surrogateescaper#  r   r  r  r>   rH   E_SCKE_SCK_WRE_ADDR_NOT_AVAILE_ADDR_IN_USEE_ACCESS	E_UNREACHE_FS_MEH	E_FS_CRITIP6ALLIP6_LLIP64_LLUC_CDISPrs  BC_CDISPr  r  r  r  
HAVE_FCNTLr  HAVE_FICLONEr  r  r  rV  r  WinDLLr$  r  rp  stolen.ifaddrrU   ifaddrHAVE_IFADDRHAVE_SQLITE3r=  importlib.utilr  boolutil	find_specHAVE_ZMQrx  rn  ry  r  r_   re  authsrvr`   broker_utilra   r  rb   FAKE_MPmultiprocessingr  iord   re   rq   r  r	  rk   rm   r|   rv   rz   r}   calcsizer,  ry  r  RE_ANSIr  rp  r8  r:  r<  r>  r  r  r   	maketransFNTL_WINVPTL_WINAPTL_WINFNTL_MACVPTL_MACAPTL_MACFNTL_OSVPTL_OSr  r  r  rn  r  utimerJ  SYMTIMEMETA_NOBOTSBAD_BOTS
FFMPEG_URLURL_PRJURL_BUGr  IMPLICATIONSr  UNPLICATIONSDAV_ALLPROP_LDAV_ALLPROPSFAVICON_MIMESr   r   r  r  r  DEF_EXPDEF_MTEDEF_MTHr   r@   
REKOBO_KEYrH  REKOBO_LKEY_exestrr  r  APPLESAN_TXTAPPLESAN_REr  r  
VF_CAREFULFN_EMBr  	RAM_TOTALr<  
executabler  zsgr  r3  r7  rE  r  jinja2r  pyftpdlib.__init__rH  r  partftpy.__init__r  paramikoMIKO_VERPY_DESCr   VERSIONSr  rQ  rU  rS  rX  rZ  r\  rq  urlsafe_b64encodezb2ri  urlsafe_b64decode	b64encode	b64decoder^  rl  rr  rn  r  r  r  r  r  r  r  r  r  Unrecvr  r  r  r!  r6  re  ru  r  r  r  r  r/  r  r  r  r  r  r  r  r  r  r  r*  r  r  r1  r3  ra  rG  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  r  r  r  r	  r  r  r$  r&  r)  r  r*  r,  quotep_hexdfromhexr0  r4  urllib.parser5  r   urllibr8  r?  rB  rF  rH  rM  rW  rc  rg  rl  ro  rr  rv  rx  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  r  r  r  r  r  r   r"  r)  r,  r0  r8  rD  rF  rR  rW  r_  rd  rk  rt  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r*  r1  r>  rE  rJ  rG  rS  rX  	lock_filera  open_nolockr  importlib.resources	resourcesrn  importlib_resourcesrd  rh  rl  rr  rt  rz  r|  r  rI  rf  r  __all__)r   rG   r   r'  r   r   s   000000r!   <module>r     s~   7            	  	        
     H H 	''CKK    /	+
,,C& E',O,,. v+X++-:E0 	?@()89 /0"#JK	12-.			%
1M??7#8}8}J5),L
		zz~~&'k6==Z>D	zz~~&'k(::>>.)RZZ^^<M-N-/ K		zz~~&'kL7I&&&INN,,U34H	zz~~&'kK		zz~~o&rzz~~&89k ::>>.!%	
!=#>?&
		zz~~l#m  ,	zz~~n%kFV__e,I	)FV^^[9&
5FMM%!KKEmmG'food#a'G
 )S)E* "**(
)RZZ(
2::12==A2::8"--H6 

7 bjj*+bjj./ < }}HL"?@K!;<J :;!)#u!5 5 58h(e((e((e( 66
#
#G
, sK+#++-K 
:288r:::B pD

-
C
C  	
 	  	       	   	!" 	#$ 
	!	*				 			7@ fUOfUO
ENUOUO
ENj!w)wUOUOwfUO	5M	5M$K$KUO
DM
DM
DM
DM
DM;> 
#u' 5!"* =!  %$	#1L  !;;=	)41a!Q$	)  UO	 |
n
,
2 
EGEE7 
8 XXZc"12&= < 	
= rxxQ  
D )3(8(8(:;1qwwy!|; Iw~~g&,,./w}} _bjj& B 
				"	)	0  qSSI
	L	M(  z 	9 	"E%%' 
		v&,,s#C 
(5$J/	zz~~&'k8	zz~~()k=	zz~~()k0
 )\cc	?//%/K//%/K('6' 
B
"&
"
"2
&C
gbkR73</$$ 0	i 	>%Y %4%V %(v 4)17?? )1XCV CL	 	@f @J 
 * <5& 5p0i&& 0f])V ])@6f 6<)v )XFF FR s&(XXF#
 BHC/R&)@<$N	32" $96?b2Jdf dN	Y@*@L !'nLD 
'	,	,	.	:	@	@	B
/B .0*K.
9$.&2
+ 	
8IJJ(U++ RE s 	
q~HtO3q6AA'JJE E$K F$E>CSUSq1unna!e 44SSF 76F" W0"f/
/
6
6
9
I>@ /
/
 wFFEEF	G##E#FVEF 54E4FV"EF
+-+$?D$24 8 e F$ *+Z	48p !&8 !&*:(12!H4n0f<$> #=D$-`( 	W
 GTE 2jF>R9x 	=BDbJeP6r4$
 P *ZD> 8* ::>>#$I"I II" 
&KK

'!RZZ^^4E%F m..
'!m
  4@(8	CY 	C6 $ 		MJ444lGv  &CnJL	FD  (''(KLHK	*  	B*	)))J+
  )F$ !FI545'fooc"Q&G\ 
* D <B	hJIJLHP  ?&&G&&GFF=>?x3& Tn;  2   Ms  ~ ~%  ! &&% / ("A@ A9 A@ 3A@ %A@$ ,(A@. AA@8 &AA  AAA- AA ;.AB *AB 9AB-=A	AB3AB9&AB?AC AC !(AC 
(AC% 3(AC/ <A%AC9 ,AE$6AE%<AE "AE: 
~"%&"%,/69A@@A@ @A@@A@ @	A@@A@!@$A@+@.A@5@8A@=A AAA
AAAAA*A'AA- A-AA>BABBAB*B?ACCACCACCAC"C%AC,C/AC6C9AE
C>AAEEAE
EAE7EAE%E$AE7E%AE0E-AE7E/AE0E0AE7E6AE7E:AFFAF