<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.17 (Ruby 3.1.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-tls-ctls-07" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.3 -->
  <front>
    <title abbrev="cTLS 1.3">Compact TLS 1.3</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-tls-ctls-07"/>
    <author initials="E." surname="Rescorla" fullname="Eric Rescorla">
      <organization>Mozilla</organization>
      <address>
        <email>ekr@rtfm.com</email>
      </address>
    </author>
    <author initials="R." surname="Barnes" fullname="Richard Barnes">
      <organization>Cisco</organization>
      <address>
        <email>rlb@ipv.sx</email>
      </address>
    </author>
    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization>Arm Limited</organization>
      <address>
        <email>hannes.tschofenig@arm.com</email>
      </address>
    </author>
    <author initials="B." surname="Schwartz" fullname="Benjamin M. Schwartz">
      <organization>Google</organization>
      <address>
        <email>bemasc@google.com</email>
      </address>
    </author>
    <date year="2023" month="January" day="03"/>
    <area>General</area>
    <workgroup>TLS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document specifies a "compact" version of TLS and DTLS. It is logically
isomorphic to ordinary TLS, but saves space by trimming obsolete material,
tighter encoding, a template-based specialization technique, and
alternative cryptographic techniques. cTLS is not directly interoperable with
TLS or DTLS, but it should eventually be possible for a single server port
to offer cTLS alongside TLS or DTLS.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>DISCLAIMER: This is a work-in-progress draft of cTLS and has not yet
seen significant security analysis, so could contain major errors. It
should not be used as a basis for building production systems.</t>
      <t>This document specifies "compact" versions of TLS <xref target="RFC8446"/> and DTLS
<xref target="RFC9147"/>, respectively known as "Stream cTLS" and "Datagram cTLS".  cTLS
provides equivalent security and functionality to TLS and DTLS, but it is
designed to take up minimal bandwidth. The space reduction
is achieved by five basic techniques:</t>
      <ul spacing="normal">
        <li>Omitting unnecessary values that are a holdover from previous versions
of TLS.</li>
        <li>Omitting the fields and handshake messages required for preserving backwards-compatibility
with earlier TLS versions.</li>
        <li>More compact encodings, for example point compression.</li>
        <li>A template-based specialization mechanism that allows pre-populating information
at both endpoints without the need for negotiation.</li>
        <li>Alternative cryptographic techniques, such as semi-static Diffie-Hellman.</li>
      </ul>
      <ul empty="true">
        <li>
          <t>OPEN ISSUE: Semi-static and point compression are never mentioned again.</t>
        </li>
      </ul>
      <t>For the common (EC)DHE handshake with pre-established certificates, Stream cTLS
achieves an overhead of 45 bytes over the minimum required by the
cryptovariables.  For a PSK handshake, the overhead is 21 bytes.  Annotated
handshake transcripts for these cases can be found in <xref target="transcripts"/>.</t>
      <ul empty="true">
        <li>
          <t>TODO: Update these values.</t>
        </li>
      </ul>
      <t>cTLS supports the functionality of TLS and DTLS 1.3, and is forward-compatible
to future versions of TLS and DTLS.  cTLS itself is versioned by
<tt>CTLSTemplate.version</tt> (currently zero).</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" 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>
      <t>Structure definitions listed below override TLS 1.3 definitions; any PDU
not internally defined is taken from TLS 1.3.</t>
      <section anchor="template-based-specialization">
        <name>Template-based Specialization</name>
        <t>A significant transmission overhead in TLS 1.3 is contributed to by two factors:</t>
        <ul spacing="normal">
          <li>the negotiation of algorithm parameters, and extensions,  as well as</li>
          <li>the exchange of certificates.</li>
        </ul>
        <t>TLS 1.3 supports different credential types and modes that
are impacted differently by a compression scheme. For example, TLS supports
certificate-based authentication, raw public key-based authentication as well
as pre-shared key (PSK)-based authentication. PSK-based authentication can be
used with externally configured PSKs or with PSKs established through tickets.</t>
        <t>The basic idea of template-based specialization is that we start with the basic
TLS 1.3 handshake, which is fully general and then remove degrees of freedom,
eliding parts of the handshake which are used to express those degrees of
freedom. For example, if we only support one version of TLS, then it
is not necessary to have version negotiation and the
supported_versions extension can be omitted.  Thus, each specialization
produces a new protocol that preserves the security guarantees of TLS, but has
its own unique handshake.</t>
        <t>By assuming that out-of-band agreements took place already prior to the start of
the cTLS protocol exchange, the amount of data exchanged can be radically reduced.
Because different clients may use different compression templates and because multiple
compression templates may be available for use in different deployment environments,
a client needs to inform the server about the profile it is planning to use. The
profile field in the ClientHello serves this purpose.</t>
        <t>Although the template-based specialization mechanisms described here are general,
we also include specific mechanism for certificate-based exchanges because those are
where the most complexity and size reduction can be obtained. Most of the other exchanges in
TLS 1.3 are highly optimized and do not require compression to be used.</t>
        <t>The compression profile defining the use of algorithms, algorithm parameters, and
extensions is represented by the <tt>CTLSTemplate</tt> structure:</t>
        <artwork><![CDATA[
enum {
  profile(0),
  version(1),
  cipher_suite(2),
  dh_group(3),
  signature_algorithm(4),
  random(5),
  mutual_auth(6),
  handshake_framing(7),
  client_hello_extensions(8),
  server_hello_extensions(9),
  encrypted_extensions(10),
  certificate_request_extensions(11),
  known_certificates(12),
  finished_size(13),
  optional(65535)
} CTLSTemplateElementType;

struct {
  CTLSTemplateElementType type;
  opaque data<0..2^32-1>;
} CTLSTemplateElement;

struct {
  uint16 ctls_version = 0;
  CTLSTemplateElement elements<0..2^32-1>
} CTLSTemplate;
]]></artwork>
        <ul empty="true">
          <li>
            <t>TODO: Reorder enum.</t>
          </li>
        </ul>
        <t>Elements in a <tt>CTLSTemplate</tt> MUST appear sorted by the type field in strictly
ascending order.  The initial elements are defined in the subsections below.
Future elements can be added via an IANA registry (<xref target="template-keys"/>).  When
generating a template, all elements are OPTIONAL to include.  When processing
a template, all elements are mandatory to understand (but see discussion of
<tt>optional</tt> in <xref target="optional"/>).</t>
        <t>For ease of configuration, an equivalent JSON dictionary format is also defined.
It consists of a dictionary whose keys are the name of each element type (converted
from snake_case to camelCase), and whose values are a type-specific representation
of the element intended to maximize legibility.  The cTLS version is represented
by the key "ctlsVersion", whose value is an integer, defaulting to 0 if omitted.</t>
        <ul empty="true">
          <li>
            <t>OPEN ISSUE: Is it really worth converting snake_case to camelCase?  camelCase is slightly more traditional in JSON, and saves one byte, but it seems annoying to implement.</t>
          </li>
        </ul>
        <t>For example, the following specialization describes a protocol with a single fixed
version (TLS 1.3) and a single fixed cipher suite (TLS_AES_128_GCM_SHA256). On the
wire, ClientHello.cipher_suites, ServerHello.cipher_suites, and the
supported_versions extensions in the ClientHello and ServerHello would be omitted.</t>
        <sourcecode type="JSON"><![CDATA[
{
  "ctlsVersion": 0,
  "profile": "0001020304050607",
  "version": 772,
  "cipherSuite": "TLS_AES_128_GCM_SHA256"
}
]]></sourcecode>
        <section anchor="initial-template-elements">
          <name>Initial template elements</name>
          <ul empty="true">
            <li>
              <t>TODO: Reorder section.</t>
            </li>
          </ul>
          <section anchor="profile">
            <name><tt>profile</tt></name>
            <t>This element identifies the profile being defined.  Its binary value is:</t>
            <artwork><![CDATA[
opaque ProfileID<1..2^8-1>
]]></artwork>
            <t>This encodes the profile ID, if one is specified.  IDs whose
decoded length is 4 bytes or less are reserved (see <xref target="reserved-profiles"/>). When a
reserved value is used (including the default value), other keys MUST NOT appear
in the template, and a client MUST NOT accept the template unless it recognizes
the ID.</t>
            <t>In JSON, the profile ID is represented as a hexadecimal-encoded string.</t>
          </section>
          <section anchor="version">
            <name><tt>version</tt></name>
            <t>Value: a single <tt>ProtocolVersion</tt> (<xref section="4.1.2" sectionFormat="comma" target="RFC8446"/>) that both parties agree to use. For TLS 1.3, the <tt>ProtocolVersion</tt> is 0x0304.</t>
            <t>When this element is included, the <tt>supported_versions</tt> extension
is omitted from <tt>ClientHello.extensions</tt>.</t>
            <t>In JSON, the version is represented as an integer (772 = 0x0304 for TLS 1.3).</t>
          </section>
          <section anchor="ciphersuite">
            <name><tt>cipher_suite</tt></name>
            <t>Value: a single <tt>CipherSuite</tt> (<xref section="4.1.2" sectionFormat="comma" target="RFC8446"/>) that both parties agree to use.</t>
            <t>When this element is included, the <tt>ClientHello.cipher_suites</tt> and
<tt>ServerHello.cipher_suite</tt> fields are omitted.</t>
            <t>In JSON, the cipher suite is represented using the "TLS_AEAD_HASH" syntax
defined in <xref section="8.4" sectionFormat="comma" target="RFC8446"/>.</t>
          </section>
          <section anchor="dhgroup">
            <name><tt>dh_group</tt></name>
            <t>Value: a single <tt>NamedGroup</tt> (<xref section="4.2.7" sectionFormat="comma" target="RFC8446"/>) to use for key establishment.</t>
            <t>This is equivalent to a literal "supported_groups" extension
consisting solely of this group.</t>
            <t>Static vectors (see <xref target="static-vectors"/>):</t>
            <ul spacing="normal">
              <li>
                <tt>KeyShareClientHello.client_shares</tt></li>
              <li>
                <tt>KeyShareEntry.key_exchange</tt>, if the <tt>NamedGroup</tt> uses fixed-size key shares.</li>
            </ul>
            <t>In JSON, the group is listed by the code point name in <xref section="4.2.7" sectionFormat="comma" target="RFC8446"/>
(e.g., "x25519").</t>
          </section>
          <section anchor="signaturealgorithm">
            <name><tt>signature_algorithm</tt></name>
            <t>Value: a single <tt>SignatureScheme</tt> (<xref section="4.2.3" sectionFormat="comma" target="RFC8446"/>) to use for authentication.</t>
            <t>This is equivalent to a placing a literal "signature_algorithms" extension
consisting solely of this group in every extensions field where it is
permitted to appear.  When this element is included,
<tt>CertificateVerify.algorithm</tt> is omitted.</t>
            <t>Static vectors (see <xref target="static-vectors"/>):
* <tt>CertificateVerify.signature</tt>, if the <tt>SignatureScheme</tt> output is
  self-delimiting.</t>
            <t>In JSON, the
signature algorithm is listed by the code point name in <xref section="4.2.3" sectionFormat="comma" target="RFC8446"/>. (e.g., ecdsa_secp256r1_sha256).</t>
          </section>
          <section anchor="random">
            <name><tt>random</tt></name>
            <t>Value: a single <tt>uint8</tt>.</t>
            <t>The <tt>ClientHello.Random</tt> and <tt>ServerHello.Random</tt> values
are truncated to the given length.  Where a 32-byte <tt>Random</tt> is
required, the Random is padded to the right with 0s and the
anti-downgrade mechanism in <xref section="4.1.3" sectionFormat="comma" target="RFC8446"/> is disabled.
IMPORTANT: Using short Random values can lead to potential
attacks. The Random length MUST be less than or equal to 32 bytes.</t>
            <ul empty="true">
              <li>
                <t>OPEN ISSUE: Karthik Bhargavan suggested the idea of hashing
ephemeral public keys and to use the result (truncated to 32 bytes)
as random values. Such a change would require a security analysis.</t>
              </li>
            </ul>
            <t>In JSON, the length is represented as an integer.</t>
          </section>
          <section anchor="mutualauth">
            <name><tt>mutual_auth</tt></name>
            <t>Value: a single <tt>uint8</tt>, with 1 representing "true" and 0 representing
"false".  All other values are forbidden.</t>
            <t>If set to true, this element indicates that the client must authenticate with
a certificate by sending Certificate and a CertificateVerify message.
If the CertificateRequest message does not add information not already
conveyed in the template, the server SHOULD omit it.</t>
            <t>In JSON, this value is represented as <tt>true</tt> or <tt>false</tt>.</t>
          </section>
          <section anchor="clienthelloextensions-serverhelloextensions-encryptedextensions-and-certificaterequestextensions">
            <name><tt>client_hello_extensions</tt>, <tt>server_hello_extensions</tt>, <tt>encrypted_extensions</tt>, and <tt>certificate_request_extensions</tt></name>
            <t>Value: a single <tt>CTLSExtensionTemplate</tt> struct:</t>
            <artwork><![CDATA[
struct {
  Extension predefined_extensions<0..2^16-1>;
  ExtensionType expected_extensions<0..2^16-1>;
  uint8 allow_additional;
} CTLSExtensionTemplate;
]]></artwork>
            <t>The <tt>predefined_extensions</tt> field indicates extensions that should be treated
as if they were included in the corresponding message.  This allows these
extensions to be omitted entirely.</t>
            <t>The <tt>expected_extensions</tt> field indicates extensions that must be included
in the corresponding message, at the beginning of its <tt>extensions</tt> field.
The types of these extensions are omitted when serializing the <tt>extensions</tt>
field of the corresponding message.</t>
            <t>The <tt>allow_additional</tt> field MUST be 0 (false) or 1 (true), indicating whether
additional extensions are allowed here.</t>
            <t><tt>predefined_extensions</tt> and <tt>expected_extensions</tt> MUST be in strictly ascending
order by <tt>ExtensionType</tt>, and a single <tt>ExtensionType</tt> MUST NOT appear in both
lists.  If the <tt>version</tt>, <tt>dh_group</tt>, or <tt>signature_algorithm</tt> element appears
in the template, the corresponding <tt>ExtensionType</tt> MUST NOT appear here.  The
<tt>pre_shared_key</tt> <tt>ExtensionType</tt> MUST NOT appear in either list.</t>
            <ul empty="true">
              <li>
                <t>OPEN ISSUE: Are there other extensions that would benefit from special
treatment, as opposed to hex values.</t>
              </li>
            </ul>
            <t>Static vectors (see <xref target="static-vectors"/>):</t>
            <ul spacing="normal">
              <li>
                <tt>Extension.extension_data</tt> for any extension in <tt>expected_extensions</tt> whose value is self-delimiting (e.g., fixed length).  This applies only to the corresponding message.</li>
              <li>The <tt>extensions</tt> field of the corresponding message, if <tt>allow_additional</tt> is false.</li>
            </ul>
            <t>In JSON, this value is represented as a dictionary with three keys:</t>
            <ul spacing="normal">
              <li>
                <tt>predefinedExtensions</tt>: a dictionary mapping <tt>ExtensionType</tt> names (<xref section="4.2" sectionFormat="comma" target="RFC8446"/>) to values encoded as hexadecimal strings.</li>
              <li>
                <tt>expectedExtensions</tt>: an array of <tt>ExtensionType</tt> names.</li>
              <li>
                <tt>allowAdditional</tt>: <tt>true</tt> or <tt>false</tt>.</li>
            </ul>
            <t>If <tt>predefinedExtensions</tt> or <tt>expectedExtensions</tt> is empty, it MAY be omitted.</t>
            <ul empty="true">
              <li>
                <t>OPEN ISSUE: Should we have a <tt>certificate_entry_extensions</tt> element?</t>
              </li>
            </ul>
          </section>
          <section anchor="finishedsize">
            <name><tt>finished_size</tt></name>
            <t>Value: <tt>uint8</tt>, indicating that the Finished value is to be truncated to the given
length.</t>
            <ul empty="true">
              <li>
                <t>OPEN ISSUE: How short should we allow this to be? TLS 1.3 uses
the native hash and TLS 1.2 used 12 bytes. More analysis is needed
to know the minimum safe Finished size. See <xref section="E.1" sectionFormat="comma" target="RFC8446"/>
for more on this, as well as
https://mailarchive.ietf.org/arch/msg/tls/TugB5ddJu3nYg7chcyeIyUqWSbA.
The minimum safe size may vary depending on whether the template was
learned via a trusted channel.</t>
              </li>
            </ul>
            <t>In JSON, this length is represented as an integer.</t>
          </section>
          <section anchor="handshakeframing">
            <name><tt>handshake_framing</tt></name>
            <t>Value: <tt>uint8</tt>, with 0 indicating "false" and 1 indicating "true".
If true, handshake messages MUST be conveyed inside a <tt>Handshake</tt>
(<xref section="4" sectionFormat="comma" target="RFC8446"/>) struct on reliable, ordered transports, or a
<tt>DTLSHandshake</tt> (<xref section="5.2" sectionFormat="comma" target="RFC9147"/>) struct otherwise,
and MAY be broken into multiple records as in TLS and DTLS.  If false,
each handshake message is conveyed in a <tt>CTLSHandshake</tt> or
<tt>CTLSDatagramHandshake</tt> struct (<xref target="ctlshandshake"/>), which MUST be the payload
of a single record.</t>
            <t>In JSON, this value is represented as <tt>true</tt> or <tt>false</tt>.</t>
          </section>
          <section anchor="optional">
            <name><tt>optional</tt></name>
            <t>Value: a <tt>CTLSTemplate</tt> containing elements that are not required to be understood
by the client.  Server operators MUST NOT place an element in this section unless
the server is able to determine whether the client is using it from the client data
it receives. A key MUST NOT appear in both the main template and the optional
section.</t>
            <t>In JSON, this value is represented in the same way as the <tt>CTLSTemplate</tt> itself.</t>
          </section>
          <section anchor="known-certs">
            <name><tt>known_certificates</tt></name>
            <t>Value: a <tt>CertificateMap</tt> struct:</t>
            <artwork><![CDATA[
struct {
  opaque id<1..2^8-1>;
  opaque cert_data<1..2^16-1>;
} CertificateMapEntry;

struct {
  CertificateMapEntry entries<2..2^24-1>;
} CertificateMap;
]]></artwork>
            <t>Entries in the certificate map must appear in strictly ascending lexicographic
order by ID.</t>
            <t>In JSON, <tt>CertificateMap</tt> is represented as a dictionary from <tt>id</tt> to <tt>cert_data</tt>,
which are both represented as hexademical strings:</t>
            <sourcecode type="JSON"><![CDATA[
{
  "00": "3082...",
  "01": "3082...",
}
]]></sourcecode>
            <t>Certificates are a major contributor to the size of a TLS handshake.  In order
to avoid this overhead when the parties to a handshake have already exchanged
certificates, a compression profile can specify a dictionary of "known
certificates" that effectively acts as a compression dictionary on certificates.</t>
            <t>When compressing a Certificate message, the sender examines the cert_data field
of each CertificateEntry.  If the cert_data matches a value in the known
certificates object, then the sender replaces the cert_data with the
corresponding key.  Decompression works the opposite way, replacing keys with
values.</t>
            <t>Note that in this scheme, there is no signaling on the wire for whether a given
cert_data value is compressed or uncompressed.  Known certificates objects
SHOULD be constructed in such a way as to avoid a uncompressed object being
mistaken for compressed one and erroneously decompressed.  For X.509, it is
sufficient for the first byte of the compressed value (key) to have a value
other than 0x30, since every X.509 certificate starts with this byte.</t>
            <t>This element can be used to compress both client and server certificates.
However, in most deployments where client certificates are used, it would be
inefficient to encode all client certificates into a single profile.  Instead,
deployments can define a unique profile for each client, distinguished by
the profile ID.  Note that the profile ID is sent in cleartext, so this
strategy has significant privacy implications.</t>
          </section>
        </section>
        <section anchor="static-vectors">
          <name>Static vector compression</name>
          <t>Some cTLS template elements imply that certain vectors (as defined in <xref section="3.4" sectionFormat="comma" target="RFC8446"/>) have a fixed number of elements during the handshake.  These
template elements note these "static vectors" in their definition.  When encoding
a "static vector", its length prefix is omitted.</t>
          <t>In addition to the static vectors implied by various template elements,
<tt>Extension.extension_data</tt> is always static in cTLS if the extension is any
type listed in <xref section="4.2" sectionFormat="of" target="RFC8446"/> except <tt>padding</tt>.  cTLS implementations
MUST be able to parse any of these extensions that the other party is permitted to
send, but no other support is required.</t>
          <t>For example, suppose that the cTLS template is:</t>
          <sourcecode type="JSON"><![CDATA[
{
  "ctlsVersion": 0,
  "version": 772,
  "dhGroup": "x25519",
  "clientHelloExtensions": {
    "expectedExtensions": ["key_share"],
    "allowAdditional": false
  }
}
]]></sourcecode>
          <t>Then, the following structure:</t>
          <artwork><![CDATA[
   28                 // length(extensions)
   33 26              // extension_type = KeyShare
     0024             // length(client_shares)
       001d           // KeyShareEntry.group
       0020           // length(KeyShareEntry.key_exchange)
         a690...af948 // KeyShareEntry.key_exchange
]]></artwork>
          <t>is compressed down to:</t>
          <artwork><![CDATA[
   a690...af948 // KeyShareEntry.key_exchange
]]></artwork>
          <t>according to the following rationale:</t>
          <ul spacing="normal">
            <li>The length of <tt>extensions</tt> is omitted because <tt>allowAdditional</tt> is false, so
the number of items in <tt>extensions</tt> (i.e., 1) is known in advance.</li>
            <li>
              <tt>extension_type</tt> is omitted because it is specified by <tt>expected_extensions</tt>.</li>
            <li>The length of <tt>client_shares</tt> is omitted because the use of <tt>dhGroup</tt> implies
that there can only be one <tt>KeyShareEntry</tt>.</li>
            <li>
              <tt>KeyShareEntry.group</tt> is omitted because it is specified by <tt>dhGroup</tt>.</li>
            <li>The length of the <tt>key_exchange</tt> is omitted because the "x25519" key share
has a fixed size (32 bytes).</li>
          </ul>
        </section>
      </section>
      <section anchor="record-layer">
        <name>Record Layer</name>
        <t>The only cTLS records that are sent in plaintext are handshake records
(ClientHello and ServerHello/HRR) and alerts. cTLS alerts are the same
as TLS/DTLS alerts and use the same content types.  For handshake records,
we set the <tt>content_type</tt> field to a fixed cTLS-specific value to
distinguish cTLS plaintext records from encrypted records, TLS/DTLS
records, and other protocols using the same 5-tuple.</t>
        <artwork><![CDATA[
      struct {
          ContentType content_type = ctls_handshake;
          opaque profile_id<0..2^8-1>;
          opaque fragment<0..2^16-1>;
      } CTLSClientPlaintext;
]]></artwork>
        <t>The <tt>profile_id</tt> field MUST identify the profile that is in use. A
zero-length ID corresponds to the cTLS default protocol.
The server's reply does not include the <tt>profile_id</tt>, because the server
must be using the same profile indicated by the client.</t>
        <artwork><![CDATA[
      struct {
          ContentType content_type = ctls_handshake;
          opaque fragment<0..2^16-1>;
      } CTLSServerPlaintext;
]]></artwork>
        <t>Encrypted records use DTLS 1.3 <xref target="RFC9147"/> record framing, comprising a configuration octet
followed by optional connection ID, sequence number, and length fields. The
encryption process and additional data are also as described in DTLS.</t>
        <artwork><![CDATA[
      0 1 2 3 4 5 6 7
      +-+-+-+-+-+-+-+-+
      |0|0|1|C|S|L|E E|
      +-+-+-+-+-+-+-+-+
      | Connection ID |   Legend:
      | (if any,      |
      /  length as    /   C   - Connection ID (CID) present
      |  negotiated)  |   S   - Sequence number length
      +-+-+-+-+-+-+-+-+   L   - Length present
      | 8 or 16 bit   |   E   - Epoch
      |Sequence Number|
      | (if present)  |
      +-+-+-+-+-+-+-+-+
      | 16 bit Length |
      | (if present)  |
      +-+-+-+-+-+-+-+-+

      struct {
          opaque unified_hdr[variable];
          opaque encrypted_record[length];
      } CTLSCiphertext;
]]></artwork>
        <t>The presence and size of the connection ID field is negotiated as in DTLS.</t>
        <t>As with DTLS, the length field MAY be omitted by clearing the L bit, which means
that the record consumes the entire rest of the data in the lower level
transport.  In this case it is not possible to have multiple DTLSCiphertext
format records without length fields in the same datagram.  In stream-oriented
transports (e.g., TCP), the length field MUST be present. For use over other
transports length information may be inferred from the underlying layer.</t>
        <t>Normal DTLS does not provide a mechanism for suppressing the sequence number
field entirely. When a reliable, ordered transport (e.g., TCP) is in use, the
S bit in the configuration octet MUST be cleared and the sequence number
MUST be omitted. When an unreliable transport is in use, the S bit
has its usual meaning and the sequence number MUST be included.</t>
      </section>
      <section anchor="ctlshandshake">
        <name>cTLS Handshake Layer</name>
        <t>The cTLS handshake is modeled in three layers:</t>
        <ol spacing="normal" type="1"><li>The Transport layer</li>
          <li>The Transcript layer</li>
          <li>The Logical layer</li>
        </ol>
        <section anchor="the-transport-layer">
          <name>The Transport layer</name>
          <t>When <tt>template.handshake_framing</tt> is false, the cTLS transport layer
uses a custom handshake
framing that saves space by relying on the record layer for message lengths.
(This saves 3 bytes per message compared to TLS, or 9 bytes compared to DTLS.)
This compact framing is defined by the <tt>CTLSHandshake</tt> and
<tt>CTLSDatagramHandshake</tt> structs.</t>
          <t>Any handshake type registered in the IANA TLS HandshakeType Registry can be
conveyed in a <tt>CTLS[Datagram]Handshake</tt>, but not all messages are actually
allowed on a given connection.  This definition shows the messages types
supported in <tt>CTLSHandshake</tt> as of TLS 1.3 and DTLS 1.3, but any future
message types are also permitted.</t>
          <artwork><![CDATA[
      struct {
          HandshakeType msg_type;    /* handshake type */
          select (CTLSHandshake.msg_type) {
              case client_hello:          ClientHello;
              case server_hello:          ServerHello;
              case hello_retry_request:   HelloRetryRequest;  /* New */
              case end_of_early_data:     EndOfEarlyData;
              case encrypted_extensions:  EncryptedExtensions;
              case certificate_request:   CertificateRequest;
              case certificate:           Certificate;
              case certificate_verify:    CertificateVerify;
              case finished:              Finished;
              case new_session_ticket:    NewSessionTicket;
              case key_update:            KeyUpdate;
              case request_connection_id: RequestConnectionId;
              case new_connection_id:     NewConnectionId;
          };
      } CTLSHandshake;

      struct {
          HandshakeType msg_type;    /* handshake type */
          uint16 message_seq;        /* DTLS-required field */
          select (CTLSDatagramHandshake.msg_type) {
            ... /* same as CTLSHandshake */
          };
      } CTLSDatagramHandshake;
]]></artwork>
          <t>Each <tt>CTLSHandshake</tt> or <tt>CTLSDatagramHandshake</tt> MUST be conveyed as a single
<tt>CTLSClientPlaintext.fragment</tt>, <tt>CTLSServerPlaintext.fragment</tt>, or
<tt>CTLSCiphertext.encrypted_record</tt>, and is therefore limited to a maximum
length of <tt>2^16-1</tt> or less.  When operating over UDP, large
<tt>CTLSDatagramHandshake</tt> messages will also require the use of IP
fragmentation, which is sometimes undesirable.  Operators can avoid these
concerns by setting <tt>template.handshakeFraming = true</tt>.</t>
          <t>On unreliable transports, the DTLS 1.3 ACK system is used.</t>
        </section>
        <section anchor="the-transcript-layer">
          <name>The Transcript layer</name>
          <t>TLS and DTLS start the handshake with an empty transcript.  cTLS is different:
it starts the transcript with a "virtual message" whose HandshakeType is
<tt>ctls_template</tt> (<xref target="template-handshaketype"/>) containing the <tt>CTLSTemplate</tt> used
for this connection.  This message is included in the transcript even though it
is not exchanged during connection setup, in order to ensure that both parties
are using the same template.  Subsequent messages are appended to the transcript
as usual.</t>
          <t>When computing the handshake transcript, all handshake messages are represented
in TLS <tt>Handshake</tt> messages, as in DTLS 1.3 (<xref section="5.2" sectionFormat="comma" target="RFC9147"/>),
regardless of <tt>template.handshake_framing</tt>.</t>
          <t>To ensure that all parties agree about what protocol is in use, and whether
records are subject to loss, the Cryptographic Label Prefix used for the
handshake SHALL be "Sctls " (for "Stream cTLS") if <tt>Handshake</tt> or <tt>CTLSHandshake</tt>
transport was used, and "Dctls " (for "Datagram cTLS") otherwise.  (This is
similar to the prefix substitution in <xref section="5.9" sectionFormat="of" target="RFC9147"/>).</t>
        </section>
        <section anchor="the-logical-layer">
          <name>The Logical layer</name>
          <t>The logical handshake layer consists of handshake messages that are reconstructed
following the instructions in the template.  At this layer, predefined extensions
are reintroduced, truncated Random values are extended, and all information is
prepared to enable the cryptographic handshake and any import or export of
key material and configuration.</t>
          <t>There is no obligation to reconstruct logical handshake messages in any specific
format, and client and server do not need to agree on the precise representation
of these messages, so long as they agree on their logical contents.</t>
        </section>
      </section>
    </section>
    <section anchor="handshake-messages">
      <name>Handshake Messages</name>
      <t>In general, we retain the basic structure of each individual
TLS or DTLS handshake message. However, the following handshake
messages have been modified for space reduction and cleaned
up to remove pre-TLS 1.3 baggage.</t>
      <section anchor="clienthello">
        <name>ClientHello</name>
        <t>The cTLS ClientHello is defined as follows.</t>
        <artwork><![CDATA[
      opaque Random[RandomLength];      // variable length

      struct {
          Random random;
          CipherSuite cipher_suites<1..2^16-1>;
          Extension extensions<1..2^16-1>;
      } ClientHello;
]]></artwork>
      </section>
      <section anchor="serverhello">
        <name>ServerHello</name>
        <t>We redefine ServerHello in the following way.</t>
        <artwork><![CDATA[
      struct {
          Random random;
          CipherSuite cipher_suite;
          Extension extensions<1..2^16-1>;
      } ServerHello;
]]></artwork>
      </section>
      <section anchor="helloretryrequest">
        <name>HelloRetryRequest</name>
        <t>In cTLS, the HelloRetryRequest message is a true handshake message
instead of a specialization of ServerHello.  The HelloRetryRequest has
the following format.</t>
        <artwork><![CDATA[
      struct {
          CipherSuite cipher_suite;
          Extension extensions<2..2^16-1>;
      } HelloRetryRequest;
]]></artwork>
        <t>The HelloRetryRequest is the same as the ServerHello above
but without the unnecessary sentinel Random value.</t>
        <ul empty="true">
          <li>
            <t>OPEN ISSUE: Should we define a <tt>hello_retry_request_extensions</tt> template
  element?  Or is this too far off the happy path to be worth optimizing?</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>This section provides some example specializations.</t>
      <t>For this example we use TLS 1.3 only with AES_GCM,
x25519, ALPN h2, short random values, and everything
else is ordinary TLS 1.3.</t>
      <sourcecode type="JSON"><![CDATA[
{
   "ctlsVersion": 0,
   "profile": "0504030201",
   "version" : 772,
   "random": 16,
   "cipherSuite" : "TLS_AES_128_GCM_SHA256",
   "dhGroup": "x25519",
   "clientHelloExtensions": {
      "predefinedExtensions": {
          "application_layer_protocol_negotiation" : "030016832",
      },
      "allowAdditional": true
    }
}
]]></sourcecode>
      <t>Version 772 corresponds to the hex representation 0x0304 (i.e. 1.3).</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>WARNING: This document is effectively brand new and has seen no
analysis. The idea here is that cTLS is isomorphic to TLS 1.3, and
therefore should provide equivalent security guarantees.</t>
      <t>The use of key ids is a new feature introduced in this document, which
requires some analysis, especially as it looks like a potential source
of identity misbinding. This is, however, entirely separable
from the rest of the specification.</t>
      <t>Once the handshake has completed, this specification is intended to
provide a fully secured connection even if the client initially learned the
template through an untrusted channel.  However, this security relies on
the use of a cryptographically strong Finished message.  If the Finished
message has not yet been received, or the transcript hash has been
truncated by use of a small <tt>finished_size</tt> template element value, an
attacker could be using a forged template to impersonate the other party.
This should not impact any ordinary use of TLS, including Early Data (which
is secured by the previously completed handshake).</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="adding-a-contenttype">
        <name>Adding a ContentType</name>
        <t>This document requests that a code point be allocated from the "TLS ContentType
registry.  This value must be in the range 0-31 (inclusive).  The row to be
added in the registry has the following form:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Description</th>
              <th align="left">DTLS-OK</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD</td>
              <td align="left">ctls</td>
              <td align="left">Y</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">TBD</td>
              <td align="left">ctls_handshake</td>
              <td align="left">Y</td>
              <td align="left">RFCXXXX</td>
            </tr>
          </tbody>
        </table>
        <ul empty="true">
          <li>
            <t>RFC EDITOR: Please replace the value TBD with the value assigned by IANA, and
the value XXXX to the RFC number assigned for this document.</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>OPEN ISSUE: Should we require standards action for all profile IDs that would fit in 2 octets.</t>
          </li>
        </ul>
      </section>
      <section anchor="template-keys">
        <name>Template Keys</name>
        <t>This document requests that IANA open a new registry entitled "cTLS Template Keys", on the Transport Layer Security (TLS) Parameters page, with a "Specification Required" registration policy and the following initial contents:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Value</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">profile</td>
              <td align="left">0</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">version</td>
              <td align="left">1</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">cipher_suite</td>
              <td align="left">2</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">dh_group</td>
              <td align="left">3</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">signature_algorithm</td>
              <td align="left">4</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">random</td>
              <td align="left">5</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">mutual_auth</td>
              <td align="left">6</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">handshake_framing</td>
              <td align="left">7</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">client_hello_extensions</td>
              <td align="left">8</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">server_hello_extensions</td>
              <td align="left">9</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">encrypted_extensions</td>
              <td align="left">10</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">certificate_request_extensions</td>
              <td align="left">11</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">known_certificates</td>
              <td align="left">12</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">finished_size</td>
              <td align="left">13</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">optional</td>
              <td align="left">65535</td>
              <td align="left">(This document)</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="template-handshaketype">
        <name>Adding a cTLS Template message type</name>
        <t>IANA is requested to add the following entry to the TLS HandshakeType registry.</t>
        <ul spacing="normal">
          <li>Value: TBD</li>
          <li>Description: ctls_template</li>
          <li>DTLS-OK: ??? Not clear what to put here.</li>
          <li>Reference: (This document)</li>
          <li>Comment: Virtual message used in cTLS.</li>
        </ul>
      </section>
      <section anchor="activating-the-helloretryrequest-messagetype">
        <name>Activating the HelloRetryRequest MessageType</name>
        <t>This document requests that IANA change the name of entry 6 in the TLS
HandshakeType Registry from "hello_retry_request_RESERVED" to
"hello_retry_request", and set its Reference field to this document.</t>
      </section>
      <section anchor="reserved-profiles">
        <name>Reserved profiles</name>
        <t>This document requests that IANA open a new registry entitled "Well-known
cTLS Profile IDs", on the Transport Layer Security (TLS) Parameters page,
with the following columns:</t>
        <ul spacing="normal">
          <li>ID value: A sequence of 1-4 octets.</li>
          <li>Template: A JSON object.</li>
          <li>Note: An explanation or reference.</li>
        </ul>
        <t>The ID values of length 1 are subject to a "Standards Action" registry
policy. Values of length 2 are subject to an "RFC Required" policy. Values
of length 3 and 4 are subject to a "First Come First Served" policy. Values
longer than 4 octets are not subject to registration and MUST NOT appear
in this registry.</t>
        <t>The initial registry contents are:</t>
        <table>
          <thead>
            <tr>
              <th align="left">ID value</th>
              <th align="left">Template</th>
              <th align="left">Note</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>[0x00]</tt></td>
              <td align="left">
                <tt>{"version": 772}</tt></td>
              <td align="left">cTLS 1.3-only</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <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">
            <organization/>
          </author>
          <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="RFC8446">
        <front>
          <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
          <author fullname="E. Rescorla" initials="E." surname="Rescorla">
            <organization/>
          </author>
          <date month="August" year="2018"/>
          <abstract>
            <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
            <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8446"/>
        <seriesInfo name="DOI" value="10.17487/RFC8446"/>
      </reference>
      <reference anchor="RFC9147">
        <front>
          <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
          <author fullname="E. Rescorla" initials="E." surname="Rescorla">
            <organization/>
          </author>
          <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
            <organization/>
          </author>
          <author fullname="N. Modadugu" initials="N." surname="Modadugu">
            <organization/>
          </author>
          <date month="April" year="2022"/>
          <abstract>
            <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
            <t>The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability.  Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
            <t>This document obsoletes RFC 6347.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9147"/>
        <seriesInfo name="DOI" value="10.17487/RFC9147"/>
      </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">
            <organization/>
          </author>
          <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>
    <section anchor="transcripts">
      <name>Example Exchange</name>
      <t>The follow exchange illustrates a complete cTLS-based exchange supporting
mutual authentication using certificates. The digital signatures use ECDSA with SHA256
and NIST P256r1. The ephemeral Diffie-Hellman uses the FX25519 curve and
the exchange negotiates TLS-AES-128-CCM8-SHA256.
The certificates are exchanged using certificate identifiers.</t>
      <t>The resulting byte counts are as follows:</t>
      <artwork><![CDATA[
                     ECDHE
              ------------------
              TLS  CTLS  Cryptovariables
              ---  ----  ---------------
ClientHello   132   71       64
ServerHello    90   65       64
ServerFlight  478   79       72
ClientFlight  458   78       72
========================================
Total        1158  293      272
]]></artwork>
      <t>The following compression profile was used in this example:</t>
      <sourcecode type="JSON"><![CDATA[
{
  "ctlsVersion": 0,
  "profile": "abcdef1234",
  "version": 772,
  "cipherSuite": "TLS_AES_128_CCM_8_SHA256",
  "dhGroup": "x25519",
  "signatureAlgorithm": "ecdsa_secp256r1_sha256",
  "finishedSize": 8,
  "clientHelloExtensions": {
    "predefinedExtensions": {
      "server_name": "000e00000b6578616d706c652e636f6d"
    },
    "expectedExtensions": ["key_share"],
    "allowAdditional": false
  },
  "serverHelloExtensions": {
    "expectedExtensions": ["key_share"],
    "allowAdditional": false
  },
  "encryptedExtensions": {
    "allowAdditional": false
  },
  "mutualAuth": true,
  "knownCertificates": {
    "61": "3082...",
    "62": "3082...",
    "63": "...",
    "64": "...",
    ...
  }
}
]]></sourcecode>
      <t>ClientHello: 71 bytes = Profile ID(5) + Random(32) + DH(32) + Overhead(2)</t>
      <artwork><![CDATA[
01                    // CTLSHandshake.msg_type = ClientHello
05 abcdef1234         // ClientHello.profile_id
5856a1...43168c130    // ClientHello.random
a690...af948          // KeyShareEntry.key_exchange
]]></artwork>
      <t>ServerHello: 65 bytes = Random(32) + DH(32) + Overhead(1)</t>
      <artwork><![CDATA[
02                     // CTLSHandshake.msg_type = ServerHello
cff4c0...684c859ca8    // ServerHello.random
9fbc...0f49            // KeyShareEntry.key_exchange
]]></artwork>
      <t>Server Flight: 79 = SIG(64) + MAC(8) + CERTID(1) + Overhead(6)</t>
      <artwork><![CDATA[
08                 // EncryptedExtensions

// The CertificateRequest message is omitted because "mutualAuth" and
// "signatureAlgorithm" are specified in the template.

0b                 // Certificate
  03               //   CertificateList
    01             //     CertData.length
      61           //       CertData = 'a'

0f                 // CertificateVerify
  3045...10ce      //   signature

14                 // Finished
  bfc9d66715bb2b04 //   VerifyData
]]></artwork>
      <t>Client Flight: 78 bytes = SIG(64) + MAC(8) + CERTID(1) + Overhead(5)</t>
      <artwork><![CDATA[
0b                 // Certificate
  03               //   CertificateList
    01             //     CertData.length
      62           //       CertData = 'b'


0f                 // CertificateVerify
  3045...f60e //   signature

14                 // Finished
  35e9c34eec2c5dc1 //   VerifyData
]]></artwork>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>We would like to thank Karthikeyan Bhargavan, Owen Friel, Sean Turner, Martin Thomson, and Chris Wood.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA8V9a3fbRpLo9/4VvcyHkbIkTVIPy/JkMoqkxNr4dSUlmTk5
uSIINEmMSYADgJIZ2/vbb736ARCUndmdczVnYgnoZ3V1vavQ6/VUlVYLc6rP
8+Uqiit9+/JGD/sHKppMCnN/qmP7IMnjLFpCy6SIplUvNdW0Vy3KXoz/GTxV
cVSZWV5sTnVZJUqlq+JUV8W6rEaDwbPBSEWFiU71DyYzRbRQD3nxblbk69Up
zfgL/JlmM/0DPlLvzAbeJ6f6KqtMkZmqd4FzKlVWUZbcRYs8g3VsTKlW6an+
tcrjri7zoirMtITfNkv85TelonU1z4tTpXtKw0+alaf6sq+vTRnnxSKih7yn
yyKN68/zYhZl6e9RlebZqX6V/54u5I1ZRuniVJt3xV+Larrsx/lS1aa47uvv
Ilh2GUxwncbzqEjCF/UZzlOYPBy/WEz+mq7u++X7+ugv+vq2jOf51GTpLJjh
RZTByM139UnOiqV+mS7TyiThVHPq2q9c179GBe8rnPi7vr6J5w9RUf0eTPud
yf4RLdNMv2q8rs/8Q57PFiacdAL/lvFfZ/SCgZjlxRLa3xs4Mn39/floOHx2
CqiUTf0L+On1ejqalFUB+KrU7TwtNSDnemmySpcrE6fTFAAR6U7MON3R96Yo
YRk6nxK2ARLpC/ilr68qDb0X+SyNo8Vio9IyX+bFag7YUOWwhSTNomKDnbp6
sobho3sYuoRRjZ5sAL/T5RLxNp+U+cJURsMyTZFGiy7cq9kcftcmi3MYZtaF
FVVmuVpAi94kKk3Ci40WAiR4G8+z9J9r08UVqmiByE/b1nGxWVX5rIh4abZh
2ef7CXvI8konaWHgOm7gvKBrvoKbNlkY/ZBWc4XN8oK2zVtJYTfzfL1ItLkH
yK1x/3AoepWXZYrdAOiw5BKWDn+UpgAgwsuiUgiZ6RT+ornxNs7KNDE6mKLP
p7RMkwROXX2FN7nIk3WMG1Xq4urm/OXZ1avLa7j+eH4pnhfShF6a9VYF7NSU
JVMaPLTYnto84p1uTKVKYzJY3iyD844jPHsTr4u02kDLaLEpU6QFuY5pj3Ge
VRFg6TL6ByzRFEVelHj8SmCAg8Lm13gsES4GTggWhTCYrNMFHqBeuR0AjSnh
LMv+bvTbQr7SYt+HD/8BuH1yeHj86ZNDRcVPnw0Pn3761NWwfRgJjx4O5V2W
P2S4qs4NkLhoSeDoUNfORVRFgBbyrK/pXwUrvYcTKbX55zq9jxamDp1ET9cZ
bQSQD57AgYbXwuFHWioYBCAMQIE2VfQOILSCU83SZbQAEGXJQ5pUc6BIcyO3
ojD2lPFM43kK2JXgXZkiHiNUQ/yF+9zTb4AgVQjgNZChGA4erxysGt7rah5V
GlgHnMg8XyQ5IuG0yJdwGOY+zdelAy+QDAZwPxyygoXBeSySUvAnS8o57mOJ
88xghgJhBKums4ZREdOx5ySK3wE1S4DD4UlW6SRFYME0eJ+0iYpFCotBwNkl
4MyvclisnL27+4CJOLp5H8H9xysGF5QaIZpDT+x49hnqsASgAUEtlwKTxSJ/
KHHBvVW+WkM/XLQjlQB/raHZJMe1ZglNWdLSczhcBEtmZNMZ8O0qpU60kC+g
O3Cz1vEccbI0y7QHfLmC9xfpFGDde2EWi2UEY6m/6DdvL1/rq5ubny5P9U3Q
FA9jCwx00JnBM8bbBE/wNs7g3sJY38NKcdnQfglN9y7P9y9eXAYnSseC8DAw
x2SRlnPoHZuiIvpQ4aKD+6MENxEvNKLV3EQJYtDhEWArtKaHNCPh+3rpMQUp
/9woBs59BPQe6CWQE/09kcy3Nz/6ZXVpCDcBXIrRkCeA9mcZ0J0IubHfBrC1
rIyLdFUx+YHuJewaUKKE/2ZIpab5GsAH1OzDh6D1p08E8ds3F29O9U+rBMaV
znyX4C3R0XK9QjJe8t2oEYIGf0S5j3iRZlKI18HdBqDrQBOm62oNh9akcZ7D
CoOqSrOY4jDSkqCoxufw8lbQvi+vxnoPKFUBCAC073fgY/t95CDneXbPSMFX
+cJM4Vzob6TCRoPUiCwEbnrn1U83t50u/6tfv6Hfry//z09X15cX+PvNi7OX
L90vtsXNizc/vYT3Sn7zPc/fvHp1+fqCO8NT3Xj06uzvHQZU583b26s3r89e
dvB8qjmSUMscELsBZHCAxJ8BVSvmNkBk4Qgnhs70u/O3engIRysCEDAJ4RjD
p4efPqmHucl4rjwDAPGfcJRA2FcroEo4BhAHwJVVWkULwHq8pXNkIXNTGIAl
3AIg0XhsiYehhguDy5kYoCuEr4Xl6YAFYcvnMPlGv734SSHTpK1kJDxQG0PI
gqwiY0ItI+AZfqVv6yTupkbilDqr8XPC7WXKpMHfoMwtCiZCvg6gW1fMovBm
PgBWAvEFBk/chUmdo3CIodECFBWgFsBFIuCdcAxFySA17yuTESZ3NcLtAUgZ
/CvDmPdIgmeGRJKAsKAYIEtylytJUUTCY4+BZCDiAsesNivD2LvME+FuqBjp
lPgF7MF1Q2EMjrRGHkE+N0vTJzIjvKSrwyutglUJiFEHwtlj2j1IFtGDXq2B
PMZ4YVob2Y2riPkL0CWkeni/9oC27bd26iPZax+OqZYi2Yp553uHM3B+03S2
xvGhf4nyIzWhP0JCXs1BNZzNNYz6zlQseVl5AhA1wjN5nIGmIk08gKhSgZrC
E1V2FHeEAel+AK43J+K3xsXOWHmlA8QdAkdYAl4C4oO8aoj4TeGXJF92lVmk
LDRGiA24OJgoYFY0Mh49gQVQ17ync4Z2eRkOqWTIxrGnU9wIkQA5ffjDNDSd
Li8zrZRoCF6+ghnnoMy4DuEVkf0pGdgkd46+uwtieVGOkpZJgNDfztdwawzw
1QbkFQvOpJNl5gHlaFDZ8wUfh4hchvmRk1Jna7iaQFtM6faCUikoACpFgAI5
W5Ms4oEKOPEdXJmyXC9Z9IPRQdjp5dMeiqogSQAkkRLDVHn+TgOugMAaLUAm
SDawjhS5bc7LIAQB4JPEgZjhFm2JADP2aAm8mHQU4LeRe5lY8BRRwqolC8YA
KPWdiaM1HrGnECBJ4qqW0UY33gS332I3E5CJjLJcL6oUMEK1N8UhYRnRPejc
kdXqsB+QUT9NYlaLfENMymT3aZFnBKauimRtJCwi2ETClLMinTCaWIkSYDRN
YQ5SHRC8WUYHkeOMpCQo24RkcmaRRp/THCg25trhAo6wLkAbxXMFmXTO1x+a
f6GcHPJV5Hx02+QKd9UDnnyJ+4kX68RYzS0O5GwE1TZBtUdcuiPgGwujI28u
DMuMecmntzDvrdJVpr8H+pG7QBNUTPEGvcI+QilAbEfbgZsrzRx9wm3M09kc
cCpfVekSRk1o/CSnOy5iah13cqvdCuEMX9ozYR4vShNuLGSVyCB3sU3l2SYe
fGHoTmeVE5V1TdAbw/USCQQ49H/DjzIZyNcfQGWRtewN9rvwl5CdvSH9Facr
AMpduU4rszeiR8n8jqyIewf0J0oPEY5759a6d0hvgJYADd07oj+WazR33CGb
2jumJ46G3E0LtGbN9p7ylISZd3NEzTu/y70Tno4uwPbbZ/QWlD9UEIB6Bq+G
vLEAre7wvIDT1Vrxhknxvwsljb0h7xsPCtniHeLU3pB3j9iAkvze8dHRwdG+
+qRDqF8uiPbdggjyHC2peAIE8h2NSFh5TsNGSGaRvv150O+P/u/BqDf8y/P2
4etDr0E6HB5rNBFbFqK/0YPn7bNqw/+WwTSNWZ4zujg159qAwE9GtvUSMFsG
KkkGbiIdKQMiI5fE1ix24k49RYL1p2hFA/EnBs2ZzHs4CbE4JJwpyXJ2sXQf
nejLBK1cT0oTs1xNAnVffc+Kkusltz9KEuh2n0aohl6dvT6D2zMDSRw49B5o
d5bSgewF+t0+LOEXYOiKqRhp/N6o2CWxv7Ysq4ww4SZCJ0PgRUNRAIZQjw4B
ijycfM4SA6idcIpohNd7ZA41yKzKeC0y+lSNLRKOWT+1f+LiWYc3EVMWK/mJ
XArbD4xV/3Xz5jWMzKopzM1WDTITItEWcPfVFRJZuDQly1hR2OeByDJCjjUv
1AOAamE7ElJkm3z6ezGql4gUirSWMkNigFo37juGfotz+GOf1QQeWkxUbJ3C
UXqOiTgSyAKQEHU7I+pMWcJi3zJ6TyRcL+Dc2cQkiBYHpqUGWVWCuCiSd/B2
/czNOt1waQSujGabmaKLUItQWmCWPEAR0kpvTVPNVYlMHAQjlFxAqQZBWQCE
vXcA51vtf8e5ywWawGGAJdrEKhSFGBkQNfCEGZhsU0fhFc0i3jgNshquP8s3
suIUuSkC0GKSlYXJkJGjQYxWV5cHrBCA0qcT4kj0d8btafoeYGpBvSeMdp9W
V28kPEgTD6KWd2eXN3fD0cndD+ev7m5enI2OjuGaviE6oB6AD3dD8aYf8jA0
SBEHaX31JUJ42SZBYcdgXDg+NHAHojrzXDwAhUS6hkCneoCspCN8GP7uDAaD
4WA0OBgcDo4Gx4OnHWpw7zo8fTqiJ7z+G1w+dmuHTUd9EhL+1VfoFWBaaumP
Iz3bFF7oKZkRoOdYFjgWC7y7WqRqkwU+lEgnBjHDkg2tr4BeTNi3Y6+KFUWE
3b3lnlcXfx4iMzpBXsQL5/nQstuY5OqC1DLEZMR+cQXQdBclX0yVGOyXwG3P
ZhWplofW3FjAw5LJiahEQGWRwn74YP/uyVTMC4iOR8o1dpeeVMo9JvhWnpPL
z42AjLGASdTRWsmEOSrBqYAp0D0QTcC3jmOzqmpNgUHQHoh2xPksA8JWkg51
dQEnd2WvfR1qTZmR/C9zuN0ALHQ09BjYCXHmbOZQwNoLlfoZN3Xq7+r4rVz0
n51J0Xtd8NaxBH7YH/ZHAEpWFclUjuo6eQ9RV3SaC1IbZw8leXZrAtjD4D1e
ElgeHUxVQ8vS8t9EBti+1mN/r1Fdl9vKRrRxSEP89R83gdrOLgiijhHoPbix
KIbRcknLsRTPgTakRW3wPfd3/X8I2y+D1k4SOib9Y7yLjo6d86cI6V8NZjWS
3gDcurT3R+jZ2cXdi7ObFx1dboC5v1eB4EcW2zoQTvqHZJVnoFplpQ2gr4Fx
JhT9sBOeo/5TgifBjY4N2b+zkQljtO7UQJiCHpEGwYJsVx2PeLSYshOgnchS
xEXzBfoeSXKB4agt2Y7JfXNvyMBq6RM7dXryFFYJxPRrPf7RbG7Qdlg7Pdao
yKZYjsNWlxlIvX3Y051Ve8dETwkBQvis0RVC7LhHKjWCgcdrHi2tmjz8Ytze
iAspsU44kgjbD08grvZMf9bv6s770dHR8FnHX5IWbbPtaG9ssxsy3z5yvgeN
821YWHcfLlqyWBnwx7y9uD9y1AgTdMRtQmGDVSQ2crB7eGUKIVO4DmIfVsHY
eaPV+NxrtEA/0+mm7wGoPen7I+gGeLQ9qoNBgEhbp5Gvq9WaNoMK/WLaS8wC
Q2SY04TopNx4gSnkjyGXahx3Xwt2mTgpozsQclYgJBVDvB8kSVpcY/tFG3qh
jn0yFrNOjVBecx9i3zUKaV+wAkMOCNDZM4RcYi2gs/QeDpHFFD5SUnNAKUdx
RY/tGAA36xflO8cvyADIyq0MWKAywIL3oHTSbQTo3Uvyh2wG6oEJjG+77uQQ
wYajg96JBk1UAl+9fXN9e/b69lT/RPS6nKM5XBYiWhrq2wv0H8FyVnnFDhkV
VVUUvys5gEE6iGhGcs7EsFAGTCxDCQ12iuJqDnAQJ25Tc/oRmNw8fae/A4I0
i+6hW7mezQxhCILB+irmUTlH5fsv2qwQEfHSer+MAIhJAUHPlCi97dXOyS5i
H0YBFl+EG+7rG/LQa3FZsRZgbYPRdrBMk3Z6CXWnJOGwMzCo7UbRLh/+0I+H
Z9WBHRkOZhnU3qjOFHR9gzEtZ4uFyKuByg0EcpICgiFdvJrCfogW4mjdBu3J
EjaesShCd5RF2eW6rEIiK6FSUWiew2tdihkooDAiE2/RHBtX0sc1kWbmW1yz
oc820Ulu2CsD9ySM3OBn7JZQpHZvvGnJS+WBCV781Ug3gTDXTxJ97lYxaJzk
GKE1RrweE6zHXv5rt3vCGY53GD3xVZvFc8zqw/hxi2erjAkS16Vt0bQdW20t
MDa6tuhSErksmIKNisNjsl0GrcnWad5juNVj7QmHOermDs5LLBnWCrq1zudO
WTSoq7asZ+wsjhY9A05LmCqhaROkzoaiRODMmI9t9AMxYeGpFjnivMDIsZzR
1aKi5hg7iRiikJDQYs++Aatu4FUoQBywDKUFMp9fOV2siV+femx9XS23cmJm
KXuMgD6ik2+8NWefFsVudDaqlSacPRDzKTICLwjZgqwYHw6peBtinGuHnUCh
ee4WBJZJDPQe3aB9vExDItOoZAuEcEBYDVIw5cdorpvmEF8VzLsLa+g2tZ6K
XUxgw9bOhq3YjALUbFxD/XG3buZqvG0aB3BwVOYUCj0YwiRkzinj3UDP6RJp
aROTHXHmUcttm8P2kXxuZQQ3Mp0S7FjFSO6Am46/ZFcmJQ6D+9pi6mdsPy68
X66O79bElsF5VayxixVS0dXFrVIcTr5ChyYx77l57wOz/pBa5fbiLQF36J0Z
s9KQBTI7bqwdWRp24obka8VSNnqyKLDvCMlqtUjJZLvYWOlux+35Wt82Lp3+
/KUjYb3lymEcBl6yL+ZvdXcAR3ug6QEFLAalv2OXfomn9Y5L2G8b/qF0X+5U
5kSVE4HFWrBgUYFhSwxaJcLJnVJ9IRgTWUSknLXOT10JVGceUqetnB1uavt+
qVnL9KRpLlfVpova3quzv9eNyI3gTmZWD4bDSqI6xzeo29fwTwjAt1biqHk0
vTjgZMeAlDox7nvp4xGAeVm7MqNEmWmu/EX+IBpD6fZAEGXkoiG/dTFnaHyA
AdibRDGyKMkTDeUmIza/Dq2CwBHBVsqmUH1jkCf+BYdGF28tyLSMpsHGEBgg
yRM12MKyy/7w0ycYBm89uVhy1rq7YeTaX/S8qlbl6ZMnmHYRFfEc1tzH7J1+
Xsye4IMny3L2pFqUT27Xs++OkuS/1gfZ32dP43m8MVebn/75y83krI8G+eYy
yfqCESb3eE8Ss7Lu0syyu7p1+IHWA1pYkVmnJ6cIoWOFklAWW3f7j6ghW178
FjxiBTREJ9Ez6AiHtRekmrAkT2pFS/S45bmBmE65EID/L2zrsWonEkgiRH7N
MZZsQXHEXfY2I/Ji/CPF9REjjdQYQ2r9sJb2YNKAH/aIaY8dGE/hIS1NV+H+
5BJPihzjMwEkuQsgIos9Rs9GpY2xDKJ4AQYEpq4i3+kWJCQW06kq4n0PFpsX
HO5rMxaCV7JW2A66otzYsA0bgmfBTI6DaLPIo0SRv1ekFl77/4Li49zXgULS
iCOQVBLEEOcpd2kKQQBOYqNu2Gme585ty9oVQJWNMpoydYjxO7lEYtOyQIvl
LYkfTDwtKlACkTNjhFeF/vEKDXOZqd1D0XrJQUTJAiKqBO9QjFDsvTFAJ4B6
nZF5dYcUyJQL82rcHRfDjgtGUd5x9wVnY+Mn0HD2EKH42hY+xNHk7sy2w2TG
+sNX9LSHT8tPtcP07V5Fq7o+GaqT4gdME+8ADKJhcFwSuvitqImfdH10Mmk3
om22G6DOVYBA9ecRDjU6bB2KFEqlLrmpU/gCiwTIKWLRcGe0rQZojEeLbUaH
Vwrq/rktIH1GtmIfVZqMEfnGDjbjrvJxroQvjUFYFlpihKSVhUSxD9zTgwG6
kw8GJwCePjufB8P6I/YpA3iCddvADM74cnHiQYwnci8iIkjrfBQpELuMaTAm
OET3eZowxroQ9Ae2bxvn0SIjvKeJLAFJXKkLCVX1XJSoNQYPzZTsOd7UQQwL
7RBK14bpMOUx06nLFoviquQDCscPR8qawetkr3etyY8QmrqcWM7EJqOAq/fI
YMUB7g6chXtlI2yCQdi549RF32MZVfGcgjOEIDBkt7eq88k/YJMS0hwsBXAK
iWVzKTa6W9V1DKBmsIwLEwIHEw9LoVqgn6Ukqmy6MrL04uQp5VS21znl10QB
aSaPQlc0RYq45ojEhQhFOAOGhJDEZilzJNKpX7mjjHaNcFkwajfzf8MWfqSs
wBYIlUrMgSyWMO1h2spJW46yWuyOamPLMBwzoZagD3MyB90i3yhjWo+plJnJ
1yUlgNRWiF7zv/WPBs+64i0q11NYKjEayWwChCnQVIQuBacSujkYEHsA/H0X
ry7gUbmwNbgvg/cHgy5KAsAx2WdFs9aIIwV0lxYpALY4Zb8RPCIxeTYi366E
SZdwSIpYYoZbv0WgRuDkqKlw9K8Pqi7FZyZDxE0ihRMSjKwdQcHVcqDC3ABS
Hzmtp2UMkuOcLCSkhOgYiNZR0lXhUnCTrAPSuVMIvYvKpvi82G62i04WFIXX
rI1MNqoeuQFz+GuwHdRRiuASo8hfgfZHCbmUFIXZ2yC8byijN0z6WRXpfRRv
KNhLHJ8lc3pdM5LUqNuHrxqmEqVu8qWE0G0FF9HYG140whHlF2d5oXSswKf/
H1uuu4M+Se6CjWwhydbLCQpyUz9Jsi6s0THkLbdkft1eU5a7dL1OWbMGSSaZ
SYsgC8t6WW2GqYoa3TpdMqGK+gSQgoXWfavA5ax1JUh7CM1QdAbs2cQsR8y2
3Vp4Vz1ijyKrM1Cb0o6MyED5gBIQ6e1UqNABeqExXvypBP7AooLQDTKnga9i
+NEYvYyo6rlUQxslyLijrOpgZWPg2Ritn21aDcgOk5m+IIPfkC8zcHQrZDwc
pwgUnhvaHJzUJxQ3oxSpSRlcljp22gi0x+PytsPukjmFRaBAJBEKHI3nHcHe
pAONPlANhs62uQfe/drB6Auym3Z+63LDhm0JWpHGBC8/sdhFFvJsKwizHuGP
Y41OdPPnyRNB0D1/BPvY9uBAj4632nr0Ijz5RtvQEVqqHgxGhzuGr0Wd7Ct5
PxgMk3rzeiwKWbF949Ggdezd8StuIq2j42cDkFWj6bPDk+2Jwk4M0zr3Rwc5
IJ6H5R8dLopjKmYxszfdnxQHYEcLQxbRW+/5RZOjqVsDrWvFZr5sWR6djRYp
PSyUzGSONqZYM0FM0n7cvbRv+l093MfOXOsADQjJfQQMXUyj4bm3roRTjlzM
Jfk52uze/e091iOS2gYP8mHGct3GQhxL2iRf6ILFdzKLo6UUOGw9uIlmH7fg
2Bdvyc6+vQ1Sk2vBU7t2YsmEj5uiBJjSMTNSjPZccAFn7l6ThUW/jDagF5FT
jPZJNMxajpwVxDJ+oGxoo3vPT72CJB3U3iNxy09eXF9LCPYClfi+LTeCf7iI
frQUoFsUXj25CN9niYudIGsCKoA22t+m6m8tiNLCKJIAoSldBOnYb0GCloSC
w3Q+4p9lVWAOgcgkmYMOCBZOpC47Z7mb3G1CuSeU5s2cSAJOyyAmkTZ21KvW
wF8kqlsoTmBwsD/nvBtyd4c7AzJK+TkOGM+DTmLtELHuLk3YK26NIY1m0yKa
IedtuM7xh93kfNxvLUAaTnI7R825KgHdm5p4yWoXkRKKzz1TWCegJ7cBhE+v
85XOQ4VnYaOgLTTZn8zy/J/IxoFqjI3LsLmBVWN93dp94t7K+rwbx+NyIsVZ
7uPE2Aj47zy2z54HX7et87hsoiZdJVsRQoelaqSFFoN7l7lWKlaEWo6PzoEY
V4o5D8PBGgmxYSaSHkbRlxggguoc8w6+B3K6HNDL2aRyh8SAElP4PBIM72Mn
hZq966B6NGstSKmi4AQGeqhH+kAf6iN9rJ/K0//sNf4nzz8O4H/Dj+cfbz6+
/HipLz9+rj0ep98o/K31SzMDcfLUtdgD2Rik0678Lc+faLt/2AP/rc/h/73G
iHvnVxf7WoxsbkyX3W2Sffpb31DfmzqcZYpdm8DFUreXTqmozXJCwQ/HegKc
i2e5pOaXqzy2g350U76mKT/W9i0j7vt974akTCRr+ePj7L5ycnvWGfHdu3lS
/GqLvPzWcst81BPfhV8Zir81SB9FmTepHi80Nj4/2FlBwlOVeJsyOEdx0wgG
n4lp48Im/dduS8N3izePVHJLqF4iJK2rZWmiDP0KoqTI/UZD0nopRjaOEcKY
RJevTPdMbHd4vRGX7g2GP4gPi82qZHqhxDGWbpDKuoJj1sTjPFIXNbgpSQK0
NMnWMqrRhZoHIRFXE89dUvGfXl6knEPn3Ws22uH2/O1+G/REgxSs4nQQkgfJ
eUNhPcFg1mMZBPRJFj48MkVhczpIqkQL5oIS3BYoWZFdscDQAKK2jhNJQS80
Z9fS01GntEZb5kW1Cy0RTi6mS1KGHvM1hrDwLJbjn2/oxrlYri3a7r2hiF2S
ld62LNvOFY/gdaFXyy4tWFF9FZpWoVBgRQPHusSIXERaYjntEwahURyQxjIt
iQTOD8myrf7wVd0JKfnyNR8BLgkruCysywqjSugAUYkfcjjxrdsAvVGj4DFV
bJLnB/z8JRchlIdk8GobhY31Y2s26G/7vAMdzFsZGqNQCgXwZ5BZABPdGErG
kPjDerFDxKDAkC2EgcbjEATxBDP+l321R8ZVHuVAstxWxjekSlLiJyW6BYM8
k3bhO6Jx+2yqtZXV7EJTb64LSw0EzmXKD3rU8Yz2xbNsExwvCViciE23Q1Ce
8rNrOENi2bXN2JZCNy1+8F/t5L/52a0FiWq5+YgCElZirseobEwgFmWRkHzP
GWw8lrcKUp0nptFuPFJ4fBYpqd9NELm6XVRfolb9C9eIxjIu9KXs2UklIytY
OfPYZ+XZOuiW5Yyk2eck03zdPIKvnwQ9S7huGCVQW3zfjrBfmwV/iM2Egcyn
/l2gdz5v6xYGOQfdAvW0tRsHRRcGg50kyBl7U4drfCoh4M9ps6/NQ32HbhwQ
CO/y6R3WGNyQKZXXcJklb6aX+BDRqXUFbSHYp9hTHnt7X2v3lihtnHo7iP1z
vQOghb0/O+k9RdGfNrpxbH1rZxs3dlp/ZyOoWvtk5uGuZNfBHdeTot5wHjf8
9JYetvZFE8uaiuvVZvzRbLjkXmsnG/Du7y6okZjbTI+9BH+1e72NrrLeXV0/
1YXPF15J/HfcTCnzIbQBQPvP5/YV9ERa0vNVNkki2Xmxt4j0zgve7/dxdBL0
gIDVtlkfvwGMrSmc2ouer+2wJb2Le2zFfpENjb1wzHIa9o6+VcgxSrpF/w7f
23ApL//2m4rG2NVmJOPjFEMAF1zdme1UVFtivVSBsZPNAGObbW7dSByBRNwd
ZdqfLt52gbMXM7OTdTr+8pBioCEyAZtcFJhLr94quyep8+FKqpX50lQpqhQo
BJcp1SqG9bxxwVDITm34BTrNAM5AKrCkCqbkcH3XFkHoexENvqGoPQztetMu
WJYsIDm7xtn5j1LY1ybR9xtyWCi2qVqlTC4YVnP2SZGJjGNog7qezlMVVAk8
xagrcVJTzKSfTmpVdO7TomJZlyDfkRDu+rVNSzUmu1DloqXCOjJucXij0IsZ
BLO1BFohDBS76jm+ryF5BMF/zVSUYANYX1pL/S5fis6XShNPaaDywumuV+RJ
5wAlcoGX60Isf2E2uWIHes3m5nACODZW4kFdoGpIWKuVK8FSXy5ak0mpCANj
1tWWLzfowmVzWqJDuZaDL9sicZXjlnvUDRR6wsZHgju7CmTTqEgoNRFv9SPa
AMY41KGHa62n4nMFtweuxicVUgKliyvecPqKCxItqMoRBYoACBegw/NtOq9V
DH4ZTcxCv2XvM8VVSOBHUPCWa7ACHe3cIObqjt7DRrVi1/uUEtBCloMgW6/j
PESlxFRwjezasPWK2fs+QhawZU8SrFUJZBTon8UOcZ9jWacqrdaVZFZ49/RR
/5l1T7NddD8gHQ3Njvw28shDgfWosJhRCz45Bwseg4vsUd6Zh4tN5UUa1IcJ
bsRZJYHVOGE3yJUL3OCK50ilaDul9rqY+npeLbakjomFN+JXaPzANHG4BFab
MxlT4XmzurTfL42SUQwI1bVEJzr/NsVvQ7gi+9SwZofgfC0XfZVPFuksshEO
AdBaDsABGbU2mNx6dsTsxHvbDgKSontUTBuZLl0oUZFh23FaBiQgrAZVmuDu
l3iF0H5B1H9TGyYt3GrFAUABMYHh4pWMQzEdtsIhpjGAJhIJBnClVOeWd1Ww
0C9xnyZA78JPBGzDpa9dgFPdf+yNBw6CZMWbYHn+ZZ6w85KMVfUC8QJQEwHu
qfWKT4jqqWLRWUsGJ9Fsxol4cJsCtS0wy4ROxMAeEJWyyrKulIrZltH4V/7n
pZhsRWh9oq3B15rEd4vNch04+TqUwYMaKbXShWUtZNi39/mrQRLqdtNPdeXV
FlMKdVNgXARnjvIKa0EJMvjTe4g2n1XZ//AO/6Vd1XRrt6st1ZlwPHZm7q33
oUxC2SVmG5dVyoFxHP3bqBcGz8JaCVyLbXsaLERbByXTic879P5VoI1agLZt
WQicC9uLTksvJElofYgdIAfcG4UWn/A7AeFXGTg3H1h6yAQeyQVzgYbjFtNI
LR/McigsnCmpYaALFLxkSsPCst4YRmJLKa9WG5BjMJ6T0iy4Sp1URIXzwMwy
ACQFX5US6GmTJ9z3MVAJcZ9lqCNC6b45gBGi0uSBNRtLnLgCO8rnWOnsh/NX
XcXBFV199vLtaz0fdSW1rFabQWqNY6hqRUUgzIIr5oUfnJGi6bVY+NaYsHqx
tqPB4eBgMBoMO/zOBoxpFzGmO7wYaD485gdh6Ta9u3YbN24POPtcxBktczv5
MHhPbSi3lMM+70hCubMS6V1QoZoWCdscDI9PDkY8P94H+0tL1BpSAnr7yVWg
EzgiXNoCBjBBt865bcksilhyBbNQOOdSGuc5JX8VEnmofjm7fn31+gf5xo37
DgDiUxCwP8HjoMLYkXzhhr5sk+XKlebgwqNYOcQKNxy8Klpk/atF4YcblLcM
SHKj9SS1fRnG19yWvHfR4lHmShP5Sg8udGq4DI4XEF0QvN2laPq2OIxcNf9l
HiO3jZJT0Bu4yPN3WEsH5T9foQW6rYvYoMzEkSCwzGVaTlKK5u/brwd19dxK
J9bZBdvCMsX4nQrnbgs9lla+s3LjG3QX1TU8PAuu4VxxdRsfjxW7mvJBMU/l
3XRcMJ4ga5JQtSVlWMJfbUIWV0GE9jY1EhUkFxhqK9+Te6yZLqlDsYwpHJ8l
mjsoR1sF5pioLnLTnMCiUPJ0Kae+aoTkatg3zvYffISJpTzJFkvIg9NQ/ik7
FntgS+W1iMnGL6pcos7QSAHeCjVm4oloLWV7SF+SChlriTgBVEeTggcelQ2F
iw5kgAOsw8jevrAF/w0o/hADhwdbYizrJJnDF1UkO7xGbVLvMapb8HtflP1I
EX3oQPDI4xdTD3IqNSkHSD5nFNaMqTg+Aqj5uSlhpFYxDGtPTTiJmYHtLkCH
5OVgQFtt2Fp0OIzN1+/ga0MVhAa9g6FUlSzhtPdFNCowgRk5sOJyT7aPdYrN
RdCoC0qnSn3UlJSnP+oLw8iC9+Mj24vf/Ai/XRsyjsG9/Kg+nn6DP6fyr/z4
v8Ln0BrW9t0FhoOQ7i8/H/Xf3W+gqf8NfvD3RmsfUrWzA8g78Ke+vLi6fXN9
qt8uDFv5OWsTd8twxFHdVyb4UVTKB7Uw6Q6O3pFpeU9zCAfCOcSB7bo5a5xF
gkekL2uQpYrNEZltmAhRnQg0A7l0jVohiyl7+Ufs1S/rn25BV0f5OCISSucr
CjVAduFwgQg4Os07xLpqQ3a6Vm32Lm/2yDv+ivV29/VbV3weLjGmpVkD6U2N
NF+Lx6Fjp+fHqxzki40LFPBYaet6Wx2bMBTLDurdPxaFGUEctspLVcfV7Z8A
mU+32yJe2gPaOf/A/7pXO5J9wmtbD3Rn/+Hj/UMFpbX/6PH+thTMzvkPHu/f
Ujum3v/w8f4idu/e/9Hj/YPCZu39jx/vv2WPbfZ/+nj/HXW4fKeTx/vvKNbl
Oz17vH+bO7m2/uHg0f6PV/3C/sNH+2+ndjfgNxw92r8mUrSd3/Dg0f4uQLX9
B84fP7Wwq3+NjdcpXhhHoT98tcNBoxSRUkkqkiKCOdWLqxMvqq9i2cZ2hIrj
8pjiIanwwJvgj4D1nuqa40h9bTnxqf72228x0Y/juthRgJlU+D0eKlb1tSd+
p004wMvzfIm/nuqf6y4s9ghIThhzmTPUiiLnbdk2YYit8/PSEEFOih9SGoqt
/U+gOrZyCobb7wjnIamp02a4uL68ubz++fKig0J/Wwv5GhymEmCQmmcNLoug
ycMpxUIKedsq3/9jLvsLrKwnqdSIFW89v/+X2a1yAo1HP1DP18uMaypdXbAk
c6rPfBgewH3YO3TyxNfuImAr+tgDJx3jK8wohcdo+8JPCIlVDvO8BYiinNqJ
yFkiLu5h0zGFYoGTfs5iNh5YSCkWBvp8JcJxRlvjZLqD4piXKup9le/LEVSH
LSv5npKdz1ER5l/J+LY9FroCbHKzBZqrLhIMWRNsqLxLWyV3oh7u/pMlQUQd
hzFW5sFJSO6xsEW65mhWSPco7df/HYo6LaLM9sNTpK7jXwfvB4Pfxjjg+EM9
t/HTGMVxsWX0yND2kT8qjB9mDWx78K/cciCjwdcweauMo/7LfekCtBfKPbYV
EuizzZTLU/++k03ppCR4EgOa37VjnbOWBU4aUZLO8MuLXnjh/InL84ubMxZW
2Z5GFXleX8GRvaWiv9zbl4Otf06Vy16TQv43MrtpuKb3xqkPbt0uRpyyonpn
lze94eikd37+6qTHE3PWy1YauvfIb+3Mf1ehsLYhrkhLX8rF7P0Yv4MmvnXn
eLHFPBpBTfIDAHlx2XjV2/ppNECMoDAeLa5m9/3V7ZF4uK1BVegw0iACoAzx
1Aoix4cqtInDzzOUcY6Pmu+/p8+baH34FIWwp1aSejqS8d37I3p/4t8/rhX4
H3WbV172GA5xoNEzkVhGMJBUPQkwnanxdl0R6xJ3djqxaG+XW/nM10CiSZyY
6XB0cPgvfAcEcPDuJLQm78pedlfnzIr92KK9SDb3sJLeDQh60PbkS5KgP2OQ
7oj0jJKDfAjFDPBncnz09OR4eJw8HRzHx0cjc3xwPD1OOmxf7v7vZVgzLDw2
/rsyuWkesx0j6mf5XGemkGdAIMXWTk9J9Ahr8vgBjxslfPjhqO3hAT4MHxzW
H8BvPh2dqgD5Yz/Fi80h5d8E4s/e0b7+T3Fi7R2M8I+LF/LLGynzszfa53zr
gVOSw58nT3R7JDJMFPqpB0fa35la76BUu08uVEcnR8fREPZ0eDA8PomHB4OW
9qzXqloaeDj25/LBAwp3iqTNQugzEBlaiIy2wPE5kITu6Xg6PYxx4ccnh/HJ
0bM4OpHuoedV9vhsOomh6WB6+Kwx15dtUjMdPkUKDcu4+mHv+BA39ersfO8E
fzm/vL4FjBjWdnpsd9patKAlnFopeI50+JGC3y0J2eHFIVYOo7RRP5YmXS54
M6xHqcGk9Tj8YuCKDA62W9TirF+COEhXqoHy1I5bosG7X8sTPB5ut/RtAeZ/
iv4E65t+Zn0c4w1jHgwOj+DAhwNrSaMxHUyUGh62DeXcFFpPpvGz5Pj46fBo
MhlNBoc8Ak+Aa1IBlfDoceJuwZciyZFFkv9/sB9tt6zDfgKw/+PAnx4PzB+H
+8GReRYfHBoTj+KjJB62w12hlo+cAVTUGX/t68Mpm7lN8o1U4/xEMSxsjiaf
IKnMUfbOfmDBbEAkdh9Z6Oo3D6AIf1+Aeo3RkvDudl1k6BZ7haGO8Oc8X5a5
fDn9fF7AXfwlz5O++n9G/XgkBIkAAA==

-->

</rfc>
