<?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.11 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-privacypass-auth-scheme-10" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.10 -->
  <front>
    <title abbrev="Privacy Pass Authentication">The Privacy Pass HTTP Authentication Scheme</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-auth-scheme-10"/>
    <author initials="T." surname="Pauly" fullname="Tommy Pauly">
      <organization>Apple Inc.</organization>
      <address>
        <postal>
          <street>One Apple Park Way</street>
          <city>Cupertino, California 95014</city>
          <country>United States of America</country>
        </postal>
        <email>tpauly@apple.com</email>
      </address>
    </author>
    <author initials="S." surname="Valdez" fullname="Steven Valdez">
      <organization>Google LLC</organization>
      <address>
        <email>svaldez@chromium.org</email>
      </address>
    </author>
    <author initials="C. A." surname="Wood" fullname="Christopher A. Wood">
      <organization>Cloudflare</organization>
      <address>
        <email>caw@heapingbits.net</email>
      </address>
    </author>
    <date year="2023" month="May" day="08"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document defines an HTTP authentication scheme that can be used by clients
to redeem Privacy Pass tokens with an origin. It can also be used by origins to
challenge clients to present an acceptable Privacy Pass token.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Privacy Pass tokens are unlinkable authenticators that can be used to
anonymously authorize a client (see
<xref target="ARCHITECTURE"/>).
Tokens are generated by token issuers, on the basis of authentication,
attestation, or some previous action such as solving a CAPTCHA. A client
possessing such a token is able to prove that it was able to get a token
issued, without allowing the relying party redeeming the client's token
(the origin) to link it with the issuance flow.</t>
      <t>Different types of authenticators, using different token issuance protocols,
can be used as Privacy Pass tokens.</t>
      <t>This document defines a common HTTP authentication scheme
(<xref section="11" sectionFormat="comma" target="RFC9110"/>), PrivateToken, that allows clients to redeem various
kinds of Privacy Pass tokens.</t>
      <t>Clients and relying parties (origins) interact using this scheme to perform the
token challenge and token redemption flow. In particular, origins challenge
clients for a token with an HTTP Authentication challenge (using the
WWW-Authenticate response header field). Clients then respond to that challenge
with an HTTP authentiation response (using the Authorization request header
field). Clients produce an authentication response based on the origin's token
challenge by running the token issuance protocol
<xref target="ISSUANCE"/>. The act of presenting a token in an
Authorization request header is referred to as token redemption. This
interaction between client and origin is shown below.</t>
      <figure anchor="fig-overview">
        <name>Challenge-response redemption protocol flow</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="160" width="568" viewBox="0 0 568 160" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
              <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
              <path d="M 40,64 L 40,112" fill="none" stroke="black"/>
              <path d="M 80,32 L 80,64" fill="none" stroke="black"/>
              <path d="M 328,32 L 328,64" fill="none" stroke="black"/>
              <path d="M 360,64 L 360,144" fill="none" stroke="black"/>
              <path d="M 400,32 L 400,64" fill="none" stroke="black"/>
              <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
              <path d="M 328,32 L 400,32" fill="none" stroke="black"/>
              <path d="M 8,64 L 80,64" fill="none" stroke="black"/>
              <path d="M 328,64 L 400,64" fill="none" stroke="black"/>
              <path d="M 40,96 L 56,96" fill="none" stroke="black"/>
              <path d="M 336,96 L 352,96" fill="none" stroke="black"/>
              <path d="M 40,128 L 96,128" fill="none" stroke="black"/>
              <path d="M 280,128 L 360,128" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="360,96 348,90.4 348,101.6" fill="black" transform="rotate(0,352,96)"/>
              <polygon class="arrowhead" points="48,128 36,122.4 36,133.6" fill="black" transform="rotate(180,40,128)"/>
              <g class="text">
                <text x="44" y="52">Origin</text>
                <text x="364" y="52">Client</text>
                <text x="136" y="100">WWW-Authenticate:</text>
                <text x="268" y="100">TokenChallenge</text>
                <text x="380" y="116">//</text>
                <text x="408" y="116">Run</text>
                <text x="460" y="116">issuance</text>
                <text x="532" y="116">protocol</text>
                <text x="164" y="132">Authorization:</text>
                <text x="248" y="132">Token</text>
                <text x="40" y="148">|</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+--------+                              +--------+
| Origin |                              | Client |
+---+----+                              +---+----+
    |                                       |
    +-- WWW-Authenticate: TokenChallenge -->|
    |                                       | // Run issuance protocol
    <------- Authorization: Token ----------+
    |                                       |
]]></artwork>
        </artset>
      </figure>
      <t>In addition to working with different token issuance protocols, this scheme
optionally supports use of tokens that are associated with origin-chosen
contexts and specific origin names. Relying parties that request and redeem
tokens can choose a specific kind of token, as appropriate for its use case.
These options allow for different deployment models to prevent double-spending,
and allow for both interactive (online challenges) and non-interactive
(pre-fetched) tokens.</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>Unless otherwise specified, this document encodes protocol messages in TLS
notation from <xref target="TLS13"/>, Section 3.</t>
        <t>This document uses the terms "Client", "Origin", "Issuer", "Issuance Protocol",
and "Token" as defined in <xref target="ARCHITECTURE"/>. It additionally
uses the following terms in more specific ways:</t>
        <ul spacing="normal">
          <li>Issuer key: Keying material that can be used with an issuance protocol
to create a signed token.</li>
          <li>Token challenge: A requirement for tokens sent from an origin to a client,
using the "WWW-Authenticate" HTTP header field. This challenge is bound to a
specific token issuer and issuance protocol, and may be additionally bound to
a specific context or origin name.</li>
          <li>Token redemption: An action by which a client presents a token to an origin
in an HTTP request, using the "Authorization" HTTP header field.</li>
        </ul>
      </section>
    </section>
    <section anchor="challenge-redemption">
      <name>HTTP Authentication Scheme</name>
      <t>Token redemption is performed using HTTP Authentication
(<xref section="11" sectionFormat="comma" target="RFC9110"/>), with the scheme "PrivateToken". Origins challenge
clients to present a token from a specific issuer (<xref target="challenge"/>). Once a
client has received a token from that issuer, or already has a valid token
available, it presents the token to the origin (<xref target="redemption"/>).</t>
      <t>Unlike many authentication schemes in which a client will present the same
credentials across multiple requests, tokens used with the "PrivateToken"
scheme are single-use credentials, and are not reused. Spending the same token
value more than once allows the origin to link multiple transactions to the
same client. In deployment scenarios where origins send token challenges to
request tokens, origins ought to expect at most one request containing a token
from the client in reaction to a particular challenge.</t>
      <t>Origins SHOULD minimize the number of challenges sent on a particular client
session, such as a unique TLS session between a client and origin
(referred to as the "redemption context" in <xref target="ARCHITECTURE"/>). Clients can
have implementation-specific policy to minimize the number of tokens that
can be retrieved by origins, so origins are advised to only request tokens
when necessary within a single session. See <xref target="interaction"/> for more discussion
on how to optimize token challenges to improve the user experience.</t>
      <section anchor="challenge">
        <name>Token Challenge</name>
        <t>Origins send a token challenge to clients in an "WWW-Authenticate" header field
with the "PrivateToken" scheme. This challenge includes a TokenChallenge
message, along with information about what keys to use when requesting a token
from the issuer.</t>
        <t>Origins that support this authentication scheme need to handle the following
tasks:</t>
        <ol spacing="normal" type="1"><li>Select which issuer to use, and configure the issuer name and token-key to
include in WWW-Authenticate challenges.</li>
          <li>Determine a redemption context construction to include in the
TokenChallenge, as discussed in <xref target="context-construction"/>.</li>
          <li>Select the origin information to include in the TokenChallenge. This can
be empty to allow fully cross-origin tokens, a single origin name that
matches the origin itself, or a list of origin names containing the origin
itself.</li>
        </ol>
        <t>The TokenChallenge message has the following structure:</t>
        <artwork><![CDATA[
struct {
    uint16_t token_type;
    opaque issuer_name<1..2^16-1>;
    opaque redemption_context<0..32>;
    opaque origin_info<0..2^16-1>;
} TokenChallenge;
]]></artwork>
        <t>The structure fields are defined as follows:</t>
        <ul spacing="normal">
          <li>"token_type" is a 2-octet integer, in network byte order. This type indicates
the issuance protocol used to generate the token. Values are registered
in an IANA registry, <xref target="token-types"/>. Challenges with unsupported token_type
values MUST be ignored. This value determines the structure and semantics of
the rest of the structure.</li>
          <li>"issuer_name" is a string containing the name of the issuer. This is a
hostname that is used to identify the issuer that is allowed to issue
tokens that can be redeemed by this origin. The string is prefixed with a
2-octet integer indicating the length, in network byte order.</li>
          <li>"redemption_context" is an optional field. If present, it allows the origin
to require that clients fetch tokens bound to a specific context, as opposed
to reusing tokens that were fetched for other contexts. See
<xref target="context-construction"/> for example contexts that might be useful in practice.
When present, this value is a 32-byte context generated by the origin. Valid
lengths for this field are either 0 or 32 bytes. The field is prefixed with a
single octet indicating the length. Challenges with redemption_context values
of invalid lengths MUST be ignored.</li>
          <li>"origin_info" is an optional string containing one or more origin names,
which allows a token to be scoped to a specific set of origins. The string
is prefixed with a 2-octet integer indicating the length, in network byte
order. If empty, any non-origin-specific token can be redeemed. If the string
contains multiple origin names, they are delimited with commas "," without any
whitespace. If this field is not empty, the Origin MUST include its own name
as one of the names in the list.</li>
        </ul>
        <t>When used in an authentication challenge, the "PrivateToken" scheme uses the
following parameters:</t>
        <ul spacing="normal">
          <li>"challenge", which contains a base64url-encoded <xref target="RFC4648"/> TokenChallenge
 value. Since the length of the challenge is not fixed, the base64url value
 MUST include padding. As an Authentication Parameter (<tt>auth-param</tt> from
 <xref section="11.2" sectionFormat="comma" target="RFC9110"/>), the value can be either a token or a
 quoted-string, and might be required to be a quoted-string if the base64url
 string includes "=" characters. This challenge value MUST be unique for every
 401 HTTP response to prevent replay attacks. This parameter is required for
 all challenges.</li>
          <li>"token-key", which contains a base64url encoding of the public key for
use with the issuance protocol indicated by the challenge. Since the length of
the key is not fixed, the base64url value MUST include padding. As an
Authentication Parameter (<tt>auth-param</tt> from <xref section="11.2" sectionFormat="comma" target="RFC9110"/>), the
value can be either a token or a quoted-string, and might be required to be a
quoted-string if the base64url string includes "=" characters. This parameter
MAY be omitted in deployments where clients are able to retrieve the issuer key
using an out-of-band mechanism.</li>
          <li>"max-age", an optional parameter that consists of the number of seconds for
