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


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

<!ENTITY I-D.ietf-rtgwg-segment-routing-ti-lfa SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-rtgwg-segment-routing-ti-lfa.xml">
<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC3209 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3209.xml">
<!ENTITY RFC4090 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4090.xml">
<!ENTITY RFC5440 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5440.xml">
<!ENTITY RFC7490 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7490.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8402 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8402.xml">
<!ENTITY RFC7942 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7942.xml">
]>


<rfc ipr="trust200902" docName="draft-li-rtgwg-tte-02" category="info" submissionType="IETF">
  <front>
    <title abbrev="TTE">Tactical Traffic Engineering (TTE)</title>

    <author initials="C." surname="Barth" fullname="Colby Barth">
      <organization>Juniper Networks</organization>
      <address>
        <postal>
          <street>1133 Innovation Way</street>
          <city>Sunnyvale</city>
          <region>CA</region>
          <code>94089</code>
          <country>United States of America</country>
        </postal>
        <email>cbarth@juniper.net</email>
      </address>
    </author>
    <author initials="T." surname="Li" fullname="Tony Li">
      <organization>Juniper Networks</organization>
      <address>
        <postal>
          <street>1133 Innovation Way</street>
          <city>Sunnyvale</city>
          <region>CA</region>
          <code>94089</code>
          <country>United States of America</country>
        </postal>
        <email>tony.li@tony.li</email>
      </address>
    </author>
    <author initials="A." surname="Smith" fullname="Andy Smith">
      <organization>Oracle Cloud Infrastructure</organization>
      <address>
        <postal>
          <street>2300 Oracle Way</street>
          <city>Austin</city>
          <region>TX</region>
          <code>78741</code>
          <country>United States of America</country>
        </postal>
        <email>andy.j.smith@oracle.com</email>
      </address>
    </author>
    <author initials="B." surname="Wen" fullname="Bin Wen">
      <organization>Comcast</organization>
      <address>
        <postal>
          <street>1800 Arch St.</street>
          <city>Philadelphia</city>
          <region>PA</region>
          <code>19103</code>
          <country>United States of America</country>
        </postal>
        <email>bin_wen@comcast.com</email>
      </address>
    </author>
    <author initials="L." surname="Jalil" fullname="Luay Jalil">
      <organization>Verizon</organization>
      <address>
        <postal>
          <street>400 International Pkwy</street>
          <city>Richardson</city>
          <region>TX</region>
          <code>75081</code>
          <country>United States of America</country>
        </postal>
        <email>luay.jalil@verizon.com</email>
      </address>
    </author>

    <date year="2024" month="December" day="03"/>

    
    <workgroup>RTGWG Working Group</workgroup>
    

    <abstract>


<t>Conventional traffic engineering approaches for resource management
used by RSVP-TE and SR-TE often leverage estimates of the ingress
traffic demands, during path placement.  Unforeseen and/or dynamic
events, can skew these estimates by significant enough margins to
result in unexpected network congestion.  Recomputed paths that
address the new demands may take a considerable amount of time,
leaving the network in a sub-optimal state for far too long.</t>

<t>This document proposes one mechanism that can avert congestion on a
real-time basis.</t>



    </abstract>



  </front>

  <middle>


<section anchor="introduction"><name>Introduction</name>

<t>Conventional traffic engineering approaches for resource management
used by RSVP-TE <xref target="RFC3209"/> and SR-TE <xref target="RFC8402"/> often leverage
estimates of the ingress traffic demands, during path placement.
Unforeseen and/or dynamic events, can skew these estimates by
significant enough margins to result in unexpected network
congestion.  Recomputed paths that address the new demands may take a
considerable amount of time, leaving the network in a sub-optimal
state for far too long.</t>

<t>Ideally, the network should be able to react to unforeseen congestion
events and attempt to distribute load automatically, avoiding as much
congestion as possible. Such mechanisms should be usable to compliment
the conventional traffic engineering approaches.</t>

<section anchor="REQ-lang"><name>Requirement Language</name>

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.
These words may also appear in this document in
lower case as plain English words, absent their normative meanings.</t>

</section>
</section>
<section anchor="real-time-congestion"><name>Real-Time Congestion</name>

<t>Various economic factors of operating real-world networks at scale
require network operators to run their networks at relatively high
utilizations.  While legacy shortest-path routing is helpful in basic
path placement, it does not consider the actual traffic demands on the
network, resulting in highly utilized paths that can quickly become
congested.</t>

<t>To address this, network operators have adopted various traffic
engineering (TE) techniques whereby an input to the path placement for
traffic engineering tunnels utilizes a bandwidth prediction and/or a
demand matrix, with bandwidth requirements for the major sources and
destinations in the network.  These predictions are typically
estimates based on historical telemetry and capture network and/or TE
tunnel usage.</t>

<t>In a more sophisticated view of network demand, a bandwidth
requirement can be more accurately viewed as a function over time,
with the demand waxing and waning, frequently in a diurnal pattern
driven by human interaction. Periodic demands may be driven by complex
processes, sometimes scheduled, sometimes in reaction to external
events. The salient point is that the elements in the demand matrix
are best regarded as time series estimates. As a result, a traffic
engineering solution is a set of paths that may themselves vary over
time, requiring a periodic optimization not only for a static demand
but at several points along the time series.</t>

<t>This problem is further compounded by the dynamic changes to demand
that were not anticipated in the estimates. Traffic demands may spike
or ebb without warning. A singer may announce a concert, causing an
unexpected demand as the ticket vendor receives a wave of
traffic. Events on social media can cause an unexpected storm of
traffic to the media's servers. New product announcements can cause
streaming sites to become overloaded. The results of which MAY lead to
reoptimization frequencies higher than is practial for a path
computing entity.</t>

