
    i                    ,   d dl mZmZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlZd dlmZ 	 e	j0                  j3                  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*m+Z+m,Z, ddl-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mZmZmZmZmZmZmZmZmZmZmZ 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j%                         ZdZdZdZdZdZdZd d!d"d#d$Z eg d%      Z ed&d'g      Z e	j<                  d(      Z ej@                  d)      Z ej@                  d*      Z ej@                  d+      Z ej@                  d,      Z ej@                  d-      Z ej@                  d.      Z ej@                  d/      Z ej@                  d0      Z ej@                  d1      Z ej@                  d2      Z ej@                  d3      Z ed4j%                               Zd5dgdd5gg d6gZd7 Z e       Z ee      Zd8 Z G d9 d:e      Zy#  Y xY w);    )print_functionunicode_literalsN)datetime)
itemgetter)IPv6NetworkPRTY_NO_LZMA   )ANYWINRESRESMTYPE_CHECKING	EnvParamsunicode)	S_VERSION)LEELOO_DALLASVFS)bos)QrCodeqr2svgqrgen)	StreamTar)	StreamArcgfilter)	StreamZip)up2k_chunksize)unquote)SAPPLESAN_REBITNESSDAV_ALLPROPSE_SCK_WRHAVE_SQLITE3HTTPCODEUTCVPTL_MACVPTL_OSVPTL_WINGardaMultipartParserODictPebkac	UnrecvEOFWrongPostKeyabsrealafsencalltraceatomic_moveb64deceol_convexclude_dotfilesexclude_dotfiles_ls
formatdatefsencgen_content_disposition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open_nolock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)   	   usedforsecurityFz#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)zB. Some copyparty features are now disabled as a safety measure.


a2  , or change the copyparty global-option "xf-proto" to another header-name to read this value from. Alternatively, if your reverseproxy is not able to provide a header similar to "X-Forwarded-Proto", then you must tell copyparty which protocol to assume; either "--xf-proto-fb=http" or "--xf-proto-fb=https"zH<b>NOTE: serverlog has a message regarding your reverse-proxy config</b>zConnection: Keep-AlivezConnection: Closemtatfnsz)muns)opusowacafmp3flacwav	index.htm
index.html)
i  r   r	     r      #9r   r   z[\x00-\x1f\x7f]z[\x00-\x1f\x7f<>"]z[\x00-\x1f\x7f<>\"'&]z[^][0-9a-zA-Z.:_-]z^[][0-9a-zA-Z.:_-]+$z[^0-9a-zA-Z_-]z#(GET|HEAD|POST|PUT) [^ ]+ HTTP/1.1$z[<>\"'&]z%(.*)\.([0-9]+\.[0-9]{3})(\.[Mm][Dd])$z(\{[^} ]+\})z
[^0-9a-z=]zdoc move treeT)FFFFFFTc                  l    dj                         } dD ]  }dD ]  }| j                  ||          | S )Nzopus mp3 flac wav p)jwx) ff33)splitappend)retcodecsufs      D/home/ubuntu/myenv/lib/python3.12/site-packages/copyparty/httpcli.py_build_zip_xcoder      sF    

%
%
'C  .' 	.CJJ,-	.. J    c                 0    t        j                  dd|       S )Nz "--([^=]{3,12})=z global-option "\1: )resub)txts    r   _arg2cfgr      s    66&(?EEr   c                      e Zd 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	 	 	 dndZ	 	 	 	 dodZd ZdpdZd Zd Z	 	 	 	 	 	 dqd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-d- Z.d. Z/d/ Z0drd0Z1d1 Z2d2 Z3d3 Z4d4 Z5d5 Z6d6 Z7d7 Z8d8 Z9d9 Z:d: Z;d; Z<dsd<Z=d= Z>d> Z?d? Z@d@ ZAdA ZBdB ZCdC ZDdD ZEdE ZFdF ZGdG ZHdH ZIdtdIZJdJ ZKdK ZLdL ZMdsdMZNdsdNZOdO ZPdP ZQdQ ZRdR ZSdS ZTdT ZUdsdU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 Zidi Zjdj Zkdk Zldl Zmy)uHttpCliz=
    Spawned by HttpConn to process one http transaction
    c                 |   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      x| _        | _        t1        | j                  j2                        | _        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| _>        d| _?        g | _@        i | _A        d | _B        d| _C        y )Nr   cipherFT r   *)Dtimet0connu2mutexr|   sraddripargsEasrvicothumbcliu2fhpipeslog_funclog_srclog_fk_gen_fkr8   gen_fkhasattrtlsis_httpsboolRis_vproxied	keepalive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_html	can_admincan_dotout_headerlistout_headersparser	html_head)selfr   empty_stringlists      r   __init__zHttpCli.__init__   s-   ))+	||''))A,ii	II	))++II	88II	ZZ
||&*ii&6&6dllK#*4668#<<4=		, 			))--

	"
,<<	<DI	 " r   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onr   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   ry   abr   r   s         r   r   zHttpCli.unpwd  sP    ((*1a		##A&?$))..*<*<Q*?,-ua88r   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)r9   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      xs | 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	<   d| j                  j                  v r| |d<   | j                  |       | j                   |d<    |j"                  di |S )Nr   rtscplnglangfavico
s_doctitletcolorjs?&html_head_dthisr    )r   hsrvj2r   r   SRcachebusterr   r   r
  r  doctitler   flagsjs_other_build_html_headr   render)r   namekatplzss        r   j2szHttpCli.j2s$  s6   iinn%"&"2"2$)),,399>>--/4\\%%g.@$))..6
yy''899--<ww}}X.899$b.##B#+BBtHDGGMM)BvJ!!"%..;szzBr   c                 H    | j                   j                  j                  |   S r   )r   r  r  )r   r  s     r   j2jzHttpCli.j2j9  s    yy~~  &&r   c           
      Y   | j                   j                  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   j#                  d
      \  | _        | _        | _        |dd D ]s  }|j#                  dd      \  }}|j+                         | j,                  |j/                         <   |j1                  d      sUt2        j5                  |      skt7                	 d| j                  _#        | j
                  jH                  xjJ                  dz  c_%        | j,                  jM                  dd       | _'        | jN                  jQ                  d!      | _)        | j,                  jM                  d"d       j/                         }d#|vxr | j(                  d$k7  xs |d%k(  | _        d&| j,                  v ru| j,                  d&   j/                         d'k7  rUd| j                  _*        d(| j,                  v r6d| _        | j,                  jW                  d(       d)}	| j                  |	d       | j,                  jM                  d*      xs d | _,        | jX                  s| j                  jZ                  t\        j^                  k(  r| j                   j`                  | _,        n=d+| j                  jc                         dd	 z  }|jQ                  d,      r|d-d n|| _,        d}
| j                   jd                  }|rC| j,                  jM                  | j                   jf                        }|r|dkD  r|dz  }|j#                  d.      }	 ||   j+                         }| j
                  j                  d   }| j
                  jz                  }|r	|j                  |      sd>}	| j,                  jM                  d?      r|	d@z  }	n|	dAz  }	|	tl        z  }	dB|v r'dBj;                  |j#                  dB      dd	       dCz   }nt}        |dDz   d      j~                  }| j
                  j                  j                  |      rdEnd }|	| j                   jf                  |||||fz  }	| j                   jv                  rty        |	      }	| j                  |	d       d| _5        n|| _4        | j
                  j                  | jh                        | _B        | j,                  jM                  | j                   jt                  | jX                        | _,        	 t        | j,                  | j                   jp                           dFk(  | _D        d}
t        j5                  | jX                        }|r| jX                  | j                   j`                  k7  r| jX                  }dI}	| j                  |	| j&                  |||j                         d   d fz  d       | j                  | j
                  jH                  j                  |dJdK       | j                  dLd       y| j	                         ry| j
                  j                  rT| j
                  j                  j                  | jh                        s%| j                  dMd       | j                  dd       y| j
                  j                  rk| j
                  j                  }t        | jh                        }||v r<||   t        j                         z
  }|dk  r| j                  dNd       ||= nd| _        | j
                  j                  }| xs |j5                  | j&                         | _O        | j                   j                  r| j                  r| j                   j                  }dO|v r,t        t        | j,                  j                                     }|D ]B  }| j,                  jM                  |      }|!| j                  dPj                  ||      d       D dQ| j&                  v rdR| j&                  vrdS| _U        | j                   j                  rdT| j&                  v r	 | j&                  j#                  dR      d   j#                  dT      \  }}|j#                  dU      d   }t        |j                  dV            j                  dVdW      }|jQ                  dU      r|dX|dd | _        n|dR|| _        t        j5                  | j&                        }|r~| j&                  }d\}	| j                  |	|||j                         d   d fz  d       | j                  | j
                  jH                  j                  |d]d^       | j                  dd       yi }dR| j&                  vr8t        | j&                        }|j1                  dU      | _\        t        |      }n| j&                  j#                  dRd      \  }}t        |      }|j1                  dU      | _\        t        |      }t        }t        }t        } |j#                  dQ      D ]  }d }!d_|v r>|j#                  d_d      \  }}t        |j+                         j                  d`d
            }!|j5                  |      }|rda}	| j                  |	| j&                  |||j                         d   d fz  d       | j                  | j
                  jH                  j                  | j&                  dbdc       | j                  dd        y|j/                         }|!||<   || v r|d_|!}|j5                  |      }|sdd}	| j                  |	| j&                  |||j                         d   d fz  d       | j                  | j
                  jH                  j                  | j&                  dedf       | j                  dd        y dg|v r|j5                  |dg         }|r|dg   }dh}	| j                  |	| j&                  |||j                         d   d fz  d       | j                  | j
                  jH                  j                  |didj       | j                  dkd       y| j                  r|jQ                  | j                   j                        r&|t        | j                   j                        dz   d }n4dl}	| j                  |	| j                   j                  |fz  d       d| _b        |j                         | _e        | j                   j                  r}t        j                  | j                   j                         | j                   j                  r>t        j                  t        j                         | j                   j                  z         | j,                  jM                  dm      }|rt        |      | j                   j                  kD  r| jC                  dnd[       y|j#                  do      D cg c]'  }d_|v s|j                         j#                  d_d      ) }"}|"D ci c].  \  }}|j                         t        |j+                         |      0 }#}}|#jM                  | j                  rdpndq      xs d }$dr|#v rdr|vr|#dr   |dr<   t        |#      | j                   j                  kD  r| jC                  dsd[       ni }#d }$t        |      dtkD  r@du}	| j                  |	t        |      | j&                  fz  d       | jC                  dvd[       yt        r|j                  t              }|| _q        |#| _r        || _s        | j                  r|r|dUz   n|| _t        dw|v r| j                         S dx|v st        rd6|v sdy|v r~| j                  dz| j&                  d{dU| j                  z          | j                  | j
                  jH                  j                  | j&                  d|d}       | j                         xr dS | j,                  jM                  d~      }d }%|r| j                   j                  s|$r| j                   j                  s	 |j#                  d
      d   j                  d      }&t        |&      j                  dV      }|g|j#                  dd      ddd2   z   D ]h  }%|%| j                  j                  v r nN| j                  j                  j                  |%      }'| j                  j                  jM                  |'      sh n |jM                  | j                   j                         xs8 | j,                  jM                  | j                   j                        xs |%xs |$| _        | j                  j                  jM                  | j                        xsW | j                  j                  jM                  | j                  j                  j                  | j                              xs dO| _        | j                   j                  r| j                  dOk(  s| j                   j
                  rfd }(| j                   j                  rq| j                   j                  j                         D ]H  \  })}*| j,                  jM                  |)      }|r"|*j                         D ]  \  }+}||+k(  s|}( n |(sH n | j                   j                  D ]<  })|(r| j                   j                  s n!| j,                  jM                  |)      xs |(}(> |(r| j                   j                  r4| j,                  jM                  | j                   j                        xs d nd },| j                   j                  rL|(j                  | j                   j                        }(|,j                  | j                   j                        },|
sD| j
                  j                  d   }| j
                  jz                  }|xr |j                  |      }
