§
    ²Ûgö?  ã                   óÆ  — d Z ddlZddlZddlmZmZmZ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 ddlmZ ddlmZ ddlmZmZmZ dd	lmZ dd
lmZ ddl m!Z! ddl"m#Z# ddl$m%Z%  ej&        e'¦  «        Z(de#dede#fd„Z)de!de!fd„Z*de#de#fd„Z+ddddœd„Z,ddddœd„Z- e¦   «         dgfg e¦   «         dgfg e¦   «         dgfg e¦   «         dgfggZ. e¦   «         dgfg e¦   «         dgfg e¦   «         dgfg e¦   «         dgfggZ/d„ e.D ¦   «         Z0 e¦   «         dgfgZ1 e¦   «         dgf e¦   «         dgfgZ2 e¦   «         dgfge1e2gZ3 e¦   «         dgfgZ4 e¦   «         dgf e¦   «         dgfgZ5 e¦   «         dgfge4e5gZ6d„ e3D ¦   «         Z7 e¦   «         f e¦   «         f e¦   «         f e¦   «         f e¦   «         f e¦   «          e¦   «         f e¦   «          e¦   «         f e¦   «          e¦   «         f e¦   «          e¦   «         f e¦   «          e¦   «         f e¦   «          e¦   «         f e¦   «          e¦   «          e¦   «         f e¦   «          e¦   «          e¦   «         f e¦   «          e¦   «          e¦   «         f e¦   «          e¦   «          e¦   «         f e¦   «          e¦   «          e¦   «         f e¦   «          e¦   «          e¦   «         f e¦   «          e¦   «          e¦   «         f e¦   «          e¦   «          e¦   «         f e¦   «          e¦   «          e¦   «         f e¦   «         f e¦   «         f e¦   «          e¦   «         f e¦   «          e¦   «         fgZ8e.dd…         e0dd…         dœe3dd…         e7dd…         dœdd„  e9dd¦  «        D ¦   «         idœZ:d eeee!f                  d!eee!f         dee;         fd"„Z<d#„ Z=d$„ Z>dS )%a½  
Noise transformation module

The goal of this module is to transform one 1-qubit noise channel
(given by the QuantumError class) into another, built from specified
"building blocks" (given as Kraus matrices) such that the new channel is
as close as possible to the original one in the Hilber-Schmidt metric.

