<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-lopes-rank-00" category="info" submissionType="independent" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="Rank Protocol">Rank, a Resource Management Protocol for Allocation</title>
    <seriesInfo name="Internet-Draft" value="draft-lopes-rank-00"/>
    <author initials="R. E." surname="Lopes" fullname="Rui Eduardo Lopes" role="editor">
      <organization>Universidade de Aveiro and Instituto de Telecomunicações</organization>
      <address>
        <postal>
          <city>Aveiro</city>
          <country>PT</country>
        </postal>
        <email>ruieduardo.fa.lopes@ua.pt</email>
      </address>
    </author>
    <author initials="D." surname="Raposo" fullname="Duarte Raposo">
      <organization>Instituto de Telecomunicações</organization>
      <address>
        <postal>
          <city>Aveiro</city>
          <country>PT</country>
        </postal>
        <email>dmgraposo@av.it.pt</email>
      </address>
    </author>
    <author initials="S." surname="Sargento" fullname="Susana Sargento">
      <organization>Universidade de Aveiro and Instituto de Telecomunicações</organization>
      <address>
        <postal>
          <city>Aveiro</city>
          <country>PT</country>
        </postal>
        <email>susana@ua.pt</email>
      </address>
    </author>
    <date year="2026" month="June" day="29"/>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <?line 272?>

