<?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.35 (Ruby 4.0.2) -->
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-edn-literals-22" category="std" consensus="true" submissionType="IETF" updates="8610, 8949" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.32.0 -->
  <front>
    <title>CBOR Extended Diagnostic Notation (EDN)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-22"/>
    <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="2026" month="April" day="06"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 120?>

<t>This document formalizes and consolidates the definition of the Extended
Diagnostic Notation (EDN) of the Concise Binary Object Representation
(CBOR), addressing implementer experience.</t>
      <t>Replacing EDN's previous informal descriptions, it updates
RFC 8949, obsoleting its Section 8, and RFC 8610, obsoleting its
Appendix G.</t>
      <t>It also specifies registry-based extension points and uses them
to support text representations such as of epoch-based dates/times and of IP
addresses and prefixes.</t>
      <t><cref anchor="status">(This cref will be removed by the RFC editor:)<br/>
The present <tt>-22</tt> is intended to present a complete specification that
can be used to confirm the results of the 2026-04-01 CBOR interim.
This includes extending inline comments to encompass C-style
comments, and end-of-line comments to encompass C++-style comments.</cref></t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://cbor-wg.github.io/edn-literal/"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-cbor-edn-literals/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        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/edn-literal"/>.</t>
    </note>
  </front>
  <middle>
    <?line 143?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The Concise Binary Object Representation (CBOR) (RFC8949) <xref target="STD94"/>
    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.
In addition to the binary interchange format, the original CBOR specification
    described a text-based "diagnostic notation" (<xref section="6" sectionFormat="of" target="RFC7049"/>, now Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>), in
    order to be able to converse about CBOR data items without having
    to resort to binary data.
<xref section="G" sectionFormat="of" target="RFC8610"/> extended this into what is also known as
Extended Diagnostic Notation (EDN).</t>
      <t>Diagnostic notation syntax is based on JSON, with extensions
for representing CBOR constructs such as binary data and tags.</t>
      <t>Standardizing EDN in addition to the actual binary interchange format CBOR does
not serve to create a competing interchange format, but enables the use of
a shared diagnostic notation in tools for and in documents about CBOR.
Still, between tools for CBOR development and diagnosis, document
generation systems, continuous integration (CI)
environments, configuration files, and user interfaces for viewing and
editing for all these, EDN is often "interchanged" and therefore
merits a specification that facilitates interoperability within this
domain as well as reliable translation to and from CBOR.
EDN is not designed or intended for general-purpose use in protocol
elements exchanged between systems engaged in processes outside those
listed here.</t>
      <t>​This document consolidates and formalizes the definition of EDN,
providing a formal grammar (see <xref target="grammar"/> and <xref target="app-grammars"/>), and
incorporating small changes based on implementation experience.
It updates <xref target="RFC8949"/>, obsoleting Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, and
<xref target="RFC8610"/>, obsoleting <xref section="G" sectionFormat="of" target="RFC8610"/>.
It is intended to serve as a single reference target that can be used
in specifications that use EDN.</t>
      <t>It also specifies two registry-based extension points for the
diagnostic notation:
one for additional encoding indicators, and
one for adding application-oriented literal forms.
It uses these registries to add encoding indicators for a more
complete coverage of encoding variation,
and to add application-oriented literal forms that enhance EDN with text
representations of epoch-based date/times, of IP addresses
and prefixes <xref target="RFC9164"/>, and of Concise Resource Identifiers (CRI
<xref target="I-D.ietf-core-href"/>), as well as an application-oriented literal that
represents cryptographic hash values computed from byte strings.</t>
      <t>In addition, this document registers a media type identifier
and a content-format for CBOR diagnostic notation.  This does not
elevate its status as an interchange format, but recognizes that
interaction between tools is often smoother if media types can be used.</t>
      <aside>
        <t>Examples in RFCs often do not use media type identifiers, but
special sourcecode type names that are allocated
in <eref target="https://www.rfc-editor.org/materials/sourcecode-types.txt">https://www.rfc-editor.org/materials/sourcecode-types.txt</eref>.
At the time of writing, this resource lists four sourcecode type
names that can be used in RFCs for including CBOR data items and
CBOR-related languages:</t>
        <ul spacing="normal">
          <li>
            <t><tt>cbor</tt> (which is actually not useful, as CBOR is a binary format
and cannot be used in textual examples in an RFC),</t>
          </li>
          <li>
            <t><tt>cbor-diag</tt> (which is another name for EDN, as defined in the
present document),</t>
          </li>
          <li>
            <t><tt>cbor-pretty</tt> (which is a possibly annotated and pretty-printed
hexdump of an encoded CBOR data item, along the lines of the
grammar of <xref target="h-grammar"/>, as used for instance for some of the examples
in <xref section="A.3" sectionFormat="of" target="RFC9290"/>), and</t>
          </li>
          <li>
            <t><tt>cddl</tt> (which is used for the Concise Data Definition Language,
CDDL, see <xref target="terminology"/> below).</t>
          </li>
        </ul>
      </aside>
      <t>Note that EDN is not meant to be the only text-based representation of
CBOR data items.
For instance, <xref target="YAML"/> <xref target="RFC9512"/> is able to represent most CBOR
data items, possibly requiring use of YAML's extension points.
YAML does not provide certain features that can be useful with tools
and documents needing text-based representations of CBOR data items
(such as embedded CBOR or encoding indicators),
but it does provide a host of other features that EDN does not provide
such as anchor/alias data sharing, at a cost of higher implementation
and learning complexity.</t>
      <section anchor="structure-of-this-document">
        <name>Structure of This Document</name>
        <t><xref target="diagnostic-notation"/> of this document has been built from Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> and <xref section="G" sectionFormat="of" target="RFC8610"/>.
The latter provided a number of useful extensions to the initial
diagnostic notation that was originally defined in <xref section="6" sectionFormat="of" target="RFC7049"/>.
Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> and <xref section="G" sectionFormat="of" target="RFC8610"/> have
collectively been called "Extended Diagnostic Notation" (EDN), giving
the present document its name.
<!--
Similarly, this notation could be extended in a separate document to
provide documentation for NaN payloads, which are not covered in this document.
-->
        </t>
        <t>After introductory material, <xref target="app-ext"/>
illustrates the concept of application-oriented extension literals by
defining the "dt", "ip", "hash", and "cri" extensions.
<xref target="stand-in"/> defines mechanisms
for dealing with unknown application-oriented literals and
deliberately elided information.
<xref target="grammars"/> gives the formal syntax of EDN in ABNF, with
explanations for some features of and additions to this syntax, as an
overall grammar (<xref target="grammar"/>) and specific grammars for the content of
app-string and byte-string literals (<xref target="app-grammars"/>).
This is followed by the conventional sections
for
<xref format="title" target="sec-iana"/> (<xref format="counter" target="sec-iana"/>),
<xref format="title" target="seccons"/> (<xref format="counter" target="seccons"/>),
and References (<xref format="counter" target="sec-normative-references"/>, <xref format="counter" target="sec-informative-references"/>).
An informational comparison of EDN with CDDL follows in
<xref target="edn-and-cddl"/>.</t>
      </section>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> defines the original CBOR diagnostic notation,
and <xref section="G" sectionFormat="of" target="RFC8610"/> supplies a number of extensions to the
diagnostic notation that result in the Extended Diagnostic Notation
(EDN).
The diagnostic notation extensions include popular features such as
embedded CBOR (encoded CBOR data items in byte strings) and comments.
A simple diagnostic notation extension that enables representing CBOR
sequences was added in <xref section="4.2" sectionFormat="of" target="RFC8742"/>.
As diagnostic notation is not used in the kind of interchange
situations where backward compatibility would pose a significant
obstacle, there is little point in not using these extensions; as at
least some elements of the extended form are now near-universally
used, the terms "diagnostic notation" and "EDN" have become
synonyms in the context of CBOR.</t>
        <t>Therefore, references to "<em>diagnostic notation</em>" generally mean to
include the original notation from Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> as well as the
extensions from <xref section="G" sectionFormat="of" target="RFC8610"/>, <xref section="4.2" sectionFormat="of" target="RFC8742"/>, and the
present document.
However, this document sticks to the abbreviation "<em>EDN</em>" as it has become quite
popular and is more sharply distinguishable from other meanings than
"DN" would be.</t>
        <t>In a similar vein, the term "ABNF" in this document refers to the
language defined in <xref target="STD68"/> as extended in <xref target="RFC7405"/>, where the
"characters" of Section <xref target="RFC5234" section="2.3" sectionFormat="bare"/> of RFC 5234 <xref target="STD68"/> are Unicode scalar values.
Brief snippets of grammar may be given in the text as I-Regexp regular
expressions <xref target="RFC9485"/>.</t>
        <t>The term "CDDL" (Concise Data Definition Language) refers to the data
definition language defined in
<xref target="RFC8610"/> and its registered extensions (such as those documented in
<xref target="RFC9165"/> and <xref target="RFC9682"/>).
Additional information about the relationship between the two
languages EDN and CDDL is captured in <xref target="edn-and-cddl"/>.</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 anchor="non-objectives-of-this-document">
        <name>(Non-)Objectives of this Document</name>
        <t>Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> states the objective of defining a
common human-readable diagnostic notation with CBOR.
In particular, it states:</t>
        <blockquote>
          <t>All actual interchange always happens in the binary format.</t>
        </blockquote>
        <section anchor="for-humans">
          <name>For Humans</name>
          <t>One important application of EDN is the notation of CBOR data for
humans: in specifications, on whiteboards, and for entering test data.
A number of features, such as comments inside prefixed string literals, are mainly
useful for people-to-people communication via EDN.
Programs also often output EDN for diagnostic purposes, such as in
error messages or to enable comparison (including generation of diffs
via tools) with test data.</t>
        </section>
        <section anchor="determinism">
          <name>Determinism?</name>
          <t>For comparison with test data, it is often useful if different