For a typical use case, consider a simulator for circuits built from the
Clifford group. Computations on such circuits can be simulated at
polynomial time and space, but not all noise channels can be used in such
a simulation. To enable noisy Clifford simulation one can transform the
given noise channel into the closest one, Hilbert-Schmidt wise, that can be
used in a Clifford simulator.
é    N)ÚSequenceÚListÚUnionÚCallable)ÚReset)ÚIGateÚXGateÚYGateÚZGateÚHGateÚSGateÚSdgGate)Ú	transpile)ÚMissingOptionalLibraryError)ÚKrausÚSuperOpÚChi)ÚQuantumChannel)ÚTranspilerErroré   )ÚQuantumError)Ú
NoiseModel)Ú
NoiseErrorÚnoise_modelÚfuncÚreturnc                 ó6  — t          j        | ¦  «        }|j                             ¦   «         D ]\  }} ||¦  «        |j        |<   Œ|j                             ¦   «         D ]8\  }}|                     ¦   «         D ]\  }} ||¦  «        |j        |         |<   ŒŒ9|S )a†  Return a new noise model by applyign a function to all quantum errors.

    This returns a new noise model containing the resulting errors from
    applying the supplied function to all QuantumErrors in the noise model.
    This function should have singature `func(error: QuantumError) -> QuantumError`
    where the returned quantum error is defined on the same number of qubits
    as the original error.

    Args:
        noise_model: the noise model to be transformed.
        func: function for transforming QuantumErrors.
    Returns:
        The transpiled noise model.

    Raises:
        NoiseError: if the transformation failed.
    )ÚcopyÚdeepcopyÚ_default_quantum_errorsÚitemsÚ_local_quantum_errors)r   r   Ú	new_noiseÚkeyÚerrorÚ	inst_nameÚ	noise_dicÚqubitss           ú[/granary/edev/quantum/lib/python3.11/site-packages/qiskit_aer/utils/noise_transformation.pyÚtransform_noise_modelr*   :   s¼   € õ( ”˜kÑ*Ô*€IàÔ7×=Ò=Ñ?Ô?ð =ð =‰
ˆˆUØ15°°e±´ˆ	Ô)¨#Ñ.Ð.à )Ô ?× EÒ EÑ GÔ Gð Mð MÑˆ	�9Ø&Ÿ_š_Ñ.Ô.ð 	Mð 	M‰MˆF�EØAEÀÀeÁÄˆIÔ+¨IÔ6°vÑ>Ð>ð	Mð Ðó    r%   c                 ó¾   — 	 t          | j        fi |¤Ž}n(# t          $ r}t          d| › d|› �¦  «        |‚d}~ww xY wt	          t          || j        ¦  «        ¦  «        S )añ  Return a new quantum error containin transpiled circuits.

    This returns a new QuantumError containing the circuits resulting from
    transpiling all error circuits using :func:`qiskit.transpile` with the
    passed keyword agruments.

    Args:
        error: the quantum error to be transformed.
        transpile_kwargs: kwargs for passing to qiskit transpile function.

    Returns:
        The transformed quantum error.

    Raises:
        NoiseError: if the transformation failed.
    z Failed to transpile circuits in z with kwargs N)r   Úcircuitsr   r   r   ÚzipÚprobabilities)r%   Útranspile_kwargsÚtranspiled_circsÚerrs       r)   Útranspile_quantum_errorr3   Z   s‰   € ð"Ý$ U¤^ÐHÐHÐ7GÐHÐHÐÐøÝð ð ð ÝØU¨uÐUÐUÐCSÐUÐUñ
ô 
àð	øøøøðøøøõ �Ð,¨eÔ.AÑBÔBÑCÔCÐCs   ‚ •
:Ÿ5µ:c                 ó.   ‡— ˆfd„}t          | |¦  «        S )a  Return a new noise model with transpiled QuantumErrors.

    This returns a new noise model containing the resulting errors from
    transpiling all QuantumErrors in the noise model
    using :func:`transpile_quantum_error` function with the passed
    keyword agruments.

    Args:
        noise_model: the noise model to be transformed.
        transpile_kwargs: kwargs for passing to qiskit transpile function.

    Returns:
        The transpiled noise model.

    Raises:
        NoiseError: if the transformation failed.
    c                 ó   •— t          | fi ‰¤ŽS ©N)r3   )r%   r0   s    €r)   r   z#transpile_noise_model.<locals>.func‡   s   ø€ Ý& uÐAÐAÐ0@ÐAÐAÐAr+   ©r*   )r   r0   r   s    ` r)   Útranspile_noise_modelr8   t   s3   ø€ ð&Bð Bð Bð Bð Bõ ! ¨dÑ3Ô3Ð3r+   ©Úoperator_stringÚoperator_dictÚoperator_listc                óJ  — t          | t          t          f¦  «        st          d| j        j        › �¦  «        ‚| j        dk    rt          d| j        › d�¦  «        ‚|��t                               ¦   «         }| 	                    ¦   «         }||vrt          |› d|› �¦  «        ‚	 t          |         | j                 }n.# t          $ r!}t          d|› d| j        › d	�¦  «        |‚d}~ww xY w|�t          |                     ¦   «         Ž \  }}|��t          |t          ¦  «        st          d
|› �¦  «        ‚	 d„ |D ¦   «         }n%# t          $ r}t          d|› �¦  «        |‚d}~ww xY wt          || ¦  «        dd…         }t          j        dt#          |¦  «        z
  d¦  «        }	|	dk     s|	dk    rt          dd|	z
  › �¦  «        ‚t%          ¦   «         dgf|	fg}
t          ||¦  «        D ]\  }}|
                     ||f¦  «         Œt          |
