Ë
    ÖÉ�j4Ñ  ã            
       óV  — d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ ddl	m
Z
mZmZ ddlmZmZmZ ddlmZ ddlmZmZmZmZ dd	lmZ dd
lmZmZ ddlmZmZ ddl m!Z!m"Z"m#Z# ddl$m%Z%m&Z&m'Z'm(Z( ddl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z:m;Z; ddl<m=Z= ddl>m?Z? dZ@dZAddgZB ej†                  eD«      ZEdeFe+   deFe*   deFe+   fd„ZGdeFe+   deFe+   deFe+   fd„ZHd eFe-   d!eFe-   deFe-   fd"„ZId#e+d$e+deJfd%„ZKd&ej˜                  d'e#ddfd(„ZMd)e(d&ej˜                  ddfd*„ZNd+eOeP   dePfd,„ZQd-e;d.eJd/ePdej˜                  fd0„ZRd1e8d2ePd3ePd/ePdej˜                  f
d4„ZSd#ePd$ePdePfd5„ZTd#ePd$ePdePfd6„ZUd3ePdePfd7„ZVd8eej®                     dee=   fd9„ZX G d:„ d;e«      ZYy)<é    N)ÚOptionalÚUnion)ÚAsyncIOEventEmitteré   )ÚclockÚrtpÚsdp)ÚCODECSÚHEADER_EXTENSIONSÚis_rtx)ÚRTCTrackEvent)ÚInternalErrorÚInvalidAccessErrorÚInvalidStateErrorÚOperationError)ÚMediaStreamTrack)ÚRTCBundlePolicyÚRTCConfiguration)ÚRTCDataChannelÚRTCDataChannelParameters)ÚRTCCertificateÚRTCDtlsParametersÚRTCDtlsTransport)ÚRTCIceCandidateÚRTCIceGathererÚRTCIceParametersÚRTCIceTransport)ÚRTCRtpCodecCapabilityÚRTCRtpCodecParametersÚRTCRtpDecodingParametersÚRTCRtpHeaderExtensionParametersÚRTCRtpParametersÚRTCRtpReceiveParametersÚRTCRtpRtxParametersÚRTCRtpSendParameters)ÚRemoteStreamTrackÚRTCRtpReceiver)ÚRTCRtpSender)ÚRTCRtpTransceiver)ÚRTCSctpCapabilitiesÚRTCSctpTransport)ÚRTCSessionDescription)ÚRTCStatsReportz0.0.0.0é	   ÚaudioÚvideoÚcodecsÚ	preferredÚreturnc                 óâ  — |s| S t        t        t        | «      «      }t        t        t        |«      d «      d u}g }t        d„ |«      D ]£  }| D ]œ  }|j                  j                  «       |j                  j                  «       k(  sŒ9|j                  |j                  k(  sŒS|j                  |«       |r6|D ]1  }|j                  d   |j                  k(  sŒ |j                  |«        n  Œ£ Œ¥ |S )Nc                 ó   — t        | «       S ©N)r   ©Úxs    úY/home/uftp/webrtc-recorder/.venv/lib/python3.12/site-packages/aiortc/rtcpeerconnection.pyú<lambda>z)filter_preferred_codecs.<locals>.<lambda>>   s   € ¤V¨A£Y € ó    Úapt)	ÚlistÚfilterr   ÚnextÚmimeTypeÚlowerÚ
parametersÚappendÚpayloadType)r1   r2   Ú
rtx_codecsÚrtx_enabledÚfilteredÚprefÚcodecÚrtxs           r9   Úfilter_preferred_codecsrK   4   sæ   € ñ Øˆä”fœV VÓ,Ó-€JÜ”vœf iÓ0°$Ó7¸tÐC€Kà€HÜÑ.°	Ó:ò ˆØò 	ˆEà—‘×$Ñ$Ó&¨$¯-©-×*=Ñ*=Ó*?Ó?Ø×$Ñ$¨¯©Ó7à—‘ Ô&ñ Ø)ò "˜ØŸ>™>¨%Ñ0°E×4EÑ4EÓEØ$ŸO™O¨CÔ0Ù!ð"ñ
 ñ	ðð" €Or;   Úlocal_codecsÚremote_codecsc                 óZ  ‡— g }i }|D �]  Št        ‰«      rr‰j                  j                  d«      }t        |t        «      rF||v rB||   }‰j
                  |j
                  k(  r$|j                  t        j                  ‰«      «       Œ�| D ]š  }t        |‰«      sŒt        j                  |«      }‰j                  t        j                  v r‰j                  |_
        t        t        ˆfd„|j                  «      «      |_        |j                  |«       |||j                  <    �Œ �Œ" |S )Nr<   c                 ó    •— | ‰j                   v S r6   )ÚrtcpFeedback)r8   Úcs    €r9   r:   z$find_common_codecs.<locals>.<lambda>i   s   ø€  Q¨!¯.©.Ð%8€ r;   )r   rB   ÚgetÚ
isinstanceÚintÚ	clockRaterC   ÚcopyÚdeepcopyÚis_codec_compatiblerD   r   ÚDYNAMIC_PAYLOAD_TYPESr=   r>   rP   )rL   rM   ÚcommonÚcommon_baser<   ÚbaserI   rQ   s          @r9   Úfind_common_codecsr]   R   s	  ø€ ð €FØ46€KØó ˆä�!Œ9Ø—,‘,×"Ñ" 5Ó)ˆCÜ˜#œsÔ#¨¨{Ñ(:Ø" 3Ñ'�Ø—;‘; $§.¡.Ò0Ø—M‘M¤$§-¡-°Ó"2Ô3Øð "ò 
	ˆEÜ" 5¨!Õ,ÜŸ™ eÓ,�Ø—=‘=¤C×$=Ñ$=Ñ=Ø()¯©�EÔ%Ü%)ÜÓ8¸%×:LÑ:LÓMó&�Ô"ð —‘˜eÔ$Ø16�˜E×-Ñ-Ñ.Úò
	ðð, €Mr;   Úlocal_extensionsÚremote_extensionsc                 ó|   — g }|D ]4  }| D ]-  }|j                   |j                   k(  sŒ|j                  |«       Œ/ Œ6 |S r6   )ÚurirC   )r^   r_   rZ   ÚrxÚlxs        r9   Úfind_common_header_extensionsrd   q   sJ   € ð €FØò "ˆØ"ò 	"ˆBØ�v‰v˜Ÿ™ÓØ—‘˜bÕ!ñ	"ð"ð €Mr;   ÚaÚbc                 ó˜  — | j                   j                  «       |j                   j                  «       k7  s| j                  |j                  k7  ry| j                   j                  «       dk(  rOdt        dt        fd„}dt        dt
        j                  fd„}	  || «       ||«      k(  xr  || «       ||«      k(  S y# t        $ r Y yw xY w)NFz
video/h264rQ   r3   c                 óL   — t        | j                  j                  dd«      «      S )Nzpacketization-modeÚ0)rT   rB   rR   ©rQ   s    r9   Úpacketizationz*is_codec_compatible.<locals>.packetizationƒ   s   € Ü�q—|‘|×'Ñ'Ð(<¸cÓBÓCÐCr;   c                 óx   — t        j                  t        | j                  j	                  dd«      «      «      d   S )Nzprofile-level-idÚ42E01Fr   )r	   Úparse_h264_profile_level_idÚstrrB   rR   rj   s    r9   Úprofilez$is_codec_compatible.<locals>.profile†   s9   € ô ×2Ñ2Ü�A—L‘L×$Ñ$Ð%7¸ÓBÓCóàñð r;   T)r@   rA   rU   r   rT   r	   ÚH264ProfileÚ
ValueError)re   rf   rk   rp   s       r9   rX   rX   }   sÀ   € Ø‡z�z×ÑÓ˜QŸZ™Z×-Ñ-Ó/Ò/°1·;±;À!Ç+Á+Ò3MØà‡z�z×ÑÓ˜\Ò)ð	DÔ2ð 	D´só 	Dð	Ô,ð 	´·±ó 	ð	Ù  Ó#¡}°QÓ'7Ñ7ÒT¹GÀA»JÉ'ÐRSË*Ñ<TÐTð øô ò 	Ùð	ús   Â#B= Â=	C	ÃC	ÚmediaÚdtlsTransportc                 ó  — |j                   }|j                  }|j                  «       | _        |j                  dk(  | _        |j                  «       | _        | j                  r=| j                  d   j                  | _	        | j                  d   j                  | _
        nt        | _	        t        | _
        | j                  €|j                  «       | _        y |j                  «       j                  | j                  _        y )NÚ	completedr   )Ú	transportÚiceGathererÚgetLocalCandidatesÚice_candidatesÚstateÚice_candidates_completeÚgetLocalParametersÚiceÚipÚhostÚportÚDISCARD_HOSTÚDISCARD_PORTÚdtlsÚfingerprints)rs   rt   ÚiceTransportrx   s       r9   Úadd_transport_descriptionr‡   –   sÌ   € ð !×*Ñ*€LØ×*Ñ*€KØ&×9Ñ9Ó;€EÔØ$/×$5Ñ$5¸Ñ$D€EÔ!Ø×.Ñ.Ó0€E„IØ×ÒØ×)Ñ)¨!Ñ,×/Ñ/ˆŒ
Ø×)Ñ)¨!Ñ,×1Ñ1ˆ�
ä!ˆŒ
Ü!ˆŒ
ð ‡z�zÐØ"×5Ñ5Ó7ˆ�
à"/×"BÑ"BÓ"D×"QÑ"Qˆ�
‰
Õr;   r†   c              ƒ   óÔ   K  — t        | j                  |j                  «      }t        j                  |Ž ƒ d {  –—†  |j
                  r| j                  d «      ƒ d {  –—†  y y 7 Œ+7 Œ­wr6   )ÚmapÚaddRemoteCandidaterz   ÚasyncioÚgatherr|   )r†   rs   Úcoross      r9   Úadd_remote_candidatesrŽ   ­   s_   è ø€ ô �×/Ñ/°×1EÑ1EÓF€EÜ
�.‰.˜%Ð
 × Ð à×$Ò$Ø×-Ñ-¨dÓ3×3Ñ3ð %ð !øð 	4ús!   ‚6A(¸A$¹$A(ÁA&ÁA(Á&A(Úmidsc                 óX   — d}	 t        |«      }|| vr| j                  |«       |S |dz  }Œ()z5
    Allocate a MID which has not been used yet.
    r   r   )ro   Úadd)r�   ÚiÚmids      r9   Úallocate_midr”   ·   s:   € ð 	
