<?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-rosomakho-masque-connect-ip-optimizations-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.2 -->
  <front>
    <title abbrev="Reusable templates and checksum offload for CONNECT-IP">Reusable templates and checksum offload for CONNECT-IP</title>
    <seriesInfo name="Internet-Draft" value="draft-rosomakho-masque-connect-ip-optimizations-00"/>
    <author fullname="Yaroslav Rosomakho">
      <organization>Zscaler</organization>
      <address>
        <email>yrosomakho@zscaler.com</email>
      </address>
    </author>
    <date year="2025" month="October" day="16"/>
    <area>Web and Internet Transport</area>
    <workgroup>Multiplexed Application Substrate over QUIC Encryption</workgroup>
    <keyword>template</keyword>
    <keyword>checksum</keyword>
    <keyword>connect-ip</keyword>
    <abstract>
      <?line 36?>

<t>This document defines extensions to the CONNECT-IP protocol (RFC 9484) that improve the efficiency of datagram transmission by introducing reusable templates and checksum offload capabilities.</t>
      <t>Reusable templates allow endpoints to associate Context Identifiers with static portions of packet headers, enabling datagrams to omit repeated byte sequences while remaining self-contained and stateless on the wire. Checksum offload enables endpoints to delegate computation of transport-layer checksums to the receiver by signaling the relevant offsets within the reconstructed packet.</t>
      <t>These optimisations reduce per-packet overhead, processing cost, and effectively increase the usable maximum transmission unit (MTU) when CONNECT-IP datagrams are encapsulated in QUIC DATAGRAM frames.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://yaroslavros.github.io/connect-ip-optimizations/draft-rosomakho-masque-connect-ip-optimizations.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-rosomakho-masque-connect-ip-optimizations/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Multiplexed Application Substrate over QUIC Encryption 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/yaroslavros/connect-ip-optimizations"/>.</t>
    </note>
  </front>
  <middle>
    <?line 44?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The CONNECT-IP method <xref target="CONNECT-IP"/> allows an HTTP client to establish an IP tunnel through an HTTP proxy and exchange IP packets using either HTTP/3 Datagrams specified in <xref section="2.1" sectionFormat="of" target="HTTP-DATAGRAMS"/> or DATAGRAM capsules specified in <xref section="3.5" sectionFormat="of" target="HTTP-DATAGRAMS"/>. Each packet is carried in full, including all transport and network headers, which provides simplicity and interoperability but incurs per-packet overhead due to the repeated transmission of largely invariant header fields.</t>
      <t>This document introduces two optional extensions, Reusable Templates and Checksum Offload, that optimise CONNECT-IP datagram transmission without changing the existing protocol semantics.</t>
      <t>Reusable templates allow endpoints to associate a Context Identifier with a reusable packet layout consisting of static and variable byte regions. Once a template has been installed using reliable Capsules, datagrams referencing the same Context Identifier carry only the variable portions of the packet. This reduces the size of transmitted datagrams and processing overhead, while maintaining on-the-wire statelessness and compatibility with intermediaries that are unaware of these optimisations.</t>
      <t>Checksum offload enables endpoints to delegate computation of transport-layer checksums to the receiver by identifying the checksum field offset and the start of the checksum coverage within the reconstructed packet. This mirrors hardware checksum-offload behavior used on network interfaces and tunnel devices, reducing per-packet CPU cost for encapsulating or decapsulating CONNECT-IP traffic.</t>
      <t>When CONNECT-IP datagrams are encapsulated in QUIC DATAGRAM frames, these optimisations also increase the effective maximum transmission unit (MTU) by reducing the number of bytes carried inside each QUIC packet.</t>
      <t>Both extensions are negotiated at CONNECT-IP establishment and signalled using Capsules on the reliable control stream. When necessary, endpoints can fall back to transmitting complete IP packets using Context ID 0, which represents unoptimised datagrams containing the full IP packet as defined in <xref section="5" sectionFormat="of" target="CONNECT-IP"/>.</t>
    </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?>

