+
    ‚V@ièm  ã                   óT  a € R t50 t R 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t^ RIt^ RIt^ RIt^ RIHt ^ RIHtHt ^ RIHtHtHtHtHtHtHtHtHtHt ]P<                  '       d	   ^ RIH t H!t!  ! R R]4      t"]]#]"3,          t$]! R4      t%]P<                  '       d	   ] ! R	4      t&]'! 4       t(] ^ k R
 R lt)]PT                  ! ])4        ! R R]4      t+ ! R R]+4      t, ! R R]+4      t-R R lt.R R lt/Rs0R R lt1 ! R R4      t2 ! R R]Pf                  4      t4R# )ak  Bridges between the `asyncio` module and Tornado IOLoop.

.. versionadded:: 3.2

This module integrates Tornado with the ``asyncio`` module introduced
in Python 3.4. This makes it possible to combine the two libraries on
the same event loop.

.. deprecated:: 5.0

   While the code in this module is still used, it is now enabled
   automatically when `asyncio` is available, so applications should
   no longer need to refer to this module directly.

.. note::

   Tornado is designed to use a selector-based event loop. On Windows,
   where a proactor-based event loop has been the default since Python 3.8,
   a selector event loop is emulated by running ``select`` on a separate thread.
   Configuring ``asyncio`` to use a selector event loop may improve performance
   of Tornado (but may reduce performance of other ``asyncio``-based libraries
   in the same process).
N©Úconvert_yielded)ÚIOLoopÚ_Selectable)
ÚAnyÚCallableÚDictÚListÚOptionalÚProtocolÚSetÚTupleÚTypeVarÚUnion)ÚTypeVarTupleÚUnpackc                   ó2   a € ] tR t^9t o V 3R lR ltRtV tR# )Ú
_HasFilenoc                ó    <€ V ^8„  d   QhRS[ /# ©é   Úreturn©Úint)ÚformatÚ__classdict__s   "€Ú:/usr/lib/python3/dist-packages/tornado/platform/asyncio.pyÚ__annotate__Ú_HasFileno.__annotate__:   s   ø€ ÷ ñ ™ñ ó    c                ó   € R # ©N© ©Úselfs   &r   ÚfilenoÚ_HasFileno.fileno:   s   € Ùr   r"   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r%   Ú__static_attributes__Ú__classdictcell__©r   s   @r   r   r   9   s   ø‡ € ÷ö r   r   Ú_TÚ_Tsc                ó   € V ^8„  d   QhRR/# ©r   r   Nr"   )r   s   "r   r   r   I   s   € ÷ ñ ˜$ñ r   c                  ó˜  € \          F‡  p V P                  ;_uu_ 4        R V n        V P                  P                  4        RRR4        V P                  P                  R4       V P                  f   Km  V P                  P                  4        K‰  	  \         P                  4        R#   + '       g   i     Lp; i  \         d     Ldi ; i)TNó   a)
Ú_selector_loopsÚ_select_condÚ_closing_selectorÚnotifyÚ_waker_wÚsendÚBlockingIOErrorÚ_threadÚjoinÚclear)Úloops    r   Ú_atexit_callbackr?   I   s–   € ßˆØ××ÓØ%)ˆDÔ"Ø×Ñ×$Ñ$Ô&÷ ð	Ø�M‰M×Ñ˜tÔ$ð �<‰<Ô#ð
 �L‰L×ÑÖñ  ô ×ÑÖ÷ ×ûô
 ô 	Ùð	ús   ž"B(Á	B;Â(B8Â;C	ÃC	c                   ó,  a a€ ] tR t^^t oV3R lV 3R lltRV3R lR lltV3R lR ltV3R lR ltV3R	 lR
 ltV3R lR lt	V3R lR lt
V3R lR ltV3R lR ltV3R lR ltV3R lR ltV3R lR ltV3R lR ltV3R lR ltRtVtV ;t# )ÚBaseAsyncIOLoopc                ó>   <€ V ^8„  d   QhRS[ P                  RS[RR/# )r   Úasyncio_loopÚkwargsr   N)ÚasyncioÚAbstractEventLoopr   )r   r   s   "€r   r   ÚBaseAsyncIOLoop.__annotate___   s+   ø€ ÷ /%ñ /%Ù#×5Ñ5ð/%ÙADð/%à	ñ/%r   c                óP  <€ Wn         Wn        \        \        R 4      '       d1   \	        V\        P
                  4      '       d   \        V4      V n        / V n        \        4       V n	        \        4       V n
        RV n        \        P                  P                  4        F-  pVP                  4       '       g   K   \        P                  V K/  	  \        P                  P#                  W4      pW@Jd   \%        RV RV 24      h\&        SV `P  ! R/ VB  R#   \          d     K†  i ; i)ÚProactorEventLoopFzIOLoop z& already associated with asyncio loop Nr"   )rC   Úselector_loopÚhasattrrE   Ú
isinstancerI   ÚAddThreadSelectorEventLoopÚhandlersÚsetÚreadersÚwritersÚclosingr   Ú_ioloop_for_asyncioÚcopyÚ	is_closedÚKeyErrorÚ
setdefaultÚRuntimeErrorÚsuperÚ
initialize)r$   rC   rD   r>   Úexisting_loopÚ	__class__s   &&,  €r   rZ   ÚBaseAsyncIOLoop.initialize_   s  ø€ ð
 )Ôð *ÔÜ”7Ð/×0Ò0´ZØœ'×3Ñ3÷6
ò 6
ô
 "<¸LÓ!IˆDÔàMOˆŒä!$£ˆŒÜ!$£ˆŒØˆŒô ×.Ñ.×3Ñ3Ö5ˆDØ�~‰~×ÔðÜ×2Ñ2°4Ò8ñ 6ô ×2Ñ2×=Ñ=¸lÓQˆØÓ$ÜØ˜-˜Ð(NÈ|ÈnÐ]óð ô 	‰ÒÑ$˜VÔ$øô  ô Úðús   Â:DÄD%Ä$D%c                ó$   <€ V ^8„  d   QhRS[ RR/# ©r   Úall_fdsr   N©Úbool)r   r   s   "€r   r   rG   �   s   ø€ ÷ "ñ "™Tð "¨dñ "r   c                ó   € R V n         \        V P                  4       FD  pV P                  V,          w  r4V P                  V4       V'       g   K3  V P	                  V4       KF  	  \
        P                  V P                   V P                  V P                  Jd   V P                  P                  4        V P                  P                  4        R# )TN)
