
    \j                       U d dl 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	m
Z
 d dlmZmZmZmZmZmZmZmZ d dlmZ d dlmZmZmZmZ ddl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( erd dl)m*Z* ed   Z+ e,ddh      Z-de.d<   dZ/de.d<   dZ0de.d<   dZ1de.d<   dZ2de.d<   dZ3de.d<   dZ4de.d <   d!Z5de.d"<   d#Z6de.d$<   dZ7de.d%<   d&Z8d'e.d(<   d)Z9de.d*<   d+Z:d'e.d,<   d-Z;d'e.d.<    e<ed/d       Z=de.d0<    e%j|                         Z?d1e.d2<    e,h d3      Z@d4e.d5<    eAed6      ZBd7e.d8<   ej                  ej                  v ZEd7e.d9<   ej                  ej                  v ZGd7e.d:<   ej
                  ej                  v ZHd7e.d;<   eBxr ej                  ej                  v ZJd7e.d<<   dud=ZK eK       ZLd7e.d><    G d? d@e      ZM e
dAB       G dC dD             ZN G dE dFeO      ZPdvdGZQdwdHZRdxdIZSdydJZTdzdKZUd{dLZVdxdMZW	 	 	 	 	 	 	 	 	 	 d|dNZXd}dOZYd~dPZZddQZ[ddRZ\	 	 	 	 	 	 	 	 ddSZ]	 	 	 	 	 	 	 	 	 	 ddTZ^	 	 	 	 	 	 	 	 	 	 ddUZ_	 	 	 	 	 	 	 	 ddVZ`	 	 	 	 	 	 ddWZaddXZbddYZcddZZddd[Zedd\Zfdd]Zg	 	 	 	 	 	 	 	 dd^Zhdd_Zidd`Zjddda	 	 	 	 	 	 	 	 	 ddbZkddcZldddZmddeZnddfZoddgZpddhZqddiZrddjZsddkZtddlZuddmZvddnZwddoZxddpZyddqZzddrZ{ddsZ|g dtZ}y)    )annotationsN)	dataclass)EACCESEEXISTENOENTENOSYSENOTSUPEPERMESTALEEXDEV)Path)TYPE_CHECKINGFinalLiteralcast   )BaseFileLock
_canonical_raise_cleanup_errors)SoftFileLockProtocolError)	host_nameprocess_start_token)STRICT_SOFT_SENTINEL_RECORD)ensure_directory_exists	write_all)Iterator)intentheldr   r   zFinal[frozenset[str]]_CLAIM_STATESz	.filelockz
Final[str]_COORDINATION_SUFFIXclaims_CLAIM_DIRECTORY_NAMEzfilelock-strict-v1_CLAIM_MAGICi   z
Final[int]_CLAIM_RECORD_LIMIT   _CLAIM_NAME_PART_COUNT    _TOKEN_HEX_LENGTHz.private-v1-_PRIVATE_RECORD_MARKER.tmp_PRIVATE_RECORD_SUFFIX!_PRIVATE_RECORD_RANDOM_HEX_LENGTHg       @zFinal[float]_PRIVATE_RECORD_GRACE
   _UNLINK_MAX_RETRIESg      ?_CLAIM_READ_GRACEgMb`?_CLAIM_READ_RETRYO_BINARY	_O_BINARYzFinal[bytes]_LEGACY_SENTINEL>   r      2   zFinal[frozenset[int]]_WINDOWS_HARD_LINK_UNSUPPORTEDlinkzFinal[bool]	_HAS_LINK_OPEN_SUPPORTS_DIR_FD_UNLINK_SUPPORTS_DIR_FD_STAT_SUPPORTS_DIR_FD_LINK_SUPPORTS_DIR_FDc                    t         sy	 t        j                         5 } t        | d      }|j	                          t        j                  |t        | d      d       d d d        y# 1 sw Y   yxY w# t        t        t        f$ r Y yw xY w)NFzprobe-sourcez
probe-link)follow_symlinksT)
r9   tempfileTemporaryDirectoryr   touchosr8   OSErrorNotImplementedError
ValueError)	directorysources     C/root/.hermes/venv/lib/python3.12/site-packages/filelock/_strict.py_probe_link_follow_symlinksrJ   <   s     ((* 	Ri)^4FLLNGGFDL95Q	R 	R  (*5 s.   A1 ?A%A1 %A.*A1 .A1 1BB_LINK_HONORS_FOLLOW_SYMLINKSc                       e Zd ZU dZdZded<   dZded<   dZded<   dZd	ed
<   dZ	ded<   dZ
ded<   ddZddZedd       ZddZd fdZd fdZddZddZedd       Z xZS ) StrictSoftFileLockz:Portable fail-closed lock based on immutable owner claims.Tbool_preserve_lock_file_supportedF_on_acquired_supported_lifetime_supportedz<a strict claim is never broken by age, only by force_break()str_lifetime_unsupported_reason_serialize_transitionsg?float_poll_backoff_capc                D   | j                   j                  x}&t        | j                        x}| j                   _        t	        |      }t	        | t
               }|t        z  }t        t        j                  |             t        | j                  |       t        | j                  |       t        | j                  || j                               x}y 	 t        t        j                  |            }| j%                  ||       	 | j'                  |||       y # t        $ r?}	 t        j                   |        # t        $ r}t#        d||       Y d }~ d }~ww xY wd }~ww xY w# t        $ r- | j                   j(                  |k(  r| j+                  ||        w xY w)Nz)strict sentinel inspection cleanup failed)_context
claim_rootr   	lock_filer   r    r"   r   rC   fspath_ensure_protocol_directory_open_or_create_sentinel
_open_mode_file_identityfstatBaseExceptioncloser   _mark_descriptor_pending_attempt_doorwaypending_lock_file_fd_discard_doorway)	selfrY   	lock_pathcoordination_directoryclaim_directorysentinel_fdsentinel_identityinspection_errorclose_errors	            rI   _acquirezStrictSoftFileLock._acquire`   sy    --222J;4>t~~4NNJ1$	!%4H3I&J!K03HH		) 45"4>>3IJ"4>>?C3DNNItO`aaKj	 .rxx/D E 	%%k3DE	!!/;@QR  	r%  ! r%&QScepqqr	  	}}11[@%%k3DE	sH   D 
E) 	E&(D>=E!>	EEE!EE!!E&)6Fc                   t        | j                  |      r| j                  ||       y t        j                  t
        dz        }t        d|      }t        ||z        }	 t        |t        |      | j                               }|||f| j$                  _        t        | j                  |      }	|	r't)        d |	D              st+        d |	D              |k7  r| j                  ||       y t        d|      }
t        ||
z        }	 t-        |||
      }||f| j$                  _        |d| j$                  _        |t        | j                  |      }	||
hj/                  d |	D              rt+        d |	D              d	| d
k7  r| j                  ||       y | j1                  ||       y # t        $ r | j                  ||       Y y t        t        f$ rV}t        | j                  |       t        |t              r*|j                   t"        k(  r| j                  ||       Y d }~y  d }~ww xY w# t        t        f$ r}t        | j                  |        d }~ww xY w)N   r   c              3  :   K   | ]  }|j                   d k(    yw)r   N)state.0claims     rI   	<genexpr>z6StrictSoftFileLock._attempt_doorway.<locals>.<genexpr>   s     =U5;;&(=s   c              3  4   K   | ]  }|j                     y wNnamert   s     rI   rw   z6StrictSoftFileLock._attempt_doorway.<locals>.<genexpr>   s     2%5::2   r    c              3  4   K   | ]  }|j                     y wry   rz   rt   s     rI   rw   z6StrictSoftFileLock._attempt_doorway.<locals>.<genexpr>   s     1Q%**1Qr|   c              3  F   K   | ]  }t        |j                          y wry   )_claim_token_keyr{   rt   s     rI   rw   z6StrictSoftFileLock._attempt_doorway.<locals>.<genexpr>   s     DE#EJJ/Ds   !zv1-.claim)_read_existing_claimsrZ   rf   secrets	token_hexr(   _claim_namerR   _publish_record_claim_recordr^   _PrivateRecordReclaimedErrorrE   rD    _raise_if_hard_links_unsupported
isinstanceerrnor   rX   owner_claim_pathsanymin_link_no_replaceissubset_mark_descriptor_owned)rg   rj   rk   rl   tokenintent_nameintent_pathpublication_cleanup_errorerrorr!   	held_name	held_pathlink_cleanup_errors                rI   rd   z#StrictSoftFileLock._attempt_doorway}   s:    A!!+/@A!!"3q"89!(E2/K78
	(7]SXEY[_[j[j[l(m% %0+++6.'&t~~G=f==2622kA!!+/@A.	)34		!1/;PY!Z ,5k*B').0DMM+$$&t~~Gi(111Q&1QQDVDD#eWTZH[[!!+/@A 	##K1BC_ , 	!!+/@A#W- 	,T^^UC%)ekkV.C%%k3DE	. $W- 	,T^^UC	s=   !$F, H0 ,H-	H-AH('H((H-0I?IIc                B    t        | j                  | j                        S )z(Published claims that block acquisition.)r   rZ   _claim_directoryrg   s    rI   r!   zStrictSoftFileLock.claims   s     %T^^T5J5JKK    c                z    t        |       t        | j                  |       t        | j                  |      x}|y)zYRemove one named claim, allowing overlap if its owner still holds the protected resource.N)_validate_force_break_name_require_exact_namer   _unlink_in_directory)rg   
claim_namecleanup_errors      rI   force_breakzStrictSoftFileLock.force_break   s>    ":.D11:>1$2G2GTTMa br   c                >    | j                   ry t        | 	  |       y ry   )	is_lockedsuper_rollback_failed_acquire)rg   acquisition_error	__class__s     rI   r   z+StrictSoftFileLock._rollback_failed_acquire   s    
 >>():;r   c                ^    | j                   sd | j                  _        t        |   |       y ry   )r   rX   rY   r   _reconcile_failed_acquire)rg   	canonicalr   s     rI   r   z,StrictSoftFileLock._reconcile_failed_acquire   s#    ~~'+DMM$))4r   c                   t        d| j                  j                        }d | j                  _        t	        | j                  j
                        \  }}t        |      | j                  _        |rt        d|       | j                          	 | j                  |d       |rt        d|       y y # t        $ r}|j                  |       Y d }~/d }~ww xY w)Nintzstrict claim release failedFdefault_suppresseszstrict release cleanup failed)r   rX   lock_file_fdrY   _unlink_owner_pathsr   tuple_raise_recorded_errors_mark_descriptor_released_close_released_fdra   append)rg   fd	remainingerrorsrn   s        rI   _releasezStrictSoftFileLock._release   s    %334#' /0O0OP	6*/	*:'"#@&I&&(	'##B5#A "#BFK   	'MM+&&	's   B0 0	C9CCc                p   t        | j                  j                        \  }}t        |      | j                  _        |r| j	                  ||       t        d|       | j                          	 | j                  |d       |rt        d|       y y # t        $ r}|j                  |       Y d }~/d }~ww xY w)Nz#strict doorway claim cleanup failedFr   zstrict doorway cleanup failed)
r   rX   r   r   r   r   r   r   ra   r   )rg   r   identityr   r   rn   s         rI   rf   z#StrictSoftFileLock._discard_doorway   s    /0O0OP	6*/	*:'''H5"#H&Q&&(	'##B5#A "#BFK   	'MM+&&	's   .B 	B5B00B5c                    | j                   j                  r,t        | j                   j                  d         j                  S t        t	        | j
                         t               t        z  S )Nr   )rX   r   r   parentr   rZ   r    r"   r   s    rI   r   z#StrictSoftFileLock._claim_directory   sU    ==**77:;BBBz$..123G2HIJMbbbr   )returnNone)rj   r   rk   r   rl   tuple[int, int]r   r   )r   tuple[StrictSoftFileClaim, ...])r   rR   r   r   )r   ra   r   r   )r   rR   r   r   )r   r   r   r   r   r   )r   r   )__name__
__module____qualname____doc__rO   __annotations__rP   rQ   rS   rT   rV   ro   rd   propertyr!   r   r   r   r   rf   r   __classcell__)r   s   @rI   rM   rM   Q   s    D*.!4.#(D( !&%(f #f#'D'  $u#:9Dv L L <5LL c cr   rM   T)frozenc                  R    e Zd ZU dZded<   ded<   ded<   ded<   ded	<   d
Zded<   y
)StrictSoftFileClaimz"One parsed strict soft-lock claim.rR   r{   StrictSoftFileClaimStaters   r   r   pidhostnameN
int | Nonestart)r   r   r   r   r   r   r}   r   rI   r   r      s+    ,
I##J	HM E:r   r   c                      e Zd Zy)r   N)r   r   r   r}   r   rI   r   r     s    r   r   c                   	 t        |      S # t        $ r Y nt        $ r Y y w xY wt        |t	        j                                	 t        t        j                  |      t        |      }|X|# t        $ r Y y t        t        f$ r:}t        | |       t        |t              r|j                  t        k7  r Y d }~nd }~ww xY w	 t        |      S # t        $ r Y y w xY wry   )_open_sentinelFileNotFoundErrorrD   !_reclaim_sentinel_private_recordstimer   rC   r[   r4   r   rE   r   r   r   r   )rZ   pathmoder   r   s        rI   r]   r]   	  s    d##   &dDIIK8
,$3BIIdOEUW[$\! %0++ ( ) (E:%)U[[F-B .Cd## s@   
 	###$A- -	C 8C 0B;;C 
C 	CCc                |    t        | t        t                    \  }}|t        k(  r|S t        j                  |       y ry   )_open_recordlenr4   rC   rb   )r   r   records      rI   r   r   #  s4    dC(8$9:JB!!	HHRLr   c           	        	 t        j                  |      5 }t        ||      }d d d        g }D ]I  }t        |      x}t        | |d      t        | ||      x}	-|j                  t        | |||	             K t        |      S # 1 sw Y   dxY w# t        $ r9}d|j                  xs t        |      j                   }t        | d |      |d }~ww xY w)Nzcannot list claim directory: z&unknown claim name or protocol version)rC   scandir_public_claim_namesrD   strerrortyper   r   _parse_claim_name_read_claim_recordr   _parse_claimr   )
rZ   rG   entriesnamesr   reasonr!   r{   
name_partsr   s
             rI   _read_claimsr   +  s    LZZ	" 	<g'	7;E	< )+F M+D11J:+It=eff(ItDDFQMM,y$
FKL	M
 =	< 	< L01W4;CWCW0XY'	4@eKLs-   B BB BB 	C4CCc                z   t        j                         t        z   }d}	 |rt        j                  t               t        | ||      \  }}||S t        j                         |k\  rU|j                  t        k(  ry d|j                  xs" t        |      xs t        |      j                   }t        | ||      |d})NFTcannot read claim: )r   	monotonicr0   sleepr1   _attempt_claim_readr   r   r   rR   r   r   r   )rZ   rG   r{   deadlinedelayingr   pendingr   s           rI   r   r   <  s     ~~"33HH
JJ()-iDI?M>>x'}}& *7+;+;+es7|+etT[}OeOe*fgF+ItVD'Q r   c                H   	 t        ||z  t              d fS # t        $ r Y yt        $ r}d |fcY d }~S d }~wt        $ rb}|j
                  t        k(  r	d |fcY d }~S d|j                  xs" t        |      xs t        |      j                   }t        | ||      |d }~ww xY w)N)NNr   )_read_recordr$   r   PermissionErrorrD   r   r   r   rR   r   r   r   )rZ   rG   r{   r   r   s        rI   r   r   V  s    
LI,.ABDHH  U{ L;;& ;&u~~'[U'[tE{G[G[&\]'	4@eK	Ls4    	B!B!3B!B!BB!ABB!c                b   g }t        j                          }|D ]  }|j                  j                  d      s|j                  |j                         :t	        |j                        x}Rt        |      	 _t        t        j                  |       d f|j                  |        t        |      S )N.)
r   r{   
startswithr   _private_public_namer   _reclaim_private_recordrC   r[   sorted)rG   r   r   nowentrypublic_names         rI   r   r   g  s    E
))+C Szz$$S)LL$1%**==kJO`P
P $RYYy%94$@%**cRS %=r   c                <    |j                         syt        | |      S )Nr}   )existsr   )rZ   rG   s     rI   r   r   t  s    	9--r   c                   	 |j                  d      j                  d      \  }}}}}}	t        |      }
|rt        |      nd }t        j	                  |      j                  d      }t        |	 |t        k(  ||d   k(  d|
cxk  xr dk  nc t        |
      |k(  |d u xs |dk\  xr t        |      |k(  |j                         j                         |k(  xr% |j                         xr t        d |D               f      st        | |d      t        ||d   ||
||	      S # t
        t        f$ r}t        | |d      |d }~ww xY w)
Nascii
zutf-8zmalformed claim recordr   ir   c              3  <   K   | ]  }|j                           y wry   )isspaceru   	characters     rI   rw   z_parse_claim.<locals>.<genexpr>  s     BII%%'Bs   )r{   rs   r   r   r   r   )decodesplitr   bytesfromhexUnicodeDecodeErrorrF   r   allr#   rR   encodehexisprintabler   r   )rZ   r{   r   r   magicr   pid_texthostname_hex
start_texttrailingr   r   r   r   s                 rI   r   r   z  sY   ^EK]]SZE[EaEabfEgBuhj((m#-J4==.55g> A	SICHB%1*AUz)A</ 	C  "	CBBBB
 
 (	49QRRD
1UPS^fnstt 
+ ^'	49QRX]]^s   A%D! !E0D>>Ec                (   | j                  d      sy | j                  d      j                  d      }t        |      t        k7  s|d   t
        vs|d   dk7  ry |d   }t        |      t        k7  st        d |D              ry t        d|d         |fS )	Nr   -r   r   v1rq   c              3  $   K   | ]  }|d v 
 yw0123456789abcdefNr}   r  s     rI   rw   z$_parse_claim_name.<locals>.<genexpr>  s     -iV_i?Q.Q-i   r   )	endswithremovesuffixr  r   r&   r   r(   r   r   )r{   partsr   s      rI   r   r     s    =="h'--c2E
5z++uQx}/LPUVWPX\`P`!HE
5z&&#-ich-i*i*E!H5u<<r   c                    |  d| dS )Nz-v1-r   r}   )rs   r   s     rI   r   r     s    WDv&&r   c                B    | j                  d      j                  d      S )Nzheld-zintent-)removeprefixrz   s    rI   r   r     s    W%229==r   c           
        t               j                         j                         }t        t	        j
                               }|dn
