§
    tŠtjØ:  ã            	      ó  — d Z ddlmZ ddlmZ ddlZddlmZ ddlZddlZ	ddl
mZ ddlZddlmZ ddlmZ erdd	lmZmZmZmZ d
ZdZdZdZg d¢ZdZdZdZdZde› de› de› de› d�	Z de› de› d�Z!d#d„Z"d$d„Z#d„ Z$d „ Z% G d!„ d"e¦  «        Z&dS )%a-  
Read a SAS XPort format file into a Pandas DataFrame.

Based on code from Jack Cushman (github.com/jcushman/xport).

The file format is defined here:

https://support.sas.com/content/dam/SAS/support/en/technical-papers/record-layout-of-a-sas-version-5-or-6-data-set-in-sas-transport-xport-format.pdf
é    )Úannotations)ÚdatetimeN)ÚTYPE_CHECKING)Úfind_stack_level)Ú
get_handle)Ú	SASReader)ÚCompressionOptionsÚDatetimeNaTTypeÚFilePathÚ
ReadBufferzPHEADER RECORD*******LIBRARY HEADER RECORD!!!!!!!000000000000000000000000000000  zKHEADER RECORD*******MEMBER  HEADER RECORD!!!!!!!000000000000000001600000000zPHEADER RECORD*******DSCRPTR HEADER RECORD!!!!!!!000000000000000000000000000000  zPHEADER RECORD*******OBS     HEADER RECORD!!!!!!!000000000000000000000000000000  )ÚntypeÚnhfunÚfield_lengthÚnvar0ÚnameÚlabelÚnformÚnflÚnum_decimalsÚnfjÚnfillÚniformÚniflÚnifdÚnposÚ_z‚Parameters
----------
filepath_or_buffer : str or file-like object
    Path to SAS file or object implementing binary read method.zâindex : identifier of index column
    Identifier of column that should be used as index of the DataFrame.
encoding : str
    Encoding for text data.
chunksize : int
    Read file `chunksize` lines at a time, returns iterator.zBformat : str
    File format, only `xport` is currently supported.z\iterator : bool, default False
    Return XportReader object for reading file incrementally.z#Read a SAS file into a DataFrame.

ú
a  

Returns
-------
DataFrame or XportReader

Examples
--------
Read a SAS Xport file:

>>> df = pd.read_sas('filename.XPT')

Read a Xport file in 10,000 line chunks:

>>> itr = pd.read_sas('filename.XPT', chunksize=10000)
>>> for chunk in itr:
>>>     do_something(chunk)

z$Class for reading SAS Xport files.

zš

Attributes
----------
member_info : list
    Contains information about the file
fields : list
    Contains information about the variables in the file
ÚdatestrÚstrÚreturnr
   c                óf   — 	 t          j        | d¦  «        S # t          $ r t          j        cY S w xY w)z1Given a date in xport format, return Python date.z%d%b%y:%H:%M:%S)r   ÚstrptimeÚ
