+
    }n jrº  ã                   ó�  € ^ RI t ^ RIt^ RIt^ RIt^ RIHt ^ RIHtHtHtH	t	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HtHt ^ RIHt ^ RIHtHtHtH t H!t!H"t"H#t#H$t$ ^ RI%H&t& ^ RI'H(t( ^ R	I)H*t*H+t+ ]PX                  ! 4       t-]P\                  ! ]P^                  ! ]04      4      t1 ! R
 R4      t2 ! R R] Pf                  R7      t4R# )é    N)Údatetime)ÚAnyÚDictÚListÚOptionalÚSetÚTupleÚTypeÚUnion)ÚapiÚaptÚconfigÚcontractÚevent_loggerÚ
exceptionsÚhttpÚmessagesÚsnapÚsystemÚutil)Ú_is_attached)ÚApplicabilityStatusÚApplicationStatusÚCanDisableFailureÚCanDisableFailureReasonÚCanEnableFailureÚCanEnableFailureReasonÚContractStatusÚUserFacingStatus)Úmachine_token)Ústatus_cache_file)ÚMessagingOperationsDictÚStaticAffordancec                   ó2   a € ] tR t^(t o V 3R lR ltRtV tR# )ÚEntitlementWithMessagec                óH   <€ V ^8„  d   QhRS[ R,          RS[P                  /# )é   ÚentitlementÚUAEntitlementÚ	named_msg)r
   r   ÚNamedMessage)ÚformatÚ__classdict__s   "€Ú</usr/lib/python3/dist-packages/uaclient/entitlements/base.pyÚ__annotate__Ú#EntitlementWithMessage.__annotate__)   s*   ø€ ÷ #ñ #á˜/Õ*ð#ñ ×(Ñ(ñ#ó    c                ó   € Wn         W n        R # ©N©r(   r*   )Úselfr(   r*   s   &&&r.   Ú__init__ÚEntitlementWithMessage.__init__)   s   € ð
 'ÔØ"Žr1   r4   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r6   Ú__static_attributes__Ú__classdictcell__©r-   s   @r.   r%   r%   (   s   ø‡ € ÷#ö #r1   r%   c                   ó¼  a € ] tR t^2t o RtRtRtRtRwtRwt	Rwt
R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]]P(                  V 3R lR	 l4       4       t]]P(                  V 3R
 lR l4       4       t]V 3R lR l4       tV 3R lR lt]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       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 ]V 3R  lR! l4       t!]V 3R" lR# l4       t"]V 3R$ lR% l4       t#V 3R& lR' lt$]R( 4       t%]V 3R) lR* l4       t&RxV 3R, lR- llt'R. t(]R/ 4       t)]P(                  V 3R0 lR1 l4       t*]P(                  V 3R2 lR3 l4       t+V 3R4 lR5 lt,V 3R6 lR7 lt-V 3R8 lR9 lt.V 3R: lR; lt/V 3R< lR= lt0V 3R> lR? lt1V 3R@ lRA lt2V 3RB lRC lt3]P(                  V 3RD lRE l4       t4V 3RF lRG lt5V 3RH lRI lt6V 3RJ lRK lt7RL t8RM t9V 3RN lRO lt:RyV 3RP lRQ llt;V 3RR lRS lt<]P(                  V 3RT lRU l4       t=V 3RV lRW lt>V 3RX lRY lt?V 3RZ lR[ lt@V 3R\ lR] ltARyV 3R^ lR_ lltBV 3R` lRa ltCV 3Rb lRc ltDV 3Rd lRe ltE]P(                  V 3Rf lRg l4       tFV 3Rh lRi ltGV 3Rj lRk ltHV 3Rl lRm ltIV 3Rn lRo ltJV 3Rp lRq ltKRzV 3Rr lRs lltLV 3Rt lRu ltMRvtNV tOR+# ){r)   Ú FTc                ó    <€ V ^8„  d   QhRS[ /# ©r'   Úreturn©Ústr)r,   r-   s   "€r.   r/   ÚUAEntitlement.__annotate__Q   s   ø€ ÷ ñ ™cñ r1   c                ó   € R# )z?The lowercase name of this entitlement, in case it is a variantr@   © ©r5   s   &r.   Úvariant_nameÚUAEntitlement.variant_nameP   s   € ñ r1   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# rB   )r   rE   )r,   r-   s   "€r.   r/   rF   V   s   ø€ ÷ ñ ™T¡#�Yñ r1   c                óŒ   € V P                   .pV P                  V P                   8w  d   VP                  V P                  4       V# )z1The list of names this entitlement may be called.)ÚnameÚpresentation_nameÚappend)r5   Úvalid_namess   & r.   rQ   ÚUAEntitlement.valid_namesU   s;   € ð —y‘y�kˆØ×!Ñ! T§Y¡YÔ.Ø×Ñ˜t×5Ñ5Ô6ØÐr1   c                ó    <€ V ^8„  d   QhRS[ /# rB   rD   )r,   r-   s   "€r.   r/   rF   _   s   ø€ ÷ ñ ‘sñ r1   c                ó   € R# )z,The human readable title of this entitlementNrH   rI   s   &r.   ÚtitleÚUAEntitlement.title]   ó   € ñ 	r1   c                ó    <€ V ^8„  d   QhRS[ /# rB   rD   )r,   r-   s   "€r.   r/   rF   e   s   ø€ ÷ ñ ™Sñ r1   c                ó   € R# )z&A sentence describing this entitlementNrH   rI   s   &r.   ÚdescriptionÚUAEntitlement.descriptionc   rW   r1   c                ó    <€ V ^8„  d   QhRS[ /# rB   rD   )r,   r-   s   "€r.   r/   rF   j   s   ø€ ÷ ñ ¡3ñ r1   c                ó  € V P                   '       d   V P                  # V P                  P                  '       dG   V P                  P                  R/ 4      P                  R/ 4      P                  RV P                  4      # V P                  # )z/The user-facing name shown for this entitlementr(   ÚaffordancesÚpresentedAs)Ú
is_variantrJ   Úmachine_token_fileÚ
is_presentÚentitlement_cfgÚgetrN   rI   s   &r.   rO   ÚUAEntitlement.presentation_namei   sn   € ð �?�?ˆ?Ø×$Ñ$Ð$Ø×$Ñ$×/×/Ð/à×$Ñ$×(Ñ(¨¸Ó;ß‘�] BÓ'ß‘�] D§I¡IÓ.ðð —9‘9Ðr1   c                óv   <€ V ^8„  d   QhRS[ S[S[3,          RS[S[S[S[P                  ,          3,          /# )r'   Úplatform_checkrC   )r   rE   r   r	   Úboolr   r   r+   )r,   r-   s   "€r.   r/   rF   w   s:   ø€ ÷ ñ Ù"¡3© 8�nðá	‰t‘X™h×3Ñ3Õ4Ð4Õ	5ñr1   c                ó   € R# )z«Verify specific platform checks for a service.

This should only be used if the service requires custom platform checks
to check if it is available or not in the machine.
©TNrH   )r5   rg   s   &&r.   Úverify_platform_checksÚ$UAEntitlement.verify_platform_checksw   s
   € ð Ðr1   c                ó    <€ V ^8„  d   QhRS[ /# rB   rD   )r,   r-   s   "€r.   r/   rF   ‚   s   ø€ ÷ ñ ™3ñ r1   c                óT  € V P                   pV P                  '       d„   V P                  P                  4        UUu. uF   w  r#RP                  W#P                  4      NK"  	  pppRP                  R\        P                  ,           R,           .V,           4      pW,          pV# u uppi )z$Help information for the entitlementz
  * {}: {}Ú
z

)Ú	help_textÚvariantsÚitemsr,   rZ   Újoinr   ÚCLI_HELP_VARIANTS_HEADER)r5   rp   rJ   Úvariant_clsÚvariant_itemsÚvariant_texts   &     r.   Ú	help_infoÚUAEntitlement.help_info�   sœ   € ð —N‘Nˆ	à�=�=ˆ=ð 26·±×1DÑ1DÔ1Fôá1FÑ-�Lð ×#Ñ# L×2IÑ2IÖJÙ1Fð ñ ð
  Ÿ9™9Øœ(×;Ñ;Õ;¸dÕBÐCØõ óˆLð Õ%ˆIàÐùós   ¼&B$c                ó4   <€ V ^8„  d   QhRS[ S[R3,          /# ©r'   rC   .)r	   r#   )r,   r-   s   "€r.   r/   rF   ˜   s   ø€ ÷ ñ ¡EÑ*:¸CÐ*?Õ$@ñ r1   c                ó   € R# )NrH   rH   rI   s   &r.   Ústatic_affordancesÚ UAEntitlement.static_affordances—   ó   € àˆ	r1   c                ó4   <€ V ^8„  d   QhRS[ S[R3,          /# r{   ©r	   r%   )r,   r-   s   "€r.   r/   rF   œ   s   ø€ ÷ +ñ +¡uÑ-CÀSÐ-HÕ'Iñ +r1   c                ó   € V P                   # )zã
Return a list of packages that aren't compatible with the entitlement.
When we are enabling the entitlement we can directly ask the user
if those entitlements can be disabled before proceding.
Overridden in livepatch and fips
)Ú_incompatible_servicesrI   s   &r.   Úincompatible_servicesÚ#UAEntitlement.incompatible_services›   s   € ð ×*Ñ*Ð*r1   c                ó4   <€ V ^8„  d   QhRS[ S[R3,          /# r{   r�   )r,   r-   s   "€r.   r/   rF   ¦   s   ø€ ÷ 'ñ '¡5Ñ)?ÀÐ)DÕ#Eñ 'r1   c                ó   € V P                   # )zé
Return a list of packages that must be active before enabling this
service. When we are enabling the entitlement we can directly ask
the user if those entitlements can be enabled before proceding.
Overridden in ros and ros-updates.
)Ú_required_servicesrI   s   &r.   Úrequired_servicesÚUAEntitlement.required_services¥   s   € ð ×&Ñ&Ð&r1   c                óB   <€ V ^8„  d   QhRS[ S[R,          R3,          /# )r'   rC   r)   .)r	   r
   )r,   r-   s   "€r.   r/   rF   °   s#   ø€ ÷ (ñ (¡E©$¨Õ*?ÀÐ*DÕ$Eñ (r1   c                ó   € V P                   # )zî
Return a list of packages that depend on this service.
We will use that list during disable operations, where
a disable operation will also disable all of the services
required by the original service
Overriden in esm-apps and esm-infra
)Ú_dependent_servicesrI   s   &r.   Údependent_servicesÚ UAEntitlement.dependent_services¯   s   € ð ×'Ñ'Ð'r1   c                óD   <€ V ^8„  d   QhRS[ S[S[R,          3,          /# ©r'   rC   r)   ©r   rE   r
   )r,   r-   s   "€r.   r/   rF   º   s#   ø€ ÷ ñ ™t¡C©¨oÕ)>Ð$>Õ?ñ r1   c                ó   € / # r3   rH   rI   s   &r.   Ú_get_variantsÚUAEntitlement._get_variantsº   s   € Øˆ	r1   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# rB   )r   rE   )r,   r-   s   "€r.   r/   rF   ½   s   ø€ ÷ ñ ©©C­ñ r1   c                ó  € \        4       pV P                  4       pVP                  R/ 4      P                  R. 4      pV F?  pVP                  R/ 4      P                  R4      pV'       g   K.  VP                  V4       KA  	  V# )zF
