Ë
    £èh‹M  ã                  ór  — d dl mZ d dlmZmZmZmZmZmZ d dl	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mZmZmZmZ d d	lmZmZmZmZmZm Z m!Z! d d
l"m#Z#m$Z$m%Z% d dl&m'Z' er d dl(m)Z) d dlm*Z*m+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1  e	jd                  d«      Z3dd„Z4dd„Z5dd„Z6 e«       Z7 G d„ d«      Z8y)é    )Úannotations)ÚTYPE_CHECKINGÚIterableÚIteratorÚUnionÚcastÚOptionalN)ÚParseException)ÚAuditorÚ
AuditError)ÚBlockLayout)ÚconstÚ	validator)ÚDXFBlockInUseErrorÚDXFKeyErrorÚDXFStructureErrorÚDXFTableEntryErrorÚDXFTypeError)ÚAttribÚBlockÚBlockRecordÚEndBlkÚentity_linkerÚfactoryÚis_graphic_entity)ÚUVecÚNULLVECÚVec3)ÚARROWS)ÚDrawing)Ú	DXFEntityÚDXFTagStorage)ÚEntityDB)ÚAbstractTagWriter)ÚTableÚezdxfc                óÜ   — | j                  «       } t        | «      ryt        j                  | «      ry| j	                  d«      r)t        j
                  t        j                  | «      «      ryy)NTÚ_F)ÚupperÚis_anonymous_blockr   Úis_ezdxf_arrowÚ
startswithÚis_acad_arrowÚ
arrow_name©Únames    ú5lib/python3.12/site-packages/ezdxf/sections/blocks.pyÚis_special_blockr2   .   sX   € Ø�:‰:‹<€Dô ˜$ÔØô ×Ñ˜TÔ"ØØ‡��sÔÜ×Ñ¤× 1Ñ 1°$Ó 7Ô8Øàó    c                óD   — t        | «      dkD  xr | d   dk(  xr | d   dv S )Né   r   Ú*ÚUEXDAT)Úlenr/   s    r1   r*   r*   @   s-   € ô ˆt‹9�q‰=ÒC˜T !™W¨™^ÒC°°Q±¸8Ð0CÐCr3   c                óD  — | j                   j                  dd«      }|r|S | j                   j                  dd«      }|sy| j                  }|�S|j                  �G|j                  j                  |«      }t	        |t
        «      r|j                   j                  dd«      S y)Nr0   Ú Úowner)ÚdxfÚgetÚdocÚentitydbÚ
isinstancer   )Úblockr0   r;   r>   Úblock_records        r1   Úrecover_block_namerC   J   s‹   € Ø�9‰9�=‰=˜ Ó$€DÙØˆØ�I‰I�M‰M˜' 2Ó&€EÙØØ
�)‰)€Cð €˜3Ÿ<™<Ð3Ø—|‘|×'Ñ'¨Ó.ˆÜ�l¤KÔ0Ø×#Ñ#×'Ñ'¨°Ó3Ð3Ør3   c                  ó  — e Zd ZdZ	 	 d	 	 	 dd„Zd„ Zedd„«       Zedd„«       Z	edd„«       Z
d d„Zd	„ Zd!d
„Zd"d„Zd#d„Zd$d„Zd%d„Zd&d„Zd'd„Zd(d%d„Zd)d„Zedf	 	 	 	 	 d*d„Zdef	 	 	 	 	 d+d„Zd,d„Zd-d„Zd.d/d„Zd0d„Zd1d„Zy)2ÚBlocksSectionzm
    Manages BLOCK definitions in a dict(), block names are case insensitive
    e.g. 'Test' == 'TEST'.

    Nc                óf   — || _         |�| j                  |«       | j                  «        d| _        y )Nr   )r>   ÚloadÚ#_reconstruct_orphaned_block_recordsÚ_anonymous_block_counter)Úselfr>   Úentitiess      r1   Ú__init__zBlocksSection.__init__e   s1   € ð
 ˆŒØÐØ�I‰I�hÔØ×0Ñ0Ô2Ø()ˆÕ%r3   c                ó,   — t        | j                  «      S ©N)r8   Úblock_records©rJ   s    r1   Ú__len__zBlocksSection.__len__p   s   € Ü�4×%Ñ%Ó&Ð&r3   c                óZ   — t        | t        «      s| j                  } | j                  «       S rN   )r@   Ústrr0   Úlower)Úentitys    r1   ÚkeyzBlocksSection.keys   s!   € ä˜&¤#Ô&Ø—[‘[ˆFØ�|‰|‹~Ðr3   c                ó.   — | j                   j                  S rN   )r>   rO   rP   s    r1   rO   zBlocksSection.block_recordsy   s   € à�x‰x×%Ñ%Ð%r3   c                ó.   — | j                   j                  S rN   )r>   r?   rP   s    r1   r?   zBlocksSection.entitydb}   s   € à�x‰x× Ñ Ð r3   c                óÒ  ‡‡— 	 	 	 	 	 	 	 	 dˆfd„}dˆfd„}| j                   Št        d‰d   «      }|j                  «       dk7  s|j                  d   dk7  rt	        d«      ‚‰d= g }t
        } |«       D �]p  }t        |t        «      r0|t
        urt        j                  d	«       |}|j                  «        ŒDt        |t        «      �r|t
        u rt        j                  d
