
    h                     	   % S SK rS SKrS SKrS SKJr  S SKJrJrJ	r	J
r
JrJrJrJrJrJrJr  S SKrS SKrS SKJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(  \\\)\*\*\*4   \\)\*\*\*\*4   4   r+\\+   r,\\\)\)4      r-/ SQr.\,\/S'   \	\\)\*4   \*4   r0S\,S\04S	 jr1\1" \.5      r2 SzS
\\   S\3S\*4S jjr4   S{S\)S\\)   S\\)   S\\)   S\\)   S\\)   S\S\4S jjr5S\)S\*S\4S jr6    S|S\\   S\)S\\&   S\\&   S\\\"      S\\)   S\\\&      S\\\!      S\4S jjr7S\)S\*S\4S jr8   S{S\)S\)S\\)   S\\)   S\\   S\\   S\\\)      S \\\      S\\)   S\4S! jjr9S"\S\S\4S# jr:S"\S\S\4S$ jr;S%\S&\	\)\)4   SS4S' jr<S(\\Rz                     S\\*   4S) jr>SzS*\?S+\3S\*4S, jjr@    S}S*\?S-\?S.\3S/\3S0\3S\*4S1 jjrA    S~S*\?S-\?S.\3S/\3S0\3S\*4S2 jjrB SzS\)S3\*S4\\*   S5\S6\3S\"4S7 jjrCS8\"S9\"S4\\*   S\!4S: jrDS\)S;\ R                  S8\\   S\ 4S< jrFS\)S=\*S>\\   S8\ S\4
S? jrGS\)S;\R                  S@\\   S\4SA jrHS@\\)\I4   S\I4SB jrJ  SSC\)S@\S\\)   SD\\*   S\4
SE jjrK SS\)SD\R                  S\\)   S\4SF jjrMSG\S\4SH jrNSI\SJ\)S\4SK jrOS\)S\&4SL jrP SS;\*SM\\\\)\*S4         SN\\\)      S\%4SO jjrQ  SS\)S;\*SM\\\\)\*S4         S\)SN\\\)      S\&4SP jjrR SS;\*SM\\\\)\*S4         SN\\\)      S\%4SQ jjrS  SS\)S;\*SM\\\\)\*S4         S\)SN\\\)      S\&4SR jjrTSS\%S\%4ST jrUSS\%S\%4SU jrVS=\*SV\%S\%4SW jrW SS\)SX\%S\)S\&4SY jjrXSZ\\)\I4   S\)4S[ jrY  SS\)S;\*SM\\\\)\*S4         S\)S\\\\)      S\&4S] jjrZ SzSG\S^\3S\\)\\)\\   4   4   4S_ jjr[S`\#R                  S\)4Sa jr]Sb\%S\)4Sc jr^Sd\&S\)4Se jr_Sb\"S\)4Sf jr` SSI\Sg\)S^\3S\\)\\)\\   4   4   4Sh jjraSS"\Sg\)S\)4Si jjrbSj\R                  R                  R                  SS4Sk jrfSl\Sm\-Sn\\   So\\-   S\$4
Sp jrgSq\*S\R                  4Sr jriSq\*S\*4Ss jrjSq\*S\)4St jrkSq\*S\)4Su jrlSv\R                  S\*4Sw jrmS\
\*   4Sx jrn\R                  R                  5        V Vs0 s H  u  pX_M	     snn rpSD\*S\)4Sy jrqgs  snn f )    N)isnan)AnyCallableDictKeysViewListOptionalSequenceTupleTypeVarUnioncast)
IR_VERSIONAttributeProtoFunctionProto
GraphProtoMapProto
ModelProto	NodeProtoOperatorSetIdProtoOptionalProtoSequenceProtoSparseTensorProtoTensorProtoTensorShapeProtoTrainingInfoProto	TypeProtoValueInfoProtodefsmapping))z1.0      r"   )z1.1r!      r"   )z1.1.2r!      r"   )z1.2r!      r"   )z1.3r!      r"   )z1.4.1   	   r"   )z1.5.0r#   
   r"   )z1.6.0r$         )z1.7.0r%      r+   r"   )z1.8.0r%      r+   r"   )z1.8.1r%   r-   r+   r"   )z1.9.0r%      r+   r"   )z1.10.0r&      r+   r"   )z1.10.1r&   r/   r+   r"   )z1.10.2r&   r/   r+   r"   )z1.11.0r&      r!   r"   )z1.12.0r&      r!   r"   )z1.13.0r&      r!   r"   )z1.13.1r&   r2   r!   r"   )z1.14.0r(      r!   r"   )z1.14.1r(   r3   r!   r"   )z1.15.0r(      r'   r"   VERSION_TABLEtablereturnc                 `   ^ 0 mS[         S[        S[        SS4U4S jjnU  H  nU" U6   M
     T$ )zNcreate a map from (opset-domain, opset-version) to ir-version from above tablerelease_version
