+
    jHàjf ã                  óà  a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIHtHt RÈtR]R&   RRR]/R R	 lltR
sR R ltR R ltR R ltR R ltR R ltR R ltRtRÉtRÊtRËt. ]ORN5tR R ltR R ltR R ltRt RÌt!R t"R!t#R" R# lt$R$ R% lt%R& R' lt&R( R) lt'RÍR* R+ llt(R, R- lt)]PT                  ! R.4      t+R/ R0 lt,R1 R2 lt-R3 R4 lt.R5 R6 lt/R7t0R8t1R
s2]3! ]Ph                  ]Pj                  ]Pl                  ]Pn                  04      t8R9 R: lt9]Pt                  R; R< l4       t; ! R= R>]<4      t=]3! 0 R?kR@kRAkRBkRCkRDkREkRFkRGkRHkRIkRJkRKkRLkRMkRNkROkRPkRQkRRkRSkRTkRUkRVkRWkRXkRYkRZkR[kR\kR]kR^kR_kR`kRakRbkRckRdkRekRfkRgkRhkRikRjkRkkRlkRmkRnk4      t>]3! 0 RÎm4      t?RÏt@Ro Rp ltARq Rr ltBRs Rt ltCRu Rv ltDRw Rx ltERy Rz ltFR{ R| ltGRÐR}R
/R~ R llltH]3! R€RN04      tIR� R‚ ltJRƒ R„ ltKR… R† ltLR‡ Rˆ ltMR‰ RŠ ltNR‹ RŒ ltOR� RŽ ltPR� R� ltQRÐR}R
/R‘ R’ llltRR“tSR” R• ltTRÐR–R
/R— R˜ llltU]Pt                  R™ Rš l4       tVR› Rœ ltWR� Rž ltXRŸ R  ltYR¡ R¢ ltZR£ R¤ lt[R¥ R¦ lt\R§ R¨ lt]R–R
/R© Rª llt^R« R¬ lt_R­ R® lt`R¯ R° ltaR± R² ltbR³ R´ ltcRÐRµ R¶ lltdR· R¸ lteR¹ Rº ltfR» R¼ ltgR½ R¾ lthR¿ RÀ ltiRÁ RÂ ltjRÑRÃR
/RÄ RÅ llltk^tlRÆ RÇ ltmR# )ÒzBStartup requests for PM recovery and rescue of orphaned launchers.)ÚannotationsN)ÚPathÚPurePosixPathútuple[int, ...]ÚQUARANTINE_RESTORE_BACKOFF_MSÚstreamÚ
backoff_msc               ó$   € V ^8„  d   QhRRRRRR/# )é   Úmovedzlist[tuple[Path, Path]]r   r   Úreturn© )Úformats   "Ú?/home/ubuntu/.hermes/hermes-agent/hermes_cli/_early_recovery.pyÚ__annotate__r      s&   € ÷ )ñ )Ø"ð)àð)ð ñ)ó    c               ó>  € Vf   \         P                  p. pV  EFc  w  rERpV F�  p \        P                  P	                  V4      '       g&   \        P                  P	                  V4      '       g   Rp MAV'       d   \
        P                  ! VR,          4       \        P                  ! WT4       Rp M	  Vf   K£  VP                  WE34       \        P                  P                  \        V4      4      p	V	P                  4       P                  R4      '       d   V	RR MT	p
\        RV	 RVP                  P                    R\        P                  P                  \        V4      4       RV
 RV R	V R
2VR7       EKf  	  V#   \         d   pTp Rp?EKt  Rp?ii ; i)a>  Rename quarantined shims back, retrying a lock instead of giving up.

A pair is not a failure when ``original`` already exists or ``quarantined`` has gone: the
installer wrote a fresh shim, or a concurrent sweep won the race. Both are silent, so two
processes sweeping the same orphan cannot produce a spurious error.
Ng     @�@ú.exeu     âœ– FAILED to restore ú (u!   ) â€” it is still quarantined as z.
    `zZ` will NOT be on PATH until it is put back. Run this, then re-run the update:
      move "z" "Ú"©Úfileéüÿÿÿ)ÚsysÚstderrÚosÚpathÚexistsÚtimeÚsleepÚrenameÚOSErrorÚappendÚbasenameÚstrÚlowerÚendswithÚprintÚ	__class__Ú__name__)r   r   r   ÚfailedÚoriginalÚquarantinedÚlast_excÚdelay_msÚexcÚnameÚstems   &$$        r   Úrestore_quarantined_shimsr2      sp  € ð ‚~Ü—‘ˆØ&(€FÜ!&ÑˆØ#'ˆÛ"ˆHð
Ü—7‘7—>‘> (×+Ò+´2·7±7·>±>À+×3NÒ3NØ#�HÙßÜ—J’J˜x¨&Õ0Ô1Ü—	’	˜+Ô0Ø�Ùñ #ð ÒÙØ�‰�xÐ-Ô.Ü�w‰w×Ñ¤ H£Ó.ˆØ ŸJ™J›L×1Ñ1°&×9Ò9ˆt�C�R‰y¸tˆÜØ& t fð -Ø×"Ñ"×+Ñ+Ð,ð -Ü—'‘'×"Ñ"¤3 {Ó#3Ó4Ð5ð 6Ø�6ð à&˜- s¨8¨*°Að7ð ÷	
ð 	
ñ' "'ð8 €Møô! ô Ø—ûðús*   §A	FÁ1FÁ5FÁ=5FÆFÆFÆFFc               ó   € V ^8„  d   QhRR/# )r
   r   Úboolr   )r   s   "r   r   r   F   s   € ÷ Bñ B¨dñ Br   c                 óT   € \         ;'       g    \        P                  R,          R.8H  # )ub  True inside any ``hermes update`` process (and its import probes).

Every dotenv load in the process â€” ``hermes_cli.main``, ``run_agent``, ``cli`` â€” consults
this, so the updater never resolves external secret sources: on Windows they map
``cryptography._rust.pyd`` into the process replacing that venv, and everywhere a slow
``op``/``bws``/command helper (up to 120s per source) would run inside the updater's
120s critical-module import probe and be reported as an import-health timeout.
Profile flags are stripped before ``hermes_cli.main`` loads dotenv, so ``argv[1]`` is
the authoritative subcommand.
:é   r
   NÚupdate)Ú_UPDATE_RETRY_RECOVEREDr   Úargvr   r   r   Ú$_should_skip_external_secret_sourcesr:   F   s!   € ô #×AÐA¤c§h¡h¨s¥m¸°zÑ&AÐAr   c               ó   € V ^8„  d   QhRR/# )r
   r   r   r   )r   s   "r   r   r   T   s   € ÷ 2ñ 2�tñ 2r   c                 ód   € \        \        4      P                  4       P                  P                  # ©N)r   Ú__file__ÚresolveÚparentr   r   r   Ú_project_rootrA   T   s!   € Ü”‹>×!Ñ!Ó#×*Ñ*×1Ñ1Ð1r   c               ó    € V ^8„  d   QhRRRR/# )r
   Úmarker_pathr   r   Úintr   )r   s   "r   r   r   X   s   € ÷ ñ  tð °ñ r   c                óZ  €  V P                  RRR7      P                  4       pT'       g   ^ #  ^ RIpTP	                  T4      P                  R^ 4      p\        T4      \        Jd   \        T4      h\        ^ T4      #   \         d     ^ # i ; i  \        \        \        3 d†    \        TP                  4       4       Fd  pTP                  R4      w  rVpT'       g   K!  TP                  4       R8X  g   K8   \        ^ \        T4      4      u u #   \         d       ^ # i ; i	   ^ # i ; i)uO   Attempt counter from a marker's opportunistic JSON body; corrupt/missing â†’ 0.ú	utf-8-sigÚreplace©ÚencodingÚerrorsNÚattemptsÚ=)Ú	read_textÚstripr!   ÚjsonÚloadsÚgetÚtyperD   Ú	TypeErrorÚmaxÚ
ValueErrorÚAttributeErrorÚreversedÚ
splitlinesÚ	partition)rC   ÚrawrO   rK   ÚlineÚkeyÚ	separatorÚvalues   &       r   Ú_read_marker_attemptsr_   X   s  € ðØ×#Ñ#¨[ÀÐ#ÓK×QÑQÓSˆ÷ ÙðÛà—:‘:˜c“?×&Ñ& z°1Ó5ˆÜ�‹>¤Ó$Ü˜HÓ%Ð%Ü�1�hÓÐøô ô Úðûô œ¬	Ð2ô Ü˜SŸ^™^Ó-Ö.ˆDØ$(§N¡N°3Ó$7Ñ!ˆC˜Eß‰y˜SŸY™Y›[¨JÖ6ðÜ˜q¤# e£*Ó-Ô-øÜ!ô Üðúñ /ò ðúsN   ‚!A= ®AB Á=BÂBÂAD*ÃD*Ã7DÄD*ÄD!ÄD*Ä D!Ä!D*Ä)D*c               ó    € V ^8„  d   QhRRRR/# )r
   ÚpidrD   r   ú
str | Noner   )r   s   "r   r   r   r   s   € ÷  ñ  ˜ð   
ñ  r   c           
     ó†  € \         P                  R8X  dy    \        RV  R2R4      ;_uu_ 4       pVP                  4       pRRR4       XP                  R4      pT^ 8  d   R# Y#^,           T^,            P                  RR4      ;'       g    R# \         P                  R	8X  dX    \        P                  ! R
RRR\        V 4      .RRRR^RR7      P                  pTP                  4       R,          ;'       g    R# R#   + '       g   i     LÄ; i  \         d     R# i ; i  \        \        P                  3 d     R# i ; i)uü  Single-letter process state (``ps`` style), or ``None`` when unknowable.

``os.kill(pid, 0)`` also succeeds for a ZOMBIE â€” a process that exited but
whose parent has not reaped it yet. Reading the state lets callers treat a
zombie as dead, so a crashed update stage lingering under an un-reaping
parent cannot keep a stale update marker "live" for the whole age ceiling
(#77259, #120635, #125932). Best-effort and stdlib-only: on any failure the
answer is ``None`` and callers keep their signal-0 verdict.
Úlinuxz/proc/z/statÚrbNó   )ÚasciirG   ÚdarwinÚpsú-ozstat=ú-pTúutf-8F)Úcapture_outputÚtextrI   rJ   ÚtimeoutÚcheckºNr6   N)r   ÚplatformÚopenÚreadr!   ÚrfindÚdecodeÚ
subprocessÚrunr$   ÚstdoutÚSubprocessErrorrN   )ra   ÚfhÚstatÚcomm_endÚouts   &    r   Ú_process_stater   r   s  € ô ‡|�|�wÔð	Ü˜˜s˜e 5Ð)¨4×0Ô0°BØ—w‘w“y�÷ 1ð —:‘:˜dÓ#ˆØ�aŒ<ÙØ˜q•L 8¨a¥<Ð0×7Ñ7¸ÀÓK×SÐSÈtÐSÜ
‡|�|�xÔð	Ü—.’.Ø�t˜W d¬C°«HÐ5Ø#¨$¸ÈØ ô÷ ‰fð	 ð �y‰y‹{˜2�×&Ð& $Ð&Ù÷) 1×0ûäô 	Úð	ûô œ×3Ñ3Ð4ô 	Úð	ús@   —D ¯C<Á D Â$5D! Ã<D	ÄD ÄD ÄDÄDÄ!E Ä?E c               ó    € V ^8„  d   QhRRRR/# ©r
   ra   rD   r   r4   r   )r   s   "r   r   r   •   s   € ÷ *ñ *˜ð * ñ *r   c                óò  € V ^ 8:  d   R# \         P                  R8X  Ed6    ^ RIpRpVP                  RRR7      pVP                  VP
                  VP                  .VP                  n        VP                  VP                  n	        VP                  VP                  .VP                  n        VP                  VP                  n	        VP                  .VP                  n        VP
                  VP                  n	        VP                  VRV 4      pV'       g   VP                  4       ^8H  #  VP                  V^ 4      R8H  VP                  V4       #  \        P                  ! V ^ 4       \'        T 4      pTe(   TP)                  4       P+                  R	4      '       d   R# R#   TP                  T4       i ; i  \         d     R# i ; i  \          d     R# \"         d     R# \$         d     R# i ; i)
uL  Best-effort stdlib-only process liveness probe.

