+
    }n j$8  ã                   ó  € ^ RI t ^ RIHtHtHtHt ^ RIHtHtH	t	H
t
HtHtHtHtHt ^ RIHtHt ^ RIHt ^ RIHt RRR	R
/t]P0                  ! 4       t] P4                  ! ]P6                  ! ]4      4      t ! R R]4      tR tR# )é    N)ÚAnyÚDictÚOptionalÚTuple)	ÚapiÚevent_loggerÚ
exceptionsÚhttpÚ	livepatchÚmessagesÚsnapÚsystemÚutil)ÚEntitlementWithMessageÚUAEntitlement)ÚApplicationStatus)ÚStaticAffordancezUnknown Auth-Tokenz)Invalid Auth-Token provided to livepatch.zunsupported kernelz2Your running kernel is not supported by Livepatch.c                   ó^  a a€ ] tR t^t oRt]P                  t]P                  t	]P                  tRtRtRtRt]V3R lR l4       t]V3R lR l4       tV3R lR	 ltV3R
 lR ltV3R lR ltRV3R lR lltV3R lR ltV3R lR ltV3R lR ltR tRV3R lV 3R llltRtVtV ;t# )ÚLivepatchEntitlementr   FTc                ó4   <€ V ^8„  d   QhRS[ S[R3,          /# ©é   Úreturn.)r   r   )ÚformatÚ__classdict__s   "€ÚA/usr/lib/python3/dist-packages/uaclient/entitlements/livepatch.pyÚ__annotate__Ú!LivepatchEntitlement.__annotate__*   s   ø€ ÷ 
ñ 
¡uÑ-CÀSÐ-HÕ'Iñ 
ó    c                ó‚   € ^ RI Hp ^ RIHp \	        V\
        P                  4      \	        V\
        P                  4      3# )r   ©ÚFIPSEntitlement)ÚRealtimeKernelEntitlement)Úuaclient.entitlements.fipsr"   Úuaclient.entitlements.realtimer#   r   r   ÚLIVEPATCH_INVALIDATES_FIPSÚREALTIME_LIVEPATCH_INCOMPATIBLE)Úselfr"   r#   s   &  r   Úincompatible_servicesÚ*LivepatchEntitlement.incompatible_services)   s=   € å>ÝLô #Ø¤×!DÑ!Dóô #Ø)Ü×8Ñ8óð	