Fetch all available variants defined in the Contract Server response
r(   Ú	overridesÚselectorÚvariant)ÚsetÚ_base_entitlement_cfgrd   Úadd)r5   Úvalid_variantsrc   r˜   Úoverriderš   s   &     r.   Ú_get_contract_variantsÚ$UAEntitlement._get_contract_variants½   sx   € ô ›ˆØ×4Ñ4Ó6ˆà#×'Ñ'¨°rÓ:×>Ñ>¸{ÈBÓOˆ	Û!ˆHØ—l‘l :¨rÓ2×6Ñ6°yÓAˆGß‰wØ×"Ñ" 7Ö+ñ "ð
 Ðr1   c                óD   <€ V ^8„  d   QhRS[ S[S[R,          3,          /# r‘   r’   )r,   r-   s   "€r.   r/   rF   Ì   s&   ø€ ÷ Añ A¡T©#©t°OÕ/DÐ*DÕ%Eñ Ar1   c                óÜ   € V P                  4       pV P                  4       pR V9   d   R VR ,          /pM/ p\        V4       F  pWA9   g   K  W,          W4&   K  	  \        V4      ^8”  d   V# / # )Úgeneric)r”   r    ÚsortedÚlen)r5   Úservice_variantsÚcontract_variantsrž   rš   s   &    r.   Ú_get_valid_variantsÚ!UAEntitlement._get_valid_variantsÌ   sx   € Ø×-Ñ-Ó/ÐØ ×7Ñ7Ó9ÐàÐ(Ô(Ø'Ð)9¸)Õ)DÐE‰NàˆNäÐ/Ö0ˆGØÖ*Ø*:Õ*C�Ó'ñ 1ô "% ^Ó!4°qÔ!8ˆ~Ð@¸bÐ@r1   c                óD   <€ V ^8„  d   QhRS[ S[S[R,          3,          /# r‘   r’   )r,   r-   s   "€r.   r/   rF   Ü   s#   ø€ ÷ *ñ *™$™s¡D¨Õ$9Ð9Õ:ñ *r1   c                óJ   € V P                   '       d   / # V P                  4       # )zN
Return a list of services that are considered a variant
of the main service.
)r`   r©   rI   s   &r.   rq   ÚUAEntitlement.variantsÛ   s!   € ð �?�?ˆ?ØˆIØ×'Ñ'Ó)Ð)r1   c                óD   <€ V ^8„  d   QhRS[ S[S[R,          3,          /# r‘   r’   )r,   r-   s   "€r.   r/   rF   æ   s#   ø€ ÷ 
ñ 
¡¡S©$¨Õ*?Ð%?Õ @ñ 
r1   c                ó¾   € V P                   '       g   / # V P                  4       P                  4        UUu/ uF  w  rWP                  8w  g   K  WbK  	  upp# u uppi )z_
On a variant, return the other variants of the main service.
On a non-variant, returns empty.
)r`   r©   rr   rJ   )r5   rN   Úclss   &  r.   Úother_variantsÚUAEntitlement.other_variantså   s]   € ð ��ˆØˆIð "×5Ñ5Ó7×=Ñ=Ô?ô
á?‘	�Ø×(Ñ(Ñ(ô ˆDŠIÙ?ò
ð 	
ùó 
s   ¶AÁAc                ó.   <€ V ^8„  d   QhRS[ R,          /# r‘   )r   )r,   r-   s   "€r.   r/   rF   ô   s   ø€ ÷ ñ ¡¨/Õ!:ñ r1   c                ó  € V P                   P                  4        Fj  pVP                  R8X  d   K  V! V P                  V P                  V P
                  R7      pVP                  4       w  r4V\        P                  8X  g   Kh  Vu # 	  R# )zŠ
On an enabled service class, return the variant that is enabled.
Return None if no variants exist or none are enabled (e.g. access-only)
r¤   )ÚcfgÚcalled_nameÚaccess_onlyN)	rq   ÚvaluesrJ   rµ   Ú_called_namer·   Úapplication_statusr   ÚENABLED)r5   ru   rš   ÚstatusÚ_s   &    r.   Úenabled_variantÚUAEntitlement.enabled_variantó   sz   € ð  Ÿ=™=×/Ñ/Ö1ˆKØ×'Ñ'¨9Ô4ÙÙ!Ø—H‘HØ ×-Ñ-Ø ×,Ñ,ôˆGð
  ×2Ñ2Ó4‰IˆFØÔ*×2Ñ2Ö2Ø’ñ 2ñ r1   c                ó    <€ V ^8„  d   QhRS[ /# rB   ©rh   )r,   r-   s   "€r.   r/   rF     s   ø€ ÷ ñ ¡Tñ r1   c                ó   € R# )z\
Only implemented on variant classes.
Returns True if this variant should be auto-selected.
FrH   rI   s   &r.   Úvariant_auto_selectÚ!UAEntitlement.variant_auto_select  s   € ñ
 r1   c                ón   € \        V P                  P                  4       4      pV'       d
   V^ ,          # R# )z’
Cannot actually set the return type because
https://github.com/python/typing/issues/266
affects xenial.

:rtype: Optional[Type["UAEntitlement"]]
N)Úlistrq   r¸   )r5   rq   s   & r.   Údefault_variantÚUAEntitlement.default_variant  s+   € ô ˜Ÿ™×,Ñ,Ó.Ó/ˆßØ˜A•;ÐÙr1   c                ó    <€ V ^8„  d   QhRS[ /# rB   )r"   )r,   r-   s   "€r.   r/   rF     s   ø€ ÷ ñ Ñ2ñ r1   c                ó   € / # r3   rH   rI   s   &r.   Ú	messagingÚUAEntitlement.messaging  r   r1   Nc                ó€   <€ V ^8„  d   QhRS[ S[P                  ,          RS[RS[RS[RS[ S[S[,          ,          RR/# )r'   rµ   r¶   r·   ÚpurgeÚ
extra_argsrC   N)r   r   ÚUAConfigrE   rh   r   )r,   r-   s   "€r.   r/   rF   !  sY   ø€ ÷ .ñ .á‘f—o‘oÕ&ð.ñ ð.ñ ð	.ñ
 ð.ñ ™T¡#�YÕ'ð.ð 
ñ.r1   c                óÖ   € V'       g   \         P                  ! 4       pWn        \        P                  ! 4       V n        W0n        W@n        Ve   WPn        M. V n        W n	        RV n
        R# )zMSetup UAEntitlement instance

