§
    Æ‡tjbƒ  ã                   óP  — d dl Z d dlZd dlmZmZmZ d dlmZmZm	Z	m
Z
 d dlmZ d dlmZmZ d dlmZ d dlmZmZ d dlmZ d d	lmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$  ej%        e&¦  «        Z' G d
„ d¦  «        Z( G d„ d¦  «        Z) G d„ d¦  «        Z* G d„ d¦  «        Z+ G d„ de*¦  «        Z, G d„ de,¦  «        Z- G d„ de-¦  «        Z. G d„ de-¦  «        Z/ G d„ de,¦  «        Z0 G d„ de*e+¦  «        Z1 G d„ de,e+¦  «        Z2 ed e*¬!¦  «        Z3 G d"„ d#e,ee3         ¦  «        Z4 G d$„ d%e4e3         ¦  «        Z5 G d&„ d'e5e3         e+¦  «        Z6e	e2e1f         Z7 G d(„ d)e6e7         ¦  «        Z8 G d*„ d+e8¦  «        Z9 G d,„ d-e8¦  «        Z: G d.„ d/e6e8         ¦  «        Z; G d0„ d1e;¦  «        Z< G d2„ d3e;¦  «        Z=e	e;d4f         Z> G d5„ d4e6e>         ¦  «        Z? G d6„ d7e?¦  «        Z@ G d8„ d9e?¦  «        ZA G d:„ d;e4e,         ¦  «        ZB G d<„ d=eB¦  «        ZC G d>„ d?eB¦  «        ZDdS )@é    N)ÚIterableÚIteratorÚSequence)ÚGenericÚTypeVarÚUnionÚcast)ÚPDFColorSpace)ÚPDFTypeErrorÚPDFValueError)ÚPDFFont)ÚColorÚPDFGraphicState)Ú	PDFStream)ÚINFÚLTComponentTÚMatrixÚPathSegmentÚPlaneÚPointÚRectÚapply_matrix_rectÚbbox2strÚfsplitÚ	get_boundÚ
matrix2strÚuniqc                   ó(   — e Zd Zd	deddfd„Zd
d„ZdS )ÚIndexAssignerr   ÚindexÚreturnNc                 ó   — || _         d S ©N©r    )Úselfr    s     úM/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/pdfminer/layout.pyÚ__init__zIndexAssigner.__init__$   s   € ØˆŒ
ˆ
ˆ
ó    ÚobjÚLTItemc                 óÎ   — t          |t          ¦  «        r| j        |_        | xj        dz  c_        d S t          |t          ¦  «        r|D ]}|                      |¦  «         Œd S d S ©Né   )Ú
isinstanceÚ	LTTextBoxr    ÚLTTextGroupÚrun)r%   r)   Úxs      r&   r1   zIndexAssigner.run'   sv   € Ý�c�9Ñ%Ô%ð 	Øœ
ˆCŒIØˆJŒJ˜!‰OˆJŒJˆJˆJÝ˜�[Ñ)Ô)ð 	Øð ð �Ø—’˜‘”��ð	ð 	ðð r(   ©r   )r)   r*   r!   N)Ú__name__Ú
__module__Ú__qualname__Úintr'   r1   © r(   r&   r   r   #   sO   € € € € € ðð ˜cð ¨$ð ð ð ð ðð ð ð ð ð r(   r   c                   ód   — e Zd ZdZ	 	 	 	 	 	 	 ddededed	ed
edz  dededdfd„Zdd„Zdefd„Z	dS )ÚLAParamsa  Parameters for layout analysis

    :param line_overlap: If two characters have more overlap than this they
        are considered to be on the same line. The overlap is specified
        relative to the minimum height of both characters.
    :param char_margin: If two characters are closer together than this
        margin they are considered part of the same line. The margin is
        specified relative to the width of the character.
    :param word_margin: If two characters on the same line are further apart
        than this margin then they are considered to be two separate words, and
        an intermediate space will be added for readability. The margin is
        specified relative to the width of the character.
    :param line_margin: If two lines are are close together they are
        considered to be part of the same paragraph. The margin is
        specified relative to the height of a line.
    :param boxes_flow: Specifies how much a horizontal and vertical position
        of a text matters when determining the order of text boxes. The value
        should be within the range of -1.0 (only horizontal position
        matters) to +1.0 (only vertical position matters). You can also pass
        `None` to disable advanced layout analysis, and instead return text
        based on the position of the bottom left corner of the text box.
    :param detect_vertical: If vertical text should be considered during
        layout analysis
    :param all_texts: If layout analysis should be performed on text in
        figures.
    ç      à?ç       @çš™™™™™¹?FÚline_overlapÚchar_marginÚline_marginÚword_marginÚ
boxes_flowNÚdetect_verticalÚ	all_textsr!   c                 ó�   — || _         || _        || _        || _        || _        || _        || _        |                      ¦   «          d S r#   )r>   r?   r@   rA   rB   rC   rD   Ú	_validate)r%   r>   r?   r@   rA   rB   rC   rD   s           r&   r'   zLAParams.__init__L   sP   € ð )ˆÔØ&ˆÔØ&ˆÔØ&ˆÔØ$ˆŒØ.ˆÔØ"ˆŒà�ŠÑÔÐÐÐr(   c                 óÂ   — | j         �Ud}t          | j         t          t          f¦  «        st	          |¦  «        ‚d| j         cxk    rdk    sn t          |¦  «        ‚d S d S )Nz@LAParam boxes_flow should be None, or a number between -1 and +1éÿÿÿÿr-   )rB   r.   r7   Úfloatr   r   )r%   Úboxes_flow_err_msgs     r&   rF   zLAParams._validate`   s{   € ØŒ?Ð&àRð õ ˜tœµµe°Ñ=Ô=ð 7Ý"Ð#5Ñ6Ô6Ð6Ø˜œÐ-Ð-Ò-Ð-¨AÒ-Ð-Ð-Ð-Ý#Ð$6Ñ7Ô7Ð7ð 'Ð&ð .Ð-r(   c           	      óN   — d| j         d›d| j        d›d| j        d›d| j        ›d�	S )Nz<LAParams: char_margin=z.1fz, line_margin=z, word_margin=z all_texts=ú>)r?   r@   rA   rD   ©r%   s    r&   Ú__repr__zLAParams.__repr__j   sZ   € ð- dÔ&6Ð>ð -ð -ØÔ+Ð3ð-ð -àÔ+Ð2ð-ð -ð œð-ð -ð -ð	
r(   )r;   r<   r;   r=   r;   FF©r!   N)
r4   r5   r6   Ú__doc__rI   Úboolr'   rF   ÚstrrN   r8   r(   r&   r:   r:   0   sÏ   € € € € € ðð ð: "Ø Ø Ø Ø#&Ø %Øðð àðð ðð ð	ð
 ðð ˜D‘Lðð ðð ðð 
