<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.9) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-lcurley-moq-cluster-01" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="moq-cluster">MoQ Cluster Extension</title>

    <author fullname="Luke Curley">
      <organization></organization>
      <address>
        <email>kixelated@gmail.com</email>
      </address>
    </author>

    <date year="2026" month="September" day="21"/>

    <area>wit</area>
    <workgroup>moq</workgroup>
    

    <abstract>


<?line 32?>

<t>This document defines a clustering extension for MoQ Transport <xref target="moqt"/>, used to build a mesh of relays.
Each namespace advertisement carries the list of Hop IDs it has passed through, starting with the original publisher, and the accumulated cost of that path.
A receiver uses the list to detect loops and to tell which advertisements come from the same publisher, and the cost to choose between paths.
Each endpoint declares its own Hop ID at setup, so a peer never advertises or serves it a path that already passed through it.</t>



    </abstract>



    <note title="Note to Readers">


<?line 39?>

<t>This document was generated by an AI model from the implementation at <eref target="https://github.com/moq-dev/moq">github.com/moq-dev/moq</eref> and is maintained alongside it.
Submit an <eref target="https://github.com/moq-dev/moq/issues">issue</eref> or <eref target="https://github.com/moq-dev/moq/pulls">PR</eref> if this spec sucks and you want to fix anything.</t>


    </note>


  </front>

  <middle>


<?line 44?>

<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?>

<t><strong>Upstream</strong> and <strong>downstream</strong> are relative to the flow of an advertisement, not to the endpoints: the peer that sends an advertisement is upstream, the one that receives it is downstream.
The same pair of relays can be upstream of each other for different namespaces.</t>

</section>
<section anchor="introduction"><name>Introduction</name>
<t><xref target="moqt"/> is designed to deliver content through a mesh of relays but does not say how to build one, and the base protocol does not carry enough information to do so.
Relays that simply forward PUBLISH_NAMESPACE to each other break down: advertisements loop forever, and a relay that hears one namespace from two peers has no basis for choosing where to send a SUBSCRIBE.</t>

<t>This extension adds two parameters to PUBLISH_NAMESPACE and NAMESPACE.
HOP_PATH lists every endpoint an advertisement has passed through, starting with the original publisher, which breaks loops and lets paths be compared.
ROUTE_COST is the accumulated price of the path: the publisher seeds it, and each hop adds the RELAY_COST its upstream declared at setup, so an unpriced mesh ranks by hop count.
A relay that already carries a namespace advertises a lower cost, steering subscribers toward its warm copy.</t>

<t>Each endpoint also declares its own Hop ID at setup, so a peer can leave it out of every path it advertises or serves to it, even across several connections between the same two relays.
An advertisement is one path, so a relay forwards only the best path it knows per namespace and serves a subscription from one source at a time (<xref target="publishers"/>).</t>

</section>
<section anchor="setup-negotiation"><name>Setup Negotiation</name>

<section anchor="hop-id"><name>Hop ID</name>
<t>The extension is negotiated during SETUP (<xref target="moqt"/> Section 10.3).
An endpoint offers it by declaring its own Hop ID:</t>

<figure><artwork><![CDATA[
HOP_ID Setup Option {
  Option Key (vi64) = 0x40B54
  Hop ID (vi64)
}
]]></artwork></figure>

<t>Negotiation is per session; a relay <bcp14>MUST NOT</bcp14> assume that because one session negotiated the extension, another did.
On a session that did, every PUBLISH_NAMESPACE and NAMESPACE <bcp14>MUST</bcp14> carry HOP_PATH, NAMESPACE takes the extended form in <xref target="namespace"/>, and a receiver <bcp14>MUST</bcp14> close the session with a PROTOCOL_VIOLATION if either arrives without HOP_PATH.</t>

</section>
<section anchor="relay-cost"><name>Relay Cost</name>
<t>An endpoint <bcp14>MAY</bcp14> declare what it charges for sending content:</t>

<figure><artwork><![CDATA[
RELAY_COST Setup Option {
  Option Key (vi64) = 0x40B56
  Option Value (vi64)
}
]]></artwork></figure>

<t>The value prices the sender's own egress, so each endpoint declares its own and the two need not match, as OSPF prices each router's own output interfaces (<xref section="9" sectionFormat="comma" target="RFC2328"/>).
A receiver adds it to the ROUTE_COST of every advertisement that peer forwards (<xref target="accumulating"/>).
Absent means 1, so an unpriced mesh ranks by hop count.
0 is distinct from absent: it makes the link free, which is how to describe two relays in the same datacenter.</t>

<t>A declared cost is an assertion, not an instruction: a receiver <bcp14>MAY</bcp14> charge a locally configured value instead, so a peer cannot make itself cheap by saying so.</t>

<t>The cost is one dimensionless integer, as in every deployed routing metric: RIP's hop count (<xref section="3.5" sectionFormat="comma" target="RFC2453"/>), OSPF's interface cost, and IS-IS's default metric, whose delay, expense, and error metrics went unimplemented (<xref section="3" sectionFormat="comma" target="RFC5305"/>), as did OSPF's per-type-of-service metrics (<xref section="G.10" sectionFormat="comma" target="RFC2178"/>).
A deployment that weighs latency, hop count, and price folds them into the one value.
Like BGP's MULTI_EXIT_DISC (<xref section="5.1.4" sectionFormat="comma" target="RFC4271"/>), the value only means something within the deployment that chose its units, so a trust boundary clamps or replaces it (<xref target="security"/>).</t>

</section>
</section>
<section anchor="hop-ids"><name>Hop IDs</name>
<t>A <strong>Hop ID</strong> is a variable-length integer naming one endpoint in a path.</t>

<t>Hop IDs <bcp14>SHOULD</bcp14> be unique among the endpoints an advertisement can traverse.
An endpoint <bcp14>MAY</bcp14> pick one at random, since collisions in a 64-bit space are unlikely, or use a configured identifier that survives restarts.</t>

<t>Loops and origins are detected by comparing Hop IDs for equality, so two endpoints sharing one are indistinguishable.
Redundant publishers of interchangeable content <bcp14>MAY</bcp14> share one deliberately, so the mesh treats their paths as failover options for the same content (<xref target="selection"/>).</t>

<section anchor="zero"><name>The Reserved Hop ID 0</name>
<t><strong>0 means "no identity"</strong> and is reserved.
It stands for an endpoint that did not negotiate this extension, and an endpoint <bcp14>MAY</bcp14> declare it to withhold its identity.</t>

<t>Since any number of endpoints can be 0, it identifies nothing:</t>

<t><list style="symbols">
  <t><strong>Loop detection</strong>: 0 in a HOP_PATH is never a loop. A receiver whose own Hop ID is 0 cannot detect loops through itself and <bcp14>MUST NOT</bcp14> discard an advertisement merely because the path contains 0.</t>
  <t><strong>Origin identity</strong>: an advertisement whose first entry is 0 has an unknown publisher. A receiver <bcp14>MUST NOT</bcp14> treat two such advertisements as interchangeable (<xref target="selection"/>).</t>
  <t><strong>Filtering</strong>: a peer that declared 0 gave the receiver nothing to filter that session on. The receiver <bcp14>MAY</bcp14> assign an ID of its own (<xref target="assigned"/>) as local selection state and <bcp14>MUST NOT</bcp14> write it into HOP_PATH.</t>
