
    h                    D   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mZ d dlmZ d dlZd dlmZ 	 e	j2                  j5                  d      r e       d dlZddlmZmZm Z m!Z!m"Z"m#Z# dd	l$m%Z% dd
l&m'Z'm(Z( ddl)m)Z) ddl*m+Z+ ddl,m-Z-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl6m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z|m}Z}m~Z~mZmZmZmZmZmZmZmZ e!rddlmZ  eed      s
 eedd       eefZej                  dkD  rddini ZddiZdj                         ZdZdZdZd dgdd ggZd d!d"ggdd#d$gggZd%d&d'd(d)Z e	j.                  d*      Z ej2                  d+      Z ej2                  d,      Z ej2                  d-      Z ej2                  d.      Z ej2                  d/      Z ej2                  d0      Z ej2                  d1      Z ed2j                               Z G d3 d4e      Zy#  Y xY w)5    )print_functionunicode_literalsN)datetime)
itemgetter)IPv6NetworkPRTY_NO_LZMA   )ANYWINPY2RESTYPE_CHECKING	EnvParamsunicode)	S_VERSION)LEELOO_DALLASVFS)bos)	StreamTar)QrCodeqr2svg)	StreamArcgfilter)	StreamZip)up2k_chunksize)unquote)OAPPLESAN_REBITNESSDAV_ALLPROPSE_SCK_WRFN_EMBHAVE_SQLITE3HTTPCODEMETA_NOBOTSUTCGardaMultipartParserODictPebkac	UnrecvEOFWrongPostKeyabsrealafsencalltraceatomic_moveb64deceol_convexclude_dotfiles
formatdatefsencgen_filekeygen_filekey_dbg	gencookieget_dfget_spd
guess_mimegzipgzip_file_orig_szgzip_orig_szhas_resourcehashcopyhidedirhtml_bescapehtml_escapehtml_sh_esc	humansizeipnorm	json_hescjustcopyload_resourceloadpy	log_relocmin_expathmodquotep	rand_nameread_headerread_socketread_socket_chunkedread_socket_unbounded	read_utf8relchkren_openrunhooks2hmss3encsanitize_fnsanitize_vpathsendfile_kernsendfile_py
set_fpermsstat_resource
str_anchorub64decub64encujoinundotunescape_cookieunquotepvjoinvol_sanvrootsvsplitwunlink	yieldfile)HttpConnAF_UNIXi)   	   usedforsecurityFCache-Controlzno-cachez#k304 no304 js idxh dots cppwd cppwszx due to dangerous misconfiguration (the http-header specified by --xff-hdr was received from an untrusted reverse-proxy)zConnection: Keep-AlivezConnection: Closez.prologue.htmlz.epilogue.htmlz
preadme.mdz
PREADME.mdz	readme.mdz	README.mdmtatfnsz)muns)
i  ry   r	     rz      #9r|   r|   z[\x00-\x1f]z[\x00-\x1f<>\"'&]z[^][0-9a-zA-Z.:_-]z^[][0-9a-zA-Z.:_-]+$z[^0-9a-zA-Z_-]z[<>\"'&]z%(.*)\.([0-9]+\.[0-9]{3})(\.[Mm][Dd])$zdoc move treec                      e Zd ZdZd ZdidZd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Z	 	 	 djdZ	 	 	 	 dkdZd ZdldZd Zd Z	 	 	 	 	 	 dmdZd Zd Zd Zd Zd Zd Z d  Z!d! Z"d" Z#d# Z$d$ Z%d% Z&d& Z'd' Z(d( Z)d) Z*d* Z+d+ Z,d, Z-d- Z.dnd.Z/d/ Z0d0 Z1d1 Z2d2 Z3d3 Z4d4 Z5d5 Z6d6 Z7d7 Z8d8 Z9d9 Z:dod:Z;d; Z<d< Z=d= Z>d> Z?d? Z@d@ ZAdA ZBdB ZCdC ZDdD ZEdE ZFdF ZGdpdGZHdH ZIdI ZJdJ ZKdodKZLdodLZMdM ZNdN ZOdO ZPdP ZQdQ ZRdR ZSdodSZTdT ZUdU ZVdV ZWdW ZXdX ZYdY ZZdZ Z[d[ Z\d\ Z]d] Z^d^ Z_d_ Z`d` Zada Zbdb Zcdc Zddd Zede Zfdf Zgdg Zhdh Ziy)qHttpCliz=
    Spawned by HttpConn to process one http transaction
    c                 n   g }t        j                          | _        || _        |j                  | _        |j                  | _        |j
                  | _        |j                  d   | _        |j                  | _        |j                  | _        | j                  j                  | _	        |j                  | _
        |j                  | _        |j                  | _        |j                  | _        |j                  | _        |j                  | _        |j                   | _        | j                  j"                  r| j$                  nt&        | _        t+        | j                  d      | _        t/        | j                  j0                        | _        d| _        d| _        d| _        i | _        d| _        d| _        d| _         d| _!        d| _"        d| _#        d| _$        i | _%        i | _&        i | _'        d | _(        | j                  jR                  | _*        d| _+        d| _,        d| _-        d| _.        d| _/        d| _0        d| _1        d| _2        |x| _3        x| _4        | _5        d| _6        d| _7        d| _8        d| _9        d| _:        d| _;        d| _<        d| _=        d| _>        g | _?        i | _@        d | _A        d| _B        y )Nr   cipherFT  )Ctimet0connu2mutexrx   sraddripargsEasrvicothumbcliu2fhpipeslog_funclog_srclog_fk_gen_fkr4   gen_fkhasattrtlsboolRis_vproxied	keepaliveis_httpsin_hdr_recvheadersmodereqhttp_verhinthostua	is_rcloneouparamuparamcookiesavnvfsvnremvpathvpathsdl_idgctxtrailing_slashunamepwrvolwvolavoldo_logcan_read	can_writecan_move
can_deletecan_get	can_upget	can_admincan_dotout_headerlistout_headersparser	html_head)selfr   empty_stringlists      F/jellyfin/media/venv/lib/python3.12/site-packages/copyparty/httpcli.py__init__zHttpCli.__init__   s&   ))+	||''))A,ii	II	))++II	88II	ZZ
||&*ii&6&6dllKDFFH-		, 			))--

	"
,<<	<DI	 "     c                 .   | j                   j                  }|r`|j                  |      rO| j                   j                  j                  r|j                  d|      }n|j                  | j                  |      }| j                  | j                  ||       y )Nz[7m pw [27m)	r   re_pwdsearchahonsubunpwdr   r   )r   msgcptns       r   logzHttpCli.log   sf    ii3::c?yy||gg3S9ggdjj#.dllC+r   c                     |j                         \  }}}| j                  j                  j                  |      xs% | j                  j                  j                  |      }|d|d|S )Nz[7m z [27m)groupsr   iacctgetsesa)r   ru   abr   r   s         r   r   zHttpCli.unpwd   sP    ((*1a		##A&?$))..*<*<Q*?,-ua88r   c                 b    |r|j                   dk  S |j                   dk  xs |j                   dv S )N,    )    )code)r   exposts      r   _check_nonfatalzHttpCli._check_nonfatal   s/    77S= ww}5: 55r   c                 D    |j                  d      sd|v rt        d      y )N)/z../z/../zthat was close)
startswith	Exception)r   r   s     r   _assert_safe_remzHttpCli._assert_safe_rem  s'     >>,'6S=,-- ,9r   c           	      `    t        |||||| j                  | j                  j                        S N)r5   r   r   r   )r   algsaltfspathfsizeinodes         r   r   zHttpCli._gen_fk	  s,    vueTXXtyy7G7G
 	
r   c                    | j                   j                  j                  |   }| j                  r| j                  j
                  nd|d<   | j                   j                  j                         |d<   | j                  j                  |d<   | j                  j                  |d<   | j                  j                  |d<   | j                  j                  d   |d<   | j                  j                  r*d|vr&| j                  j                  }|d	|v rd
nd	z  }||d<   | j                  j                  j                  d      }|r| |d<   | j                  ||       | j                  |d<    |j                   di |S )Nr   rtslangfavico
s_doctitletcolorjs?&r   this )r   hsrvj2r   r   SRcachebusterr   r   doctitler   flagsjs_otherr   _build_html_headr   render)r   namekatplzszsos         r   j2szHttpCli.j2s  s/   iinn%"&"2"2$)),,399>>--/4YY^^6
yy''899--<ww}}X.899$b.##B#+BBtHggmm,BvJ!!#r*..;szzBr   c                 H    | j                   j                  j                  |   S r   )r   r   r   )r   r  s     r   j2jzHttpCli.j2j$  s    yy~~  &&r   c           	      L   ddd| _         | j                  j                  r| j                         ry| j                  j
                  ra| j                  j
                  j                  | j                  j                  d         s%| j                  dd       | j                  dd	       y	 | j                  j                  d
       t        | j                  | j                  j                  | j                  j                        }d| _        |sy|d   s$| j                  dd       |j!                  d       	 |d   j#                  d      \  | _        | _        | _        |dd D ]B  }|j#                  dd      \  }}|j+                         | j,                  |j/                         <   D 	 | j                  j<                  xj>                  dz  c_        | j,                  jA                  d"d#      | _!        | jB                  jE                  d$      | _#        | j,                  jA                  d%d#      j/                         }d&|vxr | j(                  d'k7  xs |d(k(  | _        | j,                  jA                  d)d#      j/                         d*k(  xs | jH                  | _%        | j,                  jA                  d+      xs d#| _&        | jL                  s| j                  jN                  tP        jR                  k(  r| j                  jT                  | _&        n=d,| j                  jW                         dd
 z  }|jE                  d-      r|d.d n|| _&        d}| j                  jX                  }	|	r| j,                  jA                  | j                  jZ                        }
|
r|	dkD  r|	dz  }	|
j#                  d/      }	 ||	   j+                         }| j                  j                  d   }| j                  jb                  }|r|j                  |      sd7}| j,                  jA                  d8      r|d9z  }n|d:z  }d;|v r'd;j1                  |j#                  d;      dd
       d<z   }nte        |d=z   d      jf                  }| j                  jh                  j                  |      rd>nd#}| j                  || j                  jZ                  |||
||fz  d       d| _/        na|| _.        | j                  jk                  | j\                        | _6        | j,                  jA                  d?      xs | jL                  | _&        d}tn        jq                  | jL                        }|r| jL                  | j                  jT                  k7  r| jL                  }d@}| j                  || j&                  |||js                         d   d fz  d       | ju                  | j                  j<                  jv                  |dAdB       | j                  dCd       y| j                         ry| j                  jx                  rk| j                  jx                  }t{        | j\                        }||v r<||   t}        j|                         z
  }|dk  r| j                  dDd       ||= nd| _        | j                  j~                  }| xs |jq                  | j&                         | _@        | j                  j                  r| j                  r| j                  j                  }dE|v r,t        t        | j,                  j                                     }|D ]B  }| j,                  jA                  |      }
|
!| j                  dFj                  ||
      d!       D dG| j&                  v rdH| j&                  vrdI| _F        | j                  j                  rdJ| j&                  v r	 | j&                  j#                  dH      d   j#                  dJ      \  }}|j#                  dK      d   }t        |j                  dL            j                  dLdM      }|jE                  dK      r|dN|dd | _        n|dH|| _        t        }|jq                  | j&                        }|r~| j&                  }dR}| j                  ||||js                         d   d fz  d       | ju                  | j                  j<                  jv                  |dSdT       | j                  dd	       yi }dH| j&                  vr8t        | j&                        }|j                  dK      | _O        t        |      }n| j&                  j#                  dHd      \  }}t        |      }|j                  dK      | _O        t        |      }t        }t        }|j#                  dG      D ]  }dU|v r?|j#                  dUd      \  }}t        |j+                         j                  dVd            }nd#}|jq                  |      }|rdW}| j                  || j&                  |||js                         d   d fz  d       | ju                  | j                  j<                  jv                  | j&                  dXdY       | j                  dd	        y|j/                         }|||<   ||v r|dU|}|jq                  |      }|sdZ}| j                  || j&                  |||js                         d   d fz  d       | ju                  | j                  j<                  jv                  | j&                  d[d\       | j                  dd	        y d]|v r|jq                  |d]         }|r|d]   }d^}| j                  || j&                  |||js                         d   d fz  d       | ju                  | j                  j<                  jv                  |d_d`       | j                  dad       y| j                  r|jE                  | j                  j                        r&|t        | j                  j                        dz   d }n4db}| j                  || j                  j                  |fz  d       d| _T        |j                         | _X        | j                  j                  r}t}        j                  | j                  j                         | j                  j                  r>t}        j                  t        j                         | j                  j                  z         | j,                  jA                  dc      }
|
rt        |
      ddkD  r| j9                  dedQ       y|
j#                  df      D  cg c]  } dU| v s| j#                  dUd       }!} |!D ci c]  \  }}|j+                         t        |      ! }"}}|"jA                  dg      xs |"jA                  dh      xs d#}#di|"v rdi|vr|"di   |di<   ni }"d#}#t        |      djkD  st        |"      dkkD  r| j9                  dldQ       y|| _^        |"| __        || _`        | j                  r| j                  r| j                  dKz   n| j                  | _a        dm|v r| j                         S t        | j                        r| j                  dEk7  s| j$                  dnk7  r| j                  do| j&                  dpdK| j                  z          | ju                  | j                  j<                  jv                  | j&                  dqdr       | j                         xr | j4                  S | j,                  jA                  ds      }
d#}$|
r| j                  j                  s|#r| j                  j                  s	 |
j#                  d      d   j                  dt      }%t        |%      j                  dL      }|g|j#                  dd      ddd3   z   D ]h  }$|$| j                  j                  v r nN| j                  j                  j                  |$      }&| j                  j                  jA                  |&      sh n |jA                  du      xs# | j,                  jA                  du      xs |$xs |#| _m        | j                  j                  jA                  | j                        xsV | j                  j                  jA                  | j                  j                  j                  | j                              xs dE| _n        | j                  j                  r| j,                  jA                  | j                  j                        xs d#}'|'r| j                  j                  r3| j,                  jA                  | j                  j                        xs d#nd#}(|sD| j                  j                  d   }| j                  jb                  }|xr |j                  |      }| j                  j                   xs" | j                  j                  | j,                  v })|)rj|rh|'j/                         t        k(  r| j9                  dvdwQ       y| j                  j                  | j                  j<                  j                  |'|(       n|)s.dx}| j                  || j                  j                  |'|(fz  d       |sdy}| j                  j                  s|dzz  }| j                  j                  d   }d;|v r&d;j1                  |j#                  d;      dd
       d;z   n%dj1                  |j#                  d      dd{       dz   d|z   }| j                  jh                  j                  |      rd>nd#}| j                  |||'|(||fz  d       dE}'d#}(|'| j                  j                  j                  v r\d#| _m        |'| _n        | xj                  d}z  c_w        | j                  j                  jA                  |'      }|r'| j                  |       n| j                  d~|'d       | j                  j                  rZ| j                  dEk(  rK| j                  j                  | j                  j                  j                  | j\                           | _n        | j                  j                  j                  | j                     | _}        | j                  j                  j                  | j                     | _        | j                  j                  j                   | j                     | _        | j                  r}| j                  |#k7  s/| j                  j                  dz   t}        j|                         k  r?t}        j|                         | j                  _        | j                  | j                         | jF                  rd#|d<   d#|d<   d#|di<   d#|"di<   | j                  j                  jA                  | j                  | j                  dd      \  }*}+d|*j                  v sd|*j                  v r%|*j                  |+      },|*j                  |,      }-n|*}-|-r|-j                  d#| j                        ndgdz  \  | _        | _        | _        | _        | _        | _        | _        | _        |-| _        |*| _        |+| _        | j                  j                  | j                  j&                  xs d       d|*j                  v r)| xj                  t(        z  c_w        d| j                   d<   	 | j+                         }.| j$                  dv r| j-                         xr | j4                  	 | j.                  ry| j                  j<                  j0                  j!                  | j.                  d       | j                  j<                  j2                  j!                  | j.                  d       S S | j$                  dnk(  r| j5                         xr | j4                  	 | j.                  ry| j                  j<                  j0                  j!                  | j.                  d       | j                  j<                  j2                  j!                  | j.                  d       S S |.s| j,                  jA                  d+d      }/| j,                  jA                  dd      }0| jJ                  rdnd}1|0r|/rdnd}2d}| j                  || j$                  |0|1| jL                  |/|2fz  d       t3        dwd      | j$                  dk(  r| j7                         xr | j4                  	 | j.                  ry| j                  j<                  j0                  j!                  | j.                  d       | j                  j<                  j2                  j!                  | j.                  d       S S | j$                  dk(  r| j9                         xr | j4                  	 | j.                  ry| j                  j<                  j0                  j!                  | j.                  d       | j                  j<                  j2                  j!                  | j.                  d       S S | j$                  dk(  r| j;                         xr | j4                  	 | j.                  ry| j                  j<                  j0                  j!                  | j.                  d       | j                  j<                  j2                  j!                  | j.                  d       S S | j$                  dk(  r| j=                         xr | j4                  	 | j.                  ry| j                  j<                  j0                  j!                  | j.                  d       | j                  j<                  j2                  j!                  | j.                  d       S S | j$                  dk(  r| j?                         xr | j4                  	 | j.                  ry| j                  j<                  j0                  j!                  | j.                  d       | j                  j<                  j2                  j!                  | j.                  d       S S | j$                  dk(  r| jA                         xr | j4                  	 | j.                  ry| j                  j<                  j0                  j!                  | j.                  d       | j                  j<                  j2                  j!                  | j.                  d       S S | j$                  dk(  r| jC                         xr | j4                  	 | j.                  ry| j                  j<                  j0                  j!                  | j.                  d       | j                  j<                  j2                  j!                  | j.                  d       S S | j$                  dk(  r| jE                         xr | j4                  	 | j.                  ry| j                  j<                  j0                  j!                  | j.                  d       | j                  j<                  j2                  j!                  | j.                  d       S S | j$                  dv r| jG                         xr | j4                  	 | j.                  ry| j                  j<                  j0                  j!                  | j.                  d       | j                  j<                  j2                  j!                  | j.                  d       S S t3        ddj                  | j$                              #  ddj1                  |      z   dz   }t3        dd|      xY w# t2        $ r}d| _        d| _        d| _        d| _        |j6                  dk(  rddini }	 | j9                  t;        |      |j6                  |d       n#  Y nxY w|j                  r| j                  d |j                  z   d!       Y d}~yd}~ww xY w#  | j\                  }d| _/        | j                  jX                  d0k7  r/d1}| j                  || j                  jX                  |
fz  d       n}ta        |      D cg c]  \  }}d2d3|z
  |j+                         fz   nc c}}w }}}d4}|| j                  jZ                  fz  }| j                  |d5d6j1                  |      d6d       Y xY w# t        $ r/}dO| j&                  dP|}| j9                  |dQ       Y d}~yd}~ww xY wc c} w c c}}w #  Y oxY w# t        $ r}tI        |t2              st3        d	      }3n|}3	 |3j6                  dk(  r| j                  dd	       Y d}~| j.                  ry| j                  j<                  j0                  j!                  | j.                  d       | j                  j<                  j2                  j!                  | j.                  d       yy| j$                  dv xs d| j,                  v }4| jK                  |3|4      sd| _        tM        |      }5|3|u r|5n
tO               }|3j6                  dk7  s| j                  rB| j                  d|3j6                  |dK| j                  z   fz  |5jE                  d      rd!nd       |5d| j                  d}| j                  r|d| j                  dz  }d|5v r5| j                  j<                  j                  jQ                  d       |dz  }dtS        |      j                  dLdM      z   }%|3j6                  dk(  rddini }| jU                  |%|3j6                  |d       |3j                  r| j                  d |3j                  z   d!       | j4                  cY d}~| j.                  ry| j                  j<                  j0                  j!                  | j.                  d       | j                  j<                  j2                  j!                  | j.                  d       S S # t2        $ r Y Y d}~| j.                  ry| j                  j<                  j0                  j!                  | j.                  d       | j                  j<                  j2                  j!                  | j.                  d       yyw xY wd}~ww xY w# | j.                  ry| j                  j<                  j0                  j!                  | j.                  d       | j                  j<                  j2                  j!                  | j.                  d       w w xY w)z(returns true if connection can be reusedzOrigin, PW, Cookiezno-store, max-age=0)Varyrp   Fr   zclient rejected (--ipa)rm   r        z+BUG: trailing newline from previous requestz1;31)r   r   r	   N:z#[ z ]
#[ z ]r   zbad headers)r   GETz[junk]HTTP/1.1  WWW-AuthenticateBasic realm="a"T)statusr   volsanzadditional error context:
   z
user-agentr   zrclone/
connectionclosezHTTP/1.0z
keep-alivezx-forwarded-protohttpsr   z%s:%sz::ffff:   ,i zXglobal-option --rproxy %d could not be used (out-of-bounds) for the received header [%s]z2  rproxy: %d   if this client's IP-address is [%s]ry   a  could not determine the client's IP-address because the global-option --rproxy has not been configured, so the request-header [%s] specified by global-option --xff-hdr cannot be used safely! Please see the "reverse-proxy" section in the readme. The best approach is to configure your reverse-proxy to give copyparty the exact IP-address to assume (perhaps in another header), but you may also try the following:


zgot header "%s" from untrusted source "%s" claiming the true client ip is "%s" (raw value: "%s");  if you trust this, you must allowlist this proxy with "--xff-src=%s"%szcf-connecting-ipa    Note: if you are behind cloudflare, then this default header is not a good choice; please first make sure your local reverse-proxy (if any) does not allow non-cloudflare IPs from providing cf-* headers, and then add this additional global setting: "--xff-hdr=cf-connecting-ip"z  Note: depending on your reverse-proxy, and/or WAF, and/or other intermediates, you may want to read the true client IP from another header by also specifying "--xff-hdr=SomeOtherHeader".z.0.0/16z/64z or "--xff-src=lan"zx-forwarded-hostz;malicious user; illegal Host header; req(%r) host(%r) => %rbad_hostzillegal Host headers   illegal Host headerzclient uncapped*z[H] {}: [33m[{}]r   r   zdid you mean '?' instead of '&'/.uqe/r   utf-8replacez/?zbad uqe in request [z]: r  z#malicious user; Cc in req0 %r => %rcc_r0z
Cc in req0=+z;malicious user; bad char in query key; req(%r) qk(%r) => %rbc_qzillegal qkeyz1malicious user; Cc in query; req(%r) qp(%r) => %rcc_qzCc in querykz4malicious user; illegal filekey; req(%r) k(%r) => %rbad_kzillegal filekeys   illegal filekeyzRincorrect --rp-loc or webserver config; expected vpath starting with %r but got %rcookiei    zcookie header too big;cppwscppwdr   
   2   zu wot m8qrOPTIONSzillegal relpath; req(z) => bad_vpzinvalid relpathsauthorizationasciir   zsend her back  zthe idp-h-key header ("%s") is not present in the request; will NOT trust the other headers saying that the client's username is "%s" and group is "%s"zgot IdP headers from untrusted source "%s" claiming the client's username is "%s" and group is "%s";  if you trust this, you must allowlist this proxy with "--xff-src=%s"%szb  Note: you probably also want to specify --idp-h-key <SECRET-HEADER-NAME> for additional security   z0.0/16z<script>var is_idp=1</script>
zunknown username:    dotsltxdevxvolr{   norobotsnoindex, nofollowX-Robots-Tag)r  HEADz<?>originhttps://zhttp://	modifying	strippingaN  cors-reject %s because request-header Origin=%r does not match request-protocol %r and host %r based on request-header Host=%r (note: if this request is not malicious, check if your reverse-proxy is accidentally %s request headers, in particular 'Origin', for example by running copyparty with --ihead='*' to show all request headers)zrejected by cors-checkPOSTPUTPROPFINDDELETE	PROPPATCHLOCKUNLOCKMKCOL)MOVECOPYzinvalid HTTP verb "{0}"  )rI  rJ  content-lengthr   zhttp%d: %s[0m, %rzclient d/c z
URL: 
zhint: database is locked
log_stacksz(hint: important info in the server log
s   <pre>)r   r   	early_ban	is_bannedr   ipa_nmmapr   r   terse_replyrx   
settimeoutrN   r   s_theadr   popsplitr   r   r   stripr   lowerjoinr(   r   r   
loud_replyr   r   nreqr   r   r   r   r   r   r   familysocketrl   r  getsocknamerproxyxff_hdrr   bad_xff	enumeratexff_nmr   
compressedxff_lan
set_rproxyr   RE_HOSTr   spancbonkgmalacloserD   r   lf_urlr   iheadlistsortedkeysformatr   uqer_   encodedecoder   RE_CCrd   endswithr   rb   RE_KUPARAM_CC_OKr&  r   r   lencopyr   rsp_slpsleeprsp_jtrrandomrc   r   r   r   r   tx_qrrS   tx_404no_bauth
bauth_lastr/   r   r   r   hashr   r   r   	idp_h_usr	idp_h_grp	idp_h_keyr   idp_checkinbrokerr   areadr   asesset_idp_cookieipuipu_iuipu_nmr   awriter   aadminr   freshen_pwdget_pwd_cookier  	canonicalchk_ap
can_accessr   r   r   r   r   r   r   r   r   r   r   s_tbodyr#   _cors
handle_getr   dlidlshandle_optionshandle_post
handle_puthandle_propfindhandle_deletehandle_proppatchhandle_lockhandle_unlockhandle_mkcolhandle_cpmv
isinstancer   strrJ   sayrA   reply)6r   headerlinesheader_liner-  r  r   r   htrusted_xffrw   r	  zslcli_iptzdpipxffszs2ru   nkar   rtr   rz  r   queryptn_ccr   arglistre_kk_safesvxzsllr   	cookie_pwbauthzbhpwidp_usridp_grptrusted_keyr   r   apr   cors_kr   rE  protoguesspexr   ems6                                                         r   runzHttpCli.run'  s    )2

 994>>#399DII$4$4$8$89J$KHH.2S#&'	FFa %dggtyy/@/@$))BSBSTK$Dq>F&Q"
:5@^5I5I#5N2	48T] $/qr? 9K'--c15EAr.0hhjDLL+90 			q ,,""<4++I6\\lB/557 * 
MMZ'=2+= 	 LL0"5;;=HTDHH 	 LL$$V,2	yyvv}}. IINN	tvv113BQ77&(mmI&>BqrFB	II,,""499#4#45Cq5FAiinH V\\^F" iinnQ'yy'' DA||''(:;  v  v  [  [cz XXciinRa&89IE(ue<GG37993D3D3H3H3M/SUCHHQ$))"3"3S&#r3!OOQRS#'DL$DG#'99#7#7#@DL $ 0 01C D Q		DI"&KNN499%diinn,BMAHHQ$((B1668A;=(9::A>JJtyy~~**B
<QR3S9>>99))""CBSyWtyy{*6HH.2B%*DNyyg9SZZ%9!999??t{{99??Dd{F4<<#4#4#678 Gll&&q)?HH3::1cBAFG
 $((?s$((29DI99==X1#xx~~c215;;HEuC(+W 56==gyQ##C(+0%)<DH*/7DH MM$((#B5AHHQ"b!/00!4JJtyy~~**BFS#& dhhTXX&E"'.."5D%LE!XX^^C3NE7UOE"'.."5D%LED!F]]3'  !8GGCOEAr ""((*"4"4S#">?BBKKNUAHHQ$((Aq!/?!@@!DJJtyy~~22DHHfnU$$S#. GGIq	; !2&MM"%GdhhBqvvx{},=>>B

499>>..&-P  c*A D f}KKs,BNAHHQ$((B1668A;=0A!BBAFJJtyy~~22BARS$$%7= 		,c$))++.245hdiikk51115#( {{}99JJtyy(()yy  

6==?TYY->->>?llx(3x$ 7D-0YYs^HsaxAGGCOHDHCGH%!Rqwwy/""55HGHG,JG0DJIg~#V"3%clsGIv;s7|b0OOJsO3
 $ 3 3

DJJ

 	 6>::<$**4::#4		Y8NHH3CSTUJJtyy~~**DHHh@RS;;=3T^^3ll/II&&dii&:&:YYs^A&--g6BZ&&w/ TBHHS!$4TrT$:: E		.)),,++E2Cyy**3/ **T"Rdll&6&6t&<RRIINNtww' yy""499<<#4#4TWW#=> 	
 99ll&&tyy':':;ArG yy** LL$$TYY%8%89?R  #))..+C99++D"&"8488C=K 		+++9YY((DLL8  ;}}-7D$II))$))..*?*?'R& wdii&9&97G%L!LaP& L#yy22  "F  FA"iinnQ/  #cz  HHSYYs^BQ%783>!$#))C.!*<!=!C$	% 6:YY5F5F5J5J35O1UW  c7GR%E!EqI!G Gdiimm111 DG!(DJNN&GGN++G4B++B/HHw@!D99==TZZ3.))$))*:*:*>*>tww*GHDJIIMM''

3	IIMM((4	IIMM((4	77GGy DII$9$9B$>$L$(IIKDII!(>>  F6NF4LF3KGCL))--##DJJ

E5ICRXX288!3c"B))B-CC /2CNN2tzz*w{		
MNMOLNNL $))++3t4!NNk)N/BD^,S	9ZZ\FyyO+(;T^^;\ zz		""&&tzz48		""&&tzz48 [ yyI%**,??X zz		""&&tzz48		""&&tzz48 U ||''6))(E:&*mm
(.4k edii		4OOQRSS":;; yyF"'')<dnn<~ zz		""&&tzz48		""&&tzz48 } e#(;T^^;z zz		""&&tzz48		""&&tzz48 y j(++-@$..@v zz		""&&tzz48		""&&tzz48 u h&))+>>r zz		""&&tzz48		""&&tzz48 q k),,.A4>>An zz		""&&tzz48		""&&tzz48 m f$'')<dnn<j zz		""&&tzz48		""&&tzz48 i h&))+>>f zz		""&&tzz48		""&&tzz48 e g%((*=t~~=b zz		""&&tzz48		""&&tzz48 a ..'')<dnn<^ zz		""&&tzz48		""&&tzz48 [ S";"B"B499"MNNa:inn[99D@S-S99 	DIDH&DM"DN;=77c>#%67rABGGQtTvv6?C	`H!WWF#'DLyy''72vdii&6&6%<!<B
 +4C. !'B Q!Bw
34  
 {!2!2 44DIIcN!CQGT  59XXrB#.z IHXv  (	b&)Sk"88s?$$S#. D zz		""&&tzz48		""&&tzz48 A yyO3W7G4<<7W++C6%*DNW2Ib6888s?dkkHH/388S#

BR2SS]]=9q
 .0<99TYY88C'2-IINN))--l;GGCC 0 7 7 KK?Bxx3'):;TV

2chh$
G77HH:SWWDaH~~%
 zz		""&&tzz48		""&&tzz48 	   zz		""&&tzz48		""&&tzz48 	O(	V zz		""&&tzz48		""&&tzz48 s  *A#B@ )B@ 8A1A 8BB' BBF <	BGBG!$BGC BG A BG ]=BG `-BG c
B<BG h-BG k-BG m8-BG p--BG s"-BG v-BG y-BG |,BG ~5%BG 'B@@B@ @	BB$@1BB@?(BA(A'BBA(BA,A*0BBBBB$B'A+BFD"BD5D4ABFF	BF?F%BF:F:BF?GBGG
BU;GBU6G?!BSH BU> J+F&BSQBU;QBU> S	BU3S&BU6S'BU> U2BU3U3BU6U6BU;U;BU> U>BBXc                     | j                   j                  r| j                  j                  dd      S | j                  j
                  j                  | j                        S )Nr  r!  )r   plain_ipr   r&  r   iphashrx   r   s    r   dipzHttpCli.dip+  sC    9977??3,,99##%%dgg..r   c                 @   | j                   j                  xj                  dz  c_        |j                  sy|j	                  | j
                  || j                  z         \  }}|sy| j                  j                  j                  d      }|rt        | j                  | j                   j                  j                  d d|| j                  j                  | j                        | j                  | j                   | j"                  dt%        j$                         d| j
                  t%        j$                         |      sb| j                  d|d       || j                   j                  j&                  |<   | j                   j                  xj(                  dz  c_        yy)Nr	   Fxbanr   r   zclient banned: T)r   r   nsuslimbonkr   r   r   r  r   rU   r   r  r  r   r   r   r   r   bansnban)r   gvreasondescrr  r   r  s           r   rs  zHttpCli.cbonk1  s%   		q uu66$''1tyy=1bww}}  (7HHIINN!!GGdhh'JJIIJJIIKGGIIK
" HHE3Q7&*DIINN#IINN1$r   c                 b   | j                   j                  sy| j                   j                  }t        | j                        }||vry||   t	        j                         z
  }|dk  r| j                  dd       ||= y| j                  dj                  |      d       | j                  dd       y	)
