Ë
    €ºßhF=  ã                   ó¾   — d dl Z d dlmZ d dlmZ d dlmZmZ d dlmZ de	de	de	fd	„Z
 G d
„ d«      Z G d„ d«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Zy)é    N)Údatetime)ÚBytesIO)ÚpackÚunpack)ÚAnyÚcrcÚbyteÚreturnc                 óŒ   — g d¢}|| dz     }| dz	  dz  } | |z  ||dz     z  } || dz     }| dz	  dz  } | |z  ||dz	  dz     z  } | S )N)r   iÌ  iØ  i   ið  i <  i (  iä  i   i l  i x  i´  i P  iœ  iˆ  i D  é   é   iÿ  © )r   r	   ÚtableÚtmps       úL/var/www/html/python/myenv/lib/python3.12/site-packages/garminconnect/fit.pyÚ_calcCRCr   	   s{   € ò€Eð& ��c‘	Ñ
€CØ�!‰8�vÑ
€CØ
�‰)�e˜D 3™JÑ'Ñ
'€Cà
��c‘	Ñ
€CØ�!‰8�vÑ
€CØ
�‰)�e˜T Q™Y¨#Ñ-Ñ.Ñ
.€CØ€Jó    c                   óN  — e Zd ZdZdddddddœZdddddddœZd	dd	d
dddœZdddddd	dœZdddddd	dœZdddddddœZ	dddddddœZ
dddddddœZdddddd	dœZd dd!d"d#ddœZd$dd$d%dddœZd&dd'd(dd	dœZd)dd*d+dddœZd,dd,d-dddœZed.ed/efd0„«       Zed.eeef   d1ed/efd2„«       Zy3)4ÚFitBaseTypez;BaseType Definition

    see FIT Protocol Document(Page.20)r   Úenuméÿ   é   )ú#ÚendianÚfieldÚnameÚinvalidÚsizeÚsint8é   é   Úuint8é   éƒ   Úsint16iÿ  r   é„   Úuint16iÿÿ  é   é…   Úsint32iÿÿÿé   é†   Úuint32l   ÿÿ é   Ústringé   éˆ   Úfloat32é	   é‰   Úfloat64l   ÿÿÿÿ é
   Úuint8zé   é‹   Úuint16zé   éŒ   Úuint32zé   r	   Úbasetyper
   c                 ó4   — dddddddddd	dddd
dœ}|| d      S )NÚBÚbÚhÚHÚiÚIÚsÚfÚdÚc)r   r   r!   r#   r   r(   r+   r.   r0   r3   r6   r8   r;   r>   r   r   )r?   Úformatss     r   Ú
get_formatzFitBaseType.get_format�   sF   € ð ØØØØØØØØØØØØØñ
ˆð  �x ‘}Ñ%Ð%r   Úvaluec                 óh   — | d   dv rt        |«      }t        j                  | «      }t        ||«      S )z$function to avoid DeprecationWarningr   )	r   r!   r#   r   r(   r+   r6   r8   r;   )Úintr   rL   r   )r?   rM   Úfmts      r   r   zFitBaseType.pack±   s7   € ð �C‰=Ð:Ñ:Ü˜“JˆEÜ×$Ñ$ XÓ.ˆÜ�C˜ÓÐr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r"   r%   r'   r*   r-   r/   r2   r5   r7   r:   r=   r	   ÚstaticmethodrO   ÚstrrL   Údictr   Úbytesr   r   r   r   r   r   '   sÔ  „ ñ*ð
 ØØØØØñ€Dð ØØØØØñ€Eð ØØØØØñ€Eð ØØØØØñ€Fð ØØØØØñ€Fð ØØØØØñ€Fð ØØØØØñ€Fð ØØØØØñ€Fð ØØØØØñ€Gð ØØØØ%Øñ€Gð ØØØØØñ€Fð ØØØØØñ€Gð ØØØØØñ€Gð ØØØØØñ€Dð ð&˜Sð & Sò &ó ð&ð& ð �t˜C ˜H‘~ð  ¨cð  °eò  ó ñ r   r   c                   ó    — e Zd ZdZddddddœZy)	ÚFitr;   r   é   é   é1   é3   )Úfile_idÚdevice_infoÚweight_scaleÚfile_creatorÚblood_pressureN)rQ   rR   rS   ÚHEADER_SIZEÚ	GMSG_NUMSr   r   r   rZ   rZ   º   s   „ Ø€Kð ØØØØñ�Ir   rZ   c                   óÈ  — e Zd ZdZdZdZdZd*d„Zdefd„Z		 	 	 	 	 d+d	e