implementations generate the same (or similar) output for the same
CBOR data items.
This is comparable to the objectives of deterministic serialization
for CBOR data items themselves (Section <xref target="RFC8949" section="4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).
However, there are even more representation variants in EDN than in
binary CBOR, and there is little point in specifically endorsing a
single variant as "deterministic" when other variants may be more
useful for human understanding, e.g., the <tt>&lt;&lt; &gt;&gt;</tt> notation as
opposed to <tt>h''</tt>; an EDN generator may have quite a few options
that control what presentation variant is most desirable for the
application that it is being used for.</t>
          <t>Because of this, a deterministic representation is not defined for
EDN, and there is no expectation for "roundtripping" from EDN to
CBOR and back, i.e., for an ability
to convert EDN to binary CBOR and back to EDN while achieving exactly
the same result as the original input EDN — the original EDN possibly
was created by humans or by a different EDN generator.</t>
        </section>
        <section anchor="basic-output-format">
          <name>Basic Output Format</name>
          <t>However, there is a certain expectation that EDN generators can be
configured to some basic output format, which:</t>
          <ul spacing="normal">
            <li>
              <t>looks like JSON where that is possible;</t>
            </li>
            <li>
              <t>inserts encoding indicators only where the binary form differs from
preferred encoding;</t>
            </li>
            <li>
              <t>uses hexadecimal representation (<tt>h''</tt>) for byte strings, not
<tt>b64''</tt> or embedded CBOR (<tt>&lt;&lt;&gt;&gt;</tt>);</t>
            </li>
            <li>
              <t>does not generate elaborate blank space (newlines, indentation) for
pretty-printing, but does use common blank spaces such as after <tt>,</tt>
and <tt>:</tt>.</t>
            </li>
          </ul>
          <t>EDN generators may provide configuration to consistently select either
the unescaped (directly readable) or an escaped (ASCII equivalent) form of
characters in string literals; the latter allows EDN to be used when the
diagnostic value of fully escaped characters may be desired or in
environments where non-ASCII characters may not enjoy full data
transparency.
Similar to JSON, EDN is designed to allow a simple tool to convert any
EDN (including EDN with application extensions unknown to the tool)
into fully escaped (printable ASCII and newlines only) form, as well
as to inversely recover unescaped characters for all escapes where
this is possible or for certain subsets of the characters (such as
Unicode categories L, M, N, P, S, plus Zs or just ASCII space).</t>
          <t>Additional features such as ensuring
deterministic map ordering (Section <xref target="RFC8949" section="4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) on output,
or even deviating from the basic
configuration in some systematic way, can further assist in comparing
test data.
Information obtained from a CDDL model can help in choosing
application-oriented literals or specific string representations such
as embedded CBOR or <tt>b64''</tt> in the appropriate places.</t>
        </section>
      </section>
    </section>
    <section anchor="diagnostic-notation">
      <name>Overview over CBOR Extended Diagnostic Notation (EDN)</name>
      <t>CBOR is a binary interchange format.  To facilitate documentation and
debugging, and in particular to facilitate communication between
entities cooperating in debugging, this document defines a simple
human-readable diagnostic notation.  All actual interchange always
happens in the binary format.</t>
      <t>Note that diagnostic notation truly was designed as a diagnostic
format; it originally was not meant to be parsed.
Therefore, no formal definition (as in ABNF) was given in the original
documents.
Recognizing that formal grammars can aid interoperation of tools and
usability of documents that employ EDN, <xref target="grammars"/> now provides ABNF
definitions.</t>
      <t>EDN is a true superset of JSON as it is defined in <xref target="STD90"/> in
conjunction with <xref target="RFC7493"/> (that is, any interoperable <xref target="RFC7493"/> JSON
text also is an EDN text), extending it both to cover the greater
expressiveness of CBOR and to increase its usability.</t>
      <t>EDN borrows the JSON syntax for numbers (integer and
floating-point, <xref target="numbers"/>), certain simple values (<xref target="simple-values"/>),
UTF-8 <xref target="STD63"/> text
strings, arrays, and maps (maps are called objects in JSON; the
diagnostic notation extends JSON here by allowing any data item in the
map key position).</t>
      <t>As EDN is used for truly diagnostic purposes, its implementations <bcp14>MAY</bcp14>
support generation and possibly ingestion of EDN for CBOR data items
that are well-formed but not valid.
It is <bcp14>RECOMMENDED</bcp14> that an implementation enables such usage only
explicitly by configuration (such as an API or CLI flag).
Validity of CBOR data items is discussed in Section <xref target="RFC8949" section="5.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>,
with basic validity discussed in Section <xref target="RFC8949" section="5.3.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, and
tag validity discussed in Section <xref target="RFC8949" section="5.3.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.
Tag validity is more likely a subject for individual
application-oriented extensions, while the two cases of basic validity
(for text strings and for maps) are addressed in Sections
<xref format="counter" target="text-validity"/> and <xref format="counter" target="map-validity"/> under the heading
of <em>validity</em>.</t>
      <t>The rest of this section provides an overview over specific features
of EDN, starting with certain common syntactical features and then
going through kinds of CBOR data items roughly in the order of CBOR major
types.
Any additional detailed syntax discussion needed has been deferred to
<xref target="grammar"/>.</t>
      <section anchor="app-lit">
        <name>Application-Oriented Extension Literals</name>
        <t>EDN provides <em>literals</em> that represent CBOR data items textually.
Many of the forms of literals provided are predefined by this
document, but it also defines an extension point that enables defining additional
<em>application-oriented extension literals</em>, or <em>extension literals</em> for short.</t>
        <t>Extension literals start with a <em>prefix</em> that identifies the
application-oriented extension, immediately followed by a sequence
literal (<xref target="embedded"/>) or a single-quoted or raw string literal (<xref target="strings"/>).
The latter form uses its string literal as a shorthand
form for a sequence literal representing a sequence with exactly that
one string data item.</t>
        <aside>
          <t>This notation is generalized from
Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, which provides for notating byte
strings in a number of <xref target="RFC4648"/> base encodings, where the encoded text
is enclosed in single quotes, prefixed by a prefix (»h« for
base16, »b32« for base32, »h32« for base32hex, »b64« for base64 or
base64url).</t>
          <t>This syntax can be thought to establish a name space, with the names
"h", "b32", "h32", and "b64" taken, but other names being unallocated.
The present specification allows registering additional names for this namespace,
which it calls <em>application-extension identifiers</em>.</t>
        </aside>
        <t>More precisely, an <em>application-extension identifier</em> is a name consisting of a
lower-case ASCII letter (<tt>[a-z]</tt>) and zero or more additional ASCII
characters that are either lower-case letters, digits, or hyphens (<tt>[a-z0-9-]</tt>).
»false«, »true«, »null«, and »undefined« cannot be used as such
identifiers and are reserved.</t>
        <t>Application-extension identifiers are registered in a registry
(<xref target="appext-iana"/>).</t>
        <t>An application-extension (such as <tt>dt</tt>) <bcp14>MAY</bcp14> also define the meaning of
a variant prefix derived from its application-extension identifier by
replacing each lower-case character by its upper-case counterpart (such
as <tt>DT</tt>).
As a convention for such definitions, using the all-uppercase variant
implies making use of a tag appropriate for this application-oriented
extension (such as tag number 1 for <tt>DT</tt>, where <tt>dt</tt> stands for the
unwrapped number).</t>
        <t>This specification defines a number of generally applicable
application-oriented extensions (<xref target="app-ext"/>), both to motivate
making these extensions generally available, and to illustrate the
concept.</t>
      </section>
      <section anchor="comments">
        <name>Comments</name>
        <t>For presentation to humans, EDN text may benefit from comments.
JSON famously does not provide for comments, and the original
diagnostic notation in <xref section="6" sectionFormat="of" target="RFC7049"/> inherited this property.</t>
        <t>EDN now provides two comment syntaxes, which can be used where the
syntax allows blank space (outside of constructs such as numbers,
string literals, etc.):</t>
        <ul spacing="normal">
          <li>
            <t>inline comments, delimited by slashes ("<tt>/</tt>") or by C-style "<tt>/*</tt>"
and "<tt>*/</tt>":  </t>
            <t>
In a position that allows blank space, each of the following is
considered blank space (and thus effectively a comment:  </t>
            <ul spacing="normal">
              <li>
                <t>any text that starts with a slash followed by a character that is not a
star or a slash, up to another slash, or</t>
              </li>
              <li>
                <t>any text that starts with "<tt>/*</tt>" up to and including the next following "<tt>*/</tt>"</t>
              </li>
            </ul>
          </li>
          <li>
            <t>end-of-line comments, delimited by "<tt>#</tt>" or "<tt>//</tt>" and an end of line (LINE
FEED, U+000A):  </t>
            <t>
In a position that allows blank space, any text starting with "<tt>#</tt>"
or "<tt>//</tt>" and ending with and including the end of the line is
considered blank space (and thus effectively a comment).</t>
          </li>
        </ul>
        <t>Comments can be used to annotate a CBOR structure as in:</t>
        <sourcecode type="cbor-diag"><![CDATA[
/grasp-message/ [/M_DISCOVERY/ 1, /session-id/ 10584416,
                 /objective/ [/objective-name/ "opsonize",
                              /D, N, S/ 7, /loop-count/ 105]]
]]></sourcecode>
        <t>This reduces to <tt>[1, 10584416, ["opsonize", 7, 105]]</tt>.</t>
        <t>Another example, combining
the use of inline and end-of-line comments:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{
 /kty/ 1 : 4, # Symmetric
 /alg/ 3 : 5, # HMAC 256-256
  /k/ -1 : h'6684523ab17337f173500e5728c628547cb37df
             e68449c65f885d1b73b49eae1'
}
]]></sourcecode>
        <t>This reduces to <tt>{1: 4, 3: 5, -1: h'6684523AB17337F173500E5728C628547CB37DFE68449C65F885D1B73B49EAE1'}</tt>.</t>
        <section anchor="discussion">
          <name>Discussion</name>
          <t>As a not quite backward compatible change, this specification
restricts slash-delimited comments that were allowed in <xref section="G.6" sectionFormat="of" target="RFC8610"/> in two ways:</t>
          <ul spacing="normal">
            <li>
              <t>Inline comments now longer can be empty: The construct "<tt>//</tt>" that was
an empty comment in <xref section="G.6" sectionFormat="of" target="RFC8610"/> is now used instead to introduce an
end-of-line comment.
(Note that "<tt>//</tt>" still can be used in what is visually "within" a
slash-delimited comment; its first slash actually ends the current comment and
the second slash starts a new one.)</t>
            </li>
            <li>
              <t>EDN now enables the use of C-style inline comments; e.g., "<tt>/*foo/</tt>"
was a complete comment in <xref section="G.6" sectionFormat="of" target="RFC8610"/> and now is the beginning of a
C-style comment that goes on up to a "<tt>*/</tt>".</t>
            </li>
          </ul>
          <t>The introduction of C-style inline comments for instance enables a
comment explaining a COSE algorithm identifier, as in</t>
          <sourcecode type="cbor-diag"><![CDATA[
4 /* HMAC 256/64 */
]]></sourcecode>
          <t>instead of the conventional, but often less familiar</t>
          <sourcecode type="cbor-diag"><![CDATA[
4 / HMAC 256//64 /
]]></sourcecode>
        </section>
      </section>
      <section anchor="encoding-indicators">
        <name>Encoding Indicators</name>
        <t>Sometimes it is useful to indicate in the diagnostic notation which of
several alternative representations were actually used; for example, a
data item written »1.5« by a diagnostic decoder might have been
encoded as a half-, single-, or double-precision float.</t>
        <t>The convention for encoding indicators is that anything starting with
an underscore and all immediately following characters that are alphanumeric or
underscore is an encoding indicator, and can be ignored by anyone not
interested in this information.  For example, <tt>_</tt> or <tt>_3</tt>.</t>
        <t>Encoding indicators are always optional:
EDN is usually used to describe CBOR data items at the data model
level.
For some diagnostic purposes, it is useful to represent the choice of
a serialization variation by including encoding indicators.
Implementations of EDN generally do not need to provide this
functionality, but may want to be able to process EDN that contains
encoding indicators, ignoring them just as a generic CBOR decoder
ignores the presence of the serialization variants it encounters.</t>
        <t>Encoding indicators are placed immediately to the right of the data
item or of a syntactic feature that can stand for the data item the
encoding of which the encoding indicator is controlling.
<xref target="tab-ei"/> provides examples for encoding indicators used with various
kinds of data items.</t>
        <table anchor="tab-ei">
          <name>Examples of Encoding Indicators for Different Data Items (mt = major type)</name>
          <thead>
            <tr>
              <th align="left">mt</th>
              <th align="left">examples</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">
                <tt>1_1</tt>, <tt>0x4711_3</tt></td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">
                <tt>-1_1</tt></td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">
                <tt>'A'_1</tt></td>
            </tr>
            <tr>
              <td align="left">3</td>
              <td align="left">
                <tt>"A"_1</tt></td>
            </tr>
            <tr>
              <td align="left">4</td>
              <td align="left">
                <tt>[_1 "bar"]</tt></td>
            </tr>
            <tr>
              <td align="left">5</td>
              <td align="left">
                <tt>{_1 "bar": 1}</tt></td>
            </tr>
            <tr>
              <td align="left">6</td>
              <td align="left">
                <tt>1_1(4711)</tt></td>
            </tr>
            <tr>
              <td align="left">7</td>
              <td align="left">
                <tt>1.5_2</tt>, <tt>0x4711p+03_3</tt></td>
            </tr>
          </tbody>
        </table>
        <t>(In the following, an abbreviation of the form <tt>ai=</tt>nn gives nn as
the numeric value of the field <em>additional information</em>, the low-order 5
bits of the initial byte: see Section <xref target="RFC8949" section="3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.
This field is used in encoding the "argument", i.e., the value, tag, or
length; <tt>ai=0</tt> to <tt>ai=23</tt> mean that the value of the <tt>ai</tt> field
immediately <em>is</em> the argument, <tt>ai=24</tt> to <tt>ai=27</tt> mean that the
argument is carried in 2<sup>ai-24</sup> (1, 2, 4, or 8)
additional bytes, and <tt>ai=31</tt> means that indefinite length
encoding is used.)</t>
        <t>An underscore followed by a decimal digit <tt>n</tt> indicates that the
preceding item (or, for arrays and maps, the item starting with the
preceding bracket or brace) was encoded with an additional information
value of <tt>ai=</tt>24+<tt>n</tt>.  For example, <tt>1.5_1</tt> is a half-precision floating-point
number (2<sup>1</sup> = 2 additional bytes or 16 bits), while <tt>1.5_3</tt> is encoded as
double precision (2<sup>3</sup> = 8 additional bytes or 64 bits).
<!--
This encoding
indicator is not shown in {{examples}}.
 -->
        </t>
        <t>The encoding indicator <tt>_</tt> is an abbreviation of what would in full
form be <tt>_7</tt>, which is not used.
Therefore, an underscore <tt>_</tt> on its own stands for indefinite length
encoding (<tt>ai=31</tt>).
(Note that this encoding indicator is only available behind the opening
brace/bracket for <tt>map</tt> and <tt>array</tt> (<xref target="ei-container"/>): strings have a special syntax
<tt>streamstring</tt> for indefinite length encoding except for the special
cases <tt>''_</tt> and <tt>""_</tt> (<xref target="ei-string"/>).)</t>
        <t>The encoding indicators <tt>_0</tt> to <tt>_3</tt> can be used to indicate <tt>ai=24</tt>
to <tt>ai=27</tt>, respectively; they therefore stand for 1, 2, 4, and 8
bytes of additional information (ai) following the initial byte in the
head of the data item.
(The abbreviation of <tt>_7</tt> into <tt>_</tt> was discussed above.
<tt>_4</tt> to <tt>_6</tt> are not currently used in CBOR, but will be available if
and when CBOR is extended to make use of <tt>ai=28</tt> to <tt>ai=30</tt>.)</t>
        <t>Surprisingly, Section <xref target="RFC8949" section="8.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> does not address <tt>ai=0</tt> to
<tt>ai=23</tt> — the assumption seems to have been that preferred serialization
(Section <xref target="RFC8949" section="4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) will be used when converting CBOR
diagnostic notation to an encoded CBOR data item, so leaving out the
encoding indicator for a data item with a preferred serialization
will implicitly use <tt>ai=0</tt> to <tt>ai=23</tt> if that is possible.
The present specification allows making this explicit:</t>
        <t><tt>_i</tt> ("immediate") stands for encoding with <tt>ai=0</tt> to <tt>ai=23</tt>, i.e.,
it indicates that the argument is encoded directly in the initial byte
of the CBOR item.</t>
        <t>While no pressing use for further values for encoding indicators
comes to mind, this is an extension point for EDN; <xref target="reg-ei"/> defines
a registry for additional values.</t>
        <t>Encoding Indicators are discussed in further detail in <xref target="ei-string"/> for
indefinite length strings and in <xref target="ei-container"/> for arrays and maps.</t>
      </section>
      <section anchor="numbers">
        <name>Numbers</name>
        <!--
## Hexadecimal, Octal, and Binary Numbers {#hexadecimal-octal-and-binary-numbers}
 -->

<t>In addition to JSON's decimal number literals, EDN provides hexadecimal, octal,
and binary number literals in the usual C-language notation (octal with <tt>0o</tt>
prefix present only).</t>
        <t>Numbers composed only of digits (of the respective base) are
interpreted as CBOR integers (major type 0/1, or where the number
cannot be represented in this way, major type 6 with tag 2/3).
A leading "<tt>+</tt>" sign is a no-op, and a leading "<tt>-</tt>" sign inverts the
sign of the number.
So <tt>0</tt>, <tt>000</tt>, <tt>+0</tt> all represent the same integer zero, as does <tt>-0</tt>.
Similarly,
<tt>1</tt>, <tt>001</tt>, <tt>+1</tt> and <tt>+0001</tt> all stand for the same integer one, and
<tt>-1</tt> and <tt>-0001</tt> both designate the same integer minus one.</t>
        <t>Using a decimal point (<tt>.</tt>) and/or an exponent (<tt>e</tt> for decimal, <tt>p</tt>
for hexadecimal) turns the number into a floating point number (major
type 7) instead, irrespective of whether it is an integral number
mathematically.
Note that, in floating point numbers, <tt>0.0</tt> is not the same number as
<tt>-0.0</tt>, even if they are mathematically equal.</t>
        <t>In <xref target="tab-numbers"/>, all the items on a row are the same number (also
shown in CBOR, hexadecimally), but they are distinct from items in a
different row.</t>
        <table anchor="tab-numbers">
          <name>Example Sets of Equivalent Notations for Some Numbers</name>
          <thead>
            <tr>
              <th align="left">EDN</th>
              <th align="left">CBOR hex</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>4711</tt>, <tt>0x1267</tt>, <tt>0o11147</tt>, <tt>0b1001001100111</tt></td>
              <td align="left">
                <tt>19 1267</tt> # uint</td>
            </tr>
            <tr>
              <td align="left">
                <tt>1.5</tt>, <tt>0.15e1</tt>, <tt>15e-1</tt>, <tt>0x1.8p0</tt>, <tt>0x18p-4</tt></td>
              <td align="left">
                <tt>F9 3E00</tt> # float16</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0</tt>, <tt>+0</tt>, <tt>-0</tt></td>
              <td align="left">
                <tt>00     </tt> # uint</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0.0</tt>, <tt>+0.0</tt></td>
              <td align="left">
                <tt>F9 0000</tt> # float16</td>
            </tr>
            <tr>
              <td align="left">
                <tt>-0.0</tt></td>
              <td align="left">
                <tt>F9 8000</tt> # float16</td>
            </tr>
          </tbody>
        </table>
        <t>The non-finite floating-point values <tt>Infinity</tt>, <tt>-Infinity</tt>, and <tt>NaN</tt> are
written exactly as in this sentence (this is also a way they can be
written in JavaScript, although JSON does not allow them).</t>
        <t>See <xref target="decnumber"/> for additional details of the EDN number syntax.</t>
        <t>(Note that literals for further number formats, e.g., for representing
rational numbers as fractions, or for NaNs with non-zero payloads, can
be added as application-oriented literals.
Background information beyond that in <xref target="STD94"/> about the representation
of numbers in CBOR can be found in the informational document
<xref target="I-D.bormann-cbor-numbers"/>.)</t>
      </section>
      <section anchor="strings">
        <name>Strings</name>
        <t>CBOR distinguishes two kinds of strings: text strings (the bytes in
the string constitute UTF-8 <xref target="STD63"/> text, major type 3), and byte strings
(CBOR does not further characterize the bytes that constitute the
string, major type 2).</t>
        <t>EDN has three direct notations for strings: double-quoted and raw
strings for (UTF-8) text strings, and single-quoted strings for byte strings.
The latter are useful for byte strings carrying bytes that can be meaningfully
notated as UTF-8 text (<xref target="sq-lit"/>).</t>
        <t>Many strings are best notated as extension literals, which may
provide detailed access to the bits within those bytes (see
<xref target="encoded-byte-strings"/>).
Extension literals can be constructed out of single-quoted strings,
raw strings, and sequence literals.</t>
        <section anchor="dq-lit">
          <name>Double-Quoted String Literals</name>
          <t>EDN enables notating text strings in a form compatible to that of notating text
strings in JSON (i.e., as a double-quoted string literal), with a
number of usability extensions.
In JSON, no control characters are allowed to occur
directly in text string literals; if needed, they can be specified using
escapes such as <tt>\t</tt> or <tt>\r</tt>.
In EDN, string literals additionally can contain newlines (LINEFEED
U+000A), which are copied into the resulting string like other
characters in the string literal.
To deal with variability in platform presentation of newlines, any
carriage return characters (U+000D) that may be present in the EDN
string literal are not copied into the resulting string (see <xref target="cr"/>).
No other control characters can occur directly in a string literal,
and the handling of escaped characters (<tt>\r</tt> etc.) is as in JSON.</t>
          <t>JSON's escape scheme for characters that are not on Unicode's basic
multilingual plane (BMP) is cumbersome (see Section <xref target="RFC8259" section="7" sectionFormat="bare"/> of RFC 8259 <xref target="STD90"/>).
EDN keeps it, but also adds the syntax <tt>\u{NNN}</tt> where NNN is the
Unicode scalar value as a hexadecimal number.
This means the following are equivalent (the first <tt>o</tt> is escaped as
<tt>\u{6f}</tt> for no particular reason):</t>
          <sourcecode type="cbor-diag"><![CDATA[
"D\u{6f}mino's \u{1F073} + \u{2318}"   # \u{}-escape 3 chars
"Domino's \uD83C\uDC73 + \u2318"       # escape JSON-like
"Domino's 🁳 + ⌘"                       # unescaped
]]></sourcecode>
        </section>
        <section anchor="sq-lit">
          <name>Single-Quoted String Literals</name>
          <t>Analogously to text string literals delimited by double quotes, EDN
allows the use of single quotes (without a prefix) to express byte
string literals with UTF-8 text; for instance, the following are
equivalent:</t>
          <artwork><![CDATA[
'hello world'
h'68656c6c6f20776f726c64'
]]></artwork>
          <t>The escaping rules of JSON strings are applied equivalently for
text-based byte string literals, e.g., <tt>\\</tt> stands for a single
backslash and <tt>\'</tt> stands for a single quote.
However, to facilitate parsing, in single-quoted strings EDN excludes
certain escaping mechanisms available for double-quoted strings:</t>
          <ul spacing="normal">
            <li>
              <t><tt>\/</tt> is an escape in JSON that is available for EDN text strings as
well to ensure all JSON texts are EDN literals.
Since EDN's single-quoted strings do not occur in JSON, this legacy
compatibility feature is not available for them.</t>
            </li>
            <li>
              <t><tt>\u</tt>-based escapes are not available for characters in the range
from U+0020 to U+007E (essentially, printable ASCII).</t>
            </li>
          </ul>
          <t>Single-quoted string literals can occur unprefixed and stand for the
byte string that encodes its text string value (the "content"), or be
prefixed by what looks like an application-extension prefix (see
<xref target="app-lit"/>).</t>
          <t>In a prefixed string literal, the text content of the single-quoted
string literal is not used directly as a byte string, but is further
processed in a way that is defined by the meaning given to the prefix.
Depending on the prefix, the result of that processing can, but need
not be, a byte string value.</t>
          <t>Prefixed string literals (whether single-quoted after the
prefix or a raw string (<xref target="raw-lit"/>)) are used both for base-encoded byte string literals (see <xref target="encoded-byte-strings"/>) and for
application-oriented extension literals (see <xref target="app-lit"/>, called app-string).
(Additional kinds of base-encoded string literals can be defined as
application-oriented extension literals by registering their prefixes;
there is no fundamental difference between the two predefined
base-encoded string literal prefixes (<tt>h</tt>, <tt>b64</tt>) and any such potential
future extension literal prefixes; for simplicity of expression, both
cases are referred to as "extension literals".)</t>
        </section>
        <section anchor="raw-lit">
          <name>Raw String Literals</name>
          <t>Both double-quoted and single-quoted string literals handle
backslashes in a special way.
For string data items that employ backslashes themselves, possibly with additional layers
of processing giving this "escaping" mechanism specific application semantics, this can
lead to an exponential duplication of backslashes that has informally
been described as "quoting hell".</t>
          <t>EDN therefore also allows text strings to be notated as raw string
literals, which do not perform backslash processing.
Instead, data transparency is provided by enclosing them in starting
and ending delimiters built as a sequence of one or more backquote
(»<tt>`</tt>«, U+0060 GRAVE ACCENT) characters.</t>
          <t>For example, the I-Regexp »<tt>[^ \t\n\r"'`]</tt>«, a character class
that excludes blank space and quoting characters, can be notated as:</t>
          <artwork><![CDATA[
 ``[^ \t\n\r"'`]``
]]></artwork>
          <t>instead of</t>
          <artwork><![CDATA[
 "[^ \\t\\n\\r\"'`]"
]]></artwork>
          <t>By using more backquotes for the outer delimiters than the longest
sequence of backquotes that can be found in the string, internal
backquotes do not prematurely end the string literal.
An example for a raw string that contains a double backquote and
therefore is notated starting and ending with a triple backquote:</t>
          <sourcecode type="cbor-diag"><![CDATA[
```To emulate typographic quotes, sometimes duplicate backward and
forward single quotes are used, as in ``text.''
```
]]></sourcecode>
          <t>This mechanism is easy to use for the large majority of cases.
However:</t>
          <ul spacing="normal">
            <li>
              <t>Raw strings cannot be used for empty string data items, which
therefore need to be notated using double- or single-quoted strings.
(Obviously, there is no need to escape the content of empty strings,
so this should not be a problem.)</t>
            </li>
            <li>
              <t>Without additional rules, raw strings could not be used for string
data items that start or end with backquotes, as these would
amalgamate with the start and end delimiters.</t>
            </li>
          </ul>
          <t>To address the latter cases, two additional rules are added:</t>
          <ul spacing="normal">
            <li>
              <t>After processing the backquotes used as delimiters, any single
newline at the start of a raw string is removed.
As a result:  </t>
              <artwork><![CDATA[
 ```a```
]]></artwork>
              <t>
can also be expressed as  </t>
              <artwork><![CDATA[
 ```
 a```
]]></artwork>
              <t>
In addition to enabling leading backquotes in raw strings, this can
 be very useful for documentation strings etc.  </t>
              <t>
This rule also allows notating »<tt>``text''</tt>« as:  </t>
              <artwork><![CDATA[
```
``text''```
]]></artwork>
            </li>
            <li>
              <t>An ending delimiter with more backquotes than were used in the
starting delimiter contributes the superfluous ones to the string.  </t>
              <t>
This allows notating »<tt>a = ``foo``</tt>« as:  </t>
              <artwork><![CDATA[
```a = ``foo`````
]]></artwork>
            </li>
          </ul>
          <t>(The examples given here are minimal in that they show how the
additional rules work; more complex examples would be necessary to
provide additional motivation why this is a good case to handle.)</t>
          <t>See <xref target="grammar"/> for a more formal approach to defining these rules.</t>
        </section>
        <section anchor="ei-string">
          <name>Encoding Indicators of Strings</name>
          <t>For indefinite length encoding, strings (byte and text strings) have a
special syntax <tt>streamstring</tt>.
This is used (except for the special cases <tt>''_</tt> and <tt>""_</tt> below) to
notate their detailed composition into individual "chunks" (Section <xref target="RFC8949" section="3.2.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>), by representing the individual chunks in
sequence within parentheses, each optionally followed by a comma, with
an encoding indicator <tt>_</tt> immediately after the opening parenthesis:
e.g., <tt>(_ h'0123', h'4567')</tt> or <tt>(_ "foo", "bar")</tt>.
The overall type (byte string or text string) of the string is
provided by the types of the individual chunks, which all need to be
of the same type (Section <xref target="RFC8949" section="3.2.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).</t>
          <t>For an indefinite-length string with no chunks inside, <tt>(_ )</tt>
would be ambiguous as to whether a byte string (encoded 0x5fff) or a text string
(encoded 0x7fff) is meant and is therefore not used.
The basic forms <tt>''_</tt> and <tt>""_</tt> can be used instead and are reserved for
the case of no chunks only — not as short forms for the (permitted,
but not really useful) encodings with only empty chunks, which
need to be notated as <tt>(_ '')</tt>, <tt>(_ "")</tt>, etc.,
when it is desired to preserve the chunk structure.</t>
        </section>
        <section anchor="encoded-byte-strings">
          <name>Base-Encoded Byte String Literals</name>
          <t>Besides the unprefixed byte string literals that are analogous to JSON text
string literals, EDN provides extension literals that can represent
byte strings by base-encoding them, typically notated as prefixed
string literals.
The application-extension identifier selects one of the base encodings
<xref target="RFC4648"/>, without padding.
Most often, the base encoding is
enclosed in a single-quoted or raw string literal, prefixed by »h« for base16 or
»b64« for base64 or base64url (the actual encodings of the latter two
have the same meaning where they overlap, so the string remains unambiguous).
For example, the byte string consisting of the four bytes <tt>12 34 56 78</tt>
(given in hexadecimal here) could be written <tt>h'12345678'</tt> or
<tt>b64'EjRWeA'</tt> when using single-quoted string literals, or
<tt>h`12345678`</tt> or <tt>b64`EjRWeA`</tt> when using raw string literals.</t>
          <aside>
            <t>(Note that Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> also mentions »b32« for
base32 and »h32« for base32hex.
This has not been implemented widely
and therefore is not directly included in this specification.
These and further byte string formats now can easily be added back as
application-oriented extension literals.)</t>
          </aside>
          <t>Examples often benefit from some blank space (spaces, line breaks) in
byte strings literals.
In certain EDN prefixed byte string literals, blank space is ignored; for
instance, the following are equivalent:</t>
          <sourcecode type="cbor-diag"><![CDATA[
   h'48656c6c6f20776f726c64'
   h'48 65 6c 6c 6f 20 77 6f 72 6c 64'
   h'4 86 56c 6c6f
     20776 f726c64'
]]></sourcecode>
          <t>The internal syntax of prefixed single-quote literals such
as <tt>h''</tt> and <tt>b64''</tt> can also allow comments as blank space (see <xref target="comments"/>).</t>
          <sourcecode type="cbor-diag"><![CDATA[
   h'68656c6c6f20776f726c64'
   h'68 65 6c /doubled l!/ 6c 6f # hello
     20 /space/
     77 6f 72 6c 64' /world/
]]></sourcecode>
          <t>Slash characters are part of the base64 classic alphabet (see
Table 1 in <xref section="4" sectionFormat="of" target="RFC4648"/>), and they therefore need to be in the
<tt>b64''</tt> set of characters that contribute to the byte string.
Therefore, only end-of-line comments are available inside b64 byte string
literals.</t>
          <sourcecode type="cbor-diag"><![CDATA[
   b64'/base64 not a comment/ but one follows # comment'
   h'FDB6AC 7BAE27A2D69CA2699E9EDFDBBADA2779FA25 968C2C'
]]></sourcecode>
          <t>These two byte string literals stand for the same byte string; the
deliberately confusing base64 content starts with
<tt>b64'/bas'</tt> which is the same as h'FDB6AC' and ends with b64'lows'
which is the same as <tt>h'968C2C'</tt>.</t>
        </section>
        <section anchor="embedded">
          <name>CBOR Sequence Literals</name>
          <t>In diagnostic notation, a sequence of zero or more CBOR data item literals can
be enclosed in <tt>&lt;&lt;</tt> and <tt>&gt;&gt;</tt>, optionally prefixed by an
application-extension prefix; this specification speaks of <em>sequence literals</em>.
EDN mainly deals with individual data items, not with CBOR sequences
<xref target="RFC8742"/>, so the CBOR sequence represented by the sequence literal needs
to be further processed to obtain the value of the literal.</t>
          <t>Prefixed sequence literals refer to the application extension (see
<xref target="app-lit"/>) identified by the prefix and apply the extension to its
sequence content, resulting in a single data item.
This data item may be a string or may not (always) be, depending on
the definition of the application extension.</t>
          <t>An unprefixed sequence literal applies CBOR encoding to the
data items in its content, taken as a CBOR sequence.
The value of the
literal thus is a byte string with the encoded content; this is
commonly referred to as
<em>embedded CBOR</em>.
For instance, each pair of columns in the following are equivalent:</t>
          <sourcecode type="cbor-diag"><![CDATA[
   <<1>>              h'01'
   <<1, 2>>           h'0102'
   <<"hello", null>>  h'65 68656c6c6f f6'
   <<>>               h''
]]></sourcecode>
        </section>
        <section anchor="text-validity">
          <name>Validity of Text Strings</name>
          <t>To be valid CBOR, Section <xref target="RFC8949" section="5.3.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> requires that text
strings are byte sequences in UTF-8 <xref target="STD63"/> form.
EDN provides several ways to construct such byte strings (see <xref target="concat"/>
for details).
These mechanisms might operate on subsequences that do not themselves
constitute UTF-8, e.g., by building larger sequences out of
concatenating the subsequences; for validity of a text string
resulting from these mechanisms it is only of importance that the
result is UTF-8.
Double-quoted, single-quoted, and raw string literals have been defined
such that they lead to byte sequences that are UTF-8: the source
language of EDN is UTF-8, and all escaping mechanisms lead only to
adding further UTF-8 characters.
Only prefixed string literals, other application-extensions, or
in certain cases concatenation (<xref target="concat"/>) can generate non-UTF-8 byte
sequences.</t>
          <t>As discussed at the start of <xref target="diagnostic-notation"/>, EDN
implementations <bcp14>MAY</bcp14> support generation and possibly ingestion of EDN
for CBOR data items that are well-formed but not valid; when this is
enabled, such implementations <bcp14>MAY</bcp14> relax the requirement on text
strings to be valid UTF-8.</t>
          <t>Note that neither CBOR about its text strings nor EDN about its source
language make any requirements except for conformance to <xref target="STD63"/>.
No additional Unicode processing or validation such as normalization
or checking whether a scalar value is actually assigned is foreseen by
EDN, particularly not any processing that is dependent on a specific
Unicode version.
Such processing, if offered, <bcp14>MUST NOT</bcp14> get in the way of processing the
data item represented in EDN (i.e., it may be appropriate to issue
warnings but not to error out or to generate output that does not match
the input at the UTF-8 level).</t>
        </section>
      </section>
      <section anchor="arrays-and-maps">
        <name>Arrays and Maps</name>
        <t>EDN borrows the JSON syntax for arrays and maps.
(Maps are called objects in JSON.)</t>
        <section anchor="mandatory-separators-optional-terminators">
          <name>Mandatory Separators, Optional Terminators</name>
          <t>For maps, EDN extends the JSON syntax by allowing any data item in the
map key position (before the colon).</t>
          <t>JSON requires the use of a comma as a separator character between
the elements of an array as well as between the members (key/value
pairs) of a map.
(These commas also were required in the original diagnostic
notation defined in <xref target="STD94"/> and <xref target="RFC8610"/>.)
The separator commas are now optional in the places where EDN syntax
allows commas; however, where no comma is used in a separator
position, there must be blank space (composed of at least one space, newline, and/or
comment) instead.
(Stylistically, leaving out the commas is more idiomatic when they
occur at line breaks, which provide the blank space.)</t>
          <t>In addition, EDN also allows, but does not require, a trailing comma before the closing bracket/brace,
enabling an easier to maintain "terminator" style of their use.</t>
          <t>In summary, the following eight examples are all equivalent:</t>
          <sourcecode type="cbor-diag"><![CDATA[
[1, 2, 3]
[1, 2, 3,]
[1  2  3]
[1  2  3,]
[1  2, 3]
[1  2, 3,]
[1, 2  3]
[1, 2  3,]
]]></sourcecode>
          <t>as are</t>
          <sourcecode type="cbor-diag"><![CDATA[
{1: "n", "x": "a"}
{1: "n", "x": "a",}
{1: "n"  "x": "a"}
# etc.
]]></sourcecode>
          <t>As a comma and/or blank/comment is mandatory in a separator position,
»<tt>[11]</tt>« is unambiguously an array with a single element (the
integer 11), different from »<tt>[1 1]</tt>« or »<tt>[1,1]</tt>«.
As this is a general rule, »<tt>[[] []]</tt>« or »<tt>[[],[]]</tt>« are well-formed
EDN, while »<tt>[[][]]</tt>« is not.</t>
          <aside>
            <t>CDDL's comma separators in the equivalent contexts (CDDL groups) are
  entirely optional
  (and actually are terminators, which together with their optionality
  allows them to be used like separators as well, or even not at all).
  In summary, comma use is now aligned between EDN and CDDL, in a
  fully backward compatible way.
  (CDDL does allow the stylistically questionable »<tt>a = [[][]]</tt>«, though.)</t>
          </aside>
        </section>
        <section anchor="ei-container">
          <name>Encoding Indicators of Arrays and Maps</name>
          <t>A single underscore can be written after the opening brace of a map or
the opening bracket of an array to indicate that the data item was
represented in indefinite-length format.  For example, <tt>[_ 1, 2]</tt>
contains an indicator that an indefinite-length representation was
used to represent the data item <tt>[1, 2]</tt>.</t>
          <t>At the same position, encoding indicators for specifying the size of
the array or map head for definite-length format can be used instead,
specifically <tt>_i</tt> or <tt>_0</tt> to <tt>_3</tt>.  For example <tt>[_0 false, true]</tt> can be
used to specify the encoding of the array <tt>[false, true]</tt> as <tt>98 02 f4 f5</tt>.</t>
        </section>
        <section anchor="map-validity">
          <name>Validity of Maps</name>
          <t>As discussed at the start of <xref target="diagnostic-notation"/>, EDN implementations <bcp14>MAY</bcp14> support
generation and possibly ingestion of EDN for CBOR data items that are
well-formed but not valid (Section <xref target="RFC8949" section="5.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).</t>
          <t>For maps, this is relevant for map keys that occur more than once, as in:</t>
          <sourcecode type="cbor-diag"><![CDATA[
{1: "to", 1: "fro"}
]]></sourcecode>
        </section>
      </section>
      <section anchor="tags">
        <name>Tags</name>
        <t>A tag is
written as a decimal unsigned integer for the tag number, followed by the tag content
in parentheses; for instance, a date in the format specified by RFC 3339
(ISO 8601) could be
notated as:</t>
        <t indent="5">0("2013-03-21T20:04:00Z")</t>
        <t>or the equivalent epoch-based time as the following:</t>
        <t indent="5">1(1363896240)</t>
        <t>The tag number can be followed by an encoding indicator giving the
encoding of the tag head.  For example:</t>
        <t indent="5">1_1(1363896240)</t>
        <t>(assuming preferred encoding for the tag content) is encoded as</t>
        <sourcecode type="cbor-pretty"><![CDATA[
d9 0001        # tag(1)
   1a 514b67b0 # unsigned(1363896240)
]]></sourcecode>
      </section>
      <section anchor="simple-values">
        <name>Simple values</name>
        <t>EDN uses JSON syntax for the simple values True (»<tt>true</tt>«), False
(»<tt>false</tt>«), and Null (»<tt>null</tt>«).
Undefined is written »<tt>undefined</tt>« as in JavaScript.</t>
        <t>These and all other simple values can be given as "simple()" with the
appropriate integer in the parentheses.  For example, »<tt>simple(42)</tt>«
indicates major type 7, value 42, and »<tt>simple(0x14)</tt>« indicates
»<tt>false</tt>«, as does »<tt>simple(20)</tt>« or »<tt>simple(0b10100)</tt>«.</t>
      </section>
    </section>
    <section anchor="app-ext">
      <name>Application-Oriented Extension Literals</name>
      <t>This document extends the syntax used in diagnostic notation to also
enable application-oriented extensions.
This section defines a number of application-oriented extensions.</t>
      <section anchor="dt">
        <name>The "dt" Extension</name>
        <t>The application-extension identifier "dt" is used to notate a
date/time literal that can be used as an Epoch-Based Date/Time as per
Section <xref target="RFC8949" section="3.4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.</t>
        <t>The content of the literal is a single Standard Date/Time String as per
Section <xref target="RFC8949" section="3.4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, as a text or byte string.</t>
        <t>The value of the literal is a number representing the result of a
conversion of the given Standard Date/Time String to an Epoch-Based
Date/Time.
If fractional seconds are given in the text (production
<tt>time-secfrac</tt> in <xref target="abnf-grammar-dt"/>), the value is a
floating-point number; the value is an integer number otherwise.
In the all-upper-case variant of the app-prefix, the value is enclosed
in a tag number 1.</t>
        <t>Each row of <xref target="tab-equiv-dt"/> shows an example of "dt" notation and
equivalent notation not using an application-extension identifier.</t>
        <table anchor="tab-equiv-dt">
          <name>dt and DT literals vs. plain EDN</name>
          <thead>
            <tr>
              <th align="left">dt literal</th>
              <th align="left">plain EDN</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>dt'1969-07-21T02:56:16Z'</tt></td>
              <td align="left">
                <tt>-14159024</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt'1969-07-21T02:56:16.0Z'</tt></td>
              <td align="left">
                <tt>-14159024.0</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt'1969-07-21T02:56:16.5Z'</tt></td>
              <td align="left">
                <tt>-14159023.5</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt&lt;&lt;'1969-07-21T02:56:16.5Z'&gt;&gt;</tt></td>
              <td align="left">
                <tt>-14159023.5</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt&lt;&lt;"1969-07-21T02:56:16.5Z"&gt;&gt;</tt></td>
              <td align="left">
                <tt>-14159023.5</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>DT'1969-07-21T02:56:16Z'</tt></td>
              <td align="left">
                <tt>1(-14159024)</tt></td>
            </tr>
          </tbody>
        </table>
        <t>See <xref target="dt-grammar"/> for an ABNF definition for the content of <tt>dt</tt> literals.</t>
      </section>
      <section anchor="ip">
        <name>The "ip" Extension</name>
        <t>The application-extension identifier "ip" is used to notate an IP
address literal that can be used as an IP address as per <xref section="3" sectionFormat="of" target="RFC9164"/>.</t>
        <t>The content of the literal is a single IPv4address or IPv6address as per
<xref section="3.2.2" sectionFormat="of" target="RFC3986"/>, as a text or byte string.</t>
        <t>With the lower-case app-string prefix <tt>ip</tt>, the value of the literal is a
byte string representing the binary IP address.
With the upper-case app-string prefix <tt>IP</tt>, the literal is such a byte string
tagged with tag number 54, if an IPv6address is used, or tag number
52, if an IPv4address is used.</t>
        <t>As an additional case, the upper-case app-string prefix <tt>IP''</tt> can be used
with an IP address prefix such as <tt>2001:db8::/56</tt> or <tt>192.0.2.0/24</tt>, with the equivalent tag as its value.
(Note that <xref target="RFC9164"/> representations of address prefixes need to
implement the truncation of the address byte string as described in
<xref section="4.2" sectionFormat="of" target="RFC9164"/>; see example below.)
For completeness, the lower-case variant <tt>ip'2001:db8::/56'</tt> or  <tt>ip'192.0.2.0/24'</tt> stands for
an unwrapped <tt>[56,h'20010db8']</tt> or <tt>[24,h'c00002']</tt>; however, in this case the information
on whether an address is IPv4 or IPv6 often needs to come from the context.</t>
        <t>Note that this application-extension provides no direct representation
of the "Interface format"
defined in <xref section="3.1.3" sectionFormat="of" target="RFC9164"/>, an address combined with an
optional prefix length and an optional zone identifier, and therefore
no way to reference a zone identifier at all.
(If needed, this format can be put together by building their
structures explicitly, e.g., an interface format without a zone
identifier can be represented as in <tt>52([ip'192.0.2.42',24])</tt>, or an
interface format with zone identifier 42 as in
<tt>54([ip'fe80::0202:02ff:ffff:fe03:0303',64,42])</tt>.)</t>
        <t>Each row of <xref target="tab-equiv-ip"/> shows an example of "ip" notation and
equivalent notation not using an application-extension identifier.</t>
        <table anchor="tab-equiv-ip">
          <name>ip and IP literals vs. plain EDN</name>
          <thead>
            <tr>
              <th align="left">ip literal</th>
              <th align="left">plain EDN</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>ip'192.0.2.42'</tt></td>
              <td align="left">
                <tt>h'c000022a'</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>ip&lt;&lt;'192.0.2.42'&gt;&gt;</tt></td>
              <td align="left">
                <tt>h'c000022a'</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'192.0.2.42'</tt></td>
              <td align="left">
                <tt>52(h'c000022a')</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'192.0.2.0/24'</tt></td>
              <td align="left">
                <tt>52([24,h'c00002'])</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>ip'2001:db8::42'</tt></td>
              <td align="left">
                <tt>h'20010db8000000000000000000000042'</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'2001:db8::42'</tt></td>
              <td align="left">
                <tt>54(h'20010db8000000000000000000000042')</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'2001:db8::/64'</tt></td>
              <td align="left">
                <tt>54([64,h'20010db8'])</tt></td>
            </tr>
          </tbody>
        </table>
        <t>See <xref target="ip-grammar"/> for an ABNF definition for the content of <tt>ip</tt> literals.</t>
      </section>
      <section anchor="hash">
        <name>The "hash" Extension</name>
        <t>The application-extension identifier "hash" is used to notate the
input to a cryptographic hash function as well as identify such a hash
function to obtain a byte string that represents the output of that
hash function.</t>
        <t>The content of the literal is a string, optionally followed by either
an integer or a text string that identifies the hash function in the
COSE Algorithms registry of the CBOR Object Signing and Encryption
(COSE) registry group <xref target="IANA.cose"/>, either by the identifier (value:
integer or string), or, if no algorithm is registered with this value,
by its name used in the registry.
If the second item is not given, the default algorithm used is -16
("SHA-256").</t>
        <t>No uppercase variant prefix is defined for the application-extension
identifier "hash".</t>
        <table anchor="tab-equiv-hash">
          <name>hash literals vs. plain EDN</name>
          <thead>
            <tr>
              <th align="left">hash literal</th>
              <th align="left">plain EDN</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo'&gt;&gt;</tt></td>
              <td align="left">h'2C26B46B68FFC68FF99B453C1D304134<br/>13422D706483BFA0F98A5E886266E7AE'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash'foo'</tt></td>
              <td align="left">h'2C26B46B68FFC68FF99B453C1D304134<br/>13422D706483BFA0F98A5E886266E7AE'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo', -16&gt;&gt;</tt></td>
              <td align="left">h'2C26B46B68FFC68FF99B453C1D304134<br/>13422D706483BFA0F98A5E886266E7AE'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo', "SHA-256"&gt;&gt;</tt></td>
              <td align="left">h'2C26B46B68FFC68FF99B453C1D304134<br/>13422D706483BFA0F98A5E886266E7AE'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo', -44&gt;&gt;</tt></td>
              <td align="left">h'F7FBBA6E0636F890E56FBBF3283E524C<br/>6FA3204AE298382D624741D0DC663832<br/>6E282C41BE5E4254D8820772C5518A2C<br/>5A8C0C7F7EDA19594A7EB539453E1ED7'</td>
            </tr>
            <tr>
              <td align="left">
                <tt>hash&lt;&lt;'foo', "SHA-512"&gt;&gt;</tt></td>
              <td align="left">h'F7FBBA6E0636F890E56FBBF3283E524C<br/>6FA3204AE298382D624741D0DC663832<br/>6E282C41BE5E4254D8820772C5518A2C<br/>5A8C0C7F7EDA19594A7EB539453E1ED7'</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="cri">
        <name>The "cri" Extension</name>
        <t>The
application-extension identifier "<tt>cri</tt>" is used to notate
an EDN literal for a CRI reference as defined in <xref target="I-D.ietf-core-href"/>.</t>
        <t>The text of the literal is a URI Reference as per <xref target="RFC3986"/> or an IRI
Reference as per <xref target="RFC3987"/>.</t>
        <t>The value of the literal is a CRI reference that can be converted to
the text of the literal using the procedure of <xref section="6.1" sectionFormat="of" target="I-D.ietf-core-href"/>.  <!-- {{cri-to-uri}}. -->
Note that there may be more than one CRI reference that can be
converted to the URI/IRI reference given; implementations are expected
to favor the simplest variant available and make non-surprising
choices otherwise.
In the all-upper-case variant of the app-prefix, the value is enclosed
in a tag number 99.</t>
        <t>As an example, the CBOR diagnostic notation</t>
        <sourcecode type="cbor-diag"><![CDATA[
cri'https://example.com/bottarga/shaved'
CRI'https://example.com/bottarga/shaved'
]]></sourcecode>
        <t>is equivalent to</t>
        <sourcecode type="cbor-diag"><![CDATA[
[-4, ["example", "com"], ["bottarga", "shaved"]]
99([-4, ["example", "com"], ["bottarga", "shaved"]])
]]></sourcecode>
        <t>See <xref target="cri-grammar"/> for an ABNF definition for the content of <tt>cri</tt> literals.</t>
      </section>
    </section>
    <section anchor="stand-in">
      <name>Stand-in Representations in Binary CBOR</name>
      <t>In some cases, an EDN consumer cannot construct actual CBOR items that
represent the CBOR data intended for eventual interchange.
This document defines stand-in representation for two such cases:</t>
      <ul spacing="normal">
        <li>
          <t>The EDN consumer does not know (or does not implement) an
application-extension identifier used in the EDN document
(<xref target="unknown"/>) but wants to preserve the information for a later
processor.</t>
        </li>
        <li>
          <t>The generator of some EDN intended for human consumption (such as in
a specification document) may not want to include parts of the final
data item, destructively replacing complete subtrees or possibly
just parts of a lengthy string by <em>elisions</em> (<xref target="elision"/>).</t>
        </li>
      </ul>
      <aside>
        <t>Implementation note:
Typically, the ultimate applications will fail if they encounter tags
unknown to them, which the ones defined in this section likely are.
Where chains of tools are involved in processing EDN, it may be useful
to fail earlier than at the ultimate receiver in the chain unless
specific processing options (e.g., command line flags) are given that
indicate which of these stand-ins are expected at this stage in the
chain.</t>
      </aside>
      <section anchor="unknown">
        <name>Handling unknown application-extension identifiers</name>
        <t>When ingesting CBOR diagnostic notation, any
application-oriented extension literals are usually decoded and
transformed into the corresponding data item during ingestion.
If an application-extension is not known or not implemented by the
ingesting process, this is usually an error and processing has to
stop.</t>
        <t>However, in certain cases, it can be desirable to exceptionally carry an
uninterpreted application-oriented extension literal in an ingested
data item, allowing to postpone its decoding to a specific later
stage of ingestion.</t>
        <t>This specification defines a CBOR Tag for this purpose:
The Diagnostic Notation Unresolved Application-Extension Tag, tag
number CPA999 (<xref target="iana-standin"/>).
The content of this tag is an array of a text string for the
application-extension identifier, and another array:</t>
        <ul spacing="normal">
          <li>
            <t>For app-strings, the second array contains a single item, a text
string containing the text notated by the single-quoted string in the
app-string.</t>
          </li>
          <li>
            <t>For app-sequences, the second array contains zero or more items,
which represent each item in the sequence contained in the
app-sequence.</t>
          </li>
        </ul>
        <t>For example, <tt>cri'https://example.com'</tt> can be represented as
<tt>/CPA/ 999(["cri", ["https://example.com"]])</tt>, or
<tt>hash&lt;&lt;"data", -44&gt;&gt;</tt> as <tt>/CPA/ 999(["hash", ["data", -44]])</tt>.</t>
        <!-- edn-abnf -fe "cri'https://example.com'" -->
<!-- edn-abnf -fe 'hash<<"data", -44>>' -->

<t>If a stage of ingestion is not prepared to handle the Unresolved
Application-Extension Tag, this is an error and processing has to
stop, as if this stage had been ingesting an unknown or unimplemented
application-extension literal itself.</t>
        <t><cref anchor="cpa">RFC-Editor: This document uses the CPA (code point allocation)
  convention described in [I-D.bormann-cbor-draft-numbers].  For
  each usage of the term "CPA", please remove the prefix "CPA"
  from the indicated value and replace the residue with the value
  assigned by IANA; perform an analogous substitution for all other
  occurrences of the prefix "CPA" in the document.  Finally,
  please remove this note.</cref></t>
      </section>
      <section anchor="elision">
        <name>Handling information deliberately elided from an EDN document</name>
        <t>When using EDN for exposition in a document or on a whiteboard, it is
often useful to be able to leave out parts of an EDN document that are
not of interest at that point of the exposition.</t>
        <t>To facilitate this, this specification
supports the use of an <em>ellipsis</em> (notated as three or more dots
in a row, as in <tt>...</tt>) to indicate parts of an EDN document that have
been elided (and therefore cannot be reconstructed).</t>
        <t>Upon ingesting EDN as a representation of a CBOR data item for further
processing, the occurrence of an ellipsis usually is an error and
processing has to stop.</t>
        <t>However, it is useful to be able to process EDN documents with
ellipses in the automation scripts for the documents using them.
This specification defines a CBOR Tag that can be used in the ingestion
for this purpose:
The Diagnostic Notation Ellipsis Tag, tag number CPA888 (<xref target="iana-standin"/>).
The content of this tag either is</t>
        <ol spacing="normal" type="1" start="1"><li>
            <t>null (indicating a data item entirely replaced by an ellipsis), or it is</t>
          </li>
          <li>
            <t>an array, the elements of which are alternating between fragments
of a string and the actual elisions, represented as ellipses
carrying a null as content.</t>
          </li>
        </ol>
        <t>Elisions can stand in for entire subtrees, e.g. in:</t>
        <sourcecode type="cbor-diag"><![CDATA[
[1, 2, ..., 3]
{ "a": 1,
  "b": ...,
  ...: ...
}
]]></sourcecode>
        <t>A single ellipsis (or key/value pair of ellipses) can imply eliding
multiple elements in an array (members in a map); if more detailed
control is required, a data definition language such as CDDL can be
employed.
(Note that the stand-in form defined here does not allow multiple
key/value pairs with an ellipsis as a key: the CBOR data item would
not be valid.)</t>
        <t>Subtree elisions can be represented in a CBOR data item by using
<tt>/CPA/888(null)</tt> as the stand-in:</t>
        <sourcecode type="cbor-diag"><![CDATA[
[1, 2, 888(null), 3]
{ "a": 1,
  "b": 888(null),
  888(null): 888(null)
}
]]></sourcecode>
        <t>Elisions also can be used as part of a (text or byte) string:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "contract": "Herewith I buy" + ... + "gned: Alice & Bob",
  "bytes_in_IRI": 'https://a.example/' + ... + '&q=Übergrößenträger',
  "signature": h'4711...0815',
}
]]></sourcecode>
        <t>The example "contract" combines string concatenation via the <tt>+</tt>
operator (<xref target="grammar"/>) with an
ellipsis.
The example
"signature" uses special syntax that allows the use of ellipses
between the bytes notated <em>inside</em> <tt>h''</tt> literals.</t>
        <t>String elisions can be represented in a CBOR data item by a stand-in
that wraps an array of string fragments alternating with ellipsis
indicators:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "contract": /CPA/888(["Herewith I buy", 888(null),
                        "gned: Alice & Bob"]),
  "bytes_in_IRI": 888(['https://a.example/', 888(null),
                       '&q=Übergrößenträger']),
  "signature": 888([h'4711', 888(null), h'0815']),
}
]]></sourcecode>
        <t>Note that the use of elisions is different from "commenting out" EDN
