<?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.6.14 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-ace-revoked-token-notification-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.2 -->
  <front>
    <title abbrev="Notification of Revoked Tokens in ACE">Notification of Revoked Access Tokens in the Authentication and Authorization for Constrained Environments (ACE) Framework</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-ace-revoked-token-notification-03"/>
    <author initials="M." surname="Tiloca" fullname="Marco Tiloca">
      <organization>RISE AB</organization>
      <address>
        <postal>
          <street>Isafjordsgatan 22</street>
          <city>Kista</city>
          <code>16440</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </author>
    <author initials="L." surname="Seitz" fullname="Ludwig Seitz">
      <organization>Combitech</organization>
      <address>
        <postal>
          <street>Djaeknegatan 31</street>
          <city>Malmoe</city>
          <code>21135</code>
          <country>Sweden</country>
        </postal>
        <email>ludwig.seitz@combitech.com</email>
      </address>
    </author>
    <author initials="F." surname="Palombini" fullname="Francesca Palombini">
      <organization>Ericsson AB</organization>
      <address>
        <postal>
          <street>Torshamnsgatan 23</street>
          <city>Kista</city>
          <code>16440</code>
          <country>Sweden</country>
        </postal>
        <email>francesca.palombini@ericsson.com</email>
      </address>
    </author>
    <author initials="S." surname="Echeverria" fullname="Sebastian Echeverria">
      <organization>CMU SEI</organization>
      <address>
        <postal>
          <street>4500 Fifth Avenue</street>
          <city>Pittsburgh, PA</city>
          <code>15213-2612</code>
          <country>United States of America</country>
        </postal>
        <email>secheverria@sei.cmu.edu</email>
      </address>
    </author>
    <author initials="G." surname="Lewis" fullname="Grace Lewis">
      <organization>CMU SEI</organization>
      <address>
        <postal>
          <street>4500 Fifth Avenue</street>
          <city>Pittsburgh, PA</city>
          <code>15213-2612</code>
          <country>United States of America</country>
        </postal>
        <email>glewis@sei.cmu.edu</email>
      </address>
    </author>
    <date year="2022" month="October" day="24"/>
    <area>Internet</area>
    <workgroup>ACE Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document specifies a method of the Authentication and Authorization for Constrained  Environments (ACE) framework, which allows an Authorization Server to notify Clients and Resource Servers (i.e., registered devices) about revoked Access Tokens. The method allows Clients and Resource Servers to access a Token Revocation List on the Authorization Server, with the possible additional use of resource observation for the Constrained Application Protocol (CoAP). Resulting (unsolicited) notifications of revoked Access Tokens complement alternative approaches such as token introspection, while not requiring additional endpoints on Clients and Resource Servers.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Authentication and Authorization for Constrained Environments Working Group mailing list (ace@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/ace/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/ace-wg/ace-revoked-token-notification"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>Authentication and Authorization for Constrained Environments (ACE) <xref target="RFC9200"/> is a framework that enforces access control on IoT devices acting as Resource Servers. In order to use ACE, both Clients and Resource Servers have to register with an Authorization Server and become a registered device. Once registered, a Client can send a request to the Authorization Server, to obtain an Access Token for a Resource Server. For a Client to access the Resource Server, the Client must present the issued Access Token at the Resource Server, which then validates it before storing it (see <xref section="5.10.1.1" sectionFormat="of" target="RFC9200"/>).</t>
      <t>Even though Access Tokens have expiration times, there are circumstances by which an Access Token may need to be revoked before its expiration time, such as: (1) a registered device has been compromised, or is suspected of being compromised; (2) a registered device is decommissioned; (3) there has been a change in the ACE profile for a registered device; (4) there has been a change in access policies for a registered device; and (5) there has been a change in the outcome of policy evaluation for a registered device (e.g., if policy assessment depends on dynamic conditions in the execution environment, the user context, or the resource utilization).</t>
      <t>As discussed in <xref section="6.1" sectionFormat="of" target="RFC9200"/>, only client-initiated revocation is currently specified <xref target="RFC7009"/> for OAuth 2.0 <xref target="RFC6749"/>, based on the assumption that Access Tokens in OAuth are issued with a relatively short lifetime. However, this is not expected to be the case for constrained, intermittently connected devices, that need Access Tokens with relatively long lifetimes.</t>
      <t>This document specifies a method for allowing registered devices to access and possibly subscribe to a Token Revocation List (TRL) resource on the Authorization Server, in order to obtain an updated list of revoked, but yet not expired, pertaining Access Tokens. In particular, registered devices can subscribe to the TRL at the Authorization Server by using resource observation <xref target="RFC7641"/> for the Constrained Application Protocol (CoAP) <xref target="RFC7252"/>.</t>
      <t>Unlike in the case of token introspection (see <xref section="5.9" sectionFormat="of" target="RFC9200"/>), a registered device does not provide an owned Access Token to the Authorization Server for inquiring about its current state. Instead, registered devices simply obtain an updated list of revoked, but yet not expired, pertaining Access Tokens, as efficiently identified by corresponding hash values.</t>
      <t>The benefits of this method are that it complements token introspection, and it does not require any additional endpoints on the registered devices. The only additional requirements for registered devices are a request/response interaction with the Authorization Server to access and possibly subscribe to the TRL (see <xref target="sec-overview"/>), and the lightweight computation of hash values to use as Token identifiers (see <xref target="sec-token-name"/>).</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <t>Readers are expected to be familiar with the terms and concepts described in the ACE framework for Authentication and Authorization <xref target="RFC9200"/>, as well as with terms and concepts related to CBOR Web Tokens (CWTs) <xref target="RFC8392"/>, and JSON Web Tokens (JWTs) <xref target="RFC7519"/>. The terminology for entities in the considered architecture is defined in OAuth 2.0 <xref target="RFC6749"/>. In particular, this includes Client, Resource Server, and Authorization Server.</t>
        <t>Readers are also expected to be familiar with the terms and concepts related to CBOR <xref target="RFC8949"/>, JSON <xref target="RFC8259"/>, the CoAP protocol <xref target="RFC7252"/>, CoAP Observe <xref target="RFC7641"/>, and the use of hash functions to name objects as defined in <xref target="RFC6920"/>.</t>
        <t>Note that, unless otherwise indicated, the term "endpoint" is used here following its OAuth definition, aimed at denoting resources such as /token and /introspect at the Authorization Server, and /authz-info at the Resource Server. This document does not use the CoAP definition of "endpoint", which is "An entity participating in the CoAP protocol."</t>
        <t>This specification also refers to the following terminology.</t>
        <ul spacing="normal">
          <li>Token hash: identifier of an Access Token, in binary format encoding. The token hash has no relation to other possibly used token identifiers, such as the "cti" (CWT ID) claim of CBOR Web Tokens (CWTs) <xref target="RFC8392"/>.</li>
          <li>Token Revocation List (TRL): a collection of token hashes such that the corresponding Access Tokens have been revoked but are not expired yet.</li>
          <li>TRL resource: a resource on the Authorization Server, with a TRL as its representation.</li>
          <li>TRL endpoint: an endpoint at the Authorization Server associated with the TRL resource. The default name of the TRL endpoint in a url-path is '/revoke/trl'. Implementations are not required to use this name, and can define their own instead.</li>
          <li>Registered device: a device registered at the Authorization Server, i.e., as a Client, or a Resource Server, or both. A registered device acts as a caller of the TRL endpoint.</li>
          <li>Administrator: entity authorized to get full access to the TRL at the Authorization Server, and acting as a caller of the TRL endpoint. An administrator is not necessarily a registered device as defined above, i.e., a Client requesting Access Tokens or a Resource Server consuming Access Tokens. How the administrator authorization is established and verified is out of the scope of this specification.</li>
          <li>
            <t>Pertaining Access Token:  </t>
            <ul spacing="normal">
              <li>With reference to an administrator, an Access Token issued by the Authorization Server.</li>
              <li>With reference to a registered device, an Access Token intended to be owned by that device. An Access Token pertains to a Client if the Authorization Server has issued the Access Token and provided it to that Client. An Access Token pertains to a Resource Server if the Authorization Server has issued the Access Token to be consumed by that Resource Server.</li>
            </ul>
          </li>
        </ul>
        <t>Examples throughout this document are expressed in CBOR diagnostic notation without the tag and value abbreviations.</t>
      </section>
    </section>
    <section anchor="sec-overview">
      <name>Protocol Overview</name>
      <t>This protocol defines how a CoAP-based Authorization Server informs Clients and Resource Servers, i.e., registered devices, about pertaining revoked Access Tokens. How the relationship between a registered device and the Authorization Server is established is out of the scope of this specification.</t>
      <t>At a high level, the steps of this protocol are as follows.</t>
      <ul spacing="normal">
        <li>Upon startup, the Authorization Server creates a single TRL resource. At any point in time, the TRL resource represents the list of all revoked Access Tokens issued by the Authorization Server that are not expired yet.</li>
        <li>
          <t>When a device registers at the Authorization Server, it also receives the url-path to the TRL resource.  </t>
          <t>
After the registration procedure is finished, the registered device can send an Observation Request to the TRL resource as described in <xref target="RFC7641"/>, i.e., a GET request including the CoAP Observe Option set to 0 (register). By doing so, the registered device effectively subscribes to the TRL resource, as interested to receive notifications about its update. Upon receiving the request, the Authorization Server adds the registered device to the list of observers of the TRL resource.  </t>
          <t>
At any time, the registered device can send a GET request to the TRL endpoint. When doing so, it can request for: the current list of pertaining revoked Access Tokens (see <xref target="ssec-trl-full-query"/>); or the most recent TRL updates occurred over the list of pertaining revoked Access Tokens (see <xref target="ssec-trl-diff-query"/>). In either case, the registered device may also rely on an Observation Request for subscribing to the TRL resource as discussed above.</t>
        </li>
        <li>
          <t>When an Access Token is revoked, the Authorization Server adds the corresponding token hash to the TRL. Also, when a revoked Access Token eventually expires, the Authorization Server removes the corresponding token hash from the TRL.  </t>
          <t>
In either case, after updating the TRL, the Authorization Server sends Observe Notifications as per <xref target="RFC7641"/>. That is, an Observe Notification is sent to each registered device subscribed to the TRL resource and to which the Access Token pertains.  </t>
          <t>
Depending on the specific subscription established through the observation request, the notification provides the current updated list of revoked Access Tokens in the portion of the TRL pertaining to that device (see <xref target="ssec-trl-full-query"/>), or rather the most recent TRL updates occurred over that list of pertaining revoked Access Tokens (see <xref target="ssec-trl-diff-query"/>).  </t>
          <t>
Further Observe Notifications may be sent, consistently with ongoing additional observations of the TRL resource.</t>
        </li>
        <li>An administrator can access and subscribe to the TRL like a registered device, while getting the full updated representation of the TRL.</li>
      </ul>
      <t><xref target="fig-protocol-overview"/> shows a high-level overview of the service provided by this protocol. In particular, it shows the Observe Notifications sent by the Authorization Server to one administrator and four registered devices, upon revocation of the issued Access Tokens t1, t2 and t3, with token hash th1, th2 and th3, respectively. Each dotted line associated with a pair of registered devices indicates the Access Token that they both own.</t>
      <figure anchor="fig-protocol-overview">
        <name>Protocol Overview</name>
        <artwork align="center"><![CDATA[
                    +----------------------+
                    | Authorization Server |
                    +-----------o----------+
                    revoke/trl  |  TRL: {th1,th2,th3}
                                |
 +-----------------+------------+------------+------------+
 |                 |            |            |            |
 | th1,th2,th3     | th1,th2    | th1        | th3        | th2,th3
 v                 v            v            v            v
+---------------+ +----------+ +----------+ +----------+ +----------+
| Administrator | | Client 1 | | Resource | | Client 2 | | Resource |
|               | |          | | Server 1 | |          | | Server 2 |
+---------------+ +----------+ +----------+ +----------+ +----------+
                     :    :        :           :            :    :
                     :    :   t1   :           :     t3     :    :
                     :    :........:           :............:    :
                     :                   t2                      :
                     :...........................................:

]]></artwork>
      </figure>
      <t><xref target="sec-RS-examples"/> provides examples of the protocol flow and message exchange between the Authorization Server and a registered device.</t>
    </section>
    <section anchor="sec-token-name">
      <name>Token Hash</name>
      <t>The token hash of an Access Token is computed as follows.</t>
      <ol spacing="normal" type="1"><li>
          <t>The Authorization Server defines ENCODED_TOKEN, as the content of the 'access_token' parameter in the Authorization Server response (see <xref section="5.8.2" sectionFormat="of" target="RFC9200"/>), where the Access Token was included and provided to the requesting Client.  </t>
          <t>
Note that the content of the 'access_token' parameter is either:  </t>
          <ul spacing="normal">
            <li>A CBOR byte string, if the Access Token was transported using CBOR. With reference to the example in <xref target="fig-as-response-cbor"/>, and assuming the string's length in bytes to be 119 (i.e., 0x77 in hexadecimal), then ENCODED_TOKEN takes the bytes {0x58 0x77 0xd0 0x83 0x44 0xa1 ...}, i.e., the raw content of the parameter 'access_token'.</li>
            <li>A text string, if the Access Token was transported using JSON. With reference to the example in <xref target="fig-as-response-json"/>, ENCODED_TOKEN takes "2YotnFZFEjr1zCsicMWpAA", i.e., the raw content of the parameter 'access_token'.</li>
          </ul>
        </li>
        <li>
          <t>The Authorization Server defines HASH_INPUT as follows.  </t>
          <ul spacing="normal">
            <li>If CBOR was used to transport the Access Token (as a CWT or JWT), HASH_INPUT takes the same value of ENCODED_TOKEN.</li>
            <li>
              <t>If JSON was used to transport the Access Token (as a CWT or JWT), HASH_INPUT takes the serialization of ENCODED_TOKEN.      </t>
              <t>
In either case, HASH_INPUT results in the binary representation of the content of the 'access_token' parameter from the Authorization Server response.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>The Authorization Server generates a hash value of HASH_INPUT as per <xref section="6" sectionFormat="of" target="RFC6920"/>. The resulting output in binary format is used as the token hash. Note that the used binary format embeds the identifier of the used hash function, in the first byte of the computed token hash.  </t>
          <t>
The specifically used hash function MUST be collision-resistant on byte-strings, and MUST be selected from the "Named Information Hash Algorithm" Registry <xref target="Named.Information.Hash.Algorithm"/>.  </t>
          <t>
The Authorization Server specifies the used hash function to registered devices during their registration procedure (see <xref target="sec-registration"/>).</t>
        </li>
      </ol>
      <figure anchor="fig-as-response-cbor">
        <name>Example of Authorization Server response using CBOR</name>
        <artwork align="left"><![CDATA[
2.01 Created
Content-Format: application/ace+cbor
Max-Age: 85800
Payload:
{
   "access_token" : h'd08344a1 ...
    (remainder of the Access Token omitted for brevity) ...',
   "token_type" : pop,
   "expires_in" : 86400,
   "profile" : coap_dtls,
   (remainder of the response omitted for brevity)
}
]]></artwork>
      </figure>
      <figure anchor="fig-as-response-json">
        <name>Example of Authorization Server response using JSON</name>
        <artwork align="left"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
Payload:
{
   "access_token" : "2YotnFZFEjr1zCsicMWpAA ...
    (remainder of the Access Token omitted for brevity) ...",
   "token_type" : "pop",
   "expires_in" : 86400,
   "profile" : "coap_dtls",
   (remainder of the response omitted for brevity)
}
]]></artwork>
      </figure>
    </section>
    <section anchor="sec-trl-resource">
      <name>The TRL Resource</name>
      <t>Upon startup, the Authorization Server creates a single TRL resource, encoded as a CBOR array.</t>
      <t>Each element of the array is a CBOR byte string, with value the token hash of an Access Token. The order of the token hashes in the CBOR array is irrelevant, and the CBOR array MUST be treated as a set in which the order of elements has no significant meaning.</t>
      <t>The TRL is initialized as empty, i.e., the initial content of the TRL resource representation MUST be an empty CBOR array.</t>
      <section anchor="ssec-trl-update">
        <name>Update of the TRL Resource</name>
        <t>The Authorization Server updates the TRL in the following two cases.</t>
        <ul spacing="normal">
          <li>When a non-expired Access Token is revoked, the token hash of the Access Token is added to the TRL resource representation. That is, a CBOR byte string with the token hash as its value is added to the CBOR array used as TRL resource representation.</li>
          <li>When a revoked Access Token expires, the token hash of the Access Token is removed from the TRL resource representation. That is, the CBOR byte string with the token hash as its value is removed from the CBOR array used as TRL resource representation.</li>
        </ul>
      </section>
    </section>
    <section anchor="sec-trl-endpoint">
      <name>The TRL Endpoint</name>
      <t>Consistent with <xref section="6.5" sectionFormat="of" target="RFC9200"/>, all communications between a caller of the TRL endpoint and the Authorization Server MUST be encrypted, as well as integrity and replay protected. Furthermore, responses from the Authorization Server to the caller MUST be bound to the caller's request.</t>
      <t>Following a request to the TRL endpoint, the messages defined in this document that the Authorization Server sends as response use Content-Format "application/ace-trl+cbor". Their payload is formatted as a CBOR map, and the CBOR values for the parameters included therein are defined in <xref target="trl-registry-parameters"/>.</t>
      <t>The Authorization Server MUST implement measures to prevent access to the TRL endpoint by entities other than registered devices and authorized administrators.</t>
      <t>The TRL endpoint supports only the GET method, and allows two types of query of the TRL.</t>
      <ul spacing="normal">
        <li>
          <t>Full query: the Authorization Server returns the token hashes of the revoked Access Tokens currently in the TRL and pertaining to the requester.  </t>
          <t>
