<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-xue-distributed-mls-01" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.1 -->
  <front>
    <title abbrev="DMLS">Distributed MLS</title>
    <seriesInfo name="Internet-Draft" value="draft-xue-distributed-mls-01"/>
    <author fullname="Mark Xue">
      <organization>Germ Network, Inc.</organization>
      <address>
        <email>mark@germ.network</email>
      </address>
    </author>
    <author fullname="Joseph W. Lukefahr">
      <organization>US Naval Postgraduate School</organization>
      <address>
        <email>joseph.lukefahr@nps.edu</email>
      </address>
    </author>
    <author fullname="Britta Hale">
      <organization>US Naval Postgraduate School</organization>
      <address>
        <email>britta.hale@nps.edu</email>
      </address>
    </author>
    <date year="2025" month="September" day="09"/>
    <area>Security</area>
    <workgroup>Messaging Layer Security</workgroup>
    <keyword>messaging layer security</keyword>
    <keyword>end-to-end encryption</keyword>
    <keyword>post-compromise security</keyword>
    <abstract>
      <?line 44?>

<t>The Messaging Layer Security (MLS) protocol enables a group of participants to
negotiate a common cryptographic state for messaging, providing Forward
Secrecy (FS) and Post-Compromise Security (PCS). Still, there are some use cases
where message ordering challenges may make it difficult for a group of
participants to agree on a common state or use cases where reaching eventual
consistency is impractical for the application. This document describes
Distributed-MLS (DMLS), a protocol for using MLS sessions to protect messages
among participants without negotiating a common group state.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://germ-mark.github.io/distributed-mls-id/draft-xue-distributed-mls.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-xue-distributed-mls/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Messaging Layer Security Working Group mailing list (<eref target="mailto:mls@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/mls/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/mls/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/germ-mark/distributed-mls-id"/>.</t>
    </note>
  </front>
  <middle>
    <?line 55?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Participants operating in peer-to-peer or partitioned network topologies
may find it impractical to access a centralized Delivery Service (DS), or reach
consensus on message sequencing to arrive at a consistent commit for each
MLS epoch.</t>
      <t>DMLS is an MLS adaptation for facilitating group messaging in such use
cases by instantiating an MLS group per participant, such that each participant
has a dedicated 'send' group within a communication superset of such groups.
This allows each participant to locally and independently control the sequence
of update processing and encrypt messages using MLS accordingingly. This draft
further addresses how to incorporate randomness from other participant's 'send'
groups to ensure post-compromise security (PCS) is maintained.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>Send Group: An MLS group where one designated member (the group 'owner') authors
all messages and other members use the group only to receive from the designated sender.</t>
        <t>Universe: A superset of MLS participants comprised of the owners of all Send
Groups.</t>
      </section>
      <section anchor="protocol-overview">
        <name>Protocol Overview</name>
        <t>Within a universe U of distributed participants, we can resolve state conflict by
assigning each member local state that only they control. In DMLS, we assign
each member an MLS group to operate as a Send Group. The Send Group owner can export
secrets from other groups owned by the Universe and import the epoch randomness
through use of Proposal messages into their own Send Group. This enables each Send Group
to include entropy from other receive-only members of their Send Group, providing for
both PCS and FS without the need to reach global consensus on ordering of updates.</t>
      </section>
      <section anchor="meeting-mls-delivery-service-requirements">
        <name>Meeting MLS Delivery Service Requirements</name>
        <t>The MLS Architecture Guide specifies two requirements for an abstract Delivery Service related to message ordering.
First, Proposal messages should all arrive before the Commit that references them.
Second, members of an MLS group must agree on a single MLS Commit message that
ends each epoch and begins the next one.</t>
        <t>An honest centralized DS, in the form of a message queuing server or content
distribution network, can guarantee these requirements to be met.
By controlling the order of messages delivered to MLS participants, for example,
it can guarantee that Commit messages always follow their associated Proposal messages.
By filtering Commit messages based on some pre-determined criteria, it can ensure
that only a single Commit message per epoch is delivered to participants.</t>
        <t>A decentralized DS, on the other hand, can take the form of a message queuing server
without specialized logic for handling MLS messages, a mesh network, or, prehaps, simply
a local area network. These DS instantiations cannot offer any such guarantees.</t>
        <t>The MLS Architecture Guide highlights the risk of two MLS members generating different
