
    jj%                    4   d Z ddlmZ 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 ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl m!Z!  ejD                  d      Z#ejH                  dk(  rdZ%dZ&ndZ%dZ& G d dejN                  e#         Z( G d d      Z)d,dZ*	 d-	 	 	 d.dZ+ejX                  d-d/d       Z-d0dZ.ejX                  	 d-	 	 	 	 	 	 	 d1d        Z/ejX                  	 d-	 	 	 	 	 	 	 d1d!       Z0ejX                  	 d-	 	 	 	 	 d2d"       Z1 G d# d$      Z2d3d4d%Z3d5d&Z4e
jj                  d'k(  rddl6Z6ejX                  d6d(       Z7d7d)Z8yddl9Z9ddl:Z:ejX                  d6d*       Z7d7d+Z8y)8z
This module contains implementations for the termui module. To keep the
import time of Click down, some infrequently used functionality is
placed in this module and only imported as needed.
    )annotationsN)gettext)StringIO)Path)TracebackType   )_default_text_stdout)CYGWIN)get_best_encoding)isatty)
strip_ansi)term_len)WIN)ClickException)echoVnt
z[?25lz[?25h
c                  6   e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZ	 	 	 	 	 	 	 	 ddZddZddZddZe	dd       Z
e	dd	       Ze	dd
       ZddZddZddZddZddZddZddZdd dZddZddZy)!ProgressBarNc                   || _         || _        || _        || _        || _        || _        |	| _        |
| _        || _        |xs d| _	        |t               }|
t               }|| _        || _        || _        d| _        || _        |dk(  | _        |ddlm}  ||d      }|dk(  rd }|,|t)        d      t+        j,                  dt/        |            }t1        |      | _        || _        d| _        g | _        |  |  t9        j8                         x| _        | _        d| _        d| _         d | _!        d| _"        d | _#        tI        | j                        | _%        d | _&        y )N r   )length_hintziterable or length is requiredzcabc.Iterable[V]F)'	fill_char
empty_charbar_templateinfo_sephiddenshow_etashow_percentshow_positem_show_funclabelr	   r   filecolorupdate_min_steps_completed_intervalswidth	autowidthoperatorr   	TypeErrortcastrangeiterlengthposavgtimestartlast_eta	eta_knownfinished	max_widthenteredcurrent_itemr   _is_atty
_last_line)selfiterabler2   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r*   r   s                     [/home/ubuntu/.cache/pipx/cdb5059130eadca/lib/python3.12/site-packages/click/_termui_impl.py__init__zProgressBar.__init__,   s]   & #$(  ( ,+2
<')D |z	
 0$%!
$z>, 2.F|~ @AAvv0%-@H&*8n	 "%)YY[0
T]$#%)"&*tyy)&*    c                4    d| _         | j                          | S )NT)r;   render_progressr?   s    rA   	__enter__zProgressBar.__enter__s   s    rC   c                $    | j                          y N)render_finish)r?   exc_type	exc_valuetbs       rA   __exit__zProgressBar.__exit__x   s     	rC   c                p    | j                   st        d      | j                          | j                         S )N.You need to use progress bars in a with block.)r;   RuntimeErrorrE   	generatorrF   s    rA   __iter__zProgressBar.__iter__   s.    ||OPP~~rC   c                *    t        t        |             S rI   )nextr1   rF   s    rA   __next__zProgressBar.__next__   s     DJrC   c                $   | j                   r2| j                  | j                          d| _         | j                          | j                  s| j                  sy | j
                  j                  t               | j
                  j                          y )Nr   )	r)   	make_steprE   r    r=   r&   write	AFTER_BARflushrF   s    rA   rJ   zProgressBar.render_finish   sa     $$NN4445()D%  ";;dmm			"		rC   c                    | j                   ryt        | j                  t        | j                  xs d      xs dz  d      S )N      ?r   )r9   minr3   floatr2   rF   s    rA   pctzProgressBar.pct   s5    ==488uT[[%5A6;!<cBBrC   c                    | j                   syt        | j                         t        t        | j                               z  S Ng        )r4   sumr_   lenrF   s    rA   time_per_iterationzProgressBar.time_per_iteration   s,    xx488}uS]333rC   c                    | j                   2| j                  s&| j                  | j                   | j                  z
  z  S yrb   )r2   r9   re   r3   rF   s    rA   etazProgressBar.eta   s3    ;;"4==**dkkDHH.DEErC   c                    | j                   rdt        | j                        }|dz  }|dz  }|dz  }|dz  }|dz  }|dz  }|dkD  rdj                  |t	        d      |||      S |dd|dd|dS y	)
