+
    jHàjH  ã                  óL  € R t ^ RIHt ^ RIH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HtHt ]P"                  ! ]4      tRtRt]	P,                  ! R]	P.                  4      t]	P,                  ! R	4      tR6R
 R llt]! RR7       ! R R4      4       tR R ltR6RRRR/R R llltR tR R ltR6RR/R R lllt R R lt!R6R R llt"R  R! lt#R"R/R# R$ llt$ ! R% R&]4      t%R' R( lt&R) R* lt'R+ R, lt(R- R. lt)R/ R0 lt*R6RRR1R/R2 R3 lllt+R6RRR1R/R4 R5 lllt,R# )7zIResolve promoted source releases, never infer publication from a Git tag.)Úannotations)Ú	dataclass)Ú
HTMLParserN)ÚSTABLE_TAG_REÚis_canary_tagz&https://hermes-assets.nousresearch.comzNousResearch/hermes-agentzp^(?:https://github\.com/|git@github\.com:|ssh://git@github\.com/)([A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+?)(?:\.git)?/?$z[0-9a-f]{40}c               ó   € V ^8„  d   QhRR/# ©é   ÚreturnÚstr© )Úformats   "Ú?/home/ubuntu/.hermes/hermes-agent/hermes_cli/source_releases.pyÚ__annotate__r      s   € ÷ ñ °ñ ó    c                ó6  € V e‘   ^ RI Hp \        P                  ! . V ORNRNRNVRRRR^
\        P                  V! 4       RR	7
      p\
        P                  VP                  P                  4       4      pVP                  ^ 8X  d   V'       d
   V^,          # \        # )
zIGitHub forks own their releases; other origins must mirror official tags.©Úsource_git_envÚconfigz--getzremote.origin.urlTúutf-8ÚreplaceF©	ÚcwdÚcapture_outputÚtextÚencodingÚerrorsÚtimeoutÚstdinÚenvÚcheck)Úhermes_cli.source_checkr   Ú
subprocessÚrunÚDEVNULLÚ_GITHUB_ORIGINÚ	fullmatchÚstdoutÚstripÚ
returncodeÚOFFICIAL_REPOSITORY)Úgit_cmdr   r   ÚresultÚmatchs   &&   r   Úsource_repositoryr.      sŽ   € àÒÝ:ä—’Ø>ˆgÐ>�xÐ> Ð>Ð*=Ð>ÀCØ d°WÀYÐXZÜ×$Ñ$©.Ó*:Øô	
ˆô ×(Ñ(¨¯©×)<Ñ)<Ó)>Ó?ˆØ×Ñ Ô!§eØ˜•8ˆOÜÐr   T)Úfrozenc                  ó¬   € ] tR t^*t$ RtR]R&   R]R&   R]R&   RtR]R&   RtR]R	&   RtR]R
&   Rt	R]R&   ]
R R l4       tRtR]R&   ]
R R l4       tRtR# )ÚSourceTargetzGA pinned source build or an explicitly declared source-branch delivery.r   Úrequested_channelÚchannelÚ
repositoryNú
str | NoneÚcommitÚbranchÚversionÚbuild_idc               ó   € V ^8„  d   QhRR/# )r	   r
   Úboolr   )r   s   "r   r   ÚSourceTarget.__annotate__7   s   € ÷ 6ñ 6˜ñ 6r   c                	ó4   € V P                   V P                  8g  # ©N)r2   r3   ©Úselfs   &r   ÚretiredÚSourceTarget.retired6   s   € à×%Ñ%¨¯©Ñ5Ð5r   Fr;   Úaheadc               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r<   =   s   € ÷ gñ g�sñ gr   c                	óú   € V P                   '       d   V P                   R V P                   R2# V P                  '       d1   V P                   R V P                   RV P                  R,           R2# V P                  # )z vzq; this checkout is newer and waits for the next release (`hermes update --set-channel main` follows every commit)z (:Né   NÚ))rC   r3   r8   r6   r?   s   &r   ÚlabelÚSourceTarget.label<   so   € à�:�:ˆ:Ø—|‘|�n B t§|¡| nð 5Qð Qð RàIMÏÏÈ�$—,‘,�˜r $§,¡, ¨r°$·+±+¸cÕ2BÐ1CÀ1ÐEÐfÐZ^×ZfÑZfÐfr   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__r6   r7   r8   r9   ÚpropertyrA   rC   rH   Ú__static_attributes__r   r   r   r1   r1   *   so   ‡ áQàÓØƒLØƒOØ€FˆJÓØ€FˆJÓØ€GˆZÓØ€HˆjÓàô6ó ð6ð €Eˆ4Óàôgó ôgr   r1   c               ó    € V ^8„  d   QhRRRR/# )r	   Únamer   r4   r   )r   s   "r   r   r   D   s   € ÷ 