which the challenge will be accepted by the origin.</li>
        </ul>
        <t>Clients can ignore the challenge if the token-key is invalid or otherwise
untrusted.</t>
        <t>The header field MAY also include the standard "realm" parameter, if desired.
Issuance protocols MAY require other parameters. Clients SHOULD ignore unknown
parameters in challenges, except if otherwise specified by issuance protocols.</t>
        <t>As an example, the WWW-Authenticate header field could look like this:</t>
        <artwork><![CDATA[
WWW-Authenticate:
  PrivateToken challenge="abc...", token-key="123..."
]]></artwork>
        <t>Upon receipt of this challenge, a client validates the TokenChallenge before
responding to it. Validation requirements are as follows:</t>
        <ul spacing="normal">
          <li>The TokenChallenge structure is well-formed;</li>
          <li>The token_type is recognized and supported by the client; and</li>
          <li>If the origin_info field is non-empty, the name of the origin that issued the
authentication challenge is included in the list of origin names.</li>
        </ul>
        <t>If validation fails, the client MUST NOT process or respond to the
challenge. Clients MAY have further restrictions and requirements around
validating when a challenge is considered acceptable or valid. For example,
clients can choose to ignore challenges that list origin names for which
current connection is not authoritative (according to the TLS certificate).</t>
        <t>Caching and pre-fetching of tokens is discussed in <xref target="caching"/>.</t>
        <t>Note that it is possible for the WWW-Authenticate header field to include
multiple challenges. This allows the origin to indicate support for different
token types, issuers, or to include multiple redemption contexts. For example,
the WWW-Authenticate header field could look like this:</t>
        <artwork><![CDATA[
WWW-Authenticate:
  PrivateToken challenge="abc...", token-key="123...",
  PrivateToken challenge="def...", token-key="234..."
]]></artwork>
        <t>Origins should only include challenges for different types of issuance
protocols with functionally equivalent properties. For instance, both issuance
protocols in <xref target="ISSUANCE"/> have the same functional properties, albeit with
different mechanisms for verifying the resulting tokens during redemption.
Since clients are free to choose which challenge they want to consume when
presented with options, mixing multiple challenges with different functional
properties for one use case is nonsensical. If the origin has a preference
for one challenge over another (for example, if one uses a token type
that is faster to verify), it can sort it to be first in the list
of challenges as a hint to the client.</t>
        <section anchor="context-construction">
          <name>Redemption Context Construction</name>
          <t>The TokenChallenge redemption context allows the origin to determine the
context in which a given token can be redeemed. This value can be a unique
per-request nonce, constructed from 32 freshly generated random bytes. It
can also represent state or properties of the client session. Some example
properties and methods for constructing the corresponding context are below.
This list is not exhaustive.</t>
          <ul spacing="normal">
            <li>Context bound to a given time window: Construct redemption context as
SHA256(current time window).</li>
            <li>Context bound to a client location: Construct redemption context as
SHA256(client IP address prefix).</li>
            <li>Context bound to a given time window and location: Construct redemption
context as SHA256(current time window, client IP address prefix).</li>
          </ul>
          <t>An empty redemption context is not bound to any property of the client session.
Preventing double spending on tokens requires the origin to keep state
associated with the redemption context. The size of this state varies based on
the size of the redemption context. For example, double spend state for unique,
per-request redemption contexts does only needs to exist within the scope of
the request connection or session. In contrast, double spend state for empty
redemption contexts must be stored and shared across all requests until
token-key expiration or rotation.</t>
          <t>Origins that share redemption contexts, i.e., by using the same redemption
context, choosing the same issuer, and providing the same origin_info field in
the TokenChallenge, must necessarily share state required to enforce double
spend prevention. Origins should consider the operational complexity of this
shared state before choosing to share redemption contexts. Failure to
successfully synchronize this state and use it for double spend prevention can
allow Clients to redeem tokens to one Origin that were issued after an
interaction with another Origin that shares the context.</t>
        </section>
        <section anchor="caching">
          <name>Token Caching</name>
          <t>Clients can generate multiple tokens from a single TokenChallenge, and cache
them for future use. This improves privacy by separating the time of token
issuance from the time of token redemption, and also allows clients to avoid
any overhead of receiving new tokens via the issuance protocol.</t>
          <t>Cached tokens can only be redeemed when they match all of the fields in the
TokenChallenge: token_type, issuer_name, redemption_context, and origin_info.
Clients ought to store cached tokens based on all of these fields, to
avoid trying to redeem a token that does not match. Note that each token
has a unique client nonce, which is sent in token redemption (<xref target="redemption"/>).</t>
          <t>If a client fetches a batch of multiple tokens for future use that are bound
to a specific redemption context (the redemption_context in the TokenChallenge
was not empty), clients SHOULD discard these tokens upon flushing state such as
HTTP cookies <xref target="COOKIES"/>, or changing networks.
Using these tokens in a context that otherwise would not be linkable to the
original context could allow the origin to recognize a client.</t>
        </section>
      </section>
      <section anchor="redemption">
        <name>Token Redemption</name>
        <t>The output of the issuance protocol is a token that corresponds to the origin's
challenge (see <xref target="challenge"/>). A token is a structure that begins with a
two-octet field that indicates a token type, which MUST match the token_type in
the TokenChallenge structure.</t>
        <artwork><![CDATA[
struct {
    uint16_t token_type;
    uint8_t nonce[32];
    uint8_t challenge_digest[32];
    uint8_t token_key_id[Nid];
    uint8_t authenticator[Nk];
} Token;
]]></artwork>
        <t>The structure fields are defined as follows:</t>
        <ul spacing="normal">
          <li>"token_type" is a 2-octet integer, in network byte order. This value must
match the value in the challenge (<xref target="challenge"/>). This value determines the
structure and semantics of the rest of the structure.</li>
          <li>"nonce" is a 32-octet message containing a client-generated random
nonce.</li>
          <li>"challenge_digest" is a 32-octet message containing the hash of the
original TokenChallenge, SHA256(TokenChallenge).</li>
          <li>"token_key_id" is an Nid-octet identifier for the the token authentication
key. The value of this field is defined by the token_type and corresponding
issuance protocol.</li>
          <li>"authenticator" is a Nk-octet authenticator that covers the preceding fields
in the token. The value of this field is defined by the token_type and
corresponding issuance protocol. The value of constant Nk depends on
token_type, as defined in <xref target="token-types"/>.</li>
        </ul>
        <t>The authenticator value in the Token structure is computed over the token_type,
nonce, challenge_digest, and token_key_id fields.</t>
        <t>When used for client authorization, the "PrivateToken" authentication
scheme defines one parameter, "token", which contains the base64url-encoded
Token struct. Since the length of the Token struct is not fixed, the base64url
value MUST include padding. As an Authentication Parameter (<tt>auth-param</tt> from
<xref section="11.2" sectionFormat="comma" target="RFC9110"/>), the value can be either a token or a
quoted-string, and might be required to be a quoted-string if the base64url
string includes "=" characters. All unknown or unsupported parameters to
"PrivateToken" authentication credentials MUST be ignored.</t>
        <t>Clients present this Token structure to origins in a new HTTP request using
the Authorization header field as follows:</t>
        <artwork><![CDATA[
Authorization: PrivateToken token="abc..."
]]></artwork>
        <t>For token types that support public verifiability, origins verify the token
authenticator using the public key of the issuer, and validate that the signed
message matches the concatenation of the client nonce and the hash of a
valid TokenChallenge. For context-bound tokens, origins store or reconstruct
the contexts of previous TokenChallenge structures in order to validate the
token. A TokenChallenge MAY be bound to a specific TLS session with a client,
but origins can also accept tokens for valid challenges in new sessions.
Origins SHOULD implement some form of double-spend prevention that prevents
a token with the same nonce from being redeemed twice. This prevents clients
from "replaying" tokens for previous challenges. For context-bound tokens,
this double-spend prevention can require no state or minimal state, since
the context can be used to verify token uniqueness.</t>
        <t>If a client is unable to fetch a token, it MUST react to the challenge as
if it could not produce a valid Authorization response.</t>
      </section>
    </section>
    <section anchor="interaction">
      <name>User Interaction</name>
      <t>When used in contexts like websites, origins that challenge clients for
tokens need to consider how to optimize their interaction model to ensure a
good user experience.</t>
      <t>Tokens challenges can be performed without explicit user involvement, depending
on the issuance protocol. If tokens are scoped to a specific origin,
there is no need for per-challenge user interaction. Note that the issuance
protocol may separately involve user interaction if the client needs to be
newly validated.</t>
      <t>If a client cannot use cached tokens to respond to a challenge (either because
it has run out of cached tokens or the associated context is unique), the token
issuance process can add user-perceivable latency. Origins need not block
useful work on token authentication. Instead, token authentication can be used
in similar ways to CAPTCHA validation today, but without the need for user
interaction. If issuance is taking a long time, a website could show an
indicator that it is waiting, or fall back to another method of user
validation.</t>
      <t>An origin MUST NOT use more than one redemption context value for a given token
type and issuer per client request. If an origin issues a large number of
challenges with unique contexts, such as more than once for each request, this
can indicate that the origin is either not functioning correctly or is trying
to attack or overload the client or issuance server. In such cases, a client
MUST ignore redundant token challenges for the same request and SHOULD alert
the user if possible.</t>
      <t>Origins MAY include multiple challenges, where each challenge refers to a
different issuer or a different token type, to allow clients to choose a
preferred issuer or type.</t>
      <t>An origin MUST NOT assume that token challenges will always yield a valid
token. Clients might experience issues running the issuance protocol, e.g.,
because the attester or issuer is unavailable, or clients might simply not
support the requested token type. Origins SHOULD account for such operational
or interoperability failures by offering clients an alternative type of
challenge such as CAPTCHA for accessing a resource.</t>
      <t>For example, consider a scenario in which the client is a web browser, and the
origin can accept either a token or a solution to a puzzle intended to
determine if the client is a real human user. The origin would send clients a
401 HTTP response that contains a token challenge in a "WWW-Authenticate"
header field along with content that contains the puzzle to display to the
user. Clients that are able to respond with a token will be able to
automatically return the token and not show the puzzle, while clients that
either do not support tokens or are unable to fetch tokens at a particular
time can present the user with the puzzle.</t>
      <t>To mitigate the risk of deployments becoming dependent on tokens, clients and
servers SHOULD grease their behavior unless explicitly configured not to. In
particular, clients SHOULD ignore token challenges with some non-zero
probability. Likewise, origins SHOULD randomly choose to not challenge clients
for tokens with some non-zero probability. Moreover, origins SHOULD include
random token types, from the Reserved list of "greased" types (defined in
<xref target="token-types"/>), with some non-zero probability.</t>
    </section>
    <section anchor="sec-considerations">
      <name>Security Considerations</name>
      <t>The security properties of token challenges vary depending on whether the