</list></t>

<t>Duplicate <em>non-zero</em> Hop IDs in one HOP_PATH are a loop; duplicate zeros are not.
Declaring 0 trades loop detection and failover for anonymity, except against a receiver that assigns an identity of its own.</t>

</section>
<section anchor="assigned"><name>Assigned Identities</name>
<t>A receiver <bcp14>MAY</bcp14> assign a Hop ID to a peer that declared none, whether by declaring 0 or by not negotiating the extension.
It uses that ID as local selection state: as what it filters that session on, including for advertisements that arrived carrying their own HOP_PATH.</t>

<t>The ID is the receiver's own, not the peer's, and <bcp14>MUST NOT</bcp14> be forwarded.
An advertisement that arrives with its own HOP_PATH already names the sender there, as 0 if withheld.
A receiver writes 0 for an upstream that sent no HOP_PATH (<xref target="bridging"/>).</t>

<t>An assigned ID <bcp14>MUST NOT</bcp14> be shared between peers not known to be the same endpoint.
Sharing one makes their content interchangeable (<xref target="selection"/>) and suppresses each one's advertisements to the other, so two unrelated publishers would be merged into one and starve each other of routes.</t>

<t>A peer the receiver authenticated, or dialed and therefore chose, <bcp14>SHOULD</bcp14> get one stable ID, so its reconnects and redundant sessions are recognized as the same content; a fresh ID per connection would make one peer look like several.
An anonymous accepted session cannot be correlated with anything, so it <bcp14>SHOULD</bcp14> get a distinct ID per session: not an identity, but enough to keep routes learned from it from being advertised back to it, which is the loop 0 cannot prevent.</t>

</section>
</section>
<section anchor="namespace"><name>Namespace Advertisements</name>
<t>HOP_PATH and ROUTE_COST are Key-Value-Pair parameters (<xref target="moqt"/> Section 2.5).
PUBLISH_NAMESPACE (<xref target="moqt"/> Section 10.15) already carries parameters.
NAMESPACE (<xref target="moqt"/> Section 10.16) does not, and a subscriber-driven mesh propagates advertisements as NAMESPACE, so this extension appends a parameter block to it:</t>

<figure><artwork><![CDATA[
NAMESPACE Message (Cluster) {
  Type (vi64) = 0x8,
  Length (16),
  Track Namespace Suffix (..),
  Number of Parameters (vi64),
  Parameters (..) ...
}
]]></artwork></figure>

<t>The added fields are encoded exactly as in PUBLISH_NAMESPACE.
Negotiating this extension enables the block on every NAMESPACE, with a parameter count of 0 when it is empty; when another extension defines the same block an endpoint appends one block holding the parameters of both, not two blocks.
An endpoint <bcp14>MUST NOT</bcp14> append the block when nothing negotiated it, and <bcp14>MUST NOT</bcp14> include HOP_PATH or ROUTE_COST unless this extension is.</t>

<t>NAMESPACE_DONE (<xref target="moqt"/> Section 10.17) carries no state from this extension.</t>

<t>An advertisement claims capability, not inventory: namespaces beneath the advertised one can be served, not that any exists.
Per-request refusals follow <xref target="I-D.lcurley-moq-pattern"/>.</t>

<section anchor="hop-path"><name>HOP_PATH Parameter</name>
<t>HOP_PATH is the ordered list of Hop IDs an advertisement has passed through, from the original publisher to the peer sending it:</t>

<figure><artwork><![CDATA[
HOP_PATH Parameter {
  Type (vi64) = 0x40B57
  Length (vi64)
  Hop ID (vi64) ...
}
]]></artwork></figure>

<t>The list always has at least one entry, the original publisher, 0 if unknown (<xref target="zero"/>).
A receiver <bcp14>MUST</bcp14> close the session with a PROTOCOL_VIOLATION if the list is empty, if the entries do not exactly fill <spanx style="verb">Length</spanx>, or if a non-zero Hop ID appears twice.</t>

</section>
<section anchor="route-cost"><name>ROUTE_COST Parameter</name>
<t>ROUTE_COST is the marginal cost of subscribing through this advertisement: the price of the transfers a new subscription would cause.</t>

<figure><artwork><![CDATA[
ROUTE_COST Parameter {
  Type (vi64) = 0x40B58
  Value (vi64)
}
]]></artwork></figure>

<t>It is <bcp14>OPTIONAL</bcp14> and absent means 0.
Costs still accumulate across a mesh that sends none, because each receiver adds the RELAY_COST of the link it received over (<xref target="accumulating"/>).</t>

<t>The original publisher seeds the value with its production cost: 0 for content it already produces, higher for content it would have to start on demand, such as a standby transcoder advertising everything it could serve.</t>

<t>A standby seed only ranks last if no live path can accumulate past it, which is a property of the deployment, not of the number.
A deployment relying on standby ordering within one specificity tier (<xref target="selection"/>) <bcp14>MUST</bcp14> bound the charged links on an admitted path by H and each link's cost by C, including the receiving link, and <bcp14>MUST</bcp14> enforce both when admitting paths and links.
Its live publishers <bcp14>MUST</bcp14> seed 0 and its standby publishers <bcp14>MUST</bcp14> seed above H * C and below saturation; 2^32 is <bcp14>RECOMMENDED</bcp14> where H * C &lt; 2^32.
Unknown, out-of-budget, and saturated routes are outside the guarantee: a receiver <bcp14>MUST NOT</bcp14> rank them above standby capacity on the guess that they already carry content.</t>

</section>
</section>
<section anchor="relay-behavior"><name>Relay Behavior</name>
<t>A relay forwarding an advertisement <bcp14>MUST</bcp14> append its own Hop ID to the HOP_PATH it received, so its ID is always the last entry.
A received 0 is forwarded unchanged.</t>

<t>A relay <bcp14>MUST</bcp14> discard an advertisement whose HOP_PATH already contains its own non-zero Hop ID: forwarding it would extend a loop, and subscribing through it would route the relay back to itself.
This check catches loops of any length and is the only loop defense required.
A conforming sender never sends one (<xref target="selection"/>), so a receiver <bcp14>MAY</bcp14> close the session with a PROTOCOL_VIOLATION instead; discarding is what keeps the mesh working when one member does not conform.</t>

<section anchor="bridging"><name>Bridging</name>
<t>An upstream that did not negotiate the extension sends no HOP_PATH.
The relay creates one with a single 0 entry for that upstream (<xref target="zero"/>), then appends its own Hop ID.
The identity a receiver assigned that upstream (<xref target="assigned"/>) is local selection state and <bcp14>MUST NOT</bcp14> appear in HOP_PATH.</t>

