
    SAiْ                     P   S SK r S SKrS SKrS SKrS SKJrJrJrJr  S SK	J
r
JrJrJrJrJrJrJrJrJrJrJrJr  S SKJr  S SKJrJrJr  S SKJr  S SKJ r   S SK!J"r"  S S	K#J$r$  S S
K%J&r&J'r'J(r(J)r)  S SK*J+r+J,r,J-r-  S SK.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7  S SK8J9r9  S SK:J;r;J<r<J=r=  S SK>J?r?J@r@JArAJBrBJCrCJDrD  \R                  " \F5      rG " S S\-5      rH " S S\I5      rJ " S S\&5      rK " S S\&5      rL " S S\&5      rM " S S\&5      rN " S S\N5      rO " S S\P5      rQ " S  S!\P5      rR " S" S#\N5      rS\<" S$5      rT\<" S%5      rU\<" S&5      rV " S' S(5      rW " S) S*\W5      rX " S+ S,\X5      rY " S- S.\W5      rZ " S/ S05      r[ " S1 S2\[5      r\ " S3 S4\\5      r] " S5 S65      r^ " S7 S8\$5      r_g)9    N)md5sha256sha384sha512)AnyCallableDictIterableIteratorKeysViewListOptionalSequenceTupleTypeUnioncast)default_backend)Cipher
algorithmsmodes)settings)Arcfour)safe_int)
NumberTree)PDFExceptionPDFKeyErrorPDFObjectNotFoundPDFTypeError)	PDFParserPDFStreamParserPDFSyntaxError)	DecipherCallable	PDFStreamdecipher_all
dict_value	int_value
list_value	str_valuestream_value
uint_value)PSEOF)KWDLITliteral_name)choplistdecode_textformat_int_alphaformat_int_romannunpack	unpad_aesc                       \ rS rSrSrg)PDFNoValidXRef=    N__name__
__module____qualname____firstlineno____static_attributes__r9       P/var/www/html/land-ocr/venv/lib/python3.13/site-packages/pdfminer/pdfdocument.pyr7   r7   =       r@   r7   c                       \ rS rSrSrSrg)PDFNoValidXRefWarningA   zlLegacy warning for missing xref.

Not used anymore because warnings.warn is replaced by logger.Logger.warn.
r9   Nr;   r<   r=   r>   __doc__r?   r9   r@   rA   rD   rD   A       r@   rD   c                       \ rS rSrSrg)PDFNoOutlinesH   r9   Nr:   r9   r@   rA   rJ   rJ   H   rB   r@   rJ   c                       \ rS rSrSrg)PDFNoPageLabelsL   r9   Nr:   r9   r@   rA   rM   rM   L   rB   r@   rM   c                       \ rS rSrSrg)PDFDestinationNotFoundP   r9   Nr:   r9   r@   rA   rP   rP   P   rB   r@   rP   c                       \ rS rSrSrg)PDFEncryptionErrorT   r9   Nr:   r9   r@   rA   rS   rS   T   rB   r@   rS   c                       \ rS rSrSrg)PDFPasswordIncorrectX   r9   Nr:   r9   r@   rA   rV   rV   X   rB   r@   rV   c                       \ rS rSrSrSrg)PDFEncryptionWarning\   zqLegacy warning for failed decryption.

Not used anymore because warnings.warn is replaced by logger.Logger.warn.
r9   NrF   r9   r@   rA   rY   rY   \   rH   r@   rY   c                       \ rS rSrSrSrg)"PDFTextExtractionNotAllowedWarningc   zLegacy warning for PDF that does not allow extraction.

Not used anymore because warnings.warn is replaced by logger.Logger.warn.
r9   NrF   r9   r@   rA   r\   r\   c   rH   r@   r\   c                       \ rS rSrSrg)PDFTextExtractionNotAllowedj   r9   Nr:   r9   r@   rA   r_   r_   j   rB   r@   r_   ObjStmXRefCatalogc                   v    \ rS rSrS\\\4   4S jrS\\	   4S jr
S\	S\\\	   \	\	4   4S jrS\SS4S	 jrS
rg)PDFBaseXReft   returnc                     [         eNNotImplementedErrorselfs    rA   get_trailerPDFBaseXRef.get_traileru       !!r@   c                     / $ ri   r9   rl   s    rA   
get_objidsPDFBaseXRef.get_objidsx   s    	r@   objidc                     [        U5      eri   )r   rm   rt   s     rA   get_posPDFBaseXRef.get_pos~   s    %  r@   parserNc                     [         eri   rj   )rm   ry   s     rA   loadPDFBaseXRef.load   rp   r@   r9   )r;   r<   r=   r>   r	   strr   rn   r
   intrr   r   r   rw   r    r{   r?   r9   r@   rA   re   re   t   s\    "T#s(^ "HSM !S !U8C=#s+B%C !"9 " "r@   re   c                       \ rS rSrSS jrS\4S jrS\SS4S jrS\SS4S jr	S\
\\4   4S	 jrS\\   4S
 jrS\S\\\   \\4   4S jrSrg)PDFXRef   rg   Nc                      0 U l         0 U l        g ri   offsetstrailerrl   s    rA   __init__PDFXRef.__init__   s    BD')r@   c                 <    SU R                   R                  5       -  $ )Nz<PDFXRef: offsets=%r>r   keysrl   s    rA   __repr__PDFXRef.__repr__   s    &$,,*;*;*=>>r@   ry   c           
           UR                  5       u  p#UR                  5       nU(       d  M-   UR	                  S5      (       a  UR                  U5        GOUR                  S5      n[        U5      S:w  a  SU< SU< 3n[        U5      e [        [        U5      u  pg[        XfU-   5       H  n UR                  5       u  pUR                  5       nUR                  S5      n[        U5      S:w  a  S	U< S