challenge contains a redemption context or not, as well as whether the
challenge is per-origin or not. For example, cross-origin tokens with empty
contexts can be replayed from one party by another, as shown below.</t>
      <figure anchor="fig-replay">
        <name>Token Architectural Components</name>
        <artwork><![CDATA[
 Client          Attacker                  Origin
                       <------ TokenChallenge \
   <--- TokenChallenge                        |
    Token ---------->                         |
                       Token ---------------> /
]]></artwork>
      </figure>
      <t>Moreover, when a Client holds cross-origin tokens with empty contexts, it
is possible for any Origin in the cross-origin set to deplete that Client
set of tokens. To prevent this from happening, tokens can be scoped to single
Origins (with non-empty origin_info) such that they can only be redeemed for
a single Origin. Alternatively, if tokens are cross-Origin, Clients can use
alternate methods to prevent many tokens from being redeemed at once. For
example, if the Origin requests an excess of tokens, the Client could choose to
not present any tokens for verification if a redemption had already
occurred in a given time window.</t>
      <t>Token challenges that include non-empty origin_info bind tokens to one or more
specific origins. As described in <xref target="challenge"/>, clients only accept such
challenges from origin names listed in the origin_info string. Even if multiple
origins are listed, a token can only be redeemed for an origin if the challenge
has an exact match for the origin_info. For example, if "a.example.com" issues
a challenge with an origin_info string of "a.example.com,b.example.com", a
client could redeem a token fetched for this challenge if and only if
"b.example.com" also included an origin_info string of
"a.example.com,b.example.com". On the other hand, if "b.example.com" had an
origin_info string of "b.example.com" or "b.example.com,a.example.com" or
"a.example.com,b.example.com,c.example.com", the string would not match and the
client would need to use a different token.</t>
      <t>Context-bound token challenges require clients to obtain matching tokens when
challenged, rather than presenting a token that was obtained from a different
context in the past. This can make it more likely that issuance and redemption
events will occur at approximately the same time. For example, if a client is
challenged for a token with a unique context at time T1 and then subsequently
obtains a token at time T2, a colluding issuer and origin can link this to the
same client if T2 is unique to the client. This linkability is less feasible as
the number of issuance events at time T2 increases. Depending on the "max-age"
token challenge parameter, clients MAY try to augment the time between getting
challenged then redeeming a token so as to make this sort of linkability more
difficult. For more discussion on correlation risks between token issuance and
redemption, see <xref target="ARCHITECTURE"/>.</t>
      <t>As discussed in <xref target="challenge"/>, clients SHOULD discard any context-bound tokens
upon flushing cookies or changing networks, to prevent an origin using the
redemption context state as a cookie to recognize clients.</t>
      <t>Applications SHOULD constrain tokens to a single origin unless the use case can
accommodate such replay attacks. Replays are also possible if the client
redeems a token sent as part of 0-RTT data. If successful token redemption
produces side effects, origins SHOULD implement an anti-replay mechanism to
mitigate the harm of such replays. See <xref section="8" sectionFormat="comma" target="TLS13"/> and
<xref section="9.2" sectionFormat="comma" target="RFC9001"/> for details about anti-replay mechanisms, as well as
<xref section="3" sectionFormat="comma" target="RFC8470"/> for discussion about safety considerations for 0-RTT
HTTP data.</t>
      <t>All random values in the challenge and token MUST be generated using a
cryptographically secure source of randomness.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <section anchor="authentication-scheme">
        <name>Authentication Scheme</name>
        <t>This document registers the "PrivateToken" authentication scheme in the
"Hypertext Transfer Protocol (HTTP) Authentication Scheme Registry" defined
in <xref section="16.4" sectionFormat="comma" target="RFC9110"/>.</t>
        <t>Authentication Scheme Name: PrivateToken</t>
        <t>Pointer to specification text: <xref target="challenge-redemption"/> of this document</t>
      </section>
      <section anchor="token-types">
        <name>Token Type Registry</name>
        <t>IANA is requested to create a new "Privacy Pass Token Type" registry in a new
"Privacy Pass Parameters" page to list identifiers for issuance protocols
defined for use with the Privacy Pass token authentication scheme. These
identifiers are two-byte values, so the maximum possible value is
0xFFFF = 65535.</t>
        <t>Template:</t>
        <ul spacing="normal">
          <li>Value: The two-byte identifier for the algorithm</li>
          <li>Name: Name of the issuance protocol</li>
          <li>Token Structure: The contents of the Token structure</li>
          <li>TokenChallenge Structure: The contents of the TokenChallenge structure</li>
          <li>Publicly Verifiable: A Y/N value indicating if the output tokens are
publicly verifiable</li>
          <li>Public Metadata: A Y/N value indicating if the output tokens can contain
public metadata.</li>
          <li>Private Metadata: A Y/N value indicating if the output tokens can contain
private metadata.</li>
          <li>Nk: The length in bytes of an output authenticator</li>
          <li>Nid: The length of the token key identifier</li>
          <li>Reference: Where this algorithm is defined</li>
          <li>Notes: Any notes associated with the entry</li>
        </ul>
        <t>New entries in this registry are subject to the Specification Required
registration policy (<xref section="4.6" sectionFormat="comma" target="RFC8126"/>). Designated experts need to
ensure that the token type is sufficiently clearly defined to be used for both
token issuance and redemption, and meets the common security and privacy
requirements for issuance protocols defined in <xref section="3.2" sectionFormat="of" target="ARCHITECTURE"/>.</t>
        <t>This registry also will also allow provisional registrations to allow for
experimentation with protocols being developed. Designated experts review,
approve, and revoke provisional registrations.</t>
        <t>Values 0xFF00-0xFFFF are reserved for private use, to enable proprietary uses
and limited experimentation.</t>
        <t>This document defines several Reserved values, which can be used by clients
and servers to send "greased" values in token challenges and responses to
ensure that implementations remain able to handle unknown token types
gracefully (this technique is inspired by <xref target="RFC8701"/>). Implemenations SHOULD
select reserved values at random when including them in greased messages.
Servers can include these in TokenChallenge structures, either as the only
challenge when no real token type is desired, or as one challenge in a list of
challenges that include real values. Clients can include these in Token
structures when they are not able to present a real token response. The
contents of the Token structure SHOULD be filled with random bytes when
using greased values.</t>
        <t>The initial contents for this registry consist of the following Values.
For each Value, the Name is "RESERVED", the Publicly Verifiable, Public
Metadata, Private Metadata, Nk, and Nid attributes are all assigned "N/A",
the Reference is this document, and the Notes attribute is "None". The
iniital list of Values is as follows:</t>
        <ul spacing="normal">
          <li>0x0000</li>
          <li>0x02AA</li>
          <li>0x1132</li>
          <li>0x2E96</li>
          <li>0x3CD3</li>
          <li>0x4473</li>
          <li>0x5A63</li>
          <li>0x6D32</li>
          <li>0x7F3F</li>
          <li>0x8D07</li>
          <li>0x916B</li>
          <li>0xA6A4</li>
          <li>0xBEAB</li>
          <li>0xC3F3</li>
          <li>0xDA42</li>
          <li>0xE944</li>
          <li>0xF057</li>
        </ul>
        <t>Additionally, the registry is to be initialized with the following entry
for Private Use.</t>
        <ul spacing="normal">
          <li>Value: 0xFF00-0xFFFF</li>
          <li>Name: Private Use</li>
          <li>Token Structure: As defined in <xref target="redemption"/></li>
          <li>TokenChallenge Structure: As defined in <xref target="challenge"/></li>
          <li>Publicly Verifiable: N/A</li>
          <li>Public Metadata: N/A</li>
          <li>Private Metadata: N/A</li>
          <li>Nk: N/A</li>
          <li>Nid: N/A</li>
          <li>Reference: This document</li>
          <li>Notes: None</li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes. </t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="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="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="TLS13">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson">
              <organization/>
            </author>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes.  It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="ARCHITECTURE">
          <front>
            <title>The Privacy Pass Architecture</title>
            <author fullname="Alex Davidson" initials="A." surname="Davidson">
              <organization>LIP</organization>
            </author>
            <author fullname="Jana Iyengar" initials="J." surname="Iyengar">
              <organization>Fastly</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="2" month="May" year="2023"/>
            <abstract>
              <t>   This document specifies the Privacy Pass architecture and
   requirements for its constituent protocols used for constructing
   privacy-preserving authentication mechanisms.  It provides
   recommendations on how the architecture should be deployed to ensure
   the privacy of clients and the security of all participating
   entities.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-architecture-12"/>
        </reference>
        <reference anchor="ISSUANCE">
          <front>
            <title>Privacy Pass Issuance Protocol</title>
            <author fullname="Sofia Celi" initials="S." surname="Celi">
              <organization>Brave Software</organization>
            </author>
            <author fullname="Alex Davidson" initials="A." surname="Davidson">
              <organization>Brave Software</organization>
            </author>
            <author fullname="Armando Faz-Hernandez" initials="A." surname="Faz-Hernandez">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Steven Valdez" initials="S." surname="Valdez">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="6" month="March" year="2023"/>
            <abstract>
              <t>   This document specifies two variants of the two-message issuance
   protocol for Privacy Pass tokens: one that produces tokens that are
   privately verifiable using the issuance private key, and another that
   produces tokens that are publicly verifiable using the issuance
   public key.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-protocol-10"/>
        </reference>
        <reference anchor="COOKIES">
          <front>
            <title>Cookies: HTTP State Management Mechanism</title>
            <author fullname="Steven Bingler" initials="S." surname="Bingler">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Mike West" initials="M." surname="West">
              <organization>Google LLC</organization>
            </author>
            <author fullname="John Wilander" initials="J." surname="Wilander">
              <organization>Apple, Inc</organization>
            </author>
            <date day="7" month="November" year="2022"/>
            <abstract>
              <t>   This document defines the HTTP Cookie and Set-Cookie header fields.
   These header fields can be used by HTTP servers to store state
   (called cookies) at HTTP user agents, letting the servers maintain a
   stateful session over the mostly stateless HTTP protocol.  Although
   cookies have many historical infelicities that degrade their security
   and privacy, the Cookie and Set-Cookie header fields are widely used
   on the Internet.  This document obsoletes RFC 6265.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-rfc6265bis-11"/>
        </reference>
        <reference anchor="RFC9001">
          <front>
            <title>Using TLS to Secure QUIC</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <author fullname="S. Turner" initials="S." role="editor" surname="Turner">
              <organization/>
            </author>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes how Transport Layer Security (TLS) is used to secure QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9001"/>
          <seriesInfo name="DOI" value="10.17487/RFC9001"/>
        </reference>
        <reference anchor="RFC8470">
          <front>
            <title>Using Early Data in HTTP</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="W. Tarreau" initials="W." surname="Tarreau">
              <organization/>
            </author>
            <date month="September" year="2018"/>
            <abstract>
              <t>Using TLS early data creates an exposure to the possibility of a replay attack.  This document defines mechanisms that allow clients to communicate with servers about HTTP requests that are sent in early data.  Techniques are described that use these mechanisms to mitigate the risk of replay.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8470"/>
          <seriesInfo name="DOI" value="10.17487/RFC8470"/>
        </reference>
        <reference anchor="RFC8701">
          <front>
            <title>Applying Generate Random Extensions And Sustain Extensibility (GREASE) to TLS Extensibility</title>
            <author fullname="D. Benjamin" initials="D." surname="Benjamin">
              <organization/>
            </author>
            <date month="January" year="2020"/>
            <abstract>
              <t>This document describes GREASE (Generate Random Extensions And Sustain Extensibility), a mechanism to prevent extensibility failures in the TLS ecosystem. It reserves a set of TLS protocol values that may be advertised to ensure peers correctly handle unknown values.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8701"/>
          <seriesInfo name="DOI" value="10.17487/RFC8701"/>
        </reference>
      </references>
    </references>
    <section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>This section includes test vectors for the HTTP authentication scheme specified
