+
    ª¬‚j?  ã                  óÐ  € R t ^ RIH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HtHt ^ RIHt ^ RIHt ^ RIHt ^ RI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,H-t- ^ RI.H/t/ ^ RI0H1t1 ^ RI2H3t3 ^RI4H5t5H6t6H7t7 ]	Pp                  ! ]94      t:]];];3,          t<R R lt= ! R R]>4      t?R R lt@ ! R R]>4      tAR R ltBR R  ltCR! R" ltD ! R# R$4      tE ! R% R&]4      tFR' R( ltG]GR) R* l4       tH]! R+R,7       ! R- R.4      4       tI ! R/ R0]4      tJR;R1 R2 lltKR<R3 R4 lltLR5 R6 ltM ! R7 R8]4      tN ! R9 R:4      tOR# )=zO
The main purpose of this module is to expose LinkCollector.collect_sources().
)ÚannotationsN)ÚIterableÚMutableMappingÚSequence)Ú	dataclass)Ú
HTMLParser)ÚValues)ÚCallableÚ
NamedTupleÚProtocol)Úrequests)ÚResponse)Ú
RetryErrorÚSSLError)ÚNetworkConnectionError)ÚLink)ÚSearchScope)Ú
PipSession)Úraise_for_status)Úis_archive_file©Úredact_auth_from_url)Úurl_to_path)Úvcs)ÚCandidatesFromPageÚ
LinkSourceÚbuild_sourcec               ó    € V ^8„  d   QhRRRR/# )é   ÚurlÚstrÚreturnú
str | None© )Úformats   "ÚZ/Users/cheyod/AIGC/DSH/.venv/lib/python3.14/site-packages/pip/_internal/index/collector.pyÚ__annotate__r&   .   s   € ÷ ñ ˜3ð  :ñ ó    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_schemer.   .   sC   € ô
 —+”+ˆØ�9‰9‹;×!Ñ! &×)Ô)¨c´#°f³+Õ.>À$Ö.FØŠMñ ñ r'   c                  ó.   a € ] tR t^9tR V 3R lltRtV ;t# )Ú_NotAPIContentc               ó$   € V ^8„  d   QhRRRRRR/# )r   Úcontent_typer    Úrequest_descr!   ÚNoner#   )r$   s   "r%   r&   Ú_NotAPIContent.__annotate__:   s!   € ÷ )ñ ) Sð )¸ð )Àñ )r'   c                	ó>   <€ \         SV `  W4       Wn        W n        R # ©N)ÚsuperÚ__init__r2   r3   )Úselfr2   r3   Ú	__class__s   &&&€r%   r9   Ú_NotAPIContent.__init__:   s   ø€ Ü‰Ñ˜Ô4Ø(ÔØ(Ör'   )r2   r3   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r9   Ú__static_attributes__Ú__classcell__©r;   s   @r%   r0   r0   9   s   ø† ÷)ö )r'   r0   c               ó    € V ^8„  d   QhRRRR/# )r   Úresponser   r!   r4   r#   )r$   s   "r%   r&   r&   @   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+   r0   ÚrequestÚmethod)rE   r2   Úcontent_type_ls   &  r%   Ú_ensure_api_headerrO   @   s^   € ð ×#Ñ#×'Ñ'¨¸	ÓB€Là!×'Ñ'Ó)€NØ× Ñ ð	
