ó
    dÝgd  ã            	       ó¨  • S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	rS SK
r
S SKrS SKrS SKrS SKJr  S SKJr  S SKJr  SrS rS rS5S jr " S	 S
\5      rS rS r " S S5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r  " S S\ \5      r! " S S\5      r" " S S\"\ \\5      r# " S S \"\ \5      r$ " S! S"\5      r% " S# S$\"\ \\%5      r& " S% S&\5      r' " S' S(\%5      r( " S) S*\(5      r) " S+ S,\%\"\\'\5      r* " S- S.\)\*5      r+ " S/ S0\5      r, " S1 S2\,\(\\'\5      r- " S3 S4\)\-5      r.g)6é    N)ÚALCLog)ÚALChacks)Ú_é
   c                 óÎ  • U R                   (       d  g  UR                  5       (       d:  [        R                  " [        S5      5        [        R
                  " [        5        g g ! [        [        4 a    [        R
                  " [        5         g [         aK  n[        R                  " [        S5      [        U5      -  5        [        R
                  " S5         S nAg S nAff = f)NÚAbortingzConfirmation failed: %sé   )Úconfirmr   Úerrorr   ÚsysÚexitÚBREAK_APT_EXIT_CODEÚKeyboardInterruptÚEOFErrorÚ	ExceptionÚstr)ÚconfigÚfrontendÚexs      Ú;/usr/lib/python3/dist-packages/apt_listchanges/frontends.pyÚconfirm_or_exitr   3   s–   € Ø�>�>ØðØ×Ñ×!Ñ!Ü�LŠLœ˜:›Ô'Ü�HŠHÔ(Õ)ð "øô œxÐ(ó &Ü�ŠÔ$Ö%Üó Ü�Š”QÐ0Ó1´C¸³GÑ;Ô<Ü�Š��‰ûðús   ”AA$ Á$*C$Â	C$ÂACÃC$c                 óF  • [         R                  " [        S5      U R                  US.-  5        [        R
                  R                  S5      nSUl        [        R
                  R                  Ul	        [        R                  R                  5       nU R                  S:X  a  [        U 5      R                  X!5      nSUS'   SUS	'   UR                  5       (       a  UR!                  5       (       a  UO[        R"                  R%                  X#5      US
'   U R                  US'   UR'                  X5         [(        R*                  " / SQUR-                  5       SS9  g ! [.         a9  n[         R0                  " [        S5      U R                  US.-  5         S nAg S nAff = f)Nz Mailing %(address)s: %(subject)s)ÚaddressÚsubjectzutf-8Ú8bitÚhtmlztext/html; charset=utf-8zContent-Typezauto-generatedzAuto-SubmittedÚSubjectÚTo)ú/usr/sbin/sendmailz-oiz-tT)ÚinputÚcheckz.Failed to send mail to %(address)s: %(errmsg)s)r   Úerrmsg)r   Úinfor   Úemail_addressÚemailÚcharsetÚCharsetÚbody_encodingÚQPÚheader_encodingÚmessageÚMessageÚemail_formatr   Úconvert_to_htmlÚisasciiÚisprintableÚheaderÚHeaderÚset_payloadÚ
subprocessÚrunÚas_bytesr   Úwarning)r   Úchangesr   r&   r+   r   s         r   Úmail_changesr9   A   sc  € Ü
‡K‚K”Ð4Ó5Ø"×0Ñ0¸WÑEñFô Gô �m‰m×#Ñ# GÓ,€GØ"€GÔÜ#Ÿm™m×.Ñ.€GÔÜ�m‰m×#Ñ#Ó%€GØ×Ñ˜fÓ$Ü�v“,×.Ñ.¨wÓ@ˆØ"<ˆ�ÑØ 0€GÐÑà$Ÿ_™_×.Ñ.°7×3FÑ3F×3HÑ3Hñ "ä$Ÿ|™|×2Ñ2°7ÓDð ˆIÑð ×(Ñ(€GˆD�MØ×Ñ˜Ô)ðHÜ�ŠÒ:Ø$×-Ñ-Ó/°tó	=øäó HÜ�Š”qÐIÓJØ#)×#7Ñ#7À2ÑFñG÷ 	Hñ 	HûðHús   Ä6&E Å
F Å'/FÆF c                 ó  • [         R                  R                  S5      (       d*  U(       a"  [        R                  " [        S5      U-  5        gU R                  (       d*  U(       a"  [        R                  " [        S5      U-  5        gg)zlCheck if the mail frontend is usable.
When the second parameter is given print an appropriate error message r   z9The mail frontend needs an installed 'sendmail', using %sFzDThe mail frontend needs an e-mail address to be configured, using %sT)ÚosÚpathÚexistsr   r   r   r$   )r   ÚreplacementFrontends     r   Úcan_send_emailsr?   [   st   € ô �7‰7�>‰>Ð.×/Ñ/ÞÜ�LŠLÜÐMÓNØ%ñ&ô'ð à××ÞÜ�LŠLÜð )ó *Ø,?ñ@ôAð àó    c                   ó   • \ rS rSrSrSrg)ÚEUnknownFrontendéo   ziException class to notify callers of make_frontend() that invalid
frontend was given in the configuration© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__rD   r@   r   rB   rB   o   s   † ô/r@   rB   c                 ó<  • S[        S5      -   S-   SR                  [        S[        U5      5       Vs/ s H  nSUS-    SX    S3PM     sn5      -   [        S5      -   nS	 H8  n [	        U 5      R                  U5      nU(       d    OU[        U5      S-
     s  $    [        R                  " [        S5      U R                  -  5        U R                  $ s  snf ! [         a6  n[        R                  " [        S
5      [        U5      -  5         SnAM´  SnAff = f)z+Utility function used for testing purposes Ú
z$Available apt-listchanges frontends:Ú r   ú  r	   z. z*Choose a frontend by entering its number: )r	   é   é   ú	Error: %sNzUsing default frontend: %s)r   ÚjoinÚrangeÚlenÚ
ttyconfirmÚttyaskÚintr   r   r   r   r#   r   )r   Ú	frontendsÚiÚpromptÚresponser   s         r   Ú_select_frontendr\   t   s  € à”AÐ<Ó=Ñ=ÀÑDØ
�‰Ü ¤3 y£>Ô2ó4Ú2�Qð �a˜‘c�U˜"˜Y™\˜N¨"Ó-Ù2ñ4ó 	5ñ5ô 	
Ð
6Ó7ñ8€Fó
 ˆð	3Ü! &Ó)×0Ñ0°Ó8ˆHÞÙØœS ›]¨1™_Ñ-Ò-ñ ô ‡K‚K”Ð.Ó/°&·/±/ÑAÔBØ�?‰?Ðùò4øô ó 	3Ü�LŠLœ˜;›¬#¨b«'Ñ1×2Ò2ûð	3ús#   ³C
Á&!CÂ	CÃ
DÃ%+DÄDc                 ó  • [         [        [        [        [        [
        [        [        [        S S S.nSS/nU R                  (       a-  [        U [        [        UR                  5       5      5      5      nOU R                  n[        U[         5      (       a  U$ US:X  a  g XC;   a  OâU R"                  S:¼  a  [%        U 5      (       a  SnO¿g U R"                  S:X  a  US:w  d  [%        U S5      (       d  SnO”US:X  a  [%        U S	5      (       d  S	nUS
;   aU  S[&        R(                  ;  aA  UR+                  S5      (       a  USS  OS	n[,        R.                  " [1        S5      SU0-  5        US:X  a   [3        SS /S9nUR4                  X$'   X@l        XB;  a  [>        eX$   " X5      $ ! [6         a\  nU R8                  (       a  U R:                  (       a
  SnSU l        OS	n[,        R.                  " [1        S5      XFS.-  5         S nAN|S nAff = f)N)ÚtextÚpagerÚdebconfÚmailÚsyslogÚlogÚbrowserúxterm-pagerúxterm-browserÚgtkÚnonerb   rc   rh   rO   ra   r	   r^   r_   )rg   re   rf   ÚDISPLAYzxterm-é   z1$DISPLAY is not set, falling back to %(frontend)sr   rg   z!apt_listchanges.AptListChangesGtk)ÚfromlistFz|The gtk frontend needs a working python3-gi,
but it cannot be loaded. Falling back to %(frontend)s.
The error is: %(errmsg)s)r   r"   ) Útext_frdÚ	pager_frdÚdebconf_frdÚmail_frdÚ
syslog_frdÚlog_frdÚbrowser_frdÚxterm_pager_frdÚxterm_browser_frdÚselect_frontendr\   ÚsortedÚlistÚkeysr   Ú
isinstanceÚFrontendÚquietr?   r;   ÚenvironÚ
startswithr   r   r   Ú
__import__Úgtk_frdÚImportErrorÚapt_modeÚfrontend_from_envr
   rB   )r   Úpackages_countrX   Úfrontends_no_overrideÚnamerg   r   s          r   Úmake_frontendr†   ˆ   sï  € Ü!Ü#Ü'Ü!Ü%ÜÜ'Ü /Ü"3ØØñ
€Ið ØðÐð
 ××Ü ¬¬t°I·N±NÓ4DÓ/EÓ(FÓG‰à�‰ˆä�$œ×!Ñ!Øˆàˆvƒ~Øð Ó$Øð 
�‰˜Ó	Ü˜6×"Ñ"Ø‰Dàð 
�‰˜Ó	Ø�6‹>¤°¸×!@Ñ!@ØˆDøð �6‹>¤/°&¸'×"BÑ"BØˆDàÐ:Ó:ØœBŸJ™JÓ&Ø#Ÿ™¨x×8Ñ8�4˜˜‘8¸gˆDÜ�LŠLœÐNÓOØ&¨Ð-ñ.ô /ð �5‹=ð8Ü Ð!DØ+/¨&ñ2�à"%§+¡+�	‘ð" „OØÓÜÐØŠ?˜6Ó2Ð2øô' ó 8Ø—?—? v×'?×'?ð "�DØ%*�F•Nà"�Dä—’Üð 1ó 2ð $(Ñ6ñ7÷8ñ 8ûð8ús   Å.F" Æ"
HÆ,AHÈHc                   ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )Úbaseéß   c                 ó.   >• [         TU ]  5         Xl        g ©N)ÚsuperÚ__init__r   )Úselfr   ÚargsÚ	__class__s      €r   r�   Úbase.__init__à   s   ø€ Ü‰ÑÔØ�r@   c                 ó   • U$ r‹   rD   ©rŽ   r^   s     r   Ú_renderÚbase._renderä   s   € Øˆr@   )r   )rE   rF   rG   rH   r�   r”   rJ   Ú__classcell__©r�   s   @r   rˆ   rˆ   ß   s   ø† õ÷ð r@   rˆ   c                   ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )Útitledéè   c                 ó.   >• [         TU ]  " U6   SU l        g )Nzapt-listchanges output)rŒ   r�   Útitle©rŽ   r�   r�   s     €r   r�   Útitled.__init__é   s   ø€ Ü‰Ò˜$ÑØ-ˆ�
r@   c                 ó   • Xl         g r‹   ©rœ   )rŽ   rœ   s     r   Ú	set_titleÚtitled.set_titleí   s   € Ø�
r@   r    )rE   rF   rG   rH   r�   r¡   rJ   r–   r—   s   @r   r™   r™   è   s   ø† õ.÷ð r@   r™   c                   óJ   ^ • \ rS rSrU 4S jrS	S jrS rS rS rS r	Sr
U =r$ )
rz   éñ   c                 ó0   >• [         TU ]  X5        X l        g r‹   )rŒ   r�   rƒ   )rŽ   r   rƒ   r�   s      €r   r�   ÚFrontend.__init__ò   s   ø€ Ü‰Ñ˜Ô0Ø,Õr@   c                 ó   • g r‹   rD   ©rŽ   Údiffs     r   Úupdate_progressÚFrontend.update_progressö   ó   € Ør@   c                 ó   • g r‹   rD   ©rŽ   s    r   Úprogress_doneÚFrontend.progress_doneù   r¬   r@   c                 ó   • g r‹   rD   r“   s     r   Údisplay_outputÚFrontend.display_outputü   r¬   r@   c                 ó   • g©NFrD   r®   s    r   Úneeds_tty_stdinÚFrontend.needs_tty_stdinÿ   ó   € Ør@   c                 ó   • g©NTrD   r®   s    r   r
   ÚFrontend.confirm  ó   € Ør@   )rƒ   ©r	   )rE   rF   rG   rH   r�   rª   r¯   r²   r¶   r
   rJ   r–   r—   s   @r   rz   rz   ñ   s&   ø† õ-ôòòò÷ð r@   rz   c                   ó   • \ rS rSrS rSrg)rn   i  c                 óŒ  • SS K nSS KnS[        R                  ;  d  [        R                  S   S:w  a  g UR                  UR                  UR
                  S5      nUR                  [        R                  S   5        UR                  5       nUR                  5         UR                  XUS9n[        R                  " SS9 n[        R                  " UR                  5       S5        UR                  S	5        UR                  S
5       HB  nUR!                  5       (       a  UR                  SU-   S
-   5        M1  UR                  S5        MD     UR#                  5         UR%                  SUR&                  5        UR                  5         S S S 5        UR)                  S5        UR+                  SSU R,                  5        UR+                  SSU R.                  5        UR1                  S5        UR3                  SSS5        UR5                  SS5        UR7                  5         UR                  5         g ! , (       d  f       N°= f)Nr   ÚDEBIAN_FRONTENDÚpassthroughÚDEBCONF_PIPE)ÚreadÚwriteúapt-listchanges-tmp)Úprefixi¤  sÓ   Template: apt-listchanges/info
Type: title
Description: NEWS

Template: apt-listchanges/title
Type: title
Description: ${title}

Template: apt-listchanges/news
Type: note
Description: ${packages_count} packages
rL   rN   z .
Úx_loadtemplatefilezapt-listchanges/infozapt-listchanges/titlerœ   zapt-listchanges/newsrƒ   ÚseenÚfalseÚhigh)Úsocketr`   r;   r|   ÚAF_UNIXÚSOCK_STREAMÚconnectÚmakefileÚcloseÚDebconfÚtempfileÚNamedTemporaryFileÚfchmodÚfilenorÄ   ÚsplitÚstripÚflushÚcommandr…   r#   Úsubstrœ   rƒ   ÚsettitleÚfsetr    Úgo)	rŽ   r^   rË   ÚdcÚsockÚdcfdÚdbÚtmpÚlines	            r   r²   Údebconf_frd.display_output  s§  € ÛÛØ¤B§J¡JÓ.Ü�:‰:Ð'Ñ(¨MÓ9ØØ�}‰}˜VŸ^™^¨V×-?Ñ-?ÀÓCˆØ�‰”R—Z‘Z Ñ/Ô0Ø�}‰}‹ˆØ�
‰
ŒØ�Z‰Z˜TˆZÐ.ˆÜ×(Ò(Ð0EÒFÈ#Ü�IŠI�c—j‘j“l EÔ*Ø�I‰Ið -ô .ð Ÿ
™
 4Ö(�Ø—:‘:—<‘<Ø—I‘I˜d T™k¨DÑ0Ö1à—I‘I˜fÖ%ñ	 )ð
 �I‰IŒKØ�J‰JÐ+¨S¯X©XÔ6Ø�I‰IŒK÷+ Gð, 	�‰Ð&Ô'Ø
�‰Ð(¨'°4·:±:Ô>Ø
�‰Ð'Ð)9¸4×;NÑ;NÔOØ
�‰Ð+Ô,Ø
�‰Ð&¨°Ô8Ø
�‰�Ð/Ô0Ø
�‰ŒØ�
‰
�÷; GÕFús   ÃC
H5È5
IrD   N©rE   rF   rG   rH   r²   rJ   rD   r@   r   rn   rn     s   † õ(r@   rn   c                   ó&   • \ rS rSrS rS rS rSrg)rU   i3  c                 óð  • [         R                  R                  5       (       a<  [         R                  R                  5       (       a  [	        U5      R                  5       $ [        R                  " 5       n[        SSSS9 nUR                  UR                  U5      5        UR                  5         UR                  UR                  5       5      R                  5       sS S S 5        $ ! , (       d  f       g = f)Nz/dev/ttyzrb+r   )Ú	buffering)r   ÚstdinÚisattyÚstdoutr    Úrstripr   Úsystem_encodingÚopenrÄ   Úto_bytesrØ   Ú
from_bytesÚreadline)rŽ   rZ   ÚencÚttys       r   rV   Úttyconfirm.ttyask4  s›   € Ü�9‰9×Ñ×Ñ¤#§*¡*×"3Ñ"3×"5Ñ"5Ü˜“=×'Ñ'Ó)Ð)ä×&Ò&Ó(ˆÜ�*˜e¨qÒ1°SØ�I‰I�c—l‘l 6Ó*Ô+Ø�I‰IŒKØ—>‘> #§,¡,£.Ó1×8Ñ8Ó:÷ 2×1×1ús   Â AC'Ã'
C5c                 ó  • [         R                  R                  5         U R                  S[	        S5      -   5      nUS:H  =(       d9    [
        R                  " [        R                  " [        R                  5      U5      $ )Nzapt-listchanges: zDo you want to continue? [Y/n] rM   )
r   rë   rØ   rV   r   ÚreÚsearchÚlocaleÚnl_langinfoÚYESEXPR)rŽ   r[   s     r   r
   Úttyconfirm.confirm>  sa   € ô
 	�
‰
×ÑÔØ—;‘;Ø¤!Ð$EÓ"FÑFóHˆà˜2‰~÷ 5¤§¢¬6×+=Ò+=¼f¿n¹nÓ+MØ+3ó"5ð 	5r@   c                 ó.   • U R                   R                  $ r‹   )r   r
   r®   s    r   r¶   Úttyconfirm.needs_tty_stdinI  s   € Ø�{‰{×"Ñ"Ð"r@   rD   N)rE   rF   rG   rH   rV   r
   r¶   rJ   rD   r@   r   rU   rU   3  s   † ò;ò	5õ#r@   rU   c                   ó$   • \ rS rSrSS jrS rSrg)ÚsimpleprogressiN  c                 ó°   • U R                   R                  S:”  a  g [        U S5      (       d*  SU l        [        R
                  " [        S5      S-   5        g g )Nr	   Úmessage_printedúReading changelogsz...)r   r{   Úhasattrr  r   r#   r   r¨   s     r   rª   Úsimpleprogress.update_progressO  sI   € Ø�;‰;×Ñ˜qÓ Øä�tÐ.×/Ñ/Ø#$ˆDÔ Ü�KŠKœÐ.Ó/°%Ñ7Õ8ð 0r@   c                 ó   • g r‹   rD   r®   s    r   r¯   Úsimpleprogress.progress_doneW  r¬   r@   )r  Nr½   ©rE   rF   rG   rH   rª   r¯   rJ   rD   r@   r   rÿ   rÿ   N  s   † ô9õr@   rÿ   c                   ó   • \ rS rSrSrg)ro   i[  rD   N©rE   rF   rG   rH   rJ   rD   r@   r   ro   ro   [  ó   † Úr@   ro   c                   ó   • \ rS rSrS rSrg)Úprepend_titlei_  c                 ó˜   • U R                   R                  (       d  U$ U R                  S-   [        U R                  5      S-  -   S-   U-   $ )NrL   Ú-z

)r   r™   rœ   rT   r“   s     r   r”   Úprepend_title._render`  sG   € Ø�{‰{×!×!ØˆKØ�z‰z˜DÑ ¤C¨¯
©
£O°cÑ$9Ñ:ØñØñð 	r@   rD   N)rE   rF   rG   rH   r”   rJ   rD   r@   r   r  r  _  s   † õr@   r  c                   ó   • \ rS rSrS rSrg)rl   ig  c                 ó¤   • [         R                  R                  [        R                  " 5       R                  U R                  U5      5      5        g r‹   )r   rë   rÄ   r   rí   Ú	as_stringr”   r“   s     r   r²   Útext_frd.display_outputh  s5   € Ü�
‰
×ÑÜ×$Ò$Ó&×0Ñ0°·±¸dÓ1CÓDõ	Fr@   rD   Nrå   rD   r@   r   rl   rl   g  s   † õFr@   rl   c                   ó   • \ rS rSrS rSrg)rp   im  c                 óâ   • SS K nUR                  UR                  S9  UR                  [        R                  " 5       R                  U R                  U5      5      5        UR                  5         g )Nr   )Úfacility)rb   ÚopenlogÚ
LOG_DAEMONr   rí   r  r”   Úcloselog)rŽ   r^   rb   s      r   r²   Úsyslog_frd.display_outputn  sL   € Ûà�‰ × 1Ñ 1ˆÑ2Ø�‰”h×.Ò.Ó0×:Ñ:¸4¿<¹<ÈÓ;MÓNÔOØ�‰Õr@   rD   Nrå   rD   r@   r   rp   rp   m  s   † õr@   rp   c                   óR   ^ • \ rS rSrU 4S jrS rS rS rS rS r	S r
S	 rS
rU =r$ )ÚRunCommandMixiniv  c                 óJ   >• [         TU ]  " U6   SU l        SU l        S U l        g )NTrM   )rŒ   r�   ÚwaitÚsuffixrò   r�   s     €r   r�   ÚRunCommandMixin.__init__w  s'   ø€ Ü‰Ò˜$ÑØˆŒ	ØˆŒð ˆ�r@   c                 óö  • U R                   (       d  [        R                  " 5       S:w  a  g [        R                  " SU R
                  U R                  5       S9 n UR                  U R                  R                  U R                  U5      5      5        UR                  5         U R                  UR                  5       5        [        R                  " UR                  5       5      R                  n[         R"                  " S5        [$        R&                  " U R)                  5       UR*                  /-   U R-                  5       U R/                  5       S9 nUR                  5       nUS:w  a-  [1        [3        S5      [5        UR6                  5      US.-  5      e S S S 5        [9        SS	5       HM  nU[        R                  " UR                  5       5      R                  :w  a    O[         R"                  " S
5        MO     U R;                  U5         S S S 5        U R                   (       d  [<        R>                  " S5        g g ! , (       d  f       N®= f! U R;                  U5        f = f! , (       d  f       N^= f)Nr   rÅ   )rÆ   r  Údirgš™™™™™¹?)Ú
preexec_fnÚenvú-Command %(cmd)s exited with status %(status)d©ÚcmdÚstatusr	   r   g      à?) r  r;   ÚforkrÒ   rÓ   r  Ú
get_tmpdirrÄ   rò   rï   r”   rØ   Úfchown_tmpfilerÕ   ÚfstatÚst_atimeÚtimeÚsleepr4   ÚPopenÚget_commandr…   Úget_preexec_fnÚget_environÚOSErrorr   r   r�   rS   Ú_close_temp_filer   r   )rŽ   r^   râ   ÚatimeÚprocessr(  Ú_is          r   r²   ÚRunCommandMixin.display_output  sÍ  € ð �y�yœRŸWšW›Y¨!›^àä×(Ò(Ø,°T·[±[Ø—O‘OÓ%ò'à*-ð+Ø—	‘	˜$Ÿ(™(×+Ñ+¨D¯L©L¸Ó,>Ó?Ô@Ø—	‘	”Ø×#Ñ# C§J¡J£LÔ1äŸš §¡£Ó.×7Ñ7�ô —
’
˜3”ä×%Ò%Ø×(Ñ(Ó*¨c¯h©h¨ZÑ7Ø#'×#6Ñ#6Ó#8Ø ×,Ñ,Ó.ò0ð 4;Ø$Ÿ\™\›^�Fà “{Ü%ÜÐMÓNÜ&)¨'¯,©,Ó&7À6ÑJñKóLð Lð #÷0ô    2ž,�BØ¤§¢¨¯©«Ó 6× ?Ñ ?Ó?ÙÜ—J’J˜s–Oñ 'ð
 ×%Ñ% cÕ*÷E'ðH �y�yä�HŠH�Q�Kð ÷-0õ 0ûð( ×%Ñ% cÕ*ú÷E'õ 'ús?   ÁI*ÁC:IÅAIÆA%IÈ I*É
I	ÉIÉI'É'I*É*
I8c                 óF   •  UR                  5         g ! [         a     g f = fr‹   )rÐ   ÚFileNotFoundError)rŽ   râ   s     r   r5  Ú RunCommandMixin._close_temp_file®  s"   € ð	Ø�I‰I�KøÜ ó 	Ùð	ús   ‚ “
 Ÿ c                 ó   • U R                   $ r‹   ©rÙ   r®   s    r   r1  ÚRunCommandMixin.get_command¶  ó   € Ø�|‰|Ðr@   c                 ó   • g r‹   rD   ©rŽ   rÕ   s     r   r+  ÚRunCommandMixin.fchown_tmpfileº  r¬   r@   c                 ó   • g r‹   rD   r®   s    r   r*  ÚRunCommandMixin.get_tmpdir½  r¼   r@   c                 ó   • g r‹   rD   r®   s    r   r2  ÚRunCommandMixin.get_preexec_fnÀ  r¼   r@   c                 ó   • g r‹   rD   r®   s    r   r3  ÚRunCommandMixin.get_environÃ  r¼   r@   )rò   r  r  )rE   rF   rG   rH   r�   r²   r5  r1  r+  r*  r2  r3  rJ   r–   r—   s   @r   r  r  v  s1   ø† õò-ò^òòòò÷ð r@   r  c                   ó   • \ rS rSrS rSrg)rq   iÇ  c           	      óP  • [         R                  " 5       R                  U R                  U5      5      n[	        U R
                  R                  S5       nU R
                  R                  (       aî  [        R                  " U R
                  R                  5      U l
        [        R                  " U R                  5       [        R                  UU R                  5       U R!                  5       S9 nUR#                  UR%                  5       S9  UR&                  S:w  a7  [)        [+        S5      [-        UR.                  5      UR&                  S.-  5      e S S S 5        OUR1                  UR%                  5       5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NÚab)ré   rë   r#  r$  )r    r   r%  r&  )r   rí   r  r”   rî   r   rc   ÚfilterÚshlexrÖ   rÙ   r4   r0  r1  ÚPIPEr2  r3  ÚcommunicateÚencodeÚ
returncoder4  r   r   r�   rÄ   )rŽ   r^   ÚoutputÚfr7  s        r   r²   Úlog_frd.display_outputÈ  s7  € Ü×)Ò)Ó+×5Ñ5°d·l±lÀ4Ó6HÓIˆÜ�$—+‘+—/‘/ 4Ô(¨AØ�{‰{×!×!Ü$Ÿ{š{¨4¯;©;×+=Ñ+=Ó>�”Ü×%Ò%Ø×(Ñ(Ó*´*·/±/È!Ø#'×#6Ñ#6Ó#8Ø ×,Ñ,Ó.ò0ð 4;Ø×'Ñ'¨f¯m©m«oÐ'Ñ>Ø×)Ñ)¨QÓ.Ü%ÜÐMÓNÜ&)¨'¯,©,Ó&7Ø)0×);Ñ);ñ=ñ=ó>ð >ð /÷0ð 0ð —‘˜Ÿ™›Ô(÷ )Ð(÷0õ 0ú÷ )Õ(ús&   ÁBFÃ/A%FÅ(FÆ
F	ÆFÆ
F%r>  Nrå   rD   r@   r   rq   rq   Ç  s   † õ)r@   rq   c                   ó$   • \ rS rSrSS jrS rSrg)ÚFancyProgressMixiniÛ  c                 ó†  • U(       d  g [        U S5      (       d  SU l        SU l        U =R                  U-  sl        [        S5      S[	        U R                  S-  U R
                  -  5       S3-   n[        U5      U l        [        R                  R                  US-   5        [        R                  R                  5         g )NÚprogressr   r  ú... éd   Ú%Ú)r  rY  Úline_lengthr   rW   rƒ   rT   r   rë   rÄ   rØ   )rŽ   r©   rã   s      r   rª   Ú"FancyProgressMixin.update_progressÜ  s›   € ÞØÜ�t˜Z×(Ñ(àˆDŒMØ ˆDÔØ�Š˜Ñ�ÜÐ%Ó&Ø”3�t—}‘} sÑ*¨T×-@Ñ-@Ñ@ÓAÐBÀ!ÐDñEˆä˜t›9ˆÔÜ�
‰
×Ñ˜ ™Ô%Ü�
‰
×ÑÕr@   c                 ó6  • [        U S5      (       aˆ  [        R                  R                  SU R                  -  S-   5        [        R                  R                  [        S5      S-   [        S5      -   S-   5        [        R                  R                  5         g g )Nr^  Ú r]  r  rZ  ÚDonerL   )r  r   rë   rÄ   r^  r   rØ   r®   s    r   r¯   Ú FancyProgressMixin.progress_doneê  s|   € Ü�4˜×'Ñ'Ü�J‰J×Ñ˜S 4×#3Ñ#3Ñ3°dÑ:Ô;Ü�J‰J×ÑœQÐ3Ó4Ø#ñ$Ü&'¨£iñ0Ø26ñ7ô 8ä�J‰J×ÑÕð	 (r@   )r^  rY  Nr½   r  rD   r@   r   rW  rW  Û  s   † ôõr@   rW  c                   óL   ^ • \ rS rSrU 4S jrS rS rS rS rS r	S r
S	rU =r$ )
Úruncommand_drop_privsiò  c                 ó  >• [         TU ]  " U6   U R                  5       U l        U R	                  5       U l        U R                  (       aD  [        R                  " [        S5      U R                  R                  U R
                  S.-  5        g g )Nz2Found user: %(user)s, temporary directory: %(dir)s)Úuserr"  )
rŒ   r�   Ú_find_user_pwÚ_user_pwÚ_find_tmpdirÚ_tmpdirr   Údebugr   Úpw_namer�   s     €r   r�   Úruncommand_drop_privs.__init__ó  sn   ø€ Ü‰Ò˜$ÑØ×*Ñ*Ó,ˆŒØ×(Ñ(Ó*ˆŒØ�=�=Ü�LŠLÜÐFÓGØŸ=™=×0Ñ0¸¿¹ÑFñGõHð r@   c                 ó¦   • U R                   (       a@  [        R                  " XR                   R                  U R                   R                  5        g g r‹   )ri  r;   ÚfchownÚpw_uidÚpw_gidrB  s     r   r+  Ú$runcommand_drop_privs.fchown_tmpfileü  s0   € Ø�=�=Ü�IŠI�fŸm™m×2Ñ2°D·M±M×4HÑ4HÕIð r@   c                 ó   • U R                   $ r‹   )rk  r®   s    r   r*  Ú runcommand_drop_privs.get_tmpdir   r@  r@   c                 ó8   ^ • T R                   (       d  g U 4S jnU$ )Nc                  ó4  >•  [         R                  " TR                  R                  5        [         R                  " TR                  R
                  5        g ! [         a5  n [        R                  " [        S5      [        U 5      -  5         S n A g S n A ff = f)NrQ   )r;   Úsetgidri  rr  Úsetuidrq  r   r   r   r   r   )r   rŽ   s    €r   ÚpreexecÚ5runcommand_drop_privs.get_preexec_fn.<locals>.preexec  s`   ø€ ð7Ü—	’	˜$Ÿ-™-×.Ñ.Ô/Ü—	’	˜$Ÿ-™-×.Ñ.Õ/øÜó 7Ü—’œQ˜{›^¬c°"«gÑ5×6Ñ6ûð7ús   ƒAA Á
BÁ"+BÂB)ri  )rŽ   rz  s   ` r   r2  Ú$runcommand_drop_privs.get_preexec_fn  s   ø€ Ø�}�}Øõ	7ð ˆr@   c                 ó@  • U R                   (       d  g [        R                  nU R                   R                  US'   U R                   R                  US'   S H  nU R                   R
                  X'   M     U R                  (       a  S H  nU R                  X'   M     U$ )NÚHOMEÚSHELL)ÚUSERNAMEÚUSERÚLOGNAME)ÚTMPDIRÚTMPÚTEMPDIRÚTEMP)ri  r;   r|   Úpw_dirÚpw_shellrm  rk  )rŽ   ÚnewenvÚenvvars      r   r3  Ú!runcommand_drop_privs.get_environ  sw   € Ø�}�}ØÜ—‘ˆØŸ™×-Ñ-ˆˆv‰ØŸ-™-×0Ñ0ˆˆw‰Û5ˆFØ!Ÿ]™]×2Ñ2ˆF‹Nñ 6à�<�<Û>�Ø!%§¡�“ñ ?àˆr@   c           	      ó  • [         R                  " 5       S:w  a  g S nS Hn  nU[         R                  ;   d  M   [         R                  U   nUR                  5       (       d  [        R
                  " U5      O[        R                  " U5      n  O   U(       a  UR                  (       a  U$ [        R                  " [        S5      5        g ! [         a)  n[        [        S5      U[        U5      S.-  5      UeS nAff = f)Nr   )ÚAPT_LISTCHANGES_USERÚ	SUDO_USERr€  z9Error getting user from variable '%(envvar)s': %(errmsg)s)rŠ  r"   z1Cannot find suitable user to drop root privileges)r;   Úgetuidr|   ÚisdigitÚpwdÚgetpwnamÚgetpwuidr   ÚRuntimeErrorr   r   rq  r   r7   )rŽ   ÚpwdatarŠ  rg  r   s        r   rh  Ú#runcommand_drop_privs._find_user_pw  sÛ   € Ü�9Š9‹;˜!ÓØàˆÛGˆFØœŸ™Õ#ð	IÜŸ:™: fÑ-�DØ7;·|±|·~±~œSŸ\š\¨$Ô/Ü Ÿ\š\¨$Ó/ð áñ Hö �f—m—mØˆMä�Š”qÐLÓMÔNØøô !ó IÜ&Üð 'ó (à%+´s¸2³wÑ?ñ@óAð GIðIûðIús   ¹ACÃ
C>Ã$C9Ã9C>c                 ó²  • U R                   (       d  g [        R                  " 5       n[        R                  [        R
                  -  [        R                  -  n[        R                  " U R                   R                  S5         [        R                  " X5      (       a  U[        R                  " S5        $ U/nUR                  S5      (       ai  USS [        U R                   R                  5      -   n[        R                  " X5      (       a  U[        R                  " S5        $ UR                  U5        US:w  aF  Sn[        R                  " X5      (       a  U[        R                  " S5        $ UR                  U5        [        [        S5      U R                   R                   [        U5      S.-  5      e! [        R                  " S5        f = f)Nr   z/0éÿÿÿÿz/tmpzJNone of the following directories is accessible by user %(user)s: %(dirs)s)rg  Údirs)ri  rÒ   Ú
gettempdirr;   ÚR_OKÚW_OKÚX_OKÚsetreuidrq  Úaccessry  Úendswithr   Úappendr”  r   rm  )rŽ   ÚtmpdirÚflagsÚchecked_tmpdirss       r   rj  Ú"runcommand_drop_privs._find_tmpdir4  s]  € Ø�}�}ØÜ×$Ò$Ó&ˆÜ—‘œ"Ÿ'™'Ñ!¤B§G¡GÑ+ˆÜ
�Š�D—M‘M×(Ñ(¨!Ô,ð	ä�yŠy˜×'Ñ'Øô* �IŠI�a�Lð)  &˜hˆOð �‰˜t×$Ñ$Ø  "˜¬¨D¯M©M×,@Ñ,@Ó(AÑA�Ü—9’9˜V×+Ñ+Ø!ô �IŠI�a�Lð  ×&Ñ& vÔ.à˜ÓØ�Ü—9’9˜V×+Ñ+Ø!ô �IŠI�a�Lð  ×&Ñ& vÔ.ÜÜð 0ó 1àŸ=™=×0Ñ0Ü˜Ó/ñ1ñ1ó2ð 2øô �IŠI�a�Lús    ÂF> Â9AF> Ä*5F> Å6AF> Æ>G)rk  ri  )rE   rF   rG   rH   r�   r+  r*  r2  r3  rh  rj  rJ   r–   r—   s   @r   re  re  ò  s-   ø† õHòJòò
òò÷0ð r@   re  c                   ó4   ^ • \ rS rSrU 4S jrS rS rSrU =r$ )Ú
XtermMixiniU  c                 óÂ   >• [         TU ]  " U6   [        R                  U l        SU l        [        R                  " U R                  R                  SS5      5      U l
        g )NFÚxtermzx-terminal-emulator)rŒ   r�   r;   ÚP_NOWAITÚmoder  rN  rÖ   r   Úgetr©  r�   s     €r   r�   ÚXtermMixin.__init__V  sG   ø€ Ü‰Ò˜$ÑÜ—K‘KˆŒ	ØˆŒ	Ü—[’[ §¡§¡ØÐ*ó",ó -ˆ�
r@   c                 óT   • U R                   SU R                  S/-   U R                  -   $ )Nz-Tz-e)r©  rœ   rÙ   r®   s    r   r1  ÚXtermMixin.get_command]  s%   € Ø�z‰z˜T 4§:¡:¨tÐ4Ñ4°t·|±|ÑCÐCr@   c                 ó   • grµ   rD   r®   s    r   r¶   ÚXtermMixin.needs_tty_stdin`  r¸   r@   )r«  r  r©  )	rE   rF   rG   rH   r�   r1  r¶   rJ   r–   r—   s   @r   r§  r§  U  s   ø† õ-òD÷ð r@   r§  c                   ó4   ^ • \ rS rSrU 4S jrS rS rSrU =r$ )rm   id  c                 óì   >• [         TU ]  " U6   U R                  5         [        R                  " U R
                  R                  SS5      5      U l        SU l        [        R                  " 5       U l        g )Nr_   zsensible-pagerz.txt)rŒ   r�   Ú_setup_less_variablerN  rÖ   r   r¬  rÙ   r  r   rí   rò   r�   s     €r   r�   Úpager_frd.__init__f  sS   ø€ Ü‰Ò˜$ÑØ×!Ñ!Ô#Ü—{’{ 4§;¡;§?¡?°7Ð<LÓ#MÓNˆŒØˆŒÜ×+Ò+Ó-ˆ�r@   c                 ó  • S[        SS5      -  n[        R                  R                  SS5      nU(       d  U[        R                  S'   g SU;   d  SU;   a  US-  nS	U;   d  S
U;   a  US-  nUS-   U-   [        R                  S'   g )Nz	-P?e(%s)$zpress q to quitzDo not translate the 'q'.ÚLESSrM   ÚEz--QUIT-Az -+EÚFz--quit-iz -+Fra  )r   r;   r|   r¬  )rŽ   rZ   Úlesss      r   r´  Úpager_frd._setup_less_variablem  sŠ   € ð œqÐ!2Ø!<ó >ñ >ˆä�z‰z�~‰~˜f bÓ)ˆÞØ!'ŒB�J‰J�vÑØð �$‹;˜*¨Ó,Ø�F‰NˆDØ�$‹;˜*¨Ó,Ø�F‰NˆDØ! C™Z¨&Ñ0Œ�
‰
�6Òr@   c                 ó   • grº   rD   r®   s    r   r¶   Úpager_frd.needs_tty_stdin�  r¼   r@   ©rÙ   rò   r  )	rE   rF   rG   rH   r�   r´  r¶   rJ   r–   r—   s   @r   rm   rm   d  s   ø† õ.ò1÷(ð r@   rm   c                   ó   • \ rS rSrSrg)rs   i…  rD   Nr	  rD   r@   r   rs   rs   …  r
  r@   rs   c                   ó–  • \ rS rSr\R
                  " S\R                  5      r\R
                  " S\R                  5      rSr	\R
                  " S\R                  5      r
\R
                  " S\R                  5      rSr\R
                  " S5      rS	r\R
                  " S
5      rSr\R
                  " S5      rS rS rS rS rS rSrg)r   i‰  z(?:lp:?\s+\#\d+(?:,\s*\#\d+)*)z(?P<linktext>#(?P<bugnum>\d+))z@<a href="https://launchpad.net/bugs/\g<bugnum>">\g<linktext></a>zE(?:closes:\s*(?:bug)?\#?\s?\d+(?:,\s*(?:bug)?\#?\s?\d+)*|(?<!">)#\d+)z(?P<linktext>#?(?P<bugnum>\d+))z=<a href="https://bugs.debian.org/\g<bugnum>">\g<linktext></a>z#\bC(VE|AN)-(19|20|21)\d\d-\d{4,7}\bzH<a href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=\g<0>">\g<0></a>zs([a-zA-Z0-9_\+\-\.]+)@(([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)z <a href="mailto:\g<0>">\g<0></a>zf(ht|f)tps?\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&;%\$#\=~])*c                 óF   • U R                  U5        U R                  U5      $ r‹   )r¡   r”   )rŽ   rœ   r^   s      r   r.   Úhtml.convert_to_html¢  s   € Ø�‰�uÔØ�|‰|˜DÓ!Ð!r@   c                 óf   • UR                  SS5      R                  SS5      R                  SS5      $ )NÚ&z&amp;Ú<z&lt;Ú>z&gt;)Úreplacer“   s     r   Ú_html_encodeÚhtml._html_encode¦  s.   € Øß‰W�S˜'Ó"ß‰W�S˜&Ó!ß‰W�S˜&Ó!ð	"r@   c                 ób  ^ • T R                  U5      nT R                  R                  U 4S jU5      nT R                  R                  U 4S jU5      nT R                  R                  T R
                  U5      nT R                  R                  T R                  U5      nUR                  U5        g )Nc                 ón   >• TR                   R                  TR                  U R                  S5      5      $ ©Nr   )Ú	lp_bug_reÚsubÚ
lp_bug_fmtÚgroup©ÚmrŽ   s    €r   Ú<lambda>Ú#html._render_text.<locals>.<lambda>¯  s"   ø€ �d—n‘n×(Ñ(¨¯©¸!¿'¹'À!»*ÔEr@   c                 ón   >• TR                   R                  TR                  U R                  S5      5      $ rÌ  )Úbug_rerÎ  Úbug_fmtrÐ  rÑ  s    €r   rÓ  rÔ  ±  s    ø€ �d—k‘k—o‘o d§l¡l°A·G±G¸A³JÔ?r@   )	rÈ  Úlp_bug_stanza_rerÎ  Úbug_stanza_reÚcve_reÚcve_fmtÚemail_reÚ	email_fmtrÄ   )rŽ   Úhtmltextr^   s   `  r   Ú_render_textÚhtml._render_text¬  s‰   ø€ Ø× Ñ  Ó&ˆØ×$Ñ$×(Ñ(ÜEÀtóMˆà×!Ñ!×%Ñ%Ü?ÀóGˆà�{‰{�‰˜tŸ|™|¨TÓ2ˆØ�}‰}× Ñ  §¡°Ó6ˆØ�‰�tÕr@   c           	      ój  • SnU R                   R                  U5       H~  nU R                  XX4R                  5        5        UR	                  5       nUR                  5       nUS   S;   a
  US S nUS-  nUR                  SU SU R                  U5       S35        M€     U R                  XUS  5        g )Nr   r˜  )Ú.Ú,Ú;Ú?Ú'r	   z	<a href="z">z</a>)Úurl_reÚfinditerrß  ÚstartÚendrÐ  rÄ   rÈ  )rŽ   rÞ  rã   ÚprevposÚmatchÚurls         r   Ú_render_lineÚhtml._render_line¶  s­   € ØˆØ—[‘[×)Ñ)¨$Ö/ˆEØ×Ñ˜h¨W·[±[³]Ð(CÔDØ—i‘i“kˆGØ—+‘+“-ˆCØ�2‰wÐ4Ó4Ø˜#˜2�h�Ø˜1‘�Ø�N‰N˜Y s e¨2¨d×.?Ñ.?ÀÓ.DÐ-EÀTÐJÖKñ 0ð 	×Ñ˜(¨¨ NÕ3r@   c                 ó\  • [         R                  " 5       nUR                  S5        UR                  U R                  5        UR                  S5        UR	                  S5       H%  nU R                  X#5        UR                  S5        M'     UR                  S5        UR                  5       $ )Nzs<html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>z6</title>
        </head>

        <body>
        <pre>rL   z</pre></body></html>)ÚioÚStringIOrÄ   rœ   rÖ   rî  Úgetvalue)rŽ   r^   rÞ  rã   s       r   r”   Úhtml._renderÂ  sŽ   € Ü—;’;“=ˆØ�‰ð ô 	ð 	�‰�t—z‘zÔ"Ø�‰ð ô 	ð —J‘J˜tÖ$ˆDØ×Ñ˜hÔ-Ø�N‰N˜4Ö ñ %ð 	�‰Ð-Ô.à× Ñ Ó"Ð"r@   rD   N)rE   rF   rG   rH   rö   ÚcompileÚIrØ  rÍ  rÏ  rÙ  rÖ  r×  rÚ  rÛ  rÜ  rÝ  rç  r.   rÈ  rß  rî  r”   rJ   rD   r@   r   r   r   ‰  sÌ   † ð —z’zÐ"CÀRÇTÁTÓJÐØ—
’
Ð<¸b¿d¹dÓC€Ið€Jà—J’Jð	ØŸ™ó€Mð �ZŠZÐ:¸B¿D¹DÓA€FØN€Gà�ZŠZÐ>Ó?€Fð!€Gð �zŠzð	AóB€Hð 4€IØ�ZŠZð	4ó5€Fò"ò"òò
4õ#r@   r   c                   ó.   ^ • \ rS rSrU 4S jrS rSrU =r$ )rr   iØ  c                 óÌ   >• [         TU ]  " U6   [        R                  " U R                  R                  SS5      5      U l        SU l        [        R                  " 5       U l
        g )Nrd   zsensible-browserz.html)rŒ   r�   rN  rÖ   r   r¬  rÙ   r  r   Úutf8_encodingrò   r�   s     €r   r�   Úbrowser_frd.__init__Ú  sL   ø€ Ü‰Ò˜$ÑÜ—{’{ 4§;¡;§?¡?ØÐ)ó$+ó ,ˆŒàˆŒÜ×)Ò)Ó+ˆ�r@   c                 ó   • grº   rD   r®   s    r   r¶   Úbrowser_frd.needs_tty_stdiná  r¼   r@   r¾  )rE   rF   rG   rH   r�   r¶   rJ   r–   r—   s   @r   rr   rr   Ø  s   ø† õ,÷ð r@   rr   c                   ó   • \ rS rSrSrg)rt   iå  rD   Nr	  rD   r@   r   rt   rt   å  r
  r@   rt   r‹   )/r   r;   rö   r.  r4   rø   Úemail.messager%   Úemail.headerÚemail.charsetrñ  r‘  rN  rÒ   Úapt_listchangesr   r   Úapt_listchanges.ALChacksr   r   r   r9   r?   r   rB   r\   r†   rˆ   r™   rz   rn   rU   rÿ   ro   r  rl   rp   r  rq   rW  re  r§  rm   rs   r   rr   rt   rD   r@   r   Ú<module>r     sŽ  ðó4 Û 	Û 	Û Û Û Û Û Û Û 	Û 
Û Û å "Ý $Ý &ð Ð òòHô4ô(/�yô /ò
ò(T3÷nñ ôˆTô ôˆvô ô**�(ô *ôZ#�ô #ô6
�Tô 
ô	ˆ~˜xô 	ô�Fô ôFˆ}˜n¨j¸(ô Fô� °ô ôN�dô Nôb)ˆm˜^¨X°ô )ô(˜ô ô.`˜Oô `ôFÐ&ô ô� °
Ð<NØôôB	�j )ô 	ôL#ˆ6ô L#ô^
�$Ð-¨zÐ;MØô
ô	˜
 Kõ 	r@   