Ë
    GKÕii;  ã                   óJ  — d dl Zd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZmZmZmZmZmZ d dlmZmZ d dlmZmZ d dlmZmZmZmZ dZdZdZd	Zd
Z  ejB                   ejD                  e#«      «      Z$ edde%fdee&e&f   fde'fg«      Z( edde%fdee&e&f   fde&fdee&ef   fdee   fg«      Z)de&de*fd„Z+de&dee&   de&dee&   fd„Z,i a-dee&   dee&   ddfd„Z.dee&e&f   fd„Z/dej`                  jb                  dee&e&f   fd„Z2	 d1dejf                  dee%   de(fd „Z4d!„ Z5d"„ Z6	 	 d2dejf                  dee%   dee&   de(fd#„Z7dee   fd$„Z8de&fd%„Z9	 d2de&dee%   dee'e&f   fd&„Z:di ddd'fde&d(ee'   dee&e&f   d)ee&   dee%   d*e*de)fd+„Z;	 d3d,e&d-e&d.e&d/e&de)f
d0„Z<y)4é    N)ÚAnyÚDictÚListÚ
NamedTupleÚOptionalÚTuple)ÚerrorÚrequest)ÚParseResultÚurlparse)ÚdefaultsÚ
exceptionsÚsystemÚutil)z169.254.169.254Úmetadataz[fd00:ec2::254]zhttp://archive.ubuntu.comzhttps://esm.ubuntu.comzhttp://api.snapcraft.iozhttps://api.snapcraft.ioÚUnparsedHTTPResponseÚcodeÚheadersÚbodyÚHTTPResponseÚ	json_dictÚ	json_listÚurlÚreturnc                 ó�   — 	 t        | «      }|j                  dvry	 |j                   y# t        $ r Y yw xY w# t        $ r Y yw xY w)NF)ÚhttpsÚhttpT)r   Ú
ValueErrorÚschemeÚport)r   Ú
parsed_urls     ú8/usr/lib/python3/dist-packages/uaclient/http/__init__.pyÚis_service_urlr#   +   s\   € ðÜ˜c“]ˆ
ð ×ÑÐ 1Ñ1ØðØ�Šð øô ò Ùðûô ò Ùðús   ‚* �9 ª	6µ6¹	AÁAÚprotocolÚproxyÚtest_urlc                 óx  — |sy t        |«      st        j                  |¬«      ‚t        j                  |d¬«      }| dk(  rMt        |«      j                  dk(  r5	 t        ||¬«      }|j                   dk(  r|S t        j                  |¬«      ‚t        j"                  | |i«      }t        j$                  |«      }	 |j'                  |«       |S # t        j                  $ r ‚ t        j                  $ r ‚ t        j                  $ r ‚ t        $ r<}t        j                  d||t        |«      «       t        j                  |¬«      ‚d }~ww xY w# t(        j*                  t        j,                  f$ rG}t        j                  d||t/        |d	t        |«      «      «       t        j                  |¬«      ‚d }~ww xY w)
N)r%   ÚHEAD)Úmethodr   ©Úhttps_proxyz:Error trying to use "%s" as pycurl proxy to reach "%s": %séÈ   z:Error trying to use "%s" as urllib proxy to reach "%s": %sÚreason)r#   r   ÚProxyInvalidUrlr
   ÚRequestr   r   Ú_readurl_pycurl_https_in_httpsÚPycurlRequiredErrorÚProxyAuthenticationFailedÚPycurlCACertificatesErrorÚ	ExceptionÚLOGr	   ÚstrÚProxyNotWorkingErrorr   ÚProxyHandlerÚbuild_openerÚopenÚsocketÚtimeoutÚURLErrorÚgetattr)r$   r%   r&   ÚreqÚresponseÚeÚproxy_handlerÚopeners           r"   Úvalidate_proxyrD   <   s†  € ñ Øä˜%Ô Ü×(Ñ(¨uÔ5Ð5ä
