Ë
    Z^(hˆ�  ã                  ój  — U d dl mZ d dlZd dlmZmZ d dlmZmZ d dl	Z	d dl
mZ d dlmZmZmZmZ d dlmZmZmZmZmZmZmZmZ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&m'Z' d d
l(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2m3Z3m4Z4 d dl5m6Z6 erd dl7m8Z8 e9e:e*e:e;ef   f   e<e;   f   Z=i a>de?d<    e<e)«      Z@	 	 	 	 	 	 dd„ZA	 	 	 	 	 	 	 	 dd„ZBe$dd„«       ZC	 	 	 	 	 	 	 	 	 	 d d„ZD	 	 	 	 	 	 	 	 d!d„ZE	 	 	 	 	 	 	 	 	 	 	 	 	 	 d"d„ZF	 	 	 	 	 	 d#d„ZG	 	 	 	 	 	 	 	 	 	 	 	 d$d„ZHdZId%d„ZJ	 	 	 	 	 	 	 	 d&d„ZKd'd„ZLd(d„ZMy))é    )ÚannotationsN)ÚCounterÚdefaultdict)ÚAnyÚTYPE_CHECKING)Úcpp)Ú
DerivativeÚDifferentiabilityInfoÚForwardDerivativeÚSavedAttribute)Ú	BaseCTypeÚBindingÚboolTÚCppSignatureGroupÚlayoutTÚlongTÚ
NamedCTypeÚOptionalCTypeÚscalarTypeTÚSpecialArgNameÚstringTÚsymIntArrayRefTÚSymIntTÚtensorGeometryTÚtensorOptionsTÚtypeAndSizeTÚVectorCType)Úwith_native_function)Ú$get_grouped_by_view_native_functionsÚparse_native_yaml)ÚAUTOGRAD_KEYSÚFunctionSchemaÚNativeFunctionÚNativeFunctionsViewGroupÚOperatorNameÚ
SchemaKindÚTypeÚVariant)Ú	concatMapÚIDENT_REGEXÚsplit_name_params)Ú
YamlLoader)ÚSequencez$dict[tuple[str, str], DerivativeRet]Ú_GLOBAL_LOAD_DERIVATIVE_CACHEc                ó
  — |D �ci c]#  }|j                   j                  j                  |“Œ% }}i }| j                  «       D ]ª  }d }i }|j	                  «       D ]t  \  }}	|j                  |	j                  j                  j                  d «      }|�<|j                  �0|	j                  |«      }
|
€ŒX|
j                  j                  }|
||<   Œt n t        |«      dkD  sŒ�| vsŒ¢|€J ‚|||<   Œ¬ | j                  |«       y c c}w )Nr   )
ÚviewÚfuncÚnameÚvaluesÚitemsÚgetÚ	view_copyÚ%create_view_copy_from_view_derivativeÚlenÚupdate)ÚinfosÚview_groupsÚgÚview_name_to_groupÚ
view_infosÚinfo_dispatch_dictÚmaybe_view_groupÚ!view_copy_differentiability_infosÚdispatch_keyÚinfoÚview_copy_infoÚ	fn_schemas               úi/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torchgen/packaged/autograd/load_derivatives.pyÚadd_view_copy_derivativesrG   G   s+  € ð &1öHØ !ˆ�‰�‰×Ñ˜!ÑðHÐð Hð €Jà#Ÿl™l›nò FÐàÐØ,.Ð)Ø"4×":Ñ":Ó"<ò 
	ÑˆL˜$Ø1×5Ñ5°d·i±i·n±n×6IÑ6IÈ4ÓPÐØÐ+Ð0@×0JÑ0JÐ0VØ!%×!KÑ!KØ$ó"�ð "Ñ-Ø .× 3Ñ 3× 8Ñ 8�IØFTÐ5°lÒCáð
	ô Ð0Ó1°AÓ5¸)È5Ò:PØÐ(Ð(Ð(Ø$EˆJ�yÒ!ð%Fð( 
‡L�L�Õùò5Hs   …(D c                óB  — | |f}|t         v�rxt        | «      5 }t        j                  |t        ¬«      }d d d «       t        ||«      j                  }t        |«      }t        d„ |«      }|D �	cg c]  }	t        |	t        «      r|	‘Œ }
}	t        t        «      }i }|D ]_  }||j                  j                  «          j                  |«       t!        |j                  «      |vsJ ‚||t!        |j                  «      <   Œa t#        t            «       }i }t%        «       }D ]N  }d|vr1|j'                  d«      }|j'                  dd «      }|d|idœ}|r||d<   t)        |||||«      \  }}|||<   ŒP t+        ||
«       ||ft         |<   t         |   S # 1 sw Y   �Œ\xY wc c}	w )N)ÚLoaderc                ó^   — t        | t        «      r| gS t        | j                  d¬«      «      S )NT)Úinclude_copy)Ú
isinstancer#   ÚlistÚ	functions)r<   s    rF   ú<lambda>z"load_derivatives.<locals>.<lambda>x   s-   € Ü˜!œ^Ô,ð �c€ ä�a—k‘k¨t�kÓ4Ó5ð ó    Údispatchr2   Úoutput_differentiabilityÚDefault)r2   rQ   )r.   ÚopenÚyamlÚloadr,   r    Únative_functionsr   r)   rL   r$   r   rM   r1   Ú	signatureÚappendÚstrr   ÚsetÚpopÚcreate_differentiability_inforG   )Úderivatives_yaml_pathÚnative_yaml_pathÚtags_yaml_pathÚkeyÚfÚdefinitionsÚfuncsÚ!native_functions_with_view_groupsrW   r<   r;   Úfunctions_by_signatureÚfunctions_by_schemaÚfunctionÚ
op_counterr:   Úused_dispatch_keysÚ	defn_dictÚspecificationrR   r2   Úper_dispatch_diffinfoss                         rF   Úload_derivativesrn   i   sì  € ð
 !Ð"2Ð