€AØ
Ü�!‹fˆØ�d‰?Ø�H‰H�SŒMØˆJØ	ˆQ‰ˆð r;   ÚsctpÚlegacyr“   c                 ó~  — |rOt        j                  dt        d| j                  g¬«      }d| j                  › �|j
                  | j                  <   n/t        j                  dt        ddg¬«      }| j                  |_        ||j                  _        | j                  «       |_
        t        || j                  «       |S )NÚapplicationú	DTLS/SCTP©Úkindr�   rp   Úfmtzwebrtc-datachannel zUDP/DTLS/SCTPzwebrtc-datachannel)r	   ÚMediaDescriptionrƒ   r�   Ú_outbound_streams_countÚsctpmapÚ	sctp_portr   ÚmuxIdÚgetCapabilitiesÚsctpCapabilitiesr‡   rw   )r•   r–   r“   rs   s       r9   Ú!create_media_description_for_sctpr¤   Ä   s£   € ñ Ü×$Ñ$Ø¤\¸;ÈTÏYÉYÈKô
ˆð &9¸×9UÑ9UÐ8VÐ#Wˆ�‰�d—i‘iÒ ä×$Ñ$ØÜØ#Ø%Ð&ô	
ˆð Ÿ)™)ˆŒà€E‡I�I„OØ!×1Ñ1Ó3€EÔÜ˜e T§^¡^Ô4à€Lr;   ÚtransceiverÚcnameÚ	directionc           	      ó´  — t        j                  | j                  t        d| j                  D �cg c]  }|j
                  ‘Œ c}¬«      }||_        | j                  j                  › d| j                  j                  › �|_
        t        | j                  | j                  |¬«      |_        t        |_        t        |_        d|_        t        j$                  | j                  j&                  |¬«      g|_        t+        t-        t.        |j                  j0                  «      d «      r‹|j(                  j3                  t        j$                  | j                  j4                  |¬«      «       t        j6                  d| j                  j&                  | j                  j4                  g¬«      g|_        t;        || j<                  j>                  «       |S c c}w )	NzUDP/TLS/RTP/SAVPFrš   ú ©r1   ÚheaderExtensionsr¡   T)Ússrcr¦   ÚFID©ÚsemanticÚitems) r	   r�   r›   rƒ   Ú_codecsrD   r§   ÚsenderÚ
_stream_idÚ	_track_idÚmsidr"   Ú_headerExtensionsr   r‚   Ú	rtcp_hostÚ	rtcp_portÚrtcp_muxÚSsrcDescriptionÚ_ssrcr¬   r?   r>   r   r1   rC   Ú	_rtx_ssrcÚGroupDescriptionÚ
ssrc_groupr‡   Úreceiverrw   )r¥   r¦   r§   r“   rQ   rs   s         r9   Ú(create_media_description_for_transceiverrÀ   Ü   su  € ô × Ñ Ø×ÑÜØ#Ø$/×$7Ñ$7Ö8˜qˆQ�]‹]Ò8ô	€Eð  €E„OØ×&Ñ&×1Ñ1Ð2°!°K×4FÑ4F×4PÑ4PÐ3QÐR€E„Jä Ø×"Ñ"Ø$×6Ñ6Øô€E„Iô
 #€E„OÜ"€E„OØ€E„NÜ×%Ñ%¨;×+=Ñ+=×+CÑ+CÈ5ÔQÐR€E„Jô ŒF”6˜5Ÿ9™9×+Ñ+Ó,¨dÔ3Ø�
‰
×ÑÜ×Ñ [×%7Ñ%7×%AÑ%AÈÔOô	
ô × Ñ ØØ"×)Ñ)×/Ñ/°×1CÑ1C×1MÑ1MÐNôð
ˆÔô ˜e [×%9Ñ%9×%CÑ%CÔDà€Lùò; 9s   ¯Gc                 ó¢   — t         j                  t         j                  j                  | «      t         j                  j                  |«      z     S r6   ©r	   Ú
DIRECTIONSÚindex©re   rf   s     r9   Úand_directionrÆ     ó4   € Ü�>‰>œ#Ÿ.™.×.Ñ.¨qÓ1´C·N±N×4HÑ4HÈÓ4KÑKÑLÐLr;   c                 ó¢   — t         j                  t         j                  j                  | «      t         j                  j                  |«      z     S r6   rÂ   rÅ   s     r9   Úor_directionrÉ     rÇ   r;   c                 ó   — | dk(  ry| dk(  ry| S )NÚsendonlyÚrecvonly© )r§   s    r9   Úreverse_directionrÎ     s   € Ø�JÒØØ	�jÒ	 ØØÐr;   Úsession_descriptionc                 óH   — | � t        t        | «      | j                  ¬«      S y )N)r	   Útype)r,   ro   rÑ   )rÏ   s    r9   Úwrap_session_descriptionrÒ     s.   € ð Ð&Ü$ÜÐ'Ó(Ð/B×/GÑ/Gô
ð 	
ð r;   c                   óJ  ‡ — e Zd ZdZdCdee   ddfˆ fd„Zedefd„«       Z	edefd„«       Z
edefd„«       Zedefd	„«       Zedefd
„«       Zedee   fd„«       Zedefd„«       Zdee   ddfd„Zdedefd„Z	 dDdeeef   dedefd„ZdEd„Zdefd„Z	 	 	 	 	 	 dFdedee   dee   dedededee   defd„Zdefd„Z de!e"   fd„Z#de!e   fd „Z$de%fd!„Z&de!e   fd"„Z'	 dCd#ee   ddfd$„Z(d#eddfd%„Z)dEd&„Z*dEd'„Z+dEd(„Z,deddfd)„Z-de.fd*„Z/dEd+„Z0	 dCded,ed-ee   defd.„Z1d/edee   fd0„Z2d1edee   fd2„Z3dee4jj                     fd3„Z6d4ede7fd5„Z8d6ed7e9ddfd8„Z:dee4jj                     fd9„Z;d4ede<fd:„Z=d;eddfd<„Z>dEd=„Z?dEd>„Z@dEd?„ZAd@e4jj                  dAeddfdB„ZBˆ xZCS )GÚRTCPeerConnectionzÅ
    The :class:`RTCPeerConnection` interface represents a WebRTC connection
    between the local computer and a remote peer.

    :param configuration: An optional :class:`RTCConfiguration`.
    NÚconfigurationr3   c                 óJ  •— t         ‰| �  «        t        j                  «       g| _        t        j                  «       › | _        |xs
 t        «       | _	        t        «       | _        t        «       | _        i | _        i | _        t        «       | _        d | _        d | _        d| _        d | _        d | _        t+        t        j                  «       «      | _        g | _        d | _        d| _        d| _        d| _        d | _        d| _        d | _        d | _        d | _         d | _!        y )NFÚnewÚstable)"ÚsuperÚ__init__r   ÚgenerateCertificateÚ _RTCPeerConnection__certificatesÚuuidÚuuid4Ú_RTCPeerConnection__cnamer   Ú!_RTCPeerConnection__configurationÚsetÚ"_RTCPeerConnection__dtlsTransportsÚ!_RTCPeerConnection__iceTransportsÚ_RTCPeerConnection__remoteDtlsÚ_RTCPeerConnection__remoteIceÚ_RTCPeerConnection__seenMidsÚ_RTCPeerConnection__sctpÚ$_RTCPeerConnection__sctp_mline_indexÚ_sctpLegacySdpÚ"_RTCPeerConnection__sctpRemotePortÚ"_RTCPeerConnection__sctpRemoteCapsro   Ú_RTCPeerConnection__stream_idÚ _RTCPeerConnection__transceiversÚ_RTCPeerConnection__closeTaskÚ#_RTCPeerConnection__connectionStateÚ&_RTCPeerConnection__iceConnectionStateÚ%_RTCPeerConnection__iceGatheringStateÚ_RTCPeerConnection__isClosedÚ"_RTCPeerConnection__signalingStateÚ+_RTCPeerConnection__currentLocalDescriptionÚ,_RTCPeerConnection__currentRemoteDescriptionÚ+_RTCPeerConnection__pendingLocalDescriptionÚ,_RTCPeerConnection__pendingRemoteDescription)ÚselfrÕ   Ú	__class__s     €r9   rÚ   zRTCPeerConnection.__init__%  s  ø€ Ü‰ÑÔÜ-×AÑAÓCÐDˆÔÜŸ*™*›,˜ˆŒØ,ÒBÔ0@Ó0BˆÔÜ7:³uˆÔÜ58³UˆÔð ð 	Ôð
 ð 	Ôô %(£EˆŒØ26ˆŒØ15ˆÔð $ˆÔØ/3ˆÔØ?CˆÔÜœtŸz™z›|Ó,ˆÔØ79ˆÔà37ˆÔØ!&ˆÔØ$)ˆÔ!Ø#(ˆÔ Ø:>ˆŒØ (ˆÔàKOˆÔ&ØLPˆÔ'ØKOˆÔ&ØLPˆÕ'r;   c                 ó   — | j                   S )zØ
        The current connection state.

        Possible values: `"connected"`, `"connecting"`, `"closed"`, `"failed"`, `"new`".

        When the state changes, the `"connectionstatechange"` event is fired.
        )rï   ©rø   s    r9   ÚconnectionStatez!RTCPeerConnection.connectionStateI  s   € ð ×%Ñ%Ð%r;   c                 ó   — | j                   S )zÝ
        The current ICE connection state.

        Possible values: `"checking"`, `"completed"`, `"closed"`, `"failed"`, `"new`".

        When the state changes, the `"iceconnectionstatechange"` event is fired.
        )rð   rû   s    r9   ÚiceConnectionStatez$RTCPeerConnection.iceConnectionStateT  s   € ð ×(Ñ(Ð(r;   c                 ó   — | j                   S )zÃ
        The current ICE gathering state.

        Possible values: `"complete"`, `"gathering"`, `"new`".

        When the state changes, the `"icegatheringstatechange"` event is fired.
        )rñ   rû   s    r9   ÚiceGatheringStatez#RTCPeerConnection.iceGatheringState_  s   € ð ×'Ñ'Ð'r;   c                 ó4   — t        | j                  «       «      S )zw
        An :class:`RTCSessionDescription` describing the session for
        the local end of the connection.
        )rÒ   Ú$_RTCPeerConnection__localDescriptionrû   s    r9   ÚlocalDescriptionz"RTCPeerConnection.localDescriptionj  s   € ô (¨×(?Ñ(?Ó(AÓBÐBr;   c                 ó4   — t        | j                  «       «      S )zx
        An :class:`RTCSessionDescription` describing the session for
        the remote end of the connection.
        )rÒ   Ú%_RTCPeerConnection__remoteDescriptionrû   s    r9   ÚremoteDescriptionz#RTCPeerConnection.remoteDescriptionr  s   € ô (¨×(@Ñ(@Ó(BÓCÐCr;   c                 ó   — | j                   S )z{
        An :class:`RTCSctpTransport` describing the SCTP transport being used
        for datachannels or `None`.
        )rç   rû   s    r9   r•   zRTCPeerConnection.sctpz  s   € ð �{‰{Ðr;   c                 ó   — | j                   S )zã
        The current signaling state.

        Possible values: `"closed"`, `"have-local-offer"`, `"have-remote-offer`",
        `"stable"`.

        When the state changes, the `"signalingstatechange"` event is fired.
        )ró   rû   s    r9   ÚsignalingStatez RTCPeerConnection.signalingState‚  s   € ð ×$Ñ$Ð$r;   Ú	candidatec              ƒ   ó  K  — |�#|j                   €|j                  €t        d«      ‚| j                  D ]�  }|�D|j                   |j                  k(  s|j                  |j                  «       k(  sŒ<|j                  rŒI|j                  j                  j                  }|j                  |«      ƒ d{  –—†  Œƒ | j                  r�|�R|j                   | j                  j                  k(  s|j                  | j                  k(  rO| j                  j                  s9| j                  j                  j                  }|j                  |«      ƒ d{  –—†  | j                  «       x}rˆ|j                  }t        dt        |«      «      D ]c  }|€d||   _        Œ|j                  |k(  s'|j                   ||   j"                  j$                  k(  sŒF||   j&                  j)                  |«       Œe yt*        j-                  d«       y7 �ŒP7 Œ·­w)a-  
        Add a new :class:`RTCIceCandidate` received from the remote peer.

        The specified candidate must have a value for either `sdpMid` or
        `sdpMLineIndex`.

        :param candidate: The new remote candidate or `None` to signal
                            end-of-candidates.
        Nz2Candidate must have either sdpMid or sdpMLineIndexr   TzCRTCPeerConnection addIceCandidate called without remote description)ÚsdpMidÚsdpMLineIndexrr   rí   r“   Ú_get_mline_indexÚ_bundledr¿   rw   rŠ   rç   rè   r  rs   ÚrangeÚlenr|   r   r¡   rz   rC   ÚloggerÚwarning)rø   r
  r¥   r†   Úremote_descriptionrs   Úsdp_m_line_indexs          r9   ÚaddIceCandidatez!RTCPeerConnection.addIceCandidateŽ  sÔ  è ø€ ð Ð!Ø× Ñ Ð(Ø×'Ñ'Ð/äÐQÓRÐRà×.Ñ.ò 
	AˆKàÐ!à×$Ñ$¨¯©Ò7Ø ×.Ñ.°+×2NÑ2NÓ2PÓPà#×,Ó,à*×3Ñ3×=Ñ=×GÑG�Ø"×5Ñ5°iÓ@×@Ñ@ð
	Að �;Š;ØÐà× Ñ  D§K¡K§O¡OÒ3Ø×*Ñ*¨d×.EÑ.EÒEà—K‘K×(Ò(àŸ;™;×0Ñ0×:Ñ:ˆLØ×1Ñ1°)Ó<×<Ð<ð
 "&×!9Ñ!9Ó!;Ð;ÐÐ;Ø&×,Ñ,ˆEÜ$)¨!¬S°«ZÓ$8ò MÐ ØÐ$ØFJ�EÐ*Ñ+ÕCà×+Ñ+Ð/?Ò?Ø ×'Ñ'¨5Ð1AÑ+B×+FÑ+F×+LÑ+LÓLàÐ*Ñ+×:Ñ:×AÑAÀ)ÕLñMô �N‰NØUõð7 Aùð =ús8   ‚A-HÁ0HÁ=4HÂ1HÂ2BHÅHÅA<HÇ
8HÈHÚtrackc                 óð  — | j                  «        |j                  dvrt        d|j                  › d�«      ‚| j                  |«       | j                  D ]v  }|j                  |j                  k(  sŒ|j
                  j                  �Œ4|j
                  j                  |«       t        |j                  d«      |_	        |j
                  c S  | j                  d|j                  |¬«      }|j
                  S )z‚
        Add a :class:`MediaStreamTrack` to the set of media tracks which
        will be transmitted to the remote peer.
        ©r/   r0   úInvalid track kind "ú"rË   Úsendrecv©r§   r›   Úsender_track)Ú#_RTCPeerConnection__assertNotClosedr›   r   Ú*_RTCPeerConnection__assertTrackHasNoSenderrí   r²   r  ÚreplaceTrackrÉ   r§   Ú%_RTCPeerConnection__createTransceiver)rø   r  r¥   s      r9   ÚaddTrackzRTCPeerConnection.addTrackÈ  sé   € ð 	×ÑÔ Ø�:‰:Ð/Ñ/ÜÐ"6°u·z±z°lÀ!Ð DÓEÐEð 	×%Ñ% eÔ,à×.Ñ.ò 	.ˆKØ×Ñ 5§:¡:Ó-Ø×%Ñ%×+Ñ+Ñ3Ø×&Ñ&×3Ñ3°EÔ:Ü,8Ø#×-Ñ-¨zó-�KÔ)ð '×-Ñ-Ò-ð	.ð ×.Ñ.Ø  u§z¡zÀð /ó 