ValueErrorÚpdÚNaT)r   s    úU/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/pandas/io/sas/sas_xport.pyÚ_parse_dater'   �   sA   € ðåÔ  Ð*;Ñ<Ô<Ð<øÝð ð ð ÝŒvˆˆˆðøøøs   ‚ —0¯0Úsc                ór   — i }d}|D ],\  }}| |||z   …                               ¦   «         ||<   ||z  }Œ-|d= |S )a  
    Parameters
    ----------
    s: str
        Fixed-length string to split
    parts: list of (name, length) pairs
        Used to break up string, name '_' will be filtered from output.

    Returns
    -------
    Dict of name:contents of string at given location.
    r   r   )Ústrip)r(   ÚpartsÚoutÚstartr   Úlengths         r&   Ú_split_liner/   Š   s[   € ð €CØ€EØð ð ‰ˆˆfØ�e˜e f™nÐ,Ô-×3Ò3Ñ5Ô5ˆˆD‰	Ø�‰ˆˆØˆCˆØ€Jó    c                óî   — |dk    rnt          j        t          | ¦  «        t          j        d¦  «        ¦  «        }t          j        d|› dd|z
  › �¦  «        }|                     |¬¦  «        }| |d<   |S | S )Né   ÚS8ÚSz,S©ÚdtypeÚf0)ÚnpÚzerosÚlenr6   Úview)ÚvecÚnbytesÚvec1r6   Úvec2s        r&   Ú_handle_truncated_float_vecr@       sv   € ð �‚{€{ÝŒx�˜C™œ¥"¤(¨4¡.¤.Ñ1Ô1ˆÝ”Ð3˜VÐ3Ð3 q¨6¡zÐ3Ð3Ñ4Ô4ˆØ�yŠy˜uˆyÑ%Ô%ˆØˆˆT‰
Øˆà€Jr0   c                ó¨  — t          j        d¦  «        }|                      |¬¦  «        }|d         }|d         }|dz  }t          j        t	          | ¦  «        t           j        ¬¦  «        }d|t          j        |dz  ¦  «        <   d|t          j        |d	z  ¦  «        <   d
|t          j        |dz  ¦  «        <   ||z  }||z	  |dz  dd
|z
  z   z  z  }|dz  }||dz	  dz  dz
  dz  |z   dz   dz  |dz  z  z  }t          j        t	          |¦  «        fd¬¦  «        }||d<   ||d<   |                     d¬¦  «        }|                     d¦  «        }|S )zf
    Parse a vector of float values representing IBM 8 byte floats into
    native 8 byte floats.
    z>u4,>u4r5   r7   Úf1iÿÿÿ é   i    é   i  @ é   i  € é   é   l   ÿß é   é   éA   iÿ  é   l        z>f8Úf8)	r8   r6   r;   r9   r:   Úuint8ÚwhereÚemptyÚastype)	r<   r6   r>   Úxport1Úxport2Úieee1ÚshiftÚieee2Úieees	            r&   Ú_parse_float_vecrW   ³   s{  € õ
 ŒH�YÑÔ€EØ�8Š8˜%ˆ8Ñ Ô €DØ�$ŒZ€FØ�$ŒZ€Fð �ZÑ€Eõ ŒH•S˜‘X”X¥R¤XÐ.Ñ.Ô.€EØ+,€E�"Œ(�6˜JÑ&Ñ
'Ô
'Ñ(Ø+,€E�"Œ(�6˜JÑ&Ñ
'Ô
'Ñ(Ø+,€E�"Œ(�6˜JÑ&Ñ
'Ô
'Ñ(ð 
ˆe�O€EØ�u‰_ &¨:Ñ"5¸2ÀÀUÁÑ;KÑ!LÑM€Eð 
ˆZÑ€Eð 
�6˜R‘< 4Ñ'¨2Ñ-°!Ñ3°uÑ<¸tÑCÈÑJØ�Ñññ €Eõ Œ8•S˜‘Z”Z�M¨Ð3Ñ3Ô3€DØ€Dˆ�JØ€Dˆ�JØ�9Š9˜5ˆ9Ñ!Ô!€DØ�;Š;�tÑÔ€Dà€Kr0   c                  ód   — e Zd ZeZ	 	 	 	 ddd„Zdd„Zd„ Zdd„Zdd„Z	dd„Z
d d!d„Zd„ Zd d"d„ZdS )#ÚXportReaderNú
ISO-8859-1ÚinferÚfilepath_or_bufferúFilePath | ReadBuffer[bytes]Úencodingú
str | NoneÚ	chunksizeú
int | NoneÚcompressionr	   r    ÚNonec                ó  — || _         d| _        || _        || _        t	          |d|d|¬¦  «        | _        | j        j        | _        	 |                      ¦   «          d S # t          $ r |  
                    ¦   «          ‚ w xY w)Nr   ÚrbF)r^   Úis_textrb   )Ú	_encodingÚ_lines_readÚ_indexÚ
