
    z%iP                     
   	 d dl Z d dlZd dlZd dlmZ  eee         Z	ej                  Zg dZd Zd Zdev rIdZdZd dl 	 d d	lmZ ej'                  d
       d dlZ	 d dlmZ d dlZej1                   ee             [nUdev rIdZdZd dl 	 d d	lmZ ej'                  d
       d dlZd dlZej1                   ee             [	 d dlmZ n ed      eej6                  d<   d dlmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ [ ed      r e%       Z&d Z' e(       Z) e'dd        e'dd        e'dd        e'dd        e'dd        e'dd        e'dd         e'd!d"        e'd#d$        e'd%d&        e'd'd(        e'd)d*        e'd+d,        e'd-d.        e'd-d/        e'd0d       e)Z* e(       Z) e'dd       e)Z+ e(       Z) e'd1d2        e'd3d        e'd4d        e'd5d6        e'd5d7        e'd8d9       e)jY                  e        e'd:d;        e'd<d        e'd=d        e'd>d?        ed@      r edA      r	 e'dBd@       e)Z- e(       Z) e'dd        e'dd        e'dd        e'dCdD        e'dEd        edF      r	 e'dGd        e'dd        e'dHd        e'dId        e'dd        e'd0d        e'dJd       e)Z.[)[[&['d Z/dKZ0dLZ1ddNZ2dO Z3dP Z4ej1                  g dQ       ddRZ5ej'                  dS       e6ehe*k  r#e7ehe-k  rddMddTdUZ8dV Z9ej'                  dW       dX Z:dY Z;dZ Z<d[ Z=d\ Z>d] Z?ej1                  g d^       dd_Z@dd`ZAd dalmBZBmCZC  G db dceB      ZDdd ZE eE       ZF[EddeZGedk7  ZHej1                  df       eHr/dg ZI eDeFj                  eIeKeIeK      ZL[IddhZMej1                  di       dj ZN eN       \  ZOZP[N edk      rK edl      sC edm      r;d ZQdKxZRZSej1                  g dn       do ZTdp ZUdq ZVdr ZWds ZXej1                  g dt        edl      rdu ZYdv ZZej1                  dwdxg        edy      rdz Z[d{ Z\ej1                  d|d}g       ej                  d~k7  rddZ^ G d d      Z_ej'                  d       ddZ`d Za ed      s	eaZbdeb_c         G d de j                        Zeedk(  r G d d      Zfd Zgyy# e$ r Y w xY w# e$ r Y w xY w# e$ r Y Jw xY w# e$ r Y &w xY w)    N)_check_methods)altsepcurdirpardirseppathseplinesepdefpathnamepathdevnullSEEK_SETSEEK_CURSEEK_ENDfsencodefsdecodeget_exec_pathfdopenextsepc                     | t               v S N)globals)r   s    6/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/os.py_existsr   )   s    79    c                     	 t        | j                        S # t        $ r+ t        |       D cg c]  }|d   dk7  s| nc c}w c}cY S w xY w)Nr   _)list__all__AttributeErrordir)modulens     r   _get_exports_listr$   ,   sG    7FNN## 7v;6a!A$#+6667s    AA A 	A
Aposix
)*)_exitr(   )_have_functionsntz
zno os specific module foundzos.path)r   r   r   r   r
   r   r   r   r)   c                 `    |t         v r&| t        v rt        j                  t         |          y y y r   )_globalsr)   _setadd)strfns     r   _addr1   h   s'    (N!7HHXb\" "8Nr   HAVE_FACCESSATaccessHAVE_FCHMODATchmodHAVE_FCHOWNATchownHAVE_FSTATATstatHAVE_FUTIMESATutimeHAVE_LINKATlinkHAVE_MKDIRATmkdirHAVE_MKFIFOATmkfifoHAVE_MKNODATmknodHAVE_OPENATopenHAVE_READLINKATreadlinkHAVE_RENAMEATrenameHAVE_SYMLINKATsymlinkHAVE_UNLINKATunlinkrmdirHAVE_UTIMENSATHAVE_FCHDIRchdirHAVE_FCHMODHAVE_FCHOWNHAVE_FDOPENDIRlistdirscandirHAVE_FEXECVEexecveHAVE_FTRUNCATEtruncateHAVE_FUTIMENSHAVE_FUTIMESHAVE_FPATHCONFpathconfstatvfsfstatvfsHAVE_FSTATVFSHAVE_LCHFLAGSchflagsHAVE_LCHMODlchownHAVE_LCHOWNHAVE_LUTIMES
HAVE_LSTAT
MS_WINDOWS      Fc                    	 t        j                  |       \  }}|st        j                  |      \  }}|rQ|rOt        j                  |      s:	 t        ||       t
        }t        |t              rt        t
        d      }||k(  ry 	 t        | |       y # t        $ r Y Ew xY w# t        $ r |rt        j                  |       s Y y w xY w)N)exist_okASCII)r   splitexistsmakedirsFileExistsErrorr   
isinstancebytesr?   OSErrorisdir)r   moderm   headtailcdirs         r   rq   rq      s     D!JD$ZZ%
dT[[.	TH- dE")D4<dD  		   tzz$/  0s$   B B$ 	B! B!$!CCc                     	 t        |        t        j                  |       \  }}|st        j                  |      \  }}|r.|r+	 t        |       t        j                  |      \  }}|r|r)y y y y # t        $ r Y y w xY wr   )rN   r   ro   ru   )r   rx   ry   s      r   
removedirsr|      s}    	 
$KD!JD$ZZ%
d
4	$K ZZ%
d 4$4$  		s   A0 0	A<;A<c                    	 t        j                  |      \  }}|r"|r t        j                  |      st        |       t	        | |       t        j                  |       \  }}|r|r	 t        |       y y y # t        $ r Y y w xY wr   )r   ro   rp   rq   rI   r|   ru   )oldnewrx   ry   s       r   renamesr      sy     CJD$T[[.
3CJD$	t t  		s   'A5 5	B B)rq   r|   r   c              #   J  K   	 t        j                  d| |||       t        |       g}t        j                  t        j
                  }}|r|j                         } t        | t              r|  'g }g }g }		 t        |       }
d}|
5  	 	 	 t        |
      }	 	 |j                         }|r|j                  |j                         n|j                  |j                         |s8|r6|rd}n	 |j!                         }| }|r|	j                  |j                         y y # t        $ r}| ||       Y d }~d }~ww xY w# t        $ r Y nHw xY w# t        $ r}| ||       d}Y d }~n*d }~ww xY w# t        $ r d}Y w xY w# t        $ r d}Y w xY wd d d        n# 1 sw Y   nxY w|r`|r=| ||f t#        |      D ]'  } || |      }|s	 ||      r|j                  |       ) n5|j                  | ||f       t#        |	      D ]  }|j                  |        |r֐w)Nzos.walkFT)sysauditfspathr   islinkjoinpoprs   tuplerV   ru   nextStopIterationis_dirappendr   