ir_versionargsr7   Nc                 v   > A [        / SQU5       H%  nUT;  d  M  UTU'   US   S:X  d  M  UTSUS   4'   M'     g )N)ai.onnxz
ai.onnx.mlai.onnx.trainingr   r>   zai.onnx.preview.trainingr"   )zip)r9   r:   r;   pairresults       E/var/www/fran/franai/venv/lib/python3.13/site-packages/onnx/helper.pyprocess-create_op_set_id_version_map.<locals>.processV   sK    EtLD6!)t700BLF5tAw>?	 M    )strintr   )r6   rC   rowrA   s      @rB   create_op_set_id_version_maprI   R   sF    FM M# Mc Md M  MrE   opsetidlistignore_unknownc                    ^^^ SmS[         [        S4   S[        S[        4UU4S jjmU (       a  [        U4S jU  5       5      $ T$ )a8  Given list of opset ids, determine minimum IR version required.

Arguments:
    opsetidlist (List[OperatorSetIdProto]): The list of OperatorSetIdProto
    ignore_unknown (bool): If True, ignore unknown domain and return default min version for that domain.
Returns:
    The minimum IR version required (integer)
r!   domainNversionr7   c                 l   > U =(       d    SU4nU[         ;   a	  [         U   $ T(       a  T$ [        S5      e)Nr=   zUnsupported opset-version.)OP_SET_ID_VERSION_MAP
ValueError)rM   rN   keydefault_min_versionrK   s      rB   find_min)find_min_ir_version_for.<locals>.find_mins   s;    "G,''(--&&566rE   c              3   ^   >#    U  H"  nT" UR                   UR                  5      v   M$     g 7fN)rM   rN   ).0xrT   s     rB   	<genexpr>*find_min_ir_version_for.<locals>.<genexpr>|   s#     F+Q8AHHaii00+s   *-)r   rF   rG   max)rJ   rK   rS   rT   s    `@@rB   find_min_ir_version_forr]   f   sO     7sDy) 7C 7C 7 7 F+FFFrE   op_typeinputsoutputsname
doc_stringrM   kwargsc                 X   [        5       nXl        UR                  R                  U5        UR                  R                  U5        U(       a  X7l        U(       a  XGl        Ub  XWl        U(       a9  UR                  R                  S [        UR                  5       5       5       5        U$ )az  Construct a NodeProto.

Arguments:
    op_type (string): The name of the operator to construct
    inputs (list of string): list of input names
    outputs (list of string): list of output names
    name (string, default None): optional unique identifier for NodeProto
    doc_string (string, default None): optional documentation string for NodeProto
    domain (string, default None): optional domain for NodeProto.
        If it's None, we will just use default domain (which is empty)
    **kwargs (dict): the attributes of the node.  The acceptable values
        are documented in :func:`make_attribute`.
Returns:
    NodeProto
c              3   F   #    U  H  u  pUc  M
  [        X5      v   M     g 7frW   )make_attribute)rX   rR   values      rB   rZ   make_node.<locals>.<genexpr>   s&      
4
 'N3&&4s   	!!)r   r^   inputextendoutputra   rb   rM   	attributesorteditems)r^   r_   r`   ra   rb   rM   rc   nodes           rB   	make_noderp      s    2 ;DLJJfKKw	$ 
$V\\^4
 	

 KrE   rN   c                 2    [        5       nXl        Xl        U$ zConstruct an OperatorSetIdProto.

Arguments:
    domain (string): The domain of the operator set id
    version (integer): Version of operator set id
Returns:
    OperatorSetIdProto
r   rM   rN   )rM   rN   operatorsetids      rB   make_operatorsetidru      s     '(M!#rE   nodesinitializer
value_infosparse_initializerc                    Uc  / nUc  / nUc  / n[        5       nUR                  R                  U 5        Xl        UR                  R                  U5        UR
                  R                  U5        UR                  R                  U5        UR                  R                  U5        UR                  R                  U5        U(       a  XXl	        U$ )ah  Construct a GraphProto

Arguments:
    nodes: list of NodeProto
    name (string): graph name
    inputs: list of ValueInfoProto
    outputs: list of ValueInfoProto
    initializer: list of TensorProto
    doc_string (string): graph documentation
    value_info: list of ValueInfoProto
    sparse_initializer: list of SparseTensorProto
Returns:
    GraphProto
)
r   ro   rj   ra   ri   rk   rw   ry   rx   rb   )	rv   ra   r_   r`   rw   rb   rx   ry   graphs	            rB   
make_graphr|      s    0 !
LE	JJeJ	KKv	LL 	[)	##$67	J'%LrE   c                 2    [        5       nXl        Xl        U$ rr   rs   )rM   rN   opsetids      rB   make_opsetidr      s     !"GNONrE   fnameopset_imports
attributesattribute_protosc	                    Uc  / nUc  / n[        5       n	X	l        Xl        U	R                  R	                  U5        U	R
                  R	                  U5        U	R                  R	                  U5        U	R                  R	                  U5        U	R                  R	                  U5        U	R                  R	                  U5        U(       a  Xl
        U	$ rW   )r   rM   ra   ri   rj   rk   ro   opset_importrl   attribute_protorb   )
rM   r   r_   r`   rv   r   r   r   rb   fs
             rB   make_functionr      s     
AHFGGNN6HHOOGFFMM%NN-(KKz"-.!HrE   r{   c                    [        5       n[        Ul        UR                  R	                  U 5        SnUR                  SS5      nUb  UR                  R                  U5        O4UR                  R                  5       n[        R                  " 5       Ul        SnUR                  SS5      nUb  UR                  R                  U5        UR                  5        H  u  pg[        X&U5        M     U$ )zConstruct a ModelProto

Arguments:
    graph (GraphProto): *make_graph* returns
    **kwargs: any attribute to add to the returned instance
Returns:
    ModelProto
Nr   	functions)r   r   r:   r{   CopyFrompopr   rj   addr   onnx_opset_versionrN   r   rn   setattr)r{   rc   modelr   impr   kvs           rB   
make_modelr     s     LE "E	KK<@MJJ5M !!-0   $$&--/37I

;-Iy)!  LrE   c                 \    SnX!;  a  SnX1;   a  X   O/ n[        U5      X'   [        U 40 UD6$ )Nr:   r   )r]   r   )r{   rc   ir_version_fieldopset_imports_fieldimportss        rB   make_model_gen_versionr   :  sA    #%-1D1N&-TV#:7#C e&v&&rE   r   
dict_valuec                     U R                   S S 2	 UR                  5        H+  u  p#U R                   R                  5       nX$l        X4l        M-     g rW   )metadata_propsrn   r   rR   rg   )r   r   r   r   entrys        rB   set_model_propsr   C  sC    Q  "$$((*	 #rE   cac                     [        [        U 5      S-  5       Vs/ s H.  nUS-  S:X  a  XS-     R                  OXS-     R                  PM0     sn$ s  snf )Nr+   r   )rangelenrealimag)r   is     rB   split_complex_to_pairsr   L  sY     s2w{##A UaZFbajoo	=#  s   5Afvaltruncatec                     [         R                  [        R                  " SU 5      S5      nU(       a  US-	  $ [	        U 5      (       a  gUS-	  S-  S-   nX#-   S-	  $ )N<flittler0   i  r"   i  )rG   
from_bytesstructpackr   )r   r   ivalroundeds       rB   float32_to_bfloat16r   Y  sX    >>&++dD18<DrzT{{ 
a6)GNr!!rE   scalefnuzsaturatec                 4   U(       d  [        S5      eX-  n[        R                  [        R                  " S[
        R                  " U5      5      S5      nUS-  S-	  nU(       GaO  US-  S:X  a  g[
        R                  " U5      (       a  U(       a  US-  $ gUS	-  S
-	  nUS-  n	US:w  a  US:  a  OUS:  ax  US-
  n
U
S:  a  USSU
-   -  -  nXySU
-
  -	  -  nOU	S:  a  US-  nSSU
-
  -  nX-  (       a:  US-  (       d+  XS-
  -  S:  d   X-  (       a  XS-  -  (       a  XS-
  -  S:X  a  US-  nOzUS:  a\  US-
  n
U
S:X  a  US-  nXyS-	  -  nOXzS-  -  nXyS-	  -  nU	S-  (       a+  U	S-  (       d
  U	S-  (       a  US-  S:  a  US-  nO!U(       d  gOU(       a  US-  nOSnOU	S:X  a  Sn[        U5      $ US-  S:X  a  SU-  $ [
        R                  " U5      (       a  U(       a  US-  $ SU-  $ US	-  S
-	  nUS-  n	US:w  Ga  US:  a  GOUS:  ax  US-
  n
U
S:  a  USSU
-   -  -  nXySU
-
  -	  -  nOU	S:  a  US-  nSSU
-
  -  nX-  (       a:  US-  (       d+  XS-
  -  S:  d   X-  (       a  XS-  -  (       a  XS-
  -  S:X  a  US-  nOUS:  an  US-
  n
U
S:X  a  US-  nXyS-	  -  nOXzS-  -  nXyS-	  -  nUS-  S:X  a  US-  nU	S-  (       a/  U	S-  (       d
  U	S-  (       a  US-  S:  a  US-  nOU(       d  US-  nOU(       a  US-  nOUS-  n[        U5      $ ) a  
Convert a float32 value to a float8, e4m3 (as int).

:param fval: float to convert
:param scale: scale, divide *fval* by *scale* before casting it
:param fn: no infinite values
:param uz: no negative zero
:param saturate: if True, any value out of range included inf becomes the maximum value,
    otherwise, it becomes NaN. The description of operator Cast fully describes the
    differences.
:return: converted float

See :ref:`onnx-detail-float8` for technical details.
z4float32_to_float8e4m3 not implemented with fn=False.r   r                            r   t   x   w   r"   r+      r4      r'   r!   i      i ~   u   y         )NotImplementedErrorrG   r   r   r   npfloat32isinfr   r   r   r   r   rY   bretemexmasks               rB   float32_to_float8e4m3r   f  su   * !B
 	
 	Av{{4A7BAz>b
 C	
Nz)88A;;Sy ^"
N63wSW81R=(Cb>)CU1HCR"W~8!G1H~)Q!)_Qh19L 1HCSW73JC7NC7NC7NCw;Q\q7{d
d*q%#t!VC3x
Nz)#:88A;;Sy #:^"
N63wSW81R=(Cb>)CU1HCR"W~8!G1H~)Q!)_Qh19L 1HCSW73JC7NC7NC7NCd
t+tKq8|Wd
d*q%ts
t3xrE   c                    X-  n[         R                  [        R                  " S[        R
                  " U5      5      S5      nUS-  S-	  nU(       GaB  U(       Ga:  US-  S:X  a  gUS-  S:X  a  U(       a  US	-  $ gUS-  S
-	  nUS-  n	US:w  a  US:  a  OUS:  ax  US-
  n
U
S:  a  USSU
-   -  -  nXySU
-
  -	  -  nOU	S:  a  US-  nSSU
-
  -  nX-  (       a:  US-  (       d+  XS-
  -  S:  d   X-  (       a  XS-  -  (       a  XS-
  -  S:X  a  US-  nOwUS:  aJ  US-
  n
XzS-  -  nXyS-	  -  nU	S-  (       a,  U	S-  (       d
  U	S-  (       a  US	-  S	:  a  US-  nO1U(       d  SnO'US:X  a	  U	S:X  a  SnOU(       a  US	-  nOSnOU	S:X  a  Sn[        U5      $ U(       GdP  U(       GdH  US-  S:X  a  S	U-  $ [        R                  " U5      (       a  U(       a  SU-  $ SU-  $ US-  S
-	  nUS-  n	US:w  a  US:  a  OUS:  ax  US-
  n
U
S:  a  USSU
-   -  -  nXySU
-
  -	  -  nOU	S:  a  US-  nSSU
-
  -  nX-  (       a:  US-  (       d+  XS-
  -  S:  d   X-  (       a  XS-  -  (       a  XS-
  -  S:X  a  US-  nOkUS:  aS  US-
  n
XzS-  -  nXyS-	  -  nU	S-  (       a5  U	S-  (       d
  U	S-  (       a!  US	-  S:  a  US-  nO%U(       a  US-  nOUS-  nOU(       a  US-  nOUS-  n[        U5      $ [        S5      e)a  
Convert a float32 value to a float8, e5m2 (as int).

:param fval: float to convert
:param scale: scale, divide *fval* by *scale* before casting it
:param fn: no infinite values
:param uz: no negative zero
:param saturate: if True, any value out of range included inf becomes the maximum value,
    otherwise, it becomes NaN. The description of operator Cast fully describes the
    differences.
:return: converted float
r   r   r   r   r   r   ir   r   r   r   r   m   p   o   r"      r      r+   r   i i       {   |   n   q   z%fn and uz must be both False or True.)rG   r   r   r   r   r   r   r   r   s               rB   float32_to_float8e5m2r     sD   & 	Av{{4A7BAz>b
 C	b
Nz)
Nz)Tz!^"
N63wSW81R=(Cb>)CU1HCR"W~8!G1H~)Q!)_Qh19L 1HCSWQwBwx<a'kq8|d
d*q%"ca1ft!VC3x
Nz)#:88A;;cz!#:^"
N63wSW81R=(Cb>)CU1HCR"W~8!G1H~)Q!)_Qh19L 1HCSWQwBwx<a'kq8|d
d*q!tttt3x!"IJJrE   	data_typedimsvalsrawc           
      Z   [        5       nXl        Xl        U[         R                  :X  a  U(       a  [	        S5      e[        U5      nSnU(       ah  U[         R                  :X  a  SnOQU[         R                  [         R                  [         R                  [         R                  4;   a  SnOUR                  n[        U5      [        R                  L a)  [        UR                   5      S:  a  UR#                  5       nU H  nXx-  nM	     [        U5      U:w  a  [%        SU S[        U5       S35      eU(       a  X5l        GOLU[         R(                  [         R*                  4;   a  [-        U5      nGOU[         R.                  :X  a^  [        R0                  " U5      R3                  U5      R5                  [        R6                  S9R#                  5       R9                  5       nGOU[         R                  [         R                  [         R                  [         R                  [         R                  4;   a  [         R                  [:        [         R                  [<        [         R                  S [         R                  [>        [         R                  S	 0U   n	[A        [C        U	[        R0                  " U5      R3                  U5      R#                  5       R9                  5       5      5      nO{U[         RD                  :X  a*  [        R0                  " U5      R3                  [F        5      nO=U[         R                  :X  a)  [        R0                  " U5      R3                  [H        5      n[K        U5      n
[M        XZ5      RO                  U5        URP                  RO                  U5        U$ )
ab  
Make a TensorProto with specified arguments.  If raw is False, this
function will choose the corresponding proto field to store the
values based on data_type. If raw is True, use "raw_data" proto
field to store the values, and values should be of type bytes in
this case.

Arguments:
    name (string): tensor name
    data_type (int): a value such as onnx.TensorProto.FLOAT
    dims (List[int]): shape
    vals: values
    raw (bool): if True, vals contains the serialized content of the tensor,
        otherwise, vals should be a list of values of the type defined by *data_type*

Returns:
    TensorProto
z*Can not use raw_data to store string type.r"   r+   z8Number of values does not match tensor's size. Expected z, but it is z. )dtypec                      [        U SS06$ )Nr   T)r   r;   s    rB   <lambda>make_tensor.<locals>.<lambda>  s    :O;";rE   c                      [        U SSS.6$ )NT)r   r   )r   r   s    rB   r   r     s    :Odt;rE   ))r   r   ra   STRING	TypeErrortensor_dtype_to_np_dtypeBFLOAT16FLOAT8E4M3FNFLOAT8E4M3FNUZ
FLOAT8E5M2FLOAT8E5M2FNUZitemsizetyper   ndarrayr   shapeflattenrQ   raw_data	COMPLEX64
COMPLEX128r   FLOAT16arrayastypeviewuint16tolistr   r   r   listmapBOOLrG   bytestensor_dtype_to_fieldgetattrrj   r   )ra   r   r   r   r   tensornp_dtypeexpected_sizedfcastfields              rB   make_tensorr  h  s   * ]F KK&&&3DEE'	2H M
 ,,,M$$&&""&&	
 
 M$--MDzRZZC

Oa$7||~  4yM!F}oUabefjbkallno
 	
 ..0F0FGG)$/D+---%%h/442994EMMOVVX    $$&&""&&
 
 $$&9((*?** - &&(=** -
 E HHTN))(3;;=DDFD +***88D>((-D+,,,88D>((/D%i0%%d+
KKtMrE   valuesindicesc                     [        5       nUR                  R                  U 5        UR                  R                  U5        UR                  R                  U5        U$ )zConstruct a SparseTensorProto

Arguments:
    values (TensorProto): the values
    indices (TensorProto): the indices
    dims: the shape

Returns:
    SparseTensorProto
)r   r  r   r  r   rj   )r  r  r   sparses       rB   make_sparse_tensorr    sG      F
MM6"
NNG$
KKtMrE   	elem_typec                    [        5       nXl        Xl        U[         R                  :X  a  U$ U[         R                  :X  a  UR
                  nOU[         R                  :X  a  UR                  nOnU[         R                  :X  a  UR                  nOMU[         R                  :X  a  UR                  nO,U[        R                  :X  a  UR                  nO[        S5      eUR!                  U5        U$ )z1
Make a Sequence with specified value arguments.
z8The element type in the input sequence is not supported.)r   ra   r  	UNDEFINEDTENSORtensor_valuesSPARSE_TENSORsparse_tensor_valuesSEQUENCEsequence_valuesMAP
map_valuesr   OPTIONALoptional_valuesr   rj   )ra   r  r  sequencerl   s        rB   make_sequencer%    s     HM"M+++M(((**		m11	111		m,,	,,,		m''	'''		m,,	,,,	RSSVOrE   key_typekeysc                    [        5       n[        R                  [        R                  [        R                  [        R
                  [        R                  [        R                  [        R                  [        R                  /nXl
        Xl        U[        R                  :X  a  UR                  R                  U5        O X;   a  UR                  R                  U5        UR                   R#                  U5        U$ )z
Make a Map with specified key-value pair arguments.

Criteria for conversion:
- Keys and Values must have the same number of elements
- Every key in keys must be of the same type
- Every value in values must be of the same type
)r   r   INT8INT16INT32INT64UINT8UINT16UINT32UINT64ra   r&  r   string_keysrj   r'  r  r   )ra   r&  r'  r  	map_protovalid_key_int_typess         rB   make_mapr4    s     
I	 N!;%%%$$T*		(d#f%rE   rg   c                    [        5       nXl        Xl        U[         R                  :X  a  U$ U[         R                  :X  a  UR
                  nOU[         R                  :X  a  UR                  nOnU[         R                  :X  a  UR                  nOMU[         R                  :X  a  UR                  nO,U[         R                  :X  a  UR                  nO[        S5      eUR                  U5        U$ )z2
Make an Optional with specified value arguments.
z8The element type in the input optional is not supported.)r   ra   r  r  r  tensor_valuer  sparse_tensor_valuer  sequence_valuer   	map_valuer"  optional_valuer   r   )ra   r  rg   optionalrl   s        rB   make_optionalr<  !  s     HM"M+++M((())		m11	100		m,,	,++		m''	'&&		m,,	,++	RSSuOrE   c                 R    [        U [        5      (       a  U $ U R                  S5      $ )z2Coerce a string (or bytes) value into UTF-8 bytes.utf-8)
isinstancer  encode)rg   s    rB   	_to_bytesrA  @  s"    ue,,5G%,,w2GGrE   rR   	attr_typec                   ^ [        5       nXl        U(       a  X$l        [        U[        R
                  5      (       a'  [        U5      Ul        [         R                  Ul	        GO[        U[        R                  5      (       a'  [        U5      Ul        [         R                  Ul	        GO[        U[        [        45      (       a'  [!        U5      Ul        [         R$                  Ul	        GO|[        U[&        5      (       a2  UR(                  R+                  U5        [         R,                  Ul	        GO5[        U[.        5      (       a2  UR0                  R+                  U5        [         R2                  Ul	        GO[        U[4        5      (       a2  UR6                  R+                  U5        [         R8                  Ul	        GO[        U[:        5      (       a2  UR<                  R+                  U5        [         R>                  Ul	        GO`[        U[@        RB                  RD                  5      (       Ga'  [G        U5      n[I        U5      S:X  a  Uc  [K        SU  S35      eUGc   U Vs1 s H  n[        U5      iM     nn[        R
                  [         RL                  4[        R                  [         RN                  4[        [        4[         RP                  4[&        [         RR                  4[.        [         RT                  4[4        [         RV                  4[:        [         RX                  44 H$  u  mn[[        U4S jU 5       5      (       d  M"  Un  O   Uc  [K        S5      eU[         RL                  :X  a2  UR\                  R_                  U5        [         RL                  Ul	        GOU[         RN                  :X  a2  UR`                  R_                  U5        [         RN                  Ul	        GOzU[         RP                  :X  a9  URb                  R_                  S U 5       5        [         RP                  Ul	        GO-U[         RR                  :X  a1  URd                  R_                  U5        [         RR                  Ul	        OU[         RT                  :X  a1  URf                  R_                  U5        [         RT                  Ul	        OU[         RV                  :X  a1  URh                  R_                  U5        [         RV                  Ul	        O^U[         RX                  :X  a1  URj                  R_                  U5        [         RX                  Ul	        O[m        5       e[o        SU S35      eUbN  UR                  U:w  a>  [o        S	[q        UR                  5       S
UR                   S[q        U5       S
U S3	5      eU$ s  snf )z0Makes an AttributeProto based on the value type.r   zCould not infer attribute `z` type from empty iteratorc              3   <   >#    U  H  n[        UT5      v   M     g 7frW   )
issubclass)rX   texp_ts     rB   rZ   !make_attribute.<locals>.<genexpr>z  s     ;Uz!U++Us   zRCould not infer the attribute type from the elements of the passed Iterable value.c              3   8   #    U  H  n[        U5      v   M     g 7frW   )rA  )rX   r   s     rB   rZ   rH    s     <e	!es   'z%' is not an accepted attribute value.zInferred attribute type 'z'(z") mismatched with specified type '))9r   ra   rb   r?  numbersIntegralrG   r   INTr   Realfloatr   FLOATrF   r  rA  sr   r   rF  r   r  r   sparse_tensorr  r   gGRAPHr   tp
TYPE_PROTOcollectionsabcIterabler  r   rQ   INTSFLOATSSTRINGSTENSORSSPARSE_TENSORSGRAPHSTYPE_PROTOSallintsrj   floatsstringstensorssparse_tensorsgraphstype_protosAssertionErrorr   _attr_type_to_str)	rR   rg   rb   rB  attrr   typesexp_enumrG  s	           @rB   rf   rf   E  sS    DI$ %))**U"&&		E7<<	(	(u"((		EC<	(	(5!"))		E;	'	'"))		E,	-	-##E*"00		E:	&	&"((		E9	%	%"--		E;??33	4	4Uu:?y0-cU2LM  &+,eT!WeE,!!>#6#67~445u~556n445"N$A$AB^223N667$x ;U;;; (I$   h  +++IIU#&++DI.///KKu%&--DI.000LL<e<<&..DI.000LL&&..DI.777&&u-&55DI.///KKu%&--DI.444##E*&22DI ""!E7"GHIIi!7'(9$))(D'ER		{Rt  vG  HQ  vR  uS  SU  V_  U`  `a  b
 	
 Ka -s   'V<c                 L    [        5       nXl        Xl        U(       a  X#l        U$ )zeMake an AttributeProto holding a reference to the parent function's attribute of given name and type.)r   ra   r   rb   )ra   rB  rb   rl  s       rB   make_attribute_refrp    s#     DII$KrE   rl  c                    U R                   (       a  [        SU  35      eU R                  [        R                  :X  a  U R
                  $ U R                  [        R                  :X  a  U R                  $ U R                  [        R                  :X  a  U R                  $ U R                  [        R                  :X  a  U R                  $ U R                  [        R                  :X  a  U R                  $ U R                  [        R                  :X  a  U R                  $ U R                  [        R                   :X  a  U R"                  $ U R                  [        R$                  :X  a  ['        U R(                  5      $ U R                  [        R*                  :X  a  ['        U R,                  5      $ U R                  [        R.                  :X  a  ['        U R0                  5      $ U R                  [        R2                  :X  a  ['        U R4                  5      $ U R                  [        R6                  :X  a  ['        U R8                  5      $ U R                  [        R:                  :X  a  ['        U R<                  5      $ U R                  [        R>                  :X  a  ['        U R@                  5      $ U R                  [        RB                  :X  a  g [        SU  35      e)Nz)Cannot get value of reference attribute: zUnsupported ONNX attribute: )"ref_attr_namerQ   r   r   rQ  r   rN  r   r   rR  r  rF  r  rS  rU  rT  rW  rV  r\  r  rd  r[  rc  r]  re  r^  rf  r_  rg  r`  rh  ra  ri  r  )rl  s    rB   get_attribute_valuers    s   DTFKLLyyN(((vvyyN&&&vvyyN)))vvyyN)))vvyyN000!!!yyN(((vvyyN---wwyyN)))DKK  yyN'''DIIyyN***DLL!!yyN***DLL!!yyN111D''((yyN)))DKK  yyN...D$$%%yyN,,,
3D6:
;;rE   ro   	attr_namec                     U R                    Vs/ s H  o"R                  U:X  d  M  UPM     nn[        U5      S:  a  [        SU 35      e[        U5      S:  a  [        SU 35      e[	        US   5      $ s  snf )Nr"   z'Node has multiple attributes with name z Node has no attribute with name r   )rl   ra   r   rQ   rs  )ro   rt  rY   matchings       rB   get_node_attr_valuerw    sv    >>A>aVVy-@>HA
8}qB9+NOO
8}q;I;GHHx{++ Bs
   A6A6c                 &    [        5       nXl        U$ rW   )r   ra   )ra   value_info_protos     rB   make_empty_tensor_value_inforz    s    %' rE   r   shape_denotationc                    [        5       nUR                  nXl        UR                  nUb  UR                  R                  / 5        U(       a#  [        U5      [        U5      :w  a  [        S5      e[        U5       H|  u  pgUR                  R                  5       nUc  OG[        U[        5      (       a  Xxl        O+[        U[        5      (       a  Xxl        O[        SU S35      eU(       d  Ms  X&   Ul        M~     U$ )z:Makes a Tensor TypeProto based on the data type and shape.>Invalid shape_denotation. Must be of the same length as shape.Invalid item in shape: z. Needs to be of int or str.)r   tensor_typer  r   dimrj   r   rQ   	enumerater   r?  rG   	dim_valuerF   	dim_param
denotation)	r  r   r{  
type_prototensor_type_prototensor_shape_protor   r  r  s	            rB   make_tensor_type_protor    s     J".."+*00 	%%b)$4 5U CP  e$DA$((,,.CyAs## !As## ! -aS0LM   !1!4 %  rE   c                     [        5       nXl        U(       a  X5l        [        XU5      nUR                  R                  U5        U$ )z8Makes a ValueInfoProto based on the data type and shape.)r   ra   rb   r  r   r   )ra   r  r   rb   r{  ry  r  s          rB   make_tensor_value_infor    sE     &' &0#.yAQR""#45rE   c                    [        5       nUR                  nXl        UR                  nUb  UR                  R                  / 5        U(       a#  [        U5      [        U5      :w  a  [        S5      e[        U5       H|  u  pgUR                  R                  5       nUc  OG[        U[        5      (       a  Xxl        O+[        U[        5      (       a  Xxl        O[        SU S35      eU(       d  Ms  X&   Ul        M~     U$ )z@Makes a SparseTensor TypeProto based on the data type and shape.r}  r~  z. Needs to be of int or text.)r   sparse_tensor_typer  r   r  rj   r   rQ   r  r   r?  rG   r  rF   r  r  )	r  r   r{  r  sparse_tensor_type_protosparse_tensor_shape_protor   r  r  s	            rB   make_sparse_tensor_type_protor  "  s     J)<<)2& 8 > > 	"%%,,R0$4 5U CP  e$DA+//335CyAs## !As## ! -aS0MN   !1!4 %  rE   c                     [        5       nXl        U(       a  X5l        [        XU5      nUR                  R
                  R                  UR
                  5        U$ )zEMakes a SparseTensor ValueInfoProto based on the data type and shape.)r   ra   rb   r  r   r  r   )ra   r  r   rb   r{  ry  r  s          rB   make_sparse_tensor_value_infor  P  sZ     &' &0#<*  ,,55 33 rE   inner_type_protoc                 d    [        5       nUR                  R                  R                  U 5        U$ )zMakes a sequence TypeProto.)r   sequence_typer  r   r  r  s     rB   make_sequence_type_protor  f  ,     J&&//0@ArE   c                 d    [        5       nUR                  R                  R                  U 5        U$ )zMakes an optional TypeProto.)r   optional_typer  r   r  s     rB   make_optional_type_protor  o  r  rE   
value_typec                     [        5       nXR                  l        UR                  R                  R	                  U5        U$ )zMakes a map TypeProto.)r   map_typer&  r  r   )r&  r  r  s      rB   make_map_type_protor  x  s7    
 J#+ ""++J7rE   r  c                 v    [        5       nXl        U(       a  X#l        UR                  R	                  U5        U$ )z1Makes a ValueInfoProto with the given type_proto.)r   ra   rb   r   r   )ra   r  rb   ry  s       rB   make_value_infor    s6     &' &0#"":.rE   rR  c                     [        U [        5      (       a  U nO1[        U [        5      (       a  U R                  SSS9nO[        U 5      n[	        U5      S:  a  U$ US S S[	        U5      S-
   S3-   $ )Nr>  ignore)errors@   z	...<+len=>)r?  rF   r  decoder   )rR  	sanitizeds     rB   _sanitize_strr    sr    !S		Au		HHWXH6	F	
9~Sb>iY")<'>a@@@rE   elem_shape_denotationc                     [        5       nXl        U(       a  X5l        [        XU5      n[	        U5      nUR
                  R                  R                  UR                  5        U$ )zJMakes a Sequence[Tensors] ValueInfoProto based on the data type and shape.)r   ra   rb   r  r  r   r  r   )ra   r  r   rb   r  ry  r  sequence_type_protos           rB   make_tensor_sequence_value_infor    s]     &' &0#.yAVW23DE''001D1R1RSrE   	subgraphsc           
      ^	   / nUR                  U R                  5        UR                  S5        S[        S[        4S jnS[        S[        4S jn[        S5      nS[        U/[        4   S	[        U   S[        4S
 jn/ nU R                  S5      (       a#  UR                  U" U R                  5      5        GOU R                  S5      (       a#  UR                  U" U R                  5      5        GOU R                  S5      (       a/  UR                  [        [        U R                  5      5      5        GOKU R                  S5      (       a  [        U R                  R                   5      S:  a  UR                  S5        GO[#        U R                  R$                  5      nUR                  S['        U R                  U5       S35        GOU R                  S5      (       aF  UR                  SU R(                  R                   S35        UR                  U R(                  5        GOYU R                  S5      (       a!  UR                  SU R*                   S35        GO"U R,                  (       a#  UR                  U" X0R,                  5      5        GOU R.                  (       a#  UR                  U" X@R.                  5      5        GOU R0                  (       a=  UR                  [        [3        [5        [        U R0                  5      5      5      5        GOlU R6                  (       a  UR                  S5        GOHU R8                  (       ax  UR                  S5        [;        U R8                  5       H<  u  pU	[        U R8                  5      S-
  :w  a  SOSnUR                  SU
 SU 35        M>     UR                  S5        OU R<                  (       a  UR                  S5        [;        U R<                  5       HF  u  pU	[        U R<                  5      S-
  :w  a  SOSnUR                  SUR                   SU 35        MH     UR                  S5        UR?                  U R<                  5        OUR                  S5        U(       a  SRA                  U5      U4$ SRA                  U5      $ )N=r   r7   c                 
    U S $ )Nz.15g )r   s    rB   	str_float&printable_attribute.<locals>.str_float  s     DrE   r   c                     [        U 5      $ rW   )rF   )r   s    rB   str_int$printable_attribute.<locals>.str_int  s    1vrE   _Tstr_elemxsc                 B    SSR                  [        X5      5      -   S-   $ )N[, ])joinr  )r  r  s     rB   str_list%printable_attribute.<locals>.str_list  s     TYYs8011C77rE   rR  rF  r   z<Tensor>z<Scalar Tensor r  rT  z<graph rV  z<Type Proto z[<Tensor>, ...]r  r"   , r  z	<Unknown> )!appendra   rP  rF   rG   r   r   r
   HasFieldr   r   reprr  rR  r   rF  r   r	  r   r
  rT  rV  rd  rc  re  r  r  rf  ri  r  rh  rj   r  )rl  r  contentr  r  r  r  rh  r  r   rV  commarT  s                rB   printable_attributer    sW    GNN499NN3U s 3 3  
B88RD#I. 8HRL 8S 8 F}}Sy()	s		wtvv'	s		tM$&&123	s		tvv{{aNN:& *$&&*:*:;ENN_WTVVU-C,DAFG	s		Q/0dff	t		dggYa01	x	;;78	x34	s4M4<< @ABC	()			st//0EAD$4$4 5 99CrENN\"Qug67 1 	s	sdkk*DADKK 01 44C"ENNWQVVHAeW56 + 	sdkk"{#xx &((88GrE   r  c                 T    U R                  S5      nUc  g[        [        X5      5      $ )Nrg   ?)
WhichOneofrF   r
  )r  whichs     rB   printable_dimr    s(    NN7#E}ws"##rE   rF  c           
      &   U R                  S5      S:X  a  [        R                  R                  U R                  R
                  5      nU R                  R                  S5      (       a  [        U R                  R                  R                  5      (       aN  U[        SSR                  [        [        U R                  R                  R                  5      5      -   5      -  nU$ US-  nU$ U R                  S5      c  gSU R                  S5       3$ )	Nrg   r  r   r  rY   , scalarr  zUnknown type )r  r   DataTypeNamer  r  r  r   r   r  rF   r  r  r  rF  rR  s     rB   printable_typer    s    ||G-  %%amm&=&=>==!!'**1==&&**++S]AMM<O<O<S<S)T UUVV  Z||G$1<<0122rE   r   c                 |    SU R                    3nU R                  (       a  U S[        U R                  5       S3nU$ )N%r  r  )ra   r   r  )r   rR  s     rB   printable_value_infor    s9    
AFF8Avvc>!&&)*!,HrE   c           
      R   SU R                    S3nU[        R                  R                  U R                  5      -  nU R
                  bX  [        U R
                  5      (       a9  U[        SSR                  [        [        U R
                  5      5      -   5      -  nOUS-  nUS-  nU$ )Nr  r  r  rY   r  r  )
ra   r   r  r  r   r   r   rF   r  r  r  s     rB   printable_tensor_protor    s    
AFF81A			"	"1;;	//Avvqvv;;TCHHSaff%56677AOAHAHrE   prefixc           	         / n[        U R                  5      (       aO  UR                  SR                  U R                   Vs/ s H  nSU 3PM
     sn5      5        UR                  S5        / n/ nU R                   H  nU(       a`  [        Xr5      n[        US   [        5      (       d  [        S[         S35      eUR                  US   5        UR                  US   5        Mj  [        U5      n	[        U	[        5      (       d  [        S[         S35      eUR                  U	5        M     SR                  [        U5      5      n
SR                  U R                   Vs/ s H  nSU 3PM
     sn5      nU R                  (       a%  UR                  U R                   S	U
 S
U S35        O!UR                  U R                   SU S35        U(       a  USR                  U5      -   U4$ USR                  U5      -   $ s  snf s  snf )Nr  r  r  r"   z1printed_attr_subgraphs[1] must be an instance of .r   zprinted must be an instance of r  z](rK  (r  )r   rk   r  r  rl   r  r?  r  r   rj   rF   rm   ri   r^   )ro   r  r  r  ra   rh  printed_attrsrl  printed_attr_subgraphsprintedprinted_attributesprinted_inputss               rB   printable_noder  &  s    G
4;;tyy!EAdV*!EFGs!FM%8%I"4Q7>>GvQO  MM034  !7!:;)$/Ggs++"A#a HII  )  6-#89YYtzzBzt!D6
zBCN~~$,,q);(<B~>NaPQ$,,q(8:;))611CHHW%%%7 "F(  Cs   G?!Hc           	         / nUS-   nSU R                   /nU R                   Vs1 s H  oUR                   iM     nn[        U R                  5      (       Ga  UR	                  S5        / n/ nU R                   HI  n	U	R                   U;  a  UR	                  [        U	5      5        M/  UR	                  [        U	5      5        MK     U(       aE  UR	                  USR                  U5      -   5        / nU H  n
UR	                  US-   U
-   5        M     UR	                  S5        U(       ag  UR	                  S5        UR	                  USR                  U5      -   5        / nU H  n
UR	                  US-   U
-   5        M     UR	                  S5        [        U5      [        U5      :  a  U R                   Vs1 s H  oR                   iM     nnU R                   Vs/ s H   nUR                   U;  d  M  [        U5      PM"     nnUR	                  S5        UR	                  USR                  U5      -   5        / nU H  n
UR	                  US-   U
-   5        M     UR	                  S5        UR	                  S5        UR	                  USR                  U5      -   5        / nU R                   H`  n[        XS	S
9n[        US   [        5      (       d  [        S[         S35      eUR	                  US   5        UR                  US   5        Mb     S/n[        U R                  5      (       aH  UR	                  SR                  U R                   Vs/ s H  nSUR                    3PM     sn5      5        UR	                  USR                  U5      -   5        UR	                  US-   5        U H   nUR	                  S[        U5      -   5        M"     SR                  U5      $ s  snf s  snf s  snf s  snf )z
Display a GraphProto as a string.

Arguments:
    graph (GraphProto): the graph to display
    prefix (string): prefix of every line

Returns:
    string
z  r{   r  r  rK  z,optional inputs with matching initializers (zinitializers ({T)r  r"   z-contents_subgraphs[1] must be an instance of r  r   r7   r  r  }
)ra   rw   r   ri   r  r  r  r  ro   r  r?  r  r   rj   rk   printable_graph)r{   r  r  indentheaderrF  initializersin_strsin_with_init_strsinpliner   graph_inputs	init_strsrh  ro   contents_subgraphstailoutrT  s                       rB   r  r  I  s`    Gd]Fuzz"F$)$5$56$5qFF$5L6
5;;c 	 ;;Cxx|+3C89!(()=c)BC	 
 NN6CHHV$445Fv}t34  cMMHINN6CHHV$445F)v}t34 *MM#  !C$55,1KK8KqFFKL8 ***A66- *&q)*  
 MM*+NN6CHHV$445F!v}t34 "MM#
MM#NN6CHHV,,-!F

+DDI,Q/66KD6QRSTT)!,-(+,  :D
5<<DIIF#388*~FGHNN6CHHTN*+NN6C< toa001 99W} 7< 92 Gs   O#5O(O-2O-O2protoc                    [        U [        R                  R                  R                  5      (       d1  [        S[        R                  R                  R                   S35      eU R                  R                   H  nUR                  S:X  a  U R                  UR                  5        M0  UR                  UR                  :X  d  ML  UR                  UR                  :X  a)  [        XR                  5       H  n[        U5        M     M  U R!                  UR                  5      (       d  M  [        [        XR                  5      5        M     g)z<
Empties `doc_string` field on any nested protobuf messages
zproto must be an instance of r  rb   N)r?  googleprotobufmessageMessager   
DESCRIPTORfieldsra   
ClearFieldr   TYPE_MESSAGElabelLABEL_REPEATEDr
  strip_doc_stringr  )r  
descriptorrY   s      rB   r  r    s     eV__44<<==+FOO,C,C,K,K+LAN
 	
 &&--
??l*Z__-__
 7 77:#<#<< 8A$Q' 9
00 !@A .rE   	algorithmalgorithm_bindingsinitializationinitialization_bindingsc                 f   [        5       nUR                  R                  U 5        U H+  u  pVUR                  R	                  5       nXWl        Xgl        M-     U(       a  UR                  R                  U5        U(       a1  U H+  u  pVUR                  R	                  5       nXWl        Xgl        M-     U$ rW   )	r   r  r   update_bindingr   rR   rg   r  initialization_binding)r  r  r  r  training_infor   r   bindings           rB   make_training_infor    s     &'M$$Y/"..224 #
 $$--n=+DA#::>>@GKM ,
 rE   tensor_dtypec                 <    [         R                  U    R                  $ )z
Convert a TensorProto's data_type to corresponding numpy dtype. It can be used while making tensor.

:param tensor_dtype: TensorProto's data_type
:return: numpy's data_type
)r    TENSOR_TYPE_MAPr  r  s    rB   r   r     s     ""<0999rE   c                 <    [         R                  U    R                  $ )z
Convert a TensorProto's data_type to corresponding data_type for storage.

:param tensor_dtype: TensorProto's data_type
:return: data_type for storage
)r    r  storage_dtyper  s    rB   $tensor_dtype_to_storage_tensor_dtyper    s     ""<0>>>rE   c                 <    [         R                  U    R                  $ )z}
Get the name of given TensorProto's data_type.

:param tensor_dtype: TensorProto's data_type
:return: the name of data_type
)r    r  ra   r  s    rB   tensor_dtype_to_stringr    s     ""<0555rE   c                 ^    [         R                  [         R                  U    R                     $ )z
Convert a TensorProto's data_type to corresponding field name for storage. It can be used while making tensors.

:param tensor_dtype: TensorProto's data_type
:return: field name
)r    _STORAGE_TENSOR_TYPE_TO_FIELDr  r  r  s    rB   r	  r	    s+     00-;; rE   r  c                 D    [        [        [        R                  U    5      $ )z
Convert a numpy's dtype to corresponding tensor type. It can be used while converting numpy arrays to tensors.

:param np_dtype: numpy's data_type
:return: TensorsProto's data_type
)r   rG   r    _NP_TYPE_TO_TENSOR_TYPE)r  s    rB   np_dtype_to_tensor_dtyper    s"     ''1 rE   c                  >    [         R                  R                  5       $ )zT
Get all tensor types from TensorProto.

:return: all tensor types from TensorProto
)r    r  r'  r  rE   rB   get_all_tensor_dtypesr    s     ""''))rE   c                     U [         R                  R                  5       ;   a	  [        U    $ [         R                  R	                  5       S   $ )z
Convert AttributeProto type to string.

:param attr_type: AttributeProto type.
:return: String representing the supplied attr_type.
r   )r   AttributeTyper  _ATTRIBUTE_TYPE_TO_STRr'  )rB  s    rB   rk  rk    s@     N007799%i00'',,.q11rE   )F)NNN)NNNN)      ?TFT)r   FFT)NNrW   )r  N)r  )r  F)rcollections.abcrX  rL  r   cmathr   typingr   r   r   r   r   r	   r
   r   r   r   r   google.protobuf.messager  numpyr   onnxr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    rF   rG   VersionRowTypeVersionTableTypeAssignmentBindingTyper5   __annotations__VersionMapTyperI   rP   boolr]   rp   ru   r|   r   r   r   r   r   	complex64r   rP  r   r   r   r  r  r  r%  r4  r<  r  rA  rf   r  rp  rs  rw  rz  r  r  r  r  r  r  r  r  r  r  r  	Dimensionr  r  r  r  r  r  r  r  r  r  r  r   r   r  r  r	  r  r  rn   r  rk  )r   r   s   00rB   <module>r/     s
  
             * uS#sC/0%S#sC8O2PPQ' U38_- # 4 eCHos*+(8 ^ " 5]C  CH();?<  $ ))SM) c]) 3-	)
 ) SM) ) )X . 48 $59@D(I(
( ^$( n%	(
 (;/0( ( .12( !*;!<=( (V s /A , +/;? $ SM c]	
 I ./ #' x78  : j  C  J  J'* ' '
 ': 4S> d x5 (3- 
"e 
"t 
" 
" B
BB 	B 		B
 B 	BN zK
zKzK 	zK 		zK
 zK 	zK| LQc
cc%-c]c:=cDHccL"-5=c](
%% SM 	>
$(I7D@
%% C= 	>HU3:& H5 H !%#	[	[[ [ }	[
 [~ UY	
	(66	DLSM		!<n !< !<H,i ,C ,C ,s ~  -1++HU3T>234+ tCy)+ 	+d ,0
 HU3T>234 	
 tCy) * -1++HU3T>234+ tCy)+ 	+d ,0
 HU3T>234 	
 tCy) ,  
  		AU3:& 	A3 	A  15
 HU3T>234 	
 $DI. * -2I
I%)I
3c4
++,,-IX$'11 $c $3i 3C 3N s 	k 	c 	 :? &
 &  &26 &
3c4
++,,- &FM: Ms MC M`BFOO33;; B B&- Z( &&;<	
 2:3 :288 :?s ?s ?6 6 6	 	 	
rxx 
C 
*x} * ,:+G+G+M+M+OP+O41!$+OP 	2 	2 	2 Qs    S