
    /hh(E                        S SK r S SKrS SKrS SKrS SKrS SKJr  S r " S S\R                  5      r	 " S S\	5      r
 " S S	\	5      r " S
 S\	5      r " S S\	5      r " S S\	5      rS rSS jr " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r\S:X  a  \R*                  " 5         gg)    N)supportc                     ^  S m U 4S j$ )Nc                        " S S5      n S q U $ )Nc                       \ rS rSrSrg);global_function.<locals>.inner_function.<locals>.LocalClass    N)__name__
__module____qualname____firstlineno____static_attributes__r	       </opt/python-3.13.8/usr/lib/python3.13/test/test_funcattrs.py
LocalClassr      s    r   r   c                      S n U $ )Nc                      g Nr	   r	   r   r   inner_function2.inner_global_function.<locals>.inner_function2       r   r	   )r   s    r   inner_global_functionr      s    ""r   )r   )r   s    r   inner_function'global_function.<locals>.inner_function
   s    	 		# r   c                     > T $ r   r	   r   s   r   <lambda>!global_function.<locals>.<lambda>   s    >r   r	   r   s   @r   global_functionr   	   s     "!r   c                        \ rS rSrS rS rSrg)FuncAttrsTest   c                 N     " S S5      nS nU" 5       U l         Xl        X l        g )Nc                       \ rS rSrS rSrg)FuncAttrsTest.setUp.<locals>.F   c                     g r   r	   selfs    r   a FuncAttrsTest.setUp.<locals>.F.a   r   r   r	   N)r
   r   r   r   r*   r   r	   r   r   Fr%      s    r   r,   c                      g)N   r	   r	   r   r   bFuncAttrsTest.setUp.<locals>.b   s    r   )fir,   r/   )r)   r,   r/   s      r   setUpFuncAttrsTest.setUp   s$    	 		#r   c                      [        XU5        U R                  SU< SU< 35         [        X5        U R                  SU-  5        g ! U a     N)f = f! U a     g f = f)Nzshouldn't be able to set z to zshouldn't be able to del %s)setattrfaildelattr)r)   objnamevalue