t        |      }t         d|  dt	        j
                          d| d| d
j                  d      S )N r  r  )r   r  r  r   rC   getpidrR   r#   )r   r  r   r  s       rI   r   r     sr    ;%%'++-L		,E}#e*J^2eWBryy{m2l^2j\QST[[\cddr   c                   t         j                  j                  |       \  }}|xs t         j                  }t	        |      }t
        rt        |      nd }||f}	 t        |||f||       |	 t        j                  |       y y # t        $ rA}	 |t        j                  |        # t        $ r}	t        d||	       Y d }	~	 d }	~	ww xY wd }~ww xY w# t        $ r}	|	cY d }	~	S d }	~	ww xY w)Nz+strict publication directory cleanup failed)rC   r   r  curdir_private_record_namer:   _open_directory_publish_record_in_directoryra   rb   r   )
public_pathr   r   rG   r   private_namedirectory_fddirectory_refpublication_errorrn   s
             rI   r   r     s    
  WW]];7I{&RYYI'4L1F?9-DL|+M$]\;4OQUW]^ 	HH\"   	q'& 	  	q!"OQbdopp	q	  		sZ   B -C 	CB&%C	&	C/C<C	CC		C	C&C!C&!C&c                   t         j                  t         j                  z  t         j                  z  t        z  }t        t         dd       x}||z  }t        | |d   ||      }d }	 t        t        j                  |            }t        ||       t        | ||       t        | |d   ||      \  }	}
|	|
t        |	|
       y y # t        $ r,}t        | |d   ||      \  }	}
|	|
t        d||	|
        d }~ww xY w)N
