
    6h_                    r   % S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKrS SKJrJrJrJrJrJrJrJrJrJrJrJr  SSKJr  SSKJrJrJ r J!r!  \ RD                  " S5      r#\RH                  RJ                  r%\RH                  RL                  r&\RH                  RN                  r' \RP                  r)\RV                  r+\RX                  r,\RZ                  r-\R\                  r.\R^                  (       a#  SOS	 jr%SPS
 jr'SQS jr)SOS jr+SRS jr,SQS jr-SSS jr.Sr0S\1S'   \Rd                  " S 5      r2S\1S'   \Rd                  " \25        \!Rf                  r4STS jr5SUS jr6SVS jr7SWS jr8          SXS jr9SYS jr:SZS jr;  S[         S\S jjr<S]S jr=S]S jr>S^S jr?S^S  jr@S^S! jrAS_S" jrBS`S# jrCSOS$ jrDSOS% jrESaS& jrFSaS' jrGSOS( jrH\R                  R                  rKS\1S)'   \HrL\!R                  (       a   SOS* jrH\R                  R                  rKSOS+ jrL\!R                  S,:X  a0  \O" / S-QS.S/9rPSOS0 jrH\R                  R                  rK\HrLS]S1 jr=S]S2 jr>\!R                  S3:X  a  S]S4 jr>SqRS5\1S6'   SbS7 jrSScS8 jrTSdS9 jrUSeS: jrVSfS; jrWS`S< jrX\
R                  \
R                  1r[SgS= jr\S_S> jr]ShSiS? jjr^ShSjS@ jjr_SkSA jr`SlSB jraSC rbSmSD jrc  Sn       SoSE jjrdS`SF jre " SG SH5      rfSpSI jrgSpSJ jrhSK riS_SL jrjSRSM jrkg! \* a	    SNS jr) GNjf = f)q    )annotationsN)AnyAnyStrCallableIterableIteratorListMatchNoReturnOptionalSequenceTupleUnion   )_)encodingerrorpolicypycompatosutilc                >    [        [        R                  SX4-  5      e)Ns!   hardlinks not supported: %s to %s)OSErrorerrnoEINVALsrcdsts     1/usr/lib/python3/dist-packages/mercurial/posix.pyoslinkr   <   s     LL>#K
 	
    c                    [         eNNotImplementedErrorpaths    r   normpathr'   I       !!r    c                    [         er"   r#   r%   s    r   abspathr*   L   r(   r    c                    [         er"   r#   r   s     r   r   r   O   r(   r    c                    [         er"   r#   r%   s    r   readlinkr-   R   r(   r    c                    [         er"   r#   r%   s    r   unlinkr/   U   r(   r    c                    [         er"   r#   r   s     r   renamer1   X   r(   r    c                    [         er"   r#   names    r   
removedirsr5   [   r(   r    Fboolexpandglobsintumaskc                    U R                  SS5      n[        U5      S:X  a  SU 4$ US   R                  S5      nU(       a  X!S   4$ US   S-   US   4$ )a  Same as posixpath.split, but faster

>>> import posixpath
>>> for f in [b'/absolute/path/to/file',
...           b'relative/path/to/file',
...           b'file_alone',
...           b'path/to/directory/',
...           b'/multiple/path//separators',
...           b'/file_at_root',
...           b'///multiple_leading_separators_at_root',
...           b'']:
...     assert split(f) == posixpath.split(f), f
   /r   r    r   )rsplitlenrstrip)phtnhs      r   splitrB   g   s`     
$	B
2w!|Av	Ad	B	a5ya54<Ar    c                     g)z@return true if it is safe to hold open file handles to hardlinksT rD   r    r   openhardlinksrE   ~   s    r    c                B    [         R                  " U 5      R                  $ )z-return number of hardlinks for the given file)oslstatst_nlinkr3   s    r   nlinksrJ      s    88D>"""r    c                    U SS n[         R                  S:X  a  US   S:X  a  USS nU$ UR                  S5      (       a!  UR                  S5      (       a  S	U;   a  USS nU$ )
z<parses the output produced by patch and returns the filename   N   OpenVMSr      `r      '    )r   sysplatform
startswithendswith)output_linepfs     r   parsepatchoutputrW      sn    	RS	Bz)a5D=AbB I ==2;;t#4#4AbBIr    c                    U=(       a    SX!4-  =(       d    UnSUSS ;   a"  [         R                  " [        S5      U-  5      e[        U5      nU(       a  S[        U5      U4-  nU$ )zBuild argument list for sshs   %s@%s   -Nr   s4   illegal ssh hostname or username starting with -: %ss   -p %s %s)r   Abortr   
shellquote)sshcmdhostuserportargss        r   sshargsra      so     -X,5DtBQxkkEFM
 	
 dDj.55Kr    c                N    [         R                  " U 5      R                  S-  S:g  $ )z"check whether a file is executable@   r   )rG   rH   st_mode)fs    r   isexecrf      s     88A;&!++r    c                   [         R                  " U 5      nUR                  nU(       ae  [        R                  " U5      (       dI  [        U S5       nUR                  5       nS S S 5        [        U 5         [         R                  " WU 5        g g [        R                  " U5      (       aQ  [         R                  " U 5      n[        U 5        [        U S5       nUR                  U5        S S S 5        S[        ) -  nUS-  nUR                  S:  an  [        U5      [        U5      :w  aV  [        U S5       nUR                  5       nS S S 5        [        U 5        [        U S5       nUR                  W5        S S S 5        U(       a/  U(       d(  [         R                  " XUS-  S-	  [        ) -  -  5        g U(       d"  U(       a  [         R                  " XS-  5        g g g ! , (       d  f       GN= f! [         a;    [        U S5       nUR                  W5        S S S 5         g ! , (       d  f        g = ff = f! , (       d  f       GNV= f! , (       d  f       GN= f! , (       d  f       N= f)Nrbwb  rc   r   i$     )rG   rH   rd   statS_ISLNKopenreadr/   symlinkr   writer-   r9   rI   r6   chmod)re   lxstsfpdatasxs           r   setflagsrz      s   	!B


A||Aa"wwy 1I#

4# 	||A{{1~q	!T]bHHTN UFN	
UB	{{Q47d2h.!T]b779D q	!T]bHHTN  	 	Uq(E61122
I QC 
  #!T]bHHTN #] 		 #] 	# ] ] ]sZ   G6G0 H84I
$I
G-0H5H"H5"
H1	,H51H58
I

I
I*c                     [         R                  " U 5      R                  S-  nUnU(       a  U[
        R                  -  n[         R                  " X5        g! [         a    UnUc  [        ) nUS-  n NPf = f)zCopy the file mode from the file at path src to dst.
If src doesn't exist, we're using mode instead. If mode is None, we're
using umask.  Nrj   )rG   rH   rd   FileNotFoundErrorr9   rl   S_IWUSRrr   )r   r   modeenforcewritablerd   new_modes         r   copymoder      so    ((3-''%/ HDLL HHS  ?fG5	s   #A A65A6c                    [         R                  [         R                  -  [         R                  -  n[        R
                  R                  U S5      n[        R
                  R                  US5      n[        R
                  R                  US5      n[        R
                  R                  U5      (       dS   [        R                  " U5        [        R
                  R                  U5      (       a  [        XC5        O[        X#5         [        R
                  R                  U5      (       a  [        R
                  R                  US5      n[        R
                  R                  US5      n [        R                   " U5      R                  nXq-  S:w  a5   [        R                   " U5      R                  nXq-  S:X  a  g[!        U5        [!        U5        UnOU nS	n["        R$                  " US
S9u  p [        R                  " U	5        [        R                   " U
5      R                  nXq-  S:X  ay  S[&        ) -  n[        R(                  " XS-  U-  5        [        R                   " U
5      R                  U-  S:w  a,  Ub  [        R*                  " X5        S	n
 U
b  [!        U
5        ggU
b  [!        U
5        g	g	! [         a     GNf = f! [         a>    [        US5      R                  5         [        R                   " U5      R                  n GN]f = f! [         a     GNOf = f! U
b  [!        U
5        f f = f! [         a     gf = f)zq
Check whether the given path is on a filesystem with UNIX-like exec flags

Requires a directory (like /foo/.hg)
   .hg   wcaches   stores   checkisexecs   checknoexecr   wTNs   hg-checkexec-dirprefixrj   r|   F)rl   S_IXUSRS_IXGRPS_IXOTHrG   r&   joinexistsmkdirr   r   isdirrd   r}   rn   closer/   r   mkstempr9   rr   r1   )r&   	EXECFLAGSbasedircachedirstoredircheckisexecchecknoexecmcheckdirfhfns              r   	checkexecr      s   CLL4<</$,,>	'',,tV,77<<377<<2ww~~h'' "77>>(++X0W/ 77==""'',,x@K'',,x@K$GGK(00 =A%9GGK088 })#;'{#  H HK!!h7GH	HHRL##A}!UFNY23772;&&2a7".		"2!~r
 r~r
 a  $ - 9[#.446GGK0889 % N ~r
  s   B6L? 9AJ> >L? ?J> 
A%L? 0 L L?  K 9L? 4L? 7B&L+ L? .L? >
KL? KL? ALL? LL? 
L($L? 'L((L? +L<<L? ?
MMc                    [         R                  R                  U SS5      n[         R                  R                  US5      n[         R                  R                  U5      (       a  g[         R                  R	                  U5      (       a  UnOU nSn[
        R                  " [        R                  " U5      SS9n[        R                  " U5      n SnUc?  [        R                  " USS9n[         R                  R                  UR                  5      nO<S	n [         R                  R                  X5      n[        US
5      R                  5          [         R                   " Xd5        Uc  [#        U5        O [         R$                  " XB5         Ub  UR                  5         gg! [         a     gf = f! [&         a    [#        U5         N=f = f! [(         a     Ub  UR                  5         GM  GM  f = f! Ub  UR                  5         f f = f! [*         a     g[&         aW  nUR,                  [,        R.                  :X  a/  [         R                  R1                  U5      (       a  [#        U5         SnAgSnAff = f)z?check whether the given path is on a symlink-capable filesystemTr   r   s	   checklinkNz
checklink-r   s   hg-checklink-s   checklink-targetr   F)rG   r&   r   islinkr   tempfilemktempr   fsdecodefsencodenamedtempfilebasenamer4   rn   r   PermissionErrorrp   r/   r1   r   FileExistsErrorAttributeErrorr   EIOr   )	r&   r   	checklinkr   r4   fdtargetfullpathinsts	            r   r   r   >  s    77<<fi8GGLL<8	77>>)$$77==""HHH!!(+M
   &+	B++ )9 ))"''2 -	!!ww||H=H3'--/

6(#4L%		$2 
 >HHJ "+ ' ! !! # %t% # >HHJ "	 >HHJ " 	 	zzUYY&277>>$+?+?t		s   AH 9F& %G :F6 H &
F30H 2F33H 6GG GG 
G6G9 H 5G66G9 9HH 
I>	I>'AI99I>c                    g)zCheck that the base-relative path is a valid filename on this platform.
Returns None if the path is ok, or a UI string describing the problem.NrD   r%   s    r   checkosfilenamer     s     r    c                2    [        [        SS 5      " U 5      $ )zGet the filesystem mount point from a directory (best-effort)

Returns None if we are unsure. Raises OSError on ENOENT, EPERM, etc.
getfsmountpointc                    g r"   rD   rt   s    r   <lambda>!getfsmountpoint.<locals>.<lambda>  s    r    getattrr   r%   s    r   r   r     s    
 6,n=dCCr    c                2    [        [        SS 5      " U 5      $ )zGet the filesystem type name from a directory (best-effort)

Returns None if we are unsure. Raises OSError on ENOENT, EPERM, etc.
	getfstypec                    g r"   rD   r   s    r   r   getfstype.<locals>.<lambda>  s    $r    r   r%   s    r   r   r     s    
 6;7==r    c                 V    [         R                  " [        R                  " S5      5      $ )N )r   
strtolocalgetpassrD   r    r   get_passwordr     s    wr233r    c                    g r"   rD   )r   s    r   	setbinaryr         r    c                    U $ r"   rD   r%   s    r   pconvertr         Kr    c                    U $ r"   rD   r%   s    r   	localpathr     r   r    c                @    [         R                  R                  X5      $ )zsReturns whether path1 and path2 refer to the same file. This is only
guaranteed to work for files, not directories.)rG   r&   samefile)fpath1fpath2s     r   r   r     s     77F++r    c                    [         R                  " U 5      n[         R                  " U5      nUR                  UR                  :H  $ )zuReturns whether fpath1 and fpath2 are on the same device. This is only
guaranteed to work for files, not directories.)rG   rH   st_dev)r   r   st1st2s       r   
samedevicer     s3     ((6
C
((6
C::##r    c                "    U R                  5       $ r"   )lowerr%   s    r   normcaser     s    ::<r    normcasespecc                f     [         R                  " U 5      $ ! [         a    [        U 5      s $ f = f)a  
Normalize a filename for OS X-compatible comparison:
- escape-encode invalid characters
- decompose to NFD
- lowercase
- omit ignored characters [200c-200f, 202a-202e, 206a-206f,feff]

>>> normcase(b'UPPER')
'upper'
>>> normcase(b'Caf\xc3\xa9')
'cafe\xcc\x81'
>>> normcase(b'\xc3\x89')
'e\xcc\x81'
>>> normcase(b'\xb8\xca\xc3\xca\xbe\xc8.JPG') # issue3918
'%b8%ca%c3\xca\xbe%c8.jpg'
)r   
asciilowerUnicodeDecodeErrornormcasefallbackr%   s    r   r   r     s2    $	*&&t,,! 	*#D))	*s    00c           	         U R                  S5      n[        R                  " SU5      R                  5       R                  S5      n[        R                  " U5      $ ! [         a    SnSn[        U 5      nX4:  aY   [        R                  " X5      nU[        U5      -  nO(! [
         a    S[        XUS-    5      -  nUS-  n Of = fX%-  nX4:  a  MY  UR                  S5      n Nf = f)Nzutf-8r    r   s   %%%02Xr   NFD)decoder   r=   r   getutf8char
ValueErrorordunicodedata	normalizer   encodehfsignoreclean)r&   urv   posrs   cencs          r   r   r     s    	"G$A$ ##E1-335<<WE&&s++' " 	"ACD	A' ,,T7A3q6MC! !C37(;$<<A1HC  ' !A	"s;   A C(<$B! C(!"CC(CC(C('C(s   cygwin)s   /usr/bins   /usr/libs	   /cygdriveT)reversec                   [        U 5      nUS:X  d  U S   [        R                  :w  a  [        R                  " U 5      $ [
         Hb  nU R                  U5      (       d  M  [        U5      nX1:X  a  Us  $ X   [        R                  :X  d  MG  U[        R                  " XS  5      -   s  $    [        R                  " U 5      $ )Nr   )r=   r   ossepr   uppercygwinmountpointsrS   )r&   pathlenmpmplens       r   r   r     s    d)qLd1g7>>$'' $B??2&&GE	{hnn,HNN4<888 $ ~~d##r    c                    gNFrD   r%   s    r   r   r         r    c                    gr   rD   r%   s    r   r   r   !  r   r    rM   c                    gr   rD   r%   s    r   r   r   '  r   r    z3Optional[Callable[[bytes], Optional[Match[bytes]]]]_needsshellquotec                    [         R                  S:X  a  SU -  $ [        c   [        R                  " S5      R
                  qU (       a  [        U 5      (       d  U $ SU R                  SS5      -  $ )NrM   s   "%s"s   [^a-zA-Z0-9._/+-]s   '%s'rP   s   '\'')r   rR   r   recompilesearchreplacerv   s    r   r[   r[   .  s_    z){::&;<CC!!$$4222r    c                ,    [         R                  " U SS9$ )z7Parse a command string in POSIX shell way (best-effort)T)posix)r   
shlexsplitr   s    r   
shellsplitr   ;  s    q--r    c                    [         R                  S:X  a  g [        R                  " U S5        g! [         a'  nUR
                  [
        R                  :g  s SnA$ SnAff = f)z5return False if pid dead, True if running or not surerM   Tr   N)r   rR   rG   killr   r   ESRCH)pidr   s     r   testpidr  @  sK    z))
Q )zzU[[(()s   / 
A AA A c                F    U R                   [        R                  " 5       :H  $ )z;Return True if the stat object st is from the current user.)st_uidrG   getuidru   s    r   isownerr
  K  s    99		##r    c                   [         R                  S:X  a  U $ SS jn[         R                  U ;   a  U" U 5      $ [         R                  S:X  a&  U" [        R                  R                  SU 5      5      $ [        R                  R                  SS5      R                  [         R                  5       H/  nU" [        R                  R                  X 5      5      nUc  M-  Us  $    g)	zFind executable for command searching like which does.
If command is a basename then PATH is searched for command.
PATH isn't searched if command is an absolute or relative path.
If command isn't found None is returned.rM   c                     [         R                  R                  U 5      (       a,  [         R                  " U [         R                  5      (       a  U $ g r"   )rG   r&   isfileaccessX_OK)
executables    r   findexistingfindexe.<locals>.findexistingX  s5    277>>*%%"))J*H*Hr    s   plan9s   /bins   PATHr    N)r  bytesreturnOptional[bytes])r   rR   r   rG   r&   r   r   environgetrB   	ospathsep)commandr  r&   r  s       r   findexer  P  s    
 z) ~~ G$$x'BGGLL':;;  $$Wc2889K9KL!"'',,t"=>
! M r    c                     g r"   rD   rD   r    r   setsignalhandlerr  k  r   r    c              #     #    [         R                  n[        R                  nU  H,  n U" U5      nU" UR                  5      [
        ;  a  SnUv   M.     g! [        [        4 a    Sn Nf = f7f)zmStat each file in files. Yield each stat, or None if a file does not
exist or has a type we don't care about.N)rG   rH   rl   S_IFMTrd   _wantedkindsr}   NotADirectoryError)filesrH   getkindnfru   s        r   	statfilesr$  r  si      HHEkkG	rBrzz",6  
 "#56 	B	s(   &A.$A	A.A+(A.*A++A.c                 T    [         R                  " [        R                  " 5       5      $ )zreturn name of current user)r   r   r   getuserrD   r    r   r&  r&    s    W__.//r    c                    U c  [         R                  " 5       n  [        R                  " [        R
                  " U 5      S   5      $ ! [         a    SU -  s $ f = f)zeReturn the name of the user with the given uid.

If uid is None, return the name of the current user.r   s   %d)rG   r  r   r   pwdgetpwuidKeyError)uids    r   usernamer,    sQ    
 {iik  c!21!566 s{s   ,A AAc                    U c  [         R                  " 5       n  [        R                  " [        R
                  " U 5      S   5      $ ! [         a    [        R                  " U 5      s $ f = f)zgReturn the name of the group with the given gid.

If gid is None, return the name of the current group.r   )rG   getgidr   r   grpgetgrgidr*  bytestr)gids    r   	groupnamer3    sX    
 {iik%  c!21!566 %$$%s   ,A  A*)A*c                    [         R                  " U 5      n [         R                  " [         R                  [	        [
        R                  " U 5      R                  5      5      $ )zcReturn the list of members of the group with the given
name, KeyError if the group does not exist.
)r   r   rapplyr   listr/  getgrnamgr_memr3   s    r   groupmembersr9    s?     T"D??8,,d3<<3E3L3L.MNNr    c                x    [         R                  " [         R                  [        [         SS5      -  U S   U 5      $ )NP_DETACHr   )rG   spawnvpP_NOWAITr   )r`   s    r   spawndetachedr>    s+    ::bkkGB
A$>>QNNr    c                 (    [         R                  S S $ )Nr   )sysargvrD   r    r   gethgcmdrB    s    88BQ<r    c                0    [         R                  " U 5        g r"   )rG   r   )r&   
notindexeds     r   makedirrE    s    HHTNr    c                    g r"   rD   )keyvalnamescopes      r   	lookupregrJ    s    
 r    c                     g)zHide current shell window.

Used to hide the window opened when starting asynchronous
child process under Windows, unneeded on other systems.
NrD   rD   r    r   
hidewindowrL    s     	r    c                  `    \ rS rSr% S\S'   S
S jrSS jr\R                  rSS jr	SS jr
Srg	)	cachestati  os.stat_resultrl   c                :    [         R                  " U5      U l        g r"   )rG   rl   )selfr&   s     r   __init__cachestat.__init__  s    GGDM	r    c                @    [        U R                  R                  5      $ r"   )r6   rl   st_ino)rQ  s    r   	cacheablecachestat.cacheable  s    DII$$%%r    c                    U R                   R                  UR                   R                  :H  =(       Ga    U R                   R                  UR                   R                  :H  =(       Ga    U R                   R                  UR                   R                  :H  =(       GaN    U R                   R                  UR                   R                  :H  =(       Ga    U R                   R
                  UR                   R
                  :H  =(       a    U R                   R                  UR                   R                  :H  =(       a    U R                   R                  UR                   R                  :H  =(       a}    U R                   [         R                     UR                   [         R                     :H  =(       a;    U R                   [         R                     UR                   [         R                     :H  $ ! [         a     gf = fr   )rl   rd   rU  r   rI   r  st_gidst_sizeST_MTIMEST_CTIMEr   rQ  others     r   __eq__cachestat.__eq__  s~   	 		!!UZZ%7%77 J JII$$

(9(99J JII$$

(9(99J J II&&%***=*==J J II$$

(9(99	J
 II$$

(9(99J II%%););;J IIdmm,

4==0IIJ IIdmm,

4==0II
  		s   G,G/ /
G<;G<c                    X:X  + $ r"   rD   r]  s     r   __ne__cachestat.__ne__  s      r    )rl   Nr&   r  r  Noner  r6   )r^  r   r  r6   )__name__
__module____qualname____firstlineno____annotations__rR  rV  object__hash__r_  rb  __static_attributes__rD   r    r   rN  rN    s'    
"& H*!r    rN  c                T    U (       a   [         R                  " U R                  5      $ S$ )z(check whether a stat result is a symlinkF)rl   rm   rd   r	  s    r   
statislinkrp    s    ')4<<

#4u4r    c                8    U (       a  U R                   S-  S:g  $ S$ )z1check whether a stat result is an executable filerc   r   F)rd   r	  s    r   
statisexecrr    s    (*BJJ!#55r    c           
          [         R                   " X U 5      n[        [	        [        [        U/ 5      5      5      5      $ ! [         a    [        5       ef = f)zblock until something happens on any file descriptor

This is a generic helper that will check for any activity
(read, write.  exception) and return the list of touched files.

In unsupported cases, it will raise a NotImplementedError)selectr   r$   sortedr6  setsum)fdsress     r   pollrz    sN    $mmCc* $s3sB<()**  $!##$s   A   Ac                   [         R                   " U [         R                  5      nU[        R                  -  n[         R                   " U [         R                  U5      n / n  U R                  5       nU(       d  OUR                  U5        M,  SR                  U5      [         R                   " U [         R                  U5        $ ! [         a     MD  f = f! [         R                   " U [         R                  U5        f = f)z$Read all available data from a pipe.r    )	fcntlF_GETFLrG   
O_NONBLOCKF_SETFLro   appendr   r   )pipeflagsoldflagschunksrv   s        r   readpiper    s    
 KKemm,E	R]]E{{46H3IIKa   xxD%--2  
 	D%--2s<    C $C ;C <C C 
CC CC (C?c                   [         R                  R                  U5      u  p#Sn U(       a;  [         R                  " S[         R                  5      n[         R
                  " U5        U R                  U5        U(       a  [         R                  " U5        U(       a  [         R                  " U5        gg! U(       a  [         R                  " U5        f f = f)z1Bind the UNIX domain socket to the specified pathN   .)	rG   r&   rB   rn   O_DIRECTORYchdirbindfchdirr   )sockr&   dirnamer   bakwdfds        r   bindunixsocketr    s    
 d+GG	ggdBNN3GHHW		(IIgHHW 7HHW s   A0B4 4 C)r   r  r   r  r  r   )r&   r  r  r  )r&   r   r  r   )r   r  r   r  r  re  rd  )r4   r  r  re  )r?   r  r  zTuple[bytes, bytes]rf  )r4   r  r  r8   )rU   r  r  r  )
r\   r  r]   r  r^   r  r_   r  r  r  )re   r  r  r6   )re   r  rs   r6   rt   r6   r  re  r   )
r   r  r   r  r   Optional[int]r   r6   r  re  )r&   r  r  r6   )r&   r  r  r  )r  r  )r  re  )r   r  r   r  r  r6   )rv   r  r  r  )rv   r  r  List[bytes])r  r8   r  r6   )ru   rO  r  r6   )r  r  r  r  )r!  zSequence[bytes]r  z"Iterator[Optional[os.stat_result]]r"   )r+  r  r  r  )r2  r  r  r  )r4   r  r  r  )r`   r  r  r8   )r&   r  rD  r6   r  re  )NN)rG  r  rH  r  rI  z#Optional[Union[int, Iterable[int]]]r  r  )ru   zOptional[os.stat_result]r  r6   )l
__future__r   r   r|  r   r/  rG   r(  r   rt  rl   r@  r   typingr   r   r   r   r   r   r	   r
   r   r   r   r   r   i18nr   r   r   r   r   r   	importmodr   r&   r'   samestatr*   linkr   r   r-   r/   r1   r5   TYPE_CHECKINGr7   rk  r9   rn   	posixfilerB   rE   rJ   rW   ra   rf   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   normcasespecsr   r   r   isdarwinrR   ru  r   r^  r   r[   r   r  r
  r  r  S_IFREGS_IFLNKr  r$  r&  r,  r3  r9  r>  rB  rE  rJ  rL  rN  rp  rr  rz  r  r  rD   r    r   <module>r     so   #    
 	 
 	   
         
		(	#7777
''//

WWF ;;		]]
	""""""" T XXa[s  MM	.
#
	&5=L
,
)^ !			  	
 
2Nb>BD>4	,$
 **00c 0 *. ))//L,2 9$ 	

 $& ))//L :% IM E L
3.
)$
6	 dll+0


%OO  $15	 / 		!! !!H5
6
+32G  



s   ?L' 'L65L6