+
    lHàjüo  ã                  óø  a € 0 t $ 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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HtHtHt ^ RIHt . RpOt]! 0 Rqm4      t]! 0 Rrm4      t Rst!Rst"Rt#Rt$Rt%Rt&Rt'Rt( ! R R])4      t*R R lt+],! 4       t-]-s.R]/R&   ]P`                  ! 4       t1Rt2Rs3R]/R&   R R lt4R R lt5R R  lt6]Pn                  R! R" l4       t8R# R$ lt9R% R& lt:R' R( lt;R) R* lt<R+ R, lt=RtR- R. llt>R/ R0 lt?R1 R2 lt@R3 R4 ltAR5 R6 ltB^tC^R7^
utDtEtFR8tG^tH^<tIR9 R: ltJR; R< ltKRuR= R> lltLR? R@ ltMRA RB ltNRC RD ltORE RF ltPRG RH ltQRI RJ ltRRKtSRvtTRL RM ltURwRN RO lltVRPRQRRRSRTRU/tWRVR/RW RX lltX]Pn                  RY RZ l4       tYRxR[ R\ lltZR] R^ lt[R_ R` lt\Ra Rb lt]Rc Rd lt^Re Rf lt_Rg Rh lt`Rita^tb^Ètc^PtdRj Rk lteRl Rm ltfR]XR][R	]]R
]eR]eR]e/tgRn]/Ro&   R# )yaP  Document-to-text extraction for ``read_file``: stdlib Jupyter/DOCX/XLSX (always
authoritative for those three), plus legacy Office/OpenDocument/RTF/EPUB/PDF when the
optional ``firecrawl-anydoc`` package (imports as ``anydoc``) is installed. Malformed
documents raise :class:`ExtractionError`; callers fall back to text/binary handling.)ÚannotationsN)ÚPath)ÚAnyÚCallableÚIteratorÚOptional)ÚElementTreeÚExtractionErrorú.ipynbú.docxú.xlsxú.dbú.sqliteú.sqlite3iˆ  é   z<http://schemas.openxmlformats.org/wordprocessingml/2006/mainz9http://schemas.openxmlformats.org/spreadsheetml/2006/mainzChttp://schemas.openxmlformats.org/officeDocument/2006/relationshipsz<http://schemas.openxmlformats.org/package/2006/relationshipsc                  ó   € ] tR t^.tRtRtR# )r	   zDRaised when a supported-looking document cannot be rendered as text.© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    Ú7/home/ubuntu/.hermes/hermes-agent/tools/read_extract.pyr	   r	   .   s   † ÝNr   c               ó    € V ^8„  d   QhRRRR/# ©é   ÚpathÚstrÚreturnr   )Úformats   "r   Ú__annotate__r"   2   s   € ÷  ñ  �Sð  ˜Sñ  r   c                ó¼   € \        V 4      P                  P                  4       pV\        9   ;'       g    V\        9   ;'       d    \        4       R JpV'       d   V# R# )NÚ )r   ÚsuffixÚlowerÚEXTRACTABLE_EXTENSIONSÚANYDOC_EXTENSIONSÚ_anydoc)r   ÚextÚknowns   &  r   Ú
_extensionr,   2   sP   € Ü
ˆt‹*×
Ñ
×
!Ñ
!Ó
#€CØÔ)Ñ)×aÐa¨cÔ5FÑ.F×.`Ð.`Ì7Ë9Ð\`ÐK`€Eßˆ3Ð˜RÐr   r   Ú_anydoc_moduleg     Àr@zOptional[float]Ú_anydoc_failed_atc               ó   € V ^8„  d   QhRR/# )r   r    zOptional[Any]r   )r!   s   "r   r"   r"   A   s   € ÷ ñ �ñ r   c                 óR  € \         \        Jd   \         # \        ;_uu_ 4        \         \        Jd   \         uuRRR4       # \        e5   \        P
                  ! 4       \        ,
          \        8  d    RRR4       R#  ^ RIHp  V ! R4       \        P                  ! R4      s RsRRR4       \         #   \         d"    \        P
                  ! 4       s RRR4       R# i ; i  \         d"    \        P
                  ! 4       s RRR4       R# i ; i  + '       g   i     \         # ; i)z¢Lazily import the optional anydoc converter (None when unavailable; failures retried after
ANYDOC_RETRY_SECONDS so one transient pip/network blip does not stick).N©Úensure_importzdoc-extractÚanydoc)r-   Ú_ANYDOC_UNSETÚ_anydoc_lockr.   ÚtimeÚ	monotonicÚANYDOC_RETRY_SECONDSÚpmr2   Ú	ExceptionÚ	importlibÚimport_moduler1   s    r   r)   r)   A   sé   € ô œ]Ó*ÜÐß	ŽÜ¤Ó.Ü!÷ 
Šô Ò)Ü—N’NÓ$Ô'8Õ8Ô;OÔOØ÷ 
‰ð	Ý(ñ ˜-Ô(ô *3×)@Ò)@ÀÓ)J˜ð !Ð÷% 
ô& Ðøô ô 	Ü $§¢Ó 0ÐØ÷ 
‰ð	ûô ô 	Ü $§¢Ó 0ÐØ÷# 
‰ð	ú÷ 
Žô& ÐúsS   £DÁ2DÁ?B3ÂC"Â#DÂ3 CÃDÃCÃDÃ" DÄDÄDÄDÄD&	c               ó    € V ^8„  d   QhRRRR/# )r   r   r   r    Úboolr   )r!   s   "r   r"   r"   ]   s   € ÷ "ñ " #ð "¨$ñ "r   c                ó*   € \        \        V 4      4      # ©N)r>   r,   ©r   s   &r   Úis_extractable_documentrB   ]   s   € Ü”
˜4Ó Ó!Ð!r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   ÚsizeÚintÚlimitr    ÚNoner   )r!   s   "r   r"   r"   a   s&   € ÷ eñ e�cð e #ð e¨$ñ er   c                ó:   € W8”  d   \        R V R RVR R24      hR# )zDocument too large to convert (Ú,z bytes, limit is Ú)N)r	   )rD   rF   s   &&r   Ú_check_sizerK   a   s0   € Ø„|ÜÐ ?ÀÀQ¸xÐGXÐY^Ð_`ÐXaÐabÐcÓdÐdñ r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   ÚdataÚbytesr%   r   r    zIterator[str]r   )r!   s   "r   r"   r"   g   s!   € ÷ ñ �Uð  Cð ¨Mñ r   c           	   #  óJ  "  € \         P                  ! VRR7      ;_uu_ 4       pVP                  V 4       RRR4        XP                  x € \        P
                  ! \        4      ;_uu_ 4        \        P                  ! VP                  4       RRR4       R#   + '       g   i     Ll; i  + '       g   i     R# ; i  \        P
                  ! \        4      ;_uu_ 4        \        P                  ! XP                  4       RRR4       i   + '       g   i     i ; i; i5i)zWMaterialize backend bytes in a private host temp file; removed even when parsing fails.F)r%   ÚdeleteN)	ÚtempfileÚNamedTemporaryFileÚwriteÚnameÚ
contextlibÚsuppressÚOSErrorÚosÚunlink)rM   r%   Úfhs   && r   Ú
_temp_copyr[   f   s¨   é € ô 
×	$Ò	$¨F¸5×	AÕ	AÀRØ
�‰�Œ÷ 
BðØ�g‰gŠä× Ò ¤×)Õ)Ü�IŠI�b—g‘gÔ÷ *Ñ)÷ 
B×	Aú÷
 *×)Ð)ûŒZ× Ò ¤×)Õ)Ü�IŠI�b—g‘gÔ÷ *×)×)Ð)ÿsb   ‚!D#£BµD#¾C  Á"D#Á.!B,Â