The Authorization Server MUST support this type of query. The processing of a full query and the related response format are defined in <xref target="ssec-trl-full-query"/>.</t>
        </li>
        <li>
          <t>Diff query: the Authorization Server returns a list of diff entries. Each diff entry is related to one of the most recent updates, in the portion of the TRL pertaining to the requester.  </t>
          <t>
The entry associated with one of such updates contains a list of token hashes, such that: i) the corresponding revoked Access Tokens pertain to the requester; and ii) they were added to or removed from the TRL at that update.  </t>
          <t>
The Authorization Server MAY support this type of query. In such a case, the Authorization Server maintains the history of updates to the TRL resource as defined in <xref target="sec-trl-endpoint-supporting-diff-queries"/>. The processing of a diff query and the related response format are defined in <xref target="ssec-trl-diff-query"/>.</t>
        </li>
      </ul>
      <t>If it supports diff queries, the Authorization Server MAY additionally support its "Cursor" extension, which has two benefits. First, the Authorization Server can avoid excessively big latencies when several diff entries have to be transferred, by delivering one adjacent subset at the time, in different diff query responses. Second, a requester can retrieve diff entries associated with TRL updates that, even if not the most recent ones, occurred after a TRL update indicated as reference point.</t>
      <t>If it supports the "Cursor" extension, the Authorization Server stores additional information when maintaining the history of updates to the TRL resource, as defined in <xref target="sec-trl-endpoint-supporting-cursor"/>. Also, the processing of full query requests and diff query requests, as well as the related response format, are further extended as defined in <xref target="sec-using-cursor"/>.</t>
      <section anchor="sec-trl-endpoint-supporting-diff-queries">
        <name>Supporting Diff Queries</name>
        <t>If the Authorization Server supports diff queries, it is able to transfer a list of diff entries, as a series of TRL updates. That is, when replying to a diff query performed by a requester, the Authorization Server specifies the most recent updates to the portion of the TRL pertaining to that requester.</t>
        <t>The following defines how the Authorization Server builds and maintains consistent histories of TRL updates for each registered device and administrator, hereafter referred to as requesters.</t>
        <t>For each requester, the Authorization Server maintains an update collection of maximum N_MAX series items, where N_MAX is a pre-defined, constant positive integer. The Authorization Server MUST keep track of the N_MAX most recent updates to the portion of the TRL that pertains to each requester. The Authorization Server SHOULD provide requesters with the value of N_MAX, upon their registration (see <xref target="sec-registration"/>).</t>
        <t>The series items in the update collection MUST be strictly ordered in a chronological fashion. That is, at any point in time, the current first series item is the one least recently added to the update collection and still retained by the Authorization Server, while the current last series item is the one most recently added to the update collection. The particular method used to achieve this is implementation-specific.</t>
        <t>Each time the TRL changes, the Authorization Server performs the following operations for each requester.</t>
        <ol spacing="normal" type="1"><li>The Authorization Server considers the portion of the TRL pertaining to that requester. If the TRL portion is not affected by this TRL update, the Authorization Server stops the processing for that requester.</li>
          <li>Otherwise, the Authorization Server creates two sets "trl_patch" of token hashes, i.e., one  "removed" set and one "added" set, as related to this TRL update.</li>
          <li>The Authorization Server fills the two sets with the token hashes of the removed and added Access Tokens, respectively, from/to the TRL portion considered at step 1.</li>
          <li>The Authorization Server creates a new series item, which includes the two sets from step 3.</li>
          <li>
            <t>If the update collection associated with the requester currently includes N_MAX series items, the Authorization Server MUST delete the oldest series item in the update collection.  </t>
            <t>
This occurs when the number of TRL updates pertaining to the requester and currently stored at the Authorization Server is equal to N_MAX.</t>
          </li>
          <li>The Authorization Server adds the series item to the update collection associated with the requester, as the most recent one.</li>
        </ol>
        <section anchor="sec-trl-endpoint-supporting-cursor">
          <name>Supporting the "Cursor" Extension</name>
          <t>If it supports the "Cursor" extension for diff queries, the Authorization Server performs also the following actions.</t>
          <t>The Authorization Server defines the constant, unsigned integer MAX_INDEX &lt;= ((2 ** 64) - 1), where "**" is the exponentiation operator. In particular, the value of MAX_INDEX is REQUIRED to be at least (N_MAX - 1), and is RECOMMENDED to be at least ((2 ** 32) - 1). Note that MAX_INDEX is practically expected to be order of magnitudes greater than N_MAX.</t>
          <t>When maintaining the history of updates to the TRL resource, the following applies separately for each update collection.</t>
          <ul spacing="normal">
            <li>
              <t>Each series item X in the update collection is also associated with an unsigned integer 'index', whose minimum value is 0 and whose maximum value is MAX_INDEX. The first series item ever added to the update collection MUST have 'index' with value 0.  </t>
              <t>
If i_X is the value of 'index' associated with a series item X, then the following series item Y will take 'index' with value i_Y = (i_X + 1) % (MAX_INDEX + 1). That is, after having added a series item whose associated 'index' has value MAX_INDEX, the next added series item will result in a wrap-around of the 'index' value, and will thus take 'index' with value 0.  </t>
              <t>
For example, assuming N_MAX = 3, the values of 'index' in the update collection chronologically evolve as follows, as new series items are added and old series items are deleted.  </t>
              <ul spacing="normal">
                <li>...</li>
                <li>( i_A = MAX_INDEX - 2, i_B = MAX_INDEX - 1, i_C = MAX_INDEX )</li>
                <li>( i_B = MAX_INDEX - 1, i_C = MAX_INDEX, i_D = 0 )</li>
                <li>( i_C = MAX_INDEX, i_D = 0, i_E = 1 )</li>
                <li>( i_D = 0, i_E = 1, i_F = 2 )</li>
                <li>...</li>
              </ul>
            </li>
            <li>
              <t>The unsigned integer 'last_index' is also defined, with minimum value 0 and maximum value MAX_INDEX.  </t>
              <t>
If the update collection is empty (i.e., no series items have been added yet), the value of 'last_index' is not defined. If the update collection is not empty, 'last_index' has the value of 'index' currently associated with the latest added series item in the update collection.  </t>
              <t>
That is, after having added V series items to the update collection, the last and most recently added series item has 'index' with value 'last_index' = (V - 1) % (MAX_INDEX + 1).  </t>
              <t>
As long as a wrap-around of the 'index' value has not occurred, the value of 'last_index' is the absolute counter of series items added to that update collection until and including V, minus 1.</t>
            </li>
          </ul>
          <t>When processing a diff query using the "Cursor" extension, the values of 'index' are used as cursor information, as defined in <xref target="sec-using-cursor-diff-query-response"/>.</t>
          <t>For each update collection, the Authorization Server also defines a constant, positive integer MAX_DIFF_BATCH &lt;= N_MAX, whose value specifies the maximum number of diff entries to be included in a single diff query response. The specific value depends on the specific registered device or administrator associated with the update collection in question. If supporting the "Cursor" extension, the Authorization Server SHOULD provide registered devices and administrators with the value of MAX_DIFF_BATCH, upon their registration (see <xref target="sec-registration"/>).</t>
        </section>
      </section>
      <section anchor="sec-trl-endpoint-query-parameters">
        <name>Query Parameters</name>
        <t>The TRL endpoint allows the following query parameters to be present in a GET request. The Authorization Server MUST silently ignore unknown query parameters.</t>
        <ul spacing="normal">
          <li>
            <t>'pmax': if included, it follows the semantics defined in <xref section="3.2.2" sectionFormat="of" target="I-D.ietf-core-conditional-attributes"/>. This query parameter is relevant only in case the GET request is specifically an Observation Request, i.e., if it includes the CoAP Observe Option set to 0 (register). In such a case, this parameter indicates the maximum time, in seconds, between two consecutive notifications for the observation in question, regardless whether the TRL resource has changed or not.  </t>
            <t>
If the Observation Request does not include the 'pmax' parameter, the maximum time to consider is up to the Authorization Server. If the Observation Request includes the 'pmax' parameter, its value MUST be greater than zero, otherwise the Authorization Server MUST return a 4.00 (Bad Request) response.  </t>
            <t>
If the GET request is not an Observation Request, the Authorization Server MUST ignore the 'pmax' parameter, in case this is included.</t>
          </li>
          <li>
            <t>'diff': if included, it indicates to perform a diff query of the TRL (see <xref target="ssec-trl-diff-query"/>). Its value MUST be either:  </t>
            <ul spacing="normal">
              <li>the integer 0, indicating that a (notification) response should include as many diff entries as the Authorization Server can provide in the response; or</li>
              <li>a positive integer strictly greater than 0, indicating the maximum number of diff entries that a (notification) response should include.</li>
            </ul>
            <t>
If the Authorization Server does not support diff queries, it ignores the query parameter 'diff' when present in the GET request and proceeds like when processing a full query of the TRL (see <xref target="ssec-trl-full-query"/>).  </t>
            <t>
Otherwise, the Authorization Server MUST return a 4.00 (Bad Request) response in case the query parameter 'diff' of the GET request specifies a value other than 0 or than a positive integer. The response MUST have Content-Format "application/ace-trl+cbor". The payload of the response is a CBOR map, which MUST include the 'error' field with value 0 ("Invalid parameter value") and MAY include the 'error_description' field to provide additional context.</t>
          </li>
          <li>
            <t>'cursor': if included, it indicates to perform a diff query of the TRL together with the "Cursor" extension, as defined in <xref target="sec-using-cursor-diff-query-response"/>. Its value MUST be either 0 or a positive integer.  </t>
            <t>
If included, the query parameter 'cursor' specifies an unsigned integer value that was provided by the Authorization Server in a previous response from the TRL endpoint (see <xref target="sec-using-cursor-full-query-response"/>, <xref target="sec-using-cursor-diff-query-response-no-cursor"/> and <xref target="sec-using-cursor-diff-query-response-cursor"/>).  </t>
            <t>
If the Authorization Server does not support the "Cursor" extension, it ignores the query parameter 'cursor' when present in the GET request. In such a case, the Authorization Server proceeds: i) like when processing a diff query of the TRL (see <xref target="ssec-trl-diff-query"/>), if it supports diff queries and the query parameter 'diff' is present in the GET request, or ii) like when processing a full query of the TRL (see <xref target="ssec-trl-full-query"/>) otherwise.  </t>
            <t>
If the Authorization Server supports both diff queries and the "Cursor" extension, and the GET request specifies the query parameter 'cursor', then the Authorization Server MUST return a 4.00 (Bad Request) response in case any of the following conditions holds.  </t>
            <ul spacing="normal">
              <li>
                <t>The GET request does not specify the query parameter 'diff'.      </t>
                <t>