¦  «        S t          d¦  «        ‚)a�  
    Return a ``QuantumError`` object that approximates an error
    as a mixture of specified operators (channels).

    The approximation is done by minimizing the Hilbert-Schmidt distance
    between the process matrix of the target error channel (:math:`T`) and
    the process matrix of the output channel (:math:`S = \sum_i{p_i S_i}`),
    i.e. :math:`Tr[(T-S)^\dagger (T-S)]`,
    where
    :math:`[p_1, p_2, ..., p_n]` denote probabilities and
    :math:`[S_1, S_2, ..., S_n]` denote basis operators (channels).

    See `arXiv:1207.0046 <http://arxiv.org/abs/1207.0046>`_ for the details.

    Args:
        error (QuantumError or QuantumChannel): the error to be approximated.
            The number of qubits must be 1 or 2.
        operator_string (string): a name for a pre-made set of
            building blocks for the output channel (Default: None).
            Possible values are ``'pauli'``, ``'reset'``, ``'clifford'``.
        operator_dict (dict): a dictionary whose values are the
            building blocks for the output channel (Default: None).
            E.g. {"x": XGate(), "y": YGate()}, keys "x" and "y"
            are not used in transformation.
        operator_list (list): list of building block operators for the
            output channel (Default: None). E.g. [XGate(), YGate()]

    Returns:
        QuantumError: the approximate quantum error.

    Raises:
        NoiseError: if any invalid argument is specified or approximation failed.
        MissingOptionalLibraryError: if cvxpy is not installed.

    Note:
        The operator input precedence is: ``list`` < ``dict`` < ``string``.
        If a ``string`` is given, ``dict`` is overwritten;
        if a ``dict`` is given, ``list`` is overwritten.
        The ``string`` supports only 1- or 2-qubit errors and
        its possible values are ``'pauli'``, ``'reset'``, ``'clifford'``.
        The ``'clifford'`` does not support 2-qubit errors.
    zInvalid input error type: r   z2Only 1-qubit and 2-qubit noises can be converted, z-qubit noise found in modelNz3 is not a valid operator_string. It must be one of zPreset 'z<' operators do not support the approximation of errors with z qubitsz!operator_list is not a sequence: c                 ó`   — g | ]+}t          |t          ¦  «        r|nt          |d fg¦  «        ‘Œ,S )é   )Ú
isinstancer   r   ©Ú.0Úops     r)   ú
<listcomp>z-approximate_quantum_error.<locals>.<listcomp>Ø   sI   € ð ð ð àõ ! ¥^Ñ4Ô4ÐQ��½,ÈÈQÈÀyÑ:QÔ:Qðð ð r+   z%Invalid type found in operator list: r?   é	   r   zChannel probabilities sum to zHQuantum error approximation failed - no approximating operators detected)r@   r   r   r   Ú	__class__Ú__name__Ú
num_qubitsÚ_PRESET_OPERATOR_TABLEÚkeysÚlowerÚKeyErrorr.   r!   r   Ú_transform_by_operator_listÚnpÚroundÚsumr   Úappend)r%   r:   r;   r<   Úvalid_operator_stringsr2   Ú_Úchannel_listr/   Úidentity_probÚ	noise_opsÚoperatorÚprobabilitys                r)   Úapproximate_quantum_errorrY   �   sà  € õZ �e�l­NÐ;Ñ<Ô<ð RÝÐP°e´oÔ6NÐPÐPÑQÔQÐQàÔ˜!ÒÐÝð=ØÔð=ð =ð =ñ
ô 
ð 	
ð
 Ð"Ý!7×!<Ò!<Ñ!>Ô!>ÐØ)×/Ò/Ñ1Ô1ˆØÐ"8Ð8Ð8ÝØ"ð >ð >Ø%;ð>ð >ñô ð ð	Ý2°?ÔCÀEÔDTÔUˆMˆMøÝð 	ð 	ð 	ÝðJ˜?ð Jð JØ05Ô0@ðJð Jð Jñô ð ðøøøøð	øøøð
 Ð Ý × 3Ò 3Ñ 5Ô 5Ð6Ñˆˆ=ØÑ Ý˜-­Ñ2Ô2ð 	RÝÐPÀÐPÐPÑQÔQÐQð	_ðð à'ðñ ô ˆLˆLøõ ð 	_ð 	_ð 	_ÝÐTÀ]ÐTÐTÑUÔUÐ[^Ð^øøøøð	_øøøõ 4°LÀ%ÑHÔHÈÈÈÔLˆÝœ ¥S¨Ñ%7Ô%7Ñ!7¸Ñ;Ô;ˆØ˜1ÒÐ °Ò 1Ð 1ÝÐP¸QÀÑ=NÐPÐPÑQÔQÐQÝ‘w”w  �n mÐ4Ð5ˆ	Ý%(¨¸Ñ%FÔ%Fð 	6ð 	6Ñ!ˆH�kØ×Ò˜h¨Ð4Ñ5Ô5Ð5Ð5Ý˜IÑ&Ô&Ð&å
Ð_Ñ
`Ô
`Ð`s0   Â$B= Â=
C(ÃC#Ã#C(Ä6E Å
E%ÅE Å E%c                ó6   ‡‡‡— ˆˆˆfd„}t          | |¦  «        S )a°  
    Replace all noises in a noise model with ones approximated
    by a mixture of operators (channels).

    Args:
        model (NoiseModel): the noise model to be approximated.
            All noises in the model must be 1- or 2-qubit noises.
        operator_string (string): a name for a pre-made set of
            building blocks for the output channel (Default: None).
            Possible values are ``'pauli'``, ``'reset'``, ``'clifford'``.
        operator_dict (dict): a dictionary whose values are the
            building blocks for the output channel (Default: None).
            E.g. {"x": XGate(), "y": YGate()}, keys "x" and "y"
            are not used in transformation.
        operator_list (list): list of building block operators for the
            output channel (Default: None). E.g. [XGate(), YGate()]

    Returns:
        NoiseModel: the approximate noise model.

    Raises:
        NoiseError: if any invalid argument is specified or approximation failed.
        MissingOptionalLibraryError: if cvxpy is not installed.

    Note:
        The operator input precedence is: ``list`` < ``dict`` < ``string``.
        If a ``string`` is given, ``dict`` is overwritten;
        if a ``dict`` is given, ``list`` is overwritten.
        The ``string`` supports only 1- or 2-qubit errors and
        its possible values are ``'pauli'``, ``'reset'``, ``'clifford'``.
        The ``'clifford'`` does not support 2-qubit errors.
    c                 ó*   •— t          | ‰‰‰¬¦  «        S )Nr9   )rY   )Únoiser;   r<   r:   s    €€€r)   Úapproximatez,approximate_noise_model.<locals>.approximate  s&   ø€ Ý(ØØ+Ø'Ø'ð	
ñ 
ô 
ð 	
r+   r7   )Úmodelr:   r;   r<   r]   s    ``` r)   Úapproximate_noise_modelr_   ë   s;   øøø€ ðD
ð 
ð 
ð 
ð 
ð 
ð 
õ ! ¨Ñ4Ô4Ð4r+   r?   c                 ó,   — g | ]}t           D ]}||z   ‘ŒŒS © )Ú
_PAULIS_Q1©rB   Úop_q0Úop_q1s      r)   rD   rD     s)   € ÐNÐNÐN %Å:ÐNÐN¸%�˜‘ÐNÐNÐNÐNr+   c                 ó,   — g | ]}t           D ]}||z   ‘ŒŒS ra   )Ú	_RESET_Q1rc   s      r)   rD   rD   #  s)   € ÐKÐKÐK ÅÐKÐK¸ˆu�u‰}ÐKÐKÐKÐKr+   )r?   r   c                 ó<   — g | ]}d „ t           |         D ¦   «         ‘ŒS )c                 ó   — g | ]}|d gf‘ŒS )r   ra   )rB   Úgates     r)   rD   z<listcomp>.<listcomp>L  s   € Ð8Ð8Ð8˜Tˆd�Q�Cˆ[Ð8Ð8Ð8r+   )Ú_CLIFFORD_GATES)rB   Újs     r)   rD   rD   L  s,   € ÐOÐOÐO¸QÐ8Ð8¥_°QÔ%7Ð8Ñ8Ô8ÐOÐOÐOr+   é   )ÚpauliÚresetÚcliffordÚ	basis_opsÚtargetc                 ór  ‡‡— d| d         j         z  }t          t          j        |¦  «        ¦  «        g| z   } d„ | D ¦   «         }t	          |¦  «        j        Št          |¦  «        }t          j        ||f¦  «        }t          |¦  «        D ]p\  }}t          |¦  «        D ][\  }}	||k     rt          ||	¦  «        ||         |<   Œ%||k    r||         |         ||         |<   ŒCt          |¦  «        ||         |<   Œ\Œqdt          j        ˆfd„|D ¦   «         ¦  «        z  }
d„ Št          j        ˆfd„| D ¦   «         ¦  «        } ‰|¦  «        }	 ddl}n@# t          $ r3}t                               d	¦  «         t!          d
ddd¬¦  «        |‚d}~ww xY w|                     |¦  «        }|                     |                     |                     ||¦  «        |
j        |z  z   ¦  «        |                     |¦  «        dk    |dk    |j        |z  |k    g¬¦  «        }|                     ¦   «          |j        }|S )aD  
    Transform (or approximate) the target quantum channel into a mixture of
    basis operators (channels) and return the mixing probabilities.

    The approximate channel is found by minimizing the Hilbert-Schmidt
    distance between the process matrix of the target channel (:math:`T`) and
    the process matrix of the output channel (:math:`S = \sum_i{p_i S_i}`),
    i.e. :math:`Tr[(T-S)^\dagger (T-S)]`,
    where
    :math:`[p_1, p_2, ..., p_n]` denote probabilities and
    :math:`[S_1, S_2, ..., S_n]` denote basis operators (channels).

    Such an optimization can represented as a quadratic program:
    Minimize :math:`p^T A p + b^T p`,
    subject to :math:`p \ge 0`, `\sum_i{p_i} = 1`, `\sum_i{p_i} = 1`.
    The last constraint is for making the approximation conservative by
    forcing the output channel have more error than the target channel
    in the sense that a "fidelity" against identity channel should be worse.

    See `arXiv:1207.0046 <http://arxiv.org/abs/1207.0046>`_ for the details.

    Args:
        target: Quantum channel to be transformed.
        basis_ops: a list of channel objects constructing the output channel.

    Returns:
        list: A list of amplitudes (probabilities) of basis that define the output channel.

    Raises:
        MissingOptionalLibraryError: if cvxpy is not installed.
    r   r   c                 ó6   — g | ]}t          |¦  «        j        ‘ŒS ra   )r   ÚdatarA   s     r)   rD   z/_transform_by_operator_list.<locals>.<listcomp>z  s    € Ð7Ð7Ð7 r•c˜"‘g”g”lÐ7Ð7Ð7r+   éþÿÿÿc                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS ra   )Ú_hs_inner_prod_real)rB   ÚS_iÚTs     €r)   rD   z/_transform_by_operator_list.<locals>.<listcomp>‡  s$   ø€ ÐMÐMÐM°sÕ*¨1¨cÑ2Ô2ÐMÐMÐMr+   c           	      ó‚   — t          t          j        t          j        t	          | ¦  «        ¦  «        ¦  «        ¦  «        S r6   )ÚfloatrN   ÚabsÚtracer   )Úchannels    r)   Úfidelityz-_transform_by_operator_list.<locals>.fidelity‹  s,   € Ý•R”V�BœH¥W¨WÑ%5Ô%5Ñ6Ô6Ñ7Ô7Ñ8Ô8Ð8r+   c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS ra   ra   )rB   rC   r€   s     €r)   rD   z/_transform_by_operator_list.<locals>.<listcomp>Ž  s!   ø€ Ð=Ð=Ð=¨R˜H˜H R™LœLÐ=Ð=Ð=r+   Nz7cvxpy module needs to be installed to use this feature.Úcvxpyz%Transformation/Approximation of noisezpip install cvxpyzTCVXPY is required to solve an optimization problem of approximating a noise channel.)ÚlibnameÚnameÚpip_installÚmsgr?   )Úconstraints)rH   r   rN   Úeyer   ru   ÚlenÚzerosÚ	enumeraterx   Ú_hs_normÚarrayr‚   ÚImportErrorÚloggerr%   r   ÚVariableÚProblemÚMinimizeÚ	quad_formrz   rP   ÚsolveÚvalue)rq   rr   ÚNÚbasis_ops_matsÚnÚAÚiry   rl   ÚS_jÚbÚsource_fidsÚ