Lñ 
L˜3ð 
L¨Cñ 
Lr   c                óH   € ^ RI Hp V! \        VR7      P                  V 4      # )ar  The only adapter to the validated requested/terminal records and manifest.

ChannelReader owns HTTPS, authority and digests. The source adapter below
admits its retirement constraints before any checkout operation. No legacy
GitHub fallback is allowed when a record is unavailable; the one exception
is an unpublished ``main`` record, which resolves to the main branch.
)ÚChannelReader©r4   )Úhermes_cli.release_channelsrU   Ú_PUBLIC_BASEÚresolve)rS   r4   rU   s   && r   Ú_resolve_channelrZ   D   s   € õ :áœ°*Ô=×EÑEÀdÓKÐKr   r4   Úforward_onlyFc               ó$   € V ^8„  d   QhRRRRRR/# )r	   r3   r   r[   r;   r
   r1   r   )r   s   "r   r   r   Q   s#   € ÷ ñ  3ð Ø(,ðØ9Eñr   c               óî   € \        WW#R7      pV'       d`   VP                  '       dN   VeJ   VeF   \        WVP                  VP                  4      pVe!   WeP                  8w  d   ^ RIHp V! WVRR7      # V# )a9  Resolve a subscription: stable from GitHub releases, main from the git branch,
preview channels (e.g. ``pm-preview``) through their R2 records.