NFr   zclient unbannedrm   zbanned for {:.0f} secr  s   thank you for playingr:  T)r   r  rD   r   r   r   r{  r\  )r   r  r   r  s       r   rY  zHttpCli.is_bannedS  s    yy~~yy~~DGG_T>"X		#6HH&*R(//3Q7137r   c                     | j                   j                  d      }| | j                  j                  t               y |sdn|dk(  rdn
t        |      }dt        |      z   | j                  d<   y )NcacheE   ii:	 zmax-age=rp   )r   r   r   updateNO_CACHEintr  )r   r  rw   s      r   permit_cachingzHttpCli.permit_cachingf  s^    (=##H-B5C<SZ,6Q,?)r   c                     | j                   j                  d      }|dk(  xs  | j                  j                  dk(  xr |dk7  S )Nk304yr  rw   )r   r   r   r  )r   r  s     r   r  zHttpCli.k304o  s;    ||'s{Ctyy~~2Bts{Cr   c                     | j                   j                  d      }|dk(  xs  | j                  j                  dk(  xr |dk7  S )Nno304r  r  rw   )r   r   r   r  )r   r  s     r   r  zHttpCli.no304s  s;      )|F		1 4 E#Fr   c                    t        |      }|d d dv }|r|j                  ddd      }|j                  d      rt        | j                  |dd  d      }|j                  d      r|dd  }d}|r| j
                  j                  j                  5  || j
                  j                  j                  vrHt        j                         }|j                  |      }|| j
                  j                  j                  |<    | j
                  j                  j                  |   j                  d	i |}d d d        | xj                  |dz   z  c_        y # 1 sw Y   "xY w)
Nr  z%@%%r   r	   @Tr   r   )r  r&  r   rR   r   r   r   mutexr   jinja2Environmentfrom_stringr  r   )r   
maybe_htmlkvhtmlis_jinjaj2envr  s          r   r  zHttpCli._build_html_headw  s!   :8u$<<R+D??3TXXtABx6D??38DH%% <tyy~~000"..0E++D1C.1DIINN%%d+5tyy~~((.55;;< 	$+%< <s   BEENc           	      `   | j                   d|dt        |   g}|r| j                  j                  |       |dk(  r_| j                  j	                  dd        | j                  j	                  dd        g | j
                  d d  | j                         rVd| _        nN||j                  dt        |      z          |r|| j                  d<   nd| j                  vrd| j                  d<   |j                  | j                  rt        nt               |j                  dt               z          t        | j                  j                               | j
                  z   D ]  \  }}|j                  |d	|        t        }|D ]  }|j!                  |      }	|	sd
}
| j#                  |
| j$                  |||	j'                         d   d  fz  d       | j)                  | j*                  j,                  j.                  |dd       t1        d       | j2                  j4                  r| j6                  r| j2                  j4                  }d|v r|dd  }nBg }|dd  D ]8  }|j9                  d      d   j;                         |v s(|j                  |       : |D ]8  }|j9                  d	      \  }}| j#                  dj=                  ||      d       : |j                  d       	 | j>                  jA                  djC                  |      jE                  d             y #  t1        dd      xY w)Nr   0  zContent-LengthzContent-TypeFContent-Length: ztext/html; charset=utf-8zDate: : z4malicious user; Cc in out-hdr; req(%r) hdr(%r) => %rr   r	   cc_hdrzCc in out-hdrrS  r#  r  z[O] {}: [33m[{}]   rU  r%  r   z!client d/c while replying headers)#r   r"   r   r  r_  r   r  r   appendr   H_CONN_KEEPALIVEH_CONN_CLOSEr2   rx  itemsr  r   r   r   rr  rs  r   r   rt  r(   r   oheadr   r`  rb  r{  rx   sendallrc  r}  )r   lengthr  mimer   responser-  r  r  ru   r  rz  lineshkhvs                  r   send_headerszHttpCli.send_headers  s    #'--&9IJK ##G,S=  !148  6%'D"yy{!&! 2WV_ DE37  0t'7'773M  0 	DNN(M:</0$**0023d6I6II 	0EArOO2./	0  	"Bb!AJdhhBqvvx{},=>>B

499>>..HoNSk!	" 99??t{{99??Dd{ "12, )Bxx}Q'--/47R()  C$B/66r2>BC 		CFFNN6;;x077@A	CABBs   %9L L-c                    |dkD  r|dv r|dk7  s$|j                  d      s|j                  d      s|dk7  s| j                  r| j                  s|dk(  r!| j                  j                  j
                  }nF|dk(  r!| j                  j                  j                  }n | j                  j                  j                  }| j                  j                  j                  }|j                  rt|j                  r|j                  |j                  k  rO| j                  j                  j                  | j                        r | j                  j                  j                  }|j                  r|| j                  j                  j                  k(  sE| j                  j                  r/| j                  j                  j                  | j                        s*| j                  || j                  t!        |      |d       |rt#        | j$                  j&                  j(                  j+                               }t-        ||      }	 t/        t0              j3                  t4        j6                  j8                  d	      d
   }	|j;                  |	j=                  d      d      }| j?                  tA        |      |||       	 | jB                  dk7  r| jD                  jG                  |       |S #  Y NxY w#  tI        dd      xY w)Nr   )r:  r     r  s   <pre>partial upload existss   <pre>source file busyr   r:  rx   r  r   r%  s   PPrD  zclient d/c while replying body)%r   r   r   r   r   g404g403g422gurlr  r   sus_urlsr   r   nonsus_urlsrs  r  rx  r   r   all_volsvaluesrf   r+   __file__rsplitospathsepr&  r}  r  r  r   rx   r  r(   )
r   bodyr  r  r   r  r  r  volsr  s
             r   r  zHttpCli.reply  s&    SL/)#(EF OO,DE 34<<}IINN''3IINN''IINN''99>>&&D$((QUU"2II&&--djj9IINN''uuTYY^^(((yy,,yy,,33DJJ?

1djj#f+7HI		..5578D4&DX&--bggkk1=a@||BIIg$6> 	#d)VT7;	@yyF"t$ 	@>??s   AK) =*K0 )K-0K>c                     |j                  d      sd|d<   | j                  |j                                 | j                  |j	                  d      dz   gt        |      i | y )Nr  text/plain; charset=utf-8r%     
)r   r   rstripr  r}  rx  )r   r"  r   kwargss       r   rd  zHttpCli.loud_reply
  sS    zz&!8F6N

4;;w''1IDJI&Ir   c                 F   d| _         | j                  xs dd|dt        |   t        g}|r&|j	                  dt        t        |            z          |j	                  d       | j                  j                  dj                  |      j                  d      |z          y )NFr  r   r  rU  r%  )r   r   r"   r  r  r   r  rx   r  rc  r}  )r   r"  r  r  s       r   r\  zHttpCli.terse_reply  s     --5:5vx?OP

 LL+gc$i.@@AVv{{5)009D@Ar   c           	         | j                   ry| j                  j                         D ci c]  \  }}||vs|| }}}d|v rC| j                  j	                  d      xs | j                  j	                  d      }|d   |k(  r|d= |j                  |       |sy|j                         D cg c]"  \  }}|rt        |      dt        |      n|$ }}}ddj                  |      z   S c c}}w c c}}w )z
        generates url query based on uparam (b, pw, all others)
        removing anything in rm, adding pairs in add

        also list faster than set until ~20 items
        r   r   r1  r2  r)  r   z&amp;)r   r   r	  r   r   r  rL   rc  )r   addrmr-  r  r  r   r   s           r   urlqzHttpCli.urlq  s     >>!%!2!2!4D2aeDD2:!!'*Gdll.>.>w.GB$x2~tH
		#IKT2"q	6":.!;TTW\\!_$$ E Us   C,C,.'C2c                    d}g }| j                   j                         D ]S  \  }}||v rt        |      dt        |      }|j                  |j	                  dd      j                  d             U |syddj                  |      z   S )N)r   r  r-  r)  r   r*  r   r   r   )r   r	  rL   r  r&  r'  rc  )r   skipretr-  r  r  s         r   ourlqzHttpCli.ourlq7  s    LL&&( 	8DAqDy!!9fQi0AJJqyyc*11#67	8 SXXc]""r   c                 .   | j                   j                  |z   }| j                  ddj                  t	        |      |z   |t        |d      |z         ||      j                  dd      }	|r| j                  |	dd	|i
       y| j                  |	|       y)Nr   z<a href="{}">{} {}</a>Tcrlf)h2preclickr%  r&  i.  Locationr  r   r'  )r   SRSr
  r{  rL   rA   r}  r  )
r   r   sufr   flavorr7  r  use302vpr  s
             r   redirectzHttpCli.redirectF  s     YY]]U"xx'..r
S &+bt*Ds*J   
 &)
$ 	 JJtC*b1AJB  JJtFJ+r   c                    | j                   }|j                  d      }|s6|j                  d      }|r"|j                         j                  d      rd}ny| j                  j                         }|j                  d      rd|v r,|j                  d      d   d	z   }n|j                  d
      d   }| j                  }|j                         }| j                  rdnd}| j                  j                  |d|gz   }d|v st        j                  dd|      |v rd}d}	nd}d}	|j                  dd      }
|r|nd xs d|v rdnd }| j                  j                  rA|xs |xs d}dj                  | j                  j                  j                         }d|d<   d}ndj                  | j                  j"                        }d|
j                         vr|
dz  }
|
j                  d      }|D cg c]  }|j%                          }}|D cg c]  }|j                         |	vs| }}dj                  |      }
|sy||d<   |j'                         |d<   |
r|
|d<   |S c c}w c c}w )NrE  sec-fetch-sitecrossz:|T[]:r   ]r  r  http://r   z(:[0-9]{1,5})?/?$r   )r   F)r   r   zaccess-control-request-headersr#  , truez Access-Control-Allow-Credentialsrangez,Ranger  zAccess-Control-Allow-OriginzAccess-Control-Allow-MethodszAccess-Control-Allow-Headers)r   r   rb  r   r   r`  r   r   r   acaorer   
allow_csrfrc  r   r   mallowacamra  upper)r   ihrE  sfsiter   ohr  good_originsgood_originbad_hdrsacahrK  rO  req_hr  s                  r   r  zHttpCli._corsa  s=   \\!VV,-F&,,.33G<yy ??3t|zz$'*S0::c?1%D==fyy~~eT)B(CC2: 4b&A\QKHK!H
 vv6;%4 
,&CD 	 99(T(SD99TYY^^223D5;B12K99TYY^^,Ddjjl* JJsOE(-.1QWWY.E. %C1()BQCEC99U#D,0()-1ZZ\)*15B-. /Cs   ,I	I!!I!c                     | j                   r| j                  dd| j                  d| j                  }d| j                  v r.	 | j                  d   j                  dd      d   }|d|z   dz   z  }| j                  |       d	| j                  v r| j                  d
| j                         | j                  j                  d      r| j                  j                  d      r/| j                  | j                  j                  d      d   d      S | j                  j                  d      rb| j                  j                  j                  r/| j                  j                  j                  j                  |       S | j                  dd       y| j                  dk(  r/| j                  j                  j                  j                  |       S d| j                  dd  z   }|t         v rt"        j$                  j'                  | j(                  j*                  |      }t,        j$                  j/                  |      s"t,        j$                  j/                  |dz         r| j1                  |      S | j3                  |      S | j5                          yd| j6                  v r1| j                  | j9                  d      j;                  dd             y| j<                  s\| j>                  sO| j@                  sBd}d| jB                  jD                  v r|dz  }| j                  || j                  d| j                  z   fz         | jG                  | jB                  jD                  d   | jB                  | jH                        }|d k(  ry|d!k(  ry|d"k(  rd#| j6                  d$<   n|d%k(  rD| j                  d&       dx| _        x| _        | _%        dx| _&        x| _         | _'        d| _(        nM| j5                  d      S | jR                  jT                  rd$| jV                  vrd'| jV                  vr~d(}d)}| jR                  jX                  r(t[        | jR                  j\                        dk(  r|d*z  }n|d+z  }| j9                  d,||-      }	| j                  |	j;                  dd      d.       y| j                  rq| j^                  j`                  }
|
r|
jc                  | j                        s-| j                  || j                  d| j                  z   fz         | j5                  d      S d#| j6                  d$<   d/| j6                  v r| je                         S d0| j6                  v r| jg                         S | j^                  jh                  r[d1| j6                  v r| jk                  g       S d2| j6                  v r| jm                         S d3| j6                  v r| jo                         S | j                  s| jV                  rd4| j6                  v r| jq                         S d5| j6                  v r| js                         S d6| j6                  v r| ju                         S d7| j6                  v r| jw                         S d'| j6                  v r| jy                         S d8| j6                  v r| j{                         S d9| j6                  v r| j}                         S d:| j6                  v r| j                         S d;| j6                  v r| j                         S d$| j6                  v r| j                         S d<| j6                  v r| j                         S d=| j6                  v r| j                         S | j                         S #  | j                  d   }Y &xY w)>N4r    @rJ  r)  r	   z [[36mz[0m]r   `-- z.cprz	.cpr/ico/r   ry   T)exactz	.cpr/ssdps!   ssdp is disabled in server configr   Fz.cpr/metricszweb/r  .gzcf_challengecfr%  r&  z@%s has no access to %ron403z (on403)rI  falsehomer   r  allowz!plugin override; access permittedhczUcopyparty refused to start due to a failsafe: invalid server config; check server logzyou may <a href="/?h">access the controlpanel</a> but nothing will work until you shutdown the copyparty container and %s config-file (or provide the configuration as command-line arguments))zadd a)zfix ther   )h1r5  r  treescandeletemover  reloadstacksetckresetsharesr  ruidpupsrss)Er   r   r   r   r   r`  r   r   r   tx_icor   r   ssdpr  metricstxr   r  r   rc  r   modr   existstx_filetx_resr  r   r
  r}  r   r   r   r   r  on40xr   r   r   r   r   r   badcfg1r   is_lxcr  cfg_files_loadedr   r  r   tx_treescanvolgetmod	handle_rm	handle_mv	handle_cphandle_reloadtx_stackrm  set_cfg_resettx_svcs	tx_sharestx_dlstx_rupstx_idp	tx_mountstx_upstx_rss
tx_browser)r   logmsgrvalres_pathr  r  r0  zs1r  r  r   s              r   r  zHttpCli.handle_get  s   ;;&*ii4::FF$,,&1<<066sA>qAD ,-
::HHVdhhdjj23 ::  (zz$$[1{{4::#3#3C#8#<D{IIzz$$[199>>&&99>>..44T::JJCSI zz^+yy~~--0066

12.H3WW\\$&&**h788??2&#((//"u**E<<++;;x00KKMT[[(JJtxx~,,Wi@A}}T^^DLL)A$''--'Zdjj#

*:;;<jjw!7$((K&=G^ F]')DKK$G^HH@AEIIDMIDNT]FJJDOJdlT^%)DN;;t,, II%%4<</DLL0qC [Cyy''C		0J0J,Kq,P!J.!L088Ecc8:DJJt{{7I>D::))//Ccjj&<djj#

2B%C!CD;;t,,#%C T[[ <<>!T[[ <<>!994;;&~~b))$~~''$~~''zzdll4;;&))++$++%}}&$++%zz|#$++%))++t{{"||~%4;;&~~''#{{}$t{{"||~%#{{}$$++>>##DKK;;= DKK;;=   W1<<0Ds   "]9 9^c           
         | j                   r+| j                  d| j                  d| j                         | j                  s| j                  d      S | j                  }|j                  j                  d      st        dd      | j                  }| j                  j                         }|rt        |d      st        st        dd	      t        dd
      |g}d| j                  v rd}nd}t!        | j                  j                  d| j"                  j$                              }|dv rd}|rRg }|j'                  d      D ]$  }|j)                  d       |j)                  |       & |ddj+                  |      dz  }| j                  j                  d| j"                  j,                        }	|	j/                         }
t0        j                  |
      }|st        dd      |d|z   z  }|	|
k(  r|dz  }t3        | j                  j                  d      xs | j"                  j4                        }|j7                  | j                  | j                  g||dd|      d   }| j8                  j                  d      }|r>dt;        |dd      }d t;        |dd      }|D ]  }|d!xx   d"|d!   v r|n|z  cc<    ndx}}| j                  j                  d#      xs | j<                  j'                  d$      d%   }t;        |dd      }| j>                  rd&nd'd(| j@                  d$}|| j                  d)d  z   }| jB                  r|| j"                  jD                  z  }t;        |dd      }|j'                  d"      d   |z   }d*|d+|d,|d-g}d.}d$|v r|jG                  d$d)      nd|f\  }}	 |jH                  | j                  jJ                     jM                  |||f      jO                         d   }tQ        jR                  tT        jV                  j+                  |jY                  |      |             |t[        | j<                  |      d/|}t;        |dd      }d0}|j)                  ||||fz         d}d1| j                  j                  v }|D ]e  }|r7tT        jV                  j+                  | j                  jJ                  |d!         }t;        ||d!   dd      }t]        |d!   j'                  d"      d   j'                  d$      d%         }t;        |dd      }t!        |d2   j                  d#      xs d      } t!        |d2   j                  d3      xs d      }!| r	|!r|!d4| n| xs |!}"|"rt;        |"dd      n|}"t;        t_        ||            }#ta        tc        d|d5               }$||||"|$||#|d6   f}%d7|%z  }|d2   j                  d8      }&|&r	|d9|&fz  z  }|j)                  |d:z          h |j)                  d;       dj+                  |      je                  d<d=      }'| jg                  |'d>d?       | j                  d@ti        |      ti        |'      fz         y#  Y xY w)ANzRSS  r[  Trs    z RSS is disabled in server configp_endr  z,sqlite3 not found on server; rss is disabledz7server busy, cannot generate rss; please retry in a bit	recursivezup.rd like ?||'%'z
up.rd == ?fext)TrueFalser   r  z+up.fn like '%.'||?z and ( z or z )sortr   z!invalid sort key; must be m/u/n/sz order by up.z descnfFr   r   z?pw=z&pw=rpr   titler   ry   r  rF  rG  r	   z<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<atom:link href="z4" rel="self" type="application/rss+xml" />
		<title>z/</title>
		<description></description>
		<link>z-</link>
		<generator>copyparty-2</generator>
%select fn from cv where rd=? and dn=?z?th=jfzN		<image>
			<url>%s</url>
			<title>%s</title>
			<link>%s</link>
		</image>
rmagictagsartist - r   rt   z		<item>
			<guid>%s</guid>
			<link>%s</link>
			<title>%s</title>
			<description>%s</description>
			<pubDate>%s</pubDate>
			<enclosure url="%s" type="%s" length="%d"/>
.durz)			<itunes:duration>%d</itunes:duration>
z
		</item>
z	</channel>
</rss>
r%  r&     text/xml; charset=utf-8zrss: %d hits, %d bytes)5r   r   r   r   r   r  r   r  r   r(   r   r   	get_u2idxr   r!   r   r  r   rss_fextr`  r  rc  rss_sortrb  RSS_SORTr  rss_nf	run_queryr   rA   r   r   r   r   RSr  currealpathexecutefetchoner   statr  r   r  re   rd   r9   r2   maxr}  r  r  )(r   r   r   idxuvuqr  r  extr  r  nmaxhitsr   q_pwa_pwr  r  etitlebaseurlfeedefeededirlinkr0  qcrdcdncfncv_urlr  	use_magiciurltag_ttag_adescr  lmodzsadurbrets(                                           r   r  zHttpCli.tx_rss2  s   ;;HHdhh

;<}};;t$$WWxx||E"@AAhhii!!#'#w/S"PQQWXXU$++%$BB););<=""BCxx} 

01		# 6;;s#355Bkkoofdii&8&89iik\\#ABB
o""#:'MB4;;??4(<DII,<,<=}}TZZ$''BE5$OPQR\\d#*2tT:<D*2tT:<D <$3!D'>4t;< D4(EDJJ,<,<S,A",EUD$/ }}G&0II
 !"%tyy||#GD$-;;s#A&- fh
(
 4),3::c1%"cS	''$''**+33ASzBKKMaPCHHRWW\\",,s"3S9:'.djj#0FMF t4FB JJrVVX667 -	 	-AWW\\$''"2"2AdG<!D':D$GDQtW]]3/288=bABEtT2E&	g.4"5E&	h/526E165u-u~PUD48;tT40eDz%45Dc!QtWo.DudD$agFC 	  F)--'CENNJJrO+,;	-> 	

+,wws|""7I6

478)SYD	,BBCS	s   2CY0 0Y5c                    | j                   rW| j                  d| j                  d| j                         d| j                  v r| j                  d| j                         | j
                  j                  rt        dd      | j                  }| j                  }|j                  |      }d|j                  v r| j                  dk(  rt        d	d
      ddlm} d}|j                         }t        }t!        | j"                  j%                  dd            }|rd}	| j'                         d   D ]  }
|	|
z  }	|
rt)        |	      dk\  s n  ||	j+                  |d            }t-        d |D        d       }|5t/        |D cg c]   }|j0                  j3                  d      d   " c}      }t!        t5        j4                               }t7        j8                  ddddddd|||f
      }	 t;        j<                  |      }d|d}g }| j"                  j%                  dd      jG                         }|dk(  rC| jH                  s_| j                  s | jJ                  jL                  jN                  r3d}|d| j                  z   fz  }| j                  |d        t        d	|      t=        jP                  |d!   jR                        s7d"}|d| j                  z   |d!   fz  }| j                  |d        t        d#|      | j
                  jT                  s(| j                  d$d        d%}| jW                  |d&d'       y(|jY                  ||t/               | j                  d(| j
                  jZ                   d)*      }nu|d+k(  st=        jP                  |jR                        sG| jH                  sD| j\                  s7| j                  d,d| j                  z          t        d	d
      |d-k(  r|j_                  || j                  | j
                  jZ                   d(d)ggd.|j                  vd(/      \  }}}| jH                  sg }| j`                  s<t/        tc        |D cg c]  }|d   	 c}            }|D cg c]  }|d   |v s| }}|D cg c]
  \  }}||d }}}||D cg c]  }||d	 c}z  }n8d0}| j
                  jT                  rd1nd}t        d2|je                  ||            | jH                  s;| jf                  s/|s-| j                  d,d| j                  z          t        d	d
      d3|v rh| j
                  jh                  sRtk        |jN                  d)      \  }} }| r3tm        |      tm        | |z
        d4}!d5|v r|!d6   |!d5<   d7|v r|!d3   |!d7<   ni }!ni }!to        jp                  |g|      }ts        | j
                  jt                  ts        |j                  |            }"d8}#| jw                  d d9d:|z   d;d<i       d}$d=|j                  v }%d>}&|&je                  |      }&|D ]  }ts        |"|d?         }'|d!   }ty        d|jz                        }(t=        j|                  |jR                        r7	 t;        j<                  t6        j~                  j                  ||d?               }t=        jP                  |jR                        })|&d@t        |'      |)r|'rdnddAz  }&t        |'j3                  d      d         t        |(      |)rdBnddCdD}*|)sV|%r#t6        j~                  j                  ||d?         }$t        t        |'|$            |*dE<   tm        |j                        |*dF<   n|!r|*j                  |!       i }!|*j                         D ]%  \  }+}|+|vr|r|&dG|+dH|dI|+dHz  }&|&dG|+dJz  }&' |&dKz  }&|D cg c]  }||*vsdG|dJ },}|,r'|r%dL}|&|je                  dj                  |,            z  }&|&dMz  }&t)        |&      |#k\  s| j                  |&||#      }&t)        |&      |#k\  r" |&dNz  }&|&r| j                  |&||#      }&|&r| j                  d||#       y(c c}w # t>        $ r=}|j@                  t@        jB                  t@        jD                  fvr t        d      d }~ww xY wc c}w c c}w c c}}w c c}w #  Y xY wc c}w )ONzPFIND r[  r    `-- r  #WebDAV is disabled in server configdavauthr#  r  authenticater	   )	parse_xmlr%  rT  r   r      r&  c              3   d   K   | ](  }|j                   j                  d       d   dk(  s%| * yw)}ry   propN)tagr`  .0r  s     r   	<genexpr>z*HttpCli.handle_propfind.<locals>.<genexpr>  s)     LqQUU[[-=b-AV-KLs   &00r  ry   iA  rz   r{   r   r   )r>  stdepthinfinityz)depth:infinity requires read-access in %rr   rm   r  z6depth:infinity can only be used on folders; %r is 0o%or   zclient wants --dav-infsc   <?xml version="1.0" encoding="utf-8"?>