3€CØ
Ô/Ò/ÜÐ'Ó(ð 	:¨AÜŸ)™) A¬jÔ9ˆK÷	:ô "Ð"2°NÓC×TÑTˆô -QÐQVÓ,WÐ)Ü$ñ6ð .ó	
Ðð 7ö
àÜ˜!Ô5Ô6ò ð
ˆð 
ô œÓð 	ð :<ÐØ(ò 	?ˆHØ" 8§=¡=×#:Ñ#:Ó#<Ñ=×DÑDÀXÔNÜ�x—}‘}Ó%Ð-@Ñ@Ð@Ð@Ø6>Ð¤ H§M¡MÓ 2Ò3ð	?ô œS‘\“^ˆ
ð
 IKˆÜ'*£uÐØ$ò 	1ˆIà Ñ*Ø )§¡¨fÓ 5�Ø+4¯=©=Ø.°ó,Ð(ð &3ÀÈIÐ@VÑW�	Ù+Ø<T�IÐ8Ñ9Ü+HØØ&Ø#ØØ"ó,Ñ(ˆDÐ(ð 1ˆE�$ŠKð#	1ô& 	" %¨Ô5ð
 .3Ð4FÐ-FÔ% cÑ*ä(¨Ñ-Ð-÷G	:ñ 	:üò
s   ™FÁ/FÆFc                ó°   — t        j                  | d¬«      }|j                  �|j                  j                  «       S |j                  j                  «       S )NF)Úmethod)r   Úfrom_native_functionÚsymint_signatureÚ	argumentsrX   )rb   Úsigss     rF   Úcpp_argumentsru   ·   sH   € ä×1Ñ1°!¸EÔB€DØ×ÑÐ(Ø×$Ñ$×.Ñ.Ó0Ð0à�~‰~×'Ñ'Ó)Ð)rP   c                ó@  — |}t        | «      D �cg c]  }|j                  j                  «       ‘Œ }}t        d„ t	        j
                  | «      D «       «      }t        d„ | j                  j                  D «       «      }t        ||«      D �	�
cg c]  \  }	}
t        |	|
«      ‘Œ }}	}
t        |||«      \  }}t        |||«      \  }}|D �	ch c]-  }	t        j                  t        j                  |	«      |«      r|	’Œ/ }}	t        |«      D ]s  }|t!        | j                  j                  «      k\  sŒ&t#        dt	        j$                  | j                  «      › d|› dt!        | j                  j                  «      › d�«      ‚ t'        ||||||¬«      S c c}w c c}
}	w c c}	w )Nc              3  ó.   K  — | ]  }|d k7  r|nd–— Œ y­w)ÚselfÚresultN© )Ú.0Úns     rF   ú	<genexpr>z$create_derivative.<locals>.<genexpr>Ë   s   è ø€ ÒU¸A˜a 6šk™¨xÓ7ÑUùs   ‚c              3  óf   K  — | ])  }t        j                  |d ¬«      j                  «       –— Œ+ y­w)T)ÚsymintN)r   Úreturn_typeÚremove_const_ref)r{   Úrs     rF   r}   z$create_derivative.<locals>.<genexpr>Ì   s)   è ø€ ò Ø?@Œ�‰˜ $Ô'×8Ñ8×:ñùs   ‚/1z3Out of bounds grads access: derivative formula for z used grads[z ], but the forward only returns z	 outputs.)ÚformulaÚoriginal_formulaÚ	var_namesÚsaved_inputsÚsaved_outputsÚnamed_gradients)ru   Únctyper�   Útupler   Úreturn_namesr1   ÚreturnsÚzipr   Úsaved_variablesÚreÚsearchr*   ÚformatÚused_gradient_indicesr8   ÚRuntimeErrorr2   r	   )rb   rƒ   r…   Úavailable_named_gradientsr„   Úars   r‹   Úreturn_typesr2   ÚtypeÚnamed_returnsr†   r‡   Úused_named_gradientsÚis                   rF   Úcreate_derivativer›   À   s¨  € ð Ðä-:¸1Ó-=ö#Ø()ˆ�‰×!Ñ!Õ#ð#€Ið #ô ÑUÄ×AQÑAQÐRSÓATÔUÓU€LÜñ ØDEÇFÁFÇNÁNôó €Lô
 25°\À<Ó1P÷Ù#- 4¨Œ
�4˜Õð€Mñ ô ,¨G°YÀ	ÓJÑ€Gˆ\Ü,¨W°mÀYÓOÑ€Gˆ]ð .öàÜ�9‰9”[×'Ñ'¨Ó-¨wÔ7ò 	ðÐð ô # 7Ó+ò ˆØ”�A—F‘F—N‘NÓ#Ó#ÜØEÄcÇhÁhÈqÏvÉvÓFVÐEWð XØ˜SÐ @ÄÀQÇVÁVÇ^Á^ÓATÐ@UÐU^ð`óð ðô ØØ)ØØ!Ø#Ø,ôð ùò=#ùóùòs   �!FÂFÃ
2Fc           	     ó&  — |}d }| j                   j                  D ]%  }|j                  |v sŒ|€d}||j                  fz   }Œ' |€³|dk(  rIt	        | j                   j                  «      dk(  sJ ‚| j                   j                  d   j                  f}ne|D ]`  }t        j                  d|«      }t	        |«      dk(  sŒ(|€d}t        |d   «      }|| j                   j                  |   j                  fz   }Œb |€J d«       ‚t        |||d d dd¬«      S )	Nrz   )ry   é   r   z^result(\d+)$z4No matching output for forward derivative definitionF©rƒ   r…   Ú	var_typesÚrequired_inputs_fw_gradÚrequired_inputs_primalÚrequired_original_self_valueÚis_reusing_outplace_formula)	r1   rŒ   r2   r—   r8   r�   ÚfindallÚintr   )	rb   rƒ   Únamesr…   rŸ   r‚   Úvar_nameÚresÚarg_idxs	            rF   Úcreate_forward_derivativerª   ï   s-  € ð €IØ)-€IØ�V‰V�^‰^ò .ˆØ�6‰6�YÒØÐ Ø�	Ø! Q§V¡V IÑ-‰Ið	.ð ÐØ˜Ò#Ü�q—v‘v—~‘~Ó&¨!Ò+Ð+Ð+ØŸ™Ÿ™¨Ñ*×/Ñ/Ð1‰Ià%ò L�Ü—j‘jÐ!1°8Ó<�Ü�s“8˜q“=Ø Ð(Ø$&˜	Ü! # a¡&›k�GØ )¨Q¯V©V¯^©^¸GÑ-D×-IÑ-IÐ,KÑ K‘IðLð Ð ÐXÐ"XÓXÐ ÜØØØØ $Ø#Ø%*Ø$)ôð rP   c                óê  ‡ ‡‡‡‡— dˆˆˆ fd„}g }|D �]Ø  }|j                   }	 ||	d«      }
|	dk(  �rS‰ j                  j                  «       t        j                  k7  sJ d‰ j                  j
                  › d�«       ‚t        ‰«      dk(  r)t        |«      dkD  st        |d   j                  «      dkD  rt        d‰› d	�«      ‚t        |«      dk(  st        d‰› d
�«      ‚|d   j                  }‰d   j
                  Šdˆfd„}t        j                  t        j                  d«      ||«      }‰D ]>  }|j
                  Šdˆfd„}t        j                  t        j                  ‰«      ||«      }Œ@ d|› d�}t        |«      }
