<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.39 (Ruby 3.2.2) -->
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc editing="no"?>
<?rfc tocompact="yes"?>
<?rfc iprnotified="no"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-alto-oam-yang-12" category="std" consensus="true" tocDepth="3" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.0 -->
  <front>
    <title abbrev="ALTO O&amp;M YANG">YANG Data Models for the Application-Layer Traffic Optimization (ALTO) Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-alto-oam-yang-12"/>
    <author initials="J." surname="Zhang" fullname="Jingxuan Jensen Zhang">
      <organization>Tongji University</organization>
      <address>
        <postal>
          <street>4800 Cao'An Hwy</street>
          <city>Shanghai</city>
          <code>201804</code>
          <country>China</country>
        </postal>
        <email>jingxuan.n.zhang@gmail.com</email>
      </address>
    </author>
    <author initials="D." surname="Dhody" fullname="Dhruv Dhody">
      <organization>Huawei Technologies</organization>
      <address>
        <postal>
          <street>Divyashree Techno Park, Whitefield</street>
          <city>Bangalore</city>
          <region>Karnataka</region>
          <code>560066</code>
          <country>India</country>
        </postal>
        <email>dhruv.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="K." surname="Gao" fullname="Kai Gao">
      <organization>Sichuan University</organization>
      <address>
        <postal>
          <street>No.24 South Section 1, Yihuan Road</street>
          <city>Chengdu</city>
          <region>Sichuan</region>
          <code>610000</code>
          <country>China</country>
        </postal>
        <email>kaigao@scu.edu.cn</email>
      </address>
    </author>
    <author initials="R." surname="Schott" fullname="Roland Schott">
      <organization>Deutsche Telekom</organization>
      <address>
        <postal>
          <street>Ida-Rhodes-Straße 2</street>
          <city>Darmstadt</city>
          <code>64295</code>
          <country>Germany</country>
        </postal>
        <email>Roland.Schott@telekom.de</email>
      </address>
    </author>
    <author initials="Q." surname="Ma" fullname="Qiufang Ma">
      <organization>Huawei</organization>
      <address>
        <postal>
          <street>101 Software Avenue, Yuhua District</street>
          <city>Nanjing</city>
          <region>Jiangsu</region>
          <code>210012</code>
          <country>China</country>
        </postal>
        <email>maqiufang1@huawei.com</email>
      </address>
    </author>
    <date year="2023" month="September" day="22"/>
    <area>Networks</area>
    <workgroup>ALTO WG</workgroup>
    <keyword>Automation, Service Provisioning, Control, Operation</keyword>
    <abstract>
      <?line 110?>

<t>This document defines a YANG data model for Operations, Administration, and
Maintenance (OAM) &amp; Management of the Application-Layer Traffic Optimization (ALTO)
Protocol. The operator of an ALTO server can use this data model to (1) set
up the ALTO server, (2) configure server discovery, (3) create, update and
remove ALTO information resources, (4) manage the access control of each ALTO
information resource, and (5) collect statistical data from the ALTO server. The
application provider can also use this data model to configure ALTO clients
to communicate with known ALTO servers.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
  ALTO Working Group mailing list (alto@ietf.org),
  which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/alto/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://github.com/ietf-wg-alto/draft-alto-oam-yang"/>.</t>
    </note>
  </front>
  <middle>
    <?line 121?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document defines a YANG data model for the Operations, Administration, and
Maintenance (OAM) &amp; Management of Application-Layer Traffic Optimization (ALTO)
Protocol. The basic purpose of this YANG data model is discussed in Section 16
of <xref target="RFC7285"/>.</t>
      <t>The operator of an ALTO server can use this data model to:</t>
      <ul spacing="normal">
        <li>set up the ALTO server,</li>
        <li>configure server discovery,</li>
        <li>create, update and remove ALTO information resources,</li>
        <li>manage the access control of each ALTO information resource,</li>
        <li>collect statistical data of the ALTO server.</li>
      </ul>
      <t>The application provider can also use this data model to configure ALTO clients
to communicate with known ALTO servers.</t>
      <t><xref target="scope"/> describes what is and is not in scope.
<xref target="requirements"/> and <xref target="extra-req"/> define more concrete requirements for the
data model.</t>
      <t>The basic structure of this YANG data model is guided by Section 16 of
<xref target="RFC7285"/> and <xref target="RFC7971"/>. Although the scope of the YANG data model in this
document mainly focuses on the support of the base ALTO protocol <xref target="RFC7285"/> and
the existing ALTO standard extensions: <xref target="RFC8189"/>, <xref target="RFC8895"/>,
<xref target="RFC8896"/>, <xref target="RFC9240"/>, <xref target="RFC9241"/>, <xref target="RFC9275"/>, and
<xref target="I-D.ietf-alto-performance-metrics"/>.</t>
      <t>The detailed design of the data model is illustrated in <xref target="alto-model"/> and
<xref target="alto-stats-model"/>. Some examples of how to extend this data model for
specific ALTO server implementations are shown in <xref target="alto-ext-model"/>.</t>
    </section>
    <section anchor="requirements-language">
      <name>Requirements Language</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
when, and only when, they appear in all capitals, as shown here. When the words
appear in lower case, they are to be interpreted with their natural language
meanings.</t>
      <!-- End of sections -->

</section>
    <section anchor="acronyms-and-abbreviations">
      <name>Acronyms and Abbreviations</name>
      <t>This document uses the following acronyms:</t>
      <dl>
        <dt>ALTO:</dt>
        <dd>
          <t>Application-Layer Traffic Optimization</t>
        </dd>
        <dt>CPU:</dt>
        <dd>
          <t>Central Processing Unit</t>
        </dd>
        <dt>DNS:</dt>
        <dd>
          <t>Domain Name System</t>
        </dd>
        <dt>HTTP:</dt>
        <dd>
          <t>Hypertext Transfer Protocol</t>
        </dd>
        <dt>IRR:</dt>
        <dd>
          <t>Internet Routing Registry</t>
        </dd>
        <dt>OAM:</dt>
        <dd>
          <t>Operations, Administration, and Maintenance (Section 3 of <xref target="RFC6291"/>)</t>
        </dd>
        <dt>O&amp;M:</dt>
        <dd>
          <t>OAM and Management (Section 3 of <xref target="RFC6291"/>)</t>
        </dd>
        <dt>OAuth:</dt>
        <dd>
          <t>Open Authorization</t>
        </dd>
        <dt>PID:</dt>
        <dd>
          <t>Provider-defined Identifier in ALTO</t>
        </dd>
        <dt>TCP:</dt>
        <dd>
          <t>Transmission Control Protocol</t>
        </dd>
        <dt>TLS:</dt>
        <dd>
          <t>Transport Layer Security</t>
        </dd>
        <dt>URI:</dt>
        <dd>
          <t>Uniform Resource Identifier</t>
        </dd>
      </dl>
      <section anchor="tree-diagrams">
        <name>Tree Diagrams</name>
        <t>The meaning of the symbols in the tree diagrams is defined in
<xref target="RFC8340"/>.</t>
      </section>
      <section anchor="prefixes-in-data-node-names">
        <name>Prefixes in Data Node Names</name>
        <t>The complete name of a data node or data model object includes a prefix, which
indicates the YANG module in which the name is defined. In this document, the
prefix is omitted when the YANG module is clear from the context; otherwise,
the prefix is included. The prefixes indicating the corresponding YANG modules
are shown in <xref target="tbl-yang-prefixes"/>.</t>
        <table anchor="tbl-yang-prefixes">
          <name>Prefixes and corresponding YANG modules</name>
          <thead>
            <tr>
              <th align="left">Prefix</th>
              <th align="left">YANG module</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">yang</td>
              <td align="left">ietf-yang-types</td>
              <td align="left">
                <xref target="RFC6991"/></td>
            </tr>
            <tr>
              <td align="left">inet</td>
              <td align="left">ietf-inet-types</td>
              <td align="left">
                <xref target="RFC6991"/></td>
            </tr>
            <tr>
              <td align="left">ds</td>
              <td align="left">ietf-datastores</td>
              <td align="left">
                <xref target="RFC8342"/></td>
            </tr>
            <tr>
              <td align="left">yp</td>
              <td align="left">ietf-yang-push</td>
              <td align="left">
                <xref target="RFC8641"/></td>
            </tr>
            <tr>
              <td align="left">tcp</td>
              <td align="left">ietf-tcp-server</td>
              <td align="left">
                <xref target="I-D.ietf-netconf-tcp-client-server"/></td>
            </tr>
            <tr>
              <td align="left">tls</td>
              <td align="left">ietf-tls-server</td>
              <td align="left">
                <xref target="I-D.ietf-netconf-tls-client-server"/></td>
            </tr>
            <tr>
              <td align="left">http</td>
              <td align="left">ietf-http-server</td>
              <td align="left">
                <xref target="I-D.ietf-netconf-http-client-server"/></td>
            </tr>
            <tr>
              <td align="left">ncc</td>
              <td align="left">ietf-netconf-client</td>
              <td align="left">
                <xref target="I-D.ietf-netconf-netconf-client-server"/></td>
            </tr>
            <tr>
              <td align="left">rcc</td>
              <td align="left">ietf-restconf-client</td>
              <td align="left">
                <xref target="I-D.ietf-netconf-restconf-client-server"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="placeholders-in-reference-statements">
        <name>Placeholders in Reference Statements</name>
        <t>Note to the RFC Editor: This section is to be removed prior to publication.</t>
        <t>This document contains placeholder values that need to be replaced with finalized
values at the time of publication.  This note summarizes all of the
substitutions that are needed.  No other RFC Editor instructions are specified
elsewhere in this document.</t>
        <t>Please apply the following replacements:</t>
        <ul spacing="normal">
          <li>DDDD --&gt; the assigned RFC number for <xref target="I-D.ietf-netconf-tcp-client-server"/></li>
          <li>FFFF --&gt; the assigned RFC number for <xref target="I-D.ietf-netconf-tls-client-server"/></li>
          <li>GGGG --&gt; the assigned RFC number for <xref target="I-D.ietf-netconf-http-client-server"/></li>
          <li>HHHH --&gt; the assigned RFC number for <xref target="I-D.ietf-netconf-netconf-client-server"/></li>
          <li>IIII --&gt; the assigned RFC number for <xref target="I-D.ietf-netconf-restconf-client-server"/></li>
          <li>XXXX --&gt; the assigned RFC number for this draft</li>
          <li>YYYY --&gt; the assigned RFC number for <xref target="I-D.ietf-alto-performance-metrics"/></li>
        </ul>
        <!-- End of sections -->

</section>
    </section>
    <section anchor="sec-req">
      <name>Design Scope and Requirements</name>
      <section anchor="scope">
        <name>Scope of Data Models for ALTO O&amp;M</name>
        <t>The following items are in the scope of the data models specified in this document:</t>
        <ul spacing="normal">
          <li>Deploying an ALTO server/client.</li>
          <li>Operating and managing an ALTO server/client.</li>
          <li>Configuring functionality/capability configuration of ALTO services.</li>
          <li>Monitoring ALTO-related performance metrics.</li>
        </ul>
        <t>This document does not normatively define any data model related to a specific
implementation, including:</t>
        <ul spacing="normal">
          <li>Data structures for how to store/deliver ALTO information resources (e.g.,
database schema to store a network map).</li>
          <li>Data structures for how to store information collected from data sources.
(e.g., database schema to store topology collected from an Interface to the
Routing System (I2RS) client <xref target="RFC7921"/>)</li>
        </ul>
        <t>For convenience, examples of how related extensions can be defined are provided in the Appendices.</t>
      </section>
      <section anchor="requirements">
        <name>Basic Requirements</name>
        <t>Based on recommendations in <xref target="RFC7285"/> and <xref target="RFC7971"/>, the
data models provided by this document satisfy basic requirements listed in
<xref target="TableReq"/>.</t>
        <table anchor="TableReq">
          <name>Basic Requirements of Data Model for ALTO O&amp;M.</name>
          <thead>
            <tr>
              <th align="left">Requirement</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">R1: The data model should support configuration for ALTO server setup.</td>
              <td align="left">Section 16.1 of <xref target="RFC7285"/></td>
            </tr>
            <tr>
              <td align="left">R2: The data model should provide logging management.</td>
              <td align="left">Section 16.2.1 of <xref target="RFC7285"/></td>
            </tr>
            <tr>
              <td align="left">R3: The data model should provide ALTO-related management information.</td>
              <td align="left">Section 16.2.2 of <xref target="RFC7285"/></td>
            </tr>
            <tr>
              <td align="left">R4: The data model should support configuration for security policy management.</td>
              <td align="left">Section 16.2.6 of <xref target="RFC7285"/></td>
            </tr>
            <tr>
              <td align="left">R5-1: The data model should support basic configuration to receive data from different data sources.</td>
              <td align="left">Section 16.2.4 of <xref target="RFC7285"/>, Section 3.2 of <xref target="RFC7971"/></td>
            </tr>
            <tr>
              <td align="left">R5-2: The data model should support configuration for information resource generation algorithms.</td>
              <td align="left">Section 16.2.4 of <xref target="RFC7285"/></td>
            </tr>
            <tr>
              <td align="left">R5-3: The data model should support configuration for access control at information resource level.</td>
              <td align="left">Section 16.2.4 of <xref target="RFC7285"/></td>
            </tr>
            <tr>
              <td align="left">R6: The data model should provide metrics for server failures.</td>
              <td align="left">Section 16.2.3 of <xref target="RFC7285"/>, Section 3.3 of <xref target="RFC7971"/></td>
            </tr>
            <tr>
              <td align="left">R7: The data model should provide performance monitoring for ALTO-specific metrics.</td>
              <td align="left">Section 16.2.5 of <xref target="RFC7285"/>, Section 3.4 of <xref target="RFC7971"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="extra-req">
        <name>Additional Requirements for Extensibility</name>
        <t>R8: As the ALTO protocol is extensible, the data models for ALTO O&amp;M should
allow for augmentation to support potential future extensions.</t>
        <!-- End of sections -->

</section>
    </section>
    <section anchor="alto-model">
      <name>Design of ALTO O&amp;M Data Model</name>
      <section anchor="overview-of-alto-om-data-model">
        <name>Overview of ALTO O&amp;M Data Model</name>
        <t>The "ietf-alto" module is designed to fit all the requirements listed in <xref target="sec-req"/>.</t>
        <t>As shown in <xref target="tree-str"/>, the top-level container 'alto' in the "ietf-alto" module contains a single
'alto-server' and a list 'alto-client'.</t>
        <t>'alto-client' defines a list of configurations for other applications
to bootstrap an ALTO client. These data nodes can also be used by data sources and information
resource creation algorithms that are configured by an ALTO server instance.</t>
        <t>The container 'alto-server' contains both configuration and operational
data of an administrated ALTO server instance.</t>
        <figure anchor="tree-str">
          <name>IETF ALTO Tree Structure</name>
          <artwork align="center"><![CDATA[
module: ietf-alto
  +--rw alto!
     +--rw alto-client* [client-id] {alto-client}?
     |  ...
     +--rw alto-server {alto-server}?
        +...
        +--rw auth-client* [client-id]
        |  ...
        +--rw role* [role-name]
        |  +--rw role-name    role-name
        |  +--rw client*      client-ref
        +--rw data-source* [source-id]
        |  ...
        +--rw resource* [resource-id]
           ...
]]></artwork>
        </figure>
      </section>
      <section anchor="data-model-for-alto-client-operation-and-management">
        <name>Data Model for ALTO Client Operation and Management</name>
        <t>As shown in <xref target="tree-alto-client"/>, the 'alto-client' contains a list of
client-side configurations. Each 'alto-client' entry contains the following
data nodes:</t>
        <dl>
          <dt>'client-id':</dt>
          <dd>
            <t>A unique identifier that can be referenced by other applications.</t>
          </dd>
          <dt>'server-discovery-client':</dt>
          <dd>
            <t>A container that is used to configure how this ALTO client discovers an ALTO server.</t>
          </dd>
        </dl>
        <figure anchor="tree-alto-client">
          <name>IETF ALTO Client Subtree Structure</name>
          <artwork align="center"><![CDATA[
module: ietf-alto
  +--rw alto!
     +--rw alto-client* [client-id] {alto-client}?
     |  +--rw client-id                  string
     |  +--rw server-discovery-client
     |     +---u alto-server-discovery-client
     ...
]]></artwork>
        </figure>
      </section>
      <section anchor="data-model-for-server-level-operation-and-management">
        <name>Data Model for Server-level Operation and Management</name>
        <t>The ALTO server instance contains a set of data nodes for server-level operation and management for ALTO that are shown in <xref target="tree-alto-server-level"/>. This structure  satisfies R1 - R4 in <xref target="requirements"/>.</t>
        <figure anchor="tree-alto-server-level">
          <name>IETF ALTO Server Level Subtree Structure</name>
          <artwork align="center"><![CDATA[
module: ietf-alto
  +--rw alto!
     ...
     +--rw alto-server {alto-server}?
        +--rw listen
        |  +---u alto-server-listen-stack
        +--rw server-discovery
        |  +---u alto-server-discovery
        +--rw logging-system
        |  +---u alto-logging-system
        +--rw cost-type* [cost-type-name]
        |  +--rw cost-type-name    cost-type-name
        |  +--rw cost-mode         identityref
        |  +--rw cost-metric       identityref
        |  +--rw description?      string
        |  +--rw cost-context {performance-metrics}?
        |     +--rw cost-source    identityref
        |     +--rw parameters
        |        +--rw (parameters)?
        +--rw meta* [meta-key]
        |  +--rw meta-key      meta-key
        |  +--rw meta-value    binary
        ...
]]></artwork>
        </figure>
        <section anchor="data-model-for-alto-server-setup">
          <name>Data Model for ALTO Server Setup</name>
          <t>To satisfy R1 in <xref target="requirements"/>, the ALTO server instance contains the
basic data nodes for the server setup that are detailed in the following subsections.</t>
          <section anchor="alto-server-listen-stack">
            <name>ALTO Server Listen Stack</name>
            <t>The container 'listen' contains all the data nodes for the whole server listen stack
across HTTP, TLS, and TCP layers (<xref target="tree-alto-gp"/>).</t>
            <figure anchor="tree-alto-gp">
              <name>IETF ALTO Server Groupings Structure</name>
              <artwork align="center"><![CDATA[
  grouping alto-server:
    +-- base-uri?   inet:uri
  grouping alto-server-listen-stack:
    +-- (transport)
       +--:(http) {http-listen}?
       |  +-- http
       |     +-- tcp-server-parameters
       |     |  +---u tcp:tcp-server-grouping
       |     +-- http-server-parameters
       |     |  +---u http:http-server-grouping
       |     +-- alto-server-parameters
       |        +---u alto-server
       +--:(https)
          +-- https
             +-- tcp-server-parameters
             |  +---u tcp:tcp-server-grouping
             +-- tls-server-parameters
             |  +---u tls:tls-server-grouping
             +-- http-server-parameters
             |  +---u http:http-server-grouping
             +-- alto-server-parameters
                +---u alto-server
]]></artwork>
            </figure>
          </section>
          <section anchor="alto-server-discovery-setup">
            <name>ALTO Server Discovery Setup</name>
            <t>In practice, for a large-scale network consisting of multiple administrative
domains, the information about the network may be partitioned and distributed
over multiple ALTO servers. That may require discovery and communication among
different ALTO servers.</t>
            <t>The "ietf-alto" module provides the configuration for how an ALTO server can be
discovered by another ALTO server or client on demand (<xref target="tree-alto-disc-gp"/>).
However, it does not contain any configuration for the communication among ALTO
servers because the related solution has not become a standard. Future
documents may extend it to fully support multi-domain scenarios.</t>
            <figure anchor="tree-alto-disc-gp">
              <name>IETF ALTO Server Discovery Grouping Structure</name>
              <artwork align="center"><![CDATA[
  grouping alto-server-discovery:
    +-- (server-discovery-manner)?
       +--:(reverse-dns) {xdom-disc}?
          +-- rdns-naptr-records
             +-- static-prefix*           inet:ip-prefix
             +-- dynamic-prefix-source*   data-source-ref
]]></artwork>
            </figure>
            <t>The 'server-discovery' node provides configuration for the discovery of ALTO servers
using a variety of mechanisms. The initial version of the "ietf-alto" module only defines the 'reverse-dns'
case that is used to configure DNS NAPTR records for ALTO server discovery
as sugested by <xref target="RFC7286"/> and <xref target="RFC8686"/>. It configures a set of
endpoints that can be served by this ALTO server. The node
contains two leaf lists. The 'static' list contains a list of manually configured
endpoints. The 'dynamic' list points to a list of data sources to retrieve the
endpoints dynamically. As suggested by <xref target="RFC7286"/> and <xref target="RFC8686"/>, the IP
prefixes of the endpoints configured by both 'static' and 'dynamic' lists will
be translated into DNS NAPTR resource records for server discovery. The
'server-discovery-manner' choice can be augmented by the future modules to
support other mechanisms.</t>
          </section>
        </section>
        <section anchor="data-model-for-logging-management">
          <name>Data Model for Logging Management</name>
          <t>To satisfy R2 in <xref target="requirements"/>, the ALTO server instance contains the
the logging data nodes shown in <xref target="tree-alto-log-gp"/>.</t>
          <t>The 'logging-system' data node provides configuration to select a logging system to
capture log messages generated by an ALTO server.</t>
          <t>By default, 'syslog' is the only supported logging system. When selecting
'syslog', the related configuration is delegated to the configuration file of
the syslog <xref target="RFC5424"/> server.</t>
          <figure anchor="tree-alto-log-gp">
            <name>IETF ALTO Logging System Grouping Structure</name>
            <artwork align="center"><![CDATA[
  grouping alto-logging-system:
    +-- (logging-system)?
       +--:(syslog)
          +-- syslog-params
             +-- config-file?   inet:uri
]]></artwork>
          </figure>
          <t>A specific server implementation can extend the 'logging-system' node to add
other logging systems.</t>
        </section>
        <section anchor="data-model-for-alto-related-management">
          <name>Data Model for ALTO-related Management</name>
          <t>To satisfy R3 in <xref target="requirements"/>, the data model contains the following
ALTO-related management information (<xref target="tree-alto-server-level"/>):</t>
          <ul spacing="normal">
            <li>The 'cost-type' list is the registry for the cost types that can be used in the
ALTO server.</li>
            <li>The 'meta' list contains the customized meta data of the ALTO server. It is
populated into the meta field of the default Information Resource Directory
(IRD).</li>
          </ul>
        </section>
        <section anchor="data-model-for-security-management">
          <name>Data Model for Security Management</name>
          <t>To satisfy R4 in <xref target="requirements"/>, the data model leverages HTTP and TLS to
provide basic security management for an ALTO server. All the related
configurations are covered by the server listen stack.</t>
        </section>
      </section>
      <section anchor="data-model-for-alto-server-configuration-management">
        <name>Data Model for ALTO Server Configuration Management</name>
        <section anchor="data-source">
          <name>Data Source Configuration Management</name>
          <t>To satisfy R5-1 in <xref target="requirements"/>, the ALTO server instance contains a list
of 'data-source' entries to subscribe the data sources from which ALTO
information resources are derived (Section 16.2.4 of <xref target="RFC7285"/>).</t>
          <figure anchor="tree-data-src">
            <name>IETF ALTO Server Data Source Subtree Structure</name>
            <artwork align="center"><![CDATA[
module: ietf-alto
  +--rw alto!
     ...
     +--rw alto-server {alto-server}?
        ...
        +--rw data-source* [source-id]
        |  +--rw source-id                    source-id
        |  +--rw source-type                  identityref
        |  +--rw (update-policy)
        |  |  +--:(reactive)
        |  |  |  +--rw (publish-mode)?
        |  |  |     +--:(on-change)
        |  |  |     |  +--rw on-change        empty
        |  |  |     +--:(periodic)
        |  |  |        +--rw feed-interval    uint32
        |  |  +--:(proactive)
        |  |     +--rw poll-interval          uint32
        |  +--rw (source-params)?
        ...
]]></artwork>
          </figure>
          <t>As shown in <xref target="tree-data-src"/>, a 'data-source' list entry includes:</t>
          <ul spacing="normal">
            <li>A unique 'source-id' for resource creation algorithms to reference.</li>
            <li>The 'source-type' attribute to declare the type of the data source.</li>
            <li>The 'source-params' to specify where and how to query the data.</li>
          </ul>
          <t>The 'data-source/source-params' node can be augmented for different types of
data sources. Note that the purpose of this node is not to fully set up the
communication mechanisms for specific data sources, but to maintain how data
sources are configured and expose them to the ALTO server.</t>
          <t>This data model only includes a basic structure for an ALTO server
to correctly interact with a data source. The implementation-specific parameters
of any certain data source can be augmented in another module. An example is
included in <xref target="example-data-source"/>.</t>
        </section>
        <section anchor="alto-information-resources-configuration-management">
          <name>ALTO Information Resources Configuration Management</name>
          <t>To satisfy R5-2 and R-3 in <xref target="requirements"/>, the ALTO server instance contains a list of 'resource'
entries (<xref target="tree-alto-server-rsc"/>). Each 'resource' entry contains the data nodes of an ALTO
information resource (See Section 8.1 of <xref target="RFC7285"/>). The operator of the ALTO
server can use this model to create, update, and remove the ALTO information
resources.</t>
          <t>Each 'resource' entry provides data nodes defining how to create or update