ðð ð ð ð(8ð 8ð 8ð 8ð
˜#ð 
ð 
ð 
ð 
ð 
ð 
r(   r:   c                   ó"   — e Zd ZdZdeddfd„ZdS )r*   z)Interface for things that can be analyzedÚlaparamsr!   Nc                 ó   — dS )zPerform the layout analysis.Nr8   ©r%   rT   s     r&   ÚanalyzezLTItem.analyzev   s   € € € r(   )r4   r5   r6   rP   r:   rW   r8   r(   r&   r*   r*   s   s<   € € € € € Ø3Ð3ð+ ð +¨Tð +ð +ð +ð +ð +ð +r(   r*   c                   ó*   — e Zd ZdZdefd„Zdefd„ZdS )ÚLTTextz#Interface for things that have textr!   c                 óL   — d| j         j        › d|                      ¦   «         ›d�S ©Nú<ú rL   )Ú	__class__r4   Úget_textrM   s    r&   rN   zLTText.__repr__}   s(   € ØA�4”>Ô*ÐAÐA¨T¯]ª]©_¬_ÐAÐAÐAÐAr(   c                 ó   — t           ‚)zText contained in this object©ÚNotImplementedErrorrM   s    r&   r_   zLTText.get_text€   s   € å!Ð!r(   N)r4   r5   r6   rP   rR   rN   r_   r8   r(   r&   rY   rY   z   sU   € € € € € Ø-Ð-ðB˜#ð Bð Bð Bð Bð"˜#ð "ð "ð "ð "ð "ð "r(   rY   c                   óê   — e Zd ZdZdeddfd„Zdefd„Zdede	fd„Z
dede	fd	„Zdede	fd
„Zdede	fd„Zdeddfd„Zde	fd„Zdd de	fd„Zdd defd„Zdd defd„Zdd de	fd„Zdd defd„Zdd defd„ZdS )ÚLTComponentzObject with a bounding boxÚbboxr!   Nc                 ód   — t                                | ¦  «         |                      |¦  «         d S r#   )r*   r'   Úset_bbox©r%   re   s     r&   r'   zLTComponent.__init__ˆ   s,   € Ý�Š˜ÑÔÐØ�Š�dÑÔÐÐÐr(   c                 óL   — d| j         j        › dt          | j        ¦  «        › d�S r[   )r^   r4   r   re   rM   s    r&   rN   zLTComponent.__repr__Œ   s*   € ØC�4”>Ô*ÐCÐC­X°d´iÑ-@Ô-@ÐCÐCÐCÐCr(   Ú_c                 ó   — t           ‚r#   ©r   ©r%   rj   s     r&   Ú__lt__zLTComponent.__lt__�   ó   € ÝÐr(   c                 ó   — t           ‚r#   rl   rm   s     r&   Ú__le__zLTComponent.__le__“   ro   r(   c                 ó   — t           ‚r#   rl   rm   s     r&   Ú__gt__zLTComponent.__gt__–   ro   r(   c                 ó   — t           ‚r#   rl   rm   s     r&   Ú__ge__zLTComponent.__ge__™   ro   r(   c                 ó‚   — |\  }}}}|| _         || _        || _        || _        ||z
  | _        ||z
  | _        || _        d S r#   )Úx0Úy0Úx1Úy1ÚwidthÚheightre   )r%   re   rw   rx   ry   rz   s         r&   rg   zLTComponent.set_bboxœ   sM   € ØÑˆˆR��RØˆŒØˆŒØˆŒØˆŒØ˜"‘WˆŒ
Ø˜2‘gˆŒØˆŒ	ˆ	ˆ	r(   c                 ó.   — | j         dk    p
| j        dk    S ©Nr   )r{   r|   rM   s    r&   Úis_emptyzLTComponent.is_empty¦   s   € ØŒz˜QŠÐ2 $¤+°Ò"2Ð2r(   r)   c                 ó´   — t          |t          ¦  «        s$J t          t          |¦  «        ¦  «        ¦   «         ‚|j        | j        k    o| j        |j        k    S r#   )r.   rd   rR   Útyperw   ry   ©r%   r)   s     r&   Úis_hoverlapzLTComponent.is_hoverlap©   óI   € Ý˜#�{Ñ+Ô+Ð;Ð;­Sµ°c±´©^¬^Ñ;Ô;Ð+ØŒv˜œÒ Ð6 T¤W°´Ò%6Ð6r(   c                 ó*  — t          |t          ¦  «        s$J t          t          |¦  «        ¦  «        ¦   «         ‚|                      |¦  «        rdS t          t          | j        |j        z
  ¦  «        t          | j        |j        z
  ¦  «        ¦  «        S r~   ©	r.   rd   rR   r�   rƒ   ÚminÚabsrw   ry   r‚   s     r&   Ú	hdistancezLTComponent.hdistance­   óz   € Ý˜#�{Ñ+Ô+Ð;Ð;­Sµ°c±´©^¬^Ñ;Ô;Ð+Ø×Ò˜CÑ Ô ð 	EØ�1å•s˜4œ7 S¤VÑ+Ñ,Ô,­c°$´'¸C¼FÑ2BÑ.CÔ.CÑDÔDÐDr(   c                 ó*  — t          |t          ¦  «        s$J t          t          |¦  «        ¦  «        ¦   «         ‚|                      |¦  «        rDt          t          | j        |j        z
  ¦  «        t          | j        |j        z
  ¦  «        ¦  «        S dS r~   r†   r‚   s     r&   ÚhoverlapzLTComponent.hoverlap´   óy   € Ý˜#�{Ñ+Ô+Ð;Ð;­Sµ°c±´©^¬^Ñ;Ô;Ð+Ø×Ò˜CÑ Ô ð 	Ý•s˜4œ7 S¤VÑ+Ñ,Ô,­c°$´'¸C¼FÑ2BÑ.CÔ.CÑDÔDÐDà�1r(   c                 ó´   — t          |t          ¦  «        s$J t          t          |¦  «        ¦  «        ¦   «         ‚|j        | j        k    o| j        |j        k    S r#   )r.   rd   rR   r�   rx   rz   r‚   s     r&   Úis_voverlapzLTComponent.is_voverlap»   r„   r(   c                 ó*  — t          |t          ¦  «        s$J t          t          |¦  «        ¦  «        ¦   «         ‚|                      |¦  «        rdS t          t          | j        |j        z
  ¦  «        t          | j        |j        z
  ¦  «        ¦  «        S r~   ©	r.   rd   rR   r�   r�   r‡   rˆ   rx   rz   r‚   s     r&   Ú	vdistancezLTComponent.vdistance¿   rŠ   r(   c                 ó*  — t          |t          ¦  «        s$J t          t          |¦  «        ¦  «        ¦   «         ‚|                      |¦  «        rDt          t          | j        |j        z
  ¦  «        t          | j        |j        z
  ¦  «        ¦  «        S dS r~   r‘   r‚   s     r&   ÚvoverlapzLTComponent.voverlapÆ   r�   r(   )r4   r5   r6   rP   r   r'   rR   rN   ÚobjectrQ   rn   rq   rs   ru   rg   r   rƒ   rI   r‰   rŒ   r�   r’   r”   r8   r(   r&   rd   rd   …   sù  € € € € € Ø$Ð$ð˜Tð  dð ð ð ð ðD˜#ð Dð Dð Dð Dð˜ð  4ð ð ð ð ð˜ð  4ð ð ð ð ð˜ð  4ð ð ð ð ð˜ð  4ð ð ð ð ð˜Tð  dð ð ð ð ð3˜$ð 3ð 3ð 3ð 3ð7˜}ð 7°ð 7ð 7ð 7ð 7ðE˜]ð E¨uð Eð Eð Eð Eð˜Mð ¨eð ð ð ð ð7˜}ð 7°ð 7ð 7ð 7ð 7ðE˜]ð E¨uð Eð Eð Eð Eð˜Mð ¨eð ð ð ð ð ð r(   rd   c                   óž   — e Zd ZdZ	 	 	 	 	 	 	 ddedee         dededed	edz  d
edz  dee	         dz  de
eef         dz  ddfd„Zdefd„ZdS )ÚLTCurvezàA generic Bezier curve

    The parameter `original_path` contains the original
    pathing information from the pdf (e.g. for reconstructing Bezier Curves).

    `dashing_style` contains the Dashing information if any.
    FNÚ	linewidthÚptsÚstrokeÚfillÚevenoddÚstroking_colorÚnon_stroking_colorÚoriginal_pathÚdashing_styler!   c
                 óÔ   — t                                | t          |¦  «        ¦  «         || _        || _        || _        || _        || _        || _        || _	        || _
        |	| _        d S r#   )rd   r'   r   r™   r˜   rš   r›   rœ   r�   rž   rŸ   r    )
r%   r˜   r™   rš   r›   rœ   r�   rž   rŸ   r    s
             r&   r'   zLTCurve.__init__×   si   € õ 	×Ò˜T¥9¨S¡>¤>Ñ2Ô2Ð2ØˆŒØ"ˆŒØˆŒØˆŒ	ØˆŒØ,ˆÔØ"4ˆÔØ*ˆÔØ*ˆÔÐÐr(   c                 óJ   — d                      d„ | j        D ¦   «         ¦  «        S )Nú,c              3   ó*   K  — | ]} d j         |Ž V — ŒdS )z{:.3f},{:.3f}N)Úformat)Ú.0Úps     r&   ú	<genexpr>z"LTCurve.get_pts.<locals>.<genexpr>ï   s-   è è € ÐEÐE°qÐ.˜Ô.°Ð2ÐEÐEÐEÐEÐEÐEr(   )Újoinr™   rM   s    r&   Úget_ptszLTCurve.get_ptsî   s%   € Ø�xŠxÐEÐE¸D¼HÐEÑEÔEÑEÔEÐEr(   ©FFFNNNN)r4   r5   r6   rP   rI   Úlistr   rQ   r   r   Útupler•   r'   rR   rª   r8   r(   r&   r—   r—   Î   sö   € € € € € ðð ð ØØØ'+Ø+/Ø26Ø6:ð+ð +àð+ð �%Œ[ð+ð ð	+ð
 ð+ð ð+ð  ™ð+ð " D™Lð+ð ˜KÔ(¨4Ñ/ð+ð ˜V V˜^Ô,¨tÑ3ð+ð 
ð+ð +ð +ð +ð.F˜ð Fð Fð Fð Fð Fð Fr(   r—   c                   óŠ   — e Zd ZdZ	 	 	 	 	 	 	 ddededededed	ed
edz  dedz  dee	         dz  de
eef         dz  ddfd„ZdS )ÚLTLinezOA single straight line.

    Could be used for separating text or figures.
    FNr˜   Úp0Úp1rš   r›   rœ   r�   rž   rŸ   r    r!   c                 óP   — t                                | |||g||||||	|
¦
  «
         d S r#   ©r—   r'   )r%   r˜   r°   r±   rš   r›   rœ   r�   rž   rŸ   r    s              r&   r'   zLTLine.__init__ø   sH   € õ 	×ÒØØØ�ˆHØØØØØØØñ	
ô 	
ð 	
ð 	
ð 	
r(   r«   )r4   r5   r6   rP   rI   r   rQ   r   r¬   r   r­   r•   r'   r8   r(   r&   r¯   r¯   ò   sÚ   € € € € € ðð ð ØØØ'+Ø+/Ø26Ø6:ð
ð 
àð
ð ð
ð ð	
ð
 ð
ð ð
ð ð
ð  ™ð
ð " D™Lð
ð ˜KÔ(¨4Ñ/ð
ð ˜V V˜^Ô,¨tÑ3ð
ð 
ð
ð 
ð 
ð 
ð 
ð 
r(   r¯   c                   ó†   — e Zd ZdZ	 	 	 	 	 	 	 ddededededed	edz  d
edz  dee	         dz  de
eef         dz  ddfd„ZdS )ÚLTRectzMA rectangle.

    Could be used for framing another pictures or figures.
    FNr˜   re   rš   r›   rœ   r�   rž   rŸ   r    r!   c
                 ór   — |\  }
}}}t                                | ||
|f||f||f|
|fg|||||||	¦
  «
         d S r#   r³   )r%   r˜   re   rš   r›   rœ   r�   rž   rŸ   r    rw   rx   ry   rz   s                 r&   r'   zLTRect.__init__  sk   € ð  ÑˆˆR��RÝ×ÒØØØ�"ˆX˜˜B�x " b ¨B°¨8Ð4ØØØØØØØñ	