«       nÛ|j                  j                  dd«      }|j                  j                  dd«      }	|s:t        |«      }|r-t        j                  d|› d|	› d�«       ||j                  _        |rF ||||«      }
t        |
t"        «      r| j%                  |
«       n3t        j                  d|	› d�«       nt        j                  d|	› d�«       t
        }|j                  «        �Œ`|j'                  |«       �Œs y)zŒ
        Load DXF entities into BlockLayouts. `entities` is a list of
        entity tags, separated by BLOCK and ENDBLK entities.

        c           	     ó”  •— 	 t        d‰j                  | j                  j                  «      «      }|j                  | |«       |D ]  }|j                  |«       Œ |S # t        $ r6 t        d‰j                  | j                  j                  ddi¬«      «      }Y Œjt        $ r# t        d| j                  j                  › �«      ‚w xY w)Nr   Úscaler   )Ú
dxfattribsz"Invalid or missing name of BLOCK #)r   r=   r<   r0   r   Únewr   r   ÚhandleÚ	set_blockÚ
add_entity)rA   ÚendblkÚblock_entitiesrB   rU   rO   s        €r1   Úload_block_recordz-BlocksSection.load.<locals>.load_block_recordˆ   sÀ   ø€ ð
Ü# M°=×3DÑ3DÀUÇYÁYÇ^Á^Ó3TÓU�ð ×"Ñ" 5¨&Ô1Û(�Ø×'Ñ'¨Õ/ð )àÐøô &ò Ü#Ø!Ø!×%Ñ% e§i¡i§n¡nÀ'È1ÀÐ%ÓNó ’ô  ò Ü'Ø8¸¿¹×9IÑ9IÐ8JÐKóð ðús   ƒ/A Á<CÂ+Cc               3  óJ   •K  — t        «       } ‰D ]  } | |«      rŒ|–— Œ y ­wrN   )r   )ÚlinkedrU   rK   s     €r1   Úlink_entitiesz)BlocksSection.load.<locals>.link_entities¡   s&   øè ø€ Ü"“_ˆFÛ"�ñ ˜f•~Ø “Lñ #ùs   ƒ#œ#r"   r   ÚSECTIONr5   )é   ÚBLOCKSz+Critical structure error in BLOCKS section.z*Missing required ENDBLK, ignoring content.z9Found ENDBLK without a preceding BLOCK, ignoring content.r0   r:   r^   z<undefined>zRecovered block name "z" for block #Ú.z#Ignoring invalid BLOCK definition #zIgnoring BLOCK without name #N)rA   r   ra   r   rb   úlist[DXFEntity]ÚreturnzBlockRecord | None)rl   zIterable['DXFEntity'])rO   r   ÚdxftypeÚ
base_classr   Ú_MISSING_BLOCK_r@   r   ÚloggerÚwarningÚclearr   r<   r=   rC   Úinfor0   r   ÚaddÚappend)rJ   rK   rc   rf   Úsection_headÚcontentrA   rU   Ú
block_namer^   rB   rO   s    `         @r1   rG   zBlocksSection.load�   sÌ  ù€ ð	 Øð	 àð	 ð ,ð	 ð  õ		 õ2	!ð ×*Ñ*ˆÜ˜O¨X°a©[Ó9ˆØ×ÑÓ! YÒ.°,×2IÑ2IÈ!Ñ2Lð Q
ò 3
ô $Ð$QÓRÐRà�QˆKØ#%ˆÜ&ˆÙ#—oˆFÜ˜&¤%Ô(Ø¤Ñ/Ü—N‘NÐ#OÔPØ�Ø—‘•Ü˜F¤FÕ+ØœOÑ+Ü—N‘NØSõð "'§¡§¡¨v°rÓ!:�JØ"ŸY™YŸ]™]¨8°]ÓC�FÙ%Ü%7¸Ó%>˜
Ù%Ü"ŸK™KØ"8¸¸ÀMÐRXÐQYÐYZÐ [ôð .8˜EŸI™IœNÙ!Ù'8¸ÀÈÓ'P˜Ü% l´KÔ@Ø ŸH™H \Õ2ä"ŸN™NØ"EÀfÀXÈQÐ Oõô Ÿ™Ð)FÀvÀhÈaÐ'PÔQÜ+�EØ—‘–ð —‘˜vÖ&ñI &r3   c                ó<  — | j                   D ]�  }|j                  �Œt        j                  d|j                  j
                  ddœ| j                  ¬«      }t        j                  di | j                  ¬«      }|j                  ||«       | j                  |«       Œ� y)z˜Find BLOCK_RECORD entries without block definition in the blocks
        section and create block definitions for this orphaned block records.

        NÚBLOCK)r   r   r   )r0   Ú