�/‰/˜(¨6Ô
2€Cà�7Òœx¨›×5Ñ5¸Ò@ð	?Ü5°cÀuÔMˆHð  �=‰=˜CÒØˆLä×1Ñ1¸Ô>Ð>ä×(Ñ(¨(°EÐ):Ó;€MÜ×!Ñ! -Ó0€Fð
;Ø�‰�CÔØˆøô3 ×-Ñ-ò 	ØÜ×3Ñ3ò 	ØÜ×3Ñ3ò 	ØÜò 	?Ü�I‰IØLØØÜ�A“ô	ô ×1Ñ1¸Ô>Ð>ûð	?ûô( �N‰NœEŸN™NÐ+ò ;Ü�	‰	ØHØØÜ�A�x¤ Q£Ó(ô		
ô ×-Ñ-°EÔ:Ð:ûð;ús2   ÁC Â;E ÃAEÄ7EÅEÅ#F9Å2AF4Æ4F9Ú
http_proxyr+   c           
      ó~  — i }| r| |d<   |r||d<   dj                  t        t        «      «      }dD ]r  }t        j                  j                  |«      }|sŒ%dj                  t        t        |j                  d«      «      j                  t        t        «      «      «      «      }Œt t        j                  d|«       |t        j                  d<   |t        j                  d<   |r?t        j                  |«      }t        j                  |«      }t        j                  |«       t        j                  dd	|i¬
«       |ay)aW  
    Globally configure pro-client to use http and https proxies.

    - sets global proxy configuration for urllib
    - sets the no_proxy environment variable for the current process
      which gets inherited for all subprocesses
    - sets module variable for use in https-in-https pycurl requests
      this is retrieved later using get_configured_web_proxy

    :param http_proxy: http proxy to be used by urllib. If None, it will
                       not be configured
    :param https_proxy: https proxy to be used by urllib. If None, it will
                        not be configured
    r   r   ú,)Úno_proxyÚNO_PROXYzSetting no_proxy: %srH   rI   zSetting global proxy dictÚextra)rJ   N)ÚjoinÚsortedÚUA_NO_PROXY_URLSÚosÚenvironÚgetÚsetÚsplitÚunionr5   Údebugr
   r8   r9   Úinstall_openerÚ_global_proxy_dict)rE   r+   Ú
proxy_dictrH   Úenv_varÚproxy_valuerB   rC   s           r"   Úconfigure_web_proxyrZ   q   s  € ð" €JáØ'ˆ
�6ÑáØ)ˆ
�7Ñð �x‰xœÔ/Ó0Ó1€HØ+ò ˆÜ—j‘j—n‘n WÓ-ˆÚà—x‘xÜÜ˜×)Ñ)¨#Ó.Ó/×5Ñ5´cÔ:JÓ6KÓLóó‰Hð	ô ‡I�IÐ$ hÔ/Ø%„B‡J�JˆzÑØ%„B‡J�JˆzÑÙÜ×,Ñ,¨ZÓ8ˆÜ×%Ñ% mÓ4ˆÜ×Ñ˜vÔ&ä‡I�IÐ)°'¸:Ð1F€IÔGà#Ñó    c                  ó   — t         S ©N)rV   © r[   r"   Úget_configured_web_proxyr_   ¢   s   € ÜÐr[   c                 ór   — | j                  «       D ��ci c]  \  }}|j                  «       |“Œ c}}S c c}}w r]   )ÚitemsÚlower)r   ÚkÚvs      r"   Ú_headers_to_dictre   ¦   s*   € à&-§m¡m£o×6™U˜Q ˆA�G‰G‹I�q‰LÓ6Ð6ùÓ6s   ”3r?   r<   c                 óª  — 	 t        j                  | |¬«      }|j                  «       }t        |j                  t        |j                   «      |¬«      S # t        j                  $ r}|}Y d }~ŒUd }~wt        j                  $ rN}t
        j                  t        |j                  «      «       t        j                  || j                  ¬«      ‚d }~ww xY w)N©r<   )Úcauser   ©r   r   r   )r
   Úurlopenr	   Ú	HTTPErrorr=   r5   Ú	exceptionr6   r-   r   ÚConnectivityErrorÚfull_urlÚreadr   r   re   r   )r?   r<   ÚresprA   r   s        r"   Ú_readurl_urllibrq   «   s�   € ðFÜ�‰˜s¨GÔ4ˆð �9‰9‹;€DäØ�Y‰YÜ  §¡Ó.Øôð øô �?‰?ò Ø�ûÜ�>‰>ò FÜ�‰”c˜!Ÿ(™(“mÔ$Ü×*Ñ*°¸¿¹ÔEÐEûðFús$   ‚A ÁCÁ'A.Á.CÂA	CÃCc                 óî   — t        |«      }t        | «      }|j                  dk(  xr7 t        j                  |j
                  «       xr |duxr |j                  dk(  }t        j                  d|«       |S )aµ  
    We only want to use pycurl if all of the following are true

    - The target url scheme is https
    - The target host is not in no_proxy
    - An https_proxy is configured either via pro's config or via environment
    - The https_proxy url scheme is https

    urllib.request provides some helpful functions that we re-use here.

    This function also returns the https_proxy to use, since it is calculated
    here anyway.
    r   NzShould use pycurl: %r)r   Ú_parse_https_proxyr   r
   Úproxy_bypassÚhostnamer5   rT   )r+   Ú