Commits in the same epoch and then sending them at the same time. The impact of this risk is
inconsistency of MLS group state among members. This perhaps leads to inability of some
authorized members to read other authorized members' messages, i.e., a loss of availability
of the message-passing service provided by MLS. A decentralized DS offers no mitigation
strategy for this risk, so the members themselves must agree on strategies, or in our
terminology, operating constraints. We could say that the full weight of the CAP theorem
is thus levied directly on the MLS members in this case. However, use cases exist that
benefit from, or even necessitate, MLS and its accompanying security guarantees for
group message passing.</t>
        <t>The DMLS operating constraints specified above allow honest members to form a distributed
system that satisfies these requirements despite a decentralized DS.</t>
      </section>
    </section>
    <section anchor="send-group-operation">
      <name>Send Group Operation</name>
      <t>An MLS Send Group operates in the following constrained way:
  * The creator of the group, occupying leaf index 0, is the designated owner of the Send Group
  * Other members only accept messages from the owner
  * Members only accept messages as defined in Group Operations
  * Each group owner updates their contribution to the group with a full or empty commit.
    To incorporate fresh keying material inputs from
    another member, the group owner creates an exporter key from the other member's Send Group and
    imports that as a PSK Proposal.</t>
      <t>To facilitate binding Send Groups together, we define the following exported values:
   * derived groupid: <tt>MLS-Exporter("derivedGroupId", leafNodePublicSigningKey, Length)</tt></t>
      <artwork><![CDATA[
  This is a unique value for each participant derived from the group's current epoch    * exportPSK: `MLS-Exporter("exporter-psk", "psk_id", KDF.Nh)`
]]></artwork>
    </section>
    <section anchor="group-operations">
      <name>Group Operations</name>
      <t>Similar to MLS, DMLS provides a participant appliation programming interface (API) with the following functions:</t>
      <section anchor="init">
        <name>INIT</name>
        <t>Given a list of DMLS participants, initialize an DMLS context by (1) creating an MLS group, (2) adding all
other participants (generating a set of Welcome messages and a GroupInfo message).
It is the responsibility of a DMLS implementation to define the Universe of
participants and the mechanism of generating the individual send groups.
Two possible approaches are described below.</t>
        <section anchor="over-the-wire-definition">
          <name>Over the wire definition</name>
          <t>For example, $U$ can be defined over the wire by inferring it from a newly created
send group.</t>
          <t>Assume Alice has keypackages for some other members $M_i$</t>
          <t>Alice can construct a DMLS group
   * with a randomly generated groupId
   * constructing a commit adding all other members $M_i$</t>
          <t>Alice can distribute the Welcome message with an Application Message that indicates
   * this is a Send Group for Alice
   * that defines a Universe $U$ as the members of this group
   * with universe identifier equal to the groupId for Alice's send group
   * and defines a common export key length</t>
        </section>
        <section anchor="application-directed-definition">
          <name>Application-directed definition</name>
          <t>$U$ can also be defined by the application layer, which provides each member:
* keypackages for all other members in $U$
* a random universe identifier for the DMLS group
* common export key length</t>
          <t>Keypackages can be reusable, e.g., marked as last-resort.
Keypackages can also be single-use if the application layer retrieves $N-1$ (where $|U|=N$) unique keypackages from each member.</t>
          <t>Alice can construct her view of a DMLS group:
* by creating an MLS group with randomly generated groupId
* and then constructing a Commit and Welcome message adding all other members in $U$</t>
          <t>With this approach, an additional message is not required as common configuration items are provided by the application layer.</t>
        </section>
      </section>
      <section anchor="update">
        <name>UPDATE</name>
        <t>A member Alice of $U$ can introduce new key material to the universe $U$ by authoring a full
or empty commit in Alice's send group, which provides PCS with regard to the committer.</t>
      </section>
      <section anchor="commit">
        <name>COMMIT</name>
        <t>When Bob receives Alice's DMLS update (as a full or empty commit in Alice's send group),
Bob can incorporate PCS from Alice's commit by importing a PSK from Alice's send group.
Precisely, Bob:
   * Creates a PSK proposal in Bob's send group using the exportPskId
      and exportPSK from the epoch of Alice's send group after Alice's DMLS update
   * Bob generates a commit covering the PSK proposal (for each send group in which
   he has observed a new DMLS update).</t>
        <t>The <tt>psk_group_id</tt> for this PSK is more specifically defined as follows:
<tt>
psk_group_id = (opaque&lt;8&gt;) groupEpoch | groupId
</tt>
where <tt>epoch_bytes</tt> is the byte-vector representation of the epoch in which the exporter was generated, in network byte order.
Since epoch is of type <tt>uint64</tt>, this results in a fixed 8-byte vector.
<tt>groupId</tt>, which is of type <tt>opaque&lt;V&gt;</tt>, is then appended to <tt>epoch_bytes</tt>.
When a <tt>exportPskId</tt> is received as part of an incoming PSK proposal, it can then be processed as follows:
<tt>
groupId = exportPskId[8..]
epoch = (uint64) exportPskId[0..7]
</tt></t>
        <t>Per <xref target="RFC9420"/>, the <tt>psk_nonce</tt> must be a fresh random value of length <tt>KDF.Nh</tt> when the PSK proposal is generated.
This ensures key separation between a PSK generated by, for example, (1) a PSK generated by Bob from Alice's group and (2) a PSK generated by Charlie from Alice's group.</t>
      </section>
      <section anchor="protect">
        <name>PROTECT</name>
        <t>A member Bob protects a ciphertext message and encrypting it to $U$ by encrypting it
as an application message in their send group. As in MLS, before encrypting an
application message, Bob should incorporate any DMLS updates he has received.</t>
        <t>Each of the 3 MLS configurations of commit are possible:
* If Bob has observed no updates but wishes to issue an update, they can author
an empty commit.
If bob has observed DMLS updates,
* Bob can incorporate those updates without a DMLS of his own with
a partial commit covering PSK proposals from each updated send group.
* Alternatively, Bob can incorporate his own new keys by covering those PSK proposals
with a full commit.</t>
      </section>
      <section anchor="unprotect">
        <name>UNPROTECT</name>
        <t>On receipt of an MLS message, a member can look up the corresponding send group
by the MLS groupId in the message metadata and attempt to decrypt it with that
send group.</t>
      </section>
    </section>
    <section anchor="dmls-requirements">
      <name>DMLS Requirements</name>
      <t>The application layer over MLS has the responsibility to define
* The Universe $U$ of members of this DMLS group
* Mapping groupIds to members of $U$
* Additional common rules, such as accepted cipher suites</t>
      <t>(nothing inherently requires the send groups to agree on a cipher suite -
each sender could choose their own as long as they agree on export key length
)</t>
      <t>The DMLS layer should recommend a policy for issuing DMLS updates.</t>
    </section>
    <section anchor="wire-formats">
      <name>Wire Formats</name>
      <t>DMLS uses standard wire formats as defined in <xref target="RFC9420"/>.  An application using DMLS should define formats for any additional messages containing common configuration or operational parameters.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>DMLS inherits and matches MLS in most security considerations with one notable change to PCS nuances. In
MLS each group member can largely control when their updates will be introduced to the group state, with
deconfliction only down to the DS. In contrast, in DMLS the Send Group owner controls when key update
material is included from each member; namely, every member updates in their own Send Group and fresh
keying material is then imported to other Send Groups through use of the exporter key and PSK Proposal
option, with timing controlled by the respective Send Group owners. This means that while the PCS
healing frequency of a given member in MLS is under their own control, in DMLS the PCS healing frequency
and timeliness of PSK import is controlled by the Send Group owner. However, the Send Group owner is also
the only member sending data in the Send Group. This means that there is a natural incentive to update
frequently and in a timely manner.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
    <section anchor="references">
      <name>References</name>
      <t>CAPBR: # Brewer, E., "Towards robust distributed systems (abstract)", ACM, Proceedings of the nineteenth annual ACM symposium on Principles of distributed computing, DOI 10.1145/343477.343502, July 2000, <eref target="https://doi.org/10.1145/343477.343502">https://doi.org/10.1145/343477.343502</eref>.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC9420">
        <front>
          <title>The Messaging Layer Security (MLS) Protocol</title>
          <author fullname="R. Barnes" initials="R." surname="Barnes"/>
          <author fullname="B. Beurdouche" initials="B." surname="Beurdouche"/>
          <author fullname="R. Robert" initials="R." surname="Robert"/>
          <author fullname="J. Millican" initials="J." surname="Millican"/>
          <author fullname="E. Omara" initials="E." surname="Omara"/>
          <author fullname="K. Cohn-Gordon" initials="K." surname="Cohn-Gordon"/>
          <date month="July" year="2023"/>
          <abstract>
            <t>Messaging applications are increasingly making use of end-to-end security mechanisms to ensure that messages are only accessible to the communicating endpoints, and not to any servers involved in delivering messages. Establishing keys to provide such protections is challenging for group chat settings, in which more than two clients need to agree on a key but may not be online at the same time. In this document, we specify a key establishment protocol that provides efficient asynchronous group key establishment with forward secrecy (FS) and post-compromise security (PCS) for groups in size ranging from two to thousands.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9420"/>
        <seriesInfo name="DOI" value="10.17487/RFC9420"/>
      </reference>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
    </references>
    <?line 299?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA41b/XLbRpL/f55iTnaVJRdJW4734tUl2ciS7WhjfZwln29r
