Ë
    qûàg2  ã                   ó  — d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
 d dlmZmZ d dlmZ dZ ej                   d«      Z ej$                  e«      Z G d„ d	«      Z G d
„ de j,                  «      Zd„ Zd„ Zd„ Zd„ Z G d„ d«      Zy)é    N)ÚTOKEN_RE)ÚConfigurationProblemÚInvalidHeaderÚInvalidHeaderName)ÚSERVER_SOFTWAREÚSERVER)Úutiliÿÿÿ?z[ \t\x21-\x7e\x80-\xff]*c                   ó   — e Zd Zdd„Zd„ Zy)ÚFileWrapperc                 ó\   — || _         || _        t        |d«      r|j                  | _        y y )NÚclose)ÚfilelikeÚblksizeÚhasattrr   )Úselfr   r   s      úP/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/gunicorn/http/wsgi.pyÚ__init__zFileWrapper.__init__   s*   € Ø ˆŒØˆŒÜ�8˜WÔ%Ø!Ÿ™ˆD�Jð &ó    c                 ó`   — | j                   j                  | j                  «      }|r|S t        ‚©N)r   Úreadr   Ú
IndexError)r   ÚkeyÚdatas      r   Ú__getitem__zFileWrapper.__getitem__#   s(   € Ø�}‰}×!Ñ! $§,¡,Ó/ˆÙØˆKÜÐr   N)i    )Ú__name__Ú
__module__Ú__qualname__r   r   © r   r   r   r      s   „ ó(ór   r   c                   ó   — e Zd Zd„ Zd„ Zy)ÚWSGIErrorsWrapperc                 ó@  — t        j                  d«      }|j                  }g | _        |j                  dk(  r.| j                  j                  t        j                  «       |dd  }|D ]4  }t        |d«      sŒ| j                  j                  |j                  «       Œ6 y )Nzgunicorn.errorú-é   Ústream)
ÚloggingÚ	getLoggerÚhandlersÚstreamsÚerrorlogÚappendÚsysÚstderrr   r%   )r   Úcfgr*   r(   Úhs        r   r   zWSGIErrorsWrapper.__init__,   sƒ   € ô ×$Ñ$Ð%5Ó6ˆØ×$Ñ$ˆØˆŒà�<‰<˜3ÒØ�L‰L×Ñ¤§
¡
Ô+Ø  �|ˆHàò 	.ˆAÜ�q˜(Õ#Ø—‘×#Ñ# A§H¡HÕ-ñ	.r   c                 óÈ   — | j                   D ]$  }	 |j                  |«       |j	                  «        Œ& y # t        $ r# |j                  |j                  d«      «       Y Œ>w xY w)NzUTF-8)r)   ÚwriteÚUnicodeErrorÚencodeÚflush)r   r   r%   s      r   r1   zWSGIErrorsWrapper.write<   sW   € Ø—l‘lò 	ˆFð3Ø—‘˜TÔ"ð �L‰L�Nñ	øô  ò 3Ø—‘˜TŸ[™[¨Ó1Ö2ð3ús   ‘5µ)A!Á A!N)r   r   r   r   r1   r   r   r   r!   r!   *   s   „ ò.ó r   r!   c           	      óT   — t        | «      dd| j                  dkD  dt        dt        dœS )N©r$   r   Fr$   T)zwsgi.errorszwsgi.versionzwsgi.multithreadzwsgi.multiprocesszwsgi.run_oncezwsgi.file_wrapperzwsgi.input_terminatedr   )r!   Úworkersr   r   )r.   s    r   Úbase_environr8   E   s1   € ä(¨Ó-ØØ!Ø!Ÿk™k¨A™oØÜ(Ø!%Ü*ñ	ð 	r   c                 ó  — t        |«      }|j                  | j                  || j                  | j                  | j
                  ddj                  | j                  D �cg c]  }t        |«      ‘Œ c}«      z  dœ«       |S c c}w )NzHTTP/%sú.)z
wsgi.inputzgunicorn.socketÚREQUEST_METHODÚQUERY_STRINGÚRAW_URIÚSERVER_PROTOCOL)	r8   ÚupdateÚbodyÚmethodÚqueryÚuriÚjoinÚversionÚstr)ÚreqÚsockr.   ÚenvÚvs        r   Údefault_environrK   R   sm   € Ü
�sÓ
€CØ‡J�JØ—h‘hØØŸ*™*ØŸ	™	Ø—7‘7Ø$ s§x¡xÀÇÁÖ0M¸A´°QµÒ0MÓ'NÑNñô ð €Jùò 1Ns   ÁBc                 ót   — | j                   }|si S |d   |d   t        |d   «      |d   t        |d   «      dœS )NÚproxy_protocolÚclient_addrÚclient_portÚ
proxy_addrÚ
proxy_port)ÚPROXY_PROTOCOLÚREMOTE_ADDRÚREMOTE_PORTÚ
PROXY_ADDRÚ
PROXY_PORT)Úproxy_protocol_inforF   )rG   Úinfos     r   Úproxy_environrY   _   sT   € Ø×"Ñ"€DáØˆ	ð Ð/Ñ0Ø˜MÑ*Ü˜4 Ñ.Ó/Ø˜<Ñ(Ü˜$˜|Ñ,Ó-ñð r   c                 óä  — t        | ||«      }t        | ||«      }d }t        j                  j	                  dd«      }| j
                  D ]}  \  }	}
|	dk(  r%|
j                  «       dk(  r8|j                  d«       n&|	dk(  r|
}n|	dk(  r|
}n|	dk(  r|
|d<   ŒK|	d	k(  r|
|d
<   ŒVd|	j                  dd«      z   }||v r
||   ›d|
›�}
|
||<   Œ | j                  |d<   t        |t        «      r||d<   n=t        |t        «      r|j                  «       |d<   n|d   |d<   t        |d   «      |d<   t        |t        «      r¥|j                  d«      }t        |«      dk(  r†|rs|j                  d«      }t        |«      dk(  re| j                  dk(  r|j!                  d«       nD| j                  dk(  r|j!                  d«       n#|j!                  d«       n|j!                  d«       |d   |d<   t        |d   «      |d<   | j"                  }|r0|j%                  |«      st'        d|›d|›�«      ‚|t        |«      d  }t)        j*                  |«      |d<   ||d<   |j-                  t/        | «      «       ||fS )NÚSCRIPT_NAMEÚ ÚEXPECTz100-continues   HTTP/1.1 100 Continue

ÚHOSTzCONTENT-TYPEÚCONTENT_TYPEzCONTENT-LENGTHÚCONTENT_LENGTHÚHTTP_r#   Ú_ú,zwsgi.url_schemerS   r   r$   rT   ú:ÚhttpéP   Úhttpsi»  ÚSERVER_NAMEÚSERVER_PORTzRequest path z! does not start with SCRIPT_NAME Ú	PATH_INFO)ÚResponserK   ÚosÚenvironÚgetÚheadersÚlowerÚsendÚreplaceÚschemeÚ
isinstancerF   ÚbytesÚdecodeÚsplitÚlenr+   ÚpathÚ
startswithr   r	   Úunquote_to_wsgi_strr?   rY   )rG   rH   ÚclientÚserverr.   Úresprm   ÚhostÚscript_nameÚhdr_nameÚ	hdr_valuer   Ú	path_infos                r   Úcreater„   n   s†  € Ü�C˜˜sÓ#€Dô ˜c 4¨Ó-€Gð €DÜ—*‘*—.‘. °Ó3€Kð  #Ÿ{™{ò !Ñˆ�)Ø�xÒà�‰Ó  NÒ2Ø—	‘	Ð:Õ;Ø˜ÒØ‰DØ˜Ò&Ø#‰KØ˜Ò'Ø&/ˆG�NÑ#ØØÐ)Ò)Ø(1ˆGÐ$Ñ%Øð ˜×(Ñ(¨¨cÓ2Ñ2ˆØ�'‰>Ø#*¨3£<±Ð;ˆIØ ˆ�Šð+!ð0 "%§¡€GÐÑô �&œ#ÔØ!'ˆ�ÒÜ	�FœEÔ	"Ø!'§¡£ˆ�Òà!'¨¡ˆ�ÑÜ!$ V¨A¡Y£ˆ�Ñô �&œ#ÔØ—‘˜cÓ"ˆÜˆv‹;˜!ÒáØŸ™ C›�Ü�v“; !Ò#Ø—z‘z VÒ+ØŸ™ bÕ)ØŸ™ wÒ.ØŸ™ cÕ*àŸ™ bÕ)ð —‘˜bÔ!Ø# A™Y€GˆMÑÜ  ¨¡›^€GˆMÑð —‘€IÙØ×#Ñ# KÔ0Ý&â™Kð)ó*ð *ð œc +Ó.Ð/Ð0ˆ	Ü×3Ñ3°IÓ>€GˆKÑØ(€GˆMÑð ‡N�N”= Ó%Ô&Ø�ˆ=Ðr   c                   ó\   — e Zd Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zy)rk   c                 ó´   — || _         || _        t        | _        d | _        d| _        d| _        g | _        d| _        d | _	        d| _
        d| _        || _        y )NFr   )rG   rH   r   rE   ÚstatusÚchunkedÚ
must_closero   Úheaders_sentÚresponse_lengthÚsentÚupgrader.   )r   rG   rH   r.   s       r   r   zResponse.__init__Ê   sX   € ØˆŒØˆŒ	ÜˆŒØˆŒØˆŒØˆŒØˆŒØ!ˆÔØ#ˆÔØˆŒ	ØˆŒØˆ�r   c                 ó   — d| _         y )NT)r‰   ©r   s    r   Úforce_closezResponse.force_closeØ   s	   € Øˆ�r   c                 óô   — | j                   s| j                  j                  «       ry| j                  €| j                  ry| j                  j
                  dk(  ry| j                  dk  s| j                  dv ryy)NTFÚHEADéÈ   ©éÌ   i0  )r‰   rG   Úshould_closer‹   rˆ   rA   Ústatus_coder�   s    r   r–   zResponse.should_closeÛ   sd   € Ø�?Š?˜dŸh™h×3Ñ3Ô5ØØ×ÑÐ+¨t¯|ª|ØØ�8‰8�?‰?˜fÒ$ØØ×Ñ˜cÒ! T×%5Ñ%5¸Ñ%CØØr   Nc                 ó°  — |r<	 | j                   r,| j                  r t        j                  |d   |d   |d   «       d }n| j                   �t	        d«      ‚|| _         	 t        | j                   j                  «       d   «      | _        | j                  |«       | j                  «       | _        | j                  S # d }w xY w# t        $ r
 d | _        Y ŒKw xY w)Nr   r$   é   zResponse headers already set!)r‡   rŠ   r	   ÚreraiseÚAssertionErrorÚintrw   r—   Ú
ValueErrorÚprocess_headersÚ
is_chunkedrˆ   r1   )r   r‡   ro   Úexc_infos       r   Ústart_responsezResponse.start_responseæ   sÄ   € Ùð Ø—;’; 4×#4Ò#4Ü—L‘L ¨!¡¨h°q©k¸8ÀA¹;ÔGà‘Ø�[‰[Ð$Ü Ð!@ÓAÐAàˆŒð
	$Ü" 4§;¡;×#4Ñ#4Ó#6°qÑ#9Ó:ˆDÔð 	×Ñ˜WÔ%Ø—‘Ó(ˆŒØ�z‰zÐøð!  ‘ûô ò 	$Ø#ˆDÖð	$ús   „8B; Á+C Â;B?ÃCÃCc                 ó   — |D �]H  \  }}t        |t        «      st        d|z  «      ‚t        j                  |«      st        d|z  «      ‚t        |t        «      st        d|z  «      ‚t        j	                  |«      st        d|z  «      ‚|j                  d«      }|j                  «       }|dk(  rt        |«      | _        nlt        j                  |«      rW|dk(  r|j                  «       dk(  r=d| _        n5|dk(  r0|j                  «       dk(  r| j                  j!                  ||f«       �Œ,| j                  j!                  ||f«       �ŒK y )	Nz%r is not a stringz%rz 	zcontent-lengthÚ
connectionr�   TÚ	websocket)rt   rF   Ú	TypeErrorr   Ú	fullmatchr   ÚHEADER_VALUE_REr   Ústriprp   rœ   r‹   r	   Ú
is_hoppishr�   ro   r+   )r   ro   ÚnameÚvalueÚlnames        r   rž   zResponse.process_headersþ   s%  € Ø"ó 	/‰KˆD�%Ü˜d¤CÔ(ÜÐ 4°tÑ ;Ó<Ð<ä×%Ñ% dÔ+Ü'¨¨t©Ó4Ð4ä˜e¤SÔ)ÜÐ 4°uÑ <Ó=Ð=ä"×,Ñ,¨UÔ3Ü# D¨5¡LÓ1Ð1ð —K‘K Ó&ˆEØ—J‘J“LˆEØÐ(Ò(Ü'*¨5£z�Õ$Ü—‘ Ô&Ø˜LÒ(à—{‘{“}¨	Ò1Ø'+˜�Ø˜iÒ'Ø—{‘{“}¨Ò3ØŸ™×+Ñ+¨T°5¨MÔ:ñ Ø�L‰L×Ñ  u Ö.ñ;	/r   c                 ó¤   — | j                   �y| j                  j                  dk  ry| j                  j                  dk(  ry| j                  dv ryy)NFr6   r’   r”   T)r‹   rG   rE   rA   r—   r�   s    r   rŸ   zResponse.is_chunked  sQ   € ð ×ÑÐ+ØØ�X‰X×Ñ Ò'ØØ�X‰X�_‰_ Ò&àØ×Ñ Ñ+ð Ør   c                 ób  — | j                   rd}n| j                  «       rd}nd}d| j                  j                  d   ›d| j                  j                  d   ›d| j                  ›d	�d
| j                  z  dt        j                  «       z  d|z  g}| j                  r|j                  d«       |S )Nr�   r   z
keep-alivezHTTP/r   r:   r$   ú ú
zServer: %s
z
Date: %s
zConnection: %s
zTransfer-Encoding: chunked
)	r�   r–   rG   rE   r‡   r	   Ú	http_daterˆ   r+   )r   r£   ro   s      r   Údefault_headerszResponse.default_headers/  sœ   € à�<Š<Ø"‰JØ×ÑÔ Ø ‰Jà%ˆJøð $(§8¡8×#3Ñ#3°AÓ#6Ø#'§8¡8×#3Ñ#3°AÓ#6¸¿»ðEà˜tŸ|™|Ñ+ØœTŸ^™^Ó-Ñ-Ø  :Ñ-ð
ˆð �<Š<Ø�N‰NÐ;Ô<Øˆr   c           
      óP  — | j                   ry | j                  «       }|j                  | j                  D ��cg c]  \  }}|›d|›d�‘Œ c}}«       ddj	                  |«      z  }t        j                  | j                  t        j                  |d«      «       d| _         y c c}}w )Nz: r°   z%s
r\   zlatin-1T)	rŠ   r²   Úextendro   rD   r	   r1   rH   Úto_bytestring)r   ÚtosendÚkrJ   Ú
header_strs        r   Úsend_headerszResponse.send_headersC  s   € Ø×ÒØØ×%Ñ%Ó'ˆØ�‰¸¿¹×F±°°A¢qª!Ò,ÓFÔGà §¡¨£Ñ/ˆ
Ü�
‰
�4—9‘9œd×0Ñ0°¸YÓGÔHØ ˆÕùó	 Gs   ¸B"
c                 óÄ  — | j                  «        t        |t        «      st        d|z  «      ‚t	        |«      }|}| j
                  �G| j                  | j
                  k\  ry t        | j
                  | j                  z
  |«      }||k  r|d | }| j                  r|dk(  ry | xj                  |z  c_        t        j                  | j                  || j                  «       y )Nz%r is not a byter   )r¹   rt   ru   r¥   rx   r‹   rŒ   Úminrˆ   r	   r1   rH   )r   ÚargÚarglenr¶   s       r   r1   zResponse.writeM  s½   € Ø×ÑÔÜ˜#œuÔ%ÜÐ.°Ñ4Ó5Ð5Ü�S“ˆØˆØ×ÑÐ+Ø�y‰y˜D×0Ñ0Ò0àä˜×-Ñ-°·	±	Ñ9¸6ÓBˆFØ˜ŠØ˜'˜6�l�ð �<Š<˜F ašKØà�	Š	�VÑ�	Ü�
‰
�4—9‘9˜c 4§<¡<Õ0r   c                 ó2   — | j                   j                  duS )NF)r.   Úsendfiler�   s    r   Úcan_sendfilezResponse.can_sendfiled  s   € Ø�x‰x× Ñ ¨Ð-Ð-r   c                 ób  — | j                   j                  s| j                  «       syt        j                  |j
                  «      sy|j
                  j                  «       }	 t        j                  |dt        j                  «      }| j                  €%t        j                  |«      j                  }||z
  }n| j                  }| j!                  «        | j#                  «       r/d|z  }| j$                  j'                  |j)                  d«      «       |dkD  r(| j$                  j+                  |j
                  ||¬«       | j#                  «       r| j$                  j'                  d«       t        j                  ||t        j,                  «       y# t        t        j                  f$ r Y yw xY w)NFr   z%X
zutf-8)ÚoffsetÚcounts   
T)r.   Úis_sslrÀ   r	   Ú
has_filenor   Úfilenorl   ÚlseekÚSEEK_CURr‹   ÚfstatÚst_sizeÚOSErrorÚioÚUnsupportedOperationr¹   rŸ   rH   Úsendallr3   r¿   ÚSEEK_SET)r   ÚrespiterrÆ   rÂ   ÚfilesizeÚnbytesÚ
chunk_sizes          r   r¿   zResponse.sendfileg  sK  € Ø�8‰8�?Š? $×"3Ñ"3Ô"5Øä�‰˜x×0Ñ0Ô1Øà×"Ñ"×)Ñ)Ó+ˆð	Ü—X‘X˜f a¬¯©Ó5ˆFØ×#Ñ#Ð+ÜŸ8™8 FÓ+×3Ñ3�Ø! FÑ*‘à×-Ñ-�ð 	×ÑÔà�?‰?ÔØ! FÑ*ˆJØ�I‰I×Ñ˜j×/Ñ/°Ó8Ô9Ø�AŠ:Ø�I‰I×Ñ˜x×0Ñ0¸ÀvÐÔNà�?‰?ÔØ�I‰I×Ñ˜gÔ&ä
�‰�˜¤§¡Ô-àøô! œ×0Ñ0Ð1ò 	Ùð	ús   Á#A"F ÆF.Æ-F.c                 óX   — | j                  |«      s|D ]  }| j                  |«       Œ y y r   )r¿   r1   )r   rÐ   Úitems      r   Ú
write_filezResponse.write_fileˆ  s.   € Ø�}‰}˜XÔ&Ø ò !�Ø—
‘
˜4Õ ñ!ð 'r   c                 ó–   — | j                   s| j                  «        | j                  r!t        j                  | j
                  d«       y y )Nr   )rŠ   r¹   rˆ   r	   Úwrite_chunkrH   r�   s    r   r   zResponse.close�  s7   € Ø× Ò Ø×ÑÔØ�<Š<Ü×Ñ˜TŸY™Y¨Õ,ð r   r   )r   r   r   r   r�   r–   r¡   rž   rŸ   r²   r¹   r1   rÀ   r¿   rÖ   r   r   r   r   rk   rk   È   sE   „ òòò	óò0/ò@ò"ò(!ò1ò..òòB!ó
-r   rk   )rÌ   r&   rl   Úrer,   Úgunicorn.http.messager   Úgunicorn.http.errorsr   r   r   Úgunicornr   r   r	   ÚBLKSIZEÚcompiler§   r'   r   Úlogr   Ú	RawIOBaser!   r8   rK   rY   r„   rk   r   r   r   ú<module>rá      s�   ðó
 
Û Û 	Û 	Û 
å *ß WÑ Wß ,Ý ð €ð �"—*‘*Ð8Ó9€à€g×Ñ˜Ó!€÷ñ ô˜Ÿ™ô ò6
ò
òòW÷tI-ò I-r   