<?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.17 (Ruby 3.0.2) -->
<?rfc docindent="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-quic-qlog-quic-events-06" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.14.2 -->
  <front>
    <title>QUIC event definitions for qlog</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-quic-events-06"/>
    <author initials="R." surname="Marx" fullname="Robin Marx" role="editor">
      <organization>Akamai</organization>
      <address>
        <email>rmarx@akamai.com</email>
      </address>
    </author>
    <author initials="L." surname="Niccolini" fullname="Luca Niccolini" role="editor">
      <organization>Meta</organization>
      <address>
        <email>lniccolini@meta.com</email>
      </address>
    </author>
    <author initials="M." surname="Seemann" fullname="Marten Seemann" role="editor">
      <organization>Protocol Labs</organization>
      <address>
        <email>martenseemann@gmail.com</email>
      </address>
    </author>
    <author initials="L." surname="Pardue" fullname="Lucas Pardue" role="editor">
      <organization>Cloudflare</organization>
      <address>
        <email>lucaspardue.24.7@gmail.com</email>
      </address>
    </author>
    <date year="2023" month="October" day="23"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document describes concrete qlog event definitions and their metadata for
QUIC events. These events can then be embedded in the higher level schema defined
in <xref target="QLOG-MAIN"/>.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <ul empty="true">
        <li>
          <t>Note to RFC editor: Please remove this section before publication.</t>
        </li>
      </ul>
      <t>Feedback and discussion are welcome at
<eref target="https://github.com/quicwg/qlog">https://github.com/quicwg/qlog</eref>. Readers are
advised to refer to the "editor's draft" at that URL for an up-to-date version
of this document.</t>
      <t>Concrete examples of integrations of this schema in
various programming languages can be found at
<eref target="https://github.com/quiclog/qlog/">https://github.com/quiclog/qlog/</eref>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>This document describes the values of the qlog name ("category" + "event") and
"data" fields and their semantics for the QUIC protocol (see
<xref target="QUIC-TRANSPORT"/>, <xref target="QUIC-RECOVERY"/>, and
<xref target="QUIC-TLS"/>) and some of its extensions (see
<xref target="QUIC-DATAGRAM"/> and <xref target="GREASEBIT"/>).</t>
      <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>
        <t>The event and data structure definitions in ths document are expressed
in the Concise Data Definition Language <xref target="CDDL"/> and its
extensions described in <xref target="QLOG-MAIN"/>.</t>
        <t>The following fields from <xref target="QLOG-MAIN"/> are imported and used: name, category,
type, data, group_id, protocol_type, importance, RawInfo, and time-related
fields.</t>
      </section>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>This document describes how the QUIC protocol is can be expressed in qlog using
the schema defined in <xref target="QLOG-MAIN"/>. QUIC protocol events are defined with a
category, a name (the concatenation of "category" and "event"), an "importance",
an optional "trigger", and "data" fields.</t>
      <t>Some data fields use complex datastructures. These are represented as enums or
re-usable definitions, which are grouped together on the bottom of this document
for clarity.</t>
      <t>When any event from this document is included in a qlog trace, the
"protocol_type" qlog array field <bcp14>MUST</bcp14> contain an entry with the value "QUIC".</t>
      <t>When the qlog "group_id" field is used, it is recommended to use QUIC's Original
Destination Connection ID (ODCID, the CID chosen by the client when first
contacting the server), as this is the only value that does not change over the
course of the connection and can be used to link more advanced QUIC packets (e.g.,
Retry, Version Negotiation) to a given connection. Similarly, the ODCID should be
used as the qlog filename or file identifier, potentially suffixed by the
vantagepoint type (For example, abcd1234_server.qlog would contain the server-side
trace of the connection with ODCID abcd1234).</t>
      <section anchor="raw-packet-and-frame-information">
        <name>Raw packet and frame information</name>
        <t>QUIC packets always include an AEAD authentication tag at the end.
In general, the length of the AEAD tag depends on the TLS cipher
suite, although all cipher suites used in QUIC v1 use a 16 byte tag.</t>
        <dl>
          <dt>Note:</dt>
          <dd>
            <t>As QUIC appends an authentication tag after the packet payload, the packet
header_lengths can be calculated as:</t>
          </dd>
          <dt/>
          <dd>
            <t>header_length = length - payload_length - 16</t>
          </dd>
          <dt/>
          <dd>
            <t>For UDP datagrams, the calculation is simpler:</t>
          </dd>
          <dt/>
          <dd>
            <t>header_length = length - payload_length</t>
          </dd>
          <dt>Note:</dt>
          <dd>
            <t>In some cases, the length fields are also explicitly reflected inside of packet
headers. For example, the QUIC STREAM frame has a "length" field indicating its
payload size. Similarly, the QUIC Long Header has a "length" field which is equal
to the payload length plus the packet number length. In these cases, those fields
are intentionally preserved in the event definitions. Even though this can lead to
duplicate data when the full RawInfo is logged, it allows a more direct mapping of
the QUIC specifications to qlog, making it easier for users to interpret.</t>
          </dd>
        </dl>
      </section>
      <section anchor="handling-unknown-connections">
        <name>Events not belonging to a single connection</name>
        <t>A single qlog event trace is typically associated with a single QUIC connection.
However, for several types of events (for example, a <xref target="quic-packetdropped"/>
event with trigger value of "connection_unknown"), it can be impossible to tie
them to a specific QUIC connection, especially on the server.</t>
        <t>There are various ways to handle these events, each making certain tradeoffs
between file size overhead, flexibility, ease of use, or ease of
implementation. Some options include:</t>
        <ul spacing="normal">
          <li>Log them in a separate endpoint-wide trace (or use a special group_id value)
not associated with a single connection.</li>
          <li>Log them in the most recently used trace.</li>
          <li>Use additional heuristics for connection identification (for example use the
four-tuple in addition to the Connection ID).</li>
          <li>Buffer events until they can be assigned to a connection (for example for
version negotiation and retry events).</li>
        </ul>
      </section>
    </section>
    <section anchor="quic-event-overview">
      <name>QUIC Event Overview</name>
      <t>QUIC connections consist of different phases and interaction events. In order to
model this, QUIC event types are divided into general categories: connectivity
(<xref target="conn-ev"/>), security (<xref target="sec-ev"/>), quic <xref target="quic-ev"/>, and recovery
<xref target="rec-ev"/>.</t>
      <t>As described in <xref section="3.4.2" sectionFormat="of" target="QLOG-MAIN"/>, the qlog "name" field is the
concatenation of category and type.</t>
      <t><xref target="quic-events"/> summarizes the name value of each event type that is defined in
this specification.</t>
      <table anchor="quic-events">
        <name>QUIC Events</name>
        <thead>
          <tr>
            <th align="left">Name value</th>
            <th align="left">Importance</th>
            <th align="left">Definition</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">connectivity:server_listening</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="connectivity-serverlistening"/></td>
          </tr>
          <tr>
            <td align="left">connectivity:connection_started</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="connectivity-connectionstarted"/></td>
          </tr>
          <tr>
            <td align="left">connectivity:connection_closed</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="connectivity-connectionclosed"/></td>
          </tr>
          <tr>
            <td align="left">connectivity:connection_id_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="connectivity-connectionidupdated"/></td>
          </tr>
          <tr>
            <td align="left">connectivity:spin_bit_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="connectivity-spinbitupdated"/></td>
          </tr>
          <tr>
            <td align="left">connectivity:connection_state_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="connectivity-connectionstateupdated"/></td>
          </tr>
          <tr>
            <td align="left">connectivity:mtu_updated</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="connectivity-mtuupdated"/></td>
          </tr>
          <tr>
            <td align="left">quic:version_information</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="quic-versioninformation"/></td>
          </tr>
          <tr>
            <td align="left">quic:alpn_information</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="quic-alpninformation"/></td>
          </tr>
          <tr>
            <td align="left">quic:parameters_set</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="quic-parametersset"/></td>
          </tr>
          <tr>
            <td align="left">quic:parameters_restored</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-parametersrestored"/></td>
          </tr>
          <tr>
            <td align="left">quic:packet_sent</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="quic-packetsent"/></td>
          </tr>
          <tr>
            <td align="left">quic:packet_received</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="quic-packetreceived"/></td>
          </tr>
          <tr>
            <td align="left">quic:packet_dropped</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-packetdropped"/></td>
          </tr>
          <tr>
            <td align="left">quic:packet_buffered</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-packetbuffered"/></td>
          </tr>
          <tr>
            <td align="left">quic:packets_acked</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-packetsacked"/></td>
          </tr>
          <tr>
            <td align="left">quic:datagrams_sent</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-datagramssent"/></td>
          </tr>
          <tr>
            <td align="left">quic:datagrams_received</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-datagramsreceived"/></td>
          </tr>
          <tr>
            <td align="left">quic:datagram_dropped</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-datagramdropped"/></td>
          </tr>
          <tr>
            <td align="left">quic:stream_state_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-streamstateupdated"/></td>
          </tr>
          <tr>
            <td align="left">quic:frames_processed</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="quic-framesprocessed"/></td>
          </tr>
          <tr>
            <td align="left">quic:stream_data_moved</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-streamdatamoved"/></td>
          </tr>
          <tr>
            <td align="left">quic:datagram_data_moved</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="quic-datagramdatamoved"/></td>
          </tr>
          <tr>
            <td align="left">security:key_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="security-keyupdated"/></td>
          </tr>
          <tr>
            <td align="left">security:key_discarded</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="security-keydiscarded"/></td>
          </tr>
          <tr>
            <td align="left">recovery:parameters_set</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="recovery-parametersset"/></td>
          </tr>
          <tr>
            <td align="left">recovery:metrics_updated</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="recovery-metricsupdated"/></td>
          </tr>
          <tr>
            <td align="left">recovery:congestion_state_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="recovery-congestionstateupdated"/></td>
          </tr>
          <tr>
            <td align="left">recovery:loss_timer_updated</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="recovery-losstimerupdated"/></td>
          </tr>
          <tr>
            <td align="left">recovery:packet_lost</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="recovery-packetlost"/></td>
          </tr>
          <tr>
            <td align="left">recovery:marked_for_retransmit</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="recovery-markedforretransmit"/></td>
          </tr>
          <tr>
            <td align="left">recovery:ecn_state_updated</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="recovery-ecnstateupdated"/></td>
          </tr>
        </tbody>
      </table>
      <t>QUIC events extend the <tt>$ProtocolEventBody</tt> extension point defined in