D#ÂB)	Â$D#Â,B=	Â7	D#Ã #D Ã#!D	Ä	D ÄDÄD Ä D#c               ó    € V ^8„  d   QhRRRR/# r   r   )r!   s   "r   r"   r"   r   s   € ÷ Bñ B ð B¨ñ Br   c                óž   € \        V 4      pV\        9   d   \        V,          ! V 4      # V\        9   d   \        V 4      # \	        R V : 24      h)úUnsupported document type: )r,   Ú_STDLIB_EXTRACTORSr(   Ú_extract_anydocr	   )r   r*   s   & r   Úextract_document_textra   r   sL   € Ü
�TÓ
€CØ
Ô Ô Ü! #Ö& tÓ,Ð,Ø
ÔÔÜ˜tÓ$Ð$Ü
Ð7¸±xÐ@Ó
AÐAr   c               ó$   € V ^8„  d   QhRRRRRR/# ©r   rM   rN   r   r   r    r   )r!   s   "r   r"   r"   {   s!   € ÷ 2ñ 2 ð 2¨cð 2°cñ 2r   c                ón  € \        \        V 4      \        4       \        V4      pV\        9   d   \        W4      # V\        9  d   \        RV: 24      h\        W4      ;_uu_ 4       pVR8X  d   \        W1R7      uuRRR4       # \        V,          ! V4      uuRRR4       #   + '       g   i     R# ; i)zBExtract a document already fetched across a file backend boundary.r^   r
   ©Údisplay_pathN)rK   ÚlenÚMAX_DOCUMENT_BYTESr,   r(   Ú_extract_anydoc_bytesr'   r	   r[   Ú_extract_notebookr_   )rM   r   r*   Ú	temp_paths   &&  r   Úextract_document_bytesrl   {   s�   € ä”�D“	Ô-Ô.Ü
�TÓ
€CØ
ÔÔÜ$ TÓ0Ð0Ø
Ô(Ô(ÜÐ ;¸D¹8ÐDÓEÐEÜ	�D×	Ô	 )Ø�(Œ?Ü$ YÔB÷ 
Ò	ô " #Ö& yÓ1÷ 
×	×	Ó	ús   Á(B#ÂB#Â#B4	c               ó    € V ^8„  d   QhRRRR/# r   r   )r!   s   "r   r"   r"   ‰   s   € ÷ ñ  ð ¨ñ r   c                ó   € RV : R2# )u]  Teaching text for anydoc-gated formats (not in the schema: only sessions hitting one pay).

Response-time hint (#95681 pattern): the schema no longer lists the anydoc-gated formats or the
availability caveat â€” a session that never touches a .doc/.odt/.epub never pays for the explanation, and
one that does gets the full story here, with the fix.
zCannot convert a  : this format needs the optional anydoc converter, which is not installed (install blocked or first attempt failed; retried every 5 minutes). Run `hermes pm repair` to restore firecrawl-anydoc, or convert the file yourself via terminal (e.g. libreoffice --headless --convert-to txt).r   rA   s   &r   Ú_anydoc_missing_errorro   ‰   s   € ð ˜$™ð "ð 	ðr   c               ó   € V ^8„  d   QhRR/# )r   r    Útupler   )r!   s   "r   r"   r"   ™   s   € ÷ "ñ "˜Eñ "r   c                 óP  € ^ RI Hp  V ! R4      ;'       g    RpVRJp\        P                  ! \        4      ;_uu_ 4        ^ RIHp V! 4       P                  R4      p\        V\        4      '       d   VP                  R4      RJ d   RpRRR4       W!R3#   + '       g   i     L; i)aÂ  (enabled, api_key, api_url); never raises, no network. Maintainer decision: the ONLY route
is a direct ``FIRECRAWL_API_KEY`` (anydoc defaults api_url); the Nous gateway's Parse proxy
live-probed broken, so it is NOT used. ``file_tools.hosted_ocr: false`` disables even with a
key. The key is a profile credential: read through the secret scope so a multiplexed
secondary never spends (or reveals its documents to) the default profile's Firecrawl key.)Ú
get_secretÚFIRECRAWL_API_KEYN)Úload_config_readonlyÚ
file_toolsÚ
hosted_ocrF)
Úagent.secret_scopers   rU   rV   r:   Úhermes_cli.configru   ÚgetÚ
isinstanceÚdict)rs   Úapi_keyÚenabledru   Úsections        r   Ú_hosted_ocr_configr€   ™   sˆ   € õ .ÙÐ,Ó-×5Ð5°€GØ˜TÐ!€GÜ	×	Ò	œY×	'Õ	'Ý:Ù&Ó(×,Ñ,¨\Ó:ˆÜ�gœt×$Ò$¨¯©°\Ó)BÀeÓ)KØˆG÷	 
(ð
 ˜TÐ!Ð!÷ 
(×	'ús   ¿A
BÂB%	c               ó   € V ^8„  d   QhRR/# )r   r    r>   r   )r!   s   "r   r"   r"   ª   s   € ÷ #ñ #˜dñ #r   c                 ó$   € \        4       ^ ,          # )zZProbe for read_file's schema line; a key failing at conversion time surfaces in NEEDS-OCR.)r€   r   r   r   Úhosted_ocr_availablerƒ   ª   s   € äÓ Õ"Ð"r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r   r   Úhosted_errorr    r   )r!   s   "r   r"   r"   ¯   s!   € ÷ 'ñ '˜Sð '°sð 'ÀCñ 'r   c                ó¦   € V'       d   RP                  R V 4       4      MRpV'       d   RV R2MRpRV RV R	\        P                  ! V 4       R
2# )z’NeedsOcrError result when hosted OCR is off/failed; hints at CHECKING for an OCR skill
(never names one) and never advertises the hosted_ocr knob.ú, c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir@   ©r   )Ú.0Úps   & r   Ú	<genexpr>Ú%_needs_ocr_warning.<locals>.<genexpr>²   s   é € Ð0©% Qœ#˜aŸ&˜&«%ùó   ‚Úunknownz%Hosted OCR was attempted and failed (z). r$   z[NEEDS OCR: pages uW    of this PDF are scanned images with no text layer â€” their content is MISSING below. zfIf the missing pages matter: render just those pages with `pdftoppm -jpeg -r 150 -f <first> -l <last> zj $TMPDIR/page` and inspect via vision_analyze, or check whether an OCR skill is available (skills_list).]
)ÚjoinÚshlexÚquote)r   Úpagesr…   Ú	page_listÚhosteds   &&&  r   Ú_needs_ocr_warningr–   ¯   sf   € ÷ 5:�—	‘	Ñ0©%Ó0Ô0¸y€IßJVÐ4°\°NÀ#ÑFÐ\^€Fà
˜Y˜Kð (BØBHÀð	7Ü7<·{²{À4Ó7HÐ6Ið J&ð	&ð'r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Útextr   r   r   Úpdf_notezCallable[[], str]r    r   )r!   s   "r   r"   r"   ½   s0   € ÷ bñ b ð b¨3ð bÐ:Kð bÐPSñ br   c                ó  € \        V \        4      '       d   V P                  4       '       g   \        R4      h\	        V4      P
                  P                  4       R8X  d   V! 4       MRV P                  R4      ,           R,           # )u·   Normalize converter output; PDFs get the coverage note PREPENDED (read_file paginates, so a
footer may never be fetched) â€” this covers PARTIAL scan gaps that raise no NeedsOcrError.z%Document contains no extractable textú.pdfr$   Ú
)r{   r   Ústripr	   r   r%   r&   Úrstrip)r˜   r   r™   s   &&&r   Ú_finalize_anydoc_textrŸ   ½   s`   € ô �dœC× Ò ¨¯
©
¯ªÜÐEÓFÐFÜ˜t›*×+Ñ+×1Ñ1Ó3°vÔ=‰HŒJÀ2ÈÏÉÐUYÓIZÕZÐ]aÕaÐar   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Úmodr   r   r   ÚexcÚBaseExceptionr    r   )r!   s   "r   r"   r"   Å   s(   € ÷ 9ñ 9˜#ð 9 Sð 9¨}ð 9Àñ 9r   c                óš  € \        \        VR. 4      ;'       g    . 4      p\        4       w  rEpRpV'       dR    RV3RV33 UU	u/ uF  w  r‰V	'       g   K  W‰bK  	  p
pp	V P                  ! V3RR/V
B P	                  R4      R,           # \        WV4      # u up	pi   \
         d%   p\        T4      P                   RT 2p R	p?L<R	p?ii ; i)
zXanydoc >= 0.2 scanned-pages signal: hosted OCR when a route exists, else teach recovery.r“   r$   r}   Úapi_urlÚocrr•   rœ   ú: N)	ÚlistÚgetattrr€   Úto_markdownrž   r:   Útyper   r–   )r¡   r   r¢   r“   r~   r}   r¥   r…   ÚkÚvÚextraÚ
hosted_excs   &&&         r   Ú_ocr_scanned_pdfr°   Å   sÒ   € ä”˜˜g rÓ*×0Ð0¨bÓ1€EÜ 2Ó 4Ñ€G�gØ€Lßð	HØ(1°7Ð';¸iÈÐ=QÑ&RÔXÑ&R™d˜aÔVW”T�Q’TÑ&RˆEÑXØ—?’? 4Ñ?¨XÐ?¸Ñ?×FÑFÀtÓLÈtÕSÐSô ˜d¨<Ó8Ð8ùó	 Yøäô 	HÜ" :Ó.×7Ñ7Ð8¸¸:¸,ÐG�Lûð	Hús/   ¹B ÁBÁBÁ-B ÂB ÂC
Â&CÃC
c               ó    € V ^8„  d   QhRRRR/# r   r   )r!   s   "r   r"   r"   Ó   s   € ÷ Oñ O˜#ð O #ñ Or   c                ó  a € \        4       pVf   \        \        S 4      4      h \        \        P
                  P                  S 4      \        4       VP                  S 4      p\#        TS T 3R l4      #   \         d    h \         d   p\        \        T4      4      ThR p?i\         d^   p\        TRR 4      pTe$   \        Y44      '       d   \        TS T4      u R p?# \        \        T4      P                    RT 24      ThR p?ii ; i)NÚNeedsOcrErrorr§   c                 ó   <€ \        S 4      # r@   )Ú_pdf_coverage_noterA   s   €r   Ú<lambda>Ú!_extract_anydoc.<locals>.<lambda>ä   s   ø€ Ô5GÈÔ5Mr   )r)   r	   ro   rK   rX   r   ÚgetsizeÚMAX_ANYDOC_BYTESrª   rW   r   r:   r©   r{   r°   r«   r   rŸ   )r   r¡   r˜   r¢   Ú	needs_ocrs   f    r   r`   r`   Ó   sç   ø€ Ü
‹)€CØ
‚{ÜÔ3°DÓ9Ó:Ð:ðGÜ”B—G‘G—O‘O DÓ)Ô+;Ô<Ø�‰˜tÓ$ˆô !  tÔ-MÓNÐNøô ô ØÜô 1Üœc #›hÓ'¨SÐ0ûÜô GÜ˜C °$Ó7ˆ	ØÒ ¤Z°×%?Ò%?Ü# C¨¨sÓ3Õ3ä¤ c£×!3Ñ!3Ð 4°B°s°eÐ<Ó=À3ÐFûðGús;   ¥>A4 Á4D
Â	D
Â
BÂD
Â,D
Â-.DÃD
Ã!$DÄD
c               ó$   € V ^8„  d   QhRRRRRR/# rc   r   )r!   s   "r   r"   r"   ç   s&   € ÷ 	`ñ 	` ð 	`¨Sð 	`°Sñ 	`r   c                ó2  a a€ \        4       pVf   \        \        S4      4      h\        \	        S 4      \
        4        VP                  S 4      p\        TST T3R l4      #   \         d*   p\        \        T4      P                   RT 24      ThR p?ii ; i)Nr§   c                 ó   <€ \        S S4      # r@   )Ú_pdf_coverage_note_from_bytes)rM   r   s   €€r   r¶   Ú'_extract_anydoc_bytes.<locals>.<lambda>ð   s   ø€ Ô5RÐSWÐY]Ô5^r   )r)   r	   ro   rK   rg   r¹   Úto_markdown_bytesr:   r«   r   rŸ   )rM   r   r¡   r˜   r¢   s   ff   r   ri   ri   ç   sŽ   ù€ Ü
‹)€CØ
‚{ÜÔ3°DÓ9Ó:Ð:Ü”�D“	Ô+Ô,ðGØ×$Ñ$ TÓ*ˆô !  tÕ-^Ó_Ð_øô ô GÜ¤ c£×!3Ñ!3Ð 4°B°s°eÐ<Ó=À3ÐFûðGús   ¿A" Á"BÁ-$BÂBgš™™™™™É?g      4@c               ó    € V ^8„  d   QhRRRR/# )r   r   r   r    zOptional[list[str]]r   )r!   s   "r   r"   r"   ý   s   € ÷ ñ ˜#ð Ð"5ñ r   c                óô  € \         P                  ! R4      f   R#  \        P                  ! RV R.\        P                  R\
        RR7      pTP                  ^ 8X  d   TP                  P                  RRR	7      MR
pT'       d   TP                  R4      M. pT'       d.   TR,          P                  4       '       g   TP                  4        T;'       g    R#   \        \        P                  3 d     R# i ; i)z5Per-page extracted text, or None when undeterminable.Ú	pdftotextNÚ-TF)ÚstdinÚcapture_outputÚtimeoutÚcheckzutf-8Úreplace)Úerrorsr$   Úéÿÿÿÿ)ÚshutilÚwhichÚ
subprocessÚrunÚDEVNULLÚPDF_PAGE_SCAN_TIMEOUTrW   ÚSubprocessErrorÚ
returncodeÚstdoutÚdecodeÚsplitr�   Úpop)r   ÚprocÚoutr“   s   &   r   Ú_pdf_page_textsrÛ   ý   sÄ   € ä‡|‚|�KÓ Ò(ÙðÜ�~Š~Ø˜$ Ð$¬J×,>Ñ,>ÈtÔ]rÐzôAˆð <@¿?¹?ÈaÔ;Oˆ$�+‰+×
Ñ
˜W¨YÐ
Ô
7ÐUW€Cß"ˆC�I‰I�dŒO¨€Eß�U˜2•Y—_‘_×&Ò&Ø�	‰	ŒØ�=ˆ=�DÐøô ”Z×/Ñ/Ð0ô Úðús   œ0C ÃC7Ã6C7c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Úcountsz	list[int]Útextsú	list[str]Úemptyr    r   r   )r!   s   "r   r"   r"     s(   € ÷ ñ �Yð  yð ¸ð Àsñ r   c                ó<  € \         P                  ! \        V4      R 4       UUu. uF  w  r4\        V4      NK  	  pppV Uu. uF"  qf^ ,          ^,          VR,          ^,          3NK$  	  pp. pVR\          F¹  w  ršRp\        V	^,
          RR4       FR  pW,          \        8¼  g   K  RP                  W,          P                  4       4      R\         pRV RV^,            R2p M	  Wš8X  d   RV	 2MR	V	 R
V
 2pW©,
          ^,           pTP                  RT RT RV^8w  d   RMR RV 24       K»  	  \        V4      \        8”  d;   V\        R pVP                  R\        V4       R\        R V 4       4       R24       RP                  V4      # u uppi u upi )zYPer-gap breakdown labeled with the text before each gap, so the agent picks which to OCR.c                ó0   € V ^,          V ^ ,          ,
          # )é   r   )Úes   &r   r¶   Ú_gap_map.<locals>.<lambda>  s   € ÈqÐQRÍtÐVWÐXYÕVZÎ{r   Nr$   Ú u    â€” after "z" (prJ   zpage zpages rÄ   z  z (z pageÚsu     â€¦ z more gaps (c              3  óD   "  € T F  w  rW!,
          ^,           x € K  	  R# 5i)rã   Nr   )rŠ   ÚaÚbs   &  r   rŒ   Ú_gap_map.<locals>.<genexpr>  s   é € Ð8TÉtÁtÀq¸½À¿ºËtùs   ‚ z pages)rœ   rÌ   )Ú	itertoolsÚgroupbyÚ	enumerater¨   ÚPDF_GAP_MAP_MAX_ENTRIESÚrangeÚPDF_EMPTY_PAGE_CHARSr�   r×   Ú_GAP_CONTEXT_CHARSÚappendrg   Úsum)rÝ   rÞ   rà   Ú_kÚgÚrunsrÐ   ÚrangesÚlinesré   rê   ÚlabelÚprevÚsnippetÚspanÚnÚrests   &&&              r   Ú_gap_mapr     s’  € ô "+×!2Ò!2´9¸UÓ3CÑEZÔ![Ô\Ñ![™˜ŒD�ŽGÑ![€DÑ\Ù15Ó6±¨#�1�v�a�y˜#˜b�' !�*Ó%±€FÐ6Ø€EØÐ/Ô/Ó0‰ˆØˆÜ˜!˜a�%  RÖ(ˆDØ�|Ô3Ö3ØŸ(™( 5¥;×#4Ñ#4Ó#6Ó7Ð8KÔ9KÐL�Ø& w i¨t°D¸1µH°:¸QÐ?�Ùñ	 )ð
  œf��q�c‰{¨F°1°#°Q°q°cÐ*:ˆØ�E�A�IˆØ�‰�r˜$˜˜r !  E°°a´©#¸RÐ)@ÀÀ%ÀÐIÖJñ 1ô ˆ6ƒ{Ô,Ô,ØÔ-Ð.Ð/ˆØ�‰�vœc $›i˜[¨´SÑ8TÉtÓ8TÓ5TÐ4UÐU\Ð]Ô^Ø�9‰9�UÓÐùó! ]ùÚ6s   ¥FÁ(Fc               ó$   € V ^8„  d   QhRRRRRR/# ©r   r   r   rf   zOptional[str]r    r   )r!   s   "r   r"   r"   #  s!   € ÷ ñ ˜Sð °ð Èñ r   c           
     ó0  € \        V 4      pV'       d   \        V4      ^8  d   R# V Uu. uF  p\        VP                  4       4      NK  	  pp\        V4       UUu. uF  w  rVV\        8  g   K  V^,           NK  	  ppp\        V4      p\        V4      p	W˜,          \
        8¬  ;'       g
    V	\        8¬  p
V	\        8  g	   V
'       g   R# T;'       g    T pR\        V4       RV R\        WBV4       R\        P                  ! V4       R2	# u upi u uppi )zŸWarning header when many pages yielded no text, else ''. ``display_path`` (default ``path``,
which may be a host temp file) is what the recovery command shows.r$   z[EXTRACTION COVERAGE WARNING: z of u   pages in this PDF yielded no text. Those pages are likely scanned images (or blank) â€” their content is MISSING from the extracted text below, even where section headers appear with empty bodies. Unreadable gaps, each labeled with the last text extracted before it:
u¬   
Decide which gaps you actually need â€” do NOT OCR or render everything. For the gaps that matter, render just that range with `pdftoppm -jpeg -r 150 -f <first> -l <last> z“ $TMPDIR/page` and inspect each image with the vision_analyze tool, or use the ocr-and-documents skill (marker-pdf) for bulk OCR of large ranges.]
)rÛ   rg   r�   rî   rñ   ÚPDF_COVERAGE_MIN_RATIOÚPDF_COVERAGE_ABSOLUTE_EMPTYÚPDF_COVERAGE_MIN_EMPTYr   r‘   r’   )r   rf   rÞ   ÚpagerÝ   Úirþ   rà   ÚtotalÚn_emptyÚenoughÚshowns   &&          r   rµ   rµ   #  s  € ô ˜DÓ!€Eß”C˜“J ”NÙÙ,1Ó2©E DŒc�$—*‘*“,Ö©E€FÐ2Ü(¨Ô0ÔMÑ0‘t�q°AÔ8LÑ4LŒUˆQ��UˆUÑ0€EÑMÜ�‹K€EÜ�%‹j€GØ�_Ô 6Ñ6×`Ð`¸'ÔE`Ñ:`€FØÔ'Ô'¯vÙØ× Ð ˜D€Eà(Üˆu‹:ˆ,�d˜5˜'ð "4ô
 �F 5Ó)Ð