ˆð ×!Ñ!Ð!r;   ÚtrackOrKindr§   c                 ó  — | j                  «        t        |t        «      r|j                  }|}n|}d}|dvrt	        d|› d�«      ‚|t
        j                  vrt	        d|› d�«      ‚|r| j                  |«       | j                  |||¬«      S )z7
        Add a new :class:`RTCRtpTransceiver`.
        Nr  r  r  zInvalid direction "r  )	r  rS   r   r›   r   r	   rÃ   r   r"  )rø   r$  r§   r›   r  s        r9   ÚaddTransceiverz RTCPeerConnection.addTransceiverã  sª   € ð 	×ÑÔ ô �kÔ#3Ô4Ø×#Ñ#ˆDØ‰EàˆDØˆEØÐ)Ñ)ÜÐ"6°t°f¸AÐ >Ó?Ð?ð œCŸN™NÑ*ÜÐ"5°i°[ÀÐ BÓCÐCñ Ø×)Ñ)¨%Ô0à×'Ñ'Ø d¸ð (ó 
ð 	
r;   c              ƒ   óì  K  — | j                   r| j                   ƒ d{  –—†  yt        j                  «       | _         | j                  d«       | j                  D ]  }|j                  «       ƒ d{  –—†  Œ | j                  r"| j                  j                  «       ƒ d{  –—†  | j                  D ]d  }|j                  j                  j                  «       ƒ d{  –—†  |j                  j                  j                  j                  «       ƒ d{  –—†  Œf | j                  rb| j                  j                  j                  «       ƒ d{  –—†  | j                  j                  j                  j                  «       ƒ d{  –—†  | j                  «        | j                  «        | j                  «        | j                  «        | j                   j                  d«       y7 �ŒÄ7 �Œu7 �ŒH7 �Œ7 ŒÜ7 Œ¤7 Œp­w)zM
        Terminate the ICE agent, ending ICE processing and streams.
        NÚclosedT)rò   r‹   ÚFutureÚ%_RTCPeerConnection__setSignalingStaterí   Ústoprç   r¿   rw   Ú+_RTCPeerConnection__updateIceGatheringStateÚ,_RTCPeerConnection__updateIceConnectionStateÚ)_RTCPeerConnection__updateConnectionStateÚremove_all_listenersÚ
set_result)rø   r¥   s     r9   ÚclosezRTCPeerConnection.close  sŠ  è ø€ ð �?Š?Ø—/‘/×!Ð!ØÜ!Ÿ.™.Ó*ˆŒØ× Ñ  Ô*ð  ×.Ñ.ò 	%ˆKØ×"Ñ"Ó$×$Ñ$ð	%à�;Š;Ø—+‘+×"Ñ"Ó$×$Ð$ð  ×.Ñ.ò 	BˆKØ×&Ñ&×0Ñ0×5Ñ5Ó7×7Ð7Ø×&Ñ&×0Ñ0×:Ñ:×?Ñ?ÓA×AÑAð	Bð �;Š;Ø—+‘+×'Ñ'×,Ñ,Ó.×.Ð.Ø—+‘+×'Ñ'×1Ñ1×6Ñ6Ó8×8Ð8ð 	×&Ñ&Ô(Ø×'Ñ'Ô)Ø×$Ñ$Ô&ð 	×!Ñ!Ô#à�‰×"Ñ" 4Õ(ð9 "ùð %ùà$ùð 8ùØAøà.øØ8ús}   ‚G4žG"ŸAG4Á0G%Á1/G4Â G(Â!:G4ÃG+Ã5G4ÄG.Ä9G4ÅG0Å5G4ÆG2ÆA!G4Ç%G4Ç(G4Ç+G4Ç.G4Ç0G4Ç2G4c           	   ƒ   óò  K  — | j                  «        | j                  dvrt        d| j                  › d�«      ‚t        j                  «       dz	  }t        j                  «       }d|› d|› d�|_        |j                  j                  t        j                  dd	g¬
«      «       d|_        | j                  «       j                  D �]1  }|j                  dv r}| j                  |j                   j"                  «      }t%        || j&                  t)        |j*                  |j,                  «      |j.                  ¬«      }|j0                  j2                  }nLt5        | j6                  | j8                  | j6                  j.                  ¬«      }| j6                  j2                  }|j:                  dk(  rd|j<                  _        n|j:                  |j<                  _        |j                  j                  |«       �Œ4 t        j                  dg ¬
«      }|j                  D ]1  }|j@                  j                  |j                   j"                  «       Œ3 |jB                  j                  |«       tE        |«      S ­w)zÂ
        Create an SDP answer to an offer received from a remote peer during
        the offer/answer negotiation of a WebRTC connection.

        :rtype: :class:`RTCSessionDescription`
        ©úhave-remote-offerzhave-local-pranswerz)Cannot create answer in signaling state "r  é    ú- r©   ú IN IP4 0.0.0.0ÚWMSÚ*r®   Úanswerr  ©r¦   r§   r“   ©r–   r“   ÚautoÚclientÚBUNDLE)#r  r	  r   r   Úcurrent_ntp_timer	   ÚSessionDescriptionÚoriginÚmsid_semanticrC   r½   rÑ   r  rs   r›   Ú'_RTCPeerConnection__getTransceiverByMidr   r¡   rÀ   rß   rÆ   r§   Ú_offerDirectionr“   r¿   rw   r¤   rç   ré   Ú_roler„   Úroler°   ÚgrouprÒ   )rø   Úntp_secondsÚdescriptionÚremote_mr¥   rs   rt   Úbundles           r9   ÚcreateAnswerzRTCPeerConnection.createAnswer$  s  è ø€ ð 	×ÑÔ Ø×ÑÐ&RÑRÜ#Ø;¸D×<OÑ<OÐ;PÐPQÐRóð ô
 ×,Ñ,Ó.°"Ñ4ˆÜ×,Ñ,Ó.ˆØ! + ¨a°¨}¸OÐLˆÔØ×!Ñ!×(Ñ(Ü× Ñ ¨%¸°uÔ=ô	
