<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-happy-happyeyeballs-v3-05" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="Happy Eyeballs v3">Happy Eyeballs Version 3: Better Connectivity Using Concurrency</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-happy-happyeyeballs-v3-05"/>
    <author fullname="Tommy Pauly">
      <organization>Apple Inc</organization>
      <address>
        <email>tpauly@apple.com</email>
      </address>
    </author>
    <author fullname="David Schinazi">
      <organization>Google LLC</organization>
      <address>
        <email>dschinazi.ietf@gmail.com</email>
      </address>
    </author>
    <author fullname="Nidhi Jaju">
      <organization>Google LLC</organization>
      <address>
        <email>nidhijaju@google.com</email>
      </address>
    </author>
    <author fullname="Kenichi Ishibashi">
      <organization>Google LLC</organization>
      <address>
        <email>bashi@google.com</email>
      </address>
    </author>
    <date year="2026" month="November" day="02"/>
    <area>WIT</area>
    <workgroup>HAPPY Working Group</workgroup>
    <keyword>ipv6</keyword>
    <keyword>ipv4</keyword>
    <keyword>racing</keyword>
    <keyword>tcp</keyword>
    <keyword>quic</keyword>
    <keyword>svcb</keyword>
    <keyword>ech</keyword>
    <abstract>
      <?line 53?>

<t>Many communication protocols operating over the modern Internet use
hostnames. These often resolve to multiple IP addresses, each of
which may have different performance and connectivity
characteristics. Since specific addresses or address families (IPv4
or IPv6) may be blocked, broken, or sub-optimal on a network, clients
that attempt multiple connections in parallel have a chance of
establishing a connection more quickly. This document defines the
algorithm for "Happy Eyeballs", a technique for reducing user-visible
delays on dual-stack hosts. This document updates the algorithm
in RFC 8305.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-happy/draft-happy-eyeballs-v3/draft-ietf-happy-happyeyeballs-v3.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-happy-happyeyeballs-v3/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        HAPPY Working Group mailing list (<eref target="mailto:happy@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/happy/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/happy/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-happy/draft-happy-eyeballs-v3"/>.</t>
    </note>
  </front>
  <middle>
    <?line 66?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Many communication protocols operating over the modern Internet use
hostnames. These often resolve to multiple IP addresses, each of
which may have different performance and connectivity
characteristics. Since specific addresses or address families (IPv4
or IPv6) may be blocked, broken, or sub-optimal on a network, clients
that attempt multiple connections in parallel have a chance of
establishing a connection more quickly.</t>
      <t>This document defines the algorithm for "Happy Eyeballs", a technique
for reducing user-visible delays on dual-stack hosts. This
definition updates the description in <xref target="HEV2"/>, which
itself obsoleted <xref target="RFC6555"/>.</t>
      <t>The Happy Eyeballs algorithm of racing connections to resolved
endpoints has several stages to avoid delays to the user whenever
possible, while respecting client priorities, such as preferring
the use of IPv6 or the availability of protocols like HTTP/3 <xref target="HTTP3"/> and
TLS Encrypted Client Hello <xref target="ECH"/>. This document discusses
how to initiate DNS queries when starting a connection, how to
sort the list of destination addresses received from DNS answers,
and how to race the connection attempts.</t>
      <t>The major difference between the algorithm defined in this document
and <xref target="HEV2"/> is the addition of support for SVCB / HTTPS resource
records <xref target="SVCB"/>. SVCB records provide alternative
endpoints and information about application protocol support, Encrypted
Client Hello <xref target="ECH"/> keys, address hints, and other relevant details
about the services being accessed. Discovering protocol support during
resolution, such as for HTTP/3 over QUIC <xref target="HTTP3"/>, allows
upgrading between protocols on the current connection attempts,
instead of waiting for subsequent attempts to use information from
other discovery mechanisms such as HTTP Alternative Services
<xref target="AltSvc"/>. These records can be queried along with A and
AAAA records, and the updated algorithm defines how to handle SVCB
responses to improve connection establishment.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="overview">
      <name>Overview</name>
      <t>This document defines a method of connection establishment, named the
"Happy Eyeballs Connection Setup". This approach has several
distinct phases:</t>
      <ol spacing="normal" type="1"><li>
          <t>Asynchronous resolution of a hostname into destination endpoints (<xref target="resolution"/>)</t>
        </li>
        <li>
          <t>Sorting of the resolved destination endpoints (<xref target="sorting"/>)</t>
        </li>
        <li>
          <t>Initiation of asynchronous connection attempts (<xref target="connections"/>)</t>
        </li>
        <li>
          <t>Successful establishment of one connection and cancellation of
other attempts (<xref target="connections"/>)</t>
        </li>
      </ol>
      <t>Note that this document assumes that the preference policy for the
destination address family favors IPv6 over IPv4. IPv6 has many
desirable properties designed to be improvements over IPv4
<xref target="IPV6"/>.</t>
      <t>This document also assumes that the preference policy favors QUIC over
TCP. QUIC only requires one packet to establish a secure connection,
making it quicker compared to TCP <xref target="QUIC"/>.</t>
      <t>If the host is configured to have different preferences, the
recommendations in this document can be easily adapted.</t>
    </section>
    <section anchor="resolution">
      <name>Hostname Resolution</name>
      <t>When a client is trying to establish a connection to a named host,
it needs to determine which destination endpoint it can use
to establish a connection. The client resolves the endpoints
by sending DNS queries and collecting the answers.
This section describes how a client initiates DNS queries
and asynchronously handles the answers.</t>
      <section anchor="queries">
        <name>Sending DNS Queries</name>
        <t>Clients first need to determine which DNS resource records
they will include in queries for a named host.</t>
        <t>This decision is based on whether the client has "connectivity" using IPv4
and/or IPv6 on the current Provisioning Domain (PvD) <xref target="PvD"/>.
Generally, "connectivity" for an address family is defined
as having at least one non-loopback and and non-link-local (<xref target="RFC3927"/>,<xref target="RFC4291"/>)
address of that address family from which to send packets, and at
least one non-link local route for the address family. When there is
IPv6 connectivity, the client <bcp14>MUST</bcp14> include a query for AAAA records.
When there is IPv4 connectivity, the client <bcp14>MUST</bcp14> include a query for
A records. Additionally, if the client has detected a NAT64 prefix
(<xref target="NAT64"/>) on the network, the client <bcp14>MUST</bcp14> include a query
for A records (see <xref target="nat64"/> for more details on detecting the NAT64 prefix
and handling answers).</t>
        <t>In addition to requesting AAAA and A records, depending on which
application is establishing the connection, clients can request
either SVCB or HTTPS records <xref target="SVCB"/>. For applications using
HTTP or HTTPS (including applications using WebSockets), the
client <bcp14>SHOULD</bcp14> send a query for HTTPS records.</t>
        <t>All of the DNS queries <bcp14>SHOULD</bcp14> be made as soon after one another as
possible. The order in which the queries are sent <bcp14>SHOULD</bcp14> be as
follows (omitting any query that doesn't apply based on the
logic described above):</t>
        <ol spacing="normal" type="1"><li>
            <t>SVCB or HTTPS query</t>
          </li>
          <li>
            <t>AAAA query</t>
          </li>
          <li>
            <t>A query</t>
          </li>
        </ol>
        <t>This ordering assumes that the client implementing the Happy
Eyeballs algorithm is able to specifically influence the queries
that are sent, or has a guarantee from the DNS stub resolver
about how the queries are sent. This is not possible in all
environments and operating systems depending on the APIs available.</t>
        <t>Note that the DNS stub resolver implementation might itself
employ the Happy Eyeballs algorithm, particularly when connecting
to an encrypted DNS server (using <xref target="DOT"/>, <xref target="DOH"/>,
or <xref target="DOQ"/>, for example, potentially discovered via <xref target="RFC9461"/>).
Additionally, <xref section="4.3" sectionFormat="of" target="RFC10001"/> provides guidance for how stub
resolvers ought to handle dual-stack environments. Following this guidance
is beneficial to clients implementing Happy Eyeballs, as it ensures that
dual-stack networks are handled well during DNS resolution, which is a
prerequisite for the rest of the Happy Eyeballs algorithm to work well.</t>
      </section>
      <section anchor="handling-dns-answers-asynchronously">
        <name>Handling DNS Answers Asynchronously</name>
        <t>Once the client receives sufficient answers to its DNS queries, it can
move onto the phases of sorting endpoints (<xref target="sorting"/>)
and establishing connections (<xref target="connections"/>).</t>
        <t>Implementations <bcp14>SHOULD NOT</bcp14> wait for all answers to return
before starting the next steps of connection establishment. If one query
fails or takes significantly longer to return, waiting for
those answers can significantly delay connection
establishment that could otherwise proceed with already received answers.</t>
        <t>Therefore, the client <bcp14>SHOULD</bcp14> treat DNS resolution as asynchronous,
processing different record types independently.
Note that if the platform does not offer an asynchronous DNS API,
this behavior can be simulated by making separate synchronous queries
for each record type in parallel.</t>
        <t>The client moves onto sorting endpoints and establishing connections
once one of the following condition sets is met:</t>
        <t>Either:</t>
        <ul spacing="normal">
          <li>
            <t>Some positive (non-empty) address answers have been received AND</t>
          </li>
          <li>
            <t>A postive (non-empty) or negative (empty) answer has been received
for the preferred address family that was queried AND</t>
          </li>
          <li>
            <t>SVCB/HTTPS service information has been received (or has received
a negative response)</t>
          </li>
        </ul>
        <t>Or:</t>
        <ul spacing="normal">
          <li>
            <t>Some positive (non-empty) address answers have been received AND</t>
          </li>
          <li>
            <t>A resolution time delay has passed after which other answers have
not been received</t>
          </li>
        </ul>
        <t>Positive answers can be IP addresses received either from AAAA or A
records, or IP address hints received directly in SVCB/HTTPS records.</t>
        <t>Negative answers are exclusively responses to AAAA or A records
that contain no IP addresses (with or without an error like NXDOMAIN).
If all answers come back with negative answers, the
connection establishment will fail or need to wait until other answers
are received.</t>
        <t>On networks that have both default routes for IPv6 and IPv4, IPv6 is
assumed to be the preferred address family. If only one of IPv6 or IPv4 has
a default route, that address family should be considered the preferred address
family for progressing the algorithm.</t>
        <t>The resolution time delay is a short time that provides a chance
to receive preferred addresses (via AAAA records) along
with service information (via SVCB/HTTPS records). This accounts
for the case where the AAAA or SVCB/HTTPS records follow the
A records by a few milliseconds. This delay is referred to as
the "Resolution Delay".</t>
        <t>The <bcp14>RECOMMENDED</bcp14> value for the Resolution Delay is 25 milliseconds.</t>
        <section anchor="resolving-svcbhttps-aliases-and-targets">
          <name>Resolving SVCB/HTTPS Aliases and Targets</name>
          <t>SVCB and HTTPS records describe information for network services. Individual
records are either AliasMode or ServiceMode records, where AliasMode requires
another SVCB/HTTPS query for the alias name. ServiceMode records either are
associated with the original name being queried, in which case their TargetName
is ".", or are associated with another service name (see <xref section="2.5" sectionFormat="of" target="SVCB"/>).</t>
          <t>The algorithm in this document does not consider service information to be received
until ServiceMode records are available.</t>
          <t>ServiceMode records can contain IP address hints via <tt>ipv6hint</tt> and <tt>ipv4hint</tt>
parameters. When these are received, they <bcp14>SHOULD</bcp14> be considered as positive
non-empty answers for the purpose of the algorithm when A and AAAA records
corresponding to the TargetName are not available yet. Note that clients are
still required to issue A and AAAA queries for those TargetNames if they haven't
yet received those records. When those records are received, they replace the hints
and update the available set of responses as new answers (see <xref target="new-answers"/>).</t>
        </section>
        <section anchor="examples">
          <name>Examples</name>
          <t>The following examples provide various sequences that might be seen for receiving
DNS answers, in order to show how the logic described above is used in
practice to determine when to move onto the sorting and connecting phases.</t>
          <t>A simple dual-stack case where AAAA answers return slight before A answers:</t>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="296" viewBox="0 0 296 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 24,48 L 24,304" fill="none" stroke="black"/>
                <path d="M 256,48 L 256,304" fill="none" stroke="black"/>
                <path d="M 128,48 L 152,48" fill="none" stroke="black"/>
                <path d="M 128,64 L 152,64" fill="none" stroke="black"/>
                <path d="M 128,80 L 152,80" fill="none" stroke="black"/>
                <path d="M 64,144 L 88,144" fill="none" stroke="black"/>
                <path d="M 64,160 L 88,160" fill="none" stroke="black"/>
                <path d="M 64,256 L 88,256" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="160,80 148,74.4 148,85.6" fill="black" transform="rotate(0,152,80)"/>
                <polygon class="arrowhead" points="160,64 148,58.4 148,69.6" fill="black" transform="rotate(0,152,64)"/>
                <polygon class="arrowhead" points="160,48 148,42.4 148,53.6" fill="black" transform="rotate(0,152,48)"/>
                <polygon class="arrowhead" points="72,256 60,250.4 60,261.6" fill="black" transform="rotate(180,64,256)"/>
                <polygon class="arrowhead" points="72,160 60,154.4 60,165.6" fill="black" transform="rotate(180,64,160)"/>
                <polygon class="arrowhead" points="72,144 60,138.4 60,149.6" fill="black" transform="rotate(180,64,144)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="224" y="36">DNS</text>
                  <text x="268" y="36">Server</text>
                  <text x="84" y="52">HTTPS?</text>
                  <text x="88" y="68">AAAA?</text>
                  <text x="100" y="84">A?</text>
                  <text x="112" y="116">(30ms</text>
                  <text x="164" y="116">delay)</text>
                  <text x="120" y="148">HTTPS</text>
                  <text x="160" y="148">(no</text>
                  <text x="204" y="148">hints)</text>
                  <text x="116" y="164">AAAA</text>
                  <text x="148" y="164">(2</text>
                  <text x="204" y="164">addresses)</text>
                  <text x="56" y="196">Start</text>
                  <text x="108" y="196">w/IPv6</text>
                  <text x="108" y="228">(2ms</text>
                  <text x="156" y="228">delay)</text>
                  <text x="104" y="260">A</text>
                  <text x="124" y="260">(2</text>
                  <text x="180" y="260">addresses)</text>
                  <text x="60" y="292">Update</text>
                  <text x="116" y="292">w/IPv6</text>
                  <text x="152" y="292">+</text>
                  <text x="180" y="292">IPv4</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
 Client                    DNS Server
   |    HTTPS?  --->            |
   |     AAAA?  --->            |
   |        A?  --->            |
   |                            |
   |        (30ms delay)        |
   |                            |
   |    <--- HTTPS (no hints)   |
   |    <--- AAAA (2 addresses) |
   |                            |
   | Start w/IPv6               |
   |                            |
   |        (2ms delay)         |
   |                            |
   |    <--- A (2 addresses)    |
   |                            |
   | Update w/IPv6 + IPv4       |
   |                            |
]]></artwork>
          </artset>
          <t>A case in which A answers return before AAAA answers, but AAAA
answers do arrive after a short delay:</t>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="296" viewBox="0 0 296 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 24,48 L 24,304" fill="none" stroke="black"/>
                <path d="M 256,48 L 256,304" fill="none" stroke="black"/>
                <path d="M 128,48 L 152,48" fill="none" stroke="black"/>
                <path d="M 128,64 L 152,64" fill="none" stroke="black"/>
                <path d="M 128,80 L 152,80" fill="none" stroke="black"/>
                <path d="M 64,144 L 88,144" fill="none" stroke="black"/>
                <path d="M 64,160 L 88,160" fill="none" stroke="black"/>
                <path d="M 64,256 L 88,256" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="160,80 148,74.4 148,85.6" fill="black" transform="rotate(0,152,80)"/>
                <polygon class="arrowhead" points="160,64 148,58.4 148,69.6" fill="black" transform="rotate(0,152,64)"/>
                <polygon class="arrowhead" points="160,48 148,42.4 148,53.6" fill="black" transform="rotate(0,152,48)"/>
                <polygon class="arrowhead" points="72,256 60,250.4 60,261.6" fill="black" transform="rotate(180,64,256)"/>
                <polygon class="arrowhead" points="72,160 60,154.4 60,165.6" fill="black" transform="rotate(180,64,160)"/>
                <polygon class="arrowhead" points="72,144 60,138.4 60,149.6" fill="black" transform="rotate(180,64,144)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="224" y="36">DNS</text>
                  <text x="268" y="36">Server</text>
                  <text x="84" y="52">HTTPS?</text>
                  <text x="88" y="68">AAAA?</text>
                  <text x="100" y="84">A?</text>
                  <text x="112" y="116">(30ms</text>
                  <text x="164" y="116">delay)</text>
                  <text x="120" y="148">HTTPS</text>
                  <text x="160" y="148">(no</text>
                  <text x="204" y="148">hints)</text>
                  <text x="104" y="164">A</text>
                  <text x="124" y="164">(2</text>
                  <text x="180" y="164">addresses)</text>
                  <text x="48" y="196">Set</text>
                  <text x="84" y="196">25ms</text>
                  <text x="128" y="196">timer</text>
                  <text x="112" y="228">(10ms</text>
                  <text x="164" y="228">delay)</text>
                  <text x="116" y="260">AAAA</text>
                  <text x="148" y="260">(2</text>
                  <text x="204" y="260">addresses)</text>
                  <text x="56" y="292">Start</text>
                  <text x="108" y="292">w/IPv6</text>
                  <text x="144" y="292">+</text>
                  <text x="172" y="292">IPv4</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
 Client                    DNS Server
   |    HTTPS?  --->            |
   |     AAAA?  --->            |
   |        A?  --->            |
   |                            |
   |        (30ms delay)        |
   |                            |
   |    <--- HTTPS (no hints)   |
   |    <--- A (2 addresses)    |
   |                            |
   | Set 25ms timer             |
   |                            |
   |        (10ms delay)        |
   |                            |
   |    <--- AAAA (2 addresses) |
   |                            |
   | Start w/IPv6 + IPv4        |
   |                            |
]]></artwork>
          </artset>
          <t>A case in which A answers return significantly before AAAA answers:</t>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="400" width="296" viewBox="0 0 296 400" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 24,48 L 24,368" fill="none" stroke="black"/>
                <path d="M 256,48 L 256,368" fill="none" stroke="black"/>
                <path d="M 128,48 L 152,48" fill="none" stroke="black"/>
                <path d="M 128,64 L 152,64" fill="none" stroke="black"/>
                <path d="M 128,80 L 152,80" fill="none" stroke="black"/>
                <path d="M 64,144 L 88,144" fill="none" stroke="black"/>
                <path d="M 64,160 L 88,160" fill="none" stroke="black"/>
                <path d="M 64,320 L 88,320" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="160,80 148,74.4 148,85.6" fill="black" transform="rotate(0,152,80)"/>
                <polygon class="arrowhead" points="160,64 148,58.4 148,69.6" fill="black" transform="rotate(0,152,64)"/>
                <polygon class="arrowhead" points="160,48 148,42.4 148,53.6" fill="black" transform="rotate(0,152,48)"/>
                <polygon class="arrowhead" points="72,320 60,314.4 60,325.6" fill="black" transform="rotate(180,64,320)"/>
                <polygon class="arrowhead" points="72,160 60,154.4 60,165.6" fill="black" transform="rotate(180,64,160)"/>
                <polygon class="arrowhead" points="72,144 60,138.4 60,149.6" fill="black" transform="rotate(180,64,144)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="224" y="36">DNS</text>
                  <text x="268" y="36">Server</text>
                  <text x="84" y="52">HTTPS?</text>
                  <text x="88" y="68">AAAA?</text>
                  <text x="100" y="84">A?</text>
                  <text x="112" y="116">(30ms</text>
                  <text x="164" y="116">delay)</text>
                  <text x="120" y="148">HTTPS</text>
                  <text x="160" y="148">(no</text>
                  <text x="204" y="148">hints)</text>
                  <text x="104" y="164">A</text>
                  <text x="124" y="164">(2</text>
                  <text x="180" y="164">addresses)</text>
                  <text x="48" y="196">Set</text>
                  <text x="84" y="196">25ms</text>
                  <text x="128" y="196">timer</text>
                  <text x="112" y="228">(25ms</text>
                  <text x="164" y="228">delay)</text>
                  <text x="56" y="260">Start</text>
                  <text x="108" y="260">w/IPv4</text>
                  <text x="116" y="292">(100ms</text>
                  <text x="172" y="292">delay)</text>
                  <text x="116" y="324">AAAA</text>
                  <text x="148" y="324">(2</text>
                  <text x="204" y="324">addresses)</text>
                  <text x="60" y="356">Update</text>
                  <text x="116" y="356">w/IPv6</text>
                  <text x="152" y="356">+</text>
                  <text x="180" y="356">IPv4</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
 Client                    DNS Server
   |    HTTPS?  --->            |
   |     AAAA?  --->            |
   |        A?  --->            |
   |                            |
   |        (30ms delay)        |
   |                            |
   |    <--- HTTPS (no hints)   |
   |    <--- A (2 addresses)    |
   |                            |
   | Set 25ms timer             |
   |                            |
   |        (25ms delay)        |
   |                            |
   | Start w/IPv4               |
   |                            |
   |        (100ms delay)       |
   |                            |
   |    <--- AAAA (2 addresses) |
   |                            |
   | Update w/IPv6 + IPv4       |
   |                            |
]]></artwork>
          </artset>
          <t>A case in which SVCB/HTTPS answers are slightly delayed:</t>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="296" viewBox="0 0 296 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 24,48 L 24,304" fill="none" stroke="black"/>
                <path d="M 256,48 L 256,304" fill="none" stroke="black"/>
                <path d="M 128,48 L 152,48" fill="none" stroke="black"/>
                <path d="M 128,64 L 152,64" fill="none" stroke="black"/>
                <path d="M 128,80 L 152,80" fill="none" stroke="black"/>
                <path d="M 64,144 L 88,144" fill="none" stroke="black"/>
                <path d="M 64,160 L 88,160" fill="none" stroke="black"/>
                <path d="M 64,256 L 88,256" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="160,80 148,74.4 148,85.6" fill="black" transform="rotate(0,152,80)"/>
                <polygon class="arrowhead" points="160,64 148,58.4 148,69.6" fill="black" transform="rotate(0,152,64)"/>
                <polygon class="arrowhead" points="160,48 148,42.4 148,53.6" fill="black" transform="rotate(0,152,48)"/>
                <polygon class="arrowhead" points="72,256 60,250.4 60,261.6" fill="black" transform="rotate(180,64,256)"/>
                <polygon class="arrowhead" points="72,160 60,154.4 60,165.6" fill="black" transform="rotate(180,64,160)"/>
                <polygon class="arrowhead" points="72,144 60,138.4 60,149.6" fill="black" transform="rotate(180,64,144)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="224" y="36">DNS</text>
                  <text x="268" y="36">Server</text>
                  <text x="84" y="52">HTTPS?</text>
                  <text x="88" y="68">AAAA?</text>
                  <text x="100" y="84">A?</text>
                  <text x="112" y="116">(30ms</text>
                  <text x="164" y="116">delay)</text>
                  <text x="116" y="148">AAAA</text>
                  <text x="148" y="148">(2</text>
                  <text x="204" y="148">addresses)</text>
                  <text x="104" y="164">A</text>
                  <text x="124" y="164">(2</text>
                  <text x="180" y="164">addresses)</text>
                  <text x="48" y="196">Set</text>
                  <text x="84" y="196">25ms</text>
                  <text x="128" y="196">timer</text>
                  <text x="112" y="228">(10ms</text>
                  <text x="164" y="228">delay)</text>
                  <text x="120" y="260">HTTPS</text>
                  <text x="160" y="260">(no</text>
                  <text x="204" y="260">hints)</text>
                  <text x="56" y="292">Start</text>
                  <text x="108" y="292">w/IPv6</text>
                  <text x="144" y="292">+</text>
                  <text x="172" y="292">IPv4</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
 Client                    DNS Server
   |    HTTPS?  --->            |
   |     AAAA?  --->            |
   |        A?  --->            |
   |                            |
   |        (30ms delay)        |
   |                            |
   |    <--- AAAA (2 addresses) |
   |    <--- A (2 addresses)    |
   |                            |
   | Set 25ms timer             |
   |                            |
   |        (10ms delay)        |
   |                            |
   |    <--- HTTPS (no hints)   |
   |                            |
   | Start w/IPv6 + IPv4        |
   |                            |
]]></artwork>
          </artset>
          <t>A case in which SVCB/HTTPS answers are significantly delayed,
