<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.19 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-saxe-wimse-token-exchange-and-translation-01" category="info" consensus="true" submissionType="IETF" number="1" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <link href="https://datatracker.ietf.org/doc/draft-saxe-wimse-token-exchange-and-translation-01" rel="prev"/>
  <front>
    <title abbrev="WIMSE Token Exchange &amp; Translation">WIMSE Token Exchange and Translation Protocol</title>
    <seriesInfo name="RFC" value="1"/>
    <author fullname="Dean H. Saxe">
      <organization/>
      <address>
        <email>dean@thesax.es</email>
      </address>
    </author>
    <author fullname="George Fletcher">
      <organization>Capital One</organization>
      <address>
        <email>george.fletcher@capitalone.com</email>
      </address>
    </author>
    <author fullname="Andrii Deinega">
      <organization/>
      <address>
        <email>andrii.deinega@gmail.com</email>
      </address>
    </author>
    <author fullname="Ken McCracken">
      <organization>Google</organization>
      <address>
        <email>kenmccracken@google.com</email>
      </address>
    </author>
    <date year="2024" month="October" day="21"/>
    <area>Applications and Real-Time</area>
    <workgroup>Workload Identity in Multi System Environments</workgroup>
    <keyword>workload identity</keyword>
    <keyword>token exchange</keyword>
    <keyword>token translation</keyword>
    <abstract>
      <?line 71?>

<t>The specification defines the processes of token exchange and token translation for workloads.  Token exchange is introduced in <xref target="RFC8693"/>, allowing the exchange of access tokens, OpenID Connect ID Tokens, and SAML assertions for new OAuth access tokens. However, for workloads, there exist a broad array of input and output token types which must be considered beyond the input types supported by <xref target="RFC8693"/>.  These token types include, but are not limited to, SPIFFE SVIDs, x.509 certificates, Kerberos service tickets, Amazon sigv4A, macaroons, &lt;...&gt;.  Further, these tokens may be encoded in formats including JWT OAuth 2.0 Acesss Tokens <xref target="RFC9068"/>, CWT <xref target="RFC8392"/>, and protocol buffers (protobufs).  Given the variety and complexity of input and output token types and encoding, a strict token exchange that maintains all of the contextual information from the input token to the output token may not be possible.  We define these non-RFC8693 use cases with potentially lossy conversions as "token translation" (e.g. information may be lost in translation).   In this document we describe a workload profile for token exchange, using the mechanisms in <xref target="RFC8693"/>, and a new set of translations between arbitrary token types.  Additionally, we define mechanisms to enrich tokens during translation to support the use cases defined in (todo: add link to use cases doc).</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://deansaxe.github.io/wimse-token-exchange-and-translation/draft-saxe-wimse-token-exchange-and-translation.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-saxe-wimse-token-exchange-and-translation/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Workload Identity in Multi System Environments Working Group mailing list (<eref target="mailto:wimse@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/wimse/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/wimse/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/wimse-token-exchange-and-translation"/>.</t>
    </note>
  </front>
  <middle>
    <?line 76?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This specification defines a protocol for converting from one security token to another with support for both lossless and lossy conversions.  We refer to the lossless exchange as "token exchange" following the model defined in OAuth 2.0 Token Exchange <xref target="RFC8693"/>.  In this document we profile <xref target="RFC8693"/> to enable OAuth token exchange for workloads where the output is an OAuth Access Token or Refresh Token where no data is lost during the exchange.  "Token translation" describes all other conversions, including those where data loss may occur during conversion.  The terms Security Token, Security Token Service (STS), delegation, and impersonation are used in this document following the definitions in <xref target="RFC8693"/>.</t>
      <t>Within the realm of workload identities, there are numerous types of security tokens that are commonly used including SPIFFE SVIDs, OAuth 2.0 Bearer Access Tokens <xref target="RFC6750"/>, and x.509 certificates. Additionally, security tokens are encoded in multiple formats such as JSON, CBOR, and protobufs.  In order to provide a mechanism for interoperability between different workloads we require the ability to convert from one token type or encoding to another for use across disparate systems.</t>
      <t>In addition to translating security tokens between different types and formats, workload identity systems must be able to support changing the cryptographic properties of tokens, embedding tokens in one another, change the embedded context in a token, change the validity constraints, change or add subjects to the token, or add sender constraints.  This set of use cases for token exchange and translation are further described in https://github.com/yaroslavros/wimse-tokentranslation-requirements/blob/main/draft-rosomakho-wimse-tokentranslation-requirements.md. (todo: replace with a link to the ID once published.)</t>
    </section>
    <section anchor="notational-conventions">
      <name>Notational Conventions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>TODO: Define terms used by this specification</t>
      <ul spacing="normal">
        <li>
          <t>authorization server [<eref target="https://datatracker.ietf.org/doc/html/rfc6749">RFC6749</eref>]</t>
        </li>
      </ul>
      <t>The server issuing access tokens to the client after successfully authenticating the resource owner and obtaining authorization.</t>
      <ul spacing="normal">
        <li>
          <t>workload [<eref target="https://datatracker.ietf.org/doc/html/draft-ietf-wimse-arch">draft-ietf-wimse-arch</eref>]</t>
        </li>
      </ul>
      <t>A workload is a running instance of software executing for a specific purpose. Workload typically interacts with other parts of a larger system. A workload may exist for a very short durations of time (fraction of a second) and run for a specific purpose such as to provide a response to an API request. Other kinds of workloads may execute for a very long duration, such as months or years. Examples include database services and machine learning training jobs.</t>
      <ul spacing="normal">
        <li>
          <t>token</t>
        </li>
      </ul>
      <t>An integrity-protected string denoting a lifetime and specific attributes of a security context. In the context of WIMSE, the token denotes attributes of a <em>workload</em> security context.</t>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>Token translation fills a gap that development teams must solve for themselves today without standardized mechanisms.  For example, a common SPIFFE use case is to have a Kubernetes workload assume an AWS IAM role to access an S3 bucket.  This is accomplished by creating an OpenID Provider (OP) in the Kubernetes cluster and configuring AWS IAM as a Relying Party (RP) to obtain an ID token from the SPIFFE service. Using the id token, AWS STS AssumeRoleWithWebIdentity generates temporary sigV4 credentials for AWS allowing the workload to assume an AWS role and any permissions assigned to that role.  Similar mechanisms have been designed to support multiple cloud providers in the absence of standardized protocols.</t>
      <t>Token translation accounts for different token types, formats, encodings, and encyryption allowing for translation between most, but not all, token types using token translation profiles. This protocol does not define the specifics of token translation between arbitrary token types.  Profiles must be defined to describe token translations between different token types, including any loss of context during translation.  Where the input and output token are of the same type and the conversion is lossless, the protocol defined within this document is sufficient to meet the use cases defined in "USE CASES DOC".  Not all token input/output pairs are expected to be profiled.</t>
      <section anchor="token-context-enrichment">
        <name>Token Context Enrichment</name>
        <t>TODO - what context do we enrich tokens with during translation? Embedding tokens, attestations, assertions, validity, change/add subject, sender constraints.  This doc can give specific guidance on adding context to a scoped set of token types that are common. Maybe a reference to the use cases is sufficient, along with a short description of any fields that the translation endpoint <bcp14>MUST</bcp14> add to a newly issued token.</t>
      </section>
      <section anchor="lossy-translation">
        <name>Lossy Translation</name>
        <t>TODO - define what we mean by lossy.  What's lost?  Does this mean that some token translations lose valuable information?