``os.kill(pid, 0)`` is not a no-op on Windows, so use the Win32 process handle API there. An
access-denied result counts as live: racing an elevated updater is worse than postponing
recovery for one launch. A zombie (exited, un-reaped) counts as dead â€” see
:func:`_process_state`.
FÚwin32Ni   Úkernel32T)Úuse_last_errori  ÚZ)r   rr   ÚctypesÚWinDLLÚc_ulongÚc_intÚOpenProcessÚargtypesÚc_void_pÚrestypeÚWaitForSingleObjectÚCloseHandleÚget_last_errorÚ	Exceptionr   ÚkillÚProcessLookupErrorÚPermissionErrorr!   r   ÚupperÚ
startswith)ra   r‡   Úsynchronizer„   ÚhandleÚstates   &     r   Ú_pid_is_runningr›   •   sŸ  € ð ˆa„xÙÜ
‡|�|�wÕð	Ûà$ˆKØ—}‘} ZÀ�}ÓEˆHØ-3¯^©^¸V¿\¹\È6Ï>É>Ð,ZˆH× Ñ Ô)Ø+1¯?©?ˆH× Ñ Ô(Ø5;·_±_ÀfÇnÁnÐ4UˆH×(Ñ(Ô1Ø39·>±>ˆH×(Ñ(Ô0Ø-3¯_©_Ð,=ˆH× Ñ Ô)Ø+1¯<©<ˆH× Ñ Ô(Ø×)Ñ)¨+°u¸cÓBˆFßØ×,Ñ,Ó.°!Ñ3Ð3ð-Ø×3Ñ3°F¸AÓ>À#ÑEà×$Ñ$ VÕ,ðÜ
�Š��QŒô ˜3Ó€EØÒ˜UŸ[™[›]×5Ñ5°c×:Ò:ÙÙøð ×$Ñ$ VÕ,ûÜô 	Úð	ûô ô ÚÜô ÚÜô ÚðúsZ   ¡C9F; ÄF; Ä/F% ÅF; ÅG Æ%F8Æ8F; Æ;G
Ç	G
ÇG6ÇG6Ç$G6Ç(G6Ç1G6Ç5G6c               ó    € V ^8„  d   QhRRRR/# )r
   Úmarkerr   r   r4   r   )r   s   "r   r   r   Â   s   € ÷ ñ  $ð ¨4ñ r   c                óV  €  V P                  RRR7      pTP                  4        F[  pTP                  R4      w  r4pT'       g   K!  TP	                  4       R8X  g   K8   \        \        TP	                  4       4      4      u # 	  R#   \         d     R# i ; i  \         d      R# i ; i)z?True when a legacy update marker names a process still running.rF   rG   rH   FrL   ra   )rM   r!   rX   rY   rN   r›   rD   rU   )r�   Úbodyr[   r\   r]   r^   s   &     r   Ú_marker_owner_is_liver    Â   s›   € ðØ×Ñ¨¸YÐÓGˆð —‘Ö!ˆØ $§¡¨sÓ 3Ñˆ˜ß‰9˜Ÿ™›¨Ö-ðÜ&¤s¨5¯;©;«=Ó'9Ó:Ò:ñ	 "ñ øô ô Úðûô ô Ûðús#   ‚B Á!BÂBÂBÂB(Â'B(zhermes-update-pullÚ120000c               ó    € V ^8„  d   QhRRRR/# )r
   Úrootr   r   rb   r   )r   s   "r   r   r   à   s   € ÷ ñ  Dð ¨Zñ r   c                ó@  € \        V 4      p\         Fˆ  pW,          pVP                  4       '       g   K#  VR8X  d&   VR,          P                  4       '       d   Ru # Ru # VR8X  d    R# VP                  R4      P	                  4       P                  RR4      u # 	  R	# )
zEReturn the active Git operation currently controlling *root*, if any.úrebase-applyÚapplyingÚamÚrebaseúrebase-mergeÚ_HEADÚ_Ú-N)Ú_git_dirÚ_GIT_OPERATION_IN_PROGRESSr   Úremovesuffixr%   rG   )r£   Úgit_dirr�   rš   s   &   r   Úgit_operation_in_progressr±   à   sˆ   € ä�t‹n€Gß,ˆØÕ ˆØ�|‰|�~Š~ÙØ�^Ô#Ø! JÕ.×6Ñ6×8Ò8�4ÒF¸hÒFØ�^Ô#ÚØ×"Ñ" 7Ó+×1Ñ1Ó3×;Ñ;¸CÀÓEÒEñ -ñ r   c               ó    € V ^8„  d   QhRRRR/# ©r
   r£   r   r   r   )r   s   "r   r   r   ï   s   € ÷ ñ �4ð ˜Dñ r   c                óö   € V R,          pVP                  4       '       dZ   VP                  RR7      P                  4       pVP                  R4      '       d#   W\	        R4      R P                  4       ,          # V# )zW``root``'s git dir: ``.git`` itself, or where a linked worktree's ``.git`` file points.z.gitrF   ©rI   zgitdir:N)Úis_filerM   rN   r—   Úlen)r£   Údot_gitrn   s   &  r   r­   r­   ï   se   € à�V�m€GØ‡�×ÒØ× Ñ ¨+Ð Ó6×<Ñ<Ó>ˆØ�?‰?˜9×%Ò%Øœs 9›~˜Ð/×5Ñ5Ó7Õ7Ð7Ø€Nr   c               ó    € V ^8„  d   QhRRRR/# r³   r   )r   s   "r   r   r   ù   s   € ÷ 4ñ 4 $ð 4¨4ñ 4r   c                ó.   € \        V 4      \        ,          # r=   )r­   ÚINTERRUPTED_PULL_MARKER©r£   s   &r   Úinterrupted_pull_markerr½   ù   s   € Ü�D‹>Ô3Õ3Ð3r   zhermes-update-recoveryÚMANIFESTzhermes_cli/__init__.pyc               ó$   € V ^8„  d   QhRRRRRR/# )r
   r£   r   Úprer$   r   r   )r   s   "r   r   r     s!   € ÷ 7ñ 7˜tð 7¨#ð 7°$ñ 7r   c                ó|   € \        V4      '       g   \        R V: 24      h\        V 4      \        ,          V,          # )znot a commit id: )Úis_object_idrU   r­   ÚRECOVERY_CLOSURE_DIR)r£   rÀ   s   &&r   Úrecovery_closure_dirrÄ     s5   € Ü˜×ÒÜÐ,¨S©GÐ4Ó5Ð5Ü�D‹>Ô0Õ0°3Õ6Ð6r   c               ó    € V ^8„  d   QhRRRR/# ©r
   r^   r$   r   r4   r   )r   s   "r   r   r     s   € ÷ Iñ I˜ð I ñ Ir   c                óV   € \        \        P                  ! R T ;'       g    R4      4      # )z[0-9a-f]{40}|[0-9a-f]{64}Ú )r4   ÚreÚ	fullmatch)r^   s   &r   rÂ   rÂ     s   € Ü”—’Ð9¸5¿;¸;ÀBÓGÓHÐHr   c               ó$   € V ^8„  d   QhRRRRRR/# )r
   ÚdataÚbytesÚliker$   r   r   )r   s   "r   r   r     s&   € ÷ mñ m�%ð m˜sð m sñ mr   c                óœ   € ^ RI pTP                  \        V4      ^(8X  d   RMRR\        V 4      ,          V ,           4      P                  4       # )z[Git's object id of a blob holding ``data``, in ``like``'s object format (SHA-1 or SHA-256).NÚsha1Úsha256s   blob %d )ÚhashlibÚnewr·   Ú	hexdigest)rÌ   rÎ   rÒ   s   && r   Úblob_idrÕ     s;   € ãà�;‰;¤ T£¨b¤‘v°hÀÌsÐSWËyÕ@XÐ[_Õ@_Ó`×jÑjÓlÐlr   c               ó$   € V ^8„  d   QhRRRRRR/# )r
   Úclosurer   rÀ   r$   r   r4   r   )r   s   "r   r   r     s!   € ÷ 	ñ 	 tð 	°#ð 	¸$ñ 	r   c                óæ  a a€  \        R S \        ,          P                  RR7      P                  4        4       4      p\	        V4      0 \
        m\        k8H  ;'       d{    V\        ,          \        RS4      8H  ;'       dY    \        ;QJ d.    V V3R lVP                  4        4       F  '       d   K   R# 	  R# ! V V3R lVP                  4        4       4      #   \        \        3 d     R# i ; i)zZEvery closure file present with exactly the bytes its manifest names, and nothing missing.c              3  óX   "  € T F   qP                  R ^4      RRR1,          x € K"  	  R# 5i)Ú Néÿÿÿÿ)Úsplit©Ú.0r[   s   & r   Ú	<genexpr>Ú,recovery_closure_verified.<locals>.<genexpr>"  s-   é € ð jÙhð 48—j‘j  aÓ(©¨2¨×.Ò.Ûhùs   ‚(*rF   rµ   r   c              3  óp   <"  € T F+  w  r\        SV,          P                  4       S4      V8H  x € K-  	  R # 5ir=   )rÕ   Ú
read_bytes)rÞ   ÚrelÚoidr×   rÀ   s   &  €€r   rß   rà   &  s.   øé € ÐiÑZhÉhÈcœ ¨3¥× :Ñ :Ó <¸cÓBÀcÖIÓZhùs   ƒ36FT)ÚdictÚRECOVERY_CLOSURE_MANIFESTrM   rX   ÚsetÚRECOVERY_CLOSUREÚRECOVERY_CLOSURE_INITrÕ   ÚallÚitemsr!   rU   )r×   rÀ   Úlisteds   ff r   Úrecovery_closure_verifiedrí     sæ   ù€ ðÜñ jØÔ!:Õ:×EÑEÈ{ÐEÓ[×fÑfÔhójó jˆä�F“ÐIÔ!1ÐIÔ3HÐIÑI÷ jð jØÔ0Õ1´W¸SÀ#Ó5FÑF÷jð jç“CÕiÐZ`×ZfÑZfÔZhÓi—C”Cð	kâð	kàÕiÐZ`×ZfÑZfÔZhÓiÓið	køô ”ZÐ ô Úðús6   „AC Á !C ÂC Â#C Â4C Â7C Â;C ÃC0Ã/C0c               ó    € V ^8„  d   QhRRRR/# )r
   Úrecorded_by_updaterr$   r   r   )r   s   "r   r   r   +  s   € ÷ ñ ¨ð °cñ r   c           	     ó~  € ^ RI pV '       d9   \        P                  P                  V 4      '       d   \	        V 4      '       d   V # VP                  R4      pV'       d   V# \        P                  ! \        4      ;_uu_ 4        ^ RI	p^ RI	H
p ^ RIHp VP                  RRR7      pVeN   VP                  e@   VP                  P                  4       '       d    \!        VP                  4      uuRRR4       # VP#                  R4      VP%                  4       r‡V! VP'                  4       4      P)                  R4      p	VP                  VP+                  4       VP-                  W˜4      ,          V4      p
V
e,   V
P                  4       '       d   \!        V
4      uuRRR4       # RRR4       R#   + '       g   i     R# ; i)aÈ  The git ``hermes update`` runs (``_subprocess_compat.expose_pm_git``), without installing it.

The absolute git the killed updater recorded in its marker first: finding PM's copy needs
``pm``, which imports ``hermes_constants``, and a merge killed while writing that module (or
anything else ``pm`` imports) leaves only this path to the repair. Then PATH's git. A Windows install whose only git is the one install.ps1 staged in PM's store
has none on PATH until the updater exposes it, so this falls back to that copy: PM's recorded
entry, or the lockfile's pinned entry the installer extracted without recording it. A bare
``git`` there dies with WinError 2 and the torn tree this repair exists for stays torn.
NÚgit)Úpaths)ÚLockfileT)Úallow_outdated)Úshutilr   r   ÚisfileÚ_is_gitÚwhichÚ
contextlibÚsuppressr’   Úpmrò   Úpm.lockró   Úinstalled_packageÚbinaryr¶   r$   Úget_packageÚcurrent_targetÚlockfile_pathÚversionÚ
store_rootÚstore_entry)rï   rõ   Úfoundrû   rò   ró   ÚrecordedÚpackageÚtargetr  Ústageds   &          r   Ú_git_executabler
  +  sB  € ó çœrŸw™wŸ~™~Ð.A×BÒBÄwÐOb×GcÒGcØ"Ð"Ø�L‰L˜Ó€EßØˆÜ	×	Ò	œY×	'Õ	'ÛÝÝ$à×'Ñ'¨¸dÐ'ÓCˆØÒ H§O¡OÒ$?ÀHÇOÁO×D[ÑD[×D]ÒD]Ü�x—‘Ó'÷ 
(Ò	'ð Ÿ.™.¨Ó/°×1BÑ1BÓ1D�Ù˜5×.Ñ.Ó0Ó1×9Ñ9¸%Ó@ˆØ—‘ × 0Ñ 0Ó 2°W×5HÑ5HÈÓ5YÕ YÐ[aÓbˆØÒ &§.¡.×"2Ò"2Ü�v“;÷ 
(×	'Ò	'ñ ÷ 
(Ö	'ñ ús    ÂAF+ÃF+Ã7BF+Æ
F+Æ+F<	c               ó    € V ^8„  d   QhRRRR/# )r
   r   r$   r   r4   r   )r   s   "r   r   r   L  s   € ÷ 
Lñ 
L�#ð 
L˜$ñ 
Lr   c                ó2  €  \         P                  ! V R.RRRR^\         P                  \        \         R^ 4      RR7	      pTP                  ^ 8H  ;'       d    TP                  P                  R4      #   \        \
        \         P                  3 d     R# i ; i)	a  ``path`` still runs as git: ``--version`` exits 0 and says ``git version`` (m5). A recorded
git that decayed into anything else (gone executable, a stub that exits 0 silently) must not
answer the repair's questions: its empty ``rev-parse`` would read as "HEAD moved".z	--versionTrl   rG   ÚCREATE_NO_WINDOWF)rm   rn   rI   rJ   ro   ÚstdinÚcreationflagsrp   zgit version)
rw   rx   ÚDEVNULLÚgetattrr!   rU   rz   Ú
returncodery   r—   )r   Úprobes   & r   r÷   r÷   L  s�   € ðÜ—’  kÐ2À4ÈdÐ]dØ&/¸Ä:×CUÑCUÜ-4´ZÐASÐUVÓ-WÐ_dôfˆð
 ×Ñ˜qÑ ×KÐK U§\¡\×%<Ñ%<¸]Ó%KÐKøô ”Z¤×!;Ñ!;Ð<ô Úðús   ‚>A2 Á2 BÂBz[0-9a-f]{40}(?:[0-9a-f]{24})?c               ó$   € V ^8„  d   QhRRRRRR/# )r
   rÀ   r$   r  r   ztuple[list[str], set[str]]r   )r   s   "r   r   r   ]  s"   € ÷ -ñ - Sð -°#ð -Ð:Tñ -r   c                óì  € V ! RW4      P                   P                  4       pV'       d   W18X  d   V.\        4       3# V ! RRRRRW4      pVP                  R9   d5   VP                   P	                  R4      vrVW%.\        \        RV4      4      3# W3 Uu. uF;  p\        \        RV ! R	RRR
W74      P                   P	                  R4      4      4      NK=  	  ppV.V^ ,          V^,          ,          3# u upi )aÀ  The trees the killed git was moving the checkout to, and the paths whose new content is unknowable.

A fast-forward or ``reset --hard`` writes ``target``. On a custom branch the updater runs
``git merge``, whose files are the merge of both sides: ``merge-tree`` computes the same tree. A
conflicted path (its markers carry other labels) and, on git < 2.38 (no ``--write-tree``), every
path both sides changed count as git's whatever their content.
ú
merge-basez
merge-treez--write-treeú-zú--name-onlyz--no-messagesÚ NÚdiffú--no-renames©é    r6   )ry   rN   rç   r  rÜ   Úfilter)	rñ   rÀ   r  ÚbaseÚmergedÚtreeÚ
conflictedÚsideÚchangeds	   &&&      r   Ú_trees_git_could_writer%  ]  sô   € ñ ˆ|˜SÓ)×0Ñ0×6Ñ6Ó8€Dß�4”;Øˆxœ›ˆÐÙ�˜~¨t°]ÀOÐUXÓa€FØ×Ñ˜FÔ"Ø"ŸM™M×/Ñ/°Ó5ÐˆØˆ~œs¤6¨$°
Ó#;Ó<Ð<Ð<à™=ó*Ù(�4ô ”6˜$¡ F¨M¸4ÀÐQUÓ \× cÑ c× iÑ iÐjnÓ oÓpÖqÙ(ð ð *àˆ8�W˜Q•Z '¨!¥*Õ,Ð,Ð,ùò*s   ÂAC1c               ó    € V ^8„  d   QhRRRR/# )r
   rò   ú	list[str]r   údict[str, str]r   )r   s   "r   r   r   q  s   € ÷ ñ ˜yð ¨^ñ r   c                ó  € V Uu. uF  pRV9  g   K  VNK  	  pp/ pV'       d“   V ! RRRP                  V4      R,           R7      pVP                  ^ 8w  d/   \        P                  ! VP                  P                  4       4      hVP                  \        W5P                  P                  4       4      4       \        V4      \        V4      ,
           F'  pV ! RRV4      P                  P                  4       WF&   K)  	  V# u upi )zaBlob ids of the checkout's files, through the repo's clean filters, like ``git add`` would store.Ú