base_point)r\   r>   ÚENDBLK)	rO   rA   r   Úcreate_db_entryr<   r0   r>   r_   rt   )rJ   rB   rA   ra   s       r1   rH   z1BlocksSection._reconstruct_orphaned_block_recordsÛ   s�   € ð
 !×.Ô.ˆLØ×!Ñ!Ñ)Ü×/Ñ/Øà ,× 0Ñ 0× 5Ñ 5Ø&/ñ ð Ÿ™ô�ô !×0Ñ0ØØ!ØŸ™ô�ð
 ×&Ñ& u¨fÔ5Ø—‘˜Õ&ñ! /r3   c                ó²   — |j                  d«       | j                  D ]%  }t        |t        «      sJ ‚|j	                  |«       Œ' |j                  dd«       y )Nz  0
SECTION
  2
BLOCKS
r   ÚENDSEC)Ú	write_strrO   r@   r   Úexport_block_definitionÚ
write_tag2)rJ   Ú	tagwriterrB   s      r1   Ú
export_dxfzBlocksSection.export_dxfò   sQ   € Ø×ÑÐ9Ô:Ø ×.Ô.ˆLÜ˜l¬KÔ8Ð8Ð8Ø×0Ñ0°Õ;ð /ð 	×Ñ˜Q Õ)r3   c                óŒ   — t        |«      }||_        | j                  j                  |j                  j
                  «      sJ ‚|S )zaAdd or replace a block layout object defined by its block record.
        (internal API)
        )r   Úblock_layoutrO   Ú	has_entryr<   r0   )rJ   rB   r†   s      r1   rt   zBlocksSection.addù   sB   € ô # <Ó0ˆØ$0ˆÔ!Ø×!Ñ!×+Ñ+¨L×,<Ñ,<×,AÑ,AÔBÐBÐBØÐr3   c                ó(   — d„ | j                   D «       S )z<Iterable of all :class:`~ezdxf.layouts.BlockLayout` objects.c              3  ó4   K  — | ]  }|j                   –— Œ y ­wrN   )r†   )Ú.0rB   s     r1   Ú	<genexpr>z)BlocksSection.__iter__.<locals>.<genexpr>  s   è ø€ ÐQÑ>P¨l�×)Õ)Ñ>Pùs   ‚)rO   rP   s    r1   Ú__iter__zBlocksSection.__iter__  s   € áQ¸d×>PÒ>PÓQÐQr3   c                ó8   — | j                   j                  |«      S )zVReturns ``True`` if :class:`~ezdxf.layouts.BlockLayout` `name`
        exist.
        )rO   r‡   ©rJ   r0   s     r1   Ú__contains__zBlocksSection.__contains__  s   € ð ×!Ñ!×+Ñ+¨DÓ1Ð1r3   c                ó–   — 	 t        d| j                  j                  |«      «      }|j                  S # t        $ r t        |«      ‚w xY w)zuReturns :class:`~ezdxf.layouts.BlockLayout` `name`,
        raises :class:`DXFKeyError` if `name` not exist.
        r   )r   rO   r=   r†   r   r   )rJ   r0   rB   s      r1   Ú__getitem__zBlocksSection.__getitem__  sJ   € ð	$Ü ¨t×/AÑ/A×/EÑ/EÀdÓ/KÓLˆLØ×,Ñ,Ð,øÜ!ò 	$Ü˜dÓ#Ð#ð	$ús	   ‚03 ³Ac                ó`   — || v r| j                   j                  |«       yt        d|› d�«      ‚)zŒDeletes :class:`~ezdxf.layouts.BlockLayout` `name` and all of
        its content, raises :class:`DXFKeyError` if `name` not exist.
        úBlock "ú" does not exist.N)rO   Úremover   rŽ   s     r1   Ú__delitem__zBlocksSection.__delitem__  s4   € ð �4‰<Ø×Ñ×%Ñ% dÕ+ä ¨ vÐ->Ð?Ó@Ð@r3   c                óp   — t        | j                  j                  j                  j	                  «       «      S )z"Returns a list of all block names.)Úlistr>   rO   ÚentriesÚkeysrP   s    r1   Úblock_nameszBlocksSection.block_names  s&   € ä�D—H‘H×*Ñ*×2Ñ2×7Ñ7Ó9Ó:Ð:r3   c                óH   — 	 | j                  |«      S # t        $ r |cY S w xY w)zkReturns :class:`~ezdxf.layouts.BlockLayout` `name`, returns
        `default` if `name` not exist.
        )r‘   r   )rJ   r0   Údefaults      r1   r=   zBlocksSection.get#  s,   € ð	Ø×#Ñ# DÓ)Ð)øÜò 	ØŠNð	ús   ‚ “! !c                óH   — | j                   j                  |   j                  S )z=Returns a block layout by block record handle. (internal API))r>   r?   r†   )rJ   Úblock_record_handles     r1   Úget_block_layout_by_handlez(BlocksSection.get_block_layout_by_handle,  s   € à�x‰x× Ñ Ð!4Ñ5×BÑBÐBr3   c                óà  — | j                   €J ‚t        t        | j                   j                  j	                  |«      «      }|xs i }|j
                  j                  |d<   ||d<   t        |«      |d<   t        j                  d|| j                   «      }t        j                  dd|j
                  j                  i| j                   ¬«      }|j                  ||«       | j                  |«      S )z–Create and add a new :class:`~ezdxf.layouts.BlockLayout`, `name`
        is the BLOCK name, `base_point` is the insertion point of the BLOCK.
        r;   r0   r{   rz   r|   )r>   )r>   r   r   rO   r]   r<   r^   r   r   r}   r_   rt   )rJ   r0   r{   r\   rB   ÚheadÚtails          r1   r]   zBlocksSection.new0  sÓ   € ð �x‰xÐ#Ð#Ð#ÜœK¨¯©×)?Ñ)?×)CÑ)CÀDÓ)IÓJˆàÒ% 2ˆ