TODO - provide a specific lossy scenario and use case.</t>
        <t>Translation may be lossless, such as when exchanging an input token for an output token of the same format, or lossy when exchanging an input token for an output token of a different format. An example of lossy translation is detailed in the example above.  In this case, the aud claim of the id token maps to the AWS IAM role used to create the AWS temporary credentials.
The aud (if no azp claim is present), sub, and amr claims are mapped to STS Session Keys with the same name. Other claims in the id token are dropped, resulting in an loss of context.</t>
        <t>Lossy translation may impact downstream systems.  Implementers must be aware of the risks of lost context through token translation.</t>
      </section>
    </section>
    <section anchor="token-translation-endpoint">
      <name>Token Translation Endpoint</name>
      <t>TODO - Define a new translation endpoint.</t>
    </section>
    <section anchor="token-translation-profiles">
      <name>Token Translation Profiles</name>
      <t>TODO - this draft does not define normative specs for translating from arbitrary format to another arbitrary format.  Profiles describing specific token translations must be developed and their names (possibly?) registered with IANA.  Profiles will define any losses that may occur during translation and the risks associated with the loss of context.  Not all token pairs can be translated, some may only be translatable in one direction.</t>
      <section anchor="x509-certificate-to-access-token-profile">
        <name>X.509 Certificate to Access Token Profile</name>
        <t>In [<eref target="https://datatracker.ietf.org/doc/html/draft-ietf-wimse-arch">draft-ietf-wimse-arch</eref>], Workloads may be issued Identity Credentials in the form of X.509 Certificates [<eref target="https://datatracker.ietf.org/doc/html/rfc5280">RFC5280</eref>], for Workload-to-Workload communication over mututal TLS (mTLS). Workload Agents must request the X.509 Certificate Credentials by undergoing Attestation against both the local Host Operating System and Hardware, and a remote Server with access to a Certificate Authority (CA). If the Server confirms sufficient evidence has been presented for Attestation, the Workload is issued X.509 Certificates identifying it. The identity is conveyed in a URI Subject Aleternative Name (SAN) within the X.509 Certificate.</t>
        <t>Authorization servers issue OAuth 2.0 Access Tokens to client applications.  If the resource owner has granted sufficient privileges to a protected resource, the issued access token can be used to access protected resources on resource servers.</t>
        <t>The Workloads possessing X.509 Certificate Identity Credentials may operate in an environment that is isolated from the security domain of a protected resource. In the case where the protected resource is protected by an external OAuth 2.0 Authorization Server, X.509 Certificate-to-Access Token exchange may be configured. The Trust across the isolated security domains must first be established. Relying parties must describe, via secure configurations, a mapping that crosses the security domains from the X.509 certificate authority(ies) to the OAuth 2.0 authorization server. The specification for authenticating the relying party and for the format of the configurations are out of scope of this specification. The following configurations <bcp14>MAY</bcp14> be registered by a relying party at the OAuth 2.0 authorization server:</t>
        <ol spacing="normal" type="1"><li>
            <t>A set of one or more Trust Anchors <bcp14>MUST</bcp14> be configured for the relying party at the OAuth 2.0 authorization server, representing authoritative entities with a public key and associated data, as defined in [<eref target="https://datatracker.ietf.org/doc/html/rfc6024">RFC6024</eref>]. These configurations <bcp14>MUST</bcp14> be represented as X.509 CA certificates in either DER or PEM format.</t>
          </li>
          <li>
            <t>A set of intermediate entities with public key and associated data, expressed as X.509 CA certificates in either DER or PEM format, <bcp14>MAY</bcp14> be configured for the relying party at the OAuth 2.0 authorization server. The intermediate CA certificates are for the purposes of certificate chain path building in scenarios where clients cannot or may not provide these intermediate certificates during mTLS handshakes.</t>
          </li>
          <li>
            <t>A mapping <bcp14>MUST</bcp14> describe the certificate attribute(s) used to select and or construct the subject claim in the OAuth 2.0 access tokens. Possible X.509 certificate properties include the following:
            </t>
            <ul spacing="normal">
              <li>
                <t>subject's common name (CN)</t>
              </li>
              <li>
                <t>first subject alternative names (SAN) DNS Name entry</t>
              </li>
              <li>
                <t>first subject alternative names (SAN) URI entry</t>
              </li>
            </ul>
          </li>
          <li>
            <t>A set of conditions <bcp14>MAY</bcp14> be defined to constrain the client certificates that <bcp14>SHALL</bcp14> be accepted.  An example might be a constraint that the certificate's first SAN URI entry must start with <tt>spiffe://example.com/foo</tt>, or that the certificate's first SAN DNS Name entry must end with <tt>.example.com</tt>.</t>
          </li>
          <li>
            <t>A mapping <bcp14>MAY</bcp14> describe additional certificate attributes that may be encoded in the issued OAuth 2.0 access tokens to be interpreted as part of access policy decisions.  These <bcp14>MAY</bcp14> include any of the following properties
            </t>
            <ul spacing="normal">
              <li>
                <t>hex-encoded serial number</t>
              </li>
              <li>
                <t>subject DN common name</t>
              </li>
              <li>
                <t>subject DN organization name</t>
              </li>
              <li>
                <t>subject DN subject organization unit</t>
              </li>
              <li>
                <t>issuer DN common name</t>
              </li>
              <li>
                <t>issuer DN organization name</t>
              </li>
              <li>
                <t>issuer DN organization unit</t>
              </li>
              <li>
                <t>the first subject alternative name (SAN) of type DNS name</t>
              </li>
              <li>
                <t>the first subject alternative name (SAN) of type URI</t>
              </li>
            </ul>
          </li>
        </ol>
        <t>Compatible OAuth 2.0 Authorization Servers supporting this token exchange profile <bcp14>MUST</bcp14> supports mTLS. After the relying party has registered an X.509 Certificate federation profile with the OAuth 2.0 authorization server, in order to obtain access tokens, Workloads <bcp14>MUST</bcp14> present their X.509 Certificates during mTLS handshakes to establish a connection to the OAuth 2.0 Authorization Server.  Workloads <bcp14>MUST</bcp14> then send a request to token endpoint, in the manner described in [<eref target="https://datatracker.ietf.org/doc/html/rfc8693">RFC8693</eref>]. The access token request is sent with the following properties:</t>
        <ul spacing="normal">
          <li>
            <t>grant_type: <bcp14>REQUIRED</bcp14>. The value <tt>urn:ietf:params:oauth:grant-type:token-exchange</tt> indicates that a token exchange is being performed.</t>
          </li>
          <li>
            <t>resource: <bcp14>OPTIONAL</bcp14>. A URI that indicates the target service or resource where the client intends to use the requested security token.</t>
          </li>
          <li>
            <t>audience: <bcp14>REQUIRED</bcp14> for this Profile. A URI or other unique identifier for the relying party, assigned by the OAuth 2.0 Authorization Server.</t>
          </li>
          <li>
            <t>scope: <bcp14>OPTIONAL</bcp14>. A list of space-delimited, case-sensitive strings, as defined in <eref target="https://datatracker.ietf.org/doc/html/rfc6749#section-3.3">Section 3.3</eref> of [<eref target="https://datatracker.ietf.org/doc/html/rfc6749">RFC6749</eref>], that allow the client to specify the desired scope of the requested security token in the context of the service or resource where the token will be used.</t>
          </li>
          <li>
            <t>requested_token_type: <tt>urn:ietf:params:oauth:token-type:access_token</tt></t>
          </li>
          <li>
            <t>subject_token: TBD. While this field is listed as <bcp14>REQUIRED</bcp14> for token exchange in <eref target="https://datatracker.ietf.org/doc/html/rfc8693#name-request">Section 2.1</eref> of [<eref target="https://datatracker.ietf.org/doc/html/rfc8693">RFC8693</eref>], in this case supplying the subject token again may be redundant, since it was already conveyed during the mTLS handshake. It is unclear whether repeating it here adds additional value. If supplied, it introduces the possibility that the client sends the wrong value, complicating client integration. It adds network overhead of a few KB, which could grow larger for longer certificate chains. It might be best to mark this as: <bcp14>OPTIONAL</bcp14>. The Workload's X.509 Certificate chain. The X.509 Certificate chain <bcp14>MUST</bcp14> chain to a previously-configured Trust Anchor certificate for the relying party, either directly or through one of the previously-configured Intermediate CA path-building certificates. This field <bcp14>MUST</bcp14> be expressed as a PEM-encoded certificate chain with newline characters removed.</t>
          </li>
          <li>
            <t>subject_token_type: <tt>urn:ietf:params:oauth:token-type:mtls</tt></t>
          </li>
        </ul>
        <t>The request <bcp14>MAY</bcp14> ONLY be accepted if the X.509 Certificate used during mTLS chain to a previously-configured Trust Anchor via a certificate path that may include previously-configured intermediate CA certificates. The previously-configured subject claim selector must be provide a non-blank string from the certificate. The previously-configured conditions must accept the X.509 Certificate.</t>
        <t>The response document contains the following properties (per [<eref target="https://datatracker.ietf.org/doc/html/rfc8693">RFC8693</eref>]):</t>
        <ul spacing="normal">
          <li>
            <t>access_token: <bcp14>REQUIRED</bcp14>. The security token issued by the authorization server in response to the token exchange request.</t>
          </li>
          <li>
            <t>issued_token_type: <bcp14>REQUIRED</bcp14>. Must be <tt>urn:ietf:params:oauth:token-type:access_token</tt> for this Profile.</t>
          </li>
          <li>
            <t>token_type: <bcp14>REQUIRED</bcp14>. Must be <tt>bearer</tt> for this Profile.</t>
          </li>
          <li>
            <t>expires_in: <bcp14>RECOMMENDED</bcp14>. The validity lifetime, in seconds, of the token issued by the authorization server.</t>
          </li>
          <li>
            <t>scope: <bcp14>OPTIONAL</bcp14> if the scope of the issued security token is identical to the scope requested by the client; otherwise, it is <bcp14>REQUIRED</bcp14>.</t>
          </li>
          <li>
            <t>refresh_token: <bcp14>MUST NOT</bcp14> be returned for this Profile.</t>
          </li>
        </ul>
        <t>The X.509 Certificate-to-Access Token Exchange Profile <bcp14>MUST NOT</bcp14> relax the validity constraint of the input security context. The returned Access Token <bcp14>MUST NOT</bcp14> have a not before claim that preceeds the <tt>notBefore</tt> constraint of the X.509 Certificate used. The returned Access Token <bcp14>MUST NOT</bcp14> have an expiration time claim that exceeds the <tt>notAfter</tt> constraint of the X.509 Certificate used.</t>
        <t>To mitigate the impact of Access Token theft, it is <bcp14>RECOMMENDED</bcp14> that the returned Access Token be sender-constrained. The Authorization Server <bcp14>MAY</bcp14> bind the Access Token to the X.509 Certificate that was used to obtain it, in the manner described in <eref target="https://datatracker.ietf.org/doc/html/rfc8705#name-mutual-tls-client-certifica">Section 3</eref> of [<eref target="https://datatracker.ietf.org/doc/html/rfc8705">RFC8705</eref>]. Based on authentication policy, Resource Servers <bcp14>MAY</bcp14> enforce that an Access Token bound to an X.509 Certificate CAN NOT be used to access any protected resources, unless the same X.509 Certificate was used during the mTLS handshake to the Resource Server.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>As countermeasures against replay attacks and various forms of misuse, an authorization server performing token exchange