|}	�n)|	dk(  �r#t        |«      dkD  st        |d   j                  «      dkD  rt        d‰› d�«      ‚‰D �cg c]  }|j
                  ‘Œ }}t        |«      dkD  sJ ‚g }|D ]  Š‰|v r‰dz   Š|j                  ‰«       Œ ‰ j                  j!                  «       r‰dz  Št"        j$                  ‰ j&                  v rd‰› ddj)                  |«      › d�}n>t"        j*                  ‰ j&                  v sJ ‚|d   › d‰› ddj)                  |dd  «      › d�}t        |«      }
|}	 ||	d«      }|j                  t-        |	|j                  |j.                  |
|dd¬«      «       �ŒÛ |S c c}w )Nc                óî  •— ‰	j                   j                  j                  j                  j                  d«      }t	        «       }‰D ]¢  }|j
                  dv r|sŒ|j                  }t        j                  t        j                  |«      | «      }|rt        d‰› d|› d|› d|› d�	«      ‚t        j                  t        j                  ||z   «      | «      }|sŒ’|j                  |«       Œ¤ t        |«      S )NÚ	_foreach_)zat::TensorListzconst at::ITensorListRef &zThe forward formula for z is using the base name of the z- argument which is ambiguous. You should use z"_p to access the primal value and z_t to access the tangent.)r1   r2   ÚbaseÚ
startswithr[   r—   r�   r�   r*   r‘   r“   ÚaddrŠ   )
rƒ   ÚpostfixÚ
is_foreachÚrequired_inputsÚargÚarg_nameÚfoundÚargs_with_derivativesÚ	defn_namerb   s
          €€€rF   Úfind_required_inputsz=postprocess_forward_derivatives.<locals>.find_required_inputs  sö   ø€ Ø—V‘V—[‘[×%Ñ%×*Ñ*×5Ñ5°kÓBˆ
Ü›%ˆØ(ò 	.ˆCà—‘ÐLÑLÙ"ð Ø—x‘xˆHä—I‘Iœk×0Ñ0°Ó:¸GÓDˆEÙÜ"Ø.¨y¨kÐ9XÐYaÐXbð cCØCKÀ*ð M!Ø!) 
Ð*CðEóð ô —I‘Iœk×0Ñ0°¸GÑ1CÓDÀgÓNˆEÚØ×#Ñ# HÕ-ð'	.ô* �_Ó%Ð%rP   Ú_tÚauto_element_wisez"Cannot use auto_element_wise with z" because it is an in-place variantr�   r   úDerivative definition of z¸ in derivatives.yaml defines the forward definition of gradient as element_wise but this only works for functions with a single differentiable input and a single differentiable output.z  in derivatives.yaml defines the forward definition of gradient as element_wise but it does not defines the gradient formula for its argument which is required.c                óR   •— | j                  d«      › ‰› d| j                  d«      › �S )Nr�   z	_t.conj()é   ©Úgroup)ÚmÚ
input_names    €rF   Úreplz-postprocess_forward_derivatives.<locals>.repl`  s(   ø€ ØŸ'™' !›*˜ j \°¸1¿7¹7À1»:¸,ÐGÐGrP   Úgradc                óR   •— | j                  d«      › ‰› d| j                  d«      › �S )Nr�   Ú_pr¾   r¿   )rÁ   rµ   s    €rF   rÃ   z-postprocess_forward_derivatives.<locals>.repli  s(   ø€ ØŸg™g a›j˜\¨(¨°2°a·g±g¸a³j°\ÐBÐBrP   ú(z).conj()Úauto_linearz� in derivatives.yaml defines the forward definition of gradient as linear but this only works for functions with a single differentiable output.Ú_symintzat::z, ú)ú.rÆ   Frž   )rƒ   rZ   r±   rZ   Úreturnútuple[str, ...])rÁ   r   rÌ   rZ   )rƒ   r1   Úkindr&   Úinplacer2   r8   r…   r“   r„   r�   Úsubr*   r‘   rŠ   rY   Ú
has_symintr(   rh   ÚvariantsÚjoinrp   r   rŸ   )rb   r¸   Úall_arg_namesÚderivativesÚforward_derivativesr·   r¹   Úupdated_derivativesÚdefnrƒ   Úrequired_inputs_tangentÚbackward_formularÃ   Ú
fw_formular´   Údiff_arg_namesÚnew_argsr¡   rµ   rÂ   s   ``   `            @@rF   Úpostprocess_forward_derivativesrÞ     sN  ü€ ÷&ð4 46Ðà#ó z
ˆØ—,‘,ˆÙ"6°wÀÓ"EÐØÐ)Ó)Ø—6‘6—;‘;“=¤J×$6Ñ$6Ò6ð Ø4°Q·V±V·[±[°MÐAcÐdóÐ6ô Ð.Ó/°1Ò4ÜÐ*Ó+¨aÒ/ÜÐ*¨1Ñ-×7Ñ7Ó8¸1Ò<ä"Ø/°	¨{ð ;4ð 4óð ô �{Ó# qÒ(Ü"Ø/°	¨{ð ;Wð Wóð ð"  +¨1™~×>Ñ>ÐØ.¨qÑ1×6Ñ6ˆJõHô Ÿ™¤× 2Ñ 2°6Ó :¸DÐBRÓSˆJð -ò T�ØŸ8™8�õCô  ŸV™V¤K×$6Ñ$6°xÓ$@À$È
ÓS‘
ðTð ˜Z˜L¨Ð1ˆJô ',¨MÓ&:Ð#Ø ŠGØ˜Ó%äÐ'Ó(¨1Ò,ÜÐ*¨1Ñ-×7Ñ7Ó8¸1Ò<ä"Ø/°	¨{ð ;Ið Ióð ð 3HÖH¨3˜cŸh›hÐHˆNÐHÜ�~Ó&¨Ò*Ð*Ð*ð ˆHØ)ò *�Ø˜~Ñ-Ø'¨$™�HØ—‘ Õ)ð*ð �v‰v× Ñ Ô"Ø˜YÑ&�	ô ×Ñ 1§:¡:Ñ-Ø# I ;¨a°·	±	¸(Ó0CÐ/DÀAÐF‘
ä—~‘~¨¯©Ñ3Ð3Ð3Ø (¨¡˜}¨A¨i¨[¸¸$¿)¹)ÀHÈQÈRÀLÓ:QÐ9RÐRSÐT�
ô ',¨NÓ&;Ð#Ø ˆGñ "6°g¸tÓ!DÐà×"Ñ"ÜØØŸ.™.ØŸ.™.Ø(?Ø'=Ø-2Ø,1ôö
	
ðaz
ðx ÐùòW Is   ÇK0c                ó0   — |D ]  }|| vc S  t        d«      ‚)Nz Expected `names` to be non-empty)r“   )rÔ   r¦   r2   s      rF   Ú is_forward_derivative_definitionrà   ·  s*   € ð ò )ˆØ˜=Ð(Ò(ð)ä
Ð9Ó
:Ð:rP   c                ó¶  ‡‡‡‡‡— 	 	 	 	 	 	 d#d„}d$d„Šd%d„Št         	 	 	 	 d&ˆˆˆˆˆfd„«       }| j                  d«      }t        |«      \  Š}| j                  dd«      Šd}	‰r4t        d„ ‰D «       «      r"t	        ‰«      d	k7  rt        d
|› d�«      ‚‰}	dgŠ|j                  |«      }
|
s9dj                  ˆfd„|j                  «       D «       «      }t        d|› d|› �«      ‚|
j                  j                  «       }||   }t	        |«      dk(  r<dj                  ˆfd„|j                  «       D «       «      }t        d|› d|› d|› �«      ‚ ||‰«      }dd„ t        |«      D «       v rt        d‰› d�«      ‚dd„ t        |«      D «       v rt        d‰› d�«      ‚i }| d   j                  «       D �]  \  }Š|dk7  r |t        vrt        d|› d |› d!t        › �«      ‚||vr|j                  |«        ||«      \  }}}}}t        «       }|D ]  }||j                  z  }Œ d}|r+t!        ‰«      }|dk7  r||z   }|› ||   › �}||xx   d	z  cc<   t#        ‰||||t%        |D ��cg c]  }|j&                  D ]  }|‘Œ Œ c}}«      t%        |D ��cg c]  }|j(                  D ]  }|‘Œ Œ c}}«      ||||‰|	¬"«      ||<   �Œ |j                  |fS c c}}w c c}}w )'z3Processes a single entry `defn` in derivatives.yamlr2   c                ó:  — | D ]h  }|j                   j                  «       rŒ|j                   j                  «       rŒ9|t        |j                   j                  j                  «      k(  sŒf|c S  |dz   t        j                  | d   j                   «      k(  sJ ‚| d   S )NÚ_r   )r1   Úis_functional_fnÚ	is_out_fnrZ   r2   r   )rN   r2   rb   s      rF   Úcanonical_functionz9create_differentiability_info.<locals>.canonical_functionÈ  s„   € ð ò 	ˆAà—F‘F×+Ñ+Õ-ØŸ™×(Ñ(Õ*ØœC §¡§¡× 0Ñ 0Ó1Ó1à’ð	ð �c‰zœSŸX™X i°¡l×&7Ñ&7Ó8Ò8Ð8Ð8Ø˜‰|ÐrP   c                óD   — t        d„ | j                  d«      D «       «      S )z(Given "foo, bar", return ["foo", "bar"].c              3  ó<   K  — | ]  }|j                  «       –— Œ y ­w©N)Ústrip)r{   Úxs     rF   r}   zEcreate_differentiability_info.<locals>.split_names.<locals>.<genexpr>Ø  s   è ø€ Ò= 1�Q—W‘W—YÑ=ùó   ‚ú,)rŠ   Úsplit)Ú	raw_namess    rF   Úsplit_namesz2create_differentiability_info.<locals>.split_namesÖ  s   € äÑ=¨	¯©¸Ó(<Ô=Ó=Ð=rP   c           	     óP  — d}d}d}g }|D ]¬  }|j                   }|xs2 t        t        j                  t	        j
                  d«      |«      «      }|t        t        j                  t	        j
                  d«      |«      «      z  }|xs t        |j                  «      }|j                  t        |«      «       Œ® |t        |«      k\  sJ ‚|t        |«      k(  }|r|dkD  rt        d| › d�«      ‚|rt        |«      dhk(  rt        d| › d�«      ‚|r|s|dkD  rt        d| › d�«      ‚y	y	)