O_NOFOLLOWr   z(strict record publication cleanup failed)rC   O_RDWRO_CREATO_EXCLr3   getattr_open_relativer_   r`   r   _link_private_recordra    _close_and_unlink_private_recordr   !_raise_record_finalization_errors)r0  r   r   r   flags
o_nofollow
private_fdprivate_identityr1  rn   unlink_errors              rI   r,  r,    s!    II

"RYY.:Eb,55
BuQxEJ/3)"((:*>?*f%]E3CD  !Aa	!K ,":)+|D #;+  $D!H	%
!\ "l&>!:!	 	s   &7C 	C8'C33C8c                    d }	 t        j                  |       d }	 |t        | |       nt	        | ||       ||fS # t        $ r}|}Y d }~3d }~ww xY w# t
        $ r Y ||fS t        $ r}|}Y d }~||fS d }~ww xY wry   )rC   rb   ra   _unlink_relative_unlink_relative_if_identityr   )r0  r.  r>  r?  rn   r   r@  s          rI   r:  r:    s     )-K
 *.L#]L9(FVW
 $$     $$  $$s2   < A 	AAA	A9"A9*A44A9c                    	 t        | g|  t        | |d         |k(  ry d}t        |      # t        $ r#}t        | |d          d}t        |      |d }~ww xY w)Nr   z(private publication record was reclaimedr   z'private publication record was replaced)_link_relativer   _relative_identityr   )r0  r   r?  r   msgmsg_0s         rI   r9  r9    su    
;}-u- -q26FF5E
&u
--  ;mU1X6B8*3/U:	;s   . 	AAAc                    | |fD cg c]  }||	 }}t        |      dkD  rt        d|d   g|dd    |d   c c}w )Nr   z!strict record finalization failedr   r   r   )rn   r@  r   r   s       rI   r;  r;    sW     #.|!<R@QeRFR
6{QA6!9ZvVWVXzZ
)O Ss   ;;c                R    d|  t          t        j                  t        dz         dS )Nr   rq   r*   )r)   r   r   r,   )r   s    rI   r*  r*  (  s/    {m23G4E4EFgklFl4m3nnrssr   c                   | j                  d      r| j                  t              sy | dt        t                j	                  t
              \  }}}|t
        k7  s$t        |      t        k7  st        d |D              ry |S )Nr   r   c              3  $   K   | ]  }|d v 
 ywr  r}   r  s     rI   rw   z'_private_public_name.<locals>.<genexpr>3  s     Oyy 22Or  )r   r  r+   r   
rpartitionr)   r,   r   )r.  r   marker
random_hexs       rI   r   r   ,  sv    ""3'|/D/DE[/\&21<R8S7S&T&_&_`v&w#K((z???OJOOr   c                2   t        j                  | j                        d f}t        j                  | j                        5 }|D ]<  }t	        |j
                        | j
                  k(  s&t        ||j
                  |       > 	 d d d        y # 1 sw Y   y xY wry   )rC   r[   r   r   r   r{   r   )r   r   r0  r   r   s        rI   r   r   9  sz    IIdkk*D0M	DKK	  HG 	HE#EJJ/499<'uzz3G	HH H Hs   (B*BBc                   | \  }}	 |t         rt        j                  ||d      nt        ||      j	                         }t        j                  |j                        st        ||       d}t        |      |j                  dk(  r||j                  z
  t        k  ry 	 t        | |       y # t
        $ r Y y w xY w# t
        $ r Y y t        $ r#}|j                  t        t        hvr Y d }~y d }~ww xY w)NFdir_fdr?   z  is not a regular private recordr   )r<   rC   statr   lstatr   S_ISREGst_moderD   st_nlinkst_mtimer-   _unlink_private_record_oncer   r   r
   )r0  r.  r   rG   r/  private_statrG  r   s           rI   r   r   A  s    +I| ',A GGLuMi.446 	 <<,,-i.//OPcl!cL,A,A&ADY&Y#M<@     ;;vuo- .s/   :B. !B= .	B:9B:=	C3C3C..C3c                    | \  }}|t         rt        j                  ||       y t        ||      j                          y NrT  )r;   rC   unlinkr   )r0  r.  rG   r/  s       rI   r[  r[  Y  s6    +I|$;
		,|4Y%,,.r   c                    | \  }}	 |t         rt        j                  ||d      }nt        ||      j	                         }t        |      S # t
        $ r Y y w xY w)NFrS  )r<   rC   rU  r   rV  r   r_   )r0  r{   rG   r/  	path_stats        rI   rF  rF  a  sb    +I|#(=\5QIY-335I )$$  s   ;A 	AAc                    t        | |      |k(  r/t        j                  t              5  t	        | |       d d d        y y # 1 sw Y   y xY wry   )rF  
contextlibsuppressr   rB  )r0  r{   r   s      rI   rC  rC  m  sK    
 -.(:  !23 	2]D1	2 	2 ;	2 	2s   A  A	c                    | \  }}|t        j                  ||||      S t        j                  t        ||      ||      S r^  )rC   openr   )r0  r{   r<  r   rG   r/  s         rI   r8  r8  w  sK    +I| # 	eT,7 WWT)T*E48r   c                ~    | \  }}|t         rt        ||||       y t        t        ||      t        ||             y )N
src_dir_fd
dst_dir_fd)r=   _link_no_followr   )r0  source_namedestination_namerG   r/  s        rI   rE  rE    sA    +I|$9%5,[ghDK0$yBR2STr   ri  c                   t         sd}t        |      t        rt        j                  | |||d       y t        j                  | |||       y )Nz'os.link is unavailable on this platformF)rj  rk  r?   ri  )r9   rE   rK   rC   r8   )rH   destinationrj  rk  rG  s        rI   rl  rl    sE      8!#&& $

