<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.1 (Ruby 3.0.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="pre5378Trust200902" docName="draft-ietf-cose-hpke-16" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="COSE HPKE">Use of Hybrid Public-Key Encryption (HPKE) with CBOR Object Signing and Encryption (COSE)</title>

    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization abbrev="H-BRS">University of Applied Sciences Bonn-Rhein-Sieg</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>hannes.tschofenig@gmx.net</email>
      </address>
    </author>
    <author initials="O." surname="Steele" fullname="Orie Steele" role="editor">
      <organization>Transmute</organization>
      <address>
        <postal>
          <country>United States</country>
        </postal>
        <email>orie@transmute.industries</email>
      </address>
    </author>
    <author initials="D." surname="Ajitomi" fullname="Daisuke Ajitomi">
      <organization>bibital</organization>
      <address>
        <postal>
          <country>Japan</country>
        </postal>
        <email>dajiaji@gmail.com</email>
      </address>
    </author>
    <author initials="L." surname="Lundblade" fullname="Laurence Lundblade">
      <organization>Security Theory LLC</organization>
      <address>
        <postal>
          <country>United States</country>
        </postal>
        <email>lgl@securitytheory.com</email>
      </address>
    </author>

    <date year="2025" month="September" day="19"/>

    <area>Security</area>
    <workgroup>COSE</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 63?>

<t>This specification defines hybrid public-key encryption (HPKE) for use with 
CBOR Object Signing and Encryption (COSE). HPKE offers a variant of
public-key encryption of arbitrary-sized plaintexts for a recipient public key.</t>

<t>HPKE is a general encryption framework utilizing an asymmetric key encapsulation
mechanism (KEM), a key derivation function (KDF), and an Authenticated Encryption
with Associated Data (AEAD) algorithm.</t>

<t>This document defines the use of HPKE with COSE. Authentication for HPKE in COSE is
provided by COSE-native security mechanisms or by the pre-shared key authenticated
variant of HPKE.</t>



    </abstract>



  </front>

  <middle>


<?line 77?>

<section anchor="introduction"><name>Introduction</name>

<t>Hybrid public-key encryption (HPKE) <xref target="RFC9180"/> is a scheme that 
provides public key encryption of arbitrary-sized plaintexts given a 
recipient's public key.</t>

<t>This document defines the use of HPKE with COSE (<xref target="RFC9052"/>, <xref target="RFC9053"/>)
with the single-shot APIs defined in <xref section="6" sectionFormat="of" target="RFC9180"/>. Multiple
invocations of Open() / Seal() on the same context, as discussed in
<xref section="9.7.1" sectionFormat="of" target="RFC9180"/> are not supported.</t>

</section>
<section anchor="conventions-and-terminology"><name>Conventions and Terminology</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>This specification uses the following abbreviations and terms:</t>

<t><list style="symbols">
  <t>Content-encryption key (CEK), a term defined in CMS <xref target="RFC5652"/>.</t>
  <t>Hybrid Public Key Encryption (HPKE) is defined in <xref target="RFC9180"/>.</t>
  <t>pkR is the public key of the recipient, as defined in <xref target="RFC9180"/>.</t>
  <t>skR is the private key of the recipient, as defined in <xref target="RFC9180"/>.</t>
  <t>Key Encapsulation Mechanism (KEM), see <xref target="RFC9180"/>.</t>
  <t>Key Derivation Function (KDF), see <xref target="RFC9180"/>.</t>
  <t>Authenticated Encryption with Associated Data (AEAD), see <xref target="RFC9180"/>.</t>
  <t>Additional Authenticated Data (AAD), see <xref target="RFC9180"/>.</t>
</list></t>

</section>
<section anchor="hpke-for-cose"><name>HPKE for COSE</name>

<section anchor="overview"><name>Overview</name>

<t>This specification supports two modes of HPKE in COSE, namely</t>

<t><list style="symbols">
  <t>HPKE Integrated Encryption mode, where HPKE is used to encrypt
the plaintext. This mode can only be used with a single recipient.
<xref target="one-layer"/> provides the details.</t>
  <t>HPKE Key Encryption mode, where HPKE is used to encrypt a
content encryption key (CEK) and the CEK is subsequently used to
encrypt the plaintext. This mode supports multiple recipients.
<xref target="two-layer"/> provides the details.</t>
</list></t>

<t>In both cases, a new COSE header parameter called 'ek' is used
to convey the content of the enc structure defined in the HPKE
specification. The enc value represents the serialized encapsulated
public key.</t>

<t>When used with HPKE, the 'ek' header parameter MUST be present in
the unprotected header and MUST contain the encapsulated key,
which is the output of the HPKE KEM. The value of 'ek' MUST be a
bstr.</t>

<t>HPKE defines several authentication modes, as described in Table 1 of <xref target="RFC9180"/>.
In COSE HPKE, only 'mode_base' and 'mode_psk' are supported. The mode is 'mode_psk' if
the 'psk_id' header parameter is present; otherwise, the mode defaults to 'mode_base'.
'mode_base' is described in <xref section="5.1.1" sectionFormat="of" target="RFC9180"/>, which only enables encryption
to the holder of a given KEM private key. 'mode_psk' is described in <xref section="5.1.2" sectionFormat="of" target="RFC9180"/>,
which authenticates using a pre-shared key.</t>

<section anchor="one-layer"><name>HPKE Integrated Encryption Mode</name>

<t>This mode applies if the COSE_Encrypt0 structure uses a COSE-HPKE algorithm
and has no recipient structure(s).</t>

<t>Because COSE-HPKE supports header protection, if the 'alg' parameter is present, it MUST be included
in the protected header and MUST be a COSE-HPKE algorithm.</t>

<t>Although the use of the 'kid' parameter in COSE_Encrypt0 is
discouraged by RFC 9052, this document RECOMMENDS the use of the 'kid' parameter
(or other parameters) to explicitly identify the static recipient public key
used by the sender. If the COSE_Encrypt0 structure includes a 'kid' parameter, the
recipient MAY use it to select the corresponding private key.</t>

<t>When encrypting, the inputs to the HPKE Seal operation are set as follows:</t>

<t><list style="symbols">
  <t>kem_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>pkR: The recipient public key, converted into an HPKE public key.</t>
  <t>kdf_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>aead_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>info: Defaults to the empty string; externally provided information MAY be used instead.</t>
  <t>aad: Defaults to the empty string; externally provided information MAY be used instead.</t>
  <t>pt: The raw message plaintext.</t>
</list></t>

<t>The outputs are used as follows:</t>

<t><list style="symbols">
  <t>enc: MUST be placed raw into the 'ek' (encapsulated key) parameter in the unprotected bucket.</t>
  <t>ct: MUST be used as layer ciphertext. If not using detached content, this is directly placed as
ciphertext in COSE_Encrypt0 structure. Otherwise, it is transported separately and the ciphertext field is nil.
See <xref section="5" sectionFormat="of" target="RFC9052"/> for a description of detached payloads.</t>
</list></t>

<t>If 'mode_psk' has been selected, then the 'psk_id' parameter MUST be present.
If 'mode_base' has been chosen, then the 'psk_id' parameter MUST NOT be present.</t>

<t>When decrypting, the inputs to the HPKE Open operation are set as follows:</t>

<t><list style="symbols">
  <t>kem_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>skR: The recipient private key, converted into an HPKE private key.</t>
  <t>kdf_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>aead_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>info: Defaults to the empty string; externally provided information MAY be used instead.</t>
  <t>aad: Defaults to the empty string; externally provided information MAY be used instead.</t>
  <t>enc: The contents of the layer 'ek' parameter.</t>
  <t>ct: The contents of the layer ciphertext.</t>
</list></t>

<t>The plaintext output is the raw message plaintext.</t>

<t>The COSE_Encrypt0 MAY be tagged or untagged.</t>

<t>An example is shown in <xref target="one-layer-example"/>.</t>

</section>
<section anchor="two-layer"><name>HPKE Key Encryption Mode</name>

<t>This mode is selected if the COSE_recipient structure uses a COSE-HPKE algorithm.</t>

<t>In this approach the following layers are involved:</t>

<t><list style="symbols">
  <t>Layer 0 (corresponding to the COSE_Encrypt structure) contains the content (plaintext)
encrypted with the CEK. This ciphertext may be detached, and if not detached, then
it is included in the COSE_Encrypt structure.</t>
  <t>Layer 1 (corresponding to a recipient structure) contains parameters needed for 
HPKE to generate a shared secret used to encrypt the CEK. This layer conveys the 
encrypted CEK in the COSE_recipient structure using a COSE-HPKE algorithm.
The unprotected header MAY contain the kid parameter to identify the static recipient
public key that the sender has been using with HPKE.</t>
</list></t>

<t>This two-layer structure is used to encrypt content that can also be shared with
multiple parties at the expense of a single additional encryption operation.
As stated above, the specification uses a CEK to encrypt the content at layer 0.</t>

<section anchor="recipient-encryption"><name>Recipient Encryption</name>

<t>This section defines the Recipient_structure, which is used in place of COSE_KDF_Context
for COSE-HPKE recipients. It MUST be used for COSE-HPKE recipients, as it provides
integrity protection for recipient-protected header parameters.</t>

<t>The Recipient_structure is modeled after the Enc_structure defined in <xref target="RFC9052"/>,
but is specific to COSE_recipient structures and MUST NOT be used with COSE_Encrypt.</t>

<t>Furthermore, the use of COSE_KDF_Context is prohibited in COSE-HPKE; it MUST NOT be
used.</t>

<figure><artwork><![CDATA[
Recipient_structure = [
    context: "HPKE Recipient",
    next_layer_alg: int/tstr,
    recipient_protected_header: empty_or_serialize_map,
    recipient_extra_info: bstr
]
]]></artwork></figure>

<t><list style="symbols">
  <t>"next_layer_alg" is the algorithm ID of the COSE layer for which the COSE_recipient is encrypting a key.
It is the algorithm that the key MUST be used with.
This value MUST match the alg parameter in the next lower COSE layer.
(This serves the same purpose as the alg ID in the COSE_KDF_Context.
It also mitigates attacks where the attacker manipulates the content-encryption
algorithm identifier. This attack has been demonstrated against CMS and the mitigation
can be found in <xref target="I-D.ietf-lamps-cms-cek-hkdf-sha256"/>.</t>
  <t>"recipient_protected_header" contains the protected header parameters from the COSE_recipient
CBOR-encoded deterministically with the "Core Deterministic Encoding Requirements",
specified in <xref section="4.2.1" sectionFormat="of" target="RFC8949"/>.</t>
  <t>"recipient_extra_info" contains any additional context the application wishes to include in
the key derivation via the HPKE info parameter. If none, it is a zero-length string.</t>
</list></t>

</section>
<section anchor="cose-hpke-recipient-construction"><name>COSE-HPKE Recipient Construction</name>

<t>Because COSE-HPKE supports header protection, if the 'alg' parameter is present, it
MUST be in the protected header parameters and MUST be a COSE-HPKE algorithm.</t>

<t>The protected header MAY contain the kid parameter to identify the static recipient
public key that the sender used. Use of the 'kid' parameter is RECOMMENDED
to explicitly identify the static recipient public key used by the sender.
Including it in the protected header parameters ensures that it is input into the
key derivation function of HPKE.</t>

<t>When encrypting, the inputs to the HPKE Seal operation are set as follows:</t>

<t><list style="symbols">
  <t>kem_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>pkR: The recipient public key, converted into HPKE public key.</t>
  <t>kdf_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>aead_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>info: Deterministic encoding of the Recipient_structure.</t>
  <t>aad: Defaults to the empty string; externally provided information MAY be used instead.</t>
  <t>pt: The raw key for the next layer down.</t>
</list></t>

<t>The outputs are used as follows:</t>

<t><list style="symbols">
  <t>enc: MUST be placed raw into the 'ek' (encapsulated key) parameter in the unprotected bucket.</t>
  <t>ct: MUST be placed raw in the ciphertext field in the COSE_recipient.</t>
</list></t>

<t>When decrypting, the inputs to the HPKE Open operation are set as follows:</t>

<t><list style="symbols">
  <t>kem_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>skR: The recipient private key, converted into HPKE private key.</t>
  <t>kdf_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>aead_id: Depends on the COSE-HPKE algorithm used.</t>
  <t>info: Deterministic encoding of the Recipient_structure.</t>
  <t>aad: Defaults to the empty string; externally provided information MAY be used instead.</t>
  <t>ct: The contents of the layer ciphertext field.</t>
</list></t>

<t>The plaintext output is the raw key for the next layer down.</t>

<t>It is not necessary to populate recipient_aad, as HPKE inherently mitigates the classes of
attacks that COSE_KDF_Context, and SP800-56A are designed to address. COSE-HPKE use cases
may still utilize recipient_aad for other purposes as needed; however, it is generally
intended for small values such as identifiers, contextual information, or secrets. It is
not designed for protecting large or bulk external data.</t>

<t>Any bulk external data that requires protection should be handled at layer 0 using external_aad.</t>

<t>The COSE_recipient structure is computed for each recipient.</t>

<t>When encrypting the content at layer 0, the instructions in <xref section="5.3" sectionFormat="of" target="RFC9052"/> MUST be followed, including the calculation of the
authenticated data structure.</t>

<t>An example is shown in <xref target="two-layer-example"/>.</t>

</section>
</section>
</section>
<section anchor="key-representation"><name>Key Representation</name>

<t>The COSE_Key with the existing key types can be used to represent KEM private
or public keys. When using a COSE_Key for COSE-HPKE, the following checks are made:</t>

<t><list style="symbols">
  <t>If the "kty" field is "AKP", then the public and private keys SHALL be the raw HPKE public and private
keys (respectively) for the KEM used by the algorithm.</t>
  <t>Otherwise, the key MUST be suitable for the KEM used by the algorithm. In case the "kty" parameter
is "EC2" or "OKP", this means the value of "crv" parameter is suitable. The valid combinations of
KEM, "kty" and "crv" for the algorithms defined in this document are shown in <xref target="ciphersuite-kty-crv"/>.</t>
  <t>If the "key_ops" field is present, it MUST include only "derive bits" for the private key
and MUST be empty for the public key.</t>
</list></t>

<t>Examples of the COSE_Key for COSE-HPKE are shown in <xref target="key-representation-example"/>.</t>

</section>
</section>
<section anchor="ciphersuite-registration"><name>Ciphersuite Registration</name>

<t>A ciphersuite is a group of algorithms, often sharing component algorithms
such as hash functions, targeting a security level.
A COSE-HPKE algorithm is composed of the following choices:</t>

<t><list style="symbols">
  <t>HPKE Mode</t>
  <t>KEM Algorithm</t>
  <t>KDF Algorithm</t>
  <t>AEAD Algorithm</t>
</list></t>

<t>The "KEM", "KDF", and "AEAD" values are chosen from the HPKE IANA
registry <xref target="HPKE-IANA"/>.</t>

<t>The HPKE mode is determined by the presence or absence of the
'psk_id' parameter and is therefore not explicitly indicated in the
ciphersuite.</t>

<t>For a list of ciphersuite registrations, please see <xref target="IANA"/>. The following
table summarizes the relationship between the ciphersuites registered in this
document and the values registered in the HPKE IANA registry <xref target="HPKE-IANA"/>.</t>

<figure><artwork><![CDATA[
+--------------------------------------------------+------------------+
| COSE-HPKE                                        |      HPKE        |
| Ciphersuite Label                                | KEM | KDF | AEAD |
+--------------------------------------------------+-----+-----+------+
| HPKE-0                                           |0x10 | 0x1 | 0x1  |
| HPKE-1                                           |0x11 | 0x2 | 0x2  |
| HPKE-2                                           |0x12 | 0x3 | 0x2  |
| HPKE-3                                           |0x20 | 0x1 | 0x1  |
| HPKE-4                                           |0x20 | 0x1 | 0x3  |
| HPKE-5                                           |0x21 | 0x3 | 0x2  |
| HPKE-6                                           |0x21 | 0x3 | 0x3  |
+--------------------------------------------------+-----+-----+------+
]]></artwork></figure>

<t>The following list maps the ciphersuite labels to their textual
description.</t>

<t><list style="symbols">
  <t>HPKE-0: DHKEM(P-256, HKDF-SHA256) KEM, HKDF-SHA256 KDF and AES-128-GCM AEAD.</t>
  <t>HPKE-1: DHKEM(P-384, HKDF-SHA384) KEM, HKDF-SHA384 KDF, and AES-256-GCM AEAD.</t>
  <t>HPKE-2: DHKEM(P-521, HKDF-SHA512) KEM, HKDF-SHA512 KDF, and AES-256-GCM AEAD.</t>
  <t>HPKE-3: DHKEM(X25519, HKDF-SHA256) KEM, HKDF-SHA256 KDF, and AES-128-GCM AEAD.</t>
  <t>HPKE-4: DHKEM(X25519, HKDF-SHA256) KEM, HKDF-SHA256 KDF, and ChaCha20Poly1305 AEAD.</t>
  <t>HPKE-5: DHKEM(X448, HKDF-SHA512) KEM, HKDF-SHA512 KDF, and AES-256-GCM AEAD.</t>
  <t>HPKE-6: DHKEM(X448, HKDF-SHA512) KEM, HKDF-SHA512 KDF, and ChaCha20Poly1305 AEAD.</t>
</list></t>

<t>As the list indicates, the ciphersuite labels have been abbreviated at least
to some extent to strike a balance between readability and length.</t>

<t>The ciphersuite list above is a minimal starting point. Additional
ciphersuites can be registered into the already existing registry.
For example, once post-quantum cryptographic algorithms have been standardized
it might be beneficial to register ciphersuites for use with COSE-HPKE.
Additionally, ciphersuites utilizing the compact encoding of the public keys,
as defined in <xref target="I-D.irtf-cfrg-dnhpke"/>, may be standardized for use in
constrained environments.</t>

<t>As a guideline for ciphersuite submissions to the IANA COSE algorithm
registry, the designated experts must only register combinations of 
(KEM, KDF, AEAD) triple that constitute valid combinations for use with
HPKE, the KDF used should (if possible) match one internally used by the
KEM, and components should not be mixed between global and national standards.</t>

<section anchor="cosekeys-for-cose-hpke-ciphersuites"><name>COSE_Keys for COSE-HPKE Ciphersuites</name>

<t>The COSE-HPKE algorithm uniquely determines the KEM for which a COSE_Key is used.
The following mapping table shows the valid combinations
of the KEM used, COSE_Key type, and its curve/key subtype.</t>

<figure title="COSE_Key Types and Curves for COSE-HPKE Ciphersuites" anchor="ciphersuite-kty-crv"><artwork><![CDATA[
+---------------------+--------------+
| HPKE KEM id         | COSE_Key     |
|                     | kty | crv    |
+---------------------+-----+--------+
| 0x0010, 0x0013      | EC2 | P-256  |
| 0x0011, 0x0014      | EC2 | P-384  |
| 0x0012, 0x0015      | EC2 | P-521  |
| 0x0020              | OKP | X25519 |
| 0x0021              | OKP | X448   |
+---------------------+-----+--------+
]]></artwork></figure>

</section>
</section>
<section anchor="examples"><name>Examples</name>

<t>This section provides a set of examples that show all COSE message types
(COSE_Encrypt0 and COSE_Encrypt) to which the COSE-HPKE can be
applied, and also provides some examples of key representation for HPKE KEM.</t>

<t>Each example of the COSE message includes the following information
that can be used to check the interoperability of COSE-HPKE implementations:</t>

<t><list style="symbols">
  <t>plaintext: Original data of the encrypted payload.</t>
  <t>external_aad: Externally supplied AAD.</t>
  <t>skR: A recipient private key.</t>
  <t>skE: An ephemeral sender private key paired with the encapsulated key.</t>
</list></t>

<section anchor="one-layer-example"><name>HPKE Integrated Encryption Mode</name>

<t>This example assumes that a sender wants to communicate an
encrypted payload to a single recipient in the most efficient way.</t>

<t>An example of the HPKE Integrated Encryption Mode is
shown in <xref target="hpke-example-one"/>. Line breaks and comments have been inserted
for better readability.</t>

<t>This example uses the following:</t>

<t><list style="symbols">
  <t>alg: HPKE-0</t>
  <t>plaintext: "This is the content."</t>
  <t>external_aad: "COSE-HPKE app"</t>
  <t>skR: h'57c92077664146e876760c9520d054aa93c3afb04e306705db6090308507b4d3'</t>
  <t>skE: h'42dd125eefc409c3b57366e721a40043fb5a58e346d51c133128a77237160218'</t>
</list></t>

<figure title="COSE_Encrypt0 Example for HPKE" anchor="hpke-example-one"><artwork><![CDATA[
16([
    / alg = HPKE-0 (Assumed: 35) /
    h'a1011823',
    {
        / kid /
        4: h'3031',
        / ek /
        -4: h'045df24272faf43849530db6be01f42708b3c3a9
              df8e268513f0a996ed09ba7840894a3fb946cb28
              23f609c59463093d8815a7400233b75ca8ecb177
              54d241973e',
    },
    / encrypted plaintext /
    h'35aa3d98739289b83751125abe44e3b977e4b9abbf2c8cfaade
      b15f7681eef76df88f096',
])
]]></artwork></figure>

</section>
<section anchor="two-layer-example"><name>HPKE Key Encryption Mode</name>

<t>In this example we assume that a sender wants to transmit a
payload to two recipients using the HPKE Key Encryption mode.
Note that it is possible to send two single-layer payloads, 
although it will be less efficient.</t>

<section anchor="coseencrypt"><name>COSE_Encrypt</name>

<t>An example of key encryption using the COSE_Encrypt structure using HPKE is
shown in <xref target="hpke-example-cose-encrypt"/>. Line breaks and comments have been
inserted for better readability.</t>

<t>This example uses the following input parameters:</t>

<t><list style="symbols">
  <t>Content encryption algorithm: AES-128-GCM</t>
  <t>plaintext: "This is the payload."</t>
  <t>kid:"alice"</t>
  <t>alg: HPKE-0 - DHKEM(P-256, HKDF-SHA256), KDF: HKDF-SHA256, AEAD: AES-128-GCM</t>
  <t>external_aad: "some externally provided aad"</t>
</list></t>

<t>Alice uses the following NIST P-256 ECC keys.</t>

<t>Private Key:</t>

<figure><artwork><![CDATA[
0xaf, 0xf9, 0x07, 0xc9, 0x9f, 0x9a, 0xd3, 0xaa,
0xe6, 0xc4, 0xcd, 0xf2, 0x11, 0x22, 0xbc, 0xe2,
0xbd, 0x68, 0xb5, 0x28, 0x3e, 0x69, 0x07, 0x15,
0x4a, 0xd9, 0x11, 0x84, 0x0f, 0xa2, 0x08, 0xcf
]]></artwork></figure>

<t>Public Key:</t>

<figure><artwork><![CDATA[
/* SEC Serialization of X and Y */
0x04,

/* X & Y */
0x65, 0xed, 0xa5, 0xa1, 0x25, 0x77, 0xc2, 0xba,
0xe8, 0x29, 0x43, 0x7f, 0xe3, 0x38, 0x70, 0x1a,
0x10, 0xaa, 0xa3, 0x75, 0xe1, 0xbb, 0x5b, 0x5d,
0xe1, 0x08, 0xde, 0x43, 0x9c, 0x08, 0x55, 0x1d,

0x1e, 0x52, 0xed, 0x75, 0x70, 0x11, 0x63, 0xf7,
0xf9, 0xe4, 0x0d, 0xdf, 0x9f, 0x34, 0x1b, 0x3d,
0xc9, 0xba, 0x86, 0x0a, 0xf7, 0xe0, 0xca, 0x7c,
0xa7, 0xe9, 0xee, 0xcd, 0x00, 0x84, 0xd1, 0x9c
]]></artwork></figure>

<t>As a result, the following COSE_Encrypt payload is
created:</t>

<figure><artwork><![CDATA[
d8 60 84 43 a1 01 01 a1 05 50 7f 55 a2 6b 98 c0 
49 b4 28 a7 cf 25 9d c3 0e 54 58 23 3f ae 53 ee 
83 55 ee 40 4e 86 7c 00 74 f8 c3 8c 6d 13 6b 65 
bb 61 93 92 79 b4 38 48 c5 8c b6 a4 76 03 55 81 
83 4b a2 01 18 23 04 45 61 6c 69 63 65 a1 23 58 
41 04 fe 73 6d 1d 93 11 4d f6 11 3b c2 87 cd 8e 
63 67 e1 0a b4 78 d7 fe df ac a1 6e 12 6f f0 16 
d6 95 d5 f7 22 34 03 e3 99 60 75 55 bc cf b9 65 
17 5f 49 14 e0 47 73 f7 04 07 5b 46 58 bf 7a dd 
84 a3 58 20 55 12 c2 35 7d 4c b6 bd 23 8a 5f bc 
10 84 b6 c9 74 0a c2 41 1d 93 63 7a 51 e6 9d 51 
0b 4f ae f8 
]]></artwork></figure>

<t>Decoded, this hex-sequence has the following
content:</t>

<figure title="COSE_Encrypt Example for HPKE" anchor="hpke-example-cose-encrypt"><artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

  96([
       / alg = AES-128-GCM (1) /
       h'A10101',
       {
           / iv /
           5: h'33739C468ACB8EEC693C563EAEA12DD0'
       },
       / ciphertext /
       h'\
1F3EE9966D5CEE016E49365CF366FD608F271FC3B5ABDD5253844EE38EE6ABB7F555\
                                                                 9A',
       [
           [
               / alg = HPKE-0 (35), kid = 'alice' /
               h'A20118230445616C696365',
               {
                   / ek /
                   -4: h'\
040506BE8D9C2AFE42D3330676A3F616BAE02F6779D962449F26759B8D1E8F4DF10C\
      9F344627DEB063EE1DDB4858A5E7605BD09ECEB409B037E6E61F44D1E946C1'
               },
               / ciphertext containing encrypted CEK /
               h'\
    B11361397A19E9C155C3E0E8117B5E88155600E550DDE03DC834A46A182DE6F1'
           ]
       ]
   ])
]]></artwork></figure>