The 'error' parameter within the CBOR map carried in the response payload MUST have value 1 ("Invalid set of parameters").</t>
              </li>
              <li>
                <t>The query parameter 'cursor' has a value other than 0 or than a positive integer.      </t>
                <t>
The 'error' parameter within the CBOR map carried in the response payload MUST have value 0 ("Invalid parameter value").</t>
              </li>
              <li>
                <t>The query parameter 'cursor' has a value strictly greater than MAX_INDEX (see <xref target="sec-trl-endpoint-supporting-cursor"/>).      </t>
                <t>
The 'error' parameter within the CBOR map carried in the response payload MUST have value 0 ("Invalid parameter value"). The CBOR map MUST also include the 'cursor' parameter, which MUST specify either: the CBOR simple value "null" (0xf6), if the update collection associated with the requester is empty; or the corresponding current value of 'last_index' otherwise.</t>
              </li>
              <li>
                <t>All of the following hold: the update collection associated with the requester is not empty; no wrap-around of its 'index' value has occurred; and the query parameter 'cursor' has a value strictly greater than the current 'last_index' on the update collection (see <xref target="sec-trl-endpoint-supporting-cursor"/>).      </t>
                <t>
The 'error' parameter within the CBOR map carried in the response payload MUST have value 2 ("Out of bound cursor value"). The CBOR map MUST also include the 'cursor' parameter, which MUST specify the current value of 'last_index' for the update collection associated with the requester.</t>
              </li>
            </ul>
            <t>
The 4.00 (Bad Request) response MUST have Content-Format "application/ace-trl+cbor". The payload of the response MUST be a CBOR map, which MUST include the 'error' parameter and MAY include the 'error_description' parameter to provide additional context.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="ssec-trl-full-query">
      <name>Full Query of the TRL</name>
      <t>In order to produce a (notification) response to a GET request asking for a full query of the TRL, the Authorization Server performs the following actions.</t>
      <ol spacing="normal" type="1"><li>
          <t>From the current TRL resource representation, the Authorization Server builds a set HASHES, such that:  </t>
          <ul spacing="normal">
            <li>If the requester is a registered device, HASHES specifies the token hashes of the Access Tokens pertaining to that registered device. The Authorization Server can use the authenticated identity of the registered device to perform the necessary filtering on the TRL resource representation.</li>
            <li>If the requester is an administrator, HASHES specifies all the token hashes in the current TRL resource representation.</li>
          </ul>
        </li>
        <li>
          <t>The Authorization Server sends a 2.05 (Content) response to the requester. The response MUST have Content-Format "application/ace-trl+cbor". The payload of the response is a CBOR map, which MUST be formatted as follows.  </t>
          <ul spacing="normal">
            <li>
              <t>The 'full_set' parameter MUST be included and specifies a CBOR array 'full_set_value'. Each element of 'full_set_value' specifies one of the token hashes from the set HASHES, encoded as a CBOR byte string. If the set HASHES is empty, the 'full_set' parameter specifies the empty CBOR array.      </t>
              <t>
The order of the token hashes in the CBOR array is irrelevant, i.e., the CBOR array MUST be treated as a set in which the order of elements has no significant meaning.</t>
            </li>
            <li>
              <t>The 'cursor' parameter MUST be included if the Authorization Server supports both the diff queries and the related "Cursor" extension (see <xref target="sec-trl-endpoint-supporting-diff-queries"/> and <xref target="sec-trl-endpoint-supporting-cursor"/>). Its value is specified according to what is defined in <xref target="sec-using-cursor-full-query-response"/>, and provides the requester with information for performing a follow-up diff query using the "Cursor" extension (see <xref target="sec-using-cursor-diff-query-response"/>).      </t>
              <t>
If the Authorization Server does not support both diff queries and the "Cursor" extension, this parameter MUST NOT be included. In case the requester does not support both diff queries and the "Cursor" extension, it MUST silently ignore the 'cursor' parameter if present.</t>
            </li>
          </ul>
        </li>
      </ol>
      <t><xref target="cddl-full"/> provides the CDDL definition <xref target="RFC8610"/> of the CBOR array 'full_set_value' specified in the response from the Authorization Server, as value of the 'full_set' parameter.</t>
      <figure anchor="cddl-full">
        <name>CDDL definition of 'full_set_value'</name>
        <artwork type="CDDL" align="left"><![CDATA[
token_hash = bytes
full_set_value = [* token_hash]
]]></artwork>
      </figure>
      <t><xref target="response-full"/> shows an example of response from the Authorization Server, following a full query request to the TRL endpoint. In this example, the Authorization Server does not support the "Cursor" extension (if it supports diff queries at all), hence the 'cursor' parameter is not included in the payload of the response. Also, full token hashes are omitted for brevity.</t>
      <figure anchor="response-full">
        <name>Example of response following a Full Query request to the TRL endpoint</name>
        <artwork align="left"><![CDATA[
2.05 Content
Content-Format: application/ace-trl+cbor
Payload:
{
   "full_set" : [
     h'01fa51cc ... ', h'01748190 ... '
   ]
}
]]></artwork>
      </figure>
    </section>
    <section anchor="ssec-trl-diff-query">
      <name>Diff Query of the TRL</name>
      <t>In order to produce a (notification) response to a GET request asking for a diff query of the TRL, the Authorization Server performs the following actions.</t>
      <ol spacing="normal" type="1"><li>The Authorization Server defines the positive integer NUM as follows. If the value N specified in the query parameter 'diff' in the GET request is equal to 0 or greater than the pre-defined positive integer N_MAX (see <xref target="sec-trl-endpoint-supporting-diff-queries"/>), then NUM takes the value of N_MAX. Otherwise, NUM takes N.</li>
        <li>The Authorization Server determines U = min(NUM, SIZE), where SIZE &lt;= N_MAX is the number of TRL updates pertaining to the requester and currently stored at the Authorization Server.</li>
        <li>
          <t>The Authorization Server prepares U diff entries. If U is equal to 0 (e.g., because SIZE is equal to 0 at step 2), then no diff entries are prepared.  </t>
          <t>
The prepared diff entries are related to the U most recent TRL updates pertaining to the requester, as maintained in the update collection for that requester (see <xref target="sec-trl-endpoint-supporting-diff-queries"/>). In particular, the first diff entry refers to the most recent of such updates, the second diff entry refers to the second from last of such updates, and so on.  </t>
          <t>
Each diff entry is a CBOR array 'diff_entry', which includes the following two elements.  </t>
          <ul spacing="normal">
            <li>The first element is a CBOR array 'removed'. Each element of the array is a CBOR byte string, with value the token hash of an Access Token such that: it pertained to the requester; and it was removed from the TRL during the update associated with the diff entry.</li>
            <li>The second element is a CBOR array 'added'. Each element of the array is a CBOR byte string, with value the token hash of an Access Token such that: it pertains to the requester; and it was added to the TRL during the update associated with the diff entry.</li>
          </ul>
          <t>
The order of the token hashes in the CBOR arrays 'removed' and 'added' is irrelevant. That is, the CBOR arrays 'removed' and 'added' MUST be treated as a set in which the order of elements has no significant meaning.</t>
        </li>
        <li>
          <t>The Authorization Server prepares a 2.05 (Content) response for the requester. The response MUST have Content-Format "application/ace-trl+cbor". The payload of the response is a CBOR map, which MUST be formatted as follows.  </t>
          <ul spacing="normal">
            <li>
              <t>The 'diff_set' parameter MUST be present and specifies a CBOR array 'diff_set_value' of U elements. Each element of 'diff_set_value' specifies one of the CBOR arrays 'diff_entry' prepared above as diff entry. Note that U might have value 0, in which case 'diff_set_value' is the empty CBOR array.      </t>
              <t>
Within 'diff_set_value', the CBOR arrays 'diff_entry' MUST be sorted to reflect the corresponding updates to the TRL in reverse chronological order. That is, the first 'diff_entry' element of 'diff_set_value' relates to the most recent update to the portion of the TRL pertaining to the requester. The second 'diff_entry' element relates to the second from last most recent update to that portion, and so on.</t>
            </li>
            <li>
              <t>The 'cursor' parameter and the 'more' parameter MUST be included if the Authorization Server supports both the diff queries and the related "Cursor" extension (see <xref target="sec-trl-endpoint-supporting-cursor"/>). Their values are specified according to what is defined in <xref target="sec-using-cursor-diff-query-response"/>, and provide the requester with information for performing a follow-up query to the TRL endpoint (see <xref target="sec-using-cursor-diff-query-response"/>).      </t>
              <t>
If the Authorization Server does not support both diff queries and the "Cursor" extension, these parameters MUST NOT be included. In case the requester does not support both diff queries and the "Cursor" extension, it MUST silently ignore the 'cursor' parameter and the 'more' parameter if present.</t>
            </li>
          </ul>
        </li>
      </ol>
      <t><xref target="cddl-diff"/> provides the CDDL definition <xref target="RFC8610"/> of the CBOR array 'diff_set_value' specified in the response from the Authorization Server, as value of the 'diff_set' parameter.</t>
      <figure anchor="cddl-diff">
        <name>CDDL definition of 'diff_set_value'</name>
        <artwork type="CDDL" align="left"><![CDATA[
   token_hash = bytes
   trl_patch = [* token_hash]
   diff_entry = [removed: trl_patch, added: trl_patch]
   diff_set_value = [* diff_entry]
]]></artwork>
      </figure>
      <t><xref target="response-diff"/> shows an example of response from the Authorization Server, following a Diff Query request to the TRL endpoint, where U = 3 diff entries are specified. In this example, the Authorization Server does not support the "Cursor" extension, hence the 'cursor' parameter and the 'more' parameter are not included in the payload of the response. Also, full token hashes are omitted for brevity.</t>
      <figure anchor="response-diff">
        <name>Example of response following a Diff Query request to the TRL endpoint</name>
        <artwork align="left"><![CDATA[
2.05 Content
Content-Format: application/ace-trl+cbor
Payload:
{
   "diff_set" : [
     [
       [ h'01fa51cc ... ', h'01748190 ... '],
       [ h'01cdf1ca ... ', h'01be41a6 ... ']
     ],
     [
       [ h'0144dd12 ... ', h'01231fff ... '],
       []
     ],
     [
       [],
       [ h'01ca986f ... ', h'01fe1a2b ... ']
     ]
   ]
}
]]></artwork>
      </figure>
      <t><xref target="sec-series-pattern"/> discusses how performing a diff query of the TRL is in fact a usage example of the Series Transfer Pattern defined in <xref target="I-D.bormann-t2trg-stp"/>.</t>
    </section>
    <section anchor="sec-using-cursor">
      <name>Response Messages when Using the "Cursor" Extension</name>
      <t>If it supports both diff queries and the "Cursor" extension, the Authorization Server composes a response to a full query request or diff query request as defined in <xref target="sec-using-cursor-full-query-response"/> and <xref target="sec-using-cursor-diff-query-response"/>, respectively.</t>
      <t>The exact format of the response depends on the request being a full query or diff query request, on the presence of the query parameter 'cursor' in the diff query request, and on the current status of the update collection associated with the requester.</t>
      <t>Error handling and the possible resulting error responses are as defined in <xref target="sec-trl-endpoint-query-parameters"/>.</t>
      <section anchor="sec-using-cursor-full-query-response">
        <name>Response to Full Query</name>
        <t>When processing a full query request to the TRL endpoint, the Authorization Server composes a response as defined in <xref target="ssec-trl-full-query"/>.</t>
        <t>In particular, the 'cursor' parameter included in the CBOR map carried in the response payload specifies either the CBOR simple value "null" (0xf6) or a CBOR unsigned integer.</t>
        <t>The 'cursor' parameter MUST specify the CBOR simple value "null" in case there are currently no TRL updates pertinent to the requester, i.e., the update collection for that requester is empty. This is the case from when the requester registers at the Authorization Server until a first update pertaining to that requester occurs to the TRL.</t>
        <t>Otherwise, the 'cursor' parameter MUST specify a CBOR unsigned integer. This MUST take the 'index' value of the last series item in the update collection associated with the requester (see <xref target="sec-trl-endpoint-supporting-cursor"/>), as corresponding to the most recent update pertaining to the requester occurred to the TRL.</t>
      </section>
      <section anchor="sec-using-cursor-diff-query-response">
        <name>Response to Diff Query</name>
        <t>When processing a diff query request to the TRL endpoint, the Authorization Server composes a response as defined in the following.</t>
        <section anchor="sec-using-cursor-diff-query-response-empty">
          <name>Empty Collection</name>
          <t>If the update collection associated with the requester has no elements, the Authorization Server returns a 2.05 (Content) response. The response MUST have Content-Format "application/ace-trl+cbor" and its payload MUST be a CBOR map formatted as follows.</t>
          <ul spacing="normal">
            <li>The 'diff_set' parameter MUST be included and specifies the empty CBOR array.</li>
            <li>The 'cursor' parameter MUST be included and specifies the CBOR simple value "null" (0xf6).</li>
            <li>The 'more' parameter MUST be included and specifies the CBOR simple value "false" (0xf4).</li>
          </ul>
          <t>Note that the above applies when the update collection associated with the requester has no elements, regardless whether the query parameter 'cursor' is included or not in the diff query request, and irrespective of the specified unsigned integer value if present.</t>
        </section>
        <section anchor="sec-using-cursor-diff-query-response-no-cursor">
          <name>Cursor Not Specified in the Diff Query Request</name>
          <t>If the update collection associated with the requester is not empty and the diff query request does not include the query parameter 'cursor', the Authorization Server performs the same actions defined in <xref target="ssec-trl-diff-query"/>, with the following differences.</t>
          <ul spacing="normal">
            <li>
              <t>At step 3, the Authorization Server considers the value MAX_DIFF_BATCH (see <xref target="sec-trl-endpoint-supporting-cursor"/>), and prepares L = min(U, MAX_DIFF_BATCH) diff entries. If L is equal to 0 (e.g., because U is equal to 0), then no diff entries are prepared.  </t>
              <t>
If U &lt;= MAX_DIFF_BATCH, the prepared diff entries are the last series items in the update collection associated with the requester, corresponding to the L most recent TRL updates pertaining to the requester.  </t>
              <t>