text, e.g.:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "signature": h'4711/.../0815',
  # ...: ...
}
]]></sourcecode>
        <t>The consumer of this EDN will ignore the comments and therefore will
have no idea after ingestion that some information has been elided;
validation steps may then simply fail instead of being informed about
the elisions.</t>
      </section>
    </section>
    <section anchor="grammars">
      <name>ABNF Definitions</name>
      <t>This section collects grammars in ABNF form (<xref target="STD68"/> as extended in
<xref target="RFC7405"/>) that serve to define the syntax of EDN and some
application-oriented literals.</t>
      <aside>
        <t>Implementation note: The ABNF definitions in this section are
intended to be useful in a Parsing Expression Grammar (PEG) parser
interpretation (see <xref section="A" sectionFormat="of" target="RFC8610"/> for an introduction into PEG).</t>
      </aside>
      <section anchor="grammar">
        <name>Overall ABNF Definition for Extended Diagnostic Notation</name>
        <t>This subsection provides an overall ABNF definition for the syntax of
CBOR extended diagnostic notation.</t>
        <aside>
          <t>This ABNF definition treats all single-quoted string literals the same,
whether they are unprefixed and constitute byte string literals, or
prefixed and their content subject to further processing.
The text string value of the single-quoted strings that goes into that
further processing is described using separate ABNF definitions in
<xref target="app-grammars"/>; as a convention, the grammar for the content of an
app-string with prefix, say, <tt>p</tt>, is described by an ABNF definition
with the rule name <tt>app-string-p</tt>.</t>
          <t>As an implementation note, some implementations may want to integrate