N<      r   z#{d}{day_label} {h:02}:{m:02}:{s:02}d)rk   	day_labelhms02:r   )r8   intrg   format_)r?   r.   secondsminuteshourss        rA   
format_etazProgressBar.format_eta   s    >>DHHA"fG"HA"fG"HAFE"HA1u<CCf D    1WRL'">>rC   c                l    t        | j                        }| j                  |d| j                   z  }|S )N/)strr3   r2   )r?   r3   s     rA   
format_poszProgressBar.format_pos   s3    $((m;;"Qt{{m$$C
rC   c                @    t        | j                  dz        dddd  S )Nd   z 4%r   )rr   r`   rF   s    rA   
format_pctzProgressBar.format_pct   s&    dhhn%b)+AB//rC   c                F   | j                   Rt        | j                  | j                  z        }| j                  |z  }|| j
                  | j                  |z
  z  z  }|S | j                  r| j                  | j                  z  }|S t        | j
                  | j                  xs dz        }| j                  dk7  rU| j                  |t        t        j                  | j                  | j                  z        dz  dz   | j                  z        <   dj                  |      }|S )Nr   r   g       @g      ?r   )r2   rr   r`   r*   r   r   r9   listre   mathcosr3   join)r?   
bar_lengthbarcharss       rA   
format_barzProgressBar.format_bar   s   ;;"TXX

23J..:-C4??djj:&=>>C 
 ]]..4::-C 
 DJJO!<=E&&!+ NN $((T-D-D"DEKcQ**% ''%.C
rC   c                   | j                   }g }| j                  || j                   }| j                  r|j                  | j	                                |r|j                  | j                                | j                  r7| j                  r+| j                  s|j                  | j                                | j                  .| j                  | j                        }||j                  |       | j                  | j                  | j                         | j                  j!                  |      dz  j#                         S )N)r%   r   info)r"   r2   r#   appendr|   r   r!   r8   r9   rx   r$   r<   r   r%   r   r   r   rstrip)r?   r"   	info_bits	item_infos       rA   format_progress_linez ProgressBar.format_progress_line   s   ((	;;"|';#}},L==T__./T__./==T^^DMMT__./*++D,=,=>I$  + (**95 &(	rC   c                X   | j                   ry | j                  sW| j                  | j                  k7  r=| j                  | _        t	        | j                  | j
                  | j                         y g }| j                  rdd l}| j                  }d| _	        t        | j                               }t        d|j                         j                  |z
        }||k  rF| j                  :|j!                  t"               |j!                  d| j                  z         || _        || _	        | j                  }| j                  | j                  }|j!                  t"               | j                         }t        |      }| j                  | j                  |k  r|| _        |j!                  |       |j!                  d||z
  z         dj%                  |      }|| j                  k7  rE|| _        t	        || j
                  | j                  d       | j
                  j'                          y y )N)r&   r'   r    r   F)r&   r'   nl)r    r=   r>   r%   r   r&   r'   r+   shutilr*   r   r   maxget_terminal_sizecolumnsr:   r   
BEFORE_BARr   r[   )	r?   bufr   	old_widthclutter_length	new_widthclear_widthlineline_lens	            rA   rE   zProgressBar.render_progress   s   ;;}}$**,"&**TZZdiitzzB>>

IDJ%d&?&?&ABNAv779AANRSI9$)C

:&

