����JFIFXX�����    $.' ",#(7),01444'9=82<.342  2!!22222222222222222222222222222222222222222222222222����"��4�� ���,�PG"Z_�4�˷����kjز�Z�,F+��_z�,�© �����zh6�٨�ic�fu���#ډb���_�N�?��wQ���5-�~�I���8����TK<5o�Iv-�����k�_U_�����~b�M��d����Ӝ�U�Hh��?]��E�w��Q���k�{��_}qFW7HTՑ��Y��F�?_�'ϔ��_�Ջt��=||I ��6�έ"�����D���/[�k�9���Y�8ds|\���Ҿp6�Ҵ���]��.����6�z<�v��@]�i%��$j��~�g��J>��no����pM[me�i$[����s�o�ᘨ�˸ nɜG-�ĨU�ycP�3.DB�li�;��hj���x7Z^�N�h������N3u{�:j�x�힞��#M&��jL P@_���� P��&��o8������9�����@Sz6�t7#O�ߋ �s}Yf�T���lmr����Z)'N��k�۞p����w\�Tȯ?�8`�O��i{wﭹW�[�r�� ��Q4F�׊���3m&L�=��h3����z~��#�\�l :�F,j@�� ʱ�wQT����8�"kJO���6�֚l����}���R�>ډK���]��y����&����p�}b��;N�1�m�r$�|��7�>e�@B�TM*-iH��g�D�)� E�m�|�ؘbҗ�a��Ҿ����t4���o���G��*oCN�rP���Q��@z,|?W[0�����:�n,jWiE��W��$~/�hp\��?��{(�0���+�Y8rΟ�+����>S-S����VN;�}�s?.����� w�9��˟<���Mq4�Wv'��{)0�1mB��V����W[�����8�/<� �%���wT^�5���b��)iM� pg�N�&ݝ��VO~�q���u���9� ����!��J27����$O-���! �:�%H��� ـ����y�ΠM=t{!S�� oK8������t<����è:a������[�����ա�H���~��w��Qz`�po�^ ����Q��n� �,uu�C�$ ^���,������8�#��:�6��e�|~���!�3�3.�\0��q��o�4`.|� ����y�Q�`~;�d�ׯ,��O�Zw�������`73�v�܋�<���Ȏ�� ـ4k��5�K�a�u�=9Yd��$>x�A�&�� j0� ���vF��� Y�|�y��� ~�6�@c��1vOp�Ig����4��l�OD���L����� R���c���j�_�uX6��3?nk��Wy�f;^*B� ��@�~a�`��Eu������+���6�L��.ü>��}y���}_�O�6�͐�:�YrG�X��kG�����l^w���~㒶sy��Iu�!� W ��X��N�7BV��O��!X�2����wvG�R�f�T#�����t�/?���%8�^�W�aT��G�cL�M���I��(J����1~�8�?aT ���]����AS�E��(��*E}� 2��#I/�׍qz��^t�̔���b�Yz4x���t�){ OH��+(E��A&�N�������XT��o��"�XC��'���)}�J�z�p� ��~5�}�^����+�6����w��c��Q�|Lp�d�H��}�(�.|����k��c4^�"�����Z?ȕ ��a<�L�!039C� �Eu�C�F�Ew�ç ;�n?�*o���B�8�bʝ���'#Rqf���M}7����]����s2tcS{�\icTx;�\��7K���P���ʇ Z O-��~��c>"��?�������P��E��O�8��@�8��G��Q�g�a�Վ���󁶠�䧘��_%#r�>�1�z�a��eb��qcPѵ��n���#L��� =��׀t� L�7�`��V���A{�C:�g���e@�w1 Xp3�c3�ġ����p��M"'-�@n4���fG��B3�DJ�8[Jo�ߐ���gK)ƛ��$���� ���8�3�����+���� �����6�ʻ���� ���S�kI�*KZlT _`���?��K����QK�d����B`�s}�>���`��*�>��,*@J�d�oF*����弝��O}�k��s��]��y�ߘ��c1G�V���<=�7��7����6�q�PT��tXԀ�!9*4�4Tހ3XΛex�46���Y��D ����� �BdemDa����\�_l,��G�/���֌7���Y�](�xTt^%�GE�����4�}bT���ڹ�����;Y)���B�Q��u��>J/J �⮶.�XԄ��j�ݳ�+E��d ��r�5�_D�1 ��o�� �B�x�΢�#���<��W�����8���R6�@g�M�.��� dr�D��>(otU��@x=��~v���2� ӣ�d�oBd��3�eO�6�㣷�����ݜ6��6Y��Qz`��S��{���\P�~z m5{J/L��1������<�e�ͅPu�b�]�ϔ���'������f�b� Zpw��c`"��i���BD@:)ִ�:�]��hv�E�w���T�l��P���"Ju�}��وV J��G6��. J/�Qgl߭�e�����@�z�Zev2u�)]կ�����7x���s�M�-<ɯ�c��r�v�����@��$�ޮ}lk���a���'����>x��O\�ZFu>�����ck#��&:��`�$�ai�>2Δ����l���oF[h��lE�ܺ�Πk:)���`�� $[6�����9�����kOw�\|���8}������ބ:��񶐕��I�A1/�=�2[�,�!��.}gN#�u����b��� ~��݊��}34q����d�E��Lc��$��"�[q�U�硬g^��%B �z���r�pJ�ru%v\h1Y�ne`ǥ:g���pQM~�^�Xi� ��`S�:V29.�P���V�?B�k�� AEvw%�_�9C�Q����wKekPؠ�\�;Io d�{ ߞo�c1eP����\� `����E=���@K<�Y���eڼ�J���w����{av�F�'�M�@/J��+9p���|]�����Iw &`��8���&M�hg��[�{��Xj��%��Ӓ�$��(����ʹN���<>�I���RY���K2�NPlL�ɀ)��&e����B+ь����( � �JTx���_?EZ� }@ 6�U���뙢ط�z��dWI�n` D����噥�[��uV��"�G&Ú����2g�}&m��?ċ�"����Om#��������� ��{�ON��"S�X��Ne��ysQ���@Fn��Vg���dX�~nj�]J�<�K]:��FW��b�������62�=��5f����JKw��bf�X�55��~J �%^����:�-�QIE��P��v�nZum� z � ~ə ���� ���ة����;�f��\v���g�8�1��f24;�V���ǔ�)����9���1\��c��v�/'Ƞ�w�������$�4�R-��t���� e�6�/�ġ �̕Ecy�J���u�B���<�W�ַ~�w[B1L۲�-JS΂�{���΃������A��20�c#��@ 0!1@AP"#2Q`$3V�%45a6�FRUq��� ����^7ׅ,$n�������+��F�`��2X'��0vM��p�L=������5��8������u�p~���.�`r�����\���O��,ư�0oS ��_�M�����l���4�kv\JSd���x���SW�<��Ae�IX����������$I���w�:S���y���›R��9�Q[���,�5�;�@]�%���u�@ *ro�lbI �� ��+���%m:�͇ZV�����u�̉����θau<�fc�.����{�4Ա� �Q����*�Sm��8\ujqs]{kN���)qO�y�_*dJ�b�7���yQqI&9�ԌK!�M}�R�;������S�T���1���i[U�ɵz�]��U)V�S6���3$K{�ߊ<�(� E]Զ[ǼENg�����'�\?#)Dkf��J���o��v���'�%ƞ�&K�u�!��b�35LX�Ϸ��63$K�a�;�9>,R��W��3�3� d�JeTYE.Mϧ��-�o�j3+y��y^�c�������VO�9NV\nd�1 ��!͕_)a�v;����թ�M�lWR1��)El��P;��yوÏ�u 3�k�5Pr6<�⒲l�!˞*��u־�n�!�l:����UNW ��%��Chx8vL'��X�@��*��)���̮��ˍ��� ���D-M�+J�U�kvK����+�x8��cY������?�Ԡ��~3mo��|�u@[XeY�C�\Kp�x8�oC�C�&����N�~3-H���� ��MX�s�u<`���~"WL��$8ξ��3���a�)|:@�m�\���^�`�@ҷ)�5p+��6���p�%i)P M���ngc�����#0Aruz���RL+xSS?���ʮ}()#�t��mˇ!��0}}y����<�e� �-ή�Ԩ��X������ MF���ԙ~l L.3���}�V뽺�v�����멬��Nl�)�2����^�Iq��a��M��qG��T�����c3#������3U�Ǎ���}��לS�|qa��ڃ�+���-��2�f����/��bz��ڐ�� �ݼ[2�ç����k�X�2�* �Z�d���J�G����M*9W���s{��w���T��x��y,�in�O�v��]���n����P�$�JB@=4�OTI�n��e�22a\����q�d���%�$��(���:���: /*�K[PR�fr\nڙdN���F�n�$�4�[�� U�zƶ����� �mʋ���,�ao�u 3�z� �x��Kn����\[��VFmbE;�_U��&V�Gg�]L�۪&#n%�$ɯ�dG���D�TI=�%+AB�Ru#��b4�1�»x�cs�YzڙJG��f��Il��d�eF'T� iA��T���uC�$����Y��H?����[!G`}���ͪ� �纤Hv\������j�Ex�K���!���OiƸ�Yj�+u-<���'q����uN�*�r\��+�]���<�wOZ.fp�ێ��,-*)V?j-kÊ#�`�r��dV����(�ݽBk�����G�ƛk�QmUڗe��Z���f}|����8�8��a���i��3'J�����~G_�^���d�8w������ R�`(�~�.��u���l�s+g�bv���W���lGc}��u���afE~1�Ue������Z�0�8�=e�� f@/�jqEKQQ�J��oN��J���W5~M>$6�Lt�;$ʳ{���^��6�{����v6���ķܰg�V�cnn �~z�x�«�,2�u�?cE+Ș�H؎�%�Za�)���X>uW�Tz�Nyo����s���FQƤ��$��*�&�LLXL)�1�" L��eO��ɟ�9=���:t��Z���c��Ž���Y?�ӭV�wv�~,Y��r�ۗ�|�y��GaF�����C�����.�+� ���v1���fήJ�����]�S��T��B��n5sW}y�$��~z�'�c ��8 ��� ,! �p��VN�S��N�N�q��y8z˱�A��4��*��'������2n<�s���^ǧ˭P�Jޮɏ�U�G�L�J�*#��<�V��t7�8����TĜ>��i}K%,���)[��z�21z ?�N�i�n1?T�I�R#��m-�����������������1����lA�`��fT5+��ܐ�c�q՝��ʐ��,���3�f2U�եmab��#ŠdQ�y>\��)�SLY����w#��.���ʑ�f��� ,"+�w�~�N�'�c�O�3F�������N<���)j��&��,-� �љ���֊�_�zS���TǦ����w�>��?�������n��U仆�V���e�����0���$�C�d���rP �m�׈e�Xm�Vu� �L��.�bֹ��� �[Դaզ���*��\y�8�Է:�Ez\�0�Kq�C b��̘��cө���Q��=0Y��s�N��S.���3.���O�o:���#���v7�[#߫ ��5�܎�L���Er4���9n��COWlG�^��0k�%<���ZB���aB_���������'=��{i�v�l�$�uC���mƎҝ{�c㱼�y]���W�i ��ߧc��m�H� m�"�"�����;Y�ߝ�Z�Ǔ�����:S#��|}�y�,/k�Ld� TA�(�AI$+I3��;Y*���Z��}|��ӧO��d�v��..#:n��f>�>���ȶI�TX��� 8��y����"d�R�|�)0���=���n4��6ⲑ�+��r<�O�܂~zh�z����7ܓ�HH�Ga롏���nCo�>������a ���~]���R���̲c?�6(�q�;5%� |�uj�~z8R=X��I�V=�|{v�Gj\gc��q����z�؋%M�ߍ����1y��#��@f^���^�>N�����#x#۹��6�Y~�?�dfPO��{��P�4��V��u1E1J �*|���%���JN��`eWu�zk M6���q t[�� ��g�G���v��WIG��u_ft����5�j�"�Y�:T��ɐ���*�;� e5���4����q$C��2d�}���� _S�L#m�Yp��O�.�C�;��c����Hi#֩%+) �Ӎ��ƲV���SYź��g |���tj��3�8���r|���V��1#;.SQ�A[���S������#���`n�+���$��$I �P\[�@�s��(�ED�z���P��])8�G#��0B��[ى��X�II�q<��9�~[Z멜�Z�⊔IWU&A>�P~�#��dp<�?����7���c��'~���5 ��+$���lx@�M�dm��n<=e�dyX��?{�|Aef ,|n3�<~z�ƃ�uۧ�����P��Y,�ӥQ�*g�#먙R�\���;T��i,��[9Qi歉����c>]9�� ��"�c��P�� �Md?٥��If�ت�u��k��/����F��9�c*9��Ǎ:�ØF���z�n*�@|I�ށ9����N3{'��[�'ͬ�Ҳ4��#}��!�V� Fu��,�,mTIk���v C�7v���B�6k�T9��1�*l� '~��ƞF��lU��'�M ����][ΩũJ_�{�i�I�n��$���L�� j��O�dx�����kza۪��#�E��Cl����x˘�o�����V���ɞ�ljr��)�/,�߬h�L��#��^��L�ф�,íMƁe�̩�NB�L�����iL����q�}��(��q��6IçJ$�W�E$��:������=#����(�K�B����zђ <��K(�N�۫K�w��^O{!����)�H���>x�������lx�?>Պ�+�>�W���,Ly!_�D���Ō�l���Q�!�[ �S����J��1��Ɛ�Y}��b,+�Lo�x�ɓ)����=�y�oh�@�꥟/��I��ѭ=��P�y9��� �ۍYӘ�e+�p�Jnϱ?V\SO%�(�t� ���=?MR�[Ș�����d�/ ��n�l��B�7j� ��!�;ӥ�/�[-���A�>�dN�sLj ��,ɪv��=1c�.SQ�O3�U���ƀ�ܽ�E����������̻��9G�ϷD�7(�}��Ävӌ\�y�_0[w ���<΍>����a_��[0+�L��F.�޺��f�>oN�T����q;���y\��bՃ��y�jH�<|q-eɏ�_?_9+P���Hp$�����[ux�K w�Mw��N�ی'$Y2�=��q���KB��P��~������Yul:�[<����F1�2�O���5=d����]Y�sw:���Ϯ���E��j,_Q��X��z`H1,#II ��d�wr��P˂@�ZJV����y$�\y�{}��^~���[:N����ߌ�U�������O��d�����ؾe��${p>G��3c���Ė�lʌ�� ת��[��`ϱ�-W����dg�I��ig2��� ��}s ��ؤ(%#sS@���~���3�X�nRG�~\jc3�v��ӍL��M[JB�T��s3}��j�Nʖ��W����;7��ç?=X�F=-�=����q�ߚ���#���='�c��7���ڑW�I(O+=:uxq�������������e2�zi+�kuG�R��������0�&e�n���iT^J����~\jy���p'dtG��s����O��3����9* �b#Ɋ�� p������[Bws�T�>d4�ۧs���nv�n���U���_�~,�v����ƜJ1��s�� �QIz��)�(lv8M���U=�;����56��G���s#�K���MP�=��LvyGd��}�VwWBF�'�à �?MH�U�g2�� ����!�p�7Q��j��ڴ����=��j�u��� Jn�A s���uM������e��Ɔ�Ҕ�!)'��8Ϣ�ٔ��ޝ(��Vp���צ֖d=�IC�J�Ǡ{q������kԭ�߸���i��@K����u�|�p=..�*+����x�����z[Aqġ#s2a�Ɗ���RR�)*HRsi�~�a &f��M��P����-K�L@��Z��Xy�'x�{}��Zm+���:�)�) IJ�-i�u���� ���ܒH��'�L(7�y�GӜq���� j��� 6ߌg1�g�o���,kر���tY�?W,���p���e���f�OQS��!K�۟cҒA�|ս�j�>��=⬒��˧L[�� �߿2JaB~R��u�:��Q�] �0H~���]�7��Ƽ�I���(}��cq '�ήET���q�?f�ab���ӥvr� �)o��-Q��_'����ᴎo��K������;��V���o��%���~OK ����*��b�f:���-ťIR��`B�5!RB@���ï�� �u �̯e\�_U�_������� g�ES��3�������QT��a����x����U<~�c?�*�#]�MW,[8O�a�x��]�1bC|踤�P��lw5V%�)�{t�<��d��5���0i�XSU��m:��Z�┵�i�"��1�^B�-��P�hJ��&)O��*�D��c�W��vM��)����}���P��ܗ-q����\mmζZ-l@�}��a��E�6��F�@��&Sg@���ݚ�M����� ȹ 4����#p�\H����dYDo�H���"��\��..R�B�H�z_�/5˘����6��KhJR��P�mƶi�m���3�,#c�co��q�a)*Pt����R�m�k�7x�D�E�\Y�閣_X�<���~�)���c[[�BP����6�Yq���S��0����%_����;��Àv�~�| VS؇ ��'O0��F0��\���U�-�d@�����7�SJ*z��3n��y��P����O���������m�~�P�3|Y��ʉr#�C�<�G~�.,! ���bqx���h~0=��!ǫ�jy����l�O,�[B��~��|9��ٱ����Xly�#�i�B��g%�S��������tˋ���e���ې��\[d�t)��.+u�|1 ������#�~Oj����hS�%��i.�~X���I�H�m��0n���c�1uE�q��cF�RF�o���7� �O�ꮧ� ���ۛ{��ʛi5�rw?׌#Qn�TW��~?y$��m\�\o����%W� ?=>S�N@�� �Ʈ���R����N�)�r"C�:��:����� �����#��qb��Y�. �6[��2K����2u�Ǧ�HYR��Q�MV��� �G�$��Q+.>�����nNH��q�^��� ����q��mM��V��D�+�-�#*�U�̒ ���p욳��u:�������IB���m���PV@O���r[b= �� ��1U�E��_Nm�yKbN�O���U�}�the�`�|6֮P>�\2�P�V���I�D�i�P�O;�9�r�mAHG�W�S]��J*�_�G��+kP�2����Ka�Z���H�'K�x�W�MZ%�O�YD�Rc+o��?�q��Ghm��d�S�oh�\�D�|:W������UA�Qc yT�q������~^�H��/��#p�CZ���T�I�1�ӏT����4��"�ČZ�����}��`w�#�*,ʹ�� ��0�i��課�Om�*�da��^gJ݅{���l�e9uF#T�ֲ��̲�ٞC"�q���ߍ ոޑ�o#�XZTp����@ o�8��(jd��xw�]�,f���`~�|,s��^����f�1���t��|��m�򸄭/ctr��5s��7�9Q�4�H1꠲BB@l9@���C�����+�wp�xu�£Yc�9��?`@#�o�mH�s2��)�=��2�.�l����jg�9$�Y�S�%*L������R�Y������7Z���,*=�䷘$�������arm�o�ϰ���UW.|�r�uf����IGw�t����Zwo��~5 ��YյhO+=8fF�)�W�7�L9lM�̘·Y���֘YLf�큹�pRF���99.A �"wz��=E\Z���'a� 2��Ǚ�#;�'}�G���*��l��^"q��+2FQ� hj��kŦ��${���ޮ-�T�٭cf�|�3#~�RJ����t��$b�(R��(����r���dx� >U b�&9,>���%E\� Ά�e�$��'�q't��*�א���ެ�b��-|d���SB�O�O��$�R+�H�)�܎�K��1m`;�J�2�Y~9��O�g8=vqD`K[�F)k�[���1m޼c��n���]s�k�z$@��)!I �x՝"v��9=�ZA=`Ɠi �:�E��)`7��vI��}d�YI�_ �o�:ob���o ���3Q��&D&�2=�� �Ά��;>�h����y.*ⅥS������Ӭ�+q&����j|UƧ����}���J0��WW< ۋS�)jQR�j���Ư��rN)�Gű�4Ѷ(�S)Ǣ�8��i��W52���No˓� ۍ%�5brOn�L�;�n��\G����=�^U�dI���8$�&���h��'���+�(������cȁ߫k�l��S^���cƗjԌE�ꭔ��gF���Ȓ��@���}O���*;e�v�WV���YJ\�]X'5��ղ�k�F��b 6R�o՜m��i N�i����>J����?��lPm�U��}>_Z&�KK��q�r��I�D�Չ~�q�3fL�:S�e>���E���-G���{L�6p�e,8��������QI��h��a�Xa��U�A'���ʂ���s�+טIjP�-��y�8ۈZ?J$��W�P� ��R�s�]��|�l(�ԓ��sƊi��o(��S0��Y� 8�T97.�����WiL��c�~�dxc�E|�2!�X�K�Ƙਫ਼�$((�6�~|d9u+�qd�^3�89��Y�6L�.I�����?���iI�q���9�)O/뚅����O���X��X�V��ZF[�یgQ�L��K1���RҖr@v�#��X�l��F���Нy�S�8�7�kF!A��sM���^rkp�jP�DyS$N���q��nxҍ!U�f�!eh�i�2�m���`�Y�I�9r�6� �TF���C}/�y�^���Η���5d�'��9A-��J��>{�_l+�`��A���[�'��յ�ϛ#w:݅�%��X�}�&�PSt�Q�"�-��\縵�/����$Ɨh�Xb�*�y��BS����;W�ջ_mc�����vt?2}1�;qS�d�d~u:2k5�2�R�~�z+|HE!)�Ǟl��7`��0�<�,�2*���Hl-��x�^����'_TV�gZA�'j� ^�2Ϊ��N7t�����?w�� �x1��f��Iz�C-Ȗ��K�^q�;���-W�DvT�7��8�Z�������� hK�(P:��Q- �8�n�Z���܃e貾�<�1�YT<�,�����"�6{/ �?�͟��|1�:�#g��W�>$����d��J��d�B��=��jf[��%rE^��il:��B���x���Sּ�1հ��,�=��*�7 fcG��#q� �eh?��2�7�����,�!7x��6�n�LC�4x��},Geǝ�tC.��vS �F�43��zz\��;QYC,6����~;RYS/6���|2���5���v��T��i����������mlv��������&� �nRh^ejR�LG�f���? �ۉҬܦƩ��|��Ȱ����>3����!v��i�ʯ�>�v��オ�X3e���_1z�Kȗ\<������!�8���V��]��?b�k41�Re��T�q��mz��TiOʦ�Z��Xq���L������q"+���2ۨ��8}�&N7XU7Ap�d�X��~�׿��&4e�o�F��� �H����O���č�c�� 懴�6���͉��+)��v;j��ݷ�� �UV�� i��� j���Y9GdÒJ1��詞�����V?h��l����l�cGs�ځ�������y�Ac�����\V3�? �� ܙg�>qH�S,�E�W�[�㺨�uch�⍸�O�}���a��>�q�6�n6����N6�q������N ! 1AQaq�0@����"2BRb�#Pr���3C`��Scst���$4D���%Td�� ?���N����a��3��m���C���w��������xA�m�q�m���m������$����4n淿t'��C"w��zU=D�\R+w�p+Y�T�&�պ@��ƃ��3ޯ?�Aﶂ��aŘ���@-�����Q�=���9D��ռ�ѻ@��M�V��P��܅�G5�f�Y<�u=,EC)�<�Fy'�"�&�չ�X~f��l�KԆV��?�� �W�N����=(� �;���{�r����ٌ�Y���h{�١������jW����P���Tc�����X�K�r��}���w�R��%��?���E��m�� �Y�q|����\lEE4���r���}�lsI�Y������f�$�=�d�yO����p�����yBj8jU�o�/�S��?�U��*������ˍ�0������u�q�m [�?f����a�� )Q�>����6#������� ?����0UQ����,IX���(6ڵ[�DI�MNލ�c&���υ�j\��X�R|,4��� j������T�hA�e��^���d���b<����n�� �즇�=!���3�^�`j�h�ȓr��jẕ�c�,ٞX����-����a�ﶔ���#�$��]w�O��Ӫ�1y%��L�Y<�wg#�ǝ�̗`�x�xa�t�w��»1���o7o5��>�m뭛C���Uƃߜ}�C���y1Xνm�F8�jI���]����H���ۺиE@I�i;r�8ӭ����V�F�Շ| ��&?�3|x�B�MuS�Ge�=Ӕ�#BE5G�����Y!z��_e��q�р/W>|-�Ci߇�t�1ޯќd�R3�u��g�=0 5��[?�#͏��q�cf���H��{ ?u�=?�?ǯ���}Z��z���hmΔ�BFTW�����<�q�(v� ��!��z���iW]*�J�V�z��gX֧A�q�&��/w���u�gYӘa���; �i=����g:��?2�dž6�ى�k�4�>�Pxs����}������G�9��3 ���)gG�R<>r h�$��'nc�h�P��Bj��J�ҧH� -��N1���N��?��~��}-q!=��_2hc�M��l�vY%UE�@|�v����M2�.Y[|y�"Eï��K�ZF,�ɯ?,q�?v�M 80jx�"�;�9vk�����+ ֧�� �ȺU��?�%�vcV��mA�6��Qg^M����A}�3�nl� QRN�l8�kkn�'�����(��M�7m9و�q���%ޟ���*h$Zk"��$�9��: �?U8�Sl��,,|ɒ��xH(ѷ����Gn�/Q�4�P��G�%��Ա8�N��!� �&�7�;���eKM7�4��9R/%����l�c>�x;������>��C�:�����t��h?aKX�bhe�ᜋ^�$�Iհ �hr7%F$�E��Fd���t��5���+�(M6�t����Ü�UU|zW�=a�Ts�Tg������dqP�Q����b'�m���1{|Y����X�N��b �P~��F^F:����k6�"�j!�� �I�r�`��1&�-$�Bevk:y���#yw��I0��x��=D�4��tU���P�ZH��ڠ底taP��6����b>�xa����Q�#� WeF��ŮNj�p�J* mQ�N����*I�-*�ȩ�F�g�3 �5��V�ʊ�ɮ�a��5F���O@{���NX��?����H�]3��1�Ri_u��������ѕ�� ����0��� F��~��:60�p�͈�S��qX#a�5>���`�o&+�<2�D����: �������ڝ�$�nP���*)�N�|y�Ej�F�5ټ�e���ihy�Z �>���k�bH�a�v��h�-#���!�Po=@k̆IEN��@��}Ll?j�O������߭�ʞ���Q|A07x���wt!xf���I2?Z��<ץ�T���cU�j��]��陎Ltl �}5�ϓ��$�,��O�mˊ�;�@O��jE��j(�ا,��LX���LO���Ц�90�O �.����a��nA���7������j4 ��W��_ٓ���zW�jcB������y՗+EM�)d���N�g6�y1_x��p�$Lv:��9�"z��p���ʙ$��^��JԼ*�ϭ����o���=x�Lj�6�J��u82�A�H�3$�ٕ@�=Vv�]�'�qEz�;I˼��)��=��ɯ���x �/�W(V���p�����$ �m�������u�����񶤑Oqˎ�T����r��㠚x�sr�GC��byp�G��1ߠ�w e�8�$⿄����/�M{*}��W�]˷.�CK\�ުx���/$�WPw���r� |i���&�}�{�X� �>��$-��l���?-z���g����lΆ���(F���h�vS*���b���߲ڡn,|)mrH[���a�3�ר�[1��3o_�U�3�TC�$��(�=�)0�kgP���� ��u�^=��4 �WYCҸ:��vQ�ר�X�à��tk�m,�t*��^�,�}D*� �"(�I��9R����>`�`��[~Q]�#af��i6l��8���6�:,s�s�N6�j"�A4���IuQ��6E,�GnH��zS�HO�uk�5$�I�4��ؤ�Q9�@��C����wp�BGv[]�u�Ov���0I4���\��y�����Q�Ѹ��~>Z��8�T��a��q�ޣ;z��a���/��S��I:�ܫ_�|������>=Z����8:�S��U�I�J��"IY���8%b8���H��:�QO�6�;7�I�S��J��ҌAά3��>c���E+&jf$eC+�z�;��V����� �r���ʺ������my�e���aQ�f&��6�ND��.:��NT�vm�<- u���ǝ\MvZY�N�NT��-A�>jr!S��n�O 1�3�Ns�%�3D@���`������ܟ 1�^c<���� �a�ɽ�̲�Xë#�w�|y�cW�=�9I*H8�p�^(4���՗�k��arOcW�tO�\�ƍR��8����'�K���I�Q�����?5�>[�}��yU�ײ -h��=��% q�ThG�2�)���"ו3]�!kB��*p�FDl�A���,�eEi�H�f�Ps�����5�H:�Փ~�H�0Dت�D�I����h�F3�������c��2���E��9�H��5�zԑ�ʚ�i�X�=:m�xg�hd(�v����׊�9iS��O��d@0ڽ���:�p�5�h-��t�&���X�q�ӕ,��ie�|���7A�2���O%P��E��htj��Y1��w�Ѓ!����  ���� ࢽ��My�7�\�a�@�ţ�J �4�Ȼ�F�@o�̒?4�wx��)��]�P��~�����u�����5�����7X ��9��^ܩ�U;Iꭆ 5 �������eK2�7(�{|��Y׎ �V��\"���Z�1� Z�����}��(�Ǝ"�1S���_�vE30>���p;� ΝD��%x�W�?W?v����o�^V�i�d��r[��/&>�~`�9Wh��y�;���R��� ;;ɮT��?����r$�g1�K����A��C��c��K��l:�'��3 c�ﳯ*"t8�~l��)���m��+U,z��`(�>yJ�?����h>��]��v��ЍG*�{`��;y]��I�T� ;c��NU�fo¾h���/$���|NS���1�S�"�H��V���T���4��uhǜ�]�v;���5�͠x��'C\�SBpl���h}�N����� A�Bx���%��ޭ�l��/����T��w�ʽ]D�=����K���ž�r㻠l4�S�O?=�k �M:� ��c�C�a�#ha���)�ѐxc�s���gP�iG��{+���x���Q���I= �� z��ԫ+ �8"�k�ñ�j=|����c ��y��CF��/��*9ж�h{ �?4�o� ��k�m�Q�N�x��;�Y��4膚�a�w?�6�>e]�����Q�r�:����g�,i"�����ԩA�*M�<�G��b�if��l^M��5� �Ҩ�{����6J��ZJ�����P�*�����Y���ݛu�_4�9�I8�7���������,^ToR���m4�H��?�N�S�ѕw��/S��甍�@�9H�S�T��t�ƻ���ʒU��*{Xs�@����f�����֒Li�K{H�w^���������Ϥm�tq���s� ���ք��f:��o~s��g�r��ט� �S�ѱC�e]�x���a��) ���(b-$(�j>�7q�B?ӕ�F��hV25r[7 Y� }L�R��}����*sg+��x�r�2�U=�*'WS��ZDW]�WǞ�<��叓���{�$�9Ou4��y�90-�1�'*D`�c�^o?(�9��u���ݐ��'PI&� f�Jݮ�������:wS����jfP1F:X �H�9dԯ���˝[�_54 �}*;@�ܨ�� ð�yn�T���?�ןd�#���4rG�ͨ��H�1�|-#���Mr�S3��G�3�����)�.᧏3v�z֑��r����$G"�`j �1t��x0<Ɔ�Wh6�y�6��,œ�Ga��gA����y��b��)��h�D��ß�_�m��ü �gG;��e�v��ݝ�nQ� ��C����-�*��o���y�a��M��I�>�<���]obD��"�:���G�A��-\%LT�8���c�)��+y76���o�Q�#*{�(F�⽕�y����=���rW�\p���۩�c���A���^e6��K������ʐ�cVf5$�'->���ՉN"���F�"�UQ@�f��Gb~��#�&�M=��8�ט�JNu9��D��[̤�s�o�~������ G��9T�tW^g5y$b��Y'��س�Ǵ�=��U-2 #�MC�t(�i� �lj�@Q 5�̣i�*�O����s�x�K�f��}\��M{E�V�{�υ��Ƈ�����);�H����I��fe�Lȣr�2��>��W�I�Ȃ6������i��k�� �5�YOxȺ����>��Y�f5'��|��H+��98pj�n�.O�y�������jY��~��i�w'������l�;�s�2��Y��:'lg�ꥴ)o#'Sa�a�K��Z� �m��}�`169�n���"���x��I ��*+� }F<��cГ���F�P�������ֹ*�PqX�x۩��,� ��N�� �4<-����%����:��7����W���u�`����� $�?�I��&����o��o��`v�>��P��"��l���4��5'�Z�gE���8���?��[�X�7(��.Q�-��*���ތL@̲����v��.5���[��=�t\+�CNܛ��,g�SQnH����}*F�G16���&:�t��4ُ"A��̣��$�b �|����#rs��a�����T�� ]�<�j��BS�('$�ɻ� �wP;�/�n��?�ݜ��x�F��yUn�~mL*-�������Xf�wd^�a�}��f�,=t�׵i�.2/wpN�Ep8�OР���•��R�FJ� 55TZ��T �ɭ�<��]��/�0�r�@�f��V��V����Nz�G��^���7hZi����k��3�,kN�e|�vg�1{9]_i��X5y7� 8e]�U����'�-2,���e"����]ot�I��Y_��n�(JҼ��1�O ]bXc���Nu�No��pS���Q_���_�?i�~�x h5d'�(qw52] ��'ޤ�q��o1�R!���`ywy�A4u���h<קy���\[~�4�\ X�Wt/� 6�����n�F�a8��f���z �3$�t(���q��q�x��^�XWeN'p<-v�!�{�(>ӽDP7��ո0�y)�e$ٕv�Ih'Q�EA�m*�H��RI��=:��� ���4牢) �%_iN�ݧ�l]� �Nt���G��H�L��� ɱ�g<���1V�,�J~�ٹ�"K��Q�� 9�HS�9�?@��k����r�;we݁�]I�!{ �@�G�[�"��`���J:�n]�{�cA�E����V��ʆ���#��U9�6����j�#Y�m\��q�e4h�B�7��C�������d<�?J����1g:ٳ���=Y���D�p�ц� ׈ǔ��1�]26؜oS�'��9�V�FVu�P�h�9�xc�oq�X��p�o�5��Ա5$�9W�V(�[Ak�aY錎qf;�'�[�|���b�6�Ck��)��#a#a˙��8���=äh�4��2��C��4tm^ �n'c���]GQ$[Wҿ��i���vN�{Fu ��1�gx��1┷���N�m��{j-,��x�� Ūm�ЧS�[�s���Gna���䑴�� x�p 8<������97�Q���ϴ�v�aϚG��Rt�Һ׈�f^\r��WH�JU�7Z���y)�vg=����n��4�_)y��D'y�6�]�c�5̪�\� �PF�k����&�c;��cq�$~T�7j ���nç]�<�g ":�to�t}�159�<�/�8������m�b�K#g'I'.W�����6��I/��>v��\�MN��g���m�A�yQL�4u�Lj�j9��#44�t��l^�}L����n��R��!��t��±]��r��h6ٍ>�yҏ�N��fU�� ���� Fm@�8}�/u��jb9������he:A�y�ծw��GpΧh�5����l}�3p468��)U��d��c����;Us/�֔�YX�1�O2��uq�s��`hwg�r~�{ R��mhN��؎*q 42�*th��>�#���E����#��Hv�O����q�}�����6�e��\�,Wk�#���X��b>��p}�դ��3���T5��†��6��[��@�P�y*n��|'f�֧>�lư΂�̺����SU�'*�q�p�_S�����M�� '��c�6�����m�� ySʨ;M��r���Ƌ�m�Kxo,���Gm�P��A�G�:��i��w�9�}M(�^�V��$ǒ�ѽ�9���|���� �a����J�SQ�a���r�B;����}���ٻ֢�2�%U���c�#�g���N�a�ݕ�'�v�[�OY'��3L�3�;,p�]@�S��{ls��X�'���c�jw�k'a�.��}�}&�� �dP�*�bK=ɍ!����;3n�gΊU�ߴmt�'*{,=SzfD� A��ko~�G�aoq�_mi}#�m�������P�Xhύ����mxǍ�΂���巿zf��Q���c���|kc�����?���W��Y�$���_Lv����l߶��c���`?����l�j�ݲˏ!V��6����U�Ђ(A���4y)H���p�Z_�x��>���e��R��$�/�`^'3qˏ�-&Q�=?��CFVR �D�fV�9��{�8g�������n�h�(P"��6�[�D���< E�����~0<@�`�G�6����Hг�cc�� �c�K.5��D��d�B���`?�XQ��2��ٿyqo&+�1^� DW�0�ꊩ���G�#��Q�nL3��c���������/��x ��1�1[y�x�პCW��C�c�UĨ80�m�e�4.{�m��u���I=��f�����0QRls9���f���������9���~f�����Ǩ��a�"@�8���ȁ�Q����#c�ic������G��$���G���r/$W�(��W���V�"��m�7�[m�A�m����bo��D� j����۳� l���^�k�h׽����� ��#� iXn�v��eT�k�a�^Y�4�BN��ĕ��0 !01@Q"2AaPq3BR������?���@4�Q�����T3,���㺠�W�[=JK�Ϟ���2�r^7��vc�:�9 �E�ߴ�w�S#d���Ix��u��:��Hp��9E!�� V 2;73|F��9Y���*ʬ�F��D����u&���y؟��^EA��A��(ɩ���^��GV:ݜDy�`��Jr29ܾ�㝉��[���E;Fzx��YG��U�e�Y�C���� ����v-tx����I�sם�Ę�q��Eb�+P\ :>�i�C'�;�����k|z�رn�y]�#ǿb��Q��������w�����(�r|ӹs��[�D��2v-%��@;�8<a���[\o[ϧw��I!��*0�krs)�[�J9^��ʜ��p1)� "��/_>��o��<1����A�E�y^�C��`�x1'ܣn�p��s`l���fQ��):�l����b>�Me�jH^?�kl3(�z:���1ŠK&?Q�~�{�ٺ�h�y���/�[��V�|6��}�KbX����mn[-��7�5q�94�������dm���c^���h� X��5��<�eޘ>G���-�}�دB�ޟ� ��|�rt�M��V+�]�c?�-#ڛ��^ǂ}���Lkr���O��u�>�-D�ry� D?:ޞ�U��ǜ�7�V��?瓮�"�#���r��չģVR;�n���/_� ؉v�ݶe5d�b9��/O��009�G���5n�W����JpA�*�r9�>�1��.[t���s�F���nQ� V 77R�]�ɫ8����_0<՜�IF�u(v��4��F�k�3��E)��N:��yڮe��P�`�1}�$WS��J�SQ�N�j�ٺ��޵�#l���ј(�5=��5�lǏmoW�v-�1����v,W�mn��߀$x�<����v�j(����c]��@#��1������Ǔ���o'��u+����;G�#�޸��v-lη��/(`i⣍Pm^���ԯ̾9Z��F��������n��1��� ��]�[��)�'������:�֪�W��FC����� �B9،!?���]��V��A�Վ�M��b�w��G F>_DȬ0¤�#�QR�[V��kz���m�w�"��9ZG�7'[��=�Q����j8R?�zf�\a�=��O�U����*oB�A�|G���2�54 �p��.w7� �� ��&������ξxGHp� B%��$g�����t�Џ򤵍z���HN�u�Я�-�'4��0��;_��3 !01"@AQa2Pq#3BR������?��ʩca��en��^��8���<�u#��m*08r��y�N"�<�Ѳ0��@\�p��� �����Kv�D��J8�Fҽ� �f�Y��-m�ybX�NP����}�!*8t(�OqѢ��Q�wW�K��ZD��Δ^e��!� ��B�K��p~�����e*l}z#9ң�k���q#�Ft�o��S�R����-�w�!�S���Ӥß|M�l޶V��!eˈ�8Y���c�ЮM2��tk���� ������J�fS����Ö*i/2�����n]�k�\���|4yX�8��U�P.���Ы[���l��@"�t�<������5�lF���vU�����W��W��;�b�cД^6[#7@vU�xgZv��F�6��Q,K�v��� �+Ъ��n��Ǣ��Ft���8��0��c�@�!�Zq s�v�t�;#](B��-�nῃ~���3g������5�J�%���O������n�kB�ĺ�.r��+���#�N$?�q�/�s�6��p��a����a��J/��M�8��6�ܰ"�*������ɗud"\w���aT(����[��F��U՛����RT�b���n�*��6���O��SJ�.�ij<�v�MT��R\c��5l�sZB>F��<7�;EA��{��E���Ö��1U/�#��d1�a�n.1ě����0�ʾR�h��|�R��Ao�3�m3 ��%�� ���28Q� ��y��φ���H�To�7�lW>����#i`�q���c����a��� �m,B�-j����݋�'mR1Ήt�>��V��p���s�0IbI�C.���1R�ea�����]H�6����������4B>��o��](��$B���m�����a�!=��?�B� K�Ǿ+�Ծ"�n���K��*��+��[T#�{E�J�S����Q�����s�5�:�U�\wĐ�f�3����܆&�)����I���Ԇw��E T�lrTf6Q|R�h:��[K�� �z��c֧�G�C��%\��_�a�84��HcO�bi��ؖV��7H �)*ģK~Xhչ0��4?�0��� �E<���}3���#���u�?�� ��|g�S�6ꊤ�|�I#Hڛ� �ա��w�X��9��7���Ŀ%�SL��y6č��|�F�a 8���b��$�sק�h���b9RAu7�˨p�Č�_\*w��묦��F ����4D~�f����|(�"m���NK��i�S�>�$d7SlA��/�²����SL��|6N�}���S�˯���g��]6��; �#�.��<���q'Q�1|KQ$�����񛩶"�$r�b:���N8�w@��8$�� �AjfG|~�9F ���Y��ʺ��Bwؒ������M:I岎�G��`s�YV5����6��A �b:�W���G�q%l�����F��H���7�������Fsv7��k�� 403WebShell
403Webshell
Server IP : 172.67.215.126  /  Your IP : 141.101.76.163
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux ip-172-31-19-221 6.8.0-1029-aws #31~22.04.1-Ubuntu SMP Thu Apr 24 21:16:18 UTC 2025 x86_64
User : www-data ( 33)
PHP Version : 8.1.28
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/lib/python3/dist-packages/uaclient/entitlements/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/lib/python3/dist-packages/uaclient/entitlements/__pycache__/base.cpython-310.pyc
o

