§
    k•jO$  ã                   ó  — d dl Z d dlZd dlZ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	 ej
        Z G d„ d¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d	„ d
e¦  «        Zd„ Zdd„Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )é    N)Úutilc                   ó<   — e Zd Zd
d„Zd„ Zd„ Zdd„Zd„ Zd„ Zd	„ Z	dS )Ú
BaseSocketNc                 ó0  — || _         || _        || _        |€'t          j        | j        t          j        ¦  «        }d}n;t          j        || j        t          j        ¦  «        }t          j        |¦  «         d}|  	                    ||¬¦  «        | _
        d S )NFT©Úbound)ÚlogÚconfÚcfg_addrÚsocketÚFAMILYÚSOCK_STREAMÚfromfdÚosÚcloseÚset_optionsÚsock)ÚselfÚaddressr
   r	   Úfdr   r   s          ú\/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/gunicorn/sock.pyÚ__init__zBaseSocket.__init__   s�   € ØˆŒØˆŒ	àˆŒØˆ:Ý”= ¤­fÔ.@ÑAÔAˆDØˆEˆEå”=  T¤[µ&Ô2DÑEÔEˆDÝŒH�R‰LŒLˆLØˆEà×$Ò$ T°Ð$Ñ7Ô7ˆŒ	ˆ	ˆ	ó    c                 ó:   — d| j                              ¦   «         z  S )Nz<socket %d>)r   Úfileno©r   s    r   Ú__str__zBaseSocket.__str__$   s   € Ø˜tœy×/Ò/Ñ1Ô1Ñ1Ð1r   c                 ó,   — t          | j        |¦  «        S ©N)Úgetattrr   )r   Únames     r   Ú__getattr__zBaseSocket.__getattr__'   s   € Ý�t”y $Ñ'Ô'Ð'r   Fc                 óF  — |                      t          j        t          j        d¦  «         | j        j        ryt          t          d¦  «        rd	 |                      t          j        t          j        d¦  «         n7# t          $ r*}|j	        t          j
        t          j        fvr‚ Y d }~nd }~ww xY w|s|                      |¦  «         |                     d¦  «         t          |d¦  «        r|                     d¦  «         |                     | j        j        ¦  «         |S )Né   ÚSO_REUSEPORTr   Úset_inheritableT)Ú
setsockoptr   Ú
SOL_SOCKETÚSO_REUSEADDRr
   Ú