3/0!*"DJjj>>%..K

:((*D>>>!T^^h%>%DN

4

3+012wws| 4??""DODIITZZEBIIOO #rC   c                   | xj                   |z  c_         | j                   | j                   | j                  k\  rd| _        t        j                         | j                  z
  dk  ry t        j                         | _        | j                   r/t        j                         | j
                  z
  | j                   z  }n!t        j                         | j
                  z
  }| j                  dd  |gz   | _        | j                  d u| _        y )NTr]   i)r3   r2   r9   r5   r7   r6   r4   r8   )r?   n_stepssteps      rA   rX   zProgressBar.make_step(  s    G;;"txx4;;'> DMIIK$--'3.		
 88IIK$**,8D99;+D88BC=D6)D0rC   c                    ||| _         | xj                  |z  c_        | j                  | j                  k\  r3| j                  | j                         | j	                          d| _        yy)a  Update the progress bar by advancing a specified number of
        steps, and optionally set the ``current_item`` for this new
        position.

        :param n_steps: Number of steps to advance.
        :param current_item: Optional item to set as ``current_item``
            for the updated position.

        .. versionchanged:: 8.0
            Added the ``current_item`` optional parameter.

        .. versionchanged:: 8.0
            Only render when the number of steps meets the
            ``update_min_steps`` threshold.
        Nr   )r<   r)   r(   rX   rE   )r?   r   r<   s      rA   updatezProgressBar.update>  sb      # ,D!!W,!$$(=(==NN4445  "()D% >rC   c                .    d| _         d | _        d| _        y )NFT)r8   r<   r9   rF   s    rA   finishzProgressBar.finishX  s     rC   c              #  X  K   | j                   st        d      | j                  s| j                  E d{    y| j                  D ]=  }|| _        | j
                  dk(  r| j                          | | j                  d       ? | j                          | j                          y7 rw)zReturn a generator which yields the items added to the bar
        during construction, and updates the progress bar *after* the
        yielded block returns.
        rP   Nr   r   )	r;   rQ   r=   r1   r<   r)   rE   r   r   )r?   rvs     rA   rR   zProgressBar.generator]  s      ||OPP}}yy  ii 