nHJe/��@sddlZddlZddlZddlZddlmZddlmZmZmZm	Z	m
Z
mZmZm
Z
ddlmZmZmZmZmZmZmZmZmZmZddlmZddlmZmZmZmZm Z m!Z!m"Z"m#Z#ddl$m%Z%m&Z&ddl'm(Z(e�)�Z*e�+e�,e-��Z.Gd	d
�d
�Z/Gdd�dej0d
�Z1dS)�N)�datetime)�Any�Dict�List�Optional�Set�Tuple�Type�Union)
�apt�config�contract�event_logger�
exceptions�http�messages�snap�system�util)�_is_attached)�ApplicabilityStatus�ApplicationStatus�CanDisableFailure�CanDisableFailureReason�CanEnableFailure�CanEnableFailureReason�ContractStatus�UserFacingStatus)�MessagingOperationsDict�StaticAffordance)�is_config_value_truec@s$eZdZdeddejfdd�ZdS)�IncompatibleService�entitlement�
UAEntitlement�	named_msgcCs||_||_dS�N)r"r$)�selfr"r$�r'�</usr/lib/python3/dist-packages/uaclient/entitlements/base.py�__init__'s
zIncompatibleService.__init__N)�__name__�
__module__�__qualname__r	r�NamedMessager)r'r'r'r(r!&s��r!c@s$eZdZdZdZdZdZdZdZdZ	dZ
dZdZdZ
dZdZdZeejdefdd���Zedefd	d
��Zedeefdd��Zeejdefd
d���Zeejdefdd���Zedefdd��Zdeeefdeee e!j"ffdd�Z#edefdd��Z$edee%dffdd��Z&edee'dffdd��Z(edee)ddffdd��Z*edee)ddffdd ��Z+deee)dffd!d"�Z,de-efd#d$�Z.deee)dffd%d&�Z/edeee)dffd'd(��Z0edeee)dffd)d*��Z1ede dfd+d,��Z2ede3fd-d.��Z4							d�d/e e5j6d0ed1ed2ed3ed4ed5e eeddfd6d7�Z7ed8d9��Z8d:d;�Z9ed<d=��Z:deee e;ffd>d?�Z<	d�d@edeee=de;fffdAdB�Z>defdCdD�Z?defdEdF�Z@defdGdH�ZAejd�d@edefdIdJ��ZBdefdKdL�ZCdMdN�ZDdee'fdOdP�ZEdefdQdR�ZFdeee e!j"ffdSdT�ZGdeee e!j"ffdUdV�ZH	d�dWedeee eIffdXdY�ZJ	d�d@edeee eIffdZd[�ZKejd�d@edefd\d]��ZLd@edeee e!j"ffd^d_�ZMdefd`da�ZN	d�dbed@eddfdcdd�ZOdeePe e!j"ffdedf�ZQdeRfdgdh�ZSdeeTe e!j"ffdidj�ZUejdeeVe e!j"ffdkdl��ZWdeee e!j"ffdmdn�ZXde efdodp�ZYdefdqdr�ZZdeVfdsdt�Z[dueeefdve edefdwdx�Z\	d�dyeeefdzeeefd{edefd|d}�Z]d~d�Z^dS)�r#NF�r'T�returncC�dS)z&The lowercase name of this entitlementNr'�r&r'r'r(�nameT�zUAEntitlement.namecCr0)z?The lowercase name of this entitlement, in case it is a variantr.r'r1r'r'r(�variant_nameZ�zUAEntitlement.variant_namecCs$|jg}|j|jkr|�|j�|S)z1The list of names this entitlement may be called.)r2�presentation_name�append)r&�valid_namesr'r'r(r8_szUAEntitlement.valid_namescCr0)z,The human readable title of this entitlementNr'r1r'r'r(�titlegr3zUAEntitlement.titlecCr0)z&A sentence describing this entitlementNr'r1r'r'r(�descriptionmr3zUAEntitlement.descriptioncCs<|jr|jS|jjjr|j�di��di��d|j�S|jS)z/The user-facing name shown for this entitlementr"�affordances�presentedAs)�
is_variantr4�cfg�machine_token_file�
is_present�entitlement_cfg�getr2r1r'r'r(r6ss

�zUAEntitlement.presentation_name�platform_checkcCr0)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.
        �TNr')r&rCr'r'r(�verify_platform_checks�sz$UAEntitlement.verify_platform_checkscCsF|j}|jr!dd�|j��D�}d�dtjdg|�}||7}|S)z$Help information for the entitlementcSsg|]\}}d�||j��qS)z
  * {}: {})�formatr:)�.0r4�variant_clsr'r'r(�
<listcomp>�s��z+UAEntitlement.help_info.<locals>.<listcomp>�
z

)�	help_text�variants�items�joinr�CLI_HELP_VARIANTS_HEADER)r&rK�
variant_items�variant_textr'r'r(�	help_info�s���zUAEntitlement.help_info.cCr0)Nr'r'r1r'r'r(�static_affordances��z UAEntitlement.static_affordancescC�|jS)a
        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_servicesr1r'r'r(�incompatible_services��z#UAEntitlement.incompatible_servicescCrU)a
        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_servicesr1r'r'r(�required_services�rXzUAEntitlement.required_servicescCrU)a
        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_servicesr1r'r'r(�dependent_services�s	z UAEntitlement.dependent_servicescC�iSr%r'r1r'r'r(�
_get_variants�szUAEntitlement._get_variantscCsPt�}|��}|�di��dg�}|D]}|�di��d�}|r%|�|�q|S)zV
        Fetch all available variants defined in the Contract Server response
        r"�	overrides�selector�variant)�set�_base_entitlement_cfgrB�add)r&�valid_variantsrAr_�overriderar'r'r(�_get_contract_variants�s