in this document. It consists of the following types of test vectors:</t>
      <ol spacing="normal" type="1"><li>Test vectors for the challenge and redemption protocols. Implementations can
use these test vectors for verifying code that builds and encodes
TokenChallenge structures, as well as code that produces a well-formed Token
bound to a TokenChallenge.</li>
        <li>Test vectors for the HTTP headers used for authentication. Implementations
can use these test vectors for validating whether they parse HTTP
authentication headers correctly to produce TokenChallenge structures and the
other associated parameters, such as the token-key and max-age values.</li>
      </ol>
      <section anchor="challenge-and-redemption-structure-test-vectors">
        <name>Challenge and Redemption Structure Test Vectors</name>
        <t>This section includes test vectors for the challenge and redemption
functionalities described in <xref target="challenge"/> and <xref target="redemption"/>. Each test vector
lists the following values:</t>
        <ul spacing="normal">
          <li>token_type: The type of token issuance protocol, a value from
<xref target="token-types"/>. For these test vectors, token_type is 0x0002, corresponding
to the issuance protocol in <xref target="ISSUANCE"/>.</li>
          <li>issuer_name: The name of the issuer in the TokenChallenge structure,
represented as a hexadecimal string.</li>
          <li>redemption_context: The redemption context in the TokenChallenge structure,
represented as a hexadecimal string.</li>
          <li>origin_info: The origin info in the TokenChallenge structure, represented as
a hexadecimal string.</li>
          <li>nonce: The nonce in the Token structure, represented as a hexadecimal string.</li>
          <li>token_key: The public token-key, encoded based on the corresponding token
type, represented as a hexadecimal string.</li>
          <li>token_authenticator_input: The values in the Token structure used to compute
the Token authenticator value, represented as a hexadecimal string.</li>
        </ul>
        <t>Test vectors are provided for each of the following TokenChallenge
configurations:</t>
        <ul spacing="normal">
          <li>TokenChallenge with a single origin and non-empty redemption context</li>
          <li>TokenChallenge with a single origin and empty redemption context</li>
          <li>TokenChallenge with an empty origin and redemption context</li>
          <li>TokenChallenge with an empty origin and non-empty redemption context</li>
          <li>TokenChallenge with a multiple origins and non-empty redemption context</li>
        </ul>
        <t>These test vectors are below.</t>
        <artwork><![CDATA[
token_type: 2
issuer_name: 6973737565722e6578616d706c65
redemption_context:
9d262778b3dc2be365d667b03f9cca99efd049e76eb53a6de37120ca34da373b
origin_info: 6f726967696e2e6578616d706c65
nonce:
86ed4bb9f76ab1107a05a9af4aa4eec84dd02f390f9bf5ef14730e0ee15aa92d
token_key_id:
f861220ad4241ee0e33eb4a486a32f05af05ee33fcfdd1104c665eb827c20621
token_authenticator_input: 000286ed4bb9f76ab1107a05a9af4aa4eec84d
d02f390f9bf5ef14730e0ee15aa92df099ea46d6c892cdbc8513586fa8518a6d6
3f28fe4da6f8ddd2a46a405c14488f861220ad4241ee0e33eb4a486a32f05af05
ee33fcfdd1104c665eb827c20621

token_type: 2
issuer_name: 6973737565722e6578616d706c65
redemption_context:
origin_info: 6f726967696e2e6578616d706c65
nonce:
86ed4bb9f76ab1107a05a9af4aa4eec84dd02f390f9bf5ef14730e0ee15aa92d
token_key_id:
f861220ad4241ee0e33eb4a486a32f05af05ee33fcfdd1104c665eb827c20621
token_authenticator_input: 000286ed4bb9f76ab1107a05a9af4aa4eec84d
d02f390f9bf5ef14730e0ee15aa92d11e15c91a7c2ad02abd66645802373db1d8
23bea80f08d452541fb2b62b5898bf861220ad4241ee0e33eb4a486a32f05af05
ee33fcfdd1104c665eb827c20621

token_type: 2
issuer_name: 6973737565722e6578616d706c65
redemption_context:
origin_info:
nonce:
86ed4bb9f76ab1107a05a9af4aa4eec84dd02f390f9bf5ef14730e0ee15aa92d
token_key_id:
f861220ad4241ee0e33eb4a486a32f05af05ee33fcfdd1104c665eb827c20621
token_authenticator_input: 000286ed4bb9f76ab1107a05a9af4aa4eec84d
d02f390f9bf5ef14730e0ee15aa92db741ec1b6fd05f1e95f8982906aec161289
6d9ca97d53eef94ad3c9fe023f7a4f861220ad4241ee0e33eb4a486a32f05af05
ee33fcfdd1104c665eb827c20621

token_type: 2
issuer_name: 6973737565722e6578616d706c65
redemption_context:
9d262778b3dc2be365d667b03f9cca99efd049e76eb53a6de37120ca34da373b
origin_info:
nonce:
86ed4bb9f76ab1107a05a9af4aa4eec84dd02f390f9bf5ef14730e0ee15aa92d
token_key_id:
f861220ad4241ee0e33eb4a486a32f05af05ee33fcfdd1104c665eb827c20621
token_authenticator_input: 000286ed4bb9f76ab1107a05a9af4aa4eec84d
d02f390f9bf5ef14730e0ee15aa92dda5366799e0facc5cf9ea3dfc4a6f57072c
31fff84e7331919ebdb06445b2c50f861220ad4241ee0e33eb4a486a32f05af05
ee33fcfdd1104c665eb827c20621

token_type: 2
issuer_name: 6973737565722e6578616d706c65
redemption_context:
9d262778b3dc2be365d667b03f9cca99efd049e76eb53a6de37120ca34da373b
origin_info:
6f726967696e2e6578616d706c652c6f726967696e322e6578616d706c65
nonce:
86ed4bb9f76ab1107a05a9af4aa4eec84dd02f390f9bf5ef14730e0ee15aa92d
token_key_id:
f861220ad4241ee0e33eb4a486a32f05af05ee33fcfdd1104c665eb827c20621
token_authenticator_input: 000286ed4bb9f76ab1107a05a9af4aa4eec84d
d02f390f9bf5ef14730e0ee15aa92df7eeba1bd7c550a8184bee32ce66e6fb527
17aa67da7e0ca32f4cdca9dec7130f861220ad4241ee0e33eb4a486a32f05af05
ee33fcfdd1104c665eb827c20621
]]></artwork>
      </section>
      <section anchor="http-header-test-vectors">
        <name>HTTP Header Test Vectors</name>
        <t>This section includes test vectors the contents of the HTTP authentication
headers. Each test vector consists of one or more challenges that comprise
a WWW-Authenticate header. For each challenge, the token-type, token-key,
max-age, and token-challenge parameters are listed. Each challenge also
includes an unknown (not specified) parameter that implementations are meant
to ignore.</t>
        <t>The parameters for each challenge are indexed by their position
in the WWW-Authentication challenge list. For example, token-key-0 denotes
the token-key parameter for the first challenge in the list, whereas
token-key-1 denotes the token-key for the second challenge in the list.</t>
        <t>The resulting wire-encoded WWW-Authentication header based on this