<t>This document specifies Rank, a comprehensive resource management protocol designed for modern edge-to-cloud computing infrastructures. While traditional network protocols focus primarily on managing link bandwidth and router buffer space, the shift toward decentralized services demands a broader approach to resource allocation. Rank addresses this gap by simultaneously managing computing capabilities (such as CPU, memory, and storage), network capacity, and time-sensitive constraints (such as clock synchronization and task scheduling) within a unified framework.</t>
      <t>Operating primarily as a fully distributed protocol, Rank enables dynamic resource discovery, estimation, allocation, and sharing. It works by establishing a path between a source ("talker") and a destination ("listener") node, actively negotiating resource requirements across all intermediate nodes. Because it is fully distributed, all participating nodes carry equal responsibility in handling a session, such as processing requests, evaluating their own capacity to meet the resource demands, and strategically forwarding messages to ensure an optimized, end-to-end connection without relying on a centralized controller.</t>
    </abstract>
  </front>
  <middle>
    <?line 279?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Internet’s evolution has consistently faced challenges related to network congestion, initially recognized in 1984 <xref target="RFC0879"/>. Early solutions, such as TCP retransmissions, paradoxically exacerbated these issues by increasing data rates at intermediate routers. This led to the development of resource management protocols, primarily focused on network resources such as link bandwidth and buffer space within routers and switches, often employing quality-of-services (QoS) mechanisms.</t>
      <t>However, modern network infrastructures, driven by the migration of services to edge, fog, and cloud computing layers, demand a broader scope of resource allocation. Beyond traditional network resources, computational capabilities of intermediate nodes (such as CPU, memory, storage, among others) and timely aspects (clock synchronization, task scheduling) have become critical. This expansion requires a protocol capable of, as a single package, managing diverse resource types in heterogeneous environments, in both number and quality of network nodes.</t>
      <section anchor="requirements-language">
        <name>Requirements Language</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
    </section>
    <section anchor="protocol-overview">
      <name>Protocol Overview</name>
      <t>Rank is a network protocol that is able to discover a path in which it negotiates a list of requirements for computing, network, and time resources, connecting a service between a talker and a listener. This resource management is made in a fully distributed way and this document strictly defines its behavior as a distributed protocol. Nonetheless, Rank may be modified and implemented as a centralized protocol.</t>
      <t>As a fully distributed protocol, all nodes carry the same level of responsibility in handling a session. No node gathers more information than other during a Rank session being established, nor a node save information regarding other nodes. Each node has the sole responsibility of receiving a Rank packet, process it and send it to a new node, registering such a connection in its internal data structures.</t>
      <t>All nodes run the exact same algorithm, in parallel. From the reception of a requesting message, each node maintains a database of all the session IDs that have passed, with all the last known status of them. Each participating node has an identical database content related to a same session.</t>
      <t>In terms of communication, each node transmits a message towards its targeted listener through a non-greedy routing, in which intermediate nodes are first selected according to their capability of reaching the target, and then, if there are multiple nodes to choose from, a proper message is sent to get more data on which of the nodes is more capable of supporting the requested resources. Worst-case scenario, in case there are no difference between the capabilities of the requested nodes, all of these already selected nodes are appropriate candidates to proceed with the message selected flooding towards the listener.</t>
      <section anchor="common-terms">
        <name>Definitions of Commonly Used Terms</name>
        <t>This section provides definitions for terms that have a specific meaning to the Rank protocol and that are used throughout the text.</t>
        <dl>
          <dt>Rank Session</dt>
          <dd>
            <t>Control messages and data transactions between two or more nodes, covering the connection between Rank end-points.</t>
          </dd>
          <dt>Rank Process</dt>
          <dd>
            <t>Execution instance of the Rank protocol in a node, possibly having zero or more sessions. Along the document this concept might be also mentioned as a Rank Instance.</t>
          </dd>
          <dt>Talker Node</dt>
          <dd>
            <t>A source end-point node for a Rank process to occur. This node type exists in both distributed and centralized environments, and it is responsible for starting a Rank session.</t>
          </dd>
          <dt>Listener Node</dt>
          <dd>
            <t>A destination end-point node for a Rank process to occur, to whom a talker intends to handle a data connection.</t>
          </dd>
          <dt>Intermediate Node</dt>
          <dd>
            <t>A node type that interconnects the talker to a the listeners (and other intermediate nodes if such a scenario applies), being also part of the resource admission request evaluation to some of the specified stated requirements.</t>
          </dd>
          <dt>Controller Node</dt>
          <dd>
            <t>An exclusive node type for a centralized network architecture, that can get information of all the featured nodes in a network (or in a network of networks), estimate paths, and delegate reservations within surrogate nodes (that can be intermediate or listener nodes).</t>
          </dd>
          <dt>Admission Request</dt>
          <dd>
            <t>Request made by a talker to listeners, initiating a Rank session with discovery and estimation features. It contains a list of requirements with variables for each requested resource, and a priority.</t>
          </dd>
          <dt>Suitability Value</dt>
          <dd>
            <t>A single precision floating point value that reflects the capability of a Rank node performing an admission request. This value is in range [0, 1]: if 0 then the node is not capable of accepting the admission request and rejects it; otherwise the node is capable of guaranteeing to perform the admission request.</t>
          </dd>
        </dl>
      </section>
      <section anchor="related-work">
        <name>Related Work</name>
        <t>The fundamental basis for this work is the Resource ReSerVation Protocol (RSVP) <xref target="RFC2205"/>, established in 1997, which enabled network nodes to flood PATH messages to discover and verify node capacity for quality-of-service (QoS) guarantees. Since that time, several new solutions were developed by the scientific community, but one cannot simply assess them through a unique time axis: as Rank is a resource management protocol supported by discovery, estimation, allocation, and sharing features, the related work must be assessed in these four axes.</t>
        <t>Starting with resource discovery, RSVP used basic flooding techniques to discover network nodes, constantly sending messages that created heavy network overhead. More recent protocols, such as the Stream Reservation Protocol (SRP) <xref target="_802.1Q"/> improved upon this by using admission controls and allowing for path cancellations, reducing overhead. Nonetheless, other works can also be found using location-aware matching (client requests are matched with the geographically-closest available edge nodes with DNS <xref target="Horvath25"/>), semantic and context-aware discovery (architectures may use semantic layers to match resources based on user intent, time constraints, or historical patterns <xref target="Farhoudi25"/>), or other approaches differing on decentralized/centralized architectures (there are solutions with decentralized Named Data Networking (NDN) that enables dropping resource breadcrumbs to advertise availability without overloading nodes <xref target="Kondo24"/>, and other more popular solutions rely on a centralized entity to monitor active resources <xref target="Kubernetes"/>).</t>
        <t>On resource estimation, SRP <xref target="_802.1Q"/> is also considered as related work, since it uses admission control procedures to check the local capabilities, per node, of performing what is being requested in terms of network and time resources. Analytically, there are other solutions that dwell beyond linear admission requests such as by using probabilistic models <xref target="Li18"/>, dynamic optimizations <xref target="Abou21"/>, or reinforcement learning <xref target="Zhang20"/>. Outside academic environments, Kubernetes <xref target="Kubernetes"/> also apply tools like estimation via auto-scaling that automatically adjusts the number of workload replicas.</t>
        <t>Looking now to resource allocation, over the years researchers have tried numerous mathematical and predictive methods to solve the allocation feature with limited resources. From early deterministic models to current solutions using deep reinforcement learning approaches there are still plenty of difficulties on this execution, be it from requirements of knowing everything about a network’s state in advance, or requiring massive computational overhead and long training times, respectively. Other solutions developed apply game theory <xref target="Yu25"/> and market models <xref target="Nguyen18"/>, as these problems often involve multiple tenants and competing service providers. Moreover, other solutions can also be found using joint optimization in hybrid edge-cloud systems, in which research mainly focus on computation offloading with the help of dynamic partitioning to minimize latency and energy use by deciding which parts of a task should be processed locally versus sent to the cloud <xref target="Yi20"/>.</t>
        <t>Finally we must address resource sharing. Early studies introduced opportunistic and voluntary resource-sharing models, in which end-users or third-party devices temporarily contribute idle computing or storage resources to nearby tasks <xref target="Wang25"/>. Other approaches could also be found with game-theoretic models <xref target="Zafari21"/> to create structured sharing, auctions to negotiate different types of heterogeneous resources simultaneously <xref target="Liu24"/>, or blockchain and smart contracts to also enforce trust on these transactions <xref target="Olaniyan18"/>.</t>
        <t>Despite significant advancements across edge computing, a unified set of open challenges continues to restrict the efficient discovery, estimation, allocation, and sharing of resources. Scalability and adaptability remain the most persistent hurdles, as current models struggle to perform in highly dynamic, mobile, and dense networks without introducing crippling computational or energy overheads. Furthermore, modern systems frequently fail at multi-objective optimization, finding it difficult to balance conflicting constraints like latency, computational power, bandwidth, and battery life simultaneously. Finally, in open, multi-tenant edge environments, establishing interoperability, trust, and security is a critical unresolved issue; the field lacks cohesive, vendor-neutral standardization and continues to grapple with how to enforce secure, fair, and verifiable resource transactions without triggering the heavy latency penalties associated with mechanisms such as blockchain.</t>
      </section>
      <section anchor="document-outline">
        <name>Organization of this Document</name>
        <t>The first two sections of this specification give a general view of the protocol and a clear description of the most critical concepts to retain during the reading of this document. From  <xref target="functional-summary"/> to 6 explain the protocol’s mechanisms in detail. Packet formats are specified in the appendices.</t>
        <t>The detailed specification of the protocol is presented in terms of data structures. This is done in order to make the explanation more precise.</t>
      </section>
      <section anchor="acknowledgements">
        <name>Acknowledgements</name>
        <t>The authors would like to thank Pedro Veloso Teixeira for the large discussion sessions and main alignment of contents in this document. This work was supported by Fundação para a Ciência e Tecnologia within grant FCT.2021.06223.BD, and by European Union Programa FEDER, Operação n.º 14795 - COMPETE2030-FEDER-00929900.</t>
      </section>
    </section>
    <section anchor="functional-summary">
      <name>Functional Summary</name>
      <t>A unique instance of a Rank runs in each node. No node is able to run more than a single process. A brief summary of the resource management algorithm follows.</t>
      <t>When a Rank process starts, it first initializes the protocol data structures. The node then waits for any Rank message incoming through one of the ingress network interfaces or an internal API for application-level interface.</t>
      <t>There is no indication that the Rank instance is running besides checking the state of the assigned port for the process execution. If a running application, in parallel to the Rank process, intends to request a given list of computing, network, or time resources to be allocated throughout a path towards another remote Rank node, the service use the local and designated Rank API to trigger the process.</t>
      <t>As soon as the request is dropped through the API at the local Rank process, a unit responsible for external interactions with the process itself will enqueue the request at a depositing queue that will be directly parsed by the main entity of the Rank instance, called the Process. The Process, as it has direct access to the depositing queue, will dequeue the request and assess its validity, by verifying if all fields match with the expected formats.</t>
      <t>Passing the first validation, the request is now analyzed regarding the session identification. As this is a new session, locally created when the API was used, a new session identifier can be found, that the Process will not parse as one that it already knows: at this stage the Process will check if that the received message contains an already known session identifier; if it already knows, then the last known state of that session will be checked and, if it is not invalid, then the session is resumed; otherwise, a new session will be locally registered in a specific data structure called Store, and a Handler structure will be created to handle this new session.</t>
      <t>A Handler is an entity that represents the current state of a session at a given Rank node. There is no Handler instantiation without a session assignment and all Handler entities are saved in the Store data structure, which matches a Handler with an associated session identifier. Moreover, a Handler entity, as it resides within the Store, has its proper threading mechanism that may suspend execution when no further processing is required for a session, at a given time.</t>
      <t>As a message is received by the Process and then passed to a specific Handler, depending on the type of message received, a message parser and exchange algorithm will be in place (thoroughly described in <xref target="packet-processing"/>) and the designated listener will be searched along the node operating system’s tables: if there is a single path towards the listener, a new EAR message is sent through the network interface leading to it; if there is no connection towards the listener, then a refusal message is sent back to the requester (REF packet or an error code, if this is the first request made by an API), describing that the request could not be performed; otherwise, if there are more than a single path towards, a MAR message must be sent to each one of these neighbor nodes, requesting them to self-assess their own capability of performing the request and then tell it back, so that, preferably a best single path is chosen. During this procedure each requested node will tell back a suitability value, encapsulated within a BID message that is estimated according an algorithm that is described in Section 7.</t>
      <t>As soon as an EAR message is received in the listener node and this self-assess as able to perform the list of requirements that are set in the admission request, a new message of acceptation (ACC) is sent back to the talker, via the same path. When the ACC reaches the talker, then the Rank session is said to be effective.</t>
      <t>A session may also be terminated and that action must be propagated throughout all the participating nodes. There are two possible ways to terminate a Rank session: by request (REP message) or by link failure. If a request for replenishing is placed in a given node of a session, REP messages are flooded in the session’s nodes towards the listener and, as they reach the listener, a REF message is sent back in direction of the talker, closing the session.</t>
      <t>During the execution of a session, heartbeat (HBT) messages are periodically sent from a node to its next in line to the listener. If a HBT takes a long time being received by a node, this one must start suspecting that the connection might be unstable or even broken. In case a connection is broken, then the nodes should start a timeout and then sending REF messages so to take the session down.</t>
    </section>
    <section anchor="protocol-data-structures">
      <name>Protocol Data Structures</name>
      <t>The Rank protocol is described herein in terms of its operation on various protocol data structures. The following list comprises the top-level Rank data structures. Any initialization that needs to be done is noted.</t>
      <dl>
        <dt>Session Identifier</dt>
        <dd>
          <t>A 128-bit number that uniquely identifies a session. This identifier is represented by a ULID <xref target="ULIDCan"/> that is a data structure comprised by an entropy value and a timestamp, that allows this records to be lexicographically sortable. As soon as a session is created, a ULID is created, independently of the location. It is recommended that clocks are synchronized along Rank nodes (at least those candidates for same sessions), but in case there is no synchronization and ULIDs are sent with equal timestamps, the entropy value that is conisdered in their content is sufficiently large so that 1.21e+24 unique values are possible per millisecond.</t>
        </dd>
        <dt>Process</dt>
        <dd>
          <t>Top-level entity that is responsible for handling all data from a Rank process. In a Rank node it can only exist a single instance of a Process running. From this entity, every other data structure and mechanism are instantiated, initialized, and managed.</t>
        </dd>
        <dt>Store</dt>
        <dd>
          <t>Data structure responsible for keeping record of known sessions by means of their Handler structures. This structure is a set of key-value pairs, in which each key corresponds to a session identifier (as a ULID), and each value is a reference for the responsible Handler for that session.</t>
        </dd>
        <dt>Translation Table</dt>
        <dd>
          <t>Data structure responsible for saving matches between original and replicas of sessions. When discovering paths towards the listener, the Rank algorithm may find alternative/disjoint paths to which it the current session identifier will be unrolled into a set of newer and related ones. These matches are saved within the local (to the transitioning node) data structure of the Translation Table.</t>
        </dd>
        <dt>Handler</dt>
        <dd>
          <t>Entity that is created to manage a given session. There is only one Handler per session. This entity is created at a Rank node, by a Process, when a new session is created. Each Handler has a state (ready, assessing, presenting, auction waiting, auction bidding, pre-reserved, reserved, replenishing, closed) and it starts by being ready. A Handler has a threading mechanism integrated, so that it can have its own data structure and be suspended and resumed by request. When a given session is being processed in a Rank node the respective Handler must be awaken from the Store and its state and status must be saved before suspending again. When a session is closed, the handler is saved in a minimal storage footprint condition, for auditing purposes, with a closed state. Multiple Handler entities may run simultaneously.</t>
        </dd>
        <dt>Dispatcher</dt>
        <dd>
          <t>Attached and controlled by a Process, the Dispatcher is the only component of a Rank system that manages the communication to and from a Rank node (and the hosting system, if using an API). The Dispatcher has three main components: a set of receivers, a sender, and an API. The set of receivers are a collection of receivers per communication layer, that are able to get and parse Rank messages on ingress network interfaces. The sender component works similarly in the opposite direction: creates a structure to encapsulate the message and send it through a given egress network interface. The API is the third component whose mission is to create a communication channel with other parallel services running in the local machine.</t>
        </dd>
        <dt>Resources</dt>
        <dd>
          <t>This entity is an internal representation within the Rank instance of the local machine resources, so that they can be estimated by the process and requested, for allocation and sharing, to the host’s operative system. This entity has the concept of current capabilities and it also knows how to hold a reservation. This entity is also the component responsible to provide means to a node self-assess its own capabilities of performing the requested in the admission request.</t>
        </dd>
        <dt>Reservation</dt>
        <dd>
          <t>A Reservation is a component in a Rank instance that carries an internal representation of the received admission requests. A reservation has the same fields as the admission requests (list of requirements and priority), but using internal representations different from those used in the Rank packets.</t>
        </dd>
        <dt>Timeout Handler</dt>
        <dd>
          <t>As Rank is a distributed resource management protocol, all actions performed before and after requesting resources to the operative system must be bound to time instants in which the instance knows, effectively, that those resources are being used well and that there is a constant connection between all the participant nodes. To failsafe, timeouts are considered on actions that enable reservations of resources (such as the reservation and the replenishing of resources). To manage these timeouts, a Timeout Handler is an entity that is managed by the Process and is able to asynchronously start timers that are able to rollback and sets of changes in case a timeout has been achieved.</t>
        </dd>
        <dt>API</dt>
        <dd>
          <t>The communications to and from Rank instances are not exclusively horizontal (between nodes). The starting point for a resource reservation (the launch of an admission request) is any service that might require a list of requirements to a listener, so that a connection between such service and its local Rank instance. This way, an API exists that is able to establish a two-way inter-process communication allowing requests to be sent to the Rank instance, and error codes to be sent to the requesting service. This component is managed by the Dispatcher component.</t>
        </dd>
      </dl>
    </section>
    <section anchor="packet-processing">
      <name>Protocol Packet Processing</name>
      <t>This section discusses the general processing of Rank protocol packets. It is very important to recall that each node has its own database of sessions (Store) that are not synchronized between them besides the first communication of the session request.</t>
      <t>All Rank protocol packets begin with a standard header. The sections below provide details on how to fill in and verify this standard header. Then, for each packet type, the section giving more details on that particular packet type’s processing is listed.</t>
      <section anchor="sending-packets">
        <name>Sending Protocol Packets</name>
        <t>When a Rank node sends a Rank protocol packet, it fills in the fields of the standard Rank protocol header as follows. For more details on the header format consult <xref target="rank-packet-header"/>.</t>
        <dl>
          <dt>Version (V)</dt>
          <dd>
            <t>Set to 0, the version number decremented by a unit of the protocol as documented in this specification.</t>
          </dd>
          <dt>Packet type</dt>
          <dd>
            <t>The type of the Rank packet, such as EAR, MAR, among others.</t>
          </dd>
          <dt>Reserved (R)</dt>
          <dd>
            <t>Set to 0. This field is reserved for future usages and other values will leave this packet to be parsed as invalid.</t>
          </dd>
          <dt>Session Identifier</dt>
          <dd>
            <t>Generated as a new ULID value. In the case the session being created is a replica of another that exists until the current Rank node, then a new ULID value must be created with a new timestamp, but with the same entropy value.</t>
          </dd>
        </dl>
        <t>For more information on the format of the specific Rank protocol packet types, consult the sections listed in <xref target="_table-packet-types"/>.</t>
        <table anchor="_table-packet-types">
          <name>Sections describing Rank protocol packet transmission.</name>
          <thead>
            <tr>
              <th align="left">Type</th>
              <th align="left">Packet name</th>
              <th align="left">detailed section (transmit)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">Exclusive Admission Request (EAR)</td>
              <td align="left">
                <xref target="ear"/></td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">Multiple Admission Request (MAR)</td>
              <td align="left">
                <xref target="mar"/></td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">Bid (BID)</td>
              <td align="left">
                <xref target="bid"/></td>
            </tr>
            <tr>
              <td align="left">3</td>
              <td align="left">Acceptation (ACC)</td>
              <td align="left">
                <xref target="acc"/></td>
            </tr>
            <tr>
              <td align="left">4</td>
              <td align="left">Refusal (REF)</td>
              <td align="left">
                <xref target="ref"/></td>
            </tr>
            <tr>
              <td align="left">5</td>
              <td align="left">Replenishing (REP)</td>
              <td align="left">
                <xref target="rep"/></td>
            </tr>
            <tr>
              <td align="left">6</td>
              <td align="left">Heartbeat (HBT)</td>
              <td align="left">
                <xref target="hbt"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="receiving-packets">
        <name>Receiving Protocol Packets</name>
        <t>Whenever a protocol packet is received by the Rank node it is inserted in a specific depositing queue from the communication layer it was captured from. Depending on the communication level, several header considerations will be taken into consideration before reaching Rank validation. For instance, in order for the packet to be accepted at IP level, it must pass a number of tests, such as verifying if the IP checksum is correct; and verifying if the packet’s IP destination address is the IP address of the receiving interface. Nonetheless, Rank must have an extension so to prevent current operative systems to discard ingress packets for not having a IANA-valid IP protocol identifier (0x9B).</t>
        <t>Next, the Rank packet header is verified. The fields specified in the header must match those configured for the receiving interface. If they do not, the packet should be discarded:</t>
        <ul spacing="normal">
          <li>
            <t>The version number field must specify protocol version 1 (value 0, since this value is written as decremented by one unit).</t>
          </li>
          <li>
            <t>The type field must match with one of the types detailed in <xref target="_table-packet-types"/>.</t>
          </li>
          <li>
            <t>The reserved field must specify 0.</t>
          </li>
          <li>
            <t>The session identifier must not have a timestamp for before or after 10 minutes than the current system clock.</t>
          </li>
        </ul>
      </section>
      <section anchor="enabling-handler">
        <name>Enabling a Handler for a Session</name>
        <t>When a message is received by a Dispatcher in a Rank instance, if it passes the first validation steps as described in <xref target="receiving-packets"/>, then the packet will be enqueued in a depoisiting queue that is managed then by the Process entity. On such a reception, a proper algorithm will sort the type of packet but first will check if the session identifier is known and, in case it is, will verify if its last known state.</t>
        <t>The first question that is applied is if the session identifier is known. If the identifier is not known, meaning that no entry exist in the Store with such session identifier as key, then a Handler must be created with this session identifier. As such, a new session identifier must be created and then the Handler must be saved in the Store, with Ready status. After this the Handler must be executed and its processing must parse and process the received message.</t>
        <t>The Handler may only have one state at a time. The various states that a Handler might have are document in this section. <xref target="fig-handler-state"/> shows the graph of the Handler state changes. The arcs of the graph are labelled with the event causing the state change. These events are documented in <xref target="handler-states"/>. The Handler state machine is described in more detail in <xref target="handler-fsm"/>.</t>
        <figure anchor="fig-handler-state">
          <name>The Handler State finite state machine (FSM) diagram.</name>
          <artwork type="ascii-art"><![CDATA[
                             ┌─────────┐
         ┌──────EAR Received─┤  Ready  ├─MAR Received───────┐
         │                   └────┬────┘                    │
         │                      RxAPI                       │
         │                        │                         │
         │                        │                         │
 ┌───────▼───────┐        ┌───────▼──────┐           ┌──────▼──────┐
 │   Assessing   │   ┌────┤  Presenting  ├─────┐     │   Auction   │
 └──┬────┬────┬──┘   │    └───────┬──────┘   MAR   ┌─┤   Bidding   │
   REF   │  MAR Sent │         MAR Sent      Sent  │ └──────┬──────┘
   Sent  │    └─┐   EAR           │            │  BID Sent  │
    │   EAR     │   Sent  ┌───────┼────────────┼───┘        │
    │   Sent    │    │    │       │            │            │
    │    │   ┌──▼────▼────▼─┐     │     ┌──────▼──────┐   0-BID
    │    └───▶ Pre-Reserved ◀─────┼─EAR │   Auction   │    Sent
    │        └──┬────┬────┬─┘     │ Sent┤   Waiting   │     │
    │    ┌──────┘    │    │       │     └──────┬──────┘     │
    │    │         ACC    EAR     │            │            │
    │    │    Received    Received│  ┌REP Sent─┘            │
    │    │           │    │       │  │                      │
    │    │   ┌───────▼────▼─┐     │  │  ┌─────────────┐     │
    │    │   │   Reserved   ├─*1──┼──┼──▶ Replenished │     │
    │    │   └───────┬──────┘     │  │  └──────┬──────┘     │
    │    │           └REF ─────┐  │  │        REF           │
    │   REF           Received │  │  │      Received        │
    │   Received               │  │  │         │            │
    │    └───────────────────▶─▼──▼──▼─◀───────┘            │
    └────────────────────────▶ Closed  ◀────────────────────┘
                             └─────────┘
     *1 Received REP
]]></artwork>
        </figure>
        <t>In the case the session identifier is already known, the last known state of its corresponding handler must be checked, since only some state values are expected to be resumed. If such a session identifier’s handler is currently running (this can only happen in the case in which a node is in Auction Waiting state and has already received a suitability value), then a new suitability value will be saved in the Handler’s bid set and the message is then discarded. Otherwise, if the Handler is not currently running, then further processing should only be considered if the last state of the Handler is of Pre-Reserved, Reserved, Auction Waiting, Replenishing, or Ready. If so, the Handler should be retrieved from the Store, resumed, and the new message should be delivered to it for further processing. In any other state, the message should be discarded and Process should wait for a new incoming message.</t>
        <t>Right after executing for the first time or resuming a Handler, as the incoming message is delivered for processing to the handler, a selective section of the algorithm is chosen to be performed according to the message type. This selection is described in the following sections, per packet type, as pointed by <xref target="_table-packet-types"/>.</t>
      </section>
      <section anchor="handler-states">
        <name>Events Causing Handler State Changes</name>
        <t>State changes can be effected by a number of events. These events are pictured as the labelled arcs in <xref target="fig-handler-state"/>. The label definitions are listed below. For a detailed explanation of the effect of these events on Rank protocol operation, consult <xref target="handler-fsm"/>.</t>
        <dl>
          <dt>RxAPI</dt>
          <dd>
            <t>Request Reservation via API.</t>
          </dd>
          <dt>X Received</dt>
          <dd>
            <t>X message was received through an ingress interface.</t>
          </dd>
          <dt>X Sent</dt>
          <dd>
            <t>X message was sent through an egress interface.</t>
          </dd>
          <dt>0-BID Sent</dt>
          <dd>
            <t>A BID message with a zero-value suitability value was sent through an egress interface. This happens to transmit the information that the current node does not have capability to perform the received admission request.</t>
          </dd>
        </dl>
      </section>
      <section anchor="handler-fsm">
        <name>The Handler State Machine</name>
        <t>A detailed description of the handler state change follows. Each state change is invoked by an event (<xref target="handler-states"/>). This event may produce different effects, depending on the current state of the handler. For this reason, the state machine below is organized by current handler state and received event. Each entry in the state machine described the resulting new handler state and the required set of additional actions.</t>
        <artwork><![CDATA[
 State(s):      Ready

    Event:      EAR Received

New state:      Assessing

   Action:      The receiving node was waiting on a Rank packet or request, and an EAR message was received as sent by another Rank node. This induces the transition between the Ready state to the Assessing state.

 State(s):      Ready

    Event:      RxAPI

New state:      Presenting

   Action:      The receiving node was waiting on a Rank packet or request, and a request incoming from the Rank API was received, as sent by a another local operating system’s process. This induces the transition between the Ready state to the Presenting state.

 State(s):      Ready

    Event:      MAR Received

New state:      Auction Bidding

   Action:      The receiving node was waiting on a Rank packet or request, and a MAR message was received as sent by another Rank node. As this message does not translates itself as a propagation of a Rank session, rather an evaluation of this node’s capabilities of performing the admission request, the current node assesses its capabilities and prepares itself to send the resulting suitability value back to sender.

 State(s):      Assessing

    Event:      REF Sent

New state:      Closed

   Action:      The current node where the Handler is being executed assessed its own capabilities of performing the admission request and it estimated that it is not capable to support the requested resources. For this reason, a REF message is sent to declare such result.

 State(s):      Assessing

    Event:      EAR Sent

New state:      Pre-reserved

   Action:      The current node where the Handler is being executed assessed its own capabilities of performing the admission request and it estimated that it is capable to support the requested resources. On assessing the connections it had to proceed with this request in line to the listener, it found that there is only a single path available, thus it sent an EAR message to it. With this, the Handler pre-reserved the requested resources.

 State(s):      Assessing

    Event:      MAR Sent

New state:      Pre-reserved

   Action:      The current node where the Handler is being executed assessed its own capabilities of performing the admission request and it estimated that it is capable to support the requested resources. On assessing the connections it had to proceed with this request in line to the listener, it found that there are more than one path available, thus it sent an MAR message to each of the alternatives. With this, the Handler pre-reserved the requested resources in the current node.

 State(s):      Presenting

    Event:      EAR Sent

New state:      Pre-reserved

   Action:      The current node where the Handler is being executed assessed its own capabilities of performing the admission request and it estimated that it is capable to support the requested resources. On assessing the connections it had to proceed with this request in line to the listener, it found that there is only a single path available, thus it sent an EAR message to it. With this, the Handler pre-reserved the requested resources.

 State(s):      Presenting

    Event:      REF Sent

New state:      Closed

   Action:      The current node where the Handler is being executed assessed its own capabilities of performing the admission request and it estimated that it is not capable to support the requested resources. For this reason, a REF message is sent to declare such result.

 State(s):      Presenting

    Event:      MAR Sent

New state:      Auction Waiting

   Action:      The current node where the Handler is being executed assessed its own capabilities of performing the admission request and it estimated that it is capable to support the requested resources. On assessing the connections it had to proceed with this request in line to the listener, it found that there are more than one path available, thus it sent an MAR message to each of the alternatives. With this, the inner reservation must change state to pre-reserved, while the Handler state switches to Auction Waiting.

 State(s):      Auction Bidding

    Event:      BID Sent

New state:      Pre-reserved

   Action:      The current node where the Handler is being executed was requested to estimate its capability of performing an admission request included in a MAR message. The outcome of this estimation—a suitability value—must now be sent over a BID message towards the origin of the MAR message.

 State(s):      Auction Bidding

    Event:      0-BID Sent

New state:      Closed

   Action:      The current node was requested to estimate its capability of performing an admission request included in a previous MAR message. The outcome of this estimation revealed that this Rank node cannot support the admission request and, as such, a null value (zero) must be sent over a BID message to the origin of the MAR message.

 State(s):      Pre-reserved

    Event:      REF Received

New state:      Closed

   Action:      A REF message was received in an ingress interface. This message must enable the deletion of the subject session and, as such, the current Handler must close its operation.

 State(s):      Pre-reserved

    Event:      ACC Received

New state:      Reserved

   Action:      An acceptation message was received meaning that a given pre-reservation state of an Handler may now transition into a reserved state.

 State(s):      Pre-reserved

    Event:      EAR Received

New state:      Reserved

   Action:      An EAR message set after the reception of a MAR message requesting a suitability value was received, meaning that a given pre-reservation state of an Handler may now transition into a reserved state. This EAR message does not contain any list of requirements, as this was already sent in the previous MAR message.

 State(s):      Auction Waiting

    Event:      EAR Sent

New state:      Pre-reserved

   Action:      The Handler has previously estimated its own suitability value regarding its session admission request and it reached a non-nullable value, admitting the support of the requested resources. The inner Reservation, at this Handler state, is already in pre-reserved state.

 State(s):      Auction Waiting

    Event:      REF Sent

New state:      Closed

   Action:      The current node reached a timeout on waiting for suitability values. This means that the session cannot proceed its processing and, thus, this Handler must close execution.

 State(s):      Reserved

    Event:      REP Received

New state:      Replenishing

   Action:      The current node has received a replenishing message to delete any resource reservation done within the context of this session.

 State(s):      Replenishing

    Event:      REF Received

New state:      Closed

   Action:      The current node received a refusal message to cancel the Handler session. This Handler must close its execution.

 State(s):      Reserved

    Event:      REF Received

New state:      Closed

   Action:      The current node received a refusal message to cancel the Handler session. This Handler must close its execution.
]]></artwork>
      </section>
      <section anchor="ear">
        <name>Handler Process on EAR Message Received</name>
        <t>The reception of an EAR message is the most common execution segment of all the message parse and exchange algorithm in the Rank protocol operation. As soon as the Handler enters this execution line its state must change to one of the following.</t>
        <ul spacing="normal">
          <li>
            <t>Update state to Presenting if the current node is the beginner of a Rank session (the message may be coming from the API).</t>
          </li>
          <li>
            <t>Update state to Assessing if the current node is just an intermediate node between a talker and a listener.</t>
          </li>
        </ul>
        <t>Having switched the state, then the handler must verify if the EAR message have reached its listener or not. In such a case, the node must self-assess its own capabilities of performing the admission request and, if such answer is also positive, then the affected resources must be reserved. With this line of operation, an ACC message must be sent back and the handler state must change to Reserved, and then suspend execution.</t>
        <t>If the current handler is not running in the matching listener, then it is required, first, to check if there is any suitability value already saved for this given session. If so, that means that this EAR message is only serving to confirm a path that, previously was checked by having MAR and BID messages sent back and forth, and now we should skip to get new connections that lead the current node to the next ones in line with the targeted listener.</t>
        <t>Considering that there is no current suitability values stored for this current session, then the node must self-assess on its own capabilities to perform the admission request contained in the EAR message. Both in this scenario and in the latter one, where the procedure is equivalent, if there is no capability to perform the admission request, then the processing of this session must terminate here and a REF message should be sent back to inform of that event, switching the state of the Handler to Closed, just before terminating the thread.</t>
        <t>If the current node is able to support the admission request that was described in the received EAR message, then a pre-reservation of such resources must be done. Here, we now reach the same step as before if there was a suitability value already expecting us in the Handler’s data structure: we need to proceed to verify which are the candidate connections from this current node to the listener.</t>
        <t>Three possibilities can happen in this situation: there is a single connection path to the listener; there are multiple connection paths to the listener; or there is none. In the latter case the procedure is simple, as a REF message must be sent back to notify that a dead-end was reached and, thus, the request could not be completed. In this situation the handler switches its state to Closed and then terminates its thread.</t>
        <t>In the case of existing a single connection path towards the listener, then a new cloned EAR message must be sent over that connection. As the message is sent, the handler’s state must switch to Pre-Reserved and, internally to the Handler, the information about which was the message source node must be saved as a reservation past node.</t>
        <t>In the case of existing more than a single connection path towards the listener, the procedure is similar to the single path case, but differing on the type of message sent, and the number of sent messages as well. In this case, a MAR message must be sent to each candidate next node in line towards the targeted listener. As soon as the MAR messages are sent, the Handler must switch is state to one of the following states. With this state update, and internally to the Handler, the information about which was the message source node must be saved as a reservation past node.</t>
        <ul spacing="normal">
          <li>
            <t>Update state to Pre-Reserved if the last state was Assessing.</t>
          </li>
          <li>
            <t>Update state to Auction-Waiting if the last state was Presenting.</t>
          </li>
        </ul>
        <t>In both cases of single and multiple targeting, a parallel execution must be started in the end of this procedure, whilst the Handler thread is suspended waiting for new future actions: a timeout action is spawned so that, if no action happens on timeout, the actions done by the Handler are automatically subject to a rollback action. The management of the timeouts and such asynchronous calls must be the responsibility of the Timeout Handler component. In these cases, different timeout values must be considered for waiting for answer on EAR and MAR messages. When a timeout is reached and the Handler’s actions are subject to rollback, its state must also change to Closed before terminating the main thread.</t>
      </section>
      <section anchor="mar">
        <name>Handler Process on MAR Message Received</name>
        <t>When a MAR message is received in an ingress interface where Rank is capturing data, the Handler must start this set of steps for processing this type of messages. As soon as the Handler is created to handle this new MAR message, the Handler state must change to Auction Bidding.</t>
        <t>After switching states, a self-assessment is required, so to estimate the suitability value that will represent the current capability of the Rank node to perform the admission request that is in place within the MAR message, by its list of requirements and priority. From this assessment two values are relevant: if the suitability value is zero, that means that the current node is unable to perform the admission request; otherwise, the node is able to perform and, as such further steps are required.</t>
        <t>If the node assesses as unable to perform the admission request, then a BID message must be sent back with suitability value zero, and the Handler’s state must change to Closed before terminating itself.</t>
        <t>If the node is able to perform the admission request, then a BID message with the estimated suitability value must be sent back. After this step, the state must be changed to Pre-Reserved, and the pre-reservation must be performed, of the affected resources in the current node. In this situation, again, a parallel execution must be done to coordinate a timeout action, controlled by the Timeout Handler: if no action is taken (no answer back after sending BID message), then the Handler’s actions must be subject to rollback.</t>
      </section>
      <section anchor="bid">
        <name>Handler Process on BID Message Received</name>
        <t>When a BID packet is received by a Handler, the Handler must verify if its state currently matches with Auction Waiting. If it does not match, then the Handler must update its state to Closed and then terminate its thread. Otherwise, a waiting time for all bids must start, in which each suitability value received from candidates are received and collected within the Handler data structure (Bid Set). This action occurs during a time slot bound by a Auction timeout, managed by the Timeout Handler: when the timeout is reached, the node must not waiting for any other suitability value. Consequently, if all candidates answer back before timeout being reached, the processing must continue.</t>
        <t>With all suitability values duly collected in the Bid Set, the Handler must now check for its cardinal, leaving three alternative execution paths: an execution path if there is no suitability values in the set; an execution path if there is a single unique maximum suitability value in the set; or an execution path if there are several equal maximum suitability values in the set.</t>
        <t>The first alternative (if there is no suitability value in the set) is straightforward to handle: in this case the Handler must cease its functions, sending a REF message back to the original node source, and switch its state to Closed beforehand.</t>
        <t>The second alternative (if there is a single and unique maximum value in the Bid Set) requires the Handler to prepare an EAR message to send to the node that had estimated such suitability value. In such a case this EAR message is sent to the node that replied with a BID message carrying this suitability value, and this message is to be sent with an empty payload, as the next node already received and assessed its own capability of performing the admission request.</t>
        <t>The third alternative (if there are multiple equal maximum suitability values within the Bid Set) requires the session identifier to be regenerated and translated in the Translation Table. In the case the Rank session gets in this stage, this means that replicas must be propagated from this point on, so that if any of these future sessions get refused, then only such branch is deleted. For this reason, a new ULID (hereby denoted by ULID<em>) must be generated for each selected suitability value and the pair [ULID, ULID</em>] must be saved in the Translation Table. With this, new EAR messages must be sent to each suitability value estimator with ULID* with an empty payload.</t>
        <t>After sending the EAR messages, a timeout for receiving answers must be started by the Timeout Handler. On timeout, the Handler actions must be rollback and the Handler state must switch to Closed and have its thread terminated.</t>
      </section>
      <section anchor="acc">
        <name>Handler Process on ACC Message Received</name>
        <t>Receiving an ACC packet means that the current Handler processing this content is now in a node that already has a pre-reservation for a held session. As soon as the processing steps into this stage, then the Handler must automatically switch the pre-reservation to a reservation, by swtiching the Reservation state (the lifecycle of a reservation is described in detail in <xref target="reservation-lifecycle"/>).</t>
        <t>As this communication is already being done from the listener back to the talker, now we need to unravel if the session identifiers that we are receiving are originals or replicas that were once generated at this node, when the request first arrived here through an EAR/MAR packet. To do so we need to check if the session identifier exists in the Translation Table.</t>
        <t>If the session identifier exists in the Translation Table, then a new ACC packet must be sent to the next node in line to the talker, with the original session identified (hereby called ULID, differing from the replica ULID*). On this event, the Handler state must switch to Reserved and, then, the current node (accepting node) must be added to the Handler’s data structure as next node in reservation. With this action, the Handler’s thread is suspended.</t>
        <t>If the session identifier does not exist in the Translation Table we need to check if the current node is the origin node for this session.</t>
        <t>If this node is the origin of this session, then the result (error code) of the reservation request must be sent back to the API, where the request was first triggered from: with this action, the Handler state must switch to Reserved and, then, the current node (accepting node) must be added to the Handler’s data structure as next node in reservation, and then the threading mechanism is suspended.</t>
        <t>If this node is not the origin of this session, then an ACC packet must be sent over the next node in line to the talker. With this action, the Handler state must switch to Reserved and, then, the current node (accepting node) must be added to the Handler’s data structure as next node in reservation, and then the threading mechanism is suspended.</t>
      </section>
      <section anchor="ref">
        <name>Handler Process on REF Message Received</name>
        <t>Receiving a REF packet means that the current Handler processing this content is now in a node might have a pre-reservation. As soon as the processing steps into this stage, if such a scenario applies, then the pre-reservation must be revoked with the given session identifier from the REF packet. In this case, if there was a pre-reservation in place, then the Reservation itself must transition its state to Cleared (the lifecycle of a reservation is described in detail in <xref target="reservation-lifecycle"/>).</t>
        <t>As this communication is already being done from the listener back to the talker, now we need to unravel if the session identifiers that we are receiving are originals or replicas that were once generated at this node, when the request first arrived here through an EAR/MAR packet. To do so we need to check if the session identifier exists in the Translation Table.</t>
        <t>If the session identifier exists in the Translation Table, then the replica session identifier (hereby denoted as ULID*) must be deleted from the Translation Table. If the Translation Table, with this action, is now clear, then the Handler’s state switches to Closed, without no further action, thus suspending the thread. If the Translation Table is not empty after this action, then a REF message must be sent to the next node in line with the talker. This action must be followed by the switching of the Handler’s state to Closed, and then its thread must be suspended.</t>
        <t>If the session identifier does not exist in the Translation Table we need to check if the current node is the origin node for this session.</t>
        <t>If this node is the origin of this session, then the result (error code) of the reservation request must be sent back to the API, where the request was first triggered from: with this action, the Handler state must switch to Closed and then the threading mechanism is suspended.</t>
        <t>If this node is not the origin of this session, then a REF message must be sent to the next node in line with the talker. This action must be followed by the switching of the Handler’s state to Closed, and then its thread must be suspended.</t>
      </section>
      <section anchor="rep">
        <name>Handler Process on REP Message Received</name>
        <t>When receiving a REP message, the Handler must switch its state to Replenishing. After this action, the Handler must check if the current node is the session’s listener or not. If the current node is the session’s listener, then a REF packet must be sent to the next node in line to the talker, and then the Handler’s state must change to Closed and the thread is terminated.</t>
        <t>In the scenario that the current node is not the session’s listener, then, if the current session is present in the Store of the current node, then a REP packet must be sent to the next node in line to the listener.</t>
        <t>In this situation, the execution must be asynchronously set so that the current thread is suspended and another is spawn handling a timeout for the REP answer. The Timeout Handler must spawn this timeout thread that, if the time arrives with no REP answer (a REF message for the same session), then it must check if the current session identifier is in the Translation Table.</t>
        <t>If the session identifier is in the Translation Table, then the Handler’s state must switch to Closed and such a identifier must be deleted from the Store, sending a REF message back (to the next node in line to the talker) with the original session identifier that was found matching in the Translation Table. On this change, the Handler with the original session identifier must also switch its state to Closed.</t>
        <t>If the session identifier is not in the Translation Table, then a REF message must be sent to the next node in line with the talker, switching the state to Closing and terminating the thread.</t>
      </section>
      <section anchor="reservation-lifecycle">
        <name>Lifecycle of a Reservation</name>
        <figure anchor="fig-reservation-state">
          <name>The Reservation State finite state machine (FSM) diagram.</name>
          <artwork type="ascii-art"><![CDATA[
                              ┌─────────┐
┌────unconsider()─────────────┤ Created │
│                             └─┬──┬──┬─┘
│                               │  │  │
│         ┌wait_for_sacrifice()─┘  │  └────────────reserve()─┐
│         │                        │                         │
│         │                        │                         │
│ ┌───────▼───────┐          pre_reserve()                   │
│ │   Virtually   │                │                         │
│ │ Pre-Reserved  │                │                         │
│ └──┬────┬───────┘                │                         │
│    │    │                        │   ┌─mark_pre_reserved()─┼────┐
│    │    │                        │   │                     │    │
│    │    │                ┌───────▼───▼──┐                  │    │
│    │    │                │ Pre-Reserved ├─────────────┐    │    │
│    │    │                └───────┬──────┘             │    │    │
│    │    │                        │         mark_reserved() │    │
│    │    │                   replenish()               │    │    │
│    │    │                        │                 ┌──▼────▼────┴─┐
│    │    └─reserve()──────────────┼─────────────────▶   Reserved   │
│    │                             │                 └───────┬──────┘
│    │                             │                         │
│    │                             │                    replenish()
│    │                             │                         │
│    └─replenish()────────────▶────▼────┐                    │
└─────────────────────────────▶ Cleared ◀────────────────────┘
                              └─────────┘
]]></artwork>
        </figure>
        <t>State changes can be effected by a number of events. These events are pictured as the labelled arcs in <xref target="fig-reservation-state"/>. The label definitions are listed below. For a detailed explanation of the effect of these events on Rank protocol operation, consult <xref target="reservation-fsm"/>.</t>
        <dl>
          <dt>Wait for Sacrifice</dt>
          <dd>
            <t>As the current Rank node is saturated (cannot openly receive any other resource reservation for the set of resources in its admission request), the node will sacrifice another reservation that might create a vacant space for it, if it has a lower priority than the more recent one.</t>
          </dd>
          <dt>Unconsider</dt>
          <dd>
            <t>A reservation is deleted as soon as it is created.</t>
          </dd>
          <dt>Reserve</dt>
          <dd>
            <t>A reservation is made effective in the system.</t>
          </dd>
          <dt>Pre-Reserve</dt>
          <dd>
            <t>A reservation is prepared (temporarily saved) in the system.</t>
          </dd>
          <dt>Replenish</dt>
          <dd>
            <t>A reservation is cleared from the system.</t>
          </dd>
          <dt>Mark Reserved</dt>
          <dd>
            <t>Promote a pre-reservation to a reservation.</t>
          </dd>
          <dt>Mark Pre-Reserved</dt>
          <dd>
            <t>Demote a reservation to a pre-reservation. This can only happens in internal/debug transactions or in state switchings such as a consequence from the virtually pre-reservation state handling.</t>
          </dd>
        </dl>
      </section>
      <section anchor="reservation-fsm">
        <name>The Reservation State Machine</name>
        <t>A detailed description of the Reservation state change follows. Each state change is invoked by an event (<xref target="reservation-lifecycle"/>). This event may produce different effects, depending on the current state of the Reservation. For this reason, the state machine below is organized by current Reservation state and received event. Each entry in the state machine described the resulting new Reservation state and the required set of additional actions.</t>
        <artwork><![CDATA[
 State(s):      Created

    Event:      Unconsider

New state:      Cleared

   Action:      A reservation entity was created but is intended to be discarded.

 State(s):      Created

    Event:      Wait for Sacrifice

New state:      Virtually Pre-reserved

   Action:      A reservation was created but, currently, the node is saturated for a given admission request. But this request is still admissable since there is another, on system, that has a lower priority and will be replenished.

 State(s):      Created

    Event:      Pre-reserve

New state:      Pre-reserved

   Action:      A reservation was created and, while it waits for an answer from the listener, it marks itself as pre-reserved.

 State(s):      Created

    Event:      Reserve

New state:      Reserved

   Action:      A reservation was created and, as it is in the listener of a session and the current node is capable of performing the admission request, then the reservation swtiches to Reserved state.

 State(s):      Virtually Pre-reserved

    Event:      Replenish

New state:      Cleared

   Action:      A reservation that was marked as virtually pre-reserved was cancelled out.

 State(s):      Virtually Pre-reserved

    Event:      Reserve

New state:      Reserved

   Action:      A reservation that was marked as virtually pre-reserved was made effective after a confirmation of all nodes in the Rank session.

 State(s):      Pre-reserved

    Event:      Mark reserved

New state:      Reserved

   Action:      A reservation that was marked as pre-reserved was made effective after a confirmation of all nodes in the Rank session.

 State(s):      Pre-reserved

    Event:      Replenish

New state:      Cleared

   Action:      A reservation that was marked as pre-reserved was cancelled out.

 State(s):      Reserved

    Event:      Mark Pre-reserved

New state:      Pre-reserved

   Action:      For internal object initialization, a reservation transitioned from a reserved into pre-reserved state.

 State(s):      Reserved

    Event:      Replenish

New state:      Cleared

   Action:      A reservation was cleared out.
]]></artwork>
      </section>
      <section anchor="hbt">
        <name>Heartbeat (HBT) Message Exchange</name>
        <t>As it is stated until this point, the Rank protocol lack some reliability features. This is an issue in the way that it can void guarantees that Rank attempts to ensure to clients, in terms of resource allocation. For instance, if a link fails between two nodes that had an already reserved path, the current solution of Rank is not capable to proceed with a solution, and all the nodes affected by such session will be, from that moment on, in a dirty state.</t>
        <t>This type of issue is a situation to which protocols such as the RSVP <xref target="RFC2205"/> are able to assist, since they are constantly dispatching a message with the reservation request, periodically, unil it is no longer needed. Rank, on the other hand, as a stateful protocol, does not require complete messages such as EAR messages to be periodically sent between nodes, as this would create a large and dispensable overhead, as well as it would introduce a new feature to a same message type.</t>
        <t>For this reason, the heartbeat message (HBT) was created, with a similar structure to the ACC and REF messages, but with a different behavior. For each new HBT message, a new ULID is generated with the same entropy value, but differing on its timestamp. When created, the HBT is always sent to the next node in line towards the listener, with a pre-defined periodicity Ti (or given as a requiremement in the list of requirements that is part of the original admission request).</t>
        <t>With the periodically created HBT being sent in each node towards their next in line, it is expected that each receiving node Ni may also predict the time instant in which a given message is to be received. This behavior will not only allow each node to report on the reliability of a given connection to the listener, as it also may be used to allow an easier method to get metrics for the proximity criterion of the self-assessment algorithm that each node performs when receiveing an admission request.</t>
        <t>The handling of this message cannot be compared to others, since it is not part of a creation or a deletion of a Rank session, but rather maintains a session. Alternatively to other message processing, a new entity must be introduced to handle these messages and control the state of each reservation. For this reason, a Reservations Watchdog is able to keep up with time windows for the reception of next HBT messages, for each known session with reservation at each node.</t>
        <t>When a HBT message is received, the first action to perform is to check if the given ULID entropy is known at the receiving node. Considering that the ULID entropy is known, then the message arrival time is captured (as Ta), and the predicted time (Tp) is estimated from the timestamp in the ULID, Ti, and the periodicity T, as Tp = Ti + T. From here, the the delta between the prediction and the arrival time Ta - Tp is estimated, whose value will then be confronted with two threshold values: OptimalTime that defines the limit time for the best time frame to receive a HBT message, and DangerousLimitTime, that defines the limit which, if passed, the link must be considered broken.</t>
        <t>The time frame to which a message arrives, determines if the link is still synchronous or not:</t>
        <ul spacing="normal">
          <li>
            <t>if the time frame in which the HBT arrived is after DangerousLimitTime, then the reservation will be considered Dead, and a REP message must be sent to replenish the session.</t>
          </li>
          <li>
            <t>if the HBT is received within the time frame limited by DangerousLimitTime, then a new HBT message should be sent to the next node.</t>
          </li>
        </ul>
        <t>The sending of a new message is also done according to a schedule. On sending these messages, as there is only one Reservations Watchdog for all reservations, a schedule, hereby called Slots, will register the instant on a cycle, It, in which a given session will have its HBT message sent. Figure 3 basically depicts a schedule being executed, in which, per instant, each record in Slots is checked and a message is sent if an element exists in Slots[It].</t>
        <figure anchor="fig-hbt-schedule">
          <name>Sending of a HBT message.</name>
          <artwork type="ascii-art"><![CDATA[
┌────────────────┐
│ Initialization ◀────────────────────────────────────────────┐
└────────┬───────┘                                            │
         │                                                    │
         │                                                    │
         ▼                                                    │
         Λ                                                    │
        ╱ ╲             ┌────────────┐          ┌────────┐    │
       is the           │send HBT to │          │ update │    │
     session in  ───────▶next node in├──────────▶ It, in ├───▶│
     Slots[It]?         │reservation │          │  time  │    │
        ╲ ╱             └────────────┘          └────────┘    │
         V                                                    │
         │                                                    │
         │                                                    │
   ┌─────▼────┐                                               │
   │update It,│                                               │
   │ in time  ├───────────────────────────────────────────────┘
   └──────────┘
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="requirements-spec">
      <name>List of Requirements Specification</name>
      <t>An admission request is a structure that is comprised of a priority and a list of requirements that is being requested. In this section the specification for such requirements is described.</t>
      <t>The description of a requirement may be similar to what one would use to characterize a resource, independently of its type. With the joint effort from standardization entities such as IETF, IEEE, and IANA, and also with the help of some vendors, a normalized interface for resource configuration was created, in which resource description files were also normalized. This interface is NETCONF <xref target="RFC6241"/>, and the description files are YANG modules <xref target="RFC7950"/>.</t>
      <section anchor="doc-composition">
        <name>The Composition of a Document</name>
        <t>A YANG module, although it can represent a resource configuration, cannot hold the current information regarding a configuration: it is a schema. Being a shema, it means that it only standardizes how a given resource should be as input, and, aside, we need to hold a document file able to embody such a skeleton. From this conclusion, there are, at least, two possible alternatives for the actual document: as defined by the standard, a document could be specified as XML <xref target="RFC7950"/> or as JSON <xref target="RFC7951"/>.</t>
        <t>Considering the medium in which we want to use a document file to transmit data from one part to another, the JSON format defines a smaller footprint specification, enabling fast transmission, being better suited for data serialization, rather than XML, which is more convenient for data interchangeability.</t>
        <t>Using JSON to describe our content as defined by the YANG modules schemas, unfortunately, does not provide the entire set of features XML can supply, but all the functionalities we require are cross-compatible with JSON.</t>
        <t>Still, the JSON format does not deliver the capability for serialization and deserialization. To serialize a JSON document to, later, insert it within the payload of an EAR or MAR message, the marshalling method should be language-independent as the JSON file itself. To solve this issue, we have adopted CBOR as a data format whose design goals include the possibility of extermely small code size, fairly small message size, and extensibility without the need for version negotiation <xref target="RFC8949"/>.</t>
        <t>This representation allows us to pass a JSON object from its stringified form to a marshalled byte stream which is able to be inserted in the payload field of both EAR and MAR packets. In summary, from a requirement to a payload field of a Rank packet able to carry a list of requirements, we need to perform the following steps:</t>
        <ol spacing="normal" type="1"><li>
            <t>Identify the YANG module (schema) tuned to represent the given requirement.</t>
          </li>
          <li>
            <t>Create the JSON object, compliant to the chosen YANG module, with the given requirement specifications.</t>
          </li>
          <li>
            <t>Marshal the JSON object as a CBOR object in a serialized morph.</t>
          </li>
          <li>
            <t>Place the serialized CBOR object in position within the payload of a Rank packet.</t>
          </li>
        </ol>
      </section>
      <section anchor="marshalling-of-requirements">
        <name>Marshalling of Requirements</name>
        <t><xref target="fig-lifecycle-req"/> depicts the lifecycle of a requirement from its packing into a Rank packet until its unpacking as a Rank node receives it. In this figure, Rank handles the context of a single requirement, not a list of requirements.</t>
        <figure anchor="fig-lifecycle-req">
          <name>Lifecycle of a requirement from packing to unpacking in a Rank EAR/MAR message. Legend: (A) a requirement is stated for admission request; (B) with a YANG module identified, a requirement is written as JSON; (C) from JSON, the object is serialized into CBOR; (D) the serialized CBOR is placed as a message’s payload; (E) the serialized CBOR is retrieved from the message; (F) from CBOR, the object is deserialized into JSON; (G) if the content is YANG valid, the requirement is parsed; (H) the requirement is assessed in the receiving node.</name>
          <artwork type="ascii-art"><![CDATA[
   start
     │
     ▼                "cpu-cores": {
                        "value": 2
2 CPU cores           }                      1010010..01

    (A) ─────────────────▶ (B) ────────────────▶ (C)
     ▲                                            │
         marshalling phase                        │
     │                           ┌───── (D) ──────┘
                                 │
     │                           │
       ┌───┬─┬──┬─┬──────────────▼──────────────┐
     │ │   │ │  │ │█████████████████████████████│
       └───┴─┴──┴─┴──────────────┬──────────────┘
     │  EAR/MAR                  │
                                 │
     │                           └───── (E) ──────┐
         unmarshalling phase                      │
     │                                            ▼
    (H) ◀───────────────── (G) ◀──────────────── (F)

2 CPU cores           "cpu-cores": {         1010010..01
                        "value": 2
                      }
]]></artwork>
        </figure>
        <t>To handle with the multiplicity of requirements as in the list of requirements that is part of an admission request, one can create a JSON object earlier, whose content is an array with the correctly set order of requirements. As such, a list of requirements can be characterized as a JSON object carrying a variety of requirements which, by themselves, are JSON objects representing single requirements whilst being fully compliant with their matching YANG module, as depicted in <xref target="fig-marshalled-req"/>.</t>
        <figure anchor="fig-marshalled-req">
          <name>Marshalled list of requirements.</name>
          <artwork type="ascii-art"><![CDATA[
(A)  I need 2 cores of CPU, a given CBS configuration, and a minimum
                     network bandwidth of 400 Mbps.

           │                        │                       │
           ▼                        ▼                       ▼
                  {
                    [
                      {"cpu-cores": {"value": 2}}},
(B)                   {"cbs": {...}},
                      {"bandwidth": {"value": 400}}}
                    ]
                  }
                                    │
                                    ▼
(C) 01101010101001010001001010100111100110101101010100101001010101010
                                    │
                                    └───────┐
                                            │
    ┌───┬─┬──┬─┬────────────────────────────▼────────────────────────┐
(D) │   │ │  │ │█████████████████████████████████████████████████████│
    └───┴─┴──┴─┴─────────────────────────────────────────────────────┘
     EAR/MAR
]]></artwork>
        </figure>
        <t>Regarding the ordered key points in the enumeration before, considering now a complete list of requirements, just before serializing each JSON object requirement, we can position each item into an array within a new JSON object which must be the one, then, subject to the serialization to CBOR.</t>
        <t>From the perspective of a node receiving a message containing a marshalled list of requirements as a payload, the procedures to unpack are different. For the effect, let us consider that we are working under the context of a Rank node that happens to receive an EAR message. As we are parsing the EAR message, the contents of its payload are retrieved and, now, require to be parsed.</t>
        <t>As such, we must reverse the steps on how to marshal a list of requirements, but we must take into account the possibility of the received byte stream to be invalid. A received message cannot be considered as being well-formed or coming from a reliable source. It is critical to analyze the entire composition of each requirement to proceed with the handling of such an admission request.</t>
        <t>The byte stream must be deserialized from its CBOR representation and translated into its JSON counterpart. Here must be able to foresee an array with a collection of requirements, each one disposed in the same order as its sender requested it: this is the list of requirements. From this step, we now need to analyze the requirements, one by one.</t>
        <t>The analysis of each requirement is a critical task. So it happens that as each requirement must be compliant with a specific way of characterizing an admission request, each one must comply with the schema defined in ta surrogate YANG module that meticulously defines such criteria. FOr this matter (an here is where the linearly reverse procedure of marshalling fails), for each requirement in the list, the requirement type must be identified. Then the JSON must be validated against the matching YANG module that defines its characteristics.</t>
        <t>As one verify the JSON requirement against the YANG module two outcomes could occur: in case it is valid, then another requirement is also sbuject to validation or, if there are no other requirement in queue, the whole list of requirements is adopted as a valid list and the admission request is put into action; otherwise, if a requirement does not report being valid, the remainder requirements analysis is cancelled, and the admission request is reported back as refused.</t>
      </section>
    </section>
    <section anchor="suitability-value">
      <name>Suitability Value Estimation</name>
      <t>As soon as a message is received at a Rank node, besides unpacking the requirements and verifying their conformity against their respective YANG modules, each node self-assesses its own capability of performing the admission request. The outcome of this assessment, generally speaking, cannot be a binary value and, in this section, we describe how is this suitability value estimated.</t>
      <section anchor="res-estimation">
        <name>Contextualization of Resource Estimation</name>
        <t>The pattern in Figure 6 depicts the transaction of messages between both resource estimation processes that occur within the execution of Rank.</t>
        <figure anchor="fig-resource-est">
          <name>Process of resource estimation in assessing suitability value. In phases (B) and (C) the arrows represent the execution of the self-assessment to generate each B outcome.</name>
          <artwork type="ascii-art"><![CDATA[
┌──────┐                                ┌──────┐
│Talker│                                │Talker│
└─┬────┘                                └─┬────┘
  └┐               .─.                    └┐               .─.
   │.─.     ┌─────▶ N0)                    │.─.     ┌─────▶ N0)
   ( M ──┬──┘      `┬'                  ╔═▶( M ──┬──┘      `┬'
    `┬'  │   .─.                        ║   ║┬'  │   .─.
     │   └─▶( N1)   │                   ╚═══╝│   └─▶( N1)   │
    .▼.      `┬'     ─                      .▼.      `┬'     ─
   ( NN)       ─ ─ ┐  │                    ( NN)       ─ ─ ┐  │
    `┬'                                     `┬'
      ─ ─ ─ ─   ┌──┴──┴──┐                    ─ ─ ─ ─   ┌──┴──┴──┐
             └ ─│Listener│                           └ ─│Listener│
                └────────┘                              └────────┘
            (A)                                     (B)

                     ┌──────┐
                     │Talker│
                     └─┬────┘
                       └┐        ┌─────▶.─.
                        │.─.     │   ╔▶( N0)
                        ( M ──┬──┘   ║  ║┬'
                         `┬'  └──▶.─.╚══╝
                          │    ╔▶( N1)   │
                         .▼.   ║  ║┬'     ─
                      ╔▶( NN)  ╚══╝ ─ ─ ┐  │
                      ║  ║┬'
                      ╚══╝ ─ ─ ─ ─   ┌──┴──┴──┐
                                  └ ─│Listener│
                                     └────────┘
                                 (C)

┌──────┐                              ┌──────┐
│Talker│                              │Talker│
└─┬────┘                              └─┬────┘
  └┐        ┌─────▶.─.                  └┐        ┌─────▶.─.
   │.─.◀════╬═════( N0)                  │.─.     │     ( N0)
╔═▶( M ──┬──┘  b0  `┬'                   ( M ══╦──┘      `─'
║   `┬◀═╗└──▶.─.                          `┬'  ╚══▶.─.
║bN  │  ╚═══( N1)   │                      │      ( N1)
║   .▼.  b1  `┬'     ─                    .▼.      `┬'
╚══( NN)       ─ ─ ┐  │                  ( NN)      └────┐
    `┬'                                   `─'            │
      ─ ─ ─ ─   ┌──┴──┴──┐                            ┌──▼─────┐
             └ ─│Listener│                            │Listener│
                └────────┘                            └────────┘
           (D)                                   (E)
]]></artwork>
        </figure>
        <t>In <xref target="fig-resource-est"/>, a node M receives an admission request forwarded from a talker T, and intends to proceed with the request through some nodes Ni that currently grants a connection to the targeted listener L. In <xref target="fig-resource-est"/> each iteration is being by a different stage:</t>
        <ul spacing="normal">
          <li>
            <t>In (A) the node M receives the message.</t>
          </li>
          <li>
            <t>In (B) the node M proceeds to self-assess its capabilities of performing the admission request, cancelling if not capable.</t>
          </li>
          <li>
            <t>As node M has three connecting nodes that can provide it with a path towards the listener, in (C) node M sent a message to each neighboring node Ni, leaving them to self-assess their own capabilities of performing what is being requested.</t>
          </li>
          <li>
            <t>In response to this action, in (D) each node answers back to node M with a suitability value.</t>
          </li>
          <li>
            <t>Node M, having received the suitability values from every node Ni, in (E), it is now responsible for sorting candidates for forwarding the request message.</t>
          </li>
        </ul>
        <t>When a node has requested others to perform a resource estimation, it waits for an answer per node (as in phase (D)). To allow this action to be performed, the suitability values that come from each assessing node must be comparable amongst them. Thus, the definition of the evaluation function not only has to be the same in each node, but the range of values must also be normalized, so that each final suitability value can be comparable on the same scale throughout every node in a Rank session.</t>
        <t>In this protocol, the resource estimation must be able to accommodate a varied set of resources, for which assessing the current capability of performing a request cannot be evaluated equally or through the same means. This raises the question of how to assess a list of requirements in a node. As each resource is different from another, each resource must have a unique assessment function directly defined, and the results must be output in the same fashion as the final suitability value: in a normalized range.</t>
        <t>By definition, the normalized range of values for the suitability value, B, and for each individually-assessed resource value is [0, 1], in which 0 means total inability of performing what is being requested, and any other value means that a resource is capable, in a crescent ratio from 0 to 1.</t>
        <t>The task of self-assessment within a node against a list of requirements is not a computationally expensive execution. Still, Rank needs to do more than just a current evaluation of the node’s resources to ensure that a resource allocation is guaranteed to be working during the interval in which is in place. Therefore, several criteria need to be taken into consideration to declare that a given node is more capable than another to perform a given task under a strict list of requirements. The following criteria were designed:</t>
        <ol spacing="normal" type="1"><li>
            <t>Bare-metal node resources.</t>
          </li>
          <li>
            <t>Current node resources.</t>
          </li>
          <li>
            <t>Priority.</t>
          </li>
          <li>
            <t>Proximity.</t>
          </li>
          <li>
            <t>Historical performance.</t>
          </li>
        </ol>
        <t>At the end, a suitability value, B, is computed with these constributions from the following described criteria.</t>
      </section>
      <section anchor="crit-1">
        <name>Bare-metal Node Resources for Suitability</name>
        <t>Considering the list of requirements, the first approach to check if the current resources are capable of performing such specifications is to check if the surrogate node has bare-metal components that could support such an admission request. Let us consider some examples to better illustrate this criterion:</t>
        <ol spacing="normal" type="1"><li>
            <t>The list of requirements specifies the need for 2 GB of memory. In such a case, with this criterion, the node will assess if, independently of the current state of the machine, the node has at least 2 GB of memory (used or unused).</t>
          </li>
          <li>
            <t>The list of requirements states a requirement for a time-critical traffic subject to time shaping. In such a case, the node will assess if there are capabilities to sustain the time-aware shaper (TAS) standard or not.</t>
          </li>
        </ol>
        <t>A first criterion of bare-metal node resources (hereby called C1) is called as a contribution to the self-assessment score of a Rank node. This criterion can result in two possible outcomes:</t>
        <ul spacing="normal">
          <li>
            <t>0 if the node total resources do not support at least of item of the list of requirements.</t>
          </li>
          <li>
            <t>1 if the node total resources do support the list of requirements.</t>
          </li>
        </ul>
        <t>In the case of reaching an outcome of 0, then no more criteria is required for the self-assessment and the current node declares itself as uncapable to perform the admission request.</t>
      </section>
      <section anchor="crit-2">
        <name>Current Node Resources for Suitability</name>
        <t>It is possible that the outcome of the bare-metal criterion could not be enough to be fully able to guarantee a resource allocation without further disturbances along the duration of the reservation, at least whenever the answer to it is not zero: if the answer is zero, with absolute certainty, there is no way to handling such a resource allocation in the self-assessing node; otherwise the answer is still uncertain. This ambiguity needs a second criterion, so that a tiebreaker rule is applied.</t>
        <t>To advance a tiebreaker, the current node resources (hereby called C2) is relevant as it steps one more level in the direction of what is really being performed within the context of the node under assessment. To better understand how someone can tackle this assessment, it is important first to describe how requirements are defined.</t>
        <t>Let us consider a list of requirements R which is given as the requirements towards a reservation that should be assessed in a given Rank node. Such a list R is a collection where the insertion order of the elements is relevant, meaning that under the context of R = (r0, r1, …, ri), the first requirement has an higher relevance than the second, r1, which consequently is highly regarded in relation to the last requirement, ri.</t>
        <t>The self-assessment of a Rank node considering the criterion of their currently available node resources must take into consideration the order of requirements as they are listed within R.</t>
        <t>If the list of requirements has a cardinal of 1, then the self-assessment is trivial, being the direct evaluation value of the first and only requirement in r0, as z0. Following this case, the requirements must weigh differently, in a descending order from the first to the i-th element of R.</t>
        <figure anchor="fig-weights-dist">
          <name>Generic representation of weights distribution between two requirements A and B, in a list of requirements R.</name>
          <artwork type="ascii-art"><![CDATA[
                                 taumin > 0.5               taumax < 1
                                  │                                  │
┌─────────────────────────────────┼────┳─────────────────────────────┤
│                   A                ◀─╋─▶            B              │
└─────────────────────────────────┴────╋─────────────────────────────┘
0                                      │                             1
                                      tau
]]></artwork>
        </figure>
        <t>In <xref target="fig-weights-dist"/> a generic distribution of weights between two requirements is depicted, in which a given weight (tau) is applied to the first requirement. Following this reasoning, the second requirement receives the remainder weight of 1–tau, since the total assessment value must be 1, that is, in the best-case when all the assessed requirements receive the highest grade zi, the total must result in 1. To allow the distintction between both stated requirements in R, and repecting that the i-th rqeuirement as always more value than its following (i+1)-th requirement, the value of tau cannot be lower or equal to 0.5 (half its individually-graded assessment value), in tau minimum (taumin). It cannot be higher or equal than 1 in taumax, as well.</t>
        <t>The choice of the tau value should be parameterizable per assessing Rank node, and is a percentage applied over the individually-graded assessment value of a requirement, z. For instance, if the list of requirements has four items, R = (r0, r1, r2, r3), the distribution of weights can be depicted as in <xref target="fig-weights-dist-four"/>.</t>
        <figure anchor="fig-weights-dist-four">
          <name>Generic representation of weights distribution between four requirements (A, B, C, D), in a list of requirements R.</name>
          <artwork type="ascii-art"><![CDATA[
┌───────────────────────┳──────────────────┳─────────────┳───────────┐
│           A           ┃         B        ┃       C     ┃     D     │
└───────────────────────╋──────────────────╋─────────────╋───────────┘
0                       │                  │             │           1
                      tau 0              tau 1         tau 2
]]></artwork>
        </figure>
        <t>Profiting from the recursive behavior of the starting expression and of the depiction in both <xref target="fig-weights-dist"/> and <xref target="fig-weights-dist-four"/>, one can write C2 as the following C2(x) expression:</t>
        <t>C2(R) = (z0)
            If (cardinal(R) = 1)
            Else ( Mul(tau, z0) + Mul(1–tau, C2(R[1..])) )</t>
        <t>The possibility of parameterizing the value of tau in the range of (taumin, taumax) allows the Rank protocol instance to control a subjective amount of requirements it wants to consider.</t>
        <t>By keeping the criterion of insertion order in the list of requirements, the assessing nodes are informed of which requirements must be checked before others. Nonetheless, there is a critical condition that must be enforced. If any requirement assessment zi is equal to 0, tehn the entire criterion of the current node resource must yield the same outcome (zero). This must be enforced since a node could have resources to support a given requirement request, but not at the time of the request, meaning this criterion must be able to cancel out such an admission request and further requirements assessment.</t>
      </section>
      <section anchor="crit-3">
        <name>Priority for Suitability</name>
        <t>Considering both C1 and C2 criteria, the self-assessment of a Rank node for the support of a given list of requirements must not be closed yet, as two or more machines, although being improbable, could achieve a same assessment score. Within the context of the admission request not only Rank nodes receive data on the list of requirements, but also a priority level. As such, this information must be considered in the node self-assessment.</t>
        <t>The priority of an admission request is a critical concept within the domain of the Rank protocol, since it is a fairness criterion for self-assessment: the criterion C3.</t>
        <t>A Rank node must be able to continue the assessment of a given list of requirements if the priority of its admission request is higher than the reservations that are already allocated within the system. In the case that a list of requirements is assessed that can be supported by the current Rank node’s system, then the Rank protocol instance must be able to allow the automatic selection of an allocated reservation and proceed to replenish its used resources (check this mechanics in <xref target="reservation-lifecycle"/>).</t>
        <t>The priority level is relative to the admission request, not with each requirement element of the list of requirements R. Similarly to the latter criteria, the criterion of priority C3 must be a value from 0 to 1, reflecting the level of priority that the given admission request has, where 0 means the lowest priority level, and 1 the highest possible. The highest priority level in a Rank admission request is defined as 7, according to both <xref target="ear-packet"/> and <xref target="mar-packet"/>. The criteria C3’s outcome is evaluated as the message priority, p, over the maximum level: C3 = p / 7.</t>
      </section>
      <section anchor="crit-4">
        <name>Proximity for Suitability</name>
        <t>At this point, the node was already assessed regarding these resources (both bare-metal and current resources) and the priority of the admission request. These metrics are not be enough to solve the possibility of gathering two or more equal assessment values. Moreover, some considerations are still not considered, such as the position of the assessing node, connection-wise, towards the targeted listener of the admission request. This can be solved in a new criterion, of node proximity, C4.</t>
        <t>Despite being subjective, since this assessment is not dependent on any input given by the admission request besides the information regarding its intended destination, the network assessment is critical to perform. It can be decisive when to choose the next target in line towards the listener, whenever there are multiple ones to choose from, and the assessment of the criteria is still giving an equal value. This assessment will be a reflection of the network uncertainty, considering that it will lead the algorithm for resource estimation not to ignore the network dynamics and asynchronous triggering effects on network management decisions that may occur: these considerations are taken in other works to allow several decisions in approaches of resource management <xref target="Shi2024"/>.</t>
        <t>Considering a criterion for the node proximity towards a targeted listener of a given Rank admission request is a rather subjective concept, since one can draw multiple conclusions about what proximity means. In terms of proximity, one should understand an association of connectivity evaluation functions towards the final destination node of the admission request under test.</t>
        <t>To accomplish the goal of this criterion, a set of functions, F, must be used (such as latency, jitter, among others), whose final result is to be gathered as the average of all functions’ outcomes. This requires that all functions operate by retrieving a value in a normalized range from [0, 1].</t>
        <t>In sum, the proximity criterion results in the following possible values:</t>
        <ul spacing="normal">
          <li>
            <t>0 if the network assessment functions (F) average 0.</t>
          </li>
          <li>
            <t>1 if the network assessment functions (F) average 1.</t>
          </li>
          <li>
            <t>Any other value in between for any other proximity assessment value, as the average of the outcomes of each function in F.</t>
          </li>
        </ul>
      </section>
      <section anchor="crit-5">
        <name>Historical Performance for Suitability</name>
        <t>There is a single criterion that should be set to feature some system hysteresis during the execution of a Rank instance. This being, we introduce historic performance, C5, as a criterion to help with the self-assessment of a node against a list of requirements R. Having such an assessment could lead a node to take into consideration admission requests made before, similar to the ones currently requested, and deliver a grade on how good such a performance was.</t>
        <t>The historical performance of a given allowance for an admission request should be made by leveraging the following variables:</t>
        <ul spacing="normal">
          <li>
            <t>a1, ratio of the number of requirements to the average number of requested resource requirements.</t>
          </li>
          <li>
            <t>a2, percentage of allocated but unused resource reservation.</t>
          </li>
          <li>
            <t>a3, ratio of how stable are the available resources.</t>
          </li>
          <li>
            <t>a4, percentage of strict resource reservations over all allowed admission requests.</t>
          </li>
        </ul>
        <t>Adding to this set of variables, an entropy value should be appended so that the odds of two nodes presenting the same assessment value are severely diminished without compromising the order of magnitude of the total self-assessment final grade and the consequent disposition of this node towards the admission request outcome. For this reason, a fifth contributor to C5 should be added to generate some salt over the estimated values of a1, a2, a3, and a4: the salt, s.</t>
        <t>The salt must be seen as a tool to make it difficult for two or more assessment scores to be equal. This parameter is optional, as its weight can be set to zero. Still, its use may be helpful in scenarios where several candidate nodes for a reservation may share similar network patterns or characteristics. In such a case, the salt value may help the network uncertainty assessment to provide enough random proximity values even in similar conditions. This value must not, in any way, compromise the main function of the history performance criterion. Thus, it is suggested to assign W as a small percentage weight (below 1%).</t>
        <t>The variables mentioned above are designed to be joint by a weighted sum of parameterizable weights di, as described as follows, where Sum(di) = 1.</t>
        <t>C5 = Mul( (1–W), [ Mul(d1, a1) + Mul(d1, a1) + Mul(d1, a1) + Mul(d1, a1) ] + Mul(W, s) )</t>
      </section>
      <section anchor="final-bid">
        <name>The Final Value, the Suitability Value</name>
        <t>At this point, all the individual contributors to the final self-assessment grade are estimated, and the suitability value, B, can be estimated as follows, where B is a value in [0, 1].</t>
        <t>B = Mul(C1, C2, C3, Avg(C4, C5))</t>
        <t>The first three terms above, relative to the first three criteria, as they are directly estimated from the list of requirements or the priority given as input (from the admission request), are multiplied by each other. The cancellation of one of these three terms must undoubtedly break the resource estimation down to zero.</t>
        <t>The last two criteria, as they are estimated from other parameters rather than what has been given as input, are considered both as an average, so that they do not cancel each other out. This reflects some subjectivity characteristic of proximity and historical performance criteria.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC0879" target="https://www.rfc-editor.org/info/rfc879" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.0879.xml">
          <front>
            <title>The TCP Maximum Segment Size and Related Topics</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date month="November" year="1983"/>
            <abstract>
              <t>This RFC discusses the TCP Maximum Segment Size Option and related topics. The purposes is to clarify some aspects of TCP and its interaction with IP. This memo is a clarification to the TCP specification, and contains information that may be considered as "advice to implementers".</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="879"/>
          <seriesInfo name="DOI" value="10.17487/RFC0879"/>
        </reference>
        <reference anchor="RFC2205" target="https://www.rfc-editor.org/info/rfc2205" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2205.xml">
          <front>
            <title>Resource ReSerVation Protocol (RSVP) -- Version 1 Functional Specification</title>
            <author fullname="R. Braden" initials="R." role="editor" surname="Braden"/>
            <author fullname="L. Zhang" initials="L." surname="Zhang"/>
            <author fullname="S. Berson" initials="S." surname="Berson"/>
            <author fullname="S. Herzog" initials="S." surname="Herzog"/>
            <author fullname="S. Jamin" initials="S." surname="Jamin"/>
            <date month="September" year="1997"/>
            <abstract>
              <t>This memo describes version 1 of RSVP, a resource reservation setup protocol designed for an integrated services Internet. RSVP provides receiver-initiated setup of resource reservations for multicast or unicast data flows, with good scaling and robustness properties. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2205"/>
          <seriesInfo name="DOI" value="10.17487/RFC2205"/>
        </reference>
        <reference anchor="RFC6241" target="https://www.rfc-editor.org/info/rfc6241" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6241.xml">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC7950" target="https://www.rfc-editor.org/info/rfc7950" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7950.xml">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the YANG language. YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification. There are a small number of backward incompatibilities from YANG version 1. This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7950"/>
          <seriesInfo name="DOI" value="10.17487/RFC7950"/>
        </reference>
        <reference anchor="RFC7951" target="https://www.rfc-editor.org/info/rfc7951" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7951.xml">
          <front>
            <title>JSON Encoding of Data Modeled with YANG</title>
            <author fullname="L. Lhotka" initials="L." surname="Lhotka"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>This document defines encoding rules for representing configuration data, state data, parameters of Remote Procedure Call (RPC) operations or actions, and notifications defined using YANG as JavaScript Object Notation (JSON) text.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7951"/>
          <seriesInfo name="DOI" value="10.17487/RFC7951"/>
        </reference>
        <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8949.xml">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <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" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="_802.1Q" target="https://doi.org/10.1109/IEEESTD.2022.10004498">
          <front>
            <title>IEEE Standard for Local and Metropolitan Area Networks--Bridges and Bridged Networks</title>
            <author>
              <organization>IEEE</organization>
            </author>
            <date year="2022" month="December" day="22"/>
          </front>
          <seriesInfo name="IEEE Std" value="802.1Q-2022"/>
          <seriesInfo name="DOI" value="10.1109/IEEESTD.2022.10004498"/>
        </reference>
        <reference anchor="Abou21" target="https://doi.org/10.1109/JIOT.2021.3052082">
          <front>
            <title>Resource Provisioning in Edge Computing for Latency-Sensitive Applications</title>
            <author initials="A." surname="Abouaomar" fullname="A. Abouaomar">
              <organization/>
            </author>
            <author initials="S." surname="Cherkaoui" fullname="S. Cherkaoui">
              <organization/>
            </author>
            <author initials="Z." surname="Mlika" fullname="Z. Mlika">
              <organization/>
            </author>
            <author initials="A." surname="Kobbane" fullname="A. Kobbane">
              <organization/>
            </author>
            <date year="2021" month="July" day="15"/>
          </front>
          <seriesInfo name="IEEE Internet of Things Journal" value="vol. 8, no. 14, pp. 11088-11099"/>
          <seriesInfo name="DOI" value="10.1109/JIOT.2021.3052082"/>
        </reference>
        <reference anchor="Farhoudi25" target="https://doi.org/10.1109/MNET.2024.3438096">
          <front>
            <title>Discovery of 6G Services and Resources in Edge-Cloud-Continuum</title>
            <author initials="M." surname="Farhoudi" fullname="M. Farhoudi">
              <organization/>
            </author>
            <author initials="M." surname="Shokrnezhad" fullname="M. Shokrnezhad">
              <organization/>
            </author>
            <author initials="T." surname="Taleb" fullname="T. Taleb">
              <organization/>
            </author>
            <author initials="R." surname="Li" fullname="R. Li">
              <organization/>
            </author>
            <author initials="J." surname="Song" fullname="J. Song">
              <organization/>
            </author>
            <date year="2025" month="May"/>
          </front>
          <seriesInfo name="IEEE Network" value="vol. 39, no. 3, pp. 223-232"/>
          <seriesInfo name="DOI" value="10.1109/MNET.2024.3438096"/>
        </reference>
        <reference anchor="Horvath25" target="https://doi.org/10.1109/ICINT65528.2025.11030893">
          <front>
            <title>Efficient Location-Based Service Discovery for IoT and Edge Computing in the 6G Era</title>
            <author initials="K." surname="Horvath" fullname="K. Horvath">
              <organization/>
            </author>
            <author initials="D." surname="Kimovski" fullname="D. Kimovski">
              <organization/>
            </author>
            <date year="2025"/>
          </front>
          <seriesInfo name="Conference" value="2025 10th International Conference on Information and Network Technologies (ICINT), Melbourne, Australia, pp. 94-101"/>
          <seriesInfo name="DOI" value="10.1109/ICINT65528.2025.11030893"/>
        </reference>
        <reference anchor="Kondo24" target="https://doi.org/10.1109/TNSM.2024.3381591">
          <front>
            <title>Resource Breadcrumbs: Discovering Edge Computing Resources Over Named Data Networking</title>
            <author initials="D." surname="Kondo" fullname="D. Kondo">
              <organization/>
            </author>
            <author initials="T." surname="Ansquer" fullname="T. Ansquer">
              <organization/>
            </author>
            <author initials="Y." surname="Tanigawa" fullname="Y. Tanigawa">
              <organization/>
            </author>
            <author initials="H." surname="Tode" fullname="H. Tode">
              <organization/>
            </author>
            <date year="2024" month="June"/>
          </front>
          <seriesInfo name="IEEE Transactions on Network and Service Management" value="vol. 21, no. 3, pp. 3305-3316"/>
          <seriesInfo name="DOI" value="10.1109/TNSM.2024.3381591"/>
        </reference>
        <reference anchor="Kubernetes" target="https://www.kubernetes.io">
          <front>
            <title>Kubernetes Official Page</title>
            <author>
              <organization/>
            </author>
            <date year="2026" month="February"/>
          </front>
        </reference>
        <reference anchor="Li18" target="https://doi.org/10.1155/2018/7308913">
          <front>
            <title>Method of Resource Estimation Based on QoS in Edge Computing</title>
            <author initials="G." surname="Li" fullname="Guangshun Li">
              <organization/>
            </author>
            <author initials="J." surname="Song" fullname="Jianrong Song">
              <organization/>
            </author>
            <author initials="J." surname="Wu" fullname="Junhua Wu">
              <organization/>
            </author>
            <author initials="J." surname="Wang" fullname="Jiping Wang">
              <organization/>
            </author>
            <date year="2018"/>
          </front>
          <seriesInfo name="Wireless Communications and Mobile Computing" value="7308913, 9 pages"/>
          <seriesInfo name="DOI" value="10.1155/2018/7308913"/>
        </reference>
        <reference anchor="Liu24" target="https://doi.org/10.1007/s10586-024-04552-x">
          <front>
            <title>A family of truthful mechanisms for resource allocation with multi-attribute demand in mobile edge computing</title>
            <author initials="X." surname="Liu" fullname="X. Liu">
              <organization/>
            </author>
            <author initials="J." surname="Liu" fullname="J. Liu">
              <organization/>
            </author>
            <author initials="H." surname="Wu" fullname="H. Wu">
              <organization/>
            </author>
            <date year="2024"/>
          </front>
          <seriesInfo name="Cluster Comput" value="27, 11595–11610"/>
          <seriesInfo name="DOI" value="10.1007/s10586-024-04552-x"/>
        </reference>
        <reference anchor="Nguyen18" target="https://doi.org/10.48550/arXiv.1805.02982">
          <front>
            <title>Price-based Resource Allocation for Edge Computing: A Market Equilibrium Approach</title>
            <author initials="D. T." surname="Nguyen" fullname="D. T. Nguyen">
              <organization/>
            </author>
            <author initials="L. B." surname="Le" fullname="L. B. Le">
              <organization/>
            </author>
            <author initials="V." surname="Bhargava" fullname="V. Bhargava">
              <organization/>
            </author>
            <date year="2018" month="May"/>
          </front>
          <seriesInfo name="arXiv" value="Computer Science and Game Theory"/>
          <seriesInfo name="DOI" value="10.48550/arXiv.1805.02982"/>
        </reference>
        <reference anchor="Olaniyan18" target="https://doi.org/10.1016/j.future.2018.07.040">
          <front>
            <title>Opportunistic Edge Computing: Concepts, opportunities and research challenges</title>
            <author initials="R." surname="Olaniyan" fullname="R. Olaniyan">
              <organization/>
            </author>
            <author initials="O." surname="Fadahunsi" fullname="O. Fadahunsi">
              <organization/>
            </author>
            <author initials="M." surname="Maheswaran" fullname="M. Maheswaran">
              <organization/>
            </author>
            <author initials="M. F." surname="Zhani" fullname="M. F. Zhani">
              <organization/>
            </author>
            <date year="2018"/>
          </front>
          <seriesInfo name="Future Generation Computer Systems" value="Volume 89, Pages 633-645"/>
          <seriesInfo name="DOI" value="10.1016/j.future.2018.07.040"/>
        </reference>
        <reference anchor="Shi2024" target="https://doi.org/10.1109/TWC.2023.3290005">
          <front>
            <title>Service Migration or Task Rerouting: A Two-Timescale Online Resource Optimization for MEC</title>
            <author initials="Y." surname="Shi" fullname="Y. Shi">
              <organization/>
            </author>
            <author initials="C." surname="Yi" fullname="C. Yi">
              <organization/>
            </author>
            <author initials="R." surname="Wang" fullname="R. Wang">
              <organization/>
            </author>
            <author initials="Q." surname="Wu" fullname="Q. Wu">
              <organization/>
            </author>
            <author initials="B." surname="Chen" fullname="B. Chen">
              <organization/>
            </author>
            <author initials="J." surname="Cai" fullname="J. Cai">
              <organization/>
            </author>
            <date year="2024" month="February"/>
          </front>
          <seriesInfo name="IEEE Transactions on Wireless Communications" value="vol. 23, no. 2, pp. 1503-1519"/>
          <seriesInfo name="DOI" value="10.1109/TWC.2023.3290005"/>
        </reference>
        <reference anchor="ULIDCan" target="https://github.com/ulid/spec">
          <front>
            <title>The canonical spec for ulid</title>
            <author>
              <organization>ulid</organization>
            </author>
            <date year="2026" month="February"/>
          </front>
          <seriesInfo name="Repository" value="GitHub"/>
        </reference>
        <reference anchor="Wang25" target="https://doi.org/10.1007/s00607-025-01479-y">
          <front>
            <title>Voluntary resource sharing at the network edge to provide cloud services: a systematic survey</title>
            <author initials="H." surname="Wang" fullname="H. Wang">
              <organization/>
            </author>
            <author initials="M." surname="Mir" fullname="M. Mir">
              <organization/>
            </author>
            <date year="2025"/>
          </front>
          <seriesInfo name="Computing" value="107, 113"/>
          <seriesInfo name="DOI" value="10.1007/s00607-025-01479-y"/>
        </reference>
        <reference anchor="Yi20" target="https://doi.org/10.1109/TMC.2019.2891736">
          <front>
            <title>A Multi-User Mobile Computation Offloading and Transmission Scheduling Mechanism for Delay-Sensitive Applications</title>
            <author initials="C." surname="Yi" fullname="C. Yi">
              <organization/>
            </author>
            <author initials="J." surname="Cai" fullname="J. Cai">
              <organization/>
            </author>
            <author initials="Z." surname="Su" fullname="Z. Su">
              <organization/>
            </author>
            <date year="2020" month="January" day="01"/>
          </front>
          <seriesInfo name="IEEE Transactions on Mobile Computing" value="vol. 19, no. 1, pp. 29-43"/>
          <seriesInfo name="DOI" value="10.1109/TMC.2019.2891736"/>
        </reference>
        <reference anchor="Yu25" target="https://doi.org/10.1109/JIOT.2025.3565539">
          <front>
            <title>Auction Theory and Game Theory Based Pricing of Edge Computing Resources: A Survey</title>
            <author initials="J." surname="Yu" fullname="J. Yu">
              <organization/>
            </author>
            <author initials="S." surname="Liu" fullname="S. Liu">
              <organization/>
            </author>
            <author initials="Y." surname="Zou" fullname="Y. Zou">
              <organization/>
            </author>
            <author initials="G." surname="Wang" fullname="G. Wang">
              <organization/>
            </author>
            <author initials="C." surname="Hu" fullname="C. Hu">
              <organization/>
            </author>
            <date year="2025" month="August" day="15"/>
          </front>
          <seriesInfo name="IEEE Internet of Things Journal" value="vol. 12, no. 16, pp. 32394-32418"/>
          <seriesInfo name="DOI" value="10.1109/JIOT.2025.3565539"/>
        </reference>
        <reference anchor="Zafari21" target="https://doi.org/10.1109/TNSM.2020.3044870">
          <front>
            <title>Let’s Share: A Game-Theoretic Framework for Resource Sharing in Mobile Edge Clouds</title>
            <author initials="F." surname="Zafari" fullname="F. Zafari">
              <organization/>
            </author>
            <author initials="K. K." surname="Leung" fullname="K. K. Leung">
              <organization/>
            </author>
            <author initials="D." surname="Towsley" fullname="D. Towsley">
              <organization/>
            </author>
            <author initials="P." surname="Basu" fullname="P. Basu">
              <organization/>
            </author>
            <author initials="A." surname="Swami" fullname="A. Swami">
              <organization/>
            </author>
            <author initials="J." surname="Li" fullname="J. Li">
              <organization/>
            </author>
            <date year="2021" month="June"/>
          </front>
          <seriesInfo name="IEEE Transactions on Network and Service Management" value="vol. 18, no. 2, pp. 2107-2122"/>
          <seriesInfo name="DOI" value="10.1109/TNSM.2020.3044870"/>
        </reference>
        <reference anchor="Zhang20" target="https://doi.org/10.31449/inf.v44i2.3166">
          <front>
            <title>Research on Resource Allocation and Management of Mobile Edge Computing Network</title>
            <author initials="R." surname="Zhang" fullname="R. Zhang">
              <organization/>
            </author>
            <author initials="W." surname="Shi" fullname="W. Shi">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
          <seriesInfo name="Informatica" value="44(2)"/>
          <seriesInfo name="DOI" value="10.31449/inf.v44i2.3166"/>
        </reference>
      </references>
    </references>
    <?line 1303?>

