<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-cui-ai-agent-discovery-invocation-02" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="AIDIP">AI Agent Discovery and Invocation Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-cui-ai-agent-discovery-invocation-02"/>
    <author initials="Y." surname="Cui" fullname="Yong Cui">
      <organization>Tsinghua University</organization>
      <address>
        <postal>
          <region>Beijing</region>
          <code>100084</code>
          <country>China</country>
        </postal>
        <email>cuiyong@tsinghua.edu.cn</email>
        <uri>http://www.cuiyong.net/</uri>
      </address>
    </author>
    <author initials="Y." surname="Chao" fullname="Yihan Chao">
      <organization>Zhongguancun Laboratory</organization>
      <address>
        <postal>
          <region>Beijing</region>
          <code>100094</code>
          <country>China</country>
        </postal>
        <email>chaoyh@zgclab.edu.cn</email>
      </address>
    </author>
    <author initials="C." surname="Du" fullname="Chenguang Du">
      <organization>Zhongguancun Laboratory</organization>
      <address>
        <postal>
          <region>Beijing</region>
          <code>100094</code>
          <country>China</country>
        </postal>
        <email>ducg@zgclab.edu.cn</email>
      </address>
    </author>
    <date year="2026" month="July" day="06"/>
    <area>IETF</area>
    <workgroup>Network Working Group</workgroup>
    <keyword>AI Agent</keyword>
    <keyword>Service Discovery</keyword>
    <keyword>Intent-Based Selection</keyword>
    <abstract>
      <?line 124?>

<t>This document proposes a standardized protocol for discovery and invocation of AI agents. It defines a common metadata format for describing AI agents (including capabilities, I/O specifications, supported languages, tags, authentication methods, etc.), a capability-based discovery mechanism, and a unified RESTful invocation interface.</t>
      <t>This revision refines the discovery mechanism by defining fields for intent-based agent selection. This capability enables a client, host agent, or orchestration system to describe a task intent and receive a ranked set of candidate agents before invocation, without changing existing discovery or invocation semantics.</t>
      <t>The goal is to enable cross-platform interoperability among AI agents by providing a discover-and-match mechanism and a unified invocation entry point. Security considerations, including authentication and trust measures, are also discussed. This specification aims to facilitate the formation of multi-agent systems by making it easy to find the right agent for a task and invoke it in a consistent manner across different vendors and platforms. Intent-based selection is an application-layer capability and does not define network routing, packet forwarding, path computation, reachability advertisement, or address resolution.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://example.com/LATEST"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-cui-ai-agent-discovery-invocation/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        WG Working Group mailing list (<eref target="mailto:WG@example.com"/>),
        which is archived at <eref target="https://example.com/WG"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/USER/REPO"/>.</t>
    </note>
  </front>
  <middle>
    <?line 134?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>As artificial intelligence technologies advance rapidly, AI agents-autonomous software components capable of perceiving their environment, reasoning, and taking actions to achieve goals-have emerged as a powerful paradigm for task execution. Today, many organizations develop specialized AI agents for various purposes: from text translation and summarization, to code generation, to data analysis and beyond. These agents are often offered as services, accessible over the network and may be integrated into larger systems. However, despite the proliferation of AI agents, there is currently no standard protocol for discovering available agents and invoking their capabilities in a uniform way.</t>
      <t>Existing agent frameworks and platforms facilitate building agents but typically operate in isolated ecosystems, making cross-platform or cross-organization agent interoperability difficult. Each platform tends to define its own APIs for agent description and invocation, which means a client wishing to use agents from multiple sources must adapt to disparate interfaces. This lack of standardization creates friction, increases integration costs, and hampers the development of multi-agent collaborative systems.</t>
      <t>This document addresses these issues by proposing a standardized AI Agent Discovery and Invocation Protocol. The protocol provides:</t>
      <ol spacing="normal" type="1"><li>
          <t><strong>Agent Metadata Specification:</strong> A structured JSON Schema for describing an agent's identity, capabilities, inputs, outputs, authentication requirements, and other attributes. This enables agents to publish their specifications in a machine-readable form.</t>
        </li>
        <li>
          <t><strong>Discovery Mechanism:</strong> A registry-based approach where agents register themselves and clients can search for agents by capability, tags, or intent-based queries. The registry is language and platform agnostic, facilitating cross-platform discovery.</t>
        </li>
        <li>
          <t><strong>Invocation Interface:</strong> A RESTful API that enables a client (which could be a human user application, another agent, or an orchestration system) to invoke an agent's capabilities through a standard endpoint and JSON payloads.</t>
        </li>
        <li>
          <t><strong>Security Considerations:</strong> Guidelines for authentication, authorization, encrypted transport (TLS), and trust establishment, ensuring that discovery and invocation happen securely.</t>
        </li>
        <li>
          <t><strong>Interoperability with Existing Standards:</strong> This specification references existing standards such as JSON Schema, OAuth 2.0 <xref target="RFC6749"/>, and OpenAPI concepts, and leverages established web technologies for broad compatibility.</t>
        </li>
      </ol>
      <t>The primary audience for this specification includes developers of AI agent platforms, providers of AI agent services, and system architects building AI-enabled applications or multi-agent systems. By adopting this protocol, an AI agent developer can make their agent accessible to a wide ecosystem, and a client application can integrate AI agents from multiple vendors without custom integration for each.</t>
      <t>This revision refines the discovery mechanism by defining fields for intent-based agent selection. This capability allows a client, host agent, or coordinator to describe a task intent and receive a ranked set of candidate agents without predetermining which agent to invoke. Intent-based selection does not replace discovery; it can precede or augment the capability-based search defined in earlier sections.</t>
      <t>Some deployments may describe this task-to-agent selection behavior as semantic routing. In this document, that term is only descriptive: it refers to selecting suitable AI agents for a task at the application layer. This document does not define a routing protocol, packet forwarding behavior, path computation, reachability advertisement, DNS behavior, or transport-layer load balancing.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<ul spacing="normal">
        <li>
          <t><strong>AI Agent:</strong> An autonomous software component that can perform tasks using artificial intelligence capabilities. Agents may wrap language models, specialized ML models, or reasoning engines, exposing their abilities via defined interfaces.</t>
        </li>
        <li>
          <t><strong>Agent Metadata:</strong> A structured description of an agent, including name, description, capabilities, input/output schemas, authentication requirements, and endpoint information.</t>
        </li>
        <li>
          <t><strong>Agent Registry (Discovery Service):</strong> A service that maintains a directory of registered agents and supports queries for discovering agents by attributes or intent-based search.</t>
        </li>
        <li>
          <t><strong>Gateway:</strong> (Optional) An intermediary service that forwards or dispatches client requests to appropriate agents. In some deployments, the registry or another service acts as a gateway to simplify client-to-agent connections.</t>
        </li>
        <li>
          <t><strong>Invocation Endpoint:</strong> The URL provided by an agent (or gateway) where clients send requests to invoke the agent's capabilities.</t>
        </li>
        <li>
          <t><strong>Capability:</strong> A high-level function an agent can perform, identified by a string (e.g., "translation", "summarization", "image_classification").</t>
        </li>
        <li>
          <t><strong>Operation:</strong> A specific action supported by an agent. Some agents may have multiple operations; for example, an agent offering both translation and language detection could list these as separate operations, each with its own input/output schema.</t>
        </li>
        <li>
          <t><strong>Task Intent:</strong> A natural-language or structured description of the task that a client wants to accomplish.</t>
        </li>
        <li>
          <t><strong>Execution Context:</strong> Information relevant to selecting an agent for a task, such as domain, language, data location, latency needs, user preferences, or environmental constraints.</t>
        </li>
        <li>
          <t><strong>Selection Constraint:</strong> A rule or requirement that constrains agent selection, such as trust level, compliance requirements, cost limits, authentication scope, data residency, or allowed providers.</t>
        </li>
        <li>
          <t><strong>Intent-Based Agent Selection:</strong> An application-layer capability that maps a task intent, together with execution context and selection constraints, to one or more candidate agents.</t>
        </li>
        <li>
          <t><strong>Candidate Agent:</strong> An agent returned by intent-based selection, together with matching metadata such as match score, selection reason, operation identifier, endpoint, authentication requirements, and invocation requirements.</t>
        </li>
        <li>
          <t><strong>Selection Function:</strong> A registry function, coordinator function, or host-agent function that performs intent-based agent selection by matching task intent against registered agent metadata, execution context, and selection constraints.</t>
        </li>
      </ul>
    </section>
    <section anchor="agent-metadata-specification">
      <name>Agent Metadata Specification</name>
      <t>The Agent Metadata Specification defines a standard JSON document that describes an agent. All agents that wish to be discoverable and invocable through this protocol <bcp14>MUST</bcp14> provide a metadata document conforming to the schema below. This metadata is used for agent registration and returned to clients during discovery.</t>
      <section anchor="core-fields">
        <name>Core Fields</name>
        <t>The following are the core fields of an agent metadata document:</t>
        <ul spacing="normal">
          <li>
            <t><strong>id (string):</strong> A globally unique identifier for the agent. This could be a UUID, a W3C Decentralized Identifier (DID) <xref target="DIDCore"/>, or a similarly unique value, assigned by the registry upon registration or by the agent provider in advance. This ID is used to refer to the agent in all subsequent operations (e.g., retrieval or invocation).</t>
          </li>
          <li>
            <t><strong>name (string):</strong> A human-readable name for the agent (e.g., "Chinese-English Translator Agent"). Names need not be unique but should be descriptive.</t>
          </li>
          <li>
            <t><strong>description (string):</strong> A detailed description of the agent, its purpose, and capabilities in natural language. This helps both human users and selection functions understand what the agent does.</t>
          </li>
          <li>
            <t><strong>version (string):</strong> The version of the agent or its metadata (e.g., "1.0.0"). This allows tracking of agent updates over time.</t>
          </li>
          <li>
            <t><strong>publisher (string):</strong> The name or identifier of the entity publishing the agent (e.g., an organization name or developer name).</t>
          </li>
          <li>
            <t><strong>capabilities (array of strings):</strong> A list of capabilities the agent supports. Capabilities are high-level descriptors (like tags or categories) that clients can filter by. Examples: <tt>["translation", "summarization", "text_generation"]</tt>.</t>
          </li>
          <li>
            <t><strong>tags (array of strings):</strong> Additional tags for search and categorization (e.g., <tt>["nlp", "chinese", "transformer_model", "cloud"]</tt>). Tags differ from capabilities in that they can include broader or orthogonal categories (like domain, language support, deployment model, etc.).</t>
          </li>
          <li>
            <t><strong>endpoint (string):</strong> The URL of the agent's invocation endpoint. If the agent is behind a gateway, this could be either the direct endpoint or, if direct access is not allowed, a gateway path (e.g., the gateway might provide a unified endpoint like <tt>/agents/{id}/invoke</tt> and internally forward the request to the actual agent endpoint). If a shared gateway endpoint is used for multiple agents, the target agent can be identified by the URL path, by gateway-maintained session state, or by an explicit <tt>target_agent_id</tt> field in the invocation request.</t>
          </li>
          <li>
            <t><strong>Location(string, optional):</strong> The location of the registered agent.</t>
          </li>
          <li>
            <t><strong>supported_languages (array of strings, optional):</strong> A list of languages the agent supports (e.g., <tt>["en", "zh", "fr"]</tt>). For agents dealing with natural language tasks, this field indicates which languages are handled. If omitted, the agent is either language-agnostic or should not be filtered by language.</t>
          </li>
          <li>
            <t><strong>authentication (object, optional):</strong> Describes the authentication mechanism required to invoke the agent. This object may include:  </t>
            <ul spacing="normal">
              <li>
                <t><strong>type (string):</strong> e.g., "api_key", "oauth2_bearer", "mtls" (mutual TLS), "none".</t>
              </li>
              <li>
                <t><strong>instructions (string):</strong> Human-readable note or URL for obtaining credentials.</t>
              </li>
              <li>
                <t><strong>scopes (array of strings):</strong> If OAuth 2.0 is used, the OAuth scopes required.</t>
              </li>
            </ul>
            <t>