<D:error xmlns:D="DAV:"><D:propfind-finite-depth/></D:error>r:  zapplication/xml; charset=utf-8TF)wrap0zinaccessible: 1davrtlstatthrowz6invalid depth value '{}' (must be either '0' or '1'{})z or 'infinity'i  quota-available-bytes)r  quota-used-bytes	quotausedr  quotai     text/xml; charset=zTransfer-Encodingchunkedr  zB<?xml version="1.0" encoding="{}"?>
<D:multistatus xmlns:D="DAV:">r>  z<D:response><D:href>/z</D:href><D:propstat><D:prop>z<D:collection xmlns:D="DAV:"/>zv<D:lockentry xmlns:D="DAV:"><D:lockscope><D:exclusive/></D:lockscope><D:locktype><D:write/></D:locktype></D:lockentry>)displaynamegetlastmodifiedresourcetypesupportedlockgetcontenttypegetcontentlengthz<D:>z</D:z/>z:</D:prop><D:status>HTTP/1.1 200 OK</D:status></D:propstat>zW<D:propstat><D:prop>{}</D:prop><D:status>HTTP/1.1 404 Not Found</D:status></D:propstat>z</D:response>z</D:multistatus>)Ir   r   r   r   r   r   no_davr(   r   r   r  r  dxmlr  rP  r   r  r   r   get_body_readerr  r~  nextsetr  r`  r   r  stat_resultr   r  OSErrorerrnoENOENTENOTDIRrb  r   r   r   r  S_ISDIRst_modedav_infr  zipgen
no_scandirr   lsr   r1   r{  r   nidr7   r  	itertoolschainre   r   r  r  st_mtimeS_ISLNKr   rc  rL   rA   r2   r9   st_sizer  r	  
send_chunk)-r   r   r   tapr  encuencpropsclenbufrbufxrootxtagr  zivstr  r   topdirfgenr  r  r  _vfs_lsvfs_virtr  namesr>  r  t2bfreebtotdfvtopchunkszr  r  r0  r  mtimeisdirpvsr-  missings-                                                r   r  zHttpCli.handle_propfind  s#   ;;HHtxx<=dhhtzz3499CDDWWhhll3 TZZ3%6n--# yy{4<<##$4a89C,,.q1 ts3x50
 cjji89ELELdSD4@aQUU[[-b1@A nneRQdAr2rJK	#B "%  *5;;=J==djjDIIMM4J4J?tzz)++AS!n$<<t 4 45Ltzz)6$<88AS!n$99$$115|

2s$DE
 99

II(((  D c\bjj!9==sTZZ/?ABS.11c\"$%%

II(((RXX- #( #Avx ==<<,F-Cqad-CDE%+=qtu}!==7=>VR2R(>D>8<aAS)<<D IA%)YY%6%6!BBahhub122}}T^^DHH3+;=>n--"e+DIIMM#BKK7NE4-0Z(+D5L(9 %'&();&<B{O%'&()@&A7Bx.TYY[[%#"67#+c14G3S	
 (	Sjj 1	9AtQtW%BD'B2;;'E||BJJ'"'',,sAdG"<=B LL,Er
+ C  +288C=+<=#-e#4DI @r "Z	C c1T73B(3Jr24F(G$%*-bjj/&'

2		 ,1E>1a88C++C, OOC16GA!3,A'GGG4mqxx 011?"Cc(g%ooc38 c(g%a1	9f 	!!//#sG4C  	C)U A  	xxemm<<+	x .D=><`D HsT   %a3-a8 c8ccc'c?6c	cc8	b>8b99b>cc                 P   | j                   rW| j                  d| j                  d| j                         d| j                  v r| j                  d| j                         | j
                  j                  rt        dd      | j                  s9| j                  | j                  dd| j                  z          t        d	d
      ddl	m
} ddlm}m}m} d}| j                         d   D ]  }||z  }|rt!        |      dk\  s n | j#                         ry|j%                  dd      j'                         }| j)                  |      }|j+                         }	|j%                  |d      }|j-                  dd        |d      }
|
j/                  d ||             |
j1                  d      }|D ]  }|j3                           d} ||      }
|
j1                  d      } |dt5        | j
                  j6                  | j                  z               }|j/                  d|       |
j1                  d      }|j/                  d|       dj9                  |	      }||j;                  |
      j%                  d      z  }| j=                  |j?                  |d      dd|z          y) NzPPATCH r[  r     `-- r  r  z tried to proppatch r   r  r  r   ElementTreer	   mkenodmktnodr  r      Tr9  r&  DDAV:zD:orzz+./{DAV:}propertyupdate/{DAV:}set/{DAV:}propzy<multistatus xmlns="DAV:"><response><propstat><status>HTTP/1.1 403 Forbidden</status></propstat></response></multistatus>z./{DAV:}responseD:hrefz./{DAV:}response/{DAV:}propstat$<?xml version="1.0" encoding="{}"?>
r%  r  r  ) r   r   r   r   r   r   r  r(   r   	xml.etreer,  r  r.  r/  r  r  r  	_applesanr~  rb  get_xml_encrP  register_namespaceinsertfindclearrL   r:  r{  tostringr  r}  )r   ETr.  r/  r  r  r  txtr  r  r  xpropzeele2r0  s                   r   r  zHttpCli.handle_proppatch  s6   ;;HH$**=>dhh

4599CDD~~HH4::sTZZ?OPQn--/33((*1- 	D4KC3s8z1	
 >>jj),224s#yy{jji(
c6*wQ	#'

IJ 	BHHJ	 N#ZZ+,HfTYY]]TZZ%?@A
		!RZZ:;
		!U5<<TBr{{5!((11

3::c9-s4H34NOr   c                 d   | j                   rW| j                  d| j                  d| j                         d| j                  v r| j                  d| j                         | j
                  j                  rt        dd      | j                  sGd| j                  vr9| j                  | j                  dd	| j                  z          t        d
d      ddl
m} ddlm}m}m} | j                   j#                  | j$                        }d}| j'                         d   D ]  }||z  }|rt)        |      dk\  s n | j+                         ry|j-                  dd      j/                         }| j1                  |      }	|	j3                         }
|j-                  |	d      }|j5                  dd        ||      }|j6                  dk(  sJ t9        t;        j<                               }|j?                  d      4| j@                  jC                  dd      }|jE                   |d|             |jE                   |dd             |jE                   |d |d|                   |jE                   |d  |dtG        | j
                  jH                  | j                  z                             |d!      } |d" |d#|            }|D ]  }|jE                  |        d$jK                  |
      }||jM                  |      j-                  d%      z  }d&}| j                  r?tN        jP                  jS                  |      s tU        tW        |      d'      5 }d(}d d d        d)jK                  |      | jX                  d*<   | j[                  |j]                  |	d      |d+|	z          y# 1 sw Y   NxY w),NzLOCK r[  r  r\  r  r  Microsoft-WebDAV tried to lock r   r  r  r   r+  r	   r-  r   r0  Tr9  r&  r1  r2  z{DAV:}lockinfoz./{DAV:}depthr  r  zD:depthz	D:timeoutzSecond-3310zD:locktokenr3  z
D:lockrootzD:activelockzD:propzD:lockdiscoveryr4  r%  r  wb   z<{}>z
Lock-Tokenr  )/r   r   r   r   r   r   r  r(   r   r   r5  r,  r  r.  r/  r  r   
dcanonicalr   r  r  r6  r~  rb  r7  rP  r8  r  r  uuiduuid4r:  r   r   r  rL   r:  r{  r<  r   r   isfileopenr3   r   r  r}  )r   r=  r.  r/  r  abspathr  r  r>  r  r  lktokenr  lk2r  r   r0  rcr  s                       r   r  zHttpCli.handle_lock  s   ;;HHdhh

;<dhhdjj2399CDD ~~"4DGG"CHHdjj#

:JKLn--/33''$$TXX.((*1- 	D4KC3s8z1	
 >>jj),224s#yy{jji(
c6*s^vv))))DJJL!77#$,LL$$Wj9EIIfY./
		&m45
		&x(?@A
		<&9S2T!UV	
 ^$x(93!?@ 	AJJqM	 6<<TBr{{5!((11>>#((//'":eGnd+ q *0u)=&

3::c9-r3G#3MN s   N&&N/c                    | j                   rW| j                  d| j                  d| j                         d| j                  v r| j                  d| j                         | j
                  j                  rt        dd      | j                  sGd| j                  vr9| j                  | j                  dd	| j                  z          t        d
d      | j                  d d       y)NzUNLOCK r[  r  r*  r  r  rD  rE  r   r  r     T)r   r   r   r   r   r   r  r(   r   r   r  r  s    r   r  zHttpCli.handle_unlock  s    ;;HH$**=>dhh

4599CDD~~"4DGG"CHHdjj#

:JKLn--$$r   c                    | j                         ry| j                  rW| j                  d| j                  d| j                         d| j                  v r| j                  d| j
                         | j                  j                  rt        dd      | j                  st        dd	      	 | j                  | j
                  d      S # t        $ r6}|j                  d
k\  r | j                  d|j                         Y d }~yd }~ww xY w)NTzMKCOL r[  r  r  r  r  r  r  r  r   )r6  r   r   r   r   r   r   r  r(   r   _mkdirr   r  )r   r   s     r   r  zHttpCli.handle_mkcol  s    >>;;HHtxx<=dhhtzz3499CDD~~n--	;;tzz400 	ww#~JJsBGG$	s   0C 	D,DDc           	         | j                   d   }t        j                  dd|      j                         }| j                  rG|j                  | j                  j                        r"|t        | j                  j                        d  }| j                  rf| j                  | j                  d| j                  d|d| j                         d| j                  v r| j                  d| j                         | j                  j                   rt#        d	d
      t%        |      }| j                   j'                  dd      j)                         }|dv}	 | j                  dk(  r| j*                  n| j,                  } || j                  |j                  d      |      S # t"        $ r}|j.                  dk(  rd|_         d }~ww xY w)Ndestinationz^[a-zA-Z]+://[^/]+r   r   z	  --//>  r[  r  r  r  r  	overwrite)frb  rR  r   r:  r  )r   rL  r   lstripr   r   r   r:  r  r  r   r   r   r   r   r   r  r(   rd   r   rb  _cp_mvr   )r   dstr  rX  funr   s         r   r  zHttpCli.handle_cpmv0  sX   ll=) ff)2s3::<tyy}} =c$)),,')*C;;HHtyy$((CTUdhhtzz3499CDDsm \\k2.446n,		"ii61$((txxCtzz3::c?I>> 	ww#~	s   A	F   	G)G  Gc                    | j                   j                  sd| j                  vryd| j                  z   }t	        j
                  t        |      r7d}|j                  |      j                  dd      }| j                  |dd       y	y)
NzDarwin/Fr   z<?xml version="1.0" encoding="utf-8"?>
<D:error xmlns:D="DAV:"><D:lock-token-submitted><D:href>{}</D:href></D:lock-token-submitted></D:error>r%  r&  i  r  T)
r   dav_macr   r   rL  r   r   r{  r}  r  )r   r>  ztr  s       r   r6  zHttpCli._applesanO  sr    99	 84::99["% bB2%%gy9BJJr3 9:r   c                    t        |      }|d | j                  |d      d | }	 |j                  |      }|t        |j                  |            d  }|rt        |      |k(  rt        dd      dt        |      fz  j                  |      |z   }| j                  j                  |dz          |S # t        $ r}|d |j                   }Y d }~d }~ww xY w)Nr&  r  zchunk slicing failedz%x
r&  )r  r}  r~  UnicodeDecodeErrorstartr(   rx   r  )r   r>  r  bmaxorig_lenr  r  udes           r   r  zHttpCli.send_chunk\  s    s8%4jY/6	#

3A #cjjo&()3s8x'4553s8+%--c2S8sW}%
 " 	#k		"C	#s   B0 0	C9CCc                    | j                   rW| j                  d| j                  d| j                         d| j                  v r| j                  d| j                         | j
                  }dj                  | j                  j                  j                        |d<   | j                  j                  s
d|d<   d	|d
<   | j                  dd       y)NzOPTIONS r[  r  z    `-- rH  Allowz1, 2DavDAVzMs-Author-Viar   r  T)r   r   r   r   r   r   rc  r   r   rN  r   r  r  )r   rS  s     r   r  zHttpCli.handle_optionsl  s    ;;HH4::>?dhh56ii		 5 567yyBuI"'B 	!S!r   c                     | j                  d| j                  d| j                         d| j                  v r| j                  d| j                         | j	                  g       S )NzDELETE r[  r  r*  )r   r   r   r   r  r  s    r   r  zHttpCli.handle_delete~  sH    DHHdjj9:$((?HHDJJ01~~b!!r   c                    | j                  d| j                  d| j                         d| j                  v r| j                  d| j                         | j                  s?d}t        | j                  rdnd|| j                  | j                  j                  fz        | j                  j                  s.| j                         r| j                  j                  d      d	k(  S | j                  j                  d
d      j                         dk(  r	 | j                  j                  d       | j!                  d      S #  t        dd      xY w)NzPUT  r[  r  r\  z,user %s does not have write-access under /%sr:  r  rT  r  expectr   100-continue   HTTP/1.1 100 Continue

r   client d/c before 100 continueT)r   r   r   r   r   r(   r   r   r   r  r6  r   r   rb  rx   r  handle_stash)r   r  s     r   r  zHttpCli.handle_put  s   $((DJJ78$((?HH$**./~~>AS!tzz477==6Q2QRRyyDNN$4<<##$45<<<<Hb)//1^CD?@   &&DS"BCCs   E Ec                 	   | j                  d| j                  d| j                         d| j                  v r| j                  d| j                         | j                  j                  dd      j                         dk(  r	 | j                  j                  d       d| j                  v r| j                  d      S | j                  j                  dd      j                         }d|v r| j                         S d|v sd|v sd|v r| j                         S d| j                  v r| j                         S d| j                  v r| j                         S d| j                  v r| j!                  g       S d| j                  v r| j#                         S d|v r| j%                         S d|v r| j&                  j(                  }d|v r| j                  d      S g }i }d|v r1| j+                  d      \  }}}}}}}| j                  d||fz         nd|v r| j-                         \  }}d}	|D ]  }
|	|
z  }	|
rt/        |	      dk\  s n |	r|	j1                  dd      }d }| j                  |t/        |      d!| j                  z   |fz         	 t3        |	j5                  d"d#            }|j1                  dd      }|	j7                  d$      r|d%d  }| j8                  j:                  j                  d&      }|rt=        | j                   | j>                  j@                  jB                  d d&|| j8                  jE                  | jF                        | j                  | jH                  | j                  | jJ                  jL                  jO                  | j                  | j                        tQ        jP                         t/        |	      | jR                  tQ        jP                         |      }d'}| j                  |t/        |      d!| j                  z   |fz         d&|v r9|r'| jY                  |j                  d(      xs dd)*       y+| j[                         S d,|v r| j[                         S t        d-d.j]                  |            t        d-d/j]                  |            #  t        d	d
      xY w# tT        $ r$}| j                  tW        |             Y d }~d }~ww xY w)0NzPOST r[  r  r\  rn  r   ro  rp  r   rq  rawFcontent-typezmultipart/form-dataapplication/jsonz
text/plainzapplication/xmlrj  r  ri  esharezapplication/octet-streamz!application/x-www-form-urlencodedstashsavezurlform: %d bytes, %rprintr   r  r%  r&  zurlform_raw %d @ %r
  %r
r      +    s   msg=r;  xmzurlform_dec %d @ %r
  %r
stdout   r'  Tr   r  z%POST({}) is disabled in server configz!don't know how to handle POST({}))/r   r   r   r   r   r   rb  rx   r  r(   r   rr  handle_post_multiparthandle_post_jsonr  r  r  handle_esharehandle_post_binaryr   urlformdump_to_filer  r  r~  r   r&  r   r   r  rU   r   r   r  r  r   r   r   r   	get_permsr   r   r   reprrd  r  r{  )r   ctypeoptr}  xm_rsppost_szr  r   readerr  r  origr  r  plainr   s                   r   r  zHttpCli.handle_post  sG   $((DJJ78$((?HH$**./<<Hb)//1^CD?@ DKK$$U++  4::< E)--// %'u$ E)((**T[[ >>##T[[ >>##t{{">>"%%t{{"%%''%.**,,.%7))##C#~((//BF}/3/@/@/G,Aq!T10GT?BCC 002	" D4KC3s8u#4
 ::gy9D5AHHQ#d)S4::-=t!DDE+$S[[t%<= "		'9 =>>'2$)!"IE!%!2!24!8B!)0$(HH$(IINN$9$9$($($&$(GG$5$5dhh$?$(JJ$(II$(JJ$(IIMM$;$;DJJ

$S$(IIK$'H$(GG$(IIK$)*"$ :c%j#

2BE%J!JK
 s{OOFJJx$8$>BsOK??,,|((ELLUSTTS=DDUKLLGDS"BCCf % +b**+s%   R FR0 R-0	S9SSc                 v   |d d j                  d      }d}|dz   r||dz   d  j                  d      d   }n~| j                  j                  dd      j	                         }|j                  d      }|dz   r<||d	z      j                  d
      d   j                  d      d   j                  d      }nd}|xs dS )N   z encoding="r   r	   r  "ru  zcharset=r;  r)  r0  r   z"'r%  )r:  r`  r   r   rb  ra  )r   r>  ofsr  s       r   r7  zHttpCli.get_xml_enc  s    $3inn]+7cAgi.&&s+A.C,,"">26<<>C((:&CQw#'l((-a066s;A>DDUK~gr   c                     | j                   j                  }d| j                  j                  dd      j	                         v rt        | j                  |      dfS t        | j                  j                  dd            }|dk(  rbd| _        d| _	        | j                  j                  t        | j                   j                  dz  d	             t        | j                  |      |fS t        | j                  ||      |fS )
Nr  ztransfer-encodingr   ry   rT  FT   r	   )r   s_rd_szr   r   rb  rP   r   r  r   r   rx   r]  r  r  rQ   rO   )r   bufszremainss      r   r  zHttpCli.get_body_reader  s    		!!(()<bAGGII&tww6::dll&&'7<=b="DN#DFFc$))"3"3r"91=>(%8'AAtwww7@@r   c                 ^   | j                         \  }}| j                  j                  j                  | j                  | j
                  dd      \  }}| j                  |      \  }}}}	|j                  |      d   j                  }
|j                  |      }d }|r[| j                  sOt        j                  j                  |      s0t        j                  j                  |      \  }}t!        |      \  }}|
rK|
j#                  | j$                  |||j&                  || j(                  j*                  j,                        \  }}t        j.                  ||j0                         dt2        i}d| j4                  j6                  g}d|j0                  v sd|j0                  v rd	|j0                  v s+d	| j8                  v sd| j8                  v sd| j8                  v r}d
dd}i }d}d| j8                  v sd	| j8                  v rd}d| j8                  v rd}|r0| j8                  j                  |      }|||   n
t;        |      ||<   ||j0                  vrd|j0                  v rdnd}|j0                  j                  d	      }|)|xs d}	 |j                  d      \  }}t;        |      ||<   |j                  |      xs |j                  |      xs d||<   | j=                  dj?                  ||j                  |                   |dk(  rt@        jB                  |d<   d||   d dg}n1|dk(  rtD        j2                  ||   d}dg}n| j=                  dd       dj?                  tG        jF                         | jI                               }| }|r@|j0                  d   j?                  tG        jF                         | jI                               }|||j0                  d}| j4                  jJ                  ri }t        jL                  }|jO                  |       | j4                  jJ                  s|rtQ        |||      }tS        |xs dd      }t        j                  jU                  ||      }|rtG        jF                         |z
  }|rtW        | j                  |      n| j                  }tY        | j<                  | j(                  j*                  j,                  d d|||| jZ                  | j
                  | j                  j                  j]                  | j                  | j
                        ||| j$                  |d      }|s d}| j=                  |d       t_        d|      |j                  d      rta        | j                  j                  |||d         }|r| j4                  jb                  rte        | j<                  |d   ||||||       |\  }| _        }\  }}| j4                  jJ                  rt        jL                  }nct        j.                  ||j0                         t        j                  jU                  ||      }|stW        | j                  |      | _        ||d<   |rk| j4                  jf                  sT| j4                  jJ                  s=t        j                  ji                  |      r|dz   }| j4                  jj                  rd|z   }| jl                  r)|j0                  j                  d      sd| jn                  v st        j                  ji                  t        j                  jU                  ||            st        j                  jq                  |      slt        j                  js                  |      tG        jF                         | j4                  jt                  z
  k\  r!tw        | j<                  ||j0                         d } tx        }!| jz                  j                  d       xs, | jn                  j                  d       xs |j0                  d!   }"|"d"k(  rn|"d#k(  r	t|        }!d}"n|"d$k(  rt        j                  dAi t        } n|"d%k(  rt        j                  dAi t        } ng|"d&k(  rt        j                  dAi t        } nH|"d'v rt        j                  dAi t        } n*|"d(v rt        j                  dAi t        } nt_        d)d*      t        |g|i |\  }#}	 t        j                  jU                  ||      } |!||#| d| j4                  j                        \  }$}%}&|#j                          |
r|
j                  | j$                         |
j                  | j$                  |$       	 |
j                  |$       |
j                  | j(                  j*                  j,                  |j&                  |$       | j4                  jJ                  r	|$|"|%|&||dfS tG        jF                         |z
  x}}'| jn                  j                  d      }(|(rB	 t;        |(      }'t;        tG        jF                               |'f})t        j                  ||)d       |rd+|j0                  v r	 | j(                  j*                  j                  j                  |      }*|*r|rtQ        |d/|*z   |      },n|j                  dd      d   dz   |*z   },|d d0 |d1<   t        |,g|i |\  }#},|#j                          t        j                  jU                  ||,      }-t        | j<                  ||-|j0                         |,}|-}|	r|rtW        | j                  |      n| j                  }tY        | j<                  | j(                  j*                  j,                  d d2|	||| jZ                  | j
                  | j                  j                  j]                  | j                  | j
                        |'|$| j$                  |d      }|sAd3}| j=                  |d       tw        | j<                  ||j0                         t_        d|      |j                  d      rta        | j                  j                  |||d         }|r| j4                  jb                  rte        | j<                  |d   ||||||       |\  }| _        }\  }}t        j.                  ||j0                         t        j                  jU                  ||      }-t        | j<                  ||-|j0                         |-}|stW        | j                  |      | _        t        j                  jq                  |      }.n|$}.|j                  |      \  }}| j(                  j*                  j,                  j                  d4|j&                  |j                  |j0                  ||| j$                  || j
                  d
       d}/| j                  s| j                  rd5|j0                  v rsd6|j0                  v rd7nd}d8| j                  || j4                  j                  ||.t        rdnt        j                  |      j                        d |j0                  d5    z   }/d9| j8                  v sd:|j0                  v r	|/|/rd;nd<z  }/d=jU                  |j                  ||fD cg c]  }|s|	 c}      }0t        |0      }0d>j?                  | j                  rd?nd@| jZ                  | j4                  j                  |0z   |/z         }1|$|"|%|&|||1fS #  Y xY w# |#j                          w xY w#  tw        | j<                  ||j0                          xY w#  Y xY w# t        $ r%}+| j=                  d,|d-|+d.       d }*Y d }+~+d }+~+ww xY wc c}w )BNFTr   vfr^  rF  gzxzpkrn   )r  r  r   r  zcompressing with {} level {}i f_)r^  presetzfallthrough? thats a bugr	   z
-{:.6f}-{}	put_name2)nowcip)suffixfdirr  zxbu.http.dump#upload blocked by xbu server configr:  relocr  .PARTIALr!  daw
x-oc-mtimeckput_cksha512nomd5sha1sha256blake2b2blake2sb2sr  unknown hash algmagiczfiletype detection failed for r  r  za.r  zxau.http.dump#upload blocked by xau server configup2k.hash_filefkfkar  ?k=media
medialinks&v?vr   
{}://{}/{}r  rF  r   )^r  r   r   r   r   r   upload_flagsget_dbvr  r  r   r   r   r&  r  r`  rh   allr   r  r   r   r  makedirsr  rL  r   iobufr   r  r   r{  r:   GzipFilelzmar   r  nwdevnullr  rM   rX   rc  re   rU   r   r  r(   rK   hook_vrI   r  ry  dotpartr   r   getsizegetmtimeblank_wtri   r>   r   rF   hashlibr  USED4SECr  r  blake2br  rT   s_wr_slpr  nupbupchk_szchk_vszutimemagicianr  r   r  r.   r  r   r   r   fk_saltr
   r  st_inorL   r   r  )2r   is_putr  r  r   r   rndlifetimexbuxaur  r  rs   r  open_kaopen_afblvr   r	  r  nlvr  namelessparamsr   rr   r>  hrr  r  tnamhashercopierhalgrY  r  sha_hexsha_b64rq   cli_mttimesr  r   fn2path2rt   vsufr   urls2                                                     r   r  zHttpCli.dump_to_file"  s   ..099==$$TZZUDIS"&"3"3C"8XsCkk#q!%%}}S!t**388>>$3Gww}}T*HD"C[FCgs||T499>>;P;PID# 	Tcii(DM		( CII!2CIIt{{"t{{"t{{"#BBC t{{"ddkk&9t{{"kkooc*%(["S'c#h3#))#"cii/dT t$B~kT!xx}HC!#hBsG ffSk5RVVC[5ABsGHH3::3sLMd{!%3z:"&))r#w?3Q7$$TYY[$((*=6;'..499;DHHJ.OB"D		B99<<FBgyy||tR-RX2r*Bww||D"%x'B*2tzz2&

B		%%		

		''

DJJ?B" 9AS!n$vvgDIIMM4R[Ayy''!$((BwKD"b#sS784D$*b*3yy||ZZTcii8!ww||D"5').tzz2)>DJ)-v499++tyy||QUAV 
?Dyy  Tz YY]]5)\T\\-IHHOOBGGLLt$<=((.HH%%d+tyy{TYY=O=O/OO $		2||%V)9)9$)?V399XCV8T\FDU][[,8,FV^\\-H-FX^^/h/F%%__0x0F''__0x0F011/f//2	77<<b)D(.vq&!TYYEWEW(X%GWgGGIGGDGGGGDGGW%

7#DIINN113<<I
 99<<D'7GT2EE))+((R!!,/[TYY[)2.		$u- 399,iinn--11$7
 #D$*c:C))C+A.4s:C#)#2;x !#99&93	T3/DHHdE399=*2tzz2&

B		%%		

		''

DJJ?B" 9A$		2S!n$vvgDIIMM4R[Ayy''!$((BwKD"b#sS784D$*b*3LL#))4GGLLr2E$syyA D#%*4::r%:
!!$'BB;;s#S		!!LLIIIIGGJJ	
 MMT^^1B		)!qC4;;		!!$!6!6  		$! !D dkk!\SYY%>DDd*Dciib%9?Q!?@u!!}}G&IIIILL5 4'
 gwsBBot GGI$		2
  4LaPn @sW   "|- 5A|5 A}
 %A}1 7/}9 ~*	~*-|25}
$}.1}69	~'~""~'c           
         | j                  |      \  }}}}}}}| j                  |      }	d}
| j                  |
|	||||d d fz         d}| j                  j	                  d      xs | j
                  j	                  d      xs d}|r*|j                  dd      d	   j                         }|d
k(  rd}|dk(  r|}
nY|dk(  sd| j                  v r/||d}|r|d d ||<   ||d<   d
}t        j                  |dd      }
ndj                  |||d d |      }
|r|rd|ini }d| j
                  v rd|d<   d}