the parsing and processing of app-string content for certain
application extensions with the overall grammar.
Example grammars for such integrated parsers are provided with this
specification in <xref target="integrated-grammars"/>.</t>
        </aside>
        <t>For simplicity, the internal parsing for the built-in EDN prefixes is
specified in the same way.
ABNF definitions for <tt>h''</tt>/<tt>h``</tt> and <tt>b64''</tt>/<tt>b64``</tt> are
provided in <xref target="h-grammar"/> and <xref target="b64-grammar"/>.
However, the prefixes <tt>b32''</tt> and <tt>h32''</tt> are not in wide use and an
ABNF definition in this document would therefore not have been based on
implementation experience.</t>
        <figure anchor="abnf-grammar">
          <name>Overall ABNF Definition of CBOR EDN</name>
          <sourcecode type="abnf" name="cbor-edn.abnf"><![CDATA[
seq             = S [item *(MSC item) SOC]
one-item        = S item S
item            = map / array / tagged
                / number / simple
                / string / streamstring

string1         = (tstr / bstr) spec
string1e        = string1 / ellipsis
ellipsis        = 3*"." ; "..." or more dots
string          = string1e *(S "+" S string1e)

number          = (hexfloat / hexint / octint / binint
                   / decnumber / nonfin) spec
sign            = "+" / "-"
decnumber       = [sign] (1*DIGIT ["." *DIGIT] / "." 1*DIGIT)
                         ["e" [sign] 1*DIGIT]
hexfloat        = [sign] "0x" (1*HEXDIG ["." *HEXDIG] / "." 1*HEXDIG)
                         "p" [sign] 1*DIGIT
hexint          = [sign] "0x" 1*HEXDIG
octint          = [sign] "0o" 1*ODIGIT
binint          = [sign] "0b" 1*BDIGIT
nonfin          = %s"Infinity"
                / %s"-Infinity"
                / %s"NaN"
simple          = %s"false"
                / %s"true"
                / %s"null"
                / %s"undefined"
                / %s"simple(" S item S ")"
uint            = "0" / DIGIT1 *DIGIT
tagged          = uint spec "(" S item S ")"

app-prefix      = lcalpha *lcldh ; including h and b64
                / ucalpha *ucldh ; tagged variant, if defined
app-string      = app-prefix sqstr
app-sequence    = app-prefix "<<" seq ">>"
app-rstring     = app-prefix rawstring
rawstring       = startrawdelim
                  [newline] ; swallow up to one leading newline
                  rawcontent
                  matchrawdelim
rawdelim        = 1*"`"
startrawdelim   = rawdelim
                  ; width (number of backquotes) distinguishes
                  ; between following matchrawdelim and shortrawdelim
matchrawdelim   = rawdelim ; width >= previous startrawdelim
shortrawdelim   = rawdelim ; width < previous startrawdelim
rawchars        = 1*(%x0a/%x0d / %x20-5f / %x61-7e / NONASCII)
rawcontent      = 1*(rawchars / shortrawdelim)

sqstr           = SQUOTE *single-quoted SQUOTE
bstr            = app-string / sqstr / app-rstring / rawstring
                / app-sequence / embedded
                  ; note: rawstring is text; app-... can be any type
tstr            = DQUOTE *double-quoted DQUOTE
embedded        = "<<" seq ">>"

array           = "[" (specms S item *(MSC item) SOC / spec S) "]"
map             = "{" (specms S keyp *(MSC keyp) SOC / spec S) "}"
keyp            = item S ":" S item

; We allow %x09 HT in prose, but not in string literals
blank           = %x09 / %x0A / %x0D / %x20
lblank          = %x0A / %x20  ; Not HT or CR (gone)
non-slash       = blank / %x21-2e / %x30-7F / NONASCII
non-slash-star  = blank / %x21-29 / %x2b-2e / %x30-7F / NONASCII
non-star        = blank / %x21-29 / %x2b-7F / NONASCII
end-star        = *non-star 1*"*"
non-lf          = %x09 / %x0D / %x20-7F / NONASCII
eol-comment     = "#" / "//"
comment         = "/" non-slash-star *non-slash "/"
                / "/*" end-star *(non-slash-star end-star) "/"
                / eol-comment *non-lf %x0A
; optional space
S               = *blank *(comment *blank)
; mandatory space
MS              = (blank/comment) S
; mandatory comma and/or space
MSC             = ("," S) / (MS ["," S])
; optional comma and/or space
SOC             = S ["," S]

; check semantically that strings are either all text or all bytes
; note that there must be at least one string to distinguish
streamstring    = "(_" MS string *(MSC string) SOC ")"
spec            = ["_" *wordchar]
specms          = ["_" *wordchar MS]

double-quoted   = unescaped
                / SQUOTE
                / "\" escapable-d

single-quoted   = unescaped
                / DQUOTE
                / "\" escapable-s

escapable1      = %s"b" ; BS backspace U+0008
                / %s"f" ; FF form feed U+000C
                / %s"n" ; LF line feed U+000A
                / %s"r" ; CR carriage return U+000D
                / %s"t" ; HT horizontal tab U+0009
                / "\"   ; \ backslash (reverse solidus) U+005C

escapable-d     = escapable1
                / DQUOTE
                / "/"   ; / slash (solidus) U+002F (JSON!)
                / (%s"u" hexchar) ;  uXXXX      U+XXXX

escapable-s     = escapable1
                / SQUOTE
                / (%s"u" hexchar-s) ;  uXXXX      U+XXXX

hexchar         = "{" (1*"0" [ hexscalar ] / hexscalar) "}"
                / non-surrogate
                / two-surrogate
non-surrogate   = ((DIGIT / "A"/"B"/"C" / "E"/"F") 3HEXDIG)
                / ("D" ODIGIT 2HEXDIG )
two-surrogate   = high-surrogate "\" %s"u" low-surrogate
high-surrogate  = "D" ("8"/"9"/"A"/"B") 2HEXDIG
low-surrogate   = "D" ("C"/"D"/"E"/"F") 2HEXDIG
hexscalar       = "10" 4HEXDIG / HEXDIG1 4HEXDIG
                / non-surrogate / 1*3HEXDIG

; single-quote hexchar-s: don't allow 0020..007e
hexchar-s       = "{" (1*"0" [ hexscalar-s ] / hexscalar-s) "}"
                / non-surrogate-s
                / two-surrogate
non-surrogate-s = "007F"                 ; rubout
                / "00" ("0"/"1"/"8"/"9"/HEXDIGA) HEXDIG
                / "0" HEXDIG1 2HEXDIG
                / non-surrogate-1
non-surrogate-1 = ((DIGIT1 / "A"/"B"/"C" / "E"/"F") 3HEXDIG)
                / ("D" ODIGIT 2HEXDIG )
hexscalar-s     = "10" 4HEXDIG / HEXDIG1 4HEXDIG
                / non-surrogate-1 / HEXDIG1 2HEXDIG
                / ("1"/"8"/"9"/HEXDIGA) HEXDIG
                / "7F"
                / HEXDIG1

; Note that no other C0 characters are allowed, including %x09 HT
unescaped       = %x0A ; new line
                / %x0D ; carriage return -- ignored on input
                / %x20-21
                     ; omit 0x22 "
                / %x23-26
                     ; omit 0x27 '
                / %x28-5B
                     ; omit 0x5C \
                / %x5D-7F
                / NONASCII

newline         = [%x0D] %x0A
DQUOTE          = %x22    ; " double quote
SQUOTE          = "'"     ; ' single quote
DIGIT           = %x30-39 ; 0-9
DIGIT1          = %x31-39 ; 1-9
ODIGIT          = %x30-37 ; 0-7
BDIGIT          = %x30-31 ; 0-1
HEXDIGA         = "A" / "B" / "C" / "D" / "E" / "F"
; Note: double-quoted strings as in "A" are case-insensitive in ABNF
HEXDIG          = DIGIT / HEXDIGA
HEXDIG1         = DIGIT1 / HEXDIGA
lcalpha         = %x61-7A ; a-z
lcldh           = lcalpha / DIGIT / "-"
ucalpha         = %x41-5A ; A-Z
ucldh           = ucalpha / DIGIT / "-"
ALPHA           = lcalpha / ucalpha
wordchar        = "_" / ALPHA / DIGIT ; [_a-z0-9A-Z]
NONASCII        = %x80-D7FF / %xE000-10FFFF
]]></sourcecode>
        </figure>
        <t>While an ABNF grammar defines the set of character strings that are