or never arrive:</t>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="304" width="296" viewBox="0 0 296 304" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 24,48 L 24,272" fill="none" stroke="black"/>
                <path d="M 256,48 L 256,272" fill="none" stroke="black"/>
                <path d="M 128,48 L 152,48" fill="none" stroke="black"/>
                <path d="M 128,64 L 152,64" fill="none" stroke="black"/>
                <path d="M 128,80 L 152,80" fill="none" stroke="black"/>
                <path d="M 64,144 L 88,144" fill="none" stroke="black"/>
                <path d="M 64,160 L 88,160" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="160,80 148,74.4 148,85.6" fill="black" transform="rotate(0,152,80)"/>
                <polygon class="arrowhead" points="160,64 148,58.4 148,69.6" fill="black" transform="rotate(0,152,64)"/>
                <polygon class="arrowhead" points="160,48 148,42.4 148,53.6" fill="black" transform="rotate(0,152,48)"/>
                <polygon class="arrowhead" points="72,160 60,154.4 60,165.6" fill="black" transform="rotate(180,64,160)"/>
                <polygon class="arrowhead" points="72,144 60,138.4 60,149.6" fill="black" transform="rotate(180,64,144)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="224" y="36">DNS</text>
                  <text x="268" y="36">Server</text>
                  <text x="84" y="52">HTTPS?</text>
                  <text x="88" y="68">AAAA?</text>
                  <text x="100" y="84">A?</text>
                  <text x="112" y="116">(30ms</text>
                  <text x="164" y="116">delay)</text>
                  <text x="116" y="148">AAAA</text>
                  <text x="148" y="148">(2</text>
                  <text x="204" y="148">addresses)</text>
                  <text x="104" y="164">A</text>
                  <text x="124" y="164">(2</text>
                  <text x="180" y="164">addresses)</text>
                  <text x="48" y="196">Set</text>
                  <text x="84" y="196">25ms</text>
                  <text x="128" y="196">timer</text>
                  <text x="112" y="228">(25ms</text>
                  <text x="164" y="228">delay)</text>
                  <text x="56" y="260">Start</text>
                  <text x="108" y="260">w/IPv6</text>
                  <text x="144" y="260">+</text>
                  <text x="172" y="260">IPv4</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
 Client                    DNS Server
   |    HTTPS?  --->            |
   |     AAAA?  --->            |
   |        A?  --->            |
   |                            |
   |        (30ms delay)        |
   |                            |
   |    <--- AAAA (2 addresses) |
   |    <--- A (2 addresses)    |
   |                            |
   | Set 25ms timer             |
   |                            |
   |        (25ms delay)        |
   |                            |
   | Start w/IPv6 + IPv4        |
   |                            |
]]></artwork>
          </artset>
          <t>A case in which AAAA answers are delayed, but hints
are available:</t>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="224" width="296" viewBox="0 0 296 224" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 24,48 L 24,192" fill="none" stroke="black"/>
                <path d="M 256,48 L 256,192" fill="none" stroke="black"/>
                <path d="M 128,48 L 152,48" fill="none" stroke="black"/>
                <path d="M 128,64 L 152,64" fill="none" stroke="black"/>
                <path d="M 128,80 L 152,80" fill="none" stroke="black"/>
                <path d="M 64,144 L 88,144" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="160,80 148,74.4 148,85.6" fill="black" transform="rotate(0,152,80)"/>
                <polygon class="arrowhead" points="160,64 148,58.4 148,69.6" fill="black" transform="rotate(0,152,64)"/>
                <polygon class="arrowhead" points="160,48 148,42.4 148,53.6" fill="black" transform="rotate(0,152,48)"/>
                <polygon class="arrowhead" points="72,144 60,138.4 60,149.6" fill="black" transform="rotate(180,64,144)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="224" y="36">DNS</text>
                  <text x="268" y="36">Server</text>
                  <text x="84" y="52">HTTPS?</text>
                  <text x="88" y="68">AAAA?</text>
                  <text x="100" y="84">A?</text>
                  <text x="112" y="116">(30ms</text>
                  <text x="164" y="116">delay)</text>
                  <text x="120" y="148">HTTPS</text>
                  <text x="184" y="148">(w/hints)</text>
                  <text x="56" y="180">Start</text>
                  <text x="108" y="180">w/IPv6</text>
                  <text x="144" y="180">+</text>
                  <text x="172" y="180">IPv4</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
 Client                    DNS Server
   |    HTTPS?  --->            |
   |     AAAA?  --->            |
   |        A?  --->            |
   |                            |
   |        (30ms delay)        |
   |                            |
   |    <--- HTTPS (w/hints)    |
   |                            |
   | Start w/IPv6 + IPv4        |
   |                            |
]]></artwork>
          </artset>
          <t>A case in which SVCB/HTTPS answers return with multiple
service names ("." indicating that the service applies
to the original requested name, and "alt" being an
alternative service name). In this case, connection attempts
can start in parallel with new AAAA and A queries.</t>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="432" width="296" viewBox="0 0 296 432" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 24,48 L 24,400" fill="none" stroke="black"/>
                <path d="M 256,48 L 256,368" fill="none" stroke="black"/>
                <path d="M 128,48 L 152,48" fill="none" stroke="black"/>
                <path d="M 128,64 L 152,64" fill="none" stroke="black"/>
                <path d="M 128,80 L 152,80" fill="none" stroke="black"/>
                <path d="M 64,144 L 88,144" fill="none" stroke="black"/>
                <path d="M 64,160 L 88,160" fill="none" stroke="black"/>
                <path d="M 64,176 L 88,176" fill="none" stroke="black"/>
                <path d="M 64,192 L 88,192" fill="none" stroke="black"/>
                <path d="M 192,256 L 216,256" fill="none" stroke="black"/>
                <path d="M 192,272 L 216,272" fill="none" stroke="black"/>
                <path d="M 64,336 L 88,336" fill="none" stroke="black"/>
                <path d="M 64,352 L 88,352" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="224,272 212,266.4 212,277.6" fill="black" transform="rotate(0,216,272)"/>
                <polygon class="arrowhead" points="224,256 212,250.4 212,261.6" fill="black" transform="rotate(0,216,256)"/>
                <polygon class="arrowhead" points="160,80 148,74.4 148,85.6" fill="black" transform="rotate(0,152,80)"/>
                <polygon class="arrowhead" points="160,64 148,58.4 148,69.6" fill="black" transform="rotate(0,152,64)"/>
                <polygon class="arrowhead" points="160,48 148,42.4 148,53.6" fill="black" transform="rotate(0,152,48)"/>
                <polygon class="arrowhead" points="72,352 60,346.4 60,357.6" fill="black" transform="rotate(180,64,352)"/>
                <polygon class="arrowhead" points="72,336 60,330.4 60,341.6" fill="black" transform="rotate(180,64,336)"/>
                <polygon class="arrowhead" points="72,192 60,186.4 60,197.6" fill="black" transform="rotate(180,64,192)"/>
                <polygon class="arrowhead" points="72,176 60,170.4 60,181.6" fill="black" transform="rotate(180,64,176)"/>
                <polygon class="arrowhead" points="72,160 60,154.4 60,165.6" fill="black" transform="rotate(180,64,160)"/>
                <polygon class="arrowhead" points="72,144 60,138.4 60,149.6" fill="black" transform="rotate(180,64,144)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="224" y="36">DNS</text>
                  <text x="268" y="36">Server</text>
                  <text x="84" y="52">HTTPS?</text>
                  <text x="88" y="68">AAAA?</text>
                  <text x="100" y="84">A?</text>
                  <text x="112" y="116">(30ms</text>
                  <text x="164" y="116">delay)</text>
                  <text x="120" y="148">HTTPS</text>
                  <text x="168" y="148">(".")</text>
                  <text x="120" y="164">HTTPS</text>
                  <text x="176" y="164">("alt")</text>
                  <text x="116" y="180">AAAA</text>
                  <text x="148" y="180">(2</text>
                  <text x="204" y="180">addresses)</text>
                  <text x="104" y="196">A</text>
                  <text x="124" y="196">(2</text>
                  <text x="180" y="196">addresses)</text>
                  <text x="56" y="228">Start</text>
                  <text x="108" y="228">w/IPv6</text>
                  <text x="144" y="228">+</text>
                  <text x="172" y="228">IPv4</text>
                  <text x="88" y="260">AAAA?</text>
                  <text x="144" y="260">("alt")</text>
                  <text x="100" y="276">A?</text>
                  <text x="144" y="276">("alt")</text>
                  <text x="112" y="308">(30ms</text>
                  <text x="164" y="308">delay)</text>
                  <text x="116" y="340">AAAA</text>
                  <text x="148" y="340">(1</text>
                  <text x="196" y="340">address)</text>
                  <text x="104" y="356">A</text>
                  <text x="124" y="356">(1</text>
                  <text x="172" y="356">address)</text>
                  <text x="60" y="388">Update</text>
                  <text x="116" y="388">w/IPv6</text>
                  <text x="152" y="388">+</text>
                  <text x="180" y="388">IPv4</text>
                  <text x="264" y="388">|</text>
                  <text x="256" y="404">|</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
 Client                    DNS Server
   |    HTTPS?  --->            |
   |     AAAA?  --->            |
   |        A?  --->            |
   |                            |
   |        (30ms delay)        |
   |                            |
   |    <--- HTTPS (".")        |
   |    <--- HTTPS ("alt")      |
   |    <--- AAAA (2 addresses) |
   |    <--- A (2 addresses)    |
   |                            |
   | Start w/IPv6 + IPv4        |
   |                            |
   |     AAAA? ("alt")  --->    |
   |        A? ("alt")  --->    |
   |                            |
   |        (30ms delay)        |
   |                            |
   |    <--- AAAA (1 address)   |
   |    <--- A (1 address)      |
   |                            |
   | Update w/IPv6 + IPv4        |
   |                            |
]]></artwork>
          </artset>
          <t>An IPv4-only network connection where SVCB/HTTPS answers
are slightly delayed:</t>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="304" width="296" viewBox="0 0 296 304" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 24,48 L 24,272" fill="none" stroke="black"/>
                <path d="M 256,48 L 256,272" fill="none" stroke="black"/>
                <path d="M 128,48 L 152,48" fill="none" stroke="black"/>
                <path d="M 128,64 L 152,64" fill="none" stroke="black"/>
                <path d="M 64,128 L 88,128" fill="none" stroke="black"/>
                <path d="M 64,224 L 88,224" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="160,64 148,58.4 148,69.6" fill="black" transform="rotate(0,152,64)"/>
                <polygon class="arrowhead" points="160,48 148,42.4 148,53.6" fill="black" transform="rotate(0,152,48)"/>
                <polygon class="arrowhead" points="72,224 60,218.4 60,229.6" fill="black" transform="rotate(180,64,224)"/>
                <polygon class="arrowhead" points="72,128 60,122.4 60,133.6" fill="black" transform="rotate(180,64,128)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="224" y="36">DNS</text>
                  <text x="268" y="36">Server</text>
                  <text x="84" y="52">HTTPS?</text>
                  <text x="100" y="68">A?</text>
                  <text x="112" y="100">(30ms</text>
                  <text x="164" y="100">delay)</text>
                  <text x="104" y="132">A</text>
                  <text x="124" y="132">(2</text>
                  <text x="180" y="132">addresses)</text>
                  <text x="48" y="164">Set</text>
                  <text x="84" y="164">25ms</text>
                  <text x="128" y="164">timer</text>
                  <text x="112" y="196">(10ms</text>
                  <text x="164" y="196">delay)</text>
                  <text x="120" y="228">HTTPS</text>
                  <text x="160" y="228">(no</text>
                  <text x="204" y="228">hints)</text>
                  <text x="56" y="260">Start</text>
                  <text x="108" y="260">w/IPv4</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
 Client                    DNS Server
   |    HTTPS?  --->            |
   |        A?  --->            |
   |                            |
   |        (30ms delay)        |
   |                            |
   |    <--- A (2 addresses)    |
   |                            |
   | Set 25ms timer             |
   |                            |
   |        (10ms delay)        |
   |                            |
   |    <--- HTTPS (no hints)   |
   |                            |
   | Start w/IPv4               |
   |                            |
]]></artwork>
          </artset>
        </section>
      </section>
      <section anchor="new-answers">
        <name>Handling New Answers</name>
        <t>If new records arrive while connection attempts are in progress,
but before any connection has been established, then any newly
received endpoints are incorporated into the list of available candidate
endpoints (see <xref target="changes"/>) and the process of connection attempts will
continue with the new endpoints added, until one connection is
established.</t>
      </section>
      <section anchor="handling-expired-answers">
        <name>Handling Expired Answers</name>
        <t>Previously received DNS answers might expire (exceed their TTL)
while connection attempts are still in progress. A Happy Eyeballs client will not cancel those ongoing attempts when the answers
expire. However, the client <bcp14>MAY</bcp14> trigger new DNS queries to fetch non-expired answers after the original records have expired,
in the case in which the original answers have not yet led to a successful connection.
Addition of any new answers is handled as described in <xref target="new-answers"/> and <xref target="changes"/>; that is, ongoing connection attempts
will not be cancelled, but any endpoint for which a connection
attempt had not yet been started that is no longer in the resolved
endpoint list will be removed.</t>
        <t>Additionally, the fact that Happy Eyeballs enables clients to handle
updates to the resolved endpoint list asynchronously enables
the use of expired answers "optimistically" while waiting for non-expired
answers. This approach is called "optimistic DNS", and is described
in <xref target="OPTIMISTIC-DNS"/>.</t>
      </section>
    </section>
    <section anchor="sorting">
      <name>Grouping and Sorting Endpoints</name>
      <t>Before attempting to connect to any of the resolved destination
endpoints, the client defines the order in which to start the
attempts. Once the order has been defined, the client can use a
simple algorithm for racing each option after a short delay (see
<xref target="connections"/>). It is important that the ordered list involves all
endpoints from both address families and all protocols that have been received
by this point, as this allows the client to get the racing effect of
Happy Eyeballs for the entire list, not just the first IPv4 and first
IPv6 addresses.</t>
      <t>The client performs three levels of grouping
and sorting of endpoints based on the DNS answers received.
Each subsequent level of sorting only changes orders and
preferences within the previously defined groups.</t>
      <ol spacing="normal" type="1"><li>
          <t>Grouping and sorting by application protocol and security requirements (<xref target="application-group"/>)</t>
        </li>
        <li>
          <t>Grouping and sorting by service priorities (<xref target="service-group"/>)</t>
        </li>
        <li>
          <t>Sorting by destination endpoint preferences (<xref target="endpoint-sorting"/>)</t>
        </li>
      </ol>
      <section anchor="application-group">
        <name>Grouping By Application Protocols and Security Requirements</name>
        <t>Clients first group based on which application protocols the
destination endpoints support and which security features
those endpoints offer. These are based on
information from SVCB/HTTPS records about application-layer protocols
("alpn" values) and other parameters like TLS Encrypted Client Hello
configuration ("ech" values, see <xref target="SVCB-ECH"/>).</t>
        <t>For cases where the answers do not include any SVCB/HTTPS information,
or if all of the answers are associated with the same SVCB/HTTPS record,
this step is trivial: all answers belong to one group, and the client
assumes they support the same protocols and security properties.</t>
        <t>However, the client is aware of different sets of destination endpoints
that advertise different capabilities when it receives multiple distinct
SVCB/HTTPS records. The client <bcp14>SHOULD</bcp14> separate these
endpoints into different groups, such that all endpoints in a
group share the same application protocols and relevant security
properties. The specific parameters that are relevant to the client
depend on the client implementation and application.</t>
        <t>Note that some destination endpoints might need to be added to
multiple groups at this stage. For example, consider the following
HTTPS records:</t>
        <artwork><![CDATA[
 example.com. 60 IN HTTPS 1 svc1.example.com. (
     alpn="h3,h2" ipv6hint=2001:db8::2 )
 example.com. 60 IN HTTPS 1 svc2.example.com. (
     alpn="h2" ipv6hint=2001:db8::4 )
]]></artwork>
        <t>In this case, 2001:db8::2 can be used with HTTP/3 and HTTP/2,
but 2001:db8::4 can only be used with HTTP/2. If the client
creates a grouping for HTTP/3-capable endpoints and
HTTP/2-capable endpoints, 2001:db8::2 would exist in both
groups (assuming that all other security properties are
the same).</t>
        <t>Connection racing as described in <xref target="connections"/> applies
to different destination endpoint options within one of these groups.
The logic for prioritizing and falling back between groups
of endpoints with different security properties and protocol
properties is implementation-defined.</t>
        <section anchor="when-to-apply-application-preferences">
          <name>When to Apply Application Preferences</name>
          <t>Whether or not specific application protocols or security features
are grouped separately is a client application decision. Clients
<bcp14>SHOULD</bcp14> avoid grouping and sorting separately in cases where their
use of an application protocol or feature is non-critical.</t>
          <t>For example, an HTTP client loading a simple webpage may not see a large
difference between using HTTP/3 or HTTP/2, and thus can group the ALPNs together
to respect service-determined priorities where HTTP/3 might be
prioritized behind HTTP/2. However, another client might see significant
performance improvements by using HTTP/3's ability to send unreliable
frames for its application use-case and will group HTTP/3 before HTTP/2.</t>
          <t>Similarly, a particular application might require or strongly prefer the
use of TLS ECH for privacy-sensitive traffic, while others might
support ECH opportunistically.</t>
          <t><xref section="8" sectionFormat="of" target="SVCB-ECH"/> recommends against SVCB record sets that contain