| j                  |
j                  dd      d||       y)Nz %s wrote %d/%d bytes to %r  # %s   r%  wantacceptr   r0  r	   r   rv  jsonr  j)fileurlfilesz8   r  r  Tindent	sort_keysz{}
{}
{}
{}
r8  r  acceptedz
X-OC-MTimer%  r&  rG  r  r   )r  _spdr   r   r   r   r`  rb  r  dumpsr{  r  r}  )r   r  r  r  r  r  r  r   r  spdr  r  acjmsgr  s                  r   rr  zHttpCli.handle_stashQ	  sx   >B>O>OPV>W;w$ii .c7GT73B<@@A*[[__V$H(8(8(BHb#q!!$**,B'';A6\SDKK/"g6D$Sb\T
")Y%D

4T:A"))'7GCRL#NA!'CZR4<<'(AlOA

188GY/4
Kr   c                    t        j                          }d}	|	||||| j                  | j                  |fz  }	| j                  |	d       | j                  j
                  rN	 t        | j                  j
                  d      5 }
|
j                  |	dz   j                  dd             d d d        | j                  j                  r| j                  j                  ry | j                  j                  }t        j                  j                  ||      }t         j                  j#                  |      r| j                  d	d
      S t         j                  j%                  |      st!        j&                  |       t)        t!        j*                  |            | j                  j,                  k\  r| j                  dd      S |}|j/                  |       t        |d      5 }|rT|j1                  t3        || j                  j4                              }|sn"|t)        |      z  }|j                  |       |rTd d d        |r=| j                  dj7                  |      d       t9        | j                  ||dz   |       y | j                  dd       y # 1 sw Y   xY w# t        $ r6}| j                  d| j                  j
                  d|       Y d }~&d }~ww xY w# 1 sw Y   xY w)Nz(bad-chunk:  %.3f  %s  %s  %d  %s  %s  %rr  zab+r   r%  r&  zappend z	 failed: zno bakflip; have itr  zno bakflip; too manyrm   rF  zbakflip truncated; {} remainsr	   z.truncz
bakflip okr  )r   r   r   r   r   bf_logrL  writer}  r   	bak_flipsr  bf_dirr  r   rc  r   ry  r&  r  r  listdirbf_ncseekreadminr  r{  r.   )r   rY  r  r  rt   good_shabad_shar  r  r  f2r   sdirfpnremfor  s                    r   bakflipzHttpCli.bakflips	  s5    iik6gxdggtzz2FFA99J$))**E2 DbHHa$h..w	BCD
 yy""diillyyWW\\$(88??2881155xx~~d#LLs{{4 !TYY__4882A66	s"d^ 	rffStyy78C  	 HH4;;DA1E"b8mU;HH\1%ED D J4993C3CRHIIJ&	 	s=     J  %J%J AKJJ 	K"+KKK$c                    |r| j                   xj                  |z  c_        t        || j                        }t        | j                   j                  | j                   j                        }|d|d| j                   j                  S )Nr   z n)r   nbyter8   r   re  )r   nbytesr+  spd1spd2s        r   r  zHttpCli._spd	  sX    IIOOv%Ovtww'tyy		5"D$))..99r   c                 N   t        | j                  | j                  | j                  | j                        | _        | j
                  j                          g }	 | j
                  j                  dd      }|dk(  r| j                         S |dk(  r| j                         S |dk(  r| j                         S |d	v r| j                  ||d
k(        S |dk(  r| j!                         S |dk(  r| j#                         S |dk(  r| j%                         S |dk(  r| j'                         S t)        ddj+                  |            # t        $ r_}|j                  dk(  rD|j                  r8| j                  d       |j                  |j                  |j                  fg}d}n Y d }~*d }~ww xY w)Nact@   rY  z8missing 'act', but looks like an upload so assuming thatbputloginmkdirnew_md)r#  uputr'  tputzipchpwlogoutr  zinvalid action "{}")r&   r   r   r   r   r   parserequirer*   gotfnamedatagenhandle_loginhandle_mkdirhandle_new_mdhandle_plain_uploadhandle_text_uploadhandle_zip_posthandle_chpwhandle_logoutr(   r{  )r   file0r!  r   s       r   r  zHttpCli.handle_post_multipart	  s   %dhh		477DLLQ	++%%eR0C '>$$&&'>$$&&(?%%''""++E3&=AA&=**,,%<''))&=##%%(?%%''S/66s;<<C  	vv}ST&&"((BJJ78 		s   D< <	F$AFF$c                    	 t        d | j                  D              }| j                  |   }| j                  | j                  d      r| j                  }| j
                  }n?| j                  j                  j                  | j                  | j                  dd      \  }}| j                  j                  dd      }|st        dd	      |j                  d
d      j                  d      }|D cg c]  }|st        |       }}| j                  j!                          | j#                  ||d|||      S #  t        dd      xY wc c}w )Nc              3   *   K   | ]  }|d v s|  yw)r)  tarNr   r  s     r   r  z*HttpCli.handle_zip_post.<locals>.<genexpr>	  s     C1qN/BQCs   	r  zneed zip or tar keywordr   TFfiles   zneed files listr   )r  r   r(   _use_dirkeyr   r   r   r   r   r   r   r   r-  r&  r`  rd   droptx_zip)r   r-  r  r   r   r  r	  r  s           r   r6  zHttpCli.handle_zip_post	  s   	9CCCA KKNDGGR(B((Ciimm''

DJJeLGB[[  +6/00

4$**40&+5u!55{{1aRe44'	9788 6s   D7 0E8E7Ec           	      P   	 t        | j                  d         }|dkD  rt        dd      d}| j                  j                  dd      j	                         }d	|v rC|j                  d	      d
   j                  d      j                  d      d   j                         }	 | j                  j                  |      }	 t        j                  |j                  |d            }	 |j                         D ci c]  \  }}||
 }}}dt        |d         fz  |d<   d}	| j                  |	t        |      || j                   | j"                  | j$                  |fz         d| j&                  v sd|v r| j)                  |      S d| j&                  v r| j+                  |      S d| j&                  v r| j-                  |      S t/        |d         }
d|
v rt        dd      | j0                  j2                  j                  | j4                  | j"                  dd      \  }}|j7                  |      \  }}t9        |
d      }
| j:                  s5| j<                  r)|
j	                         t>        v rd|j@                  vrd|
z   }
|
|d<   |j4                  |d <   |jB                  |d!<   ||d"<   | jD                  |d#<   | j"                  |d$<   | j                   |d%<   |j@                  |d&<   | jF                  s|jI                  dd        |rR|jK                  |      }	 tL        jN                  jQ                  |      s!tM        jR                  ||j@                  '       | j^                  5  | j`                  jb                  jd                  jg                  d,|| jh                  jj                        }|j                         }d d d        | jl                  jn                  r| j4                  jq                  | jl                  jr                        rtu        | j4                  tw        |j4                  |            \  }}d-   jq                  |      s0d.}	| j4                  |j4                  ||||d-   f}t        d)|	|z        ||d-   t        |      d  z   |d-<   | jx                  r#d-v r| jl                  jz                  |d-   z   |d-<   t        j|                        }| j                  |       | j                  |j                  d      d/0       y#  t        d      xY w# t        $ r t        dd      w xY wc c}}w #  |}Y xY w#  t        ddt        |      fz        xY w# tT        $ r}| j                  d(|       tL        jN                  jQ                  |      sf|jV                  tV        jX                  k(  rt        d)d*      |jV                  tV        jZ                  k(  rt        dd+      t        d)t]                     Y d }~d }~w t        d)t]                     xY w# 1 sw Y   jxY w)1NrT    r?  i  z	json 2bigr%  ru  r   charsetr	   z =r0  r   r  z&client disconnected while posting JSONr&  z	%d chunksr  z0POST len=%d type=%s ip=%s user=%s req=%r json=%sz#you POSTed %d bytes of invalid jsonsrchshareri  r  r   r   z4your client is old; press CTRL-SHIFT-R and try againFTwo_up_readme_wo_r#  ptopprelr   userr   vcfgr  zmakedirs failed r  !the server OS denied write-accesszsome file got your folder namezup2k.handle_jsonpurlz?share-mapping failed; req=%r dbv=%r vrem=%r n1=%r n2=%r purl=%rrv  r  )Ar  r   r(   r   rb  r`  ra  r   recv_exr)   r  loadsr~  r	  r  r   r   r   r   r   handle_searchhandle_sharer  rb   r   r   r   r  rX   r   r   r    r  r  r   r   r_  r  r   r   r&  r  r  r  EACCESEEXISTrJ   r   r   r   r  askr   apsr   shrr   shr1rg   re   r   r   r  r  r}  )r   r  r  r  json_bufr"  r-  r  zdsr  r  r   r   dbvvremr]  r   r  r0  vp_reqvp_vfsra  s                         r   r  zHttpCli.handle_post_json	  s6   	$,,'789G [ k**  4::<++i(+11$7==cB1EKKMC	Hwww/H
	X::hooc9=>D(,

51q!t55)Sf->,@@F CAHHQ#h-dggtzz488SQQR T[[ FdN%%d++dkk!$$T**t{{">>$''T&\"$;TUU99==$$TZZUDISKK$	T4$

&cii/D=DVyyV||VVyyVzzVwwVyyVHHY%--$C,xx~~c*LL3 \\ 			%%))*<dDIIMMRA%%'C	 99==TZZ22499>>B#DJJcii0FGNFFv;))&1Ujj#))T663v;OS!b&)) 3v;s6{}#==CK}"iillS[8Fjjo

3::g&-?
@W	+  	HFGG	H 6	XCs8}FVVWW^  	067xx~~c*xx5<</$S*MNNxx5<</$S*JKK fh// +,S&(++	 	su   T  T ;%T9 !T/ 4T)T/ AT9 A U AX TT&)T/ /T63T9 9U	X BW??XX%c                 2   | j                   j                         }|rt        |d      st        st	        dd      t	        dd      g }i }| j
                  D ]b  }| j                  j                  j                  || j                  dd      \  }}|j                  xs |}||v rMd||<   |j                  |       d t        j                         }|j                  rNd}	||j                  z
  }
|j                  dkD  r.|
|	k  r)d}t	        d	|j                  |	|j                  |
            d
|v rpt!        j"                  |      }t%        |d         |d<   | j'                  dt)        |      z          |j+                  | j                  ||      }t)        |      }g }d}nn|d   }|j                  d| j,                  j.                        }| j'                  d||fz         |j1                  | j                  |||      \  }}}t%        |      }t        j                         |_        |j                  |z
  |_        | j'                  d||j                  fz         g }| j,                  j2                  D ]  }||v s|j                  |        |D ]  }||vs|j                  |        | j4                  r&|D ]!  }| j,                  j6                  |d   z   |d<   # |||d}t9        j:                  |      j=                  d      }| j?                  |d       y)Nr  r  z/sqlite3 not found on server; search is disabledz1server busy, cannot search; please retry in a bitTFgffffff?z/rate-limit {:.1f} sec, cost {:.2f}, idle {:.2f}r   rG  r  zqj: r  rw   zqj: %r |%d|zq#: %r (%.2fs)r  )r  	tag_ordertruncr%  rv  rQ  ) r   r  r   r!   r(   r   r   r   r   r   r^  r  r   r  p_durr{  r  deepcopyr  r   r  fsearchr   	srch_hitsr   mter   r  r  r  r}  r  )r   r"  r  r#  seenr#  r   r  r   penaltyt_idler  vbodyr  r   taglistrd  r  rw   orderhitrjr   s                          r   rT  zHttpCli.handle_searchb
  s   ii!!#'#w/S"STTQRRII 	DYY]]&&tTZZuEFC''.SCd{DIKK	 YY[99G#))^Fyy36G#3ES!((7CIIv"FGGT>MM$'Ef.E&MHHVd5k)*;;tzz46D:CGE S	Adii112AHH]aV+,#&::djj$1#E D'5d)CIIK	IIN	!S#))$445 	 AG|Q	   	 A~Q	   5 IILL3t94D	5 ?JJrN!!'*

1-
.r   c           
         	 t        | j                  d         x}}	 | j                  d   j                  d      }| j                  d   }|D cg c]  }|j                          }}t        |      dk(  r\t        |d	         d	k(  rKt        |d	         }|d
   }|d   g}t        dt        |      |      D ]  }|j                  ||||z            | j                  j                  j                  | j                  | j                  dd      \  }	}
|	j                  d      d   j                  }| j                   j"                  j$                  }|j'                  d|||      }|j                         }|\  }}}}}}}|t        |      z  }|d   }|}g }d}d}t)        j(                         }d| j                  v rmt        | j                  d         }|d   }| j                   j"                  j*                  }	 ||   \  }}|s!d} | j-                  | |fz         t/               	 d}!||k7  r'|j5                  |d        d} t        d| |!|||fz        t        |      d	kD  r/|j5                  |d        d} t        d| |!|t        |      fz        t7        |||d   z
        }"|dxx   |z  cc<   ||z   }#|#|"kD  r(|j5                  |d        d} t        d| |!||||"fz        |#|"k(  }$d} |$rdnd}%| j-                  | |d d ||#|"|%fz  d       |$r|j5                  |d        n|#|f||<   nd }d}$	 | j8                  j:                  rt<        j>                  }||kD  rd} t        d| ||fz        d} |d   |z  }&djA                  |d   d d g|d	d  D cg c]  }|d d 	 c}z         }%| j-                  | ||||&t        |      |%fz         d }'| j8                  jB                   xr |}(|(r1| jD                  5  	 | jF                  j5                  |      }'d d d        |'xs* tI        tK        |      d| j8                  jL                        }'	 tO        ||      D ]  \  }})|'jQ                  |)d          tS        | jT                  | j8                  jV                  t7        ||            }*tY        |*|'|d| j8                  jZ                        \  }+}
},|,|k7  rF|$rD	 | j]                  |'||)d   |+||,|	j^                         d!} t        d| jc                  |+||,            ||z  }t        |)      d	kD  r|t<        j>                  k7  rd"jA                  d# |)d	d  D              } | j-                  d$|)d   d%|        d}-|-|k  rte        d&| j8                  jL                        }.t7        ||-z
  |.      }.|'jQ                  |)d   |-z          |'jg                  |.      }/|)d	d  D ]'  }0|'jQ                  |0|-z          |'ji                  |/       ) |-t        |/      z  }-|-|k  r| j-                  d'jc                  |)d                |$r|j                  |       t)        j(                         }1|1|z
  d	k  r|1}|j'                  d(|||      }|j                         \  }} |dk  r| jk                  | d)*       g x}} |rf|j'                  d+||||      }|j                         \  }} |dk  r| jk                  | d)*       d}yd,} | j-                  | t        |      |fz  d       yy|dk\  sd,} | j-                  | t        |      |fz  d       |t        |      d  }g } |(s|'jm                          n1| jD                  5  | jF                  jo                  ||'       d d d        |rf|j'                  d+||||      }|j                         \  }} |dk  r| jk                  | d)*       d}n#d,} | j-                  | t        |      |fz  d       	 |dk  r|ryt        d)d-      |s2|(r0| jD                  5  | jF                  jm                  |       d d d        |sL| j8                  j:                  s6|j'                  d.||| jF                  jp                        j                          | j                  j                  d/d      }2| js                  |      }3| j-                  |3d0d1|2       | ju                  d2       y#  t        dd      xY w# t        $ r t        dd      w xY wc c}w #  d}t1        j2                         }Y xY wc c}w #  Y 0xY w# 1 sw Y   5xY w#  | j-                  d ta               z          Y {xY w# 1 sw Y   xY w#  |'jm                           xY w# |rf|j'                  d+||||      }|j                         \  }} |dk  r| jk                  | d)*       d}w d,} | j-                  | t        |      |fz  d       w w xY w# 1 sw Y   xY w)3NrT  r   z0you must supply a content-length for binary POSTzx-up2k-hashr  zx-up2k-warkz*need hash and wark headers for binary POSTrm   r	   r  r   FTr   zup2k.handle_chunksry   zx-up2k-subcz9client restarted the chunk; forgetting subchunk offset %dz)subchunk protocol error; resetting chunk z0%s[%s]: the expected resume-point was %d, not %dzX%s[%s]: only a single subchunk can be uploaded in one request; you are sending %d chunkszF%s[%s]: subchunk offset (%d) plus postsize (%d) exceeds chunksize (%d)zsubchunk %s %d:%d/%d %sEND   r  zTyour client is sending %d bytes which is too much (server expected %d bytes at most)zwriting %r %s+%d #%d+%d %sr   rn   zrb+zbakflip failed: zVyour chunk got corrupted somehow (received {} bytes); expected vs received hash:
{}
{}z & c              3   2   K   | ]  }t        |        y wr   )r   r  s     r   r  z-HttpCli.handle_post_binary.<locals>.<genexpr>'  s     &Fawqz&F   zclone z to   @ zclone {} donezup2k.fast_confirm_chunksr  r'  zup2k.confirm_chunkszgot %d more chunks, %d leftzunconfirmed; see serverlogzup2k.finish_uploadzx-up2k-statz>70z thank s   thank);r  r   r(   r`  KeyErrorra  r  rJ  r  r   r   r   r   r   r  r  r   r   r  rX  r   u2scr   r   r  r  r_  r  r   r  r  r  rc  no_fpoolr   r   rL  r3   r  r)  r  rO   r   r  r>   r  r  r  rJ   r{  r  r  r  rd  r  putrY  r  r  )4r   postsizer  chasheswarkr  r  siblingsrw   r   r  rK  r  r  	chunksizecstartsr   lastmodr   sprsmaxsizecstart0lockedwrittennum_leftbail1treportsc_ofschashry  sc_pofsr  r  etcsizesc_next_ofsfinal_subchunkr  chunknorY  fpoolcstartr  r  r  r  r  r  wofsr  cinfr  s4                                                       r   r  zHttpCli.handle_post_binary
  s	   	R!$T\\2B%C!DDHw	Lll=177<G<<.D '..1779..w<1WQZA!5 wqz?DqzHqzlG1c(mT2 7xAH567 ""4::tzz5$GQ{{2q!** &&JJ+T4A557BJ?GT7E4c'l*!*))+DLL(m45FAJE99>>&&D*"&u+SAHHQ'^,#+%  =B& %FS!r5'6&B"BCC7|a%nS!r5#g,&?"?@@	571:#56EAJ& J 8+KU"%\S!r5&(E&J"JKK!,!5-,U"eCRj&+ubII1M!HHUD)#."7DKF!Ng	>yy||zz jS!w&8"899,AajI-G71:cr?+gabk.Jq!u.JJKBHHQ$'3w<LLMA		***3tE\\  IIMM$/ >T%+udiioo>AD%('%: 9%ME6FF6!9%(!2!2C4KF +361dii.@.@+'GQ %'ND LL !4GUGSYY w$S!((7E7*KLLy(G6{Q42::+=!JJ&F6!":&FFVAY!BC!Io$'$IE$'	C$?EFF6!9s?3"#&&-C(.qr
 - !tcz 2 !-  3s8OC "Io !7!7q	!BC &u-))+CW}q( !G

#=tT7SA"#%%'KHa"}#6+--$" JJ4dD'6Reeg!a<OOAcO2 E5AHHQ#g,!991= ! "Q9c'lH%=!=qA!'G!7"$s9%v GGI /		dA./ JJ4dD'6Reeg!a<OOAcO2 E5AHHQ#g,!991=a<:;;E &		%& 		JJ+T4GKKM||r2ii!C./

8Y	RPQQ
  	LJKK	L /P* )R /K	 .D HH%7&(%BC^/ /	JJ4dD'6Reeg!a<OOAcO2 E5AHHQ#g,!991= "& &s   c' -c8 d8+d ,A"f d4
Af 1e3d96f B
e? $e4De? Be? e? Ae? .e2e? h'c58dd14f 9d>;eef e/,e? 2e<7e? ?ff A*g?hc                 &   | j                   j                  r| j                  j                  dd       | j                  j                  dd      }| j                  j	                          | j
                  j                  | j                  j                  j                  | j                  |      \  }}|rq| j                  | j                  j                  j                  |dd       | j                   j                  r| j                  d|}| j                  |      \  }}|rd}|r| j                   j                  dz   nd}d	| j                   j                  z   d
z   }| j                  d|||      }| j!                  |j#                  d             y)Nr   r"  r   ztoo many password changesr  znew password OK?hr   	<a href="z?h">continue</a>r   rf  r5  redirr%  T)r   	usernamesr   r-  rB  r   r*  r   r   r  r   rs  gpwcr  r:  r
  r  r}  )r   pwdokr   r  r5  r  s          r   r7  zHttpCli.handle_chpws  s,   99KK,kk!!$+))..!6!6

CHCJJtyy~~**C7RSyy""!%S1))#.GB'*,%"499==(+==xx#"Ex:

4;;w'(r   c                    | j                   j                  rc| j                   j                  r/| j                  j	                  | j                   j
                        s	 | j                  j                  dd      }nd}| j                  j                  dd      }	 | j                  j                  dd      }| j                  j                          |st        dd      |r|d	|}| j                   j                  }| j                  r|t        | j                        z  }|| j                         z  }|j                  d
      }|dvr|d|v rdndz  }|dt        |dd      z   z  }| j!                  |      \  }}d|z   dz   }| j#                  d|||      }| j%                  |j'                  d             y#  d}Y CxY w#  d}Y xY w)Nr   r"  r   r2  uhash   r  zpassword cannot be blankr  #r   -r   r   z_=1#Tr  ">continue</a>r   r  r%  )r   r  rZ  r   r   r[  r   r-  rB  r(   r:  rL   r   r1  rZ  rA   r  r
  r  r}  )	r   unr  r  r]  r  r   r5  r  s	            r   r1  zHttpCli.handle_login  s   99IIMMdjj33DIINNC[[(("5 Bkk!!'2.	KK''5E 	899%Ciimm::6$++&&Ctzz|S!	!#*3#-C6KtT:::C$$S)33!11xx#"Cx8

4;;w'(A	Es   F8 G 8F?G	c                     | j                   j                          | j                  d| j                  z          | j                  j	                  d      sD| j
                  j                  | j                  j                  j                  | j                         | j                  d       | j                  j                  dz   }d|z   dz   }| j                  dd||	      }| j                  |j                  d
             y)Nzlogout s_r  r  r  r  r   zok byer  r%  T)r   rB  r   r   r   r   forget_sessionr   r   r  r  r   r:  r
  r  r}  )r   r]  r5  r  s       r   r8  zHttpCli.handle_logout  s    TZZ'(zz$$T*II$$TYY^^%:%:DJJGC iimmd"3!11xx(rx=

4;;w'(r   c           	      .   | j                   j                  j                  |      }|su| j                   j                  j	                  |      }| j                   j
                  j                  |      }|r)| j                   j                  j                  |      xs |}|r(d|z   }t        d| j                  j                  z        }n|}| j                  j                  dk(  rd}nl| j                  j                  dk(  rSt        j                  |j                  dd            j                         }dt        |d d	       j!                  d
      z   }|dk7  rG| j#                  d|d       | j%                  | j&                  j(                  j*                  |dd       d}d}d}|dk(  r| j,                  rdndD ]V  }t/        ||| j                  j0                  | j                  j2                  d      }	| j4                  j7                  d|	f       X | j8                  j;                  dd        nb| j,                  rdnd}t/        ||| j                  j0                  | j                  j2                  | j,                  |d      }	|	| j8                  d<   |dkD  |fS )Nzhi i  r   r   r  r%  r&  r     r9  r  zinvalid password: rm   r   zinvalid passwordsznaw dude)r2  r1  )r2  F
Set-Cookier1  r2  
; HttpOnly)r   r   r   r   r  r   r  r  r   r+  
log_badpwdr  r  r}  digestr`   r~  r   rs  r   r   gpwdr   r6   r   
cookie_laxr   r  r   r_  )
r   r  r   hpwdr   r  logpwdr  r-  r  s
             r   r  zHttpCli.get_pwd_cookie  s"   		""3'99<<$$S)DIIOO''-Eiinn((/63%-Cg		 0 001CFyy##q(%%*^^CJJw	$BCJJLwr#2w/66w??cz6;Q?

499>>..T;NOCCC#: ,0=='j ?q#tyy{{DII4H4H%P##**L"+=>?   t4==gA				$$B .0D\*Qw|r   c           	          | j                   rdnd}t        ||| j                  j                  | j                  j                  | j                   | j                  j
                  d      }|| j                  d<   y )Nr1  r2  r  r  )r   r6   r   r   r  
idp_cookier   )r   r  r-  r  s       r   r  zHttpCli.set_idp_cookie  s`    }}G'IIKKII  MMII  
 *,&r   c                     | j                   j                  dd      }| j                   j                          | j                  t	        | j
                  |            S )Nr  r  )r   r-  rB  rU  re   r   )r   new_dirs     r   r2  zHttpCli.handle_mkdir  sB    ++%%fc2{{5W566r   c                    | j                   j                  }|| _        t        |      }| j                  j
                  j                  || j                  dd      \  }}d|j                  v rt        dd      t        |d      }|j                  |      }|st        j                  j                  |      }|r+t        j                  j!                  |      st        dd      t        j                  j!                  |      rt        d	d
|d      	 t        j"                  ||j                         t-        | j                   j.                  |z         | j0                  d<   |r| j3                  dd       y| j5                  |d       y# t$        $ rE}|j&                  t&        j(                  k(  rt        dd      t        ddt+               z         d }~w t        dt+                     xY w)NFTnosubr:  z$mkdir is forbidden below this folderr   i  zparent folder does not existr  z	folder "/z" already existsr  r  rO  zmkdir failed:
z	X-New-Dirr   rG  r'  )r   r  r   rb   r   r   r   r   r  r(   rY   r  r  r   dirnamer   r&  r  r  r  rV  rJ   rL   r  r   r  r?  )	r   r   dav	nullwriter   r   rs   r  r   s	            r   rU  zHttpCli._mkdir  s   IILL		e99==$$UDJJtDSciiDEES#&]]377??2&D388>>$/S"@AAxx~~b!S5"JKK,RCII. )/tyy||e/C(D%JJsC   MM%M,  @88u||+ &IJJS"3fh">??,S&(++s   !F 	G.A GG.c                    | j                   j                  dd      }| j                   j                          | j                  j                  }| j
                  j                  j                  | j                  | j                  dd      \  }}| j                  |       d|vrdn|j                  d      d   }|rt        |      dkD  s| j                  s|d	z  }t        |d      }|sJ|j                  |      }t         j"                  j%                  ||      }t&        j"                  j)                  |      rt+        d
d      t-        t/        |      d      5 }	|	j1                  d       d|j2                  v rt5        |	|j2                         d d d        |j7                  |      \  }
}| j8                  j:                  j<                  j?                  d|
j@                  |
j                  |
j2                  ||| jB                  t'        jD                  |      jF                  | j                  d
       djI                  | j                  |      jK                  d      }| jM                  |d       y# 1 sw Y   xY w)Nr  r  FTr!  r   ry   r  .mdr  zthat file exists alreadyrF  s
   `GRUNNUR`
fpermsr  {}/{}r   z?edit)'r   r-  rB  r   r  r   r   r   r   r   r   r`  r  r   rX   r  r  r   rc  r   ry  r(   rL  r3   r  r  r\   r  r   r   r  r  r  r   r  r
  r{  rZ  r?  )r   new_filer  r   r   r  	sanitizedr  rs   rY  r^  r_  r   s                r   r3  zHttpCli.handle_new_md(  s   ;;&&vs3IILL	99==$$TZZUDISc"x'bX^^C-@-Dc#hl$//H"-	==%DdI.Bxxr"S"<==eBi& -!'syy(q#)),-
 C(ICIINN!!%% 				%%

 tzz95<<SAeW%+- -s   6I//I8c           	         | j                   j                  rd}nyt        | j                  j	                  d      xs | j
                  j	                  d      xs d      }|j                  j	                  d      rt        ||j                  d         }| j                  j	                  d| j
                  j	                  dd            }|rA|j                  j	                  d      xs d}t        dt        |t        |      z
              }nd}|||j                  j	                  d      xs g |j                  j	                  d      xs g fS )	Nr   randnrandlifer   r  r  r  )r   r  r  r   r   r   r  r  )r   r   r  r  vlifer  s         r   r  zHttpCli.upload_flagsT  s    99<<Cdkkoof-N1A1A&1INQOCyy}}V$#syy12[[__VT\\%5%5fb%ABIIMM*-2E1c%#b'/23HH IIMM% &BIIMM% &B	
 	
r   c                 "   | j                   sJ | j                  j                  }| j                  j                  j                  | j                  | j                  dd      \  }}| j                  |       d }|r
d}t        }nt        }| j                  j                  d      xs, | j                  j                  d      xs |j                  d   }|dk(  rn|dk(  r	t        }d}n|dk(  rt        j                  d_i t         }n|d	k(  rt        j"                  d_i t         }ng|d
k(  rt        j$                  d_i t         }nH|dv rt        j&                  d_i t         }n*|dv rt        j(                  d_i t         }nt+        dd      | j                  }	|j-                  |      d   j.                  }
|j1                  |      }|
r|
j3                  | j4                  |d|j6                  || j8                  j:                  j<                        \  }}dj?                  |j                  |      jA                  d      }	|s!tC        jD                  ||j                         | jG                  |      \  }}}}| jH                  j                  d      xs | j                  j                  d      xs d}|r*|jK                  dd      d   jM                         }|dk(  rd}|dk(  }|dk(  xs d| jH                  v }g }d}d}| jO                         }tQ        jP                         }	 | j                   jR                  sJ tU        jV                  || j                   jR                        }tY        |      D ]  \  }\  }}}|s| j[                  d       |}t]        |xs dd      }t^        j`                  jc                  ||      }dtQ        jP                         |fz  } |r|s|rte        |||      }|| |j                  d}!d| jH                  v r| jf                  s| j[                  d        nqtB        j`                  ji                  |      rR	 tk        | jZ                  ||j                         d!}"| j[                  |"|fz         ni }!t^        jl                  x}#}dx}}|rtQ        jP                         |z
  }$to        | jZ                  | j8                  j:                  j<                  d d#||tq        |	|      | jr                  | j                  | j                  j                  ju                  |	| j                        |$d| j4                  |$d      }%|%s d$}"| j[                  |"d       t+        d%|"      |%j                  d&      rtq        |	|      }tw        | j                  j                  |||%d&         }&|&rk| j                  jx                  rt{        | jZ                  |%d&   |&|||||       |&\  }}	}\  }}t^        j`                  jc                  ||      }|rdx}}n||!d'<   |r|stC        jD                  ||j                         t}        |d(|| )      \  }'}|'j                          |d*z   }#| j                  j                  rd+|#z   }#t^        j`                  jc                  ||      }ni }!t^        jl                  x}#}dx}}|
r6|
j                  | j4                         |
j                  | j4                         	 d}(|
r;|
j                  })|
j                  |
j                  z
  }*|)r|*rt        |)|*      n|)xs |*}(t}        |#d(| j                  j                  fi |!\  }'}#	 t^        j`                  jc                  ||#      }| j[                  d,|        |||'||(| j                  j                        \  }+},}-|+dk(  rt+        d-d.      	 |'j                          |
