<?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.21 (Ruby 3.4.1) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-cde-07" category="bcp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.24.0 -->
  <front>
    <title abbrev="CBOR CDE">CBOR Common Deterministic Encoding (CDE)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-cde-07"/>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization>Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <date year="2025" month="January" day="21"/>
    <area>Applications and Real-Time</area>
    <workgroup>CBOR</workgroup>
    <abstract>
      <?line 66?>

<t>CBOR (STD 94, RFC 8949) defines "Deterministically Encoded CBOR" in
its Section 4.2, providing some flexibility for application specific
decisions.
To facilitate Deterministic Encoding to be offered as a selectable
feature of generic encoders, the present document defines a
CBOR Common Deterministic Encoding (CDE) Profile that can be shared by a
large set of applications with potentially diverging detailed
requirements.
It also defines "Basic Serialization", which stops short of the
potentially more onerous requirements that make CDE fully
deterministic, while employing most of its reductions of the
variability needing to be handled by decoders.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-cbor-cde/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Concise Binary Object Representation Maintenance and Extensions (CBOR) Working Group mailing list (<eref target="mailto:cbor@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cbor/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/cbor/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/cbor-wg/draft-ietf-cbor-cde"/>.</t>
    </note>
  </front>
  <middle>
    <?line 84?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>CBOR (STD 94, RFC 8949) defines "Deterministically Encoded CBOR" in
its Section 4.2, providing some flexibility for application specific
decisions.
To facilitate Deterministic Encoding to be offered as a selectable
feature of generic encoders, the present document defines a
CBOR Common Deterministic Encoding (CDE) Profile that can be shared by a
large set of applications with potentially diverging detailed
requirements.
It also defines "Basic Serialization", which stops short of the
potentially more onerous requirements that make CDE fully
deterministic, while employing most of its reductions of the
variability needing to be handled by decoders.</t>
      <section anchor="structure-of-this-document">
        <name>Structure of This Document</name>
        <t>After introductory material, <xref target="dep"/> defines the CBOR Common
Deterministic Encoding Profile (CDE).
<xref target="cddl-support"/> defines Concise Data Definition Language (CDDL) support for indicating the use of CDE.
This is followed by the conventional sections for
<xref format="title" target="seccons"/> (<xref format="counter" target="seccons"/>),
<xref format="title" target="sec-iana"/> (<xref format="counter" target="sec-iana"/>),
and <xref format="title" target="sec-combined-references"/> (<xref format="counter" target="sec-combined-references"/>).</t>
        <t>The informative <xref target="impcheck"/> provides brief checklists that implementers
can use to check their CDE implementations.
<xref target="ps"/> provides a checklist for implementing Preferred Serialization.
<xref target="bs"/> introduces "Basic Serialization", a slightly more restricted form
of Preferred Serialization that may be used by encoders to hit a sweet
spot for maximizing interoperability with partial (e.g., constrained)
CBOR decoder implementations.
<xref target="cde"/> further restricts Basic Serialization to arrive at CDE.</t>
        <t>Instead of giving rise to the definition of application-specific,
non-interoperable variants of CDE, this document identifies
Application-level Deterministic Representation (ALDR) rules as a
concept that is separate from CDE itself (<xref target="aldr"/>).
ALDR rules are layered on top of the CDE and address
requirements on deterministic representation of application data
that are specific to an application or a set of applications.
ALDR rules are often provided with a specification for a CBOR-based
protocol, or, if needed, can be provided by referencing a shared "ALDR
ruleset" that is defined in a separate document.</t>
      </section>
      <section anchor="conventions-and-definitions">
        <name>Conventions and Definitions</name>
        <t>The conventions and definitions of <xref target="STD94"/> apply.</t>
        <t>The term "CBOR Application" ("application" for short) is not
explicitly defined in <xref target="STD94"/>; this document uses it in the same sense
as it is used there, specifically for applications that use CBOR as an
interchange format and use (often generic) CBOR encoders/decoders to
serialize/ingest the CBOR form of their application data to be
exchanged.
Similarly, "CBOR Protocol" is used as in <xref target="STD94"/> for the protocol that
governs the interchange of data in CBOR format for a specific
application or set of applications.</t>
        <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 <xref target="BCP14"/> (<xref target="RFC2119"/>) (<xref target="RFC8174"/>) when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
    </section>
    <section anchor="dep">
      <name>CBOR Common Deterministic Encoding Profile (CDE)</name>
      <t>This specification defines the <em>CBOR Common Deterministic Encoding
Profile</em> (CDE) based on the <em>Core Deterministic Encoding
Requirements</em> defined for CBOR in
Section <xref target="RFC8949" section="4.2.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.</t>
      <t>In many cases, CBOR provides more than one way to encode a data item,
but also provides a recommendation for a <em>Preferred Serialization</em>.
The <em>CoRE Deterministic Encoding Requirements</em> generally pick the
preferred serializations as mandatory; they also pick additional choices
such as definite-length encoding.
Finally, they define a map ordering based on lexicographic ordering of
the (deterministically) encoded map keys.</t>
      <t>Note that this specific set of requirements is elective — in
principle, other variants of deterministic encoding can be defined
(and have been, now being phased out slowly, as detailed in Section <xref target="RFC8949" section="4.2.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).
In many applications of CBOR today, deterministic encoding is not used
at all, as its restriction of choices can create some additional
performance cost and code complexity.</t>
      <t><xref target="STD94"/>'s core requirements are designed to provide well-understood and
easy-to-implement rules while maximizing coverage, i.e., the subset of
CBOR data items that are fully specified by these rules, and also
placing minimal burden on implementations.</t>
      <t>Section <xref target="RFC8949" section="4.2.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> picks up on the interaction of extensibility
(CBOR tags) and deterministic encoding.
CBOR itself uses some tags to increase the range of its basic
generic data types, e.g., tags 2/3 extend the range of basic major
types 0/1 in a seamless way.
Section <xref target="RFC8949" section="4.2.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> recommends handling this transition the same
way as with the transition between different integer representation
lengths in the basic generic data model, i.e., by mandating the
preferred serialization for all integers (Section <xref target="RFC8949" section="3.4.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).</t>
      <ol spacing="normal" type="1" group="1"><li>
          <t>CDE turns this
recommendation into a mandate: Integers that can be represented by
basic major type 0 and 1 are encoded using the deterministic
encoding defined for them, and integers outside this range are
encoded using the preferred serialization (Section <xref target="RFC8949" section="3.4.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) of tag 2 and 3 (i.e., no leading zero bytes).</t>
        </li>
      </ol>
      <t>Most tags capture more specific application semantics and therefore
may be harder to define a deterministic encoding for.
While the deterministic encoding of their tag internals is often
covered by the <em>Core Deterministic Encoding Requirements</em>, the mapping
of diverging platform application data types onto the tag contents may
require additional attention to perform it in a deterministic way; see
<xref section="3.2" sectionFormat="of" target="I-D.bormann-cbor-det"/> for
more explanation as well as examples.
As the CDE would continually
need to address additional issues raised by the registration of new
tags, this specification recommends that new tag registrations address
deterministic encoding in the context of CDE.</t>
      <t>A particularly difficult field to obtain deterministic encoding for is
floating point numbers, partially because they themselves are often
obtained from processes that are not entirely deterministic between platforms.
See <xref section="3.2.2" sectionFormat="of" target="I-D.bormann-cbor-det"/> for more details.
Section <xref target="RFC8949" section="4.2.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> presents a number of choices; these need to
be made to obtain the CBOR Common Deterministic Encoding Profile (CDE).
Specifically, CDE specifies (in the order of the bullet list at the end of Section <xref target="RFC8949" section="4.2.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>):</t>
      <ol spacing="normal" type="1" group="1"><li>
          <t>Besides the mandated use of preferred serialization, there is no further
specific action for the two different zero values, e.g., an encoder
that is asked by an application to represent a negative floating
point zero will generate 0xf98000.</t>
        </li>
        <li>
          <t>There is no attempt to mix integers and floating point numbers,
i.e., all floating point values are encoded as the preferred
floating-point representation that accurately represents the value,
independent of whether the floating point value is, mathematically,
an integral value (choice 2 of the second bullet).</t>
        </li>
        <li>
          <t>Apart from finite and infinite numbers, <xref target="IEEE754"/> floating point
values include NaN (not a number) values <xref target="I-D.bormann-cbor-numbers"/>.
In CDE, there is no special handling of NaN values, except that the
preferred serialization rules also apply to NaNs (with zero or
non-zero payloads), using the canonical encoding of NaNs as defined
in Section 6.2.1 of <xref target="IEEE754"/>.
Specifically, this means that shorter forms of encodings for a NaN
are used when that can be achieved by only removing trailing zeros
in the NaN payload (example serializations are available in
<xref section="A.1.2" sectionFormat="of" target="I-D.bormann-cbor-numbers"/>).
Further clarifying a "should"-level statement in Section 6.2.1 of
<xref target="IEEE754"/>, the CBOR encoding always uses a leading bit of 1 in the
significand to encode a quiet NaN; the use of signaling NaNs by
application protocols is <bcp14>NOT RECOMMENDED</bcp14> but when presented by an
application these are encoded by using a leading bit of 0.  </t>
          <t>
Typically, most applications that employ NaNs in their storage and
communication interfaces will only use a single NaN value, quiet NaN with payload 0,
which therefore deterministically encodes as 0xf97e00.</t>
        </li>
        <li>
          <t>There is no special handling of subnormal values.</t>
        </li>
        <li>
          <t>CDE does not presume
equivalence of basic floating point values with floating point
values using other representations (e.g., tag 4/5).
Such equivalences and related deterministic representation rules
can be added at the ALDR level if desired, e.g., by stipulating
additional equivalences and by restricting the set of data item values
actually used by an application.</t>
        </li>
      </ol>
      <t>The main intent here is to preserve the basic generic data model, so
applications (in their ALDR rules or by referencing a separate ALDR
ruleset document, see
<xref target="aldr"/>) can
make their own decisions within that data model.
E.g., an application's ALDR rules can decide that it only ever allows a
single NaN value that would be encoded as 0xf97e00, so a CDE
implementation focusing on this application would not need to
provide processing for other NaN values.
Basing the definition of both CDE and ALDR rules on the
generic data model of CBOR also means that there is no effect on the
Concise Data Definition Language (CDDL)
<xref target="RFC8610"/>, except where the data description is documenting specific
encoding decisions for byte strings that carry embedded CBOR.</t>
      <?line 372?>

</section>
    <section anchor="cddl-support">
      <name>CDDL support</name>
      <t>CDDL defines the structure of CBOR data items at the data model level;
it enables being specific about the data items allowed in a particular
place.
It does not specify encoding, but CBOR protocols can specify the use
of CDE (or simply Basic Serialization).
For instance, it allows the specification of a floating point data item
as "float16"; this means the application data model only foresees data
that can be encoded as <xref target="IEEE754"/> binary16.
Note that specifying "float32" for a floating point data item enables
all floating point values that can be represented as binary32; this
includes values that can also be represented as binary16 and that will
be so represented in Basic Serialization.</t>
      <t><xref target="RFC8610"/> defines control operators to indicate that the contents of a
byte string carries a CBOR-encoded data item (<tt>.cbor</tt>) or a sequence of
CBOR-encoded data items (<tt>.cborseq</tt>).</t>
      <t>CDDL specifications may want to specify that the data items should be
encoded in Common CBOR Deterministic Encoding.
The present specification adds two CDDL control operators that can be used
for this.</t>
      <t>The control operators <tt>.cde</tt> and <tt>.cdeseq</tt> are exactly like <tt>.cbor</tt> and
<tt>.cborseq</tt> except that they also require the encoded data item(s) to be
encoded according to CDE.</t>
      <t>For example, a byte string of embedded CBOR that is to be encoded
according to CDE can be formalized as:</t>
      <artwork><![CDATA[
leaf = #6.24(bytes .cde any)
]]></artwork>
      <t>More importantly, if the encoded data item also needs to have a
specific structure, this can be expressed by the right-hand side
(instead of using the most general CDDL type <tt>any</tt> here).</t>
      <t>(Note that the <tt>.cborseq</tt> control operator does not enable specifying
different deterministic encoding requirements for the elements of the
sequence.  If a use case for such a feature becomes known, it could be
added.)</t>
      <t>Obviously, specifications that document ALDR rules can define related control operators
that also embody the processing required by those ALDR rules,
and are encouraged to do so.</t>
    </section>
    <section anchor="seccons">
      <name>Security Considerations</name>
      <t>The security considerations in Section <xref target="RFC8949" section="10" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> apply.
The use of deterministic encoding can mitigate issues arising out of
the use of non-preferred serializations specially crafted by an attacker.
However, this effect only accrues if the decoder actually checks that
deterministic encoding was applied correctly.
More generally, additional security properties of deterministic
encoding can rely on this check being performed properly.</t>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <t><cref anchor="to-be-removed">RFC Editor: please replace RFCXXXX with the RFC
number of this RFC and remove this note.</cref></t>
      <t>This document requests IANA to register the contents of
<xref target="tbl-iana-reqs"/> into the registry
"<xref section="CDDL Control Operators" relative="#cddl-control-operators" sectionFormat="bare" target="IANA.cddl"/>" of the
<xref target="IANA.cddl"/> registry group:</t>
      <table anchor="tbl-iana-reqs">
        <name>New control operators to be registered</name>
        <thead>
          <tr>
            <th align="left">Name</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">.cde</td>
            <td align="left">[RFCXXXX]</td>
          </tr>
          <tr>
            <td align="left">.cdeseq</td>
            <td align="left">[RFCXXXX]</td>
          </tr>
        </tbody>
      </table>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <referencegroup anchor="STD94" target="https://www.rfc-editor.org/info/std94">
          <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/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>
        </referencegroup>
        <reference anchor="IEEE754" target="https://ieeexplore.ieee.org/document/8766229">
          <front>
            <title>IEEE Standard for Floating-Point Arithmetic</title>
            <author>
              <organization>IEEE</organization>
            </author>
            <date/>
          </front>
          <seriesInfo name="IEEE Std" value="754-2019"/>
          <seriesInfo name="DOI" value="10.1109/IEEESTD.2019.8766229"/>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="IANA.cddl" target="https://www.iana.org/assignments/cddl">
          <front>
            <title>Concise Data Definition Language (CDDL)</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <referencegroup anchor="BCP14" target="https://www.rfc-editor.org/info/bcp14">
          <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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>
        </referencegroup>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.bormann-cbor-det">
          <front>
            <title>CBOR: On Deterministic Encoding</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="21" month="July" year="2024"/>
            <abstract>
              <t>   CBOR (STD 94, RFC 8949) defines "Deterministically Encoded CBOR" in
   its Section 4.2.  The present document provides additional
   information about use cases, deployment considerations, and
   implementation choices for Deterministic Encoding.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-det-03"/>
        </reference>
        <reference anchor="I-D.mcnally-deterministic-cbor">
          <front>
            <title>dCBOR: A Deterministic CBOR Application Profile</title>
            <author fullname="Wolf McNally" initials="W." surname="McNally">
              <organization>Blockchain Commons</organization>
            </author>
            <author fullname="Christopher Allen" initials="C." surname="Allen">
              <organization>Blockchain Commons</organization>
            </author>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Laurence Lundblade" initials="L." surname="Lundblade">
              <organization>Security Theory LLC</organization>
            </author>
            <date day="8" month="August" year="2024"/>
            <abstract>
              <t>   The purpose of determinism is to ensure that semantically equivalent
   data items are encoded into identical byte streams.  CBOR (RFC 8949)
   defines "Deterministically Encoded CBOR" in its Section 4.2, but
   leaves some important choices up to the application developer.  The
   CBOR Common Deterministic Encoding (CDE) Internet Draft builds on
   this by specifying a baseline for application profiles that wish to
   implement deterministic encoding with CBOR.  The present document
   provides an application profile "dCBOR" that can be used to help
   achieve interoperable deterministic encoding based on CDE for a
   variety of applications wishing an even narrower and clearly defined
   set of choices.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-mcnally-deterministic-cbor-11"/>
        </reference>
        <reference anchor="I-D.bormann-cbor-numbers">
          <front>
            <title>On Numbers in CBOR</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="8" month="January" year="2025"/>
            <abstract>
              <t>   The Concise Binary Object Representation (CBOR), as defined in STD 94
   (RFC 8949), is a data representation format whose design goals
   include the possibility of extremely small code size, fairly small
   message size, and extensibility without the need for version
   negotiation.

   Among the kinds of data that a data representation format needs to be
   able to carry, numbers have a prominent role, but also have inherent
   complexity that needs attention from protocol designers and
   implementers of CBOR libraries and of the applications that use them.

   This document gives an overview over number formats available in CBOR
   and some notable CBOR tags registered, and it attempts to provide
   information about opportunities and potential pitfalls of these
   number formats.


   // This is a rather drafty initial revision, pieced together from
   // various components, so it has a higher level of redundancy than
   // ultimately desired.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-numbers-01"/>
        </reference>
        <reference anchor="UAX-15" target="https://unicode.org/reports/tr15/">
          <front>
            <title>Unicode Normalization Forms</title>
            <author>
              <organization/>
            </author>
            <date/>
          </front>
          <refcontent>Unicode Standard Annex</refcontent>
        </reference>
        <reference anchor="RFC8392">
          <front>
            <title>CBOR Web Token (CWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="May" year="2018"/>
            <abstract>
              <t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties. The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection. A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value. CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8392"/>
          <seriesInfo name="DOI" value="10.17487/RFC8392"/>
        </reference>
        <reference anchor="RFC9581">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags for Time, Duration, and Period</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="B. Gamari" initials="B." surname="Gamari"/>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <date month="August" year="2024"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR, RFC 8949) 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.</t>
              <t>In CBOR, one point of extensibility is the definition of CBOR tags. RFC 8949 defines two tags for time: CBOR tag 0 (RFC 3339 time as a string) and tag 1 (POSIX time as int or float). Since then, additional requirements have become known. The present document defines a CBOR tag for time that allows a more elaborate representation of time, as well as related CBOR tags for duration and time period. This document is intended as the reference document for the IANA registration of the CBOR tags defined.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9581"/>
          <seriesInfo name="DOI" value="10.17487/RFC9581"/>
        </reference>
        <reference anchor="I-D.bormann-dispatch-modern-network-unicode">
          <front>
            <title>Modern Network Unicode</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="30" month="August" year="2024"/>
            <abstract>
              <t>   BCP18 (RFC 2277) has been the basis for the handling of character-
   shaped data in IETF specifications for more than a quarter of a
   century now.  It singles out UTF-8 (STD63, RFC 3629) as the "charset"
   that MUST be supported, and pulls in the Unicode standard with that.

   Based on this, RFC 5198 both defines common conventions for the use
   of Unicode in network protocols and caters for the specific
   requirements of the legacy protocol Telnet.  In applications that do
   not need Telnet compatibility, some of the decisions of RFC 5198 can
   be cumbersome.

   The present specification defines "Modern Network Unicode" (MNU),
   which is a form of RFC 5198 Network Unicode that can be used in
   specifications that require the exchange of plain text over networks
   and where just mandating UTF-8 may not be sufficient, but there is
   also no desire to import all of the baggage of RFC 5198.

   As characters are used in different environments, MNU is defined in a
   one-dimensional (1D) variant that is useful for identifiers and
   labels, but does not use a structure of text lines.  A 2D variant is
   defined for text that is a sequence of text lines, such as plain text
   documents or markdown format.  Additional variances of these two base
   formats can be used to tailor MNU to specific areas of application.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-dispatch-modern-network-unicode-05"/>
        </reference>
      </references>
    </references>
    <?line 275?>

<section anchor="aldr">
      <name>Application-level Deterministic Representation Rules</name>
      <t>This appendix is informative.</t>
      <t>CBOR application protocols are agreements about how to use CBOR for a
specific application or set of applications.
Application protocols make representation decisions in order to
constrain the variety of ways in which some aspect of the information
model could be represented in the CBOR data model for the application.
For instance, there are several CBOR tags that can be used to
represent a time stamp (such as 0, 1, 1001), each with some specific
properties.
Application protocols that need to represent a timestamp typically
choose a specific tag and further constrain its use where necessary
(e.g., tag 1001 was designed to cover a wide variety of applications
<xref target="RFC9581"/>).
Where no tag is available, the application protocol can design its own
format for some application data.
Even where a tag is available, the application data can choose to use
its definitions without actually encoding the tag (e.g., by using its
content in specific places in an "unwrapped" form).
For instance, CWT defines an application data type "NumericDate"
which is formed by "unwrapping" tag 1 (see Sections <xref target="RFC8392" section="2" sectionFormat="bare"/> and <xref target="RFC8392" section="5" sectionFormat="bare"/> of <xref target="RFC8392"/>).</t>
      <t>CWT does not use deterministic encoding.
Applications that do, and that derive CBOR data items from application data
without maintaining a record of which choices are to be made when
representing these application data, generally make rules for these
choices as part of the application protocol.
In this document, we speak about these choices as Application-Level
Deterministic Representation Rules (ALDR for short).
For example, a hypothetical variant of CWT that makes use of
deterministic encoding will need to make an ALDR for NumericDate: the
definition of tag 1 allows both integer and floating point numbers
(Section <xref target="RFC8949" section="3.4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>), and the application rules may
choose to only use integers, or to always use integers when the
numeric value can be represented as such without loss of information,
or to always use floating point numbers, or some of these for some
application data and different ones for other application data.</t>
      <t>CDE provides for encoding commonality between different applications
of CBOR once these application-level choices have been made.
It can be useful for an application or a group of applications to
document their choices aimed at deterministic representation of
application data in a general way, constraining the set of data items
handled (<em>exclusions</em>) and defining further mappings (<em>reductions</em>)
that help the application(s) get by with the exclusions.
This can be done in the application protocol specification (similar to
the way CWT defines NumericDate) or as a separate document.</t>
      <t>For example, the dCBOR specification <xref target="I-D.mcnally-deterministic-cbor"/> specifies the use of CDE
together with some application-level rules, i.e., an ALDR ruleset, such as a
requirement for all text strings to be in Unicode Normalization Form C
(NFC) <xref target="UAX-15"/> — this specific requirement is an example for an <em>exclusion</em> of
non-NFC data at the application level, and it invites implementing a <em>reduction</em> by
routine normalization of text strings.</t>
      <t>ALDR rules (including rules specified in a ALDR ruleset document) enable
simply using implementations of the common CDE; they do not
"fork" CBOR in the sense of requiring distinct generic encoder/decoder
implementations.</t>
      <t>An implementation of specific ALDR rules combined with a CDE
implementation produces well-formed,
deterministically encoded CBOR according to <xref target="STD94"/>, and existing
generic CBOR decoders will therefore be able to decode it, including
those that check for Deterministic Encoding ("CDE decoders", see also
<xref target="impcheck"/>).
Similarly, generic CBOR encoders will be able to produce valid CBOR
that can be ingested by an implementation that enforces an application's
ALDR rules if the encoder was handed data model level information
from an application that simply conformed to those ALDR rules.</t>
      <t>Please note that the separation between standard CBOR processing and
the processing required by the ALDR rules is a conceptual one:
Instead of employing generic encoders/decoders, both ALDR rule
processing and standard CBOR processing can be combined into a specialized
encoder/decoder specifically designed for a particular set of ALDR
rules.</t>
      <t>ALDR rules are intended to be used in conjunction with an
application, which typically will naturally use a subset of the CBOR generic
data model, which in turn
influences which subset of the ALDR rules is used by the specific application
(in particular if the application simply references a more general
ALDR ruleset document).
As a result, ALDR rules themselves place no direct
requirement on what minimum subset of CBOR is implemented.
For instance, a set of ALDR rules might include rules for the
processing of floating point values, but there is no requirement that
implementations of that set of ALDR rules support floating point
numbers (or any other kind of number, such as arbitrary precision
integers or 64-bit negative integers) when they are used with
applications that do not use them.</t>
      <?line 452?>

</section>
    <section anchor="impcheck">
      <name>Implementers' Checklists</name>
      <t>This appendix is informative.
It provides brief checklists that implementers can use to check their
implementations.
It uses <xref target="RFC2119"/> language, specifically the keyword <bcp14>MUST</bcp14>, to highlight
the specific items that implementers may want to check.
It does not contain any normative mandates.
This appendix is informative.</t>
      <t>Notes:</t>
      <ul spacing="normal">
        <li>
          <t>This is largely a restatement of parts of Section <xref target="RFC8949" section="4" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.
The purpose of the restatement is to aid the work of implementers,
not to redefine anything.  </t>
          <t>
Preferred Serialization Encoders and Decoders as well as CDE
Encoders and Decoders have certain properties that are expressed
using <xref target="RFC2119"/> keywords in this appendix.</t>
        </li>
        <li>
          <t>Duplicate map keys are never valid in CBOR at all (see
list item "Major type 5" in Section <xref target="RFC8949" section="3.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>)
no matter what sort of serialization is used.
Of the various strategies listed in Section <xref target="RFC8949" section="5.6" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>,
detecting duplicates and handling them as an error instead of
passing invalid data to the application is the most robust one;
achieving this level of robustness is a mark of quality of
implementation.</t>
        </li>
        <li>
          <t>Preferred serialization and CDE only affect serialization.
They do not place any requirements, exclusions, mappings or such on
the data model level.
ALDR rules such as the ALDR ruleset defined by dCBOR are different as they can affect
the data model by restricting some values and ranges.</t>
        </li>
        <li>
          <t>CBOR decoders in general (as opposed to "CDE decoders" specifically
advertised as supporting CDE)
are not required to check for preferred
serialization or CDE and reject inputs that do not fulfill
their requirements.
However, in an environment that employs deterministic encoding,
employing non-checking CBOR decoders negates many of its benefits.
Decoder implementations that advertise "support" for preferred
serialization or CDE need to check the encoding and reject
input that is not encoded to the encoding specification in use.
Again, ALDR rules such as those in dCBOR may pose additional
requirements, such as requiring rejection of non-conforming inputs.  </t>
          <t>
If a generic decoder needs to be used that does not "support" CDE, a
simple (but somewhat clumsy) way to check for proper CDE encoding is
to re-encode the decoded data and check for bit-to-bit equality with
the original input.</t>
        </li>
      </ul>
      <section anchor="ps">
        <name>Preferred Serialization</name>
        <t>In the following, the abbreviation "ai" will be used for the 5-bit
additional information field in the first byte of an encoded CBOR data
item, which follows the 3-bit field for the major type.</t>
        <section anchor="pse">
          <name>Preferred Serialization Encoders</name>
          <ol spacing="normal" type="1"><li>
              <t>Shortest-form encoding of the argument <bcp14>MUST</bcp14> be used for all major
types.
Major type 7 is used for floating-point and simple values; floating
point values have its specific rules for how the shortest form is
derived for the argument.
The shortest form encoding for any argument that is not a floating
point value is:  </t>
              <ul spacing="normal">
                <li>
                  <t>0 to 23 and -1 to -24 <bcp14>MUST</bcp14> be encoded in the same byte as the
major type.</t>
                </li>
                <li>
                  <t>24 to 255 and -25 to -256 <bcp14>MUST</bcp14> be encoded only with an additional
byte (ai = 0x18).</t>
                </li>
                <li>
                  <t>256 to 65535 and -257 to -65536 <bcp14>MUST</bcp14> be encoded only with an
additional two bytes (ai = 0x19).</t>
                </li>
                <li>
                  <t>65536 to 4294967295 and -65537 to -4294967296 <bcp14>MUST</bcp14> be encoded
only with an additional four bytes (ai = 0x1a).</t>
                </li>
              </ul>
            </li>
            <li>
              <t>If floating-point numbers are emitted, the following apply:  </t>
              <ul spacing="normal">
                <li>
                  <t>The length of the argument indicates half (binary16, ai = 0x19),
single (binary32, ai = 0x1a) and double (binary64, ai = 0x1b)
precision encoding.
If multiple of these encodings preserve the precision of the
value to be encoded, only the shortest form of these <bcp14>MUST</bcp14> be
emitted.
That is, encoders <bcp14>MUST</bcp14> support half-precision and
single-precision floating point.</t>
                </li>
                <li>
                  <t><xref target="IEEE754"/> Infinites and NaNs, and thus NaN payloads, <bcp14>MUST</bcp14> be
supported, to the extent possible on the platform.      </t>
                  <t>
As with all floating point numbers, Infinites and NaNs <bcp14>MUST</bcp14> be
encoded in the shortest of double, single or half precision that
preserves the value:      </t>
                  <ul spacing="normal">
                    <li>
                      <t>Positive and negative infinity and zero <bcp14>MUST</bcp14> be represented in
half-precision floating point.</t>
                    </li>
                    <li>
                      <t>For NaNs, the value to be preserved includes the sign bit,
the quiet bit, and the NaN payload (whether zero or non-zero).
The shortest form is obtained by removing the rightmost N bits of the
payload, where N is the difference in the number of bits in the
significand (mantissa representation) between the original format
and the shortest format.
This trimming is performed only (preserves the value only) if all the
rightmost bits removed are zero.
(This will always represent a double or single quiet NaN with a zero
NaN payload in a half-precision quiet NaN.)</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
            <li>
              <t>If tags 2 and 3 are supported, the following apply:  </t>
              <ul spacing="normal">
                <li>
                  <t>Positive integers from 0 to 2^64 - 1 <bcp14>MUST</bcp14> be encoded as a type 0 integer.</t>
                </li>
                <li>
                  <t>Negative integers from -(2^64) to -1 <bcp14>MUST</bcp14> be encoded as a type 1 integer.</t>
                </li>
                <li>
                  <t>Leading zeros <bcp14>MUST NOT</bcp14> be present in the byte string content of tag 2 and 3.</t>
                </li>
              </ul>
              <t>
(This also applies to the use of tags 2 and 3 within other tags,
such as 4 or 5.)</t>
            </li>
          </ol>
        </section>
        <section anchor="psd">
          <name>Preferred Serialization Decoders</name>
          <t>There are no special requirements that CBOR decoders need to meet to
be a Preferred Serialization Decoder.
Partial decoder implementations need to pay attention to at least the
following requirements:</t>
          <ol spacing="normal" type="1"><li>
              <t>Decoders <bcp14>MUST</bcp14> accept shortest-form encoded arguments (see Section <xref target="RFC8949" section="3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).</t>
            </li>
            <li>
              <t>If arrays or maps are supported, definite-length arrays or maps <bcp14>MUST</bcp14> be accepted.</t>
            </li>
            <li>
              <t>If text or byte strings are supported, definite-length text or byte
strings <bcp14>MUST</bcp14> be accepted.</t>
            </li>
            <li>
              <t>If floating-point numbers are supported, the following apply:  </t>
              <ul spacing="normal">
                <li>
                  <t>Half-precision values <bcp14>MUST</bcp14> be accepted.</t>
                </li>
                <li>
                  <t>Double- and single-precision values <bcp14>SHOULD</bcp14> be accepted; leaving these out
is only foreseen for decoders that need to work in exceptionally
constrained environments.</t>
                </li>
                <li>
                  <t>If double-precision values are accepted, single-precision values
<bcp14>MUST</bcp14> be accepted.</t>
                </li>
                <li>
                  <t>Infinites and NaNs, and thus NaN payloads, <bcp14>MUST</bcp14> be accepted and
presented to the application (not necessarily in the platform
number format, if that doesn't support those values).</t>
                </li>
              </ul>
            </li>
            <li>
              <t>If big numbers (tags 2 and 3) are supported, type 0 and type 1 integers <bcp14>MUST</bcp14>
be accepted where a tag 2 or 3 would be accepted.  Leading zero bytes
in the tag content of a tag 2 or 3 <bcp14>MUST</bcp14> be ignored.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="bs">
        <name>Basic Serialization</name>
        <t>Basic Serialization further restricts Preferred Serialization by not
using indefinite length encoding.
A CBOR encoder can choose to employ Basic Serialization in order to
reduce the variability that needs to be handled by decoders,
potentially maximizing interoperability with partial (e.g.,
constrained) CBOR decoder implementations.</t>
        <section anchor="bse">
          <name>Basic Serialization Encoders</name>
          <t>The Basic Serialization Encoder requirements are identical to the
Preferred Serialization Encoder requirements, with the following additions:</t>
          <ol spacing="normal" type="1"><li>
              <t>If maps or arrays are emitted, they <bcp14>MUST</bcp14> use definite-length
encoding (never indefinite-length).</t>
            </li>
            <li>
              <t>If text or byte strings are emitted, they <bcp14>MUST</bcp14> use definite-length
encoding (never indefinite-length).</t>
            </li>
          </ol>
        </section>
        <section anchor="bsd">
          <name>Basic Serialization Decoders</name>
          <t>The Basic Serialization Decoder requirements are identical to the
Preferred Serialization Decoder requirements.</t>
        </section>
      </section>
      <section anchor="cde">
        <name>CDE</name>
        <section anchor="cde-encoders">
          <name>CDE Encoders</name>
          <ol spacing="normal" type="1"><li>
              <t>CDE encoders <bcp14>MUST</bcp14> only emit CBOR fulfilling the basic
serialization rules (<xref target="bse"/>).</t>
            </li>
            <li>
              <t>CDE encoders <bcp14>MUST</bcp14> sort maps by the CBOR representation of the map
key.
The sorting is byte-wise lexicographic order of the encoded map
key data items.</t>
            </li>
            <li>
              <t>CDE encoders <bcp14>MUST</bcp14> generate CBOR that fulfills basic validity
(Section <xref target="RFC8949" section="5.3.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).  Note that this includes not
emitting duplicate keys in a major type 5 map as well as emitting
only valid UTF-8 in major type 3 text strings.  </t>
              <t>
Note also that CDE does NOT include a requirement for Unicode
normalization <xref target="UAX-15"/>; <xref section="C" sectionFormat="of" target="I-D.bormann-dispatch-modern-network-unicode"/> contains some
rationale that went into not requiring routine use of Unicode normalization
processes.</t>
            </li>
          </ol>
        </section>
        <section anchor="cde-decoders">
          <name>CDE Decoders</name>
          <t>The term "CDE Decoder" is a shorthand for a CBOR decoder that
advertises <em>supporting</em> CDE (see the start of this appendix).</t>
          <ol spacing="normal" type="1"><li>
              <t>CDE decoders <bcp14>MUST</bcp14> follow the rules for preferred (and thus basic)
serialization decoders (<xref target="psd"/>).</t>
            </li>
            <li>
              <t>CDE decoders <bcp14>MUST</bcp14> check for ordering map keys and for basic
validity of the CBOR encoding (see Section <xref target="RFC8949" section="5.3.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, which includes a check against duplicate map keys
and invalid UTF-8).  </t>
              <t>
To be called a CDE decoder, it <bcp14>MUST NOT</bcp14> present to the application
a decoded data item that fails one of these checks (except maybe via
special diagnostic channels with no potential for confusion with a
correctly CDE-decoded data item).</t>
            </li>
          </ol>
        </section>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>An earlier version of this document was based on the work of Wolf
McNally and Christopher Allen as documented in <xref target="I-D.mcnally-deterministic-cbor"/>, which
serves as an example for an ALDR ruleset document.
We would like to explicitly acknowledge that this work has
contributed greatly to shaping the concept of a CBOR Common
Deterministic Encoding and ALDR rules/rulesets on top of that.</t>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="L." surname="Lundblade" fullname="Laurence Lundblade">
        <organization>Security Theory LLC</organization>
        <address>
          <email>lgl@securitytheory.com</email>
        </address>
      </contact>
      <t>Laurence provided most of the text that became <xref target="impcheck"/>.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA61963YbR5Lm/3yKXOiHAS0AEbzIEmVPN01K2zxHt5Xk45nt
7ZELqARYLaAKXVUgBbPVZx5iHmHfZN9kn2Tji4jMyioAsvrs+rjbJFCVl8i4
fHFLjkYjc3tuT4yps3rpzu3lT2/e2ctitSpye+VqV66yPKvqbGaf57MizfKF
7V9ePR+YZDot3a1/4eq5SYtZnqxoiLRM5vUoc/V8NJsW5WiWutEyqV1Vmxn9
Z1GU23M7na1NVZcuWZ3b6+cfXhiT0nfnZlbklcurTXVu63LjTEKPnNvexXq9
zOjtjL62SZ7ady5Zjj5kK9czd0X5aVEWm7UsxnxyW/ooPTfm1uUbGtNa/bp3
WeSzrHL2pyxPyq19M/2rm9U01rp0NGvN49tXSZbXLk/ymeOpnn+m3yqeuY8J
Bj0acZVkSxoQG/wjtjouygU+X2T1zWZ6bnnnd4tHe4hhTLKpb4oSCxvR/6zN
ctru5dj+VJSrJM/5M6HlZVJWNHvrG5rp3P6cZ7eurLL6f/+v2v5UuhU99OF/
XPMDoKurz+3boqrnyezGnpwcnZ4e8XezrCbqywvyQZHSPFej4ycnZ0/1k01e
44z+m8OkW/5wfVPk9Nx/PX06Oj2ejI4nT0aPT54eT/hLJ9SYJdPij/VvGWiB
g6zLbLqpsdGRbudlsikd6Ppyk6fTZULE0P28d7NNSWuzH24cMYh9+fLShIGX
i+UfK32g5u/Hs2JlsFSdhE4nGn1dFrdZ6lK7IgrYYm7pJVu7zzX9kNR26ma0
Gnt/n63Wsxs3+/Tly9iYHCSuiao4l/cfrp6eyimaB9jij+f23YvLJ09PQaPr
58+ff392es6br5NyAWrf1PW6On/0KHPOfV4vi9KN8SOI8YhkY0MErx89+f7x
4+NjobNKHAaz72vitKRM7bwo7YtlQQvJF6O3BXGivaBt36wcySC/1jAPsY8Q
D0Pw7yxDdp4sKyec4MrMVVk+L+R562dLzy1tYHR8NHmqX1y9uT63k6PxZHL0
9BGeIhKM8f24WTMo8HhyRHRJ0yXocPH6YoyfSdYMZokoeD26Gk+Fa4XzUxCJ
/k+/W5G2WC63+LhRMvwkPcV03zNGvllNievPrf5Az/x88a+jydl5TNEeCQfY
2r7Gu8vsN5HrF/Rb1eMHyxlLED8USH+R5+6zfTA523usG3mcj7N066Ksq0d1
OTl7tIfwoBMJB9HprpZfn549mZBGSxaTo6OJMaPRyCZTktNkVhvz53+nnyej
vzQ/yXZYtfbpHOzT0yFGseC/ARFxnuWusr2WggY1RUkT4+PVHukVUS91Bfli
IpyOj4cqH9DlVUGCMF+6z9k0W0L8wH9Jo2xttXazbK6sl9LPrAjH/OuHgnY8
w3u0+0PWoi5I3kgG566kdSWkvYkrl7SaZLoUJp27pCbBhZwuXE4cO7OOt1FW
Q5Zc1c7WS1EgQNKQ6RtMln1bFvNs6UQJzJIcC6tuEqxrutXBljh2WiGrjSS2
OnckhXZdkDauM6Z1Cg28wPDEw6SnXCq85f62yVi/1kqn69oSYxTNuf2UVLS6
97TVwJ29ob27yUhXV3WxrmhZxGCquUT/RhOvClCLKFVsqtZ0srNV8snBItv5
hp7Wg4vIwjMRGdyKtNQW6/dqEoxC1NjMZMfR9LcJrVVZJHcuOtkbkp6lUJDY
g09tLAy+ykgzkLV7YK9JSxc6bMzuDx6Q9JX0uR7/h5ussld6ysZczGnVxMT6
MswC6Rem2pC0d+rWX74EooJRIk4wBzjB8wBzxNjc30N9jarNGhIdDeeRwlVS
J8RV9GHG8vAyyRebZMEDXL0cWH2T5SbLU+YW0IZWs6l4UzTR2PDO6N95sVwW
d0IuPEMG7BbnWpAyJK5TwtNgtLIffqAPgIdoWX36Nfw2GPpvR1mSJ83X+it9
D9zinyFTOaU9paPSQQjJQEYj7v+WKENLdjbS6S1z6S1sZadkYOaWP14SqZUF
6cklsyR0NCQNtCB+4eew8axkDg3PiYzhPNZVPHzSDC0k9i/IWWLJEN+WKGGU
KUbxnHNY5EgXLbPFTe2FihQN4YlZ7dgQrwwd34FJvKhtIQO0Oz5Rr7aw1Zus
xvB3hMRMRdLLy18ln7NV9hsWD4xZFmtXerES/ZKUEHLbd+PFeAj2gJHA+QwM
c7fK2D7KEbSkTc83JdG3DFup7J6tY4FJWeJYaRfMoeaapnJJymo4u8USy0xO
DYyaNiLQVowjbyGGhKDyUbQtkjJWG1BMIgdQ5yQEQY/TEdNJzgmimAjgj5bu
1i07qryD0fsXL6/eDWy5WYJJYAmIVDO3VoRHk1SOaAm7NC+LlTBbTYZnDsZP
lmnJTI5R/CB0/Mtky1aKCbT2wBHvQp6SNKUlVKalcenRlnIlurcW2iYWcEJi
eImYz5OOjyNvPQgzvM8M7ay5mMM/CIiXuSgJI8tgbNRZO46mCfGqocfrYlaQ
Gi3Koc3mrNNdOvRWMQxHTO31Ajgi8fayh1UYXoWre4Hooj1TYm5evZ6AP+8x
a/zLoPLEk2uUayVKZ9Z5oGE95qP7e8aCxOqgy1Y1FY6A/DuISMRKPdvvJfGv
oATb1gGWmxe1AVbPyCuCQW9WHyZ51mFZEnVS5DWeAW9UcCTgsJKnKp9Xog0g
g27YnAPsdgdbqa6EauR1g41zwwI0I6tKNkaULxMBT/XlrBUkDeQtr3MeeetL
zGQqFXb3iE6NFEFjHTGkMnZW7rCm2HSiiSwgHZv3pK8IEy23Q6XuW2WdXtgq
Nh5RjLcpsE2e5G2aRUFoKRc7He+R1sIz0xBhgUmtLBvQZ0c09goG8wE5/xbe
P6n8Vz+//0A6nv9rX7/hn989/+8/X797foWf3//p4uXL8IPRJ97/6c3PL6+a
n5o3L9+8evX89ZW8TJ/a1kem9+ri32BS6LB6b95+uH7z+uJlT/gkZiDIrCAn
pgIpi5ppaMjczciX9fz3X366fDs5FUNN0P94MnlKKkt/ezL5/hS/3d24XKYs
cmIw+ZUovAXBXFKyIC6XJNZrAulLwtMJY8u73II/iWYP/wzy/OXc/jCdrSen
/6IfYNetDz3hWh8y4XY/2XlZKLnnoz3TBJK2Pu+Qu73ei39r/e6JH334wx+W
JNl2NHnyh38xQKTf4DO0kKK9fwC4aQTItbVrjEAf/v7ARgd+qCOzRmaTQ+9/
vAQMOfDiu8jwfAzaCpLCs5K3d38f+XnjCWREoxZ/VOlkQ28R1iGmIF02lHcD
4GIYRAKbw8Gwd4RviFlFx5A8iqTWbjU00416NRFWK0kFrWh5aWx2Hh5AUA/H
LLAPL4t3zw+dQbzjh6L4WJOuM4GRZMj82FU8NmOCFfx6eA3PWCR0tXiTLHmm
mHt2U2QEEE21Id8rqbyxcQRC8gWZUqdLGZsXGQcsRL6U+rS9VUJAoSTFi/WG
s4RHPSsWZbImp675vpgbnHI/7TruA6VxyuOREoM+e00+n9iIOuY6r/1aOIS+
Z68akO7//Md/ghnWNOUsI5hIVp4hYYzG2qDF79Lbf+Ut04dquUlozKmDasmL
O/oJD65vZKvEBRV5NKALU08cYVFhMS+emF1eJADmebFlFgEWwZR1kSY07oGl
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

-->

</rfc>