list of challenges is then listed at the end.</t>
        <artwork><![CDATA[
token-type-0: 0x0002
token-key-0: 30820152303d06092a864886f70d01010a3030a00d300b060960864
8016503040202a11a301806092a864886f70d010108300b060960864801650304020
2a2030201300382010f003082010a0282010100cb1aed6b6a95f5b1ce013a4cfcab2
5b94b2e64a23034e4250a7eab43c0df3a8c12993af12b111908d4b471bec31d4b6c9
ad9cdda90612a2ee903523e6de5a224d6b02f09e5c374d0cfe01d8f529c500a78a2f
67908fa682b5a2b430c81eaf1af72d7b5e794fc98a3139276879757ce453b526ef9b
f6ceb99979b8423b90f4461a22af37aab0cf5733f7597abe44d31c732db68a181c6c
bbe607d8c0e52e0655fd9996dc584eca0be87afbcd78a337d17b1dba9e828bbd81e2
91317144e7ff89f55619709b096cbb9ea474cead264c2073fe49740c01f00e109106
066983d21e5f83f086e2e823c879cd43cef700d2a352a9babd612d03cad02db134b7
e225a5f0203010001
max-age-0: 10
token-challenge-0: 0002000e6973737565722e6578616d706c65208a3e83a33d9
8005d2f30bef419fa6bf4cd5c6005e36b1285bbb4ccd40fa4b383000e6f726967696
e2e6578616d706c65

WWW-Authenticate: PrivateToken challenge="AAIADmlzc3Vlci5leGFtcGxlII
o-g6M9mABdLzC-9Bn6a_TNXGAF42sShbu0zNQPpLODAA5vcmlnaW4uZXhhbXBsZQ==",
 token-key="MIIBUjA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCAqEaMBgGCSqG
SIb3DQEBCDALBglghkgBZQMEAgKiAwIBMAOCAQ8AMIIBCgKCAQEAyxrta2qV9bHOATpM
_KsluUsuZKIwNOQlCn6rQ8DfOowSmTrxKxEZCNS0cb7DHUtsmtnN2pBhKi7pA1I-beWi
JNawLwnlw3TQz-Adj1KcUAp4ovZ5CPpoK1orQwyB6vGvcte155T8mKMTknaHl1fORTtS
bvm_bOuZl5uEI7kPRGGiKvN6qwz1cz91l6vkTTHHMttooYHGy75gfYwOUuBlX9mZbcWE
7KC-h6-814ozfRex26noKLvYHikTFxROf_ifVWGXCbCWy7nqR0zq0mTCBz_kl0DAHwDh
CRBgZpg9IeX4PwhuLoI8h5zUPO9wDSo1Kpur1hLQPK0C2xNLfiJaXwIDAQAB",unknow
nChallengeAttribute="ignore-me", max-age="10"

token-type-0: 0x0002
token-key-0: 30820152303d06092a864886f70d01010a3030a00d300b060960864
8016503040202a11a301806092a864886f70d010108300b060960864801650304020
2a2030201300382010f003082010a0282010100cb1aed6b6a95f5b1ce013a4cfcab2
5b94b2e64a23034e4250a7eab43c0df3a8c12993af12b111908d4b471bec31d4b6c9
ad9cdda90612a2ee903523e6de5a224d6b02f09e5c374d0cfe01d8f529c500a78a2f
67908fa682b5a2b430c81eaf1af72d7b5e794fc98a3139276879757ce453b526ef9b
f6ceb99979b8423b90f4461a22af37aab0cf5733f7597abe44d31c732db68a181c6c
bbe607d8c0e52e0655fd9996dc584eca0be87afbcd78a337d17b1dba9e828bbd81e2
91317144e7ff89f55619709b096cbb9ea474cead264c2073fe49740c01f00e109106
066983d21e5f83f086e2e823c879cd43cef700d2a352a9babd612d03cad02db134b7
e225a5f0203010001
max-age-0: 10
token-challenge-0: 0002000e6973737565722e6578616d706c65208a3e83a33d9
8005d2f30bef419fa6bf4cd5c6005e36b1285bbb4ccd40fa4b383000e6f726967696
e2e6578616d706c65
token-type-1: 0x0001
token-key-1: ebb1fed338310361c08d0c7576969671296e05e99a17d7926dfc28a
53fabd489fac0f82bca86249a668f3a5bfab374c9
max-age-1: 10
token-challenge-1: 0001000e6973737565722e6578616d706c65208a3e83a33d9
8005d2f30bef419fa6bf4cd5c6005e36b1285bbb4ccd40fa4b383000e6f726967696
e2e6578616d706c65

WWW-Authenticate: PrivateToken challenge="AAIADmlzc3Vlci5leGFtcGxlII
o-g6M9mABdLzC-9Bn6a_TNXGAF42sShbu0zNQPpLODAA5vcmlnaW4uZXhhbXBsZQ==",
 token-key="MIIBUjA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCAqEaMBgGCSqG
SIb3DQEBCDALBglghkgBZQMEAgKiAwIBMAOCAQ8AMIIBCgKCAQEAyxrta2qV9bHOATpM
_KsluUsuZKIwNOQlCn6rQ8DfOowSmTrxKxEZCNS0cb7DHUtsmtnN2pBhKi7pA1I-beWi
JNawLwnlw3TQz-Adj1KcUAp4ovZ5CPpoK1orQwyB6vGvcte155T8mKMTknaHl1fORTtS
bvm_bOuZl5uEI7kPRGGiKvN6qwz1cz91l6vkTTHHMttooYHGy75gfYwOUuBlX9mZbcWE
7KC-h6-814ozfRex26noKLvYHikTFxROf_ifVWGXCbCWy7nqR0zq0mTCBz_kl0DAHwDh
CRBgZpg9IeX4PwhuLoI8h5zUPO9wDSo1Kpur1hLQPK0C2xNLfiJaXwIDAQAB",unknow
nChallengeAttribute="ignore-me", max-age="10", PrivateToken challeng
e="AAEADmlzc3Vlci5leGFtcGxlIIo-g6M9mABdLzC-9Bn6a_TNXGAF42sShbu0zNQPp
LODAA5vcmlnaW4uZXhhbXBsZQ==", token-key="67H-0zgxA2HAjQx1dpaWcSluBem
aF9eSbfwopT-r1In6wPgryoYkmmaPOlv6s3TJ",unknownChallengeAttribute="ig
nore-me", max-age="10"
]]></artwork>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1963bbyLXm/3oKjPrHuBNSIXinEyeHlm+Kbcm25HZ3ZzI+
BaAgIiIBNgBKpt3Os8yzzJPNvtQNICm7c3qtkzWJvGxTBFCXXbv29auNbrcr
6qxeqvvB5UIFr8rsRsbb4JWsquDZ5eWrYL6pFyqvs1jWWZEHF/FCrZSQUVSq
m/vN+5u3iqSIc7mChpNSpnU3U3XaXfP9a7i9K+H2bkXtdcOegKfUVVFu7wdV
nQiRrcv7QV1uqrrf6816fXGttrdFmdwPTvNalbmqu4+wXSGqWubJe7kscuhr
qyqxzu4Hf6mLuBNURVmXKq3g03aFH/4qBHZblPdF0BUB/GR5BVM/hhlsllv6
hgd9WaxWW+/bory6H8zX66WCAcTH9F0Fjav6fnCeK33plSyvg3eSH4mzGmZz
slmrss7yohOcyGWWFmWeyWA26oVDvqvY5DVO+22e1SoJLmogRBUUaTBfqRKI
SXeplcyWQJA1Dug/JHZ2HBerxiwujoPv5DJRH71pXNTqRuX+9zSRp0VxBcN9
8eLEb726odv+I16UxSrbrI7h3kYPJ8fB/Dh4VxSJ18XJosyqulgvVNm4Sh2d
LItNki5lqfyOYnn7Hwsl11l+FWV1dQyrKUS32w1kBDSVMfx2uciqAFhoswKW
ChKVZjlQRebMlbLJlcxFQb2QNbSdB5EKNhXQMtoG8TKDGytRF0GpEqVWTZ6t
i2uVV8FtVi+w8aLMrrL8ODjlduSyKvzG+DI+JeKFXC5VfqVMD/BlsC5VhcPF
R+NYrWsZLdWeDo95tqssSZZKiG+Qp8si2cQ0m0/fZN6vn4XYN2KgaLDJl1l+
TX14BCnKapcSMGKZF/l2VWyq5TbgTZB9hAf1+IN7lVLi06c/zd+cPDu9fHxy
+fbN4wen3UfHuxu3jBfAqnG9KdXnz98ei0s3pCuVq1LWTC4aapBV1UaVsAdh
ajDIIJJVRvzdXMSOkDUwfs2/AKlh98KaAklvMhg0EJSXehPDSlVwcXkD7APj
P5m/ujx5Bpw311MR66KqVFXhZb7djiQgYtFKFTeaYbI6uJXuypWqzQOChp50
iD2KDXy/XBa32CzOo1TLLX5ey7LeauYy13gg/1OvlriH3zHzfIt94LJRv8h2
eA07knmsghQ6AO54lKWpKnFZ6u1atalVIDU3NL/E3WiJTQ3BBEEEFsuqI3w+
gInu4abjg/sNxNNqVdy168S9T5/+x5snJ7Mw7HWCC8XLFIbAGR3uq1bEIB0m
N9Gw8neN3pc3ssSFFtdZntCM9w/0RD8IQr+xBBkM957eoN+CuAIlASyjyVTj
7IyUgNVXJcjhFZJeMN3cdsZ2+Tsc12pN06FlgV3KPcUbEGgdKw3ss8JMChq3
TGdEyz5t6nq9Z8apxLt377refcho1brIKxWAyExAyKaZWibfHgeGEnirvgmH
rje/HVRjAGYJuX/bsuuehoiiwdzx0wY2pe5atLtek5hSJPCaU7NNw3YHvtN7
n0lm94WbP0iLcpPnZhAHmBnl0+nFxdv52ckB2WTu/Pz5mAwaZAFgJS2YWWDo
xmHIubhrtigvwGhQZUkCFPdOmzGwk6wShtuwjUjVtwo5isUqshPPGpurFsUt
3sK7/O9//3sgZXVzJX7b1T+/De78cfeJn4Nzbvbnux/5WS9W8DP18tuv7IXv
E9zC1/38LPTDQZuF0ZwCwp3Y5e52//jzL2s7+N3vgjebfTyBl/+gydLkXt1t
0O06sv2yCcEKiU/3g2/S7KoLCqO8ydRtQPbygyM7m67ldU9imOGR6DgCJQ7C
QyZJRheBmcCWvUZ2pN35FVLcF2GioD6g+y0ouPUarNwKxTtyujYPWNSCQoZN
UcQZaWTqinmxGy+KCjdgAZz7QUvTaq3iLM1iw69o3lXHwZuWkKWmzU5hKYzy
W+ieUdtA69A8bDXbJAp1O7wObiWwYcsCti5KOJSXmZ5DDPICTIqFwvnQPCvW
GXSXo1Si1stiS9pqVSRqaQywG7pYbECdd6H7PIGxg20B3btWogIoYTctGAL3
CjSllJOaoELwETCZut594h500E1VDcuQfOt00jffBJeqBO1fLIurLSpTFYC/
gosMquzo5duLy6MO/x+cndPnN49fvz198/gRfr54Nn/xwn4Q+o6LZ+dvXzxy
n9yTJ+cvXz4+e8QPw7dB4ytx9HL+A1zB8R+dv7o8PT+bvzhCeVc3dDxyR03m
Lc0QZlaTgSASVcVlFsEv8MzDk1f/9/+Ew4CVfD8MZ58/61+m4WQIv9wuaEVx
fXNgSP4V9v5WwBIrWZKkXS5hYddZLZGVpRGE4DLAWgvxNl+CvRbAqqjyNoOF
13yDtldz0CqPYbErt72ARSsJ64W9XL64EHnBFmSQgg+DA4Uvw8EDHO5wOP78
2Zkogx2rB9ivYvUDiwnrxoITicyiFj+dkjVrPtEmfaXHcsRsdkRC5whnyWYU
0fHTJ9+wRvUEPoYRCLiThe09LayZSeOAp1dFqdxmupXb6j64EAEPBlntfvBc
0S5dwX6CTbXcdQGMHbArQYEL4lLhRoQdm13lKnFuihahdmOAE0ybPysV0Qy3
k9755PoQ2a0nRWpTq8KOcEbGUVtDHLF54ls4rFs9Gwl+icBZZl0sLDV8L4PY
cGeCzJ0ruUVa+DS37QlPVGmZiB6IJwg9WjgpD8TIjWMSIetn5G1o1a+Njsqa
HDhuQxlB9gfPWgvTTuARqKHI9lEH3cbDERpwImNPP5kBgx5qzwHJqu1hWHce
wZ527zTzrR+jTewj3+4/OtaWyj5L2XeaNZWYg9x66JWF/u3j6HUG57jEUrcU
LCQaa7ECKZ00m2Injxoht1IugdeTLT0hwetYZprdhbyR2RL9wA46Z3b5nEFK
xrWxYnFEHmXREUZBll0rYLV8u99bot3c4pPbDKSjoQJREfhNxNg2WupL9H1L
cGmD1WZZZxhm0gyDVgFvPbfBiXka5Bd6UVDe4+qCXiQ969rn/YHXQXpC49ja
cXChlacdkqYSUGyjWCIBaYGfaR3Yq/OoY9xcO+i6lHnFm6XSlBTULJOB3CtP
qVexytEjrFCjlMp6W0Al46A5bY1b2JgkTBLnnhWbqwV+G6gPwFLAZ2gwwH1F
bglJe15muecfCM07Zni4bsA3sbHfpOcKuoEACxhe10objIJshYEWbCrfrCJg
ZbCDvKHTskOjzRY5kkFhDAyHmLCHDDZ5BmNGXRfoq9blkLtOh7jX9mCQP7zd
r6Xd0T4d5Tl6oEjEQoKllK1gLXGBiKu7dpeui2UWY8jn0Iw9w9REJMDiKDN1
04itYdDWLh0ZsMlNxhEsti+ayyzQ3Ahy2PhgBpRb2gMoWTWnGxIBNyuQiZ88
Rw0sF9RdxMdJVsUbulEAScA0od6AQDyPXWZDMugIEmnXkpgLJgN7QduD9JDz
eDx5/NkxCTGzbPeAHRgByWpij770lYE4sPW10NnVpHm83CQU32k6ZkKbUyAR
loXxTrIclQNLMRlhHOwWRSpYHUQKFCa3HIKgldm7iVj+etuDpLJ2XtjG2x/T
zRWvPUiaZKma9pGoZXWNllCI67vEzc2iVasMHhxLN+BzcOI2pfKGQ4rdBXy6
aLKDINHUQdLvxGIcFxxTt49UTYY/mk67uwr/r+pyY6WG1zSKvybxyTDWrGiM
Rt1Q128IjEd/yp7M9Vdqp7fWUhumgI0NWxEHTrtXO0kbtI5I63StPGexareW
ZxzxroaOYc0aSgCcOrVMWe2COqgoGOO7l77kdc8Jfu6YPalW7ECzKOnvprnM
FII1vk+xFcG/B5/I6d/A3g/H77XgeI9x1d9znmItUaAyS7zHUf0hPD7u/+9w
3A3/2LjFLfB7vS5/6B0fD/rNu3gK73Et8LJt6HNrIr+nMdIM7cB5O7PgM86D
rPQU2eY/cuM/ooh20O8Wca1qcuOu0MhB4oJKKMprEKw1jggkhV5vfA5uSIid
K9EIPlunSqcMbDTfmUCUYtooHmGprmBJQTkn2po9nZ/N9bfltgPsy/uKYtjo
8pw4GUqSZZNrCWA8DpoWWxhVQO4yuqdXOQhp4w+w+ZGYfcc84AhIgQwFBhhs
WIwiCw7VM+c1biWL/shbdk1OuAGZqcWYxOa6CS3MeDz4jFiAQWE3An5lKJiR
jZVufalj7qGtpm/DK8JTkYFVkRhb0ekU7M5kqDTb4PDQgActn32wTp5osYRZ
cDMZXIN6cYhRiC67vM7kyQMTfDJe2qkNr5LZvGMJcuqNPEY9NRMlxziKsQuc
Z7fjiZFcLIBPgKbcmPaTPHLdoomoAzOk1ymWYFqoSP+LQ+KUHlAfJJo29hFu
d5Wh8cguNAhFpNiaDAjU8+9Q69m51447iY8G/S4R1eiCZmrMkod2VJYIXhPO
HVBTRF7aZyqjyfRQjA76tFQVcwDfs4cBjIzWXLBn9Xd34+6S83QqAXyf5ewp
mWG2NycxjSf6drhld1uhAW4sMF8ndIR2kJiTPO85Qg+zWKs2o1TKUyyVvznE
Lm3a8vIrN4fQUhTYnZQlmhVbChDqkGorINHawPRg7cal6eA5dQ0SUABNq4El
mKE2fov5ONgOR50jl5XMt0gxYIq1BLbkjiwDwQf06vSYcQQ6b0AraE0EYHiM
yGHvArdbbqUd62ltQ6AOh7Umzt9oK2U3+RM7k+agUWqjbcIpcHCAoDOQ7FrV
2XaOOtqys2STlFgaDzflsstBwUSHJYfj4fRzW9kKZmWQAxlqOrfOZpaNMBMS
jFimYzLW3BM3IpqkW2NEKb86DubE8K1wzCszpeDefxLiheb4nxSaEMH+mMpx
n6Iq2DXLE81LWg6YDYFGlQh+2hTAHF1mKx3pMkJLi91E7x3ZvDnI0ub0hNUo
xj84enCElEGJB4uy40fw6Iwo0J4pCdMbVW5FMOyFJsKlMyRejL4EX18Cj9e1
jK9N25YDOPmmhw9NCo4h++a3sYXQbr+TQThqTCKHZ7zeREtMSsAWw6bJg9lJ
xVtryFhLVnA7d38fO5HFgU1/kZHu4iPxC/joi2wkvsRGv4iLxN1c9HVMZBda
vJz/gM0WIORqFiguCmSCP8ZkoICABmqY6IFvWgHZdZQZVc+m7hZpN6LJKBhB
nlUr5puV/NCVJFZ8FeWYj+0U4FgQd5UVhDaWUSm4lpCu1rqqKUIoooekIhDQ
jsZ3IAZcEdagbSGUOpu7q5nJqGBj3WCmRCB4bANGeKKdJT8sECBpCcNkeIwV
EBBElgnaeHK5OnLT7mC3sGIZKfTTnSQktWdMOTawnMR2sSId+dLz2uTXOWgW
4e7EJXYbuQOWF1IJ+96TAELS7aZDYbIsbbXVxttrx1tvECMuNvDvsiiuAwrS
oo7UjuJOvhr8OV9nueE+OJJRfHx8fNRxa/PgKOwP8Dt26N6uCUkQq2ytnQ5f
ZnZclI5Wk8B+u945cA8wlxIa1sHmLmhpbS06uILOw+it0XQV9zjPzlGCQd2q
5bLLgf/f69udF8YCOC6u8uwjeqHoV1lnzQhCmsjv8SJmo1KPyckI9E2QvOuZ
IL43ZeILNkyfkMgKDhoVvBeIoRPfLmnHFoBJYEg3jl6pzDiTboO6JiOLnBVT
CrJsImmU8IS9YXDcBhQMTTcl7QL0L8tMh7Y5Jd5YGfRthBkIhtUWHK31Z0TS
JkFn2scOwnjouePgifNROjZ94iXbkT14x/mRSiQq08YPuqCKJrkl4k1J2XTo
PdeKQ6stDRHEOC8myGFMYABrPiR+fXERxIhsTWnLYPbjRMYLlr1JYBPlRu2y
s5btRrj4IQpqnRW1A+WhkiiqKkMysFP0pR3uQl7CWtWexcCKZ2+mwqh4G5Fs
YA00RozCGB0Pz1j6QTYvOdMOA1at1ftnkFWdOx5LVLrzWH8wdCLOhq8XNE6K
yxs6eNzXBGxYJKMR58IpFrK+0k0e28wsbiDgfM6jFgShVpqO0HONz3c0jmO3
OWIsAxQDX4A2q01juX68pjHiHSmNyRRu1NZw4OmAXZulWwcBrXDVXSwi2ZDp
4wHEBFuIvgGTlopD/Lxxtd3qgv/o+d1KAgORVNisOMAudKjBQnkYHdMBS+0D
pf53eb4NL3JTF27qHC/JlYXfaIENfVXAYsvjpmTXidM1JZYw4SHM824OiJUC
McA2wj0vvEImhu7Lc+0x6mfCYqmsag7eM7G/pbASSjqE8+NntkPTrKxqX/6L
Zl6NRgmipTYSS+cZMT3zTfDG7dITHew48YP1n77ZGyvaG5HeE/jfK2Vs0JIV
i77VSwhfZTcqPxQ/8KKf+ppJBgpYyK7Ji+UFbQ07anSf0EcY9JHxqgXsLReJ
KkFUwzUdUTrlzBxZjOCd6Yw0QrJJEXkcY5xm1qIuyYaIbb3SPoOxBQ76hG1m
Ly1i8NJF6Vk6loilMlhJmjwpMhPP+LCQYPcCwciiN2vohRE1MTPcPSDfi9v7
boX3LlkFIvHi2bw/Gt8zatF7GhTc3m40DZZFrDGHX98JP3n6CjEpJVofHKk6
1NPOhIiud3csAq/rO2bXCe4YjZjnOkG0Z0Z6Pdw4863hlO0BPhGvOARAAHZC
6gUGqUdAYZal2oZqb6JrpdbMk6KNbWSR3B6hDgdiJtdY48zSCDiH5g1AmdSy
u21/U74eb4xdt4nczZuy09iVe4wCeBx3EupOTHJWDFFAFtdJbAbUACVdGsOi
FYyxhsckzO475bZLiVCiA2OjZRT7RrOC3UQB1roojb0PTjuZo4Q+wfiLAZ7A
HOtsKZx7qj6ss1KaIZUahLeT711w2mindxDxx+q4g36Fw0CRsvZY2aYDSHE2
7jLwHrY8i5usCVzZ45LwcrcTsEQEgybIEF5LI2b6+XEQhZlW0OtMZsFk1pEt
WoyWiWSse2bmtWJagQUSF8hLHzKzWbJKaLJzp+wHelMuDlMR2BM8HMpxF6La
xDgNzuRW2xwPdeUMy7A7AMmFSj/TBq/PM24ylCPmvPCJg23pUxsmCVOQVj/3
fDlKyWiHTqY1GQQNpLwGJLKR4D9JE6y0YuCNx0pbgyq0mwEqWvsOzYCKzVo6
6BEP0iDLODeyk3xHlAA0iJYITAwJkm7IVQYSmWQfwz5QNvLZFGDYSmFow6oy
EqrG4RHuYI9BQjSue6uoQVioe3ePyMibIksEila0rNBVwCYY74Yd5whL50ne
ZHJ/HFM7aCbVyrQi8ePnGck1JROU0vm067U81LnpvdiF+17kwLhIlFTt7Ekr
dTyAEm3KY7t+FqxFYojXww7YHiVxg6rMsDqE4kQyBXW51TtF86g1M5G5SOqi
xqL5HQfO51TSpCPFwodaae2lDSuDMGHclgFG+NtxDy4QDGhrKXCWkgPUSGGY
yA6jNngvsGB+UrKimfvao5LvNbXXe8/S3BV6Ag+/2QzRtx3LdjqMh+46RguZ
2AZvuKZDUZtqwbgLdp0JoiYo4B+D64rK9dOnP52cnz8/fXzhzuss6nodZVW3
TONxfzyCjwjLLghGl18xO1PerToWb42cd30TvMtMiUjjwoa3JGzJHlGBPRyp
IznMcCRzDToH72bJ1jQybODLLpuP6vJ8h0/fNMG12MqmXm9qHyvQSidUTYZ0
tq+BRdpjUt4BKTyeGbQhsHMLfmbcgg7tUbORIv2j88FAT5311KEScrYMDKTh
iBkWp9gYCwEbitaRwX3KswGs+Hr0DV6Yvte76y+D/l+bX9v5vk8ycOrq3Tu4
QbBB3mfJX86ypHW5cWzyL2fXf7VAnP8e/I1Gz4KdIRxtNWogbyUBdiDPBwEw
4jAAxgQqDgFgiPBHFrLAUzEYqwYuljdCt+09CmrhuJmw1cv1Fe3ikEDcmkSs
26Vt/aydl+bX33p5QM0EBnkAvGAWhkE4GYbXdCDRcnQryoxlBthhYDIX7Vy6
4QodAfd2BaMMPT9W7FPBMNgGS2oKnV3rsTYuGgFxo0o2h9ao8sm2ZUYVmmc0
NusfHbdo+t+74262TO47BqjOrjFXp+i8bi58C6B9+KUJBONd15xqYw+wnG0k
K9BQ3iDXUWypOYeOMFGPFv91HLpTc4cmXAPDQCEJjZz2j13sRS+0+EWDGcyB
aTSCvXwaM+ZucrqRMDX4BeHP+jBSwb/rrhyz+GKO+RdhFf7rUIVfE6nwpRzz
HCxEnXkMyCV3uSsvEQkm452r6x+S2IN4cqegzdkNWI4269YOzk6WC5rq/qkf
dnhJoTYPIzcSAg0lhHqrddC1EconmtvoP6u5J+aclo7DN/DXGg9B8dZMRtky
w0SdGTaHYd2WE82N6xx2D1bRQEryWpt0J3fNwRY8a2Yw54GPH4adgpZJrkMK
jTBSzidO8qShOyQn2HZQzk8KCwPsmiBV84AIuxqU+bOBSeE5n5U+Qc51KA5Z
PbS8pOkpdO0mq3GdaK21ntXIh33QR/94h4atmVN00aa2Q7fhWk4Z+v4DU8OL
h5NVcmtaBQnYOqliT3Zw4Q0qkAAT94/S+kEBWkX9eyUa1Q5s3IVXilzfSJnE
CLmZ9S0iKDUURDdia7XQA0eMD4Knjvxp2XXwE3sH11jo06P7p4DUM3CGvHCB
bjrBQpBF+KKD8YJY+QzRqqxiNwhRgJ1G0AVVy+9DVHBu/BHGvmqqUYKDxAud
MLL5CleTAhR9SlkQ69/Yygt6oduFDBhvRacE3+L5lFMv8EIFZuw5mBaazzI9
JR5vVVQhstDtlmZ1CQfmLUqDXzZHNmzMa+dAzUJlZeCHgugEN8fVKjJixVVR
JHtO1lzq0IVja70W7gijgUXCcyCNsppbyfKbYnlD/N3RRguKXV2XYo/Fc2pz
1hQB3Ac7ZZJQPrfUSTOePDGqKruOTHoMdsZ+3MEfgHAHm6UNLSlKr9L4dxoy
qtHIRhNJjpSA3Q4PGkmUtNgR6IZ8xDk/P8pC7q+FQPgohXtaq0cqlvCcyPSx
yw1hrcgybLSkbW0vTO8lDXifaNuhFSwzaAwSbwnzQRcIiuEu2kFL1A3x1oVZ
iezk9y+L+FpotDa5YCaj0NLtGC+vatCxnb2X/T2OVnYFrIsH8/DsNdJFVx3y
4SV1kUhQmyifDQ8S1sVwBM5CNHjg1CXDkSS1vGZPi85eYaAQ0UJ6C+q9jwfn
OZCa+D4C4yVuZVaTbYXxIwySRTK+5qQMR1k5CYcrRYNxg+ckT+EhgxEVg8zh
H/Tcm+pku49L3ngJTGGdIo3NWytrZWvThwjgzorTfegMAZ2vPLidaOezTVzO
Jg/M6cjWoVRKeGBQzx6wpvg6ge4M4MPuQFekRXM52dU6X85ZSfCR4nqJRxVp
tSjMSNE4grASLg9UwbKQib8l6W69yED0GwKR60JWmG2vHCRMsLHOMB4gNWgy
aYuCtIAVXobEleLQqlwuVckmDIuL1CJpvIwMWh874BUfl8fQSyJg7OW6U7ac
QUY7XIFeYuKBdjETdgjt0TIvqm3KhIi1PaTqGsLH9nMlyJONOWqzQxqCXsol
bdMtm868R40VZox2dj2ccjHs55ch2lNJQB1fHYMNxhKQxRuVLeNB6+Gzqnen
ya1/abqt0NjC0wO1cGcg7VIaCco0CFp2GiKxNrryAjGRl04ShVYO9B0b8gR7
IwMVT9ni2hA32zJaQC0sqMg4L9q0/paze8sIPNrolFpiWQUNF5uSlHMjOWq1
v7RHuR3UwdseFP4AGRdEJXg3xllwkSBWAmze7kMuV8Vy4x3K3nz8uOSKJnnC
de8c6qKpKqljhMAGi81KkgFUcqBDd8zBZDqia6kl9kDaNVbYwM7bh3nJ69s9
wCua/p07bktiLa9b7bJ/RZNDJElWEXheR7Z56K4emKn9Y5HSrM61I2EsdY1R
5pvQqSvw6GhM8KtSgU/jxZZ0NZya9Y8bDEU2ll4RRDwIqpcpKfgJw+DWKODa
hU1T2NhadeMcvKBsGXKAXx+BhJr1NHggZBvC7qqzK3Ngscyqa/JgPDg5bNyC
qvSxCaiP3huP0G2KRLCotrvuCjilMqZrpBYSvBCMK1DhGmNq4plZc86YyVUX
KOyFXzaulV8x8O9dQQbzI08MsbMfYUujbRjpTX0cvADzHHMezjLXDXJUFodi
gaE4kh2TXXilW3Y7CxqdvYQhom7b6czgLTWQqAGUtCnPN4qImViU7hFTMznS
wYh7LlYoWrFCU13k8ODQxblQ8aZEWXeipY5kLO6nbyoVd+PGlzpNU5lHWrCm
9jrcYFkB6zAgt4BeJP6ufXSwLwH2GEkF2RMUF0XUNf2/txmuxmIOXfNjLdjJ
nmPZTCMGd1gHziLIUFQYGJgOUNaUutZmoVeRyStNJ0zhOPszJzsHhrzzwypK
HKijpquztcMf/0voa+0LB8ux4b8c4nIl3f54R/m2AxfaTeh2ftco96aPJ+li
b/zI3FU+BbVxUqxArOJWwvpubotodLem3qLAhNLda+bjYGrRBj5j2v/cHPBn
Dea3hocfCVwIzGEM2hNTPqR22GvQbe7wFScHkCEWWKUrJ6/BwwU0TloyYMIa
jvdo4BbR7yfyv2VzwRjV2/0YA4wVWBjGuT4FO3dWyHJLMFHP/eYJ860dvygJ
6gJhDBhlQYbeMTOqxeMDQFqRKMwfY2wB95jwUapIaE12C3uiEyd8UCC1WgNv
1IvNPpoVvIIjNaYosBuHQRIbZzNLm2JjIRNTp0gUMeH1+KjlLgjQBEV2YP/G
tt+7UEGU5b7H753FFa34RkXZgkZRuEZe0mk0WmhtqiEf+I4bCx//EAIqA3eA
wx8bB/ePg8c41czBI4RfF4Yf7ziD6wCn+Q5m66gnwzzoEFGs8SDWtfLRKU3x
C60cyWP9KxbhPtKug/BjJc2K0v68SAE2GuhEjeY6rqoV81MLxuIfc69bhV1S
V4gvS8VRs+HGWbDk4OjEnaPDwltMIdJeWJeFadLqi1g4Fwfm37oZZtL8qiPb
N9w5qk7coqBOdNNhGxsz1Ygm7V6Y6lt8WccsN1S2suXCYqpnN7rsbzgTRfac
2yJCc4D79E4IEJDfPgmkA6uErQBn5PplahlKhyeyqT2jxr0xiha8Zy2r2hV3
gQFcE8CPYiMY011uA3vWSppMigez1MF48g9I9pBRjtU6P2QrDkba2APKod3t
4YW8vanuqYrciuRgRyTZLkOzShgniSoUvzlY14KJ4Lws+0CfgijFEjjbZLB1
NUDPi6R6ZLRjdsuP4bgv+y4waYPwujiZBqAjooi9avwVFUEKliypasnVVNwp
UUtgTVE3WNyDZAFXWEHIhz5jvtkcTt0pTe0llg2jYRCnLrlyz+ZqZTwk6seU
BbtSdU0lB9xS1AsNWeOS5YaclS5yzEzDQFF03WAy/tRJSyD/oUujrdNWHa2A
bF9QW0udkABfrLIjMqglx4DCB0Iy1KlVL5NOfLbPju3TQi3cGqrdfbkh0cSw
GcDaPhhax7cnnDpxJbv3GPwaYMsl1LHpJqxMDxZntUbfUfsreuychpTOVOS8
Q6PuknY9tT/M53YIqBtTyfbEQvLa5+zf0O/6wCgqBGtsNuIjgtnD7TU2Yujk
NnFEr/vm8jKAfiTFcR3eeAcRKXSyCrgJ3LBAgeCK62rXl7QJSIz4gBg0Nrg9
g4UmVcPFX0hOUnoTrUytNyr86rAKWBMCGe3Tpz8hjqHXC921GcIYGAKtajwk
quuc7R1E5XtxurnpcOLBIgamMbcduL1Kgu7eBk1/lG4lYjJ0kigKfIFwe/aq
dT2kHXyYK1VvsAkOm6VPwYu43K7r4qqU64UO7ZDjC7xBUTuCEVMvOmP5DRdx
2vGjM5nLz4SB3P9GmFYpXVMaqvoyhMbUA9G44qNnW3THcQ9dYsVIUHK2wm5w
Dyn07YGSp2904akjAz0SJCT2wFbGx0OWKHvbOaPXmvhDFuJVQWFV8oa0eayT
PjDQ+74o8qutfrY4LEMYD0V6iaFWM2agsB/2EIJWQdfAMCFhV6UXE/lHjfcj
uDaPbAUuCzgRzXstzqfCw/9cb5DPVlmgHHPl7sF7YSI1OqHlwnC7b2vYv84U
YsXkodcXlaK+LbheEnM71YHEdkEbZqvNykkpU2JJ9D48gZ/gQTAejQYj9IOA
7ks6Eit+w3XK+K1Gtuk9QEC5vMJTzosVPMILf9aq9NWslfwbTekLW2uOutBB
22ofSAtuMo+5GMfXPL8HZQINvSKUDWzk7zRcZ0lFmX/43ZnF0Nl6Rlqia0iy
c6hFoME6mCC2zdjGg5cgBlEO/bKG6TQ6h8FsB+iSSxZpvzF76tdpXrflt392
zdTUgLks55ONBA/KTWsN9BI+lCWNpwqv9AbXcbFcA3e/Made7wfvKD/GtSsN
F3lQS2y6gN6xSDSleuhM6u6JNYWvfxLiDLY0fsyMpKfNrzcyQRA20d+UQ4dc
NMTQG42fE/oR/lYXZb1n6rX3x04IDo/HhCl+pBCGRUOiZFhtARxCgzFsitRF
d+n8wwYNwIwMc7AZlCyXWwv6rN17k0zBfbFr9e0cf1kpVRsAGL13xkZp+WQX
iRjRqK6wX0410aeu5HufXqzVtiwvm8RGo0jnEc1pHD5VVvGZLZ/GlctsphRA
wnyirY/Lq+xGxbGnBCzJJQbX9lIfAU7qtiPI5brRB5PgS6De4VHAJHRhRpSK
vV5XC0c+KabD74yf4m1DhVEJcEN5GH4XA2ylcktHs6mSvSk81prUwbcFVVj2
CUZm4/1GlGv06/43czFgnZMtqF4x3+YSBJ7t03a6mS6chava/NqsU4xUXaE9
bZJOupysgYh6eQsBtlKs+NjcPXYWwfJjn5AKj1RrAqrCDLTtN+mFtJNOdZcN
W15UXKW1bNIEnUFt3VG4mIMy2p9Y4XQ1BewLDo7FhSYS4xdsQZ+KTKeDsMSO
zZrqk7Q5+NFenIrqJxecCG1ucF0JiKu3Vq0T/mRa6HyOOBR6pEZ5wo1S0geG
LzwwpTuHZuqSu1d3mXrx3pgt4A0lufiCNjYOBxURgIFrYewfhuc4DRvRZiX0
RDh9lOUZwoKd4rbROCtHdP0oe3zOlrn7Tjf0xOBT6AsOWp3xcVZ8zcfF4zff
0Ts+yLza1fod/aUw6rSzo2A7oBJZgICWQxewzKJNrYzzhx6MfuHD0dnv5kdc
msSqOEK5+Dvd5uZZs7kGacRnwCFHvABAHXzXh034admUVe3TNL0PPfjhD/35
nD6E4aBPH/qPZ2P6MDh5NKAPw+GEP4zmY/4wfqRvnjwZPKEP00e9CX2YheOH
9GE+ng/pw8PHc/7mZPCEH380H/Ljj2dDvudJbzQBz8B7S0RHYzOMUa3xdYYF
qDyS1eZulVmvI1uYVXlLgExrmjYktTU/vZv3GZvzlmrzvY07rcz2g17s5JBR
CSyxzyTUX+/Ycvw92mD6ExpW/NGzmhqqw9lIyDz8VkTErKEfeomgpu9AdhZl
pTVOZUoUGdg/Im/AgKV7rEl/xxsibVkx0X4dDr/zsVXxzXsTiyle4/fIlccv
942h6aTveS9U5fSFUVEYvdGgIvy33awrPYOnRVjQRpuMjqtBH/rNOOIOReAl
n10TNjYj/XpgWiB70PQWrl70D8zce1NJ5QzAHexlc+5Cp/IOzr1RO8ukzbcY
i6q4S9FacDMCh9rjtz4SaPowht9ij7TKtOa6OzXi4IbWJqYSCPyOGQrdOlUB
3v5JgxW8s6N2c/7jrH6IzYQr9JMRsuFw+o6ebMqR4+AxHYV2PYolbYvmnuBJ
khh3R7G0x80wsnag13shj4GNUhnU3UrhT3iCLV7oeB2hHCbt0e+0jt0FxkXa
V8oz+CWvEISZeUfZeWq7hcD3n6t2XIWltmw5HT5QKoE/PwCDxvqcAeU7obfd
Q9vc6b66K79ap16K7r6Pf6Oc3Ze6aXWCZfsOdEOHQTQNCZ67/6xfu8WD7dlT
fdymDjfY/dgJTFngxhsomycdGakcaIzqL+q4EUYA4q03eq2a0dq26WnOjOjj
jNi3vWvPgcivHJRoiGI07rgKipa+ZGTu6LTmmgqDXGOJfN++7+qkldNu5SHM
a/IOFQj6Bc380iZMVSKvif/Sw//QNFr1u6svt6Rfbli3l8zHXvkCtS8aQmg8
mwzgz2g8mvT7Cv6djsNxMumN4/FI7BEgYpb0x/3JZBoNkrgfqcF4lIzHk6g3
SGdxLGczlSa94UxNxioaDeQ4UYNJ2O/FcjBMJPQUiYaAGKeT/ng2nsBftdM9
73ExHatkGEWzdDKWURj2JrI3kjOZDqUcKhVPh0nS66eDWS+dRelIpSGY9T3V
UyocSTnra6y2PrF7X6TQRb/fk8mwPwwV3DcYqGgoh9OxHPRTaBr+KvgyjdMk
ge6G8Xg8UtG0P4n7vXE/FHfsWFQgXx6uuHu8aQ+oKIfjZBxPZ/04ieLpKByM
puNUwocp0HQsBml/miog6TidJknSh9vlsDeKw+FwOv2aGYo7p/ircsy/F/wL
Cx6G8CmehRI6lHCrjGBLjYejaa8PlE6iMJmK/iBSctpLe9NkOOqPhmEa9aNx
PxpNZ9Pon3jB/1XXNJrAuOIwGoM4HKWhmo1SWKn+rDeW8DUMfjoT42QGEnOS
jAZKpbOhTAbxLFWw6OlEDv/J1vRXFfv/qkyRyNEAqAbU6qUyjkdxCoJ+kKTx
EOT4aNKb9GMxCNM0nQ7VZDAIZ+FMRUnUGw+Ho6gfj3r/XzPFXaqhH/tXB7vD
+xflqHSiVCTDKJnEo1FPTsPpMIIB9WM1HqtxGo36ExFOpBxPEjlRSPp+OowT
WBww+ifh4FfgKCoI8Y1+fewzPob0i0MQ9Z6s9Z7Imz7mVO3GFBrRNv9dQO1s
ArpKJb7rQB6qmq0hiI2Tit7B4q45gmhcQ6HjNF55GO+stlcgxAGN9fi9gMuy
sq8KJBSxySXdo0NPJtD4bfutEu3EFHaxUpKqjOvDQDrF4I0j3ZkePZflifpg
i/pkJYIkKGxt6gK16JU1yujTu3ya4E1Lom4vSBTlrEUzyuVmY2JQXIe5kRnC
r7F1fYYUkZG24dA03Aqf2TOt9G6N/e1pwriy27dZqezrf/ZMVp+x8yIAWSVM
UsKvjVExJFJj0nW+W+WJ744RG3V793XYyZsTfDfoTfu9cNQf9AZJb9yb9eV0
DIY9yMBe0gvhj4QrPdnrJYNeL8I7xj24Q0x74XgEV4a9PpiRYQi3hdO9DUwb
D/rPib7sw0foH24Z4DjA6uzxiKDLPv0f9npxFEqVjKOxBNtmFIWxgifkME5j
GfXFKJoNI5DSQ4mTGKphH8TTRMloOIh7STqQ0zjsz2YDmYZ9kHzhDA3baDgJ
IxUPQvg4jmdCgoEEShOMphAGpdSsNwCaKFAkI9nvD6FzEI69mRrFg8kw6cVg
PIGtnI76M9CV0N1U9lMB+rY3TeV4Csay7EP/vXgaKuhXgkZJJtFITWbDNJ5N
5SAczPqT8XQym4wmsRqOBiA/x2CaRSIdxyqazWaTWTQdgi0OAnk4HIcwCpkO
QL5G0PkIVHY6Gc0mMlLDYTII48kADMHxVIbTMB7HIorUuDdJpnFPjfqqNx6N
0gTaHCfxCBR+LHuRmk5kGsUJjHwwmCThBGz/SM7UtD+NogSG3RezcBBOwM1T
EzATZuloNA5nk94sgpWMQZOA4zgZxsCo/fEQBPRkAF7ibDLsxb0QVlGFvVnY
G4veeDybDpJ+qMAsHYBTgRp32h/EMPc4gSVSwCg9cCuB3nIWoUMS9pPeIEb3
BBySwTCaCNXvj+Qo7SG3AD/0QiMIkYPDnmhJQuJ14HT4q+6yNPo9mLyaDoAC
yQw4ujdKQAMCbdJhOIN1jFCBjeIxXACLIwJLehRF0TCGcYNVNYwGyNrQhbMX
xK6nufvig4PvL5jPT+ePVsuP8eC7ZZyNlurpkzp++mF5eiqK7tX45Ww1f5i8
+HjSnT3Mx/L95dn3T+dPhv3qYhFteh/PXr9avzh/NJ+PbuLVMpfvhpsfv18s
ou8fVj++fvAA35xgd/6Do5enpw/f/m0+e3h1/dPiOns6u+09nL8ubl8+n5+9
nFdPT96dPL2YP1nOb1+fzH96LF8+vHp6cvHTU3FxGg0evX788OTR/MXDq+XV
4vrq4Y+vXz6eXz3P5renD1/Oz0/mr6dz7ODk6jl8fjzffihr2f/pu1n07Hx+
uX4p3j+vlpu31ebH56e3Z+evlyf5uHw9fZSeF7cXq8vyw/MPj388ObuAnT95
9OxtXa3q/Ky/frh4nk3W8/C0G6l3mfjzmbx9cZsvbweXrz9258nfwufx2/l6
WNz8ODp5tS6eh0X5+nb7cHzz9CauwY4ZXU5Xz19eXufy2TJMz99c1hciulm9
j843Py5Hm8enk+tXb54+zZ7fnI1/uv0Yxh9n4XJ8c315+ezZy7ouih+ePd1O
RlfpD7fnbzcPl9/PVj9G8bvHYvL8pLsYd6fhsPiYvlEf+uO8eP7i5odn2fXl
kw9vztP3Wfrdu6ffn0Qn77aT/Kc3vY8/9VaXJw8/vr9e9h7Nn90+WoiTNw+v
flxfzU7V98NXt4vNi+J0uhh9fPvqfHb76KIIn683Zbh48frV895J/8PZizT7
s/z+9vTR/PX84VGHtbhwcb65yXE/OGLt3F3he6P0xnlwFPaOxL/1w7/1w7/1
w3+vfvC2YKi3YOibnfcDFUVhqpIBNBf2BuMwBgbtxcAY0CA0C8w7VjCC2UyG
k2Qy64/Bze9PpRgNUiDXEJZGxuB99aMYtl5/OJPj8RTYfhTBZeBW4G5DrXAv
tUKiVvhPQa1/a9N/a9N/Um3a2c+Jgljx8QFW/EpOFHeyos+J48mzbu/j1Yd5
/9n8b68/hMlavosvlpuHaiXkk5m6iNLbYn3ZLcPTfHz76qrcFj9cr1by1fny
ZlwNLv9sJn9g7uKAKYHe5v8DbcXteJWZAAA=

-->

</rfc>