<t>Network resources are also not always consistently predictable. BGP
next-hops change, links fail, hardware fails, and software
fails. While traffic engineering tools can do contingency analysis and
creating protection paths that should mitigate potential congestion,
this is typically only done for single failures. In the rare event of
multiple failures, traffic engineering would be forced to completely
recalculate a solution, which might not be available for unacceptable
time periods.</t>

<t>All of this leaves network operators in the very uncomfortable
situation that in unforeseen circumstances, they may find themselves
with a congested network, unable to meet Service Level Objectives
(SLOs) and potentially in violation of Service Level Agreements
(SLAs). Even more confounding is that this situation could happen even
if there is sufficient capacity in the network to support the actual
demand, but it cannot be implemented until a global optimization
computation completes.</t>

</section>
<section anchor="real-time-tactical-traffic-engineering"><name>Real-Time Tactical Traffic Engineering</name>

<t>To address this issue, we propose an alternate strategy: real-time
tactical traffic engineering (TTE). This would be a set of mechanisms
that would allow the network to react in real-time to avert congestion
and optimize traffic flow. This would work in conjunction with
traditional traffic engineering bandwidth management techniques,
alleviating problems while optimal traffic assignment is being
recomputed.</t>

<t>Real-time traffic engineering is a practical approach to a thorny
problem: full blown optimality is very hard and can take a long
time. A network that can organically, dynamically, and quickly adapt
may provide a significant performance improvement while optimal
traffic engineering path placement is in-progress.</t>

<t>TTE allows the network to dynamically distribute load if congestion is
anticipated. The goal is to simply shift load away from congested
links and then, if the link congestion abates, shift traffic back.</t>

<t>If traffic is on an alternate path (i.e., a TTE path), then it has the
potential to create congestion elsewhere in the network. Bringing the
traffic back to its original or recently optimized path resulting in a
network more aligned with its original, near-optimal traffic
pattern.</t>

<section anchor="recognizing-congestion"><name>Recognizing Congestion</name>

<t>For TTE to operate effectively, it needs to understand when a link is
nearing congestion and conversely, when congestion has abated. Each
link that is protected by TTE is sampled periodically for its current
utilization. The boundaries of acceptable utilization are defined by
high and low utilization thresholds. To avoid oscillation, the link
must be outside of acceptable utilization for some consecutive number
of periodic samples before any action is performed. Further, the high
and low thresholds need to be sufficiently far apart such that small
load traffic changes will not cause a shift from high to low or low to
high.</t>

</section>
<section anchor="flows"><name>Flows</name>

<t>TTE manipulates traffic flows by changing the IPv4 or IPv6 prefixes
found in the Forwarding Information Base (FIB), or by changing label
entries found the Label Forwarding Information Base (LFIB). For the
purposes of this document, both IP prefixes and labels constitute
'flows'. A flow may have one or more paths to its destination.</t>

</section>
<section anchor="backup-paths"><name>Backup Paths</name>

<t>A number of mechanisms exist that potentially create backup paths for
a single flow.  Typically, these backup paths are used in case of a
failure of the original path and allow for a very rapid transfer of
traffic from the failed link to the backup path. For this rapid
transfer to work, the backup paths are placed in the forwarding table
and then marked as being in a backup and inactive state.</t>

<t>The key properties of a backup path are that it cannot cause
forwarding loops and that it avoids the same link that the primary
path is using. TTE makes use of backup paths by turning them into
active paths in parallel with the primary path. This creates an Equal
Cost Multi-Path (ECMP) situation where some traffic will be forwarded
down each of the active paths. In most implementations, ECMP is
implemented by hashing of the traffic, so each path will have roughly
an equal share of the traffic, however, statistical anomalies are not
impossible.</t>

<t>Potential backup paths can be computed by several mechanisms:</t>

<t><list style="symbols">
  <t>TI-LFA, RLFA: Paths computed by Topology Independent Loop-free
Alternates (TI-LFA) <xref target="I-D.ietf-rtgwg-segment-routing-ti-lfa"/> and
Remote Loop-Free Alternate (RLFA) <xref target="RFC7490"/> can be used as backup
paths.</t>
  <t>Fast Reroute: Paths computed by RSVP Fast Reroute <xref target="RFC4090"/> can be
used as backup paths.</t>
  <t>Unequal Cost Multi-Path: Interior Gateway Protocols (IGPs) that
compute Unequal Cost Multi-Path (UCMP) paths can be used as backup
paths.</t>
  <t>PCE: Paths computed by a Path Computation Element (PCE) <xref target="RFC5440"/>
can be used as backup paths.</t>
</list></t>

</section>
<section anchor="activation-and-deactivation"><name>Activation and Deactivation</name>

<t>When TTE selects a flow and makes appropriate data plane changes so
that traffic is balanced between the primary path(s) and the backup
path(s), we say that the flow is 'active'. Similarly, when TTE shifts
traffic away from its backup path(s) back to the primary path(s), we
say that the flow is 'inactive' or 'deactivated'.</t>

</section>
<section anchor="downstream-congestion"><name>Downstream Congestion</name>

<t>In a carefully traffic engineered network, any change to the traffic
flow may have an impact in multiple places on the network. When a flow
is activated, it may shift traffic to an entirely different path, not
just around a single link, and the change may result in congestion
along the new path. Networks that are engineered to support protection
against link failures should already take this into account. However,
even this backup capacity can be saturated if TTE activates enough
flows on a variety of links. If TTE is also deployed along the backup
path, it may be triggered to activate further flows, further
distributing the traffic load.</t>

<section anchor="tte-specific-paths"><name>TTE Specific Paths</name>

