<?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 3.4.8) -->
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-edn-literals-21" 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-21"/>
    <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="March" day="30"/>
    <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>-21</tt> incorporates pull request #84, including
more integrated parsers for using application
extensions with raw strings, as well as various cleanup.
<tt>-21</tt> is intended for use at the 2026-04-01 CBOR interim, but
contains no known April fools pranks.</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 144?>

<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, when we refer to "<em>diagnostic notation</em>", we 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, we stick 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 we call <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>"):  </t>
            <t>
In a position that allows blank space, any text within and including
a pair of slashes is considered blank space (and thus effectively a
comment).</t>
          </li>
          <li>
            <t>end-of-line comments, delimited by "<tt>#</tt>" and an end of line (LINE
FEED, U+000A):  </t>
            <t>
In a position that allows blank space, any text within and including
a pair of a "<tt>#</tt>" and 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>
      <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; we speak 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; we also speak of
<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>
          <!--
## Concatenated Strings {#concatenated-strings}

While the ability to include whitespace enables line-breaking of
encoded byte strings, a mechanism is needed to be able to include
text strings as well as byte strings in direct UTF-8 representation
into line-based documents (such as RFCs and source code).

We extend the diagnostic notation by allowing multiple text strings or
multiple byte strings to be notated separated by whitespace; these
are then concatenated into a single text or byte string, respectively.
Text strings and byte strings do not mix within such a
concatenation, except that byte string notation can be used inside a
sequence of concatenated text string notation to encode characters
that may be better represented in an encoded way.  The following four
values are equivalent:


~~~~
   "Hello world"
   "Hello " "world"
   "Hello" h'20' "world"
   "" h'48656c6c6f20776f726c64' ""
~~~~

Similarly, the following byte string values are equivalent:


~~~~
   'Hello world'
   'Hello ' 'world'
   'Hello ' h'776f726c64'
   'Hello' h'20' 'world'
   '' h'48656c6c6f20776f726c64' '' b64''
   h'4 86 56c 6c6f' h' 20776 f726c64'
~~~~

(Note that the approach of separating by whitespace, while familiar
from the C language, requires some attention — a single comma makes a
big difference here.)

-->

</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 backwards 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 strings
blank           = %x09 / %x0A / %x0D / %x20
non-slash       = blank / %x21-2e / %x30-7F / NONASCII
non-lf          = %x09 / %x0D / %x20-7F / NONASCII
comment         = "/" *non-slash "/"
                / "#" *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 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>
Note that the syntax defined here for concatenation of components
uses an explicit <tt>+</tt> operator between the components to be
concatenated (<xref section="G.4" sectionFormat="of" target="RFC8610"/> used simple juxtaposition,
which 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>
            <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>
      <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)
                  ["#" *non-lf]
ellipsis        = 3*"."
non-slash       = lblank / %x21-2e / %x30-7f / NONASCII
S               = *lblank *(comment *lblank )
comment         = "/" *non-slash "/"
                / "#" *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 *(icomment *lblank)
