Ë ‚Ö¦iãkãól—dZddlZddlZddlZddlZddlZeed«redz ZddlmZddlm Z ddlm Z dd lm Z dd lm Z dd l mZdd lmZd Zdedœd„Zdedœd„Zeed«rdedœd„Zdedœd„ZGd„de j,«ZGd„dee j,«ZGd„d«ZGd„d«Zy))Ú StreamReaderÚ StreamWriterÚStreamReaderProtocolÚopen_connectionÚ start_serveréNÚAF_UNIX)Úopen_unix_connectionÚstart_unix_serveré)Ú coroutines)Úevents)Ú exceptions)Úformat_helpers)Ú protocols)Úlogger)Úsleepi)Úlimitc‹óÖ‡ K—tj«}t||¬«}t||¬«Š |jˆ fd„||fi|¤Žƒd{–—†\}}t |‰ ||«}||fS7Œ­w)aÂA wrapper for create_connection() returning a (reader, writer) pair. The reader returned is a StreamReader instance; the writer is a StreamWriter instance. The arguments are all the usual arguments to create_connection() except protocol_factory; most common are positional host and port, with various optional keyword arguments following. Additional optional keyword arguments are loop (to set the event loop instance to use) and limit (to set the buffer limit passed to the StreamReader). (If you want to customize the StreamReader and/or StreamReaderProtocol classes, just copy the code -- there's really nothing special here except some convenience.) ©rÚloop©rcó•—‰S©N©©Úprotocols€ú(/usr/lib64/python3.12/asyncio/streams.pyÚz!open_connection..1sø€‘óN)r Úget_running_looprrÚcreate_connectionr) ÚhostÚportrÚkwdsrÚreaderÚ transportÚ_Úwriterrs @rrrsxøèø€ô& × "Ñ "Ó $€DÜ  ¨DÔ 1€FÜ# F°Ô6€HØ/˜×/Ñ/Û˜$ ñ.Ø(,ñ.÷.�L€Iˆqä ˜) X¨v°tÓ <€FØ �6ˆ>Ðð.úsƒA A)Á A'ÁA)c‹ó„‡‡‡K—tj«Šˆˆˆfd„}‰j|||fi|¤Žƒd{–—†S7Œ­w)a’Start a socket server, call back for each client connected. The first parameter, `client_connected_cb`, takes two parameters: client_reader, client_writer. client_reader is a StreamReader object, while client_writer is a StreamWriter object. This parameter can either be a plain callback function or a coroutine; if it is a coroutine, it will be automatically converted into a Task. The rest of the arguments are all the usual arguments to loop.create_server() except protocol_factory; most common are positional host and port, with various optional keyword arguments following. The return value is the same as loop.create_server(). Additional optional keyword argument is limit (to set the buffer limit passed to the StreamReader). The return value is the same as loop.create_server(), i.e. a Server object which can be used to stop the service. có>•—t‰‰¬«}t|‰‰¬«}|S©Nrr©rr©r%rÚclient_connected_cbrrs €€€rÚfactoryzstart_server..factoryNs&ø€Ü E°Ô5ˆÜ'¨Ð0CØ-1ô3ˆàˆrN)r r Ú create_server)r.r"r#rr$r/rs` ` @rrr6s@úèø€ô, × "Ñ "Ó $€Döð $�×#Ñ# G¨T°4Ñ@¸4Ñ@× @Ð@Ð @ús…4A¹>ºAc‹óÔ‡K—tj«}t||¬«}t||¬«Š|jˆfd„|fi|¤Žƒd{–—†\}}t |‰||«}||fS7Œ­w)z@Similar to `open_connection` but works with UNIX Domain Sockets.rrcó•—‰Srrrs€rrz&open_unix_connection..bsø€‘HrN)r r rrÚcreate_unix_connectionr) Úpathrr$rr%r&r'r(rs @rr r Zsvøèø€ô×&Ñ&Ó(ˆä E°Ô5ˆÜ'¨°TÔ:ˆØ8˜T×8Ñ8Û ˜dñ,Ø&*ñ,÷,‰ ˆ �1ä˜i¨°6¸4Ó@ˆØ�vˆ~Ðð,úsƒA A(Á A&Á A(c‹ó‚‡‡‡K—tj«Šˆˆˆfd„}‰j||fi|¤Žƒd{–—†S7Œ­w)z=Similar to `start_server` but works with UNIX Domain Sockets.có>•—t‰‰¬«}t|‰‰¬«}|Sr+r,r-s €€€rr/z"start_unix_server..factoryks&ø€Ü!¨°DÔ9ˆFÜ+¨FÐ4GØ15ô7ˆHàˆOrN)r r Úcreate_unix_server)r.r4rr$r/rs` ` @rr r fs>úèø€ô×&Ñ&Ó(ˆö ð -�T×,Ñ,¨W°dÑC¸dÑC×CÐCÐCús …3?¸=¹?có6—eZdZdZd d„Zd„Zd„Zd„Zd„Zd„Z y) ÚFlowControlMixina)Reusable flow control logic for StreamWriter.drain(). This implements the protocol methods pause_writing(), resume_writing() and connection_lost(). If the subclass overrides these it must call the super methods. StreamWriter.drain() must wait for _drain_helper() coroutine. Ncó˜—|€tj«|_n||_d|_t j «|_d|_y©NF)r Úget_event_loopÚ_loopÚ_pausedÚ collectionsÚdequeÚ_drain_waitersÚ_connection_lost)Úselfrs rÚ__init__zFlowControlMixin.__init__~s>€Ø ˆ<Ü×.Ñ.Ó0ˆD�JàˆDŒJ؈Œ Ü)×/Ñ/Ó1ˆÔØ %ˆÕrcó�—|jrJ‚d|_|jj«rtjd|«yy)NTz%r pauses writing)r>r=Ú get_debugrÚdebug©rCs rÚ pause_writingzFlowControlMixin.pause_writing‡s:€Ø—<’<ÐÐØˆŒ Ø �:‰:× Ñ Ô !Ü �L‰LÐ,¨dÕ 3ð "rcóô—|jsJ‚d|_|jj«rtjd|«|j D]$}|j «rŒ|jd«Œ&y)NFz%r resumes writing)r>r=rFrrGrAÚdoneÚ set_result©rCÚwaiters rÚresume_writingzFlowControlMixin.resume_writing�s[€Ø�|Š|Ј|؈Œ Ø �:‰:× Ñ Ô !Ü �L‰LÐ-¨tÔ 4à×)Ô)ˆFØ—;‘;•=Ø×!Ñ! $Õ'ñ*rcóº—d|_|jsy|jD]8}|j«rŒ|€|j d«Œ(|j |«Œ:y©NT)rBr>rArKrLÚ set_exception©rCÚexcrNs rÚconnection_lostz FlowControlMixin.connection_lost—sN€Ø $ˆÔà�|Š|Ø à×)Ô)ˆFØ—;‘;•=Ø�;Ø×%Ñ% dÕ+à×(Ñ(¨Õ-ñ *rcƒóNK—|jr td«‚|jsy|jj «}|j j |« |ƒd{–—†|j j|«y7Œ #|j j|«wxYw­w)NzConnection lost)rBÚConnectionResetErrorr>r=Ú create_futurerAÚappendÚremoverMs rÚ _drain_helperzFlowControlMixin._drain_helper¤s…èø€Ø × Ò Ü&Ð'8Ó9Ð 9Ø�|Š|Ø Ø—‘×)Ñ)Ó+ˆØ ×Ñ×"Ñ" 6Ô*ð /Ø�LˆLà × Ñ × &Ñ & vÕ .ð ùà × Ñ × &Ñ & vÕ .üs0‚AB%ÁBÁ"BÁ#BÁ'B%ÂBÂB"Â"B%có—t‚r)ÚNotImplementedError©rCÚstreams rÚ_get_close_waiterz"FlowControlMixin._get_close_waiter°s€Ü!Ð!rr) Ú__name__Ú __module__Ú __qualname__Ú__doc__rDrIrOrUr[r`rrrr9r9ts%„ñó&ò4ò (ò .ò /ó"rr9cóf‡—eZdZdZdZd ˆfd„ Zed„«Zd„Zd„Z ˆfd„Z d„Z d „Z d „Z d „ZˆxZS) ra=Helper class to adapt between Protocol and StreamReader. (This is a helper class instead of making StreamReader itself a Protocol subclass, because the StreamReader has other potential uses, and to prevent the user of the StreamReader to accidentally call inappropriate methods of the protocol.) Ncó4•—t‰|�|¬«|�,tj|«|_|j |_nd|_|�||_d|_d|_d|_ d|_ ||_ d|_ |jj«|_y)NrF)ÚsuperrDÚweakrefÚrefÚ_stream_reader_wrÚ_source_tracebackÚ_strong_readerÚ_reject_connectionÚ_stream_writerÚ_taskÚ _transportÚ_client_connected_cbÚ _over_sslr=rXÚ_closed)rCÚ stream_readerr.rÚ __class__s €rrDzStreamReaderProtocol.__init__¿s‘ø€Ü ‰Ñ˜dÐÔ#Ø Ð $Ü%,§[¡[°Ó%?ˆDÔ "Ø%2×%DÑ%DˆDÕ "à%)ˆDÔ "Ø Ð *ð#0ˆDÔ Ø"'ˆÔØ"ˆÔ؈Œ ؈ŒØ$7ˆÔ!؈ŒØ—z‘z×/Ñ/Ó1ˆ� rcó<—|j€y|j«Sr)rjrHs rÚ_stream_readerz#StreamReaderProtocol._stream_readerÓs €à × !Ñ !Ð )ØØ×%Ñ%Ó'Ð'rcó€—|j}|j}||_||_|j d«du|_y)NÚ sslcontext)r=r&rnrpÚget_extra_inforr)rCr(rr&s rÚ_replace_writerz$StreamReaderProtocol._replace_writerÙs<€Ø�z‰zˆØ×$Ñ$ˆ Ø$ˆÔØ#ˆŒØ"×1Ñ1°,Ó?ÀtÐKˆ�rcóx‡‡—‰jrKddi}‰jr‰j|d<‰jj|«‰j «y‰‰_‰j }|�|j‰«‰jd«du‰_ ‰j�—t‰‰|‰j«‰_ ‰j|‰j«}tj|«rAˆˆfd„}‰jj|«‰_‰j j#|«d‰_yy)NÚmessagezpAn open stream was garbage collected prior to establishing network connection; call "stream.close()" explicitly.Úsource_tracebackrycóÌ•—|j«r‰j«y|j«}|�0‰jj d|‰dœ«‰j«yy)Nz*Unhandled exception in client_connected_cb)r}Ú exceptionr&)Ú cancelledÚcloser€r=Úcall_exception_handler)ÚtaskrTrCr&s €€rÚcallbackz6StreamReaderProtocol.connection_made..callbackøs\ø€Ø—~‘~Ô'Ø!Ÿ™Ô)ØØŸ.™.Ó*�CØ�ØŸ ™ ×9Ñ9Ø'SØ),Ø)2ñ;ôð "Ÿ™Õ)ð 'r)rmrkr=rƒÚabortrprwÚ set_transportrzrrrqrrnr Ú iscoroutineÚ create_taskroÚadd_done_callbackrl)rCr&Úcontextr%Úresr…s`` rÚconnection_madez$StreamReaderProtocol.connection_madeàs#ù€Ø × "Ò "àð@ðˆGð ×%Ò%Ø.2×.DÑ.D�Ð*Ñ+Ø �J‰J× -Ñ -¨gÔ 6Ø �O‰OÔ Ø Ø#ˆŒØ×$Ñ$ˆØ Ð Ø × Ñ  Ô +Ø"×1Ñ1°,Ó?ÀtÐKˆŒØ × $Ñ $Ð 0Ü".¨y¸$Ø/5Ø/3¯z©zó#;ˆDÔ ð×+Ñ+¨FØ,0×,?Ñ,?óAˆCä×%Ñ% cÔ*õ *ð"ŸZ™Z×3Ñ3°CÓ8�” Ø— ‘ ×,Ñ,¨XÔ6à"&ˆDÕ ð/ 1rcóf•—|j}|�$|€|j«n|j|«|jj «s9|€|jj d«n|jj|«t ‰|�|«d|_d|_ d|_ d|_ yr) rwÚfeed_eofrRrsrKrLrgrUrjrnrorp)rCrTr%rus €rrUz$StreamReaderProtocol.connection_lost s•ø€Ø×$Ñ$ˆØ Р؈{Ø—‘Õ!à×$Ñ$ SÔ)Ø�|‰|× Ñ Ô"؈{Ø— ‘ ×'Ñ'¨Õ-à— ‘ ×*Ñ*¨3Ô/Ü ‰Ñ Ô$Ø!%ˆÔØ"ˆÔ؈Œ ؈�rcóD—|j}|�|j|«yyr)rwÚ feed_data)rCÚdatar%s rÚ data_receivedz"StreamReaderProtocol.data_receiveds&€Ø×$Ñ$ˆØ Ð Ø × Ñ ˜TÕ "ð rcóZ—|j}|�|j«|jryy)NFT)rwr�rr)rCr%s rÚ eof_receivedz!StreamReaderProtocol.eof_received!s,€Ø×$Ñ$ˆØ Ð Ø �O‰OÔ Ø �>Š>ðØrcó—|jSr)rsr^s rr`z&StreamReaderProtocol._get_close_waiter,s €Ø�|‰|Ðrcó — |j}|j«r"|j«s|j«yyy#t$rYywxYwr)rsrKr�r€ÚAttributeError)rCÚcloseds rÚ__del__zStreamReaderProtocol.__del__/sM€ð #Ø—\‘\ˆFð�{‰{Œ} V×%5Ñ%5Ô%7Ø× Ñ Õ"ð&8ˆ}øôò Ù ð ús‚ AÁ A Á A ©NN)rarbrcrdrkrDÚpropertyrwr{r�rUr“r•r`ršÚ __classcell__)rus@rrr´sNø„ñðÐõ2ð(ñ(óð(ò Lò('ôTò$#ò òö #rrcóz—eZdZdZd„Zd„Zed„«Zd„Zd„Z d„Z d„Z d „Z d „Z d „Zdd „Zd„Zd d d dœd„Zd„Zy )ra'Wraps a Transport. This exposes write(), writelines(), [can_]write_eof(), get_extra_info() and close(). It adds drain() which returns an optional Future on which you can wait for flow control. It also adds a transport property which references the Transport directly. cóØ—||_||_|�t|t«sJ‚||_||_|j j «|_|jjd«yr) rpÚ _protocolÚ isinstancerÚ_readerr=rXÚ _complete_futrL)rCr&rr%rs rrDzStreamWriter.__init__Es[€Ø#ˆŒØ!ˆŒàˆ~¤¨F´LÔ!AÐAÐA؈Œ ؈Œ Ø!ŸZ™Z×5Ñ5Ó7ˆÔØ ×Ñ×%Ñ% dÕ+rcóà—|jjd|j›�g}|j�|j d|j›�«dj dj |««S)Nú transport=zreader=ú<{}>Ú )rurarpr¢rYÚformatÚjoin©rCÚinfos rÚ__repr__zStreamWriter.__repr__Os[€Ø—‘×'Ñ'¨:°d·o±oÐ5HÐ)IÐJˆØ �<‰<Ð #Ø �K‰K˜' $§,¡,Ð!1Ð2Ô 3Ø�}‰}˜SŸX™X d›^Ó,Ð,rcó—|jSr©rprHs rr&zStreamWriter.transportUs €à�‰Ðrcó:—|jj|«yr)rpÚwrite©rCr’s rr°zStreamWriter.writeYs€Ø �‰×јdÕ#rcó:—|jj|«yr)rpÚ writelinesr±s rr³zStreamWriter.writelines\s€Ø �‰×"Ñ" 4Õ(rcó6—|jj«Sr)rpÚ write_eofrHs rrµzStreamWriter.write_eof_s€Ø�‰×(Ñ(Ó*Ð*rcó6—|jj«Sr)rpÚ can_write_eofrHs rr·zStreamWriter.can_write_eofbs€Ø�‰×,Ñ,Ó.Ð.rcó6—|jj«Sr)rpr‚rHs rr‚zStreamWriter.closees€Ø�‰×$Ñ$Ó&Ð&rcó6—|jj«Sr)rpÚ is_closingrHs rrºzStreamWriter.is_closinghs€Ø�‰×)Ñ)Ó+Ð+rcƒóVK—|jj|«ƒd{–—†y7Œ­wr)r r`rHs rÚ wait_closedzStreamWriter.wait_closedksèø€Ø�n‰n×.Ñ.¨tÓ4×4Ò4ús ‚)¡'¢)Ncó:—|jj||«Sr)rprz)rCÚnameÚdefaults rrzzStreamWriter.get_extra_infons€Ø�‰×-Ñ-¨d°GÓ<Б>ˆØ�j‰j‹l×ÐØ"Ÿj™j×2Ñ2Ø �O‰O˜X zØ#°_Ø"7Ø!5ð 3ó7÷7ˆ ð (ˆŒØ× Ñ  Õ&ð øð7ús!‚8BºB »3BÁ.BÁ/BÂBcóþ—|jj«sc|jj«rt j dt «y|j«t j d|›�t «yy)Nzloop is closedz unclosed )rprºr=Ú is_closedÚwarningsÚwarnÚResourceWarningr‚rHs rršzStreamWriter.__del__šsT€Ø�‰×)Ñ)Ô+Ø�z‰z×#Ñ#Ô%Ü— ‘ Ð.´Õ@à— ‘ ” Ü— ‘   ¨$¨Ð2´OÕDð ,rr)rarbrcrdrDr¬rœr&r°r³rµr·r‚rºr¼rzrÁrÇršrrrrr;sh„ñò,ò-ð ñóðò$ò)ò+ò/ò'ò,ò5ó=ò-ð4)-Ø.2Ø-1ô'ó Errcó€—eZdZdZedfd„Zd„Zd„Zd„Zd„Z d„Z d„Z d „Z d „Z d „Zd „Zd „Zdd„Zdd„Zd„Zd„Zd„Zy)rNcól—|dkr td«‚||_|€tj«|_n||_t «|_d|_d|_d|_ d|_ d|_ |jj«r.tjtj d««|_yy)NrzLimit cannot be <= 0Fr )Ú ValueErrorÚ_limitr r<r=Ú bytearrayÚ_bufferÚ_eofÚ_waiterÚ _exceptionrpr>rFrÚ extract_stackÚsysÚ _getframerk)rCrrs rrDzStreamReader.__init__¦sš€ð �AŠ:ÜÐ3Ó4Ð 4àˆŒ Ø ˆ<Ü×.Ñ.Ó0ˆD�JàˆDŒJÜ “{ˆŒ ؈Œ ؈Œ ؈ŒØˆŒØˆŒ Ø �:‰:× Ñ Ô !Ü%3×%AÑ%AÜ— ‘ ˜aÓ ó&"ˆDÕ "ð "rcó€—dg}|jr'|jt|j«›d�«|jr|jd«|jt k7r|jd|j›�«|j r|jd|j ›�«|jr|jd|j›�«|jr|jd|j›�«|jr|jd«d jd j|««S) Nrz bytesÚeofzlimit=zwaiter=z exception=r¥Úpausedr¦r§) rÓrYÚlenrÔrÑÚ_DEFAULT_LIMITrÕrÖrpr>r¨r©rªs rr¬zStreamReader.__repr__¼së€ØÐˆØ �<Š<Ø �K‰Kœ3˜tŸ|™|Ó,Ð-¨VÐ4Ô 5Ø �9Š9Ø �K‰K˜Ô Ø �;‰;œ.Ò (Ø �K‰K˜& §¡  Ð.Ô /Ø �<Š<Ø �K‰K˜' $§,¡,Ð!1Ð2Ô 3Ø �?Š?Ø �K‰K˜* T§_¡_Ð$7Ð8Ô 9Ø �?Š?Ø �K‰K˜* T§_¡_Ð$7Ð8Ô 9Ø �<Š<Ø �K‰K˜Ô !Ø�}‰}˜SŸX™X d›^Ó,Ð,rcó—|jSr)rÖrHs rr€zStreamReader.exceptionÎs €Ø�‰Ðrcó‚—||_|j}|�*d|_|j«s|j|«yyyr)rÖrÕr�rRrSs rrRzStreamReader.set_exceptionÑsC€ØˆŒà—‘ˆØ Р؈DŒLØ×#Ñ#Ô%Ø×$Ñ$ SÕ)ð&ð rcót—|j}|�*d|_|j«s|jd«yyy)z1Wakeup read*() functions waiting for data or EOF.N)rÕr�rLrMs rÚ_wakeup_waiterzStreamReader._wakeup_waiterÚs<€à—‘ˆØ Р؈DŒLØ×#Ñ#Ô%Ø×!Ñ! $Õ'ð&ð rcó8—|j�Jd«‚||_y)NzTransport already setr®)rCr&s rr‡zStreamReader.set_transportâs€Ø�‰Ð&Ð?Ð(?Ó?Ð&Ø#ˆ�rcó¦—|jrEt|j«|jkr"d|_|jj «yyyr;)r>rÝrÓrÑrpÚresume_readingrHs rÚ_maybe_resume_transportz$StreamReader._maybe_resume_transportæs;€Ø �<Š<œC § ¡ Ó-°·±Ò<Ø ˆDŒLØ �O‰O× *Ñ *Õ ,ð=ˆrÝrÑÚ pause_readingr]r±s rr‘zStreamReader.feed_dataós©€Ø—9’9Ð8Ð8Ó8ˆ}áØ à � ‰ ×јDÔ!Ø ×ÑÔà �O‰OÐ 'Ø—L’LÜ�D—L‘LÓ! A¨¯ © ¡OÒ3ð $Ø—‘×-Ñ-Ô/ð $�• ð4ð!ð (øô 'ò 'ð#'�–ð  'úsÂB%Â%B8Â7B8cƒóRK—|j�t|›d�«‚|jrJd«‚|jr!d|_|jj «|j j«|_ |jƒd{–—†d|_y7Œ #d|_wxYw­w)zpWait until feed_data() or feed_eof() is called. If stream was paused, automatically resume it. NzF() called while another coroutine is already waiting for incoming dataz_wait_for_data after EOFF)rÕÚ RuntimeErrorrÔr>rprår=rX)rCÚ func_names rÚ_wait_for_datazStreamReader._wait_for_data sœèø€ð �<‰<Ð #ÜØ�+ð4ð5ó6ð 6ð—9’9Ð8Ð8Ó8ˆ}ð �<Š<Ø ˆDŒLØ �O‰O× *Ñ *Ô ,à—z‘z×/Ñ/Ó1ˆŒ ð Ø—,‘,× Ð àˆD�Lð ùàˆD�Lüs0‚A:B'Á=B B BÂB'ÂB B$Â$B'cƒóîK—d}t|«} |j|«ƒd{–—†}|S7Œ#tj$r}|jcYd}~Sd}~wtj $rŠ}|j j||j«r|j d|j|z…=n|j j«|j«t|jd«‚d}~wwxYw­w)aÂRead chunk of data from the stream until newline (b' ') is found. On success, return chunk that ends with newline. If only partial line can be read due to EOF, return incomplete line without terminating newline. When EOF was reached while no bytes read, empty bytes object is returned. If limit is reached, ValueError will be raised. In that case, if newline was found, complete line including newline will be removed from internal buffer. Else, internal buffer will be cleared. Limit is compared against part of the line without newline. If stream was paused, this function will automatically resume it if needed. ó Nr) rÝÚ readuntilrÚIncompleteReadErrorÚpartialÚLimitOverrunErrorrÓÚ startswithÚconsumedÚclearrærÐÚargs)rCÚsepÚseplenÚlineÚes rÚreadlinezStreamReader.readline%sÈèø€ð ˆÜ�S“ˆð (ØŸ™¨Ó,×,ˆDðˆ ð-ùÜ×-Ñ-ò Ø—9‘9Õ ûÜ×+Ñ+ò (Ø�|‰|×&Ñ& s¨A¯J©JÔ7Ø—L‘LÐ!5 !§*¡*¨vÑ"5Ð!5Ñ6à— ‘ ×"Ñ"Ô$Ø × (Ñ (Ô *ܘQŸV™V A™YÓ'Ð 'ûð  (üsJ‚C5‘.¥,¦.ªC5¬.®C2Á AÁ C2Á C5ÁC2Á(BC-Ã-C2Ã2C5cƒóðK—t|«}|dk(r td«‚|j� |j‚d} t|j«}||z |k\rO|jj ||«}|dk7rn˜|dz|z }||j kDrt jd|«‚|jrEt|j«}|jj«t j|d«‚|jd«ƒd{–—†Œ×||j kDrt jd|«‚|jd||z}|jd||z…=|j«t|«S7Œi­w) aVRead data from the stream until ``separator`` is found. On success, the data and separator will be removed from the internal buffer (consumed). Returned data will include the separator at the end. Configured stream limit is used to check result. Limit sets the maximal length of data that can be returned, not counting the separator. If an EOF occurs and the complete separator is still not found, an IncompleteReadError exception will be raised, and the internal buffer will be reset. The IncompleteReadError.partial attribute may contain the separator partially. If the data cannot be read because of over limit, a LimitOverrunError exception will be raised, and the data will be left in the internal buffer, so it can be read again. rz,Separator should be at least one-byte stringNéÿÿÿÿr z2Separator is not found, and chunk exceed the limitrôz2Separator is found, but chunk is longer than limit)rÝrÐrÖrÓÚfindrÑrr÷rÔÚbytesrúrõrñræ)rCÚ separatorrýÚoffsetÚbuflenÚisepÚchunks rrôzStreamReader.readuntilDszèø€ô(�Y“ˆØ �QŠ;ÜÐKÓLÐ Là �?‰?Ð &Ø—/‘/Ð !ð*ˆðܘŸ™Ó&ˆF𘉠&Ò(Ø—|‘|×(Ñ(¨°FÓ;�à˜2’:ðð  !™ fÑ,�ؘDŸK™KÒ'Ü$×6Ñ6ØLØó ð ð�yŠyܘdŸl™lÓ+�Ø— ‘ ×"Ñ"Ô$Ü ×4Ñ4°U¸DÓAÐAð×%Ñ% kÓ2× 2Ð 2ð=ð@ �$—+‘+Ò Ü×.Ñ.ØDÀdóLð Lð— ‘ ˜^˜d V™mÐ,ˆØ �L‰L˜˜$ ™-˜Ð (Ø ×$Ñ$Ô&Ü�U‹|Ðð 3ús‚DE6Ä E4Ä A*E6cƒóÖK—|j� |j‚|dk(ry|dkrLg} |j|j«ƒd{–—†}|sn|j|«Œ8dj |«S|j s%|j s|jd«ƒd{–—†tt|j «d|«}|j d|…=|j«|S7Œ�7ŒH­w)aÍRead up to `n` bytes from the stream. If `n` is not provided or set to -1, read until EOF, then return all read bytes. If EOF was received and the internal buffer is empty, return an empty bytes object. If `n` is 0, return an empty bytes object immediately. If `n` is positive, return at most `n` available bytes as soon as at least 1 byte is available in the internal buffer. If EOF is received before any byte is read, return an empty bytes object. Returned value is not limited with limit, configured at stream creation. If stream was paused, this function will automatically resume it if needed. NrrÚread) rÖr rÑrYr©rÓrÔrñrÚ memoryviewræ)rCÚnÚblocksÚblockr’s rr zStreamReader.readŸsÝèø€ð, �?‰?Ð &Ø—/‘/Ð !à �Š6Øà ˆqŠ5ð ˆFØØ"Ÿi™i¨¯ © Ó4×4�ÙØØ— ‘ ˜eÔ$ð ð —8‘8˜FÓ#Ð #à�|Š| D§I¢IØ×%Ñ% fÓ-× -Ð -ô”Z § ¡ Ó-¨b¨qÐ1Ó2ˆØ �L‰L˜˜!˜Ð à ×$Ñ$Ô&؈ ð5øð .ús&‚AC)ÁC%ÁAC)ÂC'ÂAC)Ã'C)cƒó´K—|dkr td«‚|j� |j‚|dk(ryt|j«|krƒ|jrEt |j«}|jj «tj||«‚|jd«ƒd{–—†t|j«|krŒƒt|j«|k(r0t |j«}|jj «n0t t|j«d|«}|jd|…=|j«|S7Œ§­w)aÏRead exactly `n` bytes. Raise an IncompleteReadError if EOF is reached before `n` bytes can be read. The IncompleteReadError.partial attribute of the exception will contain the partial read bytes. if n is zero, return empty bytes object. Returned value is not limited with limit, configured at stream creation. If stream was paused, this function will automatically resume it if needed. rz*readexactly size can not be less than zeroNrÚ readexactly) rÐrÖrÝrÓrÔrrúrrõrñr ræ)rCr Ú incompleter’s rrzStreamReader.readexactlyÒsèø€ð ˆqŠ5ÜÐIÓJÐ Jà �?‰?Ð &Ø—/‘/Ð !à �Š6Øä�$—,‘,Ó !Ò#Ø�yŠyÜ" 4§<¡<Ó0� Ø— ‘ ×"Ñ"Ô$Ü ×4Ñ4°ZÀÓCÐCà×%Ñ% mÓ4× 4Ð 4ô �$—,‘,Ó !Ó#ô ˆt�|‰|Ó  Ò !ܘŸ™Ó&ˆDØ �L‰L× Ñ Õ äœ D§L¡LÓ1°"°1Ð5Ó6ˆDØ— ‘ ˜R˜a˜RÐ Ø ×$Ñ$Ô&؈ ð 5ús‚B,EÂ.EÂ/Eà B Ecó—|SrrrHs rÚ __aiter__zStreamReader.__aiter__ûs€Øˆ rcƒóXK—|j«ƒd{–—†}|dk(rt‚|S7Œ­w)Nr)rÚStopAsyncIteration)rCÚvals rÚ __anext__zStreamReader.__anext__þs+èø€Ø—M‘M“O×#ˆØ �#Š:Ü$Ð $؈ ð$ús ‚*–(—*)ró)r)rarbrcrkrÞrDr¬r€rRrâr‡rær�rér‘rñrrôr rrrrrrrr¢sf„àÐà+°$ó"ò,-ò$ò*ò(ò$ò-ò ò.ò$ò, ò8ó>Yóv1òf'òRórrr›r)Ú__all__r?ÚsocketrØrËrhÚhasattrÚr r rrrÚlogrÚtasksrrÞrrr r ÚProtocolr9rrrrrrÚr sÙðð '€óÛ Û ÛÛá ˆ6�9ÔØ Ð<Ñ<€GåÝÝÝÝÝÝð€ðØ .ôð8AØ+ôAñB ˆ6�9Ôð Ø)7ô ð DØ&4ô Dô="�y×)Ñ)ô="ô@D#Ð+¨Y×-?Ñ-?ôD#÷NeEñeE÷N`ò`r