<t>To offer authentication of the sender the payload in <xref target="hpke-example-cose-encrypt"/>
is signed with a COSE_Sign1 wrapper, which is outlined in <xref target="hpke-example-sign"/>.
The payload in <xref target="hpke-example-sign"/> is meant to contain the content of
<xref target="hpke-example-cose-encrypt"/>.</t>

<t>Bob uses the following signature key to sign the COSE_Encrypt payload
without any additional data.</t>

<t>Private Key:</t>

<figure><artwork><![CDATA[
0xd9, 0xb5, 0xe7, 0x1f, 0x77, 0x28, 0xbf, 0xe5,
0x63, 0xa9, 0xdc, 0x93, 0x75, 0x62, 0x27, 0x7e,
0x32, 0x7d, 0x98, 0xd9, 0x94, 0x80, 0xf3, 0xdc,
0x92, 0x41, 0xe5, 0x74, 0x2a, 0xc4, 0x58, 0x89
]]></artwork></figure>

<t>The output of the message is as follows:</t>

<figure title="COSE_Sign1 Example" anchor="hpke-example-sign"><artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

18([
       / alg = ES256 (-7) /
       h'A10126',
       {
          / kid = 'bob' /
          4: h'626F62'
       },
       / payload / h'\
D8608443A10101A1055033739C468ACB8EEC693C563EAEA12DD058231F3EE9966D5C\
EE016E49365CF366FD608F271FC3B5ABDD5253844EE38EE6ABB7F5559A81834BA201\
18230445616C696365A1235841040506BE8D9C2AFE42D3330676A3F616BAE02F6779\
D962449F26759B8D1E8F4DF10C9F344627DEB063EE1DDB4858A5E7605BD09ECEB409\
B037E6E61F44D1E946C15820B11361397A19E9C155C3E0E8117B5E88155600E550DD\
                                            E03DC834A46A182DE6F1',   
       / Signature /
       h'\
7F9A83D1753E6FA8475A1250A786DA3E680265949A0AEE1984895A406E41AE8A2966\
        38CA64AE270C5317829BD3968EF76C42DF1566DADC9A68B06BA6ED376B8A'
  ])
]]></artwork></figure>