If no authentication is required, this field can be omitted or set with <tt>type: "none"</tt>.</t>
          </li>
          <li>
            <t><strong>status (string, optional):</strong> Operational status of the agent (e.g., <tt>"active"</tt>, <tt>"inactive"</tt>, <tt>"deprecated"</tt>). The registry may use this to filter out agents that are not currently available.</t>
          </li>
          <li>
            <t><strong>available area(string, optional):</strong> It specifies the area of the agent that can be discovered.</t>
          </li>
          <li>
            <t><strong>additional fields:</strong> Additional fields may include metadata about rate limits (e.g., max calls per minute), pricing info (if the agent charges per use), or links to documentation. These are not standardized here but can be included in agent metadata as needed.</t>
          </li>
        </ul>
      </section>
      <section anchor="operations-and-io-schema">
        <name>Operations and I/O Schema</name>
        <t>Each agent <bcp14>MUST</bcp14> describe its input and output formats. This is done using the <strong>operations</strong> field:</t>
        <ul spacing="normal">
          <li>
            <t><strong>operations (array of objects):</strong> A list of operations the agent supports. Each operation object has:
            </t>
            <ul spacing="normal">
              <li>
                <t><strong>name (string):</strong> The operation name/identifier (e.g., "translateText", "summarize").</t>
              </li>
              <li>
                <t><strong>description (string):</strong> A description of what the operation does.</t>
              </li>
              <li>
                <t><strong>inputs (object):</strong> A JSON Schema describing the expected input. This allows clients to understand what data to send. The JSON Schema can specify required fields, types, enums, media references, or structured objects for different input modalities such as text, images, files, audio, or video.</t>
              </li>
              <li>
                <t><strong>outputs (object):</strong> A JSON Schema describing the output format such as text, images, files, audio, or video.</t>
              </li>
              <li>
                <t><strong>examples (array of objects, optional):</strong> Example input/output pairs. Each example is an object <tt>{"input": {...}, "output": {...}}</tt> showing a sample invocation.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>The term "operation" is used because an agent may expose more than one callable action under the same identity and metadata document. For example, one agent might provide separate operations for <tt>detectLanguage</tt>, <tt>translateText</tt>, and <tt>summarizeText</tt>, each with different input and output schemas. The operation level lets clients select the callable action without treating each action as a separate agent.</t>
        <t>If an agent has a single operation, this array will have one element. If it can do multiple distinct tasks, each is listed here. Some agents may not have structured operations; in that case, the operations field might include a generic operation such as <tt>{"name": "generate", ...}</tt>. For simple agents with one primary function, an alternative is to use top-level <tt>inputs</tt> and <tt>outputs</tt> fields directly. This spec allows both styles, but using <tt>operations</tt> is recommended for future extensibility.</t>
      </section>
      <section anchor="example-agent-metadata">
        <name>Example Agent Metadata</name>
        <t>Below is an example metadata JSON for a translation agent:</t>
        <t><tt>json
{
  "id": "agent-12345@example.com",
  "name": "Chinese-English Translator",
  "description": "Translates text between Chinese and English with high accuracy using a fine-tuned model.",
  "version": "1.2.0",
  "publisher": "ExampleAI Inc.",
  "capabilities": ["translation"],
  "tags": ["nlp", "chinese", "english", "cloud"],
  "endpoint": "https://api.example.com/agents/translate",
  "location": "112.40832, 34.636055",
  "supported_languages": ["en", "zh"],
  "authentication": {
    "type": "api_key",
    "instructions": "Include 'X-API-Key' header with your API key."
  },
  "status": "active",
  "available area": "shenzhen",
  "operations": [
    {
      "name": "translateText",
      "description": "Translates text from source language to target language.",
      "inputs": {
        "type": "object",
        "properties": {
          "text": {"type": "string"},
          "source_language": {"type": "string", "enum": ["en", "zh"]},
          "target_language": {"type": "string", "enum": ["en", "zh"]}
        },
        "required": ["text", "source_language", "target_language"]
      },
      "outputs": {
        "type": "object",
        "properties": {
          "translated_text": {"type": "string"}
        }
      },
      "examples": [
        {
          "input": {"text": "你好世界", "source_language": "zh", "target_language": "en"},
          "output": {"translated_text": "Hello World"}
        }
      ]
    }
  ]
}
</tt></t>
        <t>This metadata tells us the agent is an active translation agent for Chinese and English, requires an API key for authentication, and has one operation <tt>translateText</tt> with a clear input/output schema.</t>
      </section>
    </section>
    <section anchor="agent-discovery-mechanism">
      <name>Agent Discovery Mechanism</name>
      <t>The discovery mechanism allows clients to find agents that meet certain criteria. Discovery is provided by an Agent Registry (or Discovery Service) that aggregates metadata from multiple agents.</t>
      <section anchor="registry-overview">
        <name>Registry Overview</name>
        <t>The Agent Registry is a network-accessible service that:</t>
        <ol spacing="normal" type="1"><li>
            <t>Allows agents (or their administrators) to register metadata about the agent.</t>
          </li>
          <li>
            <t>Stores and indexes these metadata entries for efficient search.</t>
          </li>
          <li>
            <t>Provides endpoints for clients to query and retrieve agent information.</t>
          </li>
        </ol>
        <t>A registry may be operated by an organization for its internal agents, or by a third party acting as a directory of agents across multiple providers. Multiple registries can coexist; interoperability between registries is facilitated by consistent metadata formats, though formal registry federation is out of scope for this draft.</t>
      </section>
      <section anchor="agent-registration">
        <name>Agent Registration</name>
        <t>An agent (or its administrator) registers with the registry by sending its metadata to a registration endpoint:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Endpoint:</strong> <tt>POST /agents</tt></t>
          </li>
          <li>
            <t><strong>Request Body:</strong> The agent metadata JSON document.</t>
          </li>
          <li>
            <t><strong>Response:</strong> On success, the registry returns <strong>201 Created</strong> (if a new agent was added) or <strong>200 OK</strong> (if an existing agent was updated), with the stored agent metadata (including the assigned <tt>id</tt> if the agent did not provide one). If validation fails (e.g., missing required fields), the registry returns a <strong>400 Bad Request</strong> with error details.</t>
          </li>
        </ul>
        <t>The registry <bcp14>MUST</bcp14> validate the metadata against the schema. Registration may require authentication (for example, the registry only allows verified publishers to register agents).</t>
        <t>Updates to an agent's metadata (e.g., a new version, changed endpoint, etc.) can be done via a PUT request to the agent's entry:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Endpoint:</strong> <tt>PUT /agents/{id}</tt></t>
          </li>
          <li>
            <t><strong>Request Body:</strong> Updated metadata.</t>
          </li>
          <li>
            <t><strong>Response:</strong> <strong>200 OK</strong> on success; <strong>404 Not Found</strong> if no agent with that ID exists; <strong>403 Forbidden</strong> if the requester is not authorized to update that agent.</t>
          </li>
        </ul>
      </section>
      <section anchor="querying-agents">
        <name>Querying Agents</name>
        <t>Clients query the registry using the search endpoint. The protocol supports two types of queries:</t>
        <section anchor="attribute-based-query-filter">
          <name>Attribute-Based Query (Filter)</name>
          <t>Clients can specify criteria to filter agents by capabilities, tags, supported languages, etc.</t>
          <ul spacing="normal">
            <li>
              <t><strong>Endpoint:</strong> <tt>GET /agents?capabilities=X&amp;tags=Y&amp;language=Z&amp;location=shenzhen</tt></t>
            </li>
            <li>
              <t>or a structured query via <strong>POST /agents/search</strong> with a JSON body.</t>
            </li>
          </ul>
          <t>For simplicity, <strong>POST /agents/search</strong> is recommended for more complex queries. The body might look like:</t>
          <t><tt>json
{
  "filters": {
    "capabilities": ["translation"],
    "supported_languages": ["en", "zh"],
    "tags": ["nlp"]
  },
  "top": 10
}
</tt></t>
          <t>This returns up to 10 agents that match all the specified filters. Filters are combined with AND logic (the agent must satisfy all conditions). Capabilities and tags are matched by set intersection (the agent must have at least the ones listed).</t>
          <t>The response is a JSON array of agent summary objects:</t>
          <t><tt>json
[
  {
    "id": "agent-12345",
    "name": "Chinese-English Translator",
    "description": "...",
    "endpoint": "https://api.example.com/agents/translate",
    "capabilities": ["translation"]
  },
  ...
]
</tt></t>
          <t>Summary objects include essential fields to help the client decide which agent to use, without returning the full detailed metadata. A client can retrieve full metadata via the single-agent endpoint.</t>
        </section>
        <section anchor="intent-based-query">
          <name>Intent-Based Query</name>
          <t>In addition to attribute-based search, the registry can support intent-based queries where the client describes the task to be performed. The matching mechanism is implementation-specific and is outside the scope of this document.</t>
          <ul spacing="normal">
            <li>
              <t><strong>Endpoint:</strong> <tt>POST /agents/search</tt></t>
            </li>
            <li>
              <t><strong>Request Body:</strong>
                <tt>json
{
  "intent": "Summarize long legal documents in Chinese.",
  "top": 5
}
</tt></t>
            </li>
          </ul>
          <t>The registry returns a ranked list of candidate agents whose metadata matches the task intent. For example:</t>
          <t><tt>json