÷ò ñ 	ä
˜×'7Ñ'7×'>Ñ'>Ó
?Ð?r'   c                  ó   € ] tR t^VtRtR# )Ú_NotHTTPr#   N)r=   r>   r?   r@   rA   r#   r'   r%   rQ   rQ   V   s   † Ûr'   rQ   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r   r    Úsessionr   r!   r4   r#   )r$   s   "r%   r&   r&   Z   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ÚurlsplitrQ   Úheadr   rO   )r   rS   r-   ÚnetlocÚpathÚqueryÚfragmentÚresps   &&      r%   Ú_ensure_api_responsera   Z   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R/# )r   r   r    rS   r   r!   r   r#   )r$   s   "r%   r&   r&   l   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.
©rS   zGetting page %sÚAcceptz, zCache-Controlz	max-age=0)rJ   zFetched page %s as %srG   rH   )rI   z*application/vnd.pypi.simple.v1+html; q=0.1ztext/html; q=0.01)r   r   Úfilenamera   ÚloggerÚdebugr   rK   Újoinr   rO   rJ   )r   rS   r`   s   && r%   Ú_get_simple_responserj   l   s±   € ô ”t˜C“y×)Ñ)×*Ò*Ü˜SÕ2ä
‡L�LÐ"Ô$8¸Ó$=Ô>à�;‰;Øà�d—i‘iòóð( ˜[ð+
ð ó €Dô4 �TÔô �tÔä
‡L�LØÜ˜SÓ!Ø�‰×Ñ˜¨Ó3ôð €Kr'   c               ó    € V ^8„  d   QhRRRR/# )r   rJ   ÚResponseHeadersr!   r"   r#   )r$   s   "r%   r&   r&   «   s   € ÷ ñ ¨ð ¸Jñ 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.rG   zcontent-typeÚcharsetN)ÚemailÚmessageÚMessageÚ	get_paramr    )rJ   Úmrn   s   &  r%   Ú_get_encoding_from_headersrt   «   sK   € ç�> WÔ,Ü�M‰M×!Ñ!Ó#ˆØ# NÕ3ˆˆ.ÑØ—+‘+˜iÓ(ˆßÜ�w“<ÐÙr'   c                  ó:   € ] tR t^¶tR R ltR R ltR R ltRtR# )	ÚCacheablePageContentc               ó    € V ^8„  d   QhRRRR/# )r   ÚpageÚIndexContentr!   r4   r#   )r$   s   "r%   r&   Ú!CacheablePageContent.__annotate__·   s   € ÷ ñ ˜\ð ¨dñ r'   c                	ó:   € VP                   '       g   Q hWn        R # r7   )Úcache_link_parsingrx   ©r:   rx   s   &&r%   r9   ÚCacheablePageContent.__init__·   s   € Ø×&×&Ð&Ð&Ð&ØŽ	r'   c               ó    € V ^8„  d   QhRRRR/# )r   ÚotherÚobjectr!   Úboolr#   )r$   s   "r%   r&   rz   »   s   € ÷ Qñ Q˜Fð Q tñ Qr'   c                	ó–   € \        V\        V 4      4      ;'       d.    V P                  P                  VP                  P                  8H  # r7   )Ú
isinstanceÚtyperx   r   )r:   r€   s   &&r%   Ú__eq__ÚCacheablePageContent.__eq__»   s0   € Ü˜%¤ d£Ó,×PÐP°·±·±À%Ç*Á*Ç.Á.Ñ1PÐPr'   c               ó   € V ^8„  d   QhRR/# )r   r!   Úintr#   )r$   s   "r%   r&   rz   ¾   s   € ÷ #ñ #˜#ñ #r'   c                	ó@   € \        V P                  P                  4      # r7   )Úhashrx   r   ©r:   s   &r%   Ú__hash__ÚCacheablePageContent.__hash__¾   s   € Ü�D—I‘I—M‘MÓ"Ð"r'   )rx   N)r=   r>   r?   r@   r9   r†   r�   rA   r#   r'   r%   rv   rv   ¶   s   † õõQ÷#ñ #r'   rv   c                  ó"   € ] tR t^ÂtR R ltRtR# )Ú
ParseLinksc               ó    € V ^8„  d   QhRRRR/# ©r   rx   ry   r!   zIterable[Link]r#   )r$   s   "r%   r&   ÚParseLinks.__annotate__Ã   s   € ×AÑA˜\ÐA¨nÑAr'   c                	ó   € R # r7   r#   r}   s   &&r%   Ú__call__ÚParseLinks.__call__Ã   s   € ¹cr'   r#   N)r=   r>   r?   r@   r•   rA   r#   r'   r%   r�   r�   Â   s   † ßAÑAr'   r�   c               ó    € V ^8„  d   QhRRRR/# )r   Úfnr�   r!   r#   )r$   s   "r%   r&   r&   Æ   s   € ÷ ñ  *ð °ñ r'   c                óˆ   a a€ \         P                  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`.
c               ó    € V ^8„  d   QhRRRR/# )r   Úcacheable_pagerv   r!   ú
list[Link]r#   )r$   s   "r%   r&   Ú/with_cached_index_content.<locals>.__annotate__Î   s   € ÷ -ñ -Ð 4ð -¸ñ -r'   c                ó:   <€ \        S! V P                  4      4      # r7   )Úlistrx   )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   rx   ry   r!   rœ   r#   )r$   s   "r%   r&   r�   Ò   s   € ÷ ñ ˜lð ¨zñ r'   c                ól   <€ V P                   '       d   S! \        V 4      4      # \        S! V 4      4      # r7   )r|   rv   rŸ   )rx   r˜   r    s   &€€r%   Úwrapper_wrapperÚ2with_cached_index_content.<locals>.wrapper_wrapperÑ   s.   ø€ à×"×"Ð"ÙÔ/°Ó5Ó6Ð6Ü‘B�t“H‹~Ðr'   )Ú	functoolsÚcacheÚwraps)r˜   r¤   r    s   f @r%   Úwith_cached_index_contentr©   Æ   sE   ù€ ô ‡_�_÷-ó ð-ô ‡_‚_�RÓ÷ð ó ðð
 Ðr'   c               ó    € V ^8„  d   QhRRRR/# r’   r#   )r$   s   "r%   r&   r&   Û   s   € ÷ ñ �lð  ~ñ 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.