zhash-objectz--stdin-paths©r  ú--)Újoinr  rw   rz   r   rN   r7   Úzipry   rÜ   rç   )rñ   rò   Úprì   ÚblobsÚhashedr   s   &&     r   Ú_hash_worktreer2  q  sÏ   € áÓ0™�A $¨a¡-�aˆa™€FÐ0Ø€EßÙ�] O¸4¿9¹9ÀVÓ;LÈtÕ;SÔTˆØ×Ñ Ô!Ü×,Ò,¨V¯]©]×-@Ñ-@Ó-BÓCÐCØ�‰”S˜§¡×!4Ñ!4Ó!6Ó7Ô8Ü�E“
œS ›[×(Ð(ˆÙ˜-¨¨tÓ4×;Ñ;×AÑAÓCˆ‹ñ )à€Lùò 1s
   …	C?“C?c               ó(   € V ^8„  d   QhRRRRRRRR/# )r
   r£   r   Úentriesrå   Úlinksúset[str]r   r   )r   s   "r   r   r     s(   € ÷ !ñ ! ð !¨tð !¸Hð !Èñ !r   c                ó  € VP                  4        UUUUUU	u/ uF4  w  pw  rVqvf   K  YG UU	u0 uF  w  r‰W–8X  g   K  W…8w  g   K  VkK  	  up	pbK6  	  p
pppppp	V
P                  4        UUu/ uF  w  rKV'       g   K  WKbK  	  p
ppV
'       g   \        4       # V ! RRR4      P                  P                  4       R8g  pV ! . ROV
O5!  pVP                  ^ 8w  d/   \
        P                  ! VP                  P                  4       4      hR VP                  P                  R4       4        UUUu/ uF'  w  rïpV'       g   K  WNP                  4       ^ ,          bK)  	  pppp\        4       pV
P                  4        Fñ  w  rKWC9   d   R0pM–W,          P                  4       '       g   \        4       pMo\        P                  R8X  d   \        \        4      M1W,          P                  4       P                  ^@,          '       d   R	MR
0pV'       g   VP                  R4       W$,          ^ ,          V9  d   VV,          '       g   VP!                  V4      V9   g   Kà  VP                  V4       Kó  	  V# u up	pi u up	pppppi u uppi u upppi )a;  Paths whose new entry keeps the ``pre`` blob under another mode, already in that mode.

Equal bytes cannot tell a regular file holding ``original`` from a symlink to ``original`` (one
blob id), nor 644 from 755: only the entry's mode can (review N07). The worktree shows a link
(lstat), except under ``core.symlinks=false`` where git checks a link out as a plain file holding
its target, and the executable bit, except on Windows. The index shows the mode git staged where
the worktree cannot; git writes it after the files, so it covers a git killed after a whole tree.
Úconfigz--type=boolzcore.symlinksÚfalsec              3  óB   "  € T F  qP                  R 4      x € K  	  R# 5i)Ú	N©rY   )rÞ   Úrecords   & r   rß   Ú#_modes_git_wrote.<locals>.<genexpr>’  s   é € ÐMÑ3L¨×Ñ˜t×$Ð$Ó3Lùó   ‚r  r¡   rƒ   Ú100755Ú100644)úls-filesz-sr  r,  )rë   rç   ry   rN   r  rw   rz   r   rÜ   r¶   r   rr   Ú_REGULAR_FILE_MODESr|   Úst_modeÚaddrQ   )rñ   r£   r4  r5  r   Úold_modeÚold_blobrÓ   ÚmÚbÚwantedÚmodesÚsymlinksr	  ÚmetaÚ_tabÚindexÚwrittenÚshowns   &&&&               r   Ú_modes_git_wroterR    s  € ð 6=·]±]´_÷^ð ^Ù5DÑ1�$Ñ1˜¨Sô Kˆd 3ÔJ¡3™4˜1¨!©-”Q¸A¹M—Q�Q¡3ÒJÒJÙ5Dð õ ^à-3¯\©\¬^ÔE©^™k˜d¼uŒkˆdŠk©^€FÑEßÜ‹uˆÙ�8˜]¨OÓ<×CÑC×IÑIÓKÈwÑV€HÙÒ7°Ó7€FØ×Ñ˜AÔÜ×(Ò(¨¯©×)<Ñ)<Ó)>Ó?Ð?áM°6·=±=×3FÑ3FÀtÔ3LÔMõWÙMñ (8 t°4ÜQUô #ˆT—:‘:“< •?Ò"ÙMð 
ò Wä‹e€GØ—|‘|–~‰ˆØŒ=Ø�J‰EØ•+×&Ñ&×(Ò(Ü“E‰Eä03·±ÀÔ0G”CÔ+Ô,Ø"�k×/Ñ/Ó1×9Ñ9¸E×AÔA‘ÀxÐPð çØ—	‘	˜(Ô#Ø�M˜!Õ EÔ)¨e°e¯m¬mÀÇ	Á	È$ÃÐSXÖ@XØ�K‰K˜Öñ &ð €Nùó1 Kù÷ ^ùãEùôWs>   ˜I5¨I5­
I/¼I/ÁI/Á
I5Á,I?Á=I?Ä-JÄ?JÉ/I5c               ó(   € V ^8„  d   QhRRRRRRRR/# )r
   r£   r   rÀ   r$   r  r   z6tuple[list[str], list[str], set[str], set[str]] | Noner   )r   s   "r   r   r   £  s)   € ÷ ;*ñ ;* ð ;*¨3ð ;*¸ð ;*Ð@vñ ;*r   c                óô  € V ! RRRV R24      P                   ^ 8w  d   R# \        WV4      w  rE/ pV EF  pV ! RRRR	R
W'4      pVP                   ^ 8w  d/   \        P                  ! VP                  P                  4       4      hVP                  P                  R4      p	\        V	R,          V	R,          4       F~  w  r«V
P                  R4      P                  4       w  rÍrïpVR8X  d   TMT\        9  d   K>  TP                  Y¼VR8X  d   RMT. 34      pV^,          P                  TVR8X  d   RMT34       K€  	  EK
  	  V Uu0 uF2  p\        P                  P                  W,          4      '       g   K0  VkK4  	  pp\!        Y Uu. uF+  q»V9  g   K  W,          P#                  4       '       g   K)  VNK-  	  up4      pTP%                  V Uu/ uF=  q»\'        \        P(                  ! \        P*                  ! W,          4      4      V4      bK?  	  up4       \-        WVV4      p. . \/        4       pppVP1                  4        EFe  w  pw  rÎpW,          V UUu0 uF  w  ppV'       g   K  VkK  	  ppppVV9  d   VRJpMÔVV,          V8X  d   VV9   pMÀVV,          V9   g   Wµ9   d   RpM©VV9   d   RpMŸVP3                  4       pRpV F‡  pV ! RRRV 2VRR7      pVP                   ^ 8w  d?   \        P                  ! VP                  P5                  RR7      P                  4       4      hT;'       g    VP                  P7                  V4      pK‰  	  V'       g   EK  Vf   TMTP                  V4       Ve   EK;  VP9                  V4      V9  g   EKT  VP;                  V4       EKh  	  VP1                  4        UU UU!U"u0 uFK  w  pw  p pp!Ve   K  \=        V4      P>                   F"  p"V"P@                  '       g   K  \C        V"4      kK$  	  KM  	  p#p!pp pp"V#'       d7   V#\/        V ! RRRRRV4      P                  P                  R4      4      ,          p#VVV#V3# u upi u upi u upi u uppi u up"p!pp pi )aÑ  Paths the killed git already touched on the way to ``target``: (restore from HEAD, remove as added,
directories git may have created for its added files, the added ones to keep aside, not delete).

Git rewrites a file as unlink, create, write, so a kill leaves it missing, empty or cut short:
all of those count as git's, like the full new blob. Content that matches neither side and is not
the start of a new blob is the user's own edit (e.g. a re-applied stash) and is left alone. An
added path holding less than a whole new blob may equally be the user's own file created there
after the kill (a ``touch``, a first line): it leaves the tree, but renamed aside, never deleted.
``None``: git no longer knows ``target``.
ú	rev-parseú-qz--verifyz	^{commit}Nr  z--rawr  r  z--no-abbrevr  ºNNr
   :r6   Nr
   Ú:ÚDÚATFúcat-filez	--filtersz--path=)rn   rG   )rJ   úls-treez-rú-dr  )"r  r%  rw   rz   r   rN   ry   rÜ   r.  ÚlstripÚ_WORKTREE_BLOB_MODESÚ
setdefaultr"   r   r   Úislinkr2  r¶   r7   rÕ   ÚfsencodeÚreadlinkrR  rç   rë   râ   rv   r—   rQ   rE  r   ÚparentsÚpartsr$   )$rñ   r£   rÀ   r  ÚtreesÚunknownr4  r!  r  re  rM  r   rF  Únew_moderG  Únew_blobÚstatusÚentryr5  Úworktree_blobÚretypedÚrestoreÚaddedÚkeptrÓ   Ú_modeÚblobr   r0  rP  ÚcontentrQ  Ú_mÚ_nr@   Únew_dirss$   &&&&                                r   Ú_paths_git_wroterw  £  sà  € ñ ˆ;˜˜j¨V¨H°KÐ*@ÓA×LÑLÐPQÔQÙÜ+¨C°fÓ=�N€EØ€GÜˆÙ�6˜7 D¨.¸-ÈÓSˆØ�?‰?˜aÔÜ×,Ò,¨T¯[©[×->Ñ->Ó-@ÓAÐAØ—‘×!Ñ! $Ó'ˆÜ˜e C�j¨%°­+Ö6‰JˆDØ=A¿[¹[ÈÓ=M×=SÑ=SÓ=UÑ:ˆH °FØ" cœM‘¨xÔ@TÔTÙØ×&Ñ& tÀÈ#Ä¹ÐS[Ð]_Ð-`ÓaˆEØ�!�H�O‰O˜X¨v¸¬}¡tÀ(ÐKÖLô 7ñ ñ &ÓE™g�d¬¯©¯©¸½×)D�TˆT™g€EÐEÜ" 3¸'Ó(s¹'°$ÐQVÑEV¬Ð\`Õ\g×[pÑ[p×[r¯¨¹'Ñ(sÓt€MØ×ÑÑ`eÓfÑ`eÐX\¤¬¯ª´B·K²KÀÅÓ4LÓ(MÈsÓ SÒSÑ`eÑfÔgÜ˜s¨'°5Ó9€GØ˜r¤3£5�DˆU€GØ+2¯=©=¯?Ñ'ˆÑ'ˆx 3Ø•k¹CÔ#H¹C©[¨U°DÄ4§D D¹CˆeÑ#HˆØ�}Ô$Ø dÐ*‰GØ˜4Õ  HÔ,Ø˜g‘o‰GØ˜4Õ  EÔ)¨T¬_Ø‰GØ�UŒ]Ø‰Gà—o‘oÓ'ˆGØˆGÛ�Ù˜J¨°w¸t¸fÐ5EÀtÐRWÔX�Ø×#Ñ# qÔ(Ü$×4Ò4°U·\±\×5HÑ5HÐPYÐ5HÓ5Z×5`Ñ5`Ó5bÓcÐcØ!×EÐE U§\¡\×%<Ñ%<¸WÓ%E’ñ	 ÷
 Š7ØÒ&‰U¨G×;Ñ;¸DÔAØÕ M×$5Ñ$5°dÓ$;À5×$HØ—‘˜—ñ+ ,;ð, =D¿M¹M¼O÷ K¹OÑ 8 Ñ&8 r¨8°RÈx”Ü+¨DÓ1×9Ô9�F¸V¿\½\ô ”�F–Ù9ñ ¹O€Hô KçØ”C™˜I t¨T°=À$ÈÓL×SÑS×YÑYÐZ^Ó_Ó`Õ`ˆØ�E˜8 TÐ)Ð)ùò? FùÚ(sùÚfùó $Iùö*KsC   Å-QÅ4QÆQ!
ÆQ!
Æ0Q!
ÇAQ&ÉQ+
É)Q+
ÏQ1Ï'Q1Ï?Q1zhermes-update-pull.claimg      $@c               ó$   € V ^8„  d   QhRRRRRR/# )r
   ÚfdrD   Úlockr4   r   r   )r   s   "r   r   r   î  s!   € ÷ ñ �ð ˜Dð  Tñ r   c                óè  €  \         P                  R8X  d]   ^ RIp\        P                  ! V ^ \        P
                  4       TP                  Y'       d   VP                  MVP                  ^4       R# ^ RI	pTP                  Y'       d   VP                  VP                  ,          MVP                  4        R#   \         d-   pT;'       d    TP                  \         9   '       * u Rp?# Rp?ii ; i)aE  False only while another launch holds the claim.

A filesystem that cannot lock at all (ENOLCK on NFS without lockd, EOPNOTSUPP/EINVAL on some SMB
shares) proceeds unguarded like a read-only git dir: counting it as "held" would stop every launch
from ever repairing a checkout the restore handled fine before claims existed.
rƒ   NT)r   rr   Úmsvcrtr   ÚlseekÚSEEK_SETÚlockingÚLK_NBLCKÚLK_UNLCKÚfcntlÚflockÚLOCK_EXÚLOCK_NBÚLOCK_UNr!   ÚerrnoÚ_CLAIM_HELD_ERRNOS)ry  rz  r|  r‚  r/   s   &&   r   Ú_lock_fdr‰  î  s¥   € ð>Ü�<‰<˜7Ô"Ûä�HŠH�R˜œBŸK™KÔ(Ø�N‰N˜2¶$˜vŸš¸F¿O¹OÈQÔOñ ó à�K‰K˜¾t˜UŸ]™]¨U¯]©]Ö:ÈÏÉÕWñ øô ô >Ø×<Ð<˜SŸY™YÔ*<Ñ<Ô=Õ=ûð>ús%   ‚A/B: Á3AB: Â:C1Ã!C,Ã&C1Ã,C1c               ó   € V ^8„  d   QhRR/# )r
   r°   r   r   )r   s   "r   r   r     s   € ÷ ñ ˜Dñ r   c              #  ó>  "  €  \         P                  ! V \        ,          \         P                  \         P                  ,          R4      p \        P                  ! 4       \        ,           p\        TR4      '       gP   \        P                  ! 4       T8”  d   Rx €  \         P                  ! T4       R# \        P                  ! R4       Ka   \         P                  ! T^ 4       \         P                  ! TR\         P                  ! 4        R2P                  4       4        Rx € \        TR4        \         P                  ! T4       R#   \
         d	    Rx €  R# i ; i  \
         d     LMi ; i  \        TR4       i ; i  \         P                  ! T4       i ; i5i)z`Yields True while this launch holds the restore claim, False when another held it past the wait.é¤  TNFgš™™™™™©?úpid=r*  )r   rs   Ú_RESTORE_CLAIMÚO_RDWRÚO_CREATr!   r   Ú	monotonicÚ_RESTORE_CLAIM_WAIT_SECONDSr‰  Úcloser   Ú	ftruncateÚwriteÚgetpidÚencode)r°   ry  Údeadlines   &  r   Ú_restore_claimr™    s   é € ðÜ�WŠW�Wœ~Õ-¬r¯y©y¼2¿:¹:Õ/EÀuÓMˆðÜ—>’>Ó#Ô&AÕAˆÜ˜2˜t×$Ò$Ü�~Š~Ó (Ô*Ø’Øô 	�Š�Žô �JŠJ�tÖð	Ü�LŠL˜˜QÔÜ�HŠH�R˜4¤§	¢	£˜}¨BÐ/×6Ñ6Ó8Ô9ð	 ØŠJä�R˜Õä
�Š�Žøô) ô ØŠ
Úðûô ô 	Ùð	ûô
 �R˜Õûä
�Š��üs   ‚F„AE
 ÁAF ÂFÂ4F ÃAE  Ä!E1 Ä%F Ä2FÅ
EÅFÅEÅFÅ E.Å+F Å-E.Å.F Å1E?Å?F ÆFÆFc                  ó   € ] tR tRtRtRtR# )Ú_Holderi   zaA process that may own a git lock, e.g. ``pid 4242 (git commit)``: truthy, and never ``is True``.r   N)r)   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   r   r   r›  r›     s   † Ýkr   r›  ÚannotateÚblamer[  z
check-attrzcheck-ignorezcheck-mailmapzcheck-ref-formatÚcherryzcount-objectsÚdescriber  z
diff-filesz
diff-indexz	diff-treezfor-each-refzfsmonitor--daemonÚgrepÚhelpÚlogrB  z	ls-remoter\  r  zname-revz
range-diffzrev-listrU  ÚshortlogÚshowzshow-branchzshow-refrj  Úvarzverify-commitz
verify-tagr  ÚwhatchangedÚ
credentialzcredential-cachezcredential-storeÚfetchz
fetch-packz
http-fetchz
index-packzpack-objectszremote-httpzremote-httpszupload-packc               ó    € V ^8„  d   QhRRRR/# )r
   Úarg0r$   r   rb   r   )r   s   "r   r   r   =  s   € ÷ Fñ F�sð F˜zñ Fr   c                óÜ   € \         P                  ! RV P                  4       4      R,          P                  4       pVP	                  R4      pVR8X  g   VP                  R4      '       d   V# R# )zï``git`` or ``git-<sub>`` when ``arg0`` (an argv[0], a comm, a psutil name) runs git, else None.

Any directory (``/usr/lib/git-core/git-commit``), either separator, ``.exe`` and case folded:
Windows runs ``git.exe`` and ``git-commit.exe``.z[\\/]r   rñ   úgit-NrÛ   )rÉ   rÜ   rN   r%   r¯   r—   )r¯  r0   s   & r   Ú_git_programr²  =  sW   € ô
 �8Š8�H˜dŸj™j›lÓ+¨BÕ/×5Ñ5Ó7€DØ×Ñ˜VÓ$€DØ˜5”= D§O¡O°F×$;Ò$;ˆ4ÐEÀÐEr   c               ó    € V ^8„  d   QhRRRR/# )r
   Úcmdlineúbytes | list[str]r   r'  r   )r   s   "r   r   r   G  s   € ÷ *ñ *Ð(ð *¨Yñ *r   c                óþ   € \        V \        4      '       d;   V P                  R 4       Uu. uF  q'       g   K  VP                  RR4      NK   	  up# V  Uu. uF  q'       g   K  \	        V4      NK  	  up# u upi u upi )ó    rl   rG   )Ú
isinstancerÍ   rÜ   rv   r$   )r´  Úas   & r   Ú	_git_argvrº  G  se   € Ü�'œ5×!Ò!Ø6=·m±mÀEÔ6JÓPÑ6J°ËaÔ,�—‘˜ )Ö,Ñ6JÑPÐPÙ#Ó)™G�q£qŒFŒC�ŽF™GÑ)Ð)ùò QùÚ)s   ª	A5¸A5Á	A:Á#A:c               ó    € V ^8„  d   QhRRRR/# )r
   r´  rµ  r   rb   r   )r   s   "r   r   r   M  s   € ÷ ñ Ð 1ð °jñ r   c                ó(  € \        V 4      pV'       d   \        V^ ,          4      MRpVf   R# VR8w  d   V\        R4      R # \        VR,          4      pV F7  pV\        9   d   \        VR4       K  VP                  R4      '       d   K5  Vu # 	  R# )z½The subcommand a git argv runs: ``commit`` for ``git -C x -c k=v commit`` and for a dashed