``forward_only`` (an unchosen default subscription) pins a checkout that already
contains the release to its own HEAD, so the update is a no-op instead of a downgrade.
rV   )r   T)r6   rC   )Ú_resolve_source_targetr6   Ú_head_containingr4   Údataclassesr   )r3   r+   r   r4   r[   ÚtargetÚheadr   s   &&&$$   r   Úresolve_source_targetrc   Q   s`   € ô $ G°cÔQ€Fß˜ŸŸ˜¨'Ò*=À#Â/Ü ¨f¯m©m¸V×=NÑ=NÓOˆØÒ ¯©Ô 5Ý+á˜6°dÔ;Ð;Ø€Mr   c                ó  € ^ RI Hp  \        P                  ! . V OVOVRRRR^
\        P                  V! 4       RR7
      #   \
        \        P                  3 d2   p\        P                  RRP                  T4      T4        R	p?R	# R	p?ii ; i)
a  ``git <args>`` in ``cwd``, or None when git did not answer: an unknown relation, not a claim.

Before the updater's fetch the release commit is usually absent, and git 2.43 spends 7-12 s
of CPU on a blobless clone failing to find it even with lazy fetch off (#137646).
r   Tr   r   Fr   zgit %s did not answer: %sÚ N)
r!   r   r"   r#   r$   ÚOSErrorÚSubprocessErrorÚloggerÚdebugÚjoin)r+   r   Úargsr   Úexcs   &&*  r   Ú_proberm   c   s�   € õ 7ðÜ�~Š~ØˆgÐ˜Ð 3°tÀ$ÐQXØ b´
×0BÑ0BÉÓHXØôð 	øô ”Z×/Ñ/Ð0ô Ü�‰Ð0°#·(±(¸4³.À#ÔFÝûðús   ˆ6? ¿BÁ&BÂBc               ó$   € V ^8„  d   QhRRRRRR/# )r	   r6   r   r4   r
   r5   r   )r   s   "r   r   r   u   s!   € ÷ >ñ >¨3ð >¸Cð >ÀJñ >r   c                ó   € ^ RI HpHp \        P                  ! . V ORNRNVRRRR^
\        P
                  V! 4       RR7
      P                  P                  4       p\        P                  V4      '       g   R	# \        WR
RW&4      pVe   VP                  ^ 8X  d   V# VeD   VP                  ^8X  d3   \        WRR4      pVe"   VP                  P                  4       R8X  d   R	# V! W&V4      ;'       g    / P                  R4      p	V	R9   d   R	# T# )zÕHEAD's sha unless HEAD is PROVEN not to contain ``commit``, then None.

An unchosen default must never move a checkout backward on a guess, so an
unknown relation (shallow history, GitHub unreachable) keeps HEAD.
)Ú_github_comparer   ú	rev-parseÚHEADTr   r   Fr   Nz
merge-basez--is-ancestorz--is-shallow-repositoryÚfalseÚstatus)ÚbehindÚdiverged)r!   rp   r   r"   r#   r$   r'   r(   Ú_SHAr&   rm   r)   Úget)
r+   r   r6   r4   rp   r   rb   ÚancestryÚshallowrt   s
   &&&&      r   r_   r_   u   s  € ÷ Hä�>Š>Ø'ˆ'Ð'�;Ð' Ð'¨SÀÈDÐ[bØ "¬J×,>Ñ,>ÁNÓDTÐ\aô÷ �f�U‰U‹Wð 	ô �>‰>˜$×ÒÙä�g L°/À6ÓP€HØÒ × 3Ñ 3°qÔ 8ØˆàÒ × 3Ñ 3°qÔ 8Ü˜ {Ð4MÓNˆØÒ 7§>¡>×#7Ñ#7Ó#9¸WÔ#DÙÙ˜f¨JÓ7×=Ð=¸2×BÑBÀ8ÓL€FØÐ3Ô3ˆ4Ð=¸Ð=r   c               ó    € V ^8„  d   QhRRRR/# )r	   r3   r   r
   r1   r   )r   s   "r   r   r   �   s   € ÷ "Wñ "W Cð "WÐXdñ "Wr   c          	     ó†  € ^ RI Hp V! V 4       T;'       g    \        W4      pV R8X  d   \        W1V4      # V R8X  d   \	        W VRR7      # \        W4      pVP                  pVR,          P                  4       VP                  4       8w  d   \        R4      hV! VR,          4      pVR,          R	8X  dZ   VP                  R
,          R8X  d   \        R4      hVR,          pVR,          R	8w  d   \        R4      h\	        WW8R,          R7      # VP                  f   \        RV 24      hVP                  R,          p	V	R,          p
\        V
\        4      '       d   \        P                  V
4      '       g   \        R4      hVP                  R
,          R8X  d   \        W–W4       \	        WW:V	R,          V	R,          R7      # )é    )Úvalidate_nameÚstableÚmain)r7   r4   z:Channel repository does not match this source installationrS   Úpolicyzsource-branchÚstaterA   z9Source retirement requires a published destination commitÚdeliveryÚkindz%Channel has no source-branch deliveryr7   zNo build published for channel Úrequestr6   z(Channel build has no exact source commitÚsourceVersionÚbuildId)r6   r8   r9   )rW   r~   r.   Ú_resolve_stabler1   rZ   ÚterminalÚlowerÚ
ValueErrorÚ	requestedÚmanifestÚ
isinstancer   rw   r&   Ú_refuse_retirement_downgrade)r3   r+   r   r4   r~   Úresolvedr‰   Údestinationrƒ   r…   r6   s   &&&$       r   r^   r^   �   s�  € Ý9á�'ÔØ×>Ð>Ô0°Ó>€JØ�(ÔÜ˜z°CÓ8Ð8Ø�&Ôô ˜G¨jÀÔHÐHÜ Ó4€HØ× Ñ €HØ�Õ×#Ñ#Ó%¨×)9Ñ)9Ó);Ô;ÜÐUÓVÐVÙ ¨Õ 0Ó1€KØ�Õ˜_Ô,Ø×Ñ˜gÕ&¨)Ô3ÜÐXÓYÐYØ˜JÕ'ˆØ�FÕ˜Ô.ÜÐDÓEÐEÜ˜G°*ÈhÕEWÔXÐXØ×ÑÒ ÜÐ:¸;¸-ÐHÓIÐIØ×Ñ 	Õ*€Gà�XÕ€FÜ�fœc×"Ò"¬$¯.©.¸×*@Ò*@ÜÐCÓDÐDØ×Ñ˜'Õ" iÔ/Ü$ W¸ÔEÜ˜¨jØ '¨Õ 8À7È9ÕCUôWð Wr   c               ó    € V ^8„  d   QhRRRR/# )r	   ÚfailureÚBaseExceptionr
   r   r   )r   s   "r   r   r   µ   s   € ÷ Gñ G }ð G¸ñ Gr   c                ó¢   € \        V \        P                  P                  \        34      '       d   ^ RIHp V! V \        V RR4      R7      # RV  2# )zGA transport failure names its cause (a rate limit is not "no release").)Údescribe_github_failureÚhermes_authenticatedF)Úauthenticatedz/No published stable release could be verified: )rŽ   ÚurllibÚerrorÚURLErrorÚTimeoutErrorÚhermes_cli.github_apir–   Úgetattr)r“   r–   s   & r   Ú_describe_release_failurerŸ   µ   sH   € ä�'œFŸL™L×1Ñ1´<Ð@×AÒAÝAñ ' w¼gÀgÐOeÐglÓ>mÔnÐnØ<¸W¸IÐFÐFr   c               ó    € V ^8„  d   QhRRRR/# )r	   r4   r   r
   r1   r   )r   s   "r   r   r   ¿   s   € ÷ 
kñ 
k ð 
kÀñ 
kr   c           	     ó  €  \        RWV RR7      w  r4\        RRY\        T4      P                  R4      R7      #   \        \        \        P                  3 d1   p\
        P                  RT4       \        \        T4      4      ThRp?ii ; i)zñStable IS the repository's latest published GitHub release: the tag a release
publishes (non-draft, non-prerelease, strict vX.Y.Z), verified against origin.
No R2 record or pointer is consulted; publishing the release is the only promotion.
r   F©r4   Úpointerz/Could not resolve the stable source release: %sNÚv)r6   r8   )Ú_resolve_releaserf   r‹   r"   rg   rh   ÚwarningrŸ   r1   r   Úremoveprefix)r4   r+   r   Útagr6   rl   s   &&&   r   rˆ   rˆ   ¿   s‚   € ð
BÜ& x°È*Ð^cÔd‰ˆô ˜ (¨JÌsÐSVËx×OdÑOdÐehÓOiÔjÐjøô ”Z¤×!;Ñ!;Ð<ô BÜ�‰ÐHÈ#ÔNÜÔ2°3Ó7Ó8¸cÐAûðBús   ‚: º B
Á+BÂB
c               ó$   € V ^8„  d   QhRRRRRR/# )r	   r…   Údictr‰   r
   ÚNoner   )r   s   "r   r   r   Ì   s'   € ÷ *Mñ *M¨$ð *M¸$ð *MÐQUñ *Mr   c                ó”  € ^ RI Hp ^ RIpVf   R# V! V4      R,          pVP                  4       '       Ed   VP	                  R4      ;_uu_ 4       pVP                  V4      P                  R4      pRRR4       \        X\        4      '       d   VP                  R4      MRp	\        V	\        4      '       d-   \        P                  ! RV	\        P                  4      '       g   \        R4      h\        \        \         V	P#                  R	4      4      4      \        \        \         V R
,          P#                  R	4      4      4      8”  d   \        R4      hVEe\   ^ RIHp
 \(        P*                  ! . VORNRNV R,           R2NVRRRR^
\(        P,                  V
! 4       RR7
      pVP.                  ^ 8X  d,   VP0                  P3                  4       '       d   \        R4      hVR,          R,          V R,          8”  d·   \5        VR,          V R,          4      P6                  pVf   \        R4      hVR,          p\(        P*                  ! . VORNRNVRRRRR^
\(        P,                  V
! 4       R7
      P0                  P3                  4       pWíR,          8X  d   WàR,          8w  d   \        R 4      hR# R# R# R#   + '       g   i     ELN; i)!zJQualification of preview data is not permission to roll back newer source.)ÚPathNzpyproject.tomlÚrbÚprojectr8   z\d+\.\d+\.\d+z<Source retirement cannot verify the installed source versionÚ.r†   zcSource retirement would downgrade a newer source version; select the destination channel explicitlyr   zrev-listz--ancestry-pathr6   z..HEADTr   r   Fr   zbSource retirement would downgrade a newer source commit; select the destination channel explicitlyrb   ÚsequencerS   r4   z=Source retirement cannot verify the current destination buildr…   rq   rr   )	r   r    r   r   r   r   r   r   r   zhSource retirement would downgrade the newer destination build; select the destination channel explicitly)Úpathlibr­   ÚtomllibÚexistsÚopenÚloadrx   rŽ   rª   r   Úrer&   ÚASCIIr‹   ÚtupleÚmapÚintÚsplitr!   r   r"   r#   r$   r)   r'   r(   rZ   r�   )r…   r‰   r+   r   r­   r³   Úversion_fileÚfiler¯   Úinstalled_versionr   r,   Úcurrent_manifestÚcurrentÚ	installeds   &&&&           r   r�   r�   Ì   sƒ  € åÛà
‚{ÙÙ˜“9Ð/Õ/€LØ×Ñ×ÓØ×Ñ˜t×$Ô$¨Ø—l‘l 4Ó(×,Ñ,¨YÓ7ˆG÷ %ä6@ÀÌ$×6OÒ6O˜GŸK™K¨	Ô2ÐUYÐÜÐ+¬S×1Ò1¼¿ºÐFVÐXiÔkm×ksÑks×9tÒ9tÜÐ[Ó\Ð\Ü””SÐ+×1Ñ1°#Ó6Ó7Ó8¼5ÄÄSÈ'ÐRaÕJb×JhÑJhÐilÓJmÓAnÓ;oÔoÜð  Có  Dð  DØÓÝ:ä—’ØSˆgÐS�zÐSÐ#4ÐS¸ÀÕ9JÐ8KÈ6Ð6RÐSÐY\Ø d°WÀYÐXZÜ×$Ñ$©.Ó*:Øô	
ˆð ×Ñ Ô! f§m¡m×&9Ñ&9×&;Ò&;Üð  Bó  Cð  CØ�FÕ˜JÕ'¨'°*Õ*=Ô=ô  0°¸Õ0@À'È,ÕBWÓX×aÑaÐØÒ'Ü Ð!`ÓaÐaØ& yÕ1ˆGÜ"ŸšØ/�'Ð/˜;Ð/¨Ð/°SÀØ#¨$¸ÈÐ\^Ü ×(Ñ(©nÓ.>ô÷ ‰f—U‘U“Wð	 ð
  HÕ-Ô-°)ÀxÕ?PÔ2PÜ ð  "Ló  Mð  Mñ 3QÑ-ñ >ñ ÷ %×$Ð$ús   Á!J6Ê6K	Ú