<xref target="QLOG-MAIN"/>.</t>
      <figure anchor="quicevents-def">
        <name>QuicEvents definition and ProtocolEventBody extension</name>
        <sourcecode type="cddl"><![CDATA[
QuicEvents = ConnectivityServerListening /
             ConnectivityConnectionStarted /
             ConnectivityConnectionClosed /
             ConnectivityConnectionIDUpdated /
             ConnectivitySpinBitUpdated /
             ConnectivityConnectionStateUpdated /
             ConnectivityMTUUpdated /
             SecurityKeyUpdated /
             SecurityKeyDiscarded /
             QUICVersionInformation /
             QUICALPNInformation /
             QUICParametersSet /
             QUICParametersRestored /
             QUICPacketSent /
             QUICPacketReceived /
             QUICPacketDropped /
             QUICPacketBuffered /
             QUICPacketsAcked /
             QUICDatagramsSent /
             QUICDatagramsReceived /
             QUICDatagramDropped /
             QUICStreamStateUpdated /
             QUICFramesProcessed /
             QUICStreamDataMoved /
             QUICDatagramDataMoved /
             RecoveryParametersSet /
             RecoveryMetricsUpdated /
             RecoveryCongestionStateUpdated /
             RecoveryLossTimerUpdated /
             RecoveryPacketLost

$ProtocolEventBody /= QuicEvents
]]></sourcecode>
      </figure>
    </section>
    <section anchor="conn-ev">
      <name>Connectivity events</name>
      <section anchor="connectivity-serverlistening">
        <name>server_listening</name>
        <t>Importance: Extra</t>
        <t>Emitted when the server starts accepting connections.</t>
        <t>Definition:</t>
        <figure anchor="connectivity-serverlistening-def">
          <name>ConnectivityServerListening definition</name>
          <sourcecode type="cddl"><![CDATA[
ConnectivityServerListening = {
    ? ip_v4: IPAddress
    ? ip_v6: IPAddress
    ? port_v4: uint16
    ? port_v6: uint16

    ; the server will always answer client initials with a retry
    ; (no 1-RTT connection setups by choice)
    ? retry_required: bool
}
]]></sourcecode>
        </figure>
        <t>Some QUIC stacks do not handle sockets directly and are thus unable to log
IP and/or port information.</t>
      </section>
      <section anchor="connectivity-connectionstarted">
        <name>connection_started</name>
        <t>Importance: Base</t>
        <t>Used for both attempting (client-perspective) and accepting (server-perspective)
new connections. Note that this event has overlap with connection_state_updated
and this is a separate event mainly because of all the additional data that should
be logged.</t>
        <t>Definition:</t>
        <figure anchor="connectivity-connectionstarted-def">
          <name>ConnectivityConnectionStarted definition</name>
          <sourcecode type="cddl"><![CDATA[
ConnectivityConnectionStarted = {
    ? ip_version: IPVersion
    src_ip: IPAddress
    dst_ip: IPAddress

    ; transport layer protocol
    ? protocol: text .default "QUIC"
    ? src_port: uint16
    ? dst_port: uint16
    ? src_cid: ConnectionID
    ? dst_cid: ConnectionID
}
]]></sourcecode>
        </figure>
        <t>Some QUIC stacks do not handle sockets directly and are thus unable to log
IP and/or port information.</t>
      </section>
      <section anchor="connectivity-connectionclosed">
        <name>connection_closed</name>
        <t>Importance: Base</t>
        <t>Used for logging when a connection was closed, typically when an error or timeout
occurred. Note that this event has overlap with
connectivity:connection_state_updated, as well as the CONNECTION_CLOSE frame.
However, in practice, when analyzing large deployments, it can be useful to have a
single event representing a connection_closed event, which also includes an
additional reason field to provide additional information. Additionally, it is
useful to log closures due to timeouts, which are difficult to reflect using the
other options.</t>
        <t>In QUIC there are two main connection-closing error categories: connection and
application errors. They have well-defined error codes and semantics. Next to
these however, there can be internal errors that occur that may or may not get
mapped to the official error codes in implementation-specific ways. As such,
multiple error codes can be set on the same event to reflect this.</t>
        <t>Definition:</t>
        <figure anchor="connectivity-connectionclosed-def">
          <name>ConnectivityConnectionClosed definition</name>
          <sourcecode type="cddl"><![CDATA[
ConnectivityConnectionClosed = {

    ; which side closed the connection
    ? owner: Owner
    ? connection_code: TransportError /
                       CryptoError /
                       uint32
    ? application_code: $ApplicationError /
                        uint32
    ? internal_code: uint32
    ? reason: text
    ? trigger:
        "clean" /
        "handshake_timeout" /
        "idle_timeout" /
        ; this is called the "immediate close" in the QUIC RFC
        "error" /
        "stateless_reset" /
        "version_mismatch" /
        ; for example HTTP/3's GOAWAY frame
        "application"
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="connectivity-connectionidupdated">
        <name>connection_id_updated</name>
        <t>Importance: Base</t>
        <t>This event is emitted when either party updates their current Connection ID. As
this typically happens only sparingly over the course of a connection, this event
allows loggers to be more efficient than logging the observed CID with each packet
in the .header field of the "packet_sent" or "packet_received" events.</t>
        <t>This is viewed from the perspective of the endpoint applying the new id. As such,
when the endpoint receives a new connection id from the peer, it will see the
dst_ fields are set. When the endpoint updates its own connection id
(e.g., NEW_CONNECTION_ID frame), it logs the src_ fields.</t>
        <t>Definition:</t>
        <figure anchor="connectivity-connectionidupdated-def">
          <name>ConnectivityConnectionIDUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
ConnectivityConnectionIDUpdated = {
    owner: Owner
    ? old: ConnectionID
    ? new: ConnectionID
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="connectivity-spinbitupdated">
        <name>spin_bit_updated</name>
        <t>Importance: Base</t>
        <t>To be emitted when the spin bit changes value. It <bcp14>SHOULD NOT</bcp14> be emitted if the
spin bit is set without changing its value.</t>
        <t>Definition:</t>
        <figure anchor="connectivity-spinbitupdated-def">
          <name>ConnectivitySpinBitUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
ConnectivitySpinBitUpdated = {
    state: bool
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="connectivity-connectionstateupdated">
        <name>connection_state_updated</name>
        <t>Importance: Base</t>
        <t>This event is used to track progress through QUIC's complex handshake and
connection close procedures. It is intended to provide exhaustive options to log
each state individually, but also provides a more basic, simpler set for
implementations less interested in tracking each smaller state transition. As
such, users should not expect to see -all- these states reflected in all qlogs and
implementers should focus on support for the SimpleConnectionState set.</t>
        <t>Definition:</t>
        <figure anchor="connectivity-connectionstateupdated-def">
          <name>ConnectivityConnectionStateUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
ConnectivityConnectionStateUpdated = {
    ? old: ConnectionState /
           SimpleConnectionState
    new: ConnectionState /
         SimpleConnectionState
}

ConnectionState =
    ; initial sent/received
    "attempted" /
    ; peer address validated by: client sent Handshake packet OR
    ; client used CONNID chosen by the server.
    ; transport-draft-32, section-8.1
    "peer_validated" /
    "handshake_started" /
    ; 1 RTT can be sent, but handshake isn't done yet
    "early_write" /
    ; TLS handshake complete: Finished received and sent
    ; tls-draft-32, section-4.1.1
    "handshake_complete" /
    ; HANDSHAKE_DONE sent/received (connection is now "active", 1RTT
    ; can be sent). tls-draft-32, section-4.1.2
    "handshake_confirmed" /
    "closing" /
    ; connection_close sent/received
    "draining" /
    ; draining period done, connection state discarded
    "closed"

SimpleConnectionState =
    "attempted" /
    "handshake_started" /
    "handshake_confirmed" /
    "closed"
]]></sourcecode>
        </figure>
        <t>These states correspond to the following transitions for both client and server:</t>
        <t><strong>Client:</strong></t>
        <ul spacing="normal">
          <li>
            <t>send initial
            </t>
            <ul spacing="normal">
              <li>state = attempted</li>
            </ul>
          </li>
          <li>
            <t>get initial
            </t>
            <ul spacing="normal">
              <li>state = validated <em>(not really "needed" at the client, but somewhat useful to indicate progress nonetheless)</em></li>
            </ul>
          </li>
          <li>
            <t>get first Handshake packet
            </t>
            <ul spacing="normal">
              <li>state = handshake_started</li>
            </ul>
          </li>
          <li>
            <t>get Handshake packet containing ServerFinished
            </t>
            <ul spacing="normal">
              <li>state = handshake_complete</li>
            </ul>
          </li>
          <li>
            <t>send ClientFinished
            </t>
            <ul spacing="normal">
              <li>state = early_write
  (1RTT can now be sent)</li>
            </ul>
          </li>
          <li>
            <t>get HANDSHAKE_DONE
            </t>
            <ul spacing="normal">
              <li>state = handshake_confirmed</li>
            </ul>
          </li>
        </ul>
        <t><strong>Server:</strong></t>
        <ul spacing="normal">
          <li>
            <t>get initial
            </t>
            <ul spacing="normal">
              <li>state = attempted</li>
            </ul>
          </li>
          <li>send initial <em>(TODO don't think this needs a separate state, since some handshake will always be sent in the same flight as this?)</em></li>
          <li>
            <t>send handshake EE, CERT, CV, ...
            </t>
            <ul spacing="normal">
              <li>state = handshake_started</li>
            </ul>
          </li>
          <li>
            <t>send ServerFinished
            </t>
            <ul spacing="normal">
              <li>state = early_write
  (1RTT can now be sent)</li>
            </ul>
          </li>
          <li>
            <t>get first handshake packet / something using a server-issued CID of min length
            </t>
            <ul spacing="normal">
              <li>state = validated</li>
            </ul>
          </li>
          <li>
            <t>get handshake packet containing ClientFinished
            </t>
            <ul spacing="normal">
              <li>state = handshake_complete</li>
            </ul>
          </li>
          <li>
            <t>send HANDSHAKE_DONE
            </t>
            <ul spacing="normal">
              <li>state = handshake_confirmed</li>
            </ul>
          </li>
        </ul>
        <dl>
          <dt>Note:</dt>
          <dd>
            <t>connection_state_changed with a new state of "attempted" is the same
conceptual event as the connection_started event above from the client's
perspective. Similarly, a state of "closing" or "draining" corresponds to the
connection_closed event.</t>
          </dd>
        </dl>
      </section>
      <section anchor="connectivity-mtuupdated">
        <name>mtu_updated</name>
        <t>Importance: Extra</t>
        <figure anchor="connectivity-mtuupdated-def">
          <name>ConnectivityMTUUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
ConnectivityMTUUpdated = {
  ? old: uint16
  new: uint16

  ; at some point, MTU discovery stops, as a "good enough"
  ; packet size has been found
  ? done: bool .default false
}
]]></sourcecode>
        </figure>
        <t>This event indicates that the estimated Path MTU was updated. This happens as
part of the Path MTU discovery process.</t>
      </section>
    </section>
    <section anchor="quic-ev">
      <name>QUIC events</name>
      <section anchor="quic-versioninformation">
        <name>version_information</name>
        <t>Importance: Core</t>
        <t>QUIC endpoints each have their own list of of QUIC versions they support. The
client uses the most likely version in their first initial. If the server does
support that version, it replies with a version_negotiation packet, containing
supported versions. From this, the client selects a version. This event aggregates
all this information in a single event type. It also allows logging of supported
versions at an endpoint without actual version negotiation needing to happen.</t>
        <t>Definition:</t>
        <figure anchor="quic-versioninformation-def">
          <name>QUICVersionInformation definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICVersionInformation = {
    ? server_versions: [+ QuicVersion]
    ? client_versions: [+ QuicVersion]
    ? chosen_version: QuicVersion
}
]]></sourcecode>
        </figure>
        <t>Intended use:</t>
        <ul spacing="normal">
          <li>When sending an initial, the client logs this event with client_versions and