``/usr/lib/git-core/git-commit`` (``git-commit.exe``); None when argv[0] is not git or names none.Nrñ   r±  ºr6   NNr¬   )rº  r²  r·   ÚiterÚ_GIT_VALUE_OPTIONSÚnextr—   )r´  ÚargsÚprogramÚitÚargs   &    r   Ú_git_subcommand_ofrÅ  M  sƒ   € ô �WÓ€Dß'+Œl˜4 �7Ô#°€GØ‚ÙØ�%ÔØ”s˜6“{�|Ð$Ð$Ü	ˆd�2�h‹€BÛˆØÔ$Ô$Ü��TŽNØ—‘ ×$Ô$ØŠJñ	 ñ
 r   c               ó    € V ^8„  d   QhRRRR/# )r
   rò   zPath | str | Noner   útuple[str, ...]r   )r   s   "r   r   r   _  s   € ÷ !ñ !Ð.ð !°?ñ !r   c            
     óÆ  € V  Uu0 uFa  qf   K  \         P                  P                  \         P                  P                  \         P                  P	                  V4      4      4      kKc  	  ppY  Uu0 uFD  qf   K  \         P                  P                  \         P                  P                  V4      4      kKF  	  up,          p\        \        V4      4      # u upi u upi )z_The checkout's own paths as given AND resolved, so another process's path need not be resolved.)r   r   ÚnormcaseÚnormpathÚabspathÚrealpathÚtupleÚsorted)rò   r/  Úplacess   *  r   Ú_checkout_placesrÐ  _  s–   € áNSÓeÉeÈÔDŒb�g‰g×ÑœrŸw™w×/Ñ/´·±·±ÀÓ0BÓCÖDÉe€FÐeØ
¸eÓU¹e¸Ô4Œr�w‰w×Ñ¤§¡× 0Ñ 0°Ó 3Ö4¹eÑUÕU€FÜ”˜“Ó Ð ùò fùÚUs   …C�ACÁ2CÁ<A Cc               ó$   € V ^8„  d   QhRRRRRR/# )r
   r   r$   rÏ  rÇ  r   r4   r   )r   s   "r   r   r   f  s!   € ÷ ñ �sð  Oð ¸ñ r   c                óT  € \         P                  P                  V 4      '       g   R# \         P                  P                  \         P                  P	                  V 4      4      pV F,  p \         P                  P                  W#.4      V8X  d    R# K.  	  R#   \         d     K@  i ; i)zó``path`` is one of ``places`` or under it, by PATH COMPONENTS (``/x/hermes-backup`` is not in ``/x/hermes``).

Lexical: another process's cwd is already the kernel's resolved path, and resolving a stranger's
path would touch whatever it names.FT)r   r   ÚisabsrÉ  rÊ  Ú
commonpathrU   )r   rÏ  ÚlexicalÚplaces   &&  r   Ú_path_withinr×  f  s‡   € ô
 �7‰7�=‰=˜×ÒÙÜ�g‰g×ÑœrŸw™w×/Ñ/°Ó5Ó6€GÛˆð	Ü�w‰w×!Ñ! 7Ð"2Ó3°uÔ<Úñ =ñ ñ øô ô 	Úð	ús   Á*%BÂB'Â&B'c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r
   rÁ  r'  Úcwdrb   Úenvúdict[str, str] | NonerÏ  rÇ  r   r4   r   )r   s   "r   r   r   w  s9   € ÷ Nñ N�yð N zð NÐ8Mð NÐWfð NÐkoñ Nr   c                ó~  aaaa€ R VV3R lloS'       d   \        SS4      '       d   R# V R,           FC  pS! VP                  R4      '       d   VP                  R4      ^,          MT4      '       g   KB   R# 	  \        ;QJ d$    VV3R l\         4       F  '       g   K   R# 	  R# ! VV3R l\         4       4      # )	zºA git with this argv/cwd/environment works in ``places``: its cwd, a path argument (absolute,
or relative to its cwd, ``--opt=<path>`` too) or a ``GIT_DIR``-style variable is inside one.c               ó    € V ^8„  d   QhRRRR/# rÆ   r   )r   s   "r   r   Ú"git_works_in.<locals>.__annotate__z  s   € ÷ +ñ +�cð +˜dñ +r   c                óÎ   <€ V '       g   R # \         P                  P                  V 4      '       g+   S'       g   R # \         P                  P                  SV 4      p \	        V S4      # )F)r   r   rÓ  r-  r×  )r^   rÙ  rÏ  s   &€€r   ÚinsideÚgit_works_in.<locals>.insidez  sC   ø€ ßÙÜ�w‰w�}‰}˜U×#Ò#ßÙÜ—G‘G—L‘L  eÓ,ˆEÜ˜E 6Ó*Ð*r   Tr½  r¬   rL   c              3  óh   <"  € T F'  pS! S;'       g    / P                  VR 4      4      x € K)  	  R# 5i)rÈ   N)rQ   )rÞ   r\   rÚ  rà  s   & €€r   rß   Úgit_works_in.<locals>.<genexpr>ˆ  s,   øé € ÐMÑ;L°C‰v�s—y�y˜b—o‘o c¨2Ó.×/Ð/Ó;Lùs   ƒ2“2F)r×  r—   rY   ÚanyÚ_GIT_LOCATION_ENV)rÁ  rÙ  rÚ  rÏ  rÄ  rà  s   &fff @r   Úgit_works_inræ  w  sŠ   û€ ÷+ñ +÷ Œ|˜C ×(Ò(ÙØ�B�xˆxˆÙ¨3¯>©>¸#×+>Ò+>�#—-‘- Ó$ QÖ'ÀC×HÔHÚñ ÷ ‹3ÕMÕ;LÓM�3Œ3ÐMŠ3ÐMˆ3ÕMÕ;LÓMÓMÐMr   c               ó$   € V ^8„  d   QhRRRRRR/# )r
   Úuidú
int | Noner°   r   r   r4   r   )r   s   "r   r   r   ‹  s&   € ÷ Lñ L�jð L¨4ð L°Dñ Lr   c                óÖ   €  \         P                  ! V4      pT RJ ;'       g6    T ^ TP                  39   ;'       g    \	        TP
                  ^,          4      #   \         d     R# i ; i)zdA process running as ``uid`` may write ``git_dir`` (root, its owner, or a group/world-writable dir).TN)r   r|   r!   Úst_uidr4   rD  )rè  r°   Ústs   && r   Ú_could_writerí  ‹  s`   € ðÜ�WŠW�WÓˆð �$ˆ;×KÐK˜# ! R§Y¡Y Ñ/×KÐK´4¸¿
¹
ÀUÕ8JÓ3KÐKøô ô Úðús   ‚A ÁA(Á'A(Úany_gitc               ó(   € V ^8„  d   QhRRRRRRRR/# ©	r
   r   r   r£   úPath | Nonerî  r4   r   ú_Holder | bool | Noner   )r   s   "r   r   r   ”  s)   € ÷ 0ñ 0�Tð 0 ð 0Àð 0ÐRgñ 0r   c               óŒ   € \        R4      R,          R,          P                  4       '       d   \        WV4      # \        WV4      # )aú  Whether a running process may still own ``path`` (a git lock): the holder, False, or None (unknowable).

The holder is a truthy :class:`_Holder` naming it (``pid 4242 (git commit)``). False is proof, not
a guess: Linux reads every process's fds through /proc and, with ``root``, also counts any live git
working in the checkout (cwd, a path argument or ``GIT_DIR``) that is not a pure reader
(:data:`_READER_GIT`; ``any_git`` counts readers too), whatever form runs it: ``git commit``
waiting in the editor has CLOSED its lock fd, and a dashed ``git-commit``, an alias or ``git.exe``
is the same git. A git that could write the git dir but whose cwd or environment cannot be read
makes the answer None. macOS/BSD ask ``lsof`` for open fds and ``ps`` for any such git (``ps``
cannot say where it works, so any counts). Without either check the answer is None and the caller
never deletes the lock. Windows needs no answer here: it refuses to unlink a file another process
has open, so the caller's unlink is the probe.
ú/procÚselfry  )r   Úis_dirÚ_held_open_procÚ_held_open_lsof)r   r£   rî  s   &&$r   Ú
_held_openrù  ”  s;   € ô 	ˆW‹˜Õ Õ%×-Ñ-×/Ò/Ü˜t¨7Ó3Ð3Ü˜4 wÓ/Ð/r   zcredential-cache--daemonc               ó$   € V ^8„  d   QhRRRRRR/# )r
   rÁ  r'  rî  r4   r   r   )r   s   "r   r   r   ¬  s&   € ÷ Kñ K˜Ið K°ð K¸ñ Kr   c                ó`   € \        V 4      pV\        9  ;'       d    T;'       g
    V\        9  # r=   )rÅ  Ú_NEVER_LOCKSÚ_READER_GIT)rÁ  rî  Úsubs   && r   Ú_counts_as_holderrÿ  ¬  s,   € Ü
˜TÓ
"€CØ”lÑ"×JÐJ¨×(IÐ(I°3¼kÑ3IÐJr   c               ó    € V ^8„  d   QhRRRR/# )r
   Úpid_dirr   r   r4   r   )r   s   "r   r   r   ±  s   € ÷ 	$ñ 	$�Tð 	$˜dñ 	$r   c                óˆ   €  V R,          P                  4       '       * #   \         d    T P                  4       '       * u # i ; i)aH  The process has released its memory (exiting, or a zombie) or is gone.

The kernel drops its fds before its cwd, and refuses its cwd/environ once it is exiting, so an
unreadable cwd there is not a hidden git: counting it made any git exiting anywhere on a busy
machine postpone the repair. A live process keeps a non-empty argv.r´  )râ   r!   r   )r  s   &r   Ú_exitedr  ±  s=   € ð$Ø˜iÕ'×3Ñ3Ó5Ô5Ð5øÜô $Ø—>‘>Ó#Ô#Ò#ð$ús   ‚ ž AÁ Ac               ó(   € V ^8„  d   QhRRRRRRRR/# rð  r   )r   s   "r   r   r   ½  s)   € ÷ 9)ñ 9)˜$ð 9) kð 9)¸Dð 9)ÐEZñ 9)r   c                óŒ  a€ \        R 4      p\        P                  P                  V 4      oVe   \	        WP
                  4      MRpRpR R lpVP                  R4       EFA  p \        ;QJ d:    V3R l\        P                  ! VR,          4       4       F  '       g   K   RM/	  RM+! V3R l\        P                  ! VR,          4       4       4      '       dF    \        VR	,          P                  4       4      p\        R
VP                   RV! W‡4       R24      u #  Vf   KÇ   VP                  4       P                  p	 \        TR	,          P                  4       4      pTR,          P                  4       P!                  RR4      P#                  4       p
T'       g   EKC  \)        T^ ,          4      f   \)        T
4      f   EKg  \+        TP                  4      \        P,                  ! 4       8X  g   \/        Y‚4      '       g   EK¨   \        P0                  ! TR,          4      P3                  R4      p\5        R TR,          P                  4       P7                  R4       4       4      p\;        Y‹YÄ4      '       g   EK   \        R
TP                   RT! Y‡4       R24      u # 	  V'       d   R# R#   \         d    . p ELÆi ; i  \         d     EL³i ; i  \         d     EK‡  i ; i  \         d9    TP%                  4       '       d   \'        Y�P
                  4      '       d   Rp EKÍ  i ; i  \         dˆ    \9        T4      '       d    EKñ  \;        TRRT4      '       d'   \        R
TP                   RT! Y‡4       R24      u u # TP%                  4       '       d   \'        Y�P
                  4      '       d   Rp EKb  i ; i)rô  NFc               ó$   € V ^8„  d   QhRRRRRR/# )r
   rÁ  r'  r  r   r   r$   r   )r   s   "r   r   Ú%_held_open_proc.<locals>.__annotate__Ã  s!   € ÷ ñ �9ð  tð °ñ r   c                ó   € V '       d@   R P                  \        P                  P                  V ^ ,          4      .V R,          O4      #  VR,          P	                  4       P                  RR4      P                  4       #   \         d     R# i ; i)rÚ   ºr6   é   NÚcommrg   rG   Ú?)r-  r   r   r#   râ   rv   rN   r!   )rÁ  r  s   &&r   r0   Ú_held_open_proc.<locals>.nameÃ  st   € ßØ—8‘8œRŸW™W×-Ñ-¨d°1­gÓ6ÐC¸¸c½ÐCÓDÐDð	Ø˜fÕ$×0Ñ0Ó2×9Ñ9¸'À9ÓM×SÑSÓUÐUøÜô 	Úð	ús   Á	4A> Á>BÂBz[0-9]*c              3  ój   <"  € T F(  p\         P                  ! VP                  4      S8H  x € K*  	  R # 5ir=   )r   rc  r   )rÞ   rk  r  s   & €r   rß   Ú"_held_open_proc.<locals>.<genexpr>Í  s%   øé € Ð]ÑB\¸”2—;’;˜uŸz™zÓ*¨fÖ4ÓB\ùs   ƒ03ry  Tr´  úpid r   Ú)r  rg   rG   rÙ  z
 (deleted)c              3  ó„   "  € T F6  q'       g   K  VP                  R R4      P                  R4      R,          x € K8  	  R# 5i)rl   rG   rL   rW  N)rv   rY   )rÞ   rk  s   & r   rß   r  ê  s<   é € ð ^Ù$S˜5ÓW\ô L�u—|‘| G¨YÓ7×AÑAÀ#ÓFÀs×KÒKÛ$Sùs
   ‚	A �0A Úenvironr·  )r   r   r   rÌ  rÐ  r@   Úglobrä  Úscandirrº  râ   r!   r›  r0   r|   rë  rv   rN   r   rí  r²  rD   r–  rÿ  rc  r¯   rå   rÜ   r  ræ  )r   r£   rî  ÚprocrÏ  Ú