</section>
</section>
<section anchor="key-representation-example"><name>Key Representation</name>

<t>Examples of private and public KEM key representation are shown below.</t>

<section anchor="kem-public-key-for-hpke-0"><name>KEM Public Key for HPKE-0</name>

<figure title="Key Representation Example for HPKE-0" anchor="hpke-example-key-1"><artwork><![CDATA[
{
    / kty = 'EC2' /
    1: 2,
    / kid = '01' /
    2: h'3031',
    / alg = HPKE-0 (Assumed: 35) /
    3: 35,
    / crv = 'P-256' /
    -1: 1,
    / x /
    -2: h'65eda5a12577c2bae829437fe338701a10aaa375
              e1bb5b5de108de439c08551d',
    / y /
    -3: h'1e52ed75701163f7f9e40ddf9f341b3dc9ba860af
              7e0ca7ca7e9eecd0084d19c'
}
]]></artwork></figure>

</section>
<section anchor="kem-private-key-for-hpke-0"><name>KEM Private Key for HPKE-0</name>

<figure title="Key Representation Example for HPKE-0" anchor="hpke-example-key-2"><artwork><![CDATA[
{
    / kty = 'EC2' /
    1: 2,
    / kid = '01' /
    2: h'3031',
    / alg = HPKE-0 (Assumed: 35) /
    3: 35,
    / key_ops = ['derive_bits'] /
    4: [8],
    / crv = 'P-256' /
    -1: 1,
    / x /
    -2: h'bac5b11cad8f99f9c72b05cf4b9e26d244dc189f7
              45228255a219a86d6a09eff',
    / y /
    -3: h'20138bf82dc1b6d562be0fa54ab7804a3a64b6d72
              ccfed6b6fb6ed28bbfc117e',
    / d /
    -4: h'57c92077664146e876760c9520d054aa93c3afb04
              e306705db6090308507b4d3',
}
]]></artwork></figure>