is_symlinkreversed)toptopdownonerrorfollowlinksstackr   r   dirsnondirs	walk_dirs
scandir_iterrorcontentryr   	walk_intor   dirnamenew_paths                      r   walkr     sE    :v IIigw<C[ME;;		DF
iikc5!I		 J  )	5	 $Z 0#"\\^F KK

+NN5::.6 #$(	/).)9)9);J )3N	 !((4Q 1 "  	"	 )  *D	  # #F#$  ' / */J	/C)	5 )	5 )	5T tW$$#D> +W-
 fX&6LL*+ LL#tW-.$Y/ 'X&'i s   A4H#7D H#F
D=FE.'AF*E?:!FH#	D:&
D50H#5D::H#=	E	EFE		E	E+E&!F&E++F.E<9F;E<<F?F
FFF	H#F"5H#AH#r   follow_symlinksdir_fdc             #     K   	 t        j                  d| ||||       t        |       } |st        | d|      }t	        | t
        |      }	 |s>t        j                  j                        rEt        j                  |t        |            r&t        || t        | t              |||      E d {    t        |       y 7 # t        |       w xY ww)Nzos.fwalkFr   r   )r   r   r   r9   rE   O_RDONLYstS_ISDIRst_moder   samestat_fwalkrs   rt   close)r   r   r   r   r   orig_sttopfds          r   fwalkr     s     	@ 			*c7G_fMSk 3fEGS(62	BJJw$?$(MM'4;$G!%je.D")7OE E E %LE %Ls1   A	CA!C  -B>.C  2C>C   CCc           	   #   v  K   t        |       }g }g }|s|rd ng }	|D ]b  }
|
j                  }|rt        |      }	 |
j                         r%|j	                  |       |	#|	j	                  |
       n|j	                  |       d |r|||| f |	|nt        ||	      D ]  }	 |s(|rt        || d      }n|\  }}