target_fidr‚   r2   ÚxÚprobr/   rz   r€   s                     @@r)   rM   rM   Q  s}  øø€ ðH 	
ˆY�qŒ\Ô$Ñ$€Aå•r”v˜a‘y”yÑ!Ô!Ð" YÑ.€Ið 8Ð7¨YÐ7Ñ7Ô7€NÝˆF‰ŒÔ€AÝˆNÑÔ€AÝ
Œ�!�Q�ÑÔ€AÝ˜NÑ+Ô+ð (ð (‰ˆˆ3Ý Ñ/Ô/ð 	(ð 	(‰FˆAˆsà�1ŠuˆuÝ-¨c°3Ñ7Ô7��!”�Q‘�Ø�Q’�Ø˜Aœ$˜qœ'��!”�Q‘�å" 3™-œ-��!”�Q‘�ð	(ð 	�RŒXÐMÐMÐMÐM¸nÐMÑMÔMÑNÔNÑN€Að9ð 9ð 9õ ”(Ð=Ð=Ð=Ð=°9Ð=Ñ=Ô=Ñ>Ô>€KØ�˜&Ñ!Ô!€Jð
ØˆˆˆˆøÝð ð ð Ý�ŠÐNÑOÔOÐOÝ)ØØ8Ø+ð.ð	
ñ 
ô 
ð ð	øøøøðøøøð 	�Š�qÑÔ€AØ�=Š=Ø�Š�u—’ q¨!Ñ,Ô,¨q¬s°Q©wÑ6Ñ7Ô7Ø—Y’Y˜q‘\”\ QÒ&¨¨Qª°´ÀÑ0AÀZÒ0OÐPð ñ ô €Dð
 	‡J‚J�L„L€LØ”G€MØÐs   ÅE Å
FÅ.FÆFc                 óh   — t          j        t          j        | ¦  «        j        | z  ¦  «        j        S r6   ©rN   r~   Úconjrz   Úreal)r™   s    r)   rŒ   rŒ   ¨  s$   € åŒ8•B”G˜A‘J”J”L 1Ñ$Ñ%Ô%Ô*Ð*r+   c                 óh   — t          j        t          j        | j        ¦  «        |z  ¦  «        j        S r6   r¢   )r™   ÚBs     r)   rx   rx   ­  s$   € åŒ8•B”G˜AœC‘L”L 1Ñ$Ñ%Ô%Ô*Ð*r+   )?Ú__doc__r   ÚloggingÚtypingr   r   r   r   ÚnumpyrN   Úqiskit.circuitr   Ú%qiskit.circuit.library.standard_gatesr   r	   r
   r   r   r   r   Úqiskit.compilerr   Úqiskit.exceptionsr   Ú%qiskit.quantum_info.operators.channelr   r   r   Ú5qiskit.quantum_info.operators.channel.quantum_channelr   Úqiskit.transpiler.exceptionsr   Únoise.errorsr   Únoise.noise_modelr   Únoise.noiseerrorr   Ú	getLoggerrG   r�   r*   r3   r8   rY   r_   Ú