d
e
de
de
deddfd„Zdeeef   defd„Z	 	 	 	 	 d,de
dz  dedz  de
dz  de
dz  de
dz  ddfd„Z	 	 d-de
dz  de
dz  ddfd„Z	 	 	 	 	 	 	 	 	 	 d.dede
dz  de
dz  de
dz  de
dz  de
dz  de
dz  de
dz  de
dz  de
dz  de
dz  ddfd „Zd/d!ed"e
defd#„Zde
fd$„Zd*d%„Zde
fd&„Zdefd'„Zd(eez  defd)„Zy)0Ú
FitEncoderr3   r   r   r!   r
   Nc                 óP   — t        «       | _        | j                  «        d| _        y ©NF)r   ÚbufÚwrite_headerÚdevice_info_defined©Úselfs    r   Ú__init__zFitEncoder.__init__Í   s   € Ü“9ˆŒØ×ÑÔØ#(ˆÕ r   c           
      ó„  — | j                   j                  «       }| j                   j                  d«       g }	 | j                   j                  d«      }|sn:|j	                  dj                  |D �cg c]  }t        |«      d›‘Œ c}«      «       ŒX| j                   j                  |«       dj                  |«      S c c}w )Nr   é   ú Ú02xú
)rj   ÚtellÚseekÚreadÚappendÚjoinÚord)rn   Úorig_posÚlinesrB   rJ   s        r   Ú__str__zFitEncoder.__str__Ò   s–   € Ø—8‘8—=‘=“?ˆØ�‰�‰�aÔØˆØØ—‘—‘˜bÓ!ˆAÙØØ�L‰L˜Ÿ™¸AÖ">°q¤c¨!£f¨S \¡?Ò">Ó?Ô@ð	 ð
 	�‰�‰�hÔØ�y‰y˜ÓÐùò #?s   Á1B=Úheader_sizeÚprotocol_versionÚprofile_versionÚ	data_sizeÚ	data_typec                 ó�   — | j                   j                  d«       t        d|||||«      }| j                   j                  |«       y )Nr   ÚBBHI4s)rj   rv   r   Úwrite)rn   r~   r   r€   r�   r‚   rG   s          r   rk   zFitEncoder.write_headerÞ   sB   € ð 	�‰�‰�aÔÜØØØØØØó
