
    ljZ                    z   d Z ddlmZ g dZddlmZ ddlmZmZ ddl	Z
ddlmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZmZ ddlm Z m!Z!m"Z" ddl#m$Z$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+ ddl,T ddl-m.Z. ddl/m0Z0m1Z1 ddlm2Z2m3Z3m4Z4 ddl5m6Z6m7Z7 ddl8m9Z9m:Z:m;Z; ddl<m=Z=m>Z>m?Z?m@Z@ ddlAmBZB  G d de)          ZC G d  d!e)          ZD G d" d#e          ZE G d$ d%e!          ZF G d& d'e          ZG G d( d)e'          ZH G d* d+e          ZI G d, d-e          ZJ G d. d/e          ZKdS )0aa  Animations drawing attention to particular mobjects.

Examples
--------

.. manim:: Indications

    class Indications(Scene):
        def construct(self):
            indications = [ApplyWave,Circumscribe,Flash,FocusOn,Indicate,ShowPassingFlash,Wiggle]
            names = [Tex(i.__name__).scale(3) for i in indications]

            self.add(names[0])
            for i in range(len(names)):
                if indications[i] is Flash:
                    self.play(Flash(UP))
                elif indications[i] is ShowPassingFlash:
                    self.play(ShowPassingFlash(Underline(names[i])))
                else:
                    self.play(indications[i](names[i]))
                self.play(AnimationGroup(
                    FadeOut(names[i], shift=UP*1.5),
                    FadeIn(names[(i+1)%len(names)], shift=UP*1.5),
                ))

    )annotations)	FocusOnIndicateFlashShowPassingFlash'ShowPassingFlashWithThinningStrokeWidth	ApplyWaveCircumscribeWiggleBlink)Iterable)AnySelfN)CircleDot)Line)	Rectangle)SurroundingRectangle)OpenGLMobject)Scene   )config)	Animation)AnimationGroup
Succession)CreateShowPartialUncreate)FadeInFadeOut)Homotopy)	Transform)UpdateFromFunc)*)Mobject)VGroupVMobject)Point3DPoint3DLikeVector3DLike)interpolateinverse_interpolate)GREYPURE_YELLOWParsableManimColor)RateFunctionsmooththere_and_backwiggle)	normalizec                  4     e Zd ZdZdedfd fdZddZ xZS )r   a  Shrink a spotlight to a position.

    Parameters
    ----------
    focus_point
        The point at which to shrink the spotlight. If it is a :class:`.~Mobject` its center will be used.
    opacity
        The opacity of the spotlight.
    color
        The color of the spotlight.
    run_time
        The duration of the animation.

    Examples
    --------
    .. manim:: UsingFocusOn

        class UsingFocusOn(Scene):
            def construct(self):
                dot = Dot(color=PURE_YELLOW).shift(DOWN)
                self.add(Tex("Focusing on the dot below:"), dot)
                self.play(FocusOn(dot))
                self.wait()
    皙?r   focus_pointPoint3DLike | Mobjectopacityfloatcolorr/   run_timekwargsr   c                    || _         || _        || _        d}t          t          d         t          d         z   d| j        d          } t                      j        |f||d| d S )NTframe_x_radiusframe_y_radiusr   )radiusstroke_width
fill_colorfill_opacity)r<   remover)r7   r;   r9   r   r   super__init__)	selfr7   r9   r;   r<   r=   rE   starting_dot	__class__s	           U/home/agentuser/manim-venv/lib/python3.11/site-packages/manim/animation/indication.pyrG   zFocusOn.__init__b   s     '
*+f5E.FFz	
 
 
 	T'TTVTTTTT    returnr   c                     t          d          }|                     j         j                   |                     fd           |S )Nr   )rA   )r9   c                8    |                      j                  S N)move_tor7   )drH   s    rK   <lambda>z'FocusOn.create_target.<locals>.<lambda>y   s    43C)D)D rL   )r   set_fillr;   r9   add_updater)rH   