<t>In contrast to re-using traditional backup paths that follow a
cumulative least cost metric to a merge point, in the case of RSVP
Fast Reroute, or a next-best shortest-path, in the case of Loop-Free
Alternatives, mechanisms exist to calculate paths that consider
unreserved-bandwidth or residual bandwidth.  The resulting TTE
specific tunnel(s) MAY be less likely to result in creating secondary
congestion.</t>

</section>
<section anchor="rsvp-te-global-reoptimization"><name>RSVP-TE Global Reoptimization</name>

<t>The goal of TTE is to locally address congestion as either a transient
condition or until a more optimal global reoptimization can
finish. RSVP-TE networks offer an additional option.  When congestion
is detected and flows are 'activated' an RSVP Labels Switch Router
(LSR)could trigger ingress routers to reevaluate the input load of
LSPs traversing the congested link. As per RFC4873, a code for "alarm"
with sub-code "congestion" could be sent via Resv using AlarmSpec
objectif indicating a congestion threshold has been crossed.  The
Alarm can in turn be 'cleared' when the congestion is abated.</t>

</section>
</section>
<section anchor="flow-distribution"><name>Flow Distribution</name>

<t>TTE is necessarily stochastic. Since we cannot predict flow
utilization (and thus link utilization) with absolute certainty, any
flow selection is necessarily an estimate of future behavior. TTE
assumes that the flows on the link have a typical Gaussian
distribution and that there not many 'elephant' flows that have
requirements far above the mean and not many 'mice' flows that have
requirements far below the mean. TTE also assumes that there are
enough flows that the Law of Large Numbers applies. Our simulation
results suggest that even 50 flows with a good Gaussian distribution
is ample to meet this requirement.</t>

</section>
<section anchor="flow-lifetimes"><name>Flow Lifetimes</name>

<t>Ideally, TTE would only manipulate long-lived flows, as activating a
short-lived flow would be ineffective at redirecting
bandwidth. However, knowing the lifetime of any specific traffic
stream is effectively impossible and the lifetime of an aggregated
flow is also unknowable. Historical or policy information could be
added to the approaches described here, and this is a matter for
further study.</t>

</section>
<section anchor="flow-selection"><name>Flow Selection</name>

<t>When a link is outside of its bandwidth thresholds, TTE must select
certain paths to activate or deactivate.  TTE can select one or more
paths from one or more flows. Which paths and flows to select is a
critical decision that strongly affects how quickly TTE converges to a
solution where the link bandwidth is within its thresholds.  Ideally,
TTE selects the right paths and flows to activate to create a 'working
set' that avoids congestion.</t>

<t>When a link is above its high threshold, then the set of candidate
flows for activation are those flows on the link that have inactive
paths. Similarly, if a link is below its low threshold, then the set
of candidate flows are those that have a backup path that has been
previously activated. The task of flow selection is to choose the set
of candidates to activate or deactivate to bring the link back within
its bandwidth thresholds.</t>

<t>In the following sections, we discuss several different possible
strategies for flow selection. There are a variety of trade offs
between these strategies and the selection of a specific strategy is
implementation dependent. Many more strategies are possible.</t>

<t>An implementation may employ policy to restrict the set of flows that
may be activated by TTE.</t>

<section anchor="random-selection"><name>Random Selection</name>

<t>One approach to flow selection is to randomly select a flow from the
set of candidate flows. This strategy has a significant advantage in
that it does not require any tracking of per-flow bandwidth, and thus
has minimal state and overhead requirements. The disadvantage of this
approach is that it may not converge very rapidly. If the discrepancy
between current bandwidth and target bandwidth is large, it may take
many iterations and many flows may have to be activated before
sufficient bandwidth has been moved.</t>

<t>In this strategy, overshoot is a distinct possibility. That is, a flow
that is selected and activated/deactivated may shift more bandwidth
than is required and may cause the link to shift from one extreme to
another. However, this is not seriously problematic.  Subsequent
iterations will correct this and shift bandwidth back. Since each flow
selection is an independent event, the odds of continually selecting
the same flow is inconsequential, and thus, the odds of persistent
oscillation are minimal.</t>

<t>More sophisticated strategies are possible, but do require that we
track the bandwidth utilization of each flow.</t>

</section>
<section anchor="no-elephants-selection"><name>No Elephants Selection</name>

<t>An alternate selection strategy is to try to select a set of flows
that will shift the link bandwidth utilization from its current level
to a more comfortable level. We define the 'target bandwidth' as the
average of the high and low bandwidth thresholds. The objective of
flow selection is then to select flows that, in aggregate, amount to
the difference between the target bandwidth and the current
bandwidth. We call this the 'target change'.</t>

<t>Flows with a bandwidth bigger than the target change are then
effectively elephant flows and should be discarded from the candidate
pool. Flows are iteratively randomly selected from the remaining pool
until the target change is satisfied.</t>

<t>Intuitively, this seems like an effective strategy, but our
simulations indicate that it has poor performance. In some situations,
there are simply not enough candidates in the pool to meet the target
change. As a result, this strategy may sometimes not converge to a
solution. From this, we observe that it may sometimes be best to
intentionally overshoot the target by selecting an elephant and then
converge by an opposing selection of other flows in the next
iteration.</t>

</section>
<section anchor="maximum-fit"><name>Maximum Fit</name>

<t>A similar strategy is to first exclude elephant flows and then select
the largest remaining candidates to meet the target change. This has
the benefit that it moves fewer flows than purely random selection. It
still suffers from not selecting elephant flows if one is necessary.</t>

<t>Moving fewer flows is beneficial because it is less disruptive to
network traffic. Every time a flow is moved, transport protocols may
detect a change in latency and thus a change in round-trip time
(RTT). This may be misinterpreted as a congestion event and lead to
congestion avoidance. It would be beneficial to minimize this impact.</t>

</section>
<section anchor="minimum-fit"><name>Minimum Fit</name>