exceptionss        r   cannot_set_attrFuncAttrsTest.cannot_set_attr!   sm    	KCu% IIT5IJ	<C II3d:;  		  		s"   A A AAAA)r,   r/   r1   N)r
   r   r   r   r2   r<   r   r	   r   r   r!   r!      s    <r   r!   c                   z    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rSrg)FunctionPropertiesTest0   c                 X    U R                  U R                  R                  [        5        g r   )assertEqualr/   r   r
   r(   s    r   test_module"FunctionPropertiesTest.test_module2   s    **H5r   c                    SU R                   l        U R                  S[        U R                   5      S5        SU R                  R
                  l        U R                  S[        U R                  R
                  5      S5        g )N   
known_attrz+set attributes not in dir listing of methodzEset attribute on function implementations, should show up in next dir)r/   rG   assertIndirr,   r*   r1   r(   s    r   test_dir_includes_correct_attrs6FunctionPropertiesTest.test_dir_includes_correct_attrs5   s^    lCK9	;  lC		N 5C 	Dr   c                 B    S nU R                  U R                  U5        g )Nc                      g)zmy docstringr.   r	   r	   r   r   	duplicateJFunctionPropertiesTest.test_duplicate_function_equality.<locals>.duplicate@   s    r   )assertNotEqualr/   )r)   rN   s     r    test_duplicate_function_equality7FunctionPropertiesTest.test_duplicate_function_equality>   s    	 	DFFI.r   c                     S nU R                  U" 5       S 5        U R                  R                  Ul        U R                  U" 5       S5        g )Nc                      g r   r	   r	   r   r   test:FunctionPropertiesTest.test_copying___code__.<locals>.testF   s    Dr   r.   )rB   r/   __code__)r)   rU   s     r   test_copying___code__,FunctionPropertiesTest.test_copying___code__E   s8    &#r   c           
      B   S nS nS nS nXX44 H  nXX44 H  nXV:X  a  M
  UR                   n U R                  [        S5         UR                   Ul         S S S 5        [        R                  " 5          [        R
                  " SS[        5        Xvl         S S S 5        M     M     g ! , (       d  f       NW= f! , (       d  f       M  = f! [        R                  " 5          [        R
                  " SS[        5        Xvl         S S S 5        f ! , (       d  f       f = f= f)Nc                      g r   r	   r	   r   r   ABFunctionPropertiesTest.test_invalid___code___assignment.<locals>.AL       r   c               3      #    S v   g 7fr   r	   r	   r   r   BBFunctionPropertiesTest.test_invalid___code___assignment.<locals>.BM   s     s   c                    #    S 7v   g 7fr   r	   r	   r   r   CBFunctionPropertiesTest.test_invalid___code___assignment.<locals>.CN   s     us   	c                 $   #    U I S h  vN   g  N7fr   r	   )xs    r   DBFunctionPropertiesTest.test_invalid___code___assignment.<locals>.DO   s     as   z code object of non-matching typeignore )rW   assertWarnsRegexDeprecationWarningwarningscatch_warningsfilterwarnings)r)   r\   r`   rc   rg   srcdstprevs           r    test_invalid___code___assignment7FunctionPropertiesTest.test_invalid___code___assignmentK   s    !<Ca|: ||,../ACef'*|| g "002 //">PQ'+ 32 $   gf 32002 //">PQ'+ 322sG   CB(C4#B9(
B62C9
CD!#D	D
DDc                     U R                  U R                  R                  [        5       5        U R	                  U R                  SS[
        [        45        g )N__globals__   )assertIsr/   rv   globalsr<   AttributeError	TypeErrorr(   s    r   test___globals__'FunctionPropertiesTest.test___globals__`   s<    dff((')4TVV]A,i8	:r   c                 B   [         S:X  a  [        R                  nO[        nU R                  U R                  R                  U5        U R                  U R                  SS[        [        45        S n0 n[        U5      " UR                  U5      nU R                  UR                  U5        U R                  UR                  U5        U R                  U" S5      S5        U R                  U0 5        [        R                  " S5      nSS 0n[        US	.n[        XS5        U R                  US
   R                  U5        U R                  US   R                  U5        U R                  US
   R                  S   U5        U R                  SUS   R                  5        g )N__main____builtins__rw   c                     [        U 5      $ r   )len)ss    r   func6FunctionPropertiesTest.test___builtins__.<locals>.funcq   s
    CF]r   abcr.   z\
            def func3(s): pass
            func4 = type(func3)(func3.__code__, {})
        None)typer   func3func4)r
   r   __dict__rx   r/   r<   rz   r{   r   rW   rv   rB   textwrapdedentexecassertNotIn)r)   builtins_dictr   nsfunc2codesafe_builtinss          r   test___builtins__(FunctionPropertiesTest.test___builtins__e   sV   z!(11M(Mdff))=9TVV^Q,i8	:
 	#T
4=="-e'',e((-8 	uq)R       M:Tbk..>bk..>bk--n=}MG)@)@Ar   c                   ^ SmU4S jnUR                   nU R                  U[        5        U R                  [	        U5      S5        U R                  US   R
                  R                  S5        U R                  USU[        5        g )N   c                     > [        T 5        g r   printr*   s   r   f2FunctionPropertiesTest.test___closure__.<locals>.f   	    qr      r   cell__closure__)	r   assertIsInstancetuplerB   r   	__class__r
   r<   rz   r)   r   cr*   s      @r   test___closure__'FunctionPropertiesTest.test___closure__   sj    MMa'Q#100&9Qq.Ar   c                 
   [         R                  " S5      nU R                  UR                  S5        [         R                  " 5       nSnU R	                  [
        US9   UR                    S S S 5        g ! , (       d  f       g = f)Nr   'shouldn't be able to read an empty cell)msg)typesCellTyperB   cell_contentsassertRaises
ValueError)r)   cell_objr   s      r   test_cell_new$FunctionPropertiesTest.test_cell_new   s_    >>!$//3>>#7zs3"" 433s   A44
Bc                    ^ U4S jn UR                   S   R                    U R                  S5        Smg ! [         a     Smg f = f)Nc                     > [        T 5        g r   r   r   s   r   r   1FunctionPropertiesTest.test_empty_cell.<locals>.f   r   r   r   r   r   )r   r   r6   r   )r)   r   r*   s     @r   test_empty_cell&FunctionPropertiesTest.test_empty_cell   sM    	AMM!** II?@	  	 		s   6 
AAc                   ^ SmU4S jnUR                   nSUS   l        U R                  US   R                  S5        U R                  U" 5       S5        U R                  TS5        US   ? US   R                    U R                  S5        U R                  [        5         U" 5         S S S 5        U R                  [        5         [        T5        S S S 5        g ! [         a     N[f = f! , (       d  f       NH= f! , (       d  f       g = f)Nr   c                     > T $ r   r	   r   s   r   r   /FunctionPropertiesTest.test_set_cell.<locals>.f   s    r   	   r   r   )	r   r   rB   r6   r   r   	NameErrorUnboundLocalErrorr   r   s      @r   test_set_cell$FunctionPropertiesTest.test_set_cell   s    MM!1++Q/a AaD	AaD II?@y)C *01!H 21  		 *)11s*   .C #C-C>
C*)C*-
C;>
Dc                 H   U R                  U R                  R                  S5        SU R                  l        U R                  U R                  R                  S5        SU R                  l        U R                  U R                  R                  S5        U R                  U R                  SS[        5        Sn[        US0 05        U R                  U R                  R                  R                  S5        U R                  U R                  R                  SS[        5        g )	Nr/   r   dr
   rF   zdef f(): pass
f.__name__r   r*   )	rB   r/   r
   r<   r{   r   r1   r*   rz   )r)   r   s     r   test___name__$FunctionPropertiesTest.test___name__   s    #.#.#.TVVZI> ,Q$%++S1TWWYY
CHr   c                    U R                  U R                  R                  S5        U R                  [        R                  R                  S5        U R                  [
        R                  S5        U R                  [        5       R                  S5        U R                  [        5       " 5       R                  S5        U R                  [        5       " 5       " 5       R                  S5        U R                  [        R                  S5        U R                  [        5       R                  S5        S	U R                  l        U R                  U R                  R                  S	5        S
U R                  l        U R                  U R                  R                  S
5        U R                  U R                  SS[        5        g )NzFuncAttrsTest.setUp.<locals>.bzFuncAttrsTest.setUpr   z!global_function.<locals>.<lambda>z'global_function.<locals>.inner_functionr   r   z.inner_global_function.<locals>.inner_function2r   r   r   rF   )	rB   r/   r   r!   r2   r   r   r<   r{   r(   s    r   test___qualname__(FunctionPropertiesTest.test___qualname__   sG   ,,.NO,,99;PQ557HI*77<	>*,99B	D*,.;;V	X.;;=TU.0==?op!,,c2!,,c2TVV^Q	Br   c                 n   S " 5       nS nS nUR                   u  nU R                  U[        R                  5        U R	                  UR                   U45        X#4 H  nU R                  US9   U R	                  UR                   S5        U R                  [        5         U? S S S 5        U R                  [        5         SUl         S S S 5        U4Ul         U R	                  UR                   U45        S S S 5        M     g ! , (       d  f       Ne= f! , (       d  f       NQ= f! , (       d  f       M  = f)Nc                      S 7=n4S s8$ )Tc                      g r   r	   r	   r   r   generic<FunctionPropertiesTest.test___type_params__.<locals>.generic   s    $r   r	   )	.defaultsr   s     r   <generic parameters of generic>TFunctionPropertiesTest.test___type_params__.<locals>.<generic parameters of generic>   s    Ar   c                      g r   r	   r	   r   r   not_generic@FunctionPropertiesTest.test___type_params__.<locals>.not_generic   s    4r   c                      g)N.r	   r	   r   r   r   =FunctionPropertiesTest.test___type_params__.<locals>.<lambda>   s    #r   )r   r	   *   )__type_params__r   typingTypeVarrB   subTestr   r{   )r)   r   r   lambda_r   r   s         r   test___type_params__+FunctionPropertiesTest.test___type_params__   s    $$a0001$7 *D4(  !5!5r:&&y1, 2&&y1+-D( 2()t$  !5!5t< )( + 2111	 )(s<   /2D%!D$D%D	-D%
DD%
D"D%%
D4	c                   ^^ Su  mmS nS nU4S jnU4S jnUU4S jnXX4U4 H6  nU R                  [        UR                  5      [        R                  5        M8     U R                  U" 5       S5        U R                  U" 5       S5        UR                  Ul        U R                  UR                  UR                  5        U R                  U" 5       S5         UR                  Ul        U R                  S	5         UR                  Ul        U R                  S	5        g ! [         a     N0f = f! [         a     g f = f)
N)rF      c                      g r   r	   r	   r   r   r*   /FunctionPropertiesTest.test___code__.<locals>.a   r^   r   c                      g)Nr   r	   r	   r   r   r/   /FunctionPropertiesTest.test___code__.<locals>.b   s    r   c                     > T $ r   r	   )num_ones   r   r   /FunctionPropertiesTest.test___code__.<locals>.c       r   c                     > T $ r   r	   )num_twos   r   r   /FunctionPropertiesTest.test___code__.<locals>.d   r   r   c                     > T T4$ r   r	   )r   r   s   r   e/FunctionPropertiesTest.test___code__.<locals>.e   s    ((r   rF   r   zC__code__ with different numbers of free vars should not be possible)rB   r   rW   r   CodeTyper6   r   )	r)   r*   r/   r   r   r   r   r   r   s	          @@r   test___code__$FunctionPropertiesTest.test___code__   s   (1ODT$--0%..A $a a ZZ
QZZ0a 	)AJ II ( )	)AJ II ( )  		  		s$   D#  D3 #
D0/D03
E ?E c                     U R                  U R                  R                  S 5        U R                  ?U R                  U R                  R                  S 5        g r   )rB   r/   __defaults__r(   s    r   test_blank_func_defaults/FunctionPropertiesTest.test_blank_func_defaults  s@    ,,d3FF,,d3r   c                    S nSS jnU R                  UR                  S 5        U R                  UR                  S5        SUl        U R                  UR                  S5        U R                  U" 5       S5        U R                  U" S5      S5        U R                  U" SS5      S5        U?U R                  UR                  S 5         U" 5         U R                  S5        g ! [         a     g f = f)Nc                 
    X-   $ r   r	   r*   r/   s     r   
first_funcAFunctionPropertiesTest.test_func_default_args.<locals>.first_func  	    3Jr   c                 
    X-   $ r   r	   r   s     r   second_funcBFunctionPropertiesTest.test_func_default_args.<locals>.second_func  r   r   )r   rw   r.      r   zE__defaults__ does not update; deleting it does not remove requirement)rB   r   r6   r{   )r)   r   r   s      r   test_func_default_args-FunctionPropertiesTest.test_func_default_args  s    		00$7116:"(