rR   ÚlistrN   Úremove_handlerÚclose_fdr   rS   rC   rJ   Úclose)r$   r`   ÚfdÚfileobjÚhandler_funcs   &&   r   rg   ÚBaseAsyncIOLoop.close�   sš   € ØˆŒÜ�t—}‘}Ö%ˆBØ$(§M¡M°"Õ$5Ñ!ˆGØ×Ñ Ô#ß‰wØ—‘˜gÖ&ñ	 &ô ×&Ñ& t×'8Ñ'8Ð9Ø×Ñ T×%6Ñ%6Ó6Ø×Ñ×$Ñ$Ô&Ø×Ñ×ÑÖ!r   c                óT   <€ V ^8„  d   QhRS[ S[S[3,          RS[R,          RS[RR/# )r   rh   ÚhandlerNÚeventsr   ©.N)r   r   r   r   )r   r   s   "€r   r   rG   ¡   s<   ø€ ÷ !ñ !Ù™™[Ð(Õ)ð!Ù4<¸YÕ4Gð!ÙQTð!à	ñ!r   c                óH  € V P                  V4      w  rWP                  9   d   \        R V,          4      hWB3V P                  V&   V\        P                  ,          '       dQ   V P
                  P                  WP                  V\        P                  4       V P                  P                  V4       V\        P                  ,          '       dS   V P
                  P                  WP                  V\        P                  4       V P                  P                  V4       R# R# )zfd %s added twiceN)Úsplit_fdrN   Ú
ValueErrorr   ÚREADrJ   Ú
add_readerÚ_handle_eventsrP   ÚaddÚWRITEÚ
add_writerrQ   )r$   rh   rm   rn   ri   s   &&&& r   Úadd_handlerÚBaseAsyncIOLoop.add_handler¡   sË   € ð —m‘m BÓ'‰ˆØ—‘ÔÜÐ0°2Õ5Ó6Ð6Ø$Ð.ˆ�‰�bÑØ”F—K‘K×ÔØ×Ñ×)Ñ)¨"×.AÑ.AÀ2ÄvÇ{Á{ÔSØ�L‰L×Ñ˜RÔ Ø”F—L‘L× Ô Ø×Ñ×)Ñ)¨"×.AÑ.AÀ2ÄvÇ|Á|ÔTØ�L‰L×Ñ˜RÖ ñ !r   c                ó@   <€ V ^8„  d   QhRS[ S[S[3,          RS[RR/# ©r   rh   rn   r   N©r   r   r   )r   r   s   "€r   r   rG   ¯   s,   ø€ ÷ (ñ (¡¡s©KÐ'7Õ!8ð (Á#ð (È$ñ (r   c                óF  € V P                  V4      w  rV\        P                  ,          '       db   WP                  9  dQ   V P                  P                  WP                  V\        P                  4       V P                  P                  V4       MFWP                  9   d7   V P                  P                  V4       V P                  P                  V4       V\        P                  ,          '       de   WP                  9  dS   V P                  P                  WP                  V\        P                  4       V P                  P                  V4       R # R # WP                  9   d9   V P                  P                  V4       V P                  P                  V4       R # R # r!   )rq   r   rs   rP   rJ   rt   ru   rv   Úremove_readerÚremoverw   rQ   rx   Úremove_writer)r$   rh   rn   ri   s   &&& r   Úupdate_handlerÚBaseAsyncIOLoop.update_handler¯   s  € Ø—m‘m BÓ'‰ˆØ”F—K‘K×ÔØŸ™Ô%Ø×"Ñ"×-Ñ-¨b×2EÑ2EÀrÌ6Ï;É;ÔWØ—‘× Ñ  Ô$øà—\‘\Ô!Ø×"Ñ"×0Ñ0°Ô4Ø—‘×#Ñ# BÔ'Ø”F—L‘L× Ô ØŸ™Ô%Ø×"Ñ"×-Ñ-¨b×2EÑ2EÀrÌ6Ï<É<ÔXØ—‘× Ñ  Ö$ñ &ð —\‘\Ô!Ø×"Ñ"×0Ñ0°Ô4Ø—‘×#Ñ# BÖ'ñ "r   c                ó:   <€ V ^8„  d   QhRS[ S[S[3,          RR/# )r   rh   r   Nr}   )r   r   s   "€r   r   rG   Â   s%   ø€ ÷ 
ñ 
¡¡s©KÐ'7Õ!8ð 
¸Tñ 
r   c                ó‚  € V P                  V4      w  rWP                  9  d   R # WP                  9   d7   V P                  P	                  V4       V P                  P                  V4       WP                  9   d7   V P                  P                  V4       V P                  P                  V4       V P                  V R # r!   )rq   rN   rP   rJ   r   r€   rQ   r�   )r$   rh   ri   s   && r   re   ÚBaseAsyncIOLoop.remove_handlerÂ   s‹   € Ø—m‘m BÓ'‰ˆØ—]‘]Ô"ÙØ—‘ÔØ×Ñ×,Ñ,¨RÔ0Ø�L‰L×Ñ Ô#Ø—‘ÔØ×Ñ×,Ñ,¨RÔ0Ø�L‰L×Ñ Ô#Ø�M‰M˜"Òr   c                ó*   <€ V ^8„  d   QhRS[ RS[ RR/# r|   r   )r   r   s   "€r   r   rG   Î   s"   ø€ ÷ &ñ &¡ð &©cð &°dñ &r   c                ó@   € V P                   V,          w  r4V! W24       R # r!   )rN   )r$   rh   rn   ri   rj   s   &&&  r   ru   ÚBaseAsyncIOLoop._handle_eventsÎ   s   € Ø $§¡¨bÕ 1ÑˆÙ�WÖ%r   c                ó   <€ V ^8„  d   QhRR/# r1   r"   )r   r   s   "€r   r   rG   Ò   s   ø€ ÷ (ñ (�tñ (r   c                ó:   € V P                   P                  4        R # r!   )rC   Úrun_foreverr#   s   &r   ÚstartÚBaseAsyncIOLoop.startÒ   s   € Ø×Ñ×%Ñ%Ö'r   c                ó   <€ V ^8„  d   QhRR/# r1   r"   )r   r   s   "€r   r   rG   Õ   s   ø€ ÷ !ñ !�dñ !r   c                ó:   € V P                   P                  4        R # r!   )rC   Ústopr#   s   &r   r‘   ÚBaseAsyncIOLoop.stopÕ   s   € Ø×Ñ×ÑÖ r   c          
      ó8   <€ V ^8„  d   QhRS[ RS[RS[RS[RS[/# )r   ÚwhenÚcallbackÚargsrD   r   )Úfloatr   r   Úobject)r   r   s   "€r   r   rG   Ø   s5   ø€ ÷ 

ñ 

Ùð

Ù%-ð

Ù69ð

ÙEHð

á	ñ

r   c           	     ó¼   € V P                   P                  \        ^ WP                  4       ,
          4      V P                  \
        P                  ! V.VO5/ VB 4      # )é    )rC   Ú
call_laterÚmaxÚtimeÚ_run_callbackÚ	functoolsÚpartial)r$   r”   r•   r–   rD   s   &&&*,r   Úcall_atÚBaseAsyncIOLoop.call_atØ   sQ   € ð × Ñ ×+Ñ+Ü��4Ÿ)™)›+Õ%Ó&Ø×ÑÜ×Ò˜hÐ8¨Ò8°Ñ8ó
ð 	
r   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r   Útimeoutr   N)r˜   )r   r   s   "€r   r   rG   ä   s   ø€ ÷ ñ ¡fð °ñ r   c                ó&   € VP                  4        R # r!   )Úcancel)r$   r¤   s   &&r   Úremove_timeoutÚBaseAsyncIOLoop.remove_timeoutä   s   € Ø�‰Ör   c                ó0   <€ V ^8„  d   QhRS[ RS[RS[RR/# ©r   r•   r–   rD   r   N©r   r   )r   r   s   "€r   r   rG   ç   s)   ø€ ÷ ñ ¡Xð ±cð ÁSð ÈTñ r   c                óŽ  €  \         P                  ! 4       V P                  J d   V P                  P                  pMV P                  P                  p  V! V P                  \        P                  ! V.VO5/ VB 4       R #   \
         d    T P                  P                  p LQi ; i  \
         d     R # \         d     R # i ; ir!   )
rE   Úget_running_looprC   Ú	call_soonÚcall_soon_threadsaferX   rž   rŸ   r    ÚAttributeError)r$   r•   r–   rD   r®   s   &&*, r   Úadd_callbackÚBaseAsyncIOLoop.add_callbackç   s®   € ð	?Ü×'Ò'Ó)¨T×->Ñ->Ó>Ø ×-Ñ-×7Ñ7‘	à ×-Ñ-×BÑB‘	ð	Ù�d×(Ñ(¬)×*;Ò*;¸HÐ*VÀtÒ*VÈvÑ*VÖWøô	 ô 	?Ø×)Ñ)×>Ñ>ŠIð	?ûô
 ô 	ò Üô 	ò ð		ús4   ‚9B ¼B Á+B( Â!B%Â$B%Â(CÂ6CÂ?CÃCc                ó0   <€ V ^8„  d   QhRS[ RS[RS[RR/# rª   r«   )r   r   s   "€r   r   rG   ÿ   s-   ø€ ÷ 	ñ 	Ù ð	Ù),ð	Ù8;ð	à	ñ	r   c                óÞ   € \         P                  ! R \        4        V P                  P	                  V P
                  \        P                  ! V.VO5/ VB 4       R#   \         d     R# i ; i)z&add_callback_from_signal is deprecatedN)	ÚwarningsÚwarnÚDeprecationWarningrC   r¯   rž   rŸ   r    rX   )r$   r•   r–   rD   s   &&*,r   Úadd_callback_from_signalÚ(BaseAsyncIOLoop.add_callback_from_signalÿ   sa   € ô 	�ŠÐ>Ô@RÔSð	Ø×Ñ×2Ñ2Ø×"Ñ"¤I×$5Ò$5°hÐ$PÀÒ$PÈÑ$Pöøô ô 	Úð	ús   �>A ÁA,Á+A,c                ó|   <€ V ^8„  d   QhRS[ S[P                  P                  ,          RS[RS[3,          RS[RR/# )r   ÚexecutorÚfunc.r–   r   zasyncio.Future[_T])r
   Ú
concurrentÚfuturesÚExecutorr   r.   r   )r   r   s   "€r   r   rG   
  sS   ø€ ÷ Hñ Há™:×-Ñ-×6Ñ6Õ7ðHñ �s™B�wÕðHñ ð	Hð
 
ñHr   c                ó>   € V P                   P                  ! W.VO5!  # r!   )rC   Úrun_in_executor)r$   r»   r¼   r–   s   &&&*r   rÁ   ÚBaseAsyncIOLoop.run_in_executor
  s    € ð × Ñ ×0Ò0°ÐGÀ$ÓGÐGr   c                óL   <€ V ^8„  d   QhRS[ P                  P                  RR/# )r   r»   r   N)r½   r¾   r¿   )r   r   s   "€r   r   rG     s+   ø€ ÷ @ñ @©Z×-?Ñ-?×-HÑ-Hð @ÈTñ @r   c                ó8   € V P                   P                  V4      # r!   )rC   Úset_default_executor)r$   r»   s   &&r   rÅ   Ú$BaseAsyncIOLoop.set_default_executor  s   € Ø× Ñ ×5Ñ5°hÓ?Ð?r   )rC   rR   rN   rP   rJ   rQ   ©F)r'   r(   r)   r*   rZ   rg   ry   r‚   re   ru   r�   r‘   r¡   r§   r±   r¸   rÁ   rÅ   r+   r,   Ú__classcell__©r\   r   s   @@r   rA   rA   ^   sœ   ù‡ € ÷/%ó /%÷b"ò "÷"!ð !÷(ð (÷&
ð 
÷&ð &÷(ð (÷!ð !÷

ð 

÷ð ÷ð ÷0	ð 	÷Hð H÷@÷ @ð @r   rA   c                   óT   a a€ ] tR tRt oRtV3R lV 3R lltV3R lR ltRtVtV ;t	# )ÚAsyncIOMainLoopi  a{  ``AsyncIOMainLoop`` creates an `.IOLoop` that corresponds to the
current ``asyncio`` event loop (i.e. the one returned by
``asyncio.get_event_loop()``).

.. deprecated:: 5.0

   Now used automatically when appropriate; it is no longer necessary
   to refer to this class directly.

.. versionchanged:: 5.0

   Closing an `AsyncIOMainLoop` now closes the underlying asyncio loop.
c                ó$   <€ V ^8„  d   QhRS[ RR/# ©r   rD   r   N©r   )r   r   s   "€r   r   ÚAsyncIOMainLoop.__annotate__%  s   ø€ ÷ ?ñ ?¡3ð ?¨4ñ ?r   c                óP   <€ \         SV `  ! \        P                  ! 4       3/ VB  R # r!   )rY   rZ   rE   Úget_event_loop)r$   rD   r\   s   &,€r   rZ   ÚAsyncIOMainLoop.initialize%  s   ø€ Ü‰Òœ7×1Ò1Ó3Ñ>°vÔ>r   c                ó   <€ V ^8„  d   QhRR/# r1   r"   )r   r   s   "€r   r   rÏ   (  s   ø€ ÷ ñ ˜tñ r   c                ó   € R # r!   r"   r#   s   &r   Ú_make_currentÚAsyncIOMainLoop._make_current(  s   € ñ 	r   r"   )
r'   r(   r)   r*   Ú__doc__rZ   rÕ   r+   r,   rÈ   rÉ   s   @@r   rË   rË     s#   ù‡ € ñ÷?ó ?÷÷ ð r   rË   c                   ó‚   a a€ ] tR tRt oRtV3R lV 3R lltRV3R lV 3R llltV3R lR ltV3R	 lR
 ltRt	Vt