ð $ˆÔà×0Ñ0Ó2×8Ñ8ó 	,ˆHØ�}‰}Ð 2Ñ2Ø"×8Ñ8¸¿¹×9KÑ9KÓL�Ü@ØØŸ,™,Ü+Ø#×-Ñ-¨{×/JÑ/Jóð $Ÿ™ô�ð !,× 4Ñ 4× >Ñ >‘ä9Ø—K‘K¨×(;Ñ(;ÀÇÁÇÁô�ð !%§¡× 5Ñ 5�ð ×"Ñ" fÒ,Ø"*�—
‘
•à"/×"5Ñ"5�—
‘
”à×Ñ×$Ñ$ UÖ+ð1	,ô4 ×%Ñ%¨x¸rÔBˆØ ×&Ñ&ò 	1ˆEØ�L‰L×Ñ §	¡	§¡Õ0ð	1à×Ñ× Ñ  Ô(ä'¨Ó4Ð4ùs   ‚I5I7ÚlabelÚmaxPacketLifeTimeÚmaxRetransmitsÚorderedÚprotocolÚ
negotiatedÚidc           	      ó¨   — |�|�t        d«      ‚| j                  s| j                  «        t        |||||||¬«      }t	        | j                  |«      S )zf
        Create a data channel with the given label.

        :rtype: :class:`RTCDataChannel`
        z8Cannot specify both maxPacketLifeTime and maxRetransmits)rT  rN  rO  rP  rS  rQ  rR  )rr   rç   Ú'_RTCPeerConnection__createSctpTransportr   r   )	rø   rN  rO  rP  rQ  rR  rS  rT  rB   s	            r9   ÚcreateDataChannelz#RTCPeerConnection.createDataChannel\  s`   € ð Ð(¨^Ð-GÜÐWÓXÐXà�{Š{Ø×&Ñ&Ô(ä-ØØØ/Ø)Ø!ØØô
ˆ
ô ˜dŸk™k¨:Ó6Ð6r;   c              ƒ   ó„  ‡ ‡‡‡K  — ‰ j                  «        ‰ j                  D ]L  }t        t        |j                     dd |j
                  «      |_        t        |j                     dd |_        ŒN ‰ j                  j                  «       Št        j                  «       dz	  }t        j                  «       Šd|› d|› d�‰_        ‰j                   j#                  t        j$                  ddg¬«      «       d	‰_        d
