+
    ®¾j‰?  ã                   óÌ  € R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t
^ RIt
^ RIHt ^ RIHt ^ RI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! ^ RI"H#t#H$t$ ^ R	I%H&t& ^ R
I'H(t( ^ RI)H*t* ^ RI+H,t, ^ RI-H.t. ^ RI/H0t0 ^ RI1H2t2 ^ RI3H4t4 ^RI5H6t6H7t7H8t8 ]Pr                  ! ]:4      t;]]<]<3,          t=R R lt> ! R R]?4      t@R R ltA ! R R]?4      tBR R ltCR R ltDR R ltE ! R  R!4      tF ! R" R#]4      tGR$ R% ltH]HR& R' l4       tI]! R(R)7       ! R* R+4      4       tJ ! R, R-]4      tKR8R. R/ lltLR9R0 R1 lltMR2 R3 ltN ! R4 R5]4      tO ! R6 R74      tPR# ):zO
The main purpose of this module is to expose LinkCollector.collect_sources().
N)Ú	dataclass)Ú
HTMLParser)ÚValues)ÚCallableÚDictÚIterableÚListÚMutableMappingÚ
NamedTupleÚOptionalÚProtocolÚSequenceÚTupleÚUnion)Úrequests©ÚResponse)Ú
RetryErrorÚSSLError)ÚNetworkConnectionError)ÚLink)ÚSearchScope)Ú
PipSession)Úraise_for_status)Úis_archive_file©Úredact_auth_from_url)Úvcs)ÚCandidatesFromPageÚ
LinkSourceÚbuild_sourcec                óF   € V ^8„  d   QhR\         R\        \         ,          /# )é   ÚurlÚreturn)Ústrr   )Úformats   "Ú\/home/ralf/ical-fahrzeuge/venv/lib/python3.14/site-packages/pip/_internal/index/collector.pyÚ__annotate__r(   3   s   € ÷ ñ œ3ð ¤8¬C¥=ñ ó    c                ó¸   € \         P                   FE  pV P                  4       P                  V4      '       g   K*  V \	        V4      ,          R9   g   KC  Vu # 	  R# )z_Look for VCS schemes in the URL.

Returns the matched VCS scheme, or None if there's no match.
z+:N)r   ÚschemesÚlowerÚ
startswithÚlen)r#   Úschemes   & r'   Ú_match_vcs_schemer0   3   sC   € ô
 —+”+ˆØ�9‰9‹;×!Ñ! &×)Ô)¨c´#°f³+Õ.>À$Ö.FØŠMñ ñ r)   c                   ó>   a a€ ] tR t^>t oV3R lV 3R lltRtVtV ;t# )Ú_NotAPIContentc                ó*   <€ V ^8„  d   QhRS[ RS[ RR/# )r"   Úcontent_typeÚrequest_descr$   N©r%   )r&   Ú__classdict__s   "€r'   r(   Ú_NotAPIContent.__annotate__?   s"   ø€ ÷ )ñ )¡Sð )¹ð )Àñ )r)   c                ó>   <€ \         SV `  W4       Wn        W n        R # ©N)ÚsuperÚ__init__r4   r5   )Úselfr4   r5   Ú	__class__s   &&&€r'   r<   Ú_NotAPIContent.__init__?   s   ø€ Ü‰Ñ˜Ô4Ø(ÔØ(Ör)   )r4   r5   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r<   Ú__static_attributes__Ú__classdictcell__Ú__classcell__©r>   r7   s   @@r'   r2   r2   >   s   ù‡ € ÷)÷ )ó )r)   r2   c                ó(   € V ^8„  d   QhR\         RR/# )r"   Úresponser$   Nr   )r&   s   "r'   r(   r(   E   s   € ÷ @ñ @¤ð @¨dñ @r)   c                óÊ   € V P                   P                  RR4      pVP                  4       pVP                  R4      '       d   R# \	        WP
                  P                  4      h)z 
Check the Content-Type header to ensure the response contains a Simple
API Response.

