<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.39 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-schinazi-connect-udp-listen-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.0 -->
  <front>
    <title abbrev="CONNECT-UDP Listen">Proxying Listener UDP in HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-schinazi-connect-udp-listen-03"/>
    <author initials="D." surname="Schinazi" fullname="David Schinazi">
      <organization>Google LLC</organization>
      <address>
        <postal>
          <street>1600 Amphitheatre Parkway</street>
          <city>Mountain View</city>
          <region>CA</region>
          <code>94043</code>
          <country>United States of America</country>
        </postal>
        <email>dschinazi.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="A." surname="Singh" fullname="Abhi Singh">
      <organization>Google LLC</organization>
      <address>
        <postal>
          <street>1600 Amphitheatre Parkway</street>
          <city>Mountain View</city>
          <region>CA</region>
          <code>94043</code>
          <country>United States of America</country>
        </postal>
        <email>abhisinghietf@gmail.com</email>
      </address>
    </author>
    <date year="2023" month="September" day="07"/>
    <area>Transport</area>
    <workgroup>MASQUE</workgroup>
    <keyword>quic</keyword>
    <keyword>http</keyword>
    <keyword>datagram</keyword>
    <keyword>udp</keyword>
    <keyword>proxy</keyword>
    <keyword>tunnels</keyword>
    <keyword>quic in quic</keyword>
    <keyword>turtles all the way down</keyword>
    <keyword>masque</keyword>
    <keyword>http-ng</keyword>
    <keyword>listen</keyword>
    <abstract>
      <?line 62?>

<t>The mechanism to proxy UDP in HTTP only allows each UDP Proxying request to
transmit to a specific host and port. This is well suited for UDP client-server
protocols such as HTTP/3, but is not sufficient for some UDP peer-to-peer
protocols like WebRTC. This document proposes an extension to UDP Proxying in
HTTP that enables such use-cases.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://DavidSchinazi.github.io/draft-schinazi-connect-udp-listen/draft-schinazi-connect-udp-listen.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-schinazi-connect-udp-listen/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        MASQUE Working Group mailing list (<eref target="mailto:masque@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/masque/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/masque/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/DavidSchinazi/draft-schinazi-connect-udp-listen"/>.</t>
    </note>
  </front>
  <middle>
    <?line 70?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The mechanism to proxy UDP in HTTP <xref target="CONNECT-UDP"/> allows creating
tunnels for communicating UDP payloads <xref target="UDP"/> to a fixed host and
port. Combined with the HTTP CONNECT method (see <xref section="9.3.6" sectionFormat="of" target="HTTP"/>), it allows proxying the majority of a Web Browser's HTTP
traffic. However WebRTC <xref target="WebRTC"/> relies on ICE <xref target="ICE"/> to provide
connectivity between two Web browsers, and ICE relies on the ability to send and
receive UDP packets to multiple hosts. While in theory it might be possible to
accomplish this using multiple UDP Proxying HTTP requests, HTTP semantics
<xref target="HTTP"/> do not guarantee that distinct requests will be handled by the same
server. This can lead to the UDP packets being sent from distinct IP addresses,
thereby preventing ICE from operating correctly. Consequently, UDP Proxying
requests cannot enable WebRTC connectivity between peers.</t>
      <t>This document describes an extension to UDP Proxying in HTTP that allows sending
and receiving UDP payloads to multiple hosts within the scope of a single UDP
Proxying HTTP request.</t>
      <section anchor="conventions-and-definitions">
        <name>Conventions and Definitions</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<t>This document uses terminology from <xref target="CONNECT-UDP"/> and notational conventions
from <xref target="QUIC"/>. This document uses the terms Integer and List from
<xref section="3" sectionFormat="of" target="STRUCTURED-FIELDS"/> to specify syntax and parsing.</t>
      </section>
    </section>
    <section anchor="mechanism">
      <name>Proxied UDP Listener Mechanism</name>
      <t>In unextended UDP Proxying requests, the target host is encoded in the HTTP
request path or query. For Listener UDP Proxying, it is instead conveyed in each
HTTP Datagram, see <xref target="format"/>.</t>
      <t>When performing URI Template Expansion of the UDP Proxying template (see
<xref section="3" sectionFormat="of" target="CONNECT-UDP"/>), the client sets both the target_host and the
target_port variables to the '*' character (ASCII character 0x2A).</t>
      <t>Before sending its UDP Proxying request to the proxy, the client allocates an
even-numbered context ID, see <xref section="4" sectionFormat="of" target="CONNECT-UDP"/>. The client then adds
the "connect-udp-listen" header field to its UDP Proxying request, with its
value set as the allocated context ID, see <xref target="hdr"/>.</t>
    </section>
    <section anchor="format">
      <name>HTTP Datagram Payload Format</name>
      <t>When HTTP Datagrams <xref target="HTTP-DGRAM"/> associated with this Listener UDP