V ;t# )ÚAsyncIOLoopi.  a!  ``AsyncIOLoop`` is an `.IOLoop` that runs on an ``asyncio`` event loop.
This class follows the usual Tornado semantics for creating new
``IOLoops``; these loops are not necessarily related to the
``asyncio`` default event loop.

Each ``AsyncIOLoop`` creates a new ``asyncio.EventLoop``; this object
can be accessed with the ``asyncio_loop`` attribute.

.. versionchanged:: 6.2

   Support explicit ``asyncio_loop`` argument
   for specifying the asyncio loop to attach to,
   rather than always creating a new one with the default policy.

.. versionchanged:: 5.0

   When an ``AsyncIOLoop`` becomes the current `.IOLoop`, it also sets
   the current `asyncio` event loop.

.. deprecated:: 5.0

   Now used automatically when appropriate; it is no longer necessary
   to refer to this class directly.
c                ó$   <€ V ^8„  d   QhRS[ RR/# rÍ   rÎ   )r   r   s   "€r   r   ÚAsyncIOLoop.__annotate__H  s   ø€ ÷ ñ ¡3ð ¨4ñ r   c                óÆ   <€ R V n         RpRV9  d   \        P                  ! 4       ;VR&   p \        SV `  ! R/ VB  R#   \
         d    Te   TP                  4        h i ; i)FNrC   r"   )Ú