| j                   j                   xs# | j                   j                  | j,                  v }-|-rm|
rk|(j/                         t        k(  r| jC                  dd[       y| j                  j!                  | j
                  jH                  j"                  |(|,       n|-s/d}	| j                  |	| j                   j                  |(|,fz  d       |
sd}	| j                   j                  s|	dz  }	| j
                  j                  d   }dB|v r&dBj;                  |j#                  dB      dd	       dBz   n%dj;                  |j#                  d      dd       dz   dz   }| j
                  j                  j                  |      rdEnd }| j                  |	||(|,||fz  d       dO}(d },|(| j                  j$                  j&                  v rd | _        |(| _        | j                   j(                  s| j                   j*                  r| xj,                  dz  c_        n| xj,                  dz  c_        | j                  j.                  jM                  |(      }|r(| j1                  |       n| j                  d|(d       | j                   j2                  r| j                   j4                  rt| j                  dOk(  s| j                   j6                  rM| j
                  j8                  | j
                  j:                  j                  | jh                           | _        | j
                  jH                  j<                  }.|.r`| j                  |.v rQ|.| j                     j                  | jh                        s(| j                  d| j                  dd       dO| _        | j                  j$                  j&                  | j                     | _        | j                  j$                  j@                  | j                     | _        | j                  j$                  jD                  | j                     | _        | j                  r| j                  |$k7  s/| j
                  jH                  dz   t        j                         k  r@t        j                         | j
                  _        | jK                  | j                         | jR                  rd |d<   d |d<   d |dr<   d |#dr<   | j                  j$                  jM                  | j                  | j                  dd      \  }/}0|/jL                  rCd|/jN                  v sd|/jN                  v r%|/jQ                  |0      }1|/jS                  |1      }2n|/}2d|/jN                  v r'|/jU                  |0d      s| j                         xr dS 	 |2jV                  | j                     \	  | _        | _        | _        | _        | _        | _        | _        | _        | _        |2| _        |/| _        |0| _        | j                  j                  | j                   jp                  xs d       d|/jN                  v rd| j                  d<   d|/jN                  v r$| xj,                  |/jN                  d   z  c_        	 | js                         }3| j$                  dv r| ju                         xr | j>                  	 | jv                  ry| j
                  jH                  jx                  jW                  | jv                  d       | j
                  jH                  jz                  jW                  | jv                  d       S S | j$                  dk(  r| j}                         xr | j>                  	 | jv                  ry| j
                  jH                  jx                  jW                  | jv                  d       | j
                  jH                  jz                  jW                  | jv                  d       S S |3s| j,                  jM                  d*d      }4| j,                  jM                  dd      }5| j                  rdnd}6|5r|4rdnd}7d}	| j                  |	| j$                  |5|6| jX                  |4|7fz  d       t=        dd      | j$                  dk(  r| j                         xr | j>                  	 | jv                  ry| j
                  jH                  jx                  jW                  | jv                  d       | j
                  jH                  jz                  jW                  | jv                  d       S S | j$                  dk(  r| j                         xr | j>                  	 | jv                  ry| j
                  jH                  jx                  jW                  | jv                  d       | j
                  jH                  jz                  jW                  | jv                  d       S S | j$                  dk(  r| j                         xr | j>                  	 | jv                  ry| j
                  jH                  jx                  jW                  | jv                  d       | j
                  jH                  jz                  jW                  | jv                  d       S S | j$                  dk(  r| j                         xr | j>                  	 | jv                  ry| j
                  jH                  jx                  jW                  | jv                  d       | j
                  jH                  jz                  jW                  | jv                  d       S S | j$                  dk(  r| j                         xr | j>                  	 | jv                  ry| j
                  jH                  jx                  jW                  | jv                  d       | j
                  jH                  jz                  jW                  | jv                  d       S S | j$                  dk(  r| j                         xr | j>                  	 | jv                  ry| j
                  jH                  jx                  jW                  | jv                  d       | j
                  jH                  jz                  jW                  | jv                  d       S S | j$                  dk(  r| j                         xr | j>                  	 | jv                  ry| j
                  jH                  jx                  jW                  | jv                  d       | j
                  jH                  jz                  jW                  | jv                  d       S S | j$                  dk(  r| j                         xr | j>                  	 | jv                  ry| j
                  jH                  jx                  jW                  | jv                  d       | j
                  jH                  jz                  jW                  | jv                  d       S S | j$                  dv r| j                         xr | j>                  	 | jv                  ry| j
                  jH                  jx                  jW                  | jv                  d       | j
                  jH                  jz                  jW                  | jv                  d       S S t=        dd| j$                        #  |D cg c]  }t9        |       nc c}w }}ddj;                  |      z   dz   }t=        dd|      xY w# t<        $ r}d| _        d| _        d| _        d| _        |j@                  dk(  rddini }	 | jC                  tE        |      |j@                  |d       n#  Y nxY w|j                  r| j                  d|j                  z   d       Y d}~yd}~ww xY w#  | jh                  }d| _5        | j                   jd                  d/k7  r7d0}	| j                  |	| j                   jd                  |fz  tl        z   d1       nto        |ddd2         D cg c]  \  }}d3d2|z
  |j+                         fz   nc c}}w }}}d4}	|	| j                   jf                  |fz  }	|	d5d6j;                  |      d6}	| j,                  jM                  | j                   jp                        }d7}|	|| j                   jp                  |xs d8fz  z  }	|s|	d9z  }	|	tr        z  }	| j,                  jM                  | j                   jt                        }d:}|	|| j                   jt                  |xs d8fz  z  }	|s0| j,                  jM                  d*      }d;}|	||xs d8z  z  }	|r|	d<z  }	| j                   jv                  rty        |	      }	| j                  |	d=z   d       Y "xY w#  | j                   j                  r(t        | j                   j                        dFk(  | _D        ngd| _5        dG| _,        dH}	|	| j                   jp                  tr        tl        fz  }	| j                   jv                  rty        |	      }	| j                  |	d       Y !xY w# t6        $ r/}dY| j&                  dZ|}	| jC                  |	d[       Y d}~yd}~ww xY wc c}w c c}}w #  Y xY w#  Y xY w# t6        $ r4}t        |t<              st=        d      }8n|}8	 |8j@                  dk(  r| j                  dd       Y d}~| jv                  ry| j
                  jH                  jx                  jW                  | jv                  d       | j
                  jH                  jz                  jW                  | jv                  d       yy| j$                  dv xs& d(| j,                  v xs | j                  jT                  }9|8j@                  |9rdndk\  rd| _        t        |      }:|8|u r|:n
t               }|8j@                  dk7  s| j                  rB| j                  d|8j@                  |dU| j                  z   fz  |:jQ                  d      rdnd       | j                  rs| j                  jQ                  d      rX| j                   j                  r&d}	| j                  |	| j                  dd fz  d       nd}	| j                  |	d       d | _U        |:d| j                  d}| j                  r|d| j                  dz  }d|:v r6| j
                  jH                  j"                  j                  d       |dz  }dt        |      j                  dVdW      z   }&|8j@                  dk(  rddini }| j                  |&|8j@                  |d       |8j                  r| j                  d|8j                  z   d       | j>                  cY d}~| jv                  ry| j
                  jH                  jx                  jW                  | jv                  d       | j
                  jH                  jz                  jW                  | jv                  d       S S # t<        $ r Y Y d}~| jv                  ry| j
                  jH                  jx                  jW                  | jv                  d       | j
                  jH                  jz                  jW                  | jv                  d       yyw xY wd}~ww xY w# | jv                  ry| j
                  jH                  jx                  jW                  | jv                  d       | j
                  jH                  jz                  jW                  | jv                  d       w w xY w)z(returns true if connection can be reusedzno-store, max-age=0)VaryCache-ControlFr   zclient rejected (--ipa)rr   r        r   r	   N:z	 HTTP/1.1z#[ z ]
#[ z ]  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-alivetransfer-encodingidentitycontent-lengthzLsuspicious request (has both TE and CL); ignoring CL and disabling keepaliver   z%s:%sz::ffff:   ,i zXglobal-option --rproxy %d could not be used (out-of-bounds) for the received header [%s])r   r   z2  rproxy: %d   if this client's IP-address is [%s]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! The raw header value was [%s]. 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:


a#  
Furthermore, the following request-headers are also relevant, and you should check that the values below are sensible:

  request-header [%s] (configured with global-option --xf-proto) has the value [%s]; this should be the protocol that the webbrowser is using, so either 'http' or 'https'zNOT-PROVIDEDzf. Because the header is not provided by the reverse-proxy, you must either fix the reverseproxy configz

  request-header [%s] (configured with global-option --xf-host) has the value [%s]; this should be the website domain or external IP-address which the webbrowser is accessingz. Because the header is not provided by the reverse-proxy, copyparty is using the standard [Host] header which has the value [%s]z. If that is the address that visitors are supposed to use to access your server -- or, in other words, it is not some internal address you wish to keep secret -- then the current choice of using the [Host] header is fine (usually the case)z


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example.comzgot proxied request without header "%s" (global-option "xf-proto"). This header must contain either "http" or "https". Either fix your reverse-proxy config to include this header%s%sz;malicious user; illegal Host header; req(%r) host(%r) => %rbad_hostzillegal Host headers   illegal Host headerzclient rejected (--ipar)zclient uncappedr   z[H] {}: [33m[{}]r  r  zdid you mean '?' instead of '&'/.uqe/r   utf-8replacez/?zbad uqe in request [z]: r0  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cookiezcookie header too big;cppwscppwdr   ztoo many cookies   z(http-request rejected; num.params: %d %rzu wot m8qr zillegal relpath; req(z) => bad_vpzinvalid relpathsauthorizationasciiz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<script>var is_idp=2</script>
zunknown username: 
username [] rejected by --ipr   dotsltxdevxvolbcasechknorobotsnoindex, nofollowX-Robots-Taghtml_head_s)r+  HEADOPTIONSz<?>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 (see fileserver log)POSTPUTPROPFINDDELETE	PROPPATCHLOCKUNLOCKMKCOL)MOVECOPYzinvalid HTTP verb   )ri  rj  ,    zhttp%d: %s[0m, %rzclient d/c <xml> z$invalid XML received from client: %rzUreceived invalid XML from client; enable --log-badxml to see the whole XML in the logz
URL: 
zhint: database is locked
log_stacksz(hint: important info in the server log
s   <pre>)r   	http_varyr   	early_ban	is_bannedr   ipa_nmmapr   r   terse_replyr|   
settimeoutrS   r   s_theadr   r   r   r   r   stripr   lowerendswithRE_HTTP1r   r   reprjoinr*   r   code
loud_replyr   nbr  nreqr   r   r   r   tepopr   familysocketrq   r  getsocknamerproxyxff_hdrr   bad_xffBADXFF2	enumeratexf_protoBADXFPxf_hostr   r   xff_nmr   
compressedxff_lan
set_rproxyr   lenr   xf_proto_fbRE_HOSTspancbonkgmalipar_nmacloserH   r   lf_urlr   iheadlistsortedkeysformatr   uqerd   encodedecodeRE_USAFEri   r   rg   RE_KRE_CCUPARAM_CC_OKrA  r   r   copyr   rsp_slpsleeprsp_jtrrandomcookie_cmaxlstriprstriprh   cookie_nmaxr%   	translater   r   r   r   tx_qrr
   tx_404no_bauth
bauth_lastr1   r   r   r   hashr   pw_urlppw_hdrr   r   have_idp_hdrsao_idp_before_pw
idp_hm_usridp_hm_usr_pitems	idp_h_usrao_h_before_hm	idp_h_grp	idp_chsubidp_chsub_tr	idp_h_keyr   idp_checkinbrokerr   aread
ao_have_pw
idp_logoutr   asesset_idp_cookiehave_ipu_or_ipripuao_ipu_winsipu_iuipu_nmiprr   awriter   aadminr   freshen_pwdget_pwd_cookierealpathr  	canonicalchk_apcasechkuaxsr   r   r   r   r   r   r   r   r   r   r   r   s_tbody_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
isinstancestrrN   
log_badxmlsayrE   reply);r   headerlinesheader_linerH  r   r   r   exhttrusted_xffr{   zsozslcli_ipzdt2pipxffszs2ry   nkar   rtr   r  r   queryr   arglistre_kptn_cck_safesvzsllr   	cookie_pwbauthzbhpwidp_usrhnhmvzs1idp_grptrusted_keyr  r   r   apr   cors_kr   re  protoguesspexpostems;                                                              r   runzHttpCli.run<  s"    II''2

 994>>#399DII$4$4$8$89J$KHH.2S#&%	FFa %dggtyy/@/@$))BSBSTK$D:5@^5I5I#5N2	48T] $/qr? *K'--c15EAr.0hhjDLL+{{;/HOOB4G'k)	*6 
		q ,,""<4++I6\\lB/557 * 
MMZ'=2+= 	
  4<</01779ZGDGGJ4<</!&  !12bALL$$V,2	yyvv}}. IINN	tvv113BQ77&(mmI&>BqrFB	II,,""499#4#45Cq5FAiin#2 V\\^FH iinnQ'yy'' DA||''(:;  v  v  [  [LAcz XXciinRa&89IE(ue<GG37993D3D3H3H3M/SUCTYY..VS"cJJAyy{{$QKHHQN#'DL$DG#'99#7#7#@DL $ 0 01B1BDII NDI+(+DLL9K9K,L(MQR(R" #'KNN499%diinn,BMAHHQ$((B1668A;=(9::A>JJtyy~~**B
<QR3S9>>99TYY%6%6%:%:477%CHH/3S#&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 OODHH%B5AHHQ"b!/00!4JJtyy~~**BFS#& dhhTXX&E"'.."5D%LE!XX^^C3NE7UOE"'.."5D%LEDF!F]]3' !8GGCOEAr ""((*"4"4S#">?BKKNUAHHQ$((Aq!/?!@@!DJJtyy~~22DHHfnU$$S#. GGIq	; !2&MM"%GdhhBqvvx{},=>>B

499>>..&-P  c*?B 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69iinQqAHHJ$$S!,QDQOSTeaqxxz?288:q#AATGTt}}G'JPbIg~#V"3%cls7|dii333 23?GIv;:AHHQ#f+txx00!4OOJsO3OOG,E
%)%8%8Ueck6>::<U?v45=DEMHH3CSTUJJtyy~~**DHHh@RS;;=*U*ll/II&&dii&:&:YYs^A&--g6BZ&&w/ TBHHS!$4TrT$:: E		.)),,++E2Cyy**3/ JJtyy(() ||		 0 01 	 	 IINNtww' yy""499<<#4#4TWW#=> 	
 99""JJ#!;!;Gyy###yy55;;= GB))"-B(+		 &HC!Sy*- %&  ii)) :499#;#;,,**2.9':  yy** LL$$TYY%8%89?R 
 99&&%//		0F0FGG%//		0F0FGG"))..+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yy++tyy/C/C*KK*KK++G4B++B/HHw@!D99$$yy}}$**"3tyy7L7L!YY--dii.>.>.B.B477.KL
))..$$CtzzS(4::**4773HH$**NPQR!$DJIIMM''

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

E5IC;;Fbhh.&BHH2Dc"B))B-CC!"**S$*?;;=*U*	 $

 $))++3t4!/BD^,BHH$NNbhh}55N`	9ZZ\FyyO+(;T^^;v zz		""&&tzz48		""&&tzz48 u yyI%**,??r zz		""&&tzz48		""&&tzz48 o ||''6))(E:&*mm
(.4k edii		4OOQRSS"OPP yyF"'')<dnn<X zz		""&&tzz48		""&&tzz48 W e#(;T^^;T zz		""&&tzz48		""&&tzz48 S j(++-@$..@P zz		""&&tzz48		""&&tzz48 O h&))+>>L zz		""&&tzz48		""&&tzz48 K k),,.A4>>AH zz		""&&tzz48		""&&tzz48 G f$'')<dnn<D zz		""&&tzz48		""&&tzz48 C h&))+>>@ zz		""&&tzz48		""&&tzz48  g%((*=t~~=| zz		""&&tzz48		""&&tzz48 { ..'')<dnn<x zz		""&&tzz48		""&&tzz48 u SDII"GHHo:0;<1tAw<<<inn[99D@S-S99 	DIDH&DM"DN;=77c>#%67rABGGQtTvv6?C	v!2!WWF#'DLyy''72vdii&6&6%<!<w!F!L
 +4C"I*> !'B Q!Bw
34  
 Z!2!2C 88,-tyy~>!\\--dii.@.@A FR499#5#5r7K^"LLL!  "J  JAKA!\\--dii.?.?@ RR499#4#4b6JN"KKK!!%!1!1&!9B "eBr';^!<<A! !  &X  !X99;; (AXq1:
+9900,/		0E0E,F!,KDM+/DL(5DI !YA !TYY%7%7$I IA#yy{{$,QK HHQN|  59XXrB#.x RTb^	h  5	b&)Sk/88s?$$S#. ^ zz		""&&tzz48		""&&tzz48 Y II0 "'4<<7"wwzz 
 88t5%*DNW2Ib6888s?dkkHH/388S#

BR2SS]]=9q
 99!5!5h!?yy++Bdiim%5!5q9sA "DI-/<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 	i5	p zz		""&&tzz48		""&&tzz48 s  >A#BR #B BQ $BQ :BQ (BT/ '4B\, BB_ !	B`+"B`3B`EC B` HB` kAB`' o=B`/ r-B`/ u B<B`/ z-B`/ |9-B`/ .-B`/ B#-B`/ E-B`/ H-B`/ K-B`/ M7,B`/ P+B`/ QBR	Q
BQQ-BR	R	BR R	BT,R1BT'S(BS0S/BT'S0BS4S20BT'T'BT,T/A9B\)V("BWW
EB\)\,B'B__	B`_"%B``B``B`$`'B`,`/
Bq-`9Bq(a!Boa:Bq0 dH>BomBq-mBq0 o	Bq%oBq(oBq0 q$Bq%q%Bq(q(Bq-q-Bq0 q0BBs8c                     | j                   j                  r| j                  j                  dd      S | j                  j
                  j                  | j                        S )Nr)  r<  )r   plain_ipr   rA  r   iphashr|   r   s    r   dipzHttpCli.dip  sC    9977??3,,99##%%dgg..r   c                 J   | j                   j                  }|dk(  sS|dk(  r| j                  dk7  s?|dk(  r| j                  s.|dk(  r| j                  s|dk(  r| j
                  r| j                  ry| 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
t1        j0                         d| j                  t1        j0                         ||g      }	|	j!                  d      dk(  ry| j%                  d|d       || j                  j                  j2                  |<   | j                  j                  xj4                  dz  c_        y)Nanyauthr   aaavrwFr	   xbanr   r   rvzclient banned: T)r   dont_banr   r   r   r   r   r   r  nsuslimbonkr   r   r   r  r   rZ   r   r  r  r   r   r   r   bansnban)
r   gvreasondescrcondr1  r   r,  hrs
             r   r  zHttpCli.cbonk  s   yy!!EM4::#44>>		q uu66$''1tyy=1bww}}  (		%%!!$((+

		

				 B" vvd|q /3"&		B		q r   c                    | 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                  | j                  j                  d       y)	NFr   zclient unbannedrr   zbanned for {:.0f} secr2  rU  T)
r   r2  rH   r   r   r   r  r  r   banmsg_b)r   r2  r   r  s       r   r|  zHttpCli.is_banned  s    yy~~yy~~DGG_T>"X		#6RHH&*(//3Q7++S1r   c                     | j                   j                  d      }|'| j                  j                  d   | j                  d<   y |sdn|dk(  rdn
t        |      }dt        |      z   | j                  d<   y )Ncachecachectlr&  E   ii:	 zmax-age=)r   r   r   r  r   intr  )r   r=  r{   s      r   permit_cachingzHttpCli.permit_caching  sg    (=04j0ID_-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(  r{   )r   r   r   rD  )r   rD  s     r   rD  zHttpCli.k304  s;    ||'s{Ctyy~~2Bts{Cr   c                     | j                   j                  d      }|dk(  xs  | j                  j                  dk(  xr |dk7  S )Nno304rE  r(  r{   )r   r   r   rG  )r   rG  s     r   rG  zHttpCli.no304  s;      )|F		1 4 E#Fr   c                    t        | j                  j                  d         }|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  r(  z%@%%r   r	   @Tr;  r  )r  r   r  rA  r   rW   r   r   r  mutexr  jinja2Environmentfrom_stringr  r   )r   kvhtmlis_jinjaj2envr  s         r   r  zHttpCli._build_html_head	  s/   477==/0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-TypeFz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[{}]r=  rw  r@  r*  z!client d/c while replying headers)#r   r"   r   updater  r   rD  r   r   r   H_CONN_KEEPALIVEH_CONN_CLOSEr5   r  r  r  r   r   r   r  r  r   r  r  r*   r   oheadr   r   r  r  r|   sendallr  r  )r   lengthr0  mimer   responserH  r   r  ry   r  r  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*  )rU  ru    rd  s   <pre>partial upload existss   <pre>source file busyru  rU  r|   r(  r   r@  s   PPrc  zclient d/c while replying body)%r   r   r   r   r  g404g403g422gurlr0  r   sus_urlsr   r   nonsus_urlsr  r  r  r   r   all_volsvaluesrk   r-   __file__rsplitospathseprA  r  rb  r  r   r|   r[  r*   )
r   bodyr0  r]  r   r1  r4  rh  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   r  r  r  r  )r   rr  r   kwargss       r   r  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   z8Content-Type: text/html; charset=utf-8
Content-Length: rw  r@  )r   r   r"   rY  r   r   r  r|   r[  r  r  )r   rr  r0  r_  s       r   r  zHttpCli.terse_reply  s     --5:5vx?OP

 LLL#d)$%
 	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   rL  rM  rD  r  z&amp;)r   r   r  r   r   rW  rQ   r  )r   addrmrH  r   rO  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  rH  rD  r   rE  r   r  r  )r   r  rQ   r   rA  r  r  )r   skipr   rH  r5  r  s         r   ourlqzHttpCli.ourlq  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@  rA  i.  Locationr0  r   rB  )r   SRSr!  r  rQ   rE   r  r  )
r   r   r   r   flavorr  r0  use302vprP  s
             r   redirectzHttpCli.redirect  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   }| j                  j                  |v st        j                  dd|      |v rd}d}	nd}d| j                  j                  f}	|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)  httpshttp://z(:[0-9]{1,5})?/?$r   )r   Fzaccess-control-request-headersr   , truez Access-Control-Allow-Credentialsrangez,Ranger9  zAccess-Control-Allow-OriginzAccess-Control-Allow-MethodszAccess-Control-Allow-Headers)r   r   r  r   r   r   r   r   r   acaor  r   r   
allow_csrfr  r   r  mallowacamr  upper)r   ihre  sfsiter   ohr  good_originsgood_originbad_hdrsacahr  r  req_hr   s                  r   r  zHttpCli._cors  sZ   \\!VV,-F&,,.33G<yy ??3t|zz$'*S0::c?1%D==fyy~~eT)B(CC II"vv*B7<GKHKDII,,-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   J3JJc                 V   | 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 r|| j"                  j$                  |z   }t&        j(                  j+                  |      s"t&        j(                  j+                  |dz         r| j-                  |      S | j/                  |      S |t0        v r| j"                  j$                  t0        |   z   }d| j2                  vrJd| j2                  vr<| j4                  j7                  d      s!|j                  d      d   | j4                  d<   t&        j(                  j+                  |      s"t&        j(                  j+                  |dz         r| j-                  |      S | j/                  |      S | j9                          yd| j2                  v r1| j                  | j;                  d      j=                  dd             y| j>                  s| j@                  s| jB                  swd }| jD                  jF                  rd!| jD                  jH                  v r|d"z  }| j                  || j                  d| j                  z   fz         | jK                  | jD                  jH                  d!   | jD                  | jL                        }|d#k(  ry|d$k(  ry|d%k(  rd&| j2                  d'<   n|d(k(  rD| j                  d)       dx| _        x| _         | _'        dx| _(        x| _!        | _)        d| _*        nk| j9                  d      S | jV                  jX                  rd'| j4                  vrd*| j4                  vr~d+}d,}| jV                  jZ                  r(t]        | jV                  j^                        dk(  r|d-z  }n|d.z  }| j;                  d/||0      }	| j                  |	j=                  dd      d1       yd2| j2                  v r| ja                         S | j                  rq| jb                  jd                  }
|
r|
jg                  | j                        s-| j                  || j                  d| j                  z   fz         | j9                  d      S d&| j2                  d'<   d3| j2                  v r| ji                         S d4| j2                  v r| jk                         S d5| j2                  v r| jm                         S | jb                  jn                  r[d6| j2                  v r| jq                  g       S d7| j2                  v r| js                         S d8| j2                  v r| ju                         S | j                  s| j4                  rd9| j2                  v r| jw                         S d:| j2                  v r| jy                         S d;| j2                  v r| j{                         S d<| j2                  v r| j}                         S d*| j2                  v r| j                         S d=| j2                  v r| j                         S d>| j2                  v r| j                         S d?| j2                  v r| j                         S d@| j2                  v r| j                         S d'| j2                  v r| j                         S dA| j2                  v r| j                         S dB| j2                  v r| j                         S | j                         S #  | j                  d   }Y AxY w)CN4r    @r  rD  r	   z [[36mz[0m]rI   `-- z.cprz	.cpr/ico/r   r   T)exactz	.cpr/ssdps!   ssdp is disabled in server configru  Fz.cpr/metricszweb/r=  .gzr   r]  dlcf_challengecfr@  rA  z@%s has no access to %ron403z (on403)r  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   )h1r  r'  lssmsgtreescandeletemover  reloadstacksetckresetsharesr  ruidpupsrss)Hr   r   r   r   r   r   r   r   r   tx_icor   r  ssdpr  metricstxr   r   mod_r   rp  existstx_filetx_resr   r   r   r   r  r!  r  r   r   r   r   r  r  on40xr   r   r   r   r   r   badcfg1is_lxcr  cfg_files_loaded
tx_ls_volsr   rj  r   handle_smsgtx_treescanvolgetmod	handle_rm	handle_mv	handle_cphandle_reloadtx_stackr  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  r   r  r  rP  r   s              r   r  zHttpCli.handle_get8  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VV[[8+88??2&#((//"u**E<<++;;x004VV[[4>1,dkk1 LL,,T2 *2)<R)@DLL&88??2&#((//"u**E<<++;;x00KKMT[[(JJtxx~,,Wi@A}}T^^DLL)AwwGtww}}$<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4;;&??,,::))//Ccjj&<djj#

2B%C!CD;;t,,#%C T[[ ##%%T[[ <<>!T[[ <<>!994;;&~~b))$~~''$~~''zzdll4;;&))++$++%}}&$++%zz|#$++%))++t{{"||~%4;;&~~''#{{}$t{{"||~%#{{}$$++>>##DKK;;= DKK;;=   1<<0Ds   "b b(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      xs | 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   }dx}}| j"                  j8                  }|| j:                  v r\d| j:                  vrN| j:                  |   }d|d t=        |      }d!|d t=        |      }|D ]  }|d"xx   d|d"   v r|n|z  cc<    | j                  j                  d#      xs | j>                  j'                  d$      d%   }tA        |dd      }| jB                  rd&nd'd(| jD                  d$}|| j                  d)d  z   }|| j:                  v r9| j:                  j                  d      d*k(  rtG        jH                  d!|d+d|      }| jJ                  r|| j"                  jL                  z  }tA        |dd      }|j'                  d      d   |z   }d,|d-|d.|d/g}d0}d$|v r|jO                  d$d)      nd|f\  }}	 |jP                  | j                  jR                     jU                  |||f      jW                         d   }tY        jZ                  t\        j^                  j+                  |ja                  |      |             |tc        | j>                  |      d1|}tA        |dd      }d2}|j)                  ||||fz         d}d3| j                  j                  v }| j                  j                  d4      xs | j                  j                  d5   }| j                  j                  d6      xs | j                  j                  d7   } td        jg                  |      D !cg c]	  }!|!|!d)d% g }"}!td        jg                  |       D !cg c]	  }!|!|!d)d% g }#}!|D ]  }|r7t\        j^                  j+                  | j                  jR                  |d"         }|d8   }$tA        ||d"   dd      }%ti        |d"   j'                  d      d   j'                  d$      d%         x}&|$d9<   |}| }'|"D ]0  \  }	}
|jk                  |	t!        |$j                  |
d                  }2 |#D ]0  \  }	}
|'jk                  |	t!        |$j                  |
d                  }'2 tA        |jm                         dd      }|'jm                  d:      rtA        |'jm                         dd      }'n|}'tA        to        |&|            }(tq        ts        d|d;               })|%|%||'|)|%|(|d<   f}*d=|*z  }|d8   j                  d>      }+|+r	|d?|+fz  z  }|j)                  |d@z           |j)                  dA       dj+                  |      ju                  dBdC      },| jw                  |,dDdE       | j                  dFty        |      ty        |,      fz         y#  Y xY wc c}!w c c}!w )GNzRSS  r  Tr    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   r9  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   nopwr  rD  r  rptitler   r   r  r  r  r	   r   z=[^&]*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fmt_t	rss_fmt_tfmt_d	rss_fmt_dtagsfnamez -,r  rx   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@  rA     text/xml; charset=utf-8zrss: %d hits, %d bytes)=r   r   r   r   r   r  r   r  r   r*   r   r   	get_u2idxr   r!   r   r  r   rss_fextr   r   r  rss_sortr  RSS_SORTrA  rss_nf	run_queryr  r   rQ   r   rE   r   r   r   r   r   RSrn  curr  executefetchoner   statro  rp  r  rj   	RE_RSS_KWfindallri   rA  r  r=   r5   maxr  r  r  )-r   r   r   idxuvuqr   r  extr  r  nmaxhitsq_pwa_pwpwkr@  r  etitlebaseurlfeedefeededirlinkr   qcrdcdncfncv_urlr  	use_magictpl_ttpl_dr   kw_tkw_dr  iurlr  descr]  lmodzsadurbrets-                                                r   r  zHttpCli.tx_rss  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kkoof%;););iik\\#ABB
o""#:'MB4;;??4(<DII,<,<=}}TZZ$''BE5$OPQRtii$,,6#=c"B"F2J/D"F2J/D <$3!D'>4t;< (EDJJ,<,<S,A",EUD$/ }}G&0II
 !"%$,,4<<#3#3F#;s#B66#/T:D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 -	(FDGGMM+,F(FDGGMM+,F&/&7&7&>?AaG??&/&7&7&>?AaG?? %	-AWW\\$''"2"2AdG<V9D!D':D$GD$,QtW]]3-?-B-H-H-Mb-Q$RREDMED  CSc3txxR/@+ABC  AS||CTXXc2->)?@AtT:Ezz% "4::<t<z%45Dc!QtWo.DudD$agFC 	  F)--'CENNJJrO+,K%	-N 	

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