chosen_version set</li>
          <li>Upon receiving a client initial with a supported version, the server logs this
event with server_versions and chosen_version set</li>
          <li>Upon receiving a client initial with an unsupported version, the server logs
this event with server_versions set and client_versions to the
single-element array containing the client's attempted version. The absence of
chosen_version implies no overlap was found.</li>
          <li>Upon receiving a version negotiation packet from the server, the client logs
this event with client_versions set and server_versions to the versions in
the version negotiation packet and chosen_version to the version it will use for
the next initial packet</li>
        </ul>
      </section>
      <section anchor="quic-alpninformation">
        <name>alpn_information</name>
        <t>Importance: Core</t>
        <t>QUIC implementations each have their own list of application level protocols and
versions thereof they support. The client includes a list of their supported
options in its first initial as part of the TLS Application Layer Protocol
Negotiation (alpn) extension. If there are common option(s), the server chooses
the most optimal one and communicates this back to the client. If not, the
connection is closed.</t>
        <t>Definition:</t>
        <figure anchor="quic-alpninformation-def">
          <name>QUICALPNInformation definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICALPNInformation = {
    ? server_alpns: [* text]
    ? client_alpns: [* text]
    ? chosen_alpn: text
}
]]></sourcecode>
        </figure>
        <t>Intended use:</t>
        <ul spacing="normal">
          <li>When sending an initial, the client logs this event with client_alpns set</li>
          <li>When receiving an initial with a supported alpn, the server logs this event with
server_alpns set, client_alpns equalling the client-provided list, and
chosen_alpn to the value it will send back to the client.</li>
          <li>When receiving an initial with an alpn, the client logs this event with
chosen_alpn to the received value.</li>
          <li>Alternatively, a client can choose to not log the first event, but wait for the
receipt of the server initial to log this event with both client_alpns and
chosen_alpn set.</li>
        </ul>
      </section>
      <section anchor="quic-parametersset">
        <name>parameters_set</name>
        <t>Importance: Core</t>
        <t>This event groups settings from several different sources (transport parameters,
TLS ciphers, etc.) into a single event. This is done to minimize the amount of
events and to decouple conceptual setting impacts from their underlying mechanism
for easier high-level reasoning.</t>
        <t>All these settings are typically set once and never change. However, they are
typically set at different times during the connection, so there will typically be
several instances of this event with different fields set.</t>
        <t>Note that some settings have two variations (one set locally, one requested by the
remote peer). This is reflected in the "owner" field. As such, this field <bcp14>MUST</bcp14> be
correct for all settings included a single event instance. If you need to log
settings from two sides, you <bcp14>MUST</bcp14> emit two separate event instances.</t>
        <t>In the case of connection resumption and 0-RTT, some of the server's parameters
are stored up-front at the client and used for the initial connection startup.
They are later updated with the server's reply. In these cases, utilize the
separate <tt>parameters_restored</tt> event to indicate the initial values, and this
event to indicate the updated values, as normal.</t>
        <t>Definition:</t>
        <figure anchor="quic-parametersset-def">
          <name>QUICParametersSet definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICParametersSet = {
    ? owner: Owner

    ; true if valid session ticket was received
    ? resumption_allowed: bool

    ; true if early data extension was enabled on the TLS layer
    ? early_data_enabled: bool

    ; e.g., "AES_128_GCM_SHA256"
    ? tls_cipher: text

    ; RFC9000
    ? original_destination_connection_id: ConnectionID
    ? initial_source_connection_id: ConnectionID
    ? retry_source_connection_id: ConnectionID
    ? stateless_reset_token: StatelessResetToken
    ? disable_active_migration: bool
    ? max_idle_timeout: uint64
    ? max_udp_payload_size: uint32
    ? ack_delay_exponent: uint16
    ? max_ack_delay: uint16
    ? active_connection_id_limit: uint32
    ? initial_max_data: uint64
    ? initial_max_stream_data_bidi_local: uint64
    ? initial_max_stream_data_bidi_remote: uint64
    ? initial_max_stream_data_uni: uint64
    ? initial_max_streams_bidi: uint64
    ? initial_max_streams_uni: uint64
    ? preferred_address: PreferredAddress

    ; RFC9221
    ? max_datagram_frame_size: uint64

    ; RFC9287
    ; true if present, absent or false if extension not negotiated
    ? grease_quic_bit: bool
}

PreferredAddress = {
    ip_v4: IPAddress
    ip_v6: IPAddress
    port_v4: uint16
    port_v6: uint16
    connection_id: ConnectionID
    stateless_reset_token: StatelessResetToken
}
]]></sourcecode>
        </figure>
        <t>Additionally, this event can contain any number of unspecified fields. This is to
reflect setting of for example unknown (greased) transport parameters or employed
(proprietary) extensions.</t>
      </section>
      <section anchor="quic-parametersrestored">
        <name>parameters_restored</name>
        <t>Importance: Base</t>
        <t>When using QUIC 0-RTT, clients are expected to remember and restore the server's
transport parameters from the previous connection. This event is used to indicate
which parameters were restored and to which values when utilizing 0-RTT. Note that
not all transport parameters should be restored (many are even prohibited from
being re-utilized). The ones listed here are the ones expected to be useful for
correct 0-RTT usage.</t>
        <t>Definition:</t>
        <figure anchor="quic-parametersrestored-def">
          <name>QUICParametersRestored definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICParametersRestored = {
    ? disable_active_migration: bool
    ? max_idle_timeout: uint64
    ? max_udp_payload_size: uint32
    ? active_connection_id_limit: uint32
    ? initial_max_data: uint64
    ? initial_max_stream_data_bidi_local: uint64
    ? initial_max_stream_data_bidi_remote: uint64,
    ? initial_max_stream_data_uni: uint64
    ? initial_max_streams_bidi: uint64
    ? initial_max_streams_uni: uint64
}
]]></sourcecode>
        </figure>
        <t>Note that, like parameters_set above, this event can contain any number of
unspecified fields to allow for additional/custom parameters.</t>
      </section>
      <section anchor="quic-packetsent">
        <name>packet_sent</name>
        <t>Importance: Core</t>
        <t>Definition:</t>
        <figure anchor="quic-packetsent-def">
          <name>QUICPacketSent definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICPacketSent = {
    header: PacketHeader
    ? frames: [* $QuicFrame]
    ? is_coalesced: bool .default false

    ; only if header.packet_type === "retry"
    ? retry_token: Token

    ; only if header.packet_type === "stateless_reset"
    ; is always 128 bits in length.
    ? stateless_reset_token: StatelessResetToken

    ; only if header.packet_type === "version_negotiation"
    ? supported_versions: [+ QuicVersion]
    ? raw: RawInfo
    ? datagram_id: uint32
    ? is_mtu_probe_packet: bool .default false

    ? trigger:
      ; draft-23 5.1.1
      "retransmit_reordered" /
      ; draft-23 5.1.2
      "retransmit_timeout" /
      ; draft-23 5.3.1
      "pto_probe" /
      ; draft-19 6.2
      "retransmit_crypto" /
      ; needed for some CCs to figure out bandwidth allocations
      ; when there are no normal sends
      "cc_bandwidth_probe"
}
]]></sourcecode>
        </figure>
        <t>The encryption_level and packet_number_space are not logged explicitly:
the header.packet_type specifies this by inference (assuming correct
implementation)</t>
        <t>For more details on "datagram_id", see <xref target="quic-datagramssent"/>. It is only needed
when keeping track of packet coalescing.</t>
      </section>
      <section anchor="quic-packetreceived">
        <name>packet_received</name>
        <t>Importance: Core</t>
        <t>Definition:</t>
        <figure anchor="quic-packetreceived-def">
          <name>QUICPacketReceived definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICPacketReceived = {
    header: PacketHeader
    ? frames: [* $QuicFrame]
    ? is_coalesced: bool .default false

    ; only if header.packet_type === "retry"
    ? retry_token: Token

    ; only if header.packet_type === "stateless_reset"
    ; Is always 128 bits in length.
    ? stateless_reset_token: StatelessResetToken

    ; only if header.packet_type === "version_negotiation"
    ? supported_versions: [+ QuicVersion]
    ? raw: RawInfo
    ? datagram_id: uint32

    ? trigger:
        ; if packet was buffered because it couldn't be
        ; decrypted before
        "keys_available"
}
]]></sourcecode>
        </figure>
        <t>The encryption_level and packet_number_space are not logged explicitly:
the header.packet_type specifies this by inference (assuming correct
implementation)</t>
        <t>For more details on "datagram_id", see <xref target="quic-datagramssent"/>. It is only needed
when keeping track of packet coalescing.</t>
      </section>
      <section anchor="quic-packetdropped">
        <name>packet_dropped</name>
        <t>Importance: Base</t>
        <t>This event indicates a QUIC-level packet was dropped.</t>
        <t>The trigger field indicates a general reason category for dropping the packet,
while the details field can contain additional implementation-specific
information.</t>
        <t>Definition:</t>
        <figure anchor="quic-packetdropped-def">
          <name>QUICPacketDropped definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICPacketDropped = {

    ; Primarily packet_type should be filled here,
    ; as other fields might not be decrypteable or parseable
    ? header: PacketHeader
    ? raw: RawInfo
    ? datagram_id: uint32
    ? details: {* text => any}
    ? trigger:
        "internal_error" /
        "rejected" /
        "unsupported" /
        "invalid" /
        "connection_unknown" /
        "decryption_failure" /
        "general"
}
]]></sourcecode>
        </figure>
        <t>Some example situations for each of the trigger categories include:</t>
        <ul spacing="normal">
          <li>internal_error: not initialized, out of memory</li>
          <li>rejected: limits reached, DDoS protection, unwilling to track more paths, duplicate packet</li>
          <li>unsupported: unknown or unsupported version. See also <xref target="handling-unknown-connections"/>.</li>
          <li>invalid: packet parsing or validation error</li>
          <li>connection_unknown: packet does not relate to a known connection or Connection ID</li>
          <li>decryption_failure: decryption key was unavailable, decryption failed</li>
          <li>general: situations not clearly covered in the other categories</li>
        </ul>
        <t>For more details on "datagram_id", see <xref target="quic-datagramssent"/>.</t>
      </section>
      <section anchor="quic-packetbuffered">
        <name>packet_buffered</name>
        <t>Importance: Base</t>
        <t>This event is emitted when a packet is buffered because it cannot be processed
yet. Typically, this is because the packet cannot be parsed yet, and thus only
the full packet contents can be logged when it was parsed in a packet_received
event.</t>
        <t>Definition:</t>
        <figure anchor="quic-packetbuffered-def">
          <name>QUICPacketBuffered definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICPacketBuffered = {

    ; primarily packet_type and possible packet_number should be
    ; filled here as other elements might not be available yet
    ? header: PacketHeader
    ? raw: RawInfo
    ? datagram_id: uint32
    ? trigger:
        ; indicates the parser cannot keep up, temporarily buffers
        ; packet for later processing
        "backpressure" /
        ; if packet cannot be decrypted because the proper keys were
        ; not yet available
        "keys_unavailable"
}
]]></sourcecode>
        </figure>
        <t>For more details on "datagram_id", see <xref target="quic-datagramssent"/>. It is only needed