unknowabler0   r  rÁ  rè  r  rÙ  rÚ  r  s   &&&          @r   r÷  r÷  ½  s  ø€ Ü�‹=€DÜ�W‰W×Ñ˜dÓ#€FØ48Ò4DÔ˜d§K¡KÔ0È$€FØ€Jõð —9‘9˜X×&ˆð	ß‹sÔ]Ä"Ç*Â*ÈWÐW[Í^ÔB\Ó]�s�sŠsÔ]Ä"Ç*Â*ÈWÐW[Í^ÔB\Ó]×]Ò]ðÜ$ g°	Õ&9×%EÑ%EÓ%GÓH�Dô   g§l¡l ^°2±d¸4Ó6IÐ5JÈ!ÐLÓMÒMð ^ð Š>Ùð	Ø—,‘,“.×'Ñ'ˆCð	Ü˜g¨	Õ1×=Ñ=Ó?Ó@ˆDØ˜fÕ$×0Ñ0Ó2×9Ñ9¸'À9ÓM×SÑSÓUˆD÷
 ÚÜ˜˜Q�Ó Ò(¬\¸$Ó-?Ò-GÚÜˆw�|‰|Ó¤§	¢	£Ô+Ô3DÀT×3SÒ3SÚð	Ü—+’+˜g¨�oÓ.×;Ñ;¸LÓIˆCÜñ ^Ø%,¨yÕ%8×$DÑ$DÓ$F×$LÑ$LÈUÔ$Só^ó ^ˆCô ˜ 3×/Õ/Ü˜T '§,¡, ¨r±$°tÓ2EÐ1FÀaÐHÓIÒIñU '÷V ˆ4Ð( 5Ð(øôM ô Ø“Dðûô ô 	Úð	ûô ô 	Ûð	ûô
 ô 	Ø�~‰~×Ò¤L°·k±k×$BÒ$BØ!�
Ûð	ûô ô 	Ü�w×ÒÛÜ˜D $¨¨f×5Ò5Ü  g§l¡l ^°2±d¸4Ó6IÐ5JÈ!ÐLÓMÔMØ�~‰~×Ò¤L°·k±k×$BÒ$BØ!�
Ûð	úsŒ   Á%:KÂ"8KÃ J2Ã<!KÄ(KÅAK+È	A"L1Ê2KÊ?KËKËKËKËKËK(Ë'K(Ë+ L.ÌL.Ì-L.Ì1OÍ6OÎOÎ!OÏOc               ó(   € V ^8„  d   QhRRRRRRRR/# rð  r   )r   s   "r   r   r   ù  s/   € ÷ Wñ W˜$ð W kð W¸Dð WÐEZñ Wr   c                ó  € ^ RI pVP                  R4      ;'       g    \        R R 4       R4      pVf   R#  \        P                  ! VRRR\        V 4      .RRRR	^\        P                  R
R7      pTP                  P                  4        Uu. uF$  qfP                  R4      '       g   K  TR,          NK&  	  ppT'       ds   TP                  P                  4        Uu. uF$  qfP                  R4      '       g   K  TR,          NK&  	  pp\        RT^ ,           RT'       d
   T^ ,          MR R24      # TP                  R9  d   R# Tf   R
# \        Y@P                  Y4      #   \        \        P                  3 d     R# i ; iu upi u upi )r  NÚlsofc              3  ót   "  € T F.  p\         P                  P                  V4      '       g   K*  Vx € K0  	  R # 5ir=   ©r   r   rö   ©rÞ   r/  s   & r   rß   Ú"_held_open_lsof.<locals>.<genexpr>ü  s)   é € Ð(mÑ4W¨qÔ[]×[bÑ[b×[iÑ[iÐjk×[l¯ªÓ4Wùó   ‚'8®
8ú-FÚpcr,  Trl   rG   F©rm   rn   rI   rJ   ro   r  rp   r/  r½  Úcr  r   r  r  )z/usr/sbin/lsofz/usr/bin/lsofr  )rõ   rø   rÀ  rw   rx   r$   r  r!   rz   ry   rX   r—   r›  r  Ú_ps_git_holderr@   )	r   r£   rî  rõ   r  r  r[   ÚpidsÚnamess	   &&&      r   rø  rø  ù  sT  € Ûà�<‰<˜Ó×tÐt¤4Ñ(mÑ4WÓ(mÐosÓ#t€DØ‚|ÙðÜ—’  d¨D°$¼¸D»	ÐBÐSWÐ^bÐmtØ&/¸Ü%/×%7Ñ%7¸uôFˆð
 "'§¡×!8Ñ!8Ô!:ÓSÑ!:˜¿o¹oÈc×>RŒHˆD��HˆHÑ!:€DÐSßØ&+§l¡l×&=Ñ&=Ô&?ÓXÑ&?˜dÇ?Á?ÐSV×CW”��b—�Ñ&?ˆÐXÜ˜˜d 1�g˜Y b·U¨¨q®ÀÐ(DÀAÐFÓGÐGØ×Ñ˜vÔ%ÙØ’Lˆ5ÐV¤n°T¿;¹;ÈÓ&VÐVøô ”Z×/Ñ/Ð0ô ÚðüâSùâXs)   ¸:E# ÂFÂ+FÃF
Ã;F
Å#FÆFc               ó$   € V ^8„  d   QhRRRRRR/# )r
   r  r$   r%  r'  r   rÛ  r   )r   s   "r   r   r     s"   € ÷ ñ �Sð  	ð Ð.Cñ r   c                óÚ  €  \         P                  ! V RRRRRRRP                  V4      .RRR	R
^\         P                  RR7      pTP                  R9  d   R# / pRpTP                  P                  4        FO  pTP                  R4      '       d   TR,          pK%  TP                  R4      '       g   K>  Tf   KD  TR,          Y4&   KQ  	  T#   \        \         P
                  3 d     R# i ; i)zWEach pid's cwd from ``lsof -d cwd`` (macOS has no /proc); None when lsof cannot answer.z-ar]  rÙ  r   Úpnrk   Ú,Trl   rG   Fr"  Nr/  r½  Únr  )
rw   rx   r-  r  r!   rz   r  ry   rX   r—   )r  r%  r~   Úcwdsra   r[   s   &&    r   Ú
_lsof_cwdsr-    sÙ   € ðÜ�nŠn˜d D¨$°°t¸TÀ4ÈÏÉÐRVËÐXÐimØ"&°ÀÐTVÔ^h×^pÑ^pÐx}ôˆð ‡~�~˜VÔ#ÙØ€DØ
€CØ—
‘
×%Ñ%Ö'ˆØ�?‰?˜3×ÒØ�r•(ŠCØ�_‰_˜S×!Ô! c¤oØ˜R�ˆD‹Iñ	 (ð
 €Køô ”Z×/Ñ/Ð0ô Úðús   ‚AC ÃC*Ã)C*c               ó    € V ^8„  d   QhRRRR/# r�   r   )r   s   "r   r   r   !  s   € ÷ ñ ˜ð  ñ r   c                ót   €  \         P                  ! V ^ 4       R#   \         d     R# \         d     R# i ; i)z_POSIX only (the lsof branch never runs on Windows); stdlib, as this launch-time repair must be.FT)r   r“   r”   r!   )ra   s   &r   Ú_still_runningr0  !  s8   € ðÜ
�Š��QŒñ
 øô	 ô ÚÜô Úðús   ‚ ›7©7²7¶7c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r
   r  r$   r°   r   r£   rî  r4   r   rò  r   )r   s   "r   r   r   ,  s0   € ÷ 5ñ 5˜ð 5 tð 5°4ð 5À$ð 5ÐK`ñ 5r   c                óØ  a€ ^ RI pVP                  R4      ;'       g    \        R R 4       R4      oSf   R# R V3R llpV! RRR4      pV! RR	4      pVe   Vf   R# V Uu/ uF4  p\        V4      ^8X  g   K  V^ ,          V^,          P	                  4       bK6  	  p	p/ p
V EF_  p\        V4      ^8w  ge   V^ ,          P                  4       '       dH   V^,          P                  4       '       d+   \        V^ ,          4      \        P                  ! 4       8X  d   Kz  \        V^,          4      fF   V	P                  V^ ,          4      '       d&   \        W˜^ ,          ,          ^ ,          4      '       g   KÓ  V	P                  V^ ,          4      ;'       g    V^,          .p\        V^ ,          4      f   V^,          .p\        \        V^,          4      V4      '       g   EK@  \        W³4      '       g   EKT  WºV^ ,          &   EKb  	  V
'       g   R
# \        V \        V
4      4      pVf   R# \        W!4      pV
P!                  4        F›  w  rëVP                  V4      pVf   \#        \        V4      4      '       d    R# \%        W¿RV4      '       g   KL  \'        RV RRP)                  \        P*                  P-                  V^ ,          4      .VR,          O4       R24      u # 	  R
# u upi )aÑ  An empty ``lsof`` is no proof: ``git commit`` waiting in the editor has closed its lock fd.
Every git (by executable name, dashed forms included) that could write ``git_dir``, is not a pure
reader, and works in the checkout (its cwd from ``lsof -d cwd``, or a path argument) keeps the
lock; one whose cwd cannot be read makes the answer None. Gits elsewhere on the machine do not
count, or any commit open in another repository would block every launch-time repair.Nri   c              3  ót   "  € T F.  p\         P                  P                  V4      '       g   K*  Vx € K0  	  R # 5ir=   r  r  s   & r   rß   Ú!_ps_git_holder.<locals>.<genexpr>6  s)   é € Ð(dÑ4N¨qÔRT×RYÑRY×R`ÑR`Ðab×Rc¯ªÓ4Nùr  c               ó    € V ^8„  d   QhRRRR/# )r
   Úcolumnsr$   r   zlist[list[str]] | Noner   )r   s   "r   r   Ú$_ps_git_holder.<locals>.__annotate__:  s   € ÷ 	hñ 	h�Sð 	hÐ3ñ 	hr   c                 óª  <€  \         P                  ! SR .R V  4       ORRRR^\         P                  RR7      pTP
                  ^ 8w  d   R# TP                  P                  4        Uu. uF<  q"P                  4       '       g   K  TP                  R\        T 4      ^,
          4      NK>  	  up#   \        \         P                  3 d     R# i ; iu upi )z-Ac              3  ó.   "  € T F  pR V R2x € K  	  R# 5i)rj   rL   Nr   )rÞ   r#  s   & r   rß   Ú-_ps_git_holder.<locals>.ps.<locals>.<genexpr><  s   é € Ð1MÁWÀ°B°q°c¸µ)ÃWùs   ‚Trl   rG   Fr"  N)rw   rx   r  r!   rz   r  ry   rX   rN   rÜ   r·   )r6  r~   r[   Úps_bins   *  €r   ri   Ú_ps_git_holder.<locals>.ps:  s¹   ø€ ð	Ü—.’. &¨$Ð!NÑ1MÁWÓ1MÐ!NÐ_cØ&*°WÀYØ)+´:×3EÑ3EÈUôTˆCð
 �>‰>˜QÔÙØ?B¿z¹z×?TÑ?TÔ?VÓgÑ?V°t×ZdÑZd×ZfÔ2�—
‘
˜4¤ W£°Õ!1Ö2Ñ?VÑgÐgøô	 œ×3Ñ3Ð4ô 	Úð	üò hs   ƒ7B. Á)CÂ&CÂ.CÃCra   rè  r  ÚcommandFr  r   rÚ   r	  r  )z/bin/psz/usr/bin/ps)rõ   rø   rÀ  r·   rÜ   ÚisdigitrD   r   r–  r²  rQ   rí  rÿ  r-  rÎ  rÐ  rë   r0  ræ  r›  r-  r   r#   )r  r°   r£   rî  rõ   ri   ÚnamedÚcommandsÚrowr9   Ú
candidatesrÁ  r,  rÏ  ra   rÙ  r;  s   &&&&            @r   r$  r$  ,  s]  ø€ ó ð �\‰\˜$Ó×kÐk¤4Ñ(dÑ4NÓ(dÐfjÓ#k€FØ‚~Ù÷	hð 	hñ ˆu�e˜VÓ$€EÙ�%˜Ó#€HØ‚}˜Ò(ÙÙ.6ÓH©h s¼#¸c»(Àa¹-Ô"ˆC��F�C˜•F—L‘L“NÒ"©h€DÐHØ')€JÜˆÜˆs‹8�qŒ=  Q¥§¡×!1Ò!1°c¸!µf·n±n×6FÒ6FÌ3ÈsÐSTÍvË;ÔZ\×ZcÒZcÓZeÔKeÙÜ˜˜A�ÓÒ'°·±¸#¸a½&×1AÒ1AÄlÐSWÐ\]ÕX^ÕS_Ð`aÕSb×FcÒFcÙØ�x‰x˜˜A�Ó×+Ð+ C¨¥F 8ˆÜ˜˜Q�Ó Ò(Ø˜•F�8ˆDÜœ˜C �F› W×-Õ-Ô2CÀD×2RÕ2RØ!%�s˜1•vÔñ ÷ ÙÜ�dœF :Ó.Ó/€DØ‚|ÙÜ˜dÓ,€FØ×%Ñ%Ö'‰	ˆØ�h‰h�s‹mˆØŠ;œ>¬#¨c«(×3Ò3ÚÜ˜ 4¨×0Ô0Ü˜T #  b¨¯©´2·7±7×3CÑ3CÀDÈÅGÓ3LÐ2YÈtÐTWÍyÐ2YÓ)ZÐ([Ð[\Ð]Ó^Ò^ñ (ñ ùò1 Is   Á"K'Á9#K'c               ó$   € V ^8„  d   QhRRRRRR/# )r
   r°   r   r£   rñ  r   r$   r   )r   s   "r   r   r   d  s&   € ÷ Wñ W ð W¨Kð W¸Cñ Wr   c                ó’   € \         P                  R8X  d   RM\        V R,          V4      p\        V\        4      '       d   RV R2# R# )z\Who keeps ``index.lock`` for the user-facing message: ``pid N (name)`` when it can be named.rƒ   Nú
index.lockza running git (r  za running git)r   rr   rù  r¸  r›  )r°   r£   Úhelds   && r   Ú_index_lock_holderrG  d  sA   € ä—<‘< 7Ô*‰4´
¸7À\Õ;QÐSWÓ0X€DÜ(2°4¼×(AÒ(Aˆ_˜T˜F !Ð$ÐVÀÐVr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r
   r°   r   r£   rñ  rî  r4   r   r   )r   s   "r   r   r   j  s*   € ÷ ñ  dð °+ð ÐRVð Ðcgñ r   c               óÐ  € V R,          p\         P                  ! 4       ^,           pVP                  4       '       d�   \        P                  R8X  d   RM\        W1VR7      pVRJ g   \        P                  R8X  d    VP                  4        R# Vf   R# \         P                  ! 4       V8”  d   R# \         P                  ! R4       K¢  R#   \         d     R# \         d     LPi ; i)a‚  Drop a killed git's ``index.lock`` (it refuses every git command) once its owner is PROVEN gone.

False while a live git may hold it, or when this platform cannot prove it dead: the caller then
keeps the interrupted-pull marker, so the next launch tries again instead of a rollback being lost.
``any_git``: every git working in ``root`` keeps it, readers included (:func:`_held_open`).
rE  rƒ   N)rî  FTgš™™™™™¹?)
r   r‘  r   r   rr   rù  ÚunlinkÚFileNotFoundErrorr•   r   )r°   r£   rî  rz  r˜  rF  s   &&$   r   Ú_release_dead_index_lockrL  j  s°   € ð �\Õ!€DÜ�~Š~Ó !Õ#€HØ
�+‰+�-Š-Ü—|‘| wÔ.‰t´J¸tÐSZÔ4[ˆØ�5‹=œCŸL™L¨GÔ3ðØ—‘”Ùð
 Š\ÙÜ�>Š>Ó˜hÔ&ÙÜ�
Š
�3ŽÙøô %ô ÚÜ"ô Ùðús   Á<C
 Ã
C%ÃC%Ã!C%Ã$C%z.hermes-update-zip-swapc               ó$   € V ^8„  d   QhRRRRRR/# )r
   r   r   rn   r$   r   ÚNoner   )r   s   "r   r   r   ‹  s!   € ÷ ñ ˜Tð ¨ð °ñ r   c                óú  € \         P                  \         P                  ,          \         P                  ,          \	        \         R^ 4      ,          p V P                  V P                   R\         P                  ! ^4      P                  4        R24      p \         P                  ! W2R4      p  \         P                  ! TRRR7      ;_uu_ 4       pTP                  T4       TP                  4        \         P                  ! TP                  4       4       R	R	R	4       \         P                   ! Y04       R	#   \         d     Kó  i ; i  + '       g   i     L:; i  \"         d    TP%                  RR
7       h i ; i)a‘  ``text`` at ``path`` as one durable record, never a half-written one.

The temp is an unpredictable name created exclusively (no-follow) beside ``path``: a pre-existing
name there is never written through (its symlink or hardlink would carry the record onto another
file) and never deleted (it may be a user's file: review Z5). fsync before the rename: an empty
record over a mixed tree is no record.
Ú
O_NOFOLLOWTÚ.z.tmprŒ  Úwrl   rµ   N©Ú
missing_ok)r   ÚO_WRONLYr�  ÚO_EXCLr  Ú	with_namer0   ÚurandomÚhexrs   ÚFileExistsErrorÚfdopenr•  ÚflushÚfsyncÚfilenorG   ÚBaseExceptionrJ  )r   rn   ÚflagsÚtmpry  r™   s   &&    r   Úwrite_durable_textrb  ‹  s  € ô �K‰Kœ"Ÿ*™*Õ$¤r§y¡yÕ0´7¼2¸|ÈQÓ3OÕO€EØ
Ø�n‰n §	¡	˜{¨!¬B¯JªJ°q«M×,=Ñ,=Ó,?Ð+@ÀÐEÓFˆð	Ü—’˜ UÓ+ˆBØðÜ�YŠY�r˜3¨×1Õ1°VØ�L‰L˜ÔØ�L‰LŒNÜ�HŠH�V—]‘]“_Ô%÷ 2ô 	�
Š
�3Öøô ô 	Úð	ú÷ 2×1ûô
 ô Ø�
‰
˜dˆ
Ô#Øðús7   ÂD6 Â/!E ÃAEÄE Ä6EÅEÅE	ÅE ÅE:Úafter_failurec               ó$   € V ^8„  d   QhRRRRRR/# )r
   Úproject_rootrñ  rc  r4   r   r   )r   s   "r   r   r   ¦  s(   € ÷ Bñ B¨;ð BÐQUð BÐbfñ Br   c          
     ód  €  V f   \        4       MT p\        V4      pVP                  4       '       g-   \        V4      \        ,          P                  4       '       g   R# \        V4      '       d   R# Rp\        V4      \        ,          P                  4       '       dƒ   \        \        V4      4      ;_uu_ 4       pV'       d6   \        VP                  V4      \        P                  R7        RRR4       R# ^ RIHp V! V4      '       d    RRR4       R#  RRR4       VP                  4       '       g   R# \        VP                  4      ;_uu_ 4       pV'       g   V'       d    RRR4       R# \        R4      hVP                  4       '       g    RRR4       R# \        \        V4      4      ;_uu_ 4       pV'       d>   \        VP                  V4      \        P                  R7        RRR4       RRR4       R# \!        W#VR7      uuRRR4       uuRRR4       #   + '       g   i     EL; i  + '       g   i     M; i RRR4       R#   + '       g   i     R# ; i  \"        \$        P&                  \(        3 d*   p\        R	T 2\        P                  R7        Rp?R# Rp?ii ; i)