rI   ÚfilesNzutf-8)Úpage_urlÚbase_url)r2   r*   r+   ÚjsonÚloadsÚcontentrK   r   Ú	from_jsonr   ÚHTMLLinkParserÚencodingÚfeedÚdecoder®   ÚanchorsÚfrom_element)
rx   rN   Ú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                  ó^   € ] tR t^÷t$ RtR]R&   R]R&   R]R&   R]R&   R	tR
]R&   R R ltRtR# )ry   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.
Úbytesr±   r    r2   r"   r´   r   Tr‚   r|   c               ó   € V ^8„  d   QhRR/# )r   r!   r    r#   )r$   s   "r%   r&   ÚIndexContent.__annotate__  s   € ÷ .ñ .˜ñ .r'   c                	ó,   € \        V P                  4      # r7   )r   r   rŒ   s   &r%   Ú__str__ÚIndexContent.__str__  s   € Ü# D§H¡HÓ-Ð-r'   r#   N)	r=   r>   r?   r@   Ú__doc__Ú__annotations__r|   rÅ   rA   r#   r'   r%   ry   ry   ÷   s4   ‡ ñð ƒNØÓØÓØ	ƒHØ#Ð˜Ó#÷.ñ .r'   ry   c                  óJ   a € ] tR tRtRtR V 3R lltR R ltR R ltR	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RRR/# )r   r   r    r!   r4   r#   )r$   s   "r%   r&   ÚHTMLLinkParser.__annotate__  s   € ÷ 7ñ 7˜Cð 7 Dñ 7r'   c                	óP   <€ \         SV `  R R7       Wn        RV n        . V n        R# )T)Úconvert_charrefsN)r8   r9   r   r®   r·   )r:   r   r;   s   &&€r%   r9   ÚHTMLLinkParser.__init__  s&   ø€ Ü‰Ñ¨$ÐÔ/àŒØ$(ˆŒØ46ˆŽr'   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Útagr    Úattrsúlist[tuple[str, str | None]]r!   r4   r#   )r$   s   "r%   r&   rË     s#   € ÷ -ñ - 3ð -Ð/Kð -ÐPTñ -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               ó    € V ^8„  d   QhRRRR/# )r   rÑ   rÒ   r!   r"   r#   )r$   s   "r%   r&   rË   !  s   € ÷ ñ Ð:ð ¸zñ r'   c                	ó2   € V F  w  r#VR 8X  g   K  Vu # 	  R# )rÙ   Nr#   )r:   rÑ   ÚnameÚvalues   &&  r%   rÖ   ÚHTMLLinkParser.get_href!  s   € Û ‰KˆDØ�vŽ~Ø’ñ !ñ r'   )r·   r®   r   )
r=   r>   r?   r@   rÇ   r9   rÚ   rÖ   rA   rB   rC   s   @r%   r³   r³     s!   ø† ñ÷
7ð 7õ-÷ó r'   r³   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   r»   r   Úreasonzstr | ExceptionÚmethzCallable[..., None] | Noner!   r4   r#   )r$   s   "r%   r&   r&   (  s6   € ÷ @ñ @Ø
ð@àð@ð %ð@ð 
ñ	@r'   c                ó@   € Vf   \         P                  pV! RW4       R # )Nz%Could not fetch URL %s: %s - skipping)rg   rh   )r»   râ   rã   s   &&&r%   Ú_handle_get_simple_failrå   (  s   € ð
 ‚|Ü�|‰|ˆÙÐ	0°$Ö?r'   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rE   r   r|   r‚   r!   ry   r#   )r$   s   "r%   r&   r&   2  s$   € ÷ 