- <bcp14>MUST</bcp14> ensure a client (whether it is an OAuth client or a workload) is allowed to perform such operation.
- <bcp14>SHOULD</bcp14> ensure that a provided security token allows to perform such operation on it.
- <bcp14>SHOULD</bcp14> ensure it itseld, as an AS, is the intended audience of a token being exchanged. It is typical for self-contained tokens to include the aud claim (an array of strings) representing their intended audience (other types of tokens provide other means for the same).
- a value in the subject_token_type parameter <bcp14>MUST</bcp14> correspond to an actual type of a security token provided in the subject_token parameter (<xref target="RFC8693"/>).
These countermeasures become even more significant when an entity issuing security tokens and an AS performing exchange of them reside in different security domains.</t>
      <t>An extra care should be taken for tokens that can be passed around using the front channel, and for those tokens that do not explicitly define their type. Examples here would be OpenID Connect ID Token, and various assertions represented as JWTs.</t>
      <t>TODO Security - data loss in token translation may impact authZ decisions.  Be careful when allowing multiple token translations since losses may grow over each step of translation.</t>
      <t>Embedding input tokens into output tokens can reduce this risk by allowing more complete context, at the risk of expanding the token size beyond what is practical.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
    <section anchor="appendices">
      <name>Appendices</name>
      <section anchor="appendix-1-non-normative-token-exchange-examples">
        <name>Appendix 1 - Non-normative token exchange examples</name>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC6750">
        <front>
          <title>The OAuth 2.0 Authorization Framework: Bearer Token Usage</title>
          <author fullname="M. Jones" initials="M." surname="Jones"/>
          <author fullname="D. Hardt" initials="D." surname="Hardt"/>
          <date month="October" year="2012"/>
          <abstract>
            <t>This specification describes how to use bearer tokens in HTTP requests to access OAuth 2.0 protected resources. Any party in possession of a bearer token (a "bearer") can use it to get access to the associated resources (without demonstrating possession of a cryptographic key). To prevent misuse, bearer tokens need to be protected from disclosure in storage and in transport. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6750"/>
        <seriesInfo name="DOI" value="10.17487/RFC6750"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
      <reference anchor="RFC8392">
        <front>
          <title>CBOR Web Token (CWT)</title>
          <author fullname="M. Jones" initials="M." surname="Jones"/>
          <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
          <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
          <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
          <date month="May" year="2018"/>
          <abstract>
            <t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties. The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection. A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value. CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8392"/>
        <seriesInfo name="DOI" value="10.17487/RFC8392"/>
      </reference>
      <reference anchor="RFC8693">
        <front>
          <title>OAuth 2.0 Token Exchange</title>
          <author fullname="M. Jones" initials="M." surname="Jones"/>
          <author fullname="A. Nadalin" initials="A." surname="Nadalin"/>
          <author fullname="B. Campbell" initials="B." role="editor" surname="Campbell"/>
          <author fullname="J. Bradley" initials="J." surname="Bradley"/>
          <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
          <date month="January" year="2020"/>
          <abstract>
            <t>This specification defines a protocol for an HTTP- and JSON-based Security Token Service (STS) by defining how to request and obtain security tokens from OAuth 2.0 authorization servers, including security tokens employing impersonation and delegation.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8693"/>
        <seriesInfo name="DOI" value="10.17487/RFC8693"/>
      </reference>
      <reference anchor="RFC9068">
        <front>
          <title>JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens</title>
          <author fullname="V. Bertocci" initials="V." surname="Bertocci"/>
          <date month="October" year="2021"/>
          <abstract>
            <t>This specification defines a profile for issuing OAuth 2.0 access tokens in JSON Web Token (JWT) format. Authorization servers and resource servers from different vendors can leverage this profile to issue and consume access tokens in an interoperable manner.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9068"/>
        <seriesInfo name="DOI" value="10.17487/RFC9068"/>
      </reference>
      <reference anchor="OIDC" target="https://openid.net/specs/openid-connect-core-1_0.html">
        <front>
          <title>OpenID Connect Core 1.0 incorporating errata set 2</title>
          <author initials="N." surname="Sakimura" fullname="Nat Sakimura">
            <organization>NRI</organization>
          </author>
          <author initials="J." surname="Bradley" fullname="John Bradley">
            <organization>Ping Identity</organization>
          </author>
          <author initials="M." surname="Jones" fullname="Mike Jones">
            <organization>Microsoft</organization>
          </author>
          <author initials="B. de" surname="Medeiros" fullname="B. de Medeiros">
            <organization>Google</organization>
          </author>
          <author initials="C." surname="Mortimore" fullname="Chuck Mortimore">
            <organization>Salesforce</organization>
          </author>
          <date year="2014" month="November"/>
        </front>
      </reference>
    </references>
    <?line 235?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA7Vc63Ibx5X+j6fo0FUb0gWAoiwnNjcbG6Iom7ZIakk6itfl