478)SYD	,BBCm	 @?s   !C_* 	_20_7*_/c                 &   | j                   r+| j                  d| j                  d| j                         | j                  j
                  rt        dd      dd l}	 |j                  |d      5 }|j                         D cg c]  }d|j                  i }}t        j                  |      j                  dd	      }| j                  |d
       	 d d d        yc c}w # 1 sw Y   y xY w# |j                  t         f$ r t        dd      w xY w)Nzzls r  r  )zip browsing is disabled in server configr   r  rw   r@  rA  application/jsonr]  Tru  &requested file is not a valid zip file)r   r   r   r   r   no_zlsr*   zipfileZipFileinfolistfilenamejsondumpsr  r  
BadZipfileRuntimeError)r   abspathr0  zfr   filelistr   s          r   tx_zlszHttpCli.tx_zls}  s    ;;HHTXXtzz:;99IJJ	H#. "8:F1T1::.FFjj*11'9E

3%7
8	 F 
 ""L1 	HFGG	Hs<   C. 1C"C;C"C. C""C+'C. +C. ."Dc                    d}| j                   j                  d      }|st        dd      | j                  r.| j	                  d| j
                  d|d| j                         | j                  j                  rt        dd      d	d l	}	 |j                  |d
      5 }|j                  |      }|j                  |k\  rt        dd      |j                  |d
      5 }| j                  |j                  t        |             t!        | j                  d	|j                  || j"                  | j                  j$                  | j                  j&                  | j                  j(                   i d
       d d d        d d d        y# 1 sw Y   xY w# 1 sw Y   yxY w# t*        $ r t        dd      |j,                  t.        f$ r t        dd      w xY w)Ni   zgetr  zinner path is requiredzzget z [35mz[0m @r+  r   r  ru  zzip bomb defused)r\  r]  r   zno such file in archiver.  T)r   r   r*   r   r   r   r   r   r/  r0  r1  getinfo	file_sizeopenrb  r=   r`   r|   s_wr_szs_wr_slpno_pollKeyErrorr6  r7  )r   r8  maxsz
inner_pathr0  r9  zifis           r   tx_zgetzHttpCli.tx_zget  s    [[__V,
677;;HH3788ZT 99IJJ	H#. "ZZ
+<<5( &899WWR% %%R\\
:@V%W		))		** II---	. ' 	. 	  	9788""L1 	HFGG	HsC   F ?FBF4F<F F	
FFF F 6G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      }d|z   | _         ||      }t/        d |D        d       }|5t1        |D cg c]   }|j2                  j5                  d      d   " c}      }d| _        t!        t7        j6                               }t9        j:                  ddddddd|||f
      }	 t=        j>                  |      }d|d}g }| j"                  j%                  dd      jI                         }|dk(  rD| jJ                  s_| j                  s | jL                  jN                  jP                  r3d}|d | j                  z   fz  }| j                  |d!       t        d	|      t?        jR                  |d"   jT                        s7d#}|d | j                  z   |d"   fz  }| j                  |d!       t        d$|      | j
                  jV                  s(| j                  d%d!       d&}| jY                  |d'd(       y)|j[                  ||t1               | j                  d)d| j
                  j\                   d*+      }n|d,k(  st?        jR                  |jT                        sk|d,k(  r| j                  s|jP                  sd)| _%        | jJ                  s7| j^                  s*| j                  d-d | j                  z          t        d	d
      |d.k(  r|ja                  || j                  | j
                  j\                   d)d*ggd/|j                  vd)0      \  }}}| jJ                  sg }| jb                  ste        |      }|D cg c]
  \  }}||d }}}|rqtg        |      }| jb                  sti        |      }||D cg c]  }||d	 c}z  }n8d1}| j
                  jV                  rd2nd}t        d3|jk                  ||            | jJ                  s;| jl                  s/|s-| j                  d-d | j                  z          t        d	d
      |jP                  rd4|v rd5|vr|j                  d6   nd}|r|d7k(  sU|d8k(  r| j                  dk7  sA|d9k(  r| jl                  s0|d:k(  r| jl                  r| jJ                  s|d!k(  rg| jn                  rZtq        |jP                  d*      \  }} }| r:d;|j                  v r|jr                  jt                  } ||jr                  jv                  k(  rBty        |t{        d|jr                  jt                  |jr                  j|                  z
              }n	 | j~                  j                  j                  j                  d<|jP                  g      j%                         d   \  }}||jr                  _>        ||jr                  _;        ty        |t{        d|jr                  jt                  |z
              }t        |      t        | |z
        d=}!ni }!ni }!t        j                  |g|      }t        | j
                  j                  t        |j                  |            }"d>}#| j                  d d?d@|z   dAdBi       d}$dC|j                  v }%dD}&|&jk                  |      }&|D ]  }'t        |"|'dE         }(|'d"   }t{        d|j                        })t?        j                  |jT                        r7	 t=        j>                  t8        j                  j                  ||'dE               }t?        jR                  |jT                        }*|&dFt        |(      |*r|(rd nddGz  }&t        |(j5                  d       d         t        |)      |*rdHnddIdJ}+|*sV|%r#t8        j                  j                  ||'dE         }$t        t        |(|$            |+dK<   t        |j                        |+dL<   n|!r|+j                  |!       |+j                         D ]%  \  },}|,|vr|r|&dM|,dN|dO|,dNz  }&|&dM|,dPz  }&' |&dQz  }&|D 'cg c]  }'|'|+vsdM|'dP }-}'|-r'|r%dR}|&|jk                  dj                  |-            z  }&|&dSz  }&t)        |&      |#k\  s| j                  |&||#      }&t)        |&      |#k\  r" |&dTz  }&|&r| j                  |&||#      }&|&r| j                  d||#       y)c c}w # t@        $ rG}|jB                  tB        jD                  tB        jF                  fvr |rt        d      |}Y d }~Gd }~ww xY wc c}}w c c}w #  Y SxY w#  Y xY wc c}'w )UNzPFIND r  rI    `-- r  #WebDAV is disabled in server configdavauthr   r-  authenticater	   )	parse_xmlr@  r7  r   r      rA  rv  c              3   d   K   | ](  }|j                   j                  d       d   dk(  s%| * yw)}r   propN)tagr   .0r   s     r   	<genexpr>z*HttpCli.handle_propfind.<locals>.<genexpr>  s)     LqQUU[[-=b-AV-KLs   &00rR  r   r   iA  r   r   ru  )r  stdepthinfinityz)depth:infinity requires read-access in %rr   rr   rX  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>rU  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	quotauseddu_iwhors   r8  r=  rV  vmaxbup2k.get_volsizes)rb  zquota-used-bytesi     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>)Ur   r   r   r   r   r   no_davr*   r   r   r  r  dxmlrO  r  r   rA  r   r   get_body_readerr  r  r   nextsetrT  r   r   ro  stat_resultr   r  OSErrorerrnoENOENTENOTDIRr  r   r   r   r  S_ISDIRst_modedav_infr  zipgen
no_scandirr   r  r   r4   r  r3   r  r   r   r;   r0  vbmaxc_vb_rminr  c_vb_vr   r  r  askr  	itertoolschainrj   r   rb  st_mtimeS_ISLNKrp  r  rQ   rE   r5   r=   st_sizerW  r  
send_chunk).r   r   r   taprO  encuencpropsclenbufrbufsbufxrootxtagrE  rG  vstrX  r  topdirfgenrY  r  r  _vfs_lsvfs_virtr  r  r5  r  bfreebtotdfvtopchunkszr  r  r   r   r  mtimeisdirpvsrH  missings.                                                 r   r  zHttpCli.handle_propfind  sM	   ;;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
 ::c9-D 4DIdOELELdSD4@aQUU[[-b1@ADI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|DJJr{{ $==sTZZ/?ABS.11c\"$%%

II(((RXX- #( #Avx ==<<,V47=>VR2R(>D>8n||*3/Cs;!-;; IA%)YY%6%6!BBahhub122}}T^^DHH3+;=>n-- {{'505( HHY  	 !GaDJJ#-aDNNaDNNt}}aDNN#BKK7NE4bhh&66<<D- #E3q"&&,,2N+O P!$(IINN$9$9$=$= 3bkk]%!ceA%'EB -/BFFM,1BFFM$'s1bffllR6G/H$IE .1Z(+D5L(9
 Bx.TYY[[%#"67#+c14G3S	
 (	Sjj 0	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%_0	9d 	!!//#sG4C  	C)U A  	xxemm<<Sk!B	F ? <N! >B HsO   %h h i$i*Bi/ 6i7$	i?.i?	i!<ii!/i47i<c                 r   | 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      }d|z   | _        |j/                  dd        |d      }
|
j1                  d ||             |
j3                  d      }|D ]  }|j5                           d| _        d} ||      }
|
j3                  d      } |dt7        | j
                  j8                  | j                  z               }|j1                  d|       |
j3                  d      }|j1                  d|       dj;                  |	      }||j=                  |
      j%                  d      z  }| j?                  |jA                  |d      d d!|z          y)"NzPPATCH r  rI     `-- r  rL  z tried to proppatch r   r-  rN  r   ElementTreer	   mkenodmktnodrO  r      TrT  rA  rv  DDAV:zD:orzz+./{DAV:}propertyupdate/{DAV:}set/{DAV:}propr   zy<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@  rg  rh  )!r   r   r   r   r   r   rq  r*   r   	xml.etreer  rr  r  r  rO  rs  r  	_applesanr  r  get_xml_encr  r   register_namespaceinsertfindclearrQ   r  r  tostringr  r  )r   ETr  r  rO  r  r  r   r  r  r  xpropzeele2r   s                   r   r  zHttpCli.handle_proppatch  sH   ;;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(sN	
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                    | 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      }d|z   | _        |j7                  dd        ||      }|j8                  dk(  sJ d| _        t;        t=        j>                               }|jA                  d      4| jB                  jE                  dd      }|jG                   |d|             |jG                   |dd             |jG                   |d  |d!|                   |jG                   |d" |d!tI        | j
                  jJ                  | j                  z                             |d#      } |d$ |d%|            }|D ]  }|jG                  |        d&jM                  |
      }||jO                  |      j-                  d'      z  }d(}| j                  r?tP        jR                  jU                  |      s tW        tY        |      d)      5 }d*}d d d        d+jM                  |      | jZ                  d,<   | j]                  |j_                  |	d      |d-|	z          y# 1 sw Y   NxY w).NzLOCK r  rI  r  r  rL  Microsoft-WebDAV tried to lock r   r-  rN  r   r  r	   r  r   r  TrT  rA  rv  r  r  z{DAV:}lockinfor   z./{DAV:}depthrY  rZ  zD:depthz	D:timeoutzSecond-3310zD:locktokenr  z
D:lockrootzD:activelockzD:propzD:lockdiscoveryr  r@  r  wb   z<{}>z
Lock-Tokenrh  )0r   r   r   r   r   r   rq  r*   r   r   r  r  rr  r  r  rO  r   
dcanonicalr   rs  r  r  r  r  r  r  r   r  rT  r  uuiduuid4r  r   r   r   rQ   r  r  r  r   rp  isfiler@  r6   r   r  r  )r   r  r  r  rO  r8  r  r  r   r  r  lktokenrY  lk2r  r   r   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(sN	
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   'N77O 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  rI  r  r  rL  r  r  r   r-  rN     T)r   r   r   r   r   r   rq  r*   r   r   rb  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  rI  rK  r  rL  r-  rN  r'  r   )r  r   r   r   r   r   r   rq  r*   r   _mkdirr  r  )r   r  s     r   r  zHttpCli.handle_mkcol5  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  rI  rK  r  rL  	overwrite)r   r  rr  r   rU  r-  )r   r   r   r  r   r   r   r  r  r  r   r   r   r   r   r   rq  r*   ri   r   r  _cp_mvr  )r   dstr   r  funr  s         r   r  zHttpCli.handle_cpmvM  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@  rA  i  r  T)
r   dav_macr   r   r   r   r   r  r  r  )r   r  ztr  s       r   r  zHttpCli._applesanl  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)NrA  r'  zchunk slicing failedz%x
rv  )r  r  r  UnicodeDecodeErrorstartr*   r|   r[  )r   r   r  bmaxorig_lenr  r  udes           r   r  zHttpCli.send_chunky  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  rI  z    `-- r  Allowz1, 2DavDAVzMs-Author-Viar   r  T)r   r   r   r   r   r   r  r   r  r  r   rq  rb  )r   r  s     r   r  zHttpCli.handle_options  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  rI  r  )r   r   r   r   r  r$  s    r   r  zHttpCli.handle_delete  sH    DHHdjj9:$((?HHDJJ01~~b!!r   c                 j   | 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y| j                  j                  d	d
      j                         dk(  r	 | j                  j                  d       | j!                  d      S #  t        dd      xY w)NzPUT  r  rI  r  z,user %s does not have write-access under /%srU  r-  Fexpectr   100-continue   HTTP/1.1 100 Continue

r*  client d/c before 100 continueT)r   r   r   r   r   r*   r   r   r   rq  r  r   r   r  r|   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<<Hb)//1^CD?@   &&DS"BCCs   8D$ $D2c                 0
   | 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!                         S d| j                  v r| j#                  g       S d| j                  v r| j%                         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| j1                         \  }}d}	|D ]  }
|	|
z  }	|
rt3        |	      dk\  s n |	r|	j5                  d d!      }d"}| j                  |t3        |      d#| j                  z   |fz         	 t7        |	j9                  d$d%      j9                  d&d'            }|j5                  d d!      }|	j;                  d(      r|d)d  }| j<                  j>                  j                  d*      }|rtA        | j                   | jB                  jD                  jF                  d d*|| j<                  jI                  | jJ                        | j                  | jL                  | j                  | jN                  jP                  jS                  | j                  | j                        tU        jT                         t3        |	      | jV                  tU        jT                         ||g      }d+}| j                  |t3        |      d#| j                  z   |fz         d*|v r9|r'| j]                  |j                  d,      xs dd-.       y/| j_                         S d0|v r| j_                         S t        d1d2|d3      t        d1d4|d5      #  t        d	d
      xY w# tX        $ r$}| j                  t[        |             Y d }~d }~ww xY w)6NzPOST r  rI  r  r  r   r  r  r*  r  rawFcontent-typezmultipart/form-datar,  z
text/plainzapplication/xmlr  r  r  r  esharefs_abrtzapplication/octet-streamz!application/x-www-form-urlencodedstashsavezurlform: %d bytes, %rprintr   rP  r@  rA  zurlform_raw %d @ %r
  %r
r      +       &   
s   msg=rV  xmzurlform_dec %d @ %r
  %r
stdout   rB  Tr   r  zPOST(z) is disabled in server configzdon't know how to handle POST())0r   r   r   r   r   r   r  r|   r[  r*   r   r  handle_post_multiparthandle_post_jsonr  r  r  r  handle_esharehandle_fs_abrthandle_post_binaryr   urlformdump_to_filers  r  r  r   rA  r   r   r  rZ   r   r  r  r  r   r   r   r   	get_permsr   r   r   r  r  r  )r   ctypeoptr  xm_rsppost_szr  rp  readerr  r  origr  r  plainr  s                   r   r  zHttpCli.handle_post  s|   $((DJJ78$((?HH$**./<<Hb)//1^CD?@ DKK$$U++  4::< E)--// %'u$ E)((**T[[ ##%%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%<%D%DT5%QR "		'9 =>>'2$)!"IE!%!2!24!8B!)0$(HH$(IINN$9$9$($($&$(GG$5$5dhh$?$(JJ$(II$(JJ$(IIMM$;$;DJJ

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

2BE%J!JK
 s{OOFJJx$8$>BsOK??,,|((PQQSHIISDS"BCCr % +b**+s%   S 	FS( S%(	T1TTc                    | j                   | j                  j                  vrt        dd      | j                  d   }| j                  dt        |      d| j                  z   |fz         | j                  j                  j                  d      }|rt        | j
                  | j                  j                  j                  d d|| j                  j                  | j                         | j                  | j"                  | j$                  | j&                  j(                  j+                  | j                  | j$                        t-        j,                         t        |      | j.                  t-        j,                         ||g      }| j1                  |j                  d      xs dd	
       y| j1                  dd	
       y)NrU  z6smsg is disabled for this http-method in server configr  zsmsg %d @ %r
  %r
r   r  r  r   r  rB  rH  T)r   r   smsg_setr*   r   r   r  r   r   r  r   rZ   r   r  r  r  r   r   r   r   r   r  r   r   r  )r   r   r  r  s       r   r  zHttpCli.handle_smsg(	  sL   99DII...VWWkk&!'3s8S4::5Es*KKLWW]]t$		%%!!$((+

		

		''

DJJ?		C		c
F" OOFJJx06BsOC  OOCO,r   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	   r2  "r  zcharset=rV  rD  rK  r   z"'r@  )r  r   r   r   r  r  )r   r   ofsr  s       r   r  zHttpCli.get_xml_encG	  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 )
Nri  r5  r   r   r7  FT   r	   )r   s_rd_szr   r   r  rU   r   rA  r   r   r|   r  r  r  rV   rT   )r   bufszremainss      r   rs  zHttpCli.get_body_readerV	  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      }t        j                  jU                  ||      }|r(tG        jF                         |z
  }|rtW        | j                  |      n| j                  }tY        | j<                  | j(                  j*                  j,                  d d|||| jZ                  | j
                  | j                  j                  j]                  | j                  | j
                        ||| j$                  |d       }|j                  d      xs d}|s|j                  d      dk7  r%|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<   |r| j4                  jf                  s| j4                  jJ                  sd| j8                  vrt        j                  ji                  |      rv|dz   }| j4                  jj                  rd |z   }| jl                  r|j0                  j                  d!      sd"| jn                  v sd#| jn                  v s| j4                  jp                  r4| j4                  jp                  | jr                  ju                         d   k(  st        j                  ji                  t        j                  jU                  ||            st        j                  jw                  |      slt        j                  jy                  |      tG        jF                         | j4                  jz                  z
  k\  r!t}        | j<                  ||j0                         d } t~        }!| j                  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                  dQi t        } n|"d)k(  rt        j                  dQi t        } ng|"d*k(  rt        j                  dQi t        } nH|"d+v rt        j                  dQi t        } n*|"d,v rt        j                  dQi t        } nt_        d-d.      d/| j8                  v r| j4                  jJ                  st        j                  ji                  |      r|j0                  d0   }#|#d1k(  s"|#d2k(  r| j                  s|#d3k(  r| jl                  rn|#d4k(  rt_        d5d6      t_        d5d7      t        j                  jU                  |d   |      }#| j=                  d8|#d9       t3        |#d:      }$nt        |g|i |\  }$}d}%|
rF|dk  rA|
j                  r|
j                  }%|
j                  r|%r|%|
j                  kD  r|
j                  }%	 t        j                  jU                  ||      } |!||$| |%| 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#      }*|*r+t        j                  | j<                  |t        |*      d       |rd;|j0                  v r	 | j(                  j*                  j                  j                  |      }+|+r|rtQ        |d?|+z   |      }-n|j                  d d      d   d z   |+z   }-|d d@ |dA<   t        |-g|i |\  }$}-|$j                          t        j                  jU                  ||-      }.t        | j<                  ||.|j0                         |-}|.}|	rJ|rtW        | j                  |      n| j                  }tY        | j<                  | j(                  j*                  j,                  d dB|	||| jZ                  | j
                  | j                  j                  j]                  | j                  | j
                        |)|&| j$                  |d       }|j                  d      xs d}|s|j                  d      dk7  rF|sdC|}| j=                  |d       t}        | 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                  jw                  |      }/n|&}/|j                  |      \  }}| j(                  j*                  j,                  j                  dD|j&                  |j                  |j0                  ||| j$                  || j
                  d
       d}0| j                  s| j                  rdE|j0                  v rsdF|j0                  v rdGnd}dH| j                  || j4                  j                  ||/t        rdnt        j                  |      j                        d |j0                  dE    z   }0dI| j8                  v sdJ|j0                  v r	|0|0rdKndLz  }0dMjU                  |j                  ||fD cg c]  }|s|	 c}      }1t        |1      }1| j4                  j                  r| j4                  j                  |1|0}2n:| j                  rdNndOdP| jZ                  dM| j4                  j                  |1|0}2|&|"|'|(|||2fS #  Y xY w#  |%rJ| j                  j                  |%k\  r1|$j                          t}        | j<                  ||j0                          xY w# |$j                          w xY w#  t}        | j<                  ||j0                          xY w# t        $ r%},| j=                  d<|d=|,d>       d }+Y d },~,d },~,ww xY wc c}w )RNFTr   vfr  r  gzxzpkrs   )r  r  r   r9  zcompressing with {} level {}i f_)r  presetzfallthrough? thats a bugr	   z
-{:.6f}-{}	put_name2)nowcip)suffixfdirr  zxbu.http.dump	rejectmsgr  z%upload blocked by xbu server config: rU  relocr  r   .PARTIALr<  dawrA  
x-oc-mtimeckput_cksha512nomd5sha1sha256blake2b2blake2sb2sr'  unknown hash algapndapnd_whor   awdwnddr*  z.append is denied here due to non-reflink dedupz$you do not have permission to appendzupload will append to [r  abmagiczfiletype detection failed for rU  r2  za.r  zxau.http.dumpz%upload blocked by xau server config: up2k.hash_filefkfkar(  ?k=media
medialinks&v?vr   r  r  r  r  )irs  r   r   r   r   r   upload_flagsget_dbvr0  r  r   r   rp  r  ro  r   rm   allr   r  r   r  r  makedirsr  r@  r   iobufr   rA  r   r  r>   GzipFilelzmar   r%  nwdevnullrW  rR   r]   r  rj   rZ   r   r  r*   rP   hook_vrM   rq  r  dotpartr   r   dav_portr|   r  getsizegetmtimeblank_wtrn   rB   r   rJ   hashlibr)  USED4SECr*  r+  blake2br0  r   rY   r  r  smaxrB  r   r  r4  nupbupchk_szchk_vszutime_cfloatmagicianr  r   rn  r0   r  r   r   r   fk_saltr
   r  st_inorQ   up_siter   r  )3r   is_putr  r  r   r   rndlifetimexbuxaur0  r  rw   r  open_kaopen_afblvr  r  r  nlvr  namelessparamsrp  rv   r  r9  r  r   tnamhashercopierhalgr   r   max_szr  sha_hexsha_b64ru   cli_mtr  r  fn2path2rx   vsufr   urls3                                                      r   r   zHttpCli.dump_to_filed	  sA   ..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-RX2&Bww||D"%x'B*2tzz2&

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

		''

DJJ?B" {#)rABFF4LA%EGIA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 YY%%+% 
?Dyy  Tz IIMM%( DLL0#t||3		** II..$&&2D2D2Fq2I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T[[ #((//$:O:&Bc	$J4>>$J4??uS"RSSS"HIIfVnb1BHHR9:RAR3&3F3EAr7Q;yyxx6CHH+<	77<<b)D(.66499+=+=)%GWg GGIGGDGGGGDGGW%

7#DIINN113<<I
 99<<D'7GT2EE))+((R!!,/KK$f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" {#)rABFF4LA%EGIA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99		!!C  ==f4				C gwsBBW	D	$''**.	$		2GGI$		2  4LaPr @so   "AD( 0AAD0 ?AAF /AF> BAG/BAG/D(AD-D0AAE?E?AF FAFF$AF;F>	AG,GAG'G'AG,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   ru  wantacceptr   rK  r	   r   r,  r4  rw  r   )fileurlfilesz8   rr  r(  Tindent	sort_keysz{}
{}
{}
{}
r  r$  acceptedz
X-OC-MTimer@  rA  r  r]  r   )r   _spdr   r   r   r   r   r  r4  r5  r  r  r  )r   r`  r  ro  rq  rr  r  rp  rw  spdr  r]  acjmsgr  s                  r   r  zHttpCli.handle_stash
  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@  rA  zappend z	 failed: zno bakflip; have itr2  zno bakflip; too manyrr   r  zbakflip truncated; {} remainsr	   z.truncz