missing_okc               ó$   € V ^8„  d   QhRRRRRR/# )r	   Úurlr   rÃ   r;   r
   r5   r   )r   s   "r   r   r   ù   s!   € ÷ ñ ˆsð  4ð °Jñ r   c          	     ó°  € \         P                  P                  V R RRRRR/R7      p \         P                  P                  V^R7      ;_uu_ 4       pVP	                  R4      P                  R4      uuR	R	R	4       #   + '       g   i     R	# ; i  \         P                  P                   d&   pT'       d   TP                  R
8X  d    R	p?R	# h R	p?ii ; i)z
User-Agentzhermes-updatezCache-Controlzno-cacheÚAcceptzapplication/json, text/html)Úheaders)r   z	utf-8-sigNi”  i    )	r™   r…   ÚRequestÚurlopenÚreadÚdecoderš   Ú	HTTPErrorÚcode)rÅ   rÃ   r…   Úresponserl   s   &$   r   Ú_readrÐ   ù   s¢   € Ü�n‰n×$Ñ$ SØ�o ¸
ØÐ/ð3Ð$ó €GðÜ�^‰^×#Ñ# G°RÐ#×8Ô8¸HØ—=‘= Ó1×8Ñ8¸ÓE÷ 9×8×8Ó8ûä�<‰<×!Ñ!ô ß˜#Ÿ(™( cœ/ÝØûðús;   ©)B Á A=Á2
B Á=B	ÂB ÂB ÂCÂ0CÃCÃCc                  ó.   a € ] tR tRtV 3R ltR tRtV ;t# )Ú_BuildMetadatai  c                	ó2   <€ \         SV `  4        . V n        R # r>   )ÚsuperÚ__init__Útags)r@   Ú	__class__s   &€r   rÕ   Ú_BuildMetadata.__init__  s   ø€ Ü‰ÑÔØˆŽ	r   c                	ó²   € \        V4      pVR 8X  dE   VP                  R4      R8X  d-   V P                  P                  VP                  R4      4       R# R# R# )ÚmetarS   zhermes-buildÚcontentN)rª   rx   rÖ   Úappend)r@   r¨   ÚattrsÚfieldss   &&& r   Úhandle_starttagÚ_BuildMetadata.handle_starttag  sE   € Ü�e“ˆØ�&Œ=˜VŸZ™Z¨Ó/°>ÔAØ�I‰I×Ñ˜VŸZ™Z¨	Ó2Ö3ñ B‰=r   )rÖ   )rJ   rK   rL   rM   rÕ   rß   rQ   Ú__classcell__)r×   s   @r   rÒ   rÒ     s   ø† õ÷4ð 4r   rÒ   c               ó    € V ^8„  d   QhRRRR/# ©r	   r3   r   r
   r;   r   )r   s   "r   r   r     s   € ÷ ñ ˜Sð  Tñ r   c                óÈ   € \        V \        4      '       g   R # VR8X  d    \        \        P                  ! V 4      4      # W P                  4       8H  ;'       d    \        V 4      # )Fr   )rŽ   r   r;   r   r&   r(   r   )r¨   r3   s   &&r   Ú