ñ 
Øð
Ø,0ð
àñ
r'   c                ó–   € \        V P                  4      p\        V P                  V P                  R ,          VV P                  VR7      # )rG   )r´   r   r|   )rt   rJ   ry   r±   r   )rE   r|   r´   s   && r%   Ú_make_index_contentrè   2  sE   € ô *¨(×*:Ñ*:Ó;€HÜØ×ÑØ×Ñ˜Õ(ØØ�L‰LØ-ôð r'   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r»   r   rS   r   r!   úIndexContent | Noner#   )r$   s   "r%   r&   r&   ?  s"   € ÷ 9ñ 9˜Tð 9¨zð 9Ð>Qñ 9r'   c               óŽ  € V P                   P                  R ^4      ^ ,          p\        V4      pV'       d   \        P	                  RVV 4       R# VP                  R4      '       d…   \        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\!        W@P"                  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\/        Y4        Rp?R# Rp?i\0         d   p\/        Y4        Rp?R# Rp?i\2         d;   pRpT\5        T4      ,          p\/        Y\        P6                  R7        Rp?R# Rp?i\8        P:                   d   p\/        T RT 24        Rp?R# Rp?i\8        P<                   d    \/        T R4        R# i ; i)Ú#zICannot look at %s URL %s because it does not support lookup as web pages.Nzfile:Ú/z
index.htmlz# file: URL is directory, getting %srd   )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   Úsplitr.   rg   Úwarningr+   Úosr]   Úisdirr   ÚendswithrX   rY   Úurljoinrh   rj   rè   r|   rQ   r0   r3   r2   r   rå   r   r   r    Úinfor   ÚConnectionErrorÚTimeout)r»   rS   r   Ú
vcs_schemer`   Úexcrâ   s   &$     r%   Ú_get_index_contentrù   ?  sî  € Ø
�(‰(�.‰.˜˜aÓ
  Õ
#€Cô # 3Ó'€JßÜ�‰ØWØØô	
ñ
 ð ‡~�~�g×Ò¤2§7¡7§=¡=´¸SÓ1A×#BÒ#Bð �|‰|˜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   Ã,D Ä!IÄ2IÄ;IÄ<,E.Å.IÅ;IÅ<FÆIÆIÆF,Æ,IÆ9IÆ:/G/Ç/IÈIÈHÈIÈ3IÉIc                  ó,   € ] tR tRt$ R]R&   R]R&   RtR# )ÚCollectedSourcesi{  zSequence[LinkSource | None]Ú
find_linksÚ
index_urlsr#   N)r=   r>   r?   r@   rÈ   rA   r#   r'   r%   rû   rû   {  s   ‡ Ø+Ó+Ø+×+r'   rû   c                  ón   € ] tR tRtRtR R lt]RR R ll4       t]R R l4       t	R	 R
 lt
R R ltR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RRRRR/# )r   rS   r   Úsearch_scoper   r!   r4   r#   )r$   s   "r%   r&   ÚLinkCollector.__annotate__ˆ  s(   € ÷ ñ àðð "ðð 
ñ	r'   c                	ó   € W n         Wn        R # r7   ©r  rS   )r:   rS   r  s   &&&r%   r9   ÚLinkCollector.__init__ˆ  s   € ð
 )ÔØŽr'   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rS   r   Úoptionsr   Úsuppress_no_indexr‚   r!   rÿ   r#   )r$   s   "r%   r&   r  ‘  s2   € ÷ ñ àðð ðð  ð	ð
 
ñ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r7   r   )Ú.0r   s   & r%   Ú	<genexpr>Ú'LinkCollector.create.<locals>.<genexpr>   s   é € ÐI¹j°sÔ-¨c×2Ð2»jùs   ‚)rü   rý   Úno_index)rS   r  )
Ú	index_urlÚextra_index_urlsr  rg   rh   ri   rü   r   Úcreaterÿ   )ÚclsrS   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               ó   € V ^8„  d   QhRR/# )r   r!   z	list[str]r#   )r$   s   "r%   r&   r  ³  s   € ÷ ,ñ ,˜Iñ ,r'   c                	ó.   € V P                   P                  # r7   )r  rü   rŒ   s   &r%   rü   ÚLinkCollector.find_links²  s   € à× Ñ ×+Ñ+Ð+r'   c               ó    € V ^8„  d   QhRRRR/# )r   Úlocationr   r!   rê   r#   )r$   s   "r%   r&   r  ¶  s   € ÷ Bñ B tð BÐ0Cñ Br'   c                ó.   € \        WP                  R7      # )z.
Fetch an HTML page containing package links.
rd   )rù   rS   )r:   r  s   &&r%   Úfetch_responseÚLinkCollector.fetch_response¶  s   € ô " (·L±LÔAÐAr'   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úproject_namer    Úcandidates_from_pager   r!   rû   r#   )r$   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   rS   Ú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)Tr#  Nr&  r(  s   & €€€r%   r  r*  Í  sB   øé € ð 
5
ñ '�ô ØØ%9Ø#Ÿ|™|×<Ñ<ØØ#'Ø)÷ñ ó 'ùr+  z* z' location(s) to search for versions of Ú:Ú
)rü   rý   )ÚcollectionsÚOrderedDictr  Úget_index_urls_locationsÚvaluesrü   rg   ÚisEnabledForÚloggingÚDEBUGÚ	itertoolsÚchainr»   r,   rh   ri   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=   r>   r?   r@   rÇ   r9   Úclassmethodr  Úpropertyrü   r  r<  rA   r#   r'   r%   rÿ   rÿ   €  sE   † ñõð öó ððB ô,ó ð,õB÷,
ñ ,
r'   rÿ   r7   )T)PrÇ   Ú
__future__r   r/  Úemail.messagero   r¦   r6  r¯   r4  rð   Úurllib.parserX   Úcollections.abcr   r   r   Údataclassesr   Úhtml.parserr   Úoptparser   Útypingr	   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.utils.urlsr   Úpip._internal.vcsr   Úsourcesr   r   r   Ú	getLoggerr=   rg   r    rl   r.   Ú	Exceptionr0   rO   rQ   ra   rj   rt   rv   r�   r©   r¾   ry   r³   rå   rè   rù   rû   rÿ   r#   r'   r%   Ú<module>rW     sA  ðñõ #ã Û Û Û Û Û Û 	Û ß >Ñ >Ý !Ý "Ý ÷ñ õ !Ý )ß @å ;Ý *Ý 9Ý 4Ý 8Ý 9Ý 9Ý 0Ý !ç AÑ Aà	×	Ò	˜8Ó	$€à   c Õ*€õô)�Yô )õ@ô,	ˆyô 	õõ$<õ~÷	#ñ 	#ôB�ô Bõð( ôó ðñ8 �$Ô÷.ð .ó ð.ô(�Zô ÷8@÷
õ9ôx,�zô ,÷
h
ó h
r'   