ô 	
ð 	
ð 	
ð 	
r(   r«   )r4   r5   r6   rP   rI   r   rQ   r   r¬   r   r­   r•   r'   r8   r(   r&   rµ   rµ     sÐ   € € € € € ðð ð ØØØ'+Ø+/Ø26Ø6:ð
ð 
àð
ð ð
ð ð	
ð
 ð
ð ð
ð  ™ð
ð " D™Lð
ð ˜KÔ(¨4Ñ/ð
ð ˜V V˜^Ô,¨tÑ3ð
ð 
ð
ð 
ð 
ð 
ð 
ð 
r(   rµ   c                   ó6   — e Zd ZdZdedededdfd„Zdefd„ZdS )	ÚLTImagezKAn image object.

    Embedded images can be in JPEG, Bitmap or JBIG2.
    ÚnameÚstreamre   r!   Nc                 ó¦  — t                                | |¦  «         || _        || _        |                     d¦  «        |                     d¦  «        f| _        |                     d¦  «        | _        |                     dd¦  «        | _        |                     d¦  «        | _        t          | j        t          ¦  «        s| j        g| _        d S d S )N)ÚWÚWidth)ÚHÚHeight)ÚIMÚ	ImageMask)ÚBPCÚBitsPerComponentr-   )ÚCSÚ
ColorSpace)rd   r'   r¹   rº   Úget_anyÚsrcsizeÚ	imagemaskÚbitsÚ
colorspacer.   r¬   )r%   r¹   rº   re   s       r&   r'   zLTImage.__init__:  s¶   € Ý×Ò˜T 4Ñ(Ô(Ð(ØˆŒ	ØˆŒØŸš ~Ñ6Ô6¸¿ºÀÑ8WÔ8WÐXˆŒØŸšÐ(;Ñ<Ô<ˆŒØ—N’NÐ#>ÀÑBÔBˆŒ	Ø Ÿ.š.Ð)=Ñ>Ô>ˆŒÝ˜$œ/­4Ñ0Ô0ð 	0Ø#œÐ/ˆDŒOˆOˆOð	0ð 	0r(   c           	      ól   — d| j         j        › d| j        › dt          | j        ¦  «        › d| j        ›d�	S ©Nr\   ú(ú) r]   rL   )r^   r4   r¹   r   re   rÇ   rM   s    r&   rN   zLTImage.__repr__E  sV   € ð7�”Ô'ð 7ð 7¨$¬)ð 7ð 7Ý˜œ	Ñ"Ô"ð7ð 7Ø%)¤\ð7ð 7ð 7ð	
r(   )	r4   r5   r6   rP   rR   r   r   r'   rN   r8   r(   r&   r¸   r¸   4  si   € € € € € ðð ð
	0˜Sð 	0¨)ð 	0¸4ð 	0ÀDð 	0ð 	0ð 	0ð 	0ð
˜#ð 
ð 
ð 
ð 
ð 
ð 
r(   r¸   c                   ó.   — e Zd ZdZdeddfd„Zdefd„ZdS )ÚLTAnnoa  Actual letter in the text as a Unicode string.

    Note that, while a LTChar object has actual boundaries, LTAnno objects does
    not, as these are "virtual" characters, inserted by a layout analyzer
    according to the relationship between two characters (e.g. a space).
    Útextr!   Nc                 ó   — || _         d S r#   ©Ú_text)r%   rÑ   s     r&   r'   zLTAnno.__init__T  s   € ØˆŒ
ˆ
ˆ
r(   c                 ó   — | j         S r#   rÓ   rM   s    r&   r_   zLTAnno.get_textW  ó
   € ØŒzÐr(   )r4   r5   r6   rP   rR   r'   r_   r8   r(   r&   rÐ   rÐ   L  s[   € € € € € ðð ð˜Sð  Tð ð ð ð ð˜#ð ð ð ð ð ð r(   rÐ   c                   óz   — e Zd ZdZdededededededed	eeed
z  ef         z  de	de
dd
fd„Zdefd„Zdefd„Zd
S )ÚLTCharz.Actual letter in the text as a Unicode string.ÚmatrixÚfontÚfontsizeÚscalingÚriserÑ   Ú	textwidthÚtextdispNÚncsÚgraphicstater!   c                 ó  — t                                | ¦  «         || _        || _        |j        | _        |	| _        |
| _        ||z  |z  | _        |                     ¦   «         rPt          |t          ¦  «        sJ ‚|\  }}|€|dz  n||z  dz  }d|z
  |z  dz  }| ||z   | j        z   | |z   ||z   f}n+|                     ¦   «         |z  }d||z   | j        ||z   |z   f}| j        \  }}}}}}||z  |z  dk    o||z  dk    | _        t          | j        |¦  «        \  }}}}||k     r||}}||k     r||}}t                               | ||||f¦  «         |                     ¦   «         r| j        | _        d S | j        | _        d S )Nr;   gü©ñÒMbP?iè  r   )rY   r'   rÔ   rÙ   Úfontnamerà   rá   ÚadvÚis_verticalr.   r­   Úget_descentÚuprightr   rd   r{   Úsizer|   )r%   rÙ   rÚ   rÛ   rÜ   rÝ   rÑ   rÞ   rß   rà   rá   ÚvxÚvyre   ÚdescentÚaÚbÚcÚdÚ_eÚ_frw   rx   ry   rz   s                            r&   r'   zLTChar.__init__^  sÊ  € õ 	�Š˜ÑÔÐØˆŒ
