ó
    ioøg=  ã                   ó²  • S r SSKJrJrJrJrJr  SSKJrJ	r	  SSK
JrJrJrJr  SSK
JrJrJrJr  SSKJr  SSKJr  SSKJr  \" \" S	5      5      rS
\R2                  l        S
\R2                  l        \\R8                  l        \\\/\R8                  l        \\R:                  l        \\/\R:                  l        \\R<                  l        \\/\R<                  l        \\R>                  l        \\\\\\/\R>                  l        \\R@                  l        \\\/\R@                  l        \\RB                  l        \\/\RB                  l        \\RD                  l        \/\RD                  l        \\RF                  l        S
\RF                  l        \\RH                  l        \/\RH                  l        \\RJ                  l        \/\RJ                  l        \\RL                  l        \/\RL                  l        \\RN                  l        \\\\\\/\RN                  l        \\RP                  l        \\\/\RP                  l        \\RR                  l        \\\/\RR                  l        \\RT                  l        \\/\RT                  l        \\RV                  l        \\/\RV                  l        \\RX                  l        \\/\RX                  l        \\RZ                  l        \\/\RZ                  l        \\R\                  l        \" \5      /\R\                  l        \\R^                  l        \" \5      /\R^                  l        \\R`                  l        S
\R`                  l        \\Rb                  l        \\\\/\Rb                  l        \\Rd                  l        \\\\\/\Rd                  l         " S S\35      r4 " S S\55      r6g
)aB  Wrapper module for libpcp_import - Performace Co-Pilot Log Import API
#
# Copyright (C) 2012-2022 Red Hat.
#
# This file is part of the "pcp" module, the python interfaces for the
# Performance Co-Pilot toolkit.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# for more details.
#

# Example use of this module for creating a PCP archive:

        import time
        import pmapi
        from pcp import pmi

        # Create a new archive
        log = pmi.pmiLogImport("loadtest")
        log.pmiSetHostname("www.abc.com")
        log.pmiSetTimezone("EST-10")

        # Add a metric with an instance domain
        domain = 60  # Linux kernel
        pmid = log.pmiID(domain, 2, 0)
        indom = log.pmiInDom(domain, 2)
        units = log.pmiUnits(0, 0, 0, 0, 0, 0)
        log.pmiAddMetric("kernel.all.load", pmid, pmapi.PM_TYPE_FLOAT,
                         indom, pmapi.PM_SEM_INSTANT, units)
        log.pmiAddInstance(indom, "1 minute", 1)
        log.pmiAddInstance(indom, "5 minute", 5)
        log.pmiAddInstance(indom, "15 minute", 15)

        # Create a record with a timestamp
        log.pmiPutValue("kernel.all.load", "1 minute", "%f" % 0.01)
        log.pmiPutValue("kernel.all.load", "5 minute", "%f" % 0.05)
        log.pmiPutValue("kernel.all.load", "15 minute", "%f" % 0.15)
        log.pmiWrite(time.time())  # sec since epoch, or datetime, or
        #log.pmiWrite(seconds, useconds)

        del log
é    )ÚpmIDÚpmInDomÚpmUnitsÚpmHighResResultÚpmResult)ÚpmiErrSymDictÚPMI_MAXERRMSGLEN)Úc_intÚc_uintÚ
c_longlongÚc_char_p)ÚcastÚcreate_string_bufferÚPOINTERÚCDLL)Úfind_library)Údatetime)ÚmodfÚ
pcp_importNc                   ó8   ^ • \ rS rSrSrU 4S jrS rS rSrU =r	$ )ÚpmiErré‘   z,
Encapsulation for PMI interface error code
c                 óª   >• [         [        U ]
  " U6   [        U5      U l        U(       a#  [        US   [        5      (       a  US   U l        g SU l        g )Nr   )Úsuperr   Ú__init__ÚlistÚargsÚ
isinstanceÚintÚcode)Úselfr   Ú	__class__s     €Ú)/usr/lib/python3/dist-packages/pcp/pmi.pyr   ÚpmiErr.__init__•   sB   ø€ ÜŒf�dÒ$ dÑ+Ü˜“JˆŒ	Þ”J˜t A™w¬×,Ñ,Ø˜Q™ˆD�IàˆD�Ió    c                 óÊ   •  [         U R                     n[        [        5      n[        R                  U R                  U[        5      nU< SU< 3$ ! [         a    S=p Nf = f)NÚ Ú )r   r    r   r	   ÚLIBPCP_IMPORTÚpmiErrStr_rÚKeyError)r!   Úerror_symbolÚerror_strings      r#   Ú__str__ÚpmiErr.__str__�   sd   € ð	-Ü(¨¯©Ñ3ˆLÜ/Ô0@ÓAˆLÜ(×4Ñ4°T·Y±YÀÜ5EóGˆLó 'ªÐ5Ð5øô ó 	-Ø*,Ð,ˆL™<ð	-ús   ‚AA ÁA"Á!A"c                 ó   • U R                   $ ©N)r    ©r!   s    r#   ÚerrnoÚpmiErr.errno§   s   € Ø�y‰yÐr%   )r   r    )
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r.   r3   Ú__static_attributes__Ú__classcell__)r"   s   @r#   r   r   ‘   s   ø† ñõò6÷ð r%   r   c                   ó  • \ rS rSrSrS rS r\" \SSS5      r\" \SSS5      r	SS jr
S rS rS	 rS
 r\S 5       r\S 5       r\S 5       r\S 5       rS rS rS rS rS rS rSS jrS rS rS rS rS r\S 5       r S r!Sr"g) ÚpmiLogImporté±   zfDefines a PCP Log Import archive context
This is used to create a PCP archive from an external source
c                 ó   • U R                   $ )zProperty for archive path )Ú_pathr2   s    r#   Ú	read_pathÚpmiLogImport.read_path¹   s   € à�z‰zÐr%   c                 ó   • U R                   $ )z Property for log import context )Ú_ctxr2   s    r#   Úread_ctxÚpmiLogImport.read_ctx¼   s   € à�y‰yÐr%   Nc                 ó$  • [        U[        5      (       d  UR                  S5      nXl        [        R
                  " S5      U l        [        R                  [        U5      U5      U l
        U R                  S:  a  [        U R                  5      eg )Núutf-8r   )r   ÚbytesÚencoder@   r   ÚutcfromtimestampÚ_epochr)   ÚpmiStartr   rD   r   )r!   ÚpathÚinherits      r#   r   ÚpmiLogImport.__init__É   sk   € Ü˜$¤×&Ñ&Ø—;‘;˜wÓ'ˆDØŒ
Ü×/Ò/°Ó2ˆŒÜ!×*Ñ*¬8°D«>¸7ÓCˆŒ	Ø�9‰9�q‹=Ü˜Ÿ™Ó#Ð#ð r%   c                 óŽ   • [         (       a3  [         R                  U R                  5        [         R                  5         SU l        g )Néÿÿÿÿ)r)   ÚpmiUseContextrD   ÚpmiEndr2   s    r#   Ú__del__ÚpmiLogImport.__del__Ò   s,   € ßŠ=Ü×'Ñ'¨¯	©	Ô2Ü× Ñ Ô"Øˆ�	r%   c                 ó  • [         R                  U R                  5      nUS:  a  [        U5      e[	        U[
        5      (       d  UR                  S5      n[         R                  [        U5      5      nUS:  a  [        U5      eU$ )z8PMI - set the source host name for a Log Import archive r   rH   )	r)   rS   rD   r   r   rI   rJ   ÚpmiSetHostnamer   )r!   ÚhostnameÚstatuss      r#   rX   ÚpmiLogImport.pmiSetHostnameÛ   sm   € ä×,Ñ,¨T¯Y©YÓ7ˆØ�A‹:Ü˜“.Ð Ü˜(¤E×*Ñ*Ø—‘ wÓ/ˆHÜ×-Ñ-¬h°xÓ.@ÓAˆØ�A‹:Ü˜“.Ð Øˆr%   c                 ó  • [         R                  U R                  5      nUS:  a  [        U5      e[	        U[
        5      (       d  UR                  S5      n[         R                  [        U5      5      nUS:  a  [        U5      eU$ )z?PMI - set the source timezone for a Log Import archive
        r   rH   )	r)   rS   rD   r   r   rI   rJ   ÚpmiSetTimezoner   )r!   ÚtimezonerZ   s      r#   r]   ÚpmiLogImport.pmiSetTimezoneç   so   € ô ×,Ñ,¨T¯Y©YÓ7ˆØ�A‹:Ü˜“.Ð Ü˜(¤E×*Ñ*Ø—‘ wÓ/ˆHÜ×-Ñ-¬h°xÓ.@ÓAˆØ�A‹:Ü˜“.Ð Øˆr%   c                 óà   • [         R                  U R                  5      nUS:  a  [        U5      e[	        U[
        5      (       d  Sn[         R                  U5      nUS:  a  [        U5      eU$ )z6PMI - set the output archive version (2 or 3)
        r   é   )r)   rS   rD   r   r   r   ÚpmiSetVersion)r!   ÚversionrZ   s      r#   rb   ÚpmiLogImport.pmiSetVersionô   sa   € ô ×,Ñ,¨T¯Y©YÓ7ˆØ�A‹:Ü˜“.Ð Ü˜'¤3×'Ñ'ØˆGÜ×,Ñ,¨WÓ5ˆØ�A‹:Ü˜“.Ð Øˆr%   c                 ó.   • [         R                  XU5      $ ©z7PMI - construct a pmID data structure (helper routine) )r)   ÚpmiID)ÚdomainÚclusterÚitems      r#   rg   ÚpmiLogImport.pmiID  s   € ô ×"Ñ" 6°DÓ9Ð9r%   c                 ó,   • [         R                  X5      $ rf   )r)   Ú
pmiCluster)rh   ri   s     r#   rm   ÚpmiLogImport.pmiCluster  s   € ô ×'Ñ'¨Ó8Ð8r%   c                 ó,   • [         R                  X5      $ )z:PMI - construct a pmInDom data structure (helper routine) )r)   ÚpmiInDom)rh   Úserials     r#   rp   ÚpmiLogImport.pmiInDom  s   € ô ×%Ñ% fÓ5Ð5r%   c                 ó2   • [         R                  XUX4U5      $ )z;PMI - construct a pmiUnits data structure (helper routine) )r)   ÚpmiUnits)Ú	dim_spaceÚdim_timeÚ	dim_countÚscale_spaceÚ
scale_timeÚscale_counts         r#   rt   ÚpmiLogImport.pmiUnits  s"   € ô ×%Ñ% i¸9Ø&1¸{óLð 	Lr%   c                 ó  • [         R                  U R                  5      nUS:  a  [        U5      e[	        U[
        5      (       d  UR                  S5      n[         R                  [        U5      X#XEU5      nUS:  a  [        U5      eU$ )z:PMI - add a new metric definition to a Log Import context r   rH   )	r)   rS   rD   r   r   rI   rJ   ÚpmiAddMetricr   )r!   ÚnameÚpmidÚtypedÚindomÚsemÚunitsrZ   s           r#   r}   ÚpmiLogImport.pmiAddMetric  sv   € ä×,Ñ,¨T¯Y©YÓ7ˆØ�A‹:Ü˜“.Ð Ü˜$¤×&Ñ&Ø—;‘;˜wÓ'ˆDÜ×+Ñ+¬H°T«NØ,0¸ÀUóLˆà�A‹:Ü˜“.Ð Øˆr%   c                 ó  • [         R                  U R                  5      nUS:  a  [        U5      e[	        U[
        5      (       d  UR                  S5      n[         R                  U[        U5      U5      nUS:  a  [        U5      eU$ )z@PMI - add element to an instance domain in a Log Import context r   rH   )	r)   rS   rD   r   r   rI   rJ   ÚpmiAddInstancer   )r!   r�   ÚinstanceÚinstidrZ   s        r#   r†   ÚpmiLogImport.pmiAddInstance$  sq   € ä×,Ñ,¨T¯Y©YÓ7ˆØ�A‹:Ü˜“.Ð Ü˜(¤E×*Ñ*Ø—‘ wÓ/ˆHÜ×-Ñ-¨e´X¸hÓ5GÈÓPˆØ�A‹:Ü˜“.Ð Øˆr%   c                 óÞ  • [         R                  U R                  5      nUS:  a  [        U5      e[	        U[
        5      (       d  UR                  S5      nSnUb1  [	        U[
        5      (       d  UR                  S5      n[        U5      n[	        U[
        5      (       d  UR                  S5      n[         R                  [        U5      U[        U5      5      nUS:  a  [        U5      eU$ )z-PMI - add a value for a metric-instance pair r   rH   N)	r)   rS   rD   r   r   rI   rJ   r   ÚpmiPutValue)r!   r~   ÚinstÚvaluerZ   r‡   s         r#   r‹   ÚpmiLogImport.pmiPutValue0  sÂ   € ä×,Ñ,¨T¯Y©YÓ7ˆØ�A‹:Ü˜“.Ð Ü˜$¤×&Ñ&Ø—;‘;˜wÓ'ˆDØˆØÑÜ˜d¤E×*Ñ*Ø—{‘{ 7Ó+�Ü “~ˆHÜ˜%¤×'Ñ'Ø—L‘L Ó)ˆEÜ×*Ñ*¬8°D«>Ø+3´X¸e³_óFˆà�A‹:Ü˜“.Ð Øˆr%   c                 ó~  • [         R                  U R                  5      nUS:  a  [        U5      e[	        U[
        5      (       d  UR                  S5      nSnUb1  [	        U[
        5      (       d  UR                  S5      n[        U5      n[         R                  [        U5      U5      nUS:  a  [        U5      eU$ )z1PMI - define a handle for a metric-instance pair r   rH   N)	r)   rS   rD   r   r   rI   rJ   r   ÚpmiGetHandle)r!   r~   rŒ   rZ   r‡   s        r#   r�   ÚpmiLogImport.pmiGetHandleD  s�   € ä×,Ñ,¨T¯Y©YÓ7ˆØ�A‹:Ü˜“.Ð Ü˜$¤×&Ñ&Ø—;‘;˜wÓ'ˆDØˆØÑÜ˜d¤E×*Ñ*Ø—{‘{ 7Ó+�Ü “~ˆHÜ×+Ñ+¬H°T«N¸HÓEˆØ�A‹:Ü˜“.Ð Øˆr%   c                 ó  • [         R                  U R                  5      nUS:  a  [        U5      e[	        U[
        5      (       d  UR                  S5      n[         R                  U[        U5      5      nUS:  a  [        U5      eU$ )z:PMI - add a value for a metric-instance pair via a handle r   rH   )	r)   rS   rD   r   r   rI   rJ   ÚpmiPutValueHandler   )r!   Úhandler�   rZ   s       r#   r“   ÚpmiLogImport.pmiPutValueHandleU  sn   € ä×,Ñ,¨T¯Y©YÓ7ˆØ�A‹:Ü˜“.Ð Ü˜%¤×'Ñ'Ø—L‘L Ó)ˆEÜ×0Ñ0°¼À%»ÓIˆØ�A‹:Ü˜“.Ð Øˆr%   c                 ó²   • [         R                  U R                  5      nUS:  a  [        U5      e[         R	                  X5      nUS:  a  [        U5      eU$ )ú)PMI - flush data to a Log Import archive r   )r)   rS   rD   r   ÚpmiHighResWrite)r!   ÚsecÚnsecrZ   s       r#   r˜   ÚpmiLogImport.pmiHighResWritea  sM   € ä×,Ñ,¨T¯Y©YÓ7ˆØ�A‹:Ü˜“.Ð Ü×.Ñ.¨sÓ9ˆØ�A‹:Ü˜“.Ð Øˆr%   c                 óÆ  • [         R                  U R                  5      nUS:  a  [        U5      eU(       aƒ  U(       d|  [	        U[
        5      (       a%  [        XR                  -
  R                  5       5      n[	        U[        5      (       a+  [        U5      n[        US   5      n[        US   S-  5      nOSn[         R                  X5      nUS:  a  [        U5      eU$ )r—   r   é   i@B )r)   rS   rD   r   r   r   ÚfloatrL   Útotal_secondsr   r   Ú	pmiWrite2)r!   r™   ÚusecrZ   Útss        r#   ÚpmiWriteÚpmiLogImport.pmiWritek  s³   € ä×,Ñ,¨T¯Y©YÓ7ˆØ�A‹:Ü˜“.Ð Þ–tÜ˜#œx×(Ñ(Ü˜S§;¡;Ñ.×=Ñ=Ó?Ó@�Ü˜#œu×%Ñ%Ü˜#“Y�Ü˜"˜Q™%“j�Ü˜2˜a™5 7™?Ó+‘à�Ü×(Ñ(¨Ó3ˆØ�A‹:Ü˜“.Ð Øˆr%   c                 ó°   • [         R                  U R                  5      nUS:  a  [        U5      e[         R	                  5       nUS:  a  [        U5      eU$ )z4PMI - write a <mark> record to a Log Import archive r   )r)   rS   rD   r   Ú
pmiPutMark©r!   rZ   s     r#   r¦   ÚpmiLogImport.pmiPutMark~  sK   € ä×,Ñ,¨T¯Y©YÓ7ˆØ�A‹:Ü˜“.Ð Ü×)Ñ)Ó+ˆØ�A‹:Ü˜“.Ð Øˆr%   c                 óà   • [         R                  U R                  5      nUS:  a  [        U5      e[         R	                  [        U[        [        5      5      5      nUS:  a  [        U5      eU$ ©z0PMI - add a data record to a Log Import archive r   )r)   rS   rD   r   ÚpmiPutResultr   r   r   ©r!   ÚresultrZ   s      r#   Ú
put_resultÚpmiLogImport.put_resultˆ  sY   € ä×,Ñ,¨T¯Y©YÓ7ˆØ�A‹:Ü˜“.Ð Ü×+Ñ+¬D°¼ÄÓ9JÓ,KÓLˆØ�A‹:Ü˜“.Ð Øˆr%   c                 óà   • [         R                  U R                  5      nUS:  a  [        U5      e[         R	                  [        U[        [        5      5      5      nUS:  a  [        U5      eU$ rª   )r)   rS   rD   r   ÚpmiPutHighResResultr   r   r   r¬   s      r#   Úput_highres_resultÚpmiLogImport.put_highres_result’  sY   € ä×,Ñ,¨T¯Y©YÓ7ˆØ�A‹:Ü˜“.Ð Ü×2Ñ2´4¸ÄÌÓ@XÓ3YÓZˆØ�A‹:Ü˜“.Ð Øˆr%   c                 ó  • [         R                  U R                  5      nUS:  a  [        U5      e[	        U[
        5      (       d  UR                  S5      n[         R                  XU[        U5      5      nUS:  a  [        U5      eU$ )z0PMI - add a text record to a Log Import archive r   rH   )	r)   rS   rD   r   r   rI   rJ   Ú
pmiPutTextr   )r!   ÚtypÚclsÚidentÚcontentrZ   s         r#   rµ   ÚpmiLogImport.pmiPutTextœ  sq   € ä×,Ñ,¨T¯Y©YÓ7ˆØ�A‹:Ü˜“.Ð Ü˜'¤5×)Ñ)Ø—n‘n WÓ-ˆGÜ×)Ñ)¨#°E¼8ÀGÓ;LÓMˆØ�A‹:Ü˜“.Ð Øˆr%   c           	      ót  • [         R                  U R                  5      nUS:  a  [        U5      e[	        U[
        5      (       d  UR                  S5      n[	        U[
        5      (       d  UR                  S5      n[         R                  XU[        U5      [        U5      5      nUS:  a  [        U5      eU$ )z1PMI - add a label record to a Log Import archive r   rH   )	r)   rS   rD   r   r   rI   rJ   ÚpmiPutLabelr   )r!   r¶   r¸   rŒ   r~   r¹   rZ   s          r#   r¼   ÚpmiLogImport.pmiPutLabel¨  s“   € ä×,Ñ,¨T¯Y©YÓ7ˆØ�A‹:Ü˜“.Ð Ü˜$¤×&Ñ&Ø—;‘;˜wÓ'ˆDÜ˜'¤5×)Ñ)Ø—n‘n WÓ-ˆGÜ×*Ñ*¨3°t¼XÀd»^ÌXÐV]ÓM^Ó_ˆØ�A‹:Ü˜“.Ð Øˆr%   c                  ó,   • [         R                  5         g)z8PMI - dump the current Log Import contexts (diagnostic) N)r)   ÚpmiDump© r%   r#   r¿   ÚpmiLogImport.pmiDump¶  s   € ô 	×ÑÕr%   c                 ó¾   • [         R                  U R                  5      nUS:  a  [        U5      e[         R	                  5       nSU l        US:  a  [        U5      eU$ )z<PMI - close current context and finish a Log Import archive r   rR   )r)   rS   rD   r   rT   r§   s     r#   rT   ÚpmiLogImport.pmiEnd»  sR   € ä×,Ñ,¨T¯Y©YÓ7ˆØ�A‹:Ü˜“.Ð Ü×%Ñ%Ó'ˆØˆŒ	Ø�A‹:Ü˜“.Ð Øˆr%   )rD   rL   r@   )r   r1   )#r5   r6   r7   r8   r9   rA   rE   ÚpropertyrN   Úctxr   rU   rX   r]   rb   Ústaticmethodrg   rm   rp   rt   r}   r†   r‹   r�   r“   r˜   r£   r¦   r®   r²   rµ   r¼   r¿   rT   r:   rÀ   r%   r#   r=   r=   ±   só   † ñòòñ �I˜t T¨4Ó0€DÙ
�8˜T 4¨Ó
.€Cô
$òò
òòð ñ:ó ð:ð ñ9ó ð9ð ñ6ó ð6ð ñLó ðLòò
òò(ò"
òôò&òòò
òð ñ ó ð õ	r%   r=   )7r9   Ú	pcp.pmapir   r   r   r   r   Úcpmir   r	   Úctypesr
   r   r   r   r   r   r   r   Úctypes.utilr   r   Úmathr   r)   r¿   ÚrestypeÚargtypesrg   rm   rp   rt   r*   rM   rS   rT   rX   r]   rb   r}   r†   r‹   r�   r“   r    r˜   r±   r«   r¦   rµ   r¼   Ú	Exceptionr   Úobjectr=   rÀ   r%   r#   Ú<module>rÐ      s†  ðñ0÷f HÕ Gß 0ß 6Ó 6ß <Ó <Ý $Ý Ý ñ ‘\ ,Ó/Ó0€ð
 !%€× Ñ Ô Ø!%€× Ñ Ô à"€× Ñ Ô Ø % u¨eÐ4€× Ñ Ô à#'€× Ñ Ô  Ø%*¨E N€× Ñ Ô !à!(€× Ñ Ô Ø#(¨% .€× Ñ Ô à!(€× Ñ Ô àˆu�eØˆu�eð#€× Ñ Ô ð %-€× Ñ Ô !Ø&+¨X°uÐ%=€× Ñ Ô "à!&€× Ñ Ô Ø#+¨UÐ"3€× Ñ Ô à&+€× Ñ Ô #Ø(- w€× Ñ Ô $à$€× Ñ Ô Ø $€× Ñ Ô à',€× Ñ Ô $Ø)1¨
€× Ñ Ô %à',€× Ñ Ô $Ø)1¨
€× Ñ Ô %à&+€× Ñ Ô #Ø(- w€× Ñ Ô $à%*€× Ñ Ô "à�$˜˜w¨¨wð'8€× Ñ Ô #ð (-€× Ñ Ô $Ø)0°(¸EÐ(B€× Ñ Ô %à$)€× Ñ Ô !Ø&.°¸(Ð%C€× Ñ Ô "à%*€× Ñ Ô "Ø'/°Ð&:€× Ñ Ô #à*/€× Ñ Ô 'Ø,1°8Ð+<€× Ñ Ô (à"'€× Ñ Ô Ø$.°Ð#6€× Ñ Ô  à(-€× Ñ Ô %Ø*4°eÐ)<€× Ñ Ô &à,1€× !Ñ !Ô )Ù.5°oÓ.FÐ-G€× !Ñ !Ô *à%*€× Ñ Ô "Ù'.¨xÓ'8Ð&9€× Ñ Ô #à#(€× Ñ Ô  Ø$(€× Ñ Ô !à#(€× Ñ Ô  Ø%+¨V°V¸XÐ$F€× Ñ Ô !à$)€× Ñ Ô !Ø&,¨f°f¸hÈÐ%Q€× Ñ Ô "ôˆYô ô@S�6õ Sr%   