ˆð 	�‰�‰�qÕr   Úcontentc                 ó  — g }g }|D ]`  \  }}}}t        d||d   |d   «      }|j                  |«       |€|d   }n|�||z  }|j                  t        j                  ||«      «       Œb dj                  |«      dj                  |«      fS )NÚBBBr   r   r   r   )r   rx   r   ry   )	rn   r†   Ú
field_defsÚvaluesÚnumr?   rM   ÚscalerG   s	            r   Ú_build_content_blockzFitEncoder._build_content_blockñ   s¢   € Øˆ
ØˆØ+2ò 	=Ñ'ˆC�˜5 %Ü�U˜C ¨&Ñ!1°8¸GÑ3DÓEˆAØ×Ñ˜aÔ Øˆ}à  Ñ+‘ØÐ"Ø˜‘�Ø�M‰Mœ+×*Ñ*¨8°UÓ;Õ<ð	=ð —‘˜Ó$ c§h¡h¨vÓ&6Ð7Ð7r   Úserial_numberÚtime_createdÚmanufacturerÚproductÚnumberc           
      óˆ  — |€t        j                  «       }dt        j                  |d fdt        j                  | j                  |«      d fdt        j                  |d fdt        j                  |d fdt        j                  |d fdt        j                  | j                  d fg}| j                  |«      \  }}| j                  d   }	t        ddd|	t        |«      «      }
| j                  j                  d	j                  | j!                  d
| j"                  ¬«      |
|| j!                  | j"                  ¬«      |g«      «       y )Nr#   r   r   r!   r(   r   r_   ÚBBHBr   T©Ú
definitionÚ	lmsg_type©r—   )r   Únowr   r=   r-   Ú	timestampr'   r   Ú	FILE_TYPEr�   re   r   Úlenrj   r…   ry   Úrecord_headerÚLMSG_TYPE_FILE_INFO)rn   rŽ   r�   r�   r‘   r’   r†   ÚfieldsrŠ   Ú
msg_numberÚfixed_contents              r   Úwrite_file_infozFitEncoder.write_file_infoÿ   s;  € ð ÐÜ#Ÿ<™<›>ˆLð ”×#Ñ# ]°DÐ9Ø”×"Ñ" D§N¡N°<Ó$@À$ÐGØ”×"Ñ" L°$Ð7Ø”×"Ñ" G¨TÐ2Ø”×"Ñ" F¨DÐ1Ø”× Ñ  $§.¡.°$Ð7ð
ˆð ×2Ñ2°7Ó;‰ˆ�ð —^‘^ IÑ.ˆ
ÜØ�A�q˜*¤c¨'£ló
ˆð 	�‰�‰Ø�H‰Hð ×&Ñ&Ø#'°4×3KÑ3Kð 'ó ð "Øà×&Ñ&°×1IÑ1IÐ&ÓJØð
óõ	
r   Úsoftware_versionÚhardware_versionc           
      ó’  — dt         j                  |d fdt         j                  |d fg}| j                  |«      \  }}| j                  d   }t        ddd|t        |«      «      }| j                  j                  dj                  | j                  d| j                  ¬«      ||| j                  | j                  ¬«      |g«      «       y )	Nr   r   rb   r”   r   Tr•   r˜   )r   r'   r"   r�   re   r   rœ   rj   r…   ry   r�   ÚLMSG_TYPE_FILE_CREATOR)rn   r£   r¤   r†   rŸ   rŠ   r    r¡   s           r   Úwrite_file_creatorzFitEncoder.write_file_creator*  sÓ   € ð ”×"Ñ"Ð$4°dÐ;Ø”×!Ñ!Ð#3°TÐ:ð
ˆð ×2Ñ2°7Ó;‰ˆ�à—^‘^ NÑ3ˆ
ÜØ�A�q˜*¤c¨'£ló
ˆð 	�‰�‰Ø�H‰Hð ×&Ñ&Ø#'°4×3NÑ3Nð 'ó ð "Øà×&Ñ&°×1LÑ1LÐ&ÓMØð
óõ	
r   rš   Úcum_operationg_timeÚbattery_voltageÚdevice_indexÚdevice_typeÚbattery_statusc                 óz  — dt         j                  | j                  |«      dfdt         j                  |dfdt         j                  |dfdt         j                  d d fdt         j                  |dfdt         j                  |dfdt         j                  |d	fd
t         j                  |dfdt         j
                  |dfdt         j
                  |	dfdt         j
                  |
dfdt         j
                  |d fg}| j                  |«      \  }}| j                  sl| j                  d| j                  ¬«      }| j                  d   }t        ddd|t        |«      «      }| j                  j                  ||z   |z   «       d| _        | j                  | j                  ¬«      }| j                  j                  ||z   «       y )Néý   r   r#   r.   r0   r!   r   r(   éd   r6   é   r   r+   r8   Tr•   r`   r”   r˜   )r   r-   rš   r=   r'   r"   r�   rl   r�   ÚLMSG_TYPE_DEVICE_INFOre   r   rœ   rj   r…   )rn   rš   rŽ   r¨   r�   r‘   r£   r©   rª   r«   r¤   r¬   r†   rŸ   rŠ   Úheaderr    r¡   s                     r   Úwrite_device_infozFitEncoder.write_device_infoI  s¨  € ð ”+×$Ñ$ d§n¡n°YÓ&?ÀÐCØ”×#Ñ# ]°AÐ6Ø”×"Ñ"Ð$7¸Ð;Ø”×"Ñ" D¨$Ð/Ø”×"Ñ" L°!Ð4Ø”×"Ñ" G¨QÐ/Ø”×"Ñ"Ð$4°cÐ:Ø”×#Ñ# _°cÐ:Ø”×!Ñ! <°Ð3Ø”×!Ñ! ;°Ð2Ø”×!Ñ!Ð#3°QÐ7Ø”×"Ñ" N°DÐ9ð
