Ë
    JÿiË}  ã                   ó  — U d Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
 ddlmZ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mZmZmZmZ dd	lmZ dd
l m!Z! ddl"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( ddl)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=  G d„ de-«      Z> G d„ de-«      Z?e'e<z  e@eAeAeAf   z  ZBeeCd<   	 e=e:z  eDeB   z  ZEeeCd<   	 e G d„ d«      «       ZF G d„ de-«      ZG G d„ de-«      ZH G d„ de-«      ZIy) a  
Drafting Objects

name: drafting.py
by:   Gumyr
date: September 16th 2023

desc:
    This python module contains objects using in building technical drawings as Sketches.

license:

    Copyright 2022 Gumyr

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.

é    )Ú	dataclass)Údate)ÚcopysignÚfloorÚgcdÚlog2Úpi)ÚcastÚClassVarÚ	TypeAlias)ÚIterable)ÚINÚMM)	ÚAlignÚ	FontStyleÚGeomTypeÚHeadTypeÚModeÚNumberDisplayÚPageSizeÚSideÚUnit)Ú	BuildLine)ÚBuildSketch)ÚAxisÚLocationÚPlaneÚPosÚVectorÚ
VectorLike)ÚLineÚ
TangentArc)ÚBaseSketchObjectÚPolygonÚText)ÚfilletÚmirrorÚsweep)Ú	make_faceÚtrace)ÚCompoundÚCurveÚEdgeÚSketchÚVertexÚWirec            	       ó~   ‡ — e Zd ZdZej
                  gZej                  de	j                  fdededede	fˆ fd„Zˆ xZS )Ú	ArrowHeada7  Sketch Object: ArrowHead

    Args:
        size (float): tip to tail length
        head_type (HeadType, optional): arrow head shape. Defaults to HeadType.CURVED.
        rotation (float, optional): rotation in degrees. Defaults to 0.
        mode (Mode, optional): combination mode. Defaults to Mode.ADD.
    r   ÚsizeÚ	head_typeÚrotationÚmodec           	      óÒ  •— t        «       5 }|t        j                  k(  rit        «       5  t	        d| |dz  f| |dz  f¬«      }t        |dz  d|z  dz  df«       t        t        j                  ¬	«       d d d «       t        «        n¢|t        j                  k(  rt        | |dz  f| | dz  fdd ¬
«       nr|t        j                  k(  r_t        |t        j                  ¬«       t        |j                  «       j!                  t"        j$                  d|z  | dz  «      |dz  ¬«       d d d «       t&        ‰| �Q  j*                  |d |¬«       y # 1 sw Y   ŒÜxY w# 1 sw Y   Œ3xY w)N)r   r   é   é   )Útangenté   iùÿÿÿé   r   )Úabout©Úalign)r4   éþÿÿÿé   é   )Úradius©r5   r?   r6   )r   r   ÚCURVEDr   r"   r!   r'   r   ÚXZr)   ÚSTRAIGHTr$   ÚFILLETEDr2   r&   ÚverticesÚfilter_by_positionr   ÚXÚsuperÚ__init__Úsketch)Úselfr3   r4   r5   r6   Ú
arrow_headÚsideÚ	__class__s          €úc/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/build123d/drafting.pyrM   zArrowHead.__init__F   s:  ø€ ô Œ]˜jØœHŸO™OÒ+Ü•[Ü%Ø $ ¨¨q©Ð 1¸T¸EÀ4È!Á8Ð;Lô�Dô ˜ ™ B¨¡I°¡M°1Ð#5Ô6Ü¤§¡Õ*÷ !ô •Øœh×/Ñ/Ò/Ü˜$˜  q¡Ð)¨T¨E°D°5¸1±9Ð+=¸vÈTÖRØœh×/Ñ/Ò/Ü˜$¬(¯/©/Õ:ÜØ×'Ñ'Ó)×<Ñ<ÜŸ™  T¡	¨D¨5°1©9óð   "™9õ	÷ ô( 	‰Ñ˜×*Ñ*°XÀTÐPTÐÕU÷% !�[ú÷ ˆ]ús$   ŒEªAEÁ6B5EÅE	ÅEÅE&)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú_tagÚ_applies_tor   rE   r   ÚADDÚfloatrM   Ú__classcell__©rR   s   @rS   r2   r2   :   sa   ø„ ñð ×#Ñ#Ð$€Kð
 'Ÿo™oØØ—X‘XñVàðVð ðVð ð	Vð
 ÷Vñ Vó    r2   c                   óŒ   ‡ — e Zd ZdZej
                  gZdej                  e	j                  fdedeez  dededede	fˆ fd	„Zˆ xZS )
ÚArrowa²  Sketch Object: Arrow with shaft

    Args:
        arrow_size (float): arrow head tip to tail length
        shaft_path (Edge |  Wire): line describing the shaft shape
        shaft_width (float): line width of shaft
        head_at_start (bool, optional): Defaults to True.
        head_type (HeadType, optional): arrow head shape. Defaults to HeadType.CURVED.
        mode (Mode, optional): _description_. Defaults to Mode.ADD.
    TÚ
arrow_sizeÚ
shaft_pathÚshaft_widthÚhead_at_startr4   r6   c           	      óD  •— |r|j                  d«      dz   n|j                  d«      }t        |||t        j                  ¬«      j	                  t        |j                  t        | «      «      «      «      }|dz  |j                  z  }	|r|j                  |	d«      }n|j                  dd|	z
  «      }|j                  |d«      }
t        |
|t        j                  ¬«      }t        t        |j                  |«      «      j                  «       }t         ‰| �E  |dd |¬	«       y )
Nr   é´   r;   )r3   r5   r4   r6   é   ç      ð?ç        ©r6   rD   )Útangent_angle_atr2   r   ÚPRIVATEÚmovedr   Úposition_atÚintÚlengthÚtrimÚperpendicular_liner(   r
   r+   ÚfuseÚcleanrL   rM   )rO   ra   rb   rc   rd   r4   r6   ÚanglerP   Útrim_amountÚ	shaft_penÚshaftÚarrowrR   s                €rS   rM   zArrow.__init__r   s  ø€ ñ ð ×'Ñ'¨Ó*¨SÒ0à×,Ñ,¨QÓ/ð 	ô Ø e°yÄtÇ|Á|ô
