Ë
    g^(h	_  ã            
       óÌ  — d dl Z d dlZd dlmZ d dlmZmZmZ d dlm	Z	 d dl
Z
d dl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 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-m.Z.m/Z/ g d¢Z0 G d	„ d
 ed
ddg«      «      Z1 e	de2¬«       G d„ d edddg«      «      «       Z3 e1e"e&¬«      Z4	  e1e&e¬«      Z5	  e1e"e#¬«      Z6	  e1ee&¬«      Z7	  e1 e-jp                  e
jr                  d¬«       e-jp                  e
jr                  ¬«      ¬«      Z:	  e1 e-jp                  e
jr                  ¬«       e-jp                  e
jr                  ¬«      ¬«      Z;	  e1ee#¬«      Z<	  e1e$e ¬«      Z=	  e1e$e!¬«      Z> e1ee¬«      Z?	  e1ee¬«      Z@	  e1e
j                  j‚                  e¬«      ZB	  e1ee
j                  j‚                  ¬«      ZC	  e1ee¬«      ZD	  e1e%e*¬«      ZE	 d2d„ZF	  e1 e'jp                  e
jŽ                  dd¬«      e/¬«      ZH e1 e'jp                  e
jŽ                  dd¬«      e,¬«      ZI e1 e*jp                  e
j”                  ¬«      e¬«      ZK e1 e*jp                  e
j”                  ¬«      e¬«      ZL e1e'e(¬«      ZMd3d„ZN	  e1 ejp                  e)dde
jŽ                  dd¬«      e¬«      ZO e1 ejp                  e)dde
jŽ                  dd¬«      e¬«      ZP e1 e-jp                  e
j”                  ¬«       e-jp                  e
j”                  ¬«      ¬«      ZQ e1 e-jp                  e
j¤                  ¬«      d¬«      ZS e	de2¬«      d2d„«       ZT e	d e2¬«      d3d!„«       ZUd"ee1   d#e
j                  j¬                  d$dfd%„ZWee1   ZXd&eX_Y        d"eXd'eej¬                     d$efd(„ZZeee[e+   e[e   f   Z\d)e\d*e\fd+„Z]d)ed*efd,„Z^d-eXd.eXfd/„Z_d"e1fd0„Z`d"ee1   fd1„Zay)4é    N)Ú
namedtuple)ÚAnyÚOptionalÚUnion)Ú
deprecated)Údefault_dynamic_fake_quantÚdefault_embedding_fake_quantÚ!default_embedding_fake_quant_4bitÚdefault_fake_quantÚdefault_fused_act_fake_quantÚ'default_fused_per_channel_wt_fake_quantÚdefault_fused_wt_fake_quantÚ%default_per_channel_weight_fake_quantÚdefault_weight_fake_quantÚFakeQuantizeÚFakeQuantizeBaseÚ4fused_per_channel_wt_fake_quant_range_neg_127_to_127Ú(fused_wt_fake_quant_range_neg_127_to_127ÚFusedMovingAvgObsFakeQuantizeé   )Ú_PartialWrapperÚdefault_debug_observerÚdefault_dynamic_quant_observerÚdefault_float_qparams_observerÚ#default_float_qparams_observer_4bitÚdefault_observerÚ#default_per_channel_weight_observerÚdefault_placeholder_observerÚdefault_reuse_input_observerÚdefault_weight_observerÚHistogramObserverÚMinMaxObserverÚMovingAverageMinMaxObserverÚNoopObserverÚObserverBaseÚ0per_channel_weight_observer_range_neg_127_to_127ÚPlaceholderObserverÚReuseInputObserverÚ$weight_observer_range_neg_127_to_127)ÚQConfigÚQConfigDynamicÚdefault_qconfigÚdefault_debug_qconfigÚdefault_per_channel_qconfigÚdefault_dynamic_qconfigÚfloat16_dynamic_qconfigÚfloat16_static_qconfigÚper_channel_dynamic_qconfigÚ!float_qparams_weight_only_qconfigÚ&float_qparams_weight_only_qconfig_4bitÚdefault_quint8_weight_qconfigÚdefault_qat_qconfigÚdefault_dynamic_qat_qconfigÚdefault_weight_only_qconfigÚdefault_activation_only_qconfigÚdefault_qat_qconfig_v2Údefault_reuse_input_qconfigÚ!default_symmetric_qnnpack_qconfigÚ-default_per_channel_symmetric_qnnpack_qconfigÚ%default_symmetric_qnnpack_qat_qconfigÚ1default_per_channel_symmetric_qnnpack_qat_qconfigÚdefault_embedding_qat_qconfigÚ"default_embedding_qat_qconfig_4bitÚget_default_qconfigÚget_default_qat_qconfigÚget_default_qconfig_dictÚget_default_qat_qconfig_dictÚ
QConfigAnyÚqconfig_equalsc                   ó&   ‡ — e Zd ZdZdZˆ fd„Zˆ xZS )r*   a  
    Describes how to quantize a layer or a part of the network by providing
    settings (observer classes) for activations and weights respectively.


    Note that QConfig needs to contain observer **classes** (like MinMaxObserver) or a callable that returns
    instances on invocation, not the concrete observer instances themselves.
    Quantization preparation function will instantiate observers multiple times for each of the layers.


    Observer classes have usually reasonable default arguments, but they can be overwritten with `with_args`
    method (that behaves like functools.partial)::

      my_qconfig = QConfig(
          activation=MinMaxObserver.with_args(dtype=torch.qint8),
          weight=default_observer.with_args(dtype=torch.qint8))

    © c                 ó¤   •— t        |t        j                  «      st        |t        j                  «      rt        d«      ‚t        ‰| �  | ||«      S )Nz”QConfig received observer instance, please pass observer class instead. Use MyObserver.with_args(x=1) to override arguments to constructor if needed©Ú
isinstanceÚnnÚModuleÚ
ValueErrorÚsuperÚ__new__©ÚclsÚ
activationÚweightÚ	__class__s      €ú[/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/ao/quantization/qconfig.pyrQ   zQConfig.__new__k   sF   ø€ ä�j¤"§)¡)Ô,´
¸6Ä2Ç9Á9Ô0MÜðaóð ô ‰w‰˜s J°Ó7Ð7ó    )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__rQ   Ú__classcell__©rV   s   @rW   r*   r*   U   s   ø„ ñð& €I÷8ð 8rX   r*   rT   rU   zX`QConfigDynamic` is going to be deprecated in PyTorch 1.12, please use `QConfig` instead)Úcategoryc                   ó|   ‡ — e Zd ZdZdZej                  j                  ej                  j                  fˆ fd„	Zˆ xZ	S )r+   aØ  
    Describes how to dynamically quantize a layer or a part of the network by providing
    settings (observer classes) for weights.

    It's like QConfig, but for dynamic quantization.

    Note that QConfigDynamic needs to contain observer **classes** (like MinMaxObserver) or a callable that returns
    instances on invocation, not the concrete observer instances themselves.
    Quantization function will instantiate observers multiple times for each of the layers.

    Observer classes have usually reasonable default arguments, but they can be overwritten with `with_args`
    method (that behaves like functools.partial)::

      my_qconfig = QConfigDynamic(weight=default_observer.with_args(dtype=torch.qint8))
    rI   c                 óp   •— t        |t        j                  «      rt        d«      ‚t        ‰| �  | ||«      S )Nz›QConfigDynamic received observer instance, please pass observer class instead. Use MyObserver.with_args(x=1) to override arguments to constructor if neededrK   rR   s      €rW   rQ   zQConfigDynamic.__new__Œ   s9   ø€ ä�fœbŸi™iÔ(Üðaóð ô ‰w‰˜s J°Ó7Ð7rX   )
rY   rZ   r[   r\   r]   ÚtorchrM   ÚIdentityrQ   r^   r_   s   @rW   r+   r+   u   s2   ø„ ñ
ð  €Ià %§¡× 1Ñ 1¸%¿(¹(×:KÑ:K÷ 8ñ 8rX   r+   ©rT   rU   )rU   rT   T)ÚdtypeÚ
is_dynamic)rf   c                 ó`  — g d¢}| |vrt        dt        | «      z   d|› �z   «      ‚|dk(  rë| dk(  r't        t        j                  d¬«      t
        ¬«      }|S | d	k(  r't        t        j                  d
¬«      t        ¬«      }|S | dk(  rZt        j                  j                  «       st        j                  d«       t        t        j                  d
¬«      t
        ¬«      }|S | dk(  r't        t        j                  d¬«      t
        ¬«      }|S t        }|S t        dt        |«      z   dz   «      ‚)zý
    Returns the default PTQ qconfig for the specified backend.

    Args:
      * `backend` (str): a string representing the target backend. Currently supports
        `x86` (default), `fbgemm`, `qnnpack` and `onednn`.

    Return:
        qconfig
    ©ÚfbgemmÚx86ÚqnnpackÚonednnú	backend: ú' not supported. backend must be one of r   rj   T)Úreduce_rangere   rl   Frm   z�Default qconfig of oneDNN backend with reduce_range of false may have accuracy issues on CPU without Vector Neural Network Instruction support.rk   úVersion number: zB in get_default_qconfig is not supported. Version number must be 0)ÚAssertionErrorÚstrr*   r!   Ú	with_argsr   r    rc   ÚcpuÚ_is_vnni_supportedÚwarningsÚwarnr,   ©ÚbackendÚversionÚsupported_backendsÚqconfigs       rW   rB   rB      sS  € ò @ÐØÐ(Ñ(ÜØÜ�'‹lñà7Ð8JÐ7KÐLñMó