Raises `_NotAPIContent` if the content type is not a valid content-type.
úContent-TypeÚUnknownN)z	text/htmlz#application/vnd.pypi.simple.v1+htmlú#application/vnd.pypi.simple.v1+json)ÚheadersÚgetr,   r-   r2   ÚrequestÚmethod)rI   r4   Úcontent_type_ls   &  r'   Ú_ensure_api_headerrS   E   s^   € ð ×#Ñ#×'Ñ'¨¸	ÓB€Là!×'Ñ'Ó)€NØ× Ñ ð	
÷ò ñ 	ä
˜×'7Ñ'7×'>Ñ'>Ó
?Ð?r)   c                   ó   € ] tR t^[tRtR# )Ú_NotHTTP© N)r@   rA   rB   rC   rD   rV   r)   r'   rU   rU   [   s   † Ûr)   rU   c                ó4   € V ^8„  d   QhR\         R\        RR/# )r"   r#   Úsessionr$   N)r%   r   )r&   s   "r'   r(   r(   _   s!   € ÷ ñ œcð ¬Jð ¸4ñ r)   c                óÀ   € \         P                  P                  V 4      w  r#rEpVR9  d   \        4       hVP	                  V RR7      p\        V4       \        V4       R# )zá
Send a HEAD request to the URL, and ensure the response contains a simple
API Response.

Raises `_NotHTTP` if the URL is not available for a HEAD request, or
`_NotAPIContent` if the content type is not a valid content type.
T)Úallow_redirectsN>   ÚhttpÚhttps)ÚurllibÚparseÚurlsplitrU   Úheadr   rS   )r#   rX   r/   ÚnetlocÚpathÚqueryÚfragmentÚresps   &&      r'   Ú_ensure_api_responserf   _   sR   € ô -3¯L©L×,AÑ,AÀ#Ó,FÑ)€F�D ØÐ&Ô&Ü‹jÐà�<‰<˜¨Tˆ<Ó2€DÜ�TÔä�tÖr)   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r"   r#   rX   r$   )r%   r   r   )r&   s   "r'   r(   r(   q   s!   € ÷ <ñ <œcð <¬Jð <¼8ñ <r)   c                ó”  € \        \        V 4      P                  4      '       d   \        WR7       \        P                  R\        V 4      4       VP                  V RRP                  . RO4      RR/R7      p\        V4       \        V4       \        P                  R\        V 4      VP                  P                  R	R
4      4       V# )a5  Access an Simple API response with GET, and return the response.

This consists of three parts:

1. If the URL looks suspiciously like an archive, send a HEAD first to
   check the Content-Type is HTML or Simple API, to avoid downloading a
   large file. Raise `_NotHTTP` if the content type cannot be determined, or
   `_NotAPIContent` if it is not HTML or a Simple API.
2. Actually perform the request. Raise HTTP exceptions on network failures.
3. Check the Content-Type header to make sure we got a Simple API response,
   and raise `_NotAPIContent` otherwise.