<section anchor="data-formats">
      <name>Rank Data Formats</name>
      <t>This appendix describes the format of Rank protocol packets. The Rank protocol may run over different OSI layers depending on the intended situation. Before any data format are described, the details of the Rank encapsulation are explained.</t>
      <section anchor="rank-encapsulation">
        <name>Encapsulation of Rank Packets</name>
        <t>Rank runs alternatively, by requester definition, over several possible communication layers. Rank packets are therefore encapsulated, depending on the situation, by other headers that might exist in each applicable scenario.</t>
        <t>Rank does not define a way to fragment its protocol packets, and, when transmitted from network layer and above, depends on IP fragmentation when doing that for packets larger than the network MTU. In practice, there is no proper reason to reach a point in which a Rank packet would require more than 65,535 bytes (including the communication layer headers that are required), since this would mean that the payload is reasonably large, thus having a large list of requirements that, tendencially, loses weight reaching no value.</t>
        <t>There are some other important features of Rank encapsulation:</t>
        <ul spacing="normal">
          <li>
            <t>Rank is proposed to be Ethernet Type (EtherType) number 0x7265 (29 285). This number is not registered.</t>
          </li>
          <li>
            <t>Rank is proposed to be IP protocol number 0x9B (155). This number is not registered.</t>
          </li>
          <li>
            <t>Rank is proposed to be transport protocol number 7265. This number is not registered.</t>
          </li>
        </ul>
      </section>
      <section anchor="rank-packet-formats">
        <name>Rank Packet Formats</name>
        <t>There are seven Rank packet types. Not all of them as distinct in structure, but serve different purposes. All Rank packet types begin with a 17 byte header. This header is described first. Each packet type is then described in a succeeding section. In these sections each packet’s division into fields is displayed, and then the field definitions are enumerated.</t>
        <t>Two Rank packet types (EAR and MAR) deal with a list of requirements, that are CBOR objects <xref target="RFC8949"/>. Because of this, these two Rank protocol packets cannot be parsed unless the format of CBOR is also understood.</t>
        <t>The receive processing of Rank packets is detailed in <xref target="receiving-packets"/>.</t>
        <section anchor="rank-packet-header">
          <name>The Rank Packet Header</name>
          <t>Every Rank packet starts with a standard 17 byte header. This header contains all the information necessary to determine whether the packet should be accepted for further processing. This determination is described in <xref target="receiving-packets"/> of the specification.</t>
          <artwork type="ascii-art"><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| V | Type  | R |                                               | 