reuse_portÚhasattrr%   ÚOSErrorÚerrnoÚENOPROTOOPTÚEINVALÚbindÚsetblockingr&   ÚlistenÚbacklog)r   r   r   Úerrs       r   r   zBaseSocket.set_options*   s  € Ø�Š�Ô)­6Ô+>ÀÑBÔBÐBØŒIÔ ð 	Ý�F NÑ3Ô3ð	ðØ—’¥Ô 1µ6Ô3FÈÑJÔJÐJÐJøÝð ð ð Ø”9¥UÔ%6½¼Ð$EÐEÐEØð FÐEÐEÐEÐEøøøøðøøøð ð 	Ø�IŠI�d‰OŒOˆOØ×Ò˜ÑÔÐõ �4Ð*Ñ+Ô+ð 	'Ø× Ò  Ñ&Ô&Ð&à�Š�D”IÔ%Ñ&Ô&Ð&Øˆs   Á+A: Á:
B.Â B)Â)B.c                 ó:   — |                      | j        ¦  «         d S r   )r0   r   )r   r   s     r   r0   zBaseSocket.bind>   s   € Ø�	Š	�$”-Ñ Ô Ð Ð Ð r   c                 óÚ   — | j         €d S 	 | j                              ¦   «          n?# t          $ r2}| j                             dt          |¦  «        ¦  «         Y d }~nd }~ww xY wd | _         d S )NzError while closing socket %s)r   r   r,   r	   ÚinfoÚstr)r   Úes     r   r   zBaseSocket.closeA   s†   € ØŒ9ÐØˆFð	CØŒI�OŠOÑÔÐÐøÝð 	Cð 	Cð 	CØŒH�MŠMÐ9½3¸q¹6¼6ÑBÔBÐBÐBÐBÐBÐBÐBøøøøð	Cøøøð ˆŒ	ˆ	ˆ	s   ‹% ¥
A!¯(AÁA!c                 ó   — dS ©Néÿÿÿÿ© r   s    r   Úget_backlogzBaseSocket.get_backlogL   s   € Øˆrr   r   ©F)
Ú__name__Ú
__module__Ú__qualname__r   r   r"   r   r0   r   r>   r=   r   r   r   r      s‡   € € € € € ð8ð 8ð 8ð 8ð2ð 2ð 2ð(ð (ð (ðð ð ð ð(!ð !ð !ð	ð 	ð 	ðð ð ð ð r   r   c                   óT   ‡ — e Zd Zej        Zd„ Zdˆ fd„	Zedk    rd„ Z	ˆ xZ
S d„ Z	ˆ xZ
S )Ú	TCPSocketc                 ó~   — | j         j        rd}nd}| j                             ¦   «         }d||d         |d         fz  S )NÚhttpsÚhttpz
%s://%s:%dr   r$   )r
   Úis_sslr   Úgetsockname)r   ÚschemeÚaddrs      r   r   zTCPSocket.__str__T   sH   € ØŒ9Ôð 	ØˆFˆFàˆFàŒy×$Ò$Ñ&Ô&ˆØ˜v t¨A¤w°°Q´Ð8Ñ8Ð8r   Fc                 ó    •— |                      t          j        t          j        d¦  «         t	          ¦   «                              ||¬¦  «        S )Nr$   r   )r'   r   ÚIPPROTO_TCPÚTCP_NODELAYÚsuperr   )r   r   r   Ú	__class__s      €r   r   zTCPSocket.set_options]   s<   ø€ Ø�Š�Ô*­FÔ,>ÀÑBÔBÐBÝ‰wŒw×"Ò" 4¨uÐ"Ñ5Ô5Ð5r   Úlinuxc                 óÞ   — | j         red}	 | j                              t          j        t          j        d¦  «        }t          j        ||¦  «        d         S # t          t          f$ r Y nw xY wdS )NÚ BBBBBBBBIIIIIIIIIIIIIIIIIIIIIIIIéh   é   r   )	r   Ú
getsockoptr   rM   ÚTCP_INFOÚstructÚunpackÚAttributeErrorr,   )r   ÚfmtÚtcp_info_structs      r   r>   zTCPSocket.get_backlogb   s~   € ØŒyð 	à(�ðØ&*¤i×&:Ò&:½6Ô;MÝ;A¼?ÈCñ'Qô 'Q�Oõ "œ=¨¨oÑ>Ô>¸rÔBÐBøÝ&­Ð0ð ð ð Ø�Dðøøøà�1s   ‹A
A ÁA*Á)A*c                 ó   — dS r;   r=   r   s    r   r>   zTCPSocket.get_backlogo   s   € Ø�2r   r?   )r@   rA   rB   r   ÚAF_INETr   r   r   ÚPLATFORMr>   Ú__classcell__©rP   s   @r   rD   rD   P   s’   ø€ € € € € àŒ^€Fð9ð 9ð 9ð6ð 6ð 6ð 6ð 6ð 6ð �7ÒÐð	ð 	ð 	ð 	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð 	ð 	ð 	r   rD   c                   ó"   — e Zd Zej        Zd„ ZdS )Ú
TCP6Socketc                 óL   — | j                              ¦   «         \  }}}}d||fz  S )Nzhttp://[%s]:%d)r   rI   )r   ÚhostÚportÚ_s       r   r   zTCP6Socket.__str__w   s-   € Ø!œY×2Ò2Ñ4Ô4Ñˆˆt�Q˜Ø 4¨ ,Ñ.Ð.r   N)r@   rA   rB   r   ÚAF_INET6r   r   r=   r   r   rc   rc   s   s*   € € € € € àŒ_€Fð/ð /ð /ð /ð /r   rc   c                   ó:   ‡ — e Zd Zej        Zdˆ fd„	Zd„ Zd„ Zˆ xZ	S )Ú
UnixSocketNc                 óf  •— |€ˆ	 t          j        |¦  «        }t          j        |j        ¦  «        rt          j        |¦  «         nEt          d|z  ¦  «        ‚# t          $ r&}|j        d         t          j	        k    r‚ Y d }~nd }~ww xY wt          ¦   «                              ||||¬¦  «         d S )Nz%r is not a socketr   ©r   )r   ÚstatÚS_ISSOCKÚst_modeÚremoveÚ
ValueErrorr,   Úargsr-   ÚENOENTrO   r   )r   rK   r
   r	   r   Ústr9   rP   s          €r   r   zUnixSocket.__init__€   sÆ   ø€ Øˆ:ð	BÝ”W˜T‘]”]�õ
 ”= ¤Ñ,Ô,ð BÝ”I˜d‘O”O�O�Oå$Ð%9¸DÑ%@ÑAÔAÐAøõ ð ð ð Ø”6˜!”9¥¤Ò,Ð,Øð -Ð,Ð,Ð,Ð,øøøøðøøøõ 	‰Œ×Ò˜˜t S¨RÐÑ0Ô0Ð0Ð0Ð0s   …A Á