�z$UAEntitlement._get_contract_variantscCs`|��}|��}d|vrd|di}ni}t|�D]}||vr%||||<qt|�dkr.|SiS)N�generic�)r^rg�sorted�len)r&�service_variants�contract_variantsrerar'r'r(�_get_valid_variants�s�z!UAEntitlement._get_valid_variantscCs|jriS|��S)zf
        Return a list of services that are considered a variant
        of the main service.
        )r=rnr1r'r'r(rL�szUAEntitlement.variantscs$�jsiS�fdd������D�S)zw
        On a variant, return the other variants of the main service.
        On a non-variant, returns empty.
        cs i|]\}}|�jkr||�qSr')r4)rGr2�clsr1r'r(�
<dictcomp>�s

�z0UAEntitlement.other_variants.<locals>.<dictcomp>)r=rnrMr1r'r1r(�other_variants�s


�zUAEntitlement.other_variantscCsZ|j��D]%}|jdkr
q||j|j|j|j|jd�}|��\}}|t	j
kr*|SqdS)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)
        rh)r>�
assume_yes�
allow_beta�called_name�access_onlyN)rL�valuesr4r>rrrs�_called_nameru�application_statusr�ENABLED)r&rHra�status�_r'r'r(�enabled_variant�s
�
�zUAEntitlement.enabled_variantcCr]r%r'r1r'r'r(�	messagingrTzUAEntitlement.messagingr>rrrsrtru�purge�
extra_argscCsV|st��}||_||_||_||_||_|dur||_ng|_||_d|_	d|_
dS)z]Setup UAEntitlement instance

        @param config: Parsed configuration dictionary
        NF)r�UAConfigr>rrrsrur~rrw�_valid_service�_is_sources_list_updated)r&r>rrrsrtrur~rr'r'r(r)s
zUAEntitlement.__init__cCs.|jdur|jp|jpt|jjd�|_|jS)z2Check if the service is marked as valid (non-beta)Nzfeatures.allow_beta)r��is_betarsr r>r1r'r'r(�
valid_service5s
��zUAEntitlement.valid_servicecCst�|jjj�|ji��Sr%)�copy�deepcopyr>r?�entitlementsrBr2r1r'r'r(rcAs�z#UAEntitlement._base_entitlement_cfgcCs*|��}|jr	|s|Stj||jd�|S)N)�orig_accessra)rcr=r
�apply_contract_overridesr4�r&rAr'r'r(rAFs
�zUAEntitlement.entitlement_cfgcCs"|��rt�d|j�t�|j�|��tj	ks'dt
tjt
jj|jd�d�fS|��\}}|tjkrAdt
tjt
jj|jd�d�fS|jsKdt
tj�fS|��\}}|tjkr_dt
tj|d�fS|jrm|��rmdt
tj�fS|jr{|��s{dt
tj�fS|j s�|j!r�dt
tj"t
j#j|jd��fSdS)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�r9��messagerD)$�is_access_expired�LOG�debugr2r
�refreshr>�contract_statusr�ENTITLEDrr�NOT_ENTITLEDr�
UNENTITLEDrFr9rxr�DISABLED�ALREADY_ENABLEDr��IS_BETA�applicability_statusr�INAPPLICABLErW�detect_incompatible_services�INCOMPATIBLE_SERVICErZ�check_required_services_active�INACTIVE_REQUIRED_SERVICES�supports_access_onlyru�ACCESS_ONLY_NOT_SUPPORTED� ENABLE_ACCESS_ONLY_NOT_SUPPORTED)r&rxr{r��detailsr'r'r(�
can_enableSsf	��
��
���������
zUAEntitlement.can_enable�silentc	Cs|j�dg�}t�|�sdS|��\}}|sL|durdS|jtjkr2|��\}}|s1||_	d|fSn|jtj
krH|��\}}|sG||_	d|fSnd|fS|j�dg�}t�|�sZdS|jsi|�
�scdS|��sidS|j|d�}|ssdS|j�dg�}t�|�s�dSdS)	aNEnable 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.
        �pre_can_enable�FNNF�
pre_enable�r��post_enablerD)r}rBr�handle_message_operationsr��reasonrr��handle_incompatible_servicesr�r��_enable_required_servicesru�handle_required_snaps�handle_required_packages�_perform_enable)	r&r��msg_opsr��fail�incompat_ret�error�req_ret�retr'r'r(�enable�sJ
���

zUAEntitlement.enablec	
Cs�|j�di��di��d�}|durdSt��s&t�tjjdd��t�	�t�
�s`t�tjjdd��zt�d�Wn$tj
y_}ztjd	|d
�t�tjjdd��WYd}~nd}~wwt��t�d
|jjtj�}t�d|jjtj�}tj||tjd�|r�t�tj�t|dd�d�D]4}|d}zt�|�Wq�tjy�|�dd�}|�d�}t�tjj|d��tj|||d�Yq�wdS)z. "install snaps necessary to enable a service.r"�
directives�
requiredSnapsNT�snapd��packagesz
snapd snapz!Failed to install snapd as a snap)�exc_infozsnap install snapd)�commandr�https)�
http_proxy�https_proxy�retry_sleepscSs
|�d�S)Nr2�rB)�xr'r'r(�<lambda>s
z5UAEntitlement.handle_required_snaps.<locals>.<lambda>)�keyr2�classicConfinementSupportF�channel)r)r��classic_confinement_support) rArBr�is_snapd_installed�event�infor�INSTALLING_PACKAGESrF�
install_snapd�is_snapd_installed_as_a_snap�install_snapr�ProcessExecutionErrorr��warning�EXECUTING_COMMAND_FAILED�run_snapd_wait_cmdr�validate_proxyr>r��PROXY_VALIDATION_SNAP_HTTP_URLr��PROXY_VALIDATION_SNAP_HTTPS_URL�configure_snap_proxy�SNAP_INSTALL_RETRIES�INSTALLING_REQUIRED_SNAPSrj�
get_snap_info�SnapNotInstalledError� INSTALLING_REQUIRED_SNAP_PACKAGE)	r&�required_snaps�er�r��snap_pkg�	snap_namer�r�r'r'r(r��sv����������
��
��z#UAEntitlement.handle_required_snapscCsn|j�di��di��d�}|sdS|��dd�|D�}t�d|�t�tjj	d�
|�d	��t�|�dS)
�/install packages necessary to enable a service.r"r��requiredPackagesTcSsg|]}|d�qS�r2r'�rG�packager'r'r(rI8sz:UAEntitlement.handle_required_packages.<locals>.<listcomp>zInstalling packages %r� r�)
rArB�_update_sources_listr�r�r�r�rr�rFrNr�run_apt_install_command)r&�required_packages�
package_namesr'r'r(r�)s ���
z&UAEntitlement.handle_required_packagescCsv|j�di��di��d�}|sdSdd�|D�}t�d|�d�|�}t�tjj	|d	��t
�|tjj	|d	��dS)
r�r"r�r�TcSs g|]}|�dd�r|d�qS)�removeOnDisableFr2r�r�r'r'r(rIPs
��zCUAEntitlement.handle_removing_required_packages.<locals>.<listcomp>zUninstalling packages %rr�r�)
rArBr�r�rNr�r�r�UNINSTALLING_PACKAGESrFr�remove_packages�UNINSTALLING_PACKAGES_FAILED)r&r�r��package_names_strr'r'r(�!handle_removing_required_packagesCs*��
���z/UAEntitlement.handle_removing_required_packagescCr0)a
        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.
        Nr'�r&r�r'r'r(r�cs	zUAEntitlement._perform_enablecCs2|jD]}||j���\}}|tjkrdSqdS)z�
        Check for depedent services.

        :return:
            True if there are dependent services enabled
            False if there are no dependent services enabled
        TF)r\r>rxrry)r&�dependent_service_cls�
ent_statusr{r'r'r(�detect_dependent_servicesns
��
�z'UAEntitlement.detect_dependent_servicescCs2|jD]}||j���\}}|tjkrdSqdS)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
        FT)rZr>rxrry)r&�required_service_clsr�r{r'r'r(r�s

�z,UAEntitlement.check_required_services_activecCs<g}|jD]}|�|j���\}}|tjkr|�|�q|S)zI
        :return: List of incompatible services that are enabled
        )rWr"r>rxrryr7)r&r��servicer�r{r'r'r(�blocking_incompatible_services�s


�z,UAEntitlement.blocking_incompatible_servicescCst|���dkS)z�
        Check for incompatible services.

        :return:
            True if there are incompatible services enabled
            False if there are no incompatible services enabled
        r)rkr�r1r'r'r(r��sz*UAEntitlement.detect_incompatible_servicescCs�tj|jjdd�}|��D]M}|j|jdd�}tjj|j|jd�}tj	j|j|jd�}|r3d|fStj
||jd�sAd|fSt�
tjj|jd��|jdd	�}|sZ|d
fSq
dS)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_valueT)rr)�service_being_enabled�incompatible_serviceF��msgrr�r�r�NrD)rr r>r�r"rr�rFr9�!INCOMPATIBLE_SERVICE_STOPS_ENABLE�prompt_for_confirmationrrr�r��DISABLING_INCOMPATIBLE_SERVICE�disable)r&�cfg_block_disable_on_enabler��ent�user_msg�e_msgr�r'r'r(r��s<�������z*UAEntitlement.handle_incompatible_servicesc
Cs�|jD]k}||jdd�}|��dtjk}|rntjj|j|jd�}tj	j|j|jd�}t
j||jd�s9d|fSt
�tjj|jd��|jdd�\}}|snd	}|r_|jr_|jjr_d
|jj}tjj||jd�}	||	fSqdS)
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.
        T)rsr)r��required_servicer�Fr�r�r.rJ)r�r�rD)rZr>rxrr�r�REQUIRED_SERVICErFr9�REQUIRED_SERVICE_STOPS_ENABLErrrrr�r��ENABLING_REQUIRED_SERVICEr�r�r��ERROR_ENABLING_REQUIRED_SERVICE)