<t>The opposite strategy is to first exclude elephant flows and then
select the smallest remaining candidates. This has the unfortunate
issue of moving the maximum number of flows and retains the problem of
not moving elephants when they are necessary.</t>

</section>
<section anchor="best-fit"><name>Best Fit</name>

<t>Analogies to memory allocation problems suggest that selecting the
set of candidate flows that most closely total the target change would
be a possible strategy. Unfortunately, the number of possibilities is
the power set of the number of candidate flows. This can quickly
explode and become computationally intractable. This strategy was not
simulated.</t>

</section>
<section anchor="maximum-fit-with-elephants"><name>Maximum Fit with Elephants</name>

<t>This strategy is a derivative of the maximum fit strategy. In this
strategy, if the target change cannot be satisfied by selecting all of
the non-elephant candidates, then the smallest elephant is selected
instead. This strategy showed excellent results.</t>

</section>
</section>
</section>
<section anchor="contributors"><name>Contributors</name>

<t>The following people have substantially contributed to this document:</t>

<t>Tarek Saad, Hari Kotni, Minto Jeyananth, Raj Chetan
Boddireddy, Shraddha Hegde, Vishnu Pavan Beeram, Chandra Ramachandran</t>

<t>The authors would like to thank Jim Uttaro for his comments.</t>

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

<t>This document makes no requests of IANA.</t>

</section>
<section anchor="implementation-status"><name>Implementation Status</name>

<t>This section records the status of known implementations of the
   procedures defined by this specification at the time of posting of this
   Internet-Draft and is based on a proposal described in <xref target="RFC7942"/>.
   The description of implementations in this section is intended to
   assist the IETF in its decision processes in progressing drafts to
   RFCs.  Please note that the listing of any individual implementation
   here does not imply endorsement by the IETF.  Furthermore, no effort
   has been spent to verify the information presented here that was
   supplied by IETF contributors.  This is not intended as, and must not
   be construed to be, a catalog of available implementations or their
   features.  Readers are advised to note that other implementations may
   exist.</t>

<t>According to <xref target="RFC7942"/>, "this will allow reviewers and working groups
   to assign due consideration to documents that have the benefit of
   running code, which may serve as evidence of valuable experimentation
   and feedback that have made the implemented protocols more mature.
   It is up to the individual working groups to use this information as
   they see fit".</t>

<section anchor="juniper"><name>Juniper</name>

<t><list style="symbols">
  <t>Organization: Juniper Networks</t>
  <t>Implementation: SR-MPLS and SRv6 using LFA backup routes</t>
  <t>Maturity Level: Production.</t>
  <t>Coverage: Partial.</t>
  <t>Contact: cbarth@juniper.net</t>
</list></t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>Tactical Traffic Engineering is a mechanism that shifts traffic across
pre-computed paths. It introduces no new protocols and operates
completely locally on a single system. As such, it creates no new
security issues.</t>

</section>


  </middle>

  <back>


    <references title='Normative References'>

&I-D.ietf-rtgwg-segment-routing-ti-lfa;
&RFC2119;
&RFC3209;
&RFC4090;
&RFC5440;
&RFC7490;
&RFC8174;
&RFC8402;


    </references>

    <references title='Informative References'>

&RFC7942;


    </references>



  </back>