bakflip okr(  )r   r   r   r   r   bf_logr@  writer  r   	bak_flipsrJ  bf_dirro  rp  r  r   r  r  rF  r  listdirbf_ncseekreadr  rG  r  r0   )r   r   r  r  rx   good_shabad_shar  r  r  f2r  sdirfpnremfor  s                    r   bakflipzHttpCli.bakflip
  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   nbyter<   r   r  )r   nbytesrz  spd1spd2s        r   r  zHttpCli._spd  sX    IIOOv%Ovtww'tyy		5"D$))..99r   c                 6   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|      # 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@   r   z8missing 'act', but looks like an upload so assuming thatbputloginmkdirnew_md)r  uputr  tputzipchpwlogoutrd  zinvalid action )r(   r   r   r   r   r   parserequirer,   gotr  datagenhandle_loginhandle_mkdirhandle_new_mdhandle_plain_uploadhandle_text_uploadhandle_zip_posthandle_chpwhandle_logoutr*   )r   file0r  r  s       r   r  zHttpCli.handle_post_multipart&  sy   %dhh		477DLLQ	++%%eR0C '>$$&&'>$$&&(?%%''""++E3&=AA&=**,,%<''))&=##%%(?%%''S677C  	vv}ST&&"((BJJ78 		s   D0 0	F9A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  rU  s     r   rW  z*HttpCli.handle_zip_post.<locals>.<genexpr>R  s     C1qN/BQCs   	rd  zneed zip or tar keywordr   TFfiles   zneed files listrQ  r;  )rt  r   r*   _use_dirkeyr   r   r   r   r   r   r   r   r  rA  r   ri   droptx_zip)r   rH  r5  r   r   r   r  r   s           r   r  zHttpCli.handle_zip_postP  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           	      B   	 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      \  }}|j6                  d   }|dk7  r3|d k(  rt8        nt:        }|j=                  |      }|
j=                  |      }
|j?                  |      \  }}tA        |
      }
| jB                  s>| jD                  r2|
j	                         |j6                  d!   v rd"|j6                  vrd#|
z   }
|
|d<   |j4                  |d$<   |jF                  |d%<   ||d&<   | jH                  |d'<   | j"                  |d(<   | j                   |d)<   |j6                  |d*<   | jJ                  s&|j                  d      d+k(  s|jM                  dd        |rR|jO                  |      }	 tP        jR                  jU                  |      s!tQ        jV                  ||j6                  ,       | jb                  5  | jd                  jf                  jh                  jk                  d1|| jl                  jn                        }|j                         }d d d        | jp                  jr                  r| j4                  ju                  | jp                  jv                        rty        | j4                  t{        |j4                  |            \  }}d2   ju                  |      s0d3}	| j4                  |j4                  ||||d2   f}t        d.|	|z        ||d2   t        |      d  z   |d2<   | j|                  r9| jp                  j~                  s#d2v r| jp                  j                  |d2   z   |d2<   t        j                        }| j                  |       | j                  |j                  d      d45       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# tX        $ r}| j                  d-|       tP        jR                  jU                  |      sf|jZ                  tZ        j\                  k(  rt        d.d/      |jZ                  tZ        j^                  k(  rt        dd0      t        d.ta                     Y d }~d }~w t        d.ta                     xY w# 1 sw Y   xY w)6Nr7    r  i  z	json 2bigr@  r  r   charsetr	   z =rK  r   rd  z&client disconnected while posting JSONrA  z	%d chunksr  z0POST len=%d type=%s ip=%s user=%s req=%r json=%sz#you POSTed %d bytes of invalid jsonsrchsharer  r  r   r*  z4your client is old; press CTRL-SHIFT-R and try againFTfsntlinwinemb_allwo_up_readme_wo_r  ptopprelr   userr   vcfgr~  r  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=%rr,  r-  )DrA  r   r*   r   r  r   r  r   recv_exr+   r4  loadsr  r  r  r   r   r   r   r   handle_searchhandle_sharer  rg   r   r   r   r  r&   r$   r  rD  r]   r   r   r  r   r   r  r  r   rp  r  rF  rw  rx  EACCESEEXISTrN   r   r   r  r  r  r   apsr   shrr   shr1rl   rj   r   r_  r  r5  r  r  )r   r  r  r  json_bufrr  rH  r5  zdsr  r  r   r   r  tldbvvremr  r  r   r   vp_reqvp_vfsr  s                           r   r  zHttpCli.handle_post_jsonh  s   	$,,'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yy 5=!U]B--#C>>"%DKK$	T4 

		) 44cii/D=DVyyV||VVyyVzzVwwVyyVtxx	':f'D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DII$5$5}"iillS[8Fjjo

3::g&-?
@a	+  	HFGG	H 6	XCs8}FVVWWh  	067xx~~c*xx5<</$S*MNNxx5<</$S*JKK fh// +,S&(++	 	su   U9 V	 ;%V2 !V( 4V"V( AV2 4A W  AZ9V	V"V( (V/,V2 2W	ZBY88ZZ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}i  r  r  zqj: r  r{   zqj: %r |%d|zq#: %r (%.2fs)r  )r  	tag_ordertruncr@  r,  r-  ) 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  r4  r5  r  r  )r   rr  r  rs  seenr  r   r  r   penaltyt_idler  vbodyr  r   taglistr  r  r{   orderhitrjr  s                          r   r  zHttpCli.handle_search  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           
      p   	 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       |r&d2} | j-                  d3| ||fz  d       t        d|       | ju                  d4       y#  t        dd      xY w# t        $ r t        dd      w xY wc c}w #  d}t1        j2                         }Y 5xY wc c}w #  Y YxY w# 1 sw Y   ^x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)5Nr7  r*  z0you must supply a content-length for binary POSTzx-up2k-hashr9  zx-up2k-warkz*need hash and wark headers for binary POSTrr   r	   r(  r   FTr   zup2k.handle_chunksr   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   r2  zTyour client is sending %d bytes which is too much (server expected %d bytes at most)zwriting %r %s+%d #%d+%d %sr   rs   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   rU  s     r   rW  z-HttpCli.handle_post_binary.<locals>.<genexpr>  s     &Fawqz&F   zclone z to   @ zclone {} donezup2k.fast_confirm_chunksr'  rB  zup2k.confirm_chunkszgot %d more chunks, %d leftzunconfirmed; see fileserver logzup2k.finish_uploadzx-up2k-statz>70z thank z$incorrect content-length from clientz%s; header=%d, remains=%ds   thank);rA  r   r*   r   rD  r  r  r  r   r   r   r   r   r   rD  r  r   r  r  r  r   u2scr   r   rR  r'  r  r  r   rJ  ro  rK  r  no_fpoolr   r   r@  r6   rG  r  r  rT   r   r  rB   rB  r  r  rN   r  r  r  r  r  r4  putr  r  r  )4r   postsizer  chasheswarkr   r  siblingsr{   r   r  r  r  r^  	chunksizecstartsrp  lastmodr  sprsmaxsizecstart0lockedwrittennum_leftbail1treportsc_ofschashr  sc_pofsrm  r  etcsizesc_next_ofsfinal_subchunkr   chunknor   fpoolcstartr  r  rr  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*!*))+U	>,T\\-89
yy~~**.&*5kOGV!WgZ0'k) " Af$HHUD)JA a2ugv*F&FGGw<!#HHUD)rA a2uc'l*C&CDDIuwqz'9:
f$
$x/&HHUD)`A a2ufh*N&NOO%0E%9N1A"0bBHHQ%*fk5"!MMqQ%-'2F&;U!%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F%('%: ;%ME6FF6!9%(!2!2C4KF +361dii.@.@+'GQ %'ND LL !4GUGSYY w$S!((7E7*KLLw&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

2D$A #$%%'KHa"}#6+--$" JJ4dD'6Reeg!a<OOAcO2 E5AHHQ#g,!991= ! "Q9c'lH%=!=qA!'G!7"$w;%z 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./6AHH0Ax3II1Ma. 

8i	RPQQ
  	LJKK	L /R.G$^^-FP /K	 .D HH%7&(%BCb/ /	JJ4dD'6Reeg!a<OOAcO2 E5AHHQ#g,!991= "& &s   d -d! d:,Af> 9+d? $E*f> e
Af> 1e*3e"6f> B
f( $e74Df( Bf( f( Af( /ff(  h+d!d7?ef> "e'$e**e4/f> 7ff( f% f( (f;;f> >A*h(+h5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   r  r  redirr@  T)r   	usernamesr   r  r  r   r  r   r  r  r   r  gpwcr  r  r!  r  r  )r   pwdokr   r  r  rP  s          r   r  zHttpCli.handle_chpw  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   rM  uhash   rd  zpassword cannot be blankr)  #r   -r  r  z_=1#Tr  ">continue</a>r   r  r@  )r   r  r  r   r   r  r   r  r  r*   r  rQ   r   r  r  rE   r  r!  r  r  )	r   unr  r  r  r  r   r  rP  s	            r   r  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                 0   | j                   j                          | j                  d| j                  z          | j                  j	                  d      sD| j
                  j                  | j                  j                  j                  | j                         | j                  d       | j                  j                  xs | 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   r  r   r   r   r   forget_sessionr   r  r  r  r   r  r  r!  r  r  )r   r  r  rP  s       r   r  zHttpCli.handle_logout3  s    TZZ'(zz$$T*II$$TYY^^%:%:DJJGC ii""<tyy}}t';3!11xx(rx=

4;;w'(r   c           	      N   | j                   j                  j                  |      }|su| j                   j                  j	                  |      }| j                   j
                  j                  |      }|r)| j                   j                  j                  |      xs |}|r| j                  j                  j                  rn| j                  j                  j                  j                  |      }|r=|j                  | j                        s"| j                  d| j                  dd       d}|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       | j1                  | j                  j                  j2                  |dd       d}d}d}|dk(  r| j4                  rdndD ]V  }	t7        |	|| j                  j8                  | j                  j:                  d      }
| j<                  j?                  d|
f       X | j@                  jC                  dd        nb| j4                  rdnd}	t7        |	|| j                  j8                  | j                  j:                  | j4                  |d      }
|
| j@                  d<   |dkD  |fS )NrW  rX  rr   r   zhi i  r   r(  r@  rA  rI  rN  rT  r   zinvalid password: r   zinvalid passwordsznaw dude)rM  rL  )rM  F
Set-CookierL  rM  
; HttpOnly)"r   r   r   r   r  r   r  r   r  r  r~  r   r   r   rA  r   r  
log_badpwdrR  r'  r  digestre   r  r  gpwdr   r:   r   
cookie_laxr   r   r   r  )r   r  r   hpwdznmr   r(  logpwdr  rH  r%  s              r   r  zHttpCli.get_pwd_cookieA  s   		""3'99<<$$S)DIIOO''-Eiinn((/63TYY^^''))..$$((/C377477+djjJAN%-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 )NrL  rM  r+  r*  )r   r:   r   r   r/  
idp_cookier   )r   r  rH  r%  s       r   r  zHttpCli.set_idp_cookiev  s`    }}G'IIKKII  MMII  
 *,&r   c                     | j                   j                  dd      }| j                   j                          | j                  t	        | j
                  |            S )Nr  r  )r   r  r  r  rj   r   )r   new_dirs     r   r  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        |      }|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nosubrU  z$mkdir is forbidden below this folderi  zparent folder does not existr  z	folder "/z" already existsr  r'  r  zmkdir failed:
z	X-New-Dirr   r  rB  )r   rJ  r   rg   r   r   r   r   r  r*   r^   r  ro  rp  dirnamer   r  rF  rw  rx  r  rN   rQ   r  r   r  r  )	r   r   dav	nullwriter   r   rw   r  r  s	            r   r  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                  |       | j                  sdd|vs2|j                  dd      d   j                         |j                  d   vr.d}t        d	||j                  d
   j!                  dd      z        t#        |      }|j%                  |      }t&        j(                  j+                  ||      }dD ]`  }	|j                  j                  |	      }
|
s"t-        | j.                  | j0                  j2                  j4                  d |	d|
|t7        | j                  |      | j8                  | j                  | j
                  j                  j;                  | j                  | j                        t=        j<                         d| j>                  t=        j<                         d       }|j                  d      xs d}|s|j                  d      dk7  s!|s"d|	z   dz   }|t7        |j                  |      fz  }| j/                  |d       t        d|       |st@        j(                  jC                  |      rt        dd      tE        tG        |      d      5 }d|j                  v rtI        ||j                         d d d        |jK                  |      \  }}| j0                  j2                  j4                  jM                  d|jN                  |j                  |j                  ||| j>                  tA        jP                  |      jR                  | j                  d
       djU                  | j                  |      jW                  d      }| jY                  |d       y# 1 sw Y   xY w)Nr  r  FTr<  r	   rw_edit_setzIyou can only create %s files because you don't have the delete-permissionr*  rw_editr9  r   )rc  rd  z.http.new-mdr   r   r   r  znew-md blocked by z server config: %rrU  r'  zthat file exists alreadyr  fpermsr;  {}/{}z?edit)-r   r  r  r   rJ  r   r   r   r   r   r   r   rn  r  r  r*   rA  r]   r  ro  rp  r  rZ   r   r   r  r  rj   r   r  r   r   r   r  r@  r6   ra   rD  r  r  r  r  r  r  r  )r   new_filer;  r   r   r  	sanitizedr  rw   r  xxur9  r   r  r  r   s                   r   r  zHttpCli.handle_new_md  s   ;;&&vs3IILL	99==$$TZZUDISc"xsA&q)//1=9QQ[Aa399Y#7#?#?S#IJKK)	}}S!WW\\$	*  	)B))--#CHHIINN))(*,$**i0IIJJIIMM++DJJ