aÏ  Put back the files a killed ``hermes update`` had half-moved to the new commit.

``after_failure``: the updater itself calls this when git exited non-zero mid-move (a locked or
read-only file): same restore, and the marker stays whenever the tree is not verified whole.

Returns True when the tree changed under this process: modules it already imported may be the
half-written ones, so the caller must relaunch (``relaunch_after_restore``).

Fast path (no marker) is one or two ``stat`` calls. Acts only when the marker's owner is gone,
HEAD is still the pre-pull commit and no merge/rebase is in progress; then every path git wrote
(the target's content, or torn on the way there) returns to HEAD (the commit the venv was built
for), so the install is whole again and ``hermes update`` redoes the update from the start. Local
edits are never touched; the updater's autostash (if any) stays in ``git stash list``. Concurrent
launches take turns (``_restore_claim``); a launch that waited out another's restore relaunches.

A torn ``hermes_bootstrap.py``, ``hermes_cli/__init__.py`` or recovery/lock/custody module fails
before (or inside) the checkout's copy of this code: a minted launcher then runs the copy the
updater published beside the marker (``RECOVERY_CLOSURE``). Limits, by design: other entry points
(``python -m``, the ``hermes-agent`` hook's ``agent/__init__.py``) have no such fallback, and a
launcher minted before that fallback existed has none either. A file git also changes that the user deleted, emptied or cut to a prefix of git's version
looks exactly like git's own half-written file and is restored too, as is a user edit to a
conflicted path or, on git < 2.38, to a path both sides of a custom-branch merge changed.
NFuF   âš  Not repairing the checkout now: {}. Launch again once it finishes.r   )Úrestore_interrupted_zip_swapTzdhermes: another Hermes launch is finishing an interrupted `hermes update`; launch again in a moment.©rc  u8   âš  Could not check for an interrupted `hermes update`: )rA   r½   r¶   r   ÚZIP_SWAP_JOURNALÚ_pytest_owns_live_checkoutÚ_checkout_custodyr'   r   r   r   Úhermes_cli._early_recovery_ziprg  r™  r@   Ú
SystemExitÚ_restore_holding_claimr!   rw   rz   rU   )	re  rc  r£   r�   Ú	busy_noteÚbusyrg  Úclaimedr/   s	   &$       r   Úrestore_interrupted_pullrr  ¦  sÿ  € ð0)aØ".Ò"6Œ}Œ¸LˆÜ(¨Ó.ˆØ�~‰~×Ò¬¨d«Ô6FÕ)F×(OÑ(O×(QÒ(QÙÜ% d×+Ò+Ùð ]ˆ	Ü�‹JÔ)Õ)×2Ñ2×4Ò4Ü"¤4¨£:×.Ô.°$ßÜ˜)×*Ñ*¨4Ó0´s·z±zÕBØ ÷ /Ñ.õ Xá/°×5Ò5Ø÷ /Ñ.ð 6÷ /ð �~‰~×ÒÙÜ˜FŸM™M×*Ô*¨gßß Ø ÷ +Ñ*ô !ð "=ó >ð >à—>‘>×#Ò#Ø÷ +Ñ*ô #¤4¨£:×.Ô.°$ßÜ˜)×*Ñ*¨4Ó0´s·z±zÕBØ ÷ /÷ +Ñ*ô" .¨dÈ-ÔX÷	 /Ñ.÷ +Ò*÷ /×.Ð.ú÷. /×.úÐ.÷ +ñ* ÷+ +Ö*ñ* ûô ”Z×/Ñ/´Ð<ô aäÐHÈÈÐNÔUX×U_ÑU_×`Ñ`ÙûðaúsÍ   ‚AI& ÁI& Á2AI& Â:4H Ã.I& Ã8H ÄH ÄI& ÄI& Ä8I& ÅIÅ&IÅ'I& Å1 IÆIÆI& ÆIÆ94H4	Ç-IÇ5I& Ç?H4	È
IÈ
I& È H1	È+	I& È4IÈ?IÉI& ÉI#	ÉI& É#I& É& J/ÊJ*Ê*J/c               ó   € V ^8„  d   QhRR/# )r
   r£   r   r   )r   s   "r   r   r   ì  s   € ÷ %(ñ %(˜Dñ %(r   c              #  ó$  "  €  ^ RI Hp TP                  \        T 4      4      pTe;   TP                  \        T 4      4      '       g   TP                  \        T 4      4      pTeF   TP                  \        T 4      4      '       g   Rx € R# TP                  T4      ;'       g    Rx € R#  Rx € TP                  4        R#   \         d,   p\        R\	        T4      P
                   RT R24      ThRp?ii ; i  TP                  4        i ; i5i)aÐ  Hold the checkout kernel lock (``hermes_cli.update_lock``) for a repair, like an updater (R2).

Yields ``""`` while this process holds or joined it (the updater's own ``after_failure``
settle and its children join), else the busy reason: a live update tree owns the checkout and
the repair leaves the tree alone. The restore's mutating git children inherit the lock (POSIX)
or join this process's kill-on-close job (Windows) through ``update_custody.run_git``, so a
launch killed mid-restore keeps the checkout locked until its git is gone.

A torn lock module cannot prove custody: an already-running updater retains its imported
copy and may still be writing this checkout. Refuse launch rather than race that writer.
)Úupdate_lockzNCannot safely repair the interrupted update: checkout custody is unavailable (ú: zŒ). The recovery marker was kept. Wait for any running update to finish; if this persists, repair the checkout before launching Hermes again.NrÈ   z&another update holds the checkout lock)Ú
hermes_cliru  r’   ÚRuntimeErrorrR   r)   Ú_acquire_checkoutr   Úcheckout_lock_heldÚdescribe_holderÚ_release_checkout)r£   ru  r/   Úholders   &   r   rk  rk  ë  s  é € ðÝ*ð ×*Ñ*¬4°«:Ó6€FØÒ +×"@Ñ"@ÄÀdÃ×"LÒ"Lð ×.Ñ.¬t°D«zÓ:ˆØÒØ×-Ñ-¬d°4«j×9Ò9ð ŠHÙØ×)Ñ)¨&Ó1×]Ð]Ð5]Ò]Ùð(ØŠà×%Ñ%Ö'øô/ ô ÜðÜ�S“	×"Ñ"Ð# 2 c Uð +-ð-ó
ð
 ð	ûðûð. 	×%Ñ%Õ'üsF   ‚D„C ŠBDÂ$DÂ,C; Â0DÃC8Ã&C3Ã3C8Ã8DÃ;DÄDc               ó$   € V ^8„  d   QhRRRRRR/# )r
   Úfieldsr(  r�   r   r   r4   r   )r   s   "r   r   r     s&   € ÷ 	Zñ 	Z˜~ð 	Z°tð 	ZÀñ 	Zr   c                ó<  €  \        V P                  RR4      4      pV\        P                  ! 4       8g  ;'       dO    \        V4      ;'       d<    \        P                  ! 4       VP                  4       P                  ,
          \        8  #   \         d    Rp L}i ; i)zVThe updater that wrote ``marker`` is still running and the marker is fresh: hands off.ra   rÈ   rÛ   )
rD   rQ   rU   r   r–  r›   r   r|   Úst_mtimeÚ!_INTERRUPTED_PULL_MAX_AGE_SECONDS)r  r�   Úowners   && r   Ú_claim_owner_aliver„    s‡   € ðÜ�F—J‘J˜u bÓ)Ó*ˆð
 ”R—Y’Y“[Ñ ÷ Yð Y¤_°UÓ%;÷ Yð YÜ—	’	“˜fŸk™k›m×4Ñ4Õ4Ô7XÑXðZøô	 ô ØŠðús   ‚B ÂBÂBc               ó4   € V ^8„  d   QhRRRRRRRRRRR	R
RR/# )r
   r  r(  r°   r   r£   rÀ   r$   Úrollbackrc  r4   r   rb   r   )r   s   "r   r   r      sA   € ÷ ñ ¨ð À$ð Èdð Ø!$ðØ03ðØGKðØPZñr   c          	     ó–  € V ! RRR4      pRV9  gH   VP                   ^ 8X  d   VP                  P                  4       MRVR,          P                  4       8w  d«   VP                  RR4      P                  4       P	                  R4      pV'       d
   RV RV R	2M>RT R
VP                  RR4      P                  4       R,          ;'       g
    VR,           R	2p	\        RVR,           RV	 R2\        P                  R7       R# \        WW4WVR7      p
V
e,   \        RVR,           RV
 R2\        P                  R7       R# \        V 4      # )zZRedo a killed syntax rollback's HEAD move to ``pre``; the new HEAD, or None (marker kept).zsymbolic-refrV  ÚHEADÚrefrÈ   zrefs/heads/z`git -C ú
 checkout Ú`z checkout --detach r  ºNé
   Nu/   âš  An interrupted `hermes update` rollback to zB was not resumed: HEAD now names another branch. Switch back with z*, then launch `hermes` again to finish it.r   Nrh  z cannot resume yet (ú); the next launch retries.)
r  ry   rN   rQ   Úremoveprefixr'   r   r   Ú_redo_rollback_headÚ
_read_head)rñ   r  r°   r£   rÀ   r†  rc  r?  r‰  ÚbackÚreasons   &&&&&&$    r   Ú_resume_killed_rollbackr”     sO  € ñ
 �  fÓ-€EØ�FÔ°u×7GÑ7GÈ1Ô7L˜uŸ|™|×1Ñ1Ô3ÐRTÐY_Ð`eÕYf×YlÑYlÓYnÔnð �j‰j˜ Ó#×)Ñ)Ó+×8Ñ8¸ÓGˆß58�(˜4˜& 
¨3¨%¨qÑ1Ø ˜vÐ%8¸¿¹ÀHÈbÓ9Q×9WÑ9WÓ9YÐZ]Õ9^×9jÐ9jÐbeÐfiÕbjÐ8kÐklÐmð 	äÐ?ÀÀCÅ¸zð J2Ø26°Ð7aðcä—:‘:õ	ñ ô
 ! ¨t¸(Ô`€FØÒÜÐ?ÀÀCÅ¸zÐI]Ð^dÐ]eð f)ð )Ü/2¯z©zõ	;áÜ�c‹?Ðr   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r
   r°   r   r£   r  r$   Ústashr   rN  r   )r   s   "r   r   r   <  s0   € ÷ 
ñ 
 $ð 
¨dð 
¸Cð 
Èð 
ÐPTñ 
r   c                ó  € V R,          p\         '       gx   VP                  4       '       d`   VP                  RR7      P                  4       V8X  d9   Rs \	        RV R2V'       d   RV R2MR	,           \
        P                  R
7       R# R# R# R# )zSOnce per process, tell the user to abort the killed updater's own unfinished merge.Ú
MERGE_HEADrF   rµ   TuD   âš  A killed `hermes update` left its merge unfinished. Run `git -C z# merge --abort`, then launch again.z& Your local changes are in its stash (ú).rÈ   r   N)Ú_merge_advice_shownr¶   rM   rN   r'   r   r   )r°   r£   r  r–  Ú
merge_heads   &&&& r   Ú_advise_killed_mergerœ  <  s‘   € ð ˜<Õ'€JßÓ J×$6Ñ$6×$8Ò$8Ø×$Ñ$¨kÐ$Ó:×@Ñ@ÓBÀfÔLà"ÐÜÐTÐUYÐTZð [#ð #ß\aÐ(NÈuÈgÐUWÑ&XÐgiõkä—:‘:÷	ñ Mñ %9Ñr   c               ó    € V ^8„  d   QhRRRR/# )r
   r£   r   r  r$   r   )r   s   "r   r   r   I  s   € ÷ ñ �tð  sñ r   c                óÄ   a aa€ \        V4      o ^ RIHo RRRR/R	 TT T3R
 lllpT#   \         d,   p\	        R\        T4      P                   RT R24      ThRp?ii ; i)zeThe restore's ``git(*args)``: the binary the updater recorded, every run under custody (``run_git``).)Úrun_gitzKCannot safely repair the interrupted update: child custody is unavailable (rv  zS). The recovery marker was kept. Repair the checkout before launching Hermes again.Nr  rn   Tc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r
   rÁ  r$   r  rb   rn   r4   r   zsubprocess.CompletedProcessr   )r   s   "r   r   Ú"_custody_git.<locals>.__annotate__U  s)   € ÷ 3ñ 3�3ð 3˜zð 3¸ð 3ÐHcñ 3r   c                óÌ   <€ SR R\        S4      .p\        RRT R\        S4      RRR^xRV e   RM\        P                  /V'       d	   R	RR
RRR/M/ B pS! V\	        V4      3/ VB # )z--literal-pathspecsú-CÚinputrÙ  rm   Tro   r  Nrn   rI   rl   rJ   rG   r   )r$   rå   rw   r  Úlist)r  rn   rÁ  r  ÚkwargsÚ
executabler£   rŸ  s   $$*  €€€r   rñ   Ú_custody_git.<locals>.gitU  sŽ   ø€ ØÐ1°4¼¸T»ÐCˆÜñ d˜Eð d¤s¨4£yð dÀð dÈsð dØ$)Ò$5™D¼:×;MÑ;MðdçUY˜& $¨
°G¸XÀyÑQÐ_añdˆñ �tœT $›ZÑ2¨6Ñ2Ð2r   )r
  Úhermes_cli.update_custodyrŸ  r’   rx  rR   r)   )r£   r  r/   rñ   r§  rŸ  s   f&  @@r   Ú_custody_gitrª  I  s   ú€ ä  Ó*€JðÝ5ð3¨Dð 3¸t÷ 3ô 3ð €Jøô ô ÜðÜ�S“	×"Ñ"Ð# 2 c Uð +AðAó
ð ð		ûðús   �) ©A´&AÁAc          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r
   r  r(  r�   r   r£   rc  r4   r   ztuple[bool, bool, bool]r   )r   s   "r   r   r   _  s1   € ÷ 3ñ 3˜nð 3°dð 3À$ð 3Ø%)ð3Ø.Eñ3r   c               ó   € VP                   pVR,          pT;'       d    VP                  4       pV'       d   \        W4      '       d   \        W4       \	        V P                  RR4      P                  4       4      ;'       d$    V R,          P                  4       \        V4      8H  pT;'       g    V'       * ;'       d    \        WB4      pWgV3# )aW  ``(foreign_lock, known_foreign, index_free)`` for the git dir's ``index.lock``, before any git runs.

A killed git's lock goes first (an unresolvable or failing git would otherwise strand it, and it
refuses every later git command). Proven-dead only; after a git that EXITED (``after_failure``) a
lock now is another git's, never ours to drop.rE  Úforeign_lockrÈ   )	r@   r   Ú_lock_predates_moveÚ_remember_foreign_lockr4   rQ   rN   Ú_lock_identityrL  )	r  r�   r£   rc  r°   rz  r­  Úknown_foreignÚ
index_frees	   &&&$     r   Ú_judge_index_lockr³  _  s´   € ð �m‰m€GØ�\Õ!€DØ ×2Ð2 T§[¡[£]€LßÔ+¨F×9Ò9ô 	˜vÔ,ô ˜Ÿ™ N°BÓ7×=Ñ=Ó?Ó@÷ ?ð ?Øˆ~Õ×$Ñ$Ó&¬.¸Ó*>Ñ>ð à×`Ð` mÔ"3×"_Ð"_Ô8PÐQXÓ8_€JØ¨
Ð2Ð2r   c               ó   € V ^8„  d   QhRR/# )r
   r   rb   r   )r   s   "r   r   r   v  s   € ÷ 	ñ 	�zñ 	r   c                óT  € V ! R R4      pVP                   ^ 8X  d   VP                  P                  4       MRp\        P	                  V4      '       d   V# VP
                  P                  4       ;'       g    RV: RVP                    2p\        RV R2\        P
                  R7       R# )	rU  rˆ  rÈ   zgit printed z, exit uB   âš  Could not read HEAD to repair an interrupted `hermes update` (rŽ  r   N)r  ry   rN   Ú_OIDrÊ   r   r'   r   )rñ   Úheadrä   Údetails   &   r   r‘  r‘  v  s‘   € áˆ{˜FÓ#€DØ!%§¡°AÔ!5ˆ$�+‰+×