</section>
<section anchor="accumulating"><name>Accumulating Cost</name>
<t>Before forwarding or acting on an advertisement, a relay <bcp14>MUST</bcp14> add the RELAY_COST the sender declared (<xref target="relay-cost"/>) to the ROUTE_COST it received.
The addition <bcp14>MUST</bcp14> saturate rather than wrap, so an absurd value ranks last instead of overflowing to best.</t>

<t>A relay actively carrying the namespace (a live subscription exists for at least one of its tracks) <bcp14>SHOULD</bcp14> advertise 0 instead: its ingress is already paid for, so another subscriber costs only the links below it.
This is what lets a cluster converge on a warm copy.
The discount applies only to the path it actually serves from; a standby path keeps its accumulated value, since serving from it means opening a fresh ingest.
When it stops carrying the namespace it <bcp14>SHOULD</bcp14> restore the accumulated value, optionally after a grace period so brief churn does not flap routing.</t>

<t>Two relays that each begin carrying the same namespace would each see the other's 0 as cheaper than its own source, and if both switched at once the namespace would have no source.
Before re-parenting onto a 0-cost advertisement from another actively-carrying relay (one whose HOP_PATH has two or more entries), a relay <bcp14>SHOULD</bcp14> apply a deterministic tie-break, such as comparing a hash of the namespace and each Hop ID, so exactly one side moves.
Equal Hop IDs, including two relays that both declared 0, cannot be ordered, and neither side <bcp14>SHOULD</bcp14> move.
Cheaper advertisements from anything else carry no such hazard and <bcp14>SHOULD</bcp14> be adopted at once.</t>

</section>
<section anchor="updating"><name>Updating an Advertisement</name>
<t>An endpoint updates a PUBLISH_NAMESPACE with REQUEST_UPDATE (<xref target="moqt"/> Section 9.5) on its request stream, carrying the HOP_PATH or ROUTE_COST that changed.
An omitted parameter keeps its value, so a relay that starts carrying a namespace sends an explicit ROUTE_COST of 0.
The receiver answers REQUEST_OK, or REQUEST_ERROR and closes the stream, which withdraws the advertisement.</t>

<t>NAMESPACE has no REQUEST_UPDATE, so an endpoint updates one by re-sending it with new parameters on the same SUBSCRIBE_NAMESPACE response stream.
A receiver <bcp14>MUST NOT</bcp14> treat the repeat as a duplicate or a protocol violation.</t>

<t>An advertisement lives as long as its stream, so an update on a new stream would leave two streams claiming one namespace.
An endpoint <bcp14>MUST NOT</bcp14> open a second stream for an advertisement it already maintains on the session.</t>

<t>An update replaces the old parameters atomically, so a receiver <bcp14>MUST NOT</bcp14> tear down subscriptions or drop cached state because one arrived.
If the first HOP_PATH entry is unchanged the content is continuous and subscriptions <bcp14>MAY</bcp14> resume on the new route at a group boundary, even when that entry is 0: there is one advertisement, and its stream is the continuity.
If the publisher did change, the endpoint <bcp14>MUST</bcp14> withdraw the advertisement (PUBLISH_NAMESPACE_DONE or NAMESPACE_DONE) and advertise again rather than update in place.</t>

<t>The expected update is a ROUTE_COST change, which is how a relay signals that it started or stopped carrying the namespace.</t>

</section>
</section>
<section anchor="selection"><name>Path Selection</name>
<t>A receiver resolving a request consults only the most specific advertisements covering it: the longest prefix.</t>

<t>Within that tier, a receiver <bcp14>SHOULD</bcp14> prefer a HOP_PATH that contains no 0 entry over one that does, then the lowest ROUTE_COST, breaking ties toward the shorter HOP_PATH and then toward the most recently received.
This is advisory: a receiver <bcp14>MAY</bcp14> apply local policy, such as measured RTT, instead.</t>

<t>NO_CAPACITY and its single re-resolution are defined by <xref target="I-D.lcurley-moq-pattern"/>.
Excluding the refusing advertiser excludes every route with its non-zero first Hop ID, or its session when that ID is 0.</t>

<t>Two advertisements whose HOP_PATH begins with the same non-zero Hop ID come from the same publisher and carry interchangeable content: a receiver <bcp14>MAY</bcp14> hold them as redundant paths and fail an active subscription over to the survivor at a group boundary.
If the first entries differ, or either is 0, they are distinct publishers reusing a namespace (<xref target="publishers"/>).</t>

<t>An endpoint <bcp14>MUST NOT</bcp14> advertise a path whose HOP_PATH contains the Hop ID the peer declared: the peer could only discard it, and acting on it would form a loop.
Of the paths that remain it <bcp14>SHOULD</bcp14> advertise the best, and advertises nothing when every path contains that Hop ID.
Because selection is per session, a peer that the serving path runs through still receives the best standby, which is what lets it fail over if its own copy dies.</t>

<t>An endpoint <bcp14>MUST</bcp14> select the source for a subscription by the same rule.
If only excluded sources remain the subscription is unroutable, since serving it would hand the subscriber data that already flowed through itself.
One rule for advertisement and dispatch keeps advertised paths truthful and prevents subscription cycles of any length.</t>

</section>
<section anchor="publishers"><name>Several Publishers of One Namespace</name>
<t><xref target="moqt"/> lets several publishers advertise one namespace and leaves to the relay how it serves a SUBSCRIBE among them.
Under this extension an advertisement is a path, so a session advertises a namespace at most once, a relay forwards only the best path it knows (<xref target="selection"/>), and a subscription is served from one source at a time.</t>

<t>A receiver <bcp14>MAY</bcp14> still hold paths to several publishers of one namespace and choose between them as it sees fit: serve from the cheapest and move to the next when it fails or refuses the request, or try each in cost order until one accepts.
The advertised path and the served source stay the same publisher: a relay that moves to another <bcp14>MUST</bcp14> withdraw its advertisement and advertise the new path (<xref target="updating"/>), so the first Hop ID downstream always names the publisher whose Objects flow.
Moving between distinct publishers is a discontinuity: their groups are not one sequence, so a subscriber sees an unrelated Location, and a FETCH that succeeds against one may fail against the other.</t>

<t>Redundant publishers of the same content avoid this by sharing a Hop ID (<xref target="hop-ids"/>), which makes their paths interchangeable and lets a subscription fail over at a group boundary.
Publishers that do not share one are treated as reusing a name.</t>

</section>
<section anchor="security"><name>Security Considerations</name>
<t>A Hop ID reveals nothing beyond what its operator encodes in it; a deployment that considers its identifiers sensitive can use random values or declare 0 (<xref target="zero"/>).
Declaring 0 hides an identity from the mesh; a peer <bcp14>MAY</bcp14> assign one as local selection state (<xref target="assigned"/>) and <bcp14>MUST NOT</bcp14> forward it.
A HOP_PATH does reveal how many hops an advertisement crossed, which hints at the size of a deployment; a relay <bcp14>MAY</bcp14> collapse its internal hops into one entry, or strip HOP_PATH, before forwarding across a trust boundary.</t>