ØˆŒØœˆŒØˆŒØ(ˆÔØ˜xÑ'¨'Ñ1ˆŒà×ÒÑÔð 
	Lå˜h­Ñ.Ô.Ð.Ð.Ð.Ø‰HˆR�Ø#% :�˜C‘�°2¸±=À5Ñ3HˆBØ˜‘)˜xÑ'¨%Ñ/ˆBØ�C˜˜d™ T¤XÑ-°¨s°X©~¸rÀD¹yÐIˆDˆDð ×&Ò&Ñ(Ô(¨8Ñ3ˆGØ�w ‘~ t¤x°¸4±À(Ñ1JÐKˆDØ#œ{ÑˆˆAˆq�!�R˜Ø˜1‘u˜w‘¨Ò*Ð9¨q°1©u¸ªzˆŒÝ,¨T¬[¸$Ñ?Ô?ÑˆˆR��RØ�Š7ˆ7Ø˜B�ˆRØ�Š7ˆ7Ø˜B�ˆRÝ×Ò˜T B¨¨B°Ð#3Ñ4Ô4Ð4Ø×ÒÑÔð 	$Øœ
ˆDŒIˆIˆIàœˆDŒIˆIˆIr(   c                 óÀ   — d| j         j        › dt          | j        ¦  «        › dt	          | j        ¦  «        › d| j        ›d| j        › d|                      ¦   «         ›d�S )Nr\   r]   ú matrix=z font=z adv=z text=rL   )	r^   r4   r   re   r   rÙ   rã   rä   r_   rM   s    r&   rN   zLTChar.__repr__‹  s†   € ð)�”Ô'ð )ð )­(°4´9Ñ*=Ô*=ð )ð )Ý  ¤Ñ-Ô-ð)ð )à”Mð)ð )ð ”8ð)ð )ð —M’M‘O”Oð	)ð )ð )ð	
r(   c                 ó   — | j         S r#   rÓ   rM   s    r&   r_   zLTChar.get_text”  rÖ   r(   )r4   r5   r6   rP   r   r   rI   rR   r­   r
   r   r'   rN   r_   r8   r(   r&   rØ   rØ   [  sä   € € € € € Ø8Ð8ð+$àð+$ð ð+$ð ð	+$ð
 ð+$ð ð+$ð ð+$ð ð+$ð ˜% ¨¡¨eÐ 3Ô4Ñ4ð+$ð ð+$ð &ð+$ð 
ð+$ð +$ð +$ð +$ðZ
˜#ð 
ð 
ð 
ð 
ð˜#ð ð ð ð ð ð r(   rØ   ÚLTItemT)Úboundc                   ó‚   — e Zd ZdZdeddfd„Zdee         fd„Zde	fd„Z
deddfd	„Zd
ee         ddfd„Zdeddfd„ZdS )ÚLTContainerz(Object that can be extended and analyzedre   r!   Nc                 óJ   — t                                | |¦  «         g | _        d S r#   )rd   r'   Ú_objsrh   s     r&   r'   zLTContainer.__init__ž  s#   € Ý×Ò˜T 4Ñ(Ô(Ð(Ø$&ˆŒ
ˆ
ˆ
r(   c                 ó*   — t          | j        ¦  «        S r#   )Úiterrú   rM   s    r&   Ú__iter__zLTContainer.__iter__¢  s   € Ý�D”JÑÔÐr(   c                 ó*   — t          | j        ¦  «        S r#   )Úlenrú   rM   s    r&   Ú__len__zLTContainer.__len__¥  s   € Ý�4”:‰ŒÐr(   r)   c                 ó:   — | j                              |¦  «         d S r#   )rú   Úappendr‚   s     r&   ÚaddzLTContainer.add¨  s   € ØŒ
×Ò˜#ÑÔÐÐÐr(   Úobjsc                 ó:   — |D ]}|                       |¦  «         Œd S r#   )r  )r%   r  r)   s      r&   ÚextendzLTContainer.extend«  s,   € Øð 	ð 	ˆCØ�HŠH�S‰MŒMˆMˆMð	ð 	r(   rT   c                 óD   — | j         D ]}|                     |¦  «         Œd S r#   )rú   rW   ©r%   rT   r)   s      r&   rW   zLTContainer.analyze¯  s2   € Ø”:ð 	"ð 	"ˆCØ�KŠK˜Ñ!Ô!Ð!Ð!ð	"ð 	"r(   )r4   r5   r6   rP   r   r'   r   rõ   rý   r7   r   r  r   r  r:   rW   r8   r(   r&   rø   rø   ›  sâ   € € € € € Ø2Ð2ð'˜Tð ' dð 'ð 'ð 'ð 'ð ˜( 7Ô+ð  ð  ð  ð  ð˜ð ð ð ð ð�wð  4ð ð ð ð ð˜8 GÔ,ð °ð ð ð ð ð" ð "¨Tð "ð "ð "ð "ð "ð "r(   rø   c                   ó&   — e Zd Zdd„Zdeddfd„ZdS )ÚLTExpandableContainerr!   Nc                 ót   — t                                | t          
 t          
 t           t           f¦  «         d S r#   )rø   r'   r   rM   s    r&   r'   zLTExpandableContainer.__init__µ  s/   € Ý×Ò˜T¥S D­3¨$µ°µs°dÐ#;Ñ<Ô<Ð<Ð<Ð<r(   r)   c           	      óT  — t                                | t          t          |¦  «        ¦  «         |                      t          | j        |j        ¦  «        t          | j        |j        ¦  «        t          | j	        |j	        ¦  «        t          | j
        |j
        ¦  «        f¦  «         d S r#   )rø   r  r	   rõ   rg   r‡   rw   rx   Úmaxry   rz   r‚   s     r&   r  zLTExpandableContainer.addº  s‰   € Ý�Š˜�d¥7¨CÑ0Ô0Ñ1Ô1Ð1Ø�Šå�D”G˜SœVÑ$Ô$Ý�D”G˜SœVÑ$Ô$Ý�D”G˜SœVÑ$Ô$Ý�D”G˜SœVÑ$Ô$ð	ñ	
ô 	
ð 	
ð 	
ð 	
r(   rO   )r4   r5   r6   r'   rd   r  r8   r(   r&   r
  r
  ´  sJ   € € € € € ð=ð =ð =ð =ð
	
�{ð 	
 tð 	
ð 	
ð 	
ð 	
ð 	
ð 	
r(   r
  c                   ó"   — e Zd Zdd„Zdefd„ZdS )ÚLTTextContainerr!   Nc                 ón   — t                                | ¦  «         t                               | ¦  «         d S r#   )rY   r'   r
  rM   s    r&   r'   zLTTextContainer.__init__Ç  s.   € Ý�Š˜ÑÔÐÝ×&Ò& tÑ,Ô,Ð,Ð,Ð,r(   c                 ó@   — d                      d„ | D ¦   «         ¦  «        S )NÚ c              3   óŽ   K  — | ]@}t          |t          ¦  «        ¯t          t          |¦  «                             ¦   «         V — ŒAd S r#   )r.   rY   r	   r_   )r¦   r)   s     r&   r¨   z+LTTextContainer.get_text.<locals>.<genexpr>Ì  s[   è è € ð 
ð 
Ø-0½JÀsÍFÑ<SÔ<Sð
Ý•˜ÑÔ×&Ò&Ñ(Ô(ð
ð 
ð 
ð 
ð 
ð 
r(   )r©   rM   s    r&   r_   zLTTextContainer.get_textË  s4   € Ø�wŠwð 
ð 
Ø48ð
ñ 
ô 
ñ 
ô 
ð 	
r(   rO   )r4   r5   r6   r'   rR   r_   r8   r(   r&   r  r  Æ  sC   € € € € € ð-ð -ð -ð -ð
˜#ð 
ð 
ð 
ð 
ð 
ð 
r(   r  c                   ó„   ‡ — e Zd ZdZdeddfˆ fd„Zdefd„Zdeddfd„Z	d	e
e         d
eded          fd„Zdefˆ fd„Zˆ xZS )Ú
LTTextLinez¶Contains a list of LTChar objects that represent a single text line.

    The characters are aligned either horizontally or vertically, depending on
    the text's writing mode.
    rA   r!   Nc                 óV   •— t          ¦   «                              ¦   «          || _        d S r#   )Úsuperr'   rA   )r%   rA   r^   s     €r&   r'   zLTTextLine.__init__Û  s'   ø€ Ý‰Œ×ÒÑÔÐØ&ˆÔÐÐr(   c                 óv   — d| j         j        › dt          | j        ¦  «        › d|                      ¦   «         ›d�S r[   )r^   r4   r   re   r_   rM   s    r&   rN   zLTTextLine.__repr__ß  s:   € ØW�4”>Ô*ÐWÐW­X°d´iÑ-@Ô-@ÐWÐWÀ4Ç=Â=Á?Ä?ÐWÐWÐWÐWr(   rT   c                 ó”   — | j         D ]}|                     |¦  «         Œt                               | t	          d¦  «        ¦  «         d S )Nú
)rú   rW   rø   r  rÐ   r  s      r&   rW   zLTTextLine.analyzeâ  sH   € Ø”:ð 	"ð 	"ˆCØ�KŠK˜Ñ!Ô!Ð!Ð!Ý�Š˜�f T™lœlÑ+Ô+Ð+Ð+Ð+r(   ÚplaneÚratioc                 ó   — t           ‚r#   ra   )r%   r  r  s      r&   Úfind_neighborszLTTextLine.find_neighborsç  s
   € õ
 "Ð!r(   c                 ó�   •— t          ¦   «                              ¦   «         p%|                      ¦   «                              ¦   «         S r#   )r  r   r_   Úisspace)r%   r^   s    €r&   r   zLTTextLine.is_emptyî  s2   ø€ Ý‰wŒw×ÒÑ!Ô!Ð> T§]¢]¡_¤_×%<Ò%<Ñ%>Ô%>Ð>r(   )r4   r5   r6   rP   rI   r'   rR   rN   r:   rW   r   r   r¬   r  rQ   r   Ú__classcell__©r^   s   @r&   r  r  Ô  sö   ø€ € € € € ðð ð' Eð '¨dð 'ð 'ð 'ð 'ð 'ð 'ðX˜#ð Xð Xð Xð Xð, ð ,¨Tð ,ð ,ð ,ð ,ð
"à�\Ô"ð"ð ð"ð 
ˆlÔ	ð	"ð "ð "ð "ð?˜$ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?r(   r  c                   ó¾   ‡ — e Zd Zdeddfd„Zdeddfˆ fd„Zdee         dede	e
         fd	„Zddededefd„Zddededefd„Z	 ddededefd„Zddededefd„Zˆ xZS )ÚLTTextLineHorizontalrA   r!   Nc                 óV   — t                                | |¦  «         t          
 | _        d S r#   )r  r'   r   Ú_x1©r%   rA   s     r&   r'   zLTTextLineHorizontal.__init__ó  ó%   € Ý×Ò˜D +Ñ.Ô.Ð.Ý˜$ˆŒˆˆr(   r)   c                 óT  •— t          |t          ¦  «        rd| j        r]| j        t          |j        |j        ¦  «        z  }| j        |j        |z
  k     r(t           	                    | t          d¦  «        ¦  «         |j        | _        t          ¦   «          	                    |¦  «         d S ©Nr]   )r.   rØ   rA   r  r{   r|   r&  rw   rø   r  rÐ   ry   r  ©r%   r)   Úmarginr^   s      €r&   r  zLTTextLineHorizontal.addù  sŒ   ø€ Ý�c�6Ñ"Ô"ð 	3 tÔ'7ð 	3ØÔ%­¨C¬I°s´zÑ(BÔ(BÑBˆFØŒx˜#œ& 6™/Ò)Ð)Ý—’ ¥f¨S¡k¤kÑ2Ô2Ð2Ø”6ˆŒÝ‰Œ�Š�CÑÔÐÐÐr(   r  r  c                 óž   ‡ ‡— |‰ j         z  Š|                     ‰ j        ‰ j        ‰z
  ‰ j        ‰ j        ‰z   f¦  «        }ˆˆ fd„|D ¦   «         S )aB  Finds neighboring LTTextLineHorizontals in the plane.

        Returns a list of other LTTestLineHorizontals in the plane which are
        close to self. "Close" can be controlled by ratio. The returned objects
        will be the same height as self, and also either left-, right-, or
        centrally-aligned.
        c                 óö   •— g | ]u}t          |t          ¦  «        ¯‰                     |‰¬ ¦  «        ¯.‰                     |‰¬ ¦  «        s.‰                     |‰¬ ¦  «        s‰                     |‰¬ ¦  «        ¯s|‘ŒvS ©)Ú	tolerance)r.   r$  Ú_is_same_height_asÚ_is_left_aligned_withÚ_is_right_aligned_withÚ_is_centrally_aligned_with©r¦   r)   rï   r%   s     €€r&   ú