r&r�r�is_service_disabledrrr�r��	error_msgr�r'r'r(r��sB

��������z'UAEntitlement._enable_required_services�ignore_dependent_servicescCs�|��\}}|tjkrdttjtjj|jd�d�fS|j	r*|s*|�
�r*dttj�fS|js>|j
r>dttjtjj|jd��fSdS)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�rD)rxrr�rr�ALREADY_DISABLEDrrFr9r\r��ACTIVE_DEPENDENT_SERVICES�supports_purger~�PURGE_NOT_SUPPORTED�DISABLE_PURGE_NOT_SUPPORTED)r&rrxr{r'r'r(�can_disable
s2	
��
�����
zUAEntitlement.can_disablecCs�|j�dg�}t�|�sdS|��\}}|s8|durdS|jtjkr4|j|d�\}}|s3||_	d|fSnd|fS|j
|d�s@dS|��sFdS|j�dg�}t�|�sTdS|jd|d�d	S)
a�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.
        �pre_disabler�Nr�F�post_disablezdisable operation)�	operationr�rD)
r}rBrr�rr�rr�_disable_dependent_servicesr��_perform_disabler��_check_for_reboot_msg)r&r�r�rr�r�r�r'r'r(r7s6
��
�zUAEntitlement.disablecCr0)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.
        Nr'r�r'r'r(rhszUAEntitlement._perform_disablecCs�|jD]m}||jdd�}|��dtjk}|rptjj|j|jd�}tj	j|j|jd�}t