zchi

zRr   c                    | \  }}|t         rt        j                  ||       y t        j                  dk(  rt        t        |      |       y t        ||      j                          y )Nr_  win32)r;   rC   r`  sysplatformr   r   )r0  r{   rG   r/  s       rI   rB  rB    sP    +I|$;
		$|,		 T)_d3Y$$&r   c                p   t         r;t        t        |             }	 t        ||||       	 t        j                  |       y t        | |z  | |z         y # t        $ r?}	 t        j                  |        # t        $ r}t        d||       Y d }~ d }~ww xY wd }~ww xY w# t        $ r}|cY d }~S d }~ww xY w)Nri  z$strict link directory cleanup failed)r=   r+  rR   rl  ra   rC   rb   r   )rG   rm  rn  r/  
link_errorrn   s         rI   r   r     s    &s9~6	K)9l_kl	HH\" I+Y9I-IJ  	g&  ! g%&LjZeffg	  		sX   A B  	BA54B5	B>BBBBB 	B5)B0*B50B5c                    t         j                  j                  |       \  }}t        t	        |xs t         j
                        |      S ry   )rC   r   r  r   r   r)  )r   rG   r{   s      rI   _unlink_owner_pathrx    s3    ggmmD)OItY%;")) <dCCr   c                    | D cg c]  }|t        |      f }}|D cg c]  \  }\  }}|r| c}}}|D cg c]  \  }\  }}|| c}}fS c c}w c c}}}w c c}}w ry   )_unlink_owner_path_result)pathsr   resultsremoved_r   s         rI   r   r     sw    CHI4/56IGI+2BB'T<GQ'DB#*E!Zae.?E   JB Es   AAAA
Ac                j    	 t        |       }d|fS # t        $ r Y yt        $ r}d|fcY d }~S d }~ww xY w)N)TNFT)rx  r   ra   )r   r   r   s      rI   rz  rz    sE    *40
 	   e|s    	22-22c                N    t        |      dkD  rt        | |d   g|dd    |d   )Nr   r   rJ  )messager   s     rI   r   r     s/    
6{Qgvay>6!":>
)Or   c                   t         rCt        t        |             }	 t        j                  ||       	 t        j                  |       y t        j                  dk7  rt        | |z        j	                          y d}t        t              D ]T  }t        | |z        x} y |j                  t        t         hvs|t        dz
  k(  r|t#        j$                  |       |dz  }V y # t
        $ r?}	 t        j                  |        # t
        $ r}t        d||       Y d }~ d }~ww xY wd }~ww xY w# t
        $ r}|cY d }~S d }~ww xY w)Nr_  z&strict unlink directory cleanup failedrr  gMbP?r   rq   )r;   r+  rR   rC   r`  ra   rb   r   rs  rt  r   ranger/   _unlink_errorr   r   r
   r   r   )rG   r{   r/  r@  rn   retry_delayattemptr   s           rI   r   r     s9   &s9~6	IId<0	HH\" 
||wY%%'K,- "9t#344E=;;vuo-<ORS<S1SK

;q -  	k&  ! k%&NP\^ijjk	  		sX   C# D. #	D+-DD&	D#DD&D##D&&D+.	E7D>8E>Ec                V    	 | j                          y # t        $ r}|cY d }~S d }~ww xY wry   )r`  rD   )r   r   s     rI   r  r    s,       s    	(#((c           	         t        j                  | t         j                  t        t         dd      z  t        t         dd      z        S )NO_DIRECTORYr   r3  )rC   rg  O_RDONLYr7  )rG   s    rI   r+  r+    s:    77
gb-33gb,PQ6RR r   c                N    t        | |      \  }}t        j                  |       |S ry   )r   rC   rb   )r   limitr   r   s       rI   r   r     s"    dE*JBHHRLMr   c                   | j                         }t        j                  |j                        s|  d}t	        |      t
        j                  t        z  t        t
        dd      z  t        t
        dd      z  }t        j                  | |      }	 t        || ||      }||fS # t        $ r?}	 t        j                  |        # t        $ r}t        d||       Y d }~ d }~ww xY wd }~ww xY w)N is not a regular filer3  r   