@param config: Parsed configuration dictionary
NF)r   rÐ   rµ   r    Úget_machine_token_filera   r·   rÎ   rÏ   r¹   Ú_is_sources_list_updated)r5   rµ   r¶   r·   rÎ   rÏ   s   &&&&&&r.   r6   ÚUAEntitlement.__init__!  sT   € ÷ Ü—/’/Ó#ˆCØŒÜ"/×"FÒ"FÓ"HˆÔØ&ÔØŒ
ØÒ!Ø(�Oà ˆDŒOØ'ÔØ(-ˆÖ%r1   c                ó’   € \         P                  ! V P                  P                  4       P	                  V P
                  / 4      4      # r3   )ÚcopyÚdeepcopyra   Úentitlementsrd   rN   rI   s   &r.   rœ   Ú#UAEntitlement._base_entitlement_cfg:  s6   € Ü�}Š}Ø×#Ñ#×0Ñ0Ó2×6Ñ6°t·y±yÀ"ÓEó
ð 	
r1   c                ó    € V P                  4       pV P                  '       d	   V'       g   V# \        P                  ! WP                  R 7       V# ))Úorig_accessrš   )rœ   r`   r   Úapply_contract_overridesrJ   ©r5   rc   s   & r.   rc   ÚUAEntitlement.entitlement_cfg?  s@   € à×4Ñ4Ó6ˆà��ˆ§oØ"Ð"ä×)Ò)Ø'×1BÑ1Bõ	
ð Ðr1   c                ó    <€ V ^8„  d   QhRS[ /# rB   ©Úint)r,   r-   s   "€r.   r/   rF   M  s   ø€ ÷ ñ ™cñ r1   c                ó   € R# )z‰
The number of steps that are reported as progress while enabling
this specific entitlement that are not shared with other entitlements.
NrH   rI   s   &r.   Úenable_stepsÚUAEntitlement.enable_stepsL  ó   € ñ 	r1   c                ó    <€ V ^8„  d   QhRS[ /# rB   rà   )r,   r-   s   "€r.   r/   rF   U  s   ø€ ÷ ñ ™sñ r1   c                ó   € R# )zŠ
The number of steps that are reported as progress while disabling
this specific entitlement that are not shared with other entitlements.
NrH   rI   s   &r.   Údisable_stepsÚUAEntitlement.disable_stepsT  rå   r1   c                ó    <€ V ^8„  d   QhRS[ /# rB   rà   )r,   r-   s   "€r.   r/   rF   \  s   ø€ ÷ ñ ©cñ r1   c                óž  € V P                  4       pV P                  P                  R / 4      P                  R/ 4      P                  R4      pVe   \        V4      ^ 8”  d
   V^,          pV P                  P                  R / 4      P                  R/ 4      P                  R4      pVe   \        V4      ^ 8”  d
   V^,          pV P	                  4        F2  pWP                  V P                  4      P                  4       ,          pK4  	  V P                  4        F2  pWP                  V P                  4      P                  4       ,          pK4  	  V# )r(   Ú
directivesÚrequiredSnapsÚrequiredPackages)	rã   rc   rd   r¦   Úblocking_incompatible_servicesr(   rµ   rè   Úblocking_required_services)r5   Útotal_stepsÚrequired_snapsÚrequired_packagesÚincompatible_serviceÚrequired_services   &     r.   Úcalculate_total_enable_stepsÚ*UAEntitlement.calculate_total_enable_steps\  s*  € Ø×'Ñ'Ó)ˆà× Ñ ×$Ñ$ ]°BÓ7ß‰S�˜rÓ"ß‰S�Ó!ð 	ð
 Ò%¬#¨nÓ*=ÀÔ*AØ˜1ÕˆKà× Ñ ×$Ñ$ ]°BÓ7ß‰S�˜rÓ"ß‰SÐ#Ó$ð 	ð
 Ò(¬SÐ1BÓ-CÀaÔ-GØ˜1ÕˆKØ$(×$GÑ$GÖ$IÐ Ø×;Ñ;Ø—‘óç‰m‹oõŠKñ %Jð !%× ?Ñ ?Ö AÐØ×7Ñ7Ø—‘óç‰l‹nõŠKñ !Bð Ðr1   c                ó    <€ V ^8„  d   QhRS[ /# rB   rà   )r,   r-   s   "€r.   r/   rF   v  s   ø€ ÷ ñ ©sñ r1   c                ó    € V P                  4       pV P                  4        F)  pW! V P                  4      P                  4       ,          pK+  	  V# r3   )rè   Úblocking_dependent_servicesrµ   )r5   rñ   Údependent_services   &  r.   Úcalculate_total_disable_stepsÚ+UAEntitlement.calculate_total_disable_stepsv  sH   € Ø×(Ñ(Ó*ˆØ!%×!AÑ!AÖ!CÐØÐ,¨T¯X©XÓ6×DÑDÓFÕFŠKñ "DàÐr1   c                óF   <€ V ^8„  d   QhRS[ S[S[S[,          3,          /# rB   )r	   rh   r   r   )r,   r-   s   "€r.   r/   rF   |  s'   ø€ ÷ Fñ F™E¡$©Ñ1AÕ(BÐ"BÕCñ Fr1   c                ó¾  € V P                  4       '       dA   \        P                  RV P                  4       \        P
                  ! V P                  4       V P                  4       \        P                  8X  gF   R\        \        P                  \        P                  P                  V P                   R7      R7      3# V P#                  4       w  rV\$        P&                  8w  dF   R\        \        P(                  \        P(                  P                  V P                   R7      R7      3# V P+                  4       w  r4V\,        P.                  8X  d   R\        \        P.                  VR7      3# V P0                  '       d2   V P3                  4       '       d   R\        \        P4                  4      3# V P6                  '       d2   V P9                  4       '       g   R\        \        P:                  4      3# V P<                  '       gW   V P>                  '       dE   R\        \        P@                  \        PB                  P                  V P                   R7      4      3# R# )z˜
Report whether or not enabling is possible for the entitlement.

:return:
    (True, None) if can enable
    (False, CanEnableFailure) if can't enable
z(Updating contract on service '%s' expiryF©rU   ©Úmessagerj   )"Úis_access_expiredÚLOGÚdebugrN   r   Úrefreshrµ   Úcontract_statusr   ÚENTITLEDr   r   ÚNOT_ENTITLEDr   Ú
UNENTITLEDr,   rU   rº   r   ÚDISABLEDÚALREADY_ENABLEDÚapplicability_statusr   ÚINAPPLICABLEr„   Údetect_incompatible_servicesÚINCOMPATIBLE_SERVICEr‰   Úcheck_required_services_activeÚINACTIVE_REQUIRED_SERVICESÚsupports_access_onlyr·   ÚACCESS_ONLY_NOT_SUPPORTEDÚ ENABLE_ACCESS_ONLY_NOT_SUPPORTED)r5   rº   r½   r  Údetailss   &    r.   Ú
can_enableÚUAEntitlement.can_enable|  sý  € ð ×!Ñ!×#Ò#Ü�I‰IÐ@À$Ç)Á)ÔLÜ×Ò˜TŸX™XÔ&à×#Ñ#Ó%¬×)@Ñ)@Ô@àÜ Ü*×7Ñ7Ü$×/Ñ/×6Ñ6¸T¿Z¹ZÐ6ÓHôðð ð !%× 7Ñ 7Ó 9ÑÐØÔ!2×!;Ñ!;Ô;àÜ Ü*×:Ñ:Ü$×4Ñ4×;Ñ;À$Ç*Á*Ð;ÓMôðð ð )-×(AÑ(AÓ(CÑ%ÐØÔ#6×#CÑ#CÔCàÜ Ü*×7Ñ7Àôðð ð ×%×%Ð%Ø×0Ñ0×2Ò2àÜ$Ü.×CÑCóðð ð ×!×!Ð!Ø×6Ñ6×8Ò8àÜ$Ü.×IÑIóðð ð ×(×(Ð(¨T×-=×-=Ð-=àÜ Ü*×DÑDÜ×=Ñ=×DÑDØ"Ÿj™jð Eó óðð ð Ðr1   c                ód   <€ V ^8„  d   QhRS[ P                  RS[S[S[RS[3,          3,          /# )r'   ÚprogressrC   N)r   ÚProgressWrapperr	   rh   r   r   )r,   r-   s   "€r.   r/   rF   Æ  s:   ø€ ÷ ;ñ ;á×%Ñ%ð;ñ 
‰t‘U˜4Ñ!1Ð1Õ2Ð2Õ	3ñ;r1   c                óÌ  € VP                  RV P                  P                  R4      4       V P                  4       w  r#V'       g•   Vf   R# VP                  \
        P                  8X  d'   V P                  V4      w  rEV'       g   WSn        RV3# MIVP                  \
        P                  8X  d'   V P                  V4      w  reV'       g   WSn        RV3# MRV3# VP                  RV P                  P                  R4      4       V P                  '       g3   V P                  V4      '       g   R# V P                  V4      '       g   R# V P                  V4      pV'       g   R# R# )a  Enable specific entitlement.

@return: tuple of (success, optional reason)
    (True, None) on success.
    (False, reason) otherwise. reason is only non-None if it is a
        populated CanEnableFailure reason. This may expand to
        include other types of reasons in the future.
Úmessage_operationÚpre_can_enableFÚ
pre_enable©FNrj   )ÚemitrË   rd   r  Úreasonr   r  Úhandle_incompatible_servicesr  r  Ú_enable_required_servicesr·   Úhandle_required_snapsÚhandle_required_packagesÚ_perform_enable)r5   r  r  ÚfailÚincompat_retÚerrorÚreq_retÚrets   &&      r.   ÚenableÚUAEntitlement.enableÆ  sN  € ð 	�‰Ø §¡×!3Ñ!3Ð4DÓ!Eô	
ð  Ÿ?™?Ó,Ñˆ
ßØŠ|à"Ð"Ø—‘Ô 6× KÑ KÔKà&*×&GÑ&GØó'Ñ#�÷ $Ø#(”LØ  $˜;Ð&ð $ð —‘Ü)×DÑDôEð "&×!?Ñ!?ÀÓ!I‘�ßØ#(”LØ  $˜;Ð&ð ð
 ˜d�{Ð"à�‰Ð)¨4¯>©>×+=Ñ+=¸lÓ+KÔLð ××ÐØ×-Ñ-¨h×7Ò7Ø"Ð"Ø×0Ñ0°×:Ò:Ø"Ð"à×"Ñ" 8Ó,ˆßØÐàÐr1   c                ó:   <€ V ^8„  d   QhRS[ P                  RS[/# ©r'   r  rC   ©r   r  rh   )r,   r-   s   "€r.   r/   rF     s%   ø€ ÷ Uñ U©c×.AÑ.Að UÁdñ Ur1   c           	     ó  € V P                   P                  R/ 4      P                  R/ 4      P                  R4      pVf   R# \        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       V'       d    VP;                  \
        P<                  4       \?        VR R7       F#  pVR,          p \        P@                  ! V4       K%  	  R#   \        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  \        PB                   dr    TP                  RR4      pTP                  R4      p	TP	                  R\
        PD                  P                  TR7      4       \        P                  ! TT	TR7        EK…  i ; i)z-"install snaps necessary to enable a service.r(   rì   rí   NTÚinfoÚsnapd©Úpackagesz
snapd snapz!Failed to install snapd as a snap)Úexc_infozsnap install snapd)ÚcommandzFailed to refresh snapd snapzsnap refresh snapdr   Úhttps)Ú
http_proxyÚhttps_proxyÚretry_sleepsc                 ó$   € V P                  R 4      # ©rN   )rd   )Úxs   &r.   Ú<lambda>Ú5UAEntitlement.handle_required_snaps.<locals>.<lambda>A  s   € ¸Q¿U¹UÀ6¼]r1   )ÚkeyrN   ÚclassicConfinementSupportFÚchannel)r   )rD  Úclassic_confinement_support)#rc   rd   r   Úis_snapd_installedr!  r   ÚINSTALLING_PACKAGESr,   Úinstall_snapdÚis_snapd_installed_as_a_snapÚinstall_snapr   ÚProcessExecutionErrorr  ÚwarningÚEXECUTING_COMMAND_FAILEDÚrun_snapd_wait_cmdÚrefresh_snapÚeventr3  r   Úvalidate_proxyrµ   r:  ÚPROXY_VALIDATION_SNAP_HTTP_URLr;  ÚPROXY_VALIDATION_SNAP_HTTPS_URLÚconfigure_snap_proxyÚSNAP_INSTALL_RETRIESr  ÚINSTALLING_REQUIRED_SNAPSr¥   Úget_snap_infoÚSnapNotInstalledErrorÚ INSTALLING_REQUIRED_SNAP_PACKAGE)
r5   r  rò   Úer:  r;  Úsnap_pkgÚ	snap_namerE  rD  s
   &&        r.   r%  Ú#UAEntitlement.handle_required_snaps  sß  € ð × Ñ ×$Ñ$ ]°BÓ7ß‰S�˜rÓ"ß‰S�Ó!ð 	ð Ò!Ùä×&Ò&×(Ò(Ø�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õ	