some answers that include ECH configuration and some that don't, but notes
that such cases are possible. It is possible that services only include
ECH configurations on SVCB answers that are prioritized behind others
that don't include ECH configurations; for example, this might be
used as an experimentation or roll-out strategy. Due to such cases, clients
ought not to arbitrarily group ECH-containing answers and sort them
first if they won't use the ECH information, or if the connection would
not benefit from the use of ECH. However, for cases where there is a
reason for an application preference for ECH, the client <bcp14>MAY</bcp14> group
and prioritize those answers separately. Even though this might conflict
with the published service record priorities, any answers published
by the service are eligible to be used by clients, and clients can
choose to use them.</t>
        </section>
      </section>
      <section anchor="service-group">
        <name>Grouping By Service Priority</name>
        <t>The next step of grouping and sorting is to group across different
services (as defined by SVCB/HTTPS records), and sort these groups
by priority.</t>
        <t>This step allows server-published priorities to be reflected
in the client connection establishment algorithm.</t>
        <t>SVCB <xref target="SVCB"/> records indicate a priority for each ServiceMode response.
This priority applies to any IPv4 or IPv6 address hints in the record
itself, as well as any addresses received on A or AAAA queries for the
name in the ServiceMode record. The priority in a SVCB ServiceMode record is
always greater than 0.</t>
        <t>SVCB answers with the lowest numerical value (such as 1) are sorted
first, and answers with higher numerical values are sorted later.</t>
        <t>Note that a SVCB record with the TargetName "." applies to the owner
name in the record, and the priority of that SVCB record applies to
any A or AAAA records for the same owner name. These answers are
sorted according to that SVCB record's priority.</t>
        <t>All endpoints received from a particular SVCB service (within a group
as defined in <xref target="application-group"/>), either by an associated AAAA
or A record or address hints, <bcp14>SHOULD</bcp14> be separated into a group by
the client. These service-based groups <bcp14>SHOULD</bcp14> then be sorted
using the service priority.</t>
        <t>For cases where the answers do not include any SVCB/HTTPS information,
or if all of the answers are associated with the same SVCB/HTTPS record,
this step is trivial: all answers belong to one group that has the same
priority.</t>
        <t>When there are multiple services, and thus multiple groups, with the
same priority, the client <bcp14>SHOULD</bcp14> shuffle these groups randomly.</t>
        <t>If there are some SVCB/HTTPS services received, but there are AAAA or A
records that do not have an associated service (for example, if no
SVCB/HTTPS record is received for the original name using the "."
TargetName), the unassociated addresses <bcp14>SHOULD</bcp14> be put in a group of
endpoints that is prioritized at the end of the list.</t>
      </section>
      <section anchor="endpoint-sorting">
        <name>Sorting Destination Endpoints Within Groups</name>
        <t>Within each group of endpoints, after grouping based on the logic
in <xref target="application-group"/> and <xref target="service-group"/>, the client sorts
the endpoints based on preference and historical data.</t>
        <t>First, the client <bcp14>MUST</bcp14> sort the endpoints using Destination Address
Selection (<xref section="6" sectionFormat="comma" target="RFC6724"/>).</t>
        <t>If the client is stateful and has a history of expected round-trip
times (RTTs) for the routes to access each endpoint's IP address,
it <bcp14>SHOULD</bcp14> add a Destination Address Selection rule between rules 8 and 9 that prefers
addresses with lower RTTs. If the client keeps track of which
addresses it used in the past, it <bcp14>SHOULD</bcp14> add another Destination
Address Selection rule between the RTT rule and rule 9, which prefers
used addresses over unused ones. This helps servers that use the
client's IP address during authentication, as is the case for TCP
Fast Open <xref target="RFC7413"/> and some Hypertext Transport Protocol (HTTP)
cookies. This historical data <bcp14>MUST</bcp14> be partitioned using the same
boundaries used for privacy-sensitive information specific to that endpoint,
and <bcp14>MUST NOT</bcp14> be used across different Provisioning Domains (PvDs)
<xref target="PvD"/>. See <xref target="multi-networks"/> for discussion around handling multiple
PvDs. Implementations that use historical data <bcp14>MUST</bcp14> ensure that clients
with different historical data will eventually converge toward the same
behaviors. For example, clients can periodically ignore historical data
to ensure that fresh addresses are attempted.</t>
        <t>Next, the client <bcp14>SHOULD</bcp14> modify the ordered list to interleave
address families. Whichever address family is first in the list
should be followed by an endpoint of the other address family. For example,
if the first endpoint in the sorted list has an IPv6 address, then
the first IPv4 endpoint should be moved up in the list to be second
in the list. An implementation <bcp14>MAY</bcp14> choose to favor one
address family more by allowing multiple addresses of that
family to be attempted before trying the next.
The number of contiguous endpoints of the first address family of
properties will be referred to as the "Preferred Address Family
Count" and can be a configurable value. This avoids waiting through a
long list of endpoints for a given address family if connectivity
over that address family is impaired.</t>
        <t>Note that the endpoint selection described in this section only
applies to destination addresses; Source Address Selection
(<xref section="3.2" sectionFormat="comma" target="RFC6724-UPDATE"/>) is performed
once per destination address and is out of scope of this document.</t>
      </section>
    </section>
    <section anchor="connections">
      <name>Connection Attempts</name>
      <t>Once the list of endpoints received up to this point has been
constructed, the client will attempt to make connections. In order to
avoid unreasonable network load, connection attempts <bcp14>SHOULD NOT</bcp14> be
made simultaneously. Instead, one connection attempt to a single
endpoint is started first, followed by the others, one at a
time. Starting a new connection attempt does not affect previous
attempts, as multiple connection attempts may occur in parallel.  Once
one of the connection attempts succeeds (<xref target="success"/>), all other
connection attempts that have not yet succeeded <bcp14>SHOULD</bcp14> be canceled.
Any endpoint that was not yet attempted as a connection <bcp14>SHOULD</bcp14> be
ignored.  At that time, any asynchronous DNS queries <bcp14>MAY</bcp14> be canceled as
new endpoints will not be used for this connection. However, the DNS
client resolver <bcp14>SHOULD</bcp14> still process DNS replies from the network for
a short period of time (recommended to be 1 second), as they will
populate the DNS cache and can be used for subsequent connections.</t>
      <t>Cancelling remaining in-flight attempts once a connection succeeds
avoids unnecessary load on the network and server. In addition, if an
earlier, more preferred attempt (such as QUIC or IPv6) did not
complete before a later fallback attempt (such as TLS over TCP or
IPv4) succeeded, that path might be experiencing packet loss, rate
limiting, or other impairments, so switching to it can degrade
performance. However, client implementations with additional context
(for example, an HTTP connection manager that prefers HTTP/3 over
HTTP/2 for subsequent requests) <bcp14>MAY</bcp14> allow an already in-flight, more
preferred attempt to continue in the background rather than cancelling
it immediately, taking care to evaluate path quality before preferring
that connection and to close redundant connections when no longer
needed. Specific mechanisms for managing connection pools or switching
between established connections are out of scope for this document.</t>
      <t>Each connection attempt represents an independent transport connection
with its own connection identifiers and cryptographic handshake state
(for example, separate TCP connections or separate QUIC connections),
so handshake packets cannot be reused between attempts. When TLS is
used (either over TCP or as part of QUIC), clients <bcp14>MUST NOT</bcp14> reuse key
shares across connection attempts (<xref section="4.2.8" sectionFormat="of" target="RFC9846"/>).
Similarly, when attempting multiple QUIC connections (such as over
IPv6 and IPv4), clients <bcp14>MUST NOT</bcp14> send copies of the same QUIC Initial
packet or reuse Connection IDs across attempts (<xref section="9.5" sectionFormat="of" target="QUIC"/>). Avoiding reuse of Connection IDs and cryptographic handshake
values prevents observers from correlating the client's addresses
across network paths. Because attempts are separated by the Connection
Attempt Delay, most connections complete on the first attempt without
incurring the cost of additional handshakes.</t>
      <t>If grouping endpoints by application or security requirements
(<xref target="application-group"/>) produced multiple groups, the application
<bcp14>SHOULD</bcp14> start with connection attempts to the most preferred option.
The policy for attempting any endpoints outside of the most preferred
group is up to the client implementation and out of scope for this document.</t>
      <t>If grouping endpoints by service (<xref target="service-group"/>) produced multiple
groups, all of the endpoints of the first group <bcp14>SHOULD</bcp14> be started
before starting attempts using the next group. Attempts across service groups
<bcp14>SHOULD</bcp14> be allowed to continue in parallel; in effect, the groups
are flattened into a single list. The intent of these groups is to
strictly prioritize the most preferred service. Therefore, if a higher
priority group has many endpoints, there is a potential for long
delays before falling back to lower priority groups.</t>
      <t>A simple implementation can have a fixed delay for how long to wait
before starting the next connection attempt. This delay is referred to
as the "Connection Attempt Delay". One recommended value for a default
delay is 250 milliseconds. A more nuanced implementation's delay
should correspond to the time when the previous attempt is retrying
its handshake (such as sending a second TCP SYN or a second QUIC
Initial), based on the retransmission timer (<xref target="RFC6298"/>,
<xref target="RFC9002"/>). If the client has historical RTT data gathered from
other connections to the same host or prefix, it can use this
information to influence its delay. Transport retransmission timers
are generally tuned so that most healthy connections complete their
initial handshake without retransmitting; waiting until roughly the
first handshake retransmission gives the preferred attempt a fair
chance to succeed without starting redundant connection attempts in
the common case, while starting the next attempt promptly once the
initial packet (or its response) is likely to have been lost.</t>
      <t>Note that this algorithm should only try to approximate the time of
the first handshake packet retransmission, and not any further
retransmissions that may be influenced by exponential timer back off.
In practice, the layer implementing Happy Eyeballs often operates
above the transport layer and might not directly control or know the
exact timing of transport-layer retransmissions. Even when
retransmission timing is known or closely estimated, sending a
handshake retransmission on a previous attempt at the same time as the
initial packet of a new attempt can create a small burst of packets
when the network is already experiencing loss. Implementations <bcp14>MAY</bcp14>
apply a small amount of jitter or pacing to avoid sending both packets
simultaneously.</t>
      <t>Clients that support session resumption mechanisms (such as TLS
session tickets <xref target="RFC8446"/> or QUIC 0-RTT <xref target="RFC9001"/>) <bcp14>SHOULD</bcp14> use
the same Connection Attempt Delay for resumed connections as for new
connections.</t>
      <t>The Connection Attempt Delay <bcp14>MUST</bcp14> have a lower bound, especially if it
is computed using historical data. More specifically, a subsequent
connection <bcp14>MUST NOT</bcp14> be started within 10 milliseconds of the previous
attempt. The recommended minimum value is 100 milliseconds, which is
referred to as the "Minimum Connection Attempt Delay". This minimum
value is required to avoid congestion collapse in the presence of high
packet-loss rates. The Connection Attempt Delay <bcp14>SHOULD</bcp14> have an upper
bound, referred to as the "Maximum Connection Attempt Delay". The
current recommended value is 2 seconds.</t>
      <t>An implementation <bcp14>MAY</bcp14> increase the Connection Attempt Delay for each
additional connection attempt that is started while earlier attempts
are still in progress, multiplying the delay by a fixed factor (the
"Connection Attempt Delay Multiplier") for each such attempt. The
multiplier scales whichever base delay the implementation uses: the
RTT-derived estimate described above when RTT data is available, or the
fixed default otherwise. A short base delay starts a first fallback
quickly, while the multiplier spaces out later attempts so the
aggregate attempt rate stays low. For example, with a fixed base delay
of 50 milliseconds and a multiplier of 2, attempts are started at 0,
50, 150, 350, and 750 milliseconds. A multiplier of 1 keeps the delay
constant. A base delay below the recommended Minimum Connection Attempt
Delay <bcp14>MAY</bcp14> be used (for example, with a multiplier greater than 1), but
the 10 millisecond hard lower-bound still applies.</t>
      <t>The Connection Attempt Delay is used to set a timer, referred to as
the "Next Connection Attempt Timer". Whenever this timer fires and
a connection has not been successfully established, the next
connection attempt starts, and the timer either is reset to a new
delay value or, in the case of the end of the list being reached,
is cancelled. Note that the delay value can be different for each
connection attempt (depending on the protocol being used and
the estimated RTT).</t>
      <t>The algorithm in this document describes establishing a single
connection, and the Connection Attempt Delay bounds the attempt rate
of a single Happy Eyeballs procedure. However, an application might
initiate multiple concurrent connection requests to the same host or
service within a short period (for example, for parallel HTTP/1.1
requests, or when a speculative preconnect is followed closely by an
active request). Running uncoordinated Happy Eyeballs procedures in
parallel can still produce an aggregate burst of connection attempts
to the same destination. While mechanisms for managing pools of
multiple connections are out of scope for this document, client
implementations can mitigate such bursts by coalescing resolution and
in-flight connection establishment when a single connection can be
shared (such as with HTTP/2 or HTTP/3), or by coordinating attempt
pacing across concurrent Happy Eyeballs procedures targeting the same
host or service when multiple connections are needed.</t>
      <section anchor="success">
        <name>Determining successful connection establishment</name>
        <t>The determination of when a connection attempt has successfully
completed (and other attempts can be cancelled) ultimately depends
on the client application's interpretation of the connection
state being ready to use. This will generally include at least
the transport-level handshake with the remote endpoint (such as
the TCP or QUIC handshake), but can involve other higher-level
handshakes or state checks as well.</t>
        <t>Client connections that use TCP only (without TLS or another protocol
on top, such as for unencrypted HTTP connections) will determine
successful establishment based on completing the TCP handshake
only. When TLS is used on top of TCP (such as for encrypted HTTP
connections), clients <bcp14>SHOULD</bcp14> wait for the TLS handshake to
successfully complete before cancelling other connection
attempts. This is particularly useful for networks in which a
TCP-terminating proxy might be causing TCP handshakes to succeed
quickly, even though end-to-end connectivity with the TLS-terminating
server will fail. QUIC connections inherently include a secure
handshake in their main handshakes, and thus usually only need to
wait for a single handshake to complete.</t>
        <t>Beyond TCP, TLS, and/or QUIC handshakes, clients may also wait for
other requirements to be met before determining that the connection
establishment was successful. For example, clients generally validate that
the server's certificate provided via TLS is trusted, and that operation can
be asynchronous.</t>
        <t>In cases where the connection establishment determination goes beyond
the initial transport handshake, the Next Connection Attempt Timer
ought to be adjusted after the initial transport handshake is completed.
When the connection establishment makes progress, but has not completed,
the timer <bcp14>SHOULD</bcp14> be extended to a new value that represents an estimated
time for the full connection establishment to complete.</t>
        <t>For example, consider a case where connection establishment involves
both a TCP handshake and a TLS handshake. If the timer is initially set
to be roughly at the time when a TCP SYN packet would be retransmitted,
and the TCP handshake completes before the timer fires, the timer should
be adjusted to allow for the time in which the TLS handshake could complete.</t>
        <t>While transport layer handshakes generally do not have restrictions on
attempts to establish a connection, some cryptographic handshakes
might depend on SVCB ServiceMode records and impose limitations on
establishing a connection. For instance, ECH-capable clients might
rely on SVCB records that contain the "ech" SvcParamKey <xref target="SVCB-ECH"/>
before starting a TLS handshake. See <xref target="pending"/> for details on when
clients need to pend or abandon connection attempts while awaiting
SVCB records.</t>
      </section>
      <section anchor="handling-application-layer-protocol-negotiation-alpn">
        <name>Handling Application Layer Protocol Negotiation (ALPN)</name>
        <t>The <tt>alpn</tt> and <tt>no-default-alpn</tt> SvcParamKeys in SVCB records indicate the
"SVCB ALPN set," which specifies the underlying transport protocols
supported by the associated service endpoint. When the client requests
SVCB records, it <bcp14>SHOULD</bcp14> perform the procedure specified in <xref section="7.1.2" sectionFormat="of" target="SVCB"/> to determine the underlying transport protocols that both
the client and the service endpoint support. The client <bcp14>SHOULD NOT</bcp14>
attempt to make a connection to a service endpoint whose SVCB ALPN set
does not contain any protocols that the client supports. For example,
suppose the client is an HTTP client that only supports TCP-based
versions such as HTTP/1.1 and HTTP/2, and it receives the following
HTTPS record:</t>
        <artwork><![CDATA[
 example.com. 60 IN HTTPS 1 svc1.example.com. (
     alpn="h3" no-default-alpn ipv6hint=2001:db8::2 )
]]></artwork>
        <t>In this case, attempting a connection to 2001:db8::2 or any other
address resolved for <tt>svc1.example.com</tt> would be incorrect because the
record indicates that <tt>svc1.example.com</tt> only supports HTTP/3, based on
the ALPN value of "h3".</t>
        <t>If the client is an HTTP client that supports both Alt-Svc
<xref target="AltSvc"/> and SVCB (HTTPS) records, the client <bcp14>SHOULD</bcp14> ensure
that connection attempts are consistent with both the Alt-Svc
parameters and the SVCB ALPN set, as specified in <xref section="9.3" sectionFormat="of" target="SVCB"/>.</t>
      </section>
      <section anchor="pending">
        <name>Dropping or Pending Connection Attempts</name>
        <t>Some situations related to handling SVCB responses can
require connection attempts to be dropped, or pended until
SVCB responses return.</t>
        <t><xref section="3.1" sectionFormat="of" target="SVCB"/> describes client behavior for handling
resolution failures when responses are "cryptographically protected"
using DNSSEC <xref target="DNSSEC"/> or encrypted DNS (<xref target="DOT"/>,
<xref target="DOH"/>, or <xref target="DOQ"/>, for example). If SVCB
resolution fails when using cryptographic protection, clients
<bcp14>SHOULD</bcp14> abandon connection attempts altogether to avoid
downgrade attacks.</t>
        <t>Use of cryptographic protection in DNS can influence other
parts of Happy Eyeballs connection establishment, as well.</t>
        <t>Situations in which DNS is not protected allow for any records
to be blocked or modified, so security properties derived from
SVCB records are opportunistic only. However, when DNS is cryptographically
protected, clients can be stricter about relying on the properties
from SVCB records.</t>
        <t><xref section="5.1" sectionFormat="of" target="SVCB"/> explains that clients "<bcp14>MUST NOT</bcp14> transmit any
information that could be altered by the SVCB response until it arrives",
and specifically mentions properties that affect the TLS ClientHello.
This restriction specifically applies when a client's behavior will
be altered by the SVCB response, which depends both on the client
implementation's ability to support a particular feature, as well
as the client implementation's willingness to rely on the SVCB
response to enable a particular feature.</t>
        <t>Based on this, clients in some scenarios <bcp14>MUST</bcp14> pend starting
a TLS handshake (either after TCP or as part of QUIC) until SVCB
responses have been received, even after the "Resolution Delay"
defined in <xref target="resolution"/> has been reached. Specifically, clients
<bcp14>MUST</bcp14> pend starting handshakes if <em>all</em> of the following are true:</t>
        <ol spacing="normal" type="1"><li>
            <t>DNS responses are cryptographically protected with DNSSEC or
encrypted DNS. Note that, if unencrypted and unsigned DNS is used, SVCB
information is opportunistic; clients <bcp14>MAY</bcp14> wait for SVCB responses
but do not need to.</t>
          </li>
          <li>
            <t>The client implementation supports parsing and using a particular
security-related SVCB parameter, such as the "ech" SvcParamKey
<xref target="SVCB-ECH"/>. (In contrast,
implementations that do not support actively using ECH do
not need to wait for SVCB resolution if that is the only
reason to do so).</t>
          </li>
          <li>
            <t>The client relies on the presence of the particular
SVCB-related parameter to enable the relevant protocol feature.
For example, if a connection attempt would normally be
using cleartext HTTP unless an HTTPS DNS record would
cause the client to upgrade, the client needs to
wait for the record; however, if the client already
would be using HTTP over TLS, then it is not relying
on that signal from SVCB. As another example, some SVCB
properties can affect the TLS ClientHello in ways that optimize
performance (like <tt>tls-supported-groups</tt> <xref target="I-D.ietf-tls-key-share-prediction"/>)
but only aim to save round trips. The other TLS groups
can be discovered through the TLS handshake itself, instead
of SVCB, and thus do not require waiting for SVCB responses.</t>
          </li>
        </ol>
        <t>Pending the TLS handshake affects transport protocols differently once
address records are available and any applicable Resolution Delay has
elapsed:</t>
        <ul spacing="normal">
          <li>
            <t>For QUIC, the TLS ClientHello is carried in the initial packet of
the connection. If the client needs to pend starting
the TLS handshake until SVCB responses have arrived,
it needs to pend sending any QUIC packets.</t>
          </li>
          <li>
            <t>When TLS is used over TCP and the client needs to
pend starting the TLS handshake, the client <bcp14>MAY</bcp14> speculatively start the TCP
handshake using resolved A or AAAA addresses while holding back the
TLS ClientHello until SVCB responses arrive. If the SVCB responses
allow using an endpoint for which a speculative TCP handshake was
started (for example, when SVCB returns a negative response or a
ServiceMode record with TargetName "."), the client can proceed with
the TLS handshake on that TCP connection. Conversely, if an endpoint
with an in-progress or completed speculative TCP handshake is not
selected once the SVCB response arrives (for example, because the
client selects an alternative TargetName that provides "ech"
<xref target="SVCB-ECH"/>), the client <bcp14>SHOULD</bcp14> close that TCP connection without
sending a TLS ClientHello.</t>
          </li>
        </ul>
        <t>Starting a speculative TCP handshake before SVCB resolution completes