_valid_tagrå     sO   € Ü�cœ3×ÒÙØ18¸HÔ1DŒ4”×'Ò'¨Ó,Ó-ð Ø�y‰y‹{Ñ×1Ð1œ}¨SÓ1ðr   c               ó    € V ^8„  d   QhRRRR/# rã   r   )r   s   "r   r   r     s   € ÷ >ñ > ð >¨ñ >r   c                óÚ   € \        V \        4      ;'       dU    V P                  R 4      RJ ;'       d:    V P                  R4      VR8H  J ;'       d    \        V P                  R4      V4      # )ÚdraftFÚ
prereleaseÚcanaryÚtag_name)rŽ   rª   rx   rå   )Úreleaser3   s   &&r   Ú
_publishedrí     sh   € Ü�w¤Ó%÷ =ð =¨'¯+©+°gÓ*>À%Ð*G÷ =ð =Ø—‘˜LÓ)¨g¸Ñ.AÐB÷=ð =ä˜7Ÿ;™; zÓ2°GÓ<ð>r   c               ó   € V ^8„  d   QhRR/# )r	   rÅ   r   r   )r   s   "r   r   r      s   € ÷ %ñ %ˆsñ %r   c                óF   € ^ RI Hp \        P                  ! V! V 4      4      # )zèGitHub API JSON with the updater's credential ladder (token, gh, anonymous).