an ALTO information resource. Adding a new 'resource' entry notifies the ALTO
server to create a new ALTO information resource. Updating an existing
'resource' entry notifies the ALTO server to update the generation parameters
(e.g., capabilities and the creation algorithm) of an existing ALTO information
resource. Removing an existing 'resource' entry will remove the corresponding
ALTO information resource.</t>
          <figure anchor="tree-alto-server-rsc">
            <name>IETF ALTO Resource Subtree Structure</name>
            <artwork align="center"><![CDATA[
module: ietf-alto
  +--rw alto!
     ...
     +--rw alto-server {alto-server}?
        ...
        +--rw resource* [resource-id]
           +--rw resource-id                 resource-id
           +--rw resource-type               identityref
           +--rw description?                string
           +--rw accepted-role*              role-ref
           +--rw dependency*                 resource-ref
           +--rw alto-ird-params
           |  +--rw delegation    inet:uri
           +--rw alto-networkmap-params
           |  +--rw is-default?   boolean
           |  +--rw filtered?     boolean
           |  +---u algorithm
           +--rw alto-costmap-params
           |  +--rw filtered?             boolean
           |  +---u filter-costmap-cap
           |  +---u algorithm
           +--rw alto-endpointcost-params
           |  +---u filter-costmap-cap
           |  +---u algorithm
           +--rw alto-endpointprop-params
           |  +--rw prop-type*   endpoint-property
           |  +---u algorithm
           +--rw alto-propmap-params {propmap}?
           |  +---u algorithm
           +--rw alto-cdni-params {cdni}?
           |  +---u algorithm
           +--rw alto-update-params {incr-update}?
           |  +---u algorithm
           +--rw resource-limits
              +--rw notify-res-mem-limit?      uint64
              +--rw notify-upd-stream-limit?   uint64
                      {incr-update}?

  notifications:
    +---n alto-resource-event {alto-server}?
       +--ro resource-id                    resource-ref
       +--ro notify-res-mem-threshold?      uint64
       +--ro notify-upd-stream-threshold?   uint64 {incr-update}?

  grouping filter-costmap-cap:
    +-- cost-type-name*            cost-type-ref
    +-- cost-constraints?          boolean
    +-- max-cost-types?            uint32 {multi-cost}?
    +-- testable-cost-type-name*   cost-type-ref {multi-cost}?
    +-- calendar-attributes {cost-calendar}?
       +-- cost-type-name*        cost-type-ref
       +-- time-interval-size     decimal64
       +-- number-of-intervals    uint32
  grouping algorithm:
    +-- (algorithm)
]]></artwork>
          </figure>
          <t>A 'resource' list entry MUST include a unique 'resource-id' and a 'resource-type'.</t>
          <t>It may also include an 'accepted-role' node containing a list of 'role-name's
that is used by role-based access control for this ALTO information resource.
See <xref target="alto-rbac"/> for details of information resource access control.</t>
          <t>For some 'resource-type', the 'resource' entry may also include a
'dependency' node containing the 'resource-id' of the dependent ALTO information
resources (Section 9.1.5 of <xref target="RFC7285"/>).</t>
          <t>For each type of ALTO information resource, the 'resource' entry may also need
type-specific parameters. These type-specific parameters can be split into two categories:</t>
          <ol spacing="normal" type="1"><li>One category of the type-specific parameters is common for the same type
of ALTO information resource. They declare the Capabilities of the ALTO
information resource (Section 9.1.3 of <xref target="RFC7285"/>).</li>
            <li>The other category of the type-specific parameters is algorithm-specific.
The developer of the ALTO server can implement their own creation algorithms
and augment the 'algorithm' node to declare algorithm-specific input
parameters.</li>
          </ol>
          <t>Except for the 'ird' resource, all the other types of 'resource' entries have
an augmented 'algorithm' node. The augmented 'algorithm' node can reference data
sources subscribed by the 'data-source' entries (See <xref target="data-source"/>). An
example of extending the 'algorithm' node for a specific type of 'resource' is
included in <xref target="example-alg"/>.</t>
          <t>The developer does not have to customize the creation algorithm of the 'ird'
resource. The default 'ird' resource will be created automatically based on all
the added 'resource' entries. The delegated 'ird' resource will be created as a
static ALTO information resource (Section 9.2.4 of <xref target="RFC7285"/>).</t>
          <t>Each 'resource' entry may also set thresholds of memory usage and active update
streams (if "incr-update" feature is enabled). <xref target="TableThreshold"/> describes
limits that, once exceeded, will trigger notifications to be generated:</t>
          <table anchor="TableThreshold">
            <name>Notification Thresholds.</name>
            <thead>
              <tr>
                <th align="left">Notification Threshold</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">notify-res-mem-limit</td>
                <td align="left">Used to notify high memory utilization of the resource configured to an ALTO server instance. When exceeded, an alto-resource-event will be generated.</td>
              </tr>
              <tr>
                <td align="left">notify-upd-stream-limit</td>
                <td align="left">Used to notify a high number of active update streams that are serviced by an update resource configured to an ALTO server instance. When exceeded, an alto-resource-event will be generated.</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="alto-rbac">
          <name>ALTO Information Resource Access Control Management</name>
          <t>To satisfy R-3 in <xref target="requirements"/> and as per Section 15.5.2 of <xref target="RFC7285"/>, the "ietf-alto" module also defines
authentication and authorization related configuration to employ access control
at the information resource level. The ALTO server returns the IRD to the ALTO
client based on its authentication information.</t>
          <t>The information resource access control is supported using the structure shown in <xref target="tree-auth"/>.</t>
          <figure anchor="tree-auth">
            <name>IETF ALTO Client Authentication Subtree Structure</name>
            <artwork align="center"><![CDATA[
module: ietf-alto
  +--rw alto!
     ...
     +--rw alto-server {alto-server}?
        ...
        +--rw auth-client* [client-id]
        |  +--rw client-id                  string
        |  +--rw (authentication)?
        |     +--:(http)
        |     |  +--rw http-auth-client
        |     |          {http-listen,http:client-auth-supported,
        |     |           http:local-users-supported}?
        |     |     +--rw user-id    http-user-id-ref
        |     +--:(https)
        |        +--rw https-auth-client
        |                {http:client-auth-supported,
        |                 http:local-users-supported}?
        |     |     +--rw user-id    https-user-id-ref
        +--rw role* [role-name]
        |  +--rw role-name    role-name
        |  +--rw client*      client-ref
        ...
]]></artwork>
          </figure>
          <t>The structure shown in <xref target="tree-auth"/> can be used to configure the role-based access control:</t>
          <ul spacing="normal">
            <li>'auth-client' declares a list of ALTO clients that can be authenticated by
the internal or external authorization server. This basic model only includes
authentication approach directly provided by the HTTP server, but the
operators or future documents can augment the 'authentication' choice for
different authentication mechanisms.</li>
            <li>'role' defines a list of roles for access control. Each role contains a list
of authenticated ALTO clients. Each client can be assigned to multiple roles.
The 'role-name' can be referenced by the 'accepted-role' list of a
'resource'. If an authenticated ALTO client is included in any roles with
access permission to a resource, the client is granted access to that
resource.</li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="alto-stats-model">
      <name>Design of ALTO O&amp;M Statistics Data Model</name>
      <t>The "ietf-alto-stats" module augments the "ietf-alto" module to include
statistics at the ALTO server and information resource level (<xref target="tree-stat"/>).</t>
      <figure anchor="tree-stat">
        <name>IETF ALTO Statistics Structure</name>
        <artwork align="center"><![CDATA[
module: ietf-alto-stats

  augment /alto:alto/alto:alto-server:
    +--rw server-level-monitor-config
    |  +--rw time-window-size?   uint32
    +--ro server-level-stats
       +---u server-level-stats
  augment /alto:alto/alto:alto-server/alto:resource:
    +--ro resource-level-stats
       +---u resource-level-stats

  grouping server-level-stats:
    +-- discontinuity-time?    yang:timestamp
    +-- last-report-time?      yang:timestamp
    +-- num-total-req?         yang:counter64
    +-- num-total-succ?        yang:counter64
    +-- num-total-fail?        yang:counter64
    +-- num-total-last-req?    yang:gauge64
    +-- num-total-last-succ?   yang:gauge64
    +-- num-total-last-fail?   yang:gauge64
  grouping network-map-stats:
    +-- num-map-pid?   yang:gauge64
  grouping prop-map-stats:
    +-- num-map-entry?   yang:gauge64
  grouping cdni-stats:
    +-- num-base-obj?   yang:gauge64
  grouping upd-stream-stats:
    +-- num-upd-stream?           yang:gauge64
    +-- num-upd-msg-total?        yang:gauge64
    +-- num-upd-msg-max?          yang:gauge64
    +-- num-upd-msg-min?          yang:gauge64
    +-- num-upd-msg-avg?          yang:gauge64
    +-- num-upd-msg-total-last?   yang:gauge64
    +-- num-upd-msg-max-last?     yang:gauge64
    +-- num-upd-msg-min-last?     yang:gauge64
    +-- num-upd-msg-avg-last?     yang:gauge64
  grouping resource-level-stats:
    +-- discontinuity-time?    yang:timestamp
    +-- last-report-time?      yang:timestamp
    +-- num-res-upd?           yang:counter64
    +-- res-mem-size?          uint64
    +-- res-enc-size?          uint64
    +-- num-res-req?           yang:counter64
    +-- num-res-succ?          yang:counter64
    +-- num-res-fail?          yang:counter64
    +-- num-res-last-req?      yang:gauge64
    +-- num-res-last-succ?     yang:gauge64
    +-- num-res-last-fail?     yang:gauge64
    +-- network-map-stats
    |  +---u network-map-stats
    +-- endpoint-prop-stats
    |  +---u prop-map-stats
    +-- property-map-stats
    |  +---u prop-map-stats
    +-- cdni-stats
    |  +---u cdni-stats
    +-- upd-stream-stats
]]></artwork>
      </figure>
      <section anchor="model-for-alto-server-failure-monitoring">
        <name>Model for ALTO Server Failure Monitoring</name>
        <t>To satisfy R6 in <xref target="requirements"/>, the "ietf-alto-stats" module contains statistics that indicate server failures (<xref target="tree-stat"/>).</t>
        <t>More specifically, 'num-total-*' and 'num-total-last-*' provide server-level
failure counters; 'num-res-*' and 'num-res-last-*' provide information
resource-level failure counters.</t>
      </section>
      <section anchor="model-for-alto-specific-performance-monitoring">
        <name>Model for ALTO-specific Performance Monitoring</name>
        <t>To satisfy R7 in <xref target="requirements"/>,the "ietf-alto-stats" module also contains statistics for ALTO-specific performance metrics (<xref target="tree-stat"/>).</t>
        <t>More specifically, this data model contains the following measurement
information of "system and service performance" suggested by <xref target="RFC7285"/> and
<xref target="RFC7971"/>:</t>
        <ul spacing="normal">
          <li>Requests and responses for each information resource</li>
          <li>CPU and memory utilization</li>
          <li>ALTO map updates</li>
          <li>Number of PIDs</li>
          <li>ALTO map sizes</li>
        </ul>
        <t>Besides the above measurement information suggested by <xref target="RFC7285"/> and <xref target="RFC7971"/>,
the "ietf-alto-stats" module also contains useful measurement information for other ALTO
extensions:</t>
        <ul spacing="normal">
          <li>'num-map-entry' and 'num-base-obj' provide measurement for number of generic
ALTO entities (for <xref target="RFC9240"/> and <xref target="RFC9241"/>)</li>
          <li>'num-upd-stream' and 'num-upd-msg-*' provide statistics for update streams and
messages (for <xref target="RFC8189"/>)</li>
        </ul>
        <t>The "ietf-alto-stats" module only focuses on the performance metrics that can be directly
measured at the ALTO server. The following metrics for "measurement of the
impact" suggested by <xref target="RFC7971"/> are not contained in this data model:</t>
        <ul spacing="normal">
          <li>Total amount and distribution of traffic</li>
          <li>Application performance</li>
        </ul>
        <!-- End of sections -->

<!--
Note: current kramdown-rfc tool does not support recursive inclusion.
Simply put the YANG module section here and wait for a future update.
See details: https://github.com/cabo/kramdown-rfc/issues/106
-->

