+
    –°³jÔr  ã            
       ó¾	  € ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	H
t
 ^ RIHt ^ RIHt ]
! R4      t. RMOtRNR lt]R	 4       tROR
 ltR tR tRPR ltR t]3R lt]3R lt]3R ltR t ! R R4      tR tR tRQtR]! ]4       R2t R t!R t"Rt#R t$R t%RRR lt&R t'RPR  lt(RPR! R" llt)]*R#8X  Ed   ^ RI+t]PX                  P[                  ]PX                  P]                  ]/4      4      t0]0]PX                  9   d   ]PX                  Pc                  ]04       ^ RI2t2R$t3R%]3 2t4]2Pj                  ! R&]3 2R'7      t6]6Po                  R(R)7      t8R* t9R+t:]8Pw                  R,]:R'7      t<]<P{                  R-]4R.7       R/t:]8Pw                  R0]:R'7      t>]>P{                  R-]4R.7       R1t:]8Pw                  R]:R'7      t?]?P{                  R-]4R.7       ]9! ]?4       R2t:]8Pw                  R]:R'7      t@]@P{                  R-]4R.7       ]9! ]@4       R3t:]8Pw                  R]:R'7      tA]AP{                  R4]4R.7       ]AP{                  R5]4R.7       ]9! ]A4       RStB]B F’  w  tCt:]8Pw                  ]C]:R'7      tD]DP{                  R-]4R.7       R8tE]DP{                  R9R:]FR]ER;7       R<tE]DP{                  R=R>R?]ER@7       ]CR68X  g   Kd  RAtE]DP{                  RBRCRD]ERE7       RFtE]DP{                  RGRHRD]ERE7       K”  	  ]6P�                  4       tHRI tIRJ tJ]HP–                  R8X  d.   ]I! ]HP˜                  4      tM]J! ]HPœ                  ]! ]M4      4       R# ]HP–                  R8X  d.   ]I! ]HP˜                  4      tM]J! ]HPœ                  ]! ]M4      4       R# ]HP–                  R,8X  d#   ]I! ]HP˜                  4      tM]O! ]!! ]M4      4       R# ]HP–                  R08X  d#   ]I! ]HP˜                  4      tM]O! ]"! ]M4      4       R# ]HP–                  R8X  dA   ]I! ]HP                   4      tP]I! ]HP¢                  4      tQ]J! ]HPœ                  ]! ]P]Q4      4       R# ]HP–                  R68X  dP   ]I! ]HP˜                  4      tM]J! ]HPœ                  ]&! ]M]HP¤                  ]HP0                  ]HP¦                  RK7      4       R# ]HP–                  R78X  d:   ]I! ]HP˜                  4      tM]J! ]HPœ                  ])! ]M]HP¤                  RL7      4       R# R# R# )Té    N)Ú	lru_cache)Úgroupby©ÚAnyÚsegmentsÚmemoryÚcomparec                 óŒ   € V R ,          pV R,          pV'       g   VP                  R4      R,          pV R,          pV RV RV 2# )ÚlineÚfilenameÚ/ÚnameÚ:éÿÿÿÿ)Úsplit)ÚfÚfull_filenameÚiÚfnameÚfuncs   &&   ÚW/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/cuda/_memory_viz.pyÚ
_frame_fmtr      sJ   € Ø	ˆ&�	€AØˆj�M€EßØ—‘˜CÓ  Õ$ˆØˆV�9€DØˆW�A�a�S˜˜$˜Ð Ð ó    c                 ó^   € . ROp. ROpV F  pW@9   g   K   R# 	  V F  pWA9   g   K   R# 	  R# )úunwind::unwindFT)r   zCapturedTraceback::gatherÚgather_with_cppÚ_startÚ__libc_start_mainÚPyEval_Ú	PyObject_ÚPyFunction_)
zcore/boxingz	/Registerz/Redispatchzpythonrun.czModules/main.czObjects/call.czObjects/methodobject.czpycore_ceval.hzceval.czcpython/abstract.h© )r   r   Úomit_functionsÚomit_filenamesÚofs   &&   r   Ú_frame_filterr&      s=   € ò	€Nò€Nó ˆØŽ:Úñ ó ˆØŽ>Úñ ñ r   c                 ó¬   € V'       d   \        V 4      p V  Uu. uF0  p\        VR ,          VR,          4      '       g   K%  \        W14      NK2  	  up# u upi )r   r   )Úreversedr&   r   )Úframesr   Úreverser   s   &&& r   Ú_frames_fmtr+   ?   sO   € ßÜ˜&Ó!ˆñ óáˆAÜ˜˜6� A j¥M×2ô 	%Œ
�1Ö$Ùñð ùò s
   ˜"A¿Ac                 óÀ   € R V 9   d;   V R ,          ^ ,          P                  R. 4      pV R ,          ^ ,          R,          pW3# V P                  RV R,          4      p. pW3# )Úhistoryr)   Ú	real_sizeÚrequested_sizeÚsize)Úget)Úbr)   r.   s   &  r   Ú_block_extra_legacyr3   I   se   € Ø�A„~Ø�9•˜a•×$Ñ$ X¨rÓ2ˆØ�i•L •O KÕ0ˆ	ð ÐÐð —E‘EÐ*¨A¨f­IÓ6ˆ	ØˆØÐÐr   c                 óJ   € R V 9  d   \        V 4      # V R ,          V R,          3# )r)   r/   )r3   )r2   s   &r   Ú_block_extrar5   S   s*   € Ø�qÔä" 1Ó%Ð%ØˆX�;˜Ð*Õ+Ð+Ð+r   c                 ó¨  € Vf=   \         P                  P                  R4      p\         P                  ! VRR7       V R2p\         P                  P	                  V4      '       gî   ^ R Ip^ R Ip\        RV 24       TP                  R\         P                  P                  V4      ;'       g    R R7      w  rV\         P                  ! V4        VP                  P                  RV4       \         P                  ! VR	4       \         P                  ! Wa4       \         P                  P	                  V4      '       d   \         P                  ! V4       VR