*ð +7ô 8=·{²{À5Ó7IÐ6Jð Kð	ðùò 3ùÛMs   ª"DÁDÁ0Dc               ó$   € V ^8„  d   QhRRRRRR/# )r   rM   rN   rf   r   r    r   )r!   s   "r   r"   r"   A  s!   € ÷ ñ ¨ð ¸Sð ÀSñ r   c           	     ó  € \         P                  ! \        4      ;_uu_ 4        \        V R4      ;_uu_ 4       p\	        W!R7      uuRRR4       uuRRR4       #   + '       g   i     M; iRRR4       R#   + '       g   i     R# ; i)zRCoverage note for backend PDF bytes via a host temp copy (pdftotext needs a path).r›   re   Nr$   )rU   rV   rW   r[   rµ   )rM   rf   rk   s   && r   r¾   r¾   A  sQ   € ä	×	Ò	œW×	%Õ	%¤z°$¸×'?Ô'?À9Ü! )ÔG÷ (@Ñ'?×	%Ò	%×'?×'?ú×	%á÷ 
&Ö	%áús"   £A6¸A	Á
A6ÁA)Á$A6Á6B	c               ó$   € V ^8„  d   QhRRRRRR/# )r   rù   rß   Úempty_errorr   r    r   )r!   s   "r   r"   r"   H  s!   € ÷ 0ñ 0�9ð 0¨3ð 0°3ñ 0r   c                óÚ   € \         ;QJ d    R V  4       F  '       g   K   RM	  RM! R V  4       4      '       g   \        V4      hRP                  V 4      P                  R4      R,           # )zRJoin extracted lines with a single trailing newline; raise when nothing non-blank.c              3  ó@   "  € T F  qP                  4       x € K  	  R # 5ir@   ©r�   )rŠ   Úlines   & r   rŒ   Ú_joined.<locals>.<genexpr>J  s   é € Ð.© �z‰z�|ˆ|«ùó   ‚TFrœ   )Úanyr	   r�   rž   )rù   r  s   &&r   Ú_joinedr  H  sM   € ç‹3Ñ.©Ó.�3�3Š3Ñ.©Ó.×.Ò.Ü˜kÓ*Ð*Ø�9‰9�UÓ×"Ñ" 4Ó(¨4Õ/Ð/r   c               ó   € V ^8„  d   QhRR/# )r   r    r   r   )r!   s   "r   r"   r"   O  s   € ÷ 5ñ 5˜Cñ 5r   c                ó’   € \        V \        4      '       d   RP                  R V  4       4      p \        V \        4      '       d   V # R# )zANotebook source/text fields are a str or a list of str fragments.r$   c              3  óV   "  € T F  p\        V\        4      '       g   K  Vx € K!  	  R # 5ir@   ©r{   r   )rŠ   Úitems   & r   rŒ   Ú_source_text.<locals>.<genexpr>R  s   é € ÐJ©& $´J¸tÄS×4IŸš«&ùs   ‚)Ÿ
))r{   r¨   r�   r   )Úsources   &r   Ú_source_textr   O  s:   € ä�&œ$×ÒØ—‘ÑJ©&ÓJÓJˆÜ ¬×,Ò,ˆ6Ð4°"Ð4r   c               ó    € V ^8„  d   QhRRRR/# )r   Ún_bytesrE   r    r   r   )r!   s   "r   r"   r"   V  s   € ÷ Pñ P˜ð P ñ Pr   c                óD   € V R 8¼  d   \        V R ,          4       R2# V  R2# )i   z KBz B)Úround)r"  s   &r   Ú_human_sizer%  V  s*   € Ø,3°t¬OŒe�G˜d•NÓ#Ð$ CÐ(ÐOÀGÀ9ÈBÀÐOr   c               ó    € V ^8„  d   QhRRRR/# )r   Úpayloadr   r    rE   r   )r!   s   "r   r"   r"   Z  s   € ÷ Wñ W˜3ð W 3ñ Wr   c                óê   € \         P                  ! RRV 4      p\        ^ \        V4      ^,          ^,          \	        ^\        V4      \        VP                  R4      4      ,
          4      ,
          4      # )zBApproximate decoded size of a base64 payload (whitespace ignored).z[^0-9+/=A-Za-z]r$   Ú=)ÚreÚsubÚmaxrg   Úminrž   )r'  Úcleans   & r   Ú_base64_bytesr/  Z  sR   € ä�FŠFÐ% r¨7Ó3€EÜˆq”3�u“: •> aÕ'¬#¨a´°U³¼cÀ%Ç,Á,ÈsÓBSÓ>TÕ1TÓ*UÕUÓVÐVr   c               ó    € V ^8„  d   QhRRRR/# )r   r˜   r   r    r   )r!   s   "r   r"   r"   `  s   € ÷ Uñ U˜Sð U Sñ Ur   c                óˆ   € ^ RI Hp RP                  R V! V 4      P                  RR4      P	                  R4       4       4      # )zQStrip ANSI escapes; keep only the final ``\r`` frame of each line (tqdm redraws).)Ú