is_currentrE   Únew_event_looprY   rZ   Ú	Exceptionrg   )r$   rD   r>   r\   s   &, €r   rZ   ÚAsyncIOLoop.initializeH  sg   ø€ ØˆŒØˆØ Ô'Ü,3×,BÒ,BÓ,DÐDˆF�>Ñ" Tð	Ü‰GÒÑ( Ô(øÜô 	ð ÒØ—
‘
”Øð	ús	   ­? ¿!A c                ó$   <€ V ^8„  d   QhRS[ RR/# r_   ra   )r   r   s   "€r   r   rÛ   V  s   ø€ ÷ 'ñ '™Tð '¨dñ 'r   c                ól   <€ V P                   '       d   V P                  4        \        SV `  VR 7       R# ))r`   N)rÝ   Ú_clear_currentrY   rg   )r$   r`   r\   s   &&€r   rg   ÚAsyncIOLoop.closeV  s&   ø€ Ø�?�?ˆ?Ø×ÑÔ!Ü‰‰˜gˆÖ&r   c                ó   <€ V ^8„  d   QhRR/# r1   r"   )r   r   s   "€r   r   rÛ   [  s   ø€ ÷ 2ñ 2˜tñ 2r   c                óê   € V P                   '       g#    \        P                  ! 4       V n        RV n         \        P                  ! V P                  4       R #   \        \
        3 d    R T n         LCi ; i©NT)rÝ   rE   rÑ   Úold_asynciorX   ÚAssertionErrorÚset_event_looprC   r#   s   &r   rÕ   ÚAsyncIOLoop._make_current[  s\   € Ø��ˆð(Ü#*×#9Ò#9Ó#;�Ô ð #ˆDŒOÜ×Ò˜t×0Ñ0Ö1øô !¤.Ð1ô (Ø#'�Ö ð(ús   ”A ÁA2Á1A2c                ó   <€ V ^8„  d   QhRR/# r1   r"   )r   r   s   "€r   r   rÛ   d  s   ø€ ÷ $ñ $ Tñ $r   c                ó|   € V P                   '       d*   \        P                  ! V P                  4       R V n         R# R# )FN)rÝ   rE   rê   rè   r#   s   &r   Ú_clear_current_hookÚAsyncIOLoop._clear_current_hookd  s+   € Ø�?�?ˆ?Ü×"Ò" 4×#3Ñ#3Ô4Ø#ˆDŽOñ r   )rÝ   rè   rÇ   )r'   r(   r)   r*   r×   rZ   rg   rÕ   rî   r+   r,   rÈ   rÉ   s   @@r   rÙ   rÙ   .  s7   ù‡ € ñ÷2ó ÷'õ '÷
2ð 2÷$÷ $ð $r   rÙ   c                óX   € V ^8„  d   QhR\         P                  R\         P                  /# )r   Úasyncio_futurer   ©rE   ÚFuture)r   s   "r   r   r   j  s"   € ÷ 	ñ 	¤g§n¡nð 	¼¿¹ñ 	r   c                ó   € V # )zËConvert an `asyncio.Future` to a `tornado.concurrent.Future`.