CIIKGGIIK" FF;'-2t)0258LLsyy#!6 88HHQN a.(5	)8 xxr"S"<==eBi& -!syy(q#)),- C(ICIINN!!%% 				%%

 tzz95<<SAeW%)- -s   2%O88P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   rb  rc  rd  )r   rJ  rA  r   r   r   r  r  )r   r   ra  r   vliferb  s         r   rC  zHttpCli.upload_flags  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                  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      | 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      }t^        j`                  jc                  ||      }dtQ        jP                         |fz  } |r|s|rte        |||      }|| |j                  d}!d| jH                  v sd| j                  v r| jf                  s| j[                  d        nqtB        j`                  ji                  |      rR	 tk        | jZ                  ||j                         d!}"| j[                  |"|fz         ni }!t^        jl                  x}#}dx}}|rtQ        jP                         |z
  }$to        | jZ                  | j8                  j:                  j<                  d d#||tq        |	|      | jr                  | j                  | j                  j                  ju                  |	| j                        |$d| j4                  |$d       }%|%j                  d$      xs d}"|"s|%j                  d%      dk7  r2|"sd&}"|"tq        |	|      fz  }"| 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                        \  }+},}-|'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
  }$|r#to        | jZ                  | j8                  j:                  j<                  d d/||tq        |	|      | jr                  | j                  | j                  j                  ju                  |	| j                        |$|+| j4                  |$d       }%|%j                  d$      xs d}"|"s|%j                  d%      dk7  rS|"sd0}"|"tq        |	|      fz  }"| 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  }=tq        |	|;      }@| j                  j                  rS| j                  j                  t        @      z   |=z   x}A}Bd|BjK                  dJd      d   jK                  dd      d   z   }CnId| j                  j                  t        @      |=x}A}C| j                  rdKndLdM| jr                  C}B|7|9j?                  ||,d dN |-|+At        |:dO      |=      z  }7B|+|;|:CdP}D|r|,d dN D|<   |-|DdQ<   |8dR   j                  D        | j                  |4d      }E| j[                  |EdS|7       d}F|s| j                  j                  r	 dTj?                  |      }Gt        |Gd*      5 }'dUj?                  | j4                  | j                  d         }HdVj?                  |H|7j                         |      }H|'j                  |Hj                  d3             dW|j                  v rt        |'|j                         d d d        |rdYndZ}I|rSd=jc                  |8dR   D &cg c]  }&|&d   	 c}&      }7|r|7d=|z   z  }7| j                  |7j                  d3d      I[       n|r\t        |8dR         dk(  r|8dR   d   d   |8d\<   t        j                  |8dDd]      j                  d3d      }J| j                  |JdI^       n#| j                  | j                  |7Fz   d_dI`       |ry| j                   j                          y#  d"}"Y  x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}1dXj?                  |1      }FY d }1~1d }1~1ww xY wc c}&w )bNFTr   r%  bup_ckr'  r(  r)  r*  r+  r,  r/  r'  r2  r   r   r@  r   r  rz  r{  rK  r	   r,  r4  rw  r   z)discarding incoming file without filenamez-%.6f-%s)r  r  r  rA  z+user not allowed to overwrite with ?replacez$overwriting file with new upload: %rz&toctou while deleting for ?replace: %rzxbu.http.bupr   r  z'upload blocked by xbu server config: %rrU  r!  r  r  )r  r  r"  r<  zwriting to zxau.http.bupz'upload blocked by xau server config: %rz(discarded)r;  r@  z.connection lost after receiving %s of the filerr   皙?c              3   &   K   | ]	  }|d      yw)r   Nr  rU  s     r   rW  z.HttpCli.handle_plain_upload.<locals>.<genexpr>0  s     +qt+s   r  OKERRORz{} // {} bytes // {:.3f} MiB/s
)r0  rx   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@  rA  rB  z//r  r  r  r~  r  )rw  rx   rw   fn_origrp  rr  r  r   zup.{:.6f}.txtz{}:{}z	{}
{}
{}
r?  z&
failed to write the upload report: {}r*  r  rB  r|  r  )r]  r0  	return to)r   r  r  r0  r  )zr   r   rJ  r   r   r   r   r   r   rJ   rB   r   r   r  rR  r)  rS  r*  r+  rT  r0  r*   rD  r0  r  rE  r   r  r   r  r  r  r  r   rF  rC  r   r   r  r%  r   genr  r  r  r   r]   ro  rp  r  rR   r   r  rn   rK  rZ   rj   r   r  rP   rL  rM   rY   r4  rM  chk_bupchk_nuprU  dfvdflr  rG  rB  rV  rW  chk_dfrX  rY  r0   rO  r   r  r  r  rk   r  rk  rl  r   r  r  rG   r  sumroundr   r   A_FILEr  r   r]  r  r
   r^  r_  rQ   r  r   rE   r  write_uplogr@  r   r  r  ra   r   r  r  r4  r5  r  )Kr   r  nohashr;  r   r   rm  ro  rn  upload_vpathr0  	fdir_basera  rb  rc  rd  r   want_url	want_jsonr  errmsgtabspathr%  r   gensnfilep_fieldp_filep_datar  r  r8  r  	open_argsr  rl  rv   r9  r   r   rp  v1v2rx   rq  rr  ap2r  r  r  r  tdsz_totalr  r0  r   r  file_fmtofnlfnr  rv  rX  r  r   ah_urlj_urlrel_urljpartvspdr   log_fnftscjtxtsK                                                                              r   r  zHttpCli.handle_plain_upload  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 Q00HHHI !#FLb1'',,tU3#tyy{C&88) )$s ;)-syy QI DKK/93L# HH%RS XX__W5M ''399 E$J !HHQ'^4 "I#%::-D5%''D7x/B 		--&lE2		

		//djjIB" {+1rABFF4LA-  IA !U<%?$A AA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(nF XX WWsww.02rRrxR&tT499??PiPGAt"#%77<<d#;H!>?/5"Avvtyy7I7I0,GW 	(,"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 " FF;/52t 1#$$M$%|U)C(E$E 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)O[Q| diikB&'+U++"}-HHVQF077#N#qM	
 6D= C"DM'FTHAH27 1	(.B#sBDTSYY5F(Vchhrl CII-a1t{{II%%JJrAryy  $CIIdO % % $++%)B$.,,Eyy  !%!2!2VE]!BT!IID! 4R 8 > >sA Fr JJ ! 15		fUmT#RR#}}G&8II 8??Cd+ C E %crld#*i M  'c1	(f 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"   	M$Lv 	"#, '(CII F ''399 E$&JJE!Z  KK$$&  		TYY]]++2245wr{7I7I'7RfWo hh&&x0Din..2		@1 1  K?FFrJK
 >s  $D1AD #AA29KAD =A$AC+"AAA<:A	AC+BABLAC+4AD AG( !BAG0AG( AHA2AA9A6AD A<ABBAC+BAAC(C(AC+C+%ADDAD D	AGDA(AGFA AGGAGGAG
GAGGAGGAG%G AG( G(	AHG1AHHAHc                 Z   	 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>                  sdd|vs2|jA                  dd      d   jC                         |j2                  d   vr.d}t        d||j2                  d   jE                  dd      z        |rdtG        jH                  dd	d      }| jK                  |       | j                  jM                          | jO                  |jQ                  d             yd}d}	 t/        jR                  |      }|jT                  }t        |dz        }|d	k\  r?|d|fv }|s"|t        |dz        k(  xr ||kD  xr ||z
  dk  }|stG        jH                  d|t        t]        j\                         dz        d      }| jK                  dj;                  ||||z
               | jK                  |       | j                  jM                          | jO                  |jQ                  d             yt4        j6                  j_                  |      \  }}d|v r|jA                  dd      n|df\  }}dj;                  |||      }d}|
j2                  d   }|dk(  r-t        |      d	   }ta        jb                  te        |            jg                         }ti        |      jk                  d      d d  jC                         }|
jl                  d!|d d" d|d"d# d|}| jK                  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{        | jJ                  |t4        j6                  j9                  ||      |j2                         t}        | j                  j~                        \  }}} |d.k7  rt        dd/|      d0|j2                  v rt        | |j2                  d0         } |j2                  j                  d1      }!|!rt        | jJ                  | j(                  j*                  j,                  d d2|!|| j                  | j                  | j                  | j                  j                  j                  | j                  | j                        t]        j\                         d	| j$                  t]        j\                         d       }"|"j                  d3      xs d}|s|"j                  d4      d	k7  r"|sd5}| jK                  |d       t        d6|      t.        j6                  j                  |      r!t        | jJ                  ||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/        jR                  |      jT                  }%t        |%dz        }&$d d7 }$|j2                  j                  d8      }'|'rt        | jJ                  | j(                  j*                  j,                  d d9|'|| j                  | j                  | j                  | j                  j                  j                  | j                  | j                        |%#| j$                  |%d       }"|"j                  d3      xs d}|s|"j                  d4      d	k7  rC|sd:}| jK                  |d       t        | jJ                  ||j2                         t        d6|      | j(                  j*                  j,                  j                  d;|
j&                  |
j                  |
j2                  t        |      d	   || j$                  |%| j                  d
       tG        jH                  d|&#|$d<      }| jK                  |       | j                  jM                          | jO                  |jQ                  d             y#  t        dd      xY w# tV        $ r)}|jX                  tX        jZ                  k7  r Y d }~d }~ww xY w# 1 sw Y   xY w#  Y xY w# 1 sw Y   &xY w#  t        | jJ                  ||j2                          xY w)=Nr      r*  z#could not read lastmod from requestTr7  r   r  r   r  r@  r   r<  r	   r=  zGyou can only edit %s files because you don't have the delete-permissionr>  r9  )r  r   r@  g      r   F)r  r   r  z{} - {} = {}mdz{}.{:.3f}.{}r   md_histr5  rT     z/md/r(  rV  zmoving old version to zdir.txtr  r?  r|   .histchmod_dchownuidgidrr  zexpected body, got txt_eolrc  zxbu.http.txtr   r  z!save blocked by xbu server configrU  r~  rd  zxau.http.txtz!save blocked by xau server configr;  )r  r   sizer'  )OrA  r   r  r*   r   rJ  r   r   r   r   r   r   r   rm   r  rD  r0  rE  r   r  r   r  r  r   rF  r  ro  rp  r  r  r  r   rn  r  rA  r4  r5  r   r  r  r  r  r  rw  rx  ry  r   r   rR  r'  r.   r-  re   r  histpathr@  r  ra   r  r  rC   r0   rt  rS  r2   rZ   r   r  r  rn   r6   rG  rB   rB  rV  rW  rX  rY  r  )(r   cli_lastmod3r;  r   r   r  r  rw   r  r0  r  r  r  r^  srv_lastmodsrv_lastmod3rX  r  same_lastmodmdirmfiler  r  mfile2dphist_cfgvrdr  r   r   rf  r  rh  rc  r9  rx   r'  new_lastmodnew_lastmod3rd  s(                                           r   r  zHttpCli.handle_text_upload  sE	   	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sNzz#q!!$**,CIIm4LLYAa399Y#7#?#?S#IJKK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BCC		!fcii	&:;FiimmE"		%%

		

		''

DJJ?				B" {#)rABFF4LA%;A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"		%%

		

		''

DJJ?B" {#)rABFF4LA%;AA"cii0S!n$		!!LLIIII4LOGGJJ	
 ::L"O
 	

8??7+,]	ECDDT  	xx5<<' (	\5 5P	M 	M"cii0sV   %l /l/ 4?m$"A-m1 	Am9An l,/	m!8mm!$m.1m69n$n*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)r2  Fz6sending body due to If-Modified-Since cli(%s) file(%s)zsending body due to no304)r5   r   r   r   rG  )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dkyTrH  r   dkr(  r   z/wrong dirkey, want %s, got %s
  vp: %r
  ap: %rr2  )r   r   r  r   r   r  r   r   r   dk_saltr   r   )r   r   r  r   dk_lenr   r  s          r   r  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)NFrH  r   r<  r=  r(  r	   r   Tz0wrong filekey, want %s, got %s
  vp: %r
  ap: %rr2  )r   r   r   r   r  r   r  r   r   r   r]  r  r
   r^  r   r   )	r   r   r  rX  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                  rg n|j                  d   D ]  \  }}}||n|D ]  }||j                  |      }|s|d|}t        j
                  j                  |      s@t        | j                  t        |      d      ||<   d|j                  v r5| j                  ||   |j                  j                  d      xs g       ||<      ddg}	| j                   j                  rg n|j                  d   D ]  \  }}}||   r||n|D ]  }|"|j                  |j                               }|s'|d|}t        j
                  j                  |      sNt        | j                  t        |      d      |	|<   d|j                  v r5| j                  |	|   |j                  j                  d      xs g       |	|<      ||	fS )	Nr   emb_lgsr   Fexpexp_lgemb_mdsexp_md)r   	no_loguesr  r   r   rp  r  rW   r   r6   _expand	no_readmer  )
r   r   r8  lnamesloguesr{   fns1fns2rw   readmess
             r   _add_logueszHttpCli._add_logues  s    b#'99#6#6RBHHY<O 	MAtT$nd$ %BB  ',xxr*%dhhb	5Aq	BHH$ $VAYX8N8TRT UF1I	 r(#'99#6#6RBHHY<O 	MAtTay$nd$ %BHHJ/B  ',xxr*&txxrEB
BHH$!%gaj"((,,x:P:VTV!WGAJ	  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.rV  r   zself.r=  zcfg.zvf.rr   z	srv.itimez	srv.htimez%Y-%m-%d, %H:%M:%Sz'unknown placeholder in server config: [r  r  z{{z}})RE_HSAFEr   r  r   r   getattrr   r   r  rA  r   r   r  r#   strftimer   r   rA  )r   r   phs	ptn_hsafephr  s         r   r  zHttpCli._expand  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/crawlersrU  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_tail  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 serverr  rU  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| j                  v rK| j                  d   xs |}t        t        j                  j                  |            }	|	| j                  d<   n|}|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/        j0                  d| j2                        rd| j2                  vrd}|sd| j                  d<   nd}d}||   }|dj                  |j5                  d            z  }t7        | j                  |      }|r!t9        |      }t;        j<                  |      }nP|j?                  dt        j@                         |jC                         }|j?                  dt        jD                         |rd| j                  d<   n| jG                          d| jH                  v r#dj                  | jH                  d   xs d      }n>d| jH                  v r%t#        | jH                  j'                  d            }ntK        |      }|tM        |      |z   z  }| jN                  dk(  s|sB|jQ                          | jR                  r| jU                  |       | jW                  |||       yd}| jW                  |||       tY        | jT                  d||| jZ                  | j\                  j^                  | j\                  j`                  | j\                  jb                   i d
      }|jQ                          |dkD  r|dtM        ||z
        z   d z   z  }d}| je                  ||z
        }| jR                  r!| jU                  d!j                  ||             |S c c}w )"Nr  {:4} {} r   r   r  r  r  Content-DispositionLast-ModifiedrT  r   
X-Lastmod3TFaccept-encodingr9  r>   MSIE [4-6]\. SV1Content-Encoding{} r<  max-age=604869r&  r   text/plain; charset={}r@  r]  rc  r\  r0  r]   [31m[0m{},  {})3r  r   rA   r   rb   r  r  r  r   r7   ro  rp  basenamer   r  rA  r   r  r   r   r  r   r  r   matchr   r  rK   r?   r>   r@  r  SEEK_ENDtellSEEK_SETrB  r   r=   r   r   r4  r   r   rb  r`   r|   r   rA  rB  rC  r  )r   req_pathr0  r  logtaileditionsr  rX  cdisr   r  r  r  
decompressr   supported_editionsis_compressedselected_editionr  resfile_szr]  r   r  r  s                            r   r  zHttpCli.tx_res!  sh   ""2txx0)tvvx0Bgr{{3 (HW5 01tvvx%'78Bgr{{3w."*U"2;;= 
 4<<<<%1D()9)9$)?@B68D23D
 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d#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   $S$c                 l   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_|j                  }t        j@                  |j>                        r_t        jB                  |t        jD                        }	 t        jF                  |dt        jH                        }t        jJ                  |       t;        ||jL                        }||f||xs d<   | jN                  jQ                  d      r' n |s| jS                         S d| jT                  v rK| jT                  d   xs |}tW        t        j                  jY                  |            }|| jZ                  d<   n|}| j]                  t_        |            \  }}}|| jZ                  d<   |sd}| j`                  r$tc        t_        |dz              | jZ                  d<   d}| jd                  j-                  dd      jg                         j                  d      D cg c]  }|ji                          }}d |v rUd!}d }|d    \  }}d"|vrd!}n0tk        jl                  d#| jn                        rd$| jn                  vrd!}|sd"| jZ                  d%<   nd}d}||   \  }}|d&j                  |jq                  d            z  }d} |}!| jd                  j-                  d'      }"|r|s|"r|r|r
d|"vr|s	 |"jg                         jQ                  d(      s
t               |"j                  d)d*      d*   j                  d+      \  }#}$|#ji                         rt_        |#ji                               } nd} |$ji                         rt_        |$ji                               d*z   }!n|}!|!|kD  r|}!| dk  s| |!k\  r
t               	 d1}d2j                  | |!d*z
  |      | jZ                  d.<   |d3j                  | |!      z  }d}&|r)tt        jB                  }'tw        |      d4g}(ty        |      }!n`tB        }'tw        |      d4| j                  jz                  g}(| j|                   xr) | j                  j~                   xr t        d5kD  xs |d6k  }&|rd7| jZ                  d8<   n| j                          d9| j                  v r#d:j                  | j                  d9   xs d;      })ncd<| j                  v r%tc        | j                  j-                  d<            })n0d=| j                  j
                  v rt        ||      })nt        |      })d>| j                  j
                  v rd?|)v rd@})d(| jZ                  dA<   |t        |      |z   z  }| j                  dBk(  s|s5| j                  r| j9                  |       | j                  |!| z
  ||)C       y!| j                   j"                  j                  }*|r0dD}!t        |*      | j                  j                  kD  rt        dEdF      |!| z
  dGkD  rt        j                         }+| j                  dH| j                  d*   | _N        |+df|*| j                  <   |+|rdn|!| z
  | j                  | jN                  | j                  f| j                   j"                  j                  | j                  <   || j                  ||| |!||)|	      S |r| j                  |(||)       yd!}, |'|( 5 }-| j                  |!| z
  ||)C       |&rt        nt        }. |.| j8                  | |!|-| j                  | j                  j                  | j                  j                  | j                  j                   |*| j                  
      }/d d d        /dkD  r|dIt        |!|/z
        z   dJz   z  }d},| j                  |!| z
  |/z
        }0| j                  r!| j9                  dKj                  ||0             |,S # t        $ rC}t3        |dd      t4        j6                  k7  r| j9                  d|d|d       d }Y d }~Qd }~ww xY w# t        jJ                  |       w xY w#  Y hxY wc c}w #  d,j                  |"|      }%| js                  |%d-d.d/j                  |      i0       Y y!xY w# 1 sw Y   "xY w)LNr  r  r   tail<rp  r"  r<  zpartial is emptyup2k.find_job_by_apznot found in registryrx  r   zwill not pipe z; r2  g        )r   r  r  r&  r  z.cpr/r  r  r  rT  r   r  Fr  r9  r  Tr>   r  r  r  r  r  bytesrD  r	   r#  zinvalid range ({}), size={}  zContent-Rangez
bytes */{}r     zbytes {}-{}/{}z [[36m{}-{}[0m]rb    ir  r&  r   r  r@  r]  r  nohtmlrP  ru  zAccept-Rangesrc  r  i   @r*  z-too many active downloads to start a new tailr  r)  r  r  r  )Zr  r   r   r  r   r  ro  rp  r   r   rM  r  r   r  r  r   r   r  r  r  r4  r  r   r   ru  r  rx  ry  r   r  r{  r|  S_ISBLKr@  O_RDONLYlseekr  r4  r  r   r   r  r   r7   r  r   r  rA  r   r  r   r  r  r   r  r   r  r  r>   r6   r@   rG  r   no_sendfiler   rB  r=   r   r   r   rb  r  r  	tail_cmaxr*   r   r   r   r   r   r  tx_pipetx_tailr_   r`   r|   rA  rB  rC  r  )1r   r  r  r0  r  r  is_tailap_datar  rw   rl  st_datar   jobr  r  r  r  rx   fs_pathrX  fdr  r   r  r  	can_ranger  r  r  r  r  r  r  hranger   r   erruse_sendfile	open_funcri  r]  r  r  r   r   sendfunr  r  s1                                                    r   r  zHttpCli.tx_file  s9	   ""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&<<

+ZZ<<

+'2;;7B%XXb!R[[9gr{{3,3R=( ::((15	8 ;;= 
 4<<<<%1D()9)9$)?@B68D23D
 ,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d#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
i  2w*ell:HHwCQG: @
~3::67K,l.A.A'.JK   
 f	 	sd    De5 9gAg %g6g&g&>Cg+ 7Bh)5	g>8f<<gggg#+9h&)h3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}d	}t        j                         x}}	 |j3                  d      }t        j                         }|r9||z
  |k\  r1| j+                  dd       d}| j.                  j5                  |       n|rI|x}}| j.                  j5                  |       |t7        |      z  }d	}t        j                         |f||<   t        j8                  |       |||	z
  k  r|}| j.                  j;                  d       |||z
  k  r	 t        j                  |d         }|j<                  |j<                  z
  }|j0                  |j0                  k7  s|j<                  |k  s|dk  s|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	}d}n|rd
}|}|r|j?                          y y #  d}Y YxY w#  Y Ex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)Nr  r   	tail_rate	tail_tmaxtail_fdr  ztailing from byte %d: %rr2  FTi   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	   rr   zfile deleted; disconnecting)#r   r  rb  r   tail_karB  rA  r   r  r  r   rA  r   r   ro  r  rO   r  r  r  r  r   r`   r|   r^  r  r[  r  r  sendr  r4  IOErrorrx  r    )!r   ri  r0  r]  r  r8  sec_ratesec_maxsec_fdsec_kawr_slpwr_szr  r   r  r   ofs0r   rX  eofr  sentst2goneunsentt_fdt_kar  r  r  szdr  r  s!                                    r   r  zHttpCli.tx_tail  s>    WW]]f4@Q<k?[/I""##		!!iinn  

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

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

8$#,&DFFKK(#,&"" ggil3!kkBJJ6JJ"))3"{{T1"Qw% "-i!8BGGI "AFF1bkk2"#&&(C"Tz-.d%q $r 2#'!8te*-*C&*FF3K HH%>#w%OQRS%*F#$D %)F i | 	 U	CJt"	!8 HH%BC! $  	xxx' (	 	 si   .P CQ /3P" "D	Q ,DP* Q P"P'$Q *QQ 	Q4Q/*Q7 /Q44Q7 7R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  r  r  r   r   F)uncappedzreduced speedzone byte per secr  z0pipe: OK, upload has finished; yeeting remainderr(  needr   r  z:pipe: can stream %.2f MiB; requested range is %.2f to %.2fr2  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 MiBr  zuploader is too slowz,no data available yet; please retry in a bit(   rN  rt  r	   r=  g?zmoved to tier %d (%s)r  zgot 0 bytes (EOF?)z!pipe: read failed at %.2f MiB: %srr   r'  zfile became unreadableTr  )-rb  r   rB  rA  r   r   r   r   r   r  r  r  r4  r  ru  r   r  r   r  r=  all_fhsflushr   r  r*   r  rA  rO   rG  r  r  r  r   r  r   r  r|   r[  r`   rC  r  r   r  r   r  ))r   r  r  r  r  r  r  r0  r]  r  Mr  r  r?  
chunk_sizenum_needdata_endr  brokenspinstiertiersr   r  cidfhsfhr  r   slackntierwinszr  slp	base_rater   pagepofsr  rG  r  s)                                            r   r  zHttpCli.tx_pipe:  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 $		@ OA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=Xt, %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           	      r
   | 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}d| j                  v rdnd}| j                  j                   }| j                  j                  d      d   xs | j                  j                  d      d   }|rd|z   }|j                  j                  d      r=|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||      }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)        |d!|      }| j+                  t-        |             | j/                  d |d"|i#       |j#                  ||t%        |      | j                   d||      }d}| j0                  r| j                  j2                  sl|t4        v r|}nt6        D ]  }|| j8                  v s|} |rC| j+                  d$j                  |             t;        || j0                  | j                   ||      }t=        j<                         }| j>                  d| j@                  d   | _!        |d| jD                  | j                  d%|| j                   f| jF                  jH                  jJ                  | jB                  <   | jF                  jH                  jL                  }t=        j<                         df|| jB                  <    |