j||jd�s9d|fS|sFt
�tjj|jd��|jdd	�\}}|spd
}	|ra|jra|jjrad|jj}	tjj|	|jd�}
d|
fSqd
S)ay
        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
        T)r>rrr)�dependent_service�service_being_disabled)rrr�F)rr�r.rJ)r�rrD)r\r>rxrryr�DEPENDENT_SERVICErFr9�DEPENDENT_SERVICE_STOPS_DISABLErrrrr�r��DISABLING_DEPENDENT_SERVICErr�r��"FAILED_DISABLING_DEPENDENT_SERVICE)r&r�r�r�is_service_enabledrrr�r�r
r�r'r'r(rusD
��������z)UAEntitlement._disable_dependent_servicescCst��S)z%Check if system needs to be rebooted.)r�
should_rebootr1r'r'r(�_check_for_reboot�szUAEntitlement._check_for_rebootrcCs,|��r|st�tjj|d��dSdSdS)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
        )rN)r#r�r�r�ENABLE_REBOOT_REQUIRED_TMPLrF)r&rr�r'r'r(r�s���z#UAEntitlement._check_for_reboot_msgcCs*|j}|stjtjfS|jD]\}}}|�|krtj|fSq|d�di�}|�dd�}|jrR|durRt	�
�|vrRt�|�}tjtj
j|jt	�
�d�|�d�fS|�dd�}|jru|durut	��j|vrutjtjj|jt	��jd�fSt	��}	|�d	d�}
|�d
d�}|jr�|
dur�|	j|
vr�tjtjj|j|	jd�|
�d�fS|jr�|r�|	jdur�|	jdur�tjj|j|	j|d�}z|�d
�\}
}t |
�}t |�}Wnt!y�t"�#d|�tj|fYSw|	j|kr�tj|fS|	j|kr�|	j|kr�tj|fS|�di�}|�$|�\}}|�stj|fStjdfS)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, )r9�arch�supported_arches�series)r9r(�
kernelFlavors�minKernelVersion)r9�kernel�supported_kernels)r9r+�
min_kernel�.z$Could not parse minKernelVersion: %s�platformChecks)%rAr�
APPLICABLEr�"NO_ENTITLEMENT_AFFORDANCES_CHECKEDrSr�rB�affordance_check_archr�
get_dpkg_archr�deduplicate_arches�INAPPLICABLE_ARCHrFr9rN�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�split�int�
ValueErrorr�r�rE)r&rA�
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�r'r'r(r��s��
��
������
��	��

���






z"UAEntitlement.applicability_statuscCs6t|j�js	tjS|j}|r|d�d�rtjStjS)z=Return whether the user is entitled to the entitlement or notr"�entitled)rr>�is_attachedrr�rArBr�r�r'r'r(r�*szUAEntitlement.contract_statuscCs�|��\}}|tjkrtj|fS|j}|s tjtjj	|j
d�fS|d�dd�dur5tjtjj	|j
d�fS|��\}}|t
jkrEtj|fS|��\}}|rRtj|fStj|fS)z4Return (user-facing status, details) for entitlementr�r"rUF)r�rr0rr�rA�UNAVAILABLEr�SERVICE_NOT_ENTITLEDrFr9rBrxrr��INACTIVE�enabled_warning_status�WARNING�ACTIVE)r&�
applicabilityr�rArx�explanationr��warn_msgr'r'r(�user_facing_status3s&

��



z UAEntitlement.user_facing_statuscCr0)z�
        The current status of application of this entitlement

        :return:
            A tuple of (ApplicationStatus, human-friendly reason)
        Nr'r1r'r'r(rxR�
z UAEntitlement.application_statuscCr0)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�r'r1r'r'r(rZ^raz$UAEntitlement.enabled_warning_statuscCsdSr%r'r1r'r'r(�status_description_overridejr5z)UAEntitlement.status_description_overridecCs4|j�d�}|s
dSt�|d�}|t��krdSdS)z<Return entitlement access info as stale and needing refresh.�expiresFz%Y-%m-%dT%H:%M:%S.%fZT)rArBr�strptime�utcnow)r&�
expire_str�expiryr'r'r(r�oszUAEntitlement.is_access_expiredcCsl|j�d�}|dur
tjS|�dg�}|D]}|�d�|jkr2|�d�}|dkr-tjStjSqtjS)z6Check on the state of application on the status cache.�status-cacheN�servicesr2rz�enabled)r>�
read_cacherr�rBr2ry)r&�status_cache�services_status_listr��service_statusr'r'r(�"_check_application_status_on_cachezs


�z0UAEntitlement._check_application_status_on_cache�obligations�
resourceTokencCst|�d�o|�S)N�enableByDefault)�boolrB)r&rprqr'r'r(�_should_enable_by_default�sz'UAEntitlement._should_enable_by_defaultr��deltas�allow_enablecCs�|sdS|�di�}|�di�}|j�d�}t|tjk�}|s9|r*t�|�|d}|r9d|vr9|ddtjfv}|r�|rD|rD|��}n|�	�\}}	|t
jkr~|��rnt
�d�|��d�|j�}
t�tjj|jd	��nt
�d
�t�tjj|jd	��|j�d�|j��dS|�d�}|s�|�d�}|�d
i�}|�||�}
|
r�d|_|��\}}	|r�|
r�|r�tjj|jd�}
tj|
tjd�|��dStjj|jd�}
tj|
tjd�dSdS)auProcess 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.

        :return: True when delta operations are processed; False when noop.
        :raise: UbuntuProError when auto-enable fails unexpectedly.
        Tr"r�rhrUFz3Disabling %s after refresh transition to unentitledz.Due to contract refresh, '{}' is now disabled.r�z8Cannot disable %s after refresh transition to unentitledzmachine-access-{}rqrpr�)�	file_type) rBr>rkrsr�DROPPED_KEYr