Ø*×.Ñ.×5Ñ5ˆ
�7ÑØ!ˆ
�6ÑÜ#'¨
Ó#3ˆ
�<Ñ Ü×&Ñ& w°
¸D¿H¹HÓEˆÜ×&Ñ&Ø�w × 0Ñ 0× 7Ñ 7Ð8¸d¿h¹hô
ˆð 	×Ñ˜t TÔ*Ø�x‰x˜Ó%Ð%r3   ÚUc                ón   — | j                  |«      }| j                  ||dt        j                  i«      }|S )a©  Create and add a new anonymous :class:`~ezdxf.layouts.BlockLayout`,
        `type_char` is the BLOCK type, `base_point` is the insertion point of
        the BLOCK.

            ========= ==========
            type_char Anonymous Block Type
            ========= ==========
            ``'U'``   ``'*U###'`` anonymous BLOCK
            ``'E'``   ``'*E###'`` anonymous non-uniformly scaled BLOCK
            ``'X'``   ``'*X###'`` anonymous HATCH graphic
            ``'D'``   ``'*D###'`` anonymous DIMENSION graphic
            ``'A'``   ``'*A###'`` anonymous GROUP
            ``'T'``   ``'*T###'`` anonymous block for ACAD_TABLE content
            ========= ==========

        Úflags)Úanonymous_block_namer]   r   ÚBLK_ANONYMOUS)rJ   Ú	type_charr{   rx   rA   s        r1   Únew_anonymous_blockz!BlocksSection.new_anonymous_blockG  s6   € ð& ×.Ñ.¨yÓ9ˆ
Ø—‘˜ Z°'¼5×;NÑ;NÐ1OÓPˆØˆr3   c                óŒ   — 	 | xj                   dz  c_         d|› | j                   › �}| j                  j                  |«      s|S ŒD)a’  Create name for an anonymous block. (internal API)

        Args:
            type_char: letter

                U = *U### anonymous blocks
                E = *E### anonymous non-uniformly scaled blocks
                X = *X### anonymous hatches
                D = *D### anonymous dimensions
                A = *A### anonymous groups
                T = *T### anonymous ACAD_TABLE content

        r5   r6   )rI   rO   r‡   )rJ   r©   rx   s      r1   r§   z"BlocksSection.anonymous_block_name^  sN   € ð Ø×)Ò)¨QÑ.Õ)Ø˜Y˜K¨×(EÑ(EÐ'FÐGˆJØ×%Ñ%×/Ñ/°