| j*                  | jN                  |d&|v xs | d'|v |	s|d(k(  r|nd)      }d}d}|jQ                         D ]`  }|s n\	 | jR                  jU                  |       |tW        |      z  }|dz  }|d,k\  s<d}t=        j<                         |f|| jB                  <   b | j]                  |      }| j+                  d-j                  ||             y.#  |d*tY        |      z   d+z   z  }|j[                          Y  \xY w)/Nr*  r  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  nodotr   r	   r   r   r)  zsel-zipmaxzipmaxur   	zipmaxs_v	zipmaxn_vz5total size exceeds a limit specified in server configzipmaxtrX  r<  r  r  ztranscoding to [{}]z :utfcrcpax)utf8pre_crccmpr  r  rV  r  T)/r  r  r*   r  r   r   r   	no_tarcmpr   r   r   r  r   r   r   r   r   r~  ru  r  r7   r   r  rb  r   	no_bacodeZIP_XCODE_SZIP_XCODE_Lr   r   r   r   r   r   r   r   r  r  r  r   rS  r|   r[  r  r   stopr  ) r   fmtuargr   r   r   r  r  r  cancmppackerr]  r  rZ  scandirrw   maxsmaxnr  r  r  r  r  cfmtr   r  r  bgenr{   bsentr  r  s                                    r   r  zHttpCli.tx_zip  s    MM"((#a. ""2txx0YY(((%<F$$,)ETM+DDL)*$DFCt{{*qii***ZZc"2&A$))//#*>q*A"B88<<!HHLL#

c(988<<,1D88<<,1DBB99UCUTZZgVDGAY',1A -B!GB"T(***BbyD2I$S!n,	-
  -B"T(***Bby$S!n,-  -B!GBby$S!n,-
 '"c':;d$T4I43PQyySZUD'R==!4!4{"% "BT\\)!" .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!!&#./+6BB		s   ?)T&T6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<  r   r   r8  z{}.{}unk   ~i)
rB  r  r   compiler   r  r   r  r  tx_svg)r   r  r  badr{   r5  s         r   r  zHttpCli.tx_icoX  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rasterr  r  T)r   r   r   r5   r   r   r  )r   r   smallr]  r   lms         r   rV  zHttpCli.tx_svgp  sU     HHLL%iT[[1HI	c		"

3TOR+@
Ar   c                 <   | 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                  d            d      }| j                  |j                  d      d       y)Nr  r  r  r   rO  r  rD  r  r  r!  zqrcode(r  r@  r(  zimage/svg+xmlr-  T)r   r   r   r  r   r   r  r   r  r   r   r   r  r  )r   rw  r  uparamsrH  r5  r   s          r   r  zHttpCli.tx_qrz  s
   }}G&0IIIIMMKK	
 <<**, C19<EAGqAq1ABC 3'***C3;C&'U3::g./3

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}|	s4|j                  d      r#|j                  d      rdnd}
|	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<   d| j6                  d<   |rdnd}d}d| j                  v rdj9                  | j                  d         }d}| j:                  r| j                  j<                  nd| j>                  j@                  jC                         d| j                  v tE        | jF                  d      t-        |dz        | jH                  j#                  d       xs | j                  jJ                  | j                  jL                  t-        | j                  jN                        t-        |j                   j#                  d!      xs d
      | j                  jP                  ||d"}| j                  jR                  r*d#|vr&| j                  jR                  }|d|v rd$ndz  }||d#<   d%| jT                  j                   v r| |d&<   | jW                  |       | jX                  |d'<    |jZ                  d.i |j)                  dd      }|j]                  |j)                  d            }t        |      d(k7  rt_        d)|z         | ja                  |	t        |d
         z   t        |d*         z   |       |tc        |      z  }| jd                  d+k(  s|s| jf                  r| ji                  |       y	 | jj                  jm                  |d
   |
z          |r| jj                  jm                  |       nIt        || j                  j                        D ]&  }| jj                  jm                  t+        |             ( | jj                  jm                  |d*          | jf                  r)| ji                  |dz   tc        t        |            z          y#  | ji                  |d,z          Y y-xY w)/Nz     r  r   editedit2Tmder}     r   r   )r  rv  r  rv  ))r  rV  )   <rr   )   >rr   r  r  r@  rA  r  zno-cacher&  r  rT  r  rH  z?k={}&zoll	ider   r  r   r	  md_no_br)r  r  r_  r  r   r
  r  have_empre  md_chk_rater}  arg_baser  r  r  r  r   r(  zboundary appears in r	   rc  z [31md/c[0mFr  )7r   r   r   r   r  r#  r   r  r  r   txt_maxro   rG  r   r  rA  r  r   r  r  r  rD   rA  r  r   r   r  r   r  r   r  r   r  r  rE   r   r   r
  r  empmcrr  r   r  r   r  r   r   rb  r   r   r   r   r|   r[  )r   r   r  r  r  templaterX  ts_mdrp  sz_mdleadfullfiler  r   r5  fulltxtr  r  r  r  r0  rh  boundarytargsr   rP  s                             r   tx_mdzHttpCli.tx_md  s	   #'88TZZ8~~$4;;(>{{4(($++-e488C=XXg		)))Wdiioo6 	CCv~CS^^,<= #u 5u7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),6)S$++t{{3'78H!%!1!1r))..,,.dkk) $754<(LL$$W-?ii&&DIIMM*BHHLL49:99== 
 99$e"3##B#+BE$KDGGMM) E&M!!%(!^^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&W8 8Xc                 T   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                  j                  rd
nd}| j                  d   xs dj!                  d      }| j"                  j%                  | j                  j&                        xs |}	|	| j(                  j*                  v r|}	|	}
	 |
j-                  d      \  }}	| j/                  d| j                  t1        | j(                  j2                        | j4                  rdndt7        |      t7        |      t7        |      t7        t9        | j                  j:                  |            t7        |      t7        |      ||rdt7        |      dndt7        |      t7        |	      t7        |
            }| j=                  |j?                  d             y#  d}| j                  j                  rd}Y xY w)Nz[^0-9a-zA-Z]+r   r   r  r  r)  r	   z.localr  zdave:hunter2hunter2r  r   davesvcsr|   z<b>z</b>rH  )r   accsr|   ripepr  rvpr   hportanameb_unr%  r   unpwr@  T) r   r   r   vnamer   rn  r  zmrclone_mdnsr   r  nmr~  r   r  r   r  r   r   r  r   r   r   r!  r   acctr   rF   rj   r   r  r  )r   r~  r{  rq  r   r}  rz  defpwr  r   r  r%  rP  s                r   r  zHttpCli.tx_svcs  s!   DIIOO<CYYRidS"9))C+KD%%KEDE=="tyy||DII<Q<Q))..##''08DCczcn #oC"&))"5"59kk$%2--c2\\dii//09EB	ZZ_FB xxdiinn%]]cC 22E$))++r23T"e$79R2s22T"  
" 	

4;;w'(/	Byy""s   >J J'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}}\  }}}| j
                  j                  j                  D ]B  }|sd|z   j	                  d      dz   }|||fD ]  }	||	v s|d d |	|	j                  |      <     D g }
t        j                         }| j                  xr | j                  j                   }| j                  xr% | j                  j                   xr | j                  xs d}|s|rt| 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/        |j1                  t2        j4                  d            \  }}|r"|j1                  dd      }dt7        |      d}ndx}}t9        ||z  |z  d      dz   }|d	k  rt;        ||z  |z
  d      nd}t;        ||z
  d      }|
j=                  t?        d|z        ||||||f        	 |s
i }d d d d d d}g x}!}"| j                  j                  jD                  r<| j                  jF                  }#|#dk(  s|#d	k(  r| j                  r| jI                         }"|"D ]   \  }}$}%}}}&}'t-        d
||z
        }t/        |      \  }}|r"|j1                  dd      }dt7        |      d}ndx}}t9        |%|z  d      dz   }t9        |%d      }(t;        ||$z
  d      }|&r|&d|'n|'})|r+|%r)|r't;        ||%z
  |%|z  z  d      }t?        d|%z  |z        }*ndx}}*|rtK        |      n| j                  j                  jL                  }|!j=                  |*|(||||)|||f	        | j                  jN                  r| j
                  j                  jP                  }+|D cg c]%  }d|+|jS                  d         jT                  vs$|' }}|D cg c]%  }d|+|jS                  d         jT                  vs$|' }}| jV                  j)                  dd      },|,s| jX                  j[                  d      rd},|,dv r
| j                  dk(  rd}-ndj]                  | j                        }-r$|-dz  }-dD ]  }|-dj]                  ||         z  }- |
r/|-dz  }-|
D ]   }.|-d d!j_                  d" |.D              z  }-" |-d z  }-|!r/|-d#z  }-|!D ]   }.|-d d!j_                  d$ |.D              z  }-" |-d z  }-|r|-d%z  }-|D ]
  }|-d&|z   z  }- |r|-d'z  }-|D ]
  }|-d&|z   z  }- |-ja                  d(d)      d*z   }/| jc                  |/d+,       yd}0| j                  jd                  }1d-| jV                  v rtg        |1      | jh                  d.<   n|1rd/|1}0| j                  jj                  }#|#xr( |#d0k(  xs! |#d1k(  xr | j                  dk7  xs	 |#d2k(  xr |}2| jm                  d3| t7        | jn                        | jq                         z   |||| j                  jr                  xr/ | jt                  j[                  | j                  jv                        |!|
d4   |d5   |d6   |d7   |d8   ||0| jy                         | j{                         | j                  jx                  d9kD  | j                  jz                  d9kD  t}        | d:      rt~        nd|2rt        nd| j                  j                  xr | j                  dk7  | j                  rdnd;| j                  z   | j                  z   <      }3| jc                  |3ja                  d(             yc c}w c c}}w c c}}w # t@        $ r } | jC                  d| d	       Y d } ~ d } ~ ww xY wc c}w c c}w )=Nr  r   r   r   zup2k.get_statevolstater  gMbP?r	   rK   / Tz/sz--d   z failed to list upload progress: )scanninghashqtagqmtpqdbwtr(  r  unlistcrunlistcwr  zcurl/fetchr5  r5  r  r   r   z%howdy stranger (you're not logged in)zwelcome back {}z
status:z {}({})z

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

active downloads:c              3   2   K   | ]  }t        |        y wr   r  rU  s     r   rW  z$HttpCli.tx_mounts.<locals>.<genexpr>  r  r  z
you can browse:z
  z
you can upload to:r@  rA  r  ru  r-  r   Refreshz&re=rs   r2  rr   splashr  r  r  r  r  r   r  rf  )r  qvpathr   r   r   in_shrvstater  r  r  r  r  r  r  url_sufr   rD  rG  k304visno304visr   verr  ahttps)Er|  r   r   r   r  r   r   	all_fvolsindexr   r   	no_rescan
no_up_listr   r   r  r  r  r4  r  r   r  r  rm   rA  ro  rq  rQ   rG   r[   r   rA  r   r   tdlsdl_listget_dlsrE   iiamhave_unlistc	all_nodesr  r  r   r   r   r  r  r  r  ctl_rer  r   ver_iwhor!  r   r  r  r   r  rD  rG  r   BADXFFBr   r  r   r   r   )4r   r   rE  r   r   r   r   r   r  r  r  r  get_vstget_upsvsrH  r5  r  r   rx   r   poker  fdonerm  rdrw   rdserdr  etaidler  r  r  rG  t1r  r   r   hsentusrpercallvolsrF  r   r  r  re_btnnreshow_verrP  s4                                                       r   r  zHttpCli.tx_mounts=  s2   iiSE" iiDII6
 344QcAgc"S(4
dD ))--)) 	3B8##C(3.CdD) 3#:*-cr(C		#'3		3 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 jje4(.r
4$'c#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jje, &r
,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#U!z9N9T9T'TAUDU#U!z9N9T9T'TAUDU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YY 
!GLa5DJJ#$5L27;Kt 	 xx$++&599==JTZZ%:%:499>>%J
^W+FFF**,IINNQ&YY__q("43%	25DJJ#$52J,BTXX,M3  
6 	

4;;w'(} 5
& Y  JEqIIJR VUsN   	``!`4"`C#` *%a	a	%a a`	a&aac                    | j                   d   }t        |      dkD  st        j                  |      rt	        dd      |j                  d      \  }}|dv rdnd}t        ||| j                  j                  d	d
|      }| j                  j                  d|f       d| j                  v r| j                  dd       y	| j                  d       y	)Nr  rs   r*  zillegal valuerD  )r   r   r   i0TFr*  ccr   ?h#ccs   o7
)r   r  RE_SETCKr   r*   r   r:   r   r   r   r   r   r  r  )r   r   rH  r5  r  r%  s         r   r  zHttpCli.setck  s    [[!r7Q;(//"-o..xx}1iA[q!TYY[[$q9""L"#564<<MM"g&  JJwr   c                     t         D ]Q  }|| j                  vrt        |d| j                  j                  dd      }| j
                  j                  d|f       S | j                  dd       y)Nr   TFr*  r   r  )ALL_COOKIESr   r:   r   r   r   r   r  )r   rH  rJ  s      r   r  zHttpCli.set_cfg_reset  sf     	?A$q#tyy{{D%@F&&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| j                  j                         d   }| j                   j                  |k(  sd| j                  vr| j                  j                  d      dk7  r|| j                   j                   vr| j                   j"                  j%                  | j                        rE| j                   j&                  r@| j                   j&                  j%                  | j                        rd}d| j(                  d<   |j+                  | j                   j,                        }t/        | j0                        | j3                         z   }| j5                  d| ||| j                   j6                  xr/ | j8                  j                  | j                   j:                        | j<                  rdnd| j>                  z   | j@                  z         }| j                  |j                  d      |       y)Nru  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)rU  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@  rB  Tthr	   jwerr   r   r  r  rE  r-  r/  r.  r  r   rf  )r  r  r   r  r  )!r   	vague_403r   r   r   r  r  r   r  rV  r|   r  rN  r   r   r   p_nodavua_nodavr   dav_ua1r   r  r  rQ   r   r  r!  r  r   r  r   r   r   )r   is_403r  r  ptsportqvrP  s           r   r  zHttpCli.tx_404  s9   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|,,
 9s*FF&&(+Eyy!!U* 4LL$$T*c1!2!22		**11$'':		))dii.?.?.F.Ftww.O 7H  !34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   )rL   r   hot_handlersr   r   r  mainr  )r   modsr   r   mpathmodr  r   s           r   r  zHttpCli.on40x+  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|      )NrU  z/the rescan feature is disabled in server configr  z,/r   Tzrejected scanning [z] => [z];rr   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  rk  r   r  r  r  r  )	r   r   rs  r   r   r  r   r   r   s	            r   r  zHttpCli.scanvol9  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 )Nr  cfgr*  z,only config files ('cfg') can be reloaded rnrU  z'reload' not allowed for user z/the reload feature is disabled in server configTr   r  rR  F)r   r   r*   r   r   r   	no_reloadr   r  r  r  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                   j                  }|dk(  s?|dk(  r| j                  s.|dk(  r*| j                  D cg c]  }|| j                  v s| c}rnt        dd| j                  z         t        t        | j                   j                              }| j                   j                  rdt        j                         d|}nd|}| j                  |j                  d             y	c c}w )
NrE  r   r+  rU  z'stack' not allowed for user z<pre>r;  r@  T)r   	stack_whor   r   r   r*   r   rE   r/   stack_vr   r  r  )r   r   r   r   s       r   r  zHttpCli.tx_stackc  s    YY  ;3Y499d
499GaTYYG=

JKK(499#4#45699#'99;4C   #$C

3::g&'  Hs    C4C4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)Nr  r   )r<  z..r   rd  zarg funkr	   rH  r   r@  r,  r-  T)r   r   rg   r   r*   r  gen_treer   r   r   r   r   reversedr4  r5  r  r  )r   topr  r   parentsparentr   s          r   r  zHttpCli.tx_treeu  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                   t              \  }}}| j                  |	j                   j"                  v xr d	| j$                  v }|	j                  j                  d      }|D cg c]*  }t+        j,                  |d   j.                        s&|d
   , }}|st1        |      }|D cg c]  }||k7  s	t	        |       }}|ru|rsg }t2        j4                  j                  |d      }|D ]J  }||z   }| j7                  d| j                  j8                  |d
d
      d | }|j;                  |dz   |z          L |}|r|D ]  }||k(  r		 |j                  t=        ||      | j                  dd      \  }}| j                  |j                   j>                  vrN| j                  |j                   j@                  vr,| j                  |j                   jB                  vr
