<?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.18 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bucksch-autoconfig-04" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.22.0 -->
  <front>
    <title abbrev="autoconfig">Mail Autoconfig</title>
    <seriesInfo name="Internet-Draft" value="draft-bucksch-autoconfig-04"/>
    <author fullname="Ben Bucksch">
      <organization>Beonex</organization>
      <address>
        <email>ben.bucksch@beonex.com</email>
      </address>
    </author>
    <date year="2024" month="July" day="24"/>
    <keyword>config</keyword>
    <keyword>autoconfig</keyword>
    <keyword>autodiscover</keyword>
    <keyword>mail</keyword>
    <keyword>IMAP</keyword>
    <keyword>POP3</keyword>
    <keyword>SMTP</keyword>
    <keyword>JMAP</keyword>
    <abstract>
      <?line 42?>

<t>Set up a mail account with only email address and password.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://benbucksch.github.io/autoconfig-spec/draft-autoconfig-1.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-bucksch-autoconfig/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/benbucksch/autoconfig-spec"/>.</t>
    </note>
  </front>
  <middle>
    <?line 46?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This protocol allows users to set up their existing email account in a new mail client application,
by entering only their name, email address, and password.
The mail application, by means of mail autoconfig specified here, will determine all the other
parameters that are required, including IMAP or POP3 hostname, TLS configuration,
form of username, authentication method, and other settings, and likewise for SMTP.
Contact sync and calendar, file sharing and other services can also be set up automatically.</t>
      <t>The protocol works by first determining the domain from the email address, and the querying
well-known URLs at the email provider, which return the configuration parameters in computer-readable form. Failing that, various fallback sources can be applied, like a common database of
configurations for large email providers who do not directly support this protocol,
or other mechanisms to determine the configuration.</t>
    </section>
    <section anchor="implementations">
      <name>Implementations</name>
      <t>This protocol is in production use since 15 years by major email clients, and the
config database (used as fallback) contains configurations for over 50% of all email accounts.</t>
      <t>Currently, this protocol or parts of it has been implemented by:</t>
      <ul spacing="normal">
        <li>
          <t><eref target="https://thunderbird.net">Thunderbird</eref></t>
        </li>
        <li>
          <t><eref target="https://projects.gnome.org/evolution/">Evolution</eref></t>
        </li>
        <li>
          <t><eref target="https://userbase.kde.org/KMail">KMail</eref></t>
        </li>
        <li>
          <t><eref target="https://www.kontact.org">Kontact</eref></t>
        </li>
        <li>
          <t><eref target="https://k9mail.app">K9 Mail</eref></t>
        </li>
        <li>
          <t><eref target="https://email.faircode.eu">FairEmail</eref></t>
        </li>
        <li>
          <t><eref target="https://apps.nextcloud.com/apps/mail">NextCloud email</eref></t>
        </li>
        <li>
          <t><eref target="https://delta.chat/">Delta Chat</eref></t>
        </li>
      </ul>
      <t>and likely other mail clients.</t>
      <t>The purpose of this paper is to document and specify what is deployed in the wild. A later version 2 of the protocol might be based on JSON.</t>
      <t>Additionally, there are known problems with OAuth2 in combination with mail clients, which would need to be solved by another specification.</t>
    </section>
    <section anchor="data-format">
      <name>Data format</name>
      <t>Whether the ISP or a common central database returns the configuration, the resulting