+-+-+-+-+-+-+-+-+                                               +
|                                                               |
+                Session Identifier (128 bits)                  +
|                                                               |
+                                                               +
|                                                               |
+               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               |
+-+-+-+-+-+-+-+-+
]]></artwork>
          <dl>
            <dt>Version (V)</dt>
            <dd>
              <t>This 2-bits field holds the information about the version of Rank of this message. As of this document, this field <bcp14>MUST</bcp14> be set to all zeroes (0).</t>
            </dd>
            <dt>Type</dt>
            <dd>
              <t>This 4-bits field unsigned integer indicates the type code of the message. This document defines the following type codes:
0 - Exclusive Admission Request (EAR)
1 - Multiple Admission Request (MAR)
2 - Bid (BID)
3 - Acceptation (ACC)
4 - Refusal (REF)
5 - Replenishing (REP)
6 - Heartbeat (HBT)</t>
            </dd>
            <dt>Reserved (R)</dt>
            <dd>
              <t>This 2-bits field is reserved for future use and <bcp14>MUST</bcp14> be zero (0).</t>
            </dd>
            <dt>Session Identifier</dt>
            <dd>
              <t>This 16-octet field holds the Rank session identifier. This field is typed for a universally unique lexicographically sortable identifier (ULID) <xref target="ULIDCan"/>. A ULID is a 16-octet identifier that splits into a 6-octet field for UNIX timestamp in milliseconds and a 10-octet field for randomness from a cryptographically secure source of randomness, if possible.</t>
            </dd>
          </dl>
        </section>
        <section anchor="ear-packet">
          <name>The EAR Packet</name>
          <t>EAR packets are Rank packet type 0. These packets are sent to initiate a request on a node or start the processing of a new session at an intermediate or listener node.</t>
          <t>As soon as a node intends to send an admission request towards a listener, but targeting a single following node, the message sent in the Rank session is an EAR message.</t>
          <artwork type="ascii-art"><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| V |   0   | R |                                               | 