00&9q)A*Aq)1-$1148	,M II + ,  		s   C$ $
C10C1r	   N)r
   r   r   r   rC   rJ   rQ   rX   rs   r|   r   r   r   r   r   r   r   r   r   r   r   r   r	   r   r   r?   r?   0   s]    6D/$,*:
"BHB#(I C(=")<4
,r   r?   c                   ,    \ rS rSrS rS rS rS rSrg)InstancemethodAttrTesti)  c                     U R                  U R                  R                  R                  R                  U R
                  5        U R                  U R                  R                  SU R
                  [        5        g )Nr   )rB   r1   r*   __self__r   r,   r<   r{   r(   s    r   test___class__%InstancemethodAttrTest.test___class__+  sJ    ++55tvv>TWWYYTVVYGr   c                    U R                  U R                  R                  R                  U R                  R                  5        U R                  U R                  R                  SU R                  R                  [        5        g )N__func__)rB   r1   r*   r	  r,   r<   rz   r(   s    r   test___func__$InstancemethodAttrTest.test___func__/  sL    ++TVVXX6TWWYY
DFFHHnMr   c                     U R                  U R                  R                  R                  U R                  5        U R	                  U R                  R                  SU R                  [
        5        g )Nr  )rB   r1   r*   r  r<   rz   r(   s    r   test___self__$InstancemethodAttrTest.test___self__3  sD    ++TWW5TWWYY
DGG^Lr   c                    [         R                  " [        U R                  5      U R                  l        U R	                  U R                  R                  5       [        U R                  5      5         U R                  R                  R
                    U R                  S5        U R                  U R                  R                  SS[        5        g ! [         a     N9f = f)N4using unknown attributes should raise AttributeErrorunknown_attrrw   )	r   
MethodTypeidr1   rB   r  r6   rz   r<   r(   s    r   test___func___non_method/InstancemethodAttrTest.test___func___non_method7  s     %%b$''2
r$''{3	NGGJJ## IILMTWWZZNK  		s   3 C 
CCr	   N)	r
   r   r   r   r  r
  r  r  r   r	   r   r   r  r  )  s    HNMLr   r  c                   &    \ rS rSrS rS rS rSrg)ArbitraryFunctionAttrTestiG  c                     SU R                   l        U R                  U R                   R                  S5         SU R                  R                  l        U R                  S5        g ! [         a     g f = f)NrF   z0setting attributes on methods should raise error)r/   rG   rB   r1   r*   r6   rz   r(   s    r   test_set_attr'ArbitraryFunctionAttrTest.test_set_attrH  sa    **A.	J#$DGGII  IIHI  		s   A& &
A32A3c                 `     U R                   ?U R                  S5        g ! [         a     g f = f)Nz1deleting unknown attribute should raise TypeError)r/   r  r6   rz   r(   s    r   test_delete_unknown_attr2ArbitraryFunctionAttrTest.test_delete_unknown_attrR  s5    	K# IIIJ  		     
--c                     U R                   U R                  R                  4 H!  n UR                    U R	                  S5        M#     g ! [
         a     M3  f = f)Nr  )r/   r1   r*   non_existent_attrr6   rz   )r)   r   s     r   test_unset_attr)ArbitraryFunctionAttrTest.test_unset_attrZ  sR    VVTWWYY'D,&& 		 + , ( " s   A		
AAr	   N)r
   r   r   r   r  r  r!  r   r	   r   r   r  r  G  s    JK,r   r  c                   2    \ rS rSrS rS rS rS rS rSr	g)	FunctionDictsTestie  c                     U R                  U R                  SS [        5        SSKJn  U" SS05      nU R                  U R
                  R                  R                  SU[        5        g )Nr   r   )UserDictrG   rF   )r<   r/   r{   collectionsr&  r1   r*   r	  )r)   r&  r   s      r   test_setting_dict_to_invalid.FunctionDictsTest.test_setting_dict_to_invalidf  sN    TVVZyA(lA&'TWWYY//Q	Jr   c                    SS0nXR                   l        U R                  XR                   R                  5        XR                  R                  l        U R                  XR
                  R                  R                  R                  5        U R                  XR
                  R                  R                  5        U R                  U R                   R                  S5        U R                  U R                   R                  S   S5        U R                  U R
                  R                  R                  R                  S5        U R                  U R
                  R                  R                  S5        g )NrG   rF   )	r/   r   rx   r,   r*   r1   r	  rB   rG   )r)   r   s     r   test_setting_dict_to_valid,FunctionDictsTest.test_setting_dict_to_validl  s    1a)a++445a++,**A.6:++66:--q1r   c                 `     U R                   ?U R                  S5        g ! [         a     g f = f)Nz3deleting function dictionary should raise TypeError)r/   r   r6   r{   r(   s    r   test_delete___dict__&FunctionDictsTest.test_delete___dict__|  s4    	M IIKL  		r  c                 P    U R                  U R                  R                  0 5        g r   )rB   r/   r   r(   s    r   test_unassigned_dict&FunctionDictsTest.test_unassigned_dict  s    "-r   c                 d    Sn0 nXU R                   '   U R                  X R                      U5        g )NzSome string)r/   rB   )r)   r:   r   s      r   test_func_as_dict_key'FunctionDictsTest.test_func_as_dict_key  s-    $&&	66E*r   r	   N)
r
   r   r   r   r(  r+  r.  r1  r4  r   r	   r   r   r$  r$  e  s    K2 M.+r   r$  c                        \ rS rSrS rS rSrg)FunctionDocstringTesti  c                    U R                  U R                  R                  S 5        SnXR                  l        XR                  R                  l        U R                  U R                  R                  U5        U R                  U R
                  R                  R                  U5        U R                  U R
                  R                  SU[        5        g )NzA test method that does nothing__doc__)rB   r/   r9  r,   r*   r1   r<   rz   )r)   docstrs     r   test_set_docstring_attr-FunctionDocstringTest.test_set_docstring_attr  s    .2!0**F3TWWYY	6>Jr   c                     SU R                   l        U R                   ?U R                  U R                   R                  S 5        g )NzThe docstring)r/   r9  rB   r(   s    r   test_delete_docstring+FunctionDocstringTest.test_delete_docstring  s.    (FFN.r   r	   N)r
   r   r   r   r;  r>  r   r	   r   r   r7  r7    s    K/r   r7  c                 2   ^ U4S jnU mUR                   S   $ )z)Create a cell containing the given value.c                     > [        T 5        g r   r   r   s   r   r   cell.<locals>.f  
    ar   r   r   )r:   r   r*   s     @r   r   r     s    A==r   c                 @   ^ U4S jnU (       d  SmUR                   S   $ )zCreate an empty cell.c                     > [        T 5        g r   r   r   s   r   r   empty_cell.<locals>.f  rC  r   i  r   rD  )emptyr   r*   s     @r   
