<?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.29 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-tiesel-v6ops-ipv6-app-testing-01" category="bcp" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.0 -->
  <front>
    <title abbrev="ipv6-app-testing">Testing Applications' IPv6 Support</title>
    <seriesInfo name="Internet-Draft" value="draft-tiesel-v6ops-ipv6-app-testing-01"/>
    <author fullname="Philipp S. Tiesel">
      <organization>SAP SE</organization>
      <address>
        <email>philipp@tiesel.net, philipp.tiesel@sap.com</email>
      </address>
    </author>
    <author fullname="Jen Linkova">
      <organization>Google</organization>
      <address>
        <email>furry13@gmail.com, furry@google.com</email>
      </address>
    </author>
    <author fullname="Kyle Ouellette">
      <organization abbrev="UNH-IOL">University of New Hampshire Interoperability Labs</organization>
      <address>
        <email>kouellette@iol.unh.edu</email>
      </address>
    </author>
    <author fullname="Ben Patton">
      <organization abbrev="UNH-IOL">University of New Hampshire Interoperability Labs</organization>
      <address>
        <email>bpatton@iol.unh.edu</email>
      </address>
    </author>
    <date year="2025" month="October" day="16"/>
    <area>General</area>
    <workgroup>v6ops Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 73?>

<t>This document provides guidance for application developers and software as a service providers on how to approach IPv6 testing in Dual-Stack (IPv4+IPv6), and IPv6-only scenarios, including "true IPv6-only" scenarios.
It discusses common misconceptions about the degree to which operating systems and libraries can abstract IPv6 issues away
and explains common regressions to avoid when deploying IPv6 support.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    IPv6 Operations Working Group mailing list (v6ops@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/v6ops/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/philsbln/ipv6-app-testing"/>.</t>
    </note>
  </front>
  <middle>
    <?line 80?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>For the last 20 years, enabling applications for IPv6 has focused on coexistence with IPv4 and allowing traffic to shift towards IPv6 without breaking IPv4 operation.
With the US mandate to move all governmental agencies to "IPv6-only" <xref target="M-21-07"/>, this target for IPv6 support changed to being fully functional in the absence of IPv4 and transition technologies providing connectivity to the IPv4 Internet.
Therefore, today's applications are expected to function regardless of whether they are used in an IPv4-only environment, a Dual-Stack environment, or an IPv6-only environment, with or without connectivity to the IPv4 Internet. To achieve this, applications need to be verified against all these scenarios.</t>
      <t>While the availability of IPv6 support in applications has a considerable impact on the success of IPv6,
there exists no documented best current practices how to do so.
Testing IPv6 compliance of network gear and operating systems has been documented extensively.
While the IETF does not define compliance tests, best current practice exists for the behavior of general IPv6 nodes <xref target="RFC8504"/> and Customer Edge (CE) routers <xref target="I-D.draft-ietf-v6ops-rfc7084bis"/>.</t>
      <t>To fill that gap, this document provides guidance for application developers and cloud application providers on how to approach IPv6 testing.
It described which scenarios they should consider validating against, and which common regressions to avoid when adding IPv6 support.
While many application developers assume that the network abstractions of the operating system (OS), communication libraries, and application frameworks will handle the transition towards IPv6 transparently, leaky abstractions within these frameworks will make it difficult for an application developer to write address family-independent code for features such as allow/deny lists and logging.
In addition to that challenge, modern cloud applications are typically composed of hundreds to thousands of micro- and macro-services, forming a complex distributed system that requires intricate communication and orchestration infrastructure to operate.
Enabling these applications to communicate over IPv6 requires careful analysis of data flows within all services and proper IPv6 support in all components that may require IPv6 traffic, as well as IPv6 addresses as metadata.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <section anchor="requirements-language">
        <name>Requirements Language</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="base-connectivity-scenarios">
        <name>Base Connectivity Scenarios</name>
        <t>Within this document, we define the following four "base connectivity scenarios"
in which applications ought to be verified for availability and functional correctness.</t>
        <dl>
          <dt>IPv4-only:</dt>
          <dd>
            <t>A node or application that has native connectivity towards all endpoints relevant for the test scenario using IPv4 and no connectivity towards any relevant IPv6 endpoints.</t>
          </dd>
          <dt>Dual-Stack:</dt>
          <dd>
            <t>A node or application that has native connectivity towards all endpoints relevant for the test scenario using IPv4 as well as using IPv6.</t>
          </dd>
          <dt>IPv6-only with NAT64:</dt>
          <dd>
            <t>A node or application that has native connectivity towards all endpoints relevant for the test scenario using IPv6 and connectivity towards IPv4 endpoints using a transition technology like NAT64, e.g., NAT64 in combination with CLAT, DNS64, or local address synthesis.</t>
          </dd>
          <dt>True IPv6-only:</dt>
          <dd>
            <t>A node or application that has native connectivity towards all endpoints relevant for the test scenario using IPv6 and no connectivity towards any relevant IPv4 endpoints.</t>
          </dd>
        </dl>
      </section>
      <section anchor="lifecycle-functions">
        <name>Lifecycle Functions</name>
        <t>Orthogonal to the Base Scenarios, we define lifecycle functions, i.e., the phases in which an application is approached during a simplified lifecycle of the application, in accordance to <xref target="NIST.SP.500-267Ar1"/> as follows:</t>
        <ul spacing="normal">
          <li>
            <t>Installation: The installation of the application including any initial configuration required for
getting the application in a state where remote services are operational.</t>
          </li>
          <li>
            <t>User Interface: All forms of interactive access to the application (e.g., Web UI, API).</t>
          </li>
          <li>
            <t>Management: All forms of remote management and monitoring functions.</t>
          </li>
          <li>
            <t>Update: All forms of update functions, including both automatic and manual update mechanisms.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="objectives">
      <name>Testing Objectives</name>
      <t>As a basic principle, IPv6 application testing should always be derived from functional and integration testing.
Therefore, the goal is to verify that the expected behavior is consistent across all connectivity scenarios,
i.e., the application functions correctly in IPv4-only, Dual-Stack, IPv6-only with NAT64 and True IPv6-only settings.
The following sections provide guidance on which connectivity scenarios to include in a testing campaign and how to approach testing complex cloud applications.</t>
      <section anchor="scenarios">
        <name>Connectivity Scenarios</name>
        <t><xref target="scn_combinations"/> lists the combinations of connectivity scenarios that application testing should generally consider.
Note, while the involved parties are listed here as "client" and "server" to reflect the most common case, the combinations can be used the same way when considering peer-to-peer applications – with "client" representing the initiating or first acting party.</t>
        <t>The first five scenarios marked as <em>base</em> should cover all major code paths and fallback conditions.
These include Dual-Stack clients combined with IPv4-only and a True IPv6-only server, to test wither the additional address family confused the client.
We also include then cases with Dual-Stack Server and Single-Stack clients, to test whether a single address family at client side works as anticipated and look at the transition case using NAT64.
We have no special scenarios for 464XLAT <xref target="RFC6877"/> and IPv6-Mostly <xref target="I-D.draft-ietf-v6ops-6mops"/>, as these architectures are from then client side indistinguishable from the Dual-Stack (464XLAT or IPv6-Mostly with CLAT) or IPv6-only with NAT64 (IPv6-Mostly without CLAT).</t>
        <t>For the IPv6-only datacenter case, where servers may be exposed to the IPv4-only Internet using NAT64, it is also advisable to consider the case marked as IPv6-only-DC in <xref target="scn_combinations"/>.</t>
        <t>The other combinations are unlikely to exhibit additional problems for client-server-based applications and therefore are marked as extended in <xref target="scn_combinations"/>.
For peer-to-peer applications and applications with complex connection handling like using STUN <xref target="RFC5389"/> or TURN <xref target="RFC5766"/>, skipping these scenarios is strongly discouraged.</t>
        <table anchor="scn_combinations">
          <name>Connectivity scenario combinations to consider</name>
          <thead>
            <tr>
              <th align="left">Client</th>
              <th align="left">Server</th>
              <th align="center">Classification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Dual-Stack</td>
              <td align="left">IPv4-only</td>
              <td align="center">base</td>
            </tr>
            <tr>
              <td align="left">Dual-Stack</td>
              <td align="left">True IPv6-only</td>
              <td align="center">base</td>
            </tr>
            <tr>
              <td align="left">IPv4-only</td>
              <td align="left">Dual-Stack</td>
              <td align="center">base</td>
            </tr>
            <tr>
              <td align="left">IPv6-only with NAT64</td>
              <td align="left">IPv4-only</td>
              <td align="center">base</td>
            </tr>
            <tr>
              <td align="left">True IPv6-only</td>
              <td align="left">Dual-Stack</td>
              <td align="center">base</td>
            </tr>
            <tr>
              <td align="left">IPv4-only</td>
              <td align="left">IPv6-only with NAT64</td>
              <td align="center">IPv6-only-DC</td>
            </tr>
            <tr>
              <td align="left">Dual-Stack</td>
              <td align="left">Dual-Stack</td>
              <td align="center">extended</td>
            </tr>
            <tr>
              <td align="left">IPv4-only</td>
              <td align="left">IPv4-only</td>
              <td align="center">extended</td>
            </tr>
            <tr>
              <td align="left">IPv6-only with NAT64</td>
              <td align="left">True IPv6-only</td>
              <td align="center">extended</td>
            </tr>
            <tr>
              <td align="left">True IPv6-only</td>
              <td align="left">True IPv6-only</td>
              <td align="center">extended</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="intermediaries">
        <name>Testing with Intermediaries (e.g., Proxies)</name>
        <t>Many application protocols support communicating across intermediates, most commonly HTTP, HTTP-Connect, SOCKS, or MASQ proxies.
Peer-to-peer applications often support TURN <xref target="RFC5766"/> as an intermediary to traverse NAT and provide connectivity between IPv4-only and IPv6-only hosts.
When testing connectivity scenarios for an application, additional test cases including a proxy are recommended;
As a proxy can convert between address families, all combinations shown in <xref target="scn_proxy"/>,
consisting of base scenarios towards the proxy and (assuming the same scenarios on both sides of the proxy) the respective base scenarios from the proxy to the server,
should be considered for testing.</t>
        <table anchor="scn_proxy">
          <name>Base scenario combinations including a proxy to consider for IPv6 testing</name>
          <thead>
            <tr>
              <th align="left">Client</th>
              <th align="left">Proxy</th>
              <th align="center">Server</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Dual-Stack</td>
              <td align="left">IPv4-only</td>
              <td align="center">Dual-Stack</td>
            </tr>
            <tr>
              <td align="left">Dual-Stack</td>
              <td align="left">True IPv6-only</td>
              <td align="center">Dual-Stack</td>
            </tr>
            <tr>
              <td align="left">IPv4-only</td>
              <td align="left">Dual-Stack</td>
              <td align="center">IPv4-only</td>
            </tr>
            <tr>
              <td align="left">IPv4-only</td>
              <td align="left">Dual-Stack</td>
              <td align="center">True IPv6-only</td>
            </tr>
            <tr>
              <td align="left">IPv6-only with NAT64</td>
              <td align="left">IPv4-only</td>
              <td align="center">Dual-Stack</td>
            </tr>
            <tr>
              <td align="left">True IPv6-only</td>
              <td align="left">Dual-Stack</td>
              <td align="center">IPv4-only</td>
            </tr>
            <tr>
              <td align="left">True IPv6-only</td>
              <td align="left">Dual-Stack</td>
              <td align="center">True IPv6-only</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="testing-with-partially-broken-connectivity">
        <name>Testing with Partially Broken Connectivity</name>
        <t>In Dual-Stack deployments, situations may arise where communication is partially broken for one or more address families:
From the Communication endpoints that are expected to be reachable using both address families,
some may only be reachable by one address family, while others may only be reachable by the other.
Testing applications against these scenarios can become a key enabler for users' acceptance of IPv6,
especially during a transition phase where partially broken connectivity is expected more frequently.
This section provides a brief overview of several common scenarios.</t>
        <section anchor="missing-dns-records">
          <name>Missing DNS Records</name>
          <t>While a server endpoint is intended to support dual-stack connectivity,
the A or AAAA DNS records for the endpoint may be missing, e.g, due to misconfiguration or broken tooling,
or does not reach the client endpoint, e.g., because it got filtered out by a middle box or local resolver.</t>
          <t>While deployment and integration testing should try to test for this kind of broken connectivity,
this scenario is usually indistinguishable from an IPv4-only or an IPv6-only server endpoint,
and therefore already addressed by testing the base scenarios above.</t>
        </section>
        <section anchor="partial-blackholing-mtu-and-fragmentation-issues">
          <name>Partial Blackholing, MTU, and Fragmentation Issues</name>
          <t>When multiple address families are available, network packets may traverse different paths depending on the address family.
Even when the same path is traversed, the path can exhibit distinct behaviors, e.g., dropping all or particular packets, especially in the presence of middle-boxes.
In some cases, connectivity issues may only become apparent late in the communication process, for example, after a successful TCP handshake but before a TLS handshake succeeds.
In such scenarios, clients restricted to a single address family—such as True IPv6-only clients—may experience complete loss of connectivity in these scenarios,
while dual-stack clients often mask such failures by automatically falling back to another address family.</t>
          <t>In addition to partial blackholing, MTU issues may only arise on one address family or behave differently with respect to
MTU available, dropping of fragmented packets, ICMP messages, and due to on-path fragmentation in IPv4.</t>
          <t>It is advisable to test for partial blackholing and MTU issues during deployment and integration testing by testing with IPv4-only and True IPv6-only clients to detect such blackholes.
In case these issues can occur outside the testers' circle of control, it is advisable to simulate this type of failure and ensure that the application's behavior supports the detection and analysis of these errors.</t>
        </section>
      </section>
      <section anchor="testing-lifecycle-function-considerations">
        <name>Testing Lifecycle Function Considerations</name>
        <t>To cover the whole lifecycle of an application including installation, user interface,
management, and update, it is recommended to test that the lifecycle functions defined in <xref target="lifecycle-functions"/> are operational within the connectivity scenarios defined in <xref target="scn_combinations"/>.</t>
        <t>In particular keep the following considerations in mind:</t>
        <ul spacing="normal">
          <li>
            <t>Installation: Installation may require communications with remote first-party services (e.g., activation/license server)
or remote third-party services (e.g., package repositories). In these scenarios, the installer acts as
the client, and the remote service acts as the server. In cases of remote third-party services, testing
all server scenarios in <xref target="scn_combinations"/> may not be feasible, and impact the client scenarios that
can be supported. For example, if a third-party service is IPv4-only, then supporting a True IPv6-only
client is not feasible.</t>
          </li>
          <li>
            <t>User Interface: User interfaces can be incredibly complex with numerous contexts, views, API endpoints,
CLI commands, etc. When testing non-web-based user interfaces, it is recommended to focus on components
of the interface that involve communications with remote services, and those that handle network configuration parameters.
For example, a network configuration interface may only accept IPv4 address literals for certain parameters.
For testing web-based user interfaces, see <xref target="web-app-considerations"/>.</t>
          </li>
          <li>
            <t>Management: Depending on the application, management functions may be provided via the user interface.
However, the application may have additional management functions (e.g., SNMP, syslog, etc.) that should be tested.</t>
          </li>
          <li>
            <t>Update: Depending on the application, update functions may be exercised during installation. However, the application
may have additional update functions (e.g., automatic updates, manual update mechanisms, etc.) that should be tested.</t>
          </li>
        </ul>
      </section>
      <section anchor="testing-complex-cloud-applications-and-applying-test-cases">
        <name>Testing Complex Cloud Applications and Applying Test Cases</name>
        <t>When testing complex applications, especially cloud applications, they typically involve countless data flows.
For some of these, the application may be considered as server, while being a client in others.
Therefore, test cases need to cover each data flow in all relevant scenarios.</t>
        <t>As functional and integration tests are often defined as end-to-end test cases,
they often involve several components, e.g., micro-services, load-balancers, application gateways, logging, authentication, and authorization services, which use IP-based protocols between the components.
Therefore, an end-to-end test case breaks down to a series of flows between components, and for each of these flows,
we need to determine whether we need to apply the connectivity scenarios from <xref target="scn_combinations"/> to it,
of whether the connectivity scenarios are only controlled by the deployment of the application.</t>
        <t>For external flows, i.e., flows outside the developers' control, usually all base scenarios from <xref target="scenarios"/> need to be accounted for.
If one side of the flow is under administrative control, the number of scenario combinations can still be limited:
For example, a cloud software provider choosing to deploy Dual-Stack endpoints can skip all non-Dual-Stack cases on the respective side of the communication.
For internal flows, the relevant scenarios only depend on the applications' architecture, and only scenarios planned in the deployment need to be considered.
 From a networking perspective, flows between components are typically independent. There is no need to run the Cartesian product of scenarios x communications as long as all relevant scenarios for a given flow are tested.</t>
        <t>In addition to the data flows, an implementation may include metadata about the data flow when communicating with backend systems, e.g., for logging or authorization purposes.
While the flows towards these backend systems themselves may be safe to ignore as outlined above,
the functional correctness of the backend systems for all kinds of IP address need to be verified as part of the test series.
Ignoring IP addresses as data in the testing may result in malfunctions, like always denying access over IPv6, or security issues, like not logging access from IPv6 clients.</t>
      </section>
      <section anchor="web-app-considerations">
        <name>Special considerations for Web-based Applications</name>
        <t>Web-based applications usually load resources from multiple parties, including CDNs and analytic tools, involving data flows to all these parties.
When facing the requirement to support True IPv6-only users, being unable to load some resources due to missing/defective IPv6 support at the respective parties can have any effect from missing analytics insights or ad revenue to severe functional defects rendering the application unusable.
When testing such applications, it is not sufficient to only focus on the initial/main interactions,
but it is necessary to consider all resources and parties providing them.
As Web browsers load these resources dynamically and third-party resources may themselves may request resources from more parties, this kind of testing usually requires an instrumented Web browser,
e.g., using <xref target="Selenium"/>.</t>
      </section>
    </section>
    <section anchor="testing-strategies">
      <name>Testing Strategies</name>
      <t>Naïve IPv6 testing, based on end-to-end functional tests as outlined in <xref target="objectives"/>, would require running a set of functional tests in various connectivity scenarios.
In certain environments, setting up test cases for all scenarios can become forbiddingly expensive,
especially for complex cloud applications, application platforms, or when dealing with corporate IT environments.
While in today's environment getting Dual-Stack connectivity is possible in most cases,</t>
      <t>In this section, we give recommendations how to set up scenarios defined in <xref target="scenarios"/> and
present strategies to meet the relevant testing objective by modifying the client or using Dual-Stack clients and servers to conclude the results for other scenario combinations,
e.g., by tracing whether the right address family is used.</t>
      <section anchor="true-ipv6-only-clients">
        <name>True IPv6-only Clients</name>
        <t>This is the most natural way to test whether True IPv6-only clients behave correctly.
The client device is either placed in a network without IPv4 connectivity or the IPv4 stack is disabled on the device while it is in a Dual-Stack network.
While most desktop operating systems allow disabling IPv4, mobile operating systems, such as Android and iOS, do not.
For mobiles operating systems, a True IPv6-only environment is needed.</t>
        <t>In both cases, it has to be ensured that there is no way to access IPv4-only resources.
In particular, fallback to NAT64 must be prevented by disabling CLAT <xref target="CLAT"/>,
making sure DNS resolution does not perform DNS64 address synthesis <xref target="RFC6147"/>
and blocking the well-known NAT64 prefix <xref target="RFC6052"/> for these clients.
In addition, VPN services including privacy services like <xref target="iCloud-Private-Relay"/> need to be disabled as they can provide connectivity towards the IPv4 Internet.</t>
        <t>A note on the applicability of disabling IPv4:
Before disabling IPv4 make sure the environment supports IPv6-only operation.
Many desktop virtualization environments become unusable because IPv4 is needed to access and manage the virtual machines.
Some corporate environments may render the machines unusable as they require IPv4 connectivity for sign-on.</t>
      </section>
      <section anchor="ipv6-only-servers">
        <name>IPv6-only Servers</name>
        <t>IPv6-only servers are a good option when setting up a True IPv6-only client environment is infeasible and
clients are know to only contact a single server or a small number of servers under the testers' control.
Even if setting up a True IPv6-only server environment is infeasible,
most testing is also achievable by setting up a dedicated DNS name only containing an AAAA record pointing to the IPv6 addresses of an otherwise Dual-Stack server.</t>
      </section>
      <section anchor="client-based-tracing">
        <name>Client-based tracing</name>
        <t>If we can't limit the available address families, we can still trace and verify whether the address family desired for the scenario is used.</t>
        <t>Client-based tracing is especially useful when Dual-Stack servers and clients are available and a conclusion for the True IPv6-only case is desired.
By using the clients' logging/tracing/debugging functionality, the tester can verify that the actual data flows happen over IPv6, which is preferred by most network abstractions. If the client allows changing the preference between IPv6 and IPv4, IPv4-only testing is also possible.</t>
        <t>The most relevant case for this strategy is testing Web applications.
By examining the Web browsers' performance log or using a plugin like <xref target="IPvFoo"/> that visualizes connectivity information, the tester can determine whether all resources are available using IPv6.</t>
      </section>
      <section anchor="server-based-tracing">
        <name>Server-based tracing</name>
        <t>Analogue to tracing on the client side, it is also possible to look at the protocols used on the server side.
While this is functionally equivalent for protocols where clients only communicate to a single server,
this approach is not feasible for Web-based applications where a client usually needs flows towards many servers, where client or network based tracing are the only feasible alternatives to testing with an True IPv6-only client.</t>
      </section>
      <section anchor="network-based-tracing">
        <name>Network-based tracing</name>
        <t>If the communication pattern of an application is known well enough, a packet tracer as <xref target="Wireshark"/> allows to verify that an application uses IPv6 for all flows in a Dual-Stack environment.
If this can be verified, failures in True IPv6-only environments are unlikely.</t>
        <t>While this is the least invasive method of testing True IPv6 scenarios in a Dual-Stack setup, it is the most error-prone as it requires the tester to fully understand the network flows of the application and requires the skills to interpret the output of a packet tracer.</t>
      </section>
    </section>
    <section anchor="failures">
      <name>Common Sources of IPv6 Related Failures and Misbehavior</name>
      <t>In this section, we discuss special failure modes that can cause unexpected application behavior that is hard to debug.
While some of these cases can be automatically mitigated, especially through generalizing the concept of Happy Eyeballs <xref target="RFC8305"/>, others may not.
In cases that developers choose not to mitigate erroneous application behavior, users and operators should be supported in the resolution by exposing specific and detailed error or debug messages.</t>
      <section anchor="enable-ipv6-feature-gates">
        <name>Enable IPv6 Feature Gates</name>
        <t>Some applications completely ignore IPv6 unless explicitly configured to enable IPv6.
This adds another class of user or configuration errors, like deploying an application without enabled IPv6 support in an IPv6-only environment.
As these feature gates are often buried deeply in the documentation and are often vendor, product, or component specific, every component needs to be checked to determine whether IPv6 support needs extra configuration.</t>
      </section>
      <section anchor="destination-address-selection-preference-and-address-filtering">
        <name>Destination Address Selection Preference and Address Filtering</name>
        <t>The destination address selection algorithm in <xref target="RFC6724"/> filters unavailable address families (Rule 1) and de-prioritizes non-matching address families (Rule 2)
and clearly prioritizes IPv6 GUA addresses over IPv4 addresses.
While most operating systems and some alternative resolver libraries, such as <xref target="C-ARES"/>, implement <xref target="RFC6724"/> or its predecessor <xref target="RFC3484"/> correctly,
there are a number of notable and widely used implementations that implement something else, causing anything from unexpected behavior to hard-to-debug errors.</t>
        <ul spacing="normal">
          <li>
            <t>Most JAVA runtimes do the opposite and prefer IPv4 destinations over IPv6.
To prefer IPv6 addresses over IPv4, one needs to set the system property <tt>java.net.preferIPv6Addresses=true</tt>.</t>
          </li>
          <li>
            <t>Some applications only use the first address candidate from the <tt>getaddrinfo()</tt> and fail if the connection attempt to that one fails.</t>
          </li>
          <li>
            <t>Applications composed of services built on different programming languages or runtimes may behave inconsistently with regard to choosing destination addresses.</t>
          </li>
          <li>
            <t>NGINX has its own user DNS resolver without address filtering; thus, adding a <em>AAAA</em> record to a backend can render that backend unusable.
After having resolved a <em>AAAA</em> record, it is trying to open an IPv6 socket, even when the IPv6 stack is disabled.
As socket creation failure is not expected, an internal server error is sent back to the client.</t>
          </li>
          <li>
            <t>Some resolvers ignore address families for which no default route exists or where the default-route is pointing to an unsupported/ignored device.
This becomes cumbersome especially in split-VPN use cases, e.g. when trying to contact IPv6-only endpoints via the VPN while having IPv4-only Internet connectivity.</t>
          </li>
        </ul>
      </section>
      <section anchor="input-validation-and-output-rendering">
        <name>Input Validation and Output Rendering</name>
        <t>While most libraries and application frameworks have decent IPv6 support,
there often is still application logic checking whether user input is a valid IPv4 address or rendering output under the assumption that an address is always an IPv4 address,
preventing to take advantage of the IPv6 support by the underlying components.</t>
      </section>
      <section anchor="misbehaving-middle-boxes">
        <name>Misbehaving Middle-Boxes</name>
        <t>In practice, many IPv6-related regressions uncovered during testing turn out to be caused by hidden components outside of the application developers' control.
Middle-Boxes, e.g., firewalls, virus scanners, and intrusion detection systems, can break end-to-end tests in surprising ways, like terminating TLS sessions over IPv6 with certain extensions in the <em>TLS client hello</em> while correctly passing the same flow over IPv4.</t>
      </section>
    </section>
    <section anchor="deployment-considerations">
      <name>Deployment Considerations</name>
      <t>Lab testing of applications for IPv6 compliance should always have the next step in mind: Deploying the application and providing the users with decent IPv6 support.
Therefore, end-to-end tests, especially of cloud applications, should also keep deployment steps, prerequisites, and risks in mind.
This section discusses some issues to keep in mind when planning and executing IPv6 testing.</t>
      <section anchor="operational-scope-software-lifecycle">
        <name>Operational Scope &amp; Software Lifecycle</name>
        <t>Depending on the application and deployment model, the timing of deploying IPv6 support may be in control of the users' organization, the developers' organization, or neither of them.
Based on this setup, certain combinations of IPv6-enabled clients, servers, and infrastructure in between may or may not be excluded from consideration.
Therefore, it may be necessary to add test cases for old software versions with known and already fixed bugs against newly IPv6-enabled servers.
If regressions and service disruptions cannot be ruled out by the tests, a per-user or per-customer tenant opt-in/opt-out/roll-back scheme for the IPv6 enablement should be considered.</t>
      </section>
      <section anchor="allow-deny-lists">
        <name>Allow &amp; Deny Lists</name>
        <t>Application-level IP allow and deny lists pose a special challenge for deploying IPv6 in a cloud application.
As users may already have IPv6 connectivity, adding IPv6 support to the server may cause clients to use IPv6 immediately.
Having no allow list entry for the users' IPv6 addresses results in service disruptions.
Happy Eyeballs as defined in <xref target="RFC8305"/> does not solve the problem as allow list checks usually take place after the transport connection has already been established.</t>
        <t>To mitigate allow or deny lists causing service disruptions when enabling IPv6, support to include IPv6 addresses in allow and deny lists needs to be enabled way before rolling out IPv6 on the transport and communicated towards the users.
To further limit the probability of service disruptions, generalizing Happy Eyeballs to re-try using IPv4 after certain error conditions should be evaluated.</t>
      </section>
      <section anchor="component-and-service-reuse">
        <name>Component and Service Reuse</name>
        <t>If components or cloud services can be reused in other products, special care needs to be taken when planning IPv6 deployment.
The interaction contracts between the reusing parties and the service need to be checked
whether IPv6 enablement of the services also affects the flows of these.
Additional end-to-end tests, including the reusing parties, are recommended.
This is often a recursive process…</t>
      </section>
      <section anchor="ownership-of-software-components">
        <name>Ownership of Software Components</name>
        <t>Sometimes IPv6 enablement requires touching components that are not actively maintained anymore.
Be prepared for this and plan extra time or budget for updating or replacing these components.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The document itself has no specific security implications; thus, some of the issues discussed in <xref target="failures"/> have.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no 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="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="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="RFC3484">
          <front>
            <title>Default Address Selection for Internet Protocol version 6 (IPv6)</title>
            <author fullname="R. Draves" initials="R." surname="Draves"/>
            <date month="February" year="2003"/>
            <abstract>
              <t>This document describes two algorithms, for source address selection and 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. All IPv6 nodes, including both hosts and routers, must implement default address selection as defined in this specification. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3484"/>
          <seriesInfo name="DOI" value="10.17487/RFC3484"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.draft-ietf-v6ops-rfc7084bis">
          <front>
            <title>Basic Requirements for IPv6 Customer Edge Routers</title>
            <author fullname="Gábor Lencse" initials="G." surname="Lencse">
              <organization>Széchenyi István University</organization>
            </author>
            <author fullname="Jordi Palet Martinez" initials="J. P." surname="Martinez">
              <organization>The IPv6 Company</organization>
            </author>
            <author fullname="Ben Patton" initials="B." surname="Patton">
              <organization>University of New Hampshire, Interoperability Lab (UNH-IOL)</organization>
            </author>
            <author fullname="Timothy Winters" initials="T." surname="Winters">
              <organization>QA Cafe</organization>
            </author>
            <date day="21" month="July" year="2025"/>
            <abstract>
              <t>   This document specifies requirements for an IPv6 Customer Edge (CE)
   router.  Specifically, the current version of this document focuses
   on the basic provisioning of an IPv6 CE router and the provisioning
   of IPv6 hosts attached to it.  The document obsoletes RFC 7084.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-v6ops-rfc7084bis-03"/>
        </reference>
        <reference anchor="I-D.draft-ietf-v6ops-6mops">
          <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="26" month="August" year="2025"/>
            <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 (network segment, VLAN, SSID etc).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-v6ops-6mops-02"/>
        </reference>
        <reference anchor="CLAT">
          <front>
            <title>464XLAT Customer-side Translator (CLAT): Node Recommendations</title>
            <author fullname="Lorenzo Colitti" initials="L." surname="Colitti">
              <organization>Google</organization>
            </author>
            <author fullname="Jen Linkova" initials="J." surname="Linkova">
              <organization>Google</organization>
            </author>
            <author fullname="Tommy Jensen" initials="T." surname="Jensen">
              <organization>Cloudflare</organization>
            </author>
            <date day="7" month="October" year="2025"/>
            <abstract>
              <t>   464XLAT [RFC6877] defines an architecture for providing IPv4
   connectivity across an IPv6-only network.  The solution contains two
   key elements: provider-side translator (PLAT) and customer-side
   translator (CLAT).  This document complements [RFC6877] and updates
   Requirements for IPv6 Customer Edge Routers to Support IPv4-as-
   a-Service [RFC8585] by providing recommendations for the node
   developers on enabling and disabling CLAT functions.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-v6ops-claton-09"/>
        </reference>
        <reference anchor="RFC8504">
          <front>
            <title>IPv6 Node Requirements</title>
            <author fullname="T. Chown" initials="T." surname="Chown"/>
            <author fullname="J. Loughney" initials="J." surname="Loughney"/>
            <author fullname="T. Winters" initials="T." surname="Winters"/>
            <date month="January" year="2019"/>
            <abstract>
              <t>This document defines requirements for IPv6 nodes. It is expected that IPv6 will be deployed in a wide range of devices and situations. Specifying the requirements for IPv6 nodes allows IPv6 to function well and interoperate in a large number of situations and deployments.</t>
              <t>This document obsoletes RFC 6434, and in turn RFC 4294.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="220"/>
          <seriesInfo name="RFC" value="8504"/>
          <seriesInfo name="DOI" value="10.17487/RFC8504"/>
        </reference>
        <reference anchor="M-21-07" target="https://www.whitehouse.gov/wp-content/uploads/2020/11/M-21-07.pdf">
          <front>
            <title>M-21-07 – Completing the Transition to Internet Protocol Version 6 (IPv6)</title>
            <author>
              <organization/>
            </author>
            <date year="2020" month="November" day="19"/>
          </front>
          <seriesInfo name="United States of America Office of Management and Budget" value="Memorandum for Heads of Executive Departments and Agencies"/>
        </reference>
        <reference anchor="NIST.SP.500-267Ar1" target="https://nvlpubs.nist.gov/nistpubs/specialpublications/NIST.SP.500-267Ar1.pdf">
          <front>
            <title>NIST Special Publication 500-267 Revision 1 - NIST IPv6 Profile</title>
            <author>
              <organization/>
            </author>
            <date year="2020" month="November" day="23"/>
          </front>
        </reference>
        <reference anchor="iCloud-Private-Relay" target="https://developer.apple.com/videos/play/wwdc2021/10096/">
          <front>
            <title>Apple iCLoud Private Relay (WWDC2021)</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IPvFoo" target="https://github.com/pmarks-net/ipvfoo">
          <front>
            <title>IPvFoo - a Chrome/Firefox extension that adds an icon to indicate whether the current page was fetched using IPv4 or IPv6.</title>
            <author initials="P." surname="Marks" fullname="Paul Marks">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Wireshark" target="https://www.wireshark.org/">
          <front>
            <title>Wireshark packet tracer</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="C-ARES" target="https://c-ares.org/">
          <front>
            <title>C-ARES - a modern DNS (stub) resolver library, written in C</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Selenium" target="https://www.selenium.dev/">
          <front>
            <title>Selenium WebDriver</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC6877">
          <front>
            <title>464XLAT: Combination of Stateful and Stateless Translation</title>
            <author fullname="M. Mawatari" initials="M." surname="Mawatari"/>
            <author fullname="M. Kawashima" initials="M." surname="Kawashima"/>
            <author fullname="C. Byrne" initials="C." surname="Byrne"/>
            <date month="April" year="2013"/>
            <abstract>
              <t>This document describes an architecture (464XLAT) for providing limited IPv4 connectivity across an IPv6-only network by combining existing and well-known stateful protocol translation (as described in RFC 6146) in the core and stateless protocol translation (as described in RFC 6145) at the edge. 464XLAT is a simple and scalable technique to quickly deploy limited IPv4 access service to IPv6-only edge networks without encapsulation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6877"/>
          <seriesInfo name="DOI" value="10.17487/RFC6877"/>
        </reference>
        <reference anchor="RFC5389">
          <front>
            <title>Session Traversal Utilities for NAT (STUN)</title>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <author fullname="R. Mahy" initials="R." surname="Mahy"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <author fullname="D. Wing" initials="D." surname="Wing"/>
            <date month="October" year="2008"/>
            <abstract>
              <t>Session Traversal Utilities for NAT (STUN) is a protocol that serves as a tool for other protocols in dealing with Network Address Translator (NAT) traversal. It can be used by an endpoint to determine the IP address and port allocated to it by a NAT. It can also be used to check connectivity between two endpoints, and as a keep-alive protocol to maintain NAT bindings. STUN works with many existing NATs, and does not require any special behavior from them.</t>
              <t>STUN is not a NAT traversal solution by itself. Rather, it is a tool to be used in the context of a NAT traversal solution. This is an important change from the previous version of this specification (RFC 3489), which presented STUN as a complete solution.</t>
              <t>This document obsoletes RFC 3489. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5389"/>
          <seriesInfo name="DOI" value="10.17487/RFC5389"/>
        </reference>
        <reference anchor="RFC5766">
          <front>
            <title>Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN)</title>
            <author fullname="R. Mahy" initials="R." surname="Mahy"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <date month="April" year="2010"/>
            <abstract>
              <t>If a host is located behind a NAT, then in certain situations it can be impossible for that host to communicate directly with other hosts (peers). In these situations, it is necessary for the host to use the services of an intermediate node that acts as a communication relay. This specification defines a protocol, called TURN (Traversal Using Relays around NAT), that allows the host to control the operation of the relay and to exchange packets with its peers using the relay. TURN differs from some other relay control protocols in that it allows a client to communicate with multiple peers using a single relay address. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5766"/>
          <seriesInfo name="DOI" value="10.17487/RFC5766"/>
        </reference>
        <reference anchor="RFC6147">
          <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="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="RFC8305">
          <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>
      </references>
    </references>
    <?line 451?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to