.. versionadded:: 4.1

.. deprecated:: 5.0
   Tornado ``Futures`` have been merged with `asyncio.Future`,
   so this method is now a no-op.
r"   )rñ   s   &r   Úto_tornado_futurerõ   j  s
   € ð Ðr   c                óX   € V ^8„  d   QhR\         P                  R\         P                  /# )r   Útornado_futurer   rò   )r   s   "r   r   r   v  s"   € ÷ +ñ +¤g§n¡nð +¼¿¹ñ +r   c                ó   € \        V 4      # )aS  Convert a Tornado yieldable object to an `asyncio.Future`.

.. versionadded:: 4.1

.. versionchanged:: 4.3
   Now accepts any yieldable object, not just
   `tornado.concurrent.Future`.

.. deprecated:: 5.0
   Tornado ``Futures`` have been merged with `asyncio.Future`,
   so this method is now equivalent to `tornado.gen.convert_yielded`.
r   )r÷   s   &r   Úto_asyncio_futurerù   v  s   € ô ˜>Ó*Ð*r   c                óD   € V ^8„  d   QhR\         R\        P                  /# ©r   Únamer   )ÚstrÚtypingr   )r   s   "r   r   r   ‰  s"   € ÷ B%ñ B%”cð B%œfŸj™jñ B%r   c                 ó  € V R 8w  d   \        R\        : RV : 24      h\        fZ   \        P                  R8X  d(   \        \        R4      '       d   \        P                  pM\        P                  p ! R R V4      pVs\        # )ÚAnyThreadEventLoopPolicyzmodule z has no attribute Úwin32ÚWindowsSelectorEventLoopPolicyc                   óZ   a a€ ] tR tRt oRtV3R lV 3R lltV3R lV 3R lltRtVtV ;t	# )Ú-__getattr__.<locals>.AnyThreadEventLoopPolicyiœ  a¶  Event loop policy that allows loop creation on any thread.

The default `asyncio` event loop policy only automatically creates
event loops in the main threads. Other threads must create event
loops explicitly or `asyncio.get_event_loop` (and therefore
`.IOLoop.current`) will fail. Installing this policy allows event
loops to be created automatically on any thread, matching the
behavior of Tornado versions prior to 5.0 (or 5.0 on Python 2).

Usage::

    asyncio.set_event_loop_policy(AnyThreadEventLoopPolicy())

.. versionadded:: 5.0

.. deprecated:: 6.2

    ``AnyThreadEventLoopPolicy`` affects the implicit creation
    of an event loop, which is deprecated in Python 3.10 and
    will be removed in a future version of Python. At that time
    ``AnyThreadEventLoopPolicy`` will no longer be useful.
    If you are relying on it, use `asyncio.new_event_loop`
    or `asyncio.run` explicitly in any non-main threads that
    need event loops.