strip_ansirœ   c              3  ó¤   "  € T FA  pVP                  R 4       Uu. uF  q"'       g   K  VNK  	  up;'       g    R.R,          x € KC  	  R# u upi 5i)Úr$   NrÌ   )r×   )rŠ   r  Úfs   &  r   rŒ   Ú%_clean_stream_text.<locals>.<genexpr>c  sM   é € ð UÙ!S˜ð #'§*¡*¨TÔ"2Ó8Ñ"2˜Q³a—q�qÑ"2Ñ8×@Ð@¸R¸DÀ"×EÒEÛ!Sùò 9ùs   ‚Aš	A¨A®	A¸Az
)Útools.ansi_stripr2  r�   rÉ   r×   )r˜   r2  s   & r   Ú_clean_stream_textr8  `  sD   € å+Ø�9‰9ñ UÙ!+¨DÓ!1×!9Ñ!9¸&À$Ó!G×!MÑ!MÈdÔ!SóUó Uð Ur   i N  c               ó    € V ^8„  d   QhRRRR/# )r   Úoutputr   r    r   r   )r!   s   "r   r"   r"   l  s   € ÷  Rñ  R #ð  R¨#ñ  Rr   c                óB  a € \        S \        4      '       g   R# S P                  R4      pVR8X  d?   \        \	        S P                  RR4      4      4      pVP                  4       '       d   V# R# VR9   d›   S P                  R4      p\        \        V\        4      '       d   RP                  \        R V4      4      MR4      pRS P                  R	R4       R
S P                  RR4       2P                  R
4      pV RV 2P                  4       # VR9  d   R# S P                  R4      p\        V\        4      '       gX   \        S P                  R4      \        \        34      '       d   RS R,          /M/ pVP                  V 3R l\         4       4       RV9   d   R# R F?  pWv9   d   \        \	        Wg,          4      4      MRpVP                  4       '       g   K=  Vu # 	  VP                  4        FZ  w  rx\        V\        4      '       g   K  VP                  R4      '       g   K6  RV R\        \!        \	        V4      4      4       R2u # 	  RV9   d!   R\#        \	        VR,          4      4      R R2# RRP                  R V 4       4      ;'       g    R R2# ) z´One notebook output as compact text: stream/traceback/textual results kept; token-heavy
payloads (images, HTML, widgets) become sized placeholders. Handles v4 and legacy v3 shapes.r$   Úoutput_typeÚstreamr˜   Ú	tracebackrœ   c                ó"   € \        V \        4      # r@   r  )Úls   &r   r¶   Ú'_notebook_output_text.<locals>.<lambda>w  s   € Ä
È1ÌcÔ@Rr   zError: Úenamer§   ÚevaluerM   ú
text/plainc              3  óP   <"  € T F  w  rVS9   g   K  VSV,          3x € K  	  R # 5ir@   r   )rŠ   r¬   Úmimer:  s   &  €r   rŒ   Ú(_notebook_output_text.<locals>.<genexpr>€  s%   øé € ÐR±]©'¨!ÀaÈ6ÁkÔ%�T˜6 !�9Õ%³]ùs   ƒ&“&z(application/vnd.jupyter.widget-view+jsonu    [interactive widget â€” omitted]zimage/Ú[u    output â€” z
, omitted]ú	text/htmlu   [text/html output â€” rI   z chars, omitted]r‡   c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir@   r‰   )rŠ   Úms   & r   rŒ   rG  Œ  s   é € Ð.© Aœ˜QŸ˜«ùrŽ   r�   u    output â€” omitted]>   ÚerrorÚpyerr>   ÚpyoutÚdisplay_dataÚexecute_result)rD  ztext/markdown)r{   r|   rz   r8  r   r�   r¨   r�   Úfilterrž   r   ÚupdateÚ_V3_MIME_KEYSÚitemsÚ
startswithr%  r/  rg   )	r:  ÚotypeÚbodyÚtbÚtb_textÚheaderrM   rF  Úvalues	   f        r   Ú_notebook_output_textr\  l  sA  ø€ ô �fœd×#Ò#ÙØ�J‰J�}Ó%€EØ�ÔÜ!¤,¨v¯z©z¸&À"Ó/EÓ"FÓGˆØ—z‘z—|’|ˆtÐ+¨Ð+ØÐ"Ô"Ø�Z‰Z˜Ó$ˆÜ$Ü(2°2´t×(<Ò(<ð &*§Y¡Y¬vÑ6RÐTVÓ/WÔ%XØBDóFˆà˜6Ÿ:™: g¨rÓ2Ð3°2°f·j±jÀÈ2Ó6NÐ5OÐP×WÑWÐX\Ó]ˆØ�˜˜G˜9Ð%×,Ñ,Ó.Ð.ØÐ?Ô?ÙØ�:‰:�fÓ€DÜ�dœD×!Ò!Ü1;¸F¿J¹JÀvÓ<NÔQTÔVZÐP[×1\Ò1\�˜f V�nÑ-ÐbdˆØ�‰ÔRµ]ÓRÔRØ1°TÔ9Ù1Û/ˆØ?C¼|Ô!¤,¨t­zÓ":Ô;ÐQSˆØ�:‰:�<Œ<ØŠKñ 0ð —z‘z–|‰ˆÜ�dœC× Ô  T§_¡_°X×%>Ô%>Ø�t�f˜L¬´]Ä<ÐPUÓCVÓ5WÓ)XÐ(YÐYcÐdÒdñ $ð �dÔØ'¬¬L¸¸kÕ9JÓ,KÓ(LÈQÐ'OÐO_Ð`Ð`Øˆt�y‰yÑ.©Ó.Ó.×;Ð;°)Ð<Ð<PÐQÐQr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Úcellr|   Ú
jq_pointerr   Úfilenamer    r   )r!   s   "r   r"   r"   �  s.   € ÷ 	\ñ 	\˜Dð 	\¨cð 	\À#ð 	\Èsñ 	\r   c           	     óŠ  € V P                  R 4      p\        V\        4      '       g   R# RP                  \	        R\        \        V4      4      4      p\        V4      \        8:  d   V# V'       d%   V'       d   RV R\        P                  ! V4       2MRp\        V4      \        ,
          pVR\         RVR RV R	2,           # )
Úoutputsr$   rœ   Nu    â€” full output: jq -r 'z' u   
â€¦ [rI   z output chars truncatedÚ])rz   r{   r¨   r�   rQ  Úmapr\  rg   Ú_MAX_OUTPUT_CHARSr‘   r’   )r^  r_  r`  rb  ÚjoinedÚhintÚomitteds   &&&    r   Ú_notebook_outputsri  �  s¬   € Ø�h‰h�yÓ!€GÜ�gœt×$Ò$ÙØ�Y‰Y”v˜d¤CÔ(=¸wÓ$GÓHÓI€FÜ
ˆ6ƒ{Ô'Ô'ØˆßPZ×_gÐ& z l°"´U·[²[ÀÓ5JÐ4KÑLÐmo€DÜ�&‹kÔ-Õ-€GØÐ$Ô$Ð%¨'°'¸!°Ð<SÐTXÐSYÐYZÐ([Õ[Ð[r   ÚmarkdownÚMarkdownÚcodeÚCodeÚrawÚRawrf   c               ó$   € V ^8„  d   QhRRRRRR/# r  r   )r!   s   "r   r"   r"   ž  s!   € ÷ "?ñ "?˜Cð "?°-ð "?È3ñ "?r   c               ó^  €  \        V R RR7      ;_uu_ 4       p\        P                  ! V4      pRRR4       \        X\        4      '       g   \        R4      hTP                  R4      p\        T\        4      '       d&   \        T4       UUu. uF  w  rgRT R2T3NK  	  pppMw\        TP                  R	. 4      4       U	U
UUu. uFL  w  rš\        T
\        4      '       g   K  \        T
P                  R. 4      4       F  w  r·R
T	 RT R2T3NK  	  KN  	  ppp
p	pT'       g   \        R4      hTe   TMT p\        P                  \        ^ 4      p. pT Fò  w  r÷\        T\        4      '       d   TP                  R4      MRpT\        9  d   K;  TT;;,          ^,          uu&   TR8w  d   RTT,           2MRp\        TP                  RR4      4      P                  R4      pTR\        T,           RT R2TR.,          pTR8X  d   \!        YT4      MRpT'       g   KÌ  TRTT,           R2TP                  R4      R.,          pKô  	  \#        TR4      #   + '       g   i     EL0; i  \        \        \        P
                  3 d   p\        RT 24      ThRp?ii ; iu uppi u uppp
p	i )z	utf-8-sigrÉ   )ÚencodingrÊ   NzNot a valid notebook: zNotebook root is not an objectÚcellsz.cells[z	].outputsÚ
worksheetsz.worksheets[z].cells[zNotebook contains no cellsÚ	cell_typern  ræ   r$   r  rœ   u	   # â”€â”€ z cellõ    â”€â”€rl  u   # â”€â”€ Output (cell u   ) â”€â”€z#Notebook contains no readable cells)ÚopenÚjsonÚloadrW   Ú
ValueErrorÚJSONDecodeErrorr	   r{   r|   rz   r¨   rî   ÚfromkeysÚ_CELL_LABELSr   rž   ri  r  )r   rf   rZ   Únbr¢   Ú	raw_cellsr  r^  rs  ÚwiÚwsÚciÚnb_namerÝ   rÚ   r_  Útypr%   r  Úrendereds   &$                  r   rj   rj   ž  sx  € ðGÜ�$ °Y×?Õ?À2Ü—’˜2“ˆB÷ @ô �bœ$×ÒÜÐ>Ó?Ð?Ø—‘�w“€IÜ�)œT×"Ò"Ü?HÈÔ?SÔTÑ?S±G°A�G˜A˜3˜iÐ(¨$Ó/Ñ?SˆÑTˆô $ B§F¡F¨<¸Ó$<Ô=ö<á=‘�ÄÈBÔPT×AUô =ä% b§f¡f¨W°bÓ&9Ö:‘�ð ˜B˜4˜x¨ t¨9Ð5°tÓ<á:ñ =Ù=ð 	ó <÷ ÜÐ:Ó;Ð;ð +Ò6‰l¸D€GÜ�]‰]œ<¨Ó+€FØ€CÛ!Ñˆ
Ü'1°$¼×'=Ò'=ˆd�h‰h�{Ô#À4ˆØ”lÔ"ÙØˆs��qÕ‹Ø&)¨U¤l�1�V˜C•[�MÑ"¸ˆÜ˜dŸh™h x°Ó4Ó5×<Ñ<¸TÓBˆØ�)œL¨Õ-Ð.¨e°F°8¸7ÐCÀVÈRÐPÕPˆØCFÈ&Ä=Ô$ T°wÔ?ÐVXˆß‰8ØÐ,¨V°C­[¨M¸ÐBÀHÇOÁOÐTXÓDYÐ[]Ð^Õ^ŠCñ "ô �3Ð=Ó>Ð>÷A @×?Ð?ûä”Z¤×!5Ñ!5Ð6ô GÜÐ 6°s°eÐ<Ó=À3ÐFûðGüó Uùõ<sE   ‚I* ˜I¯I* ÂJ!ÃJ'
Ã#3J'
ÉI'	É!I* É'I* É* JÊ
JÊJc               ó$   € V ^8„  d   QhRRRRRR/# )r   r   r   Úkindr    zIterator[zipfile.ZipFile]r   )r!   s   "r   r"   r"   Ä  s'   € ÷ ^ñ ^�Cð ^˜sð ^Ð'@ñ ^r   c              #  ó\  "  €  \         P                  ! V 4      ;_uu_ 4       pVx € RRR4       R#   + '       g   i     R# ; i  \         P                  \        3 dJ   p\	        T\         P                  4      p\        T'       d   RT RT 24      Th\        T4      4      ThRp?ii ; i5i)zROpen an OOXML package; bad-zip/OS failures (body included) become ExtractionError.NzNot a valid r§   )ÚzipfileÚZipFileÚ
BadZipFilerW   r{   r	   r   )r   r‡  Úzfr¢   Úbad_zips   &&   r   Ú	_open_ziprŽ  Ã  s‰   é € ð^Ü�_Š_˜T×"Ô" bØŠH÷ #×"×"Ò"ûä×Ñ¤Ð(ô ^Ü˜S¤'×"4Ñ"4Ó5ˆÜ¿g ¨T¨F°"°S°EÐ:ÓTÐZ]Ð]Ì3ÈsË8ÓTÐZ]Ð]ûð^üsG   ‚B,„A ¢1§A ¯B,±A	¼A Á B,ÁA ÁB)Á AB$Â$B)Â)B,c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rŒ  zzipfile.ZipFilerT   r   Úoptionalr>   r    r   r   )r!   s   "r   r"   r"   Î  s(   € ÷ 	ñ 	�ð 	¨ð 	°tð 	Èñ 	r   c                ó>  €  \         P                  ! V P                  V4      4      #   \        \         P                  3 d[   pT'       d   \         P
                  ! R4      u Rp?# \        \        T\        4      '       d   RT 24      ThRT RT 24      ThRp?ii ; i)zYParse a package part; ``optional`` parts yield an empty element when absent or malformed.ÚmissingNzMissing zMalformed XML in r§   )ÚETÚ
