Ë
    qûàgµ  ã                   óZ  — d dl mZ d dlZ	 d dlZd dlmZ  eej                  «       ed«      k  r ed«      ‚d dlm
Z
mZ d dlmZ d dlZd dlZd dlmZ d d	lmZ  eej*                  d
d«      Z eej*                  dd«      Zdd„Zd„ Zd„ Zd„ Z G d„ de«      Zy# e	$ r	  ed«      ‚w xY w)é    )ÚpartialN)Úparsez0.24.1z2eventlet worker requires eventlet 0.24.1 or higher)ÚhubsÚgreenthread)ÚGreenSocket)ÚAsyncWorker)Ússl_wrap_socketÚ
WSGI_LOCALÚALREADY_HANDLEDc                 ó&  — | j                  «       dk(  rt        d«      ‚|r|j                  |«       |rt        |d«      nd}d}|j                  }| j
                  }	 	 |rt        ||z
  |«      }|dk  rn:t         ||«      «      }|sn&	 	  ||«      }	||	z  }|	t        |«      k  r||	d  }nnŒ$ŒQ||dkD  r"t        |d«      r|j                  ||z   «       S S S # t        $ r Y ŒZw xY w# |dkD  r"t        |d«      r|j                  ||z   «       w w w xY w)Nr   z&non-blocking sockets are not supportedi    Úseek)
Ú
gettimeoutÚ
ValueErrorr   ÚminÚreadÚsendÚ
memoryviewÚlenÚBlockingIOErrorÚhasattr)
ÚselfÚfileÚoffsetÚcountÚ	blocksizeÚ
total_sentÚ	file_readÚ	sock_sendÚdataÚsents
             úX/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/gunicorn/workers/geventlet.pyÚ_eventlet_socket_sendfiler"      s=  € ð ‡�Ó˜AÒÜÐAÓBÐBÙØ�	‰	�&ÔÙ$)”�E˜4Ô ¨t€IØ€Jà—	‘	€IØ—	‘	€Ið+ØÙÜ ¨
Ñ 2°IÓ>�	Ø ’>ØÜ™i¨	Ó2Ó3ˆDÙØØð	Ù$ T›?�Dð  $Ñ&�JØœc $›iÒ'Ø# D E˜{™àð ð ð& à˜Š>œg d¨FÔ3Ø�I‰I�f˜zÑ)Õ*ð 4ˆ>øô 'ò Ùðûð ˜Š>œg d¨FÔ3Ø�I‰I�f˜zÑ)Õ*ð 4ˆ>ús0   Á-C' ÂC ÂC' Ã	C$Ã!C' Ã#C$Ã$C' Ã')Dc                 óz  — t         j                  j                  |«      }t         j                  j	                  «       }	 	 | j                  «       \  }}|j                  |||«      }|j                  t        ||«       d\  }}}ŒE# t         j                  $ r# | j                  «        |j                  «        Y yw xY w)zÑ
    Serve requests forever.

    This code is nearly identical to ``eventlet.convenience.serve`` except
    that it attempts to join the pool at the end, which allows for gunicorn
    graceful shutdowns.
    )NNNN)ÚeventletÚ	greenpoolÚ	GreenPoolr   Ú