icomment        = "#" *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)
    ["#" *(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-comment = "/" *(h-non-slash) "/"
          / "#" *(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)
    ("#" *(r-non-lf) matchrawdelim / fitrawdelim)
rh-S = *(lblank) *(rh-comment *(lblank))
rh-non-slash = lblank / %x21-2e / %x30-5f / %x61-7f
             / NONASCII / shortrawdelim
rh-comment = "/" *(rh-non-slash) "/"
           / "#" *(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 2659?>

<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 end-of-line comments
starting with <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:
H4sIAAAAAAAAA8y9S3MbWZootj+/4gwUMwRUeAMEH1JpmiKpKtpVkkZUTd8Z
lYZIAAkiS2AmGpkQxVbJMY7wzl564YUj7oTjLm7EXTribnpX/U/6F/gn+Hud
VyIhqnq67VF3SQAyz/s73/vRarXU+2M9UKpIimV8rJ8orU+fvnilzz8UcTqL
Z/osia7TLC+SqX6eFVGRZKmun589b6hZNk2jG2g0W0fzopXExbw1nWTrVjxL
W8ukiNfRMm8toyLOC/VAz+DDse53+6NWd9AadJV6F9/dZuvZsb5I4eU0Llpn
2JOaRsWxzouZyot1HN3A8/PXz9Q0S/M4zTf5sS7Wm1htVtgjfDsc9bpNfXg0
PFJqlRzrN0U2beo8W0PreQ6f7m74wzS7WUXTgj7cxGmRv1Xv1tHNLLtNr7IV
riw/hvVny6u8iNbFVVRczZN1XlzdROt38VrGVdGmWGRrfLMF/2mdQDN92tZP
s/VNlKb0G2/MaQSt4zR4kq2vj/UPafI+XudJ8cf/Uuin6xhmo1//8wW9gIuO
YQNewqbPo+lCDwbd4bBLz6ZJcXcsDfiHbAbjnLX6h4P9I/llkxZreOubGAe9
ox9XiyyF974aHrWG/V6r3ztsjQZH/R49jG+iZHmsp9Ek+03x+6QNM1TqfZxu
YlyjPIRz/Q2eMD3V+jopFpsJ/966ve54Rw5P+cyPdW1RFKv8uNOR19rcrJ1k
foNOTakUd6iATcEhL1+fHQ25b/j26tnp4cGwDxAR/44fjg6PdTRJ5/JtcKw3
xfyQXz0Ydvf56TTnXwaDwdExQV+R3MTy29HhCFqtE/v14Fgn5utRbwTDJ6si
upYfhof7+Dy+jj+s4KeLk+cn7WmWw5bi3y14YH/FlUJDhFL42/x8E8+SqFXc
rWICMelgHbdWEUBgDPtAvz89fdmHiSVRGiG48wIPu7CgfJrg7C5aZ22+aNh4
AXANU6B5X5yfnx/sD4/pSAF8rxGGzP4ncQwzX0KbNn7EQ+zA9d3gLegcHoxG
/T5Dj6AB7ExfFlE6i9YzPc/W+tkyg/NJr1svsyQt9MkaThLmnUypmbsScCkY
xLEL+s73fg64IGb4jtdJnCfpPOP3tRkNEAEsoNXv9o7kwdmLi2Pd67Z7ve5R
B9+C3Wjj87ab82n1im9vb9tJntFKc1lI57DfPdhvL4qbZbBYmApBH2C2Ip4u
0myZXd/pP/3r/65frrNrOJ8bWDgAdXq9ia7jnJ6c7lw34TLqLVrqF+vrKE1+
z53jPppNld+8HQLMOGz1urv26PIF7MDpsT46PDo6xnfpAQAAAArgmMJM4nyW
0GD7PME0FaTNuB3//Olf/6t8er2ItdkcneT6NpnFyzv9LgWMCCCnT/uDthm/
yHlzkiksS8bENnCumY7eA5aIJstYv08iafHYP4psFactQOl0Hj8V014nn/b7
ndvr3hCfIzDmnXTQ73fbq9n8CY56ulpucvzv1xzwYNQfbR3wZ07xq6/+/zrH
3vDwsP8lB3nwlzjIr776ixzlzmPs9/gIV9EKUFkHljXopMOjfXOcibljjOER
pwPVBtw1my0FcXeHgKaz5azl8P5wNARUP4lyQdtH/SNos5oJjYDPP+W094T4
j4AQJC35BRHlhMkuMyXp5maCWFbLB4vq949pD9bZ0vw2goOhmW1oKIdzDXOD
GB8Qbwx/l4Yq+sX6ujXDJ60EENpM3sFu93vQ7V10s2w5agCP/unk+++qQRzf
ZfhexdNOr91v9zs+XGNLfZKke4X+HjiUzUp/J9Ct6/jsT//L/9XQ/4h8BoAR
NK8AdeZTXqyRSYGj/R+Td0nw5HQJHevz9xERI/f7RQoY8mc9++N/L/TzuAjB
vwfg3+r2dsD1q/h9YmZEczp5+vzZqxdPq/dAOAbg2DrIoHSQshdFcLvPv0Eq
muPt3tDf2KGmGw8/6zrAsSaeKls1lGq1WsAeAJMFnKBSrxcA94YSaoLRZfJ7
wA5wlxAs8myZEJupC7his3iepHwrszn9YthktZNNNm+eZuk0yWP9NEmj9Z1+
MfkpnhawGat1DGwtt1B15L0bTR3NZvAzLSa5WS2R3QNspIGGI0JJp3FbKWi6
jKb4Cgyzl2vo6H2SbXItd20J082BN2DGtqmTQgvLrAAaiV9u6mwCK4wLGgjQ
wiXMCWd+2KQNoPeIuw7fUycrQASz5IP+BiZyUTDmQChN5oDv4NCvE9jhuxZe
3RlMGzaJjnyFzANv7ibnTb1RBTTdrFbArwNa+lBAa39PcngITDAgMdjIeJVN
F9IrLaWDPB13CI8vXirZOfkNOponH+IcZvnmXwBBFhvg+d1HBrk6AcEUXgW8
uVzqSQxTuMnewxiTOzo73Ae4sgXcm8aPPyqDcWWaegwM9Ri2HXgyWAVBy2oD
Ha3j322AD9YPDodNfLzczGADqfkNsGLwUxFf4/swUYBUuKhEWhiIo9VqCQja
Ehe7iYjdi4VeR7coKsCrcLawO7cxjAj/vo/WBAXTZRylmxUjfZlhTkOSWMcD
xToqaIUslg3h1rL4h++tk5umnmwKESvgPEDS0WkmZOVktU6W0A/gTdiJKH2H
u4y36yYB1Aly0gUi1dmGIUr+fHyQ4K+f1NfeH7yGX3ZBNF8QXUcCAgDc0B8/
krTw6ROLYnDsCBgRX+VC3y6AP8eLkFyn+joDOJWDiGnZqwwu2SQBQeQO4Mfs
M4pXQD1zuENLkrB0DjihCTxssra/A9jliGn5EQCbf0rSJR5UtuEdTmPZ9feC
kNP4OisSWlYb9grvPKMWuA/YYML7QCcxXQBij2VRTXqcrZPrBFkTOi+5ex68
8OWfwKARXSu5NbWZQ1SGo6jpOmyjXP2R2QihyZ8+NeHFW+3eOMSrJgfwGyKK
nz41EMBFvgWah2uAa0RsBHwE4MFV4w+4HTRjOiUQAG9yu02L6L25H9AIjp1Q
QmZ2Alu01cePDvngRFpIqD994p1HyC4WDOcZHH7k+BrDC6n7NRsAx2fbu6Tz
O4DCD9ghbyX89D9cvnje5Pvo7qfCU7ZIDO8yLRipSbGG6+AwmrcwQlcoMcLg
jrcU7A7L2QIPIF8bOP2dUCK7nAG6hxUgJ/qez2IdA8YBoEBtiGD0ChCDe6/j
FA+QSR/iCgCMSOeLaI3Yt2KDEpwcogPcAFwP/GBoa+6dfRtWCIgWBomL2zj2
W/Gk4/fxMlsRScZuZKwEEJ3pTl3Habw255IjGDUJRyXphmkgo1bGGRcNFafv
k3WW0lTozXlyvZEX5gmssmmo0pr3Yx5NY57T+yS+JYwMdxypAH6mFQIWgK3J
4frTGSGFQm1PzdvPWY0PdoF8IOB8dQNoFTcjvLHwApwYDIl4gwgI9QHs9jry
cAluMEC3mmU3UZL6WH8dLxO+bYCJ82VkIAUHn6+zG9l3mScCBONEBON1SBV4
Z5et1QaoWc4nD4Ot1lmRTbOlipkdyQHiZY32HOUkAHCuI/ydm02ZHsPp5wnh
XehVLYFBgDdwXwDi//Sv/2vIiQWsFy3CsWbbnBgsq6lgpPfJjA5K3jY8oK7n
cQwITL4CssAeP34EEtsybCKhMDxhR8axK6EBtE7v3lumjDfa58suLJsFIwiW
RBzqcVCfR6U8jY8fBbGVWlYiPxrVp+7IUtGFjwjUoOkSmZo57DZMUphsBrpp
lCKqhlPGtYdgmfMrCAGwxZWsXnGb3cvuIVTBoakKnHGssjTm2yT4DY4N5pjN
GDHNcCbZmm9n8G7IIrUy3H+EKFEqEgjkfBzCaeaxmSlNPMNuqsbiIYhFU4gk
Ye9jAEigYEjvkQs1bZDXouGbim45d3n/tHhb4xTAakpbyyQEybQqc78VXC8z
vU3meLXleJXP8QKotEiDKQCFLxsO6xVQ1s0aRr6YIYGCc0Qx6fTVBUHdOuG7
4JALQMhn14SrcfNGVvpuVaDKZbWAo15E+QJ2agmsMNGcDTYlnDS5K2LDwyJw
OSLXZCpu0QGfG04TzgWFZ43Cs07s/GntkVFmtIQEOoqyDXlt5OFpjJgQIuK1
90gZET2zfCBr30Ue1/E0u04FJcEO0HsRX+yQslnSkN9kGdICncy9deT+JYSN
+HgcIab8pJ6oJyBhRgiCeLkRU5ieZhlhcbyalRuSM+v+hK8qHBIfOXGz9CrK
8QKIQNCRmGVTFEWgCYwUKO/W82mLxR/SRsAGALYDPNBxfbJqu118KJ60oYcT
5nkRThHwbtdENeVU1wb8kAbgbdusy7ODLrz5ebtjd2FOZEtEqi2OEpHFE/q1
BZSRJCyr+DumbX2ox4hux7p+C0C6IDaROCpg8GVj55slXQMWiBD0hNliIIBO
NKsJSDfnzxAvMjJnsXd2EU280XRjtxAqgwmkDBy4dFog0jWcAVE76XoR08BG
9jRXJOgYHhbFXdC1iDqwOtEkomDA+AJehRYIvTPqehF/mG1uVnhwMGlCdvBy
uMUwrWUGG4+nvIS55aLmoA4M2YWfPn5ctCzZpbXQHvHpocZyyivNM4YU7M/s
GvUFS3bk8qQ9EIKJmkBLsnnhQAn9FdtxfOXLGc7/zPEORl/WpLFOz86+a2rm
FQDEbxK2BAC/MAF+9BblAhAUYgZKj5W6AUm7EJGHRLMUttmTuUKUjmx0CV7b
6pm3IU0YHtV3MC7g45LCEH7E4xTByvYM1Cpn5lq5bpvu0FEVkaxZRUYbjQPs
5Vu0uq1IqWiQomamCshfvEbxX89BeNisty8m3BWhYYjwCBs7zh9FXxx655YQ
9JT2RNWNlBTfgBRrQRA2qoJmA/gjSk4KnrqZdqQXuC/QO9+scPp4hOWVKjMq
nMQiW3eA58QLiNNCyYewGKJMNPxRx4vkmhB6wBHSBizjaJ3iNJmJ+ABcPEDQ
gwf6ksRAmAe2JyJ0ZsQaoMCOVrUMrYJDp7vhk8QFyo9IYiabZFkwQfUYS7XN
WArXa175xvCeo14XWUjUwQCqRD2j7AVSVNaW46tyyp4eSiRRukzRsoq9432+
ReWdqCsAFj1sFqoddMuo/3E+n+eSP7sY1CQg77Zc4uP3qMyhrZrC+KgD+ZwK
oMY6gKa+TkgbUXiKPrv5yCMglm6rx3/TaqnL5CZZRuvlnVA4u/xptlmieOS0
E0gJAMWg2Rcwie2wyJSBWfObszU9j57rVXS3zKIZ3GnGcEizEWyJLzWkwYOP
tmq1nih1Mi9YoGVNXAbUy5DvpkhAMLVPnxTI4xtUihtVN3BS03hFEF7J+znE
YTw9gJ1TLJYJXajNiloTpOEV/o1cYI050RqwmDUPjvCoyXjVShDSGTxywKrI
cyX5DStUZjFcReiZsMwmFXXOZ9hS5gJmIBhPUFOAQACf+QyswRfHdiIgnrms
XyRI0fmwjImbjLYF1vgotKhHqSAwS8QsiiHyObMsrVwXOCLus8lIRpFcsfRk
VU9ObVAPRiRzJg1D1oztDhUzcJLMSlMbZK3Nd7sf9S2Rt80GkAS7BAbw1qm8
SWWXikCW8y2jg4ANe/wYfmihkwJsGXTqfQU8LM9RgneP+VuD5aRXRhDNbWvr
/9GyUmqODIPp3JkPgxdgASepf55k0LyB25XkVjXAIIPEXVaJ/BhMEy15CHVG
hkbU/NqRfXUfBjKAuq2NrcCEvPJdyku0fyxRKvUR7ham3Y1hAd42QASYP/ys
75YSDSdi+6ruvEGNonyVrTaA3RxkC4lUIWGuV3OKxPz6kl5DbGvsggUHqHMi
np+fjhGZWSO5pV1VOdpaCKSQ2kSzWZnADNt92nF4EQ/7JK9WYeaG+zfctn6X
sPTsiYEqT4C/51t9iyosPYmm727R+E7QV1gDAOF/UqOhGgakRVStAJ3PJoDx
psu4yapBHBcaFMuY+TAcm+chyDSPvZN5RKijUMBgAA9CWMcq5SwP7TR6N0Is
boERi9atDfueISlWuE42JyC/m++wDhDSBrCpEV0FcgaLhD24S7P0js/XIqMP
hWHl2mTVYa0nEi0gv7eig0Jwrl1VDHUFFOI2Jn4aKaJvqbEXzB5VmeOpZBKc
EgPvjwfc0rryOjZ3gU3TKHNVmSNoq28Be8K+0gJwUe+son4yQcssT7p2Bft4
VcMJJYaHw93UwJ4X0K1cNVKe52wlRLZzhWwTSMsADZsEfkD2n1bAbC1uGF4t
vCSpquFJ3QrnIXoVvGPIouj3cZK6E9c1pGe1Le6Bz8niHSM7h6xbC23xvMk+
eyMPpoS/+XZgHzW4OqgdgW5rLBmaLe5bqW6/Pxj+xnYLDX9IE7a/AeeGkyct
Uls9BVI/13mawOkxzBvqeRMhq0d0PDWASVAJk7xovSIHPtQm4S4jAScrO8ID
qsvYv49IwWu7QUg3gCe8T4JshFtG+E95WuqKLXQ6Xj7vIrd6Lp/BAiJpZJKC
rZlySK4TcV+xXHFLnFeYQDrFqkcoxRyDUyUNCQ60SFZOcYUbcJsp5y+FlBS7
J0KKBvNoheRAznyLmOIOvosRBa5ngFi+/+HyNfKB+K9+/oI+vzr/hx8uXp2f
4efLb0+++85+UPLG5bcvfvjuzH1yLU9ffP/9+fMzbgy/6uAnVfv+5J8Mu/ni
5euLF89PvqsAc4QxltsJu6MyBKWeXDnrKa3ub56evuwNmZ0BOO33ekfInfG3
w97BEL8hjhNdKyoA+Cvs4x0yZ4B5ifdHa0K0Sgrgx4gDzBfIx4oZ5OEb3J63
x/rxZLrqDZ/ID7jq4EezccGPtHHbv2w15p2s+KliGLulwe+l7Q7ne/JPwXez
+d6Pj/8eNUa61Tv8e5BQkOuqPwf+vcEWf+LAjbTry8WfRfR5YSWXzHSD71mB
JEJV/g00X2xuohSYyGhGWLSKCWB+kWgY4E5gJuEpIgzyoeGRjlFL+7tNVqCW
Vp8giWF7rK8sjpa30V0OWB6JjKWTgRKRuM4HGtU/3+LEcqVewN4AQ5StC9Qq
eRKOlUJ4nXa6ge4EOXRaYn6st8w5TbRdgfxYxJMMmBWxec5JpYJCIelogKVg
S/uJx4sa3q9pbdeGgUO1FYqtYniY6ZLU0aRLhvZK5jdQh4AjruIMmL5WkbX4
E3W4Sc1a0WmLbE7ivClWfFZ+A+ZabVh/Q6KhO0MxWnrzBBQZr9fZ2jhsoCoC
7zyzkr60UHf6ZM+6jECUzOe5Ijcy1G41jLXG7hSd4VnMOkOQWP9ekULP6zts
QYBkjQKyKQkPhLJNoUJ1Um4mxLxQjvrhOgqcTNQbZkOMXIgvbOsYjajH0zIq
xODK5HxnzEJwR3NSFhg3V2dRcfw9OnHl8fI9i3MlxqnsJ+IxSsz5InTESK2J
2SmpSsnAxkBGp438DZ6o3CGcieXJqrloewFQ8wQ8SsaOgpESo6iMgJBSCxZe
Y56VGSw7D+EvyDboATPdOL0BFmhNmgxSE8bt6zazWuPHj/WTJ2N3ZYHCZCsE
VDIajhd7e+NHqGzHNcpRZ8zMEMdNzCGateNbLYEqihWwTPnZ06Vq55iLzNnc
z2durLE+ZqHOGCYnsWiJCTEAbD+Np5EojREnN9HDKoCQ0plZ/wLmcxAhsR3D
P6Y0I6P51NNy1dYZbCAgj9UKZlBj/pYOPWNYJr0GyFlwe9ox7Cx7mWhxkFDW
z6iQVtqDEtsYfyedwCJZohPNIolRzYdGh2kBGMreLxGpo5J8n6QG86D/ePAI
fzQKd4VSKLvakEqFUTKiHvgSuYsenrhgkqdRDtv6gu/0MzY2la8N2XSMVt7f
SqvZtr0a86IyXi/iIIBix4SGcuiDjJukYQQK91Avs+wd3ql3Mbk6WXae/apk
sfEjeBOoAEwmr7SnG3aIJQGfAMpGsDimyKoFX4n9lX6wbzLgL+CEZnCXUStX
grg6XaAGAYSvaWiSXVfr8WQ0hBfIdBCqLOBiwr1s4CDWEGBRLbDFE3Ln1BPg
gt8BKommgHfT+JYsXujxNjNzoMF5AdacRkgArRLUNV4hYUG87pwvWESa2nFz
rNiqOD4eAziUDhIxgjXJBD5MDP05Sg9pgU6KMeq+dZwguBBUb2DOwHrC2usz
EHUQ2rVhgxqa75J94+Ty9OJCo9EIZC40L/JxZXPlxDhCryGxf8QGQbYiRKxr
M5dRzKOEVUvKLJLriM3YEJqWWXhDCd4lLGZ8lgKfLoGvFBhJnnupMZ5snP6U
3dEYLJ6RrxSQQoC1u7ZR4uNc2a1PeC3rKIXuHbgklqZXRD4B93p4B8PtsJXH
SVj9o49uPdnOaLKFEmOPDUXei+Fe1AmkCIHz+hBGDCjSDeMjso4bKiJZNGHP
SzprshV4cOBtkfFn40eym6oQjsFcdNx3fNPgnXwzyWOndPL6MyKrMhI8+hZc
Z+R5811Tf9/UsMEvm/qyqTHER/8z4cafNkCpeHl0O9Di6omvZQWkxnBQhD8V
EqSbaMVuqHgA97MkyBQzBmwqRBHIjMxYY4OefkiGCG0hqlThrcM9QDTKjm8R
Dg4sf5MQ7nyzJt4hyvFW4qvCD6JRyfGOfvRZNsFtNe4xEYvaN7B9S+pxES9X
1M8iy5B9UZ83fyCDaEwHck+rXOtVlYnVoEyRWWCgdbZCZydgrZaIt+BkXgA0
oW+kJrD6wqhh/fFBlYEz8Af/4j9KbflmbDvroKNP5vlWlgxsbCSabK6v2bbL
bqtO6MNL5DUOpRTRlijURBcJOTiRz6a41Wqv41DxYGwHBpWo+8VSWMdn5Ux1
j5zpXBcqzQjrDRLpyMN35Dvo3lXc0yPkEz1rLjYpO0FQNMOs7SuAgeGzUSlW
KVYn+Yxsag3qKNDbmUGU9SRoq1fic8Vq8ciE7DjTGN6TKJl5/rM2XIdcsfC4
N3lkff49NwW2MMBpAJEgjjUwDaL+XEhvTjP2tHu5UGoCRAwSR4MOol3ShhPn
xArfJC9ZvzGKDV06UkQsP23SqVNAoEaSotlQ7SQsF8Lnne8bvIyD93AoxfpO
lJbJp4gJMPzWaIqelqN49CQjfw02IdOOXxPD6hSjcBjwj1UwiI8jEDd4L2dP
ObuXsgWAUtdI9bE7WrhYUJFsSOQdkkcgBjGpudXcBBaTyIabLq+Re4+lNExw
xY0QcDr/0OIfyLL4w+tnrUPcDQwGh70gb0oXIbNewx3h+w30Afqgv1H6FK8A
FoIJIHHij3Za3HgTc14eW3/umDNg6+udE46NxxZSJFSGAiElgCHClhsOw7kq
0SWsVGfgXpeVAt+f/JMykVOexoLcuozjT4KOy772qEKCV9YLEBkHcp5EqQU4
V7zYsMXJzHgYe2o/8R3cdoYWGx0R6Q3FyCB7QubyZJog2wn7FdLRuvO60Scv
L5ACnX53oefL6Bq26h9xBnJdt4yLaMfLp5s8Lxv89q1ZIfCuVnS5WO55bzre
3UW7t9NFu4iuv6iHKqYDcKPf2th6UNJCFz3krCj8iR3lZgmgHcD61QTfcZNN
EWtFeQ+QnbNKJ1yuqhOwIZqQ+2H1gHgpGuwQKm7FtKBL4wDw8eNj8uIyXVmT
w2No6f9KuhCayAJoGjIrMI2H5oWHYiBYx+xExX4RsmcWywIwZAGPYdkZwwkq
cf7XlLDDuocYrCHyFqEg6Hvq85CijkjVdcbEZJ1trhdk7a1yR9P0mC6UEKcZ
a0bpvZvoJxD/2AdWnQAG8LzZgTeNEkQwggkFUhIKAYuRWbKuXDMj/RaZ8txA
2DXhxDv7F+bsz619/DvD9n18gE4egJI/MUa223llOMMr4zRgrJhbGj32X10C
Uv8e8Znw9+y7Dl8si+kcxdakATbEjZxIKFCFiSvLwYmQJcv8pGX/w9DK75T3
djfV1Rd6I101EYlcVTxgV50FIE0kWdtuTARKIrPpK1Zry45Z9+q8rEGrmArg
7Bvy2yTXI9+/Bh3A2FtBGRd6oGiGByeJZG3DNlpkZSCR14V8aq+dXGHx5rHS
N8nrpDlhh/agGYeF4B4siAbjuxz1YGZmXw1cLbznEvRGWjP2f8foDBnHwlLg
zc6+jr6vhcQaJb8XmeceM49xfrMgTVwF9QeDourHEHz2s3P2C2AL0PEUXXmR
czHapdyzUFtPZ2IcElJlLTNBgKItprNAv1pj7KDT5G+6/ssfFr/8N1IE4SC9
UVP/8ofJoM+/0cCDPv62KP22iD/Qq6Oh9/NoqKWj0XCzXsLhPjE7KIhEvG8x
dvJ6Qaw3YFO4OUmOkEtO5CRFS4Ai2YzQqV7V0BOvBjMjxzz6hwylMIGaLqJ3
aLfE++q80a1aOLVxAgxsBoOE0Wyi+THW7PAKS4eshk7Yj5Lnqfh0b5kl0w/9
++UushfjgGTk+4xRD1rn0QETNuXehg+ZU6ctEq0ZzhE99hTe0nULKadoIpYx
3af6+E3U+v3bMbsv/R4YcLySRLW9tVETX0dmWSvWxGmve+4YgxpBzsGoRDQk
3K0WKMPxaN3WUQtGbKtf/kD5c375bwgnKGDwp3SzXOInnNEvf0CSS+gXoKgU
kxCJqO/tHTsnksmFQsUw8OTkvg2XBtZJgW6ZCf9S7F+I7IE4A2KXoZOm69Wy
fONZAZsKvKxPHAhaxa2F406NQUMuG2p33htNCUVU3jN3dE9d25QJMSbW8s7C
nhjeaJJrYCHmGWbUiteoEuBZo8ZkfPYaD+Yk56gj8ZVk2oIL84TDpnPjwpvR
oq6pZ1kTWfuQqNxE7zwX/QjjgQPVi70zVZRHVewtdiBIsEetcdoG5+HGc9YY
F6K3SW/XeIYzadZoS46M8II79YVDsYLLkX3l2QENv49hNS6p5IMM4p4RSW+y
IsFgLCU7UvaA8wcz+WqaVj61rsy0JPFkZibq1FitPz4wBuxPbKwNLArQC1ts
mlZ6FhV0CisXb3vnwkiS4Dy6yTY5ym/l4Ik524Il9lgYT0+9UR1Kvds3Hp4u
MIzYBLuvSBlgRfBAU0FiAI8tdCO2PuR+XJVz1BLqIjg8MH2YEF6YTkU0u8jt
TbXlARAX03bjWCmyE5Hzh9sOdNC+ScRMli+jfIECfm3cGdewidbkvmYEZ8Gn
W3NjxQidkwRKsyLP5dyAPqKEANUMQqZwcl5AVBYslM9oAzzAfG5DCDAbkswb
r8VDNCe3snnrcwuqjR+M2YGSQqlmzD3D+/XvLp5jfrRn5+dnTf3DV91u9+Sv
tN7ImwXzOTPD0dNUdu4D9LJjJ/x9sFfKBycKPec4M9RjU4oKG/VCWj9Y6/8E
f7SNhFMdEHjyVUv8NDr6Tef7q7OLy9MX/3j+6p86utfUnZzd9VrJDL539w+H
Q+CylC7/6ViHBuzFfmkhwe/oWrbKM4zbrFU0Dfs5IzvFZUcfwODLLFu1iBjQ
4G/f0gIEP8LWbaYcVjx+A1O1s9NvvPGwH2o6JtLIDJbEu1FaygkJPMplXDAX
Bs+hCt54G71d/Kh0511xB1PUx3rY1A/05R28CldyCk+i5XVHD+DJPj759vuT
U93fH7XgP9iKzruObmGzxd5odDjc7w+iSe9gMDiYw9/73W68f9A/nI76h/vD
g+lkcDCbh/sXQ6Ph0XS0Pz883J/1JgeDyfAojuLenvqkqrfqY48mOaAJtXre
0CdPaehnPPQ5Dn3KQ58+HRycPTunwU5H+89gsLPe04PB0+HR+cl5b+/TmHH9
uTFFXzhT9McHhvVvOQM1UIDL7CbmVEKspRXfDtJ20muxEfwrHcYInQKbksfv
Wb5aSvK492WXFjTOrWMXa4q35RG7YBkwiFwIH0XOoo/QL3/otfeBrxPvATuF
GcXMAh+aoAgg7tlkkGBZhgS9RbSct5pGniQ+c5ZtgGS2mG8mxgXVsKKVKfEz
VSb9xHC26R1in+tQAaOsM8yU+GNEf8DQb8vDFB1XwSxHyxUIphtMljFFMcjr
jHXa23Nqmlhc8uaE/VmLeJbeoWCKngCkN4/zwguX8kOBNLnh2WMYX5HHwPhq
QIb4ik3gmZKPH3vlRMtjZXW67nwRjIxD6XaocmH9hdnUp5aY/oRDQsm4uEMf
HIKpU+awJTZLpiZhi+/A5VIWEKNrzdQVZ9xWFyV9s2iQHe8lQeiU2gjmYPgd
Uv3MxZgRoXGA5UnkoG6dlch4oEmKEOPgVdhcU6oyEQSdrTCFN2wyJiinacEe
SQoZuheKAYHNEbxBUxtnXLEx5GpW0G4Qz59/5uTJDjoLgFqM+Gu6jDIKeRrQ
Xc6EGlt1pFFGumBa4satG59DAxS8YOaBAfWEcKzSIpid0HP0C8OAOYxwK6JJ
K06AcbRsoY1M33XBmSlEvYEkFFNWM+r7FKqf9U2hf3b9lf78DC/oLrww7l31
QPIYdz8MD3o9uFP+Cz18oYVvbNNgeqGPL+yd7FW9QS8M8IXaSW3nC0N84c1V
T9cm0br2drz1wj6+8NG8cKx7n8bhCyNZRR0X0BhvD3FAL7T3r/puoauvugNc
7M/q47F+wOfAiQu/rtnMDnivKmgVHs2ZdRTDwAN1gbv+p3/9r3XY9K9Z60z5
Eho1oGH1i1TUtIJam+we54WfeIpcPY6Sr8dpKjGPKTklko5I0K51yqEWSbyc
6auoMpbgir0cYdAWq8X31SRxbiESH0z6uWMJrzeiTZWJRjxVeUhjHks8nE/B
pdH6mlTLNeMOiL/SnJso9iKVA0yaXheLR7TU7pgYDvjUh/PgEKOFIN9gqfDK
mAdX/t1+mOQPWYSXgZvc2dD1e1DqV5lXOVxiDfIvLaT/ON+snkRJqz983MGP
ug4cY7+JnBAc6GFDefuMuyZSIw4y6PEgQiyTVBQNqE7CxXo4k3eu3SAljEdB
Q1W08akjJZQep2PL8eRuIcgnxGI3BnRUR3JL+mKyqlqjKh8CvRIaZMI+JkDv
36FtfE0fY7b9G5aFNe+proY1Zc+K4Lc//AqmvEW68RZywkPhfkqMjrU3K9Ff
1PlMenIeXwPGKZ8BTrc30gjZDWNoo4EGNJDjuBQzV9qNKb0PbO+Hlb2Phty7
RJXTLTDHqQL8ThndKHKEg28Ek+Dd0RT3/bqaNCBPwwxUGS2QBzEHjWGah81y
yVYBoNPjq4OxURl48ZGBe0fI8BHrlJIeDefo6Zg+A691AW9Yft35qhT+JoRE
jtxKXbriSbxIjGplFZMYRdDVMeBG+i8A07FcJoTdMVlekpawHDH6gx1bqyjx
05FLoUOaETXmsgT80rh6WW7K8QeKo7eu+dyXYtPseG/vSqZTq12ZyXDPqD9t
7DpJaHolGA3hryR6W5lFMJRyGKqJ+t6VkeTJyeGOXYrnFGxoGRCLkfCHQyVA
Ot9xLXU9ShoeU1/G+8YRAo3BPmckRqL663KgJF5wgDtNrpAIT+SaZI3s0SR7
H7fV+ErQ79Vo7FIibNZrdoI1lIPjBJAFNQleHdgkc4rMJrdU403mcklmqJO1
sjjt4aFF+IPuGE/oEpjydULS1Z0fOnpY6Tvg1INiYXfUSRnqZFzLozzf3JBk
gWTzhkRmK+Px/XAe02GgRuD2WDWPht0L55Yrfqw2qLrSUSz7XFagPMO0J+RR
L+GFFUy8mBo9KZeNrbvWQhMlHTm7j+BpbJP0ZL7lmP4FNiqrYKZj5yGOFQAW
MAH1mmUAag0fi9kl0cS3piIciUqKClqqfabAbKN1yBYlg391lEkgTcDJNtXf
EvVJM70yaaJxT3BqxutUPKV2sPcYDMcamBv4UZwTk0qLvOShegSAvY6vWYwQ
9b9ytp9yCj8TqauqGFu8qIG/jJk0u0oITXN4kEyq2yjW910xTTw8XsWgsGLo
uWSAZzILP3zrYgua+sW0wH+wiaQilvf1xwdeEEIrw/co5pU9LU2G+U9Cgksp
fdFGsJdbdkv4DqcjD1w1Fv6EaCDOHyE+naXGBmpI56BPWzbW2F7aOvUh4NrN
xkqsaOZqkP84+ojKStFTOeNcl0v2kiQTJfTDsOhoCNmqyWNIhSG0Lo/0Nfn8
OWFFdzs9YnSd6Z0XpJzV0qozPF0NeVZ73YyEt4yudb8zQGMc4h4Cttr4q3GN
Ei6IpTdrZSs+08h7qWVfIrzHXh30g6yT59VWl3C3uyTVdemfr+C+R8tlSetC
cUPGtxEtxJy8DfH9uAW0wssTpMYsDXfpn696wgSgGaDHXYeqgKDrLJWM0yAz
S8MWNyT7GTvwBsGCpiXc9g0yThhs/AMHwlmI5OteH7fZxN2RiJAPK3idHsTM
61i4HK/GFA/oAWtDF5t1mnt7xwQ8smy3DGPYbuc4pQ8aGERUwOEA/lx7EEbc
aUwIgrVekpPxem3vkQIuZMEO+Oy2ZBnIJuGXqsFz3P92d2x4WrtZMjdg5GFb
23jeFBJA9AWYJQ5n9YfDOJloyZkWWNliXVibJkuwaPsyMphjDMk63hqxjgZw
Zfl65lq83YU7ylyMnQfnhJgWxgwu6VYi5QLMYDBS0yB++RV/fub7C6OX9Byt
X/mnugEqTMaoIGFVSa8/OqBPWa/XG/LHSQ9AGv5P/wFso3LlSNOb+oHe4EGK
5gWlMGrS7u3H1CP82zJdtw9XXfl4uGoNqaNnR3pwDlcZOiLYALmOOjKXu0kX
9v49ggusf/k3/p8/K+mtLf217+9Ly7S63Ypptb6sh6Cjw62OjAbKuGGHaih9
KZE85zboy4ZuMB+BNhJDC1Hf9HrB8VZClUPB2jAg44uUnt/RnnpfCG09j54T
366MncM4lEW5RftEBVBtW7dcCtWpQXrAN0HCG00f6MAN/P0l1b7AC8geUuyv
7bhvCuXCa4yE75K0UnDPeHMM91D24rQ6LbKz861lqRD68KRWS5l9lkzeZ5kp
N/HB81KyeLU2iazMOUUYHsl5ZdlJSHLCSSEIPAJyR3Ip4mBD1CSWLEhRtbuI
nWNbPQX5+JqibwORbhLfZSRQk56J0opIVh0vdUhQvgQ2x0xa8JeRTOfSu3C3
fr4um9IdBrB4E+UqzpSILJ7E+XgZcMSzweqkhRc8Dr2a6xQHc8f51Dm0l10T
yHshKTZwXlVhAwGbMeAso0FkKRdqccBkjtjaspLfS6zrneX9vTGJzSg4maQ3
Ur8hHhwLijpex7EIBpaRkzxzZrFixRMPUZzkOrq1LpD4ap2W1wi2hZcTepf6
bcK0zJ5LKVIcL+jdf4/Um3fGCzNMDypuXBTPqGzu2Vx2nmaGbqy/I59lchoj
p2PL3mOABfqJe0233XqNguomunOZFI3ndTQlA5MtrFHkLp0+ZtThOWOWeEwL
xzJZy0uhx861Fb7CskLrDIMc84ZMP5Xb21Rh1RY8hpK/bW6ySfDR/gO353vg
+3jPfue5eBuHaesKG9wCctIjZZ5JTmYyP0Q01aCV70BLCLPO2nUOBgvgLXTz
aYibaaScS5gLtPKzPV6YuhlpZhMYeEZgk436lvUv2XS6WatAQHaL8wKPgT1j
d/qmTxRspvoZO+EpE+BqvQ9/LNjM++N6TFOTcIIwc6IjBEvuWeRMF4FL/jzo
zKPEl8dP1DnNVqz6NwZCyi3AZnMZ6F3M7ral+GoPZ8lk4EZmlAzTWefMJmPc
IlxVOupSxmHtotYxSJmMESghgrQGDHsQuUvzP2sweEjctZFyTILBs+clJy8v
H+k9S5VaDFNOBvI8Ey/jCkDAfabTD9QjUWk/JPU+BprAh6UYSCtCnOt4xOyK
RkyEBXG4cSKccyudT4ErELe9CucEXCZsqkQ27+USGXyD68TxUQjHzKDAsTz9
/iUNNmW6hgxUPTSAHRjVXH//6DcSxtfgQh3v4niF5mjm+Znpmc1YuBInvfGP
m4/Pnz//NBZZGj5LeiBVlTpN3EG8TApGwCVbg7EreSZEdl12HGGdjYFrQMfj
jO0estMoLsFsRvNPY3HL94NoMWAwSxtb3kq1M26DSTdhJ+FL71n3YPBJf4Wf
+4Pe4acasLQP8NunlpzPgI4lh8aZbXd2ODiFv08PBtQUW9aEH35gzhVPuYVX
zWv5//zn//n/hhZ/+t/+j9oOdvqBi5hnJyZEz5eM3nei59yg5xPAGdk1O4bi
lajAXaHHoBiPTKQBXjVRVXpOYUE4gq6bAkomFKFBwQAcxOmHRbghCXc4Avwo
yMje3IYB5WBAHPfU3iKGFzC/23K2pxZ7o8PR/mgK/5v3uwcHo/lBHz4P96yT
XMzHgB2uN2L25ghRj9ATp4ouwnY48hVaKy93uMd3+D6mxE2Pf/wx8Gk2UTQK
c7+Q4ycLHj/uVb7GO+rnKAqCv6XMYNNFhJT5J6LGHyhtZa5sehazbpfS2DNA
zJ07VtgZZWAZ/9gxJjuBYkOYjbI77Mm6K9tdxcKNlASTkl7lGyav0ge8yRuP
7RwLohHAuTQJ3JHqpYrzD2PoxNB0ktGW8XU0vWN3WS8bqnF3EYVLOHGUxNq0
4M3YFJIRWm2Qbthgm1CuKTerZmUIkrF+FxeNnw7OdR2jGVNUq6OZppROg2TA
imWGrB6vdZPa8B/i4HxFnfKBU4LZEA1zFJZ/+xkhEz6tSR7nWoPEu0ms/Pgi
ssx6iXiiXREVJgyJ2VgTBEgMNfsUV2doM9lAPxRePmkmMv6GlAm+nynX0mei
L94WSNxfbgQkZcpBSegIi/BREBgvCahN8AenBBBugpfQVmfxSuLYs9R70PRY
Dl4EWchoSBL7IolsQk5Rsaq5Gc6YzwW27OWOfHZYYoKVkeG14Pw94uiA50Bo
xQvZAxkHvsmZNIwwNWOdrYn6ahmLUBWSM7zDDgnFBPHeE3Sx1Z2FlKYJhXfJ
xNEY72VgsfJ2MNeqqzJxmU4BA315CvkgaAx2M1nbkkaPVOGlD5tv0llEzolL
m05rGpfzl3pBqeozc3Zlk+rjBWqqJqOhRHqRKIrCwiorGH2o+YbQ2Nb83UxZ
TDcmyzvO5m2SzXKYi3gAcECVDfulPHTbG1NjfcgD/QrgaZvbMHCl1FMyAGyp
BaowuNt1Ypw9EikFa6zfA9xScUctRXeGOTP89oXNCegVIWH50EHTMrpDMxxs
jndHuewC05GaoZw1RzpdELifUSmPbyI4nGkuFAg1YGjnMeZqsWLgamabIKNm
OOuIkzKbErrLOyWB2baYJswKtxHniAxQTVQ2zoWCGXVh2XxKzF6vnhbDIQe1
LKkxhLiu4jV74Vjuxe0USqtiLqED8bNZ6cSLzZ7cSShrYpxmKXEX+2cpCSyg
cxU+FCgqFxXhMGGjocAqKmlsox5xTgRQqv7LH8ZjDf8bYzAikttRV3/z6uQf
z/XJ6en589cNj1i3OdzK+mrhRbWZmbGjN/+ifyx+TH9c1/bGb7nLyIvPm8I2
SMYKw2gFsTu4HnNAbtSmQUpu+ynYBv5sjaiU2KHQf5rfqeEr8A689OP6R3yt
BnftTgL7wu1w5RmAJSejtt1VSl/JrpKUlkP5e+t14GvPAs2poaoJF6dfKq+R
AZk1GqYAP3G+y0oNwklq9l+4X49MBR7YVufjZsepLyy0m4BuQivi8ueBlHh2
YFZHv5MtOXA8Hr8G9hRkaLJb3q1s+TgjCOU2QsNcYC/rvgSx0+dQNjJktikC
/3iMd7K9t4dDekEpDr+gTBvlJK0Zpwo6MqyZyNpaweiEwK2sQNz6K6feK4fg
kifGzaq428aicukB1Ny+Gp96D2QZ2AS5U3avKr4cmff6iwmVAueCNI5mmk5F
kigWfgmRYHY5hkblpmDJgvwCZTXISGYwhRukSQ/1b43s6fA6iXdNv0K1FMIp
74cgP71FUTgHA/muiEOoA/Sm5OSEsyF/RYx1A1R9HWFhGxfqzl0IKHqXEGNc
Mut7VTjtNh1nk5iG8lpMQpR4RqfMRXU8mkVaZXcTTci1G5TD9UQU1UYZZ2I/
ZLXz8CJSpBSVIccjpUBj5mwN4kLUNY4QjPE7Jb5C0kPVhlaSuwV4L+9l89E2
KvmokB6ZMIW4SHiLgrsTKK8tmYVuYEi4AXe+cSBMsmbAALVvNDAHgm2WIbm0
mmikA2O5q3t7Y6QCHsb2luK9QieTbtEyhogyiiZMTJFYXqkPBHmDw1x70kwm
IDVIGAml9povqcxwlsbWrMBrpOXR6qrXFOmvYdLzLKP1ba/Le05rIs9IG13B
wpDNm4wZD2/IEdO6l92RX7BesG1TbUHybbZ+94i3Q8qSud5NzQiAT4Rs9DTy
6lJ5XUl4Noe+3TnvMX2dZTO6SOypiGwleUiWyu8y0blhZ3TK30ZR7hiTX2Ta
LyKFNVtx3m3F/G+VOxlcHLETYnifdRtTUlRvl2du00JlnYQtUiN7/FpD3H9V
6P6rQ/dfl1abAKle7e6rq919uawgbrKEyrLAY+1W7IaVSES4OPZyKihdmy42
6bvcr92uBu1+ZdIrdBu5CzO5sB3W9sadoZU0SPDCmRChCZ4EKtnwiEys21ZW
G4xJjZo2AnCX/7kXVGGFZuOy7YZL4FqITq9+pRd73V5/sNeED8P90cFeg402
8KQGd4XSmUTrWmPM9kpTU4usqnVflA7zXjWspsOgXOVzzSRDUn1WG8lS2jBr
5IHBHMU2Hpvk28Nz8CJedp2RMMbk3GRgthW4Ohp7vzstDNrmDWqMlb2+0c0k
uSb8xDlgjcIiVHTYek3dD/vz+VySDnm7o7w3DugNsREUpj6Nx674QQGSbozT
RZVhPizmynx2ORUJa3yRO4lY3+3WTA6J6B9NCsGckxjJUObS1VeYDBaI+oyr
QuKrcGUlHBMoVMMlAOI9pV6Z/wkOVlWwYWg0hA3fAxjkra/V8BOSNsxggw4o
hckbvDaBkbww5rhwABcNbzDbU9ROnMuGP8Vz2pbzKxU/mKE951wPlOXZ0x1W
qJBciK0xTBjnVN/8u8svtUJlY2UVi15U4BgwufOURUYCbeK1EOc5b1/N1Muz
YKi6N8ML57zOWUqdC1fmZ3tSNg0UYynkW1dcTLytvueCnoVUbQmbImrw80F9
UXauME+UzQ6lOTsUBqhVJn3SNukTq4cl46sDWZO8gflWrNJDlMqiHKM6tf61
d4QRl9GqyTy9BQuUFRPKQm1xRqO9LZ/7kBTmS2JD0WYtLhTjXl8Phnp/pA8O
x6pu07n6JkecVMNVxjReW+PFHmB4RO6HlKpdUQri859e/TY+2RtzfAJLQJ9V
ZlHc33i8GJvOkM0iWkE6Pe6PfvN63D66PCzD7bl23VdxDNnZG46ez/38X4pz
fUmupooUYMJJLCSfLumdbGpNiosDnvTOWLsD8ds3kJNKxDlNB0EPdI9yZnWM
y5J/tuKaRhlk8EqDHJxQ7VRxJaMCCl+uzkXWzwtyxVMOEuhwBQI/7wrnxG9y
XpIJ4Ox3OXoFhxjFHRGIL8bGxmjqM5ivGYyELBvnCHgk0QU7TZ96y/Tp6S2A
aQeOZIflUx7q0b4eTen/c93v6oMD/HDQp1/sa/pwBPcGXxtJWg3qTFfYUY32
x6tO6mw73uXwchqarFVYKIGJsST4tmIj+0Paqj5RKfWPeG2YnEnErlTtxS4r
sDyUveiwFmOml3/TkY15QOrUzCxdd2jgDn8vbZnukNW5I3tySZrRkgvRSmRq
g8oBtZLqEBXHmF1iEhdsKntNVsBemHJpKHd7OBoemjrjjEkrVTQiP5pNlcTP
ZecRJ0laVzQHqEE4JfMjFelemHS74DWuvTTByFHXlfKQ2PYZ4Rw7siPERJnO
O5z0LzXwn8OZyCM5v2dnT0cnp/rg6cl5/+CkfzY6Oj3pj46Ozo/Oz+DZ05Oz
k/7BwdGzk/6+PhodnvZPPbDN2SBTyZVUBDt470kqZr+SL6YPZtxtzlb0WCTA
M1fHx4FLJfoh4at2AIBws6I9oycSdhDb4QbsqcpmcItkdWPDvZE76KURnXyW
zWT1JCNsVWHYkoo9yCwYhtcFFjZ08PU5kvHjx+Nf/g3W8cu/jZ88AYbUE9OC
dJWp+pz5+BHVr1wB5sXJPNxyT3zIvklcz4v80GTPPNnI12wihNl6anahxIlJ
SU3hSILnQfyPSGJbmUnx/uWKL6ChZs6+jK6DVE6BGgcR/lYP7hl5y+t0lUqL
kPX06NyWpd0xo3bWYgwmCWe1WvKPXlXbDB0DnNAtYNz0/OY8btMPmSVmwYGG
OOpFnqBryp7UOUdNg4zdM89yTiKWl45ftqdysW3JIrDatWPiuiNxX47bl8rF
QTlg9IWwK6WEo2xqCmCAmX7/4Gy2XEpIlpR8DZzq14itMgSBNNE4A9fqYVDw
4mFbVEWGByA1h0mfNs2WmxtXVuFX8QaPH/eePAndyVCTsSfPmrofPMZn3b48
rRE9rMEV2iyX+BrQTyCelr7q+UjeLA8Bbxq8i7jJT5/+GsV7py0Lc3mTZnwS
c55wCT+6Pxk6gCpswtqGuPpOxOS7TUdkyzPDNpZd7pHtbIe5qk0iLUquJLWN
SGJmW3zAD1reJAWg/fRJqsVTuEbDcLye5xWnyuLSEJianqvYmOlxgYzMRISJ
EVuVAwaMvxlKt5tkSaBOFqK1t1R2BVc8sTiNrOLNH5F9Bd57ZxQqYRwiMJVo
wuVIJUGJ0zSFI6c2fUKsTHFw8bhvqzPfP6AZylNNE0ZQ4SVgAs+NQwUdhVM8
G3t76cCtxoFGP+YNAJFx6tUVdpUtZXdNyrAq1zkahxZcZIqld4v/GbR8a/OL
1CeA29Iia8aqKCLLkomTMViJ6x0n0gAHeA1ipm35MIzL4emwB6bZEC794KUy
KBmBPn6sKpDziV1BK0pA6F9bAmJHEcf7SkA8MqW7SN2tOOZgJoU2q+aFdYU/
iEcWYYgbDjUOUUThoRyBT69UTSppk7n+CMUdlRzpUFplt0f3uAxelMMBLXDe
RHI/Mweykyj70r3JHGoiB3XP8GGcqj3bn7m8YugyuVDJrGESGJC3Yjx9J0oZ
UcYGntlIzUxOQJRSqAJPQjpNuPAoOd9xGUXnVM26M1pXYIs07nRI6GXHI6sH
sH7hWBaM6PrlZuq7lTQxkiIjfyo4XFN+GIDLev+j017osxNQ+HLsNhdEoyCS
xAYU+FmNkQfK802sbqM1lzE3cIcmSardSpiUuDF7vaRmoeBricO6iQoQdFlV
j0/lbvE1pLx6KLeasP9Te5OtDzcnBnY/e1rW39rSGibegmvhUIl6KqrLorIJ
xkG5rUU6DNaV2ZyMYYnCKHQ9kJIQYYY8GUWVHHttbfuAHGLZKY4a42WXYvTI
jsRzIydbV//IZo0GAs8pE/geaZw27ttvhXNlp5Kq5CB+IRyKh6Aqef6sAaPa
B8G0QyV7HmOJ2sJ4wJrNfcT0T0n0dKr9szKh5sIr07BhmFqY/AZ4g3IJlGBG
wgXcAPsutjDeIBVQgKbBIwSJPj9qd6Vk8iBjauD6E6zCdxL2s64w+Hi0TfkR
OhPOUl+6e16mFnTiQ8u0z8Gi5lZJoO4WN8scJDo/fesc/WveDzVdK/9WA9az
390LHtR2a8jgoVHh2MwIJSZ7yzX3czPd+9YPSXA/7Om9it8WeyUFFT/ZkzX4
TfY+swZ4SGqfCj0eNqtW4wUZrmJn/sbYDgZ9XrwH+ybn2DyCrUqitbKVCU+1
oXRNx4yTchUtBJzIFU1m9mqQoZaoIuymmiTXvgct1aJvKEVJTLDujEuh8n20
yu8v87WVc6X+/edLbRnn1u+hCZqJ7/Ql7wHl+3whegyQXbDEI+evIYGNU85x
yAWX5CpP51cX5tL1CSv32DdqyaW6qEtPzLFxOGLzNo6SMmm/moAUCCSxdCmM
BzZMeZsCLO65Lt/EUioNJtchuFcoj+YNHhWmzUmzpKhsJEHx5NEiE7VOg7ZA
sVfLzyKWoBydNWJQSafWdDZbUij2a1K/2NXJgGT2vbV6JjMc14cU4xMejqRN
E38Ybv0IPVQ4xMYUbpWt9BI+eluqzAEZh7YbzPs6KZkPXNqaOZJ+EBRyVmjK
BRK/q6bkN1Emi7kxRMOeXhZ3S6oiymEipWRWZu2mXhfIbJmU/ZSytneKg0Qo
CYA1YpQK17Du180cL4DnisUw7TlGeWWE2ZZNB9wkx8qIYg5l83zgFYdfyX5H
WfDiprIuXmLeYR0XqvNIxKkV9pLVAO3eLY3uJVnjsXAoSb5BP54tVB2TYG29
iSSOd0tF4mlI3nCSucFb+6mJHzHfK//In8yPTfujebNp32yaNwm9MnhupUbv
Hetais4iH2rwKap92v6paX/T3msP2HON+paSH3TtOU0OnWTHVFlA2LCILIRi
i2aa6pc/jN/0em/RASwJ7K/I/xvkIN6zgrUFf5BRWJmMPr1eo+mVEyeaQH3/
8m/cO4xK35v0lSqWeP5anMqZfKya9N6bt/rNW7/hm7dN+aEkHbI4wjSJX5T3
2CYZVn7CSrZ7cvndflilmhdhSko7jEqrU/VbzEshJemAwCIxI89mg3RMiQIn
OyH4O0JhLl6RXbPYZZSEqNtb2fzU6ENqgyxv/HLVFHLlTVjwNQVqUVogEsEo
nUijzdUb7PXg1SKpSNimCmORXGcwPV1zmD2utMmJe7TUfTauzbkftE+BGFp2
htCBzWJCl9UiLg28JYn8JEHA6aBboT0hvLiYEcXQ3R1OdSXCz851LsEa3AQD
mV7qT+F1jVV/28GL8JClYlocffyn79h6Zm+Bn9DSckxe8sAoVyW2d9uBam5K
AYd5Yt9cUZ7Lt2PlPN5Tz1/Nlrjc6rBUgh4nYbJvhknB3ESpLkSfSz946aYc
ZatK80lu0iS731ntISYXAXmSGEfaIeaFqNKipOiqWn2V61VTWQcBBBtKe0h+
ei65aLhpuGddTdWomlTq9q1x6bLrl+k6VbznK8LzHb8JO0Cb2tGh7vb1fKjn
++P2tuJaIDCoMvnvUKRVKqxEkab+PbVUrSJN7VSk+d6A1UVKjS+gyanM6BoQ
X/w+kpSMwrjKeMxz3DDtx0BVMmN4dVbKVLBAwwJ+AIJR+2Ti2vXrCJPtnFBO
vSS3GZU4+Yf472xSo50SEmTMtq7YVDNwDDXPxByjQqfScug55QW11TYEcl0W
D+gPNksPBoMjVb+4fAHiVrfn3Im8/DLHSIDo5qbF13v7e59Ut17rd3uDVnfQ
6vde97vH3eFxt/vPNUCDsgSPDsWrbLoQHQnGnUjUgeN3tvvv1XuD0eDwaNQf
diVzr1eAy8bzeC6zlU6yNgIuzPlvthFveXgnK2ZyVZpLnVLJkoOtjTa0nfsH
KIfUKKW0djCECR6BYM4oVVnPJUmAxvVeA4XgXqT3e8PJ6GDSpeQJDC7BfAje
KMGTX9eZRUuqWVmWKRnv+TWgX2OZbYw8QxwCRA3YoGeIVCgajdAL/4g3+DmQ
VHoXTWn4c1v9kFrJJ/eqrIxtET12zQ+TibWV50CFvC1bD8KJyTmz7xuGC/Lj
eqPmcqH76k9zjYz45K5GmVzB9KSvYb8B81Muu6yXReqgKSrlYd9UBjTNuh96
wwaxaKah8jbLZat0LfrdhuMFTS+THibmaxA7qcKqgfcXpsVSb+rrL/sjsVlG
RRmI+QIcRlbclaoYMyqyRrY6C5qfmOi1X4W4qsTdvT3wpa/Nipq3AR8fzGDJ
2zkQ1Zd5tVJvRiouMm2qaqHGPe4QanJ28RKV54ra54TKnhIqO8NGrwWfreK1
8j3ThztqVZuqQH5yAC8PgJVQLtGNB2Pw3CjixFw52I7S2rmxgIbKW5lGlSeH
JHnlc9oKc3D5AEh1K4YP0wXf090z5wBibwuVfaWtLuY2NR+648XQ/YwlX+v6
WpjkCnW48rMNB2qM8dha8D62HrPyJZqk85bEyLRmXA/Rua7gClUpxSIv+FHp
rdRiFAO4iKRuE5TepUKIrULZ8stQev4fLT+fgu3auBspkmr92pIYBI3qS8xs
SpwXVTpBYkoroZgkyS7NXCS8RHBt7ypGcHrU1/7OgQWisLjvrlCi05lNv1iR
zOdnVE+JUYp/uC+j6dZjysg5K/Z6R6OjVvcAWYlu/3h/dNwb/fPemMYYt3rD
3v5RF4uDaEkGWt2i3cU2fgvK9Pm5FvulFoP2vmvx+PGuNk+efK5VrbpVbXer
s9ef3YFe3a6oEZS/EaAw2UdnHExy9to5GrwHwmdPCRONSnLOolWKIEv1ydPn
z3wPJsMqeLiKqpx6DpGMoZNViKGT1b8HQ2NvFRg61RcvlYk0vQdHX7y0MamM
K0tFclQL+I/o+tdg44uX74emT9gX+DoKh1BhVBLh/tZmndyDhX9r/Ky8+rku
Y4jxeBsnq7GPPyomGiTL2ULbkuvcbUzbjewhr4qRL17KyN5gbLoLvGRhO6/j
mUsiLshsf0gmcDoTt2NyvKT3cS+r/b738rD0Mnt6hKVscM7NL1qD8c4WOFGm
Lo4HKfKyzWXYB478eDY5PD7u7I9YkO8d9dtdONxuB5CRVwncw7VUZZgTFEny
myDcwQDeViFDLgbiTSTOjU+081Nh+rfepC7jBtEYaehDAEVMmzwbSar8ChYM
mzKTR1REypASCqJsN0hg5pBWuBjQd7MMo4bMAWTuBTtF8Saafve3K0gRxiUN
TXHk8Zv9UXNBvXShl723vNlv+kP4dYo5nPvwm2fkMOEYHBu7CHLgKgqjFa+Q
VHtAhDBlrq4EUJDTK3vEYYpCYwIUrWngO7NVKdr39RU/uzQzzgLbqXyx39oF
xhrMUWXH862pwGLk8EePNRnmjJr+UriwaWxrOylrMxIIFj2V1Mm1T3+PthuH
aK0XPrvJg6zPCaQydtYl62VUbiTKWQDqCz9DKLvWeFoxciYxWmLfrY+UxcrG
67kyIWgfYi9A4bn8fdIuJx9OyKu8bgb0dZaSm2K/X3/jAeGwv9fsD99idCGR
O1U5yNaCh33uT433h9TfPD7sHh93+0Cku/35/Hg+x7/i7uC4O+gO9pqjYXPY
h2EoXmcHGwcEcgcbh8Tvr8DGJattNm6Le/vMn12M3a9JYE+MTnggzNBhCABf
837EP31uHtgHMWa2F2Grfl0nQBIqJgIw43XT2N1PuQ9BcdJHiLp2dWM2xKFP
ngmtxWDDbuUfM2U7j4o+AF6/oBviJ8t9dEZDZosR5kfDADlXr6bMkwLACU8K
nxDRAKG9jydNVn8eTwq80TZPuojyRciV4i9VfOmXc6bc5zZvyiZExnlozlzf
rQqbcgcbaVO/1fdQkJ7vDDeFL9pCr17EReiXT8TIYjvW3oj3nuToU8GIX8Lh
ijvXjlQE7DSqPFG4HNsubpJmp3hS4brFQ+T0xeW5PlleY9qfxU3uKh75ZZle
kEOLvkyu00QSIJ2ntKlIS+vYR8O1JJsmQM/FyfOT9jTjeGRxdBV9uXeGdWLK
jpW3FMlegGSB2M8UFV0yQ7YUcA49y90iuePamArL/mKIJ5qevNwndnak1CAF
G2kzxFuGHQ9IqcF8FQB4hFoVNy53lutWb6TqtctvT7CqeI2qCmXM7AZcmFB+
L/GjuSiVUK22oJqoBB1Ztbj/a4jFX/XPPSqGX11R5a/1h5AqbijQqnmWEZHy
l4F+caf90dPh6Ono8NmzU/zr6OjpcH9w2jsbdIe9wfDxZP0E/un3zw66o+Hh
4Omzk+6zo8OT/fPDw1F/NDo/ODnf+8tsKU+VJjreevwfcaqyq1jmfuS29j/2
VO01ZoblP/JUW8NhuKvPDp49fXoyOu+OBqNnh0fd8/0R/PBs0D8cnO/3h6c4
1dGzk0G/Ozw57x8dDg77Z6P+8GDYO+uenY5Gg8NBn9457x/2T4e9p+f758P+
/vDs8BBdOvun+/u9w5M+9bN/cnjaPT14dnB+dtI72j8anhycP90fHMHWnPfO
zw72du3tfq9v9/Y/2oRD9ogwrTBIPtat4I2YnQFBPuRm4IfPMDM7olJ9tD+G
HsYV3AwSei9/taSXOn114cuFednVEfVcwmqwnquCz/gB+njl98GKOVaSsVCm
L15dqKp3Em+A3UaLcJa+clCKcbI+pdgxy43NP0fhGDPMS0uSmxHMR2xlkeVq
jbEPVH4haRUZr6NN9QoDh2QqcUZ+5b5PQbx7tsqfLcdcvLroXASvE/fwaMvz
gty5P6BXfjxTlG/9fWDwzQvLM7jAd3YufsdRVrktwKqmiyyh0Lu/us3j6Miq
94JcKVKpaMsaWXbDgBPYWxTFKj/udKQD4AVvOpOsKKL1ddTJMeButqdgz7/s
RTKq45Q91V625XLZGjb1m5p0hI6P0FftLf5mOsQfuc/a27fq6Kj+a9uIff9S
Cn0kf56MhJc9EJLIRteCc3hVUkTCT1Kpkzb/44Nc3vwVhmb020ONmmSBFIyC
YZ+bG9bZcHUTE4YqSXlsUVZ2xFGh75fnG5RKReG5+A1Sa9LnYPDPddwumbqN
+dkspexwRjt2m7EkRpOm1JSIbIKJW6fhd+iAWM+8X+xFxETX6AF5HwL2xQUc
xFbu0ujStElxCCxfwpWWI5L1Ssmv/PpijKYx4esaepBwsgy1P7wOccPKyPRO
h0OOW/5OLjY3XIzH1km2QUwJLalU9NfMuGGD43GafiDXitJHmMxGCbuYegWO
ZzEDAEUQ4aEso6n4X5PmGWN7i3XMBd2N5xh08RP6q9vOI9F42mSwIJVdxUuq
Fp9fURlw/sK+YF4moosAe+ISQDR8bZJpiWVhWSSUDNU70ZzLPc+pvq5UskT/
nk1KDpro9yUHKAj8xrrOoriOoOjRz8L3lEAXWfa8bavfEu0AkE7YQFBk2ZJR
fJK+z5bvubkXOkhOxC4ukPOzMRmAmcbRekku6kiAxL/Prm4dT2M4Bus5Q6Pq
TQokI7dujUGo5op3os5aW3LPTWfspz9fRtfsZmwqDuB1tn6nvBUMFnlsb2VI
vbRRusPja5sUhqYFh/itKU9k9vm++4YeM+ZSVfJNn/+DEYvkgkBOi+n1TsrE
JaG+NEU/J1RmZ+tZLA5imBIa04+Lu6Ot/jTNqJBrJjlZrSss8Cns8yYOlaR0
2K0Zdhgs1VRaqAgyY7HORLmVypk710kzYSTWFFBKfp0OMqjgXqbyIlvhSXlW
myD2myDVVjfIk7UJ0OQQwMQWCFuvKdHKJg1qIn/RDkvYHi8G+A4P99hQJsSq
cIYrUvwXOZ+DcVZxCfIZtTIwYm4At9vi6hTiRuvwRIDyOjKOgZhLHjgs4IKO
iZk9cyBkCoTqH1I4Z77fvjuYY/+hO0z1cW2qw52+PDk6OkJMB2xY1KILlTC6
21L+Yfodckh1PuHlNAm2/sp9l0pSC6QS94+dEeGk1JvWDCvGQ1GB8ZBeTnQx
sMupBIkT5S3DldMUjU+qSWSTVOSvE2ThptD2J2VyB3xuWkHiIM6+I+mLHFNC
iU28+DcdJJ6JHHqXmdhULGFOwPEO5tVZrEPjlhp34Lw7wDMDM0mCIfKOFR0g
8zjmFH4sK9cQ/GtWukcjt98VKQKxL/ca9iAx3jqepS10q9KtOQuklZOukfyz
3WCvYgp7Utt9Tkro8sUymArWjm6cM5cFmUUie0nU5y6Jic65H1exi/fcJzqL
aCapAy02JMu1RZ6Akxzq3HFdLCoq8ng5h9188y/TVfTW/HuMTnut81kCvNmx
DvlW8t4l3vflCQbkIUtFzmqIvHighmS7JpExFdzj7P76zUXrrD2hdAxpiyWX
dTQvTHHYt+wWK50QRG9yOQm+cusbXYPh4cxWGAIYSx51EZNJ7UzPpQtrRDfU
fmaq5WEmFOLwYuNImMw2Xo55DszkXmzSBrjlqNh/ZIt3INKyyVYx9QslkrEc
sHEjln7IlX8tCWTmW3M2F9dsOG5GQmSnKR2U18wwGfsciM+FB2nV4DOx1rgj
IgLZk/34wPCkfwYzss2XbAz7xyLRBy/RNVWdkFGR+6dKURgHPcmi9azJKW8U
+0NIyvkwXwJGbZKNyeO4S6uxYRpUw2zOohjqGiJ5xlArJ+Cmx+UDvJpwuMFy
aQN6qiSaJIwXTpHNXyarPEE230t9y+V+DfqeZUXOGod1dmtLV7Tb7XEjCIf6
/PJQHuf6NXKu9TB5qKtQsY69ErYocfywynwUQoFqXIGgXFg0Kiep80peKz+t
CMkRFrhl0mYzLIdWQnxqC/HpLSatEI3gNhxI42BrJDcgDxzbCMRoU2RyI3Ly
9XfppF1Lq20z+dfu5aC2vP1sCWwhGerLeaxzs1eGl9KOlzo8PPxVvJRYG+Ea
qV6bMozpukAVkQzvPG3MpaBCG7ki0+GidXwn+23LovGB+zHvrh5utKQEppzj
QGIh5+voml5FNJbNXSY7U97VpEEWKblZdqAxJ8rFMKQadcRri2y+OfRUlh7o
XDjzZMK4mJdqRXh276mKoZJwZbiQFJP8EaOEj3UPUXBtAp/wAXyGf+izkgir
ExfKK0eJChkb4m9TzpmlcEYppNeMmlHDabOn2K1lgYG5wbpJHEDI4yZaNagy
MiMVKSugTK1dshRzroCmOXJPKWfTJxmVCoWdir6Xa36hj2MplYVVWBHtMzoD
UgtYzRNHrZqVqHADcuMl5naJUA+8dVzWqlH8JxWBEURGAXZUcoLP0IJLFWNK
e1TqbSJFnYRlhXtVRwhqjE38l1nfLpiwLaohwz2GX+wX73cDKxZKKQ9AyWF4
ZQvG1H0f3Ybcme2YP64xiaEKGNL+LZwGbfKFnmzuavorBFL4u4YMzLE+AZYw
1n+nn2aTGk8ck3tfJenVxasLaG+56KgtfHRnz/ax93e/+/qP/yfA4PX6j//9
j/8Zdnr9x/9yHa/3qCfkkag6FXSz2Bse9HrQqnvY24fHn0w5Jufb6WZtfAhz
Lw+5l4btfRLR6Yy/GitO7QdbUvdqjjSs76GBqrY/kvJmxjxsqeoH8wtbhXgt
0vGTd3AudEPcrzjlz5UkX/Y02hJh8meAaGTBkJMAoV9qKB0bsdhg1QDn0laY
fVAu2vgeuLE34k0ZgpohXFf/qYCut40q+KIhqoDsS4bZCX8ylg+BNBCDYdA3
JuJEmMQmApUhkrOnLyeHElCYg6Em6SAkeUiNEu/hXWWiIlmLwq3evhwduB0d
uR4YZFkmKELeWdVv6DtyO6Ts5Qznoogz+aMDDhBf4+IBaYZKkkgC9p1Ey+W4
UPnuCw0LSldjGctHyk+BV2DZ8huq7BqnbMS7E8WzrasHrZ0ggjgNc/dJlpzE
BtORmejMUiRUiMqFzrdNOyqM35tmS64GYVrgXaIOiTABbiBJH7PdSF2LmXE7
pwdTKqnKy2fzhVQmkkILNvW6SeKAm1StRa2uKVClySe7R8k4lm8p3FFssWYQ
m6sC2V9CFy+5SrU+txVH9Te8B7r+8vybBpWxjtfK6iYlkyWnUT1ZUYLgD/pE
kd2YcgAZu12CjIMEsbGWFzuEdb2QijulE+OS1GZzq5hae6J/vlRpDh6TqvLM
rHs7mq39mVWYHO1BKk5cbCZboShHtRIdH0D3+t0su02/rvVqT2T88gBYJYrw
7vKe8qs0i+gmpuoxxJaTdYYU7WGpaS8LbXWJA0yU5Dcg33WXG33DbopoXQnz
ZSeSf76iQnVVLWiXtA+vx3VGYhSp/KNCbXct1XBEwyNFPCTBXxW0S05te9U/
PWIO0CmMWLiQF6qsx5zl3ATVEKUy5v0cZZMxBicF02KhpjQbZVU9VKuOnCbH
ruPWamydAJLt69wUxFlyeEDU6MyORXyN+0C4T+rLlzV+HHnc8jTMsWSBEOuE
j3a8eGSnqDKXQHasbcpyOORIeUYok6uZ0UzwhJRTMHWxrEOpCoVf8qpxjb3T
a6vHHbo2T1iN7OoiN0UWlnIWZvnmPKkIbSss7kG5Z106CKPGxoOh7Dhb4ISd
EefVwfJ7Cy6755fAwN+xNIw8WMeuBhitaeG5L3BiNHjb/dZ2mginq8NSOJNB
3xbbWMhnqZQF/WI1F2Ij2BxRnrfF+Vajw9W9HOnGflxKZs5TgW6yIRiiaRLJ
EOnwkeFA0oa5JwOe6Wt9qd8Qb/mw/v3lKbGZDX354vStytK4RU+8V+n7pfJ/
5keYlKQjPGhHc3zdFp/WMWqLjjj4VLwhoE4fbK09JTYWm3QCRqwX8Bu8N4F/
GsSzm5di95Jp1nE8rxUt7UuDh7V2TT/SNWCvaqEiTmajt3qMYb8ude2rGmyK
+QlkT1mfP81F/IGCt2EO8BE1ix2dAbGiDxO0FxVVDG0HTXt2u9IsBfgwywTu
Ltx9nEdH11oYojUN5vC1foOvv9X13sOzi28uXus3uFj+/BYbwTd51NjJv6ML
UM30JG+/VXZl5bFq3Q81HPDb8/8Er8qI/MUNyd8/M2ZtVR5SyQbq6hFNn0q2
t+q1DF97wb3x5le+NsHXnvJrvPf+a3+b1y5Suq93tQoQhsete54/j57XlCQP
CTumlBw7WmG+kx2PUHrZ8cjmNdnxXHJ71Oz11rVGTW2CrSEg6yKQ0Z70BIBM
IK33FrVDMNW1cpfKudqZt5dTqsijHy6ny9kC7iA745DOl9PyjoYVs96YZhtp
JvMQ1z6KjDCp6j36KYN608h/B48Cg+fWK7XHj2toLNW1J09q9Ora6y54dR3d
mtT95pPdF8pNBT9TddkKoH8jGSrfwmryW1aTbVYUWZPGtiqvvFTRHro2WZa2
H1JybDu4+eAOrfewNq6pYIr0+2fm+wjpGPADdZcjxRXZbWBuLhSAN0m+YL3s
VnOr/bVZJINZsmCFJR7tJMLn/vzsbJ58jWSYKmCXdjzoqrrx411tcW8XyCp5
G1b/2w/dqAN/zfAWfeh3W/tz+jTqtQ5i+PT8xfOTy9OLi4ZyR+M1t312wlUC
ESGg9PYKCO8//PDi9bl+GLLi/KuahG8LSDo6+jumkz7kdjxQLZ9MJ/A7QMop
BVMqT5FlVwfuCWfof0SdoFpQNFuYghdzFKlia7ZnsriZX5tCflW2Wot9PbyP
ilkOv7/amxqWk4unN7nBPyXeBncFMdRlQ9fe1igTcDil2ke/i3fx3Uq6wI9b
XXyqKXol6MLgvWODBJV6pH8biwIc4OZIf/taPOIwL4DJE5fYktmK08T6nVIz
BLLuCf9zJsCnyBmaiqGZd7k1Pe61+jF9GnRbB8882KRmy3n1EKbvUhOT7NTb
rQ6QdzcB+FoBVLUH8hIMh/OH3bDB3pQJV12W2nytH/IaHtbNmPxDA9q6PKvc
+PvLcuN6kJsVDi1oFWRxNV2clruoNWt4wh0Nhw9sDH572/BnXtENAkfYjW2K
IEDVIAB+YSomY6fUvXd1c8RER3WMRcePn0lXqvjOBf76khA5zHtscxh5qFj5
TLUcXv2qpr83TKyAuamRjGtByk2gHqzpTQ2aPbzN1jPEYm+VXJadb8AQsPzw
ihO7kFKdl0phQfBbBSz9WOPyMGjtbc0AYwZ48b5+z76s31wp+6VnVgX80gRl
haeXRO44+/QPX3W73cNq7mqObz8T1eMcc2TQ26c72Dh8+7tn4phq3z6pfnuN
b5++Iptngua6dVxs1im3OdvBQ2IbwDxAc5Lfo+cXwFg04SZHO/YEEf2PvF66
4fU1Sr3oDJstk9kGyD023z/1Nqw1kw1zW/irTqLDowKW5RGDkfrPdB3TBP7N
tvQAVxVZ3hrKWgh3DehEb/4T/OHnP3yFn/2J5l8y0Z2gGI7WyneNJy/YlkJj
gPECrvoNtpeaMG9ZTuRvTFy2R5XQl3V2jfqj7efFbeY9D96mset1lgVho09g
q5/Cf6ckQZ7Dp2e1hh7sks5gxbWzmmYJSvdFwmuoYEQaY5FcL7yfEI54r4D+
eZMrvYYbA/3Xa4cwkyP4j+fXMEOpoLV275/Ce2fwn1mBed/trN34Hmz5UGbe
0fyhZ365b7fhe++hbA/i86DqqgWDYz3L0j1j7gaI7bbb3e5BrOwb98ABvBBA
AkLWF8BCa5vX/iw0wDAo2HUPntXK7QCQ1xuyzWz3CC1wz7uw1z34T86KN+Wk
oXfuJC7S7Hf/y/a71SvNuOfgt/cXBGB/5/8ScNLqeW12r7X+KzcQDqriZxkH
4dEroJVJktLTbrlCbsQJE5qeuC0cqbKEUzr/mrnNRyh66krZU5jFR1tkqNUy
lZY1qTVXlbBELGZ/G+nSH2C1bpJCdz/0+7pSffGhP2j1R/c1PtB71Y0PW/tP
72m8f6p/rGy8fwacccUTyykrkdbtM2CKcKveMgMsco/39G9xmTR2TTOrpAmv
qMutV2t7NZnmnvEs4lcZrsNege0fHMGr3daRkosTPu/x8x48f1HqwLQ/oPYH
6umO5z163lMCw/5UT+hmPqW/+ZaeyV3FvwGgGWqPdcgeetWusDwF9MJ1ZPIY
w2/Q0IGhWMa2KwP7EzM0TqakzG0svdHzXjH6KH91KNDjBYhav1espvIHMS06
djhUw24q+hn2WvvYz0nrn9Vmq59NZT8n37389mTHeNJCWRbb7fgV7iy3Nf09
0m+uYAUAAjD+W2WA1J/gYbd1dvDsGQH3ObCDrV73GfwhfwOMCPfTlJp48F3W
32zOvisYF453hOuJoVN4C01pX9fI/SGepW3stWaLrBlDnBnGOFZyxEJYWzu0
RaL5Bq2kySxeW+M4Z12nskV3bFXB3tleA2L/KrEJtnMK1yp1bKOZKCAxmbIr
zg2sYmlXmBjHNixYqrIJKZAk+NurGOvyAHLMaL4gq84iXq6cZ6hvlT8m/8yT
XN+w4dOZvLjIRbbMru/QmcH7ajPH0h5KMQwMY5QE1VumJXFrMJUB/bqEua47
qoF0dB2JhTpKxbrMVeZMMvFyzmqOe+COX353cnquXyC6vHj++vzV+eVrfXnx
zXNd/+Gr/qB32BAj1yT2Yw1pFXD9Ecv3sDpkv60REKfrT7bn05NXry5OvjnX
r85f//DquU/p6iwHNSV/HtZSxEIiQt4wP/ePa/Kqv8EoOIpDJbAjw7p4QObi
CBJ/ACnaHRRmMKpbUmlqlBhqZ0Iz4jsuyyR6HdeUCh+9t+b+1SpGy6zmgAqq
MJQXtqBr4SoMEQacZxv2W610AFTaq6OCfh04as1OtcabijZtKlryQoKfV8uo
QBGVyhKWCTn6YRJ4Ixjz0czXmZjboZPvLp6f62fn52ey5SdNdl10+x7uenr/
rjelIr2wMN70SpPLZe85zRxHYnrll3hX+W6lqCVZJLh5eFAckGkmttVtknPp
PeDosH/OGkWnZwpRzijQ15YdR5srK25ssOi7BHNIZnNcplkBO2jZYpbWhs2u
gwImpdISeKjoU2ICNNxkqCjMS9s3PUDbMgUdR1u3g1NAxcs5udNjzqq51CIg
1yzh79hYDYJaek1ZtaX4hHHHnidLxshUfXS2wdwX61hqHgMOyVbYifVut/Eq
iEQofKoCvqT4ZeXyvdhLnByBoMvE6CXCMGdJupbxj2t00RgwyrB20U/Qxdh+
8/N8+vmzZR4UmmDLX7ioWY40BlCDzpzKTfxlXIZLCtEgU4J1RUHbJ+4j2lMZ
cMXjk0JO2U+eslQkRTA1bRKAS3SKZKnggD29Y6KAkUPnRUNVuSIRebSOB+0x
ZTnV+LErXgvtwZjdJ7r4qU63maLuAbubUcIZQXtKx9rw0nxYcWP2PqG0Ldaj
0NwGdAggwioOJ3i+U6qpSVWeI3btssE4pU0QB64yVcNOKEmIrforg6J7ratc
m9FFoZqHSg3beszW5XFTj9mAPG6KswjZiQVUPgsp6Iuhe6OOt014P9E6jRgN
nx52oHN4tY62aA6goN/7Hcl6XEfrc8PzPNM0M1q6AVe5XltQIba4YE7+kdmk
nHWCNAIcilohbXSeY7aKoIGkZcUgqJQqnKXbtwF6QTrj6tr0+pwQ9uPHi/Pz
84P9ISa5c1lphvA/eX6KT2Ah8hB6gtaD9lCerpabHP9DNzCbAD/fzOfJh06Y
EF9+JexIyDrGEGjKb3CbGRaNyAOeN7ot7reJW6k6dHPgfPxEfO/FGE25iGHY
e8l9m6IunIc3Iy6vfkcX9wIlYeAeJIFETPsjKC661n38OuDMf4VUHfNWa3JM
bwcomQAM4fjQHmcYNxzQlZ1iZnq1WlLBMSxzgO+bwBF0J/Mq1+QcDG8T64q1
L2b/U/KtI8RAzu6CsqVaN4dVBjFlnHk8uj6GNueUqGF8dHgw2h8O+r2u+TTo
dccmQUU55Y0eY0rUwb4+jPTBPvTSHerBoZ4P9GFXz/f1fIQpRLFMWJF75XAA
8yS2ZHdT31A1QyI2Xhmkcf9qAJ13u5r/b0apGOOqh6PMmTjQRmGEtk2RTbYa
omKSDCEY3yXTxItlAvqx8pfEpUkhoGbgCMq/GAptnP6o/Lx2+dtBEPvt58C5
kspwt0wifFREuJGdY/CqlNt6YTpI+AjMsQeuVOMX+9xxEMhgE5kFectWgKJ0
NRWlk7yUJV6mbNjo8VUPr/RVn1MpY1kzYnzp9psIzthWEMGEPK79HGPbUq4D
4mEzSVA/GlIQF/vI/p4UY+H1F+Fxe7YNd1Sw+Cm5vTNfSFAH0IH8mwCLGUsq
fBonW7qiSVDWKdg+7KfOldPNDL94erRBGMQ47OxvJX83royODWZ6k0sKJd7d
DUYzeM4xWB6pLOIVmYkHo5hUQTECaXwHOJKvqJyK5C/HEAOKWkbKpakGnqG8
ZZgUd2m4CSNmC/F+fdJj/KeM2Le3BRfGma3Ms5bDm+Ipz5F2KP8f8AjWNcL6
jYpEEqg5sCm86RQPOaYJwiCCR7AuZo4sWCK+DpLs2xAP2JNx4CUjtzTwMMF4
NkRtMaZG11sPifGiTjAUyqSfCP17nMZFs/eK0QuMA8eZMfVfmtCv6p+nioII
HqwIJLtGOkGa9oHCfquckiiQurw7a4OK+TJYZOkFjWptQze0foIEN8LYB3Mq
LIuZ8yCyIhW2mnIraEzsE6XunDpBOukXv8Nb4ee1iXLRHeVIC59QG/oT+mg5
J6a/+/hzfT1r/Pyb9QwABx/M2qgEuOK6Dpxz6pPXT+AOtd1PVXP9WHP3Xj+h
T9YX9vPka9uROhSVDsX0YcfnnwnDMELLjuBHRvnIcKD7OLrPEWKwcbPVjVwM
hYlMELYlwphCbWIKH8lpRhxXlXphiCbvkU0P4xNchFT8hlTIeAp7n42QYdyS
x4DkEIfHx7reawhM6oroe6ej1LamAfALsBpcOM3HhtliD9PFJn2X82j1fqMq
lDEsYWrCsah1OS8Z/laK/mVhLAj7pUCFIFoT9bdYqjs18d4igaSOPfQ3PaiM
7hrag9bhKXjlNb9hKcJEMRGvIQ63P20+FJGrx4y9MPNwGzGPjB76mJDAv5Cw
a9dOjXfLoZY30Tuje4ABqCdeIFYK96ujWy0WojoTsUqBJeMXp2Ozoa9dCA6H
63kcHoq3NLkbEHOQo0JHMYrOLm0DsbCclYoPpyJeyF0ov8wM9sMRq1S5WhwA
aUHeHvtxQrYbd4eIPAmHFvvaWJqL5HqDUy38em0S7praupNS7pgppdOiz7PN
ejtQKdf1aBatrHasDATUkQEEjPJezZgpoPRdFVAn2eCC8uXGUFL7Fm5Lpm+z
9dJzqJZfMZ66VvkIn2Bhgr2qN/jh8HC0P5rC/+aYs3c0P+jD5yE1qPH4l8lN
sozWy6366/4Ry5bsXMCet4C98q842t7uR4s9b2KlF/a8FW51sXfPCukFCsqx
beB1fTjS0EBjC+5BU0Ntp2BhxDjUlYKnhC01GU6IsbpG6Sh1yeOwC7eVRKNl
ux5qm7aBMrCEldMNxjaih9Ot2uwSshjmKO+cSNSWB98bygQMP6AGroHurprF
y+Fhao/USEcusl3m7aVQcEmFPUSZcVZfxLCAmzRe+lwC5QO/YKYaum7JVeOR
SO5UWTGxKU+2k5JwAhRXXFt69Orb/5SJGCC1d/JVxLkjObUpD40KIEko4rJ8
+BSRT3Ls8jWYTeBqBmupwe42xCSN9DcEC6g3/ZUJ2tA+QJGiBe1AJKqJSWQS
h2nhzOivFyWdfjCej14Nx8nrxbPmyGmZQGmXmjyjmOv3Ir5bxnOCiTXqLQxo
SSkHerYgX3rE65Q4IqTIiS33ZkprmEvBQ9NNWpmq2Lw7kmQkaMUCbVTY46Ft
9EVxNsaK0ZAJFPHApSBJrxNJpMRqSLwDVM6VdbCuVHcn2VWdW7qpqNGtd9bo
/vwG0m556FZghjRG7i2qPcvd+BsQtDRwcomqaRNqK6ReyKSXlbA0K9ld0qV4
eaydEz4mhOCsOSHTazZWJm8PGPvI8rgEi5S0iTww6L7yr2ZTjfDtpbIqcdSP
XDJuVksFOaBsfnHpEPGRtwiWwr0fLJrgdB5bEwiW5mW4shY6s4d1zlsXi32c
AMf4UN9Es9ikm6UCu1tbK5146T25KJ2XBplNJdktM+Ym3zCJeABuCSVcM7vI
GkCJf8X0NVuZD7AzL2mgl1j/VKJKuLyyy4/w74+er4ylDQOtvzhtbCn5PtX6
1ZJ6aTuauMnGcZMyFa57Wypv24BlE7lNE3oomWgflqsGjSnwZRxIDYhZJJuM
i5C+Pxmvzb1jNFkFWcNuvnQL2lxbzfIjCBE2XtoZ5Etb5bvbfPpkMnoa7ZtQ
H6CCbBcWOxYXbjMTxcJtG2xP2mMDyhKtJoxiObezNddikR3v9Z/9Da5Ma1Dx
5+cAU33Zn1LRnD+rSM6f0wjrdHg+WT+Hxk6UrlGdxEY6oiiV6/VZ8S9er/7W
76JujFWNL+wBG/36PzgusNyuC7RDwnf2JKhPl5jXcmoMlKPhZr1slLfgz13v
U3/c/w/XO3NxSz9jKlM9GAyOtCunfv+4wuPWE85QSQrmz88bxz1zHpM/621X
6y8YF7XxPZ1JysIJJvi8rw2XUnRdeOVjyXHFBeJ+ZtyA13k8WXee2ERTXulO
HwpwXBjqL7De/aGuYwHUBs53v09fho1dm/CzKQpmupD51E2CSULjLOIYtXP5
5P5ceAZ65LoguDoC2RVryMDMfwhqoexYLwlRttRoWBPZE/2wDIs3rv/1z9/n
o6NfA1iuPJCjh+wMeuKoxT8ycTkrEZczIS7o8OnUh6XMFc5VCglltFzH0ezO
8CZlcQFTFVnOwFgUK0k6KnglnSG0sZcfzU1YcF0SdsAj756IUpNcYZIVvAOk
/Ox5i3NucIUDP6fLhhndvDxL4AQma6DCJAxSIiyctnNcsguw4olNRMLMECdg
FRCSnNycE4cyfDStGcjkInX5o0JGArejxS9++qQMM2G5CBFVyZMnsFD9v+1d
+3PbRpL+ff4KLH23In0E9bClxI7pjSzJifayiUuSK1Ur6ySIDxFrimAA0lmt
7Pvbr7/ueQEYPmQntXd1q0pFFjAzmFfPdM90f1/hg4jUvZLFuzmxAdDJSj/0
dd21/wme5ONK4G3XBdzubMHlnr6BEDoYmSdR84a0y1YwkrYWO/ulXtfe6C32
qEYiSSO+1XzpLgJ6IFlPWNl864TF03tLg95Q4PR69OhRNHoecvH+3tOQQvjA
/mJ6/8jB6WiiMIekVsFwKp17V06JSStrK8t7DnifNn4xVJ6+4x9tbMIfYjPa
exJt6mIL+msv2hvSfxtXqmloAOq1vnrxImoMs6wRvXx51apDRVn36rpsjYAJ
JDaVtCzp8UBAvyjkoI1JycXDD6sN01LJn7i87qc36Qx3NIUyxKsyFyXOtOnC
dcyVL06q2R+Y0dBtGb60eqBVI5l0p9Hjppa/08j+w2HkRKchWJZzL4T7YhGM
TiAQfbwoEn3oi0Yg+ntcC//WT1q/WRB6UMhGy2UrHmm5Mrvecrk4CcjFK8xv
wQB1Ika6eFDIXolavlq+fHCqL5EwbQeQZb7uxKcva8I7b+7LVS3Pev64tie8
O7qneiN+uvf0a0Auap8Y9fbkh7hIhgM/7W41LWJfrgczh4LY76jjWUnkxInc
ur4ZZ1DdviliMnAO5ykikK/C3FPqCuvk4JwrGOz61vjmCcnDB0AyxmPxkru1
wMzUJwzfjokpHLxpX5cV66IXSCkbZd3oFc38p036gyQ6etUKiqR5G9l/nDe6
DfqF/2+Wn15cRK8uVsq1zuJJVjmOiOOS8H+OMdLAUyRsr5bIb1oR4JZKKwLc
XVM00TXLhZNSBMSzH5KodSQTgtmfBeXSapChcg5hUp7BpLx/1J95YrlUKkkP
dTDBHt1QSQiVgTKl5Ag0heF6FRDK/sxuR7yH5ekHd0NKlUfdBQPVnhHpkycj
c0/kBl38shjOLzhf2ajuRrYySvE/h3MyugYcl9aNngpeFL8gFWQ2MuO+oxVF
0gq34+0dnaJvMV0qKXa+bvOvZ/zryZb82nYoePX5bX6+ifjDm6iTQj3jEa6T
A5/ZineeSIrbdDKfDUIpdp9JCs3IE0qBqiIh/9rbsnWEV+gUkK5LKyvOQuYb
wzzpaUFxgG3ydjK/zYZDeMkzZImBgmtFro1AofHaI/lMJin1r8hWLk8pRDCk
yTg2ZyPdxWW6v6VHQguN35gLhfkR95OZsTf1DLLTBuuMN1/cnzQ5JLN3ZNON
SnX1GqhnYymt+3TjrBHZssJrTn+2Ysnpz1YqBFrcli8VThVIp8EVB/4h87BK
MYHVuq+t1vtH6XTtJSedPmjJwRGMto61cyFOaOyT8vrR2ens8BrCbLNtxQYY
sy3ySlOMcW821h4ZJnCnvpKl04VrTzql4Tx+Y+z1c+y2gKC7UMo9lUH3al6Z
nJuR1wYE0UtzsVKasxxwTsQ4+Zrc6PtHuADiboHG4BqMMCAT84rhTy752WtG
o+09lppWNC6e7NTqFP5pPKccuyszn3OC8s+FZH66ZubH201OhH+3TOYn62be
CWTeWTfzk0Bm+jGZo6WZn4Yzu59lmXdXZaY3i/Lu1fMqVR4GQL8ZAAlUw3/j
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
H4tczp4ttwEA

-->

</rfc>
