+
    ` ÀjšM  ã                  óX  € R t ^ RIHt RtR.t^ RIHt ^ RI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HtHtHtHtHt ^ RIHtHt ^ R	IHtH t H!t!H"t" ^ R
I#H$t$ ]'       d   ^ RI%H&t& ^ RIH't' ^ RI(H)t)H*t*H+t+ Rt,]
]]-]-3,          ]-]-.R3,          t. ! R R]]4      t/ ! R R]!4      t0R# )zCUse the HTMLParser library to parse HTML files that aren't too bad.)ÚannotationsÚMITÚHTMLParserTreeBuilder)Ú
HTMLParserN)ÚAnyÚCallableÚcastÚDictÚIterableÚListÚOptionalÚTYPE_CHECKINGÚTupleÚTypeÚUnion)ÚAttributeDictÚCDataÚCommentÚDeclarationÚDoctypeÚProcessingInstruction)ÚEntitySubstitutionÚUnicodeDammit)ÚDetectsXMLParsedAsHTMLÚHTMLÚHTMLTreeBuilderÚSTRICT©ÚParserRejectedMarkup)ÚBeautifulSoup)ÚNavigableString)Ú	_EncodingÚ
_EncodingsÚ
_RawMarkupzhtml.parserc                  óR  € ] tR t^>t$ RtR]R&   RtR]R&    R]/R R lltR	]R&   R
]R&   R]R&   R R ltR R lt	R*R R llt
R*R R lltR R lt]P                  ! R4      t]P                  ! R4      t]R R l4       tR R ltR R ltR  R! ltR" R# ltR$ R% ltR& R' ltR(tR)# )+ÚBeautifulSoupHTMLParserÚreplaceÚstrÚREPLACEÚignoreÚIGNOREÚon_duplicate_attributec               ó(   € V ^8„  d   QhRRRRRRRR/# )é   Úsoupr   Úargsr   r+   ú&Union[str, _DuplicateAttributeHandler]Úkwargs© )Úformats   "Úk/var/www/html/mycamper/aliexpress-site/backend/venv/lib/python3.14/site-packages/bs4/builder/_htmlparser.pyÚ__annotate__Ú$BeautifulSoupHTMLParser.__annotate__U   s3   € ÷ (ñ (àð(ð ð(ð !Gð	(ð
 ñ(ó    c               	ó¶   € Wn         W n        VP                  P                  V n        \        P
                  ! V .VO5/ VB  . V n        V P                  4        R # ©N)r.   r+   ÚbuilderÚattribute_dict_classr   Ú__init__Úalready_closed_empty_elementÚ_initialize_xml_detector)Úselfr.   r+   r/   r1   s   &&$*,r4   r<   Ú BeautifulSoupHTMLParser.__init__U   sO   € ð Œ	Ø&<Ô#Ø$(§L¡L×$EÑ$EˆÔ!Ü×Ò˜DÐ2 4Ò2¨6Ò2ð -/ˆÔ)à×%Ñ%Ö'r7   r0   z	List[str]r=   r   r.   c               ó    € V ^8„  d   QhRRRR/# )r-   Úmessager'   ÚreturnÚNoner2   )r3   s   "r4   r5   r6   p   s   € ÷ ,ñ ,˜Sð , Tñ ,r7   c                	ó   € \        V4      hr9   r   )r?   rB   s   &&r4   ÚerrorÚBeautifulSoupHTMLParser.errorp   s   € ô # 7Ó+Ð+r7   c               ó$   € V ^8„  d   QhRRRRRR/# )r-   Útagr'   ÚattrsúList[Tuple[str, Optional[str]]]rC   rD   r2   )r3   s   "r4   r5   r6   €   s$   € ÷ <ñ <Øð<Ø>ð<à	ñ<r7   c                óR   € V P                  WRR7       V P                  VRR7       R# )zmHandle an incoming empty-element tag.

html.parser only calls this method when the markup looks like
<tag/>.
F)Úhandle_empty_element©Úcheck_already_closedN)Úhandle_starttagÚhandle_endtag)r?   rI   rJ   s   &&&r4   Úhandle_startendtagÚ*BeautifulSoupHTMLParser.handle_startendtag€   s,   € ð 	×Ñ˜S¸eÐÔDð 	×Ñ˜3°UÐÖ;r7   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r-   rI   r'   rJ   rK   rM   ÚboolrC   rD   r2   )r3   s   "r4   r5   r6   ”   s2   € ÷ <,ñ <,àð<,ð /ð<,ð #ð	<,ð
 
ñ<,r7   c           	     ó’  € V P                  4       pV Fg  w  rVVf   RpWT9   dS   V P                  pWpP                  8X  d   K/  VRV P                  39   d   WdV&   KH  \	        \
        V4      pV! WEV4       Kc  WdV&   Ki  	  V P                  P                  P                  '       d   V P                  4       w  r‰MR;r‰V P                  P                  VRRWHV	R7      p
V
eI   V
P                  '       d7   V'       d/   V P                  VRR7       V P                  P                  V4       V P                  f   V P!                  V4       R# R# )z³Handle an opening tag, e.g. '<tag>'

:param handle_empty_element: True if this tag is known to be
    an empty-element tag (i.e. there is not expected to be any
    closing tag).
NÚ )Ú
sourcelineÚ	sourceposFrN   )r;   r+   r*   r(   r   Ú_DuplicateAttributeHandlerr.   r:   Ústore_line_numbersÚgetposrP   Úis_empty_elementrQ   r=   ÚappendÚ_root_tag_nameÚ_root_tag_encountered)r?   rI   rJ   rM   Ú	attr_dictÚkeyÚvalueÚon_duperX   rY   ÚtagObjs   &&&&       r4   rP   Ú'BeautifulSoupHTMLParser.handle_starttag”   s4  € ð $(×#<Ñ#<Ó#>ˆ	Û‰JˆCð Š}Ø�ØÔð ×5Ñ5�ØŸk™kÔ)ÙØ  t§|¡|Ð 4Ô4Ø%*˜c“Nä"Ô#=¸wÓG�GÙ˜I¨EÖ2à!&˜#“ñ%  ð, �9‰9×Ñ×/×/Ð/Ø$(§K¡K£MÑ!ˆJ˜	à%)Ð)ˆJØ—‘×*Ñ*Ø��t˜YÈð +ó 
ˆð Ò &×"9×"9Ð"9×>Rð ×Ñ˜s¸ÐÔ?ð ×-Ñ-×4Ñ4°SÔ9à×ÑÒ&Ø×&Ñ& sÖ+ñ 'r7   c               ó$   € V ^8„  d   QhRRRRRR/# )r-   rI   r'   rO   rU   rC   rD   r2   )r3   s   "r4   r5   r6   Ò   s!   € ÷ )ñ ) ð )¸Dð )ÈDñ )r7   c                ó¦   € V'       d.   WP                   9   d   V P                   P                  V4       R# V P                  P                  V4       R# )zÄHandle a closing tag, e.g. '</tag>'

:param tag: A tag name.
:param check_already_closed: True if this tag is expected to
   be the closing portion of an empty-element tag,
   e.g. '<tag></tag>'.
N)r=   Úremover.   rQ   )r?   rI   rO   s   &&&r4   rQ   Ú%BeautifulSoupHTMLParser.handle_endtagÒ   s:   € ÷   C×+LÑ+LÔ$Lð
 ×-Ñ-×4Ñ4°SÖ9à�I‰I×#Ñ# CÖ(r7   c               ó    € V ^8„  d   QhRRRR/# ©r-   Údatar'   rC   rD   r2   )r3   s   "r4   r5   r6   ä   s   € ÷ $ñ $ ð $¨ñ $r7   c                ó<   € V P                   P                  V4       R# )z4Handle some textual data that shows up between tags.N)r.   Úhandle_data©r?   rm   s   &&r4   ro   Ú#BeautifulSoupHTMLParser.handle_dataä   s   € à�	‰	×Ñ˜dÖ#r7   z^([0-9]+)(.*)z^([0-9a-f]+)(.*)c               ó    € V ^8„  d   QhRRRR/# )r-   Únamer'   rC   zTuple[str, bool, str]r2   )r3   s   "r4   r5   r6   ì   s   € ÷ 4;ñ 4;¸3ð 4;ÐCXñ 4;r7   c                óÖ  € RpRpRp^
pV P                   pVP                  R4      '       g   VP                  R4      '       d   VR,          p^pV P                  pRp \        W4      pVf   RpTpM\        P                  ! V4      w  r#W#V3#   \         dQ    TP                  T4      pTe9   \        TP                  4       ^ ,          T4      pTP                  4       ^,          p Li ; i)aX  Convert a numeric character reference into an actual character.

:param name: The number of the character reference, as
  obtained by html.parser

:return: A 3-tuple (dereferenced, replacement_added,
  extra_data). `dereferenced` is the dereferenced character
  reference, or the empty string if there was no
  reference. `replacement_added` is True if the reference
  could only be dereferenced by replacing content with U+FFFD
  REPLACEMENT CHARACTER. `extra_data` is a portion of data
  following the character reference, which was deemed to be
  normal data and not part of the reference at all.
rW   FÚxÚX:é   NNN)	Ú&_DECIMAL_REFERENCE_WITH_FOLLOWING_DATAÚ
startswithÚ"_HEX_REFERENCE_WITH_FOLLOWING_DATAÚintÚ
ValueErrorÚsearchÚgroupsr   Únumeric_character_reference)	Úclsrs   ÚdereferencedÚreplacement_addedÚ
extra_dataÚbaseÚregÚ	real_nameÚmatchs	   &&       r4   Ú(_dereference_numeric_character_referenceÚ@BeautifulSoupHTMLParser._dereference_numeric_character_referenceë   sí   € ð  ˆØ!&ÐØˆ
àˆØ×8Ñ8ˆØ�?‰?˜3×Ò 4§?¡?°3×#7Ò#7à˜•8ˆDØˆDØ×8Ñ8ˆCà"&ˆ	ð	/Ü˜D›ˆIð$ ÒØˆLØ‰Jä.;×.WÒ.WÐXaÓ.bÑ+ˆLØ°
Ð:Ð:øô- ô 	/ð —J‘J˜tÓ$ˆEØÒ Ü §¡£¨qÕ 1°4Ó8�	Ø"Ÿ\™\›^¨AÕ.�
ùð	/ús   ÁB ÂAC(Ã'C(c               ó    € V ^8„  d   QhRRRR/# ©r-   rs   r'   rC   rD   r2   )r3   s   "r4   r5   r6   "  s   € ÷ )ñ ) 3ð )¨4ñ )r7   c                ó¸   € V P                  V4      w  r#pV'       d   RV P                  n        Ve   V P                  V4       Ve   V P                  V4       R# R# )z·Handle a numeric character reference by converting it to the
corresponding Unicode character and treating it as textual
data.

:param name: Character number, possibly in hexadecimal.
TN)rˆ   r.   Úcontains_replacement_charactersro   )r?   rs   r�   r‚   rƒ   s   &&   r4   Úhandle_charrefÚ&BeautifulSoupHTMLParser.handle_charref"  sV   € ð 7;×6cÑ6cÐdhÓ6iÑ3ˆ¨ßØ8<ˆD�I‰IÔ5ØÒ#Ø×Ñ˜\Ô*ØÒ!Ø×Ñ˜ZÖ(ñ "r7   c               ó    € V ^8„  d   QhRRRR/# r‹   r2   )r3   s   "r4   r5   r6   1  s   € ÷ ñ  Sð ¨Tñ r7   c                ó†   € \         P                  P                  V4      pVe   TpM	RV,          pV P                  V4       R# )z¨Handle a named entity reference by converting it to the
corresponding Unicode character(s) and treating it as textual
data.

:param name: Name of the entity reference.
Nz&%s)r   ÚHTML_ENTITY_TO_CHARACTERÚgetro   )r?   rs   Ú	characterrm   s   &&  r4   Úhandle_entityrefÚ(BeautifulSoupHTMLParser.handle_entityref1  s>   € ô '×?Ñ?×CÑCÀDÓIˆ	ØÒ Ø‰Dð ˜4•<ˆDØ×Ñ˜Ör7   c               ó    € V ^8„  d   QhRRRR/# rl   r2   )r3   s   "r4   r5   r6   D  s   € ÷ #ñ # 3ð #¨4ñ #r7   c                ó®   € V P                   P                  4        V P                   P                  V4       V P                   P                  \        4       R# )z?Handle an HTML comment.

:param data: The text of the comment.
N)r.   ÚendDataro   r   rp   s   &&r4   Úhandle_commentÚ&BeautifulSoupHTMLParser.handle_commentD  s8   € ð
 	�	‰	×ÑÔØ�	‰	×Ñ˜dÔ#Ø�	‰	×Ñœ'Ö"r7   c               ó    € V ^8„  d   QhRRRR/# )r-   Údeclr'   rC   rD   r2   )r3   s   "r4   r5   r6   M  s   € ÷ #ñ # ð #¨ñ #r7   c                óÊ   € V P                   P                  4        V\        R4      R pV P                   P                  V4       V P                   P                  \        4       R# )zIHandle a DOCTYPE declaration.

:param data: The text of the declaration.
zDOCTYPE N)r.   r™   Úlenro   r   )r?   r�   s   &&r4   Úhandle_declÚ#BeautifulSoupHTMLParser.handle_declM  sI   € ð
 	�	‰	×ÑÔØ”C˜
“OÐ%Ð&ˆØ�	‰	×Ñ˜dÔ#Ø�	‰	×Ñœ'Ö"r7   c               ó    € V ^8„  d   QhRRRR/# rl   r2   )r3   s   "r4   r5   r6   W  s   € ÷ ñ  ð ¨ñ r7   c                ó&  € VP                  4       P                  R4      '       d   \        pV\        R4      R pM\        pV P
                  P                  4        V P
                  P                  V4       V P
                  P                  V4       R# )zkHandle a declaration of unknown type -- probably a CDATA block.

:param data: The text of the declaration.
zCDATA[N)Úupperry   r   rŸ   r   r.   r™   ro   )r?   rm   r€   s   && r4   Úunknown_declÚ$BeautifulSoupHTMLParser.unknown_declW  si   € ð �:‰:‹<×"Ñ" 8×,Ò,ÜˆCØœ˜H›˜Ð(‰DäˆCØ�	‰	×ÑÔØ�	‰	×Ñ˜dÔ#Ø�	‰	×Ñ˜#Ör7   c               ó    € V ^8„  d   QhRRRR/# rl   r2   )r3   s   "r4   r5   r6   f  s   € ÷ 1ñ 1˜cð 1 dñ 1r7   c                óÐ   € V P                   P                  4        V P                   P                  V4       V P                  V4       V P                   P                  \        4       R# )zLHandle a processing instruction.

:param data: The text of the instruction.
N)r.   r™   ro   Ú_document_might_be_xmlr   rp   s   &&r4   Ú	handle_piÚ!BeautifulSoupHTMLParser.handle_pif  sG   € ð
 	�	‰	×ÑÔØ�	‰	×Ñ˜dÔ#Ø×#Ñ# DÔ)Ø�	‰	×ÑÔ/Ö0r7   )r=   r;   r+   r.   N)T)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r(   Ú__annotations__r*   r<   rF   rR   rP   rQ   ro   ÚreÚcompilerx   rz   Úclassmethodrˆ   rŽ   r•   rš   r    r¥   rª   Ú__static_attributes__r2   r7   r4   r%   r%   >   s¶   ‡ ð €GˆSÓð €FˆCÓðð(ð JQ÷	(ð. CÓBØ"+Ó+Ø
Óõ,õ <÷(<,÷|)õ$$ð .0¯ZªZ¸Ó-HÐ*Ø)+¯ªÐ4FÓ)GÐ&àô4;ó ð4;õl)õõ&#õ#õ÷1ñ 1r7   r%   c                  ó°   a € ] tR tRt$ RtRtR]R&   RtR]R&   ]t	R]R	&   ]	]
].tR
]R&   R]R&   RtR]R&   RR V 3R llltRR R llt]3R R lltRtV ;t# )r   iq  z‹A Beautiful soup `bs4.builder.TreeBuilder` that uses the
:py:class:`html.parser.HTMLParser` parser, found in the Python
standard library.

FrU   Úis_xmlTÚ	picklabler'   ÚNAMEzIterable[str]Úfeaturesz$Tuple[Iterable[Any], Dict[str, Any]]Úparser_argsÚTRACKS_LINE_NUMBERSc               ó$   € V ^8„  d   QhRRRRRR/# )r-   rº   zOptional[Iterable[Any]]Úparser_kwargszOptional[Dict[str, Any]]r1   r   r2   )r3   s   "r4   r5   Ú"HTMLParserTreeBuilder.__annotate__‚  s(   € ÷ 8ñ 8à,ð8ð 0ð8ð ñ	8r7   c                óü   <€ \        4       pR F   pWS9   g   K  VP                  V4      pWdV&   K"  	  \        \        V `  ! R/ VB  T;'       g    . pT;'       g    / pVP                  V4       RVR&   W3V n        R# )aB  Constructor.