</section>
<section anchor="kem-public-key-for-hpke-4"><name>KEM Public Key for HPKE-4</name>

<figure title="Key Representation Example for HPKE-4" anchor="hpke-example-key-3"><artwork><![CDATA[
{
    / kty = 'OKP' /
    1: 1,
    / kid = '11' /
    2: h'3131',
    / alg = HPKE-4 (Assumed: 42) /
    3: 42,
    / crv = 'X25519' /
    -1: 4,
    / x /
    -2: h'cb7c09ab7b973c77a808ee05b9bbd373b55c06eaa
              9bd4ad2bd4e9931b1c34c22',
}
]]></artwork></figure>

</section>
</section>
</section>
<section anchor="sec-cons"><name>Security Considerations</name>

<t>This specification is based on HPKE and the security considerations of
<xref target="RFC9180"/> are therefore applicable also to this specification.</t>

<t>Both HPKE and HPKE COSE assume that the sender possesses the recipient's
public key. Therefore, some form of public key distribution mechanism is
assumed to exist, but this is outside the scope of this document.</t>

<t>HPKE relies on a source of randomness to be available on the device. Additionally, 
with the two layer structure the CEK is randomly generated and it MUST be
ensured that the guidelines in <xref target="RFC8937"/> for random number generation are followed.</t>

<t>HPKE in Base mode does not offer authentication as part of the HPKE KEM. In this
case COSE constructs like COSE_Sign, COSE_Sign1, COSE_Mac, or COSE_Mac0 can be
used to add authentication.</t>

<t>If COSE_Encrypt or COSE_Encrypt0 is used with a detached ciphertext then the
subsequently applied integrity protection via COSE_Sign, COSE_Sign1, COSE_Mac, 
or COSE_Mac0 does not cover this detached ciphertext. Implementers MUST ensure
that the detached ciphertext also experiences integrity protection. This is, for
example, the case when an AEAD cipher is used to produce the detached ciphertext
but may not be guaranteed by non-AEAD ciphers.</t>

</section>
<section anchor="IANA"><name>IANA Considerations</name>

<t>This document requests IANA to add new values to the 'COSE Algorithms' and to 
the 'COSE Header Parameters' registries.</t>

<section anchor="cose-algorithms-registry"><name>COSE Algorithms Registry</name>

<section anchor="hpke-0"><name>HPKE-0</name>

<t><list style="symbols">
  <t>Name: HPKE-0</t>
  <t>Value: TBD1 (Assumed: 35)</t>
  <t>Description: Cipher suite for COSE-HPKE in Base Mode that uses the DHKEM(P-256, HKDF-SHA256) KEM, the HKDF-SHA256 KDF and the AES-128-GCM AEAD.</t>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
</list></t>

</section>
<section anchor="hpke-1"><name>HPKE-1</name>

<t><list style="symbols">
  <t>Name: HPKE-1</t>
  <t>Value: TBD3 (Assumed: 37)</t>
  <t>Description: Cipher suite for COSE-HPKE in Base Mode that uses the DHKEM(P-384, HKDF-SHA384) KEM, the HKDF-SHA384 KDF, and the AES-256-GCM AEAD.</t>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
</list></t>

</section>
<section anchor="hpke-2"><name>HPKE-2</name>

<t><list style="symbols">
  <t>Name: HPKE-2</t>
  <t>Value: TBD5 (Assumed: 39)</t>
  <t>Description: Cipher suite for COSE-HPKE in Base Mode that uses the DHKEM(P-521, HKDF-SHA512) KEM, the HKDF-SHA512 KDF, and the AES-256-GCM AEAD.</t>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
</list></t>

</section>
<section anchor="hpke-3"><name>HPKE-3</name>

<t><list style="symbols">
  <t>Name: HPKE-3</t>
  <t>Value: TBD7 (Assumed: 41)</t>
  <t>Description: Cipher suite for COSE-HPKE in Base Mode that uses the DHKEM(X25519, HKDF-SHA256) KEM, the HKDF-SHA256 KDF, and the AES-128-GCM AEAD.</t>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
</list></t>

</section>
<section anchor="hpke-4"><name>HPKE-4</name>

<t><list style="symbols">
  <t>Name: HPKE-4</t>
  <t>Value: TBD8 (Assumed: 42)</t>
  <t>Description: Cipher suite for COSE-HPKE in Base Mode that uses the DHKEM(X25519, HKDF-SHA256) KEM, the HKDF-SHA256 KDF, and the ChaCha20Poly1305 AEAD.</t>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
</list></t>

</section>
<section anchor="hpke-5"><name>HPKE-5</name>

<t><list style="symbols">
  <t>Name: HPKE-5</t>
  <t>Value: TBD9 (Assumed: 43)</t>
  <t>Description: Cipher suite for COSE-HPKE in Base Mode that uses the DHKEM(X448, HKDF-SHA512) KEM, the HKDF-SHA512 KDF, and the AES-256-GCM AEAD.</t>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
</list></t>

</section>
<section anchor="hpke-6"><name>HPKE-6</name>

<t><list style="symbols">
  <t>Name: HPKE-6</t>
  <t>Value: TBD10 (Assumed: 44)</t>
  <t>Description: Cipher suite for COSE-HPKE in Base Mode that uses the DHKEM(X448, HKDF-SHA512) KEM, the HKDF-SHA512 KDF, and the ChaCha20Poly1305 AEAD.</t>
  <t>Capabilities: [kty]</t>
  <t>Change Controller: IESG</t>
  <t>Reference:  [[TBD: This RFC]]</t>
  <t>Recommended: Yes</t>
</list></t>

</section>
</section>
<section anchor="cose-header-parameters"><name>COSE Header Parameters</name>

<section anchor="ek-header-parameter"><name>ek Header Parameter</name>

<t><list style="symbols">
  <t>Name: ek</t>
  <t>Label: TBD11 (Assumed: -4)</t>
  <t>Value type: bstr</t>
  <t>Value Registry: N/A</t>
  <t>Description: HPKE encapsulated key</t>
  <t>Reference: [[TBD: This RFC]]</t>
</list></t>

</section>
<section anchor="pskid-header-parameter"><name>psk_id Header Parameter</name>

<t><list style="symbols">
  <t>Name: psk_id</t>
  <t>Label: TBD12 (Assumed: -5)</t>
  <t>Value type: bstr</t>
  <t>Value Registry: N/A</t>
  <t>Description: A key identifier (kid) for the pre-shared key
as defined in <xref section="5.1.2" sectionFormat="of" target="RFC9180"/></t>
  <t>Reference: [[TBD: This RFC]]</t>
</list></t>

</section>
</section>
</section>


  </middle>

  <back>


    <references title='Normative References' anchor="sec-normative-references">