target_urlÚparsed_target_urlÚparsed_https_proxyÚrets        r"   Úshould_use_pycurlrz   À   s‚   € ô ! Ó,ÐÜ+¨KÓ8Ðà× Ñ  GÑ+ò 	1Ü×$Ñ$Ð%6×%?Ñ%?Ó@Ð@ò	1à dÐ*ò	1ð ×%Ñ%¨Ñ0ð	 ô ‡I�IÐ% sÔ+Ø€Jr[   c                 óF  — d }d }t        | j                  «      dkD  r| j                  d   }t        | j                  «      dkD  r| j                  d   }||k(  r|rd|v rt        j                  «       ‚||k(  rt        j                  |¬«      ‚t        j
                  | ¬«      ‚)Nr   é   Ú407©r   )rA   )ÚlenÚargsr   r2   r3   ÚPycurlError)r	   r   Úauthentication_error_codeÚca_certificates_error_coder   Úmsgs         r"   Ú_handle_pycurl_errorr…   Ú   s“   € ð €DØ
€CÜ
ˆ5�:‰:ƒ˜ÒØ�z‰z˜!‰}ˆÜ
ˆ5�:‰:ƒ˜ÒØ�j‰j˜‰mˆØÐ(Ò(©S°U¸c±\Ü×2Ñ2Ó4Ð4Ø	Ð+Ò	+Ü×2Ñ2°sÔ;Ð;ä×$Ñ$ uÔ-Ð-r[   c                 óÔ  ‡— 	 dd l }|j	                  «       }| j                  «       j                  «       }|dk(  r|j                  |j                  d«       n�|dk(  r|j                  |j                  d«       nn|dk(  rO|j                  |j                  d«       | j                  rA|j                  |j                  | j                  «       nt        dj                  |«      «      ‚|j                  |j                  | j!                  «       «       | j#                  «       D ��cg c]  \  }}dj                  ||«      ‘Œ }}}t%        |«      dkD  r|j                  |j&                  |«       |j                  |j(                  d«       |j                  |j*                  t,        j.                  «       |r|j                  |j0                  |«       |rXt3        |«      }	|	r|	j5                  «       nd }|j                  |j6                  |«       |j                  |j8                  d«       nt:        j=                  d	«       t?        j@                  «       }
|j                  |jB                  |
«       i Šˆfd
„}|j                  |jD                  |«       	 |jG                  «        tQ        |jS                  |jT                  «      «      }|
jW                  «       }|jY                  «        t[        |‰|¬«      S # t        $ r t        j                  «       ‚w xY wc c}}w # |jH                  $ r;}tK        || j!                  «       |jL                  |jN                  ¬«       Y d }~Œ¾d }~ww xY w)Nr   ÚGETTr(   ÚPOSTz5HTTP method "{}" not supported in HTTPS-in-HTTPS modez{}: {}é   z1in pycurl request function without an https proxyc                 óÂ   •— | j                  d«      } d| vry | j                  dd«      \  }}|j                  «       j                  «       }|j                  «       }|‰|<   y )Nz
iso-8859-1ú:r|   )ÚdecoderR   Ústriprb   )Úheader_lineÚname_rawÚ	value_rawÚnameÚvaluer   s        €r"   Úsave_headerz3_readurl_pycurl_https_in_https.<locals>.save_header(  s_   ø€ Ø!×(Ñ(¨Ó6ˆØ�kÑ!ØØ)×/Ñ/°°QÓ7Ñˆ�)Ø�~‰~Ó×%Ñ%Ó'ˆØ—‘Ó!ˆØˆ�Šr[   )r   r‚   rƒ   ri   ).ÚpycurlÚImportErrorr   r1   ÚCurlÚ
get_methodÚupperÚsetoptÚHTTPGETÚNOBODYrˆ   ÚdataÚCOPYPOSTFIELDSr   ÚformatÚURLÚget_full_urlÚheader_itemsr   Ú
HTTPHEADERÚFOLLOWLOCATIONÚCAINFOr   ÚSSL_CERTS_PATHÚTIMEOUTrs   ÚgeturlÚPROXYÚ	PROXYTYPEr5   ÚwarningÚioÚBytesIOÚ	WRITEDATAÚHEADERFUNCTIONÚperformr	   r…   ÚE_RECV_ERRORÚE_SSL_CACERT_BADFILEÚintÚgetinfoÚRESPONSE_CODEÚgetvalueÚcloser   )r?   r<   r+   r”   Úcr)   r‘   ÚvalÚheader_str_listrx   Úbody_outputr“   rA   r   r   r   s                  @r"   r0   r0   ë   sÌ  ø€ ð
/Ûð 	�‰‹€Að �^‰^Ó×#Ñ#Ó%€FØ�‚Ø	�‰�—‘ Õ&Ø	�6Ò	Ø	�‰�—‘ Õ%Ø	�6Ò	Ø	�‰�—‘˜dÔ#Ø�8Š8Ø�H‰H�V×*Ñ*¨C¯H©HÕ5äØC×JÑJØóó
ð 	
ð ‡H�HˆV�Z‰Z˜×)Ñ)Ó+Ô,ð 58×4DÑ4DÓ4F÷Ù'0 t¨Sˆ�‰˜˜cÕ"ð€Oñ ô ˆ?Ó˜aÒØ	�‰�×"Ñ" OÔ4ð ‡H�HˆV×"Ñ" DÔ)Ø‡H�HˆV�]‰]œH×3Ñ3Ô4ÙØ	�‰�—‘ Ô)ñ Ü/°Ó<Ðá+=Ð×%Ñ%Ô'À4ð 	ð 	
�‰�—‘˜{Ô+Ø	�‰�×!Ñ! 1Õ%ä�‰ÐGÔHô —*‘*“,€KØ‡H�HˆV×Ñ˜{Ô+Ø€Gôð ‡H�HˆV×"Ñ" KÔ0ð
Ø	�	‰	Œô ˆq�y‰y˜×-Ñ-Ó.Ó/€DØ×ÑÓ!€Dà‡G�G„IäØØØôð øôc ò /Ü×,Ñ,Ó.Ð.ð/üó4øðT �<‰<ò 
ÜØØ× Ñ Ó"Ø&,×&9Ñ&9Ø'-×'BÑ'B÷		
ò 	
ûð
ús)   ƒK6 Ä$LÊL Ë6LÌM'Ì,1M"Í"M'c                 ój   — | s#t        j                  «       j                  d«      } | rt        | «      S d S )Nr   )r
   Ú
getproxiesrP   r   r*   s    r"   rs   rs   J  s0   € ÙÜ×(Ñ(Ó*×.Ñ.¨wÓ7ˆÙ$/Œ8�KÓ Ð9°TÐ9r[   c                 óþ   — | j                   j                  d«      }i }|si }nJt        j                  j	                  |«      si }n(t        j                  t        j                  |«      «      }|j                  |g «      S )NÚserviceclient_url_responses)	ÚfeaturesrP   rN   ÚpathÚexistsÚjsonÚloadsr   Ú	load_file)Úcfgr   Úresponse_overlay_pathÚresponse_overlays       r"   Ú_get_overlay_datarÈ   P  sl   € ØŸL™L×,Ñ,Ð-JÓKÐàÐÙ ØÑÜ�W‰W�^‰^Ð1Ô2ØÑäŸ:™:¤f×&6Ñ&6Ð7LÓ&MÓNÐà×Ñ  RÓ(Ð(r[   c                 óÀ  — t        | |«      }|rH|j                  d«      }t        j                  |d   d   «      5 }|j	                  «       dfcd d d «       S t        |«      st        j                  |¬«      ‚t        j                  dj                  |«      «       t        «       j                  d«      }i }|r||d<   t        ||«      r‚t        t        j                   ||¬	«      ||¬
«      }|j"                  dk(  rt        j$                  |¬«      ‚t        j&                  |j(                  «      |j*                  j                  d«      fS t        j                   ||¬	«      }		 t        j,                  |	«      5 }t        j                  |«      5 }|j	                  «       |j*                  j                  d«      fcd d d «       cd d d «       S # 1 sw Y   �Œ€xY w# 1 sw Y   nxY w	 d d d «       y # 1 sw Y   y xY w# t.        j0                  $ rN}
|
j"                  dk(  rt        j$                  |¬«      ‚|
j"                  dk(  rt        j2                  «       ‚‚ d }
~
ww xY w)Nr   r@   Ú	file_pathÚ r~   zURL [GET]: {}r   zIf-None-Match)r   ©r<   r+   i0  ÚetagÚETagi”  )rÈ   ÚpopÚlzmar:   ro   r#   r   Ú
InvalidUrlr5   rT   rž   r_   rP   rz   r0   r
   r/   r   ÚETagUnchangedÚ