</section>
    </section>
    <section anchor="alto-oam-yang-modules">
      <name>ALTO OAM YANG Modules</name>
      <section anchor="the-ietf-alto-yang-module">
        <name>The "ietf-alto" YANG Module</name>
        <sourcecode type="yang" markers="true" name="ietf-alto@2023-02-23.yang"><![CDATA[
module ietf-alto {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-alto";
  prefix alto;

  import ietf-inet-types {
    prefix inet;
    reference
      "RFC 6991: Common YANG Data Types, Section 4";
  }
  import ietf-tcp-server {
    prefix tcp;
    reference
      "RFC DDDD: YANG Groupings for TCP Clients and TCP Servers";
  }
  import ietf-tls-server {
    prefix tls;
    reference
      "RFC FFFF: YANG Groupings for TLS Clients and TLS Servers";
  }
  import ietf-http-server {
    prefix http;
    reference
      "RFC GGGG: YANG Groupings for HTTP Clients and HTTP Servers";
  }

  organization
    "IETF ALTO Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/alto/about/>
     WG List:  <alto@ietf.org>";
  description
    "This YANG module defines a set of configured and operational
     parameters of an administrated ALTO server instance.

     Copyright (c) 2023 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Revised BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";

  revision 2023-02-23 {
    description
      "Initial Version.";
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer Traffic
                 Optimization (ALTO) Protocol";
  }

  // Features

  feature alto-client {
    description
      "Indicates that the implementation embeds an ALTO client
       instance.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol";
  }

  feature alto-server {
    description
      "Indicates that the implementation embeds an ALTO server
       instance.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol";
  }

  feature http-listen {
    description
      "The 'http-listen' feature is only used for test deployment.
       This feature shouldn't be used in the production
       deployment.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 8.3.5 ";
  }

  feature xdom-disc {
    description
      "Indicates support of cross-domain server discovery.";
    reference
      "RFC 8686: Application-Layer Traffic Optimization (ALTO)
                 Cross-Domain Server Discovery";
  }

  feature multi-cost {
    description
      "Indicates support of multi-cost extension.";
    reference
      "RFC 8189: Multi-Cost Application-Layer Traffic Optimization
                 (ALTO)";
  }

  feature incr-update {
    description
      "Indicates support of incremental update extension.";
    reference
      "RFC 8895: Application-Layer Traffic Optimization (ALTO)
                 Incremental Updates Using Server-Sent Events
                 (SSE)";
  }

  feature cost-calendar {
    description
      "Indicates support of cost calendar extension.";
    reference
      "RFC 8896: Application-Layer Traffic Optimization (ALTO) Cost
                 Calendar";
  }

  feature propmap {
    description
      "Indicates support of entity property map extension.";
    reference
      "RFC 9240: An ALTO Extension: Entity Property Maps";
  }

  feature cdni {
    description
      "Indicates support of CDNi extension.";
    reference
      "RFC 9241: Content Delivery Network Interconnection (CDNI)
                 Request Routing: CDNI Footprint and Capabilities
                 Advertisement using ALTO";
  }

  feature path-vector {
    description
      "Indicates support of path vector extension.";
    reference
      "RFC 9275: An Extension for Application-Layer Traffic
                 Optimization (ALTO): Path Vector";
  }

  feature performance-metrics {
    description
      "Indicates support of performance metrics extension.";
    reference
      "RFC YYYY: ALTO Performance Cost Metrics";
  }

  // Base identities

  identity resource-type {
    description
      "Base identity for type of information resource.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 8.1 ";
  }

  identity source-type {
    description
      "Base identity for type of data source. A data source
       indicates the origin from which the ALTO information
       resources are derived.";
  }

  identity cost-metric {
    description
      "The cost metric indicates what the cost represents.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 6.1.1";
  }

  identity cost-mode {
    description
      "The cost mode indicates how costs should be interpreted.
       Specifically, the cost mode attribute indicates whether
       indicated costs should be interpreted as numerical
       values or ordinal rankings.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 6.1.2
       RFC 9274: A Cost Mode Registry for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

  identity cost-source {
    description
      "The cost source indicates the high-level type of the
       data source.";
    reference
      "RFC YYYY: ALTO Performance Cost Metrics, Section 3.1";
  }

  // Identities for ALTO information resources

  identity ird {
    base resource-type;
    description
      "Identity for information resource directory.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 9";
  }

  identity network-map {
    base resource-type;
    description
      "Identity for network map.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 5";
  }

  identity cost-map {
    base resource-type;
    description
      "Identity for cost map.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 6";
  }

  identity endpoint-prop {
    base resource-type;
    description
      "Identity for endpoint property service.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 11.4.1";
  }

  identity endpoint-cost {
    base resource-type;
    description
      "Identity for endpoint cost service.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 11.5.1";
  }

  identity property-map {
    base resource-type;
    description
      "Identity for property map.";
    reference
      "RFC 9240: An ALTO Extension: Entity Property Maps";
  }

  identity cdni {
    base resource-type;
    description
      "Identity for Content Delivery Network Interconnection (CDNI)
       advertisement service.";
    reference
      "RFC 9241: Content Delivery Network Interconnection (CDNI)
                 Request Routing: CDNI Footprint and Capabilities
                 Advertisement using ALTO";
  }

  identity update {
    base resource-type;
    description
      "Identity for update stream service.";
    reference
      "RFC 8895: Application-Layer Traffic Optimization (ALTO)
                 Incremental Updates Using Server-Sent Events
                 (SSE)";
  }

  // Identities for cost mode

  identity numerical {
    base cost-mode;
    description
      "This mode indicates that it is safe to perform numerical
       operations";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 6.1.2.1";
  }

  identity ordinal {
    base cost-mode;
    description
      "This mode indicates that the cost values in a cost map
       represent ranking";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 6.1.2.2";
  }

  identity array {
    if-feature "path-vector";
    base cost-mode;
    description
      "This mode indicates that every cost value in the response
       body of a (Filtered) Cost Map or an Endpoint Cost Service is
       interpreted as a JSON array.";
    reference
      "RFC 9275: An Extension for Application-Layer Traffic
                 Optimization (ALTO): Path Vector, Section 6.5.2";
  }

  // Identities for cost metrics

  identity routingcost {
    base cost-metric;
    description
      "This metric conveys a generic measure for the cost of
       routing traffic from a source to a destination.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 6.1.1.1";
  }

  identity ane-path {
    if-feature "path-vector";
    base cost-metric;
    description
      "This metric indicates that the value of such a cost type
       conveys an array of Abstract Network Element (ANE) names,
       where each ANE name uniquely represents an ANE traversed by
       traffic from a source to a destination.";
    reference
      "RFC 9275: An Extension for Application-Layer Traffic
                 Optimization (ALTO): Path Vector, Section 6.5.1";
  }

  identity delay-ow {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "RFC YYYY: ALTO Performance Cost Metrics, Section 4.1";
  }

  identity delay-rt {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "RFC YYYY: ALTO Performance Cost Metrics, Section 4.2";
  }

  identity delay-variation {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "RFC YYYY: ALTO Performance Cost Metrics, Section 4.3";
  }

  identity lossrate {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "RFC YYYY: ALTO Performance Cost Metrics, Section 4.4";
  }

  identity hopcount {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "RFC YYYY: ALTO Performance Cost Metrics, Section 4.5";
  }

  identity tput {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "RFC YYYY: ALTO Performance Cost Metrics, Section 5.1";
  }

  identity bw-residual {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "RFC YYYY: ALTO Performance Cost Metrics, Section 5.2";
  }

  identity bw-available {
    if-feature "performance-metrics";
    base cost-metric;
    description
      "RFC YYYY: ALTO Performance Cost Metrics, Section 5.3";
  }

  // Identities for cost sources

  identity nominal {
    if-feature "performance-metrics";
    base cost-source;
    description
      "The 'nominal' category indicates that the metric value is
       statically configured by the underlying devices.";
    reference
      "RFC YYYY: ALTO Performance Cost Metrics, Section 3.1";
  }

  identity sla {
    if-feature "performance-metrics";
    base cost-source;
    description
      "The 'sla' category indicates that the metric value is
       derived from some commitment which this document refers to
       as service-level agreement (SLA).";
    reference
      "RFC YYYY: ALTO Performance Cost Metrics, Section 3.1";
  }

  identity estimation {
    if-feature "performance-metrics";
    base cost-source;
    description
      "The 'estimation' category indicates that the metric value is
       computed through an estimation process.";
    reference
      "RFC YYYY: ALTO Performance Cost Metrics, Section 3.1";
  }

  // Typedefs

  typedef resource-id {
    type string {
      length "1..64";
      pattern '[0-9a-zA-Z\-:@_]*';
    }
    description
      "Type for a resource ID that are used to reference an ALTO
       information resource.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 9.1.1";
  }

  typedef cost-type-name {
    type string {
      length "1..max";
    }
    description
      "Type for the name of a single CostType that can be
       referenced by other ALTO information resources.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 9.2.2";
  }

  typedef meta-key {
    type string {
      length "1..max";
    }
    description
      "Type for a custom meta key of an ALTO server.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 8.4.1";
  }

  typedef endpoint-property {
    type union {
      type resource-specific-endpoint-property;
      type global-endpoint-property;
    }
    description
      "Type for an endpoint property.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 10.8";
  }

  typedef resource-specific-endpoint-property {
    type string {
      length "1..97";
      pattern '[0-9a-zA-Z\-:@_]*\.[0-9a-zA-Z\-:_]*';
    }
    description
      "Type for a resource-specific endpoint property.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 10.8.1";
  }

  typedef global-endpoint-property {
    type string {
      length "1..32";
      pattern '[0-9a-zA-Z\-:_]*';
    }
    description
      "Type for a global endpoint property.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 10.8.2";
  }

  typedef source-id {
    type string {
      length "1..max";
    }
    description
      "Type for a data source ID that are used to reference a data
       source.";
  }

  typedef role-name {
    type string {
      length "1..max";
    }
    description
      "Type for a name of a role for role-based access control.";
  }

  // Typedefs for referencing purposes

  typedef cost-type-ref {
    type leafref {
      path "/alto:alto/alto:alto-server/alto:cost-type"
         + "/alto:cost-type-name";
    }
    description
      "Type to reference a cost type name.";
  }

  typedef data-source-ref {
    type leafref {
      path "/alto:alto/alto:alto-server/alto:data-source"
         + "/alto:source-id";
    }
    description
      "Type to reference a data source identifier.";
  }

  typedef http-user-id-ref {
    type leafref {
      path "/alto:alto/alto:alto-server/alto:listen"
         + "/alto:http/alto:http-server-parameters"
         + "/alto:client-authentication/alto:users"
         + "/alto:user/alto:user-id";
    }
    description
      "Type to reference an HTTP client user id.";
  }

  typedef https-user-id-ref {
    type leafref {
      path "/alto:alto/alto:alto-server/alto:listen"
         + "/alto:https/alto:http-server-parameters"
         + "/alto:client-authentication/alto:users"
         + "/alto:user/alto:user-id";
    }
    description
      "Type to reference an HTTPS client user id.";
  }

  typedef resource-ref {
    type leafref {
      path "/alto:alto/alto:alto-server/alto:resource"
         + "/alto:resource-id";
    }
    description
      "Type to reference a resource identifier.";
  }

  typedef role-ref {
    type leafref {
      path "/alto:alto/alto:alto-server/alto:role"
         + "/alto:role-name";
    }
    description
      "Type to reference a role.";
  }

  typedef client-ref {
    type leafref {
      path "/alto:alto/alto:alto-server/alto:auth-client"
         + "/alto:client-id";
    }
    description
      "Type to reference an authenticated client.";
  }

  // Groupings

  grouping filter-costmap-cap {
    description
      "This grouping defines a data model for
       FilteredCostMapCapabilities.";
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 11.3.2.4";
    leaf-list cost-type-name {
      type cost-type-ref;
      min-elements 1;
      description
        "Supported cost types.";
    }
    leaf cost-constraints {
      type boolean;
      default false;
      description
        "If set to true, then the ALTO server allows cost
         constraints to be included in requests to the
         corresponding URI.";
    }
    leaf max-cost-types {
      if-feature "multi-cost";
      type uint32;
      default "0";
      description
        "If present with value N greater than 0, this resource
         understands the multi-cost extensions and can return a
         multi-cost map with any combination of N or
         fewer cost types in the 'cost-type-names' list.";
    }
    leaf-list testable-cost-type-name {
      if-feature "multi-cost";
      type cost-type-ref;
      description
        "If present, the resource allows constraint tests, but only
         on the cost type names in this array.";
    }
    container calendar-attributes {
      if-feature "cost-calendar";
      description
        "Configuration for CalendarAttributes.";
      reference
        "RFC 8896: Application-Layer Traffic Optimization (ALTO)
                   Cost Calendar, Section 4.1";
      leaf-list cost-type-name {
        type cost-type-ref;
        min-elements 1;
        description
          "An array of one or more elements indicating the cost
           type names in the IRD entry to which the values of
           'time-interval-size' and 'number-of-intervals' apply.";
      }
      leaf time-interval-size {
        type decimal64 {
          fraction-digits 4;
        }
        units "seconds";
        mandatory true;
        description
          "The duration of an ALTO Calendar time interval.";
      }
      leaf number-of-intervals {
        type uint32 {
          range "1..max";
        }
        mandatory true;
        description
          "A strictly positive integer (greater or equal to 1) that
           indicates the number of values of the Cost Calendar
           array.";
      }
    }
  }

  grouping algorithm {
    description
      "This grouping defines the base data model for information
       resource creation algorithm.";
    choice algorithm {
      mandatory true;
      description
        "Information resource creation algorithm to be augmented.";
    }
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer Traffic
                 Optimization (ALTO) Protocol, Section 5.4.2";
  }

  grouping alto-server {
    description
      "A reuseable grouping for configuring an ALTO server without
       any consideration for how underlying transport sessions are
       established.";
    leaf base-uri {
      type inet:uri;
      description
        "The base URI for the ALTO server.";
    }
  }

  grouping alto-server-listen-stack {
    description
      "A reuseable grouping for configuring an ALTO server
       'listen' protocol stack for a single connection.";
    choice transport {
      mandatory true;
      description
        "Selects between available transports.";
      case http {
        if-feature "http-listen";
        container http {
          description
            "Configures ALTO server stack assuming that
             TLS-termination is handled externally.";
          container tcp-server-parameters {
            description
              "A wrapper around the TCP server parameters
               to avoid name collisions.";
            uses tcp:tcp-server-grouping {
              refine "local-port" {
                default "80";
                description
                  "The RESTCONF server will listen on the IANA-
                   assigned well-known port value for 'http' (80)
                   if no value is specified.";
              }
            }
          }
          container http-server-parameters {
            description
              "A wrapper around the HTTP server parameters
               to avoid name collisions.";
            uses http:http-server-grouping;
          }
          container alto-server-parameters {
            description
              "A wrapper around the ALTO server parameters
               to avoid name collisiions.";
            uses alto-server;
          }
        }
      }
      case https {
        container https {
          description
            "Configures ALTO server stack assuming that
             TLS-termination is handled internally.";
          container tcp-server-parameters {
            description
              "A wrapper around the TCP server parameters
               to avoid name collisions.";
            uses tcp:tcp-server-grouping {
              refine "local-port" {
                default "443";
                description
                  "The ALTO server will listen on the IANA-
                   assigned well-known port value for 'https'
                   (443) if no value is specified.";
              }
            }
          }
          container tls-server-parameters {
            description
              "A wrapper around the TLS server parameters
               to avoid name collisions.";
            uses tls:tls-server-grouping;
          }
          container http-server-parameters {
            description
              "A wrapper around the HTTP server parameters
               to avoid name collisions.";
            uses http:http-server-grouping;
          }
          container alto-server-parameters {
            description
              "A wrapper around the ALTO server parameters
               to avoid name collisions.";
            uses alto-server;
          }
        }
      }
    }
  }

  grouping alto-server-discovery {
    description
      "Grouping for the configuration of how to set up server
       discovery for clients or other ALTO servers to discovery the
       URI of this ALTO server.";
    choice method {
      description
        "Selects among available server discovery methods.";
      case reverse-dns {
        if-feature "xdom-disc";
        description
          "Configures DNS NAPTR records for cross-domain ALTO server
           discovery using reverse DNS lookup.";
        reference
          "RFC 8686: Application-Layer Traffic Optimization (ALTO)
                     Cross-Domain Server Discovery.";
        container rdns-naptr-records {
          description
            "Configuration parameters for DNS NAPTR records.";
          leaf-list static-prefix {
            type inet:ip-prefix;
            description
              "Specifies a list of static IP prefixes.";
          }
          leaf-list dynamic-prefix-source {
            type data-source-ref;
            description
              "Dynamic IP prefixes collected from data sources.";
          }
        }
      }
    }
  }

  grouping alto-server-discovery-client {
    description
      "Grouping for configuration of how a client can discover
       an ALTO server.";
    choice method {
      description
        "Selects among available server discovery methods.";
      case reverse-dns {
        if-feature "xdom-disc";
        description
          "Uses reverse DNS lookup to discover an ALTO server.";
        reference
          "RFC 8686: Application-Layer Traffic Optimization (ALTO)
                     Cross-Domain Server Discovery.";
        container rdns-params {
          description
            "Defines a set of parameters for reverse DNS
             lookups.";
          leaf-list dns-server {
            type inet:host;
            description
              "Provides a DNS server list for reverse DNS lookup.";
          }
        }
      }
    }
  }

  grouping alto-logging-system {
    description
      "Grouping for configuration of logging system used by the
       ALTO server.";
    choice logging-system {
      description
        "Selects among available logging systems.";
      case syslog {
        description
          "Specifies syslog as the logging system.";
        container syslog-params {
          description
            "Provides a set of syslog parameters.";
          leaf config-file {
            type inet:uri {
              pattern 'file:.*';
            }
            description
              "Indicates the file location of the syslog
               configuration.";
          }
        }
      }
    }
  }

  // Top-level container

  container alto {
    presence "The ALTO service is enabled";
    description
      "Indicates a set of parameters for both ALTO clients and
       servers. A single device can implement either alto-client or
       alto-server. No need to implement both.";
    list alto-client {
      if-feature alto-client;
      key "client-id";
      description
        "The ALTO client configuration.";
      leaf client-id {
        type string;
        description
          "A unique identifier of a client that can be referenced
           by a data source or a resource creation algorithm to
           communicate with other ALTO servers.";
      }
      container server-discovery {
        description
          "Specifies a set of parameters for ALTO server discovery.";
        uses alto-server-discovery-client;
      }
    }
    container alto-server {
      if-feature alto-server;
      description
        "The ALTO server instance configuration.";
      container listen {
        description
          "Configure the ALTO server to listen for ALTO clients.";
        uses alto-server-listen-stack;
      }
      container server-discovery {
        description
          "Configures how the ALTO server to be discovered by
           others.";
        uses alto-server-discovery;
      }
      container logging-system {
        description
          "Configure logging system to capture log messages
           generated by the ALTO server.";
        uses alto-logging-system;
      }
      list cost-type {
        key "cost-type-name";
        description
          "Mapping between name and referenced cost type.";
        leaf cost-type-name {
          type cost-type-name;
          description
            "The name to reference a cost type.";
        }
        leaf cost-mode {
          type identityref {
            base cost-mode;
          }
          mandatory true;
          description
            "The referenced cost mode.";
        }
        leaf cost-metric {
          type identityref {
            base cost-metric;
          }
          mandatory true;
          description
            "The referenced cost metric.";
        }
        leaf description {
          type string;
          description
            "A human-readable description fo the 'cost-mode' and
             'cost-metric'.";
        }
        container cost-context {
          if-feature "performance-metrics";
          description
            "Context of how the metric is obtained.";
          leaf cost-source {
            type identityref {
              base cost-source;
            }
            mandatory true;
            description
              "The referenced cost source.";
          }
          container parameters {
            description
              "Additional computation parameters for the cost
               source.";
            choice parameters {
              description
                "Cases of parameters to be augmented.";
            }
          }
        }
      }
      list meta {
        key "meta-key";
        description
          "Mapping of custom meta information";
        reference
          "RFC 7285: Application-Layer Traffic Optimization
                     (ALTO) Protocol, Section 8.4.1";
        leaf meta-key {
          type meta-key;
          description
            "Custom meta key";
        }
        leaf meta-value {
          type binary;
          mandatory true;
          description
            "Custom meta value encoded with the base64 encoding
             schema. The encoded value must be a valid JSON
             value.";
        }
      }
      list auth-client {
        key "client-id";
        description
          "List of authenticated ALTO clients.";
        leaf client-id {
          type string;
          description
            "Identifier to reference an ALTO client.";
        }
        choice authentication {
          description
            "Choice of authentication methods to identify this
             ALTO client. If no authentication method is
             configured, the client must be ignored.";
          case http {
            description
              "The client is authenticated by the HTTP server.";
            container http-auth-client {
              if-feature "http-listen";
              if-feature "http:client-auth-supported";
              if-feature "http:local-users-supported";
              description
                "Parameters of the authenticated HTTP client.";
              leaf user-id {
                type http-user-id-ref;
                mandatory true;
                description
                  "Reference of the user-id for the authenticated
                   HTTP client.";
              }
            }
          }
          case https {
            description
              "The client is authenticated by the HTTP server.";
            container https-auth-client {
              if-feature "http:client-auth-supported";
              if-feature "http:local-users-supported";
              description
                "Parameters of the authenticated HTTPS client.";
              leaf user-id {
                type https-user-id-ref;
                mandatory true;
                description
                  "Reference of the user-id for the authenticated
                   HTTPS client.";
              }
            }
          }
        }
      }
      list role {
        key "role-name";
        description
          "List of roles for access control.";
        leaf role-name {
          type role-name;
          description
            "Name of a role for access control.";
        }
        leaf-list client {
          type client-ref;
          description
            "List of authenticated ALTO clients assigned to the
             role.";
        }
      }
      list data-source {
        key "source-id";
        description
          "List of subscribed data sources.";
        leaf source-id {
          type source-id;
          description
            "Data source id that can be referenced by information
             resource creation algorithms.";
        }
        leaf source-type {
          type identityref {
            base source-type;
          }
          mandatory true;
          description
            "Identify the type of the data source.";
        }
        choice source-params {
          description
            "Data source specific configuration.";
          reference
            "RFC XXXX: YANG Data Models for the Application-Layer
                       Traffic Optimization (ALTO) Protocol,
                       Section 5.4.1";
        }
      }
      list resource {
        key "resource-id";
        description
          "ALTO information resources to be defined";
        leaf resource-id {
          type resource-id;
          description
            "resource-id to be defined.";
        }
        leaf resource-type {
          type identityref {
            base resource-type;
          }
          mandatory true;
          description
            "identityref to be defined.";
        }
        leaf description {
          type string;
          description
            "The optional description for this information
             resource.";
        }
        leaf-list accepted-role {
          type role-ref;
          description
            "Roles allowed to access this information resource.";
        }
        leaf-list dependency {
          type resource-ref;
          description
            "A list of dependent information resources.";
        }
        container alto-ird-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:ird")';
          description
            "IRD-specific configuration.";
          leaf delegation {
            type inet:uri;
            mandatory true;
            description
              "Upstream IRD to be delegated.";
          }
        }
        container alto-networkmap-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:network-map")';
          description
            "Filtered Network Map specific configuration.";
          reference
            "RFC 7285: Application-Layer Traffic Optimization
                       (ALTO) Protocol, Sections 11.2.1 and
                       11.3.1";
          leaf is-default {
            type boolean;
            description
              "Sets whether this is the default network map.";
          }
          leaf filtered {
            type boolean;
            default false;
            description
              "Configures whether filtered network map is
               supported.";
          }
          uses algorithm;
        }
        container alto-costmap-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:cost-map")';
          description
            "Filtered Cost Map specific configuration.";
          reference
            "RFC 7285: Application-Layer Traffic Optimization
                       (ALTO) Protocol, Sections 11.2.2 and
                       11.3.2";
          leaf filtered {
            type boolean;
            description
              "Configures whether filtered cost map is supported.";
          }
          uses filter-costmap-cap;
          uses algorithm;
        }
        container alto-endpointcost-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:endpoint-cost")';
          description
            "Endpoint Cost Service specific configuration.";
          reference
            "RFC 7285: Application-Layer Traffic Optimization
                       (ALTO) Protocol, Section 11.5";
          uses filter-costmap-cap;
          uses algorithm;
        }
        container alto-endpointprop-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:endpoint-prop")';
          description
            "Endpoint Cost Service specific configuration.";
          reference
            "RFC 7285: Application-Layer Traffic Optimization
                       (ALTO) Protocol, Section 11.5";
          leaf-list prop-type {
            type endpoint-property;
            min-elements 1;
            description
              "Supported endpoint properties.";
          }
          uses algorithm;
        }
        container alto-propmap-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:property-map")';
          if-feature "propmap";
          description
            "(Filtered) Entity Property Map specific
             configuration.";
          reference
            "RFC 9240: An ALTO Extension: Entity Property Maps";
          uses algorithm;
        }
        container alto-cdni-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:cdni")';
          if-feature "cdni";
          description
            "CDNi specific configuration.";
          reference
            "RFC 9241: Content Delivery Network Interconnection
                       (CDNI) Request Routing: CDNI Footprint and
                       Capabilities Advertisement using ALTO";
          uses algorithm;
        }
        container alto-update-params {
          when 'derived-from-or-self(../resource-type,'
             + '"alto:update")';
          if-feature "incr-update";
          description
            "Incremental Updates specific configuration.";
          reference
            "RFC 8895: Application-Layer Traffic Optimization
                       (ALTO) Incremental Updates Using Server-Sent
                       Events (SSE)";
          uses algorithm;
        }
        container resource-limits {
          description
            "Sets resource limits.";
          leaf notify-res-mem-limit {
            type uint64;
            units "bytes";
            description
              "Notification of resource memory usage.

               Notification must be generated when the defined
               threshold is reached.";
          }
          leaf notify-upd-stream-limit {
            when 'derived-from-or-self(../../resource-type,'
               + '"alto:update")';
            if-feature "incr-update";
            type uint64;
            description
              "Notification of number of active update streams.

               Notification must be generated when the defined
               threshold is reached.";
          }
        }
      }
    }
  }

  // Notifications

  notification alto-resource-event {
    if-feature alto-server;
    description
      "Notifications must be generated when notify-res-mem-limit
       and/or notify-upd-stream-limit thresholds are reached.";
    leaf resource-id {
      type resource-ref;
      mandatory true;
      description
        "Resource identifier.";
    }
    leaf notify-res-mem-threshold {
      type uint64;
      units "bytes";
      description
        "The notify-res-mem-limit threshold has been fired.";
    }
    leaf notify-upd-stream-threshold {
      if-feature "incr-update";
      type uint64;
      description
        "The notify-upd-stream-limit threshold has been fired.";
    }
  }
}
]]></sourcecode>
      </section>
      <section anchor="the-ietf-alto-stats-yang-module">
        <name>The "ietf-alto-stats" YANG Module</name>
        <sourcecode type="yang" markers="true" name="ietf-alto-stats@2023-02-23.yang"><![CDATA[
module ietf-alto-stats {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-alto-stats";
  prefix alto-stats;

  import ietf-yang-types {
    prefix yang;
    reference
      "RFC 6991: Common YANG Data Types, Section 3";
  }
  import ietf-alto {
    prefix alto;
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

  organization
    "IETF ALTO Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/alto/about/>
     WG List:  <alto@ietf.org>";
  description
    "This YANG module defines a set of statistics of an ALTO
     server instance.

     Copyright (c) 2023 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Revised BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.";

  revision 2023-02-23 {
    description
      "Initial Version.";
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

  // Groupings

  grouping server-level-stats {
    description
      "This grouping defines statistics for server-level
       monitoring.";
    leaf discontinuity-time {
      type yang:timestamp;
      description
        "The time on the most recent occasion at which the ALTO
         server suffered a discontinuity. This must be initialized
         when the ALTO server is configured or rebooted.";
    }
    leaf last-report-time {
      type yang:timestamp;
      description
        "The time on the most recent occasion at which the
         statistics were reported.";
    }
    leaf num-total-req {
      type yang:counter64;
      description
        "The total number of ALTO requests received by the ALTO
         server.";
    }
    leaf num-total-succ {
      type yang:counter64;
      description
        "The total number of successful responses sent by the ALTO
         server.";
    }
    leaf num-total-fail {
      type yang:counter64;
      description
        "The total number of failed responses sent by the ALTO
         server.";
    }
    leaf num-total-last-req {
      type yang:gauge64;
      description
        "The total number of ALTO requests received by the ALTO
         server within the last time window. The duration of the
         time window is configured by time-window-size parameter.";
    }
    leaf num-total-last-succ {
      type yang:gauge64;
      description
        "The total number of successful responses sent by the ALTO
         server within the last time window. The duration of the
         time window is configured by time-window-size parameter.";
    }
    leaf num-total-last-fail {
      type yang:gauge64;
      description
        "The total number of failed responses sent by the ALTO
         server within the last time window. The duration of the
         time window is configured by time-window-size parameter.";
    }
  }

  grouping network-map-stats {
    description
      "This grouping defines resource-specific statstics for the
       network map service only.";
    leaf num-map-pid {
      type yang:gauge64;
      description
        "Number of PIDs contained in the network map.";
    }
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 5";
  }

  grouping prop-map-stats {
    description
      "This grouping defines resource-specific statstics for the
       endpoint property or property map service only.";
    leaf num-map-entry {
      type yang:gauge64;
      description
        "Number of ALTO entities contained in the property map.";
    }
    reference
      "RFC 7285: Application-Layer Traffic Optimization (ALTO)
                 Protocol, Section 11.4.1
       RFC 9240: An ALTO Extension: Entity Property Maps";
  }

  grouping cdni-stats {
    description
      "This grouping defines resource-specific statstics for the
       CDNI advertisement service only.";
    leaf num-base-obj {
      type yang:gauge64;
      description
        "Number of base CDNi advertisement objects contained in the
         CDNI resource.";
    }
    reference
      "RFC 9241: Content Delivery Network Interconnection (CDNI)
                 Request Routing: CDNI Footprint and Capabilities
                 Advertisement using ALTO";
  }

  grouping upd-stream-stats {
    description
      "This grouping defines resource-specific statstics for the
       update stream service only.";
    leaf num-upd-stream {
      type yang:gauge64;
      description
        "Number of active update streams connected to the update
         stream service.";
    }
    leaf num-upd-msg-total {
      type yang:gauge64;
      description
        "Total number of update messages sent to all the active
         update streams.";
    }
    leaf num-upd-msg-max {
      type yang:gauge64;
      description
        "The maximum value over the total number of update messages
         sent to each active update stream. Assume there are 3
         active update streams A, B, and C with 4, 3, and 2 update
         messages sent to them respectively, the value of this
         metric is 4. After a while, if there is no new update
         message sent to any update stream, but the update stream A
         is closed, then the value of this metric is updated to
         3.";
    }
    leaf num-upd-msg-min {
      type yang:gauge64;
      description
        "The minimum value over the total number of update messages
         sent to each active update stream. The procedure is similar
         to num-msg-max.";
    }
    leaf num-upd-msg-avg {
      type yang:gauge64;
      description
        "The average value over the total number of update messages
         sent to each active update stream. The procedure is similar
         to num-msg-max.";
    }
    leaf num-upd-msg-total-last {
      type yang:gauge64;
      description
        "Total number of update messages sent to all the active
         update streams within the last time window. The duration
         of the time window is configured by time-window-size
         parameter.";
    }
    leaf num-upd-msg-max-last {
      type yang:gauge64;
      description
        "The maximum value over the number of update messages sent
         to each active update stream within the last time window.
         The procedure is similar to num-msg-max, but only count
         the update messages within the last time window. The
         duration of the time window is configured by
         time-window-size parameter.";
    }
    leaf num-upd-msg-min-last {
      type yang:gauge64;
      description
        "The minimal value over the number of update messages sent
         to each active update stream within the last time window.
         The procedure is similar to num-msg-max, but only count
         the update messages within the last time window. The
         duration of the time window is configured by
         time-window-size parameter.";
    }
    leaf num-upd-msg-avg-last {
      type yang:gauge64;
      description
        "The average value over the number of update messages sent
         to each active update stream within the last time window.
         The procedure is similar to num-msg-max, but only count
         the update messages within the last time window. The
         duration of the time window is configured by
         time-window-size parameter.";
    }
    reference
      "RFC 8895: Application-Layer Traffic Optimization (ALTO)
                 Incremental Updates Using Server-Sent Events
                 (SSE)";
  }

  grouping resource-level-stats {
    description
      "This grouping defines statistics for resource-level
       monitoring.";
    leaf discontinuity-time {
      type yang:timestamp;
      description
        "The time on the most recent occasion at which the ALTO
         service providing the information resource suffered a
         discontinuity. This must be initialized when the ALTO
         information resource is configured or the ALTO server is
         rebooted.";
    }
    leaf last-report-time {
      type yang:timestamp;
      description
        "The time on the most recent occasion at which the
         statistics are reported.";
    }
    leaf num-res-upd {
      type yang:counter64;
      description
        "The number of version updates since the information
         resource was created.";
    }
    leaf res-mem-size {
      type uint64;
      units "bytes";
      description
        "Memory size utilized by the information resource.";
    }
    leaf res-enc-size {
      type uint64;
      units "bytes";
      description
        "Size of JSON encoded data of the information resource.";
    }
    leaf num-res-req {
      type yang:counter64;
      description
        "The total number of ALTO requests to this information
         resource.";
    }
    leaf num-res-succ {
      type yang:counter64;
      description
        "The total number of successful responses for requests to
         this information resource.";
    }
    leaf num-res-fail {
      type yang:counter64;
      description
        "The total number of failed responses for requests to this
         information resource.";
    }
    leaf num-res-last-req {
      type yang:gauge64;
      description
        "The number of ALTO requests to this information resource
         within the last time window. The duration of the time
         window is configured by time-window-size parameter.";
    }
    leaf num-res-last-succ {
      type yang:gauge64;
      description
        "The number of successful responses for requests to this
         information resource within the last time window. The
         duration of the time window is configured by
         time-window-size parameter.";
    }
    leaf num-res-last-fail {
      type yang:gauge64;
      description
        "The number of failed responses for requests to this
         information resource within the last time window. The
         duration of the time window is configured by
         time-window-size parameter.";
    }
    container network-map-stats {
      when 'derived-from-or-self(../../alto:resource-type,'
         + '"alto:network-map")';
      description
        "Resource-specific statistics for network map
         service only.";
      uses network-map-stats;
    }
    container endpoint-prop-stats {
      when 'derived-from-or-self(../../alto:resource-type,'
         + '"alto:endpoint-prop")';
      description
        "Resource-specific statistics for endpoint property
         service only.";
      uses prop-map-stats;
    }
    container property-map-stats {
      when 'derived-from-or-self(../../alto:resource-type,'
         + '"alto:property-map")';
      description
        "Resource-specific statistics for entity property map
         service only.";
      uses prop-map-stats;
    }
    container cdni-stats {
      when 'derived-from-or-self(../../alto:resource-type,'
         + '"alto:cdni")';
      description
        "Resource-specific statistics for CDNI advertisement
         service only.";
      uses cdni-stats;
    }
    container upd-stream-stats {
      when 'derived-from-or-self(../../alto:resource-type,'
         + '"alto:update")';
      description
        "Resource-specific statistics for update stream service
         only.";
      uses upd-stream-stats;
    }
  }

  // Augment modules to add statistics

  augment "/alto:alto/alto:alto-server" {
    description
      "Augmenting statistics and configuration parameters for
       server-level monitoring.";
    container server-level-monitor-config {
      description
        "Configuration parameters for server-level monitoring.";
      leaf time-window-size {
        type uint32;
        units "seconds";
        default "300";
        description
          "Duration of the time window within that the statistics
           are reported.";
      }
    }
    container server-level-stats {
      config false;
      description
        "Top-level statistics for the whole ALTO server.";
      uses server-level-stats;
    }
  }

  augment "/alto:alto/alto:alto-server/alto:resource" {
    description
      "Augmenting statistics and configuration parameters for
       resource-level monitoring.";
    container resource-level-stats {
      config false;
      description
        "Common statistics for each information resource.";
      uses resource-level-stats;
    }
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The "ietf-alto" and "ietf-alto-stats" YANG modules define data nodes that are designed to be accessed
via YANG based management protocols, such as NETCONF <xref target="RFC6241"/> and RESTCONF
<xref target="RFC8040"/>. Both of these protocols have mandatory-to-implement secure
transport layers (e.g., SSH, TLS) with mutual authentication.</t>
      <t>The Network Access Control Model (NACM) <xref target="RFC8341"/> provides the means to
restrict access for particular users to a pre-configured subset of all
available protocol operations and content.</t>
      <t>There are a number of data nodes defined in these two YANG modules that are
writable/creatable/deletable (i.e., config true, which is the default).
These data nodes may be considered sensitive or vulnerable in some network environments.
Write operations (e.g., edit-config) to these data nodes without proper protection
can have a negative effect on network operations. These are the subtrees and data
nodes in "ietf-alto" YANG module and their sensitivity/vulnerability:</t>
      <dl>
        <dt>'/alto/alto-client/server-discovery':</dt>
        <dd>
          <t>This subtree specifies a set of parameters for an ALTO client to discover ALTO servers.
  Unauthorized access to it could cause intruders to modify the ALTO discovery
  parameters (e.g., 'dns-server') in order to expose an ALTO client to fake ALTO servers. Likewise, this data node can be manipulated to prevent an ALTO client from discovering a reachable ALTO server.</t>
        </dd>
        <dt>'/alto/alto-server/auth-client':</dt>
        <dd>
          <t>This list specifies all the authenticated ALTO clients on an ALTO server.
  Unauthorized write access to this list can allow intruders to modify the entries
  so as to add a client that have not been authenticated yet or delete a client
  that has already been authenticated. Likewise, this data node can be manipulated to prevent access of legitimate ALTO clients.</t>
        </dd>
        <dt>'/alto/alto-server/role':</dt>
        <dd>
          <t>This list specifies roles which authenticated ALTO clients were assigned to for
  access control. Unauthorized write access to this list allow intruders to
  modify the entries so as to permit access that should not be permitted, or deny
  access that should be permitted.</t>
        </dd>
        <dt>'/alto/alto-server/data-source/feed-interval':</dt>
        <dd>
          <t>This leaf specifies a period for an ALTO server to wait for updates published
  by a data source. A malicious ALTO client could attempt to set a very low (or large)
  value to this node. Setting a very low value could attack the data source.
  Setting a very large value would lead to maintaining stale data in the ALTO server.</t>
        </dd>
        <dt>'/alto/alto-server/data-source/poll-interval':</dt>
        <dd>
          <t>This leaf specifies a period for an ALTO server to proactively poll updates
  from a data source. A malicious client could attempt to set a very low (or large)
  value to this node. Setting a very low value could attack the data source.
   Setting a very large value would lead to maintaining stale data in the ALTO server.</t>
        </dd>
      </dl>
      <t>Some of the readable data nodes in "ietf-alto" YANG module may be considered
sensitive or vulnerable in some network environments. It is thus important to
control read access (e.g., via get, get-config, or notification) to these data
nodes. These are the subtrees and data nodes and their sensitivity/vulnerability:</t>
      <dl>
        <dt>'/alto/alto-server/logging-system':</dt>
        <dd>
          <t>This subtree provides configuration to select a logging system to capture log
  messages generated by an ALTO server. Unauthorized read access of this node
  can allow intruders to access logging information, which could be used to craft
  an attack the server.</t>
        </dd>
      </dl>
      <t>The "ietf-alto" supports an HTTP listen mode to cover cases where the ALTO
server stack does not handle the TLS termination itself, but is handled by a
separate component. Special care should be considered when such mode is
enabled. Note that the default listen mode is 'https'.</t>
      <t>Also, please be aware that these modules include choice nodes that can be augmented
by other extended modules. The augmented data nodes may be considered sensitive
or vulnerable in some network environments. For instance, an augmented case of
the 'source-params' choice in 'data-source' may include authentication
information about how to access a data source including private network
information. The 'yang-datastore' case in <xref target="example-data-source"/> is such an
example. The 'restconf' and 'netconf' nodes in it may reveal the access to a
private YANG datastore. Thus, those extended modules may have the NACM
extension "default-deny-all" set.</t>
      <t>These modules use groupings defined in other RFCs that
define data nodes that do set the NACM "default-deny-all" and
"default-deny-write" extensions.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document registers the following URIs in the "IETF XML Registry" <xref target="RFC3688"/>:</t>
      <artwork><![CDATA[
  URI: urn:ietf:params:xml:ns:yang:ietf-alto
  Registrant Contact: The IESG.
  XML: N/A; the requested URI is an XML namespace.

  URI: urn:ietf:params:xml:ns:yang:ietf-alto-stats
  Registrant Contact: The IESG.
  XML: N/A; the requested URI is an XML namespace.
]]></artwork>
      <t>This document registers the following two YANG modules in the "YANG Module Names" registry
<xref target="RFC6020"/>:</t>
      <artwork><![CDATA[
  Name: ietf-alto
  Namespace: urn:ietf:params:xml:ns:yang:ietf-alto
  Prefix: alto
  Maintained by IANA: N
  Reference: [RFC XXXX]

  Name: ietf-alto-stats
  Namespace: urn:ietf:params:xml:ns:yang:ietf-alto-stats
  Prefix: alto-stats
  Maintained by IANA: N
  Reference: [RFC XXXX]
]]></artwork>
      <!-- End of sections -->

</section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <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="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <date month="January" year="2004"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC5424">
          <front>
            <title>The Syslog Protocol</title>
            <author fullname="R. Gerhards" initials="R." surname="Gerhards"/>
            <date month="March" year="2009"/>
            <abstract>
              <t>This document describes the syslog protocol, which is used to convey event notification messages. This protocol utilizes a layered architecture, which allows the use of any number of transport protocols for transmission of syslog messages. It also provides a message format that allows vendor-specific extensions to be provided in a structured way.</t>
              <t>This document has been written with the original design goals for traditional syslog in mind. The need for a new layered specification has arisen because standardization efforts for reliable and secure syslog extensions suffer from the lack of a Standards-Track and transport-independent RFC. Without this document, each other standard needs to define its own syslog packet format and transport mechanism, which over time will introduce subtle compatibility issues. This document tries to provide a foundation that syslog extensions can build on. This layered architecture approach also provides a solid basis that allows code to be written once for each syslog feature rather than once for each transport. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5424"/>
          <seriesInfo name="DOI" value="10.17487/RFC5424"/>
        </reference>
        <reference anchor="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
        <reference anchor="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC6991">
          <front>
            <title>Common YANG Data Types</title>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document introduces a collection of common data types to be used with the YANG data modeling language. This document obsoletes RFC 6021.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6991"/>
          <seriesInfo name="DOI" value="10.17487/RFC6991"/>
        </reference>
        <reference anchor="RFC7285">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Protocol</title>
            <author fullname="R. Alimi" initials="R." role="editor" surname="Alimi"/>
            <author fullname="R. Penno" initials="R." role="editor" surname="Penno"/>
            <author fullname="Y. Yang" initials="Y." role="editor" surname="Yang"/>
            <author fullname="S. Kiesel" initials="S." surname="Kiesel"/>
            <author fullname="S. Previdi" initials="S." surname="Previdi"/>
            <author fullname="W. Roome" initials="W." surname="Roome"/>
            <author fullname="S. Shalunov" initials="S." surname="Shalunov"/>
            <author fullname="R. Woundy" initials="R." surname="Woundy"/>
            <date month="September" year="2014"/>
            <abstract>
              <t>Applications using the Internet already have access to some topology information of Internet Service Provider (ISP) networks. For example, views to Internet routing tables at Looking Glass servers are available and can be practically downloaded to many network application clients. What is missing is knowledge of the underlying network topologies from the point of view of ISPs. In other words, what an ISP prefers in terms of traffic optimization -- and a way to distribute it.</t>
              <t>The Application-Layer Traffic Optimization (ALTO) services defined in this document provide network information (e.g., basic network location structure and preferences of network paths) with the goal of modifying network resource consumption patterns while maintaining or improving application performance. The basic information of ALTO is based on abstract maps of a network. These maps provide a simplified view, yet enough information about a network for applications to effectively utilize them. Additional services are built on top of the maps.</t>
              <t>This document describes a protocol implementing the ALTO services. Although the ALTO services would primarily be provided by ISPs, other entities, such as content service providers, could also provide ALTO services. Applications that could use the ALTO services are those that have a choice to which end points to connect. Examples of such applications are peer-to-peer (P2P) and content delivery networks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7285"/>
          <seriesInfo name="DOI" value="10.17487/RFC7285"/>
        </reference>
        <reference anchor="RFC7286">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Server Discovery</title>
            <author fullname="S. Kiesel" initials="S." surname="Kiesel"/>
            <author fullname="M. Stiemerling" initials="M." surname="Stiemerling"/>
            <author fullname="N. Schwan" initials="N." surname="Schwan"/>
            <author fullname="M. Scharf" initials="M." surname="Scharf"/>
            <author fullname="H. Song" initials="H." surname="Song"/>
            <date month="November" year="2014"/>
            <abstract>
              <t>The goal of Application-Layer Traffic Optimization (ALTO) is to provide guidance to applications that have to select one or several hosts from a set of candidates capable of providing a desired resource. ALTO is realized by a client-server protocol. Before an ALTO client can ask for guidance, it needs to discover one or more ALTO servers.</t>
              <t>This document specifies a procedure for resource-consumer-initiated ALTO server discovery, which can be used if the ALTO client is embedded in the resource consumer.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7286"/>
          <seriesInfo name="DOI" value="10.17487/RFC7286"/>
        </reference>
        <reference anchor="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC8342">
          <front>
            <title>Network Management Datastore Architecture (NMDA)</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder"/>
            <author fullname="P. Shafer" initials="P." surname="Shafer"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="R. Wilton" initials="R." surname="Wilton"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>Datastores are a fundamental concept binding the data models written in the YANG data modeling language to network management protocols such as the Network Configuration Protocol (NETCONF) and RESTCONF. This document defines an architectural framework for datastores based on the experience gained with the initial simpler model, addressing requirements that were not well supported in the initial model. This document updates RFC 7950.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8342"/>
          <seriesInfo name="DOI" value="10.17487/RFC8342"/>
        </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="RFC8189">
          <front>
            <title>Multi-Cost Application-Layer Traffic Optimization (ALTO)</title>
            <author fullname="S. Randriamasy" initials="S." surname="Randriamasy"/>
            <author fullname="W. Roome" initials="W." surname="Roome"/>
            <author fullname="N. Schwan" initials="N." surname="Schwan"/>
            <date month="October" year="2017"/>
            <abstract>
              <t>The Application-Layer Traffic Optimization (ALTO) protocol, specified in RFC 7285, defines several services that return various metrics describing the costs between network endpoints.</t>
              <t>This document defines a new service that allows an ALTO Client to retrieve several cost metrics in a single request for an ALTO filtered cost map and endpoint cost map. In addition, it extends the constraints to further filter those maps by allowing an ALTO Client to specify a logical combination of tests on several cost metrics.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8189"/>
          <seriesInfo name="DOI" value="10.17487/RFC8189"/>
        </reference>
        <reference anchor="RFC8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability. There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content. This document defines such an access control model.</t>
              <t>This document obsoletes RFC 6536.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="91"/>
          <seriesInfo name="RFC" value="8341"/>
          <seriesInfo name="DOI" value="10.17487/RFC8341"/>
        </reference>
        <reference anchor="RFC8686">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Cross-Domain Server Discovery</title>
            <author fullname="S. Kiesel" initials="S." surname="Kiesel"/>
            <author fullname="M. Stiemerling" initials="M." surname="Stiemerling"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>The goal of Application-Layer Traffic Optimization (ALTO) is to provide guidance to applications that have to select one or several hosts from a set of candidates capable of providing a desired resource. ALTO is realized by a client-server protocol. Before an ALTO client can ask for guidance, it needs to discover one or more ALTO servers that can provide suitable guidance.</t>
              <t>In some deployment scenarios, in particular if the information about the network topology is partitioned and distributed over several ALTO servers, it may be necessary to discover an ALTO server outside of the ALTO client's own network domain, in order to get appropriate guidance. This document details applicable scenarios, itemizes requirements, and specifies a procedure for ALTO cross-domain server discovery.</t>
              <t>Technically, the procedure specified in this document takes one IP address or prefix and a U-NAPTR Service Parameter (typically, "ALTO:https") as parameters. It performs DNS lookups (for NAPTR resource records in the "in-addr.arpa." or "ip6.arpa." trees) and returns one or more URIs of information resources related to that IP address or prefix.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8686"/>
          <seriesInfo name="DOI" value="10.17487/RFC8686"/>
        </reference>
        <reference anchor="RFC8895">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Incremental Updates Using Server-Sent Events (SSE)</title>
            <author fullname="W. Roome" initials="W." surname="Roome"/>
            <author fullname="Y. Yang" initials="Y." surname="Yang"/>
            <date month="November" year="2020"/>
            <abstract>
              <t>The Application-Layer Traffic Optimization (ALTO) protocol (RFC 7285) provides network-related information, called network information resources, to client applications so that clients can make informed decisions in utilizing network resources. This document presents a mechanism to allow an ALTO server to push updates to ALTO clients to achieve two benefits: (1) updates can be incremental, in that if only a small section of an information resource changes, the ALTO server can send just the changes and (2) updates can be immediate, in that the ALTO server can send updates as soon as they are available.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8895"/>
          <seriesInfo name="DOI" value="10.17487/RFC8895"/>
        </reference>
        <reference anchor="RFC8896">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Cost Calendar</title>
            <author fullname="S. Randriamasy" initials="S." surname="Randriamasy"/>
            <author fullname="R. Yang" initials="R." surname="Yang"/>
            <author fullname="Q. Wu" initials="Q." surname="Wu"/>
            <author fullname="L. Deng" initials="L." surname="Deng"/>
            <author fullname="N. Schwan" initials="N." surname="Schwan"/>
            <date month="November" year="2020"/>
            <abstract>
              <t>This document is an extension to the base Application-Layer Traffic Optimization (ALTO) protocol. It extends the ALTO cost information service so that applications decide not only 'where' to connect but also 'when'. This is useful for applications that need to perform bulk data transfer and would like to schedule these transfers during an off-peak hour, for example. This extension introduces the ALTO Cost Calendar with which an ALTO Server exposes ALTO cost values in JSON arrays where each value corresponds to a given time interval. The time intervals, as well as other Calendar attributes, are specified in the Information Resources Directory and ALTO Server responses.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8896"/>
          <seriesInfo name="DOI" value="10.17487/RFC8896"/>
        </reference>
        <reference anchor="RFC9240">
          <front>
            <title>An Extension for Application-Layer Traffic Optimization (ALTO): Entity Property Maps</title>
            <author fullname="W. Roome" initials="W." surname="Roome"/>
            <author fullname="S. Randriamasy" initials="S." surname="Randriamasy"/>
            <author fullname="Y. Yang" initials="Y." surname="Yang"/>
            <author fullname="J. Zhang" initials="J." surname="Zhang"/>
            <author fullname="K. Gao" initials="K." surname="Gao"/>
            <date month="July" year="2022"/>
            <abstract>
              <t>This document specifies an extension to the base Application-Layer Traffic Optimization (ALTO) Protocol that generalizes the concept of "endpoint properties", which have been tied to IP addresses so far, to entities defined by a wide set of objects. Further, these properties are presented as maps, similar to the network and cost maps in the base ALTO Protocol. While supporting the endpoints and related Endpoint Property Service defined in RFC 7285, the ALTO Protocol is extended in two major directions. First, from endpoints restricted to IP addresses to entities covering a wider and extensible set of objects; second, from properties for specific endpoints to entire entity property maps. These extensions introduce additional features that allow entities and property values to be specific to a given information resource. This is made possible by a generic and flexible design of entity and property types.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9240"/>
          <seriesInfo name="DOI" value="10.17487/RFC9240"/>
        </reference>
        <reference anchor="RFC9241">
          <front>
            <title>Content Delivery Network Interconnection (CDNI) Footprint and Capabilities Advertisement Using Application-Layer Traffic Optimization (ALTO)</title>
            <author fullname="J. Seedorf" initials="J." surname="Seedorf"/>
            <author fullname="Y. Yang" initials="Y." surname="Yang"/>
            <author fullname="K. Ma" initials="K." surname="Ma"/>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <author fullname="J. Zhang" initials="J." surname="Zhang"/>
            <date month="July" year="2022"/>
            <abstract>
              <t>&lt;p&gt;The Content Delivery Networks Interconnection (CDNI) framework in RFC 6707 defines a set of protocols to interconnect CDNs to achieve multiple goals, including extending the reach of a given CDN. A CDNI Request Routing Footprint &amp; Capabilities Advertisement interface (FCI) is needed to achieve the goals of a CDNI. RFC 8008 defines the FCI semantics and provides guidelines on the FCI protocol, but the exact protocol is not specified. This document defines a new Application-Layer Traffic Optimization (ALTO) service, called "CDNI Advertisement Service", that provides an implementation of the FCI, following the guidelines defined in RFC 8008.&lt;/p&gt;</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9241"/>
          <seriesInfo name="DOI" value="10.17487/RFC9241"/>
        </reference>
        <reference anchor="RFC9275">
          <front>
            <title>An Extension for Application-Layer Traffic Optimization (ALTO): Path Vector</title>
            <author fullname="K. Gao" initials="K." surname="Gao"/>
            <author fullname="Y. Lee" initials="Y." surname="Lee"/>
            <author fullname="S. Randriamasy" initials="S." surname="Randriamasy"/>
            <author fullname="Y. Yang" initials="Y." surname="Yang"/>
            <author fullname="J. Zhang" initials="J." surname="Zhang"/>
            <date month="September" year="2022"/>
            <abstract>
              <t>This document is an extension to the base Application-Layer Traffic Optimization (ALTO) protocol. It extends the ALTO cost map and ALTO property map services so that an application can decide to which endpoint(s) to connect based not only on numerical/ordinal cost values but also on fine-grained abstract information regarding the paths. This is useful for applications whose performance is impacted by specific components of a network on the end-to-end paths, e.g., they may infer that several paths share common links and prevent traffic bottlenecks by avoiding such paths. This extension introduces a new abstraction called the "Abstract Network Element" (ANE) to represent these components and encodes a network path as a vector of ANEs. Thus, it provides a more complete but still abstract graph representation of the underlying network(s) for informed traffic optimization among endpoints.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9275"/>
          <seriesInfo name="DOI" value="10.17487/RFC9275"/>
        </reference>
        <reference anchor="I-D.ietf-alto-performance-metrics">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Performance Cost Metrics</title>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <author fullname="Y. Richard Yang" initials="Y. R." surname="Yang">
              <organization>Yale University</organization>
            </author>
            <author fullname="Young Lee" initials="Y." surname="Lee">
              <organization>Samsung</organization>
            </author>
            <author fullname="Dhruv Dhody" initials="D." surname="Dhody">
              <organization>Huawei</organization>
            </author>
            <author fullname="Sabine Randriamasy" initials="S." surname="Randriamasy">
              <organization>Nokia Bell Labs</organization>
            </author>
            <author fullname="Luis M. Contreras" initials="L. M." surname="Contreras">
              <organization>Telefonica</organization>
            </author>
            <date day="21" month="March" year="2022"/>
            <abstract>
              <t>The cost metric is a basic concept in Application-Layer Traffic
Optimization (ALTO), and different applications may use different
types of cost metrics. Since the ALTO base protocol (RFC 7285)
defines only a single cost metric (namely, the generic "routingcost"
metric), if an application wants to issue a cost map or an endpoint
cost request in order to identify a resource provider that offers
better performance metrics (e.g., lower delay or loss rate), the base
protocol does not define the cost metric to be used.

 This document addresses this issue by extending the specification to
provide a variety of network performance metrics, including network
delay, delay variation (a.k.a. jitter), packet loss rate, hop count,
and bandwidth.

 There are multiple sources (e.g., estimations based on measurements
or a Service Level Agreement) available for deriving a performance
metric. This document introduces an additional "cost-context" field
to the ALTO "cost-type" field to convey the source of a performance
metric.
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-alto-performance-metrics-28"/>
        </reference>
        <reference anchor="I-D.ietf-netconf-tcp-client-server">
          <front>
            <title>YANG Groupings for TCP Clients and TCP Servers</title>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <author fullname="Michael Scharf" initials="M." surname="Scharf">
              <organization>Hochschule Esslingen - University of Applied Sciences</organization>
            </author>
            <date day="17" month="April" year="2023"/>
            <abstract>
              <t>   This document defines three YANG 1.1 modules to support the
   configuration of TCP clients and TCP servers.  The modules include
   basic parameters of a TCP connection relevant for client or server
   applications, as well as client configuration required for traversing
   proxies.  The modules can be used either standalone or in conjunction
   with configuration of other stack protocol layers.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-tcp-client-server-16"/>
        </reference>
        <reference anchor="I-D.ietf-netconf-tls-client-server">
          <front>
            <title>YANG Groupings for TLS Clients and TLS Servers</title>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <date day="17" month="April" year="2023"/>
            <abstract>
              <t>   This document defines three YANG 1.1 modules: the first defines
   features and groupings common to both TLS clients and TLS servers,
   the second defines a grouping for a generic TLS client, and the third
   defines a grouping for a generic TLS server.

Editorial Note (To be removed by RFC Editor)

   This draft contains placeholder values that need to be replaced with
   finalized values at the time of publication.  This note summarizes
   all of the substitutions that are needed.  No other RFC Editor
   instructions are specified elsewhere in this document.

   Artwork in this document contains shorthand references to drafts in
   progress.  Please apply the following replacements:

   *  AAAA --&gt; the assigned RFC value for draft-ietf-netconf-crypto-
      types

   *  BBBB --&gt; the assigned RFC value for draft-ietf-netconf-trust-
      anchors

   *  CCCC --&gt; the assigned RFC value for draft-ietf-netconf-keystore

   *  DDDD --&gt; the assigned RFC value for draft-ietf-netconf-tcp-client-
      server

   *  FFFF --&gt; the assigned RFC value for this draft

   Artwork in this document contains placeholder values for the date of
   publication of this draft.  Please apply the following replacement:

   *  2023-04-17 --&gt; the publication date of this draft
   The "Relation to other RFCs" section Section 1.1 contains the text
   "one or more YANG modules" and, later, "modules".  This text is
   sourced from a file in a context where it is unknown how many modules
   a draft defines.  The text is not wrong as is, but it may be improved
   by stating more directly how many modules are defined.

   The "Relation to other RFCs" section Section 1.1 contains a self-
   reference to this draft, along with a corresponding Informative
   Reference in the Appendix.

   The following Appendix section is to be removed prior to publication:

   *  Appendix B.  Change Log

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-tls-client-server-33"/>
        </reference>
        <reference anchor="I-D.ietf-netconf-http-client-server">
          <front>
            <title>YANG Groupings for HTTP 1.1/2.0 Clients and HTTP Servers</title>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <date day="17" month="April" year="2023"/>
            <abstract>
              <t>   This document defines two YANG modules: the first defines a minimal
   grouping for configuring an HTTP client, and the second defines a
   minimal grouping for configuring an HTTP server.  It is intended that
   these groupings will be used to help define the configuration for
   simple HTTP-based protocols (not for complete web servers or
   browsers).

Editorial Note (To be removed by RFC Editor)

   This draft contains placeholder values that need to be replaced with
   finalized values at the time of publication.  This note summarizes
   all of the substitutions that are needed.  No other RFC Editor
   instructions are specified elsewhere in this document.

   Artwork in this document contains shorthand references to drafts in
   progress.  Please apply the following replacements (note: not all may
   be present):

   *  AAAA --&gt; the assigned RFC value for draft-ietf-netconf-crypto-
      types

   *  DDDD --&gt; the assigned RFC value for draft-ietf-netconf-tcp-client-
      server

   *  FFFF --&gt; the assigned RFC value for draft-ietf-netconf-tls-client-
      server

   *  GGGG --&gt; the assigned RFC value for this draft

   Artwork in this document contains placeholder values for the date of
   publication of this draft.  Please apply the following replacement:

   *  2023-04-17 --&gt; the publication date of this draft
   The "Relation to other RFCs" section Section 1.1 contains the text
   "one or more YANG modules" and, later, "modules".  This text is
   sourced from a file in a context where it is unknown how many modules
   a draft defines.  The text is not wrong as is, but it may be improved
   by stating more directly how many modules are defined.

   The "Relation to other RFCs" section Section 1.1 contains a self-
   reference to this draft, along with a corresponding Informative
   Reference in the Appendix.

   The following Appendix section is to be removed prior to publication:

   *  Appendix A.  Change Log

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-http-client-server-13"/>
        </reference>
        <reference anchor="I-D.ietf-netconf-netconf-client-server">
          <front>
            <title>NETCONF Client and Server Models</title>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <date day="17" month="April" year="2023"/>
            <abstract>
              <t>   This document defines two YANG modules, one module to configure a
   NETCONF client and the other module to configure a NETCONF server.
   Both modules support both the SSH and TLS transport protocols, and
   support both standard NETCONF and NETCONF Call Home connections.

Editorial Note (To be removed by RFC Editor)

   This draft contains placeholder values that need to be replaced with
   finalized values at the time of publication.  This note summarizes
   all of the substitutions that are needed.  No other RFC Editor
   instructions are specified elsewhere in this document.

   Artwork in this document contains shorthand references to drafts in
   progress.  Please apply the following replacements (note: not all may
   be present):

   *  AAAA --&gt; the assigned RFC value for draft-ietf-netconf-crypto-
      types

   *  BBBB --&gt; the assigned RFC value for draft-ietf-netconf-trust-
      anchors

   *  CCCC --&gt; the assigned RFC value for draft-ietf-netconf-keystore

   *  DDDD --&gt; the assigned RFC value for draft-ietf-netconf-tcp-client-
      server

   *  EEEE --&gt; the assigned RFC value for draft-ietf-netconf-ssh-client-
      server

   *  FFFF --&gt; the assigned RFC value for draft-ietf-netconf-tls-client-
      server

   *  GGGG --&gt; the assigned RFC value for draft-ietf-netconf-http-
      client-server

   *  HHHH --&gt; the assigned RFC value for this draft
   Artwork in this document contains placeholder values for the date of
   publication of this draft.  Please apply the following replacement:

   *  2023-04-17 --&gt; the publication date of this draft

   The "Relation to other RFCs" section Section 1.1 contains the text
   "one or more YANG modules" and, later, "modules".  This text is
   sourced from a file in a context where it is unknown how many modules
   a draft defines.  The text is not wrong as is, but it may be improved
   by stating more directly how many modules are defined.

   The "Relation to other RFCs" section Section 1.1 contains a self-
   reference to this draft, along with a corresponding Informative
   Reference in the Appendix.

   The following Appendix section is to be removed prior to publication:

   *  Appendix A.  Change Log

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-netconf-client-server-29"/>
        </reference>
        <reference anchor="I-D.ietf-netconf-restconf-client-server">
          <front>
            <title>RESTCONF Client and Server Models</title>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <date day="17" month="April" year="2023"/>
            <abstract>
              <t>   This document defines two YANG modules, one module to configure a
   RESTCONF client and the other module to configure a RESTCONF server.
   Both modules support the TLS transport protocol with both standard
   RESTCONF and RESTCONF Call Home connections.

Editorial Note (To be removed by RFC Editor)

   This draft contains placeholder values that need to be replaced with
   finalized values at the time of publication.  This note summarizes
   all of the substitutions that are needed.  No other RFC Editor
   instructions are specified elsewhere in this document.

   Artwork in this document contains shorthand references to drafts in
   progress.  Please apply the following replacements (note: not all may
   be present):

   *  AAAA --&gt; the assigned RFC value for draft-ietf-netconf-crypto-
      types

   *  BBBB --&gt; the assigned RFC value for draft-ietf-netconf-trust-
      anchors

   *  CCCC --&gt; the assigned RFC value for draft-ietf-netconf-keystore

   *  DDDD --&gt; the assigned RFC value for draft-ietf-netconf-tcp-client-
      server

   *  EEEE --&gt; the assigned RFC value for draft-ietf-netconf-ssh-client-
      server

   *  FFFF --&gt; the assigned RFC value for draft-ietf-netconf-tls-client-
      server

   *  GGGG --&gt; the assigned RFC value for draft-ietf-netconf-http-
      client-server

   *  HHHH --&gt; the assigned RFC value for draft-ietf-netconf-netconf-
      client-server

   *  IIII --&gt; the assigned RFC value for this draft

   Artwork in this document contains placeholder values for the date of
   publication of this draft.  Please apply the following replacement:

   *  2023-04-17 --&gt; the publication date of this draft

   The "Relation to other RFCs" section Section 1.1 contains the text
   "one or more YANG modules" and, later, "modules".  This text is
   sourced from a file in a context where it is unknown how many modules
   a draft defines.  The text is not wrong as is, but it may be improved
   by stating more directly how many modules are defined.

   The "Relation to other RFCs" section Section 1.1 contains a self-
   reference to this draft, along with a corresponding Informative
   Reference in the Appendix.

   The following Appendix section is to be removed prior to publication:

   *  Appendix A.  Change Log

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-restconf-client-server-29"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC7921">
          <front>
            <title>An Architecture for the Interface to the Routing System</title>
            <author fullname="A. Atlas" initials="A." surname="Atlas"/>
            <author fullname="J. Halpern" initials="J." surname="Halpern"/>
            <author fullname="S. Hares" initials="S." surname="Hares"/>
            <author fullname="D. Ward" initials="D." surname="Ward"/>
            <author fullname="T. Nadeau" initials="T." surname="Nadeau"/>
            <date month="June" year="2016"/>
            <abstract>
              <t>This document describes the IETF architecture for a standard, programmatic interface for state transfer in and out of the Internet routing system. It describes the high-level architecture, the building blocks of this high-level architecture, and their interfaces, with particular focus on those to be standardized as part of the Interface to the Routing System (I2RS).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7921"/>
          <seriesInfo name="DOI" value="10.17487/RFC7921"/>
        </reference>
        <reference anchor="RFC7971">
          <front>
            <title>Application-Layer Traffic Optimization (ALTO) Deployment Considerations</title>
            <author fullname="M. Stiemerling" initials="M." surname="Stiemerling"/>
            <author fullname="S. Kiesel" initials="S." surname="Kiesel"/>
            <author fullname="M. Scharf" initials="M." surname="Scharf"/>
            <author fullname="H. Seidel" initials="H." surname="Seidel"/>
            <author fullname="S. Previdi" initials="S." surname="Previdi"/>
            <date month="October" year="2016"/>
            <abstract>
              <t>Many Internet applications are used to access resources such as pieces of information or server processes that are available in several equivalent replicas on different hosts. This includes, but is not limited to, peer-to-peer file sharing applications. The goal of Application-Layer Traffic Optimization (ALTO) is to provide guidance to applications that have to select one or several hosts from a set of candidates capable of providing a desired resource. This memo discusses deployment-related issues of ALTO. It addresses different use cases of ALTO such as peer-to-peer file sharing and Content Delivery Networks (CDNs) and presents corresponding examples. The document also includes recommendations for network administrators and application designers planning to deploy ALTO, such as recommendations on how to generate ALTO map information.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7971"/>
          <seriesInfo name="DOI" value="10.17487/RFC7971"/>
        </reference>
        <reference anchor="RFC8346">
          <front>
            <title>A YANG Data Model for Layer 3 Topologies</title>
            <author fullname="A. Clemm" initials="A." surname="Clemm"/>
            <author fullname="J. Medved" initials="J." surname="Medved"/>
            <author fullname="R. Varga" initials="R." surname="Varga"/>
            <author fullname="X. Liu" initials="X." surname="Liu"/>
            <author fullname="H. Ananthakrishnan" initials="H." surname="Ananthakrishnan"/>
            <author fullname="N. Bahadur" initials="N." surname="Bahadur"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document defines a YANG data model for Layer 3 network topologies.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8346"/>
          <seriesInfo name="DOI" value="10.17487/RFC8346"/>
        </reference>
        <reference anchor="RFC8641">
          <front>
            <title>Subscription to YANG Notifications for Datastore Updates</title>
            <author fullname="A. Clemm" initials="A." surname="Clemm"/>
            <author fullname="E. Voit" initials="E." surname="Voit"/>
            <date month="September" year="2019"/>
            <abstract>
              <t>This document describes a mechanism that allows subscriber applications to request a continuous and customized stream of updates from a YANG datastore. Providing such visibility into updates enables new capabilities based on the remote mirroring and monitoring of configuration and operational state.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8641"/>
          <seriesInfo name="DOI" value="10.17487/RFC8641"/>
        </reference>
        <reference anchor="RFC6291">
          <front>
            <title>Guidelines for the Use of the "OAM" Acronym in the IETF</title>
            <author fullname="L. Andersson" initials="L." surname="Andersson"/>
            <author fullname="H. van Helvoort" initials="H." surname="van Helvoort"/>
            <author fullname="R. Bonica" initials="R." surname="Bonica"/>
            <author fullname="D. Romascanu" initials="D." surname="Romascanu"/>
            <author fullname="S. Mansfield" initials="S." surname="Mansfield"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>At first glance, the acronym "OAM" seems to be well-known and well-understood. Looking at the acronym a bit more closely reveals a set of recurring problems that are revisited time and again.</t>
              <t>This document provides a definition of the acronym "OAM" (Operations, Administration, and Maintenance) for use in all future IETF documents that refer to OAM. There are other definitions and acronyms that will be discussed while exploring the definition of the constituent parts of the "OAM" term. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="161"/>
          <seriesInfo name="RFC" value="6291"/>
          <seriesInfo name="DOI" value="10.17487/RFC6291"/>
        </reference>
        <reference anchor="RFC8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="L. Berger" initials="L." role="editor" surname="Berger"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document captures the current syntax used in YANG module tree diagrams. The purpose of this document is to provide a single location for this definition. This syntax may be updated from time to time based on the evolution of the YANG language.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="215"/>
          <seriesInfo name="RFC" value="8340"/>
          <seriesInfo name="DOI" value="10.17487/RFC8340"/>
        </reference>
      </references>
    </references>
    <?line 2627?>

<section anchor="alto-ext-model">
      <name>Examples of Extending the ALTO O&amp;M Data Model</name>
      <t>Developers and operators can also extend the ALTO O&amp;M data model to align
with their own implementations. Specifically, the following nodes of the data
model can be augmented:</t>
      <ul spacing="normal">
        <li>The <tt>server-discovery-manner</tt> choice of the <tt>server-discovery</tt>.</li>
        <li>The <tt>authentication</tt> choice of each <tt>auth-client</tt>.</li>
        <li>The <tt>data-source</tt> choice.</li>
        <li>The <tt>algorithm</tt> choice of the <tt>resource-params</tt> of each <tt>resource</tt>.</li>
      </ul>
      <section anchor="example-server-disc">
        <name>An Example Module for Extended Server Discovery Manners</name>
        <t>The base data model defined by ietf-alto.yang only includes a reverse DNS based
server discovery manner. The following example module demonstrates how
additional server discovery manners can be augmented into the base data model.</t>
        <t>The case <tt>internet-routing-registry</tt> allows the ALTO server to update the
server URI to the attribute of the corresponding aut-num class in IRR.</t>
        <t>The case <tt>peeringdb</tt> allows the ALTO server to update the server URI to the org
object of the organization record in PeeringDB.</t>
        <artwork><![CDATA[
module example-vendor-alto-server-discovery {
  yang-version 1.1;

  namespace "https://example.com/ns/vendor-alto-server-discovery";
  prefix vendor-alto-disc;

  import ietf-alto {
    prefix alto;
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

  import ietf-inet-types {
    prefix inet;
    reference
      "RFC 6991: Common YANG Data Types";
  }

  organization
    "Example, Inc.";

  contact
    "Example, Inc.
     Customer Service

     E-mail: alto-oam-yang@example.com";

  description
    "This module contains a collection of vendor-specific cases of
     server discovery mechanisms for ALTO.";

  revision 2023-02-28 {
    description
      "Version 1.0";
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

  augment "/alto:alto/alto:alto-server/alto:server-discovery"
        + "/alto:method" {
    description
      "Examples of server discovery mechanisms provided by the ALTO
       server.";
    case internet-routing-registry {
      description
        "Update descr attributes of an aut-num class in an Internet
         Routing Registry (IRR) database for ALTO server discovery
         using Routing Policy Specification Language (RPSL).";
      reference
        "RFC 2622: Routing Policy Specification Language (RPSL).";
      container irr-params {
        description
          "Configuration parameters for IRR database.";
        leaf aut-num {
          type inet:as-number;
          description
            "The Autonomous System (AS) number to be updated.";
        }
      }
    }
    case peeringdb {
      description
        "Update metadata of a network record in PeeringDB database
         for ALTO server discovery using PeeringDB lookup.";
      container peeringdb-params {
        description
          "Configuration parameters for PeeringDB database.";
        leaf org-id {
          type uint32;
          description
            "Specifies an identifier that refers to the org object
             of the organization record in PeeringDB.";
        }
      }
    }
  }

  augment "/alto:alto/alto:alto-client"
        + "/alto:server-discovery/alto:method" {
    description
      "Examples of server discovery mechanisms used by an ALTO
       client.";
    case internet-routing-registry {
      description
        "Use IRR to discover an ALTO server.";
      reference
        "RFC 2622: Routing Policy Specification Language (RPSL).";
      container irr-params {
        description
          "Configuration for IRR query using RPSL.";
        leaf whois-server {
          type inet:host;
          description
            "Whois server for an IRR query using RPSL.";
        }
      }
    }
    case peeringdb {
      description
        "Use PeeringDB to discover an ALTO server.";
      container peeringdb-params {
        description
          "Configuration for PeeringDB queries.";
        leaf peeringdb-endpoint {
          type inet:uri;
          description
            "Endpoint of PeeringDB API server.";
        }
      }
    }
  }
}
]]></artwork>
      </section>
      <section anchor="example-client-auth">
        <name>An Example Module for Extended Client Authentication Approaches</name>
        <t>The base data model "ietf-alto" only includes the client
authentication approaches directly provided by the HTTP server. However, an
implementation may authenticate clients in different ways. For example, an implementation may
delegate the authentication to a third-party OAuth 2.0 server. The following
example module demonstrates how additional client authentication approaches can
enrich the base data model.</t>
        <t>In this example, the <tt>oauth2</tt> case includes the URI to a third-party OAuth 2.0
based authorization server that the ALTO server can redirect to for the client
authentication.</t>
        <artwork><![CDATA[
module example-vendor-alto-auth {
  yang-version 1.1;

  namespace "https://example.com/ns/vendor-alto-auth";
  prefix vendor-alto-auth;

  import ietf-inet-types {
    prefix inet;
    reference
      "RFC 6991: Common YANG Data Types";
  }

  import ietf-alto {
    prefix alto;
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

  organization
    "Example, Inc.";

  contact
    "Example, Inc.
     Customer Service

     E-mail: alto-oam-yang@example.com";

  description
    "This module contains a collection of vendor-specific cases of
     client authentication approaches for ALTO.";

  revision 2023-02-28 {
    description
      "Version 1.0";
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

  augment "/alto:alto/alto:alto-server/alto:auth-client"
        + "/alto:authentication" {
    description
      "Example of extended ALTO client authentication approaches.";
    case oauth2 {
      description
        "Example of authentication by a third-party OAuth 2.0
         server.";
      container oauth2 {
        description
          "Parameters for authentication by a third-party OAuth 2.0
           server.";
        leaf oauth2-server {
          type inet:uri;
          description
            "The URI to the authorization server.";
        }
      }
    }
  }
}
]]></artwork>
      </section>
      <section anchor="example-data-source">
        <name>Example Module for Extended Data Sources</name>
        <t>The base data model defined by ietf-alto.yang does not include any choice cases
for specific data sources. The following example module demonstrates how a
implementation-specific data source can be augmented into the base data model.</t>
        <t>The <tt>yang-datastore</tt> case is used to import the YANG data from a YANG
model-driven datastore. It includes:</t>
        <ul spacing="normal">
          <li>
            <tt>datastore</tt> to indicate which datastore is fetched.</li>
          <li>
            <tt>target-paths</tt> to specify the list of nodes or subtrees in the datastore.</li>
          <li>
            <tt>protocol</tt> to indicate which protocol is used to access the datastore. Either
<tt>restconf</tt> or <tt>netconf</tt> can be used.</li>
        </ul>
        <artwork><![CDATA[
module example-vendor-alto-data-source {
  yang-version 1.1;

  namespace "https://example.com/ns/vendor-alto-data-source";
  prefix vendor-alto-ds;

  import ietf-alto {
    prefix alto;
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

  import ietf-datastores {
    prefix ds;
    reference
      "RFC 8342: Network Management Datastore Architecture (NMDA)";
  }

  import ietf-yang-push {
    prefix yp;
    reference
      "RFC 8641: Subscription to YANG Notifications for Datastore
                 Updates";
  }

  import ietf-netconf-client {
    prefix ncc;
    reference
      "RFC HHHH: NETCONF Client and Server Models";
  }

  import ietf-restconf-client {
    prefix rcc;
    reference
      "RFC IIII: YANG Groupings for RESTCONF Clients and RESTCONF
                 Servers";
  }

  organization
    "Example, Inc.";

  contact
    "Example, Inc.
     Customer Service

     E-mail: alto-oam-yang@example.com";

  description
    "This module contains a collection of vendor-specific cases of
     data sources for ALTO.";

  revision 2023-02-28 {
    description
      "Version 1.0";
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

  identity yang-datastore {
    base alto:source-type;
    description
      "Identity for data source of YANG-based datastore.";
  }

  identity protocol-type {
    description
      "Base identity for protocol type.";
  }

  identity netconf {
    base protocol-type;
    description
      "Identity for NETCONF protocol.";
  }

  identity restconf {
    base protocol-type;
    description
      "Identity for RESTCONF protocol.";
  }

  augment "/alto:alto/alto:alto-server/alto:data-source"
        + "/alto:source-params" {
    description
      "Example of data source for YANG datastore.";
    case yang-datastore {
      when 'derived-from-or-self(alto:source-type,'
         + '"yang-datastore")';
      description
        "Example data source for local or remote YANG datastore.";
      container yang-datastore-source-params {
        description
          "YANG datastore specific configuration.";
        leaf datastore {
          type ds:datastore-ref;
          mandatory true;
          description
            "Reference of the datastore from which to get data.";
        }
        list target-paths {
          key name;
          description
            "XML Path Language (XPath) to subscribed YANG datastore
             node or subtree.";
          leaf name {
            type string;
            description
              "Name of the supported XPath or subtree filters.";
          }
          uses yp:selection-filter-types;
        }
        leaf protocol {
          type identityref {
            base protocol-type;
          }
          description
            "Indicates the protocol that is used to access the YANG
             datastore.";
        }
        container restconf {
          uses rcc:restconf-client-app-grouping {
            when 'derived-from-or-self(../protocol, "restconf")';
          }
          description
            "Parameters for the RESTCONF endpoint of the YANG
             datastore.";
        }
        container netconf {
          uses ncc:netconf-client-app-grouping {
            when 'derived-from-or-self(../protocol, "netconf")';
          }
          description
            "Parameters for the NETCONF endpoint of the YANG
             datastore.";
        }
      }
    }
  }
}
]]></artwork>
      </section>
      <section anchor="example-alg">
        <name>An Example Module for Information Resource Creation Algorithm</name>
        <t>The base data model "ietf-alto" does not include any choices cases
for information resource creation algorithms. But developers may augment the
"ietf-alto" module with definitions for custom creation algorithms
for different information resources. The following example module demonstrates
the parameters of a network map creation algorithm that translates an IETF
layer 3 unicast topology into a network map.</t>
        <artwork><![CDATA[
module: example-vendor-alto-alg

  augment /alto:alto/alto:alto-server/alto:resource
            /alto:alto-networkmap-params/alto:algorithm:
    +--:(l3-unicast-cluster)
       +--rw l3-unicast-cluster-algorithm
          +--rw l3-unicast-topo
          |  +--rw source-datastore    alto:data-source-ref
          |  +--rw topo-name?          leafref
          +--rw depth?             uint32
]]></artwork>
        <t>This example defines a creation algorithm called <tt>l3-unicast-cluster-algorithm</tt>
for the network map resource. It takes two algorithm-specific parameters:</t>
        <dl>
          <dt>'l3-unicast-topo':</dt>
          <dd>
            <t>This parameter contains information referring to the target path name of an
operational <tt>yang-datastore</tt> data source node (See <xref target="example-data-source"/>)
subscribed in the <tt>data-source</tt> list (See <xref target="data-source"/>). The referenced
target path in the corresponding <tt>yang-datastore</tt> data source is assumed for
an IETF layer 3 unicast topology defined in <xref target="RFC8346"/>. The algorithm uses
the topology data from this data source to compute the ALTO network map
resource. 'source-datastore' refers to the 'source-id' of the operational
<tt>yang-datastore</tt> data source node, and 'topo-name' refers to the 'name' of
the target path in the source datastore.</t>
          </dd>
          <dt>'depth':</dt>
          <dd>
            <t>This optional parameter sets the depth of the clustering algorithm. For
example, if the depth is set to 1, the algorithm will generate PID for every
l3-node in the topology.</t>
          </dd>
        </dl>
        <t>The creation algorithm can be reactively called once the referenced data source
updates. Therefore, the ALTO network map resource can be updated dynamically.
The update of the reference data source depends on the used <tt>update-policy</tt> (See
<xref target="data-source"/>).</t>
        <artwork><![CDATA[
module example-vendor-alto-alg {
  yang-version 1.1;

  namespace "https://example.com/ns/vendor-alto-alg";
  prefix vendor-alto-alg;

  import ietf-alto {
    prefix alto;
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

  import ietf-datastores {
    prefix ietf-datastores;
    reference
      "RFC 8342: Network Management Datastore Architecture (NMDA)";
  }

  import example-vendor-alto-data-source {
    prefix alto-ds;
  }

  organization
    "Example, Inc.";

  contact
    "Example, Inc.
     Customer Service

     E-mail: alto-oam-yang@example.com";

  description
    "This module contains a collection of vendor-specific cases of
     information resource creation algorithms for ALTO.";

  revision 2023-02-28 {
    description
      "Version 1.0";
    reference
      "RFC XXXX: YANG Data Models for the Application-Layer
                 Traffic Optimization (ALTO) Protocol";
  }

  augment "/alto:alto/alto:alto-server/alto:resource"
        + "/alto:alto-networkmap-params/alto:algorithm" {
    description
      "Example of a network map creation algorithm.";
    case l3-unicast-cluster {
      description
        "Example algorithm translating a Layer 3 unicast topology
         of Interface to the Routing System (I2RS) to an ALTO
         network map.";
      container l3-unicast-cluster-algorithm {
        description
          "Parameters for l3-unicast-cluster algorithm.";
        container l3-unicast-topo {
          leaf source-datastore {
            type alto:data-source-ref;
            must 'deref(.)/../alto-ds:yang-datastore-source-params'
               + '/alto-ds:datastore '
               + '= "ietf-datastores:operational"'
               {
              error-message
                "The referenced YANG datastore MUST be
                 operational";
            }
            mandatory true;
            description
              "The data source to YANG datastore.";
          }
          leaf topo-name {
            type leafref {
              path '/alto:alto/alto:alto-server/alto:data-source'
                 + '[alto:source-id'
                 + ' = current()/../source-datastore]'
                 + '/alto-ds:yang-datastore-source-params'
                 + '/alto-ds:target-paths/alto-ds:name';
            }
            description
              "The name of the IETF Layer 3 unicast topology.";
          }
          description
            "The data source info to an IETF Layer 3 unicast
             topology.";
        }
        leaf depth {
          type uint32;
          description
            "The depth of the clustering.";
        }
      }
    }
  }
}
]]></artwork>
      </section>
      <section anchor="example-usage">
        <name>Example Usage</name>
        <t>This section presents a complete example showing how the base data model and
all the vendor extended models above are used to set up an ALTO server and
configure corresponding components (e.g., data source listener, information
resource, access control).</t>
        <artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

{
  "ietf-alto:alto": {
    "alto-server": {
      "listen": {
        "https": {
          "tcp-server-parameters": {
            "local-address": "0.0.0.0"
          },
          "alto-server-parameters": {},
          "http-server-parameters": {
            "server-name": "alto.example.com",
            "client-authentication": {
              "users": {
                "user": [
                  {
                    "user-id": "alice",
                    "basic": {
                      "user-id": "alice",
                      "password": "$0$p8ssw0rd"
                    }
                  }
                ]
              }
            }
          },
          "tls-server-parameters": {
            "server-identity": {}
          }
        }
      },
      "server-discovery": {
        "example-vendor-alto-server-discovery:irr-params": {
          "aut-num": 64496
        }
      },
      "auth-client": [
        {
          "client-id": "alice",
          "https-auth-client": {
            "user-id": "alice"
          }
        },
        {
          "client-id": "bob",
          "example-vendor-alto-auth:oauth2": {
            "oauth2-server": "https://auth.example.com/login"
          }
        }
      ],
      "role": [
        {
          "role-name": "group0",
          "client": [
            "alice",
            "bob"
          ]
        }
      ],
      "data-source": [
        {
          "source-id": "test-yang-ds",
          "source-type": "example-vendor-alto-data-source:yang-\
                                                          datastore",
          "feed-interval": 30,
          "example-vendor-alto-data-source:yang-datastore-source-\
                                                           params": {
            "datastore": "ietf-datastores:operational",
            "target-paths": [
              {
                "name": "network-topology",
                "datastore-xpath-filter": "/network-topology:network\
           -topology/topology[topology-id=bgp-example-ipv4-topology]"
              }
            ],
            "protocol": "restconf",
            "restconf": {
              "listen": {
                "endpoint": [
                  {
                    "name": "example restconf server",
                    "https": {
                      "tcp-server-parameters": {
                        "local-address": "172.17.0.2"
                      },
                      "http-client-parameters": {
                        "client-identity": {
                          "basic": {
                            "user-id": "carol",
                            "cleartext-password": "secret"
                          }
                        }
                      }
                    }
                  }
                ]
              }
            }
          }
        }
      ],
      "resource": [
        {
          "resource-id": "default-network-map",
          "resource-type": "network-map",
          "accepted-role": [
            "group0"
          ],
          "alto-networkmap-params": {
            "is-default": true,
            "example-vendor-alto-alg:l3-unicast-cluster-algorithm": {
              "l3-unicast-topo": {
                "source-datastore": "test-yang-ds",
                "topo-name": "network-topology"
              },
              "depth": 2
            }
          }
        }
      ]
    }
  }
}
]]></artwork>
      </section>
    </section>
    <section anchor="a-sample-alto-server-architecture-to-implement-alto-om-yang-modules">
      <name>A Sample ALTO Server Architecture to Implement ALTO O&amp;M YANG Modules</name>
      <t><xref target="alto-ref-arch"/> shows a sample architecture for an ALTO server
implementation. It indicates the major server components that an ALTO server
usually needs to include and the YANG modules that these server components
need to implement.</t>
      <ul empty="true">
        <li>
          <t>This section does not intend to impose an internal structure of server
implementations, but is provided to exemplify how the various data model
components can be used, including having provisions for future augmentations.</t>
        </li>
      </ul>
      <t>The following server components need to implement the 'ietf-alto' module (<xref target="alto-model"/>):</t>
      <dl>
        <dt>Server manager:</dt>
        <dd>
          <t>Provides the functionality and configuration of the server-level
  management, including server listen stack setup, server discovery setup,
  logging system configuration, global metadata, and server-level security
  configuration.</t>
        </dd>
        <dt>Information resource manager:</dt>
        <dd>
          <t>Provides the operation and management for creating, updating, and
  removing ALTO information resources.</t>
        </dd>
        <dt>Data source listener:</dt>
        <dd>
          <t>An ALTO server may start multiple data source listeners. Each data source
  listener defines a communication endpoint that can fetch ALTO-related
  information from data sources. The information can be either raw
  network/computation information or pre-processed ALTO-level information.</t>
        </dd>
      </dl>
      <t>The following components need to implement the 'ietf-alto-stats' module
(<xref target="alto-stats-model"/>) to provide statistics information:</t>
      <dl>
        <dt>Performance monitor:</dt>
        <dd>
          <t>Collects ALTO-specific performance metrics at a running ALTO server.</t>
        </dd>
        <dt>Logging and fault manager:</dt>
        <dd>
          <t>Collects runtime logs and failure events that are generated by an ALTO server and the service
  of each ALTO information resource.</t>
        </dd>
      </dl>
      <t>The following components are also important for an ALTO server, although they
are not in the scope of the data models defined in this document:</t>
      <dl>
        <dt>Data broker:</dt>
        <dd>
          <t>An ALTO server may implement a data broker to store network/computation
  information collected from data sources or cache some preprocessed data. The
  service of the ALTO information resource can read them from the data broker
  to calculate ALTO responses and return to ALTO clients.</t>
        </dd>
        <dt>Algorithm plugin:</dt>
        <dd>
          <t>The service of each ALTO information resource needs to configure an algorithm to decide
  how to calculate the ALTO responses. The algorithm plugins implement those
  algorithms. User-specified YANG modules can be applied to different algorithm
  plugins by augmenting the ALTO modules
  (<xref target="alto-ext-model"/>).</t>
        </dd>
      </dl>
      <t>Generally, the ALTO server components illustrated above have the following
interactions with each other:</t>
      <ul spacing="normal">
        <li>Both the server manager and information resource manager will report
statistics data to the performance monitor and the logging and fault manager.</li>
        <li>The algorithm plugins will register callbacks to the corresponding ALTO
information resources upon configuration; Once an ALTO information
resource is requested, the registered callback algorithm will be invoked.</li>
        <li>A data source listener will fetch data from the configured data source using
the corresponding data source API in either proactive mode (polling) or
reactive mode (subscription/publication).</li>
        <li>A data source listener will send the preprocessed data to a data
broker.</li>
        <li>An algorithm plugin may read data from an optional data broker to calculate
the ALTO information resource.</li>
      </ul>
      <figure anchor="alto-ref-arch">
        <name>A Sample ALTO Server Architecture and ALTO YANG Modules</name>
        <artwork><![CDATA[
  +----------------------+      +-----------------+
  | Performance Monitor: |<-----| Server Manager: |
  |  "ietf-alto-stats"   |<-+ +-|  "ietf-alto"    |
  +----------------------+  | | +-----------------+
                          report
  +----------------------+  | | +-------------------+
  | Logging and Fault    |  +---| Information       |
  | Manager:             |<---+ | Resource Manager: |
  | "ietf-alto-stats"    |<-----|    "ietf-alto"    |
  +----------------------+      +-------------------+
                                         ^|
                                         || callback
                                         |v
     .............          ................................
    /             \ <------ . Algorithm Plugin:            .
    . Data Broker .  read   .   "example-vendor-alto-alg"  .
    ...............         ................................
           ^
           | write
  +----------------+  Data Source  ++=============++
  | Data Source    |      API      ||             ||
  | Listener:      | <=====-=====> || Data Source ||
  |  "ietf-alto"   |               ||             ||
  +----------------+               ++=============++
]]></artwork>
      </figure>
      <!-- End of sections -->

</section>
    <section anchor="ack" numbered="false">
      <name>Acknowledgements</name>
      <t>The authors thank Qin Wu for the help with drafting the initial version of the
YANG modules. Big thanks also to ALTO WG chairs (Mohamed Boucadair and Qin Wu)
and Adrian Farrel, Dong Guo, Jordi Ros Giralt, Luis M. Contreras, Mahdi
Soleimani, Qiao Xiang, Shenshen Chen, and Y. Richard Yang for their thorough
reviews, shepherding, and valuable feedback.</t>
      <t>Thanks to Dan Romascanu for the opsdir review, Andy Bierman for the yangdoctors
review, and Spencer Dawkins for the tsvart review.</t>
      <t>Thanks to Martin Duke for the careful AD review.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+19e38bx5Hg//Mpeun7LcmYAEVKliU4TkKLss2sJGtJer17
ie88BIbERIMZZGZAGpGVr3If5r7Y1aMf1TM9A4CkLCW32DuHAvpRXV1dXV3P
wWAQTYpxHs+SkZqU8WU9SJP6chBndTEo4tlgGedXg4PDqE7rDJr819Grb9Rx
XMfqZTFJskpdFqWqp4k6ms+zdBzXaZEPXsTLpFTnMNplOlbfzet0lv6NflI7
Ry/Ov9tVr8uiLsZFFsUXF2VyPVL4tfruX1/SBBGMk1wV5XKkqnoSRem8HKm6
XFT14YMHTx8cRnGZxCP1KqlvivJNFeF/r8piMdfj/PBN9CZZwrcT+GJRFzOa
e0+dJeV1Ok5w9uu0gq/S/GpPPSvyuiyyPQA0KallFFV1nE/+d5wVOax5mVTR
PB1FCqAp03HN3yg1LmazJK8r8+80z1LTXqlkktYw/kjlBfwLVmt+wIXP5rEb
B76YJPN6OlIPcZR5mRd1epkmE923Ksq6TC7tPNVyJv/ZGK1aXNhvoHsUL+pp
UQL0A/gRgYSOfxyq/zmFjaVveO//CLD+vIhz9cckr5Jc/F6UV3Gu92+kzov8
6i+p+j5Pr5OySusltUlmcZqN1F/0IMN8+Dfs/4cr/H4I8FArQF+SAFiPnjx4
oJ7FxfZRrr694RHGMNRInWGvaZzyV0BhI3X44ODJg0f6iwVsFTR7Nk3z2FvR
8VAdT4vJUqzoeFoursW3/jq+XcQ3SarOk/E0L7LiKiXk2ZVMsPMQj0LHGo7T
62VcTeEfegz1Oi7f7KkfpmmdwOZlE7Gsr2BVQExlQt+VyRWB8G9xmcNJehOL
1X72+MGDx4/91Z7kk9Rf7b8N1TdxIdb6b3FqvzEQbr0qhoeP1FkBBACkP6bz
d7Cn/iud4j6fFvFkS8D4bJrkV5OFB+FZOsa2Ar7HBw/gE9wNRrHt1EEib+L0
Ki7+UI0Xw2SyGI5zb2GnQ3U2nhZ1LdZ2WmRwGOX3/k4eJ4u6Gk9xH7Lkjd4m
PRv3HXLfP9TcYDhJPESdTOLBKZBJUg3O6jL+v/8nUYcCMcdxOQN+MKklGh4d
Pv3Mx8I3STmL86W3nH8fqpexWMq/p4tLIAXzpd2pgwcHsE+X9Q0wNnV0neSL
BPZpAWgEOmOmI7fqVZzjSfO26o8pDFwt5MGBrTo47N0qPgQSYbP4rwzjwR+m
9CMRfpQXJTLR6wS54OnXzw4PDp7qPx8+fvJE//nZo8NH+s/HDw4fmD8PHx2Y
P58+NX9+fvjkM/fnY/0nnHTT7cnDR4fmz4PPH9k/nzx1DcxgTx67EZ48/cz9
ab59emjHferAeXr4ObU9GRwP3a0Ht8AlLjcfJ4NZgsivvEZ5Uo+L/HJQj+eD
cZbCDTCo4GJJynCrrFqj1bSu1xnM/O/qlmVSBZum+WVjKz9/emj35OnnBw65
FqOPEWFRNBgMVHwB1AhXSxSdT9NKgeSwwCtQTYDl5UmlYhYQJiggzFBAIPnA
XqzVnjqazNIcaVrfyXA8o5dxmtdJjhhXO98dvdxV/wpHJI+vEhq8uNxcwoiM
hDFU59C3IAgAFBgLWBNJCYwSNYZ/L6oEpsAFOcDrQu0c7EKrOlrMGQDXa0/t
HO4qRHB6tYAzq8eapNW4gD+W8PtD+B3ElBpO8mIO4ya01DKZQQMeyu4FQA37
VSzKcQIY2nm0C8cQV0+zxmP4tsK5UErBBSTxeEojRKERCKVq5zMEL8uA7QOb
gRZVDbjLeIGXZTFrrojwFMUOx2qOUtJEYyjOqqILTQ4NNB5TXBXRL7PZIscB
E3WTwjX0Ji9uPPRXQyasWTqZZEkUfQK3HaxzshizILYJmeGK7k5qdyGzi7iC
dvNFOS8AVUS3AH4TVlwREMqiqpIJEIG7mx9H0OXtW80d370b4vpvSbxwYn+D
xKsCxAu/9JAu/toiXLWacKHfemQb7M9AdRCs4QCCXBk1H4Re//TjzieArHmy
CwRZjcv0AkjyZhrXuLOIK/gfEOFxa6nZkHqUyV8XaUlkVu1SM/w2+RnIE7j1
X3c1cQOYABiACHsAUMhehsgjtxyNBqY7oHQ4NriuHsq7WgCOJupiKcgO2keC
7Ag4/jdcCECG6iiDN8Tiakq7QGsyW9KaIaeZI3tkQazIsyWADvQOaCpyHmMx
n8OrxowC8OvNmOvzpBrwRNgs+RmpAuQn3hB8o8XlBL6GE43POZC4qBsKCe/e
7el/gEAA/4jMPx7bX1AokP84EP/4HPvQxG/frhQP7EmdJDVIUYBeoIv0KjfL
83cgzbIFMSU+/UgFNDA1IMqI7Hd4Eir9C4jGxQyREM/mGaLyUk2LGyRoQsCk
ReoAZlTNk3GKzEtyjRQHwN1hTqlQ6qymSOkSHhjVzIx8+VRS4guQEBdw1HnZ
8NhW+Nqu1NbL78/Ot/b4f9Wr7+jv0+f//v3J6fNj/Pvs26MXL+wfpsXZt999
/wJ+j/Rfruez716+fP7qmDvDt6rx1cuj/9riG2/ru9fnJ9+9Onqx1SZCXCDg
6SJRyP3LOR6tiYore35pJ7569lodPGIKQAEXKE+T0+eP3r2LbuCBxFMVSNH8
T9jeJXKhJC5xiDjLgP3M0xr4zx5OwGidJmUyhKdhwtRPuIpcr6y4IbZVJWbA
ILzEkeD3tITnBJxz4I6Z2YdZEqM2A9nTb/8F7tPnCOYlbPiYt3gw+B1u4tG4
LPLljNnUEeleUiaC5lVLpxWBvQSmXNzgqYt1Z7hakJpQPByteV1G0bPX33OH
ZzA6gg43J94QODC8FEGiPH51xi2OC2Qa8MoBaj9bVnUCD5Bvz89f86/fLuEE
1kCcOFFeXcKMVpsUnZyecqsTxBsIw/ACXBDLOIV3Epy6ZRTBrc9tVsgKypMV
DLd8qOiO/j09bJ4Cy9iFEf/VjHj0Uve0EkV/xyN4m1tgclRWTYvS4uz1yTH/
+FpfbQO+IybwZIWxUUdE9EOyYHT+TGOI8DJLK2SJRrslcHT+4ky0IzbMGweQ
Lkp8rkffn55wE9gZZHaAPb6lxcRATp/AEEkCT9T4qoxnFTMDTYmG91XL2UWR
VXwmgaqxw0R3IElIryjNI0YOvDweEEOF4V+X8OvPCfUmpeMr4EdEGHoy1HRl
eE/i+5rkI2aAObaD21Jww+LiLyhbpPk4W0xIhpzT6HtwktPxFGTpCV38lbvX
oOMiwzPITegHmsjBPQRK04xXnxw6whGPjQ2LWVrT6TWn3xsaJKQMuYAVyVFg
AuL+QhXwr/ImBZ5Ad58bUK9gwiLn3KGI4EfU8zgliFbzAr6Fb8ScVdRi9/VF
xnpeMxhy/F9ALI9+0VugfvHA/gUIAg5eAicj+mU04P8HjXEQ+JEuSxqwhsNa
wTfER/H1D3wUfseDqZvh3x3NJpVphNtYgQTsGqF2gBot596E80U1tW0eP+KB
4KVuGuGjXd+C2Gr1o54HyCwo+J7vHaD53qcB8H1vRqC3ft8QbWUAjZGPx2YI
Xw8QHiWoK6CBSjdQQ00QHimsS4Ch3o5Um3YUWQq+3LJnFxliNzVuveOTnsXj
ZFpkwOTotFv6UmcgpbDUEUWvipouRiRw2GD1fJICVQAnwwOo7zo8Inx38pNl
AkckRcG5gIfZhbmrhs37Ds8d8PtKzR0k6jrOFsQQQLbPExjKDEyN9I0MfCDO
0r8lk0g3h8bE6lJmSXJWxaDmuI5qMZvFwOyxR5ZpfhlViwuQcesFX9s0M55X
nB2PPHBA5gxi/ahrJNHfCXMs9QFISVYlNyh+GKHIrhgw8BpYT8WPqGXjrtdL
ZPsGPNHVMXxQiuDHXYXiLSAAgcgXswuABx8nax6ogfoaPrcaLXC6Buob+Nxm
tOBBG6hv4XOb4bpO3ECdwOc2I3aevIH6T/isHJI3HK160OO/4LMJEN2vnX4Z
85jfPmf0TMTD770c3n4C7fHBy+f+zDwmmzZFaxB8y2/td3zhOwpNgSswtWvR
wnuXuou/cqehdQaYsoHUiyUJuN5Tf5+RPoQmWlKkJhPWcvS2f6Y1DNjocpET
foBH1Mt9eBzEFyn+adUQrL1AzZMZKwXBGId5WeR4vs2LF7CW0atRbIrSm9Li
Z5MiYS2EVd3DGdcqhjhfSsnIDAvMLTbIGkf+I3FPix1o0SSkYXercOAt069R
uqj3YWA0//QojNROMrwa7oGcibCQCgDNOLPYDgLg5GzjBZzPd4drzOtNpfVJ
sDQSr2jJevIhTMvzd89eF3O0DC6b48C20/PiEhikvo1QU64fGvxiUTsnh6dn
u1q5ZLQphyz2fw1Aw+5fJ3mKV9xe601vdsRpNkipdZFYcRnpXiu8JuYAwFMs
QSEQV4dn6yvSCjVOn1QowZmCNgk+aGFKNmdPtE4AxuxRCe019FCVA+Zi6Z8x
VaEy73KplVSeQiuDFxfL/iiGnscXWQLgkvQp4Vbv6yPk2M37AoyDe/v0wXj7
QRHG04MRPRTEgQfhf5FNrBLOZ0SW+WoRtUrqxXy4Co9OmTg8UL4Wew08nh52
wajJSsE5JJY7sy/rFSD1w3i4GZQE48NVMHo82gEqWdImeDwcHm4M46PN97rS
r34FzC4dL1diuAHj441h/GywkiKZVfiwAqMFHpXApSKMWJP0ks5v7TP3BoyP
GjDu2Z8fShwTZzMwdlJkNyZDt5y6SnKtZQIp/wou83o6q4ZtPDZhXAePnRTZ
DWPDLBPXYaizBOSF4d1hfLzqzGjxRVMiMZzLOM3wbl/zgDdgfNiz1w+De/35
Khg9ccuJZIZRDqyO3chiq2D8rAfGR20Y8Zlt7kbzug7c7Z4Q7cnQQ/3IPpqg
TxqKon5PbPucRQ0tm751hinoevpkpI4qZ4KzRhq45rWIAtDttQRvT45npEYx
yu9MiosrK16S0KWJdg6P47xOAcjLBVmznBS0Qrt9bK0udlaBkbfCzML4+O4a
he3kpqMHvzi27GNoS2jt2MDDQvNlWtMLHpcfFm9Iy6bfPSjdHFVOAff2LepE
ByDTarEK5c4BHUCjlIBDsY0AbBtJLwCT1V8AFwTqzJJomy1IdKi2SYCLCSIe
Sz8ptwEa79/Cxk6NATUeF+FdZRWEsL6S+fSiKGpUoc/ty0g/ifCAVYlTzVbO
Rgsy7aJisVGycLajOtYUWdZEtmmfnTo1iTXt0oANYzmqSfAQD43u2EOuxZTF
5AWsssFCyfpjzAZxFhnrNK7GWRBg9o55//73v0e8YSNl9xAeD58OBuWNwn/8
C3ljiS/0xvxG/UkrAdLJj+qt+OXd7yPNZNRwOGx110C8Ff8wPbCh7eJ6Lepp
aNLIcTPV7gW3SQLN8X8GqCP3mrsm9Bt+a//Rbmfmpo+ev0wuGxMi6gdMEzAv
/7EGmIntYv70OinuhPtE2k19NDXb3T55fv417y1ZPs7MQxTOV0kPVdhQ4Atf
bo0TfCFqvhtiy8/4YWhtUA27UZBHyE3XvMI/u4IJ6MMbGc0RXmT+QR6q5+iR
4Y+AxrmlG8dTCkbu/I6Aa1jK2NaWQLXI078ugD064xQdTP10Lc1Ti85mm4Mg
J2L6HFhnFAOXmcGd2Vr7WxDz8Jw6SB2AL1DBgax7S9VgCjDpez+VkqqhXVuE
QQ9P7c7p2negwrZicAYLeco7WrcoWsDZpmxNmWeLi/r2NH7G8PA11k3k575X
j2WV3nWW0C0kLg8nLOoJCm8C8fSyx83eEMEzJQdDfxe2J1h3Gq3CSGHq0wM1
gGeWudM9p55N+PstODU1JJEib/DMBhFwG/QdGb9pdG+SSf9A7WYaCH6MDyo2
zofH6GikD0NRsdUPD5D5u+ve8BvQpeB909EDBT17xJgn1Ut5jzSak/C+TnN2
Gpkjvf2+fYBbA2uLrnob0qX/Xnby0aPlnW5obPN5XAIa4CxWjZ9tix3XZLdJ
UvB1DNuA/zN4kywDG2B+4q/NvzrakREMv75I81iQTpgJece4xYqYi6gX9Otm
DCl86+oBz1CnBdynsMpJONehI73X9DsMcCjUhLLCosGiyCghlGiOCVk/MS3P
O6sGmv/0q4aUuPhqk5igo402UTjaTSmWz72UAvSjJADXzRTkLwMdd1TMMNDL
p6oUOtzsqfMXZ+wLc/7stcrQS6RSO5JzXs3fvTOMTykKwiLLiNvbUaRJjbz8
BosyxUODZv8R/N3RyeNhboSd2ris7Bq6gq9HO2jI21VvyZ7HPd3BYuokC7z4
Sg/o3AEG7UP0i+gPXA3ajkR7A3Z7UGHgXz0qNh7JHt3jSvx0jasCfLyFqspi
T0Bcie/WwY7E7mrsiEGtA8Uag2bVSLTvHrQf5Y1RV6LcjduPctm0gfI2p7ua
d/K3b/T81bq8zWcKx+aaNnztBJ2hY+AiaFsiVQuc3fIKXjLjOEusTQ34RKUd
akG+mi2yOp3Dz+Ihm14n0YS88SrmhFJZGF8UC/Z0cEa6JQr6gKia9ExopwLe
MaEQposFvIsjhNNN5TlWg9QV1zSGZsHOJ137kBjnbJp9VuCLxOp/Gz7aHZob
rdKrjKtVQzuKT4eAh/0FYEGDYhQL/HyRDdGmx5IzDDZJZhSFIVklDmH45bfF
TUJhJKmw1Gq+TebZNmwMcQsF7PynFw6QjmP2ek+sEbEqMvImUdOY57lAUx8a
V40H9VB9TZo26zBb0TZot2IAEZVciyxbWh0d7eCASUNVQJtxmRZV7z3gpEnB
z1vPFkAb3GVORiGeVSKu4O6Y5BVw+Z9hWuohhCceroQGIBHO63KA5kx0sm2d
aIotGGtvpd+IH+lGSuf6l3bHyRJkTdvTah6UVESQmqJ99PXOd55/d4ANJ1iL
ESCNt17M2+z7aAk9TEjuZEm/A2RtC/LIjdU17GhS0++zZDyNgSPMKnY5BO5A
6lmK7iysl3vguJGjtFEokrpCbOV2hB7PPQ/541dn6tXR6/NTpXezZZt0DxR0
tV5cJaRvhQNqlOuPpekaowTxdXfiDCOJe2BGQOvzIkXil1oLmslZtZsRU4Tt
yMmCN4XKkviSRCqNrm0muW1WybRVNPheXcR4upz20gGjx9DUpwcxcBZiFE97
SsYyYLqAbZJP3dr0QDjfEJX6gLW10Mb8/+R1ZP389La7oX3lK2lP7dpxNH8R
lbpJsyy6QJ9gEOoyHQ8BkMt9148gSQDNvefItbbqiFkJiMPTAoP+9X5qq4PZ
0sQYGbQ7ImAussEpxOMF9QffFS+0ZdpTa4iHxeGdHhbYyti+hRgf1GJAO7pf
9PW37b/At4VndAd3QCNMQhFYsZ2UOyNaxsBYEVPwCyClqmC1lTFvhvTtAMZX
dPpjuCz2gBSWFXTdJv/MqeYNGtXQ3Z9PB0swNCiZmd573tXmg09mmSy5Ms5M
gTs+RaZ0GbFjOg7IJI6By0DyFu7QLeZjU9xh/g+Nq4tnacrb/C1LlIE7ioEe
ILTeW6l9s/CWty8WQ5TaGWmja+XI+oCF44XoJNmQowCdEYkhb5qAvEdnyN/c
joPkuU90naaHPadJWHA7FNhreGj4MpuvGNwl1zc6W1YDpTmyJupSR5kIiQ1+
ZPd2eassKvv4j/wjo8dHVUrzxqDxFlVdzNDbmLQtneGReMmlVTQv5gvBWWuK
z0DnCUxQYX0l+YiqE4EFG/BxDEge1wVcsTsnp8e74a0zkSOd2xZWmLa2DfFc
El9B9QMrHl6cIfMxtngd6Wjma6h6GwxIHVmrLCEhalgy2WJopXqhr5EakWGn
DUeLb888HiNRYFF1xsjsaqnefiKkyHc+7j4b3F43xeIBhhVviwnYzJOynIAa
J4qBc5thpAhyseHQl85w80ortMoUxaSdXn+R96whb1v71rERasW4+a35tMeP
/bGzH57wdr9eLfIOB1cP2O1qVzb4xb578BF/nTR/dGNQbEE1JV337u/bzcw1
VOQDlGKuQkNJoGw70yqZzetl97hz2Pdiko7Dw9p9uEySyYBCGa/h3QCfBfzj
4WFozXDQw4u2gwHCMm8w/rSH1DjSW8SX7a5PLt6NytRSjrvfaeIob6KNDphy
zVwUZdw4nMT12RBrotXo4rEG1m1LkNvEjPp9IwpneR2a60WQLcBda/UMtp0k
44zCT9ERZdlwqOduzVEYs9vETEhyoODYkp3/tXM2gF0u7UBGQhXL3m8MRkJE
S2bH1TqdD9+rIM95zn+Ko4SmOgynmY2BBtYR+k6vYRMlRL6OxUn//PYwkpGc
cU9dLGgs1IaQBgcXjS0iySPF8wgRk/xMYMGUMyOsNvMb+OHcJDCL8MVm0H/7
AuSUBiVe4NQVyBHOFkctxd6O8rveE/OcW5tQfJKrCzxUk5LWKYZo7xVpsvQb
ihg+3Me5cXVH4cQEMprbTf80EFRh5A1aVEg+qXpuX/8SPeRYlEGfBLnOZYqE
tG1O3HZkbtKQ2FhWY7z0tJ+F7RNyshBvO5flI3jh4h2bWIfBJy1H5t12xhuz
tCiUNcSlxfCSfuzJrB8WNyGPLBTnwyu0z0yxOtIG4VtAMwaeFbWnPG9kSDi0
9iG5MJJ+Kk9u2hPqxHlVa8VuIu7ZM8P3CIaO7jEJJ6LVMyk3k86agr8I719x
inTgiY0FSrW/Gwn4LRa+qynCz34R2okhHAvYrwbwbTSh4kVurRedGXXj5leW
3tbw1fIbhsQ38VtPx4D8FhLebMe2C4D7NJwBHA7G42QOjHHArnI+lOgN1zET
BvXA5b1sdJFrC/YkNKflJKBmEK4MpC/BXVaeUTY0ljbzzOJ535BpNdAPSsTM
RQEri/Ngy8s0q/HtxRjsbEmWNX0WOiDDV/YKsPzJzKdvUu5hx4bTeivYjH6U
NAZdAN7/dMB7e/FBv7MHjrI63AF+C3f78lZTY2e3C+qt/rdnptlgTyd5aofC
f9xyHPPM0iOB0FHq7zYf0B64LJ2lddMOzG3oZlhi6O5glsy4pSY6fKI8ftTX
CwBDd9MkFh2DvcynsR5oxTeT9qm0aspBztiwK0iuSe8Q5MUIUtHLVVWY+XDH
BgbqKfyFAfVBLHhdxPK9XtwlsFirom2fHqeh9b3FPDbqfjKrsB3QOl6XKNFX
gmdIhoFNZ/HPAztI5TEXfpCqt2wrxUYaw+QFkYB0eQFMvw2cB1NHd7Tjo+l2
YN9ueEgIbP2Lt5tdKGgv34CXzhL7xh5U6d/4doTHYTqLM2/3dPT4oLi0HSq3
fF+Nrg+WUJ47KafbOQzE6PaT3CooN3qIS1lIPLMpW5V+joCEaJ7Z4gSYAIpt
T2TA6IkT9lmgYAY7RK62vevevGdZ5GcJ1j0mjCv8dhV51tCLJQsGFxSk2wjd
svH9PfIavhRsPq/yIh7v8gua3M/opRF8YfgzDTlguUKfgcby94xR15cv2/iI
tp0c08aFNwgh22qmuVPd8/pwOsenw4NWaNWuhp6SDxp9RncSwhXrwSwcEZ2X
wOPYRLl0/W4tynMQ+bU+/gbeJZzrPCUlz8FQfZcn5rulwUPnkJg/qJjNhGW/
QhdZbI9nrG+tBO7S0/c8kw8S+W5UKkwoHuqbkXeA+kP9FiUlwCaLsmzBNqDH
AcXpoS0GpZSA2YNQbNUYOlcaKt4CijEcj840KyxMNIX+2VmxDILaIAFO5gty
sRdEAG/hn/Hg2w3ZBhF8W2Zn1TYJRopRYTWJDndgGl/Tc9ipVJrwMXq7fyd8
WO2fr5Kyen9r+wibCHYME5FqmV3U5URGl4PJPckeaA9zEw52QrOIMwdRLLpH
HwSD7doEi2bzrdcUYone98Yy1vGMNuRC+xF5p8BawPy94nfyhR4MObCuJUDe
E+rCpE6Af5FFOZ4g8O2NNHMY0/SqWYD8I/ab6D698uiFDS1hlYxlZajxtDJW
xW4+MzydCzTs88kgPbzRy7BcBvSQXqotIYhtqcskJgUkRoPmKNRMgDxsQodz
M4nIlhqx/ExK2j1A4RiDPMeU4miP8QGIu7qCbfakWZ1+yfocYFbqX1Dda5so
OxsK9MfulR6SYD/2T3eGiUZWiA8N6G0+uLjQU4l+U99rZzBuoabp1dTSZw03
1N9s0hw27xodtFOxo/9BR/gn+5Y4govDbyNzLi25rQxIF2tqPuTaa4p5VTr3
Eqr45HFT5ri5wCVODGQcbXSzX23pIgzdnTEdjB4+gRWFnfer79URi5omS6Vn
ErdSa8Mg3qHCZ55VYbi+C7f/bPhZK43GXpe7IjFG7a5IdVNQA2icbUlUEOk5
O5yQMB3vDBNKNaToSJuj+tItNKPhygT4qjYQnJweSzORjut0lxCy0wbIMu8I
X59rSPvIxZ1XFnuDklxp7Uwt3zOYlZzOflXl8DpRyhsFXsouOz4mdwNRWjro
pPGDHYHCCwSM7XbmI6NW9ig0QQNMve1W7HWPwAENWQFiyQDejWXlerXiy6Qh
HdtqtBAM+t+DYJhZK3KkYeKnX3tWLD5v11+l/NzPKqvgMj/9tWPY29FwWKWn
Kxb3yD/Ym6g8ztc4u55XmueCTbdrlwqCnBK2xZZvm8eStJXKHPueD5w4Y3Sr
AW6YQWLm5jhDkyC+Kuhvn/M6/2tgVmwGD5jIYbwmD5+Td8lUTVJtE/ezliXs
dmZKfFxweAuMY4ypFQKlHYZdrMTYvdH068eb1nogYz52JdwXGtBJR+MBa4VC
2Tjw+yqQy0ebmfHnlv8XaQJ8fMtt0V31lWK2p3IZTmzADk2OrJjcN5ziKhzj
z8jw9WBmGViFyL1OhuqEk2h0wSgTHysdI8OYQG8G3GpGBmyUyXxN3vG+ZseN
dVXG9GLW3ehmjRFRwtgZTChzZmpTVIHcMiJd/7tmDBL/6GQNJpiqSxaprfYs
qtyUWoiQQkIjUUpDqLB+CThIjwceQxfRmWFK3sevR/gf91czpNNFlNNkA50d
acAMJPI4IqmUb9J8UtyQQtno9bXPFtsBvNEYJMehB4vw72tAzF8Y1IzEjM6k
0zVnsIXUa7eBcgpuCkcAgs4Xab0cIA7IRoAZk0f4L2g+m9vWWVzhNYG3mmvb
2RqeDoO6qOE+BDnYmR6oNVX8SkqtqfdbV4vx+Pdrt8Z0XOu31iv4q1vlFWxP
0t3WALNOWwNKo63dCG2gHqAFqLEPOBLZJtNJ3whkFe3pTkqUvgHIahnoTLHP
xcVf+vqKN2NgBPertDJ1og2bz6orRt/v124+i3/+/Qajz9J8k+bx9dUmzd3W
91KIgN02Xg/2TZoD7N3N7R6GmMWvxw1QkwLwtgikfWKNzsVwYv0RtlnTCm7z
Fa3MzB4X6uUV2NrjQitbe1xoZWuPC/XsrW3rgFnd1oESbttkQuIahNsk/DN2
9JwwQl195mT7GZ+Nrhk7ujlO5TdvfI9Nm4ypmR4rDmQREnLSOs8UDLEIR1d8
zekgRTJsXxv0uMefs1P6sgKykK3Y9KqrgDSTUQbkqJeFy7RPFoE9te0urD//
Rgc9Nu4w/N4Es0jBIdIzKU3V1RfcFcnOG8vSoRwpZBnVSVWa4w4DuHYmrdci
12UXxj8PY7wX4aRaC2G9DUIgu/l62G/WvwoHgWGBmmrBUHsOtiDlb+loR0S2
1rdKcLbC0bKmRJnI2klPY8yxmWCgK3vSooNlpZ9uZI4OSe2YPP7195zGqqXv
xhgAPBlwmLX+t4KvXlkN8uuT40q2QbYNoupXSWVzHsQX6PQpUOBB0bc8L/13
tMFmL6rkcpF1zunSSZJeUxRzI/WCJ3mJY2AEqm2RStZNgIM6zTqpsdMx8DNC
Dfl1kmmTKx7YUnBumVwNbtcA4BiggMAIBt6J9gm7octHIlEudtZNzwXrdlc8
GYtAIb3QYZFKFqPpiDR2JoEnJCue5QFxOXm3JFZ1iZKUqosHDwOnrKWCJS6h
hSy8YE8nh1IiX8Q8FgtUh8hUIca6w7XEkKhlpUe36L6EsPgLlYwZqfGiJJXL
mzKewQM0H5SXY3hiF5mzI5uo7xJjCyu0xND7uyLt+Rk6FSzVXCc8kbWQTNkZ
G/FyE6c6GtGoipgM2B1H+96MWBk52t+/Suvp4gLLLO+P4XTuSxD306oCFrJ/
8OBxZCq4kSLi6CXD8FKXdKJaXA1FgmhAj34SVyKTwta0U28jFmQGJp3DwfDg
i4grVldzLHGwtSjzEXYYsRPl6OdZNoLzSeKPmxA76SpV+O8v8I0MaEOcNis9
vSXRwpS0gu+/oC+s9kg/wLewOAnVjFbP2MuF1kR6l3McyCVOfkTTv2tMKao9
eVPC9z0zYqmbEU/lMvPghmISrGdak2mSYrGUUoWnd7Wi/Omzqmd6rI0Tnv7F
mT89/Ltvelloypsff+gBAMvpBAEg7aiEgL7wQYj88uw07pYTC38A6Q95DA1M
XYhJjNlcsPXDN+qH5GIEf/7WnA9kGVhz+g0wKlzWEIbfv7naZz0P5iDa/x1D
D50xPxr0/i3++AfT+nc0j3DZ57nObYVUfSacrlWnnGxEbMnEvzSh8FnaIAcw
dX1WzJdlejWt1c54Vx0+OHyoCEnn5aKqbTAITFhRMQ6TURUNnDwAa8Stm9aY
vIEo4JmGrVCioNQlZsbTxGOuOAXGAGH+Hm0HhG84Zx9u9qza40CxQucPw39g
widAljX27qEqlVSuVOJuDoxzEaMWvODwoWrBRffIDKhYvw9cHC74RAHaZpV3
RbDMfppcp2hr+OrsGLaT22IRbhoAAKunsmbyo+HYoMDhb7tSL5IrrjEJg1F6
ao2DTFfIK7j5sVHi8+87huhqHCZJHMFpqAcouewalBIFeVlwGhSF2Im5zC0e
LKzZ1Jjo5uZmCIx+kFAlL5oKp9iH77D17hewdjbD4ABpXSXZpUUFBS+qjJaK
XgUYi7VFfBfrehJUSFmDB4cDoC9mAc1jgKdT5/P5D17JcKuHNyBQI8GGRcUm
kiq6qoFaw5f9BKpp2yKVjpfs76uv2b2IdK7G1UgmsO1Zl6voaKzvfiaLBCTE
iUsJ7Bsu7ZHtwwfKx+sWQTU1w1uoaC/bW6fHwu9jnX5awI9hncIG3r1OsjmJ
ltvS84yEYzJgEi2CXIrew1mx5Fp3GgI6saYXVyTIt+tGRg6U5k0Bet1PDPWr
YWlPBHk+HH6m2lizmdDWoQ1RcpsyfNrsbc10Sn0LxFxQd17gM5peV/ltpkBr
r9IFQGy4TNHRvir7VwfPsJF6Sd2eYbc1ixu3Vsgrby9FuE1uuBbsyQc6M6/K
Ndf05OndSfJEzP49Kx7U9+QapPN8nyEjfn7tblIPG2dnzwPI8MJVNqVg3B3b
d21MbEq7CqkgQMB64vaadMjbhqvhQFOryCXdzXprQr3FCMPqia8/N31G8CCm
IV+bIV/G8yqwBZM83RDWZ8ev0vWBo5cbFtGu1TEXBFyqVzpbKNXQA/kv11xu
B4Y+CRCfVqOZAnsjBOFEfV0U9bxMtd5ARi60RziawMQ1SJW6srkJog7sX1xP
4SGMCY82xAv2VLrnuuj5/DPaO7ttrAy9kwg1Uq8RkP8gQALra6cg33SdAYXT
euvF+qMjJlSpZSZG+5JH8uQ+LE1oorBTFv9MTHYjcLtzBXIInZNLRx4EI2I+
yNV+IC52C+odV+el9jiS/3RCn6x2XsCbEe5ike8pmPFB9w2mfhoGViHz6vdK
dcTOdUMH2Y2RZunnMpnjkxbdlT7APj0eHgwPOpeIIS5rLJAyz9jlYQIM/L4y
9cYutPMbrBNdrg1YZw0jhxzNpe6RaEtQnd7c6UnfZOg3ncNLuMRpTE9dzhr1
8+UEi1yrMs5Re/PBdsCmd9L88xHWhGEGgtg4bWbfawHRnqjv9m+/V/x914qT
1TuvG/qHDt3/TeEDl2jJvjjEEb4jV5Xl5Q48FntiuaszuwaTvHlrT8uJXjOV
zfV48Redl4nkU0F/tYnJNPghqOtpYI+Fqf6O6xVVjD/E4j7rZFx3Xhmzog+z
rMeBZXlOFHdcmxnLCebaJvwhFntwMHwUvIHsisUL+c4rZq71QVf7WXC10tnl
jouVz6338chyR829sm4L6y0fUbH38FlnP/+B3mwWv55C5bYY9kz1a6Hq49Os
tG90Kyn6F5uR9CTOrCTbia9zky7OE2TQaYpc6qv4ktzW9QuxLU9a+1n1ocTH
IEsxwu394MLK51p6xlgFe0u6F5R+yxiJ+oMh5DCAkLgs46VGR3o5MLqDLaEc
0fDeFVkJMReHLqOAN85SZh0XxYTSRsRq52udx2tXi7hwDXDey+fm7qLvz7T3
VmpPTeO1E6s/nn33itf6gdU0ck8+kzvSdZ5ZrPcVIsxomzKAeIGv2B1+fANr
v06WiB3tM2W8qvyE5oUNZNPzGkcdViHYnKAUggNTQhMOQ/1QL/fgwY9zTAsG
27Ahqa+PzgBvYDpHX6XFeGpYg8nXgh+7Bbk+iBh9dIE+BePa3sPPdYaTnaNX
z3fZVceGTnLuXfIwhF/pR53RKFsKLQpZA+F3GJhKsugQPPrcw27+2scmtMGT
JIuXg+ImtMFtReimG73x6zssvzOQZf3RABm6EhhIrAnE2/GxwPowAGtWVFXp
BMIPD+SjAJDTYk4O2R8NkCEdQY3+jh8HgOEDfnGD7vDpZGHFtw8PZ+j4AJzx
dZxmmD3jowH04UpBI6T8y4uZkJY3XQWP2HN3Jmpbz7DtEoYFrlF9wWqp0Qp5
nDapUUzLhCIv8klSZksqpZRcG2+pzhvs9ppVZ8bJ4veIKBj9VkgyxTrodqe0
fphDLq1JojDmH3TW1s5xjJ7KevEplJ/1C1krsOOrMtESydmLo933jVeUQWZ3
uYnWQa+b5FZYBpzOF1SJagpC8tWUUnI7uOdlgZHn70+3jw7Sk+SSTm/Nf3sp
XRlxZHngNCj6G6WyJL8CKWvrYDh8/EjDh86uNSZjUNt/ejB4Gg/+djT4n38e
jP7wv3/8zTY3edeJTZyDHeKtsv/k2GU2MmknXKI6k/9eo/JjMdY+9R8SBquN
+uRrIXYW/7y1LtqQyGhkegGjcihjIqAWItrDPsq8LAyiVGnQtvNhMOmpHgwm
baHxe8dhrPMDcvkrnMKVWTBhMB/E/P8oRFGtfNwSIfCWs3xPf2XPtQmIG7RG
+EK2v8qKizjrarQGNvO2ceSDmAkeDJ+0sbcGNtYjsKefr8H9/jz0vrodP3TR
jx8NXkN02UU366Hz4eEKdG6GOwbmI0JYgKFteN1uxtFk9Z0V9ymnftXgywvU
Pzg2udV7gNbdYJSiiOpWdWWWErAJSUbXuuJFUbYOLu1UhS9jyp7u1oFled1X
ih32tlbmjLHjbTk6+NT082/+tZDR2Ber/iP8BPakUV36HlYkRgytyZLsbZYj
SdIGLZWBZTUTzt3DujgoILQknMz9ZdLKu+it4Na69HQuRxf/RNnnQn3wB/fX
7VCYc1Cdjm3BcQCRHQisflUMVv9YKDxbjUNZwuIe0GeGC61LvLxuc67su6n3
UJkqQvexFhgquA5zRdxqFdA5ALZLj3gPgIt0hD00eUu68tPT8Vj+XWUDZldU
J9HL6rIf2Z4uJlUktrgsrCOjMYfic/BlPJc+FR/Ib+ch5iPXU+MeDnQR48Ab
We+0d2UbCRGzMyVs5arUgfm2jS9Yz5lNV+uqLQ+9/UU4WlVdfCB0YRc3EWeE
v4yzKumd/eSSc6kXqi4XnGcwbyfpw9wKFYHg0Chh4czmMsNhabKHcNZf2U1U
a1Pfn54E1uqXpbErlWoyFx1lpXJ+XlJOviYeth5srcKCcWmgqGHWhr0CQsak
9qjDgOPzQOdosclO7JpINYthiBP2jQ2FbnHIOVc0wLzIKnb9RXt0DOMKl1io
sphdaGslyp6vVCFcgC+Tm6SUFbq198G2T6wVJ61sY5kpu6OSz0Y4D56AFXje
81OfWwozNEWA6dqkGBzp1q1Th/iiZ2VzdHguEbxaE6VdhgsPBVbqBXf1k45f
wJO83XS/IzvH0A7R5Ga3D+5q8zPFqlUzfdty6+98x4b37WkXXwujBtZ2JLwA
ipzqZM4w85EdQiukTZpun8Oo1v5yInFKpoOMxQV7GGd/r5DgdrsOlEuA0yz6
tI35dbOl26p3AmOhilINhNniUuIHOKTo94D7OUmvMMf5I4eyd/avRY4/bVUJ
EOqk2hLYBmAxce+SmPNKbFOdDkOJQkFoKIJWocwqOlYaqofVWKopDSbmLqnq
tv+s9he54VqO6OXOWY6LKq05o02dYFWNHcOW0ef3r2g9BVo42DU5cO3HD1hw
CZUssXDZIHloZHePk5ilvDPSUrsu2KZCEU5ONh1fNuqLWQoUhjEA6izNTWi6
EB9mz6HAhkAtGr7ubeEen9t+wMQL0j7seYKIzVojI8ERrAGeXWTudkIwmZWZ
1+sStVJE0vlFDLx8e+eYuUzcDBgzJcy4cNPlFUUmVkmlZYTS3gx8MafV1CGY
DiilDgMYfAHQFD/t3d9zQ3Egdjnct20IISJ3Be34nY3ZvcZv7hWJBtBtkyBh
rvdV8Vy6DBNbkJwbd+MEOKze4gScwc00BmZ8kdQ3CUjCzu/BDitu8zHiEjUK
ghdKMUJkexA80Ykjja5dzFBIGUnlUR3jJa6qxYyv0LgR733+4myAqWqMFJli
Xa58kiUTm51e3nk+eC7/lFCVePB2Q0wUcFPCnYrvB9h/nRMIk05p4EVJab8n
uepdF+mEta5AABmnwfEBVYpSyQGUIwGppbW3jVFLYrtqi2sw4E5utdqIF8OT
B43J+ldLK8bzdfr87PzZd6++dowBk9xwbhAtup4cvToahOQ3m7T+JsmywZsc
qx0QJfN7BOmfMohsq50nD4ISYAoXeGGN+SbDpOMg7vMu6vrXuyAxhBVnd6QG
UbDgvsiB6mxIYA1BfLFyiZLJ3dsS5XHdcImdaxSAhldl/jL/axmVXI2/t9UH
Y0SmZMZ/MyJ/PZoRPXr08HacyBdP7p8LVduh3jsA7+575EMuK+E90sKLs/um
hawaCUjX50H/zWZvt8Q7sNl74rL9QrNNUNUtMX8jpWTWhkjVEjxX8f1Qc/HL
xbwhNLsJSMjWaS697MS6B+lkXXOhncVngUkEGHgWaAEbUDstJna/euXoeFYg
IqwU3UzXpQdrytRlQkEdg0ku6UKK1jZ5mNi5DlWCuLKOX52pV0evz08xT25R
TrS3sEwoFniP+OjlYE4NIY2YFcWbxVzSUFvNd58ZyPDTm4VMguLOXQnYHOTx
vC4HZvUbXfna89OdWMRdC6P+UXLqRvZtHugcrv5hdy/YdK5bfLEuN9D5Rbwi
U7r87MlrnTI2aUD1LgjhZAlcwYLop8fwIG04NawN6jFPIOEiHgQnxfgzCw+E
TphvxXZWppv8JvRG9zhPLEtsmYGdwuOfiGN8j+y/fcIl3+xYMH4+3sPPCbDX
O/XHzXTCjYMv0OMDybjq5AMIh6eAMx/HBKZFVa99qF5z7noEFHdKD01TNcAM
8OmNj1VWXF3BPwa60sItT5MeRelRFpWN8jDQdJ+lIAQbnil//uZRgm+hgdid
jlPiOK/uEbNO2x89TI7cYyOCFButKVJPK8rXt2hO435wmWZBVm7Upq0HmHXx
xJ6jofHsbJNNH8zKz26bKAID332GEqg2LS2jedI9otmQZtHrsJjr4BaLdPzF
l8L1qtkki6nyvWcjB6Cbougagt5Ee1284gJkUL+SJteSoI8WSjHTm1btcngT
XTM2E7BKUpJjZepkZw0XV95QvSpUnrAPqeuOIFg1OjKHdg5m77oQPxvUo9v9
VtMDp0fTLus/duwmk6it8Nuws7Hv6hqmMo6PFt5V7Kmq55YFNVxshaQ3rMnt
OT/60S5BC5DsjwFYAANVHuKs6603R9vaKJhB+InUs2Qp9IVJTr4HW8mB8dN8
4rVEpbbdr+MR20k+/tuxn04aifa7CMYB4KWb7kHVM68arpwLzocexCLMVFTt
w5M0/9znnopnGr1z29BSQRgez4v3xw9RXD/gFpZuqDsu1zWQ27jSsQwxvLT0
L7ZojoTYVqc3AZ4d4qRbhw9dy3rvOXUI2JlvhXy9e1b2Mp6T/GIMYaQw4UpQ
NjrLuuBIcJ2zWsi3pOVdgr/Lu63z+j83YWRdLugSiHcBcESaSwGJCcqUvpr8
CWWHaY7e7dawYiVNLOIUKxcgU5FuugQRf/3+FkGT9CxDjNZeRvO265n8SE0X
ADM8vuMJCbRy4MtCuMEhXreltMGfbYGU7TDAwmlMe17Wyc+1B/Z6Ybsr1vJM
D2zUey4kF8sCXHB5kaBg20zh6WGzmyi6AonbKMBPN2n0ir0h8vAjX9uTOYzf
Sis8maT4fZzp2OWguirkZIafEGz2ydUJTr8ZZutZXLGbkRigw3UmhI9ucx6x
egoFbXB5E4G6Pn/HbPQitFT4Hq2j0djED7uFH/p0evC42FK9ZnIM9iNs+UP0
bn5Z78z5wbTdDItGZStWa0YuNiTnuwUblZDwPIDmAn2oSY42LmKPH/H3WMzS
Q181niazmEvgmZ48zgwrMSGp4b/hbYH5wvy+1C7E/DwyExEJLZmi9RbqJLcX
WjPrhyB0yZydz6LNr4oT9yYKxeh7URD+6p1LnRcBtKbOnLv6K8beWntJj1MG
bUn2Fn9rJGjqhGypwXFUs6NLG6JzbfPGGWJIr/KibHKdkBdT3+I0e9dDo8u1
t6lamhU2xxZb9a2dYQrjz2pvqnA7Gb01qEyExepubJOn+K6ebr1c/7VXVo2q
lnr4EQFybWs4Ub6OHQs4BRD1N4MPm2P0X9qr4EfObk+JXoAByNyg3oJCfL13
jWta/EMuK/3A3ytZVhvR5UdOb2d3JrjqH4Diule5DskFbz8K9m5ce80gwu71
2WsPu7AAGooU1/PhTjRj2PnDWTLMT2vde6/a8erdU/tSjw4PaRM+P91tuONa
cKy++J2/UTNUDD8u6LJnl4RBtrlZzbjVNTarWlzg7xcAUZc5lvaqmR1BIMn+
tBaOjr2w8w59LTKwQGSAxlK3qrbqeY+367SINaxQK7RSVDdnuJU8fOJkokTW
lQgVlPCn08KaBmsjS6dAv01k0mN+Cb2GbhnmEH4TrVfWY6+rs4yBOFh1dCzl
NJlcK+K7G4db3dmZjNqWjMmTFrdrJfTij58VaM1TJAfzZu05AKFCTAKEFUcg
kKe9OcutDoGcdt2V3JdqDUWoYq4VKb5arWTHsJVMaNXNgvfQHG6BQeNylffc
utfLKV2sFD3KF4i+5JqQrg3cJJknOeB/HNAxyIQLa+opjUeSGbbuT2LmQ9Ww
NqXlJMTXbjBie1tnRRygF9GgKAdYaXdnONz3aHSv4bH7qdreorwCMPTW7vZ6
HPr0eLAOl9RUieV9W0TZEbPEn1tqHL+f6+IHGCFqTg3N3nzvtkW+Fqp1xRvM
dvCeMC6q86yLeZMswabRxuzxd7yw7q7A61bhVZhP4XB40Fa/uw9lXDhoE05a
DYwDfIBwGtkO+vFGfjC1LSymWQP7Y5g5AhWO+NP0FNS5MJLmW6kPrEAqhpUQ
C2OogdvOLIBt6X+Usq/I7oVoi6IWENfgPCbzx3s6C6aY08YHwdZQ+PhPweHK
U3DYPgW3ILZbUZTNPJFWa9NPOynMF3chMZMHj2jhPdGZV2tqXWILF+b4iAmO
qk9ttTbjPe0Xpi187/uFk/x/tF9OGiXstt4mmgN0JknlT1eqjj7seemImqkp
0z43+o0JSNeafl+0IyutNUjHM9szFOuZ6kX1nkDtNEtjPkS3I7jNi7bdeiOw
vtt7u9lh7B7s08/r2UmxbvcdD/FmxeE6jzHVjFunRFzXCDLLWX+huFvvKZeD
e1+7yqP37Guaj0sNw3rbG6ojd8fd3qS+3QqWvVaVu64xuPidqHV3m021+5IB
zPWaek169Vj9HvcMvNHzAhWuWIlkMEtmPEPousGsP48f+feIzlx0sQSUbK19
xbzCGVPnBG9hhPkLirCLr5Jh1MSo181YtJ0X5Y3JXKeVZc3u9RTmmRYZGs1h
yng87ZNxJWqAkgesXAhip/9IrTpVq87VeierZ4822AiXIgmzVl0nflnJ6oNu
SXeogwSCElfmEirih3YHkmtn1Opz1w6EOXjTdC02dJjMEuBK2Mdqyh1EZZHB
hekb6OjUl3dqJjfIenPalZ/Vy8rYWJvbPA8UnwSDDKLTEz7Iitw80xgT86C/
elo2s051nNc2kKtOU2ARq+Dt3soekN9F76K///3v0duRtj2h8xZIq+WbpKy+
3MI925K/oOX3y600qS8HSK1/OHxw+HDw4HBw+HC4jPOrLTgNn3xCfmCuETrp
19UWG6ReFpNFlkQ4qcIe0Yy+UI3WhCj8fYBhG/Q+GdLrgdLwzWMME1qU+Qi7
jVjAGP08y0Z5NcJeo+bk2FUH/bpvv6B6ODPKKkEdaEKZ7VN3we8ZZ8G0Yo+f
PiWRbjYDOJ3ZDbPfytoyBMS7xpR+AJSBr2eyuxv31jHraVjhP0V5FedSQtk6
eX7+Nb8IfgCJFQUQijOkLiQsjJnZbP3wjfohuRjBn78l543R/j4aULEKI5DX
ENc/hOH3b672ORnxBYix+79jiKEzmsKh92+J0kzr39E8zcPAye0IK5qgJs3I
UQrHrup0XImshDxXI+zF3DDPivmyTK+mtdoZ7yokdUVrPy+R7cY65wO8gCrk
xZZrYWlUHgDdDQrnEYMnaKjUUZYpGpbkIpx6YmY8TSZpxfk66daAKUBAw6yT
JkMpfMMun7jjMyAvjnTS26zzvyEO7C2xh9faHJPe1HhBzBdltYgxIKvYo+Gq
xcVfgERtMBUFT6ZjeOolCnPlVFYCxCQ57NB3mlynGC761dkx7BK3BTTzAAAY
gEQxwSbz59igwOFvu1IvkiuQZSmikvJfGBxkOhVnwc2PdQkt/fuOoaUah0kS
R0ca6gEat3YNSokwDBMxaSUkoSB24pJIxJyvxkQ3NzfD8nI8gM2Bm4ymwin2
4TtsvfsFrJ0Dm3AAuGpA6LKoUJcLTHpDS0VOre1sER5vXrdyTFRzgmB4I7zU
YIj/4JX05qX+tVlEZ8puE6uFEaCCr2+QnVIcWgRfDmigBqaL2wK9PCmF4qzg
QOaLtF4OKOeoJyHQNYFfwxSz+cpLlgbQOYtmBbksjCn6czyOaRPjWiSClYW3
LHupFpeXpOiOfeCGTKPWO5Z3Ov2blFRvQgmx00oW6KMw8wt4+geFkiyu0F0K
L55fGRkCD24zbxISLn0dv5ShFiA1FfDUBZj/GoCV6n4m5RrSEY0i3hSEQJsX
HAGnOn4i+q25cb3gVYvx+F7hwwGTqgKuYSt4Y6FADB6+JYiXcZrdK4g4YDK5
L/A0ZYZ2+SpeXCW/yh7TzamTOyNATOI3aT4pbjiuQaY09qhatGycSJwPMzbz
j5yv2QbhrMZJB2ndFim3IqyPES8d9HxbvGxMzR8WJ346EOHAcbsLtl08jYax
N64AX1r8TWYGTIrvXbu4V2RQaSoH1t6jV3ZnXp8c+8InZ9Bue0n0pHx+TzU6
RKVni1Iyk/0aG9Gq1oZ3v/17re3h5PV33SDis7bkcWunJEgfbqsODtAD1bS8
nVnL32iyVb3vTSZLTuzZZXp3lRJyFxd/ufOmklMpWbr82Qt6Jra32e0Bgdx0
cezZ8M1MYdrm1d7yNYxgnrWrPUKv+cvfe6Fle98U4Km9+zffQXXn7Q/q3E2e
cxseoX+Xsr2EsuMSRzBn1RVf5re9whvXtwbU5Lbg2xtdcOHVTTE7tB4HaMOY
0A/oLP75DpIG9E5ni5kOhaV8bXVAAGmsQIobvBTUwQf3ZaiOMNcx6R7QfgD/
/6HrHt7Joz31FSt+nrHu6NGeeshfHLZ2tYVVmGhGolJCg2fLPVf4xGhXZHeT
QuARgHqJxTJifBhmyR7m5mWo4dcccyXddM3utjRf+qvhwjyOHA0VHrkxUMrK
ikpHouZtaAWQPMjESyv0cBWFpPldKAQe+++ZQs75Ih4nkwUju4JLNJM1RqA/
iQVM7yvWG19f3WG9MawQd/QfZ73u3fFR8Kv13x5uBK163ejt4XqvepgJVnkn
NHXzy37cefvaSRe9eHNDdBFPg2ZcQTBFWhQBg+NFFspVW+Z6N96NvVvmPyo3
eksL3nXnLUMGBvT931v262wZsN+7blkHD/7vLbufLQu+dDZxA+t82q7lAKY9
vdq9neuX/6BxTl33ZqXxhzSg/GPYaSjTEuV4NdUAQ6FywpYj6Go9o45vyxGS
amielomnbQNyI/zjmH/i1dYfdL+BM34nw4UotqcNwAvj1plimofG9kpMavzf
xBVHswfhNC5CXiXGO/kfvWTfQxpwUadMMFoX3RdI2gAK+M89AnWGIwESMXmT
ze9EofCag64JmdnW92vSo1dqV4TwGtD9OhY95pMWZHm3rYgZDoD8/i18DXAb
7/wNwb0Hi98Gmx+olLypAYcayO73ZNSyyLijqW8zWltj8z4aaaqNqjta/+6V
xj8aNDkf/S6D4BoO4uT93eklviJmvNej11d2C0lR2PLaYpjUdOtAhdbqwkjw
YtLeExq6wgJvh4iWSW8tdPgWxzAuZAjae0JFR5TbbTFBNjhpO7w3XLQMd/eH
g0aM2e3W3rb5rbV0t6zwsjtsVve3+FbIyO2WHzR4uekCK2+urOEmsb+vjjjH
rXb2JL4eTyZiZmynE+GqLV4wOyObv3REhqmOGHgU6znI41G8cfJJo+aKnwXY
LEz6NAYeya1k9vxO1w0HPIPd0SDie0tnrZheVp6XF9FbO7woxv6F/bKzmLwt
KPnwwQPv62BKp+OeW9PevTGbgMSWuhGCL82uagqd7qomftZPn9Gh7jcVTxrE
jSDeTDHXUDDD/oI9j5oANAh6HUL1D+17I1tfydNLuD0qpg0wq+MrmtcF6iL7
UywtKml370DuncJgeLhgMAy6oSxKvNGeyULswHb8IJktQnxH0IxhXqxv46d3
XkyonA9QP9I4/MOmL8R8y/QMSCbRdRrzGOjWMcFwrPiK3RxMWfNqD18NU6yb
9Oo5F41++/b062ePDx8dvHtHYJlq0hH98OTBowfv3g3VV1hPhw9mlbjh1DS+
Tlzc1wBzRtkCOBViI4lcdfQM9aCV2kmGV8M9dXb27R7WQd1l0/RsUS/gXeon
HR4y6oyXyBGn2nrG+STZ113tvDp69nKX1/HkIa1jbgo3kdYqgfnx2Q1kgdbf
2mTsQpLCaIB0vECFNKVEpTsDo3MGQkrH9IwcVxJnWeSKWtli8Si+6Cg9faTQ
y4WB17b6WLxGxJ7qMEXtXoNRGDeFTwdm16MboCycdp90VPQXppuiv9ROOkwA
p/qAIQ3vabWcn3dod4gwVR5dzeIlktFY0ywuGJ2kSOUPKLpeZBhwiLNQbMrM
ueUl+XVaFjkFbAyjHwDAROJCbzSGUmh07mq/Ah8AE8nCciChVUfEY05KIjFo
Smm94M/k8hJDWOD4GzDclPQQqxjjdE8sLkBiSHhbcMaIZ4SFyOMoQ0R0qE9a
WizAgd43SEC3ouUI2fP2vuXIOmXvfrPqy/YI2o1YOawhsXWJu+sI+XnCvQqA
XnkjGPv7nKOOSHNo8tAVKsWqLIsMCDHmiCKgh4kmbooWEtVfLLCRkoDordt2
tfO2dxFrRTnhvObJz/OiaiY1xx8u4zeJD6h6kb5JbkDI3WN9jd15k3IU+Ec6
hzOoXY7mJcfMNsbmapUaXCqPxxGrRJnynm3ujrkqXXJluTFcKtTtijHNd2eP
pWAtf8bGVtzQSXAbUtuJcMWUO7BzV9Bbkx3XqoLq27EQ69fWojORFzVHevqw
LpGqSkpFVye2X6RMT1wjljFZBjrffq94rVhpMLmCQzND4d5Ltt+xK5h7sWc7
OI0xc7KeLaEQE5nVl4WXRv7hdTepvUGRCmyR2yCOuHOZIAHP1ZROIO+RC8nb
463Jlw462Vw27cKYSD28f5nAW46q2V/HmYdGSrYreA0MmxYTj8G4Mlc3cVqL
Vxk8sBcXgIkpRSU1S7Vh2bxZnKXjtFhUjZJzuAYsYzib16ZsdKzI0RMxugMz
wE17laDBk03SBu85hUueJXXNJ9v24WZ25Hj8ppWcN1KtjjiJ7npDXQEfRBdY
vxQlVS0IZ3qktBVwtQ7250WW3QP24b6LtYedwiHNLsB4xPN6sP/BEf9+MH9W
zGwaZldxyQkMPdd3S5iJbiXMqJOaJSdAModwcxhtpHkJgWVOsL4sUfy+Suo9
/I+Wd+i4y+QQDQGIxZGVUote9m1EE022fiG3kGBiZWb/QUjEhDVdsdh1X8W5
SHiQeoXmGnelz4QlGo2TJi42Ul1XpW5sYBHPQSPxjg0rpSq3CGUZX+IFiAM6
SrbU1nyc6XyEiG8u3qBrFlI5NxyOZLExlVq6IQHfGvhN9CdNMilQi13gnZtP
Mm4F7x0KtE5zRi8HELP3S1rplow2GAwFsjqh6lJFTpVZqAwlFpxCWnGXhpDd
Sc9HjzyCN60iXU4Vy5TWidOhGO2MXB2AsE2R0NuAl6OsKvYUvOYwSADfmTdM
oNy/SuwTJc3H2QJFBE6ILl6rWmiwxaciWBhX6kwwEgNty3oQtsXZhmu+T6JN
jvTXhQv73yNisLNR6Y/iMkK8bHsJ3bfNqlLUnjrmv01gmZX7r9ZI6igo0QEX
WrPE65c+5UE4qii9xg3X8MtxGD/blLUCO1fw3gYgCHAA7U8/7nyS/Bzj23sg
oNzl/JooPOWR/l2PhK9hPOpUq05tw5T8L8th05qWiAJebNxVjawURwZU4r0W
IBx7UaHsiI+D5h7TeCS64mj4bI8SE5CjtjQ9DlA6gpOYbeEtxsdT0Bo+aIxP
kvd8ZrI6/foZk17UoT+Z8OVoAAhNi4nU/K9JVNxSFliUZj9RJ0evjgKaHpSa
dRYDQN4Vnq5S12IukJ3hRn9/elKZq49zbPznyxfqlFqXyy1WZjx8/OTJu3cj
kwIJ+ozUWnlQdAc9XEyZKSlVx4i2/uT52TfGQw+mHalX+0df6LuWLKKAUJiM
CtrkBJhNxDLcHBhWbr1XkNbDeUuzYvAvctUoLGJSbekx4FHM2rEHhw/ERmCb
kWpi+5UBaLNNek2JYEZKfPVSS0p8DyCVAT4sArXH4Uj9yaR/+LEDMA/zm4Ln
dZZAej/cAtTf/stgoJ4Dy0EPBpOweDD4XRQN4IcLuDjxbD1nXkVCAQXtWRc9
kiW++9eXIt2FevsJZ4j9mctvZu+i6BhVv6gYYrGJVUSYn4XFiqrQ3Mkfk7gF
DcFu+vCejExZPBC7ihtRH9xonHRl6DHwDh0h42iOGY8oKBLx4M17EWhrQAfh
p1ZpaHhww/X2k7mG9Fitdj8NzQj+XSQ7kv78J6EHcZ3EnWF6uAFNxsAWEFbR
zpT0k5vE/PLTkJJEHeVmR81Bw6fQc3M/sE+rOralm1/SoivYWHOpifW+Y5GN
YhfFhpm7AKvWGCom3Ty7FeuruiK1EeqlEnX86oxV5UZuc7WjGet8Vbrt1MC4
tEMzoIC6pCcz3PBR7CqCdoxYtbYepVsOs2ssSEumdMP/RK9MuKMHJQc+DgyH
+oll5KrlLAqDahsrOmbqL5GH6tlAEqbcQ3Y3x0XJ/jF01IBKBvliBi/MuCJW
eXJ66kE0T0gLN7lYDwLVhqAoryIONDUgyPxT6GhalHS1v+apjr8aUi4xk0bM
kMY1EFFRDoKFtztyi0VecjGT+8cISCBv7+fVft+4MsmYbIcNWqnGPvq8XxJY
LJERyouG3/eA3JcXrS/BmGYLe+jxrnMleXnFvN95Qq5gCrSkU23r6+85sMo0
05dUEc8ow9sfxJ7y6OFsYpqktB2zoirfWaaDkcmnmPbYZYjVhXZ56vZhT8bw
lEurWWUr3XcmgnrSbbX9D0uzxn7+UZDL+pbp1rGxU39qenNZ0R7TtRQF+hCt
FRjB1C++BV4/mjo4ar9/BQdj8G+Oh5o0cy2uCd+d6Ikc1nXwupX31Q4w111i
/XQHGJJpLdcNwXHrZqDXBWzw0kkitH0vgPwXGPyzc/r67MWus5G3UxgTFR0+
Pjwc3XJIZ/9Py7KdBLrD46PXVwVQYjHSKoRn8PxWDOcK/MTVgI2tX4ife+tP
HS3qIi9mqFI9Y+XWztHZrjHZspldRwx3lwZ854jLXo5rERPWYjYu9rFVXgTu
P4sQt4JOWtEk4vpmRfFmMQ/tmYX2fnauDW5r/+AeCFZga7oW9eWadur1XGSR
5Vc+kXglBA2d0cLnfOtKHb07vgZHZGE7wPua7PGeOSLpP50G1szvlyy9EzOE
rnhOpY26oe792LmOYTV/Xbgzg9O0SPYGnj7GFt7Bd6ZFVa9Fuz/gWGbrtFFo
FRB35jXQ1J3MdXbs/hiEzxVwlWmguqmbxXpIh/HcKOC2ujAL5pey0x+9PgmU
Yw4dbPYTW+P9+ozNcEd+wXSQu9CyN03kO1ZUbe54x0pThP9ypVcaW/Mbtdlj
N9UkBRZWZ8uWPCTrUKtvixt8BKMaPPI1GqSklaZ2a2QHnjhJKRQS1noTL7VK
PTESetxUjuBQkSmJ1/Sq0MalGG0+XGawXqrvEIXqcPjAAuo9wKMVD3AlHuDa
NNqNqDGqxPPShIe2X98nOduj7AJJ51HgiIc/Gb4ptkY/bTtWFLFTnrF9MTjm
pWxsMvImR0VBmfB2apeGbgpY/TLG9vf1Gsaxul7A+FvrBfxeH5X/UE/tf9IX
8MrT9v/1M1ioXANSoI+01XIfaVnN1SP9bzqx78l6zMD6hQUxU2NQ8gYKMziL
xm5BojF3p/jwuuESuTkMbSjM04NA6Bfk1hUwzh3XN7dbk7evL2P0CRhEz2e6
wPXbkKV3Y6W49U6wNux8afT7dLYjihgxx92rS7+ZWlzFDRFjEBp1Y8X4T74t
3NzIlXX70PcCjmCt1MajCr9gW8xgghFRubRhn1ikVGSY+UlMguPmExaM2N3E
/ohzXyY11VDBXjX6QmFpyXpaUUdeNktjpkyzthCVzulHmyUdPDiWcTUPAWDd
0MXarW+hHEg9T9FIDnT3k7H+/4RT/6SN/z+ZPcBRVksUgvruS7AQQ3Zq2Nul
PD76S18Ca7ejIQpNqh6Anzx8BK9kV4XZBnYcW+I7KsfTFP3m0R9r59XL46Pd
MAC0TfNFNfXnX8775n+M2TvPFheuOnutrel+kSJEoYWpjTadyiYMmKZCfVH6
0OXjcQ9438JnZCNa9GsMzb7asMj7G57VnITgtGXvtCfw0WRkayIQBkwMjQal
8gNrWlhhKP/5zSTyDvlnFAhZCwnyiH8z6XXQLcZqPxdi+0XXEk/MWAitvCYB
y7iiAT8nHXMPgGEuBlnPNTDVV3RvyvnsjYIdQyProypX5k223rLMgTVdQzOZ
43nHqeyJDMy1vhwvr6e2HO/5QqwnxsuNRTAb3nRSbA/SVG9Yd5PWmuHc/oir
IroN1E2Qs2IcZ1yQZFa0HQIDjwB/3oGHttVPA3/8NWp2cuaxFuLwQ+diUo0c
MKKaHX7CFe26oaPId82JpNsPT02yp06WVaCXOP0WeiEolg+lBOkB/iZZkmS1
FkToLvcahhCK9P/Ef5MvesV3+gXwEh+zPjOkECAnpYaKesazYM1ojLk0FdVW
gYrJqWPn+m8LwyuCV8yva4uvqg69nI/YeR1ZvC5HTlqoIMZJB204X/thqNkJ
UEhjmV08qQ1UTzValuhZYnfsF/WCYameHjAe6gJnrrO0q2SpAl8g7owa8tAg
ns8HNgmgv/D+lBJzm51/y4zZKDS6FmoaqgBcu2XmiVDw3xEp/o0mcAKS58iX
TO8FJXrIe8KIuUnviJBNjB8nwsfdVvN8hqHJZPswPoNCWxFnV2uYPHr0EpVQ
TARTNI3N9NZlsRqqrxbAZ503KJs3+MZHzzg5txZvyeOTNCepe9WMSZwOTUHw
OMtICLJNVCYUhCBM6p5TABb8aIOgDQgYaJ8RF0F74vPzryOKuFcPMUXHmHJW
FfMiK66WrFvxhvXe+6OwCSG7kvLS2nkpPAoUbfXsVEKGbn/zm17WiDp+OhiM
drKHA70GOIRYCrC0SVPh9/JGtRsM7Dhi/lZjxIj4/RfTREsl7vKGT1MGRGkh
1BfHpLQRv3c/4u3iN+e2k2ReT0U7+LATBB+/c2GAEmUuAySA/sdwS/zUh4if
IsMwJD3ZLBqo+KrjN3gL3RRuaPecc1Q5iqLtBha3R5EOKbPN3EPRPxRwUkpd
9RGBYTFHoZjDYgQ5U+E72AT2g4TZUvdJQZTEk50zEAy6AmGQXISso5Vsvt8z
yVx2FK83n1/7ysS4WAm1Hs53oe2FGCMZqJ7DxMQq85FVnUdWxLqYXBePMTUH
xU1ZMsA7K+Ksya6nVXy6mG4NBoWzzeaL2gWxNRK1OerYbp6J7YafjWmQTrat
b43bQRhr5R5ybYpte4BaM/CXpFBoUo7eAz2aUJ9G23TIHH0Wc01TjlArrFzP
UXFzm+lE6QNE/tAGw2T0humtVTi9FB3JrYPMtQdsL3Y7c5NmmY2MxHpXnNNG
+/XBYSIi1qswe2dcrkPnnVS1mAJBxw5rDlCYbLeOWiWeIx1dTIQDTQBFe8G9
F9eq1grrkhmTJewCxztQNhHj5W0Dds0DSO4uoAduksqkEiaJ9ifuOJiT189P
dPSi9tFbbdrOru7Nsp1ddRq2s6t/Ts1z48f3r4Zex5jgl/Bm5fg/s250XXn2
n1FveotMZ23t21oS5XpauVXitqeXa8tb65nWhfCu5XZOo/Ci4/53SAYIyaf8
Mh4n5mI0DpTGe/nk8PRsl+soNVLPB0oqyndwn/i4sd0+gJsWEjunx4V7r2vO
qtGUywMqp5Cc7iugKFU/PtMTeJfvmuyXwGZGfcrJ7Sahf6pTLQykDlGFmn2p
37iOzY6EaLTV6vK28QUIzMA7dIKF1nnb8oXThiZPvfz+7Bwu8PYxlSD4CHrn
o6tTDdqryzv384VYk2FQB+HPyYkojRgY2mT9oGphimTB7U1U+S3k0479SarP
QaINNlJfqvGixGf/DlFRkzp/DHe7HbX5XaVu2H5J4nHfTq7YrVxoX+k10sWN
uneu11nGT3twWWgOFZrKBy80b0N1ywJ4S2+7QUjBebf8v7kbz/d0UvkBr+Oc
UaSp2B5Mry5K0GUe99WUNUOUKSKgI8OsBCY5GYsSXn4FvKDji+Kas8gYhTG+
RRbzZs4hHMqmN2w8Wm2uEZvWRu4Z5wpBv2FZccHcynuNhFtGdP/S/6hX350/
H6ntP2/DeHmibsp4zkV1OYGDevL500PV6PRlFOHWOm0dHemtkd7wLZm9d2Sp
YIsBFt8o/QzwvoIv6/HcBHk6LUejEY6H1q5BPJnAmvHnrQdD+r8teRr25MAy
fNQf2W+HUK0DgW6CJxXnJ4cuKaHu+c2Fv7nwMWyOCg0p/WXgB/0T/PKnNkMK
tLY9gGkygCBfN6Cy7YDI03Fw0s0GgpbzuKpAsKGm/+PB/5g/gX8+gH8G278L
fNv+7seor8W7zi2vs2qDnTSGJSKJIFO1DMfMYrq6uEqPwNcJjB65kJnmUdDB
dfD140ePnj7uAUP6tUr68IbTFNi1iXwcB/5QDUy1qCCMpr01ALgoLvzpu3zl
R+wo2gbGcyDFIY1aAb+XRxGTbqV5B6z6rx8tLjHTYTcS8Vd75sn29MBfRmAX
6PvQqSEkiG9+7AFLujx0QmelJISuTkB4Z8Gm8mEUvgjYcIUagIWjP3ec93U+
zrfBA8NLmgiAPHywkiBaYLVktrvAqYLnUCOfFzDqfz809lfKhgHGHWDxhrRM
0Q0jbwX4rYNq8DPOoA3r2Hu/2d0UEPGwY3/dN3/8yfwBJPTlxdV8YPYgnV8/
ss1/bPJynx//2ECCMbYiYNYA3Whjvw9ciAHRwf5m7Kyb3YoGyUbks4Z4zUs6
LsmQvOI1WE928RfXlGMOPj8cHnwOosxh+MZs3HEtAI1tfF0ALFN2l1/PCVop
KOhm4qIYx8AzO8UFC0USlzXmDZLiA4jrZVJ34QE/Ifmh/5fw9/cuh/RdMMkq
Nm7T+TAGTQo0WQRoL9jecPTOlvgumNfAdlu3HP2sLzR5JbVl6JZur80v02qg
gYbfKAm6/3uH8WDUp/QKsgZfSxXmEU1dQO/dqPtYjUeQFzfJoDnAFj1eoevh
JgQSeMWqI3XGLIqejdqL2lPtw+PyxGb6t/mzRCq1KiJTDuG4TODNBr136ZVL
qc+1ElQO2c6O24gb0ZEZ0lVqFv/F1jWRb1fOmu8PtqgWaLNSOdz/nCfdephM
XJSIl3e/ptyDreEjHEKHmDB88NL9nfLe+sKPhfOMcUAK50zneHtMEwVUyqu3
sfwwUCPHmE0PakN6KQF7Aq0wnMRoDK7jkpICO6UBDCVwIoI79kTSyWl8zbkn
C7YksOr2ckFQadW8znXGxkjnxdLGewsxbLa1r/ZtYybZscRBkO7ujqJI0xnX
rSg5R+1rWcrhcpGPWeJBv9529RLjNyhKq0RK1MGQy9aw6+ynnLG1SurFfK+d
U4G/h6EaGXC92ffUVVZcwJ6adB5szPZq7lS6QEikGv6qGG0cMAB1o8JKfzSJ
KPVBvkpkssiv9tg0S3+h0keRky5tNx2MsKtSFB0HVD4Mw5GvSUJnKkBdWasZ
MN206R9s+lZD9TzWoVLGDK3sr9KvpZjNiLMSSNabzeaSpfAqggB4CiWhj3zT
GRcJaMWqySb6GCQUC6XK+CayRpF99oXQqXlFH/KJTwZUyBpLrTAIvKcySWvz
gGxwMjivojkfkTsf9L05JTpfONKBrI4jYIBz9Dop6Z9og9e1enj3nrFBkrO2
C7ce2T7BGikVlvWNVbnIc0ssNl/yC30IkPA4hbBHpnYS6E01nODQVLpxmiFT
oZIBop5NT7poy5tdhTCTY7CTgvt2gUqxYPZHl9S7fe3soQVpWiyuKDPAMsJO
zMkZlDEcPundbfSvXjEXkZJ0pE/URVm86TlIjjJ0fmBuT3pcsuMEqLRB/tri
jE5FzYOANDzGaGBOkQzk7KiZ3NB1DUtbe+7SeYWEjdOUnyCm7ZkZ96JEQh4p
zhGejalghCnfampw4taCnL0oKZisUSzCOZDOswWQm8lYnkgA++nAXfRO2R17
XpMFbNk4pWzjOkGzA9Yu3gLcdLViwCrvRBeUm0m6n36PTxJTC2Diyxgm5BUN
6swdnBup9F40M11Y11UvG6oeDho6rmFzoZIDzTd0wmyCUi/NhDscaYbCL59E
tiXYZM0uBQeJLrHO20qesrQLlH6ZomWpVJTI+KiZA213cJtMA3KQ4vptkVdB
nEhKG7rnbd5meUTWxZhMKtP23uk5OWMweVBhBlrrb+bbRrQhPXhrwk1L509c
6l+o7xBKw1v8GtWy6rvNcbynHagYHMpLzgA13cioyvw1nDGKND4KXrrckm9M
6QGYyAK0siPlHYpUYOGyFabPAQanr09bu4Lzx+9g/QrosavIR844p+kfKxE/
uk8lRnRRhFWLqEyi3hbX4oQr+BdMx1yHBstbe62TmccTGQeeO1/ABse1jEAj
pO+2wUcT+fOGPp/yM6v966cRugzLu/qlvqvVL7+lFr/Y+FV9v6pfqE+gdJzC
Pp/CLN6v+D316YbtF/i/MGxdH3tCNx3ULFnKD1/TMVXGeRrAl3Iwf3jRFgfy
Q4j6FH61EQgNVIUw5dCrNkRWeCP70dX4/K9f1m/7yy+WAWzQ6ZrbDuXH/Txc
8aHO+96If1aMr4EairiO13wty4bcechOY1/xURoqPnT4fbcGZst29j+bga0/
/0v+4xeu8xTaVthQkVcDGnzqGZw/ZWr1mhCd4ge5oNkjf8uYxM2jyQDxWxpy
QP/9HXaSw/7SOtZbbiYxdHum0Jq8T3tNuvSlr5hRdVpnyZdbq/U+eGjpR6nq
weqX3Xndj8Zv8uImSyb8Qq2a/gBfIjzAAKdF+eUW0PqWzruZTL7colKhWzps
iPOr0MMhf6P+HXj6DwvrlThNsrmO3MFyL0ZAohgeYO/GLZjF2kiKYUP1FdZM
xEErfhwYcfSHb9R4GqdYD+9lMY3RWf+rYjGG133KUgfDsBsRViZlChfK1zHc
nNmeOi4Agm8WxZ76Y1FOUnVaVOqbFISwek+9WMCt/3LIhSxBmqr2gG9NJ2l0
VmRJiiXW9mDouFD/CSPC2/1smuQVRpY9g/+wWuG/huo0BeBK+BPTuWg0pPjf
osS3S4SuockNlvycJnO4rCdGD0D1mahgCprCkL3Qk4nWD0s/hlWcFrO4AvHU
4beYV5O0VDzoHtywkyXgLcGry7ZBzSY8ejDPfmQaUhqGOfqlYWaImzdp7jxJ
6+oadQfc1IPhJdblzNXx4k3iEp/BO+xykamjY9fj/wHKsWtvj7sBAA==

-->

</rfc>