considered to be valid EDN by this ABNF, the mapping of these
character strings into the generic data model of CBOR is not always
obvious.</t>
        <t>The following additional items should help in the interpretation:</t>
        <ol spacing="normal" type="1" start="1"><li>
            <t>As mentioned in the terminology (<xref target="terminology"/>), the ABNF terminal
  values in this document define Unicode scalar values (characters)
  rather than their UTF-8 encoding.  For example, the Unicode PLACE OF
  INTEREST SIGN (U+2318) would be defined in ABNF as %x2318.</t>
          </li>
          <li anchor="cr">
            <t>Unicode CARRIAGE RETURN characters (U+000D, often seen
  escaped as "\r" in many
  programming languages) that exist in the input (unescaped) are
  ignored as if they were not in the input wherever they appear.
  This is most important when they are found in (text or byte) string
  contexts (see the "unescaped" ABNF rule).
  On some platforms, a carriage return is always added in front of a
  LINE FEED (U+000A, also often seen escaped as "\n" in many
  programming languages), but on other platforms, carriage returns are
  not used at line breaks.
  The intent behind ignoring unescaped carriage returns is to ensure
  that input generated or processed on either of these kinds of
  platforms will generate the same bytes in the CBOR data items
  created from that input.
  (Platforms that use just a CARRIAGE RETURN by itself to signify an end of line
  are no longer relevant and the files they produce are out of scope
  for this document.)
  If a carriage return is needed in the CBOR data item, it can be
  added explicitly using the escaped form <tt>\r</tt>.</t>
          </li>
          <li anchor="decnumber">
            <t><tt>decnumber</tt> stands for an integer in the usual decimal notation, unless at
  least one of the optional parts starting with "." and "e" are
  present, in which case it stands for a floating point value in the
  usual decimal notation.  Note that the grammar now allows <tt>3.</tt> for
  <tt>3.0</tt> and <tt>.3</tt> for <tt>0.3</tt> (also for hexadecimal floating point
  below); implementers are advised that some platform numeric parsers
  accept only a subset of the floating point syntax in this document
  and may require some preprocessing to use here.</t>
          </li>
          <li>
            <t><tt>hexint</tt>, <tt>octint</tt>, and <tt>binint</tt> stand for an integer in the usual base 16/hexadecimal
  ("0x"), base 8/octal ("0o"), or base 2/binary ("0b") notation.
  <tt>hexfloat</tt> stands
  for a floating point number in the usual hexadecimal notation (which
  uses a mantissa in hexadecimal and an exponent in decimal notation,
  see Section 5.12.3 of <xref target="IEEE754"/>, Section 6.4.4.3 of <xref target="C"/>, or Section
  5.13.4 of <xref target="Cplusplus"/>; floating-suffix/floating-point-suffix from
  the latter two is not used here).</t>
          </li>
          <li>
            <t>For <tt>hexint</tt>, <tt>octint</tt>, <tt>binint</tt>, and when <tt>decnumber</tt> stands for an integer, the
  corresponding CBOR data item is represented using major type 0 or 1
  if possible, or using tag 2 or 3 if not.
  In the latter case, this specification does not define any encoding
  indicators that apply.
  If fine control over encoding is desired, this can be expressed by
  being explicit about the representation as a tag:
  E.g., <tt>987654321098765432310</tt>, which is equivalent to <tt>2(h'35 8a 75
  04 38 f3 80 f5 f6')</tt> in its preferred serialization, might be
  written as <tt>2_3(h'00 00 00 35 8a 75 04 38 f3 80 f5 f6'_1)</tt> if
  leading zeros need to be added during serialization to obtain
  specific sizes for tag head, byte string head, and the overall byte
  string.  </t>
            <t>
When <tt>decnumber</tt> stands for a floating point value, and for
<tt>hexfloat</tt> and <tt>nonfin</tt>, a floating point data item with major
type 7 is used in preferred serialization (unless modified by an
encoding indicator, which then needs to be <tt>_1</tt>, <tt>_2</tt>, or <tt>_3</tt>).
For this, the number range needs to fit into an <xref target="IEEE754"/> binary64 (or the size
corresponding to the encoding indicator), and the precision will be
adjusted to binary64 before further applying preferred serialization
(or to the size corresponding to the encoding indicator).
Tag 4/5 representations are not generated in these cases.
Future app-prefixes could be defined to allow more control for
obtaining a tag 4/5 representation directly from a hex or decimal
floating point literal.</t>
          </li>
          <li anchor="spec">
            <t><tt>spec</tt> stands for an encoding indicator.
  See <xref target="encoding-indicators"/> for details.</t>
          </li>
          <li anchor="rawstring-grammar">
            <t>The ABNF grammar for raw strings is lenient; a parser needs to
  implement the ABNF comments on <tt>matchrawdelim</tt> and <tt>shortrawdelim</tt> as
  well.
  <tt>shortrawdelim</tt> only matches sequences of backquotes that are
  shorter than <tt>startrawdelim</tt>.
  <tt>matchrawdelim</tt> only matches sequences of backquotes that are as
  long or longer than <tt>startrawdelim</tt>.
  Any excess number of backquotes in <tt>matchrawdelim</tt> are added to the
  string content.</t>
          </li>
        </ol>
        <aside>
          <t>In a PEG parser that implements predicates, these matching rules
can for instance be implemented as follows:</t>
          <artwork><![CDATA[
 startrawdelim = rawdelim&{|(rd)|@rdlen = rd.text_value.length}
 shortrawdelim = rawdelim&{|(rd)|rd.text_value.length < @rdlen}
 matchrawdelim = rawdelim&{|(rd)|rd.text_value.length >= @rdlen}
]]></artwork>
        </aside>
        <ol spacing="normal" type="1" start="8"><li anchor="concat">
            <t>Extended diagnostic notation allows a (text or byte) string to be
  built up from multiple (text or byte) string literals, separated by
  a <tt>+</tt> operator; these are then concatenated into a single string.  </t>
            <t><tt>string</tt>, <tt>string1e</tt>, <tt>string1</tt>, and <tt>ellipsis</tt> realize: (1) the
representation of strings in this form split up into multiple
chunks, and (2) the use of ellipses to represent elisions
(<xref target="elision"/>).  </t>
            <t>
Text strings and byte strings do not mix within such a
concatenation, except that byte string literal notation can be used
inside a sequence of concatenated text string notation literals, to
encode characters that may be better represented in an encoded way.
The following four text string values (adapted from <xref section="G.4" sectionFormat="of" target="RFC8610"/> by updating to explicit <tt>+</tt> operators) are equivalent:  </t>
            <artwork><![CDATA[
"Hello world"
"Hello " + "world"
"Hello" + h'20' + "world"
"" + h'48656c6c6f20776f726c64' + ""
]]></artwork>
            <t>
Similarly, the following byte string values are equivalent:  </t>
            <artwork><![CDATA[
'Hello world'
'Hello ' + 'world'
'Hello ' + h'776f726c64'
'Hello' + h'20' + 'world'
'' + h'48656c6c6f20776f726c64' + '' + b64''
h'4 86 56c 6c6f' + h' 20776 f726c64'
]]></artwork>
            <t>
The semantic processing of these constructs is governed by the
following rules:  </t>
            <ul spacing="normal">
              <li>
                <t>A single <tt>...</tt> is a general ellipsis, which by itself can stand
for any data item.
Multiple adjacent concatenated ellipses are equivalent to a single
ellipsis.</t>
              </li>
              <li>
                <t>An ellipsis can be concatenated (on one or both sides) with string
chunks (<tt>string1</tt>); the result is a CBOR tag number CPA888 that contains an
array with joined together spans of such chunks plus the ellipses
represented by <tt>888(null)</tt>.</t>
              </li>
              <li>
                <t>If there is no ellipsis in the concatenated list, the result of
processing the list will always be a single item.</t>
              </li>
              <li>
                <t>The bytes in the concatenated sequence of string chunks are simply
joined together, proceeding from left to right.
If the left hand side of a concatenation is a text string, the
joining operation results in a text string, and that
result needs to be valid UTF-8 except for implementations that
support and are enabled for generation/ingestion of EDN for CBOR
data items that are well-formed but not valid.
If the left hand side is a byte string, the right hand side also
needs to be a byte string.</t>
              </li>
              <li>
                <t>Some of the strings may be app-strings.
If the result type of the app-string is an actual (text or byte)
string, joining of those string chunks occurs as with chunks
directly notated as string literals; otherwise the occurrence of more than
one app-string or an app-string together with a directly notated
string cannot be processed.
(This determination must be made at the time the app-string is
interpreted; see <xref target="unknown"/> for how this may not be immediately
during parsing.)</t>
              </li>
            </ul>
          </li>
        </ol>
        <section anchor="discussion-1">
          <name>Discussion</name>
          <t>Note that the syntax defined here for concatenation of components
uses an explicit <tt>+</tt> operator between the components to be
concatenated.</t>
          <aside>
            <t>This is not entirely backward compatible to <xref section="G.4" sectionFormat="of" target="RFC8610"/>,
which used simple juxtaposition to indicate concatenation of strings.
This was not widely implemented and got in the way of making the use
of commas optional in other places via the rule <tt>OC</tt>.</t>
          </aside>
        </section>
      </section>
      <section anchor="app-grammars">
        <name>ABNF Definitions for Application Extension Content</name>
        <t>This subsection provides ABNF definitions for the content of
application-oriented extension literals defined in <xref target="STD94"/> and in this
specification, where applicable.
These grammars describe the <em>decoded</em> content of the <tt>sqstr</tt> components that
combine with the application-extension identifiers used as prefixes to form
application-oriented extension literals.
Each of these may integrate ABNF rules defined in <xref target="abnf-grammar"/>,
which are not always repeated here.</t>
        <t><xref target="tab-prefixes"/> summarizes the app-prefix values defined in this document.</t>
        <table anchor="tab-prefixes">
          <name>App-prefix Values Defined in this Document</name>
          <thead>
            <tr>
              <th align="left">app-prefix</th>
              <th align="left">content of single-quoted string</th>
              <th align="left">result type</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">h</td>
              <td align="left">hexadecimal form of binary data</td>
              <td align="left">byte string</td>
            </tr>
            <tr>
              <td align="left">H</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">b64</td>
              <td align="left">base64 forms (classic or base64url) of binary data</td>
              <td align="left">byte string</td>
            </tr>
            <tr>
              <td align="left">B64</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">dt</td>
              <td align="left">RFC 3339 date/time</td>
              <td align="left">number (int or float)</td>
            </tr>
            <tr>
              <td align="left">DT</td>
              <td align="left">"</td>
              <td align="left">Tag 1 on the above</td>
            </tr>
            <tr>
              <td align="left">ip</td>
              <td align="left">IP address or prefix</td>
              <td align="left">byte string, <br/>array of length and byte string</td>
            </tr>
            <tr>
              <td align="left">IP</td>
              <td align="left">"</td>
              <td align="left">Tag 54 (IPv6) or 52 (IPv4) on the above</td>
            </tr>
            <tr>
              <td align="left">hash</td>
              <td align="left">string (usually used with sequences)</td>
              <td align="left">byte string</td>
            </tr>
            <tr>
              <td align="left">cri</td>
              <td align="left">RFC 3986 URI or URI reference</td>
              <td align="left">CBOR structure representing equivalent CRI</td>
            </tr>
            <tr>
              <td align="left">CRI</td>
              <td align="left">"</td>
              <td align="left">Tag 99 on the above</td>
            </tr>
          </tbody>
        </table>
        <t>Note that implementation platforms may already provide implementations
of grammars used in application-extensions, such as of RFC 3339 for
<tt>dt''</tt> and of IP address syntax for <tt>ip''</tt>.
EDN-based tools may want to use these implementation libraries instead
of using the grammars that are provided here as a reference.</t>
        <t>For convenience, the common definitions in <xref target="abnf-grammar-ext-common"/>
are not repeated in the below ABNF grammars.</t>
        <figure anchor="abnf-grammar-ext-common">
          <name>Common Rules Used in app-extension ABNF grammars</name>
          <sourcecode type="abnf" name="cbor-edn-extcommon.abnf"><![CDATA[
ALPHA           = %x41-5a / %x61-7a
DIGIT           = %x30-39 ; 0-9
HEXDIG          = DIGIT / HEXDIGA
HEXDIGA         = "A" / "B" / "C" / "D" / "E" / "F"
; Note: double-quoted strings as in "A" are case-insensitive in ABNF
lblank          = %x0A / %x20  ; Not HT or CR (gone)
non-lf          = %x20-7f / NONASCII
NONASCII        = %x80-D7FF / %xE000-10FFFF
]]></sourcecode>
        </figure>
        <section anchor="h-grammar">
          <name>h: ABNF Definition of Hexadecimal representation of a byte string</name>
          <t>The syntax of the content of byte strings represented in hex,
such as <tt>h''</tt>, <tt>h'0815'</tt>, or <tt>h'/head/ 63 /contents/ 66 6f 6f'</tt>
(another representation of <tt>&lt;&lt; "foo" &gt;&gt;</tt>), is described by the ABNF in <xref target="abnf-grammar-h"/>.
This syntax accommodates both lower case and upper case hex digits, as
well as blank space (including comments) around each hex digit.</t>
          <figure anchor="abnf-grammar-h">
            <name>ABNF Definition of Hexadecimal Representation of a Byte String</name>
            <sourcecode type="abnf" name="cbor-edn-ext-h.abnf"><![CDATA[
app-string-h    = S *(HEXDIG S HEXDIG S / ellipsis S)
                  [eol-comment *non-lf]
ellipsis        = 3*"."
non-slash       = lblank / %x21-2e / %x30-7f / NONASCII
non-slash-star  = lblank / %x21-29 / %x2b-2e / %x30-7f / NONASCII
non-star        = lblank / %x21-29 / %x2b-7f / NONASCII
end-star        = *non-star 1*"*"
non-lf          = %x20-7f / NONASCII
eol-comment     = "#" / "//"
S               = *lblank *(comment *lblank)
comment         = "/" non-slash-star *non-slash "/"
                / "/*" end-star *(non-slash-star end-star) "/"
                / eol-comment *non-lf %x0A
]]></sourcecode>
          </figure>
        </section>
        <section anchor="b64-grammar">
          <name>b64: ABNF Definition of Base64 representation of a byte string</name>
          <t>The syntax of the content of byte strings represented in base64 is
described by the ABNF in <xref target="abnf-grammar-b64"/>.</t>
          <t>This syntax allows both the classic (<xref section="4" sectionFormat="of" target="RFC4648"/>) and the
URL-safe (<xref section="5" sectionFormat="of" target="RFC4648"/>) alphabet to be used.
It accommodates, but does not require base64 padding.
Note that inclusion of classic base64 makes it impossible to have
in-line comments in b64, as "/" is valid base64-classic.</t>
          <figure anchor="abnf-grammar-b64">
            <name>ABNF definition of Base64 Representation of a Byte String</name>
            <sourcecode type="abnf" name="cbor-edn-ext-b64.abnf"><![CDATA[
app-string-b64  = B *(4(b64dig B))
                  [b64dig B b64dig B ["=" B "=" / b64dig B ["="]] B]
                  ["#" *non-lf]
b64dig          = ALPHA / DIGIT / "-" / "_" / "+" / "/"
B               = *lblank *(comment *lblank)
comment         = "#" *non-lf %x0A
]]></sourcecode>
          </figure>
        </section>
        <section anchor="dt-grammar">
          <name>dt: ABNF Definition of RFC 3339 Representation of a Date/Time</name>
          <t>The syntax of the content of <tt>dt</tt> literals can be described by the
ABNF for <tt>date-time</tt> in <xref target="abnf-grammar-dt"/>.
This is derived from <xref target="RFC3339"/> as summarized in <xref section="3" sectionFormat="of" target="RFC9165"/>.</t>
          <figure anchor="abnf-grammar-dt">
            <name>ABNF Definition of RFC3339 Representation of a Date/Time</name>
            <sourcecode type="abnf" name="cbor-edn-ext-dt.abnf"><![CDATA[
app-string-dt   = date-time

date-fullyear   = 4DIGIT
date-month      = 2DIGIT  ; 01-12
date-mday       = 2DIGIT  ; 01-28, 01-29, 01-30, 01-31 based on
                          ; month/year
time-hour       = 2DIGIT  ; 00-23
time-minute     = 2DIGIT  ; 00-59
time-second     = 2DIGIT  ; 00-58, 00-59, 00-60 based on leap sec
                          ; rules
time-secfrac    = "." 1*DIGIT
time-numoffset  = ("+" / "-") time-hour ":" time-minute
time-offset     = "Z" / time-numoffset

partial-time    = time-hour ":" time-minute ":" time-second
                  [time-secfrac]
full-date       = date-fullyear "-" date-month "-" date-mday
full-time       = partial-time time-offset

date-time       = full-date "T" full-time
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ip-grammar">
          <name>ip: ABNF Definition of Textual Representation of an IP Address</name>
          <t>The syntax of the content of <tt>ip</tt> literals can be described by the
ABNF for <tt>IPv4address</tt> and <tt>IPv6address</tt> in <xref section="3.2.2" sectionFormat="of" target="RFC3986"/>,
as included in slightly updated form in <xref target="abnf-grammar-ip"/>.</t>
          <figure anchor="abnf-grammar-ip">
            <name>ABNF Definition of Textual Representation of an IP Address</name>
            <sourcecode type="abnf" name="cbor-edn-ext-ip.abnf"><![CDATA[
app-string-ip = IPaddress ["/" uint]

IPaddress     = IPv4address
              / IPv6address

; ABNF from RFC 3986, re-arranged for PEG compatibility:

IPv6address   =                            6( h16 ":" ) ls32
              /                       "::" 5( h16 ":" ) ls32
              / [ h16               ] "::" 4( h16 ":" ) ls32
              / [ h16 *1( ":" h16 ) ] "::" 3( h16 ":" ) ls32
              / [ h16 *2( ":" h16 ) ] "::" 2( h16 ":" ) ls32
              / [ h16 *3( ":" h16 ) ] "::"    h16 ":"   ls32
              / [ h16 *4( ":" h16 ) ] "::"              ls32
              / [ h16 *5( ":" h16 ) ] "::"              h16
              / [ h16 *6( ":" h16 ) ] "::"

h16           = 1*4HEXDIG
ls32          = ( h16 ":" h16 ) / IPv4address
IPv4address   = dec-octet "." dec-octet "." dec-octet "." dec-octet
dec-octet     = "25" %x30-35         ; 250-255
              / "2" %x30-34 DIGIT    ; 200-249
              / "1" 2DIGIT           ; 100-199
              / %x31-39 DIGIT        ; 10-99
              / DIGIT                ; 0-9

DIGIT1        = %x31-39 ; 1-9
uint          = "0" / DIGIT1 *DIGIT
]]></sourcecode>
          </figure>
        </section>
        <section anchor="cri-grammar">
          <name>cri: ABNF Definition of URI Representation of a CRI</name>
          <t>It can be expected that implementations of the application-extension
identifier "<tt>cri</tt>" will make use of platform-provided URI
implementations, which will include a URI parser.</t>
          <t>In case such a URI parser is not available or inconvenient to
integrate,
a grammar of the content of <tt>cri</tt> literals is provided by the
ABNF for <tt>URI-reference</tt> in Section <xref target="RFC3986" section="4.1" sectionFormat="bare"/> of RFC 3986 <xref target="RFC3986"/> with certain
re-arrangements taken from <xref target="ip-grammar"/>;
these are reproduced in <xref target="abnf-grammar-cri"/>.
If the content is not ASCII only (i.e., for IRIs), first apply
<xref section="3.1" sectionFormat="of" target="RFC3987"/> and apply this grammar to the result.</t>
          <figure anchor="abnf-grammar-cri">
            <name>ABNF Definition of URI Representation of a CRI</name>
            <sourcecode type="abnf" name="cbor-edn-ext-cri.abnf"><![CDATA[
app-string-cri = URI-reference
; ABNF from RFC 3986:

URI           = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

hier-part     = "//" authority path-abempty
                 / path-absolute
                 / path-rootless
                 / path-empty

URI-reference = URI / relative-ref

absolute-URI  = scheme ":" hier-part [ "?" query ]

relative-ref  = relative-part [ "?" query ] [ "#" fragment ]

relative-part = "//" authority path-abempty
                 / path-absolute
                 / path-noscheme
                 / path-empty

scheme        = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )

authority     = [ userinfo "@" ] host [ ":" port ]
userinfo      = *( unreserved / pct-encoded / sub-delims / ":" )
host          = IP-literal / IPv4address / reg-name
port          = *DIGIT

IP-literal    = "[" ( IPv6address / IPvFuture  ) "]"

IPvFuture     = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )

; Use IPv6address, h16, ls32, IPv4adress, dec-octet as re-arranged
; for PEG Compatibility in Figure 6 of [RFC XXXX]:

IPv6address   =                            6( h16 ":" ) ls32
              /                       "::" 5( h16 ":" ) ls32
              / [ h16               ] "::" 4( h16 ":" ) ls32
              / [ h16 *1( ":" h16 ) ] "::" 3( h16 ":" ) ls32
              / [ h16 *2( ":" h16 ) ] "::" 2( h16 ":" ) ls32
              / [ h16 *3( ":" h16 ) ] "::"    h16 ":"   ls32
              / [ h16 *4( ":" h16 ) ] "::"              ls32
              / [ h16 *5( ":" h16 ) ] "::"              h16
              / [ h16 *6( ":" h16 ) ] "::"

h16           = 1*4HEXDIG
ls32          = ( h16 ":" h16 ) / IPv4address
IPv4address   = dec-octet "." dec-octet "." dec-octet "." dec-octet
dec-octet     = "25" %x30-35         ; 250-255
              / "2" %x30-34 DIGIT    ; 200-249
              / "1" 2DIGIT           ; 100-199
              / %x31-39 DIGIT        ; 10-99
              / DIGIT                ; 0-9

reg-name      = *( unreserved / pct-encoded / sub-delims )

path          = path-abempty    ; begins with "/" or is empty
                 / path-absolute   ; begins with "/" but not "//"
                 / path-noscheme   ; begins with a non-colon segment
                 / path-rootless   ; begins with a segment
                 / path-empty      ; zero characters

path-abempty  = *( "/" segment )
path-absolute = "/" [ segment-nz *( "/" segment ) ]
path-noscheme = segment-nz-nc *( "/" segment )
path-rootless = segment-nz *( "/" segment )
path-empty    = 0<pchar>

segment       = *pchar
segment-nz    = 1*pchar
segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
                 ; non-zero-length segment without any colon ":"

pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"

query         = *( pchar / "/" / "?" )

fragment      = *( pchar / "/" / "?" )

pct-encoded   = "%" HEXDIG HEXDIG

unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
reserved      = gen-delims / sub-delims
gen-delims    = ":" / "/" / "?" / "#" / "[" / "]" / "@"
sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
                 / "*" / "+" / "," / ";" / "="
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="integrated-grammars">
        <name>ABNF Definitions for Integrated Extension Parsers</name>
        <t>For some applications of EDN, it is an optimization to integrate
parsers for the content of some prefixed single-quoted string literals into
the main parser, handling both the string literal syntax (e.g., escapes such
as <tt>\'</tt> and <tt>\\</tt>) and the syntax of the extension content in one go.</t>
        <t>For application-extensions that only use printable ASCII characters
(from U+0020 to U+007E) minus single-quote <tt>'</tt> and backslash <tt>\</tt>, the ABNF
such as that given in <xref target="app-grammars"/> can be directly used as an
integrated parser, after adding some glue ABNF.
For instance, for app-string-dt, add an alternative to <tt>bstr</tt> that
points to a rule for prefixed single-quoted string literals (<xref target="abnf-grammar-sq-glue"/>).</t>
        <figure anchor="abnf-grammar-sq-glue">
          <name>Glue ABNF for Integrated DT Parser</name>
          <sourcecode type="abnf" name="cbor-edn-glue.abnf"><![CDATA[
bstr            = sq-app-string-dt /
                  app-string / sqstr / app-sequence / embedded
sq-app-string-dt = (%s"dt'"/%s"DT'") app-string-dt "'"
]]></sourcecode>
        </figure>
        <t>To facilitate writing integrated ABNF for more complex prefixed
string literals, the ABNF definitions in <xref target="abnf-grammar-sq"/> may
be useful and are used in the rest of this section.</t>
        <figure anchor="abnf-grammar-sq">
          <name>ABNF Definitions Useful for Integrated Extension Parsers</name>
          <sourcecode type="abnf" name="cbor-edn-intcommon.abnf"><![CDATA[
i-HT =        %s"\t" / %s"\u" ("0009" / "{" *("0") "9}")
i-LF = %x0a / %s"\n" / %s"\u" ("000A" / "{" *("0") "A}")
i-CR = %x0d / %s"\r" / %s"\u" ("000D" / "{" *("0") "D}")

i-blank = i-LF / i-CR / " "
i-non-lf = i-HT / i-CR / %x20-26 / "\'" / %x28-5b
         / "\\" / %x5d-7f / i-NONASCII

i-NONASCII = NONASCII / %s"\u" ESCGE7F

; hex escaping for U+007F or greater
ESCGE7F = "D" ("8"/"9"/"A"/"B") 2HEXDIG
          %s"\u" "D" ("C"/"D"/"E"/"F") 2HEXDIG
        / FOURHEX1 / "0" HEXDIG1 2HEXDIG / "00" TWOHEX1
        / "{" *("0")
          ("10" 4HEXDIG / HEXDIG1 4HEXDIG
           / FOURHEX1 / HEXDIG1 2HEXDIG / TWOHEX1)
          "}"

; xxxx - 0xxx - Dhigh\uDloow
FOURHEX1 = (DIGIT1 / "A"/"B"/"C" / "E"/"F") 3HEXDIG
         / "D" ODIGIT 2HEXDIG
; 00xx - ASCII + 007F
TWOHEX1  = ("8"/"9" / HEXDIGA) HEXDIG / "7F"
]]></sourcecode>
        </figure>
        <t>Similarly, for integrated parsers for extension literals built from raw strings, the ABNF
definitions in <xref target="abnf-grammar-rs"/> can be useful.
<tt>fitrawdelim</tt> only matches sequences of backquotes that are exactly as
long as a previous <tt>startrawdelim</tt>.</t>
        <figure anchor="abnf-grammar-rs">
          <name>ABNF Definitions Useful for Raw String Integrated Extension Parsers</name>
          <sourcecode type="abnf" name="cbor-edn-raw-intcommon.abnf"><![CDATA[
fitrawdelim  = rawdelim ; width == previous startrawdelim
r-non-lf = %x0D / %x20-5f / %x61-7f / NONASCII / shortrawdelim
]]></sourcecode>
        </figure>
        <aside>
          <t>In a PEG parser that implements predicates, the matching rule for fitrawdelim
can for instance be implemented as follows:</t>
          <artwork><![CDATA[
 fitrawdelim = rawdelim&{|(rd)|rd.text_value.length == @rdlen}
]]></artwork>
        </aside>
        <t>Four subsections with ABNF for integrated parsers follow, a pair for
<tt>h''</tt> and <tt>b64''</tt>, and a pair for <tt>h``</tt> and <tt>b64``</tt>.
There is no requirement for a new application-extension to supply ABNF
for an integrated parser (or any ABNF at all!), in particular if the
parsing function is likely to be fulfilled by a platform library.
If ABNF for the content of a single-quoted string is available in an
application-extension specification, ABNF for an integrated parser can
be written as a separate activity or also automatically derived.
At the time of writing, one example for a tool performing such a
derivation is available as open-source software <xref target="ABNFROB"/>.</t>
        <section anchor="sq-h-grammar">
          <name>h'': ABNF Definition of Integrated Parser</name>
          <t>With glue ABNF similar to that in <xref target="abnf-grammar-sq-glue"/> and common
definitions in Figures <xref format="counter" target="abnf-grammar-ext-common"/> and <xref format="counter" target="abnf-grammar-sq"/>, ABNF such as
that shown in <xref target="abnf-grammar-sq-h"/> can be used as an integrated parser
for <tt>h</tt> prefixed single-quote strings.</t>
          <figure anchor="abnf-grammar-sq-h">
            <name>ABNF Definition for Integrated Hex Parser</name>
            <sourcecode type="abnf" name="cbor-edn-int-hsq.abnf"><![CDATA[
sq-app-string-h = %s"h'" s-app-string-h "'"
s-app-string-h = h-S *(HEXDIG h-S HEXDIG h-S / ellipsis h-S)
    [eol-comment *i-non-lf]

h-S = *(i-blank) *(h-comment *(i-blank))
h-non-slash = i-blank / %x21-26 / "\'" / %x28-2e
            / %x30-5b / "\\" / %x5d-7f / i-NONASCII
h-non-slash-star = i-blank / %x21-26 / "\'" / %x28-29 / %x2b-2e
                 / %x30-5b / "\\" / %x5d-7f / i-NONASCII
h-non-star = i-blank / %x21-26 / "\'" / %x28-29 / %x2b-5b
           / "\\" / %x5d-7f / i-NONASCII
h-end-star = *h-non-star 1*"*"
h-comment = "/" h-non-slash-star *h-non-slash "/"
          / "/*" h-end-star *(h-non-slash-star h-end-star) "/"
          / eol-comment *i-non-lf i-LF
]]></sourcecode>
          </figure>
        </section>
        <section anchor="sq-b64-grammar">
          <name>b64'': ABNF Definition of Integrated Parser</name>
          <t>With glue ABNF similar to that in <xref target="abnf-grammar-sq-glue"/> and common
definitions in Figures <xref format="counter" target="abnf-grammar-ext-common"/> and <xref format="counter" target="abnf-grammar-sq"/>, ABNF such as
that shown in <xref target="abnf-grammar-sq-b64"/> can be used as an integrated parser
for <tt>b64</tt> prefixed single-quote strings.</t>
          <figure anchor="abnf-grammar-sq-b64">
            <name>ABNF Definition for Integrated Base64 Parser</name>
            <sourcecode type="abnf" name="cbor-edn-int-b64sq.abnf"><![CDATA[
sq-app-string-b64 = %s"b64'" s-app-string-b64 "'"
s-app-string-b64  = b64-S *(4(b64dig b64-S))
                  [b64dig b64-S b64dig b64-S
                   ["=" b64-S "=" / b64dig b64-S ["="]] b64-S]
                  ["#" *i-non-lf]
b64dig          = ALPHA / DIGIT / "-" / "_" / "+" / "/"
b64-S           = *i-blank *(b64-comment *i-blank)
b64-comment     = "#" *i-non-lf %x0A
]]></sourcecode>
          </figure>
        </section>
        <section anchor="sq-h-raw-grammar">
          <name>h``: ABNF Definition of Integrated Parser</name>
          <t>With glue ABNF similar to that in <xref target="abnf-grammar-sq-glue"/> and common
definitions in Figures <xref format="counter" target="abnf-grammar-ext-common"/>, <xref format="counter" target="abnf-grammar-sq"/>
and
<xref format="counter" target="abnf-grammar-rs"/>, ABNF such as that shown in <xref target="abnf-grammar-rs-h"/> can
be used as an integrated parser for <tt>h</tt> prefixed raw strings.</t>
          <figure anchor="abnf-grammar-rs-h">
            <name>ABNF Definition for Integrated Raw String Hex Parser</name>
            <sourcecode type="abnf" name="cbor-edn-int-hraw.abnf"><![CDATA[
raw-app-string-h = %s"h" startrawdelim r-app-string-h
r-app-string-h = rh-S *(HEXDIG rh-S HEXDIG rh-S / ellipsis rh-S)
    (eol-comment *r-non-lf matchrawdelim / fitrawdelim)
rh-S = *(lblank) *(rh-comment *(lblank))
rh-2 = %x61-7f / NONASCII / shortrawdelim
rh-non-slash = lblank / %x21-2e / %x30-5f / rh-2
rh-non-slash-star = lblank / %x21-29 / %x2b-2e / %x30-5f / rh-2
rh-non-star = lblank / %x21-29 / %x2b-5f / rh-2
rh-end-star = *rh-non-star 1*"*"
rh-comment = "/" rh-non-slash-star *rh-non-slash "/"
           / "/*" rh-end-star *(rh-non-slash-star rh-end-star) "/"
           / eol-comment *r-non-lf %x0A
]]></sourcecode>
          </figure>
        </section>
        <section anchor="sq-b64-raw-grammar">
          <name>b64``: ABNF Definition of Integrated Parser</name>
          <t>With glue ABNF similar to that in <xref target="abnf-grammar-sq-glue"/>, common
definitions in Figures <xref format="counter" target="abnf-grammar-ext-common"/>, <xref format="counter" target="abnf-grammar-sq"/>
and <xref format="counter" target="abnf-grammar-rs"/> as well as the rule
<tt>b64dig</tt> from <xref target="abnf-grammar-sq-b64"/>, ABNF such as
that shown in <xref target="abnf-grammar-rs-b64"/> can be used as an integrated parser
for <tt>b64</tt> prefixed raw strings.</t>
          <figure anchor="abnf-grammar-rs-b64">
            <name>ABNF Definition for Integrated Raw String Base64 Parser</name>
            <sourcecode type="abnf" name="cbor-edn-int-b64raw.abnf"><![CDATA[
raw-app-string-b64 = %s"b64" startrawdelim r-app-string-b64
r-app-string-b64  = rb64-S *(4(b64dig rb64-S))
                  [b64dig rb64-S b64dig rb64-S
                   ["=" rb64-S "=" / b64dig rb64-S ["="]] rb64-S]
                  ("#" *r-non-lf matchrawdelim / fitrawdelim)
rb64-S           = *lblank *(rb64-comment *lblank)
rb64-comment     = "#" *r-non-lf %x0A
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <t><cref anchor="to-be-removed">RFC Editor: please replace RFC-XXXX with the RFC
number of this RFC, [IANA.cbor-diagnostic-notation] with a
reference to the new registry group, and remove this note.</cref></t>
      <section anchor="appext-iana">
        <name>CBOR Diagnostic Notation Application-extension Identifiers Registry</name>
        <t>IANA is requested to create an "Application-Extension Identifiers"
registry in a new "CBOR Diagnostic Notation" registry group
[IANA.cbor-diagnostic-notation], with the policy "expert review"
(Section <xref target="RFC8126" section="4.5" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>).</t>
        <t anchor="de-instructions">The experts are instructed to be frugal in the allocation of
application-extension identifiers that are suggestive of generally applicable semantics,
keeping them in reserve for application-extensions that are likely to enjoy wide
use and can make good use of their conciseness.
The expert is also instructed to direct the registrant to provide a
specification (Section <xref target="RFC8126" section="4.6" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>), but can make exceptions,
for instance when a specification is not available at the time of
registration but is likely forthcoming.
If the expert becomes aware of application-extension identifiers that are deployed and
in use, they may also initiate a registration on their own if
they deem such a registration can avert potential future collisions.</t>
        <t>Each entry in the registry must include:</t>
        <dl newline="true">
          <dt>Application-Extension Identifier:</dt>
          <dd>
            <t>a lower case ASCII <xref target="STD80"/> string that starts with a letter and can
contain letters, digits, and hyphens after that (<tt>[a-z][a-z0-9-]*</tt>).
No other entry in the registry can have the same
application-extension identifier.</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>a brief description</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>(see Section <xref target="RFC8126" section="2.3" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>a reference document that provides a description of the
application-extension identifier</t>
          </dd>
        </dl>
        <t>The initial content of the registry is shown in <xref target="tab-iana"/>; all
initial entries have the Change Controller "IETF".</t>
        <table anchor="tab-iana">
          <name>Initial Content of Application-extension Identifier Registry</name>
          <thead>
            <tr>
              <th align="left">Application-extension Identifier</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">h</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">b32</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">h32</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">b64</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">false</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">true</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">null</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">undefined</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">dt</td>
              <td align="left">Date/Time</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">ip</td>
              <td align="left">IP Address/Prefix</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">hash</td>
              <td align="left">Cryptographic Hash</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">cri</td>
              <td align="left">Constrained Resource Identifier</td>
              <td align="left">RFC-XXXX, <xref target="I-D.ietf-core-href"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="reg-ei">
        <name>Encoding Indicators</name>
        <t>IANA is requested to create an "Encoding Indicators"
registry in the newly created "CBOR Diagnostic Notation" registry group
[IANA.cbor-diagnostic-notation], with the policy "specification required"
(Section <xref target="RFC8126" section="4.6" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>).</t>
        <t anchor="de-instructions-ei">The experts are instructed to be frugal in the allocation of
encoding indicators that are suggestive of generally applicable semantics,
keeping them in reserve for encoding indicator registrations that are likely to enjoy wide
use and can make good use of their conciseness.
If the expert becomes aware of encoding indicators that are deployed and
in use, they may also solicit a specification and initiate a registration on their own if
they deem such a registration can avert potential future collisions.</t>
        <t>Each entry in the registry must include:</t>
        <dl newline="true">
          <dt>Encoding Indicator:</dt>
          <dd>
            <t>an ASCII <xref target="STD80"/> string that starts with an underscore letter and
can contain zero or more underscores, letters and digits after that
(<tt>_[_A-Za-z0-9]*</tt>). No other entry in the registry can have the same
Encoding Indicator.</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>a brief description.
This description may employ an abbreviation of the form <tt>ai=</tt>nn,
where nn is the numeric value of the field <em>additional information</em>, the
low-order 5 bits of the initial byte (see Section <xref target="RFC8949" section="3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>(see Section <xref target="RFC8126" section="2.3" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>a reference document that provides a description of the
application-extension identifier</t>
          </dd>
        </dl>
        <t>The initial content of the registry is shown in <xref target="tab-iana-ei"/>; all
initial entries have the Change Controller "IETF".</t>
        <table anchor="tab-iana-ei">
          <name>Initial Content of Encoding Indicator Registry</name>
          <thead>
            <tr>
              <th align="left">Encoding Indicator</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">_</td>
              <td align="left">Indefinite Length Encoding (ai=31)</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_i</td>
              <td align="left">ai=0 to ai=23</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_0</td>
              <td align="left">ai=24</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_1</td>
              <td align="left">ai=25</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_2</td>
              <td align="left">ai=26</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_3</td>
              <td align="left">ai=27</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_4</td>
              <td align="left">Reserved (for ai=28)</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_5</td>
              <td align="left">Reserved (for ai=29)</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_6</td>
              <td align="left">Reserved (for ai=30)</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_7</td>
              <td align="left">Reserved (see _)</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
        <aside>
          <t>As the "Reference" column reflects, all the encoding indicators
initially registered are already defined in Section <xref target="RFC8949" section="8.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>,
with the exception of <tt>_i</tt>, which is defined in <xref target="grammar"/> of the
present document.</t>
        </aside>
      </section>
      <section anchor="media-type">
        <name>Media Type</name>
        <t>IANA is requested to add the following Media-Type to the "Media Types"
registry <xref target="IANA.media-types"/>.</t>
        <table anchor="new-media-type">
          <name>New Media Type application/cbor-diagnostic</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Template</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">cbor-diagnostic</td>
              <td align="left">application/cbor-diagnostic</td>
              <td align="left">RFC-XXXX, <xref target="media-type"/></td>
            </tr>
          </tbody>
        </table>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>cbor-diagnostic</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>binary (UTF-8)</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t><xref target="seccons"/> of RFC XXXX</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t><xref target="media-type"/> of RFC XXXX</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Tools interchanging a human-readable form of CBOR</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>The syntax and semantics of fragment identifiers is as specified for
"application/cbor".  (At publication of RFC XXXX, there is no
fragment identification syntax defined for "application/cbor".)</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <t><br/>
            </t>
            <dl>
              <dt>Deprecated alias names for this type:</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>Magic number(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>File extension(s):</dt>
              <dd>
                <t>.diag</t>
              </dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </dd>
          <dt>Person &amp; email address to contact for further information:</dt>
          <dd>
            <t>CBOR WG mailing list (cbor@ietf.org),
or IETF Applications and Real-Time Area (art@ietf.org)</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>LIMITED USE</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>CBOR diagnostic notation represents CBOR data items, which are the
format intended for actual interchange.
The media type application/cbor-diagnostic is intended to be used
within documents about CBOR data items, in diagnostics for human
consumption, and in other representations of CBOR data items that
are necessarily text-based such as in configuration files or other
data edited by humans, often under source-code control.</t>
          </dd>
          <dt>Author/Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Provisional registration:</dt>
          <dd>
            <t>no</t>
          </dd>
        </dl>
      </section>
      <section anchor="content-format">
        <name>Content-Format</name>
        <t>IANA is requested to register a Content-Format number in the
<xref section="&quot;CoAP Content-Formats&quot;" relative="#content-formats" sectionFormat="bare" target="IANA.core-parameters"/>
sub-registry, within the "Constrained RESTful Environments (CoRE)
Parameters" Registry <xref target="IANA.core-parameters"/>, as follows:</t>
        <table anchor="tab-content-format">
          <name>New Content-Format for application/cbor-diagnostic</name>
          <thead>
            <tr>
              <th align="left">Content-Type</th>
              <th align="left">Content Coding</th>
              <th align="left">ID</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">application/cbor-diagnostic</td>
              <td align="left">-</td>
              <td align="left">TBD1</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
        <t>TBD1 is to be assigned from the space 256..9999, according to the
procedure "IETF Review or IESG Approval", preferably a number less
than 1000.</t>
      </section>
      <section anchor="iana-standin">
        <name>Stand-in Tags</name>
        <t><cref anchor="cpa_1">RFC-Editor: This document uses the CPA (code point allocation)
  convention described in [I-D.bormann-cbor-draft-numbers].  For
  each usage of the term "CPA", please remove the prefix "CPA"
  from the indicated value and replace the residue with the value
  assigned by IANA; perform an analogous substitution for all other
  occurrences of the prefix "CPA" in the document.  Finally,
  please remove this note.</cref></t>
        <t>In the "CBOR Tags" registry <xref target="IANA.cbor-tags"/>, IANA is requested to assign the
tags in <xref target="tab-tag-values"/> from the "specification required" space
(suggested assignments: 888 and 999), with the present document as the
specification reference.</t>
        <table anchor="tab-tag-values">
          <name>Values for Tags</name>
          <thead>
            <tr>
              <th align="right">Tag</th>
              <th align="left">Data Item</th>
              <th align="left">Semantics</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">CPA888</td>
              <td align="left">null or array</td>
              <td align="left">Diagnostic Notation Ellipsis</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="right">CPA999</td>
              <td align="left">array</td>
              <td align="left">Diagnostic Notation<br/>Unresolved Application-Extension</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="seccons">
      <name>Security considerations</name>
      <t>The security considerations of <xref target="STD94"/> and <xref target="RFC8610"/> apply.</t>
      <t>The EDN specification provides two explicit extension points,
application-extension identifiers (<xref target="appext-iana"/>) and encoding
indicators (<xref target="reg-ei"/>).
Extensions introduced this way can have their own security
considerations (see, e.g., <xref section="5" sectionFormat="of" target="I-D.ietf-cbor-edn-e-ref"/>).
When implementing tools that support the use of EDN extensions, the
implementer needs to be careful not to inadvertently introduce a
vector for an attacker to invoke extensions not planned for by the
tool operator, who might not have considered security considerations
of specific extensions such as those posed by their use of
dereferenceable identifiers (<xref section="6" sectionFormat="of" target="I-D.bormann-t2trg-deref-id"/>).
For instance, tools might require explicitly enabling the use of each
extension that is not on an allowlist.
This task can possibly be
made less onerous by combining it with a mechanism for supplying any
parameters controlling such an extension.</t>
    </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="RFC8742">
          <front>
            <title>Concise Binary Object Representation (CBOR) Sequences</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>This document describes the Concise Binary Object Representation (CBOR) Sequence format and associated media type "application/cbor-seq". A CBOR Sequence consists of any number of encoded CBOR data items, simply concatenated in sequence.</t>
              <t>Structured syntax suffixes for media types allow other media types to build on them and make it explicit that they are built on an existing media type as their foundation. This specification defines and registers "+cbor-seq" as a structured syntax suffix for CBOR Sequences.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8742"/>
          <seriesInfo name="DOI" value="10.17487/RFC8742"/>
        </reference>
        <referencegroup anchor="STD68" target="https://www.rfc-editor.org/info/std68">
          <reference anchor="RFC5234" target="https://www.rfc-editor.org/info/rfc5234">
            <front>
              <title>Augmented BNF for Syntax Specifications: ABNF</title>
              <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
              <author fullname="P. Overell" initials="P." surname="Overell"/>
              <date month="January" year="2008"/>
              <abstract>
                <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="68"/>
            <seriesInfo name="RFC" value="5234"/>
            <seriesInfo name="DOI" value="10.17487/RFC5234"/>
          </reference>
        </referencegroup>
        <referencegroup anchor="STD63" target="https://www.rfc-editor.org/info/std63">
          <reference anchor="RFC3629" target="https://www.rfc-editor.org/info/rfc3629">
            <front>
              <title>UTF-8, a transformation format of ISO 10646</title>
              <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
              <date month="November" year="2003"/>
              <abstract>
                <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="63"/>
            <seriesInfo name="RFC" value="3629"/>
            <seriesInfo name="DOI" value="10.17487/RFC3629"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC7405">
          <front>
            <title>Case-Sensitive String Support in ABNF</title>
            <author fullname="P. Kyzivat" initials="P." surname="Kyzivat"/>
            <date month="December" year="2014"/>
            <abstract>
              <t>This document extends the base definition of ABNF (Augmented Backus-Naur Form) to include a way to specify US-ASCII string literals that are matched in a case-sensitive manner.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7405"/>
          <seriesInfo name="DOI" value="10.17487/RFC7405"/>
        </reference>
        <reference anchor="RFC3339">
          <front>
            <title>Date and Time on the Internet: Timestamps</title>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <author fullname="C. Newman" initials="C." surname="Newman"/>
            <date month="July" year="2002"/>
            <abstract>
              <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3339"/>
          <seriesInfo name="DOI" value="10.17487/RFC3339"/>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC3987">
          <front>
            <title>Internationalized Resource Identifiers (IRIs)</title>
            <author fullname="M. Duerst" initials="M." surname="Duerst"/>
            <author fullname="M. Suignard" initials="M." surname="Suignard"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>This document defines a new protocol element, the Internationalized Resource Identifier (IRI), as a complement of the Uniform Resource Identifier (URI). An IRI is a sequence of characters from the Universal Character Set (Unicode/ISO 10646). A mapping from IRIs to URIs is defined, which means that IRIs can be used instead of URIs, where appropriate, to identify resources.</t>
              <t>The approach of defining a new protocol element was chosen instead of extending or changing the definition of URIs. This was done in order to allow a clear distinction and to avoid incompatibilities with existing software. Guidelines are provided for the use and deployment of IRIs in various protocols, formats, and software components that currently deal with URIs.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3987"/>
          <seriesInfo name="DOI" value="10.17487/RFC3987"/>
        </reference>
        <reference anchor="RFC9164">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags for IPv4 and IPv6 Addresses and Prefixes</title>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>This specification defines two Concise Binary Object Representation (CBOR) tags for use with IPv6 and IPv4 addresses and prefixes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9164"/>
          <seriesInfo name="DOI" value="10.17487/RFC9164"/>
        </reference>
        <reference anchor="RFC9485">
          <front>
            <title>I-Regexp: An Interoperable Regular Expression Format</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="T. Bray" initials="T." surname="Bray"/>
            <date month="October" year="2023"/>
            <abstract>
              <t>This document specifies I-Regexp, a flavor of regular expression that is limited in scope with the goal of interoperation across many different regular expression libraries.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9485"/>
          <seriesInfo name="DOI" value="10.17487/RFC9485"/>
        </reference>
        <reference anchor="IANA.cose" target="https://www.iana.org/assignments/cose">
          <front>
            <title>CBOR Object Signing and Encryption (COSE)</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.cbor-tags" target="https://www.iana.org/assignments/cbor-tags">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.media-types" target="https://www.iana.org/assignments/media-types">
          <front>
            <title>Media Types</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.core-parameters" target="https://www.iana.org/assignments/core-parameters">
          <front>
            <title>Constrained RESTful Environments (CoRE) Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <referencegroup anchor="BCP26" target="https://www.rfc-editor.org/info/bcp26">
          <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126">
            <front>
              <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
              <author fullname="M. Cotton" initials="M." surname="Cotton"/>
              <author fullname="B. Leiba" initials="B." surname="Leiba"/>
              <author fullname="T. Narten" initials="T." surname="Narten"/>
              <date month="June" year="2017"/>
              <abstract>
                <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
                <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
                <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="26"/>
            <seriesInfo name="RFC" value="8126"/>
            <seriesInfo name="DOI" value="10.17487/RFC8126"/>
          </reference>
        </referencegroup>
        <referencegroup anchor="STD80" target="https://www.rfc-editor.org/info/std80">
          <reference anchor="RFC0020" target="https://www.rfc-editor.org/info/rfc20">
            <front>
              <title>ASCII format for network interchange</title>
              <author fullname="V.G. Cerf" initials="V.G." surname="Cerf"/>
              <date month="October" year="1969"/>
            </front>
            <seriesInfo name="STD" value="80"/>
            <seriesInfo name="RFC" value="20"/>
            <seriesInfo name="DOI" value="10.17487/RFC0020"/>
          </reference>
        </referencegroup>
        <reference anchor="I-D.ietf-core-href">
          <front>
            <title>Constrained Resource Identifiers</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date day="21" month="November" year="2025"/>
            <abstract>
              <t>   The Constrained Resource Identifier (CRI) is a complement to the
   Uniform Resource Identifier (URI) that represents the URI components
   in Concise Binary Object Representation (CBOR) rather than as a
   sequence of characters.  This approach simplifies parsing,
   comparison, and reference resolution in environments with severe
   limitations on processing power, code size, and memory size.

   This RFC updates RFC 7595 by adding a column on the "URI Schemes"
   registry.


   // (This "cref" paragraph will be removed by the RFC editor:) After
   // approval of -28 and nit fixes in -29, the present revision -30
   // contains two more small fixes for nits that were uncovered in the
   // RPC intake process.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-30"/>
        </reference>
        <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="C" target="https://www.iso.org/standard/82075.html">
          <front>
            <title>Information technology — Programming languages — C</title>
            <author>
              <organization>International Organization for Standardization</organization>
            </author>
            <date year="2024" month="October"/>
          </front>
          <seriesInfo name="ISO/IEC" value="9899:2024"/>
          <annotation> 
The standard is widely known as C23. Its technical content is also available via <eref target="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf">https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf</eref>.</annotation>
          <refcontent>Edition 5</refcontent>
        </reference>
        <reference anchor="Cplusplus" target="https://www.iso.org/standard/83626.html">
          <front>
            <title>Programming languages — C++</title>
            <author>
              <organization>International Organization for Standardization</organization>
            </author>
            <date year="2024" month="October"/>
          </front>
          <seriesInfo name="ISO/IEC" value="14882:2024"/>
          <annotation> 
The standard is widely known as C++23. Its technical content is also available via <eref target="https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4950.pdf">https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4950.pdf</eref>.</annotation>
          <refcontent>Edition 7</refcontent>
        </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="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="RFC7049">
          <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="October" year="2013"/>
            <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>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7049"/>
          <seriesInfo name="DOI" value="10.17487/RFC7049"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC9290">
          <front>
            <title>Concise Problem Details for Constrained Application Protocol (CoAP) APIs</title>
            <author fullname="T. Fossati" initials="T." surname="Fossati"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="October" year="2022"/>
            <abstract>
              <t>This document defines a concise "problem detail" as a way to carry machine-readable details of errors in a Representational State Transfer (REST) response to avoid the need to define new error response formats for REST APIs for constrained environments. The format is inspired by, but intended to be more concise than, the problem details for HTTP APIs defined in RFC 7807.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9290"/>
          <seriesInfo name="DOI" value="10.17487/RFC9290"/>
        </reference>
        <referencegroup anchor="STD90" target="https://www.rfc-editor.org/info/std90">
          <reference anchor="RFC8259" target="https://www.rfc-editor.org/info/rfc8259">
            <front>
              <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
              <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
              <date month="December" year="2017"/>
              <abstract>
                <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
                <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="90"/>
            <seriesInfo name="RFC" value="8259"/>
            <seriesInfo name="DOI" value="10.17487/RFC8259"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC7493">
          <front>
            <title>The I-JSON Message Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="March" year="2015"/>
            <abstract>
              <t>I-JSON (short for "Internet JSON") is a restricted profile of JSON designed to maximize interoperability and increase confidence that software can process it successfully with predictable results.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7493"/>
          <seriesInfo name="DOI" value="10.17487/RFC7493"/>
        </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="1" month="March" year="2026"/>
            <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, from
   implementers of CBOR libraries, and from implementers 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 still rather drafty, 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-03"/>
        </reference>
        <reference anchor="RFC9165">
          <front>
            <title>Additional Control Operators for the Concise Data Definition Language (CDDL)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>The Concise Data Definition Language (CDDL), standardized in RFC 8610, provides "control operators" as its main language extension point.</t>
              <t>The present document defines a number of control operators that were not yet ready at the time RFC 8610 was completed:.plus,.cat, and.det for the construction of constants;.abnf/.abnfb for including ABNF (RFC 5234 and RFC 7405) in CDDL specifications; and.feature for indicating the use of a non-basic feature in an instance.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9165"/>
          <seriesInfo name="DOI" value="10.17487/RFC9165"/>
        </reference>
        <reference anchor="RFC9682">
          <front>
            <title>Updates to the Concise Data Definition Language (CDDL) Grammar</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="November" year="2024"/>
            <abstract>
              <t>The Concise Data Definition Language (CDDL), as defined in RFCs 8610 and 9165, provides an easy and unambiguous way to express structures for protocol messages and data formats that are represented in Concise Binary Object Representation (CBOR) or JSON.</t>
              <t>This document updates RFC 8610 by addressing related errata reports and making other small fixes for the ABNF grammar defined for CDDL.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9682"/>
          <seriesInfo name="DOI" value="10.17487/RFC9682"/>
        </reference>
        <reference anchor="I-D.ietf-cbor-edn-e-ref">
          <front>
            <title>External References to Values in CBOR Diagnostic Notation (EDN)</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="1" month="March" year="2026"/>
            <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.

   CBOR diagnostic notation (EDN) is widely used to represent CBOR data
   items in a way that is accessible to humans, for instance for
   examples in a specification.  At the time of writing, EDN did not
   provide mechanisms for composition of such examples from multiple
   components or sources.  This document uses EDN application extensions
   to provide two such mechanisms, both of which insert an imported data
   item into the data item being described in EDN:

   The e'' application extension provides a way to import data items,
   particularly constant values, from a CDDL model (which itself has
   ways to provide composition).

   The ref'' application extension provides a way to import data items
   that are described in EDN.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-e-ref-03"/>
        </reference>
        <reference anchor="I-D.bormann-t2trg-deref-id">
          <front>
            <title>The "dereferenceable identifier" pattern</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <date day="24" month="February" year="2026"/>
            <abstract>
              <t>   In a protocol or an application environment, it is often important to
   be able to create unambiguous identifiers for some meaning (concept
   or some entity).

   Due to the simplicity of creating URIs, these have become popular for
   this purpose.  Beyond the purpose of identifiers to be uniquely
   associated with a meaning, some of these URIs are in principle
   _dereferenceable_, so something can be placed that can be retrieved
   when encountering such a URI.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-t2trg-deref-id-07"/>
        </reference>
        <reference anchor="RFC9512">
          <front>
            <title>YAML Media Type</title>
            <author fullname="R. Polli" initials="R." surname="Polli"/>
            <author fullname="E. Wilde" initials="E." surname="Wilde"/>
            <author fullname="E. Aro" initials="E." surname="Aro"/>
            <date month="February" year="2024"/>
            <abstract>
              <t>This document registers the application/yaml media type and the +yaml structured syntax suffix with IANA. Both identify document components that are serialized according to the YAML specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9512"/>
          <seriesInfo name="DOI" value="10.17487/RFC9512"/>
        </reference>
        <reference anchor="YAML" target="https://yaml.org/spec/1.2.2/">
          <front>
            <title>YAML Ain't Markup Language (YAML™) Version 1.2</title>
            <author initials="O." surname="Ben-Kiki" fullname="Oren Ben-Kiki">
              <organization/>
            </author>
            <author initials="C." surname="Evans" fullname="Clark Evans">
              <organization/>
            </author>
            <author initials="I." surname="döt Net" fullname="Ingy döt Net">
              <organization/>
            </author>
            <date year="2021" month="October" day="01"/>
          </front>
          <refcontent>Revision 1.2.2</refcontent>
        </reference>
        <reference anchor="ABNFROB" target="https://github.com/cabo/abnftt">
          <front>
            <title>PEG-parsing using ABNF grammars (via treetop)</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 2676?>

<section anchor="edn-and-cddl">
      <name>EDN and CDDL</name>
      <t>This appendix is for information.</t>
      <t>EDN was designed as a language to provide a human-readable
representation of an instance, i.e., a single CBOR data item or CBOR
sequence.
CDDL was designed as a language to describe an (often large) set of
such instances (which itself constitutes a language), in the form of a
<em>data definition</em> or <em>grammar</em> (or sometimes called <em>schema</em>).</t>
      <t>The two languages share some similarities, not the least because they
have mutually inspired each other.
But they have very different roots:</t>
      <ul spacing="normal">
        <li>
          <t>EDN syntax is an extension to JSON syntax <xref target="STD90"/>.
(Any (interoperable) JSON text is also valid EDN.)</t>
        </li>
        <li>
          <t>CDDL syntax is inspired by ABNF's syntax <xref target="STD68"/>.</t>
        </li>
      </ul>
      <t>For engineers that are using both EDN and CDDL, it is easy to write
"CDDLisms" or "EDNisms" into their drafts that are meant to be in the
other language.
(This is one more of the many motivations to always validate formal
language instances with tools.)</t>
      <t>Important differences include:</t>
      <ul spacing="normal">
        <li>
          <t>Comment syntax.  CDDL inherits ABNF's semicolon-delimited end of
line characters, while EDN finds nothing in JSON that could be inherited here.
Inspired by JavaScript, EDN simplifies JavaScript's copy of the
original C comment syntax to be delimited by single slashes (where
line breaks are not of interest); it also adds traditional C-style
inline comments (<tt>/*</tt> ... <tt>*/</tt>) and end-of-line comments
that start with <tt>#</tt> or <tt>//</tt>.  </t>
          <dl spacing="compact">
            <dt>EDN:</dt>
            <dd>
              <sourcecode type="cbor-diag"><![CDATA[
{ / alg / 1: -7 / ECDSA 256 / }
,
{ 1:   # alg
    -7 # ECDSA 256
}
]]></sourcecode>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>? 1 =&gt; int / tstr,  ; algorithm identifier</tt></t>
            </dd>
          </dl>
        </li>
        <li>
          <t>Syntax for tags.  CDDL's tag syntax is part of the system for
referring to CBOR's fundamentals (the major type 6, in this case)
and (with <xref target="RFC9682"/>) allows specifying the actual tag number
separately, while EDN's tag syntax is a simple decimal number and a
pair of parentheses.  </t>
          <dl>
            <dt>EDN:</dt>
            <dd>
              <artwork><![CDATA[
98([h'', # empty encoded protected header
    {},  # empty unprotected header
    ...  # rest elided here
   ])
]]></artwork>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>COSE_Sign_Tagged = #6.98(COSE_Sign)</tt></t>
            </dd>
          </dl>
        </li>
        <li>
          <t>Embedded CBOR.  EDN has a special syntax to describe the content of
byte strings that are encoded CBOR data items.  CDDL can specify
these with a control operator, which looks very different.  </t>
          <dl>
            <dt>EDN:</dt>
            <dd>
              <artwork><![CDATA[
98([<< {/alg/ 1: -7 /ECDSA 256/} >>, # == h'a10126'
    ...                              # rest elided here
   ])
]]></artwork>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>serialized_map = bytes .cbor header_map</tt></t>
            </dd>
          </dl>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="list-of-figures">
      <name>List of Figures</name>
      <dl spacing="compact" indent="11">
        <dt><xref target="abnf-grammar"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar"/></t>
        </dd>
        <dt><xref target="abnf-grammar-ext-common"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-ext-common"/></t>
        </dd>
        <dt><xref target="abnf-grammar-h"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-h"/></t>
        </dd>
        <dt><xref target="abnf-grammar-b64"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-b64"/></t>
        </dd>
        <dt><xref target="abnf-grammar-dt"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-dt"/></t>
        </dd>
        <dt><xref target="abnf-grammar-ip"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-ip"/></t>
        </dd>
        <dt><xref target="abnf-grammar-cri"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-cri"/></t>
        </dd>
        <dt><xref target="abnf-grammar-sq-glue"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-sq-glue"/></t>
        </dd>
        <dt><xref target="abnf-grammar-sq"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-sq"/></t>
        </dd>
        <dt><xref target="abnf-grammar-rs"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-rs"/></t>
        </dd>
        <dt><xref target="abnf-grammar-sq-h"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-sq-h"/></t>
        </dd>
        <dt><xref target="abnf-grammar-sq-b64"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-sq-b64"/></t>
        </dd>
        <dt><xref target="abnf-grammar-rs-h"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-rs-h"/></t>
        </dd>
        <dt><xref target="abnf-grammar-rs-b64"/>:</dt>
        <dd>
          <t><xref format="title" target="abnf-grammar-rs-b64"/></t>
        </dd>
      </dl>
    </section>
    <section numbered="false" anchor="list-of-tables">
      <name>List of Tables</name>
      <dl spacing="compact" indent="11">
        <dt><xref target="tab-ei"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-ei"/></t>
        </dd>
        <dt><xref target="tab-numbers"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-numbers"/></t>
        </dd>
        <dt><xref target="tab-equiv-dt"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-equiv-dt"/></t>
        </dd>
        <dt><xref target="tab-equiv-ip"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-equiv-ip"/></t>
        </dd>
        <dt><xref target="tab-equiv-hash"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-equiv-hash"/></t>
        </dd>
        <dt><xref target="tab-prefixes"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-prefixes"/></t>
        </dd>
        <dt><xref target="tab-iana"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-iana"/></t>
        </dd>
        <dt><xref target="tab-iana-ei"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-iana-ei"/></t>
        </dd>
        <dt><xref target="new-media-type"/>:</dt>
        <dd>
          <t><xref format="title" target="new-media-type"/></t>
        </dd>
        <dt><xref target="tab-content-format"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-content-format"/></t>
        </dd>
        <dt><xref target="tab-tag-values"/>:</dt>
        <dd>
          <t><xref format="title" target="tab-tag-values"/></t>
        </dd>
      </dl>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The concept of application-oriented extensions to diagnostic notation,
as well as the definition for the "dt" extension, were inspired by the
CoRAL work by Klaus Hartke.</t>
      <t>(TBD)</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA8y9y3IbWZYguL9fcQuyKgIKvAmCDylUSZFUBLsjJJWoqOwq
hYpwAA7CQ4A7Eu4QxVRorMZsdjPLWcxizLpsrBdt1ssx603uIv8kv2A+Yc7r
vhwOUZGV1V3KDAmA+32fe96PVqul3p/ofaWKpFjEJ/qJ0vrs6YtX+uJDEafT
eKrPk+gmzfIimejnWREVSZbq+sX584aaZpM0WkKj6TqaFa0kLmatyThbt+Jp
2lokRbyOFnlrERVxXqgHegofTnS/2x+2uoNWd6jUu/juNltPT/RlCi+ncdE6
x57UJCpOdF5MVV6s42gJzy9eP1OTLM3jNN/kJ7pYb2K1WWGP8O1o2Os29dHx
4FipVXKi3xTZpKnzbA2tZzl8ulvyh0m2XEWTgj4s47TI36p362g5zW7T62yF
K8tPYP3Z4jovonVxHRXXs2SdF9fLaP0uXsu4KtoU82yNb7bgP60TaKbP2vpp
tl5GaUq/8cacRdA6ToMn2frmRP+QJu/jdZ4Uf/wvhX66jmE2+vU/XtILuOgY
NuAlbPosmsz1/n53MOjSs0lS3J1IA/4hm8I4563+0f7BsfyySYs1vPVNjIPe
0Y+reZbCe18NjluDfq/V7x21hvvH/R49jJdRsjjRk2ic/ab4fdKGGSr1Pk43
Ma5RHsK5/gZPmJ5qfZMU882Yf2/d3nS8I4enfOYnujYvilV+0unIa21u1k4y
v0GnplSKO1TApuCQV6/PjwfcN3x79ezs6HDQB4iIf8cPh0cnOhqnM/m2f6I3
xeyIXz0cdA/46STnX/b3949PCPqKZBnLb8dHQ2i1TuzXwxOdmK/HvSEMn6yK
6EZ+GBwd4PP4Jv6wgp8uT5+ftidZDluKf7fggf0VVwoNEUrhb/PzMp4mUau4
W8UEYtLBOm6tIoDAGPaBfn969rIPE0uiNEJw5wUedWFB+STB2V22ztt80bDx
HOAapkDzvry4uDg8GJzQkQL43iAMmf1P4hhmvoA2bfyIh9iB67vBW9A5OhwO
+32GHkED2Jm+KqJ0Gq2nepat9bNFBueT3rReZkla6NM1nCTMO5lQM3cl4FIw
iGMX9J3v/QxwQczwHa+TOE/SWcbvazMaIAJYQKvf7R3Lg/MXlye61233et3j
Dr4Fu9HG520357PqFd/e3raTPKOV5rKQzlG/e3jQnhfLRbBYmApBH2C2Ip7M
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
fu91v3vSHZx0u/9YAzQoS/DIULzKJnMJvkNfa/G0dezOdv+9em9/uH90POwP
upKt0iuoZX3YPTexSscwG/UR5rk224i3PLyTFTO5Ls2lTukTyanMqndt5/4B
yiE1SmlcHQxhUjOgl1NKz9NzgcHQuN5roJK1F+mD3mA8PBx3KWCYwSWYD8Eb
JTXxCzWzZElFKMsiJeM9v6jza6ybjdEWiEOAqAEX9AyRCkVgEHrhH/EGPweK
Su+iehh/boNobwWf3KssMLJF8dgdNUyg01ae0wCytlJhKZiYnDP7e2CIDD+u
N2ou/68v0ptrZKQndzXK5AqmJ30N+g2Yn3IZFb3MKYdNUZMM+qbSn2nW/dAb
NIhDMw2Vt1kuQ5tr0e82HCtoehn3MBlVg7hJFVYBvL/SLJZuU19/2R+JRzD+
04GUL8BhRMVd6Tkxixir36oz//jJOF77ZYWrStbd2wNf+tq0qHkb8PHBFJa8
nfdLfZknF/VmhOIi06ZkFGqR4g6hJmf6KVF5LpF9QajsKaGyc2z0WvDZKl4r
3xtzsKP4tKmE4QfEerGvVkC5QtM18qxuFHHcqxxsR63s3Gj1w7w6Mo0qY6Uk
NuRz2nLtdTGwWMQlFWWe6YLv6e6Zc9Cct4XKvtJWlzObjgpdUKigDgu+1t2r
MAHF9ZWtPqNGeGwteB9bj1j3Eo3TWUv8wltTrm/orLO4QlVKK8YLflR6K7UY
xQAuIqnbBIV3yYpvq0q2/LKSnomz5ccQ266NiV2RUOvXisTAP7QDYjY/4rwo
uz8SU1oJ+eFLRlXmIuElgmt7VzFqyaO+9nd2phV9xX13hZL7TW3KsYoEFj9r
Kt7jMgDem8Vv6zFloZsWe73j4XGre4isRLd/cjA86Q3/cW9EY4xavUHv4LiL
CfG1JMCrbtHuYhu/BWW3+1yLg1KL/faBa/H48a42T558rlWtulVtd6vz15/d
gV7drqgRlHwQoDAZ96bsQH3+2hnP3gPhs6eEyfUkIV3RKkVNpPr06fNnvpHe
sAoerqKqpZ4TEGPoZBVi6GT1r8HQ2FsFhk715UtloqvuwdGXL20cFuPKUmEI
1QL+I7r5Ndj48uX7gekT9gW+DsMhVOiJT7i/tVkn92Dh3xpXAq8erouSN04d
o2Q18vFHxUSDBBFbaFvy+7qNabuRPeRVMfLlSxnZG4yNTYFnGGznTTx1iXMF
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
TsFAsJLizHB8ra/b4aBpbvVAfwTmPK8YfuWCn512Mtza4VWznoyqR9uNOsV/
Ws8ox5OlmU85QfhzJpkfr5j54VabE+HvdZP50aqZtyOZt1fN/CiSmX5M5mRh
5sfxzO5nUeYnyzLTk3l5d5p5lQqHATiHBuMD1fCfuM6REjaCGev9zanJukiL
3pQEODaElT4p9728sbX9pKUPtJ7YinyVbD+hDfDJk0YzW9sm9ePEHoxRcuyX
j+vwTpR8q2U3RK/0LRwOPW0mN0gRQQ4kTyOJ68XqxDiSq4FQ1CEoZjV82xiE
a3QbIEmzeBvIJ0u3gRUFeMvsAySEoxsBzuJjWwkO0u8e+CTjCiaRC5wSZt7I
cbWl14seOiuP97rFXOQtcfli1nnt42sOvFN76kvVrEFwW99AoeTQNNMZN0i8
3bvMPs5nSXI85j2zcAiW+Z4d3O0RMlO82ytp2m5sCERk3wsY1VGyrXZjz6Ma
pPbcurbHPe5umQ2etomvZafT3kEaj97tHGIbTqnTxkYR93bqj18p5wDO4aQI
f47co6c9vIRpgv1W6d6Rs1kOgmjn3UG3w404enOEwPervKx0BJ7yN2qvEV9o
xwZOJBceFpej8Jyt5uzIuETaTYIui+6otF3+6O59eC1WvSF1kYhAmmopEzud
Jq0/tZJfZoPyloTqKRuKhsgnoW3epdQLeoNUgGw2BQbd9JZmznSYZpeDm8n0
tqmTbpjnVTGaRdDOTIKyKKajpuLgEkj5Kmi2dAOlKAe0NMj6wiOlzMtSbv4q
rVbKL4GBes3nlbooTP07ddG4kIYs6yLdXDvocrrwsN08ZjCWTCL46OvUdbbO
kvcUsqcEb07S+rpFbR8C2+KU+5L9JM+UTaCz0ItmYJ4Fiw1wiie9aWqc7Dfg
RZRydAlAiFlPUVykN0mPXqcmaCDYoXmcr3ljUPxuL4/eV5SXN7G4vL7yKUXq
+LZEsHiV943keu+A3bU5WGtUpBm0Bn8k0eK9qwM9o8PaUEc3RL52akJW+Wov
FWEU331f8YWAepVfo4I7ECOnWOJAJjz7t0qc/Fsl/rdK7JL/k1RiI5hMv64s
BNdxBjT1/Ml2g91CXnE5uM4Nvw7s74IVtdW2k2gBxv2cL5vmlWD2m0YJGV8u
9YoRrpcH1zdR/P/avh4pZFlW2wHIynTzLrZLes31Evc4WqYLpX4Ne0EuxU7N
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
AA==

-->

</rfc>