Anonymous api.github.com is 60 requests/hour per address, so an unauthenticated
stable lookup fails for everyone behind one office, CI or container exit.
)Ú_request)r!   rð   ÚjsonÚloads)rÅ   rð   s   & r   Ú_jsonró      s   € õ 1ä�:Š:‘h˜s“mÓ$Ð$r   c               ó$   € V ^8„  d   QhRRRRRR/# )r	   r3   r   Úbaser
   rª   r   )r   s   "r   r   r   +  s!   € ÷ 8ñ 8 ð 8¨Cð 8°Dñ 8r   c                óL  € V R 8X  d#   \        V R24      p\        W 4      '       d   V# Mm\        ^^4       F]  p\        V RV 24      p\        V\        4      '       g    M6V F  p\        W 4      '       g   K  Vu u # 	  \        V4      ^d8  g   K]   M	  \        RV  R24      h)r   z/releases/latestz/releases?per_page=100&page=zNo published ú release)ró   rí   ÚrangerŽ   ÚlistÚlenr‹   )r3   rõ   rì   ÚpageÚentriess   &&   r   Ú_published_fallbackrý   +  sª   € Ø�(ÔÜ˜4˜&Ð 0Ð1Ó2ˆÜ�g×'Ò'ØˆNð (ô
 ˜!˜R–LˆDÜ˜t˜fÐ$@ÀÀÐGÓHˆGÜ˜g¤t×,Ò,ÙÛ"�Ü˜g×/Ô/Ø"”Nñ #ô �7‹|˜cÖ!Ùñ !ô �} W I¨XÐ6Ó