U< 3n[        U5      eUu  pnUS:w  a  Mh  [        U
5      n[        U5      nUb  Ub  S X4U R                  U'   M  [        R                  SU SU
< SU< S35        M     GMk  [        R!                  SU R                  5        U R#                  U5        g ! [         a    [        S5      ef = f! [         a    SU< SU< 3n[        U5      ef = f! [         a    [        S5      ef = f)Nz Unexpected EOF - file corrupted?   trailer       zTrailer not found: z: line=zInvalid line:    zInvalid XRef format: z, line=   nzNot adding object z to xref because position z or generation number z cannot be parsed as an intzxref objects: %r)nextlinestripr,   r7   
startswithseeksplitlenmapr~   
ValueErrorranger   r   logwarningdebugload_trailer)rm   ry   poslinef	error_msgstartnobjsrt   _pos_bgenno_buse_bpos_igenno_is                  rA   r{   PDFXRef.load   s
   I$oo/zz|  z**C 

4 A1v{1&74(K	$Y//0!$S! uem4M & 1IQ::<D JJt$q6Q;"7z QI(33*+'D= "7+$)<+/*@DLL'KK,UG3MeY W007{:UW' 5) X 			$dll3&!O  I$%GHHI  0,VJgdXF	$Y//0  M()KLLMs#   )F F8 2"GF58 GG1c                     UR                  5       u  p#U[        S5      L d   [        U5      5       eUR                  5       u  p$U R                  R                  [        U5      5        [        R                  SU R                  5        g ! [         a-    UR                  S5      nU(       d  [        S5      eUS   u  p$ N{f = f)Nr      zUnexpected EOF - file corruptedr   z
trailer=%r)	nexttokenr-   r}   
nextobjectr,   popr7   r   updater&   r   r   )rm   ry   r   kwddicxs         rA   r   PDFXRef.load_trailer   s    	'')HQ#j/)33s83)((*HQ 	JsO,		,-  	

1A$%FGGtHQ		s   AB	 	4C ?C c                     U R                   $ ri   r   rl   s    rA   rn   PDFXRef.get_trailer       ||r@   c                 6    U R                   R                  5       $ ri   r   rl   s    rA   rr   PDFXRef.get_objids   s    ||  ""r@   rt   c                      U R                   U   $ ri   )r   rv   s     rA   rw   PDFXRef.get_pos   s    ||E""r@   r   rg   N)r;   r<   r=   r>   r   r}   r   r    r{   r   r	   r   rn   r   r~   rr   r   r   rw   r?   r9   r@   rA   r   r      s    *?# ?."9 ." ."`.9 . .T#s(^ #HSM ##S #U8C=#s+B%C #r@   r   c                   X    \ rS rSrS\4S jr\R                  " S5      rS\	SS4S jr
Srg)	PDFXRefFallback   rg   c                 <    SU R                   R                  5       -  $ )Nz<PDFXRefFallback: offsets=%r>r   rl   s    rA   r   PDFXRefFallback.__repr__   s    .$,,2C2C2EFFr@   z^(\d+)\s+(\d+)\s+obj\bry   Nc                 v   UR                  S5          UR                  5       u  p#UR                  S5      (       aC  UR                  U5        U R	                  U5        [
        R                  SU R                  5        g UR                  S5      nU R                  R                  U5      nU(       d  M  UR                  5       u  pg[        U5      n[        U5      n	S X)4U R                  U'   UR                  U5        UR                  5       u  p[        U[         5      (       ay  UR#                  S5      [$        L aa  ['        U5      n US   n[1        UR3                  5       5      n/ n  UR                  5       u  pUR5                  [7        [        U5      5        M3  GM  ! [         a     g f = f! [(         a(    [*        R,                  (       a  [/        SU-  5      eSn Nf = f! [         a     Of = f[9        U[;        U5      S-  5      n[=        U5       H  nUUS-     nUUS4U R                  U'   M     N)	Nr   r   trailer: %rzlatin-1r   NN is not defined: %rr   )r   r   r,   r   r   r   r   r   decode
PDFOBJ_CUEmatchgroupsr~   r   r   
isinstancer$   getLITERAL_OBJSTMr*   KeyErrorr   STRICTr"   r!   get_dataappendr   minr   r   )rm   ry   r   
line_bytesr   mobjid_sgenno_srt   gennor   objstreamnparser1objsindexobjid1s                     rA   r{   PDFXRefFallback.load   s   A$*OO$5! $$Z00C !!&)		-6$$Y/D%%d+A!"WLELE#'"4DLLKK((*HQ#y))cggfo.O%c*sA
 *&//*;<"$#*#5#5#7DcN3 A   ,   ,-Cf-LMMA  3t9>*"1XE!%!)_F,15!+<DLL( &s5   F! 	F1 *4G& !
F.-F.1/G#"G#&
G32G3r9   )r;   r<   r=   r>   r}   r   recompiler   r    r{   r?   r9   r@   rA   r   r      s4    G# G 56J*=9 *= *=r@   r   c                       \ rS rSrSS jrS\4S jrS\SS4S jrS\	\\
4   4S jrS\\   4S	 jrS
\S\\\   \\4   4S jrSrg)PDFXRefStreami  rg   Nc                 X    S U l         S U l        S U l        S U l        S U l        / U l        g ri   )dataentlenfl1fl2fl3rangesrl   s    rA   r   PDFXRefStream.__init__  s,    %)	%)"&"&"&-/r@   c                      SU R                   -  $ )Nz<PDFXRefStream: ranges=%r>)r   rl   s    rA   r   PDFXRefStream.__repr__  s    +t{{;;r@   ry   c           	         UR                  5       u  p#UR                  5       u  p$UR                  5       u  p%UR                  5       u  p&[        U[        5      (       a  UR	                  S5      [
        La  [        S5      eUS   nUR	                  SSU45      n[        U5      S-  S:w  a  [        S5      eU R                  R                  [        [        [        [        [        4      [        SU5      5      5        US   u  U l        U l        U l        U R                   b  U R"                  b  U R$                  c   eUR'                  5       U l        U R                   U R"                  -   U R$                  -   U l        UR,                  U l        [0        R3                  S	S
R5                  [7        [8        U R                  5      5      U R                   U R"                  U R$                  5        g )Nr   zInvalid PDF stream spec.SizeIndexr   r   zInvalid index numberWz&xref stream: objid=%s, fields=%d,%d,%dz, )r   r   r   r$   r   LITERAL_XREFr7   r   r"   r   extendr   r   r   r~   r0   r   r   r   r   r   r   attrsr   r   r   joinr   repr)	rm   ry   r   rt   r   r   r   sizeindex_arrays	            rA   r{   PDFXRefStream.load  s|   %%'
%%'
##%'')&),,

60B,0V !;<<f~jj1d)4{a1$ !7884sCx 98A{;STU)/&48TXxx#(<AUUUOO%	hh)DHH4||		4IIc$,-HHHHHH	
r@   c                     U R                   $ ri   r   rl   s    rA   rn   PDFXRefStream.get_trailer,  r   r@   c              #   D  #    U R                    H  u  p[        U5       Hx  nU R                  c   eU R                  c   eU R                  U-  nU R                  XDU R                  -    n[	        US U R
                   S5      nUS:X  d  US:X  d  Mr  X-   v   Mz     M     g 7f)Nr   r   )r   r   r   r   r4   r   )rm   r   r   ioffsetentf1s          rA   rr   PDFXRefStream.get_objids/  s      KKLE5\{{...yy,,,qii$++)=>S488_a07bAg)O " (s   BB B rt   c                 p   SnU R                    H  u  p4X1::  a  XU-   :  a	  X!U-
  -  n  OX$-  nM!     [        U5      eU R                  c   eU R                  c   eU R                  b  U R
                  b  U R                  c   eU R                  U-  nU R                  XUU R                  -    n[        US U R                   S5      n[        X`R                  U R                  U R
                  -    5      n[        X`R                  U R
                  -   S  5      n	US:X  a  S X4$ US:X  a  XS4$ [        U5      e)Nr   r   r   )r   r   r   r   r   r   r   r4   )
rm   rt   r   r   r   r   r  r  f2f3s
             rA   rw   PDFXRefStream.get_pos:  s1    KKLE~%%-"7& ( e$${{&&&yy$$$xx#(<AUUUu$ii$++!56S488_a(SDHHtxx$789SDHH,./07">!1WA; e$$r@   )r   r   r   r   r   r   r   r   )r;   r<   r=   r>   r   r}   r   r    r{   r	   r   rn   r   r~   rr   r   r   rw   r?   r9   r@   rA   r   r     sm    0<# <
9 
 
2T#s(^ 	$HSM 	$%S %U8C=#s+B%C %r@   r   c                   v   \ rS rSr% SrSr\\S4   \S'    S S\	\
   S\\\4   S\S	S
4S jjrS!S jrS!S jrS!S jrS	\4S jrS	\4S jrS	\4S jrS\
S	\
4S jrS\
S	\
4S jrS\S	\\
   4S jrS\
S	\\
   4S jrS\
S	\4S jrS\
S	\\
   4S jr S"S\S\S\
S\\\\4      S	\
4
S jjrS\S\S\
S	\
4S jrSrg
)#PDFStandardSecurityHandleriU  s    (N^NuAd NV.. h>/dSiz)r   r   .supported_revisionsdocidparampasswordrg   Nc                 H    Xl         X l        X0l        U R                  5         g ri   )r  r  r  init)rm   r  r  r  s       rA   r   #PDFStandardSecurityHandler.__init__\  s     

 		r@   c                     U R                  5         U R                  U R                  ;  a  SU R                  -  n[	        U5      eU R                  5         g )NzUnsupported revision: param=%r)init_paramsrr
  r  rS   init_key)rm   r   s     rA   r  PDFStandardSecurityHandler.initg  sB    6611184::EI$Y//r@   c                    [        U R                  R                  SS5      5      U l        [        U R                  S   5      U l        [        U R                  S   S5      U l        [        U R                  S   5      U l        [        U R                  S   5      U l	        [        U R                  R                  SS	5      5      U l
        g )
NVr   RP    OULength(   )r'   r  r   vr  r+   pr)   oulengthrl   s    rA   r  &PDFStandardSecurityHandler.init_paramsn  s    4::>>#q124::c?+DJJsOR04::c?+4::c?+

x <=r@   c                 j    U R                  U R                  5      U l        U R                  c  [        eg ri   )authenticater  keyrV   rl   s    rA   r  #PDFStandardSecurityHandler.init_keyv  s-    $$T]]388&& r@   c                 2    [        U R                  S-  5      $ )N   boolr   rl   s    rA   is_printable'PDFStandardSecurityHandler.is_printable{      DFFQJr@   c                 2    [        U R                  S-  5      $ )N   r+  rl   s    rA   is_modifiable(PDFStandardSecurityHandler.is_modifiable~  r/  r@   c                 2    [        U R                  S-  5      $ )N   r+  rl   s    rA   is_extractable)PDFStandardSecurityHandler.is_extractable  s    DFFRK  r@   r'  c                   ^ U R                   S:X  a$  [        U5      R                  U R                  5      $ [	        U R                  5      nUR                  U R                  S   5        [        U5      R                  UR                  5       5      n[        SS5       HA  mSR                  U4S j[        U5       5       5      n[        U5      R                  U5      nMC     X3-  nU$ )Nr   r   r      r@   c              3   B   >#    U  H  n[        UT-  45      v   M     g 7fri   bytes.0cr   s     rA   	<genexpr>7PDFStandardSecurityHandler.compute_u.<locals>.<genexpr>       @iUAE8__i   )r  r   encryptPASSWORD_PADDINGr   r   r  digestr   r   iter)rm   r'  hashresultkr   s        @rA   	compute_u$PDFStandardSecurityHandler.compute_u  s    66Q;3<''(=(=>> t,,-DKK

1&S\))$++-8F1b\HH@d3i@@ ++F3 " FMr@   c                 T   XR                   -   S S n[        U5      nUR                  U R                  5        UR                  [        R
                  " SU R                  5      5        UR                  U R                  S   5        U R                  S:  a0  [        [        U 5      R                  (       d  UR                  S5        UR                  5       nSnU R                  S:  a=  U R                  S-  n[        S	5       H  n[        US U 5      R                  5       nM!     US U $ )
Nr  <Lr   r*  s      r   r1  2   )rE  r   r   r!  structpackr   r  r  r   PDFStandardSecurityHandlerV4encrypt_metadatarF  r#  r   )rm   r  rH  rI  r   r   s         rA   compute_encryption_key1PDFStandardSecurityHandler.compute_encryption_key  s    444cr:8}DFFFKKdff-.DJJqM"66Q;4d;LL/066Q;q A2YVBQZ//1 bqzr@   c                 r    UR                  S5      nU R                  U5      nUc  U R                  U5      nU$ )Nlatin1)encodeauthenticate_user_passwordauthenticate_owner_password)rm   r  password_bytesr'  s       rA   r&  'PDFStandardSecurityHandler.authenticate  s:    !2--n=;22>BC
r@   c                 V    U R                  U5      nU R                  U5      (       a  U$ g ri   )rU  verify_encryption_key)rm   r  r'  s      rA   rZ  5PDFStandardSecurityHandler.authenticate_user_password  s+    ))(3%%c**Jr@   c                     U R                  U5      nU R                  S:X  a  X R                  :H  $ US S U R                  S S :H  $ )Nr   r5  )rK  r  r"  )rm   r'  r"  s      rA   r_  0PDFStandardSecurityHandler.verify_encryption_key  sB    NN366Q;;"v$$r@   c                 b  ^ XR                   -   S S n[        U5      nU R                  S:  a+  [        S5       H  n[        UR	                  5       5      nM     SnU R                  S:  a  U R
                  S-  nUR	                  5       S U nU R                  S:X  a%  [        U5      R                  U R                  5      nO^U R                  n[        SSS5       HA  mS	R                  U4S
 j[        U5       5       5      n[        U5      R                  U5      nMC     U R                  U5      $ )Nr  r   rP  rO  r1  r      r@   c              3   B   >#    U  H  n[        UT-  45      v   M     g 7fri   r;  r=  s     rA   r@  IPDFStandardSecurityHandler.authenticate_owner_password.<locals>.<genexpr>  rB  rC  )rE  r   r  r   rF  r#  r   decryptr!  r   rG  rZ  )	rm   r  rH  r   r   r'  user_passwordrJ  r   s	           @rA   r[  6PDFStandardSecurityHandler.authenticate_owner_password  s    444cr:8}66Q;2Y4;;=) 66Q;q AkkmBQ66Q;#CL008M FFM2r2&HH@d3i@@ '
 2 2= A ' ..}==r@   rt   r   r   r   c                 &    U R                  XU5      $ ri   )decrypt_rc4)rm   rt   r   r   r   s        rA   rh  "PDFStandardSecurityHandler.decrypt  s     d33r@   c                 :   U R                   c   eU R                   [        R                  " SU5      S S -   [        R                  " SU5      S S -   n[        U5      nUR	                  5       S [        [        U5      S5       n[        U5      R                  U5      $ )NrN  r   r   r5  )	r'  rQ  rR  r   rF  r   r   r   rh  )rm   rt   r   r   r'  rH  s         rA   rl  &PDFStandardSecurityHandler.decrypt_rc4  s    xx###hhT51"155D%8PQSRS8TT3xkkm/c#c(B/0s|##D))r@   )
r  r'  r#  r!  r   r  r  r  r"  r   r   ri   ) r;   r<   r=   r>   rE  r
  r   r~   __annotations__r   r<  r	   r}   r   r   r  r  r  r,  r-  r2  r6  rK  rU  r   r&  rZ  r_  r[  rh  rl  r?   r9   r@   rA   r	  r	  U  sv   	1  ,2sCx1 			 CH~	 		
 
	>'
 d   t  ! !U u u  &S Xe_ 5 Xe_ % %4 %>E >huo >2 +/44 4 	4
 S#X'4 
4* *S * *% *r@   r	  c                      ^  \ rS rSr% Sr\\S4   \S'   SU 4S jjrS\	S\
\\\\/\4      4S jr  SS	\S
\S\S\
\\	\4      S\
\	   S\4S jjrS	\S
\S\S\4S jrS	\S
\S\S\4S jrSrU =r$ )rS  i  )r*  .r
  rg   c                 0  > [         TU ]  5         SU l        [        U R                  R                  S5      5      U l        [        U R                  S   5      U l        [        U R                  S   5      U l	        [        U R                  R                  SS5      5      U l        U R                  U R                  :w  a  SU R                  -  n[        U5      e0 U l        U R                  R                  5        HM  u  p#U R                  [        US   5      5      nUc  S	U R                  -  n[        U5      eX@R                  U'   MO     U R                   U R                  S
'   U R                  U R                  ;  a  SU R                  -  n[        U5      eg )N   CFStmFStrFEncryptMetadataTz"Unsupported crypt filter: param=%rCFMz%Unknown crypt filter method: param=%rIdentityz Undefined crypt filter: param=%r)superr  r#  r&   r  r   cfr/   stmfstrfr,  rT  rS   cfmitemsget_cfmdecrypt_identity)rm   r   rJ  r  r   	__class__s        rA   r  (PDFStandardSecurityHandlerV4.init_params  s?   TZZ^^D12 F!34	 F!34	 $TZZ^^4Et%L M99		!<tzzII$Y//GGMMODA\!E(34AyCdjjP	(33HHQK $  $4499DHH$:TZZGI$Y// %r@   namec                 L    US:X  a  U R                   $ US:X  a  U R                  $ g )NV2AESV2)rl  decrypt_aes128rm   r  s     rA   r  $PDFStandardSecurityHandlerV4.get_cfm  s+    4<###W_&&&r@   rt   r   r   r   c                     U R                   (       d(  Ub%  UR                  S5      nUb  [        U5      S:X  a  U$ Uc  U R                  nU R                  U   " XU5      $ )Nr   Metadata)rT  r   r/   r  r  )rm   rt   r   r   r   r  ts          rA   rh  $PDFStandardSecurityHandlerV4.decrypt  sX     $$):		&!A}aJ!><99Dxx~eD11r@   c                     U$ ri   r9   )rm   rt   r   r   s       rA   r  -PDFStandardSecurityHandlerV4.decrypt_identity  s    r@   c                    U R                   c   eU R                   [        R                  " SU5      S S -   [        R                  " SU5      S S -   S-   n[        U5      nUR	                  5       S [        [        U5      S5       nUS S nUSS  n[        [        R                  " U5      [        R                  " U5      [        5       S9nUR                  5       R                  U5      n	[        U	5      $ )NrN  r   r   s   sAlTr5  backend)r'  rQ  rR  r   rF  r   r   r   r   AESr   CBCr   	decryptorr   r5   )
rm   rt   r   r   r'  rH  initialization_vector
ciphertextcipher	plaintexts
             rA   r  +PDFStandardSecurityHandlerV4.decrypt_aes128  s    xx###HHkk$&r*+kk$&r*+  	 3xkkm/c#c(B/0 $Sb	"#Y
NN3II+,#%

 $$&--j9	##r@   )r}  r  rT  r#  r~  r  r   )NN)r;   r<   r=   r>   r
  r   r~   rr  r  r}   r   r   r<  r  r	   r   rh  r  r  r?   __classcell__r  s   @rA   rS  rS    s    +/sCx/0,C HXsC6G6N-O$P  +/"22 2 	2
 S#X'2 sm2 
2 c # U u $C $ $5 $U $ $r@   rS  c            	       D  ^  \ rS rSrSrSU 4S jjrS\S\\\	\	\
/\
4      4S jrS\S\\
   4S jrS\S\
4S	 jr SS\
S
\
S\\
   S\
4S jjr SS\
S
\
S\\
   S\
4S jjr SS\
S
\
S\\
   S\
4S jjr\S\
S\	4S j5       rS\
S\
S\
S\
4S jrS\	S\	S\
S\
4S jrSrU =r$ )PDFStandardSecurityHandlerV5i)  )rO     rg   c                   > [         TU ]  5         SU l        [        U R                  S   5      U l        [        U R                  S   5      U l        U R                  S S U l        U R                  SS U l	        U R                  SS  U l
        U R                  S S U l        U R                  SS U l        U R                  SS  U l        g )N   OEUEr  r  )r|  r  r#  r)   r  oeuer!  o_hasho_validation_salt
o_key_saltr"  u_hashu_validation_salt
u_key_salt)rm   r  s    rA   r  (PDFStandardSecurityHandlerV5.init_params,  s    DJJt,-DJJt,-ffSbk!%2&&+ffSbk!%2&&+r@   r  c                 (    US:X  a  U R                   $ g )NAESV3)decrypt_aes256r  s     rA   r  $PDFStandardSecurityHandlerV5.get_cfm8  s    7?&&&r@   r  c                    U R                  U5      nU R                  X R                  U R                  5      nX0R                  :X  a  U R                  X R
                  U R                  5      n[        [        R                  " U5      [        R                  " S5      [        5       S9nUR                  5       R                  U R                  5      $ U R                  X R                  5      nX0R                   :X  a  U R                  X R"                  5      n[        [        R                  " U5      [        R                  " S5      [        5       S9nUR                  5       R                  U R$                  5      $ g )Ns                   r  )_normalize_password_password_hashr  r"  r  r  r   r   r  r   r  r   r  r   r  r  r  r  r  )rm   r  
password_brH  r  s        rA   r&  )PDFStandardSecurityHandlerV5.authenticate>  s   --h7
"":/E/EtvvN;;&&z??DFFKDt$		*%')F
 ##%,,TWW55"":/E/EF;;&&z??CDt$		*%')F
 ##%,,TWW55r@   c                 v    U R                   S:X  a  U(       d  gSSKJn  U" U5      nUR                  S5      S S $ )Nr  r@   r   )saslprepzutf-8   )r  pdfminer._saslprepr  rY  )rm   r  r  s      rA   r  0PDFStandardSecurityHandlerV5._normalize_passwordT  s6    66Q;3)Hw'--r@   saltvectorc                 p    U R                   S:X  a  U R                  XU5      $ U R                  XSS U5      $ )z2Compute password hash depending on revision numberrO  r   r1  )r  _r5_password_r6_password)rm   r  r  r  s       rA   r  +PDFStandardSecurityHandlerV5._password_hash^  s;     66Q;$$XV<<  !9f==r@   c                     [        U5      nUR                  U5        Ub  UR                  U5        UR                  5       $ )z#Compute the password for revision 5)r   r   rF  )rm   r  r  r  rH  s        rA   r  )PDFStandardSecurityHandlerV5._r5_passwordi  s8     hDKK{{}r@   c                    [        U5      nUR                  U5        Ub  UR                  U5        UR                  5       n[         [        [        4nS=pxUS:  d  XS-
  :  a~  X-   U=(       d    S-   S-  n	U R                  USS USS U	S9n
X`R                  U
SS 5         nU" U
5      R                  5       nU
[        U
5      S-
     nUS-  nUS:  a  Mt  XS-
  :  a  M~  USS $ )	z#Compute the password for revision 6Nr   @   r  r@   r5  )r'  ivr   r   )r   r   rF  r   r   _aes_cbc_encrypt_bytes_mod_3r   )rm   r  r  r  initial_hashrJ  hashesround_nolast_byte_valk1e	next_hashs               rA   r  )PDFStandardSecurityHandlerV5._r6_passwordv  s     h'D!'!&&)#$$m}"}<,&-C0B6B%%!CR&Qr"XB%GA 003B89I!##%Ac!fqjMMMH m}"}< "vr@   input_bytesc                 ,    [        S U  5       5      S-  $ )Nc              3   *   #    U  H	  oS -  v   M     g7f)r   Nr9   )r>  bs     rA   r@  <PDFStandardSecurityHandlerV5._bytes_mod_3.<locals>.<genexpr>  s     .+Qq5+s   r   )sum)r  s    rA   r  )PDFStandardSecurityHandlerV5._bytes_mod_3  s     .+..22r@   r'  r  r   c                     [        [        R                  " U5      [        R                  " U5      5      nUR                  5       nUR                  U5      UR                  5       -   $ ri   )r   r   r  r   r  	encryptorr   finalize)rm   r'  r  r   r  r  s         rA   r  -PDFStandardSecurityHandlerV5._aes_cbc_encrypt  sL    
s+UYYr];$$&	%	(:(:(<<<r@   rt   r   c                    US S nUSS  nU R                   c   e[        [        R                  " U R                   5      [        R
                  " U5      [        5       S9nUR                  5       R                  U5      n[        U5      $ )Nr5  r  )
r'  r   r   r  r   r  r   r  r   r5   )rm   rt   r   r   r  r  r  r  s           rA   r  +PDFStandardSecurityHandlerV5.decrypt_aes256  s|     $Sb	"#Y
xx###NN488$II+,#%

 $$&--j9	##r@   )	r#  r  r  r  r  r  r  r  r  r   ri   )r;   r<   r=   r>   r
  r  r}   r   r   r~   r<  r  r&  r  r  r  r  staticmethodr  r  r  r?   r  r  s   @rA   r  r  )  sf    
&C HXsC6G6N-O$P S Xe_ ,.C .E . #'		>	> 	> 		>
 
	> #'	  	
 
" #'	  	
 
2 3% 3C 3 3=E =u =E =e =

$C 
$ 
$5 
$U 
$ 
$r@   r  c                      \ rS rSr% Sr\\\\S.r\	\
\\   4   \S'      S"S\S\S\S\S	S
4
S jjr\" S5      rS#S\S	S
4S jjrS\S\
S\
S	\4S jrS\S	\\\   \
4   4S jrS\
S\
S	\4S jrS\
S	\4S jr\\\\\\4   rS	\\   4S jrS	\\   4S jr S\S\!\\"4   S	\4S jr#S\!\\"4   S	\4S jr$S\S	\
4S jr%S\S\
S\\&   S	S
4S  jr'S!r(g
)$PDFDocumenti  a4  PDFDocument object represents a PDF document.

Since a PDF file can be very big, normally it is not loaded at
once. So PDF document has to cooperate with a PDF parser in order to
dynamically import the data as processing goes.

Typical usage:
  doc = PDFDocument(parser, password)
  obj = doc.getobj(objid)

)r   r   r*  rO  security_handler_registryry   r  cachingfallbackrg   Nc                    X0l         / U l        / U l        0 U l        SU l        SU l        SU l        0 U l        0 U l        Xl        U R                  R                  U 5        S=U l
        =U l        U l         U R                  U5      nU R                  XU R                  5        U R                   H  nUR)                  5       nU(       d  M  SU;   a=  SU;   a  [+        US   5      n	OSn	U	[-        US   5      4U l        U R/                  U5        SU;   a'  U R                  R'                  [-        US   5      5        SU;   d  M  [-        US   5      U l          O   [1        S5      eU R                  R3                  S	5      [4        La!  [6        R8                  (       a  [1        S
5      egg! [         aH    U(       a=  SUl        [#        5       nUR%                  U5        U R                  R'                  U5         GNWf = f)z1Set the document to use a given PDFParser object.NTEncryptID)r@   r@   InfoRootz(No /Root object! - Is this really a PDF?r   zCatalog not found!)r  xrefsinfocatalog
encryptiondecipher_parser_cached_objs_parsed_objsset_documentr-  r2  r6  	find_xrefread_xref_fromr7   r  r   r{   r   rn   r(   r&   _initialize_passwordr"   r   LITERAL_CATALOGr   r   )
rm   ry   r  r  r  r   newxrefxrefr   id_values
             rA   r   PDFDocument.__init__  s    (*
	')5948;=AC!!$'GKKKD.1D	+..(CTZZ8 JJD&&(GG#7?)'$-8H
  *H#+Z	8J-K"L))(3 		  GFO!<= )'&/:) , !!KLL<<F#?:$%9::  ;=  	+"&)+V$

!!'*	+s   6-F) )AG;:G;   objc                    U R                   c   eU R                   u  p#[        UR                  S5      5      S:w  a  [        SU-  5      e[	        UR                  SS5      5      nU R
                  R                  U5      nUc  [        SU-  5      eU" X#U5      nUR                  U l        UR                  5       U l        UR                  5       U l	        UR                  5       U l
        U R                  c   eSU R                  l        g )NFilterStandardzUnknown filter: param=%rr  r   zUnknown algorithm: param=%rF)r  r/   r   rS   r'   r  rh  r  r-  r2  r6  r  r  )rm   r  r  r  r  factoryhandlers          rA   r   PDFDocument._initialize_password  s    ***		(+,
:$%?%%GHHeiiQ'(0044Q7?$%BU%JKK%1#002$224%446||''' %r@   r   r   rt   c                 ^   UR                   U R                  ;   a  U R                  UR                      u  pEOMU R                  U5      u  pEU R                  (       a)  UR                   c   eXE4U R                  UR                   '   US-  U-   n XF   nU$ ! [         a    [        SU-  5      ef = f)Nr   zindex too big: %r)rt   r  _get_objectsr  
IndexErrorr"   )rm   r   r   rt   r   r   r   r   s           rA   _getobj_objstmPDFDocument._getobj_objstm
  s    <<4,,,))&,,7IT1))&1IT||||///37)!!&,,/EEM	>'C 
  	> !4u!<==	>s   B B,c                    UR                  S5      [        La#  [        R                  (       a  [	        SU-  5      e [        [        US   5      n[        UR                  5       5      nUR                  U 5        / n  UR                  5       u  pVUR                  U5        M%  ! [         a(    [        R                  (       a  [	        SU-  5      eSn Nf = f! [         a     XB4$ f = f)Nr   zNot a stream object: %rr   r   r   )r   r   r   r   r"   r   r~   r   r!   r   r  r   r   r,   )rm   r   r   ry   r   r   r   s          rA   r  PDFDocument._get_objects  s    ::f^3$%>%GHH	S&+&A
 !!23D!	!,,.C    	$%;f%DEEA	  	y	s#   B# =&C #/CC
C'&C'r   c                 p   U R                   c   eU R                   R                  U5        U R                   R                  5       u  p4U R                   R                  5       u  p5U R                   R                  5       u  p6XB:w  aa  / nX`R                  La=  U R                   R                  5       u  p6UR	                  U5        X`R                  La  M=  [        U5      S:  a  US   nXB:w  a  [        SU< SU< 35      eU[        S5      :w  a  [        SU-  5      eU R                   R                  5       u  p8U$ )Nr   zobjid mismatch: =r  zInvalid object spec: offset=%r)	r  r   r   KEYWORD_OBJr   r   r"   r-   r   )	rm   r   rt   r   r   r   r   r   r   s	            rA   _getobj_parsePDFDocument._getobj_parse.  s   ||'''#ll,,.\\++-
<<))+ ?A---<<113 --- 1v{2? #3F:Qui!HII#f+ !AC!GHH<<**,
r@   c                    U R                   (       d  [        S5      e[        R                  SU5        XR                  ;   a  U R                  U   u  p#U$ U R                    H  n UR                  U5      u  pVn Ub-  [        U R                  U5      5      nU R                  XvU5      nO9U R                  Xa5      nU R                  (       a  [        U R                  XU5      n[        U[        5      (       a  UR                  X5          O   [%        U5      e[        R                  SX5        U R&                  (       a  X#4U R                  U'   U$ ! [         a     M  f = f! [         ["        4 a     GM  f = f)zGet object from PDF

:raises PDFException if PDFDocument is not initialized
:raises PDFObjectNotFound if objid does not exist in PDF
zPDFDocument is not initializedzgetobj: objid=%rzregister: objid=%r: %r)r  r   r   r   r  rw   r   r*   getobjr  r  r  r%   r   r$   	set_objidr,   r"   r   r  )rm   rt   r   r   r  strmidr   r   s           rA   r  PDFDocument.getobjJ  sN    zz?@@		$e,%%%,,U3LS4 
1 

-1\\%-@*VE)!-dkk&.A!B"11&G"00>==".t}}eC"PC!#y11e3! #( (..II.;||,/<!!%(
+    ~. s%   %E:BE"
EE"E76E7c                    ^ SU R                   ;  a  [        eS[        S[        S[        [
        R                     4U4S jjmT" U R                   S   S5      $ )NOutlinesentrylevelrg   c              3   n  >#    [        U 5      n SU ;   a]  SU ;   d  SU ;   aQ  [        [        U S   5      5      nU R                  S5      nU R                  S5      nU R                  S5      nXX4U4v   SU ;   a  SU ;   a  T" U S   US-   5       S h  vN   SU ;   a  T" U S   U5       S h  vN   g g  N  N7f)	NTitleADestSEFirstLastr   Next)r&   r1   r)   r   )r  r  titledestactionsesearchs         rA   r%  (PDFDocument.get_outlines.<locals>.searchv  s     u%E%%<6U?'	%.(ABE 99V,D"YYs^F4B r::%FeO!%.%!)<<<!%-777  =7s$   BB5B1B5*B3+B53B5r   )r  rJ   objectr~   r   r  OutlineType)rm   r%  s    @rA   get_outlinesPDFDocument.get_outlinesr  sR    T\\)	8& 	8 	8+:Q:Q1R 	8 dll:.22r@   c                     U R                   c   e [        U R                   S   5      nUR
                  $ ! [        [        4 a    [        ef = f)zGenerate page label strings for the PDF document.

If the document includes page labels, generates strings, one per page.
If not, raises PDFNoPageLabels.

The resulting iteration is unbounded.

PageLabels)r  r,  r   r   rM   labels)rm   page_labelss     rA   get_page_labelsPDFDocument.get_page_labels  sV     ||'''	"$T\\,%?@K !!! h' 	"!!	"s	   5 Acatr'  c                    ^^^  [        U R                  S   5      n[        UT   5      nS[
        [        [        4   S[        4UUU4S jjmT" U5      $ ! [        [        4 a    [	        TT45      ef = f)NNamesdrg   c           	        > SU ;   a  [        U S   5      u  pTU:  d  UT:  a  g SU ;   aW  [        U S   5      n[        [        [        [        [
        [        [        4   [        4      [        SU5      5      5      nUT   $ SU ;   a1  [        U S   5       H  nT	" [        U5      5      nU(       d  M  Us  $    [        TT45      e)NLimitsr3  r   Kids)r(   dictr   r   r   r   r}   r<  r   r0   r&   r   )
r4  r  k2r   namesr?  r  r1  r'  lookups
          rA   r;  'PDFDocument.lookup_name.<locals>.lookup  s    1}%ak28rCx!|!!G*-%c5j(93(>"?@(1dBST Sz!{#AfI.Az!}-Aq  / sCj))r@   )r&   r  r   r   r   r	   r}   r   )rm   r1  r'  r:  d0r;  s    ``  @rA   lookup_namePDFDocument.lookup_name  s|    	*t||G45E c
#	*d38n 	* 	* 	*$ bz/ h' 	*sCj))	*s   A A4r  c                      U R                  SU5      nU$ ! [         aK    SU R                  ;  a  [        U5      e[	        U R                  S   5      nX;  a  [        U5      eX1   n U$ f = f)NDests)r>  r   r  rP   r&   )rm   r  r   r=  s       rA   get_destPDFDocument.get_dest  sw    
	""7D1C 
  	dll*,T22DLL12B~,T22(C
	s    AA+*A+c                 r   SnUR                  5        H  nUR                  5       n[        R                  SU5        US:X  a]  [        R                  SU5        UR	                  5       (       d  [        SU< 35      e[        U5      nUS:  d  [        SU 35      eUs  $ U(       d  M  UnM     [        S5      e)	z0Internal function used to locate the first XRef.r@   zfind_xref: %rs	   startxrefzxref found: pos=%rzInvalid xref position: r   z Invalid negative xref position: Unexpected EOF)revreadlinesr   r   r   isdigitr7   r~   )rm   ry   prevr   r   s        rA   r  PDFDocument.find_xref  s     '')D::<DIIot,|#		.5||~~(+B4()KLLD	z(+KE7)STTt% *( -..r@   r   r  c                    UR                  U5        UR                  5          UR                  5       u  pE[
        R                  SX%5        [        U[        5      (       a=  UR                  U5        UR                  5         [        5       nUR                  U5        O9XQR                  L a  UR                  5         [        5       nUR                  U5        UR                  U5        UR                  5       n[
        R                  SU5        SU;   a   [!        US   5      nU R#                  XU5        SU;   a!  [!        US   5      nU R#                  XU5        gg! [         a    [	        S5      ef = f)z$Reads XRefs from the given location.rE  z"read_xref_from: start=%d, token=%rr   XRefStmPrevN)r   resetr   r,   r7   r   r   r   r~   r   r{   KEYWORD_XREFr   r   r   rn   r'   r  )rm   ry   r   r  r   tokenr  r   s           rA   r  PDFDocument.read_xref_from  s4    	E	3!++-LS 			6EeS!!KKLLN -DIIf+++!9DIIfT""$		-)GI./CU3WGFO,CU3 )  	3 !122	3s   E E1)r  r  r  r  r  r  r  r  r6  r2  r-  r  )rq  TTrp  ))r;   r<   r=   r>   rG   r	  rS  r  r  r	   r~   r   rr  r    r}   r,  r   r-   r  r  r$   r'  r  r   r   r  r  r  r   r(  r   r)  r/  r   r<  r>  rB  r  re   r  r?   r9   r@   rA   r  r    s   
 &%''	NtC.H)I$IJ  9;9; 9; 	9;
 9; 
9;v f+K&S &$ &"Y s 3 6 9 tF|S7H1I * S V 8$C $F $L S#sC/0K3h{3 3("# ""s sEz): s 8U3:. 3 /	 /c /6"4"4 "4 K 	"4
 
"4r@   r  c                   V    \ rS rSrSr\S\\   4S j5       r\	S\
S\S\4S j5       rSrg	)
r,  i  zOPageLabels from the document catalog.

See Section 8.3.1 in the PDF Reference.
rg   c           	   #   d  #    U R                   n[        U5      S:X  d  US   S   S:w  a4  [        R                  (       a  [	        S5      eUR                  SS0 45        [        US5       H  u  nu  p4[        U5      nUR                  S5      n[        [        UR                  SS5      5      5      n[        UR                  SS5      5      nU[        U5      :X  a  [        R                  " U5      n	OX   u  pX-
  n[        XU-   5      n	U	 H  nU R                  X5      nX~-   v   M     M     g 7f)Nr   z"PageLabels is missing page index 0r   Sr  r@   St)valuesr   r   r   r"   insert	enumerater&   r   r1   r)   r'   	itertoolscountr   _format_page_label)rm   r   nextr   label_dict_unchecked
label_dictstyleprefixfirst_valuerU  endr   range_lengthvaluelabels                  rA   r-  PageLabels.labels  s     v;!vay|q0$%IJJ a!R)3<VQ3G/D/5#$89JNN3'E :>>#s+C!DEF#JNN4$;<Ks6{" )2(D"{{,,FG//=n$   4Hs   D.D0rc  r^  c                    Uc  SnU$ U[        S5      L a  [        U 5      nU$ U[        S5      L a  [        U 5      R                  5       nU$ U[        S5      L a  [        U 5      nU$ U[        S5      L a  [	        U 5      R                  5       nU$ U[        S5      L a  [	        U 5      nU$ [
        R                  SU5        SnU$ )z+Format page label value in a specific stylerq  Dr  r  r  azUnknown page label style: %r)r.   r}   r3   upperr2   r   r   )rc  r^  rd  s      rA   rZ  PageLabels._format_page_label'  s     =E  c#hJE  c#h$U+113E  c#h$U+E  c#h$U+113E  c#h$U+E  KK6>Er@   r9   N)r;   r<   r=   r>   rG   propertyr   r}   r-  r  r~   r   rZ  r?   r9   r@   rA   r,  r,    sO    
 % % %< # c c  r@   r,  )`rX  loggingr   rQ  hashlibr   r   r   r   typingr   r   r	   r
   r   r   r   r   r   r   r   r   r   cryptography.hazmat.backendsr   &cryptography.hazmat.primitives.ciphersr   r   r   pdfminerr   pdfminer.arcfourr   pdfminer.castingr   pdfminer.data_structuresr   pdfminer.pdfexceptionsr   r   r   r   pdfminer.pdfparserr    r!   r"   pdfminer.pdftypesr#   r$   r%   r&   r'   r(   r)   r*   r+   pdfminer.psexceptionsr,   pdfminer.psparserr-   r.   r/   pdfminer.utilsr0   r1   r2   r3   r4   r5   	getLoggerr;   r   r7   SyntaxWarningrD   rJ   rM   rP   rS   rV   UserWarningrY   r\   r_   r   r   r  re   r   r   r   r	  rS  r  r  r,  r9   r@   rA   <module>r~     s     	  / /     9 L L  $ % /  J I
 
 
 ( 4 4  !	^ 	M 	L 		l 		\ 		 		- 	;  	"4 	
 X6{i." ""L#k L#^0=g 0=fK%K K%\H* H*VF$#= F$Rz$#? z$zY4 Y4x
7 7r@   