Ñ
Ô
¸2€CÜ‡~�~�c×ÒØˆ
Ø�[‰[×ÑÓ ×RÐR l°3±'¸ÀÇÁÐ@QÐ$R€FÜ	ÐNÈvÈhð W%ð %Ü+.¯:©:õ7ár   c               ó0   € V ^8„  d   QhRRRRRRRRRRRR	/# )
r
   r°   r   r£   r�   rÀ   r$   r  r   rN  r   )r   s   "r   r   r   ‚  s@   € ÷ mñ m¨ð m°Tð mÀ4ð mÈcð mÐ[^ð mÐcgñ mr   c                ó  € \        WV4      '       gC   \        RVR,           RVR,           RV RV RVR,           R2\        P                  R7       R	# VP	                  4        \        R
VR,           R2\        P                  R7       R	# )zÛ``target`` is gone (a gc or re-clone): nothing left to compare the tree against.

Unattributable bytes are not proof of a whole tree: only a clean tracked tree at ``pre`` retires
the record, rollback or not (review G2).uG   âš  An interrupted `hermes update` left tracked files that differ from rŒ  z and commit z/ is gone; the marker was kept. Inspect `git -C z status`, then `git -C rŠ  z+ -- <file>` for each file the update wrote.r   Nu7   âš  Ignoring a stale interrupted-update marker: commit z	 is gone.)Ú_rollback_verifiedr'   r   r   rJ  )rñ   r°   r£   r�   rÀ   r  s   &&&&&&r   Ú_retire_unattributabler¼  ‚  s‘   € ô
 ˜c¨C×0Ò0ÜÐWÐX[Ð\_ÕX`ÐWaÐamØ˜•�ÐLÈTÈFð SØ˜˜j¨¨S­¨
Ð2]ð_äeh×eoÑeoõ	qñ 	Ø
‡M�M„OÜ	ÐCÀFÈ3ÅKÀ=ÐPYÐ
ZÔad×akÑak×lr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r
   r£   r   r�   rc  r4   r   r   )r   s   "r   r   r   �  s/   € ÷ &Uñ &U ð &U¨tð &UÀtð &UÐX\ñ &Ur   c               óŠ  a€ VP                   o\        R  VP                  RR7      P                  4        4       4      p\	        W14      '       d   R# VP                  RR4      P                  4       VP                  RR4      P                  4       rTVP                  RR4      P                  4       p\        WP                  RR4      P                  4       4      p\        W1WR	7      w  r‰p
VP                  R
R4      P                  4       pVR9   d   TMRp\        V4      pVf   R# V'       d7   V'       d/   V'       d'   WÅ8X  d!   \        YsSYTT;'       g    T	R	7      pVf   R# V'       d   V'       d   WÄ8w  d   VP                  4        R# \        ;QJ d#    V3R l\         4       F  '       g   K   RM	  RM! V3R l\         4       4      '       d   \        SWV4       R# V
'       g,   \        R\!        SV 4       R2\"        P$                  R7       R# \'        WpWE4      pVf   \)        VSWWE4       R# \+        WpWWFVW‚R7	      # )c              3  óP   "  € T F  qP                  R 4      R,          x € K  	  R# 5i)rL   rW  Nr<  rÝ   s   & r   rß   Ú)_restore_holding_claim.<locals>.<genexpr>’  s!   é € ÐkÑ7j¨t—.‘. Ó% c×*Ò*Ó7jùs   ‚$&rF   rµ   FrÀ   rÈ   r  r–  rñ   rh  r†  c              3  óR   <"  € T F  pSV,          P                  4       x € K  	  R # 5ir=   )r   )rÞ   r0   r°   s   & €r   rß   rÀ  §  s#   øé € Ð
LÑ1K¨ˆG�d�N×"Ñ"×$Ð$Ó1Kùs   ƒ$'Tu   âš  z\ holds the index after an interrupted `hermes update`; the next launch finishes the restore.r   )r­  rc  )ÚbranchÚdetach)r@   rå   rM   rX   r„  rQ   rN   rª  r³  r‘  r”  rJ  rä  r®   rœ  r'   rG  r   r   rw  r¼  Ú_put_back_written)r£   r�   rc  r  rÀ   r  r–  rñ   r­  r±  r²  r†  r·  rP  r°   s   &&$           @r   rn  rn  �  sØ  ø€ Ø�m‰m€GÜÑk°v×7GÑ7GÐQ\Ð7GÓ7]×7hÑ7hÔ7jÓkÓk€FÜ˜&×)Ò)ÙØ—*‘*˜U BÓ'×-Ñ-Ó/°·±¸HÀbÓ1I×1OÑ1OÓ1QˆØ�J‰J�w Ó#×)Ñ)Ó+€EÜ
�tŸZ™Z¨¨rÓ2×8Ñ8Ó:Ó
;€CÜ.?ÀÐPTÔ.rÑ+€L Ø�z‰z˜* bÓ)×/Ñ/Ó1€HØ#Ð';Ô;‰xÀ€Hä�c‹?€DØ‚|Ùß—CŸF t¤~Ü& s°G¸TÈØ5B×5SÐ5SÀmôUˆàŠ<Ùß—f ¤Ø�‰ŒÙß
ƒsÔ
LÕ1KÓ
L‡s‡s‚sÔ
LÕ1KÓ
L×LÒLÜ˜W d°EÔ:Ù÷ Ü�Ô'¨°Ó6Ð7ð 86ð 6Ü<?¿J¹Jõ	HáÜ˜s¨#Ó6€GØ‚Ü˜s G¨T¸3ÔGÙÜ˜S¨¸ÀXØ*6ôUð Ur   c               ó8   € V ^8„  d   QhRRRRRRRRRRRR	R
R	RR	/# )r
   r£   r   r�   rÀ   r$   r–  r†  r­  r4   rc  r   r   )r   s   "r   r   r   ¹  sH   € ÷ $ñ $ ð $¨tð $À3ð $Èsð $Ð^að $Ø$(ð$Ø9=ð$ØBFñ$r   c               ób  € Vw  ršr¼V	'       g	   V
'       d&   V'       d   \        R\        P                  R7       R# V	'       g	   V
'       d¨   \        V'       d   RMRRVR,           R2,           \        P                  R7       \        WWšV4      pV'       d\   VP                  P	                  4       P                  4       ;'       g    R	.R,          p\        R
V R2\        P                  R7       R# \        VR RR7       FD  p\        P                  ! \        4      ;_uu_ 4        W,          P                  4        RRR4       KF  	  V'       df   \        WP                  V\        V	4      R7      '       g?   \        RVR,           RV R2\        P                  R7       \        T	;'       g    T
4      # VP                  4        V	'       g   V
'       g   R# \        R\        P                  R7       V'       d    \        RV R2\        P                  R7       R#   + '       g   i     EK-  ; i)zbReturn every path git wrote (``_paths_git_wrote``) to ``pre`` and retire the marker once verified.u}   âš  Another git holds the index, so the files the update already wrote cannot be put back now; the next launch restores them.r   Fu9   âš  git stopped partway through writing the new code â€” uQ   âš  A previous `hermes update` was killed while git was writing the new code â€” zrestoring the checkout to rŒ  z...z
git failedu*     âœ— Could not restore it automatically (rŽ  c                ó$   € V P                  R 4      # )Ú/)Úcount)Úds   &r   Ú<lambda>Ú#_put_back_written.<locals>.<lambda>Í  s   € ¨a¯g©g°c¬lr   T)r\   ÚreverseN)Úownedu     âœ— The rollback to ze is not verified yet (files the update wrote still differ); the next launch retries. Inspect `git -C z	 status`.u:     âœ“ Checkout restored; `hermes update` updates it again.z6  Your local changes are still in the update's stash (r™  rÛ   )r'   r   r   Ú_put_back_pathsrN   rX   rÎ  rù   rú   r!   Úrmdirr»  r@   rç   r4   rJ  )rñ   r£   r�   rP  rÀ   r–  r†  r­  rc  rn  ro  rv  rp  r*   r“  rã   s   &&&&&&&$$       r   rÄ  rÄ  ¹  s¦  € ð &-Ñ"€G�Hß—5ŸlÜð 4Ü:=¿*¹*õ	Fáß—%ÜÏmÑJØbØ,¨S°­X¨J°cÐ:õ;äADÇÁõ	Mô ! ¨G¸DÓAˆßð —m‘m×)Ñ)Ó+×6Ñ6Ó8×JÐJ¸\¸NÈBÕOˆFÜÐ>¸v¸hÐFaÐbÜ—z‘zõ#áÜ�hÑ$:ÀD×IˆÜ× Ò ¤×)Õ)Ø�Z×ÑÔ ÷ *Ñ)ñ J÷ Ô*¨3·±¸sÌ#ÈgË,×WÓWô 	Ð& s¨3¥x jð 1:Ø:>¸¸yðJÜPS×PZÑPZõ	\ä�G×$Ð$˜uÓ%Ð%Ø
‡M�M„OßŸ5ÙÜ	Ð
FÌSÏZÉZÕXßÜÐFÀuÀgÈRÐPÔWZ×WaÑWaÕbÙ÷ *×)Ñ)ús   Ä&HÈH.c               ó    € V ^8„  d   QhRRRR/# )r
   rz  r   r   r$   r   )r   s   "r   r   r   à  s   € ÷ +ñ +˜ð + #ñ +r   c                ó~   €  V P                  4       pTP                   RTP                   2#   \         d     R# i ; i)z_``inode:mtime_ns`` of a lock file, "" when there is none: a recreated lock is a new generation.rÈ   rX  )r|   r!   Úst_inoÚst_mtime_ns)rz  rì  s   & r   r°  r°  à  sB   € ðØ�Y‰Y‹[ˆð �i‰iˆ[˜˜"Ÿ.™.Ð)Ð*Ð*øô ô Úðús   ‚- ­<»<c               ó$   € V ^8„  d   QhRRRRRR/# )r
   r  r(  rz  r   r   r4   r   )r   s   "r   r   r   é  s!   € ÷ ;ñ ; ð ;°dð ;¸tñ ;r   c                ó„   € RV 9  d   R# V R,          P                  4       p\        V4      ;'       d    V\        V4      8H  # )z´``lock`` is the generation ``arm_tree_move`` saw before the move's git ran. A marker without
the record (an older updater's, hand-written) cannot say: every lock counts as foreign.Ú
index_lockT)rN   r4   r°  )r  rz  Úbefores   && r   r®  r®  é  s>   € ð ˜6Ô!ÙØ�LÕ!×'Ñ'Ó)€FÜ�‹<×:Ð:˜F¤n°TÓ&:Ñ:Ð:r   c               ó$   € V ^8„  d   QhRRRRRR/# )r
   r�   r   rz  r   rN  r   )r   s   "r   r   r   ò  s&   € ÷ Wñ W 4ð W¨tð W¸ñ Wr   c                ó  € \        V4      pV'       g   R# V P                  RR7      P                  4        Uu. uF  pVP                  R4      '       d   K  VNK   	  pp\	        V RP                  . VORV 2N4      R,           4       R# u upi )z_Record ``lock``'s identity in the marker (atomically: the marker is the restore's only record).NrF   rµ   zforeign_lock=r*  )r°  rM   rX   r—   rb  r-  )r�   rz  Úidentityr[   Úliness   &&   r   r¯  r¯  ò  s„   € ä˜dÓ#€HßÙØ$×.Ñ.¸Ð.ÓD×OÑOÔQó 6ÑQ�dØ—O‘O O×4÷ ˆTÑQ€Eð 6ä�v˜tŸy™yÐ)M¨5Ð)M°MÀ(ÀÐ2LÐ)MÓNÐQUÕUÖVùò6s   ¸B	ÁB	c               ó0   € V ^8„  d   QhRRRRRRRRRRR	R
/# )r
   r°   r   r£   rÀ   r$   Úmoderc  r4   r   rb   r   )r   s   "r   r   r   ü  s8   € ÷ ñ  dð °$ð ¸Sð Èð Ð_cð Ðhrñ r   c               óx  € VR,          pVP                  4       '       d(   V'       g   \        W4      '       g   \        W4       R2# VR8X  dZ   V ! RRRV4      pVP                  ^ 8w  d>   RVP                  P                  4       P                  4       ;'       g    R.R,           2# V ! R	R
V4      pVP                  ^ 8w  d>   RVP                  P                  4       P                  4       ;'       g    R.R,           2# V ! RR4      p	V	P                  ^ 8w  g    V	P                  P                  4       V8w  d   R# R# )a  Move HEAD (and the index) back to ``pre`` for a killed syntax rollback; None, or why not yet.

The killed step's ``index.lock`` is reclaimed first, and only when its git is proven gone. After a
git that exited in this very process (``after_failure``) a lock is never ours to judge.
rE  z may still hold .git/index.lockrÃ  z
update-refz
--no-derefrˆ  zgit update-ref failed: r  ÚresetrV  zgit reset failed: rU  zHEAD did not move backNrÛ   )r   rL  rG  r  r   rN   rX   ry   )
rñ   r°   r£   rÀ   rÞ  rc  rz  r   rà  r·  s
   &&&&&$    r   r�  r�  ü  s  € ð �\Õ!€DØ‡{�{‡}‚}Ÿ-Ô/GÈ×/VÒ/VÜ$ WÓ3Ð4Ð4SÐTÐTØˆxÔÙ�L ,°¸Ó<ˆØ×Ñ˜qÔ Ø,¨e¯l©l×.@Ñ.@Ó.B×.MÑ.MÓ.O×.XÐ.XÐTWÐSXÐZ\Õ-]Ð,^Ð_Ð_Ù�˜˜sÓ#€EØ×Ñ˜1ÔØ# U§\¡\×%7Ñ%7Ó%9×%DÑ%DÓ%F×%OÐ%OÈ3È%ÐQSÕ$TÐ#UÐVÐVÙˆ{˜FÓ#€DØ‡�˜!Ô˜tŸ{™{×0Ñ0Ó2°cÔ9Ù'Ùr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r
   r°   r   rÀ   r$   rÎ  zset[str] | Noner   r4   r   )r   s   "r   r   r     s/   € ÷ Zñ Z Tð Z°ð Z¸Oð ZÐW[ñ Zr   c                óœ  € V ! RR4      pVP                   ^ 8w  g=   VP                  P                  4       V8w  g   VR,          P                  4       '       d   R# V ! RRRRR	4      pVP                  P	                  R
4       Uu0 uF  qf'       g   K  VR,          kK  	  ppVP                   ^ 8H  ;'       d    Vf   TMWs,          '       * # u upi )z­The rollback landed: HEAD is ``pre``, no index lock, and no tracked change among ``owned`` (the
paths the update wrote), or anywhere when they are unknown (``target`` gone).rU  rˆ  rE  Frj  z--porcelainr  z--untracked-files=nor  r  :r
  NN)r  ry   rN   r   rÜ   )rñ   r°   rÀ   rÎ  r·  rj  rk  r$  s   &&&&    r   r»  r»    s²   € ñ ˆ{˜FÓ#€DØ‡�˜!Ô˜tŸ{™{×0Ñ0Ó2°cÔ9¸gÈÕ>T×=\Ñ=\×=^Ò=^ÙÙ�˜=¨$Ð0FÈÓW€FØ&,§m¡m×&9Ñ&9¸$Ô&?ÓIÑ&?˜UÃ5Œyˆu�R�yˆyÑ&?€GÐIØ×Ñ Ñ!×YÐY°e²m©7ÈÍÔ&YÐYùò Js   Â	C	ÂC	c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r
   r£   r   rn  r'  ro  rp  r6  r   z"subprocess.CompletedProcess | Noner   )r   s   "r   r   r     s1   € ÷ ñ ˜tð ¨ið À	ð Ø"ðØ'Iñr   c                ó¶  € V'       d3   V ! RRRRRRRP                  V4      R7      pVP                  '       d   V# V'       d—   V ! R	R
RRRRRP                  V4      R7      pV F^  pWd9   d>   \        RV R\        W,          4      P                   R2\
        P                  R7       KF  W,          P                  RR7       K`  	  VP                  '       d   V# R# )zmReturn ``restore`` to HEAD and drop ``added``, renaming those in ``kept`` aside; the failed git run, or None.rn  z--source=HEADz--stagedz
--worktreez--pathspec-from-file=-z--pathspec-file-nulr  r+  ÚrmrV  z--cachedz--ignore-unmatchz  Kept z as z: it may be your own file.r   TrS  N)r-  r  r'   Ú_keep_asider0   r   r   rJ  )rñ   r£   rn  ro  rp  rx   rã   s   &&&&&  r   rÏ  rÏ    sÅ   € ÷ Ù�)˜_¨j¸,ÐH`Ø'¨t¯y©y¸Ó/AôCˆà�>�>ˆ>ØˆJßÙ�$˜˜jÐ*<Ð>VØ'¨t¯y©y¸Ó/?ôAˆãˆCØŒ{Ü˜ ˜u D¬°TµZÓ)@×)EÑ)EÐ(FÐF`ÐaÔhk×hrÑhr×sà•×#Ñ#¨tÐ#Ö4ñ	 ð
 �>�>ˆ>ØˆJÙr   c               ó    € V ^8„  d   QhRRRR/# )r
   r   r   r   r   )r   s   "r   r   r   2  s   € ÷ ñ �dð ˜tñ r   c                óø   € ^p\         P                  P                  T P                  V P                   R2V^8”  d   RV 2MR,           4      ;p4      '       d   V^,          pKa  \         P
                  ! W4       V# )zjRename ``file`` to a free ``<name>.hermes-update-kept[-N]`` beside it (never importable, never clobbered).z.hermes-update-keptr¬   rÈ   )r   r   ÚlexistsrW  r0   r    )r   r+  Úasides   &  r   ræ  ræ  2  si   € à	€AÜ