©rX   zGetting page %sÚAcceptz, zCache-Controlz	max-age=0)rN   zFetched page %s as %srK   rL   )rM   z*application/vnd.pypi.simple.v1+html; q=0.1ztext/html; q=0.01)r   r   Úfilenamerf   ÚloggerÚdebugr   rO   Újoinr   rS   rN   )r#   rX   re   s   && r'   Ú_get_simple_responsero   q   s±   € ô ”t˜C“y×)Ñ)×*Ò*Ü˜SÕ2ä
‡L�LÐ"Ô$8¸Ó$=Ô>à�;‰;Øà�d—i‘iòóð( ˜[ð+
ð ó €Dô4 �TÔô �tÔä
‡L�LØÜ˜SÓ!Ø�‰×Ñ˜¨Ó3ôð €Kr)   c                óF   € V ^8„  d   QhR\         R\        \        ,          /# )r"   rN   r$   )ÚResponseHeadersr   r%   )r&   s   "r'   r(   r(   °   s   € ÷ ñ ¬ð ¼HÄS½Mñ r)   c                óÀ   € V '       dV   RV 9   dO   \         P                  P                  4       pV R,          VR&   VP                  R4      pV'       d   \	        V4      # R# )z=Determine if we have any encoding information in our headers.rK   zcontent-typeÚcharsetN)ÚemailÚmessageÚMessageÚ	get_paramr%   )rN   Úmrs   s   &  r'   Ú_get_encoding_from_headersry   °   sK   € ç�> WÔ,Ü�M‰M×!Ñ!Ó#ˆØ# NÕ3ˆˆ.ÑØ—+‘+˜iÓ(ˆßÜ�w“<ÐÙr)   c                   óV   a € ] tR t^»t o V 3R lR ltV 3R lR ltV 3R lR ltRtV tR# )	ÚCacheablePageContentc                ó"   <€ V ^8„  d   QhRRRR/# )r"   ÚpageÚIndexContentr$   NrV   )r&   r7   s   "€r'   r(   Ú!CacheablePageContent.__annotate__¼   s   ø€ ÷ ñ ˜^ð °ñ r)   c                ó:   € VP                   '       g   Q hWn        R # r:   )Úcache_link_parsingr}   ©r=   r}   s   &&r'   r<   ÚCacheablePageContent.__init__¼   s   € Ø×&×&Ð&Ð&Ð&ØŽ	r)   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r"   Úotherr$   )ÚobjectÚbool)r&   r7   s   "€r'   r(   r   À   s   ø€ ÷ Qñ Q™Fð Q¡tñ Qr)   c                ó–   € \        V\        V 4      4      ;'       d.    V P                  P                  VP                  P                  8H  # r:   )Ú
isinstanceÚtyper}   r#   )r=   r…   s   &&r'   Ú__eq__ÚCacheablePageContent.__eq__À   s0   € Ü˜%¤ d£Ó,×PÐP°·±·±À%Ç*Á*Ç.Á.Ñ1PÐPr)   c                ó    <€ V ^8„  d   QhRS[ /# ©r"   r$   )Úint)r&   r7   s   "€r'   r(   r   Ã   s   ø€ ÷ #ñ #™#ñ #r)   c                ó@   € \        V P                  P                  4      # r:   )Úhashr}   r#   ©r=   s   &r'   Ú__hash__ÚCacheablePageContent.__hash__Ã   s   € Ü�D—I‘I—M‘MÓ"Ð"r)   )r}   N)	r@   rA   rB   rC   r<   r‹   r“   rD   rE   ©r7   s   @r'   r{   r{   »   s%   ø‡ € ÷ð ÷Qð Q÷#ö #r)   r{   c                   ó2   a € ] tR t^Çt o V 3R lR ltRtV tR# )Ú
ParseLinksc                ó4   <€ V ^8„  d   QhRRRS[ S[,          /# ©r"   r}   r~   r$   ©r   r   )r&   r7   s   "€r'   r(   ÚParseLinks.__annotate__È   s   ø€ ×CÑC˜^ÐC±¹µÑCr)   c                ó   € R # r:   rV   r‚   s   &&r'   Ú__call__ÚParseLinks.__call__È   s   € Ár)   rV   N)r@   rA   rB   rC   r�   rD   rE   r•   s   @r'   r—   r—   Ç   s   ø‡ € ßCÖCr)   r—   c                ó0   € V ^8„  d   QhR\         R\         /# )r"   Úfnr$   )r—   )r&   s   "r'   r(   r(   Ë   s   € ÷ ñ ¤*ð ´ñ r)   c                ó–   a a€ \         P                  ! RR7      R V 3R ll4       o\         P                  ! S 4      R V V3R ll4       pV# )zÊ
Given a function that parses an Iterable[Link] from an IndexContent, cache the
function's result (keyed by CacheablePageContent), unless the IndexContent
`page` has `page.cache_link_parsing == False`.
N)Úmaxsizec                óF   € V ^8„  d   QhR\         R\        \        ,          /# )r"   Úcacheable_pager$   )r{   r   r   )r&   s   "r'   r(   Ú/with_cached_index_content.<locals>.__annotate__Ó   s   € ÷ -ñ -Ô 4ð -¼¼d½ñ -r)   c                 ó:   <€ \        S! V P                  4      4      # r:   )Úlistr}   )r¤   r    s   &€r'   ÚwrapperÚ*with_cached_index_content.<locals>.wrapperÒ   s   ø€ ä‘B�~×*Ñ*Ó+Ó,Ð,r)   c                ó>   € V ^8„  d   QhRRR\         \        ,          /# r™   )r   r   )r&   s   "r'   r(   r¥   ×   s   € ÷ ñ ˜nð ´´dµñ r)   c                 ól   <€ V P                   '       d   S! \        V 4      4      # \        S! V 4      4      # r:   )r�   r{   r§   )r}   r    r¨   s   &€€r'   Úwrapper_wrapperÚ2with_cached_index_content.<locals>.wrapper_wrapperÖ   s.   ø€ à×"×"Ð"ÙÔ/°Ó5Ó6Ð6Ü‘B�t“H‹~Ðr)   )Ú	functoolsÚ	lru_cacheÚwraps)r    r¬   r¨   s   f @r'   Úwith_cached_index_contentr±   Ë   sL   ù€ ô ×Ò Ô&÷-ó 'ð-ô ‡_‚_�RÓ÷ð ó ðð
 Ðr)   c                ó>   € V ^8„  d   QhRRR\         \        ,          /# r™   rš   )r&   s   "r'   r(   r(   à   s   € ÷ ñ �nð ¬´$­ñ r)   c              #  ó’  "  € V P                   P                  4       pVP                  R4      '       df   \        P                  ! V P
                  4      pVP                  R. 4       F-  p\        P                  ! W0P                  4      pVf   K)  Vx € K/  	  R# \        V P                  4      pV P                  ;'       g    RpVP                  V P
                  P                  V4      4       V P                  pVP                  ;'       g    TpVP                   F%  p	\        P                   ! W—VR7      pVf   K!  Vx € K'  	  R# 5i)zT
