<?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.7.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-schwartz-modern-http-proxies-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="Templated HTTP Request Proxies">Template-Driven HTTP Request Proxying</title>
    <seriesInfo name="Internet-Draft" value="draft-schwartz-modern-http-proxies-02"/>
    <author initials="B. M." surname="Schwartz" fullname="Benjamin M. Schwartz">
      <organization>Meta Platforms, Inc.</organization>
      <address>
        <email>ietf@bemasc.net</email>
      </address>
    </author>
    <date year="2025" month="July" day="07"/>
    <area>art</area>
    <workgroup>httpbis</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 28?>

<t>HTTP request proxying behaviors have long been part of the core HTTP specification.  However, the core request proxying functionality has several important deficiencies in modern HTTP environments.  This specification defines an alternative proxy service configuration for HTTP requests.  The proxy service is identified by a URI Template, similarly to "connect-tcp" and "connect-udp".</t>
    </abstract>
  </front>
  <middle>
    <?line 32?>

<section anchor="introduction">
      <name>Introduction</name>
      <section anchor="history">
        <name>History</name>
        <t>An HTTP forward proxy (or just "proxy" in the HTTP standards) is an HTTP service that acts on behalf of the client as an intermediary for some or all HTTP requests.  HTTP/1.0 defined the initial HTTP proxying mechanism: the client formats its request target in "absolute form" (i.e., with a full URI in the Request-Line) and delivers it to the proxy, which reissues the request to the origin specified in the URI (<xref section="5.1.2" sectionFormat="comma" target="RFC1945"/>).  In this specification, we call this behavior a "classic HTTP request proxy".</t>
        <t>In HTTP/1.1, proxy requests are additionally required to carry a Host header whose value matches the authority in the Request URI (not the name of the proxy server).  In HTTP/2 and HTTP/3, the destination host is specified in the :authority pseudo-header field (<xref section="8.3.1" sectionFormat="comma" target="RFC9113"/>).</t>
      </section>
      <section anchor="problems">
        <name>Problems</name>
        <t>HTTP clients can be configured to use proxies by selecting a proxy host, a port, and whether to use a security protocol. However, requests to the proxy do not carry this configuration information. Instead, they only indicate the URI of the requested resource. This prevents any HTTP server from hosting multiple distinct proxy services, as the server cannot distinguish them by path (as with distinct resources) or by origin (as in "virtual hosting").</t>
        <t>The absence of an explicit origin for the proxy also rules out the usual defenses against server port misdirection attacks (see <xref section="7.4" sectionFormat="of" target="RFC9110"/>).</t>
        <!--
### Context Mixing

Classic HTTP request proxies forward the entire request, including all its headers, with a few exceptions:

* The Proxy-Authenticate, Proxy-Authorization, Proxy-Authentication-Info, and Proxy-Status headers are not forwarded.
* In HTTP/1.1, the Host header, and connection-specific headers listed in Connection header, are not forwarded.
* Proxies are required to add a Via header identifying the proxy.
* For TRACE and OPTIONS methods, proxies are required to check and decrement the Max-Forwards header.

In HTTP/2 and HTTP/3, this leaves no way to attach metadata to the request between the client and the proxy.
-->

</section>
      <section anchor="overview">
        <name>Overview</name>
        <t>This specification describes an alternative protocol for an HTTP request proxy.  Like CONNECT-TCP, CONNECT-UDP, and CONNECT-IP, the proxy is identified by a URI Template.</t>
      </section>
    </section>
    <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?>