�'‰'�/‰/ 4§>¡>°T·Y±Y°KÐ?RÐ2SÐbcÐfgÔbgÐYZÐ[\ÐZ]ÑW^ÐmoÕ2pÓ#qÐq˜%×
rÒ
rØ	ˆQ�ŠÜ‡I‚IˆdÔØ€Lr   c               ó   € V ^8„  d   QhRR/# )r
   r   rN  r   )r   s   "r   r   r   ;  s   € ÷ #ñ # ñ #r   c                 ó–  € \         P                  .\         P                  R,          Op \         P                  P	                  4        \         P
                  P	                  4        \         P                  R8X  d+   \         P                  ! \        P                  ! V 4      4       \        P                  ! \         P                  V 4       R# )zíRe-run this command from the restored tree; never returns.

Everything imported so far (this package, ``hermes_bootstrap``, ``hermes_cli.main`` itself) may
be the killed git's new files, and they would run against the restored old tree.
r½  rƒ   N)r   r§  Ú	orig_argvry   r\  r   rr   Úexitrw   Úcallr   Úexecv)r9   s    r   Úrelaunch_after_restorerñ  ;  sq   € ô �N‰NÐ/œSŸ]™]¨2Õ.Ð/€DÜ‡J�J×ÑÔÜ‡J�J×ÑÔÜ
‡|�|�wÔä�Š”—’ Ó&Ô'Ü‡H‚HŒS�^‰^˜TÖ"r   c               ó    € V ^8„  d   QhRRRR/# ©r
   r£   r   r   r4   r   )r   s   "r   r   r   J  s   € ÷ bñ b Tð b¨dñ br   c                ó    € R\         P                  9   ;'       d5    V \        \        4      P	                  4       P
                  P
                  8H  # )z‘Keep lifecycle tests from repairing the checkout that runs the suite.

Copied installations in tmp_path remain eligible for real recovery tests.
ÚPYTEST_CURRENT_TEST)r   r  r   r>   r?   r@   r¼   s   &r   rj  rj  J  s9   € ð
 !¤B§J¡JÑ.×aÐa°4¼4Ä»>×;QÑ;QÓ;S×;ZÑ;Z×;aÑ;aÑ3aÐar   c               ó    € V ^8„  d   QhRRRR/# ró  r   )r   s   "r   r   r   R  s   € ÷ 	ñ 	˜tð 	¨ñ 	r   c                óº   € ^ RI HpHpHp V! V 4      P	                  4       '       g   R#  V! V! V 4      4      P                  4       '       * #   \         d     R# i ; i)zATrue when PM recorded an environment whose site-packages is gone.)Úruntime_facts_pathÚselected_venvÚsite_packagesFT)Úpm.environmentsrø  rù  rú  r¶   rö  rx  )r£   rø  rù  rú  s   &   r   Ú_missing_environmentrü  R  sR   € çPÑPá˜dÓ#×+Ñ+×-Ò-ÙðÙ ¡¨tÓ!4Ó5×<Ñ<Ó>Ô>Ð>øÜô Úðús   ª A ÁAÁAc               ó    € V ^8„  d   QhRRRR/# )r
   r�   r   r   rN  r   )r   s   "r   r   r   ^  s   € ÷ 2ñ 2 $ð 2¨4ñ 2r   c                ó†  € ^ RI p\        P                  ! \        4      ;_uu_ 4        \	        V 4      ^,           pV P                  RRR7      p\        ;QJ d*    R VP                  4        4       F  '       g   K   RM	  RM! R VP                  4        4       4      '       dX   VP                  4        Uu. uF  qDP                  R4      '       d   K  VNK  	  ppR	P                  . VORV 2N4      R	,           pMVP                  R
V/4      pV P                  VRR7       RRR4       R# u upi   + '       g   i     R# ; i)zNBump ``marker``'s attempt count in its own format so the retry limit can trip.NrF   rG   rH   c              3  óB   "  € T F  qP                  R 4      x € K  	  R# 5i)r�  N)r—   rÝ   s   & r   rß   Ú(_count_failed_attempt.<locals>.<genexpr>g  s   é € ÐEÑ3D¨4�‰˜v×&Ð&Ó3Dùr?  TFz	attempts=r*  rK   rl   rµ   )rO   rù   rú   r!   r_   rM   rä  rX   r—   r-  ÚdumpsÚ
write_text)r�   rO   rK   rŸ   r[   rÜ  s   &     r   Ú_count_failed_attemptr  ^  sø   € ãô 
×	Ò	œW×	%Õ	%Ü(¨Ó0°1Õ4ˆà×Ñ¨¸YÐÓGˆß‹3ÑE°4·?±?Ô3DÓE�3�3Š3ÑE°4·?±?Ô3DÓE×EÒEØ&*§o¡oÔ&7Ó\Ñ&7˜d¿¹È{×?[—T�TÑ&7ˆEÐ\Ø—9‘9Ð=˜uÐ=¨	°(°Ð&<Ð=Ó>ÀÕE‰Dà—:‘:˜z¨8Ð4Ó5ˆDØ×Ñ˜$¨ÐÔ1÷ 
&Ñ	%ùò
 ]÷ 
&×	%Ð	%ús1   §AD/Á:(D/Â#D/Â5D*ÃD*ÃAD/Ä*D/Ä/E 	Úexplicitc               ó(   € V ^8„  d   QhRRRRRRRR/# )r
   re  rñ  r9   zlist[str] | Noner  r4   r   r   )r   s   "r   r   r   o  s+   € ÷ 7ñ 7 Kð 7Ð>Nð 7Ðdhð 7Ðuyñ 7r   c               ó>  € V f   \        4       M\        V 4      P                  4       pV'       g   \        V4      '       d   R# ^ RIHp T! Vf   \        P                  R,          MT4      pV'       g   VR,          R.8X  d   R# ^ RIH	p V! V4      R,          pVR	,          VR
,          V3pV U	u. uF  q™P                  4       '       g   K  V	NK  	  p
p	VR,          P                  4       '       d"   V'       g   V
'       g   \        V4      '       g   R# \        V4      pVf   R#  V U	u. uF  q™P                  4       '       g   K  V	NK  	  p
p	V
'       gI   V'       g+   \        V4      '       g    \        P                  ! V4       R# VP                  RRR7       V.p
\         ;QJ d    R V
 4       F  '       g   K   RM	  RM! R V
 4       4      '       d    \        P                  ! V4       R# V'       go   \         ;QJ d    R V
 4       F  '       g   K   RM	  RM! R V
 4       4      '       d5   \#        R\        P$                  R7        \        P                  ! V4       R# ^ RIHp \#        R\        P$                  R7       V! V4       V
 F  pVP+                  RR7       K  	  VR,          R.8H  s\#        R\        P$                  R7        \        P                  ! V4       R# u up	i u up	i   \.         d€   p^ RIHp \3        T\4        4      '       d   T! Y>4      '       d   h T
 F  p\7        T4       K  	  \#        RT R2\        P$                  R7        Rp?\        P                  ! T4       R# Rp?ii ; i  \        P                  ! T4       i ; i)zRAsk PM to restore dependencies before activation; leave failed requests retryable.NF)Úcommand_argvr½  rq   rû   ©Úinstall_state_dirz.repair-incompletez.update-incompletez.lazy-refresh-incompletezpyproject.tomlz{"attempts": 0}rl   rµ   c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir=   )r    ©rÞ   r�   s   & r   rß   Ú$recover_if_needed.<locals>.<genexpr>Ž  s   é € ÐC¹7°Ô$ V×,Ð,»7ùs   ‚Tc              3  óF   "  € T F  p\        V4      \        8¬  x € K  	  R # 5ir=   )r_   Ú _EARLY_CORE_INSTALL_MAX_ATTEMPTSr  s   & r   rß   r  �  s   é € ÐxÑpwÐflÔ 5°fÓ =ÔAaÖ aÓpwùs   ‚!zOhermes: automatic dependency repair retry limit reached; run `hermes pm repair`r   )Úrepair_dependenciesz8hermes: repairing the recorded dependency environment...rS  r7   z'hermes: dependency environment repaired)Ú install_state_permission_messagez"hermes: dependency repair failed: z; run `hermes pm repair`)rA   r   r?   rj  Úhermes_cli._parserr  r   r9   rû  r	  r¶   rü  Ú_claim_recovery_lockr   r“  r  rä  r'   r   Úpm.recoveryr  rJ  r8   r’   r  r¸  r•   r  )re  r9   r  r£   r  rÁ  r	  Úmissing_markerÚmarker_pathsr   Úmarkersrz  r  r�   r/   r  s   &&$             r   Úrecover_if_neededr  o  s§  € ð +Ò2Œ=Œ?¼¸\Ó8J×8RÑ8RÓ8T€DßÔ2°4×8Ò8ÙÝ/á¨ªœŸ™ ž¸$Ó?€Dß˜˜R� T FÔ*ÙÝ1á& tÓ,Ð/CÕC€NØÐ/Õ/°Ð8RÕ1RÐTbÐc€LÙ ,Ó?¡˜·±·�tˆt¡€GÐ?àÐ#Õ#×,Ñ,×.Ò.·xÇ7ÔNbÐcg×NhÒNhÙÜ Ó%€DØ‚|Ùð á$0ÓC¡L˜D·L±L·N—4�4¡LˆÐCßßÔ$8¸×$>Ò$>Øô6 	�Š�Žð5 ×%Ñ%Ð&7À'Ð%ÔJØ%Ð&ˆGß‹3ÑC¹7ÓC�3�3Š3ÑC¹7ÓC×CÒCØô. 	�Š�Ž÷- ŸC›CÑxÑpwÓxŸCŸCšCÑxÑpwÓx×xÒxÜÐcÔjm×jtÑjtÕuØô( 	�Š�Žõ' 	4äÐHÌsÏzÉzÕZÙ˜DÔ!ÛˆFØ�M‰M TˆMÖ*ñ à"& r¥(¨x¨jÑ"8ÐÜÐ7¼c¿j¹jÕIØô 	�Š�ŽùòO @ùò Døô( ô ÝDä�cœ?×+Ò+Ñ0PÐQU×0[Ò0[ØÛˆFÜ! &Ö)ñ äÐ2°3°%Ð7OÐPÔWZ×WaÑWaÕbÛä
�Š�Žûðûô 	�Š��úsŒ   Â1K-ÃK-Ä'K7 Ä+K2ÅK2ÅK7 ÅK7 Æ	 K7 Æ*K7 Æ>K7 Ç2K7 Ç:
K7 ÈK7 ÈK7 È4K7 É(A,K7 Ë2K7 Ë7NÌAM<Í N Í<NÎN ÎNc               ó    € V ^8„  d   QhRRRR/# )r
   r£   r   r   ré  r   )r   s   "r   r   r   ­  s   € ÷ ñ ˜tð ¨
ñ r   c                óx  € ^ RI Hp ^ RIHp V! V 4      pVP	                  RRR7       \
        P                  ! VR,          \
        P                  \
        P                  ,          R4      p V! VRR7      '       d   V#  \
        P                  ! T4       R	#   \         d    \
        P                  ! T4       h i ; i)
z?Hold a kernel lock in writable state; process exit releases it.r  )Ú_lockT)rd  Úexist_okz.recovery.locki€  F)ÚwaitN)rû  r	  Úhermes_cli.runtime_stater  Úmkdirr   rs   r�  r�  r_  r“  )r£   r	  r  rš   ry  s   &    r   r  r  ­  s’   € å1Ý.á˜dÓ#€EØ	‡K�K˜ t€KÔ,Ü	�Š�Ð)Õ)¬2¯:©:¼¿	¹	Õ+AÀ5Ó	I€BðÙ�˜%× Ó ØˆIð !ô
 ‡H‚HˆR„LÙøô	 ô Ü
�Š�ŒØðús   Á+B Á;B Â#B9)r  éd   éú   iô  iè  iX  )r˜  ÚCHERRY_PICK_HEADÚREVERT_HEADr©   r¥   )rA  r@  )zhermes_cli/_early_recovery.pyzhermes_cli/update_lock.pyzhermes_cli/update_custody.py)rÈ   >   r£  ú-cú	--git-dirú--namespaceú--work-treeú--config-envú--attr-sourceú--super-prefix)ÚGIT_DIRÚGIT_WORK_TREEÚGIT_INDEX_FILEÚGIT_COMMON_DIRr=   )NN)nÚ__conditional_annotations__rŸ  Ú
__future__r   rù   r‡  r   rÉ   rw   r   r   Úpathlibr   r   r   Ú__annotations__r2   r8   r:   rA   r_   r   r›   r    r»   r‚  r®   rC  r_  r±   r­   r½   rÃ   rè   ræ   ré   rÄ   rÂ   rÕ   rí   r
  r÷   Úcompiler¶  r%  r2  rR  rw  rŽ  r’  rš  Ú	frozensetÚEAGAINÚEWOULDBLOCKÚEACCESÚEDEADLKrˆ  r‰  Úcontextmanagerr™  r$   r›  rý  r¿  rå  r²  rº  rÅ  rÐ  r×  ræ  rí  rù  rü  rÿ  r  r÷  rø  r-  r0  r$  rG  rL  ri  rb  rr  rk  r„  r”  rœ  rª  r³  r‘  r¼  rn  rÄ  r°  r®  r¯  r�  r»  rÏ  ræ  rñ  rj  rü  r  r  r  r  )r.  s   @r   Ú<module>r9     sÙ  øðÜ Hå "ã Û Û 	Û 	Û Û 
Û ß 'ð 2JÐ ˜Ó Ið)Ø.2ð)à"?÷)ð`  Ð õBõ2õõ4 õF*õZð( /Ð à$+Ð !ànÐ Ø*Ð à7Ð,Ð7¨hÑ7Ð õõõ4ð 0Ð ØqÐ ð 'Ð Ø0Ð õ7õIõmõ	÷õB
Lð 
‡z‚zÐ2Ó3€õ-õ(õ!õH;*ðD ,€Ø"Ð ØÐ ñ  §¡¨e×.?Ñ.?ÀÇÁÈuÏ}É}Ð]Ó^Ð õð, ×Ñôó ðô6lˆcô lñ ð 
Øð
Øð
Ø#ð
Ø%1ð
Ø3Að
ØCRð
ØTfð
àð
àð
à)ð
à+1ð
à3?ð
àAMð
àOZð
ð ð
ð (ð
ð *0ð
ð 28ð
ð :?ð
ð AKð
ð MXð
ð Zcð
ð ð	
ð ð	
ð +ð	
ð -7ð	
ð 9Dð	
ð FPð	
ð RXð	
ð Zgð	
ð
 ð
ð
 ð
ð
  ð
ð
 "1ð
ð
 3?ð
ð
 AJð
ð
 LYð
ð ð
ð %ð
ð '9ð
ð ð
ð ð
ð (ð
ð *6ð
ð 8Fð
ð HUð
ð Weð
ð ð
ó 
€ñ ò  ó Ð ð UÐ õFõ*õõ$!õõ"Nõ(Lñ0È÷ 0ð 0ñ* Ð4Ð6IÐJÓK€õKõ
	$õ9)õxWõ*õ&õ5õpWñÐY^÷ ð ð< -Ð õñ6BÐX]÷ Bð BðJ ×Ñô%(ó ð%(õP	Zõõ8
õõ,3õ.	õmð&UÈe÷ &UõR$õN+õ;õWõ÷,Zõõ*õ#õbõ	õ2ñ"7Ðkp÷ 7ð 7ðv $%Ð  ÷r   