r|
j                  | j4                         |
j                  | j4                  |+       	 |
j                  ||+d       |
j                  |+       |
j                  | j8                  j:                  j<                  |j6                  |+       |
j                  | j4                         |
j                  | j4                         |s"t        | jZ                  |||j                         d}tQ        jP                         |z
  }$|rto        | jZ                  | j8                  j:                  j<                  d d/||tq        |	|      | jr                  | j                  | j                  j                  ju                  |	| j                        |$|+| j4                  |$d      }%|%sAd0}"| j[                  |"d       tk        | jZ                  ||j                         t+        d%|"      |%j                  d&      rtq        |	|      }tw        | j                  j                  |||%d&         }&|&r| j                  jx                  rt{        | jZ                  |%d&   |&|||||       |&\  }}	}\  }}t^        j`                  jc                  ||      }.|rdx}}.nCtC        jD                  ||j                         t        | jZ                  ||.|j                         |.}tB        j`                  j                  |      }+|j                  |+|,|-|xs d1||f       |j-                  |      \  }/}0| j8                  j:                  j<                  j                  d2|/j6                  |j                  |/j                  |0|| j4                  |$| j                  d
       | j8                  xj                  |+z  c_R         	 t        d6tQ        jP                         |z
        }3t        d7 |D              }4|4|3z  d8z  }5d9}6|r| j[                  |d5       d:}6d;j?                  |6|4|5      }7|6|4t        |5d5      g d<}8|r|7|d=z   z  }7||8d><   d?|z   }|rd@}9ndA}9|D ]  \  }+},}-}:};}<d}=| j                  s| j                  rdB|j                  v r|rt        ntC        j                  |<      }>dC|j                  v rdDnd}?dE| j                  |?| j                  j                  |<|>j                  t        s|<sdn|>j                        d |j                  dB    z   }=dF| jH                  v sdG|j                  v r	|=|=rdHndIz  }=dj?                  |	|;      jA                  d      }@t        | j                  j                  |@z         |=z   }A|7|9j?                  ||,d dJ |-|+|At        |:dK      |=      z  }7dLj?                  | j                  rdMndN| jr                  A      |+|;|:|AdO}B|r|,d dJ B|<   |-|BdP<   |8dQ   j                  B        | j                  |4d      }C| j[                  |CdR|7       d}D|s| j                  j                  r	 dSj?                  |      }Et        |Ed(      5 }'dTj?                  | j4                  | j                  d         }FdUj?                  |F|7j                         |      }F|'j                  |Fj                  d3             dV|j                  v rt        |'|j                         d d d        |rd-ndX}G|rSd=jc                  |8dQ   D &cg c]  }&|&d   	 c}&      }7|r|7d=|z   z  }7| j                  |7j                  d3d      GY       n|r\t        |8dQ         dk(  r|8dQ   d   d   |8dZ<   t        j                  |8dDd[      j                  d3d      }H| j                  |HdG\       n#| j                  | j                  |7Dz   d]dG^       |ry| j                   j                          y#  d"}"Y MxY w# |'j                          w xY w#  |sBtk        | jZ                  ||j                         tk        | jZ                  ||j                         t^        jl                  } xY w# t*        $ r | j                   j                           w xY w# t*        $ r}1t        t        | j                  j                  j                  j                               t        |1      j                  d3            j                  d3      }	 tB        j`                  j                  |      }2d4}"| j[                  |"t        |2      fz  d5       n#  Y nxY wY d }1~1d }1~1ww xY w# 1 sw Y   mxY w# t        $ r}1dWj?                  |1      }DY d }1~1d }1~1ww xY wc c}&w )`NFTr   r  bup_ckr  r  r  r  r  r  r  r  r  r   ry   r  r   r  r  r  r0  r	   rv  r  r  r  z)discarding incoming file without filenamez-%.6f-%s)r  r  r  r&  z+user not allowed to overwrite with ?replacez$overwriting file with new upload: %rz&toctou while deleting for ?replace: %rzxbu.http.bupr  r:  r  r  rF  )r  r  r  r!  zwriting to r   zempty files in postzxau.http.bupr  z(discarded)r  r%  z.connection lost after receiving %s of the filerm   皙?c              3   &   K   | ]	  }|d      yw)r   Nr   r  s     r   r  z.HttpCli.handle_plain_upload.<locals>.<genexpr>  s     +qt+s   r?  OKERRORz{} // {} bytes // {:.3f} MiB/s
)r  rt   mbpsr>  r   errorzERROR: z;{0}: {1} // {2} // {3} bytes // <a href="/{4}">{5}</a> {6}
z({3} bytes // <a href="/{4}">{5}</a> {6}
r  r  r  r  r  r  r  r  r  r3  r  r  rF  )r  rt   rs   fn_origr   r  r>  r   zup.{:.6f}.txtz{}:{}z	{}
{}
{}
r  z&
failed to write the upload report: {}rG  r'  r  r  )r  r  	return to)r   r<  r7  r  r   )yr   r   r  r   r   r   r   r   r   rF   r>   r   r   r  r  r  r  r  r  r  r  r(   r  r  r  r  r   r  r   r   r  r{  ra  r   r  r  r   r`  rb  r  r   genr  r	  rl  r   rX   r  r   rc  rM   r   ry  ri   r  rU   re   r   r  rK   r  rI   rT   r  r  chk_bupchk_nupsmaxdfvdflr  r  r  r  r  chk_dfr  r  r.   r  r  r  r  rB  rf   rx  r  r  r   r}  r~  rC   r  sumroundr   r   A_FILEr  r   r  r  r
   r  rL   r  rA   r   r  write_uplogrL  r   r'  r  r\   r   r  r  r  r  r?  )Ir   r9  nohashr  r   r   r  r  r  upload_vpathr  	fdir_baser  r  r  r  r  want_url	want_jsonr>  errmsgtabspathr  r   gensnfilep_fieldp_filep_datar  r/  rM  r  	open_argsr  r  rr   r  r  rY  max_szv1v2rt   r  r  ap2r^  r_  r   r.  tdsz_totalr  r  r   r  file_fmtofnlfnr  r  r  r   r   rel_urljpartvspdr;  log_fnftscjtxtsI                                                                            r   r4  zHttpCli.handle_plain_uploadj  s   
 {{{IILL	99==$$TZZUDISc"DFF  &W$,,*:*:4*@WCIIhDW  x! 0x0 11! 3(3)) 484++ 484S"455zzkk#q!%%MM#&	 WWb#,,	499>>;P;PNIs #>>#))S9??DLY3995"&"3"3C"8XsC[[__V$H(8(8(BHb#q!!$**,B'';&L6C4;;$6	hhjYY[[	;;??"???5$++//:D4=dO M00HHHI !#FLb"5'',,tU3#tyy{C&88) )$s ;)-syy QI DKK/# HH%RS XX__W5M ''399 E$J !HHQ'^4 "I#%::-D5%''D7x/B 		--&lE2		

		//djjIB" AA$S!n,vvg"<7#DIIMM7B7L#yy// )$(HH$&wK$%$+$&$)$'$'	!" EFAD,zS&(ggll4&?G(13 3w48	& 1)LL#))4  (t$vNHAuGGI :-Dyy(("Tz ggll47G "I#%::-D5%''D7KK(KK(mF XX WWsww.02rRrxR&tT499??PiPGAt	"#%77<<d#;H!>?/5"Avvtyy7I7I0,GW 7"(.C"DD # 	(,"JJxT:JJrNKK		(=(=s||RPKK0KK0 %#DHHhK!Hx/B$ HH IINN11 *#!,6 II JJ IIMM33L$**M GG"  " EA HHQN#DHHgsyyA"(a.066'?!&|U!;B '		wBwK PA #'99#3#3$-(,(*7()(/(*(-(+(+	%& IJ ElE:C&(ggll4&?#,13OD3$'LL#))$D$/'3		$R*- XX--g6LLWgv/FwW !$C 0ICIINN))--(				

 IIOOr)OSMt diikB&'+U++"}-HHVQF077#N#qM	
 6D= C"DM'FUHBH27 +	(.B#sBDTSYY5F(Vchhrl CII-a1t{{II%%JJrAryy  $CIIdO % % $++%)B$.NN<5;;C@ETYY\\E12T9G8??Cd+ C $**#}}G&II
 
E %crld#*i M  'W+	(Z yy5)D#&'TYY22	K(//3&$' 11 1>B'..r3::<HBGGBIIg./399,"1cii01 S))tG}=!QuX=>Ctf}$JJszz'95bJA4=!Q&"&w-"25"9Y::d1=DDWiXDJJt"4RJ@MM

#I"   k	M$Lt 	"#, '(CII F ''399 E$&JJE!T  KK$$&  		TYY]]++2245wr{7I7I'7RfWo hh&&x0Din..2		t1 1  K?FFrJK
 >s   $D$AA 	#~2,JAA 5A$A@+A)~<A	A@+B#K A@+AA AD( !BAD0AD( AE2~96AA <A@+AA@(@(A@+@+%AAAAA A	ADAA(ADCA ADDADDAD
DADDADDAD%D AD( D(	AED1AEEAEc                 H   	 t        | j                  j                  dd            }| j                  j
                  }| j                  j                  j                  | j                  | j                  dd      \  }}| j                  |       t        | j                  j                  dd            }|dk(  rt        d      t        |      \  }}|j                  |      }|j                  |      d	   j                   }	|	rl|	j#                  | j$                  |||j&                  || j(                  j*                  j,                        \  }}t/        j0                  ||j2                  
       t4        j6                  j9                  ||      }dj;                  ||      j=                  d      }|j                  |      \  }
}|j?                         jA                  d      s| jB                  st        dd      |rdtE        jF                  dd	d      }| jI                  |       | j                  jK                          | jM                  |jO                  d             yd}d}	 t/        jP                  |      }|jR                  }t        |dz        }|d	k\  r?|d|fv }|s"|t        |dz        k(  xr ||kD  xr ||z
  dk  }|stE        jF                  d|t        t[        jZ                         dz        d      }| jI                  dj;                  ||||z
               | jI                  |       | j                  jK                          | jM                  |jO                  d             yt4        j6                  j]                  |      \  }}d|v r|j_                  dd      n|df\  }}dj;                  |||      }d}|
j2                  d   }|dk(  r-t        |      d	   }ta        jb                  te        |            jg                         }ti        |      jk                  d      d d j?                         }|
jl                  d|d d  d|d d! d|}| jI                  d"|d|       t/        j0                  ||j2                  
      rto        t4        j6                  j9                  |d#      d$      5 }|jq                  te        |             d%|j2                  v rts        ||j2                         d d d        n|d&k(  rt4        j6                  j9                  |d'      }	 t/        jt                  ||j2                  d(          d)|j2                  v r1t/        jv                  ||j2                  d*   |j2                  d+          ty        |       |r@t{        | jH                  |t4        j6                  j9                  ||      |j2                         t}        | j                  j~                        \  }}}|d,k7  rt        dd-j;                  |            d.|j2                  v rt        ||j2                  d.         }|j2                  j                  d/      } | rt        | jH                  | j(                  j*                  j,                  d d0| || j                  | j                  | j                  | j                  j                  j                  | j                  | j                        t[        jZ                         d	| j$                  t[        jZ                         d      s d1}!| jI                  |!d       t        d2|!      t.        j6                  j                  |      r!t        | jH                  ||j2                         to        t        |      d$| j                  j                        5 }d%|j2                  v rts        ||j2                         t        ||d d	| j                  j                        \  }"}#}d d d        |	r|	j                  | j$                         |	j                  | j$                  "       	 |	j                  |"       |	j                  | j(                  j*                  j,                  |j&                  |"       t/        jP                  |      jR                  }$t        |$dz        }%#d d3 }#|j2                  j                  d4      }&|&rt        | jH                  | j(                  j*                  j,                  d d5|&|| j                  | j                  | j                  | j                  j                  j                  | j                  | j                        |$"| j$                  |$d      sAd6}!| jI                  |!d       t        | jH                  ||j2                         t        d2|!      | j(                  j*                  j,                  j                  d7|
j&                  |
j                  |
j2                  t        |      d	   || j$                  |$| j                  d
       tE        jF                  d|%"|#d8      }| jI                  |       | j                  jK                          | jM                  |jO                  d             y#  t        dd      xY w# tT        $ r)}|jV                  tV        jX                  k7  r Y d }~@d }~ww xY w# 1 sw Y   OxY w#  Y WxY w# 1 sw Y   xY w#  t        | jH                  ||j2                          xY w)9Nr     r   z#could not read lastmod from requestTrT  ry   rE  r   r  r  r   r  zonly markdown pls)r  r  r%  g      rz   F)r  r  r  z{} - {} = {}r!  r	   mdz{}.{:.3f}.{}r   md_histr  r9     z/md/r  r;  zmoving old version to zdir.txtrF  r  rx   .histchmod_dchownuidgidr"  zexpected body, got {}txt_eolr  zxbu.http.txtz!save blocked by xbu server configr:  r  r  zxau.http.txtz!save blocked by xau server configr  )r  r  sizer  )Or  r   r-  r(   r   r  r   r   r   r   r   r   r   rh   r  r  r  r  r   r  r   r   r  r   r  r  r  r   rc  r{  ra  rb  r  r   r  r  r   rB  r  r}  r  r
  r  r  r  r   r`  r  r  r  r,   r  r`   r~  histpathrL  r  r\   r%  r  r?   r.   r  r  r0   rU   r   r  ry  ri   r3   r  r>   r  r  r  r  r  r  )'r   cli_lastmod3r  r   r   r  r  rs   r  r  r^  r_  r  srv_lastmodsrv_lastmod3r  r   same_lastmodmdirmfiler/  r  mfile2dphist_cfgvrdr  r  rY  r  r  r  r  r  rt   r  new_lastmodnew_lastmod3r  s'                                          r   r5  zHttpCli.handle_text_upload  s   	Et{{229bABL IILL	99==$$TZZT4HSc"4<<##$4b9:2:+B]]2kk#q!%%WWTWWb$b$))..BWBWXFBLL		*WW\\"b!nnR$**3/KK$	Tyy{##E*4??122zz!"<=HHHXKKJJxw/0	"B++K{T12L !'B+==L  3|d':#;; ;$|3;$|3d:   ::##/"499;#56 "))$lL<4O
 "  "

8??734''--+KD%25,%,,sA.UDMKE4#**5+tDFByy+H3Tl1o^^F3K0779R[''0"5;;=),r"1vr!AwK"fEF<<syy1bggll2y94@ 5As,#syy0&q#))45 5 SWW\\$0IIb#))I"67#))+		"cii&6		%8HIBK DHHb"'',,r6*BCIIN!$++//2Ff5<<WEFF		!fcii	&:;FiimmE"		%%

		

		''

DJJ?				" 8AS!n$88??2DHHb#)),%)T499??3 	Mq399$1cii($VQa9K9KLMB	M
 GGDGGGGDGGR 

2DIINN113<<D
 hhrl++;-.iimmE"wHHIINN!!JJIIJJIIMM##DJJ

;GG
" 4AHHQNDHHb#)),a. 		!!LLIIII4LOGGJJ	
 ::L"O
 	

8??7+,G	ECDDL  	xx5<<' (	\5 5J	M 	M"cii0sV   %j $/j& ;?k)A-k( .Ak0<Ak= j#&	k/kkk%(k-0k:=$l!c                 z   t        |      }| j                  j                  d      }| j                  j                  d      }|s|s|ddfS |r#||k7  rd}| j                  |||fz  d       |ddfS ||k7  }|r|rd}| j                  |||fz  d       n%|s#| j	                         rd}| j                  d       ||dfS )	Nzif-rangezif-modified-sinceTz5sending entire file due to If-Range; cli(%s) file(%s)r  Fz6sending body due to If-Modified-Since cli(%s) file(%s)zsending body due to no304)r2   r   r   r   r  )r   file_tsfile_lastmod	c_ifrange	c_lastmodr  do_sends          r   _chk_lastmodzHttpCli._chk_lastmod  s    !'*LL$$Z0	LL$$%89	t++l2GAHHQ)\22A6u,,|+yHAHHQ)\22A6TZZ\GHH01Wd**r   c                    | j                   s| j                  sy|j                  j                  d      ry| j                  j                  d      xs d}|sy|j                  j                  d      }|sy|s|j                  | j                        }| j                  d| j                  j                  |dd      d | }||k(  ryd	}| j                  |||| j                  |fz  d
       y)NFdkyTr-  r   dkr  r   z/wrong dirkey, want %s, got %s
  vp: %r
  ap: %rr  )r   r   r  r   r   r  r   r   r   dk_saltr   r   )r   r   r  r   dk_lenr  r  s          r   rA  zHttpCli._use_dirkey  s    ==88<<kkooc"(bd#dhh'B[[DII--r1a8&A"9?b#txx,,a0r   c                    | j                   s| j                  sy| j                  j                  d      xs d}|sy|j                  j                  d      }|sy|s%| j
                  j                  | j                        }d|j                  v rdnd}| j                  || j                  j                  ||j                  t        rdn|j                        d | }||k(  ry	d
}| j                  |||| j                  |fz  d       y)NFr-  r   r  r  r  r	   r   Tz0wrong filekey, want %s, got %s
  vp: %r
  ap: %rr  )r   r   r   r   r  r   r  r   r   r   r  r  r
   r  r   r   )	r   r   r  r  r   fk_lenr   r  r  s	            r   _use_filekeyzHttpCli._use_filekey  s    ==kkooc"(bd#""488,BBHH$a![[""B

ARYY

6 "9@b#txx,,a0r   c                 :   ddg}| j                   j                  st        D ]  \  }}|||vr|d|}t        j                  j                  |      s4t        | j                  t        |      d      ||<   d|j                  v sf| j                  ||   |j                  j                  d      xs g       ||<    ddg}| j                   j                  rg nt        D ]  \  }}||   r|n|d   |v r
||d      g}ng }d}	|D ]J  }|d|}t        j                  j                  |      s*t        | j                  t        |      d      }	 n |	r=d|j                  v r/| j                  |	|j                  j                  d      xs g       }	|	||<    ||fS )Nr   r   Fexpexp_lgr   exp_md)r   	no_loguesLOGUESr   r   rK  rR   r   r3   r  _expandr   	no_readmeREADMES)
r   r   rM  lnamesloguesrw   rs   readmesfnsr>  s
             r   _add_logueszHttpCli._add_logues  s    byy"" 	2%"F*: ',88??2& )$((E"Iu EF1I($(LL"1Irxx||H'='C%q		 r( II//bW 	FAsayQ6!c!f~&C  ',88??2&#DHHeBi?C	 u(ll3X(>(D"EGAJ)	, wr   c           	         t         }|D ]  }|j                  d      r*t        | j                  j	                  |dd  d            }n|j                  d      rt        t        | |dd  d            }n|j                  d      r$t        t        | j                  |dd  d            }n|j                  d      r6t        | j                  j                  j	                  |dd        xs d      }nr|d	k(  r't        t        t        j                                     }nF|d
k(  r)t        j                  t              j                  d      }n| j                  d|dd       X|j!                  d|      }|j#                  d|d|      } |S )Nzhdr.r;  r   zself.r  zcfg.zvf.rm   z	srv.itimez	srv.htimez%Y-%m-%d, %H:%M:%Sz'unknown placeholder in server config: [rE  r  z{{z}})RE_HSAFEr   r  r   r   getattrr   r   r  r  r   r   r  r$   strftimer   r   r&  )r   r>  phs	ptn_hsafephr  s         r   r)  zHttpCli._expand8  sB   	 	4B}}V$))"QR&"56w'r!"vr23v&BqrFB78u%**2ab628b9{"TYY[)*{"\\#&//0DEMqQsB'B++".3C%	4( 
r   c                 ,   | j                   j                  }|r)|j                  | j                        rd}t	        d|      |d   }d|v s|st	        dd      |dk  r| j
                  st	        dd      |d	k  r| j                  d
v rt	        dd      y)N;this URL contains no valuable information for bots/crawlersr:  tail_whonotailr   z!tail is disabled in server configr	   z!tail is admin-only on this serverr  r   r#  z5you must be authenticated to use ?tail on this serverT)r   ua_nodocr   r   r(   r   r   )r   volflagszpr  lvls        r   	_can_tailzHttpCli._can_tailP  s    YY"))DGG$MAa. z"xsABBAXdnnABBAX$**	1UVVr   c                 2   |d   }| j                   j                  s|sy|dk  r| j                  sy|dk  r| j                  dv ry| j                   j                  r=| j                   j                  j                  | j                        rd}t        d	|      y
)Nzip_whoz0download-as-zip/tar is disabled in server configr	   z0download-as-zip/tar is admin-only on this serverr  r<  z?you must be authenticated to download-as-zip/tar on this serverr9  r:  r   )r   no_zipr   r   ua_nozipr   r   r(   )r   r>  r@  r  s       r   _can_zipzHttpCli._can_zip^  s    y!993EAXdnnEAX$**	1TYYDII$6$6$=$=dgg$FMAa. r   c                 	   d}dj                  d| j                        }d}i }d}t        | j                  |      r3t	        | j                  |      }|rt        ||j                        }||d<   t        | j                  |dz         rJt	        | j                  |dz         }|rt        ||j                        }|r|j                  |kD  r|dz   |d<   |s| j                         S |dkD  rb| j                  t        |            \  }}	}
|| j                  d<   |	sd}| j                  r't        t        |d	z              | j                  d
<   nd}	d}| j                  j                  dd      j                         j!                  d      D cg c]  }|j#                          }}d|v rMd}d}d|vrd}n0t%        j&                  d| j(                        rd| j(                  vrd}|sd| j                  d<   nd}d}||   }|dj                  |j+                  d            z  }t-        | j                  |      }|r!t/        |      }t1        j2                  |      }nP|j5                  dt6        j8                         |j;                         }|j5                  dt6        j<                         |rd| j                  d<   n| j?                          d| j@                  v r#dj                  | j@                  d   xs d      }n>d| j@                  v r%t        | j@                  j                  d            }ntC        |      }|tE        |      |z   z  }| jF                  dk(  s|	sB|jI                          | jJ                  r| jM                  |       | jO                  |||       yd}| jO                  |||       tQ        | jL                  d||| jR                  | jT                  jV                  | jT                  jX                  | jT                  jZ                   i d
      }|jI                          |dkD  r|dtE        ||z
        z   dz   z  }d}| j]                  ||z
        }| jJ                  r!| jM                  dj                  ||             |S c c}w ) Nr  {:4} {} r   r   r  r^  Last-Modifiedr  rz   