<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="RFC9180">
  <front>
    <title>Hybrid Public Key Encryption</title>
    <author fullname="R. Barnes" initials="R." surname="Barnes"/>
    <author fullname="K. Bhargavan" initials="K." surname="Bhargavan"/>
    <author fullname="B. Lipp" initials="B." surname="Lipp"/>
    <author fullname="C. Wood" initials="C." surname="Wood"/>
    <date month="February" year="2022"/>
    <abstract>
      <t>This document describes a scheme for hybrid public key encryption (HPKE). This scheme provides a variant of public key encryption of arbitrary-sized plaintexts for a recipient public key. It also includes three authenticated variants, including one that authenticates possession of a pre-shared key and two optional ones that authenticate possession of a key encapsulation mechanism (KEM) private key. HPKE works for any combination of an asymmetric KEM, key derivation function (KDF), and authenticated encryption with additional data (AEAD) encryption function. Some authenticated variants may not be supported by all KEMs. We provide instantiations of the scheme using widely used and efficient primitives, such as Elliptic Curve Diffie-Hellman (ECDH) key agreement, HMAC-based key derivation function (HKDF), and SHA2.</t>
      <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9180"/>
  <seriesInfo name="DOI" value="10.17487/RFC9180"/>
</reference>

<reference anchor="RFC9052">
  <front>
    <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
    <author fullname="J. Schaad" initials="J." surname="Schaad"/>
    <date month="August" year="2022"/>
    <abstract>
      <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
      <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="96"/>
  <seriesInfo name="RFC" value="9052"/>
  <seriesInfo name="DOI" value="10.17487/RFC9052"/>
</reference>

<reference anchor="RFC9053">
  <front>
    <title>CBOR Object Signing and Encryption (COSE): Initial Algorithms</title>
    <author fullname="J. Schaad" initials="J." surname="Schaad"/>
    <date month="August" year="2022"/>
    <abstract>
      <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines a set of algorithms that can be used with the CBOR Object Signing and Encryption (COSE) protocol (RFC 9052).</t>
      <t>This document, along with RFC 9052, obsoletes RFC 8152.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9053"/>
  <seriesInfo name="DOI" value="10.17487/RFC9053"/>
</reference>

<reference anchor="RFC8949">
  <front>
    <title>Concise Binary Object Representation (CBOR)</title>
    <author fullname="C. Bormann" initials="C." surname="Bormann"/>
    <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
    <date month="December" year="2020"/>
    <abstract>
      <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
      <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="94"/>
  <seriesInfo name="RFC" value="8949"/>
  <seriesInfo name="DOI" value="10.17487/RFC8949"/>
</reference>




    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC8937">
  <front>
    <title>Randomness Improvements for Security Protocols</title>
    <author fullname="C. Cremers" initials="C." surname="Cremers"/>
    <author fullname="L. Garratt" initials="L." surname="Garratt"/>
    <author fullname="S. Smyshlyaev" initials="S." surname="Smyshlyaev"/>
    <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
    <author fullname="C. Wood" initials="C." surname="Wood"/>
    <date month="October" year="2020"/>
    <abstract>
      <t>Randomness is a crucial ingredient for Transport Layer Security (TLS) and related security protocols. Weak or predictable "cryptographically secure" pseudorandom number generators (CSPRNGs) can be abused or exploited for malicious purposes. An initial entropy source that seeds a CSPRNG might be weak or broken as well, which can also lead to critical and systemic security problems. This document describes a way for security protocol implementations to augment their CSPRNGs using long-term private keys. This improves randomness from broken or otherwise subverted CSPRNGs.</t>
      <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8937"/>
  <seriesInfo name="DOI" value="10.17487/RFC8937"/>
</reference>

<reference anchor="RFC5652">
  <front>
    <title>Cryptographic Message Syntax (CMS)</title>
    <author fullname="R. Housley" initials="R." surname="Housley"/>
    <date month="September" year="2009"/>
    <abstract>
      <t>This document describes the Cryptographic Message Syntax (CMS). This syntax is used to digitally sign, digest, authenticate, or encrypt arbitrary message content. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="70"/>
  <seriesInfo name="RFC" value="5652"/>
  <seriesInfo name="DOI" value="10.17487/RFC5652"/>
</reference>


<reference anchor="I-D.irtf-cfrg-dnhpke">
   <front>
      <title>Deterministic Nonce-less Hybrid Public Key Encryption</title>
      <author fullname="Dan Harkins" initials="D." surname="Harkins">
         <organization>Hewlett-Packard Enterprise</organization>
      </author>
      <date day="3" month="March" year="2025"/>
      <abstract>
	 <t>   This document describes enhancements to the Hybrid Public Key
   Encryption standard published by CFRG.  These include use of &quot;compact
   representation&quot; of relevant public keys, support for key-wrapping,
   and two ways to address the use of HPKE on lossy networks: a
   determinstic, nonce-less AEAD scheme, and use of a rolling sequence
   number with existing AEAD schemes.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-dnhpke-06"/>
   
</reference>


<reference anchor="I-D.ietf-lamps-cms-cek-hkdf-sha256">
   <front>
      <title>Encryption Key Derivation in the Cryptographic Message Syntax (CMS) using HKDF with SHA-256</title>
      <author fullname="Russ Housley" initials="R." surname="Housley">
         <organization>Vigil Security, LLC</organization>
      </author>
      <date day="19" month="September" year="2024"/>
      <abstract>
	 <t>   This document specifies the derivation of the content-encryption key
   or the content-authenticated-encryption key in the Cryptographic
   Message Syntax (CMS) using HMAC-based Extract-and-Expand Key
   Derivation Function (HKDF) with SHA-256.  The use of this mechanism
   provides protection against where the attacker manipulates the
   content-encryption algorithm identifier or the content-authenticated-
   encryption algorithm identifier.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-cms-cek-hkdf-sha256-05"/>
   
</reference>


<reference anchor="HPKE-IANA" target="https://www.iana.org/assignments/hpke/hpke.xhtml">
  <front>
    <title>Hybrid Public Key Encryption (HPKE) IANA Registry</title>
    <author >
      <organization>IANA</organization>
    </author>
    <date year="2023" month="October"/>
  </front>
</reference>


    </references>


<?line 797?>

<section anchor="contributors"><name>Contributors</name>

<t>We would like to thank the following individuals for their contributions
to the design of embedding the HPKE output into the COSE structure 
following a long and lively mailing list discussion:</t>

<t><list style="symbols">
  <t>Richard Barnes</t>
  <t>Ilari Liusvaara</t>
</list></t>

<t>Finally, we would like to thank Russ Housley and Brendan Moran for their
contributions to the draft as co-authors of initial versions.</t>