t        j                  dt(        t        j*                     fd„}dt(        t        j*                     dt,        dt.        t        j*                     fd„} |‰ j1                  «       «      } |‰ j3                  «       «      }t5        t7        t9        |«      t9        |«      «      «      D �]  } |||«      } |||«      }	|r|j                  n|	j                  }
|r|j:                  j<                  n|	j:                  j<                  }|
dv r_‰ j?                  |«      }|jA                  |«       ‰jB                  j#                  tE        |‰ jF                  |jH                  |¬«      «       ŒÁ|
dk(  sŒÇ|‰ _%        ‰jB                  j#                  tM        ‰ jN                  ‰ jP                  |¬«      «       �Œ dt,        fˆfd„Šdˆˆˆˆ fd„}‰ jN                  s-‰ jR                  jT                  r‰ jW                  «         |«        tY        d„ ‰ j                  «      D ]]  }|jA                   ‰«       «       ‰jB                  j#                  tE        |‰ jF                  |jH                  t[        ‰«      ¬«      «       Œ_ ‰ jN                  r3‰ jN                  j\                  €‰ jR                  jT                  s |«        t        j$                  dg ¬«      }‰jB                  D ]1  }|j^                  j#                  |j:                  j<                  «       Œ3 ‰j`                  j#                  |«       tc        ‰«      S ­w)z£
        Create an SDP offer for the purpose of starting a new WebRTC
        connection to a remote peer.

        :rtype: :class:`RTCSessionDescription`
        Nr5  r6  r©   r7  r8  r9  r®   ÚofferrJ  r3   c                 ó"   — | r| j                   S g S r6   )rs   ©rJ  s    r9   Ú	get_mediaz0RTCPeerConnection.createOffer.<locals>.get_media˜  s   € ñ )4�;×$Ñ$Ð;¸Ð;r;   rs   r’   c                 ó,   — |t        | «      k  r| |   S d S r6   )r  )rs   r’   s     r9   Úget_media_sectionz8RTCPeerConnection.createOffer.<locals>.get_media_section�  s   € ð  !¤3 u£:š~�5˜‘8Ð7°4Ð7r;   r  r;  r˜   r<  c                  ó.   •— t        ‰ j                  «      S r6   )r  rs   r[  s   €r9   Únext_mline_indexz7RTCPeerConnection.createOffer.<locals>.next_mline_index¾  s   ø€ Ü�{×(Ñ(Ó)Ð)r;   c            	      ó¦   •—  ‰«       ‰_         ‰ j                  j                  t        ‰j                  ‰j
                  t        ‰«      ¬«      «       y )Nr<  )rè   rs   rC   r¤   rç   ré   r”   )rJ  r�   r`  rø   s   €€€€r9   Úadd_datachannel_sectionz>RTCPeerConnection.createOffer.<locals>.add_datachannel_sectionÁ  s@   ø€ Ù&6Ó&8ˆDÔ#Ø×Ñ×$Ñ$Ü1Ø—K‘K¨×(;Ñ(;ÄÈdÓASôõr;   c                 ó<   — | j                   d u xr | j                   S r6   )r“   Ústoppedr7   s    r9   r:   z/RTCPeerConnection.createOffer.<locals>.<lambda>Ò  s   € �a—e‘e˜t�mÒ5¨A¯I©I¨€ r;   r?  ©r3   N)2r  rí   rK   r
   r›   Ú_preferred_codecsr±   r   r¶   ræ   rV   r   r@  r	   rA  rB  rC  rC   r½   rÑ   r=   r�   rT   r   r  r  r  Úmaxr  r   r¡   rD  Ú_set_mline_indexrs   rÀ   rß   r§   rè   r¤   rç   ré   rà   ÚalwaysNegotiateDataChannelsrV  r>   r”   r“   r°   rH  rÒ   )rø   r¥   rI  r\  r^  Úlocal_mediaÚremote_mediar’   Úlocal_mrK  Ú
media_kindr“   rb  rL  rs   rJ  r�   r`  s   `              @@@r9   ÚcreateOfferzRTCPeerConnection.createOffer|  s¨  ûè ø€ ð 	×ÑÔ ð  ×.Ñ.ò 	SˆKÜ"9Ü�{×'Ñ'Ñ(©Ð+¨[×-JÑ-Jó#ˆKÔô ->¸k×>NÑ>NÑ,OÑPQÐ,RˆKÕ)ð		Sð �‰×#Ñ#Ó%ˆô ×,Ñ,Ó.°"Ñ4ˆÜ×,Ñ,Ó.ˆØ! + ¨a°¨}¸OÐLˆÔØ×!Ñ!×(Ñ(Ü× Ñ ¨%¸°uÔ=ô	
ð #ˆÔð	<Ü×/Ñ/ð	<ä”#×&Ñ&Ñ'ó	<ð
	8Üœ×,Ñ,Ñ-ð	8Ü25ð	8ä”c×*Ñ*Ñ+ó	8ñ   × 7Ñ 7Ó 9Ó:ˆÙ  ×!9Ñ!9Ó!;Ó<ˆÜ”sœ3˜{Ó+¬S°Ó->Ó?Ó@ó 	ˆAÙ'¨°QÓ7ˆGÙ(¨°qÓ9ˆHÙ)0˜Ÿš°h·m±mˆJÙ'.�'—+‘+×#Ò#°H·L±L×4FÑ4FˆCØÐ/Ñ/Ø"×8Ñ8¸Ó=�Ø×,Ñ,¨QÔ/Ø×!Ñ!×(Ñ(Ü<Ø#Ø"Ÿl™lØ"-×"7Ñ"7Øô	õð ˜}Ó,Ø*+�Ô'Ø×!Ñ!×(Ñ(Ü5ØŸ™¨D×,?Ñ,?ÀSôöð%	ð2	*¤#õ 	*÷	ð 	ð �{Š{˜t×3Ñ3×OÒOØ×&Ñ&Ô(Ù#Ô%ä!Ù5°t×7JÑ7Jó
ò 	ˆKð ×(Ñ(Ñ)9Ó);Ô<Ø×Ñ×$Ñ$Ü8ØØŸ,™,Ø)×3Ñ3Ü$ TÓ*ô	õð		ð �KŠKØ—‘—‘Ð'Ø×(Ñ(×DÒDá#Ô%ä×%Ñ%¨x¸rÔBˆØ ×&Ñ&ò 	1ˆEØ�L‰L×Ñ §	¡	§¡Õ0ð	1à×Ñ× Ñ  Ô(ä'¨Ó4Ð4ùs   †I3Q É:GQ c                 óB   — t        t        d„ | j                  «      «      S )z|
        Returns the list of :class:`RTCRtpReceiver` objects that are currently
        attached to the connection.
        c                 ó   — | j                   S r6   )r¿   r7   s    r9   r:   z0RTCPeerConnection.getReceivers.<locals>.<lambda>ð  s
   €  !§*¡*€ r;   ©r=   r‰   rí   rû   s    r9   ÚgetReceiverszRTCPeerConnection.getReceiversë  s   € ô
 ”CÑ,¨d×.AÑ.AÓBÓCÐCr;   c                 óB   — t        t        d„ | j                  «      «      S )zz
        Returns the list of :class:`RTCRtpSender` objects that are currently
        attached to the connection.
        c                 ó   — | j                   S r6   )r²   r7   s    r9   r:   z.RTCPeerConnection.getSenders.<locals>.<lambda>÷  s
   €  !§(¡(€ r;   rq  rû   s    r9   Ú
getSenderszRTCPeerConnection.getSendersò  s   € ô
 ”CÑ*¨D×,?Ñ,?Ó@ÓAÐAr;   c              ƒ   óL  K  — t        «       }| j                  «       D �cg c]  }|j                  «       ‘Œ c}| j                  «       D �cg c]  }|j                  «       ‘Œ c}z   }t	        j
                  |Ž ƒ d{  –—† D ]  }|j                  |«       Œ |S c c}w c c}w 7 Œ&­w)za
        Returns statistics for the connection.

        :rtype: :class:`RTCStatsReport`
        N)r-   ru  ÚgetStatsrr  r‹   rŒ   Úupdate)rø   Úmergedr8   r�   Úreports        r9   rw  zRTCPeerConnection.getStatsù  s‘   è ø€ ô  Ó!ˆØ'+§¡Ó'8Ö9 !�—‘•Ò9Ø"&×"3Ñ"3Ó"5ö=
ØˆA�J‰J�Lò=
ñ 
ˆô $ŸN™N¨EÐ2×2ò 	"ˆFØ�M‰M˜&Õ!ð	"àˆùò :ùò =
ð 3ús'   ‚B$ŸB¶B$Á
BÁ!B$Á;B"Á<'B$c                 ó,   — t        | j                  «      S )z
        Returns the list of :class:`RTCRtpTransceiver` objects that are currently
        attached to the connection.
        )r=   rí   rû   s    r9   ÚgetTransceiversz!RTCPeerConnection.getTransceivers  s   € ô
 �D×'Ñ'Ó(Ð(r;   ÚsessionDescriptionc              ƒ   óX  K  — | j                  «        |€h| j                  dk(  r| j                  «       ƒ d{  –—† }n| j                  «       ƒ d{  –—† }| j	                  d|j
                  |j                  «       n'| j	                  d|j
                  |j                  «       t        j                  j                  |j                  «      }|j
                  |_        | j                  |d¬«       |j
                  dk(  r| j                  d«       n |j
                  d	k(  r| j                  d
«       t        |j                  «      D ]ˆ  \  }}|j                  j                  }| j                  j!                  |«       |j"                  dv r#| j%                  |«      }|j'                  |«       Œh|j"                  dk(  sŒx|| j(                  _        ŒŠ |j
                  dk(  r6| j,                  D ]'  }|j.                  rŒd|j0                  _        d|_        Œ) |j
                  d	k(  r¿t        |j                  «      D ]§  \  }}|j"                  dv rK| j%                  |«      }|j4                  j6                  j9                  |j:                  j<                  «       Œ_|j"                  dk(  sŒo| j(                  j6                  j9                  |j:                  j<                  «       Œ© | j>                  D ]@  }|j
                  dv sŒ|jA                  tC        |jD                  |jF                  «      «       ŒB | jI                  «       ƒ d{  –—†  t        |j                  «      D ]u  \  }}|j"                  dv r2| j%                  |«      }tK        ||j4                  j6                  «       ŒF|j"                  dk(  sŒVtK        || j(                  j6                  «       Œw tM        jN                  | jQ                  «       «       |j
                  d	k(  r|| _)        d| _*        y|| _*        y7 �Œë7 �ŒÕ7 Œà­w)aƒ  
        Change the local description associated with the connection.

        :param sessionDescription: An :class:`RTCSessionDescription` generated
                                    by :meth:`createOffer` or :meth:`createAnswer()`
                                    or `None` to implicitly create an offer or create
                                    an answer, as needed.
        Nr4  z$setLocalDescription(%s, implicit)
%szsetLocalDescription(%s)
%sT©Úis_localrY  úhave-local-offerr:  rØ   r  r˜   ©r:  Úpranswer)+r  r	  rM  rn  Ú_RTCPeerConnection__log_debugrÑ   r	   rA  ÚparseÚ(_RTCPeerConnection__validate_descriptionr*  Ú	enumeraters   r   r¡   ræ   r‘   r›   Ú._RTCPeerConnection__getTransceiverByMLineIndexÚ_set_midrç   r“   rã   Ú	_role_setÚ_connectionÚice_controllingr¿   rw   Ú	_set_roler„   rG  rí   Ú_setCurrentDirectionrÆ   r§   rE  Ú_RTCPeerConnection__gatherr‡   r‹   Úensure_futureÚ_RTCPeerConnection__connectrô   rö   )	rø   r}  rJ  r’   rs   r“   r¥   r†   Úts	            r9   ÚsetLocalDescriptionz%RTCPeerConnection.setLocalDescription  s�  è ø€ ð 	×ÑÔ àÐ%ð ×"Ñ"Ð&9Ò9Ø+/×+<Ñ+<Ó+>×%>Ñ"à+/×+;Ñ+;Ó+=×%=Ð"Ø×ÑØ7Ø"×'Ñ'Ø"×&Ñ&õð ×ÑØ-Ø"×'Ñ'Ø"×&Ñ&ôô ×,Ñ,×2Ñ2Ð3E×3IÑ3IÓJˆØ-×2Ñ2ˆÔØ×#Ñ# K¸$Ð#Ô?ð ×Ñ˜wÒ&Ø×$Ñ$Ð%7Õ8Ø×Ñ Ò)Ø×$Ñ$ XÔ.ô " +×"3Ñ"3Ó4ò 	&‰HˆAˆuØ—)‘)—/‘/ˆCØ�O‰O×Ñ Ô$Ø�z‰zÐ/Ñ/Ø"×?Ñ?ÀÓB�Ø×$Ñ$ SÕ)Ø—‘˜}Ó,Ø"%�—‘•ð	&ð ×Ñ˜wÒ&Ø $× 4Ñ 4ò 2�Ø#×-Ó-Ø?C�L×,Ñ,Ô<Ø-1�LÕ*ð2ð ×Ñ˜xÒ'Ü% k×&7Ñ&7Ó8ò E‘��5Ø—:‘:Ð!3Ñ3Ø"&×"CÑ"CÀAÓ"F�KØ×(Ñ(×2Ñ2×<Ñ<¸U¿Z¹Z¿_¹_ÕMØ—Z‘Z =Ó0Ø—K‘K×)Ñ)×3Ñ3°E·J±J·O±OÕDðEð ×$Ñ$ò 	VˆAØ×ÑÐ#9Ò9Ø×&Ñ&¤}°Q·[±[À!×BSÑBSÓ'TÕUð	Vð
 �m‰m‹o×ÐÜ! +×"3Ñ"3Ó4ò 	H‰HˆAˆuØ�z‰zÐ/Ñ/Ø"×?Ñ?ÀÓB�Ü)¨%°×1EÑ1E×1OÑ1OÕPØ—‘˜}Ó,Ü)¨%°·±×1FÑ1FÕGð	Hô 	×Ñ˜dŸn™nÓ.Ô/ð ×Ñ˜xÒ'Ø-8ˆDÔ*Ø-1ˆDÕ*à-8ˆDÕ*ðU &?ùà%=ùðp 	úsW   ‚5P*·P"¸P*ÁP%ÁE-P*Æ?=P*Ç=B,P*Ê*AP*ÌAP*ÍP(ÍA.P*Î7A,P*Ð%P*Ð(P*c              ƒ   ó   K  — | j                  d|j                  |j                  «       t        j                  j	                  |j                  «      }|j                  |_        | j                  |d¬«       i }g }t        |j                  «      D �]¸  \  }}d}| j                  j                  |j                  j                  «       |j                  dv �rwd}| j                  D ]D  }	|	j                  |j                  k(  sŒ|	j                  d|j                  j                  fv sŒB|	} n |€| j                  d|j                  ¬«      }|j                  €6|j!                  |j                  j                  «       |j#                  |«       t%        t'        t(        |j                     |j                  j*                  «      |j,                  «      }
t/        |
«      s$t1        dj3                  |j                  «      «      ‚|
|_        t7        t8        |j                     |j                  j:                  «      |_        t?        |j@                  «      }|j                  d	v r|jC                  |«       n||_"        |d
v r†|jF                  jH                  sptK        |j                  |jM                  |«      ¬«      |jF                  _'        |jQ                  tS        |jF                  |jF                  jH                  |¬«      «       |jF                  jT                  }|jV                  | jX                  |<   |jZ                  | j\                  |<   �n'|j                  dk(  �r| j^                  s| ja                  «        | j^                  j                  €,|j                  j                  | j^                  _        || _1        |jd                  dk(  r%d| _3        ti        |jj                  d   «      | _6        nd| _3        |jn                  | _6        |jp                  | _9        | j^                  jT                  }|jV                  | jX                  | j^                  <   |jZ                  | j\                  | j^                  <   |€�Œé|jT                  }|||<   |j                  dk(  r8|jt                  s,|jZ                  jv                  |jx                  _=        d|_:        |j                  dk(  r+|jV                  j|                  dk(  r|j                  d¬«       |j                  dk(  s�ŒŒ|j                  |jV                  j|                  dk(  rdnd¬«       �Œ» t�        d„ |j‚                  D «       d«      }|�r‘|j„                  �r„|j„                  d   }d}| j                  D ])  }|j                  |k(  sŒ|jF                  jT                  } n | j^                  r/| j^                  j                  |k(  r| j^                  jT                  }t‡        «       }|j„                  dd }| j                  D ]€  }|j                  |v sŒ|jˆ                  rŒ|j                  |jF                  jT                  «       |jF                  j‹                  |«       |jŒ                  j‹                  |«       d|_D        Œ‚ | j^                  r| j^                  j                  |v rg| j^                  jˆ                  sQ|j                  | j^                  jT                  «       | j^                  j‹                  |«       d| j^                  _D        |D ]˜  }|j�                  «       ƒ d{  –—†  |jT                  j�                  «       ƒ d{  –—†  | j�                  j“                  |«       | j”                  j“                  |jT                  «       |j—                  |jT                  d«       Œš | j™                  «        | j›                  «        | j�                  «        |j…                  «       D ��cg c]  \  }}tŸ        ||«      ‘Œ }}}t¡        j¢                  |Ž ƒ d{  –—†  |D ]  }| j¥                  d|jH                  «       Œ  t¡        j¦                  | j©                  «       «       |j                  dk(  r| j«                  d«       n |j                  dk(  r| j«                  d«       |j                  dk(  r|| _V        d| _W        y|| _W        y7 �Œ¨7 �Œ‰c c}}w 7 Œ½­w)zø
        Changes the remote description associated with the connection.

        :param sessionDescription: An :class:`RTCSessionDescription` created from
                                    information received over the signaling channel.
        zsetRemoteDescription(%s)
%sFr  Nr  rÌ   )r§   r›   z3Failed to set remote {} description send parametersr‚  ©rÌ   r  )r›   rT  )r¿   r  r¥   r˜   r™   Tr   rY  r>  Úserver)rG  r:  c              3   ó@   K  — | ]  }|j                   d k(  sŒ|–— Œ y­w)r?  N)r¯   )Ú.0r8   s     r9   ú	<genexpr>z9RTCPeerConnection.setRemoteDescription.<locals>.<genexpr>ì  s   è ø€ ÒN˜Q°q·z±zÀXÓ7M”qÑNùs   ‚—r   r  r4  rØ   )Xr„  rÑ   r	   rA  r…  r†  r‡  rs   ræ   r‘   r   r¡   r›   rí   r“   r"  r‰  rh  rK   r]   r
   r1   rf  r  r   Úformatr±   rd   r   r«   r¶   rÎ   r§   rŽ  rE  r¿   r  r&   Úwebrtc_track_idÚ_trackrC   r   rw   r„   rä   r~   rå   rç   rV  rè   rp   ré   rT   rœ   rê   r    r£   rë   rŠ  ÚiceLiter‹  rŒ  rG  r�  r?   rH  r°   rá   r  ÚsetTransportr²   r+  râ   Údiscardrã   Úpopr,  r-  r.  rŽ   r‹   rŒ   Úemitr�  r‘  r*  rõ   r÷   )rø   r}  rJ  ÚiceCandidatesÚtrackEventsr’   rs   rt   r¥   r’  rZ   r§   r†   rL  Ú
primaryMidÚprimaryTransportÚoldTransportsÚ	slaveMidsr�   Úevents                       r9   ÚsetRemoteDescriptionz&RTCPeerConnection.setRemoteDescriptionm  s„  è ø€ ð 	×ÑØ*Ø×#Ñ#Ø×"Ñ"ô	
ô ×,Ñ,×2Ñ2Ð3E×3IÑ3IÓJˆØ-×2Ñ2ˆÔØ×#Ñ# K¸%Ð#Ô@ð FHˆØˆÜ! +×"3Ñ"3Ó4ó e	‰HˆAˆuØ8<ˆMØ�O‰O×Ñ §	¡	§¡Ô0Ø�z‰zÐ/Ò/à"�Ø×,Ñ,ò �AØ—v‘v §¡Ó+°·±¸$ÀÇ	Á	ÇÁÐ9PÒ0PØ&'˜Ùðð Ð&Ø"&×":Ñ":Ø",°5·:±:ð #;ó #�Kð —?‘?Ð*Ø×(Ñ(¨¯©¯©Ô9Ø×0Ñ0°Ô3ô 1Ü&¤v¨e¯j©jÑ'9¸5¿9¹9×;KÑ;KÓLØ×1Ñ1ó�ô
 ˜6”{Ü(ØM×TÑTØ!ŸJ™Jóóð ð '-�Ô#Ü0MÜ% e§j¡jÑ1°5·9±9×3MÑ3Mó1�Ô-ô
 .¨e¯o©oÓ>�	Ø×#Ñ#Ð'=Ñ=Ø×4Ñ4°YÕ?à2;�KÔ/ð Ð!9Ñ9Ø'×0Ñ0×6Ò6ä2CØ"ŸZ™Z¨K×,GÑ,GÈÓ,Nô3�K×(Ñ(Ô/ð  ×&Ñ&Ü%Ø%0×%9Ñ%9Ø"-×"6Ñ"6×"<Ñ"<Ø(3ôôð !,× 4Ñ 4× >Ñ >�Ø16·±�×!Ñ! +Ñ.Ø05·	±	�× Ñ  Ó-à—‘˜}Ó,Ø—{’{Ø×.Ñ.Ô0Ø—;‘;—?‘?Ð*Ø&+§i¡i§o¡o�D—K‘K”OØ./�DÔ+ð —=‘= KÒ/Ø*.�DÔ'Ü,/°·	±	¸!±Ó,=�DÕ)à*/�DÔ'Ø,1¯O©O�DÔ)Ø(-×(>Ñ(>�Ô%ð !%§¡× 5Ñ 5�Ø16·±�×!Ñ! $§+¡+Ñ.Ø05·	±	�× Ñ  §¡Ñ-àÒ(à,×6Ñ6�Ø.3�˜lÑ+ð ×#Ñ# wÒ.°|×7MÒ7MØ?D¿y¹y×?PÑ?P�L×,Ñ,Ô<Ø-1�LÔ*ð ×#Ñ# wÒ.°5·:±:·?±?ÀhÒ3NØ!×+Ñ+°Ð+Ô:Ø×#Ñ# xÔ/Ø!×+Ñ+Ø).¯©¯©¸HÒ)D™XÈ(ð ,ö ðGe	ôP ÑN +×"3Ñ"3ÔNÐPTÓUˆÚ�f—l“làŸ™ a™ˆJØ#ÐØ#×2Ñ2ò �Ø—?‘? jÓ0Ø'2×';Ñ';×'EÑ'EÐ$Ùðð �{Š{˜tŸ{™{Ÿ™°*Ò<Ø#'§;¡;×#8Ñ#8Ð ô  ›EˆMØŸ™ Q RÐ(ˆIØ#×2Ñ2ò 0�Ø—?‘? iÒ/¸×8LÓ8LØ!×%Ñ% k×&:Ñ&:×&DÑ&DÔEØ×(Ñ(×5Ñ5Ð6FÔGØ×&Ñ&×3Ñ3Ð4DÔEØ+/�KÕ(ð0ð —’Ø—K‘K—O‘O yÑ0ØŸ™×,Ò,à×!Ñ! $§+¡+×"7Ñ"7Ô8Ø—‘×(Ñ(Ð)9Ô:Ø'+�—‘Ô$ð "/ò A�Ø#×(Ñ(Ó*×*Ð*Ø#×-Ñ-×2Ñ2Ó4×4Ð4Ø×%Ñ%×-Ñ-¨mÔ<Ø×$Ñ$×,Ñ,¨]×-DÑ-DÔEØ×!Ñ! -×"9Ñ"9¸4Õ@ðAð ×*Ñ*Ô,Ø×+Ñ+Ô-Ø×(Ñ(Ô*ð
 (5×':Ñ':Ó'<÷
á#�˜eô " ,°Õ6ð
ˆñ 
ô �n‰n˜eÐ$×$Ð$ð !ò 	,ˆEØ�I‰I�g˜uŸ{™{Õ+ð	,ô 	×Ñ˜dŸn™nÓ.Ô/ð ×Ñ˜wÒ&Ø×$Ñ$Ð%8Õ9Ø×Ñ Ò)Ø×$Ñ$ XÔ.ð ×Ñ˜xÒ'Ø.9ˆDÔ+Ø.2ˆDÕ+à.9ˆDÕ+ðE +ùØ4ûó
ð 	%úss   ‚C?c>Ä$c>Ä'Mc>Ñ9B!c>ÔBc>Ö)B
c>Ø4c>ÙDc>Ýc0Ý	!c>Ý*c3Ý+B%c>àc6à&c>à>c<à?B2c>ã3c>ã6c>c              ƒ   óþ  K  — | j                   D �]<  }|j                  j                  }|j                  }|j                  j	                  «       sŒA|| j
                  v sŒP|j                  | j
                  |   «      ƒ d {  –—†  |j                  dk(  r&|j                  | j                  |   «      ƒ d {  –—†  |j                  dk(  sŒ»|j                  dv r2|j                  j                  | j                  |«      «      ƒ d {  –—†  |j                  dv s�Œ|j                  j                  | j                  |«      «      ƒ d {  –—†  �Œ? | j                  �r| j                  j                  }|j                  }|j                  j	                  «       rÑ| j                  | j
                  v r¸|j                  | j
                  | j                     «      ƒ d {  –—†  |j                  dk(  r0|j                  | j                  | j                     «      ƒ d {  –—†  |j                  dk(  r9| j                  j                  | j                   | j"                  «      ƒ d {  –—†  y y y y y 7 �Œë7 �Œ¹7 �Œl7 �Œ-7 Œ›7 Œ^7 Œ­w)Nr×   Ú	connected)rË   r  r•  )rí   r¿   rw   rx   ry   rå   Ústartr{   rä   ÚcurrentDirectionr²   ÚsendÚ_RTCPeerConnection__localRtpÚreceiveÚ_RTCPeerConnection__remoteRtprç   rë   rê   )rø   r¥   rt   r†   s       r9   Ú	__connectzRTCPeerConnection.__connect0  s0  è ø€ Ø×.Ñ.ó 	ˆKØ'×0Ñ0×:Ñ:ˆMØ(×2Ñ2ˆLà×(Ñ(×;Ñ;Õ=Ø 4×#3Ñ#3Ò3à"×(Ñ(¨×)9Ñ)9¸+Ñ)FÓG×GÐGØ ×&Ñ&¨%Ò/Ø'×-Ñ-¨d×.?Ñ.?ÀÑ.LÓM×MÐMØ ×&Ñ&¨+Ó5Ø"×3Ñ3Ð7OÑOØ)×0Ñ0×5Ñ5°d·o±oÀkÓ6RÓS×SÐSØ"×3Ñ3Ð7OÓOØ)×2Ñ2×:Ñ:Ø ×,Ñ,¨[Ó9ó÷ ò ð	ð" �;‹;Ø ŸK™K×1Ñ1ˆMØ(×2Ñ2ˆLà×(Ñ(×;Ñ;Ô=Ø—K‘K 4×#3Ñ#3Ñ3à"×(Ñ(¨×)9Ñ)9¸$¿+¹+Ñ)FÓG×GÐGØ ×&Ñ&¨%Ò/Ø'×-Ñ-¨d×.?Ñ.?ÀÇÁÑ.LÓM×MÐMØ ×&Ñ&¨+Ò5ØŸ+™+×+Ñ+Ø×-Ñ-¨t×/DÑ/Dó÷ ñ ð 6ð 4ð >ð	 ð HùàMùð Tùðùð HøàMøðús˜   ‚AI=ÁI=Á!I=Â I+Â4I=Â5I.Â6I=Ã
;I=ÄI1ÄI=Ä-I=ÅI4ÅBI=ÇI7Ç>I=ÈI9ÈAI=É!I;É"
I=É.I=É1I=É4I=É7I=É9I=É;I=c              ƒ   ór   K  — t        d„ | j                  «      }t        j                  |Ž ƒ d {  –—†  y 7 Œ­w)Nc                 ó6   — | j                   j                  «       S r6   )rx   rŒ   )r’  s    r9   r:   z,RTCPeerConnection.__gather.<locals>.<lambda>R  s   € ˜aŸm™m×2Ñ2Ó4€ r;   )r‰   rã   r‹   rŒ   )rø   r�   s     r9   Ú__gatherzRTCPeerConnection.__gatherQ  s+   è ø€ ÜÑ4°d×6JÑ6JÓKˆÜ�n‰n˜eÐ$×$Ò$ús   ‚-7¯5°7c                 ó2   — | j                   rt        d«      ‚y )NzRTCPeerConnection is closed)rò   r   rû   s    r9   Ú__assertNotClosedz#RTCPeerConnection.__assertNotClosedU  s   € Ø�?Š?Ü#Ð$AÓBÐBð r;   c                 ób   — | j                  «       D ]  }|j                  |k(  sŒt        d«      ‚ y )NzTrack already has a sender)ru  r  r   )rø   r  r²   s      r9   Ú__assertTrackHasNoSenderz*RTCPeerConnection.__assertTrackHasNoSenderY  s2   € Ø—o‘oÓ'ò 	GˆFØ�|‰|˜uÓ$Ü(Ð)EÓFÐFñ	Gr;   c                 ó  — t        | j                  «      dkD  s| j                  rÍt        | j                  «      dkD  rF| j                  d   j                  j                  j                  j
                  j                  «       }n8| j                  j                  j                  j
                  j                  «       }t        | j                  j                  |j                  |j                  ¬«      }n t        | j                  j                  ¬«      }|j                  d| j                  «       t        |«      }|j                  d| j                  «       |j                  d| j                   «       | j"                  j%                  |«       t'        || j(                  «      }|j                  d| j                   «       | j*                  j%                  |«       | j                  «        | j                  «        | j!                  «        |S )Nr   )Ú
iceServersÚlocal_usernameÚlocal_password)r»  Ústatechange)r  rí   rç   r¿   rw   rx   r}   r   rà   r»  ÚusernameFragmentÚpasswordÚonr,  r   r-  r.  rã   r‘   r   rÜ   râ   )rø   rB   rx   r†   rt   s        r9   Ú__createDtlsTransportz'RTCPeerConnection.__createDtlsTransport^  s�  € äˆt×"Ñ"Ó# aÒ'¨4¯;ª;Ü�4×&Ñ&Ó'¨!Ò+Ø!×0Ñ0Øñç‘(Ÿ9™9§Y¡Y¯{©{×;MÑ;MÓ;Oñ ð
 —K‘K×)Ñ)×3Ñ3×?Ñ?×RÑRÓTð ô )Ø×/Ñ/×:Ñ:Ø)×:Ñ:Ø)×2Ñ2ô‰Kô )°D×4HÑ4H×4SÑ4SÔTˆKà�‰�} d×&DÑ&DÔEÜ& {Ó3ˆØ�‰˜ t×'FÑ'FÔGØ�‰˜ t×'CÑ'CÔDØ×Ñ× Ñ  Ô.ô )¨°t×7JÑ7JÓKˆØ×Ñ˜¨×(DÑ(DÔEØ×Ñ×!Ñ! -Ô0ð 	×&Ñ&Ô(Ø×'Ñ'Ô)Ø×$Ñ$Ô&àÐr;   c                 ó´  ‡ — d }‰ j                   j                  t        j                  k(  xr t	        ‰ j
                  «      dkD  }|r$‰ j
                  d   j                  j                  }n‰ j                  «       }t        |«      ‰ _
        |‰ j                  _        d ‰ j                  _        ‰ j                  j                  d«      dt        dd fˆ fd„«       }y )Nr   ÚdatachannelÚchannelr3   c                 ó*   •— ‰j                  d| «       y )NrÄ  )r¡  )rÅ  rø   s    €r9   Úon_datachannelz?RTCPeerConnection.__createSctpTransport.<locals>.on_datachannel‘  s   ø€ à�I‰I�m WÕ-r;   )rà   ÚbundlePolicyr   Ú
MAX_BUNDLEr  rí   r¿   rw   Ú'_RTCPeerConnection__createDtlsTransportr+   rç   r  r“   rÁ  r   )rø   rt   ÚbundledrÇ  s   `   r9   Ú__createSctpTransportz'RTCPeerConnection.__createSctpTransportƒ  s¾   ø€ Øˆà× Ñ ×-Ñ-´×1KÑ1KÑKò -Ü�D×'Ñ'Ó(¨1Ñ,ð 	ñ Ø ×/Ñ/°Ñ2×;Ñ;×EÑE‰Mà ×6Ñ6Ó8ˆMÜ& }Ó5ˆŒØ&ˆ�‰ÔØˆ�‰Œà	�‰�‰˜Ó	&ð	.¤Nð 	.°tô 	.ó 
'ñ	.r;   r›   r  c           	      ó6  ‡— d }d}| j                   j                  t        j                  k(  rct	        | j
                  «      dkD  r&| j
                  d   j                  j                  }d}n‰| j                  r}| j                  j                  }d}nd| j                   j                  t        j                  k(  r=t        t        ˆfd„| j
                  «      d «      }|r|j                  j                  }d}|s| j                  «       }t        |‰t        |xs ‰|«      t        ‰|«      ¬«      }|j                  j!                  |j"                  j$                  «       | j&                  |j"                  _        ||_        | j
                  j-                  |«       |S )NFr   Tc                 ó"   •— | j                   ‰k(  S r6   )r›   )r’  r›   s    €r9   r:   z7RTCPeerConnection.__createTransceiver.<locals>.<lambda>£  s   ø€  §¡¨4¡€ r;   )r§   r›   r²   r¿   )rà   rÈ  r   rÉ  r  rí   r¿   rw   rç   ÚBALANCEDr?   r>   rÊ  r)   r(   r'   Ú_set_rtcp_ssrcr²   r»   rì   r³   r  rC   )rø   r§   r›   r  rt   rË  r¥   s     `    r9   Ú__createTransceiverz%RTCPeerConnection.__createTransceiver•  s\  ø€ ð ˆØˆØ×Ñ×,Ñ,´×0JÑ0JÒJÜ�4×&Ñ&Ó'¨!Ò+Ø $× 3Ñ 3°AÑ 6× ?Ñ ?× IÑ I�Ø‘Ø—’Ø $§¡× 5Ñ 5�Ø‘Ø×!Ñ!×.Ñ.´/×2JÑ2JÒJÜÜÓ/°×1DÑ1DÓEÀtóˆKñ Ø +× 4Ñ 4× >Ñ >�Ø�áØ ×6Ñ6Ó8ˆMä'ØØÜ Ò 4°°mÓDÜ# D¨-Ó8ô	