X-Lastmod3TFaccept-encodingr  r:   MSIE [4-6]\. SV1Content-Encoding{} r!  max-age=604869rp   r>  text/plain; charset={}r%  r  rD  r  r  r   [31m[0m{},  {})/r{  r   r=   r   r]   r  r
  r  r  r  r   r   r  r   r   rb  r`  ra  rL  matchr   rZ  rG   r;   r:   rL  r  r  SEEK_ENDtellSEEK_SETr  r   r9   r   r   r  r   r   r  r[   rx   r   s_wr_szr  no_pollr  )r   req_pathr  r  logtaileditionsr  r  r  r  r  
decompressr  supported_editionsis_compressedselected_editionr  resfile_szr  r0  r  r  s                          r   r{  zHttpCli.tx_resk  s   ""2txx0)tvvx0Bgr{{3 (HW5 01tvvx%'78Bgr{{3w."*U"2;;= 
 Q;'+'8'8W'F$L'10<D_-~~14S45H1I  .G
 
 \\%%&7<BBDJJ3O
 GGI
 
 H M$//!
88OTWW5&:O!%J7=  !34!M&,-%,,/66s;<<DFFH-',G))C.CHHQ$hhjGHHQ$
 0@D_-!DKK+224;;u3E3PQDt{{"t{{v./Dh'D'&/G++99gIIK{{ WV$GdCHHFFIIII		!!!
 			Q;kGGg,=$>>JJFCii')*;;HHY%%fc23
e
s   	R	c                    d}dj                  d| j                        }d}d| j                  v xr% | j                  | j                  j
                        }|d|d}	 t        j                  j                  |      \  }}	|	dz   }
| j                  j                  rd|
z   }
t        j                  j                  ||
      }t        j                  |      }|j                  st        d	      | j                   j"                  j$                  j'                  d
||      }t)        j*                  |j-                               }|st        d      | j.                  j1                  ||       d}i }dD ]'  }|d   }t;        d|d         }|f|d<    n	 ||z   }t        j                  |      }t        j<                  |j>                        r_t        j@                  |j>                        r`t        jB                  |t        jD                        }	 t        jF                  |dt        jH                        }t        jJ                  |       n|j                  }t;        ||jL                        }||f||xs d<   | jN                  jQ                  d      r( n |s| jS                         S | jU                  tW        |            \  }}}|| jX                  d<   |sd}| jZ                  r$t]        tW        |dz              | jX                  d<   d}| j^                  j-                  dd      ja                         j                  d      D cg c]  }|jc                          }}d|v rUd}d}|d   \  }}d |vrd}n0te        jf                  d!| jh                        rd"| jh                  vrd}|sd | jX                  d#<   nd}d}||   \  }}|d$j                  |jk                  d            z  }d}|}| j^                  j-                  d%      } |r|s| r|r|r
d| vr|s	 | ja                         jQ                  d&      s
t               | j                  d'd(      d(   j                  d)      \  }!}"|!jc                         rtW        |!jc                               }nd}|"jc                         rtW        |"jc                               d(z   }n|}||kD  r|}|dk  s||k\  r
t               	 d/}d0j                  ||d(z
  |      | jX                  d,<   |d1j                  ||      z  }d}$|r)tn        jB                  }%tq        |      d2g}&ts        |      }n`tB        }%tq        |      d2| j                  jt                  g}&| jv                   xr) | j                  jx                   xr tz        d3kD  xs |d4k  }$|rd5| jX                  d6<   n| j}                          d7| j                  v r#d8j                  | j                  d7   xs d9      }'ncd:| j                  v r%t]        | j                  j-                  d:            }'n0d;| j                  j
                  v rt        ||      }'nt        |      }'d<| j                  j
                  v rd=|'v rd>}'d&| jX                  d?<   |t        |      |z   z  }| j                  d@k(  s|s5| j                  r| j9                  |       | j                  ||z
  ||'A       y| j                   j"                  j                  }(|r0dB}t        |(      | j                  j                  kD  rt        dCdD      ||z
  dEkD  rt        j                         })| j                  dF| j                  d(   | _K        |)df|(| j                  <   |)|rdn||z
  | j                  | jN                  | j                  f| j                   j"                  j                  | j                  <   || j                  ||||||'|	      S |r| j                  |&||'       yd}* |%|& 5 }+| j                  ||z
  ||'A       |$rt        nt        }, |,| j8                  |||+| j                  | j                  j                  | j                  j                  | j                  j                   |(| j                  
      }-d d d        -dkD  r|dGt        ||-z
        z   dHz   z  }d}*| j                  ||z
  |-z
        }.| j                  r!| j9                  dIj                  ||.             |*S # t        $ rC}t3        |dd      t4        j6                  k7  r| j9                  d|d|d       d }Y d }~d }~ww xY w# t        jJ                  |       w xY w#  Y xY wc c}w #  d*j                  | |      }#| jm                  |#d+d,d-j                  |      i.       Y yxY w# 1 sw Y   "xY w)JNr  rH  r   tail<r  r  r!  zpartial is emptyup2k.find_job_by_apznot found in registryr  r   zwill not pipe z; r  g        )r   r^  r  r  r  z.cpr/rI  r  rz   rJ  FrK  r  r^  Tr:   rL  rM  rN  rO  rJ  bytesr)  r	   r  zinvalid range ({}), size={}  zContent-Rangez
bytes */{}r9     zbytes {}-{}/{}z [[36m{}-{}[0m]rb    irP  rp   r>  rQ  r%  r  r  nohtmlr  r%  zAccept-RangesrD  rR  i   @r   z-too many active downloads to start a new tailrw  r  rS  rT  rU  )Wr{  r   r   rA  r   r  r  r   r`  r   r  rc  r   r  r  r   r   r   r  rX  r  rS  r   r   r  r3  r  r  r   r  r  r  S_ISBLKrL  O_RDONLYlseekrW  r  r
  r   r   r  r  r  r   r   r  r   rb  ra  rL  rV  r   rZ  rd  r:   r3   r<   r  r   no_sendfiler   r  r9   r   r   r   r  r  r  	tail_cmaxr(   r   r   r   r   r   r  tx_pipetx_tailrZ   r[   rx   rZ  r  r[  r  )/r   r\  rK  r  r  r]  is_tailap_datar  rs   r  st_datar  jobr   r  r^  r  rt   fs_pathr  fdr  r  	can_ranger_  r`  ra  rb  rd  rb  rP  hranger   r   erruse_sendfile	open_funcr  r  r  r  r0  rY  sendfunr  r  s/                                                  r   rz  zHttpCli.tx_file  s   ""2txx0DKK'IDNN477==,I (*Gx0BJ99$$:D'',,r40((7+#$677IINN))--.CT8Tjj)#$;<<

x-  	C[aV-%,bM!"S.XXg&<<

+<<

+'2;;7B%XXb!R[[9Bgr{{3,3R=( ::((17	: ;;= 
 ,0+<+<S\+J(gy,8)F>>-0Wt^1D-ED\*
 
 \\%%&7<BBDJJ3O
 GGI
 
 H M$'GW//!
88OTWW5&:O!%J7=  !34!M&#$45%,,/66s;<<
 !!'*
 !6!||~009#+%||C+A.44S91779	NEE779	NQ.E#E7?#E19#+% !/ F0@0G0Guqy'1D_- 077uEEGI.$/I )EIwtyy?I HH ;		---;r\9Wz%9	  0@D_-!DKK+224;;u3E3PQDt{{"t{{v./D&h0Dh'Dtww}}$4.D,3)'&/G++99g{{ UU]6Miinn  E3x$))---S"QRR5=8#))+C$(GGTYYq\:DJ"AhC

O%%-



.DIINNtzz* <<heUFD&  LLFD1	" 	aUU]6M'3mG		!!		""II%%%

G		" Q;kGEGO$<<yHHFCii'12;;HHY%%fc23
W  2w*ell:HHwCQG8 ,
~3::67K,l.A.A'.JK   
 f	 	se    Dd 9fAf%e*9Aff$Cf Bg	e'$8e""e'*fff	9ggc                    | j                   j                  }| j                  d ||       |d   }|d   }|d   }|d   }| j                  j                  }	| j                  j
                  }
| j                  j                  }| j                  j                  j                  }| j                  }	 t        | j                  d         }t        j                         }|}d }	 t        j                  |      }t!        | }|j#                  dt        j$                         |j'                         }|j#                  d       |dk  rt)        d||z         }| j+                  d||fz  d       t-        | j*                  |||| j.                  ||
d	||
      }||z
  |z
  }||z
  }|j#                  |       	 t        j                  |d         }|j0                  |j0                  k(  r|}d}t        j                         x}}	 |j3                  d
      }t        j                         }|r9||z
  |k\  r1| j+                  dd       d}| j.                  j5                  |       n|rG|x}}| j.                  j5                  |       |t7        |      z  }t        j                         |f||<   t        j8                  |       |||	z
  k  r|}| j.                  j;                  d       |||z
  k  r		 t        j                  |d         }|j0                  |j0                  k7  s(|j<                  |k  s|j<                  |j<                  k  rt!        | }|j?                          |}|j#                  dt        j$                         |j'                         }||k  r2dx}}d}| j.                  j5                  |       |dk  r|| kD  r||z   }n|}|j#                  |       | j+                  d||fz  d       d}|}|r|j?                          y y #  d}Y GxY w#  Y 3xY w#  |dz  }|dkD  r| j+                  d       Y EY IxY w# t@        $ r}|jB                  tD        vr Y d }~kd }~ww xY w# |r|j?                          w w xY w)NrR  r   	tail_rate	tail_tmaxtail_fdrf  ztailing from byte %d: %rr  Fi   z%max duration exceeded; kicking clients/   

*** max duration exceeded; disconnecting ***
    sE   

*** file size decreased -- rewinding to the start of the file ***

zreopened at byte %d: %rr	   rm   zfile deleted; disconnecting)#r   r  r  r   tail_kar  rZ  r   r   r  r   r  r   r   r  r  rL  r  rW  rX  r  r   r[   rx   r  r  r  r  r  sendr  r  IOErrorr  r   )r   r  r  r  r  rM  sec_ratesec_maxsec_fdsec_kawr_slpwr_szr  r   r  r   ofs0rY  r  eofr  sentst2gonet_fdt_kar  r  r  r  r   s                                  r   ru  zHttpCli.tx_tail  s    WW]]f4@Q<k?[/I""##		!!iinn  


	dkk&)*C YY[^	!Bi AFF1bkk"&&(CFF1IQw!S3Y'HH/3.@!D "G #I(D-CFF3Kggil+99

*B D))+%D4ffTliiksRx72HHDaHNBFFNN2&"%%D4FFNN3'CH$D"&))+t!4CJ

8$#,&DFFKK(#,&" ggil3JJ"))3"{{T1"{{RZZ7 "&y!1BGGI "AFF1bkk2"#&&(C"Tz-.d%q $r 2#'!8te*-*C&*FF3K HH%>#w%OQRS#$D ] p 	 G	CJf"	!8 HH%BC! $  	xxx' (	 	 si   .P CP< /3P "DP< (DP 0P< PPP< P95P< <	Q"QQ% Q""Q% %Q:c
                    d}
| j                  ||z
  ||       | j                  j                  }| j                  j                  }|d   }t	        |      }d}d}||z
  }d}d}d}g d}||k  r|s|| j
                  5  | j                  j                  |      }|sr| j                  j                  j                  j                  d||      }t        j                  |j                               }|r| j                  j                  ||       d d d        |sd	}| j                  |d
       |}n|t!        |d         k7  r||z
  d|
z  k  rt!        |d         }d}|d   D ]  }||d   v r n||z  } d}| j                  |||
z  ||
z  ||
z  fz  d       | j
                  5  || j"                  j$                  j                  ||      kD  rtd }	 | j"                  j&                  |   j(                  }|D ]  }|j+                           || j"                  j$                  |<   | j                  dt!        |      fz         d d d        ||k\  r4|r&d}| j                  |||
z  fz         t1        dd      t1        dd      ||z
  }|d|
z  k\  r	d}|
}|} |}!nJt3        dt5        |
|d|
z  z  z              }|s|
n||z  }"||"kD  rd}|} |}!n|dkD  r
d}|dz  } d}!nd
}dx} x}}!||k7  r|}| j                  d|||   fz         	 t7        |d| j                  j8                        5 }#|#j;                  |       |#j=                  t?        |||z
  ||z
              }$d d d        $st-        d      	 d}d}%|%t!        |$      k  rd|!rtE        jF                  |!       	 |$|%|%| z    }&| jH                  jK                  |&       t!        |&      }'||'z  }||'z  }|%|'z  }%|%t!        |$      k  rd||k  r|s|||k  r||szt7        |d      5 }#tM        | j                  |||#| jH                  ||| j                  jN                   | j                  j                  jP                  | jR                  
      }d d d        | jU                  ||z
  |z
        }(| jV                  r!| j                  d%jY                  |	|(             | S # 1 sw Y   xY w# t,        $ r/}|d}nt/        |      }| j                  d|z          Y d }~d }~ww xY w# 1 sw Y   xY w# 1 sw Y   xY w# t,        $ r}| j                  d ||
z  |fz  d!       | j
                  5  | j                  j@                  jC                  |d        d d d        n# 1 sw Y   nxY w|dz  }|d!kD  rt1        d"d#      tE        jF                  d
       Y d }~Kd }~ww xY w#  d$}Y xY w# 1 sw Y   axY w)&Nr?  rR  r  ry   r   F)uncappedzreduced speedzone byte per secrh  z0pipe: OK, upload has finished; yeeting remainderr  needr{   r  z:pipe: can stream %.2f MiB; requested range is %.2f to %.2fr  zpipe: flushed %d up2k-FDsz&file is not being written to right nowzpipe: u2fh flush failed: z9pipe: uploader is too slow; aborting download at %.2f MiBrj  zuploader is too slowz,no data available yet; please retry in a bit(   r  r   r	   r  g?zmoved to tier %d (%s)rl  zgot 0 bytes (EOF?)z!pipe: read failed at %.2f MiB: %srm   r  zfile became unreadableTrU  )-r  r   r  rZ  r   r   r   r   r   r   r  rX  r  rS  r  r   r  r   rY  r  all_fhsflushr   r  r(   r  r  rL  r  r  r  r  r   r_  r   r  rx   r  r[   r[  r  r   r  r   r{  ))r   rK  r\  rw  ry  rb  rP  r  r  r  Mr  r  	file_size
chunk_sizenum_needdata_endr  brokenspinstiertiersr  r  cidfhsfhr   r~  slackntierwinszr  slp	base_raterY  pagepofsr  r  r  s)                                            r   rt  zHttpCli.tx_pipej  s    vDI##		!!K	#I.
%-AemF 6jjnnX.		--112GxXA**QUUW-C

x56 FA$3s6{++50@1q50Hs6{+v; +Cc&k)
*H+ QhlEAIuqyAA1E\\ H$))--"3"3GX"FF#H"&))//'":"B"BC&) + "
+5=DIIMM'2 HH%@CH;%NOH   SAHHQ(Q,01 &<==S"PQQu$EA~BA"q&)9$: ;<%+A	9$E!E CS[E!QJECE*++E+ECu}0D%+3FFG'49 OQFF5M66#eX-=uu}"MNDO #$899  EDT"JJsO	tdUl3CFFNN3'SBrMGRKEBJD T"w emFT 5=h% %HHFF		)))IINN&&JJ ii'12;;HHY%%fc23zy6 6@  ) H"{&N&*2h HH%@3%FGGHH HdO O
  <	2NPQR\\ 5JJLL$$Xt45 5 5
19 &>??

1.!F s   >BR6$,S>A1S!T %4TT =V< A&W6S 	S;$S60S>6S;;S>>TTT 	V9!&V4'U7.	V47V 	<2V44V9<WWc           
      (   | j                  |j                        }|rt        d|      dj                  d| j                        }d| _        | j                  j                   }	|dk(  r,t        }
|	r	d|v rd}d}n%|	r	d	|v rd
}d}n|	r	d|v rd}d}nd}d}n
d}t        }
d}|r
|d   r|d   n| j                  }|r$|j                  d      j                  d      d   }n| j                  j                  d      d   }|j                  j                  d      rQ|j                  j                  d      r| j                  dk7  s&|j                  j                  d      xs d}|j                  j                  d      xs d}d}d}|j!                  ||t#        |      | j                  d| j                  j$                         }d}|j                  j                  d      xs |}|r7|r5|D ]/  }|dz  }||d   j&                  z  }||k  s||k  s%t        d|       nL|r+|D ]%  }||d   j&                  z  }||k  st        d|       n|r|D ]  }|dz  }||k  st        d|       t(        j*                  t(        j,                  z   j/                  dd      }dj1                  |D cg c]  }||j/                  d d      v r|nd! c}      }t3        |      j5                  d"      }|j5                  d"d#      }t6        sL|D cg c]@  }||v rt9        |      j5                  d"      nd$j                  |      j5                  d%      B }}n6|D cg c]+  }||v rt3        |      nd$j                  t;        |            - }}d&j1                  |      j=                  d%      }d'}|j                  ||||      }| j?                  tA        |             | jC                  d |d(|i)       |j!                  ||t#        |      | j                  d| j                  j$                         }d}| jD                  rx| j                  jF                  sbd*D ]  }|| jH                  v s||k(  s|} |rC| j?                  d+j                  |             tK        || jD                  | j                  ||      }tM        jL                         }| jN                  d| jP                  d   | _)        |d| jT                  | j                  d,|| j                  f| jV                  jX                  jZ                  | jR                  <   | jV                  jX                  j\                  }tM        jL                         df|| jR                  <    |
| j>                  | j^                  |d-|v xs | d.|v |	s|d/k(  r|nd0      } d}!d}"| ja                         D ]`  }#|#s n\	 | jb                  je                  |#       |"tg        |#      z  }"|!dz  }!|!d3k\  s<d}!tM        jL                         |"f|| jR                  <   b | jk                  |"      }$| j?                  d4j                  ||$             y5c c}w c c}w c c}w #  |d1t3        |"      z   d2z   z  }| ji                          Y  kxY w)6Nr   rH  r   Fr=  r  zapplication/gzipztar.gzbz2zapplication/x-bzipztar.bz2r  zapplication/x-xzztar.xzzapplication/x-tarzapplication/zipr)  r   r   ry   r  zipmaxzipmaxur#  	zipmaxs_v	zipmaxn_vz5total size exceeds a limit specified in server configzipmaxtr	   r  r  r  r  r%  xmlcharrefreplacez%{:02x}r9  r   z4attachment; filename="{}.{}"; filename*=UTF-8''{}.{}zContent-Dispositionr  )opusmp3flacwavwr  pztranscoding to [{}]z :utfcrcpax)utf8pre_crccmprS  rT  r;  rU  T)6rF  r  r(   r{  r   r   r   	no_tarcmpr   r   r   r'  r`  r   r   r   r  r  r  r  stringascii_lettersdigitsr&  rc  r   r}  r   chrordr~  r   r  r  r   	no_bacoder   r   r   r   r   r   r   r   r   r  r  r   r  rx   r  r  stopr  )%r   fmtuargr   r   r   r	  r  r  cancmppackerr  r  rs   maxsmaxnr  nbr  r  safer  afnbasciir  zblufncdiscfmtr  r  r  bgenrw   bsentr  r  s%                                        r   rC  zHttpCli.tx_zip  s    MM"((#a. ""2txx0YY(((%<F$$,)ETM+DDL)*$DFC58U1X3%%c*2.B%a(B88<<!HHLL#

c(988<<,1D88<<,1DBB99sCJ

Etyy?S?S;SD HAY',1A -B!GB"T(***BbyD2I$S!n,	-
  -B"T(***Bby$S!n,-  -B!GBby$S!n,-
 $$v}}4==c2FggLAAc2!66qC?LM%%g.YYw 34
 	  ; Ag&%%a(//89C  UWWqf71:)2B2B3q62JJWCWhhsm""7+G{{3S#.d$T4I43PQyy3E
DJJ499;O;O7O
 ==!4!4C %D .55d;<tT]]DJJtLiik $16
GG

C(JJ*
		4::& iinn  99;*DJJHHII$*d(TM$%-R
 88: 	7Cs#S! FAAv#'99;"6DJJ	7" ii!!&#./W M Xh+6BB		s   (YAY0Y#)Y((&Zc                    | j                          |j                  d      rd}d}t        j                  d      }|j	                  d      d d d   }|s|d d }d}|D ]5  }t        |      dkD  s|j                  |      r nd	j                  ||      }7 |j                  d      xs d
}t        |      dkD  rd|dd  z   }| j                  ||      S )Nr   folderTz[](){}/ []|^[0-9_-]*$r!  ry   r   r  z{}.{}unk   ~i)
r  r  rL  compiler`  r  r   r{  r'  tx_svg)r   r  r]  badrw   r  s         r   rt  zHttpCli.tx_ico  s    <<CEjj12IIcN4R4 #2A 	)A1vzSZZ]..C(C		) jjo&s8b=BC.C{{3&&r   c                     | j                   j                  || d| j                  v       \  }}t        | j                  j
                        }| j                  ||d|i       y)NrasterrI  r  T)r   r   r   r2   r   r   r  )r   r>  smallr  r   lms         r   r  zHttpCli.tx_svg  sU     HHLL%iT[[1HI	c		"

3TOR+@
Ar   c                 P   | j                   rdndd| j                  | j                  j                  | j                  }d}g }| j
                  rM| j
                  j                         D ]0  \  }}|dk(  r|dk(  r|}|j                  |dk(  r|n|d|       2 |r|dd	j                  |      z   z  }|r|d
|z   z  }| j                  d|d       t        t        j                  |j                  d            d      }| j                  |j                  d      d       y)Nr  rF  rG  r   r5  r  r)  r   r   r  zqrcode()r%  r  zimage/svg+xmlrQ  T)r   r   r   r:  r   r   r	  r  rc  r   r   r   encode_binaryr}  r  )r   r  r  uparamsr-  r  r0  s          r   r  zHttpCli.tx_qr  s   }}G&0IIIIMMKK	
 <<**, C19<EAGqAq1ABC 3'***C3;C&'V))#**W*=>B

3::g&_
=r   c                    d| j                   d| j                  d}| j                  s-d| j                  v sd| j                  v r| j	                  d      S d| j                  v rdnd}| j                  |      }t        j                  |      }|j                  }d	| j                  j                  z  }d
}	d}
d}t        || j                  j                        D ]  }|	|k  r||z  }nd}|	s,d|d d v r%|d |j                  d      dz    }
|	t        |
      z  }	|	t        |      z  }	dD ]2  \  }}|	t        |      t        |j                  |d            z
  |z  z  }	4  |rd|j                   v rd| j                  vr|d| j                  vrn|j                   j#                  d      rS|j%                  dd      }| j'                  ||j                   j#                  d      xs g       }|j)                  dd      }|r"t+        |      }t        |
      t        |      z   }	t-        t/        || j0                  j2                              }| j5                  |      \  }}}|| j6                  d<   | j6                  j9                  t:               |rdnd}d}d| j                  v rdj=                  | j                  d         }d}| j>                  r| j                  j@                  nd| jB                  jD                  jG                         d| j                  v tI        | jJ                  d      t-        |dz        | j                  jL                  | j                  jN                  | j                  jP                  | j                  jR                  ||d}| j                  jT                  r*d|vr&| j                  jT                  }|d|v rd ndz  }||d<   | jV                  j                   j#                  d!      }|r| |d"<   | jY                  ||       | jZ                  |d!<    |j\                  d'i |j)                  dd      }|j_                  |j)                  d            }t        |      dk7  rta        d#|z         | jc                  |	t        |d
         z   t        |d         z   |       |te        |      z  }| jf                  d$k(  s|s| jh                  r| jk                  |       y	 | jl                  jo                  |d
   |
z          |r| jl                  jo                  |       nIt        || j                  j                        D ]&  }| jl                  jo                  t+        |             ( | jl                  jo                  |d          | jh                  r)| jk                  |dz   te        t        |            z          y#  | jk                  |d%z          Y y&xY w)(Nz     r[  r   editedit2Tmder     r   r      
r  r	   ))   &r;  )   <rm   )   >rm   r$  r&  r%  r&  rI  r  r  r   r-  z?k={}&zoll	ider   r3  rz   )r   r   r  r  r  r   r   have_empmd_chk_rater  arg_baser   r   r   r   zboundary appears in rD  z [31md/c[0mFr   )8r   r   r   r   r  r  r   r  r
  r   txt_maxrj   r  r:  r  r&  r  r   r~  r)  r}  r@   r  r  r   r   r  r   r  r  r{  r   r   r   r   r   rA   r   r   r   empmcrr  r   r  r   r  r`  r   r  r   r   r   r   rx   r  )r   r   rz  r  r  templater  ts_mdr  sz_mdleadfullfiler  r   r  fulltxtr  r  r  r  r  r  boundarytargsr  zfvr  s                              r   tx_mdzHttpCli.tx_md  s   #'88TZZ8~~$4;;(>{{4(($++-e488C=XXg		)))Wdiioo6 	CCv~CUc"1g-0SXXe_q01T"SXE9 C1#c(SQ)<%==BBC	C !dkk)t{{*X&oogy9Gll7BHHLL,B,HbIG~~gy9H#H-HIH-Ec%+,#'#4#4W#= gq,8))S$++t{{3'78H!%!1!1r))..,,.dkk) $754<(IINNii&&		99== 
 99$e"3##B#+BE$Kggmm, E&M!!#u-!^^kX__%u%,,Wi@xx01t9>2S899%#d1g,.T!W=vF'&/!99g{{ 	FFNN47T>*x($Wdiioo> 6CFFNN<#456 FFNN47# ;;HHVc\GCI$667	HHV334s   'B&W Wc                 :   t        j                  dd| j                  j                        xs d}| j                  }d|v rdnd}||v r|j                  dd      \  }}d|z   }n|}d}|j                  d      rx| j                  j                  rb| j                  j                  sL| j                  j                  j                  j                  | j                        xs |}d|v rd	|vr	d	|d}n|}| j                  d
   xs dj                  d      }| j                   j#                  d      xs d}|| j$                  j&                  v rd}| j)                  d| j                  t+        | j$                  j,                        | j.                  rdndt1        |      t1        |      t1        |      t1        t3        | j                  j4                  |            t1        |      t1        |      |t1        |            }	| j7                  |	j9                  d             y)Nz[^0-9a-zA-Z]+r   r   rE  rD  r  r	   z.localrC  re  r   r   hunter2svcsrx   )r   accsrx   ripepr>  rvpr   hportanamer   r%  T)rL  r   r   vnamer   r  r  zmrclone_mdnsr   r   nmr[  r   r   rZ  r   r   r   r   r
  r   acctr   rB   re   r   r  r}  )
r   r  r
  r!  r   r  r	  r>  r   r  s
             r   r  zHttpCli.tx_svcsI  s   DIIOO<CYYRidS"9))C+KD%%KEDE=="tyy||DII<Q<Q))..##''08DCczcn #oCkk$%2--c2\\d#0yBxxdiinn%]]cC 22E$))++r23T"e$2  
 	

4;;w'(r   c                 
   | j                  i dg      }| j                  | j                  | j                  fD cg c]'  }|D cg c]  }d|z   j	                  d      dz    c}) c}}\  }}}g }t        j
                         }| j                  xr | j                  j                   }	| j                  xr% | j                  j                   xr | j                  xs d}
|	s|
rm| j                  j                  j                  j                  d|	|
      }t        j                  |j!                               }|d   j#                         D ci c]  \  }}d|z   j	                  d      dz   | }}}	 |d   D ]  \  }}}}}t%        dd|z
        }t%        d	||z
        }t'        |j)                  t*        j,                  d            \  }}|sd}t/        |      }|j)                  dd
      }t1        ||z  |z  d      dz   }|dk  rt3        ||z  |z
  d      nd}t3        ||z
  d      }|j5                  t7        d|z        ||||||f        	 |	s
i }d d d d d d}g x}}| j                  j                  j<                  r<| j                  j>                  } | dk(  s| dk(  r| j                  r| jA                         }|D ]  \  }}!}"}}}#}$t%        d	||z
        }t'        |      \  }}|sd}t/        |      }|j)                  dd
      }t1        |"|z  d      dz   }t1        |"d      }%t3        ||!z
  d      }|#r|#d|$n|$}&|r+|"r)|r't3        ||"z
  |"|z  z  d      }t7        d|"z  |z        }'ndx}}'|rtC        |      n| j                  j                  jD                  }|j5                  |'|%||||&|||f	        | j                  jF                  rh| jH                  jJ                  jL                  }(|D cg c]  }d|(|dd    jN                  vs| }}|D cg c]  }d|(|dd    jN                  vs| }}| jP                  j!                  dd      })|)s| jR                  jU                  d      rd})|)dv r
| j                  dk(  rd}*ndjW                  | j                        }*r$|*dz  }*dD ]  }|*djW                  ||         z  }* |r/|*dz  }*|D ]   }+|*d d!jY                  d" |+D              z  }*" |*d z  }*|r/|*d#z  }*|D ]   }+|*d d!jY                  d$ |+D              z  }*" |*d z  }*|r|*d%z  }*|D ]
  }|*d&|z   z  }* |r|*d'z  }*|D ]
  }|*d&|z   z  }* |*j[                  d(d)      d*z   },| j]                  |,d+,       yd}-| j                  j^                  }.d-| jP                  v rta        |.      | jb                  d.<   n|.rd/|.}-| je                  d0| t/        | jf                        | ji                         z   |||| j                  jj                  xr/ | jl                  jU                  | j                  jn                        ||d1   |d2   |d3   |d4   |d5   ||-| jq                         | js                         | j                  jp                  d6kD  | j                  jr                  d6kD  | j                  jt                  rtv        nd| j                  jx                  xr | j                  dk7  | jz                  rdnd7| j|                  z   | j~                  z   8      }/| j]                  |/j[                  d(             yc c}w c c}}w c c}}w # t8        $ r }| j;                  d|d       Y d }~!d }~ww xY wc c}w c c}w )9Nr  r   r   zup2k.get_statevolstaterr  gMbP?r	   r   / Tz/sz--d   z failed to list upload progress: )scanninghashqtagqmtpqdbwtr  r[  unlistcrry   unlistcwr  zcurl/fetchr  r  r  r>  r#  z%howdy stranger (you're not logged in)zwelcome back {}z
status:z {}({})z

incoming files:r   rH  c              3   2   K   | ]  }t        |        y wr   r  r  s     r   r  z$HttpCli.tx_mounts.<locals>.<genexpr>       /C1A/Crv  z

active downloads:c              3   2   K   | ]  }t        |        y wr   r"  r  s     r   r  z$HttpCli.tx_mounts.<locals>.<genexpr>  r#  rv  z
you can browse:z
  z
you can upload to:r%  r&  r  r%  rQ  rL  Refreshz&re=splashr  r  r  r  r  r   rF  )r   qvpathr   r   r   in_shrvstater  rr  r  r  r  r  r  url_sufrL  r  r  k304visno304visverr*  ahttps)@r-  r   r   r   r'  r   r   	no_rescan
no_up_listr   r   r   r  rX  r  rS  r   r	  r  rh   r&  r  r!  rL   rC   rV   r  r  r   r   tdlsdl_listget_dlsrA   iiamhave_unlistcr   r   r  r  r   r   r   r{  rc  r}  r  ctl_rer  r   r
  r   r1  rZ  r   r[  r  r  r-  r   r*  r   r   r   )0r   r;  r  r  r   r   r   rr  r  get_vstget_upsvsr-  r  r)  r   rt   r   poker>  fdoner  rdrs   erdrdsr  etaidler   r  r2  r  t1r  r   r   hsentusrpercallvolsr  r>  ra  r  re_btnnrer  s0                                                   r   r  zHttpCli.tx_mountsq  s]   iiSE" iiDII6
 344QcAgc"S(4
dD
 iik))7DII$7$7 7))GDII$8$8 8GTZZM2g		%%))*:GWMAAEEG$BACJAUAUAWXAsQw&&s+c114XFXJ-/Y Q)CRrq3w/ES#(+B#BJJrvvs$;<FB  *C**S%0C#BJOT:TAC<?!G%er 148C tT2DJJC%K 0#sD#sBOPQ F B g99>>""BQw27tyy,,.29 	I.BD"b%S#(#BBZFB*C**S%(CD2It,t3CdD)Er4(D/4eU+%CdrR$Y4"95t<3:?+!!d$&RDIINN,?,?BJJeS#tS#sBGH%	I( 99!!iimm,,G#P!z1R9I9O9O'OAPDP#P!z1R9I9O9O'OAPDPkkoodB'tww))*<=C##zzS ='..tzz:{"F 6A9++Ar!u55C6 ,, GBTYY/C/C%DFFCGt.. GBTYY/C/C%DFFCGt** &A6A:%C& -- &A6A:%C& GY/%7BJJr ;J<ii4;;*-c(DY'!$&Fxx$++&599==JTZZ%:%:499>>%J
^W+FFF**,IINNQ&YY__q(!YY]]	5DJJ#$52J,BTXX,M1  
4 	

4;;w'(_ 5
 Y  JEqIIJP QPsN   	]\>!]"]	5C] 5];];^ 3^ >]	]8]33]8c                 f   | j                   d   j                  dd      \  }}|dv rdnd}t        ||| j                  j                  | j                  j
                  d|      }| j                  j                  d|f       d	| j                  v r| j                  d
d       y| j                  d       y)Nrm  r)  r	   )r   r  r   i0Fr  ccr   ?h#ccs   o7
T)r   r`  r6   r   r   r  r   r  r   r?  r  )r   r-  r  r  r  s        r   rm  zHttpCli.setck  s    {{7#))#q11iA[q!TYY[[$))*>*>qI""L"#564<<MM"g&  JJwr   c                    t         D ]e  }|| j                  vrt        |d| j                  j                  | j                  j
                  d      }| j                  j                  d|f       g | j                  dd       y)Nr  Fr  r   rJ  T)	ALL_COOKIESr   r6   r   r   r  r   r  r?  )r   r-  r/  s      r   r  zHttpCli.set_cfg_reset  sp     	?A$q#tyy{{DII4H4H%PF&&f'=>		? 	b'"r   c           	         d}| j                   j                  rd}d}n|rd}d}d}nd}d}| j                  j                  d	      r6d
| j                  d|d}| j                  |j                  d      |       yd| j                  v r4t        | j                  d         d d dv r| j                  d|d d z         S |dk(  r| j                  dk(  rd| j                  vrq| j                  j                  d      rE| j                   j                  r@| j                   j                  j                  | j                        rd}d| j                  d<   |j                  | j                   j                        }t!        | j"                        | j%                         z   }| j'                  d| ||| j                   j(                  xr/ | j*                  j                  | j                   j,                        | j.                  rdnd| j0                  z   | j2                  z         }| j                  |j                  d      |       y)Nr   u   <h1 id="n">404 not found &nbsp;┐( ´ -`)┌</h1><p id="o">or maybe you don't have access -- try a password or <a href="{}/?h">go home</a></p>uR   404 not found  ┐( ´ -`)┌   (or maybe you don't have access -- try a password)uj   <h1 id="p">403 forbiddena &nbsp;~┻━┻</h1><p id="q">use a password or <a href="{}/?h">go home</a></p>u3   403 forbiddena ~┻━┻   (you'll have to log in)r:  u[   <h1 id="n">404 not found &nbsp;┐( ´ -`)┌</h1><p><a id="r" href="{}/?h">go home</a></p>u   404 not found  ┐( ´ -`)┌r  z# acct: r   r%  r'  Tthr	   jwerm   r#  rA  zMozilla/r  r  r  r&  r   rF  )r   r'  r   r(  r.  )r   	vague_403r   r   r   r  r}  r   r  r  r   dav_ua1r   r   r{  r   rL   r   r1  r
  rZ  r   r[  r   r   r   )r   is_403rQ  r  ptqvr  s          r   r  zHttpCli.tx_404  s   99 cAeB|AFBBmA0B7701'+zz26BJJryy)"J54<<CT(:$;BQ$?4$G;;sRV|,, #I

c! 4GG&&z2II%%$))*;*;*B*B477*K B3DD/0HHTYY\\"DKK 4::</xx99==JTZZ%:%:499>>%J2J,BTXX,M  
 	