ð 	
ð �!‚|Ø�hÒÜÜ,×6Ñ6ÀDÔIÜ:ôˆGðF €Nð? ˜	Ò!äÜ,×6Ñ6ÀEÔJÜ.ôˆGð: €Nð3 ˜Ò Ü—9‘9×/Ñ/Ô1Ü—‘ðPôô Ü,×6Ñ6ÀEÔJÜ:ôˆGð& €Nð ˜ÒÜÜ,×6Ñ6ÀDÔIÜ:ôˆGð €Nô &ˆGð €Nô ØÜ�'‹lñàRñSó
ð 	
rX   Fg      0?)rf   rp   Úepsc                 óà  — g d¢}| |vrt        dt        | «      z   d|› �z   «      ‚|dk(  rÓ| dk(  r.t        t        j                  t
        ddd¬«      t        ¬	«      }|S | d
k(  r.t        t        j                  t
        ddd¬«      t        ¬	«      }|S | dk(  r-t        t        j                  t
        dd¬«      t        ¬	«      }|S | dk(  r.t        t        j                  t
        ddd¬«      t        ¬	«      }|S t        }|S |dk(  rÓ| dk(  r.t        t        j                  t
        ddd¬«      t        ¬	«      }|S | d
k(  r.t        t        j                  t
        ddd¬«      t        ¬	«      }|S | dk(  r-t        t        j                  t
        dd¬«      t        ¬	«      }|S | dk(  r.t        t        j                  t
        ddd¬«      t        ¬	«      }|S t        }|S t        dt        |«      z   dz   «      ‚)aL  
    Returns the default QAT qconfig for the specified backend.

    Args:
      * `backend` (str): a string representing the target backend. Currently supports
        `x86` (default), `fbgemm`, `qnnpack` and `onednn`.
      * `version`: version, for backwards compatibility. Can be `None` or `1`.

    Return:
        qconfig
    ri   rn   ro   r   rj   éÿ   T)ÚobserverÚ	quant_minÚ	quant_maxrp   re   rl   Frm   )r�   r‚   rƒ   rk   r   rq   zJin get_default_qat_qconfig is not supported. Version number must be 0 or 1)rr   rs   r*   r   rt   r#   r   r   r6   r   r   r   r:   ry   s       rW   rC   rC   r  sh  € ò @ÐØÐ(Ñ(ÜØÜ�'‹lñà7Ð8JÐ7KÐLñMó