shozDaDDwQwyF1JwKu+yz7JPtt+59EwPAFqispuqWOCgL6fP5TuXPoPRaDSo
fZ25Y/Pm7Pz61NwUty43p++Shc3nztg8NTelzavM1r7IzeuyqIukyAZ2Oi3d
3QOz/i2eM0hs7eZFuT42Pp8Vg0FaJLldYse0tLN6VNl3bnTvl5Ub1bTMyOky
I2w+qruFRk+OBoOqmS59VeHPer3CGmenNy+N+cTYrCqOzZ7PU7dy+E9e7w3N
nkt9XZTeZvTH2eQ5/ilKfLq6ebk3yJvl1JXH5miQgsLjQVLklcurpjo2ddm4
AU732cCWzmLdyWqV+YTJqJgpV85moxu/dHuD+6K8nZdFs8K4N/icFTY1Z0SC
r9c4szlvstqb63VVu6U5ze98WeRLfF3tDW7dGtPT44EZmfsw1+tcesgsMYEl
3ZOIL4M7lzeg35iPpcIYYSZP9PncfEML0fOl9Rmes3i+9q6ejYtyTl/YMlng
i0Vdr6rjw0MaR4/8nRuHYYf04HBaFveVO+QVDmnm3NeLZhoWfY/MaQI+uaqO
NksdvofWjGWpsS8OP2Stw0fq23hRL7O9wcA29aIoWURm1mSZKO8LEGG+HZtr
LAcijXHCKyLu63rhsM3YVYONWd84MMaZl5mrk4UreSKe2Nz/ynsemxO78rXN
zGXeW3bOE8cznfh1IsOK3I2TYrm5zSRPS+9Bo8/d3MbrWP5mnMo3X8/p6a4V
voeOnScnpU3Aoh1kflMU86xHIcYtk0QmfD3nr2XhvCiXmHUHFcX4q5cnT4+O
vjyGzX4vyl/J0z/88fMn9PRyAn7Loy+O/viMHk2WUz9vVI/7s7747MunNOTk
+eWVeeOmCkX7J29uDnTEH778rF3XPB0/2UArGfXlkz98QaO+u768iNf5DusQ
6s185swM4NEtM0kSV1UykARtLs9enBwzSxRSLwFFZy/MSZHnLqnxb+nMEWb6
PCnKVVGCKzA2V+KDNZWrzVOZbSFqKHzQ9wLL+HScu/qwWrmk0gejRNbFv6Ub
Hf3yhBWWV2hVFv8bGZHoha2hrLd+2ZSiESxSPL866437rljk5nlp08yt43Gv
idazFpqiGef+1mFa7qp4/LlPyqIqZnVv7PMxLMScOyggvo3HRxoVBp8smuTW
nBdl7Zc4Yzz62maugjwSecoIbp4+OXo2OoKXGJCn6bRuMBqNjJ1WMO6kHgxu
Fs4QI/1MIR0kzWAPlYHdmlVZkFzxVzHbgF9G/i38ZbUI4F2NjapOO8lXEHhd
FmmTuJQ0+B//ULX85z+HcFxZcU+spb3bOdjainrxdtVwU5fw8Ua/IaKuJ+ev
jAXVpbgoIil396qtvaXG5tvi3t25ctgnfEgUlESDr2pjDYAbHsRCOddEjs9X
Tc17FU1NH5UPcByVuV/4ZGGWDSZOnSFHCh9W4rRTty6IZzibLCDjq2YF9a9p
wDpmBzEP0Ol6i8NasiZ1QzMlAkBhXtQm80tP8+tiaK5fn718eWqu/3L2Aqd4
N/78yZcmIU6wfB2efe9KuPoCG7vyzidY3wOmanwzWdpfIcLKz++eTYbwd4kt
i4LY+qfxePxnEPSyKYkxzJ5AWYWBazqqgyWnIlVRuEAuSRTY0YMLyCDAhRya
QId0AGClXACasVKAZysNtXDs2cyVldnnJ/irOgBZ30C1c2bsnS3hctc8CYC7
yiDB+v0yo8dMPkjFjgbW4ZN6U+PrBWADAJ/X+H9F2spmsWAp1+5d3cBXtdZG
xlAWy1jesmPBj3pUEAdJkuDiqkBEN4W/MIBeNUZld464T9XDNPg7sWSZ93D8
mFUTGIGktcmwwppIgl5XEqRVZm/LVPfMPqKGcY9glSRWqEmM0WhiszkjJsOE
EbU2FC6Ze6KwSkqPSbYL2laRj+jzcAjCg4EvHT3z1bLaBgLIw7LRkicgJneU
VKCwvndY1JZTjy/KdSxL0DlJEepiJHFjKDQyF6MNIQSXl2SoqsNpUzJdEZRh
jNomk9txXJZjRd+vixSxtk1TWGF+S3OicUVyMFbEXfoUTmQw+ARMFPzjcBX4
C37uBmDbqT0xUgTKXpL1Cj4G3ElAd73uVMtCjWChohWBfJo+xXNWjYzgjxi8
pSeicqWDhQUtbSd0sN/qUni0h/Vj4F4CBbKYSQ9FGxtot0u7giZFI0V2Fiai
C29YaQ/IgcaE45HBeTq8zoyjFkqGrtysdNVCH8jUvCCHamkem0VQlMhDgfa9
m23zCpahSMFiibg9jNAREQq0Rjbk3YjvbI1FAgmHTbvZ4hxM7Uoo83XQAiZi
uPE3/hSc37++uT4YgqwM0S6RKHbmlyusCWth5SOfAg1mufWl0Rcyi9eLPfat
Fxr/BsrnBZCRMmZLsuDNjM671suyH8MmSLQqBWRM6Ot2JehLQ4HryyIH0Cmd
gYl919cp3XOHWWU/RBWCKcwOcLPtKscbQLJJENES+bwl5ZQrQT12flUDeIG5
UBg95KA8cmbkukTnEb+LveH5HZgDu2+BipUZ/gasgZDs1Ge0f8C/1JMzZEvp
9J1Y/vfGq9KHKVhe8aMDjw40SfeD+4tBhHYnOLMUvUIVfLWyiM+BO5w5VxA1
DmCVS4wZwQCw0Ca/tsnunK/ybLid+Ie92oiKLT/CZrbBoJZJuV7Vxby0K0Rh
xNEVCTSKX7GFW05dqkdlwiA84oeeemhad+90rEuDh6exVub1xt3ZzKdELcV7
YAJkVrUDwEVyEFUz/RvC1Spgq64SvqVKTRnPZxsn7yAusPMr225VgvHId5Fu
ziRYa3GItTTkUVougC0drhHlYd4d/hvXDuJqk6oUl0gOp1kxpSJHKCJQZrO0
t4ti9AGzx8t0HLxm6VaZBTCxr7KtAyXeIKQvcny1aqaZrxYuHR+Q77woaisG
ScH/HWlIQfkmYeGtWxtOhs3e+Q/XN1Tlon/NxSV/vjr9zx/Ork5f0Ofrbyev
XrUfwojrby9/ePWi+9TNPLk8Pz+9eCGT8dRsPDqf/Lgntr13+frm7PJi8mpv
G0BJJjje1IlFr0pHQbut+gJ6fvLaHD0TfKLiAByegCvyf3yGj1DcZgiUP8Ex
hLyrFYCOFRTuRmsilBJBgxbFPUQPo6Nw5BNzA7fh8yIr5mvw7vLFJZVwJNBk
h8LAimyk3gpOBoNPNaHW6gdnEVCyn35iPH325c/7bWkKjqzmGkjZ1cHAjUNK
zQ/LWULDD37WHFSW8VXVkGX2srSgFEnmmY8zUEnoSkOoSrNmkkgZEkEecTxV
0SAlNjg6hjPHphS48/LxEcZ0qBZ3fvpJtJooVoWm2t2HHmvnZDrkJII2iu3K
JmdSkEnUllSdXF4xq+/ZrbwDdkqoR/DQygD2UCJBQMTRljWBoTg2MYG1yhLA
sEEJhAOwa0Y/2BeVUkrFUzi3jiAKNCTVle0giTUpTcnhjkbdhKB+iTBiRpuQ
6HlVoDyy2gNmMM70AMGtM+z5OchoRYVm8Tlm8vqMnZer6rG5ZPJvfZ5WcfhQ
KbHEHxeTmxXgVqB22O6HSKFeVASya1gHMPX0naW0sE2lOd6a2sqFfFgcEpLf
BRlEhlm5ZgaiO38rphWrDCsnBJsz5+fk6kbk24HxMB9KIYkiB6/CKgd8mznm
IK3fMsjWGIhs3lUtP8VrqscZS1zc5pg0ii8ahp0TkV2I8o3FPg1s+3R7XQKC
yzs6s7uHDW5XcnyWkaLO7Upir9TduaxYMZbVzgaXXBXZnaZ6C/hph79IzCnE
RHqIsNuQhqe2TP2vYEyXhVFBgSIPkQjl3RLahUgueDwyGGjIwt6R0nzfTF2Z
Ozpjq8AWsMGMNZM31+Zscm7KQqIEBRJ8c/2ZmTZU6Qh+lcww4SIBexgCvATh
qkgrD0Wm16Ktpdm/fH1gNKqNaIASVbUCDFg783OJ1QMhlnh45bI1PXwNa1yb
/SusBNoEj2gv7COCbCsGygLVybH5oU2bfRoiB9oCMb2Z8OmvcGIKvN+4aXvV
MXfAPoplIbAlFVnJrv38L8/opKlUDCSeoLV65beWt8TEHnuZtZyh52uzIldS
hTID1s65ECUaQyPB7Wu/pBuROP9mWU45GnTdpBDStaF0khVNGgCjrAL77RTR
kkJmrFohXyb73FZoEnaDEITPGwWhXe1g2MWhIRzWmiL+XFNoyesENrHORxuE
AHeJPFEqdFTTwfBhr9ikFZAt+jTXhVmwerbJf1pgEq3UFYNa+IgKs7soeahC
okX8LqgO2TqE0BZ0tpbdGcLH3OtyMVINzmFBXgCu7RILFRza/PyBAh25Q62y
VRZKyPmK1TpqlxBrfs7FimGoXSv/9Gz3ISuNgzIKcJoZOOnlNFBS9xv1nr0f
rk/NyeT69Nq8uDzZwwEuRMRKLR/iUA+wsr7UNPHdSryCxH8q6ZQw+BPN0k+U
S6dcliLaJDSjy1CypZaLBeV4/eIV+/tt9n5lTjdSnSF5CLhXEecwqpIP2xQm
pC2HUc4y/I30BKwEn3Iz93edXpp541MJayRBlOoFn4AAxVQJUrO0Le9F5rGR
54/NuV1PJVpgnUtciAc7CfWkSPcIFAxoWqFxDGv1qo1boJ8z77JU92NXGhkQ
TrsqcErDKQRxgqnO3T0FWoBDpygsInzFpbT4oj/ITm2WRXhPJUhwaqo1WlZ/
W/9eKktfGfOi4PPjNDyOKUNutdMUM4qqILOG8+GoiPtV2LqLs1qpSMmvSlxu
S1+wGQUmEmRGDOgqwWpSIaCijCPkneop4+o2R2R534Rj8xUyOesVYj5uPRtB
kCyJgDYPoQSNkNVjmZKuOnjcLFS3XDveTos7F5UgiSGCIhb+J8msX4ZTBPcL
Dq3azKQXdXD2RAUXCiZc+33ngSPfO+bkhzbZ9zOqNdpfV7ofuwAHu6sPiPtT
rYovS/legGVJWR/vRoHAtWNPTNfCCgot3+kSMQTVOl950B6I1kvLghYcUmhO
TpgTFBLABphDW15tMZh0xi9XyA4ACvcEFIgS21oRuEu8JmQjV96Wc+4jhC99
dVup9DrIqxdl0cwX21ag2Sw/jpX3VK23tULNbuVKYZedj3cvFPxku5A4D8rx
ttxye7XP5lb1o4NQtO8csmhtXG3b/C720+qUuawWjHkHKHTunEN1Ki+Ip/Ql
awBdnMn90vqrA8h47il2Vd8IDb6YxJveIwMIpwsOPQD0Vm26F2mpexZxwskU
ibd12CbcK8TqtOlHxXWSW5l2wEx6yXDIm1P5I/pSYZAreakvXaIKAnT+K5d2
T7rSLnG9V/vXI3M58/+nADBsM/b2vlTdSBusn0QhudomKQKxaesElRRcPn/6
xZNHFFxoOJFCqhnIGdXFqC0mkMtt8nARVVBFZtnUDfXg3Ly6NvtL/PcgKj5M
5lTTE7XTzJ3p3uZ4fDj4v4aiiXnBiVIXkRg7p5vVWi6rRE8S7P0tocElVcDZ
krRvi7TsW4T+BCDhyrB0SyTCfOURLsHaUhK+jimaSA2I8rGTCQ51JhCkUzmV
o1pYFB06cqcUfyxsJcmLArRLJYfqTiLO401U8VFp75CkVLpnnCD6eswXO231
m5wRBblrcVrW/HB1Zq4lKjOTDClomQvqXBDM719PLg66SHeHJGASkx0FPCXw
oZYe9mdafova/wjUZ7vKbcShOSyTKyEdB1elv4OdzZ3KoyuXhPnCOGVWXAUM
YBC8q363vUJFIWdLjp5uLFXGzgZXjGWciW0r606TZNBhHXTqE13XOCigyGIu
GKm6TL4tvKQFFc0letkmu6vz2PYqMKQx/ZHGx8eerpmUd6wIWSy/npRFrYfb
hyX772Fhe6egMBWKGkhXWDVvSrJ2vRISYemRN06quAAzEqdEthGq+W1FhOqT
PiSiIfVEMuK1Etbt3+YsHPRImYLyojJ4pS1WV50Q/rp5uxdKwPV6H9sfhECu
Y9+uKrcwoH9bzwHqrvJzd751uOJqMd3WUedIdDrJdhv+ljMkGbZZhRc6ugvZ
jUXOJz8SvyP3TkqySVL9AQc+HgyOqFKsaRr5VpyC+s9UDSZ5gkmVpEk9ZWnP
+xHbUvip0BpV62vBuXB7HPI7viJK+PqHfUAXbZA/HMoFS5vAyz3Fk6fPHnNP
geEHP4+1HWuT2XrylmK501E7m/RulIkA5znYe3F6Rax8fXoeor3B04jTXMtf
upQOsnHi953XvSNCqo8kYxi05/9GkurN4tNsEsNXlbqD3hZIaBgZKxDJU1CI
naaNz1LNS0IiG9o8xENx3EiBOamqNlaFXFgaqXr09IjRYJbiHPiwPK0W9tbB
e3xGsgm4wyLvymQL1weWUIPfB6wEb1W5jBw2V7dCFaVJhINaYwlpX77J1n7D
4mvtD9sBadF1d7jcqGOc4B7YUdjv91Uot+ccOZxcHMj3AtiBKpt1IYamEBxj
vLi4lpCD7nrXj5lJEYxMehZpPN0i+R5+RTXJtuwU3wP2BMe+QK5zKakEz1Y1
+Zm4KrD084XknFEdq6v/ROuBN3IWENzRq/cdNdRfTPFttaIqBDBEt+D79FlR
vOUCx3tX7vNQlkdGqouPo0Xfjgef91QQLOo679o2ld2KGKVs/TbNKNR6QN92
X1gTAERtuasCgASnCw8V+sgEKonKoImUQKrP6xxXp7GiQAv3bhToA4Ag7jLy
ZkpPc8G3WHW3vou783ePCB97I5H41DKSeVLu3Kb76oFdHhjQLc4c+E1DUTsh
blGxm7SkW//R06G+g8FJsQR6+q5p7qEIse1HlkDGh+i7jQpDRx6DoI6tGDCh
n3wzv+0qKBuIohHEq9sx9wyRdtm7COmqBe+LFnzURRUu1fod413gz3Srq9bK
yI6cbLcf4NbDEMUKiuRSaNiOH3cxlwq+fUIobuTaOsdnmkAXgedanBoGW13C
r2029HBAQ513jwhoaLgGNP0cK5DAXUd53Ulgl8ke0yU4J3m/yCtTocVGFqba
tDNvmzI/JiKOqXVsWR0XJMJjnjbiaf0Xj97iTGmM6XZTAT3l3kyJKylmoWuU
T9vk6NiEDhyCS4JuycyiRZ2+VNI2wAOq29yqS7zUyxD0UQ+CdvaKcjOX4oxH
7wKoOSb1VCPouKHBDcjWKlMgDI+l8AdswIKhDuC18W7LjIbdBSv35rxX20AO
JxF9nmTU50H5xcombpQ6fXtgyInniN7681LF5AaGaiuAvlaN/2z8GJWjXp9P
Kpk6wlTGp49vGhqqcpBWxtKiUIszpbV2qVaeECfKpR4WX7CyqNGiXrj3aInM
5EqpFidEG3WLX/h7tY8HbEEMgIeIMcqktyQ+gXh5cGxunsO23iwIG1mh+AaL
bz59pa65r3UblhNJ7+n46JGA8Qn5lpGerBPfR0HPsO2O42oHuRFR9Dge1lsJ
KgmG2AWybPLUEiRWnipxHhhFHRZZ6Wy67kplUZd2H8PH5ozhrUFYQu1ykCTb
INI3bf3AktKVnMLqo9CK8YzLhEyuJ5Pxdfc6k74xxeG5Nt228Z8oZyVAQs0V
JV1Q8opDeU8l1A4i1JmXmuyDYiYmdzV1ZXBddoHzSilp5u7N98+H+t5RUjRQ
iXkJs9B+rxlfteX0cSulqnjxNi6eqvtZWuzC4rFVDB5xCe331Q4nzovKuAe+
FLcnH7UE6O580VTZehSlnHF1oUf2A8io6awU/rO1RN9ya8RFi5nW0nbtdbaR
nVKaOWrTzH5H+E1ndiHx7+XbllLpNoTdTmHZodItMt2p4BG10lHQRXXrO8GO
ns1/MHIs66x6K0XO4MQp+r68ePVjnBAZP3ugQM+Zahz2PE5GVLCz/WzUcuyg
iUdIA3Yv9VsFAlGn3fP6qbMk2ZT16zVYdwNOr05NM5vfhr68tjIYbfVbO0Xp
6VLqn8TQB0vsIgftbmybTcizcF3yoZDK7K9CL+1H4eoBx2SxF9mMyjZdnmR/
Gk/s7Oz1ea9Ps3N6rV8JPZvYWtbr6W63/7mK5ZF+cDuACs2XD+8w5Xc+dk+F
wQImql88M6dt5G6jVmnkD92a7KqkyRWxkALJhzJvRwgWLLAXkuhKW8LRmJDu
wJT1Mq0LYXRzcRv/LgHlvafuBc9+ruUNRyX8elNQjNAdL461hlDaWl/MsMFO
NN+6Nmhf6nodJ4i0PKDavmMqd7wl0XKAez62m1/FkJS43obt+toXKu9Pzgqu
AxIcMPbAmhPn1O2+xZjnPOTtDhJ2Y+IjSMhFtfTtQer0jQiBtfTo4Fz5EWRQ
RyM8de3noalEWy0wrUcUvprVnfhb/e7Ckd2HmTpt8hq1NIXT78oupErn9aa/
T0HxwEGYAorXQllUk3X/nhS3TTkeA4h/fPK5hKx0g22zERzkSMxk1GJ+FMZi
+CNXpwz6uaWT0M11dAVEJQwuiQ3NVcgYQnWFuOZyfllfU5h8QwxFk6faEL/j
Gn1yEUx24yKUm3G3L0OHiHT5Bc62E2h70VYiD0bNQaQbx+GumehFHK5vv+je
DPwXX8wZ/Isv5gz+xRdzBpsv5vzPf/ObOb+LX8353Qe8mzP40HdzPv2JOPPz
sfnTNFkdPfuzPqAD9x4GnvUeMs+2n2xNFibueLRjm5abvecbnO7TO/mx93fg
e/TwT19x+Ds6+uKrPw+4hat9Y/VEfy7Bqv5M6JKikejQVojEqrZHhN8eo2uo
GnYqqkdv/9M7pFQW4jukpa+aiptDdsc2WkLq+rHbHxcaCbjTbyCVfGEgedl+
yBd9/01i/ZpfRwmd8wc8goI8MVTdTDoppZOAW5RGRtmvm2nZS4PXraiAV6we
XpDQyNfbyxLFNULklNWOYOd6yG9W6AVdTnuF8pWklrU6Bv5lFuVMGjJoffGI
IwYsOxtpdBs6Y5nE+B6qa6XcJ3mEH9PQOtNB/85XKrPbdO1Lyax9S1i3CpG+
fEvds1WbKhLqHRA/rNYk1dVsJ1qG41HqqdE0tSgl9A2ADH9Lv/Eg78z23tbR
trUgs11bRKvvR+9LH3APKF8s9xV9iqCT7obu+JUCSJCKf4zZVJmlwjH3oGib
kLw3t/WOMr+mAVHHqh7/sgqoXJK3IOb5uLF/s5dizG86ISYrYQyEmAAuKjXQ
DagNnbrxq9rar7OykhuX7Ne6X39AApbLy7u5y4ZRh0TR/bCIvHZUcGiH0Aou
1VNy370H4UUTore6uHRzHyh74Idihj20iH4qZuMS/7s3N9w5RL2fLUSNojf0
OUHefPkiaoMl0Pmv3sXYc8fcmzWZijAkge07LzvaOqXWpe2XtDzXd7g9z1nY
PjKB1cavZIDsrvk/aqjm398pev3U0mdJpbVE64rUt8k9Iy1xhfTjr6jhLATn
w9ACwMOxPUQEvgYByzkq/6sLv3xzrz1SK36BENgh/bvUdroF/Dc9D00XSHkh
I+Xlw4pjj8mKfuCOXtrjRk/98505gpQukPJ3PbkbKaterVb66xxTuBBeL7nN
i/vMpXN+WXnwj2O5fnTpf+zN4LHd3j9VHWw7En77fwFuUWMBOlAAAA==

-->

</rfc>