Parse a Simple API's Index Content, and yield its anchor elements as Link objects.
rM   ÚfilesNzutf-8)Úpage_urlÚbase_url)r4   r,   r-   ÚjsonÚloadsÚcontentrO   r   Ú	from_jsonr#   ÚHTMLLinkParserÚencodingÚfeedÚdecoder¶   ÚanchorsÚfrom_element)
r}   rR   ÚdataÚfileÚlinkÚparserr¼   r#   r¶   Úanchors
   &         r'   Úparse_linksrÆ   ß   sù   é € ð ×&Ñ&×,Ñ,Ó.€NØ× Ñ Ð!F×GÒGÜ�zŠz˜$Ÿ,™,Ó'ˆØ—H‘H˜W bÖ)ˆDÜ—>’> $¯©Ó1ˆDØŠ|ÙØŒJñ	 *ñ
 	ä˜DŸH™HÓ%€FØ�}‰}×'Ð' €HØ
‡K�K�—‘×#Ñ# HÓ-Ô.à
�(‰(€CØ�‰×%Ð% #€HØ—.”.ˆÜ× Ò  ÀÔIˆØŠ<ÙØŒ
ó	 !ùs   ‚B>EÃAEÄ:ET)Úfrozenc                   óF   a € ] tR t^üt o RtRtV 3R lR ltV 3R ltRtV t	R# )r~   at  Represents one response (or page), along with its URL.

:param encoding: the encoding to decode the given content.
:param url: the URL from which the HTML was downloaded.
:param cache_link_parsing: whether links parsed from this page's url
                           should be cached. PyPI index urls should
                           have this set to False, for example.