ð 	
r   c                ó4   <€ V ^8„  d   QhRS[ S[R3,          /# r   )r   r   )r   r   s   "€r   r   r   9   s   ø€ ÷ 
ñ 
¡EÑ*:¸CÐ*?Õ$@ñ 
r   c                ó"  a€ ^ RI Hp V! V P                  R7      p\        VP	                  4       ^ ,          \
        P                  8H  4      o\        P                  P                  V P                  R7      R R3\        P                  V3R lR33# )r   r!   )Úcfg)Útitlec                  ól   € \         P                  ! 4       ;'       g    \         P                  ! 4       R 8H  # )Úwsl)r   Úis_containerÚget_virt_type© r   r   Ú<lambda>Ú9LivepatchEntitlement.static_affordances.<locals>.<lambda>H   s-   € œ×+Ò+Ó-÷ 3ð 3Ü×'Ò'Ó)¨UÑ2ð3r   Fc                  ó   <€ S # ©Nr3   )Úis_fips_enableds   €r   r4   r5   N   s   ø€ ™r   )r$   r"   r-   ÚboolÚapplication_statusr   ÚENABLEDr   Ú"SERVICE_ERROR_INSTALL_ON_CONTAINERr   r.   Ú!LIVEPATCH_ERROR_WHEN_FIPS_ENABLED)r(   r"   Úfips_entr8   s   &  @r   Ústatic_affordancesÚ'LivepatchEntitlement.static_affordances8   s�   ø€ õ 	?á" t§x¡xÔ0ˆäØ×'Ñ'Ó)¨!Õ,Ô0A×0IÑ0IÑIó
ˆô ×;Ñ;×BÑBØŸ*™*ð Có ñ3àðô ×:Ñ:Ü'Øðð
ð 	
r   c                ó    <€ V ^8„  d   QhRS[ /# ©r   r   ©Úint)r   r   s   "€r   r   r   S   s   ø€ ÷ ñ ™cñ r   c                ó   € ^# )r   r3   ©r(   s   &r   Úenable_stepsÚ!LivepatchEntitlement.enable_stepsS   ó   € Ùr   c                ó    <€ V ^8„  d   QhRS[ /# rB   rC   )r   r   s   "€r   r   r   V   s   ø€ ÷ ñ ™sñ r   c                ó   € ^# )é   r3   rF   s   &r   Údisable_stepsÚ"LivepatchEntitlement.disable_stepsV   rI   r   c                ó:   <€ V ^8„  d   QhRS[ P                  RS[/# )r   Úprogressr   ©r   ÚProgressWrapperr9   )r   r   s   "€r   r   r   Y   s%   ø€ ÷ D
ñ D
©×(;Ñ(;ð D
Áñ D
r   c                ó”  € VP                  \        P                  4       \        P                  ! 4       '       gF   VP                  R\        P                  P                  RR7      4       \        P                  ! 4        \        P                  ! 4       '       gH   VP                  R\        P                  P                  RR7      4        \        P                  ! R4       \        P                   ! V4        \        P"                  ! R4       \(        P*                  ! RV P,                  P.                  \(        P0                  4      p\(        P*                  ! RV P,                  P2                  \(        P4                  4      p\        P6                  ! VV\        P8                  R7       \:        P<                  ! 4       '       gH   VP                  R\        P                  P                  RR7      4        \        P                  ! R4       \:        PB                  ! W44       V PE                  VRRR7      #   \        P                   dS   p\        P                  RTR7       TP                  R\        P                  P                  RR7      4        R	p?EL¶R	p?ii ; i  \        P                   dV   p\        P                  R
TR7       \$        P'                  \        P                  P                  RR7      4        R	p?ELöR	p?ii ; i  \        P                   d&   p\        P>                  ! \A        T4      R7      hR	p?ii ; i)zIEnable specific entitlement.

@return: True on success, False otherwise.
ÚinfoÚsnapd)Úpackagesz
snapd snapz!Failed to install snapd as a snap©Úexc_infozsnap install snapd©ÚcommandNzFailed to refresh snapd snapzsnap refresh snapdr
   Úhttps)Ú
http_proxyÚhttps_proxyÚretry_sleepszcanonical-livepatch snapzcanonical-livepatch©Ú	error_msgT)Úprocess_directivesÚprocess_token)#rP   r   ÚINSTALLING_LIVEPATCHr   Úis_snapd_installedÚemitÚINSTALLING_PACKAGESr   Úinstall_snapdÚis_snapd_installed_as_a_snapÚinstall_snapr	   ÚProcessExecutionErrorÚLOGÚwarningÚEXECUTING_COMMAND_FAILEDÚrun_snapd_wait_cmdÚrefresh_snapÚeventrT   r
   Úvalidate_proxyr-   r\   ÚPROXY_VALIDATION_SNAP_HTTP_URLr]   ÚPROXY_VALIDATION_SNAP_HTTPS_URLÚconfigure_snap_proxyÚSNAP_INSTALL_RETRIESr   Úis_livepatch_installedÚErrorInstallingLivepatchÚstrÚconfigure_livepatch_proxyÚsetup_livepatch_config)r(   rP   Úer\   r]   s   &&   r   Ú_perform_enableÚ$LivepatchEntitlement._perform_enableY   s“  € ð
 	×Ñœ(×7Ñ7Ô8ä×&Ò&×(Ò(Ø�M‰MØœ×4Ñ4×;Ñ;ÀWÐ;ÓMôô ×ÒÔ ä×0Ò0×2Ò2Ø�M‰MØÜ×,Ñ,×3Ñ3¸\Ð3ÓJôð	Ü×!Ò! 'Ô*ô 	×Ò Ô)ð	Ü×Ò˜gÔ&ô ×(Ò(Ø�D—H‘H×'Ñ'¬×)LÑ)Ló
ˆ
ô ×)Ò)Ø�T—X‘X×)Ñ)¬4×+OÑ+Oó
ˆô 	×!Ò!Ø!Ø#Ü×2Ñ2õ	
ô
 ×/Ò/×1Ò1Ø�M‰MØÜ×,Ñ,×3Ñ3Ø7ð 4ó ôðLÜ×!Ò!Ð"7Ô8ô 	×+Ò+¨JÔDà×*Ñ*Ø¨¸Tð +ó 