Proxying request contain the context ID in the connect-udp-listen header field,
the format of their UDP Proxying Payload field (see <xref section="5" sectionFormat="of" target="CONNECT-UDP"/>) is defined by <xref target="dgram-format"/>:</t>
      <figure anchor="dgram-format">
        <name>Listener UDP Proxying HTTP Datagram Format</name>
        <artwork type="ascii-art"><![CDATA[
Listener UDP Proxying Payload {
  IP Version (8),
  IP Address (32..128),
  UDP Port (16),
  UDP Payload (..),
}
]]></artwork>
      </figure>
      <dl>
        <dt>IP Version:</dt>
        <dd>
          <t>The IP Version of the following IP Address field. <bcp14>MUST</bcp14> be 4 or 6.</t>
        </dd>
        <dt>IP Address:</dt>
        <dd>
          <t>The IP Address of this proxied UDP packet. When sent from client to proxy,
this is the target host to which the proxy will send this UDP payload. When sent
from proxy to client, this represents the source IP address of the UDP packet
received by the proxy. This field has a length of 32 bits when the corresponding
IP Version field value is 4, and 128 when the IP Version is 6.</t>
        </dd>
        <dt>UDP Port:</dt>
        <dd>
          <t>The UDP Port of this proxied UDP packet in network byte order. When sent from