ð 	
ð �!‚|Ø�hÒÜÜ'×1Ñ1Ü8ØØ!Ø!%ô	ô =ôˆGðn €Nð] ˜	Ò!ÜÜ'×1Ñ1Ü8ØØ!Ø!&ô	ô 1ôˆGðZ €NðI ˜Ò ÜÜ'×1Ñ1Ü8ÀAÐQTôô =ô	ˆGðF €Nð{ ˜ÒÜÜ'×1Ñ1Ü8ØØ!Ø!%ô	ô =ôˆGðx €Nôe *ˆGðd €Nða 
�AŠØ�hÒÜÜ8×BÑBÜ8ØØ!Ø!%ô	ô ?ôˆGð\ €NðK ˜	Ò!äÜ8×BÑBÜ8ØØ!Ø!&ô	ô 3ôˆGðF €Nð5 ˜Ò ÜÜ8×BÑBÜ8ÀAÐQTôô ?ô	ˆGð2 €Nð' ˜ÒÜÜ8×BÑBÜ8ØØ!Ø!%ô	ô ?ôˆGð$ €Nô -ˆGð €Nô ØÜ�'‹lñàZñ[ó
ð 	
rX   i€ÿÿÿé   )r�   r‚   rƒ   rf   rp   r~   z¯`torch.ao.quantization.get_default_qconfig_dict` is deprecated and will be removed in a future version. Please use `torch.ao.quantization.get_default_qconfig_mapping` instead.c                 ór   — t         j                  j                  j                  | |«      j	                  «       S ©N)rc   ÚaoÚquantizationÚget_default_qconfig_mappingÚto_dict©rz   r{   s     rW   rD   rD   
  s*   € ô �8‰8× Ñ ×<Ñ<¸WÀgÓN×VÑVÓXÐXrX   z·`torch.ao.quantization.get_default_qat_qconfig_dict` is deprecated and will be removed in a future version. Please use `torch.ao.quantization.get_default_qat_qconfig_mapping` instead.c                 ór   — t         j                  j                  j                  | |«      j	                  «       S r†   )rc   r‡   rˆ   Úget_default_qat_qconfig_mappingrŠ   r‹   s     rW   rE   rE     s-   € ô �8‰8× Ñ ×@Ñ@Ø�óç�gƒiðrX   r}   ÚmodÚreturnc                 ó®  — | €yt        |t        j                  j                  t        j                  j                  t        j                  j
                  f«      }|ry| j                  €y| j                  «       }t        |t        j                  j                  j                  t        j                  j                  j                  f«      }|rJ d«       ‚yy)z0
    Verifies that this `qconfig` is valid.
    NzGPer channel weight observer is not supported yet for ConvTranspose{n}d.)rL   rc   rM   ÚConvTranspose1dÚConvTranspose2dÚConvTranspose3drU   r‡   rˆ   ÚPerChannelMinMaxObserverÚ%MovingAveragePerChannelMinMaxObserver)r}   rŽ   Úis_conv_transpose_modÚexample_observerÚis_per_channels        rW   Ú_assert_valid_qconfigr™     s·   € ð €ØÜ&ØÜ	�‰×	!Ñ	!¤5§8¡8×#;Ñ#;¼U¿X¹X×=UÑ=UÐVóÐñ Ø�>‰>Ð!àØ"Ÿ>™>Ó+ÐÜ#Øä—‘×%Ñ%×>Ñ>Ü—‘×%Ñ%×KÑKðó