empty_cellrI    s!    
 ==r   c                       \ rS rSrS rSrg)CellTesti  c                 x   U R                  [        S5      [        S5      :  5        U R                  [        5       [        S5      :  5        U R                  [        5       [        5       :H  5        U R                  [        S5      [        S5      :H  5        U R                  [        S5      [        5       :  5        g )Nrw   r.   saturdayig      BT)
assertTruer   rI  r(   s    r   test_comparisonCellTest.test_comparison  sz    
 	Q$q')*
tJ'778

45S	T%[01T
Z\12r   r	   N)r
   r   r   r   rO  r   r	   r   r   rK  rK    s    	3r   rK  c                       \ rS rSrS rSrg)StaticMethodAttrsTesti  c                     S n[        U5      nU R                  UR                  UL 5        [        U5      nU R                  UR                  UL 5        g )Nc                      g r   r	   r	   r   r   r   4StaticMethodAttrsTest.test_func_attribute.<locals>.f  s    r   )classmethodrN  r	  staticmethod)r)   r   r   r   s       r   test_func_attribute)StaticMethodAttrsTest.test_func_attribute  sC    	 N

a(O

a(r   r	   N)r
   r   r   r   rX  r   r	   r   r   rR  rR    s    )r   rR  c                   >    \ rS rSrS r\R                  S 5       rSrg)BuiltinFunctionPropertiesTesti  c                    SS K nU R                  [        R                  S5        U R                  UR                   R                  S5        U R                  [        R
                  R                  S5        U R                  [        R                  R                  S5        U R                  [        R                  R                  S5        U R                  [        R                  R                  S5        U R                  / SQR                  R                  S	5        U R                  S
S0R                  R                  S5        g )Nr   r   timezdict.fromkeyszfloat.__getformat__zstr.maketranszbytes.maketransr   rw   r.   zlist.appendfoobarzdict.pop)r]  rB   r   r   dictfromkeysfloat__getformat__str	maketransbytesappendpop)r)   r]  s     r   test_builtin__qualname__6BuiltinFunctionPropertiesTest.test_builtin__qualname__  s     	))51//8 	33_E,,99.	0 	33_E557HI 	))66F%++88*Er   c                    SS K nSS KnU R                  [        R                  U5        U R                  UR
                  R                  U5        U R                  [        R                  R                  [        5        U R                  [        R                  R                  [        5        U R                  [        R                  R                  5        U R                  [        R                  R                  5        / SQnU R                  UR                  R                  U5        SS0nU R                  UR                   R                  U5        U R                  S R"                  R                  5        g )Nr   r^  r_  r`  )builtinsr]  rx   r   r  sleepra  rb  rc  rd  assertIsNonere  rf  rg  rh  rB   ri  __repr__)r)   rm  r]  lr   s        r   test_builtin__self__2BuiltinFunctionPropertiesTest.test_builtin__self__  s     	 	cllH-djj))40 	dmm,,d3e))22E: 	#--001%//223 ahh''+EN+$--001r   r	   N)	r
   r   r   r   rj  r   cpython_onlyrr  r   r	   r   r   r[  r[    s"    F( 2 2r   r[  r   )T)r   r   r   unittestrm   rU   r   r   TestCaser!   r?   r  r  r$  r7  r   rI  rK  rR  r[  r
   mainr	   r   r   <module>rx     s         
"<H%% <4v,] v,rL] L<, ,<&+ &+R/M / 	
3x   
3	)H-- 	)12H$5$5 12h zMMO r   