
    iWh                        S SK r S SKrS SKr S SK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  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  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  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   SSK!J"r"  SSK!J#r#  SSK!J$r$   " S S\5      r% " S S\5      r& " S S \5      r' " S! S"\5      r( " S# S$\(5      r) " S% S&\(5      r*\" S'5      r+\" S(5      r,\" S)5      r- " S* S+5      r. " S, S-\.5      r/ " S. S/\/5      r0 " S0 S1\.5      r1 " S2 S35      r2 " S4 S5\25      r3 " S6 S7\35      r4 " S8 S95      r5g! \ a    S SKr GNHf = f! \ a    S=rr
SSKJr   GNLf = f):    N)ARC4)AES)SHA256   )arcfour)PSEOF)literal_name)LIT)KWD)STRICT)PDFException)PDFTypeError)	PDFStream)PDFObjectNotFound)decipher_all)	int_value)bytes_value)
list_value)
dict_value)stream_value)PDFSyntaxError)PDFStreamParser)choplist)nunpack)decode_textc                       \ rS rSrSrg)PDFNoValidXRef(    N__name__
__module____qualname____firstlineno____static_attributes__r       G/home/kodi/my-venv/lib/python3.13/site-packages/pdfminer/pdfdocument.pyr   r   (       r&   r   c                       \ rS rSrSrg)PDFNoOutlines+   r   Nr    r   r&   r'   r*   r*   +   r(   r&   r*   c                       \ rS rSrSrg)PDFDestinationNotFound.   r   Nr    r   r&   r'   r-   r-   .   r(   r&   r-   c                       \ rS rSrSrg)PDFEncryptionError1   r   Nr    r   r&   r'   r0   r0   1   r(   r&   r0   c                       \ rS rSrSrg)PDFPasswordIncorrect4   r   Nr    r   r&   r'   r3   r3   4   r(   r&   r3   c                       \ rS rSrSrg)PDFTextExtractionNotAllowed7   r   Nr    r   r&   r'   r6   r6   7   r(   r&   r6   ObjStmXRefCatalogc                   *    \ rS rSrSrS rS rS rSrg)PDFBaseXRefB   Fc                     [         eN)NotImplementedErrorselfs    r'   get_trailerPDFBaseXRef.get_trailerF   s    !!r&   c                     / $ r?   r   rA   s    r'   
get_objidsPDFBaseXRef.get_objidsI   s    	r&   c                     [        U5      er?   )KeyErrorrB   objids     r'   get_posPDFBaseXRef.get_posO   s    uor&   r   N)	r!   r"   r#   r$   debugrC   rF   rL   r%   r   r&   r'   r<   r<   B   s    E"r&   r<   c                   N    \ rS rSrS rS rS r\" S5      rS r	S r
S rS	 rS
rg)PDFXRefU   c                      0 U l         0 U l        g r?   offsetstrailerrA   s    r'   __init__PDFXRef.__init__W   s    r&   c                 <    SU R                   R                  5       -  $ )Nz<PDFXRef: offsets=%r>rT   keysrA   s    r'   __repr__PDFXRef.__repr__\   s    &$,,*;*;*=>>r&   c                      UR                  5       u  p#UR                  5       (       d  M+   U(       d  [        SU-  5      eUR	                  S5      (       a  UR                  U5        OUR                  5       R                  S5      n[        U5      S:w  a  [        SU< SU< 35      e [        [        U5      u  pV[        XUU-   5       H  n UR                  5       u  pUR                  5       R                  S5      n[        U5      S	:w  a  [        S
U< SU< 35      eUu  p)n
U
S:w  a  Md  S [        U5      [        U	5      4U R                  U'   M     GMY  U R                  (       a#  [        R                  " SU R                  -  5        U R!                  U5        g ! [         a    [        S5      ef = f! [         a    [        SU< SU< 35      ef = f! [         a    [        S5      ef = f)Nz Unexpected EOF - file corrupted?zPremature eof: %r   trailer       zTrailer not found: z: line=zInvalid line:    zInvalid XRef format: z, line=   nzxref objects: %r)nextlinestripr   r   
startswithseeksplitlenmapint
ValueErrorrangerT   rN   logginginfoload_trailer)rB   parserposlinefstartnobjsrK   _gennouses              r'   loadPDFXRef.load_   s   I$oo/zz|| $ $%86%ABBz**C 

""4(A1v{$QU%VWWS!$S! uEk2M & 1IQ JJL&&t,q6Q;(vW[)\]]$%!S$;'+SXs5z&BU# 3' > ::w||$6$EF&!9  I$%GHHI  S$FD%QRRS
  M()KLLMs#   'F! ,F: G!F7:GG1r^   c                 *    UR                  5       u  p#X0R                  L d   eUR                  5       u  p$U R                  R                  [        U5      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   )		nexttokenKEYWORD_TRAILER
nextobjectr   popr   rU   updater   )rB   rp   rv   kwddicxs         r'   ro   PDFXRef.load_trailer   s    	'')HQ.....((*HQ 	JsO,  	

1A$%FGGtHQ		s   4A 4BBc                     U R                   $ r?   rU   rA   s    r'   rC   PDFXRef.get_trailer       ||r&   c                 6    U R                   R                  5       $ r?   rY   rA   s    r'   rF   PDFXRef.get_objids   s    ||  ""r&   c                 @     U R                   U   $ ! [         a    e f = fr?   )rT   rI   rJ   s     r'   rL   PDFXRef.get_pos   s(    	<<&& 		s    rS   N)r!   r"   r#   r$   rV   r[   ry   r   r}   ro   rC   rF   rL   r%   r   r&   r'   rP   rP   U   s1    
?"H *oO#r&   rP   c                   D    \ rS rSrS r\R                  " S5      rS rSr	g)PDFXRefFallback   c                 <    SU R                   R                  5       -  $ )Nz<PDFXRefFallback: offsets=%r>rY   rA   s    r'   r[   PDFXRefFallback.__repr__   s    .$,,2C2C2EFFr&   s   ^(\d+)\s+(\d+)\s+obj\bc                 R   UR                  S5          UR                  5       u  p#UR                  S5      (       a\  UR                  U5        U R	                  U5        U R
                  (       a'  [        R                  " SU R                  5       -  5         g U R                  R                  U5      nU(       d  M  UR                  5       u  pV[        U5      n[        U5      nS X&4U R                  U'   UR                  U5        UR                  5       u  px[        U[         5      (       ak  UR#                  S5      [$        L aS  ['        U5      n	 U	S   n
[/        U	R1                  5       5      n/ n  UR                  5       u  pxUR3                  U5        M%  GM  ! [         a     g f = f! [(         a    [*        (       a  [-        SU	-  5      eSn
 N|f = f! [         a     Of = f[5        U
[7        U5      S-  5      n
[9        U
5       H  nXS-     nX]S4U R                  U'   M     N)Nr   r^   trailer: %rTypeNN is not defined: %rr`   )rf   rc   r   re   ro   rN   rm   rn   rC   
PDFOBJ_CUEmatchgroupsrj   rT   r~   
isinstancer   getLITERAL_OBJSTMr   rI   r   r   r   get_dataappendminrh   rl   )rB   rp   rq   rr   mrK   rw   rv   objstreamnparser1objsindexobjid1s                  r'   ry   PDFXRefFallback.load   s   A$oo/ z**C !!&)::w||MD<L<L<N,NO> 	= %%d+AXXZNUJEJE#'"4DLLKK((*HQ#y))cggfo.O%c*sA
 *&//*;<#*#5#5#7C( ?   H 	K*   v,-Cf-LMMA  3t9a<("1XE!']F,1!+<DLL( &s5   F F+ 2&G 
F('F(+%GG
G#"G#r   N)
r!   r"   r#   r$   r[   recompiler   ry   r%   r   r&   r'   r   r      s    G 67J*r&   r   c                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)PDFXRefStream   Fc                 X    S U l         S U l        S =U l        =U l        U l        / U l        g r?   )dataentlenfl1fl2fl3rangesrA   s    r'   rV   PDFXRefStream.__init__   s/    	)---48dhr&   c                      SU R                   -  $ )Nz<PDFXRefStream: ranges=%r>)r   rA   s    r'   r[   PDFXRefStream.__repr__   s    +t{{;;r&   c           	      Z   UR                  5       u  p#UR                  5       u  p$UR                  5       u  p%UR                  5       u  p&[        U[        5      (       a  US   [        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                  [        SU5      5        US   u  U l        U l        U l        UR                  5       U l        U R                  U R                  -   U R                  -   U l        UR$                  U l        U R(                  (       ab  [*        R,                  " S	S
R/                  [1        [2        U R                  5      5      U R                  U R                  U R                  4-  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   LITERAL_XREFr   r   rh   r   r   extendr   r   r   r   r   r   r   attrsrU   rN   rm   rn   joinri   repr)	rB   rp   rv   rK   rw   r   r   sizeindex_arrays	            r'   ry   PDFXRefStream.load   sU   %%'
%%'
##%'')&),,vl0R !;<<f~jj1d)4{a1$ !7888A{34)/&48TXOO%	hhtxx'0||::LLAiiD$++ 67hh$((44 5 	r&   c                     U R                   $ r?   r   rA   s    r'   rC   PDFXRefStream.get_trailer   r   r&   c              #     #    U R                    Hn  u  p[        U5       HZ  nU R                  U-  nU R                  XDU R                  -    n[	        US U R
                   S5      nUS:X  d  US:X  d  MT  X-   v   M\     Mp     g 7f)Nr   r`   )r   rl   r   r   r   r   )rB   rt   ru   ioffsetentf1s          r'   rF   PDFXRefStream.get_objids   sv     "kkNU5\qiidkk'9:S$((^Q/7bAg'M " * 	s   A-B3Bc                    SnU R                    H  u  p4X1::  a  XU-   :  a	  X!U-
  -  n  OX$-  nM!     [        U5      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   rI   r   r   r   r   r   )
rB   rK   r   rt   ru   r   r   r   f2f3s
             r'   rL   PDFXRefStream.get_pos  s    "kkNU~%+"5& * 5/!u$iidkk12S$((^Q'S$((488"345S$((*+,-7">!1WA; 5/!r&   )r   r   r   r   r   r   rU   N)r!   r"   r#   r$   rN   rV   r[   ry   rC   rF   rL   r%   r   r&   r'   r   r      s%    E<,"r&   r   c                   ~    \ rS rSrSrSrSS jrS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rSS jrS rSrg)PDFStandardSecurityHandleri"  s    (N^NuAd NV.. h>/dSiz)r`   ra   c                 H    Xl         X l        X0l        U R                  5         g r?   )docidparampasswordinit)rB   r   r   r   s       r'   rV   #PDFStandardSecurityHandler.__init__(  s    

 		r&   c                     U R                  5         U R                  U R                  ;  a  [        SU R                  -  5      eU R                  5         g )NzUnsupported revision: param=%r)init_paramsrsupported_revisionsr0   r   init_keyrA   s    r'   r   PDFStandardSecurityHandler.init/  sA    66111$%E

%RSSr&   c                    [        U R                  R                  SS5      5      U l        [        U R                  S   5      U l        [        U R                  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Lengthr   )
r   r   r   vr   pr   oulengthrA   s    r'   r   &PDFStandardSecurityHandler.init_params6  s    4::>>#q124::c?+4::c?+TZZ_-TZZ_-

x <=r&   c                 j    U R                  U R                  5      U l        U R                  c  [        eg r?   )authenticater   keyr3   rA   s    r'   r   #PDFStandardSecurityHandler.init_key?  s+    $$T]]388&&r&   c                 2    [        U R                  S-  5      $ )N   boolr   rA   s    r'   is_printable'PDFStandardSecurityHandler.is_printableE      DFFQJr&   c                 2    [        U R                  S-  5      $ )N   r   rA   s    r'   is_modifiable(PDFStandardSecurityHandler.is_modifiableH  r   r&   c                 2    [        U R                  S-  5      $ )N   r   rA   s    r'   is_extractable)PDFStandardSecurityHandler.is_extractableK  s    DFFRK  r&   c                 
  ^ U R                   S:X  a/  [        R                  " U5      R                  U R                  5      $ [
        R
                  " U R                  5      nUR                  U R                  S   5        [        R                  " U5      R                  UR                  5       5      n[        SS5       H=  m[        U4S jU 5       5      n[        R                  " U5      R                  U5      nM?     X3-  nU$ )Nr`   r   r      c              3   ,   >#    U  H	  oT-  v   M     g 7fr?   r   .0cr   s     r'   	<genexpr>7PDFStandardSecurityHandler.compute_u.<locals>.<genexpr>X       1CqEC   )r   r   newencryptPASSWORD_PADDINGmd5r   r   digestrl   bytes)rB   r   hashresultkr   s        @r'   	compute_u$PDFStandardSecurityHandler.compute_uN  s    66Q;88C=(()>)>?? 774001DKK

1&XXc]**4;;=9F1b\1C11!,,V4 " FMr&   c                 d   XR                   -   S S n[        R                  " 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:  a"  U R                  (       d  UR                  S5        UR                  5       nSnU R                  S:  aH  U R                  S-  n[        S	5       H*  n[        R                  " US U 5      R                  5       nM,     US U $ )
N    z<lr   r   s      ra   r   2   )r
  r  r   r   structpackr   r   r   encrypt_metadatar  r   rl   )rB   r   r  r  r   rv   s         r'   compute_encryption_key1PDFStandardSecurityHandler.compute_encryption_key]  s    444cr:wwx DFFFKKdff-.DJJqM"66Q;((/066Q;q A2Y,335 bqzr&   c                 P    U R                  U5      nUc  U R                  U5      nU$ r?   )authenticate_user_passwordauthenticate_owner_passwordrB   r   r   s      r'   r   'PDFStandardSecurityHandler.authenticateo  s,    --h7;228<C
r&   c                 V    U R                  U5      nU R                  U5      (       a  U$ g r?   )r  verify_encryption_keyr  s      r'   r  5PDFStandardSecurityHandler.authenticate_user_passwordu  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`   r   )r  r   r   )rB   r   r   s      r'   r"  0PDFStandardSecurityHandler.verify_encryption_key|  sB    NN366Q;;"v$$r&   c                   ^ XR                   -   S S n[        R                  " U5      nU R                  S:  a6  [        S5       H'  n[        R                  " 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  a0  [        R                  " U5      R                  U R                  5      nOZU R                  n[        SSS5       H=  m[        U4S	 jU 5       5      n[        R                  " U5      R                  U5      nM?     U R                  U5      $ )
Nr  ra   r  r  r   r`      c              3   ,   >#    U  H	  oT-  v   M     g 7fr?   r   r  s     r'   r  IPDFStandardSecurityHandler.authenticate_owner_password.<locals>.<genexpr>  r  r  )r
  r  r   rl   r  r   r   r  decryptr   r  r  )	rB   r   r  rv   r   r   user_passwordr  r   s	           @r'   r  6PDFStandardSecurityHandler.authenticate_owner_password  s   444cr:wwx 66Q;2Ywwt{{}- 66Q;q AkkmBQ66Q; HHSM11$&&9M FFM2r2&1C11 $ 3 3M B ' ..}==r&   Nc                 &    U R                  XU5      $ r?   )decrypt_rc4)rB   rK   rw   r   r   s        r'   r+  "PDFStandardSecurityHandler.decrypt  s    d33r&   c                 H   U R                   [        R                  " SU5      S S -   [        R                  " SU5      S S -   n[        R                  " U5      nUR	                  5       S [        [        U5      S5       n[        R                  " U5      R                  U5      $ )N<Lra   r`   r   )
r   r  r  r  r  r   rh   r   r  r+  rB   rK   rw   r   r   r  s         r'   r/  &PDFStandardSecurityHandler.decrypt_rc4  s    hhT51"155D%8PQSRS8TTwws|kkm.SS2./xx}$$T**r&   )
r   r   r   r   r   r   r   r   r   r   r&   r?   )r!   r"   r#   r$   r
  r   rV   r   r   r   r   r   r   r  r  r   r  r"  r  r+  r/  r%   r   r&   r'   r   r   "  s\    A   !$%>(4+r&   r   c                   H   ^  \ rS rSrSrU 4S jrS rS	S jrS rS r	Sr
U =r$ )
PDFStandardSecurityHandlerV4i  )r   c                 ,  > [         [        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
                  -  5      e0 U l        U R                  R                  5        HK  u  pU R!                  [        US   5      5      nUc  [        S	U R
                  -  5      eX0R                  U'   MM     U R"                  U R                  S
'   U R                  U R                  ;  a  [        SU R
                  -  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)superr7  r   r   r   r   r   cfr	   stmfstrfr   r  r0   cfmitemsget_cfmdecrypt_identity)rB   r  r   rs   	__class__s       r'   r   (PDFStandardSecurityHandlerV4.init_params  s7   *D=?TZZ^^D12 F!34	 F!34	 $TZZ^^4Et%L M99		!$%IDJJ%VWWGGMMODA\!E(34Ay()PSWS]S])]^^HHQK	 $
  $4499DHH$$%G$**%TUUr&   c                 L    US:X  a  U R                   $ US:X  a  U R                  $ g )NV2AESV2)r/  decrypt_aes128rB   names     r'   rF  $PDFStandardSecurityHandlerV4.get_cfm  s+    4<###W_&&&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)r  r   r	   rC  rD  )rB   rK   rw   r   r   rO  ts          r'   r+  $PDFStandardSecurityHandlerV4.decrypt  sV    $$):		&!A}aJ!><99Dxx~eD11r&   c                     U$ r?   r   rB   rK   rw   r   s       r'   rG  -PDFStandardSecurityHandlerV4.decrypt_identity  s    r&   c                 v   U R                   [        R                  " SU5      S S -   [        R                  " SU5      S S -   S-   n[        R                  " U5      nUR	                  5       S [        [        U5      S5       n[        R                  " U[        R                  US S S9R                  USS  5      $ )Nr2  ra   r`   s   sAlTr   modeIV)r   r  r  r  r  r   rh   r   r  MODE_CBCr+  r3  s         r'   rM  +PDFStandardSecurityHandlerV4.decrypt_aes128  s    hhT51"155D%8PQSRS8TTW^^wws|kkm.SS2./wws$s)<DDT"#YOOr&   )rA  rD  r  r   rB  rC  )NN)r!   r"   r#   r$   r   r   rF  r+  rG  rM  r%   __classcell__rH  s   @r'   r7  r7    s)    (2P Pr&   r7  c                   >   ^  \ rS rSrSrU 4S jrS rS rS rSr	U =r
$ )PDFStandardSecurityHandlerV5i  )r  c                   > [         [        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@  ra  r   r   r   r   oeuer   o_hasho_validation_salt
o_key_saltr   u_hashu_validation_salt
u_key_salt)rB   rH  s    r'   r   (PDFStandardSecurityHandlerV5.init_params  s    *D=?djj./djj./ffSbk!%2&&+ffSbk!%2&&+r&   c                 (    US:X  a  U R                   $ g )NAESV3)decrypt_aes256rN  s     r'   rF  $PDFStandardSecurityHandlerV5.get_cfm  s    7?&&&r&   c                    US S n[         R                  " U5      nUR                  U R                  5        UR                  U R                  5        UR                  5       U R                  :X  a  [         R                  " U5      nUR                  U R                  5        UR                  U R                  5        [        R                  " UR                  5       [        R                  SS9R                  U R                  5      $ [         R                  " U5      nUR                  U R                  5        UR                  5       U R                  :X  a|  [         R                  " U5      nUR                  U R                  5        [        R                  " UR                  5       [        R                  SS9R                  U R                  5      $ g )N   s                   rY  )r   r  r   ri  r   r  rh  rj  r   r\  r+  rf  rl  rk  rm  rg  )rB   r   r  s      r'   r   )PDFStandardSecurityHandlerV5.authenticate  s.   DS>zz(#D**+DFF;;=DKK'::h'DKK(KK774;;=s||MUUVZV]V]^^zz(#D**+;;=DKK'::h'DKK(774;;=s||MUUVZV]V]^^r&   c                     [         R                  " U R                  [         R                  US S S9R	                  USS  5      $ )Nr   rY  )r   r  r   r\  r+  rV  s       r'   rq  +PDFStandardSecurityHandlerV5.decrypt_aes256  s4    wwtxxclltCRyAII$rs)TTr&   )	r   rh  rj  ri  rf  rk  rm  rl  rg  )r!   r"   r#   r$   r   r   rF  r   rq  r%   r^  r_  s   @r'   ra  ra    s$    $U Ur&   ra  c                       \ rS rSrSr\\S.r\b  \\S'   \	b  \
\S'   SrSS jrSS	 jrS
 rS r\" S5      rS rS rS rS rS rS rS 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`   Nr   r  r   c                    X0l         / U l        / U l        S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(       a=  SUl        [#        5       nUR%                  U5        U R                  R'                  U5        U R                   H  nUR)                  5       nU(       d  M  SU;   a2  [+        US   5      [-        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        (       a  [1        S	5      eg! [         a    Sn GNCf = f)
z1Set the document to use a given PDFParser object.NTEncryptIDInfoRootz(No /Root object! - Is this really a PDF?r   zCatalog not found!)cachingxrefsrn   catalog
encryptiondecipher_parser_cached_objs_parsed_objsset_documentr   r   r   	find_xrefread_xref_fromr   fallbackr   ry   r   rC   r   r   _initialize_passwordr   r   LITERAL_CATALOGr   )rB   rp   r   r  r  rq   xrefrU   s           r'   rV   PDFDocument.__init__  s   
	!!$'GKKKD.1D	..(CTZZ8 "FO"$DIIfJJd#JJD&&(GG##-gdm#<#-gi.@#A#C))(3 		  GFO!<= )'&/: " !!KLL<<F#?:v$%9::9  	H	s   6-G G'&G'c                    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
        SU R                  l        g )NFilterStandardzUnknown filter: param=%rr   r   zUnknown algorithm: param=%rF)r  r	   r   r0   r   security_handler_registryr+  r  r   r   r   r  r  )rB   r   r   r   r   factoryhandlers          r'   r   PDFDocument._initialize_passwordO  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&   c                 @   UR                   U R                  ;   a  U R                  UR                      u  pEO>U R                  U5      u  pEU R                  (       a  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)rK   r  _get_objectsr  
IndexErrorr   )rB   r   r   rK   r   r   r   r   s           r'   _getobj_objstmPDFDocument._getobj_objstm_  s    <<4,,,))&,,7IT1))&1IT||37)!!&,,/aCI	>'C 
  	> !4u!<==	>s   >B Bc                    UR                  S5      [        La  [        (       a  [        SU-  5      e US   n[        UR                  5       5      nUR                  U 5        / n  UR                  5       u  pVUR                  U5        M%  ! [         a    [        (       a  [        SU-  5      eSn Nzf = f! [         a     XB4$ f = f)Nr   zNot a stream object: %rr   r   r   )r   r   r   r   rI   r   r   r  r~   r   r   )rB   r   r   rp   r   rv   r   s          r'   r  PDFDocument._get_objectsm  s    ::f^3v$%>%GHH	sA
 !!23D!	!,,.C    	v$%;f%DEEA	  	y	s#   B %&B6 %B32B36
CCs   objc                    U R                   R                  U5        U R                   R                  5       u  p4XB:w  a  [        SU< SU< 35      eU R                   R                  5       u  p5U R                   R                  5       u  p6X`R                  La  [        SU-  5      eU R                   R                  5       u  p7U$ )Nzobjid mismatch: =zInvalid object spec: offset=%r)r  rf   r|   r   KEYWORD_OBJr~   )rB   rq   rK   rv   r   rw   r   r   s           r'   _getobj_parsePDFDocument._getobj_parse  s    #ll,,.? FE!JKK\\++-
<<))+&&& !AC!GHH<<**,
r&   c                 `   US:w  d   eU R                   (       d  [        S5      eU R                  (       a  [        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U R                  (       a  [        R                  " SU< SU< 35        U R&                  (       a  X#4U R                  U'   U$ ! [         a     GM  f = f! [         ["        4 a     GM/  f = f)Nr   zPDFDocument is not initializedzgetobj: objid=%rzregister: objid=z: )r  r   rN   rm   r  rL   rI   r   getobjr  r  r  r   r   r   	set_objidr   r   r   r  )rB   rK   r   rw   r  strmidr   r   s           r'   r  PDFDocument.getobj  sk   zzzz?@@::MM,u45%%%,,U3LS6 
3 

-1\\%-@*VE)!-dkk&.A!B"11&G"00>==".t}}eC"PC!#y11e3! #( (..zz%EF||,/<!!%(
-    ~. s%   FBF
FFF-,F-c                 h   ^ SU R                   ;  a  [        eU4S jmT" U R                   S   S5      $ )NOutlinesc              3   p  >#    [        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       H  nUv   M	     SU ;   a  T" U S   U5       H  nUv   M	     g 7f)	NTitleADestSEFirstLastr   Next)r   r   r   r   )entryleveltitledestactionser   searchs          r'   r  (PDFDocument.get_outlines.<locals>.search  s     u%E%%<6U?'E'N(CDE 99V,D"YYs^F4B r::%FeOga8AG 9fu5AG 6s   B3B6r   )r  r*   )rB   r  s    @r'   get_outlinesPDFDocument.get_outlines  s2    T\\)	  dll:.22r&   c                    ^^^  [        U R                  S   5      n[        UT   5      nUUU4S jmT" U5      $ ! [        [        4 a    [        TT45      ef = f)NNamesc                 .  > SU ;   a  [        U S   5      u  pTU:  d  UT:  a  g SU ;   a(  [        U S   5      n[        [        SU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Limitsr  r`   Kids)r   dictr   r   rI   )
dk1k2r   namesr  r   catr   lookups
          r'   r  'PDFDocument.lookup_name.<locals>.lookup  s    1}%ak28rCx!|!!G*-Xa./Sz!{#AfI.Az!}-Aq  / C:&&r&   )r   r  r   rI   )rB   r  r   r  d0r  s    ``  @r'   lookup_namePDFDocument.lookup_name  sa    	't||G45E c
#	' bz) h' 	'C:&&	's	   ; A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  rI   r  r-   r   )rB   rO  r   r  s       r'   get_destPDFDocument.get_dest  sw    
	""7D1C 
  	dll*,T22DLL12B~,T22(C
	s    AA+*A+c                 N   SnUR                  5        HP  nUR                  5       nU R                  (       a  [        R                  " SU-  5        US:X  a    OU(       d  MN  UnMR     [	        S5      eU R                  (       a  [        R
                  " SU-  5        [        U5      $ )z0Internal function used to locate the first XRef.Nzfind_xref: %rs	   startxrefUnexpected EOFzxref found: pos=%r)revreadlinesrd   rN   rm   r   rn   rj   )rB   rp   prevrr   s       r'   r  PDFDocument.find_xref  s     '')D::<Dzzo45|#t * !!122::LL-454yr&   c                 8   UR                  U5        UR                  5          UR                  5       u  pEU R
                  (       a  [        R                  " SX%4-  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U R
                  (       a  [        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! [         a    [	        S5      ef = f)z$Reads XRefs from the given location.r  z"read_xref_from: start=%d, token=%rr   XRefStmPrevN)rf   resetr|   r   r   rN   rm   rn   r   rj   r   ry   KEYWORD_XREFrc   rP   r   rC   r   r  )rB   rp   rt   r  rq   tokenr  rU   s           r'   r  PDFDocument.read_xref_from  sF   E	3!++-LS ::LL=NOeS!!KKLLN ?DIIf+++!9DIIfT""$::LL01GI./CU3WGFO,CU35  	3 !122	3s   F F)r  r  r  r  r  r  r  rn   r   r   r   r  )r&   TTr5  )r!   r"   r#   r$   __doc__r   r  r   r7  r   ra  rN   rV   r  r  r  r   r  r  r  r  r  r  r  r  r%   r   r&   r'   ry  ry    s    
 &%! 'C!!$+G%a(E/f * f+K
"H3,2& r&   ry  )6r   r  rm   hashlibr  ImportErrorCrypto.Cipherr   r   Crypto.Hashr    r   psparserr   r	   r
   r   r   pdftypesr   r   r   r   r   r   r   r   r   r   	pdfparserr   r   utilsr   r   r   r   r*   r-   r0   r3   r6   r   r   r  r<   rP   r   r   r   r7  ra  ry  r   r&   r'   <module>r     sl   	  ""!"  "    " "  ' "  !     " % &   
	^ 		L 		\ 		 		- 		"4 	 X6{i.
 &Gk GX1g 1lF"K F"V|+ |+~0P#= 0Pf*U#? *U^c cy    "C&!!"s"   E E 
EEE21E2