[
  {
    "id": "agent-67890",
    "name": "Legal Document Summarizer",
    "description": "...",
    "match_score": 0.93
  },
  ...
]
</tt></t>
          <t>Intent-based queries enable flexible discovery beyond exact filter matching, aligning with how users or orchestrating agents might reason about tasks. Registries that do not process the <tt>intent</tt> field can rely on provided filters.</t>
        </section>
        <section anchor="retrieve-single-agent">
          <name>Retrieve Single Agent</name>
          <ul spacing="normal">
            <li>
              <t><strong>Endpoint:</strong> <tt>GET /agents/{id}</tt></t>
            </li>
            <li>
              <t><strong>Response:</strong> Full metadata JSON for the specified agent, or <strong>404</strong> if not found.</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="agent-invocation">
      <name>Agent Invocation</name>
      <t>Once a client discovers a suitable agent, it invokes the agent by sending a request to the agent's endpoint. This section defines the interface for invocation.</t>
      <section anchor="invocation-request">
        <name>Invocation Request</name>
        <t>To invoke an agent, the client sends an HTTP POST request to the agent's invocation endpoint with a JSON body containing the input data for the agent's task.</t>
        <ul spacing="normal">
          <li>
            <t><strong>Method:</strong> POST</t>
          </li>
          <li>
            <t><strong>URL:</strong> The <tt>endpoint</tt> URL from the agent's metadata (e.g., <tt>https://api.example.com/agents/translate</tt>). If a gateway is used, the URL might be a gateway-provided path.</t>
          </li>
          <li>
            <t><strong>Headers:</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>Content-Type: application/json</tt></t>
              </li>
              <li>
                <t>Authentication header as required (e.g., <tt>Authorization: Bearer &lt;token&gt;</tt> or <tt>X-API-Key: &lt;key&gt;</tt>).</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>Body:</strong> A JSON object containing input data as per the agent's input schema. If a shared gateway endpoint is used and the target agent is not already identified by the URL or authenticated session, the body <bcp14>SHOULD</bcp14> include <tt>target_agent_id</tt>.</t>
          </li>
        </ul>
        <t>For example, invoking the translation agent:</t>
        <t><tt>json
{
  "text": "Hello, how are you?",
  "source_language": "en",
  "target_language": "fr"
}
</tt></t>
        <t>This corresponds to the agent's expected input fields. If the agent had multiple operations and a unified endpoint, there might be an additional field to specify which operation or capability to use. For instance, the JSON could include something like <tt>"operation_id": "translateText"</tt> if needed. Alternatively, different operations could be exposed at different URLs (e.g., <tt>/agents/xyz/translate</tt> vs <tt>/agents/xyz/summarize</tt>), in which case the operation is selected by the URL and no extra field is required.</t>
        <t>If the request is sent to a gateway endpoint shared by multiple agents, the invocation body can identify the destination agent explicitly:</t>
        <t><tt>json
{
  "target_agent_id": "agent-12345@example.com",
  "operation_id": "translateText",
  "text": "Hello, how are you?",
  "source_language": "en",
  "target_language": "fr"
}
</tt></t>
        <t>When a gateway receives such a request, it <bcp14>SHOULD</bcp14> use the <tt>target_agent_id</tt>, together with registration metadata and local authorization policy, to forward or dispatch the request to the appropriate agent endpoint. If the target agent is already identified by the gateway URL (for example, <tt>/agents/{id}/invoke</tt>) or by prior gateway state, the <tt>target_agent_id</tt> field <bcp14>MAY</bcp14> be omitted.</t>
        <t>Except for common fields such as <tt>target_agent_id</tt> or <tt>operation_id</tt> where they are used, the protocol does not fix specific application parameter names; it defers to the agent's published schema. The only requirement is that the client's JSON must conform to what the agent expects. For interoperability, using clear field names and standard data types (strings, numbers, booleans, or structured objects) is encouraged. Binary data (like images for an image-processing agent) should be handled carefully: typically, binary inputs can be provided either as URLs (pointing to where the data is stored), or as base64-encoded strings within the JSON, or by using a multipart request. This specification suggests that if agents need to receive large binary payloads, they either use URL references or out-of-scope mechanisms (like a separate upload and then an ID in the JSON). The core invocation remains JSON-based for simplicity and consistency.</t>
        <t><strong>Headers:</strong> If authentication is required (see Security section), the client must also include the appropriate headers (e.g., <tt>Authorization: Bearer &lt;token&gt;</tt> or an API key header) as dictated by the agent's metadata. The invocation request may also include optional headers for correlation or debugging, such as a request ID, but those are not standardized here.</t>
      </section>
      <section anchor="invocation-response">
        <name>Invocation Response</name>
        <t>The agent (or gateway) will process the request and return a response. The status code and JSON body of the response follow these guidelines:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Success (2xx status):</strong> If the agent successfully performed its task and produced a result, the status <bcp14>SHOULD</bcp14> be <strong>200 OK</strong> (or <strong>201 Created</strong> if a new resource was created as a result, though usually for these actions 200 is fine). The response body will contain the output data in JSON. Ideally, the output JSON conforms to the agent's advertised output schema.  </t>
            <t>
For example, for the translation request above, a success response might be:  </t>
            <t><tt>json
{
  "translated_text": "Bonjour, comment êtes-vous?"
}
</tt>  </t>
            <t>
Here the JSON structure matches what was described in the agent metadata's <tt>outputs</tt>. If the output is complex (e.g., multiple fields or nested objects), those should appear accordingly. The response can include other informational fields if necessary (for example, some agents might return usage metrics, like tokens used or time taken, or a trace id for debugging, but these are optional and out of scope of the core spec).</t>
          </li>
          <li>
            <t><strong>Client Error (4xx status):</strong> If the request was malformed or invalid, the agent returns a <strong>4xx</strong> status code. The most common would be <strong>400 Bad Request</strong> for a JSON that doesn't conform to the expected schema or missing required fields. For example, if the client omitted a required field <tt>target_language</tt>, the agent might respond with 400. The response body <bcp14>SHOULD</bcp14> include an error object explaining what went wrong. We define a simple standard for error objects:  </t>
            <t><tt>json
{
  "error": {
    "code": "InvalidInput",
    "message": "Required field 'target_language' is missing."
  }
}
</tt>  </t>
            <t>
Here, <tt>"code"</tt> is a short string identifier for the error type (e.g., <tt>InvalidInput</tt>, <tt>Unauthorized</tt>, <tt>NotFound</tt>), and <tt>"message"</tt> is a human-readable description. The agent can include additional details if available (e.g., a field name that is wrong, etc.). If the error is due to unauthorized access, <strong>401 Unauthorized</strong> or <strong>403 Forbidden</strong> should be used (with an appropriate error message indicating credentials are missing or insufficient). If the agent ID is not found (perhaps the client used an outdated reference), <strong>404 Not Found</strong> is appropriate.</t>
          </li>
          <li>
            <t><strong>Server/Agent Error (5xx status):</strong> If something goes wrong on the agent's side during processing (an exception, a timeout while executing the task, etc.), the agent (or gateway) returns a <strong>5xx</strong> status (most likely <strong>500 Internal Server Error</strong> or <strong>502/504</strong> if there are upstream issues). The response should again include an error object. For example:  </t>
            <t><tt>json
{
  "error": {
    "code": "AgentError",
    "message": "The agent encountered an unexpected error while processing the request."
  }
}
</tt>  </t>
            <t>
The agent might log the detailed error internally, but only convey a generic message to the client for security. A <strong>503 Service Unavailable</strong> might be returned if the agent is temporarily overloaded or offline, indicating the client could retry later.</t>
          </li>
          <li>
            <t><strong>Status Codes Summary:</strong> In short, this protocol expects the use of standard status codes to reflect outcome (200 for success, 4xx for client-side issues, 5xx for server-side issues). Agents should avoid using 2xx if the operation did not semantically succeed (even if technically a response was generated). For example, if an agent is a composite that calls other services and one of those calls fails, it should propagate an error rather than returning 200 with an error in the data.</t>
          </li>
        </ul>
      </section>
      <section anchor="additional-considerations-for-invocation">
        <name>Additional Considerations for Invocation</name>
        <ul spacing="normal">
          <li>
            <t><strong>Streaming Responses:</strong> Some agents (especially those wrapping large language models) may produce results that are streamed (for example, token-by-token outputs). While this base protocol assumes a request-response pattern with the full result delivered at once, it can be extended to support streaming by using chunked responses or WebSockets. For instance, an agent might accept a parameter like <tt>stream: true</tt> and then send partial outputs as they become available. This is an advanced use case and not elaborated in this draft, but implementers should consider compatibility with streaming if real-time responsiveness is needed.</t>
          </li>
          <li>
            <t><strong>Batch Requests:</strong> If a client wants to send multiple independent requests to an agent in one go (for efficiency), the protocol can support that by allowing an array of input objects in the POST body instead of a single object. The response would then be an array of output results. This is optional and depends on agent support.</t>
          </li>
          <li>
            <t><strong>Idempotency and Retries:</strong> Most agent invocations are not strictly idempotent (since an agent might perform an action or have side effects), but many are pure functions (e.g., translate text). Clients and gateways should design with retry logic carefully - if a network failure happens, a retry might re-run an operation. It's best to ensure that agents' operations are either idempotent or have safeguards (for example, an operation that sends an email might have an idempotency key).</t>
          </li>
          <li>
            <t><strong>Operation Metadata:</strong> In cases where the agent defines multiple <tt>operations</tt> in its metadata, the invocation interface might allow a generic endpoint that accepts an operation name. Alternatively, each operation could be a sub-resource. This draft leaves the exact mechanism flexible: an implementation could choose one of these approaches. The key is that the invocation uses POST and a JSON body following the agent's schema.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="intent-based-agent-selection">
      <name>Intent-Based Agent Selection</name>
      <t>Intent-based agent selection is a capability of the discovery mechanism defined in this document. It enables a client, host agent, or orchestration system to describe a task intent and receive one or more candidate agents prior to invoking any specific agent.</t>
      <t>This capability is intended for cases where the requester knows what task should be performed, but does not know in advance which agent, operation, provider, or deployment should perform it. An implementation can use semantic matching, metadata filtering, constraint evaluation, and ranking to produce a candidate set.</t>
      <t>It operates on the following conceptual model:</t>
      <t><tt>