getcurrentÚacceptÚspawnÚlinkÚ_eventlet_stopÚ	StopServeÚcloseÚwaitall)ÚsockÚhandleÚconcurrencyÚpoolÚ	server_gtÚconnÚaddrÚgts           r!   Ú_eventlet_server7   E   s£   € ô ×Ñ×'Ñ'¨Ó4€DÜ×$Ñ$×/Ñ/Ó1€Ià
ð	ØŸ™›‰JˆD�$Ø—‘˜F D¨$Ó/ˆBØ�G‰G”N I¨tÔ4Ø-‰NˆD�$˜ð øô ×!Ñ!ò 	Ø�J‰JŒLØ�L‰LŒNÙð	ús   Á AB Â3B:Â9B:c                 ó  — 	 	 | j                  «        |j                  «        y# |j                  «        w xY w# t        j                  $ r Y yt        $ r+ t        j                  |gt        j                  «       ¢­Ž  Y yw xY w)z¯
    Stop a greenlet handling a request and close its connection.

    This code is lifted from eventlet so as not to depend on undocumented
    functions in the library.
    N)	Úwaitr-   ÚgreenletÚGreenletExitÚ	Exceptionr   ÚkillÚsysÚexc_info)ÚclientÚserverr4   s      r!   r+   r+   \   s`   € ð2ð	Ø�K‰KŒMà�J‰J�LøˆD�J‰J�LûÜ× Ñ ò ÙÜò 2Ü×Ñ˜Ð1¤#§,¡,£.Õ1ð2ús!   ƒ$ “9 ¤6¶9 ¹BÁ0BÂ Bc                  óD   — t        t        d«      st        t        _        y y )NÚsendfile)r   r   r"   rC   © ó    r!   Úpatch_sendfilerF   n   s   € ô ”; 
Ô+Ü8ŒÕð ,rE   c                   óX   ‡ — e Zd Zd„ Zˆ fd„Zˆ fd„Zˆ fd„Zˆ fd„Zd„ Zˆ fd„Z	d„ Z
ˆ xZS )	ÚEventletWorkerc                 óh   — t        j                  «        t        j                  «        t	        «        y ©N)r   Úuse_hubr$   Úmonkey_patchrF   ©r   s    r!   ÚpatchzEventletWorker.patch~   s   € Ü�‰ŒÜ×ÑÔÜÕrE   c                 ó~   •— t        t        dd «      r
t        «       ‚|t        k(  r
t        «       ‚t        ‰| �  |«      S )NÚalready_handled)ÚgetattrÚEVENTLET_WSGI_LOCALÚStopIterationÚEVENTLET_ALREADY_HANDLEDÚsuperÚis_already_handled)r   ÚrespiterÚ	__class__s     €r!   rV   z!EventletWorker.is_already_handledƒ   s:   ø€ äÔ&Ð(9¸4Ô@Ü“/Ð!àÔ/Ò/Ü“/Ð!Ü‰wÑ)¨(Ó3Ð3rE   c                 óB   •— | j                  «        t        ‰| �	  «        y rJ   )rN   rU   Úinit_process)r   rX   s    €r!   rZ   zEventletWorker.init_processŒ   s   ø€ Ø�
‰
ŒÜ‰ÑÕrE   c                 óD   •— t        j                  t        ‰| �  ||«       y rJ   )r$   r)   rU   Úhandle_quit©r   ÚsigÚframerX   s      €r!   r\   zEventletWorker.handle_quit�   ó   ø€ Ü�‰”u‘wÑ*¨C°Õ7rE   c                 óD   •— t        j                  t        ‰| �  ||«       y rJ   )r$   r)   rU   Úhandle_usr1r]   s      €r!   rb   zEventletWorker.handle_usr1“   r`   rE   c                 ó^   — t        j                  | j                  j                  xs d d«      S )NF)r$   ÚTimeoutÚcfgÚ	keepaliverM   s    r!   Útimeout_ctxzEventletWorker.timeout_ctx–   s$   € Ü×Ñ §¡× 2Ñ 2Ò :°d¸EÓBÐBrE   c                 ó€   •— | j                   j                  rt        || j                   «      }t        ‰| �  |||«       y rJ   )re   Úis_sslr	   rU   r0   )r   Úlistenerr@   r5   rX   s       €r!   r0   zEventletWorker.handle™   s.   ø€ Ø�8‰8�?Š?Ü$ V¨T¯X©XÓ6ˆFÜ‰‰�x ¨Õ.rE   c                 óB  — g }| j                   D ]€  }t        |«      }|j                  d«       t        | j                  |«      }t        j                  t        ||| j                  «      }|j                  |«       t        j                  d«       Œ‚ | j                  r2| j                  «        t        j                  d«       | j                  rŒ2| j                  «        d }	 t        j                  | j                  j                  «      5 }|D ]%  }|j!                  t        j"                  «       «       Œ' |D ]  }|j%                  «        Œ 	 d d d «       y # 1 sw Y   y xY w# t
        j                  $ r'}||k7  r‚ |D ]  }|j!                  «        Œ Y d }~y d }~ww xY w)Né   g        g      ð?)Úsocketsr   Úsetblockingr   r0   r$   r)   r7   Úworker_connectionsÚappendÚsleepÚaliveÚnotifyrd   re   Úgraceful_timeoutr=   r,   r9   )	r   Ú	acceptorsr/   ÚgsockÚhfunÚacceptorÚtÚaÚtes	            r!   ÚrunzEventletWorker.runž   s[  € Øˆ	Ø—L‘Lò 	 ˆDÜ Ó%ˆEØ×Ñ˜aÔ Ü˜4Ÿ;™;¨Ó.ˆDÜ—~‘~¤o°u¸dØ&*×&=Ñ&=ó?ˆHð ×Ñ˜XÔ&Ü�N‰N˜3Õð	 ð �jŠjØ�K‰KŒMÜ�N‰N˜3Ôð �j‹jð 	�‰ŒØˆð
	Ü×!Ñ! $§(¡(×";Ñ";Ó<ð ÀØ"ò 1�AØ—F‘Fœ8×-Ñ-Ó/Õ0ð1à"ò �AØ—F‘F•Hñ÷÷ ñ ûô
 ×Ñò 	Ø�QŠwØØò �Ø—‘•õûð	ús7   Ã#)E$ ÄAEÅE$ ÅE!ÅE$ Å!E$ Å$FÅ7FÆF)Ú__name__Ú
__module__Ú__qualname__rN   rV   rZ   r\   rb   rg   r0   r|   Ú__classcell__)rX   s   @r!   rH   rH   |   s,   ø„ òô
4ôô8ô8òCô/ö
rE   rH   )r   N)Ú	functoolsr   r>   r$   Úpackaging.versionr   Úparse_versionÚ__version__ÚRuntimeErrorÚImportErrorr   r   Úeventlet.greenior   Úeventlet.wsgir:   Úgunicorn.workers.base_asyncr   Úgunicorn.sockr	   rQ   ÚwsgirR   rT   r"   r7   r+   rF   rH   rD   rE   r!   ú<module>rŒ      s»   ðõ
 Û 
ðQÛõ 9Ù�X×)Ñ)Ó*©]¸8Ó-DÒDÙÐOÓPÐPç &Ý (Û Û å 3Ý )ñ ˜hŸm™m¨\¸4Ó@Ð Ù" 8§=¡=Ð2CÀTÓJÐ ó#+òLò.2ò$9ô>�[õ >øðe ò MÙ
ÐKÓ
LÐLðMús   ŒB ÂB*