:param parser_args: Positional arguments to pass into
    the BeautifulSoupHTMLParser constructor, once it's
    invoked.
:param parser_kwargs: Keyword arguments to pass into
    the BeautifulSoupHTMLParser constructor, once it's
    invoked.
:param kwargs: Keyword arguments for the superclass constructor.
FÚconvert_charrefsN)r+   r2   )ÚdictÚpopÚsuperr   r<   Úupdaterº   )r?   rº   r½   r1   Úextra_parser_kwargsÚargrc   Ú	__class__s   &&&,   €r4   r<   ÚHTMLParserTreeBuilder.__init__‚  s…   ø€ ô$ #›fÐÛ.ˆCØŽ}ØŸ
™
 3›�Ø+0 CÓ(ñ /ô 	Ô# TÒ3Ñ=°fÒ=Ø!×'Ð' RˆØ%×+Ð+¨ˆØ×ÑÐ0Ô1Ø,1ˆÐ(Ñ)Ø'Ð7ˆÖr7   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r-   Úmarkupr#   Úuser_specified_encodingzOptional[_Encoding]Údocument_declared_encodingÚexclude_encodingszOptional[_Encodings]rC   zDIterable[Tuple[str, Optional[_Encoding], Optional[_Encoding], bool]]r2   )r3   s   "r4   r5   r¾      sD   € ÷ Fñ FàðFð "5ðFð %8ð	Fð
 0ðFð 
NñFr7   c              #  ól  "  € \        V\        4      '       d   VRRR3x € R# . pV'       d   VP                  V4       . pV'       d   VP                  V4       \        VVVRVR7      pVP                  f   \        R4      hVP                  VP                  VP                  VP                  3x € R# 5i)aÂ  Run any preliminary steps necessary to make incoming markup
acceptable to the parser.

:param markup: Some markup -- probably a bytestring.
:param user_specified_encoding: The user asked to try this encoding.
:param document_declared_encoding: The markup itself claims to be
    in this encoding.
:param exclude_encodings: The user asked _not_ to try any of
    these encodings.

:yield: A series of 4-tuples: (markup, encoding, declared encoding,
     has undergone character replacement)

    Each 4-tuple represents a strategy for parsing the document.
    This TreeBuilder uses Unicode, Dammit to convert the markup
    into Unicode, so the ``markup`` element of the tuple will
    always be a string.
NFT)Úknown_definite_encodingsÚuser_encodingsÚis_htmlrÍ   zPCould not convert input to Unicode, and html.parser will not accept bytestrings.)	Ú
isinstancer'   r^   r   Úunicode_markupr   Úoriginal_encodingÚdeclared_html_encodingr�   )r?   rÊ   rË   rÌ   rÍ   rÏ   rÐ   Údammits   &&&&&   r4   Úprepare_markupÚ$HTMLParserTreeBuilder.prepare_markup   sÄ   é € ô2 �fœc×"Ò"à˜4  uÐ-Ò-Ùð 57Ð ß"ð
 %×+Ñ+Ð,CÔDà*,ˆß%ð ×!Ñ!Ð"<Ô=äØØ%=Ø)ØØ/ô