<t>Because a relay only appends to HOP_PATH, it cannot make a competing path look shorter than it is; the worst it can do is under-report its own upstream portion to win an advisory tie-break.
ROUTE_COST has no such protection: it is a single value the sender chooses, so a relay can advertise 0 for content it is not carrying and attract subscriptions it then has to fetch.
Both cost only a suboptimal path choice, and the latter is self-limiting, since the traffic won this way must then be served.</t>

<t>A receiver <bcp14>MUST NOT</bcp14> make security decisions based on Hop IDs, and a deployment spanning a trust boundary <bcp14>SHOULD</bcp14> treat a peer's ROUTE_COST as a hint to clamp or ignore rather than an accounting figure.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>This document requests the following registrations.
High, distinctive values are requested to avoid the low ranges reserved by <xref target="moqt"/> and to minimize collisions with provisional registrations by other extensions.</t>

<section anchor="moqt-setup-options"><name>MOQT Setup Options</name>

<t>This document requests two registrations in the "MOQT Setup Options" registry (<xref target="moqt"/> Section 15.4), whose policy is Specification Required.</t>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>0x40B54</c>
      <c>HOP_ID</c>
      <c>This Document</c>
      <c>0x40B56</c>
      <c>RELAY_COST</c>
      <c>This Document</c>
</texttable>

</section>
<section anchor="moqt-message-parameters"><name>MOQT Message Parameters</name>

<t>This document requests two registrations in the "MOQT Message Parameters" registry (<xref target="moqt"/> Section 15.7).
Both are carried in PUBLISH_NAMESPACE, in REQUEST_UPDATE of a PUBLISH_NAMESPACE (<xref target="updating"/>), and in the extended NAMESPACE message (<xref target="namespace"/>).</t>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Carried In</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>0x40B57</c>
      <c>HOP_PATH</c>
      <c>PUBLISH_NAMESPACE, REQUEST_UPDATE, NAMESPACE</c>
      <c>This Document</c>
      <c>0x40B58</c>
      <c>ROUTE_COST</c>
      <c>PUBLISH_NAMESPACE, REQUEST_UPDATE, NAMESPACE</c>
      <c>This Document</c>
</texttable>

<t>The Key-Value-Pair parity is load-bearing: HOP_PATH is odd, so its value is a length-prefixed byte string, while HOP_ID, RELAY_COST, and ROUTE_COST are even, so their values are bare varints.</t>

</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">




<reference anchor="moqt">
   <front>
      <title>Media over QUIC Transport</title>
      <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
         <organization>Cisco</organization>
      </author>
      <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
         <organization>Google</organization>
      </author>
      <author fullname="Ian Swett" initials="I." surname="Swett">
         <organization>Google</organization>
      </author>
      <author fullname="Alan Frindell" initials="A." surname="Frindell">
         <organization>Meta</organization>
      </author>
      <date day="8" month="September" year="2026"/>
      <abstract>
	 <t>   This document defines Media over QUIC Transport (MOQT), a publish/
   subscribe protocol that runs over QUIC and WebTransport.  MOQT
   leverages the features of these transports, such as streams,
   datagrams, priorities, and partial reliability.  MOQT operates both
   point-to-point and through intermediate relays, enabling scalable
   low-latency delivery.  Despite its name, MOQT is media agnostic and
   can be used for a wide range of use cases.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-21"/>
   
</reference>

<reference anchor="I-D.lcurley-moq-pattern" target="https://datatracker.ietf.org/doc/draft-lcurley-moq-pattern/">
  <front>
    <title>MoQ Pattern Extension</title>
    <author initials="L." surname="Curley" fullname="Luke Curley">
      <organization></organization>
    </author>
    <date />
  </front>
</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 title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC2328">
  <front>
    <title>OSPF Version 2</title>
    <author fullname="J. Moy" initials="J." surname="Moy"/>
    <date month="April" year="1998"/>
    <abstract>
      <t>This memo documents version 2 of the OSPF protocol. OSPF is a link- state routing protocol. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="54"/>
  <seriesInfo name="RFC" value="2328"/>
  <seriesInfo name="DOI" value="10.17487/RFC2328"/>
</reference>
<reference anchor="RFC2453">
  <front>
    <title>RIP Version 2</title>
    <author fullname="G. Malkin" initials="G." surname="Malkin"/>
    <date month="November" year="1998"/>
    <abstract>
      <t>This document specifies an extension of the Routing Information Protocol (RIP) to expand the amount of useful information carried in RIP messages and to add a measure of security. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="56"/>
  <seriesInfo name="RFC" value="2453"/>
  <seriesInfo name="DOI" value="10.17487/RFC2453"/>
</reference>
<reference anchor="RFC5305">
  <front>
    <title>IS-IS Extensions for Traffic Engineering</title>
    <author fullname="T. Li" initials="T." surname="Li"/>
    <author fullname="H. Smit" initials="H." surname="Smit"/>
    <date month="October" year="2008"/>
    <abstract>
      <t>This document describes extensions to the Intermediate System to Intermediate System (IS-IS) protocol to support Traffic Engineering (TE). This document extends the IS-IS protocol by specifying new information that an Intermediate System (router) can place in Link State Protocol Data Units (LSP). This information describes additional details regarding the state of the network that are useful for traffic engineering computations. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5305"/>
  <seriesInfo name="DOI" value="10.17487/RFC5305"/>
</reference>
<reference anchor="RFC2178">
  <front>
    <title>OSPF Version 2</title>
    <author fullname="J. Moy" initials="J." surname="Moy"/>
    <date month="July" year="1997"/>
    <abstract>
      <t>This memo documents version 2 of the OSPF protocol. OSPF is a link-state routing protocol. It is designed to be run internal to a single Autonomous System. Each OSPF router maintains an identical database describing the Autonomous System's topology. From this database, a routing table is calculated by constructing a shortest-path tree.</t>
      <t>OSPF recalculates routes quickly in the face of topological changes, utilizing a minimum of routing protocol traffic. OSPF provides support for equal-cost multipath. An area routing capability is provided, enabling an additional level of routing protection and a reduction in routing protocol traffic. In addition, all OSPF routing protocol exchanges are authenticated. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="2178"/>
  <seriesInfo name="DOI" value="10.17487/RFC2178"/>
</reference>
<reference anchor="RFC4271">
  <front>
    <title>A Border Gateway Protocol 4 (BGP-4)</title>
    <author fullname="Y. Rekhter" initials="Y." role="editor" surname="Rekhter"/>
    <author fullname="T. Li" initials="T." role="editor" surname="Li"/>
    <author fullname="S. Hares" initials="S." role="editor" surname="Hares"/>
    <date month="January" year="2006"/>
    <abstract>
      <t>This document discusses the Border Gateway Protocol (BGP), which is an inter-Autonomous System routing protocol.</t>
      <t>The primary function of a BGP speaking system is to exchange network reachability information with other BGP systems. This network reachability information includes information on the list of Autonomous Systems (ASes) that reachability information traverses. This information is sufficient for constructing a graph of AS connectivity for this reachability from which routing loops may be pruned, and, at the AS level, some policy decisions may be enforced.</t>
      <t>BGP-4 provides a set of mechanisms for supporting Classless Inter-Domain Routing (CIDR). These mechanisms include support for advertising a set of destinations as an IP prefix, and eliminating the concept of network "class" within BGP. BGP-4 also introduces mechanisms that allow aggregation of routes, including aggregation of AS paths.</t>
      <t>This document obsoletes RFC 1771. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4271"/>
  <seriesInfo name="DOI" value="10.17487/RFC4271"/>