|
j                  d      }t        |t        |       }	 |st        j                  t        |            r.t        j                  ||      }t        ||||||      E d {    t        |        |s	|||| f y y # t
        $ r6 	 |
j                         r|j	                  |       n# t
        $ r Y nw xY wY fw xY w# t
        $ r}| ||       Y d }~d }~ww xY w7 # t        |       w xY ww)NF)r   r   )r   r   )rV   r   r   r   r   ru   r   zipr9   rE   r   r   r   r   r   r   )r   toppathisbytesr   r   r   r   r   r   entriesr   r   r   dirfderrdirpaths                   r   r   r     s    
 U^
!_$" 	E::D~<<>KK%*u-NN4(	& 4%//#ODT71C 	D&"&tE5"Q '+e"'**U*"CT8E:
"dmmGT%[&I"ii6G%eWg&-w I I I e)	, 4%// C  '')t, *  &CLI es   6F9AE?F9<FA
F)&F''F)+F9	F!E0/F0	E<9F;E<<F?F9FF9	F$
FF9F$$F9'F))F66F9r   c                     	 t        | |       y r   )execvfileargss     r   execlr     s     
$r   c                 0    	 |d   }t        | |d d |       y N)rX   r   r   envs      r   execler   &  s$    8 r(C
4crC r   c                     	 t        | |       y r   )execvpr   s     r   execlpr   .  s    @ 4r   c                 0    	 |d   }t        | |d d |       y r   )execvper   s      r   execlper   5  s$    
 r(CD$s)S!r   c                     	 t        | |       y r   _execvper   s     r   r   r   >  s    0
 T4r   c                      	 t        | ||       y r   r   r   s      r   r   r   F  s    0 T4r   )r   r   r   r   r   r   c                    |t         }||f}nt        }|f}t        }t        j                  |       r
 || g|  y d }t        |      }t        dk7  rt        |       } t        t        |      }|D ]"  }t        j                  ||       }	  ||g|  $ ||
# t        t        f$ r}	|	}
Y d }	~	Ad }	~	wt        $ r}	|	}
||	}Y d }	~	Xd }	~	ww xY w)Nr*   )rX   r   environr   r   r   r   r   mapr   FileNotFoundErrorNotADirectoryErrorru   )r   r   r   	exec_funcargrest	saved_exc	path_listr!   fullnameelast_excs              r   r   r   Q  s    
	+	'||D$!!Ic"It|~),	 	99S$'	h))	 
N "#56 	H 	H 		s$   		BC)B00C<CCc                    	 dd l }| t        } |j                         5  |j                  dt               	 | j                  d      }t        r2	 | d   }|t        d      |}|t        |t              rt        |      }d d d        t        }|j                  t              S # t        $ r d }Y jw xY w# t        t        f$ r Y dw xY w# 1 sw Y   LxY w)Nr   ignorePATHs   PATHz*env cannot contain 'PATH' and b'PATH' keys)warningsr   catch_warningssimplefilterBytesWarningget	TypeErrorsupports_bytes_environ
ValueErrorKeyErrorrs   rt   r   r
   ro   r   )r   r   r   
path_listbs       r   r   r   q  s     
{ 
	 	 	" 0h5	I "' \
 ($DF F&	$Iu)E$Y/	)0, 	??7##'  	I	 i( 0 0sR   C
B$C
B5,C
$B2/C
1B22C
5CC
CC

C)MutableMappingMappingc                   T    e 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y)_Environc                 J    || _         || _        || _        || _        || _        y r   )	encodekey	decodekeyencodevaluedecodevalue_data)selfdatar   r   r   r   s         r   __init__z_Environ.__init__  s'    ""&&
r   c                     	 | j                   | j                  |         }| j                  |      S # t        $ r t        |      d w xY wr   )r   r   r   r   r   keyvalues      r   __getitem__z_Environ.__getitem__  sN    	*JJt~~c23E &&  	*3-T)	*s	   1 Ac                 ~    | j                  |      }| j                  |      }t        ||       || j                  |<   y r   )r   r   putenvr   r   s      r   __setitem__z_Environ.__setitem__  s7    nnS!  'sE