÷ Ø×Ñœh×@Ñ@ÔAä˜~Ñ3J×KˆHà  Õ(ˆIðÜ×"Ò" 9Ö-ñ	 Lñ. øôw ×3Ñ3ô Ü—‘Ð?È!�ÔLØ—‘ØÜ×5Ñ5×<Ñ<Ø 4ð =ó ÷ò ûðûô ×/Ñ/ô 	Ü�K‰KÐ6ÀˆKÔCÜ�J‰JÜ×1Ñ1×8Ñ8Ø0ð 9ó ÷ò ûð	ûô8 ×3Ñ3ô Ø.6¯l©lØ/°ó/Ð+ð #Ÿ,™, yÓ1�à—‘ØÜ×=Ñ=×DÑDØ&ð Eó ôô ×!Ò!ØØ#Ø0K÷ñ ðúsE   Ã.H* ÄJ ÈLÈ*JÈ?AJÊJÊK>Ê)A
K9Ë9K>ÌBNÎNc                ó    <€ V ^8„  d   QhRS[ /# rB   rÁ   )r,   r-   s   "€r.   r/   rF   Z  s   ø€ ÷ 
ñ 
±ñ 
r1   c                ó2  € V P                   P                  R/ 4      P                  R/ 4      P                  R4      pV'       g   R# V Uu. uF  q"R,          NK  	  pp\        P                  ! 4       p\	        V Uu. uF  qUV9   NK	  	  up4      # u upi u upi )ú/install packages necessary to enable a service.r(   rì   rî   TrN   )rc   rd   r   Úget_installed_packages_namesÚall)r5   ró   ÚpackageÚpackage_namesÚinstalled_packagesÚrequireds   &     r.   Úare_required_packages_installedÚ-UAEntitlement.are_required_packages_installedZ  s–   € ð × Ñ ×$Ñ$ ]°BÓ7ß‰S�˜rÓ"ß‰SÐ#Ó$ð 	÷ !Ùá8IÓJÑ8I¨W Ÿ˜Ñ8IˆÐJÜ ×=Ò=Ó?ÐäÙ<IÓJ¹M°Ð+Ô+¹MÑJó
ð 	
ùò Kùò Ks   Á
BÁ;Bc                ó:   <€ V ^8„  d   QhRS[ P                  RS[/# r0  r1  )r,   r-   s   "€r.   r/   rF   n  s!   ø€ ÷ ñ ±×1DÑ1Dð Éñ r1   c                ó¾  € V P                   P                  R/ 4      P                  R/ 4      P                  R4      pV'       g   R# V P                  V4       V Uu. uF  q3R,          NK  	  pp\        P	                  RV4       VP                  \        P                  P                  RP                  V4      R7      4       \        P                  ! V4       R# u upi )	r`  r(   rì   rî   TrN   zInstalling packages %rÚ r5  )rc   rd   Ú_update_sources_listr  r  r  r   rG  r,   rs   r   Úrun_apt_install_command)r5   r  ró   rc  rd  s   &&   r.   r&  Ú&UAEntitlement.handle_required_packagesn  sÁ   € ð × Ñ ×$Ñ$ ]°BÓ7ß‰S�˜rÓ"ß‰SÐ#Ó$ð 	÷ !Ùà×!Ñ! (Ô+á8IÓJÑ8I¨W Ÿ˜Ñ8IˆÐJÜ�	‰	Ð*¨MÔ:Ø×ÑÜ×(Ñ(×/Ñ/ØŸ™ -Ó0ð 0ó ô	
ô
 	×#Ò# MÔ2áùò Ks   ÁCc                ó    <€ V ^8„  d   QhRS[ /# rB   rÁ   )r,   r-   s   "€r.   r/   rF   ˆ  s   ø€ ÷ #ñ #±4ñ #r1   c                ó@  € V P                   P                  R/ 4      P                  R/ 4      P                  R4      pV'       g   R# V Uu. uF&  pVP                  RR4      '       g   K  VR,          NK(  	  pp\        V4      ^ 8X  d   R# \        P	                  RV4       R	P                  V4      p\        P                  \        P                  P                  VR
7      4       \        P                  ! V\        P                  P                  VR
7      4       R# u upi )r`  r(   rì   rî   TÚremoveOnDisableFrN   zUninstalling packages %rrk  r5  )rc   rd   r¦   r  r  rs   rP  r3  r   ÚUNINSTALLING_PACKAGESr,   r   Úremove_packagesÚUNINSTALLING_PACKAGES_FAILED)r5   ró   rc  rd  Úpackage_names_strs   &    r.   Ú!handle_removing_required_packagesÚ/UAEntitlement.handle_removing_required_packagesˆ  s  € ð × Ñ ×$Ñ$ ]°BÓ7ß‰S�˜rÓ"ß‰SÐ#Ó$ð 	÷ !Ùñ -ó
á,�Ø�{‰{Ð,¨e×4ô ˆG�F�OˆOÙ,ð 	ð 
ô ˆ}Ó Ô"Ùä�	‰	Ð,¨mÔ<ØŸH™H ]Ó3ÐÜ�
‰
Ü×*Ñ*×1Ñ1Ð;LÐ1ÓMô	
ô 	×ÒØÜ×1Ñ1×8Ñ8Ø*ð 9ó ô	
ñ ùò-
s   Á
DÁ)Dc                ó:   <€ V ^8„  d   QhRS[ P                  RS[/# r0  r1  )r,   r-   s   "€r.   r/   rF   ®  s!   ø€ ÷ ñ ©×(;Ñ(;ð Áñ r1   c                ó   € R# )zé
Enable specific entitlement. This should be implemented by subclasses.
This method does the actual enablement, and does not check can_enable
or handle pre_enable or post_enable messaging.

@return: True on success, False otherwise.
NrH   ©r5   r  s   &&r.   r'  ÚUAEntitlement._perform_enable­  s   € ñ 	r1   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# rB   )r   r%   )r,   r-   s   "€r.   r/   rF   ¸  s   ø€ ÷ ñ ±Ñ5KÕ0Lñ r1   c                óø   € . pV P                    Fg  pVP                  V P                  R7      P                  4       w  r4V\        P
                  \        P                  39   g   KV  VP                  V4       Ki  	  V# )z9
:return: List of incompatible services that are enabled
©rµ   )r„   r(   rµ   rº   r   r»   ÚWARNINGrP   ©r5   r,  ÚserviceÚ
ent_statusr½   s   &    r.   rï   Ú,UAEntitlement.blocking_incompatible_services¸  sy   € ð ˆØ×1Ô1ˆGØ#×/Ñ/Ø—H‘Hð 0ó ç Ñ Ó"ñ ˆJð Ü!×)Ñ)Ü!×)Ñ)ðö ð —
‘
˜7Ö#ñ 2ð ˆ
r1   c                ó    <€ V ^8„  d   QhRS[ /# rB   rÁ   )r,   r-   s   "€r.   r/   rF   É  s   ø€ ÷ >ñ >©dñ >r1   c                ó:   € \        V P                  4       4      ^ 8„  # )z˜
Check for incompatible services.

:return:
    True if there are incompatible services enabled
    False if there are no incompatible services enabled
)r¦   rï   rI   s   &r.   r  Ú*UAEntitlement.detect_incompatible_servicesÉ  s   € ô �4×6Ñ6Ó8Ó9¸AÑ=Ð=r1   c                ót   <€ V ^8„  d   QhRS[ P                  RS[S[S[S[P                  ,          3,          /# r0  ©r   r  r	   rh   r   r   r+   )r,   r-   s   "€r.   r/   rF   Ó  s:   ø€ ÷ ,ñ ,á×%Ñ%ð,ñ 
‰t‘X™h×3Ñ3Õ4Ð4Õ	5ñ,r1   c                ó*  € \         P                  ! V P                  P                  RR7      pV P                  4        FÒ  pVP	                  V P                  4      p\
        P                  P                  V P                  VP                  R7      pV'       d   RV3u # VP                  R\
        P                  P                  VP                  R7      4       VP                  V4      w  rgV'       d   K¸  Yg'       d   VP                  3u # R3u # 	  R# )	aÙ  
Prompt user when incompatible services are found during enable.

When enabling a service, we may find that there is an incompatible
service already enable. In that situation, we can ask the user
if the incompatible service should be disabled before proceeding.
There are also different ways to configure that behavior:

We can disable removing incompatible service during enable by
adding the following lines into uaclient.conf:

features:
  block_disable_on_enable: true
z features.block_disable_on_enable)r   Úpath_to_value)Úservice_being_enabledrô   Fr3  ©r�  Nrj   )r   Úis_config_value_truerµ   rï   r(   r   Ú#E_INCOMPATIBLE_SERVICE_STOPS_ENABLEr,   rU   r!  ÚDISABLING_INCOMPATIBLE_SERVICEÚdisabler  )r5   r  Úcfg_block_disable_on_enabler�  ÚentÚe_msgr,  r(  s   &&      r.   r#  Ú*UAEntitlement.handle_incompatible_servicesÓ  sì   € ô$ '+×&?Ò&?Ø—8‘8—<‘<Ø<ô'
Ð#ð ×:Ñ:Ö<ˆGØ×%Ñ% d§h¡hÓ/ˆCä×@Ñ@×GÑGØ&*§j¡jØ%(§Y¡Yð Hó ˆE÷
 +Ø˜e�|Ò#à�M‰MØÜ×7Ñ7×>Ñ>ØŸI™Ið ?ó ôð Ÿ™ HÓ-‰IˆCß‘3Ø®T˜TŸ\™\Ð<Ò<°tÐ<Ò<ñ) =ð, Ðr1   c                ó:   € \        V P                  4       4      ^ 8H  # )z¡
Check if all required services are active

:return:
    True if all required services are active
    False is at least one of the required services is disabled
)r¦   rð   rI   s   &r.   r  Ú,UAEntitlement.check_required_services_active  s   € ô �4×2Ñ2Ó4Ó5¸Ñ:Ð:r1   c                óö   € . pV P                    Ff  pVP                  V P                  4      P                  4       w  r4V\        P
                  \        P                  39  g   KU  VP                  V4       Kh  	  V# )z6
:return: List of required services that are disabled
)r‰   r(   rµ   rº   r   r»   r  rP   r€  s   &    r.   rð   Ú(UAEntitlement.blocking_required_services  sl   € ð ˆØ×-Ô-ˆGØ#×/Ñ/°·±Ó9×LÑLÓN‰MˆJØÜ!×)Ñ)Ü!×)Ñ)ð"ö ð —
‘
˜7Ö#ñ .ð ˆ
r1   c                ót   <€ V ^8„  d   QhRS[ P                  RS[S[S[S[P                  ,          3,          /# r0  rˆ  )r,   r-   s   "€r.   r/   rF     s:   ø€ ÷ ñ á×%Ñ%ðñ 
‰t‘X™h×3Ñ3Õ4Ð4Õ	5ñr1   c                ó  € V P                  4        Fø  pVP                  V P                  R7      pVP                  R\        P
                  P                  VP                  R7      4       VP                  V4      w  rEV'       d   Kv  RpV'       dL   VP                  '       d:   VP                  P                  '       d   RVP                  P                  ,           p\        P                  P                  WcP                  R7      pWG3u # 	  R# )a  
Prompt user when required services are found during enable.

When enabling a service, we may find that there are required services
that must be enabled first. In that situation, we can ask the user
if the required service should be enabled before proceeding.
r~  r3  rŒ  r@   ro   )r*  r�  rj   )rð   r(   rµ   r!  r   ÚENABLING_REQUIRED_SERVICEr,   rU   r-  r  ÚmsgÚERROR_ENABLING_REQUIRED_SERVICE)r5   r  rõ   r’  r,  r(  Ú	error_msgrœ  s   &&      r.   r$  Ú'UAEntitlement._enable_required_services  sß   € ð !%× ?Ñ ?Ö AÐØ"×.Ñ.Ø—H‘Hð /ó ˆCð �M‰MØÜ×2Ñ2×9Ñ9À#Ç)Á)Ð9ÓLôð Ÿ
™
 8Ó,‰IˆCß‘3Ø�	ß˜DŸLŸL˜L¨T¯\©\×-=×-=Ð-=Ø $ t§|¡|×'7Ñ'7Õ 7�Iä×>Ñ>×EÑEØ#¯Y©Yð Fó �ð �x’ñ# !Bð& Ðr1   c                óL   <€ V ^8„  d   QhRS[ RS[S[ S[S[,          3,          /# )r'   Úignore_dependent_servicesrC   )rh   r	   r   r   )r,   r-   s   "€r.   r/   rF   9  s-   ø€ ÷ =ñ =Ù)-ð=á	‰t‘XÑ/Õ0Ð0Õ	1ñ=r1   c                ó@  € V P                  4       w  r#V\        P                  8X  dF   R\        \        P
                  \        P
                  P                  V P                  R7      R7      3# V P                  4       w  rCV P                  '       d   V\        P                  8X  dF   R\        \        P                  \        P                  P                  V P                  R7      R7      3# V P                  '       d:   V'       g2   V P!                  4       '       d   R\        \        P"                  4      3# V P$                  '       gW   V P&                  '       dE   R\        \        P(                  \        P*                  P                  V P                  R7      4      3# R# )z›Report whether or not disabling is possible for the entitlement.

:return:
    (True, None) if can disable
    (False, CanDisableFailure) if can't disable
Fr   r  rj   )rº   r   r  r   r   ÚALREADY_DISABLEDr   r,   rU   r  rc   r   r  ÚNOT_APPLICABLEÚCANNOT_DISABLE_NOT_APPLICABLErŽ   Údetect_dependent_servicesÚACTIVE_DEPENDENT_SERVICESÚsupports_purgerÎ   ÚPURGE_NOT_SUPPORTEDÚDISABLE_PURGE_NOT_SUPPORTED)r5   r¡  rº   r½   r  s   &&   r.   Úcan_disableÚUAEntitlement.can_disable9  sk  € ð !%× 7Ñ 7Ó 9ÑÐàÔ!2×!;Ñ!;Ô;àÜ!Ü+×<Ñ<Ü$×5Ñ5×<Ñ<À4Ç:Á:Ð<ÓNôðð ð #'×";Ñ";Ó"=ÑÐð ×$×$Ð$Ø#Ô':×'GÑ'GÔGð Ü!Ü+×:Ñ:Ü$×BÑB×IÑIØ"Ÿj™jð Jó ôðð ð ×"×"Ð"×+DØ×-Ñ-×/Ò/àÜ%Ü/×IÑIóðð ð ×"×"Ð" t§z§z zàÜ!Ü+×?Ñ?Ü×8Ñ8×?Ñ?Ø"Ÿj™jð @ó óðð ð Ðr1   c                ó`   <€ V ^8„  d   QhRS[ P                  RS[S[S[S[,          3,          /# r0  )r   r  r	   rh   r   r   )r,   r-   s   "€r.   r/   rF   x  s3   ø€ ÷ (ñ (Ù×+Ñ+ð(á	‰t‘XÑ/Õ0Ð0Õ	1ñ(r1   c                óæ  € VP                  RV P                  P                  R4      4       V P                  4       w  r#V'       gP   Vf   R# VP                  \
        P                  8X  d'   V P                  V4      w  rEV'       g   WSn        RV3# MRV3# V P                  V4      '       g   R# V P                  4       '       g   R# VP                  RV P                  P                  R4      4       R# )aa  Disable specific entitlement

@param silent: Boolean set True to silence print/log of messages

@return: tuple of (success, optional reason)
    (True, None) on success.
    (False, reason) otherwise. reason is only non-None if it is a
        populated CanDisableFailure reason. This may expand to
        include other types of reasons in the future.
r  Úpre_disableFÚpost_disabler   rj   )r!  rË   rd   r«  r"  r   r§  Ú_disable_dependent_servicesr  Ú_perform_disablerv  )r5   r  r«  r(  r,  rœ  s   &&    r.   r�  ÚUAEntitlement.disablex  sÞ   € ð 	�‰Ð)¨4¯>©>×+=Ñ+=¸mÓ+LÔMà ×,Ñ,Ó.ÑˆßØŠ|à"Ð"à—‘Ü*×DÑDôEð  ×;Ñ;¸HÓE‘�ßØ#&”LØ  $˜;Ð&ð ð
 ˜d�{Ð"à×$Ñ$ X×.Ò.ØÐà×5Ñ5×7Ò7ØÐà�‰Ð)¨4¯>©>×+=Ñ+=¸nÓ+MÔNàÐr1   c                ó:   <€ V ^8„  d   QhRS[ P                  RS[/# r0  r1  )r,   r-   s   "€r.   r/   rF   £  s!   ø€ ÷ 
ñ 
©×)<Ñ)<ð 
Áñ 
r1   c                ó   € R# )a,  
Disable specific entitlement. This should be implemented by subclasses.
This method does the actual disable, and does not check can_disable
or handle pre_disable or post_disable messaging.

@param silent: Boolean set True to silence print/log of messages

@return: True on success, False otherwise.
NrH   rz  s   &&r.   r²  ÚUAEntitlement._perform_disable¢  s   € ñ 	r1   c                ó    <€ V ^8„  d   QhRS[ /# rB   rÁ   )r,   r-   s   "€r.   r/   rF   ¯  s   ø€ ÷ ;ñ ;©4ñ ;r1   c                ó:   € \        V P                  4       4      ^ 8„  # )zŽ
Check for depedent services.

:return:
    True if there are dependent services enabled
    False if there are no dependent services enabled
)r¦   rú   rI   s   &r.   r¦  Ú'UAEntitlement.detect_dependent_services¯  s   € ô �4×3Ñ3Ó5Ó6¸Ñ:Ð:r1   c                ó>   <€ V ^8„  d   QhRS[ S[R,          ,          /# r‘   )r   r
   )r,   r-   s   "€r.   r/   rF   ¹  s   ø€ ÷ ñ ©T±$°Õ2GÕ-Hñ r1   c                óÄ   € . pV P                    FM  pV! V P                  4      P                  4       w  r4V\        P                  8X  g   K<  VP                  V4       KO  	  V# )zW
Return list of depedent services that must be disabled
before disabling this service.
)rŽ   rµ   rº   r   r»   rP   )r5   ÚblockingÚdependent_service_clsr‚  r½   s   &    r.   rú   Ú)UAEntitlement.blocking_dependent_services¹  s^   € ð
 ˆØ%)×%<Ô%<Ð!Ù1Ø—‘óç Ñ Ó"ñ ˆJð Ô.×6Ñ6Ö6Ø—‘Ð 5Ö6ñ &=ð ˆr1   c                ót   <€ V ^8„  d   QhRS[ P                  RS[S[S[S[P                  ,          3,          /# r0  rˆ  )r,   r-   s   "€r.   r/   rF   È  s8   ø€ ÷ #ñ #Ù×+Ñ+ð#á	‰t‘X™h×3Ñ3Õ4Ð4Õ	5ñ#r1   c                ó  € V P                  4        Fð  pV! V P                  R7      pVP                  R\        P                  P                  VP                  R7      4       VP                  V4      w  rEV'       d   Km  RpV'       dL   VP                  '       d:   VP                  P                  '       d   RVP                  P                  ,           p\        P                  P                  WcP                  R7      pRV3u # 	  R# )	a9  
Disable dependent services

When performing a disable operation, we might have
other services that depend on the original services.
If that is true, we will alert the user about this
and prompt for confirmation to disable these services
as well.

@param silent: Boolean set True to silence print/log of messages
r~  r3  )rõ   r@   ro   )r*  rõ   Frj   )rú   rµ   r!  r   ÚDISABLING_DEPENDENT_SERVICEr,   rU   r�  r  rœ  Ú"FAILED_DISABLING_DEPENDENT_SERVICE)r5   r  r½  r’  r,  r(  rž  rœ  s   &&      r.   r±  Ú)UAEntitlement._disable_dependent_servicesÈ  s×   € ð &*×%EÑ%EÖ%GÐ!Ù'¨D¯H©HÔ5ˆCà�M‰MØÜ×4Ñ4×;Ñ;Ø%(§Y¡Yð <ó ôð Ÿ™ HÓ-‰IˆCß‘3Ø�	ß˜DŸLŸL˜L¨T¯\©\×-=×-=Ð-=Ø $ t§|¡|×'7Ñ'7Õ 7�Iä×AÑA×HÑHØ#·i±ið Ió �ð ˜c�zÒ!ñ' &Hð* Ðr1   c                ó    <€ V ^8„  d   QhRS[ /# rB   rÁ   )r,   r-   s   "€r.   r/   rF   í  s   ø€ ÷ ñ ¡4ñ r1   c                ó   € R# )z=Check if system needs to be rebooted because of this service.FrH   rI   s   &r.   Ú_check_for_rebootÚUAEntitlement._check_for_rebootí  s   € ár1   c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# )r'   Ú	operationÚsilentrC   N)rE   rh   )r,   r-   s   "€r.   r/   rF   ñ  s%   ø€ ÷ ñ ÙðÙ&*ðà	ñr1   c                ó°   € V P                  4       '       d@   V'       g6   \        P                  \        P                  P                  VR7      4       R# R# R# )z³Check if user should be alerted that a reboot must be performed.

@param operation: The operation being executed.
@param silent: Boolean set True to silence print/log of messages
)rÉ  N)rÆ  rP  r3  r   ÚENABLE_REBOOT_REQUIRED_TMPLr,   )r5   rÉ  rÊ  s   &&&r.   Ú_check_for_reboot_msgÚ#UAEntitlement._check_for_reboot_msgñ  sE   € ð ×!Ñ!×#Ò#¯FÜ�J‰JÜ×4Ñ4×;Ñ;Ø'ð <ó öñ -3Ñ#r1   c                óZ   <€ V ^8„  d   QhRS[ S[S[S[P                  ,          3,          /# rB   )r	   r   r   r   r+   )r,   r-   s   "€r.   r/   rF      s.   ø€ ÷ g4ñ g4á	Ñ"¡H©X×-BÑ-BÕ$CÐCÕ	Dñg4r1   c                ó  € V P                   pV'       g!   \        P                  \        P                  3# V P
                   F&  w  r#pV! 4       V8w  g   K  \        P                  V3u # 	  VR,          P                  R/ 4      pVP                  RR4      pV P                  '       d“   Ve�   \        P                  ! 4       V9  du   \        P                  ! V4      p\        P                  \        P                  P                  V P                  \        P                  ! 4       RP!                  V4      R7      3# VP                  RR4      pV P"                  '       d�   Ve}   \        P$                  ! 4       P&                  V9  dY   \        P                  \        P(                  P                  V P                  \        P$                  ! 4       P*                  R7      3# \        P,                  ! 4       p	VP                  R	R4      p