trades privacy for reduced latency: although the TLS ClientHello is
not exposed, sending TCP SYN packets to the origin's addresses can
reveal communication with IP addresses that the client would not have
contacted if an SVCB record directed it to an alternative TargetName
(such as a shared ECH-enabled frontend). Clients with stricter privacy
requirements <bcp14>MAY</bcp14> pend the TCP handshake until SVCB responses have been
received.</t>
      </section>
    </section>
    <section anchor="changes">
      <name>DNS Answer Changes During Happy Eyeballs Connection Setup</name>
      <t>If, during the course of connection establishment, the DNS answers
change by either adding resolved endpoints (for example due to DNS
push notifications <xref target="RFC8765"/>) or removing previously resolved
endpoints (for example, due to expiry of the TTL on that DNS record),
the client should react based on its current progress. Additionally, endpoints
from SVCB IP hints <bcp14>SHOULD</bcp14> be removed from the list once A and AAAA records are
received for the corresponding name, if the endpoints from the hints are absent from the
received records <xref section="7.3" sectionFormat="of" target="SVCB"/>.</t>
      <t>If an endpoint is removed from the list that already had a connection
attempt started, the connection attempt <bcp14>SHOULD NOT</bcp14> be canceled, but
rather be allowed to continue. If the removed endpoint had not yet
had a connection attempt started, it <bcp14>SHOULD</bcp14> be removed from the list
of endpoints to try.</t>
      <t>If an endpoint is added to the list, its position <bcp14>SHOULD</bcp14> be determined by
applying the sorting rules (see <xref target="sorting"/>) to the complete list of endpoints,
including those previously received. This ensures that sorting rules, such as address family
interleaving, are maintained correctly regardless of when endpoints arrive. For
example, consider a connection attempt in which only IPv6 addresses
are available initially, and an attempt to one IPv6 address endpoint is already in progress.
Then, when IPv4 addresses are later received, an IPv4 address endpoint should be placed next in the list of endpoints to attempt
(to account for interleaving address families) ahead of any remaining IPv6 address endpoints, as if it had been available initially.</t>
      <t>When DNS answers change while a Connection Attempt Delay timer is running, the
client <bcp14>MAY</bcp14> reschedule the timer. While a DNS update alone does not justify
rescheduling the timer, if at least one connection attempt started before the
DNS update has not made progress within an expected time window, the client <bcp14>MAY</bcp14> treat this as a signal that
the previous addresses may no longer be viable and fire the timer sooner
to start a connection attempt to the next address in the updated list, subject
to the Minimum Connection Attempt Delay.</t>
    </section>
    <section anchor="nat64">
      <name>Handling NAT64 Networks</name>
      <t>NAT64 <xref target="NAT64"/> is an IPv6 transition protocol that allows
clients with IPv6-only connectivity to access IPv4-only peers
outside the local link. When NAT64 is in use, an IPv6 prefix,
referred to as PREF64, is used on by the NAT for synthesizing
IPv4 addresses into IPv6 addresses.</t>
      <section anchor="discovering-pref64">
        <name>Discovering PREF64</name>
        <t>Clients can discover a network's PREF64 in one of the following ways:</t>
        <ol spacing="normal" type="1"><li>
            <t>From a Router Advertisement option (<xref target="PREF64"/>)</t>
          </li>
          <li>
            <t>From a DNS query for ipv4only.arpa (<xref target="RFC7050"/>)</t>
          </li>
        </ol>
        <t>If a network with IPv6-only connectivity does not provide the prefix
in a Router Advertisement <xref target="PREF64"/>, clients <bcp14>SHOULD</bcp14> send the DNS
query to discover the prefix <xref target="RFC7050"/>.</t>
        <t>Networks that use NAT64 might also include DNS64 <xref target="DNS64"/>,
in which the DNS resolver synthesizes A answers into AAAA answers.
However, with the prefix available from router advertisements <xref target="PREF64"/>,
networks might choose to not deploy DNS64, as the latter has a number
of disadvantages (see <xref section="4.3.4" sectionFormat="of" target="V6-MOSTLY"/>).</t>
        <t>To ensure compatibility with any NAT64 network, whenever the client
detects a NAT64 prefix, from either of the options reference above,
clients <bcp14>MUST</bcp14> send A queries in addition to AAAA queries (as
specified in <xref target="queries"/>). This allows the client to receive any
existing IPv4 A records and perform local NAT64 address synthesis,
eliminating the network's need to run DNS64.</t>
      </section>
      <section anchor="handling-synthesized-answers">
        <name>Handling Synthesized Answers</name>
        <t>Synthesized IPv6 addresses (IPv4 addresses that have been
synthensized into IPv6 addresses either locally using PREF64
or by a DNS64 resolver) <bcp14>MUST</bcp14> be de-synthesized into IPv4 addresses
before being used by the Happy Eyeballs client for grouping and
sorting (<xref target="sorting"/>), and connecting. These addresses might
be re-synthesized into IPv6 addresses (see <xref target="synthesizing"/>),
in which case implementations can choose to optimize processing
by storing the original address, but still using the IPv4 address
for purposes of sorting and route lookups.</t>
        <t>IPv6 addresses received from AAAA records might come from DNS64
<xref target="DNS64"/>. Clients that are aware of the PREF64 value <bcp14>MUST</bcp14> check
to see if an IPv6 address received from DNS is actually an IPv4
address.</t>
      </section>
      <section anchor="synthesizing">
        <name>Synthesizing IPv6 Addresses During Connection Establishment</name>
        <t>When a client has discovered PREF64, it can use the prefix to
synthesize IPv4 addresses into IPv6 addresses as defined in <xref target="RFC6052"/>.</t>
        <t>If the Happy Eyeballs client is attempting a connection
to an IPv4 address when there is no IPv4 route that applies for that
address, then the client <bcp14>MUST</bcp14> synthesize this address into an
IPv6 address using the PREF64. These IPv4 addresses can come
from DNS (via A records or IPv4 address hints received in
SVCB/HTTPS records), or from de-synthesizing IPv6 addresses,
or from IPv4 literal addresses passed by an application.
This solution is similar to "Bump-in-the-Host" <xref target="RFC6535"/>,
but is implemented inside the Happy Eyeballs client.</t>
        <t>Note that NAT64 address synthesis is not always required or possible.
Some IPv4 prefixes are scoped to a given host or network and do not require
synthesis, such as 0.0.0.0/8, 127.0.0.0/8, 169.254.0.0/16, and 255.255.255.255/32.</t>
      </section>
    </section>
    <section anchor="multi-networks">
      <name>Handling Multiple Networks and Network Changes</name>
      <t>The Happy Eyeballs algorithm as described in this document applies to
how resolution, sorting, and connection establishment are performed on
a single network configuration. For the purposes of this document, the
definition of a Provisioning Domain (PvD) <xref target="PvD"/> is used to
refer to this network configuration. A PvD is defined as "a consistent
set of network configuration information", including the DNS servers
and router prefixes assigned by the network connection.</t>
      <t>Multiple PvDs can be in use over time for various reasons: a client
device's network configuration or attachments might change (joining
or leaving a Wi-Fi network, connecting to a wired Ethernet network,
establishing a tunnel to a VPN server), and a client device can be
attached to multiple networks at the same time (such as a mobile
device having connectivity to both a Wi-Fi network and a cellular
network).</t>
      <t>Clients implementing the Happy Eyeballs algorithm <bcp14>MUST</bcp14> partition
the information used to guide the algorithm across different PvDs.
Specifically, the following properties cannot be used across different
PvDs:</t>
      <ul spacing="normal">
        <li>
          <t>DNS answers (even when PvDs share a configured DNS resolver, as answers can depend on the network path)</t>
        </li>
        <li>
          <t>NAT64 prefixes (see <xref target="nat64"/>)</t>
        </li>
        <li>
          <t>Historical data used to sort endpoints, such as round trip times and previously used addresses (see <xref target="endpoint-sorting"/>), or to compute the Connection Attempt Delay (see <xref target="connections"/>)</t>
        </li>
      </ul>
      <t>Information that is cached per-PvD, such as historical round trip data and DNS answers,
<bcp14>SHOULD</bcp14> be flushed whenever a device changes the PvD to which it is attached.
However, if a client can reliably identify a previously attached PvD, it <bcp14>MAY</bcp14>
retain and resume using cached data associated with that PvD upon reconnection.</t>
      <t>VPNs (Virtual Private Networks) can pose specific complexities, particularly
when they have split-horizon DNS configurations (see <xref target="RFC9704"/> for a
definition of split-horizon DNS). For example, a VPN configuration might
require that all queries for names under "example.com" be sent to a VPN-specific
DNS server, and address answers from that DNS server might end up being
routed either over the VPN tunnel or over a non-VPN route. The requirement
above to partition information across PvDs does not mean that split-horizon
VPNs will lead to failures. Instead, the set of split-horizon DNS servers
and routes ought to be considered as one larger PvD. When a VPN is connected
or disconnected (adding or removing a split-horizon configuration), the client
ought to consider that to be a PvD change and flush or re-fetch cached state
such as DNS answers.</t>
    </section>
    <section anchor="summary-of-configurable-values">
      <name>Summary of Configurable Values</name>
      <t>The values that may be configured as defaults on a client for use in
Happy Eyeballs are as follows:</t>
      <ul spacing="normal">
        <li>
          <t>Resolution Delay (<xref target="resolution"/>): The time to wait for AAAA and/or SVCB/HTTPS
records after receiving an A record. Recommended to be 25 milliseconds.</t>
        </li>
        <li>
          <t>Preferred Address Family Count (<xref target="sorting"/>): The number of
endpoints belonging to the preferred address family (such as IPv6)
that should be attempted before attempting the next address family.
Recommended to be 1; 2 may be used to more aggressively favor a
particular combination of address family and protocol.</t>
        </li>
        <li>
          <t>Connection Attempt Delay (<xref target="connections"/>): The time to wait between
connection attempts in the absence of RTT data. Recommended to be
250 milliseconds.</t>
        </li>
        <li>
          <t>Minimum Connection Attempt Delay (<xref target="connections"/>): The minimum time to
wait between connection attempts. Recommended to be 100
milliseconds. <bcp14>MUST NOT</bcp14> be less than 10 milliseconds.</t>
        </li>
        <li>
          <t>Maximum Connection Attempt Delay (<xref target="connections"/>): The maximum time to
wait between connection attempts. Recommended to be 2 seconds.</t>
        </li>
        <li>
          <t>Connection Attempt Delay Multiplier (<xref target="connections"/>): An optional
factor by which the Connection Attempt Delay is multiplied for each
additional concurrent connection attempt in progress. Recommended to be
1 (a constant delay); values greater than 1 grow the delay per attempt
and allow a shorter base delay.</t>
        </li>
      </ul>
      <t>The delay values described in this section were determined
empirically by measuring the timing of connections on a very wide set
of production devices. They were picked to reduce wait times noticed
by users while minimizing load on the network. As time passes, it is
expected that the properties of networks will evolve. For that
reason, it is expected that the values chosen by implementations
will change over time. Implementors <bcp14>MAY</bcp14> use values different from the
recommended values listed above, without changing this specification,
as long as they do not violate any of the normative requirements (such
as minimum delays).</t>
    </section>
    <section anchor="limitations">
      <name>Limitations</name>
      <t>Happy Eyeballs will handle initial connection failures at the transport
layer (such as TCP or QUIC); however, other failures or performance
issues may still affect the chosen connection.</t>
      <section anchor="path-maximum-transmission-unit-discovery">
        <name>Path Maximum Transmission Unit Discovery</name>
        <t>Connections that use TCP only (without TLS or another protocol on top)
perform connection racing only during the TCP handshake. Such connections
can encounter issues where the TCP handshake (using small packets) completes
but then large packets are dropped or incorrectly handled by the network
due to a small MTU being configured somewhere in the network.
Such issues might be more likely with IPv6 traffic  <xref target="RFC8900"/>
due to the network being unable to fragment IPv6 packets
and associated issues with Path MTU Discovery, such as with ICMPv6 PTB
messages not making it back to the client.</t>
        <t>This problem can also occur when TLS is used, but the larger
messages used in many TLS handshakes are often sufficient to
ensure maximum-size TCP segments are deliverable. For QUIC
connections, a minimum MTU of at least 1200 bytes
<xref section="8.1-5" sectionFormat="comma" target="RFC9000"/> is guaranteed, but there is a chance that
larger values may not be available.</t>
        <t>Solving these issues is out of scope of this document. One suggested
approach is to use "Packetization Layer Path MTU Discovery" <xref target="RFC4821"/>.</t>
      </section>
      <section anchor="application-layer">
        <name>Application Layer</name>
        <t>If the DNS returns multiple endpoints for different application
servers, the application itself may not be operational and functional
on all of them. Common examples include Transport Layer Security
(TLS) and HTTP.</t>
      </section>
      <section anchor="hiding-operational-issues">
        <name>Hiding Operational Issues</name>
        <t>It has been observed in practice that Happy Eyeballs can hide issues
in networks. For example, if a misconfiguration causes IPv6 to
consistently fail on a given network while IPv4 is still functional,
Happy Eyeballs may impair the operator's ability to notice the issue.
It is recommended that network operators deploy external means of
monitoring to ensure functionality of all address families.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Note that applications should not rely upon a stable
hostname-to-address mapping to ensure any security properties, since
DNS results may change between queries. Happy Eyeballs may make it
more likely that subsequent connections to a single hostname use
different IP addresses.</t>
      <t>When using HTTP, HTTPS resource records indicate that clients should
require HTTPS when connecting to an origin (see <xref section="9.5" sectionFormat="of" target="SVCB"/>), so an active attacker can attempt a downgrade attack by
interfering with the successful delivery of HTTPS resource records.
When clients use insecure DNS mechanisms, any on-path attacker can
simply drop HTTPS resource records, so clients cannot tell the
difference between an attack and a resolver that fails to respond to
HTTPS queries.</t>
      <t>However, when using cryptographically protected DNS mechanisms, as
described in <xref section="3.1" sectionFormat="of" target="SVCB"/>, both SVCB-reliant and
SVCB-optional clients <bcp14>MUST NOT</bcp14> send any unencrypted data after the TCP
handshake completes unless they have received a valid HTTPS response.
Those clients need to complete a TLS handshake before proceeding if
that response is non-negative.</t>
      <t>Similar downgrade considerations apply to security-related SVCB
parameters such as "ech" <xref target="SVCB-ECH"/>, which provides ECH
configurations <xref target="ECH"/> used to encrypt sensitive fields of the TLS
ClientHello. Even when DNS queries use an encrypted transport, an
on-path attacker might attempt to selectively delay or drop packets
carrying SVCB or HTTPS responses (for example, using packet timing or
size heuristics) while allowing A and AAAA responses through. If an
ECH-capable client proceeded with an unencrypted TLS ClientHello after
the Resolution Delay without waiting for the SVCB or HTTPS response,
the attacker could force ECH to be omitted. Waiting for SVCB or HTTPS
responses before starting the TLS handshake when DNS is
cryptographically protected, and abandoning connection attempts if
protected resolution fails (see <xref target="pending"/>), prevents this downgrade
attack.</t>
      <t>Additionally, as described in <xref target="pending"/>, speculatively starting a