7Ð7r   c               ó    € V ^8„  d   QhRRRR/# )r	   r3   r   r
   útuple[str | None, str | None]r   )r   s   "r   r   r   ?  s   € ÷ ñ ˜cð Ð&Cñ r   c                óÔ  € V R 8X  dÊ   \        \         R2RR7      pVe²   \        P                  ! V4      p\	        V\
        4      '       di   \        VP                  R4      V 4      '       dH   \	        VP                  R4      \        4      '       d#   \        P                  VR,          4      '       g   \        R4      hVR,          VR,          3# \        \         RV  R	2RR7      pVf   R# \        4       pVP                  V4       \        VP                  4      ^8w  g$   \        VP                  ^ ,          V 4      '       g   \        R
V  R24      hVP                  ^ ,          R3# )r   z(/releases/stable/release-candidates.jsonT)rÃ   Nr¨   r6   zInvalid stable release pointerz
/releases/z/index.htmlzInvalid z release pointer©NN)rÐ   rX   rñ   rò   rŽ   rª   rå   rx   r   rw   r&   r‹   rÒ   Úfeedrú   rÖ   )r3   r   Údatarû   s   &   r   Ú_release_pointerr  ?  s#  € ð �(ÔÜœ�~Ð%MÐNÐ[_Ô`ˆØÒÜ—:’:˜dÓ#ˆDÜ˜t¤T×*Ò*´*¸T¿X¹XÀe»_Èg×2VÒ2VÜ% d§h¡h¨xÓ&8¼#×>Ò>ÄdÇnÁnÐUYÐZbÕUc×FdÒFdÜ Ð!AÓBÐBØ˜•;  X¥Ð.Ð.Ü”L�> ¨G¨9°KÐ@ÈTÔR€DØ‚|ØÐÜÓ€DØ‡I�Iˆd„OÜ
ˆ4�9‰9ƒ~˜Ô¤*¨T¯Y©Y°q­\¸7×"CÒ"CÜ˜8 G 9Ð,<Ð=Ó>Ð>Ø�9‰9�Q�<˜ÐÐr   r£   c               ó$   € V ^8„  d   QhRRRRRR/# )r	   r3   r   r£   r;   r
   ztuple[str, str]r   )r   s   "r   r   r   T  s#   € ÷ $ñ $˜cð $Ø"ð$Ø.=ñ$r   c               ó4  a€ V R9  d   \        RV  24      hT;'       g    \        W4      pRV 2pV'       d3   VP                  4       \        P                  4       8X  d   \	        V 4      MRw  rgVf   \        W4      pVR,          pM\        V RV 24      p\        W€4      '       d   VR,          V8w  d   \        V RV  R24      h\        V RV 24      p	\        V	\        4      '       d   V	P                  R	4      MRp
\        V
\        4      '       d   \        P                  V
4      '       g   \        R
V 24      hVe»   ^ RIHp RV 2p\         P"                  ! . VORNRNRNVNVR,           NVRRRRR^<\         P$                  V! 4       R7
      p\        V3R lVP&                  P)                  4        4       4      pVP                  VR,           VP                  V4      4      V
8w  d   \        RV R24      hVe   W§8w  d   \        RV R24      hWj3# )zY``resolve_source_release`` that raises the failure instead of returning ``(None, None)``.zNot a release channel: zhttps://api.github.com/repos/Nrë   z/releases/tags/z is not a published r÷   z	/commits/Úshaz No published commit for release r   z
refs/tags/z	ls-remotez--tagsÚoriginz^{}Tr   r   )	r   r   r   r   r   r    r   r   r   c              3  óŒ   <"  € T F9  p\        VP                  4       ;o4      ^8X  g   K%  S^,          S^ ,          3x € K;  	  R# 5i)r	   N)rú   r¼   )Ú.0ÚlineÚpartss   & €r   Ú	<genexpr>Ú#_resolve_release.<locals>.<genexpr>r  s?   øé € ð 8Ñ5O¨TÜ D§J¡J£LÐ0˜5Ó1°QÑ6ô )�U˜1•X˜u Q�xÕ(Ó5Oùs
   ƒ"AªAzOrigin tag z, does not match the published release commitzRelease z' no longer matches its published commit)r   rê   r  )r‹   r.   rŠ   r*   r  rý   ró   rí   rŽ   rª   rx   r   rw   r&   r!   r   r"   r#   r$   r'   Ú