ˆð 	×Ñ×+Ñ+¨K×,>Ñ,>×,DÑ,DÔEØ(,×(8Ñ(8ˆ×ÑÔ%Ø&ˆÔØ×Ñ×"Ñ" ;Ô/ØÐr;   r“   c                 óJ   ‡— t        t        ˆfd„| j                  «      d «      S )Nc                 ó"   •— | j                   ‰k(  S r6   )r“   )r8   r“   s    €r9   r:   z9RTCPeerConnection.__getTransceiverByMid.<locals>.<lambda>¹  s   ø€  Q§U¡U¨c¡\€ r;   ©r?   r>   rí   )rø   r“   s    `r9   Ú__getTransceiverByMidz'RTCPeerConnection.__getTransceiverByMid¸  s   ø€ Ü”FÓ1°4×3FÑ3FÓGÈÓNÐNr;   rÄ   c                 óJ   ‡— t        t        ˆfd„| j                  «      d «      S )Nc                 ó*   •— | j                  «       ‰k(  S r6   )r  )r8   rÄ   s    €r9   r:   z@RTCPeerConnection.__getTransceiverByMLineIndex.<locals>.<lambda>½  s   ø€ ˜Q×/Ñ/Ó1°UÑ:€ r;   rÔ  )rø   rÄ   s    `r9   Ú__getTransceiverByMLineIndexz.RTCPeerConnection.__getTransceiverByMLineIndex»  s$   ø€ ÜÜÓ:¸D×<OÑ<OÓPÐRVó
ð 	
r;   c                 ó6   — | j                   xs | j                  S r6   )rö   rô   rû   s    r9   Ú__localDescriptionz$RTCPeerConnection.__localDescriptionÀ  s   € Ø×-Ñ-ÒO°×1OÑ1OÐOr;   r¥   c                 ó   — t        |j                  |j                  |j                  ¬«      }| j                  |j
                  _        |j                  j                  |j
                  _	        d|j
                  _
        |S )Nrª   T)r%   r±   r¶   r“   rß   Úrtcpr¦   r²   r»   r¬   Úmux)rø   r¥   r   s      r9   Ú
