a €šçd’}ã@sXdZdZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl m Z ddl m Z dd l mZdd l mZdd l mZdd l mZdd lmZdd„ZGdd„dejejƒZGdd„deejƒZGdd„deejƒZGdd„deƒZGdd„deejƒZGdd„deeejƒZ Gdd„deeejƒZ!Gdd„de j"ƒZ#dS) z¦Event loop using a proactor and related classes. A proactor is a "notify-on-completion" multiplexer. Currently a proactor is only implemented on Windows with IOCP. )ÚBaseProactorEventLoopéNé)Ú base_events)Ú constants)Úfutures)Ú exceptions)Ú protocols)Ússlproto)Ú transports)Útrsock)ÚloggercCs’t |¡|jd<z| ¡|jd<Wn.tjyP|j ¡rLtj d|ddYn0d|jvrŽz|  ¡|jd<WntjyŒd|jd<Yn0dS)NÚsocketÚsocknamezgetsockname() failed on %rT©Úexc_infoÚpeername) r ÚTransportSocketÚ_extraÚ getsocknamer ÚerrorÚ_loopÚ get_debugr ÚwarningÚ getpeername)Ú transportÚsock©rú//usr/lib64/python3.9/asyncio/proactor_events.pyÚ_set_socket_extras ÿ  rcs‚eZdZdZd‡fdd„ Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z e j fdd„Z ddd„Zdd„Zdd„Zdd„Z‡ZS)Ú_ProactorBasePipeTransportz*Base class for pipe and socket transports.Ncsœtƒ ||¡| |¡||_| |¡||_d|_d|_d|_d|_ d|_ d|_ d|_ |jdurl|j  ¡|j |jj|¡|dur˜|j tj|d¡dS)NrF)ÚsuperÚ__init__Ú _set_extraÚ_sockÚ set_protocolÚ_serverÚ_bufferÚ _read_futÚ _write_futÚ_pending_writeÚ _conn_lostÚ_closingÚ _eof_writtenÚ_attachrÚ call_soonÚ _protocolÚconnection_maderÚ_set_result_unless_cancelled©ÚselfÚlooprÚprotocolÚwaiterÚextraÚserver©Ú __class__rrr!2s&     ÿz#_ProactorBasePipeTransport.__init__cCsÄ|jjg}|jdur | d¡n|jr0| d¡|jdurP| d|j ¡›¡|jdurl| d|j›¡|jdurˆ| d|j›¡|jr¤| dt |jƒ›¡|j r´| d¡d  d   |¡¡S) NÚclosedÚclosingzfd=zread=zwrite=zwrite_bufsize=z EOF writtenz<{}>ú ) r:Ú__name__r#Úappendr+Úfilenor'r(r&Úlenr,ÚformatÚjoin)r3ÚinforrrÚ__repr__Hs         z#_ProactorBasePipeTransport.__repr__cCs||jd<dS)NÚpipe)r©r3rrrrr"Zsz%_ProactorBasePipeTransport._set_extracCs ||_dS©N©r/)r3r5rrrr$]sz'_ProactorBasePipeTransport.set_protocolcCs|jSrHrI©r3rrrÚ get_protocol`sz'_ProactorBasePipeTransport.get_protocolcCs|jSrH)r+rJrrrÚ is_closingcsz%_ProactorBasePipeTransport.is_closingcCs\|jr dSd|_|jd7_|js>|jdur>|j |jd¡|jdurX|j ¡d|_dS)NTr) r+r*r&r(rr.Ú_call_connection_lostr'ÚcancelrJrrrÚclosefs  z _ProactorBasePipeTransport.closecCs*|jdur&|d|›t|d| ¡dS)Nzunclosed transport )Úsource)r#ÚResourceWarningrO)r3Ú_warnrrrÚ__del__qs z"_ProactorBasePipeTransport.__del__úFatal error on pipe transportc Cs`zNt|tƒr*|j ¡rBtjd||ddn|j ||||jdœ¡W| |¡n | |¡0dS)Nz%r: %sTr)ÚmessageÚ exceptionrr5) Ú isinstanceÚOSErrorrrr ÚdebugÚcall_exception_handlerr/Ú _force_close)r3ÚexcrUrrrÚ _fatal_errorvs  ü z'_ProactorBasePipeTransport._fatal_errorcCs |jdur6|j ¡s6|dur*|j d¡n |j |¡|jr@dSd|_|jd7_|jrj|j ¡d|_|jr€|j ¡d|_d|_ d|_ |j   |j |¡dS)NTrr)Ú _empty_waiterÚdoneÚ set_resultÚ set_exceptionr+r*r(rNr'r)r&rr.rM)r3r\rrrr[…s"   z'_ProactorBasePipeTransport._force_closec CsÀzd|j |¡Wt|jdƒr8|j ¡dkr8|j tj¡|j ¡d|_|j }|dur¼|  ¡d|_ nVt|jdƒrŽ|j ¡dkrŽ|j tj¡|j ¡d|_|j }|durº|  ¡d|_ 0dS)NÚshutdownéÿÿÿÿ) r/Úconnection_lostÚhasattrr#r@rbr Ú SHUT_RDWRrOr%Ú_detach)r3r\r8rrrrM™s$ ù z0_ProactorBasePipeTransport._call_connection_lostcCs"|j}|jdur|t|jƒ7}|SrH)r)r&rA)r3ÚsizerrrÚget_write_buffer_sizeªs z0_ProactorBasePipeTransport.get_write_buffer_size)NNN)rT)r>Ú __module__Ú __qualname__Ú__doc__r!rEr"r$rKrLrOÚwarningsÚwarnrSr]r[rMriÚ __classcell__rrr9rr.sÿ  rcsTeZdZdZd‡fdd„ Zdd„Zdd„Zd d „Zd d „Zd d„Z ddd„Z ‡Z S)Ú_ProactorReadPipeTransportzTransport for read pipes.Ncs:d|_d|_tƒ ||||||¡|j |j¡d|_dS)NTF)Ú _pending_dataÚ_pausedr r!rr.Ú _loop_readingr2r9rrr!µs z#_ProactorReadPipeTransport.__init__cCs|j o|j SrH)rrr+rJrrrÚ is_reading¾sz%_ProactorReadPipeTransport.is_readingcCs0|js |jrdSd|_|j ¡r,t d|¡dS)NTz%r pauses reading)r+rrrrr rYrJrrrÚ pause_readingÁs   z(_ProactorReadPipeTransport.pause_readingcCsn|js |jsdSd|_|jdur0|j |jd¡|j}d|_|durT|j |j|¡|j ¡rjt   d|¡dS)NFz%r resumes reading) r+rrr'rr.rsrqÚ_data_receivedrr rY©r3ÚdatarrrÚresume_readingÔs   z)_ProactorReadPipeTransport.resume_readingc Cs~|j ¡rt d|¡z|j ¡}WnHttfy<‚Yn2tyl}z|  |d¡WYd}~dSd}~00|sz|  ¡dS)Nz%r received EOFz1Fatal error: protocol.eof_received() call failed.) rrr rYr/Ú eof_receivedÚ SystemExitÚKeyboardInterruptÚ BaseExceptionr]rO)r3Ú keep_openr\rrrÚ _eof_receivedæs  ÿz(_ProactorReadPipeTransport._eof_receivedc Csª|jr|jdusJ‚||_dS|s.| ¡dSt|jtjƒršzt |j|¡Wq¦tt fyf‚Yq¦t y–}z|  |d¡WYd}~dSd}~00n |j  |¡dS)Nz3Fatal error: protocol.buffer_updated() call failed.) rrrqrrWr/rÚBufferedProtocolÚ_feed_data_to_buffered_protor{r|r}r]Ú data_received)r3rxr\rrrrvös$ÿz)_ProactorReadPipeTransport._data_receivedc CsÊd}z¨zª|durP|j|us0|jdur,|js0J‚d|_| ¡rH| ¡}n| ¡|jrtd}WW|durp| |¡dS|dkr–WW|dur’| |¡dS|js°|jj  |j d¡|_WnÎt y}z8|jsØ|  |d¡n|j  ¡rðtjdddWYd}~nœd}~0ty2}z| |¡WYd}~nnd}~0tyb}z|  |d¡WYd}~n>d}~0tjy€|js|‚Yn0|js˜|j |j¡W|durÆ| |¡n|durÄ| |¡0dS)Nói€z"Fatal read error on pipe transportz*Read error on pipe transport while closingTr)r'r+r_ÚresultrNrvrrrÚ _proactorÚrecvr#ÚConnectionAbortedErrorr]rr rYÚConnectionResetErrorr[rXrÚCancelledErrorÚadd_done_callbackrs)r3Úfutrxr\rrrrssVÿ  â æ ÿ   ÿ z(_ProactorReadPipeTransport._loop_reading)NNN)N) r>rjrkrlr!rtruryrrvrsrorrr9rrp±sÿ rpcs^eZdZdZdZ‡fdd„Zdd„Zddd „Zd d „Zd d „Z dd„Z dd„Z dd„Z ‡Z S)Ú_ProactorBaseWritePipeTransportzTransport for write pipes.Tcstƒj|i|¤Žd|_dSrH)r r!r^©r3ÚargsÚkwr9rrr!Gsz(_ProactorBaseWritePipeTransport.__init__cCsÖt|tttfƒs$tdt|ƒj›ƒ‚|jr2tdƒ‚|j durDtdƒ‚|sLdS|j rz|j t j krht  d¡|j d7_ dS|jdur¤|jdus’J‚|jt|ƒdn.|js¾t|ƒ|_| ¡n|j |¡| ¡dS)Nz/data argument must be a bytes-like object, not zwrite_eof() already calledz(unable to write; sendfile is in progresszsocket.send() raised exception.r)rx)rWÚbytesÚ bytearrayÚ memoryviewÚ TypeErrorÚtyper>r,Ú RuntimeErrorr^r*rÚ!LOG_THRESHOLD_FOR_CONNLOST_WRITESr rr(r&Ú _loop_writingÚ_maybe_pause_protocolÚextendrwrrrÚwriteKs2ÿÿ       z%_ProactorBaseWritePipeTransport.writeNc Cs|z|dur"|jdur"|jr"WdS||jus0J‚d|_d|_|rH| ¡|dur\|j}d|_|s”|jrv|j |jd¡|jrŠ|j   t j ¡|  ¡n\|jj |j |¡|_|j ¡sâ|jdksÀJ‚t|ƒ|_|j |j¡| ¡n|j |j¡|jdur|jdur|j d¡Wn`tyF}z| |¡WYd}~n:d}~0tyv}z| |d¡WYd}~n d}~00dS)Nrz#Fatal write error on pipe transport)r(r+r)r„r&rr.rMr,r#rbr ÚSHUT_WRÚ_maybe_resume_protocolr…Úsendr_rArŠr—r˜r^r`rˆr[rXr])r3Úfrxr\rrrr—qs<    z-_ProactorBaseWritePipeTransport._loop_writingcCsdS©NTrrJrrrÚ can_write_eofšsz-_ProactorBaseWritePipeTransport.can_write_eofcCs | ¡dSrH)rOrJrrrÚ write_eofsz)_ProactorBaseWritePipeTransport.write_eofcCs| d¡dSrH©r[rJrrrÚabort sz%_ProactorBaseWritePipeTransport.abortcCs:|jdurtdƒ‚|j ¡|_|jdur4|j d¡|jS)NzEmpty waiter is already set)r^r•rÚ create_futurer(r`rJrrrÚ_make_empty_waiter£s     z2_ProactorBaseWritePipeTransport._make_empty_waitercCs d|_dSrH)r^rJrrrÚ_reset_empty_waiter«sz3_ProactorBaseWritePipeTransport._reset_empty_waiter)NN)r>rjrkrlÚ_start_tls_compatibler!ršr—r r¡r£r¥r¦rorrr9rrŒAs & )rŒcs$eZdZ‡fdd„Zdd„Z‡ZS)Ú_ProactorWritePipeTransportcs8tƒj|i|¤Ž|jj |jd¡|_|j |j¡dS)Né) r r!rr…r†r#r'rŠÚ _pipe_closedrr9rrr!°sz$_ProactorWritePipeTransport.__init__cCsv| ¡r dS| ¡dksJ‚|jr4|jdus0J‚dS||jusLJ||jfƒ‚d|_|jdurj| tƒ¡n| ¡dS)Nrƒ)Ú cancelledr„r+r'r(r[ÚBrokenPipeErrorrO)r3r‹rrrrªµs z(_ProactorWritePipeTransport._pipe_closed)r>rjrkr!rªrorrr9rr¨¯s r¨csXeZdZdZd‡fdd„ Zdd„Zdd„Zd d „Zdd d „Zdd d„Z ddd„Z ‡Z S)Ú_ProactorDatagramTransportiNcs>||_d|_tƒj|||||dt ¡|_|j |j ¡dS)N)r6r7) Ú_addressr^r r!Ú collectionsÚdequer&rr.rs)r3r4rr5Úaddressr6r7r9rrr!Ès  z#_ProactorDatagramTransport.__init__cCst||ƒdSrH©rrGrrrr"Ôsz%_ProactorDatagramTransport._set_extracCstdd„|jDƒƒS)Ncss|]\}}t|ƒVqdSrH)rA)Ú.0rxÚ_rrrÚ ØrƒzC_ProactorDatagramTransport.get_write_buffer_size..)Úsumr&rJrrrri×sz0_ProactorDatagramTransport.get_write_buffer_sizecCs| d¡dSrHr¢rJrrrr£Úsz _ProactorDatagramTransport.abortcCs´t|tttfƒstdt|ƒƒ‚|s&dS|jdurN|d|jfvrNtd|j›ƒ‚|jr‚|jr‚|jt j krpt   d¡|jd7_dS|j  t|ƒ|f¡|jdur¨| ¡| ¡dS)Nz,data argument must be bytes-like object (%r)z!Invalid address: must be None or z!socket.sendto() raised exception.r)rWrr‘r’r“r”r®Ú ValueErrorr*rr–r rr&r?r(r—r˜)r3rxÚaddrrrrÚsendtoÝs&ÿ ÿ    z!_ProactorDatagramTransport.sendtoc Cs z¤|jrWdS||jusJ‚d|_|r.| ¡|jr@|jr\|jr\|jrV|j |jd¡WdS|j  ¡\}}|jdurŠ|jj   |j |¡|_n|jj j |j ||d|_Wn`tyÔ}z|j |¡WYd}~nPd}~0ty}z| |d¡WYd}~n d}~00|j |j¡| ¡dS)N)r¸z'Fatal write error on datagram transport)r*r(r„r&r®r+rr.rMÚpopleftr…rr#r¹rXr/Úerror_receivedÚ Exceptionr]rŠr—rœ)r3r‹rxr¸r\rrrr—ùs4  ÿ þ  "z(_ProactorDatagramTransport._loop_writingc Csšd}zxzô|jr*WW|r&|j ||¡dS|j|usH|jdurD|jsHJ‚d|_|dur¢| ¡}|jr‚d}WW|r~|j ||¡dS|jdurš||j}}n|\}}|jrÂWW|r¾|j ||¡dS|jdurä|jj  |j |j ¡|_n|jj  |j |j ¡|_WnPt y.}z|j |¡WYd}~nBd}~0tjyL|jsH‚Yn0|jdurh|j |j¡W|r–|j ||¡n|r”|j ||¡0dSrH)r*r/Údatagram_receivedr'r+r„r®rr…r†r#Úmax_sizeÚrecvfromrXr»rr‰rŠrs)r3r‹rxr¸Úresr\rrrrssZ$Ûÿç ï  ÿ ÿ   ÿz(_ProactorDatagramTransport._loop_reading)NNN)N)N)N) r>rjrkr¾r!r"rir£r¹r—rsrorrr9rr­Åsÿ   !r­c@s eZdZdZdd„Zdd„ZdS)Ú_ProactorDuplexPipeTransportzTransport for duplex pipes.cCsdS)NFrrJrrrr Ksz*_ProactorDuplexPipeTransport.can_write_eofcCst‚dSrH)ÚNotImplementedErrorrJrrrr¡Nsz&_ProactorDuplexPipeTransport.write_eofN)r>rjrkrlr r¡rrrrrÁFsrÁcsBeZdZdZejjZd ‡fdd„ Zdd„Z dd„Z d d „Z ‡Z S) Ú_ProactorSocketTransportz Transport for connected sockets.Ncs$tƒ ||||||¡t |¡dSrH)r r!rÚ _set_nodelayr2r9rrr!Ysz!_ProactorSocketTransport.__init__cCst||ƒdSrHr²rGrrrr"^sz#_ProactorSocketTransport._set_extracCsdSrŸrrJrrrr asz&_ProactorSocketTransport.can_write_eofcCs2|js |jrdSd|_|jdur.|j tj¡dSrŸ)r+r,r(r#rbr r›rJrrrr¡ds   z"_ProactorSocketTransport.write_eof)NNN) r>rjrkrlrÚ _SendfileModeÚ TRY_NATIVEÚ_sendfile_compatibler!r"r r¡rorrr9rrÃRsÿrÃcsîeZdZ‡fdd„Zd3dd„Zd4ddddddœdd „Zd5d d „Zd6d d „Zd7dd„Zd8dd„Z ‡fdd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd9d&d'„Zd(d)„Zd:d+d,„Zd-d.„Zd/d0„Zd1d2„Z‡ZS);rcshtƒ ¡t d|jj¡||_||_d|_i|_ |  |¡|  ¡t   ¡t  ¡urdt |j ¡¡dS)NzUsing proactor: %s)r r!r rYr:r>r…Ú _selectorÚ_self_reading_futureÚ_accept_futuresÚset_loopÚ_make_self_pipeÚ threadingÚcurrent_threadÚ main_threadÚsignalÚ set_wakeup_fdÚ_csockr@)r3Úproactorr9rrr!ns  zBaseProactorEventLoop.__init__NcCst||||||ƒSrH)rÃ)r3rr5r6r7r8rrrÚ_make_socket_transport{s ÿz,BaseProactorEventLoop._make_socket_transportF)Ú server_sideÚserver_hostnamer7r8Ússl_handshake_timeoutc Cs0tj||||||| d} t||| ||d| jS)N)rשr7r8)r Ú SSLProtocolrÃÚ_app_transport) r3Úrawsockr5Ú sslcontextr6rÕrÖr7r8r×Ú ssl_protocolrrrÚ_make_ssl_transport€sýÿz)BaseProactorEventLoop._make_ssl_transportcCst||||||ƒSrH)r­)r3rr5r±r6r7rrrÚ_make_datagram_transports ÿz.BaseProactorEventLoop._make_datagram_transportcCst|||||ƒSrH)rÁ©r3rr5r6r7rrrÚ_make_duplex_pipe_transport’sÿz1BaseProactorEventLoop._make_duplex_pipe_transportcCst|||||ƒSrH)rpràrrrÚ_make_read_pipe_transport—sz/BaseProactorEventLoop._make_read_pipe_transportcCst|||||ƒSrH)r¨ràrrrÚ_make_write_pipe_transport›sÿz0BaseProactorEventLoop._make_write_pipe_transportcsj| ¡rtdƒ‚| ¡rdSt ¡t ¡ur6t d¡| ¡|  ¡|j   ¡d|_ d|_ t ƒ  ¡dS)Nz!Cannot close a running event looprc)Ú is_runningr•Ú is_closedrÍrÎrÏrÐrÑÚ_stop_accept_futuresÚ_close_self_piper…rOrÈr rJr9rrrO¡s  zBaseProactorEventLoop.closecÃs|j ||¡IdHSrH)r…r†)r3rÚnrrrÚ sock_recvµszBaseProactorEventLoop.sock_recvcÃs|j ||¡IdHSrH)r…Ú recv_into)r3rÚbufrrrÚsock_recv_into¸sz$BaseProactorEventLoop.sock_recv_intocÃs|j ||¡IdHSrH)r…r)r3rrxrrrÚ sock_sendall»sz"BaseProactorEventLoop.sock_sendallcÃs|j ||¡IdHSrH)r…Úconnect)r3rr±rrrÚ sock_connect¾sz"BaseProactorEventLoop.sock_connectcÃs|j |¡IdHSrH)r…ÚacceptrGrrrÚ sock_acceptÁsz!BaseProactorEventLoop.sock_acceptc Ãs>z | ¡}Wn4ttjfy@}zt d¡‚WYd}~n d}~00zt |¡j}Wnt ynt d¡‚Yn0|rx|n|}|s„dSt |dƒ}|r t |||ƒn|} t ||ƒ}d} zpt | ||ƒ}|dkrâ| W| dkrà|  |¡S|j   ||||¡IdH||7}| |7} q´W| dkr:|  |¡n| dkr8|  |¡0dS)Nznot a regular filerlÿÿ)r@ÚAttributeErrorÚioÚUnsupportedOperationrÚSendfileNotAvailableErrorÚosÚfstatÚst_sizerXÚminÚseekr…Úsendfile) r3rÚfileÚoffsetÚcountr@ÚerrÚfsizeÚ blocksizeÚend_posÚ total_sentrrrÚ_sock_sendfile_nativeÄs:       ú   ÿ z+BaseProactorEventLoop._sock_sendfile_nativecÃsn| ¡}| ¡| ¡IdHz4|j|j|||ddIdHW| ¡|rP| ¡Sn| ¡|rh| ¡0dS)NF)Úfallback)rtrur¥Ú sock_sendfiler#r¦ry)r3ÚtransprürýrþryrrrÚ_sendfile_nativeás"ÿ ûþz&BaseProactorEventLoop._sendfile_nativecCsL|jdur|j ¡d|_|j ¡d|_|j ¡d|_|jd8_dS)Nr)rÉrNÚ_ssockrOrÒÚ _internal_fdsrJrrrrçís    z&BaseProactorEventLoop._close_self_pipecCs:t ¡\|_|_|j d¡|j d¡|jd7_dS)NFr)r Ú socketpairr rÒÚ setblockingr rJrrrrÌ÷s  z%BaseProactorEventLoop._make_self_pipec Cs¬z4|dur| ¡|j|ur"WdS|j |jd¡}Wn`tjyJYdSttfy`‚YnHt y”}z|  d||dœ¡WYd}~nd}~00||_|  |j ¡dS)Niz.Error on reading from the event loop self pipe)rUrVr4) r„rÉr…r†r rr‰r{r|r}rZrŠÚ_loop_self_reading)r3ržr\rrrr þs$ ýz(BaseProactorEventLoop._loop_self_readingcCsL|j}|durdSz| d¡Wn&tyF|jrBtjdddYn0dS)Nóz3Fail to write a null byte into the self-pipe socketTr)rÒrrXÚ_debugr rY)r3ÚcsockrrrÚ_write_to_selfs þz$BaseProactorEventLoop._write_to_selfédcs(d‡‡‡‡‡‡‡fdd„ ‰ˆ ˆ¡dS)Nc s,zŠ|durn| ¡\}}ˆjr,t dˆ||¡ˆƒ}ˆdurXˆj||ˆdd|iˆˆdnˆj||d|iˆdˆ ¡r|WdSˆj ˆ¡}Wn„t yò}zPˆ  ¡dkrȈ  d|t   ˆ¡dœ¡ˆ ¡nˆjrÞtjd ˆdd WYd}~n>d}~0tjyˆ ¡Yn0|ˆjˆ  ¡<| ˆ¡dS) Nz#%r got a new connection from %r: %rTr)rÕr7r8r×rØrczAccept failed on a socket)rUrVr zAccept failed on socket %rr)r„rr rYrÞrÔrår…rðrXr@rZr rrOrr‰rÊrŠ)ržÚconnr¸r5r\©r4Úprotocol_factoryr3r8rr×rÜrrr40sJ ÿýþ ý ÿz2BaseProactorEventLoop._start_serving..loop)N)r.)r3rrrÜr8Úbacklogr×rrrÚ_start_serving,s%z$BaseProactorEventLoop._start_servingcCsdSrHr)r3Ú event_listrrrÚ_process_eventsWsz%BaseProactorEventLoop._process_eventscCs&|j ¡D] }| ¡q |j ¡dSrH)rÊÚvaluesrNÚclear)r3Úfuturerrrræ[s z*BaseProactorEventLoop._stop_accept_futurescCs6|j | ¡d¡}|r| ¡|j |¡| ¡dSrH)rÊÚpopr@rNr…Ú _stop_servingrO)r3rrrrrr`s  z#BaseProactorEventLoop._stop_serving)NNN)N)NNN)NN)NN)NN)N)NNrN)r>rjrkr!rÔrÞrßrárârãrOrérìrírïrñrrrçrÌr rrrrærrorrr9rrlsN ÿ ÿü ÿ ÿ ÿ ÿ     þ +r)$rlÚ__all__rórör rmrÐrÍr¯Úrrrrrr r r Úlogr rÚ_FlowControlMixinÚ BaseTransportrÚ ReadTransportrpÚWriteTransportrŒr¨ÚDatagramTransportr­Ú TransportrÁrÃÚ BaseEventLooprrrrrÚsV         ÿ ÿ ÿn ÿ þ þ