R.p\         P"                  ! V\         P$                  \         P$                  RR7      ;_uu_ 4       pVP&                  f   \)        R4      hVP*                  f   \)        R4      hVP&                  P-                  V 4       VP&                  P                  4        VP*                  P/                  4       p	VP*                  P                  4        VP1                  4        VP1                  4       ^ 8w  d   \)        RVP1                  4        24      hV	uuR R R 4       #   \         P                  P	                  T4      '       d   \         P                  ! T4       i i ; i  + '       g   i     R # ; i)Nz	~/.cache/T)Úexist_okz/flamegraph.plzDownloading flamegraph.pl to: z.pl)ÚsuffixÚdirzNhttps://raw.githubusercontent.com/brendangregg/FlameGraph/master/flamegraph.plií  z--countnameÚbytesúutf-8)ÚstdinÚstdoutÚencodingzp.stdin is Nonezp.stdout is Nonez$flamegraph process exited with code )ÚosÚpathÚ
expanduserÚmakedirsÚexistsÚtempfileÚurllib.requestÚprintÚmkstempÚdirnameÚcloseÚrequestÚurlretrieveÚchmodÚreplaceÚremoveÚ
subprocessÚPopenÚPIPEr<   ÚAssertionErrorr=   ÚwriteÚreadÚwait)
Úflamegraph_linesÚflamegraph_scriptÚ	cache_dirrD   ÚurllibÚfdÚtmp_nameÚargsÚpÚresults
   &&        r   Úformat_flamegraphr_   Z   s	  € ØÒ Ü—G‘G×&Ñ& {Ó3ˆ	Ü
�Š�I¨Õ-Ø(˜k¨Ð8ÐÜ�7‰7�>‰>Ð+×,Ò,ÛÛäÐ.Ð/@Ð.AÐBÔCð  ×'Ñ'ØœbŸg™gŸo™oÐ.?Ó@×HÐHÀDð (ó 
‰ˆô 	�Š�Œð		$Ø�N‰N×&Ñ&Ø`Øôô �HŠH�X˜uÔ%Ü�JŠJ�xÔ3ä�w‰w�~‰~˜h×'Ò'Ü—	’	˜(Ô#Ø˜}¨gÐ6€DÜ	×	Ò	Ø”J—O‘O¬J¯O©OÀg÷
õ 
à	
Ø�7‰7Š?Ü Ð!2Ó3Ð3Ø�8‰8ÒÜ Ð!3Ó4Ð4Ø	�‰�‰Ð&Ô'Ø	�‰�‰ŒØ—‘—‘“ˆØ	�‰�‰ÔØ	�‰ŒØ�6‰6‹8�qŒ=Ü Ð#GÈÏÉËÀzÐ!RÓSÐSØ÷
ò 
øô �w‰w�~‰~˜h×'Ò'Ü—	’	˜(Õ#ð (ú÷
÷ 
ð 
ús   ÃA	I? ÆCK É?>J=Ë K	c                 ó  € R  pV Fý  pRV9  d9   \        V4      w  rVV P                  V RVR,           RV! V4       RV R24       M€^ pVR,           Fq  pVR,          pWh,          pRV9   d6   VR,          pV P                  V RVR,           RV! V4       RV R24       KP  V P                  V RVR,           RV R24       Ks  	  VR	,          V,
          p	V	'       g   KÜ  V P                  V RVR,           R
V	 R24       Kÿ  	  R# )c                 óN   € V '       g   R # RP                  \        V RR7      4      # )z<non-python>Ú;T)r*   )Újoinr+   )r)   s   &r   Úframes_fragmentÚ&_write_blocks.<locals>.frames_fragment‹   s   € ßÙ!Ø�x‰xœ F°DÔ9Ó:Ð:r   r-   rb   ÚstateÚ Ú
r.   r)   z;<no-context> r0   z;<gaps> N)r5   rS   )
r   ÚprefixÚblocksrd   r2   r)   Úaccounted_for_sizeÚhÚszÚgapss
   &&&       r   Ú_write_blocksro   Š   s"  € ò;ó
 ˆØ˜AÔÜ)5°a«Ñ&ˆFØ�G‰GØ�(˜!˜A˜g�J˜< q©¸Ó)@Ð(AÀÐCUÐBVÐVXÐYõð "#ÐØ�y—\�\�Ø�{•^�Ø"Õ(Ð"Ø˜q”=Ø˜x�[�FØ—G‘G˜v˜h a¨¨'­
 |°1±_ÀVÓ5LÐ4MÈQÈrÈdÐRTÐUÖVà—G‘G˜v˜h a¨¨'­
 |°>À"ÀÀRÐHÖIñ "ð ��yÐ-Õ-ˆß‰4Ø�G‰G�v�h˜a  '¥
˜|¨8°D°6¸Ð<Ö=ó% r   c                 óÊ   € \         P                  ! 4       pV R ,           F,  pRVR,           RVR,           2p\        W$VR,          4       K.  	  V! VP                  4       4      # )r   Ústream_Ústreamú;seg_Úaddressrj   ©ÚioÚStringIOro   Úgetvalue©Úsnapshotr_   r   Úsegri   s   &&   r   r   r   ¥   s[   € Ü
�Š‹€AØ˜
×#Ð#ˆØ˜3˜x�=˜/¨¨s°9­~Ð.>Ð?ˆÜ�a  X¥Ö/ñ $ñ ˜QŸZ™Z›\Ó*Ð*r   c                 ó¶   € \         P                  ! 4       pV R ,           F"  pRVR,           2p\        W$VR,          4       K$  	  V! VP                  4       4      # )r   rq   rr   rj   ru   ry   s   &&   r   r   r   ­   sP   € Ü
�Š‹€AØ˜
×#Ð#ˆØ˜3˜x�=˜/Ð*ˆÜ�a  X¥Ö/ñ $ñ ˜QŸZ™Z›\Ó*Ð*r   c           	      ó\  € R  pR p\         P                  ! 4       pV  Uu0 uF
  qc! V4      kK  	  ppV Uu0 uF
  qc! V4      kK  	  pp\        RWx,
           U	U
u. uF  w  ršV	NK	  	  up
p	 24       \        RW‡,
           U	U
u. uF  w  ršV	NK	  	  up
p	 24       V  F/  pV! V4      V9  g   K  \        VRV! V4       2VR,          4       K1  	  V F/  pV! V4      V9  g   K  \        VRV! V4       2VR,          4       K1  	  V! VP	                  4       4      # u upi u upi u up
p	i u up
p	i )c                 ó&   € V R ,          V R,          3# )rt   Ú
total_sizer"   ©r{   s   &r   Ú_seg_keyÚcompare.<locals>._seg_key¶   s   € Ø�I•  LÕ 1Ð2Ð2r   c                 ó.   € R V R,           RV R,           2# )rq   rr   rs   rt   r"   r€   s   &r   Ú	_seg_infoÚcompare.<locals>._seg_info¹   s   € Ø˜˜X�˜ u¨S°­^Ð,<Ð=Ð=r   zonly_before = zonly_after = zonly_before;rj   zonly_after;)rv   rw   rF   ro   rx   )ÚbeforeÚafterr_   r�   r„   r   r{   Úbefore_segsÚ
after_segsÚaÚ_s   &&&        r   r	   r	   µ   s  € ò3ò>ô 	�Š‹€Aá,2Ó3©F S�8˜C–=©F€KÐ3Ù+0Ó1©5 C�(˜3–-©5€JÐ1ä	ˆN¨;Ö+CÔEÑ+C¡$ !›AÑ+CÒEÐFÐ
GÔHÜ	ˆM¨*Ö*BÔDÑ*B¡ ›1Ñ*BÒDÐEÐ
FÔGãˆÙ�C‹= 
Ö*Ü˜!˜|©I°c«NÐ+;Ð<¸cÀ(½mÖLñ ó ˆÙ�C‹= Ö+Ü˜!˜{©9°S«>Ð*:Ð;¸SÀ½]ÖKñ ñ ˜QŸZ™Z›\Ó*Ð*ùò 4ùÚ1ùãEùÛDs    D¶DÁD"ÂD(c                 óf   € R F&  p\        V 4      R8  d   V R V R2u # V R,          p K(  	  V R R2# )Ú g      �@z3.1fÚBú.1fÚYiB)r�   ÚKiÚMiÚGiÚTiÚPiÚEiÚZi)Úabs)ÚnumÚunits   & r   Ú_format_sizer›   Ï   sD   € ã>ˆÜˆs‹8�fÔØ˜$�Z ˜v QÐ'Ò'Øˆv�Šñ ?ð �#ˆY�cˆ?Ðr   c                   ó2   a € ] tR t^Øt o R tR tR tRtV tR# )ÚBytesc                ó   € Wn         R # ©N©Úvalue)Úselfr¡   s   &&r   Ú__init__ÚBytes.__init__Ù   s   € ØŽ
r   c                ó:   € \        V P                  V,           4      # rŸ   )r�   r¡   )r¢   Úrhss   &&r   Ú__add__ÚBytes.__add__Ü   s   € Ü�T—Z‘Z #Õ%Ó&Ð&r   c                ó,   € \        V P                  4      # rŸ   )r›   r¡   )r¢   s   &r   Ú__repr__ÚBytes.__repr__ß   s   € Ü˜DŸJ™JÓ'Ð'r   r    N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r£   r§   rª   Ú__static_attributes__Ú__classdictcell__)Ú__classdict__s   @r   r�   r�   Ø   s   ø‡ € òò'÷(ð (r   r�   c                 ó4   € \        R  V R,           4       4      # )c              3   óR   "  € T F  qR ,          R8X  g   K  VR,          x € K  	  R# 5i)rf   Úactive_allocatedr0   Nr"   )Ú.0r2   s   & r   Ú	<genexpr>Úcalc_active.<locals>.<genexpr>ä   s"   é € ÐT¡-˜Q°Wµ:ÐASÑ3SŒyˆq��yŠy£-ùs   ‚'–'rj   )Úsumr€   s   &r   Úcalc_activerº   ã   s   € ÜÑT # h¦-ÓTÓTÐTr   c                 ón   € W,           pR pV^ 8w  d   W,          ^d,          pRVR R2p\        V4       V 2# )r�   z (r�   z% internal))r�   )Úfree_externalÚfree_internalÚtotalr8   Úpcts   &&   r   Ú_report_freerÀ   ç   sF   € ØÕ)€EØ€FØ�„zØÕ$¨Õ+ˆØ�c˜#�Y˜kÐ*ˆÜ�E‹lˆ^˜F˜8Ð$Ð$r   zC
Legend:
    [a     ] - a segment in the allocator
     ^-- a page aU   of memory in the segment
    a-z: pages filled with a single block's content
    ' ': page is completely free
    *: page if completely full with multiple blocks
    0-9: page is partially full with tensors of multiple blocks (9 == 90% full)
    (X% internal) - of the free memory, X% is free because we rounded the size of the allocation.
c                ón  € \         P                  ! 4       pVP                  R\        \        4       R24       ^ p^ p^ p^ p\        V R,          R R7       EF  pW&R,          ,          p^ p^ p^ p	. p
^ pVR,           Ft  pVR,          R	8H  pV'       d@   \        V4      w  rïV
P                  W¿R
34       WŸ,          p	WŒR,          V,
          ,          pMW|R,          ,          pW¼R,          ,          pKv  	  W9,          pWG,          pWX,          pVR,          ^,
          \        ,          ^,           p\        V4       Uu. uF  pRNK  	  pp\        V4       Uu. uF  pRNK  	  pp^ p\        V
4       EF  w  pw  pppVV,          pVV,           pV\        ,          pV^,
          \        ,          ^,           p\        \        V'       d   RMR4      V^,          ,           4      p\        VV4       F—  p\        VV\        ,          4      p\        VV^,           \        ,          4      pVV;;,          VV,
          \        ,          ,          uu&   VV,          R8w  d&   R\        VV,          ^
,          4      ,          VV&   K’  VVV&   K™  	  EK  	  VR,          ^ 8X  d   RMRVR,           2pRP                  V4      pWx,           V	,           VR,          8w  d   \!        RV RV RV	 RVR,           24      hVR,          ^ 8w  d   RVR,           2MRpVR,          \        8¼  g   EKÍ  VP                  RV R\        VR,          4       R\#        Wx4       RV R2	4       EK  	  VP                  R\%        V R,          4       R24       VP                  R\        V4       R24       VP                  R\        V4       R24       VP                  R \#        WE4       R24       VP                  \&        4       WT,           V,           V8w  d   \!        R!V RV RV RV 24      hVP)                  4       # u upi u upi )"aÙ  Visually reports how the allocator has filled its segments.

This printout can help debug fragmentation issues since free fragments
will appear as gaps in this printout.  The amount of free space is reported
for each segment.
We distinguish between internal free memory which occurs because the
allocator rounds the allocation size, and external free memory, which are
the gaps between allocations in a segment.
Args:
    data: snapshot dictionary created from _snapshot()
zSummary of segments >= z	 in size
r   c                 ó*   € V R ,          \        V 4      3# )r   )rº   )Úxs   &r   Ú<lambda>Úsegsum.<locals>.<lambda>  s   € ¨¨<­¼+Àa».Ñ(Ir   ©Úkeyr   rj   rf   rµ   Tr0   rg   g        rŠ   ÚAz0123456789*rr   r�   z	, stream_zSegment size mismatch: z + z != z stream_Ú[z] z allocated, z freerh   z
segments: ztotal_reserved: ztotal_allocated: ztotal_free: zMemory accounting error: )rv   rw   rS   r�   Ú	PAGE_SIZEÚsortedr5   ÚappendÚrangeÚ	enumerateÚchrÚordÚmaxÚminÚintrc   rR   rÀ   ÚlenÚlegendrx   ) ÚdataÚoutÚtotal_reservedÚtotal_allocatedr¼   r½   r{   Úseg_free_externalÚseg_free_internalÚseg_allocatedÚ
all_rangesÚboffsetr2   Úactiver‹   Úallocated_sizeÚnsegÚoccupiedÚfracÚactive_sizer   Ústart_r0   Úfinish_ÚstartÚfinishÚmÚjÚsÚerr   Úbodys    &                               r   Úsegsumrî   þ   s  € ô �+Š+‹-€CØ‡I�IÐ'¬¬iÓ(8Ð'9¸ÐDÔEØ€NØ€OØ€MØ€MÜØˆZÕÑI÷ð ˆð 	˜lÕ+Õ+ˆàÐØÐØˆØˆ
ØˆØ�X—�ˆAØ�w•ZÐ#5Ñ5ˆFßÜ$0°£OÑ!�Ø×!Ñ! 7¸DÐ"AÔBØÕ/�Ø! v¥Y°Õ%?Õ?Ñ!à! v¥YÕ.Ð!à˜•yÕ ŠGñ ð 	Õ(ˆØÕ*ˆØÕ*ˆà�LÕ! AÕ%¬)Õ3°aÕ7ˆÜ!& t¤Ó-¡˜A“C¡ˆÐ-Ü" 4œ[Ó)™[˜“™[ˆÐ)ØˆÜ)2°:×)>Ñ%ˆAÑ%�˜˜fØ˜4ÕˆKØ˜t•mˆGØœiÕ'ˆEØ •k¤iÕ/°!Õ3ˆFÜ”CŸv™¨3Ó/°1°rµ6Õ:Ó;ˆAÜ˜5 &Ö)�Ü˜ ¤I¥Ó.�Ü˜ ! a¥%¬9Õ!4Ó5�Ø�Q—˜A �E¤YÕ.Õ.“Ø˜A•; #Ô%Ø"/´°D¸µG¸bµLÓ0AÕ"B�H˜Q“Kà"#�H˜Q“Kô *ñ *?ð ˜8•}¨Ô)‘°¸3¸x½=¸/Ð/JˆØ�w‰w�xÓ ˆØÕ0°=Õ@ÀCÈÕDUÔUÜ Ø)Ð*;Ð)<¸CÐ@QÐ?RÐRUÐVcÐUdÐdhÐilÐmyÕizÐh{Ð|óð ð 03°8­}ÀÔ/A�8˜C �M˜?Ñ+ÀrˆØˆ|Õ¤	×)Ø�I‰IØ�D�6˜œE # lÕ"3Ó4Ð5°\ÜÐ 1ÓEÐFÀeÈFÈ8ÐSUðW÷ñiðp ‡I�I�
œ3˜t JÕ/Ó0Ð1°Ð4Ô5Ø‡I�IÐ ¤ ~Ó!6Ð 7°rÐ:Ô;Ø‡I�IÐ!¤%¨Ó"8Ð!9¸Ð<Ô=Ø‡I�I�œ\¨-ÓGÐHÈÐKÔLØ‡I�IŒfÔØÕ$ Õ6¸.ÔHÜØ'¨ °c¸-¸ÈÈOÐK\Ð\`ÐaoÐ`pÐqó
ð 	
ð �<‰<‹>ÐùòM .ùÚ)s   Ä:P-ÅP2c                 óâ   a a€ \         P                  ! 4       oV V3R  lp\        S R,          4       F,  w  r#V'       g   K  SP                  RV R24       V! V4       K.  	  SP	                  4       # )c                 óÎ  <aaa€ . o/ p/ p. o^ oVV3R lpVV3R lp^ pSP                  \        V 4       R24       ^ pSR,           F  pWgR,          ,          pK  	  \        V 4       EFÛ  w  rXVR,          R8X  dj   VR,          VR	,          r©V! 4       pV! V	4      w  rÍVf   RpT	pMW�,
          pSP                  V RV RV R\        V
4       R24       WºV3W)&   WZ,          pK}  VR,          R8X  dM   VR,          VR	,          r©VP	                  W™R
R
34      w  p pSP                  RV R\        V
4       R24       K×  VR,          R8X  dr   VR,          VR	,          r©WZ,          pVP	                  W™R
R
34      w  p pSP                  RV R\        V
4       R24       Wò9   d   SP                  V4       W/ EKS  EKV  VR,          R8X  dV   VR,          VR	,          r©V! 4       pSP                  V RV	 R\        V
4       R24       SP                  WùV
34       WñV	&   EK¹  VR,          R8X  dc   VR,          VR	,          r©VP	                  W™4      pSP                  RV R\        V
4       R24       Wñ9   d   SP                  V4       W EK&  EK)  VR,          R8X  d@   VR	,          p
VR,          pSP                  R \        V
4       R!\        V4       R"24       EKv  VR,          R#8X  dD   VR,          p	VP	                  W™R
R
34      w  p pSP                  R$V R%VR&,           R24       EKÇ  SP                  V R24       EKÞ  	  SP                  R'\        V4       24       R
# )(r   c                  ó¼   <€ S'       d   SP                  4       # S^,          S^,          rS^,          o\        \        R4      V,           4       V ^ 8X  d   R 2# T  2# )é   rŠ   r�   )ÚpoprÏ   rÐ   )Úrré   Ú
free_namesÚ	next_names     €€r   Ú_nameÚ$trace.<locals>.format.<locals>._name_  sZ   ø€ çØ!—~‘~Ó'Ð'Ø •? I°¥NˆqØ˜�NˆIÜœ#˜c›( Q�,Ó'Ð(¨q°A¬v¨Ð(=Ð>Ð>¸1Ð(=Ð>Ð>r   c                 óê   <€ S F   w  rpW8¼  g   K  WV,           8  g   K  W3u # 	  \        SR ,          4       F5  w  rEVR,          pVR,          pW8¼  g   K  WV,           8  g   K.  RV 2V3u # 	  R# )r   rt   rà   Úseg_)NN)rÎ   )Úaddrr   Úsaddrr0   r   r{   rÖ   Úsegment_intervalss   &     €€r   Úfind_segmentÚ+trace.<locals>.format.<locals>.find_segmentg  s{   ø€ Û%6Ñ!�˜TØ–= T°D­LÖ%8Ø˜;Ò&ñ &7ô $ D¨Õ$4Ö5‘�Ø˜I��ØÐ+Õ,�Ø–= T°D­LÖ%8Ø! ! ˜: uÐ,Ò,ñ	 6ð
 Ðr   z	 entries