+-+-+-+-+-+-+-+-+                                               +
|                                                               |
+                Session Identifier (128 bits)                  +
|                                                               |
+                                                               +
|                                                               |
+               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               | Pri | LiL | R |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Listener (0) |        
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Listener (2)                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Listener (3)                         |
+                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                      Listener (4 or 5)                        +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Payload length        |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
|                       Payload (variable)                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
          <dl>
            <dt>Priority (Pri)</dt>
            <dd>
              <t>This 3-bits field holds the admission request priority value from 0 to 7, where 0 means the lowest priority level, and 7 identifies the maximum priority level. The priority will be used in the self-assessment of each node in regards to their capability of performing the list of requirements that is also carried in this message. Although coincidental, this field might not be exactly the same as a priority code point (PCP) from an IEEE 802.1Q virtual local area network (VLAN) header, but can be used as such.</t>
            </dd>
            <dt>Listener Length (LiL)</dt>
            <dd>
              <t>This 3-bits field encodes the length of the intended listener whose identification is described in a next field. Depending on the abstraction layer level where a Rank instance is being run on, the address length will change accordingly. To that matter, this field identifies this through encoding the current situation of this Rank session. This data will define the length of the following Listener field. This document defines the following codes:
      0 - 1-octet defined listener addresses for testing purposes
      2 - 4-octet defined listener addresses for IPv4 representation.
      3 - 6-octet defined listener addresses for MAC representation.
      4 - 16-octet defined listener addresses for IPv6 representation.
      5 - 16-octet defined listener addresses for DDS-GUID representation.</t>
            </dd>
            <dt>Reserved field (R)</dt>
            <dd>
              <t>This 2-bits field is reserved for future use and <bcp14>MUST</bcp14> be all zeroes (0).</t>
            </dd>
            <dt>Listener</dt>
            <dd>
              <t>This variable length field holds the address or identifier of the intended listener of the admission request being carried within this message. The length of this field is determined by the coded value of the Listener Length field: this document defines four possible lengths to the identifier or address of a listener.</t>
            </dd>
            <dt>Payload Length</dt>
            <dd>
              <t>This 2-octet unsigned integer represents the length of the Payload field following it. This field may port a value of zero if there is no payload to be carried (this is an exceptional behavior of an EAR message, as reported below).</t>
            </dd>
            <dt>Payload</dt>
            <dd>
              <t>This variable length field holds the list of requirements of the admission request being transmitted in this message. The definition of the list of requirements is originally made in JSON following a format specified in <xref target="doc-composition"/>, that is converted to CBOR.</t>
            </dd>
          </dl>
        </section>
        <section anchor="mar-packet">
          <name>The MAR Packet</name>
          <t>MAR packets are Rank packet type 1. These packets are sent to initiate a request on a node or start the processing of a new session at an intermediate node, when a requester has more than a single node to interact with, targeting a listener.</t>
          <t>Similarly to an EAR message, as soon as a node intends to send an admission request towards a listener, but instead targeting more than a single following node, the messages sent in the Rank session are MAR messages.</t>
          <artwork type="ascii-art"><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| V |   1   | R |                                               | 