Tc                ó    <€ V ^8„  d   QhRS[ /# rŽ   r6   )r&   r7   s   "€r'   r(   ÚIndexContent.__annotate__  s   ø€ ÷ .ñ .™ñ .r)   c                ó,   € \        V P                  4      # r:   )r   r#   r’   s   &r'   Ú__str__ÚIndexContent.__str__  s   € Ü# D§H¡HÓ-Ð-r)   c                óf   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   S[S[,          ;R&   S[;R&   S[;R&   # )r"   r¹   r4   r¼   r#   r�   )Úbytesr%   r   r‡   )r&   r7   s   "€r'   r(   rÊ   ü   sH   ø‡ ‚ ñ �Nñ ñ Ññ ñ ‘s�mÑñ ñ 
�Hñ ñ Ñ#ò r)   rV   N)
r@   rA   rB   rC   Ú__doc__r�   rÌ   Ú__annotate_func__rD   rE   r•   s   @r'   r~   r~   ü   s#   ø‡ € ñð  $Ð÷.ð .÷# ƒ r)   r~   c                   óf   a a€ ] tR tRt oRtV3R lV 3R lltV3R lR ltV3R lR ltR	tVt	V ;t
# )
r»   i  zZ
HTMLParser that keeps the first base HREF and a list of all anchor
elements' attributes.
c                ó$   <€ V ^8„  d   QhRS[ RR/# )r"   r#   r$   Nr6   )r&   r7   s   "€r'   r(   ÚHTMLLinkParser.__annotate__  s   ø€ ÷ :ñ :™Cð : Dñ :r)   c                óP   <€ \         SV `  R R7       Wn        RV n        . V n        R# )T)Úconvert_charrefsN)r;   r<   r#   r¶   r¿   )r=   r#   r>   s   &&€r'   r<   ÚHTMLLinkParser.__init__  s&   ø€ Ü‰Ñ¨$ÐÔ/àŒØ'+ˆŒØ79ˆŽr)   c                ó`   <€ V ^8„  d   QhRS[ RS[S[S[ S[S[ ,          3,          ,          RR/# )r"   ÚtagÚattrsr$   N)r%   r   r   r   )r&   r7   s   "€r'   r(   rÔ     s6   ø€ ÷ -ñ -¡3ð -©t±E¹#¹xÉ½}Ð:LÕ4MÕ/Nð -ÐSWñ -r)   c                óÈ   € VR 8X  d.   V P                   f    V P                  V4      pVe	   W0n         R# R# VR8X  d'   V P                  P                  \	        V4      4       R# R# )ÚbaseNÚa)r¶   Úget_hrefr¿   ÚappendÚdict)r=   rÙ   rÚ   Úhrefs   &&& r'   Úhandle_starttagÚHTMLLinkParser.handle_starttag  sR   € Ø�&Œ=˜TŸ]™]Ò2Ø—=‘= Ó'ˆDØÒØ $–ñ  à�CŒZØ�L‰L×Ñ¤ U£Ö,ñ r)   c                ól   <€ V ^8„  d   QhRS[ S[S[S[S[,          3,          ,          RS[S[,          /# )r"   rÚ   r$   )r   r   r%   r   )r&   r7   s   "€r'   r(   rÔ   &  s2   ø€ ÷ ñ ™d¡5©©h±s­mÐ);Õ#<Õ=ð Á(É3Å-ñ r)   c                ó2   € V F  w  r#VR 8X  g   K  Vu # 	  R# )rá   NrV   )r=   rÚ   ÚnameÚvalues   &&  r'   rÞ   ÚHTMLLinkParser.get_href&  s   € Û ‰KˆDØ�vŽ~Ø’ñ !ñ r)   )r¿   r¶   r#   )r@   rA   rB   rC   rÐ   r<   râ   rÞ   rD   rE   rF   rG   s   @@r'   r»   r»     s-   ù‡ € ñ÷
:ó :÷-ð -÷÷ ð r)   r»   c                ó†   € V ^8„  d   QhR\         R\        \        \        3,          R\        \
        R,          ,          RR/# )r"   rÃ   ÚreasonÚmethNr$   ).N)r   r   r%   Ú	Exceptionr   r   )r&   s   "r'   r(   r(   -  sI   € ÷ @ñ @Ü
ð@ä”#”y�.Õ!ð@ô ”8˜IÕ&Õ
'ð@ð 
ñ	@r)   c                 ó@   € Vf   \         P                  pV! RW4       R # )Nz%Could not fetch URL %s: %s - skipping)rl   rm   )rÃ   rê   rë   s   &&&r'   Ú_handle_get_simple_failrî   -  s   € ð
 ‚|Ü�|‰|ˆÙÐ	0°$Ö?r)   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r"   rI   r�   r$   )r   r‡   r~   )r&   s   "r'   r(   r(   7  s$   € ÷ 