zÉ
        Check for some subtle mistakes one might make when writing derivatives.
        These mistakes will compile, but will be latent until a function is
        used with double backwards.
        Fr   rÄ   Úgradsr¼   zx in derivatives.yaml illegally mixes use of 'grad' and 'grads'. Consider replacing occurrences of 'grad' with 'grads[0]'zÔ in derivatives.yaml solely refers to 'grads[0]'.  If the first output is indeed the only differentiable output, replace 'grads[0]' with 'grad'; otherwise, there is a likely error in your derivatives declaration.z‡ in derivatives.yaml illegally mixes use of "grad_RETURN_NAME" and "grad" or "grads[x]". Use only one method for identifying gradients.N)rƒ   Úboolr�   r¤   r*   r‘   r8   rˆ   Úextendr’   r“   r[   )	r¸   rÕ   Ú	uses_gradÚnum_grads_usesÚuses_named_gradsÚused_grads_indicesÚdrƒ   Úonly_used_grads_indicess	            rF   Úcheck_grad_usagez7create_differentiability_info.<locals>.check_grad_usageÚ  sg  € ð ˆ	ØˆØ ÐØ(*ÐØò 	FˆAØ—i‘iˆGØ!ò ¤TÜ—
‘
œ;×-Ñ-¨fÓ5°wÓ?ó&ˆIð œc¤"§*¡*¬[×-?Ñ-?ÀÓ-HÈ'Ó"RÓSÑSˆNØ/ÒJ´4¸×8IÑ8IÓ3JÐØ×%Ñ%Ô&;¸GÓ&DÕEð	Fð ¤Ð%7Ó!8Ò8Ð8Ð8ð #1´CÐ8JÓ4KÑ"KÐá˜¨!Ò+ÜØ+¨I¨;ð 78ð 8óð ñ #¤sÐ+=Ó'>À1À#Ò'EÜØ+¨I¨;ð 7ð óð ñ ¡¨n¸qÒ.@ÜØ+¨I¨;ð 7=ð =óð ð /AÐrP   c           
     ó˜  •— g }g }g }t        «       }t        | «      D �cg c]  }|j                  ‘Œ }}| j                  j                  D �cg c]  }|j                  ‘Œ }}‰xs# dgt        | j                  j                  «      z  }	t        | j                  j                  |	«      D �
�cg c]<  \  }
}|r5|
j                  �)|
j                  j                  «       rd|
j                  › �‘Œ> }}
}t        ‰j                  «       «      D ]Á  }‰|   } ‰|«      }|D ]0  }||v sŒ||v sŒJ d| j                  j                  › d|› d|› d�«       ‚ t        ||«      r|j                  t        | ||«      «       Œn|j                  «       j                  «       dk(  r||z  }Œ•t!        | |||«      }|j                  |«       |t        |«      z  }ŒÃ |j#                  |«      }|rt%        d‰› d	|› �«      ‚t        | «      D �cg c]  }|j                  |v sŒ|‘Œ }}t'        | ‰||||«      } ‰‰|«       |||||fS c c}w c c}w c c}}
w c c}w )
NTÚgrad_z-While processing the derivative formula for 'z' wrt 'z', expected 'z0' to not be both an input arg and named return. Únon_differentiablezderivatives definition for zB have overlapped non_differentiable and differentiable variables: )r[   ru   r2   r1   rŒ   r8   r�   r—   Úis_tensor_likeÚsortedÚkeysrà   rY   rª   Úlowerrê   r›   Úintersectionr“   rÞ   )rb   rÕ   rÖ   Únon_differentiable_arg_namesÚargs_with_derivatives_setr•   rÔ   r‚   Úall_ret_namesÚdifferentiabilityÚretÚdifferentiabler”   rï   rƒ   r¦   r2   Ú
derivativeÚoverlapr·   rû   rØ   r¸   rR   rð   s                       €€€€€rF   Úset_up_derivativesz9create_differentiability_info.<locals>.set_up_derivatives  s¡  ø€ ð )+ˆØ79ÐØ24Ð$Ü.1«eÐ!ä)6°qÓ)9Ö: A˜Ÿ›Ð:ˆÐ:àŸF™FŸN™Nö
ØˆA�F‹Fð
ˆð 
ð 5ÒT¸¸ÄÀQÇVÁVÇ^Á^ÓATÑ8TÐô (+¨1¯6©6¯>©>Ð;LÓ'M÷	%
á#��^áà—‘Ð$à—‘×'Ñ'Ô)ð �C—H‘H�:Òð	%
Ð!ñ 	%
ô   §	¡	£Ó,ò 	<ˆIØ˜9‘oˆGÙ 	Ó*ˆEàò �Ø  MÒ1°d¸mÒ6Kð ØCÀAÇFÁFÇKÁKÀ=ÐPWÐX\ÐW]ð ^!Ø!% Ð&VðXóÐLðô 0°¸uÔEØ#×*Ñ*Ô+DÀQÈÐQVÓ+WÕXà—=‘=“?×(Ñ(Ó*Ð.BÒBØ0°EÑ9Ñ0ä!2Ø˜7 EÐ+Dó"�Jð  ×&Ñ& zÔ2Ø-´°U³Ñ;Ñ-ð)	<ð, ,×8Ñ8Ð9UÓVˆÙÜØ-¨d¨Vð 41Ø18°	ð;óð ô % QÓ'ö!
Ø¨1¯6©6Ð5NÒ+NŠAð!
Ðð !
ô
 >ØØØØØØ!ó
Ðñ 	˜ KÔ0ð ØØ!Ø(Ø%ð
ð 	
ùòW ;ùò
ùó	%
ùòV!
s   ŸH7ÁH<Â+AIÇ=IÈIrR   Nc              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­wré   )rL   rZ   )r{   Údiffs     rF   r}   z0create_differentiability_info.<locals>.<genexpr>w  s   è ø€ ò (Ø"&Œ
�4œ×ñ(ùrì   r�   zNot supported: for zÉ,output_differentiability must either be list[bool] or a list[str] where each str is a condition. In the case where it is a condition, we only support single-output functions. Please file us an issue. Tú
c              3  ón   •K  — | ],  \  }}t        j                  |j                  «      ‰k(  sŒ)|–— Œ. y ­wré   )r   r2   r1   ©r{   ÚkÚvr¸   s      €rF   r}   z0create_differentiability_info.<locals>.<genexpr>ˆ  s.   øè ø€ ò 
Ù�!�Q¼¿¹À!Ç&Á&Ó9IÈYÓ9VŒAñ
ùs   ƒ*5®5z)could not find ATen function for schema: z .  Available signatures:
r   c              3  ój   •K  — | ]*  \  }}t        j                  |«      ‰k(  rt        |«      –— Œ, y ­wré   )r   r2   rZ   r  s      €rF   r}   z0create_differentiability_info.<locals>.<genexpr>–  s1   øè ø€ ò 
á��1Ü�x‰x˜‹{˜iÒ'ô ��Fñ
ùs   ƒ03z3could not find ATen function for legacy signature: z corresponding to schema z9.  Please report a bug to PyTorch. Available signatures:
Úgrad_input_maskc              3  ó4   K  — | ]  }|j                   –— Œ y ­wré   ©r2   ©r{   r•   s     rF   r}   z0create_differentiability_info.<locals>.<genexpr>¢  s   è ø€ ÒF¨˜QŸV�VÑFùó   ‚zSchema for z� has an argument named grad_input_mask, but this name would be shadowed by our codegen. Please use a different name in native_functions.yaml.ry   c              3  ó4   K  — | ]  }|j                   –— Œ y ­wré   r  r  s     rF   r}   z0create_differentiability_info.<locals>.<genexpr>©  s   è ø€ Ò=˜q�A—F•FÑ=ùr  zy has an argument named result, but this is only allowed for outputs.Please use a different name in native_functions.yaml.rQ   rS   zInvalid dispatch key z in derivatives.yaml for z, expected key to be one of )r2   r1   ÚoprÕ   rÖ   Úall_saved_inputsÚall_saved_outputsr”   r™   r·   r  rR   Ú#output_differentiability_conditions)rN   zSequence[NativeFunction]r2   rZ   rÌ   r#   )rï   rZ   rÌ   rÍ   )r¸   rZ   rÕ   zSequence[Derivative]rÌ   ÚNone)rb   r#   rÌ   zituple[Sequence[Derivative], Sequence[ForwardDerivative], Sequence[Binding], Sequence[str], Sequence[str]])r   r\   r+   Úanyr8   r“   r5   rÓ   r4   r1   rX   ru   Ú_VALID_AUTOGRAD_KEYSr°   r[   rˆ   Ú_create_op_prefixr
   Ú