$&!
 ,,1((*A
 KKM  " !s   3B*B(A3B*)N#r   z%(bar)sz  FTNFNNNNr      )"r@   zcabc.Iterable[V] | Noner2   z
int | Noner   r{   r   r{   r   r{   r   r{   r    boolr!   r   r"   bool | Noner#   r   r$   z)t.Callable[[V | None], str | None] | Noner%   
str | Noner&   zt.TextIO | Noner'   r   r(   rr   r*   rr   returnNone)r   zProgressBar[V])rK   ztype[BaseException] | NonerL   zBaseException | NonerM   zTracebackType | Noner   r   )r   zcabc.Iterator[V])r   r   r   r   )r   r_   r   r{   )r   rr   r   r   rI   )r   rr   r<   zV | Noner   r   )__name__
__module____qualname__rB   rG   rN   rS   rV   rJ   propertyr`   re   rg   rx   r|   r   r   r   rE   rX   r   r   rR    rC   rA   r   r   +   s    "%$(DH  $! !#E+)E+ E+ 	E+
 E+ E+ E+ E+ E+ "E+ E+ BE+ E+ E+ E+  !E+" #E+$ 
%E+N
, ( !	
 
   C C
 4 4
  
*0&6,\1,*4
#rC   r   c                  @    e Zd ZdZd	dZd
dZddZddZddZddZ	y)_PagerWriteraL  Wrap a pager's output stream to strip ANSI styling when colors are
    disabled.

    The wrapped stream is owned by the pager strategy that produced it, so this
    wrapper never closes it: ``_pipepager`` closes its pipe to signal EOF to the
    pager process, ``_tempfilepager`` closes and removes its temporary file, and
    ``_nullpager`` leaves an external stream such as ``sys.stdout`` untouched.

    The ``color`` attribute lets :func:`click.echo` detect that ANSI stripping
    is handled here, so it doesn't strip a second time (see
    :func:`._compat.should_strip_ansi`).
    c                     || _         || _        y rI   )_streamr'   )r?   streamr'   s      rA   rB   z_PagerWriter.__init__  s    
rC   c                f    | j                   st        |      }| j                  j                  |      S rI   )r'   r   r   rY   r?   texts     rA   rY   z_PagerWriter.write  s(    zzd#D||!!$''rC   c                4    |D ]  }| j                  |        y rI   )rY   )r?   linesr   s      rA   
writelinesz_PagerWriter.writelines  s     	DJJt	rC   c                8    | j                   j                          y rI   r   r[   rF   s    rA   r[   z_PagerWriter.flush  s    rC   c                8    | j                   j                          y rI   r   rF   s    rA   closez_PagerWriter.close  s     	rC   c                .    t        | j                  |      S rI   )getattrr   )r?   names     rA   __getattr__z_PagerWriter.__getattr__  s    t||T**rC   N)r   t.TextIOr'   r   r   r   )r   r{   r   rr   )r   zcabc.Iterable[str]r   r   r   )r   r{   r   zt.Any)
r   r   r   __doc__rB   rY   r   r[   r   r   r   rC   rA   r   r     s%    (
+rC   r   c                z    | syddl }|j                  | d         }|syt        |      j                         | dd fS )a  Resolve a pager ``argv`` to an absolute command path and its parameters.

    The command is looked up with :func:`shutil.which`, which the
    :mod:`subprocess` docs recommend on every platform for an unqualified name:
    https://docs.python.org/3/library/subprocess.html#popen-constructor

    Returns ``None`` when there is no command to run or it is not on the path,
    leaving the caller to pick a fallback.
    Nr   r   )r   whichr   absolute)	cmd_partsr   cmd_filepaths      rA   _resolve_pager_commandr     sF     <<	!-L &&()AB-77rC   c                2   t               }|
t               }t        t        j                        rt        |      st        ||       S t        j                  t        j                  j                  dd            }|rt        }n\t        j                  j                  d      dv rt        ||       S t        xs t        j                  j                  d      }|rdgndg}t        |      }|t        ||       S |\  }}|rt        |||       S t!        |||       S )z2Decide what method to use for paging through text.PAGERr   TERM)dumbemacsos2moreless)r	   r   r   sysstdin
_nullpagershlexsplitosenvirongetr   platform
startswithr   _tempfilepager
_pipepager)r'   stdoutpager_cmd_partsuse_tempfileresolvedcmd_path
cmd_paramss          rA   _pager_contextmanagerr     s     "#F ~#))F6N&%(( kk"**..""=>O ::>>&!%66fe,,<cll55e<&26(%o6H&%((#Hjh
E::h
E22rC   c              #    K   t        |       5 \  }} t        |t        |             }	 t        j                  t        j
                  |       |j                          	 ddd       y# |j                          w xY w# 1 sw Y   yxY ww)zContext manager.

    Yields a writable file-like object which can be used as an output pager.

    .. versionadded:: 8.4.0

    :param color: controls if the pager supports ANSI colors or not.  The
                  default is autodetection.
    )r'   N)r   r   r   r.   r/   TextIOr[   )r'   r   writers      rA   get_pager_filer     sq      
U	+ 
 fDK8	&&6**LLN
 
 LLN
 
s3   BA?&A*A?!	B*A<<A??BBc                D   	 t        j                  |       }||z   }|D ]a  }|j                  d      r|j	                         dk(  s( y|j                  d      s<t        |      dkD  sKd|dd j	                         v sa y y# t        $ r | j                         }Y w xY w)	aw  Detect a raw-control-characters request in a ``less`` invocation.

    Parses the tokens of the ``LESS`` environment variable and the command
    line: only short-option clusters (``-R``, ``-rX``, ``-XrY``) and the
    ``--raw-control-chars`` long option request raw mode. Filenames and
    long-option values may carry the letter ``r`` without being such a
    request.
    z--z--raw-control-charsT-r   rNF)r   r   
ValueErrorr   casefoldrd   )less_envr   
env_tokenstokenstokens        rA   _less_uses_raw_moder     s    &[[*

 *$F D!~~#88c"s5zA~eABi((**   & ^^%
&s   B BBc              #  @  K   ddl }t        t        j                        }| j                  }t
        r|j                         }|?|dk(  r:t        j                  j                  dd      }t        ||      rd}n|s	|sd|d<   d}|j                  t        |       g|z   d|j                  |d	d
      }t        j                  t        j                  |j                        }	 ||f 	 |j'                          	 	 |j)                          y# t         $ r Y /t"        $ r}	|j%                          |	d}	~	ww xY w# t         $ r Y Kw xY w# t*        $ r Y nw xY w^# 	 |j'                          n# t         $ r Y nw xY w	 	 |j)                          w # t*        $ r Y nw xY w"xY ww)a$  Page through text by feeding it to another program.

    Invokes the pager via :class:`subprocess.Popen` with an ``argv`` list.

    Invoking a pager through this might support colors: if piping to
    ``less`` and the user hasn't decided on colors, ``LESS=-R`` is set
    automatically.
    r   Nr   LESSr   T-RFreplace)shellr   enverrorsr   )
subprocessdictr   r   stemr   r   r   r   Popenr{   PIPEr.   r/   r   r   BrokenPipeError	Exception	terminater   waitKeyboardInterrupt)
r   r   r'   r  r   cmd_namer   cr   es
             rA   r   r   $  s      rzz
C }}H

 $$&}V+::>>&"-x4E*CKE	X*$oo 	 	A FF188QWW%E#Ul	KKM  C   
 	
  		 %  	KKM  		   %  s   CF D
 'D7 7F9E 	F
	D4E D4D//D44E 7	E FEF	EFEFFE)(F)	E52F4E55F:F
F	FFFFFc              #  "  K   ddl }ddl}t        t        j                        }|j                  d|dd      }	 t        j                  t        j                  |      |f |j                          |j                          |j                  t        |       g||j                         |j                          t        j                  |j                         y# |j                          t        j                  |j                         w xY ww)a8  Page through text by invoking a program on a temporary file.

    Used as the primary pager strategy on Windows (where piping to
    ``more`` adds spurious ``\r\n``), and as a fallback on other
    platforms. The command is invoked with any parameters from ``PAGER``
    followed by the temporary file name.
    r   Nwr   F)modeencodingr  delete)r  tempfiler   r   r   NamedTemporaryFiler.   r/   r   r[   r   callr{   r   r   unlink)r   r   r'   r  r  r  fs          rA   r   r   {  s       ,H 	##8Ie 	$ 	AffQXXq!5((				X<<QVV<= 	
	
		!&& 	
	
		!&&s   7DA1C +0D1DDc              #     K   | |f yw)a&  Simply print unformatted text. This is the ultimate fallback.

    The stream comes from elsewhere (typically ``sys.stdout``), so its lifecycle
    is left untouched: :class:`_PagerWriter` never closes what it wraps, and it
    is the only thing :func:`get_pager_file` hands to the caller.
    Nr   )r   r'   s     rA   r   r     s      %-s   
c                      e Zd Z	 	 	 	 d	 	 	 	 	 	 	 	 	 d	dZd
dZddZej                  dd       Zej                  dd       ZddZy)EditorNc                <    || _         || _        || _        || _        y rI   )editorr   require_save	extension)r?   r  r   r  r  s        rA   rB   zEditor.__init__  s!     ("rC   c                    | j                   | j                   S dD ]'  }t        j                  j                  |      }|s%|c S  t        ryddlm} dD ]  } ||      |c S  y)N)VISUALEDITORnotepadr   )r   )zsensible-editorvimnanovi)r  r   r   r   r   r   r   )r?   keyr   r   r  s        rA   
get_editorzEditor.get_editor  sm    ;;";;% 	C$B		  6 	FV}(	 rC   c                   ddl }ddl}| j                         }d}| j                  r9t        j
                  j                         }|j                  | j                         	 |j                   |j                  |      t        |      z   |      }|j                         }|dk7  r$t        t        d      j                  |            y# t        $ r+}t        t        d      j                  ||            |d}~ww xY w)z Open files in the user's editor.r   N)argsr   z{editor}: Editing failed)r  z{editor}: Editing failed: {e})r  r  )r   r  r(  r   r   r   copyr   r  r   r   r
  r   rt   rs   OSError)	r?   	filenamesr   r  r  r   r  	exit_coder  s	            rA   
edit_fileszEditor.edit_files  s    ")-88jjoo'GNN488$	    U[[(4	?: ! A IA~$01888G    	 129919M	s   !A(C
 
	C>&C99C>c                     y rI   r   r   s     rA   editzEditor.edit  s    =@rC   c                     y rI   r   r   s     rA   r1  zEditor.edit  s    47rC   c                   dd l }|d}njt        |t        t        f      r|}nQ|r|j	                  d      s|dz  }t
        r"|j                  dd      j                  d      }n|j                  d      }|j                  d| j                        \  }}	 t        j                  |d	      5 }|j                  |       d d d        t        j                  |t        j                  j                  |      t        j                  j!                  |      d
z
  f       t        j                  j!                  |      }| j#                  |f       | j$                  r9t        j                  j!                  |      |k(  r	 t        j&                  |       y t)        |d      5 }|j+                         }d d d        t        |t        t        f      rt        j&                  |       S j-                  d      j                  dd      t        j&                  |       S # 1 sw Y   ]xY w# 1 sw Y   yxY w# t        j&                  |       w xY w)Nr   rC   r   z
z	utf-8-sigzutf-8zeditor-)prefixsuffixwb   rb)r  
isinstancebytes	bytearrayendswithr   r   encodemkstempr  r   fdopenrY   utimepathgetatimegetmtimer/  r  r  openreaddecode)	r?   r   r  datafdr   r  	timestampr   s	            rA   r1  zEditor.edit  s   <&)Dui01DDMM$/||D&188E{{7+##9T^^#LD	2t$  HHTBGG,,T2BGG4D4DT4JQ4NOP ((.IOOTG$  RWW%5%5d%;y%H IIdO dD! QVVX $	 23 IIdO 99[)11&$?IIdO3 "  IIdOsI   H1 +H=B<H1 H1 H%-H1 " H1 H"H1 %H.*H1 1I)NNTz.txt)
r  r   r   zcabc.Mapping[str, str] | Noner  r   r  r{   r   r   r   )r-  z%cabc.Iterable[str | os.PathLike[str]]r   r   )r   zbytes | bytearrayr   zbytes | None)r   r   r   r   )r   zstr | bytes | bytearray | Noner   zstr | bytes | None)	r   r   r   rB   r(  r/  r.   overloadr1  r   rC   rA   r  r    s|     "-1!
#
# +
# 	
#
 
# 

#"< ZZ@ @ ZZ7 7-rC   r  c                6   dd l }dd}t        j                  dk(  r~dg}|r|j                  d       |r|j                  d       |j                   ||              t	        dd      }	 |j                  ||	      j                         |j                          S t        r8|r ||       } d
d| g}	 |j                  |      S 	 t        j                  |        yt        re|r* ||       } dt        j                  j                  |       g}n'dg}|r|j                  d       |j                  |        	 |j                  |      S 	 |r*t        j                  j                   ||             xs d} n ||       } |j                  d| g      }|r|j                         S y# |j                          w xY w# t        $ r Y yw xY w# t        $ r Y yw xY w# t        $ r Y yw xY w# t        $ r/ | j!                  d      r|s|sdd l}|j	                  |        Y yY yw xY w)Nr   c                J    ddl m} | j                  d      r || dd        } | S )Nr   )unquotezfile://   )urllib.parserM  r   )urlrM  s     rA   _unquote_filezopen_url.<locals>._unquote_file"  s&    (>>)$#ab'"C
rC   darwinrD  z-Wr   z	/dev/nullr  )stderrexplorerz/select,   cygstartz-w.zxdg-open)zhttp://zhttps://r   )rP  r{   r   r{   )r  r   r   r   rD  r  r
  r   r   r  r,  r   	startfiler
   rA  dirnamer   
webbrowser)	rP  r
  locater  rQ  r*  nullr  rZ  s	            rA   open_urlr]    s    ||xxKKKKM#&'K%	##D#6;;=JJL	$C
C0D!t,,S! 	$C 45D<DD!KK	??4((
''//-"45<C$Cj#./668OM JJL  
    		  >>126$OOC sU   ) F 0F3 G 2G AG  F03	F?>F?	GG	GG 3HHc                x    | dk(  r
t               | dk(  rt        s
t               | dk(  rt        r
t               y y )N)r  r   EOFError)chs    rA   _translate_ch_to_excrd  e  s;    	V|!!	V|Cj	V|j |rC   win32c               #     K   d y w)Nr   r   r   rC   rA   raw_terminalrg  s  s     s   c                8   | r<t        j                  t         j                  g t        f   t        j
                        }n;t        j                  t         j                  g t        f   t        j                        } |       }|dv r
| |       z  }t        |       |S )N)    à)r.   r/   Callabler{   msvcrtgetwchegetwchrd  )r   funcr   s      rA   getcharrp  w  ss    > 66!**RW-v~~>D66!**RW-v}}=DV!! $&LBR 	rC   c               #    K   t        t        j                        st        d      } | j	                         }n t        j                  j	                         }d } 	 t        j                  |      }	 t        j                  |       | t        j                  |t
        j                  |       t        j                  j                          | | j                          y y # t        j                  |t
        j                  |       t        j                  j                          | | j                          w w xY w# t
        j                  $ r Y y w xY ww)Nz/dev/tty)r   r   r   rD  filenotermios	tcgetattrttysetraw	tcsetattr	TCSADRAINr   r[   r   error)r  rH  old_settingss      rA   rg  rg    s     
 cii Z AB!!#BA	",,R0L

2!!"g&7&7F

  "=GGI ! !!"g&7&7F

  "=GGI !}} 		sD   AED: /C AD: EAD77D: :EEEEc                J   t               5 }t        j                  |d      j                  t	        t
        j                        d      }| r8t        t
        j                        rt
        j                  j                  |       t        |       |cd d d        S # 1 sw Y   y xY w)N    r   )rg  r   rE  rF  r   r   r   r   r   rY   rd  )r   rH  rc  s      rA   rp  rp    so    ^ 	rR''(9#))(DiPBszz*

  $ $	 	 	s   BBB")r   	list[str]r   ztuple[Path, list[str]] | NonerI   )r'   r   r   z.t.ContextManager[tuple[t.TextIO, bool | None]])r'   r   r   z!t.Generator[t.TextIO, None, None])r   r{   r   r}  r   r   )r   r   r   r}  r'   r   r   (t.Iterator[tuple[t.TextIO, bool | None]])r   r   r'   r   r   r~  )FF)rP  r{   r
  r   r[  r   r   rr   )rc  r{   r   r   )r   zcabc.Iterator[int])r   r   r   r{   );r   
__future__r   collections.abcabccabc
contextlibr   r   r   r   r5   typingr.   r   rt   ior   pathlibr   typesr   _compatr	   r
   r   r   r   r   r   
exceptionsr   utilsr   TypeVarr   r   r   rZ   Genericr   r   r   r   contextmanagerr   r   r   r   r   r  r]  rd  r   rl  rg  rp  rs  ru  r   rC   rA   <module>r     s   #    	  
        )  &     & AIIcN 77d?JIJIQ#!))A, Q#h
%+ %+P8: *3*33*3Z  .8 @DSS )S2=S-S Sl @D )2=- D +/		(	-	 	q qhCL <<7 ,^  4rC   