<t>The following terms are used in this document:</t>
      <dl>
        <dt>Context Identifier (CID):</dt>
        <dd>
          <t>A numeric identifier associated with a specific packet reconstruction and processing behavior. A CONNECT-IP tunnel can maintain multiple CIDs in each direction. Context ID 0 always represents transmission of complete, unoptimised IP packets as defined in <xref section="5" sectionFormat="of" target="CONNECT-IP"/>.</t>
        </dd>
        <dt>Template:</dt>
        <dd>
          <t>A reusable packet layout consisting of a sequence of static and variable segments. Static segments contain bytes omitted from optimized datagrams, while variable segments correspond to bytes still carried in the datagram payload.</t>
        </dd>
        <dt>Checksum Offload:</dt>
        <dd>
          <t>A capability allowing the receiver to compute and finalize the Internet checksum according to <xref target="INCREMENTAL-CHECKSUM"/> for the reconstructed packet, based on two offsets: <tt>Checksum Field Offset</tt> and <tt>Checksum Start Offset</tt>.</t>
        </dd>
        <dt>Capsule:</dt>
        <dd>
          <t>A reliable control-stream message, as defined in <xref section="3" sectionFormat="of" target="HTTP-DATAGRAMS"/>, used in this specification to signal creation or deletion of Context Identifiers and their associated templates.</t>
        </dd>
      </dl>
    </section>
    <section anchor="negotiation">
      <name>Negotiation of Capabilities</name>
      <t>Endpoints negotiate support for these optimizations when establishing a CONNECT-IP tunnel by using a <tt>connect-ip-optimizations</tt> HTTP header field, whose value is a Structured Field Dictionary as defined in <xref section="3.2" sectionFormat="of" target="STRUCTURED-HTTP"/>.</t>
      <section anchor="header-definition">
        <name>Header Definition</name>
        <figure anchor="fig-connect-ip-optimizations-header">
          <name>Connect-ip-optimizations header field</name>
          <artwork><![CDATA[
connect-ip-optimizations = sf-dictionary
]]></artwork>
        </figure>
        <t>This document defines the following optional dictionary keys:</t>
        <dl>
          <dt><tt>templates</tt> (sf-interger):</dt>
          <dd>
            <t>Indicates support for reusable templates and specifies the maximum number of templates that the sender is willing to maintain for templates received from the peer. A positive integer value indicates full support for reusable templates, and the value represents an upper bound on the number of concurrently active templates that can be created by the peer. A value of 0 indicates that the sender supports reusable templates only for its own transmissions but does not accept templates created by the peer. If this member is omitted, reusable templates are not supported in either direction.</t>
          </dd>
          <dt><tt>checksum</tt> (sf-boolean):</dt>
          <dd>
            <t>Indicates support for checksum offload semantics. A value of <tt>?1</tt> means that checksum offload is supported in both directions. A value of <tt>?0</tt> means that checksum offload may be used for packets sent by this endpoint but not for packets received from the peer. If this member is omitted, checksum offload is not supported in either direction.</t>
          </dd>
        </dl>
        <t>Endpoints <bcp14>MUST</bcp14> ignore unknown dictionary members. The absence of a member implies that the corresponding capability is not supported by the sender.</t>
      </section>
      <section anchor="negotiation-behavior">
        <name>Negotiation Behavior</name>
        <t>If both peers indicate support for templates (that is, <tt>templates</tt> member is present and non-zero in both directions), either endpoint <bcp14>MAY</bcp14> create and delete Context Identifiers and their templates using capsules as described in <xref target="capsules"/>.</t>
        <t>If both peers indicate support for checksum offload (that is, <tt>checksum=?1</tt> in both directions), either endpoint <bcp14>MAY</bcp14> install checksum offload parameters for specific Context Identifiers using capsules as described in <xref target="optimization-create"/>.</t>
        <t>Peers of endpoints that advertise support in only one direction (for example, <tt>checksum=?0</tt> or <tt>templates=0</tt>) <bcp14>MUST NOT</bcp14> send capsules that would require those endpoints to maintain state for the corresponding capability.</t>
        <t>Capabilities that were not successfully negotiated <bcp14>MUST NOT</bcp14> be used within the tunnel.</t>
      </section>
      <section anchor="example">
        <name> Example</name>
        <t>HTTP/3 sample request (client to proxy):</t>
        <figure anchor="fig-connect-ip-optimizations-request-example">
          <name>CONNECT-IP with connect-ip-optimizations request example</name>
          <artwork><![CDATA[
:method = CONNECT
:protocol = connect-ip
:scheme = https
:path = /.well-known/masque/ip/*/*/
:authority = proxy.example.net
capsule-protocol = ?1
connect-ip-optimizations = templates=20000, checksum=?1
]]></artwork>
        </figure>
        <t>HTTP/3 sample response (proxy to client):</t>
        <figure anchor="fig-connect-ip-optimizations-response-example">
          <name>CONNECT-IP with connect-ip-optimizations response example</name>
          <artwork><![CDATA[
:status = 200
capsule-protocol = ?1
connect-ip-optimizations = templates=65535, checksum=?0
]]></artwork>
        </figure>
        <t>In this example, both peers support reusable templates, and checksum offload is supported only for packets sent from the proxy to the client.</t>
        <t>After this exchange, both endpoints may define Context Identifiers and associated templates and/or checksum parameters using capsules on the reliable control stream.</t>
      </section>
    </section>
    <section anchor="capsules">
      <name>Optimization capsules</name>
      <t>This specification defines two capsule types:</t>
      <dl>
        <dt>CONNECT_IP_OPTIMIZATION_CREATE (capsule type 0x1a768469):</dt>
        <dd>
          <t>Creates an immutable optimization context bound to a Context ID.</t>
        </dd>
        <dt>CONNECT_IP_OPTIMIZATION_DELETE (capsule type 0x1a76846a):</dt>
        <dd>
          <t>Retires a CID.</t>
        </dd>
      </dl>
      <t>All capsules are sent on the reliable control stream of the CONNECT-IP tunnel.</t>
      <section anchor="context-id-allocation">
        <name>Context ID allocation</name>
        <t>The Context ID carried in these capsules is encoded as a QUIC variable-length integer defined in <xref section="16" sectionFormat="of" target="QUIC"/>. Even-numbered CIDs are allocated by the client, and odd-numbered CIDs are allocated by the proxy, consistent with <xref section="4" sectionFormat="of" target="CONNECT-UDP"/>. CID 0 is reserved for unoptimized raw packets and <bcp14>MUST NOT</bcp14> appear in these capsules.</t>
      </section>
      <section anchor="optimization-create">
        <name>CONNECT_IP_OPTIMIZATION_CREATE capsule</name>
        <t>CONNECT_IP_OPTIMIZATION_CREATE capsule is used to create a new, immutable optimization context for the indicated CID.</t>
        <figure anchor="fig-optimization-create-capsule">
          <name>CONNECT_IP_OPTIMIZATION_CREATE Capsule Format</name>
          <artwork><![CDATA[
CONNECT_IP_OPTIMIZATION_CREATE Capsule {
  Type (i) = 0x1a768469,
  Length (i),
  Context ID (i),
  Static Segments Length (i),
  Static Segment (..) ...,
  Checksum Field Offset (i)?,
  Checksum Start Offset (i)?,
}
]]></artwork>
        </figure>
        <t>CONNECT_IP_OPTIMIZATION_CREATE capsule contains the following fields:</t>
        <dl>
          <dt>Context ID:</dt>
          <dd>
            <t>Context Identifier, encoded as a variable-length integer, defined by this capsule.</t>
          </dd>
          <dt>Static Segments Length:</dt>
          <dd>
            <t>Aggregate length in bytes of all subsequent Static Segments. A value of 0 indicates that no template is used (that is, the payload of datagrams for the given Context ID contains a full reconstructed packet, modulo checksum finishing if configured).</t>
          </dd>
          <dt>Checksum Field Offset:</dt>
          <dd>
            <t>An optional field, encoded as a variable-length integer, containing byte offset of the 16-bit Internet checksum field within the reconstructed packet. This field is omitted if checksum offload is not used.</t>
          </dd>
          <dt>Checksum Start Offset:</dt>
          <dd>
            <t>An optional field, encoded as a variable-length integer, containing byte offset where checksum coverage begins. Coverage runs from this offset to the end of the reconstructed packet. Not included in the capsule if checksum offloading is not used.</t>
          </dd>
        </dl>
        <t>The CONNECT_IP_OPTIMIZATION_CREATE capsule contains a sequence of zero or more Static Segments.</t>
        <figure anchor="fig-static-segment">
          <name>Static Segment Format</name>
          <artwork><![CDATA[
Static Segment {
  Segment Offset (i),
  Segment Length (i),
  Segment Payload (..),
}
]]></artwork>
        </figure>
        <t>Each Static Segment contains following fields:</t>
        <dl>
          <dt>Segment Offset:</dt>
          <dd>
            <t>Byte offset from the start of the reconstructed packet, encoded as a variable-length integer</t>
          </dd>
          <dt>Segment Length:</dt>
          <dd>
            <t>Number of bytes in this static segment, encoded as a variable-length integer</t>
          </dd>
          <dt>Segment Payload:</dt>
          <dd>
            <t>the static bytes to insert at the Segment Offset</t>
          </dd>
        </dl>
        <section anchor="parsing-and-validation">
          <name>Parsing and validation</name>
          <t>The receiver parses an CONNECT_IP_OPTIMIZATION_CREATE capsule by reading, in order: the Context ID, the Static Segments Length, zero or more static segments whose encodings consume exactly Static Segments Length bytes, and then two checksum offsets if they are present.</t>
          <t>The Context ID <bcp14>MUST</bcp14> be non-zero, even-numbered when created by the client, and odd-numbered when created by the proxy. The Context ID <bcp14>MUST NOT</bcp14> have been used previously. Static Segments Length is the total size, in bytes, of the static segments section including each Segmenet Offset, Segment Length, and Segment Payload.</t>
          <t>Each Static Segment consists of a Segment Offset, a Segment Length, and exactly Segment Length octets of Segment Payload. Static segments <bcp14>MUST</bcp14> appear in strictly increasing Segment Offset order and <bcp14>MUST NOT</bcp14> overlap.</t>
          <t>After Static Segments Length bytes have been consumed, the capsule either ends immediately or contains exactly two additional fields: Checksum Field Offset followed by Checksum Start Offset. If only one variable-length integer is present, or if any bytes remain after the two length integers, the capsule is malformed.</t>
          <t>A receiver that did not negotiate acceptance of checksum offload in its direction as defined in <xref target="negotiation"/> <bcp14>MUST</bcp14> treat an CONNECT_IP_OPTIMIZATION_CREATE capsule that includes checksum offsets as an error and <bcp14>MUST</bcp14> follow the error-handling procedure in <xref section="3.3" sectionFormat="of" target="HTTP-DATAGRAMS"/>. A receiver that has already accepted the maximum number of templates it advertised via the templates member of <tt>connect-ip-optimizations</tt> <bcp14>MUST</bcp14> treat any additional CONNECT_IP_OPTIMIZATION_CREATE capsule containing a template (that is, with Static Segments Length &gt; 0) as an error and <bcp14>MUST</bcp14> follow the same error-handling procedure.</t>
          <t>If any of the capsule fields are malformed upon reception, the receiver of the capsule <bcp14>MUST</bcp14> follow the error-handling procedure defined in <xref section="3.3" sectionFormat="of" target="HTTP-DATAGRAMS"/>.</t>
          <t>Per-packet validation uses the reconstruction procedure described in <xref target="reconstruction"/>.</t>
        </section>
      </section>
      <section anchor="connectipoptimizationdelete-capsule">
        <name>CONNECT_IP_OPTIMIZATION_DELETE capsule</name>
        <t>CONNECT_IP_OPTIMIZATION_DELETE capsule is used to indicate that a Context ID previously defined by CONNECT_IP_OPTIMIZATION_CREATE capsule will no longer be used.</t>
        <figure anchor="fig-optimization-delete-capsule">
          <name>CONNECT_IP_OPTIMIZATION_DELETE Capsule Format</name>
          <artwork><![CDATA[
CONNECT_IP_OPTIMIZATION_DELETE Capsule {
  Type (i) = 0x1a76846a,
  Length (i),
  Context ID (i),
}
]]></artwork>
        </figure>
        <t>After sending an CONNECT_IP_OPTIMIZATION_DELETE Capsule, the sender <bcp14>MUST NOT</bcp14> use the Context ID. Upon receipt, the peer retires the indicated context and releases any negotiated template budget consumed by that context if, and only if, the retired context included a template (that is, its CONNECT_IP_OPTIMIZATION_CREATE had a non-zero Static Segments Length). Retiring a context that had no template (for example, checksum-only) does not affect the template budget.</t>
        <t>If an CONNECT_IP_OPTIMIZATION_DELETE capsule is received for a Context ID that was not previously and correctly defined by an CONNECT_IP_OPTIMIZATION_CREATE capsule from the peer, the receiver <bcp14>MUST</bcp14> follow the error-handling procedure defined in <xref section="3.3" sectionFormat="of" target="HTTP-DATAGRAMS"/>.</t>
      </section>
    </section>
    <section anchor="optimized-datagram-operation">
      <name>Optimized Datagram Operation</name>
      <t>This section defines how endpoints construct and consume datagrams once a Context ID has been created with CONNECT_IP_OPTIMIZATION_CREATE capsule.</t>
      <section anchor="sender-behavior">
        <name>Sender behavior</name>
        <t>For each packet sent under a Context ID, the sender constructs the datagram payload according to the context's template. If the context has no template (that is, Static Segments Length is 0), the payload <bcp14>MUST</bcp14> be a complete reconstructed packet. If the context has a template, the payload <bcp14>MUST</bcp14> be the concatenation of all variable byte ranges, taken in strictly increasing offset order, corresponding to the gaps not covered by static segments starting at offset 0.</t>
        <t>When checksum offload is configured (that is, the context includes Checksum Field Offset and Checksum Start Offset), the sender <bcp14>MUST</bcp14> set the checksum field in the reconstructed packet image to the 16-bit one’s-complement sum of the appropriate pseudo-header before transmission. The two bytes at Checksum Field Offset in the reconstructed image therefore <bcp14>MUST</bcp14> contain this pseudo-header sum; these bytes originates from static bytes in the template as well as from variable bytes in the payload. The final reconstructed image <bcp14>MUST</bcp14> contain the correct preseeding value.</t>
        <t>A sender uses Context ID 0 for any one-off packet that does not fit an existing context (for example, a transient change in header layout).</t>
      </section>
      <section anchor="reconstruction">
        <name>Receiver behavior</name>
        <t>A datagram that arrives with a non-zero Context ID that has not been previously and correctly defined by an CONNECT_IP_OPTIMIZATION_CREATE capsule from the peer <bcp14>MUST</bcp14> be dropped.</t>
        <t>If the CID has no template (that is, Static Segments Length is 0), the datagram payload is the complete reconstructed packet. If the CID has a template, the receiver reconstructs the packet from offset 0 upward by writing static bytes at their declared offsets and filling all remaining byte positions with bytes consumed from the datagram payload in strictly increasing offset order. Reconstruction continues until all payload bytes have been consumed. If the payload is exhausted before the offset of the last static segment have been filled, the packet <bcp14>MUST</bcp14> be dropped.</t>
        <t>When Checksum Field Offset and Checksum Start Offset are present for the CID, the receiver finishes the Internet checksum as follows: it computes the checksum over the byte range starting at Checksum Start Offset and ending at the reconstructed packet length while treating the checksum field as zero during the sum; it then adds (folds) the 16-bit value currently at Checksum Field Offset, performs end-around carry, and writes the final one's-complement result back at Checksum Field Offset. If either checksum offset is greater than or equal to the reconstructed packet length for this packet, the packet <bcp14>MUST</bcp14> be dropped.</t>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>This section illustrates how contexts are created and how senders form compact payloads. All offsets and lengths are in bits in the packet diagrams and field tables. All offsets and lengths are in bytes in segment tables and sample capsules.</t>
      <section anchor="tcp-over-ipv6-with-template-and-checksum-offload">
        <name>TCP over IPv6 with template and checksum offload</name>
        <t>Original sample <xref target="TCP"/> over <xref target="IPv6"/> packet layout is illustrated below. In addition to basic IPv6 and TCP headers it contains Timestamp option as defined in <xref section="3" sectionFormat="of" target="TCP-PERF"/>.</t>
        <figure anchor="original-tcp-ipv6">
          <name>Example TCP over IPv6 packet before optimization</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="704" width="576" viewBox="0 0 576 704" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,688" fill="none" stroke="black"/>
                <path d="M 80,48 L 80,96" fill="none" stroke="black"/>
                <path d="M 80,448 L 80,496" fill="none" stroke="black"/>
                <path d="M 144,32 L 144,48" fill="none" stroke="black"/>
                <path d="M 144,544 L 144,592" fill="none" stroke="black"/>
                <path d="M 208,48 L 208,96" fill="none" stroke="black"/>
                <path d="M 280,32 L 280,48" fill="none" stroke="black"/>
                <path d="M 280,96 L 280,144" fill="none" stroke="black"/>
                <path d="M 280,304 L 280,352" fill="none" stroke="black"/>
                <path d="M 280,448 L 280,592" fill="none" stroke="black"/>
                <path d="M 416,32 L 416,48" fill="none" stroke="black"/>
                <path d="M 416,96 L 416,144" fill="none" stroke="black"/>
                <path d="M 416,544 L 416,592" fill="none" stroke="black"/>
                <path d="M 552,32 L 552,688" fill="none" stroke="black"/>
                <path d="M 568,64 L 568,96" fill="none" stroke="black"/>
                <path d="M 568,256 L 568,288" fill="none" stroke="black"/>
                <path d="M 568,320 L 568,400" fill="none" stroke="black"/>
                <path d="M 568,576 L 568,672" fill="none" stroke="black"/>
                <path d="M 8,48 L 552,48" fill="none" stroke="black"/>
                <path d="M 8,96 L 552,96" fill="none" stroke="black"/>
                <path d="M 8,144 L 552,144" fill="none" stroke="black"/>
                <path d="M 8,224 L 552,224" fill="none" stroke="black"/>
                <path d="M 8,304 L 552,304" fill="none" stroke="black"/>
                <path d="M 8,352 L 552,352" fill="none" stroke="black"/>
                <path d="M 8,400 L 552,400" fill="none" stroke="black"/>
                <path d="M 8,448 L 552,448" fill="none" stroke="black"/>
                <path d="M 8,496 L 552,496" fill="none" stroke="black"/>
                <path d="M 8,544 L 552,544" fill="none" stroke="black"/>
                <path d="M 8,592 L 552,592" fill="none" stroke="black"/>
                <path d="M 8,640 L 552,640" fill="none" stroke="black"/>
                <path d="M 8,688 L 552,688" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="576,672 564,666.4 564,677.6" fill="black" transform="rotate(90,568,672)"/>
                <polygon class="arrowhead" points="576,320 564,314.4 564,325.6" fill="black" transform="rotate(270,568,320)"/>
                <polygon class="arrowhead" points="576,288 564,282.4 564,293.6" fill="black" transform="rotate(90,568,288)"/>
                <polygon class="arrowhead" points="576,64 564,58.4 564,69.6" fill="black" transform="rotate(270,568,64)"/>
                <g class="text">
                  <text x="16" y="36">0</text>
                  <text x="136" y="36">7</text>
                  <text x="152" y="36">8</text>
                  <text x="268" y="36">15</text>
                  <text x="292" y="36">16</text>
                  <text x="404" y="36">23</text>
                  <text x="428" y="36">16</text>
                  <text x="540" y="36">31</text>
                  <text x="16" y="68">0</text>
                  <text x="32" y="68">1</text>
                  <text x="48" y="68">1</text>
                  <text x="64" y="68">0</text>
                  <text x="140" y="68">0x00</text>
                  <text x="376" y="68">0x4bcde</text>
                  <text x="40" y="84">Version</text>
                  <text x="120" y="84">Traffic</text>
                  <text x="176" y="84">Class</text>
                  <text x="348" y="84">Flow</text>
                  <text x="392" y="84">Label</text>
                  <text x="140" y="116">0x0020</text>
                  <text x="348" y="116">0x06</text>
                  <text x="484" y="116">0x79</text>
                  <text x="568" y="116">I</text>
                  <text x="112" y="132">Payload</text>
                  <text x="172" y="132">length</text>
                  <text x="316" y="132">Next</text>
                  <text x="364" y="132">header</text>
                  <text x="456" y="132">Hop</text>
                  <text x="496" y="132">limit</text>
                  <text x="568" y="132">P</text>
                  <text x="568" y="164">H</text>
                  <text x="280" y="180">2001:0db8:85a3:0000:0000:8a2e:0370:7334</text>
                  <text x="568" y="180">E</text>
                  <text x="244" y="196">Source</text>
                  <text x="304" y="196">Address</text>
                  <text x="568" y="196">A</text>
                  <text x="568" y="212">D</text>
                  <text x="568" y="228">E</text>
                  <text x="568" y="244">R</text>
                  <text x="280" y="260">2001:0db8:a42b:0000:0000:7c3a:143a:1529</text>
                  <text x="240" y="276">Destination</text>
                  <text x="320" y="276">Address</text>
                  <text x="140" y="324">0x0050</text>
                  <text x="412" y="324">0xd475</text>
                  <text x="124" y="340">Source</text>
                  <text x="172" y="340">port</text>
                  <text x="392" y="340">Destination</text>
                  <text x="460" y="340">port</text>
                  <text x="276" y="372">0x6caa4bd7</text>
                  <text x="252" y="388">Sequence</text>
                  <text x="316" y="388">number</text>
                  <text x="276" y="420">0x9b16794e</text>
                  <text x="568" y="420">T</text>
                  <text x="252" y="436">Acknowledgment</text>
                  <text x="340" y="436">number</text>
                  <text x="568" y="436">C</text>
                  <text x="568" y="452">P</text>
                  <text x="16" y="468">1</text>
                  <text x="32" y="468">0</text>
                  <text x="48" y="468">0</text>
                  <text x="64" y="468">0</text>
                  <text x="88" y="468">0</text>
                  <text x="104" y="468">0</text>
                  <text x="120" y="468">0</text>
                  <text x="136" y="468">0</text>
                  <text x="152" y="468">0</text>
                  <text x="168" y="468">0</text>
                  <text x="184" y="468">0</text>
                  <text x="200" y="468">1</text>
                  <text x="216" y="468">0</text>
                  <text x="232" y="468">0</text>
                  <text x="248" y="468">0</text>
                  <text x="264" y="468">0</text>
                  <text x="412" y="468">0x041e</text>
                  <text x="24" y="484">Hdr</text>
                  <text x="56" y="484">Len</text>
                  <text x="152" y="484">TCP</text>
                  <text x="192" y="484">Flags</text>
                  <text x="412" y="484">Window</text>
                  <text x="568" y="484">H</text>
                  <text x="568" y="500">E</text>
                  <text x="140" y="516">0x8f6b</text>
                  <text x="412" y="516">0x0000</text>
                  <text x="568" y="516">A</text>
                  <text x="140" y="532">Checksum</text>
                  <text x="380" y="532">Urgent</text>
                  <text x="440" y="532">Pointer</text>
                  <text x="568" y="532">D</text>
                  <text x="568" y="548">E</text>
                  <text x="76" y="564">0x01</text>
                  <text x="212" y="564">0x01</text>
                  <text x="348" y="564">0x08</text>
                  <text x="484" y="564">0x0a</text>
                  <text x="568" y="564">R</text>
                  <text x="48" y="580">No-Op</text>
                  <text x="100" y="580">Option</text>
                  <text x="184" y="580">No-Op</text>
                  <text x="236" y="580">Option</text>
                  <text x="320" y="580">TimeStamp</text>
                  <text x="388" y="580">Option</text>
                  <text x="484" y="580">Length</text>
                  <text x="276" y="612">0x119a5db3</text>
                  <text x="256" y="628">Timestamp</text>
                  <text x="320" y="628">value</text>
                  <text x="276" y="660">0xd9b4d48d</text>
                  <text x="232" y="676">Timestamp</text>
                  <text x="292" y="676">echo</text>
                  <text x="336" y="676">reply</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