ñ 
Üð
Ü,0ð
äñ
r)   c                 ó–   € \        V P                  4      p\        V P                  V P                  R ,          VV P                  VR7      # )rK   )r¼   r#   r�   )ry   rN   r~   r¹   r#   )rI   r�   r¼   s   && r'   Ú_make_index_contentrñ   7  sE   € ô *¨(×*:Ñ*:Ó;€HÜØ×ÑØ×Ñ˜Õ(ØØ�L‰LØ-ôð r)   c                óJ   € V ^8„  d   QhR\         R\        R\        R,          /# )r"   rÃ   rX   r$   r~   )r   r   r   )r&   s   "r'   r(   r(   D  s&   € ÷ :ñ :œTð :¬zð :¼hÀ~Õ>Vñ :r)   c                óà  € V P                   P                  R ^4      ^ ,          p\        V4      pV'       d   \        P	                  RVV 4       R# \
        P                  P                  V4      w  rEp  pVR8X  d™   \        P                  P                  \
        P                  P                  V4      4      '       dW   VP                  R4      '       g
   VR,          p\
        P                  P                  VR4      p\        P                  RV4        \!        W!R7      p\#        WpP$                  R7      #   \&         d    \        P	                  R	T 4        R# \(         d8   p\        P	                  R
T TP*                  TP,                  4        Rp?R# Rp?i\.         d   p\1        Y4        Rp?R# Rp?i\2         d   p\1        Y4        Rp?R# Rp?i\4         d;   pRp	T	\7        T4      ,          p	\1        Y	\        P8                  R7        Rp?R# Rp?i\:        P<                   d   p\1        T RT 24        Rp?R# Rp?i\:        P>                   d    \1        T R4        R# i ; i)Ú#zICannot look at %s URL %s because it does not support lookup as web pages.NrÂ   Ú/z
index.htmlz# file: URL is directory, getting %sri   )r�   z`Skipping page %s because it looks like an archive, and cannot be checked by a HTTP HEAD request.zºSkipping page %s because the %s request got Content-Type: %s. The only supported Content-Types are application/vnd.pypi.simple.v1+json, application/vnd.pypi.simple.v1+html, and text/htmlz4There was a problem confirming the ssl certificate: )rë   zconnection error: z	timed out) r#   Úsplitr0   rl   Úwarningr]   r^   ÚurlparseÚosrb   ÚisdirrP   Úurl2pathnameÚendswithÚurljoinrm   ro   rñ   r�   rU   r2   r5   r4   r   rî   r   r   r%   Úinfor   ÚConnectionErrorÚTimeout)
rÃ   rX   r#   Ú
vcs_schemer/   Ú_rb   re   Úexcrê   s
   &$        r'   Ú_get_index_contentr  D  s  € Ø
�(‰(�.‰.˜˜aÓ
  Õ
#€Cô # 3Ó'€JßÜ�‰ØWØØô	
ñ
 ô  &Ÿ|™|×4Ñ4°SÓ9Ñ€Fˆt�Q˜˜1Ø�ÔœBŸG™GŸM™M¬&¯.©.×*EÑ*EÀdÓ*K×LÒLð �|‰|˜C× Ò Ø�3�JˆCô
 �l‰l×"Ñ" 3¨Ó5ˆÜ�‰Ð:¸CÔ@ðUÜ# CÔ9ˆô: # 4×<SÑ<SÔTÐTøô9 ô 
Ü�‰ð1àõ	
ñ8 ô/ ô 
Ü�‰ðAð Ø×ÑØ×Ñ÷	
ð 	
ñ, ûô "ô +Ü ×*Ð*ñ ûô ô +Ü ×*Ð*ñ ûô ô @ØGˆØ”#�c“(ÕˆÜ ´6·;±;×?Ñ?ñ ûô ×#Ñ#ô BÜ Ð(:¸3¸%Ð&@×AÐAñ
 ûô	 ×Ñô 3Ü  kÕ2ñ ð	3úsx   ÄD7 Ä7!I-ÅI-Å$I-Å%,FÆI-Æ$I-Æ%F6Æ6I-ÇI-ÇGÇI-Ç"I-Ç#/HÈI-È/I-È0IÉI-ÉI-É,I-c                   ó,   a € ] tR tRt o V 3R ltRtV tR# )ÚCollectedSourcesi�  c                ór   <€ V ^8„  d   Qh/ S[ S[S[,          ,          ;R&   S[ S[S[,          ,          ;R&   # )r"   Ú
find_linksÚ
index_urls)r   r   r   )r&   r7   s   "€r'   r(   ÚCollectedSources.__annotate__�  s/   ø‡ ‚ Ù™¡*Õ-Õ.Ñ.ñ á™¡*Õ-Õ.Ñ.ò r)   rV   N)r@   rA   rB   rC   rÑ   rD   rE   r•   s   @r'   r  r  �  s   ø‡ ‡ „ r)   r  c                   ó–   a € ] tR tRt o RtV 3R lR lt]RV 3R lR l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RtV tR# )ÚLinkCollectori†  z¥
Responsible for collecting Link objects from all configured locations,
making network requests as needed.