VP                  R
R4      pV P.                  '       dk   V
eg   V	P0                  V
9  dV   \        P                  \        P2                  P                  V P                  V	P4                  RP!                  V
4      R7      3# V P6                  '       dÜ   V'       dÔ   V	P8                  eÆ   V	P:                  e¸   \        P<                  P                  V P                  V	P4                  VR7      p VP?                  R4      w  rÞ\A        V4      p\A        V4      pT	P8                  T8  d   \        P                  T3# T	P8                  T8X  d$   T	P:                  T8  d   \        P                  T3# VP                  R/ 4      pV PI                  V4      w  ppV'       g   \        P                  V3# \        P                  R3#   \B         d,    \D        PG                  RT4       \        P                  T3u # i ; i)aˆ  Check all contract affordances to vet current platform

Affordances are a list of support constraints for the entitlement.
Examples include a list of supported series, architectures for kernel
revisions.

:return:
    tuple of (ApplicabilityStatus, NamedMessage). APPLICABLE if
    platform passes all defined affordances, INAPPLICABLE if it doesn't
    meet all of the provided constraints.
r(   r^   ÚarchitecturesNz, )rU   ÚarchÚsupported_archesÚseries)rU   rÔ  ÚkernelFlavorsÚminKernelVersion)rU   ÚkernelÚsupported_kernels)rU   r×  Ú
min_kernelÚ.z$Could not parse minKernelVersion: %sÚplatformChecks)%rc   r   Ú
APPLICABLEr   Ú"NO_ENTITLEMENT_AFFORDANCES_CHECKEDr}   r  rd   Úaffordance_check_archr   Úget_dpkg_archr   Údeduplicate_archesÚINAPPLICABLE_ARCHr,   rU   rs   Úaffordance_check_seriesÚget_release_inforÔ  ÚINAPPLICABLE_SERIESÚpretty_versionÚget_kernel_infoÚaffordance_check_kernel_flavorÚflavorÚINAPPLICABLE_KERNELÚuname_releaseÚ#affordance_check_kernel_min_versionÚmajorÚminorÚINAPPLICABLE_KERNEL_VERÚsplitrá   Ú
ValueErrorr  rL  rk   )r5   rc   Úerror_messageÚfunctorÚexpected_resultr^   Úaffordance_archesÚdeduplicated_archesÚaffordance_seriesÚkernel_infoÚaffordance_kernelsÚaffordance_min_kernelÚinvalid_msgÚkernel_majorÚkernel_minorÚmin_kern_majorÚmin_kern_minorÚaffordances_platform_checkr,  r"  s   &                   r.   r  Ú"UAEntitlement.applicability_status   s…  € ð ×.Ñ.ˆßä#×.Ñ.Ü×;Ñ;ðð ð 8<×7NÔ7NÑ3ˆM OÙ‹y˜OÖ+Ü*×7Ñ7¸ÐFÒFñ 8Oð & mÕ4×8Ñ8¸ÈÓKˆØ'ŸO™O¨O¸TÓBÐà×&×&Ð&Ø!Ò-Ü×$Ò$Ó&Ð.?Ô?ä"&×"9Ò"9Ð:KÓ"LÐä#×0Ñ0Ü×*Ñ*×1Ñ1ØŸ*™*Ü×-Ò-Ó/Ø%)§Y¡YÐ/BÓ%Cð 2ó ðð ð (ŸO™O¨H°dÓ;Ðà×(×(Ð(Ø!Ò-Ü×'Ò'Ó)×0Ñ0Ð8IÔIô $×0Ñ0Ü×,Ñ,×3Ñ3ØŸ*™*Ü!×2Ò2Ó4×CÑCð 4ó ðð ô ×,Ò,Ó.ˆØ(Ÿ_™_¨_¸dÓCÐØ +§¡Ð0BÀDÓ IÐà×/×/Ð/Ø"Ò.à×!Ñ!Ð);Ô;ä'×4Ñ4Ü×0Ñ0×7Ñ7Ø"Ÿj™jØ*×8Ñ8Ø*.¯)©)Ð4FÓ*Gð 8ó ðð ð ×4×4Ð4ß%Ø×!Ñ!Ò-Ø×!Ñ!Ò-ä"×:Ñ:×AÑAØ—j‘jØ"×0Ñ0Ø0ð Bó ˆKð
	GØ-B×-HÑ-HÈÓ-MÑ*�Ü!$ \Ó!2�Ü!$ \Ó!2�ð × Ñ  >Ô1Ü*×7Ñ7¸ÐDÐDà×!Ñ! ^Ô3Ø×%Ñ%¨Ô6ä*×7Ñ7¸ÐDÐDà%0§_¡_Ð5EÀrÓ%JÐ"Ø×1Ñ1Ð2LÓM‰ˆˆVçÜ'×4Ñ4°fÐ=Ð=Ü"×-Ñ-¨tÐ3Ð3øô) ô GÜ—‘Ø:Ø)ôô ,×8Ñ8¸+ÐFÒFðGús   Ì )O Ï3PÐPc                ó    <€ V ^8„  d   QhRS[ /# rB   )r   )r,   r-   s   "€r.   r/   rF   i  s   ø€ ÷ )ñ )¡ñ )r1   c                ó  € \        V P                  4      P                  '       g   \        P                  # V P
                  pV'       d/   VR,          P                  R4      '       d   \        P                  # \        P                  # )z=Return whether the user is entitled to the entitlement or notr(   Úentitled)r   rµ   Úis_attachedr   r
  rc   rd   r  rÝ   s   & r.   r  ÚUAEntitlement.contract_statusi  s^   € ä˜DŸH™HÓ%×1×1Ð1Ü!×,Ñ,Ð,Ø×.Ñ.ˆß˜¨}Õ=×AÑAÀ*×MÒMÜ!×*Ñ*Ð*Ü×(Ñ(Ð(r1   c                óZ   <€ V ^8„  d   QhRS[ S[S[S[P                  ,          3,          /# rB   )r	   r   r   r   r+   )r,   r-   s   "€r.   r/   rF   r  s+   ø€ ÷ 4ñ 4á	Ñ¡©(×*?Ñ*?Õ!@Ð@Õ	Añ4r1   c                óú  € V P                  4       w  rV\        P                  8w  d   \        P                  V3# V P
                  pV'       g;   \        P                  \        P                  P                  V P                  R7      3# VR,          P                  RR4      RJ d;   \        P                  \        P                  P                  V P                  R7      3# V P                  4       w  rEV\        P                  8X  d   \        P                  V3# V\        P                   8X  d   \        P                   V3# V P#                  4       w  rgV'       d   \        P                   V3# \        P$                  V3# )z4Return (user-facing status, details) for entitlementr   r(   r  F)r  r   rÜ  r   r  rc   ÚUNAVAILABLEr   ÚSERVICE_NOT_ENTITLEDr,   rU   rd   rº   r   r  ÚINACTIVEr  Úenabled_warning_statusÚACTIVE)r5   Úapplicabilityr  rc   rº   ÚexplanationrL  Úwarn_msgs   &       r.   Úuser_facing_statusÚ UAEntitlement.user_facing_statusr  sE  € ð "&×!:Ñ!:Ó!<ÑˆØÔ/×:Ñ:Ô:Ü#×0Ñ0°'Ð9Ð9Ø×.Ñ.ˆßä ×,Ñ,Ü×-Ñ-×4Ñ4¸4¿:¹:Ð4ÓFðð ð ˜]Õ+×/Ñ/°
¸EÓBÀeÓKä ×,Ñ,Ü×-Ñ-×4Ñ4¸4¿:¹:Ð4ÓFðð ð
 +/×*AÑ*AÓ*CÑ'ÐàÔ!2×!;Ñ!;Ô;Ü#×,Ñ,¨kÐ9Ð9ØÔ#4×#<Ñ#<Ô<Ü#×+Ñ+¨[Ð8Ð8à ×7Ñ7Ó9ÑˆçÜ#×+Ñ+¨XÐ5Ð5ä×&Ñ&¨Ð3Ð3r1   c                óZ   <€ V ^8„  d   QhRS[ S[S[S[P                  ,          3,          /# rB   )r	   r   r   r   r+   )r,   r-   s   "€r.   r/   rF   ”  s+   ø€ ÷ 	ñ 	á	Ñ ¡(©8×+@Ñ+@Õ"AÐAÕ	Bñ	r1   c                ó   € R# )z{
The current status of application of this entitlement

:return:
    A tuple of (ApplicationStatus, human-friendly reason)
NrH   rI   s   &r.   rº   Ú UAEntitlement.application_status“  s   € ñ 	r1   c                óZ   <€ V ^8„  d   QhRS[ S[S[S[P                  ,          3,          /# rB   )r	   rh   r   r   r+   )r,   r-   s   "€r.   r/   rF   Ÿ  s*   ø€ ÷ 
ñ 
á	‰t‘X™h×3Ñ3Õ4Ð4Õ	5ñ
r1   c                ó   € R# )z´
If the entitlment is enabled, are there any warnings?
The message is displayed as a Warning Notice in status output

:return:
    A tuple of (warning bool, human-friendly reason)
r   rH   rI   s   &r.   r  Ú$UAEntitlement.enabled_warning_statusŸ  s
   € ð Ðr1   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# rB   )r   rE   )r,   r-   s   "€r.   r/   rF   «  s   ø€ ÷ ñ á	‘#�ñr1   c                ó   € R # r3   rH   rI   s   &r.   Ústatus_description_overrideÚ)UAEntitlement.status_description_override«  s   € ñ r1   c                ó    <€ V ^8„  d   QhRS[ /# rB   rÁ   )r,   r-   s   "€r.   r/   rF   °  s   ø€ ÷ 	ñ 	¡4ñ 	r1   c                ó¶   € V P                   P                  R4      pV'       g   R# \        P                  ! VR4      pV\        P                  ! 4       8¼  d   R# R# )z<Return entitlement access info as stale and needing refresh.ÚexpiresFz%Y-%m-%dT%H:%M:%S.%fZT)rc   rd   r   ÚstrptimeÚutcnow)r5   Ú
expire_strÚexpirys   &  r.   r  ÚUAEntitlement.is_access_expired°  sH   € ð ×)Ñ)×-Ñ-¨iÓ8ˆ
ßÙÜ×"Ò" :Ð/FÓGˆØ”X—_’_Ó&Ô&ÙÙr1   c                ó    <€ V ^8„  d   QhRS[ /# rB   )r   )r,   r-   s   "€r.   r/   rF   »  s   ø€ ÷ *ñ *Ñ4Eñ *r1   c                ób  € \         P                  ! 4       pVf   \        P                  # VP	                  R. 4      pV F_  pVP	                  R4      V P
                  8X  g   K%  VP	                  R4      pVR8X  d   \        P                  u # \        P                  u # 	  \        P                  # )z6Check on the state of application on the status cache.ÚservicesrN   r¼   Úenabled)r!   Úreadr   r  rd   rN   r»   )r5   Ústatus_cacheÚservices_status_listr�  Úservice_statuss   &    r.   Ú"_check_application_status_on_cacheÚ0UAEntitlement._check_application_status_on_cache»  s�   € ä(×-Ò-Ó/ˆàÒÜ$×-Ñ-Ð-à+×/Ñ/°
¸BÓ?Ðã+ˆGØ�{‰{˜6Ó" d§i¡iÖ/Ø!(§¡¨XÓ!6�à! YÔ.Ü,×4Ñ4Ò4ä,×5Ñ5Ò5ñ ,ô !×)Ñ)Ð)r1   c                óR   <€ V ^8„  d   QhRS[ S[S[3,          RS[S[,          RS[/# )r'   ÚobligationsÚresourceTokenrC   )r   rE   r   r   rh   )r,   r-   s   "€r.   r/   rF   Ï  s6   ø€ ÷ Jñ JÙ¡¡S �>ðJÙ:BÁ3½-ðJá	ñJr1   c                óJ   € \        VP                  R 4      ;'       d    T4      # )ÚenableByDefault)rh   rd   )r5   r/  r0  s   &&&r.   Ú_should_enable_by_defaultÚ'UAEntitlement._should_enable_by_defaultÏ  s!   € ô �K—O‘OÐ$5Ó6×HÐH¸=ÓIÐIr1   c          
      ód   <€ V ^8„  d   QhRS[ S[S[3,          RS[ S[S[3,          RS[RS[RS[/# )r'   rÛ   ÚdeltasÚallow_enableÚverboserC   )r   rE   r   rh   )r,   r-   s   "€r.   r/   rF   Ô  sT   ø€ ÷ fñ fá™#™s˜(•^ðfñ ‘S™#�X•ðfñ ð	fñ
 ðfñ 
ñfr1   c                óŒ  € V'       g   R# VP                  R/ 4      pVP                  R/ 4      p\        P                  ! 4       p\        V\        P
                  8H  4      pV'       gS   V'       d    \        P                  ! V4       VR,          pV'       d$   RV9   d   VR,          R\        P
                  39   pV'       Edm   V'       d   V'       d   V P                  4       p	MV P                  4       w  ršV	\        P                  8w  Ed"   V P                  4       w  r¼V'       dŒ   \        P                  RV P                  4       V P!                  \"        P$                  ! 4       4       V'       d>   \&        P                  \(        P*                  P-                  V P                  R7      4       R# V'       d   VP.                  MRp\        P1                  R	V P                  V4       V'       d>   \&        P                  \(        P2                  P-                  V P                  R7      4       R# VP                  R
4      pV'       g   VP                  R
4      pVP                  R/ 4      pV P5                  Wþ4      pV P7                  4       w  pp
V'       Ed-   V'       Ed$   V'       dÃ   \(        P8                  P-                  V P                  R7      pV'       d&   \&        P                  V\:        P<                  R7       V P?                  \"        P$                  ! 4       4       V'       d>   \&        P                  \(        P@                  P-                  V PB                  R7      4       R# V'       dP   \(        PD                  P-                  V P                  R7      p\&        P                  V\:        P<                  R7       R# R# )aW  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.
:raise: UbuntuProError when auto-enable fails unexpectedly.
Tr(   rì   r  Fz3Disabling %s after refresh transition to unentitledrŒ  r@   zDCannot disable %s after refresh transition to unentitled.
Reason: %sr0  r/  r>  )Ú	file_typer   )#rd   r!   r(  rh   r   ÚDROPPED_KEYr   rÜ   r,  rº   r   r  r«  r  r3  rN   r�  r   r  rP  r   ÚDISABLE_DURING_CONTRACT_REFRESHr,   Úmessage_valuerL  Ú)UNABLE_TO_DISABLE_DURING_CONTRACT_REFRESHr3  r  ÚENABLE_BY_DEFAULT_TMPLÚsysÚstderrr-  ÚENABLED_TMPLrU   ÚENABLE_BY_DEFAULT_MANUAL_TMPL)r5   rÛ   r6  r7  r8  Údelta_entitlementÚdelta_directivesr)  Útransition_to_unentitledrº   r½   r«  r(  Úfail_msgr0  Údelta_obligationsÚenable_by_defaultr  rœ  s   &&&&&              r.   Úprocess_contract_deltasÚ%UAEntitlement.process_contract_deltasÔ  sÔ  € ÷* Ùà"ŸJ™J }°bÓ9ÐØ,×0Ñ0°¸rÓBÐÜ(×-Ò-Ó/ˆä#'Ð(9¼T×=MÑ=MÑ(MÓ#NÐ ß'ß Ü×1Ò1°&Ô9Ø$*¨=Õ$9Ð!ß˜zÐ->Ô>Ø+<¸ZÕ+HØÜ×$Ñ$ðMñ ,Ð(÷ $Ð#ß§LØ%)×%LÑ%LÓ%NÑ"à(,×(?Ñ(?Ó(AÑ%Ð"à!Ô%6×%?Ñ%?Õ?Ø$(×$4Ñ$4Ó$6Ñ!�ßÜ—H‘HØMØŸ	™	ôð —L‘L¤×!4Ò!4Ó!6Ô7ßÜŸ
™
Ü$×DÑD×KÑKØ(,¯	©	ð Ló ôñ( ÷ 6:˜t×1Ò1¸r�Hä—K‘Kð2àŸ	™	Ø ô	÷ ÜŸ
™
Ü$×NÑN×UÑUØ(,¯	©	ð Vó ôñ
 à#Ÿ™¨Ó8ˆßØ"ŸJ™J Ó7ˆMØ-×1Ñ1°-ÀÓDÐØ ×:Ñ:Øó
Ðð Ÿ™Ó)‰ˆ
�Aßˆ:×+Ð+ßÜ×5Ñ5×<Ñ<À$Ç)Á)Ð<ÓL�çÜ—J‘J˜s¬c¯j©j�JÔ9Ø—‘œC×/Ò/Ó1Ô2çÜ—J‘Jœx×4Ñ4×;Ñ;À$Ç*Á*Ð;ÓMÔNñ ÷ Ü"×@Ñ@×GÑGØ!ŸY™Yð Hó �Cô —J‘J˜s¬c¯j©j�JÔ9Ùár1   c                ó4   <€ V ^8„  d   QhRS[ P                  /# )r'   r  )r   r  )r,   r-   s   "€r.   r/   rF   <  s   ø€ ÷ -ñ -©S×-@Ñ-@ñ -r1   c                óî   € V P                   '       d   R # VP                  R\        P                  P	                  RR7      4       \
        P                  ! \
        P                  ! 4       4       RV n         R # )Nr3  zstandard Ubuntur>  T)rÓ   r!  r   ÚAPT_UPDATING_LISTr,   r   Úupdate_sources_listÚget_system_sources_filerz  s   &&r.   rl  Ú"UAEntitlement._update_sources_list<  sX   € Ø×(×(Ð(ÙØ�‰Ø”H×.Ñ.×5Ñ5Ð;LÐ5ÓMô	
ô 	×Ò¤× ;Ò ;Ó =Ô>Ø(,ˆÖ%r1   )r¹   rÓ   r·   rµ   rÏ   ra   rÎ   rH   )Nr@   FFN)F)FT)Pr8   r9   r:   r;   rN   r  r¨  rp   rƒ   rˆ   r�   rÞ  râ  rë  rç  r`   ÚpropertyrJ   rQ   ÚabcÚabstractmethodrU   rZ   rO   rk   rx   r}   r„   r‰   rŽ   r”   r    r©   rq   r±   r¾   rÃ   rÇ   rË   r6   rœ   rc   rã   rè   rö   rü   r  r-  r%  rg  r&  rv  r'  rï   r  r#  r  rð   r$  r«  r�  r²  r¦  rú   r±  rÆ  rÍ  r  r  r  rº   r  r  r  r,  r3  rJ  rl  r<   r=   r>   s   @r.   r)   r)   2   s¸  ø‡ € à€Dð !Ðð €Nð €Ið  Ðð Ðð Ðà ÐØ"ÐØ*.Ð'Ø%)Ð"ð €Jà÷ó ðð ÷ó ðð Ø×Ñ÷ó ó ðð Ø×Ñ÷ó ó ðð ÷ó ð÷ð ð ÷ó ðð* ÷ó ðð ÷+ó ð+ð ÷'ó ð'ð ÷(ó ð(÷ð ÷ð ÷Að Að ÷*ó ð*ð ÷
ó ð
ð ÷ó ð÷$ð ð ñó ðð ÷ó ð÷.ò .ò2
ð
 ñ
ó ð
ð 	×Ñ÷ó ðð 	×Ñ÷ó ð÷ð ÷4ð ÷Fð F÷T;ð ;÷zUð U÷n
ð 
÷(ð ÷4#ð #ðJ 	×Ñ÷ó ð÷ð ÷">ð >÷,ð ,ò\;ò÷ð ÷@=ò =÷~(ð (ðT 	×Ñ÷
ó ð
÷;ð ;÷ð ÷#ð #÷Jð ÷ò ÷g4ð g4÷R)ð )÷4ð 4ðB 	×Ñ÷	ó ð	÷
ð 
÷ð ÷
	ð 	÷*ð *÷(Jð J÷
fò f÷P-ö -r1   r)   )Ú	metaclass)5rS  rÖ   Úloggingr@  r   Útypingr   r   r   r   r   r	   r
   r   Úuaclientr   r   r   r   r   r   r   r   r   r   r   Ú(uaclient.api.u.pro.status.is_attached.v1r   Ú(uaclient.entitlements.entitlement_statusr   r   r   r   r   r   r   r   Úuaclient.filesr    Úuaclient.files.state_filesr!   Úuaclient.typesr"   r#   Úget_event_loggerrP  Ú	getLoggerÚreplace_top_level_logger_namer8   r  r%   ÚABCMetar)   rH   r1   r.   Ú<module>rb     s–   ðÛ 
Û Û Û 
Ý ß E× EÓ E÷÷ ÷ ñ õ B÷	÷ 	ó 	õ )Ý 8ß Dà×%Ò%Ó'€Ø×Ò˜×:Ò:¸8ÓDÓE€÷#ñ #ôQ-˜cŸk™k÷ Q-r1   