ð 	
øô] ×3Ñ3ô Ü—‘Ð?È!�ÔLØ—‘ØÜ×5Ñ5×<Ñ<Ø 4ð =ó ÷ò ûðûô ×/Ñ/ô 	Ü�K‰KÐ6ÀˆKÔCÜ�J‰JÜ×1Ñ1×8Ñ8Ø0ð 9ó ÷ò ûð	ûô8 ×3Ñ3ô LÜ ×9Ò9ÄCÈÃFÔKÐKûðLúsJ   ÃH6 Ã9J  Ç6L È6JÉAJÊJÊ L
Ê5A
LÌL
ÌMÌ" MÍMc                óF   <€ V ^8„  d   QhRS[ P                  RS[RS[RS[/# )r   rP   ra   rb   r   rQ   )r   r   s   "€r   r   r   Ÿ   s9   ø€ ÷ ?ñ ?á×%Ñ%ð?ñ !ð?ñ ð	?ñ
 
ñ?r   c           	     ó²  € VP                  \        P                  4       V P                  P	                  4       P                  V P                  4      pV'       d    \        V4       V'       Ed   VP                  R4      pV'       g>   \        P!                  RV P"                  4       V P                  P$                  R,          pV P'                  4       w  rxV\(        P*                  8w  d]   \        P-                  R	4       VP                  R\        P.                  4        \0        P2                  ! \4        P6                  R
.4        \0        P2                  ! \4        P6                  RV.RR7       R# R#   \        P                   de   p\        P                  \        T4      TR7       TP                  R\        P                  P                  \        T4      R7      4        Rp?R# Rp?ii ; i  \        P                   d,   p\        P                  \        T4      TR7        Rp?R# Rp?ii ; i  \        P                   dŒ   p\        P8                  p	\:        P=                  4        F  w  r«T
\        T4      9   g   K  Y›,          p	 M	  T	\        P8                  8X  d   T	\        T4      ,          p	TP                  RT	4        Rp?R# Rp?ii ; i)zÚProcesss configuration setup for livepatch directives.

:param process_directives: Boolean set True when directives should be
    processsed.
:param process_token: Boolean set True when token should be
    processsed.
