Ë
    òT•jÄ  ã                   ó  — d Z ddlZej                  dk7  r ed«      ‚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ZdZej                  Zej                  Z ej                  «       Zdded	œd
„Z G d„ d«      Z G d„ dej&                  «      Zy)z)Various Windows specific bits and pieces.é    NÚwin32z
win32 only)ÚpipeÚPopenÚPIPEÚ
PipeHandlei    F)TT)ÚduplexÚ
overlappedÚbufsizec           
      óª  — t        j                  dj                  t        j                  «       t        t        «      «      ¬«      }| r6t        j                  }t        j                  t        j                  z  }||}}n$t        j                  }t        j                  }d|}}|t        j                  z  }|d   r|t        j                  z  }|d   rt        j                  }nd}dx}	}
	 t        j                  ||t        j                  d||t        j                   t        j"                  «      }	t        j$                  ||dt        j"                  t        j&                  |t        j"                  «      }
t        j(                  |	d¬«      }|j+                  d«       |	|
fS #  |	�t        j,                  |	«       |
�t        j,                  |
«       ‚ xY w)zELike os.pipe() but with overlapped support and using handles not fds.z\\.\pipe\python-pipe-{:d}-{:d}-)Úprefixr   é   NT©r	   )ÚtempfileÚmktempÚformatÚosÚgetpidÚnextÚ_mmap_counterÚ_winapiÚPIPE_ACCESS_DUPLEXÚGENERIC_READÚGENERIC_WRITEÚPIPE_ACCESS_INBOUNDÚFILE_FLAG_FIRST_PIPE_INSTANCEÚFILE_FLAG_OVERLAPPEDÚCreateNamedPipeÚ	PIPE_WAITÚNMPWAIT_WAIT_FOREVERÚNULLÚ
CreateFileÚOPEN_EXISTINGÚConnectNamedPipeÚGetOverlappedResultÚCloseHandle)r   r	   r
   ÚaddressÚopenmodeÚaccessÚobsizeÚibsizeÚflags_and_attribsÚh1Úh2Úovs               ú,/usr/lib/python3.12/asyncio/windows_utils.pyr   r       sˆ  € ä�o‰oØ1×8Ñ8Ü�I‰I‹KœœmÓ,ó.ô/€Gñ Ü×-Ñ-ˆÜ×%Ñ%¬×(=Ñ(=Ñ=ˆØ  '�‰ä×.Ñ.ˆÜ×&Ñ&ˆØ˜G�ˆà”×5Ñ5Ñ5€Hà�!‚}Ø”G×0Ñ0Ñ0ˆà�!‚}Ü#×8Ñ8ÑàÐà€N€BˆðÜ×$Ñ$Ø�Xœw×0Ñ0Øˆv�vœw×;Ñ;¼W¿\¹\óKˆô ×ÑØ�V˜Q¤§¡¬g×.CÑ.CØœwŸ|™|ó-ˆô ×%Ñ% b°TÔ:ˆØ
×Ñ˜tÔ$Ø�2ˆvˆøðØˆ>Ü×Ñ Ô#Øˆ>Ü×Ñ Ô#Øús   Ã*B6F! Æ!1Gc                   ó|   — e Zd ZdZd„ Zd„ Zed„ «       Zd„ Ze	j                  dœd„Zej                  fd„Zd	„ Zd
„ Zy)r   z�Wrapper for an overlapped pipe handle which is vaguely file-object like.

    The IOCP event loop can use these instead of socket objects.
    c                 ó   — || _         y ©N©Ú_handle©ÚselfÚhandles     r/   Ú__init__zPipeHandle.__init__V   s	   € Øˆ�ó    c                 óx   — | j                   �d| j                   ›�}nd}d| j                  j                  › d|› d�S )Nzhandle=Úclosedú<ú ú>)r4   Ú	__class__Ú__name__r5   s     r/   Ú__repr__zPipeHandle.__repr__Y   sB   € Ø�<‰<Ð#Ø˜tŸ|™|Ð.Ð/‰FàˆFØ�4—>‘>×*Ñ*Ð+¨1¨V¨H°AÐ6Ð6r9   c                 ó   — | j                   S r2   r3   ©r6   s    r/   r7   zPipeHandle.handle`   s   € à�|‰|Ðr9   c                 óH   — | j                   €t        d«      ‚| j                   S )NzI/O operation on closed pipe)r4   Ú
