+
    lHàjlD  ã            
       óB  € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIH	t	 ]P                  ! R4      t0 R%mt^tR	 R
 uttRR]R3.RR]R3.RR]R3R]R3.RR]R3./tRtRtRtRRRRRR/tRR&RR&RR'RR(/tR R ltR R ltR tR tR)R  R! lltR" tR*tR+R# R$ lltR# ),zÆAtomic multi-op batch path for ``skill_manage``. Origin state
(``skill_manage``/``_find_skill``/``_skill_gate_bypass``) is reached lazily
through ``tools.skill_manager_tool`` so that module owns it.)ÚsuppressN)ÚPathztools.skill_manager_toolÚcreateÚpatchÚ
write_fileÚremove_filec                 ó   € V '       * # ©N© ©Úvs   &Ú>/home/ubuntu/.hermes/hermes-agent/tools/skill_manager_batch.pyÚ<lambda>r      s   €  A¥ó    c                 ó
   € V R J # r	   r
   r   s   &r   r   r      s   € °1¸±9r   ÚcontentzVcontent is required for 'create'. Provide the full SKILL.md text (frontmatter + body).ÚeditzOcontent is required for a full rewrite. Provide the full updated SKILL.md text.Ú	file_pathzJfile_path is required for 'write_file'. Example: 'references/api-guide.md'Úfile_contentz*file_content is required for 'write_file'.z(file_path is required for 'remove_file'.uP  old_string is required for 'patch' and must be the EXACT text currently in the file. Read the target file first (read_file on the skill's SKILL.md, or the file named by file_path) and copy the snippet verbatim, then retry 'patch'. Do NOT fall back to action='write_file' â€” that rewrites the entire file and destroys unrelated content.zOnew_string is required for 'patch'. Use an empty string to delete matched text.zfPass EITHER content (full SKILL.md rewrite) OR old_string/new_string (targeted replacement), not both.z!create (and a full-rewrite patch)Ú
new_stringz"a targeted patch (with old_string)c                ó<   € V ^8„  d   QhR\         R\        R\         /# )é   ÚactionÚargsÚreturn©ÚstrÚdict)Úformats   "r   Ú__annotate__r   7   s&   € ÷ 	Tñ 	T¤ð 	T¬Dð 	T´Sñ 	Tr   c                óþ   € V \         9  d   R# \         V ,          w  r#\         Uu. uF"  qDV9  g   K  VP                  V4      f   K   VNK$  	  ppV'       g   R# RP                  R V 4       4      pRV RV R2# u upi )zXSentence naming the text-slot key(s) this op carries that ``action`` never reads, or ''.Ú z and c              3   óJ   "  € T F  pR V R\         V,           R2x € K  	  R# 5i)Ú'z' (that key is for Ú)N)Ú_TEXT_SLOT_OWNER)Ú.0Úks   & r   Ú	<genexpr>Ú'_misplaced_text_hint.<locals>.<genexpr>?   s*   é € Ð[ÑUZÐPQ˜Q˜q˜cÐ!4Ô5EÀaÕ5HÐ4IÈÕKÓUZùs   ‚!#z Note: this op carries u    â€” move that text to Ú.)Ú_TEXT_SLOT_FORr%   ÚgetÚjoin)r   r   ÚreadsÚdestinationr'   ÚstrayÚcarrieds   &&     r   Ú_misplaced_text_hintr2   7   sz   € à”^Ô#ÙÜ'¨Õ/Ñ€EÝ(ÓWÑ(�1°U©NŒQ¸t¿x¹xÈ»{�QˆQÑ(€EÐWßÙØ�l‰lÑ[ÑUZÓ[Ó[€GØ$ W IÐ-DÀ[ÀMÐQRÐSÐSùò	 Xs   ¥A:²A:ÁA:c                ó0   € V ^8„  d   QhR\         R\        /# )r   r   r   r   )r   s   "r   r   r   C   s   € ÷ ñ œCð ¤tñ r   c                ó,  € \         P                  V R4       F7  w  r#pV! VP                  V4      4      '       g   K%  V\        W4      ,           u # 	  V R8X  d¼   VP                  R4      '       d1   VP                  R4      '       g   VP                  R4      e   \        # VP                  R4      '       g.   VP                  R4      '       g   \        \        W4      ,           # VP                  R4      '       g   VP                  R4      f   \
        # R# )a  Argument-shape error text for one op, or None. Only shape misses carry the misplaced-text
hint: a patch whose real problem is an unmatched old_string must not be steered to a full
rewrite. Pure function so the batch can reject a misfiled op BEFORE any sibling is applied.r   r   Ú
old_stringr   Nr
   )Ú_REQUIRED_ARGSr,   r2   Ú_PATCH_EITHER_ORÚ_PATCH_NEEDS_OLD_STRINGÚ_PATCH_NEEDS_NEW_STRING)r   r   ÚargÚmissingÚmessages   &&   r   Ú_op_shape_errorr=   C   sÖ   € ô "0×!3Ñ!3°F¸BÖ!?Ñˆ�gÙ�4—8‘8˜C“=×!Ô!ØÔ1°&Ó?Õ?Ò?ñ "@ð �Ôð �8‰8�I×Ò D§H¡H¨\×$:Ò$:¸d¿h¹hÀ|Ó>TÒ>`Ü#Ð#Ø�x‰x˜×%Ò%¨d¯h©h°y×.AÒ.AÜ*Ô-AÀ&Ó-OÕOÐOØ�x‰x˜	×"Ò" t§x¡x°Ó'=Ò'EÜ*Ð*Ùr   c                ó
  a€ ^ RI Hp ^ RIHp V3R lp. p\	        V 4       EF_  w  rx\        V\        4      '       d   VP                  R4      '       g   V! VR4      u # VR,          p	V	\        9  d/   V! VRV	 RRP                  \        \        4      4       R	24      u # VP                  R
4      ;'       g    Tp
V
'       g   V! VR4      u # \        W˜4      ;pe   V! VRV	 RV
 RV 24      u # V	R8X  d0   V! VP                  R4      4      ;pe   V! VRV	 RV
 RV 24      u # VP                  V
4       V	R8X  d   W¦RR 9   d   V! VRV
 R24      u # V! Wš4      ;pf   EKF  R\        P                  ! VRR7      3u # 	  \        4       p\	        V 4       Fã  w  rxVR,          Wg,          r©V	R8H  ;'       d    \!        VP                  R4      4      pVP                  R4      ;'       g    RP#                  4       pV	R8X  g   V'       g	   V'       g   RM$\$        P&                  ! VP)                  R4      4      pV
V3pV	R 9   g	   V'       d   VV9   d   V! VRV	 RV RV
 R24      u # VP+                  V4       Kå  	  VR3# )!zOShape checks with no side effects. Returns (names, None) or (None, error_json).)Ú_background_review_preflight)Ú_validate_categoryc                 ó(   <€ R S! RV  RV 2RR7      3# )Núoperations[Ú]F©Úsuccessr
   )ÚiÚmsgÚ
tool_errors   &&€r   ÚfailÚ!_validate_batch_ops.<locals>.failZ   s"   ø€ Ø‘Z +¨a¨S°°#°Ð 7ÀÔGÐGÐGr   r   z needs an 'action'.z: unknown action 'z'. Batchable: ú, z; delete must be sole.Únamez' needs a 'name' (the skill it targets).Nz (ú on 'z'): r   Úcategoryz: create for 'z&' must precede that skill's other ops.F©Úensure_asciir   r   r   r!   úSKILL.mdÚ/z: z' of skill 'uò   ' â€” an earlier op in this batch already touched that file, and this op would silently discard its work. One destructive op (write_file/remove_file/full rewrite) per file per batch; put it first, or fold the change in. Patch chains are fine.éÿÿÿÿ)r   r   r   )Útools.skill_manager_guardsr?   Útools.skill_manager_toolr@   Ú	enumerateÚ
isinstancer   r,   Ú_BATCH_OP_ACTIONSr-   Úsortedr=   ÚappendÚjsonÚdumpsÚsetÚboolÚstripÚ	posixpathÚnormpathÚlstripÚadd)Ú
operationsÚdefault_namerH   r?   r@   rI   ÚnamesrF   ÚopÚactÚnmÚ	shape_errÚcat_errÚ	preflightÚtouched_filesÚfull_rewriteÚfpÚtargetÚkeys   &&f                r   Ú_validate_batch_opsrr   V   sƒ  ø€ åGÝ;õHà€EÜ˜:×&‰ˆÜ˜"œd×#Ò#¨2¯6©6°(×+;Ò+;Ù˜Ð0Ó1Ò1Ø��lˆØÔ'Ô'Ù˜Ð/°¨u°NØ"Ÿi™i¬Ô/@Ó(AÓBÐCÐCYð[ó \ò \à�V‰V�F‹^×+Ð+˜|ˆßÙ˜ÐDÓEÒEô )¨Ó1Ð1ˆIÒ>Ù˜˜R ˜u E¨"¨¨T°)°Ð=Ó>Ò>ð �(Œ?Ñ+=¸b¿f¹fÀZÓ>PÓ+QÐ Q Ò^Ù˜˜R ˜u E¨"¨¨T°'°Ð;Ó<Ò<Ø�‰�RÔØ�(Œ?˜r¨3¨B ZÔ/Ù˜˜^¨B¨4Ð/UÐVÓWÒWÙ5°cÓ>Ð>ˆIÕKØœŸš I¸EÔBÐBÒBñ- 'ô4 “E€MÜ˜:Ö&‰ˆØ�X•, ¥ˆRà˜g‘~×AÐA¬$¨r¯v©v°iÓ/@Ó*AˆØ�f‰f�[Ó!×'Ð' R×.Ñ.Ó0ˆØ!$¨¤·LÏ‘*Ü ×)Ò)¨"¯)©)°C«.Ó9ð 	à�6ˆlˆØÐ:Ô:¿lÐPSÐWdÔPdÙ˜˜R ˜u E¨&¨°¸b¸Tð BUð Vó Wò Wð 	×Ñ˜#Öñ 'ð �$ˆ;Ðr   c                óÂ  € / p\         P                  V 4       F�  pV! V4      pV'       d   \        VR,          4      MRpVe   VP                  4       '       d	   W,          MRpVe    \        P
                  ! Wx4       Vf   VP                  V4      MRp
YxV
RJ;'       d    V
P                  4       3WE&   KŸ  	  VR3#   \         d   p	RRT RT	 23u Rp	?	u # Rp	?	ii ; i)aW  Copy every touched skill aside. Returns (snapshots, None) or (None, error_text).

``create_targets`` maps a name with no skill yet to the dir its ``create`` op will use.
An EMPTY pre-existing dir there has no SKILL.md to snapshot, yet create adopts it (see
``_create_skill``): record that it pre-dated the batch so rollback never rmtree()s it.ÚpathNzCould not snapshot 'z' for atomic batch: )r   Úfromkeysr   Úis_dirÚshutilÚcopytreeÚ	Exceptionr,   )rf   Ú	snap_rootÚ
find_skillÚcreate_targetsÚ	snapshotsri   ÚpreÚpre_dirÚsnapÚexcrp   s   &&&&       r   Ú_snapshot_skillsr‚   ‰   sÚ   € ð €IÜ�m‰m˜EÖ"ˆÙ˜‹nˆß'*”$�s˜6•{Ô#°ˆØ!(Ò!4¸¿¹×9IÒ9IˆyŽ~ÈtˆØÒðRÜ—’ Ô.ð ,/ª;�×#Ñ# BÔ'¸DˆØ ¨°dÐ(:×(NÐ(N¸v¿}¹}»ÐOˆ	‹ñ #ð �dˆ?Ðøô	 ô RØÐ3°B°4Ð7KÈCÈ5ÐQÐQ×QûðRús   Á(B=Â=CÃ	CÃCÃCc                ó   € V ^8„  d   QhRR/# )r   r   Nr
   )r   s   "r   r   r   ž   s   € ÷ &-ñ &-ÐUYñ &-r   c           	      ón  € VR J;'       d    VP                  4       pVEf   V'       g   R # V'       g   \        P                  ! V4       R # R.VO Fž  pW&,          p\        \        4      ;_uu_ 4        VP                  4        R R R 4       VP                   FS  pW‚8X  g   VP                  V4      '       g    Kj  \        \        4      ;_uu_ 4        VP                  4        R R R 4       KU  	  K   	  \        \        4      ;_uu_ 4        VP                  4        R R R 4       R # V'       g   \        P                  ! W4       R # VP                  VP                  R,           4      p	\        P                  ! V	RR7       VP                  V	4        \        P                  ! W4       \        P                  ! T	RR7       R #   + '       g   i     ELF; i  + '       g   i     EKO  ; i  + '       g   i     R # ; i  \         d,    \        P                  ! T RR7       T	P                  T 4       h i ; i)NrQ   z.rollback-brokenT©Úignore_errors)rv   rw   Úrmtreer   ÚOSErrorÚunlinkÚparentsÚis_relative_toÚrmdirrx   Ú	with_namerL   Úrenamery   )
r   r€   Úpost_dirÚdir_pre_existedÚwrittenÚpost_existsÚrelrp   ÚparentÚasides
   &&&&&     r   Ú_restore_snapshotr–   ž   s†  € Ø $Ð&×<Ð<¨8¯?©?Ó+<€KØƒ|ßÙßÜ�MŠM˜(Ô#Ùð Ð) Ó)ˆCØ•^ˆFÜœ'×"Õ"Ø—‘”÷ #à Ÿ.œ.�ØÔ%¨V×-BÑ-BÀ8×-LÒ-LÚÜœg×&Õ&Ø—L‘L”N÷ 'Ñ&ó )ñ	 *ô ”g×ÕØ�N‰NÔ÷ áßÜ�Š˜Ô&Ùð ×Ñ˜xŸ}™}Ð/AÕAÓB€EÜ
‡M‚M�% tÕ,Ø‡O�O�EÔðÜ�Š˜Ô&ô ‡M‚M�% t×,÷3 #×"Ð"ú÷
 '×&Ñ&úçÖáûô ô ä�Š�g¨TÕ2Ø�‰�WÔØð	ús0   Á3GÃG	Ä
G*ÆG> ÇGÇG'Ç*G;	Ç>6H4c           	     óT  € . pV P                  4        F¥  w  pw  rVpV Uu. uF`  pVR,          V8X  g   K  VR,          R8X  g   K#  VR,          '       g   K4  \        P                  ! VR,          P                  R4      4      NKb  	  p	p V! V4      p
\	        YVV
'       d   \        V
R,          4      MRWy4       K§  	  V'       d   RP                  V4      MR\        V4      3# u upi   \         d6   pTP                  RT R	T R
2Te   RT R2MR,           4        Rp?EK  Rp?ii ; i)zªRestore every snapshot. ``results`` are the ops applied so far (their name/file_path
tell an adopted dir's rollback which files were the batch's). Returns (note, failed).rL   r   r   r   rR   rt   NzROLLBACK FAILED for 'z' (r$   z; snapshot preserved at 'r#   r!   z; zall touched skills rolled back)
Úitemsr`   ra   rb   r–   r   ry   rZ   r-   r^   )r}   r{   ÚresultsÚnotesri   r   r€   r�   Úrr‘   Úpostr�   s   &&&         r   Ú	_rollbackr�   Ç   s0  € ð €EØ09·±Ö0AÑ,ˆÑ,ˆW˜OÙKRó ZÉ7ÀaØ˜•i 2‘oô BØ*+¨H­+¸Ñ*Eô BØJKÈKÏ.É.ô B”9×%Ò% a¨¥n×&;Ñ&;¸CÓ&@ÖAÉ7ˆð Zð	^Ù˜b“>ˆDÜ˜gÇ4¬T°$°vµ,Ô-?ÈTØ-ö8ñ 1B÷ !&ˆD�I‰I�eÔÐ+KÌdÐSXËkÐYÐYùòZøô ô 	^Ø�L‰LÐ0°°°C¸°u¸AÐ>ØCGÒCSÐ7¸°v¸QÑ?ÐY[õ]÷ ^ó ^ûð	^ús.    C"µC"ÁC"Á0C"Â	/C'Ã'D'Ã2)D"Ä"D'c                ór   € V ^8„  d   QhR\         R,          R\         R,          R\         R,          R\         /# )r   re   NÚtask_idÚ
session_idr   )r   )r   s   "r   r   r   Û   s=   € ÷ Yñ Y´#¸µ*ð YÌcÐTXÍjð YÜ$'¨$¥JðYÜ:=ñYr   c                ó¸
  a a€ ^ RI Hp ^ RIHp \	        S \
        4      '       d	   S '       g   V! RRR7      # \        S 4      \        8”  d   V! R\         R2RR7      # \        ;QJ d    R S  4       F  '       g   K   R	M	  RM! R S  4       4      '       dz   \        S 4      ^8w  d   V! R
RR7      # S ^ ,          P                  R4      ;'       g    TpV'       g   V! RRR7      # VP                  RWbVS ^ ,          P                  R4      R7      # \        S W4      w  opVe   V# VP                  P                  4       '       g   VV 3R lpVP                  V4      p	V	e   V	# VP                  S4      ;_uu_ 4        \        \         P"                  ! RR7      4      p
\%        S 4       UUu/ uFM  w  r¼VP                  R4      R8X  g   K  SV,          VP'                  SV,          VP                  R4      4      bKO  	  ppp\)        SW¤P*                  V4      w  rïVe-   \,        P.                  ! V
R	R7       V! VRR7      uuRRR4       # . pRpVP                  P1                  R	4      p \%        S 4       EFÓ  w  r¼VP3                  / VCRSV,          RR/CW#R7      p \4        P6                  ! V4      pVP                  R4      '       Eg   \;        WäP*                  V4      w  ppRRRRV RVR,           RSV,           R VP                  RR!4       R"V R#2R$VR%V/pVP=                  4        F'  w  ppVR+9  g   K  Vf   K  VP?                  VV4       K)  	  \4        P@                  ! VRR&7      u VP                  PC                  V4       V'       d   \D        PG                  R'V
4       M\,        P.                  ! V
R	R7       uuRRR4       # RSV,          RVR,          R(VP                  R(4      RR	/pTPI                  \J         Uu/ uF"  pVP                  V4      f   K  VVV,          bK$  	  up4       VPM                  V4       EKÖ  	  VP                  PC                  V4       V'       d   \D        PG                  R'V
4       M\,        P.                  ! V
R	R7        RRR4       \4        P@                  ! RR	R)\        X4      R*V/RR&7      # u uppi   \8         d    RRRR/p EL5i ; iu upi   TP                  PC                  T4       T'       d   \D        PG                  R'T
4       i \,        P.                  ! T
R	R7       i ; i  + '       g   i     L±; i),af  Apply operations atomically: every touched skill is snapshotted first and any
failure rolls ALL of them back (batch-created skills are removed). ``delete`` is
only legal as the SOLE op (its recoverable-archive path doesn't compose with
rollback) and routes to the single-op handler. ``default_name`` is the legacy
top-level ``name`` fallback (staged replay).)Úskill_manager_tool)rH   z%operations must be a non-empty array.FrD   zoperations is capped at z ops per call.c              3   óz   "  € T F1  p\        V\        4      ;'       d    VP                  R 4      R8H  x € K3  	  R# 5i)r   ÚdeleteN)rW   r   r,   ©r&   rg   s   & r   r(   Ú&_skill_manage_batch.<locals>.<genexpr>è   s0   é € Ð
VÉ:ÀRŒ:�bœ$Ó×@Ð@ B§F¡F¨8Ó$4¸Ñ$@Ô@Ë:ùs   ‚;ž;TuW   delete must be the SOLE op in its call â€” it doesn't compose with other ops' rollback.rL   z&operations[0] (delete) needs a 'name'.r¤   Úabsorbed_into)r   rL   rŸ   r    r§   Nc                 ó®   <€ R P                  R S 4       4      pR\        S4       RV RR P                  \        \        S4      4      4       2pRRRS/V3# )rK   c              3   ó2   "  € T F  qR ,          x € K  	  R# 5i)r   Nr
   r¥   s   & r   r(   Ú8_skill_manage_batch.<locals>._staging.<locals>.<genexpr>÷   s   é € Ð?±J¨b Ÿ\š\³Jùs   ‚zbatch(z ops: z) on r   Úbatchrd   )r-   ÚlenrY   r]   )ÚwaÚactsÚgistrf   rd   s   &  €€r   Ú_stagingÚ%_skill_manage_batch.<locals>._stagingö   s\   ø€ Ø—9‘9Ñ?±JÓ?Ó?ˆDØœC 
›OÐ,¨F°4°&¸¸d¿i¹iÌÌsÐSXËzÓHZÓ>[Ð=\Ð]ˆDØ˜g |°ZÐ@À$ÐFÐFr   Úskill_batch_)Úprefixr   r   rN   r…   rd   )rŸ   r    rE   Úerrorzunparseable op resultrB   z] (rM   z') failed: zunknown erroru    â€” batch aborted, r*   Úfailed_indexÚcompleted_before_failurerO   z8skill_manage batch rollback failed, snapshots kept at %sr   Úoperations_appliedr™   )rE   r´   )'Útoolsr¢   Útools.registryrH   rW   Úlistr¬   Ú_BATCH_MAX_OPSÚanyr,   Úskill_managerr   Ú_skill_gate_bypassÚ_run_write_gateÚ_skill_mutation_locksr   ÚtempfileÚmkdtemprV   Ú_resolve_skill_dirr‚   Ú_find_skillrw   r‡   r]   Ú_skill_manage_fromr[   Úloadsry   r�   r˜   Ú
setdefaultr\   ÚresetÚloggerÚwarningÚupdateÚ_ADVISORY_KEYSrZ   )rd   re   rŸ   r    Ú_smtrH   ri   Úerrr°   Ústagedrz   rF   rg   r|   r}   Úsnap_errr™   Úrollback_failedÚtokenÚrawÚparsedÚnoterI   r'   r   Úentryrf   s   f&&&                      @r   Ú_skill_manage_batchr×   Û   sÔ  ù€ õ 1Ý)Ü�j¤$×'Ò'¯zÙÐAÈ5ÔQÐQÜ
ˆ:ƒœÔ'ÙÐ4´^Ð4DÀNÐSÐ]bÔcÐcß
ƒsÑ
VÉ:Ó
V‡s‡s‚sÑ
VÉ:Ó
V×VÒVÜˆz‹?˜aÔÙð BØKPôRð Rà˜�]×Ñ˜vÓ&×6Ð6¨,ˆßÙÐFÐPUÔVÐVØ× Ñ ¨°rÐWaØ/9¸!­}×/@Ñ/@ÀÓ/Qð !ó Sð 	Sä$ Z°ÓJ�J€Eˆ3Ø
‚Øˆ
Ø×"Ñ"×&Ñ&×(Ò(ö	Gð ×%Ñ% hÓ/ˆØÒØˆMð 
×	#Ñ	# E×	*Õ	*Üœ×)Ò)°Ô@ÓAˆ	ä'0°Ô'<ô^Ù'<™e˜aÀÇÁÀxÓ@PÐT\Ñ@\ô Z˜% �( D×$;Ñ$;¸EÀ!½HÀbÇfÁfÈZÓFXÓ$YÒYÙ'<ð 	ñ ^ä.¨u°i×AQÑAQÐSaÓbÑˆ	ØÒÜ�MŠM˜)°4Õ8Ù˜h°Ô6÷ 
+Ò	*ð ˆØˆØ×'Ñ'×+Ñ+¨DÓ1ˆð!	=Ü" :×.‘�Ø×-Ñ-Ð.Z°Ð.Z°V¸UÀ1½XÀ|ÐUYÑ.ZØ6=ð .ó V�ðRÜ!ŸZšZ¨›_�Fð —z‘z )×,Ó,Ü,5°i×AQÑAQÐSZÓ,[Ñ)�D˜/à! 5Ø K°¨s°#°b¸µl°^À5ÈÈqÍÈ
ÐR]Ø%+§Z¡Z°¸Ó%IÐ$JÐJ^Ð_cÐ^dÐdeð#gà&¨Ð+EÀqð	J�Dð !'§¡¦™˜˜1ØÐ$8Ö8¸Q¼]Ø ŸO™O¨A¨qÖ1ñ !/ô  Ÿ:š: d¸Ô?Ñ?ð ×#Ñ#×)Ñ)¨%Ô0ßä—‘ÐYÐ[dÕeä—’˜i°tÕ<÷[ 
+Ò	*ðB    q¥¨8°R¸µ\Ø$ b§f¡f¨[Ó&9¸9ÀdðL�ð —‘µNÓ`±N¨qÀfÇjÁjÐQRÃmœl˜a ¨¥šl±NÑ`ÔaØ—‘˜u×%ñ3 /ð6 ×#Ñ#×)Ñ)¨%Ô0ßä—‘ÐYÐ[dÕeä—’˜i°tÖ<÷[ 
+ôd �:Š:Ø	�DÐ.´°G³¸iÈÐQØôð ùóa^øô  !ô RØ'¨°Ð9PÐQ“FðRüò& aøð ×#Ñ#×)Ñ)¨%Ô0ßä—‘ÐYÐ[dÕeä—’˜i°tÖ<ú÷[ 
+×	*ús›   Å</U	Æ+S
Ç
4S
Ç>AU	É
U	É*3S2ÊSÊ4S2ËA+S2Ì<S2Í/S2Í1AU	Ï:S2ÐS-Ð"S-Ð0S2ÑAU	ÓU	ÓS*	Ó&S2Ó)S*	Ó*S2Ó2AUÕU	Õ	U	>   r   r   r   r   ))r   z	'content'))r   r   zIold_string/new_string (targeted) or 'content' (full rewrite, last resort)))r   z'file_content')Fr
   )Úlint_warningsÚ	lint_hint)NNN)Ú__doc__Ú
contextlibr   r[   Úloggingr`   rw   rÁ   Úpathlibr   Ú	getLoggerrÉ   rX   r»   Ú_MISSINGÚ_IS_NONEr6   r8   r9   r7   r%   r+   r2   r=   rr   r‚   r–   r�   rÌ   r×   r
   r   r   Ú<module>rá      s?  ðñ@õ  Û Û Û Û Û Ý à	×	Ò	Ð5Ó	6€âDÐ Ø€ñ &Ñ)<Ð €ˆ(à�	˜8Øhðjð kà
ˆi˜Ø_ðað bàØ	�hÐ lÐmØ	˜Ð#OÐPðRð �[ (Ð,VÐWÐXðZ€ð\ð ð
 lÐ ð8Ð ð ÐBØ Ð"FØ" Lð2Ð ð
 Ð)Ø
Ð'ØÐuØÐ7ð	9€õ	Tõò&0òf÷*&-òRZð" 0€÷Yñ Yr   