|0              7|8             15|16            23|16            31|
+--------+-------+-------+--------+----------------+----------------+
|0 1 1 0 |     0x00      |                 0x4bcde                  | ^
|Version | Traffic Class |               Flow Label                 | |
+--------+---------------+--------+----------------+----------------+ |
|             0x0020              |      0x06      |      0x79      | I
|         Payload length          |  Next header   |   Hop limit    | P
+---------------------------------+----------------+----------------+
|                                                                   | H
|              2001:0db8:85a3:0000:0000:8a2e:0370:7334              | E
|                          Source Address                           | A
|                                                                   | D
+-------------------------------------------------------------------+ E
|                                                                   | R
|              2001:0db8:a42b:0000:0000:7c3a:143a:1529              | |
|                       Destination Address                         | |
|                                                                   | v
+---------------------------------+---------------------------------+
|             0x0050              |             0xd475              | ^
|           Source port           |        Destination port         | |
+---------------------------------+---------------------------------+ |
|                            0x6caa4bd7                             | |
|                          Sequence number                          | |
+-------------------------------------------------------------------+ |
|                            0x9b16794e                             | T
|                       Acknowledgment number                       | C
+--------+------------------------+---------------------------------+ P
|1 0 0 0 |0 0 0 0 0 0 0 1 0 0 0 0 |             0x041e              |
|Hdr Len |       TCP Flags        |             Window              | H
+--------+------------------------+---------------------------------+ E
|             0x8f6b              |             0x0000              | A
|            Checksum             |         Urgent Pointer          | D
+----------------+----------------+----------------+----------------+ E
|      0x01      |      0x01      |      0x08      |      0x0a      | R
|  No-Op Option  |  No-Op Option  |TimeStamp Option|     Length     | |
+----------------+----------------+----------------+----------------+ |
|                            0x119a5db3                             | |
|                          Timestamp value                          | |
+-------------------------------------------------------------------+ |
|                            0xd9b4d48d                             | |
|                       Timestamp echo reply                        | v
+-------------------------------------------------------------------+
]]></artwork>
          </artset>
        </figure>
        <t>Table below illustrates fields present in IPv6 and TCP headers, their offsets in bits from the beginning of the packet and whether they are likely to be static for most packets of a given traffic flow</t>
        <table anchor="ipv6-tcp-fields">
          <name>IPv6 and TCP header fields in example packet</name>
          <thead>
            <tr>
              <th align="left">Offset</th>
              <th align="left">Field name</th>
              <th align="left">Length</th>
              <th align="left">Value</th>
              <th align="left">Static</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">Version</td>
              <td align="left">4</td>
              <td align="left">0110b</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">4</td>
              <td align="left">Traffic Class</td>
              <td align="left">8</td>
              <td align="left">0x00</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">12</td>
              <td align="left">Flow label</td>
              <td align="left">20</td>
              <td align="left">0x4bcde</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">32</td>
              <td align="left">Payload length</td>
              <td align="left">16</td>
              <td align="left">0x0020</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">48</td>
              <td align="left">Next header</td>
              <td align="left">8</td>
              <td align="left">0x06</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">56</td>
              <td align="left">Hop limit</td>
              <td align="left">8</td>
              <td align="left">0x79</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">64</td>
              <td align="left">Source address</td>
              <td align="left">128</td>
              <td align="left">2001:0db8:85a3::8a2e:0370:7334</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">192</td>
              <td align="left">Destination address</td>
              <td align="left">128</td>
              <td align="left">2001:0db8:a42b::7c3a:143a:1529</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">320</td>
              <td align="left">Source port</td>
              <td align="left">16</td>
              <td align="left">0x0050</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">336</td>
              <td align="left">Destination port</td>
              <td align="left">16</td>
              <td align="left">0xd475</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">352</td>
              <td align="left">Sequence number</td>
              <td align="left">32</td>
              <td align="left">0x6caa4bd7</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">384</td>
              <td align="left">Acknowledgement number</td>
              <td align="left">32</td>
              <td align="left">0x9b16794e</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">416</td>
              <td align="left">TCP header length</td>
              <td align="left">4</td>
              <td align="left">1000b</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">420</td>
              <td align="left">TCP Flags</td>
              <td align="left">12</td>
              <td align="left">000000010000b</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">432</td>
              <td align="left">Window</td>
              <td align="left">16</td>
              <td align="left">0x041e</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">448</td>
              <td align="left">Checksum</td>
              <td align="left">16</td>
              <td align="left">0x8f6b</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">464</td>
              <td align="left">Urgent pointer</td>
              <td align="left">16</td>
              <td align="left">0x0000</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">480</td>
              <td align="left">No-Op option</td>
              <td align="left">8</td>
              <td align="left">0x01</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">488</td>
              <td align="left">No-Op option</td>
              <td align="left">8</td>
              <td align="left">0x01</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">496</td>
              <td align="left">Timestamp option</td>
              <td align="left">8</td>
              <td align="left">0x08</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">504</td>
              <td align="left">Timestamp option length</td>
              <td align="left">8</td>
              <td align="left">0x0a</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">512</td>
              <td align="left">Timestamp value</td>
              <td align="left">32</td>
              <td align="left">0x119a5db3</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">544</td>
              <td align="left">Timestamp echo reply</td>
              <td align="left">32</td>
              <td align="left">0xd9b4d48d</td>
              <td align="left">No</td>
            </tr>
          </tbody>
        </table>
        <t>Static segments model the invariant parts except for the isolated 4-bit TCP header length.</t>
        <t>Resulting static segments:</t>
        <table anchor="ipv6-tcp-segments">
          <name>Static segments for example IPv6/TCP packet</name>
          <thead>
            <tr>
              <th align="left">Segment Offset</th>
              <th align="left">Segment Length</th>
              <th align="left">Segment Contents</th>
              <th align="left">Segment Payload</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">4</td>
              <td align="left">Version, Traffic Class and Flow Label</td>
              <td align="left">0x6004bcde</td>
            </tr>
            <tr>
              <td align="left">6</td>
              <td align="left">38</td>
              <td align="left">Next header, Hop limit, Source address, Destination address, Source port, Destination port</td>
              <td align="left">0x067920010db885a3...</td>
            </tr>
            <tr>
              <td align="left">58</td>
              <td align="left">6</td>
              <td align="left">Urgent pointer, 2 No-Op TCP options, Timestamp option code and length</td>
              <td align="left">0x00000101080a</td>
            </tr>
          </tbody>
        </table>
        <t>Resulting CONNECT_IP_OPTIMIZATION_CREATE capsule with client-allocated even context id is illustrated below:</t>
        <figure anchor="ipv6-tcp-optimization-create">
          <name>CONNECT_IP_OPTIMIZATION_CREATE Capsule for example IPv6/TCP packet</name>
          <artwork><![CDATA[
CONNECT_IP_OPTIMIZATION_CREATE Capsule {
  Type (i) = 0x1a768469,
  Length (i) = 58,
  Context ID (i) = 2,
  Static Segments Length (i) = 54,
  Static Segment {
    Segment Offset (i) = 0,
    Segment Length (i) = 4,
    Segment Payload = 0x6004bcde,
  },
  Static Segment {
    Segment Offset (i) = 6,
    Segment Length (i) = 38,
    Segment Payload = 0x067920010db885a3000000008a2e0370733420010db8a42b000000007c3a143a15290050d475,
  },
  Static Segment {
    Segment Offset (i) = 58,
    Segment Length (i) = 6,
    Segment Payload = 0x00000101080a,
  },
  Checksum Field Offset (i) = 56,
  Checksum Start Offset (i) = 40,
}
]]></artwork>
        </figure>
        <t>This template reduces per-packet overhead by omitting 48 bytes of repeated header material, increasing the effective MTU when datagrams are encapsulated in QUIC DATAGRAM frames.</t>
        <t>The sender concatenates all variable regions in increasing offset order and replaces checksum field with the IPv6/TCP pseudo-header checksum. Packets that do not match this template (for example packets with IPv6 extension headers or without TCP options) are sent using Context ID 0 or associated with a new context.</t>
      </section>
      <section anchor="udp-over-ipv4-with-template-and-without-checksum-offload">
        <name>UDP over IPv4 with template and without checksum offload</name>
        <t>Original sample <xref target="UDP"/> over <xref target="IPv4"/> packet layout is illustrated below.</t>
        <figure anchor="original-udp-ipv4">
          <name>Example UDP over IPv4 packet before optimization</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="448" width="576" viewBox="0 0 576 448" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,432" fill="none" stroke="black"/>
                <path d="M 80,48 L 80,96" fill="none" stroke="black"/>
                <path d="M 144,32 L 144,96" fill="none" stroke="black"/>
                <path d="M 144,144 L 144,192" fill="none" stroke="black"/>
                <path d="M 280,32 L 280,192" fill="none" stroke="black"/>
                <path d="M 280,288 L 280,384" fill="none" stroke="black"/>
                <path d="M 336,96 L 336,144" fill="none" stroke="black"/>
                <path d="M 416,32 L 416,48" fill="none" stroke="black"/>
                <path d="M 552,32 L 552,432" fill="none" stroke="black"/>
                <path d="M 568,64 L 568,80" fill="none" stroke="black"/>
                <path d="M 568,240 L 568,272" fill="none" stroke="black"/>
                <path d="M 568,304 L 568,336" fill="none" stroke="black"/>
                <path d="M 568,400 L 568,432" fill="none" stroke="black"/>
                <path d="M 8,48 L 552,48" fill="none" stroke="black"/>
                <path d="M 8,96 L 552,96" fill="none" stroke="black"/>
                <path d="M 8,144 L 552,144" fill="none" stroke="black"/>
                <path d="M 8,192 L 552,192" fill="none" stroke="black"/>
                <path d="M 8,240 L 552,240" fill="none" stroke="black"/>
                <path d="M 8,288 L 552,288" fill="none" stroke="black"/>
                <path d="M 8,336 L 552,336" fill="none" stroke="black"/>
                <path d="M 8,384 L 552,384" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="576,432 564,426.4 564,437.6" fill="black" transform="rotate(90,568,432)"/>
                <polygon class="arrowhead" points="576,304 564,298.4 564,309.6" fill="black" transform="rotate(270,568,304)"/>
                <polygon class="arrowhead" points="576,272 564,266.4 564,277.6" fill="black" transform="rotate(90,568,272)"/>
                <polygon class="arrowhead" points="576,64 564,58.4 564,69.6" fill="black" transform="rotate(270,568,64)"/>
                <g class="text">
                  <text x="16" y="36">0</text>
                  <text x="136" y="36">7</text>
                  <text x="152" y="36">8</text>
                  <text x="268" y="36">15</text>
                  <text x="292" y="36">16</text>
                  <text x="404" y="36">23</text>
                  <text x="428" y="36">16</text>
                  <text x="540" y="36">31</text>
                  <text x="16" y="68">0</text>
                  <text x="32" y="68">1</text>
                  <text x="48" y="68">0</text>
                  <text x="64" y="68">0</text>
                  <text x="88" y="68">0</text>
                  <text x="104" y="68">1</text>
                  <text x="120" y="68">0</text>
                  <text x="136" y="68">1</text>
                  <text x="212" y="68">0x02</text>
                  <text x="412" y="68">0x04cc</text>
                  <text x="40" y="84">Version</text>
                  <text x="96" y="84">Hdr</text>
                  <text x="128" y="84">Len</text>
                  <text x="184" y="84">Traffic</text>
                  <text x="240" y="84">Class</text>
                  <text x="384" y="84">Total</text>
                  <text x="436" y="84">length</text>
                  <text x="568" y="100">I</text>
                  <text x="140" y="116">0x0000</text>
                  <text x="288" y="116">0</text>
                  <text x="304" y="116">1</text>
                  <text x="320" y="116">0</text>
                  <text x="344" y="116">0</text>
                  <text x="360" y="116">0</text>
                  <text x="376" y="116">0</text>
                  <text x="392" y="116">0</text>
                  <text x="408" y="116">0</text>
                  <text x="424" y="116">0</text>
                  <text x="440" y="116">0</text>
                  <text x="456" y="116">0</text>
                  <text x="472" y="116">0</text>
                  <text x="488" y="116">0</text>
                  <text x="504" y="116">0</text>
                  <text x="520" y="116">0</text>
                  <text x="536" y="116">0</text>
                  <text x="568" y="116">P</text>
                  <text x="140" y="132">Identification</text>
                  <text x="304" y="132">Flags</text>
                  <text x="412" y="132">Fragment</text>
                  <text x="476" y="132">offset</text>
                  <text x="568" y="148">H</text>
                  <text x="76" y="164">0x40</text>
                  <text x="212" y="164">0x11</text>
                  <text x="412" y="164">0xb21b</text>
                  <text x="568" y="164">E</text>
                  <text x="72" y="180">TTL</text>
                  <text x="212" y="180">Protocol</text>
                  <text x="380" y="180">Header</text>
                  <text x="444" y="180">checksum</text>
                  <text x="568" y="180">A</text>
                  <text x="568" y="196">D</text>
                  <text x="280" y="212">192.0.2.1</text>
                  <text x="568" y="212">E</text>
                  <text x="244" y="228">Source</text>
                  <text x="304" y="228">Address</text>
                  <text x="568" y="228">R</text>
                  <text x="280" y="260">192.0.2.2</text>
                  <text x="240" y="276">Destination</text>
                  <text x="320" y="276">Address</text>
                  <text x="140" y="308">0xc199</text>
                  <text x="412" y="308">0x1151</text>
                  <text x="124" y="324">Source</text>
                  <text x="172" y="324">port</text>
                  <text x="392" y="324">Destination</text>
                  <text x="460" y="324">port</text>
                  <text x="140" y="356">0x04b8</text>
                  <text x="412" y="356">0x72de</text>
                  <text x="568" y="356">U</text>
                  <text x="140" y="372">Length</text>
                  <text x="412" y="372">Checksum</text>
                  <text x="568" y="372">D</text>
                  <text x="568" y="388">P</text>
                  <text x="200" y="420">UDP</text>
                  <text x="248" y="420">payload</text>
                  <text x="304" y="420">(1200</text>
                  <text x="356" y="420">bytes)</text>
                  <text x="280" y="436">...</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