O_NONBLOCKz!strict record read cleanup failed)rV  rU  rW  rX  rD   rC   r  r3   r7  rg  _read_opened_recordra   rb   r   )	r   r  rb  rG  r<  r   r   
read_errorrn   s	            rI   r   r   
  s    

I<<	))*,-clKK)#gb,&BBWRQ]_`EaaE	u	B$Ry%@ v:  	`HHRL 	  	`!"EzS^__	`s<   B$ $	C,.CC'	C$CC'C$$C''C,c                P   t        j                  |       }t        j                  |j                        s| d}t        |      t        |      t        |      k7  r| d}t        |      t        j                  | |dz         }t        |      |kD  r| d| d}t        |      |S )Nr  z changed while openingr   z	 exceeds z bytes)	rC   r`   rU  rW  rX  rD   r_   readr   )r   r   rb  r  opened_statrG  r   s          rI   r  r    s    ((2,K<<++,,-clk"nY&??,-clWWR#F
6{Uiwf-clMr   c                6   	 |j                          y # t        $ r| 	 |j                         j                  }n"# t        $ r}t        | d d|       |d }~ww xY wt        j                  |      rt        j                  |      sY y t        | d | d      d w xY w)Nzcannot inspect z is not a real directory)	mkdirFileExistsErrorrV  rX  rD   r   rU  S_ISDIRS_ISLNK)rZ   rG   r   r   s       rI   r\   r\   +  s    	k k	g??$,,D 	g+Ityk=Z[aff	g<<dll4&8'	4I;F^9_`fjjks/    	B8B	AAA-BBc                       xs5  j                  d      xs"  t        j                  t        j                  hv }|st	         fddD              rd}t        |      y )Nr   c              3  &   K   | ]  }|v  
 y wry   r}   )ru   	separatorr{   s     rI   rw   z-_validate_force_break_name.<locals>.<genexpr>:  s     Wi	T 1Ws   )/\ z,claim_name must be one public claim basename)r   rC   r)  pardirr   rF   )r{   invalid_componentrG  s   `  rI   r   r   8  sY     ZDOOC$8ZDRYYPRPYPYDZ<ZCWCVWW<o Xr   c                    t        j                  |       5 }t        fd|D              s(t        t        t        j
                  t                    	 d d d        y # 1 sw Y   y xY w)Nc              3  <   K   | ]  }|j                   k(    y wry   rz   )ru   r   r{   s     rI   rw   z&_require_exact_name.<locals>.<genexpr>A  s     ;%5::%;s   )rC   r   r   r   r   r   )rG   r{   r   s    ` rI   r   r   ?  sU    	I	 G';7;;#FBKK,?FF <G G Gs   =AA'c                    t        |t              xs2 |j                  t        t        t
        hv xs t        |dd       t        v }|rd}t        | d |      |y )NwinerrorzCfilesystem does not support atomic no-replace hard-link publication)	r   rE   r   r   r	   r   r7  r7   r   )rZ   r   unsupportedr   s       rI   r   r   E  sc    5-. 	P;;67E22	PE:t,0NN 
 V'	4@eK r   c                2    | j                   | j                  fS ry   )st_devst_ino)sts    rI   r_   r_   P  s    99biir   )r   r   rM   )r   rN   )rZ   rR   r   r   r   r   r   r   )r   r   r   r   )rZ   rR   rG   r   r   r   )rZ   rR   rG   r   r{   rR   r   zbytes | None)rZ   rR   rG   r   r{   rR   r   z#tuple[bytes | None, OSError | None])rG   r   r   zIterator[os.DirEntry[str]]r   z	list[str])
