<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bu-dawn-ard-architecture-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="ARD Architecture">Agent Resource Discovery (ARD) Architecture</title>
    <seriesInfo name="Internet-Draft" value="draft-bu-dawn-ard-architecture-00"/>
    <author fullname="Junjie Bu">
      <organization>Google</organization>
      <address>
        <email>jbu@google.com</email>
      </address>
    </author>
    <author initials="R. V." surname="Guha" fullname="R.V. Guha">
      <organization/>
      <address>
        <email>guha@guha.com</email>
      </address>
    </author>
    <author fullname="Jari Arkko">
      <organization>Ericsson</organization>
      <address>
        <email>jari.arkko@ericsson.com</email>
      </address>
    </author>
    <author fullname="Jaime Jiménez">
      <organization>Ericsson</organization>
      <address>
        <email>jaime.jimenez@ericsson.com</email>
      </address>
    </author>
    <date year="2026" month="October" day="30"/>
    <area>Internet</area>
    <keyword>agent discovery</keyword>
    <keyword>autonomous agents</keyword>
    <keyword>artificial intelligence</keyword>
    <keyword>model context protocol</keyword>
    <keyword>agent-to-agent</keyword>
    <keyword>federated search</keyword>
    <keyword>tool registry</keyword>
    <keyword>DAWN</keyword>
    <abstract>
      <?line 121?>

<t>This document describes the high-level architecture for Agent Resource Discovery (ARD), an open, federated framework for publishing, indexing, discovering, and invoking software agent capabilities (such as Model Context Protocol servers, Agent-to-Agent agents, programmatic skills, and web APIs) across local networks, enterprise domains, and the public Internet. It defines the system roles, deployment topologies, core architectural principles, and end-to-end interaction flows that connect the ARD specifications for establishing Initial Contact and the Discovery Interface for capability lookup in the ARD catalog. The Registration interface will be specified in a later document.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://mindpower.github.io/ietf-draft-agent-resources-architecture/draft-bu-dawn-ard-architecture.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-bu-dawn-ard-architecture/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Discovery of Agents With Names (DAWN) Working Group mailing list (<eref target="mailto:dawn@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/dawn/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/dawn/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/mindpower/ietf-draft-agent-resources-architecture"/>.</t>
    </note>
  </front>
  <middle>
    <?line 125?>