The class's main method is its collect_sources() method.
c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# )r"   rX   Úsearch_scoper$   N)r   r   )r&   r7   s   "€r'   r(   ÚLinkCollector.__annotate__Ž  s)   ø€ ÷ ñ áðñ "ðð 
ñ	r)   c                ó   € W n         Wn        R # r:   ©r  rX   )r=   rX   r  s   &&&r'   r<   ÚLinkCollector.__init__Ž  s   € ð
 )ÔØŽr)   c                ó0   <€ V ^8„  d   QhRS[ RS[RS[RR/# )r"   rX   ÚoptionsÚsuppress_no_indexr$   r  )r   r   r‡   )r&   r7   s   "€r'   r(   r  —  s3   ø€ ÷ ñ áðñ ðñ  ð	ð
 
ñr)   c                ó^  € VP                   .VP                  ,           pVP                  '       d7   V'       g/   \        P	                  RRP                  R V 4       4      4       . pVP                  ;'       g    . p\        P                  ! VVVP                  R7      p\        VVR7      pV# )z¦
:param session: The Session to use to make requests.
:param suppress_no_index: Whether to ignore the --no-index option
    when constructing the SearchScope object.
zIgnoring indexes: %sÚ,c              3   ó8   "  € T F  p\        V4      x € K  	  R # 5ir:   r   )Ú.0r#   s   & r'   Ú	<genexpr>Ú'LinkCollector.create.<locals>.<genexpr>¦  s   é € ÐI¹j°sÔ-¨c×2Ð2»jùs   ‚)r  r	  Úno_index)rX   r  )
Ú	index_urlÚextra_index_urlsr  rl   rm   rn   r  r   Úcreater  )ÚclsrX   r  r  r	  r  r  Úlink_collectors   &&&&    r'   r  ÚLinkCollector.create–  s¢   € ð ×'Ñ'Ð(¨7×+CÑ+CÕCˆ
Ø××Ð×$5Ü�L‰LØ&Ø—‘ÑI¹jÓIÓIôð ˆJð ×'Ñ'×-Ð-¨2ˆ
ä"×)Ò)Ø!Ø!Ø×%Ñ%ô
ˆô
 'ØØ%ô
ˆð Ðr)   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# rŽ   )r   r%   )r&   r7   s   "€r'   r(   r  ¹  s   ø€ ÷ ,ñ ,™D¡�Iñ ,r)   c                ó.   € V P                   P                  # r:   )r  r  r’   s   &r'   r  ÚLinkCollector.find_links¸  s   € à× Ñ ×+Ñ+Ð+r)   c                ó6   <€ V ^8„  d   QhRS[ RS[S[,          /# )r"   Úlocationr$   )r   r   r~   )r&   r7   s   "€r'   r(   r  ¼  s$   ø€ ÷ Bñ B¡tð B±¹Õ0Fñ Br)   c                ó.   € \        WP                  R7      # )z.
Fetch an HTML page containing package links.
ri   )r  rX   )r=   r'  s   &&r'   Úfetch_responseÚLinkCollector.fetch_response¼  s   € ô " (·L±LÔAÐAr)   c                ó,   <€ V ^8„  d   QhRS[ RS[RS[/# )r"   Úproject_nameÚcandidates_from_pager$   )r%   r   r  )r&   r7   s   "€r'   r(   r  Â  s)   ø€ ÷ ,
ñ ,
áð,
ñ 1ð,
ñ 
ñ	,
r)   c                ó²  a aa€ \         P                  ! VVV 3R  lS P                  P                  S4       4       4      P	                  4       p\         P                  ! VVV 3R lS P
                   4       4      P	                  4       p\        P                  \        P                  4      '       d†   \        P                  ! WC4       Uu. uF(  pVf   K	  VP                  f   K  RVP                   2NK*  	  pp\        V4       RS R2.V,           p\        P                  RP                  V4      4       \!        \#        V4      \#        V4      R7      # u upi )c           
   3   ón   <"  € T F*  p\        VSSP                  P                  R R SR7      x € K,  	  R# 5i)F©r-  Úpage_validatorÚ