</section>
    <section anchor="requirements">
      <name>Requirements</name>
      <section anchor="use-of-templates">
        <name>Use of Templates</name>
        <t>A templated HTTP request proxy is identified by a URI Template containing a variable named "target_uri".  To convert an HTTP request into a proxied request, the client <bcp14>MUST</bcp14> substitute the request's URI into this variable, expand the template, and use the result as the new request URI.</t>
        <t>HTTP headers and status codes are processed in the same way as in classic HTTP request proxies.</t>
        <t>A templated HTTP request proxy is also suitable for use as an Oblivious HTTP relay, if it provides the required privacy guarantees.</t>
      </section>
      <section anchor="configuration">
        <name>Configuration</name>
        <t>Clients that support both classic HTTP request proxies and template-driven proxies <bcp14>MAY</bcp14> accept both types via a single configuration string.  If the configuration string can be parsed as a URI Template containing the "target_uri" variable, it is a template-driven request proxy.  Otherwise, it is presumed to represent a classic HTTP request proxy.</t>
        <t>This specification defines a new Proxy-Status parameter: "use_template" (see registration in <xref target="iana-considerations"/>), which conveys a preferred URI Template for the proxy.  Upon receipt of this parameter, the client <bcp14>SHOULD</bcp14> update its configuration to use the new template for the remainder of the session if possible, and retry the request using the new template if it also received a Proxy-Status "error" parameter.</t>
        <t>If the client is configured with a classic HTTP request proxy, and the template string is the special value "default", the client <bcp14>MUST</bcp14> use the following default proxy template:</t>
        <figure>
          <name>Registered default template</name>
          <artwork><![CDATA[
https://$PROXY_HOST:$PROXY_PORT/.well-known/masque
                 /http/{target_uri}
]]></artwork>
        </figure>
        <t>This allows a virtual-hosted proxy server to learn the proxy's hostname, which is not present in the initial request.</t>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>Consider a proxy identified as "https://example.com/proxy{?target_uri}".  Requests would then be transformed as follows:</t>
      <artwork><![CDATA[
Original request:
PATCH /resource HTTP/1.1
Host: api.example
Content-Type: application/example
...

Transformed request:
PATCH /proxy?target_uri=https%3A%2F%2Fapi.example%2Fresource HTTP/1.1
Host: example.com
Content-Type: application/example
Proxy-Authorization: ...
...
]]></artwork>
      <t>Notes on this example:</t>
      <ul spacing="normal">
        <li>
          <t>The HTTP method is not altered.</t>
        </li>
        <li>
          <t>The request-related headers such as Content-Type are preserved, but the Host header (or :authority in HTTP/2 and HTTP/3) is altered.</t>
        </li>
        <li>
          <t>Certain characters in the target URI are percent-encoded during URI Template expansion.</t>
        </li>
        <li>
          <t>The scheme, which is implicit in the original request, is explicit in the transformed request.  The scheme in this example is "https", indicating that the client is asking the proxy to establish a secure connection to the target.</t>
        </li>
        <li>
          <t>The client can add Proxy-* headers to communicate with the proxy.</t>
        </li>
      </ul>
      <t>A templated HTTP request proxy can be used as an Oblivious HTTP Relay.  For example, suppose the relay is identified as "https://proxy.example.org/relay{?target_uri}", and the Oblivious HTTP Gateway is "https://example.com/gateway".  The client would send requests to the proxy as follows:</t>
      <figure>
        <name>Use of an HTTP request proxy as an Oblivious relay</name>
        <sourcecode type="http-message"><![CDATA[
POST /relay?target_uri=https%3A%2F%2Fexample.com%2Fgateway HTTP/1.1
Host: proxy.example.org
Proxy-Authorization: ...
Content-Type: message/ohttp-req
...
]]></sourcecode>
      </figure>
      <t>If a templated HTTP request proxy supports HTTP/2 and Extended CONNECT, it is even possible to reach a CONNECT-TCP transport proxy through it:</t>
      <figure>
        <name>Use of a TCP transport proxy through an HTTP request proxy</name>
        <sourcecode type="http-message"><![CDATA[
CONNECT HTTP/2.0
:authority = request-proxy.example
:scheme = https
:path = /proxy?target_uri=https%3A%2F%2Ftransport-proxy.example%2Fproxy
    %3Ftarget_host%3Ddestination.example%26target_port%3D443
:protocol = connect-tcp
capsule-protocol: ?1
...
]]></sourcecode>
      </figure>
      <t>A proxy can use the "use_template" proxy status error to reconfigure existing clients:</t>
      <figure>
        <name>Updating the configured template with 'use_template'</name>
        <sourcecode type="http-message"><![CDATA[
GET /main?target_uri=https%3A%2F%2Fexample.com%2F HTTP/1.1
Host: proxy.example.org
Proxy-Authorization: ...
Content-Type: message/ohttp-req
...

HTTP/1.1 200 OK
Proxy-Status: proxy.example.org; \
    use_template="https://proxy.example.org/beta{?target_uri}"; \
    details="You have been assigned to the beta test group"
Content-Type: message/ohttp-res
...
]]></sourcecode>
      </figure>
      <t>If the client's proxy configuration string was "proxy-foo.example.org:54321", the client will start by issuing a classic HTTP proxy request, but the proxy can use the "use_template" parameter to inform the client that it should use templated requests instead:</t>
      <figure>
        <name>Using 'use_template' to upgrade from classic to templated proxying</name>
        <sourcecode type="http-message"><![CDATA[
GET https://example.com/ HTTP/1.1
Proxy-Authorization: ...
Host: example.com
Accept: text/html

HTTP/1.1 400 Bad Request
Proxy-Status: proxy-no-template.example.org; \
    use_template="default"; \
    error="http_request_denied"; \
    details="Proxy template required"

GET .well-known/masque/http/https%3A%2F%2Fexample.com%2F HTTP/1.1
Proxy-Authorization: ...
Host: proxy-foo.example.org:54321
Accept: text/html

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: ...
...
]]></sourcecode>
      </figure>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>None</t>
    </section>
    <section anchor="operational-considerations">
      <name>Operational Considerations</name>
      <t>Templated HTTP proxies can make use of standard HTTP gateways and path-routing to ease implementation and allow use of shared infrastructure.  To be compatible, a gateway must forward Proxy-* request headers to the origin.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IF APPROVED, IANA is requested to add the following entry to the "MASQUE URI Suffixes" registry:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Path Segment</th>
            <th align="left">Description</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">http</td>
            <td align="left">HTTP Request Proxying</td>
            <td align="left">(This document)</td>
          </tr>
        </tbody>
      </table>
      <t>IF APPROVED, IANA is requested to add the following entry to the "HTTP Proxy Status Parameters" registry:</t>
      <ul spacing="normal">
        <li>
          <t>Name: use_template</t>
        </li>
        <li>
          <t>Description: A URI Template that should be used for requests to this proxy server.  The special value "default" indicates that the client should use the default template for the configured proxy hostname (which is not known to the proxy).</t>
        </li>
        <li>
          <t>Reference: (This document)</t>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC1945">
          <front>
            <title>Hypertext Transfer Protocol -- HTTP/1.0</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="H. Frystyk" initials="H." surname="Frystyk"/>
            <date month="May" year="1996"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is an application-level protocol with the lightness and speed necessary for distributed, collaborative, hypermedia information systems. This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1945"/>
          <seriesInfo name="DOI" value="10.17487/RFC1945"/>
        </reference>
        <reference anchor="RFC9113">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced latency by introducing field compression and allowing multiple concurrent exchanges on the same connection.</t>
              <t>This document obsoletes RFCs 7540 and 8740.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9113"/>
          <seriesInfo name="DOI" value="10.17487/RFC9113"/>
        </reference>
        <reference anchor="RFC9110">
          <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>
      </references>
    </references>
    <?line 231?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA7Va63LbxhX+j6fYIs3EzhCUZSttwkZ1GUmuNbVMRZIzzbQd