B	Á#BÂB	c                 ó   — d| j         z  S )Nzunix:%s)r   r   s    r   r   zUnixSocket.__str__Ž   s   € Ø˜4œ=Ñ(Ð(r   c                 óü   — t          j        | j        j        ¦  «        }|                     | j        ¦  «         t          j        | j        | j        j        | j        j        ¦  «         t          j        |¦  «         d S r   )	r   Úumaskr
   r0   r   r   ÚchownÚuidÚgid)r   r   Ú	old_umasks      r   r0   zUnixSocket.bind‘   s]   € Ý”H˜TœYœ_Ñ-Ô-ˆ	Ø�	Š	�$”-Ñ Ô Ð ÝŒ
�4”= $¤)¤-°´´Ñ?Ô?Ð?Ý
Œ�ÑÔÐÐÐr   r   )
r@   rA   rB   r   ÚAF_UNIXr   r   r   r0   r`   ra   s   @r   rj   rj   |   sb   ø€ € € € € àŒ^€Fð1ð 1ð 1ð 1ð 1ð 1ð)ð )ð )ðð ð ð ð ð ð r   rj   c                 óð   — t          | t          ¦  «        r*t          j        | d         ¦  «        rt          }n>t
          }n6t          | t          t          f¦  «        rt          }nt          d| z  ¦  «        ‚|S )Nr   z Unable to create socket from: %r)
Ú
isinstanceÚtupler   Úis_ipv6rc   rD   r8   Úbytesrj   Ú	TypeError)rK   Ú	sock_types     r   Ú
_sock_typer„   ˜   sq   € Ý�$�ÑÔð CÝŒ<˜˜QœÑ Ô ð 	"Ý"ˆIˆIå!ˆIˆIÝ	�D�3¥˜,Ñ	'Ô	'ð CÝˆ	ˆ	åÐ:¸TÑAÑBÔBÐBØÐr   c                 ó�  — g }| j         }d„ |D ¦   «         }|r|t          |¦  «        z  }d„ |D ¦   «         }| j        r;t          j                             | j        ¦  «        st          d| j        z  ¦  «        ‚| j        r;t          j                             | j        ¦  «        st          d| j        z  ¦  «        ‚|rx|D ]s}t          j	        |t          j
        t          j        ¦  «        }|                     ¦   «         }	t          |	¦  «        }
 |
|	| ||¬¦  «        }|                     |¦  «         Œt|S |D �]Ž}t          |¦  «        }
d}t          d¦  «        D �]}	  |
|| |¦  «        } �n	# t           $ rü}|j        d         t$          j        k    r#|                     d	t+          |¦  «        ¦  «         |j        d         t$          j        k    r#|                     d
t+          |¦  «        ¦  «         d}|                     |                     t+          |¦  «        t+          |¦  «        ¬¦  «        ¦  «         |dk     r)|                     d¦  «         t3          j        d¦  «         Y d}~�Œd}~ww xY w|€7|                     dt+          |¦  «        ¦  «         t7          j        d¦  «         |                     |¦  «         �Œ�|S )zì
    Create a new socket for the configured addresses or file descriptors.

    If a configured address is a tuple then a TCP socket is created.
    If it is a string, a Unix socket is created. Otherwise, a TypeError is
    raised.
    c                 ó<   — g | ]}t          |t          ¦  «        ¯|‘ŒS r=   ©r~   Úint©Ú.0r0   s     r   ú
<listcomp>z"create_sockets.<locals>.<listcomp>±   s'   € Ð=Ð=Ð=�t¥z°$½Ñ'<Ô'<Ð=ˆdÐ=Ð=Ð=r   c                 ó<   — g | ]}t          |t          ¦  «        °|‘ŒS r=   r‡   r‰   s     r   r‹   z"create_sockets.<locals>.<listcomp>´   s'   € Ð@Ð@Ð@�d­*°T½3Ñ*?Ô*?Ð@ˆTÐ@Ð@Ð@r   zcertfile "%s" does not existzkeyfile "%s" does not existrl   Né   r   zConnection in use: %szInvalid address: %sz$connection to {addr} failed: {error})rK   ÚerrorzRetrying in 1 second.r$   zCan't connect to %s)r   ÚlistÚcertfiler   ÚpathÚexistsrq   Úkeyfiler   r   r|   r   rI   r„   ÚappendÚranger,   rr   r-   Ú
EADDRINUSErŽ   r8   ÚEADDRNOTAVAILÚformatÚdebugÚtimeÚsleepÚsysÚexit)r
   r	   ÚfdsÚ	listenersrK   ÚfdaddrÚladdrr   r   Ú	sock_namerƒ   ÚlistenerÚir9   Úmsgs                  r   Úcreate_socketsr¦   ¥   sË  € ð €Ið Œ<€DØ=Ð=˜tÐ=Ñ=Ô=€FØ
ð Ø•$�s‘)”)ÑˆØ@Ð@˜dÐ@Ñ@Ô@€Eð „}ð I�RœWŸ^š^¨D¬MÑ:Ô:ð IÝÐ7¸$¼-ÑGÑHÔHÐHà„|ð G�BœGŸNšN¨4¬<Ñ8Ô8ð GÝÐ6¸¼ÑEÑFÔFÐFð ð Øð 	'ð 	'ˆBÝ”= ¥V¤^µVÔ5GÑHÔHˆDØ×(Ò(Ñ*Ô*ˆIÝ" 9Ñ-Ô-ˆIØ �y ¨D°#¸"Ð=Ñ=Ô=ˆHØ×Ò˜XÑ&Ô&Ð&Ð&àÐð ð ñ ˆÝ˜tÑ$Ô$ˆ	ØˆÝ�q‘”ð 	ñ 	ˆAðØ �y  t¨SÑ1Ô1�ð ‘øõ ð 	"ð 	"ð 	"Ø”6˜!”9¥Ô 0Ò0Ð0Ø—I’IÐ5µs¸4±y´yÑAÔAÐAØ”6˜!”9¥Ô 3Ò3Ð3Ø—I’IÐ3µS¸±Y´YÑ?Ô?Ð?Ø<�Ø—	’	˜#Ÿ*š*­#¨d©)¬)½3¸q¹6¼6˜*ÑBÔBÑCÔCÐCØ�q’5�5Ø—I’IÐ5Ñ6Ô6Ð6Ý”J˜q‘M”M�Møøøøùøøøøð	"øøøð ˆ<Ø�IŠIÐ+­S°©Y¬YÑ7Ô7Ð7ÝŒH�Q‰KŒKˆKà×Ò˜ÑÔÐÑàÐs   ÅE-Å-
I3Å7C1I.É.I3Tc                 ó¸   — | D ]V}|                      ¦   «         }|                     ¦   «          |r*t          |¦  «        t          u rt	          j        |¦  «         ŒWd S r   )rI   r   r„   rj   r   Úunlink)rŸ   r¨   r   r¢   s       r   Úclose_socketsr©   æ   sd   € Øð !ð !ˆØ×$Ò$Ñ&Ô&ˆ	Ø�
Š
‰ŒˆØð 	!•j Ñ+Ô+­zÐ9Ð9ÝŒI�iÑ Ô Ð øð	!ð !r   c                 ó¤   — ddl m} | j        }|sg S d|vrg S ddlm}  |¦   «         sg S g }|D ]!}||v r|                     ||         ¦  «         Œ"|S )zÀGet ALPN protocol list from configuration.

    Returns list of ALPN protocol identifiers based on http_protocols setting.
    Returns empty list if HTTP/2 is not configured or available.
    r   )ÚALPN_PROTOCOL_MAPÚh2)Úis_http2_available)Úgunicorn.configr«   Úhttp_protocolsÚgunicorn.http2r­   r”   )r
   r«   r¯   r­   Úalpn_protocolsÚprotos         r   Ú_get_alpn_protocolsr³   î   sª   € ð 2Ð1Ð1Ð1Ð1Ð1àÔ(€NØð Øˆ	ð �>Ð!Ð!Øˆ	ð 2Ð1Ð1Ð1Ð1Ð1ØÐÑÔð Øˆ	ð €NØð <ð <ˆØÐ%Ð%Ð%Ø×!Ò!Ð"3°EÔ":Ñ;Ô;Ð;øØÐr   c                 ó:   ‡ — ˆ fd„}‰                       ‰ |¦  «        S )Nc                  óD  •— t          j        t           j        j        ‰j        ¬¦  «        } |                      ‰j        ‰j        ¬¦  «         ‰j        | _	        ‰j
        r|                      ‰j
        ¦  «         t          ‰¦  «        }|r|                      |¦  «         | S )N)Úcafile)r�   r“   )ÚsslÚcreate_default_contextÚPurposeÚCLIENT_AUTHÚca_certsÚload_cert_chainr�   r“   Ú	cert_reqsÚverify_modeÚciphersÚset_ciphersr³   Úset_alpn_protocols)Úcontextr±   r
   s     €r   Údefault_ssl_context_factoryz0ssl_context.<locals>.default_ssl_context_factory  s–   ø€ ÝÔ,­S¬[Ô-DÈTÌ]Ð[Ñ[Ô[ˆØ×Ò¨¬ÀÄÐÑMÔMÐMØ"œnˆÔØŒ<ð 	.Ø×Ò ¤Ñ-Ô-Ð-õ -¨TÑ2Ô2ˆØð 	7Ø×&Ò& ~Ñ6Ô6Ð6àˆr   )Ússl_context)r
   rÃ   s   ` r   rÄ   rÄ     s5   ø€ ðð ð ð ð ð ×Ò˜DÐ"=Ñ>Ô>Ð>r   c                 ób   — t          |¦  «                             | d|j        |j        ¬¦  «        S )NT)Úserver_sideÚsuppress_ragged_eofsÚdo_handshake_on_connect)rÄ   Úwrap_socketrÇ   rÈ   )r   r
   s     r   Ússl_wrap_socketrÊ     s;   € Ý�tÑÔ×(Ò(¨Ø59Ø>BÔ>WØAEÔA]ð )ñ _ô _ð _r   c                 óž   — t          | t          j        ¦  «        sdS 	 |                      ¦   «         S # t          t          j        f$ r Y dS w xY w)z¾Get the negotiated ALPN protocol from an SSL socket.

    Returns:
        str: The negotiated protocol name ('h2', 'http/1.1', etc.)
             or None if no protocol was negotiated.
    N)r~   r·   Ú	SSLSocketÚselected_alpn_protocolrZ   ÚSSLError)Ú
