e+~SrSrSrSrSrSrSrSrSrSS K r SS K r SS K r SS K 7 /S Qr S r SS KJrJrJr SrSrSrSrSSKJr SrSr\ R>R\lSr Sr!SSKJ"r" Sr#\$"\%"S5Vs1sH n\&"U5iM sn1Sk-5r'\$"1SkSVs1sHnSU3iM sn-SVs1sHnS U3iM sn-5r(S!r)S"r*S#r+S$r,SS%KJ-r. SS'KJ/r/ S(r0SS*KJ1r1J2r2J3r4 S+r5S,r6S-S..S/jr7S0r8S;S1jr9S2r:SS3KJ;r< SS4KJ=r> SS5KJ?r@ SS6KJArB SS7KJCrD SS8KJErF SS9KJGrG S:rHg !\a SrGNf=f!\a SrGNf=f!\a S r"Nf=fs snfs snfs snf!\a S&r.Nf=f!\a S)r0Nf=f!\a \0r7Nf=f!\a N|f=f!\a g f=f) "r rrw<>?r|>AUXCONNULPRNCONIN$CONOUT$u123456789¹²³COMLPTc[R"[U5S5R[[ 5n[ S[UR[ 5555$)z6Return true if the pathname is reserved by the system.rzc38# UHn[U5v M g7fN)_isreservedname).0names r; isreserved..<sK1Jt$$1Js) rDrRrrIr(r%anyreversedrr9s r;rr7sF ;;yq) * 2 263 ?D K$**S/1JK KKr=cUSSS;aUS;$[RU5(agURS5SRS5R 5[ ;$) z6Return true if the filename is reserved by the system.r_N)r )rrTrrr)_reserved_chars intersection partitionrr|_reserved_names)rs r;rr>sb BCyJ;&&##D)) >># q ! ( ( - 3 3 5 HHr=cN[R"U5n[U[5(aSnSnOSnSnUR U5(dU$S[ U5pCX4:aXU;aUS- nX4:a XU;aMS[R ;a[R SnOSS[R ;aU$[R RSS 5n[U[R S5nUS:wazUSUn[U[5(a[R"U5n[R RS 5nXx:wa&U[U5:waU$[[U5U5n[U[5(a[R"U5nXPUS -$) zHExpand ~ and ~user constructs. If user or $HOME is unknown, do nothing.r5~r6~rZ USERPROFILEHOMEPATH HOMEDRIVEryUSERNAMEN) rDrEr7r8r[renvirongetr rRrrrQ) r:rftildernuserhomerp target_user current_users r;rrWsb 99T?D$ ??5 ! ! c$iq %DG4' Q %DG4' "::m, 2:: %  {B/rzz*56Av1Qi k5 ) )++k2Kzz~~j1  & x11 GH-{;H$;;x( 12h r=c&[R"U5n[U[5(aTSU;aSU;aU$SSKn[UR UR -S-S5nSnSnSnS nSn[[S S5nOHS U;aS U;aU$SSKnUR UR -S-nS nS nSnSnS n[RnUSSn Sn [U5n X:GaX U S-n X:Xa3X S-Sn[U5n URU 5n XUSU S--- n GOX:XaX S-U S-U:Xa X- n U S- n GOX S-Sn[U5n URU5n USU n Uc<[R"[R[R"U 55nOXnX- n GO5X:XGa+X S-U S-U:Xa X- n U S- n GOX S-U S-U:XasX S-Sn[U5n URU5n USU n Uc<[R"[R[R"U 55nOXnX- n OUSSn U S- n X U S-n U (a#X;aX- n U S- n X U S-n U (aX;aMUc<[R"[R[R"U 55nOXnX- n U (aU S-n OX- n U S- n X:aGMU $![a XU-- n U S- n N'f=f![a XM-U-nGNzf=f![a XU-- n U S- n N[f=f![a Xu-U -U-nGNf=f![a XU-U-- n U S- n Nf=f![a X}-nNf=f)zbExpand shell variables of the forms $var, ${var} and %var%. Unknown variables are left unchanged.$%rNz_-ascii'{}environb$%'{}rZrz)rDrEr7r8string ascii_lettersdigitsgetattrrrr ValueErrorrQrRKeyError)r:rvarcharsquotepercentbracerbracedollarrresrpathlencvarvalues r;r r s  99T?D$ t D 0K-- =DgN"j$/ d?s$K''&--7$>** r(C E$iG / uQw  : #D$iG $ 1 4 +++\AIeai(G3 !GH~d)! JJw/E v,C8"?$&KK 2;;s;K0L$ME$+LELC [AIeai(F2 ai *e3!GH~d)! JJv.E v,C>"?$&KK 2;;s;K0L$ME$+LELC2Ah uqy)AMHCQJE519-AAM) " BJJr{{37G,H I '  QJE HC  W /X JI $4x!  $,$8 '  78"(T>)C#aKE(@$> & 4v =>"(E>D00C#aKE(4 )"LE)s~?K5L)'>L&L1M >MM >M? M?5L LL&%L&)MMMM M<;M<?NN)_path_normpathc:[R"U5n[U[5(a SnSnSnSnOSnSnSnSnUR X!5n[ U5upVnXV-nUR U5nS n U [U5:aiX(aXU:XaX ODXU:Xa7U S :aXS - U:waXS - U S -2 U S -n OU S :Xa U(aX O U S - n OU S - n U [U5:aMiU(dU(dURU5 XqRU5-$) z0Normalize path, eliminating double slashes, etc.rUrVr..rrrrrrZ) rDrEr7r8rIrrrappendr ) r:r%r(r#r$rprqprefixcompsrs r;r!r!s yy dE " "CFFFCFFF||F(%dOT 3 #e*n8ux61HV#q5UQ3Z61c!A#gFA!VFAQ#e*ne LL ''r=)_getfullpathnamec[[U55$![[4a Of=f[R "U5n[ U5(d[U[5(aSn[RnOSn[Rn[U5up4nU(dU(a6[[X4-5U5nO.![[4a X1-U-nOf=f[U"5U5n[U5$)&Return the absolute version of a path.rUr) rr!OSErrorrrDrEr r7r8getcwdbgetcwdrr )r:r%rrprqs r;r"r"=s #HTN3 3$   yyT{{$&& )$ E. 0 >ED,. ;-D.FHd+~s)))CCCc[R"U5n[U5(dK[U[5(a[R "5nO[R "5n[X5n[U5$)r) rDrEr r7r8rrr r!)r:cwds r;r"r"1sNyyT{{$&&jjliik?D~r=)_findfirstfile_getfinalpathnamereadlinkcSn[5n[U5U;a|UR[U55 Un[U5n[ U5(d3[ U5(dUnU$[ [[U5U55n[U5U;aM|U$![anURU;aSnAU$eSnAf[a U$f=f)N) rZrzrYr2CWi&i(i)) setr add _nt_readlinkr rr!r rrwinerrorr)r:allowed_winerrorseenold_pathexs r;_readlink_deepr^sLutnD( HHXd^ $ #D)T{{"(++' $D):D$ABDtnD(,  ;;"22     s)/B)B C $B;:B;; C  C c<SnUSSnU(a [U5nU(a [X5$U$U$![anURU;ae[ U5nX@:waU(a [XB5OUsSnA$O![a Of=fURS;a7[ U5n[ U5upO*![a [ U5upOf=f[ U5upU(aU(d X-sSnA$U(a [XR5OUnSnAOSnAff=fU(aGMN)N)rZrzrYrrrr5Arr{r)rZrrrrr r )rr rrrrr)r:rrrrnew_pathr_s r;_getfinalpathname_nonstrictr s$XBQx :(.+/tD'9T94 3 :;;&66  .d3H'7;tH3I(;;"@@1-d3"'+a"1%*4[ d1"'tJD;&+/tD'T1 : dsr11 DD  #A70D6D 7 BD BD B10D 1C D  C  !D ,D2D  DF)strictc[U5n[U[5(a.SnSnSn[R"5nSn[ U5U:XagO-SnSnSn[R "5nS n[ U5U:Xag URU5nU(d[U5(d [XP5n[U5nS nU(d_URU5(aIURU5(aX@[!U5S-n OU[!U5Sn [U 5U:XaU nU$U$![a1n U(a[[U 55Se[U5nSn A NSn A f[a)n U(aeU Rn[U5nSn A NSn A ff=f![a n Sn A U$Sn A f[an U RW:XaU nSn A U$Sn A ff=f) Ns\\?\rvrWsnuls\\.\NULz\\?\rxrXrz\\.\NULr)r!r7r8rDrr rr[r r rrrstrrr r) r:rrrnew_unc_prefixrr* had_prefixinitial_winerrorrspaths r;r+r+s~ dE " "F(J$N**,CG~($)F'J#N))+CG~(#__V, %++?D 5$T*D "doof55z**&c*o.>)??S[\* !$U+t3 D t I " c"g&D0D>D 5!{{ .t4D  5&    !;;"22 D  !sB0 D%F% F/'E F(F  F G$ G1G  GTc6[R"U5nU(d [S5e[U[5(aSnSnSnOSnSnSnUcUnO[R"U5n[ U5n[ U5n[ U5upxn [ U5upn [U5[U 5:wa[S U <S U<35eU (aU RU5O/n U (aU RU5O/n S n[X5H%unn[U5[U5:wa O US - nM' U/[U 5U- -XS-nU(dU$URU5$![[[[[4a [ R""S X5 ef=f)z#Return a relative version of a pathzno path specifiedrUrrrrrNzpath is on mount z, start on mount rrZr-)rDrErr7r8r"rr rziprr r`rarbDeprecationWarningrcrd)r:rr%r#r$ start_abspath_abs start_driver  start_rest path_drive path_rest start_list path_listre1e2rel_lists r;r-r-s 99T?D ,--$ } % EN 4=%.y%9" #,X#6 y K HZ$8 8K)* */9Z%%c*b ,5IOOC(2 *0FB|x|+ FA1 8s:q01IbMAMxx!! z>?;awws|; ? -gaA- .! 3>? ?%eAh&6&6v&CDT -gaA- .! 3 !HII !HIIC#9Vq!Q[!V9DOPKq1:1aak1:K P    bMDAqBqEz" HSW%F|chhv...;Q? ..::P ~ &$$\:E: sH= 2HH=H7H=H AH=H& %?H=$ H-2H-9H-?H= H7 H2 H2 $H2 *H711H=&,H=H=2H77H==)I&) _path_isdir) _path_isfile) _path_islink)_path_isjunction) _path_exists) _path_lexists)_path_isdevdrivecL[[U55$![a gf=f)z@Determines whether the specified path is on a Windows Dev Drive.F)r4r"rr9s r;r3r3s( #GDM2 2  s  ##r)I__doc__r#r$r)r%r&r(r'r*rDrFrc__all__r<_winapir>rJr?rKr@rLr ImportErrorr r r ntrsrrrrrrrr frozensetrangechrrrrrrr rr!rr"rrrrrr r+r,r-r1r.rr/rr0rr1r2r2rr3rr4r3)rrs00r;r>sr          !,-- 8<B&)^.-#2h +*8 ((00 %(2YYSVY23 5/0/1s1#Y/01/0/1s1#Y/01 L I2,xj`&(-R)#6dNN (T4l"'>D",r0f  ())1)+  #w ,, ,N+#*#+#V. 10d#("(#(T   TH|    s E E1E+E9-E> F )F0F: F&$F4 G EE E('E(+E65E6 FF F#"F#&F10F14F=<F=G G