</reference>



    </references>

</references>


<?line 335?>

<section anchor="appendix-a-changelog"><name>Appendix A: Changelog</name>

<section anchor="moq-cluster-01"><name>moq-cluster-01</name>
<t><list style="symbols">
  <t>Assigned identities are local selection state and <bcp14>MUST NOT</bcp14> be forwarded.</t>
  <t>Bridging an upstream that sent no HOP_PATH writes 0 for that hop; a received 0 is forwarded unchanged.</t>
  <t>Path selection prefers a HOP_PATH with no 0 entry before comparing ROUTE_COST.</t>
  <t>Renamed the RELAY_HOPS Setup Option to HOP_ID and moved it to the even key 0x40B54, so its value is a bare varint rather than a length-prefixed one.</t>
  <t>A PUBLISH_NAMESPACE is updated with REQUEST_UPDATE on its request stream instead of a repeated PUBLISH_NAMESPACE; HOP_PATH and ROUTE_COST are registered for REQUEST_UPDATE. A NAMESPACE is still re-sent on its stream.</t>
  <t>A session advertises a namespace at most once and a subscription is served from one source at a time. A receiver chooses among several publishers of one namespace; moving between them is a discontinuity unless they share a Hop ID.</t>
  <t>Named the routing protocols whose single per-direction metric RELAY_COST follows.</t>
  <t>Path selection consults the most specific advertisement first, the longest prefix; an advertisement is always a prefix, and a request beneath it that the advertiser will not serve is refused (<xref target="I-D.lcurley-moq-pattern"/>). Standby seeds are bounded by deployment limits.</t>
</list></t>