Holger Füßler,
and
Michael Richardson
for the discussions, the input, and all contribution.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAEze8GgAA8V9y3YcR3bgPr8iDJ1jke2qAkFRoBp2uwWCpAibBGECbNpH
R0edlRVVlY2sjHRGJsAymuf0P3j249Vs5wdmNf0n/SVzX/HKyqKkWbi1EFFZ
GRE3btz3I2o6nWZd2VX6RB1ca9uV9UqdNk1VFnlXmtp+qc4vb4/VVd80pu0O
snw+b/UtvFw2t8fTvGmmHY86yBamqPMNTLRo82U37UptdTW9PTaNnQ7fnj46
ymAFvTLt9kTNiybLyqY9UV3b2+7xo0e/fvQ4y1udn6jvdK3bvMruTHuzak3f
nCiaUn2ABwjtd/gwu9FbeGNxos7rTre17qbPEYoss11eL37MK1MDZFttM7vJ
2+7Hf+8NgHKiapM15Yn6vjPFRFnYYquXFv7abvCPH7Is77u1aU8yNc0U/Lfs
q4p3ebkuq7Jp1NVMXdNW6XvTrvK6/A9C3om6Or1UVy/oC73Jy+pENTzqW8bO
DACduGczfvatzZtZYTa7K/6TrtXrsr4xt/nIWt8Zs6p0vNayb9vt0VffrvAj
TjnhR9+u6NXxRf55W2n1ttdVpbtOj6zzvi5vdWvLbqvMUl3oO/Uq3zR2Xbaa
kW8aOLA5bAneeJ3PLc3h6Ob9xavp+dvXMZg3xq32bWmqWV+vZ3rR70L2DLZ/
mXedqf87oJo3tFQCUlabdgML3uoToNd6GT4pdT59PmPCL3W3FLJvl8XTR988
mZd27yvHG/g/fnv2+vT6ZPydosp51+9enn3z9aMn+Pqb6eOj6aOnJwRzl7cr
3Z2oddfBZIeHd3d3s7t12em16a2erczt4V0zLQwgou4O+6Yy+cIePn70+NHh
0dGhTDVrFkuejeWBPFZ/+dN/qjOzaeCIkN+6tVbXbV4DrgHzqjOe5dRla4CP
TKV+h0cBXx6rByg+HtK0VrdA4Ig2BlrhoXV6oa46kAQWz+10A+8UuXq7XJaF
xidv8jpf6Q2ArYCP1bN+QRt9ozcGYFj0GwWnoF5p2A++/uKjLno8EvVcN8Dn
ONDSyNOVrgtYn5ZewIInCvc/PTqaHv0aHl6cX13Pri5nXz96NH18/PS0PRpH
bX1bNf3czurSdoRY/AOfHNpGF2WO33rpebg76xDL+Ia64qHqMoxVMkS907cl
IfNITfltksiA62Up/J5u5/FX8LA8q0y/mF625S18OX2nq3w7vqGFvtUVcscM
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
yY15CH9ghpTh/wNm5lS/gXgAAA==

-->

</rfc>