when keeping track of packet coalescing.</t>
      </section>
      <section anchor="quic-packetsacked">
        <name>packets_acked</name>
        <t>Importance: Extra</t>
        <t>This event is emitted when a (group of) sent packet(s) is acknowledged by the
remote peer <em>for the first time</em>. This information could also be deduced from the
contents of received ACK frames. However, ACK frames require additional processing
logic to determine when a given packet is acknowledged for the first time, as QUIC
uses ACK ranges which can include repeated ACKs. Additionally, this event can be
used by implementations that do not log frame contents.</t>
        <t>Definition:</t>
        <figure anchor="quic-packetsacked-def">
          <name>QUICPacketsAcked definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICPacketsAcked = {
    ? packet_number_space: PacketNumberSpace
    ? packet_numbers: [+ uint64]
}
]]></sourcecode>
        </figure>
        <t>If packet_number_space is omitted, it assumes the default value of
PacketNumberSpace.application_data, as this is by far the most prevalent packet
number space a typical QUIC connection will use.</t>
      </section>
      <section anchor="quic-datagramssent">
        <name>datagrams_sent</name>
        <t>Importance: Extra</t>
        <t>When one or more UDP-level datagrams are passed to the socket. This is useful
for determining how QUIC packet buffers are drained to the OS.</t>
        <t>Definition:</t>
        <figure anchor="quic-datagramssent-def">
          <name>QUICDatagramsSent definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICDatagramsSent = {

    ; to support passing multiple at once
    ? count: uint16

    ; The RawInfo fields do not include the UDP headers,
    ; only the UDP payload
    ? raw: [+ RawInfo]

    ; ECN bits in the IP header
    ; if not set, defaults to the value used on the last
    ; QUICDatagramsSent event
    ? ecn: [+ ECN]

    ? datagram_ids: [+ uint32]
}
]]></sourcecode>
        </figure>
        <t>Since QUIC implementations rarely control UDP logic directly, the raw data
excludes UDP-level headers in all fields.</t>
        <t>The "datagram_id" is a qlog-specific concept to allow tracking of QUIC packet
coalescing inside UDP datagrams. Since QUIC generates many UDP datagrams, unique
identifiers are required to be able to track them individually in qlog traces.
However, neither UDP nor QUIC exchanges datagram identifiers on the wire.
Selecting identifier values is thus left to qlog implementations, which should
consider how to generate unique values within the scope of their created traces.</t>
      </section>
      <section anchor="quic-datagramsreceived">
        <name>datagrams_received</name>
        <t>Importance: Extra</t>
        <t>When one or more UDP-level datagrams are received from the socket. This is
useful for determining how datagrams are passed to the user space stack from
the OS.</t>
        <t>Definition:</t>
        <figure anchor="quic-datagramsreceived-def">
          <name>QUICDatagramsReceived definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICDatagramsReceived = {

    ; to support passing multiple at once
    ? count: uint16

    ; The RawInfo fields do not include the UDP headers,
    ; only the UDP payload
    ? raw: [+ RawInfo]

    ; ECN bits in the IP header
    ; if not set, defaults to the value on the last
    ; QUICDatagramsReceived event
    ? ecn: [+ ECN]

    ? datagram_ids: [+ uint32]
}
]]></sourcecode>
        </figure>
        <t>For more details on "datagram_ids", see <xref target="quic-datagramssent"/>.</t>
      </section>
      <section anchor="quic-datagramdropped">
        <name>datagram_dropped</name>
        <t>Importance: Extra</t>
        <t>When a UDP-level datagram is dropped. This is typically done if it does not
contain a valid QUIC packet. If it does, but the QUIC packet is dropped for
other reasons, packet_dropped (<xref target="quic-packetdropped"/>) should be used instead.</t>
        <t>Definition:</t>
        <figure anchor="quic-datagramdropped-def">
          <name>QUICDatagramDropped definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICDatagramDropped = {

    ; The RawInfo fields do not include the UDP headers,
    ; only the UDP payload
    ? raw: RawInfo
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="quic-streamstateupdated">
        <name>stream_state_updated</name>
        <t>Importance: Base</t>
        <t>This event is emitted whenever the internal state of a QUIC stream is updated, as
described in QUIC transport draft-23 section 3. Most of this can be inferred from
several types of frames going over the wire, but it's much easier to have explicit
signals for these state changes.</t>
        <t>Definition:</t>
        <figure anchor="quic-streamstateupdated-def">
          <name>QUICStreamStateUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
StreamType = "unidirectional" /
             "bidirectional"

QUICStreamStateUpdated = {
    stream_id: uint64

    ; mainly useful when opening the stream
    ? stream_type: StreamType
    ? old: StreamState
    new: StreamState
    ? stream_side: "sending" /
                   "receiving"
}

StreamState =
    ; bidirectional stream states, draft-23 3.4.
    "idle" /
    "open" /
    "half_closed_local" /
    "half_closed_remote" /
    "closed" /
    ; sending-side stream states, draft-23 3.1.
    "ready" /
    "send" /
    "data_sent" /
    "reset_sent" /
    "reset_received" /
    ; receive-side stream states, draft-23 3.2.
    "receive" /
    "size_known" /
    "data_read" /
    "reset_read" /
    ; both-side states
    "data_received" /
    ; qlog-defined:
    ; memory actually freed
    "destroyed"
]]></sourcecode>
        </figure>
        <t>QUIC implementations <bcp14>SHOULD</bcp14> mainly log the simplified bidirectional
(HTTP/2-alike) stream states (e.g., idle, open, closed) instead of the more
fine-grained stream states (e.g., data_sent, reset_received). These latter ones are
mainly for more in-depth debugging. Tools <bcp14>SHOULD</bcp14> be able to deal with both types
equally.</t>
      </section>
      <section anchor="quic-framesprocessed">
        <name>frames_processed</name>
        <t>Importance: Extra</t>
        <t>This event's main goal is to prevent a large proliferation of specific purpose
events (e.g., packets_acknowledged, flow_control_updated, stream_data_received).
Implementations have the opportunity to (selectively) log this type of
signal without having to log packet-level details (e.g., in packet_received).
Since for almost all cases, the effects of applying a frame to the internal state
of an implementation can be inferred from that frame's contents, these events
are aggregated into this single "frames_processed" event.</t>
        <t>This event can be used to signal internal state change not resulting
directly from the actual "parsing" of a frame (e.g., the frame could have been
parsed, data put into a buffer, then later processed, then logged with this
event).</t>
        <t>Implementations logging "packet_received" and which include all of the
packet's constituent frames therein, are not expected to emit this
"frames_processed" event. Rather, implementations not wishing to log full packets
or that wish to explicitly convey extra information about when frames are
processed (if not directly tied to their reception) can use this event.</t>
        <t>Note that for some events, this approach will lose some information (e.g., for which
encryption level are packets being acknowledged?). If this information is
important, the packet_received event can be used instead.</t>
        <t>In some implementations, it can be difficult to log frames directly, even
when using packet_sent and packet_received events. For these cases, this event
also contains the packet_numbers field, which can be used to more explicitly
link this event to the packet_sent/received events. The field is an array, which
supports using a single "frames_processed" event for multiple frames received
over multiple packets. To map between frames and packets, the position and order
of entries in the "frames" and "packet_numbers" is used. If the optional "packet_numbers"
field is used, each frame <bcp14>MUST</bcp14> have a corresponding packet number at the same
index.</t>
        <t>Definition:</t>
        <figure anchor="quic-framesprocessed-def">
          <name>QUICFramesProcessed definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICFramesProcessed = {
    frames: [* $QuicFrame]
    ? packet_numbers: [* uint64]
}
]]></sourcecode>
        </figure>
        <t>For example, an instance of this event that represents four STREAM frames
received over two packets would have the fields serialized as:</t>
        <artwork><![CDATA[
"frames":[
  {"frame_type":"stream","stream_id":0,"offset":0,"length":500},
  {"frame_type":"stream","stream_id":0,"offset":500,"length":200},
  {"frame_type":"stream","stream_id":1,"offset":0,"length":300},
  {"frame_type":"stream","stream_id":1,"offset":300,"length":50}
  ],
"packet_numbers":[
  1,
  1,
  2,
  2
]
]]></artwork>
      </section>
      <section anchor="quic-streamdatamoved">
        <name>stream_data_moved</name>
        <t>Importance: Base</t>
        <t>Used to indicate when QUIC stream data moves between the different layers (for
example passing from the application protocol (e.g., HTTP) to QUIC stream
buffers and vice versa) or between the application protocol (e.g., HTTP) and the
actual user application on top (for example a browser engine). This helps make
clear the flow of data, how long data remains in various buffers and the
overheads introduced by individual layers.</t>
        <t>For example, this helps make clear whether received data on a QUIC stream is
moved to the application protocol immediately (for example per received packet)
or in larger batches (for example, all QUIC packets are processed first and
afterwards the application layer reads from the streams with newly available
data). This in turn can help identify bottlenecks, flow control issues or
scheduling problems.</t>
        <t>This event is only for data in QUIC streams. For data in QUIC Datagram Frames,