ˆð ×2Ñ2°7Ó;‰ˆ�à×'Ò'Ø×'Ñ'Ø¨4×+EÑ+Eð (ó ˆFð Ÿ™¨Ñ6ˆJÜ Ø˜˜1˜j¬#¨g«,óˆMð �H‰H�N‰N˜6 MÑ1°FÑ:Ô;Ø'+ˆDÔ$à×#Ñ#¨d×.HÑ.HÐ#ÓIˆØ�‰�‰�v ‘Õ'r   r–   r—   c                 ó,   — d}|rd}t        d||z   «      S )Nr   é@   rA   )r   )rn   r–   r—   Úmsgs       r   r�   zFitEncoder.record_headeru  s    € ØˆÙØˆCÜ�C˜˜y™Ó)Ð)r   c                 ó0  — | j                   j                  «       }| j                   j                  d«       d}	 | j                   j                  d«      }|snt	        |t        d|«      d   «      }Œ8| j                   j                  |«       t        d|«      S )Nr   r   rB   rD   )rj   ru   rv   rw   r   r   r   )rn   r{   r   rB   s       r   r   zFitEncoder.crc{  s{   € Ø—8‘8—=‘=“?ˆØ�‰�‰�aÔàˆØØ—‘—‘˜aÓ ˆAÙØÜ˜3¤ s¨A£¨qÑ 1Ó2ˆCð	 ð
 	�‰�‰�hÔÜ�C˜‹~Ðr   c                 óð   — | j                  «       | j                  z
  }| j                  |¬«       | j                  «       }| j                  j                  dd«       | j                  j                  |«       y)z4re-weite file-header, then append crc to end of file)r�   r   r!   N)Úget_sizerd   rk   r   rj   rv   r…   )rn   r�   r   s      r   ÚfinishzFitEncoder.finishˆ  sV   € à—M‘M“O d×&6Ñ&6Ñ6ˆ	Ø×Ñ IÐÔ.Ø�h‰h‹jˆØ�‰�‰�a˜ÔØ�‰�‰�sÕr   c                 óÜ   — | j                   j                  «       }| j                   j                  dd«       | j                   j                  «       }| j                   j                  |«       |S )Nr   r!   )rj   ru   rv   )rn   r{   r   s      r   r¹   zFitEncoder.get_size�  sG   € Ø—8‘8—=‘=“?ˆØ�‰�‰�a˜ÔØ�x‰x�}‰}‹ˆØ�‰�‰�hÔØˆr   c                 ó6   — | j                   j                  «       S )N)rj   Úgetvaluerm   s    r   r½   zFitEncoder.getvalue—  s   € Ø�x‰x× Ñ Ó"Ð"r   Útc                 ór   — t        |t        «      r#t        j                  |j	                  «       «      }|dz
  S )zXthe timestamp in fit protocol is seconds since
        UTC 00:00 Dec 31 1989 (631065600)i L�%)Ú
isinstancer   ÚtimeÚmktimeÚ	timetuple)rn   r¾   s     r   rš   zFitEncoder.timestampš  s,   € ô �aœÔ"Ü—‘˜AŸK™K›MÓ*ˆAØ�9‰}Ðr   ©r
   N)r;   rq   él   r   s   .FIT)NNNNN)NN)
NNNNNNNNNN)Fr   )rQ   rR   rS   r›   rž   r¦   r±   ro   rV   r}   rO   rX   rk   rW   r   r�   r   r¢   r§   r³   Úboolr�   r   rº   r¹   r½   Úfloatrš   r   r   r   rg   rg   Ç   sK  „ Ø€IØÐØÐØÐó)ð

 ˜ó 
 ð Ø "Ø"ØØ"ñàðð ðð ð	ð
 ðð ðð 
óð&8¨D°°c°©Nð 8¸uó 8ð  %)Ø(,Ø#'Ø"Ø!ñ)
à˜T‘zð)
ð  ‘oð)
ð ˜D‘jð	)
ð
 �t‘ð)