<listcomp>z7LTTextLineHorizontal.find_neighbors.<locals>.<listcomp>  s®   ø€ ð 
ð 
ð 
àå˜3Õ 4Ñ5Ô5ð	
ð
 ×+Ò+¨C¸1Ð+Ñ=Ô=ð
ð ×.Ò.¨s¸aÐ.Ñ@Ô@ð
ð ×2Ò2°3À!Ð2ÑDÔDð
ð ×6Ò6°sÀaÐ6ÑHÔHð
Øð
ð 
ð 
r(   )r|   Úfindrw   rx   ry   rz   ©r%   r  r  r  rï   s   `   @r&   r  z#LTTextLineHorizontal.find_neighbors  sl   øø€ ð �D”KÑˆØ�zŠz˜4œ7 D¤G¨a¡K°´¸$¼'ÀA¹+ÐFÑGÔGˆð
ð 
ð 
ð 
ð 
àð
ñ 
ô 
ð 	
r(   r   Úotherr0  c                 óB   — t          |j        | j        z
  ¦  «        |k    S )z<Whether the left-hand edge of `other` is within `tolerance`.)rˆ   rw   ©r%   r9  r0  s      r&   r2  z*LTTextLineHorizontal._is_left_aligned_with  ó   € å�5”8˜dœgÑ%Ñ&Ô&¨)Ò3Ð3r(   c                 óB   — t          |j        | j        z
  ¦  «        |k    S )z=Whether the right-hand edge of `other` is within `tolerance`.)rˆ   ry   r;  s      r&   r3  z+LTTextLineHorizontal._is_right_aligned_with!  r<  r(   c                 ón   — t          |j        |j        z   dz  | j        | j        z   dz  z
  ¦  «        |k    S )z?Whether the horizontal center of `other` is within `tolerance`.é   )rˆ   rw   ry   r;  s      r&   r4  z/LTTextLineHorizontal._is_centrally_aligned_with%  ó8   € õ �E”H˜uœxÑ'¨1Ñ,°´¸$¼'Ñ0AÀQÑ/FÑFÑGÔGÈ9ÒTÐTr(   c                 óB   — t          |j        | j        z
  ¦  «        |k    S r#   )rˆ   r|   r;  s      r&   r1  z'LTTextLineHorizontal._is_same_height_as-  s   € Ý�5”< $¤+Ñ-Ñ.Ô.°)Ò;Ð;r(   r3   )r4   r5   r6   rI   r'   rd   r  r   r   r¬   r  r  rQ   r2  r3  r4  r1  r!  r"  s   @r&   r$  r$  ò  su  ø€ € € € € ð Eð ¨dð ð ð ð ð�{ð  tð ð ð ð ð ð ð
à�\Ô"ð
ð ð
ð 
ˆjÔ	ð	
ð 
ð 
ð 
ð84ð 4¨;ð 4À5ð 4ÐQUð 4ð 4ð 4ð 4ð4ð 4¨Kð 4ÀEð 4ÐRVð 4ð 4ð 4ð 4ð ðUð UàðUð ðUð 
ð	Uð Uð Uð Uð<ð <¨ð <Àð <Èdð <ð <ð <ð <ð <ð <ð <ð <r(   r$  c                   ó¼   ‡ — e Zd Zdeddfd„Zdeddfˆ fd„Zdee         dede	e
         fd	„Zddededefd„Zddededefd„Z	 ddededefd„Zdededefd„Zˆ xZS )ÚLTTextLineVerticalrA   r!   Nc                 óV   — t                                | |¦  «         t           | _        d S r#   )r  r'   r   Ú_y0r'  s     r&   r'   zLTTextLineVertical.__init__2  r(  r(   r)   c                 óT  •— t          |t          ¦  «        rd| j        r]| j        t          |j        |j        ¦  «        z  }|j        |z   | j        k     r(t           	                    | t          d¦  «        ¦  «         |j        | _        t          ¦   «          	                    |¦  «         d S r*  )r.   rØ   rA   r  r{   r|   rz   rE  rø   r  rÐ   rx   r  r+  s      €r&   r  zLTTextLineVertical.add8  sŒ   ø€ Ý�c�6Ñ"Ô"ð 	3 tÔ'7ð 	3ØÔ%­¨C¬I°s´zÑ(BÔ(BÑBˆFØŒv˜‰ ¤Ò)Ð)Ý—’ ¥f¨S¡k¤kÑ2Ô2Ð2Ø”6ˆŒÝ‰Œ�Š�CÑÔÐÐÐr(   r  r  c                 óž   ‡ ‡— |‰ j         z  Š|                     ‰ j        ‰z
  ‰ j        ‰ j        ‰z   ‰ j        f¦  «        }ˆˆ fd„|D ¦   «         S )a>  Finds neighboring LTTextLineVerticals in the plane.

        Returns a list of other LTTextLineVerticals in the plane which are
        close to self. "Close" can be controlled by ratio. The returned objects
        will be the same width as self, and also either upper-, lower-, or
        centrally-aligned.
        c                 óö   •— g | ]u}t          |t          ¦  «        ¯‰                     |‰¬ ¦  «        ¯.‰                     |‰¬ ¦  «        s.‰                     |‰¬ ¦  «        s‰                     |‰¬ ¦  «        ¯s|‘ŒvS r/  )r.   rC  Ú_is_same_width_asÚ_is_lower_aligned_withÚ_is_upper_aligned_withr4  r5  s     €€r&   r6  z5LTTextLineVertical.find_neighbors.<locals>.<listcomp>N  s®   ø€ ð 
ð 
ð 
àå˜3Õ 2Ñ3Ô3ð	
ð
 ×*Ò*¨3¸!Ð*Ñ<Ô<ð
ð ×/Ò/°¸qÐ/ÑAÔAð
ð ×2Ò2°3À!Ð2ÑDÔDð
ð ×6Ò6°sÀaÐ6ÑHÔHð
Øð
ð 
ð 
r(   )r{   r7  rw   rx   ry   rz   r8  s   `   @r&   r  z!LTTextLineVertical.find_neighbors@  sl   øø€ ð �D”JÑˆØ�zŠz˜4œ7 Q™;¨¬°´¸1±¸d¼gÐFÑGÔGˆð
ð 
ð 
ð 
ð 
àð
ñ 
ô 
ð 	
r(   r   r9  r0  c                 óB   — t          |j        | j        z
  ¦  «        |k    S )z8Whether the lower edge of `other` is within `tolerance`.)rˆ   rx   r;  s      r&   rJ  z)LTTextLineVertical._is_lower_aligned_with\  r<  r(   c                 óB   — t          |j        | j        z
  ¦  «        |k    S )z8Whether the upper edge of `other` is within `tolerance`.)rˆ   rz   r;  s      r&   rK  z)LTTextLineVertical._is_upper_aligned_with`  r<  r(   c                 ón   — t          |j        |j        z   dz  | j        | j        z   dz  z
  ¦  «        |k    S )z=Whether the vertical center of `other` is within `tolerance`.r?  )rˆ   rx   rz   r;  s      r&   r4  z-LTTextLineVertical._is_centrally_aligned_withd  r@  r(   c                 óB   — t          |j        | j        z
  ¦  «        |k    S r#   )rˆ   r{   r;  s      r&   rI  z$LTTextLineVertical._is_same_width_asl  s   € Ý�5”; ¤Ñ+Ñ,Ô,°	Ò9Ð9r(   r3   )r4   r5   r6   rI   r'   rd   r  r   r   r¬   r  r  rQ   rJ  rK  r4  rI  r!  r"  s   @r&   rC  rC  1  sp  ø€ € € € € ð Eð ¨dð ð ð ð ð�{ð  tð ð ð ð ð ð ð
à�\Ô"ð
ð ð
ð 
ˆjÔ	ð	
ð 
ð 
ð 
ð84ð 4¨Kð 4ÀEð 4ÐRVð 4ð 4ð 4ð 4ð4ð 4¨Kð 4ÀEð 4ÐRVð 4ð 4ð 4ð 4ð ðUð UàðUð ðUð 
ð	Uð Uð Uð Uð: {ð :¸uð :Èð :ð :ð :ð :ð :ð :ð :ð :r(   rC  c                   ó2   — e Zd ZdZdd„Zdefd„Zdefd„ZdS )r/   zìRepresents a group of text chunks in a rectangular area.

    Note that this box is created by geometric analysis and does not
    necessarily represents a logical boundary of the text. It contains a list
    of LTTextLine objects.
    r!   Nc                 óH   — t                                | ¦  «         d| _        d S )NrH   )r  r'   r    rM   s    r&   r'   zLTTextBox.__init__x  s!   € Ý× Ò  Ñ&Ô&Ð&ØˆŒ
ˆ
ˆ
r(   c           	      ó†   — d| j         j        › d| j        › dt          | j        ¦  «        › d|                      ¦   «         ›d�	S rÌ   )r^   r4   r    r   re   r_   rM   s    r&   rN   zLTTextBox.__repr__|  s\   € ð:�”Ô'ð :ð :¨$¬*ð :ð :Ý˜œ	Ñ"Ô"ð:ð :Ø%)§]¢]¡_¤_ð:ð :ð :ð	
r(   c                 ó   — t           ‚r#   ra   rM   s    r&   Úget_writing_modezLTTextBox.get_writing_mode‚  s   € Ý!Ð!r(   rO   )r4   r5   r6   rP   r'   rR   rN   rT  r8   r(   r&   r/   r/   p  sh   € € € € € ðð ðð ð ð ð
˜#ð 
ð 
ð 
ð 
ð" #ð "ð "ð "ð "ð "ð "r(   r/   c                   ó4   ‡ — e Zd Zdeddfˆ fd„Zdefd„Zˆ xZS )ÚLTTextBoxHorizontalrT   r!   Nc                 ó‚   •— t          ¦   «                              |¦  «         | j                             d„ ¬¦  «         d S )Nc                 ó   — | j          S r#   )rz   ©r)   s    r&   ú<lambda>z-LTTextBoxHorizontal.analyze.<locals>.<lambda>‰  ó
   € ¨¬¨€ r(   ©Úkey©r  rW   rú   Úsort©r%   rT   r^   s     €r&   rW   zLTTextBoxHorizontal.analyze‡  ó9   ø€ Ý‰Œ�Š˜Ñ!Ô!Ð!ØŒ
�ŠÐ/Ð/ˆÑ0Ô0Ð0Ð0Ð0r(   c                 ó   — dS )Nzlr-tbr8   rM   s    r&   rT  z$LTTextBoxHorizontal.get_writing_mode‹  ó   € Øˆwr(   ©r4   r5   r6   r:   rW   rR   rT  r!  r"  s   @r&   rV  rV  †  óf   ø€ € € € € ð1 ð 1¨Tð 1ð 1ð 1ð 1ð 1ð 1ð #ð ð ð ð ð ð ð ð r(   rV  c                   ó4   ‡ — e Zd Zdeddfˆ fd„Zdefd„Zˆ xZS )ÚLTTextBoxVerticalrT   r!   Nc                 ó‚   •— t          ¦   «                              |¦  «         | j                             d„ ¬¦  «         d S )Nc                 ó   — | j          S r#   )ry   rY  s    r&   rZ  z+LTTextBoxVertical.analyze.<locals>.<lambda>’  r[  r(   r\  r^  r`  s     €r&   rW   zLTTextBoxVertical.analyze�  ra  r(   c                 ó   — dS )Nztb-rlr8   rM   s    r&   rT  z"LTTextBoxVertical.get_writing_mode”  rc  r(   rd  r"  s   @r&   rg  rg  �  re  r(   rg  r0   c                   ó4   ‡ — e Zd Zdee         ddfˆ fd„Zˆ xZS )r0   r  r!   Nc                 ór   •— t          ¦   «                              ¦   «          |                      |¦  «         d S r#   )r  r'   r  )r%   r  r^   s     €r&   r'   zLTTextGroup.__init__œ  s1   ø€ Ý‰Œ×ÒÑÔÐØ�Š�DÑÔÐÐÐr(   )r4   r5   r6   r   ÚTextGroupElementr'   r!  r"  s   @r&   r0   r0   ›  sQ   ø€ € € € € ð˜XÐ&6Ô7ð ¸Dð ð ð ð ð ð ð ð ð ð r(   c                   ó(   ‡ — e Zd Zdeddfˆ fd„Zˆ xZS )ÚLTTextGroupLRTBrT   r!   Nc                 ó¨   •‡— t          ¦   «                              |¦  «         |j        €J ‚|j        Š| j                             ˆfd„¬¦  «         d S )Nc                 óJ   •— d‰z
  | j         z  d‰z   | j        | j        z   z  z
  S r,   )rw   rx   rz   ©r)   rB   s    €r&   rZ  z)LTTextGroupLRTB.analyze.<locals>.<lambda>¨  s+   ø€ ˜Q ™^¨s¬vÑ5Ø�:‰~ #¤&¨3¬6¡/Ñ2ñ3€ r(   r\  ©r  rW   rB   rú   r_  ©r%   rT   rB   r^   s     @€r&   rW   zLTTextGroupLRTB.analyze¢  sl   øø€ Ý‰Œ�Š˜Ñ!Ô!Ð!ØÔ"Ð.Ð.Ð.ØÔ(ˆ