see <xref target="quic-datagramdatamoved"/>.</t>
        <t>Definition:</t>
        <figure anchor="quic-streamdatamoved-def">
          <name>QUICStreamDataMoved definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICStreamDataMoved = {
    ? stream_id: uint64
    ? offset: uint64

    ; byte length of the moved data
    ? length: uint64
    ? from: "user" /
            "application" /
            "transport" /
            "network" /
            text
    ? to: "user" /
          "application" /
          "transport" /
          "network" /
          text
    ? raw: RawInfo
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="quic-datagramdatamoved">
        <name>datagram_data_moved</name>
        <t>Importance: Base</t>
        <t>Used to indicate when QUIC Datagram Frame data (see <xref target="RFC9221"/>) moves between
the different layers (for example passing from the application protocol (e.g.,
WebTransport) to QUIC Datagram Frame buffers and vice versa) or between the
application protocol and the actual user application on top (for example a
gaming engine or media playback software). This helps make clear the flow of
data, how long data remains in various buffers and the overheads introduced by
individual layers.</t>
        <t>For example, this helps make clear whether received data in a QUIC Datagram
Frame is moved to the application protocol immediately (for example per received
packet) or in larger batches (for example, all QUIC packets are processed first
and afterwards the application layer reads all Datagrams at once). This in turn
can help identify bottlenecks or scheduling problems.</t>
        <t>This event is only for data in QUIC Datagram Frames. For data in QUIC streams,
see <xref target="quic-streamdatamoved"/>.</t>
        <t>Definition:</t>
        <figure anchor="quic-datagramdatamoved-def">
          <name>QUICDatagramDataMoved definition</name>
          <sourcecode type="cddl"><![CDATA[
QUICDatagramDataMoved = {
    ; byte length of the moved data
    ? length: uint64
    ? from: "user" /
            "application" /
            "transport" /
            "network" /
            text
    ? to: "user" /
          "application" /
          "transport" /
          "network" /
          text
    ? raw: RawInfo
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="sec-ev">
      <name>Security Events</name>
      <section anchor="security-keyupdated">
        <name>key_updated</name>
        <t>Importance: Base</t>
        <t>Definition:</t>
        <figure anchor="security-keyupdated-def">
          <name>SecurityKeyUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
SecurityKeyUpdated = {
    key_type: KeyType
    ? old: hexstring
    ? new: hexstring

    ; needed for 1RTT key updates
    ? generation: uint32
    ? trigger:
        ; (e.g., initial, handshake and 0-RTT keys
        ; are generated by TLS)
        "tls" /
        "remote_update" /
        "local_update"
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="security-keydiscarded">
        <name>key_discarded</name>
        <t>Importance: Base</t>
        <t>Definition:</t>
        <figure anchor="security-keydiscarded-def">
          <name>SecurityKeyDiscarded definition</name>
          <sourcecode type="cddl"><![CDATA[
SecurityKeyDiscarded = {
    key_type: KeyType
    ? key: hexstring

    ; needed for 1RTT key updates
    ? generation: uint32
    ? trigger:
        ; (e.g., initial, handshake and 0-RTT keys
        ; are generated by TLS)
        "tls" /
        "remote_update" /
        "local_update"
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="rec-ev">
      <name>Recovery events</name>
      <t>Most of the events in this category are kept generic to support different
recovery approaches and various congestion control algorithms. Tool creators
<bcp14>SHOULD</bcp14> make an effort to support and visualize even unknown data in these events
(e.g., plot unknown congestion states by name on a timeline visualization).</t>
      <section anchor="recovery-parametersset">
        <name>parameters_set</name>
        <t>Importance: Base</t>
        <t>This event groups initial parameters from both loss detection and congestion
control into a single event. All these settings are typically set once and never
change. Implementation that do, for some reason, change these parameters during
execution, <bcp14>MAY</bcp14> emit the parameters_set event twice.</t>
        <t>Definition:</t>
        <figure anchor="recovery-parametersset-def">
          <name>RecoveryParametersSet definition</name>
          <sourcecode type="cddl"><![CDATA[
RecoveryParametersSet = {

    ; Loss detection, see recovery draft-23, Appendix A.2
    ; in amount of packets
    ? reordering_threshold: uint16

    ; as RTT multiplier
    ? time_threshold: float32

    ; in ms
    timer_granularity: uint16

    ; in ms
    ? initial_rtt:float32

    ; congestion control, Appendix B.1.
    ; in bytes. Note that this could be updated after pmtud
    ? max_datagram_size: uint32

    ; in bytes
    ? initial_congestion_window: uint64

    ; Note that this could change when max_datagram_size changes
    ; in bytes
    ? minimum_congestion_window: uint64
    ? loss_reduction_factor: float32

    ; as PTO multiplier
    ? persistent_congestion_threshold: uint16
}
]]></sourcecode>
        </figure>
        <t>Additionally, this event can contain any number of unspecified fields to support
different recovery approaches.</t>
      </section>
      <section anchor="recovery-metricsupdated">
        <name>metrics_updated</name>
        <t>Importance: Core</t>
        <t>This event is emitted when one or more of the observable recovery metrics changes
value. This event <bcp14>SHOULD</bcp14> group all possible metric updates that happen at or
around the same time in a single event (e.g., if min_rtt and smoothed_rtt change
at the same time, they should be bundled in a single metrics_updated entry, rather
than split out into two). Consequently, a metrics_updated event is only guaranteed
to contain at least one of the listed metrics.</t>
        <t>Definition:</t>
        <figure anchor="recovery-metricsupdated-def">
          <name>RecoveryMetricsUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
RecoveryMetricsUpdated = {

    ; Loss detection, see recovery draft-23, Appendix A.3
    ; all following rtt fields are expressed in ms
    ? min_rtt: float32
    ? smoothed_rtt: float32
    ? latest_rtt: float32
    ? rtt_variance: float32
    ? pto_count: uint16

    ; Congestion control, Appendix B.2.
    ; in bytes
    ? congestion_window: uint64
    ? bytes_in_flight: uint64

    ; in bytes
    ? ssthresh: uint64

    ; qlog defined
    ; sum of all packet number spaces
    ? packets_in_flight: uint64

    ; in bits per second
    ? pacing_rate: uint64
}
]]></sourcecode>
        </figure>
        <t>In order to make logging easier, implementations <bcp14>MAY</bcp14> log values even if they are the
same as previously reported values (e.g., two subsequent RecoveryMetricsUpdated entries can
both report the exact same value for min_rtt). However, applications <bcp14>SHOULD</bcp14> try to
log only actual updates to values.</t>
        <t>Additionally, this event can contain any number of unspecified fields to support
different recovery approaches.</t>
      </section>
      <section anchor="recovery-congestionstateupdated">
        <name>congestion_state_updated</name>
        <t>Importance: Base</t>
        <t>This event signifies when the congestion controller enters a significant new state
and changes its behaviour. This event's definition is kept generic to support
different Congestion Control algorithms. For example, for the algorithm defined in
the Recovery draft ("enhanced" New Reno), the following states are defined:</t>
        <ul spacing="normal">
          <li>slow_start</li>
          <li>congestion_avoidance</li>
          <li>application_limited</li>
          <li>recovery</li>
        </ul>
        <t>Definition:</t>
        <figure anchor="recovery-congestionstateupdated-def">
          <name>RecoveryCongestionStateUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
RecoveryCongestionStateUpdated = {
    ? old: text
    new: text
    ? trigger:
        "persistent_congestion" /
        "ECN"
}
]]></sourcecode>
        </figure>
        <t>The "trigger" field <bcp14>SHOULD</bcp14> be logged if there are multiple ways in which a state change
can occur but <bcp14>MAY</bcp14> be omitted if a given state can only be due to a single event
occurring (e.g., slow start is exited only when ssthresh is exceeded).</t>
      </section>
      <section anchor="recovery-losstimerupdated">
        <name>loss_timer_updated</name>
        <t>Importance: Extra</t>
        <t>This event is emitted when a recovery loss timer changes state. The three main
event types are:</t>
        <ul spacing="normal">
          <li>set: the timer is set with a delta timeout for when it will trigger next</li>
          <li>expired: when the timer effectively expires after the delta timeout</li>
          <li>cancelled: when a timer is cancelled (e.g., all outstanding packets are
acknowledged, start idle period)</li>
        </ul>
        <t>In order to indicate an active timer's timeout update, a new "set" event is used.</t>
        <t>Definition:</t>
        <figure anchor="recovery-losstimerupdated-def">
          <name>RecoveryLossTimerUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
RecoveryLossTimerUpdated = {

    ; called "mode" in draft-23 A.9.
    ? timer_type: "ack" /
                  "pto"
    ? packet_number_space: PacketNumberSpace
    event_type: "set" /
                "expired" /
                "cancelled"

    ; if event_type === "set": delta time is in ms from
    ; this event's timestamp until when the timer will trigger
    ? delta: float32
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="recovery-packetlost">
        <name>packet_lost</name>
        <t>Importance: Core</t>
        <t>This event is emitted when a packet is deemed lost by loss detection. It is
<bcp14>RECOMMENDED</bcp14> to populate the optional "trigger" field in order to help
disambiguate among the various possible causes of a loss declaration.</t>
        <t>Definition:</t>
        <figure anchor="recovery-packetlost-def">
          <name>RecoveryPacketLost definition</name>
          <sourcecode type="cddl"><![CDATA[
RecoveryPacketLost = {

    ; should include at least the packet_type and packet_number
    ? header: PacketHeader

    ; not all implementations will keep track of full
    ; packets, so these are optional
    ? frames: [* $QuicFrame]
    ? is_mtu_probe_packet: bool .default false
    ? trigger:
        "reordering_threshold" /
        "time_threshold" /
        ; RFC 9002 Section 6.2.4 paragraph 6, MAY
        "pto_expired"
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="recovery-markedforretransmit">
        <name>marked_for_retransmit</name>
        <t>Importance: Extra</t>
        <t>This event indicates which data was marked for retransmit upon detecting a packet
loss (see packet_lost). Similar to the reasoning for the "frames_processed" event,
in order to keep the amount of different events low, this signal is grouped into
in a single event based on existing QUIC frame definitions for all types of
retransmittable data.</t>
        <t>Implementations retransmitting full packets or frames directly can just log the
constituent frames of the lost packet here (or do away with this event and use the
contents of the packet_lost event instead). Conversely, implementations that have
more complex logic (e.g., marking ranges in a stream's data buffer as in-flight),
or that do not track sent frames in full (e.g., only stream offset + length), can
translate their internal behaviour into the appropriate frame instance here even
if that frame was never or will never be put on the wire.</t>
        <t>Much of this data can be inferred if implementations log packet_sent events
(e.g., looking at overlapping stream data offsets and length, one can determine
when data was retransmitted).</t>
        <t>Definition:</t>
        <figure anchor="recovery-markedforretransmit-def">
          <name>RecoveryMarkedForRetransmit definition</name>
          <sourcecode type="cddl"><![CDATA[
RecoveryMarkedForRetransmit = {
    frames: [+ $QuicFrame]
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="recovery-ecnstateupdated">
        <name>ecn_state_updated</name>
        <t>Importance: Extra</t>
        <t>This event indicates a progression in the ECN state machine as described in section
A.4 of <xref target="QUIC-TRANSPORT"/>.</t>
        <figure anchor="recovery-ecnstateupdated-def">
          <name>ECNStateUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
ECNStateUpdated = {
   ? old: ECNState
    new: ECNState
}

ECNState =
  ; ECN testing in progress
  "testing" /
  ; ECN state unknown, waiting for acknowledgements
  ; for testing packets
  "unknown" /
  ; ECN testing failed
  "failed" /
  ; testing was successful, the endpoint now
  ; sends packets with ECT(0) marking
  "capable"
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="quic-data-field-definitions">
      <name>QUIC data field definitions</name>
      <section anchor="quicversion">
        <name>QuicVersion</name>
        <figure anchor="quicversion-def">
          <name>QuicVersion definition</name>
          <sourcecode type="cddl"><![CDATA[
QuicVersion = hexstring
]]></sourcecode>
        </figure>
      </section>
      <section anchor="connectionid">
        <name>ConnectionID</name>
        <figure anchor="connectionid-def">
          <name>ConnectionID definition</name>
          <sourcecode type="cddl"><![CDATA[
ConnectionID = hexstring
]]></sourcecode>
        </figure>
      </section>
      <section anchor="owner">
        <name>Owner</name>
        <figure anchor="owner-def">
          <name>Owner definition</name>
          <sourcecode type="cddl"><![CDATA[
Owner = "local" /
        "remote"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="ipaddress-and-ipversion">
        <name>IPAddress and IPVersion</name>
        <figure anchor="ipaddress-def">
          <name>IPAddress definition</name>
          <sourcecode type="cddl"><![CDATA[
; an IPAddress can either be a "human readable" form
; (e.g., "127.0.0.1" for v4 or
; "2001:0db8:85a3:0000:0000:8a2e:0370:7334" for v6) or
; use a raw byte-form (as the string forms can be ambiguous)
IPAddress = text /
            hexstring
]]></sourcecode>
        </figure>
        <figure anchor="ipversion-def">
          <name>IPVersion definition</name>
          <sourcecode type="cddl"><![CDATA[
IPVersion = "v4" /
            "v6"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="packettype">
        <name>PacketType</name>
        <figure anchor="packettype-def">
          <name>PacketType definition</name>
          <sourcecode type="cddl"><![CDATA[
PacketType = "initial" /
             "handshake" /
             "0RTT" /
             "1RTT" /
             "retry" /
             "version_negotiation" /
             "stateless_reset" /
             "unknown"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="packetnumberspace">
        <name>PacketNumberSpace</name>
        <figure anchor="packetnumberspace-def">
          <name>PacketNumberSpace definition</name>
          <sourcecode type="cddl"><![CDATA[
PacketNumberSpace = "initial" /
                    "handshake" /
                    "application_data"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="packetheader">
        <name>PacketHeader</name>
        <figure anchor="packetheader-def">
          <name>PacketHeader definition</name>
          <sourcecode type="cddl"><![CDATA[
PacketHeader = {
    ? quic_bit: bool .default true
    packet_type: PacketType

    ; only if packet_type === "initial" || "handshake" || "0RTT" ||
    ;                         "1RTT"
    ? packet_number: uint64

    ; the bit flags of the packet headers (spin bit, key update bit,
    ; etc. up to and including the packet number length bits
    ; if present
    ? flags: uint8

    ; only if packet_type === "initial"
    ? token: Token

    ; only if packet_type === "initial" || "handshake" || "0RTT"
    ; Signifies length of the packet_number plus the payload
    ? length: uint16

    ; only if present in the header
    ; if correctly using transport:connection_id_updated events,
    ; dcid can be skipped for 1RTT packets
    ? version: QuicVersion
    ? scil: uint8
    ? dcil: uint8
    ? scid: ConnectionID
    ? dcid: ConnectionID
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="token">
        <name>Token</name>
        <figure anchor="token-def">
          <name>Token definition</name>
          <sourcecode type="cddl"><![CDATA[
Token = {
    ? type: "retry" /
            "resumption"

    ; decoded fields included in the token
    ; (typically: peer's IP address, creation time)
    ? details: {
      * text => any
    }
    ? raw: RawInfo
}
]]></sourcecode>
        </figure>
        <t>The token carried in an Initial packet can either be a retry token from a Retry
packet, or one originally provided by the server in a NEW_TOKEN frame used when
resuming a connection (e.g., for address validation purposes). Retry and
resumption tokens typically contain encoded metadata to check the token's
validity when it is used, but this metadata and its format is implementation
specific. For that, this event includes a general-purpose "details" field.</t>
      </section>
      <section anchor="stateless-reset-token">
        <name>Stateless Reset Token</name>
        <figure anchor="stateless-reset-token-def">
          <name>Stateless Reset Token definition</name>
          <sourcecode type="cddl"><![CDATA[
StatelessResetToken = hexstring .size 16
]]></sourcecode>
        </figure>
        <t>The stateless reset token is carried in stateless reset packets, in transport
parameters and in NEW_CONNECTION_ID frames.</t>
      </section>
      <section anchor="keytype">
        <name>KeyType</name>
        <figure anchor="keytype-def">
          <name>KeyType definition</name>
          <sourcecode type="cddl"><![CDATA[
KeyType = "server_initial_secret" /
          "client_initial_secret" /
          "server_handshake_secret" /
          "client_handshake_secret" /
          "server_0rtt_secret" /
          "client_0rtt_secret" /
          "server_1rtt_secret" /
          "client_1rtt_secret"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="ecn">
        <name>ECN</name>
        <figure anchor="ecn-def">
          <name>ECN definition</name>
          <sourcecode type="cddl"><![CDATA[
ECN = "Not-ECT" / "ECT(1)" / "ECT(0)" / "CE"
]]></sourcecode>
        </figure>
        <t>The ECN bits carried in the IP header.</t>
      </section>
      <section anchor="quic-frames">
        <name>QUIC Frames</name>
        <t>The generic <tt>$QuicFrame</tt> is defined here as a CDDL extension point (a "socket"
or "plug"). It can be extended to support additional QUIC frame types.</t>
        <figure anchor="quicframe-def">
          <name>QuicFrame plug definition</name>
          <sourcecode type="cddl"><![CDATA[
; The QuicFrame is any key-value map (e.g., JSON object)
$QuicFrame /= {
    * text => any
}
]]></sourcecode>
        </figure>
        <t>The QUIC frame types defined in this document are as follows:</t>
        <figure anchor="quicbaseframe-def">
          <name>QuicBaseFrames definition</name>
          <sourcecode type="cddl"><![CDATA[
QuicBaseFrames /= PaddingFrame /
                  PingFrame /
                  AckFrame /
                  ResetStreamFrame /
                  StopSendingFrame /
                  CryptoFrame /
                  NewTokenFrame /
                  StreamFrame /
                  MaxDataFrame /
                  MaxStreamDataFrame /
                  MaxStreamsFrame /
                  DataBlockedFrame /
                  StreamDataBlockedFrame /
                  StreamsBlockedFrame /
                  NewConnectionIDFrame /
                  RetireConnectionIDFrame /
                  PathChallengeFrame /
                  PathResponseFrame /
                  ConnectionCloseFrame /
                  HandshakeDoneFrame /
                  UnknownFrame /
                  DatagramFrame

$QuicFrame /= QuicBaseFrames
]]></sourcecode>
        </figure>
        <section anchor="paddingframe">
          <name>PaddingFrame</name>
          <t>In QUIC, PADDING frames are simply identified as a single byte of value 0. As
such, each padding byte could be theoretically interpreted and logged as an
individual PaddingFrame.</t>
          <t>However, as this leads to heavy logging overhead, implementations <bcp14>SHOULD</bcp14> instead
emit just a single PaddingFrame and set the payload_length property to the amount
of PADDING bytes/frames included in the packet.</t>
          <figure anchor="paddingframe-def">
            <name>PaddingFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
PaddingFrame = {
    frame_type: "padding"

    ; total frame length, including frame header
    ? length: uint32
    payload_length: uint32
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="pingframe">
          <name>PingFrame</name>
          <figure anchor="pingframe-def">
            <name>PingFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
PingFrame = {
    frame_type: "ping"

    ; total frame length, including frame header
    ? length: uint32
    ? payload_length: uint32
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ackframe">
          <name>AckFrame</name>
          <figure anchor="ackframe-def">
            <name>AckFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
; either a single number (e.g., [1]) or two numbers (e.g., [1,2]).
; For two numbers:
; the first number is "from": lowest packet number in interval
; the second number is "to": up to and including the highest
; packet number in the interval
AckRange = [1*2 uint64]

AckFrame = {
    frame_type: "ack"

    ; in ms
    ? ack_delay: float32

    ; e.g., looks like [[1,2],[4,5], [7], [10,22]] serialized
    ? acked_ranges: [+ AckRange]

    ; ECN (explicit congestion notification) related fields
    ; (not always present)
    ? ect1: uint64
    ? ect0: uint64
    ? ce: uint64

    ; total frame length, including frame header
    ? length: uint32
    ? payload_length: uint32
}
]]></sourcecode>
          </figure>
          <t>Note that the packet ranges in AckFrame.acked_ranges do not necessarily have to be
ordered (e.g., [[5,9],[1,4]] is a valid value).</t>
          <t>Note that the two numbers in the packet range can be the same (e.g., [120,120] means
that packet with number 120 was ACKed). However, in that case, implementers <bcp14>SHOULD</bcp14>
log [120] instead and tools <bcp14>MUST</bcp14> be able to deal with both notations.</t>
        </section>
        <section anchor="resetstreamframe">
          <name>ResetStreamFrame</name>
          <figure anchor="resetstreamframe-def">
            <name>ResetStreamFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
ResetStreamFrame = {
    frame_type: "reset_stream"
    stream_id: uint64
    error_code: $ApplicationError /
                uint32

    ; in bytes
    final_size: uint64

    ; total frame length, including frame header
    ? length: uint32
    ? payload_length: uint32
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="stopsendingframe">
          <name>StopSendingFrame</name>
          <figure anchor="stopsendingframe-def">
            <name>StopSendingFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
StopSendingFrame = {
    frame_type: "stop_sending"
    stream_id: uint64
    error_code: $ApplicationError /
                uint32

    ; total frame length, including frame header
    ? length: uint32
    ? payload_length: uint32
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="cryptoframe">
          <name>CryptoFrame</name>
          <figure anchor="cryptoframe-def">
            <name>CryptoFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
CryptoFrame = {
    frame_type: "crypto"
    offset: uint64
    length: uint64
    ? payload_length: uint32
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="newtokenframe">
          <name>NewTokenFrame</name>
          <figure anchor="newtokenframe-def">
            <name>NewTokenFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
NewTokenFrame = {
  frame_type: "new_token"
  token: Token
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="streamframe">
          <name>StreamFrame</name>
          <figure anchor="streamframe-def">
            <name>StreamFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
StreamFrame = {
    frame_type: "stream"
    stream_id: uint64

    ; These two MUST always be set
    ; If not present in the Frame type, log their default values
    offset: uint64
    length: uint64

    ; this MAY be set any time,
    ; but MUST only be set if the value is true
    ; if absent, the value MUST be assumed to be false
    ? fin: bool .default false
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="maxdataframe">
          <name>MaxDataFrame</name>
          <figure anchor="maxdataframe-def">
            <name>MaxDataFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
MaxDataFrame = {
  frame_type: "max_data"
  maximum: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="maxstreamdataframe">
          <name>MaxStreamDataFrame</name>
          <figure anchor="maxstreamdataframe-def">
            <name>MaxStreamDataFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
MaxStreamDataFrame = {
  frame_type: "max_stream_data"
  stream_id: uint64
  maximum: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="maxstreamsframe">
          <name>MaxStreamsFrame</name>
          <figure anchor="maxstreamsframe-def">
            <name>MaxStreamsFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
MaxStreamsFrame = {
  frame_type: "max_streams"
  stream_type: StreamType
  maximum: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="datablockedframe">
          <name>DataBlockedFrame</name>
          <figure anchor="datablockedframe-def">
            <name>DataBlockedFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
DataBlockedFrame = {
  frame_type: "data_blocked"
  limit: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="streamdatablockedframe">
          <name>StreamDataBlockedFrame</name>
          <figure anchor="streamdatablockedframe-def">
            <name>StreamDataBlockedFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
StreamDataBlockedFrame = {
  frame_type: "stream_data_blocked"
  stream_id: uint64
  limit: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="streamsblockedframe">
          <name>StreamsBlockedFrame</name>
          <figure anchor="streamsblockedframe-def">
            <name>StreamsBlockedFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
StreamsBlockedFrame = {
  frame_type: "streams_blocked"
  stream_type: StreamType
  limit: uint64
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="newconnectionidframe">
          <name>NewConnectionIDFrame</name>
          <figure anchor="newconnectionidframe-def">
            <name>NewConnectionIDFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
NewConnectionIDFrame = {
  frame_type: "new_connection_id"
  sequence_number: uint32
  retire_prior_to: uint32

  ; mainly used if e.g., for privacy reasons the full
  ; connection_id cannot be logged
  ? connection_id_length: uint8
  connection_id: ConnectionID
  ? stateless_reset_token: StatelessResetToken
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="retireconnectionidframe">
          <name>RetireConnectionIDFrame</name>
          <figure anchor="retireconnectionid-def">
            <name>RetireConnectionIDFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
RetireConnectionIDFrame = {
  frame_type: "retire_connection_id"
  sequence_number: uint32
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="pathchallengeframe">
          <name>PathChallengeFrame</name>
          <figure anchor="pathchallengeframe-def">
            <name>PathChallengeFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
PathChallengeFrame = {
  frame_type: "path_challenge"

  ; always 64-bit
  ? data: hexstring
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="pathresponseframe">
          <name>PathResponseFrame</name>
          <figure anchor="pathresponseframe-def">
            <name>PathResponseFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
PathResponseFrame = {
  frame_type: "path_response"

  ; always 64-bit
  ? data: hexstring
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="connectioncloseframe">
          <name>ConnectionCloseFrame</name>
          <t>The error_code_value field is the numerical value without VLIE encoding. This is
useful because some error types are spread out over a range of codes (e.g.,
QUIC's crypto_error).</t>
          <figure anchor="connectioncloseframe-def">
            <name>ConnectionCloseFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
ErrorSpace = "transport" /
             "application"

ConnectionCloseFrame = {
    frame_type: "connection_close"
    ? error_space: ErrorSpace
    ? error_code: TransportError /
                  $ApplicationError /
                  uint32
    ? error_code_value: uint64
    ? reason: text

    ; For known frame types, the appropriate "frame_type" string
    ; For unknown frame types, the hex encoded frame identifier value
    ? trigger_frame_type: uint64 /
                          text
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="handshakedoneframe">
          <name>HandshakeDoneFrame</name>
          <figure anchor="handshakedoneframe-def">
            <name>HandshakeDoneFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HandshakeDoneFrame = {
  frame_type: "handshake_done";
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="unknownframe">
          <name>UnknownFrame</name>
          <t>The frame_type_value field is the numerical value without VLIE encoding.</t>
          <figure anchor="unknownframe-def">
            <name>UnknownFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
UnknownFrame = {
    frame_type: "unknown"
    frame_type_value: uint64
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="datagramframe">
          <name>DatagramFrame</name>
          <t>The QUIC DATAGRAM frame is defined in <xref section="4" sectionFormat="of" target="RFC9221"/>.</t>
          <figure anchor="datagramframe-def">
            <name>DatagramFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
DatagramFrame = {
    frame_type: "datagram"
    ? length: uint64
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="transporterror">
          <name>TransportError</name>
          <figure anchor="transporterror-def">
            <name>TransportError definition</name>
            <sourcecode type="cddl"><![CDATA[
TransportError = "no_error" /
                 "internal_error" /
                 "connection_refused" /
                 "flow_control_error" /
                 "stream_limit_error" /
                 "stream_state_error" /
                 "final_size_error" /
                 "frame_encoding_error" /
                 "transport_parameter_error" /
                 "connection_id_limit_error" /
                 "protocol_violation" /
                 "invalid_token" /
                 "application_error" /
                 "crypto_buffer_exceeded" /
                 "key_update_error" /
                 "aead_limit_reached" /
                 "no_viable_path"
                 ; there is no value to reflect CRYPTO_ERROR
                 ; use the CryptoError type instead
]]></sourcecode>
          </figure>
        </section>
        <section anchor="applicationerror">
          <name>ApplicationError</name>
          <t>By definition, an application error is defined by the application-level
protocol running on top of QUIC (e.g., HTTP/3).</t>
          <t>As such, it cannot be defined here directly. Applications <bcp14>MAY</bcp14> use the provided
extension point through the use of the CDDL "socket" mechanism.</t>
          <t>Application-level qlog definitions that wish to define new ApplicationError strings <bcp14>MUST</bcp14> do so by extending the $ApplicationError socket as such:</t>
          <artwork><![CDATA[
$ApplicationError /= "new_error_name" /
                     "another_new_error_name"
]]></artwork>
        </section>
        <section anchor="cryptoerror">
          <name>CryptoError</name>
          <t>These errors are defined in the TLS document as "A TLS alert is turned into a QUIC
connection error by converting the one-byte alert description into a QUIC error
code. The alert description is added to 0x100 to produce a QUIC error code from
the range reserved for CRYPTO_ERROR."</t>
          <t>This approach maps badly to a pre-defined enum. As such, the crypto_error
string is defined as having a dynamic component here, which should include the
hex-encoded and zero-padded value of the TLS alert description.</t>
          <figure anchor="cryptoerror-def">
            <name>CryptoError definition</name>
            <sourcecode type="cddl"><![CDATA[
; all strings from "crypto_error_0x100" to "crypto_error_0x1ff"
CryptoError = text .regexp "crypto_error_0x1[0-9a-f][0-9a-f]"
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="security-and-privacy-considerations">
      <name>Security and Privacy Considerations</name>
      <t>The security and privacy considerations discussed in <xref target="QLOG-MAIN"/> apply to this
document as well.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>There are no IANA considerations.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="QLOG-MAIN">
        <front>
          <title>Main logging schema for qlog</title>
          <author fullname="Robin Marx" initials="R." surname="Marx">
            <organization>Akamai</organization>
          </author>
          <author fullname="Luca Niccolini" initials="L." surname="Niccolini">
            <organization>Meta</organization>
          </author>
          <author fullname="Marten Seemann" initials="M." surname="Seemann">
            <organization>Protocol Labs</organization>
          </author>
          <author fullname="Lucas Pardue" initials="L." surname="Pardue">
            <organization>Cloudflare</organization>
          </author>
          <date day="10" month="July" year="2023"/>
          <abstract>
            <t>   This document defines qlog, an extensible high-level schema for a
   standardized logging format.  It allows easy sharing of data,
   benefitting common debug and analysis methods and tooling.  The high-
   level schema is independent of protocol; separate documents extend
   qlog for protocol-specific data.  The schema is also independent of
   serialization format, allowing logs to be represented in many ways
   such as JSON, CSV, or protobuf.

Note to Readers

      Note to RFC editor: Please remove this section before publication.

   Feedback and discussion are welcome at https://github.com/quicwg/qlog
   (https://github.com/quicwg/qlog).  Readers are advised to refer to
   the "editor's draft" at that URL for an up-to-date version of this
   document.

   Concrete examples of integrations of this schema in various
   programming languages can be found at https://github.com/quiclog/
   qlog/ (https://github.com/quiclog/qlog/).

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-main-schema-06"/>
      </reference>
      <reference anchor="QUIC-TRANSPORT">
        <front>
          <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
          <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
          <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
          <date month="May" year="2021"/>
          <abstract>
            <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9000"/>
        <seriesInfo name="DOI" value="10.17487/RFC9000"/>
      </reference>
      <reference anchor="QUIC-RECOVERY">
        <front>
          <title>QUIC Loss Detection and Congestion Control</title>
          <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
          <author fullname="I. Swett" initials="I." role="editor" surname="Swett"/>
          <date month="May" year="2021"/>
          <abstract>
            <t>This document describes loss detection and congestion control mechanisms for QUIC.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9002"/>
        <seriesInfo name="DOI" value="10.17487/RFC9002"/>
      </reference>
      <reference anchor="QUIC-TLS">
        <front>
          <title>Extended BGP Administrative Shutdown Communication</title>
          <author fullname="J. Snijders" initials="J." surname="Snijders"/>
          <author fullname="J. Heitz" initials="J." surname="Heitz"/>
          <author fullname="J. Scudder" initials="J." surname="Scudder"/>
          <author fullname="A. Azimov" initials="A." surname="Azimov"/>
          <date month="January" year="2021"/>
          <abstract>
            <t>This document enhances the BGP Cease NOTIFICATION message "Administrative Shutdown" and "Administrative Reset" subcodes for operators to transmit a short free-form message to describe why a BGP session was shut down or reset. This document updates RFC 4486 and obsoletes RFC 8203 by defining an Extended BGP Administrative Shutdown Communication of up to 255 octets to improve communication using multibyte character sets.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9003"/>
        <seriesInfo name="DOI" value="10.17487/RFC9003"/>
      </reference>
      <reference anchor="QUIC-DATAGRAM">
        <front>
          <title>An Unreliable Datagram Extension to QUIC</title>
          <author fullname="T. Pauly" initials="T." surname="Pauly"/>
          <author fullname="E. Kinnear" initials="E." surname="Kinnear"/>
          <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
          <date month="March" year="2022"/>
          <abstract>
            <t>This document defines an extension to the QUIC transport protocol to add support for sending and receiving unreliable datagrams over a QUIC connection.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9221"/>
        <seriesInfo name="DOI" value="10.17487/RFC9221"/>
      </reference>
      <reference anchor="GREASEBIT">
        <front>
          <title>Greasing the QUIC Bit</title>
          <author fullname="M. Thomson" initials="M." surname="Thomson"/>
          <date month="August" year="2022"/>
          <abstract>
            <t>This document describes a method for negotiating the ability to send an arbitrary value for the second-most significant bit in QUIC packets.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9287"/>
        <seriesInfo name="DOI" value="10.17487/RFC9287"/>
      </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"/>
          <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"/>
          <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="CDDL">
        <front>
          <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
          <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
          <author fullname="C. Vigano" initials="C." surname="Vigano"/>
          <author fullname="C. Bormann" initials="C." surname="Bormann"/>
          <date month="June" year="2019"/>
          <abstract>
            <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8610"/>
        <seriesInfo name="DOI" value="10.17487/RFC8610"/>
      </reference>
      <reference anchor="RFC9221">
        <front>
          <title>An Unreliable Datagram Extension to QUIC</title>
          <author fullname="T. Pauly" initials="T." surname="Pauly"/>
          <author fullname="E. Kinnear" initials="E." surname="Kinnear"/>
          <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
          <date month="March" year="2022"/>
          <abstract>
            <t>This document defines an extension to the QUIC transport protocol to add support for sending and receiving unreliable datagrams over a QUIC connection.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9221"/>
        <seriesInfo name="DOI" value="10.17487/RFC9221"/>
      </reference>
    </references>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Much of the initial work by Robin Marx was done at the Hasselt and KU Leuven
Universities.</t>
      <t>Thanks to Jana Iyengar, Brian Trammell, Dmitri Tikhonov, Stephen Petrides, Jari
Arkko, Marcus Ihlar, Victor Vasiliev, Mirja Kuehlewind, Jeremy Laine, Kazu
Yamamoto, and Christian Huitema for their feedback and suggestions.</t>
    </section>
    <section numbered="false" removeInRFC="true" anchor="change-log">
      <name>Change Log</name>
      <section numbered="false" anchor="since-draft-ietf-qlog-quic-events-05">
        <name>Since draft-ietf-qlog-quic-events-05:</name>
        <ul spacing="normal">
          <li>SecurityKeyUpdated: the new key is no longer mandatory to log (#294)</li>
          <li>Added ECN related events and metadata (#263)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-qlog-quic-events-04">
        <name>Since draft-ietf-qlog-quic-events-04:</name>
        <ul spacing="normal">
          <li>Updated guidance on logging events across connections (#279)</li>
          <li>Renamed 'transport' category to 'quic' (#302)</li>
          <li>Added support for multiple packet numbers in 'quic:frames_processed' (#307)</li>
          <li>Added definitions for RFC9287 (QUIC GREASE Bit extension) (#311)</li>
          <li>Added definitions for RFC9221 (QUIC Datagram Frame extension) (#310)</li>
          <li>(Temporarily) removed definitions for connection migration events (#317)</li>
          <li>Editorial and formatting changes (#298, #299, #304, #306, #327)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-qlog-quic-events-03">
        <name>Since draft-ietf-qlog-quic-events-03:</name>
        <ul spacing="normal">
          <li>Ensured consistent use of RawInfo to indicate raw wire bytes (#243)</li>
          <li>Renamed UnknownFrame:raw_frame_type to :frame_type_value (#54)</li>
          <li>Renamed ConnectionCloseFrame:raw_error_code to :error_code_value (#54)</li>
          <li>Changed triggers for packet_dropped (#278)</li>
          <li>Added entries to TransportError enum (#285)</li>
          <li>Changed minimum_congestion_window to uint64 (#288)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-qlog-quic-events-02">
        <name>Since draft-ietf-qlog-quic-events-02:</name>
        <ul spacing="normal">
          <li>Renamed key_retired to key_discarded (#185)</li>
          <li>Added fields and events for DPLPMTUD (#135)</li>
          <li>Made packet_number optional in PacketHeader (#244)</li>
          <li>Removed connection_retried event placeholder (#255)</li>
          <li>Changed QuicFrame to a CDDL plug type (#257)</li>
          <li>Moved data definitions out of the appendix into separate sections</li>
          <li>Added overview Table of Contents</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-qlog-quic-events-01">
        <name>Since draft-ietf-qlog-quic-events-01:</name>
        <ul spacing="normal">
          <li>Added Stateless Reset Token type (#122)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-qlog-quic-events-00">
        <name>Since draft-ietf-qlog-quic-events-00:</name>
        <ul spacing="normal">
          <li>Change the data definition language from TypeScript to CDDL (#143)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-marx-qlog-event-definitions-quic-h3-02">
        <name>Since draft-marx-qlog-event-definitions-quic-h3-02:</name>
        <ul spacing="normal">
          <li>These changes were done in preparation of the adoption of the drafts by the QUIC
working group (#137)</li>
          <li>Split QUIC and HTTP/3 events into two separate documents</li>
          <li>Moved RawInfo, Importance, Generic events and Simulation events to the main
schema document.</li>
          <li>Changed to/from value options of the <tt>data_moved</tt> event</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-marx-qlog-event-definitions-quic-h3-01">
        <name>Since draft-marx-qlog-event-definitions-quic-h3-01:</name>
        <t>Major changes:</t>
        <ul spacing="normal">
          <li>Moved data_moved from http to transport. Also made the "from" and "to" fields
flexible strings instead of an enum (#111,#65)</li>
          <li>Moved packet_type fields to PacketHeader. Moved packet_size field out of
PacketHeader to RawInfo:length (#40)</li>
          <li>Made events that need to log packet_type and packet_number use a header field
instead of logging these fields individually</li>
          <li>Added support for logging retry, stateless reset and initial tokens (#94,#86,#117)</li>
          <li>Moved separate general event categories into a single category "generic" (#47)</li>
          <li>Added "transport:connection_closed" event (#43,#85,#78,#49)</li>
          <li>Added version_information and alpn_information events (#85,#75,#28)</li>
          <li>Added parameters_restored events to help clarify 0-RTT behaviour (#88)</li>
        </ul>
        <t>Smaller changes:</t>
        <ul spacing="normal">
          <li>Merged loss_timer events into one loss_timer_updated event</li>
          <li>Field data types are now strongly defined (#10,#39,#36,#115)</li>
          <li>Renamed qpack instruction_received and instruction_sent to instruction_created
and instruction_parsed (#114)</li>
          <li>Updated qpack:dynamic_table_updated.update_type. It now has the value "inserted"
instead of "added" (#113)</li>
          <li>Updated qpack:dynamic_table_updated. It now has an "owner" field to
differentiate encoder vs decoder state (#112)</li>
          <li>Removed push_allowed from http:parameters_set (#110)</li>
          <li>Removed explicit trigger field indications from events, since this was moved to
be a generic property of the "data" field (#80)</li>
          <li>Updated transport:connection_id_updated to be more in line with other similar
events. Also dropped importance from Core to Base (#45)</li>
          <li>Added length property to PaddingFrame (#34)</li>
          <li>Added packet_number field to transport:frames_processed (#74)</li>
          <li>Added a way to generically log packet header flags (first 8 bits) to
PacketHeader</li>
          <li>Added additional guidance on which events to log in which situations (#53)</li>
          <li>Added "simulation:scenario" event to help indicate simulation details</li>
          <li>Added "packets_acked" event (#107)</li>
          <li>Added "datagram_ids" to the datagram_X and packet_X events to allow tracking of
coalesced QUIC packets (#91)</li>
          <li>Extended connection_state_updated with more fine-grained states (#49)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-marx-qlog-event-definitions-quic-h3-00">
        <name>Since draft-marx-qlog-event-definitions-quic-h3-00:</name>
        <ul spacing="normal">
          <li>Event and category names are now all lowercase</li>
          <li>Added many new events and their definitions</li>
          <li>"type" fields have been made more specific (especially important for PacketType
fields, which are now called packet_type instead of type)</li>
          <li>Events are given an importance indicator (issue #22)</li>
          <li>Event names are more consistent and use past tense (issue #21)</li>
          <li>Triggers have been redefined as properties of the "data" field and updated for most events (issue #23)</li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+19a3cb13Xo9/kVUyhrmXQAiqRkWYavmtIkbbOWSIWkkmY5
WvAQOCQmGswgMwNSiKz+ln69/+F+uv1jdz/PYx4g5SZp123dxpYw57nPPvu9
9xmNRlGd1pkZx799c3IYm1uT1/HMXKd5WqdFXsXXRRn/OStuolkxzZMFNJyV
yXU9Sk19PfrzKp2O8Cv/iXpXo91n0TSpzU1RrsdxVc+iKF2W47guV1W9v7v7
1e5+lJQmGceXZZJXy6Kso7uifHdTFqslryN6Z9bw02wcn+S1KXNTj45w1iiq
6iSfTZKsyGEla1NFy3Qc/1gX02EMC0zzGaxgGFcwZmmuK/jTeiF/qMt0Cp+m
xWKZyB8WuNxhnOZZmpu3UZSs6nlRjqM4HsH/YvhQjePznfhVUr6nHxgA58VV
mrsfi/JmHB+8SxZJSn838IdsHJcLaPBPCf2+A5PRt7JAUJtZWhdlOM3Lnfg0
nU4LWErqzfVyNU0aH2i+V6ZO/NmyXNv80wI+PWDCVzvxhYHeee5NB5uqTR58
oOlelwXAuMjil8lV5c+7oA4Vt/+nG/yxd2670ddJOVuZxi4r/2ea9DArVrPr
DHAl2Cm2XVLTnf2nO19umjTKCziGOr014wi+/vbl2XejVwcnp2NqejI62mmg
MQyVj6rpHOYCrM2vve6j0SiGzdclYE8UXc7TCjFuteALU03L9MpUgFX5tDS1
oTvTcZ0Ae+N6btIyxmOaJXWCNyxyl6/aiS/npjLyt3ia5Nghj6/gp8WVmc3M
DACJv8Xz9GZuyjiDplnMq+bJzAwWH3/4YDf88eMO7yAvajM5xX/VxeTcJDNT
VlH0jzH+FNdFfP7toQAPDj0zCSykNIviFj7ijiszxX3AYmDVJl6urrIU7jr8
BON/a8zsKpm+o03O0mq6qipsDAcY35kMTsjESR39OK/rZTV+/PgmreerKzy5
x3gCdzePEWhvtzZ/396JZd04cJTMbtMKQAJrh4sO0IA/IGwGvIvPKqZXA5gZ
fod/vTl/SUQN4LpajupiBIdg4lsYD9YaFde8UT1a2NahHql5nyyWGRwyNEqB
Lt2UCR+qdpIjSPPoNinTYlXFy7KAVotFmt/EWZLfrJIbw2cKx3ldrABQGyAC
u6UtP+6FiW2xLee7SGezzETRI6ScZTFb0Xn14yuC6jbJVkZ2IYiL1zLeGigZ
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
atrKrtZACZguOU1dkUl68ufGcHgg43iAl6xp5Aoe2Gh+s9bN1pccLntRvmv+
7r9kUnTO2D9f32zdc3kzbbJCN2htt1HGnUz7QRDnj2jR8TYafBolD1GM0W+L
0ewfJOkb3QABkY96iXz8S4h89HtzZZ/RccS+sbKHEf2ocx6hp/En0fnoJqHY
fCbz5MREihcvYb9UCakqrmugQx0cIG5xgOiXcYC4hwNEf1UOkFoOoDCPGOYw
xF+JE4hqTsf11+AE9GzgAzkBjme9huqhbRD9aCPRx1X/cvreoOIddF44QEDf
W0+qP8zn1qLv/0OxfwHFblHVXs9hD9V+ZJ9vlle5gV5XxtXM9V+vpy+t1+k7
yHiPy6z9krSePc7Cjir42PRSzc17wDEN2pU3dtyPgjxenicV9MZIeXlPSPpJ
rAml4t8XfWztuFJGL3hwReoEYPyu1wUvv4azkPB7+fJi20X71lnVyDRBr5TA
NvhCniz94B14B/D90+4Ab5tBI6DtOwmNA7W//6IjdU9/33eo8Pt/+/OzsO45
QQfN5nXVt6fdS8+lXlfnQFczKVuhyJ0uWWi4y3cY40Zb5eBjDRKykhLaRXgS
NbCK/Uu5/9Q+p20VjCTDzJF6vqjYKcWRWkVZRdYrR9BHNweVqXbzsqRUrciy
whU/NKtHuU/gqFA/UVbUtqG3InG7wQnmKBuQ2ogx0hlKRzoP5y32VD3U7W+q
fNiKmpDKh66ebFiNhdxwWVFVFBhmn9P0Fh5ZXa2r1OEvqCcYaT3B0GuhkdtD
Z1TnaJuh+mV4Hm8HXF0wMu8BQzlr69XBH9QZ0SqGIea3OxB+e2WB7jfevQic
lwGoOBTKoqU6xIdYohb99+/jA6kH8DVJiVr60To3hJVyxQLYy6Sel6aa+9X4
pXtS0StAYhZObUILZQ14vUBgTmx2Mc264GmwYTkBppuvQHzEF3EbM7imrpJJ
WdfjxojtS+Zt9xsNSKDhUHJqv3A9tRFRwg9IDo2Xi3qlMUlBgaygykxj8MZy
3domdyDiF3dN7btzKYJepNS1ZtaQm+6JqbLnarFhYm6HN2xSYuqG5NBNa0xY
bIAWzvj15Vn7jPGlCXpRvfYnaqOKI+rdpMKn6t2Y/jcojOWR1MgpvR2kXJ66
MMA3p5Un3dm9yKdOCa9V8bWZq+MH0goz4kcwKTTBLkfmsKcuzwp6Awvf4MQf
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
rLyZ4A79P/WMqoNsDwEA

-->

</rfc>