rW   rT   r_   NFÚresourceTokenzHNo specific resourceToken present. Using machine token as %s credentialsÚmachineTokenz&Disabling livepatch before re-enablingÚdisableÚenableT©Úcapture)rP   r   ÚSETTING_UP_LIVEPATCHÚmachine_token_fileÚentitlementsÚgetÚnameÚprocess_config_directivesr	   rj   rk   Úerrorrx   re   ÚLIVEPATCH_UNABLE_TO_CONFIGUREr   Údebugr.   Úmachine_tokenr:   r   ÚDISABLEDrT   ÚLIVEPATCH_DISABLE_REATTACHr   Úsubpr   ÚLIVEPATCH_CMDÚLIVEPATCH_UNABLE_TO_ENABLEÚERROR_MSG_MAPÚitems)r(   rP   ra   rb   Úentitlement_cfgr{   Úlivepatch_tokenr:   Ú_detailsÚmsgÚerror_messageÚprint_messages   &&&&        r   rz   Ú+LivepatchEntitlement.setup_livepatch_configŸ   s/  € ð 	×Ñœ(×7Ñ7Ô8à×1Ñ1×>Ñ>Ó@×DÑDÀTÇYÁYÓOˆßð
Ü)¨/Ô:÷ ˆ=Ø-×1Ñ1°/ÓBˆOß"Ü—	‘	ð&à—J‘Jôð
 #'×"9Ñ"9×"GÑ"GØ"õ#�ð ,0×+BÑ+BÓ+DÑ(ÐØ!Ô%6×%?Ñ%?Ô?Ü—‘ÐAÔBØ—‘˜f¤h×&IÑ&IÔJð!Ü—K’K¤×!8Ñ!8¸)Ð DÔEðÜ—’Ü×,Ñ,¨h¸ÐHØ õó øôY ×3Ñ3ô Ü—	‘	œ#˜a›&¨1�	Ô-Ø—‘ØÜ×:Ñ:×AÑAÜ"% a£&ð Bó ôõ ûðûô4 "×7Ñ7ô !Ü—I‘Iœc !›f¨q�IÔ1Ý ûð!ûô ×3Ñ3ô 	Ü×9Ñ9�Ü4A×4GÑ4GÖ4IÑ0�MØ$¬¨A«Ö.ØÕ,˜Ùñ 5Jð œ(×=Ñ=Ô=Øœ3˜q›6•M�CØ—‘˜f cÔ*Ýûð	úsP   ÁE7 Ä#&G3 Å
)H6 Å7G0ÆAG+Ç+G0Ç3H3È H.È.H3È6KÉ6KÊAKËKc                ó4   <€ V ^8„  d   QhRS[ P                  /# )r   rP   )r   rR   )r   r   s   "€r   r   r   à   s   ø€ ÷ ñ ©×)<Ñ)<ñ r   c                ó  € \         P                  ! 4       '       g   R# \         P                  R.pVP                  \        P
                  P                  RP                  V4      R7      4       \        P                  ! VRR7       R# )zIDisable specific entitlement

@return: True on success, False otherwise.
Tr‚   Ú rY   r„   )
r   rv   r“   rP   r   ÚEXECUTING_COMMANDr   Újoinr   r’   )r(   rP   Úcmds   && r   Ú_perform_disableÚ%LivepatchEntitlement._perform_disableà   sf   € ô
 ×/Ò/×1Ò1ÙÜ×&Ñ&¨	Ð2ˆØ×ÑÜ×&Ñ&×-Ñ-°c·h±h¸s³mÐ-ÓDô	
ô 	�Š�C Õ&Ùr   c                óZ   <€ V ^8„  d   QhRS[ S[S[S[P                  ,          3,          /# rB   )r   r   r   r   ÚNamedMessage)r   r   s   "€r   r   r   î   s+   ø€ ÷ ñ á	Ñ ¡(©8×+@Ñ+@Õ"AÐAÕ	Bñr   c                óÌ  € \         P                  R 3p\        P                  ! 4       '       g!   \         P                  \
        P                  3#  \        P                  ! 4       pTf!   \         P                  \
        P                  3# T#   \        P                   dE   p\         P                  \
        P                  P                  TP                  R7      3u R p?# R p?ii ; i)N)Úlivepatch_error)r   r;   r   rv   r�   r   ÚLIVEPATCH_NOT_ENABLEDÚstatusr	   rj   ÚWARNINGÚ LIVEPATCH_CLIENT_FAILURE_WARNINGr   ÚstderrÚ+LIVEPATCH_APPLICATION_STATUS_CLIENT_FAILURE)r(   r«   Úlivepatch_statusr{   s   &   r   r:   Ú'LivepatchEntitlement.application_statusî   sÇ   € ô $×+Ñ+¨TÐ2ˆä×/Ò/×1Ò1Ü%×.Ñ.´×0NÑ0NÐOÐOð	Ü(×/Ò/Ó1Ðð Ò#ô "×*Ñ*Ü×DÑDðð ð ˆøô ×/Ñ/ô 	ä!×)Ñ)Ü×9Ñ9×@Ñ@Ø$%§H¡Hð Aó ðõ ûð	ús   ÁB
 Â
C#Â9CÃC#ÃC#c                óZ   <€ V ^8„  d   QhRS[ S[S[S[P                  ,          3,          /# rB   )r   r9   r   r   r§   )r   r   s   "€r   r   r     s*   ø€ ÷ ñ á	‰t‘X™h×3Ñ3Õ4Ð4Õ	5ñr   c                ó>  € \         P                  ! 4       pV\         P                  P                  8X  dM   \        P
                  ! 4       pR \        P                  P                  VP                  VP                  R7      3# V\         P                  P                  8X  dM   \        P
                  ! 4       pR \        P                  P                  VP                  VP                  R7      3# V\         P                  P                  8X  d   R \        P                  3# R# )T)ÚversionÚarch)FN)r   Úon_supported_kernelÚLivepatchSupportÚUNSUPPORTEDr   Úget_kernel_infor   ÚLIVEPATCH_KERNEL_NOT_SUPPORTEDr   Úuname_releaseÚuname_machine_archÚ
KERNEL_EOLÚLIVEPATCH_KERNEL_EOLÚKERNEL_UPGRADE_REQUIREDÚ!LIVEPATCH_KERNEL_UPGRADE_REQUIRED)r(   ÚsupportÚkernel_infos   &  r   Úenabled_warning_statusÚ+LivepatchEntitlement.enabled_warning_status  sü   € ô ×/Ò/Ó1ˆØ”i×0Ñ0×<Ñ<Ô<Ü ×0Ò0Ó2ˆKàÜ×7Ñ7×>Ñ>Ø'×5Ñ5Ø$×7Ñ7ð ?ó ðð ð ”i×0Ñ0×;Ñ;Ô;Ü ×0Ò0Ó2ˆKàÜ×-Ñ-×4Ñ4Ø'×5Ñ5Ø$×7Ñ7ð 5ó ðð ð ”i×0Ñ0×HÑHÔHàÜ×:Ñ:ðð ð Ðr   c                óÀ   € \         P                  ! 4       \         P                  P                  8X  d,   \        P
                  ! 4       '       g   \        P                  # R # r7   )r   r¶   r·   r¸   r   r1   r   Ú*LIVEPATCH_KERNEL_NOT_SUPPORTED_DESCRIPTIONrF   s   &r   Ústatus_description_overrideÚ0LivepatchEntitlement.status_description_override(  s@   € ä×)Ò)Ó+Ü×)Ñ)×5Ñ5ô6ä×'Ò'×)Ò)ä×FÑFÐFÙr   c          
      ód   <€ V ^8„  d   QhRS[ S[S[3,          RS[ S[S[3,          RS[RS[RS[/# )r   Úorig_accessÚdeltasÚallow_enableÚverboser   )r   rx   r   r9   )r   r   s   "€r   r   r   1  sM   ø€ ÷ <ñ <á™#™s˜(•^ð<ñ ‘S™#�X•ð<ñ ð	<ñ
 ð<ñ 
ñ<r   c                ó"  <€ \         SV `  WW4R7      '       d   R# VP                  R/ 4      pVP                  R/ 4      P                  RR4      pV'       d)   V P                  \        P
                  ! 4       4      w  rxV# V P                  4       w  r˜V	\        P                  8X  d   R# VP                  R/ 4      p
\        RR	.4      p\        VP                  V
4      4      p\        VP                  R
R4      4      p\        WÍ.4      '       d‚   \        P                  R4       V'       d>   \        P                  \         P"                  P%                  V P&                  R7      4       V P)                  \        P
                  ! 4       VVR7      # R# )a  Process any contract access deltas for this entitlement.

:param orig_access: Dictionary containing the original
    resourceEntitlement access details.
:param deltas: Dictionary which contains only the changed access keys
and values.
:param allow_enable: Boolean set True if allowed to perform the enable
    operation. When False, a message will be logged to inform the user
    about the recommended enabled service.
:param verbose: If True, display output to stdout

:return: True when delta operations are processed; False when noop.
)rÍ   TÚentitlementÚobligationsÚenableByDefaultFÚ
directivesÚcaCertsÚremoteServerr€   zANew livepatch directives or token. running setup_livepatch_config)Úservice)rP   ra   rb   )ÚsuperÚprocess_contract_deltasr‰   rƒ   r   rR   r:   r   r�   Úsetr9   ÚintersectionÚanyrk   rT   rp   r   Ú#SERVICE_UPDATING_CHANGED_DIRECTIVESr   rŠ   rz   )r(   rÊ   rË   rÌ   rÍ   Údelta_entitlementÚprocess_enable_defaultÚenable_successÚ_r:   Údelta_directivesÚsupported_deltasra   rb   Ú	__class__s   &&&&&         €r   r×   Ú,LivepatchEntitlement.process_contract_deltas1  sz  ø€ ô( ‰7Ñ*Ø ð +÷ 
ò 
ñ à"ŸJ™J }°bÓ9ÐØ!2×!6Ñ!6°}ÀbÓ!I×!MÑ!MØ˜uó"
Ð÷ "Ø $§¡¬C×,?Ò,?Ó,AÓ BÑˆNØ!Ð!à $× 7Ñ 7Ó 9ÑÐØÔ!2×!;Ñ!;Ô;ÙØ,×0Ñ0°¸rÓBÐÜ 	¨>Ð:Ó;ÐÜ!Ø×)Ñ)Ð*:Ó;ó
Ðô ˜VŸZ™Z¨¸Ó?Ó@ˆÜÐ"Ð2×3Ò3Ü�H‰Hð)ô÷
 Ü—
‘
Ü×@Ñ@×GÑGØ $§	¡	ð Hó ôð
 ×.Ñ.Ü×,Ò,Ó.Ø#5Ø+ð /ó ð ñ
 r   r3   )TT)FT)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rŠ   r   ÚLIVEPATCH_TITLEr.   ÚLIVEPATCH_DESCRIPTIONÚdescriptionÚLIVEPATCH_HELP_TEXTÚ	help_textÚ#affordance_check_kernel_min_versionÚaffordance_check_kernel_flavorÚaffordance_check_seriesÚaffordance_check_archÚpropertyr)   r?   rG   rM   r|   rz   r¤   r:   rÃ   rÇ   r×   Ú__static_attributes__Ú__classdictcell__Ú__classcell__)râ   r   s   @@r   r   r      sÊ   ù‡ € Ø€DØ×$Ñ$€EØ×0Ñ0€KØ×,Ñ,€IØ*/Ð'Ø%*Ð"à"Ðð !Ðà÷
ó ð
ð ÷
ó ð
÷4ð ÷ð ÷D
ð D
÷L?ò ?÷Bð ÷ð ÷4ð ò@÷<÷ <õ <r   r   c                óà  € V '       g   R# V P                  R/ 4      P                  R/ 4      pVP                  R4      pV'       d9   \        P                  ! \        P                  RRP                  V4      .RR7       VP                  R	R
4      pVP                  R4      '       d   VRR pV'       d;   \        P                  ! \        P                  RRP                  V4      .RR7       R# R# )a€  Process livepatch configuration directives.

We process caCerts before remoteServer because changing remote-server
in the canonical-livepatch CLI performs a PUT against the new server name.
If new caCerts were required for the new remoteServer, this
canonical-livepatch client PUT could fail on unmatched old caCerts.

@raises: ProcessExecutionError if unable to configure livepatch.
NrÏ   rÒ   rÓ   Úconfigzca-certs={}Tr„   rÔ   Ú Ú/zremote-server={}éÿÿÿÿ)r‰   r   r’   r   r“   r   Úendswith)r-   rÒ   Úca_certsÚremote_servers   &   r   r‹   r‹   p  sÏ   € ÷ ÙØ—‘˜¨Ó+×/Ñ/°¸bÓA€JØ�~‰~˜iÓ(€HßÜ�Šä×'Ñ'ØØ×$Ñ$ XÓ.ðð
 õ	
ð —N‘N >°2Ó6€MØ×Ñ˜c×"Ò"Ø% c rÐ*ˆßÜ�Šä×'Ñ'ØØ"×)Ñ)¨-Ó8ðð
 ÷	
ñ r   ) ÚloggingÚtypingr   r   r   r   Úuaclientr   r   r	   r
   r   r   r   r   r   Úuaclient.entitlements.baser   r   Ú(uaclient.entitlements.entitlement_statusr   Úuaclient.typesr   r•   Úget_event_loggerrp   Ú	getLoggerÚreplace_top_level_logger_namerä   rk   r   r‹   r3   r   r   Ú<module>r     s}   ðÛ ß -Ó -÷
÷ 
õ 
÷ MÝ FÝ +ð ÐEØÐNð€ð
 	×%Ò%Ó'€Ø×Ò˜×:Ò:¸8ÓDÓE€ôQ˜=ô Qôh
"
r   