4;;w'
3r   c                    |D ]J  }	 t        || j                  j                        }|j                  | ||      }|s:|j                         c S  y# t        $ r*}| j	                  dj                  |             Y d }~|d }~ww xY w)Nzimport failed: {!r}r   )rH   r   hot_handlersr   r   r{  mainrb  )r   modsr   r   mpathrx  r   r0  s           r   r|  zHttpCli.on40xK  s     		#EUDII$:$:;
 ((4S)Cyy{"		#   .55b9:s    A	B A??Bc                 `   | j                   j                  rt        dd      | j                  d   j	                  d      }|dgk(  r| j
                  g}g }|D ]  }| j                  j                  j                  || j                  dd      \  }}|j                  |j
                         | j                  |j                  j                  vsv| j                  d|d|j
                  d	d
       t        dd| j                  z          | j                  dt        |      |fz         | j                  j                  j                  |ddg} | j                   j"                  j$                  j&                  dg| }|j                         }|s| j)                  dd       yt        d|      )Nr:  z/the rescan feature is disabled in server configrh  z,/r   Tzrejected scanning [z] => [z];rm   z'scanvol' not allowed for user ztrying to rescan %d volumes: %rFzup2k.rescanr  r  )r   r/  r(   r   r`  r   r   r   r   r   r  axsuadminr   r  r  r   r   r  rX  r?  )	r   r   r#  r   r   r  r   r  r~  s	            r   r  zHttpCli.scanvolY  sc   99OPPV$**40bT>jj\F 	REIIMM%%eTZZtDEBKK!zz.eRXXNPQRS"Cdjj"PQQ	R 	2c$i5FFG		&&eT:%DIINN!!%%m;d;eegMM"d#S#r   c                    | j                   j                  d      }|dk7  rt        dd      | j                  st        dd| j                  z         | j
                  j                  rt        dd      | j                  j                  j                  j                  ddd      }| j                  d	d
|j                         dd      S )Nrk  cfgr   z,only config files ('cfg') can be reloaded rnr:  z'reload' not allowed for user z/the reload feature is disabled in server configTr   r  r  F)r   r   r(   r   r   r   	no_reloadr   r   r  rX  r?  )r   r!  r  s      r   r  zHttpCli.handle_reloadu  s    kkooh'%<LMMyy>KLL99OPPIINN!!%%hd;}}RquuwUCCr   c                    | j                   sB| j                  D cg c]  }|| j                  v s| c}st        dd| j                  z         | j
                  j                  rt        dd      dj                  t        j                         t        t                           }| j                  |j                  d             yc c}w )Nr:  z'stack' not allowed for user z2the stackdump feature is disabled in server configz
<pre>{}
{}r%  T)r   r   r   r(   r   r   no_stackr{  r   rA   r-   r  r}  )r   r  r0  s      r   r  zHttpCli.tx_stack  s    yyTYY!I!tyy.!!I=

JKK99RSS""499;HJ0GH

3::g&' "Js
   CCc                 p   | j                   d   xs d}| j                  }|dv rt        | j                  dz   |z         }||k(  rd}n3|r1|j                  |dz         st	        dd      |t        |      dz   d  }| j                  ||| j                   j                  dd            }| j                  rM| j                   d   s>| j                  j                  j                  d      }t        |      D ]  }d||d	g i} t        j                  |      }| j                  |j!                  d
      d       y)Nrg  r   )r!  z..r   r  zarg funkr	   r-  r   r%  rv  rQ  T)r   r   rb   r   r(   r  gen_treer   r   r   r   r`  reversedr  r  r  r}  )r   topr]  r0  parentsparentr  s          r   r  zHttpCli.tx_tree  s   kk&!'Rjj+

S(3./C#:C>>#),S*--c#hln%CmmCdkkooc2&>?DKK$7 iikk'',G"7+ 8 &(#sB78 ZZ_

299W%,>
?r   c                    i }d }|r`|j                  dd      dgz   d d \  }}| j                  dj                  ||g      j                  d      ||      }||dt	        |      z   <   | j
                  j                  }d}|rx|j                  || j                  dd      \  }	}
|	j                  j                  d      r<| j                  |	|	j                  |
            r|	j                  j                  d      }d}d}	 |j                  || j                  | d      \  }	}
|	j                  |
| j                  | j                  j                   d	dgdd	gg      \  }}}| j                  |	j                  j                   v }|	j                  j                  d      }|D cg c]*  }t'        j(                  |d   j*                        s&|d
   , }}|rd| j,                  vrt/        |      }|D cg c]  }||k7  s	t	        |       }}|rp|rng }|D ]e  }t0        j2                  j                  ||      }| j5                  d| j                  j6                  |d
d
      d | }|j9                  |dz   |z          g |}|D ]j  }||k7  s		 |j                  t;        ||      | j                  d	d      \  }}t=        j&                  |j                  |d             |j9                  |       l ||d<   |S #  d }g }i }| j"                  D ]*  }d|v r|j%                  dd      nd|g\  }}||k(  s&|||<   , Y xY wc c}w c c}w #  |dz  }Y txY w)Nr   r	   r   r  r-  Fdksr  Tr   r=  r  r   r   )r`  rd  rc  ra  rL   r   r   r   r   r  rA  r  r  r   r  r\  udotr   r  r  r  r  r   r1   r  r   r   r  r  re   r   )r   rf  targetr  r0  exclr   r   dk_szr   r   r=  fsrootr  r  r  d1d2r  dirskdirsdnr  r  dvndrems                             r   rd  zHttpCli.gen_tree  s$   "LLa0B47!<LD&--#t 5 ; ;C @&"MC&)CfTl"#iimmggc4::ue<GBxx||E"t'7'7BLL<M'NT*	'ggc4::5y%@GB')uu

II(((.	($FFH ::,DHHLL&E %CQqT\\(B!CCvT[[0#D)D#'5a19q	55VE .WW\\&"-[[DII$5$5r1a@%HR%Z"_-. D 	ADy #c1tzz4 OICHHS]]478 A	 C
E	'EFHYY '-0AX#q)B7B9#&HRL'
 D
 6IAs8   >BK0 'L7L7.
L<9L<AM09L4*L4M
c           
      z   g }| j                   j                  j                  }| j                  j                  }|dd  }| j                   j                  j
                  j                         D ]K  \  }\  }}}}	}
||   \  }}|dkD  r|dz  }| j                  |j                  j                  vrd}	n| j                  |j                  j                  vr|	j                  d      sd|	v rd}	n|r|	j                  |      r}| j                  |j                  k7  rd| j                  |j                  j                  vrB| j                  | j                  j                  vr |j                  | j                  dz         sd}	| j                  |j                  j                  vrdx}}
|j!                  |||||	||
g       N |S )Nr	   r?  r   r!  /.r  )r   r   r1  r   rZ  tdlir	  r   r\  ureadrk  r   	shr_ownerr]  shr_admr   r  )r   r0  r  enshareshrsr   r   rt   r   r>  r   rA  r  s                r   r3  zHttpCli.get_dls  sn   iinn!!))--qr{.2iinn.A.A.G.G.I 	=*E*BBE5zHBh zz-266;;.BMM#4F$RT*MM$'JJ",,.JJbffmm3JJdii&7&77((37zz. ""JJBb"eU;<)	=* 
r   c                     | j                         D cg c]!  }|d   |d   |d   |d   |d   |d   |d   d# }}t        j                  |d	
      }| j                  |j	                  dd      d       yc c}w )Nr   r	   r  rm   r;  r  r  )r   rA  r  r  r   r   r   z,
r  
separatorsr%  r&  rv  rQ  T)r3  r  r  r  r}  )r   r  r0  r  s       r   r  zHttpCli.tx_dls  s     \\^
  dd!!!!1
 
 ZZ6

299Wi07I
J
s   &A6c           	         | j                   j                         }|rt        |d      st        st	        dd      t	        dd      | j
                  j                  d      xs d}t        |      \  }}d||fz  }| j                  j                  rX| j                  j                  | j                  j                        r)| j                  j                  | j                        \  }}nd }i }g }	t!        j                          }
t!        j                          | j                  j"                  z
  }| j$                  j&                  j(                  j+                         D ci c]y  \  }}d|j,                  v rf| j.                  |j0                  j2                  v s"| j.                  |j0                  j4                  v r"||j,                  d   d	|j,                  v rd
ndf{ }}}t        | d      }|r5g }dt6        z   }| j9                  |d       | j:                  rt	        d|      | j                   j<                  j>                  jA                  d| j.                  |rdn| jB                        }|j                         }g }d|v rd|d<   n|d   }tE        |      }| j                  j"                  sg }n7tG        | j$                  j&                  j(                  jI                               }|D cg c]Q  }d|j,                  v rAd|j0                  jJ                  v s'| j.                  |j0                  jJ                  v s||k(  r|S }}|D ][  }|jM                  |      }|s|j                  |      xs d\  }}d}d}|jO                  || jB                  |f      D ]  \  }}}}ddjQ                  d |j                  ||fD              z   }|dk(  s|dk(  r||jS                         v rnK|d
k(  r |jS                         j                  |      s's|dk(  r |jS                         jU                  |      s|dz  }|s ||||d}|r#|jW                  tY        ||            |d<   ||d<   |	j[                  |       tE        |	      dkD  s|	j]                  d d !       |	d d }		 ^ |	j]                  d" d !       tE        |	      dkD  r|	d d }	tE        |	      dk\  rd|d#<   |	D ]  }t_        |d$         |d$<   |ja                  d%      }|s(|ja                  d      } |ja                  d      }!	 tc        jd                  |!      }"| jg                  | | j                  jh                  |!|"jj                  tl        rdn|"jn                        }#|d$xx   d&|#d | z   z  cc<    |sd|d'<   g }	tE        |	      }$||	z   }	|r_tq        | j                  tY        |j                              \  }%}&|	D ]-  }'|'d$   }|j                  |&      s|%|tE        |&      d  z   |'d$<   / | jr                  r&|	D ]!  }'| j                  jt                  |'d$   z   |'d$<   # |	|d<   ||d(<   |$|d)<   tw        jx                  |d*+      }(| j9                  d,|||$t!        j                          |
z
  fz         | j{                  |(j}                  d-d.      d/0       y c c}}w c c}w #  Y xY w)1Nr  r  z/sqlite3 not found on server; unpost is disabledz1server busy, cannot unpost; please retry in a bitfilterr   zups %d%rr  r  r  r	   rk  z&will not return list of recent uploadszup2k.get_unfinished_by_usertimeoutnourY  e2dr#  r   r     zBselect sz, rd, fn, at from up where ip=? and at>? order by at descr   c              3   &   K   | ]	  }|s|  y wr   r   r  s     r   r  z!HttpCli.tx_ups.<locals>.<genexpr>X       #H!aA#H   r   rm   )r>  rt   rr   nfkr  fk_algi  c                     | d   S Nrr   r   r  s    r   <lambda>z HttpCli.tx_ups.<locals>.<lambda>o  
    1T7 r   Tkeyreversec                     | d   S r  r   r  s    r   r  z HttpCli.tx_ups.<locals>.<lambda>r  
    qw r   ocr>  r  r  nocnuncr  r  z%s #%d+%d %.2fsecr%  r&  rv  rQ  )?r   r  r   r!   r(   r   r   r^   r   rZ  r   r   r[  r   r  r   r   unpostr   r   r  r	  r  r   r\  rz  upgetBADXFFr   r   r   r  rX  r   r  rx  r  uwriteget_curr  rc  rb  r  r  re   r  r  rL   r_  r   r  r   r  r  r
   r  rg   r   r   r  r  r  r}  ))r   r  sfiltnfivfir  shr_dbvshr_vremwretr0  r   r  r>  volfk_volsrk  rE  r  r  zdsauretr  r  r  r  rw   r  rt   r<  rs   rr   rvr   r  r  r  r  vp_shrra  r  r  s)                                            r   r  zHttpCli.tx_ups  s/   ii!!#'#w/S"STTQRR)/Re$S3,&99==TZZ22499>>B $ 9GXGYY[iikDII,,,  99==11779
Csyy sww}},

cggmm0K #))D/(:1BB
 
 $	*G86AAHHQNyyS!n$IINN!!%%)4::Wr$''
 DK9DYyyG499==1188:;G 
$

aeell(Ba7l 
 
  "	%C++c"C!++c*4fKCATA"%++a$''3"@ %BB388#H		2r/B#HHH!8qSBHHJ->AX88:005 AX88:..s3 Qb3?"}}U2r];BtH#)BxL

2s8d?HH!2DHAet*C3%"	%H 	&5s8d?et*Cs8tDJ 	)Bbh'BtH&&-C&&"CBXXb\ TYY&&BJJVB tH4C((H!	)$ DKCXSj $DJJgmmX0NONFF 9tW==($r#f+-'88AdG9
  1)),,40$1 S	T
T
zz$=9$BDIIK"4D'EEF

4;;w	29K
L{
>
xs   A>Z>,A[,[		[c           	         | j                   j                  rt        dd      | j                  j	                         }|rt        |d      st        st        dd      t        dd      | j                  j                  d      xs d}t        |      \  }}d||fz  }| j                  |       g }t        j                         }| j                  j                  j                  j                         D cg c]L  }d	|j                   v r<d
|j"                  j$                  v s"| j&                  |j"                  j$                  v r|N }	}|	D 
ci c]J  }
d|
j                   v r:d
|
j"                  j$                  vr"|
|
j                   d   d|
j                   v rdndfL }}
|	D ]  }
|j)                  |
      }|s|j                  |
      xs d\  }}d
|
j"                  j*                  v xs" | j&                  |
j"                  j*                  v }d
|
j"                  j,                  v xs" | j&                  |
j"                  j,                  v }|
j                   d   }|s|dk(  r|sd}d}|j/                  |      D ]  \  }}}}}ddj1                  d |
j2                  ||fD              z   }|dk(  s|dk(  r||j5                         v rnK|dk(  r |j5                         j7                  |      s't|dk(  r |j5                         j9                  |      s|sd|v r||||||d}|r#|
j;                  t=        ||            |d<   ||d<   |j?                  |       tA        |      dkD  r|jC                  d d       |d d }|dz  }|r   |jC                  d d       tA        |      dkD  r|d d }|D ]  }tE        |d          |d <   |jG                  d!      }|s(|jG                  d      }|jG                  d      }	 tI        jJ                  |      }| jM                  || j                   jN                  ||jP                  tR        rdn|jT                        }|d xx   d"|d | z   z  cc<    | j                   jV                  r5|D ]/  }|jG                  d#      }|r|d$   | jX                  k(  rd%nd&|d$<   1 n9|D ]4  }|jG                  d#      }|r|d$   | jX                  k(  rd%nd&|d$<   d|d'<   6 | jZ                  r&|D ]!  }| j                   j\                  |d    z   |d <   # t        j                         } | j                  d(|tA        |      | |z
  fz         t_        |       ||d)}!ta        jb                  |!d*+      }"d,| jd                  v r$| jg                  |"ji                  d-d.      d/0       y| jk                  d1| tm        |"      2      }#| jg                  |#ji                  d-      d34       yc c}w c c}
w #  Y NxY w)5Nr  z6listing of recent uploads is disabled in server configr  z/sqlite3 not found on server; recent-uploads n/az5server busy, cannot list recent uploads; please retryr  r   zru %d%rr  r#  r  r  r  r	   r  ups_whorz   z=select sz, rd, fn, ip, at from up where at>0 order by at descr   c              3   &   K   | ]	  }|s|  y wr   r   r  s     r   r  z"HttpCli.tx_rups.<locals>.<genexpr>  r  r  r   rm   rx  )r>  rt   r   rr   r  admr  r  r  c                     | d   S r  r   r  s    r   r  z!HttpCli.tx_rups.<locals>.<lambda>  r  r   Tr  c                     | d   S r  r   r  s    r   r  z!HttpCli.tx_rups.<locals>.<lambda>  r  r   r>  r  r  r  r   z(You)z(?)rr   z%s #%d %.2fsec)r  r  rr  r  r  r  r%  r&  rv  rQ  rups)r   r  r  r'  )7r   no_ups_pager(   r   r  r   r!   r   r   r^   r   r   r   r   r  r  r  r\  rz  r   r  r]  rk  r  rc  r   rb  r   r  r  re   r  r  r  rL   r_  r   r  r   r  r  r
   r  ups_whenr   r   r   r  r  r  r   r  r}  r
  rE   )$r   r  r  r  r  r  r0  r   r  rE  r  r  r  r  r  r  r=  r@  rw   r  rt   r<  rs   r   rr   r>  r  r   r  r  r  r  r  ret2r  r  s$                                       r   r  zHttpCli.tx_rups  s   99  VWWii!!#'#w/S"STTUVV)/Re$S#u%YY[ YY]]++224
SAEEKK%74::;T 
 
 
syy S%= #))D/(:1BB
 
  4	C++c"C!++c*4fKC'G4::+GC#'',,&D$***DD))I&C#AOA&)kk!n #"BB388#H		2r/B#HHH!8qSBHHJ->AX88:005 AX88:..s3 
  "}}U2r];BtH#)BxL

2s8d?HH!2DHAet*CQG##4	l 	&5s8d?et*C 	)Bbh'BtH&&-C&&"CBXXb\ TYY&&BJJVB tH4C((H!	)$ 99 IffUm*,T(dgg*=w5BtHI
  !ffUm*,T(dgg*=w5BtH BtH	!  1)),,40$1 iik!RS38$<<=3x5=zz$=9$,,JJt{{7I6=OJPxxTYt_x=

4;;w'
4g


Vs   4AW4AW9 W>>Xc           	         | j                   j                         | j                  j                  vrt	        dd| j                   z         | j
                  d   }|j                  d      rdd l}|j                  | j                  j                        }|j                  d|dd  f       |j                          |j                          | j                  j                  j                  j!                  dd	d
      j#                          | j%                  dd       y
t'        | j(                  j*                  j-                               D cg c]  \  }}|ddj/                  |      z  g }}}| j1                  d| |t3        t5        j4                                     }| j7                  |j9                  d      d       y
c c}}w )Nr:  z'idp' not allowed for user rq  zrm=r   zdelete from us where un=?rm   rk  FTr   z?idpz[%s]z], [)r   rowsr  r%  r  r'  )r   rb  r   idp_adm_setr(   r   r   sqlite3connectidp_dbr  commitr  r   r   r  rX  r   r?  ry  r   idp_accsr	  rc  r
  r  r   r  r}  )r   cmdr  dbr-  r  r  r  s           r   r  zHttpCli.tx_idp-  sa   ::TYY%:%::;djjHIIkk% >>% !1!12BJJ2SWJ?IIKHHJIINN!!%%ht<@@BMM"f% tyy11779:
1 &++a.)*
 
 xxDtTYY[9IxJ

4;;w'
4
s    Gc           
         | j                   dk(  r| j                  d       y| j                  j                         }|rt	        |d      st
        st        dd      t        dd      |j                         }|st        dd	      |j                  d
      j                         }|D cg c]  }t        |       }}| j                   | j                  j                  k7  r"|D cg c]  }|d   | j                   k(  s| }}| j                  d| | j                  j                  |t        t!        j                                      }| j#                  |j%                  d      d       yc c}w c c}w )Nr#  zyou're not logged inTr  r  0sqlite3 not found on server; sharing is disabledz6server busy, cannot list shares; please retry in a bitr   5huh, sharing must be disabled in the server config...zselect * from shr  ro  )r   rZ  r  r  r%  r  r'  )r   rd  r   r  r   r!   r(   get_shrr  fetchallrx  r   r|  r
  rZ  r  r   r  r}  )r   r  r  r  r  r  s         r   r  zHttpCli.tx_sharesG  s7   ::OO23ii!!#'#w/S"TUUVWWkkmUVV{{-.779!%&AQ&&::***#:!qttzz'9A:D:xx4TYY]]3tyy{CS  
 	

4;;w'
4 ' ;s   )E*$E/<E/c                    | j                   j                         }|rt        |d      st        st	        dd      t	        dd      | j
                  j                  d      xs | j                  j                  d      d   }| j                  j                  r| j                  d|z          |j                         }|st	        d	d
      |j                  d|f      j                         }|r|d   r|d   d   nd}|st	        d	d      |d   d   }|| j                  k7  r@| j                  | j                  j                   k7  rd}t	        d	|| j                  |fz        d}| j
                  d   }	|	dk(  rh|j                  d|f       || j"                  j$                  j&                  | j                  j(                  j+                  d         j&                  v rEd}nBt-        j,                         }
||
k  r|
}d}|t/        |	      dz  z  }|j                  d||f       |j0                  j3                          |r|| j                   j4                  j6                  j9                  ddd      j                          | j                   j4                  j6                  j9                  d      j                          | j;                  dd       y)Nr  r  r  7server busy, cannot create share; please retry in a bitskeyr   ry   zhandle_eshare: r   r  z!select un, t1 from sh where k = ?r   r   z#that sharekey didn't match anythingr	   zPyour username (%r) does not match the sharekey's owner (%r) and you're not adminFrw  r,  zdelete from sh where k = ?T<   z update sh set t1 = ? where k = ?rk  up2k.wake_rescannerz?shares)r   r  r   r!   r(   r   r   r   r`  r   shr_vr   r  r  r  r   r|  r   r   nodesrZ  ra  r   r  r  r  r   r  rX  r?  )r   r  r  r  r  r  expiryr  rk  r!  r  s              r   r  zHttpCli.handle_eshareb  sM   ii!!#'#w/S"TUUWXX{{v&C$***:*:3*?*C99??HH&-.kkmUVV{{>HQQSDGT!WQZCDDa

dii.?.? ?bAa4::r"2233kk(#$;KK4tg>tyy}}**499==+>+>s+CDJJJ))+C|c#hm#FKK:VTNKIINN!!%%ht<@@BIINN!!%%&;<@@Bb)$r   c                 
   | j                   j                         }|rt        |d      st        st	        dd      t	        dd      | j
                  j                  r)| j                  dt        j                  |d      z          |d   }|d	   }g }t        |      d
k(  r/|d   }|j                  d      s|j                  dd
      \  }}|g}n|D ]!  }|j                  d      sd}t	        d|       |d   j                  dd
      d   }|D ]@  }|j                  dd
      \  }	}
|j                  |
       ||	k7  s/d}t	        d|||	fz         |j                  d      }| j                  r`|| j
                  j                   k(  s%|j#                  | j
                  j$                        r"|t        | j
                  j$                        d  }t'        j(                  d|      }|rt	        dd|d
   d      |j#                  | j
                  j*                        rt	        dd      |j-                         }|st	        dd      d}|j/                  ||f      j1                         }|r)|d   r$| j                  d|       t	        dd|d      d|d   v }d|d   v }d|d   v }d|d   v }	 | j2                  j4                  j7                  || j8                  ||||      \  }}|j;                  || j8                  | j
                  j<                   ||||gg      \  }}}t?        |D cg c]  }|d   	 c}      }|D ]  }
|
|vst	        dd|
d       |j7                  d       xs d!}| j2                  j@                  jC                  |      }tE        tG        jF                               }|d"   }|rtE        |      nd}|r||d#z  z   nd}d!jI                  d$ tK        d%||||f      D              }d&}|j/                  |||||t        |      | j8                  ||f       d'}|D ]  }
|j/                  |||
f        |jL                  jO                          | j                   jP                  jR                  jU                  d(d)d*      j7                          | j                   jP                  jR                  jU                  d+      j7                          t        |      d
k(  rtW        |d         nd!}
d,| jX                  rd-nd.d/| jZ                  | j
                  j\                  | j
                  j^                  |d|
	}| ja                  |d01       y*#  t	        dd      xY wc c}w )2Nr  r  r  r  zhandle_share: r;  )r   r-  r>  r	   r   r   zQyou cannot select more than one folder, or mix files and folders in one selectionr   z2mismatching base paths in selection:
  [%s]
  [%s]z([^0-9a-zA-Z_-])z sharekey has illegal character [rE  z
yo dawg...r  zselect * from sh where k = ?zsharekey taken by z
sharekey [z] is already in user  permsr  rj  ri  z.you dont have all the perms you tried to grantz"selected file not found on disk: [r   r   r$  r  c              3   ,   K   | ]  \  }}|s	|  y wr   r   )r  zcr  s      r   r  z'HttpCli.handle_share.<locals>.<genexpr>  s     SFBPRRSs   
rwmdz'insert into sh values (?,?,?,?,?,?,?,?)zinsert into sf values (?,?)rk  FTr  zcreated share: r  rF  rG  rG  r'  )1r   r  r   r!   r(   r   r  r   r  r  r  r  r  r  ra  r   r   r   r  rL  r   r[  r  r  r  r   r   r   r   r  r  r  r   r  r  r   rc  r)  r  r  r   r  rX  rL   r   r   r   rZ  rd  ) r   r   r  r  vpsr/  r>  r  r  vp2rs   ru   r  r  r5  s_rds_wrs_mvs_delr   r   r  realsr  r  rfnsr   r  sexpr$  prsurls                                    r   rU  zHttpCli.handle_share  s   ii!!#'#w/S"TUUWXX99??HH%

3q(AAB3x$is8q=QB;;s#3*Bd );;s#kA a.() QsA&q)B 5))C+R

29NA a2s)m445 XXc]tyy{{!2bmmDIILL6QC		%'(BII)40qtMNN==(l++kkmUVV*[[TG$--/"Q%HHr344IJJ W%#g,&W%CL(	Pyy}}((TZZtT5QHC vv!5!55tT58Q7R
E1 %(QAaD() 	SB~SR"QRR	S WWT] bYY\\r"$))+5zc$iQ #cC"HnWWSc&4tU2K&LSS5Ab"b#c(DJJSIJ) 	'BKKD":&	' 			!!(E48<<>		!!"78<<>"3x1}VCF^" }}G&0IIIILLIIMM
 	S)S	PNOO
 )s   47U  0U1 U.c           	      <   |sO| j                   sC| j                  dk(  r| j                  dk(  rt        dd      t        dd| j                  z         | j                  j
                  rt        dd      d| j                  v }|r1t        | d	      r%| j                  d
t        z   d       t        dd      |s| j                  g}n;| j                  r/|D cg c]$  }|t        | j                  j                        d  & }}t        | j                  j                  d      xs d      }|r||gng }| j                   j"                  j$                  j'                  d| j                  | j(                  ||d|      }| j+                  |j                                yc c}w )NrL  r#  r  r  r:  z'delete' not allowed for user z/the delete feature is disabled in server configr  rk  zunpost was deniedr	   r  r   zup2k.handle_rmFT)r   r   r   r(   r   no_delr   r   r   r  r   r   r  r   r  r   r   r   r  rX  r   rd  )r   r   r  r  nlimr  s         r   r  zHttpCli.handle_rm  sV   4??yyH$s):S.11>KLL99OPPT[[(gdI.HH(6115OPP::,C367a1S&()7C74;;??5).Q/"tTlIINN!!%%djj$''3UF
 	  8s   )Fc                 V   | j                   j                  d      }| j                  rI|rG|j                  | j                  j
                        r"|t        | j                  j                        d  }|st        dd      | j                  | j                  |j                  d      d      S )Nrj  r   need dst vpathr   F)r   r   r   r   r   r   r  r  r(   r\  r   rZ  r   r]  s     r   r  zHttpCli.handle_mv  |    kkoof%tyy||(Dc$)),,')*C.//xx

CJJsOU;;r   c                 $   | j                   j                  rt        dd      | j                  j                  j                  || j                  ddd      \  }}| j                  j                  j                  || j                  dd      \  }}|r|j                  |      }t        j                  j                  |      ri| j                  d|       | j                  j                  j                  || j                  dddd       t        | j                  ||j                         | j                  j                  j                   j#                  d| j                  | j$                  ||      }	| j'                  |	j                         d       y)	Nr:  z4the rename/move feature is disabled in server configTFoverwriting zup2k.handle_mvrG  r'  )r   no_mvr(   r   r   r   r   r  r   r   ry  r   ri   r  r   r   r  rX  r   rd  
r   vsrcvdstrX  svnsremru  rv  dabsr  s
             r   r\  zHttpCli._mv"  s   99??TUU IIMM%%dDJJeTJ	TIIMM%%dDJJtD	T==&Dxxt$T34		!!$

E4M$		2IINN!!%%&6

DGGTSWX,r   c                 V   | j                   j                  d      }| j                  rI|rG|j                  | j                  j
                        r"|t        | j                  j                        d  }|st        dd      | j                  | j                  |j                  d      d      S )Nr  r   r  r   F)r   r   r   r   r   r   r  r  r(   r[  r   rZ  r  s     r   r  zHttpCli.handle_cp5  r  r   c                 "   | j                   j                  rt        dd      | j                  j                  j                  || j                  dd      \  }}| j                  j                  j                  || j                  dd      \  }}|r|j                  |      }t        j                  j                  |      ri| j                  d|       | j                  j                  j                  || j                  dddd       t        | j                  ||j                         | j                  j                  j                   j#                  d| j                  | j$                  ||      }	| j'                  |	j                         d       y)	Nr:  z-the copy feature is disabled in server configTFr  zup2k.handle_cprG  r'  )r   no_cpr(   r   r   r   r   r  r   r   ry  r   ri   r  r   r   r  rX  r   rd  r  s
             r   r[  zHttpCli._cpA  s   99??MNNIIMM%%dDJJeD	TIIMM%%dDJJtD	T==&Dxxt$T34		!!$

E4M$		2IINN!!%%&6

DGGTSWX,r   c                 0   |d   }|d   }| j                   d   }|dv r	 t        |d   |d   z   t        d            d   }|dk(  rd	}d
}d}dj                  d dD              }ddddd}	||fD ]  }
|
D ]  }|d   j	                  dd      j	                  dd      j                  d      } |j                  t        |       |d<   t        |d   d      }dj                  |	j                  |dd  d      |      |d<     nd}d}|D ]  }|d   dz   }|dk(  rd|z   }||d<    |j                  t        |j                  |                  }dD cg c]!  }||v rd |d!||   j	                  d"d#      # }}|||fD cg c]%  }|D ]  }|j                  |d   |d   |d           ' c}}z  }d$j                  |      }d%}nd&D cg c]#  }||fD ]  }|D ]  }|j                  |        % c}}} | j                  j                  rd'|d(<   n d(| j                  v r| j                  d(   |d(<   t        j                   |      }d)}||dk(  rd*nd$z  }| j#                  |j%                  d+d,      |-       y#  d}Y AxY wc c}w c c}}w c c}}}w ).Nrr  r>  r  r   rt   r  r   r  z[0;7;36m{{}}{{:>{}}}[0m {{}}z{}r   c              3   >   K   | ]  }d j                  |        yw)z{}{{}}N)r{  r  s     r   r  z HttpCli.tx_ls.<locals>.<genexpr>a  s!      
 OOA&
s   )z[7mz[27mr   z[0;1mz[0;36mrT  r  r  r	   rm   )BKr  Gdtr  r   r  Tz[0;3{}m {:>5}ry   z{{}}  {{:{},}}  {{}}z{:,}r  r   z[94m)r  r  srvinfz# r  </span> // <span>z // r   r%  )r  r  neifnuggrv  z
[0mr%  r&  rQ  )r   r  r   rc  r&  r`  r{  rx  rC   r   r  r_  r   no_fnuggr   r  r  r  r}  )r   r  rr  r>  argbiggestr  nfmtr  ctablstr  r   rt   rw   retlr  r0  r  r-  s                       r   tx_lszHttpCli.tx_lsS  s   &z7kk$##bkBvJ6Jt<LMdS cz<WW 

 
 QQQ7 %= WC  WdGOOC5==c3GMMcR"+"))T!W"5$&qw5"5"<"<TXXbgq=QSU"V$	WW - fIO#:"QA&	 **SW!567C 57  !"Q%(112FOD 
   