little_dots   ` rK   create_targetzFocusOn.create_targetv   sQ    ]]]
DJ===DDDDEEErL   )
r7   r8   r9   r:   r;   r/   r<   r:   r=   r   )rM   r   )__name__
__module____qualname____doc__r-   rG   rW   __classcell__rJ   s   @rK   r   r   H   sr         8 $(U U U U U U U(       rL   r   c                  4     e Zd ZdZdeefd fdZddZ xZS )r   a  Indicate a Mobject by temporarily resizing and recoloring it.

    Parameters
    ----------
    mobject
        The mobject to indicate.
    scale_factor
        The factor by which the mobject will be temporally scaled
    color
        The color the mobject temporally takes.
    rate_func
        The function defining the animation progress at every point in time.
    kwargs
        Additional arguments to be passed to the :class:`~.Succession` constructor

    Examples
    --------
    .. manim:: UsingIndicate

        class UsingIndicate(Scene):
            def construct(self):
                tex = Tex("Indicate").scale(3)
                self.play(Indicate(tex))
                self.wait()
    g333333?mobjectr%   scale_factorr:   r;   r/   	rate_funcr0   r=   r   c                \    || _         || _         t                      j        |fd|i| d S )Nra   )r;   r`   rF   rG   )rH   r_   r`   r;   ra   r=   rJ   s         rK   rG   zIndicate.__init__   s>     
(@@I@@@@@@rL   rM   Mobject | OpenGLMobjectc                    | j                                         }|                    | j                   |                    | j                   |S rP   )r_   copyscaler`   	set_colorr;   )rH   targets     rK   rW   zIndicate.create_target   sE    ""$$T&'''$$$rL   )
r_   r%   r`   r:   r;   r/   ra   r0   r=   r   )rM   rc   )	rX   rY   rZ   r[   r.   r2   rG   rW   r\   r]   s   @rK   r   r   }   sr         : "$/"0
A 
A 
A 
A 
A 
A 
A       rL   r   c                  D     e Zd ZdZddddeddfd fdZddZddZ xZS )r   a  Send out lines in all directions.

    Parameters
    ----------
    point
        The center of the flash lines. If it is a :class:`.~Mobject` its center will be used.
    line_length
        The length of the flash lines.
    num_lines
        The number of flash lines.
    flash_radius
        The distance from `point` at which the flash lines start.
    line_stroke_width
        The stroke width of the flash lines.
    color
        The color of the flash lines.
    time_width
        The time width used for the flash lines. See :class:`.~ShowPassingFlash` for more details.
    run_time
        The duration of the animation.
    kwargs
        Additional arguments to be passed to the :class:`~.Succession` constructor

    Examples
    --------
    .. manim:: UsingFlash

        class UsingFlash(Scene):
            def construct(self):
                dot = Dot(color=PURE_YELLOW).shift(DOWN)
                self.add(Tex("Flash the dot below:"), dot)
                self.play(Flash(dot))
                self.wait()

    .. manim:: FlashOnCircle

        class FlashOnCircle(Scene):
            def construct(self):
                radius = 2
                circle = Circle(radius)
                self.add(circle)
                self.play(Flash(
                    circle, line_length=1,
                    num_lines=30, color=RED,
                    flash_radius=radius+SMALL_BUFF,
                    time_width=0.3, run_time=2,
                    rate_func = rush_from
                ))
    r6      皙?            ?pointr8   line_lengthr:   	num_linesintflash_radiusline_stroke_widthr;   r/   
time_widthr<   r=   r   c	                   t          |t                    r|                                | _        nt	          j        |          | _        || _        || _        || _        || _	        || _
        || _        || _        |	| _        |                                 | _        |                                 }
 t#                      j        |
d| j        i d S )Ngroup)
isinstancer%   
get_centerro   npasarrayr;   rp   rq   rs   rt   r<   ru   animation_configcreate_lineslinescreate_line_animsrF   rG   )rH   ro   rp   rq   rs   rt   r;   ru   r<   r=   
animationsrJ   s              rK   rG   zFlash.__init__   s     eW%% 	+"'"2"2"4"4DJJE**DJ
&"(!2 $ &&&((
++--
*7DJ77777rL   rM   r&   c                   t                      }t          j        dt          t          | j        z            D ]}t          | j        | j        | j        t          z  z             }|	                    | j
        t          z             |                    || j                   |                    |           |                    | j                   |                    | j                   |S )Nr   about_pointwidth)r&   rz   arangeTAUrq   r   ro   rp   RIGHTshiftrs   rotateaddrg   r;   
set_strokert   )rH   r~   anglelines       rK   r}   zFlash.create_lines   s    Yq#sT^';<< 	 	E
DJ1AE1I$IJJDJJ)U2333KK4:K666IIdOOOO
###t5666rL   Iterable[ShowPassingFlash]c                *      fd j         D             S )Nc                N    g | ]!}t          |fj        j        d j        "S ))ru   r<   )r   ru   r<   r|   ).0r   rH   s     rK   
<listcomp>z+Flash.create_line_anims.<locals>.<listcomp>  sY     
 
 
  ?  '	 
 
 
rL   )r~   rH   s   `rK   r   zFlash.create_line_anims  s2    
 
 
 
 

 
 
 	
rL   )ro   r8   rp   r:   rq   rr   rs   r:   rt   rr   r;   r/   ru   r:   r<   r:   r=   r   )rM   r&   )rM   r   )	rX   rY   rZ   r[   r.   rG   r}   r   r\   r]   s   @rK   r   r      s        0 0j !!!"$/8 8 8 8 8 8 8:	 	 	 		
 	
 	
 	
 	
 	
 	
 	
rL   r   c                  <     e Zd ZdZ	 dd fdZddZd fdZ xZS )r   a  Show only a sliver of the VMobject each frame.

    Parameters
    ----------
    mobject
        The mobject whose stroke is animated.
    time_width
        The length of the sliver relative to the length of the stroke.

    Examples
    --------
    .. manim:: TimeWidthValues

        class TimeWidthValues(Scene):
            def construct(self):
                p = RegularPolygon(5, color=DARK_GRAY, stroke_width=6).scale(3)
                lbl = VMobject()
                self.add(p, lbl)
                p = p.copy().set_color(BLUE)
                for time_width in [0.2, 0.5, 1, 2]:
                    lbl.become(Tex(r"\texttt{time\_width={{%.1f}}}"%time_width))
                    self.play(ShowPassingFlash(
                        p.copy().set_color(BLUE),
                        run_time=2,
                        time_width=time_width
                    ))

    See Also
    --------
    :class:`~.Create`

    rk   r_   r'   ru   r:   r=   r   rM   Nonec                P    || _          t                      j        |fddd| d S )NT)rE   
introducer)ru   rF   rG   )rH   r_   ru   r=   rJ   s       rK   rG   zShowPassingFlash.__init__4  s8     %J$4JJ6JJJJJrL   alphatuple[float, float]c                    | j         }t          dd|z   |          }||z
  }t          |d          }t          |d          }||fS Nr   rm   )ru   r+   minmax)rH   r   twupperlowers        rK   _get_boundszShowPassingFlash._get_bounds:  sK    _Aq2vu--
E1E1u~rL   scener   c                    t                                          |           |                                 D ]\  }}|                    |dd           d S r   )rF   clean_up_from_sceneget_all_families_zippedpointwise_become_partial)rH   r   submobstartrJ   s       rK   r   z$ShowPassingFlash.clean_up_from_sceneB  s_    ##E***!99;; 	9 	9MFE++E1a8888	9 	9rL   )rk   )r_   r'   ru   r:   r=   r   rM   r   )r   r:   rM   r   )r   r   rM   r   )rX   rY   rZ   r[   rG   r   r   r\   r]   s   @rK   r   r     s         D 69K K K K K K K   9 9 9 9 9 9 9 9 9 9rL   r   c                  (     e Zd Z	 	 	 dd fdZ xZS )r   
   rk   Tvmobjectr'   
n_segmentsrr   ru   r:   rE   boolr=   r   c                ^   || _         || _        || _                                        }                    d| j                  } t                      j        fdt          t          j	        d|| j                   t          j	        |d| j                   d          D               d S )Nru   c              3     K   | ]<\  }}t                                                              |           fd|iV  =dS )r   ru   N)r   re   r   )r   rB   ru   r=   r   s      rK   	<genexpr>zCShowPassingFlashWithThinningStrokeWidth.__init__.<locals>.<genexpr>W  sz         -L* !MMOO..\.BB )       rL   r   T)strict)
r   ru   rE   get_stroke_widthpoprF   rG   ziprz   linspace)	rH   r   r   ru   rE   r=   max_stroke_widthmax_time_widthrJ   s	    `   `  rK   rG   z0ShowPassingFlashWithThinningStrokeWidth.__init__I  s     %$#4466L$/BB     14K#3T_EEK4?CC1 1 1  	
 	
 	
 	
rL   )r   rk   T)
r   r'   r   rr   ru   r:   rE   r   r=   r   )rX   rY   rZ   rG   r\   r]   s   @rK   r   r   H  sM         
 
 
 
 
 
 
 
 
 
 
rL   r   c                  2     e Zd ZdZededddfd fdZ xZS )r	   a`  Send a wave through the Mobject distorting it temporarily.

    Parameters
    ----------
    mobject
        The mobject to be distorted.
    direction
        The direction in which the wave nudges points of the shape
    amplitude
        The distance points of the shape get shifted
    wave_func
        The function defining the shape of one wave flank.
    time_width
        The length of the wave relative to the width of the mobject.
    ripples
        The number of ripples of the wave
    run_time
        The duration of the animation.

    Examples
    --------

    .. manim:: ApplyingWaves

        class ApplyingWaves(Scene):
            def construct(self):
                tex = Tex("WaveWaveWaveWaveWave").scale(2)
                self.play(ApplyWave(tex))
                self.play(ApplyWave(
                    tex,
                    direction=RIGHT,
                    time_width=0.5,
                    amplitude=0.3
                ))
                self.play(ApplyWave(
                    tex,
                    rate_func=linear,
                    ripples=4
                ))

    r6   rm   r   r_   r%   	directionr*   	amplituder:   	wave_funcr0   ru   ripplesrr   r<   r=   r   c                   
 |                                 d         |                                d         |t          |          z  
dfdd
fd
}	 t                      j        |	|fd|i| d S )Nr   tr:   rM   c                b   d| z
  } | dk    s| dk    rdS dz  }t          | |z            }|dk    r | |z            S ||dz
  k    r%| ||z  z  } d | |z            z
  ddz  z  dz
  z  S t          |dz
  dz            }| d|z  dz   |z  z  } dd | z            z  z
  dd|dz  z  z
  z  S )Nrm   r   r   )rr   )r   phasesphaser   r   s      rK   wavez ApplyWave.__init__.<locals>.wave  s   > AA Avvaqq[FF
OOEzz yV,,,&1*$$ UV^#IIa&j111a7Q;6G!6KLL UQY!O,,a%i!mv-- A		!g+ 6 6661qUaK?P;PQQrL   xyztuple[float, float, float]c                    t          dd
z   |          }|
z
  }t          |           }t          |||          } |          z  }t          j        | ||g          |z   }	|	S r   )r+   r,   rz   array)r   r   r   r   r   r   
relative_x
wave_phasenudgereturn_valueru   vectr   x_maxx_mins             rK   homotopyz$ApplyWave.__init__.<locals>.homotopy  sz      1z>155EJ&E,UE1==J,UE:FFJD$$t+E79xAq	7J7JU7RLrL   r<   )r   r:   rM   r:   )
r   r:   r   r:   r   r:   r   r:   rM   r   )get_left	get_rightr4   rF   rG   )rH   r_   r   r   r   ru   r   r<   r=   r   r   r   r   r   rJ   s       ```   @@@@rK   rG   zApplyWave.__init__  s       ""1%!!##A&9Y///5	R 5	R 5	R 5	R 5	R 5	R 5	Rn	  	  	  	  	  	  	  	  	  	  	7HHXHHHHHHrL   )r_   r%   r   r*   r   r:   r   r0   ru   r:   r   rr   r<   r:   r=   r   )rX   rY   rZ   r[   UPr1   rG   r\   r]   s   @rK   r	   r	   f  sw        ( (Z #%"(TI TI TI TI TI TI TI TI TI TI TIrL   r	   c                  P     e Zd ZdZddez  ddddfd fdZddZddZd dZ xZ	S )!r   a  Wiggle a Mobject.

    Parameters
    ----------
    mobject
        The mobject to wiggle.
    scale_value
        The factor by which the mobject will be temporarily scaled.
    rotation_angle
        The wiggle angle.
    n_wiggles
        The number of wiggles.
    scale_about_point
        The point about which the mobject gets scaled.
    rotate_about_point
        The point around which the mobject gets rotated.
    run_time
        The duration of the animation

    Examples
    --------

    .. manim:: ApplyingWaves

        class ApplyingWaves(Scene):
            def construct(self):
                tex = Tex("Wiggle").scale(3)
                self.play(Wiggle(tex))
                self.wait()

    g?g{Gz?   Nr   r_   r%   scale_valuer:   rotation_angle	n_wigglesrr   scale_about_pointPoint3DLike | Nonerotate_about_pointr<   r=   r   c                    || _         || _        || _        || _        |t	          j        |          | _        || _        |t	          j        |          | _         t                      j        |fd|i| d S )Nr<   )	r   r   r   r   rz   r   r   rF   rG   )
rH   r_   r   r   r   r   r   r<   r=   rJ   s
            rK   rG   zWiggle.__init__	  s     ',"!2(%'X.?%@%@D""4)&(h/A&B&BD#>>8>v>>>>>rL   rM   r(   c                P    | j         | j                                        S | j         S rP   )r   r_   ry   r   s    rK   get_scale_about_pointzWiggle.get_scale_about_point  s(    !)<**,,,%%rL   c                P    | j         | j                                        S | j         S rP   )r   r_   ry   r   s    rK   get_rotate_about_pointzWiggle.get_rotate_about_point$  s(    "*<**,,,&&rL   
submobjectstarting_submobjectr   r   c           	     L   |j         |j         d d d d f<   |                    t          d| j        t	          |                    |                                            |                    t          || j                  | j	        z  | 
                                           | S )Nrm   r   )pointsrf   r+   r   r2   r   r   r3   r   r   r   )rH   r   r   r   s       rK   interpolate_submobjectzWiggle.interpolate_submobject)  s     #6"<
!!!QQQ$4+^E-B-BCC2244 	 	
 	
 	
 	5$.))D,??3355 	 	
 	
 	
 rL   )r_   r%   r   r:   r   r:   r   rr   r   r   r   r   r<   r:   r=   r   )rM   r(   )r   r%   r   r%   r   r:   rM   r   )
rX   rY   rZ   r[   r   rG   r   r   r   r\   r]   s   @rK   r   r     s         F ! $s
0415? ? ? ? ? ? ?,& & & &
' ' ' '
       rL   r   c                  6     e Zd ZdZedddeedefd fdZ xZ	S )r
   ai  Draw a temporary line surrounding the mobject.

    Parameters
    ----------
    mobject
        The mobject to be circumscribed.
    shape
        The shape with which to surround the given mobject. Should be either
        :class:`~.Rectangle` or :class:`~.Circle`
    fade_in
        Whether to make the surrounding shape to fade in. It will be drawn otherwise.
    fade_out
        Whether to make the surrounding shape to fade out. It will be undrawn otherwise.
    time_width
        The time_width of the drawing and undrawing. Gets ignored if either `fade_in` or `fade_out` is `True`.
    buff
        The distance between the surrounding shape and the given mobject.
    color
        The color of the surrounding shape.
    run_time
        The duration of the entire animation.
    kwargs
        Additional arguments to be passed to the :class:`~.Succession` constructor

    Examples
    --------

    .. manim:: UsingCircumscribe

        class UsingCircumscribe(Scene):
            def construct(self):
                lbl = Tex(r"Circum-\\scribe").scale(2)
                self.add(lbl)
                self.play(Circumscribe(lbl))
                self.play(Circumscribe(lbl, Circle))
                self.play(Circumscribe(lbl, fade_out=True))
                self.play(Circumscribe(lbl, time_width=2))
                self.play(Circumscribe(lbl, Circle, True))

    Fg333333?rm   r_   r%   shapetype[Rectangle] | type[Circle]fade_inr   fade_outru   r:   buffr;   r/   r<   rB   r=   r   c
                   |t           u rt          ||||	          }nd|t          u rLt          ||	                              |d          }|j        dz  }|                    ||z   |z             nt          d          |rC|rA t                      j        t          ||dz            t          ||dz            fi |
 d S |rU|                                  t                      j        t          ||dz            t          ||dz            fi |
 d S |rA t                      j        t          ||dz            t          ||dz            fi |
 d S  t                      j        t          |||          fi |
 d S )N)r;   r   rB   )r;   rB   rm   )buffer_factorr   z+shape should be either Rectangle or Circle.)r<   )r   r   r   surroundr   rf   
ValueErrorrF   rG   r   r    reverse_directionr   r   r   )rH   r_   r   r   r   ru   r   r;   r<   rB   r=   framerA   rJ   s                rK   rG   zCircumscribe.__init__e  s4    I3G)	4 4 4EE f__\BBBKK L  E [1_FKK$&01111JKKK 	x 	EGGux!|4441555      
  	##%%%EGGux!|444A666      
  		EGGux!|4441555       EGG 
XFFF JP    rL   )r_   r%   r   r   r   r   r   r   ru   r:   r   r:   r;   r/   r<   r:   rB   r:   r=   r   )
rX   rY   rZ   r[   r   
SMALL_BUFFr.   DEFAULT_STROKE_WIDTHrG   r\   r]   s   @rK   r
   r
   ;  sg        ' 'X 1: $/24 4 4 4 4 4 4 4 4 4 4rL   r
   c                  .     e Zd ZdZ	 	 	 	 dd fdZ xZS )r   a  Blink the mobject.

    Parameters
    ----------
    mobject
        The mobject to be blinked.
    time_on
        The duration that the mobject is shown for one blink.
    time_off
        The duration that the mobject is hidden for one blink.
    blinks
        The number of blinks
    hide_at_end
        Whether to hide the mobject at the end of the animation.
    kwargs
        Additional arguments to be passed to the :class:`~.Succession` constructor.

    Examples
    --------

    .. manim:: BlinkingExample

        class BlinkingExample(Scene):
            def construct(self):
                text = Text("Blinking").scale(1.5)
                self.add(text)
                self.play(Blink(text, blinks=3))

          ?rm   Fr_   r%   time_onr:   time_offblinksrr   hide_at_endr   r=   r   c                    t          |d |          t          |d |          g|z  }|s&|                    t          |d |                      t                      j        |i | d S )Nc                ,    |                      d          S Nrn   set_opacitymobs    rK   rS   z Blink.__init__.<locals>.<lambda>      COOC,@,@ rL   )update_functionr<   c                ,    |                      d          S )Ng        r   r   s    rK   rS   z Blink.__init__.<locals>.<lambda>  r  rL   c                ,    |                      d          S r   r   r   s    rK   rS   z Blink.__init__.<locals>.<lambda>  s    0D0D rL   )r#   appendrF   rG   )	rH   r_   r   r   r   r   r=   r   rJ   s	           rK   rG   zBlink.__init__  s      @ @   
  @ @!  
 
  	$D$D$     	*//////rL   )r   r   rm   F)r_   r%   r   r:   r   r:   r   rr   r   r   r=   r   )rX   rY   rZ   r[   rG   r\   r]   s   @rK   r   r     s[         B !0 0 0 0 0 0 0 0 0 0 0rL   r   )Lr[   
__future__r   __all__collections.abcr   typingr   r   numpyrz   manim.mobject.geometry.arcr   r   manim.mobject.geometry.liner   manim.mobject.geometry.polygramr   %manim.mobject.geometry.shape_matchersr   #manim.mobject.opengl.opengl_mobjectr   manim.scene.scener    r   animation.animationr   animation.compositionr   r   animation.creationr   r   r   animation.fadingr   r    animation.movementr!   animation.transformr"   animation.updaters.updater#   	constantsmobject.mobjectr%    mobject.types.vectorized_mobjectr&   r'   r(   r)   r*   utils.bezierr+   r,   utils.colorr-   r.   r/   utils.rate_functionsr0   r1   r2   r3   utils.space_opsr4   r   r   r   r   r   r	   r   r
   r    rL   rK   <module>r"     s   6 # " " " " "
 
 
 % $ $ $ $ $             2 2 2 2 2 2 2 2 , , , , , , 5 5 5 5 5 5 F F F F F F = = = = = = # # # # # #       + + + + + + > > > > > > > > > > > > > > > > > > . . . . . . . . ) ) ) ) ) ) + + + + + + 6 6 6 6 6 6     % % % % % % ? ? ? ? ? ? ? ? 7 7 7 7 7 7 7 7 7 7 ; ; ; ; ; ; ; ; ? ? ? ? ? ? ? ? ? ? O O O O O O O O O O O O ' ' ' ' ' '2 2 2 2 2i 2 2 2j+ + + + +y + + +\d
 d
 d
 d
 d
N d
 d
 d
N39 39 39 39 39{ 39 39 39l
 
 
 
 
n 
 
 
<I I I I I I I IDP P P P PY P P Pf^ ^ ^ ^ ^: ^ ^ ^B>0 >0 >0 >0 >0J >0 >0 >0 >0 >0rL   