</section>
</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA6Vc7XbbRpL9z6fA2j9s+ZCMHNtxRp6dWVlWxjpjWxpJntmc
nFkPSDRJrEAAgwYkM4rnWfZZ9sm2blX1B0DKdrL+kYgk0Oiuro9bt6oxmUxG
bd4W5iC597b6S3JUdLY1TXL8sTWlzavy3iidzRpzTb+vq39O5vL7vdE8bc2y
ajYHSV4uqtEoq+ZluqZhsiZdtJNi3jWF2Uyieyb7j0e2m61zi3HbTU0Xnxxf
/pAk95O0sBU9IS8zUxv6T9neGyf3TJa3VZOnBT6cHL6k/1UN/XV++cO9Udmt
Z6Y5GGU0kYMRze/JKG1MepDc5O3opmqulk3V1QcJzWA0Srt2VdHFyWSU0L9F
VxQy2zfdlUmOeK78i1mneXGQXOUfTUEDZ/+xxBfTebUejcqqWadtfk2PSzBs
S/OfvJrmpl3wOtsmLW1dNS39jB9iGdRpSyIoD/ghscDP5IdY4HxJ2iwNPWDV
trU9+OYbWmVK48+vTMMPnFbN8huS+Tfb4tZHfcPj+IXzv4n+P6FNs7T4abx0
/NstFBZxsqBNMqMRttvLYTSZTJJ0ZjG1djS6XOU2oVl1a9rBJDOLvDQ2SRPV
gLxcJsatM6FhEkjg0oktub2FVD99GiedNVnSVsmsy4uMBlgbu0qqRdLQrmzs
dHSczlc8WVunc5Ok2bVp2twafu48bZqcntuuTFLktsWNr6s6OXllk7xNVqlN
6tTyE1akI8vVOLEk7xbTI+VZ8Y2kd8u8TIuk7mY0yMo04yQtM/4tndMKO9aP
ZF7JA9pV2tKw7Wo6OqRpzg3Jp8E6onnQgjLTmnmbFFVVWxmvSlpTFMnNKqcl
9RZiafC1SRZNteYxLK1313R4CjTOfFVV1iQz094YU/JknKjIpuoq5z2ZF2Qm
EIRNqptSBZPQ5K1pu5pEUZG8a0OTLw2W4KdkYXzWNNd8Ny5KWVZ0a1qQ5WWb
gVjpqqloSFm15sM7/KetPpzTpaaxQ225oW1ZmtI0LNbZhpaXHJ6QnWWmCDLI
13XBwiEFJB2iZ/+0pC3rZjDRb6D+mbnG///+0JnO7t/3WHw0AbJvGo0UlfSs
qMqlzTPDM7+Ar2oxjZ/IZXXmSyN+w1fZPYjpp7PzL15ekxOiq3PoDs3D1mae
2G5+JXqxqToSSckbu8g/0ncbuqxcqkTXeZYVZI33k6OqvCZ5kDTkxlewupw/
k4RNcmU2CbnDzJK/eX9xCVeK/yfvTvnv8+O/vD85P36Fvy9eH7554/8Y6RUX
r0/fv3kV/gp3Hp2+fXv87pXcTN8mva9G994e/nhP1PTe6dnlyem7wzf3yPPI
ev3GkzqyqZPUS3ISdWOgAKkdZcbOm3xGH+iel0dn//s/j5+Sj/i38x+Ovn38
+HefPumH7x8/f0ofblamlKdVZbHRj6Qzm1Fa1yZtMEpKljZP67wlX0bXktRX
MAIyJ0OCffQTJPP3g+T3s3n9+Okf9AssuPelk1nvS5bZ9jdbN4sQd3y14zFe
mr3vB5Luz/fwx95nJ/foy9//sSBtTyaPv//jH0a06Efva/LfJl0/esTSe/Qo
I5mEr2h74Hbh8NlbkU4tiuoGTo9so+exxrB0d5HzORRo8JFdCnsLS7/YrXth
i53OZCwumGbJN6g7ZbfDmuOmN2UNF7+Y5k2IELTJJTTKDYhfDBxhRQM3HHqy
fLGgbacH+zhC3hIWdVK2TZV1c9jQyMUkfrCx+bKUyEReiT38nKAMBnE+bxir
KISR161o8hCNTTcJaVwIbbTG4MhnKbnvuqnaal4V4SbEsw2JU3yqC7/k/TCN
ihz2dHQuzxLxwkdusMabtMmSs/cv35xcvP7w7vDt8cXZ4dExbotkQeAuvWKZ
HgzDD6IUxkEckFmmsip50IqMyvIuhUgsjvqm4u22HGvLCgsj8UHqHKM40MLm
MBVoA4178f7lxdH5ycvjqQaGABTSjNSFx0wbelCLgenG7YVhhv7TdPT69OzD
2eHlaw6+NCCtYhMi4Zb+/XZcILGbBWmj0F6Y1koUhiqS+6f5m4w26/T95fGH
o1PyLLndAhR1k5McGVEYvlvNxz2OBGYymILsCO/kivZJpERXnh+/OfxRh2+D
TbnQnw1ifZl0JT8zE80lNEarmG140HnVla0gGr/tLtg7mJXuAmL4mpwEG4ht
IUgj+I8yAPHqvImsoZgl/bGmS+sNbX8fsSA1+FWwBaZfmPQaUTypOkZnsvcM
WBDSd0Ea0ijIlK4kxZg3laXggNtoq8nGSzOXEOvQlQdkUEwHSw93+DTYBx6s
UxRBqnFaCVVs+8a2foJXZXVDqgMMFkRLm61TTZ0Ua3YDbHN4jK26BlcCnLU5
ze3h7a3XG/vp0574twtILHlH6VubsyOhL+87id7ep32f5Nkndq3BCGklpd5B
mpJ1vJkXx5fvz/AU9ZEXIqXk8f70yR6Lw29jBW/LHpxUS7YTI/T3kxKKf/3r
X2y4NBWZ56ks8pYyEf3zz4RoHl7n3z3dS/492f/4dP/ls6f0qy5Afhl94pFG
0SqxhJrthxPQF34zXIwnPGC7tcacmZmnhN5FrnJHLIA2Fg4sUZxplpN9n5bY
Ib2HB6Ovx6qDX/BaMhnx+M5/jaOf2/RKMwp+ekZTQTwAtrm99cqCFMq5a81E
ZNwCCQKrrk6P/VqanJ2fXp4enb758NeT0zeHgAzApSbnRcHOoXa4Fvbk5jVl
veHQQyiU1Pf2Pgt0ApP/1Nt9giXOhslbkkRID+Yr5LgSFhAEoA4aTVUPIk/2
K3Thu/DrX9OiMwONgFpf8/fs9ayKg0TZPBBdNEvyNJbt1Xw+eXKBGz6gJLfM
4ZqC83zF4PL04uwH9xQeiaJK6x9Df9ckTQa9C6APGNIfAW6ffPv92NvS79hu
o5ySHX3uYVYUTbyj6zshSU2N4B5xO/QkH3NI7vKImcXVa0PpePL464PDPkMj
CrF5SZktO6OUhzrALNdeYQl1XtHPxriASbcpFnJIP3KmkieojwX7MTcQFOnc
YYhknPnmgiUpcDctGyM2gb7JARIFxR30LIF0UXSPY9SccoINFG+RLzsMKsqB
uynMDQKL7O8VQos1xYLGMWkNeRCw4+hWTUXD3MzgPjJyxewnClIr3u8l4yle
o2xYZuqi2tDDoSEYiGAOif0gOT85e2CDtL2KPH32JKjIk+kz2sEx69sDGzRK
Yy+09ORicnLxABB2kXZFq+NjJ+ARMoicPNTHmiaqgNQ0DRmmXEe2D9XoSp9+
01R1Ks+e7D+LpsITSaEQmZsPOd0J6L5JtZggggHfuHHdeh4/J5U/rEH+UbL7
p+njfVV7kUzQ4xuTLwlQASuVc5qzF43MWtDToioEDMExqp1gJ3hrp6M3Oe3g
yz9Bsm/fv7k8+XD8nyeXH16dXBy5+Tz99vnjsKhn08fTp7yw1jsPDtxiK7ai
1awcSlS9Hc57zoJmQEbZuVW9IgUlPZnR/LOU1IDUel0zKGnodvYJOe+5NXOK
uO3Gx3DHZ7lwbcnfUuYmX1PWBqOgmTZ5OivMpDDlEshCVA+gArOFRLxvQ3Ks
/NXIDa55KfKoMv8nLTpdV3RfL7nbxtHAX21D+KuxZroVBep8fsVPRl5HO1ZR
skcJAStrQUiFQRZP5runkxmtXtFPg0kUtHHFhllgxOY0NtscrHG+yH2W2ZGm
IWyRwwaKR3L3xmNzgfGWxxVOTkgnQemQjhMCwpP5Z5cWJH7eNfiosHy7kst5
SQ38hrjCZUeoC8JHcpZhf0kAAYzBV7OdkicqlwYX+lQSYsKworNINGfMihX6
/JURZwxY37KaU+oreQYZ3iLNiwp+rqoFsWIB3pO6Z7BOFaLfolQUyuG4zg2D
zMzBqX1SsZ9NU30aPXq0rwp/j1I6EXe7uaesQc6C5luno5MWmROyfDw8jVTA
wSF20h5PCSPUw1NZ77YYP0jog6mtyMzZpNxkaBkXrEtpuUmkQMBB0e+W0gL7
Y6YSnMZwmg0DBqFNVgQ1Ua2g2Tx6dEBSYJX0GSWjYQ7GnO9Nkyg+i0uNkhS6
eN8Fjx7/G3hSDiZYtMeipEVzJEdb5rWmvJlcj8OnLkvknU2h0vtTXsQpa7gX
DVaxNZZMdZE35IToM3kgnisyYQ79yEPKoLW9ZfqZshqyVdhum8JO7Zaeb+ke
pvtDXkiFgCcasUU+2O8nSyR1WLCfhO6bkKQYwDFMgm6rcspK3Yv9hBTyJbAb
9gZmqGAOmMgKwUOzwsQZHCR+rtDp1vS36Ya8Mqskx5kIGb/q6iJHkSx5VFbl
BCb0KFQhSjZtr05Qa9GkF5RauRtxj3goWuZ09MonTfvwr4SZhKDxisoz8+Yv
lleVmzU7LvNxbmrCRUvoSBvjIUnqeeW87U5jItmIezhU6SQncgUM5/a+l1mM
UWM5OzNoq937WjIHdrMyQkfF2eE+PD19EzuL3EUg5y3Y3WihhcYFK3DH1h3g
F5d+iL7YocKQZyjnRcfZCIuwr84iLE6IMknTdD5gH2HyQQOgeGL9scoK+Fei
VGnRB3bc16qZcVAd3nSLVYgmIVlZSKO9RilJwylhlOLgz8YwQttHisdu1BRZ
L8NgpcYF6r09heTo2xaknn8WGc6sybOlSyR4wl5XXvWWxXEtCzUqZgkhC3E1
Ugfw0co57unoIgqzPqXIA/36BR8j7ElX18jsXDZGY9FuDDdY0WLLzJ6G+65s
jLJzIYLfVF2BlcAjL7lIQfcyDMCzCHKQs4p4VjDCSP8spzBqB5FrQqUWZgXT
zxjiZHlagK6TJLMxYGIFR44dNFuaVhiKlld98oqnDG2gcYW1ErzTeAyiqm6V
2J9XyzL/mQsuWygBFAklbAQ1aBdrIbuVCNPVcy7EDBfWQ+7oKgFGc8yZ6C47
oaqzoDnJB5nMm5sGRWZHGydioSS03KXridebhmRTp6XDHfjMTz3YmMl3Jc5p
c66MqXUTwBA20E/OV3PNW2cGOuY1gnY3JbSqzKBPWjmZhef1Ub0GRQ41BTR/
5ym7w75q3d4PBE0gp7E7UQ6PXfmz2UyYupicpQztPO29TbV9O31GJrfNKu0k
5R4/29uib8Po09GXbv9uz1clHMEU+NxJBodUCjatm6qmWANJbwMC/xjFs322
n5NAy9mIziyZkTvXfVBqKCLMaPNTyuUfauvKHtNDl5RvxsTQ92P68o2kQQ9p
Hfh4iX6KaLsuugUqrQ+nU/75ncePZ9EG8JD4Of6S7kim02lMMaUZc3O5QSaK
TaV0tcJX5mM6bwnASfq/tXHTQFlyYOnJxpQwc9FAkUnlGIRIpsrpBfEJdUAL
2eeqqJbRzLpuNy/kG8dfhke55g3vE+R5MSh3OwX7l18ByF18jrSWnjyrwIBz
0CN/ylfbQXLoWVgeNlojz9AhvYiDdSUQf6dE7ghXkRONTKsTAmYg0xwO2Uvv
w6vTd3dp//M9bzQU/gQMamNCPKIGwH5OXKT5GulHnc5yySQhi5xL99xFFYqQ
5IVKk2q5KfJFELPmL5JnORABMED5jvmIMhf5AjLFhjJWFBQoaHQ2LZCHFajZ
3t7e0Zj06ZNgPC86r95KMSDHiLyWusGKEAri+bDN5quKa76pY7um5sIwhxVH
Dnvj3zXJHTYPMvh5ZPZCAw8KBUO75ZWkxQ0oSM6DWoQK2ypbQjnS+M46ICMq
lzWRDnHePGBvfwsP7xuInNWO3beYEPQxq1gXnG8hbFsk/5B1/4OxBF2fJi4R
8dUz7otAbTWfG2Xzg7nEGsBBU3n97fLlOm1EFq4ZygUF8QWS5LKR9JRCC5tx
vZNb6LhQRLM1N/06l0AOTnunWiDYOds7VOF7+n5XQeCE5eoaJSSsxVQ45dOo
bliyeIg11GpdmVBL/lFvg6Q0LkUX6r9H3w/qtJXb4/IKzlmvJZPHDbu4elbV
HWYjteHAUvrkoPYdDbxJBwruPXyOerj4SkMpySpfumaJ6DrZhVUq3SBMrSUc
L9YkubFyAFyjBANEyRvvKWJfSKa4ERBhS3w6ikE8Kvs1xsfuZixIuFYpPRQw
RVJmcsDov1DqA+4mbEvN18SILWU8Qo/eOFEHela8qH4tnNGAdwbfIrmHnxb7
vYjxZQxem3m+yOdIndtcNq6Xg7DpM9crbXtcg8h41xFExWlSts55BtZFD3od
ivy47oEVG6NfjuJMNWQS+IQro9Bo0DJCNoYYrOGeH4NLlTYsdRrIpa1KNmQ6
PArvxL5wfWwMIomdl6Uz0lya+6PkiG+YGQQfm7Zdw6XYF8m3//XkW+xM1Mek
LSFy1+/5iunovXjTMaplqB/MuoxyAFmcjqdVEyMwi/7iDj5IZNmRUyDFNQdb
lVDABWiUFAlkvm5JiNK8i1WpwwhsSDlj3/QQ9MaZhmB/KYa+NGQeedX4vglN
5jm5GEZGno5inkF3gwbBEHSDa/B5njAMGrDYiaSOzIviDnZOOnCEVKAoJcly
xtYW1cHv5B2FK9wiGDzt6OY+CDIH8eK9+5DitXJeups7Yoa/njdYtRxTDXkZ
mNOpdAzNV4a+naP8alwfDjepbRItgChRLeUg8inKny1Q9UqAmXJu0DnkukLV
cJVEeROhe60HvAPj9t0dcZHx10R5KTe+cPJnaSlZhbTVBtofve3aQSWOZ204
UQn9YjJ5CegvlZmhIO5JGuDTPqezi5GPuz9cWIv4rUu/GXMQwEbEoiuEhy8M
KZ2wylKCoOf4pwZ0xHAqpH19E5DHeEYyErAnmLbGjUnc/KtI3NAf2m9tOIzC
rutw6IXi0UshZSIVB2M2bzVcbPdH9npOCAoMkUDE1HmClNYU9VXQqrYr/5Fn
mLr0k3uA1SmrpySXx2keyYyUsUl9CxgBnq5xpe840opawoyARdD3qXQ7+pUi
34E1X6MuEXOiUffSw1SiSg/QScYiLGMMs5V45vMOds9xP16SXI3heR1I9afk
hg3xg64RPefGGF2fJLeBquAgGjVfSQiWKIXWb3Ynzvy4jc+fYYB1XYPw4/2N
+9YgdlgvJ9ukUkVu3COqUKYB0pq3HTcdaDsX8qAXEWDi68Tosby4OZA3yBVM
uZYOmlopLIGrhHNKDjRK3dHfvFV/08zftvCLd2xTYNpQNYVqD9sTdQZSXORV
pIuWC2HLBiMQysqrDGInd2PQIdE1ZfBNiyKtXZMDYGzo92A7ZqAzMyhc9WbI
DESYpgYRXEx4IxC2D0Bap1baMpyeO48i3XESbHJhJBJL/oou5p7ICjLtiyPC
usj4eYCpM/rGTNDQWaqxc3ljn210EDmlJUaV0BnKxK9PDOghe89+jEX+CboE
fRhV47O9veBGnGnU6PhNuRSEqAV+dA4QOuGm1IDKQ3k7xegrj3t7bYYsWHHA
0gWlaSWjXICrNTkDHC1BWdzl/D04OthWlnUo5I0j4lcZBNmWUjvO+CG6NjyL
MjDd0QGZqKLVPMIU1igqK7UauUp/FjSTRd0MaVYxDa2bLs7+fZ2Jo8e5k97+
3d7v9Ld+Uxt/y+2Y2/Qrx0GcEzi+uPzw/uzV4eUuVul302d78CNC2Atl4zrg
e/p/B6OlnSUK5GhulU8fXDYc/IjzHaELVTJWbo4Ij4vbeX2nvvmIoiR5h363
2b6DAS4ol/YGmYBb+OmfmXxwH4/Pz0/PeS8YGim5qOuVZA1yy5r0xvbZr7Ug
7CBfbSzvS9hFs60dYoZyA4sNXJJsEUiGmKmMms58R3q0reQV6wpg0Z0/+ExB
nAVTGy6uwjZ9XRfhLrT5U6JQcFK0izcsuMTH9UxsjdXUSySmDXq8RolGTJkI
EBLXJX3QXJvnr60wka6S5nf6DioWsYR7WSnoZW5kLQoOGp0DgeAOVAVpCvqV
9el0fX8T++4iizchbUmNuS1vC1V7EQOvZezVI0DBnVNZg46wlL26YL24lVdL
t5TniuOT3gdvXr4JwudHkqo7+sPyn3nZcTkrZC36eKB+UhE0EevasSOSvHBX
Np9J9f1e2m3OQF7Cn+/BOJCSn2shHKJIn4TzjmhKo1PjPhhdXmCGgPBlSeNe
A5fI1JndttUlD7ecm3DkJOr+N1JkDSiNWw16iFP3nr7lzVcaC12H3H7lfoa1
RH7GzbrXNOpcGKA++O1Wq/rszUAZNQx06kGVPtZ45OtngFoXPje4vR9yuti0
aU+r4lq8o/PTJG3bFTGKXCP0OxZo+yjntdGO9wOtIDIwQ+1wkX+k6fzNNQ/C
eeTcIRpmoMELFzPY8horIcAl4eQSXc4lPWDuCBUAmGZa8vAbPDtIeSzHV1hM
fHZWjmaw+a6qBpGkV7GUkcJFvHbMtgRQiHMRQdIkjdxyoWOQJAt0kSStrshD
bgJaIUBrubfv/PJy7DA/wsDph6ND0ruTyx+DKUjGSS6eN6uThhju7lvw4U7y
/5+tfhx/7JNpi872isEojnF5yZ0kErP2DKvnPdSlKHwC947pOQbA27o2hikI
HmjLAAgyIrbhEJLA4QGb/7nDwhJ0GRnd0XW4tTHcXCfsmI3aBwJhiE4jDgSM
aPuZHSufpj3SiCk53tADDvywL2fw2TwWniJCiGqs9FtjQgdARD82RncsTju3
D8DsrjkGryXp12ADvIExGFN2ztWnHLCNzjkKnc2ewRFqrloZ2AHPbvEJDu0k
HJ2Gk1/q1hq8lKCMcrMw21ZPDo37vtc3NIq+RaefooWkrSdZXmqEDCxJ/6zM
uNe5JTFdck8etOnK0MwoVRJ/ZNPN0GW3kR8P2TX6L6BNrDZ5aMlDYk0ClJ6Z
4b7JZGU2cvCJkUlfEWebYA1Nh25cUjjeF7XmTG+2TsyistEQjAZg7DCXYe4d
FUSU1o9YBhxbSHpn5kCg9A7IC315WsrstjvOeF9JhWqwmgrmo5qwaknTtatF
V2gHPPei2P4i5ps5Ggd6dKg7DSaH3M56vcmYUeiMuL0fWVE4Est75w7JRZYY
9LN/OFQORaZ62i6wuSumXcLpNo+8Q8P5GqUA6V/rd4vsOHGXxuftnOPtnUyM
ptRK6EIeGNLqrzqet8UA9xpivO5oO/Wdh/SURIs8r1jQSlAx72+1S8rg5LbE
O3gHhPPfLF1QTUAfPKMQKYQssaJqyLbd5pQkZt8wAvvUkwkL/1YLxULsqIE5
mDjIS60DI7Mn02lh2KXR7i/r+MmeDvuTVCotFRL5jM2OaHbQz2CZjeD2UuVY
+pCWObQtm+r7UEkD0SRwe+uTfWX1ozRBHH84f+7qLqHLMkRciSCns//mHjwY
/nT0tmKn4XZnVxRj/WUa0YF5Dit5I5HT9wPrwUSSP2uu6HpwPbzb3MPt2ure
EMRqQ3N98sPx5ZHCR8Jbcy4cu+5g6bLcaIjXLz3LRhp715GGYQdhkl5XeSZG
i2ruypFPrgfj9tadX4G0JTTE/Z1iAEPM4k9XD0/C+iCyE2tELk5BsRzK92ct
+FUUXM3IBPXEiMK5SzmJg/dugKaSgqbl1EHP6JA96/LgipGduGg8Mxsk0tqC
zFwt3Q+Uw81h3BGWc9vl1vEhfZqNzjvgrAv8C/3CCAxlcERxOVYjfI+kxHpy
Yr/XlBL3k6/yzPSbv717QM3phYv/UV83y+uu8sqwlz6utrgXE+R8sNxDLKaI
RWAcENYIVCs5rzPspkLbBThD0ZeVnENSKJD/zAWEWITRUV+U5aqiSGs9jMWa
VfIjaxtaeLXRh7NIUq7oKO5sq+Lju0D6h7lIXRysck/naOIKXdFxAT6NEp8u
TJmoNb5CL521LhFTVptcxQte8k3V2FaHgE4zYMm4C4xfq+TQlC+S4Vt9f8RN
7mIop2eBM+69pkDZNs7LQFwZPVWZa7zV5EvKR1EJS6KR7ZGO83g7t9tQ8uid
F8LGgqfl90sNyJa8lSyUWXJKuwwhJIKyFaNcdmLMidNNKFasETwZAa+qfB69
dKPgFFAidbGYFPk6b6XxOHcFAXr6Ain9TaXvriGnn6w7qxPwDXmDUO4UnrfU
eQcYo55yw+s+kCQEBl08c2T7FNhLreYMjgpqKiBcY6rHCHqNxNiYVS5vEOKD
hZyLLkuuXUSsjDTPoGrFxSQ+TqcvQjl8dzjwc8O3NikCkOAnTYZS01jmeCkY
3zMdvc7R7+fCHXyVOifpQech5LUqLl4wRQFPtjThYJnk8Ao+9eVZqHasYfPR
8UHOk0lPr/lzWvSng1EG3a5WSgBvT//SP2n+meVyhSMeVVOHe9uD3HNXbnY1
lj6bPt1z53CFAIEuXiiNJG8uOPetCaNftIctSX5hgK4vbvuFruHX2czlm19G
vxxM9F/4a/gBn2lEfYcCDaJvXpAReemv3NLDhd/haaFkvX2hl6XrzQ690r9V
oNsjfUmqz/fUGUDHpG8329lxDWZpWKrhALKzqb6HDpl8KkOvBNLJcPXadab3
3sywd/cm0qcjnehJmXz531dv+tauf+Hf3UryXJWEQzZPYYc8h1WZIJK7lep7
rCZ4r///wJxmbJ+kgAvmrpA0m8wM45+D3rnOKgvNVfoqAH6ZDafME2Fr2RW1
XAXiUEE4pDBqPOPINsa7TncgPXeJBc0p8oQz/AeHtks+rcwvekOnE3yxPxt/
eJAcMRIuqiVb2uAVm5NwTi8P5/Qw8ld0wvQPnk1C99CXT4H1Do3J+6FwnNGz
ip9rQZsIER+mJjy3jYluKdcFfluBWKhoBzFjwHMDm4v7a2iki/57RBSCoRNa
U98serEG12bw9jx1j7u0Itqxfkzd0hdClZjW4Q6vwi8+y8LZp6Ev2lUfjjtz
Uq0zmh0v+3qRfO6gkXhQ7uBfRHVaeTBO+/Ym6Zi9Ce+9TssVQrG0X8G1/Fay
JD6BrOhSSaKvYEheYI/jBJzpke2MO5wUMRvNDlPPlU7YY4tiubd1uGKuI+4V
D+PFFxnFbdFpeeVFHDkFL9kd+u+LS1+oKwkxMd5RUHqxmxoTviLVi8JbgkS3
3MmTvA1Mb1QAucH+c8bMDBIf+V/wq1offqa0sjdNLqJubnV1wLGC6CK4y+Cb
5PF/lb9kYpZYAAA=

-->

</rfc>