ð �d‘
ð)
ð 
ó)
ðZ (,Ø'+ñ
à ™*ð
ð  ™*ð
ð 
ó	
ðD %)Ø*.Ø#'Ø"Ø'+Ø&*Ø#'Ø"&Ø'+Ø%)ñ*(àð*(ð ˜T‘zð*(ð ! 4™Zð	*(ð
 ˜D‘jð*(ð �t‘ð*(ð  ™*ð*(ð ˜t™ð*(ð ˜D‘jð*(ð ˜4‘Zð*(ð  ™*ð*(ð ˜d™
ð*(ð 
ó*(ñX*¨ð *Àð *ÈUó *ð�Só óð˜#ó ð#˜%ó #ð˜8 eÑ+ð °ô r   rg   c                   ó–   ‡ — e Zd ZdZdˆ fd„Z	 	 	 	 	 	 	 ddeez  ez  dedz  dedz  dedz  d	edz  d
edz  dedz  dedz  ddfd„Zˆ xZ	S )ÚFitEncoderBloodPressureé   r
   Nc                 ó0   •— t         ‰| �  «        d| _        y ri   )Úsuperro   Úblood_pressure_monitor_defined©rn   Ú	__class__s    €r   ro   z FitEncoderBloodPressure.__init__¦  s   ø€ Ü‰ÑÔØ.3ˆÕ+r   rš   Údiastolic_blood_pressureÚsystolic_blood_pressureÚmean_arterial_pressureÚmap_3_sample_meanÚmap_morning_valuesÚmap_evening_valuesÚ
heart_ratec	                 óâ  — dt         j                  | j                  |«      dfdt         j                  |dfdt         j                  |dfdt         j                  |dfdt         j                  |dfdt         j                  |dfdt         j                  |dfdt         j                  |dfg}	| j                  |	«      \  }
}| j                  sl| j                  d	| j                  ¬
«      }| j                  d   }t        ddd|t        |	«      «      }| j                  j                  ||z   |
z   «       d	| _        | j                  | j                  ¬«      }| j                  j                  ||z   «       y )Nr®   r   r   r!   r#   r   r(   r+   Tr•   rc   r”   r˜   )r   r-   rš   r'   r"   r�   rÍ   r�   ÚLMSG_TYPE_BLOOD_PRESSUREre   r   rœ   rj   r…   )rn   rš   rÐ   rÑ   rÒ   rÓ   rÔ   rÕ   rÖ   r†   rŸ   rŠ   r²   r    r¡   s                  r   Úwrite_blood_pressurez,FitEncoderBloodPressure.write_blood_pressureª  sd  € ð ”+×$Ñ$ d§n¡n°YÓ&?ÀÐCØ”×"Ñ"Ð$;¸QÐ?Ø”×"Ñ"Ð$<¸aÐ@Ø”×"Ñ"Ð$:¸AÐ>Ø”×"Ñ"Ð$5°qÐ9Ø”×"Ñ"Ð$6¸Ð:Ø”×"Ñ"Ð$6¸Ð:Ø”×!Ñ! :¨qÐ1ð	
ˆð ×2Ñ2°7Ó;‰ˆ�à×2Ò2Ø×'Ñ'Ø¨4×+HÑ+Hð (ó ˆFð Ÿ™Ð(8Ñ9ˆJÜ Ø˜˜1˜j¬#¨g«,óˆMð �H‰H�N‰N˜6 MÑ1°FÑ:Ô;Ø26ˆDÔ/à×#Ñ#¨d×.KÑ.KÐ#ÓLˆØ�‰�‰�v ‘Õ'r   rÄ   )NNNNNNN)
rQ   rR   rS   rØ   ro   r   rO   rÇ   rÙ   Ú__classcell__©rÏ   s   @r   rÉ   rÉ   ¢  s§   ø„ à!Ðõ4ð 04Ø.2Ø-1Ø(,Ø)-Ø)-Ø!%ñ$(à˜c‘> EÑ)ð$(ð #&¨¡*ð$(ð "% t¡ð	$(ð
 !$ d¡
ð$(ð  ™:ð$(ð   $™Jð$(ð   $™Jð$(ð ˜$‘Jð$(ð 
÷$(r   rÉ   c                   ó  ‡ — e Zd ZdZdˆ fd„Z	 	 	 	 	 	 	 	 	 	 	 ddeez  ez  deez  deez  dz  deez  dz  d	eez  dz  d
eez  dz  deez  dz  deez  dz  deez  dz  deez  dz  deez  dz  deez  dz  deez  dz  ddfd„Zˆ xZ	S )ÚFitEncoderWeightr#   r
   Nc                 ó0   •— t         ‰| �  «        d| _        y ri   )rÌ   ro   Úweight_scale_definedrÎ   s    €r   ro   zFitEncoderWeight.__init__Ô  s   ø€ Ü‰ÑÔØ$)ˆÕ!r   rš   ÚweightÚpercent_fatÚpercent_hydrationÚvisceral_fat_massÚ	bone_massÚmuscle_massÚ	basal_metÚ
active_metÚphysique_ratingÚmetabolic_ageÚvisceral_fat_ratingÚbmic                 ó   — dt         j                  | j                  |«      dfdt         j                  |dfdt         j                  |dfdt         j                  |dfdt         j                  |dfdt         j                  |dfdt         j                  |dfd	t         j                  |dfd
t         j                  |	dfdt         j                  |
dfdt         j                  |dfdt         j                  |dfdt         j                  |dfg}| j                  |«      \  }}| j                  sl| j                  d| j                  ¬«      }| j                  d   }t        ddd|t        |«      «      }| j                  j                  ||z   |z   «       d| _        | j                  | j                  ¬«      }| j                  j                  ||z   «       y )Nr®   r   r   r¯   r!   r#   r   r(   r.   r3   r0   r6   r8   r>   Tr•   ra   r”   r˜   )r   r-   rš   r'   r"   r�   rß   r�   ÚLMSG_TYPE_WEIGHT_SCALEre   r   rœ   rj   r…   )rn   rš   rà   rá   râ   rã   rä   rå   ræ   rç   rè   ré   rê   rë   r†   rŸ   rŠ   r²   r    r¡   s                       r   Úwrite_weight_scalez#FitEncoderWeight.write_weight_scaleØ  sº  € ð" ”+×$Ñ$ d§n¡n°YÓ&?ÀÐCØ”×"Ñ" F¨CÐ0Ø”×"Ñ" K°Ð5Ø”×"Ñ"Ð$5°sÐ;Ø”×"Ñ"Ð$5°sÐ;Ø”×"Ñ" I¨sÐ3Ø”×"Ñ" K°Ð5Ø”×"Ñ" I¨qÐ1Ø”×"Ñ" J°Ð2Ø”×!Ñ! ?°AÐ6Ø”×"Ñ" M°1Ð5Ø”×"Ñ"Ð$7¸Ð;Ø”×#Ñ# S¨"Ð-ð
ˆð ×2Ñ2°7Ó;‰ˆ�à×(Ò(Ø×'Ñ'Ø¨4×+FÑ+Fð (ó ˆFð Ÿ™¨Ñ7ˆJÜ Ø˜˜1˜j¬#¨g«,óˆMð �H‰H�N‰N˜6 MÑ1°FÑ:Ô;Ø(,ˆDÔ%à×#Ñ#¨d×.IÑ.IÐ#ÓJˆØ�‰�‰�v ‘Õ'r   rÄ   )NNNNNNNNNNN)
rQ   rR   rS   rí   ro   r   rO   rÇ   rî   rÚ   rÛ   s   @r   rÝ   rÝ   Ñ  s0  ø„ ØÐõ*ð +/Ø04Ø04Ø(,Ø*.Ø(,Ø)-Ø.2Ø,0Ø26Ø"&ñ-(à˜c‘> EÑ)ð-(ð �e‘ð-(ð ˜5‘[ 4Ñ'ð	-(ð
  ™;¨Ñ-ð-(ð  ™;¨Ñ-ð-(ð ˜‘; Ñ%ð-(ð ˜5‘[ 4Ñ'ð-(ð ˜‘; Ñ%ð-(ð ˜%‘K $Ñ&ð-(ð ˜u™ tÑ+ð-(ð ˜U‘{ TÑ)ð-(ð ! 5™[¨4Ñ/ð-(ð �5‰[˜4Ñð-(ð 
÷-(r   rÝ   )rÁ   r   Úior   Ústructr   r   Útypingr   rO   r   r   rZ   rg   rÉ   rÝ   r   r   r   ú<module>rò      sm   ðã Ý Ý ß Ý ð�#ð ˜Sð  Só ÷<P ñ P ÷f
ñ 
ôX�ô Xôv,(˜jô ,(ô^4(�zõ 4(r   