If U &gt; MAX_DIFF_BATCH, the prepared diff entries are the eldest of the last U series items in the update collection associated with the requester, as corresponding to the first L of the U most recent TRL updates pertaining to the requester.</t>
            </li>
            <li>
              <t>At step 4, the CBOR map to carry in the payload of the 2.05 (Content) response MUST be formatted as follows.  </t>
              <ul spacing="normal">
                <li>The 'diff_set' parameter MUST be present and specifies a CBOR array 'diff_set_value' of L elements. Each element of 'diff_set_value' specifies one of the CBOR arrays 'diff_entry' prepared as diff entry. Note that L might have value 0, in which case 'diff_set_value' is the empty CBOR array.</li>
                <li>
                  <t>The 'cursor' parameter MUST be present and specifies a CBOR unsigned integer. This MUST take the 'index' value of the series item of the update collection included as first diff entry in the 'diff_set_value' CBOR array, which is specified by the 'diff_set' parameter. That is, the 'cursor' parameter takes the 'index' value of the series item in the update collection corresponding to the most recent update pertaining to the requester and returned in this diff query response.      </t>
                  <t>
Note that the 'cursor' parameter takes the same 'index' value of the last series item in the update collection when U &lt;= MAX_DIFF_BATCH.</t>
                </li>
                <li>
                  <t>The 'more' parameter MUST be present and MUST specify the CBOR simple value "false" (0xf4) if U &lt;= MAX_DIFF_BATCH, or the CBOR simple value "true" (0xf5) otherwise.      </t>
                  <t>
If the 'more' parameter has value "true", the requester can send a follow-up diff query request including the query parameter 'cursor', with the same value of the 'cursor' parameter specified in this diff query response. As defined in <xref target="sec-using-cursor-diff-query-response-cursor"/>, this would result in the Authorization Server transferring the following subset of series items as diff entries, thus resuming from where interrupted in the previous transfer.</t>
                </li>
              </ul>
            </li>
          </ul>
        </section>
        <section anchor="sec-using-cursor-diff-query-response-cursor">
          <name>Cursor Specified in the Diff Query Request</name>
          <t>If the update collection associated with the requester is not empty and the diff query request includes the query parameter 'cursor' with value P, the Authorization Server proceeds as follows, depending on which of the following two cases hold.</t>
          <ul spacing="normal">
            <li>
              <t>Case A - The series item X with 'index' having value P and the series item Y with 'index' having value (P + 1) % (MAX_INDEX + 1) are both not found in the update collection associated with the requester. This occurs when the item Y (and possibly further ones after it) has been previously removed from the history of updates for that requester (see step 5 at <xref target="sec-trl-endpoint-supporting-diff-queries"/>).  </t>
              <t>
In this case, the Authorization Server returns a 2.05 (Content) response. The response MUST have Content-Format "application/ace-trl+cbor" and its payload MUST be a CBOR map formatted as follows.  </t>
              <ul spacing="normal">
                <li>The 'diff_set' parameter MUST be included and specifies the empty CBOR array.</li>
                <li>The 'cursor' parameter MUST be included and specifies the CBOR simple value "null" (0xf6).</li>
                <li>The 'more' parameter MUST be included and specifies the CBOR simple value "true" (0xf5).</li>
              </ul>
              <t>
With the combination ('cursor', 'more') = ("null", "true"), the Authorization Server is signaling that the update collection is in fact not empty, but that one or more series items have been lost due to their removal. These include the item with 'index' value (P + 1) % (MAX_INDEX + 1), that the requester wished to obtain as the first one following the specified reference point with 'index' value P.  </t>
              <t>
When receiving this diff query response, the requester should send a new full query request to the Authorization Server. A successful response provides the requester with the full, current pertaining portion of the TRL, as well as with a valid value of the 'cursor' parameter (see <xref target="sec-using-cursor-full-query-response"/>) to be possibly used as query parameter in a following diff query request.</t>
            </li>
            <li>
              <t>Case B - The series item X with 'index' having value P is found in the update collection associated with the requester; or the series item X is not found and the series item Y with 'index' having value (P + 1) % (MAX_INDEX + 1) is found in the update collection associated with the requester.  </t>
              <t>
In this case, the Authorization Server performs the same actions defined in <xref target="ssec-trl-diff-query"/>, with the following differences.  </t>
              <ul spacing="normal">
                <li>
                  <t>At step 3, the Authorization Server considers the value MAX_DIFF_BATCH (see <xref target="sec-trl-endpoint-supporting-cursor"/>), and prepares L = min(SUB_U, MAX_DIFF_BATCH) diff entries, where SUB_U = min(NUM, SUB_SIZE), and SUB_SIZE is the number of series items in the update collection starting from and including the series item added immediately after X. If L is equal to 0 (e.g., because SUB_U is equal to 0), then no diff entries are prepared.      </t>
                  <t>
If SUB_U &lt;= MAX_DIFF_BATCH, the prepared diff entries are the last series items in the update collection associated with the requester, corresponding to the L most recent TRL updates pertaining to the requester.      </t>
                  <t>
If SUB_U &gt; MAX_DIFF_BATCH, the prepared diff entries are the eldest of the last SUB_U series items in the update collection associated with the requester, corresponding to the first L of the SUB_U most recent TRL updates pertaining to the requester.</t>
                </li>
                <li>
                  <t>At step 4, the CBOR map to carry in the payload of the 2.05 (Content) response MUST be formatted as follows.      </t>
                  <ul spacing="normal">
                    <li>The 'diff_set' parameter MUST be present and specifies a CBOR array 'diff_set_value' of L elements. Each element of 'diff_set_value' specifies one of the CBOR arrays 'diff_entry' prepared as diff entry. Note that L might have value 0, in which case 'diff_set_value' is the empty CBOR array.</li>
                    <li>
                      <t>The 'cursor' parameter MUST be present and MUST specify a CBOR unsigned integer. In particular:          </t>
                      <ul spacing="normal">
                        <li>If L is equal to 0, i.e., the series item X is the last one in the update collection, then the 'cursor' parameter MUST take the same 'index' value of the last series item in the update collection.</li>
                        <li>If L is different than 0, then the 'cursor' parameter MUST take the 'index' value of the series element of the update collection included as first diff entry in the 'diff_set' CBOR array. That is, the 'cursor' parameter takes the 'index' value of the series item in the update collection corresponding to the most recent update pertaining to the requester and returned in this diff query response.</li>
                      </ul>
                      <t>
Note that the 'cursor' parameter takes the same 'index' value of the last series item in the update collection when SUB_U &lt;= MAX_DIFF_BATCH.</t>
                    </li>
                    <li>
                      <t>The 'more' parameter MUST be present and MUST specify the CBOR simple value "false" (0xf4) if SUB_U &lt;= MAX_DIFF_BATCH, or the CBOR simple value "true" (0xf5) otherwise.          </t>
                      <t>
If 'more' has value "true", the requester can send a follow-up diff query request including the query parameter 'cursor', with the same value of the 'cursor' parameter specified in this diff query response. This would result in the Authorization Server transferring the following subset of series items as diff entries, thus resuming from where interrupted in the previous transfer.</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="sec-registration">
      <name>Upon Registration</name>
      <t>During the registration process at the Authorization Server, an administrator or a registered device receives the following information as part of the registration response.</t>
      <ul spacing="normal">
        <li>The url-path to the TRL endpoint at the Authorization Server.</li>
        <li>The hash function used to compute token hashes. This is specified as an integer or a text string, taking value from the "ID" or "Hash Name String" column of the "Named Information Hash Algorithm" Registry <xref target="Named.Information.Hash.Algorithm"/>, respectively.</li>
        <li>Optionally, a positive integer N_MAX, if the Authorization Server supports diff queries of the TRL resource (see <xref target="sec-trl-endpoint-supporting-diff-queries"/> and <xref target="ssec-trl-diff-query"/>).</li>
        <li>Optionally, a positive integer MAX_DIFF_BATCH, if the Authorization Server supports diff queries of the TRL resource as well as the related "Cursor" extension (see <xref target="sec-trl-endpoint-supporting-cursor"/> and <xref target="sec-using-cursor"/>).</li>
      </ul>
      <t>After the registration procedure is finished, the administrator or registered device can send a GET request to the TRL resource, including the CoAP Observe Option set to 0 (register), in order to start an observation of the TRL resource at the Authorization Server as per <xref section="3.1" sectionFormat="of" target="RFC7641"/>. The GET request can express the wish for a full query (see <xref target="ssec-trl-full-query"/>) or a diff query (see <xref target="ssec-trl-diff-query"/>) of the TRL.</t>
      <t>In case the request is successfully processed, the Authorization Server replies with a response specifying the CoAP response code 2.05 (Content) and including the CoAP Observe Option. The payload of the response is formatted as defined in <xref target="ssec-trl-full-query"/> or in <xref target="ssec-trl-diff-query"/>, in case the GET request yielded the execution of a full query or a diff query of the TRL, respectively.</t>
      <t>Further details about the registration process at the Authorization Server are out of scope for this specification. Note that the registration process is also out of the scope of the ACE framework for Authentication and Authorization (see <xref section="5.5" sectionFormat="of" target="RFC9200"/>).</t>
    </section>
    <section anchor="sec-notification">
      <name>Notification of Revoked Tokens</name>
      <t>When the TRL is updated (see <xref target="ssec-trl-update"/>), the Authorization Server sends Observe Notifications to the observers of the TRL resource. Observe Notifications are sent as per <xref section="4.2" sectionFormat="of" target="RFC7641"/>.</t>
      <t>If the 'pmax' query parameter was specified in the Observation Request starting an observation (see <xref target="sec-trl-endpoint-query-parameters"/>), the Authorization Server might accordingly send additional Observe Notifications to the associated observer. That is, the Authorization Server ensures that no more than pmax seconds elapse between two consecutive notifications sent to that observer, regardless whether the TRL resource has changed or not. If the 'pmax' query parameter was not specified in the Observation Request, a possible maximum time to consider is up to the Authorization Server.</t>
      <t>The payload of each Observe Notification is formatted as defined in <xref target="ssec-trl-full-query"/> or in <xref target="ssec-trl-diff-query"/>, in case the original Observation Request yielded the execution of a full query or a diff query of the TRL, respectively.</t>
      <t>Furthermore, an administrator or a registered device can send additional GET requests to the TRL endpoint at any time, in order to retrieve the token hashes of the pertaining revoked Access Tokens. When doing so, the caller of the TRL endpoint can perform a full query (see <xref target="ssec-trl-full-query"/>) or a diff query (see <xref target="ssec-trl-diff-query"/>) of the TRL.</t>
      <t>When receiving a response from the TRL endpoint, a registered device MUST expunge every stored Access Token associated with a token hash specified in the response.</t>
      <t>When a Resource Server RS receives a response from the TRL endpoint specifying the token hash th1 associated with a revoked Access Token t1, the RS might not have received and stored that Access Token yet. This occurs if the Access Token is revoked before it is successfully posted to the Authorization Information Endpoint at the RS (see <xref section="5.10.1" sectionFormat="of" target="RFC9200"/>). Such a delay can be due, for example, to messages that get lost in transmission, or rather to the Client experiencing failures in sending the Access Token to the RS, or deliberately holding the Access Token back.</t>
      <t>Thus, in order to ensure that no revoked Access Tokens are accepted and stored, the RS performs the following actions.</t>
      <ul spacing="normal">
        <li>
          <t>The RS MUST store the token hash th1, until gaining knowledge that the associated revoked Access Token t1 is also expired.  </t>
          <t>