_chunksizer   ÚhandlesÚhandler\   Ú_read_headerÚ	ExceptionÚclose)Úselfr\   Úindexr^   r`   rb   s         r&   Ú__init__zXportReader.__init__ï   s�   € ð "ˆŒØˆÔØˆŒØ#ˆŒå!ØØØØØ#ð
ñ 
ô 
ˆŒð #'¤,Ô"5ˆÔð	Ø×ÒÑÔÐÐÐøÝð 	ð 	ð 	Ø�JŠJ‰LŒLˆLØð	øøøs   ÁA Á A>c                ó8   — | j                              ¦   «          d S ©N)rk   ro   ©rp   s    r&   ro   zXportReader.close  s   € ØŒ×ÒÑÔÐÐÐr0   c                óZ   — | j                              d¦  «                             ¦   «         S )NéP   )r\   ÚreadÚdecoderu   s    r&   Ú_get_rowzXportReader._get_row  s%   € ØÔ&×+Ò+¨BÑ/Ô/×6Ò6Ñ8Ô8Ð8r0   c                óÜ  — | j                              d¦  «         |                      ¦   «         }|t          k    r"d|v rt	          d¦  «        ‚t	          d¦  «        ‚|                      ¦   «         }ddgddgd	dgd
dgddgg}t          ||¦  «        }|d         dk    rt	          d¦  «        ‚t          |d         ¦  «        |d<   || _        |                      ¦   «         }t          |d d…         ¦  «        |d<   |                      ¦   «         }|                      ¦   «         }|                     t          ¦  «        }|t          k    }	|r|	st	          d¦  «        ‚t          |dd…         ¦  «        }
ddgddgddgddgd	dgd
dgddgg}t          |                      ¦   «         |¦  «        }ddgd
dgddgddgg}|                     t          |                      ¦   «         |¦  «        ¦  «         t          |d         ¦  «        |d<   t          |d         ¦  «        |d<   || _        dddœ}t          |                      ¦   «         dd…         ¦  «        }|
|z  }|dz  r|d|dz  z
  z  }| j                              |¦  «        }g }d}t          |¦  «        |
k    �r|d |
…         ||
d …         }}|                     d¦  «        }t#          j        d|¦  «        }t'          t)          t*          |d ¬!¦  «        ¦  «        }|d
= ||d"                  |d"<   |d#         }|d"         dk    r!|d$k     s|dk    rd%|› d&�}t-          |¦  «        ‚|                     ¦   «         D ]-\  }}	 |                     ¦   «         ||<   Œ# t2          $ r Y Œ*w xY w||d#         z  }||gz  }t          |¦  «        |
k    �°|                      ¦   «         }|t4          k    st	          d'¦  «        ‚|| _        || _        | j                              ¦   «         | _        |                      ¦   «         | _         d(„ | j        D ¦   «         | _!        d)„ tE          | j        ¦  «        D ¦   «         }tG          j$        |¦  «        }|| _%        d S )*Nr   z**COMPRESSED**z<Header record indicates a CPORT file, which is not readable.z#Header record is not an XPORT file.ÚprefixrH   Úversionr2   ÚOSr   Úcreatedé   zSAS     SAS     SASLIBz!Header record has invalid prefix.ÚmodifiedzMember header not foundéûÿÿÿéþÿÿÿÚset_nameÚsasdatar   é(   ÚtypeÚnumericÚchar)rC   rD   é6   é:   rw   éŒ   z>hhhh8s40s8shhh2s8shhl52sT)Ústrictr   r   rD   zFloating field width z is not between 2 and 8.zObservation header not found.c                óB   — g | ]}|d                                ¦   «         ‘ŒS )r   )ry   )Ú.0Úxs     r&   ú
<listcomp>z,XportReader._read_header.<locals>.<listcomp>u  s(   € Ð@Ð@Ð@¨q˜˜&œ	×(Ò(Ñ*Ô*Ð@Ð@Ð@r0   c                óh   — g | ]/\  }}d t          |¦  «        z   dt          |d         ¦  «        z   f‘Œ0S )r(   r4   r   )r   )r�   ÚiÚfields      r&   r‘   z,XportReader._read_header.<locals>.<listcomp>x  sM   € ð 
ð 
ð 
á��5ð •3�q‘6”6‰\˜3¥ U¨>Ô%:Ñ!;Ô!;Ñ;Ð<ð
ð 
ð 
r0   )&r\   Úseekrz   Ú_correct_line1r#   r/   r'   Ú	file_infoÚ
startswithÚ_correct_header1Ú_correct_header2ÚintÚupdateÚmember_inforx   r:   ÚljustÚstructÚunpackÚdictÚzipÚ
_fieldkeysÚ	TypeErrorÚitemsr*   ÚAttributeErrorÚ_correct_obs_headerÚfieldsÚrecord_lengthÚtellÚrecord_startÚ_record_countÚnobsÚcolumnsÚ	enumerater8   r6   Ú_dtype)rp   Úline1Úline2Úfifr—   Úline3Úheader1Úheader2Ú	headflag1Ú	headflag2ÚfieldnamelengthÚmemr�   ÚtypesÚ
fieldcountÚ
datalengthÚ	fielddatar¨   Ú
obs_lengthÚ
fieldbytesÚfieldstructr”   ÚflÚmsgÚkÚvÚheaderÚdtypelr6   s                                r&   rm   zXportReader._read_header  sÖ  € ØÔ×$Ò$ QÑ'Ô'Ð'ð —’‘”ˆØ•NÒ"Ð"Ø 5Ð(Ð(õ !ØRñô ð õ ÐBÑCÔCÐCà—’‘”ˆØ˜"ˆ~ 	¨1˜~°°a¨y¸3À¸)ÀiÐQSÀ_ÐUˆÝ  sÑ+Ô+ˆ	Ø�XÔÐ":Ò:Ð:ÝÐ@ÑAÔAÐAÝ*¨9°YÔ+?Ñ@Ô@ˆ	�)ÑØ"ˆŒà—’‘”ˆÝ +¨E°#°2°#¬JÑ 7Ô 7ˆ	�*Ñð —-’-‘/”/ˆØ—-’-‘/”/ˆØ×&Ò&Õ'7Ñ8Ô8ˆ	ØÕ/Ò/ˆ	Øð 	8˜ið 	8ÝÐ6Ñ7Ô7Ð7å˜g b¨ eœnÑ-Ô-ˆð �qˆMØ˜ˆOØ˜ˆNØ˜ˆNØ�1ˆIØ�"ˆIØ˜ˆOð
ˆõ " $§-¢-¡/¤/°3Ñ7Ô7ˆØ˜BÐ # r ¨W°b¨M¸FÀA¸;ÐGˆØ×Ò�; t§}¢}¡¤¸Ñ<Ô<Ñ=Ô=Ð=Ý"-¨k¸*Ô.EÑ"FÔ"Fˆ�JÑÝ!,¨[¸Ô-CÑ!DÔ!Dˆ�IÑØ&ˆÔð  &Ð)Ð)ˆÝ˜Ÿš™œ¨¨B¨Ô/Ñ0Ô0ˆ
Ø$ zÑ1ˆ
à˜‰?ð 	/Ø˜"˜z¨B™Ñ.Ñ.ˆJØÔ+×0Ò0°Ñ<Ô<ˆ	ØˆØˆ
Ý�)‰nŒn Ò/Ñ/ð Ð*˜?Ð*Ô+Ø˜/Ð*Ð*Ô+ð "ˆJð $×)Ò)¨#Ñ.Ô.ˆJå œ-Ð(CÀZÑPÔPˆKÝ��Z¨¸TÐBÑBÔBÑCÔCˆEØ�c�
Ø" 5¨¤>Ô2ˆE�'‰NØ�~Ô&ˆBØ�WŒ~ Ò*Ð*°°a²°¸RÀ!ºV¸VØJ¨bÐJÐJÐJ�Ý ‘n”nÐ$àŸš™œð ð ‘��1ðØ Ÿwšw™yœy�E˜!‘H�HøÝ%ð ð ð Ø�Dðøøøð ˜% Ô/Ñ/ˆJØ�u�gÑˆFõ7 �)‰nŒn Ò/Ñ/ð: —’‘”ˆØÕ,Ò,Ð,ÝÐ<Ñ=Ô=Ð=àˆŒØ'ˆÔØ Ô3×8Ò8Ñ:Ô:ˆÔà×&Ò&Ñ(Ô(ˆŒ	Ø@Ð@°D´KÐ@Ñ@Ô@ˆŒð
ð 
å% d¤kÑ2Ô2ð
ñ 
ô 
ˆõ ”˜Ñ Ô ˆØˆŒˆˆs   ÍM5Í5
NÎNúpd.DataFramec                ó<   — |                       | j        pd¬¦  «        S )NrC   ©Únrows)rx   rj   ru   s    r&   Ú__next__zXportReader.__next__  s   € Ø�yŠy˜tœÐ3°!ˆyÑ4Ô4Ð4r0   r›   c                óº  — | j                              dd¦  «         | j                              ¦   «         | j        z
  }|dz  dk    r"t	          j        dt          ¦   «         ¬¦  «         | j        dk    r)| j                              | j        ¦  «         || j        z  S | j                              dd¦  «         | j                              d¦  «        }t          j
        |t          j        ¬¦  «        }t          j        |dk    ¦  «        }t          |¦  «        dk    rd}nd	t          |¦  «        z  }| j                              | j        ¦  «         ||z
  | j        z  S )
zÇ
        Get number of records in file.

        This is maybe suboptimal because we have to seek to the end of
        the file.

        Side effect: returns file position to record_start.
        r   rD   rw   zxport file may be corrupted.)Ú
stackleveli°ÿÿÿr5   l     @@€  r2   )r\   r•   rª   r«   ÚwarningsÚwarnr   r©   rx   r8   Ú
frombufferÚuint64Úflatnonzeror:   )rp   Útotal_records_lengthÚlast_card_bytesÚ	last_cardÚixÚtail_pads         r&   r¬   zXportReader._record_count‚  sU  € ð 	Ô×$Ò$ Q¨Ñ*Ô*Ð*Ø#Ô6×;Ò;Ñ=Ô=ÀÔ@QÑQÐà "Ñ$¨Ò)Ð)ÝŒMØ.Ý+Ñ-Ô-ðñ ô ð ð
 Ô Ò"Ð"ØÔ#×(Ò(¨Ô):Ñ;Ô;Ð;Ø'¨4Ô+=Ñ=Ð=àÔ×$Ò$ S¨!Ñ,Ô,Ð,ØÔ1×6Ò6°rÑ:Ô:ˆÝ”M /½¼ÐCÑCÔCˆ	õ Œ^˜IÐ)<Ò<Ñ=Ô=ˆåˆr‰7Œ7�aŠ<ˆ<ØˆHˆHà�3˜r™7œ7‘{ˆHàÔ×$Ò$ TÔ%6Ñ7Ô7Ð7à$ xÑ/°DÔ4FÑFÐFr0   Úsizec                ó@   — |€| j         }|                      |¬¦  «        S )a  
        Reads lines from Xport file and returns as dataframe

        Parameters
        ----------
        size : int, defaults to None
            Number of lines to read.  If None, reads whole file.

        Returns
        -------
        DataFrame
        NrÊ   )rj   rx   )rp   rÙ   s     r&   Ú	get_chunkzXportReader.get_chunk¨  s$   € ð ˆ<Ø”?ˆDØ�yŠy˜tˆyÑ$Ô$Ð$r0   c                óî   — |                      d¬¦  «        }|d         dk    |d         dk    z  |d         dk    z  }|d         dk    |d         d	k    z  |d         d
k    z  |d         dk    z  }||z  }|S )Nzu1,u1,u2,u4r5   rB   r   Úf2Úf3r7   rJ   éZ   é_   é.   )r;   )rp   r<   rÅ   ÚmissÚmiss1s        r&   Ú_missing_doublezXportReader._missing_double¹  s‰   € Ø�HŠH˜=ˆHÑ)Ô)ˆØ�$”˜1’  4¤¨A¢Ñ.°!°D´'¸Q²,Ñ?ˆà�Œg˜Šo ! D¤'¨T¢/Ñ2Ø�Œw˜$Šñ à�Œw˜$Šñ ð 	ð
 	�‰ˆØˆr0   rË   c                óì  ‡ — |€‰ j         }t          |‰ j         ‰ j        z
  ¦  «        }|‰ j        z  }|dk    r‰                      ¦   «          t
          ‚‰ j                             |¦  «        }t          j	        |‰ j
        |¬¦  «        }i }t          ‰ j        ¦  «        D ]Ú\  }}|dt          |¦  «        z            }	‰ j        |         d         }
|
dk    rUt          |	‰ j        |         d         ¦  «        }	‰                      |	¦  «        }t#          |	¦  «        }t          j        ||<   n8‰ j        |         d         dk    r!d	„ |	D ¦   «         }‰ j        �ˆ fd
„|D ¦   «         }|                     ||i¦  «         ŒÛt+          j        |¦  «        }‰ j        €5t+          j        t3          ‰ j        ‰ j        |z   ¦  «        ¦  «        |_        n|                     ‰ j        ¦  «        }‰ xj        |z  c_        |S )a  Read observations from SAS Xport file, returning as data frame.

        Parameters
        ----------
        nrows : int
            Number of rows to read from data file; if None, read whole
            file.

        Returns
        -------
        A DataFrame.
        Nr   )r6   Úcountr(   r   rˆ   r   r‰   c                ó6   — g | ]}|                      ¦   «         ‘ŒS © )Úrstrip)r�   Úys     r&   r‘   z$XportReader.read.<locals>.<listcomp>æ  s    € Ð-Ð-Ð- A�Q—X’X‘Z”ZÐ-Ð-Ð-r0   c                óD   •— g | ]}|                      ‰j        ¦  «        ‘ŒS rè   )ry   rg   )r�   rê   rp   s     €r&   r‘   z$XportReader.read.<locals>.<listcomp>é  s'   ø€ Ð=Ð=Ð=°a˜Ÿš $¤.Ñ1Ô1Ð=Ð=Ð=r0   )r­   Úminrh   r©   ro   ÚStopIterationr\   rx   r8   rÑ   r°   r¯   r®   r   r¨   r@   rä   rW   Únanrg   rœ   r$   Ú	DataFrameri   ÚIndexÚrangerq   Ú	set_index)rp   rË   Ú
read_linesÚread_lenÚrawÚdataÚdf_dataÚjr�   r<   r   râ   rÅ   Údfs   `             r&   rx   zXportReader.readÄ  sç  ø€ ð ˆ=Ø”IˆEå˜ ¤	¨DÔ,<Ñ <Ñ=Ô=ˆ
Ø Ô 2Ñ2ˆØ�qŠ=ˆ=Ø�JŠJ‰LŒLˆLÝÐØÔ%×*Ò*¨8Ñ4Ô4ˆÝŒ}˜S¨¬¸:ÐFÑFÔFˆàˆÝ˜dœlÑ+Ô+ð 	#ð 	#‰DˆAˆqØ�s�S ™VœV‘|Ô$ˆCØ”K ”N 7Ô+ˆEØ˜	Ò!Ð!Ý1°#°t´{À1´~ÀnÔ7UÑVÔV�Ø×+Ò+¨CÑ0Ô0�Ý$ SÑ)Ô)�Ýœ&��$‘�Ø”˜Q” Ô(¨FÒ2Ð2Ø-Ð-¨Ð-Ñ-Ô-�à”>Ð-Ø=Ð=Ð=Ð=¸1Ð=Ñ=Ô=�Aà�NŠN˜A˜q˜6Ñ"Ô"Ð"Ð"ÝŒ\˜'Ñ"Ô"ˆàŒ;ÐÝ”x¥ dÔ&6¸Ô8HÈ:Ñ8UÑ VÔ VÑWÔWˆBŒHˆHà—’˜dœkÑ*Ô*ˆBàÐÔ˜JÑ&ÐÔàˆ	r0   )NrZ   Nr[   )
r\   r]   r^   r_   r`   ra   rb   r	   r    rc   )r    rc   )r    rÈ   )r    r›   rt   )rÙ   ra   r    rÈ   )rË   ra   r    rÈ   )Ú__name__Ú
__module__Ú__qualname__Ú_xport_reader_docÚ__doc__rr   ro   rz   rm   rÌ   r¬   rÛ   rä   rx   rè   r0   r&   rY   rY   ì   sê   € € € € € Ø€Gð
 Ø+Ø $Ø*1ðð ð ð ð ð8ð ð ð ð9ð 9ð 9ðlð lð lð lð\5ð 5ð 5ð 5ð$Gð $Gð $Gð $GðL%ð %ð %ð %ð %ð"	ð 	ð 	ð1ð 1ð 1ð 1ð 1ð 1ð 1r0   rY   )r   r   r    r
   )r(   r   )'rþ   Ú
__future__r   r   rŸ   Útypingr   rÏ   Únumpyr8   Úpandas.util._exceptionsr   Úpandasr$   Úpandas.io.commonr   Úpandas.io.sas.sasreaderr   Úpandas._typingr	   r
   r   r   r–   r™   rš   r§   r£   Ú_base_params_docÚ_params2_docÚ_format_params_docÚ_iterator_docÚ_read_sas_docrý   r'   r/   r@   rW   rY   rè   r0   r&   ú<module>r     s?  ððð ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ø €€€Ø  Ð  Ð  Ð  Ð  Ð  Ø €€€à Ð Ð Ð à 4Ð 4Ð 4Ð 4Ð 4Ð 4à Ð Ð Ð à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø -Ð -Ð -Ð -Ð -Ð -àð ðð ð ð ð ð ð ð ð ð ð ð ð Wð ð Rð ð Wð ð Wð ðð ð €
ð(CÐ ð@€ð9Ð ðA€ð
àðð ð ðð ð ð	ð ð
 ðð ð €ð2ð ðð ð ð	ð ð Ð ðð ð ð ðð ð ð ð,ð ð ð&6ð 6ð 6ðrIð Ið Ið Ið I�)ñ Iô Ið Ið Ið Ir0   