ç
‰%”˜×/Ñ/´¸Ð4EÓ0FÓGÓHÓ
Ið 	ð
 " A‘~¨×):Ñ):Ñ:ˆÙØ#Ÿ™¨°cÓ:‰Jà#Ÿ™¨¨c°KÑ.?Ó@ˆJð ×1Ñ1°+¸qÓAˆ	Ü�i ´$·,±,Ô?ˆä”X˜zŸ™¨uÓ5Ó6×<Ñ<Ó>ˆä‰Ñ˜¨°$¸TÐÕBr^   )rT   rU   rV   rW   r   rX   rY   r   rE   r   rZ   r[   r-   r0   ÚboolrM   r\   r]   s   @rS   r`   r`   d   s{   ø„ ñ	ð ×#Ñ#Ð$€Kð #Ø&Ÿo™oØ—X‘Xñ Càð Cð ˜4‘Kð Cð ð	 Cð
 ð Cð ð Cð ÷ Cñ  Cr^   r`   Ú	PointLikeÚPathDescriptorc                   ó  — e Zd ZU dZdddœZee   ed<   dZe	ed<   dZ
eed	<   ej                  Zeed
<   ej                   Zeed<   dZe	ed<   dZe	ed<   dZe	ed<   ej,                  Zeed<   ej2                  Zeed<   dZeed<   dZeed<   dZeed<   dZ e	ed<   e!defd„«       Z"d„ Z#de	defd„Z$	 	 d,de	d!e	e%e	e	f   z  d z  ded z  defd"„Z&e'd#e(de)e*z  fd$„«       Z+d%ed z  d&e*d'ed!e	e%e	e	f   z  d z  def
d(„Z,e'	 d-d#e)e*z  d)e	d*ede-fd+„«       Z.y ).ÚDraftaä  Draft

    Documenting build123d designs with dimension and extension lines as well as callouts.


    Args:
        font_size (float): size of the text in dimension lines and callouts. Defaults to 5.0.
        font (str): font to use for text. Defaults to "Arial".
        font_style: text style. Defaults to FontStyle.REGULAR.
        head_type (HeadType, optional): arrow head shape. Defaults to HeadType.CURVED.
        arrow_length (float): arrow head length. Defaults to 3.0.
        line_width (float): thickness of all lines. Defaults to 0.5.
        pad_around_text (float): amount of padding around text. Defaults to 2.0.
        unit (Unit): measurement unit. Defaults to Unit.MM.
        number_display (NumberDisplay): numbers as decimal or fractions.
            Default to NumberDisplay.DECIMAL.
        display_units (bool): control the display of units with numbers. Defaults to True.
        decimal_precision (int): number of decimal places when displaying numbers. Defaults to 2.
        fractional_precision (int): maximum fraction denominator - must be a factor of 2.
            Defaults to 64.
        extension_gap (float): gap between the point and start of extension line in extension_line.
            Defaults to 2.0.

    ÚmmÚ"©TFÚunit_LUTg      @Ú	font_sizeÚArialÚfontÚ
font_styler4   g      @Úarrow_lengthç      à?Ú
line_widthg       @Úpad_around_textÚunitÚnumber_displayTÚdisplay_unitsrg   Údecimal_precisioné@   Úfractional_precisionÚextension_gapÚreturnc                 ó–   — | j                   t        j                  t        j                  t        j                  t        j
                  fv S )zAre metric units being used)r‹   r   r   ÚCMÚMÚMC©rO   s    rS   Ú	is_metriczDraft.is_metricÉ   s,   € ð �y‰yœTŸW™W¤d§g¡g¬t¯v©v´t·w±wÐ?Ð?Ð?r^   c                 óz   — t        | j                  «      j                  «       st        d| j                  › �«      ‚y)zValidate inputsz6fractional_precision values must be a factor of 2 not N)r   r�   Ú
is_integerÚ
ValueErrorr—   s    rS   Ú__post_init__zDraft.__post_init__Î   s<   € ä�D×-Ñ-Ó.×9Ñ9Ô;ÜØHÈ×IbÑIbÐHcÐdóð ð <r^   Únumberc                 ó¼   — | j                   dkD  r&t        || j                   «      d| j                   › d�›S t        t        t        || j                   «      «      «      S )zBRound a float but remove decimal if appropriate and convert to strr   Ú.Úf)rŽ   ÚroundÚstrro   )rO   r�   s     rS   Ú_round_to_strzDraft._round_to_strÕ   s_   € ð ×%Ñ%¨Ò)ô �V˜T×3Ñ3Ó4°Q°t×7MÑ7MÐ6NÈaÐ4OÐPð	
ô ”Sœ˜v t×'=Ñ'=Ó>Ó?Ó@ð	
r^   NÚ	tolerancec                 óü  — dt         dt         dt        t         t         f   fd„}|€|€| j                  }nd}n|}|rt        j                  | j
                     nd}|€d}nSt        |t        «      rd| j                  |«      › �}n.d| j                  |d	   d¬
«      › d| j                  |d   «      › �}| j
                  s| j                  t        j                  k(  r8t        t        dœ}| j                  ||| j
                     z  «      }	|	› |› |› �}
|
S t        |t        z  «      } |t!        |t        z  |z
  | j"                  z  «      | j"                  «      \  }}|d	k(  r|› d|› |› |› �}
|
S |› d|› d|› |› |› �}
|
S )zPConvert a raw number to a unit of measurement string based on the class settingsÚ	numeratorÚdenominatorr’   c                 óR   — t        | |«      }t        | |z  «      t        ||z  «      fS )zDMathematically simplify a fraction given a numerator and denominator)r   ro   )r¦   r§   Úgreatest_common_denominators      rS   Úsimplify_fractionz3Draft._number_with_units.<locals>.simplify_fractionå   s5   € ä*-¨i¸Ó*EÐ'ä�IÐ ;Ñ;Ó<Ü�KÐ"=Ñ=Ó>ðð r^   FÚ u    Â±z +r   )r�   z -r;   r�   Ú/Ú )ro   Útupler�   r~   r‚   r˜   Ú
isinstancer[   Ú_number_with_unitsrŒ   r   ÚDECIMALr   r   r£   r   r¡   r�   )rO   r�   r¤   r�   rª   Úqualified_display_unitsÚunit_strÚtolerance_strÚunit_lutÚmeasurementÚreturn_valueÚ
whole_partr¦   r§   s                 rS   r°   zDraft._number_with_unitsÝ   sÃ  € ð	¬ð 	¼3ð 	Ä5ÌÌcÈÁ?ó 	ð Ð ØÐ Ø*.×*<Ñ*<Ñ'à*/Ñ'à&3Ð#á5L”5—>‘> $§.¡.Ò1ÐRTˆØÐØ‰MÜ˜	¤5Ô)Ø! $×"9Ñ"9¸)Ó"DÐ!EÐF‰Mð �T×,Ñ,¨Y°q©\ÈÐ,ÓNÐOØ�T×,Ñ,¨Y°q©\Ó:Ð;ð=ð ð �>Š>˜T×0Ñ0´M×4IÑ4IÒIÜ ¬Ñ,ˆHØ×,Ñ,¨V°h¸t¿~¹~Ñ6NÑ-NÓOˆKØ)˜]¨8¨*°]°OÐDˆLð Ðô ˜v¬™{Ó+ˆJÙ'8Ü�v¤‘{ ZÑ/°4×3LÑ3LÑLÓMØ×)Ñ)ó(Ñ$ˆY˜ð ˜QŠØ"+ ¨A¨k¨]¸8¸*À]ÀOÐT�ð Ðð "�l ! I ;¨a°¨}¸X¸JÀ}ÀoÐVð ð Ðr^   Úpathc                 ón  — t        | t        t        f«      r| }|S t        | t        «      r|| D �cg c]6  }t        |t        «      rt        |j                  «       «      n
t        |«      ‘Œ8 }}t        |«      dk(  rt        j                  |Ž }|S t        j                  |d¬«      }|S t        d«      ‚c c}w )z)Convert a PathDescriptor into a Edge/Wirerg   F©ÚclosezUnsupported patch descriptor)r¯   r-   r0   r   r/   r   Úto_tupleÚlenÚ	make_lineÚmake_polygonr›   )r¹   Úprocessed_pathÚpÚpntss       rS   Ú_process_pathzDraft._process_path  s¼   € ô �dœT¤4˜LÔ)Ø!ˆNð Ðô ˜œhÔ'ñ óá�Aô )3°1´fÔ(=”�q—z‘z“|Ô$Ä6È!Ã9ÑLØð ð ô �4‹y˜AŠ~Ü!%§¡°Ð!6�ð Ðô "&×!2Ñ!2°4¸uÔ!E�ð
 Ðô Ð;Ó<Ð<ùòs   ¯;B2ÚlabelÚ	line_wireÚlabel_anglec                 óL  — |j                   }|�|}|S |r}|j                  «       j                  t        j                  «      }t        |«      dk(  rt        d«      ‚|d   }d|z  dt        z  |j                  z  z  }	| j                  |	«      › d�}|S | j                  ||«      }|S )z'Create the str to use as the label textr   z:label_angle requested but the path is not part of a circleih  rg   ô   Â°)rp   ÚedgesÚ	filter_byr   ÚCIRCLEr¾   r›   r	   rC   r£   r°   )
rO   rÅ   rÆ   rÇ   r¤   Úline_lengthÚ	label_strÚ	arc_edgesÚarc_edgeÚarc_sizes
             rS   Ú_label_to_strzDraft._label_to_str&  s¿   € ð  ×&Ñ&ˆØÐØˆIð Ðñ Ø!Ÿ™Ó)×3Ñ3´H·O±OÓDˆIÜ�9‹~ Ò"Ü ØPóð ð ! ‘|ˆHØ˜[Ñ(¨A´©F°X·_±_Ñ,DÑEˆHØ×-Ñ-¨hÓ7Ð8¸Ð;ˆIð Ðð ×/Ñ/°¸YÓGˆIØÐr^   Úu_valueÚflipc                 óz   — | j                  |«      t        |«      dz  z   }t        | j                  |«      d|«      S )zEGiven a path on Plane.XY, determine the Location for object placementrf   )r   r   r;   )rk   ro   r   rn   )r¹   rÓ   rÔ   ru   s       rS   Ú_sketch_locationzDraft._sketch_location>  s;   € ð
 ×%Ñ% gÓ.´°T³¸S±Ñ@ˆÜ˜×(Ñ(¨Ó1°9¸eÓDÐDr^   )NN)F)/rT   rU   rV   rW   r‚   r   ÚdictÚ__annotations__rƒ   r[   r…   r¢   r   ÚREGULARr†   r   rE   r4   r‡   r‰   rŠ   r   r   r‹   r   r±   rŒ   r�   rz   rŽ   ro   r�   r‘   Úpropertyr˜   rœ   r£   r®   r°   Ústaticmethodr|   r-   r0   rÄ   rÒ   r   rÖ   © r^   rS   r~   r~   ›   sæ  … ñð8 '+°3Ñ7€Hˆh�t‰nÓ7à€IˆuÓØ€Dˆ#ÓØ%×-Ñ-€J�	Ó-Ø"Ÿ/™/€IˆxÓ)Ø€L�%ÓØ€J�ÓØ €O�UÓ Ø—‘€Dˆ$ÓØ$1×$9Ñ$9€N�MÓ9Ø€M�4ÓØÐ�sÓØ "Ð˜#Ó"Ø€M�5Óàð@˜4ò @ó ð@òð
 Eð 
¨có 
ð 9=Ø%)ñ	3àð3ð ˜5 ¨ Ñ.Ñ.°Ñ5ð3ð ˜d‘{ð	3ð
 
ó3ðj ð˜Nð ¨t°d©{ò ó ðð&à�T‰zðð ðð ð	ð
 ˜5 ¨ Ñ.Ñ.°Ñ5ðð 
óð0 à8=ñEØ�T‰kðEØ$)ðEØ15ðEà	òEó ñEr^   r~   c                   ó’   ‡ — e Zd ZdZdddddej
                  fdedededz  de	dz  d	e
eef   d
ee
eef   z  dz  dedefˆ fd„Zˆ xZS )ÚDimensionLineu=  Sketch Object: DimensionLine

    Create a dimension line typically for internal measurements.
    Typically used for (but not restricted to) inside dimensions, a dimension line often
    as arrows on either side of a dimension or label.

    There are three options depending on the size of the text and length
    of the dimension line:
    Type 1) The label and arrows fit within the length of the path
    Type 2) The text fit within the path and the arrows go outside
    Type 3) Neither the text nor the arrows fit within the path

    Args:
        path (PathDescriptor): a very general type of input used to describe the path the
            dimension line will follow.
        draft (Draft): instance of Draft dataclass
        sketch (Sketch): the Sketch being created to check for possible overlaps. In builder
            mode the active Sketch will be used if None is provided.
        label (str, optional): a text string which will replace the length (or
            arc length) that would otherwise be extracted from the provided path. Providing
            a label is useful when illustrating a parameterized input where the name of an
            argument is desired not an actual measurement. Defaults to None.
        arrows (tuple[bool, bool], optional): a pair of boolean values controlling the placement
            of the start and end arrows. Defaults to (True, True).
        tolerance (float | tuple[float, float], optional): an optional tolerance
            value to add to the extracted length value. If a single tolerance value is provided
            it is shown as Â± the provided value while a pair of values are shown as
            separate + and - values. Defaults to None.
        label_angle (bool, optional): a flag indicating that instead of an extracted length value,
            the size of the circular arc extracted from the path should be displayed in degrees.
        mode (Mode, optional): combination mode. Defaults to Mode.ADD.

    Raises:
        ValueError: Only 2 points allowed for dimension lines
        ValueError: No output - no arrows selected

    N©TTFr¹   ÚdraftrN   rÅ   Úarrowsr¤   rÇ   r6   c	                 ór  •— t        j                  | «      }	|€|	�|	j                  �|	j                  }t        |t        «      rt        |«      dkD  rt        d«      ‚t        j                  |«      }
|
j                  }|| _
        |j                  ||
||«      }t        ||j                  |j                  |j                  t         j"                  t$        j&                  ¬«      }|j)                  «       j*                  j,                  }|j/                  d«      dk(  rt        d«      ‚||j/                  d«      |j0                  z  z   |k  rC||z
  dz  |j2                  z
  }|
j5                  d||z  «      |
j5                  d||z  z
  d«      g}nsd|j0                  z  }t7        j8                  |
dz  |
dz  |
dz  dz  |j0                  z  z
  «      t7        j8                  |
d	z  |
d	z  dz  |j0                  z  z   |
d	z  «      g}g }t;        |«      D ]€  \  }}|j=                  |«      |
j=                  |«      k7  t?        |«      k(  }|jA                  tC        |j0                  ||jD                  ||jF                  t$        j&                  ¬
«      «       Œ‚ ||j2                  z   |dz  z   }d| |z  d	||z  z   g}i }|D �]A  }tI        ||«      D ��cg c]	  \  }}|r|‘Œ }}}tK        |«      }|
jM                  |«      jO                  tQ        d	dd«      «      dk\  }t        jS                  |
||«      }|jU                  |«      }tW        tJ        d z  tK        jX                  ||«      «      } | €d}!n| jZ                  }!||z  }|j)                  «       j*                  }"|€d}#n8tW        tJ        d z  tK        jX                  ||«      «      }$|$€d}#n|$jZ                  }#|#|!z  }#|jZ                  d|#z  z
  |"j,                  z  }%|%||<   �ŒD t]        |j_                  «       d„ ¬«      }&t`        ‰'| �Å  |&d   d   dd |¬«       y c c}}w )Nrg   z/Only two points are allowed for dimension lines)Útxtrƒ   r…   r†   r?   r6   Tr   zNo output - no arrows selectedri   rh   r;   rj   rˆ   rf   é
   c                 ó   — | d   S )Nr;   rÜ   )Úxs    rS   Ú<lambda>z(DimensionLine.__init__.<locals>.<lambda>ß  s   € ¸qÀºtr^   )Úkeyéÿÿÿÿ©Úobjr5   r?   r6   )2r   Ú_get_contextrN   r¯   r   r¾   r›   r~   rÄ   rp   Ú	dimensionrÒ   r%   rƒ   r…   r†   r   ÚCENTERr   rl   Úbounding_boxr3   rK   Úcountr‡   rŠ   rq   r-   r¿   Ú	enumeratern   rz   Úappendr`   r‰   r4   Úzipr.   Ú
tangent_atÚ	get_angler   rÖ   Úlocatedr
   Ú	intersectÚareaÚsortedÚitemsrL   rM   )(rO   r¹   rà   rN   rÅ   rá   r¤   rÇ   r6   ÚcontextÚpath_objÚpath_lengthrÎ   Úlabel_shapeÚlabel_lengthÚshaft_lengthÚ
shaft_pairÚarrow_shapesÚirx   Ú	flip_headÚoverageÚlabel_u_valuesÚd_linesrÓ   Ú	add_arrowÚarrow_shapeÚselect_arrow_shapesÚd_lineÚ
flip_labelÚlocÚplaced_labelÚself_intersectionÚself_intersection_areaÚ	bbox_sizeÚcommon_areaÚline_intersectionÚscoreÚsorted_d_linesrR   s(                                          €rS   rM   zDimensionLine.__init__n  sC  ø€ ô ×*Ñ*¨4Ó0ˆØˆ> 7 ?°g·n±nÐ6LØ—^‘^ˆFô �dœHÔ%¬#¨d«)°aª-ÜÐNÓOÐOÜ×&Ñ& tÓ,ˆØ—o‘oˆà$ˆŒð ×'Ñ'¨¨x¸ÀiÓPˆ	ÜØØ—o‘oØ—‘Ø×'Ñ'Ü—,‘,Ü—‘ô
ˆð #×/Ñ/Ó1×6Ñ6×8Ñ8ˆð �<‰<˜Ó Ò"ÜÐ=Ó>Ð>Ø˜&Ÿ,™, tÓ,¨u×/AÑ/AÑAÑAÀKÒOØ'¨,Ñ6¸!Ñ;¸e×>SÑ>SÑSˆLà—‘˜c <°+Ñ#=Ó>Ø—‘˜c L°;Ñ$>Ñ>ÀÓDð‰Jð
 ˜u×1Ñ1Ñ1ˆLä—‘Ø˜q‘LØ˜q‘L H¨q¡L°AÑ#5¸×8JÑ8JÑ#JÑJóô —‘Ø˜q‘L H¨q¡L°AÑ#5¸×8JÑ8JÑ#JÑJØ˜q‘Lóð	ˆJð ˆÜ! *Ö-‰HˆAˆuØ×*Ñ*¨1Ó-°×1EÑ1EÀaÓ1HÑHÌTÐRSËWÑTˆIØ×ÑÜØ×&Ñ&ØØ×$Ñ$ØØ—O‘OÜŸ™ôõ	ð .ð  ×!6Ñ!6Ñ6¸ÈÑ9IÑIˆØ ˜x¨+Ñ5°q¸7À[Ñ;PÑ7PÐQˆàˆÜ%ˆGô /2°&¸,Ô.Gô#á.GÑ*�I˜{Ùò Ø.Gð  ñ #ô
 Ð/Ó0ˆFØ!×,Ñ,¨WÓ5×?Ñ?ÄÀqÈ!ÈQÃÓPÐTWÑWˆJÜ×(Ñ(¨°7¸JÓGˆCØ&×.Ñ.¨sÓ3ˆLÜ $Ü˜‘œv×/Ñ/°¸ÓEó!Ðð !Ð(Ø),Ñ&à):×)?Ñ)?Ð&Ø�lÑ"ˆFØ×+Ñ+Ó-×2Ñ2ˆIð ˆ~Ø!‘ä$(Ü˜T‘M¤6×#3Ñ#3°F¸FÓ#Có%Ð!ð %Ð,Ø"%‘Kà"3×"8Ñ"8�KØÐ1Ñ1ˆKØ—[‘[ 2¨Ñ#3Ñ3°y·{±{ÑBˆEØ#ˆG�F‹OðC &ôH   §¡£±^ÔDˆä‰Ñ˜^¨BÑ/°Ñ2¸QÀdÐQUÐÕVùóK#s   ËP3)rT   rU   rV   rW   r   rZ   r|   r~   r.   r¢   r®   rz   r[   rM   r\   r]   s   @rS   rÞ   rÞ   G  s±   ø„ ñ$ðT !%Ø Ø$0Ø8<Ø!Ø—X‘XñsWàðsWð ðsWð ˜‘ð	sWð
 �T‰zðsWð �d˜D�jÑ!ðsWð ˜5 ¨ Ñ.Ñ.°Ñ5ðsWð ðsWð ÷sWñ sWr^   rÞ   c                   ó¢   ‡ — e Zd ZdZddddddej
                  fdededede	dz  d	e
dz  d
eeef   deeeef   z  dz  dededz  defˆ fd„Zˆ xZS )ÚExtensionLineuW  Sketch Object: Extension Line

    Create a dimension line with two lines extending outward from the part to dimension.
    Typically used for (but not restricted to) outside dimensions, with a pair of lines
    extending from the edge of a part to a dimension line.

    Args:
        border (PathDescriptor): a very general type of input defining the object to
            be dimensioned. Typically this value would be extracted from the part but is
            not restricted to this use.
        offset (float): a distance to displace the dimension line from the edge of the object
        draft (Draft): instance of Draft dataclass
        label (str, optional): a text string which will replace the length (or arc length)
            that would otherwise be extracted from the provided path. Providing a label is
            useful when illustrating a parameterized input where the name of an argument
            is desired not an actual measurement. Defaults to None.
        arrows (tuple[bool, bool], optional): a pair of boolean values controlling the placement
            of the start and end arrows. Defaults to (True, True).
        tolerance (float | tuple[float, float], optional): an optional tolerance
            value to add to the extracted length value. If a single tolerance value is provided
            it is shown as Â± the provided value while a pair of values are shown as
            separate + and - values. Defaults to None.
        label_angle (bool, optional): a flag indicating that instead of an extracted length
            value, the size of the circular arc extracted from the path should be displayed
            in degrees. Defaults to False.
        project_line (Vector, optional): Vector line which to project dimension against.
            Defaults to None.
        mode (Mode, optional): combination mode. Defaults to Mode.ADD.

    Nrß   FÚborderÚoffsetrà   rN   rÅ   rá   r¤   rÇ   Úproject_liner6   c           
      óö  •— t        j                  | «      }|€|�|j                  �|j                  }|	�t        d«      ‚t        j                  |«      }t        j                  t        j                  dœ}|dk(  rt        d«      ‚|j                  ||t        t        d|«      «         d¬«      }|�|n|j                  ||||«      }dD �cg c]6  }t        j                  |j!                  |«      |j!                  |«      «      ‘Œ8 }}t#        |d   j$                  t#        |«      z
  «      d	kD  rDdD �cg c]9  }t        j                  |j!                  |«      |j!                  d|z
  «      «      ‘Œ; }}|D �cg c]8  }|j'                  t)        |j+                  d«      |j,                  z  «      «      ‘Œ: }}g }|D ]K  }|j/                  |j0                  d«      }t3        ||t4        j6                  ¬
«      }|j9                  |«       ŒM t;        |||||||t4        j6                  ¬
«      }|j<                  | _        t?        ||jA                  «       z   ¬«      }tB        ‰| �‰  |dd |
¬«       y c c}w c c}w c c}w )Nz%project_line is currently unsupported)r;   ré   r   z.A dimension line should be used if offset is 0r;   F)ÚdistancerQ   Úclosed)r   r;   g-Cëâ6?rj   ©Úchildrenrê   )#r   rì   rN   ÚNotImplementedErrorr~   rÄ   r   ÚRIGHTÚLEFTr›   Ú	offset_2dro   r   rÒ   r-   r¿   rn   Úabsrp   rm   r   rô   r‘   rr   r‰   r(   r   rl   rò   rÞ   rí   r.   ÚfacesrL   rM   )rO   r  r  rà   rN   rÅ   rá   r¤   rÇ   r  r6   rû   Úobject_to_measureÚside_lutÚdimension_pathÚdimension_label_strÚeÚextension_linesÚextension_lineÚe_linesÚline_penÚe_line_shaper  Úe_line_sketchrR   s                           €rS   rM   zExtensionLine.__init__  s”  ø€ ô ×*Ñ*¨4Ó0ˆØˆ> 7 ?°g·n±nÐ6LØ—^‘^ˆFØÐ#Ü%Ð&MÓNÐNô "×/Ñ/°Ó7Ðä—z‘z¤t§y¡yÑ1ˆà�QŠ;ÜÐMÓNÐNØ*×4Ñ4Ø (¬3¬x¸¸6Ó/BÓ+CÑ"DÈUð 5ó 
ˆð
 Ð ñ à×$Ñ$ UÐ,=¸{ÈIÓVð 	ñ ó	
ñ �ô �N‰NØ!×-Ñ-¨aÓ0°.×2LÑ2LÈQÓ2Oõð ð	 	ð 
ô ˆ˜qÑ!×(Ñ(¬3¨v«;Ñ6Ó7¸$Ò>ñ
  ó	ñ  �Aô —‘Ø%×1Ñ1°!Ó4°n×6PÑ6PÐQRÐUVÑQVÓ6Wõð  ð	 ð ñ #2ó	
ñ #2�ð × Ñ Ü˜×2Ñ2°1Ó5¸×8KÑ8KÑKÓLõð #2ð	 	ð 
ð ˆÛ-ˆNØ%×8Ñ8¸×9IÑ9IÈ1ÓMˆHÜ  ¨>ÄÇÁÔMˆLØ�N‰N˜<Õ(ð .ô ØØØØØØØÜ—‘ô	
ˆð  ×)Ñ)ˆŒä¨°&·,±,³.Ñ(@ÔAˆä‰Ñ˜]°Q¸dÈÐÕNùòW
ùòùò
s   Ã;I,Ä4>I1Å8=I6)rT   rU   rV   rW   r   rZ   r|   r[   r~   r.   r¢   r®   rz   r    rM   r\   r]   s   @rS   r  r  ä  sÑ   ø„ ñðH !%Ø Ø$0Ø8<Ø!Ø*.Ø—X‘XñOOàðOOð ðOOð ð	OOð
 ˜‘ðOOð �T‰zðOOð �d˜D�jÑ!ðOOð ˜5 ¨ Ñ.Ñ.°Ñ5ðOOð ðOOð ! 4Ñ'ðOOð ÷OOñ OOr^   r  c                   óÚ  ‡ — e Zd ZdZej
                  dez  dez  fej                  dez  dez  fej                  dez  dez  fej                  dez  dez  fej                  dez  dez  fej                  dez  dez  fej                  dez  d	ez  fej                  d	ez  d
ez  fej                  d
ez  dez  fej                  dez  dez  fej                   dez  dez  fej"                  dez  dez  fej&                  dez  dez  fej(                  dez  dez  fiZdez  Zddej                  dddddddej0                  fdededz  dededed ed!edz  d"ed#ed$ed%efˆ fd&„Zˆ xZS )'ÚTechnicalDrawinga^  Sketch Object: TechnicalDrawing

    The border of a technical drawing with external frame and text box.

    Args:
        designed_by (str, optional): Defaults to "build123d".
        design_date (date, optional): Defaults to date.today().
        page_size (PageSize, optional): Defaults to PageSize.A4.
        title (str, optional): drawing title. Defaults to "Title".
        sub_title (str, optional): drawing sub title. Defaults to "Sub Title".
        drawing_number (str, optional): Defaults to "B3D-1".
        sheet_number (int, optional): Defaults to None.
        drawing_scale (float, optional): displays as 1:value. Defaults to 1.0.
        nominal_text_size (float, optional): size of title text. Defaults to 10.0.
        line_width (float, optional): Defaults to 0.5.
        mode (Mode, optional): combination mode. Defaults to Mode.ADD.
    i¥  iI  iR  i¤  i)  éÒ   g     �b@éi   éJ   é4   é%   é   é   g      !@é   é   rA   Ú	build123dNÚTitlez	Sub TitlezB3D-1rh   g      $@rˆ   Údesigned_byÚdesign_dateÚ	page_sizeÚtitleÚ	sub_titleÚdrawing_numberÚsheet_numberÚdrawing_scaleÚnominal_text_sizer‰   r6   c                 óè  •— |€t        j                  «       }t        j                  |   }|d   dt        j                  z  z
  d|	z  z
  }d|z  dz  }t        j                  | dz  |dz  f|dz  |dz  f|dz  | dz  f| dz  | dz  fg«      }t        ||
t        j                  ¬«      }g }t        d«      D ]  }|dv rŒ|dz  }|j                  |«      }|j                  t        j                  ||t        |	d«      j!                  t"        j$                  |j'                  |«      dz   «      z   «      «       Œ� t        ||
t        j                  ¬«      }t)        «       }dd	d
ddœ}t        d«      D ]]  }dD ]V  }|t+        ||d|	z  z   z  ||   |z  «      t)        t-        j.                  t1        |dz   «      |	«      j2                  «      z  z  }ŒX Œ_ dddddddœ}t5        g d¢«      D ]T  \  }}dD ]J  }|t+        ||   |z  ||d|	z  z   z  «      t)        t-        j.                  ||	«      j2                  «      z  z  }ŒL ŒV |j7                  «       j9                  t"        j:                  «      d   dz  }|j7                  «       j9                  t"        j<                  «      d   dz  }t        j                  ||j<                  |j:                  f|gd¬«      }|j7                  «       j9                  t"        j<                  «      d   dz  } |j7                  «       j9                  t"        j<                  «      d   dz  }!t?        «       |t        j                  | |j<                  | j:                  f«      gz   }|t        j                  |!|j<                  |!j:                  f«      z  }|j7                  «       j9                  t"        j:                  «      d   dz  }"|j7                  «       j9                  t"        j:                  «      d   dz  }#|t        j                  |"|"j<                  |j:                  f«      z  }t        |#j<                  |j:                  «      }$|t        j                  |$|$t        d|j:                  |j:                  z
  dz  «      z   «      z  }t        ||
t        j                  ¬«      }%t)        «       }&t        j                  ||j<                  |j:                  f«      jA                  tC        |	d z  df«      «      }'|'jA                  tC        |d!z  df«      «      }(|'jA                  tC        d|z  d!z  df«      «      })|&t+        |'d"z  «      t)        t-        j.                  d#|	dz  tD        jF                  tD        jH                  f¬$«      j2                  «      z  z  }&|&t+        |'dz  «      t)        t-        j.                  ||	dz  tD        jF                  tD        jH                  f¬$«      j2                  «      z  z  }&|&t+        |'d%z  «      t)        t-        j.                  d&|	dz  tD        jF                  tD        jH                  f¬$«      j2                  «      z  z  }&|&t+        |'dz  «      t)        t-        j.                  |jK                  «       |	dz  tD        jF                  tD        jH                  f¬$«      j2                  «      z  z  }&|&t+        |'dz  «      t)        t-        j.                  d'|	dz  tD        jF                  tD        jH                  f¬$«      j2                  «      z  z  }&|&t+        |'dz  «      t)        t-        j.                  d(t1        |«      z   |	dz  tD        jF                  tD        jH                  f¬$«      j2                  «      z  z  }&|&t+        |(d)z  «      t)        t-        j.                  ||	tD        jF                  tD        jH                  f¬$«      j2                  «      z  z  }&|&t+        |(dz  «      t)        t-        j.                  ||	tD        jF                  tD        jH                  f¬$«      j2                  «      z  z  }&|&t+        |(dz  «      t)        t-        j.                  d*|	dz  tD        jF                  tD        jH                  f¬$«      j2                  «      z  z  }&|&t+        |(dz  «      t)        t-        j.                  ||	dz  tD        jF                  tD        jH                  f¬$«      j2                  «      z  z  }&|&t+        |)dz  «      t)        t-        j.                  d+|	dz  tD        jF                  tD        jH                  f¬$«      j2                  «      z  z  }&|�g|&t+        |)dz  «      t)        t-        j.                  t1        |«      |	dz  tD        jF                  tD        jH                  f¬$«      j2                  «      z  z  }&t-        ||||%|&g¬,«      }*tL        ‰+| ��  |*dd |¬-«       y ).Nr   rg   r8   rj   rB   )r   r9   rä   é   éZ   g      Ø¿g      À¿g      À?g      Ø?)r   r;   rg   r8   é   )g      à¿rˆ   g      ø?r;   g«ªªªªªÚ¿g      Ð¿gUUUUUUµ¿gUUUUUUµ?g      Ð?g«ªªªªªÚ?)r   r;   rg   r8   rJ  rA   )ÚFÚEÚDÚCÚBÚArˆ   ré   g      è?Fr»   gUUUUUUÕ?gUUUUUUå?rA   r9   gUUUUUUí?zDESIGNED BY:r>   g«ªªªªªâ?zDATE:zSCALE:z1:g«ªªªªªê?zDRAWING NUMBER:zSHEET:r  rê   )(r   Útodayr2  Ú
page_sizesÚmarginr0   rÀ   r*   r   rl   Úrangern   rò   r-   r¿   r   Úrotater   ÚZrk   r.   r   r+   Ú	make_textr¢   Úwrappedrñ   rÊ   Úsort_byÚYrK   r,   rm   r   r   ÚMINrî   Ú	isoformatrL   rM   ),rO   r>  r?  r@  rA  rB  rC  rD  rE  rF  r‰   r6   Úpage_dimÚframe_widthÚframe_heightÚ
frame_wireÚframeÚ
tick_linesr  rÓ   ÚposÚticksÚgrid_labelsÚ	y_centersrÅ   Úx_indexÚ	x_centersÚ
grid_labelÚy_indexÚbf_pnt1Úbf_pnt2Úbox_frame_curveÚbf_pnt3Úbf_pnt4Úbf_pnt5Úbf_pnt6ÚstartÚ	box_frameÚlabelsÚt_base_line1Út_base_line2Út_base_line3Útechnical_drawingrR   s,                                              €rS   rM   zTechnicalDrawing.__init__{  s	  ø€ ð  ÐÜŸ*™*›,ˆKä#×.Ñ.¨yÑ9ˆà˜q‘k AÔ(8×(?Ñ(?Ñ$?Ñ?À!ÐFWÑBWÑWˆØ˜;‘¨Ñ*ˆÜ×&Ñ&à� Ñ! <°!Ñ#3Ð4Ø˜q‘ ,°Ñ"2Ð3Ø˜q‘ < -°!Ñ"3Ð4Ø� Ñ! L =°1Ñ#4Ð5ð	ó
ˆ
ô �j *´4·<±<Ô@ˆàˆ
Ü�r–ˆAØ�NÑ"ØØ˜"‘fˆGØ×(Ñ(¨Ó1ˆCØ×ÑÜ—‘ØØÜÐ.°Ó2×9Ñ9ÜŸ™ 
× ;Ñ ;¸GÓ DÀrÑ Ióñóõð ô �j *´4·<±<Ô@ˆä“hˆØ 6¨e¸Ñ>ˆ	Ü˜1–XˆEÛ&�ØœsØ˜{¨SÐ3DÑ-DÑDÑEØ˜eÑ$ |Ñ3ó ô Ü×&Ñ&¤s¨5°1©9£~Ð7HÓI×QÑQóñ ñ ‘ñ 'ð ð ØØØØØñ
ˆ	ô 'Ò'EÖF‰MˆAˆzÛ&�ØœsØ˜a‘L ;Ñ.Ø˜|¨cÐ4EÑ.EÑEÑFó ô œ8×-Ñ-¨jÐ:KÓL×TÑTÓUñ Vñ V‘ñ 'ð Gð ×"Ñ"Ó$×,Ñ,¬T¯V©VÓ4°QÑ7¸#Ñ=ˆØ×"Ñ"Ó$×,Ñ,¬T¯V©VÓ4°RÑ8¸4Ñ?ˆÜ×+Ñ+Ø�w—y‘y '§)¡)Ð,¨gÐ6¸eô
ˆð "×'Ñ'Ó)×1Ñ1´$·&±&Ó9¸!Ñ<ÀÑFˆØ!×'Ñ'Ó)×1Ñ1´$·&±&Ó9¸!Ñ<ÀÑFˆÜ›'ØÜ�N‰N˜7 W§Y¡Y°·	±	Ð$:Ó;ð%
ñ 
ˆð 	œ4Ÿ>™>¨'°G·I±I¸w¿y¹yÐ3IÓJÑJˆØ!×'Ñ'Ó)×1Ñ1´$·&±&Ó9¸"Ñ=ÀÑGˆØ!×'Ñ'Ó)×1Ñ1´$·&±&Ó9¸"Ñ=ÀÑGˆØœ4Ÿ>™>¨'°G·I±I¸w¿y¹yÐ3IÓJÑJˆÜ�w—y‘y '§)¡)Ó,ˆØœ4Ÿ>™>Ø�5œ6 ! g§i¡i°'·)±)Ñ&;¸qÑ%@ÓAÑAó
ñ 	
ˆô ˜/¨:¼D¿L¹LÔIˆ	ä“ˆÜ—~‘~ g°·	±	¸7¿9¹9Ð/EÓF×LÑLÜÐ'¨!Ñ+¨QÐ/Ó0ó
ˆð $×)Ñ)¬(°KÀ!±OÀQÐ3GÓ*HÓIˆØ#×)Ñ)¬(°A¸±OÀaÑ4GÈÐ3KÓ*LÓMˆØ”#�l gÑ.Ó/´&Ü×ÑØÐ 1°AÑ 5¼e¿i¹iÌÏÉÐ=Vôç‰gó3
ñ 
ñ 	
ˆð
 	”#�l fÑ-Ó.´Ü×ÑØÐ.°Ñ2¼5¿9¹9ÄeÇlÁlÐ:Sôç‰gó2
ñ 
ñ 	
ˆð
 	”#�l fÑ-Ó.´Ü×ÑØÐ*¨QÑ.´u·y±yÄ%Ç,Á,Ð6Oôç‰gó2
ñ 
ñ 	
ˆð
 	”#�l fÑ-Ó.´Ü×ÑØ×%Ñ%Ó'Ø! AÑ%Ü—y‘y¤%§,¡,Ð/ô÷ ‰gó2
ñ 
ñ 	
ˆð 	”#�l fÑ-Ó.´Ü×ÑØÐ+¨aÑ/¼¿	¹	Ä5Ç<Á<Ð7Pôç‰gó2
ñ 
ñ 	
ˆð
 	”#�l fÑ-Ó.´Ü×ÑØ”s˜=Ó)Ñ)Ø! AÑ%Ü—y‘y¤%§,¡,Ð/ô÷ ‰gó2
ñ 
ñ 	
ˆð 	”#�l gÑ.Ó/´&Ü×ÑØÐ(´·±¼E¿L¹LÐ0Iôç‰gó3
ñ 
ñ 	
ˆð
 	”#�l fÑ-Ó.´Ü×ÑØÐ,´U·Y±YÄÇÁÐ4Môç‰gó2
ñ 
ñ 	
ˆð
 	”#�l fÑ-Ó.´Ü×ÑØ!Ø! AÑ%Ü—y‘y¤%§,¡,Ð/ô÷ ‰gó2
ñ 
ñ 	
ˆð 	”#�l fÑ-Ó.´Ü×ÑØÐ 1°AÑ 5¼e¿i¹iÌÏÉÐ=Vôç‰gó2
ñ 
ñ 	
ˆð
 	”#�l fÑ-Ó.´Ü×ÑØÐ+¨aÑ/¼¿	¹	Ä5Ç<Á<Ð7Pôç‰gó2
ñ 
ñ 	
ˆð
 Ð#Ø”c˜,¨&Ñ1Ó2´VÜ×"Ñ"Ü˜Ó%Ø%¨Ñ)Ü Ÿ9™9¤e§l¡lÐ3ô÷ ‘'ó6ñ ñ ˆFô %Ø˜U K°¸FÐCô
Ðô 	‰ÑÐ.¸À$ÈTÐÕRr^   )rT   rU   rV   rW   r   ÚA0r   ÚA1ÚA2ÚA3ÚA4ÚA5ÚA6ÚA7ÚA8ÚA9ÚA10ÚLETTERr   ÚLEGALÚLEDGERrR  rS  r   rZ   r¢   r   ro   r[   rM   r\   r]   s   @rS   r2  r2  V  s  ø„ ñð& 	�‰�d˜R‘i  r¡Ð*Ø�‰�c˜B‘h  b¡Ð)Ø�‰�c˜B‘h  b¡Ð)Ø�‰�c˜B‘h  b¡Ð)Ø�‰�c˜B‘h  b¡Ð)Ø�‰�c˜B‘h ¨¡
Ð+Ø�‰�e˜b‘j #¨¡(Ð+Ø�‰�c˜B‘h  R¡Ð(Ø�‰�b˜2‘g˜r B™wÐ'Ø�‰�b˜2‘g˜r B™wÐ'Ø�‰�r˜B‘w  R¡Ð(Ø�‰˜"˜r™' 3¨¡8Ð,Ø�‰˜˜b™ #¨¡(Ð+Ø�‰˜"˜r™' 2¨¡7Ð+ð€Jð  �‰V€Fð 'Ø#'Ø&Ÿk™kØØ$Ø%Ø#'Ø"Ø#'ØØ—X‘XñsSàðsSð ˜D‘[ðsSð ð	sSð
 ðsSð ðsSð ðsSð ˜D‘jðsSð ðsSð !ðsSð ðsSð ÷sSñ sSr^   r2  N)JrW   Údataclassesr   Údatetimer   Úmathr   r   r   r   r	   Útypingr
   r   r   Úcollections.abcr   Úbuild123d.build_commonr   r   Úbuild123d.build_enumsr   r   r   r   r   r   r   r   r   Úbuild123d.build_liner   Úbuild123d.build_sketchr   Úbuild123d.geometryr   r   r   r   r   r    Úbuild123d.objects_curver!   r"   Úbuild123d.objects_sketchr#   r$   r%   Úbuild123d.operations_genericr&   r'   r(   Úbuild123d.operations_sketchr)   r*   Úbuild123d.topologyr+   r,   r-   r.   r/   r0   r2   r`   r®   r[   r{   rØ   Úlistr|   r~   rÞ   r  r2  rÜ   r^   rS   Ú<module>r—     s  ðòõ8 "Ý ß /Õ /ß ,Ñ ,å $ç )÷
÷ 
õ 
õ +Ý .ß M× Mß 4ß DÑ Dß >Ñ >ß 8ß J× Jô'VÐ ô 'VôT.CÐô .Cðb  ‘¨¨u°e¸UÐ/BÑ)CÑC€	ˆ9Ó CØ )Ø  4™K¨$¨y©/Ñ9€�	Ó 9Ø )ð ÷hEð hEó ðhEôVZWÐ$ô ZWôzoOÐ$ô oOôdXSÐ'õ XSr^   