
    `i|              
       
   d dl Z d dlmZmZmZ d dlmZ  e j        ed          Z e j        eped          Z	 e j        ed          Z
 e            r$d dlZd dlmZ d dlZdeej                 fd	Zej        	 	 dSd            Zej        	 	 dSd            Zej        	 	 	 	 dTd            Zej        	 	 	 	 dTd            Z ej         ej        d
didd           ej        d
didd           ej        d
didd           ej        d
didd          gg           ej        	 	 dSd                        Z ej         ej        d
didd           ej        d
didd           ej        d
didd           ej        d
didd          gg           ej        	 	 dSd                        Z ej         ej        d
didd          gg           ej        	 	 dSd                        Z ej         ej        ddddd           ej        ddddd           ej        ddddd           ej        ddddd          gg           ej        	 	 	 	 dUd                         Zd! Z ej         ej        d
didd           ej        d
didd          gg d"d#d$ei%          ej        	 	 dSd&                        Zej        	 	 dSd'            Zej        	 	 dSd(            Zej        	 	 	 	 dUd)            Z ej        	 	 dSd*            Z!ej        	 	 	 	 dUd+            Z"ej        	 	 dSd,            Z#ej        	 	 dSd-            Z$ej        	 	 dSd.            Z%ej        	 	 dSd/            Z&ej        d0             Z'ej        	 	 	 	 dVd2            Z(ej        	 	 	 	 dWd5            Z)ej        	 	 	 	 dXd8            Z*ej        	 	 	 	 dXd9            Z+ej        d
ej,        fd:            Z-ej        d
ej,        fd;            Z.d d<l/m0Z0m1Z1 ej        	 	 dSd=            Z2ej        	 	 dSd>            Z3ej        	 	 dSd?            Z4ej        	 	 dSd@            Z5ej        	 	 dSdA            Z6 ej         ej        dddddBdd           ej        dddCddBdd          gg dD          ej        dEej,        dFej,        dGej,        dHej,        fdI                        Z7ej        d
ej,        fdJ            Z8ej        d
ej,        fdK            Z9ej        d
ej,        fdL            Z:ej        d
ej,        fdM            Z;ej        	 	 dSdN            Z<	 dYdPee=         dQe>fdRZ?dS dS )Z    N)HAS_CUDA_AND_TRITONHAS_GPUHAS_XPU_AND_TRITON)
has_tritonzrequires cuda and tritonzrequires gpu and tritonzrequires gpu)languagereturnc                     t           j        j        r?t          j        dddddddddd          t          j        dddddddddd          g} n8t          j        ddddd	dd          t          j        ddd
dd	dd          g} | S )N            )BLOCK_SIZE_MBLOCK_SIZE_NBLOCK_SIZE_KGROUP_SIZE_Mmatrix_instr_nonkdimwaves_per_eukpack
num_stages	num_warps   @   r   r   r   r          )torchversionhiptritonConfig)configss    x/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torch/testing/_internal/triton_utils.py_get_strange_configsr$      s   = 3	(*(*(*()02()!"   !   (+(*(*()02()!"   !  GG< (*(*(*()	   !	 	 	 (+(*(*()	   !	 	 	G,     
BLOCK_SIZEtl.constexprc                    t          j        d          }||z  }|t          j        d|          z   }||k     }t          j        | |z   |          }	t          j        ||z   |          }
|	|
z   }t          j        ||z   ||           d S Nr   axismasktl
program_idarangeloadstorein_ptr0in_ptr1out_ptr
n_elementsr&   pidblock_startoffsetsr-   xyoutputs               r#   
add_kernelr?   S        m###J&	!Z 8 88#GGg%D111GGg%D111Q
7"F666666r%   c                    t          j        d          }||z  }|t          j        d|          z   }||k     }t          j        | |z   |          }	t          j        ||z   |          }
|	|
z
  }t          j        ||z   ||           d S r)   r.   r4   s               r#   
sub_kernelrB   d   r@   r%   ARGS_PASSEDc                 *   t          j        d          }||z  }|t          j        d|          z   }||k     }	t          j        | |z   |	          }
|dk    rt          j        ||z   |	          }|
|z   }n|
}t          j        ||z   ||	           d S Nr   r*   r,   twor.   )r5   r6   r7   r8   rC   r&   r9   r:   r;   r-   r<   r=   r>   s                r#   add_kernel_with_optional_paramrG   u   s     m###J&	!Z 8 88#GGg%D111%')555AUFFF
7"F666666r%   c                 6   t          j        d          }||z  }|t          j        d|          z   }	|	|k     }
t          j        | |	|z  z   |
          }|dk    rt          j        ||	z   |
          }||z   }n|}t          j        ||	|z  z   ||
           d S rE   r.   )r5   r6   r7   r8   striderC   r&   r9   r:   r;   r-   r<   r=   r>   s                 r#   -add_kernel_with_none_param_and_equal_to_1_argrJ      s     m###J&	!Z 8 88#GGg..T:::%')555AUFFF
7V++V$??????r%   r   r   r   r   r   r   )r"   keyc                    t          j        d          }||z  }|t          j        d|          z   }||k     }t          j        | |z   |          }	t          j        ||z   |          }
|	|
z   }t          j        ||z   ||           d S r)   r.   r4   s               r#   add_kernel_autotunedrM          " m###J&	!Z 8 88#GGg%D111GGg%D111Q
7"F666666r%   c                    t          j        d          }||z  }|t          j        d|          z   }||k     }t          j        | |z   |          }	t          j        ||z   |          }
|	|
z
  }t          j        ||z   ||           d S r)   r.   r4   s               r#   sub_kernel_autotunedrP      rN   r%   r
   r   c                    t          j        d          }||z  }|t          j        d|          z   }||k     }t          j        | |z   |          }	t          j        ||z   |          }
|	|
z   }t          j        ||z   ||           d S r)   r.   )r5   r6   r8   r&   r7   r9   r:   r;   r-   r<   r=   r>   s               r#   &add_kernel_autotuned_weird_param_orderrR      s      m###J&	!Z 8 88#GGg%D111GGg%D111Q
7"F666666r%   )BLOCK_SIZE_XBLOCK_SIZE_YrS   rT   c                    t          j        d          |z  }|t          j        d|          d d d f         z   }||k     }	t          j        d          |z  }
|
t          j        d|          d d d f         z   }||k     }|}|}t          j        | |||z  z   z   |	|z            }t          j        | |||z  z   z   |	|z            }||z   }t          j        ||||z  z   z   ||	|z             d S )Nr      r.   )r5   r6   r7   
x_elements
y_elementsrS   rT   xoffsetxindexxmaskyoffsetyindexymaskx1y0tmp0tmp1tmp2s                     r#   add_kernel_2d_autotunedrd      s   6 -""\129Q55aaag>>#-""\129Q55dAAAg>>#ww"
R"8955=IIww"
R"8955=IId{
B*r/23T55=IIIIIr%   c                     | S )N )r"   ___s      r#   _dummy_early_config_pruneri     s    r%   
      early_config_prune)r"   rK   warmuprepprune_configs_byc                    t          j        d          }||z  }|t          j        d|          z   }||k     }t          j        | |z   |          }	t          j        ||z   |          }
|	|
z   }t          j        ||z   ||           d S r)   r.   r4   s               r#   *add_kernel_autotuned_with_unsupported_argsrq     s    $ m###J&	!Z 8 88#GGg%D111GGg%D111Q
7"F666666r%   c                    t          j        d          }||z  }|t          j        d|          z   }||k     }	t          j        | |z   |	          }
t          j        ||z   |	          }|
|z   |z  }t          j        ||z   ||	           d S r)   r.   )r5   r6   r7   r8   scaling_factorr&   r9   r:   r;   r-   r<   r=   r>   s                r#   add_kernel_with_scalingrt   3  s     m###J&	!Z 8 88#GGg%D111GGg%D111a%>)
7"F666666r%   c                     t          j        d          }||z  }t          j        | |g|gt           j                  }t          j        ||g|gt           j                  }||z   }t          j        |||g           d S Nr   r*   r/   r0   _experimental_descriptor_loadfloat32_experimental_descriptor_store	in_desc_ptr0in_desc_ptr1out_desc_ptrr&   r9   offsetabr>   s	            r#   add_kernel_with_tma_1d_old_apir   E  s     m###z!,HLJ	
 
 ,HLJ	
 
 Q
)H	
 	
 	
 	
 	
r%   c                 <   t          j        d          }t          j        d          }||z  }||z  }t          j        | ||g||gt           j                  }	t          j        |||g||gt           j                  }
|	|
z   }t          j        ||||g           d S Nr   r*   rV   rw   r|   r}   r~   rS   rT   pid_xpid_yoffset_xoffset_yr<   r=   r>   s               r#   add_kernel_with_tma_2d_old_apir   d  s     1%%%1%%%<'<',x <(J	
 
 ,x <(J	
 
 Q
)x 	
 	
 	
 	
 	
r%   c                     t          j        d          }||z  }t          j        | |g          }t          j        ||g          }||z   }t          j        ||g|           d S rv   r/   r0   load_tensor_descriptorstore_tensor_descriptorr{   s	            r#   add_kernel_with_tma_1d_new_apir     s     m###z!%H
 
 %H
 

 Q
"H	
 	
 	
 	
 	
r%   c                    t          j        d          }t          j        d          }||z  }||z  }t          j        | ||g          }	t          j        |||g          }
|	|
z   }t          j        |||g|           d S r   r   r   s               r#   add_kernel_with_tma_2d_new_apir     s     1%%%1%%%<'<'%x 
 
 %x 
 

 Q
"x 	
 	
 	
 	
 	
r%   c                 v   |}|dz   }|dz   }	t           j        j                            || ||g||g| j        j                   t           j        j                            ||||g||g|j        j                   t           j        j                            |	|||g||g|j        j                   t           j        j                            |           t           j        j                            |           t           j        j                            |	           t          j        d          }
t          j        d          }|
|z  }||z  }t          j        |||g||gt           j	                  }t          j        |||g||gt           j	                  }||z   }t          j
        |	|||g           d S )Nr      )desc_ptrglobal_address	load_sizeglobal_size
element_tyr   r*   rV   )r/   extracuda&experimental_device_tensormap_create2ddtyper   )experimental_tensormap_fenceproxy_acquirer0   rx   ry   rz   )a_ptrb_ptrc_ptrmn	workspacer&   
a_desc_ptr
b_desc_ptr
c_desc_ptrr   r   r   r   r   r   r>   s                    r#    add_kernel_on_device_tma_old_apir     s    
_
_

<< !:.A{- 	= 	
 	
 	
 	<< !:.A{- 	= 	
 	
 	
 	<< !:.A{- 	= 	
 	
 	
 	??
KKK
??
KKK
??
KKK1%%%1%%%:%:% ,x $J	
 
 ,x $J	
 
 Q 	)x 	
 	
 	
 	
 	
r%   c                    t          j        | ||g|dg||g          }t          j        |||g|dg||g          }t          j        |||g|dg||g          }	t          j        d          }
t          j        d          }|
|z  }||z  }t          j        |||g          }t          j        |||g          }||z   }t          j        |	||g|           d S )NrV   )baseshapestridesblock_shaper   r*   )r/   make_tensor_descriptorr0   r   r   )r   r   r   r   r   r   r&   a_descb_descc_descr   r   r   r   r   r   r>   s                    r#    add_kernel_on_device_tma_new_apir     sJ    *a&F#Z0	
 
 
 *a&F#Z0	
 
 
 *a&F#Z0	
 
 
 1%%%1%%%:%:% %x 
 
 %x 
 
 Q 	"x 	
 	
 	
 	
 	
r%   c                     t          j        d          }||z  }|t          j        d|          z   }||k     }t          j        | |z   |          }d|z  }	t          j        ||z   |	|           d S Nr   r*   r,   r   r.   )
r5   r7   r8   r&   r9   r:   r;   r-   r<   r>   s
             r#   mul2_kernelr   :  s     m###J&	!Z 8 88#GGg%D111Q
7"F666666r%   c                     t          j        d          }||z  }|t          j        d|          z   }||k     }t          j        | |z   |          }d|z  }t          j        | |z   ||           d S r   r.   )	ptrr8   r&   r9   r:   r;   r-   r<   r>   s	            r#   mul2_inplace_kernelr   I  s     m###J&	!Z 8 88#GC'M---Q
wT222222r%   c                 6    t          j        | dk    | d          S )Nr   )r/   where)r<   s    r#   	zero_negsr   W  s    xQ1%%%r%   
ACTIVATIONc                 B   t          j        d          }||z  }|t          j        d|          z   }||k     }|dk    rt          | ||           n|dk    rt	          | | |||           t          j        | |z   |          }	t          j        ||z   |	|           d S )Nr   r*   r   )r&   r?   r,   )r/   r0   r1   r   r?   r2   r3   )
r5   r7   r8   r&   r   r9   r:   r;   r-   r<   s
             r#   indirection_kernelr   [  s     m###J&	!Z 8 88#...
KKKKK<''w*TTTTGGg%D111
7"AD111111r%   X_BLOCK_SIZEY_BLOCK_SIZEc                    t          j        d          }t          j        d          }||z  }||z  }	|t          j        d|          z   }
|	t          j        d|          z   }|d d d f         |z  |
d d d f         z   }|d d d f         |z  |
d d d f         z   }t          j        | |z             }t          j        ||z   |dz             d S )Nr   r*   rV   g       @r.   )in_ptrr7   in_y_strideout_y_strider   r   xidyidx_starty_start	x_offsets	y_offsetssrc_offsetsdst_offsetssrcs                  r#   double_strided_kernelr   n  s     m###m###$$bi<888	bi<888	4(;6479KK4(<7)D!!!G:LLgf{*++
;&c	22222r%   r   BLOCKc                    t          j        | t          j        d|          z             }t          j        |t          j        d|          z             }t          j        |g|t           j                  }t          j        dd|||gt           j        dd          }t          j        |t          j        d|          z   |           d S )Nr   shf.l.wrap.b32 $0, $1, $2, $3;
=r,r, r, rTrV   r   is_purepackr/   r2   r1   fullint32inline_asm_elementwiser3   	XYZr   r   r<   r=   szs	            r#   inline_asm_kernel_is_pure_truer     s     GA	!U+++,,GA	!U+++,,GUGQ))%,1I(
 
 
 	RYq%(((!,,,,,r%   c                    t          j        | t          j        d|          z             }t          j        |t          j        d|          z             }t          j        |g|t           j                  }t          j        dd|||gt           j        dd          }t          j        |t          j        d|          z   |           d S )Nr   r   r   FrV   r   r   r   s	            r#   inline_asm_kernel_is_pure_falser     s     GA	!U+++,,GA	!U+++,,GUGQ))%,1I(
 
 
 	RYq%(((!,,,,,r%   c           
      ~   t          j        d          }||z  }t          j        t          j        | |gdg|g|gdg          dg          }t          j        t          j        ||gdg|g|gdg          dg          }||z   }	t          j        t          j        ||gdg|g|gdg          |	dg           d S Nr   r*   rV   )r   r   r   r;   r   order)boundary_checkr/   r0   r2   make_block_ptrr3   )
x_ptry_ptr
output_ptrr8   r&   r9   r:   r<   r=   r>   s
             r#   add_kernel_with_block_ptrr     s'    m###J&G!l$'Lc   3

 

 

 G!l$'Lc   3

 

 

 Q
!l$'Lc   3	
 	
 	
 	
 	
 	
r%   c                 $   t          j        d          }||z  }t          j        t          j        | |dgddg|dg|dgddg          dg          }|}t          j        t          j        ||dgddg|dg|dgddg          |dg           d S r   r   )r   r   r8   r&   r9   r:   r<   r>   s           r#   kernel_with_block_ptr_2dr     s     m###J&G!1oA$a('O!f   3

 

 

 
!1oA$a('O!f   3	
 	
 	
 	
 	
 	
r%   )r2   r3   c                     t          j        d          }||z  }|t          j        d|          z   }||k     }t          | |z   |          }	t          ||z   |          }
|	|
z   }t	          ||z   ||           d S r)   r.   r4   s               r#   add_kernel_with_importr     s     m###J&	!Z 8 88#7"...7"...Qgd333333r%   c                 T   t          j        d          }||z  }|t          j        d|          z   }||k     }t          j        | |z   |          }	t          j        ||z   |          }
t          j        d          dk    r|	|
z   }n|	|
z  }t          j        ||z   ||           d S r)   r.   r4   s               r#   cond_op_kernelr     s     m###J&	!Z 8 88#GGg%D111GGg%D111=q  UFFUF
7"F666666r%   c                    t          j        d          }||z  }|t          j        d|          z   }||k     }t          j        | |z   |          }	t          j        ||z   |          }
|	|
z   }t          j        ||z   ||           d S r)   )r/   r0   r1   r2   
atomic_addr4   s               r#   atomic_add_kernelr     s     m###J&	!Z 8 88#GGg%D111GGg%D111Q
g'd;;;;;;r%   c                    t          j        d          }||z  }|t          j        d|          z   }||k     }t          j        | |z   |          }	t          j        ||z   |          }
t	          d          D ]!}|	|
z   }t          j        ||z   ||           "d}|dk    r,|dz  }|	|
z   }t          j        ||z   ||           |dk    *d S d S )Nr   r*   r,   r   rV   )r/   r0   r1   r2   ranger3   )r5   r6   r7   r8   r&   r9   r:   r;   r-   r<   r=   ir>   s                r#   add_4_times_kernelr   ,  s     m###J&	!Z 8 88#GGg%D111GGg%D111q 	; 	;AUFHWw&T:::::!eeFAUFHWw&T:::: !eeeeeer%   c                    t          j        d          }||z  }|t          j        d|          z   }||k     }t          j        | |z   |          }	t          j        ||z   |          }
|	|
z   }t          j        ||z   ||           d S r)   r.   )r5   r6   r8   r7   r&   r9   r:   r;   r-   r<   r=   r>   s               r#   add_kernel_out_of_order_fn2r   C  r@   r%   r   r   )M_ptrNKr   r   r   r   c
                 $   t          j        d          }
t          j        |          }|dk    r	|dk    rd}n|dk    rd S t          j        ||          }t          j        ||          }|	|z  }|
|z  }||	z  }t	          ||z
  |	          }||
|z  |z  z   }|
|z  |z  }||z  t          j        d|          z   |z  }||z  t          j        d|          z   |z  }t          j        d|          }| |d d d f         |d d d f         z   z   }||d d d f         |d d d f         z   z   }t          j        ||ft           j                  }t          dt          j        ||                    D ]x}t          j        ||d d d f         |||z  z
  k     d          }t          j        ||d d d f         |||z  z
  k     d          }t          j	        |||          }||z  }||z  }y|
                    t           j                  }||z  t          j        d|          z   }||z  t          j        d|          z   }||d d d f         z   |d d d f         z   } |d d d f         |k     |d d d f         |k     z  }!t          j        | ||!           d S )	Nr   r*   r   i   r   g        )r-   otherr,   )r/   r0   r2   cdivminr1   zerosry   r   dottofloat16r3   )"r   r   r   r   r   r   r   r   r   r   r9   M	num_pid_m	num_pid_nnum_pid_in_groupgroup_idfirst_pid_mgroup_size_mpid_mpid_noffs_amoffs_bnoffs_ka_ptrsb_ptrsaccumulatorkr   r   coffs_cmoffs_cnc_ptrsc_masks"                                     r#   strange_config_matmul_kernelr  T  s   N m###GENN66lR''AA!VVFGA|,,	GA|,,	')3**-9{2LAA&6 6,FG''L8<'")A|*D*DDI<'")A|*D*DDI1l++'!!!T'*VD!!!G_<=&D/GD!!!G,<<=hl;2:NNNq"'!\2233 	# 	#AVD!!!G_q1|;K7K%KSVWWWAVAAAtG_q1|;K7K%KSVWWWA&A{33Kl"Fl"FFNN2:&&,&1l)C)CC,&1l)C)CCD))GD!!!G,<<!!!T'"Q&747+;a+?@
((((((r%   c                     t          j        d          }t          j        d|          ||z  z   }t          j        |gdt           j                  }t          j        | |z   |||k                dS )z
        This kernel contains a triple-quote docstring w/ double quotes.
        Make sure that codegen sanitizes the docstring.
        r   r*         ?r   r,   Nr/   r0   r1   r   ry   r3   r7   numelr&   r9   r;   oness         r#   #kernel_with_docstring_double_quotesr#    sq     m###)Az**S:-==w
|S
;;;
7"Dw??????r%   c                     t          j        d          }t          j        d|          ||z  z   }t          j        |gdt           j                  }t          j        | |z   |||k                dS )z
        This kernel contains a triple-quote docstring w/ single quotes
        Make sure that codegen sanitizes the docstring.
        To prevent it from being linted to double quotes: """!!!"""
        r   r*   r  r   r,   Nr  r   s         r#   #kernel_with_docstring_single_quotesr%    sq     m###)Az**S:-==w
|S
;;;
7"Dw??????r%   c                 &   t          j        d          }t          j        d|          ||z  z   }t          j        | |z   ||k               }t          j        dd|gt           j        dd          }t          j        ||z   |||k                d S )	Nr   r*   r,   z{
            {
                cos.approx.f32 $0, $1;
                ex2.approx.f32 $0, $0;
            }
                =r, rTrV   asmconstraintsargsr   r   r   r/   r0   r1   r2   r   ry   r3   r   r7   r!  r&   r9   r;   datacos_pows           r#   kernel_inline_asm_double_quotesr0    s     m###)Az**S:-==wv'go>>>+ !*
 
 
 	7"G'E/BBBBBBr%   c                 &   t          j        d          }t          j        d|          ||z  z   }t          j        | |z   ||k               }t          j        dd|gt           j        dd          }t          j        ||z   |||k                d S )	Nr   r*   r,   z
            {
                // double quotes to pacify the linter """!!!"""
                cos.approx.f32 $0, $1;
                ex2.approx.f32 $0, $0;
            }
                r'  TrV   r(  r,  r-  s           r#   kernel_inline_asm_single_quotesr2    s     m###)Az**S:-==wv'go>>>+ !*
 
 
 	7"G'E/BBBBBBr%   c                 "   t          j        d          }||z  }|t          j        d|          z   }||k     }	t          j        | |z   |	          }
|rt          j        ||z   |	          }|
|z   }n|
}t          j        ||z   ||	           d S r)   r.   )r5   r6   r7   r8   add_xyr&   r9   r:   r;   r-   r<   r=   r>   s                r#   add_kernel_with_boolean_paramr5    s     m###J&	!Z 8 88#GGg%D111 	')555AUFFF
7"F666666r%   Tblock_sizesnew_apic           	      p   |r*t           j        j        j                            | |          S t          |          dk    rdt           j        j                            |                                 | 	                    d          |d         | 
                                          S t          |          dk    sJ t           j        j                            |                                 | 	                    d          | 	                    d          |d         |d         | 
                                          S )NrV   r   r   )r    toolstensor_descriptorTensorDescriptorfrom_tensorlenexperimental_descriptorcreate_1d_tma_descriptordata_ptrsizeelement_sizecreate_2d_tma_descriptor)tensorr6  r7  s      r#   create_tensor_descriptor_shimrE    s     	<1BNN   ;1$$|;TTOO%%KKNNN''))	   ;''1,,,,|;TTOO%%KKNNKKNNNN''))  r%   )r&   r'   )rC   r'   r&   r'   )rS   r'   rT   r'   )r&   r'   r   r'   )r   r'   r   r'   )r   r'   r   r'   )T)@unittest&torch.testing._internal.inductor_utilsr   r   r   torch.utils._tritonr   
skipUnlessrequires_cuda_and_tritonrequires_gpu_and_tritonrequires_gpur    r   r/   r   listr!   r$   jitr?   rB   rG   rJ   autotunerM   rP   rR   rd   ri   rq   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   	constexprr   r   triton.languager2   r3   r   r   r   r   r   r  r#  r%  r0  r2  r5  intboolrE  rf   r%   r#   <module>rT     s            
 + * * * * * /8.3   .(---/H   #x"7N;;:<< ~MMM%%%%%%LLL5$v}"5 5 5 5 5p Z7
 #7 7 7 Z7  Z7
 #7 7 7 Z7  Z7
 $7 #7 7 7 Z7( Z@ $@ #@ @ @ Z@* V_FM<-!qIIIFM<-!qIIIFM<,aHHHFM<,aHHH	
    Z7
 #7 7 7 Z 7  V_FM<-!qIIIFM<-!qIIIFM<,aHHHFM<,aHHH	
    Z7
 #7 7 7 Z 7  V_FM<,aHHH
 	   Z7 #	7 7 7 Z 7$ V_FM!$c::qTU   FM!$c::qTU   FM!#R88QRS   FM!#R88QRS  
   " ZJ %J %J J J Z# $J,   V_FM<-!qIIIFM<,aHHH
 .0IJ	 	 	 Z7
 #7 7 7 Z	 	7  Z7 #7 7 7 Z7" Z
 #	
 
 
 Z
< Z
 %	

 %
 
 
 Z
B Z
 #	
 
 
 Z
4 Z
 %	

 %
 
 
 Z
: ZA
 #A
 A
 A
 ZA
F Z4
 #4
 4
 4
 Z4
l Z7 #	7 7 7 Z7 Z3 #3 3 3 Z3 Z& & Z& Z2 #	2
 #2 2 2 Z2$ Z3
 %3 %3 3 3 Z3& Z-"-+9- - - Z-  Z-"-+9- - - Z-  Z+

 L+
 +
 +
 Z+
Z Z
 L	
 
 
 Z
B ,+++++++Z4
 #4 4 4 Z4  Z7
 #7 7 7 Z7& Z<
 #< < < Z<  Z;
 #; ; ; Z;, Z7
 #7 7 7 Z7  V_FM$&$&$&$%	  	 	 	 FM$'$&$&$%	  	 	 	
,  /  2 Z1) l1) l1) l1) l1) 1) 1) Z3 41)f Z@ @ @ @ Z@ Z	@ 	@ 	@ 	@ Z	@ ZC,.LC C C ZC* ZC,.LC C C ZC, Z7 #7 7 7 Z7, 9= !#Y15     M~ ~r%   