client to proxy, this is the target port to which the proxy will send this UDP
payload. When sent from proxy to client, this represents the source UDP port of
the UDP packet received by the proxy.</t>
        </dd>
        <dt>UDP Payload:</dt>
        <dd>
          <t>The unmodified UDP Payload of this proxied UDP packet (referred to as "data
octets" in <xref target="UDP"/>).</t>
        </dd>
      </dl>
    </section>
    <section anchor="hdr">
      <name>The connect-udp-listen Header Field</name>
      <t>The "connect-udp-listen" header field’s value is an Integer. It is set as the
Context ID allocated for Listener UDP Proxying; see <xref target="mechanism"/>. Any other
value type <bcp14>MUST</bcp14> be handled as if the field were not present by the recipients
(for example, if this field is defined multiple times, its type becomes a List
and therefore is to be ignored). This document does not define any parameters
for the connect-udp-listen header field value, but future documents might define
parameters. Receivers <bcp14>MUST</bcp14> ignore unknown parameters.</t>
    </section>
    <section anchor="proxy-behavior">
      <name>Proxy behavior</name>
      <t>After accepting the Connect-UDP Listener proxying request, the proxy uses a UDP
port to transmit UDP payloads received from the client to the target IP Address
and UDP Port specified in each Listener Datagram Payload received from the
client. The proxy uses the same port to listen for UDP packets from any
authorized target and encapsulates the packets in the Listener Datagram
Payload format, specifying the IP and port of the target and forwards it to
the client.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security considerations described in <xref section="7" sectionFormat="of" target="CONNECT-UDP"/> also apply
here. Since TURN can be run over this mechanism, implementors should review the
security considerations in <xref section="21" sectionFormat="of" target="TURN"/>.</t>
      <t>Since unextended UDP Proxying requests carry the target as part of the request,
the proxy can protect unauthorized targets by rejecting requests before creating
the tunnel, and communicate the rejection reason in response header fields.
Listener UDP Proxying requests do not have this ability. Therefore, proxies <bcp14>MUST</bcp14>
validate the target on every datagram and <bcp14>MUST NOT</bcp14> forward individual datagrams
with unauthorized targets. Proxies can either silently discard such datagrams or
abort the corresponding request stream.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document will request IANA to register the following entry in the "HTTP
Field Name" registry maintained at
&lt;<eref target="https://www.iana.org/assignments/http-fields"/>&gt;:</t>
      <dl spacing="compact">
        <dt>Field Name:</dt>
        <dd>
          <t>connect-udp-listen</t>
        </dd>
        <dt>Template:</dt>
        <dd>
          <t>None</t>
        </dd>
        <dt>Status:</dt>
        <dd>
          <t>provisional (permanent if this document is approved)</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>This document</t>
        </dd>
        <dt>Comments:</dt>
        <dd>
          <t>None</t>
        </dd>
      </dl>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="CONNECT-UDP">
          <front>
            <title>Proxying UDP in HTTP</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes how to proxy UDP in HTTP, similar to how the HTTP CONNECT method allows proxying TCP in HTTP. More specifically, this document defines a protocol that allows an HTTP client to create a tunnel for UDP communications through an HTTP server that acts as a proxy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9298"/>
          <seriesInfo name="DOI" value="10.17487/RFC9298"/>
        </reference>
        <reference anchor="UDP">
          <front>
            <title>User Datagram Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date month="August" year="1980"/>
          </front>
          <seriesInfo name="STD" value="6"/>
          <seriesInfo name="RFC" value="768"/>
          <seriesInfo name="DOI" value="10.17487/RFC0768"/>
        </reference>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="STRUCTURED-FIELDS">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P-H. Kamp" surname="P-H. Kamp"/>
            <date month="February" year="2021"/>
            <abstract>
              <t>This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields that wish to use a common syntax that is more restrictive than traditional HTTP field values.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8941"/>
          <seriesInfo name="DOI" value="10.17487/RFC8941"/>
        </reference>
        <reference anchor="HTTP-DGRAM">
          <front>
            <title>HTTP Datagrams and the Capsule Protocol</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="L. Pardue" initials="L." surname="Pardue"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes HTTP Datagrams, a convention for conveying multiplexed, potentially unreliable datagrams inside an HTTP connection.</t>
              <t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRAM extension. When the QUIC DATAGRAM frame is unavailable or undesirable, HTTP Datagrams can be sent using the Capsule Protocol, which is a more general convention for conveying data in HTTP connections.</t>
              <t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP extensions, not applications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9297"/>
          <seriesInfo name="DOI" value="10.17487/RFC9297"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="WebRTC" target="https://www.w3.org/TR/webrtc/">
          <front>
            <title>WebRTC</title>
            <author>
              <organization/>
            </author>
            <date year="2021" month="January" day="26"/>
          </front>
          <seriesInfo name="W3C" value="Recommendation"/>
        </reference>
        <reference anchor="ICE">
          <front>
            <title>Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal</title>
            <author fullname="A. Keranen" initials="A." surname="Keranen"/>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg"/>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <date month="July" year="2018"/>
            <abstract>
              <t>This document describes a protocol for Network Address Translator (NAT) traversal for UDP-based communication. This protocol is called Interactive Connectivity Establishment (ICE). ICE makes use of the Session Traversal Utilities for NAT (STUN) protocol and its extension, Traversal Using Relay NAT (TURN).</t>
              <t>This document obsoletes RFC 5245.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8445"/>
          <seriesInfo name="DOI" value="10.17487/RFC8445"/>
        </reference>
        <reference anchor="TURN">
          <front>
            <title>Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN)</title>
            <author fullname="T. Reddy" initials="T." role="editor" surname="Reddy"/>
            <author fullname="A. Johnston" initials="A." role="editor" surname="Johnston"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>If a host is located behind a NAT, it can be impossible for that host to communicate directly with other hosts (peers) in certain situations. In these situations, it is necessary for the host to use the services of an intermediate node that acts as a communication relay. This specification defines a protocol, called "Traversal Using Relays around NAT" (TURN), that allows the host to control the operation of the relay and to exchange packets with its peers using the relay. TURN differs from other relay control protocols in that it allows a client to communicate with multiple peers using a single relay address.</t>
              <t>The TURN protocol was designed to be used as part of the Interactive Connectivity Establishment (ICE) approach to NAT traversal, though it can also be used without ICE.</t>
              <t>This document obsoletes RFCs 5766 and 6156.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8656"/>
          <seriesInfo name="DOI" value="10.17487/RFC8656"/>
        </reference>
        <reference anchor="CONNECT-IP">
          <front>
            <title>Proxying IP in HTTP</title>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="David Schinazi" initials="D." surname="Schinazi">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Alex Chernyakhovsky" initials="A." surname="Chernyakhovsky">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Mirja Kühlewind" initials="M." surname="Kühlewind">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Magnus Westerlund" initials="M." surname="Westerlund">
              <organization>Ericsson</organization>
            </author>
            <date day="28" month="April" year="2023"/>
            <abstract>
              <t>   This document describes how to proxy IP packets in HTTP.  This
   protocol is similar to UDP proxying in HTTP, but allows transmitting
   arbitrary IP packets.  More specifically, this document defines a
   protocol that allows an HTTP client to create an IP tunnel through an
   HTTP server that acts as an IP proxy.  This document updates RFC
   9298.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-masque-connect-ip-13"/>
        </reference>
      </references>
    </references>
    <?line 232?>

<section anchor="example">
      <name>Example</name>
      <t>In the example below, the client is configured with URI Template