KxUNgSE5JxDgYgDJ3MTvss+yT3a/7p4BBiST3aooJIH56O/+dc94PB6rxjWF
PdJ7p843tZu2jc31+fvrPWWm09re0xv+mZnGzqt6faRdOauUyqusNEvMzGsz
a8afWzvO+yXGy8KPnx8q306XzntXlc16hcFnb27eav1Im8JXWNqVuV1Z/K9s
9kZ6z+auqWpnCvpxdvwaH1WNbx9u3u6psl1ObX2kchBypLKq9Lb0rT/STd1a
BUK/Uqa2Bqte26ytXbPeUw9VfTevq3aFp+fWezN35Vy/N2tb637UnV1jYH6k
9Fgvu1EFj/JhFL0DoeOmGuMDX7N6vWrAF71YVb4ZZ9VyVVfg1vaT7m3Zglit
/zURWouE9j6BZhrwjqbQ86VxBZ5Dot8728wmVT2nx6bOFni8aJqVP3r2jEbR
I3dvJ3HYM3rwbFpXD94+w/xnNG/umkU7xcy5rZfjpanvnm0qzuU0sICgfZNs
0U2YyBoTV+2Y+uw3DWKyaJbFnlKmbRZVTeLGLlrP2qIQU9o7x+L6f1u7xy/A
gSnd3w2J+Ui/w+76wjak05E+K7MJD7JRPJj6PVE4KWXM3o71/1x5u1roTxP9
vr2zM7Ood+308VpfmHtT6CvodV6bvIUk9HW2qKpisOf/8XKTIqz1fbnyE5u3
u3Z+DS03Rv9gip3M/dtbTnmdyQLr9NupsqqXWOketqbIPftf4/FYmynUYLJG
qZuF1b9lgnoffn6gYcNNlVUFTNxMC+u1EePV1UyvTN24zK1M2XjdVKpERGgc
UWo0zH9ZlZrdogIHq4XLtG/oJejp/WpEO9y7nAh4W9UPps4VSKhtBgreggAD
9yIpjE96h+ppvDq5Ppjo68YVxUg3C1tjb/z5aml1i5GZ8darB34he1qIOrc1
7ZdBbIUt5+Bqadb4u7PaNTp3s5nL2qJhSnt+1Qa/2sxri+XKnl1hELO6vbXs
jUgEX8SeFjGgaU3BEQv+gMix1s5rB+agE5dB6bQteNFmtSrwgExiom8WGIUo
2y6xgM6tz+BK4C0J1GNoTO9TfD4YgaZOdTMmiHanASCKAjBzQENs1kTReGXA
xXyo2Ac4d9U2OmqX1ukYFtkw2xOxrqXL88Iq9Qg+2dRV3mYcFtVVuma1srWs
5Eq9sramQEqfJDvenSYh9QTnBa2rqqjmDiSSqmbIFKSqVGqkkCwDI0QdZFSb
wv0dS5zaArZfr2E19b3LLCRE8sFGrJQ+dZAmo414+7cWqiEKad26xhLaNMx4
0FvDMnBiJbwSSdeuqmwBUZAWSK+mZKGb3Kwa1iQPn5nMFa4REYgM+0wDkfg2
W5ANKbGhKUykhJDLTv6yqsyELFONjWR2swC5RFb6Ti0MiSdHZqUEnusnYD1/
EhYiTbtozW0ZTA/LYQdvG3J5XppH+4lik4QLIZ9s7URiKyropVizCyepHU8g
RNhGwVYeRG0Vlm9XlM7JLEmRwmmXXTsrTYwZGoc74xf+K9bRSyjjqFlbU0CA
6PMaEzFtUT0QWa7EnFVV00411q+WJVnNDMFFVzwl4eOJDzJSwjUtQNYCn/6t
NC9RiZSPIF02+LM5LOLRI32DfORKMuS1QpQDa+8ECByn+pSIAfMnL3fzkhW1
tAR39D5JTIY9qR5KWz9BhOT8Cd8til5EJDdhRmZ6Dkn97KqEGsALAq0l22bu
6XWyJ/Fta5D+sSQP8khcxwNrIJoHsYKlAVnk9JZWYxo9/SLqiGX1LlgPCeQq
hqjLe3JO+6DUp2iEbdhUf6TpCXYYbDnSDxRpSzDiqwKMSAiGgc0QOxu4jjKe
OOLgS0YaJMnGGUazr4hEFrazzgkimCY/5j1kFZUuMfBCyFKiGg0F+b16ySpt
8luEwkTbz7DDRnlKeM3ABIO10dCc/J+EGdUgDrWkqfycY05iyqpZYPacIwjJ
DlKGrZrEOmCWFU11Ne2wQSsMNyZ75rZ/q8R7ijbHpiSj1TqlOdjSmCUZzU4M
wdXJMmnORzRUU0zX8Bnm6+11l3GIt9KCf7ZTImVeVFPwMQjZXTrv4kcwrnNr
mxgntpLAB0QdV1tKpj4AIQw7JsRMGZH8+13rwKdf2czNkHg0MhHI6KcJPCg7
PLW9SW0LdiTQvwk+Juqtqz2C9bZyPJgvcnaYkHimFluJ955IzmGLre0MkQKh
09Or5YSAU1Xmo1T2Axtdtr5JUQuF0UI4D+tGMml9BYUFExALI/VMLUKtD6r5
TF5DiR/xa4FvWH2QeeE5cGUaSxiUyel2QNBvSTsespK8T26H2apzdUo+ZUT4
5C7z1sDKG8ui8HaoDQh5SiCvmajXnQ8XnMEXQe5EQSfmXLQl6tmMZCPJ6p/N
clXYkYJkNveH/Icyo1T4YNZkFpQSg9UjbFSZYyvY0jQTOnNFI/a7udzUcCAt
Bc2uahRQtuEMgsdAfzTNjHSgTZKS6kNZp94N1RJcEH26DSGkAiCl4u2mOitR
p/j7wpCx0eYNQed/R88q+ja7VViYgF3GAqcVi+izURAjWW3R20JVUwixC7PC
S49IWCDKh4hORX8cyZEXdnJ6neInwr4guqwoh804jq8DsIn6JfZ/JyYs3HxR
4K8RR0DGu+M491AFwsX95raMMJdqCvLVRok2fHQMj3owcS88KjnvBrtdEujs
xjVuaSWbgGeKOBxcoUamwHlF0KYvK0KGTjC6FnwfCAzBHgZBktSFNbkXgGSm
BE95BTK+UKKzsiJzEpMjyNge8CTRn5vYCWmxqLwEpXvqTsgeKiCFMHq8MgL8
fIihkiokCYKbid42S1Gj1yXCLAqHOetYUVBu7HwdyqkgJdhLFfYLfEDI3gI5
+I3wGOY7YgArQF9VW6umh3CjpIwhsWO8I8/Rnwh/UAj3Zi2Rgl0D1T+ABJlN
REcnx1f0idi+VI5IaUkLwEE5DAbZlKBy8LjUrth0nOcCc6J/qB5QVMIj+prT
foYJSAyfwgZnVKQgTTMfVIDCPxhfk0mMBEdzPeUZT8O0yrWoIADa3i84X6cF
CxQkCgsew3XPTrl0mRSpbVpROcVhMuSNxKw4hpgU8Sm/hkkvRZYeK3tJyNtJ
AOh15bgBsWkkhAlSEHYpNFJpGtB3itAEyfk+fRGtA4awKKI9NfOeskcCwZmm
qqNq5wJ0qixrVyxMeNeMq6DP+vlIO78JtgUUhtkJ5KL1LwdAXqI7St20JOrw
O6/Ds85/b7whWc2YDfC4IRLP89+YWOsF4gK6CpmNM2xM0wInkzoSGmCDJ4tb
rpp1KJalSXczLMJmNUX3O8tyWhrOawVGrNqAiXmSKdN6ZpTWMoKnSQFc+QRY
jWdYM5FMMh1lXaJuWD9vIZjai50xir+6/rHL22ThVV+6A5Y5idP9SmS/c0v7
cM0gEt6woEBcru9N0VpPFgRhEyq8x0PmyOVH+hYmOX4TGNnfC+95l7N8b8T2
dFHl9qqdotC5lgrnR4uo9N6W82ZxcKuYJy1Bnip1KqmQjmXjrm0xqNojGZ3Q
mB5IC5GA0pekKiFZGIGEtoiN8h+v/B317vHxsyOifzx9O7lg0h5t25y6dktq
Wgc8NpJYEuI/kZ8Syr0x6U9gxLw2sC7unWBbqMjq/eOrswMxxaH8Z23JLSlI
nqqEs4uzG6XeOQqLyFAUOOGEp9uA0JXILRxOyMR4ACPWz1Rk6v3DA7HAzfbM
SO+/OKAmBL8oCrXVYvB6P0EKgG1SXH+yRUbAb1DSGxHbWTnrSoqDiTprYkCB
J60IAfT52wipBJI4Rpror4lxdoXlZpMzQBJslQGaOc/YLiGW3pETQEMtVdPk
CF13CGgIfgNaCm5l1hWMjdiobde+pHoCauF67RE3AXjJB1cH53ESod8mYFw/
/viYQefUdiGsGszkdhkQAaPqkPs0gcIHaj1xmEBK6WglqOt9C1EfF4Q4qEeG
wAGAdSehFZszBB/2Ux6f/+weYyrPIXokNbRZE2U+DwEcvhJCotTooCLIMDr8
WS7DuiX6Jivo743nX5HQ50yWxoYJBSpKfdw3lkP/P1Q0pEtqDHohp+kiRxIs
SRy8YxxjmqAHGtiZEmnJ+AHUimh1Uy5dp8dRe5AgArT9t1Z6ul0QOsv7rRGQ
ev3JSmSqPRmhPS2BiNNAwVFRDC3hfyxAy+YDe4smRueSqZ2FRkzSmJdzQUT7
haNQGoNV0iY6Uk+3zGlblUjC2BRDo5HslEo8GUjM6+nv8Ppjsm3wmNq2nno7
I20nc4ByOicjRAbgaXwzpi5ajSy9OTMKQkrKMUFNN9stC2wBG7QEqB9fjA8f
631paD7+9eOv3148PohZaCAT8tBEZpPdfkUCoy5hEtfkJBVSmK53x18xsd9x
vKd94bXhfqFwptebnvSbLhn0yG1MsfYY+kbcK8I8ElXfBSD/olI0wFhWRTw8
q8qZm7eSHxHIUKhw9ExLop0qkP7Xx6vT45s3VMeHfqWIFLKL5u3CCQ31ch7Y
cjr0FTyvTd0Z24U6j8VD+E5t4Dvif9tDt9yDmn2iFzs3dR53kzWayMDJ5fk5
JedPpJvX1TQ2GH23BZtAODTYZ8C2C3TuJupgpGhNkUMPRok0Nsc4I6xBSYXh
oTBPwHAwLM0nVyDUoagEGMMWAeGdRHzKc1exGeSYtcEC4XyDW7uCsfydZAiG
wXmPvHqcJi0E6HabHm1mja13yUwIIylEt/B91skoqUY6BiTvd9Ax2QR8sJJp
zYUk0WrKTZ9ccm+68UGoFm8JGfJ84MPbvlKn7ej8hLqeoWyUo6QYiE1sswHF
3d7eqnQd/a3er1YGMeabV98dCHlvWDy/dk5PcyQs3bLkfp6uwfxthFH0a3yP
vMCnhCtExQ45hQotdNAC04muIOkH4/s4wy3QeIxJ60orcgK0W2a278TRuusV
6Gnhlf/58nYUehbWt4W0i2Dc7jN4fzXmZYS8iboNPN1GL0sXC3L4n+9uY81Z
Uriggx32ugH3E/E0g6e92bFMguOx3Akghs4y+Q3D7tQ8uo4kbzbtTvN2aC3m
9W9TO//rq8nkJyVygSZFHAeDEc8nk69/4hXUFeT9yy//8eHtyR9fvnj+5YvU
hWxXZQUB30pXZ0otAakzQ3qVIgh8SLLUt1Kb3NLxW7lt8y5RaTj5lI4rY0U4
AsQiBjKFri2LkRbo8810PWwqc8mwPYjdcRBZ5rFGlUpie8bJwtSFsztmhVO2
D5c3b05ukkxAe4Szf/Z4t4IvcCnTJbjkVpOgaFhLSAKD58pwyZ3moC6zlaFV
kMRGfcy2zPVdONZIljOl2rEQR9F4LJLGamrcJlHFx8ATzRXscxMj+OxXOhRt
fVZlV4kwW850uWAhRHE2430Hkaysur2AspHDPJU01DNFBcGFobwehZNEkgyn
TEVtiUEjBMtPN5dPmRkpCc2bCQqrIR9HKmI/PcAhcEOmSYd69EaFopnPzIZR
PbXuFIDJwvkgnz2FVSGwlXyLKGS1LbrivgFK8K2FJIcQ0YM9VdomikIR4HLR
WexlKcpcNclhVmcWJtoz0VJU1Z2mg1gGErVUwrn0MbtSISCmDh2e5bHFF412
aRsDCRgptwFGoDQpl+USgmtiU8E0wyJSPRIdbB8tbmNkLlhp8MLsLNy7+lxJ
d3FQVvEp1rCkGhQE59ivu1hyJj39ZILUGcc9Eg1ws24L6nXzSYjxoWNIR00c
HfDcUWGo9qkPJ72WBR9pIC0H8OrDhY6uC7B5SypZSY9VByFIg+zcdMFNrimE
k2mqS+jEQqS07hfbrnYOkgZ0uKwpEQMGBAYtd09WFRQhRwLkscRG6nPcJP5E
PYS3fGnOh4s8LXXV6QApJ7TKTQa5VbfZSE1T0UTTvY5U94LreMVAW2jCxMXk
RHm9o0zw3GwyrpQm9I76gHrPsZmGeZSPlnReKEydVCXdPOOQR5Z92lW7wUZJ
knTt1eu984/XN9S2o099ccnfP7z5749nH96c0vfrH47fv+++qDDi+ofLj+9P
+2/9TMLxby5OZTKe6sEjtXd+/Je9EVO1d3l1c3Z5cfx+rzvk6K68UXiWM15u
8gGUNQwpVN9MIix9cvXPfxy+DIp4cXj4xy9fwo9Xh1+/xA/K77IbN8blJxkX
pR5r+KSH6rrMrFyDODUiFUNdsEayd0jz6V9JMj8d6W+m2erw5XfhATE8eBhl
NnjIMtt+sjVZhLjj0Y5tOmkOnm9Iekjv8V8Gv6Pck4ff/Kkg0xwfvvrTd0rJ
6Uk4DzqhSJX3jVvpMFI4cKFpCGvmZp+8AJAHBuuOk7LBdAmndN0JgYVaE3Qv
s5yzsqkYK1tDVxzoNo7csOuPJdLob+q5TW6WRRTn6iRVQqtiPlL15sNjCy/H
YZw3cxtvELFrkaHkZAFhwuk1Xw7izQzd4nChIzw8vIknE0KTF6LI0UL51Z91
+HivJt/qhfyXpjvDlHUtXy4JTEeuOpA1vMjDWmDAq7YOVkIdIOWsSEGaGIOD
jOEdokGBQyzwvdzkdERVfP99FLKjW4bTMr6F0fcqKM8BddKtlk05xfPopTVl
OINBQVNIKxOWoBbW8OWAWS1XBkN/e869+yAWwZbEY8t5pZdNoGWoKzKwrWUV
N4QchO74ZiBdoaKCVG5cOb+DrU1ekmPZnSbBFyd9pfhcqr8u1R39MwIJyGTr
dlYiILnyzC1aoDOkAmoo0MEnCbiJYFUF1pruMibGM4PU8SlLbrjQjd3ji+Mt
5x5ePCa8AhDMI42co3B++dDdRVJ0rP36w5F+pF/X9oFE8GaCwH9T0eVugPNq
ShVZeqFPjne93o9XqQ6QD45Pzvl2VGYtiSTeJNPIgIj8oIVa2SV1iTESS0A7
3rVLAgdXwJzAGnSDbePqIJ1utw3fOz+9PNOHzyeHhy//8Oyrl1+9/PrrCT7+
8PzFSP+5hWBePH/+fKS/if/aIa8c/xuKnVO+C5efpya7I2kcZ3dl9QD7mAsK
/OVI/rmKzb/dm0Hxdu8LBHt5egkZxpHILP8PiOu2qoEzAAA=

-->

</rfc>