Ô;Ø!Ð!ð	 r3   c                óÒ   — t        t        | j                  j                  |«      «      }|j	                  |«       | j                  j                  ||«       | j                  |«       y)a"  Rename :class:`~ezdxf.layouts.BlockLayout` `old_name` to `new_name`

        .. warning::

            This is a low-level tool and does not rename the block references,
            so all block references to `old_name` are pointing to a non-existing
            block definition!

        N)r   r   rO   r=   ÚrenameÚreplacert   )rJ   Úold_nameÚnew_namerB   s       r1   Úrename_blockzBlocksSection.rename_blockr  sQ   € ô œK¨×);Ñ);×)?Ñ)?ÀÓ)IÓJˆØ×Ñ˜HÔ%Ø×Ñ×"Ñ" 8¨\Ô:Ø�‰�Õr3   c                ó  — |rÇ| j                   €J d«       ‚| j                   j                  j                  |«      }|€t        d|› d�«      ‚|j                  sy|j
                  rt        d|› d�«      ‚t        |«      rt        d|› d�«      ‚d|› d	�}	 | j                   j                  |«      }t        |«      rt        d|› d�«      ‚| j                  |«       y# t        $ r t        j                  d
|› d�«       Y yw xY w)a  Delete block.

        Applies some safety checks when `safe` is ``True``.
        A :class:`DXFBlockInUseError` will be raised for:

            - blocks with active references
            - blocks representing existing layouts
            - special blocks used internally

        Args:
            name: block name (case-insensitive)
            safe: apply safety checks

        Raises:
            DXFKeyError: if block not exists
            DXFBlockInUseError: when safe is ``True`` and block is in use
        Nzvalid DXF document requiredr“   r”   z " represents an existing layout.zSpecial block "z," maybe used without explicit INSERT entity.zINSERT[name=="z"]iz Parsing error in query string: "Ú"z" is still in use.)r>   Úblocksr=   r   Úis_aliveÚis_any_layoutr   r2   Úqueryr
   rp   Úerrorr8   r–   )rJ   r0   ÚsaferA   Úquery_stringÚ