àŒ
�Šð3ð 3ð 3ð 3ð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r(   ©r4   r5   r6   r:   rW   r!  r"  s   @r&   ro  ro  ¡  óK   ø€ € € € € ð
 ð 
¨Tð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r(   ro  c                   ó(   ‡ — e Zd Zdeddfˆ fd„Zˆ xZS )ÚLTTextGroupTBRLrT   r!   Nc                 ó¨   •‡— t          ¦   «                              |¦  «         |j        €J ‚|j        Š| j                             ˆfd„¬¦  «         d S )Nc                 óL   •— d‰z    | j         | j        z   z  d‰z
  | j        z  z
  S r,   )rw   ry   rz   rr  s    €r&   rZ  z)LTTextGroupTBRL.analyze.<locals>.<lambda>´  s.   ø€ ˜a *™nÐ-°´¸#¼&±ÑAØ�:‰~ ¤Ñ'ñ(€ r(   r\  rs  rt  s     @€r&   rW   zLTTextGroupTBRL.analyze®  sl   øø€ Ý‰Œ�Š˜Ñ!Ô!Ð!ØÔ"Ð.Ð.Ð.ØÔ(ˆ
àŒ
�Šð(ð (ð (ð (ð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r(   ru  r"  s   @r&   rx  rx  ­  rv  r(   rx  c                   ó²   — e Zd Zdeddfd„Zdedee         dee	         fd„Z
dedee	         dee         fd	„Zded
ee         dee         fd„Zdeddfd„ZdS )ÚLTLayoutContainerre   r!   Nc                 óJ   — t                                | |¦  «         d | _        d S r#   )rø   r'   Úgroupsrh   s     r&   r'   zLTLayoutContainer.__init__º  s#   € Ý×Ò˜T 4Ñ(Ô(Ð(Ø04ˆŒˆˆr(   rT   r  c              #   ó¾  K  — d }d }|D �]}|��|                      |¦  «        oqt          |j        |j        ¦  «        |j        z  |                     |¦  «        k     o8|                     |¦  «        t          |j        |j        ¦  «        |j        z  k     }|j	        o†| 
                    |¦  «        oqt          |j        |j        ¦  «        |j        z  |                     |¦  «        k     o8|                     |¦  «        t          |j        |j        ¦  «        |j        z  k     }|rt          |t          ¦  «        s|r+t          |t          ¦  «        r|                     |¦  «         n¾|�|V — d }nµ|rA|s?t          |j        ¦  «        }|                     |¦  «         |                     |¦  «         nr|rA|s?t          |j        ¦  «        }|                     |¦  «         |                     |¦  «         n/t          |j        ¦  «        }|                     |¦  «         |V — d }|}�Œ!|€-t          |j        ¦  «        }|€J ‚|                     |¦  «         |V — d S r#   )r�   r‡   r|   r>   r”   r‰   r  r{   r?   rC   rƒ   rŒ   r’   r.   r$  rC  r  rA   )r%   rT   r  Úobj0ÚlineÚobj1ÚhalignÚvaligns           r&   Úgroup_objectszLTLayoutContainer.group_objects¿  s„  è è € ð
 ˆØ"&ˆØð ?	ñ ?	ˆDØÑð ×$Ò$ TÑ*Ô*ð IÝ˜DœK¨¬Ñ5Ô5¸Ô8MÑMØ—m’m DÑ)Ô)ò*ðIð Ÿš tÑ,Ô,Ý˜$œ* d¤jÑ1Ô1°HÔ4HÑHòIð	 ð. Ô,ð KØ×(Ò(¨Ñ.Ô.ðKå˜DœJ¨¬
Ñ3Ô3°hÔ6KÑKØ—m’m DÑ)Ô)ò*ðKð Ÿš tÑ,Ô,Ý˜$œ+ t¤{Ñ3Ô3°hÔ6JÑJòKð ð ð  �z¨$Õ0DÑEÔEð  Øð Ý)¨$Õ0BÑCÔCð ð —H’H˜T‘N”N�N�NØÐ%Ø�J�J�JØ�D�DØð   Fð  Ý-¨hÔ.BÑCÔC�DØ—H’H˜T‘N”N�NØ—H’H˜T‘N”N�N�NØð   Fð  Ý/°Ô0DÑEÔE�DØ—H’H˜T‘N”N�NØ—H’H˜T‘N”N�N�Nå/°Ô0DÑEÔE�DØ—H’H˜T‘N”N�NØ�J�J�JØ�DØˆD‰DØˆ<Ý'¨Ô(<Ñ=Ô=ˆDØÐ#Ð#Ð#Ø�HŠH�T‰NŒNˆNØˆ
ˆ
ˆ
ˆ
ˆ
r(   Úlinesc              #   ó’  K  — t          | j        ¦  «        }|                     |¦  «         i }|D ]Ä}|                     ||j        ¦  «        }|g}|D ]C}|                     |¦  «         ||v r(|                     |                     |¦  «        ¦  «         ŒDt          |t          ¦  «        rt          ¦   «         }	nt          ¦   «         }	t          |¦  «        D ]}
|	                     |
¦  «         |	||
<   ŒŒÅt          ¦   «         }|D ]A}||vrŒ||         }	|	|v rŒ|                     |	¦  «         |	                     ¦   «         s|	V — ŒBdS )z$Group neighboring lines to textboxesN)r   re   r  r  r@   r  Úpopr.   r$  rV  rg  r   r  Úsetr   )r%   rT   r†  r  Úboxesr�  Ú	neighborsÚmembersr‚  Úboxr)   Údones               r&   Úgroup_textlinesz!LTLayoutContainer.group_textlines  sr  è è € õ $)¨¬Ñ#3Ô#3ˆØ�Š�UÑÔÐØ-/ˆØð 	!ð 	!ˆDØ×+Ò+¨E°8Ô3GÑHÔHˆIØ�fˆGØ!ð 4ð 4�Ø—’˜tÑ$Ô$Ð$Ø˜5�=�=Ø—N’N 5§9¢9¨T¡?¤?Ñ3Ô3Ð3øÝ˜$Õ 4Ñ5Ô5ð *Ý!4Ñ!6Ô!6��å'Ñ)Ô)�Ý˜G‘}”}ð !ð !�Ø—’˜‘”�Ø ��c‘
�
ð!õ ‰uŒuˆØð 	ð 	ˆDØ˜5Ð Ð ØØ˜”+ˆCØ�dˆ{ˆ{ØØ�HŠH�S‰MŒMˆMØ—<’<‘>”>ð Ø�	�	�	øð	ð 	r(   rŠ  c           
      óB  ‡— t           t          t          f         }t          | j        ¦  «        Šdt
          dt
          dt          fd„}d|d|dt          |         fˆfd„}g }t          t          |¦  «        ¦  «        D ]t}||         }t          |dz   t          |¦  «        ¦  «        D ]I}	||	         }