_PAULIS_Q0rb   Ú_PAULIS_Q0Q1Ú_RESET_Q0_TO_0Ú_RESET_Q0_TO_1Ú	_RESET_Q0Ú_RESET_Q1_TO_0Ú_RESET_Q1_TO_1rg   Ú_RESET_Q0Q1rk   ÚrangerI   r|   rM   rŒ   rx   ra   r+   r)   ú<module>r¿      sx  ððð ð" €€€Ø €€€Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2à Ð Ð Ð à  Ð  Ð  Ð  Ð  Ð  ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð &Ð %Ð %Ð %Ð %Ð %Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ PÐ PÐ PÐ PÐ PÐ PØ 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø *Ð *Ð *Ð *Ð *Ð *Ø )Ð )Ð )Ð )Ð )Ð )à	ˆÔ	˜8Ñ	$Ô	$€ð zð ¸ð Àjð ð ð ð ð@D <ð DÈð Dð Dð Dð Dð44 zð 4È*ð 4ð 4ð 4ð 4ð4 #°$Àdð[að [að [að [að [að| 7;È$Ð^bð *5ð *5ð *5ð *5ð *5ð\ �‘”˜!˜ˆ~Ð % %¡'¤'¨A¨3 Ð 0°E°E±G´G¸a¸S°>Ð2BÀeÀeÁgÄgÐPQÈsÀ^ÐDTÐU€
Ø�‘”˜!˜ˆ~Ð % %¡'¤'¨A¨3 Ð 0°E°E±G´G¸a¸S°>Ð2BÀeÀeÁgÄgÐPQÈsÀ^ÐDTÐU€
ØNÐN¨:ÐNÑNÔN€à�5‘7”7˜Q˜C�.Ð!€Ø�5‘7”7˜Q˜C�. 5 5¡7¤7¨Q¨C .Ð1€Øˆu‰wŒw˜˜ˆnÐ˜~¨~Ð>€	Ø�5‘7”7˜Q˜C�.Ð!€Ø�5‘7”7˜Q˜C�. 5 5¡7¤7¨Q¨C .Ð1€Øˆu‰wŒw˜˜ˆnÐ˜~¨~Ð>€	ØKÐK¨)ÐKÑKÔK€ð €U�W„W€JØ
€U�W„W€JØ€W�Y„Y€LØ
€U�W„W€Jà
€U�W„W€JØ
€U�W„Wˆeˆe‰gŒgÐØ
€U�W„Wˆeˆe‰gŒgÐØ
€U�W„Wˆeˆe‰gŒgÐØ
€U�W„Wˆeˆe‰gŒgÐØ
€U�W„Wˆgˆg‰iŒiÐØ€W�Y„Y��‘”ÐØ
€U�W„Wˆeˆe‰gŒg�u�u‘w”wÐØ€W�Y„Y��‘”˜˜™œÐ!Ø
€U�W„Wˆeˆe‰gŒg�u�u‘w”wÐØ
€U�W„Wˆeˆe‰gŒg�w�w‘y”yÐ!Ø€W�Y„Y��‘”˜˜™œÐ#Ø
€U�W„Wˆeˆe‰gŒg�w�w‘y”yÐ!Ø
€U�W„Wˆeˆe‰gŒg�u�u‘w”wÐØ€W�Y„Y��‘”˜˜™œÐ!Ø
€U�W„Wˆeˆe‰gŒg�u�u‘w”wÐà
€U�W„W€JØ
€U�W„W€JØ
€U�W„Wˆeˆe‰gŒgÐØ€W�Y„Y��‘”Ðð5€ð> �a�b�bŒ>Ø˜˜˜Ôðð ð
 �Q�R�RŒ=Ø�q�r�rŒ?ðð ð
 	
ÐOÐOÀ%À%ÈÈ2Á,Ä,ÐOÑOÔOððð Ð ðTØ˜˜n¨lÐ:Ô;Ô<ðTà�. ,Ð.Ô/ðTð 
ˆ%„[ðTð Tð Tð Tðn+ð +ð +ð
+ð +ð +ð +ð +r+   