"https://example.org/.well-known/masque/udp/{target_host}/{target_port}/" and
wishes to use WebRTC with another browser over a listener UDP Proxying tunnel.
It contacts a STUN server at 192.0.2.42. The STUN server, in response, sends the
proxy's IP address to the other browser at 203.0.113.33. Using this information,
the other browser sends a UDP packet to the proxy, which is proxied over HTTP
back to the client.</t>
      <artwork type="ascii-art"><![CDATA[
 Client                                             Server

 STREAM(44): HEADERS            -------->
   :method = CONNECT
   :protocol = connect-udp
   :scheme = https
   :path = /.well-known/masque/udp/*/*/
   :authority = proxy.example.org
   connect-udp-listen = 2
   capsule-protocol = ?1

 DATAGRAM                       -------->
   Quarter Stream ID = 11
   Context ID = 2
   IP Version = 4
   IP Address = 192.0.2.42
   UDP Port = 1234
   UDP Payload = Encapsulated UDP Payload

            <--------  STREAM(44): HEADERS
                         :status = 200
                         capsule-protocol = ?1

/* Wait for STUN server to respond to UDP packet. */

            <--------  DATAGRAM
                         Quarter Stream ID = 11
                         Context ID = 2
                         IP Version = 4
                         IP Address = 192.0.2.42
                         UDP Port = 1234
                         UDP Payload = Encapsulated UDP Payload

/* Wait for the STUN server to send the proxy's IP and */
/* port to the other browser and for the other browser */
/* to send a UDP packet to the proxy. */

            <--------  DATAGRAM
                         Quarter Stream ID = 11
                         Context ID = 2
                         IP Version = 4
                         IP Address = 203.0.113.33
                         UDP Port = 4321
                         UDP Payload = Encapsulated UDP Payload
]]></artwork>
    </section>
    <section anchor="comparison-with-connect-ip">
      <name>Comparison with CONNECT-IP</name>
      <t>While the use-cases described in <xref target="intro"/> could be supported using IP Proxying
in HTTP <xref target="CONNECT-IP"/>, it would require that every
HTTP Datagram carries a complete IP header. This would lead to both
inefficiencies in the wire encoding and reduction in available Maximum
Transmission Unit (MTU). Furthermore, Web browsers would need to support IPv4
and IPv6 header generation, parsing, validation and error handling.</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This proposal is the result of many conversations with MASQUE working group
participants.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA91a73LbRpL/Pk8xoT5ETomUKDGKzYviZSQ5ZpUlOxK1rq2t
rashMCQnJgEGA4jmqpS617hv9yz3KPck9+vuAQiIVOz9dnXaTZkYzPT09N9f
96Ddbqvc5XPb160PWfp57ZKpfud8bhOb6buLD9ol+u1o9KGlzHic2XvMO39/
fX15PmrTW5naUpHJ7TTN1n3t81jFaZSYBWjGmZnkbR/NXGL+6dpRmiQ2yttF
vGzPeWX76ET5Yrxw3rs0yddLLBpejt6opFiMbdZXMQj3FRZ6m/jC93WeFVaB
jRNlMmv6epSZxC/TLFeraV9fDW5/vbtU9zYpsEzraZYWS/As4y2MyB6tj2n2
ic76C02g8YVxc4wvjP+9sH9xNp900mxKb0wWzfBmludL3z88pIk05O5tp5x2
SAOH4yxdeXsoJA5p6dTls2KMxRfm3sW3QQ6HXxQLrZ3j5D6vbdyg0RHSHZd+
mdqXZ3Rm+WLeUp/sepVmMQmurX8vXMQ/aH/+AV2YaWYW/IDF/O+SrIZ/5QXI
zn21mEynIpIXGazMazOf63xm9cqsdZyuEn4pEqs2aydT/i28KVPkszRjpvCf
BlmYwUVHl6LgQbE3FlHzBbTT17+k6XRu9bt35zzm88xaiLZ7enSkB4vlDLK0
BoP6g8k+gTWeFbkc9nyVFklucJS/Orvi8cxOYat9fT6QaWmMnV/1jnon4RkL
yBPuEpdbcJOTInU6wU42c5HhWVbsLS6Vwqb0lymNdqJ00TzsAIeFsc5qJx2M
Z642+H/7lAbMeuL1ySGTNFuYHI7UVy6ZbB60/mjHN6PzPhMp45OMtXiMw4I+
Pjruto+67eNTOTA2tp4oyUKQOTnv6xuLvRY2wRqcSEiabGrrvrVarTqrE3bl
0c3hyo6zPIIHq3a7De4hSRPlSo1guAsbzUzi/ELnqRh/PUzqNJmvycgRCbQ1
0YxfVpE1s7Bzn2OpyiluLRz91kb7pY3cBD4zS/HaJLGmkNbRIwhO4/8rC7/x
BYsagmKq0dzZBG5ts3ubKbCSp1E695iGbY1nfg5PDvS4yIlEkuZ4NcEmtIyp
+HRhmdTS2qydp236t0Zp7j7ZoIrACiJ7saDlmLRMPTl0ou1nuCnFbzpL47wu
USyVfGZybRMzphDA/BXetiMDAh0R8sLF8dwqtaeHsKs0LiJSln7Yc/T4+FWy
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
3TrqfwHqgVoCHSkAAA==

-->

</rfc>