| 
                    d |||
¦  «        t          |¦  «        t          |
¦  «        ||
f¦  «         ŒJŒut          j        |¦  «         ‰                     |¦  «         t          ¦   «         }t          |¦  «        dk    �rXt          j        |¦  «        \  }}}}}}||v�r$||v�r|s( |||¦  «        rt          j        |d	|||||f¦  «         Œct#          |t$          t&          f¦  «        st#          |t$          t&          f¦  «        rt'          ||g¦  «        }nt)          ||g¦  «        }‰                     |¦  «         ‰                     |¦  «         |                     ||g¦  «         ‰D ]A}t          j        |d |||¦  «        t          |¦  «        t          |¦  «        ||f¦  «         ŒB‰                     |¦  «         t          |¦  «        dk    �°Xd
„ ‰D ¦   «         S )ax  Group textboxes hierarchically.

        Get pair-wise distances, via dist func defined below, and then merge
        from the closest textbox pair. Once obj1 and obj2 are merged /
        grouped, the resulting group is considered as a new object, and its
        distances to other objects & groups are added to the process queue.

        For performance reason, pair-wise distances and object pair info are
        maintained in a heap of (idx, dist, id(obj1), id(obj2), obj1, obj2)
        tuples. It ensures quick access to the smallest element. Note that
        since comparison operators, e.g., __lt__, are disabled for
        LTComponent, id(obj) has to appear before obj in element tuples.

        :param laparams: LAParams object.
        :param boxes: All textbox objects to be grouped.
        :return: a list that has only one element, the final top level group.
        r‚  Úobj2r!   c                 ó(  — t          | j        |j        ¦  «        }t          | j        |j        ¦  «        }t          | j        |j        ¦  «        }t          | j        |j        ¦  «        }||z
  ||z
  z  | j        | j        z  z
  |j        |j        z  z
  S )aÄ  A distance function between two TextBoxes.

            Consider the bounding rectangle for obj1 and obj2.
            Return its area less the areas of obj1 and obj2,
            shown as 'www' below. This value may be negative.
                    +------+..........+ (x1, y1)
                    | obj1 |wwwwwwwwww:
                    +------+www+------+
                    :wwwwwwwwww| obj2 |
            (x0, y0) +..........+------+
            )r‡   rw   rx   r  ry   rz   r{   r|   )r‚  r‘  rw   rx   ry   rz   s         r&   Údistz/LTLayoutContainer.group_textboxes.<locals>.distG  s‡   € õ �T”W˜dœgÑ&Ô&ˆBÝ�T”W˜dœgÑ&Ô&ˆBÝ�T”W˜dœgÑ&Ô&ˆBÝ�T”W˜dœgÑ&Ô&ˆBà�b‘˜R "™WÑ%Ø”*˜tœ{Ñ*ñ+à”*˜tœ{Ñ*ñ+ðr(   c                 óN  •— t          | j        |j        ¦  «        }t          | j        |j        ¦  «        }t          | j        |j        ¦  «        }t          | j        |j        ¦  «        }t          ‰                     ||||f¦  «        ¦  «        }|                     | |f¦  «        S )z8Check if there's any other object between obj1 and obj2.)	r‡   rw   rx   r  ry   rz   r‰  r7  Ú
difference)r‚  r‘  rw   rx   ry   rz   r  r  s          €r&   Úisanyz0LTLayoutContainer.group_textboxes.<locals>.isany]  s‡   ø€ å�T”W˜dœgÑ&Ô&ˆBÝ�T”W˜dœgÑ&Ô&ˆBÝ�T”W˜dœgÑ&Ô&ˆBÝ�T”W˜dœgÑ&Ô&ˆBÝ�u—z’z 2 r¨2¨rÐ"2Ñ3Ô3Ñ4Ô4ˆDØ—?’? D¨$ <Ñ0Ô0Ð0r(   r-   Fr   Tc                 ó8   — g | ]}t          t          |¦  «        ‘ŒS r8   )r	   r0   )r¦   Úgs     r&   r6  z5LTLayoutContainer.group_textboxes.<locals>.<listcomp>‰  s"   € Ð4Ð4Ð4¨••[ !Ñ$Ô$Ð4Ð4Ð4r(   )r   r/   r0   r   re   rd   rI   r‰  Úrangerÿ   r  ÚidÚheapqÚheapifyr  ÚheappopÚheappushr.   rg  rx  ro  ÚremoveÚupdater  )r%   rT   rŠ  ÚElementTr“  r–  ÚdistsÚiÚbox1ÚjÚbox2rŽ  Ú
skip_isanyrï   Úid1Úid2r‚  r‘  Úgroupr9  r  s                       @r&   Úgroup_textboxesz!LTLayoutContainer.group_textboxes.  sî  ø€ õ, �¥KÐ/Ô0ˆÝ!& t¤yÑ!1Ô!1ˆð	•{ð 	­+ð 	½%ð 	ð 	ð 	ð 	ð,	1˜ð 	1¨ð 	1µS¸´]ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð IKˆÝ•s˜5‘z”zÑ"Ô"ð 	Xð 	XˆAØ˜”8ˆDÝ˜1˜q™5¥# e¡*¤*Ñ-Ô-ð Xð X�Ø˜Q”x�Ø—’˜e T T¨$°Ñ%5Ô%5µr¸$±x´xÅÀDÁÄÈ4ÐQUÐVÑWÔWÐWÐWðXõ 	Œ�eÑÔÐà�Š�UÑÔÐÝ‰uŒuˆÝ�%‰jŒj˜1Šn‰nÝ49´MÀ%Ñ4HÔ4HÑ1ˆZ˜˜C  d¨Dà˜4�‘ c° o¡oØ!ð  e e¨D°$Ñ&7Ô&7ð Ý”N 5¨4°°C¸¸dÀDÐ*IÑJÔJÐJØÝ˜dÕ%6½Ð$HÑIÔIð :ÍZØÝ&­Ð8ñNô Nð :õ *9¸$À¸Ñ)FÔ)F�E�Eå+¨T°4¨LÑ9Ô9�EØ—’˜TÑ"Ô"Ð"Ø—’˜TÑ"Ô"Ð"Ø—’˜S #˜JÑ'Ô'Ð'à"ð ð �EÝ”NØØ   U¨EÑ 2Ô 2µB°u±I´I½rÀ%¹y¼yÈ%ÐQVÐWñô ð ð ð —	’	˜%Ñ Ô Ð õ/ �%‰jŒj˜1Šn‰nð2 5Ð4¨eÐ4Ñ4Ô4Ð4r(   c                 ó�  — t          d„ | ¦  «        \  }}|D ]}|                     |¦  «         Œ|sd S t          |                      ||¦  «        ¦  «        }t          d„ |¦  «        \  }}|D ]}|                     |¦  «         Œt          |                      ||¦  «        ¦  «        }|j        €[|D ]}|                     |¦  «         Œdt          dt          t          t          t          f         fd„}	| 
                    |	¬¦  «         nt|                      ||¦  «        | _        t          ¦   «         }