rZ   rR   r{   rR   r   z$tuple[StrictSoftFileClaimState, str]r   r  r   r   )r{   rR   r   z+tuple[StrictSoftFileClaimState, str] | None)rs   r   r   rR   r   rR   )r{   rR   r   rR   )r   rR   r   r  )r-  rR   r   r  r   r   r   BaseException | None)
r0  tuple[str, int | None]r   tuple[str, str]r   r   r   r  r   r   )
r0  r  r.  rR   r>  r   r?  tuple[int, int] | Noner   z1tuple[BaseException | None, BaseException | None])r0  r  r   r  r?  r   r   r   )rn   r  r@  r  r   r   )r   rR   r   rR   )r.  rR   r   z
str | None)r   r   r   rU   r   r   )r0  r  r.  rR   r   rU   r   r   )r0  r  r.  rR   r   r   )r0  r  r{   rR   r   r  )r0  r  r{   rR   r   r   r   r   )
r0  r  r{   rR   r<  r   r   r   r   r   )r0  r  rm  rR   rn  rR   r   r   )
rH   
str | Pathrp  r  rj  r   rk  r   r   r   )r0  r  r{   rR   r   r   )rG   r   rm  rR   rn  rR   r   r  )r   rR   r   r  )r{  ztuple[str, ...]r   z%tuple[list[str], list[BaseException]])r   rR   r   z!tuple[bool, BaseException | None])r  rR   r   zlist[BaseException]r   r   )rG   r   r{   rR   r   r  )r   r   r   zOSError | None)rG   rR   r   r   )r   r   r  r   r   r  )r   r   r  r   r   ztuple[int, bytes])
r   r   r   r   rb  os.stat_resultr  r   r   r  )rZ   rR   rG   r   r   r   )r{   rR   r   r   )rG   r   r{   rR   r   r   )rZ   rR   r   zNotImplementedError | OSErrorr   r   )r  r  r   r   )~
__future__r   rd  rC   r   rU  rs  r@   r   dataclassesr   r   r   r   r   r   r	   r
   r   r   pathlibr   typingr   r   r   r   _apir   r   r   _errorr   	_identityr   r   _soft_protocolr   _utilr   r   collections.abcr   r   	frozensetr   r   r    r"   r#   r$   r&   r(   r)   r+   r,   r-   r/   r0   r1   r7  r3   r  r4   r7   hasattrr9   rg  supports_dir_fdr:   r`  r;   r<   r8   r=   rJ   rK   rM   r   	Exceptionr   r]   r   r   r   r   r   r   r   r   r   r   r   r   r,  r:  r9  r;  r*  r   r   r   r[  rF  rC  r8  rE  rl  rB  r   rx  r   rz  r   r   r  r+  r   r   r  r\   r   r   r   r_   __all__r}   r   rI   <module>r     sN   "  	   
   ! O O O  6 6 A A - 5 7 5("#34 '0(F1C'D$ D#. j .$, z ,/j /"& Z &%& 
 & " : "%3 
 3%+ 
 +02 !: 2&) | )"$ Z $"% < %"' < '  J2	: 2!C!<!C!C!E , E8A+8N  5 N
 !V,	; , &(WW0B0B%B { B')yyB4F4F'F  F%'WW0B0B%B { B%.%P277b>P>P3P { P$ -H,I k Icc ccL $
 
 
	9 	4"4L"
.uu
u 5u 	u
 u8	='>e  	6%E)%E%E %E 	%E
 
%EP%)%% % -	%
 7%0.).. &. 
	.$%& 
t
H0/	%2)2
2 2 
	2U "!SSS 	S
 S 
S*'(D
<$
kGL r   