tE               tG        j*                  |j                  |d             |j;                  t	        |              |st1        |      }||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 xY w)Nr   r	   r   r(  rH  Fdksr  rZ  r   r>  r;  r   )$r   r  r  r  rQ   r   r   r   r   r  r  r  r  r   r  	PERMS_rwhr  udotr   r   rn  r  r{  r|  r3   ro  rp  r   r  r   rj   ureaduwriteuhtmlr   r   )r   r  targetr  r   exclr   r   dk_szr   r   rZ  fsrootr  r  r5  d1d2r   dirskdirsfsroot_dnr  r   dvndrems                              r   r  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 ::,F4;;1FDHHLL&E %CQqT\\(B!CC#D)D#'5a19q	55VEggll62.G .r\[[DII$5$5r1a@%HR%Z"_-. D '9
 #c1tzz5% PIC

#''--7 JJcggnn< JJcggmm;'k)HHS]]478 F1I&' '-C
[	'EFHYY '-0AX#q)B7B9#&HRL'
 D
 60IAs8   >B*M= ,'OO.
O	9O	C O=9O7OO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  r  r   r  tdlir  r   r  r  r  r   	shr_ownerr  shr_admr   r   )r   r   r  enshareshrsr   r   rx   r   r  r   r  r  s                r   r  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(  rr   rV  r=  r2  )r   r  r  r  rp  r   r   z,
rU  
separatorsr@  rA  r,  r-  T)r  r4  r5  r  r  )r   r   r   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      rqg }dt6        z   }| j9                  |d       | j:                  rt	        d|      | j                   j<                  j>                  jA                  d| j.                  d      }nE| j                   j<                  j>                  jA                  d| j.                  | 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}d}d}|D ]  }|jM                  |      }|s|j                  |      xs d\  }}|j,                  d   }||k7  r]|}d}|dk(  r|dz  }| jB                  | j.                  |f}n|d
k(  r|dz  }| jB                  |f}|dk(  r|dz  }| j.                  |f}|dz  }d}|jO                  ||      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 X||| |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/<   |&|d0<   tw        jx                  |d12      }*| j9                  d3|||&t!        j                          |
z
  fz         | j{                  |*j}                  d4d5      d67       y'c c}}w c c}w #  Y xY w)8Nr  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	   r  z&will not return list of recent uploadszup2k.get_unfinished_by_usertimeoutnour   e2dr   r   r   r   r   unp_whoz$select sz, rd, fn, at from up where zip=? and un=?zip=?rr   zun=?z and at>? order by at desc  r   c              3   &   K   | ]	  }|s|  y wr   r  rU  s     r   rW  z!HttpCli.tx_ups.<locals>.<genexpr>]       #H!aA#H   r   )r  rx   rv   nfkr  fk_algi  c                     | d   S Nrv   r  r   s    r   <lambda>z HttpCli.tx_ups.<locals>.<lambda>t  
    1T7 r   Tkeyreversec                     | d   S r  r  r  s    r   r  z HttpCli.tx_ups.<locals>.<lambda>w  
    qw r   ocr  r  r>  nocnuncr  r  z%s #%d+%d %.2fsecr@  rA  r,  r-  )?r   r  r   r!   r*   r   r   rc   r   r  r   r   r  r   rD  r   r   unpostr   r   rk  r  r  r   r  r  upgetBADXFFr   r   r  r  r  r   r  r  rl  r  get_curr  r  r  r  r  rj   r   r  rQ   r  r   r  r   r]  r  r
   r^  rl   r   r  r4  r5  r  r  )+r   r  sfiltnfivfir[  shr_dbvshr_vremwretr   r   r0  r  volfk_volsr  r  r   zdsauretr!  r  qpq_cr  r  r  rG  r{   rx   r  rw   rv   r-  r  r  rX  r<  r"  vp_shrr  r5  rz  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
 
 4#G86AAHHQNyyS!n$		%%))*GUWXA		%%))-tzz477A DK9DYyyG499==1188:;G 
$

aeell(Ba7l 
 
  0	%C++c"C!++c*4fKC9%Bby:7(A''4::s3B1WKA''3B7KA**c*B11A"%++a"4 %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%/0	%d 	&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a
@
\s   A>]"A]$]))].c           
      t   | 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'u|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                  rN|D ]H  }|jG                  d#      }|r|d$   | jX                  k(  rd%nd&|d$<   |d'   d
| j&                  fvsDd&|d'<   J nR|D ]M  }|jG                  d#      }|r|d$   | jX                  k(  rd%nd&|d$<   d|d(<   |d'   d
| j&                  fvsId&|d'<   O | 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/      d01       y| jk                  d2| tm        |#      3      }$| jg                  |$ji                  d.      d45       yc c}w c c}
w #  Y xY w)6Nr'  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_whor   zAselect sz, rd, fn, ip, at, un from up where at>0 order by at descr   c              3   &   K   | ]	  }|s|  y wr   r  rU  s     r   rW  z"HttpCli.tx_rups.<locals>.<genexpr>  r  r  r   rr   r  )r  rx   r   rv   r%  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>  r7  r   z(You)z(?)r%  rv   z%s #%d %.2fsec)r  r  r  r  r  r   r@  rA  r,  r-  rups)r  r5  r  rB  )7r   no_ups_pager*   r   r  r   r!   r   r   rc   r   r   r   r   rk  rl  r  r  r  r   r&  r  r  r  r  r   r  r   r  r  rj   r   r  r  rQ   r  r   r  r   r]  r  r
   r^  ups_whenr   r   r  rA  r4  r5  r   r  r  r!  rI   )%r   r  r'  r(  r)  r[  r   r   r   r  r-  r.  r  r  r  r7  rZ  r  r{   r  rx   r  rw   r   rv   r%  r  r-  r  r  rX  r<  r5  r  ret2rz  rP  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
 
  5	C++c"C!++c*4fKC'G4::+GC#'',,&D$***DD))I&C#ASA*-++a. $&B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I$#5	n 	&5s8d?et*C 	)Bbh'BtH&&-C&&"CBXXb\ TYY&&BJJVB tH4C((H!	)$ 99 )ffUm*,T(dgg*=w5BtH$xTZZ'88#(4)  )ffUm*,T(dgg*=w5BtH BtH$xTZZ'88#(4)  1)),,40$1 iik!RS38$<<=3x5=zz$=9$,,JJt{{7I6=OJPxxTYt_x=

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


Xs   4AX(AX-X22X7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 )NrU  z'idp' not allowed for user r  zrm=r   zdelete from us where un=?rr   r  FTr   z?idpz[%s]z], [)r  rowsr  r@  r  rB  )r   r  r   idp_adm_setr*   r   r   sqlite3connectidp_dbr  commitr4  r   r  r  r  r   r  r  r   idp_accsr  r  r!  rA  r   r  r  )r   cmdrA  dbrH  r5  r?  rP  s           r   r  zHttpCli.tx_idp7  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                 l   | 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| }}d}|D ]`  }|d   sd|d<   |j                  ||d   f      j                         }|D cg c]  }t        |d          }	}dj                  |	      |d<   b | j                  j                  r| j                  j                  d d }
n%| j                   r| j                  j"                  }
nd}
| j%                  d| | j                  j&                  |
|t)        t+        j*                                     }| j-                  |j/                  d      d       yc c}w 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=  z$select vp from sf where k=? limit 99rV  ---r   z<br />r   r   r  )r  r  siter?  r  r@  r  rB  )r   r  r   r  r   r!   r*   get_shrr  fetchallr  r   r   rE   r  shr_siter   r  r!  r  rA  r   r  r  )r   r  r  r?  r   r  r  zstlzstr  rL  rP  s               r   r  zHttpCli.tx_sharesQ  s   ::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:2 	*AQ4!{{1qtg.7796:;s{3q6*;;}}S)!	* 9999%%cr*D99<<DDxx		DIIK   
 	

4;;w'
4= ' ; <s   )H'$H,<H,<H1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'  rI  7server busy, cannot create share; please retry in a bitskeyr   r   zhandle_eshare: r*  rJ  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 adminFr  r{  zdelete from sh where k = ?T<   z update sh set t1 = ? where k = ?r  up2k.wake_rescannerz?shares)r   r  r   r!   r*   r   r   r   r   r   shr_vr   rM  r  rN  r   r   r   r   nodesr  r  r   rA  r3  rD  r  r  r  r  )r   r  rT  r  r?  r%  expiryr  r  r  r  s              r   r  zHttpCli.handle_eshare  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                   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
         |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|g}|dgdz  k(  rt	        dd      	  | j2                  j4                  j6                  || j8                  g| \  }}|j:                  d    }|d!k(  r| j8                  d"k7  rn4|d#k(  r#| j8                  |j<                  j>                  v rnt	        dd$      |jA                  || j8                  | j
                  jB                   |g      \  }}}tE        |D cg c]  }|d   	 c}      }|D ]  }
|
|vst	        dd%|
       |j7                  d&      xs d'}| j2                  jF                  jI                  |      }tK        tM        jL                               }|d(   }|rtK        |      nd}|r||d)z  z   nd}d'jO                  d* tQ        d+|      D              }d,}|j/                  |||||t        |      | j8                  ||f       d-}|D ]  }
|j/                  |||
f        |jR                  jU                          | j                   jV                  jX                  j[                  d.dd/      j7                          | j                   jV                  jX                  j[                  d0      j7                          t        |      d
k(  rt]        |d         nd'}
| j
                  j^                  r8d1| j
                  j^                  | j
                  j`                  d
d  |d|
}nQd1| jb                  rd2nd3d4| jd                  | j
                  jf                  | j
                  j`                  |d|
	}| ji                  |d56       y/#  t	        dd      xY wc c}w )7Nr  r'  rI  rS  zhandle_share: rV  )r  rH  r  r	   r   r   zQyou cannot select more than one folder, or mix files and folders in one selectionr*  z.mismatching base paths in selection:
  %r
  %rz([^0-9a-zA-Z_-])zsharekey has illegal character z
yo dawg...rJ  zselect * from sh where k = ?zsharekey taken by z	sharekey z is already in user  permsr  r   Fr=  zselect at least one permissionz.you dont have all the perms you tried to grantshr_whor(  r   r   z5you dont have perms to create shares from this volumez!selected file not found on disk: r   r   r  rU  c              3   ,   K   | ]  \  }}|s	|  y wr   r  )rV  zcr  s      r   rW  z'HttpCli.handle_share.<locals>.<genexpr>	  s     @FBRR@s   
rwmdgz'insert into sh values (?,?,?,?,?,?,?,?)zinsert into sf values (?,?)r  TrV  zcreated share: r  r  r  r  rB  )5r   r  r   r!   r*   r   rW  r   r4  r5  r  r  rn  r   r  r   r   r   r  r   r   r  rM  r  rN  r   r   r   r   r  r  r  r  r  ru  r   r  rA  r   r  r  r3  rD  r  r  r  rQ   rO  r  r   r   r  r  ) r   r   r  rT  vpsfnsr  r   r  vp2rw   ry   r  r  rO  s_rds_wrs_gets_axsr   r   r  realsr  r   rfnsr   r  sexpr  prsurls                                    r   r  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JA a2s)m445 XXc]tyy{{!2bmmDIILL6QC		%'(BII)40QqTKLL==(l++kkmUVV*[[TG$--/"Q%HHr34GHH W%#g,&W%tUE51UGaK>??	P(tyy}}((TZZ@%@HC YYy!<DJJ#-3Y4::7UVVvvc4::4993G3G/G%QE1%(QAaD() 	QB~S2"OPP	Q WWT] bYY\\r"$))+5zc$iQ #cC"HnWW@c'5&9@@5Ab"b#c(DJJSIJ) 	'BKKD":&	' 			!!(E48<<>		!!"78<<>"3x1}VCF^" 99		""		ab!	D   ==f4						D 	S)q	PNOO )s   5X X X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                  j                  r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-  rN  rU  z'delete' not allowed for user z/the delete feature is disabled in server configr#  r  zunpost was deniedr	   z/files in shares can only be deleted with unpostr0  r   zup2k.handle_rmFT)r   r   r   r*   r   no_delr   r   r   r%  r   shr_srcr   r   r  r  rA  r   r   r  r  r  r   r  )r   r   r#  r   nlimr0  s         r   r  zHttpCli.handle_rm,  sq   4??yyH$s):S.11>KLL99OPPT[[(gdI.HH(6115OPP$''//OPP::,C367a1S&()7C74;;??5).Q/"tTlIINN!!%%djj$''3UF
 	  8s   9)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 )Nr  r*  need dst vpathr   F)r   r   r   r   r   r  r  r  r*   r  r   r  r   r  s     r   r  zHttpCli.handle_mvK  |    kkoof%tyy||(Dc$)),,')*C.//xx

CJJsOU;;r   c                 X   | 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                  d      | j                  | j&                  ||      }	| j)                  |	j                         d	       y)
NrU  z4the rename/move feature is disabled in server configTFoverwriting zup2k.handle_mvakeyr  rB  )r   no_mvr*   r   r   r   r   r  r   rp  r  r   rn   r  r   r  r  r  r   r   r  
r   vsrcvdstr  svnsremr  r  dabsr   s
             r   r  zHttpCli._mvW  s1   99??TUU IIMM%%dDJJeTJ	TIIMM%%dDJJtD	T==&Dxxt$T34		!!$

E4M$		2IINN!!%%dll..v6

DGGTSW
 	,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*  rq  r   F)r   r   r   r   r   r  r  r  r*   r  r   r  rr  s     r   r  zHttpCli.handle_cpl  rs  r   c                 V   | 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                  d      | j                  | j&                  ||      }	| j)                  |	j                         d	       y)
NrU  z-the copy feature is disabled in server configTFru  zup2k.handle_cprv  r  rB  )r   no_cpr*   r   r   r   r   r  r   rp  r  r   rn   r  r   r  r  r  r   r   r  rx  s
             r   r  zHttpCli._cpx  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!!%%dll..v6

DGGTSW
 	,r   c                     | j                   j                  rd}t        d|      | j                  j                  j
                  j                  d| j                  d          | j                  dd       y)	Nz:aborting an ongoing copy/move is disabled in server configrU  zup2k.handle_fs_abrtr  abortingr  rB  T)	r   
no_fs_abrtr*   r   r  r  r  r   r  r  s     r   r  zHttpCli.handle_fs_abrt  s[    99LAa. 		!!"7Y9OP
3/r   c                    i }ddg}| j                   }| j                  }| j                  j                  j                  }| j
                  j                  rB|D cg c]  }d||   j                  vs| }}|D cg c]  }d||   j                  vs| }}t        t        ||z               D cg c]	  }|||   f }}| j                  rC| j                  d}|D 	cg c]'  \  }}	|j                  |      s|t        |      d  |	f) }}}	|D 	cg c]  \  }}	|j                  dd      d   |	f }}}	t        |D 	ci c]  \  }}	|s	||	 c}	}j                               }|s| j                  r| j                  d      S t!        |      D 
cg c].  \  }}
d|dddd|dd|
j#                  d| j$                        d		0 }}}
|g | j$                  g g ||| j
                  j&                  rdn| j
                  j(                  d
}| j+                  |      S c c}w c c}w c c}w c c}	}w c c}	}w c c}	}w c c}
}w )Nr   r  r  r   r	   r   TrK  )	ro  hrefr  rx   r  r  dtr  r[  )r  r  r  r[  r  r  r  srvinf)r   r   r   r   r  r   r  r  r  ru  r   r   r  r   r  r  r  r  r   nihr  tx_ls)r   e_desesr   r   r  r   rs  r   rE  r   r  r  s                r   r  zHttpCli.tx_ls_vols  s    Bxyyyy))--))99!!#J!z9I9I'IAJDJ#J!z9I9I'IAJDJ)-c$+.>)?@AGAJ@@::**&B26K$!Q!,,r:JQs2wy\1%KDK489DAqa#Q'99t1tq!qad188:;

;;t$$  
 2 !"b$**5

 
 JJ IIMMbtyy~~	
 zz"~E KJ@ L91
sB   H0H:H"H"0H' H,:H,!H2
H8
H8
3H>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 ).Nr  r  r  r  rx   r  r   r5  z[0;7;36m{{}}{{:>{}}}[0m {{}}z{}r   c              3   >   K   | ]  }d j                  |        yw)z{}{{}}N)r  rU  s     r   rW  z HttpCli.tx_ls.<locals>.<genexpr>  s!      
 OOA&
s   )z[7mz[27mr   z[0;1mz[0;36mr  r2  r=  r	   rr   )BKr!  Gr  r#  r   r)  Tz[0;3{}m {:>5}r   z{{}}  {{:{},}}  {{}}z{:,}r  r   z[94m)r  r[  r  z# rU  </span> // <span>z // r;  ru  )r  r  neifnuggr,  z
[0mr@  rA  r-  )r   r  r   r  rA  r   r  r  rG   r   r  r  r   no_fnuggr   r4  r5  r  r  )r   r  r  r  argbiggestrF  nfmtr  ctablstr   r   rx   r{   retlrE  r   r]  rH  s                       r   r  zHttpCli.tx_ls  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                 U   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 }|rfd| j$                  v sd| j$                  v sd| j$                  v rd}n7|j                  d   r(|j                  d   j'                  | j(                        }dd| j$                  v rd}dd| j$                  v rd| j*                  d<   t        j,                  |	j.                        }d}d}d }|s|r=|s|r9| j0                  j3                         }|rt5        |d      r|j7                  |      }d| j$                  v sd|j                  v r-|r| j9                  ||      }d}n| j;                  |||	      }d}ndx}}| j$                  j=                  d      }| j                  s#| j>                  r|s|s|sd|j                  vr|d|j                  v }|rC|jA                  d      }|rn|r|rd}d|v r|jC                  dd      nd|f\  }}	 |jE                  |||f      jG                         }|r]|d    }tH        jJ                  jM                  ||      }t        j                  |      }	d!jO                  ||      jQ                  d      }d}nu| jR                  jT                  D ]\  }tH        jJ                  jM                  ||      }	 t        j                  |      }	d!jO                  ||      jQ                  d      }d} n |r| jW                  d"      S d }| jX                  r4|s2	 | jX                  j=                  ||t[        |	j\                        |      }|r| jc                  |      S |d)k(  rt#        d*      |td        v rt#        d+      | jg                  |      S | jh                  r|| jW                  d,      S | j                  s| j>                  r| jj                  r| jl                  sn|rd-D ]  }tH        jJ                  jM                  ||      }	 t        j                  |      } t        jn                  | j.                        sY| jp                  s#| js                  | j                   dz   d.d/      c S d}d}d}tu        ||      }tu        ||      }|} n) n'| j                   jC                  dd      d0   tv        v rd}|s| j                  s| j>                  r| j                  sV|sTd|j                  v rF|sD| j                   j                  | jR                  jx                  xs d1      s| j                  d      S |j{                         j!                  d2      }!|r|!s| j|                  | j~                  j=                  d3d      vrt        | j                         \  | _         | j                   }| j                  j                  j=                  | j                   | j                  dd      \  }}|j                  |      }|j                  |      \  }}t        j,                  |	j.                        }d}|j                          |!rd| j$                  v sd4| j$                  v sd5| j$                  v rdd6|j                  vrV|!sB| j                  s6d7|v rD|jC                  d7d      d   j{                         |j                  d8   v r| j                  ||      S d9| j$                  v r| j                  |      S d:| j$                  v r| j                  |      S |rs|	j                  sd;|j                  v r| jc                  |d       S | jc                  ||j                  d      d    j                        S |r| j                  sv|rd}nq| j>                  rHd<| j$                  v r:tu        | j                   | j$                  d<         d=z   }"| js                  |"d.d/      S | jh                  s| j                  d      S g }#	 | jR                  j                  s%|#j                  | jR                  j                         |j                  d?   }$|$r|$d@k(  sU|$dAk(  r| j                  dBk7  sA|$dCk(  r| jh                  s0|$dDk(  r| jh                  r| j                  s|$d'k(  r| j                  rt        |d      \  }%}&}"|&r[dE|j                  v r|j                  j                  }&|%|j                  j                  k(  rBt        |%t        d |j                  j                  |j                  j                  z
              }%n	 | j0                  j                  j                  j                  dF|j                  g      j=                         d    \  }$}'|$|j                  _T        |%|j                  _Q        t        |%t        d |j                  j                  |$z
              }%t        |%xs d       }(t        |&      })|#j                  dGjO                  |(|)             n|"r| ja                  dH|dI|"d'       dJjM                  |#      }*g }+| j                  s|r|+j                  dK       | jh                  r|+j                  dL       | j                  r|+j                  dM       | j                  r|+j                  dN       | j>                  r|+j                  dO       | j                  r|+j                  dP       | j                  r|+j                  dQ       | j                  i dg      },dR| j$                  v }-d| j$                  v }.| jR                  j                  xs | j                  j=                  dS      dTk(  }/|-s.|s,| j(                  j                  dU      rd| j$                  dR<   d}-dV}0d| j$                  v rdW}0d}/nX|.rV| jR                  j                  s$d| j
                  j                  v st#        dXdY      | j                  st#        dZd[      dx}/}-|j                  }1g g g |*| j                  |+|j                  d\}2d | j                  |+d]}3|j                  |3|g d g t[        |      | jh                  xr | j$                  j=                  d      d^k(  |j                  d_   |,t	        | jR                  j                  d`| j                   d      |*| jR                  j                  da}4| jR                  j                  r&| jR                  j                  }"|"db|"v rdcndbz  }"|"|4dS<   | jR                  j                  r&| jR                  j                  }"|"db|"v rdcndbz  }"|"|4dd<   | j0                  j                  j                  sd|4de<   | j                  s|s| j                  ||d       \  }5}6|5x|2df<   |4df<   |6x|2dg<   |3dg<   |-r| j                  |2      S t        j,                  |	j.                        s| j                  d      S dh| j$                  v sdi| j$                  v rt#        d      g x}7|4dj<   |/r|7|7|7dkx|4dl<   |3dl<    | j                  |0fi |4}8| j                  |8j                  dmdn             ydoD ]d  }9| j$                  j=                  |9      }:|:!|rr&|rdp|j                  vrdq};t#        d|;      | j                  |9|:| j                   ||g       c S  |j                  || j                  | jR                  j                   t        dr| j$                  v ds      \  }<}=}>|=D 9:ci c]  \  }9}:|9|:
 }?}9}:|=D @cg c]  }@|@d    	 }A}@|Aj                  t        |>             |rr| j                  sg}Ad}/i }B	 |1dt   duk7  r