c                ó   <€ V ^8„  d   QhRR/# r1   r"   )r   r   s   "€r   r   Ú:__getattr__.<locals>.AnyThreadEventLoopPolicy.__annotate__·  s   ø€ ÷ ñ  $ñ r   c                ó^   <€ \         SV `  4        \        P                  ! R \        ^R7       R# )zYAnyThreadEventLoopPolicy is deprecated, use asyncio.run or asyncio.new_event_loop instead)Ú
stacklevelN)rY   Ú__init__rµ   r¶   r·   )r$   r\   s   &€r   r	  Ú6__getattr__.<locals>.AnyThreadEventLoopPolicy.__init__·  s%   ø€ Ü‘Ñ Ô"Ü—’ð8ä&Ø ÷	r   c                ó4   <€ V ^8„  d   QhRS[ P                  /# r   ©rE   rF   )r   r   s   "€r   r   r  À  s   ø€ ÷  ñ  ©×(AÑ(Añ  r   c                óŠ   <€  \         SV `  4       #   \         d'    T P                  4       pT P	                  T4       Tu # i ; ir!   )rY   rÑ   rX   rÞ   rê   )r$   r>   r\   s   & €r   rÑ   Ú<__getattr__.<locals>.AnyThreadEventLoopPolicy.get_event_loopÀ  sF   ø€ ð Ü ™7Ñ1Ó3Ð3øÜ#ô  à×.Ñ.Ó0�DØ×'Ñ'¨Ô-Ø’Kð	 ús   ƒ ‘.AÁAr"   )
r'   r(   r)   r*   r×   r	  rÑ   r+   r,   rÈ   rÉ   s   @@r   r   r  œ  s#   ù‡ € ñ÷4ó ÷ ÷  ó  r   )	r°   r'   Ú_AnyThreadEventLoopPolicyÚsysÚplatformrK   rE   r  ÚDefaultEventLoopPolicy)rü   Ú_BasePolicyr   s   &  r   Ú__getattr__r  ‰  s   € ð
 Ð)Ô)Ü˜w¤x¡lÐ2DÀTÁHÐMÓNÐNô !Ò(Ü�<‰<˜7Ô"¤wÜÐ5÷(
ò (
ô
 "×@Ñ@‰Kä!×8Ñ8ˆKô+	  {ô +	 ðZ %=Ð!ä$Ð$r   c                   ó  a € ] tR tRt o RtRtV 3R lR ltV 3R lR ltV 3R lR	 ltV 3R
 lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltRtV tR# ) ÚSelectorThreadiÎ  aY  Define ``add_reader`` methods to be called in a background select thread.

Instances of this class start a second thread to run a selector.
This thread is completely hidden from the user;
all callbacks are run on the wrapped event loop's thread.

Typically used via ``AddThreadSelectorEventLoop``,
but can be attached to a running asyncio loop.
Fc                ó8   <€ V ^8„  d   QhRS[ P                  RR/# ©r   Ú	real_loopr   Nr  )r   r   s   "€r   r   ÚSelectorThread.__annotate__Û  s!   ø€ ÷ #<ñ #<¡'×";Ñ";ð #<Àñ #<r   c                ó€  a a€ \         P                  ! 4       S n        VS n        \        P
                  ! 4       S n        R S n        RS n        R S n	        S P                  4       S n        R V 3R lloS P                  P                  V V3R lS P                  R7       / S n        / S n        \        P                   ! 4       w  S n        S n        S P"                  P'                  R4       S P$                  P'                  R4       \(        P+                  S 4       S P-                  S P"                  S P.                  4       R # )NFc                ó   € V ^8„  d   QhRR/# r1   r"   )r   s   "r   r   Ú-SelectorThread.__init__.<locals>.__annotate__è  s   € ÷ 	:ñ 	:¨Dñ 	:r   c               “   óX   <"  € S P                   P                  4       G R j  x€L
  R #  L5ir!   )Ú_thread_manager_handleÚ	__anext__r#   s   €r   Úthread_manager_anextÚ5SelectorThread.__init__.<locals>.thread_manager_anextè  s    øé € ð ×-Ñ-×7Ñ7Ó9×9Ô9ùs   ƒ*¡(¢*c                  óD   <€ S P                   P                  S! 4       4      # r!   )Ú
_real_loopÚcreate_task)r$   r!  s   €€r   Ú<lambda>Ú)SelectorThread.__init__.<locals>.<lambda>ñ  s   ø€ �D—O‘O×/Ñ/Ñ0DÓ0FÔGr   ©Úcontext)ÚcontextvarsÚcopy_contextÚ_main_thread_ctxr$  Ú	threadingÚ	Conditionr5   Ú_select_argsr6   r;   Ú_thread_managerr  r®   Ú_readersÚ_writersÚsocketÚ
socketpairÚ_waker_rr8   Úsetblockingr4   rv   rt   Ú_consume_waker)r$   r  r!  s   f&@r   r	  ÚSelectorThread.__init__Û  sþ   ù€ Ü +× 8Ò 8Ó :ˆÔà#ˆŒä%×/Ò/Ó1ˆÔð ð 	Ôð "'ˆÔØ37ˆŒØ&*×&:Ñ&:Ó&<ˆÔ#÷	:ð 	:ð 	�‰×!Ñ!ÝGØ×)Ñ)ð 	"ô 	
ð
 >@ˆŒØ=?ˆŒô (.×'8Ò'8Ó':Ñ$ˆŒ�t”}Ø�‰×!Ñ! %Ô(Ø�‰×!Ñ! %Ô(Ü×Ñ˜DÔ!Ø�‰˜Ÿ™ t×':Ñ':Ö;r   c                ó   <€ V ^8„  d   QhRR/# r1   r"   )r   r   s   "€r   r   r     s   ø€ ÷ ñ �tñ r   c                ó  € V P                   '       d   R # V P                  ;_uu_ 4        RV n        V P                  P                  4        R R R 4       V P	                  4        V P
                  e   V P
                  P                  4        \        P                  V 4       V P                  V P                  4       V P                  P                  4        V P                  P                  4        RV n         R #   + '       g   i     Lµ; irç   )Ú_closedr5   r6   r7   Ú_wake_selectorr;   r<   r4   Údiscardr   r5  rg   r8   r#   s   &r   rg   ÚSelectorThread.close   s±   € Ø�<�<ˆ<ÙØ××ÓØ%)ˆDÔ"Ø×Ñ×$Ñ$Ô&÷ ð 	×ÑÔØ�<‰<Ò#Ø�L‰L×ÑÔÜ×Ñ Ô%Ø×Ñ˜4Ÿ=™=Ô)Ø�‰×ÑÔØ�‰×ÑÔØˆŽ÷ ×ús   ©"C8Ã8D	c                óB   <€ V ^8„  d   QhRS[ P                  R,          /# )r   r   )NN)rþ   ÚAsyncGenerator)r   r   s   "€r   r   r    s   ø€ ÷ ñ ¡v×'<Ñ'<¸ZÕ'Hñ r   c               óþ   "  € \         P                  ! R RV P                  R7      V n        V P                  P	                  4        V P                  4         R5x € R#   \         d    T P                  4        h i ; i5i)zTornado selectorT)rü   ÚdaemonÚtargetN)r-  ÚThreadÚ_run_selectr;   r�   Ú_start_selectÚGeneratorExitrg   r#   s   &r   r0  ÚSelectorThread._thread_manager  sj   é € ô !×'Ò'Ø#ØØ×#Ñ#ô
ˆŒð
 	�‰×ÑÔØ×ÑÔð
	ö øÜô 	Ø�J‰JŒLØð	üs   ‚AA=ÁA ÁA=ÁA:Á:A=c                ó   <€ V ^8„  d   QhRR/# r1   r"   )r   r   s   "€r   r   r  (  s   ø€ ÷ ñ  ñ r   c                óŠ   € V P                   '       d   R #  V P                  P                  R4       R #   \         d     R # i ; i)Nr3   )r;  r8   r9   r:   r#   s   &r   r<  ÚSelectorThread._wake_selector(  s7   € Ø�<�<ˆ<Ùð	Ø�M‰M×Ñ˜tÖ$øÜô 	Úð	ús   –3 ³AÁAc                ó   <€ V ^8„  d   QhRR/# r1   r"   )r   r   s   "€r   r   r  0  s   ø€ ÷ ñ  ñ r   c                ób   €  V P                   P                  R 4       R#   \         d     R# i ; i)i   N)r5  Úrecvr:   r#   s   &r   r7  ÚSelectorThread._consume_waker0  s+   € ð	Ø�M‰M×Ñ˜tÖ$øÜô 	Úð	ús   ‚ Ÿ.­.c                ó   <€ V ^8„  d   QhRR/# r1   r"   )r   r   s   "€r   r   r  6  s   ø€ ÷ 'ñ '˜tñ 'r   c                óR  € V P                   ;_uu_ 4        V P                  e   Q h\        V P                  P	                  4       4      \        V P
                  P	                  4       4      3V n        V P                   P                  4        R R R 4       R #   + '       g   i     R # ; ir!   )r5   r/  rd   r1  Úkeysr2  r7   r#   s   &r   rF  ÚSelectorThread._start_select6  st   € ð ××ÓØ×$Ñ$Ò,Ð,Ð,Ü!% d§m¡m×&8Ñ&8Ó&:Ó!;¼TÀ$Ç-Á-×BTÑBTÓBVÓ=WÐ XˆDÔØ×Ñ×$Ñ$Ô&÷ ××Òús   •A6BÂB&	c                ó   <€ V ^8„  d   QhRR/# r1   r"   )r   r   s   "€r   r   r  ?  s   ø€ ÷ @ñ @˜Tñ @r   c                ód  €  V P                   ;_uu_ 4        V P                  f/   V P                  '       g   V P                   P                  4        K<  V P                  '       d    RRR4       R# V P                  f   Q hV P                  w  rRV n        RRR4        \        P                  ! XXV4      w  r4pWE,           p T P                  P                  T P                  Y4T P                  R7       Kõ    + '       g   i     Li; i  \
         d{   pTP                  \        \        R\        P                  4      8X  dG   \        P                  ! T P                  P                  4       .. . ^ 4      w  p pT'       d   . p Rp?LÆh h Rp?ii ; i  \         d     EKŸ  \          d     EK­  i ; i)TNÚWSAENOTSOCKr(  )r5   r/  r6   ÚwaitÚselectÚOSErrorÚerrnoÚgetattrÚEBADFr5  r%   r$  r¯   Ú_handle_selectr,  rX   r°   )r$   Úto_readÚto_writeÚrsÚwsÚxsÚeÚ_s   &       r   rE  ÚSelectorThread._run_select?  sc  € ØØ×"×"Ó"Ø×'Ñ'Ò/¸×8N×8NÐ8NØ×%Ñ%×*Ñ*Ö,Ø×)×)Ð)Ø÷	 #Ñ"ð
 ×(Ñ(Ò4Ð4Ð4Ø$(×$5Ñ$5Ñ!�Ø$(�Ô!÷ #ð ô $Ÿ]š]¨7°H¸hÓG‘
�˜Ø•W�ð,Ø—‘×4Ñ4Ø×'Ñ'¨¸×9NÑ9Nð 5ö ÷a #×"ûô4 ô ð —7‘7œg¤e¨]¼E¿K¹KÓHÔHÜ%Ÿ}š}¨d¯m©m×.BÑ.BÓ.DÐ-EÀrÈ2ÈqÓQ‘H�B˜˜1ßØ�ààûð'ûô2  ô ó Ü!ô ó ð	ús_   – C6·-C6Á%C6Á0%C6Â#D	 Ã2F Ã6D	Ä	FÄA+F	Æ F	ÆF	Æ	FÆF/Æ F/Æ)F/Æ.F/c                óJ   <€ V ^8„  d   QhRS[ S[,          RS[ S[,          RR/# )r   r`  ra  r   N)r	   Ú_FileDescriptorLike)r   r   s   "€r   r   r  �  s1   ø€ ÷ ñ ÙÑ*Õ+ðÙ15Ñ6IÕ1Jðà	ñr   c                ó¶   € V F  pV P                  W0P                  4       K   	  V F  pV P                  W@P                  4       K   	  V P                  4        R # r!   )Ú_handle_eventr1  r2  rF  )r$   r`  ra  ÚrÚws   &&&  r   r]  ÚSelectorThread._handle_select�  sH   € ó ˆAØ×Ñ˜q§-¡-Ö0ñ ãˆAØ×Ñ˜q§-¡-Ö0ñ à×ÑÖr   c                ó@   <€ V ^8„  d   QhRS[ RS[S[ S[3,          RR/# )r   rh   Úcb_mapr   N)rg  r   r   )r   r   s   "€r   r   r  Š  s4   ø€ ÷ 	ñ 	áð	ñ Ñ(©(Ð2Õ3ð	ð 
ñ		r   c                óJ   €  W!,          pT! 4        R #   \          d     R # i ; ir!   )rV   )r$   rh   rn  r•   s   &&& r   ri  ÚSelectorThread._handle_eventŠ  s)   € ð
	Ø•zˆHñ 	Ž
øô ô 	Úð	ús   ‚ “"¡"c                ó>   <€ V ^8„  d   QhRS[ RS[R,          RS[RR/# ©r   rh   r•   Nr–   r   ro   ©rg  r   r   )r   r   s   "€r   r   r  •  ó2   ø€ ÷ ñ Ù%ðÙ19¸)Õ1DðÙMPðà	ñr   c                óp   € \         P                  ! V.VO5!  V P                  V&   V P                  4        R # r!   )rŸ   r    r1  r<  ©r$   rh   r•   r–   s   &&&*r   rt   ÚSelectorThread.add_reader•  ó.   € ô &×-Ò-¨hÐ>¸Ó>ˆ�‰�bÑØ×ÑÖr   c                ó>   <€ V ^8„  d   QhRS[ RS[R,          RS[RR/# rr  rs  )r   r   s   "€r   r   r  ›  rt  r   c                óp   € \         P                  ! V.VO5!  V P                  V&   V P                  4        R # r!   )rŸ   r    r2  r<  rv  s   &&&*r   rx   ÚSelectorThread.add_writer›  rx  r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# ©r   rh   r   ©rg  rb   )r   r   s   "€r   r   r  ¡  ó   ø€ ÷ ñ Ñ 3ð ¹ñ r   c                óf   €  V P                   V T P                  4        R#   \         d     R # i ; i©FT)r1  rV   r<  ©r$   rh   s   &&r   r   ÚSelectorThread.remove_reader¡  ó8   € ð	Ø—‘˜bÐ!ð 	×ÑÔÙøô ô 	Úð	úó   ‚! ¡0¯0c                ó&   <€ V ^8„  d   QhRS[ RS[/# r}  r~  )r   r   s   "€r   r   r  ©  r  r   c                óf   €  V P                   V T P                  4        R#   \         d     R # i ; ir�  )r2  rV   r<  r‚  s   &&r   r�   ÚSelectorThread.remove_writer©  r„  r…  )r;  r6   r,  r1  r$  r/  r5   r;   r  r5  r8   r2  N)r'   r(   r)   r*   r×   r;  r	  rg   r0  r<  r7  rF  rE  r]  ri  rt   rx   r   r�   r+   r,   r-   s   @r   r  r  Î  s—   ø‡ € ñð €G÷#<ð #<÷Jð ÷ð ÷2ð ÷ð ÷'ð '÷@ð @÷Dð ÷	ð 	÷ð ÷ð ÷ð ÷ö r   r  c                   ó¶   a a€ ] tR tRt oRt0 RmtV3R lV 3R lltV3R lR ltV3R lR ltV3R	 lR
 lt	V3R lR lt
V3R lR ltV3R lR ltRtVtV ;t# )rM   i²  a{  Wrap an event loop to add implementations of the ``add_reader`` method family.

Instances of this class start a second thread to run a selector.
This thread is completely hidden from the user; all callbacks are
run on the wrapped event loop's thread.

This class is used automatically by Tornado; applications should not need
to refer to it directly.

It is safe to wrap any event loop with this class, although it only makes sense
for event loops that do not implement the ``add_reader`` family of methods
themselves (i.e. ``WindowsProactorEventLoop``)

Closing the ``AddThreadSelectorEventLoop`` also closes the wrapped event loop.

c                ó&   <€ V ^8„  d   QhRS[ RS[/# rû   )rý   r   )r   r   s   "€r   r   Ú'AddThreadSelectorEventLoop.__annotate__Ð  s   ø€ ÷ .ñ .¡Sð .©Sñ .r   c                óx   <€ V\         P                  9   d   \        SV `  V4      # \	        V P
                  V4      # r!   )rM   ÚMY_ATTRIBUTESrY   Ú__getattribute__r[  r$  )r$   rü   r\   s   &&€r   rŽ  Ú+AddThreadSelectorEventLoop.__getattribute__Ð  s3   ø€ ØÔ-×;Ñ;Ô;Ü‘7Ñ+¨DÓ1Ð1Ü�t—‘¨Ó-Ð-r   c                ó8   <€ V ^8„  d   QhRS[ P                  RR/# r  r  )r   r   s   "€r   r   r‹  Õ  s!   ø€ ÷ 3ñ 3¡'×";Ñ";ð 3Àñ 3r   c                ó2   € Wn         \        V4      V n        R # r!   )r$  r  Ú	_selector)r$   r  s   &&r   r	  Ú#AddThreadSelectorEventLoop.__init__Õ  s   € Ø#ŒÜ'¨	Ó2ˆŽr   c                ó   <€ V ^8„  d   QhRR/# r1   r"   )r   r   s   "€r   r   r‹  Ù  s   ø€ ÷  ñ  �tñ  r   c                ón   € V P                   P                  4        V P                  P                  4        R # r!   )r’  rg   r$  r#   s   &r   rg   Ú AddThreadSelectorEventLoop.closeÙ  s"   € Ø�‰×ÑÔØ�‰×ÑÖr   c                ó:   <€ V ^8„  d   QhRRRS[ R,          RRRR/# ©	r   rh   rg  r•   Nr–   zUnpack[_Ts]r   ro   ©r   )r   r   s   "€r   r   r‹  Ý  ó8   ø€ ÷ >ñ >à!ð>ñ ˜9Õ%ð>ð ð	>ð
 
ñ>r   c                ó>   € V P                   P                  ! W.VO5!  # r!   )r’  rt   rv  s   &&&*r   rt   Ú%AddThreadSelectorEventLoop.add_readerÝ  ó   € ð �~‰~×(Ò(¨Ð=¸Ó=Ð=r   c                ó:   <€ V ^8„  d   QhRRRS[ R,          RRRR/# r˜  r™  )r   r   s   "€r   r   r‹  å  rš  r   c                ó>   € V P                   P                  ! W.VO5!  # r!   )r’  rx   rv  s   &&&*r   rx   Ú%AddThreadSelectorEventLoop.add_writerå  r�  r   c                ó$   <€ V ^8„  d   QhRRRS[ /# ©r   rh   rg  r   ra   )r   r   s   "€r   r   r‹  í  ó   ø€ ÷ 0ñ 0Ð 5ð 0¹$ñ 0r   c                ó8   € V P                   P                  V4      # r!   )r’  r   r‚  s   &&r   r   Ú(AddThreadSelectorEventLoop.remove_readerí  ó   € Ø�~‰~×+Ñ+¨BÓ/Ð/r   c                ó$   <€ V ^8„  d   QhRRRS[ /# r¢  ra   )r   r   s   "€r   r   r‹  ð  r£  r   c                ó8   € V P                   P                  V4      # r!   )r’  r�   r‚  s   &&r   r�   Ú(AddThreadSelectorEventLoop.remove_writerð  r¦  r   )r$  r’  >   rg   r’  r$  rt   rx   r   r�   )r'   r(   r)   r*   r×   r�  rŽ  r	  rg   rt   rx   r   r�   r+   r,   rÈ   rÉ   s   @@r   rM   rM   ²  s\   ù‡ € ñò&€M÷.ó .÷
3ð 3÷ ð  ÷>ð >÷>ð >÷0ð 0÷0÷ 0ð 0r   rM   c                óN   € V ^8„  d   Qh/ ^ \         9   d   \        R,          ;R&   # )r   r  r4   )Ú__conditional_annotations__r   )r   s   "r   r   r      s&   € ÷ ñ ÷J /Ò .”Ð%Õ&Ñ .òKr   )6r«  r×   rE   ÚatexitÚconcurrent.futuresr½   r*  rZ  rŸ   rX  r3  r  r-  rþ   rµ   Útornado.genr   Útornado.ioloopr   r   r   r   r   r	   r
   r   r   r   r   r   ÚTYPE_CHECKINGÚtyping_extensionsr   r   r   r   rg  r.   r/   rO   r4   r?   ÚregisterrA   rË   rÙ   rõ   rù   r  r  r  rF   rM   r   )r«  s   @r   Ú<module>r³     s  øðöó0 Û Û Û Û Û Û Û Û 
Û Û Û Ý 'ß .÷÷ ÷ ð 
××Ðß6ô�ô ð
 ˜C ˜OÕ,Ð áˆTƒ]€à	××ÐÙ
�uÓ
€Cñ *-«€Ó .õð$ ‡‚Ð Ô !ôu@�fô u@ôp�oô ô09$�/ô 9$õx	õ+ð  !Ð õB%÷Jañ aôH?0 ×!:Ñ!:ö ?0r   