1T7AdGQvY77 D
 ))D/C.D-PP!e}P!aPQUU1XPXPXP yy!!#7DLL("ll737**R.C%DcSj{d2

3::gy1
=H
 Qs   "I< &J*J(J<Jc                 E   d}ddgg}| j                   rW| j                   j                  d      D ]9  }|s|}n|d|z   z  }|j                  t        |      dz   t	        |d      g       ; | j
                  }| j                  }|j                  |      }|j                  |      \  }}	 t        j                  |      }	|j                  d
      s"|j!                  d      r|j                  d      rt#        d      d|j                  v }d|j                  v }d|j                  v }|rod| j$                  v sd| j$                  v rdx}}nL| j&                  j(                  r2| j&                  j(                  j+                  | j,                        x}}nd}d}dd| j$                  v rdx}}d| j$                  v rd| j.                  d<   t        j0                  |	j2                        }d}d}d }|s|r=|s|r9| j4                  j7                         }|rt9        |d      r|j;                  |      }d| j$                  v sd|j                  v r-|r| j=                  ||      }d}n| j?                  |||	      }d}ndx}}| j$                  jA                  d      }| j                  s#| jB                  r|s|s|sd|j                  vr|d|j                  v }|rC|jE                  d      }|rn|r|rd}d|v r|jG                  dd      nd|f\  }}	 |jI                  |||f      jK                         }|r]|d   tL        jN                  jQ                  |      }t        j                  |      }	djS                  |      jU                  d      }d}nu| j&                  jV                  D ]\  tL        jN                  jQ                  |      }	 t        j                  |      }	djS                  |      jU                  d      }d} n |r| jY                  d       S d }| jZ                  r4|s2	 | jZ                  jA                  ||t]        |	j^                        |      }|r| je                  |      S |d'k(  rt#        d(      | jg                  |      S | jh                  r|| jY                  d)      S | j                  s| jB                  r| jj                  r | jj                  jl                  }| jn                  |jp                  vrn|rd*D ]  tL        jN                  jQ                  |      } 	 t        j                  |       }!t        jr                  |!j2                        sY| jt                  s#| jw                  | j                   dz   d+d,      c S d}d}ty        |      }ty        |      }| } n% n#| j                   jG                  dd      d-   d*v rd}|s| j                  s| jB                  r| j                  s#|s!d|j                  v r|s| j                  d      S |j{                         j!                  d.      }"|r|"ss(| j|                  | j~                  jA                  d/d      vrt        | j                         \  | _         | j                   }| j                  j                  jA                  | j                   | jn                  dd      \  }}|j                  |      }|j                  |      \  }}t        j0                  |	j2                        }d}|j                          |"s| j                  rLd0|j                  vr>|"rd| j$                  v sd1| j$                  v sd2| j$                  v r| j                  ||      S |rsl| je                  ||	j                  sd3|j                  v rd       S |j                        S |r.| j                  s"|rd}n| jh                  s| j                  d      S g }#	 | j&                  j                  s%|#j                  | j&                  j                         | j&                  j                  sht        |d      \  }$}%}&|%r<t        |$xs d      }'t        |%      }(|#j                  d5jS                  |'|(             n|&r| jc                  d6|d7|&d%       d8jQ                  |#      })g }*| j                  s|r|*j                  d9       | jh                  r|*j                  d:       | j                  r|*j                  d;       | j                  r|*j                  d<       | jB                  r|*j                  d=       | j                  r|*j                  d>       | j                  r|*j                  d?       | j                  i dg      }+d@| j$                  v },| j&                  j                  xs | j                  jA                  dA      dBk(  }-|,s.|s,| j,                  j                  dC      rd| j$                  d@<   d},dD}.d| j$                  v rdE}.d}-|j                  }/g g g |)| jn                  |*|j                  dF}0d | jn                  |*dG}1|j                  |1|g d g t]        |      | jh                  xr | j$                  jA                  d      dHk(  |j                  dI   |+t	        | j&                  j                  dJ| j                   d      |)| j&                  j                  dK}2| j&                  j                  r&| j&                  j                  }&|&dL|&v rdMndLz  }&|&|2dA<   | j&                  j                  r&| j&                  j                  }&|&dL|&v rdMndLz  }&|&|2dN<   | j4                  j                  j                  sd|2dO<   | j                  s|s| j                  ||d       \  }3}4|3x|0dP<   |2dP<   |4x|0dQ<   |1dQ<   |,r| j                  |0      S t        j0                  |	j2                        s| j                  d      S dR| j$                  v sdS| j$                  v rt#        d       | j                  |.fi |2}5| j                  |5j                  dTdU             ydVD ]d  }6| j$                  jA                  |6      }7|7!|rr&|rdW|j                  vrdX}8t#        d|8      | j                  |6|7| j                   ||g       c S  |j                  || jn                  | j&                  j                   ddgddggdY| j$                  v dZ      \  }9}:};|:D 67ci c]  \  }6}7|6|7
 }<}6}7|:D =cg c]  }=|=d   	 }>}=|>j                  t        |;j                                      |rr| j                  sg}>d}-i }?	 |/d[   d\k7  r
t               tL        jN                  jQ                  |9d]      }@t        }At        j                  |@      D ]|  }BAj                  |B      }C|CsCj                  d      |Cj                  d%      z   |?jA                  d^      \  }D}E}F|Ddz   t        |Et        |Cj                  d_                  Bf|?<   ~ 	 |>D =ci c]  }=|=j{                         |= }G}=| j                  rd`| j$                  vr|,sd`| j                  vrt        |>      }>|/jA                  da      }H|/jA                  d      }Idb|/v rd_nd}JHrJ|/jA                  d      rd}Hn6| j                  d_| j&                  j                  |dd      d H }&|&x|0da<   |1da<   t        | j                  |/            }Kg }Lg }Mt        }N|>D ]  d}O}P|,s|-s| jt                  s|rd|z   dz   }O|Oz   }P|;v r|;   j                  }Qn|9dz   z   }Q	 |<jA                        xs t        j                  Q      }Rt        j                  |Rj2                        rt        j                  Q      nR}St        j0                  Sj2                        }|rdPdz  }PKrdd}TnHrHt        Q      }&det        P      df| j                  d_| j&                  j                  |&dd      d H dg}Tn;det        P      dh}Tn+|?v r%deOdit	        |?   d_   ddj      dk|?   d   dl}Tndm}TSj                  }Ut        j                  t        dRj^                        t              }Vdn|Vj                  |Vj                  |Vj                  |Vj                  |Vj                  |Vj                  fz  }W|rdo}XnAdpv r;Nj                  dqjG                  dpd      d         }Xt        |X      drkD  rXd dr }Xnds}XIrR|sPt        P      df| j                  J| j&                  j                  QUt        rdnSj                        d I }PnJHr=|r;t        P      df| j                  d_| j&                  j                  Qdd      d H }Pnt        P      }PTPUXWt]        Rj^                        dt}Y|rLj                  Y       Mj                  Y        |r|/jA                  dW      sg }L| j                  jA                  du      dBk(  rd@| j$                  vrd| j$                  vrt        dvdwg      }ZMD ]  }Y|Ydx   Zv sty        | j                   j                  dL      d   Ydx         }[| j                  j                  jA                  |[| jn                  dd      \  }}|j                  |      }\| je                  |\      c S  |j                  jA                  dyi       }]dz|]v }^| j                  }_t               }`|}a|rMng D ]  }b|bdx   af}cd{}	 |jI                  |c      }ddD 67ci c]  \  }6}7|6|7
 }e}6}7_r5d}	 |jI                  |c      jK                         \  }f}g|frfed<   grgedz<   n.^r,d}	 |jI                  |c      jK                         \  }f|frfedz<   eD 6cg c]  }6`j                  |6       }F}6ebd<    |rLD ]  }bt               |bd<    t        ]      }h| j                  rhj                  d       d|/vrZ`j                  d       aradnd}id}LD ]8  }b	 |jI                  |ibdx   z   f      jK                         }j|j\  |bd<   |bd   d<   : hD 6cg c]	  }6|6`v s|6 }k}6nt        `      }k| j                  ||G      \  }3}4|3x|0dP<   |2dP<   |4x|0dQ<   |1dQ<   MsLs|4d   s|4d   s|3d   s
|3d   sd|3d<   dGv rtL        jN                  j                  tL        jN                  jQ                  |Gd               r^g }t        tL        jN                  jQ                  |Gd         d      5 }l|lD =cg c]  }=|=jU                          c}=D ]  }m	 mj!                  d      rmj                  dd      d d }mmj!                  dTdU      }n|nj                  d      rnj                  dd      \  }odd  nnj                  dJd      \  }ot#        fdMD        d       }b|br	obd   d<   n*d}8|j                  |8t	              t	        o      fz          	 d d d        dkvrkj%                  dd       |r!|3d   sd}8|8djQ                  |      z   dz   |3d<   |,r L|0d<   M|0d<   k|0d<   | j                  |0      S | j                  r| j$                  jA                  d      nd r| j&                  j&                  }p|pr)pj+                  | j,                        rd}8t#        d|8      |2d<   d }qGjA                  j{                               }r|rrrk7  rt#        fdMD        d       }rrrtL        jN                  jQ                  |      }st        jN                  j)                  |s      }U|Ud| j&                  j*                  z  k  rt-        | jb                  t/        s      d      }qj{                         j!                  d.      rnd|j                  v r`| j1                  q|j                  jA                  d      xs g       }qn/| jc                  dd       d}qn| jc                  dd       d}qqq|2d<   LD ]  }t|tdxxx   dz  cc<    Lj3                  t5        dx             |-rLMkdx|2d<   |1d<   g |2d<   nLMz   |2d<   k|2d<   |r&d| j$                  vr| |2d<   |1d<   r[|j                  jA                  d      r?|j                  d   }.d|.v rWj                  dp      d-   j{                         }&|.j                  d|&      }utL        jN                  j7                  |u      ru}.| j4                  j                  j8                  5  |.| j4                  j                  j:                  vrtL        jN                  j                  |.      \  }v}wt=        j>                         }xt=        j@                  |v      |x_        |xjE                  |w      | j4                  j                  j:                  |.<   d d d        d}ydx}zx}{}|| j&                  jF                  D ]  Gv sG   }y n r剌j                  dp      d-   j{                         }X| jZ                  rX| jZ                  jH                  v rX| jZ                  jJ                  v xs4 X| jZ                  jL                  v xs X| jZ                  jN                  v }zX| jZ                  jP                  v }{|X| jZ                  jR                  v }|yr|s}yt#        fdMD        d       }}nd }}| jT                  rdndd| j|                  d| j&                  jV                  t        |      z   }~z|2d<   {|2d<   ||2d<   yr|j                  jA                  dd      }tY        ~t        y            }d|d}|rd| j$                  d   z   z  }t[        j                  dT            j!                  d      }|dv rdndz  }d||2d<   |2d<   }|2d<   rvt              }d}|rd| j$                  d   z   z  }t[        j                  dT            j!                  d      }|dz  }tY        ~|      |2d<   |2d   dz   |z   |2d<   n
~x|2d<   |2d<   |j                  jA                  d      sddi}t        |j                  jA                  dë      xs d      }yr|2d   d<   |j                  jA                  dū      xs d}|dmk7  rt              d<   |j                  jA                  dǫ      xs | j&                  j                  }&|&dvr|&d<   i }|r=t        |j                  jA                  dʫ      xs d      }dd<   |2d   |d<   ddddќ}n{{r<t        |j                  jA                  dҫ      xs d      }dd<   |2d   |d<   dddל}n=zr;t        |j                  jA                  dث      xs d      }dd<   |2d   x|d<   |d<   	 }d   j]                         D ](  \  }6}7d|6dܝ}&j                  |&t        |7            }* 	 t_        j                   dd      }j                  dޫ      rd%d  }|j                  dޫ      rj!                  dޫ      rd d% }|j!                  dޫ      r|j                  jA                  d߫      ss)t        |j                  jA                  dë      xs d      }j]                         D ]&  \  }}	 }d      }7|7sdk(  rt]        |7      n|7<   ( d<   |j]                         D 67cg c]#  \  }6}7d|6dt	        t        |7      dd      d% }}6}7| j`                  ddjQ                  |      dz   }&|&j                  dd      | _         | j                  |.fi |2}5| j                  |5j                  dTdU             y#  d|j                  vr| j                  | j                         cY S | j                  |j                  d   ||      }
|
dk(  rY y|
dk(  rY y|
d	k(  r<	 t        j                  |      }	nC#  | j                  | j                         cY cY S xY w| j                  | j                         cY S Y  xY w#  Y >xY w#  Y xY w# t"        $ rJ}|j`                  d!k(  r5|d d d"v r.| jc                  d#|d$|d%       | jY                  d&      cY d }~S  d }~ww xY w#  Y xY w#  | jc                  d4       Y xY wc c}7}6w c c}=w #  Y wxY wc c}=w #  | jc                  dcQ       Y xY w# t        $ r}}d|t        |      v rY d }~ 	 t        j                  a      }c|jI                  ||c      }dn0#  | jc                  d}ad~dt                      Y Y d }~ 7xY wY d }~d }~ww xY wc c}7}6w #  Y yxY w#  Y xY wc c}6w #  Y xY wc c}6w c c}=w #  Y xY w# 1 sw Y   xY w# 1 sw Y   5xY w#  Y xY w#  Y >xY wc c}7}6w )Nr   r   Tr3  on404rI  rb  Fretryz.hist/up2k.z/dir.txtz	.hist/th/r:  r  e2togrN  rt  r  r   rB  rC  r  r-  r  r  dthumbr  r	   r   r  r  r  rO  zfailed to convert [z]:
rm   z--error--
check
server
logr  r   zupload
only)	index.htm
index.htmlzredirecting to)r<  r=  ry   r  refererrn  r  r  nopipez
#wow #whoaz{} free of {}z	diskfree(z): r  r  r  rj  ri  r   r  adminr  r   r  r  browserbrowser2)rr  r>  rn  r  r  r  r_  )ls0r  r  rv   sb_lgr   )cgv1cgvvpnodesr>  r  rn  have_tags_idxhave_b_ur  r*  r  srv_infodthemer   r   cssno_prismr-  r.  r)  r=  r%  r&  r<  rj  zTserver config does not allow download-as-zip/tar; only dk is specified, need dks toor>  r  r  rx   r   )r   r   r   r  r=  r  r  zbroken symlink: DIRr  r  z &zip=crc" rel="nofollow">zip</a>z ?zip=crc" rel="nofollow">zip</a>z.hist/)quotr4  z" rel="nofollow">#z</a>r  z%04d-%02d-%02d %02d:%02d:%02dz---r!  r  r  r  )r  hrefr  rt   r  r  r   idxhr  r  r  ri  .up_atzrselect mt.k, mt.v from up inner join mt on mt.w = substr(up.w,1,16) where up.rd = ? and up.fn = ? and +mt.k != 'x'rV  ztag read error, r  r   z)select ip, at from up where rd=? and fn=?up_ipz%select at from up where rd=? and fn=?r  )r"  r!  nodirszz.filesz(select sz, nf from ds where rd=? limit 1rt   zthis folder is emptyzdescript.ionrl  s   s   \\ns    // r  z" c              3   l   K   | ]+  }|d    j                         j                         k(  s(| - ywr  N)rb  )r  r  rs   s     r   r  z%HttpCli.tx_browser.<locals>.<genexpr>  s)     Q161Bbhhj1PQQs   )44z<li><code>%s</code> %s</li>z<h3>descript.ion</h3><ul>
z</ul>rr  r>  rn  docr9  docnamec              3   4   K   | ]  }|d    k(  s|  ywr&  r   )r  r  r'  s     r   r  z%HttpCli.tx_browser.<locals>.<genexpr>  s     A!&	S0@AA   r  r$  r&  z
doc 2big: r  z-( size of textfile exceeds serverside limit )z	doc 404: z( textfile not found )r  )rr  r>  rn  r  r   og_fnog_tplEXTc              3   4   K   | ]  }|d    k(  s|  ywr&  r   )r  r  r+  s     r   r  z%HttpCli.tx_browser.<locals>.<genexpr>V  s     D16e1CQDr*  r  rF  rG  	og_is_pic	og_is_vidog_is_auog_thr  zth=z&cachez&k=r9  z/th.jpgz/th.webpr$  og_thumbog_fileog_urlog_raw
og_no_headztwitter:cardsummaryog_titlezog:imageog_desczog:descriptionog_siter  zog:site_name
og_title_az
music.songzog:typezog:audiozog:music:musicianzog:music:albumzog:music:duration)r  albumr  
og_title_vzvideo.otherzog:videozog:titlezog:video:duration)r  r  
og_title_isummary_large_imageztwitter:imagez{{ z }}z\{\{ [^}]+ \}\}r  
og_s_titler  z	<meta property="z" content="z">r  )r   r`  r  rL   rA   r   r   rH  r  r   r  r  r  r   r|  r   r  r(   r   r   og_uar   r   r   r  r  r   r  r   r  rA  r"  r   r   r'  r  r  r  r  r   rc  r{  ra  	th_coversr  r   r  r
  r   r   rz  rt  r   r   r\  r   uhtmlS_ISREGr   r?  re   rb  r   r   rh   r   r   r_  r   r  r  r  nihr  r  r7   rC   r   r   r   r-  force_jsr   js_lsjs_htmbnametheme
js_browsercss_browserr   prismr0  r  r
  r  r}  rC  r  r  extendrx  rz  r   RE_MDVr  rV  groupr  floatr   r1   r   r  r   rF  RE_HRr  r  r+   r   fromtimestampr$   yearmonthdayhourminutesecondr   r  r  r
   r  r  r  r  rW   mem_currJ   r+  r'   rK  rL  r&  r~  r  r9  r=  r  r  rR   r3   r)  r  r   ry  r  r   r  r  FileSystemLoaderloaderget_template
th_coversd	thumbablefmt_pilfmt_vipsfmt_ffifmt_ffvfmt_ffar   r  ra   r`   r	  rL  r   )r   r   r  noder   r   rM  r^  r_  r  r0  r  r  add_ogrB  is_diris_dkfk_passicurr  
use_dirkeyuse_filekeyth_fmtnothumbr  r  r  r  r  thpr   r\  r  r  is_mdr  freetotalr  rf  r5  	srv_infotr  r*  is_lsis_jsr  r  ls_retr  j2ar-  r.  r  r-  r  r  ro  r  r  statsr  ls_nameshisthistdirr   hfnru   rw   r   r  r,  add_dkadd_fkr  rD  rr  r>  ptn_hrbaser  r   linfinfmarginrt   r  r  r  itemidx_htmlr>  r  ri  	add_up_atis_admintagsetr<  feerd_efnr   r  r  r  lmtevdirrp  rn  rY  blnlnr  r?  doctxtdfndocpathdtpl2tdirtnamer  thumbis_picis_vidis_aufileurl_baser  th_baser  og_fn_qoghr  r	  tagmapr  hnameoghsr'  rs   r+  s                                                                                                                                             @@@r   r  zHttpCli.tx_browser  s    9+::

((- T ES4Z'Eu 3[D5QRST WWhh--$JJsO	T	6'"B$ >>-(LL$)D+rxxrxx!t{{"et{{&:!&&!%!7!7!@@E$++!!FU$++/BD^,bjj)3Vv))%%'CwsG,{{3'$++"((!2!--b':
#"//GR@"
',,J&==LL
6d"((>R!"cii/;;s+D$C:=+4;;sA#6BPT:S	!"&,,q3*"="F"F"HC"%(V%'WW\\'2%>%(XXb\'.~~dB'?'E'Ec'J). #'))"5"5 %B!#gr!:B%%(XXb\'.~~dB'?'E'Ec'J). %% #{{844=="mm//T3r{{;KVT <<,,S= +%{{3''^^ 2;;~..}}$((((,,Czz*5 B'',,w3C!!hhsm
  <<4 ..#}} JJ,5Ed  -    #G"FR.C r?D!G+, ""3*2.2MM4==DLL==TRXX5E";;t,,MMO,,U3EeDIIT\\-=-=i-LL(.tzz(:%DJ JJE"iimm//

DJJuUGB mmC0G "

3IC!\\"**5F EKKM $//BHH,sdkk1,$++- zz"g..||RZZ8rxx3GT MO[[  DMM^^{{4((	#99==		/ yy}}$We4OD%tyq)u% 6 6r2 >?w;Q?',,X6	==ELL >>LL!==LL ??LL"<<LL>>LL!>>LL!))B&#		""Cdll&6&6t&<&CV(:(:;M(N #DKKE$++CEXXJJ88
 JJ
 II XGDKKOOC,@C,GXXg& DIIOOTZZ!HtT!iioo
  99%%B#+BCI99  &&B#+BCJyy~~##"C
O}}U"..r7DAOFG/55F8s8}188F9Izz&))<<

+{{4((#u';Sk!488C'3'DJJt{{7I67 	BA"A}fEU"((2nA a.({{1aRbAA	B $&55JJ		$$$E]UDM*$++% $) $
  #))$!QA))"()QAaD))X]]_-.eDMMwHE 	)}#k!ggll673GC{{7+ DIIcNWWQZ!''!*,88B
32qE3r5+<#=sCRD )111!'')Q,11 ||$++%5F$,,4N'1Hrkqvve}[[DII$5$5w1EgvN+--ts4ydmmB'( ^	#BDDt/B/BuU{S(byX~!"..#*yy}9		&(9*.,,t||*Dchhv&$
 \\#++.F"F BtAtyy'8'8"aCGVLF  tF tR$TBHQK B''At}}(=sCB0				4 B jjbiiQ&7&:;s8b=cr(Cf4LKK		))# v	 F4LKK499#4#4faCGVL
 d| $--(D D!T"}^	#@ D LLV$+DKK'4;;&K67H ,<8+tzz//4Q7fFB"iimm//DJJeLGBc*B<<++, hhll5"%O	>>%%R '	BFB2hG EALLG, &''TQAqD'D'?#||Aw7@@BHC(+W),X ;!\\!W5>>@FS),X )--1A-A-BvJO'	R  %"W6
% 9D~~/0"

8$(*}> B"ll1tbj/@.BCLLN;>8D2f:h#7 #'6Q!v+q6G66lG**2w?+11x3x=-44yC	N AJAJ1I1I.F1IV#GGLL&"89)
 Cbggll7F>,BCTJ a/01!AGGI1 C<<4"%++gw"?"DC ZZ;==-')xxa'8HB!#ABB')xxQ'7HB!QQSW 9=BvJ~6 =AJJqKO[=N+O'OP%, W,q.16!91		#.8q	!F6N#F7O 'F9::f%%(,dkkooe$4##Bbii(QS!n$ C	NF**SYY[)CsczAuA4H'',,w4XX%%g.tyy0000&txxwGFyy{++E2u7H!%fbhhll86L6RPR!SHHs4a8LF#/31!#E
 	AfII	 			j(	)"' CJU
 CL%<CL Ie4;;.CK CLh/hhx(C<S)"-335B;;ub1Dww~~d+"YY^^)) K$)).."3"33&(ggmmC&8e & 2 2 4'-'>'>t'D161C1CE1J		))#.K E&++F+Veii** <"2JE kk#&r*002==SDMM,C,C%Ct}}444 8$--"8"888$--"7"77 
 !DMM$9$99F4==#8#88E  %DDdK  ==f4				ve},H
  &C%C#C
Ohhll7C0&-8),.UT[[%555EW 56==gFcSjj@295"AJ CL!C	N -UT[[%555EW 56==gF'++ %h 8H #H 85 @H088HH88<<-%y1BHHLL4:;&)*oC
Ohhll9-3#:,/HC()XX\\),>		Y&*,C'\ : @bAE%1C	N&)(mC
O"5!1 3F
 \ : @bAE%2C	N&)(mC
O!+ 3F \ : @bAE*?C'=@]JC(3z? $V 2 2 4 :1+,. %b#a& 9:
 12u=&&u-!!"IE &&u-nnU+!"1IE nnU+ 88<<-UZ 8 >B?E"(,,. JC L- $/2f}SV!E
 #(J
 !$		 1 +c!fdD9; 
 ^^$))D/&CC!#FD!9txx#s#

4;;w	23q	6bhh&{{t}}#455**RXXg.C8Cf}:'*B:;;4=='899{{t}}#455	 R! % $ " 77c>fRajD.@ HHgr%RTUV#';;/N#OO	4! @	#HH\"p *).	1L9:V  	'3r72#CKKR8GQ0AHHb"fhOP 	 (-&6. 2&+ tK KP s  ,BB BBE 8BE.1BE 0BF)<;BF1 4BG
BGCBG 'BGABG"NBG>N$BJN91BJO0)BJPBJR%5BJ"S 	BJ*S*BJ*V:BJ<V?BJ/WBJ<WCBJ4Z#BJ<g*B,BK	z%?BK ~,
BK~7BK'(BK&B,BE B0%BE CBE CBE C$BC:C9BE C:BDDBE DBE EBEEBEE	BF&E>BF!FBF&F BF!F!BF&F)BF.F1BGGBGG"BG;G>	BJHBI?H+BI	IBI?I	%BI6I.BI?I6BI?I?BJJBJJBJJ"BJ'J/BJ<J4BJ9J6BJ<J<BKK	BKKBKKBK#)r   )r  NN)r  NNF)r  )r   aightzgo toTr  F)T)Fr   )j__name__
__module____qualname____doc__r   r   r   r   r   r   r
  r  r  r  rs  rY  r  r  r  r  r  r  rd  r\  r-  r1  r?  r  r  r  r  r  r  r  r  r  r6  r  r  r  r  r  r7  r  r  rr  r  r  r  r6  r  rT  r  r7  r1  r8  r  r  r2  rU  r3  r  r4  r5  r  rA  r"  r0  r)  rA  rF  r{  rz  ru  rt  rC  rt  r  r  r  r  r  rm  r  r  r|  r  r  r  r  rd  r3  r  r  r  r  r  r  rU  r  r  r\  r  r[  r  r  r   r   r   r~   r~      s}   AF,9
6.

 ,'B9H/ D&@DG&4 =CD ;zJB%0#$ 6;zR!hL\M^4lAF 0> $"'(kMZAmC^	 D3&j:(=T50n`>@Ob*&P.`,7%N*X
,M^FP+048'R0||BH{zWrTl'06qf&PRh	/b8D	4=~8"QfDL460ddL8
<&
<$FPkr   r~   )
__future__r   r   argparser  r  r  r  r  r  r  rL  rg  r  r  sys	threadingr   rI  r   operatorr   r  	ipaddressr   environr   r   r  r   r
   r   r   r   r   r   __version__r   authsrvr   r   r   starr   stolen.qrcodegenr   r   sutilr   r   szipr   up2kr   utilr   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   httpconnrk   r   setattrr  version_infor  r  r`  rL  r  r  r  r(  r+  r  r  r  r  r  r2  rq  RE_MHOSTr  rS  rP  r  r  objectr~   r   r   r   <module>r     sn   7       	  	    
       !		zz~~n%k J I " '   , %    P P P P P P P P P P P P P P P P P P P P Pd "vy!FIu%y),)9)9F)Bu%Z(399; 
D+ "
!%5!6	7l+,q;2L.M
NDt$7	I
 	

>"2::*+
"***
+2::-.rzz#$

;	<	=?((*+`hf `hO	s    &J J