expand_dirr�   r,  N©r    rX   Úis_secure_origin©r  Úlocr-  r,  r=   s   & €€€r'   r  Ú0LinkCollector.collect_sources.<locals>.<genexpr>È  sD   øé € ð 
4
ñ P�ô ØØ%9Ø#Ÿ|™|×<Ñ<Ø Ø#(Ø)÷ñ ó Pùó   ƒ25c           
   3   ón   <"  € T F*  p\        VSSP                  P                  R R SR7      x € K,  	  R# 5i)Tr0  Nr3  r5  s   & €€€r'   r  r7  Ó  sB   øé € ð 
5
ñ '�ô ØØ%9Ø#Ÿ|™|×<Ñ<ØØ#'Ø)÷ñ ó 'ùr8  z* z' location(s) to search for versions of Ú:Ú
)r  r	  )ÚcollectionsÚOrderedDictr  Úget_index_urls_locationsÚvaluesr  rl   ÚisEnabledForÚloggingÚDEBUGÚ	itertoolsÚchainrÃ   r.   rm   rn   r  r§   )r=   r,  r-  Úindex_url_sourcesÚfind_links_sourcesÚsÚliness   fff    r'   Úcollect_sourcesÚLinkCollector.collect_sourcesÂ  s8  ú€ ô (×3Ò3ö 
4
ð ×(Ñ(×AÑAÀ,ÔOó
4
ó 

÷ ‰&‹(ð 	ô )×4Ò4ö 
5
ð —’ó
5
ó 

÷ ‰&‹(ð 	ô ×ÑœwŸ}™}×-Ò-ô #ŸšÐ);ÔOóáO�AØô à%&§V¡Vô �"�Q—V‘V�H“ÙOð ð ô �u“:�,ð #Ø#/ .°ð3ðð õˆEô �L‰L˜Ÿ™ 5Ó)Ô*äÜÐ.Ó/ÜÐ-Ó.ô
ð 	
ùòs   ÃEÃEÃ#Er  N)F)r@   rA   rB   rC   rÐ   r<   Úclassmethodr  Úpropertyr  r)  rI  rD   rE   r•   s   @r'   r  r  †  sX   ø‡ € ñ÷ð ð ÷ñ ó ððB ÷,ó ð,÷Bð B÷,
ö ,
r)   r  r:   )T)QrÐ   r<  Úemail.messagert   r®   rC  r·   rA  rù   Úurllib.parser]   Úurllib.requestÚdataclassesr   Úhtml.parserr   Úoptparser   Útypingr   r   r   r   r	   r
   r   r   r   r   r   Úpip._vendorr   Úpip._vendor.requestsr   Úpip._vendor.requests.exceptionsr   r   Úpip._internal.exceptionsr   Úpip._internal.models.linkr   Ú!pip._internal.models.search_scoper   Úpip._internal.network.sessionr   Úpip._internal.network.utilsr   Úpip._internal.utils.filetypesr   Úpip._internal.utils.miscr   Úpip._internal.vcsr   Úsourcesr   r   r    Ú	getLoggerr@   rl   r%   rq   r0   rì   r2   rS   rU   rf   ro   ry   r{   r—   r±   rÆ   r~   r»   rî   rñ   r  r  r  rV   r)   r'   Ú<module>ra     sB  ðñó Û Û Û Û Û Û 	Û Û Ý !Ý "Ý ÷÷ ÷ ñ õ !Ý )ß @å ;Ý *Ý 9Ý 4Ý 8Ý 9Ý 9Ý !ç AÑ Aà	×	Ò	˜8Ó	$€à   c Õ*€õô)�Yô )õ@ô,	ˆyô 	õõ$<õ~÷	#ñ 	#ôD�ô Dõð( ôó ðñ8 �$Ô÷.ð .ó ð.ô(�Zô ÷8@÷
õ:ôz/�zô /÷
h
ó h
r)   