__localRtpzRTCPeerConnection.__localRtpÃ  s]   € Ü"Ø×&Ñ&Ø(×:Ñ:Ø—/‘/ô
ˆð
 Ÿ™ˆ�‰ŒØ#×*Ñ*×0Ñ0ˆ�‰ŒØˆ�‰ŒØˆ
r;   ÚmsgÚargsc                 ó6   — t        j                  d|› �g|¢­Ž  y )NzRTCPeerConnection() )r  Údebug)rø   rß  rà  s      r9   Ú__log_debugzRTCPeerConnection.__log_debugÎ  s   € Ü�‰Ð+¨C¨5Ð1Ð9°DÔ9r;   c                 ó6   — | j                   xs | j                  S r6   )r÷   rõ   rû   s    r9   Ú__remoteDescriptionz%RTCPeerConnection.__remoteDescriptionÑ  s   € Ø×.Ñ.ÒQ°$×2QÑ2QÐQr;   c                 óð  — | j                  «       j                  |j                  «          }t        |j                  |j
                  |j                  j                  |j                  j                  ¬«      }t        |j                  «      rêi }|j                  D ]»  }t        |«      rs|j                  j                  d«      }t        |t        «      rG||v rCt        |j                  «      dk(  r+t!        |j                  d   j                  ¬«      ||   _        Œ�t%        |j                  d   j                  |j&                  ¬«      ||j&                  <   Œ½ t)        |j+                  «       «      |_        |S )N)r1   r«   r¡   rÜ  r<   é   r   )r¬   r   )r¬   rD   )r  rs   r  r#   r±   r¶   r   r¡   rÜ  r  r¬   r   rB   rR   rS   rT   r$   rJ   r    rD   r=   ÚvaluesÚ	encodings)rø   r¥   rs   ÚreceiveParametersré  rI   r<   s          r9   Ú__remoteRtpzRTCPeerConnection.__remoteRtpÔ  s1  € Ø×(Ñ(Ó*×0Ñ0°×1MÑ1MÓ1OÑPˆä3Ø×&Ñ&Ø(×:Ñ:Ø—)‘)—/‘/Ø—‘—‘ô	