t               tH        jJ                  jM                  |<dv      }Ct        }Dt        j                  |C      D ]|  }EDj                  |E      }F|FsFj                  d      |Fj                  d'      z   }Bj=                  |dw      \  }G}H}'|Gdz   t        |Ht        |Fj                  dx                  Ef|B|<   ~ 	 AD @ci c]  }@|@j{                         |@ }I}@| j                  rdy| j$                  vr|-sdy| j                  vrt        A      }A|1j=                  dz      }J|1j=                  d      }Kd{|1v rdxnd}LJrJ|1j=                  d      rd}Jn6| j                  dx| jR                  j                  |d d       d J }"|"x|2dz<   |3dz<   t        | j                  |1            }Mg }Ng }Ot        }P|. xr |- xr |/ xr | jp                   xr |}QAD ]  }d}R|}SQrd|z   dz   }R|R|z   }S||>v r|>|   j                  }Tn|<dz   |z   }T	 |?j=                  |      xs t        j                  T      }Ut        j                  |Uj.                        rt        j                  T      nU}Vt        j,                  Vj.                        }|reSdz  }SMrd}}WnJrIt        T      }"d~t        S      d| j                  dx| jR                  j                  |"d d       d J d}Wn;d~t        S      d}Wn+|Bv r%d~Rdt	        B|   dx   dd      d|B|   d    d}Wnd}WVj                  }Xt        j                  t        d Uj\                        t              }Yd|Yj                  |Yj
                  |Yj                  |Yj                  |Yj                  |Yj                  fz  }Z|rd}[nAd7|v r;Pj                  d|jC                  d7d      d         }[t        |[      dkD  r[d d }[nd}[KrR|sPt        S      d| j                  L| jR                  j                  TXt        rd nVj                        d K }SnJJr=|r;t        S      d| j                  dx| jR                  j                  Td d       d J }Snt        S      }SWS|X[Zt[        Uj\                        d}\|rNj                  \       Oj                  \        |r|1j=                  dp      sg }N| j                  j=                  d      dTk(  rdR| j$                  vrd| j$                  vr|.sOD ]  }\|\d   tv        v stu        | j                   j                  db      d    \d         }]| j                  j                  j=                  |]| j                  dd      \  }}|j                  |      }^| jp                  sCt        jJ                  j!                  ^      r#| js                  | j                   dz   d.d/      c S | jc                  ^      c S  |r|j                  j=                  d      xs i }_t#               }`|}a| j                  rd}bg d}cn|j                  d   \  }b}cd}dOD ]  }e|ed   }a|f}f	 |jE                  df      }ggD 9:ci c]  \  }9}:|9|:
 }h}9}:br?	 |jE                  bf      jG                         }it-        c|i      D ]  \  }j}k|ks	khj<    	 hD 9cg c]  }9`j/                  |9       }'}9hed<    ND ]  }et1               |ed<    t        _      }l| j                  rlj                  d       d|1vrZ`j/                  d       aradnd}md}ND ]8  }e	 |jE                  |med   z   f      jG                         }n|n\  |ed<   |ed   d<   : lD 9cg c]	  }9|9`v s|9 }o}9ng }o| j                  ||I      \  }5}6|5x|2df<   |4df<   |6x|2dg<   |3dg<   OsNs|6d    s|6d   s|5d    s
|5d   sd|5d<   dIv rtH        jJ                  j!                  tH        jJ                  jM                  |Id               rcg }ONz   D @ci c]  }@|@d   j{                         |@ }p}@t3        tH        jJ                  jM                  |Id         d      5 }q|qD @cg c]  }@|@jQ                          c}@D ]  }r	 rj!                  d      rrj5                  dd      d d }rrj7                  dmdn      }s|sj                  d      rsj                  dd      \  }}t|dd  }nsj                  d`d      \  }}t	 p|j{                         jQ                  d         }\	 t\d   d<    	 d d d        dovroj9                  d d       |r!|5d   sd};|;d1jM                  |      z   dz   |5d<   |-r N|2d<   O|2dj<   o|2d<   | j                  |2      S | j                  r| j$                  j=                  d<      nd r| jR                  j:                  }u|ur)uj'                  | j(                        rd};t#        d|;      |4d<   d }vIj=                  j{                               }w|wrwk7  rt=        fdOD        d       }wwrtH        jJ                  jM                  |      }xt        jJ                  j?                  |x      }X|Xd| jR                  j@                  z  k  rtC        | j`                  tE        x      d      }vj{                         j!                  d2      rnd|j                  v r`| jG                  v|j                  j=                  d      xs g       }vn/| ja                  dd       d}vn| ja                  dd       d}vvv|4d<<   ND ]  }y|ydxx   dz  cc<    NjI                  tK        d             |.rd| j$                  v r{| jR                  j                  d`| j                   |4d<   | jR                  jL                  |z   |4d<    | j                  di |4}z| j                  |zj                  dm      d       yd| j$                  v r| j$                  d   }| j0                  j3                         }|st#        d#d      djM                  d |j                         D              }g|j'                  | j                  | j
                  g|gd      \  }{}'}'g }Og }Nt        |r|dz   nd      }|{D ]  }}|}d   }~|~j                  |      st        j                  }d   t              }Yd|Yj                  |Yj
                  |Yj                  |Yj                  |Yj                  |Yj                  fz  }Z| jR                  jL                  ~z   tO        |~t        |      d  j                  db      d          |}d   |Z|}d   dĜ}\Oj                  |\        |1j=                  dū      xs | jR                  jP                  }|r*OD @cg c]  }@|@d   jC                  d7d      d0   v s@! }O}@| jR                  jL                  t        |      dƝ|4d<   ND ]6  }\|\d   }S|Sdb|Sv rdcndbdz   z  }S|S\d<   |\d   j5                  d`dɫ      dʝ|\d<   8 OD ]  }\|\d   }S|Sdb|Sv rdcndbdz   z  }S|S\d<   |\d   j5                  d`dɫ      dʝ|\d<   d| j
                  j                  v r|<d\d   }^tS        |\d   |^      |\d<   ntS        \d         |\d<   | jR                  jT                  r| jX                  sd|j                  vsd|j                  vsSdz   \d<   |\d   dz   |\d<    O|4dj<   N|4d<    | j                  di |4}8d}| j                  |8j                  dmdn      |       y|/rNOodkx|4dl<   |3dl<   g |4dj<   nNOz   |4dj<   o|4d<   |rxd| j$                  vri| |4d<   |3d<   r[|j                  j=                  d׫      r?|j                  d   }0d|0v rWj                  d7      d0   j{                         }"|0j5                  d|"      }tH        jJ                  jW                  |      r}0| j0                  j                  jX                  5  |0| j0                  j                  jZ                  vrtH        jJ                  j                  |0      \  }}t]        j^                         }t]        j`                  |      |_        |je                  |      | j0                  j                  jZ                  |0<   d d d        d}dx}x}}| jR                  jf                  D ]  }|Iv sI|   } n r剗j                  d7      d0   j{                         }[| jX                  r[| jX                  jh                  v r[| jX                  jj                  v xs4 [| jX                  jl                  v xs [| jX                  jn                  v }[| jX                  jp                  v }|[| jX                  jr                  v }rs}t=        fdلOD        d       }nd }| jt                  rdndۛd| j|                  d| jR                  jv                  t        |      z   }|4d<   |4d<   |4d<   r|j                  j=                  dd      }ty        t                    }d|d}|rd| j$                  d   z   z  }t{        j                  dm            j7                  d      }|dv rdndz  }d||4d<   |4d<   |4d<   rvt              }d}|rd| j$                  d   z   z  }t{        j                  dm            j7                  d      }|dz  }ty        |      |4d<   |4d   dz   |z   |4d<   n
x|4d<   |4d<   |j                  j=                  d      s]ddi}t%        |j                  j=                  d      xs d      }r|4d   d<   |j                  j=                  d      xs d}|dk7  rt%              d<   |j                  j=                  d      xs | jR                  j|                  }"|"dvr|"d<   	 d   d   j                  d      \  }j}k|j|d   d<   |k|d   d<   i }r@t%        |j                  j=                  d      xs d      }dd<   |4d   |d<   dd dd}nrFt%        |j                  j=                  d      xs d      }dd<   |4d   |d<   dddd	d
}nHrFt%        |j                  j=                  d      xs d      }dd<   |4d   x|d<   |d<   ddd}	 d   j                         D ]*  \  }9}:d|9d}"j5                  |"t%        |:            }, 	 t        j                  dd      }j                  d      rd'd  }|j                  d      rj!                  d      rd d' }|j!                  d      r|j                  j=                  d      ss)t%        |j                  j=                  d      xs d      }j                         D ]'  \  }}	 d      }:|:sdk(  rt[        |:      n|:<   ) d<   |j                         D 9:cg c]&  \  }9}:d|9dt	        t%        |:      dd      d( }}9}:| j                  d1d1jM                  |      d1z   }"|"j5                  dd1      | _         | j                  |0fi |4}8| j                  |8j                  dmdn             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 %0xY w# t"        $ rJ}|j^                  d#k(  r5|d d d$v r.| ja                  d%|d&|d'       | jW                  d(      cY d }~S  d }~ww xY w#  Y $?xY w#  | ja                  d>       Y  xY w#  Y zxY wc c}:}9w c c}@w #  Y xY wc c}@w #  | ja                  d|T       Y -xY w# t        $ r}}dt%        |      v rY d }~ ,	 t'        j(                  a|      }f|jE                  d|f      }gn0#  | ja                  dad|d1t+                      Y Y d }~ xY wY d }~d }~ww xY wc c}:}9w #  Y xY wc c}9w #  Y OxY wc c}9w c c}@w c c}@w #  d};|j                  |;t	        |      t	        t      fz         Y =xY w#  dti\d<   Y xY w#  Y TxY w# 1 sw Y   xY wc c}@w # 1 sw Y   xY w#  Y dxY w#  Y UxY w#  Y xY wc c}:}9w (  Nr   r   Tr  on404r  r  Fretryz.hist/up2k.z/dir.txtz	.hist/th/rU  r  e2togr  r  opdsog_uar5  r   r`  ra  r  rH  r  r<  dthumbr  r	   r   r@  rQ  r'  r  zfailed to convert [z]:
rr   z--error--
check
server
logpru  i  zupload
only)r   r   zredirecting to)r  r  r   r;  z.mdrefererr_  r`  r  r<  r=  zlsr=  nopipedocrB  z
#wow #whoard  rs   r8  r   r=  rV  re  rf  z{} free of {}z	diskfree(z): r  r  r  r  r  r   r$  adminr  r  rE  r  browserbrowser2r  z!OPDS is disabled in server configr-  zOPDS requires read permission)r  r  r  r  r  r[  r  )ls0r  r[  rz   sb_lgr   )cgv1cgvvpnodesr  r  r  have_tags_idxhave_b_ur  r  r  srv_infodthemer  r  cssno_prismr  r  r  r  r  )r  r  r  r  r@  rA  r  r  zTserver config does not allow download-as-zip/tar; only dk is specified, need dks toor[  r_  r~  r|   r  )r   r   r   r(  rZ  r  r=  zbroken symlink: DIRr  r>  z &zip=crc" rel="nofollow">zip</a>z ?zip=crc" rel="nofollow">zip</a>z.hist/)quotr  z" rel="nofollow">#z</a>r#  z%04d-%02d-%02d %02d:%02d:%02drK  rJ  r|  rI  )ro  r  r  rx   r  r  r  idxhr  r  z=select substr(w,1,16), ip, at, un from up where rd=? and fn=?)r   up_ip.up_atup_byls_q_mzrselect 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'rx  ztag read error, r  r  )r   r  r  r  nodirszz.filesz(select sz, nf from ds where rd=? limit 1rx   zthis folder is emptyzdescript.ionr  s   s   \\ns    // r  z" z<li><code>%s</code> %s</li>z<h3>descript.ion</h3><ul>
z</ul>r  r  r  docnamec              3   4   K   | ]  }|d    k(  s|  ywr  Nr  )rV  r   r  s     r   rW  z%HttpCli.tx_browser.<locals>.<genexpr>  s     A!&	S0@AA   rb  r  r  z
doc 2big: r2  z-( size of textfile exceeds serverside limit )z	doc 404: z( textfile not found )r  osdlongname
search_urlopds_osdz%application/opensearchdescription+xmlr-  r  zindexer not availablez and c              3   (   K   | ]
  }d |d  yw)zname like *r   Nr  rU  s     r   rW  z%HttpCli.tx_browser.<locals>.<genexpr>  s      Nqa"9 Ns   r   r  r  )r  r  rx   r  r  	opds_extsz	?opds&osdr  r  TZiso8601r  r  r]  dithumbz&th=jfjpeg_thumb_hrefr   jpeg_thumb_href_hiresz)application/atom+xml;profile=opds-catalogr  og_fnog_tplEXTc              3   4   K   | ]  }|d    k(  s|  ywr  r  )rV  r   r  s     r   rW  z%HttpCli.tx_browser.<locals>.<genexpr>k  s     D16e1CQDr  r  r  r  	og_is_pic	og_is_vidog_is_auog_thr   zth=z&cachez&k=rT  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_namer  r   .resw.resh
og_title_az
music.songzog:typezog:audiozog:music:musicianzog:music:albumzog:music:duration)artistalbumr  
og_title_vzvideo.otherzog:videozog:titlezog:video:durationzog:video:widthzog:video:height)r  r  r  r  
og_title_isummary_large_imageztwitter:imagezog:image:widthzog:image:height)r  r  z{{ z }}z\{\{ [^}]+ \}\}z - 
og_s_titler  z	<meta property="z" content="z">r:  )r  )r  )r   r   r   rQ   rE   r   r   r  rD  r   r  r  r  r   r  r   r  r*   r   r   r   r   r{  r|  r   r  r   r&  r  r  r   r   r  rn  r  r  ro  rp  r  r  r  r   	th_coversrV  r   rA  r  r  r   r  
ACODE2_FMTr  r   r   r   S_ISREGr   r  rj   IDX_HTMLr  r  r   r   rm   r   r   r   r  r   rt  r;  rI  r  r  r  	name_htmlr   r;   r0  r  r  r  r  r  r  r  r  rG   r   r   r|  force_jsr   r  js_lsjs_htmbnametheme
js_browsercss_browserprismr  r  r!  r  r  r  r  r  r  extendr  r   RE_MDVr  r  groupr[  r   r3   r   r  r   r  RE_HRr`  r  r-   r   fromtimestampr#   yearmonthdayhourminutesecondr   r  r]  r
   r^  r  r  ru  r  r\   mem_currN   r  rz  r)   r@  rA  r  r  r  rt  rO  ri  rW   r6   r  r  r   r  ri   r  r=   	th_no_jpgr  rK  r  rL  rM  FileSystemLoaderloaderget_template
th_coversd	thumbablefmt_pilfmt_vipsfmt_ffifmt_ffvfmt_ffar   r  rf   re   r  r  r   r   )r   r   r  noder   r   r8  r  r  rX  r   r  r  add_ogis_diris_dkfk_passicurr  
use_dirkeyuse_filekeyth_fmtnothumbr  r  r  r  rw   r  thpr  rl  r  is_mdr   r  rG  freetotalr  r  r  	srv_infotr[  r  is_lsis_opdsis_jsr  r  ls_retr  j2ar  r  r  rP  rH  r5  r  r  r  r  statsr   ls_nameshisthistdirr   hfnry   r{   r  r  add_dkadd_fkr  r  r  r  ptn_hruse_abs_urlbaser  r  linfinfmarginrx   r  r  r  itemr  r  r  tagsetr  up_qup_mmt_qfeerd_efnr  r  up_vr  r  lmtevdirr  r  r  r   blnlnr%  r  doctxtdfndocpathdxmlr  prefixr  r  allowed_extsr]  tpl2tdirtnamerR  thumbis_picis_vidis_aufileurl_baserF  th_baser  og_fn_qoghr  r  tagmaprT  hnameoghsr  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{{&:f>S'"'*11$'':E$++FE$++/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= +%z) +%{{3''^^ 2;;~..}}$((==5 B'',,w3C!!hhsm
  <<4 ..#}} JJ,5Ed  -    #G"F"FR.C r?D!G-. ""3*2.(:4==DLLMMBHH$#

--diinn.DE{{4((MMO,,U3Ee99DLL$4$4Y$CC(.tzz(:%DJ JJE"iimm//

DJJuUGB mmC0G "

3IC!\\"**5F EKKM sdkk1,$++-BHH,w#NN3215;;=-AXX zz"g..#{{7++$||G,,::RXX!5<<66<<B1B1K1KLLDMM%4;;"64::t{{5'9:TA}}R0@}NN^^{{4((	#99==		 3 34 XXi !GaDJJ#-aDNNaDNNt}}aDNN$We4OD%bhh&FFLLErvv}},"4Qrvv}}0L)MN!$(IINN$9$9$=$= 3bkk]%!ceA%'EB -/BFFM,0BFFM#&tSBFFLL24E-F#GD tyq)u% 6 6r2 >?w;Q?',,X6	==ELL >>LL!==LL ??LL"<<LL>>LL!>>LL!))B&#DKK'		""Cdll&6&6t&<&CV(:(:;M(N #DKKE$++CEIINNf&=S"EFF==S"ABB!!EE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!!##C#g, "+ E
SZ 488C'3'DJJt{{7I67 	BA"A}fEU"((2nA a.({{1aRbAA	B $&55JJ		$$$$++% $) $
  #))$!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'(K 		 '''  	  ^	#BDD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;;& 
,<8+tzz//4Q7fFB"iimm//DJJeLGBc*B..388??23F#}} JJ,5Ed  -     <<++
, ((,,u%+CeFB~~V8XXh/
d HD "Zr(T73A *++A1++#||D':CCE(+D$ 0HC",/S	0 -11qVZZ]11!6
9"<  %"W6
% 9D~~=>"

8$(*}> B"ll1tbj/@.BCLLN;>8D2f:h#7 #'6Q!v+q6G6G**2w?+11x3x=-44yC	N AJAJ1I1I.F1IV#GGLL&"89)
 C384<@aQvY__&)@E@bggll7F>,BCTJ a/01!AGGI1 C<<4"%++gw"?"DC ZZ;==-')xxa'8HB!#ABB')xxQ'7HB%#()9)9#)>#?D
B;?DL8%0 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(	) #-1YY__djj"IJ$(IIMME$9L!dhh1S1

JJw'.U   dkk!KK$ii))+ &=>> LL NAGGI NN ZZ

TWWIq$G
au"= 'A4B==0 !//$=B8				< B !%		 2 (CKM):)@)@)Ea)H Ig gD LL&-'2 66+.E$))2E2EL$&	(8(8a(@(D(TA  26uNC
O JF|t>>#V+/:+=+=c3+G"IY	J  RF|t<<#V+/:+=+=c3+G"IYtww}},$*DL9B#-d6lB#?DL#-d6l#;DL 		++ 		1!2.2XoD*+489J4Kc4QD01)R, !CLCK488*c*D>DJJt{{7I6TJB"' 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'#F|E288=HC,/DL),/DL) \ : @bAE%1C	N&)(mC
O"5!1 3F
 \ : @bAE%2C	N&)(mC
O ", 3!1!2	F \ : @bAE*?C'=@]JC(3z? "2!2F
 $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a	6bhh&{{t}}#455**RXXg.C8Cf}:'*B:;;4=='899{{t}}#455	 N! % $ " 77c>fRajD.@ HHgr%RTUV#';;/N#OO	6! l	#HH\"0! J *).	1Z9:h ! 	+s2w6"'R"< LLw7"b&(!ST 	 ,1$6, A1% =AJJqKO[=N+O'OP$B,:D+ADL/ D~K KbL s  +B` 	BBc 8Bc$1Bc Bd*=;Bd2 8BBe @'Be@;BeA;CBe EBe&JABe+[+Bf\Bh\5Bh]Bh]Bh_5Bh#`	Bh+`"Bh+cBh0dBjdBh5d)Bjd0A;Bi;f,"Bh:gBi,gBjzBjz+BjDB,BjT*Bj" XABj* \'
Bj2\2Bj2]$+Bj:`,Bc`1%BcaBcaBca%Ba;a:Bca;BbbBcbBccBc	cBcc	Bd'c>Bd"dBd'd!Bd"d"Bd'd*Bd/d2BeeBeeBe#e+Bff	BhfBhf&+BggBhg%Bg?g7Bhg?BhhBhhBhh#Bh(h5Bjh:,Bi)i&Bi;i'Bji)Bi;i,	Bi8i5Bi;i;Bj i=BjjBjjBjj"Bj'j*Bj/j2Bj7r  )r  NN)r  NNF)r  )r   aightzgo toTr  F)T)Fr   )n__name__
__module____qualname____doc__r   r   r   r   r   r!  r#  r   r%  r  r|  rB  rD  rG  r  rb  r  r  r  r|  r  r  r  r  r  r;  rI  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rs  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rC  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rV  r  rt  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r      s   AF,9
.

 *'s	9j/,\&@DG&4 =CD ;zJB"%2#& 6>@f!P[zH"'Rob6pCJ 0> $"'(qJf>AaCF D3&j:(8T50sj>@Wr*&P3j,7%NGR
,WrQf+048#J0FPKZBHWrCJ'06qf3jaF1f8D$4HT8"dLIV4.`0dwr>
<*
<()VFPcr   r   )
__future__r   r   argparser  rx  rR  r  r4  ro  r  r   r  r  sys	threadingr   r  r   operatorr   rL  	ipaddressr   environr   r   rI  r   r
   r   r   r   r   r   __version__r   authsrvr   r   r   qrkoder   r   r   starr   sutilr   r   szipr   up2kr   utilr   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   rk   rl   rm   rn   ro   httpconnrp   r   setattrr  version_inforS  r   r  r%  r  r  r  rX  rY  r  ru  r  r  rv  r[  rU  r  r  r  r  RE_MHOSTr  r  r  r  r	  r  r  r  r   rD  rC  r   objectr   r  r   r   <module>rj     s   7       	  	   
       !		zz~~n%k K J " '  ) )  %    T T T T T T T T T T T T T T T T T T T T T Tl "vy!FIu%y),)9)9F)Bu%399; 
D
Q 
~
T+ "Dt$7=>
\*+	I
 	

%&2::+,2::./
"***
+2::-.rzz#$2::<=

;	<	=BJJ'	2::m$?((*+ 
5M
DM4	  +Fitf itI	s   &L L