ValueErrorrC   s    r/   ÚfilenozPipeHandle.filenod   s"   € Ø�<‰<ÐÜÐ;Ó<Ð<Ø�|‰|Ðr9   )r%   c                óP   — | j                   � || j                   «       d | _         y y r2   r3   )r6   r%   s     r/   ÚclosezPipeHandle.closei   s$   € Ø�<‰<Ð#Ù˜Ÿ™Ô%ØˆD�Lð $r9   c                 ób   — | j                   �# |d| ›�t        | ¬«       | j                  «        y y )Nz	unclosed )Úsource)r4   ÚResourceWarningrH   )r6   Ú_warns     r/   Ú__del__zPipeHandle.__del__n   s-   € Ø�<‰<Ð#Ù�I˜d˜XÐ&¬ÀÕEØ�J‰J�Lð $r9   c                 ó   — | S r2   © rC   s    r/   Ú	__enter__zPipeHandle.__enter__s   s   € Øˆr9   c                 ó$   — | j                  «        y r2   )rH   )r6   ÚtÚvÚtbs       r/   Ú__exit__zPipeHandle.__exit__v   s   € Ø�
‰
�r9   N)r@   Ú
__module__Ú__qualname__Ú__doc__r8   rA   Úpropertyr7   rF   r   r%   rH   ÚwarningsÚwarnrM   rP   rU   rO   r9   r/   r   r   Q   sR   „ ñòò7ð ñó ðòð
 $+×#6Ñ#6ô  ð
 %ŸM™Mó ò
ór9   r   c                   ó$   ‡ — e Zd ZdZdˆ fd„	Zˆ xZS )r   zˆReplacement for subprocess.Popen using overlapped pipe handles.

    The stdin, stdout, stderr are None or instances of PipeHandle.
    c                 ó,  •— |j                  d«      rJ ‚|j                  dd«      dk(  sJ ‚d x}x}}d x}	x}
}|t        k(  r5t        dd¬«      \  }}	t        j                  |t
        j                  «      }n|}|t        k(  r&t        d¬«      \  }
}t        j                  |d«      }n|}|t        k(  r&t        d¬«      \  }}t        j                  |d«      }n|t        k(  r|}n|}	 t        ‰| �$  |f|||d	œ|¤Ž |	�t        |	«      | _        |
�t        |
«      | _        |�t        |«      | _        	 |t        k(  rt        j                   |«       |t        k(  rt        j                   |«       |t        k(  rt        j                   |«       y y #  |	|
|fD ]  }|€Œt        j                  |«       Œ ‚ xY w# |t        k(  rt        j                   |«       |t        k(  rt        j                   |«       |t        k(  rt        j                   |«       w w xY w)
NÚuniversal_newlinesr
   r   )FTT)r	   r   )TFr   )ÚstdinÚstdoutÚstderr)Úgetr   r   ÚmsvcrtÚopen_osfhandler   ÚO_RDONLYÚSTDOUTÚsuperr8   r   r_   r`   ra   r   r%   rH   )r6   Úargsr_   r`   ra   ÚkwdsÚ	stdin_rfdÚ
stdout_wfdÚ
stderr_wfdÚstdin_whÚ	stdout_rhÚ	stderr_rhÚstdin_rhÚ	stdout_whÚ	stderr_whÚhr?   s                   €r/   r8   zPopen.__init__‚   sû  ø€ Ø—8‘8Ð0Ô1Ð1Ð1Ø�x‰x˜	 1Ó%¨Ò*Ð*Ð*Ø.2Ð2ˆ	Ð2�J Ø+/Ð/ˆÐ/�9˜yØ”DŠ=Ü!%°ÀtÔ!LÑˆH�hÜ×-Ñ-¨h¼¿¹ÓD‰IàˆIØ”TŠ>Ü#'°=Ô#AÑ ˆI�yÜ×.Ñ.¨y¸!Ó<‰JàˆJØ”TŠ>Ü#'°=Ô#AÑ ˆI�yÜ×.Ñ.¨y¸!Ó<‰JØ”vÒØ#‰JàˆJð	%Ü‰GÑ˜Tð 8¨¸:Ø$.ñ8Ø26ò8ð Ð#Ü'¨Ó1�”
ØÐ$Ü(¨Ó3�”ØÐ$Ü(¨Ó3�•àœŠ}Ü—‘˜Ô#ØœŠ~Ü—‘˜Ô$ØœŠ~Ü—‘˜Õ$ð øð#	Ø 	¨9Ð5ò +�Ø‘=Ü×'Ñ'¨Õ*ð+ð ûð œŠ}Ü—‘˜Ô#ØœŠ~Ü—‘˜Ô$ØœŠ~Ü—‘˜Õ$ð ús%   Ã'F Ã;7F6 ÆF3ÆF3Æ3F6 Æ6AH)NNN)r@   rV   rW   rX   r8   Ú__classcell__)r?   s   @r/   r   r   }   s   ø„ ñ÷+%ñ +%r9   r   )rX   ÚsysÚplatformÚImportErrorr   Ú	itertoolsrc   r   Ú
subprocessr   rZ   Ú__all__ÚBUFSIZEr   rf   Úcountr   r   r   r   rO   r9   r/   ú<module>r}      s“   ðÙ /ã 
à‡<�<�7ÒÙ
�lÓ
#Ð#ã Û Û Û 	Û Û Û ð 0€ð €Ø‡�€Ø	×	Ñ	€Ø�	—‘Ó!€ð  \¸7ô +÷b&ñ &ôX0%ˆJ×Ñõ 0%r9   