block_refss         r1   Údelete_blockzBlocksSection.delete_block�  s  € ñ$ Ø—8‘8Ð'ÐFÐ)FÓFÐ'Ø—H‘H—O‘O×'Ñ'¨Ó-ˆEØˆ}Ü! G¨D¨6Ð1BÐ"CÓDÐDØ—>’>ØØ×"Ò"Ü(Ø˜d˜VÐ#CÐDóð ô   Ô%Ü(Ø% d VÐ+WÐXóð ð ,¨D¨6°Ð5ˆLðØ!ŸX™XŸ^™^¨LÓ9�
ô
 �:ŒÜ(¨7°4°&Ð8JÐ)KÓLÐLØ×Ñ˜Õøô "ò Ü—‘Ð?À¸~ÈQÐOÔPÙðús   ÂC Ã"DÄ Dc                ób  ‡— | j                   €J ‚t        d„ | j                   j                  d«      D «       «      Šdˆfd„}t        «       }| D ]H  }t        j                  |j
                  «      }|j                  rŒ/ ||«      sŒ8|j                  |«       ŒJ |D ]  }| j                  |«       Œ y)aÁ  Delete all blocks without references except modelspace- or
        paperspace layout blocks, special arrow- and anonymous blocks
        (DIMENSION, ACAD_TABLE).

        .. warning::

            There could exist references to blocks which are not documented in the DXF
            reference, hidden in extended data sections or application defined data,
            which could invalidate a DXF document if these blocks will be deleted.

        Nc              3  ón   K  — | ]-  }t        j                  |j                  j                  «      –— Œ/ y ­wrN   )r   Úmake_table_keyr<   r0   )rŠ   rU   s     r1   r‹   z2BlocksSection.delete_all_blocks.<locals>.<genexpr>º  s+   è ø€ ð  
á2�ô ×$Ñ$ V§Z¡Z§_¡_×5Ù2ùs   ‚35ÚINSERTc                ó$   •— t        | «      ry| ‰vS )NF)r2   )r0   Úactive_referencess    €r1   Úis_safez0BlocksSection.delete_all_blocks.<locals>.is_safe¿  s   ø€ Ü Ô%ØØÐ0Ð0Ð0r3   ©r0   rS   rl   Úbool)	r>   Úsetr·   r   r¿   r0   r¶   rt   r–   )rJ   rÃ   ÚtrashrA   r0   rÂ   s        @r1   Údelete_all_blockszBlocksSection.delete_all_blocks­  sš   ø€ ð �x‰xÐ#Ð#Ð#Üñ  
àŸ(™(Ÿ.™.¨Ô2ó 
ó 
Ðõ
	1ô
 “ˆÛˆEÜ×+Ñ+¨E¯J©JÓ7ˆDØ×&Ó&©7°4­=Ø—	‘	˜$•ð ó
 ˆDØ×Ñ˜TÕ"ñ r3   c                ó  — | j                   |j                   u sJ d«       ‚| j                  D �]Ç  }t        |t        «      sJ ‚|j                  j
                  }g }|j                  }|D �]b  }t        |«      sW|j                  t        j                  dt        |«      › d|j                  j                  › d�¬«       |j                  |«       nft        |t        «      rV|j                  t        j                  dt        |«      › d|j                  j                  › d�¬«       |j                  |«       |j                   sŒÙ|j                  j"                  |k7  sŒó|j                  t        j$                  dt        |«      › d	|j                  j"                  › d
|› d|j                  j                  › d�	¬«       |j'                  |«       �Œe |D ]!  }|j                   sŒ	 |j)                  |«       Œ# �ŒÊ y# t*        $ r Y Œ3w xY w)aD  Audit and repair BLOCKS section.

        .. important::

            Do not delete entities during the auditing process as this will alter
            the entity database while iterating it, instead use::

                auditor.trash(entity)

            to delete invalid entities after auditing automatically.

        z#Auditor for different DXF document.zRemoved invalid DXF entity z from BLOCK 'z'.)ÚcodeÚmessagezRemoved standalone z entity from BLOCK 'zRemoved DXF entity z with invalid owner handle (#z != #z) from BLOCK 'N)r>   rO   r@   r   r<   r^   Úentity_spacer   Úfixed_errorr   ÚREMOVED_INVALID_GRAPHIC_ENTITYrS   r0   rÇ   r   Ú REMOVED_STANDALONE_ATTRIB_ENTITYrµ   r;   Ú(REMOVED_ENTITY_WITH_INVALID_OWNER_HANDLEru   r•   Ú