<section anchor="intro">
      <name>Introduction</name>
      <t>Software agents and automated orchestrators increasingly rely on external, callable capabilities such as Model Context Protocol (MCP) servers <xref target="MCP"/>, Agent-to-Agent (A2A) agents <xref target="A2A"/>, web APIs, and agent skills. This document refers to these capabilities as agentic resources.</t>
      <t>Early agent deployments rely on manual configuration or pre-installing candidate tools into client prompts. As the number of available resources expands across organizations, static configuration becomes impractical: injecting extensive schemas into orchestration prompts incurs token and processing overhead, while single-operator centralized directories cannot readily accommodate decentralized multi-organization environments.</t>
      <t>The Agent Resource Discovery (ARD) architecture addresses this by decoupling capability discovery from execution runtimes. Agentic resources are described in manifests, indexed by registries, and found at runtime through standard Internet protocols. The ARD Registry has two interfaces, discovery and registration. A client locates a manifest or registry through initial contact. The manifest lists entries directly or consists of an entry that points to a registry. The mechanisms are specified in the following documents:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Initial Contact (<xref target="ARD-INITIAL-CONTACT"/>):</strong> Specifies how a client or agent initially locates the entry point URI of an ARD manifest or an ARD Registry starting from a domain name, a local network attachment, or configuration — using DNS Service Binding (<tt>SVCB</tt> / <tt>HTTPS</tt>) records <xref target="RFC9460"/>, DNS-Based Service Discovery (DNS-SD / mDNS), well-known URIs <xref target="RFC8615"/>, and HTTP/HTML link relations.</t>
        </li>
        <li>
          <t><strong>Discovery Interface (<xref target="ARD"/>):</strong> Specifies the discovery interface through which a consumer performs structured lookup, faceted exploration, and natural-language search on an ARD Registry. It also specifies the manifest and entry format: an <tt>application/ard+json</tt> document composed of ARD entries, each describing one agentic resource with its discovery identifier, media type, <tt>url</tt> or inline <tt>data</tt>, and an optional <tt>trustManifest</tt> that binds the entry to its publisher.</t>
        </li>
        <li>
          <t><strong>Registration:</strong> Specifies how a publisher registers entries with an ARD Registry. Registration requires identification and authentication of the publisher against the registry. Mechanisms include W3C Decentralized Identifiers <xref target="DID-CORE"/>, WIMSE workload identities <xref target="WIMSE-ARCH"/>, SPIFFE, or other identification mechanisms, depending on the deployment. This interface is to be specified in a later document.</t>
        </li>
      </ul>
    </section>
    <section anchor="definitions">
      <name>Conventions and Definitions</name>
      <t>The following terms are used throughout the ARD documents:</t>
      <dl>
        <dt>Agentic Resource (or Resource):</dt>
        <dd>
          <t>A network-accessible capability — such as an autonomous agent (A2A), an MCP server, a static AI skill, an API service, or an ARD Registry — that a consumer discovers and interacts with. In ARD, each resource is described by a protocol-specific descriptor (e.g., an A2A Agent Card, an MCP server card, or a skill document) referenced by the entry's <tt>url</tt> or carried inline in <tt>data</tt>.</t>
        </dd>
        <dt>ARD Entry:</dt>
        <dd>
          <t>An entry in a registry or manifest that describes one agentic resource for discovery, or that points to another ARD Registry. Its format is specified in <xref target="ARD"/>.</t>
        </dd>
        <dt>Manifest:</dt>
        <dd>
          <t>A static or dynamically generated <tt>application/ard+json</tt> document containing an array of ARD entries (<xref target="ARD"/>). A manifest is reached at an entry point discovered via <xref target="ARD-INITIAL-CONTACT"/> (including a well-known URI), may contain entries from one or multiple publishers, and may include or consist of an entry that points to an ARD Registry.</t>
        </dd>
        <dt>Entry Point:</dt>
        <dd>
          <t>The URI of an ARD manifest, together with the source from which the client learned it (<xref target="ARD-INITIAL-CONTACT"/>). An entry point is unverified until the client has retrieved the manifest and authenticated the origin.</t>
        </dd>
        <dt>Initial Contact:</dt>
        <dd>
          <t>The process by which a client obtains one or more entry points, starting from a domain name, a local network attachment, or configuration (<xref target="ARD-INITIAL-CONTACT"/>).</t>
        </dd>
        <dt>ARD Registry:</dt>
        <dd>
          <t>The component that holds entries and offers two interfaces, discovery of entries and registration of entries. A registry may also populate itself by crawling and ingesting manifests. The discovery interface is specified in <xref target="ARD"/>; the registration interface is to be specified separately (<xref target="intro"/>).</t>
        </dd>
        <dt>Publisher:</dt>
        <dd>
          <t>The party that controls a domain name and publishes resources under it, by serving a manifest that lists them or by registering entries with an ARD Registry. The domain name appears as <tt>&lt;publisher&gt;</tt> in the discovery identifiers of its entries. In its interactions with a registry, a publisher acts as a client.</t>
        </dd>
        <dt>Consumer:</dt>
        <dd>
          <t>A client that discovers entries through a manifest or an ARD Registry and retrieves or invokes the described resource at its <tt>url</tt>. Consumers include agents, applications whose behavior is driven by a language model acting on a user's intent, orchestrators, and other workloads.</t>
        </dd>
        <dt>Domain Owner:</dt>
        <dd>
          <t>The party that controls the DNS domain name under which a manifest or an ARD Registry is reached. For a publisher's own manifest, the domain owner is the publisher. For an aggregator or a third-party registry, the domain owner operates the manifest or registry while each entry identifies its own publisher.</t>
        </dd>
        <dt>Discovery Identifier:</dt>
        <dd>
          <t>A persistent, location-independent identifier that uniquely identifies an agentic resource across manifests and registries. In <xref target="ARD"/>, it uses the Uniform Resource Name (URN) <xref target="RFC8141"/> syntax <tt>urn:air:&lt;publisher&gt;:&lt;namespace&gt;:&lt;agent-name&gt;</tt>, decoupling publisher identity (<tt>&lt;publisher&gt;</tt>) from both the manifest or registry host (<tt>Domain Owner</tt>) and the runtime endpoint (<tt>url</tt>). Local or non-DNS deployments may bind identifiers to their respective trust domain anchors.</t>
        </dd>
        <dt>Trust Manifest:</dt>
        <dd>
          <t>An optional cryptographic envelope within an ARD entry that asserts publisher or third-party verifier identity, software provenance, and compliance attestations (<xref target="ARD"/>).</t>
        </dd>
      </dl>
    </section>
    <section anchor="architecture">
      <name>System Architecture and Interaction Flows</name>
      <t><xref target="fig-arch"/> shows the components of the architecture and the interfaces between them, with the specification that defines each interface. Arrows start at the party that initiates an interaction. A consumer may discover entries directly by retrieving a manifest via initial contact, or by querying an ARD Registry (which may itself be discovered via an entry in a manifest). The registration interface is to be specified in a later document (<xref target="intro"/>); runtime access to a resource is outside the scope of ARD.</t>
      <figure anchor="fig-arch">
        <name>Agent Resource Discovery Architecture and Protocol Mapping</name>
        <artwork align="center"><![CDATA[
+----------+   Initial Contact [ARD-INITIAL-CONTACT]   +-----------+
|          |   & Retrieve Manifest [ARD]               |           |
|          |------------------------------------------>|           |
|          |                                           | Publisher |
| Consumer |          +----------------+  Crawl        |  / Domain |
|          |          |                |-------------->|   Owner   |
|          |--------->|  ARD Registry  |               |           |
|          |  Lookup, |                |<--------------|           |
|          |  Search  +----------------+  Register     +-----------+
|          |  [ARD]                       [TBD]              |
+----------+                                                 |
     |                                                       |
     | Access (at Entry `url`)                     Publishes |
     v                                                       v
+------------------------------------------------------------------+
|     Agentic Resource (Hosted on Same or Separate Domain)         |
+------------------------------------------------------------------+
]]></artwork>
      </figure>
      <t>The architecture separates discovery from runtime execution across four lifecycle phases:</t>
      <ol spacing="normal" type="1"><li>
          <t><strong>Publishing and Initial Contact:</strong> A domain owner or publisher serves a manifest at a well-known URI or advertises its manifest or ARD Registry through the DNS, HTTP link, and local-link mechanisms of <xref target="ARD-INITIAL-CONTACT"/>; a manifest lists entries directly or includes an entry that points to an ARD Registry. A client obtains the entry point through initial contact or configuration. Publishers, live workloads, or Commissioning Tools can also register entries dynamically with an ARD Registry through the Registration interface (<xref target="intro"/>).</t>
        </li>
        <li>
          <t><strong>Indexing:</strong> An ARD Registry may serve a single domain or aggregate entries across domains. It populates its indices through registrations or by crawling manifests located through the mechanisms of <xref target="ARD-INITIAL-CONTACT"/>.</t>
        </li>
        <li>
          <t><strong>Lookup and Search:</strong> Consumers discover entries either by querying an ARD Registry using structured filters, faceted exploration, or natural-language queries (<xref target="ARD"/>), or by reading a manifest obtained through initial contact (<xref target="ARD-INITIAL-CONTACT"/>).</t>
        </li>
        <li>
          <t><strong>Descriptor Resolution and Access:</strong> The consumer retrieves the protocol descriptor at the entry's <tt>url</tt> (or reads it from inline <tt>data</tt>), optionally verifies it against the entry's <tt>digest</tt> and <tt>trustManifest</tt>, and accesses the resource using its native protocol. The host at <tt>url</tt> may be in the publisher's domain or in a third-party hosting domain; the entry's <tt>identifier</tt>, <tt>digest</tt>, and <tt>trustManifest</tt> bind the resource to <tt>&lt;publisher&gt;</tt>. The registry takes no part in runtime access.</t>
        </li>
      </ol>
      <section anchor="contents">
        <name>Manifest Data Model</name>
        <t>A manifest is a JSON document of media type <tt>application/ard+json</tt> with one top-level member, <tt>entries</tt>, an array of ARD entries (<xref target="ARD"/>). A publisher serves it at <tt>/.well-known/ard.json</tt>. An ARD Registry is also a collection of entries, reached through its discovery interface. A registry obtains its entries by reading manifests or through dynamic registration.</t>
        <t>An entry describes a single agentic resource, combining core descriptive metadata, payload delivery references, discovery signals, and cryptographic trust assertions (<xref target="ARD"/>). <xref target="fig-contents"/> shows the data model of a manifest. A manifest contains any number of entries, and each entry references exactly one resource.</t>
        <t>An ARD entry comprises:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Core Envelope:</strong> The discovery <tt>identifier</tt> (a globally unique URI or domain-anchored URN, such as <tt>urn:air</tt>), the artifact media <tt>type</tt> (e.g., <tt>application/mcp-server-card+json</tt>, <tt>application/a2a-agent-card+json</tt>), and exactly one of <tt>url</tt> (hypermedia reference to the capability descriptor) or <tt>data</tt> (inline artifact payload). An entry may also include an algorithm-prefixed cryptographic <tt>digest</tt> to lock referenced descriptor contents.</t>
          </li>
          <li>
            <t><strong>Descriptive Metadata:</strong> Human-readable attributes including <tt>displayName</tt>, <tt>description</tt>, <tt>version</tt>, and categorical <tt>tags</tt>.</t>
          </li>
          <li>
            <t><strong>Discovery Signals:</strong> Search attributes that enable high-performance indexing without pre-fetching external artifacts:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>representativeQueries</tt>: A list of natural language prompts or queries that the capability satisfies, serving as the primary input for semantic vector and hybrid search indices.</t>
              </li>
              <li>
                <t><tt>capabilities</tt>: Structured tokens or vocabulary terms identifying specific tools or skills for precise filtering.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>Provenance and Trust:</strong> An optional <tt>trustManifest</tt> signed by <tt>&lt;publisher&gt;</tt>, binding publisher identity, claims, and the artifact <tt>digest</tt>. The publisher of an entry is established from its <tt>trustManifest</tt>; the host that serves a manifest or operates a registry establishes nothing about the publishers of the entries it holds.</t>
          </li>
          <li>
            <t><strong>Open Extensibility:</strong> As a JSON-LD node (<xref target="jsonld-extensibility"/>), an entry inherits the ARD base context and can be extended with domain-specific terms via <tt>@context</tt>.</t>
          </li>
        </ul>
        <figure anchor="fig-contents">
          <name>Manifest Data Model</name>
          <artwork align="center"><![CDATA[
+--------------+ 1     0..n +-----------------------+ 1      1 +------------+
|   Manifest   |------------|         Entry         |----------|  Resource  |
+--------------+            +-----------------------+          +------------+
| entries      |            | identifier            |
+--------------+            | type                  |
                            | url | data            |
                            | displayName           |
                            | description           |
                            | representativeQueries |
                            | capabilities          |
                            | version, tags, digest |
                            | trustManifest         |
                            +-----------------------+
]]></artwork>
        </figure>
        <t>The resource is served by the publisher in its native format, for example an A2A Agent Card, an MCP server description, a skill, or an API description. Manifests and registries hold entries; a consumer that needs the resource follows the <tt>url</tt>. An entry that carries the resource inline as <tt>data</tt> is the exception. A manifest may consist of a single entry whose <tt>url</tt> is the base URI of a registry; a consumer that retrieves such a manifest proceeds through the registry's discovery interface.</t>
      </section>
      <section anchor="topologies">
        <name>Deployment Topologies</name>
        <t>ARD is deployed in three settings, which differ in how a consumer reaches a registry and in which party attests to the publisher of an entry:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Local network:</strong> A home or small office network without an administrator. Consumers find manifests and registries on the link through Multicast DNS and DNS-SD, or through a network-provided domain name, as specified in <xref target="ARD-INITIAL-CONTACT"/>. Resources on the network register with a local registry through the Registration interface, and their entries expire when the resources leave the network. Entry points learned over multicast are the least trusted source, and local policy determines which of them a consumer uses.</t>
          </li>
          <li>
            <t><strong>Private network:</strong> The infrastructure of a single organization, within one administrative and trust domain. A registry indexes the organization's resources and is reached through configured entry points or the organization's own DNS. Publisher authority and the authorization to register are established by the organization's identity infrastructure, and the registry is reachable only within the organization.</t>
          </li>
          <li>
            <t><strong>Internet:</strong> Publishers and registries on the public Internet, anchored in the DNS. A consumer starts from a domain name and reaches a publisher's manifest through the organization index record, DNS-SD, the well-known URI, or the <tt>ard</tt> link relation (<xref target="ARD-INITIAL-CONTACT"/>). A registry may crawl manifests across domains and accept registrations from publishers in other domains. Each entry carries its publisher's domain in its discovery identifier and an optional <tt>trustManifest</tt> signed by the publisher, so a consumer can verify the publisher of an entry regardless of which registry returned it.</t>
          </li>
        </ul>
        <t>In every setting a publisher serves its manifest at <tt>/.well-known/ard.json</tt>; the well-known URI is mandatory to implement in <xref target="ARD-INITIAL-CONTACT"/>, and the other mechanisms supplement it. A manifest that lists entries directly is the simplest form of the registry role and supports discovery of entries only. A manifest that consists of a single entry pointing at a registry directs the consumer to the registry's discovery interface.</t>
      </section>
      <section anchor="principles">
        <name>Core Architectural Principles</name>
        <t>ARD is designed according to seven foundational principles:</t>
        <section anchor="hypermedia-discovery">
          <name>Hypermedia-Based Discovery</name>
          <t>Discovery in ARD is hypermedia-based. A consumer follows links: from an entry point to a manifest, from a manifest to its entries or to a registry, from a registry response to entries, and from an entry to the resource at its <tt>url</tt>. A registry offers a lookup interface over its entries with structured filters and, where the registry supports it, natural-language or semantic search (<xref target="ARD"/>). The entries in a registry are maintained either by the registry itself, which crawls and ingests manifests, or by publishers, which register and refresh their entries through the Registration interface. An entry is discoverable as soon as the registry has indexed it.</t>
        </section>
        <section anchor="search-first">
          <name>Search-First Dynamic Discovery</name>
          <t>Capabilities are discovered on demand at runtime based on natural language task descriptions and structured constraints, rather than pre-installed statically. Registries maintain continuously refreshed semantic and structured indices, allowing newly published capabilities to be discovered immediately without client recompilation or manual reconfiguration.</t>
        </section>
        <section anchor="context-scaling">
          <name>Scalability Beyond Context Windows</name>
          <t>Traditional tool selection relies on injecting every candidate tool description into the model's context window, which does not scale as collections grow to thousands or millions of resources. While a client can rank a small, pre-fetched set of tools locally, local ranking still requires each client to know, fetch, and index the candidate corpus in advance. ARD moves candidate discovery outside the model into a dedicated search service (whether deployed over a curated enterprise catalog or across open domains), where richer signals such as <tt>representativeQueries</tt>, publisher identity, compliance metadata, and structured attributes can be indexed, and where publisher identity and trust attestations (<tt>trustManifest</tt>) can be verified ahead of time during ingestion rather than by each client at runtime. The client queries the registry and receives only the top-k relevant entries to inject into its context window.</t>
        </section>
        <section anchor="artifact-agnostic">
          <name>Artifact-Agnostic Envelope</name>
          <t>ARD does not define or standardize the internal schemas of specific resource architectures. Instead, it serves as a protocol-neutral envelope. The entry's <tt>type</tt> field uses IANA Media Types to declare whether the resource is an MCP server (<tt>application/mcp-server-card+json</tt>), an A2A agent (<tt>application/a2a-agent-card+json</tt>), an AI skill (<tt>application/ai-skill+md</tt>), or an Agent Registry (<tt>application/ai-registry+json</tt>).</t>
        </section>
        <section anchor="jsonld-extensibility">
          <name>Open Namespace Extensibility via JSON-LD</name>
          <t>Every ARD entry is a JSON-LD <xref target="JSON-LD"/> node. Core discovery terms are defined in the default ARD base context. Publishers may enrich entries with terms from arbitrary external namespaces (e.g., industry taxonomies, regulatory tags, or pricing models) through <tt>@context</tt> declarations. Registries index known terms and preserve unrecognized terms, enabling open evolution without revisions to the core specifications.</t>
        </section>
        <section anchor="universal-http">
          <name>Universal HTTP REST Baseline</name>
          <t>To guarantee universal interoperability regardless of execution environments, every ARD Registry exposes a standard HTTP REST interface over HTTPS conforming to <xref target="RFC9110"/>. While registries may additionally offer protocol-specific wrappers (such as an MCP tool or A2A skill wrapper), the HTTPS REST API represents the universal baseline.</t>
        </section>
        <section anchor="separation-concerns">
          <name>Strict Separation of Concerns</name>
          <t>Operational and architectural concerns are decoupled across layers:</t>
          <ul spacing="normal">
            <li>
              <t><strong>Discovery vs. Resolution:</strong> ARD identifies what capabilities exist and where their authoritative descriptors or endpoints reside. Lower-level name resolution and transport routing remain delegated to standard DNS and network primitives.</t>
            </li>
            <li>
              <t><strong>Discovery vs. Execution:</strong> ARD is link-based. Once an agentic resource is discovered, the client follows the artifact reference (<tt>url</tt>) and invokes the resource directly via its native protocol (e.g., JSON-RPC over HTTP/SSE for MCP, HTTP/REST for A2A, or gRPC). The discovery registry never sits in the runtime execution data path.</t>
            </li>
            <li>
              <t><strong>Identification vs. Network Location:</strong> An agentic resource's discovery identifier (<tt>urn:air:&lt;publisher&gt;:...</tt>) is decoupled from both the manifest/registry hosting origin (<tt>Domain Owner</tt>) and the physical execution endpoint (<tt>url</tt>). This allows registries and manifests to aggregate entries across publishers, and allows a resource's runtime endpoint to be hosted on or migrated across cloud providers without changing its identifier.</t>
            </li>
            <li>
              <t><strong>Search Relevance vs. Security Evaluation:</strong> Semantic search scores indicate textual relevance only and do not represent trust, safety, or compliance assertions.</t>
            </li>
            <li>
              <t><strong>Discovery vs. Authorization:</strong> Authentication, token negotiation, and runtime access control are handled by the resource endpoint during invocation, while cryptographic provenance (<tt>trustManifest</tt>) allows registries and consumers to verify publisher authority independently of where a manifest or registry is hosted.</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <section anchor="three-domain-model">
        <name>Decoupling of Administrative Domains</name>
        <t>A central security property of ARD is that a single discovery flow may span thr                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   