(Task Intent, Execution Context, Selection Constraints) -&gt; Ranked Candidate Agent Set
</tt></t>
      <t>The task intent represents the work to be performed. The execution context supplies information that can affect selection, such as language, domain, data location, latency requirements, or user preferences. Selection constraints express requirements that <bcp14>MUST</bcp14> or <bcp14>SHOULD</bcp14> be satisfied, such as trust level, certification, access control, cost limits, or data residency.</t>
      <t>Intent-based selection returns candidate agents rather than directly invoking an agent. A client <bcp14>MAY</bcp14> invoke one of the returned agents using the invocation mechanism defined in this document, <bcp14>MAY</bcp14> retrieve additional metadata before invocation, or <bcp14>MAY</bcp14> decline all returned candidates.</t>
      <t>This document defines only the information that can be exchanged to support intent-based selection before normal invocation.</t>
      <section anchor="selection-request">
        <name>Selection Request</name>
        <t>A registry that supports intent-based selection <bcp14>MAY</bcp14> expose this capability through the existing <tt>POST /agents/search</tt> endpoint or through another deployment-specific endpoint. The following request body illustrates the information model:</t>
        <t>For example:</t>
        <t><tt>json
{
  "intent": "Summarize a long Chinese legal contract and identify unusual risk clauses.",
  "context": {
    "language": "zh",
    "domain": "legal",
    "data_location": "cn",
    "latency_ms": 3000
  },
  "constraints": {
    "required_trust_level": "verified",
    "data_residency": "cn",
    "max_price_per_call": "0.10"
  },
  "top": 3
}
</tt></t>
        <t>The <tt>intent</tt> field <bcp14>SHOULD</bcp14> describe the desired outcome rather than naming a specific agent. The <tt>context</tt> and <tt>constraints</tt> fields are optional, but implementations <bcp14>SHOULD</bcp14> treat selection constraints as binding requirements when their semantics are understood.</t>
      </section>
      <section anchor="selection-response">
        <name>Selection Response</name>
        <t>The response is a ranked list of candidate agents. Each candidate identifies an agent and <bcp14>MAY</bcp14> include the operation identifier, endpoint, match score, selection explanation, constraint evaluation result, and invocation metadata.</t>
        <t>For example:</t>
        <t><tt>json
[
  {
    "agent_id": "agent-67890",
    "name": "Legal Contract Analysis Agent",
    "operation_id": "summarizeAndAssessRisk",
    "endpoint": "https://api.example.com/agents/legal-contract",
    "match_score": 0.94,
    "selection_reason": "Matches Chinese legal summarization and risk-clause analysis requirements.",
    "constraint_result": {
      "trust_level": "verified",
      "data_residency": "cn"
    },
    "authentication": {
      "type": "oauth2_bearer",
      "scopes": ["agent.invoke", "legal.analysis"]
    },
    "expires_at": "2026-07-02T12:00:00Z"
  }
]
</tt></t>
        <t>The <tt>match_score</tt> field is a relative ranking signal whose scale is implementation-specific unless otherwise documented by the registry. The <tt>selection_reason</tt> field is intended to support transparency and debugging; clients <bcp14>MUST NOT</bcp14> treat it as a security assertion. If <tt>expires_at</tt> is present, the client <bcp14>SHOULD NOT</bcp14> rely on the candidate after that time without repeating selection or discovery.</t>
      </section>
      <section anchor="relationship-to-discovery">
        <name>Relationship to Discovery</name>
        <t>Intent-based selection and discovery are complementary. Discovery allows clients to search for agents by known attributes, tags, capabilities, or intent terms. Intent-based selection allows clients to provide a task intent and receive a ranked candidate set that may reflect semantic fit, context, and selection constraints.</t>
        <t>An implementation <bcp14>MAY</bcp14> provide intent-based selection as part of an Agent Registry, or as a function of a host agent or coordinator. Regardless of deployment model, it does not change the agent metadata format or invocation interface defined by this document.</t>
      </section>
      <section anchor="non-goals">
        <name>Non-Goals</name>
        <t>Intent-based selection explicitly does not define or replace:</t>
        <ul spacing="normal">
          <li>
            <t>IP routing or packet forwarding</t>
          </li>
          <li>
            <t>Path computation or next-hop selection</t>
          </li>
          <li>
            <t>Reachability advertisement</t>
          </li>
          <li>
            <t>DNS or name-to-address resolution</t>
          </li>
          <li>
            <t>Transport-layer load balancing</t>
          </li>
          <li>
            <t>Service mesh traffic routing</t>
          </li>
          <li>
            <t>Agent invocation semantics</t>
          </li>
          <li>
            <t>Global or persistent agent identifiers</t>
          </li>
        </ul>
        <t>Intent-based selection answers the question "Which agent or agents are suitable for this task under the current context and constraints?" It does not answer "How should network traffic reach a destination?" or "Where is a named service located on the network?".</t>
      </section>
    </section>
    <section anchor="backward-compatibility">
      <name>Backward Compatibility</name>
      <t>All discovery and invocation mechanisms defined in previous revisions of this document remain valid and unchanged.</t>
      <t>Intent-based agent selection is optional for baseline protocol conformance. Implementations <bcp14>MAY</bcp14> support this capability incrementally, and registries <bcp14>MAY</bcp14> provide intent-based selection without affecting existing clients. Intent-based selection is <bcp14>RECOMMENDED</bcp14> for deployments that support dynamic agent selection, multi-agent orchestration, or intent-driven task delegation.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Security is a critical aspect of this protocol. All discovery and invocation traffic <bcp14>MUST</bcp14> be protected with TLS <xref target="RFC8446"/>, and authentication mechanisms such as OAuth 2.0 <xref target="RFC6749"/>  bearer tokens, API keys, or mutual TLS are required except for public discovery endpoints. Registries <bcp14>MUST</bcp14> enforce per-client entitlements, ensuring that both search results and invocation access respect permissions and scopes. Gateways forwarding requests should authenticate themselves to agents, and agents should maintain stable identifiers and use signed responses when integrity is essential. All communication <bcp14>MUST</bcp14> be encrypted, and agents are encouraged to disclose data-retention or logging practices, while sensitive data is best handled by on-premises or certified agents. To mitigate abuse, registries and agents <bcp14>MUST</bcp14> implement rate limiting and quotas, particularly in intent-based search scenarios. Trust mechanisms such as certification, test harnesses, or reputation systems may be used to validate agent claims, and metadata fields like "certification" or "quality_score" can inform client trust decisions. Systems <bcp14>SHOULD</bcp14> also provide audit and logging with privacy-aware retention, while clients must treat agent outputs as untrusted until verified, using sandboxing and validation before executing code or commands.</t>
      <t>When a gateway accepts <tt>target_agent_id</tt> in an invocation request, it <bcp14>MUST</bcp14> verify that the requester is authorized to invoke the identified agent and operation. A gateway <bcp14>MUST NOT</bcp14> treat a client-provided <tt>target_agent_id</tt> as sufficient proof of authorization.</t>
      <t>When intent-based selection is used, security considerations extend to the pre-invocation phase. Implementations <bcp14>SHOULD</bcp14> validate agent capability claims, apply selection constraints, and exclude agents that do not meet trust or reputation requirements. Agents deemed unsafe <bcp14>SHOULD NOT</bcp14> be returned as candidate agents.</t>
    </section>
    <section anchor="example-interaction-flow">
      <name>Example Interaction Flow</name>
      <ol spacing="normal" type="1"><li>
          <t><strong>Search or Select:</strong> Client <tt>POST /agents/search</tt> with <tt>{"intent":"summarize an English financial report and identify risk factors","context":{"language":"en","domain":"finance"}, "constraints":{"required_trust_level":"verified"},"top":3}</tt>.</t>
        </li>
        <li>
          <t><strong>Select Candidate:</strong> Registry returns ranked candidate agents with <tt>agent_id</tt>, <tt>name</tt>, <tt>operation_id</tt>, <tt>endpoint</tt>, <tt>match_score</tt>, <tt>selection_reason</tt>, and invocation metadata. Client may retrieve full metadata via <tt>GET /agents/{id}</tt> if needed.</t>
        </li>
        <li>
          <t><strong>Invoke:</strong> Client <tt>POST</tt> to the selected agent's <tt>endpoint</tt> (or gateway path) with inputs conforming to the selected operation schema and required authentication header.</t>
        </li>
        <li>
          <t><strong>Handle Response:</strong> Client processes the success or error response; it may log usage and optionally provide feedback to the registry.</t>
        </li>
      </ol>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC6749">
          <front>
            <title>The OAuth 2.0 Authorization Framework</title>
            <author fullname="D. Hardt" initials="D." role="editor" surname="Hardt"/>
            <date month="October" year="2012"/>
            <abstract>
              <t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf. This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6749"/>
          <seriesInfo name="DOI" value="10.17487/RFC6749"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="ServiceMesh">
          <front>
            <title>Service Mesh: The Next Step in Microservices</title>
            <author initials="J." surname="Buisson" fullname="J. Buisson">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
          <seriesInfo name="Communications of the ACM, Vol. 63 No. 12, December 2020" value=""/>
        </reference>
        <reference anchor="LangChain" target="https://www.langchain.com/">
          <front>
            <title>LangChain: Building Applications with LLMs through Composition</title>
            <author initials="H." surname="Chase" fullname="H. Chase">
              <organization/>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="AutoGen">
          <front>
            <title>AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation</title>
            <author initials="Y." surname="Wu" fullname="Y. Wu">
              <organization/>
            </author>
            <author initials="et" surname="al." fullname="et al.">
              <organization/>
            </author>
            <date year="2023"/>
          </front>
          <seriesInfo name="arXiv:2308.08155" value=""/>
        </reference>
        <reference anchor="RosenbergDraft">
          <front>
            <title>AI Protocols</title>
            <author initials="J." surname="Rosenberg" fullname="J. Rosenberg">
              <organization/>
            </author>
            <date year="2023"/>
          </front>
          <seriesInfo name="draft-rosenberg-ai-protocols-00" value=""/>
        </reference>
        <reference anchor="DIDCore" target="https://www.w3.org/TR/did-core/">
          <front>
            <title>Decentralized Identifiers (DIDs) v1.0</title>
            <author initials="" surname="W3C" fullname="W3C">
              <organization/>
            </author>
            <date year="2022"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 647?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA8192ZIj15nePZ4iDUaIVQwAXb1RVJEip3ohWaNeOF3VpqgJ