zxJYkluBAItdiGIc51n6LH2yfufsLi4kJedH67HHwmIvZ8/lO985UJIkkdU2
VyMR36jlKpdWJaeVvlOFeH1zcymu1L9qZay4rMr7jS7mcSSn00rddeZnuzO1
MnGU4t28rDYjYWwWRVmZFnKJg7JKzmxi0sVaVvanZFlmqiqShbWrZOXWJs+e
R3pVjYStamOfP3v2DQZkpeRIYElk6ulSG6PLwm5W2PD87OZVtC6r23lV1quR
oK2m2kS3aoPRDBMKiyOUxc1wdBQZK4vsvczLAqs3ykRmiX3f/6surTIjUZTR
So/E32yZDoQpK1upmcFPmyX98I8okrVdlNUoEkkk8Mdd6ztV/FMudSEuhuLa
X45fl9VcFvonaSHwSFwoK8Ul9DYrqyV2PS/SIU9TS6nzkdDKzv40xYNJhxA5
igrMw9o7NYoiXcw6T1GSJEJOja1kiolshcpbYeXtJaZqIe90WRmB/5XAnWkM
5l1BQFHOhF0okZaVclY0K5XqmU5Z2qEQr8u1ulPVoJ22c8KsLlKaLXNtNzjF
CENLZC70cgXtycKKTGFPrQr8MwI6ckZ3R6riTldlsVSFNTjxZqFNXwxeXWCh
LITMyZSsAScBDqvudErCFTM9ryu3BHoSXYW4nbfX4CSd4VwcBTeeboQU767O
RfBs2FwvdS6rfCNsKWIcUajUJjZdxRAma0fqbBUPnUGWOstyFUWfkdtVZVaz
cvD8mXitjUVARNHYXx1Swk8yL9UTyPxPOLyI+TkmRZHanWHIZzHXPCWppd8g
XMQupBXwAiNwdzJ5Pmtsm0PveMmLNEXCUmVaVhvWkSmXCh4KveY7+qLng8Ph
M6//jLfThbZa+smNDyxVuoCTm+Woe6ZzVugY/4LbWFnNlaWrxXDdMq+t4nmx
eKKHajgQa20XsMOshkRkDK8EDy/JG0jylJWfqRxeUNH2ZB0brIstFjpd4ESA
BNbwm+Z4N7Gs9BwbezfD1fwpdOCTDx9eXr06Ofzm6KuBuFZsPvHV8HD4/OPH
p1DLOU3d9lEcimuTFvldiDpcJE5zCbBKxW58ksucF0HPhwPvB8EEADslZJZp
F125e6MrskSJw6qKHPZ1ie0WSiKgcPHSKHEn81oJaD5d+Ns7wKLw7GvT3bco
LQ8SjgWvaeNEVf7SLOZzVj3/+MKBQoZ9dOGibkGytKpp9TpqJVgZVWdl4iXG
pDwLKv/m8PBFq/Kvhy+Gh6Ryjh2klWmulsbjnPMwAy2QvzfB71RTG3cBApsp
3SKnLeGm0t+L5BzQE+BpwDdaLxTkrMJqiUVp7eStSiSCMh+2WNgYqOt2IisF
adLZhb2gD0kNeBOwnhfGQgOswg2CNifTZORMqnFEbwp/Gq5WKVPWVaqGDiRX
yMOsBFlsWjggpVblku/IoVnnVq9yGErTQGr7GIgUJJ2T+MXQKF3DzZ7X2izo
7ZIUuZIIzSeYzjHa7BfEAjTB4zHPRxfNpDgHvNsakOElismihMWIf2QEdjlY
Ud2vcuQIG1YTOrXKlbkpRVXnsGhZO3etDW0KbFKFoeQwlxpKDdcg0wKLTYZ4
cf4krZXprRFPjFLiw4fgZr8fHpEE3v+eOYf79jcgRp/B7U5AMtS9FRf6HqJH
0clDwUy+FuCcpKOs0mbLARSR5nXGTgiQIER0EWBaxFNrKCFVKxLLIL9/yRmL
mVcyRvzQlimnpXYMyvrJA9DORIwm53A65+Hu9bWVtm7OZoQha3vJVTbEqT1I
4gTUQozby6c9OiCgYLNlrtlXYcGTZla7eN95njHyyy7CAfqglh+0DPDmczVn
nMY1aIdX8JWbq/HJGUs3ubw5n7y9RlKCfjIzaOyzfQDwMb31uSStFDEQ3vdC
3ievnIRBVR2k3oZARGKuwK0MbibWkqkC+9qCJJCZBOHzQBEcZqrsmjhYNz8X
WfdOSfJHhr3JHYWpWlPE7OFFJq30dC8zYsziIApcoZd6AOlv9K0SJ5O3b89O
bpKbk8tB8/Du9NLZOQycXw46sfgJ1kR4TbYnbCJP5p1OiUJwIjMu+EHOBbFz
I+KLd9c38cD9L95O+Oers+/fnV+dndLP16/Hb940P0R+xvXrybs3p+1P7cqT
ycXF2dtTtxijojcUxRfjH2N3v9i5yviN51q4GcqUmh2BnAVmmypHmgC25NbS
REHr7OPfnVz+59+HR8CT3wBAnh8efvPxo3/4+vD3R3hAZincaYzy7pFQP5Kr
lZIV7UKQkMqVtoA5xmOzKNcUNRVp88u/kWb+MRLfTtPV4dEf/QBduDcYdNYb
ZJ3tjuwsdkrcM7TnmEabvfEtTfflHf/Yew567wx++zIHtRPJ4dcv4fpwoSsX
qVwXcCy8M5wrgp9hcCxsvwjt+finHJVgzCJpOGZwJystQTGYBsE1HFF9DxIQ
U+1Q0mwEo92JJ7hH6ZmF5iTtEb8T3GwulK3If7b2Gd7P+8J4lssQAYmDHAPK
iAEVbFOR0AgxFLeFQXIP+btA/qhaXjf0TKmBeiw0Dv1TVF8ODSE08rZpiZoh
Dkgg5nL3g9wVcDr8NfrnvG1qeDapluCI6RUj1mQKAq9LCOTX5hLkXc+I0GOD
O511yDtj9qrSdzLdiHktK5SVioVwWbolWpSkHTnkqsjUK+YC0xJZ9rH7OAgO
TZDMNUHCOzgw6itKzm4j6jzAVshNoIpwoHy7AEVVjmFizqHE3n0b2CtKccPY
8oiD0h5dn+z4iWbOLXdk3wb8CTHctTbNkhU50NLlwkrREwPfw1raDB/IQ74+
Zx/sEQ1cDR4F/ByJGJZ/H2SMHQ2r1FxT/8ITZCCnloVMcG8D67txA0oWajqO
wY3hcAPxq8gpehrrsUbc+d2qJEWkSq98t0N3hOoFqYe7epXRRsTQ+jbzpUEI
Nbt9ZEUdnIJ4iifuYKWG7zUDG8WPbCxyMqQSLhFaQlCbYOPe1i4WHPelO9yR
l/QVHEMJZRW3dyKm0qv8O4UIlnuy+bCJB2IbdIK3al8nkO3BvF2ZGcP4EigU
7wJe0NaszPNyTTv4uR4ewv6gur/88ktEbTszOjj47eXV5K8/vn89ub4Z+Z8v
J1c3B8O1yvPktkBmPFhKA5G5b9b7c0CbHHxo4+Qjb/1hJLjLeRxfscMp0kQQ
pnHJj965JYlLPuYLl4QKF5X1amLyBrC+qmi9DUhOEyl9BHfVhtluiCyPsaGF
4tXOfOnsXkIKymkn3vebYrWTwoAQcVCTciuGabk84IkfXnauTTnrKpSp67LO
2aSMNgi3wlAp6jZ01jHeCBMuvlrhRtHl+ObktTgIRV5TGkRUFYwEWMvQixJx
sVTY5IbbsqA3uUeIIGw0HBKCdATYPoZv0rnIMV/38xfjz5+/wt/OaXh6SKaO
an6FTHuKqZEgQekf6SR6S31h6qwxevh1TYHGIeRqjWBw5uKuuLlpozyhDEeO
FFKyqeEjMEFXRp+WFbtZNhBTX+122zzUKBz1ejo7hYnrErZinIC5SEroC0nd
Ym6bOW/0DTlCUT5aQaGQBZU5WAKipObY74EsExOCtnBBg0qq5/V66Yt5f0i5
5VYDwYrsT7K7fuG7tm7/hqN7C9AeLhziQeieOBiVdgsApbntFY0Uvtge+ZP6
G77bozp1bajYnHbCPf2GlLapOHWe82VjTyopy+WyLlwfh6G2U9N9ii55NlAH
LrDDkK6IIUElVO56HQwcv2kIISZs0d4uZjhBQniU1fyAV/SRo00AW8f/GYKv
3f57UWju3sfeaF5ZDnyAf41Rt/pm2xjE32+SJZKnnCM6kQaEE/NhWOhIgScv
xzYq7Fz+4cjvg4YX5aBkwXCJBhnavOJrk7219o4x+TaUbpCo5eM+4dmr6Ub4
2T2Eo9j05Xmgc4oJq2cajtNRE0J2i3wXZEyIfSAsqrKeI2jtPu37lf704bOo
AzvHDa71NBuNfLQe81YmGnHb8PiT2N5I1t8Pb/iZk/3nL1759ZRqP39x2uk+
twt+5+fQZphzdPQCQoSWyLHofMaJUHWjhlJJeD0SLw8fMa94TIV7jU9mHncC
PJCiLTbsre04HVM6Z8CGuSHgXUc2tL73mevPZ4gVYqG/NlT+zzEShe3F82fP
xOQvUZe67jntD+LvbOaubo4fQa+psrIPXmGHDG90bo7jH8vaffnkj55EeueF
q3jICrQBAhDG4m/H8SduZfa5BtULIbl0v0OEbMlp4Ivulb7wsd/mqC9McJF9
ZeKaMJzfJ7Oy7Gpg9NXRi+eHfe691nlOnkQ1L4E1qm9ucPQof+9LU8syPu2n
ocwgDbovGt2zOfUCjcyCUZ83aeCtgX/tPn485MH7ckvrqA865C73G3PBDkup
e4vKYJl3HPIIDvmdzAJJ3ueZSVEmQfpPe2mog8JbDmLnvO/9zd8jKyMl7zrp
Za8eavodccT62C18XJnz6wL7E/p6xK0e1Z8P6H68tBPD+BtVzO2iz6e7sEqu
2Y8NrrNX8wqUyn3ICn5LIdv4UvjyTJH0GX0ydB/rTnqNA2LuBX+Kn6z8GCjo
9pyt32MJHR8KgqW8ZT5G2B8+wLtZnmO4phEluAT44WAAzFJiCVFgbl66UKZ5
XFg2+4GJc99tVknEeZ1awIbrNPIHzSV29S2DcJpY0m8HhK9MgX2GdNNhoS3l
5uLyfPx2vHPt81difIny+oez04GboZuv9O33l379jttUm3BAfDG+/v7dGZcG
1/Vspu+ViUNHZ4Pg/llcUua/VnNuqP8sTrlzzt+3OjX7z4jBGeoU+hToR7A0
6fwR/cdHxnkpxUVn972/x4TxJzfdfv9TLP0f6IQPc+HsGzSXATH7yvlSvOVf
G+r6PgY7KhqJcb/scu1Mh6yhTqDmU59Wa9NrVIQKan/TpvnobHaqpi6E82f+
frekaXt1Ul77cZ1/leBJrwnC+NVj/k+prGpsP9o2iPt1mqlMb8mHxyltkKts
7j4IfBgV9XJK5e1xPJO5ce2byelEyGamGkb/BZ/ufmDhJgAA

-->

</rfc>