fromstringÚreadÚKeyErrorÚ
ParseErrorÚElementr	   r{   )rŒ  rT   r�  r¢   s   &&& r   Ú_zip_xmlr™  Î  s‘   € ðÜ�}Š}˜RŸW™W T›]Ó+Ð+øÜ”b—m‘mÐ$ô ßÜ—:’:˜iÓ(Õ(ÜÜ!+¨C´×!:Ò!:ˆh�t�fÐó
àð	ØBSÐTXÐSYÐY[Ð\_Ð[`Ð@aó
àð	ûðús!   ‚$' §BÁBÁBÁ%2BÂBc               ó    € V ^8„  d   QhRRRR/# r   r   )r!   s   "r   r"   r"   Ú  s   € ÷ ?ñ ?˜ð ? ñ ?r   c                ó   aa	a
€ \        V R 4      ;_uu_ 4       p\        VR4      pRRR4       R\         R2o
S
 R2RS
 R2RS
 R	2R/o. pXP                  S
 R
24       F‰  pVP                  S
 R24       UUu0 uF  qUP                  4        F  qfkK  	  K  	  uppo	RP	                  VV	V
3R lVP                  4        4       4      pVP                  VP                  R4      4       K‹  	  \        VR4      #   + '       g   i     LÚ; iu uppi )ÚDOCXzword/document.xmlNÚ{Ú}ÚtabÚ	Úbrrœ   Úcrr‹   Úrtr$   c              3  óÀ   <"  € T FS  qS9  g   K  VP                   S R 28X  d   VP                  ;'       g    RMSP                  VP                   R4      x € KU  	  R# 5i)Útr$   N)Útagr˜   rz   )rŠ   rþ   ÚbreaksÚguideÚws   & €€€r   rŒ   Ú _extract_docx.<locals>.<genexpr>ã  sO   øé € ð 4á �¨U¡Nô J˜aŸe™e¨!¨¨A wÔ.ˆQ�V‰V�\ˆ\�rø°F·J±J¸q¿u¹uÀbÓ4IÔIÛ ùs   ƒA�&A·'Az!DOCX contains no extractable text)rŽ  r™  Ú_NS_WÚiterr�   Úextendr×   r  )r   rŒ  Úrootrù   Úparar£  rþ   r˜   r§  r¨  r©  s   &       @@@r   Ú_extract_docxr°  Ú  sú   ú€ Ü	�4˜×	 Ô	  BÜ˜Ð/Ó0ˆ÷ 
!à
ŒUˆG�2ˆ€AØ��3ˆi˜ !  B˜x¨°!°°B¨x¸Ð>€FØ€EØ—	‘	˜Q˜C˜q˜'Ö"ˆà!ŸY™Y¨!¨¨B xÔ0ÔDÑ0�r¿'¹'¾)°Q’¹)‘Ñ0ÒDˆØ�w‰wö 4à—Y‘Y”[ó4ó 4ˆð 	�‰�T—Z‘Z Ó%Ö&ñ #ô �5Ð=Ó>Ð>÷ 
!×	 üó Es   ˜C7Á8 D
Ã7D	c               ó$   € V ^8„  d   QhRRRRRR/# )r   r  ú
ET.Elementrç   r   r    r   )r!   s   "r   r"   r"   ê  s!   € ÷ >ñ >˜Jð >¨3ð >°3ñ >r   c                ó:   a€ RP                  V3R lV  4       4      # )z:Base text of an si/is, excluding rPh phonetic annotations.r$   c              3  óè   <"  € T Fg  qP                   S R 2S R209   g   K  VP                   S R 28X  d   VP                  ;'       g    RMVP                  S R 24      ;'       g    Rx € Ki  	  R# 5i)r¥  Úrr$   N)r¦  r˜   Úfindtext)rŠ   Úchildrç   s   & €r   rŒ   Ú$_xlsx_string_text.<locals>.<genexpr>ì  sp   øé € ð >áˆEŸY™Y¨a¨S°¨7°q°c¸°GÐ*<Ñ<ô 	V˜eŸi™i¨a¨S°¨7Ô2ˆ�‰×	Ð	�rø¸¿¹È!ÈÈAÀwÓ8O×8UÐ8UÐSUÔUÛùs   ƒA2¢&A2Á	A2Á'A2)r�   )r  rç   s   &fr   Ú_xlsx_string_textr¹  ê  s!   ø€ à�7‰7ô >áó>ó >ð >r   c               ó    € V ^8„  d   QhRRRR/# r   r   )r!   s   "r   r"   r"   ñ  s   € ÷ Cñ C˜ð C ñ Cr   c                ó
  € R \          R2R \         R2R \         R2r2p\        V R4      ;_uu_ 4       p\	        VP                  4       4      p\        VRRR7      pVP                  V R24       Uu. uF  p\        Wq4      NK  	  pp\        VRRR7      p	V	P                  V R24       U
u/ uF>  qªP                  R	4      '       g   K  V
P                  R	R
4      V
P                  RR
4      bK@  	  pp
. p\        VR4      P                  V R24       EF%  pVP                  VP                  V R2R
4      R
4      P                  R4      p\        P                  ! VP                  R4      '       d   TMRV 24      pVP                  RR4      R9   g   Wõ9  d   K‰  \        P                  ! \         P"                  4      ;_uu_ 4        \%        VP'                  V4      V4      pTRVP                  RR4       R2.V Uu. uF  pRP)                  V4      NK  	  up;'       g    R.OR
N,          pRRR4       EK(  	  RRR4       \+        XR4      # u upi u up
i u upi   + '       g   i     EK_  ; i  + '       g   i     L@; i)r�  rž  ÚXLSXzxl/sharedStrings.xmlT)r�  Úsizxl/_rels/workbook.xml.relsÚRelationshipÚIdr$   ÚTargetzxl/workbook.xmlÚsheetÚidÚ/zxl/ÚstateÚvisibleu   # â”€â”€ Sheet: rT   ÚSheetrv  r   z(empty)Nz'XLSX has no visible sheets with content>   ÚhiddenÚ
veryHidden)Ú_NS_SÚ_NS_RELÚ_NS_PKG_RELrŽ  ÚsetÚnamelistr™  r¬  r¹  rz   ÚlstripÚ	posixpathÚnormpathrU  rU   rV   r“  r—  Ú_sheet_rowsr•  r�   r  )r   rç   rµ  ÚprrŒ  ÚnamesÚsstr  ÚsharedÚ	rels_rootÚrelÚrelsrÚ   rÁ  ÚtargetÚpartÚrowsÚrows   &                 r   Ú_extract_xlsxrÝ  ñ  sJ  € Ø”E�7˜"ˆ~ ¤G 9¨BÐ/°2´k°]À"Ð1Eˆ"€AÜ	�4˜×	 Ô	  BÜ�B—K‘K“MÓ"ˆÜ�rÐ1¸DÔAˆØ9<¿¹ÀQÀCÀrÀ(Ô9KÓLÑ9K°Ô# DÖ,Ñ9KˆÐLÜ˜RÐ!=ÈÔMˆ	à$Ÿ>™>¨R¨D°Ð*=Ô>óQÙ>�CÇ'Á'È$Ç-ô 9�—‘˜˜bÓ! 3§7¡7¨8°RÓ#8Ò8Ù>ð 	ð QàˆÜ˜bÐ"3Ó4×9Ñ9¸Q¸C¸u¸+×FˆEØ—X‘X˜eŸi™i¨1¨#¨R¨°"Ó5°rÓ:×AÑAÀ#ÓFˆFÜ×%Ò%°×0AÑ0AÀ%×0HÒ0H¡fÐPSÐTZÐS[ÈnÓ]ˆDØ�y‰y˜ )Ó,Ð0HÔHÈDÔL]ÙÜ×$Ò$¤R§]¡]×3Õ3Ü" 2§7¡7¨4£=°&Ó9�ØÐ*¨5¯9©9°V¸WÓ+EÐ*FÀgÐNð PÙ59Ó:±T¨c˜4Ÿ9™9 Sž>±TÑ:×IÐI¸y¸kðPØLNðPõ P�÷ 4Ò3ñ G÷ 
!ô" �3ÐAÓBÐBùò MùòQùò ;÷ 4×3Ñ3ú÷ 
!×	 ús`   ²>I2Á0IÂ&I2Â*IÃ'IÃ.CI2Ç7IÇ<IÈ	IÈ IÈ-I2É
I2ÉIÉI/É(
I2É2J	c               ó    € V ^8„  d   QhRRRR/# )r   Úrefr   r    rE   r   )r!   s   "r   r"   r"     s   € ÷ ñ �Cð ˜Cñ r   c                ó    € \         P                  ! R \        P                  ! \        P
                  V 4      ^ 4      p\        V^,
          ^ 4      # )zU0-based column of a cell ref: ``A1`` -> 0, ``AB7`` -> 27 (bijective base-26 letters).c                ó~   € V ^,          \        VP                  4       4      ,           \        R4      ,
          ^,           # )é   ÚA)ÚordÚupper)ÚaccÚchs   &&r   r¶   Ú_col_index.<locals>.<lambda>	  s&   € ¨3°­8´c¸"¿(¹(»*³oÕ+EÌÈCËÕ+PÐSTÖ+Tr   )Ú	functoolsÚreducerì   Ú	takewhiler   Úisalphar,  )rß  Úidxs   & r   Ú
_col_indexrî    s<   € ä
×
Ò
ÑTÜ$×.Ò.¬s¯{©{¸CÓ@À!óE€Cäˆs�Q�w˜‹?Ðr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Ú	xml_bytesrN   rÕ  rß   r    zlist[list[str]]r   )r!   s   "r   r"   r"     s!   € ÷ ñ ˜5ð ¨)ð ¸ñ r   c           
     ó   € \         P                  ! V 4      pR \         R2p. p\        P                  ! VP                  V R24      \        4       FÃ  p/ pR	pVP                  V R24       Fd  pVP                  R4      '       d   \        VP                  RR4      4      MV^,           p	V	\        8  g   KK  \        W�V4      Wi&   \        Wy4      pKf  	  TP                  \        V^,           4       U
u. uF  q¦P                  V
R4      NK  	  up
4       KÅ  	  V'       d[   \        ;QJ d#    R VR	,           4       F  '       g   K   RM	  RM! R VR	,           4       4      '       g   VP                  4        Kb  V# u up
i )
r�  rž  rÜ  Úcrµ  r$   c              3  ó@   "  € T F  qP                  4       x € K  	  R # 5ir@   r  )rŠ   r[  s   & r   rŒ   Ú_sheet_rows.<locals>.<genexpr>  s   é € Ð?±h¨UŸ;™;Ÿ=˜=³hùr  TFrÌ   )r“  r”  rÉ  rì   Úislicer¬  Ú_MAX_XLSX_ROWS_PER_SHEETrz   rî  Ú_MAX_XLSX_COLSÚ_cell_valuer,  ró   rð   r  rØ   )rð  rÕ  r®  rç   rÛ  rÜ  rs  Úmax_colr^  Úcolr  s   &&         r   rÑ  rÑ    s'  € Ü�=Š=˜Ó#€DØ
ŒUˆG�2ˆ€AØ€DÜ×Ò §	¡	¨Q¨C¨s¨)Ó 4Ô6NÖOˆØ "ˆØˆØ—H‘H ˜s !˜WÖ%ˆDØ37·8±8¸C·=²=”*˜TŸX™X c¨2Ó.Ô/ÀgÐPQÅkˆCØ”^Ö#Ü(¨°qÓ9�‘
Ü˜gÓ+’ñ	 &ð
 	�‰¬u°W¸qµ[Ô/AÓBÑ/A¨!—Y‘Y˜q "Ö%Ñ/AÑBÖCñ P÷ —s“sÑ?°d¸2¶hÓ?—s—s’sÑ?°d¸2¶hÓ?×?Ò?Ø�‰Ž
Ø€Kùò Cs   Ã2E;
c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r^  r²  rÕ  rß   rç   r   r    r   )r!   s   "r   r"   r"      s(   € ÷ 8ñ 8�jð 8¨)ð 8¸ð 8Àñ 8r   c                óˆ  € V P                  V R 24      ;'       g    RpV P                  RR4      pVR8X  d    V\        V4      ,          # VR8X  d&   V P                  V R24      pVf   R# \        WR4      # VR8X  d   VP                  4       R9   d   R# R# VR	8X  d   T;'       g    R
# T#   \        \        3 d     R# i ; i)r­   r$   r¥  rç   Ú	inlineStrÚisrê   ÚTRUEÚFALSErä   z#ERROR>   Ú1rÿ  Útrue)r¶  rz   rE   rz  Ú
IndexErrorÚfindr¹  r�   )r^  rÕ  rç   r[  r„  Úinlines   &&&   r   rø  rø     sÎ   € Ø�M‰M˜Q˜C˜q˜'Ó"×(Ð( b€EØ
�(‰(�3˜Ó
€CØ
ˆc„zð	Øœ#˜e›*Õ%Ð%ð ˆkÔØ—‘˜a˜S ˜8Ó$ˆØ’^ˆrÐEÔ):¸6Ó)EÐEØ
ˆc„zØŸ™›Ð*?Ô?ˆvÐLÀWÐLØ"%¨¤*ˆE×Ð�XÐ7°%Ð7øô œJÐ'ô 	Úð	ús   ¹B, Â,CÃ Cs   SQLite format 3 c               ó    € V ^8„  d   QhRRRR/# r   r   )r!   s   "r   r"   r"   6  s   € ÷ *ñ *˜#ð * #ñ *r   c                ó\  € ^ RI p\        V R4      ;_uu_ 4       pVP                  \        \        4      4      \        8w  d   \        R4      h RRR4       \        V 4      P                  4       P                  4       R,           pVP                  VRR7      p VP                  R4      P                  4       pRR	.pV Uu. uF  qw^ ,          R
8X  g   K  VNK  	  ppV Uu. uF  qw^ ,          R
8w  g   K  VNK  	  p	pVP                  \        V4       R\        V	4       R24       VR\          EFp  w  r«pRVP                  RR4      ,           R,           pVP                  RV 24      P                  4       ^ ,          pVR	RV RVR R2VP!                  4       .,          pVP                  RV R\"         24      pVP$                   Uu. uF  pV^ ,          NK  	  ppVP                  4       pV'       g   KÉ  VP                  RRP'                  V4      ,           R,           4       VP                  RR\        V4      ,          ,           4       V FK  pV Uu. uF  p\)        V4      NK  	  ppVP                  RRP'                  V4      ,           R,           4       KM  	  EKs  	  \        V4      \        8”  d*   VP                  R\        V4      \        ,
           R24       V	'       d1   TR	R.V	 UUU
u. uF  w  ppp
RV RV 2NK  	  up
pp,           ,          pVR	R .,          pR!P'                  V4      VP+                  4        #   + '       g   i     ELþ; iu upi u upi u upi u upi u up
ppi   TP,                   d   p\        R"T 24      ThRp?ii ; i  TP+                  4        i ; i)#zÀRender a SQLite file as a schema overview: per table the CREATE statement, row count and the
first rows. A ``.db`` that is not SQLite raises ExtractionError so read_file reports the real type.NÚrbz0not a SQLite database (magic bytes do not match)z?mode=ro&immutable=1T)ÚurizXSELECT type, name, sql FROM sqlite_master WHERE sql IS NOT NULL ORDER BY type DESC, namez# SQLite databaser$   Útablez table(s), z index/view/trigger(s)Ú"z""zSELECT COUNT(*) FROM z## z  (rI   z rows)zSELECT * FROM z LIMIT z| z | z |Ú|z---|z
... z more tables omittedz## Indexes / views / triggersz- ræ   zVQuery it with the terminal: sqlite3 <path> 'SELECT ...'  (or Python's sqlite3 module).rœ   zSQLite read failed: )Úsqlite3rw  r•  rg   Ú_SQLITE_MAGICr	   r   ÚresolveÚas_uriÚconnectÚexecuteÚfetchallró   Ú_SQLITE_MAX_TABLESrÉ   Úfetchoner�   Ú_SQLITE_PREVIEW_ROWSÚdescriptionr�   Ú_sqlite_cellÚcloseÚDatabaseError)r   r  rZ   r	  ÚconÚobjsrÚ   ÚoÚtablesÚothersÚ_rT   ÚsqlÚquotedÚcountÚcurÚdÚcolsrÛ  rÜ  r­   rs  r¥  rþ   r¢   s   &                        r   Ú_extract_sqliter'  6  s6  € ó ä	ˆd�D×	Ô	˜RØ�7‰7”3”}Ó%Ó&¬-Ô7Ü!Ð"TÓUÐUð 8÷ 
ô
 ˆt‹*×
Ñ
Ó
×
%Ñ
%Ó
'Ð*@Õ
@€CØ
�/‰/˜# 4ˆ/Ó
(€CðØ�{‰{Øfó
ç
‰(‹*ð 	ð # BÐ'ˆÙ!Ó5™T˜ q¥T¨W¡_—!�!™TˆÐ5Ù!Ó5™T˜ q¥T¨W¡_—!�!™TˆÐ5Ø�
‰
”c˜&“k�] +¬c°&«k¨]Ð:PÐQÔRØ"Ð#6Ô$6Ô7‰LˆA�SØ˜4Ÿ<™<¨¨TÓ2Õ2°SÕ8ˆFØ—K‘KÐ"7¸°xÐ @ÓA×JÑJÓLÈQÕOˆEØ�B˜#˜d˜V 3 u¨Q i¨vÐ6¸¿	¹	»ÐDÕDˆCØ—+‘+ ¨v¨h°gÔ>RÐ=SÐTÓUˆCØ"%§/¢/Ó2¡/˜Q�A�a—D�D¡/ˆDÐ2Ø—<‘<“>ˆDß‰tØ—
‘
˜4 %§*¡*¨TÓ"2Õ2°TÕ9Ô:Ø—
‘
˜3 ¬#¨d«)Õ!3Õ3Ô4Û�CÙ69Ó:±c°œ\¨!ž_±c�EÐ:Ø—J‘J˜t e§j¡j°Ó&7Õ7¸$Õ>Ö?ô  ñ 8ô ˆv‹;Ô+Ô+Ø�J‰J˜¤ F£Ô.@Õ @ÐAÐAUÐVÔWßØ�BÐ7Ð8ÑX^Õ;_ÑX^ÉWÈQÐPQÐST¸bÀÀÀ1ÀQÀC»LÑX^Ó;_Õ_Õ_ˆCØ�ÐlÐmÕmˆØ�y‰y˜‹~ð 	�	‰	�÷K 
×	Ð	üò 6ùÚ5ùò 3ùò ;ùô
 <`øð × Ñ ô EÜÐ 4°S°EÐ:Ó;ÀÐDûðEûð 	�	‰	�úsŒ   ™3MÂ'M1 Â>MÃMÃM1 ÃMÃ2MÃ8CM1 ÇM ÇM1 Ç5AM1 ÉM%É(A=M1 Ë&
M1 Ë0M*Ì,M1 ÍM	ÍM1 Í1NÎNÎNÎN ÎN+c               ó    € V ^8„  d   QhRRRR/# )r   r[  r   r    r   r   )r!   s   "r   r"   r"   c  s   € ÷ ^ñ ^˜ð ^ ñ ^r   c                ó  € V f   R# \        V \        \        34      '       d   R\        V 4       R2# \	        V 4      P                  RR4      P                  RR4      p\        V4      \        8:  d   V# VR \        ^,
           R,           # )	NÚNULLz<blob z bytes>r  z\|rœ   ræ   u   â€¦)r{   rN   Ú	bytearrayrg   r   rÉ   Ú_SQLITE_CELL_CHARS)r[  r˜   s   & r   r  r  c  s~   € Ø‚}ÙÜ�%œ%¤Ð+×,Ò,Øœ˜E›
�| 7Ð+Ð+Üˆu‹:×Ñ˜c 5Ó)×1Ñ1°$¸Ó<€DÜ�t“9Ô 2Ô2ˆ4Ð]¸Ð=TÔ>PÐSTÕ>TÐ8UÐX]Õ8]Ð]r   zdict[str, Callable[[str], str]]r_   )r'   r	   rl   ra   rB   >   r   r   r   r
   r   r   >   ú.docú.odpú.odsú.odtr›   ú.potú.ppsú.pptú.rtfú.xlsú.docmú.epubú.ppsmú.ppsxú.pptmú.pptxú.xlsbú.xlsmi   )r$   r@   ))Úpngz	image/png)Újpegz
image/jpeg)Úsvgzimage/svg+xml)ÚhtmlrI  )r$   r$   )F)hÚ__conditional_annotations__r   Ú
__future__r   rU   ré  r;   rì   rx  rX   rÏ  r*  r‘   rÍ   rÏ   rQ   Ú	threadingr6   r‰  Úpathlibr   Útypingr   r   r   r   Ú	xml.etreer   r“  Ú__all__Ú	frozensetr'   r(   r¹   rh   rö  r÷  r«  rÉ  rÊ  rË  r:   r	   r,   Úobjectr4   r-   Ú__annotations__ÚLockr5   r8   r.   r)   rB   rK   Úcontextmanagerr[   ra   rl   ro   r€   rƒ   r–   rŸ   r°   r`   ri   rñ   r  r  r  rÒ   rï   rò   rÛ   r   rµ   r¾   r  r   r%  r/  r8  re  rS  r\  ri  r}  rj   rŽ  r™  r°  r¹  rÝ  rî  rÑ  rø  r  r  r  r,  r'  r  r_   )rB  s   @r   Ú<module>rN     sq  øðôXõ
 #ã Û Û Û Û Û 	Û Û 	Û Û Û Û Û Û Û Ý ß 4Ó 4Ý 'ò?€ñ #Ò#]Ó^Ð Ùò Oó PÐ ð $Ð Ø%Ð ØÐ Ø€àF€ØC€Ø
O€ØL€ôO�iô Oõ ñ “€Ø#€�Ó #Ø�~Š~Ó€ð Ð Ø%)Ð �?Ó )õõ8"õeð
 ×Ñôó ðõBõ2õõ "õ"#÷
'õbõ9õOõ(	`ð Ð àNOÐQTÐVXÐ KÐ Ð.Ð0KØÐ ØÐ ØÐ õõ ÷,õ<õ0õ5õPõWõUð Ð ào€õ R÷F	\ð ˜J¨°¸¸uÐE€ð"?À$÷ "?ðJ ×Ñô^ó ð^÷	õ?õ >õCõ,õõ$8ð  '€ØÐ ØÐ ØÐ õ*õZ^ð Ð ¨-¸À-Ø	ˆ?˜I ¸
ÀOð7UÐ Ð3õ Ur   