TCP handshake using A or AAAA records before SVCB or HTTPS resolution
completes does not expose the TLS ClientHello, but can still expose
traffic to origin IP addresses that would not have been contacted if
an SVCB or HTTPS record directed the client to an alternative
TargetName (such as a shared ECH-enabled frontend). Clients with
stricter privacy requirements can avoid this exposure by waiting for
SVCB or HTTPS responses before starting the TCP handshake.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document does not require any IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="ECH">
          <front>
            <title>TLS Encrypted Client Hello</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="K. Oku" initials="K." surname="Oku"/>
            <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="March" year="2026"/>
            <abstract>
              <t>This document describes a mechanism in Transport Layer Security (TLS) for encrypting a message under a server public key.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9849"/>
          <seriesInfo name="DOI" value="10.17487/RFC9849"/>
        </reference>
        <reference anchor="SVCB">
          <front>
            <title>Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)</title>
            <author fullname="B. Schwartz" initials="B." surname="Schwartz"/>
            <author fullname="M. Bishop" initials="M." surname="Bishop"/>
            <author fullname="E. Nygren" initials="E." surname="Nygren"/>
            <date month="November" year="2023"/>
            <abstract>
              <t>This document specifies the "SVCB" ("Service Binding") and "HTTPS" DNS resource record (RR) types to facilitate the lookup of information needed to make connections to network services, such as for HTTP origins. SVCB records allow a service to be provided from multiple alternative endpoints, each with associated parameters (such as transport protocol configuration), and are extensible to support future uses (such as keys for encrypting the TLS ClientHello). They also enable aliasing of apex domains, which is not possible with CNAME. The HTTPS RR is a variation of SVCB for use with HTTP (see RFC 9110, "HTTP Semantics"). By providing more information to the client before it attempts to establish a connection, these records offer potential benefits to both performance and privacy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9460"/>
          <seriesInfo name="DOI" value="10.17487/RFC9460"/>
        </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="RFC3927">
          <front>
            <title>Dynamic Configuration of IPv4 Link-Local Addresses</title>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="E. Guttman" initials="E." surname="Guttman"/>
            <date month="May" year="2005"/>
            <abstract>
              <t>To participate in wide-area IP networking, a host needs to be configured with IP addresses for its interfaces, either manually by the user or automatically from a source on the network such as a Dynamic Host Configuration Protocol (DHCP) server. Unfortunately, such address configuration information may not always be available. It is therefore beneficial for a host to be able to depend on a useful subset of IP networking functions even when no address configuration is available. This document describes how a host may automatically configure an interface with an IPv4 address within the 169.254/16 prefix that is valid for communication with other devices connected to the same physical (or logical) link.</t>
              <t>IPv4 Link-Local addresses are not suitable for communication with devices not directly connected to the same physical (or logical) link, and are only used where stable, routable addresses are not available (such as on ad hoc or isolated networks). This document does not recommend that IPv4 Link-Local addresses and routable addresses be configured simultaneously on the same interface. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3927"/>
          <seriesInfo name="DOI" value="10.17487/RFC3927"/>
        </reference>
        <reference anchor="RFC4291">
          <front>
            <title>IP Version 6 Addressing Architecture</title>
            <author fullname="R. Hinden" initials="R." surname="Hinden"/>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <date month="February" year="2006"/>
            <abstract>
              <t>This specification defines the addressing architecture of the IP Version 6 (IPv6) protocol. The document includes the IPv6 addressing model, text representations of IPv6 addresses, definition of IPv6 unicast addresses, anycast addresses, and multicast addresses, and an IPv6 node's required addresses.</t>
              <t>This document obsoletes RFC 3513, "IP Version 6 Addressing Architecture". [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4291"/>
          <seriesInfo name="DOI" value="10.17487/RFC4291"/>
        </reference>
        <reference anchor="NAT64">
          <front>
            <title>Stateful NAT64: Network Address and Protocol Translation from IPv6 Clients to IPv4 Servers</title>
            <author fullname="M. Bagnulo" initials="M." surname="Bagnulo"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <author fullname="I. van Beijnum" initials="I." surname="van Beijnum"/>
            <date month="April" year="2011"/>
            <abstract>
              <t>This document describes stateful NAT64 translation, which allows IPv6-only clients to contact IPv4 servers using unicast UDP, TCP, or ICMP. One or more public IPv4 addresses assigned to a NAT64 translator are shared among several IPv6-only clients. When stateful NAT64 is used in conjunction with DNS64, no changes are usually required in the IPv6 client or the IPv4 server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6146"/>
          <seriesInfo name="DOI" value="10.17487/RFC6146"/>
        </reference>
        <reference anchor="SVCB-ECH">
          <front>
            <title>Bootstrapping TLS Encrypted ClientHello with DNS Service Bindings</title>
            <author fullname="B. Schwartz" initials="B." surname="Schwartz"/>
            <author fullname="M. Bishop" initials="M." surname="Bishop"/>
            <author fullname="E. Nygren" initials="E." surname="Nygren"/>
            <date month="March" year="2026"/>
            <abstract>
              <t>To use TLS Encrypted ClientHello (ECH), the client needs to learn the ECH configuration for a server before it attempts a connection to the server. This specification provides a mechanism for conveying the ECH configuration information via DNS, using a SVCB or HTTPS resource record (RR).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9848"/>
          <seriesInfo name="DOI" value="10.17487/RFC9848"/>
        </reference>
        <reference anchor="RFC6724">
          <front>
            <title>Default Address Selection for Internet Protocol Version 6 (IPv6)</title>
            <author fullname="D. Thaler" initials="D." role="editor" surname="Thaler"/>
            <author fullname="R. Draves" initials="R." surname="Draves"/>
            <author fullname="A. Matsumoto" initials="A." surname="Matsumoto"/>
            <author fullname="T. Chown" initials="T." surname="Chown"/>
            <date month="September" year="2012"/>
            <abstract>
              <t>This document describes two algorithms, one for source address selection and one for destination address selection. The algorithms specify default behavior for all Internet Protocol version 6 (IPv6) implementations. They do not override choices made by applications or upper-layer protocols, nor do they preclude the development of more advanced mechanisms for address selection. The two algorithms share a common context, including an optional mechanism for allowing administrators to provide policy that can override the default behavior. In dual-stack implementations, the destination address selection algorithm can consider both IPv4 and IPv6 addresses -- depending on the available source addresses, the algorithm might prefer IPv6 addresses over IPv4 addresses, or vice versa.</t>
              <t>Default address selection as defined in this specification applies to all IPv6 nodes, including both hosts and routers. This document obsoletes RFC 3484. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6724"/>
          <seriesInfo name="DOI" value="10.17487/RFC6724"/>
        </reference>
        <reference anchor="RFC6724-UPDATE">
          <front>
            <title>Prioritizing known-local IPv6 ULAs through address selection policy</title>
            <author fullname="Nick Buraglio" initials="N." surname="Buraglio">
              <organization>Energy Sciences Network</organization>
            </author>
            <author fullname="Tim Chown" initials="T." surname="Chown">
              <organization>Jisc</organization>
            </author>
            <author fullname="Jeremy Duncan" initials="J." surname="Duncan">
              <organization>Tachyon Dynamics</organization>
            </author>
            <date day="11" month="August" year="2025"/>
            <abstract>
              <t>   This document updates the default address selection algorithm for
   Internet Protocol Version 6 (IPv6), originally specified in RFC 6724,
   based on accumulated operational experience.  It introduces the
   concept of "known-local" Unique Local Address (ULA) prefixes within
   the fd00::/8 block and specifies that ULA-to-ULA communications using
   such prefixes should be preferred over both IPv4-to-IPv4 and GUA-to-
   GUA (Global Unicast Address) communications in local use scenarios.
   The document defines mechanisms for nodes to identify and incorporate
   known-local prefixes into their address selection policy tables.  It
   introduces a requirement to implement Rule 5.5 of RFC 6724 and
   reduces the default precedence for 6to4 addresses.  These updates
   enhance the supportability of typical deployment environments,
   including automatic and unmanaged configurations, and promote
   consistent IPv6-over-IPv4 precedence behavior for both ULA and GUA
   within local networks.  The document acknowledges that certain
   atypical deployment models may require explicit configuration to
   achieve intended operational outcomes.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-6man-rfc6724-update-25"/>
        </reference>
        <reference anchor="RFC6298">
          <front>
            <title>Computing TCP's Retransmission Timer</title>
            <author fullname="V. Paxson" initials="V." surname="Paxson"/>
            <author fullname="M. Allman" initials="M." surname="Allman"/>
            <author fullname="J. Chu" initials="J." surname="Chu"/>
            <author fullname="M. Sargent" initials="M." surname="Sargent"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>This document defines the standard algorithm that Transmission Control Protocol (TCP) senders are required to use to compute and manage their retransmission timer. It expands on the discussion in Section 4.2.3.1 of RFC 1122 and upgrades the requirement of supporting the algorithm from a SHOULD to a MUST. This document obsoletes RFC 2988. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6298"/>
          <seriesInfo name="DOI" value="10.17487/RFC6298"/>
        </reference>
        <reference anchor="PREF64">
          <front>
            <title>Discovering PREF64 in Router Advertisements</title>
            <author fullname="L. Colitti" initials="L." surname="Colitti"/>
            <author fullname="J. Linkova" initials="J." surname="Linkova"/>
            <date month="April" year="2020"/>
            <abstract>
              <t>This document specifies a Neighbor Discovery option to be used in Router Advertisements (RAs) to communicate prefixes of Network Address and Protocol Translation from IPv6 clients to IPv4 servers (NAT64) to hosts.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8781"/>
          <seriesInfo name="DOI" value="10.17487/RFC8781"/>
        </reference>
        <reference anchor="RFC7050">
          <front>
            <title>Discovery of the IPv6 Prefix Used for IPv6 Address Synthesis</title>
            <author fullname="T. Savolainen" initials="T." surname="Savolainen"/>
            <author fullname="J. Korhonen" initials="J." surname="Korhonen"/>
            <author fullname="D. Wing" initials="D." surname="Wing"/>
            <date month="November" year="2013"/>
            <abstract>
              <t>This document describes a method for detecting the presence of DNS64 and for learning the IPv6 prefix used for protocol translation on an access network. The method depends on the existence of a well-known IPv4-only fully qualified domain name "ipv4only.arpa.". The information learned enables nodes to perform local IPv6 address synthesis and to potentially avoid NAT64 on dual-stack and multi-interface deployments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7050"/>
          <seriesInfo name="DOI" value="10.17487/RFC7050"/>
        </reference>
        <reference anchor="RFC6052">
          <front>
            <title>IPv6 Addressing of IPv4/IPv6 Translators</title>
            <author fullname="C. Bao" initials="C." surname="Bao"/>
            <author fullname="C. Huitema" initials="C." surname="Huitema"/>
            <author fullname="M. Bagnulo" initials="M." surname="Bagnulo"/>
            <author fullname="M. Boucadair" initials="M." surname="Boucadair"/>
            <author fullname="X. Li" initials="X." surname="Li"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>This document discusses the algorithmic translation of an IPv6 address to a corresponding IPv4 address, and vice versa, using only statically configured information. It defines a well-known prefix for use in algorithmic translations, while allowing organizations to also use network-specific prefixes when appropriate. Algorithmic translation is used in IPv4/IPv6 translators, as well as other types of proxies and gateways (e.g., for DNS) used in IPv4/IPv6 scenarios. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6052"/>
          <seriesInfo name="DOI" value="10.17487/RFC6052"/>
        </reference>
        <reference anchor="RFC6535">
          <front>
            <title>Dual-Stack Hosts Using "Bump-in-the-Host" (BIH)</title>
            <author fullname="B. Huang" initials="B." surname="Huang"/>
            <author fullname="H. Deng" initials="H." surname="Deng"/>
            <author fullname="T. Savolainen" initials="T." surname="Savolainen"/>
            <date month="February" year="2012"/>
            <abstract>
              <t>Bump-in-the-Host (BIH) is a host-based IPv4 to IPv6 protocol translation mechanism that allows a class of IPv4-only applications that work through NATs to communicate with IPv6-only peers. The host on which applications are running may be connected to IPv6-only or dual-stack access networks. BIH hides IPv6 and makes the IPv4-only applications think they are talking with IPv4 peers by local synthesis of IPv4 addresses. This document obsoletes RFC 2767 and RFC 3338. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6535"/>
          <seriesInfo name="DOI" value="10.17487/RFC6535"/>
        </reference>
        <reference anchor="RFC9000">
          <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="RFC4821">
          <front>
            <title>Packetization Layer Path MTU Discovery</title>
            <author fullname="M. Mathis" initials="M." surname="Mathis"/>
            <author fullname="J. Heffner" initials="J." surname="Heffner"/>
            <date month="March" year="2007"/>
            <abstract>
              <t>This document describes a robust method for Path MTU Discovery (PMTUD) that relies on TCP or some other Packetization Layer to probe an Internet path with progressively larger packets. This method is described as an extension to RFC 1191 and RFC 1981, which specify ICMP-based Path MTU Discovery for IP versions 4 and 6, respectively. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4821"/>
          <seriesInfo name="DOI" value="10.17487/RFC4821"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="HEV2">
          <front>
            <title>Happy Eyeballs Version 2: Better Connectivity Using Concurrency</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>Many communication protocols operating over the modern Internet use hostnames. These often resolve to multiple IP addresses, each of which may have different performance and connectivity characteristics. Since specific addresses or address families (IPv4 or IPv6) may be blocked, broken, or sub-optimal on a network, clients that attempt multiple connections in parallel have a chance of establishing a connection more quickly. This document specifies requirements for algorithms that reduce this user-visible delay and provides an example algorithm, referred to as "Happy Eyeballs". This document obsoletes the original algorithm description in RFC 6555.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8305"/>
          <seriesInfo name="DOI" value="10.17487/RFC8305"/>
        </reference>
        <reference anchor="RFC6555">
          <front>
            <title>Happy Eyeballs: Success with Dual-Stack Hosts</title>
            <author fullname="D. Wing" initials="D." surname="Wing"/>
            <author fullname="A. Yourtchenko" initials="A." surname="Yourtchenko"/>
            <date month="April" year="2012"/>
            <abstract>
              <t>When a server's IPv4 path and protocol are working, but the server's IPv6 path and protocol are not working, a dual-stack client application experiences significant connection delay compared to an IPv4-only client. This is undesirable because it causes the dual- stack client to have a worse user experience. This document specifies requirements for algorithms that reduce this user-visible delay and provides an algorithm. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6555"/>
          <seriesInfo name="DOI" value="10.17487/RFC6555"/>
        </reference>
        <reference anchor="HTTP3">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </reference>
        <reference anchor="AltSvc">
          <front>
            <title>HTTP Alternative Services</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <author fullname="J. Reschke" initials="J." surname="Reschke"/>
            <date month="April" year="2016"/>
            <abstract>
              <t>This document specifies "Alternative Services" for HTTP, which allow an origin's resources to be authoritatively available at a separate network location, possibly accessed with a different protocol configuration.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7838"/>
          <seriesInfo name="DOI" value="10.17487/RFC7838"/>
        </reference>
        <reference anchor="IPV6">
          <front>
            <title>Internet Protocol, Version 6 (IPv6) Specification</title>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="R. Hinden" initials="R." surname="Hinden"/>
            <date month="July" year="2017"/>
            <abstract>
              <t>This document specifies version 6 of the Internet Protocol (IPv6). It obsoletes RFC 2460.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="86"/>
          <seriesInfo name="RFC" value="8200"/>
          <seriesInfo name="DOI" value="10.17487/RFC8200"/>
        </reference>
        <reference anchor="QUIC">
          <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="PvD">
          <front>
            <title>Multiple Provisioning Domain Architecture</title>
            <author fullname="D. Anipko" initials="D." role="editor" surname="Anipko"/>
            <date month="June" year="2015"/>
            <abstract>
              <t>This document is a product of the work of the Multiple Interfaces Architecture Design team. It outlines a solution framework for some of the issues experienced by nodes that can be attached to multiple networks simultaneously. The framework defines the concept of a Provisioning Domain (PvD), which is a consistent set of network configuration information. PvD-aware nodes learn PvD-specific information from the networks they are attached to and/or other sources. PvDs are used to enable separation and configuration consistency in the presence of multiple concurrent connections.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7556"/>
          <seriesInfo name="DOI" value="10.17487/RFC7556"/>
        </reference>
        <reference anchor="DOT">
          <front>
            <title>Specification for DNS over Transport Layer Security (TLS)</title>
            <author fullname="Z. Hu" initials="Z." surname="Hu"/>
            <author fullname="L. Zhu" initials="L." surname="Zhu"/>
            <author fullname="J. Heidemann" initials="J." surname="Heidemann"/>
            <author fullname="A. Mankin" initials="A." surname="Mankin"/>
            <author fullname="D. Wessels" initials="D." surname="Wessels"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="May" year="2016"/>
            <abstract>
              <t>This document describes the use of Transport Layer Security (TLS) to provide privacy for DNS. Encryption provided by TLS eliminates opportunities for eavesdropping and on-path tampering with DNS queries in the network, such as discussed in RFC 7626. In addition, this document specifies two usage profiles for DNS over TLS and provides advice on performance considerations to minimize overhead from using TCP and TLS with DNS.</t>
              <t>This document focuses on securing stub-to-recursive traffic, as per the charter of the DPRIVE Working Group. It does not prevent future applications of the protocol to recursive-to-authoritative traffic.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7858"/>
          <seriesInfo name="DOI" value="10.17487/RFC7858"/>
        </reference>
        <reference anchor="DOH">
          <front>
            <title>DNS Queries over HTTPS (DoH)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <date month="October" year="2018"/>
            <abstract>
              <t>This document defines a protocol for sending DNS queries and getting DNS responses over HTTPS. Each DNS query-response pair is mapped into an HTTP exchange.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8484"/>
          <seriesInfo name="DOI" value="10.17487/RFC8484"/>
        </reference>
        <reference anchor="DOQ">
          <front>
            <title>DNS over Dedicated QUIC Connections</title>
            <author fullname="C. Huitema" initials="C." surname="Huitema"/>
            <author fullname="S. Dickinson" initials="S." surname="Dickinson"/>
            <author fullname="A. Mankin" initials="A." surname="Mankin"/>
            <date month="May" year="2022"/>
            <abstract>
              <t>This document describes the use of QUIC to provide transport confidentiality for DNS. The encryption provided by QUIC has similar properties to those provided by TLS, while QUIC transport eliminates the head-of-line blocking issues inherent with TCP and provides more efficient packet-loss recovery than UDP. DNS over QUIC (DoQ) has privacy properties similar to DNS over TLS (DoT) specified in RFC 7858, and latency characteristics similar to classic DNS over UDP. This specification describes the use of DoQ as a general-purpose transport for DNS and includes the use of DoQ for stub to recursive, recursive to authoritative, and zone transfer scenarios.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9250"/>
          <seriesInfo name="DOI" value="10.17487/RFC9250"/>
        </reference>
        <reference anchor="RFC9461">
          <front>
            <title>Service Binding Mapping for DNS Servers</title>
            <author fullname="B. Schwartz" initials="B." surname="Schwartz"/>
            <date month="November" year="2023"/>
            <abstract>
              <t>The SVCB DNS resource record type expresses a bound collection of endpoint metadata, for use when establishing a connection to a named service. DNS itself can be such a service, when the server is identified by a domain name. This document provides the SVCB mapping for named DNS servers, allowing them to indicate support for encrypted transport protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9461"/>
          <seriesInfo name="DOI" value="10.17487/RFC9461"/>
        </reference>
        <reference anchor="RFC10001">
          <front>
            <title>Operational Guidelines for DNS Transport in Mixed IPv4/IPv6 Environments</title>
            <author fullname="Momoka" surname="Momoka"/>
            <author fullname="T. Fiebig" initials="T." surname="Fiebig"/>
            <date month="August" year="2026"/>
            <abstract>
              <t>This document provides guidelines and documents best current practice for operating authoritative DNS servers, recursive resolvers, and stub resolvers in a mixed IPv4/IPv6 environment. This document recommends that both authoritative DNS servers and recursive resolvers support IPv4 and IPv6. It also provides guidance on how recursive DNS resolvers should select upstream DNS servers, including when IPv4-embedded IPv6 addresses are available.</t>
              <t>This document obsoletes RFC 3901.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="91"/>
          <seriesInfo name="RFC" value="10001"/>
          <seriesInfo name="DOI" value="10.17487/RFC10001"/>
        </reference>
        <reference anchor="OPTIMISTIC-DNS">
          <front>
            <title>Optimistic DNS</title>
            <author fullname="Gautam Akiwate" initials="G." surname="Akiwate">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Phil Flack" initials="P." surname="Flack">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Stuart Cheshire" initials="S." surname="Cheshire">
              <organization>Apple Inc.</organization>
            </author>
            <date day="1" month="November" year="2026"/>
            <abstract>
              <t>   DNS lookups introduce user-visible delay, particularly when cached
   records have expired and must be refreshed from the network.  This
   document describes Optimistic DNS, a client-side stub resolver
   mechanism that immediately returns expired cached DNS records to
   applications while simultaneously refreshing them with a network
   query.  The application receives an answer in microseconds rather
   than milliseconds, and if the data has changed receives an updated
   answer shortly thereafter.  Optimistic DNS is complementary to RFC
   8767, which addresses serving stale data at recursive resolvers.
   This document focuses exclusively on client-side stub resolver
   behavior, including explicit signaling from the application to inform
   the stub resolver that the application is able to handle old and
   possibly incorrect information.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-gakiwate-dnsop-optimistic-dns-01"/>
        </reference>
        <reference anchor="RFC7413">
          <front>
            <title>TCP Fast Open</title>
            <author fullname="Y. Cheng" initials="Y." surname="Cheng"/>
            <author fullname="J. Chu" initials="J." surname="Chu"/>
            <author fullname="S. Radhakrishnan" initials="S." surname="Radhakrishnan"/>
            <author fullname="A. Jain" initials="A." surname="Jain"/>
            <date month="December" year="2014"/>
            <abstract>
              <t>This document describes an experimental TCP mechanism called TCP Fast Open (TFO). TFO allows data to be carried in the SYN and SYN-ACK packets and consumed by the receiving end during the initial connection handshake, and saves up to one full round-trip time (RTT) compared to the standard TCP, which requires a three-way handshake (3WHS) to complete before data can be exchanged. However, TFO deviates from the standard TCP semantics, since the data in the SYN could be replayed to an application in some rare circumstances. Applications should not use TFO unless they can tolerate this issue, as detailed in the Applicability section.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7413"/>
          <seriesInfo name="DOI" value="10.17487/RFC7413"/>
        </reference>
        <reference anchor="RFC9846">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="July" year="2026"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document obsoletes RFC 8446, which specified TLS 1.3. This document obsoletes RFC 5246 (specifying TLS 1.2) and RFCs 5077, 6961, 7627, and 8422, all of which pertain to TLS 1.2 or earlier, and updates RFCs 5705 and 6066. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9846"/>
          <seriesInfo name="DOI" value="10.17487/RFC9846"/>
        </reference>
        <reference anchor="RFC9002">
          <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="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC9001">
          <front>
            <title>Using TLS to Secure QUIC</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="S. Turner" initials="S." role="editor" surname="Turner"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes how Transport Layer Security (TLS) is used to secure QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9001"/>
          <seriesInfo name="DOI" value="10.17487/RFC9001"/>
        </reference>
        <reference anchor="DNSSEC">
          <front>
            <title>DNS Security Extensions (DNSSEC)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="February" year="2023"/>
            <abstract>
              <t>This document describes the DNS Security Extensions (commonly called "DNSSEC") that are specified in RFCs 4033, 4034, and 4035, as well as a handful of others. One purpose is to introduce all of the RFCs in one place so that the reader can understand the many aspects of DNSSEC. This document does not update any of those RFCs. A second purpose is to state that using DNSSEC for origin authentication of DNS data is the best current practice. A third purpose is to provide a single reference for other documents that want to refer to DNSSEC.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="237"/>
          <seriesInfo name="RFC" value="9364"/>
          <seriesInfo name="DOI" value="10.17487/RFC9364"/>
        </reference>
        <reference anchor="I-D.ietf-tls-key-share-prediction">
          <front>
            <title>TLS Key Share Prediction</title>
            <author fullname="David Benjamin" initials="D." surname="Benjamin">
              <organization>Google LLC</organization>
            </author>
            <date day="15" month="October" year="2026"/>
            <abstract>
              <t>   This document defines a mechanism for servers to communicate
   supported key share algorithms in DNS.  Clients may use this
   information to reduce TLS handshake round-trips.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-key-share-prediction-05"/>
        </reference>
        <reference anchor="RFC8765">
          <front>
            <title>DNS Push Notifications</title>
            <author fullname="T. Pusateri" initials="T." surname="Pusateri"/>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>The Domain Name System (DNS) was designed to return matching records efficiently for queries for data that are relatively static. When those records change frequently, DNS is still efficient at returning the updated results when polled, as long as the polling rate is not too high. But, there exists no mechanism for a client to be asynchronously notified when these changes occur. This document defines a mechanism for a client to be notified of such changes to DNS records, called DNS Push Notifications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8765"/>
          <seriesInfo name="DOI" value="10.17487/RFC8765"/>
        </reference>
        <reference anchor="DNS64">
          <front>
            <title>DNS64: DNS Extensions for Network Address Translation from IPv6 Clients to IPv4 Servers</title>
            <author fullname="M. Bagnulo" initials="M." surname="Bagnulo"/>
            <author fullname="A. Sullivan" initials="A." surname="Sullivan"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <author fullname="I. van Beijnum" initials="I." surname="van Beijnum"/>
            <date month="April" year="2011"/>
            <abstract>
              <t>DNS64 is a mechanism for synthesizing AAAA records from A records. DNS64 is used with an IPv6/IPv4 translator to enable client-server communication between an IPv6-only client and an IPv4-only server, without requiring any changes to either the IPv6 or the IPv4 node, for the class of applications that work through NATs. This document specifies DNS64, and provides suggestions on how it should be deployed in conjunction with IPv6/IPv4 translators. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6147"/>
          <seriesInfo name="DOI" value="10.17487/RFC6147"/>
        </reference>
        <reference anchor="V6-MOSTLY">
          <front>
            <title>IPv6-mostly Networks: Deployment and Operations Considerations</title>
            <author fullname="Nick Buraglio" initials="N." surname="Buraglio">
              <organization>Energy Sciences Network</organization>
            </author>
            <author fullname="Ondřej Caletka" initials="O." surname="Caletka">
              <organization>RIPE NCC</organization>
            </author>
            <author fullname="Jen Linkova" initials="J." surname="Linkova">
              <organization>Google</organization>
            </author>
            <date day="29" month="October" year="2026"/>
            <abstract>
              <t>   This document discusses a deployment scenario called "an IPv6-mostly
   network", when IPv6-only and IPv4-enabled endpoints coexist on the
   same network (e.g. local area network (LAN)).  This approach enables
   incremental transition from dual-stack to IPv6-only networks by
   allowing IPv6-capable devices to remain IPv6-only while the network
   is seamlessly supplying IPv4 addresses to those devices that require
   them.  This document discusses the requirements, recommendations, and
   challenges associated with deploying IPv6-mostly networks in
   enterprise and public Wi-Fi environments.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-v6ops-6mops-12"/>
        </reference>
        <reference anchor="RFC9704">
          <front>
            <title>Establishing Local DNS Authority in Validated Split-Horizon Environments</title>
            <author fullname="T. Reddy.K" initials="T." surname="Reddy.K"/>
            <author fullname="D. Wing" initials="D." surname="Wing"/>
            <author fullname="K. Smith" initials="K." surname="Smith"/>
            <author fullname="B. Schwartz" initials="B." surname="Schwartz"/>
            <date month="January" year="2025"/>
            <abstract>
              <t>When split-horizon DNS is deployed by a network, certain domain names can be resolved authoritatively by a network-provided DNS resolver. DNS clients that are not configured to use this resolver by default can use it for these specific domains only. This specification defines a mechanism for domain owners to inform DNS clients about local resolvers that are authorized to answer authoritatively for certain subdomains.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9704"/>
          <seriesInfo name="DOI" value="10.17487/RFC9704"/>
        </reference>
        <reference anchor="RFC8900">
          <front>
            <title>IP Fragmentation Considered Fragile</title>
            <author fullname="R. Bonica" initials="R." surname="Bonica"/>
            <author fullname="F. Baker" initials="F." surname="Baker"/>
            <author fullname="G. Huston" initials="G." surname="Huston"/>
            <author fullname="R. Hinden" initials="R." surname="Hinden"/>
            <author fullname="O. Troan" initials="O." surname="Troan"/>
            <author fullname="F. Gont" initials="F." surname="Gont"/>
            <date month="September" year="2020"/>
            <abstract>
              <t>This document describes IP fragmentation and explains how it introduces fragility to Internet communication.</t>
              <t>This document also proposes alternatives to IP fragmentation and provides recommendations for developers and network operators.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="230"/>
          <seriesInfo name="RFC" value="8900"/>
          <seriesInfo name="DOI" value="10.17487/RFC8900"/>
        </reference>
      </references>
    </references>
    <?line 1317?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors thank Dan Wing, Andrew Yourtchenko, and everyone else who
worked on the original Happy Eyeballs design <xref target="RFC6555"/>, Josh
Graessley, Stuart Cheshire, and the rest of team at Apple that helped
implement and instrument this algorithm, and Jason Fesler and Paul
Saab who helped measure and refine this algorithm. The authors would
also like to thank Fred Baker, Nick Chettle, Lorenzo Colitti, Igor
Gashinsky, Geoff Huston, Jen Linkova, Paul Hoffman, Philip Homburg,
Warren Kumari, Erik Nygren, Jordi Palet Martinez, Rui Paulo, Stephen
Strowes, Jinmei Tatuya, Dave Thaler, Joe Touch, James Woodyatt,
Ondřej Caletka, Philipp Tiesel, and Max Inden for their input and
contributions.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1963LcRpbm/4zYd8BSP0zOVpVIipJleXq6aUm21KNbm7S9
jo2NaFRVFgkLBdQAKNJljuc99t8+y0bse+25Zp4EUJLd7Zno2ejeHYssFhJ5
OXnu5zvT6dR1RVf6J9nBi3yz2WXPd36el2Wbfeubtqir7MGT7Avfdb7JntZV
5RddcVN0u+ybtqiu8KPFtml8tdgduHw+b/zNcKSbBwdukXf+qm52T7K2Wzq3
rBdVvoa3Lpt81U0L362m1/gU/9fLo9ObB9Pjh67dztdFi7Ppdht46OXzyy9d
tV3PffPELWHkJ25RV62v2m37JOuarXcwjQcub3z+JPvu5aW7rZv3V0293TzJ
Xpy/e/d99h18gAv4Cj907/0OvrF84rJpVmxuHsm/Z/hvky/gi/hTt9jgP/+y
LRb4b3uzmOO/fnHtbny1hVlkmX0J/MrzTV+WZeu8KJ9ktNI/4NJndQMvyPJm
cQ0fd92mfXL/Pn4JPylu/Ey/dB8/uD9v6tvW36fn7+M7i+56O3+S0S7eXvEW
3ued5U01+wnfL2HH2g7OSV/1ix68/9Gjml136/LAuXzbXdcNbia8LMtW27Lk
w76s1+td9i7fljv6C6wor4qf8g5O9kl2vtmUPntZLehvnjfpoNvg1/+Q4x9n
i3p9MBz2WX5TLLML2Koq/6nQkZ9kX9X1FYz46tXTZMRlK9+kbf3DFX68Z+Q3
xfK6yP6Y/7D96KgVfvUH+OYfrugLe0b8Z18V8PrsZXtdzHP4z8hG7HkDfT0Z
3VV1s4aHboD0XFGtzG9uOp1m+bztgHw7517n1S6DZ9ZbeD29Jts0dVcvarif
9cY38BkQaH0D17y79tm6XvqmgsOAe1/5Ltu23l3XbYeLaGfZ5bVvfVavOl9l
jW/r8sZnXZ2tt2VX0CG+y/LlEv7S+naS+XxxDV92t9ewdCD+HZA+PLAsVisP
rKPL4P0092rhs7xawkQjo3GL6xzX4Jui7YoFvPyiwO+1G78oVsUivgh2UX/J
Vvm6KAv47PDlO7jG8Bf499ERvXzus3lZL9775SSDq/TeVxN8FJjMtN50xTov
M9iePIN1I9uYZAsYqepa113nXZYDK1xvurhWnSwwoKyAbYXZlqUveY15BtPH
6cLy4c7l87KAQ4Sdzs1zsNuNJ7byvtzh5hZtBgxyu8a9WfpVUcFC4FRcXgIL
hcu+zmC7+mz2YAKDdsCMquJftp6+0fjlFpkXHl8zvSnaYl56t/Rlvmtxjctt
Xk5hVov3GR5u23/3doPMld6dhXcDoWVff/k0e/zg+OGM6WxdLJcwsLuHBNPU
8FJc1t+p7j8R1Tm3l+yyX0F2bi/ZZR8jO0evLGhqlvCWvl00xYY+h5Xe3f3+
xfNvT38HJIgU+PPPk4xO2BVd68tVVs+BMHznl/hN+NKjhw/hS7Q+n/UUk7iw
eiVyPtlYIC6hs6Xz1XJTF3AgsMVt1nqgWTgyWMWVpy/mNzUIIVkk/I5Tx/XD
7HyF33abuqWdoAnDhsDQG3wTvpTOGi5HgfMpkHzbLVAtvGnTeKDXBlUQGRIn
i3SF5EPHc4OawhwoD9Qy+Fu8YmXxHtZ8efnu/gPaN/jpAW7cZycnZz//jETv
Ll9dZM+rRbPb4JY95Xm88GVZwxP/9fnTF/T9x2efwR72OVPRLrZ4BeCO3uKS
6fTg3LJnby6AsODuwNbg8nGbmq5PgJOMn3Nt3XS0EiDTDlcARw7fZoYRL1rj
Fx6E2zJbNfWa3pFX7S1oqROH11cmAcfoaTBD6XJ7WqGCdf4DbJ0yAvj6HO6c
h2mmxM5XYIlE19mF09vu7pAKYRMLuSPLJZMuTL/dbja4JLwLF98+/SK7T4dw
QcS0bRbewVJA3Wxxi/ELtMdnj45xj+kB/TscJag2OCnkiCTbDSHiPILUx2XO
6y2wCtCU+txWpzSJZ+16Zw1HDasBRRhoT/nZNb5mQu+pYZF4s0t/kxN76IDo
WsevxA0AUr8pFnBMc08HvVjgqS1n2TMgE+Tw+Gl/PsAKiLLplm2ZKJTwcfeE
dklA/Ombl09x25GI8dbDDQY12G03V02+xMH1FI2I4SNlC6Ubo4gJSLO28/kS
z+02L4hIV8yXWw80XAXeS7car5/dciRFx3uzlHXusrVH9lu06zYsBmedncdT
zC5kuxzcS/j84maBRPDp4weP+aKhpFMqWOQVig++UUtYeA2TvAUazc7pDp/D
//TLfFrEKYiHLgcE3epNgTmC1CaCwwPYoAVFiyzWSHfJDQpSBC/ADCU9mn5g
9TCjxHc+C+y75WsGtJTd0gIOXn9zcQmCgv7N3ryln79+Dif69fNn+PPFi/NX
r8IPTr5x8eLtN6+exZ/ik0/fvn79/M0zfhg+zZKP3MHr8+8PeCcO3r67fPn2
zfmrg8E9BnuL9Ic5HimcDHBa2i+URChy5nz3v3j67v/875MzvKtwQqcnJ8AK
5ZfHJ58iH0UWJ7ekKnfyKxzBzsFd9HmDowC1wjluii4v8YyAMuAUqgwIx8N2
/sP/wJ35n0+yf5wvNidn/yQf4IKTD3XPkg9pz4afDB7mTRz5aOQ1YTeTz3s7
nc73/Pvkd9138+E//r4E+sumJ49//09goQARvb3Ba+Bv92kfOdwlsCXpdu6j
xkmG6iHRvOt7Hp7GZy58t90ciAyDbzU16odGlrslqnrVAsQwfOpbMKJOZtl5
u6sW101d1ds2i2wKJ5Rnqpsi/dSJ1IpM+vDuLj72889HNOpFzeIQRsGrqkrG
/iFafkCff8mSVidi5zjC5HAAo9aESWyJR4Ntmm4oDllXqQBF9Rg1yrLUtwrX
+9A73tQdiuK869+7toUfWv2TFx2HRPGmBuG1IxaMBzqiCbCWDV8BjatpRRNC
AYE694x/x2MFxX6HzxdNjuonHDgo/Khb4S4XVyjZ5fIzu8OptXEkZMwv3337
iBTN0+Nj0SGTdZRt/YsWwzMlAYbju8un72byKzKMBgRN0aApAbu+AbUYTB+Y
WjgUoLTWgxCzRzJx65x8SkXHOjxMGywtsAN4XfAKVPnwJaRdHMsKXjLFIeWi
6gIDroqrrTzUN5DCSlriZ6S2rGHpyzwYHunJiqTyeYsnlC9z1DRIXLzQq/J1
vEN398zNcO471BRz1YVRr2p2uMLeVhiyRLVbbj8uCIR5B/aTX5IUAxXFN2tk
OGwBjt0t3D2cMxqae19D4linJVeVlb5wRd18B0dUkRpilV82K8EwYzWfFEXW
WWdMS62sRCUOC+e4CaJRt3ZU0j/tnS93Isvb9A3u3j1ge3FWf5JZ3d2TkWDT
WQuES1U0LW/e2N7h06q8qqaB5ggIuwIEG3DNcrtENhhWjhfYnk24PGA/k1sZ
fp4Dm0WZiRKTmEkX9xlv8IG1yA/gkHAhdDdhtffFuu4ree9QZcY30KrrdQ6T
Onx38+wIrwP8S2rWw4eP8DZ8BZYZ2s27Sf9dNP0By6H5k1HgcrQDb0jT7bIS
CL6j21vV1bSs680cjVs6J/g/+rCo3sNfFmAzHrLy8OCz009Bj+Vfzk4/O0Ge
qS8kwYB2f4/noeXDRwKnhBQn/EL0vrxzvbnAazN+bQOaulfG2ht4ltHlw0OA
U2wdbazdkYk9G1JN9MxzOnLm2FYRnblkSDq3Xz+ki+Nl52Ji8YEVqz65INEu
SIPL3pxfPjoj/lX86HC/6QM8+kcnZ3D0R0o1wdvykbmQXyPMJTtsvQd6Am7y
CBVA/CN5U8QsIicHzUZvfTIhslbxwhL58G09Qt5cRTOSXA/w6paGoI3Fx4ye
v/Qbudt0g9AFYk0/2PLE9ZOaxMG9ROxP3uR8QdeQTFCxvi6yaKvi52idfImX
I76q5ZvpyMYJjx3yDtISB9/NvvPzi5oI94hFi+y9KKRE2ZaykqnAVp0D1xHl
yfJbeXyONj4eHjDYGjWHFYav8E7klagtbXDHMHuHcT0p6nK7rn1k4g1at3Fy
cxwYCILsz+ywXhcd+zaqncyYru6y9m31Cdvju8jrcLFlfVUssmhlgBV9449Y
4Uw3n4kP9VCkgPib/Mg8leZOM+jrIipG1puS9BslBFKT3YgfDHVj1JaQu4ir
E68b2rzllnQaszPimpTtIXcm3sM8u9rmTQ4mlWeGpafUdtu5CtBGXAdki45s
tijq8P/hxDI9K7GknK9uCpB9rLKR4RWcye0O7Pl1m14PfMP5u5et+spKNLqs
ejoywbhrfKHWxdU1KgzoZXSg85b1Lu7liE9xgk7Zrlhsy7wRqzBcQHTm1Shg
fHC90fvBGoIXH/IdAXn17O0luwUePkaXB31CHrnHZ4+B8UzQxUwf/omUvNOH
x/g1vDD+xxynD5OAVcLB0ymqiwJed1Pk4iD97OwRip6ZS/krXHfRTc5mD/Cu
4XdPQI2EL6tfqoWTLpbkacZ34lniFjrdQiDNLW5adDYY1689Q+QpeJ2YPos4
rkM1AaQ00CEsAQdSvpXQdHoGZF+DZofx4EaugzNvFqbPxMYTW2a3YNuIOyqo
O+qSYp6Ad8MBCyd1vS2MMIXvdsqO9rqYYe74VnoR62YvVAbg+85ZDiQGZwk3
/K1euqCAkhcUXUsr3BUyRORZ9N10ia44EQ3XrdGhU1fimGYLl3yVYonuszbx
ciVyxPrHBzYfCrHk1gSWjK4D9K+xZgVbbebcgGneVG7uVyhDg6+Y5fOPHXzi
N+2HXABg9bHJKrKaZTCcTf4eNwqMPWJkVQd3AJ1nqGrqayfW7QccrW6DBk2y
MX2a/PtmHi61nImbLOptKQ7T26Ily3OBejV57PKy8flyF53ZUVu/RFUJtyDR
RmT/Onis6xEmkrm1AyaOXtUS94hmHEtNSkVAk40Zo8flzAwPFH1qAwY+ujdJ
fBHvrXEcUoatm4FI9t3LiaPrOveoDMOOiwHYFuttSd5HMIzEUG09BqngdXYY
lSTEstAhYyZr41riuZc9QWJumZqH9PshinU1RcUqr7d1FdgOfEtUr9Z3JHjW
vgOR/Jx0Ivhhml3Ua7Tp4eqjB/cQ9Wv0feyOgjathEOG9NxTnFLO+fzNMxji
HJ8fPA6Lr/wVO4YPdUgaigRqMpBTpiOBISSh1Eig47zN2+Aw5lejYnGftQrx
1See7MGLQLPh14c353GW6i8+Agb1G26Ooe2uWEvMkCaxyTGaIJoc82PR5Myo
Duk13S33TqdkL/U8DRbHiYgGTGoLqVyo9rugc5PNmYZH4rPLAn7sSFmymx2V
1je6ezoVlD/+R1CTW/iUHEHGCx9ebwxu4i7AWuENVZ0u4ZDYC3wf/6U4EDDJ
poEPKAr45r8/e/v6/OUbYNHAKy0DXuDBkb1KI1S9SYp6vofzsv2PDJeJmN0H
xOi3IJrL9JAwISvs1wxlW5TFtDgmDXgG7ex8W3ZstbI7gYxSvN1oSk74V7BV
WelVZ96HboaICdho4QAaRSXbFKgMKDx572TUCG+vicHPyZ5qQQ1q2Ps8fK9T
sx3eAaz5qhHenMQZhbWNkz7qHPhCDJDipzSfoH1pnN+RNKNtHU4CaQO1PWuc
H3EQydGJj3EDemJIxEfqP1+AkEO/lzKjBegTqOI2fAJKu8MRhOMSUUV7GqRE
nq38LSjZJZCWR2YcslF0I8LCUHUm91N2YLyJz/B7B7KbJkqR3eTlNupq/Sdw
5NOH6YtRO7vH3yQXj1nGeVmQ6oR0eJk3VyArnCObDT9Jl6oGXhoxpHtCRB9i
pujQXxZwpqCjhtgwMQdmR/TS1/XS057yQ/RrYEy89fF76lJ2avCaJUSrmukQ
niFH3WxsaJ0CzAZvWr0oSKwT4XRkNxdXBZgMNILEfkXuTKI5TeQBXy8a2bQ3
8G3U7Q9mB8RVcbH94XXqSp/0BvG8qG1yOnuIF5k9E0dy+Mac7Tuog1ajV3eU
+pmVBBnCnGxsc2jaxqQc+w7KG2XaA+GB1+zPmHGKv/6ZaAh/PaNfHWo/a3TF
ttFBh+qp4aIcaDSuCcOTUGyK9HNBHge+H/SIbbOp26ARxc0ji1XcToZ3gCxo
WFAtxTuPj8VjpenhFoeNyXYeVPSoaqoJhzQFyhAIECFXutoF8HNv32tdyqyf
x5e1ordyclf1SefgXVEk89eDB1H20Hw2tpeNByVYjC46JTKCOJxuE25K9FSQ
3RflNl4lYGO6x+on9LdT+YipFNnLc7bQJVgeFVGx3GPyx03eFKgrcz7CQv07
7I9AZRsVHs67wnWgc8Emx+AlYO8Wqstoo6vPZdQNhfxw21LoG8yJHK7ZwvdD
Ap6uSGpSqiJuM+kw44MsTfTYoVGwSV0ARmqIh5O3jS2zrC1liWQXhj+Duvlv
//ZvWZ63N1dOU5ZG/oebcEEeFUyj/Vf8iBjg77NsOp3+k/3qv4Zv0EQ+/A38
0ke/Mfa/9BuHD47XIt2O/pIx/hEzL8XXCsogUerR8Bu0sYenURs4+uVvuUBT
PLu9T3rSh9byC1Z7Oljsr19tfyG/Zoxv+P7KYv4b63y/fB5AcUjDRLFBrA0o
VknVEPMkm4Myjp84/fIS9JemIR2bzBnV8Gh7/k7dv4q6/wqKuADmffoQZoma
dfOBtfyC1Z78Bqv9zW5qQty/nLo/Tt6pL2yE2P9OvP8ZiZfG+QtXawjvbPwb
v3weJ8eDbf8PvUT/HiLC2F3W68OqjTqU/fLvF+cXHuHf1MX5Lbj+B9nEx9by
G3D9X0qwwzAIGEyOnBk35B9ouPDs72T8n46MfyP+/5uRYGIL5o0P5EaqtJjk
1vPyd7Ib8JPb+4Gd/M3xE9EmycmnBW3Oevna7PBghgn7S0obIo95npSZcE4R
pqDUqRtSUpn8kgaSGoC87A60LqVyppgm8S0eoRuW/YW4hMlYKrWjkDBtk626
k8jJrU3UErfV7O+0iT9Z2oSzHRkj+Qae2NHoN/6d2epfdwOy9FzCOnT3B+fy
kW985C3ZbyqqTnTTxk2V5M+/5i0fUKt/BVup6Lkphe80fmIuKHsRh8zG/cdr
29nf0I37W1Ex/oY05b/ETCUStBlbb5DXizi7u2f9+1RigaIgRhjI1cc1v2PV
OUihRRUCxBOHWo44V7iAPjwTkjRCEF6iFhV9E15b7lxMZog5MfQKmM+mbijA
VqjbXktuY0wDJNyywBtrKk0ljoHR5iuPMYxQZSgZR73srLA2TA/A5AEQ4lsf
o4a4P2Z2yyUuQxIG0sqjonVmrb28uec/bihqJCfh3LvG3xRcERF2wcRCJGbi
6bHs0P9IeVkSl7x8deQ+fEgcqzJHhYm4vXw/yVCitAiKM1LVlASd6uqq5pIB
3Z5rrTqWFfDUZtmL+hbNqjQv/fz7rAM9B9PXcANt4jOc5sp3oG5RnE+2JajQ
5GXuqUlMnJRwId/HWtgYzE9SocNzSQ4Prg/DbaXE5LHaVSvKTPlMSCwlOmMy
DQMVbcjAzNssKbzsxc0yLrsONPi55K1hWo7s65jCFk5i7rWETS0JnEuoBMIA
Gi/Y1v44BV64zpdhvXQDSQkk6qFJYD6OpBbKLg6QA/iu0XwouozxM6ToNO+W
stLyheQS9qjLV3hF2xBBDYm1LiAm1GlFYfryXtWQDGeBBfq0c0DgFASCgfM7
ED5mS6UNyWmIo19mSSo1brwdDwlYqnQLc/SOQR6wfvT1y4vLl0+n8L3fvZw+
m13l74tbWOV0WbX1ZhpHwg+ouu0eQyxpHFLLLJ8HVnN3T3NbnftCWCyfsMSy
5eiJnqvdhwo0I3tMbqkFzugXFdRiOmDyS8AkyEKGL3898HgpNUpGl2K1LHcS
TU2xOQTDgqFPGDJjJMRE7NwNcnezl0TIMC58M9ds1jAxWD3RUFHdcAUcJ+Lr
zlLKHKVuDdBQqDIJqD4W5ptkryRbb75j+4vGpDRu+pVL/e0+wFZeeZ6crnm1
wnOrV653ZzTPAVPFGxZ4E7rKP2xbHoFr30g1wKnSr1wCFTSnNP9UkGNwRg0I
xhJYdUki8EqojzIG2ljkG7fJ1oEkoimmxT3H0zP4AzS8zdUmHVj4IJ8N7bEz
9ZokaoURbaJQVEgLmicu6mSW3hh9BSZkjeFI0HewFhWxRiRrg6swDu/uzBNT
egMmkH/gDWp8R9gTSj7nT5MRLuJDo2WcduUwhH4+tWXT9wxz+GJHaGO6vHeB
MIlr6Pq+tuu7uzdcXr98kj61ZY0kTkb2sR0UN0cKUWgMnAqPEDZ85fMOKxok
TT0+QznaChuBqorOwfXBKsZS8ga4IVO0kpo4W4dm6qY64FS69sgggsQUJc4z
3Y8n47TWWDIMD/ziWkecZKxgEhrKNKLOPOZ0mS8ps7xlNBlJMTTBdLzMoV4P
mLZZolk+OasLzn3VXCfjYxxLbmsxnWmwYZLzjlUJXKVc3BR5+SRJqp17AukA
NoX6LNFFROZgLuJitZbfhVMPr90kNBlIIJaxw76MaYnILm9xQYijE2oAKKe9
h6wTq5cly/UGB25tBfgi3zCwUEDyKUwFSgCjUuQEN5L2bIunQ3WfVAJQOpuR
IQyjEN7OXEoQYXiOsMX26yAH+c6117nQBW3e+J3DjQwINrqjzuwozTVAfBnS
DoVu4XHRs+QouaYilCL3qu7ygKFg5pUUoLU1ZfyOsQM2WTSzeu7ZWkLYpLD9
vE+Z4iwQJhVXaYYqsJDumBQ9uOSo2Cvi9CGEGJxlj46zl2/E9D5ByMuTWfL3
Q0cmMrKH3x1cP5hcnx5kms/4u9Pj45Mny/njJ09Os6OPDXz6oYHHRz2DUck0
T/229rWS7U8ZbXSvBVJIs3Xvn7K9bQfFZ0jGDh88pRxyc/ILrMuhVGyV/Qa4
aEr3p/RpdYrjkYZ/TGd+S1nm/kfWuUi1cnLSh8Q6gl+cOJqkyg7YBGVZ6sVA
ZmowUUR1GhpeiWZofe3xco7KYdY5g/YRC21aH3SOy5B5yGnxLPt/Uv1gBash
UY8JggrpxM+6RJOiQ7EcbmTpWB8v19/cc9FyzeWcimIkqZnfSYbjOZXupppC
UDQIsIJ2nWygzmADjnKfuhkR5MhTaHF+GdhiKWn/wkbsaIqeMBPJ2jphqYw+
dzWmaNlhq74YLRonhh8WeI1pfDBtmS1budV0gecF5pwI5sBjYAQqAZd5lzXD
cuWa+Hnr5xvgTISGSPvlsby+xFxeNwLGxkWwigDW6G0VKbrlxGrm/lRy8Ord
GzR/r+hMuCKC8PVUzZyGDNal1Th5K+Q1mlPrAlliCZsHWl6G+x+Eruana1Ea
PYuLMrFyZ0EmE6AZUGXtCj9BNYwh/BTZYVuBtCmQRbhVQ1ExvDBY4GkPCo5v
Sg4b0hfRucB7IisSP6JM3rkLMJmpIBlhG2OBcjIkr0S0e6LbrgFtptyJnk3K
q5AN6XtPX+hdvskXuykCMXPNVdfkWKSqiIe0XyLSnGo8+HRNP26r4GeAmcYk
/8ea4j9lkLoAQwM7cZUjgJtFzWNdx9ZKORKvoeCUHDaiLuLLU72Ur46W2izr
6pOOvUVw2lryTgoJ3yS8wBFJgC3oUK3OX1ZgPBIp8mI3eDGBRkghiZkojT8k
Rt5JF+e4f0Xt52lBOAnKQOgk37COtELXj2+KqLCgPwE0hSkaB4gj3Pmr3Sx7
tmV0gLAFEamUi73xaqP3pJkX8FCD9U9MkTCzqZyIAb4IvAqpau3YkNKk/lta
2paLR2hpVqHPWKFPkS1YbkolIBaOdxGEQGgWxjHXeDU0LpjX5Q5keyslOwP2
GECe8K8w4sBVS4t2LIL0/LK0vjiy5ln2/IZrE2AP7RHhUcJbOxeMks1WnOHB
fha6t+ihaAbpW8ID7F4xMXSsMCqLq0IQH1Tdga/JkTK3NVAhbnFd4woEChGP
bDYwraUKBoQlTWiHXrfEqGdnSqjttp6TRHQV5M9k6skXDVyrKPBduFeHeYDl
wamPVK1NEiILugjuh2xaAMCl+Yi/ieEYpnHDjdjQEqFVSZgzwXUubrp95ZK2
6o8uu6KqBGNckh5QNOrcslAdndYXcdGJIEmFL4u2ph5McmuF6smk+Cg4qvHN
gp9LTjfCQiCmsBsrkq2xLEjhftLqHO8ED49GHpZDsYkV5ooWHDO94VeptrO8
RTjdK1KycXy4hsezUHDH9B1uBhwaAjFUYFU3KEak8u9QQThPjjiMU6PjnjmN
wCbZka7h3mGEJR2lNY8SgH6TGHB5IoHCjExVFCa0mKMht+ptBZqK3TBxMJjo
mmyU4kHZt8TRHB5UPJJYatlEk5heJnV+4ieK3g8nC8O6ziaWdaUv/KS1t+U8
McVTbN5Es6ARlOUcimWQK3uMV5cMjzEX4kRrENEpWVlHDVVVmBJpi8Ut2LWx
ME6ZrQQ/c/XW7Vy8uLo1yq7YjSZWlyIxoHEwD2S0DRW9PXfm7v8Xx5V669sw
tDNLNChfOJvglFD2bBT2nsNiEubrxOPFg47BX7TX29Wq9An7BvO1WtZrUhbZ
KJc5kPo2hDuIVMoKXXxgUOmvyh+dEEOqJ4QXyDnRrOCMqnroA+PaZb0fdS8S
S9c/EhGwCRe5BoNjgSVg3h0ZcqTtzbbL4q0i2PdwNTVAabVIieuQz2oV8gAE
MVCE7zNj4McA2nd8f7/iE7i7N3C1A0XwV0hg6Xysk4MjUkHgJxERcgy4faxA
QsC9CEFCLzgNDmiOxFyM1kYYbLDmmnn8Mu9yvK8sE6wmh2BwAaA8jsknZvfo
XGr+L3wpol+A/h59eno2ydSYeSQwOQl8HXvtOo+Rc0aHQwcAz28nYVnGtoMl
V8spXN2Nw7Qc0H6+vrxsjyIUEeMlIIOjWDwfg877k9aUIBNcpvoPloi3NrKc
LC6n2ZbROsdfWrDMcLafZQJLgLvbukigdL9RKjcZzrLnO8vee8T1wQ4l7wl+
mzHswtNFp4WoLAtzPJrelMUENxN3H5k4DgWT4Q/JI4w/fKYgT7oItotikwfM
cd9WWyYkrwHua19uVE+UmyZqsQDaJRuu8FLYHwejkQsxY/JWUeTJkMejvHz6
zn2JQI5vN74SoK5Pz04eyB0gDvdih/4sVKIvgRO2ZExrJCs7RA505BZ1/b6I
000Jnokb2QdKa5wLrM7IM+T0c6S3nDQ8Wvy4nW+jTMENpiqEEh/D9CuudbA2
+or9GIJnSxCe7ZG7u4N/CSaf4kUkUaaKISJIjNKXgIx5ui4RbDFkG+NoQI49
rKpwgKMbxXBimS1hdz0nZP858sd4hEnfEgDbAjHTgbnD3tzmzdJsswAotX2/
vUFpROu8Xiog31WFfp3eCwnE1kxzBWR3bcg4j/kO5Ox8A9QzJm7X8J7Vbhj7
pyYPwL1Lj2g7/UA/FtjDHeJ6kAFyqlj2VRA3LgKpcESC7bfc+pOZXwiITA/M
xW6UEz8AvyTC+/LbVG3HJVyzs8OaQ5xB53qpAGGQOE3K2MlAoJlViCXI0CHO
/GGWnVf9GBD6BaIFTbjQyE5cb7cISxS3QjEBguZkOBJbBAoxI7EhPVv1+ymE
spjb7H3nzmmSstcVV1tEF7DBZLOVvZmBZmH86DGXySKzsB7zLnyoDPlLGsI9
ReSYg0wgxWnW0WGFngiytzSDCP3abUg36q4bcpDkjrRUTV40WSgEO3xVoDOl
T4IxQ5E6/EjXoSG+D0cHcsxnGqBERqII0iUJnXQW1Bkdfs7YfKNtTT4HhYtg
lQdyyxn9YfrNu2fnl88pDYo6sD1a59W0WS3oj5z8FXWMB7NTzNFEpY/dz2Cn
EPLZBvtUjECqSw4Wevowz2QBJ8xkYLBTKL3KBI/ONYnx7p4NFxnEwuHxBDUY
rYra5PqErCdq5Nc1W1R2Es5EtKbZeIg+kb9PuiBR8YbiXDiOh6AHHT14RFaa
NI5xidHaDgtVOPeOEGQJyK7LK0/5M/gO6hYyGQDkx4lhvKO6KmNcW7Q7YkHi
dLD8LjC4lkdFgiTdbsZZyxxDwZzJkfcFPJuc05801yekl5F2MdI1Kq4awzH1
YrFtEry9jNLSnIHKG3uWEj4Rbx3zdjj5kwz2EJF0Y0/F7C/NqJRxYEMMkA0l
a+IdPLd5mgHdTp+NPI+UZvPCMJZjabmEVZ1rWlvB1UG7IayherSQWZt5IOZU
mrdsU0uDcsRxaAMenyRpwPgKdRxwZtXEpexizadmpEdmHcF/rSSMSJWa0cda
AR0SAoQdhuBISBg4EeF0JAl1gtruNvWGQBp1YrDSxbW3jDksymSj2Svn3FPO
qEUabbBPIelsRTVdMXRLOHLiPsnhKOk4YfFb/AusPG92dEV7CN2SBYOKNt10
BcomqzuvnM8b2CvYZZKdBgRNLkpwAnLbBe3Mtiworddh6wTsGhby7tnHR9Fo
xnLvj4OBLxIh2GkBzgN1hqNIyAIdt8mxxk2RejjCAvYnIeNwo4eyRgUEHVOu
LNYk5iiwwToPC6I1++LbOmtB4Vxci4NOmhcsPXZA8jbUaKhuNBlFTLM8ZB6T
JgAKgks9GiGka7rG5VV+pZJTrCXbp0myG/pkI3V5YKnitSLFhnwqAocaSIYP
0A0PkHNzuY5AtCw8mCvW8GH/rtVBvAg0iQZuAZdhWVCQZYKAsJQnLp1/PKoa
eAPomP4FdHT0tQoJJI3X8rR7VLVkKGJGklqiiZReDU6WCjnhriKiAI6uxpHp
EUXo8birvRT2Ta1pA3roTo1YUxKRvJXyvqwQDxzJSHHKLx2RJcBugCcJpLYF
ikUTXexLkxlPFITRaOxjZCs28BFYo8b2KBewBhLdgHFAplh7jbKbHB49eguZ
YXip7MIoeUL+RjfY/PFo4traDCwdEZAOhDk3nuNasnsx9Zqcl3iTC7H4D8XV
bG42wahh1jZsKr76KFplwZalF2DDK0eJaK0atXua8URk7dPZY8XW/uzxGfuG
TIieqMgkqAdB3t+DyJfoDiZQmWMTpgQDoJDCB32ffLA0LncXAgHBHIqQxXB9
Rvl7+SyscWxhnxEsn8PRKLP8HHk8CwmJwfbH2k8oTuIvqNpwi565OlxIMBIc
XallwqovftJGFdvJTFWU4G2Hw//CL3LKpU9qfEKUQFSzOFEnGi/jRiKjatM7
H4SIiC6xoOQpwWUFExFblcSWDFJ/FVlxWHnLfsLgKTUezTQ926YW2aRstycp
G7WM5XYBixy45Cm6EB9xQTmh+jm88qMaHQe0aEci6+ZsMLY5TV8nQ8+2AofM
D0xSVIJMR5NET0Sn26TZl2OJlh9lgnv3Nbj2h5now21zum0mNrPHkObpm3AU
WwQD1POwp9ERR4Fyen4WrS6haZ2uRLRNiwqxMHpyUxX8z/EXrpngQ5cB8A6s
SpxEFSNlbNCIVwNPE51AwT0TAzIUr3dgvhWEg5zkPQyoQ2ZOAyrueUFd1SgA
G2JMsnPa0stGEmKqRmxzQKdN4LbSi1U2OMkr7GpxS6cvSXAKe1SFmpY0110V
P3pp9Rr6HmjUDD0V+5Hsh3fnAyC3Tl0pQ6NbwW7BSPOZ1fgj1m2AMnbLCHN7
3APYPWd1udqiyrTsLfkTmZb66SLup94/sjhCDaPanoHj0XLYA4XZBUZEB2ml
TbNysVFI5l58/4bkrn6GYsSJUAJhlgSM8AWgnKwLdvhyqbI6Tk4/w7YZTvpc
HB+fcpnToHOQ8aJiaIBct1ekUUpEW5rd9XoDB6lJ3dTIMY79fSamqxjxHdfD
lo3NVHBXaI9nxoc/tiTJFNV+VVm3xevZioedbta1z8vuejcukTjVk9uJGQkT
wMLDO6mVzefB4cY1ueR0I2R5LwlacYTebK8KbY42VOFzBApvnPSm5iSy0BmB
s8zkwozp1JEzFuyrRaqvK8n55gTD4Y3TdwPrhn8I+pu9U2EzRMs5lNzKgGyP
5IslLexcjcVqJXcz6zU3jHV4clso269r6GGqg/yxWKuxTfcG9KMoHfraa29b
OYhOfh7ggKttQ76V9DsKC8u9xgONkSIDhmddCX/kKzLnoNtqhrnzivPKkoCL
fz7QX0VasHPPHU9NgG9kYYGIeRCctRQw1F0EyEeB1HBu8ftKwMDBBliQW0ZK
5sJQUozUW6wkzCHzccMLI8ljODhpR2SpYcFr29EpLCeR87i9tIw0N+RquSnS
oYNkNt2nJ2oQSpXO8hzhQFMiE3K2NWoM823D2p+YLC7wUlVVibLYRE6cB+g1
GMavwLR23G5K35Cv0duOr/gBrjbnqm846z/0LNedoOJNnUnP8Rkr3SQBlnN3
W887BZdmu+Z6U2PYWl+J0692BVtnzJQfn6HRg7Miy+N4ivw38GvsS6QqE7Vo
1H3fJxEFBpkbAiSGcSvA67fGI6lVnXtHI3NJhD7rCxQOnWSUWc49lUBlAYlf
MK/ddiGC2k8uyF6TSmCaak2oYl49JNZTamOk6jmWxKmTVISrjtn3+7KaZjUD
uBNwpGvREGC+J8fpULHNkRuL57yW5z+gjFxy2ip9z4X3WGxvJrgF+kRa1qrq
ssw3bXDpsAdiQTYA6oFig06R3slJJkVae49MqEVzdoBOgVHKqY0uK//x48vy
TrtLDnUt1Kuy2DhgPOYHNh9GInzPohwhXkzXcKlfbhBjkISeQBkk+sQBGoEP
RhErJmq6hLAga4fcgIH0WgQfgIkcIk/bq3pmr3kYeOPBUcxP5QtvSFCL1HBm
LVA9ZcJpjBgVOXk/zqS3b1vswUycFXjCFDvcEZ6BcPABbDmxzqC9FabVG7lT
WXVhvZ07fIQGTagGsy/dTIg2t6VNQR6tfmBHvXbZNVOUYteYJQK5eo6jsf84
RkpIXXT5FRzDFckA9bpRS6QOLRVgMb3wP3tp5WDi7LAQqqfLcx6rnQt8B6tl
UgATphign+OJe3g8yU7wPw/wP/j8p2MGQjLiiSbtKOVwvC7H1Mlzu3+YR3gr
Gnq8MvuZiBOy4pgL++JWI1thppNkBZ8cUVIfiYiURwIvaJbMvqfECORWSGD2
YzJA4fCpKgd1WNKf+syEu5FgOsXYSJf4yAG7Gz2HnQuFVVpR52csC0zCI9cS
4WKskYCrwjpMAv1Deu5InE1IOCYT8/vEwUmMufUSsUS5yOfGTK1uJsqRKSUp
ujZsvqBA6jV49Qk+po0IK7bfQ2QzPLpEl2LaTGB8I6s4HDRyDKVp/HpOIoL9
oxmqgoes4Jf0Awl9l5OWYSGGazum6j7uJRWiLunBbG63I1VQfCg9TZrCfctt
AvnTKzXhaintBJ3EclUqmW3TOMuYfRowFkMSdhJCTO8bJXopviHFdE5mJ06H
J57K3mnSaTCQKN2HFEGlaGOYW/VvSu9xaGzceJ0qWORfb6uKrc1FTfnndIL7
tooMwDA1BmSU0Cl652j/ApsNKvYYNpDdI5MWQXlMsMP7YjQSmFm5kbj6L4nB
qD/e9YNyuBYMAdLMSZbS9MkvuahRei74wsUOgJRzpOHW/V265KSYBs3X+Cpy
1GIZFXZT8BxKLx8c0aHTVOSQjL/SiVURAx9KnPuPsaM85yTdUD0pgVJx4nu3
WaJqlLb8TKo7qeR1DIeqtyV39zRhgZmEVoeKR32lezbCkpA3W5YcosewgxEZ
I0heYXeBNR5luJ41l+Qyd8PGhNYpZe7/Jy2n3MHN6sLc0nwMR6G0yI2XO6nP
EpWcq0KD7yhUHEjjcpdY7lOGm0ldRCLI18jSQyaGUgs9L7EysuLCsyyTaQME
NUj2hl28/Kpof3OYj9YCAmXxvtVapGB+ph44zdakd6O75VAdSRScb0J6cKgB
J//bRhAlxCbcVrEJby/Y3R7x3oXKYWcoKyWn4JQUWlCqxrnFUBbOMok6Zlv1
ZdaUJo9fP7SzS+dmjVcT1hOjJ/RXpRfD+PEQ0S1vlYh+vkOMmWd9V6dBqtKW
zEljY1gBbofpa9ZGyKvcwYqm4WYh82zqH3cxJQJDcPhxsk+tcQ5GjdubCkmP
SfD11JtmQ5jUZyqvXl3Y1zpprRzaFc6GIdSiuiZ1xF4Rjqt54yNitahAcVBU
ZsqmzmXbcravYJWyMz82v1U2bE8nHMgMccl24gmf4DJo4PuDuxXrbsnll5dt
HQhA3NUJPhPnAq19gJZcGoYZG4bv62x7m/C8PVnKkceAoldIv6ycGQwfAHCz
BSaPrrjGUVpccTtquRFds23JQ8f7mXfa3JvFlaP26zFla0boH/0iq71sP2Xz
V5g+N6f9pkmqDy/6McN+s679QQ3fhW7XBNPyA63DoC9+YPSsiM56EGhaVLV/
HWu6JtGsJ2T0XHvbyUATF/X+GBmEJYT0MHZRslpOe50mgQR1mhISA29BHrJ/
aik1j8PQ5Lb3196RFGrOMa5cyiTE4k34XAju8JqRW/GeY9tO3zmp2pVwhtB8
jGLlIfwkTtxbzfw28RHcVjUF0gnpqkPMMc6ErLyJ+YCjBM4SCh4H5UXpNtPE
EhzOlKkvJCwX9prV1r4T3rDVeEFtbRu2L8eQLWfaRIZPKVJ6IIkqNOEKlD0Z
G61j9h5RkfaU+Eri8Zr6D1L2W4BCcD17zGZUIkkV5HXAkAXBCgiUTuCIZDM1
npiwrWFNgSHYBUg4ZBc3i3eI9/TPfic12Qw2MYzP9ymOK1HERtUSFNDVqAe5
RCh0XgrjxPsC12COJYzViJLZioMpl0ics4voweBagJpXdOShDOiNv6rRbsQ/
HSJEyhFru39GXCXpN1nVU/GJTflTsxetNjMe1qeTf5D+hOPi9ZocKGAde7kl
EAhGsW/E4RhIM2LLSSwhZtyM1FmqzhnbYGYhi5YN0mR/bJmYZEWq54BtjzBD
KTvWvKVPZyezUxcaiqZ9Dz++FiYuQmqyyrwwi/5iNIoyBpH25u1lgJ7VZPfE
FuG8jP6ItwQvkRyKsy1PiegxhNibspmtTKpXiMSnJA5sgzSXQv6wtEatR0dB
DslV1A4ztuhyq3qrTgWLxcUMwWDMkbgZxSv7LeDKDrIe8e/DLhtBGbNpTL2T
sc+SGbKTbHittwh4ssgs/tyf5p+j3CHQboyawi+crYbXTuuK5SrKIY6Mk54F
m/ExgYKIlOhEvH6rDPdkrDp17KDDuCSdz2EHgXFgsgX8CD8hhOOnjx88lpJF
IkqqSrw4ive0G1A+l68NU26tH5vUiLbjshB4N02AFiOTMNB9evtSTkW5J+M8
4LPZA/TtMAcQ30JTbyhTDE7rnTgjxythVAw4d4ECsi26rYg0ylFk7h/KEYVn
afNY1G4VdWlPlh26TXEyqB+jg44VOcrScL3RuMtKAqT0AC5bZG7R9yknoEWI
nNQkk3TG24SGE3luSFsyXW9hwgeJMkA6BjIZqlo+EJSEZ28uLp4/xfgu/0Qo
nw8enXEEOJq6WIxwiN96e8lU9FDzeJ69JWjQx2ePz7DwG56iD/9EI50+PMYP
jRuTs31wvf1lyBp4XqkeI9MmNUfrPLXm+APyOi8VfCxEOoH33laUnI9fA5US
Jfc37E/f904kRi7GqEyiELOPDcWk4OE+6PweBXpiHCgXkRSDSonvKVg4hLMy
OijyLW36zLQ3L2vQi0l1oRJR6vKNZQkj4HsasaP8qUSFIA+pRfzK2C8SPOB0
NDK5AVm5MNW0PJZi5ajGonkx56QmltQxbiBzcwEJ12hU8Zo8TK6J/3FTUgly
0rv6IMTo1TDA7UozvZiFCSenrkNRyUkuq6RZ4RjULKI9YBPDZgtklIuDx2f2
mMsXufRL7QP2lBHkrkADGf0+HVJrE9XVqZnTgRFQndBHJq95A+LJZGacuDPd
IK/QQt0p3LHFjBHEwUC/mgo5mvD7CXs44aQrlK2E/MeKv87VhY2m+mgyFcbe
h86XmFxYGBcLXBmyeNoFPN4UtaTSkx6vpoHrmQahmIA9AHuqCeTsk2m2I9jo
4v+K3oSDryNH41QFl0DpRIYHRBxA5SVYFytROBNF+dxwVdZ8LFbZP8D3/yFk
Noem5VRQ02yxE9vJTIrXrHT4gHBgES6ioW5cIgZMGJGyg62zlrqyVwi2KCJD
3KkT3kx7FbG21TKcz2NFxPn30W+aSlDChRU7WQw3Rky/3EeJUSWCI24VzYxl
jKU3p/xyqloBvTloLdFBPWqgOmuggk77suKMOgTIGMSULJJNuGsUgCsVgRJx
9Za1M+scbolSWrEK+Sc4NypxFpg8NJbgPtdHg11CHEsCQBzk+NDvcV9oWbon
YTvMreU4hGAwh0BwuL6Js4mSyUfCN6xcV0gcJYH8inayKH3OeBqk6m6rkkuj
xZxgomZ8L/LdBH3cNCXYbkjcJ4ptRRWy1gWsaRHN8nNMHmehVyQ6t2T9uWAJ
RLBQKU5Cz3AnkNwixEXgORU+eDcwI16l3Sw7b0NQJBZdKVySLe1HibpfsJAK
gSkr4p/FlMufkgrE7JDg4P/cle00WPhcSdH+GZW2UMmO33jvd1OKQU6BOJYs
qhC0H28g2TB5sSZhQe4qSuJACBxJBuP14BSliCEkGLQL3CskaQEOGDrRFPau
4MpuNf6NO18uj2rmtvVJyjCA7tU6GL6HN7MddRuETAjJTzZ2YtSYYocmhqwL
JUD4UV8WIMN3nlLr0FCekjGP8mYyfpx44KB6RLSdQTarS93R/TR6JfKeSBzu
QxR3WU/cse6zJFii3nCaqwuLpiiIZKnOcGXDaJrW7qV4+/EepvJtMMUBkqdJ
cCh3sYULgfSYhbUhNo9qb4TjM3hI5NK7rstlrEQBc75/GqNbxLsTtr0nqlhp
F0ljAFRsVyObp5E6rm+BWDQ3rJd1hZsr70JzsqWIwVUuCRyiVaFa40YQHEmy
pxiIR4N2NuSUEzVghF6Ul6UVoTO0v9GjRGW9VAIeFs2VqWQ+TTVAQkngIUq/
fyeYkTpG9yBFULAsUn1d1PTeZlkXjXrTaKCWS51j21GzJ1JHTXGwlmV9It+P
xpwkXHk8si+hyjAW1gxsAmdgJfbvhPi9+/I/xDhch4KuVTAoybzm8jiU39Vi
h8iCAdF2jOmQyoG1Ca3NyE9jMBEtkxDzbF2nOExuPOXJrteg3IkXnCggAm/5
oZtTlQAOgVCLupxOnGnJ4mxy2YInvySBqu45ShcC93kmCTUYm2DNhexgrJpb
HgXwdp5mMFplJ10StkX+Q/xqGG7az0kJSCU2FHL3SHnhLnnZU2kc9IzByHqu
BOPWuoAbv0F0F+m4hm7BiWKYsTTYNuLM2OuAwO+ZNkeOB6OaFDGOlsuEb5qm
g+ZywWvJeEP8jM22xT53EkQmJVeKCT599BArBogS13CjKN3AdATsNWTr3195
B/UyC62/Li9fBR4UVcCjifXwS8kP2lYmEwSriTQJynQMTLq9xR4s0SUBdMv4
vDFkK83iIhIIQ+sgc5J2wxb3FQFdB4CTsXoPt4WbIxf9itUw/nVoG5nPW0rR
lL/EgfVtNnryIPpN2ItsZRF5IsbWIU0sOHMJG+2NduATATXpx8X17wl6T0Bt
4axggYcYL4sNMlVnF2Zsmv65/ryywbxizGnfiaUNLJCvNbvRfdIeL+HJCVET
MEpupBjfY5oazBlsKmT2K4o2QzVKC8/YESsUUWsq0ACuCRtCYh4MD4gSZzPs
rylZQey21/Ig++ZozKY4Wy4gyRHkCYHH5gWFqLwUm1KxGCZyNstSmoySQmIb
m7JW9CU6DsayDIbnFbyfZFikbd7StvIxeUBhoi0aCUIjJaDayQEGXJN49THw
WolKxc3mElw+LhiI7p48/dYYHt2mzFHcUqGjhaTrk5nmaB4yLCiVhFEvCXMC
g7Z9R1l+7fOlNu2M8D6ji2agKSqGomtDzqaRnVTEYNv6TmSCBLz351eHpI6G
84UnVtNCQQkzQufWtjSpF5rMm9MrGSkNjgdPL0RGMQGjWKHklef1CkmuP+oE
kiy5D/hL1eeY+eHM+zQzhzDFgk6qadhVhHflXJSiWta3I71ffag2JR2DrfuQ
YRUrFQNdcasVbUwKFHNTBAsSU1JsQkpdV9w3hQ2c0bsjLIMra4UChPB4pUvh
Vu12/gM8qxnWHyseIx0lNlc+v3x0lr3RZMK7e6BqPToD/YP/cHdH//78swQm
iR7JrGbmGNxC2hypvm1DBoZohjePuJN4kjwYQXNjq/GNR61FkSnohtVY0wcT
fS/ZCDwryjVCA3QS5iTl4P1yundfP//y0dnEZn+KXx1GYtykXQW/ttQUyfVY
BUEyDJpTYpBSvB24g/yKWLRJMFHyd7LgaGs/0blkSa8m49ZFHw+7dL9kXPev
EV4Y7FrtFUdpWtJpFKvueTwK0X36+IT6LsaHFVyNjYVic3NGcZ+82eRasv/p
McbwjlgmhirYDx1auMRiQ6mLEXbeUY3D6JTv7nimGC/sZdG2qm2jrsnTpcZX
sntxeBgkzJiwVIVeQ14yEwbnQlF+pqaVwshEx7+nH3C3Hp2cfYohziTbS9zo
jBIXaAKWex5YJ1EDexmk825sChg7hvB0IzcmpaThfcntvrR2Y1xI55VWJAG4
lIq5/aasd7wUBZbLCDikEfhqhhl11IewhdfkFTamC5pIBEF6MDsjEKRvH01f
v724fPV9hLm8eVRv2umjNfyXcbMvA8At6i2g/kskSWz+nWy6TJ2lrddzC936
OjbK5csK20DbogBQgjy70eh9AA7HasNJ4CeMD44kE1thFBGeLtPj0b8doqsl
TTyQPxE2xeXedreiGFCUkZrCiSg+y4zij81mJN+J2RQvUFm10hBodh7T7arc
gCUoS9AQAAhZPt1ettlFIETTeN1+mDKn7LDHwNLev47nVPGjI8xND4TWE0IW
wuC4HiWXC6V35SgAWy/9tDUz0+HNdDS/z9SSCTMeb+yOnMv2qnGq6x5a3Vr6
5gifqq5Cy40omSlDkQyF0SkmOyiqu5EK+I7ILLhh+0gxUbyy6qNXgElCk0Nn
Zh3M+djkXWGR54TJgSnzEYzIbp+jIrFtgw6c1nYoJlx15C9wbPV7BtbpLSrt
GJLYr9r5aC2cik7X3d3RvxjxSrAISGXXjqc4Q5FpnNNElEDVJKTawEaygydR
YtO5SCgRbHlO4xdFXJ3y0iXBHAYPdh6WJp4Vo+w875ce2aMUjTg0/EPuaUIX
QV2woDKBqWNhRyCfvlkxRkz9jisElHP88FQt9v2kX7T7ct4cu8USc0WhLLRv
IP+ViYLPTZIP2EEBOmyCxp0ov8Rj4ypZBQ7qJ708IS9Drrx7ev96+0NXBMjM
hXM/xEKESImMExoXdZ2iGBfVSMdbLpOjES376VtOYBg7/R69A8QY5mab6W3y
VvhRWhIqaR0xJtsiZhViBuJNP/hiu95Mi2oK752+qNvuQE/54YOHKNbxVtsO
mLSQoN6Onn2Cd7NHpmgQUno2BdgHZBHaII+z4mi5TL/aVwkLJaUggcG7tRDQ
wr+mgTgXpVnwMBzP6P/dfzzJTk4/Nb88+mx2+vCMfj15xNz59OHDmfm/+w9O
UyvktVYdBsUOn5Jfghf17l6vBwHnV/d2MVYg93utpuXIpqUTgopFv/tEWWsq
WQYVE9QuUDG/KZdfq410Ixe2NyAn+RI7MVy8V6zaUavyFZnwXH6Yj/VooBYN
R5l0aDB1806aRgre956JnGfwXFZE7gQ7dZCbVE/XMqrO6PO2A8XBJLN+K9aj
BTLSBcnUGApsJYlEJL95g4abnAvkgK0jNOGMLT6OOIYKmRtMENriDcC0iPZJ
4Oywixgh+2TPHmSMjZgvrtexiEGdI4c/1OR9QZ4RPDbZd8X0yyIqu1Hh4Kt0
SxfwOXJh+E74Xr+2okPs5ZIf+ZYSZHGvRIkJYoknrxXDPFG+s6E+NxgMA4wk
ExpZ16Cye9kLVAQLA3urdrgU/CTr0+n4sqRkEfn4yIATJaBVI9ws3kNOdNK+
J1L8FROGFPLhaqt80VzhQcMSbCbi0oSq1I5OEyssZPigrSEORhF76yE79Ap2
xeTH7c5j3wRJgFIFeMLN+8S7RhDRtj+5xUE9gjdZKyiqm+x0+Rm/8KLX1iQA
YmAag/EA6iHHDI2MmxRxF8zgO+4115EXDlpJ/cyiVOrJtt1H4HNkGFPSyZ6E
fkomJTsQ7cKZTGE/48QNaJNZA60Zl2COZPJfDNbmqtwSFHMwNvNwW0RMkCoC
/A1TqxhlSfUpTseLVjtnLcXwuPQA3imu8s5gklENm9xDWkdBnkIERONCj6WA
YWmeM3+V1zNoG5cTJWfbDcFIJMzvW+ytfPht0aBKjH09b9CrqYLxiOP4aGmE
5j8cVfhR2pHaguEAcrZjK7AFkddNr2Hbf6ol9TntiyvnSphgnx6fSYlV3pNJ
g2GOekWqzNtSjqt1YpzZE5qp256WFXVeprqf7MAUVxxw15eqC3xzqot3UeAI
Dw1tNvhKSlBIIopSmszsnho/b9gcdSSolpnFpEZCwnUIz67l45w6c+Mf6BmF
/wqBZMXoqyPPS/idsCFiLsGjtva5JpLZzWVqoErqEgME1MmGCwNMgwzi/yyx
hyc8kMaImRRrZzWAw1oAeiapS3iD8xOnK59mbLWAHU649ZP+nh1KaNmGg/Pe
ZBJySFItYjFvCCdxDgFX99JVEdlM3nRkAfyq6cp3ZJTTZWOYc2UwhoOQtnmx
Xa9zDjY/tT1wviXMa9YlBf/aojsavs/2HBYwtQxYaBwVWwJWc30hSE0jRTqx
rBmkjx2m+cNHT4igSJTb7FDxPFJ5erSEQhdFTlZmc0kyk9S2msE7+40qTh+m
6FM4s31thDJqI5R6XXiSobuRifNzV0vRi9R6FnDStPlPUFSoP4S0+w4Bt0F/
JWMQDwIj0qfKDRd68nl2qkepspSAeAm3BrRRSjTj9lC5M3nqMNDcQJT05s5S
loMftHn7RWVfTI6cr6Dlj3ZwkZgP5QZwIq8ir42cqxvgDuPcPhYS2jdHxTGU
uTo717G6nDFCOzk+dinOmUVcpFAzg4qNzfsjgIF75y3P/TXztkCDHzjdiM03
NpnzSrzaeekE6w/snhh1+BASWkBfW+4DKxyBpDKB95gGM6SSE2DYmaLJMV7Y
0efK/FKsN/TAMrgcw4ptItwOiRRpL8LwVgnQIGycoP0EOLIxg1w7eN36xqZY
OHhD0UgBwxxLcvI2pkNF7FqLKkI8+QajSLdoSmBFLgK+ElYVvYM1RU5l3vEb
NwVVWZHXnyCtiFhYlcbEpwX3cgfW0WhSKV0L9jKNdM+hxG+iPPIpcYF00boY
d9b0OGOpRFu71UaGaF2ozyDvJPFfBsuGg8n+LjB3hIKcPR+1o2FFigYj2uDa
1g1nwKEg08OKqHEmJSkF5WwpCu0FGnIS8KXpTXxcRRtLocjBgiVGBOKuPZLE
2wSKNjVJoiJedo9WrDbdJBqWwN3iMMqiGID+iAT9q4hu4PoCmXaB6i1j3rW5
P6HqUvEqNIPcMb5DhNmNGExHprCA0+PDKFQ2GvL0XdG2W8kUEFzEmPUvB5eY
AvfuZe+wW47ywUuLmPwNzD4Eondgl/9VcE2Ci3SkdQUJzh3DjdE4JiUxyZCc
gXqVtLrhygAQWag7UCoJrT3CxqQJlodsNTGSsmSjHpkMWGkiXbF2GvJVUb+S
It2MkmxiLhMfct/R5CTxUEGbX19+I/Eoo+dhlQZPtEivtqNF6jEqrhKpEwJf
HsLnSDortM40YfKz4+Off9bXW9eAhMOk6AYU/Ca/IgcjJzYISDTx2mhH6nbi
65hGYCGBGqKVzfN5+hqHenf5hVtj268rNTq4RRMKR+nUEHVywnOkVtY1zGvN
RSoYWOf+dbe9SoDQ5lvMh/gi7StMDSWSfHOpTiWA83aLmyUBWCdhZ5HjU4pE
IL20/orvP507WOuwWNy2Wai5sKhdaIcqf8DtqU1q0cnp8TGQBpIWe+zheI5j
V8fHs5PpQ/asXm1zuHadT1uZUyMMRddH/ixWk/BETgYi6gipAJgNDkxdrg+a
C3yGH20GSZ0n2u0VAjmDNCKE+5zoULDnsoN3RCXFTwkwyYAsNDpx9vj0ROvt
B4AmITLFXi6uRAhux7T9ZxQQto+NWJyDBjdS/2M3J8BN5dyMe7WtFqIvoTAP
nV7WWIRALQjELdCGBI/YzIGXfSH1fu4QiO0oAF5IZJ1bI701r31JpwCrjo0x
te3RkvUoBuxnptoP2WCnEtQ1+CwxTKxyvOcSIV/Tmmxm4xShIoZWGEbtogee
bJKiZJWGwzQhQ4eUEArsEDI1wayFfZv0JR7uNre2kywLXHrdpJXBrOnQF2gl
M9yOok0AhWn9OgkdptXkFES6anA/0ZPBiJ01SCgJeYdMkjhRfDPeyLJMbSvG
Cb4XzhGVZPIJqESP0TFDW61ajlqbx761PCP3O4NdonsJkez0deuckSbi7JBF
jdTXTzCws+AsQ3TylQIEpwn2YlmIK2vWJxL86prr35yVFYLsMdbu0TY3zXTu
hMsfr5ytudBUz1i5OMk0Utpyz9sRUCFTYy8YWeqe42eJyfcCHZXkLvRTi6QN
GSekHxFSAUoMhp9lRAaEOjR5vXnWh2zAtGrKk11xal3IqjJQkML1iXbGVyiQ
broydswwtiDxtAg1y01J62pKPQntJB01JtqRbrHnNbREA4qAhNf5suQYnpzS
IlIHr5z6W1JsJWSbcfdwwskgK0Tb/ggCj1KVcylmwwicRq/Ye7DY1iXm1x6w
kglHhLQ+uMgZV4kLhtWc3dPmDvfT1o2z+zvU0adVfBHDTep/o6M6hP1zhjeM
Z0C1NxiVRxd4H+sr5Nf34QFCn0mqfyOlZ+UEhE/qzCikXk214o5gPDjQH8l0
kbCijPt/dBGTI6kxt8g4qo5xfbmtOVNIh1CWBp+6nlf+7o6+GvxXsr+45ZiH
e4OdbXwZO1RgDxBbhhb7tyRNd6khX2WwYIK1gxfDDe7F2vaZ5WVT++wbBtdF
Kx91ArwyqrVipesuwO8IvLEFLEirgpimpQ5WbfzGkf537WGLEVAAkWI5zVxD
fkldjo4sZchUcQKrGULXKTVoVAYTfgzp9kvoiIopeDnw4KptZcuVOy1kHCya
y5kityGxBY8Ar0B0AHY/1Qx/OMu+65dA63gGwWKsB1pK/wblxX2AZUgIhZF3
bKw4cUiuIiyMLVdkFiZiIWD0gSgI3SRFrZXbxHHt99jII6nT6qdtmMEmY/XB
5O12vXq9lulC/eYq/GylpT0YWYOLLClEZrhmMuypIYmIuMxKGH/TqeGHmYAs
KofVkWlJJCudti7SaV2kmWRaIJlmrKaFks7UvP5FhZKuXyiZel9IilN7GTpR
WjdKV/RtRnJ1++78KLkmzgTU/16evzkf6H6XaUcBPSNVW1D80HN5aDrkptMp
mbc45vkC21TBwtmMdHdPOILhl787WIF16w8kpyjfwo1u2DX9PnsG6/2OEoLO
KzjG2+x70AS6Bdyp9zVfGZTLOwye+ZKgVmuHWrIPvsGQ79lTDYHQi6tKXASP
Hj7EpLHsj3V77b5qcqCX0sOFuOi2WCXyFIzG64KQeiRrHsGGiOf7fI2mLdpy
otdd+3IDtmJwAjLYXwXnyluXNlLjIf9I0CJfengrtxN7l29Ld5Hnc1yRDCmO
WC8R7xWjNdrBOCCqO8j4HeQ5IJQKcjLgpn6JtPgFnDYoNG+KBaZ5+a5DKfAK
qKP6qYbDL7FH3iR7CSO7r3LMoWnfw4Z85esVaH/btkOP6B/h7rwq4Chu8glN
OXsBf17n8Kd3ICcKUODq9XzbXE3cdzl6zLN/3q7zBsZ93hTvsze7qwZrxf6I
QPvwPFz/7DVRpv9pkn29LWjMGo/BbxBg9KJrQBEDfeqPRbX2RXaZd9sdvPoZ
3uTLaxigwdHg5xquHvxIUe3v6nq5A443cW+r5f/9X/6H7Cm+6n2us9xklyCU
fcln8Tr/MXuJHaFVmBTo3dpsWRUjCJpivhUi/38tHyAyWvIAAA==

-->

</rfc>