3r   c                     | j                  |      }t        |       	 | j                  |= y # t        $ r t        |      d w xY wr   )r   unsetenvr   r   )r   r   
encodedkeys      r   __delitem__z_Environ.__delitem__  sD    ^^C(
	*

:& 	*3-T)	*s	   , Ac              #   j   K   t        | j                        }|D ]  }| j                  |        y wr   )r   r   r   )r   keysr   s      r   __iter__z_Environ.__iter__  s2     DJJ 	&C..%%	&s   13c                 ,    t        | j                        S r   )lenr   r   s    r   __len__z_Environ.__len__  s    4::r   c                 t     dj                   fd j                  j                         D              }d| dS )Nz, c              3   n   K   | ],  \  }}j                  |      d j                  |       . yw)z: N)r   r   ).0r   r   r   s      r   	<genexpr>z$_Environ.__repr__.<locals>.<genexpr>  s>      $
U ~~c"%R(8(8(?'BC$
s   25z	environ({z}))r   r   items)r   formatted_itemss   ` r   __repr__z_Environ.__repr__  s=    )) $
"jj..0$
 
 O,C00r   c                     t        |       S r   )dictr  s    r   copyz_Environ.copy  s    Dzr   c                     || vr|| |<   | |   S r    r   s      r   
setdefaultz_Environ.setdefault  s    d?DICyr   c                 (    | j                  |       | S r   )update)r   others     r   __ior__z_Environ.__ior__  s    Er   c                 j    t        |t              st        S t        |       }|j	                  |       |S r   rs   r   NotImplementedr  r  r   r  r   s      r   __or__z_Environ.__or__  s,    %)!!4j

5
r   c                 j    t        |t              st        S t        |      }|j	                  |        |S r   r  r  s      r   __ror__z_Environ.__ror__  s,    %)!!5k

4
r   N)__name__
__module____qualname__r   r   r   r   r   r  r  r  r  r  r  r  r  r   r   r   r     s>    ' *&1
r   r   c                      t         dk(  r:d } | t        }fd}i }t        j                         D ]  \  }}|| ||      <    n&t	        j
                         fdfd}}t        }t        ||||      S )Nr*   c                 h    t        | t              s!t        dt        |       j                  z        | S )Nstr expected, not %s)rs   r/   r   typer  r   s    r   	check_strz!_createenviron.<locals>.check_str  s,    eS) 6e9M9M MNNLr   c                 0     |       j                         S r   )upper)r   encodes    r   r   z!_createenviron.<locals>.encodekey  s    #;$$&&r   c                     t        | t              s!t        dt        |       j                  z        | j                  d      S )Nr"  surrogateescape)rs   r/   r   r#  r  r(  r   encodings    r   r(  z_createenviron.<locals>.encode  s:    eS) 6e9M9M MNN<<*;<<r   c                 (    | j                  d      S )Nr*  )decoder+  s    r   r.  z_createenviron.<locals>.decode  s    <<*;<<r   )r   r/   r   r	  r   getfilesystemencodingr   )r%  r.  r   r   r   r   r(  r,  s         @@r   _createenvironr0    s    t|	 	'!--/ 	)JC#(D3 	) ,,.	=	=	D6 r   c                 0    	 t         j                  | |      S r   )r   r   r   defaults     r   getenvr4    s    , ;;sG$$r   )r4  r   c                 h    t        | t              s!t        dt        |       j                  z        | S )Nzbytes expected, not %s)rs   rt   r   r#  r  r$  s    r   _check_bytesr6    s,    %'4tE{7K7KKLLr   c                 0    	 t         j                  | |      S r   )environbr   r2  s     r   getenvbr9     s    	2 ||C))r   )r8  r9  c                  v    t        j                         t        j                         fd} fd}| |fS )Nc                 d    	 t        |       } t        | t              r| j                        S | S r   )r   rs   r/   r(  filenamer,  errorss    r   r   z_fscodec.<locals>.fsencode,  s4    	
 (#h$??8V44Or   c                 d    	 t        |       } t        | t              r| j                        S | S r   )r   rs   rt   r.  r<  s    r   r   z_fscodec.<locals>.fsdecode8  s4    	
 (#h&??8V44Or   )r   r/  getfilesystemencodeerrors)r   r   r,  r>  s     @@r   _fscodecrA  (  s6    ((*H**,F

 Xr   forkspawnvr   )P_WAITP_NOWAIT	P_NOWAITOc                 :   t        |t        t        f      st        d      |r|d   st	        d      t               }|s	 |
 |||       n ||||       y y | t        k(  r|S 	 t        |d      \  }}t        |      rt        |      S #  t        d       Y y xY w)Nzargv must be a tuple or a listr   z"argv first element cannot be empty   )rs   r   r   r   r   rB  r(   rE  waitpid
WIFSTOPPEDwaitstatus_to_exitcode)rw   r   r   r   funcpidwpidstss           r   	_spawnvefrP  U  s    $.<==47ABBf;t$tS) % x
#CO	cc?-c22c
s   B Bc                 *    	 t        | ||d t              S r   )rP  r   rw   r   r   s      r   rC  rC  p  s    	C tT477r   c                 *    	 t        | |||t              S r   )rP  rX   rw   r   r   r   s       r   spawnverU  y  s    	C tT377r   c                 *    	 t        | ||d t              S r   )rP  r   rR  s      r   spawnvprW    s    	C tT488r   c                 *    	 t        | |||t              S r   )rP  r   rT  s       r   spawnvperY    s    	C tT388r   )rC  rU  rW  rY  c                     	 t        | ||      S r   )rC  rR  s      r   spawnlr[    s    	C dD$''r   c                 0    	 |d   }t        | ||d d |      S r   )rU  rT  s       r   spawnler]    s*    	C 2htT49c22r   r[  r]  rW  c                     	 t        | ||      S r   )rW  rR  s      r   spawnlpr_    s    	C tT4((r   c                 0    	 |d   }t        | ||d d |      S r   )rY  rT  s       r   spawnlpera    s*    	C 2hdD"Is33r   r_  ra  vxworksc                    t        | t              st        dt        |       z        |dvrt	        d|z        |dk(  s|t	        d      dd l}|dk(  r6|j                  | dd|j                  |      }t        |j                  |      S |j                  | dd|j                  |	      }t        |j                  |      S )
Nz&invalid cmd type (%s, expected string))rwzinvalid mode %rr   z+popen() does not support unbuffered streamsrd  T)shelltextstdoutbufsize)rf  rg  stdinri  )rs   r/   r   r#  r   
subprocessPopenPIPE_wrap_closerh  rj  )cmdrw   	bufferingrk  procs        r   popenrr    s    #s#DtCyPQQz!.566>Y.JKK3;##C*.T+5??,5 $ 7D t{{D11##C*.T*4//,5 $ 7D tzz400r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)rn  c                      || _         || _        y r   )_stream_proc)r   streamrq  s      r   r   z_wrap_close.__init__  s    !DLDJr   c                     | j                   j                          | j                  j                         }|dk(  ry t        dk(  r|S |dz  S )Nr   r*      )ru  r   rv  waitr   )r   
returncodes     r   r   z_wrap_close.close  sC    LL *JQt|!!!Q&r   c                     | S r   r  r  s    r   	__enter__z_wrap_close.__enter__      Kr   c                 $    | j                          y r   r   r   r   s     r   __exit__z_wrap_close.__exit__      JJLr   c                 .    t        | j                  |      S r   )getattrru  )r   r   s     r   __getattr__z_wrap_close.__getattr__  s    4<<..r   c                 ,    t        | j                        S r   )iterru  r  s    r   r   z_wrap_close.__iter__  s    %%r   N)	r  r  r  r   r   r}  r  r  r   r  r   r   rn  rn    s     		'			/	&r   rn  rr  c                     t        | t              st        dt        |       z        dd l}d|vr|j                  |      } |j                  | |||g|i |S )Nz&invalid fd type (%s, expected integer)r   b)rs   intr   r#  iotext_encodingrE   )fdrw   rp  r,  r   kwargsr  s          r   r   r     s\    b#@48KLL
$##H-2772tYB4B6BBr   c                 r   	 t        | t        t        f      r| S t        |       }	 |j	                  |       }t        |t        t        f      r|S t        dj                  |j                  t        |      j                              # t
        $ r& t        |d      r t        d|j                  z         w xY w)N
__fspath__z/expected str, bytes or os.PathLike object, not z7expected {}.__fspath__() to return str or bytes, not {})
rs   r/   rt   r#  r  r    hasattrr   r  format)r   	path_type	path_reprs      r   _fspathr    s     $e% T
I9((.	 )c5\* !!'	(:(:(,Y(@(@"BC 	C  99l+ #%.%7%78 9 9	9s   B /B6r   c                   R    e Zd Z	 ej                  d        Zed        Z ee      Z	y)PathLikec                     	 t         r   )NotImplementedErrorr  s    r   r  zPathLike.__fspath__:  s    G!!r   c                 6    | t         u rt        |d      S t        S )Nr  )r  r   r  )clssubclasss     r   __subclasshook__zPathLike.__subclasshook__?  s    (?!(L99r   N)
r  r  r  abcabstractmethodr  classmethodr  GenericAlias__class_getitem__r  r   r   r  r  6  s>    M" "  
 $L1r   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)_AddedDllDirectoryc                 .    || _         || _        || _        y r   )r   _cookie_remove_dll_directory)r   r   cookieremove_dll_directorys       r   r   z_AddedDllDirectory.__init__J  s    DI!DL)=D&r   c                 H    | j                  | j                         d | _        y r   )r  r  r   r  s    r   r   z_AddedDllDirectory.closeN  s    &&t||4DIr   c                     | S r   r  r  s    r   r}  z_AddedDllDirectory.__enter__Q  r~  r   c                 $    | j                          y r   r  r  s     r   r  z_AddedDllDirectory.__exit__S  r  r   c                 R    | j                   rdj                  | j                         S y)Nz<AddedDllDirectory({!r})>z<AddedDllDirectory()>)r   r  r  s    r   r  z_AddedDllDirectory.__repr__U  s!    yy299$))DD*r   N)r  r  r  r   r   r}  r  r  r  r   r   r  r  I  s    	>				+r   r  c                 ^    	 dd l } |j                  |       }t        | ||j                        S )Nr   )r*   _add_dll_directoryr  r  )r   r*   r  s      r   add_dll_directoryr  Z  s:    	 	&&&t,!$$
 	
r   )i  F)TNF).TNr   )rd  r   )rd  r   N)hr  r   r9   r   _collections_abcr   r#  r   r  r  builtin_module_names_namesr   r   r$   r   r	   r%   r(   r   ImportError	posixpathr   r)   extendr*   ntpathmodulesos.pathr   r   r   r   r
   r   r   r   r   r,   r1   setr-   supports_dir_fdsupports_effective_idsr.   supports_fdsupports_follow_symlinksr   r   r   rq   r|   r   r   rE   rV   r   r   r   r   r   r   r   r   r   r   r   r   r   r0  r   r4  r   r6  r   rt   r8  r9  rA  r   r   rD  rE  rF  rP  rC  rU  rW  rY  r[  r]  r_  ra  platformrr  rn  r   r  r   r  ABCr  r  r  r  r   r   <module>r     s  0  
  +DI		!	!
7 fDGw ) NN$U+,	V^DGw NN$R()
&
 3
44I     yH# 5D	H%G$G$F#	G$F#G$H%G$F#	J'H%	I&H%G$	G$O5D	H%!5DG$G$G$	I&	I&H%HHTN	J'G$G$	J'ygj1_i(K5D	H%, 	G$F#I&G$x]G$F#G$F#F#	G$F## 
@&,4 4 5U'n v $<?"+'E.eTX .`60p NN7!" G H@)$Z 5G~ GR< 
% $,  3 4 eeH 	* NN*+< Z ( 6?78,1AFHyNN67368899 NN?@ 8(	3 NNHi() 9)	4 NNIz*+ <<91,& &, NN7CC> xFFO2sww 2$ 4<+ +"
% [         sH   S S S) S5 SSS&%S&)S21S25S>=S>