ˆñ ð	UàTó	UØ�ð rX   ztorch.ao.quantization.qconfigÚmodulec                 ó¤   ‡‡— ‰�| �| j                   dk7  r| S ˆfd„Šˆfd„} || j                  «      } || j                  «      }t        ||«      S )aP  This is a helper function for use in quantization prepare that updates a qconfig so that
    the constructors stored in the qconfig will create observers on the same device that
    'module' is on. This is intended to be used when the qconfigs are propagated to each
    module in order to avoid potential device alignment issues.

    Args:
        qconfig: QConfig with obs constructors stored in activation and weight
        module: module which the qconfig is related to

    Return:
        qconfig: configured so that obs constructors set to construct on the same device as module
    re   c                  ó^  •— t        ‰t        j                  j                  «      sJ ‚‰j	                  «       D � ch c]  } | j
                  ’Œ c} ‰j                  «       D � ch c]  } | j
                  ’Œ c} z  }t        |«      dkD  rt        t        |«      «      nd }|€d S d|iS c c} w c c} w )Nr   Údevice)
rL   rc   rM   rN   Ú
parametersr�   ÚbuffersÚlenÚnextÚiter)ÚpÚdevicesr�   rš   s      €rW   Ú)get_factory_kwargs_based_on_module_devicezQ_add_module_to_qconfig_obs_ctr.<locals>.get_factory_kwargs_based_on_module_deviceP  s–   ø€ Ü˜&¤%§(¡(§/¡/Ô2Ð2Ð2Ø%+×%6Ñ%6Ó%8Ö9 �1—8“8Ò9Ø$Ÿn™nÓ.ö=
ØˆA�H‹Hò=
ñ 
ˆô ),¨G«°qÒ(8””d˜7“mÔ$¸dˆØ�~ˆtÐ=¨H°fÐ+=Ð=ùò	 :ùò =
s   ºB%Á!B*c                 ó–   •— 	 | j                  d ¬«      } |«        | j                  ‰¬«      S # t        $ r | cY S t        $ r | cY S w xY w)N)Úfactory_kwargs)rt   Úwith_callable_argsÚAttributeErrorÚ	TypeError)Úoriginal_constructorÚcheckr¥   s     €rW   Ú1configure_constructor_to_put_obs_on_module_devicezY_add_module_to_qconfig_obs_ctr.<locals>.configure_constructor_to_put_obs_on_module_deviceX  s`   ø€ ð
	(à(×2Ñ2À$Ð2ÓGˆEÙŒGØ'×:Ñ:ØHð ;ó ð øô ò 	(Ø'Ò'Üò 	(Ø'Ò'ð	(ús   ƒ*. ®A»
AÁA)Ú_fieldsrT   rU   r*   )r}   rš   r­   rT   rU   r¥   s    `   @rW   Ú_add_module_to_qconfig_obs_ctrr¯   =  sW   ù€ ð  €~˜˜¨G¯O©OÐ?WÒ,WØˆô>ô(ñ CÀ7×CUÑCUÓV€JÙ>¸w¿~¹~ÓN€Fä�:˜vÓ&Ð&rX   Ú
obs_or_fq1Ú
obs_or_fq2c                 ód   — t        | t        «      rt        |t        «      rt        | |«      S | |k(  S r†   )rL   r   Ú_partial_wrapper_equals)r°   r±   s     rW   Ú_obs_or_fq_ctr_equalsr´   p  s4   € ô �*œoÔ.´:Ø”Oô4ô ' z°:Ó>Ð>Ø˜Ñ#Ð#rX   c                 óü  — t        j                   | j                  j                  «      }t        j                   |j                  j                  «      }d}d|v r<d|v r8|xr t        |d   |d   «      }|j	                  d«       |j	                  d«       |xr ||k(  }| j                  j
                  |j                  j
                  k(  xr1 | j                  j                  |j                  j                  k(  xr |S )z<
    Return whether the two partial wrappers are equal,
    Tr�   )Úcopyr£   Úkeywordsr´   ÚpopÚfuncÚargs)r°   r±   Úobs_or_fq1_keywordsÚobs_or_fq2_keywordsÚkeywords_equals        rW   r³   r³   {  sç   € ô
 Ÿ)™) J§L¡L×$9Ñ$9Ó:ÐÜŸ)™) J§L¡L×$9Ñ$9Ó:ÐØ€NàÐ(Ñ(¨ZÐ;NÑ-NØ'ò 
Ô,AØ 
Ñ+Ð-@ÀÑ-Ló-
ˆð 	×Ñ 
Ô+Ø×Ñ 
Ô+Ø#ÒRÐ(;Ð?RÑ(R€Nà�‰×Ñ˜ZŸ\™\×.Ñ.Ñ.ò 	Ø�L‰L×Ñ §¡×!2Ñ!2Ñ2ò	àðrX   Úq1Úq2c                 óÖ   — | �|€| |k(  S | �|€J ‚	 t        | j                  |j                  «      }t        | j                  |j                  «      }|xr |S # t        $ r | |k(  cY S w xY w)zD
    Returns `True` if `q1` equals `q2`, and `False` otherwise.
    )r´   rT   rU   r©   )r¾   r¿   Úactivation_sameÚweight_sames       rW   rG   rG   ’  sw   € ð 
€z�R�ZØ�R‰xˆàˆ~ " .Ð0Ð0ð	ô 4°B·M±MÀ2Ç=Á=ÓQˆOÜ/°·	±	¸2¿9¹9ÓEˆKØ"Ò2 {Ð2øÜò 	Ø˜‘8ŠOð	ús   ‘AA ÁA(Á'A(c                 ó”   — d„ }| j                  «       }t        |t        «      rt        |d«      r ||j                  «      S  ||«      S )z­
    Return whether the observer for activations defined in the given QConfig is memoryless.
    This means a MovingAverage observer with averaging constant equal to 1.
    c                 ó<   — t        | d«      xr | j                  dk(  S )NÚaveraging_constantr   )ÚhasattrrÅ   )r�   s    rW   Ú_is_memorylessz1_activation_is_memoryless.<locals>._is_memoryless«  s#   € ä�HÐ2Ó3ÒX¸×8SÑ8SÐWXÑ8Xð	
rX   Úactivation_post_process)rT   rL   r   rÆ   rÈ   )r}   rÇ   Úacts      rW   Ú_activation_is_memorylessrÊ   ¥  sH   € ò
ð
 ×
Ñ
Ó
€CÜ�#Ô'Ô(¬W°SÐ:SÔ-TÙ˜c×9Ñ9Ó:Ð:á˜cÓ"Ð"rX   c                 óŠ   — | d uxr> t        | j                  «       t        «      xr t        | j                  «       t        «      S r†   )rL   rT   r(   rU   r$   )r}   s    rW   Ú_is_reuse_input_qconfigrÌ   ·  s>   € à�tÐò 	7Ü�w×)Ñ)Ó+Ô-?Ó@ò	7ä�w—~‘~Ó'¬Ó6ðrX   )rk   r   )rk   r   )br¶   rw   Úcollectionsr   Útypingr   r   r   Útyping_extensionsr   rc   Útorch.nnrM   Ú#torch.ao.quantization.fake_quantizer   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r�   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   Ú__all__r*   ÚFutureWarningr+   r,   r-   r.   r/   rt   Úfloat16r0   r1   r2   r3   r4   r6   r7   rd   r8   r9   r:   r;   rB   Úqint8r<   r=   Úfloat32r@   rA   r5   rC   r>   r?   Ú!_default_fp32_placeholder_qconfigÚquint8Ú#_default_quint8_placeholder_qconfigrD   rE   rN   r™   rF   rZ   r¯   ÚtypeÚ"_ObserverOrFakeQuantizeConstructorr´   r³   rG   rÊ   rÌ   rI   rX   rW   ú<module>rÜ      s!  ðã Û Ý "ß 'Ñ 'Ý (ã Ý ÷÷ ÷ ÷ ÷"÷ ÷ ÷ ÷ ñ ò. €ôF8‰j˜ \°8Ð$<Ó=ô 8ñ@ Ø^Øôô8‘ZÐ 0°<ÀÐ2JÓKó 8ó	ð8ñ: Ð%5Ð>UÔV€ðñ  Ø"Ð/EôÐ ðñ &ØÐ(KôÐ ðñ "Ø-Ð6MôÐ ðñ "Ø,Ð"×,Ñ,°5·=±=ÈTÔRØ(Ð×(Ñ(¨u¯}©}Ô=ôÐ ðñ !Ø,Ð"×,Ñ,°5·=±=ÔAØ(Ð×(Ñ(¨u¯}©}Ô=ôÐ ðñ &Ø-Ø.ôÐ ðñ %,Ø+Ð4Rô%Ð !ðñ *1Ø+Ð4Wô*Ð &ñ Ø!Ð*CôÐ ðñ &Ø)Ð2KôÐ ðñ &Ø�x‰x× Ñ Ð)BôÐ ðñ #*Ø!¨%¯(©(×*;Ñ*;ô#Ð ðñ !Ø+Ð4OôÐ ðñ &Ø+°LôÐ ðó
8ðvñ4 %,Ø*Ð ×*Ñ*Ø�k‰k¨°6ôð 0ô	%Ð !ñ 18Ø*Ð ×*Ñ*Ø�k‰k¨°6ôð <ô	1Ð -ñ !(Ø%ˆ|×%Ñ%¨E¯M©MÔ:Ø'ô!Ð ñ
 &-Ø%ˆ|×%Ñ%¨E¯M©MÔ:Ø,ô&Ð "ñ
 !(Ø ¨ô!Ð ó
nðbñ )0Ø6Ð,×6Ñ6Ø,ØØØ�k‰kØØôð 4ô
)Ð %ñ 5<Ø6Ð,×6Ñ6Ø,ØØØ�k‰kØØôð @ô
5Ð 1ñ %,Ø,Ð"×,Ñ,°5·=±=ÔAØ(Ð×(Ñ(¨u¯}©}Ô=ô%Ð !ñ
 '.Ø,Ð"×,Ñ,°5·<±<Ô@àô'Ð #ñ ð`àôò
Yóð
Yñ ðdàôò
óð
ðU 8¨GÑ#4ð U¸5¿8¹8¿?¹?ð UÈtó Uð6 �gÑ€
Ø7€
Ô ð+'Øð+'Ø!)¨"¯)©)Ñ!4ð+'àó+'ð\ &+Ø�T˜,Ñ'¨Ð.>Ñ)?Ð?ñ&Ð "ð
$Ø2ð$à2ó$ð¨ð À_ó ð.�zð  zó ð&# wó #ð$ X¨gÑ%6ô rX   