r   r   ÚactionÚallocrû   r0   NÚMEMz = rÉ   r   z]
Úfree_requestedzdel z # rh   Úfree_completedz# free completed for rg   Úsegment_allocz = cudaMalloc(z, z)
Úsegment_freez	cudaFree(z) # ÚoomÚdevice_freezraise OutOfMemoryError # z requested, z free in CUDA
Úannotatez# annotate z: Úuser_metadatazTOTAL MEM: )rS   rÔ   rÎ   r�   r1   rÌ   )ÚentriesÚsegment_addr_to_nameÚallocation_addr_to_namer÷   rþ   ÚcountrØ   r{   rì   rû   r0   ÚnÚseg_nameÚseg_addrÚoffsetr   r‹   Úfreerõ   rö   rý   rÖ   r×   s   &                 @@@€€r   ÚformatÚtrace.<locals>.formatW  sn  û€ Ø"$ÐØ!ÐØ"$Ðàˆ
Øˆ	ö	?ö		ð ˆØ�	‰	”S˜“\�N *Ð-Ô.àˆØ˜
×#Ð#ˆCØ ,Õ/Õ/ŠNñ $ô " '×*‰HˆEØ��{˜gÔ%Ø˜v�Y¨¨&­	�dÙ“G�Ù%1°$Ó%7Ñ"�ØÒ#Ø$�HØ!‘Fà!�_�FØ—	‘	˜Q˜C˜s 8 *¨A¨f¨X°Q´u¸T³{°mÀ3ÐGÔHØ12¸%Ð0@Ð'Ñ-Ø•’Ø�8•Ð 0Ô0Ø˜v�Y¨¨&­	�dØ4×8Ñ8¸ÀdÈDÐ?QÓR‘
��a˜Ø—	‘	˜D   c¬%°«+¨°bÐ9Ö:Ø�8•Ð 0Ô0Ø˜v�Y¨¨&­	�dØ•�Ø4×8Ñ8¸ÀdÈDÐ?QÓR‘
��a˜Ø—	‘	Ð1°$°°q¼¸t»¸ÀRÐHÔIØÔ2Ø×%Ñ% dÔ+Ø/Ó5ò 3ð �8• Ô/Ø˜v�Y¨¨&­	�dÙ“w�Ø—	‘	˜T˜F .°°°b¼¸t»¸ÀSÐIÔJØ!×(Ñ(¨$°dÐ);Ô<Ø-1 TÔ*Ø�8• Ô.Ø˜v�Y¨¨&­	�dØ+×/Ñ/°Ó;�Ø—	‘	˜I d V¨4´°d³¨}¸BÐ?Ô@ØÔ/Ø×%Ñ% dÔ+Ø,Ó2ò 0ð �8• Ô%Ø˜•y�Ø˜Õ'�Ø—	‘	Ø/´°d³¨}¸LÌÈtËÈÐUdÐe÷ð �8• 
Ô*Ø˜•y�Ø4×8Ñ8¸ÀdÈDÐ?QÓR‘
��a˜Ø—	‘	˜K¨ v¨R°°/Õ0BÐ/CÀ2ÐF×Gà—	‘	˜Q˜C˜r˜(×#ñc +ðd 	�	‰	�K¤ e£˜~Ð.Ö/r   Údevice_traceszDevice z ----------------
)rv   rw   rÎ   rS   rx   )rÖ   r  r   Údr×   s   f   @r   Útracer  T  s]   ù€ Ü
�+Š+‹-€CöT0ôl ˜$˜Õ/Ö0‰ˆß‰1Ø�I‰I˜ ˜sÐ"5Ð6Ô7Ù�1ŽIñ 1ð �<‰<‹>Ðr   a  
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script type="module">
import {add_local_files} from "https://cdn.jsdelivr.net/gh/pytorch/pytorch@main/torch/utils/viz/MemoryViz.js"
const local_files = $SNAPSHOT
add_local_files(local_files, $VIZ_KIND)
</script>
</body>
c                 óœ  € Ve   \         P                  ! R\        ^R7       \        P                  ! V 4      pVR^\        V4      ^,          ,
          ,          ,          p\        P                  ! V4      P                  R4      p\        P                  ! RRRV/.4      p\        P                  R\        V4      4      P                  R	V4      # )