| j        D ],}|                     |¦  «         |
                     |¦  «         Œ-| 
                    d„ ¬¦  «         t          t          t                    |¦  «        |z   t          t          t                    |¦  «        z   | _        d S )Nc                 ó,   — t          | t          ¦  «        S r#   )r.   rØ   rY  s    r&   rZ  z+LTLayoutContainer.analyze.<locals>.<lambda>Ž  s   € µ:¸cÅ6Ñ3JÔ3J€ r(   c                 ó*   — |                       ¦   «         S r#   )r   rY  s    r&   rZ  z+LTLayoutContainer.analyze.<locals>.<lambda>”  s   € °#·,²,±.´.€ r(   r�  r!   c                 ón   — t          | t          ¦  «        rd| j         | j         fS d| j         | j        fS )Nr   r-   )r.   rg  ry   rx   rw   ©r�  s    r&   Úgetkeyz)LTLayoutContainer.analyze.<locals>.getkeyœ  s=   € Ý˜cÕ#4Ñ5Ô5ð 0Ø ¤˜w¨¬¨Ð0Ð0à ¤˜w¨¬Ð/Ð/r(   r\  c                 ó   — | j         S r#   r$   r°  s    r&   rZ  z+LTLayoutContainer.analyze.<locals>.<lambda>©  s   € ¨3¬9€ r(   )r   rW   r¬   r…  r�  rB   r/   r­   r7   rI   r_  r«  r~  r   r1   r	   rd   rú   )r%   rT   ÚtextobjsÚ	otherobjsr)   Ú	textlinesÚemptiesÚ	textboxesÚtextboxr±  Úassignerrª  s               r&   rW   zLTLayoutContainer.analyze‹  sã  € õ !'Ð'JÐ'JÈDÑ QÔ QÑˆ�9Øð 	"ð 	"ˆCØ�KŠK˜Ñ!Ô!Ð!Ð!Øð 	ØˆFÝ˜×+Ò+¨H°hÑ?Ô?Ñ@Ô@ˆ	Ý%Ð&@Ð&@À)ÑLÔLÑˆ�)Øð 	"ð 	"ˆCØ�KŠK˜Ñ!Ô!Ð!Ð!Ý˜×-Ò-¨h¸	ÑBÔBÑCÔCˆ	ØÔÐ&Ø$ð *ð *�Ø—’ Ñ)Ô)Ð)Ð)ð0�Ið 0­%µµU½EÐ0AÔ*Bð 0ð 0ð 0ð 0ð �NŠN˜vˆNÑ&Ô&Ð&Ð&à×.Ò.¨x¸ÑCÔCˆDŒKÝ$‘”ˆHØœð $ð $�Ø—’˜hÑ'Ô'Ð'Ø—’˜UÑ#Ô#Ð#Ð#Ø�NŠNÐ4Ð4ˆNÑ5Ô5Ð5å••kÔ" IÑ.Ô.Øñå•4�Ô$ gÑ.Ô.ñ/ð 	Œ
ˆ
ˆ
r(   )r4   r5   r6   r   r'   r:   r   rd   r   r  r…  r/   r�  r   r¬   r0   r«  rW   r8   r(   r&   r|  r|  ¹  s  € € € € € ð5˜Tð 5 dð 5ð 5ð 5ð 5ð
KàðKð �{Ô#ðKð 
�*Ô	ð	Kð Kð Kð KðZ àð ð ˜
Ô#ð ð 
�)Ô	ð	 ð  ð  ð  ðD[5àð[5ð ˜	Ô"ð[5ð 
ˆkÔ	ð	[5ð [5ð [5ð [5ðz#
 ð #
¨Tð #
ð #
ð #
ð #
ð #
ð #
r(   r|  c                   óF   — e Zd ZdZdedededdfd„Zdefd„Zd	e	ddfd
„Z
dS )ÚLTFigurezÛRepresents an area used by PDF Form objects.

    PDF Forms can be used to present figures or pictures by embedding yet
    another PDF document within a page. Note that LTFigure objects can appear
    recursively.
    r¹   re   rÙ   r!   Nc                 óž   — || _         || _        |\  }}}}||||z   ||z   f}t          ||¦  «        }t                               | |¦  «         d S r#   )r¹   rÙ   r   r|  r'   )	r%   r¹   re   rÙ   r2   ÚyÚwÚhÚrects	            r&   r'   zLTFigure.__init__¹  s^   € ØˆŒ	ØˆŒØ‰ˆˆAˆq�!Ø�1�a˜!‘e˜Q ™UÐ#ˆÝ  ¨Ñ.Ô.ˆÝ×"Ò" 4¨Ñ.Ô.Ð.Ð.Ð.r(   c           
      ó†   — d| j         j        › d| j        › dt          | j        ¦  «        › dt          | j        ¦  «        › d�	S )Nr\   rÍ   rÎ   ró   rL   )r^   r4   r¹   r   re   r   rÙ   rM   s    r&   rN   zLTFigure.__repr__Á  s^   € ð1�”Ô'ð 1ð 1¨$¬)ð 1ð 1Ý˜œ	Ñ"Ô"ð1ð 1å  ¤Ñ-Ô-ð1ð 1ð 1ð	
r(   rT   c                 óN   — |j         sd S t                               | |¦  «         d S r#   )rD   r|  rW   rV   s     r&   rW   zLTFigure.analyzeÈ  s.   € ØÔ!ð 	ØˆFÝ×!Ò! $¨Ñ1Ô1Ð1Ð1Ð1r(   )r4   r5   r6   rP   rR   r   r   r'   rN   r:   rW   r8   r(   r&   r»  r»  ±  s‹   € € € € € ðð ð/˜Sð /¨ð /°fð /Àð /ð /ð /ð /ð
˜#ð 
ð 
ð 
ð 
ð2 ð 2¨Tð 2ð 2ð 2ð 2ð 2ð 2r(   r»  c            	       ó8   — e Zd ZdZd
dedededdfd„Zdefd	„Z	dS )ÚLTPagez»Represents an entire page.

    Like any other LTLayoutContainer, an LTPage can be iterated to obtain child
    objects like LTTextBox, LTFigure, LTImage, LTRect, LTCurve and LTLine.
    r   Úpageidre   Úrotater!   Nc                 óX   — t                                | |¦  «         || _        || _        d S r#   )r|  r'   rÅ  rÆ  )r%   rÅ  re   rÆ  s       r&   r'   zLTPage.__init__Õ  s*   € Ý×"Ò" 4¨Ñ.Ô.Ð.ØˆŒØˆŒˆˆr(   c           	      ól   — d| j         j        › d| j        ›dt          | j        ¦  «        › d| j        ›d�	S )Nr\   rÍ   rÎ   z rotate=rL   )r^   r4   rÅ  r   re   rÆ  rM   s    r&   rN   zLTPage.__repr__Ú  sV   € ð'�”Ô'ð 'ð '¨$¬+ð 'ð 'Ý˜œ	Ñ"Ô"ð'ð 'à”kð'ð 'ð 'ð	
r(   r3   )
r4   r5   r6   rP   r7   r   rI   r'   rR   rN   r8   r(   r&   rÄ  rÄ  Î  sn   € € € € € ðð ðð ˜sð ¨$ð ¸ð Àdð ð ð ð ð

˜#ð 
ð 
ð 
ð 
ð 
ð 
r(   rÄ  )Er›  ÚloggingÚcollections.abcr   r   r   Útypingr   r   r   r	   Úpdfminer.pdfcolorr
   Úpdfminer.pdfexceptionsr   r   Úpdfminer.pdffontr   Úpdfminer.pdfinterpr   r   Úpdfminer.pdftypesr   Úpdfminer.utilsr   r   r   r   r   r   r   r   r   r   r   r   r   Ú	getLoggerr4   Úloggerr   r:   r*   rY   rd   r—   r¯   rµ   r¸   rÐ   rØ   rõ   rø   r
  r  ÚTextLineElementr  r$  rC  r/   rV  rg  rm  r0   ro  rx  r|  r»  rÄ  r8   r(   r&   ú<module>rÕ     sY  ðØ €€€Ø €€€Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8ðð ð ð ð ð ð ð ð ð ð ð ð ,Ð +Ð +Ð +Ð +Ð +Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø $Ð $Ð $Ð $Ð $Ð $Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð  
ˆÔ	˜8Ñ	$Ô	$€ð
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ð@
ð @
ð @
ð @
ð @
ñ @
ô @
ð @
ðF+ð +ð +ð +ð +ñ +ô +ð +ð"ð "ð "ð "ð "ñ "ô "ð "ðFð Fð Fð Fð F�&ñ Fô Fð FðR!Fð !Fð !Fð !Fð !Fˆkñ !Fô !Fð !FðH
ð 
ð 
ð 
ð 
ˆWñ 
ô 
ð 
ðB
ð 
ð 
ð 
ð 
ˆWñ 
ô 
ð 
ðB
ð 
ð 
ð 
ð 
ˆkñ 
ô 
ð 
ð0ð ð ð ð ˆV�Vñ ô ð ð:ð :ð :ð :ð :ˆ[˜&ñ :ô :ð :ðz ˆ'�) 6Ð
*Ñ
*Ô
*€ð"ð "ð "ð "ð "�+˜w wÔ/ñ "ô "ð "ð2
ð 
ð 
ð 
ð 
˜K¨Ô0ñ 
ô 
ð 
ð$
ð 
ð 
ð 
ð 
Ð+¨GÔ4°fñ 
ô 
ð 
ð ˜ ˜Ô'€ð?ð ?ð ?ð ?ð ?� Ô1ñ ?ô ?ð ?ð<<<ð <<ð <<ð <<ð <<˜:ñ <<ô <<ð <<ð~<:ð <:ð <:ð <:ð <:˜ñ <:ô <:ð <:ð~"ð "ð "ð "ð "� 
Ô+ñ "ô "ð "ð,ð ð ð ð ˜)ñ ô ð ðð ð ð ð ˜	ñ ô ð ð ˜ MÐ1Ô2Ð ðð ð ð ð �/Ð"2Ô3ñ ô ð ð	
ð 	
ð 	
ð 	
ð 	
�kñ 	
ô 	
ð 	
ð	
ð 	
ð 	
ð 	
ð 	
�kñ 	
ô 	
ð 	
ðu
ð u
ð u
ð u
ð u
˜ KÔ0ñ u
ô u
ð u
ðp2ð 2ð 2ð 2ð 2Ð ñ 2ô 2ð 2ð:
ð 
ð 
ð 
ð 
Ðñ 
ô 
ð 
ð 
ð 
r(   