ˆð × Ñ Ò(ô 'Øbóð ð
 ×%Ñ%Ø×(Ñ(Ø×-Ñ-Ø×6Ñ6ð	ô ùs   ‚*B4­B4ÁA,B4c               ó$   € V ^8„  d   QhRRRRRR/# )r-   rÊ   r#   Ú_parser_classztype[BeautifulSoupHTMLParser]rC   rD   r2   )r3   s   "r4   r5   r¾   è  s#   € ÷ 1ñ 1˜:ð 1Ð5Rð 1Ðptñ 1r7   c                ó,  € V P                   w  r4\        V\        4      '       g   Q hV P                  f   Q hV! V P                  .VO5/ VB p VP	                  V4       VP                  4        . Tn        R#   \         d   p\        T4      hRp?ii ; i)z–
:param markup: The markup to feed into the parser.
:param _parser_class: An HTMLParser subclass to use. This is only intended for use in unit tests.
N)	rº   rÒ   r'   r.   ÚfeedÚcloseÚAssertionErrorr   r=   )r?   rÊ   rÚ   r/   r1   ÚparserÚes   &&&    r4   rÜ   ÚHTMLParserTreeBuilder.feedè  s“   € ð
 ×'Ñ'‰ˆô ˜&¤#×&Ò&Ð&Ð&ð
 �y‰yÒ$Ð$Ð$Ù˜tŸy™yÐ:¨4Ò:°6Ñ:ˆð	*Ø�K‰K˜ÔØ�L‰LŒNð /1ˆÖ+øô ô 	*ô ' qÓ)Ð)ûð		*ús   Á!A8 Á8BÂBÂB)rº   )NN)NNN)r¬   r­   r®   r¯   Ú__doc__r¶   r°   r·   Ú
HTMLPARSERr¸   r   r   r¹   r»   r<   r×   r%   rÜ   r´   Ú__classcell__)rÇ   s   @r4   r   r   q  sn   ø‡ ñð €FˆDÓØ€IˆtÓØ€Dˆ#ÓØ# T¨6Ð2€HˆmÓ2Ø5Ó5ð !%Ð˜Ó$÷8ò 8÷<FðP Ul÷ 1õ 1r7   )1râ   Ú
__future__r   Ú__license__Ú__all__Úhtml.parserr   r±   Útypingr   r   r   r	   r
   r   r   r   r   r   r   Úbs4.elementr   r   r   r   r   r   Ú
bs4.dammitr   r   Úbs4.builderr   r   r   r   Úbs4.exceptionsr   Úbs4r   r    Úbs4._typingr!   r"   r#   rã   r'   rZ   r%   r   r2   r7   r4   Ú<module>rð      s±   ðá IÝ "ð €ð ð€õ #Û 	÷÷ ÷ ñ ÷÷ ÷ 9÷ó õ 0çÝ!Ý+÷ñ ð €
à% t¨C°¨H¥~°s¸CÐ&@À$Ð&FÕGÐ ôp1˜jÐ*@ô p1ôf	T1˜Oö T1r7   