r�rorxrr�rr�r�rrFr2r�r�DISABLE_DURING_CONTRACT_REFRESHr��)UNABLE_TO_DISABLE_DURING_CONTRACT_REFRESH�delete_cache_keyrtrsr��ENABLE_BY_DEFAULT_TMPL�sys�stderrr��ENABLE_BY_DEFAULT_MANUAL_TMPL)r&r�rurv�delta_entitlement�delta_directivesrl�transition_to_unentitledrxr{r�rq�delta_obligations�enable_by_defaultr�r'r'r(�process_contract_deltas�s�
�

�������

���z%UAEntitlement.process_contract_deltascCs2|jrdSt�tjjdd��t�d�d|_dS)Nzstandard Ubuntur�z/etc/apt/sources.listT)r�r�r�r�APT_UPDATING_LISTrFr�update_sources_listr1r'r'r(r��s


z"UAEntitlement._update_sources_list)NFFr.FFN)F)_r*r+r,�help_doc_urlrrr�r�rrKrVrYr[r2r6r?r;r=�property�abc�abstractmethod�strr2r4rr8r9r:r6rrrrsrrr-rErRrrSr!rWr	rZr\r^rrgrnrLrqr|rr}rr�r)r�rcrArr�r
r�r�r�r�r�r�r�r�r�r�r�rrrrrr#rrr�rr�rr`rrxrZrbr�rortr�r�r'r'r'r(r#0sX
�
�
		
	
�������
�	
�

O��
�AH 


�6
�4��
�+��
�1�
�9���
�
�i	
��
�
�
��
�	�
�
��
�cr#)�	metaclass)2r�r��loggingr}r�typingrrrrrrr	r
�uaclientrrr
rrrrrrr�(uaclient.api.u.pro.status.is_attached.v1r�(uaclient.entitlements.entitlement_statusrrrrrrrr�uaclient.typesrr�
uaclient.utilr �get_event_loggerr��	getLogger�replace_top_level_logger_namer*r�r!�ABCMetar#r'r'r'r(�<module>s(0(


Youez - 2016 - github.com/yon3zu
LinuXploit