</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>We would like to thank
Michael B. Jones,
John Mattsson,
Mike Prorock,
Michael Richardson,
Thomas Fossati,
and
Göran Selander
for their review feedback.</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+19a3PbRrLod/yKKaXqSN4labwfSqVqKZFae2PHvpb3nN1K
Uq4BMBSxIgEuAErWOt6fdf/A/WO3u2cGGECULSfZPTlVR5XIJDCP7p5+T89o
Op1abdFuxCn7cyNYtWLP7tK6yNnrfbopsum34o4ty6y+27VFVbKTZ6+/XT5h
t0W7Zudnr96wV+nfRNayy+KqLMorxst80Pz81eXyicXTtBY3pwy/MRzByqus
5FuYNK/5qp0Wol1Ns6oR0/XuWkyd0Mp4K66q+u6UNW1uWcWuPmW7WgReFL+t
903r2nZiuxavBT9llyLb10V7Z91W9fVVXe13ci7rWtzBo/yUPS9bUZeinS5w
PstqWoD0Hd9UJcBwJxprV5yy79sqm7CmqttarBr4dLfFDz9aFt+366o+taYW
Y0XZnLJnM/a2ydbVSpTFFTyUyDzjZSma4Rux5cXmlK3p1aztXv3havt+BhBB
E02eZ9OzN5fwvaqveFn8gyMJYVnK4kbUDaCHqzPf7TaFyNllVogyg8nOqrKc
vlmLopxeFgJnzKp92SLl/ijqLS/veqhfzdhlK8RGdBC/qgvRP6sr5AORF21V
34Pjbc3LZrtvRY9UBb3/0Orns6LMYWXgWWNCAfC3CHALK9r0sCxmbP43mGhb
dMAseNHsr4XxfAhBWqRFyzf9/Dn/WwH/ASnh6yyrtua8f+I7XvbzvZixF/sy
Tzc879F/wfc1knHwajip5i32di2AH9mLF+c9AJurzR8a1aCl92MohthbZQVL
0sKCnkKjNxfnruMk6mPsRL76mDixrT/agdt/9HTbxKduVlGuRiPGiRepj0Eo
+z6fLmZFjRK2qq+meYky1j1Hydvw7a6ZZlv4X1xP19f5atqsuRuE2Arldfp8
/t0cv8CPlgWmfoBcIF/wXj5RymSgRdhhLYKd2BtxVQDT3KnevL4SLYhL2+6a
06dPb29vZwUv+QxmecqbBtTMVpRt8xRxoF+z9+t2u5G9cyAy8HTWVqmomWu7
nmVNp1MQMJiBZyD3b9dFw5qdyIpVkdEKs1ysCpTatYR4J/UeaA4m7kEMxGZ7
UJOk/6xHK8AZERHEdwWCzDi74TUg1cID6/B0IOi8BmaveX03bYp/AAftNrwA
Jfa+bQgKzmpAYgdKoFUgMxhjZlk0U4GzXIlS1Hxjjruqge1RSbJ9W2yKf0iI
GQdNtxUguTQIduC7Zr8h+lhbkYHyKpotO/l2+fLJBEbGRrmoixtJwdW+zCS2
3y4usAHQAEadA6MAeEhnYRLFIurNm6bKCnq14C1nJ/PlfPGE8Q1ofXi/nanF
AkuxxyXv1gkGpTVAU4W4SlsEZJ6ZMxJcQCdJjlKangL0fF3dFDlMmt7Rs2lJ
wsO0FLMO3QY4G1vhfGB5UCJq6Ie4cxMzq19Nmm0meW5b5DkoVesrhsanrvI9
0QgW6BF89uGD0gIfP8q1BLMhtgJg4S3TODTGwj+eea4AW1hxZnX8c9wMOegL
yc5OJLSgqD5+nDD9xfv48YlcaezZAKdtkIZVy+avnzdq2ByX5sMH0LEEeYij
d5jP2Mv9pi12QMWivKnkojbY5NVOlCdP2FNQznwDH6ArTQLMDZqXEAUuhEmK
Jts3DU1j9dMks2jmDKYCgglWAmzNfrcD+y/yGa7ceVXe4DrjtMjUb8GgFmW1
qa7ukEyCKI8ORsOOXv758u3RRP7LvntFn98s/8+fn79ZLvDz5bP5ixfdB93i
8tmrP7+A95b61Pc8f/Xy5fK7hewMT9no0cv5X4+kqB29ev32+avv5i+OkJot
rJ7VrR7i1VYsFQzXvwY+RoFD0ogmq4tUrsDZ+ev/KNNm97Xjy/VDswRUoc9o
lz5+tG6B4+V8VbkBrOkrUB2kYbcTvMZx+GbDQHWgkW5oAWC9b0u2FrWYHdS9
wFCSs1bVZlPdkjoiZ6jgPdUB7m1zClKF69ECVlOD2XEFTs6X35JewpYmZ52/
vJQ4oCUEhoIhHmOXihF79hwJA+yu32AD0gq9+AEz4ZNOpiT7PThIYwxCalT8
nFEU9L2uZi/HuroR4lCvRa+8L0bK+0CPhxQ5+4QiPzxQDq4ldASjNBxTdTzc
DwSRNA6qc/Lqra++Yq/AJ74pxO1BtlJSDAS+rdi2QlWp1ZYyBRNyAIGPLYv9
Tvo4FCNc1WMcsfsE2R0kSdvWPaoUECvFhxato1axEBkgRNgPhKGU4pIK2Yko
xpU67Bd6BtoJQhFwxO5EDYLXaXgcORctOJvNDP29DtgR5z4CSsatTMoPOyQ/
UtRgOviCvZt92oi/76E5gK+GsvRQDyLcUX6rVHePY4NIwoJ8BknrecnSCqiU
cVAOKNWluJWGZi3AQa/ZjqMXA7IOTTYbAOxYXB9rhC1AOEO1LQ23xlhJFsAP
8WQNphj8flOy8CUFpgNGQsxkpxu+2SMuoEAbxEXaG5AiviED27tMAMLAmv4X
sLmx9jgJ6U0J9T2UyHyk5HHgRGi4yPKWQK0W7BeMo/rgelFrxJErHEw4EIAJ
6O0iW2tlU+3b3b6jhmSk5UuJpkQRXhFgGg5uoe+s/UrtDDTihlxLPnS4SNQm
98zLW54CI5DFHQj287LPCEyknBzjEO9SWPpjQlB+3zUAEZqy3jwTyMRygJrR
qlgRvY7hy7siP0BgaK5o+zUDNhP1bdEIuSI0HKDIgXcblBwDmpllglaMMOx9
i2DmjHwLFEtcAsJPlEiLxpBAZFicfF1tEFB03pSPBitjWofZAM1PAuAOAVA8
YHqtKCxkbUeuLWrbr776lD58iUT68FWvrZQGJuJxyk40sApSlcDqvlN9bUPw
yOxz6X/TVJ3Xb+Gir4GBysoIcLqeJ80TgPBMZBxd0b5/p3b0ckthAXgnGpZj
mOP4IB9Ak7bj96LMNnuIDywlUA+LHQrHIRQAwPkGQuT91dp0mgmGa2RJA4Zy
RCJ03cBnrfY1v5IxCqwiQ9d6Qo5d75Z33uDlZyaxTsBsEqP3z5onZBfew2Jl
Bep3UMPAGCupM5sWpDk7GF9apMhUUAS0A4LM2PNPL7aiKC74CDSSuj4OYeDS
EiKwHABeIzYYWEstXsNS7aoyR541ZULpVy1O5ZWU5KIENUci3Ok5DBVYtQO1
RWxM2kS0qKuk7yk9zGuxBbVxCg4ShBjg1qvI4sAyk05XDuEpaaNDBJtIY4Qq
Cz3wCuNiGse0ETBtvvrSaTmw45f2wWwRdug1HNmM7Q7iXkzclVdfA1dgphQM
6x3rYuUuy4TyD4ukvZmibFoAg8Dh+b9o5F2ryMtvIThvGpAMw/eQcZi0aw2t
KvUfLSvwx2lvWjc8gyY4Hi1JZ4xPxtbzyVBWx4Y43WfXokUYs7YfXs9P2pEB
S6xx+dFNAkHBGFNqXnR4IKjPtYuiBBxlvABOQqlUgPLG6ke5rzM6SZuxV709
AxlCm4+5WWkxgdsRmRadXu3qGcOuCrHJsUtZbGbWJfngnUnR5oRCfJV+kuan
yzh06Oz43abiOXlyK9NkoVZPBQirFGyRk6hKqnbm+kFHaNaPJk1wN1y2rhoV
i356MAyizQGl6sjFZ1UHphv+JaqjOaA6euX2sO4wFeD/Ko9PjUyC/7YPBBpt
JaV0kth3bKIl+eH2hjRLxdMpIu1aK0f7sLJistNQfhXkLb9Ck48J5lJ+RkcC
TNt7vsU4qtDZFPL2Ovdrqt7LQFm7bqPoUPlsffBl+mw4sJLIgd92wP36hOMm
AzdSYeAE1hUog1Fih2aWKhrTeZsbAYuOgvOCSGuzk6GZV2xgEquH5ImOeppB
mHfS0fqJjlV14KVCWxWsGppvyyk81wpM5rgKqar7h6hdLKlUtYuoTcJhCGc9
as4B1Pgh99bAqvfVIP4VOBuqXRmFQXeZ22/RBVXOewN6TLT3gv4h2oqLKT6W
lDPIRIF/+TkGkFHDQQ54ezhQRQY3Y9RrzH53qhlg/aT3aUTTMv3du569DZBg
dQG2TjZ2DG+6o/cTI5p7aHhM2fBNQzlTRVoc1+oSGgB6izGOAgW8aFFK77vL
6/A+z2Xm5bUFmVnzhvBE455WNyr8PJAa5bQoo+XU4AIAEjlbiv5X7E23YsZu
i0qQKVtupvO75u868uhgVVMJloy8EESPmOLbxcW7c5lit3RCTjKCkehhz9uh
O/RQS8oVFG2XCrIKijlxH6YP4ah312d6j796UVFK+QBeTGk7TBfxFfEdNAQq
vTuYDjJ3NKxUqnW9PLgcD8lH04eHytvoMz+mmgBAL/Y1emvbqlbLr0K4MZVl
oFqtce9bZbU1Ib/uAlc5mSVNtfXPf/7TOkSDb9j3tE+qtkhO2REtR9f0aEKv
S3j3jjjrHQj3KfoeT1sYRb7tsH7XLcQ7uRCn0mS/q+p3XWbs3Zbvxv1g+Jq/
k+4EJpesHwliUJdHw6mPtDXtnZHnC22QKXMk+R/5Q7LtAd1VNEZ0KPcuwZds
7w/dKRfUNAPuxeWbSTGSSTJ6C46HmhHGuB8oICoMTJ+oDVBn1omSxvpGCSFt
Wu329Q68WJQGPSBgaipjgyMIfFJRW9AyV5TN4S0YqutGZYBpDHoCs295Wewo
phnYSmMTxeqJoFRxgXE9QSqH6TVtLrZVibvppLyu0Fa1tM+iYwoFEw6LqjRF
F2BfKqn6fMUB+THACQ+z2dHQ9H9CHbBVXW0P8ARt3CP+FdrVHNtui7JoMDWG
DmbnLxydg3SCY2o0QJ1RkRF/I/6+h0iNyhFAcpR6GKfj/Jnb5QOxauM+fr04
GJjx8s60Ikpi5cJijk0ZCYj11oI8ZuWU6HzxaIf+puB9OINTGU6vDEvLLmbk
7B+iBrspyisgg/S/AWZpYXol3tuac2IIvb39L0jOWX1y7rNL/pj03NtDY/zr
vBTSyrq67mAasDE3d62fl5pjB1Jz4JIjVyC3Fu1jqAeeDFkxQkF7uxTWqESJ
9VDpR1/88D8sIfffn40ztYvQ2kWxygEz/u/LtuFao23tzRmZ2xyi0N9g3m0w
/APprUPRzf/ARNBvIAv0m2LaxyZtJBs8InXzac6X3iPmB0qRYZKnvkN0dpV0
swxXF1CmEEfZXXTOaD+9d9yITze8aahGwdJ+HCngseMnUxOXr2PbngbhnPgP
gqbiqpTxLDgMoLwh/OoXEC0xbaRbmOaA1dpsVOnfCExCV20TSWe0QcBl7uFr
tgZH9gZ3bKRRUKWFmzsK2Eqdnmi2WAFEPjIWEOCeY2O4lM1EOzJ7UP3Guk4w
7SUTGDJ4LBpLpl8Ucji4dhsolVRfCSrP22+uO6bB8k9OSbO7Ay8kSWvptDVm
eNmsqz0oB+CrNdCXIsQuslaZBT0SUmpmJPEOpUgwu1RtgaEU3AJTYfe0jRGT
HI7ptRLqXKtmvM/rWYO0vNaDUhVhzqrorD9NwTeZrhOS8mEN6hgllcz81YPZ
xy6vMso+Ut7xjS6SkFN9+AqEaVoPHn40SIhdOodbvEeNAgCTH3W3g4VSQYTO
2XQDmdvjFrJHZ8KBhVTRRZ+romkGWYjJKD2ZrQUKHsrUFtwi0OS/0zubR9ft
3VG/Q3I0//b1kbHfoGZG2TR0csNkoV8qOq1iuhpGa4tan2B+ENf2RmzunnTa
B7E0PTvDj/2dud8zDlybfdFS2cXnB2LPS9IRBq797jHiuzx3j1Dajl4pxDGZ
IrgKwLq6kaOsvjkaurUaiq7CpMD9rm1alF0xpwWATdS0VM1Io2ioOyibYbWO
uRVOZrhnTqnucWYxhVGnMB6yp7Ga4u5dtWuMFb1XCKCjKarZOCJ/V7C0aJse
MmOpLTPokAata2WWAi2lsDRmCuM+Y47xuS8+Q6lj5z3Cuppext/WnBnEUEXh
eDqGkpUdZUH7rlrcl1vzmiQBtBfEg0jZro2ltfmaN+vO64eusmBfClpXQ70B
W7GZwfSHPAmlHyvkRUUIUwqrAkwq+VHUD7cusGgRuHfeFYnA98XF4DvWHBoP
SL0cQSeslIW2ulIWmx1pA4V0lpuHfaJAFr7gYYZanUuAFehOQBDB3+pmevdE
JxB62ZKLlZGJ4qn6KFXugc1J2m8gWarFqlKFyGYEWOZKQ0v/1TIWFROJtB27
AWBxDnPBa4MZYKmAY1DKZX2lQofksiO/JVVGs99ugRX+odyTWkir0ayLHXB4
eyuE6V/TXI2aTNS9hBpVyCo3pAg/bmqQnT1IdkwR/n76xT8Huvze+slgzEf+
/CT/Mbv8hOMY5H7BU7H5/DjIyj8RA/8k2fann4+X+ZvwIprZj0UK4bHfOzZA
Av+o34QXjeN84ThyBFf97sdxv3AcOYJ3bxzvy8ZxH8LL/wXjeMY4wReO4zyA
V/gLxiF4fi3+oTT8QCNIvbKF6Hws8eCnArvrOK4Acyf9essoDJlpNT61IfJ7
Bpx/8nrqBuGEPQP+n4KDBF+eMPIAjCckHKgz5svLqePG0z+evyRRmenhnH44
L/b7zvBlNBw8weEm3Xgw/v3x3H68wHX63oHjjsaDJ48Yz9Pj/cUNAid5BL6T
TyPs/8wBz9cc/nPt19XmzvHsYDhq0I3q+/Evxzr8WcM9ACLukVIMjwyoTWAz
eYgN1xw9NLRM3QESFciB0Wsxp9pUW0GBXCnLC9u6uMYccco3HA20tmy14DlP
IURuZaGUTIQrwz+YGSGj/VvpWmE+BAJgTNLW5BHtKoiOZ8apB2tgMVVkM7CG
KivCNwjFXR8PabM4I3Ov/D+smQbAwZVqp3/f87LdbxlFldVVzXdrjDJ697kn
EJ195nWOhetY0rAtrtYtQpJCVL8CpwNwoEhLwjU084MTkJ0VBV+vQ3KD+Sqz
S3/UUEa62x3P2ntJIyN+m1jjYy+HTrBiZbWq3TAx6iAsSjzvgP4PjSPKm6Ku
5OlRyV3gDO+LXGzgNXUy17bZp9uiaShGUWtC7glt5fXVynpZJFvKdAUxHlYF
yGMQ6JZhFNGTcxj/MOuEZIPkQZ6BBM7EmFuWIyAKRbtvD4ZP5mpYfVSL+pNi
PZXaOClWyCVNAd7dE7VxCR6+PBMm021GaCgjMmT9LhJo9Ejomqa4yfcemyuJ
udpUKR4GgB4SMCkEtCSNTAzoUKcZxTqG/9T0SYF7ycey+PseCxc7V7vpYtp+
89eI9FX5wmxkzMCO7YgPpZsLMVYXwo4oaymu1FHzpB8b0xKqSAjoAhHPjXiK
kTewDL76pKs6eqo9NpoGIOiMfD8bfbV+OuwLMIhv4TdEuLLZpyb9vTmp/d62
HXsi//X0aBDnw2+y0HJSeu2oZv64GZrWvpmrmgXjZmBQ+2auPUbh1bev4bc0
a30z54FmYFi+BFNciQ+n7KsDOQF5UP2bo47SbyndRBZpT7vzD3Pq0UeMu3U4
P6qw6Y41cdocAEYSOu4niUa2o5OSpEt0kSAlu6yTYWkgAWM8obL9YaWDBE6a
Eksev1AlbFQh0AGjrF+fgECWHaYV+vPSeCbIspaYuNQJQLPqQsPcVfYPY3gj
sWt1JVVGCo8ybSq7CeJM+ynK3qr6F4lUgRNvNXQyJ9Al7enqiquiy+72B7xU
NZuqQ6YiUCN7ewrL1ik93Jmm2zTm0ouhbZj54U0Y+X4J70smdngaGw9AqS1e
8xDnjhe6aEyDNNjckgrxC07YdOkexWh6SXgDgbrmKq5BueWl3F0BdbYFxZlR
lWBp3aOMrEIcn0TUEfkWnAomVugO4NNbfjdMCJtHyD6BRtFYRiqLLndRI0wB
P0xAvEDzCx4bv260zSEbbTgsRdnQ5hcVnIHRQStqeGmzEV3uHyom1qFaJhmM
DBnp6K0qvDcS8bOje3xzZFim3e5Is8v6OIiyxLWjKAx9xw9FHIVRaGdJ4Nq5
HficJ17m8VVq+8Kzw8gO8jS0E9uz48COUj/3jjVnrY99N88dNxBilfl2knlp
EHlhKCLX4b5t+94qDXgQC88P88DJHM+DYIFHketFTghKMz6WxscJT2Sl11Mq
JfpGpwVO5sQygIwXPGFPqcn6mDug5GPXO5aFWh+6mz2eUhHE0+67jyB6tueo
lrKNuDaaTKmN7Qf5yvXdyF3xlQ92Igk8G9BOhe2s4LEdp0iTpOsmf/JVLNww
DhxvZfMkCUVuJymPYt+OE58D8okfZqkbj7q53goImgXw1rMTL49jJ+AR0Mv1
vDQKMh6LLHWiaNQt8HPXd5LIEwqdjxNFM0NUuj1CTSwv4NzLkzjyEjdO0tiL
AgdWDIIQH9Y3TaJI+GkCMcjKzeJsxeWVMviTOsEqCmMHFjcKAdV4ZSchTP3j
k85MjeVjYKM6q6DsTqeuyRo9rvDbUCW6WltLza1WKA/pE3nPT4HniA0Ngies
+3pOtefSaYYDp5Rn1ndVK8wKE+2ZykNfmCqEMdWFEXIzTJ8pmTCL66N10PcW
dzPBsIBFa3pdpergTZqNNdfowowe6MOl3KqBOlf9oEKj+6vUsI/TbJbWbOwB
zcY+q9pUfU5fw2NelGAi2XnTp2aW4ROaUBtQ1HSgB06PwEnOxNFQk7Lpw3kd
imlOzUcywBkDMFKzXZw+LgSA10d4thKgOESI755fvlXO6/L8XG4EWtZrZZmB
E/G0AUqa/Z6v0FldJeSyRvg7o88JPU84/s49/M35BNqLkNr49DunvuTuSt/Y
pc9phr+Fi+1TahPG9DygNvTZE/TcmNcJsL0vZ0z6MWOayyZ4uHStaYRsJZN0
/f0VpxKpp79jl8tzdqkKb7tt3r8Q6/2V/e4pzGP7Ewtb/oX9h34UEniCAOb0
mUuk6HMkiSMRlKQgMFwC1ScSRQSkoM8evY0osnCovYwyOCHIZXs5I82Spvg7
kL9zGt/pkc1FP0uS9c8DGsGB9jgBNQrcHg05gQKChgtpiFWEE8hVF5K+1D5f
9Wvv0XOHAPIIIMkZKSEQEx/YXI2G49AsGT2JMmzP5XM5i+g5xrb7dc0diZJc
S0pFgB++37TjTemBPtJaF1RQBkoC1IZa+zxmoc0gGvM9xh1m03/4IWCBzaIV
CwLGXRamLIlZZjPLT1jqMzdmPGLZirkBS0A9ecwWYBVZEINJZd6KcfjqMSGY
FXs4BnzybeYLFocsypgNY/tsFWPPOGNhziCUhEnCgFkp/OOwxGOJyyKazYsZ
xG5ZgE3TkHGfRSGzadzYoRn8FKEE0B0CwAZ8AhwlhLETFno4MGAFrwBCy3ew
xUqwyKOpc5zNcZgPyjTED17KMpfFgGHOYsABB4iYgG4c4YlilkfYPwdEMxw4
FMwBKq3YymZOyKw8ZEnA8oCtIua6zPMRXAEoJUjuKEDQ0wwJmCaEtBOxYMWA
uBArCyBUhLBBZ4DThlcp80MEPV2xiLM8B6R9xgkbCIthMJgdIPYCFuXMJyql
OaIbcxwXprIcWmZ4kSVIe8AEOgAlJPaAIQwcOEyEuKDwwbJhUlpIWCbJbQtB
Zc9qG38t3k/lNR+ZoCLvAf/pC0MUn30z/MFTB+C1Hv9wzCiHdlur9AoEdHRu
PY5g9UedvrHAHUq0f2q4qGbq+8R50vuU6+M5OKi24XR+MD25p6y4MRxQdOzI
TfXAQzv3w3h+fhYvl+dh4p0HobcEA+S4i4V9rHt8nPSQGJVixvQ/WM6Ft1yC
QxougvPl0nbCpZ94YXB+Ac75xSK04ws3ci7OvbNgfrZYBG4ALq+/XHowcTg/
O4sugiD4YeR+/oyfZN7T4HtzuO/HY4/9fnD3J+TMf4Ol1mBAj4ckk4jOXRkI
2L4fhE4INAsBS8PZVz8fDqEyCgSMHxkT/GDZvh3Y4dkyXiTn7vxi6bsLz8OQ
KJx7FzDf2XxpuxdhFCWLJHR9P7lwwyhIzuKFs4wv/MWFY59rKiYXnu+HbrRY
ntmwqktnsTjz4yCeB0sIvoKzhZ0sz5dnEESd2V60DJehc+H7MBAECefO8RjM
j/dwHDCDqgunSrDBcbkDRJQQnjmOFzpeEs2dZJmcO0Fw7i3tZew40VmwxAgl
CG17GQT2YrG0vcV57PlzP5wD+RfL8GII4Y+W+eGheMF0Pw8FDgfjhreVvJVw
fJOLCu9VDGC4g5/1e7FiSFXtqcuOCAi8H9GRKgLLCLtTZtW+3fR5/sG4OApu
/b/95OyyFVMlSa3MfPRl/P0FQNan3XXLOqvSQ36lzOljGEBFaRU9uB8tKAjp
yjtAanyCQ9UmHnRHpeMnHUUh3cJV731J1zGVXha5i9Kd4dQrJ78oMTyrkFwh
l/pGAtt79CQiNySJe1czIWckJsdk5anRoH1C7X1HzYh9qaXLezc4oHHipN8z
Ht4t1OUIm2F59K9oR5z4vhVZXqL/fzKN7hkQNzxsQJ5qvZhW6VArktoK3fAi
dA9aC82TT0nqFzHYAd/3pLGC3yDbnzNCAShb07b8YP1c65LMYwdUyBmqcLBX
95Q4zOcFse88XgcDRg9q4cdr3x+sQ/oX8La/REN+me08qE8nDG9P00t32cn0
wM5HF0BHb+FEgQed5rEfIeECex7F4WIOz2LbDYPET+b2HLBOYj9Ogrlvw4o5
82U8d2EZe1i9+Hwe+vOlG9nngedEsZucLbwkjJcXUXgOlL9wAlj2+eI8mYcx
UPJsHi4XXhSexXNkuIcUvdQ/hoKXulWpd5UNemQlrpEQMqsTdT6bqlRVqLl8
eWjPoC9WTAWIuEq+YGPjikVtcaa2VAAfVKINt69A8pbnrpY855S5Og2n5BI8
P/XSHeUfH5Hd9PCLbo27PjAg5Qj0mFhK4ugG7/VDmikMRM4DDgwQRZmbcgEL
6HvRSnheHNkOd2zOuRcFI+YUTpoGaZALx45z4XtJZsdB4OQd0Hd6Fg9ncUTg
ijwKYEQn9FbRKhG+neerZOX5TurlWZJyUC18NZomEnbGI/hPJEJkuQ3KJ3eS
7Nj6eJhrcO0dzTYHuGPsHUxt5KR+NXvD9VtZTlXHi8eaj2WJ7jss0T3+UTUG
/f19/OPPXPyUZ0HqOBnP41WSrJIsclM7yFZ+mgg3zEEx5pkTJ6txVtkPXDd2
g4C7TgLrlofcTsRq9cDig7b24nQVuzBYGuZB6KbCXvHA52kU2z73eOjD88gd
zZJlK5GHabhKQ5G7cZquMtCboptFZ+2l6/3oDYoxJz+wXzH5FI+5v4DHDmgM
/yCLvfr2tcFizojFnBGLOYdZzDdYzHcNFvPdEdPI3WmTa/zDXJOlUWYnsHhp
EnlZFPHYjoWwgzRJ0xycgTQIMjsUnI8onaS5z3MXfosk8ZzUyTw/c91PU9r7
Ekr7cs+6u80eD+0WuTrJ1oBtaEQ2xWKTjwdvVIUHeO0SXv4r8+C6pLer+c6G
A5K/PbxfuS9wVkeYMedPu9RUYTOekzxydaEHTSe34akAx9ioMMIU3EgQTdOV
LXf3W5s3cmLFswRjIjfFcbOabF5/lDbHop4i3ctNi+5O3aKx5Mzy9hCszZow
vB1C39wFLjDSQMKUVTu1TWocVtAXadaC7klEAwpQ7GtZIF4DmtW2xO0MeWkz
v+HFhuikjubl4gaid7OmDMut+nu2cetkfOMJhSryUlc5weauuz8mV4Us+viC
JU8A5z1tuxqpprsYA//EgLoHTA7Iyv0Wb9xXo2q/QJ9E6m6lL9kZVqDLezYr
Ic/QHYw/Od2Ac+CmUrVtZdGBFWKGTB8/byB8uBZ9uDkxIk/1+SXP6KyZ/mLr
ygldmwAR2wgUeY/ZINTTAxjXNg5u9+2vdutTCPq0kDW4V1cVbLCD157gof3P
ImMNsOmImlU3FLfL4wljaICMurYCT33T2suFt7p1P4QECSuVtqk/PnIIbnVx
RNFMkEOsrlZRnkHDYjUkBf59ACx+l6Obt/Ls6K588RAQdB0L1v2pUrSrPQcm
bIUsXyvBpTXGpeozpkr3xhqPjhaMr7vHA4KiAV6iPooj8AZidXZBn1sm1usO
nDTytlp4afVvn8nj9a+7rbljXcYJot+XxRmj9H8Mo7vKC32sKWPfyb8vo6sX
2H8iNKfs7dnCGTpK+HLRV2CfqrolJssahyVNWh5pl5gWvkt/fKZYm2TyQME2
Pj9Uw8zO+U7uaQLq4JaBGf+RHoNmvRK0XVmDssA7ZJ4vL/+Ir96IlaC/zXLK
2PffA6Knkq9A//z4o2wgN1RzxPyvWIbV0cwZ08wZ0swzaRb92jR7oCLdpNmg
Kl0TbVxT/W8mmjsmmjskWmASLfm1ifZA2b1JtEHV+G+EaN6YaN6QaJHpYzq/
LtEePgpwQDwnvyX59MdU84dUi4ee+W+Bag8epPg3ky4Yky4Yki4xSef9yqR7
4FjHb11IwzHNwpEJNZMNvv8bINp/O7exwx6MJKq4vvfGoLC4xs90GFJS1/RQ
ppK6RHuqeVZXwHXPtAd0yr57Or+3EETycUHtCMn7OBLQ8tztpwCXLUbAuybw
wS8Cfk6xZX8dBju5LvL+pP/wIv57R2Aevt//8/hPp1MI37Nr9TeNZGxb4XL+
F7jjdLCDQidybnl5fa/ELC9uinwP7r+GtqBbRLsgudF/xUAegaGid4gI83xQ
DajvWdGnnIjH+jjVMv4IENtU6o+pbehCBIZ/b687j6j+rhNSFdfvTQERep2D
INYl/olB9nzD64K9KPbNDYeFtqyLQkXKt4fxfQOjsWfVvtkIeejrDIiZcyyg
hOCiR9oaIK2DAfoblhiyZtVU/nU8SqIXJUgp3zD6643QnGKReXZdVrcbkV/J
m+MeWgLrJSIlNuxsxv5UAVoT60/VGgDibds0VTmBBtD8dV3VVXY96ZorWlCL
t+tqC1BdVE0DQc8Erymw/vj//i9idCk2HHMmVr+eeGgO4pwVRFLIKzPr/wPC
X+LnG3QAAA==

-->

</rfc>