decompressr   r   rj   r	   rk   ÚVulnerabilityDataNotFound)rÅ   r   r<   rÍ   Úoverlay_responser@   Úfr+   r   r?   rA   s              r"   Údownload_xz_file_from_urlr×   ^  s  € ô )¨¨cÓ2ÐÙà#×'Ñ'¨Ó*ˆÜ�Y‰Y�x 
Ñ+¨KÑ8Ó9ð 	"¸QØ—F‘F“H˜b�>÷	"ñ 	"ô ˜#ÔÜ×#Ñ#¨Ô,Ð,ä‡I�Iˆo×$Ñ$ SÓ)Ô*ä*Ó,×0Ñ0°Ó9€KØ€GÙØ#'ˆ�Ñ ä˜ cÔ*Ü1Ü�O‰O˜C¨Ô1ØØ#ô
ˆð �=‰=˜CÒÜ×*Ñ*¨sÔ3Ð3ô �O‰O˜HŸM™MÓ*Ø×Ñ× Ñ  Ó(ð
ð 	
ô
 �o‰o˜c¨7Ô3ˆð	Ü—‘ Ó%ð ¨Ü—Y‘Y˜xÓ(ð ¨AàŸ™›Ø ×(Ñ(×,Ñ,¨VÓ4ð÷ð ÷ñ ÷=	"ñ 	"ú÷>ð úð ÷÷ ñ ûô �‰ò 	Ø�v‰v˜Š}Ü ×.Ñ.°3Ô7Ð7Ø�v‰v˜Š}Ü ×:Ñ:Ó<Ð<àûð	ús`   »GÅ$G< Å9G0Æ+GÆ:	G0Ç	G< ÇGÇG#	ÇG0Ç'G< Ç0G9Ç5G< Ç9G< Ç<IÈA	IÉITrœ   r)   Úlog_response_bodyc           
      óð  — t        | «      st        j                  | ¬«      ‚|r|sd}t        j                  | |||¬«      }dj                  t        |«      D �cg c]  }dj                  |||   «      ‘Œ c}«      }t        j                  dj                  |xs d| ||r|j                  d«      nd «      «       t        «       j                  d	«      }	t        |	| «      rt        |||	¬
«      }
nt        ||¬«      }
|
j                   j                  dd¬«      }i }g }d|
j"                  j                  dd«      v rjt%        j&                  |t(        j*                  ¬«      }t-        |t.        «      r|}n2t-        |t0        «      r|}nt        j3                  dt5        |«      «       dj                  t        |
j"                  «      D �cg c]!  }dj                  ||
j"                  |   «      ‘Œ# c}«      }dj                  |xs d| |«      }|r)|
j                   }|r|}n|r|}|dj                  |«      z  }t        j                  |«       t7        |
j8                  |
j"                  |||¬«      S c c}w c c}w )Nr~   rˆ   )rœ   r   r)   z, z
'{}': '{}'z'URL [{}]: {}, headers: {{{}}}, data: {}r‡   úutf-8r   rÌ   rg   Úignore©Úerrorsúapplication/jsonúcontent-typerË   ©Úclsúunexpected JSON response: %sz&URL [{}] response: {}, headers: {{{}}}z
, data: {}©r   r   r   r   r   )r#   r   rÑ   r
   r/   rK   rL   rž   r5   rT   rŒ   r_   rP   rz   r0   rq   r   r   rÂ   rÃ   r   ÚDatetimeAwareJSONDecoderÚ
isinstanceÚdictÚlistrª   r6   r   r   )r   rœ   r   r)   r<   rØ   r?   rc   Úsorted_header_strr+   rp   Údecoded_bodyr   r   Ú	json_bodyÚ	debug_msgÚbody_to_logs                    r"   Úreadurlrí   ’  s1  € ô ˜#ÔÜ×#Ñ#¨Ô,Ð,á‘FØˆÜ
�/‰/˜# D°'À&Ô
I€CàŸ	™	Ü5;¸G³_ÖE°ˆ×	Ñ	˜Q ¨¡
Õ	+ÒEóÐô ‡I�IØ1×8Ñ8ØŠO�eØØÙ$(ˆD�K‰K˜Ô ¨dó		
ôô +Ó,×0Ñ0°Ó9€KÜ˜ cÔ*Ü-Ø˜¨kô
‰ô ˜s¨GÔ4ˆà—9‘9×#Ñ# G°HÐ#Ó=€Là€IØ€IØ˜TŸ\™\×-Ñ-¨n¸bÓAÑAÜ—J‘J˜|´×1NÑ1NÔOˆ	Ü�i¤Ô&Ø!‰IÜ˜	¤4Ô(Ø!‰Iä�K‰KÐ6¼¸I»ÔGàŸ	™	Ü:@ÀÇÁÓ:NÖO°Qˆ×	Ñ	˜Q §¡¨Q¡Õ	0ÒOóÐð 9×?Ñ?ØŠ�%˜Ð/ó€Iñ à—i‘iˆÙØ#‰KÙØ#ˆKØ�\×(Ñ(¨Ó5Ñ5ˆ	Ü‡I�IˆiÔäØ�Y‰YØ—‘ØØØôð ùòa 	FùòB 	Ps   ÁI.Ç&I3Úsocket_pathÚhttp_methodÚ	http_pathÚhttp_hostnamec                 óX  — t        j                   t         j                  t         j                  «      }|j                  | «       t        j
                  j                  |«      }||_        	 |j                  ||«       |j                  «       }|j                  «       j                  dd¬«      }|j                  «        |j                  «        i }g }	d|j                  j                  dd«      v rjt        j                   |t"        j$                  ¬«      }
t'        |
t(        «      r|
}n2t'        |
t*        «      r|
}	nt,        j/                  dt1        |
«      «       t3        |j4                  t7        |j                  «      |||	¬	«      S # |j                  «        |j                  «        w xY w)
NrÚ   rÛ   rÜ   rÞ   rß   rË   rà   râ   rã   )r;   ÚAF_UNIXÚSOCK_STREAMÚconnectr   ÚclientÚHTTPConnectionÚsockr
   Úgetresponsero   rŒ   r¶   r   rP   rÂ   rÃ   r   rä   rå   ræ   rç   r5   rª   r6   r   Ústatusre   )rî   rï   rð   rñ   rø   Úconnrp   Úoutr   r   rê   s              r"   Úunix_socket_requestrý   Û  s<  € ô �=‰=œŸ™¬×);Ñ);Ó<€DØ‡L�L�Ôä�;‰;×%Ñ% mÓ4€DØ€D„IðØ�‰�[ )Ô,Ø×ÑÓ!ˆà�i‰i‹k× Ñ  °Ð Ó:ˆà�
‰
ŒØ�
‰
Œà€IØ€IØ˜TŸ\™\×-Ñ-¨n¸bÓAÑAÜ—J‘J˜s¬×(EÑ(EÔFˆ	Ü�i¤Ô&Ø!‰IÜ˜	¤4Ô(Ø!‰Iä�K‰KÐ6¼¸I»ÔGäØ�[‰[Ü  §¡Ó.ØØØôð øð 	�
‰
ŒØ�
‰
�ús   Á+AF Æ"F)r]   )NN)Ú	localhost)=Úemail.messageÚemailÚhttp.clientr   r«   rÂ   ÚloggingrÐ   rN   r;   Útypingr   r   r   r   r   r   Úurllibr	   r
   Úurllib.parser   r   Úuaclientr   r   r   r   rM   ÚPROXY_VALIDATION_APT_HTTP_URLÚPROXY_VALIDATION_APT_HTTPS_URLÚPROXY_VALIDATION_SNAP_HTTP_URLÚPROXY_VALIDATION_SNAP_HTTPS_URLÚ	getLoggerÚreplace_top_level_logger_nameÚ__name__r5   r²   r6   Úbytesr   r   Úboolr#   rD   rV   rZ   r_   ÚmessageÚMessagere   r/   rq   rz   r…   r0   rs   rÈ   r×   rí   rý   r^   r[   r"   ú<module>r     s  ðÛ Û Û 	Û Û Û Û 	Û ß ?× ?ß !ß .ç 7Ó 7àEÐ Ø ;Ð Ø!9Ð Ø!:Ð Ø"<Ð à€g×ÑÐ:˜×:Ñ:¸8ÓDÓE€á!Øà	�ˆØ	�D˜˜c˜‘NÐ#Ø	�ˆðóÐ ñ Øà	�ˆØ	�D˜˜c˜‘NÐ#Ø	�ˆØ	�d˜3 ˜8‘nÐ%Ø	�d˜3‘iÐ ðó	€ð˜ð  ó ð"/;Øð/;Ø" 3™-ð/;Ø36ð/;àˆc�]ó/;ðd Ð ð.$Ø˜‘ð.$Ø,4°S©Mð.$à	ó.$ðb $ s¨C x¡.ó ð7˜eŸm™m×3Ñ3ð 7¸¸SÀ#¸X¹ó 7ð "ñØ	�‰ðà�c‰]ðð óò*ò4.ð& "Ø!%ñ\Ø	�‰ð\à�c‰]ð\ð ˜#‘ð\ð ó	\ð~: x°Ñ'<ó :ð) ó )ð 8<ñ1Øð1Ø$ S™Mð1à
ˆ5�#ˆ:Ñó1ðl !Ø Ø Ø!Ø"ñFØ	ðFà
�5‰/ðFð �#�s�(‰^ðFð �S‰Mð	Fð
 �c‰]ðFð ðFð óFðZ %ñ	&Øð&àð&ð ð&ð ð	&ð
 ô&r[   