<!-- ##markdown-source:
H4sIAGxHT2cAA9Vc3XLbRpa+76fAOhe2p0iOnXgmia4iO3airGxrLSXevdpq
Ak2xYxDg4EcyJ5V32WfZJ9vvO6e70aBkT3aq9mKnamIKBLpPn9/v/IDL5dKU
beWb65NiHDbLb8zgh9qdFFe2HHxp6+Kqs5uNL4uXzbVvnOtwa/Ho6urlY2PX
687d4Narl6Zqy8bu8FyF24dl7ZfdcH17vRwGt3zypbnF8u+ufnj/Q/G+7T5w
iR+6dtyb0g7uuu0OJ4VvNq3px/XO971vm+Gwx2JnL69eGb/vToqhG/vhyydP
vsVixo7Dtu1OTFEs8X/5n2/6k+LFqnhuu2EbLypFL9p6fZh/0Xag56ex8XvX
FW/ccAui+vhlP3TODSfF06dffVWcNU17YwdQVLy3h3hL6QeQfDk2zeHG1i5e
7tw1bsSOp+nGtgIF3z578s2306WxGXjinxs/uKq4HMCDvmg3xekO3C1tvNHt
rK9PinJNyr/7ValdNW4wdw5+tSrO/fzUV21zyC7+fzrxANJXtf8u/HvntKer
4nLnj8V82lSH+XU589vOlrUrXtTtWOFsm87itGM5jJ07Pv6XXz15Eu+/c/RT
6J9vjs999e/zc3/9zdfPnv6z5y4sjrD6ddXzEN+1QsiqbHd35f18Vbx3zfz8
z32TX5TDv2h3Jc57R87f4KCnXbkFSav5MS+2vraVq/dbb48Pe3Ek5KffPn3y
1T972LVv/vPWNd+VSuL95zxfFT/Z2tfzk56P9jC/Lof9Bdv8vW2OD/sMZz1r
Btc1otTwaBcfbo+E+86XW9tVffuPBfyXJ9/80wKuQfjqVxL+3Y0Sq8du2m4H
4m4cXdrZ8vuVd3DF6kB7d71zzbCEu4T+waH6Zb2xvPHdqxdfPn36bfj41ZdP
4sdn8JLh41+ePYsfv36Wrn7z9OtnJ0X4/OzJl7xs6IAzMvjEt8/wlVkul4Vd
g52ICMa8aJsb0KOcHEJscFlssPt919pyC0ZgQTCyb8eudMXONvba8Sxm7MEs
+OR3l79cLK9eUu+Ly3f81G4G1xS1A3twc+Fgc7vI02HroBXXWLA3ceMKnG2q
flFUo2y+t8O22Ne2lI1WBSQDIlzvsCpu/DMIqg7QIl8ax2PgydI2Rf/B3XL9
Pt8SBPb+uvHYxzYDztiO11sco8NZezgpg3XHegBNxdi4j3tXUgca9a3Qjeaa
a0HGYKaDnPcjvyeFeHprB2OrioeRgzUgIBwGWxyKwX5wheUqva/AjDV8kt1R
34QVfucWpnb2hofW53VbEGMLhNFlu+c5apgBDiOS2NgOVLdFDcpg9eZq6/sC
cXskqwoIbd/25HQDWTnYQ+P7nRAqLLIQyZCdCvcVFiyw9ZLUFGvb+36l2rLz
VYUYYb6g4XVtBXeLJ/5vdOe334Ly//57pkdylaqNq3OdMp/SqeIP6pT5pEoV
f0ClzGdVqvicSpl/rFLFP1Yp8zmVKv6ISplPq9RZBX2oD4vZ8/22HWvIDLtx
SzklXAk/jBMrp8MFyxRpWuDH3V7urTxckF/jxNjO4qtxaOmuSt3R3rS+Eh3C
acdym3GLl6Dbvcf2gA74clLwPiNv7COBZG3tRd94kvKP662EU/PFF5DP30bf
icoU57a5HunPfvvi3ct/W9b483cD+3PFB3cowCRI6MHrny+vHiz03+LNW/mM
u38+e/fye36+/PH0/Dx9MOGOyx/f/nz+/fRpevLF29evX775Xh/G1WJ2yTx4
ffof+IZMfvD24urs7ZvT8weU9TBzC7YThqxpJoih+85R42xvKteXEAf+wDPP
X1z89389fQaz+5cQlWB3+gdjDf643bpGd2ub+hD+BG8PBrxzUCNqWV3DdPZ+
sDWMyIpobpti6zq3IrdgSsorajPuaYvp2TnVAGp1ewukC2jhRPy1xU1IYWrf
b3WVBYMabwYVvitSDIZuQDOaazozQznCw13Rw72YNNT8Yjvfjn0BI2xamv4G
Gt124lNaQGzLWF2Id8RmdbJhaPVQ9CURdKcKksxEH+MatJCxiXRlD3auFhLB
wK2/3hoggtr/XWBND5fwHtgNxuGubXkg7zq4nGEp7iughwJM2gLcbcaaTKPP
Ls3cvy0KP4CRcFZNO6T4IwaNI46ZAUTf0gqpJhC6CD5MdmuETpCrlM59Fb0k
WFB+wPdrejMXbdZVEp/azJ15yOsup7aISrgJjglL3wSZBPqMmyWsLx8XA4y+
8X8bcbZbKhWiCEjwDbwoec4jznlBH2fus/cBeZCr+3gsCAe8bKpbX/HxzlW+
VMej8cEa5RUUFy7s46K4BcDPnugmX6GBj6Ts7K/4pAFQnCFNDmxVcavOJ+2B
9NVAps17td3DXj1kFvcgdkc7hHB6sFGy/MHV2B9gVmwUVsgEKXE8nAN5vp6c
rvLaicdncNjBiYPSPdfzTOkhDI/oA2OIKygDFjmjTHZsUQY4GVnJluUIAVPN
uYz4Gzy4GRvlantDhRQIJIwkHwKDb+1H8cfykVa8KDbcBltgNYlklR87+vE9
Y0vXmKqDRTWEFNtxJ/qAy7bUMHsBebdVpux0PaBzekhChftoEAAgJwCoBTgB
ToI8ODCEhGqsXZVfBBUSAHkUqJ37KLlJHcLeioIseiQJgspaT3cWLIYHFTlR
T4ICzDTLUORrSJr5CxIaZZ3gsx4nweZJC1bFKZmqxkq53Gc2fVuPQqfnvb0T
pJCZsMCKrdv1rr7B4rDAg0jHKJpQAYtAin3kpKCI4LXEx0hAoNZbAauJ2Qax
XtylILdaeQE6CDbk6Nm5VkbhLKSAEL4jvZuxw02dCAggp1LYKCwLcI0QAO5G
wIXuKIdC3HBCGCCaL/1e9DlwO2Pf1ZEbJC/6vf/gDI7i1msxcrhdKGJHTQTD
kU9gw07jVwPw15QB5JcA18SNY6/qazL4FyRs+3Do8gPkAF2pBCGXzt+IA7ql
L2w30V+tipcKo8Dlvi09GLiDa7BiadzI0fll29AV7LIFokuUpx72ZDTkgIO/
gWXvFdWnU6hKpqUNk2/wmCrkB2WxunhRD+I3+HjRdFVACZy3W6ThBXAJYWil
GdZMW4Ipl1RkBhaJS1a0cy8mi0OqIlFHjQJkEkHwNhygJKHylTILdZKCJUTi
9a099Br1EIbEaQSPagU8Pv/hAoHu47Dctvs+KBBQs28QoDfI8RcF6wi3XJR/
9gp5eqQgvGbk2ioE6nsDS9vWyseKKLQh9Tgw1cXWh95rICjBXDkXxICgJrzJ
rDIg2p0f/DWR+r7lUcicCRMvjCAmepYYIdQQK+Z/ZCI1sdZjIBSA6jM1gY6H
E19FZdkx1O+z+xb3nus2YmysXLoqYWxHLw8xg4ByrEmsTU5nERRiB0kPIh6m
EDfYR2A6aRwbxAq3F+GIzwluhv7gFGhSMjyckWkNEc0dABHMGjoJjNKAJKyq
q0FvR9U64alkZFOy4jsgTXgrqH6vOFaMeuMh7ckhaniyRYI1RQJJoDzkGjsH
c76EcXk4g3Mwti7ern+lVLnCo8vzt/1j0aIkRo1kN76tlUCccv78KRJaNUk+
f9o/Vmeg0RXEbOgPAxwMgQWfphOXIq0t0XUjojZeUmU8zftGitdr1N5bVtCO
0AiP1Y/7PXiZAUcTMQD9upeQH4TqqQmkFxxCOupr8Oy6btfQ2Nz+g0FHGlV9
KOocpX+ub2GOMSWO048w4FsX6x90irbWaqFjDZENisNJkQodZogb3Kfn0hih
Y8PaSedT5JyyzhBp5A4ItL09Zp+myAoVQoUFV4+LMEYSKmXR5FA2WG9GQ0zj
8eCvEURRNenqK/+ZvHaCqFMFJoPRCwPa3Y1Pzoixl+Ca7i0WoOK6tmfpQ9Mz
YFBHeXSpiAEpvptOeg8pgkDUy5P5MeMWrhRsBzUHEyg4QeyH8a9rZo+BDFHS
Xg2dLjrA3CYW2ggqxIMwTCc5xDSl7a4ht1BpCPAhlB2wTExibAXYbOgHQMgN
0iZKPiv3wOtIiZVRHyqPe5ShM37dm28cpSVU3GaJBaRwRezDIirVqD/Wo4zY
OxUUGHVWJPG9yQCPBufrFqz2Er57GinTSr8ZQgHmlh6va3eTfzMaCa16QXhw
9RsSIPO97JoYahFWiyde2/IDDnO2SVe8wJeZSQorHvmVWxG08uC88liccEO3
slWgZKaox2DDiOlyEpC+uVt1aUeZ1HOyPBTBTE4bF/KEKp3H93ROCsAEJkQr
1BR3ngTbmByH/KaGUuBGiQ75gkxxbbc8shwTMhU6ui+k7geV+juXzisSr5if
gRugUcMbgvRmo2GEigrOQJuqXstuSOkZvSopxFD9KSBoAPfnyrmsaCgsgHW9
LCRPZN+T3yJP6MxLWKToQAiafUQoCr5JHwOIpeuuUkogyslwTl4g9eukzjvV
NlQX1wxaVpIYuNIp7hfZnYLmKocwLBsagkQ5AD1sft+whYC2bV0RyLdaPCza
vvS1xtRFUlsgnF6CFKA8SyGf2VxQEzEu8aMrR6kmNeNujYSIeVPMgPT89IEb
UYfmUIR0kAxTJ0FuvtIMRmmRgk88ykS+CDVU6KbATH5a4OC9RbjoWfBUYAit
qo0Yb9TrmAPd4uRa8dHUIJimmLdwcWhlZxxRCGiFt6qSr+h41AnBufm9ALl+
Fo6kmyJ7xery2cXNM66Gf/9KjL3xHwF3BJlEi4RKAzULUDmLzSkw6Tlreo9e
nT2H0WOBfGEgQ4dEuhlETXQxrnTO659f75wLrniPeo+xC+2Qzby2CPjSwmzP
LhLRqmDcQTMHpBpwseahnPsh4wk/CT6UehUBNnYRVxBQu/qVrL6jjH0OpzPu
iwveBEAbdGmOJAr3EW5d5ZsjxODx1rqE7sNylk3AXlBCcRXh/yJ0K2ZP0J6k
40L0QD5R+03A+rGBkvyheD7JVQXSaComIbezey9K1/QbOUFyrKJhXIWLYiP1
Hpp6ZqREyUASspZJa+FehdRHTyjxEjSTRm0mDVCUHyMVezAftFoiyERLRWE1
KyppxZVqP201Ve+JGwHKolvKKdACnDjChHY1Pc7oqFtmkkqH3inOSAM5PEUI
nqn+s+8QG7qDVm3BDakYrAo1vg+OF0QwM06w8DFKFUKyE9a4WhMOpHd4ZpAd
4VxdpKJa2CsIQAClqhUJLl7+jaD+RQvte81Yt7yQ0PzyxeuLx1kyoUFW/GKU
uTibdRIHcENFqOaI54JO5cRJ6rnjPilR0CLoouBmjFt5BsFKnoX7wmHDYmFf
FuF0E2GeUCEW2bENhzwUh3I8FJyfndQ7Pb1tb1mKWmiZqg9AtGkJL0MlASIm
LbHZZMxFQiEzgYRyZ2rhsdccylyTaZ8Y86fi6mx5/up0UbzDf0/UFcweu0La
UrfXB/CocsjXKmk4QamWGySBpihOI3TqkZ3IYo+L3377Q1MG2lLlMIDb4Ry6
7CssOy1aPHoXVgwjBngmHE78Bg1KDo5VVJg81CsLYb5z3M3ddyg2d2c36foc
bEjrY8H5Dtn6PzcqxyPlPNFBEA9P8gNoJ369AD5pSxZdHp39cIFMWzrzRaTm
UysVj34WNZ9J8zMHvnjx8r5zWrnGMZ2U175UPS4e4ZHAVg5x/P47ibpvn7QL
AsYprcYm2Pa9lJn1gjHv6efoJ4DjAMmkpE43reVjug5JqmD0lGtlB0vviWAV
MULfatqaoXOk6ExnmOYOt6yMHLuNR6F4MTlnEy5L1t1LATm4NqEGiz5U40fo
vASkrm2XYKdQT2AyTYBMWQhDaMYS7hxR+z1UcXtz//bR1z9kmH5YRSa6ChQJ
m7+Ht9IK5wyCSy+khBtg+nm4k8Xm5R9iPmVrJC+C/TlWYHFztw+lgFRrk6AW
G29T4vJesTxXMEyXI9kC/qU8PUu3mDk3UhrtnGSHSBc6aTqAQwtxZb8S+9pO
cFQCDoxHiyTUcAouPw0v5BWKVK7nPIJGkjh/GGYWWE+ceJTVjqbyprHX1oPn
GgxjrTFWOm0NWVRhwkHrOg1PV8qA1qr4MThuabHoDUFRUgErmFZvB2k9SXIs
WXVgYh+GNYyiWRqYNBwdnkWckLwXcWoTcxwpKcMh1+2BxpqYkNlAEsua0vfX
1/H4cc/UwpA9F/FPk/L4iKWjRInsxRF8IWRc7l3J2kMEkGcimIETkFpiWmq7
Ia8CzaKUiGfTCpizBvh31P4z66k961D4D5uGQZnwubt22qdZRMgVUSNdusld
uoB3W0g1XVpWs471nedT7DEx9rA+urgHCSPbT9XkvN0cWtlmbFjF7W5ctZzq
Wzpt5KtReBCualc1y+U56dxHrmorlG6GLYs1udL30IQPtKbZLE+q1/ecF6gI
37JZHhVYnGf6Qeue72adD4WbUo1pk4pJRqbJc6xpzmdenBftsYq7mRdyWxV1
IdVzLbVKJhKLDqHuetR5gXkYZNW+B08ipWkyoaXjkCpNlfSIT8uc0vt5uYCO
qXKhJEAfovZEH/Bw8rNcTDDAuaZVl4CkgG3vqDedeXR++e6x1qiD3aQZLtGs
MELh3I2tR2qBTnmxzS+5L7KP88sLSVBZ1YhWNFXpac3SH+WwNHHHN19/tZA6
fqV9hwcIe93ugdb3ORol3zyYjvkg1NDpUuhSb7yFSPsbheuAT3ic5mlaLfVv
QB8rIYM2SzM5plRfCi1r6T50wJcsEFA7jawl/osWA5TPTR+WMNGOnJS4mR0v
dnO1YmNSAl98n7yK6JvqWOPY1IafY+kPQAk0DOwtXnoWMW9dTGtCk0xjT14T
eaRxYuzVc2dfPdY8w66l34OVkEXBxw9SVD1oHFSkEkjOaWHgCq1YWsRmlHGF
tUPQBLqTdMjYvh/Zb58F+BQ1hRyNsbEFBlA4ArhD1auMF1Nuph0QHnfH+P0Q
xO3he4aHYWW5iUua+UAHKzHr9saFdqrVJad1dr50f2ANWELoE3ANTfl0Curo
oKwpdc6E6cJsXS2FyFzGuaWrfiMFBQF+TGFWxduRjT/181CD2Jztx2vqjq4i
QfQvT8LCocV13bZV4l+R80+gCNOz1OzSLH463lRFKs79RqckzDRLyHNqH0Ma
lFOJSYr2yxpxoIoh0ibYI4ZkJKZkt0xNGcCNWB7V0aoK1JR8zGT+PyKH4kPT
3kZHUQciJeFv2PWPESFguIANccqsBFtMeWECT/OVCnt9zbkNFtIjGBUBjw23
1w70j9PMDhwRcj9fHgqflbOi4+F4seIJyaenydppco+qEpGcNoMtB0kGQo62
MxF+9MNYHTIhXUarDDlFKh/nNVJF4zG8TgVLlacUVdW6TTD8qRaW8A9HaxP6
prvDkzJbKw/mhTQTClzMA/L6mqiFNNxD1t9nQYdIU1fiyQ2Yoil9BXH2qfML
YULN6HNElj3LAKnlIxRJcTwMkkDl4syMFj6Sr5mY4dVqfCNMykvRRVR6k+dp
0nWXJvg9J0jMmroctnh4q29Zmd7BOynK1qrSDHccSU+dFGnSim8kLPRWpCCl
jUwIofLIEF2Aw1Lpy3JPOTe7qXddbnJwqaRmQpEnS/b8JiNL/R7JmpW+51SZ
nKoMVCgZ06bzAl24rnHVIIjdcIKwPky5k/YeBtt/kDhzJyiR69tW97hLyGfU
WWr23eRSREOQrapmmE+Zz0pgvNYyicsDqgzlMARkuN4SXjiVk7K0LngfE7ra
PkzZzw8lB9YIMk9xmCXQsje9yZL9PjXJvUuNv4xFUhNNDjL202clO9WZVLxa
Fa/pVHWmMFuaxdyprnbaHBUDJZNyOyZc0SsqBmd6MuTKOwVEE7KvJO3QpIqQ
HMeBP8nc3dvGzTrP9+pDJ48RMKlzCWWWWOg2xzYUnZTUVxOHpK02ax/b6gb/
cIwc+hGLxWlSN44Tk3d8VedDqH8Cwi5l/6RN0eOPveEmO8D66UURGSiA5mw5
gZVDEDUEaNdERmiNmMSROE4S8towQCzOMWsD1AdJlAddDj5rb5vykJQqNAAz
7RdyiVeGuROteS1l0Uz+jQAqP8gAtozASm0L11Toqa6iDbNM7tKKM9loy7RT
wt07MKaKBpjJaiEcg322GkkE/gAgR5PznD4g/6QluoglmtgiVTUJ6VAi6c9Z
3Skr3ohZTCO0cfwtSKoKBz6ENt7kddu8occIibSbkmUnz0JQsPkM7UQ4QAly
wFKdYhivsJIBFJfjutfJWpMxXIrqZdsRS+kyMgAne08slU5/SCKkIC8MmRmS
5DNTRVsGzrTH01aV9Fp0PG6UBDg8yhmO2DaJCAqbsB0rlHr22KP2z1fbMxOU
mT+T9YHF7QQLgeRf3x10/oSL0imnqk12GUZLjdhmKAVFduQJE0hJHAl+6E3L
qrCkGn3ujU5no0qJeZmTFfTXHTKkY2deMIwhUWahNngXrcw63LHOGo2Ub1XV
Ros/OlyWJuj0O76oGjrysvjDY0N+GAZbjQ3v/IWuy6x1f28kFIfUxlE5ZvX3
uGOBCOn0k+uX+lLC24v4ItTQGvVLGjRLNyts33FCqQgahhayzOE9c2PwVWwg
P7kWTB9Ctq/yBCozDi1piGlnu4ZCq4IaoJU8tYiZaAQ+YnIx06GT1Vnw1Gud
8Nu+bSGjVwkvBVOWVY8CWb5AxzdapZ/IBYxWku4SK8Meg+83PjjOYfRxIEVd
qOPAGGtmktKnjGxyrTSjduzMlJX2sVYyNVe38oYX86FpxEq6htJ2TL3InlOv
EdyEgSa6uJApZ7AtFB95uCxtjcczeryjEfpZTFCXnWb+Z6FwliaA+cpUr/it
XUttchZIp3XWYbwfesr3FMI7afUhi0C5omaOUfgb1SS2vU2iSd+FaffwXwop
MwDXTkXoaVjqY+b2g596bT9CSLvilR84rdArnj/2Rxvf4QDuY1mPlbtPc8Vm
Q24o/oiHkVcaos7N8fWRcIooHMFT0AxZZO2Q7/thYmvLgeCNu00nE3vbj92k
+TkoPhsAm8VPjnQNIdXU+Bg5fHQWJDEMtFnl6iAhRF6wzHeWHIfkyZT+2mns
9gIOpKYMC+7GvRgGBJ+m+7JBf/p41hFsCnsCVhZa+k3NFO10QqWM1mBZagyW
2hQsqeioeajY5V9KD2gJLL2Xjcyjd1dXcdA1oOgdkubZO4LzQqaOjItHD9P9
ebWa2Wmw2mEq0mRsoaAZh2XQVeCJ9MWi6vGrqHoSF0STsxHe/432BSSiSQNn
pj6lfpOSyb0yIT6MjMdGJotlVKdNb9TugoFMczzTvmCalZeApVWpb7EgpEmV
UFdwCQPEmu5BZw4y7SIvnpNatUH4hlagiZgJIvRBRnNKjeZpYHdW3pv0+dPJ
it4pIxll3fba8BjsfSFAZGlkCjqVv6JMVvp6vnIsvTacmDOhZx7BqyHv5b3O
QNb8/vszquw1Q+M+Ij+sNMsJ76NkM+Vhsl5+6ECLbfOU7NaKI4+hyFV3/Z5G
84TWwltJuQ4iOwCgvrEBs8z0gg5q4k1IM8wUC8M07ZzB0xh9CrVHjl9ehBDm
NW2zTDo/qXFeSonqnm7LMhTDFiyM95gxfE8Xu8KqHB5uhvhSj4zmv2DLkbXg
tuvVNqfKxd61LAxLStYjnxhsGl+LT8USZjaCd4JloPgfiktr4eJ+tJ0v/rUd
Gr+gH8DdP7mDbbAUUt139tfixRa21ZjngPrMkSpw8nLb2ara2uJHd10B/v3i
+20zFhcWuS0MCHFtt8Bz4FBnscbOlvo5dOL0B4jieL3AFyHSAjn/5HfFzwNk
1Ep1RVSw3WkOLT+JcPrmlEzRl/AFlpij32LQaYxGkwcIQxIUPqcLzOse/NER
pPJ871ylEgI3Z+u7OEcm93AVFpKPSyfxlxC4hLzGWElzfZqjDdAmVHFCYhRi
bqhew1aHNHHl5ZeF9EdX3LD8nj8JpVN02cunNrxyIQXX7F1ynST69tmXv/++
0kO5cMM+ApJj8uP73/0E/AUdaf2bi/Dlg14p5m9KFaH2miq96e1NGYQLg/U8
j/ycVR9WAWEs0l6w/S2NIDf1VWqfGCA1CNjWjbaT59RyHcGgqXKjOFTe5+t1
9ie8p0hKsV0YA2Z+xakMomT4TFknViYgGkleWGXxm0NoeE49gT073jIcF2rS
zPqsSImzFnXwGcKaMrPXVdCpUApITLXhxTYp49MlYqG1zj0P3RgHkqVlagfG
IGFLenXrjvrJzK3vuMzGcQSDoZUv9VTSnSJir258rwtPfFdgerzaTn+6SaYB
VmIXpyVNQd+vy/VrUTwQvZEEWGdWWQImNNOgHMroxTV/rEzYNbThRZaiGt30
8yzxZd5owlkjr8jhJ/wwf1xobBRItPQ94S034nxB/uzc8+0RZp9gmzSxyTW+
qdn5mSJJJ8C5Suec0o47VmpFB7KxyAz/MVPfCZvFws7EyY/72CvKdHfOAHl3
oE8jNpN+qSoJIkFGxzj2QPtF4RfHIIU/FcVbeYtGSwn3/RgZbpn7thP+msvr
i/PL8MsuN38N/fPzV6exji8df334NY/EYR55C+6Es33hp2dW8v2LVksMnMTr
GGfi5YbvdN3/S2tfFJeu1FXv+OzP/UKe9tLmP6Ojk2vTC1HSx2fXYTn/KRfB
wD78co4GgkbfuQ0C1Le+5CWP3kzvUaZxEPGuYVqrPyBk7yRV5YsAUi6NQ7y6
sOnjCQWzIkr9D9PIE04VUAAA

-->

</rfc>