+-+-+-+-+-+-+-+-+                                               +
|                                                               |
+                Session Identifier (128 bits)                  +
|                                                               |
+                                                               +
|                                                               |
+               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               | Pri | LiL | R |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Listener (0) |        
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Listener (2)                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Listener (3)                         |
+                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                      Listener (4 or 5)                        +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Payload length        |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
|                       Payload (variable)                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
          <dl>
            <dt>Priority (Pri)</dt>
            <dd>
              <t>This 3-bits field holds the admission request priority value from 0 to 7, where 0 means the lowest priority level, and 7 identifies the maximum priority level. The priority will be used in the self-assessment of each node in regards to their capability of performing the list of requirements that is also carried in this message. Although coincidental, this field might not be exactly the same as a priority code point (PCP) from an IEEE 802.1Q virtual local area network (VLAN) header, but can be used as such.</t>
            </dd>
            <dt>Listener Length (LiL)</dt>
            <dd>
              <t>This 3-bits field encodes the length of the intended listener whose identification is described in a next field. Depending on the abstraction layer level where a Rank instance is being run on, the address length will change accordingly. To that matter, this field identifies this through encoding the current situation of this Rank session. This data will define the length of the following Listener field. This document defines the following codes:
      0 - 1-octet defined listener addresses for testing purposes
      2 - 4-octet defined listener addresses for IPv4 representation.
      3 - 6-octet defined listener addresses for MAC representation.
      4 - 16-octet defined listener addresses for IPv6 representation.
      5 - 16-octet defined listener addresses for DDS-GUID representation.</t>
            </dd>
            <dt>Reserved field (R)</dt>
            <dd>
              <t>This 2-bits field is reserved for future use and <bcp14>MUST</bcp14> be all zeroes (0).</t>
            </dd>
            <dt>Listener</dt>
            <dd>
              <t>This variable length field holds the address or identifier of the intended listener of the admission request being carried within this message. The length of this field is determined by the coded value of the Listener Length field: this document defines four possible lengths to the identifier or address of a listener.</t>
            </dd>
            <dt>Payload Length</dt>
            <dd>
              <t>This 2-octet unsigned integer represents the length of the Payload field following it. This field may port a value of zero if there is no payload to be carried (this is an exceptional behavior of an EAR message, as reported below).</t>
            </dd>
            <dt>Payload</dt>
            <dd>
              <t>This variable length field holds the list of requirements of the admission request being transmitted in this message. The definition of the list of requirements is originally made in JSON following a format specified in <xref target="doc-composition"/>, that is converted to CBOR.</t>
            </dd>
          </dl>
        </section>
        <section anchor="bid-packet">
          <name>The BID Packet</name>
          <t>When a node receives a MAR message it must self-assess its own capabilities of performing the list of requirements sent in the admission request and then answer back with a final suitability value, in a BID message.</t>
          <t>A suitability value is a single precision floating point value that ranges from zero to one, where 0 means no capability to perform the admission request, and any other value to 1 the capability of performing the intended in the admission request. This suitability value estimation is detailed in <xref target="suitability-value"/> of this specification.</t>
          <artwork type="ascii-art"><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| V |   2   | R |                                               | 
+-+-+-+-+-+-+-+-+                                               +
|                                                               |
+                Session Identifier (128 bits)                  +
|                                                               |
+                                                               +
|                                                               |
+               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               |            Suitability Value (B)              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       B       |
+-+-+-+-+-+-+-+-+
]]></artwork>
          <dl>
            <dt>Suitability Value</dt>
            <dd>
              <t>This 4-octet single precision floating point value carries an outcome of a self-assessment ranging in [0, 1], where 0 means no capability of accepting an admission request, and other value how easily it accepts performing it.</t>
            </dd>
          </dl>
          <t>A BID message carrying a value of zero is also mentioned as being a null-bid.</t>
        </section>
        <section anchor="acc-packet">
          <name>The ACC Packet</name>
          <t>In a Rank session, after the admission request reaches the intended listener, an answer must be retropropagated towards the talker, so to admit or reject the pre-reservations done along the discovered path until reaching the target of the request. In case of approval, the listener node (as well as others if they are intermediate nodes) will dispatch an ACC message.</t>
          <t>This message does not have a body besides the common header in which the ACC code data is placed, since the only required information to pass is the Rank session identifier, which is part of the header of all messages.</t>
          <artwork type="ascii-art"><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| V |   3   | R |                                               | 
+-+-+-+-+-+-+-+-+                                               +
|                                                               |
+                Session Identifier (128 bits)                  +
|                                                               |
+                                                               +
|                                                               |
+               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               |
+-+-+-+-+-+-+-+-+
]]></artwork>
        </section>
        <section anchor="ref-packet">
          <name>The REF Packet</name>
          <t>Contrary to the ACC message, in case an admission request reaches the intended listener and it is rejected (or before, if an incapable intermediate node is reached), a REF message is sent towards the next node towards the talker.</t>
          <t>This message does not have a body besides the common header where the single requirement for this message is carried, being the Rank session that is refused to proceed through this path.</t>
          <artwork type="ascii-art"><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| V |   4   | R |                                               | 
+-+-+-+-+-+-+-+-+                                               +
|                                                               |
+                Session Identifier (128 bits)                  +
|                                                               |
+                                                               +
|                                                               |
+               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               |
+-+-+-+-+-+-+-+-+
]]></artwork>
        </section>
        <section anchor="rep-packet">
          <name>The REP Packet</name>
          <t>At the time of having a set of resources already allocated, meaning that a reservation has taken place, a trigger should be possible to set for the recovery of those resources, by deleting such reservation. To trigger this action a REP message can be sent in any of the nodes of a Rank session, which will first initiate a cascading effect of REP messages towards the listener and, by reaching the listener, answer back with REF messages towards the talker of the session.</t>
          <t>The REP message, again, only requires a Rank session identifier to proceed, thus this message does not contain any other fields rather than the current common header of a Rank message.</t>
          <artwork type="ascii-art"><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| V |   5   | R |                                               | 
+-+-+-+-+-+-+-+-+                                               +
|                                                               |
+                Session Identifier (128 bits)                  +
|                                                               |
+                                                               +
|                                                               |
+               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               |
+-+-+-+-+-+-+-+-+
]]></artwork>
        </section>
        <section anchor="hbt-packet">
          <name>The HBT Packet</name>
          <t>To allow reliability features to Rank protocol, the HBT messages are periodically sent from a Rank node to a next node in line of a Rank session towards the listener. With a pre-determined periodicity between participants, the heartbeat message will be the trigger for REP/REF messages if a connection is dropped between a pair of nodes.</t>
          <t>If multiple sessions coexist between a same pair of Rank nodes, a single HBT message could aggregate the intentions so as to diminish the network overhead of the message transmission, in which case the Rank session in the header may be arbitrary within the set of sessions present in such a connection.</t>
          <t>Besides the common header, the HBT message does not carry a body.</t>
          <artwork type="ascii-art"><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| V |   6   | R |                                               | 