|0              7|8             15|16            23|16            31|
+--------+-------+----------------+----------------+----------------+
|0 1 0 0 |0 1 0 1|      0x02      |             0x04cc              | ^
|Version |Hdr Len| Traffic Class  |          Total length           | |
+--------+-------+----------------+------+--------------------------+ I
|             0x0000              |0 1 0 |0 0 0 0 0 0 0 0 0 0 0 0 0 | P
|         Identification          |Flags |     Fragment offset      |
+----------------+----------------+------+--------------------------+ H
|      0x40      |      0x11      |             0xb21b              | E
|      TTL       |    Protocol    |         Header checksum         | A
+----------------+----------------+---------------------------------+ D
|                             192.0.2.1                             | E
|                          Source Address                           | R
+-------------------------------------------------------------------+ |
|                             192.0.2.2                             | |
|                       Destination Address                         | v
+---------------------------------+---------------------------------+
|             0xc199              |             0x1151              | ^
|           Source port           |        Destination port         | |
+---------------------------------+---------------------------------+ |
|             0x04b8              |             0x72de              | U
|             Length              |            Checksum             | D
+---------------------------------+---------------------------------+ P
|                                                                   | |
|                      UDP payload (1200 bytes)                     | |
|                                ...                                | v
]]></artwork>
          </artset>
        </figure>
        <t>Table below illustrates fields present in IPv4 header and UDP, their offsets in bits from the beginning of the packet and if they are likely to be static for most packets of a given traffic flow</t>
        <table anchor="ipv4-udp-fields">
          <name>IPv4 header and UDP fields in example packet</name>
          <thead>
            <tr>
              <th align="left">Offset</th>
              <th align="left">Field name</th>
              <th align="left">Length</th>
              <th align="left">Value</th>
              <th align="left">Static</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">Version</td>
              <td align="left">4</td>
              <td align="left">0100b</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">4</td>
              <td align="left">Header length</td>
              <td align="left">4</td>
              <td align="left">0101b</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">8</td>
              <td align="left">Traffic Class</td>
              <td align="left">8</td>
              <td align="left">0x02</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">16</td>
              <td align="left">Total length</td>
              <td align="left">16</td>
              <td align="left">0x04cc</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">32</td>
              <td align="left">Identification</td>
              <td align="left">16</td>
              <td align="left">0x0000</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">48</td>
              <td align="left">Flags</td>
              <td align="left">3</td>
              <td align="left">010b</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">51</td>
              <td align="left">Fragment offset</td>
              <td align="left">13</td>
              <td align="left">0000000000000b</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">64</td>
              <td align="left">TTL</td>
              <td align="left">8</td>
              <td align="left">0x40</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">72</td>
              <td align="left">Protocol</td>
              <td align="left">8</td>
              <td align="left">0x11</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">80</td>
              <td align="left">Header checksum</td>
              <td align="left">16</td>
              <td align="left">0xb21b</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">96</td>
              <td align="left">Source address</td>
              <td align="left">32</td>
              <td align="left">192.0.2.1</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">128</td>
              <td align="left">Destination address</td>
              <td align="left">32</td>
              <td align="left">192.0.2.2</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">160</td>
              <td align="left">Source port</td>
              <td align="left">16</td>
              <td align="left">0xc199</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">176</td>
              <td align="left">Destination port</td>
              <td align="left">16</td>
              <td align="left">0x1151</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">192</td>
              <td align="left">Length</td>
              <td align="left">16</td>
              <td align="left">0x04b8</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">208</td>
              <td align="left">Checksum</td>
              <td align="left">16</td>
              <td align="left">0x72de</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">224</td>
              <td align="left">UDP payload</td>
              <td align="left">9600</td>
              <td align="left">...</td>
              <td align="left">No</td>
            </tr>
          </tbody>
        </table>
        <t>Static segments model the invariant parts:</t>
        <table anchor="ipv4-udp-segments">
          <name>Static segments for example IPv4/UDP packet</name>
          <thead>
            <tr>
              <th align="left">Segment Offset</th>
              <th align="left">Segment Length</th>
              <th align="left">Segment Contents</th>
              <th align="left">Segment Payload</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">2</td>
              <td align="left">Version, Header length and Traffic Class</td>
              <td align="left">0x4502</td>
            </tr>
            <tr>
              <td align="left">4</td>
              <td align="left">6</td>
              <td align="left">Identification, Flags, Fragment offset, TTL and Protocol</td>
              <td align="left">0x000040004011</td>
            </tr>
            <tr>
              <td align="left">12</td>
              <td align="left">12</td>
              <td align="left">Source address, Destination address, Source port and Destination port</td>
              <td align="left">0xc0000201c0000202c1991151</td>
            </tr>
          </tbody>
        </table>
        <t>Resulting CONNECT_IP_OPTIMIZATION_CREATE capsule with proxy-allocated odd Context ID is illustrated below:</t>
        <figure anchor="ipv4-udp-optimization-create">
          <name>CONNECT_IP_OPTIMIZATION_CREATE Capsule for example IPv4/UDP packet</name>
          <artwork><![CDATA[
CONNECT_IP_OPTIMIZATION_CREATE Capsule {
  Type (i) = 0x1a768469,
  Length (i) = 28,
  Context ID (i) = 3,
  Static Segments Length (i) = 26,
  Static Segment {
    Segment Offset (i) = 0,
    Segment Length (i) = 2,
    Segment Payload = 0x4502,
  },
  Static Segment {
    Segment Offset (i) = 4,
    Segment Length (i) = 6,
    Segment Payload = 0x000040004011,
  },
  Static Segment {
    Segment Offset (i) = 12,
    Segment Length (i) = 12,
    Segment Payload = 0xc0000201c0000202c1991151,
  }
}
]]></artwork>
        </figure>
        <t>This template omits 20 bytes of repeated header material, increasing the effective MTU when datagrams are encapsulated in QUIC DATAGRAM frames.</t>
        <t>The sender concatenates all variable regions in increasing offset order. Because this template does not define checksum offload, the UDP checksum is computed by the sender as usual; the receiver does not perform checksum finishing for this context.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This specification changes how CONNECT-IP datagrams are constructed but does not weaken transport-layer integrity or confidentiality protections provided by the underlying HTTP mapping. All Capsules travel on the reliable control stream and inherit those protections.</t>
      <t>Context state can be abused for resource exhaustion. Endpoints enforce negotiated limits from <tt>connect-ip-optimizations</tt>; they <bcp14>MUST</bcp14> reject creations that exceed the declared template budget and must release budget when a context is retired with CONNECT_IP_OPTIMIZATION_DELETE. Implementations <bcp14>SHOULD</bcp14> bound the number of static segments, validate lengths before allocation and cap per-context memory.</t>
      <t>Negotiation and Capsule handling are directional and immutable to reduce desynchronization risk. Even/odd Context ID allocation prevents collisions between endpoints; CID 0 is reserved and must not appear in Capsules. Unknown CIDs must be dropped. Reusing a CID within the same connection after deletion is not permitted; endpoints <bcp14>MUST</bcp14> allocate a fresh CID to change behavior.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="http-capsule-types-registration">
        <name>HTTP Capsule Types Registration</name>
        <t>This specification registers the following values in the "HTTP Capsule Types" registry:</t>
        <t>| Value | Capsule Type