RlcCmQWkOpEJ5VJVIKPfwLf29dz4xk/gm7mxX2Ucfg3/37+cJYHqbsmasCc0
UnUi8yz/+fftTKfT0SeffDL6JDmturyp8m76pEkvu+R52rzN6usqOc/XmzLt
8hFeepVX6TpPulXRJpdFmSeXTb1OMnwx7eqsnm7rvsEr001Td/WiLmfrLOnq
ZJl3SdulTZdnMxpH5uCxLutmnXYJDTiWcb6yMb6efnVdN2+XTd1v6O/qaxpr
PON1fFs3SVEVXZGWSZt3/WaS0FdJXZXbpMpznjLPio5WSjMUTdsl87JevE3q
S/pnXmYtVvESr4+7oivzMX/W4rt5nixWabXMsy+TLC/zLk/G6Xze5FfjpLjE
PE3C32DN7apuOox1Um2TmmZrkkVNkKy6ZJFWGAvLyLNJMu87Hjpt8su+TKq6
w2RF1TV11i/ovaapG17WWQ2w8CqT66Is8RltMkn7riZQFYu0pHVnfVNUS9k9
1kVzbxMaPOkrXb6A6kldfUrgrRZln9FOpkdH44SgN57iUNuO9lQplEo+XKzg
WTrPy9b9QieUfOhsdDhZQUsnMN/SQPi8q+uSAUsbJ/DQH3i66JsGULrKm7ao
qy9pI7S6rF5g9DHmTPKblFAvl22cA+U6xUXM0CZvm3QNFJ02l4vjZNV1m/b4
zp1l0a36+WxRr+8s0nl9J3yLxvmJ0AQn0+Q00iLntdA6ikYgoCecbGSxaZIV
l/QHViqICvA8Zvg6qNFC6cCxC2yO3lmsHNwIsw9mN+uSN/TH588mSd4tZrPZ
ITZFdMeIdJyMT06TkyVmeVK0i5qAQmdZZUSUV/WCjpyG/kEJajwSZOSPnpz+
MB7RC/mybrbHdGCX9WikQDzWM1v0xTSl/2D4aWbDTws39PTo3qjt5+uixR66
7YY+PX16/m2SfJKkZVvTTEWV5Zuc/qvqxpNkDJyuGyI+/OP05BH9D1Dq9NX5
t+NR1a/neXM8ymhZxyOihpaA07fHSdf0+YjWfX9ESJLKHCOHRcfJi7zDv5If
6b+A2t/h8ehtvqWn2fEomSYGJfx9ljdXBR2gAxgenjLpTR+lwMAzIt4FNji6
yque1pIkOtOP39HfstF4soSOryjxwj8Y9hEi0eO0Waw8jgW/3eGxBOmOk9dn
T1/defX0h5f0TAhi/0fPTs6fnp2PRkTSxECOR9OkqYEHBPEmX9N2gIfMIgCz
hA6W4PfTLHncF/QvOd2falq2PKib5XFy3tI+Vn2avK4KpqqOQEJMt8nzDntf
0AP8b5MvCSbHyaO8+DN2/glPlJbX6bZN0ivafzovMemizmiau0dHR1884H/2
xKwIyx6viiqlz4gIk/NnT5KD/GaRb7rk9R8OgQb6Hq+SPtus6ophnwtoCR23
tPJ/6HS5szzrZ4uKXiCGJtAiYF1fX8/0zRkJpTsOQh8C0CqtPYQKIlR7xDD6
Ey1muezTatFX4HJ1kxIi/93g9Lv/CzgZeGi129U//LJc0PAGm4/Z/ONZ8qR3
W3+8yivscykP/3/f/BBJSCIuBzAYVcxOCbXx3qtvH//u7t0j/fOLew9/p39+
/tsH9ucXDx58fjwagSkGXyrfeJ63K/wzSYwFG0PhX0je5MSQbrrkrMs3kITP
i0VTt/JOO+YvjXoT/r+pgv4fZ8mjnnhpXfEPzAaTe0f3jvifNEKRt1gTwahe
r/uqEC7cQjeB2Dh5/HyS/EfSnJLP7ycv6lly994keZIvcrBVG+gZHS0hdlHF
e/CPsYYyw9GdbDalm+OaGFXy7NlzkqUr4njLFRaxqYlZ0M/v29X3TFttHu/p
vsyeNqTfeU4H4i1pJQushPkdvXZC2st3+WC99jB5WhE+YbWA+ZQeYZHx0q+K
NHnel10xFUn5uK7A5tIPrZy4wo/94Bm0qXK2by/h+aTNH4ur43v3j76YHX1x
9+FDoBWhQEXnsGQNdrCZUyekP4QgbpgPLUFEeGOvQ5CbZt2SKkfvPzl98rhu
8ngpQBeir7QsfiFBeAq5XZBG2bTJAb3fHiZXd2dH71vjj/cfx0u7d+tJX9+f
EXu5c/7qTlZk0wWt5c5oRCrOiP5vOp0m6ZzYS7roRiPW4Ug76dc4P9oHIR7p
cSksgypLm4xXa/tjlSmL1CGvs4BYCN6s1LSz5LQjVf2yqHg0Qrg1vbHOu5SW
n5oexsPl7aIp5kwW9nVyIMoxHi7STTovSqKGvJ0kp3deJu0mXxDoFAknSdtv
NjXMmAQY3tMQ9LBLl/TfgCQArSuk+Vd11orGdzjBwmz07XTOGorf3TqH0l60
6wlvNCUtHgeWJa9IT4C9EGy9gKV2ScrrTEFK2mDB6mejMAAb2TM26eQCJmxV
DYxLtqRYa5I1MVAIB1V3monm7ZdO2jJYPwO6LOjdSbKqofgv+W8ariZdKceZ
82rbbUtqOzRjBX5OX3Zp+1an5f02hK/En+mXJq3e0ipg79ARk6ZOSAWNX89q
ntOC8wAaE2ZpNRlXbPVgZ/lN0Xb4w4OAN+kA2JKUwTm1DMA8WdZkRhZso8jm
ErD6dgpbg40fhni9yRuDQbquIxQiwBLaXhWMRKmbeErLn4pB4A8hPt9gWTlL
xE1Ns81ITJGFhKmgQBdZ3hgCemQd4BvGJYWAjmKdp23fADFhjUGF5xX1LZ2v
nmeE1klarHn3hFTYH+DtDRiltjWzXsUOPlPe9jpl9ZlMbZp0y4MUWAh93hTL
leIFo5keuxHy2xxfkWRNZY8tYwOdTAXDi08gsL5Ihc/IPuav7VxA+CHqOqTF
YZLml3rxQebpFra5R2MMlNWEx1BshHkklVogJBmBQJNkky7e5rz6a7AneUQS
lFjMpu8UAcmYobO1YTM6964gFDNySLOMzgJU2tZlzzRlrHFdZBlpUeJ9YT8A
myujE1p+A469gIMD2FeWBcER9irhUVWX9bIACWZXKR426abIyu3EY+QUzoKq
Xtc9nXV92V0DE7Bq0rOAsAwIQnQ6WEJrEB9OkU6tILu7uiqaupIN0OZIk+Gd
M4LJcacLkcl03LT3Ir8SImqnq5T+pL2TmCAsB5PY1NfErYiDbdImzYrlmnGB
MSG/ISRXJlNnKa2fTh/EuiRK+UXFfkaDl/VGMFYFmic8jHWVNgX2uekbFijH
4pXqoL0RF6ra0hNI26/X9PovenS0fiiwCQ2mFMbPWGykVVpu20JQbp6TKcLE
k7eOGQGmBNsc9AE05R2bikjwWtD/tAWD+Qqej5XHMIy5Trdw7eB4lzQ5MwOa
vISMbYzGZsn3BED6fAL+uSmUNInblMWlrjkShhP83rBzSn0s8InVTsbul698
qKbWu/0ZpXrcCAWk0C4YGXgkWQaE10+N9yrZN6RNYMMDwg05zdwUVeOlxMvJ
Nlc3F3PdDlCiHdUlgylf1AqdifGfAcOGhcFPQlzSNe0wczCZYkHsbZY8JWx2
qyQMqsQlqOyhoNXBJXryw6lgngwocm3jcCwSTquCmT9hoROYJLHaFYO0ZvPI
UBlIy1x2Q0fQ1j2RZUsPIFuzdMPuQjoukFGXeyWgVY5epuLe9LqUbHpBFNzl
GL5YyJpIgoCq+QAF9fg9EuKtEPkqXW+gK7IaIeTHGttAChAOlWJFQnQbvg7V
PGV/opW0wMu2z01iwvJgiRlpgB/vDGOC9BgtMpg4wGh0d5Z89pmM8twUwbNQ
6B1/9llyAsuXmG4P2v3Hs5cvkjNSXdbpUFdMFXc+JZCxLt0Rr4p1xaIigUD/
S5JD/hhI5yb/S180LBUUyuItTruOJuk7d45OvRKsoEPf9GQatSulwFghFRpc
gwlX+ZSONWMCBvrSSdwDEDwQn5sOInuHjU/7N2WUpGVTA/+vmX/o/PKScK81
CdirXEhZULllX2qbwz3mKYJP14ta04+HmuZfejZ05AxtMQmjsmjWEc+goStC
0WIx8cxjD+U7nY+2fx/bD7Dm1GhG9m+qNZEz7Y4shKFmmxwI+S7qvoQIoB9W
PYkoUG0Tahc4UD1OpwXTa/sU4UPx+rP6E6BVxFfNNPdkQUvLWDFkkDCmbtJt
WacIZIweYJ9OYXwcKYzY6nc9/btky4DPKMLMiVqATiaSmtFsN+CzLDxh7SQH
58/ODieBiknbShkrRUuAh7cRKUFwvNVoWxHMcuALLTUvcUQP5YgGHJm9FE6U
nCkQeC97tFd21UM5ar3qb4Cjd3s6QZLLAXlPkpcntOfk3uwo+fVXdRq9eyf7
e0krBEaQTgqHlRJrCREMY8/vnAB0nc9jhQzgnRMVZaxr0fJkQ2pnbJqClA+C
CunvrMyxJrS7IQ3WON0HvDgQ8V6MTozjDV4IdBDoPGKBgUZJfViwiDXf0OlU
kD4L0bkF/u7R92fJIyi49aaTo6aFG+vFTH5+t25mDySic2Ve8nOgGEGBpOMm
FcwJdbOAlQaDdfFoTl0KtcBIdJqp4AxDQth6HQk7Di8Rr/t/Y0GTYlNfv8eA
XtQ1jA14Z/9edrPBYkOSLidqW8sWhL/Jgh1futWqcuaSBc8chL6EKYfT2WBF
dJrMZpasAHC0b+j5UJEhihV4BB1HQ9BowBwYB+loOBCa0Vz1luUma8wOGox/
AMi0q6cDmBOzJkukwCpaZ+6bWYf9ydempEyEbwEukD8cRnZa3VV+jN0xl2F5
rLOAy/RFx/I2NkjM0JW9hwjMVqgihNOQhlZoagsNqGvHEHU7/Gst0icvzoJv
gWHG5dVGhlRJ5ikJ4QWANYJ5yr7WSngD8O4J0wD/W1jb25y4dg1+O37++uwc
cUH8b/LiJf/96uk/vT599fQJ/j77/uTZM/fHSN84+/7l62dP/F/+y8cvnz9/
+uKJfExPk+jRaPz85Kex8Izxyx/OT1++OHmmQe1IDW1yDe6z5kx42rG9NjJ8
YiR89PiH//Evdx+QVPgPJBbu3b1LYkH/8cXd3z6gf5ByVKn+BiyRfyL2PoJs
SxtWyMoSGE+4UYIFc5YAmQ1Qqwicn/0zIPPzcfLVfLG5++BrfYANRw8NZtFD
htnuk52PBYh7Hu2ZxkEzej6AdLzek5+ifxvcg4dffQOFI5ne/eKbr+HtgDau
aj1rX1XyXg+FECRzFFLZ2BgjkmpJ82J9/BbnSKhFzWQyYRrXTbrxauWaTH6c
TOhSeP7MPSaacF4P0myWEAik4tyosaKSzGlriEt4PuasMt1zZIHs2Byh6Uhs
2xTC0MsHf/wkfHGv5XFH7I6kZQXnY8wPp1G6+Bg7pvyiX5lGfuAtCI2RHepG
NGLGZ7VOaTD6/5b9nyQGEFvEpsyCMMnYqiOG/eitWQG73ghnSXgTaceEEDGi
y/6O5N11usXaDl4yqNLyEJjGp7LOswLKV7Ro5ac8MNvWHTR2Uz0ANFL3xM0F
64gUOC9TWYy0AxE1Ec+ngY7tALEMbN4UChh7xpayXhYpxZqExOVWZ/YSjbTQ
ygvEaWzPPNUjFL04T16/emYKYcaAM5fHAa1DZztU887stzZnNcJvVG0Tllx7
jBNdxWMn0AUVVsVyNYWSXCaXfbVQX4hOH5DxRA1o9n1jiaAGHPdBPlvOiMEH
Djvw+8hfhwekQS/zN4syJQXSFObxoa7q5UbNHsVP1arVXRnEbgLgzCTfKvXM
gn2YTpusbcz2yzAraeK3x84/Fsl00jseR8d1oHct1NUCe5JsiE59IqykqGPH
zzdhFVWMIXM97SF23fs5VA5R3GT3pD/2TVpO3QJo8bezHs7UwhBMF95VlaoT
gnT2GjjaGrU9NectlAP4WjHrqeclhFSED6koll5lclDzitLE2WhZDS4ycTCb
iCe2dO40+P+qheT4EXzYDt94+495d+C+JvmA0AIdSQGClYW7tCC2lOU3dYj0
ZS7c3zFLlUP2YjtU7v3axS5mEpgkAivxzUecF142Ovl1scdFRLxvY1tuctjw
tFXxJcBgkNCoWHuOFwTpTsK13e5Myr4vBqKMe9PGpgV84MucuRYjn/PTS27j
jdgeXtkOYMzuc5LgbEEiUje0RBz/sMeRSrAUtksYWgmVFnstkeECOcQG7HIx
XzsVCb61iEpPghWLfJ94YvNsqZk40fgRUjRwboQ/7qDat8oUY8+b45WTyObz
T+kfsA1VGDjOyuemHLV9r/EpITqFTmQ9LoHO3Y50diCc7B775PZzFzPhff5W
sRPe90YQwnd+L/baOCVevEuqsLcBCz8hjdscpnjnmv2lrO6bTiGBDXdk7HxQ
P1vkyUhYGVdKg2/V1upWQdsG4NWDD8YpjJhmIzJV6859VrSSD+vjBXr6XkQ4
hEc4SuWypveG7sxPYIcRSX3LfgeB52UN1iA6sQhtoLq5JgKVcncfx4KjRZYc
iAxWrW5Z1nMOvfRVQWpBQBnqr8oN6uLX8M7R169PnyDP4cf7j5PbMlA4AeWQ
bCrNW4HbjSUBqUBFmTZ+3qu07CFmSdAvlRtEulW/YaILYAnn29Yv0LFLtskk
VKqLPn3izmWYmGxBIrbi2n7eQjeClHdy2XQVOjbSXGmZcXqBKSOc3R6Dlr3H
3ktv+e/BvKYGIX2ONIPp02rJvv9z1SroZSYhUnmSF/R5K+nu8B7Mc4McImhk
cuq5BI4MXVko+uMFko6SFuV+7cAsk85FWoUfDEOCqnc4Ia4gX+UlyRlWkbwT
vR1wFONwdDYV5BzYACms5klZmrtEN6LJ49EmQBX2PFw5H1IXEKaB+u7saHYE
ePIy1TeHjCUOLIKE+PN+k3EcTUK5xdqAqdEZYPZgFXy8mNUjvy5IQkgW2FGj
MsYADh8EsUsbzLtW8cRwLTqDg7Rp0q3EArGgVg+XFU52DkaxBpvYLLJZ8jh8
AXwl0O4NMeBgPSgLWArpku0nTUOnbw5VawpCRJdFiSDSfDtLnooC3R4nF//8
QXUfYueNj86Pf77QHfOst+w0ywqx/mRtoDD1Nwq+yjoVsApvWktVbjDlQkhv
bMYIeH3evGHvAP9e1n1GCwHGYHjJUREf9JAWOkXdrbqupQiDIwTABvynW9VL
XquHnwJ2qA3bCU0Cg1OcFppjpqBxlv0QIWEfhiSBcGaYfpRp7tFpSDYFkq5W
Bbvk1YaciMR0nD8vWBUTnzksf+9cgI+xuLTH4vjHkJJNzFrtJDCF2ZWpJ4Lh
7PmaU4m8ULbsKTcPA+zijugAd34tsnd3xJC9UJmP4iaWamryqyxhu9exfjKN
UlUk3NCHDA+ST6sUSpKtyLtPAvnujMYgFUNzJgNTeJ4PjODObHfa/QQPdJKp
+VRY9+XqDGhGXT5RUUeD5TfQ74suuZB53vA8b4rsQpQAK+IZKKq0a8WWZ/pY
kQU6sbpODG3KIOfSS2CvMupAzrp+4zIjdwl0MLxnSv6bXY4U0GjOXOGXFf77
shEq/NbHnbM85SxitgqGgkhciBOrXhPgZFA+aVaJhPhVMNsj1CmRMkcIUJPJ
xnVcEWUo5ttnU4tRs60tElhFszBAOW8nGQVwAyPjoJ7/mYhlAKknTuvlBQxT
TS0+pUZIts+ToxJOhmdPhzIkJP+OkPtLbHW7iZUWFZLppnjzNt8C7DUmv/dm
Thw1b/Bg3ZXtODlY90w9EikeV2QEjmc6KiyNplfJHo7+/UAhqjsWciAG0FM9
B/ZLlD9nkknL1gZlc/k2GUAn5mO8SqJydvJYPzZwzQQCpyirGAK38K9FuKOk
rIjBJ553gnkXUlskQLjgwXnFRLu9A8DggJ3vCiWN8mKkvhgNjOHMuqJh8TcZ
jMG/SCwQm0WK1JilU6gt47iRbCRRs9oEMmKCoeEEtAfG+tQxlxVm2OqzxOjc
9u/ltDPfm+ErvRpvx/n3AxMN5yBzeAkulsxArKt5E6CwV+vSOfbErjTxsxjk
1ulNgpyyFpYzSZSq7/JDRNCLBWewklGXHBThGomoGvACvE+wO2S2S/zlrSSF
qR2VWpCXPXkKvyifiR2uUMqN+8uamTcPjLNUFHqGBNl7L73RwRlQd15qCsNo
xKlq8jVbrC4uii2zm1CiVOIqFLec5RhxYKzKNZqCDX/2mbdvCNYMYDUQQ8PH
0ZowkaFmGby6T6/kJXuXizKiVdoeK0nvmExAYf8Bfr4TaNNDn3F+TtpiqEbm
8AzL0O+zeSJTx1kbfl6xOIyVIb3LmLQOEaaOBWljrOrfECFIbid9GBsZpiAj
D3Bg7jAysONUs06jOTjpigls6zm+EMWE6xrhO656zo9E2CMZuEgDN7AepIZf
LNta8Id0y1R1WeflZDcQO+FpKFS/sh8zK2oeGOpZbaDSVLiPh1WEq3/TlOqc
34OpAw6lRkjsT9+kRWNomtsL7GZSVL34dcwfjI+TX2ez2TtIQ/7UHry74Fiv
5jTaFKZ5aRoQpxmMHXqNnQo5J+bNCaGOLUDRRNwxF2dqh3pGEC74mPBgsZsZ
fcQVBRKyJEVJMx46fkRjcnEMjKfTRVr2nogEY8mFBDKeqRIDyRMR4IW4BS4c
EepDH8wY4lnApzR+ORtQvtieZd61QeAKTgPNLomhYckuHVJfOYjLvFKjUuxf
tL2ZAnsaeMpW8gp9GIZ/VPYLXnFZPseJAD1aicCVRtE8mKz2xkDGOWlYq+if
vBqkOUKLFumwG4SCEOEJQloNQlFmXC5S+GEifmUKihynCchUktyhmzqwGokR
XnPZPaksamvD/AVCXwiycHwySibijVtCm3dYA4gl21qcFCy6Busd9UY9CBfC
QsUwu1AmcWEyXSzFchvUqRi7ZN9R222ZAUCcivi68Bu/EGUNBWAoVhej7LIH
9KxI3yXkkXQ1JhA7pUejR/DjKuUbH3BUxPxLg1dhqG8pLtWLi4s/o/TzV+JI
4yIDSPmn6d179x88DKvKxxO8YnC/3eEn7wVSCq/bz7nwR2Id3XWeV4kOw7C1
ofi44MKB/U0W0WJraRSo1cmnXQ8Dkx0JM5lM/WeY6O6MNGh56jxdeK6wOzlN
TquFfhZ6P+id2LvzM78Chwz/tOtsyWW5gYuFvzBDG5Na2SFZI7OwnF7NfseG
ZDlmt/I27t6bPTj64v69SXL/wezz+58fPXwob+0xW3mBztKUZcRGAfg9F0SO
IW35kM1AksehxYOfT5UKP/3j9OSH0+kf8u2nRPjsBeLj4a4iSDulMWYozHwn
i2NDgMcXPV/WEqng+JVOpfplhSXjd08Q2Akv6Fet73T4NtCZ7OcPoBk7uaQ0
ITCra/NxOMPWDyjE7uAVwUykqnsXKMZpwIo//otEHIF45j4WHW78bhK+JUtz
J7nvA8a0fj0443gYdaX8DcO4UYIBx6aiCU2YjjpY6mR32p9Hg7FU2/h7gNMO
NntzK2T9XnbWYXqWw68Qx/y5y7Ay/vjf/vVf/td//dd/++//5X//5/+0DwDH
5tfZhT4gHJ+QV7v2bGX8fU4SA609ymzPNgSs+NfPo3dg2JoE7Fg8MsqgksW+
Hog2JsJdvs/yYA/rnZh2zl8ree/Pweeym1ZC504+DxQrYRXIzZBEw32pIC4K
u6fsQ9TPfWnNuwYJV3GGnoF1TgS+IGxKCxQVFSTki3QWTCMx1DD5aJhHRvve
TSVTv8Ny2eRLZjS+bjvK6nbpA5984od8eYVR8uswuPwqqCRJreBuGuSchxlg
Uil0ognZWg8uETkk+WXIk+b4Yt20hxIr1HqYgcPBe9lQdXNG7+dWQJflN676
yX2F4KilveWoPyskbi/5bPdnKHHiWibnaZZ3gyNC5tzWAsgNF2Fa8DLM6DuJ
nUBzQzB3TFGc6VLDZOYxd65s9ThDC0YRYdrAvNCcnp2cP0v0kyped4Y+f0U6
OeCZLg6wgOK8qLmG48vdMj1TcYIPirCQkLcTVhLH9f/s+OVwP/+7DJIw8sxl
gbTsEYMzEQ5CX6DBfRgE+SIs09SGkzDTDuCLMOfQYY3qzlEce75lK1+qqEMu
hNKIKL5tmKCOmTD97+KHl2fniSpCF/zzKw1uPKqzrflSBt6mKLtipl+1G7Rs
YpckWwigm0FaoyQstPT6vaO7yWOuMMyQdllcMsld60TXwIyMGAL3fMHbR8nL
P9iLlS/X8a9LmDU7nHhItSCmYXpK2LWBac/SBC4Q+ojceFkhXngzbInHSlDn
Ki2Rg8RoTxqV9xSiExaNO3CtHN4ChZR29oB29ijNEgU6bVEyp9DUTaPq1m3A
fc9uO12DuOk9T9HsHJ9cMoswjilZlzf0Vx9EWYpxOipS1pXXI82WA1BOrW8j
/iaohJjia418AyF9xdowji7nrpbDxFroBblUHKJ0Ll8IOmROp8kPr893AnE6
R869hPZh+2uH7Bzs24/xsnDvAdnF8AAla4fsX/J5PkheEM58W/cVMLuQyICg
qSAmSa3TJ4LC+sl92MrzghC+kk+CGCOyUDTsqeV2EqQRfDchKM4IYjL/BN7O
FVq8ydHosfJ9YfpxIozz4mqU20dyo+pYF04jiSheQjA6zb8+xrTE3CzXWpMK
eR3JwbccLTj0ywg9kKYMBGEFn7wd56pLIejeHipAjz0n/d1Td9LfhGP9/o+/
wWC//+k3Nsbv//Qbs/h+b/YQ8EKyi7wXRSAI3Pvss5Br3hHoGekqd5wTLtG6
nBMEsdbt5NZP9/gfJA0SCaH5TVzzirHVS1PW9VsOYg9dCAJQr79/hJH90Ubt
0B7/2dmdXb0Zo6tXpB8bv+s3OOm7R7F6yImWyJliRNToT6YIQRsWFJLAKkFj
zlFthvTJiycJ6icXyYFn2lz3juZO7eVWCmrqSuI/xJMGGSrcl2IpQ/M6RBdA
OI61CC0p2xme/WspknZT5bU10g/FL3fo2LWwC1EnGSecb9kCHGv2gqmnOThB
2EZ6bDuuIPMUfKQDaNc2n83MzP7bfSQfxCfDCPRz+llw4SzernMwosifI7Tm
yiMkQdKXuGglnTwjtKBXB2WHPVyY5rQVLDOOdtmXpc9Kc4w8ObERpZenqr/8
thNMIHFGRvbkTuO0jpnwuyiDmpndaHSKbEHBNZZ5jiWGNScDycr8UIhub5G7
Vl1EoAgD+pJ6zwmrmteba9wnyG02aw0RPJyriz5OfaUDLA5WYpE/rvoDNFkO
vgYFcft47R6WtlewEj4Yhnv85k0DAc/M709ETcsuyawr3bScFaWo7tBXuA3a
q72ToQeKkle0tMrVZ7INy1xXdWhkrbWex0FYVhkFQD5Mrp//9ovfHQ3J9Rlv
64nlBLtNfwS18qrecE46/XI0+939PVR2ug+JtDvVJUkStmS9KS/9abCnRWdC
2DCHdLOSdGOXF7OqrzX5Mm7W5YuuRCZJkrzZt4hdOCVU4vqIU9amWnNmFwB9
IUC+CNIkUOwPBcv5B0wqCBG+Mvo9k5gL6zzv1wUirc/rc99GDMC56mORlLpC
a9bzTLuDF4eUvdCH4mutRqOXKOZwdTEGeY4UWRWwy5DV1JvQgRRYeent6q7X
2xD7sLLroCbdFRhq2XkQWmRu5pK8lGSJknbaTUxCNtRyjxv66fvz8x8S5gC3
rG5PquCOpsSVApqyI8uFc8qs8Gg4IJQyoefcKQ/nh/n50etXz8xmvbDZLiQv
iHs7BQMNDZGLj5WAF5baZzl9UZ4Q5hI64Nx2S8lzKIxkPTEovmc/fiuMcZpc
PJYG4NNzTgIKCnDugMtc8Esnsc2moYDUpxq53ZyE3TnQkBVpV8lXHZ1o9fUF
sPjCxRSOk6/e5tuvaWO8MLODNOiuQezgiILjSSXNJT7wwLP4cUmQqbZ+i3Ie
Xbon8ry2t+Q+xj5Rn/Aoh8G4pQXMpm/sJDyqmu5M37B11YdjdZHveMJMEvrk
tu6/0UDRrr/aAi57PNaXzThSnonbiyYpilFE9lGKiPWnj7NwV2m2ryRx0EzQ
G9sdqxsef71KY/oZZ5eoBSf6WJCZE1eJsYY206b7SFJZqGOB0UrSgO1UUBDb
sb4iKbk+GPVGZGoceGJXjWY8JSc+coxmdj5NINiwTzrmvIgs4X4z9iJhks8W
NYK/2f4SEH1y1cY/uTyFi0PgjAIDcfVBGlBhSQcx5uIIqhrx5Sa1tNIws3B0
GjkCZBhRfNNdSlIKQ9nWvmTigAkLv01d6ZqsiNSODmVkPjZhGcLldgflYwL6
YKz6/Uc5+feloh+JNwQA084nlplk0GXpq4yi1xPcYRTD8sHIyep9cCjeJWCX
cYOkZFMTOLdc6Gi55EH1+N688mHt+G6u/ZBh3s4sDQBAvdjVtzf9/VAd9zS9
LwK3LPK90FEcfn7yU5Deyq39uIE3ByGkw67aeS6LZGckCKcQaS68GbR1N0XI
MpyXynVDuSxuggruoIkKUnfWaGLDCYEt957JXHeWkLOaazNzUozTiuAFDWt8
i9YVaqha9Kn2i2I3gdb7YfBBKZJw7tZYYxywmKhjTqJ1AlResNQ8WYWj+PrZ
G3fgkuTlDgWkudR1ieaBt6TtHXISekVMEc2piIU+Itonc0D0IebAkjgnQcdK
/jVVdd1p/IdBuZgmvdtFJcQ1fDdGWo+Mr1mQ6sx1OpGmwxMuCCNmHNc6SW8A
W1mk+PUlq5Y+ganz+YMpdoOxFBZMoVrDgCOxQJRlsAiXTBvXrWFvg9u2Xy6l
wQEOsHABKrsrxvooce9N26R1WJP+LrY5cBXQXtB1rOY86ml9ORVb21nqVskT
JJz1G+6vo4oSN0lAMaLfoCZuL+I2x2j8z/XneEWtwsvIJym1TRb+WsBpGaqm
rL/dmthOqJfnvuewWh6HkaUgnSjRTNhk/ZC3iRbb/hWqaxAVl48PuQ1AsXAB
vX2avkBot6KFoyLRCi3n0y1NuBepYqXTdLJ8TtjBdrJxMm+hoaCVG5KyY+HW
7O495pcYpeLJ8LFB34UDGYSh2Wwz+oJgXoYMIzvWsgDuWOv6ALIa4Cpz1Fcp
ZcEac1669n8aSjmTOEdycO/mRge1ookwbZtfYhbgfVIconRtnDdyd1EmKyVK
nGjAjtepYnieR5E/DQSGYUMXNUSLZM4tQiRQGpdmdh42PIdw+7a3Yi7dpHUk
xkRcosFBvsiBy5BiuKsJFCYdC1OqGKYz1CsLvwveUGW3kqL7gaRxTbYGmayE
GEmcbmt2cGiQuLOf11eoqjXg+7WbJn882ud825MC86iu/kyw5FYULOT+53/r
8nZ6VfftN+PQ05Yk3xtj5h06IeO8Zyz0cCJRq6zAl65kSWBw6ZxOsVFosAUk
IRALspp6a7XqJM5zTog12TZRqlPZpP210IiEO6BJjmhwvmGJpfTcCRIhvFua
DQ5AFzw+1qDaMAlXfWBMiX2LRLc1/FQLkgdS9wo2pnZvLSXBaI+dV1rQjhJi
pGJrM1nHZISdWLGI41CaBO1zD5SmWRBAmll5p4TgkqccWj54sJeEDaGuuQVG
qbQrHiMEnMMytiiMfXNDgwR8Rn3QNatBrPRdm6KwL+gtebGMR+oezFtcPxao
UFFRhDZOQJRsf8x9kKuuMVWVSFZ6lQ6+cppo6XPUA3TVg2VjXAwA2sg+XjFw
OCBhgYGujhQYVqn1UQSJcHC4wZVFyY+57+anydNO42OUCwZq9xM1vxLk7Y1x
HpJLymd4yhl2LiVvDYwWq+lVDI1PB9D4FNSo8J6NXTLcgCOgoIxnvJDIF990
Z92a9vSEkB1J/aDK/3ChKBN4XfnYN/79ou44vn6hrWUv3CZ0zkG/hMClPgvS
WUK6D7wcmnXB0sUlzLpkBa+Pq07YytFZKbVRkmwLgZM+l0KdIH6fanIMSOFu
Em4PCQXNnqQAr2cz3zgQB2oVqVEypYLCSlQHRZAS61SaEb9Mb1lkhwPfkTS7
cA5uUsvzZoWmPwEpqfcOHEhyJpx6ezjZlw7Rhit23W4aEoJ3xHWu7OnhDnvy
DqIlLD0GelJXkTTl2JV2QAlslQNOGYIVKjmTzHPBM69Xcg0f96sxhx93ltK7
V7r9SljI+h6GrO9gLX2a3iJwQb8Rozu1hDjZpmzQjvnh0b07Dy2UIL43Nm83
uFkrXWvT86FCYoINyT63cZlhrOqvYRR8ErzOvWzCUxBbkJWWdKOayDFoWYrA
NziJQMbs5yDnA3Zb1kt1T2koV+nK1eWLXGTTfIFmo9ugYMVIwa6OFJSVtg5i
sSAgjFO4764FJGI0oqdTcY5Q12qnGPQ4wNWSdZM2BSJVdL6w0kRk1peXUJ4n
ISUGyxCHJELQW25P1hg1CCY9rpHDqTFzaZEmrFTriZzfQ30JPDRszKCVfyiQ
7SZNLn4i3F9AZTmA1svwsHQ9qAU+XXTKBCVIOEke6m8tI3L426FrmmmoeVWT
AiO2NowFhVpQGqm5ddZjl7VyXgWHMK7IwsU36JGtP3qjhrUTqzfKDndFvavI
KvRaJ76oLLfCJyRpR70VW+3LqrpT3eb6Fmf3sWtQ9wXWlS7ZH2fkRouQJhaS
UKA5CACs8WhDWefE0HxQL3Li1usM5DCEKGgBhoChzURk6zws/zrItTFpudVd
oH3phn3q7J8YNDI9ZLtXbTG1lIJybmFBOI44MRDq63S+nfIfdm8BncKPTOyM
nPAzeAxNCUfYfWWkP3UnuUk7ELLP2eRMDFkKLtEtroS3gMIRPCj89bgoy8rE
C2MJFK2DkXP0LFY9R/5tRrYXfsznZzX6IrfD4ISvoJQ7iBbsukwD16FEJ2Qm
uZr0wjtluCkmnErIZrEy1rQVP9A8Z5rzdfGupjp1baYyJmGOIUh4gHis3pVh
1pMlFQvjc/kccFIoktrNT3EveYGxB1GBDqtpOWX7Q8FD4K6s0YpWk3M8kB3U
qq07p9BOq0fevTPPgqtf44ao/j4VJrllrQimashiezjw7IY5Moydc01Gtb6Q
llYlcTCfX8TDcGia1XIcM6mEnIDlyjRVWEbyVUwVPlGNgbmiYLFKlVb8CUbW
mOwbNRlxJbsA8zSDxJB2lHhbkhgYqs9dO/fASdUG3iNcxVKyc1+GQKuegvML
Yry13sdaeiL+KqkK5Zb5l5dqKAOF+O4kzLGB8e47aVk7HfMRcCUXcug0lROL
V43IoR7JmWJZWXSERRsn6DmncDI1r43cZwQO23PLFNzwgAJt/c6srWnTs7PT
iQ5c2vcpegtJnIRvkAjzYNtPozhn49oMBVBz0Egvc+KIaOQbM7lwQhnb5Tvw
TaO6PEkErPzQdKZv862G0V0ThqiP82nF9B1mdmm6uaZrOAqKC1SrKMt/J6rn
EzyUdbEjz+tCLlAokGLG1sb75Fu8h8HUPO69EHTta/v51Bxv1pqer2cv8/RK
004kr8hnoFkG0rHEFMJcNB16saohuZwwZn+H3jBj+a9w+4axlwAMfME3k7xE
uL2r03c8jCwG87YNUvrEGPE3Qcd5VUrW0bVxYeRbXTD7KqaCmwvivDo0P/n3
vCLxfc1VNcpnvX+Er26DKJommA8vpCi0iailLA8R2+ewv61QOyBhMCzQ27PO
RSzcyIXx8EXQgDHM/ZyE1fVWGzQRn7xrcGYam7LCAt0+d3FO+gn6qx587psv
A+KcM37mG5cm6N/YB0V4yDDUiJVpVGkA5zbnbgGWkpC3Zrp6tNSLY9ALifUz
ibqPDoIGzZNkp3vyJNnXl5h0u+nXySvJehz0zKUPupFLlgzRpUEfoDav1Jpg
Br03t3S3sS9EXCnN63wnZ9erJ2WBs6/7cdCxWbvW3dK5OW6hWzc7PZxnASCC
BrOwj/QaRT+ArIzraGgkH2+QvPECuLi/PXMuFwjYuYuzHTBo6nLQpBnYGHVk
ng2YSNhVWNwJO2QZ2hbW4CAkUdfG1nQxBN81a89zUG+86rC+8CPgnB9mURMe
3tcMevvF0cqea1YJDvgsyxd8sUPK+r2ux2149/o3k4Zs2ctS9yAWGwJWMhRY
AvvbP9vyKinkG2ZBevxxSZBBDaRoAVYKc8sE2Kk2XukGvNI3Dc59/dre1Omw
C6L7zK4D8BzOJ2/HdTueo5g3X7TfsuxZcriMUA9P4zf705ulJcWePO1UMrWt
gFkytpkaIPU5pdxSjPqKQ29JUxC7WZRoV9Na9wdhIb5SZVjZrXnRzB/wjOdx
jwnt3oQdGxaV/aSs480a9Qn3j/jW63c2pfEHP63FAt4wyb9hkseAVvAWzeio
Op5ynd68QWOw/A1xzDdwIuD3o9ndI9+bQbLW7/ssv53UZ2VIwY1F7MNm17y5
bkLWUIlFlw4FtqTBKny1b0qwddc7JYwnDcxKVaN1RdwYZ38jb87EKCRROWK1
uOkGO8AVhHZ/sjg5pXVVXWe75BcGweNCmg9k8msXJv/YRRx8228GhHBKn4/w
oY7utzSE51hOpaxur3rgQtCDtu++uPAWsguqCnYz7d5TW/DYCPDELqJlsW8v
D5PxXBrjSZWd4L7N9hXR6N9QIcRkOTXyv7Vo4YGVmhkM30i9AGZ4rpHjmKNE
zX1F2aIVToWLJO663aiPvqtSckfyRs4h9He/n9BvI3VxW+v4t7R3CbtrxG0v
7WdpJMmFU0KsIrZRZse7ntm+tJuHTUgIh74Qb1I+kntH9z6fHv12enTv/O69
46Mj+s+fJEr/c8BdgjO48JmmUE1KabdkyiuMdwK4VMO0xL7y99UM9VUJ9Yfl
0nXR5k547zZdV1Y0PPNgNc6OCKS43DCWNs5X4qLhX7p+BnYFlvKmorNGXZqS
lBJKN+o3uEwuPPgupPEE67tRvpK/78rVn/CvntNcyr2msGXgPPMVaBvtG+b5
Q90MW/G/0hSidlVwPaTrbHGresg791djuqpQPhLANrjudqcfx947VmFbVcH9
SFZgGxfd1nZpEneeu/3S9N1JfcPlD148GJlIiZaEbl2kwhlml0U3+bj7JHat
PPB6W9ItihvKGJAMKDcfnEQNQSzRMPUXabAL0dvmg8sXudwpbTIhj8s9bbeL
wNAV9XVPXow1NIwKdgJHj+npTGtxiR7h2Qsi1e9wt/qteOUTvHeuEkRcQ+5q
5NSv0x/c1YL0y86dgvTGD4O7BCUt56abrnAFu3OjTAkyt10xSD/ijsFa0nP5
Kiu5AprTu8peBzh/77WD9IJF8tZ5y7cqwa9sy6efTwb+Va+V0I/f8R0WvEk0
JGj1yhP+wqkFt0OUVnZtF2Cz6o2H4x+DqlVPhhxisQow1y+E6cV3ZdR2utH9
OQG2fzOG18gdnkyfjL+vr10XafWzOjhIS8Mw3Z8GodlplXr7e8rwz1y7G1au
oXkKH9QRvxmz0+wR4QKnsj8OYw1EhCi/ve063yDPNbA1N7hMFbf62aWq7U7x
qWazSvMLHpUIUqy/oXW9x0XnnPR82y69xQapDzNIrpHc9nE6UIDBQnwMYuAF
w73ocm0UPKbC5ly540cwHxMg4ibhxpNmICpTvZX30kqCyxY1ZcxffBoarUm2
haGwGIJmEl3ZG3kYw7u3swbRIUFQ4mFouqSWc3LLFdKjkftBHKT0Z8F1EVAh
One6G3cp+3uxxlCYJb5kj3eSbMDhhvNnZ8lXNyQ3tCbi92NcvvngwefjO1/r
1cC3ND/3lQi+9ffOSLjqmUZKElHkNItvYmnIIi59K3Mmb5ddlvsSCC4tWAS7
dG2aoiJZ3mQOhFyw922qygnW35XmBouvz5Y+lyLvLZo7gGHq00NxAhtc6Nu2
riJMlNJZ8p2FdYJ7Y10Mz0L8QdUdGINd8t7VrvAo9a3A9CO7mCBphe8FTFXI
GXqn9OPxEVu2IOUWZsUl1zJAUAYZhn1l52r44e4jjxbCASFX+MC+czqKEgov
ZO4U97tWJsHKmrVNQjWE0bgLsqS0tGgJyqqzFSVwPMpqIObQGqfE0Ai6EnJW
z6HzwZFCXCdrGkKSCebcyiDgGsGKeT9Oowk6lIsPEFXedYerOznwvOjlMqSi
GnIbxot2kVdkS9VYAHs291DBwMvZyc4aRIZzu+bUyXm94ttahNnVSK49kaba
lWmxVowIHOvsfeCI+jiaVCTSX3p0kd6q8ajpeuzMV2IQ3yx6QzAKz5IzXYyq
8JzS73TRPis6Lc6SU2W2sSG2li620/RaKFZP3w7alFouYhATQ/mkj+73FS8E
wXv6tnQdkqyQp6VJ5/WNHVfQPUr9kT4BjVP0tVCK3oU6O6hfs8jdbtFUwXHS
3eoG1jalZxQWtvVxs6jFUNxeKLgDIigl8+6TIBx74tY2sMUsiuVrn3cXjRss
XQIizgpB9su4cs6AcIv0dNXXzuZbRGJIU0UsC4yochoAabNK2z3yXjFoiMZe
6DuM3myQubT/TkO+L/dG8/OCpjfa/YBbIwoSx0QVuTIstSrL8zXjGKLWoZUa
pqelu1EEFtHWspizETUn4Fsy27iNIVIwmTsgGMI7QaBa88X3u6jluopfnVvY
u5GAhNaLhnQ7qOXcNI9VkMgnzL5gsmTQI3E88X7gXwMPMBd5Ot/vWAbMx+ig
Hjlxf73FfeudOu8m4nm9/+6CWy3aLYs+PIZNvxr2DtkxU/UcBQBBaegFtGb8
b1S4OAnaEExiT8xkjz/kdi+hHYcYx7f2rdntdREUSqM9pFwE/DYfnvCFu5PQ
SpUtRB70UQiSYLmPwaFeMqtVfbv3G9pYQetwydxP9fZgVo/SfU0NZqMHWO33
LFKdSzhYtqaVajjDKl9cjrzpD1zmCaghlVTqMYSBiTFQbp2EuCQozcmesdU7
5xV39jg9eXGyo+DGMSs0Yq1qeTP1ly9PpwmG5fYgC7heSEVYMm2Pfj2Wis08
+/34ksQVYTYN+vLJS/re3sxno/8DsZ6jQW6fAAA=

-->

</rfc>