This can happen when receiving a subsequent response from the TRL endpoint (i.e., indicating that the token hash th1 is not in the TRL portion pertaining to the RS anymore), or when the Access Token t1 is posted to the Authorization Information Endpoint and is found to be expired based on its 'exp' claim <xref target="RFC7519"/>, if included.</t>
        </li>
        <li>The RS MUST NOT accept as valid and store an Access Token t1 posted to the Authorization Information Endpoint, if the corresponding token hash th1 is among the stored ones.</li>
      </ul>
    </section>
    <section anchor="sec-RS-examples">
      <name>Interaction Examples</name>
      <t>This section provides examples of interactions between a Resource Server RS as a registered device and an Authorization Server AS. The Authorization Server supports both full query and diff query of the TRL, as defined in <xref target="ssec-trl-full-query"/> and <xref target="ssec-trl-diff-query"/>, respectively.</t>
      <t>The details of the registration process are omitted, but it is assumed that the Resource Server sends an unspecified payload to the Authorization Server, which replies with a 2.01 (Created) response.</t>
      <t>The payload of the registration response is a CBOR map, which includes the following entries:</t>
      <ul spacing="normal">
        <li>a "trl_path" parameter, specifying the path of the TRL resource;</li>
        <li>a "trl_hash" parameter, specifying the hash function used to computed token hashes as defined in <xref target="sec-token-name"/>;</li>
        <li>an "n_max" parameter, specifying the value of N_MAX, i.e., the maximum number of TRL updates pertaining to each registered device that the Authorization Server retains for that device (see <xref target="ssec-trl-diff-query"/>);</li>
        <li>possible further parameters related to the registration process.</li>
      </ul>
      <t>Furthermore, 'h(x)' refers to the hash function used to compute the token hashes, as defined in <xref target="sec-token-name"/> of this specification and according to <xref target="RFC6920"/>. Assuming the usage of CWTs transported in CBOR, 'bstr.h(t1)' and 'bstr.h(t2)' denote the byte-string representations of the token hashes for the Access Tokens t1 and t2, respectively.</t>
      <section anchor="sec-RS-example-1">
        <name>Full Query with Observation</name>
        <t><xref target="fig-RS-AS"/> shows an interaction example considering a CoAP observation and a full query of the TRL.</t>
        <t>In this example, the Authorization Server does not support the "Cursor" extension (if it supports diff queries at all). Hence the 'cursor' parameter is not included in the payload of the responses to a full query request.</t>
        <figure anchor="fig-RS-AS">
          <name>Interaction for Full Query with Observation</name>
          <artwork align="center"><![CDATA[
RS                                                 AS
|                                                   |
| Registration: POST                                |
+-------------------------------------------------->|
|                                                   |
|<--------------------------------------------------+
|                   2.01 CREATED                    |
|                     Payload: {                    |
|                        ...                        |
|                        "trl_path" : "revoke/trl", |
|                        "trl_hash" : "sha-256",    |
|                        "n_max" : 10               |
|                     }                             |
|                                                   |
| GET Observe: 0                                    |
|  coap://as.example.com/revoke/trl/                |
+-------------------------------------------------->|
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 42                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "full_set" : []                         |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|          (Access Tokens t1 and t2 issued          |
|          and successfully submitted to RS)        |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|                                                   |
|            (Access Token t1 is revoked)           |
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 53                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "full_set" : [bstr.h(t1)]               |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|            (Access Token t2 is revoked)           |
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 64                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "full_set" : [bstr.h(t1), bstr.h(t2)]   |
|        }                                          |
|                                                   |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|             (Access Token t1 expires)             |
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 75                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "full_set" : [bstr.h(t2)]               |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|            (Access Token t2 expires)              |
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 86                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "full_set" : []                         |
|         }                                         |
|                                                   |
]]></artwork>
        </figure>
      </section>
      <section anchor="sec-RS-example-2">
        <name>Diff Query with Observation</name>
        <t><xref target="fig-RS-AS-2"/> shows an interaction example considering a CoAP observation and a diff query of the TRL.</t>
        <t>The Resource Server indicates N=3 as value of the query parameter 'diff', i.e., as the maximum number of diff entries to be specified in a response from the Authorization Server.</t>
        <t>In this example, the Authorization Server does not support the "Cursor" extension. Hence the 'cursor' parameter and the 'more' parameter are not included in the payload of the responses to a diff query request.</t>
        <figure anchor="fig-RS-AS-2">
          <name>Interaction for Diff Query with Observation</name>
          <artwork align="center"><![CDATA[
RS                                                 AS
|                                                   |
| Registration: POST                                |
+-------------------------------------------------->|
|                                                   |
|<--------------------------------------------------+
|                    2.01 CREATED                   |
|                     Payload: {                    |
|                        ...                        |
|                        "trl_path" : "revoke/trl", |
|                        "trl_hash" : "sha-256",    |
|                        "n_max" : 10               |
|                     }                             |
|                                                   |
| GET Observe: 0                                    |
|  coap://as.example.com/revoke/trl?diff=3          |
+-------------------------------------------------->|
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 42                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "diff_set" : []                         |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|          (Access Tokens t1 and t2 issued          |
|          and successfully submitted to RS)        |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|            (Access Token t1 is revoked)           |
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 53                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "diff_set" : [                          |
|                          [ [], [bstr.h(t1)] ]     |
|                        ]                          |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|            (Access Token t2 is revoked)           |
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 64                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "diff_set" : [                          |
|                          [ [], [bstr.h(t2)] ],    |
|                          [ [], [bstr.h(t1)] ]     |
|                        ]                          |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|              (Access Token t1 expires)            |
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 75                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "diff_set" : [                          |
|                          [ [bstr.h(t1)], [] ],    |
|                          [ [], [bstr.h(t2)] ],    |
|                          [ [], [bstr.h(t1)] ]     |
|                        ]                          |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|              (Access Token t2 expires)            |
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 86                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "diff_set" : [                          |
|                          [ [bstr.h(t2)], [] ],    |
|                          [ [bstr.h(t1)], [] ],    |
|                          [ [], [bstr.h(t2)] ]     |
|                        ]                          |
|         }                                         |
|                                                   |
]]></artwork>
        </figure>
      </section>
      <section anchor="sec-RS-example-3">
        <name>Full Query with Observation and Additional Diff Query</name>
        <t><xref target="fig-RS-AS-3"/> shows an interaction example considering a CoAP observation and a full query of the TRL.</t>
        <t>The example also considers one of the notifications from the Authorization Server to get lost in transmission, and thus not reaching the Resource Server.</t>
        <t>When this happens, and after a waiting time defined by the application has elapsed, the Resource Server sends a GET request with no Observe Option to the Authorization Server, to perform a diff query of the TRL. The Resource Server indicates N=8 as value of the query parameter 'diff', i.e., as the maximum number of diff entries to be specified in a response from the Authorization Server.</t>
        <t>In this example, the Authorization Server does not support the "Cursor" extension. Hence, the 'cursor' parameter is not included in the payload of the responses to a full query request. Also, the 'cursor' parameter and the 'more' parameter are not included in the payload of the responses to a diff query request.</t>
        <figure anchor="fig-RS-AS-3">
          <name>Interaction for Full Query with Observation and Diff Query</name>
          <artwork align="center"><![CDATA[
RS                                                 AS
|                                                   |
| Registration: POST                                |
+-------------------------------------------------->|
|                                                   |
|<--------------------------------------------------+
|                    2.01 CREATED                   |
|                     Payload: {                    |
|                        ...                        |
|                        "trl_path" : "revoke/trl", |
|                        "trl_hash" : "sha-256",    |
|                        "n_max" : 10               |
|                     }                             |
|                                                   |
| GET Observe: 0                                    |
|  coap://as.example.com/revoke/trl/                |
+-------------------------------------------------->|
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 42                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "full_set" : []                         |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|          (Access Tokens t1 and t2 issued          |
|          and successfully submitted to RS)        |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|            (Access Token t1 is revoked)           |
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 53                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "full_set" : [bstr.h(t1)]               |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|            (Access Token t2 is revoked)           |
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 64                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "full_set" : [bstr.h(t1), bstr.h(t2)]   |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|             (Access Token t1 expires)             |
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT Observe: 75                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "full_set" : [bstr.h(t2)]               |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|             (Access Token t2 expires)             |
|                                                   |
|    X<---------------------------------------------+
|        2.05 CONTENT Observe: 86                   |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "full_set" : []                         |
|         }                                         |
|                         .                         |
|                         .                         |
|                         .                         |
|                                                   |
|           (Enough time has passed since           |
|         the latest received notification)         |
|                                                   |
| GET                                               |
|  coap://as.example.com/revoke/trl?diff=8          |
+-------------------------------------------------->|
|                                                   |
|<--------------------------------------------------+
|        2.05 CONTENT                               |
|        Content-Format: "application/ace-trl+cbor" |
|         Payload: {                                |
|           "diff_set" : [                          |
|                          [ [bstr.h(t2)], [] ],    |
|                          [ [bstr.h(t1)], [] ],    |
|                          [ [], [bstr.h(t2)] ],    |
|                          [ [], [bstr.h(t1)] ]     |
|                        ]                          |
|         }                                         |
|                                                   |
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="trl-registry-parameters">
      <name>ACE Token Revocation List Parameters</name>
      <t>This specification defines a number of parameters that can be transported in the response from the TRL endpoint, when the response payload is a CBOR map. Note that such a response MUST use the Content-Format "application/ace-trl+cbor" defined in <xref target="iana-content-type"/> of this specification.</t>
      <t>The table below summarizes them, and specifies the CBOR value to use as abbreviation instead of the full descriptive name.</t>
      <figure anchor="fig-cbor-trl-params">
        <name>CBOR abbreviations for the ACE Token Revocation List parameters</name>
        <artwork align="center"><![CDATA[
+-------------------+------------+------------------------+
| Name              | CBOR Value | CBOR Type              |
+-------------------+------------+------------------------+
| full_set          |  0         | array                  |
+-------------------+------------+------------------------+
| diff_set          |  1         | array                  |
+-------------------+------------+------------------------+
| cursor            |  2         | unsigned integer /     |
|                   |            | simple value "null"    |
+-------------------+------------+------------------------+
| more              |  3         | simple value "false" / |
|                   |            | simple value "true"    |
+-------------------+------------+------------------------+
| error             | -1         | int                    |
+-------------------+------------+------------------------+
| error_description | -2         | tstr                   |
+-------------------+------------+------------------------+
]]></artwork>
      </figure>
    </section>
    <section anchor="error-types">
      <name>ACE Token Revocation List Error Identifiers</name>
      <t>This specification defines a number of values that the Authorization Server can include as error identifiers, in the 'error' field of an error response from the TRL endpoint. This applies to error responses whose payload is a CBOR map and whose Content-Format is "application/ace-trl+cbor".</t>
      <figure anchor="fig-ACE-TRL-Error">
        <name>ACE Token Revocation List Error Identifiers</name>
        <artwork align="center"><![CDATA[
+-------+---------------------------+
| Value | Description               |
+-------+---------------------------+
|   0   | Invalid parameter value   |
+-------+---------------------------+
|   1   | Invalid set of parameters |
+-------+---------------------------+
|   2   | Out of bound cursor value |
+-------+---------------------------+
]]></artwork>
      </figure>
    </section>
    <section anchor="sec-security-considerations">
      <name>Security Considerations</name>
      <t>Security considerations are inherited from the ACE framework for Authentication and Authorization <xref target="RFC9200"/>, from <xref target="RFC8392"/> as to the usage of CWTs, from <xref target="RFC7519"/> as to the usage of JWTs, from <xref target="RFC7641"/> as to the usage of CoAP Observe, and from <xref target="RFC6920"/> with regard to resource naming through hashes. The following considerations also apply.</t>
      <t>The Authorization Server MUST ensure that each registered device can access and retrieve only its pertaining portion of the TRL. To this end, the Authorization Server can perform the required filtering based on the authenticated identity of the registered device, i.e., a (non-public) identifier that the Authorization Server can securely relate to the registered device and the secure association that they use to communicate.</t>
      <t>Disclosing any information about revoked Access Tokens to entities other than the intended registered devices may result in privacy concerns. Therefore, the Authorization Server MUST ensure that, other than registered devices accessing their own pertaining portion of the TRL, only authorized and authenticated administrators can retrieve the full TRL. To this end, the Authorization Server may rely on an access control list or similar.</t>
      <t>If a registered device has many non-expired Access Tokens associated with itself that are revoked, the pertaining portion of the TRL could grow to a size bigger than what the registered device is prepared to handle upon reception, especially if relying on a full query of the TRL resource (see <xref target="ssec-trl-full-query"/>). This could be exploited by attackers to negatively affect the behavior of a registered device. Issuing Access Tokens with not too long expiration time could help reduce the size of a TRL, but an Authorization Server SHOULD take measures to limit this size.</t>
      <t>Most of the communication about revoked Access Tokens presented in this specification relies on CoAP Observe Notifications sent from the Authorization Server to a registered device. The suppression of those notifications by an external attacker that has access to the network would prevent registered devices from ever knowing that their pertaining Access Tokens have been revoked. In order to avoid this, a registered device SHOULD NOT rely solely on the CoAP Observe notifications. In particular, a registered device SHOULD also regularly poll the Authorization Server for the most current information about revoked Access Tokens, by sending GET requests to the TRL endpoint according to a related application policy.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document has the following actions for IANA.</t>
      <t>Note to RFC Editor: Please replace all occurrences of "[RFC-XXXX]" with
the RFC number of this specification and delete this paragraph.</t>
      <section anchor="iana-media-type">
        <name>Media Type Registrations</name>
        <t>IANA is asked to register the media type "application/ace-trl+cbor" for messages of the protocols defined in this document encoded in CBOR. This registration follows the procedures specified in <xref target="RFC6838"/>.</t>
        <t>Type name: application</t>
        <t>Subtype name: ace-trl+cbor</t>
        <t>Required parameters: N/A</t>
        <t>Optional parameters: N/A</t>
        <t>Encoding considerations: Must be encoded as CBOR map containing the protocol parameters defined in [RFC-XXXX].</t>
        <t>Security considerations: See <xref target="sec-security-considerations"/> of this document.</t>
        <t>Interoperability considerations: N/A</t>
        <t>Published specification: [RFC-XXXX]</t>
        <t>Applications that use this media type: The type is used by Authorization Servers, Clients and Resource Servers that support the notification of revoked Access Tokens, according to a Token Revocation List maintained by the Authorization Server as specified in [RFC-XXXX].</t>
        <t>Fragment identifier considerations: N/A</t>
        <t>Additional information: N/A</t>
        <t>Person &amp; email address to contact for further information: &lt;iesg@ietf.org&gt;</t>
        <t>Intended usage: COMMON</t>
        <t>Restrictions on usage: None</t>
        <t>Author: Marco Tiloca &lt;marco.tiloca@ri.se&gt;</t>
        <t>Change controller: IESG</t>
      </section>
      <section anchor="iana-content-type">
        <name>CoAP Content-Formats Registry</name>
        <t>IANA is asked to add the following entry to the "CoAP Content-Formats" registry within the "CoRE Parameters" registry group.</t>
        <t>Media Type: application/ace-trl+cbor</t>
        <t>Encoding: -</t>
        <t>ID: TBD</t>
        <t>Reference: [RFC-XXXX]</t>
      </section>
      <section anchor="iana-token-revocation-list">
        <name>ACE Token Revocation List Parameters Registry</name>
        <t>This specification establishes the "ACE Token Revocation List Parameters" IANA registry. The
registry has been created to use the "Expert Review" registration procedure <xref target="RFC8126"/>. Expert Review guidelines are provided in <xref target="review"/>. It should be noted that, in addition to the Expert Review, some portions of the registry require a specification, potentially a Standards Track RFC, to be supplied as well.</t>
        <t>The columns of this registry are:</t>
        <ul spacing="normal">
          <li>Name: This is a descriptive name that enables easier reference to the item. The name MUST be unique. It is not used in the encoding.</li>
          <li>CBOR Value: This is the value used as CBOR abbreviation of the item. These values MUST be unique. The value can be a positive integer or a negative integer. Different ranges of values use different registration policies <xref target="RFC8126"/>. Integer values from -256 to 255 are designated as Standards Action. Integer values from -65536 to -257 and from 256 to 65535 are designated as Specification Required. Integer values greater than 65535 are designated as Expert Review. Integer values less than -65536 are marked as Private Use.</li>
          <li>CBOR Type: This contains the CBOR type of the item, or a pointer to the registry that defines its type, when that depends on another item.</li>
          <li>Reference: This contains a pointer to the public specification for the item.</li>
        </ul>
        <t>This registry has been initially populated by the values in <xref target="trl-registry-parameters"/>. The "Reference" column for all of these entries refers to this document.</t>
      </section>
      <section anchor="iana-token-revocation-list-errors">
        <name>ACE Token Revocation List Errors</name>
        <t>This specification establishes the "ACE Token Revocation List Errors" IANA registry. The registry has been created to use the "Expert Review" registration procedure <xref target="RFC8126"/>. Expert Review guidelines are provided in <xref target="review"/>. It should be noted that, in addition to the Expert Review, some portions of the registry require a specification, potentially a Standards Track RFC, to be supplied as well.</t>
        <t>The columns of this registry are:</t>
        <ul spacing="normal">
          <li>Value: The value to be used to identify the error. The value MUST be unique. The value can be a positive integer or a negative integer. Integer values between 0 and 255 are designated as Standards Track Document required. Integer values from 256 to 65535 are designated as Specification Required. Integer values greater than 65535 are designated as Expert Review. Integer values less than -65536 are marked as private use.</li>
          <li>Description: This field contains a brief description of the error.</li>
          <li>Reference: This field contains a pointer to the public specification defining the error, if one exists.</li>
        </ul>
        <t>This registry has been initially populated by the values in <xref target="error-types"/>. The "Reference" column for all of these entries refers to this document.</t>
      </section>
      <section anchor="review">
        <name>Expert Review Instructions</name>
        <t>The IANA registries established in this document is defined as Expert Review. This section gives some general guidelines for what the experts should be looking for, but they are being designated as experts for a reason so they should be given substantial latitude.</t>
        <t>Expert reviewers should take into consideration the following points:</t>
        <ul spacing="normal">
          <li>Point squatting should be discouraged. Reviewers are encouraged to get sufficient information for registration requests to ensure that the usage is not going to duplicate one that is already registered and that the point is likely to be used in deployments. The zones tagged as private use are intended for testing purposes and closed environments. Code points in other ranges should not be assigned for testing.</li>
          <li>Specifications are required for the Standards Track range of point assignment. Specifications should exist for Specification Required ranges, but early assignment before a specification is available is considered to be permissible. Specifications are needed for the Expert Review range if they are expected to be used outside of closed environments in an interoperable way. When specifications are not provided, the description provided needs to have sufficient information to identify what the point is being used for.</li>
          <li>Experts should take into account the expected usage of fields when approving point assignment. The fact that there is a range for Standards Track documents does not mean that a Standards Track document cannot have points assigned outside of that range. The length of the encoded value should be weighed against how many code points of that length are left, the size of device it will be used on, and the number of code points left that encode to that size.</li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="I-D.ietf-core-conditional-attributes" target="https://www.ietf.org/archive/id/draft-ietf-core-conditional-attributes-04.txt">
          <front>
            <title>Conditional Attributes for Constrained RESTful Environments</title>
            <author fullname="Michael Koster" initials="M." surname="Koster">
              <organization>Dogtiger Labs</organization>
            </author>
            <author fullname="Alan Soloway" initials="A." surname="Soloway">
              <organization>Qualcomm Technologies</organization>
            </author>
            <author fullname="Bill Silverajan" initials="B." surname="Silverajan">
              <organization>Tampere University</organization>
            </author>
            <date day="10" month="May" year="2022"/>
            <abstract>
              <t>   This specification defines Conditional Notification and Control
   Attributes that work with CoAP Observe (RFC7641).

Editor note

   The git repository for the draft is found at https://github.com/core-
   wg/conditional-attributes/

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-conditional-attributes-04"/>
        </reference>
        <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">
              <organization/>
            </author>
            <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="RFC6749" target="https://www.rfc-editor.org/info/rfc6749">
          <front>
            <title>The OAuth 2.0 Authorization Framework</title>
            <author fullname="D. Hardt" initials="D." role="editor" surname="Hardt">
              <organization/>
            </author>
            <date month="October" year="2012"/>
            <abstract>
              <t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf.  This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6749"/>
          <seriesInfo name="DOI" value="10.17487/RFC6749"/>
        </reference>
        <reference anchor="RFC6838" target="https://www.rfc-editor.org/info/rfc6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed">
              <organization/>
            </author>
            <author fullname="J. Klensin" initials="J." surname="Klensin">
              <organization/>
            </author>
            <author fullname="T. Hansen" initials="T." surname="Hansen">
              <organization/>
            </author>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols.  This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="RFC6920" target="https://www.rfc-editor.org/info/rfc6920">
          <front>
            <title>Naming Things with Hashes</title>
            <author fullname="S. Farrell" initials="S." surname="Farrell">
              <organization/>
            </author>
            <author fullname="D. Kutscher" initials="D." surname="Kutscher">
              <organization/>
            </author>
            <author fullname="C. Dannewitz" initials="C." surname="Dannewitz">
              <organization/>
            </author>
            <author fullname="B. Ohlman" initials="B." surname="Ohlman">
              <organization/>
            </author>
            <author fullname="A. Keranen" initials="A." surname="Keranen">
              <organization/>
            </author>
            <author fullname="P. Hallam-Baker" initials="P." surname="Hallam-Baker">
              <organization/>
            </author>
            <date month="April" year="2013"/>
            <abstract>
              <t>This document defines a set of ways to identify a thing (a digital object in this case) using the output from a hash function.  It specifies a new URI scheme for this purpose, a way to map these to HTTP URLs, and binary and human-speakable formats for these names. The various formats are designed to support, but not require, a strong link to the referenced object, such that the referenced object may be authenticated to the same degree as the reference to it.  The reason for this work is to standardise current uses of hash outputs in URLs and to support new information-centric applications and other uses of hash outputs in protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6920"/>
          <seriesInfo name="DOI" value="10.17487/RFC6920"/>
        </reference>
        <reference anchor="RFC7252" target="https://www.rfc-editor.org/info/rfc7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby">
              <organization/>
            </author>
            <author fullname="K. Hartke" initials="K." surname="Hartke">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks.  The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s.  The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types.  CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC7641" target="https://www.rfc-editor.org/info/rfc7641">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author fullname="K. Hartke" initials="K." surname="Hartke">
              <organization/>
            </author>
            <date month="September" year="2015"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks.  The state of a resource on a CoAP server can change over time.  This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time.  The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7641"/>
          <seriesInfo name="DOI" value="10.17487/RFC7641"/>
        </reference>
        <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">
              <organization/>
            </author>
            <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>
        <reference anchor="RFC7519" target="https://www.rfc-editor.org/info/rfc7519">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones">
              <organization/>
            </author>
            <author fullname="J. Bradley" initials="J." surname="Bradley">
              <organization/>
            </author>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura">
              <organization/>
            </author>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties.  The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7519"/>
          <seriesInfo name="DOI" value="10.17487/RFC7519"/>
        </reference>
        <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">
              <organization/>
            </author>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <author fullname="T. Narten" initials="T." surname="Narten">
              <organization/>
            </author>
            <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>
        <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">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8392" target="https://www.rfc-editor.org/info/rfc8392">
          <front>
            <title>CBOR Web Token (CWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones">
              <organization/>
            </author>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem">
              <organization/>
            </author>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
              <organization/>
            </author>
            <date month="May" year="2018"/>
            <abstract>
              <t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties.  The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection.  A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value.  CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8392"/>
          <seriesInfo name="DOI" value="10.17487/RFC8392"/>
        </reference>
        <reference anchor="RFC8610" target="https://www.rfc-editor.org/info/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">
              <organization/>
            </author>
            <author fullname="C. Vigano" initials="C." surname="Vigano">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <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="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">
              <organization/>
            </author>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman">
              <organization/>
            </author>
            <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>
        <reference anchor="RFC9200" target="https://www.rfc-editor.org/info/rfc9200">
          <front>
            <title>Authentication and Authorization for Constrained Environments Using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="L. Seitz" initials="L." surname="Seitz">
              <organization/>
            </author>
            <author fullname="G. Selander" initials="G." surname="Selander">
              <organization/>
            </author>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem">
              <organization/>
            </author>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
              <organization/>
            </author>
            <date month="August" year="2022"/>
            <abstract>
              <t>This specification defines a framework for authentication and authorization in Internet of Things (IoT) environments called ACE-OAuth. The framework is based on a set of building blocks including OAuth 2.0 and the Constrained Application Protocol (CoAP), thus transforming a well-known and widely used authorization solution into a form suitable for IoT devices.  Existing specifications are used where possible, but extensions are added and profiles are defined to better serve the IoT use cases.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9200"/>
          <seriesInfo name="DOI" value="10.17487/RFC9200"/>
        </reference>
        <reference anchor="Named.Information.Hash.Algorithm" target="https://www.iana.org/assignments/named-information/named-information.xhtml">
          <front>
            <title>Named Information Hash Algorithm</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC7009" target="https://www.rfc-editor.org/info/rfc7009">
          <front>
            <title>OAuth 2.0 Token Revocation</title>
            <author fullname="T. Lodderstedt" initials="T." role="editor" surname="Lodderstedt">
              <organization/>
            </author>
            <author fullname="S. Dronia" initials="S." surname="Dronia">
              <organization/>
            </author>
            <author fullname="M. Scurtescu" initials="M." surname="Scurtescu">
              <organization/>
            </author>
            <date month="August" year="2013"/>
            <abstract>
              <t>This document proposes an additional endpoint for OAuth authorization servers, which allows clients to notify the authorization server that a previously obtained refresh or access token is no longer needed. This allows the authorization server to clean up security credentials.  A revocation request will invalidate the actual token and, if applicable, other tokens based on the same authorization grant.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7009"/>
          <seriesInfo name="DOI" value="10.17487/RFC7009"/>
        </reference>
        <reference anchor="I-D.bormann-t2trg-stp" target="https://www.ietf.org/archive/id/draft-bormann-t2trg-stp-03.txt">
          <front>
            <title>The Series Transfer Pattern (STP)</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Klaus Hartke" initials="K." surname="Hartke">
              <organization>Ericsson</organization>
            </author>
            <date day="7" month="April" year="2020"/>
            <abstract>
              <t>   Many applications make use of Series of data items, i.e., an array of
   data items where new items can be added over time.  Where such Series
   are to be made available using REST protocols such as CoAP or HTTP,
   the Series has to be mapped into a structure of one or more resources
   and a protocol for a client to obtain the Series and to learn about
   new items.

   Various protocols have been standardized that make Series-shaped data
   available, with rather different properties and objectives.  The
   present document is an attempt to extract a common underlying pattern
   and to define media types and an access scheme that can be used right
   away for further protocols that provide Series-shaped data.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-t2trg-stp-03"/>
        </reference>
      </references>
    </references>
    <section anchor="sec-series-pattern">
      <name>On using the Series Transfer Pattern</name>
      <t>Performing a diff query of the TRL as specified in <xref target="ssec-trl-diff-query"/> is in fact a usage example of the Series Transfer Pattern defined in <xref target="I-D.bormann-t2trg-stp"/>.</t>
      <t>That is, a diff query enables the transfer of a series of TRL updates, with the Authorization Server specifying U &lt;= N_MAX diff entries as the U most recent updates to the portion of the TRL pertaining to a requester, i.e., a registered device or an administrator.</t>
      <t>When responding to a diff query request from a requester (see <xref target="ssec-trl-diff-query"/>), 'diff_set' is a subset of the update collection associated with the requester, where each 'diff_entry' record is a series item from that update collection. Note that 'diff_set' specifies the whole current update collection when the value of U is equal to SIZE, i.e., the current number of series items in the update collection.</t>
      <t>The value N of the query parameter 'diff' in the GET request allows the requester and the Authorization Server to trade the amount of provided information with the latency of the information transfer.</t>
      <t>Since the update collection associated with each requester includes up to N_MAX series item, the Authorization Server deletes the oldest series item when a new one is generated and added to the end of the update collection, due to a new TRL update pertaining to that requester (see <xref target="sec-trl-endpoint-supporting-diff-queries"/>). This addresses the question "When can the server decide to no longer retain older items?" raised in <xref section="3.2" sectionFormat="of" target="I-D.bormann-t2trg-stp"/>.</t>
      <t>Furthermore, performing a diff query of the TRL together with the "Cursor" extension as specified in <xref target="sec-using-cursor"/> in fact relies on the "Cursor" pattern of the Series Transfer Pattern (see <xref section="3.3" sectionFormat="of" target="I-D.bormann-t2trg-stp"/>).</t>
    </section>
    <section anchor="sec-document-updates">
      <name>Document Updates</name>
      <t>RFC EDITOR: Please remove this section.</t>
      <section anchor="sec-02-03">
        <name>Version -02 to -03</name>
        <ul spacing="normal">
          <li>Definition of MAX_INDEX for the "Cursor" extension.</li>
          <li>Handling wrap-around of 'index' when using the "Cursor" extension.</li>
          <li>Error handling for the case where 'cursor' &gt; MAX_INDEX.</li>
          <li>Improved error handling in case 'index' is out-of-bound.</li>
          <li>Clarified parameter semantics, message content and examples.</li>
          <li>Editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-01-02">
        <name>Version -01 to -02</name>
        <ul spacing="normal">
          <li>Earlier mentioning of error cases.</li>
          <li>Clearer distinction between maintaining the history of TRL updates and preparing the response to a diff query.</li>
          <li>Defined the use of "cursor" in the document body, as an extension of diff queries.</li>
          <li>Both success and error responses have a CBOR map as payload.</li>
          <li>Corner cases of message processing explained more explcitly.</li>
          <li>Clarifications and editorial improvements.</li>
        </ul>
      </section>
      <section anchor="sec-00-01">
        <name>Version -00 to -01</name>
        <ul spacing="normal">
          <li>Added actions to perform upon receiving responses from the TRL endpoint.</li>
          <li>Fixed off-by-one error when using the "Cursor" pattern.</li>
          <li>Improved error handling, with registered error codes.</li>
          <li>Section restructuring (full- and diff-query as self-standing sections).</li>
          <li>Renamed identifiers and CBOR parameters.</li>
          <li>Clarifications and editorial improvements.</li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowldegment">
      <name>Acknowledgments</name>
      <t>The authors sincerely thank <contact fullname="Christian Amsüss"/>, <contact fullname="Carsten Bormann"/>, <contact fullname="Benjamin Kaduk"/>, <contact fullname="David Navarro"/>, <contact fullname="Marco Rasori"/>, <contact fullname="Michael Richardson"/>, <contact fullname="Jim Schaad"/>, <contact fullname="Göran Selander"/> and <contact fullname="Travis Spencer"/> for their comments and feedback.</t>
      <t>The work on this document has been partly supported by VINNOVA and the Celtic-Next project CRITISEC; and by the H2020 project SIFIS-Home (Grant agreement 952652).</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1963rb1rXgfz4Fhv7mWEpIWhfbcdTmnCqy3Ki1ZdeSm/Q0
/fyBxKaEmARYAJSsOp5nmaeYX/NrzovNuu0bsAFSstw4PdbXOhIJ7Mva677W
Xms4HPYu9qLdXq9Kq5nai47zKp2mk7hK8yzKp9FLdZG/UUm0P5mosoxO4Y+s
jNIsqs5VtL+Ef7NKPx5nCX2UF+k/+JNpXkQHeVZWRZxmMMphdpEWeTaHl8po
Y//gcDN6UsRzdZkXb3rxeFyoi/Yl2LnhxV6STzJ4cy9KinhaDVNVTYfxRA0L
fnpY4dPDzBlrOIsrVVa9Xu9OVFaw2NfxLM9ghKpYql4vXRT0a1ntbG19vbXT
iwsV70VHWaWKTFW9y7M9nDj6HtaaZmfR74t8uei9ubSPDB/jUnow2x5MkPTK
5XieliVMXV0tYJ6jw9Mnvd4kT+D1vWgJC37UW6R7EfzciSZxFi1LFcVFEV9F
G+k0imez6EqVmxEA8Twuz6NzVcA6o6jKJ3v4Dfxa5kVVqGm5R2MkahovZwDa
KtffX835a/yzF9Ph7PUi+hnKfyMAKTzxbBSdprN8EpuPGb7P4mKS17/KC9jB
y6OTw2j/W/MhHLNSsPejMp7+lBdJeRYDmKOdHfPEJK2u9qI/pgB++1mewCwn
h8Pth/fvbzkfL7OqgKdPLlWiMvO5msfpbC+a46pGFa3qd0U6KlV4V09H0YlK
q3/UNvV0mVymZ7WvaFMH+XycVmpy3tjW459i9SZTvKnd7dqmnsWzea6au9rZ
3t59sO6uZrQs2Aws63cTvZIR/Bbe3ZNR9AKQGJ7L0toOga4yINlJHHiCNnpY
pJOyBBILnOBpXpTn8TzTJ7j7EU5wqhc4WugF/k7Jmtp3fDKKDifn6kIVRVrH
1BM1jssqhQUHHuHDffYK1nnU2O/9B1tb0ZN0Wp1H+xcqW6rafl+kVVWOl8XZ
+SB6sV/b+PaDne3d4c7D7Z3m1l9lcIJJdFIh60Fmtj/HPcZ1YJTKrPh3cPqj
yXw5UskyDIPfj6Kn6jIta9v/fQH8r/bNp73rsxku1ttwL8uLObDrC4Vs6mj4
eEScfZIXCv7JkhQ5eTwbxlVVpOMljI/PvXxyAHT2tfz68Kv75tdHu4/0r1/v
bMmvX+082NG/Pry/Lb8+2nmgX/vqgRns0fbOQ/PrV/f1r7tf6xEePdzW4z76
2kwMk9Gnx3A0yegom/K2ALW/A1Y+2p+dgZSszufMjH3GTId2tH/MIE8AiEAt
8UxYnBbUOHDkDBzhwJEZmJ+NizM86fOqWpR79+5dXl6OgD7iEUxxLwbRdMay
+B5iUDJM7WjNT0Zvz6v5DOSk/oiPCKEF8lKf1hi/y7JhtVMVZ8OyWuz1eqgi
AD7BEyeHT5/sRf2/wkvDH+Dnb/1ebzgcRvEYVYQJyObT87SMQLYvcV1RuVAT
kN+ARHE0VwCjBLHpRqpHSPeYat1jEF2ep5NzFLn5JUyW1QY7UQUQJ4pVUiiu
ooNZSuPgvC9VmS8LID1+CgZPR2o0iAp1BmwSZHYCgvkinaAoj8f5soqKkFIF
4hf2JbuUhXROA6uJeYCYhyBNSQDyFKaOcqum1fcCOwYsoa8XOSDCeAaqR6LJ
izQRgHSh58zHJbxmIYvvudDdXyxm+ixeFDloKPks2jjI919sjnDloJWgzrSx
zMocHkT2sBm5ylnJ04WUTZAFi5kifIhnqGkR7kXxYlHkMbDNMiqXeHYIEYRC
CkwoR8zBcelkYW8wFwz/92Va4DqcnaosWeQpAhmW3gXvEaPqPE2SmUId8gjn
SZY0DShf7+7QxO97vdtQi9+9Eyby/n2U4gkbXAXYxxUsGwaZIGEwrIA3wuQz
3MRRfqoRDr4luANsGtuB9QOnSRit8bxh3kE0zgErOtHuPAbgwysavRmR2kgG
hxgrOEI4sCZFjKLnoAM4nw/gKZ6dFOISTofe+/sSNHectR2f4ct8XAFAaS0O
BhG44/pGRtET+lhms8SEM9SeHTC+85NzsBCiBVAGvQafg4q/rCFtFFfhcZjN
IHpEF/EsTUhAphWACBapQDLnhJ/wyUapFGDBCaNx9GC0vTXaHm2TQaQxYxNw
8hAkNwyYL8/Oa3RDB6XeLtKCAVWlc1XSVgo0MxRI+QL4LJpCiCrjK80Ea+Cb
gz2SKdghwGisDJHKklPAk9okA02Qe9HG9mbo3NGegQFgcCTuIgczCc8eDiRF
aibiVcTrxwrh4Tz1m2hjJzwmCg7ENLG56NHdTdmvmTCOJudxdqaMDQsmHYw9
RSbBiNIYGca53zmOYM6CWBuAsnUcpIaNByvXBDKCKAb2T2NeRQqwZWmZR2j7
G2p0BlInNe+AfIdVEd9M1AIoiVhccgWSPZ1ERpky1rx6qyZLmkJZfsSoD+yh
IBaj3lZ0TPihEQ7w0kyoETFyH84hLSdLmD7BsS0SP6zhLwyVza6iCREW6Bqw
nhjPvbByDA51siwK+B4e1OpAwuwR9Q5gjwiQ58gTop3RFn+DGiAOD/YAohHv
D+CxnC8YS5GFNlwaPAhShpA0czZYzoxEDq4AGE8VzdKpQkQfRd/ll0oYBKwU
/odyBsiB8ZcJBueewEJooRPL9gcoqVQxBy2btwffZfyisO8BL5SIz18trcxZ
1ywHKtHLQlG1Uo8iNEItA+mrqaq42gUgregIAIDluJyA5k0ioE3v2Dh9+XTT
UR661JDUkUKWfy8XCWHCjNQYoxnAiYL6dKUqDeeUZMZCFfgi7qSmUoGMW8QF
iOLlLC5CKhmLGXdTuFRYv2bhQakGvHJZMuACChIjJxgWgpzXUJbkXbBP3r+H
U3yVzdI3hi0QEqH+21RzmuLia19SDII8I8kVoyxwwIs0UQj6/DKrS7MOuUsb
TDOjWJF+izJBqBY9bZXCg4CZ4yR4BGUKCt7VrZ/+ANUeNZ0iTyb6gg1mFfOP
MVIbLLBcIBuEN8nBhkxWqEcB5WZqijshiwOoSavmhWKyBCFtVdMW5RNpB54z
cGYVFOF81aqEMm+tQ4nNA+KXzosyHq8AjyIAXlyw0aHu8Z5LxcwnZnQxtkCb
2bOSFWiqETws1WSYw7sXqbpk7IM38ZlZenZeXSr8l6C3rIyf1zkCrZLGGgPN
0aF5ZacQJy9oxqwM3bkTnSJHzfJZfnYV3UGtvLIfvOeTfaNA1UH/ZNR/9urk
tD/g/0bHz+n3l4d/enX08vAx/n7y3f7Tp+aXnjxx8t3zV08f29/smwfPnz07
PH7ML8OnkfdRr/9s/y99Bkb/+YvTo+fH+0/7TN4uuyYUI9lBhwTKJlJDXPYS
xRAnufrtwYv/97+37wMo/of4P4Df8B/oqYA/LkHP5NkIb/hPOIWrHhhPKi5I
d5nNgLEs0iqeMcWAiLvMyNcMAO29BKJFoOOSanJtCnrELI0Liz0IakYSEGUT
tahQI3NWrPUta8sgyq40lxxbiFZ4qWDNsQjBwJwkF3mZB98+fxl9r8Zabm4c
fH9aCpdFHw6NCO/+4eT5sffcH+xz6AwCbkz05yATrZ1cGyhXNYsG0gJcRfKL
i8k5um+rZSG66ZS4v1E0atpKQ1ixSpFNZksAolgfg6ZJ0YSXGDj+4cHx5jc6
wTo0GXZfs4JFcONPdh7QJyzs9l+gSGHJ5oi0AX/1nISlcgWl5RDieiBuMF1m
E9ZR0fUSo0o8/gl2UOLxOwBlMAKKkNQ8zitm0YNomc2Qb+WocF+mxPUSRDSU
G3q/UV+z3z6e0xJVRtLPp7nWj1AM8KHRpKkw9xRdcDGq1+jKcNQB65K4x2IB
N3fPyoYu5YIhcQ9dgv8g/1uLMYkI6TINI2MQgOYU7HoRqHan2hSFEfr7GePx
laBfuohpN4LT3mmO+qJbikqpiRaxq1BT8UvhaxZ6DtHA6XwhLB0PeM9h7Li+
mulJ2uE4zeKCqG1Ofg+Onwk5mpHImMpy0Ylz0lno1K28ooOt6uJkYL1HMGAf
0K1PXCI6erwJlgmcMS5sNR9xdhZUh/fQygOQiIJm1DhcvMYXUiuYjbi6ScCs
J7PRWOJLFhmOVoRaEq8IZLLGyj1SA9ZRysXwITW4JOwvlLg82Besh9b4tIdH
p//oVJ3BCssnbOYZruMukg9WIplC81PzlJkCJVe0LGZDwFXC4rv3GBz3qmJ2
F3ipVszEu6jhIwpTojUMYrI4C5MdWgPMV3DKtEBtGIMuqLvSpl/W9SsEqmjT
ju7VSd/sHo5L430ik7rhoaJP0R83ivYDunssbBDQCmQ4008dTLTk/QSoL0Xr
o8qLPU3qsSyNQXEGSvV0iWJVnGBr2UEMM+tj7FxKBGwmdpeizWWweWHKuEhR
tQ1t1LJ6MC8ulAGg9siJatsklRBUSUQv5wFbEWx59hN4i4y9fcOSYaZ4DJbJ
Oa4Htg9jsk0B36HxI3svJ/lCGdvB45Z0Ki/CVsseBvijYfQ9G/jAUBV6SFEF
r4Fv0HDUidcCbJu2Axu1j94EfGAC0EazxKgPbCnSdCQE2aO7X3tJzDP2KOgj
S6ftHAI5uWyFnvH8qmiAsK1KhhXhKUzOw66avI4KN10Fb58RyYFAXUD3eodv
Y+RDKFsK9NAifjRVfeDZwP3EW0aSJknjsywHlJ4ghcTGRuP34cDiM8Y9tJYi
TpxJmdOhFWS9Cs/FBqP4hGeUiRg3WhqTGIgXoIKYZP6QvWdB6HAQsDtApem0
aZIOxE/gWO4tITFNk1qsl+fpAmAPFiS5TQPMQrTI8Kp96r0Owe7DUUXnYLZG
M3WhZqw9wtQL6x8woCR1uxQFqCRqfwWyHF0hRbVcDNoXOCkURQTiCL1Ls7pk
xEVkoKVpCcjO9roEtbK6FJObvSho6YUjbKsZByN4m5Lx/TmdRk0MliukYKW1
xolKLxSv1Uh0RwCZ/RPz2p9WSvufz5gX4qgA/IlKxNRClRdPeBD2pTihpUxs
ER7kpR9n8oAa12xZz3bRAun3h6cmWMWWG+m/WonWds9z9kKXiqbaijb0EjdH
0bdXwBzwrTJvW76aTlGLZIe0dsKUoVWTlkE+BFgR820Bdy34av127HsbMcby
w3oPsrMO/I2TpGxZtKxOIyP7SxFJHF2hdtKM7RbJuw7SA70DCat+EJJa0KYc
YdSvTFE1ItVb/JZ6oat4lHFHkT8K0BfVqCEMWly9f7/5Gx0smQM3J3DC0Lgu
BjPsfkITJlF+IWh944mTdDo1E5M3QaVkAaHfuA2CGNwTMkQXbNZGEujs0LhG
+NBCIibwQ6qawx0auor16q5GJ98ecqw+uwzgjjM818tzkQxNkEXAubNqCXzw
SlhY2TF5oea5Zkut80+LfG5WQFhbB3tM/IqOW9MRPNsxb0mROs0qjn0yLREt
XN6D5hL6osuBPTn/LQqpSohbxZPzABIYJpKEzzWjz03sOqxi8fYfU6QRdyoG
phakehJmfa4YFt2II58O6nnsxmVXWgMsPYJtCRqEM5cXeWHMcNmuQ29aq9SR
1S4KJysNhNC5uh6hxx/AYnxKJ7g/WRa0hDDeIJWDxlqSrUk+ylJijmSD59lZ
XkuLcQ6ijUV/0bTokKM6oYJghIAiWkFzgzN1wBQ1lEImqT5Y3wXhLArW8u7d
ND0bag3MCT2QO7sU3W1IulukvzWaH/4J52wMC1KEHI2u4ZoF4cHj4uthkBPJ
dWpUOcC9YW1mGJldhuI4AwBEnrmxcVl+IP8EFrYNdLPDpLurk70cvnmO35/L
A+e7qKVz1Aq1ilF0iIwiySsmqEw13DYxwCMtmM4aESftZC0DppO4uK440whM
SDi9/2V/TIqo+/PlMPjzZfDhn8Pg/nnlyPmqka2DCWdBzNuL3iEkAZDw/933
wbe8tfUCe/lyzT96OGljs+v9ge86K5Un5BPzh31XPyN/0Eu96KIx/8Waf/Tq
2/7SBcS6f/R+9p1ZsLaftUdhm/4wNqjzzU7tm14djD+7wMI/BGW2W7+BIW9p
Rw2I4s+e+cf7pfa7PLZiiGo7OES1u+YQI/nxhhg5PyuHqP1UO8FHW4cYrf+z
57OSd3vRnaBY4Bzqb/oNN0kfTNwKA5PDeJaeZd/0UYyrov8eJQxK35cnQyU+
HZAtRg/Rn2mWbFwB0xm6U4DHztHFeYa+Hkn10k6MduVXUh/rKZPo32FeSgnf
2rHjhMI5yu1w+2ZkhfKqKPxOgWXHV7HNDvjgkrSP6PD44Pnjw8c/vj59/sfD
44EOnlCCWGYcKndZE/jxNa3kLgpQWF1F3qMutVvyExoZLY9GO/WclkuK0zWE
zGVsAqeJ7zIUPcTxGIvnkJSoyEQOr7mfUnR+9t5GoBmxH298VaGXCFNjBsbb
WF8p8LKsRIUU1sdZRfjuKOCkrShLj1CNXRCI3XE51DAbTsZ5oWOplO6mFSle
w90ymqnsDAMmGa2tFFfm9vbXOmt96+1XX+HX5zBRAqr7PJ5tkgqe1Y49quI3
IuF5qB/fbb198IgH2HqbbME/j3bhn/v34Z94OwIC/dH4SugU4ss6jC1Ma9Dm
A0LAYg7iDWCKkeobwfSnMs8QpsHd93f+klfZk/98cvhTsf2PgzKdPPt+sb/f
/4Bt7qxBgN/tn3z34+uj4xevTn3qJRgdSbwSASFBTwuQJrw2OBL1/SlaMn/4
/hSO2x3fHnOJwTh2OcM+fHg4c1NOwK3PrYo01lmmbdNHTfPbHa2gewjGBpTA
ctisWJv2jQegk5vB+nY7zvVMZaoQz69Ng8LJayfN1r/JpxV+KJkPNH5hLlvk
y2qxrJohdJ3jIFzbyolRjf/RU7Xw+3ysxCfjR+7N817exkDDepoWZcXs0ABY
pI8zPx3iqeM0IFdNc9iI0rUoBDMDIxrv9sK28U5iRpdecJ4hs4iSmaF+oVQz
ToAxx9ZfdZGqLzFfAMK7d6uuc1EegGwi7N0xmbhhiLk3KxyLKlkWwspTbRs2
HN9OXpz7BLsIXL1oZ7S1HR1QqCHpHTCiD5/QjvbwWo1OTr0XT9SXKFJ6z+K3
w/0ztRc9evBoa6v3Ir6a5XGy13uHe+0zbTBp9EHnO7+bbD3avX+feT4R5kaB
V/6yxCKLxwZySoLmpGSKZVVXm/ju3QFNQCO/xkvUOPwiX/DH4sN7ndKsjx7e
39riLySfHz+d5PHidVLNSvqmuQyjboSW0Hsf1CfrElerkxLtowuPnaqNlfIN
hXOmphWqm+68352evriHdz9A7Yme/9Ec2SndKncPDGVV7wAvRQ0P+ELQXpTl
Q7xWonovivhsHtMHE3xk1TG2yLYPPdN+6Ez7cKj99U+1b461/5HOFSF5w3NF
+dd6rneINaAfzBikRoMvZkPtXoMnbyNkOOB8KWb2MWsFVGAAY9Po4lFysU6g
xsUHUvOsp7+S34cFky83AvaFZCsXzol46U46tcwsCCdNiwLWcxGjk1LHcZ0n
NA+vmHPxljCGBoNZ37SZU+nEbMkMw8uuJFPwDpeK0d0qmd4IMUq1xPsnM0qJ
wczx+aK6cvU4+b6uGoRDr7EnpzA5CofzT+DOnegV+TbdoSxaEF5oxGAnqJh2
QUTQjmY9kJa8Ng3vMielqHRjthnITh3O7QzQ+MfdoHbEmcSxsDqg4oYsGmjm
pKLaCSUHjXGvPpODIVqt6Zrc2Xs4RuQGhlZvmqNEiRcIWmPjZuHX3Xpjvmtv
33KgQ51M53IgHTAFVDswgQJemnuR60HtIhelkefz+TIzHnCbptGeFdadr6HJ
B5hYcbWgpF0n/Rvj2mcF5bJlFB2YAQzQ80Ia3kiHROYg+waGR5crFHZBKlmx
XsA4X2aJ/93dUnsRAKZPDJE1Lqu6u+VzF1eQl8DsJwUZDbwjQBiXrtyhC0aO
HgfS3Nfj8GxJl+sTawYtcsHSn/Il6J3KExPzeFHjwnI1Q99oMiaQ42tBeCtM
zSyUn57Nso3V6KF9k9TlVo5G0E/N5W9g2iXoueSzAJy+oPSpRrqiwazxlc3O
zyU8RwH/5gUZ9JbYdEgvIlM6MsIMXS4XaM6WfK0CZ8bsA74fJM4Xvr+PLBdV
HHIMUsDOD1t9AUgKyEzf7HVZkdWyyOrmmnU3ttybN/cmRRRQNid6w2qRTuMP
0wmC3Sciu2ecxd2ZzbHUJ4ukJFUIFQMO4vHmNT7pOwUGg8W8bOBNMOZKgHuc
TqdrAy42sVYMnSJeFCleqeIwl/7oihmsue6A4TmBsBvVFUE7uEYsOQhhnrIe
WJNJKR9ci3TUOCiL0e7DRYOBzR7fi9JNMa/djIUwgsgqG0vke8opj3QF/LZQ
VuTmRVjmxcK2JH9oBR7t/6UTjY4yycp3cleCA6HWLwme8AiMBCRLNGa0obZU
LhfJaqJvKEsDyNlQe4oe/zCCJwYVPwDB3Zg+QO9oSkFmzWjMFGlnzgrC1Qbx
KT2MgYw6RP9gWZQgAEDFAUlRplIcY8J3J5BV6SuPIDvRX9NldWCg/yJPEwxo
ICwoGW2cnkW474xuwVMmTonXo0FpdunOlJAgZT7Oyqkq6CYnsOxEzVLMqKYE
EkS7n2IiOkwlUOZmAeeEAQBxWEXpH84hGFmPtb/wnvvAimVZOzAGWAmswltX
nRbd/A2+T4RSB53OmAVZ5wuwXjgbk+fBiT+xM4i9fMTSW3uhdap+7czJOxU4
s3bFAM380s3icMr38HFoetFxgfUoZnAtkpnQkpFYOCOrapCMIxHkWFgIe2fI
n3saXwdlDYi0ppIFQ9ASs7exbrLS7SrJDjsxy2fB8icmtaBm3Moe6ATbTydM
yyk5ZGOsv6Nd5VPCm5DEGmijlxYHXzoY6lgXdNSoEF+JBPJ4FLB9hBnnuTiE
0YVZntcyIAw11qyXV+UKw1PPRnWz0FtXM16ms4QxxvJ/m9UkSN2EEN/YDKfA
kdLmX69AXZaJmEhVLg3FpV1+Saq/GXM1HO1yzS332qWwefw2nS/n0fGPr5/t
/6BPOq3UvNThTvmKvDSgBw8FwTmxi1zgi7xMqUYSmUh8VbBLo3uj1AJRb/JG
H5zMcb2TprN1b1z4cOlYhVyj1lUILICtTWwiIrw0yYYKOMQ73eCnEkrSMNU6
XPMsTMQACG+CSjQ5lpiPYL2WIqcbjRijiKaghtUcG62Z+jpdkSMizlrwQMmB
BWJvBqaOBjxf+Lf+juZSKdWuSim9v+ISEx2JZzrPzl3MLG5fi4MDK5ci+pHJ
lNM1E3QkEPCBpK6ulpJ6t/SGOuyjvZMINYNdnDfRpf0IYytrfq98oQpxSUwb
xLoi40Hf5y5vxN2iI+dBeVcuvcWUw+/kGlo+1S3hF2VdoLJBXmOrO6PoeSWX
ntfwHqP2B/oVKIkg6V4v4mpy3m+aGewLRaSI+mIE9MkDyyUGQF0h9KDPBswp
jTFV2+SKgOgUsFnsXb2ygHfMtYDZJGE2ntRNHT+9cUCWyz1H0dGH417fr+h6
T7QNK73fhSHG/56pS5eGzA1rfYPf2w3ZTjTBLkzwwKBKgLoDF2YdZdYx8mWe
oOjo9rGB1q0qJrV8lqg6M2jhkdrISyW7WVR+fDZbzsfs8XPlb4dZzLdvbaUn
VGU7r9FS0s3fl8B9YSjeMqznYcdJmdsE7t7amWoX2E3KU03/J2XS0yY9Jf5Q
K/Er9UrRTte0CYgFrGkiGiZJtz58TsnVYMoun5xW0NjHwPoGllnA6AoJR1I4
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
ft0QDte0dkuLIrQagZBvBIdqbXW+/VHM466Lg4bFtnt2tNf4V+LaIdbQ4trR
keMuz45+XxtAOcoaw0Gafp7680E/j3fyDvOywoU6FXHzIoOYzm0vkC3UrdwN
hA0sVpA12lhKusLB8z0HOOrvBZDVXbK5k86FralU7BSlVCCAFbgxllL3EBAP
qnZ/nbC6RjHMpL3pu2DPAjkouYQVrF8hooHwwiKDi6lN3JB4bSvBUgW8lIYQ
bPVoaR/CXawp92m7uhzP1SnlisvNBFSePsh7FfQPed6rD3BesbUQqub2Kbqr
VOlVwft0HVateBvyZOEiPtCT1caYP9yTFRAxIU8WnHzAmYWf6uoGTVcWfGv5
C34tasKefWnAKo/ziX2t5iSzQ7U4yeisO5xkNRiu4ySTk7stJ5nj8eisacl2
LFq4u01DzRz9R3CmrfCTtWK9bmP6a/KgaXRwPGh/1Q1z/rqGM+1vA//pSTLd
nsTu02N1fzt+KE/zw/ql2kz37yfJ9o777s7u9hQOvj5T6zCN1cRfP3o4dUec
qu14Z+yvZqVD0KWpVQ7B9bC7g+xQFPHdQ+xYC3iVAe3p/pdcwcqTcuF0Tbon
EU3jCSboL6VFkFk5PnXC4uBUVwZ7wZP5YhpvLY0RpbJsWO1UxdmwrBZc3Awr
Sou5oAvPUnrmq2Z0yKlPoS+HecXSGuUori0x26rszBd5qTgpwXWIBvz0bqUL
++nKzOxg0O0aecWo43gt8vheHJzVpNLFHevWVO22ol7rWDVTYkObGugXWURP
DEa0ZnUJHwsNxRV62E6QjISyiqulyei4fmbSIeb0ACvMkhltSE4eTrJMsZyd
7URC2T8GLqVukN1dUbBxE1FK9b10MMTx6jfRNXjmoRu+60WDrom/jf21VLIN
eAVDMZ+aqFo7K87axHLlwLzdnlPJlxLoofplAkH7tmi/mxDXOolzXQbxoFCO
4zrLG97bNJPmtTXnrU1yWMtjq5Mz5OamGOi0ENKJTOki+8pajcz1lXIxmGUt
XWXBdLEkp3dxr1e7kbQKwG3Hw5ujR6n+Bo3lJYoKuTcrvrV5v7szVa9jipI+
X2+l3OYu6Ap2mBqrHghrvMER8AHeEGLxK27/fyze4HnNpYLUITuO7Cmst4Uh
obgtRHrd0xRnpva5dXbH1pW1W5yXH+6qFFdz6Wf4emmpbT7JNRySLblmLV67
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
skfRd7dXKLtsKzlSK+cDMuy6P/snvZ+v/VIU/QxvuUG2vejFc1AuVr715fDa
P//+801X+NvrT/ZlcC6SSQcvD/dPDx+3QSP0owslRe+u8xb8YG2h9n21feVI
r72oz2r3PfisP1j5FssreKs8j4c7Dx7CKyvmEmGzF21vrbnC921jrdrXirfQ
cyJ+pr2ovpj2uSZ5vNi7dy8uR8IZRsDv71mo3Wu+9SvCXq7s9fz49PDYgc79
nTZo8E+9BFjHhQN3X9143jJXVC++/7e13urGova5/J9W8vpk3mr/8d7aaBHS
IGHKJQiW8Ftk8LmOGjCppVgcSJqXJ5sfb1+fIAxv+tZGwN4XZ8dm+1vrz/Ux
OMCD3e59/aIcwCq0dV7wmQN0vFXDw51fAx4+vN+9r08EDweRtan+5r+1Php+
BB71L4S9TTbK/s5ys/Ottef6GNj71YPufX0S2LvzmYt2/qziokE0/LTw8NHD
7n39t9Hnu96q1+Q1biddj9cNN6Dvq8OZ1Si6i1n5qqA+XF4jrnW8YDu+Fwz+
vg0/WDCwIO7zuu9eAmPYMOqb3UZJ80ayOTXI0m5jSQVteo69u1kcwfLC5qEg
eEtKya377la45W6rLrc47II3Zj877FpXeGsOu1Ueu88Ou3VW+Ctz2P0Hkts3
u+5bvyLs/XU47Lxa/58dduv9fHbYrftW+89n19vHpeV136r9/BUbZviOu7+t
equdbXzmG11vfXbzmRE+JZxHN8vfVmlfnynlFt5q/2m8tZZP8ZOilE/NpXhL
lOLg+wA1xutTymf6+me91f6zir7CztJPir4+NVfpLdPXzrXo65aoctUK/6n0
1fVWqwt4uNPmBO7w5XY7gbtSIenKqr3z5cwRcA/v1tzDux81TfL03LZ3o2sZ
tv6bU4/Jv9TY6b5Fw7T9og17Wpfssy0wpVhnvtZ81CNz9zYt5UaI9Ibnimtx
dBmnfLUDLy3qtFypRO4QMd2j5Dub+k5MOJPdu41NR5jl9av/nXnt8KW9Hhd2
x0ervPGP/ht549tbi91Slqx0yfzs9P/s9A/8fHb6uz+/Mqf/5yzdf+Go/r+M
yfTZ6f/Z6R9e4SeRKfY537b757Mj/hPIt/2Mh423PmfO6p/PmbOfEB62pM5+
0Fw/XA8Zf3Xu4M86dut37T/+WxuHWb48O2c/4DmV1cUCk1GZYsZn+C3032AJ
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

-->

</rfc>