Ðô ˆu�z‰zŒ?Ø=?ˆIØ$×,Ñ,ò �Ü˜%”=Ø×*Ñ*×.Ñ.¨uÓ5�Cä" 3¬Ô,Ø 9Ñ,Ü §
¡
›O¨qÒ0ä-@Ø!&§¡¨A¡×!3Ñ!3ô.˜	 #™Ô*ð ä/GØŸ™ A™×+Ñ+¸×9JÑ9Jô0�	˜%×+Ñ+Ò,ðô  +/¨y×/?Ñ/?Ó/AÓ*BÐÔ'Ø Ð r;   r{   c                 ó4   — || _         | j                  d«       y )NÚsignalingstatechange)ró   r¡  )rø   r{   s     r9   Ú__setSignalingStatez%RTCPeerConnection.__setSignalingStateò  s   € Ø %ˆÔØ�	‰	Ð(Õ)r;   c                 ó^  — t        t        d„ | j                  «      «      }t        t        d„ | j                  «      «      }| j                  rd}nHd|v sd|v rd}n=|j                  ddg«      s|j                  ddg«      sd}nd|v sd|v rd}n	d|v rd}nd}|| j                  k7  r5| j                  d	| j                  |«       || _        | j                  d
«       | j                  sF| j                  €9|t        dg«      k(  r)t        j                  | j                  «       «      | _	        y y y y )Nc                 ó   — | j                   S r6   ©r{   r7   s    r9   r:   z;RTCPeerConnection.__updateConnectionState.<locals>.<lambda>ù  s
   €  q§w¡w€ r;   c                 ó   — | j                   S r6   rñ  r7   s    r9   r:   z;RTCPeerConnection.__updateConnectionState.<locals>.<lambda>ú  s
   €  a§g¡g€ r;   r(  Úfailedr×   ÚcheckingÚ
connectingr«  zconnectionState %s -> %sÚconnectionstatechange)rá   r‰   râ   rã   rò   Ú
differencerï   r„  r¡  rî   r‹   r�  r1  )rø   Ú
dtlsStatesÚ	iceStatesr{   s       r9   Ú__updateConnectionStatez)RTCPeerConnection.__updateConnectionStateö  s6  € ô œÑ.°×0EÑ0EÓFÓGˆ
ÜœÑ-¨t×/CÑ/CÓDÓEˆ	Ø�?Š?Ø‰EØ˜Ñ" h°*Ñ&<Ø‰EØ×%Ñ% u¨hÐ&7Ô8À×AVÑAVØ�HÐôB
ð ‰EØ˜9Ñ$¨¸
Ñ(BØ ‰EØ�jÑ ð !‰EàˆEð �D×*Ñ*Ò*Ø×ÑÐ7¸×9OÑ9OÐQVÔWØ%*ˆDÔ"Ø�I‰IÐ-Ô.ð —’Ø× Ñ Ð(Øœc 8 *›oÒ-ä&×4Ñ4°T·Z±Z³\ÓBˆDÕð .ð )ð  r;   c                 ó0  — t        t        d„ | j                  «      «      }| j                  rd}n"d|v rd}n|t        dg«      k(  rd}n	d|v rd}nd}|| j                  k7  r6| j                  d| j                  |«       || _        | j                  d«       y y )	Nc                 ó   — | j                   S r6   rñ  r7   s    r9   r:   z>RTCPeerConnection.__updateIceConnectionState.<locals>.<lambda>  s
   €  1§7¡7€ r;   r(  ró  rv   rô  r×   ziceConnectionState %s -> %sÚiceconnectionstatechange)rá   r‰   rã   rò   rð   r„  r¡  ©rø   Ústatesr{   s      r9   Ú__updateIceConnectionStatez,RTCPeerConnection.__updateIceConnectionState  s¢   € ô ”SÑ*¨D×,@Ñ,@ÓAÓBˆØ�?Š?Ø‰EØ˜ÑØ‰EØ”s˜K˜=Ó)Ò)Ø‰EØ˜6Ñ!Ø‰EàˆEð �D×-Ñ-Ò-Ø×ÑØ-¨t×/HÑ/HÈ%ôð ).ˆDÔ%Ø�I‰IÐ0Õ1ð .r;   c                 ó  — t        t        d„ | j                  «      «      }|t        dg«      k(  rd}n	d|v rd}nd}|| j                  k7  r6| j	                  d| j                  |«       || _        | j                  d«       y y )Nc                 ó.   — | j                   j                  S r6   )rx   r{   r7   s    r9   r:   z=RTCPeerConnection.__updateIceGatheringState.<locals>.<lambda>3  s   €  1§=¡=×#6Ñ#6€ r;   rv   ÚcompleteÚ	gatheringr×   ziceGatheringState %s -> %sÚicegatheringstatechange)rá   r‰   rã   rñ   r„  r¡  rþ  s      r9   Ú__updateIceGatheringStatez+RTCPeerConnection.__updateIceGatheringState1  s‡   € ä”SÑ6¸×8LÑ8LÓMÓNˆØ”S˜+˜Ó'Ò'Ø‰EØ˜FÑ"Ø‰EàˆEð �D×,Ñ,Ò,Ø×ÑØ,¨d×.FÑ.FÈôð (-ˆDÔ$Ø�I‰IÐ/Õ0ð -r;   rJ  r€  c                 óp  — |rl|j                   dk(  r'| j                  dvr»t        d| j                  › d�«      ‚|j                   dk(  r“| j                  dvr…t        d| j                  › d�«      ‚|j                   dk(  r'| j                  dvrOt        d| j                  › d�«      ‚|j                   dk(  r'| j                  d	vrt        d| j                  › d�«      ‚|j                  D ]�  }|j                  j
                  r|j                  j                  st        d
«      ‚|j                   dv r#|j                  j                  dvrt        d«      ‚|j                  dv sŒz|j                  rŒ‡t        d«      ‚ |j                   dv r¥|r| j                  «       n| j                  «       }|j                  D �cg c]$  }|j                  |j                  j                  f‘Œ& }}|j                  D �cg c]$  }|j                  |j                  j                  f‘Œ& }}||k7  rt        d«      ‚y y c c}w c c}w )NrY  )rØ   r�  z(Cannot handle offer in signaling state "r  r:  r3  z)Cannot handle answer in signaling state ")rØ   r4  )r�  zhave-remote-pranswerz,ICE username fragment or password is missingr‚  )r>  r–  z@DTLS setup attribute must be 'active' or 'passive' for an answerr  zRTCP mux is not enabledz+Media sections in answer do not match offer)rÑ   r	  r   rs   r~   r¿  rÀ  rr   r„   rG  r›   r¹   r  r  r   r¡   )rø   rJ  r€  rs   rY  Úoffer_mediaÚanswer_medias          r9   Ú__validate_descriptionz(RTCPeerConnection.__validate_descriptionC  sm  € ñ Ø×Ñ 7Ò*Ø×&Ñ&Ð.LÑLÜ+ðØ ×/Ñ/Ð0°ð3óð ð ×!Ñ! XÒ-Ø×&Ñ&ð /ñ ô ,ðØ ×/Ñ/Ð0°ð3óð ð
 ×Ñ 7Ò*Ø×&Ñ&Ð.MÑMÜ+ðØ ×/Ñ/Ð0°ð3óð ð ×!Ñ! XÒ-Ø×&Ñ&ð /ñ ô ,ðØ ×/Ñ/Ð0°ð3óð ð
 !×&Ñ&ò 	<ˆEà—9‘9×-Ò-°U·Y±Y×5GÒ5GÜ Ð!OÓPÐPð ×ÑÐ#9Ñ9¸e¿j¹j¿o¹oð Vñ ?ô !ØVóð ð
 �z‰zÐ/Ò/¸¿»Ü Ð!:Ó;Ð;ð!	<ð& ×ÑÐ5Ñ5á.6�×(Ñ(Ô*¸D×<SÑ<SÓ<Uð ð GLÇkÁkÖR¸U˜EŸJ™J¨¯	©	¯©Ò8ÐRˆKÐRà;F×;LÑ;LöØ27�—‘˜UŸY™YŸ_™_Ò-ðˆLð ð ˜{Ò*Ü Ð!NÓOÐOð +ð 6ùò Sùòs   Æ8)H.Ç1)H3r6   )r  re  )NNTÚ FN)DÚ__name__Ú
__module__Ú__qualname__Ú__doc__r   r   rÚ   Úpropertyro   rü   rþ   r   r,   r  r  r+   r•   r	  r   r  r   r(   r#  r   r)   r&  r1  rM  rT   Úboolr   rW  rn  r=   r'   rr  ru  r-   rw  r|  r“  r©  r‘  r�  r  r   r   rÊ  rV  r"  rD  rˆ  r	   rA  r  r%   r¯  Úobjectr„  r  r#   r±  r*  r.  r-  r,  r†  Ú__classcell__)rù   s   @r9   rÔ   rÔ     sÏ  ø„ ññ"Q hÐ/?Ñ&@ð "QÈDõ "QðH ð& ò &ó ð&ð ð) Cò )ó ð)ð ð( 3ò (ó ð(ð ðCÐ"7ò Có ðCð ðDÐ#8ò Dó ðDð ð�hÐ/Ñ0ò ó ðð ð	% ò 	%ó ð	%ð8¨x¸Ñ/Hð 8ÈTó 8ðt"Ð.ð "°<ó "ð8 KUñ
Ø  Ð&6Ð!6Ñ7ð
ØDGð
à	ó
ó<!)ðF65Ð$9ó 65ðv ,0Ø(,ØØØ Ø ñ7àð7ð $ C™=ð7ð ! ™ð	7ð
 ð7ð ð7ð ð7ð �S‰Mð7ð 
ó7ð@m5Ð#8ó m5ð^D˜d >Ñ2ó DðB˜D Ñ.ó Bð ó ð) Ð&7Ñ!8ó )ð EIñ]9Ø"*Ð+@Ñ"Að]9à	ó]9ð~A:Ø"7ðA:à	óA:óFóB%óCðGÐ.>ð GÀ4ó Gð
#Ð'7ó #óJ.ð& UYñ!Øð!Ø$'ð!Ø7?Ð@PÑ7Qð!à	ó!ðFO¨ð O°Ð:KÑ1Ló Oð
°#ð 
¸(ÐCTÑ:Uó 
ð
P H¨S×-CÑ-CÑ$Dó Pð	Ð&7ð 	Ð<Pó 	ð:˜sð :¨6ð :°dó :ðR X¨c×.DÑ.DÑ%Eó Rð!Ð'8ð !Ð=Tó !ð<*¨ð *°ó *ó"CóH2ó.1ð$APØ×1Ñ1ðAPØ=AðAPà	÷APr;   rÔ   )Zr‹   rV   ÚloggingrÝ   Útypingr   r   Úpyee.asyncior   r  r   r   r	   r1   r
   r   r   Úeventsr   Ú
exceptionsr   r   r   r   Úmediastreamsr   Úrtcconfigurationr   r   Úrtcdatachannelr   r   Úrtcdtlstransportr   r   r   Úrtcicetransportr   r   r   r   Úrtcrtpparametersr   r   r    r!   r"   r#   r$   r%   Úrtcrtpreceiverr&   r'   Úrtcrtpsenderr(   Úrtcrtptransceiverr)   Úrtcsctptransportr*   r+   Úrtcsessiondescriptionr,   Ústatsr-   r‚   rƒ   ÚMEDIA_KINDSÚ	getLoggerr  r  r=   rK   r]   rd   r  rX   r�   r‡   rŽ   rá   ro   r”   r¤   rÀ   rÆ   rÉ   rÎ   rA  rÒ   rÔ   rÍ   r;   r9   ú<module>r'     s‡  ðÛ Û Û Û ß "å ,ç Ñ ß 5Ñ 5Ý !÷ó õ +ß ?ß Dß QÑ Q÷ó ÷	÷ 	ó 	÷ >Ý &Ý 0ß CÝ 8Ý !à€Ø€Ø˜Ð €à	ˆ×	Ñ	˜8Ó	$€ðØÐ&Ñ'ðØ48Ð9NÑ4Oðà	Ð
Ñ óð<ØÐ,Ñ-ðàÐ-Ñ.ðð 
Ð
Ñ óð>	ØÐ:Ñ;ð	àÐ;Ñ<ð	ð 
Ð
)Ñ*ó	ðÐ0ð Ð5Jð Ètó ð2RØ×ÑðRØ0@ðRà	óRð.4Ø!ð4Ø*-×*>Ñ*>ð4à	ó4ð
�s˜3‘xð 
 Có 
ðØ
ðØ$(ðØ/2ðà×Ñóð0$Ø"ð$Ø+.ð$Ø;>ð$ØEHð$à×Ñó$ðNM�Sð M˜Sð M Só MðM�Cð M˜Cð M Có Mð ð ¨ó ðØ! #×"8Ñ"8Ñ9ðàÐ#Ñ$óôgPÐ+õ gPr;   