ValueError)rJ   ÚauditorrB   rŸ   Úunlink_entitiesÚesrU   s          r1   ÚauditzBlocksSection.auditÍ  sô  € ð �x‰x˜7Ÿ;™;Ñ&ÐMÐ(MÓMÐ&à ×.Õ.ˆLÜ˜l¬KÔ8Ð8Ð8à'3×'7Ñ'7×'>Ñ'>ÐØ/1ˆOØ×*Ñ*ˆBÜ�Ü(¨Ô0Ø×'Ñ'Ü'×FÑFØ"=¼cÀ&»k¸]ð K#Ø#/×#3Ñ#3×#8Ñ#8Ð"9¸ð!=ð (ô ð
 —M‘M &Õ)Ü ¬Ô/ð ×'Ñ'Ü'×HÑHØ"5´c¸&³k°]ð C#Ø#/×#3Ñ#3×#8Ñ#8Ð"9¸ð!=ð (ô ð
 —M‘M &Ô)à—’Øà—:‘:×#Ñ#Ð':Ó:Ø×'Ñ'Ü'×PÑPØ"5´c¸&³k°]ð C$Ø$*§J¡J×$4Ñ$4Ð#5°UÐ;NÐ:Oð P'Ø'3×'7Ñ'7×'<Ñ'<Ð&=¸Rð!Að (ô ð $×*Ñ*¨6Ö2ð; ó> *�Ø—?“?ðØŸ	™	 &Õ)ò *ñK /øôR &ò Ùðús   Ç!G8Ç8	HÈH)NN)r>   zOptional[Drawing]rK   zOptional[list[DXFEntity]])rU   zUnion[str, BlockLayout]rl   rS   )rl   r%   )rl   r#   )rK   rk   rl   ÚNone)rƒ   r$   rl   rÖ   )rB   r   rl   r   )rl   zIterator[BlockLayout]rÄ   )r0   rS   rl   r   )r0   rS   rl   rÖ   )rl   z	list[str]rN   )rŸ   rS   rl   r   )r0   rS   r{   r   rl   r   )r©   rS   r{   r   rl   r   )r©   rS   rl   rS   )r¯   rS   r°   rS   rl   rÖ   )T)r0   rS   r¹   rÅ   rl   rÖ   )rl   rÖ   )rÒ   r   rl   rÖ   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rL   rQ   ÚstaticmethodrV   ÚpropertyrO   r?   rG   rH   r„   rt   rŒ   r�   r‘   r–   r›   r=   r    r   r]   rª   r§   r±   r¼   rÈ   rÕ   © r3   r1   rE   rE   ^   s  „ ñð "&Ø.2ð	*àð	*ð ,ó	*ò'ð òó ðð
 ò&ó ð&ð ò!ó ð!óX'òt'ó.*óóRó2ó$óAó;ôóCð #Øð	&àð&ð ð&ð
 
ó&ð0  #°wðØðØ04ðà	óó."ó(ô*óX#ô@9r3   rE   rÄ   )rA   r   rl   rS   )9Ú
__future__r   Útypingr   r   r   r   r   r	   ÚloggingÚ	pyparsingr
   Úezdxf.auditr   r   Úezdxf.layouts.blocklayoutr   Úezdxf.lldxfr   r   Úezdxf.lldxf.constr   r   r   r   r   Úezdxf.entitiesr   r   r   r   r   r   r   Ú
ezdxf.mathr   r   r   Úezdxf.render.arrowsr   Úezdxf.documentr    r!   r"   Úezdxf.entitydbr#   Úezdxf.lldxf.tagwriterr$   Úezdxf.sections.tabler%   Ú	getLoggerrp   r2   r*   rC   ro   rE   rÝ   r3   r1   Ú<module>rî      s’   ðõ #÷÷ ó Ý $ß +Ý 1ß (÷õ ÷÷ ñ ÷ +Ñ *Ý &áÝ&ß7Ý'Ý7Ý*à	ˆ×	Ñ	˜7Ó	#€óó$Dóñ" “'€÷hò hr3   