+ --- + --- +
| 0x1a768469 | CONNECT_IP_OPTIMIZATION_CREATE |
| 0x1a76846a | CONNECT_IP_OPTIMIZATION_DELETE |</t>
      </section>
      <section anchor="http-field-name-registration">
        <name>HTTP Field Name Registration</name>
        <t>This specification registers the following value in the "HTTP Field Name" registry:</t>
        <ul spacing="normal">
          <li>
            <t>Field Name: connect-ip-optimizations</t>
          </li>
          <li>
            <t>Status: provisional (permanent if approved)</t>
          </li>
          <li>
            <t>Structured Type: Dictionary</t>
          </li>
          <li>
            <t>Reference: This document</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="CONNECT-IP">
          <front>
            <title>Proxying IP in HTTP</title>
            <author fullname="T. Pauly" initials="T." role="editor" surname="Pauly"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="A. Chernyakhovsky" initials="A." surname="Chernyakhovsky"/>
            <author fullname="M. Kühlewind" initials="M." surname="Kühlewind"/>
            <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
            <date month="October" 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="RFC" value="9484"/>
          <seriesInfo name="DOI" value="10.17487/RFC9484"/>
        </reference>
        <reference anchor="HTTP-DATAGRAMS">
          <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>
        <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="INCREMENTAL-CHECKSUM">
          <front>
            <title>Computation of the Internet Checksum via Incremental Update</title>
            <author fullname="A. Rijsinghani" initials="A." role="editor" surname="Rijsinghani"/>
            <date month="May" year="1994"/>
            <abstract>
              <t>This memo describes an updated technique for incremental computation of the standard Internet checksum. It updates the method described in RFC 1141. 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="1624"/>
          <seriesInfo name="DOI" value="10.17487/RFC1624"/>
        </reference>
        <reference anchor="STRUCTURED-HTTP">
          <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="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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <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="TCP">
          <front>
            <title>Transmission Control Protocol (TCP)</title>
            <author fullname="W. Eddy" initials="W." role="editor" surname="Eddy"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document specifies the Transmission Control Protocol (TCP). TCP is an important transport-layer protocol in the Internet protocol stack, and it has continuously evolved over decades of use and growth of the Internet. Over this time, a number of changes have been made to TCP as it was specified in RFC 793, though these have only been documented in a piecemeal fashion. This document collects and brings those changes together with the protocol specification from RFC 793. This document obsoletes RFC 793, as well as RFCs 879, 2873, 6093, 6429, 6528, and 6691 that updated parts of RFC 793. It updates RFCs 1011 and 1122, and it should be considered as a replacement for the portions of those documents dealing with TCP requirements. It also updates RFC 5961 by adding a small clarification in reset handling while in the SYN-RECEIVED state. The TCP header control bits from RFC 793 have also been updated based on RFC 3168.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="7"/>
          <seriesInfo name="RFC" value="9293"/>
          <seriesInfo name="DOI" value="10.17487/RFC9293"/>
        </reference>
        <reference anchor="IPv6">
          <front>
            <title>Internet Protocol, Version 6 (IPv6) Specification</title>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="R. Hinden" initials="R." surname="Hinden"/>
            <date month="July" year="2017"/>
            <abstract>
              <t>This document specifies version 6 of the Internet Protocol (IPv6). It obsoletes RFC 2460.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="86"/>
          <seriesInfo name="RFC" value="8200"/>
          <seriesInfo name="DOI" value="10.17487/RFC8200"/>
        </reference>
        <reference anchor="TCP-PERF">
          <front>
            <title>TCP Extensions for High Performance</title>
            <author fullname="D. Borman" initials="D." surname="Borman"/>
            <author fullname="B. Braden" initials="B." surname="Braden"/>
            <author fullname="V. Jacobson" initials="V." surname="Jacobson"/>
            <author fullname="R. Scheffenegger" initials="R." role="editor" surname="Scheffenegger"/>
            <date month="September" year="2014"/>
            <abstract>
              <t>This document specifies a set of TCP extensions to improve performance over paths with a large bandwidth * delay product and to provide reliable operation over very high-speed paths. It defines the TCP Window Scale (WS) option and the TCP Timestamps (TS) option and their semantics. The Window Scale option is used to support larger receive windows, while the Timestamps option can be used for at least two distinct mechanisms, Protection Against Wrapped Sequences (PAWS) and Round-Trip Time Measurement (RTTM), that are also described herein.</t>
              <t>This document obsoletes RFC 1323 and describes changes from it.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7323"/>
          <seriesInfo name="DOI" value="10.17487/RFC7323"/>
        </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="IPv4">
          <front>
            <title>Internet Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date month="September" year="1981"/>
          </front>
          <seriesInfo name="STD" value="5"/>
          <seriesInfo name="RFC" value="791"/>
          <seriesInfo name="DOI" value="10.17487/RFC0791"/>
        </reference>
      </references>
    </references>
    <?line 545?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA9U923bbyJHv/IqO/BArQ1KkRF0nzkQjybHO+qKV5MyZ7NnE