document has the following data format.</t>
      <t>The MIME type is <tt>text/xml</tt> or <tt>text/xml+autoconfig</tt>.</t>
      <section anchor="sample-config-file">
        <name>Sample config file</name>
        <artwork><![CDATA[
<?xml version="1.0"?>
<clientConfig version="1.2">
    <emailProvider id="example.com">
      <domain>example.com</domain>
      <domain>example.net</domain>

      <displayName>Google Mail</displayName>
      <displayShortName>GMail</displayShortName>

      <!-- type=
          "imap": IMAP
          "pop3": POP3
          "jmap": JMAP
          "ews": Microsoft Exchange Web Services
          "activesync": Microsoft ActiveSync
          -->
      <incomingServer type="imap">
        <hostname>imap.example.com</hostname>
        <port>993</port>
          <!-- "plain": no encryption
                "SSL": SSL 3 or TLS 1 on SSL-specific port
                "STARTTLS": on normal plain port and mandatory upgrade to TLS via STARTTLS
                -->
        <socketType>SSL</socketType>
        <username>%EMAILADDRESS%</username>
            <!-- Authentication methods:
                "password-cleartext",
                          Send password in the clear
                          (dangerous, if SSL isn't used either).
                          AUTH PLAIN, LOGIN or protocol-native login.
                "password-encrypted",
                          A secure encrypted password mechanism.
                          Can be CRAM-MD5 or DIGEST-MD5. Not NTLM.
                "NTLM":
                          Use NTLM (or NTLMv2 or successors),
                          the Windows login mechanism.
                "GSSAPI":
                          Use Kerberos / GSSAPI,
                          a single-signon mechanism used for big sites.
                "TLS-client-cert":
                          On the SSL/TLS layer, the server requests a client certificate and the client sends one (possibly after letting the user select/confirm one), if available.
                "OAuth2":
                          mAuth. Should be added only as second alternative.
                "none":
                          No authentication
                -->
        <authentication>password-cleartext</authentication>
        <password>optional: the user's password</password>
      </incomingServer>

      <!-- You can have multiple incoming servers,
        and even multiple IMAP server configs.
        The first config is the preferred one, but the user or
        or client can choose the alternative configs. -->
      <incomingServer type="pop3">
        <hostname>pop.example.com</hostname>
        <port>995</port>
        <socketType>SSL</socketType>
        <username>%EMAILADDRESS%</username>
        <authentication>password-cleartext</authentication>
        <pop3>
            <!-- optional -->
            <leaveMessagesOnServer>true</leaveMessagesOnServer>
            <daysToLeaveMessagesOnServer>14</daysToLeaveMessagesOnServer>
        </pop3>
      </incomingServer>

      <!-- Needed only for IMAP or POP3 -->
      <outgoingServer type="smtp">
        <hostname>smtp.googlemail.com</hostname>
        <port>587</port>
        <socketType>STARTTLS</socketType>
        <username>%EMAILADDRESS%</username> <!-- if smtp-auth -->
            <!-- smtp-auth (RFC 2554, 4954) or other auth mechanism.
                For values, see incoming.
                Additional options here:
                "client-IP-address":
                          The server recognizes this user based on the IP address.
                          No authentication needed, the server will require no username nor password.
            -->
        <authentication>password-cleartext</authentication>
        <password>optional: the user's password</password>
      </outgoingServer>

      <incomingServer type="jmap">
        <url>https://jmap.example.com</url>
        <username>%EMAILADDRESS%</username>
        <authentication>http-basic</authentication>
      </incomingServer>

      <incomingServer type="ews">
        <url>https://mail.example.com/EWS/Exchange.asmx</url>
        <username>%EMAILADDRESS%</username>
        <authentication>http-basic</authentication>
      </incomingServer>

      <incomingServer type="activesync">
        <url>https://mail.example.com/Microsoft-Server-ActiveSync</url>
        <username>%EMAILADDRESS%</username>
        <authentication>OAuth2</authentication>
      </incomingServer>

      <!-- A page where the ISP describes the configuration.
          This is purely informational and currently mainly for
          maintenance of the files and not used by the client at all.
          Note that we do not necessarily use exactly the config suggested
          by the ISP, e.g. when they don't recommend SSL, but it's available,
          we will configure SSL.
          The text content should contains a description in the native
          language of the ISP (customers), and a short English description,
          mostly for us.
      -->
      <documentation url="http://www.example.com/help/mail/">
        <descr lang="en">Configure mail app for IMAP</descr>
        <descr lang="de">Email mit IMAP konfigurieren</descr>
      </documentation>

    </emailProvider>

    <!-- Syncronize the user's address book / contacts. -->
    <addressBook type="carddav">
      <username>%EMAILADDRESS%</username>
        <!-- Authentication methods. See also <incomingServer>.
              "http-basic":
                        Authenticate to the HTTP server using
                        WWW-Authenticate: Basic
              "http-digest":
                        Authenticate to the HTTP server using
                        WWW-Authenticate: Digest
              "OAuth2":
                        mAuth. Uses the same token as for email. <scope> needs to include
                         addressbook/calendar.
              -->
      <authentication>http-basic</authentication>
      <url>https://jmap.example.com/remote.php/dav</url>
    </addressBook>

    <!-- Syncronize the user's calendar. -->
    <calendar type="caldav">
      <username>%EMAILADDRESS%</username>
      <authentication>http-basic</authentication> <!-- see <addressBook> -->
      <url>https://calendar.example.com/remote.php/dav</url>
    </calendar>

    <!-- Upload files, allowing the user to share them.
        This can be used for Thunderbird's FileLink feature,
        or to set up a file sync folder on the user's desktop. -->
    <fileShare type="webdav">
      <username>%EMAILADDRESS%</username>
      <authentication>http-basic</authentication> <!-- see <addressBook> -->
      <url>https://share.example.com/remote.php/dav</url>
    </fileShare>

    <!-- This allows to login in to the webmail service of the provider.
        The URLs are loaded into a standard webbrowser for the user.
        This is optional. -->
    <webMail>
      <!-- Webpage where the user has to log in manually by entering username
          and password himself.
          HTTPS required. -->
      <loginPage url="https://mail.example.com/login/" />

      <!-- Same as loginAutomaticDOM, but the website makes checks that
          the user comes from the login page. So, open the login page
          in the browser, get the page's DOM, fill out name and password
          fields for the user, and trigger the login button.
          The login button might not be an HTML button, just a div, so
          to trigger it, send a click event to it.
          HTTPS is required for the URL. -->
      <loginPageInfo url="https://mail.example.com/login/">
        <!-- What to fill into the usernameField.
            Format is the same as for <username> within <incomingServer>,
            including placeholders. See below for valid placeholders. -->
        <username>%EMAILADDRESS%</username>
        <!-- Allows to find the textfield on the page, to fill it out.
            The id attribute give the DOM ID,
            The name attribute give the DOM name attribute.
            One or both of id and name attributes must exist.
            Try the ID first (e.g. using getElementById()), if existing.
            Otherwise, try finding the element by name.
            Don't treat the IDs given in this XML file as trusted,
            but before using them, verify the format
            (e.g. only characters and digits for IDs).
            If you use powerful functions like jQuery, and the XML returns
            you code in the username ID, and you feed it unchecked to jQuery,
            it may be executed. -->
        <usernameField id="email_field" name="email" />
        <passwordField name="password" />
        <!-- The submit button to trigger the server submit
            after filling in the fields.
            id and name attributes: See <usernameField> -->
        <loginButton id="submit_button" name="login"/>
      </loginPageInfo>
    </webMail>

    <!-- Ask user for custom input,
       and use them as placeholders in the values.
       Optional. -->
    <inputField key="USERNAME" label="Screen name"></inputField>
    <inputField key="GRANDMA" label="Grandma">Elise Bauer</inputField>

    <!-- oAuth2 specced for mail apps,
        e.g. clientID, expiry, and login page
        MUST adhere to mAuth <https://benbucksch.github.io/mauth-spec/draft-mauth.html>
        -->
    <mAuth>
      <authURL>https://login.example.com/common/oauth2/v2.0/authorize</authURL>
      <tokenURL>https://login.example.com/common/oauth2/v2.0/token</tokenURL>
      <issuer>login.example.com</issuer>
      <scope>IMAP POP3 SMTP CalDAV CardDAV WebDAV offline_access</scope>
      <clientID>open</clientID>
      <!-- optional -->
      <clientSecret>give-me-your-pass-word</clientSecret>
    </mAuth>

    <!-- Add this only when users (who already have an account) have to
        do something manually before the account can work with IMAP/POP or SSL.
        Mandatory only if the ISP requires such settings
        before the configs above work.
        Note: Per XML, & (ampersand) needs to be escaped to
        & a m p ; (without spaces). -->
    <enable
      visiturl="https://mail.google.com/mail/?ui=2&amp;shva=1#settings/fwdandpop">
      <instruction>Check 'Enable IMAP and POP' in Google settings page</instruction>
      <instruction lang="de">Schalten Sie 'IMAP und POP aktivieren' auf der Google Einstellungs-Seite an</instruction>
    </enable>

    <clientConfigUpdate url="https://www.example.com/config/mail.xml" />

</clientConfig>
]]></artwork>
      </section>
      <section anchor="formal-definition">
        <name>Formal definition</name>
        <t>TODO Schema for XML</t>
      </section>
      <section anchor="placeholders">
        <name>Placeholders</name>
        <t>The fields for <tt>&lt;username&gt;</tt>, <tt>&lt;hostname&gt;</tt>, <tt>&lt;serverURL&gt;</tt>,
<tt>&lt;displayName&gt;</tt>, <tt>&lt;displayShortName&gt;</tt> (*1) support placeholders.
The config returned by the autoconfig server may contain these placeholders,
which are to be replaced by the client.
The following special strings (or substrings/parts) of the value should be replaced
by the client, after the config was retrieved and before its values are actually
used.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Placeholder</th>
              <th align="left">Replace with</th>
              <th align="left">Example</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>%EMAILADDRESS%</tt></td>
              <td align="left">E-Mail-Address of the user</td>
              <td align="left">
                <tt>fred@example.com</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>%EMAILLOCALPART%</tt></td>
              <td align="left">Part before <tt>@</tt> in the E-Mail-Address</td>
              <td align="left">
                <tt>fred</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>%EMAILDOMAIN%</tt></td>
              <td align="left">Part after <tt>@</tt> in the E-Mail-Address</td>
              <td align="left">
                <tt>example.com</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>%REALNAME%</tt></td>
              <td align="left">Real-world name of the user</td>
              <td align="left">
                <tt>Fred Flintstone</tt></td>
            </tr>
          </tbody>
        </table>
        <t>*1 and possibly <tt>&lt;inputField&gt;</tt> value, <tt>&lt;authURL&gt;</tt>, <tt>&lt;tokenURL&gt;</tt>, <tt>&lt;issuer&gt;</tt></t>
      </section>
    </section>
    <section anchor="config-retrieval-for-mail-clients">
      <name>Config retrieval for mail clients</name>
      <t>The mail client application, when it needs the configuration for a given email address,
will perform several steps to retrieve the configuration from various sources.</t>
      <t>The steps are ordered by priority. They may all be requested at the same time, but a higher priorty
result that is available <bcp14>MUST</bcp14> be preferred over a lower priority one, even if the lower priority one is available earlier. Lower priority requests <bcp14>MAY</bcp14> be cancelled, if a valid higher priority result has been successfully received. The priority is expressed below with the number before the URL or location, with lower numbers meaning higher priority, e.g. 1.2 has higher priority than 4.1.</t>
      <t>In the URLs below,<tt>%EMAILADDRESS%</tt> shall be replaced with the email address that the user entered and wishes to use, and <tt>%EMAILDOMAIN%</tt> shall be replaced with the email domain extracted from the email address. For example, for "fred@example.com", the email domain is "example.com", and for "fred@test.cs.example.net", the email domain is "test.cs.example.net".</t>
      <t>For full support of this specification, all "Required" and "Recommended" mechanisms <bcp14>MUST</bcp14> be implemented and working. For partial support of this specification, all "Required" mechanisms <bcp14>MUST</bcp14> be implemented and working, and in this case, you shall make explicit when advertizing or referring to auto config that there is only partial support of this specification.</t>
      <section anchor="mail-provider">
        <name>Mail provider</name>
        <t>First step is to directly ask the mail provider and allow it to return the configuration. This step ensures that the protocol is decentralized and the mail provider is in control of the configuration issued to mail clients.</t>
        <ul spacing="normal">
          <li>
            <t>1.1. <tt>https://autoconfig.%EMAILDOMAIN%/mail/config-v1.1.xml?emailaddress=%EMAILADDRESS%</tt> (Required)</t>
          </li>
          <li>
            <t>1.2. <tt>https://%EMAILDOMAIN%/.well-known/autoconfig/mail/config-v1.1.xml</tt> (Optional)</t>
          </li>
          <li>
            <t>1.3. <tt>http://autoconfig.%EMAILDOMAIN%/mail/config-v1.1.xml</tt> (Optional)</t>
          </li>
        </ul>
        <t>For example:</t>
        <ul spacing="normal">
          <li>
            <t>1.1. https://autoconfig.example.com/mail/config-v1.1.xml?emailaddress=fred@example.com</t>
          </li>
          <li>
            <t>1.2. https://example.com/.well-known/autoconfig/mail/config-v1.1.xml</t>
          </li>
          <li>
            <t>1.3. http://autoconfig.example.com/mail/config-v1.1.xml</t>
          </li>
        </ul>
        <t>Step 1.3. is mainly for legacy servers. Many current deployments
use this HTTP URL.</t>
        <section anchor="customzing-the-config-for-a-specific-user">
          <name>Customzing the config for a specific user</name>
          <t>To allow the mail provider to return a configuration adjusted for that mailbox, the
client sends the email address as query parameter in URL 1.1. This allows the mail
provider to e.g. separate mailboxes on geographically local mail servers, e.g. a
mail server located in the same office building where an employee works.</t>
          <t>However, while the protocol allows for such heterogenous configurations, mail
providers are discouraged from doing so, and are instead encouraged to provide one
single configuration for all their users. For example, DNS resolution based on
location, mail proxy servers, or other techniques as necessary, can be used to
route the traffic and host the mail efficiently.</t>
          <t>This mechanism also allows the autoconfig server to map the email address to
a username that cannot be expressed using the Placeholders (see section).
However, this method is discouraged. Instead, the email server login should accept
email addresses as username, and doing the mapping to internal usernames at login
time, which avoids the need for the client to know a different username.</t>
          <t>To avoid that email addresses can be tested for validity, whenever customized
configs are returned, the autoconfig server should respond to non-existing email
addresses with a configuation that appears to be real and is similar in structure
to real configurations, e.g. a random host out of the pool of actual hosts.</t>
        </section>
      </section>
      <section anchor="central-database">
        <name>Central database</name>
        <t>The ISPDB contains the configurations for most mail providers with a market share larger than 0.1%, and contains configurations for half of the email accounts in the world.</t>
        <t>This is a useful fallback for mail providers which do not host a config server described in the previous step. Using a central database (ISPDB) of mail configurations for the large mail providers will increase the success rate of finding a valid configuration drastically, up to 10-fold.</t>
        <t>The mail client application may choose the mail config database provider. A public mail config database is available at base URL <tt>https://v1.ispdb.net/</tt>.</t>
        <t><tt>%ISPDB%</tt> below is the base URL of that database.</t>
        <ul spacing="normal">
          <li>
            <t>2.1. <tt>%ISPDB%%EMAILDOMAIN%</tt> (Recommended)</t>
          </li>
        </ul>
        <t>For example:</t>
        <ul spacing="normal">
          <li>
            <t>2.1. <eref target="https://v1.ispdb.net/geologist.com">https://v1.ispdb.net/geologist.com</eref></t>
          </li>
        </ul>
      </section>
      <section anchor="mx">
        <name>MX</name>
        <t>Many companies do not maintain their own mail server, but let their email be hosted by a hosting company, which is then responsible for the email of dozens or thousands of domains. For these hosters, it may be difficult to set up the configuration server (step 1.1.) with valid TLS certificate for each of their customers, and to convince their customers to modify their root DNS specifically for autoconfig. On the other side, the ISPDB can only contain the hosting company and cannot know all their customers. To handle such domains, the protocol first needs to find the server hosting the email.</t>
        <t>If the previous mechanisms yield no result, the client may perform a DNS MX lookup on the email domain, and retrieve the MX server (incoming email server) for that domain. Only the highest priority MX hostname is considered. From that MX hostname, 2 values are extracted:</t>
        <ul spacing="normal">
          <li>
            <t>Remove the first component from the MX hostname, i.e. everything up to and including the first <tt>.</tt>, and use that as value for <tt>%MXFULLDOMAIN%</tt>.</t>
          </li>
          <li>
            <t>Extract only the second-level domain from the MX hostname, and use that as value for <tt>%MXBASEDOMAIN%</tt>. To determine the second-level domain, use the <eref target="https://publicsuffix.org">Public Suffic List</eref> or a similarly suited method, to correctly handle domains like ".co.uk" and ".com.au".</t>
          </li>
        </ul>
        <t>For example:</t>
        <ul spacing="normal">
          <li>
            <t>For "mx.example.com", the MXFULLDOMAIN and MXBASEDOMAIN are both "example.com".</t>
          </li>
          <li>
            <t>For "mx.example.co.uk", the MXFULLDOMAIN and MXBASEDOMAIN are both "example.co.uk".</t>
          </li>
          <li>
            <t>For "mx.premium.europe.example.com", the MXFULLDOMAIN is "premium.europe.example.com" and the MXBASEDOMAIN is "example.com".</t>
          </li>
        </ul>
        <t>Then, attempt to retrieve the config for these MX domains, using the previous methods:</t>
        <ul spacing="normal">
          <li>
            <t>3.1. <tt>https://autoconfig.%MXFULLDOMAIN%/.well-known/mail-v1.xml?emailaddress=%EMAILADDRESS%</tt> (Required)</t>
          </li>
          <li>
            <t>3.2. <tt>https://autoconfig.%MXBASEDOMAIN%/.well-known/mail-v1.xml?emailaddress=%EMAILADDRESS%</tt> (Recommended)</t>
          </li>
          <li>
            <t>3.3. <tt>%ISPDB%%MXFULLDOMAIN%</tt> (Recommended)</t>
          </li>
          <li>
            <t>3.4. <tt>%ISPDB%%MXBASEDOMAIN%</tt> (Recommended)</t>
          </li>
        </ul>
        <t>For example:</t>
        <ul spacing="normal">
          <li>
            <t>3.1. https://autoconfig.premium.europe.example.com/.well-known/mail-v1.xml?emailaddress=fred@example.com</t>
          </li>
          <li>
            <t>3.2. https://autoconfig.example.com/.well-known/mail-v1.xml?emailaddress=fred@example.com</t>
          </li>
          <li>
            <t>3.3. https://v1.ispdb.net/premium.europe.example.com</t>
          </li>
          <li>
            <t>3.4. https://v1.ispdb.net/example.com</t>
          </li>
        </ul>
      </section>
      <section anchor="local-disk">
        <name>Local disk</name>
        <t>For testing purposes, you may want to define a location on the disk, relative to the application installation directory, or relative to the user configuration directory, which may contain a configuration file for a specific domain, and which your application will use, if the above methods fail.</t>
        <ul spacing="normal">
          <li>
            <t>4.1. <tt>%USER_CONFIGURATION_DIR%/isp/%EMAILDOMAIN%.xml</tt> (Optional)</t>
          </li>
          <li>
            <t>4.2. <tt>%APP_INSTALL_DIR%/isp/%EMAILDOMAIN%.xml</tt> (Optional)</t>
          </li>
        </ul>
        <t>For example:</t>
        <ul spacing="normal">
          <li>
            <t>4.1. /home/fred/.config/yourapp/isp/example.com.xml</t>
          </li>
          <li>
            <t>4.2. /opt/yourapp/isp/example.com.xml</t>
          </li>
        </ul>
      </section>
      <section anchor="other-mechanisms">
        <name>Other mechanisms</name>
        <t>You may want to implement other mechanisms to find a configuration, for example Exchange AutoDiscover, DNS SRV, or heuristic guessing. If you implement such alternative methods, and if they are less secure than some of the mechanisms provided here, the alternative methods <bcp14>SHOULD</bcp14> be considered only with lower priority (as defined above) than the more secure mechanisms defined here. For evaluating other mechanisms, use similar criteria as outlined in section "Security considerations".</t>
      </section>
      <section anchor="manual-configuration">
        <name>Manual configuration</name>
        <t>If the above mechanisms fail to provide a working configuration, or if the user explicitly chooses so, you <bcp14>SHOULD</bcp14> give the end user the ability to manually enter a configuration, and use that configuration to configure the account.</t>
      </section>
    </section>
    <section anchor="config-validation">
      <name>Config validation</name>
      <section anchor="user-approval">
        <name>User approval</name>
        <t>Independent of the mechanisms used to find the configuration, before using that configuration, you <bcp14>SHOULD</bcp14> display that configuration to the end user and let him confirm it. While doing so:</t>
        <ul spacing="normal">
          <li>
            <t>At least the second-level domain name(s) of the hostnames involved <bcp14>MUST</bcp14> be shown clearly and with high prominence.</t>
          </li>
          <li>
            <t>The client <bcp14>MUST NOT</bcp14> cut off parts of long second-level domains, to avoid spoofing. At least 63 characters <bcp14>MUST</bcp14> be displayed.</t>
          </li>
          <li>
            <t>Care <bcp14>SHOULD</bcp14> be taken with international characters that look like ASCII characters, but have a different code.</t>
          </li>
        </ul>
      </section>
      <section anchor="login-testing">
        <name>Login testing</name>
        <t>After the user confirmed the configuration, you <bcp14>SHOULD</bcp14> test the configuration, by attempting a login to each server configured. Only if the login succeeded, and the server is working, should the configuration be saved and retrieving and sending mail be started.</t>
      </section>
      <section anchor="oauth2-windows">
        <name>OAuth2 windows</name>
        <t>If the configuration contains OAuth2 authentication, or any other authentication that uses a web browser with URL redirects, you <bcp14>MUST</bcp14> show the full URL or the second-level domain of the current page to the end user, at all times, including after page changes, URL changes or redirects. This allows the end user to verify that he is logging in at the expected page, e.g. the login server of their company.</t>
        <t>(Editor's note: Not really part of autoconfig, but autoconfig can enable OAuth2, and it's important that this is implemented correctly by mail applications.)</t>
      </section>
    </section>
    <section anchor="config-publishing-for-mail-providers">
      <name>Config publishing for mail providers</name>
      <t>Mail service providers who want to support this specification
and publish the mail configuration for their own mail service,
so that mail client apps can be automatically configured,
<bcp14>SHOULD</bcp14> follow this section as guideline and <bcp14>MUST</bcp14> respect the
definitions in this specification.</t>
      <ul spacing="normal">
        <li>
          <t>Configuration fields <bcp14>MUST NOT</bcp14> contain invalid or non-working
configuration data.</t>
        </li>
        <li>
          <t>The provided configuration <bcp14>MUST</bcp14> be working,
and <bcp14>SHOULD</bcp14> use state-of-the-art security.</t>
        </li>
        <li>
          <t>Configurations <bcp14>MUST</bcp14> be public and <bcp14>MUST NOT</bcp14> require
authentication (see below).</t>
        </li>
      </ul>
      <section anchor="config-location-for-single-domain">
        <name>Config location for single domain</name>
        <t>The configuration file <bcp14>SHOULD</bcp14> be published at the URL for
step 1.1., i.e.</t>
        <ul spacing="normal">
          <li>
            <t><tt>https://autoconfig.%EMAILDOMAIN%/.well-known/mail-v1.xml?emailaddress=%EMAILADDRESS%</tt></t>
          </li>
        </ul>
        <t>e.g. for fred@example.com</t>
        <ul spacing="normal">
          <li>
            <t>https://autoconfig.example.com/.well-known/mail-v1.xml?emailaddress=fred@example.com</t>
          </li>
        </ul>
        <t>For backwards compatibility with older mail clients,
step 1.2. should also be implemented.</t>
      </section>
      <section anchor="config-location-for-domain-hosters">
        <name>Config location for domain hosters</name>
        <t>For mail providers which host entire domains for their business
customers, the same URL as listed in the previous section is
preferred.</t>
        <t>Alternatively, the configuration file <bcp14>SHOULD</bcp14> be published at
the location for step 3.1., i.e.</t>
        <ul spacing="normal">
          <li>
            <t><tt>https://autoconfig.%MXFULLDOMAIN%/.well-known/mail-v1.xml?emailaddress=%EMAILADDRESS%</tt></t>
          </li>
        </ul>
        <t>E.g. if the MX server for customer domain example.net is "mx.premium.europe.example.com", then the config file should be at</t>
        <ul spacing="normal">
          <li>
            <t>https://autoconfig.premium.europe.example.com/.well-known/mail-v1.xml?emailaddress=fred@example.net</t>
          </li>
        </ul>
        <t>For backwards compatibility with older mail clients,
step 3.2. should also be implemented.</t>
      </section>
      <section anchor="no-authentication-for-config">
        <name>No authentication for config</name>
        <t>Any of the above URLs for retrieving the config file <bcp14>MUST NOT</bcp14>
require authentication, but <bcp14>MUST</bcp14> be public.</t>
        <t>This is because the config contains the authentication method.
Without knowing the config, the client does not know which
authentication method is required and which username form
(e.g. username "fred" or "fred@example.com" or "fred\EXAMPLE")
to use. Given that the config is required for authentication,
the config itself cannot require authentication.</t>
      </section>
      <section anchor="return-config-for-non-existing-email-addresses">
        <name>Return config for non-existing email addresses</name>
        <t>Servers <bcp14>SHOULD</bcp14> return a valid config, even if the email address
sent as URL parameter does not exist. Otherwise, spammers
or attackers would be able to test the validity of email addresses.
This is true even if the config server needs the email address
to determine which of multiple configurations is correct.
In such a configuration, if the client sends a non-existing
email address, the config server <bcp14>SHOULD</bcp14> return one of the
valid configuations, so that valid and invalid email addresses
are indistiguishable.</t>
      </section>
      <section anchor="oauth2-requirements">
        <name>OAuth2 requirements</name>
        <t>If OAuth2 is used, the OAuth2 server <bcp14>MUST</bcp14> adhere to the
<eref target="https://benbucksch.github.io/mauth-spec/draft-mauth.html">mAuth</eref>
specification.</t>
        <t>The OAuth2 server <bcp14>MUST</bcp14> either accept the public client ID
as given in the config file, without secret, or <bcp14>MUST</bcp14> allow the
string <tt>open</tt> as client ID, or both.</t>
        <t>There are also specific requirements for expiry times and
the login page, which are needed for mail client applications to work.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="alternatives-considered">
      <name>Alternatives considered</name>
      <section anchor="dnssec">
        <name>DNSSEC</name>
        <t>Due to their top-level domain, some domains do not have DNSSEC available to them, even if they would like to deploy it.</t>
        <t>Even where the top-level domain supports it, DNSSEC is currently deployed in only 1% of domains, with adoption rates falling instead of rising, due to the difficulties of administrating it correctly.</t>
        <t>Therefore, DNSSEC cannot be relied on in this specification, and DNS must be considered insecure for the purposes of this specification.</t>
      </section>
      <section anchor="dns-srv">
        <name>DNS SRV</name>
        <t>DNS SRV protocols (RFC 2782, RFC 6186) are not used here, for 2 reasons:</t>
        <ol spacing="normal" type="1"><li>
            <t>DNS SRV relies on insecure DNS and the config can therefore be trivially spoofed by an attacker. See also DNSSEC above.</t>
          </li>
          <li>
            <t>DNS SRV does not provide all the necessary configuration parameters. For example, we need all of:</t>
          </li>
        </ol>
        <ul spacing="normal">
          <li>
            <t>the username form ("fred@example.com", or "fred", or "fred\EXAMPLE", or even a username with no relation to the email address)</t>
          </li>
          <li>
            <t>authentication method (password, CRAM-MD5, OAuth2, SSL client certificate)</t>
          </li>
          <li>
            <t>authentication method parameters (e.g. OAuth parameters)</t>
          </li>
        </ul>
        <t>and other parameters. If any of these parameters are not configured right, the configuration won't work. While these parameters could theoretically be added to DNS SRV, that would mean a new specification and render the idea void that this is a protocol that already exists, is standardized and deployed. It is unlikely that all DNS SRV records would be updated with the new values. Therefore, it does not solve the problem.</t>
        <t>This specification was created as an answer to these deficiencies and provides an alternative to DNS SRV.</t>
      </section>
      <section anchor="capabilities">
        <name>CAPABILITIES</name>
        <t>In the wild deployments from actual ISPs show that protocol-specific commands to find available authentication methods, e.g. IMAP <tt>CAPABILITIES</tt> or POP3 <tt>CAPA</tt>, are not reliable. Many email servers advertize authentication methods that do not work.</t>
        <t>Some IMAP servers are default configured to list all SASL authentication methods that have corresponding libraries installed on the system, independent on whether they are actually configured to work. The client receives a long list of authentication methods, and many of them do not work. Additionally, the server response may be only "authentication failed" and may not indicate whether the method failed due to lack of configuration, or because the password was wrong. Because some authentication servers lock the account after 3 failed login attempts, and it may also fail due to unrelated reasons (e.g. username form, wrong password, etc.), the client cannot blindly issue countless login attempts. Locking the account must be avoided. So, simply attempting all methods and seeing which one works is not an option for the email client.</t>
        <t>Additionally, some email servers advertize Kerberos / GSSAPI, but when trying to use it, the method fails, and also runs into a long 2 minute timeout in some cases. End users consider that to be a broken app.</t>
        <t>Additionally, such commands are protocol specific and have to be implemented in multiple different ways.</t>
        <t>Finally, some non-mail protocols may not support capabilties commands that include authentication methods.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="risk">
        <name>Risk</name>
        <t>If an attacker can provide a forged configuration, the provided mail hostname and authentication server can be controlled by the attacker, and the attacker can get access to the plain text password of the user. The attack can be implemented as man-in-the-middle, so the end user might receive mail as expected and never notice the attack.</t>
        <t>An attacker gaining the plain text password of a real user is a very significant threat for the organization, not only because mail itself can contain sensitive information and can be used to issue orders within the organization that have wide-ranging impact, but given single-sign-on solutions, the same username and password may give access to other resources at the organization, including other computers or, in the case of admin users, even adminstrative access to the core of the entire organization.</t>
        <t>Multi-factor authentication might not defend against such attacks, because the user may believe to be logging into his email and therefore comply with any multi-factor authentication steps required.</t>
      </section>
      <section anchor="dns">
        <name>DNS</name>
        <t>Any protocol that relies on DNS without further validation, e.g. http, should be considered insecure. Even if an http URL redirects to a https URL, and the domain of the https URL cannot be validated against the email domain, that is still insecure. This also applies to the DNS MX lookup and the https calls that base on its results, as described in section "MX".</t>
        <t>One possible mitigation is to use multiple different DNS servers
and verify that the results match, e.g. to use the native DNS
resolver of the operating system, and additionally also query
a hardcoded DoH (DNS over HTTPS) server. Nonetheless,
the result should be used with care.</t>
        <t>Such insecure configs may only be used, if the end user confirms the config, particularly the resulting second-level domains. See section "User approval".</t>
      </section>
      <section anchor="config-updates">
        <name>Config updates</name>
        <t>Part of the security properties of this protocol assume that the timeframe of possible attack is limited to the moment when the user manually sets up a new mail client. This moment is triggered by the end user, and a rare action - e.g. maybe once per year or even less, for typical setups -, so an attacker has limited chances to run an attack. While not a complete protection on its own, this reduces the risk significantly.</t>
        <t>However, if the mail client does regular configuration updates using this protocol, this security property is no longer given. For regular configuration updates, the mail client <bcp14>MUST</bcp14> use only mechanisms that are secure and cannot be tampered with by an active attacker. Furthermore, the user <bcp14>SHOULD</bcp14> still approve config changes.</t>
        <t>But even with all these protections implemented, the mail client vendor should make a security assessment for the risks of making such regular updates. The mail client vendor should consider that servers can be hacked, and most users simply approve changes proposed by the app, so these give only a limited protection.</t>
      </section>
      <section anchor="server-security">
        <name>Server security</name>
        <t>Given that mail clients will trust the configuration, the server delivering it needs to be secure. Even though we call it "database", static configuration files that are generated before deployment in combination with a static web server offer better security and significantly better performance than dynamic queries from a database and responses generated on-the-fly on request. If a custom server is used, it <bcp14>SHOULD</bcp14> be updated regularly and hosted on a dedicated secure server with all unnecessary services and server features turned off.</t>
        <t>Additions and modifications to the configurations are applicable to all respective users and must be made with care. The authenticity of the configuration <bcp14>MUST</bcp14> be verified from authorative sources. Server hostnames <bcp14>MUST</bcp14> be compared with the email domain names they are serving, and if they differ, the ownership of the server hostnames <bcp14>MUST</bcp14> be validated.</t>
        <t>For these reasons, mail clients may use the public mail config database mentioned above.</t>
        <t>The risk is mitigated to some degree by section "User approval".</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="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>
    </references>
    <?line 682?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA9V963Ybx5Xu/36KGmQ5Jn1wMSU7iTkyHYikbGZIiiNQI2fl
zDIbQIFos4FGuhukkMu7zLOcJzv723tXdVUDFCVnss4cr8Qmuuu6a98v1b1e
L6mzOreHpnORZrkZrutiUixn2W0nScfj0t7TmzR4OElre1uUm0OTLWdFkkyL
yTJdUP9pmc7q3ng9uasm817TpZdTj6pOqvV4kVVVVizrzYran51evzLmVybN
q4LmyJZTu7L0r2Xd6ZqOnWZ1UWZpjh9nw5f0n6Kkv95cv+oky/VibMvDZEoj
HyY0TWWX1bo6NHW5tgmt+FlC45Y2PaR/1/T3Q1He3ZbFenVo7Pu6TJM7u6Fn
08PE9IwsE381i3a/plk1Ke5tid8Lgg/+e3YxvMJ/r15fPcd/RxfX/PsPeH5v
l2ta06+Mieaj37Lrd7SSbHlrvsdbPMao2ur3ma1n/aK8xfO0nMwPzbyuV9Xh
YIBWeJLd275rNcCDwbgsHio74AEGCU2b1fP1mAA6tks9jEFwGNXKTjrUTA6F
mrkZmuZ9GaKfFe2OAznj4OlBf14v8k6S0LN5UQKeNLgxs3WeC1p0XtqleSkj
d/gdLT1dZn9Ja0KFQ/PSFkv7nl9YgQVW3te1/H7Mr/uTYkGTLItyQd3uCcAJ
sK/5lfR6dGDjioAwqZNkZGuzXpmUoWvSyaRYL2vzQPsyxTLfyEwmnU5LW1Um
XU7NKq0qYERfhlpk02luEzqIs2VdFtP1BKtNkut5VplVWQAANECeE/DNurJl
ZerCVDJtPbdZSUeaVTWO2kaLyJa0rKV9kKVN8owQ3qSrVZ5NGCLdZEzrW9a2
RF9erYwHcHbjlXdbS7+eW91xMJ6h8RY2XVammOlbf34Gp5rNMjs1c1vS8A9Z
npuppdkX2dJig5jdFPSvMlmlJa2h5s3O0xoUZkr753VW2mmXNjbJ11MsGgQC
agWBmHlR1bL06/OR0tq61K3iCLEsQFAaAY9o97p4Wjih1VT2yYsAjAFV3Xue
3dmHrLKGRmJC7CfHxGAICUy1WU64zSTNia+kZdfMstyaap4yaMMhy/tsYitq
uWR2ZMbWnSVgBSyjQfJNP2EQ+/MHW6kA31lWVrWHG0YH1KbUk457VhYL/r3j
7PD4z2tbbqhP8mDzvHe3LB6W5u2bc8LLOuhGk95nU0u7eJhnkzkBvl6XS24Q
AdUEp0STE+Gs1vSjR9xwmo5zhtSib17RmLLOtO6aewJJsa7MjHY5Tid3pirW
pYMIAYPxCYcMeBP+0qgLmor4bzpOCfrFLIkWUfF5EMe6bS+/ouUXBBmzLAhg
hDmTmjC8Wq9WRYntBuTVTWgMOaGFncyJZ1QLJrMGP7d232eSXaxyuyAskrW0
qTZjwKw8VQP7TEXoa83B12Zj05LPdJH+TPPbgEybM9PdNgDYozGmJm0guI91
1XT8ldkBGYgU8/WXnwH3QWMRi6hoE8frsqQZ8003hgnIig64ZmLOajOnKceW
OGzm9kzLGG+II35h/nQ9X5M8LcdZOf3PPcfn6+Zhf2nrfTQ8vS/yNVbXNKMJ
f6azqfq3y2JhWdxY12rAnf4N+kLTASQMUPTvptKc30tLocim7cPDQ/9OHqKp
NPrGxAPefQOg9An1+D0hbHm6iFow1PozejEpaFK75oaXJAqP82I9Fag2zWmk
irb8vp7gLUQKP2LZyj1PbF6n5pgoouk0xbM+YV9Nu04cyyGUVcQMsMNxh3W5
Kpgm9OjSFTXMBHOLyXrBDJ8GEt67IYIgQqf3pP/kxYbOLxOyJl487Zshi+rS
EMZAdzLPZOCACy2y23kNKgX4iactzR9Gry9pNcMpKVHUB6wLeEQcnnm2sBjq
T+yAKIrF4mtS/ObPlGOMs6XwEn4VU4Bwn4dinU9JjNF8tbDLIr9n1KOtKVcV
0TJp6PKEqMWI1E6Sd3PLzbCVsxHLC89XJjRVmeYNeQmzq7bpnbdFr6t1DqmQ
eACDMPBqVkBGg9NNm9n1pC7OLk5ZLQP0b2rCjMH7RX6Dpfhf/6sRljfYxK/M
KAWp6TJYpCSsvbz4jpq7Y/q2c9D/svPdkbwR4B1Lj6DFs4404EaMrVfKJk02
/bZj3/NUrPw0DampCJaj4P2LgT77QDOi9qZZ1C6rVnm6uSSxcfR9UdzS7kCK
1Dh4saPDiDS+WnpF7Zvn0TT/QnoVoP1t8BD/dLJFuuocql4dv1oVq+f0SlTt
+NXP0usPO3rZh4reXGSTsqiKWW1O30N8kCx6Z8dmpNK+3YmYEemS0BqivkN+
PKLHrQ69XgQTkh8FyaRbDA+0xkZlZ0dRxxdOITrCy350hv5V3AOi8eibb56/
GPBfrXUwXDsE92xJC18WpDxOys2K9VWz45/OaHRODenf5jlQHWrZAbgGPek5
ojWY6ZHu18M319SJxqBOrJKTeMf03IlZ24L+lZL9tiEV6rZMpxZcAhPdZ6lx
A+wcPoYq7a4qJne2viZwHtECXwyC33FDp0MefXZ6MTw7H56cvDkdjT57MfAv
tiZk0A13aZzV4e7NO127N8lJTwCT6HR3tmz+GdlAR3e8nbs/0XFvCpwlO5G4
bjbjA8uq5ee1YV3DZmCf+/0nBhm+vf7BXJ0Pzy675vz192eXrEGo6Ogt2X4y
eXGbLXeP1OxY0cpOn9zxkJTnyZoEje/S7N9rck8t/Fg0z+M3w4vexcnXWPbJ
2feno2v86ptLUh8vr88vHlk1XnV2n2Hzz1uSLGho9mhw/HH/DNNU6wmxh6oo
q/2ndoqjfJctp7ACGYhP7a/z/Wg0vDr7qKX9GylUdPyVGRjp9dRqUmixxL17
VUZaW7AWwRgonmPYfBmZ/o8sj8iyJ9KqN7Fl/eQ6Xws6E24OQN7E/GGh4FEl
fBD2oa1IX02drYtxRS+w3gTSVxWRCmm2pNjvkQpVZWPSs9IZtJ9crD5uDHqm
pjmppwOWwrAhl3afqSS9h6eEFJtHNih6zpP7WqBZ35Akg54DC2g6Zd0KK6qA
3wUtPc1rsBbQ0CPT0THYJye7LFpm78dxxrjP0TZrejFoNWmJFe1wVKxESzz0
4P288hRLQse1C8XdIJZ325L+j8Warcd5SgxmAfUMWpPrpehRxSgNdLD3ZM34
9uxKUFQSjauFudDjxPpWhSyrVDu2M0s2FM7Mds14XTe4U8Scl8jCoSatdzIv
oL2jcXC8fvKPEvustTwm9unlp0j9r3dJ/X+aVPzHkYq2/oigdWi2hcncgsa/
txfEd9NbW71eKlrBoftisPvd9hjTdFNdF+c7Wx98RfrpB97H2xi09/E0wl+S
MeRYBFht5AVrYU2xrm+LNtZUi/pxZREv+7esnLPV+yTmfP273z6JOaqI/UPo
I5snzosVwjU8332+aNU02Xvz6tg8+/rrr7rmq2++/mrfeFcPv35Cir6i1vdp
ToKlS8yh4Sq7WzdmsKJgxc7ORzQ8lX5nVz111D3Jvq9DaTcpbpfZX2wltj+z
G2+Ws6l75RyATylAW1KBzW044QLxyv5a9cFC93fHAr08cAy3x/4fJkticohJ
ayeD/XmHXbUu8yPntfl5y7TC2/9WzoipenS02eRDoPkw29i5NxivH9gaU3+w
tcHpu9HAGbj9tFq8//9ps4HR/Sl79uZ5T0brNVb6P2H3ojP+8p2zlUlEcGvN
AzvhnM9raqtJmY3tDsdWm2bZhQ1vItlVJGB89IvZGkc5nMcY/jqVQa0x8KK2
yxSebnUiwn0lATD449lMGG9ClRxhnjxvr4asLysxoAfrnPlLC6spLTOaGx51
Oi/27TdbI8vqlkQu2YOt4XRKAknX2P5tH2BidrmhwWHxgq8uFjCkSdsRbS6r
ibF4bb9tGj1YYY0OpmyibMOUNkG8jV31bH+Iuu8996meEPM0Z7qLQtgaKifq
W+OAFa443b3JuqqLhYUdySBOMUFZm1My0rJqHg7eXv+CJLvqEetIUrQUCefv
FAFBmP8tB3TVxx6SzNzmKyakQZvSeBm8A2I+y87RsYeZiyV6fYZUKDT+wABT
2zliN71ZZLXoQHc6Xkaov9wxApySwS4C2nkxiJyi4RvQFMi9LCBuQ2Hjorrj
orgj03kicYaW5v5CW71EI2FFk7ScTtP72NP6qZzjcYcSGZPWSnSxxQqPdmkC
nYblPqGABNOxmw2g+OH62ptNazgFPjjCu3fveuEoh+Yl5n10VdMMVPz/YFkn
PPGudX2UWa9G/dtKGW4FRaku7ojXpBKXE92alORJQaowK1wct5HYdpvoW/8o
SgHvBi7mvOtoWyT8y0Tth7SdQWkXxKD7q/mKTJ77lkSkYRvc/ziS8ruJacg9
9gSU/2P08wmgUHuCKCqk5KM2bEMo+U18AqRcnzaY3q7yIp2K9OxKGkjknUIu
yDwVSb9oOywyH1b3brkgUkvgfkXDnmfLOzOzaU18OBYORRmkmqSa04Bch1mR
I3KkhoYeHXHbu7pYtU4OnUayQD66Bzv+n3x0DMtPOTe/v/bBMfQ1bYegKD5b
CHZhUAQHll2aERKEWlkAbbueJE+jhAs9nXLolkYiOV8jAFJOMaAkaJV8zu5g
dqAE/c/ZTq3DojEQXougg728s+OWTsm4x5FP3ho2tkiXa8R/TZhV5E6wxZzC
ZCIzzxaVzWdtBgYWPvJZP1vuMAboFVbldZGdCjy3G3TMYFtTHoErp+pPH7r0
m5PXF40XjyACJzZt7g45KnM7uZOUpNZiPUxoSmroE3Hk2AE8kspFlwAv6mbw
ojWS6n56ll1za2UlaEpUxqubQeEkU5YztSJgtgabZTafVhFCaGZJmZGCXAZL
oR3Xu4yB+L2mAEALh6t6Sad0ca7vuuZnUkOhymb3XVMVbRAVftas7rIHXlz1
kzt2xdYs/urdaEA46zDB74Yo4nGsOCOz5eMwY4de9Q72Bq2G4cyE5qAHgL8C
ULfF7Ss2k5xXuFLcwmIbBsdpDgTMtl62HW9pctxWeTqxc+a4qtqNLXEVHvk+
zbNpq8WWx+UXaZaecc0yjZzAfmF8cnwfGNltwFQDI7fBAgyiNaY1HT7hiTW3
cHKjP6GyOTvZ3vo1mz4A3+4+8bvtGV8vLUTXuEAO5ownh9UZ9arMArjKmZM7
1lyqmXiiHv89thVZkQRBnkoC1MvN2XRvX6JBLgdzx3LgbETmIMGq3DA8nQS3
Mg44Jpa33feEbdK6tJqgd3ZSMSzURCRc+5HIjwUzeHG5hsm7DVFws7ElhLG6
BygLXeSHICtIklc4V6bdUfbNjuYJCTmybpBXB3CSZp7Vgt60qB3B4bOZ2RRr
ts9XxYMtZ+vczNbLibhFObvv539HPmKTnoi9aP7N1nAYC7lXjj969yNhEA+A
BjNkCREi0jTg1JIypLNsU1hNXH0DNmbf2wnhxJaMCWiHaV5SZcBHfmJC6PCp
6SOWMFFfx5OlrzR1z7Zbi85AjAPJ67VjtwHTDHyx0mZrRxLABDXijBVQIgK2
z2c3WRwyg4m33VaYHJt9KUsEUGRBP8miHVi4UWcQG+ARgw4VKa97xGrUsLoT
wQpMEzcH7Wy1rqMDxU7WEktbgBJCjugAIW78CBCvd6tBPL6c2p3dfNt5Ozp9
czm8OO2YPCXe+21nNCmRCYltdo7gkXPtPzDI92+GlycXQz/G9yUtepF2jk5z
ZBW/TAlL46FiQBSSNoe0mYkKQec0acU2mWbFqQbisO9XmaOyR7SOi7ejazIq
RbsrxHo1Lz6Yr7+Arh2m6vMDztGPcSWCLI+8pc2TIPcKuCSIhGJaMvUGBVo+
G9w/6385kBIAMh1F5Uf/cEw2tD95UO71YuA7Rx7lqqLjOdoahw5M3oSNxaRn
hxRH5JAsbo7T/GT4H/Sfcor/kkaN/xSzGdGq/SnlPJAXA+kaDubO8QiaI5mJ
7mdbl30k5Kn9R5Ywtj6C6OgtbI94ZdkDK+pJrCRqFNCkHleLIqdTET0sFth/
KmUJe8i3TnOkf28kGI8kd8k03pcHdawUTsm6LOC1Ar9q7AeRVBwX11IGWLFI
gZc0UYB2QKCFlN9ytl74hDBeX9Z4SVWBrJB2M/fZ/VHnYGoNw5t0XNDCMXk8
DxzTh+aKOBOJra75tdkjrCAw0PT7jTsH0qWapCsWRVH/X6NmxKzMvxLcaFPQ
5qsVcS2SpTHN2CXczkHf+4xMkm3VVkK2jN3sfP1unX377Ne0qH+t5vfptwe/
cjsezB6mtMpVEQe2iGNVpEGwgD46hvw0n5/y3OJcBf8goH8Ofqq5m25E5ihg
Xs0Ajwwc+G5HpFHkNWHPKLPmc55iLVOY9K7O7tmJ+7lJ1zMDZ4NOeYrBbJ6v
adreyGac2vPI1C8GArsQg8ME2bcrlHXFVkLbmS1oIBB+v8gbO9JRjQx1xAm7
ryRFcWpJycu0jOf1yWtDWyUdgXk2IQs3vQoklOQIB7baTaOz33Tpl4++8y9R
AsCibrrJTZRTy++3cmNvzN4XB/u+9CEyF3hqDZqI7tUEZsLqHVE8oDBpzAIt
oNsFg3UTSdlORYyMkS7N71uhHpm0yZfmVFCCGx0hY9Mep8aN9eeAqxD2nYeE
xbiLnwRTJNEUXVWGgpDQQwobksa0SB8HNiu1Q48V5YBXTkou86EEPrN+kvwt
PCsT//M380amF8b0N3MqqGP+Rt16xv+fft3E1tcNGveg8fSGGkbQDbK2Q+1n
ZOv+PkDFm3CY89fHw/Or4ZtrHuiKIOR2c/P7G6fxtMbXMaNxyJ4anl02gwjU
PjjGjiW9OR2eQ0Hicd7YNIdcUZ23va1XMOFfkdSrSZdbWgyRfHEgTgyXiXcT
aE+EvXw4wGwn7BnNvaDmXyqHb5D9f+zRGYdNiOWVJa0tSJr6tR1lcSLTstpx
8a26pxlXEIgdFldaJRwKJDHA5WYVYVrJeG1XLA0c+u0aEx4jVxylNVFaPCDd
gZokrG0p1LSilmVWb/owGjZMmCjvGVuXBwkcr4PgQ7bQ5LTUzLNb5L/wEPUm
kZoGCbJmQaRT1MJxlOEGJpCSGvng+tMSJO+Ns+lU2m6/jwe2aUlgL/vmPG7o
Uzgvhn/ExBMEkPOca/5mNK+4O8LlSy9evy9Q0qxaFIbi5cTSQU0ZTk0fWg7p
xTgzgJP9KUzBHHblmt9QFyAsg66RFx5D0FZ2Ka0rLnwEM2utTsPMB/1nvMD2
2gnoS/NV/4CO+mzp5qpkRd0tllHN/RkrX/WLjutM+Sw91bE3VnneQ1bNLSPj
Gh4JPGqzgidn0WpDLgSeANF21x32OXtK2UWXqabTZmqd7va4dDaduAlW2XRH
OXF/UvWDapPHhtnVlECNdQE9vEh0FVRRJRGHW0znjfodO7wM+qkJAngSVAs6
YgnL4xjgUoYtwIAoY0n3SfN+/CwCKucbmqQ4YjhG5EjhxAbaE6cj7sZcLp3e
I0n6L1wBjKwyEDp7iDgnrHDC0yFUyZTMmvVH7YWADW3nIizMJPizUw18zVWr
ufLMlMz92vFm10FSGqAtgCsLH91ZkdqXAAcPjDr90gakEFZlTq0WfpENOfX+
p3jSTKtaUZWdOykWM20WOuxkalXnfUEEf9A3N74g0GtS/YjYRFPXCvd79CEd
8ztGYyWib9s8YM/hxT7P8iyYJR663xT5BvPvnJFGda4QGfW5jvqpS48GSgLy
P/Qw2QGSUN9+GiBtFuLA4Gs1g9E+AQZu39vbfmp5STICwnFvQpomKcrk9jad
bFwGeh+26calT2kR5oL1EfFdUWfOW0BgA2RDmgw7vP7i/MWuEpD1D19ABR5P
mkKhJLKNyQ3FpC0ETqc/s8tYYyppzT3Hxfuu1B6HxRLbUobkGVeUN4XgoBgI
Sz7pKAKqi0rCRbFkrCx619bNbMFezK0tbst0NZdqeJa8ufEBU9ga0jtNgoci
oJuy1krUzxniq+N1lrPfXWKYKTQ3LoIV2x5E+wPJ83ste89tzDN0GzMp2pmb
OXZb3Nol1LW47Lobb1Q0N77dg1rcOmk5LdjyKTRfC3wVhm06RSmTa0kw0mGg
QyVSc7NLGZXLE7JSPDEtwXtyiTBqpSXVPkk4adQZhy7vNw14fZp0TdJnmf2Z
zaPK596RYhOmFtRFUhbrWqBGjBVA553BdG1Q0uJ5xsmDfS2Wb0qHOGMpwJdt
85MZ7WqXvlMkaRMSYESm1WmUslH0fPAjMr/NHlIEKsveg/1+gwe1rA9JVSw0
mjPsmzM5rVDv8EgIH6saqHDsreokWq0AMriIAuGUwq2MNrhSAYwcyhI+PdeW
L2rg8RPR59Xevi8yJVCuk3YBUiVfGgkckAOzs5ll5uNG7AvjwAACtvZK9ZBr
69kEK+Gs2UKDsFwvw2wKsjTxbrPSen9C95HjVBjRTCvUONXI7lz24ttMkmYp
rIV6DibYL7eDrFZ8lYLzOWieKjSBbIHbbMAQxD9EKkHC7DDNt8hWGIqBX54I
lBEXXjmXmVGIFiDuAX5dSZn2cauGXKy2s9HVycsmwXNLeRBmguzLmFv7fS7S
8s7Wmt3DF1yUYi582T/4TLDmQxc/kMY3c2uPL33wVf+w0R0ZglUDKzhM5+7m
8HZzeKcGME4TcRlGqYlP1aUaezZM1HcvZi2JSSTF8Z0o26X3ewyyfX95zI5N
sXHJd31swYwj9RM6WC2pUivQsGyhIV3c1VmRMRedlmmlV690+WKdwhx82UOe
U/+DzgLxiDWFXMHCm435pB7kZq/H1Hd3u8hGJrzmhxCnXsMjlSOrVtMxDJkB
bgm4+YyBRnqhGLGafeB7MgLQUG4O1k2fsW6qPVvG315g3+xQ4bjrn3Yuh0Q2
WBMMrmLRXGvxeJt9tQ1+TBJRjIrFiiQBUbqiF2eRq6uRZBuukggYrXgzckmP
ydz9KcQAgJV6QQT/jVOXsTeOYwqYlsp64HSyHr9kHALctPiLxV1GeEzom3LF
6EzNSxWy4gTlGSE0m5gyWG02Yb9KeFtTC+2UZPYqUSAP+vtC/YKifI1RUMPK
eaPpZK5knTnGy1OnwkFp/Hu+YKbVgGVnMdV4P70pC4IwVANvr+WqtQaqr6u6
1Xs2CIm7LpwC5kbMSHIDGpdwG+J6LxLLYpFCXlfxayNVsSB+tZzmVrQrBXE3
1sEkFcOHVnxiigLRTezPED6VWcyBAkt6I1H5Qt1H3VBi4gydEy9lIF38SHK3
uKND1OSX0NUgwI+ce9Tena0vRA21hP1G45YxAGotYWAfEe3UO4loMBcBAObi
FrqMHYGEg+J5oWGCRl3zLHRoez8NU/Abuyh0ka6adUE0gG17N040Vta3fXj3
yo3E6YQ7ip/B5Sg1o930b7pBOB7SWb3rEtn47OLHV2/PPb/p04pOZX3+BjKt
ee7lNGm+dbVVtLYPT/RyODr1EwHH4uucdkzTdVkE5k9XwqhHa1Zlz4lnBVcW
8bsKr97ztUJyp4xqG3zLVAYW5O4UY7os1cWhiK44LpkwHeKH/fWdupjAHPvp
2nmqGv5rvmCm01m872/70ELA8jghABgROCMqcq31dw+JpfzSQdE3GpaIb5Gt
F327LouVfWrh8Np9oIf31UTraHsMRWaDLuuazLz6Ed+7Y/kVY5VnOo2VEPAN
vaqD0PX5o56dCLUj3wMoH/6CT/PuPI+8O/FMAW7/4pkCQY/JngdKQUylOxp/
FTUOKe0pFeL5I16gx0/94za4wy/0PPQLPeLR+eVjP2/GjpScxzfiILezW9iO
FaNzdnqQ1XknQIQNxgmhcu1XJa5dyKqHVMw8DjxbDtCoeqrSCoN0iQRyuWJA
E1pDPRbeBxLNqg2zO7aAkc9O4bib5jlH6nPTQRSsMFDcdjpxumLLhxUKUhkB
OSrRClnF56CFRpkkM0NJk4wWlvhfcDSFcBNJWz8dv758dfb92zfD67PXlz+d
nL35bEAAjx2lOxygXzHhfTa8uvrp7HJ0PTw//9i+W9jOqxnMSc8ZAIkGfXVB
Ynu0Ox4yOHn1RPICBsWq/mA7xhJOLw0UmyT5YwsrfKxg5xWHrEa1jkiCNTpd
c6cVUuRP9JpacSuN3vwHo8iccB1W+8TcktZRcbxDE0Cb2Vm1C2+60KPToAUf
6kZKHGC46c0+bPIiS8gZs8Hy1bByV4oyUmyPb0Y/vH57fsIBRa86afZSE8fz
2tZeWikhTQXF9mUNPDcigrqwYB2uOZahzjdoIimTaxvoXb0FUjwTZCqjVCKF
9lKs65zHgbtC3FGmM8JsWJdbu5jDHR9ZQdZUfHxe73UU4hcKIgm9iqkLHLXP
n7aQBXF7FzTKnbFbsesS56vA9RnaVlSyUheQ5RzmLJr0Lo5GbmNcpMrFDMOH
odZxWhiDwEX72WTS7RNc3mIJRDi00TRHcNXf+bwDj9SF2ZgUrbW1cqfbC4wA
odk3j+wjghBnZJJpOM8Wxl0vlNV98479z85DzGxkCEs3VVfqLv0Y+vBekyXj
VGQ4e+7lwkQXOqzmMKT5uoV8ozFhogJYHcALqMdkP0Ixv24sIu58+fqajDYA
cNZcDZoXfMfO1ooqVnvFs0hGdjFjpuD38ZvnYUa5W5sCD3k3XyBX0ga0W6co
n+S1qmNUMx6DcRjoMNRErR6Ojs/OgvfiMpDUxMAZynd6qsiF71YFbZIMfQ5R
I/PKhd2JIwEKoP9ONNo4hVQcUeIpRiAk5YTE4O6hNVt3r4MMRnUrw6sld3Ok
sflLOrAPAqtjddvfgONPXfqTasTuhmJEeSQPU9wopA+UNWdAQcpI9vGD3EDm
GUw8undHauu4HI+ZCjwCze0rQe0yn9yafeMounL1T3Le8GQRQFjJULWHMQao
LLYngvmapfEYhbgIrobfuKCtRZFdvYSAs2Wq8KJpyYviPiIM6S3m0x+iJukC
tyNfDU8smqILmmrO9jyd7K0m7Lt7mN+TXiSX2aHEhh3TAQ7IgTdOIPG00EHt
nfJd9p9XcJ/ZQ766Dq5ujdaz+9prwZoN1Hjl4c6RhEk9QBXMuP6ApHhR1qxQ
SDxdXMZhGkJj4fKVxvHd4FV/P+DVbD9X7E3YdjHDGxgURsbXOTudJrrGOco4
4JtzdYK2SzaMme3wKdJ03aQqmkBo4PBtLqgOr+kOqLWbKPVLXqOuTKU4Cffb
Ne0iZ/V8qcwY3kdqwKHWJme08vkb7UyKL8xxS5HmjNGGN6vCTSyf/Ye0SwRU
lC0kpq20p3Xq2LzXpOImji87zpJIqYXulPWYOq1tr5j1aBM94Fil+kq/vdyG
y6sP3MMBa9fkbEwQMwYOzrFze1/DLYJD3sThmKxERoXSkyCnNbI5Glmi+NHk
yIGWcY2Jd8SK3wswfzqJ45fY30nCVI3FbxmXNOk/xWhl4wSBnYe0nFbCN+pM
VTT5ZAHnuEbXMDuQkEHiYpp6b31A/I+fjDJf9ZDLEnaGlDiWhHMvG99YQ6dj
6F60qSTwePsQPw4PZbxZVe+KOikNZlXiExlxZXVjKOid1R+PMokw4xABAaTn
T+PNP+4iSpJTII5qBY2fuamPsmWToefT3thH9hHeuDCryn3FwN9MWT+Cmv+t
rhta7D+Cqc8/BlO3bzxj8MkHWZIhlJTQguKczBnLeK8ytcHkOFni7khraz+Q
tjEHDGKvYztJnevZieMwdLzzYxX95J1WjgC+8aKieMa0sKwSSASG6S3ZOWJU
Z934YnxmBSIiiSuG1WeclNkxO7M7/dP/ffrj8OLq/LSzn0jqad98z/nTPj2v
uVQzKvRuQTEJm9a4NsAFl3aDXY77jWQ/BV7f7USDJucBH3XhJBhH/T55Kowc
xxnP0RBJxUpDxYypyY3ypyBVx2FhcLVKF2Bq+A4FmQiE+MwYPeFBJ4Ou6gwL
l4MBNG2tvu9xCjdaRouM4/RNdnu8+OizF3L+iMi7e1JbUXmOR7Hi10cGs/h4
2oaPmz9MJ0ujM4gzZLo7lhufBVLKhUSTKJzvcjmcFicvJVglf7cPW1KvplgG
qWjVXG70DWweRSxJ1IPh4z5gIH4DWas+07W26imxyj9xLV0TQvrUosr9pK0N
Xu+eVm7r1sQjkYSibin0z06SNCoij9iYpLZzMRpXA7LRJttxyYWJ1OWYG1Qk
3gDN/chdV3cvy9OPQDAX9p7eEJzqZkR9qphcOKmksXTE/GmKiuRaynY5R2Rn
AN5SrCfmBi6W4OfAgZNGyRb43dkNWhM6drBJfAHM8XH8/eb039+evTk9wd+j
H4bn5/6PRFsIVjZ/NT2PX19cnF6eSGdouNGjpHMx/KNmtndeX8E9PTzveM2/
+XqHL6VinwcJWs74rpIoy+bl8dX/+a+Dr8xf//ovb14dPzs4+Obvf9cfvzv4
7Vf040HCYctpU7XJiLtJJHmKjU/cYpeuspoOrMt3T7OniJ2aJPj/BMj856F5
MZ6sDr460gfYcPTQwSx6yDDbfrLVWYC449GOaTw0o+ctSMfrHf4x+u3gHjx8
8R2baL2D3313lLB7MdATw9A7c4iTy9Ho9DhJTtaOzjPY+KtWTJm9106ndalT
cEJJ/yDpRwZZRLJlo3KAPVrMnJG3yjelJKdo1tzK057amckV37iis4Fj+xsc
wy/BMGYcfBbkuGihSzqV6mLOpZIPD4m/QhJWqX2ZVex4mnpANAkwSOiB42GK
71Xhs2ksc7O6cRg4bgEnq19mk79ZWnwRyrh7EXeUS4C0L0dypUfs5ac1irfe
Zfe44Nmj5QpyrIhs0LnKHz4FpdLbhH/7u2ddg79+c/C73+wLa3KXWkooAtNB
dKQVreUwSQ76blTZTiXb0cXhVRq5ntnbUDugsPuzzO4z9jmwN9V9AcerC8Gt
fw6toLv2k2fN1F4D8f5//eqaz+p99AtfrZziB001xQDFjF3Uzk3qFUWzt6vc
x2mEwZ9eOeRHjPpBNi+jIOfp5LEbPRTkiNrt1mj33JUbXf+Fh673b+FLF9sf
C3h8sOCLZ6IF80DBY/1yk7g4Q+iR3pB6swI5gc1IDn0aXxLR0+283mWUPvCF
MCzgNEywNdzE+X4JcZybyn9WoC6auJ3cqsqtUbymHwuM6EH9xMupusEJZ0gL
9snCtc8c9UlakomjlwCwdgc/auXvKfMFN47zEGjYOF0v9XNXOkIeEMyERbRX
h9dctx2UpWHder2HCThJFlg+/NUodQzw16ic8RXvF0XCSCIVKcv0tawexHMr
kIajDinsk0yvs1VaksZB9LEBtXpHhlfDl2fnZ9dnpyNf7Ycvb4WVIJLnpDnG
Z6Oryvm407r5lorXpZBmwWmJPo7bpI/uvBpUfclcbH8TLujG3x/Pj5HDpVgJ
dsU6sVSvhElslS8fe2w+l+HGI6laNoI0DL62oAUSdpYiWzIgAlwtl1WCC6Mh
UeqH5mB5yhKFk8khYvJsXKZlxjEwTm5o7kavNiS6FnDwB2FBlqS1filsE9WC
t5Yl9BeEx7TKtOKgDk9dOW/7zlPQLxc5frCIQBRcI+88U/7Sd05XtS7JlCV2
p+3JoANy1Ypoh3Fh4HAKabBDx9OkvRPdOfK+aVXb8eDQReHv7gO9PJQFQnsv
9T1rO601uZPOi8ldGMHVuMpztwhR+zVI5hIDaq1uJsnG8Wtd6XrJEgHcUsSs
aTkmIIO6sjrTCAFbT/r7kXfEaRqk1EwRb0NRn+HlcR5CvCbULE/unK/FbcNp
HhzuBE/DXX8V3E5xyA9FmIq1EnKzUpLERvZSS5HADbEgZNeuwnhF9InIra/u
MdwfI8/tL/ywP0puv+ZvgmpJMGuKLezQg+ATKNccoOC7JxnVnxnS67jyhww4
GI6Zpmug+pTAdaqxr0Z5VtnBVk2KQB9fi7tabe8IzgTP40CPXsx4Fsg1RnK1
TLsuNgu+7tIEex/SDeo2XmUh2OCKcF5p1fQc6bhIE1lGyGZgdbbhu1wzL1f2
PkLskqTgsziOoywO8U5xhhcrCF6bY/2vydIgBLhtB2d8drQEbnj5Pk2Yz2sX
Dbowlta15sFtHzp1E1mOFoN7KOWaIqeAyZfY+Fpzzw+Cyx6EQcoYbtaobBkw
XvayJYeO5DPI6rgJIqZy36TyVw0rVk2AlK8w4xokOqtsYoN1A50CgN6mzedy
H1l5KnVBPC9rNUh6NvjEFSsIHPzkq/gcPYbfl+4ytjBHdpySV9t4KX18Dt8Q
z1hHCC7Xd4nyQUmdsiK+9aFyV0e25w3E3wMhQq9MlxJNXqxIegmZi7cn+GRX
D/igBYFhJMXzzuiCVpAC5/c05y8KLqoK5eu96sSNAdKEz6W5+0IwwuVd73yS
r/qKfSicQs1ffiIGYzS3aMWlTwjToFE4N539BUi/N0uRlrhFmv4SU1I7+B5S
YEflUtQYZZAsEkg8QUYWu7mkETO/aWL39BvqpFolQkFqvWHfLtkMQn/xgaXJ
ZR/+1ltnj0pQItayG0MSeqbz283WJQO7yYdSpQ+ex24QzdlhJRO3Vr8DPqdF
7ePMC07okfgPXjSMIs6w8A0CG15XYxtQN/LMuUncBSRVLcVcbk2aTYHiUP44
tEeCuDDDLUamh92j/Fm+G73ke36k2EPcW5ELzefbXfyI1DrcIarX0Vh8XyC7
dRX/Tk7uEC1cTSOil63AMNUDK9PJCY3qydyldRS+5EDtBpw2l+s2SR64Nlj9
Jk5zZQYfSEsBEJdjJ3RGZGkhq2lqToofzB4Wxle38GW6+7pIfNpwCXUw56tr
mhUGSMKciBF3krIbcAQK8Y4LV+0JwlDWp05xFxdxfFxzp8JCyK5cITFZS81E
M3/2SEaZuDj8SUUpfp0oBC0WIonXq7T0CX8uMwFktIJeFHiBmkJvYrmuhJhd
aqTVzEq9x8hjhEo1JO9kCy71UJRcFOy2dV8VcWxDUx8rS6fPd6nDYg2VOUFy
7c2xG770s5HOQYoS5+uWap4AEj1BJToEtgmQNEOz4vPi3p/CRyxya7OCUwBr
WROd9FjkhprHPG12hfSmiRAcKX5NM+d8YDVV+JutRT3T01F6Kx6WWkdNe1lP
9HMIJWk8oVxlF6Avu1bUCT38bMaX9nbNKbORR0SP2idnhp9190k40blvRMFm
9RWKAYSjuLc+OEN3a1Xs/15XaoeFadXswmhShYMaOE5kxEWBjq7UizcRIeed
ea+EjS8Kl9jMmKTOcOGQgvqNx1BS0QiSL0kM8KmLxBEfXxUeT5S5tb0x6jst
fH02XxuTNmBMETerGFOdIoQDraRwl20jlqMOmgo/0QcfnyY2D5wJoxrRHGDR
pEeumRaTwplYDhKajYeDLoIvDNF7p1lWepm0fF/TI3oDGv30tlao656TJIhW
h0kHUpXAFy9ve+si2x3JX/dyKX5WRxdERrIXQvx2Dv8qJBiadlztbqfL2Vbs
92knqgQ4d2uXEBbW32/XuJd2fnQ9daMi7dLnFs74Bqy6DoAgJmtIta6F1kqm
UndKJzbdkBZJQ0IeZe4+/LSpdBa3ojgzqmDFhRgDM3z1fumuAxPnqbv8t0l3
VUFTB0k6zjOoqKf5zVoQDB2bgCGekKmjTf95OyWV9bJxhmtSoDPWJc9GvpRB
AJe7EglUgeFaKYZOvUsxUFmjwDnzbwlcauQn5Q/scUogMFQwnIdT78ICn7du
hLHYV0591GyAbZexyzlhbSRz94/IFbqicbjr5hzWN8njri8n4HiW1VbdjDT2
XjMGm7+MSoNYoiYJSZBUoL3Ns1Ujmh+Z2OuNWgspFKwOn25MilBCvIPqA2X2
CwkJu/IODaWzTIIMFmVPRLpE7uxtiRzEzQdUDzLxz4aXwy3z/jqK5kK0kuDh
liK72T3Q6/U42YnDjRPk6JBZfisJB389lAvm7PTbzox0PNv5u14qmvqWtIX/
C6bWa/VeiwAA

-->

</rfc>