ssl_sockets    r   Úget_negotiated_protocolrÐ   $  s]   € õ �j¥#¤-Ñ0Ô0ð ØˆtðØ×0Ò0Ñ2Ô2Ð2øÝ�CœLÐ)ð ð ð Øˆtˆtðøøøs   ž2 ²AÁAc                 ó,   — t          | ¦  «        }|dk    S )zyCheck if HTTP/2 was negotiated on an SSL socket.

    Returns:
        bool: True if HTTP/2 was negotiated via ALPN.
    r¬   )rÐ   )rÏ   Úprotocols     r   Úis_http2_negotiatedrÓ   4  s   € õ ' zÑ2Ô2€HØ�tÒÐr   r   )T)r-   r   r   r·   rm   rX   rœ   rš   Úgunicornr   Úplatformr_   r   rD   rc   rj   r„   r¦   r©   r³   rÄ   rÊ   rÐ   rÓ   r=   r   r   ú<module>rÖ      s   ðð
 €€€Ø 	€	€	€	Ø €€€Ø 
€
€
€
Ø €€€Ø €€€Ø 
€
€
€
Ø €€€à Ð Ð Ð Ð Ð àŒ<€ð:ð :ð :ð :ð :ñ :ô :ð :ðz ð  ð  ð  ð  �
ñ  ô  ð  ðF/ð /ð /ð /ð /�ñ /ô /ð /ðð ð ð ð �ñ ô ð ð8
ð 
ð 
ð>ð >ð >ð >ðB!ð !ð !ð !ðð ð ð:?ð ?ð ?ð$_ð _ð _ðð ð ð ð ð ð ð r   