splitlines)r3   r+   r   r4   r£   rõ   r¨   Ú
pinned_sharì   r6   r  r   Úrefr,   Úrefsr  s   &&&$$          @r   r¥   r¥   T  s  ø€ ð Ð*Ô*ÜÐ2°7°)Ð<Ó=Ð=Ø×>Ð>Ô0°Ó>€JØ*¨:¨,Ð7€Dç! j×&6Ñ&6Ó&8Ô<O×<UÑ<UÓ<WÔ&Wô (¨Ô0Ø]iñ €Cà
‚{Ü% gÓ4ˆØ�jÕ!‰ä˜4˜& °¨uÐ5Ó6ˆÜ�g×'Ò'¨7°:Õ+>À#Ô+EÜ˜C˜5Ð 4°W°I¸XÐFÓGÐGÜ�d�V˜9 S EÐ*Ó+€FÜ)¨&´$×7Ò7ˆ&�*‰*�UÔ
¸T€CÜ�cœ3×Ò¤t§~¡~°c×':Ò':ÜÐ;¸C¸5ÐAÓBÐBØÒÝ:à˜3˜%Ð ˆÜ—’ØIˆgÐI�{ÐI HÐI¨hÐI¸ÐI¸SÀ5½[ÐIØ D¨t¸gÈiØ ¬*×*<Ñ*<ÙÓ ô	
ˆô ô 8°V·]±]×5MÑ5MÔ5Oó 8ó 8ˆà�8‰8�C˜%•K §¡¨#£Ó/°3Ô6Ü˜{¨3¨%Ð/[Ð\Ó]Ð]ØÒ #Ô"3Ü˜8 C 5Ð(OÐPÓQÐQØˆ8€Or   c               ó$   € V ^8„  d   QhRRRRRR/# )r	   r3   r   r£   r;   r
   rÿ   r   )r   s   "r   r   r   {  s#   € ÷ ñ  Cð Ø$(ðØ4Qñr   c               óª   €  \        WW#VR7      #   \        \        \        P                  3 d#   p\
        P                  RY4       Ru Rp?# Rp?ii ; i)aÞ  Read published stable/canary release metadata (not channel discovery).

The source updater's ``stable`` reads it with ``pointer=False``: GitHub's latest
published release only. With ``pointer`` the R2 channel pointers outrank GitHub's
release listing. A malformed pointer,
draft, or tag/commit mismatch is not permission to select a different build.
``git_cmd`` resolves the selected tag on origin; ZIP callers omit it and
resolve the same tag through GitHub's commit endpoint.
r¢   z+Could not resolve the %s source release: %sNr  )r¥   rf   r‹   r"   rg   rh   r¦   )r3   r+   r   r4   r£   rl   s   &&&$$ r   Úresolve_source_releaser  {  sI   € ðÜ °#ÐV]Ô^Ð^øÜ”Z¤×!;Ñ!;Ð<ô Ü�‰ÐDÀgÔSØÕûðús   ‚ � A°AÁAÁAr  )-rN   Ú
__future__r   r`   r   Úhtml.parserr   rñ   Úloggingr·   r"   Úurllib.errorr™   Úurllib.requestÚhermes_cli.update_channelr   r   Ú	getLoggerrJ   rh   rX   r*   ÚcompileÚ
IGNORECASEr%   rw   r.   r1   rZ   rc   rm   r_   r^   rŸ   rˆ   r�   rÐ   rÒ   rå   rí   ró   rý   r  r¥   r  r   r   r   Ú<module>r     sF  ðÙ OÝ "å !Ý "Û Û Û 	Û Û Û ç Bà	×	Ò	˜8Ó	$€Ø7€Ø1Ð Ø—’ð7Ø8:¿¹ó€ð 
‡z‚z�/Ó"€÷ñ" �$Ô÷gð gó ðgõ2
LñÈdð Ø/4÷ð ò$õ$>ñ6"WÈt÷ "Wð "WõJG÷
kõ*MðZ¨%÷ ô4�Zô 4õõ>õ%õ8õ(ñ*$Èð $Ø%)÷$ð $ñNÈtð Ø+/÷ò r   