Nz;device argument is deprecated, plots now contain all device)Ú
stackleveló    r;   r   zsnapshot.pickleÚbase64z	$VIZ_KINDz	$SNAPSHOT)ÚwarningsÚwarnÚFutureWarningÚpickleÚdumpsrÔ   r  Ú	b64encodeÚdecodeÚjsonÚ_memory_viz_templaterM   Úrepr)rÖ   Úviz_kindÚdeviceÚbufferÚencoded_bufferÚjson_formats   &&&   r   Ú_format_vizr,  Ã  s¨   € ØÒÜ�ŠØIÜØõ	
ô
 �\Š\˜$Ó€FØ
ˆg˜œS ›[¨1�_Õ,Õ-Õ-€Fä×%Ò% fÓ-×4Ñ4°WÓ=€Nä—*’*˜vÐ'8¸(ÀNÐSÐTÓU€KÜ×'Ñ'¨´T¸(³^ÓD×LÑLØ�[óð r   c                 ó\  € \        \        V R ,          4      4       EF…  p\        4       p/ p\        4       p\        V R ,          V,          4       EF  w  rVVR,          R8X  d   WSVR,          &   K!  VR,          R8X  d~   VP	                  VR,          4       VP                  VR,          4      eJ   VP	                  V4       VP	                  W6R,          ,          4       VP                  VR,          4       Kª  K¬  VR,          R8X  g   K¼  VR,          V9   d,   VP                  VR,          4       VP	                  V4       Kõ  \        RV 24       EK  	  V'       g   EKF  \        V R ,          V,          4       UUu. uF  w  rVWR9  g   K  VNK  	  uppV R ,          V&   EKˆ  	  V # u uppi )r  r   r  rû   r  r  z'free_completed without free_requested: )	rÍ   rÔ   ÚsetrÎ   Úaddr1   ró   rN   rF   )rÖ   Údev_idÚ	filterSetÚallocMapÚfreeRequestedÚidxÚevents   &      r   Úfilter_alloc_free_pairsr6  Õ  sg  € Üœ˜D Õ1Ó2×3ˆä“Eˆ	àˆä›ˆÜ# D¨Õ$9¸&Õ$A×B‰JˆCØ�X� 'Ô)Ø*-˜˜v�Ó'Ø�x•Ð$4Ô4Ø×!Ñ! %¨¥-Ô0Ø—<‘<  f¥Ó.Ò:Ø—M‘M #Ô&Ø—M‘M (°­=Õ"9Ô:Ø—L‘L  v¥Ö/ñ ;ð �x•Ð$4Ö4Ø˜•= MÔ1Ø!×(Ñ(¨¨v­Ô7Ø—M‘M #Ö&äÐCÀEÀ7ÐK×Lñ C÷" Š9ô #,¨D°Õ,AÀ&Õ,IÔ"Jô-á"J‘J�CØÑ'÷ �Ù"Jò-ˆD�Õ! &Ô)ñ5 4ð@ €Kùó-s   Å>
F(ÆF(c                ó`   € V'       d   \        V 4      p \        T V'       g   RV4      # RV4      # )a¼  Generate a visualization over time of the memory usage recorded by the trace as an html file.

Args:
    data: Memory snapshot as generated from torch.cuda.memory._snapshot()
    device (torch.device, optional): Generate the trace for this device, needed if multiple devices have allocations.
    plot_segments (bool, optional): Plots memory returned from cudaMalloc, rather than individual allocations.
                                    Defaults to False.
    filter_freed (bool, optional): Filter out alloc-free paired events to only plot allocations that are not freed yet.
                                    Defaults to False to plot all trace events.

Returns:
    str: HTML of visualization
úActive Memory TimelinezActive Cached Memory Timeline)r6  r,  )rÖ   r(  Úplot_segmentsÚfilter_freeds   &&&&r   Ú
trace_plotr;  ù  s@   € ÷ Ü& tÓ,ˆäØçð 	!ð 	óð ð -Øóð r   c                 óà  aaaaa€ ^ RI p^ RIHp ^ RIHpHp V P                  4       o/ oSP                  P                   FÃ  pVP                  VP                  8X  g   K   VP                  p. pV'       dG   VP                  VP                  VP                  39   d   VP                  V4       VP                  pKN  VP                  VP                   4      pV'       g   K¡  VP                   P"                  ^ 8”  g   K¾  VSV&   KÅ  	  VP$                  P'                  4       oR\)        S^,           4       U	u. uF  p	. NK  	  up	R\)        S^,           4       U
u. uF  p
RV
RRR^ R	^ R
. /NK  	  up
/oV3R loRVVVV3R llpV3R lp/ pSP*                   F÷  w  rïw  ppp\-        VV4      '       g   K  WóP.                  8X  d   V! VVV4      VVV3&   K?  WóP0                  8X  d-   V! VP3                  VV34      S! VP4                  4      4       K{  WóP6                  8X  dJ   V! VP3                  VV34      S! VP4                  4      4       V! VVV^,           4      VVV^,           3&   KÔ  WóP8                  8X  g   Kæ  V! VVVRR7      VVV3&   Kù  	  VP;                  4        UUUu. uF4  w  w  pppS! VP4                  4      VR,          VR,          VR,          3NK6  	  pppp\=        \?        V4      \@        PB                  ! ^ 4      R7       Fº  w  p
pSR,          V
,          pVR,          pV F[  w  p	pppVV8  d$   VR
,          P                  RVV,
          RR/4       VR
,          P                  RVRRRVRV/4       VV,           pK]  	  VVR,          8  g   K�  VR
,          P                  RVR,          V,
          RR/4       K¼  	  SR,           Uu. uF  pVR
,          '       g   K  VNK  	  upSR&   SR,           FS  pVR;;,          VR,          ,          uu&   VR
,          '       d   K0  VR
,          P                  RVR,          RR/4       KU  	  S# u up	i u up
i u upppi u upi )r   N)Ú
_EventType)ÚActionÚ	TensorKeyr  r   r(  rt   r   rr   rj   c                 óB   <€ V P                   R 8X  d   V P                  # S# )Úcuda)ÚtypeÚindex)r(  Údevice_counts   &€r   Ú	to_deviceÚ'_profile_to_snapshot.<locals>.to_device9  s   ø€ Ø�;‰;˜&Ô Ø—<‘<ÐàÐr   c                 ó:  <€ S! VP                   4      pVP                  P                  pSR ,          V,          pVR,          e   VR,          V8”  d   WVR&   \        VR,          WP,           4      VR&   SP                  P                  W4      pVe   VP                  P                  4       MRpSP                  VR4      pV U	u. uF  p	RRR^ RV	P                  /NK  	  pp	RR	R
VRV R^ RVRV/p
V'       d    SR,          V,          P                  V
4       V
# u up	i )r   rt   r   Úunknownr   Únoner   r   r   r  rû   r0   rr   r)   Úcategoryr  r"   )	r(  ÚstorageÚptrrÑ   Ú_categoriesr1   r   ÚlowerrÌ   )r0   Ú
tensor_keyÚversionÚduring_tracer(  rû   r{   rJ  Ústackr]   rô   Úallocation_stacksÚmemory_profilerz   rE  s   &&&&       €€€€r   ÚallocateÚ&_profile_to_snapshot.<locals>.allocate?  s  ø€ Ù˜:×,Ñ,Ó-ˆØ×!Ñ!×%Ñ%ˆà�zÕ" 6Õ*ˆØˆy�>Ò! S¨¥^°dÔ%:Ø!�	‰NÜØ�Õ˜t�{ó
ˆˆLÑð "×-Ñ-×1Ñ1°*ÓFˆØ,4Ò,@�8—=‘=×&Ñ&Ô(ÀiˆØ!×%Ñ% j°"Ó5ˆÙJOÓPÉ%ÀQ�*˜f f¨a°¸¿¹Ó@É%ˆÐPà�gØ�DØ�DØ�aØ�eØ˜ð
ˆ÷ Ø�_Õ% fÕ-×4Ñ4°QÔ7Øˆùò Qs   ÃDc                 ó–   <€ R FA  pSR,          V,          P                  RVRV R,          RV R,          R^ RV R,          /4       KC  	  R# )	r  r  r   rû   r0   rr   r)   N)r  r  )rÌ   )r  r(  rì   rz   s   && €r   r  Ú"_profile_to_snapshot.<locals>.freeY  sO   ø€ Û5ˆAØ�_Õ% fÕ-×4Ñ4à˜aØ˜E &�MØ˜E &�MØ˜aØ˜e H�oðöó 6r   F)rQ  rû   r0   r)   rÆ   rf   Úinactiverµ   r/   )T)"ÚtorchÚtorch._C._profilerr=  Útorch.profiler._memory_profilerr>  r?  Ú_memory_profileÚ_op_treeÚsorted_nodesÚtagÚ
AllocationÚparentÚPyCallÚPyCCallrÌ   Úfrom_allocationÚextra_fieldsÚ
alloc_sizerA  rD  rÍ   ÚtimelineÚ
isinstanceÚCREATEÚDESTROYró   r(  ÚINCREMENT_VERSIONÚPREEXISTINGÚitemsr   rË   ÚoperatorÚ
itemgetter)ÚprofilerZ  r=  r>  r?  r5  rb  Úpython_parentsrÇ   r‹   r(  rU  r  Ú
kv_to_elemÚ_timer   rO  rP  r0   Úblocks_at_endrj   r{   Ú	last_addrrû   r)   rS  rD  rT  rz   rE  s   &                        @@@@@r   Ú_profile_to_snapshotrw    s;  ü€ ÛÝ-ßAà×,Ñ,Ó.€NàÐØ×(Ñ(×5Ô5ˆØ�9‰9˜
×-Ñ-Ö-Ø—\‘\ˆFØˆNßØ—:‘: *×"3Ñ"3°Z×5GÑ5GÐ!HÔHØ"×)Ñ)¨&Ô1ØŸ™’Ø×+Ñ+¨E×,>Ñ,>Ó?ˆC÷ ‰s�u×)Ñ)×4Ñ4°qÖ8Ø)7Ð! #Ó&ñ 6ð —:‘:×*Ñ*Ó,€Là¤e¨L¸1Õ,<Ô&=Ó>Ñ&= ›"Ñ&=Ñ>Øô   ¨qÕ 0Ô1ó	
ñ 2�ð ˜&Ø˜4Ø˜aØ˜!Ø˜"óñ 2ñ	
ð&€Hõ ÷ò õ4
ð €Jð 7E×6MÔ6MÑ2ˆÑ,˜
 G¨dÜ˜* i×0Ò0ÙØ—]‘]Ô"Ù08¸¸zÈ7Ó0SˆJ˜
 GÐ,Ó-Ø—~‘~Ô%Ù�—‘ ¨WÐ 5Ó6¹	À*×BSÑBSÓ8TÖUØ×/Ñ/Ô/Ù�—‘ ¨WÐ 5Ó6¹	À*×BSÑBSÓ8TÔUÙ4<Ø�j '¨A¥+ó5ˆJ˜
 G¨a¥KÐ0Ó1ð ×)Ñ)Ö)Ù08Ø�j '¸ô1ˆJ˜
 GÐ,Ó-ñ 7Nð( -7×,<Ñ,<Ô,>õá,>Ñ(Ñ!ˆZ˜ 5ñ 
�:×$Ñ$Ó	% u¨V¥}°e¸FµmÀUÈ8Å_ÓUÙ,>ð ò ô "¤&¨Ó"7¼X×=PÒ=PÐQRÓ=S×T‰ˆ�Ø�zÕ" 6Õ*ˆØ˜	•Nˆ	Û%+Ñ!ˆAˆt�T˜6Ø˜4ÔØ�H•×$Ñ$ f¨d°YÕ.>ÀÈÐ%TÔUØ��M× Ñ à˜DØÐ/Ø$ dØ˜fð	ôð ˜t�ŠIñ &,ð �s˜<Õ(Ö(Ø��M× Ñ Ø˜˜\Õ*¨YÕ6¸ÀÐLöñ! Uð( ,4°JÖ+?ÓQÑ+? CÀ3ÀxÇ=Á=ŸC˜CÑ+?ÑQ€HˆZÑØ˜
×#Ð#ˆØˆL×˜S �^Õ+ÓØ�8�}Ž}Ø��M× Ñ  &¨#¨lÕ*;¸WÀjÐ!QÖRñ $ð
 €OùòY ?ùò	
ùôZùò0 Rs   Ä6QÅQ
Ê%:Q$ÏQ+Ï,Q+c                ó2   € \        V 4      p\        VRV4      # )ae  Generate a visualization over time of the memory usage recorded by kineto memory profiling as an html file.

Args:
    profile: profile as generated by `torch.profiler.profile(profile_memory=True)`
    device (torch.device, optional): Generate the trace for this device, needed if multiple devices have allocations.

Returns:
    str: HTML of visualization
r8  )rw  r,  )rq  r(  rz   s   && r   Úprofile_plotry  ›  s   € ô $ GÓ,€HÜ�xÐ!9¸6ÓBÐBr   c                ó$   € V ^8„  d   QhR\         /# )é   rÖ   r   )r  s   "r   Ú__annotate__r|  ©  s   € ÷ @ñ @”sñ @r   c                 ó   € \        V R V4      # )zAllocator State History)r,  )rÖ   r(  s   &&r   Úsegment_plotr~  ©  s   € Ü�tÐ6¸Ó?Ð?r   Ú__main__ztorch.cuda.memory._snapshot()zpickled memory statistics from z#Visualize memory dumps produced by )Údescriptionr   )Údestc                 ó0   € V P                  R RRRR7       R# )ú-oú--outputz
output.svgz$flamegraph svg (default: output.svg)©ÚdefaultÚhelpN)Úadd_argument)r]   s   &r   Ú_outputr‰  ¾  s   € Ø	�‰ØØØ Ø7ð	 	ö 	
r   zmPrints overall allocation statistics and a visualization of how the allocators segments are currently filled.ÚstatsÚinput)r‡  z`Prints buffer of the most recent allocation events embedded in the snapshot in a Pythonic style.r  zaGenerate a flamegraph that visualizes what memory is stored in each allocator segment (aka block)zNGenerate a flamegraph the program locations contributing to CUDA memory usage.z~Generate a flamegraph that shows segments (aka blocks) that have been added or removed between two different memory snapshots.r†   r‡   r;  r~  z]visualize trace from this device (default: chooses the only device with trace info or errors)z-dz--device)rB  r†  r‡  z4path to save the visualization(default: output.html)rƒ  r„  zoutput.htmlr…  z?visualize change to segments rather than individual allocationsz-sz
--segmentsÚ
store_true)r   r‡  z¢filter out allocation-free pairs to only visualize the allocations that are not freed yet;useful to reduce the number of events for large traces for debugging OOMz-fz--filter_freedc                 ó6  € V R 8X  d0   \         P                  ! \        P                  P                  4      pM3\        V R4      ;_uu_ 4       p\         P                  ! V4      pRRR4       \        X\        4      '       d   RVR. /pV#   + '       g   i     L.; i)Ú-ÚrbNr   Útraces)r   ÚloadÚsysr<   r)  Úopenri  Úlist©r   rÖ   r   s   &  r   Ú_readr–    sk   € Ø�3Œ;Ü—;’;œsŸy™y×/Ñ/Ó0‰Dä�d˜D×!Ô! QÜ—{’{ 1“~�÷ "ä�dœD×!Ò!Ø  h°Ð3ˆDØˆ÷	 "×!ús   ÁBÂB	c                 óŠ   € \        V R 4      ;_uu_ 4       pVP                  V4       RRR4       R#   + '       g   i     R# ; i)ÚwN)r“  rS   r•  s   && r   Ú_writer™    s&   € Ü�$˜�_Œ_ Ø�G‰G�DŒM÷ �_�_Š_ús	   •1±A	)r(  r9  r:  )r(  )r_   r   r   r	   )F)FFrŸ   i  @)NFF))r;  z]Generate a visualization over time of the memory usage recorded by the trace as an html file.)r~  zfVisualize how allocations are packed into allocator segments at each point in a trace as an html file.)Tr  rv   r$  ro  r?   r   rO   r’  r  Ú	functoolsr   Ú	itertoolsr   Útypingr   ÚcacheÚ__all__r   r&   r+   r3   r5   r_   ro   r   r   r	   r›   r�   rº   rÀ   rÊ   rÕ   rî   r  r%  r,  r6  r;  rw  ry  r~  r¬   Úos.pathr@   ÚrealpathrH   Ú__file__ÚthedirrN   ÚargparseÚfn_nameÚpickledÚArgumentParserÚparserÚadd_subparsersÚ
subparsersr‰  r€  Ú
add_parserÚstats_arˆ  Útrace_aÚ
segments_aÚmemory_aÚ	compare_aÚplotsÚcmdÚtrace_plot_ar‡  rÓ   Ú
parse_argsr\   r–  r™  r   r‹  rÖ   ÚoutputrF   r†   r‡   r(  r:  r"   r   r   Ú<module>rµ     s
  ðã Û 	Û Û Û 	Û Û Û 
Û Ý Ý Ý ñ 	�$‹€â
@€ô!ð ñó ðô@òò,ô-ò`>ð6 *;ô +ð (9ô +ð .?ô +ò4÷(ñ (òUò%ð €	ðñ �yÓ!Ð"ð #ð	

€òSòl]ð@Ð òò$!ôHò4EôPC÷@ð ˆzÕÛà�W‰W×Ñ˜bŸg™gŸo™o¨hÓ7Ó8€FØ�—‘Ôà�‰�‰˜ÔÛà-€GØ/°¨yÐ9€GØ×$Ò$Ø9¸'¸ÐCô€Fð ×&Ñ&¨HÐ&Ó5€Jò
ð B€KØ×#Ñ# G¸Ð#ÓE€GØ×Ñ˜ wÐÔ/àt€KØ×#Ñ# G¸Ð#ÓE€GØ×Ñ˜ wÐÔ/àu€KØ×&Ñ& z¸{Ð&ÓK€JØ×Ñ˜G¨'ÐÔ2ÙˆJÔð 	Yð ð ×$Ñ$ X¸;Ð$ÓG€HØ×Ñ˜'¨ÐÔ0ÙˆHÔð	=ð ð ×%Ñ% i¸[Ð%ÓI€IØ×Ñ˜8¨'ÐÔ2Ø×Ñ˜7¨ÐÔ1ÙˆIÔð	€Eó "Ñˆˆ[Ø!×,Ñ,¨S¸kÐ,ÓJˆØ×!Ñ! '°Ð!Ô8ØnˆØ×!Ñ! $¨
¸ÀdÐQUÐ!ÔVØEˆØ×!Ñ! $¨
¸MÐPTÐ!ÔUØ�,ÖØTˆDØ×%Ñ%Ø�l¨<¸dð &ô ð
[ð ð ×%Ñ%ØÐ&¨|À$ð &ö ñ# "ð* ×ÑÓ€Dòòð ‡{�{�jÔ Ù�T—Z‘ZÓ ˆÙˆt�{‰{™H T›NÖ+Ø	�‰˜Ô	 Ù�T—Z‘ZÓ ˆÙˆt�{‰{™F 4›LÖ)Ø	�‰˜Ô	Ù�T—Z‘ZÓ ˆÙ‰f�T‹lÖØ	�‰˜Ô	Ù�T—Z‘ZÓ ˆÙ‰e�D‹kÖØ	�‰˜	Ô	!Ù�t—{‘{Ó#ˆÙ�d—j‘jÓ!ˆÙˆt�{‰{™G F¨EÓ2Ö3Ø	�‰˜Ô	$Ù�T—Z‘ZÓ ˆÙØ�K‰KÙØØ—{‘{Ø"Ÿm™mØ!×.Ñ.ô	ö	
ð 
�‰˜Ô	&Ù�T—Z‘ZÓ ˆÙˆt�{‰{™L¨°d·k±kÔBÖCñ 
'ñA r   