TaApYk0CDABK1lies7+xb/mWfMp+ydalryBAUrZnzoY+lkSg0V1VXffqbnQ6
nVaZlBN1JDYu1byQw4kSpZrOJrJUhZBpLKKxit4X86nIRqNJJmMxynJx8ub1
67OT6875xUZLDoe5uv2CDiJoepPl90eiKONWK86iVE4BojiXo7KTZ0U2le/H
WWcqi7/PVSfK0lRFZSeZdbJZmUyTn2SZZGnR6fVaxXw4TYoCvpb3M+ji/Oz6
uRBPhJwUGUCYpLGaKfiRlhttsaHipMzyRE7wy/nx9/ALQNs4v7x+vtFK59Oh
yo9aMUB31IJBC5UW8+JIlPlctQDfnZbMlYRef1BDQvQ8LVWeqlJc5zItZlle
brTusvz9TZ7NZ9Du1XxSJrOJ+qBicTybTZKIABdX82FR5jCMyG5VLv797fmJ
OEuj/H6Gtzda79U9dBMftUTHkhb/NoSlvy1RWrcqnQPEQnzpuEIwETd+ACSS
9Eb8CTvE61OZTOA6T8gfE1WOull+g3dkHo3hzrgsZ8XR1hY2xEvJreqaZlt4
YWuYZ3eF2uIutvDRm6Qcz4fw8L2EOZ/IW/i51TTZ+ACxWOmN5j3Y5d66SdbY
xdYj+as7LqeTjVZLzstxluNsAAxCjOaTCfPrj3p4cWm6pAaAskx1J0fiL0Uk
JyqnO4rpeG9B+ONPfLcbZdNWK83yKTx1C5PZStKR963T6QhJkxeVrdb1OCkE
SM18CnwtYjVKUhA99aEEhkXARZmJcqw8mROzPCuzKJuIp5fPT8Th4GCwCU1k
KZIp3LpV1F6NRkmUqDS6B9EVIAfyJpdT4H/gbi1lYngvkrTMs3geIYfka6qA
SM7kMJkkZaKKbqtVpzkmk+xOgKzOMhiAcJBFkUUJ8usJyDfgJ85RkpNRovJC
3MGEgwIBEkUCZY8wB7hnMnoPMjlWMoZmbegSRkJYDULUdzZNSoB+pqD7GLCC
QQoF3JBGAMvdOAHYcpyuFJ8s1GSEbFLCd2iNGOLAaqIKGDIl4t0lueqKkyri
NDrOjo9YDE/eIF4w7bN5ydIJoJdGj3Qm8h4k1JDRzmiuIpWg7MI0FMlNKgkx
vjNRtxLYAQYuVMnkSVLzFNAG1FiEuDJ9ushGqgBVQCxfMMtDU5hYJWYq72g6
oqpAWraRh4A4BY4YZUXZJjoAz4DsAEwTZIwIFGTBzKQneCo/JNN5hYnmKRD/
6avrt5tAapX6jOomCZQtUA0Yp5hPaJIAG1JZp8fXx3+6PH4lRtCO2AnFY5rE
8US1Wk9QLRN/IkaEpd//VIEwx+Ljx9+4i89AJlAkPn1iLkQeFi+ury9ENElQ
xID6oHiQjYox3oN+yjkojQlgCiryZmwfABp9uGfCfIjGMr1R2JhJWQBNkHgK
ZgamENtv7YhTi3AxUxHyNmH68eOVIgzEdrePvPEbbN8xuF8RzNuH+wAzmDBL
EiaXauxsp7uLnYV9ffrUFWcyGhvRAe0SyTzXD6O+a+PcTuYxgg8kcoxKqIIJ
RLPnRA7kB3sDxZLECAsoGTBCScmUSdBsZsBirBHuxXBeYv9zEOoaxhPxXDn+
1wIbsBMgBEbnhlnwVoKBT438CyDBJC66VaVpdBhAB7CTEGQgTZ4SbQurpK4D
3WZF/A2LeJsVqZYjVcfMIbgomRmgTPxh5Fd9SIoSv1hNXYD6AWUXfY6+lDUa
kxWmdCpb0xlUDUEDOGsQgJ5aryK+RFBsT0oyVzdkG8Ub0JTQmwFIjGUhhgqE
OQFVA8DBJDG7g2bi5080b7Y9Ic/VSOUg5YYMBUh0HezIj2CVUphibGZh8hU/
3tDKTdBsszIruOPkJ2VVLOh+ZCJP1wCennpzOo8tAdqBUtuCLO1Afx1U984I
pGgIyPCBQgfKacYmihO7T8H1BJgJGGAW1G3zVN7hb4a8qolh0n9FW5Iwpe/N
NFj7TeKjbQohSLQsZV4aitumEVJN3qiVlocnZ5rkeQYSP5Z5THQwHXUMukM1
lrcJaLd5AQ8DVkbPEEVHMtICqVVxrG6TCLmLpp1EySmTk4u3ZLQoFnFWhSY0
h0f9C54AAxHRJ4LJ+OGL7VS7bpopUAkNp7WoK20nTJzFFZ/kCAYnBkXVV+IF
TLBQqOIJMusCfJ8Bg3qOI+KSQmxWJoQJcKqHsjWBpEHJCSIXxIm6kXDjE1nR
R98pR51WAp7TriBqgtMNYiPz+7bH0RFY0hGamCHASKxqBJb9DtA2qqwxqlZn
nIqeMUBgLXKgOHY7T41+9sVeu3SGfmjpXM+gTrVvXbGhZEEdXcB6otcBANyi
EBEZgTan+GhC39kJgahOYFhXQID29uoaQ1D8LV6/ob8vz2BqLs9O8e+rF8cv
X9o/WrrF1Ys3b1+eur/ckydvXr06e33KD8NVEVxqbbw6/nGD3bWNNxfX529e
H7/cECSivk3EyQeCDxULGNCOeKBogQ2P8mTIdPj+5OKf/+gP0IMCF2S73z8E
F4S/HPT30YdCl45HI33NX4G+9y05A/OdYy84wyAyCVgKEAygdDHO7lIw2uBE
t1q/+w+kzH8eid8Po1l/8Ad9AREOLhqaBReJZotXFh5mItZcqhnGUjO4XqF0
CO/xj8F3Q3fv4u+/A+9diU7/4Ls/tJhHRhladeJHsBksj6T9qpMFMWGNlXx6
cn66CbeOxDEqA5WDCU/cbesfxMYX0F5iZFje09fI6RWzaBRyF7r3lSTrX5Rc
YyjFVKcgBEBUIPSkfGIwmtRzN5BX4IY7eV/48lr174zgtwNJ9rTAY4TV+HOa
Ums5RNKGh03uUaFucGbANbriu+aCUTNaK2fa+xjl2VQbg598rWScjoWOoZ8c
6DPL0OZlujcAkETJuuuoyKzfOZP3aEp9Z0J7rRp3G5ffs0PpwkntHMBA7Fgo
whYoDDHnT2ypbP7L+gAyAhgpSoDnQCmcvz65PAPpuD5+2Tl5cXbyb1dvX2Hk
0t/bRk2BxrjJTWiDBdB2nzx0DmuPxDuLyXPyTd7QjXcEnbt3RS6Kvofos2Wy
Mx7apQ7bJQgOwR7dqHYjN+3UBU/tUESNTLEnBnRgKynQxLNzlpPTZhy1utyG
9rSSQGat70/25rU206YXL8EiPj5J3d1PrdaZNa/WuItiPqMATs+BdUx08osD
c2vyKfCrEXpwQdj+SvGuKY/2jkNjPyBDHs8K5PEJBHdANAkzhtM/B4dGT+xp
QjQH/6B5OrrbFBpfXV++Pbl+C5agg0Mhhx0cDvpsmZ+IFzyys8it1s8//9xq
glc8E8WoE9vhqfHHI/FklNw0J6M1epRcf7Zx0tS3T4WNT025vDKwBTY6dTCh
N1EAN7+zTPFOPAWoyXLfqJytwHkaIx+imvBmuyFnZzIGPLrxPZ1P6VpTCEOB
AKbWc5y/O9BCWuytDSDOsg9pjaL1HsVqSpEpmWVFQv4uAg+wG66wwJNfthyD
tg1O+GHPlIBZgkcxzsnmaWxcU4cXzGg0B8WaluCsSPa8K7iiaQO3iCSYsoUB
/Dwi9NTzYK7SSINf1FGf3CTEK4H76Ab51q+g9EicQbs0K1HDqlnpPVwL1PmI
ddFUEZaJtTrt2tlHrx/61jCylOkslTPZwGxGzzOvDbNsomS6jNUW8sAuqeET
7t13/XcAq0wNvauPJUUI3BDjFgtatbPe8s6m8h5nk5Q2AmlcCGQXJmPiYmyi
PhLHb9nEy0vIXofSOjR3qps8YDAlGeUO3qfIKJ5C4DELjK4V1gqMqyItNJiE
8znTuRMUWjlPYAE0zVvMyqxTffPzvfYLWy0gAE0NkqOw0hDaGst2T7kAAbLr
azFHOy3BnGLM0s5PKs9qJn+zbehm5wycby0X9DBZ2/oigjO0Di42aDaTSsbH
C4A+fjS3yL6sgfLC3HuYm3vPUATWRk7n2BZ7nknMNZQICo5s/fs63Ffi6Vuu
DtOTUL4gVIG3vEQUZbVi8BhLzIEa7KEbUm4ZxDkWKfGUkjAfJLr0AQlAcOGO
44ZnvXebwkR+xH4OXBrxLpuDp5CDZ47puJJ8iiA7Zo0Rpeqsw9nE+uwpOkeK
B1FWP0YYCqE5uvfTJBZCo1W8DBj7SSQz//zHGePcauncf0FfCX7wtMRTV26g
OgJqVvQ9jnTR4plxwFpHNkv8zK8EHxVAy6mCi1QhhWYSuOmZ2OreqcmkQzrD
VGCT2dbv4F/riMubKPfPeNiunpouuPYtTe+ON+B3/WWuk5u87R58nOYDDl/P
k9Lk6GgwrEvlnE+KXhthMOTUz6OXVaU3Tj2wylMu12CMQ5S3BEdumSM2gMOX
kGBvd3dn1ydBb10SMIRfQAONokeEcx2gWMnz9JYR2CbParlFtg5MYEqdcTRU
JtEjSoNAHI9K9JcZIq6VaZCcBKOpZp+4UXvXBUh4Y8tXvJ5arGi9FZlKjLTe
eJR1D358Ys2A9uLDwM+68hC86pa0vAK9dj2Nfzu/+BvmhV6d/+UYs0N/g2D5
+PoM9IDXXvQ+9OX+3sFg75A9rRNSxOTXJtPpvCSwswBGTSp2eLEw5KVbus3D
n569PGseXvLwlxC45jg8pnZwGjmTp21Irnjul5PV1A4W4kn2LbzcECYlmKC6
kutuhTkPYHULBblvURZT9hIApZy3Sad0Jiq90WUZDDZqA8v+HoL4HT5IhVZQ
ZFQkvVVphyMHeIJSW4ixBtI5SszjOgcax+s8QjLSNkknJCEJuANpQJGuodjb
0wtdAT5AwE4ojUYlr0Llt9qxNakyTC/l8s7lylLPZrmcbEhFPRXLOdVwyscn
db7CSkY3jycF201UxNptA/t6117F4MacG68r1jyJOnbF0CcG8pYQ18jnT5NN
UN1O2Npw4yWzCtzCbx7v6Ss60XdlEnRh+/CueNrtboput0td1eWw8Lnvgrt+
Fkvf/RQYkBqqd6z0BiZjFR2e02qjjfXnTCc1q7kKrrf76elT1loL6rsdCmmD
fLatgJrITAMA01xPfs7x3dzkXBa13Zn064iKD8V8yAndsjqLy0P6NHMlb8O2
zp3nEjTlXP0lVIXl1BsIG9NAixkySk5z1KdCp1k8n2R+WTbVSbmEEhjAC5g5
2/QTvT5rMU1Sl0nSWbj1ZsArk9EaAF0O1kq8v9cZJmVNMphrx+tVg7mtC5gJ
r4aQGWnuI+pLyS+C6B2WpWoK3UN1k2Dy4cRcyOcwkdrtQVz4ce34YPSiSVZP
iNdZqZfZuEy+1ZCL5KDZDyjiLXVaW3rDugaF2MCqU0wyVOWC9WpFq6H+NH87
RdX2rlaUor56oaUEtWJVq3F1paPrHkaRVQZ2CouWLlXuWvxqNFMILnHM995s
W7c1WOZQL5frsJUb0NNPryulels8CEpHjx1AE5VG0BhgbzxEickT8A5KofM/
IR3Q3D+BHnJO51Nla5LEnu9la0LgTRfsgK7JbbRQgTi2TSmBPFY5Q+g0ISvP
epXeDhmzqNTX7nTcD6SCIajeBnJCsU+ESd0GM01ksYljLjP5QkbLKBOa/nty
2nRCqrvgipIzNVQ2SwXzFniKVEupJGobfcS6xhyXi7ph0Ycby1vFi6/IHgGc
t0k2Lyb33SbcE7bbZVaCjsS1UW1rIduG5atkLrQn6pYCUlGXu1aGj9oVwWcM
KxzabZRa9H7ZSFf4s+1d8Xu2kxyqmwzklDuqDr1QniUyOjcYhDyhHvWqHES0
ouGIgUM3Gk3ARM5sXLuM57z50qwatwNt71J+BbrAuHasxNWNGNIaxWbwRq6V
cZz49q44avAwWRsyX9XaT8ph25RdU8zkkrO0gQJkRKb3GjdeNS2kju4VARg+
X4TYYsJcTnC5O1mxY6/4jH5VnMRk5FzpkmsgUtusRTchpUKKyzdWy4d+cfQT
TyGGpeUjNBp7fGysi0WtIUk7Klzh5tiEic++AN7pjOHWRK/5jFQMHly1vFlb
b+6KKolw7aWcoIq918RR8coqXuIlbEHZJ5Jny97XiXisqDRXdgPi3fuM+DhH
hEvI1rN2HjVFwQ3C9AfR21xJalpR2kRvzt8j5GY1owaLxYi0vuVNMZ/BpCDl
yblshwslKh2sPeMNhe36mcfcu13T6Owzqv2i6qbgdX+YILUftjOF8hWJIY3b
ygRSTVhv6yJcKPCtmLNWfqi3Jvtg3RljskmWomLSCfgVKQAN5qoUgFydAlgS
jXPRad1ovAKSc27ZmmDpg92yVXOke2j7tWdrpOZ6iamXDRRvDVMns7Jta5lw
hdN8YXrFJF5Q0HDHiWQ/MKiGWCEezuMbVVoTx76MLG0nychbJYhfmIFxXDeS
DYhqtQPq+RWcMpb4rK0f1quSzS7nNVkNmbG1bo2DoD8sXrlFy4DEplemp0W8
gUbV9DAqZ01h46SeKTejjvOZkOtTksf0BImXoudoAEOxWt/CBaXtiq77pZSb
zbXDI2ZfDFyC4NpEIYlzQ02CfRxsg7BqTdOAIwGXiMl424JHQ7txwfjcZHLW
oxKrzSsWs6Etgz9HFvE21FBKfE6N5ELIo4XUAl7ULuELl9ZxDZP6+W1hOUwv
QLC3CLWAd63gNIcFvc0wjWViG+kWX9enL2rGdjJb36duj7oltSvZMDtX2XOC
tSF0GuV72l9S66JnnmverhR4NcVuYNJIUiiDwwKxEOSgM0xqwGylEz2z/L8u
IeWSb5U0YEWBFQ0eebCjyPfENxdVOCWTFndnLMmuQfSAeSmNv87UgWf/v//9
P0WH55PiGkaKGkEglGeznBztWaHmcWaWtg3VCKNvf3ESh6To4bPzjxsGatGs
hVEDh9k16pmQNItlKR0SAgC9fqurFDqXmyc3ScprxFBdBfkOU4A3zA/8iFVw
/E2NAx6zzc2KWUKMVrvWAl0BVRlty3GRIq6jJDIFNHoSyUsLFj6TQk8p2MJt
L2bWOO4xtmSUUGRid4gZzgotkeSJoQUEeudhkprlhrykeZPV1aXd+GM22Hx8
UvEHEWi3eY13LOXwTGEWjlt7WjVGY22MSKP+ghbJ6pAYuHVGLp9WQCdap3+u
4lvQvDpXsp76M6NXVZ+1nd7TheY4mnNeDq41DoQadzIn+tzlCc16wNucwUto
59JEovKxkSct0ubFmJLqCVM/o81rLWl9b2LTEdZDsxRepMFqpYsuVBB8IJ8m
6RxXVMEfEwLH9NeUB7F09IivPozlvKBsmNZA42oNYiKLsqLKvc6RHibFoqm9
yD28wetxOtrPCtoSz4kx7HbKuVqjnemaRfMmS10cYVCul9sXoarPbnU6xVnE
wFY1wIcJMh06lM1WQqdneN8BRfMNGwEBVJJ6cO7sjk1UyknJKVSI/wvUSxA7
b/omh+tp3jLbBjvRxj17GG3TAsyOzGkFA23+5FgBpcGsjyblDJrzt4Epg9mY
T0rePtY0DHGZTrJVcjfIcDfkCFJuhVbrq7/PYSS3bbKRgMwCaLd0fWApxz0R
ej1YUfFsgV3nfFAHe7da4XM6wnipSA28ybaFKoxT3n6KVoilB2uZIHS+bmBI
uSvM+GIEZU0fARon3qZYnnYqwa/RmTGktnLD+1VpdTmvYwpXF1yfXDBjn1/c
7rFGcua6ZtVRq/WGLf7E9Pfx43fQiV4KsYOb4bE7uIo90j6AbVy6UdnaA7R2
NEa1AsIHPJHa/BXtrwEVFzFkCAvCqje4s5TqPOx1MsVdEtOZrjku3zuC0HYu
zi6fI2z7O9s7FPf8/PPPQsri9qb10BPBZ//hIPje333o7/kXtncqF3b6D61v
OvrzTcNv90fzBYSlD/964oE67n3oaeAeRPXT+zAYRrFauA5N/9p6+DPQDCnw
gAfljGg5KijsYqGf5xhPvpQwHTX91GC18H0NrKCfcFhEa7tXHc3c2qtc2D80
F869fkwxU6sBv5/XFAuxF8b9vMhmYpLg8SN04aK1AOTCZ63ZWiT+oz8P4kW1
HxCf/lEvHh4cHezKnSNc0sk/DuS2Ourt7PeO9nd2BtV+zpbBc5XNc4jCj+M4
x33zy+A5/kp4na5B5dWfb5bj9Qh4LpvpLAfbQ4/O+9GOPOoP8Mfu9mG1nyo3
u8+pwmiBo+pVlF7Wz2M+D+L2c7h5sUWNjO7Wy6htEQ/2d6st/hr0o9mO1rnW
9OMTLGgT6J4vwWoVlXsf9iIpB8N4f1mrVbN1ZdZz6KLP0n6+jlSsxOtw2N/b
PxzUGIgAnuvGfo4jXLwOXjw7FktRexAnzbbiUfN10XpA+4f/HnrC/9e3fy1w
6qBfQROo8yLOMdK0jdGZeD6RN1Ykw15+SNIYTGEFqxdfCauqDut9OBjtDauj
VbDq9Rbkr6Kbradd38/b/Iaq8BltUfRb1Ojmz7ng8AJw+8HwdRcOqhekuUC6
+XXWeTOjdDSoA7F4Ad2+K3L7+BL389I5ALXS9Vl4rZSufv9Q7sbDnWWtVmkN
58ZyrLa0n19Ja8SHw0E8OIg/Gy+HlIrGGW4KhdizsZ91bNcaeNmSoM5OTjpl
NOskM4gjdBFQh32V8EeHKDrH4dcSaZ8wpyoxUgniQ12oNkmIJK2NWNo6XWRX
NenIzyZ8aCljqs868IJBirnHiiJluw5qkrzH1Sh8VojOuoxocVZR2kXmtISH
l7vqU3QExHB3LZgsnZx40DE5HqYIX7TsPIg/EwM+mFQdTi/QVTT+hPuohl2U
MYD/vX6/N4TfPwKNsMWgJvo4wHYY1bhm/W0EC4k8oTjkARwzasXxjWu4gw0r
fv8D7ht4MBHFA6gMHhrH8eMAO/Ke1+EufnGxgWkDAYdrs4dYaDdGap8OYT4g
OANHveqfeygeIui+t9PcFfmiVRfUJ0LPAUQ+k0eCXZ+uOzt7lUHD5uS9ec13
EcaqJ6Op7rlJlsY7B4ii8xKU7ybY56wb4uaGxneS4qYS++uD1QuYiPB1xlvz
S48/2Jqam75pVG3LHWHQP3BtiDms6bStyCK7VjTx2oLOtAX1SB2w8OCAeQ/N
lU5JWIbrB+0O1mt3SCSqpjls2wOfiXuDuraWqPoR6T9CJKyaHztl1rZZYuwO
wjE81W6fspZDP4XqGDUwqWKtMrUyrlGXRqnijmytqlmroSKurh6cZjGdA6m8
swdnEnf6qw+0Vd9uUikyPh9sQCnRBZ6jY/4wd+ll+80oR6g2K4sQH6pLHt0F
KsogcA8L662XaFOtRwdOl7YrKhPJ5CVpSBR7Pa0aUT/hDFS0XdsptXZFd7Xr
tFDb1yftOpWBinP/EJUU6ijUdt1ul1kDx95bEJW22NZ8ThaXeBLGWWBTXGrt
5TWtcMFA/d4Bcm3ISJYHwhXq9rJXnyOrvIXDO05ys732Yifc8knrhjtuAxku
NXbV5rg2uXn0S+yJglu7B4uronDX7PLNUfjgoGaH1Ec6JHlxNwHC0A7uBX0N
wnuG05953IktPj1uxL0lI+4cNA9Z5U1tHHpoj9EcozU299G8mvtoZNHGoolF
44kW8TPA3j1YAvfeErA9PrfDNm5Tw4H2lm5Vw3np+QvkrNTU7Fl75F61FXJF
tRRbRzCHgNadLDu85/1GKINgiO0GMXvMrFbQUywHJZKPwTW1zzI4q/HV9Vte
uf9ZBxhfB+uA9HoYPuTVrVPQR6/S+ub6EqxelweIR/6qZLcRiyuQlmTB6grT
vAt8wS68XoZA9XwgQTTm4lbtUjjr99MwZFTtuZK2bpLl9vBbTxNvum3Di2c5
4jOL59alylbFuJL09tSFUoOaSpI7c3eNipLeXAs6LywoDejqYX+9etKvWNbp
VG8sucBlHZ3Swj/6LgWybUJh/4MuaxRVg2W/rKOzW9UAy+/nmjaaVOsjoras
04TEkuj8m6Aco6FeTFkxwpVUnv8PyzGuH7NXVe/od/0Y7x8/z3PJ2lQLIrdY
P/WzFCtbjoEANCy+oWdcP1vD7f5CMs+mxq6vXwrvsQtzpEXQz4tQIXj9HH9O
SqsGr9MV5QaIUbu9Lp58vuzz9cpMl79OSsvitb0Cr69V1vmlyjFR/3ChFBW2
6Pd3+9UW/9/LMajphqFiXsBrf7ta5oZoo9LPy6qaq/bTkCpfp0i5ZtlCfPln
CReitTULtJ72wZtl12nzsf24D0ZwK+G5XUytzmNKrQ6qqdXQH/iKqdWB8QnR
q4BRviiz6m8u/ddIqvYWkqovavJmGEj47TAsb0i+bvuZSUo0+Z6ClzUDF8Rl
+/CpinVuTochTbTB3mHgfNh2MddVNeLQ2Y5L7PHHf4jycWhLDR4Df8h9yg0b
02qa9P2kGuXoqnbWokAm3GJL+beFrC/RwNlJP4WN49Xnd4OHQtI3ZnJJ13st
95dncknxV7PNLxemc3jgENzu1SdBSde6VtuUBPVUD5KG5pryP0Gmb0CaYSHT
V5Xer5Pp+zWzc9t+di6UPUpiVqQMOHMXZUwL696C3LRZNtpVEWgTe2OXHiOz
cA3oP7KzKZjQj8fm9vQp+TXpvQhH2e719e9t5EBmq3B6H5l/G2wx83xZ/o22
4nvptyyO/YD118y+bddn33ZWZt+2975e9m27OaeErPcZKazB52ewDGt+xqj9
7SXDVm/64zZxK8EQJsCYbb96AqzK2GECDDNcBZYx/+XTW13xvYokb2L1MbQ7
ZfRRgdUkD6/DRhrZO7Rzi9bZV063xeW782IuJ9+Ga/jtGHqBet1ZTHb5t5ea
ApaJ5nS65klGr2HhvYxF7ZmBvG+HF303vmvGX34eHA19p2h/XPXFP3ToAkHA
x0eM+I0Qko76xTMt9VGz5n1dliC0YXFC7wSiA9yncjaDL7wM3L7qBYa7VZNV
B/7xe7/GwGa4UwCPa/FG7rrTwviYVn3ethzaM5rBerDl0JtBaO+ZOxtZ4dsS
o+DdNVRx0n548wEG37IDTovzc/VfuIPLnNOv859YxdOnKdjNNtUtzojdFKAy
e6LNdZIYt5+YtvLy9uale0x5B3BXnJtNDRoe/XoSfaxjcIh5pV7YNocDKLtG
Xwc/7kBFXmEvZ5QZNyBO1TTL8Rhc/3xn2v+iVY/d5IusaI/YAI+dZtge11dm
5lWCsSru02icZ+aVmCJPivd8luJWxXh6wOHWMf3Si8kk0Qehq/IO9/PY3b7f
1hx8aOeCtmHbU10Mv3bFW312Np3FSC29XRn00jf9sgPo2ju8jM6R0HxERKGN
+fZFDonVDnyA2bfenmQ+YEZ7DHjQGwA7pv7xwEPeq2ffrUJvMDx+fbygL/BF
BiiGZibQRygA3puEnA1vg3SgU3JqgNn38KA+qrPbvR8bi11v6Efze/JvTQDp
t2l9Q76p/tl68JwVbLncmD347eWS9npD/IMjAYe4r3FGvgz/EH3XbYB7x7tx
1HjkLjS7olODj1iRFiwWT5EjZEoJhBFvrgUu3aTW9oUX1/TaXffCC7h7qV+M
B9eDV0S0+G2XuL0JOSVcF1uAo2HOkXq2MZKTgg7+vX5z+kZItzam2/o/oknW
2wd6AAA=

-->

</rfc>