+-+-+-+-+-+-+-+-+                                               +
|                                                               |
+                Session Identifier (128 bits)                  +
|                                                               |
+                                                               +
|                                                               |
+               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               |
+-+-+-+-+-+-+-+-+
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="P. V." surname="Teixeira" fullname="Pedro Veloso Teixeira">
        <organization>Universidade de Aveiro</organization>
        <address>
          <email>pedro.teix@ua.pt</email>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
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
N6x1fFw5XSwayzWnfM1Z6nTqFQoWGFKj2gWg8NNuzVtfFVSkXM0sCcHeDv+t
qySas8sY8wlHuMJ2tcVYFJ8IDtkeTtdOQB+cBWKvp6Xo6nKY362drtyk65Qg
A9XbgyLmRnREqp7vRN2IZ+fZsGdnHZtCQ89CM+yqcJMo71p4mqun4aBQJxvi
WlxTmHVvIguuP9TNF6LaLiEPr0cdPVl9WdfbZx2ttluUJDS7OxFXrJlK4Rav
zjNDlRwmNaS4iou1obkkmYuksje+q+H6ftmuHnig4oexV+cEU230chNNyw+5
NqvGhxssChx1dc5cWsncdkAy08aWgiaxskrz9CxGl6gWO+pNG+7HMOyQJ6Bv
3rTFUHPI3nSDBqPO4DXmkd5tQ5wuE0+qYFU+c8LbWyEoOr72iJyuaAPLfUVa
qjR114gXaIiRDNLtOHtgnHZnOgPrcv05+KpBLrrVH39vokHdJlzvIJPG5e/i
hJKuEuAXomuPuqaYmhw4cdiaviNvCNnYtzkm3C7mChlPQpIcU5SKSMk3HUk8
6bRnGRBdD0LJjFyPqkRu42csflisMhOSvCWzGTvGwTEkbdw29CXOuKDA5w8I
Cqxi6gQFXjNcojMOtceA/4dl1CTbyyULa1cqIrAuSgm9h1nj48Z0cX/2/B7W
bq9pKFo70eY2x04boHxYafiBidK1kWbdrmhDAV5ZHPIrmB5/zG801kPtfKhd
TRq049KJdTo0bWOJ2aO00dw3IaFyCesJOhyLYSbJqM7R1CYoG22Qrq1T/zoV
13tUeq6r3Fd2uk573JtQi3JZzd2VmUXo90ROg9tPWiousF0hcwaUt8kIXCcs
P4huoTc8fllBZYzJ/MGHDzhRk5a6IunSy7LL8g4QMbq22DGO82OMFPGAfEI1
pVmDQc+QwfcZFkIumwdcwdR+1nVzDgzV9cClEqyX3e/sbunCuI6/zNbtekga
m2dKY/CRx7I5yrVuuZfk6FPtUIPqiHZJtq+asHkIN2xuqhjT12Hd0ab26t4D
52tzjq0wCprGEgU9aQtN+FZ2Grq6bD9o1xWQ676TGGFZpOb3AINhOsVxycS5
x+X4zGNrbHa2K1gGPfGqpIRqMGNBN2Sp9dDenKNV+rNK+hZCY60QH2Jf3SBd
NBSusT0e/OOpqnnqao9bHQJb91w4VX+goXmsncJtaNn3k+BHAqmuN3DPJr7I
y9g1fDZOmH7pjOIy7PJQ5/ehtOjjlbbKGt7VwFt75VExzH54iweqpmjZklNf
gx5XTFMLHRvrN2Xs1aUP4tKnaVN7x3UjVlMIlHH9MQdaknvfOXdbQTXI9R08
YWmgVQLEleHaYGCojQAPwtCligoR3wLmwf4uxqskg/B6VwR/G7cBpBksWCml
FPDzH3nop18414GCa0YMqrNO/4yzKvoZPmrCD/z5cPXSgWU38G4c5qF19A06
FfujkLOKfgp8GA1g+Ch4w1WYXBPG6MiAVVHKvdo1RZZlbt3zZg3rBoS/D9xI
zmXUUUGDjkEjhrj3dBttzfWpFPeYU9wu8XVgBH5AhcUi+9hQws+VrhRFdsQS
9WkxoYPCtENGlYAQz575KedZSXJvaLdwiZYVVqd24fGOe8MWySHzlKCV4bkc
0n07bjpZ0QHbyQA1xfBZ4PVwp4tbvuoBQLlFUga21cUyl07J9qHdaiuJqetq
rpu6R2D1BiDWWtfU1tc3aENW98jqcvgYByexMptxLRON5msksC2qGHtKj1Zg
lo0/T41aTiRSeT2g5uxw4X5yPX6PxaYMJxYXF/fncLqzOmZEEaoqIkqJfrs6
IHBIP0T3DNMkNf9KSmShZjJX1bOWtiGjvMg5A25+bxABs2enw8FCMdxJsdE9
cp4Ep2j1BpQ4Vo70nHJj84mJ+Dhq0B4qzOeZL7miIKOuP89xwrhaQ82Jeg6p
bcaeaykBL07iJEmdhjUencbDHSxL0LTRB2nUg9B92kCE4NLddOZyUB+8t6uj
xDWEapOsCPrIIU88CvSJqUnQuaWDuzAcjHPeom3fPmzHo5Y9d9EjNBiPxov3
Xz6xiBK9HuM9UtoKRnKaaoePByYdbGDJ/4USisGE0Wkaavs8QCBmT6gMxVX7
0hGOA6HtK4/4FST9/5v1HdFC0K4c0EKwlU+ghdCF71kJsbXmu6L/HXSNzNdF
dHgu6mtQBxCrYe9slXIZJ8fvO+3CPb/ypWvcinTD8R3cUPedGu4wwwpay3LZ
EkZ8mbSV0JBPY+QQv9d1fq/ruPmwcjHwkK6pCavVMTXFYvWbOWSUn4yNoS+h
5KwvkUxH/P/9rF+FGuLj0H4rShf98py5dWytgz4cHZ9KE7Y+Yx/iMey+uAxN
NqorGsAsixLr5tZHMNDFW6c+ThuCLc2imLVwbN5Ylz5i8nv96p9Hv+oFan5I
HedfN2GO6h0vh/WOjQbwqkD5eDmMkAiAZlZA2sSuIK47tMcSqb6C6GVbaDn6
aSI3uy/Y2+9jnwYkeN0YvLq3vKkWOKzE++q0qFHgg9Lv+Awn3QV1DIqSUG2O
LHeEKvvraNbq5TutlYFDD4TS8Yp+8LzbaRxb1A2sxBAcjvz3UmxPkW4cBPLx
TvVpsh75UjyaDErrYsekNxw+hVFH8r36GhU+RzuKsVTWZSRIDULUvwBskoCb
6BAY/M5bo/F6bcg4eC6Gi6S/k4ZzyX2Xag7jLFmsgIEeXz01RyplXxJn277e
Sdy5jqdIsNYkiijU7dKdxn3y6iPiQxzyrWu90kP1xiOCV20QHvQr3W3fW0wN
p6TIICWpeTz3BAXN09ASslYVypYhe+dmvbuiq5t3da5oC8Vvbu9cu4nC30YH
AhfEdg+XNariMX0Tduvo/PLtlU/o9MLYCvth/HsES/wV8Iq/quMl9gldpjKX
by9vH9L9J+mJcvPXW5e03eiNbfy79/mY79HyK0KB9lduipe+BAfyeVaBDMIA
yODQrjfaX4dI9Hd/0DU7HPk+He/ymsi0Ublim3gj1nH1+q/MsiZCOp3N+Prm
Tx++wN9/9ROvRSr+96+799/0bZ2tHurfNvbv65u/7R26CfWnde33dW6lH9p7
v+83fZ6rJdE7iu9pfP6z6/U/++YfRmj1mx5nvOa/a7aF61Dnb6NOF6ru/Ed/
hmd/M0r5Pu8y333PxxjieO8D4u10z7/mplxKOQO8Q1/6/ppA9elEncw/dE+o
S4hI7w/6P1lFrtcDyup8N+oD9TttdNKbwr+gZid2bNrw5Att2nOkGiB2FakD
m9AnfqDVG8MykAa7LYWK4F0IlRKYmwHdDpb0cZZpKhkfBiGPBkwP8rZjUL7c
eFtH6ozxAFlCeR0UgOLMHFjRsxiGSqb2MhXgrPYnZ4gMussql2wSuZbqlEuK
EyM0GZq7nzmtn7qv9EIybIbGPsQlRUVZ68cOM8yhh+5ex4nuMC6kAlCpGQLc
abSEobsFgImho3S9Kau4ynKpirHTe5bzog09aSnswRnT7rZnILp9DaIH6Pdb
l81AlK8H8NGbraoDD3iUyv29e3thw+OB9mZMNZJC+mGSLtpTjqwpAKyk3vQ2
IgHmZa35fwgrVRT40gS8zpwGP1yJTn0+M9ejps+cfJ+a7rG7qldNH/j0ffrV
jAYD33vbmld2t75365r+KsTvuX3N8Bs0tPBuLWzEuu+X5zJ8Y6A4F523oRqc
lvbQb9NIuRlxIixaSbNr2EPJyFzfLq9fQGx0gAOCoDdQb9leXpUwHHdnwBOf
dRNmy3nJwghFDtT3IdDRw7ZR2pLKr+j3QtHAF1PUi7swNr52EImKCVIwszNJ
ARwUAEgI2rXQqXw3W0+zQjct6ji+fIRK4TrLGae61JLoon7gXtCeSkmjyWU7
vtjiiTeZ1KuxCV1SRfTyyTgJqdV5XPzlxPTB1IPZjVNore7rdptxAUl/8Alz
ymFqZzyNlZO8hP47y6TS9V3PunMn486xQjEklFIuecJl+VCclO1Q8fbrj/t7
bu/Nht3RdziAH2u9Ld+NKOckGEcjNmngxtVwSQvxX7/Hmf7LmN8PQns3prjx
OpVOCxzfg8u542PS6Vjli0pOLSWbKs6zrxRDF07IYa1UqTVFggltdq1ispfU
3vzea05rKmo3ragvkwkfNgvgmNH2pw+Pd1xs/VCLVb75YLVo3hK0K2tcURbM
5gKRGPl0mImnLWcm5hgIoybFVZpnmvBxkqIkdmVqSXrC/9Y+G+w8ltpLWUMq
+VmZJdFpG8NCN2kqkC16FZZ8Wm8a4q+gryP6EXEoecb1lTPOha2tKYgHolwa
PTIrYErFkvF3WDASnnsC6nPtG7+dl3KEXG4ZikSXgCU7iymFIZ6zLvNWz6FW
kui02giaN8TuDunQJsVE+eWxcSpwRpvIL9ElJiqe0UQtuTpJMWHgZAJ88sLR
3rGtQiFLz9l6rjpVKZm/upneqqF9Pvr8JZj8rx4f7O3t3n37lquoyJRiGBVK
RKcjXdDXqKHCQmM6NKiQGw1hxv3s+wHcDjWxzcqEcz8mmEyYu94loF8BqVaE
Q8L0KVzqiRoTbMOvVB2IeRFO2txNbeKxTqKau8pdpraizD5Ibmq0fa8bmeCK
hHBo30yZbyoO5vwGORbdoX3G9QDyZWXjLK1WqaT8YdEmUWL45gzT7smQ4jwF
OUxs1FI4PugYvLU1aCmt3KnXq/n0G/1p4ihSylR5fLECpg4OaPAmfltz0Sq5
05t6ixTLVpbSc5RSwHDw8E4PzzEpblltYJiOKmh2aIyVG5dL2SuRRaiiDB7a
xOuNFLJxM6IYOLyTAKnAZOorcSBDhbxkdsjUyd+GJ18oANnbcRZtwyTFvKil
iyWVHVkb2MpgTRItbLKJfWlzF6Pvu640+xsvC4hQdWCcLENuFTHDa89VVtzk
soonL/OeyMHyjeSp+mNMxRGDdpPPM7LtueIsCJds2Xg4CfPVxvaF50Xp5b2q
2S0SQamF+Rr5AKkdFLonggmg8URF4FXx9kKG9Ht+nSnP1uuDw0eLxi+VijFF
k04TvQ1dHXFNcIi0WZWJlk1dY/P0Ze3cjcBKvoRz0uDSZw1uhW9E0aml46s/
+2Wl+YiJUTPUWNZkrB2JZOo6eJBiAH0WcmGKEMbSpZ14Ya2c2bd+UnqLmXJo
9Owr9k01ul078ehJ506s0YQ1U2tvU82ifZ8+zNXXmBG7utgOl69HXxwQCgFx
nC6sfYRuaV9FjipLUCUS451BPzsT62UeowDmUUdfoDxKylNbQOZ1mm6idiMs
CGn6PCuS8tzve1AxnM6Q4Wmw0C4B93VBLRKcwG6C4UWWEGauEol5li1FwoxM
8OeOsLXaDZ+qAH3F54BYq/JPuIqHFDduIv5gc/mKbtne4ScYy1fHSkAy4FjM
BrR4FvqO4bwdxztB0RtkGrjHeO328YaqIfjMfedwcExdGShnyx1n5mGWC9PZ
Pt5Ef4wM+Q+jYynxtKIqrgwAIlxXEwf9fWVA1isQzOY4jqb4WDtI9JlgKXpp
QJKx0lZIDTaYQeHl2HlJyKN6VYIw5yT5B9GLDT4pRwAfLzbLFRU81Bhd67Tg
RwsqgkWfVCgUiRNKeKQjVGEOj1CPr8q2fopPwpdMxt5CfJr04A1yLKE00ogH
qsotqvJ1WmjNgGA4yvADiqCqdSkDsdAcPfFPdy42WzSPMbIPsI6ihSnyS5xU
UaGumRh4fskUHp73gJNGXXFmao9YAZNCyS9H8WnOe2dBcDM/YNE2nF/Z1EMw
c6HFZ71+dNBxV2PqFm3uajGuRIe41k/kEYahkNyjZJx4uSy5Uwsrklh5phUY
ocmzN7xXK1KYfo34oGGeqgWGzKpznTl5zyQKM2GP8hLNN6kfd4rimilfdQo8
nhHFGibRE1uoKO4kYNEjXJp9sHzk4X+cnaJKeztagJhn5SlJMRhbm+F12rb5
15FVooOaOBUJlhIvoVkQ/5Py7UxP3eIiVDsiAklL6oFP3KHbf/ak+fmshzW8
Ck04+I8RJE8CX8b3j9G/r39fXw5KuDae7LIfhD7YP25y7w/3jN/84/d+xv/7
v3zfR3z3N/8n/Pf3ne+vSWVfX/OerztvlUSHYERUzgfPKTCiYHnxDyl+ZiBY
9JUDHxf44dCrf/Nba91djYH7zW+VrQTXIt5G3ulO55/aEVqx0hs9s/ze6Gn1
/552IFz9a2J0vr3mPd923xp9PkwXl//8CztEAwR3LRjUdZ78a6E3IIWbD9I/
hTRW2frrgy9/N/++5TFeSWodKNVq0UyddBQU1ZHVNIykJZTUFoLs2ePxyno8
jjbpEsPBHmzvv5zW8CW6ngfbcbIrz/mkxHOC1m6VoQ1PwwhCrvHlThctuyed
5Ez9TPUeoDoVjJf7r5HQNw+0ydOihXVwGLG9QT0Pph78OQ6JmpORitfW7NZe
xRXYe2DlfCWYFinbBkYpQSi41mTJJSjJ/xc5/9AvqGZVeoJdYdiqQqUlwfJ+
XxkAQGZcnU8Ojx+DenV4eMiq8JP95/vql8ZMZn30Ks03VPAYPf2gfCVlRdpd
gbXVc0Je+LLKXJFJXPEUqzptq1701mh07mK7hidZjolKVJAMx+JfpVEF90L4
4/nh8cGL54/ZYf3R3p3527feauw/Fp3VP91//uNoXSJ913zfx/fv7hKmTUE5
B1ibW5LsaU8flcuWNvTNB0m5nC799wTKMY+cYHG1FeWKS4jDV0mOR5Znoj4d
Mh1tlMFWsfctF+Pw9gfi7mGtdh3PooepNInAPzmO7ws0ZOJ080QC67BCj5go
2G6Q3gxBZ1qxabkdAdoHWSIdUyQ/mEYeg8Uh64TL7Zwt6XpRJheuFMNrdD2R
48a3LCmxBa9LceVidNTPMU9jCsGfl9KyJA87UDvLGY4PVqzTETyIqG0MO3E1
nVVmPLEjXTpTi88/xy1/8uyppQ3ymdXRnx29eO4+nhPJhN4UNKKSrF17Gj/H
mBfbcHjWu0uEph0GGdFEp1ofdH65Q3fFdeoVf4JPpwEwSTgbH1Z0jbZVBV+U
DbBFAiwaXjbhZrpUdyjWChLCdCfCGxcpdVjB6m0Co+HKIzAxEx0VpyChHGGF
JjJHdE6WHAYC+slocvoEOq0ccBQHLmIhKXeLJtOUjqNGQHWuNEh/94Jzy5Re
Y7QI2V6LiaoYPHLhnk1VnmUJ+4KQ/VUOOKpBStpjPKDYgwjvRbenhuW04mYs
DXLOHbaLA14V0CKxAVgZSpVHjokTmiFsGCzTgf3SoSVpnmkpGlPEkSSOXW+O
H6XBZ1RuQj9BcqI3OJpqygk2yyHwTgGX0Wk3ngkptGeaIMJLe8Xm13FVr2Al
OHOdnOOeFeSwlS1cOjWiSWOHPF0GGVEBbxptmZ9JAU6KRxLf4BIvSblBcjt4
+OIVx1P4CPB6secN5p+dFtFpicU9pFE3T8U1MLrgLi7UNRD52prq8VLxU1ij
CUZ8K/e58xHQVzF1pgOCc4/SShPscJGzALtFGkqRnpZgYrNCg2zg3v0794kN
HLP/WTi9bB+BLrH/E/pw47rW7RLsAR11Tr1E9sG8h8uao6dGd4FOAKHVQYCu
/ZFT7koOddxrX8hRtxmemNNmU5sQ2xCCk6ZrqZO6hnddTDzCwSswjKjtPk4C
BpJ5rQOh8qgjqlggLGz1dtv0Jd3UD7a25jAoTjXtnftom8/9TgQnnp8V9iBQ
AeZePNvamwkqzVMor/+EQ8FZ7D1sSyS5IhTnnfI/dnECLlvPtm7PEKSCm9Z9
F1M30bkDnkSevcJUgIFuVrOtO7PoJfU9YKej+7pzq9NORs623R/Ra56ZQ91R
1be2OAXBoXynMEsQeuouY19up6KQXwZHx/g+Tl0msrE0wpgSvKgt9DJu2OVS
BMSTimE7r6CTlgO7QJdxpEhSDHxDX1eK2AxqQpx2mBb7TjcwlKhg6JY17wb9
N7eWmxb4PpDcrQfRm9Ekllvk/4dL9rb2ooOXn0V0i7ng7fB98935LvybzXbn
DBba3t8Z8Xtc6eXYfvgOt+J9Bzs6/b8fHuWlVjH/WBGyWWHR3qvuutwM7/sC
ou1Hw/O7KrXoJi91Mwrf/3fmf/t/XmeZb5So97UfrE9W/U7Ts+G/737z736Q
f3b+1o/wD+Z/+39e599NFkt3lGas1bcu26z3sPFdr0m0fThMbV/7l7bFNan+
mqPo3/ebf2Sm8OnOO3r3o+0fv9Ot0fbjna0RVhayRPexZWVjEzJscviCt6Fv
KhBQ6px6eoVkUnFDNea8iFLZowTl+sA+xfLkyQNiveHjPESSol79bj7IcgVD
ZLUWXxd20n/ieZWB6VWoefkJ8l8eOP7JCrkK/tqqBCRlUS/4hFjhkMKAeCPU
JqSZnUyRKqaItvAJEfbIvRVCYdIzG6uXR3yCBMGf4sXdUXqjRccpUwPq07Ix
vgQkLRVQQpb4hptmgajNOg70052hr31dfNsZ1sEd0EN57EAmTpmTOveMKOj1
jwqSCq6Ecg2BeCZkw6N16TCBVh1M4yrPCHFGRo5ZDHxYVcUXfqhwtGBOjZQc
KquEcxwCjYZKY7YYtRzxhEryqvUzClHYYbkGB5j5CFs/sDYSHGWbfA1GHsX+
0SY2DzKmEGn2PfWs1kaC7H04aQna5tRxnXtW+Xo4oY+tFuWU953VV28wsf7a
1/PwSEdP2A7ZE0YGEwSuNnHer4OHR13vnAR3swJ7IQxzqiJtzsvqdbSAa8+z
BIYPz72zuxs9W2xQ4bRc/F3qkXSk2yWRxfGvVHyEP8NK7M9GGPKbkNt7Bv72
7dvJFvK/wXsWdPVsNsOrxp7s1i54MiwiPHvwpp8PfDp8ZffnWspCxEuG/Hh3
juKM/4//R3/B/wc/u3JFeJG/6f2OajSo8/W17u++7z0rt9f/dzM1+PJ/X2+x
QfC71I/fs579vpXsf5Z/oqyLWhXqbyGHVgXumXd0DZrrt6jutAY/GDjNWK7X
6QWnqDiBnRbtWgoYSE+jiQN/sU5wTuETyQEYdlXZxvaqyBBKCEFAVl4GDodz
lvfONUNXZ026Fn+IFeyZor7s09izZzvJlkWqRRNNLzyrrbmUDlTDMCdAFbVN
WtUbyR9jgJj3sYS5Gah8xCDb+MPL94JVBte5SPDR3By49ho26QMuR0ARuprS
hg3HGnSL6sZEtrAzilEcS1sk6iO3rh7TS5QTdjib3+Ikgz5SpBrJo1GTHGgr
M7EKaa1BVnWncbFpVYQp/AVENHHhAEkUISWV62SzInYukMIKe49J0yIuUw4b
huG2ptTVHvWZUsaFPAd7LAolLZdlKw7PjhfcK8Adr7H6iUnNnlEOmVw1BCt3
YMlYY+eYrTLlZpUR1eJduzYWsaDzc202NoueSOmKjBq6cBQrzi++CsIxyzDI
Kgi7wPUcZFA1HVA8hxPHAfR2+r7aozFMnN+S7J2u877bmAqGg9fSgaX1Tys0
AGbRp2nl0aPqC0feUadpR52PtWOfzDncbVoBNBswZ6g0Jg2lx7DiT1kNhC5M
qHyJIBrgwwcaYhk1XGzAlXuZok8eKFH98naTwqFJc22uZIKLS5fWWT24cxSL
9rsf169n0VHJRVPkuFKzobp/q8ciB7ZA7HztlEEILzWWzFgihVlR6awIzzSG
FccSXJgRFxve01ZViV3BAgteev7ChNqcy79q9JWoUDJDYljhF5KLsI4poLoN
A1Mkra9Ajak4cUWlb5g5OCZKvaONF4myFXdMtkGwzt5I7VvOlAPoMi6cB4Jq
ChU+PqFXEGPg7HpsJCs93oesrxBhTp0k3V7UsEI1c0Fcdumc6l5mx2dfEzz9
vMREVtgsrLlEUUdqD0rdEpfcERFX0zsMClPOJyRCKnG6aFVwyhw5B2YStogs
ymjgGUUElNSKhABbPR9xCeDLJJhJEpLexJe6XIMhnNMGy3AwT8dhBf2gs643
y6QyUm4Uc+bAcYLpOkk4idqf1cykX08uHxi/AoUIiXP8gFrcUTApOjJN3j6n
1IhDzphgpJfpATclM46TjLWwUTyU+YJYDyPdEZeAQsjGi7psiWbAJCZfZ4Qf
oGoOCAzzFJYRMkn1IYskmJg0LZPPJZT9Dn0WCUAkBOxyt3yS2ETyHymhdJPG
rylNygvfOFpkRVyZFn4T39kwlUrl574+DakSmWShjjbfo4374APM/UFVqvWq
I4UCBe8TbCKs1zR1H7xltr8hrkZwXIHXfxRECU0JJeJkms2leTgUh3b4Iv94
zRnTPGw68Ta46ctxS771tZHzV0JEx+5DTP0xVSG+hpveXuvg7h2j+UpA+9h9
W/JVdyoz+Ho2+qDBqwW36u8cAtn+Nnq+O+TIuead+I7t6Fmkn/9dZwH+O/jo
DwYe/jfffPc3X8Mzrrx3yzyF92Z0JfjB/yP/b+8OG4WRxcfXP5/vRGPOuO/+
5n/GUcq//zR+7xav+W/+cdadNVw6PNCxq3lBnz/XPcEH8H9fj/oML7vert81
fvya20f9SuZhyOAfer+MlKm82TO2Ond/w9Tx66eS63tlLK9/fc9NdjW8/tI3
XOkOkR9yQF/jZ/vhztawK2+UW41cbdjSpYMf4Dnj13/t/xrgAeZoDQ/J8hA6
PnDy6ezs7ozeNsoU6HTL4R73fjpu8U04THOc/9MlvlNN7NCBBod88EfPsh2e
POpXI3e5p+PBtQMbPsBDD7hyKUYe+y4HcWShrnPaxm697jEa/EHcyjsqAe9B
BXgPCsC1xf/4qRt56DXPqx5NBAh4GQf//i788+vtYQVh4GiTIIJjfaVwX+yO
iyS6R979nzuLCff86g+2WMTj/Tr2/9g76uMLr8zBnQ1dE3js4rlMxQr+y1UE
+wVdKcMTlrCYX0MZ6KoCW+71N1MEzNW98/X1jfQAWujOHN+jUuCfOlI7/T2o
AtEPpgRcn3dhkOrqn+3DnV6Ba7KZplwfgOImrnfWyaBJhTEGMjspBN+1DAli
SRilmmAraEtjpFPKIiBwOYTWBhZYM1D9hOqncGkftqkfqhlMEZwnptC1mwpl
67Dx/cwDQIeceegBO6fapOp15g4xVA6iSKSSaT3oNdZHaBNHymbiwlvPMzY4
XWXR6BRLkUmB305xmQarOjUSGqFak09pGYfm5cI/lauOLJkWF0H9JOpUSoUQ
4EGoHhLwvLMgBnkzkysfBlfKlGn6Zl/YO6f+i4zRDlfXuxQnEeGkTmxVM3z5
fq0vXcXc5i11SyWgGzHiKRomaRiZc+RiKbWR8ktAsUiC8nhJmXJFr0qtLpWd
rhZlZSoVYUApPpMJrbtrwO6fwJPTX4nzkUxBXm30HWG550j7y7qmlgUdaO9C
4mKqtWs/KHNRJ3bvFMLzn9MlE0yJ4HeLQ4zOWPeGmqkf3cYXfvo4jMOdiSv7
c64jptwUSiwpK9oe2JOE/LycOCWHynrXqJOi0pqWq6E3reLar4wUHLJw/niI
DU3G6s1ieQVpikzRW8ZLwmruUNYIF2kyi+0rsnEYajK2QEx75VrKctPeeEbI
bYZNlCGuKGYTr8vilJ2Fa/Thtdwi2NTdd5X08T2SJCpZQr6SFZ2JUuO3tZQz
cfTBIT1aairBCI+UUfueXIvU5DxOXI85esYJt/TqufkU3uXnU5rQUb2Mc9fC
FpNbDPl4IKRp1in+Rl9Fj4mjL2O6YS8MTa7XZaLV86vM18J2Bfs5miFFPdzG
2LTHUZdr7EjUe0xlP7C09y+5XixFm5nVuzWgBEjJIK3irBauSg+TzZWgrLCN
ESCd61VNgWUtRsULg8hHx9hZSmnyXnghLZt0uW6L7Jfo6PWC1FFVkgnwT0JU
3mfP9chrt/6wqRxK8BM+ietVVrpm2SOU80An5PJ5iTCBCB5eGNrXetvhVYZ8
XXOG7gsm0UMetotgZcCBQCbQVk0detOtDRM0LOXPdifR/OcmXXhXs1hLEP3w
8TCJjHByQfG5FhP8GpMWGwf7KAJPSmwu4Stq5UDCnLd2F2llriWS4vo1xaQ7
OpHHepBwkIDEGGnVkrSCx7jlODTRM1brA15+ZpSwWSRZhhwxUdmflJyJSRma
BGOJ3aEyfEs4GQ6KwMC+l4YpttpZFF9blYo4aslWLR2vsI2kdamwlPp5Rlvl
s9a00znFSSpB6NTIkOBCjaO6iDTy0fh1WnCQTIEJDvSSpMs89mNlAKeW+OaU
VC3Huop9mDCQWXwTbSBDTqj2AJY7HI6hHwdJa27ElLDOyYppwllsD2Fo03WK
xCrgG1llTkqzFcnNV7dn0UspbcDpYFp/cLZ1dxZ9CmOC7zCuLlNAXQ0jrqKl
U3r2yDGUIgqtrb1ZS/XWKlu0XNrJYb39LH0zBBfp5qQyM0VSY145QqKGAGYU
bz7AW6fzt/2U6WHsCzMtKoS3AUEUc0/Pwdajnnxjs+UhW+CqukHC3lA9PR/+
dyrPws+RICuFB4FzeBrzhzEeOw5IiZ52AE9kgaRfxghDE4WB4AJwpOHQVpyt
KBAaKjnJFHU8BknX3HXm9S5vdS/68UOOw8FhuJBkT0rCx0C67dLuXtTtmaOG
xMlALQq7B0FDD2miYZ5FzRIkm78zrGibCnPCcNsCf9uh4zE+1Ya0106iB9W0
xEosU487qeITBIxY5ByWaqlX8YZaQHdXY2TiBiQQGBBoZsBmxabo2zQ+x8vw
DYj9ON4/2nFFB7QvNNaLYLoO6okuxphFtB0WUDuY77CA4h5SYqm68+sBgqEk
qpfSS9kE2bU1jhsHl6ugpk9ZEdZcUEgGmaq7elykWiuO2g84KUmO6bFw207A
OrDPypPRY4/20Pyqh+uDxx+i/aoJLkLfxlKRurCh+V2BjxQiNR0zlw4h1MnF
t53qFHsd6iwhAsl2zABlzpQEN5nPQ7g1itHLA6/HUPfQtcJYEt0qV9QzQCGk
ASPzW04sTFXpgpVmEryclKEjdwJ/RCfQvPmTtiIZm8DGtNUCpRMCcUrh9YlW
hHFgRVdVy5f7oDK5qZZIEHuR8HeqI32VVuUDpRO5AL7Cj7WK84LqrcP+pBWe
0eZCK4twXXEqRF96QKFwgkF1p+gSgBqSBq/TGQmXvIS957fLSYvXi+y0xd1j
jQ0zwOHwJpb9qr2H7CxdAOWik6uiNLIaRWGecekhMFSSM1ze4MpJnybHOcne
DlN6DqohF3HIGodRlR5m8F2a6xKwQSLbp4o2vBgJhfVtZ55b8IYB8LpzLbqW
O09k9IsUpO+Ib5JNhsJSs6maePk6T/ugGmkFg+3LqIokc1hbXGRFXhGLHqpS
NaxgPbsSekRHf+U1WVcGvIdLUu9Wp5kErpctqePz1lQLNZz5iOmRBvFKEJUe
O+qhhFz6gSFtkhlGemDujQrd4AmZO67s7yDA+lX0x9F2BYyxmk+i7371n+GX
bMcqY1bqklAvolV2ysA5es1SlG0+Mkjd/DBeN9c1DVUIGBveSzjIU/btZsgN
89hKsjyuO0j7KnMVUEOe3EGILzuKZreAN8LFnN83PouznLhd59R00NcdI0Sz
EYaQ8o32R5BmjXIkXvne6oM0xo2lluSXw04lJ9HclLftzhmV2AoM6jjXWj7+
pFqbjw1eIQ9RrOGAldyBMcA84v7DGL7aReS+2gCsJjpFKRgxLdE5Oma9AwQr
6nB/CrKduX4crZQ3MPSQEiFPgWtrqVSkxMEyDZf/NHELyn70J9Hu7O7AV/GX
0R9F49nINpxzjbxsDvS+Q7XWd/jXCYX9Xz/Yi/52pDH8fm/2nET+N/8DR1jt
Vw+H1ukH60ob/AvTo3hwP8i/b7d2r6aQ65DSdcgRf4B+w4ggHbemnqKipRHB
H2McBUyeTi4DCmu+mtQyZyrYJjjBed4n1vBQDvCwIAyDenY02DOGQ4EwlOCF
ZiCj7858au9A8We+PdqG5dgxCpEykZ6M6nEw7hFAoFsvoQIGGETdPKRa3ozc
+Ltf/Qd4v+mCI1aK4criXhT37FzKsmfSuGjFhd6nZJ9QTwitO2b8oWZNNLUJ
ryBpC489rbBJ2FfZxAxAEo7UgJsHkRTKK2lAhi2DzSdIrpQ16Hq6X02kd+ZG
onvOtCBuXf0y9XB+13iF1EaePykCHPrRTdjO/nC+QzdbiY6P9AIqbo17nxss
ovMYvfu40cjct1dxznlagTuZFiXpbcQOLzs8V5K4iYDg9x3KVfIvE1XGvw0n
MJebQX64zj2igCxXJbYTFqmKL+BZeDUP4zHrlPJUSLnYOK0XV8Pg3SmITdl1
aYW+ZqqtL9Rdqi10ncn2ymBMoq8G2mFdqn6cYCk+NNaBYAOVsNqD/26LRjh2
tiUa5TL0Y9Pm2jKKKb5mKE///YnVd5aU17/xOld+3RGrVpx+982/db8/7H94
EPz9SIXK+xOp7ywlr3/jta4cF6mDMrT7Yfj3mFjFI7rb/2ge/LU3LmmJZL+n
uKVHBEdue5/88weT6NHO1UL3ZVWeZI3Lv2QxBYYMRYhchyVF6WBdM25xgIN0
TVHlaz6j4uUgUTAsz+GO0fPra51gLZs0OthzQUfH9g/2tr/cMWN4sLUFH73a
Qd7yVQf2C7bRtlo/fMk8vOAwR6RA9KzNt0kOwwOiP6Q/nWjGh/9sPpv9fGcn
2pHclTBV1jBmNZoCCaTlZDTQKRJjIpJgR8s74kVhb0RlsxFbi9TCKFY3NGUo
ryl/txf/a6hUbB0ZK5MDsditaNCI7Vr/l5StmRj9wgN10DrlIsNcV1sLM3eN
O6odw60uJDGe8R+z6DlsPvyaw2ONh83kf6KClXkPiD4uxbcuqRj3CcVlg+RA
L9O+yqgjjxP+8JJ0pcn+nEjc7cs16P7iF19QCUsXJFcP6TZ6DrWzeXeEoufF
6lRAyU7B+yBs6tzdA4UiHbIK0R8U4zXN1JwnVK7xTprAN9+FWjBIC2cwHnji
wLt4ZDveCed4Y6+zxhzH/My3O4E74hUHc3oDHHh1natWfalfxoMFeMlMR7dB
tkdT1+T0nDKjL9KG29RgtmjFOqdEnWpTgpsdItkazuaC4/m8fXhlSvALIoNu
nISLqw97L/uL7MA/boZeY6eCtuVlp5KrDtelLWlPTldT1Ikzu00t8IGWTTLa
biKjbDExQH38SM2q/rnFDmjWkZuUaA3pSgRcL+w8F1PR3QIDaJ6CucBxMLIH
HZZ2cJviY55UelRfYkmpNjXMzFPYJSQkCq9dAjQeBtdAjADnxbStjcQ3T8Xp
uUesBApCjzc3ipcyphKHEq/+aP6wWn4OO7lwJ8QXwVbW5laI8Bu+L31a9LfG
C6QeXMuZhnHblEhbS9wh7+OPCzO/oKsdHHvF2QbNsqjEqwX0gHbDEXZpYoi1
wLG/IlkE5pG+uN/btztdipUoRC3O4TPXqXQAvYrHkUJAvXx5410ctX5ezaIj
7tbArQ3ZA01hiZDHBVLHDfTgtl9k0ScMWgirhpzkzpbW6Ip9gLOwJbzQI9AV
Vj1n/78DRK3YTK6bzoqxVTkP/AYaJuQQu/u0s9IOFTh4QrRkAjDgjydhhzHR
IdO4mnLpX6c9rs1H/HIXbz24TWSs0hjlvQP1xQH82Q10Em0m3i4GhYzMehr9
A9yFP4420YfRx066aRPPEfF2561AaLKg6TXDAci3Iafd+2dMQaI6iLLREphg
K7Wy7EJVdkyjRM+ThuPCuFjUn407k3K5gk7AVqus9/TcU6rZTwM1spL1qa7r
ANS5Z/AtLuuEMSpBtINfzaFNQoU76TMJWkjbsi59pXNikPVTLnVg4eB9kP1l
65I5bwMtgETTsLKSCamWJ9KGVakA7IM7QBmP0nqDBov00XUKuvfsBVFGDT77
svfECC+4NYYcWOHT/WOj9QzYjTPU1oO9WZjGkFLdf+ASsQFfSoXBcDy2xo7E
XtWlxS6YZUZmITkZCexUlhKsprZZvNpXtUU24XhBwkj9TCpRVZsHI7MzpSUC
Ad2sQogFE9Kp1KMqhCYlO+W4s/bayTF2LNTgGGVpXLgdd3jZbXOayUNyOMg8
OteuN+hcY+DNuNuIOzgtyioNXpVcFPGaDiOiSm1rSzijp6f8Wi53RQWf9L51
XAAX43IetDdOp8BWQVLopHGwvM7RUyykYFjxibWX44qi9A/GwyDguTTMEzLj
ePPmaJXt7e7d6fUziTvKm+OIvieyD3UPntsgsD2icEpTEWMfi+apx1C9C0kV
n3vC8y1jsBUCmkEESPBDE8Q3qmAp9l4mKesYAD5UvLQGbhBTzlS5zJwnR3nV
GT5yAPpfB2eGUdbm7PJ6jZoOEoOXolWCn9/k2nUUu164GiKGocWul4mOYhI9
njjNg/SvbeXIWMCqWMKUf4GFhrEzNqY6iP2+oyVoeeQaO9AkBhYeXgrHSGHs
D8GIhXs9iG+HEFOQPWtVqjHbq6Nyw2liC7T6qbSaFp0l7PcQIp3VKMaEM8Cr
bteuAl2vQ7cC5EUf944oh5KSDr0hnK3PY/2gseKxzn83BKpd97Y5JVB1MOiZ
9QxWBqLu59WV05OB/Wg84MtX5XKpBFiwRXQhAyF+6SHEY4rRXa78ol4dKeXr
F7qDakG6xPJn3GOHdQi2TqIV/j/YF9QfPUg8SCsUnVPtFdc0nsJ156ZxOOit
PAmLggapfnciiEg/vpKbmPmqX0O+ievA88Ey+JRTtJy/xT+F3QokWmLXw34M
NNLjA1guLEldwUrTLo52FUWsB6p0Uhq0m1AsEUGpLnhaYtceBhGZNUJlVhvM
D0LJLdcmseKIY9Bl4HeeZ8AGBNCk7q8/eZgNhIYnn7l4PpFsChXi7XoxAKNR
O08IPbyKM9GcUOsiSeO9iY2mMdMSYxbdLow3tvf7rvJ4+20zRAKiNZwqJrqA
RwwZ+D7cdqf7VsknGHpPzTYMskdabWS1PepAn0iiBpZUgmo4+UaWdEL6k7Rv
74YgqeYe6pQKLSSiShJiE2gUsMvKFOx2/tFebJEMANxh7LSUZBhOrVfi+0AZ
TE0aS5hAUKqVq9qdFlnTemnIIevucWQ5xKTsILYONCalEY11kdV63LwU7pOp
JiJLJVKHA0BRepKdNCuPoS7p3B3ctQuYJOzmcPnNzNdiEJXOBPWN7SUlCskN
iByJECmJ1Is7D2Rtc9RuFMWGz/Htx1MpktaUZc5FQl+TWw2RVVh/kNHu1pjr
ui9VepNCLUzUhTuop/eGc4smWk9SwA1qSjETR5+4yzMSv452tESeetKSowDR
XUCHpRY4dMk8mmoq9MUYfetEwmfVKyIp4XgqSaXOGDWK71YXHMTt0xoK6AKe
Six/xDSwy8XZ4pShLKY0KBsJNo1wsld2Mz1jzVtH6qIaqu8YxAeYDRzFA1F+
Hl9M/KlIxVuRmdxROQ7Mji8CXuzEmGaksne1bsHCINbH6YrYIO0LJhpucmbY
jwJmFimaCPP/Vl1rjnVEuBDwCuQ8i/IsFVwsJzIJIXGHUcpc5+chM2nXnTAa
sUIf+ZQq/Zo5FCsKxLmvjtr1dpJRfA8Nj7vwC8bwIorifQGa6c/o7wQP0Vwj
fNf56+fy9xdwxij8p309HxNz+ZxVKFz0fiHDNx8QB5ousqTvElKUjodhWL7h
hJXkWnY4m/C0yrAKbykPJ2zJefSspb+ID1kvc6qk05AfynIezDEaCv8BD9o/
O90+uIN60o4ERQWCSVn8bCYREUx6jlZ7oXeEWpCry1b1w3Xx6UGFSixK5/9y
gGr2p2y7u3v8fGdinRAZu8e52CtqzuJd5CoGzpJDi4/PGh1DP2M6s2CJle0C
Bo1QdsTSq+u/5xRIsJSAskdeRYIoI0ceXpnOgoh2rwenDtpqnnNVa9R6YTHC
JeFZm5gPeRoZhC0K0sQK+QtNxZFYoV8hFIjOTiN3Si0yTa1wMqcCzhsY0ES4
IxpkkCMYHSE0gVzjoT8D64TKV9PQ1YEWx4tHL9yd9BjsUNx7BDwji4t44H6c
meuKictZlPwILiaAondrOp1SnQZ8PNkdjzBY95g8czV2+oU/p+yoc89kXSr7
0jE2BTpQy0qpTekjL67N4nEvKINi6v9r79qa2kay8Du/QlXzYmoxgwFDkjcg
ng1VYZYlkJpXYRujWmO7LDsFtfnxe+59WhfAg2eWEGlqkmDkVqvVOvfzffPl
hA2I0Db+ry+nsJ0ecFtwnJHqpicidiQ4CAbQUuhAjzkbj6rGk2eKEGfZq0gG
CwQTjrJ3Q2xOAk9Z/BLcq/ezcSo9ESg2e9EZeoPnfF8IEwo/tqNhEK0fz4Gb
yz1VL1GsBvdlHrWX0yqo5WA+OoIJLCdKyc3Lsu15BXM1xrmT2N0P3nVpAW3d
aCb8JtyCz0ZAFhSEI2U5vEdxpbgNVITXZ3xzMXW25RYdpSsmRFA9clvRDbyL
HKJd5KXdICTKHJIV8l8TDmqw0M2y0cgCmW+Ggomn53aBVNtBUC5ZqBNNLV2g
McblXDZTL3B2ecUYQPiKZ/1h3B4Fc55RzQBayZzhS9mXJFPA1eV6lkfmNFdk
/NCJftDd6u51CZE9T1rM4mr1LOVnHD8TBuDnbrzNKDTPl8M4X/BrFLbfTHx4
cA+8CHiHy1xxVlL+sJ7iCQtNMMzfz7DacivBwgOzlK2jcDJVJBcJk6Qa9uDt
5VqSlHdYX6LorSGnmKMftGMYAJ7Nrx6OBM8tuURM7xb9iP/cVHd45/5w96Cb
tHbfJ7vvulrHIr/MFDR6lFEAhkBtaq4EO8t2q439/hhMsu5LhqVdTqUexdFx
3k+OS4LIyR0no0n88O6LRLU9iaGFn2WPIi46lS1xUJKl4R3ZqlQezQSr4LIv
+wuiHsVIAfosjtEimS3neH9IvAVjlIaHex5lE0X96RwyFwHvarlb/kHI0sRE
JhtrO+nhm+aGE0z/iTuT2WOXfcy/U0SKEyJacJAP9ROBKOHRKMmKlmvOIUEU
VFgPxUX34Fnj2xeMUgmdUsVUkNUscpVnhXsRwfIpr0HL8Q1vwgAg2GVB6srT
5GV3XLd5RLMMyq6fLnOD1d5SY86uX5C0rrKbCTrAzBsLJpTT2cp3R2U4kg2Y
Tgdi3Gkpj0BUK3+uV0L0FFG7Kh2Z8azI3swptwLb+JdgCche/sQbId7KvDtg
J/cIqccvLhV05oYopd3lj20yYXjJnf8S8o+TId4VIo5TtySaxKjKQKWIUTq0
K4eASB/zM9IcrfVlYX3k6jqYgYZE+7dykaxq1QM1VDSCVVUKdyo+2634bA+/
3oFf7SX7STc5SA6Td8n7VT7b+Ef7hf9tfE++Jt9ZnsPfF/D/asf3pDyJFYfA
Sbzs+L5RuuYXKTE+VcKJOeiO3XfJNRhCFcCHf8kcVjz+ijn8mQ1RGrN0DlWl
b3wVMvrW182ND/ym7bavqcuGRPXtdDwolxlwihQ/VTJ7FWIaRvWESfqZulBS
gsgXOLv6cunChChU0BdGkb9D4SXY1TqzfT8zcAg4qoSOzIjKlQf4josTRbqu
7/KlNqPYnVPqkTi9YN/OP2wk8Ja2k949JYhBdB9ZAOFCAsKonLCovAPnnWlK
ueK0Mz5tF047zgZJ6/j0I/68Bz8fkRDk1W0dnRBr9j58foFMGaDsWhe93/Cz
Ln0m9XHUAnXRO8dfHMAvQPrPF9dgGSatT8eXm0h0RrYGXOqi+vGSYSvnsPil
TBuqRVK28nDwicjzKL+TOnDnoD0F/35R2jkeEC6Qx6hasYngmgsZLuKY4c4i
LADBNBuDI9Wfjubp7BaDBMh4gbbwtafEBflw9RkWFfQB/n2STlDRHyX4A4e2
bJLuO5x1BL+MS2aweDa+FZzT1e+nf1CJNSjJuxnqnLtsDLYHtfxJ5UbS2Sl9
j0PAVLwqUKP9+cNsEd8IxiaU8IpsGfsSdVeFKjun9tEgEq3/319chRyoefiN
92iL1lSyo0Vg/qxcQthkmTHkniU8DHQMi27RZNBUubNhuFBKHzNaXxMG7boD
q5LgfOahmoNgCQo8LoIgaMirSEtVnScMdSKhrIigEKlqhP0xyS2HV5qrxXz1
Xz4MtEfxHs2LvG9v1mhI6EYao2G9c1jxeKVGA7ZxwJ+fs8+8QZ7edDiGYmKj
vgibai0btvYI19ytB8R+xvzXM4e9R+dQPwIdL5rD33Gfzzpe5zshR3hS+6iU
urWP682swxr3w7mERMECHS1u7Rovn8MTI9Svg86opVnomue5jnVgp8na21rw
LzOs96r9prL5YjnKYkvH4Yq9GIfBis2jzoVi79elz4xq8fPSk4KW69gCDHmm
deWak0aoo8d47Gqj4BYX66dzQnNWMrrgLmqzXX+aTfp0e+k4chg5q6ItC/cp
ZYldjZFvfSP/j5MMrfOT803FUU5Oe71e8m5nd7vz7+RbNkcOuwSLucZoCqeW
1mh9/Xz0+6ZEvtjGlCw6LV7KLXUI+GUY/vxatEBpVm+M4aQ/1cp9eYfEQbWE
nFnJXEyrz7hfHfpKufaeRt9OPhazVOk1QoD2XT6Em3J4oxVqJB3UMSYTpVkg
HQyw0VqnS/sHG69Gw9CtM34geBApPufSYPfQon1KEWhG1KbVKAJ2W2LNIgcR
pLg48JifpKlIuqy8oMH2t8cjq/ScEIB5/3xgDKAj3p12LNmDkhVS6Gqq2B5Z
XN/GQMd//3ljnJ5/2y9AAQQWLAwYHDxvnLOjk9phML7QeeY4MJ+D2oG6Kwz0
8eOX9j+vwB0vDhaCFbxlXhiyKAWSdA/ooKotdNOU5TbveoQ6Ca5E7btaW5XP
75MKPGvr9ELvsrB1fVTEguiha3M60LpAvWpR/NC3P8RRN9vmhBhhWXG+rlUb
+VudhzW4cb42rKWqXL5ceEy8A0qROXvUVWJPx9KQib5/2SIKEGGFg7TE261T
WMowdSXXLMNxrlCXvaV01ljZeo+hNipZjAAuYpd/i3lqtWEWC942w50/dxNV
lyo9vlV8Fr9yq5RZJOragEELjjKGfaeKahiOqJPDKluNh4I+SzoFdk3bcaoj
Locq8P508m04l4JBzHb5ZNSZj0rd+ajU2VNRqc7/JSrFYSGGzXLlJFjlE0oO
LJykxfg0BGhVep+3osCTe02i3t+K7bXO2BeqcOpFs6lUTP+RaFheHw7D53AW
pp6/5WgYTrqJhq13DiseTTTsz8zPHU007O+7z2cdr/OdkKOJhr1gPzTRsCYa
1kTDmmhYEw1romE6UBMNa6JhTTSsiYbBTI7hzbZo2HU2CNEwT4UbqKp9mAXb
c6mZsEjB/AT5cO0K+PhONbgnlekL7RBxDktdeA3dp4AL403aE0HAxTKjrEf7
gM3PiELJDewdVg1kkxjK+4JBWqRgjrY1rO10MiwahJOpt7yeYsSqJu1EJD0W
JI/ZcCbh6tZP3s7yrXsO9WJhvzu7TWdrzXqW/yxF6zzBJuK23jmseLzWiJs7
yr31SFpfnMMaNiUfx/VjitdbmlAoUme9/zxxxyo5L3AJpiUXFCUi2QETozJ+
TBbiGFRRLmh4NcLQC0LEpBmmeYZUWgv5du7lYMZ0k07c0+wfPNqWmSHi2To4
CPWlQOktxwSJ4DXl0clJ0JRw8aApT4uc4jD1m4XS+ZX0GPVSGjJiwS7dcpTx
ipGCmGFTbDFMRymrcQ8fOf4Po1dSBgcutkgI3Y85QCmOMGxHCDwDRAZwFIVZ
3sd2ZBh4loIyXcJ6jEPDJ1+EUBNj5G5qvlPGSYLd+5YKdXpURE2E98ghggvM
KGxiAz4IHHsh1wUyiP3ELIcJMfQULr7T4JfOxgpdycIwfj0dPETwk8TRPrEW
RO3lXchDpaADuafYyYlkzQPPdeMZwwZRjwmq8zTPpV+xrolgK1DozdK5raLM
RpDlfobE1V7SqNF1z2HF45Wq0VoVFjpIe78F4Tsf3gThe4KANNLOqW+0uYSZ
SKjKPPWjcpj5iYTwE2UpOqUgWBWzLrvhPL2S3ZakmHTkwxWwiz+lOzC/Kdeq
gSDIKShYgvZi8b79MokX2DNF4xeppL3LymTL5IV7gsVIuC2MCvVmKV3vBo4u
gUKGEQJ98pYl2n7SSLR1z2HF4weWaOdeos2CRDuKyVIMv0NAEAPyeomSocB4
G6PPYb0QAyqTjYMySbCbPX2bkWpP6XoKgwwuwpRa88l6mXoAeMKWGQzHXNJD
SHUeWJKyDHIdBhjn3EZKKxDMdEHi4wAQhUACe3LuwFLNxGariixFButyBVgg
9PvpIGBSU/NvuFwMYuxFvkD2ONvXG+aFsJMT6XmF1LbmfsmDMLyCm8YWQ7Bu
RSZmXrjRqA3U5KxguywqtYLgH7hAksBeeOAtn8CJ1UVY65+gtxB5cxsRvt45
rHj8sCL80/FlEOG314sgwo2GdD4cZxrxMECkRQG+hZ1mHM2kCTrGM4TCHFgD
Ntpq3J4d6IKoEzxYjkprUJKWlfKOWZ8o/T5su7SVXhfnrEjd6LnCJ7PUmNVu
rZNf5Y/WKZAEFImP+gMk3q+RqETb2ZFiUNR5Pp3NKG/D14NJpdlcmSxyZhA3
LHy5K0xtMHZZ+BoVFeh3A0HVVojuu3VWdqzRCOslFsPgCnCkBFmq6HEp8q9Y
6lxsgAoRRWYBvkHzQaKmLNwgpEjFOMHERwMEbTadw+tKTo3nWGL1b/cuKTpC
bxJ4WFtSxMOscwdKu80pDgyWiT/xloX+QdII/XXPYcXjBxP6/wMb0sPrI/MB
AA==

-->

</rfc>