dedup_varsr†   r‡   ) rk   rf   rg   ri   rj   ræ   r  rl   rã   r  Úschema_functionÚavailrX   rN   Ú	canonicalÚdiffinfo_dictra   rÕ   rÖ   r·   r  r”   r™   rù   r  Ú	op_prefixr  rû   rØ   r¸   rR   rð   s                               @@@@@rF   r]   r]   ¿  së  ü€ ðØ+ðØ36ðà	óó>ó1ôf ð`
Øð`
ð
÷`
ð `
ó ð`
ðF —M‘M &Ó)€MÜ$ ]Ó3�L€Iˆqð  )Ÿ}™}Ð-GÈÓNÐØ*.Ð'Ù¤Cñ (Ø*Bô(ô %ô Ð'Ó(¨AÒ-ÜØ% m _ð 5,ð -óð ð /GÐ+Ø$( 6Ð à)×-Ñ-¨mÓ<€OÙØ—	‘	ó 
Ø-×3Ñ3Ó5ô
ó 
ˆô Ø7¸°ð G)Ø).¨ð1ó
ð 	
ð  ×$Ñ$×.Ñ.Ó0€IØ& yÑ1€IÜ
ˆ9ƒ~˜ÒØ—	‘	ó 
à.×4Ñ4Ó6ô
ó 
ˆô
 ØAÀ)Àð M'Ø'4 oð 6&Ø&+ Wð.ó
ð 	
ñ # 9¨iÓ8€IØÑF¬]¸9Ó-EÔFÑFÜØ˜)˜ð %Dð Dó
ð 	
ð Ñ=¤M°)Ó$<Ô=Ñ=ÜØ˜)˜ð %Dð Dó
ð 	
ð €MØ˜zÑ*×0Ñ0Ó2ó 0
‰	ˆˆTØ�)Ò Ô+?Ñ ?ÜØ'¨ uÐ,EÀmÀ_ð U.Ü.BÐ-CðEóð ð Ð(Ñ(Ø×"Ñ" 3Ô'ñ ˜yÓ)ñ	
ØØØ!Ø(Ø%ô *-«ÐØò 	6ˆAØ  A×$5Ñ$5Ñ5Ñ ð	6ð ˆÙ Ü)¨)Ó4ˆIØ�iÒØ%¨™O�	Ø�;˜z¨)Ñ4Ð5Ð6ˆBØ�yÓ! QÑ&Ó!ä2ØØØØ#Ø 3Ü'Ø'×@�q°·±Ò@¨A’Ð@�Ó@óô )Ø'×A�q°·±ÒA¨A’ÐA�ÓAóð '@Ø!5Ø"7Ø)EØ%=Ø0Sô#
ˆ�cÓð=0
ðd �>‰>˜=Ð(Ð(ùó Aùó Bs   É#KÊKz(?:^|\W)grads\[(\d+)\]c                ón   — t        j                  t        | «      D �cg c]  }t        |«      ‘Œ c}S c c}w )z¤Determine a list of gradient indices (the i in grads[i]) that
    are used by the formula.

    >>> used_gradient_indices("foo(grads[0], grads[1])")
    [0, 1]
    )r�   r¤   ÚGRAD_INDEX_REGEXr¥   )rƒ   rš   s     rF   r’   r’   é  s(   € ô ŸJ™JÔ'7¸ÓAÖB�qŒC��FÒBÐBùÒBs   �2c                ó*  ‡‡‡	‡
— dMˆfd„}ddd„ dœfddd„ d	„ d
œfddd„ d„ d
œfddd„ dœfddd„ d„ d„ dœfdd„ d„ dœfddd„ dœfddd „ dœfd!d"d#„ dœfd$d%d&„ dœfd'd(d)„ dœfd*d+d,„ dœfd-d.d/„ dœfd0d1d2„ dœfd3d4d5„ |d
œfd6d7d8„ dœfd9d:d;„ dœfg}g Š
d<| v sd=| v rt        d>d?| › �z   «      ‚t        j                  d@| «      st        j                  dA| «      rt        dBdC| › �z   «      ‚dD| v sdE| v rt        dFdG| › �z   «      ‚|D �]  }t        |j                  t
        «      r|j                  j                  n|j                  Š	|D ]3  \  }ŠdNˆˆ	ˆ
fdH„}t        j                  |j                  ‰	«      || «      } Œ5 |j                  t        t        t        «      «      k(  r!t        j                  dI‰	› dI�‰	› dJ‰	› dK�| «      } t        j                  t        j                  ‰	«      | «      sŒè‰
j                  t        |‰	¬L«      «       �Œ | t        ‰
«      fS )ONc                ó0   •— ‰| fk(  sJ d«       ‚d| › d| › d�S )NzˆReplacement for ".strides()" is currently only supported for single derivatives of the same tensor that ".strides()" is being called on.zstrides_or_error(z, "z")rz   )r2   r…   s    €rF   Ústride_exprz$saved_variables.<locals>.stride_exprø  s6   ø€ Ø˜T˜GÒ#ð 	
ð4ó	
Ð#ð # 4 &¨¨D¨6°Ð4Ð4rP   z{}.sym_sizes\(\)Ú
_sym_sizesc                ó4   — t        | t        t        «      «      S ré   ©r   r   r   r  s    rF   rO   z!saved_variables.<locals>.<lambda>  ó   € ¤z°$¼	Ä/Ó8RÓ'S€ rP   )Úsuffixr‰   z{}->sym_sizes\(\)Ú_sym_sizes_optc                óF   — t        | t        t        t        «      «      «      S ré   ©r   r   r   r   r  s    rF   rO   z!saved_variables.<locals>.<lambda>  ó   € ¤zØœ-¬	´/Ó(BÓCó(€ rP   c                ó   — | › d| › d�S )Nz2.has_value() ? std::optional<c10::SymIntArrayRef>(z->sym_sizes()) : std::nulloptrz   r  s    rF   rO   z!saved_variables.<locals>.<lambda>  s   € ¨ vÐ-_Ð`dÐ_eð  fCð  &D€ rP   )r2  r‰   Úexprz{}.sym_blocksize\(\)Ú_self_sym_blocksize_optc                óF   — t        | t        t        t        «      «      «      S ré   r5  r  s    rF   rO   z!saved_variables.<locals>.<lambda>  r6  rP   c                ó   — d| › d�S )Nz#at::sparse_csr::getSymIntBlockSize(rÊ   rz   r  s    rF   rO   z!saved_variables.<locals>.<lambda>  s   € Ð'JÈ4È&ÐPQÐ%R€ rP   z{}.options\(\)Ú_optionsc                ó4   — t        | t        t        «      «      S ré   )r   r   r   r  s    rF   rO   z!saved_variables.<locals>.<lambda>#  s   € ¤z°$¼	Ä.Ó8QÓ'R€ rP   zzeros_like\({}\)Ú_infoc                ó4   — t        | t        t        «      «      S ré   )r   r   r   r  s    rF   rO   z!saved_variables.<locals>.<lambda>+  s   € ¤z°$¼	Ä,Ó8OÓ'P€ rP   c                ó   — | S ré   rz   r  s    rF   rO   z!saved_variables.<locals>.<lambda>,  s   €  T€ rP   c                ó   — | dz   S )Nz_info.zeros()rz   r  s    rF   rO   z!saved_variables.<locals>.<lambda>-  s   €  D¨?Ñ$:€ rP   )r2  r‰   r8  r¨   z{}.sym_size\((-?\w+)\)c                óN   — d| j                  «       d   j                  dd«      › �S )NÚ_sym_argsize_r   ú-Úminus_)ÚgroupsÚreplace)rÁ   s    rF   rO   z!saved_variables.<locals>.<lambda>4  s%   €  m°A·H±H³J¸q±M×4IÑ4IÈ#ÈxÓ4XÐ3YÐ$Z€ rP   c                ó4   — t        | t        t        «      «      S ré   ©r   r   r   r  s    rF   rO   z!saved_variables.<locals>.<lambda>5  ó   € ¤z°$¼	Ä'Ó8JÓ'K€ rP   z{}.numel\(\)Ú_numelc                ó4   — t        | t        t        «      «      S ré   ©r   r   r   r  s    rF   rO   z!saved_variables.<locals>.<lambda>=  ó   € ¤z°$¼	Ä%Ó8HÓ'I€ rP   z{}.sym_numel\(\)Ú
_sym_numelc                ó4   — t        | t        t        «      «      S ré   rI  r  s    rF   rO   z!saved_variables.<locals>.<lambda>E  rJ  rP   zto_args_sizes\({}\)Ú_args_sizesc           
     óX   — t        | t        t        t        t        «      «      «      «      S ré   )r   r   r   r   r  s    rF   rO   z!saved_variables.<locals>.<lambda>M  s   € ¤zØœ+¤k´)¼EÓ2BÓ&CÓDó(€ rP   zto_args_sizes_symint\({}\)Ú_args_sizes_symintc           
     óX   — t        | t        t        t        t        «      «      «      «      S ré   )r   r   r   r   r  s    rF   rO   z!saved_variables.<locals>.<lambda>W  s   € ¤zØœ+¤k´)¼GÓ2DÓ&EÓFó(€ rP   zto_args_scalartypes\({}\)Ú_args_scalartypesc                óF   — t        | t        t        t        «      «      «      S ré   )r   r   r   r   r  s    rF   rO   z!saved_variables.<locals>.<lambda>a  s   € ¤zØœ+¤i´Ó&<Ó=ó(€ rP   zTensorGeometry\({}\)Ú	_geometryc                ó4   — t        | t        t        «      «      S ré   )r   r   r   r  s    rF   rO   z!saved_variables.<locals>.<lambda>k  r1  rP   z{}.scalar_type\(\)Ú_scalar_typec                ó4   — t        | t        t        «      «      S ré   )r   r   r   r  s    rF   rO   z!saved_variables.<locals>.<lambda>r  s   € ¤z°$¼	Ä+Ó8NÓ'O€ rP   z
{}.dim\(\)Ú_dimc                ó4   — t        | t        t        «      «      S ré   rM  r  s    rF   rO   z!saved_variables.<locals>.<lambda>z  rN  rP   z{}.sym_strides\(\)Ú_sym_stridesc                ó4   — t        | t        t        «      «      S ré   r0  r  s    rF   rO   z!saved_variables.<locals>.<lambda>‚  r1  rP   z{}.layout\(\)Ú_layoutc                ó4   — t        | t        t        «      «      S ré   )r   r   r   r  s    rF   rO   z!saved_variables.<locals>.<lambda>‹  rJ  rP   z{}.is_conj\(\)Ú
_conjugatec                ó4   — t        | t        t        «      «      S ré   )r   r   r   r  s    rF   rO   z!saved_variables.<locals>.<lambda>“  rN  rP   z.sizes()z	->sizes()zY.sizes() is not supported in derivative formulas. Instead, please use the SymInt version,z<.sym_sizes(), which returned a c10::SymIntArrayRef. formula=z\.size\([-]?\d+\)z->size\([-]?\d+\)z[.size(int) is not supported in derivative formulas. Instead, please use the SymInt version,z>.sym_size(int), which returned a c10::SymIntArrayRef. formula=z
.strides()z->strides()z[.strides() is not supported in derivative formulas. Instead, please use the SymInt version,z>.sym_strides(), which returned a c10::SymIntArrayRef. formula=c                óü   •— t        ‰d   «      r ‰d   | «      n‰d   }d‰v r ‰d   ‰«      n| j                  d«      }‰j                  t         ‰d   ‰|z   «      |¬«      «       d‰v r ‰d   ‰«      }|S ‰|z   S )Nr2  r8  r   r‰   ©r‰   r8  r¨   )ÚcallablerÀ   rY   r   )rÁ   r2  r8  ÚreplacementrC   r2   Úsaveds       €€€rF   rÃ   zsaved_variables.<locals>.repl´  s›   ø€ ä)1°$°x±.Ô)A�N�D˜‘N 1Ô%ÀtÈHÁ~ð ð 39¸D±.˜L˜D ™L¨Ô.ÀaÇgÁgÈaÃj�Ø—‘Ü"Ø-˜t H™~¨d°V©mÓ<Ø!ôôð ˜D‘=Ø'2 t¨E¡{°4Ó'8�KØ&Ð&Ø˜f‘}Ð$rP   z\bz/.has_value() ? std::optional<std::string_view>(z.value()) : std::nulloptrd  ©r2   rZ   rÌ   rZ   )rÁ   zre.Match[str]rÌ   rZ   )r“   r�   r�   rL   r2   r   rÐ   r‘   r—   r   r   r   r*   rY   r   rŠ   )rƒ   Únctypesr…   r-  ÚREPLACEMENTSr‰   ÚregexrÃ   rC   r2   rg  s     `     @@@rF   rŽ   rŽ   ó  s=  û€ õ
5ð  à&ÙSñð	
ð !à*ññ Dñð		
ð $à3ññ Sñð		
ð à$ÙRñð	
ð  à!ÙPÙ)Ù:ñ	ð	
ð &áZÙKñð	
ð à"ÙIñð	
ð  à&ÙKñð	
ð #à'ññð	
ð *à.ññð	
ð )à-ññð	
ð $à%ÙSñð	
ð "à(ÙOñð	
ð à ÙIñð	
ð "à(ÙSØ#ñð	
ð à#ÙKñð	
ð à&ÙIñð	
ðaW6€Lðt #%€Eà�WÑ ¨wÑ 6ÜØgØLÈWÈIÐVñWó
ð 	
ô 
‡y�yÐ% wÔ/´2·9±9Ø˜gô4ô ØiØNÈwÈiÐXñYó
ð 	
ð �wÑ -°7Ñ":ÜØiØNÈwÈiÐXñYó
ð 	
ð ó +ˆä *¨6¯;©;¼Ô GˆF�K‰K×ÒÈVÏ[É[ð 	ð
 (ò 	@‰KˆE�4÷%ô  —f‘f˜UŸ\™\¨$Ó/°°wÓ?‰Gð%	@ð. �;‰;œ-¬	´'Ó(:Ó;Ò;Ü—f‘fØ�d�V˜2�Ø�&ÐGÈÀvÐMeÐfØóˆGô �9‰9”[×'Ñ'¨Ó-¨wÕ7Ø�L‰LÜØ!ØôöðM+ðZ ”E˜%“LÐ Ð rP   c                ó®   — dj                  | j                  d«      D �cg c]  }|j                  «       ‘Œ c}«      }|dz   j                  dd«      S c c}w )aW  Takes a native function name converts to a op prefix name.

    Note that the "name" parameter must be the native function name
    without the optional variant suffix, so "add" instead of
    "add.out".

    OP names correspond to classes, hence the change to title case.

    Example::
    >>> _create_op_prefix("add")
    'AddBackward'
    Ú rã   ÚBackwardÚForwardBackward)rÓ   rî   ÚtitlerG  )r2   ÚpÚ
camel_cases      rF   r"  r"  Ü  sI   € ð —‘¨T¯Z©Z¸«_Ö=¨˜!Ÿ'™'�)Ò=Ó>€JØ˜Ñ#×,Ñ,Ð->À
ÓKÐKùò >s   ŸAc                ó.  — t        «       }g }| D ]ƒ  }t        |j                  j                  t        «      r |j                  j                  j                  n|j                  j                  }||v rŒb|j                  |«       |j                  |«       Œ… |S ré   )r[   rL   r‰   r2   r   r°   rY   )ÚvarsÚseenrg  Úvarr2   s        rF   r#  r#  í  s~   € Ü“U€DØ"$€EØò 	ˆô ˜#Ÿ*™*Ÿ/™/¬>Ô:ð �J‰J�O‰O× Ò à—‘—‘ð 	ð
 �4‰<ØØ�‰�ŒØ�‰�SÕð	ð €LrP   )r:   z6dict[FunctionSchema, dict[str, DifferentiabilityInfo]]r;   zlist[NativeFunctionsViewGroup]rÌ   r  )r^   rZ   r_   rZ   r`   rZ   rÌ   ÚDerivativeRet)rb   r#   rÌ   úSequence[Binding])
rb   r#   rƒ   rZ   r…   rÍ   r”   zSequence[str]rÌ   r	   )rb   r#   rƒ   rZ   r¦   rÍ   rÌ   r   )rb   r#   r¸   rZ   rÔ   ú	list[str]rÕ   zlist[Derivative]rÖ   úlist[ForwardDerivative]r·   rx  rÌ   rz  )rÔ   ry  r¦   rÍ   rÌ   ró   )rk   zdict[Any, Any]rf   z*dict[FunctionSchema, list[NativeFunction]]rg   zdict[str, NativeFunction]ri   zCounter[str]rj   zset[str]rÌ   z7tuple[FunctionSchema, dict[str, DifferentiabilityInfo]])rƒ   rZ   rÌ   z	list[int])rƒ   rZ   ri  zlist[NamedCType]r…   rÍ   rÌ   z&tuple[str, tuple[SavedAttribute, ...]]rh  )rt  úSequence[SavedAttribute]rÌ   r{  )NÚ
__future__r   r�   Úcollectionsr   r   Útypingr   r   rU   Útorchgen.apir   Útorchgen.api.autogradr	   r
   r   r   Útorchgen.api.typesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Útorchgen.contextr   Útorchgen.genr   r    Útorchgen.modelr!   r"   r#   r$   r%   r&   r'   r(   Útorchgen.utilsr)   r*   r+   Útorchgen.yaml_utilsr,   Úcollections.abcr-   rŠ   ÚdictrZ   r[   rw  r.   Ú__annotations__r!  rG   rn   ru   r›   rª   rÞ   rà   r]   r*  r’   rŽ   r"  r#  rz   rP   rF   ú<module>rŠ     s\  ðö #ã 	ß ,ß %ã å ÷ó ÷÷ ÷ ÷ õ õ& 2ß P÷	÷ 	ó 	÷ EÑ DÝ *ñ Ý(ð �d˜>¨4°Ð5JÐ0JÑ+KÐKÑLÈcÐRUÉhÐVÑW€àFHÐ ÐCÓ Há˜=Ó)Ð ðØAðà/ðð 
óðDJ.ØðJ.Ø25ðJ.ØGJðJ.àóJ.ð\ ò*ó ð*ð,Øð,àð,ð ð,ð  -ð	,ð
 ó,ð^"Øð"Ø #ð"Ø,;ð"àó"ðJ`Øð`àð`ð ð`ð "ð	`ð
 1ð`ð -ð`ð ó`ðF;Øð;Ø%4ð;à	ó;ðd)Øðd)àFðd)ð 3ðd)ð ð	d)ð
 !ðd)ð =ód)ðN	 -Ð óCðf!Øðf!àðf!ð ðf!ð ,ó	f!óRLô"rP   