<?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.6.39 (Ruby 3.0.2) -->
<?rfc strict="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-uuidrev-rfc4122bis-08" category="std" consensus="true" submissionType="IETF" obsoletes="4122" tocDepth="3" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.4 -->
  <front>
    <title abbrev="UUID">Universally Unique IDentifiers (UUID)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-uuidrev-rfc4122bis-08"/>
    <author initials="K. R." surname="Davis" fullname="Kyzer R. Davis">
      <organization>Cisco Systems</organization>
      <address>
        <email>kydavis@cisco.com</email>
      </address>
    </author>
    <author initials="B. G." surname="Peabody" fullname="Brad G. Peabody">
      <organization>Uncloud</organization>
      <address>
        <email>brad@peabody.io</email>
      </address>
    </author>
    <author initials="P." surname="Leach" fullname="P. Leach">
      <organization>University of Washington</organization>
      <address>
        <email>pjl7@uw.edu</email>
      </address>
    </author>
    <date year="2023"/>
    <area>ART</area>
    <workgroup>uuidrev</workgroup>
    <keyword>uuid</keyword>
    <abstract>
      <?line 247?>

<t>This specification defines the UUIDs (Universally Unique IDentifiers) and the UUID Uniform Resource Name (URN) namespace. UUIDs are also known as GUIDs (Globally Unique IDentifiers).
A UUID is 128 bits long and is intended to guarantee
uniqueness across space and time.  UUIDs were originally used in the
Apollo Network Computing System and later in the Open Software
Foundation's (OSF) Distributed Computing Environment (DCE), and then
in Microsoft Windows platforms.</t>
      <t>This specification is derived from the DCE specification with the
kind permission of the OSF (now known as The Open Group).
Information from earlier versions of the DCE specification have been
incorporated into this document. This document obsoletes RFC4122.</t>
    </abstract>
  </front>
  <middle>
    <?line 261?>

<section anchor="Background">
      <name>Introduction</name>
      <t>This specification defines the UUIDs (Universally Unique IDentifiers) and the UUID Uniform Resource Name (URN) namespace. UUIDs are also known as GUIDs (Globally Unique IDentifiers).
A UUID is 128 bits long and requires no central
registration process.</t>
      <t>The use of UUIDs is extremely pervasive in computing.  They comprise
the core identifier infrastructure for many operating systems
such as Microsoft Windows and applications such as the Mozilla Web browser and in
many cases, become exposed in many non-standard ways.</t>
      <t>This specification attempts to standardize that practice as openly as
possible and in a way that attempts to benefit the entire Internet.
The information here is meant to be a concise guide for those wishing
to implement services using UUIDs, UUIDs in combination with URNs <xref target="RFC8141"/>, or otherwise.</t>
      <t>There is an ITU-T Recommendation and an ISO/IEC Standard <xref target="X667"/> that are
derived from <xref target="RFC4122"/>.  Both sets of
specifications have been aligned and are fully technically
compatible.  In addition, a global registration function is being
provided by the Telecommunications Standardization Bureau of ITU-T;
for details see <eref target="https://www.itu.int/en/ITU-T/asn1/Pages/UUID/uuids.aspx"/>.
Nothing in this document should be construed to override the DCE standards that defined UUIDs.</t>
    </section>
    <section anchor="motivation">
      <name>Motivation</name>
      <t>One of the main reasons for using UUIDs is that no centralized
authority is required to administer them (although one format uses
IEEE 802 node identifiers, others do not).  As a result, generation
on demand can be completely automated and used for a variety of
purposes.  The UUID generation algorithm described here supports very
high allocation rates of 10 million per second per machine or more if
necessary, so that they could even be used as transaction IDs.</t>
      <t>UUIDs are of a fixed size (128 bits), which is reasonably small
compared to other alternatives.  This lends itself well to sorting,
ordering, and hashing of all sorts, storing in databases, simple
allocation, and ease of programming in general.</t>
      <t>Since UUIDs are unique and persistent, they make excellent Uniform
Resource Names.  The unique ability to generate a new UUID without a
registration process allows for UUIDs to be one of the URNs with the
lowest minting cost.</t>
      <section anchor="update-motivation">
        <name>Update Motivation</name>
        <t>Many things have changed in the time since UUIDs were originally created.
Modern applications have a need to create and utilize UUIDs as the primary
identifier for a variety of different items in complex computational systems,
including but not limited to database keys, file names, machine or system
names, and identifiers for event-driven transactions.</t>
        <t>One area in which UUIDs have gained popularity is as database keys.
This stems from the increasingly distributed nature of modern applications.
In such cases, "auto increment" schemes often used by databases do not work
well, as the effort required to coordinate sequential numeric identifiers across
a network can easily become a burden.
The fact that UUIDs can be used to create unique, reasonably short values
in distributed systems without requiring coordination makes them a good
alternative, but UUID versions 1-5 lack certain other desirable characteristics:</t>
        <ol spacing="normal" type="1"><li>Non-time-ordered UUID versions such as UUIDv4 (described in <xref target="uuidv4"/>) have poor database index
  locality.
  This means that new values created in succession are not close to each other in
  the index and thus require inserts to be performed at random
  locations.
  The negative performance effects of which on common structures used for
  this (B-tree and its variants) can be dramatic.</li>
          <li>The 100-nanosecond Gregorian epoch used in UUIDv1 (described in <xref target="uuidv1"/>) timestamps is uncommon
  and difficult to represent accurately using a standard number format such
  as <xref target="IEEE754"/>.</li>
          <li>Introspection/parsing is required to order by time sequence, as opposed to
  being able to perform a simple byte-by-byte comparison.</li>
          <li>Privacy and network security issues arise from using a MAC address in the
  node field of Version 1 UUIDs.
  Exposed MAC addresses can be used as an attack surface to locate machines
  and reveal various other
  information about such machines (minimally manufacturer, potentially other
  details). Additionally, with the advent of virtual machines and containers,
  MAC address uniqueness is no longer guaranteed.</li>
          <li>Many of the implementation details specified in RFC4122 involved trade
  offs that are neither possible to specify for all applications nor
  necessary to produce interoperable implementations.</li>
          <li>RFC4122 did not distinguish between the requirements for generation
  of a UUID versus an application that simply stores one, which are often
  different.</li>
        </ol>
        <t>Due to the aforementioned issues, many widely distributed database applications
and large application vendors have sought to solve the problem of creating
a better
time-based, sortable unique identifier for use as a database key. This has
lead to numerous implementations
over the past 10+ years solving the same problem in slightly different ways.</t>
        <t>While preparing this specification, the following 16 different implementations
were analyzed for trends in total ID length, bit layout, lexical formatting/encoding,
timestamp type, timestamp format, timestamp accuracy, node format/components,
collision handling, and multi-timestamp tick generation sequencing:</t>
        <ol spacing="compact" type="1"><li>
            <xref target="ULID"/> by A. Feerasta</li>
          <li>
            <xref target="LexicalUUID"/> by Twitter</li>
          <li>
            <xref target="Snowflake"/> by Twitter</li>
          <li>
            <xref target="Flake"/> by Boundary</li>
          <li>
            <xref target="ShardingID"/> by Instagram</li>
          <li>
            <xref target="KSUID"/> by Segment</li>
          <li>
            <xref target="Elasticflake"/> by P. Pearcy</li>
          <li>
            <xref target="FlakeID"/> by T. Pawlak</li>
          <li>
            <xref target="Sonyflake"/> by Sony</li>
          <li>
            <xref target="orderedUuid"/> by IT. Cabrera</li>
          <li>
            <xref target="COMBGUID"/> by R. Tallent</li>
          <li>
            <xref target="SID"/> by A. Chilton</li>
          <li>
            <xref target="pushID"/> by Google</li>
          <li>
            <xref target="XID"/> by O. Poitrey</li>
          <li>
            <xref target="ObjectID"/> by MongoDB</li>
          <li>
            <xref target="CUID"/> by E. Elliott</li>
        </ol>
        <t>An inspection of these implementations and the issues described above has
led to this document which intends to adapt UUIDs to address these issues.</t>
      </section>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <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 anchor="acronyms">
        <name>Abbreviations</name>
        <t>The following abbreviations are used in this document:</t>
        <dl indent="14">
          <dt>UUID</dt>
          <dd>
            <t>Universally Unique Identifier</t>
          </dd>
          <dt>URN</dt>
          <dd>
            <t>Uniform Resource Names</t>
          </dd>
          <dt>ABNF</dt>
          <dd>
            <t>Augmented Backus-Naur Form</t>
          </dd>
          <dt>CSPRNG</dt>
          <dd>
            <t>Cryptographically Secure Pseudo-Random Number Generator</t>
          </dd>
          <dt>MAC</dt>
          <dd>
            <t>Media Access Control</t>
          </dd>
          <dt>MSB</dt>
          <dd>
            <t>Most Significant Bit</t>
          </dd>
          <dt>DBMS</dt>
          <dd>
            <t>Database Management System</t>
          </dd>
          <dt>IEEE</dt>
          <dd>
            <t>Institute of Electrical and Electronics Engineers, Inc.</t>
          </dd>
          <dt>ITU</dt>
          <dd>
            <t>International Telecommunication Union</t>
          </dd>
          <dt>MD5</dt>
          <dd>
            <t>Message Digest 5</t>
          </dd>
          <dt>SHA</dt>
          <dd>
            <t>Secure Hash Algorithm</t>
          </dd>
          <dt>SHA-1</dt>
          <dd>
            <t>Secure Hash Algorithm 1 with message digest of 160 bits</t>
          </dd>
          <dt>SHA-224</dt>
          <dd>
            <t>Secure Hash Algorithm with message digest size of 224 bits</t>
          </dd>
          <dt>SHA-256</dt>
          <dd>
            <t>Secure Hash Algorithm with message digest size of 256 bits</t>
          </dd>
          <dt>SHA-512</dt>
          <dd>
            <t>Secure Hash Algorithm with message digest size of 512 bits</t>
          </dd>
          <dt>SHA-3</dt>
          <dd>
            <t>Secure Hash Algorithm 3</t>
          </dd>
          <dt>SHAKE</dt>
          <dd>
            <t>Secure Hash Algorithm 3 based on KECCAK algorithm</t>
          </dd>
          <dt>UTC</dt>
          <dd>
            <t>Coordinated Universal Time</t>
          </dd>
          <dt>OID</dt>
          <dd>
            <t>Object Identifier</t>
          </dd>
        </dl>
      </section>
      <section anchor="changelog" removeInRFC="true">
        <name>Changelog</name>
        <t>draft-08</t>
        <ul spacing="compact">
          <li>Fix typos #113</li>
          <li>Fix errata 6225 (again) #117 #118</li>
          <li>AD Review: BCP 14 - <bcp14>SHOULD</bcp14> #114</li>
          <li>AD Review: Add proper references to v1 and v6 #116</li>
          <li>AD Review: Remove <bcp14>SHOULD</bcp14> in section 4 #120</li>
          <li>Discuss "front-loaded rollover counter" for 32-bit epoch with Padding method #115</li>
        </ul>
        <t>draft-07</t>
        <ul spacing="compact">
          <li>Even more grammar tweaks! #109</li>
          <li>Remove unnecessary "32 bit" in UUIDv7 example #108</li>
          <li>Change "fixed millisecond" -&gt; "millisecond by default" relating to v7... #110</li>
          <li>Revert Max UUID Naming #107</li>
          <li>Author Changes</li>
        </ul>
        <t>draft-06</t>
        <ul spacing="compact">
          <li>More Grammar edits! #102</li>
          <li>Tweak v7 description to de-emphasize optional components #103</li>
          <li>Better Clarify Case in ABNF #104</li>
          <li>Verbiage change in 6.2 #105</li>
        </ul>
        <t>draft-05</t>
        <ul spacing="compact">
          <li>Changed Max UUID to Max UUID to better complement Latin Nil UUID verbiage. #95</li>
          <li>Align Method 3 text with the 12 bits limitation #96</li>
          <li>Make Version/version casing consistent across 5. UUID Layouts #97</li>
          <li>Cite MS COM GUID as little-endian #95</li>
        </ul>
        <t>draft-04</t>
        <ul spacing="compact">
          <li>Remove extra words #82, #88, and #93</li>
          <li>Punctuation and minor style fixes #84</li>
          <li>Change rounding mode of Method 4 Section 6.2 #90 (from #86)</li>
          <li>Add verbal description of v7 generation to 5.7. UUID Version 7 #91</li>
          <li>Remove Re-randomize Until Monotonic (Method 3) from Monotonicity and Counters #92</li>
          <li>Fix ambiguous text around UUIDv6 clock sequence #89</li>
          <li>Move endianness statement from layout to format section #85</li>
          <li>Further modified abstract to separate URN topic from UUID definition #83</li>
          <li>Provided three more UUID format examples #83</li>
          <li>Added text further clarifying version construct is for the variant in this doc #83</li>
          <li>Provided further clarification for local/global bit vs multicast bit #83</li>
        </ul>
        <t>draft-03</t>
        <ul spacing="compact">
          <li>Revised IANA Considerations #71</li>
          <li>Fix "integral numbers of octets" verbiage #67</li>
          <li>Transpose UUID Namespaces to match UUID Hashspaces #70</li>
          <li>Reference all Hash Algorithms. #69</li>
          <li>Normalize SHA abbreviation formats #66</li>
          <li>Add other Hash Abbreviations #65</li>
          <li>Remove URN from title #73</li>
          <li>Move Community Considerations to Introduction #68</li>
          <li>Move some Normative Reference to Informative #74</li>
          <li>Misc formatting changes to address IDNITS feedback</li>
          <li>Downgrade <bcp14>MUST NOT</bcp14> to <bcp14>SHOULD NOT</bcp14> for guessability of UUIDs #75</li>
          <li>Misc. text formatting, typo fixes #78</li>
          <li>Misc. text clarifications #79</li>
          <li>Misc. <bcp14>SHOULD</bcp14>/<bcp14>MUST</bcp14> adjustments #80</li>
          <li>Method 3 and 4 added to monotonic section #81</li>
        </ul>
        <t>draft-02</t>
        <ul spacing="compact">
          <li>Change md5_high in SHA-1 section to sha1_mid #59</li>
          <li>Describe Nil/Max UUID in variant table #16</li>
          <li>Further Clarify that non-descript node IDs are the preferred method in distributed UUID Generation #49</li>
          <li>Appendix B, consistent naming #55</li>
          <li>Remove duplicate ABNF from IANA considerations #56</li>
          <li>Monotonic Error Checking missing newline #57</li>
          <li>More Security Considerations Randomness #26</li>
          <li>SHA-256 UUID Generation #50</li>
          <li>Expand multiplexed fields within v1 and v6 bit definitions #43</li>
          <li>Clean up text in UUIDs that Do Not Identify the Host #61</li>
          <li>Revise UUID Generator States section #47</li>
          <li>Expand upon why unix epoch rollover is not a problem #44</li>
          <li>Delete Sample Code Appendix #62</li>
        </ul>
        <t>draft-01</t>
        <ul spacing="compact">
          <li>Mixed Case Spelling error #18</li>
          <li>Add "UUIDs that Do Not Identify the Host as well" reference to security considerations #19</li>
          <li>Out of Place Distributed node text #20</li>
          <li>v6 clock_seq and node usage ambiguity #21</li>
          <li>Figure 2 and 3 Fix Title #22</li>
          <li>Move Namespace Registration Template to IANA Considerations #23</li>
          <li>Verify ABNF formatting against RFC5234 #24</li>
          <li>Bump ABNF reference to RFC 5234 #25</li>
          <li>Modify v8 <bcp14>SHOULD NOT</bcp14> to <bcp14>MUST NOT</bcp14> #27</li>
          <li>Remove "time-based" constraint from version 8 UUID #29</li>
          <li>Further clarify v7 field description #125 #30</li>
          <li>Typo: Section 4.2, Version Field, "UUID from in this" #33</li>
          <li>Create better ABNF to represent Hex Digit #39</li>
          <li>Break Binary form of UUID into two lines. #40</li>
          <li>Move octet text from section 4 to section 5 #41</li>
          <li>Add forward reference to UUIDv1 and UUIDv4 in Section 2 #42</li>
          <li>Erroneous reference to v1 in monotonicity #45</li>
          <li>Add Label for "Monotonic Error Checking" paragraph to frame the topic #46</li>
          <li>Remove IEEE paragraph from "uuids that do not identify the host" #48</li>
          <li>Grammar Review #52</li>
        </ul>
        <t>draft-00</t>
        <ul spacing="compact">
          <li>Merge RFC4122 with draft-peabody-dispatch-new-uuid-format-04.md</li>
          <li>Change: Reference RFC1321 to RFC6151</li>
          <li>Change: Reference RFC2141 to RFC8141</li>
          <li>Change: Reference RFC2234 to RFC5234</li>
          <li>Change: Reference FIPS 180-1 to FIPS 180-4 for SHA-1</li>
          <li>Change: Converted UUIDv1 to match UUIDv6 section from Draft 04</li>
          <li>Change: Trimmed down the ABNF representation</li>
          <li>Change: http websites to https equivalent</li>
          <li>Errata: Bad Reference to RFC1750 | 3641 #4</li>
          <li>Errata: Change MD5 website to example.com | 3476 #6 (Also Fixes Errata: Fix uuid_create_md5_from_name() | 1352 #2)</li>
          <li>Errata: Typo in code comment | 6665 #11</li>
          <li>Errata: Fix BAD OID acronym | 6225 #9</li>
          <li>Errata: Incorrect Parenthesis usage Section 4.3 | 184 #5</li>
          <li>Errata: Lexicographically Sorting Paragraph Fix | 1428 #3</li>
          <li>Errata: Fix 4.1.3 reference to the correct bits | 1957 #13</li>
          <li>Errata: Fix reference to variant in octet 8 | 4975 #7</li>
          <li>Errata: Further clarify 3rd/last bit of Variant for spec | 5560 #8</li>
          <li>Errata: Fix clock_seq_hi_and_reserved most-significant bit verbiage | 4976 #10</li>
          <li>Errata: Better Clarify network byte order when referencing most significant bits | 3546 #12</li>
          <li>Draft 05: B.2. Example of a UUIDv7 Value two "var" in table #120</li>
          <li>Draft 05: <bcp14>MUST</bcp14> verbiage in Reliability of 6.1 #121</li>
          <li>Draft 05: Further discourage centralized registry for distributed UUID Generation.</li>
          <li>New: Further Clarity of exact octet and bit of var/ver in this spec</li>
          <li>New: Block diagram, bit layout, test vectors for UUIDv4</li>
          <li>New: Block diagram, bit layout, test vectors for UUIDv3</li>
          <li>New: Block diagram, bit layout, test vectors for UUIDv5</li>
          <li>New: Add MD5 Security Considerations reference, RFC6151</li>
          <li>New: Add SHA-1 Security Considerations reference, RFC6194</li>
        </ul>
      </section>
    </section>
    <section anchor="format">
      <name>UUID Format</name>
      <t>The UUID format is 16 octets (128 bits); the variant bits in conjunction with the version
bits described in the next sections in determine finer structure. While discussing UUID formats and layout, bit definitions start at 0 and end at 127 while octet definitions start at 0 and end at 15.</t>
      <t>In the absence of explicit application or presentation protocol
specification to the contrary, each field is encoded with the Most
Significant Byte first (known as network byte order).</t>
      <t>Saving UUIDs to binary format is done by sequencing all fields in big-endian format.
However there is a known caveat that Microsoft's Component Object Model (COM) GUIDs leverage little-endian when saving GUIDs.
The discussion of this <xref target="MS_COM_GUID"/> is outside the scope of this specification.</t>
      <t>UUIDs <bcp14>MAY</bcp14> be represented as binary data or integers.
When in use with URNs or as text in applications, any given UUID should
be represented by the "hex-and-dash" string format consisting of multiple
groups of upper or lowercase alphanumeric hexadecimal characters separated by single dashes/hyphens.
When used with databases please refer to <xref target="database_considerations"/>.</t>
      <t>The formal definition of the UUID string representation is provided by the following (ABNF) <xref target="RFC5234"/>.</t>
      <sourcecode type="abnf"><![CDATA[
UUID     = 4hexOctet "-"
           2hexOctet "-"
           2hexOctet "-"
           2hexOctet "-"
           6hexOctet
hexOctet = HEXDIG HEXDIG
DIGIT    = %x30-39
HEXDIG   = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
]]></sourcecode>
      <t>Note that the alphabetic characters may be all uppercase, all lowercase, or mixed case, as per <xref section="2.3" sectionFormat="comma" target="RFC5234"/>.
An example UUID using this textual representation from the above ABNF is shown in <xref target="sampleStringUUID"/>.</t>
      <figure anchor="sampleStringUUID">
        <name>Example String UUID format</name>
        <artwork><![CDATA[
f81d4fae-7dec-11d0-a765-00a0c91e6bf6
]]></artwork>
      </figure>
      <t>The same UUID from <xref target="sampleStringUUID"/> is represented in Binary <xref target="sampleBinaryUUID"/>, Integer <xref target="sampleIntegerUUID"/> and as a URN <xref target="sampleURNUUID"/> defined by <xref target="RFC8141"/>.</t>
      <figure anchor="sampleBinaryUUID">
        <name>Example Binary UUID</name>
        <artwork><![CDATA[
111110000001110101001111101011100111110111101100000100011101000\
01010011101100101000000001010000011001001000111100110101111110110
]]></artwork>
      </figure>
      <figure anchor="sampleIntegerUUID">
        <name>Example Integer UUID (shown as a decimal number)</name>
        <artwork><![CDATA[
329800735698586629295641978511506172918
]]></artwork>
      </figure>
      <figure anchor="sampleURNUUID">
        <name>Example URN UUID</name>
        <artwork><![CDATA[
urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6
]]></artwork>
      </figure>
      <t>There are many other ways to define a UUID format; some examples are detailed below.
Please note that this is not an exhaustive list and is only provided for informational purposes.</t>
      <ul spacing="compact">
        <li>Some UUID implementations, such as those found in <xref target="Python"/> and <xref target="Microsoft"/>, will output UUID with the string format, including dashes, enclosed in curly braces.</li>
        <li>
          <xref target="X667"/> provides UUID format definitions for use of UUID with an OID.</li>
        <li>The legacy <xref target="IBM_NCS"/> implementation produces a unique UUID format compatible with Variant 0xx of <xref target="table1"/></li>
      </ul>
      <section anchor="variant_field">
        <name>Variant Field</name>
        <t>The variant field determines the layout of the UUID.  That is, the
interpretation of all other bits in the UUID depends on the setting
of the bits in the variant field.  As such, it could more accurately
be called a type field; we retain the original term for
compatibility.  The variant field consists of a variable number of
the most significant bits of octet 8 of the UUID.</t>
        <t><xref target="table1"/> lists the contents of the variant field, where
the letter "x" indicates a "don't-care" value.</t>
        <table anchor="table1">
          <name>UUID Variants</name>
          <thead>
            <tr>
              <th align="left">Msb0</th>
              <th align="left">Msb1</th>
              <th align="left">Msb2</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">x</td>
              <td align="left">x</td>
              <td align="left">Reserved, NCS backward compatibility and includes Nil UUID as per <xref target="niluuid"/>.</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">x</td>
              <td align="left">The variant specified in this document.</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">Reserved, Microsoft Corporation backward compatibility.</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">Reserved for future definition and includes Max UUID as per <xref target="maxuuid"/>.</td>
            </tr>
          </tbody>
        </table>
        <t>Interoperability, in any form, with variants other than the one
defined here is not guaranteed but is not likely to be an issue in
practice.</t>
        <t>Specifically for UUIDs in this document bits 64 and 65 of the UUID (bits 0 and 1 of octet 8) <bcp14>MUST</bcp14> be set to 1 and 0 as specified in row 2 of <xref target="table1"/>.
Accordingly, all bit and field layouts avoid the use of these bits.</t>
      </section>
      <section anchor="version_field">
        <name>Version Field</name>
        <t>The version number is in the most significant 4 bits of octet 6
(bits 48 through 51 of the UUID).</t>
        <t><xref target="table2"/> lists all of the versions for this UUID variant 10x specified in this document.</t>
        <table anchor="table2">
          <name>UUID variant 10x versions defined by this specification</name>
          <thead>
            <tr>
              <th align="left">Msb0</th>
              <th align="left">Msb1</th>
              <th align="left">Msb2</th>
              <th align="left">Msb3</th>
              <th align="left">Version</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">Unused</td>
            </tr>
            <tr>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">The Gregorian time-based UUID specified in this document.</td>
            </tr>
            <tr>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">2</td>
              <td align="left">Reserved for DCE Security version, with embedded POSIX UUIDs.</td>
            </tr>
            <tr>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">3</td>
              <td align="left">The name-based version specified in this document that uses MD5 hashing.</td>
            </tr>
            <tr>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">4</td>
              <td align="left">The randomly or pseudo-randomly generated version specified in this document.</td>
            </tr>
            <tr>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">5</td>
              <td align="left">The name-based version specified in this document that uses SHA-1 hashing.</td>
            </tr>
            <tr>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">6</td>
              <td align="left">Reordered Gregorian time-based UUID specified in this document.</td>
            </tr>
            <tr>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">7</td>
              <td align="left">Unix Epoch time-based UUID specified in this document.</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">8</td>
              <td align="left">Reserved for custom UUID formats specified in this document.</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">9</td>
              <td align="left">Reserved for future definition.</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">10</td>
              <td align="left">Reserved for future definition.</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">11</td>
              <td align="left">Reserved for future definition.</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">0</td>
              <td align="left">12</td>
              <td align="left">Reserved for future definition.</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">13</td>
              <td align="left">Reserved for future definition.</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">14</td>
              <td align="left">Reserved for future definition.</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">15</td>
              <td align="left">Reserved for future definition.</td>
            </tr>
          </tbody>
        </table>
        <t>An example version/variant layout for UUIDv4 follows the table
where M represents the version placement for the hexadecimal representation of 4 (0100)
and the N represents the variant placement for one of the four possible hexadecimal representation of variant 10x:
8 (1000), 9 (1001), A (1010), B (1011)</t>
        <figure>
          <name>UUIDv4 Variant Examples</name>
          <artwork><![CDATA[
00000000-0000-4000-8000-000000000000
00000000-0000-4000-9000-000000000000
00000000-0000-4000-A000-000000000000
00000000-0000-4000-B000-000000000000
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
]]></artwork>
        </figure>
        <t>It should be noted that the other remaining UUID variants found in <xref target="table1"/> leverage different sub-typing/versioning mechanisms.
The recording and definition of the remaining UUID variant and sub-typing combinations are outside of the scope of this document.</t>
      </section>
    </section>
    <section anchor="layout">
      <name>UUID Layouts</name>
      <t>To minimize confusion about bit assignments within octets and among differing versions, the UUID record definition is provided as a grouping of fields within bit layout consisting four octets to a row.
The fields are presented with the most significant one first.</t>
      <section anchor="uuidv1">
        <name>UUID Version 1</name>
        <t>UUID version 1 is a time-based UUID featuring a 60-bit timestamp
represented by Coordinated Universal Time (UTC) as a count of 100-
nanosecond intervals since 00:00:00.00, 15 October 1582 (the date of
Gregorian reform to the Christian calendar).</t>
        <t>UUIDv1 also features a clock sequence field which is used to help avoid
duplicates that could arise when the clock is set backwards in time
or if the node ID changes.</t>
        <t>The node field consists of an IEEE 802 MAC
address, usually the host address.  For systems with multiple IEEE
802 addresses, any available one <bcp14>MAY</bcp14> be used.  The lowest addressed
octet (octet number 10) contains the global/local bit and the
unicast/multicast bit, and is the first octet of the address
transmitted on an 802.3 LAN.</t>
        <figure>
          <name>UUIDv1 Field and Bit Layout</name>
          <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           time_low                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           time_mid            |  ver  |       time_high       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|var|         clock_seq         |             node              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                              node                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <dl newline="true">
          <dt>time_low:</dt>
          <dd>
            <t>The least significant 32 bits of the 60 bit starting timestamp.
Occupies bits 0 through 31 (octets 0-3)</t>
          </dd>
          <dt>time_mid:</dt>
          <dd>
            <t>The middle 16 bits of the 60 bit starting timestamp.
Occupies bits 32 through 47 (octets 4-5)</t>
          </dd>
          <dt>ver:</dt>
          <dd>
            <t>The 4 bit version field as defined by <xref target="version_field"/> set to 0001.
Occupies bits 48 through 51 of octet 6.</t>
          </dd>
          <dt>time_high:</dt>
          <dd>
            <t>12 bits that will contain the most significant 12 bits from the 60 bit starting timestamp.
Occupies bits 52 through 63 (octets 6-7)</t>
          </dd>
          <dt>var:</dt>
          <dd>
            <t>The 2 bit variant field as defined by <xref target="variant_field"/> set to 10.
Occupies bits 64 and 65 of octet 8.</t>
          </dd>
          <dt>clock_seq:</dt>
          <dd>
            <t>The 14-bits containing the clock sequence.
  Occupies bits 66 through 79 (octets 8-9).</t>
          </dd>
          <dt>node:</dt>
          <dd>
            <t>48 bit spatially unique identifier
Occupies bits 80 through 127 (octets 10-15)</t>
          </dd>
        </dl>
        <t>For systems that do not have UTC available, but do have the local
time, they may use that instead of UTC, as long as they do so
consistently throughout the system.  However, this is not recommended
since generating the UTC from local time only needs a time zone
offset.</t>
        <t>If the clock is set backwards, or might have been set backwards
(e.g., while the system was powered off), and the UUID generator can
not be sure that no UUIDs were generated with timestamps larger than
the value to which the clock was set, then the clock sequence <bcp14>MUST</bcp14>
be changed.  If the previous value of the clock sequence is known, it
<bcp14>MAY</bcp14> be incremented; otherwise it <bcp14>SHOULD</bcp14> be set to a random or
high-quality pseudo-random value.</t>
        <t>Similarly, if the node ID changes (e.g., because a network card has
been moved between machines), setting the clock sequence to a random
number minimizes the probability of a duplicate due to slight
differences in the clock settings of the machines.  If the value of
clock sequence associated with the changed node ID were known, then
the clock sequence <bcp14>MAY</bcp14> be incremented, but that is unlikely.</t>
        <t>The clock sequence <bcp14>MUST</bcp14> be originally (i.e., once in the lifetime of
a system) initialized to a random number to minimize the correlation
across systems.  This provides maximum protection against node
identifiers that may move or switch from system to system rapidly.
The initial value <bcp14>MUST NOT</bcp14> be correlated to the node identifier.</t>
        <t>For systems with no IEEE address, a randomly or pseudo-randomly
generated value may be used; see <xref target="unguessability"/> and <xref target="unidentifiable"/>.</t>
      </section>
      <section anchor="uuidv2">
        <name>UUID Version 2</name>
        <t>UUID version 2 is known as DCE Security UUIDs <xref target="C309"/> and <xref target="C311"/>.
As such the definition of these UUIDs is outside the scope of this specification.</t>
      </section>
      <section anchor="uuidv3">
        <name>UUID Version 3</name>
        <t>UUID version 3 is meant for generating UUIDs from "names"
that are drawn from, and unique within, some "name space" as per <xref target="name_based_uuid_generation"/>.</t>
        <t>UUIDv3 values are created by computing an MD5 <xref target="RFC1321"/>
hash over a given name space value concatenated with the desired name value
after both have been converted to a canonical sequence of octets in network byte order.
This MD5 value is then used to populate all 128 bits of the UUID layout.
The UUID version and variant then replace the respective bits as defined by <xref target="version_field"/> and <xref target="variant_field"/>.</t>
        <t>Some common name space values have been defined via <xref target="namespaces"/>.</t>
        <t>Where possible UUIDv5 <bcp14>SHOULD</bcp14> be used in lieu of UUIDv3.
For more information on MD5 security considerations see <xref target="RFC6151"/>.</t>
        <figure>
          <name>UUIDv3 Field and Bit Layout</name>
          <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            md5_high                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          md5_high             |  ver  |       md5_mid         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|var|                        md5_low                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            md5_low                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <dl newline="true">
          <dt>md5_high:</dt>
          <dd>
            <t>The first 48 bits of the layout are filled
with the most significant, left-most 48 bits
from the computed MD5 value.</t>
          </dd>
          <dt>ver:</dt>
          <dd>
            <t>The 4 bit version field as defined by <xref target="version_field"/> set to 0011</t>
          </dd>
          <dt>md5_mid:</dt>
          <dd>
            <t>12 more bits of the layout consisting of the least significant,
right-most 12 bits of 16 bits immediately following md5_high
from the computed MD5 value.</t>
          </dd>
          <dt>var:</dt>
          <dd>
            <t>The 2 bit variant field as defined by <xref target="variant_field"/> set to 10</t>
          </dd>
          <dt>md5_low:</dt>
          <dd>
            <t>The final 62 bits of the layout immediately following the var field to be
filled with the least-significant, right-most bits of the final 64 bits
from the computed MD5 value.</t>
          </dd>
        </dl>
      </section>
      <section anchor="uuidv4">
        <name>UUID Version 4</name>
        <t>UUID version 4 is meant for generating UUIDs from truly-random or
pseudo-random numbers.</t>
        <t>An implementation may generate 128 bits of random data which is
used to fill out the UUID fields in <xref target="uuidv4fields"/>. The UUID version
and variant then replace the respective bits as defined by <xref target="version_field"/>
and <xref target="variant_field"/>.</t>
        <t>Alternatively, an implementation <bcp14>MAY</bcp14> choose to randomly generate the exact required number of bits for
random_a, random_b, and random_c (122 bits total), and then concatenate the version and variant in the required position.</t>
        <t>For guidelines on random data generation see <xref target="unguessability"/>.</t>
        <figure anchor="uuidv4fields">
          <name>UUIDv4 Field and Bit Layout</name>
          <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           random_a                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          random_a             |  ver  |       random_b        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|var|                       random_c                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           random_c                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <dl newline="true">
          <dt>random_a:</dt>
          <dd>
            <t>The first 48 bits of the layout that can be filled with random data as specified in <xref target="unguessability"/></t>
          </dd>
          <dt>ver:</dt>
          <dd>
            <t>The 4 bit version field as defined by <xref target="version_field"/> set to 0100</t>
          </dd>
          <dt>random_b:</dt>
          <dd>
            <t>12 more bits of the layout that can be filled random data as per <xref target="unguessability"/></t>
          </dd>
          <dt>var:</dt>
          <dd>
            <t>The 2 bit variant field as defined by <xref target="variant_field"/> set to 10</t>
          </dd>
          <dt>random_c:</dt>
          <dd>
            <t>The final 62 bits of the layout immediately following the var field to be
filled with random data as per <xref target="unguessability"/></t>
          </dd>
        </dl>
      </section>
      <section anchor="uuidv5">
        <name>UUID Version 5</name>
        <t>UUID version 5 is meant for generating UUIDs from "names"
that are drawn from, and unique within, some "name space" as per <xref target="name_based_uuid_generation"/>.</t>
        <t>UUIDv5 values are created by computing an SHA-1 <xref target="FIPS180-4"/>
hash over a given name space value concatenated with the desired name value
after both have been converted to a canonical sequence of octets in network byte order.
This SHA-1 value is then used to populate all 128 bits of the UUID layout. Excess bits beyond 128 are discarded.
The UUID version and variant then replace the respective bits as defined by <xref target="version_field"/> and <xref target="variant_field"/>.</t>
        <t>Some common name space values have been defined via <xref target="namespaces"/>.</t>
        <t>There may be scenarios, usually depending on organizational security policies, where SHA-1 libraries may not be available or deemed unsafe for use.
As such it may be desirable to generate name-based UUIDs derived from SHA-256 or newer SHA methods. These name-based UUIDs <bcp14>MUST NOT</bcp14> utilize UUIDv5 and <bcp14>MUST</bcp14> be within the UUIDv8 space defined by <xref target="v8"/>.
For implementation guidance around utilizing UUIDv8 for name-based UUIDs refer to the sub-section of <xref target="name_based_uuid_generation"/>.</t>
        <t>For more information on SHA-1 security considerations see <xref target="RFC6194"/>.</t>
        <figure>
          <name>UUIDv5 Field and Bit Layout</name>
          <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           sha1_high                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         sha1_high             |  ver  |      sha1_mid         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|var|                       sha1_low                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           sha1_low                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <dl newline="true">
          <dt>sha1_high:</dt>
          <dd>
            <t>The first 48 bits of the layout are filled
with the most significant, left-most 48 bits
from the computed SHA-1 value.</t>
          </dd>
          <dt>ver:</dt>
          <dd>
            <t>The 4 bit version field as defined by <xref target="version_field"/></t>
          </dd>
          <dt>sha1_mid:</dt>
          <dd>
            <t>12 more bits of the layout consisting of the least significant,
right-most 12 bits of 16 bits immediately following sha1_high
from the computed SHA-1 value.</t>
          </dd>
          <dt>var:</dt>
          <dd>
            <t>The 2 bit variant field as defined by <xref target="variant_field"/>.</t>
          </dd>
          <dt>sha1_low:</dt>
          <dd>
            <t>The final 62 bits of the layout immediately following the var field to be
filled by skipping the 2 most significant, left-most bits of the remaining SHA-1 hash
and then using the next 62 most significant, left-most bits.
Any leftover SHA-1 bits are discarded and unused.</t>
          </dd>
        </dl>
      </section>
      <section anchor="uuidv6">
        <name>UUID Version 6</name>
        <t>UUID version 6 is a field-compatible version of UUIDv1 <xref target="uuidv1"/>, reordered for improved
DB locality.
It is expected that UUIDv6 will primarily be used in contexts where there
are existing v1 UUIDs.
Systems that do not involve legacy UUIDv1 <bcp14>SHOULD</bcp14> use UUIDv7 instead.</t>
        <t>Instead of splitting the timestamp into the low, mid, and high sections from
UUIDv1, UUIDv6 changes this sequence so timestamp bytes are stored from most
to least significant.
That is, given a 60 bit timestamp value as specified for UUIDv1 in <xref target="uuidv1"/>,
for UUIDv6, the first 48 most significant bits are stored
first, followed by the 4 bit version (same position), followed by the remaining
12 bits of the original 60 bit timestamp.</t>
        <t>The clock sequence  and node bits remain unchanged from their position in <xref target="uuidv1"/>.</t>
        <t>The clock sequence and node bits <bcp14>SHOULD</bcp14> be reset to a pseudo-random value for each new UUIDv6 generated; however, implementations <bcp14>MAY</bcp14> choose to retain the old clock sequence and MAC address behavior from <xref target="uuidv1"/>. For more information on MAC address usage within UUIDs see the <xref target="Security"/>.</t>
        <t>The format for the 16-byte, 128 bit UUIDv6 is shown in <xref target="v6layout"/>.</t>
        <figure anchor="v6layout">
          <name>UUIDv6 Field and Bit Layout</name>
          <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           time_high                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           time_mid            |  ver  |       time_low        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|var|         clock_seq         |             node              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                              node                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <dl newline="true">
          <dt>time_high:</dt>
          <dd>
            <t>The most significant 32 bits of the 60 bit starting timestamp.
Occupies bits 0 through 31 (octets 0-3)</t>
          </dd>
          <dt>time_mid:</dt>
          <dd>
            <t>The middle 16 bits of the 60 bit starting timestamp.
Occupies bits 32 through 47 (octets 4-5)</t>
          </dd>
          <dt>ver:</dt>
          <dd>
            <t>The 4 bit version field as defined by <xref target="version_field"/> set to 0110.
Occupies bits 48 through 51 of Octet 6.</t>
          </dd>
          <dt>time_low:</dt>
          <dd>
            <t>12 bits that will contain the least significant 12 bits from the 60 bit starting timestamp.
Occupies bits 52 through 63 (octets 6-7)</t>
          </dd>
          <dt>var:</dt>
          <dd>
            <t>The 2 bit variant field as defined by <xref target="variant_field"/> set to 10.
Occupies bits 64 and 65 of octet 8.</t>
          </dd>
          <dt>clock_seq:</dt>
          <dd>
            <t>The 14 bits containing the clock sequence.
Occupies bits 66 through 79 (octets 8-9).</t>
          </dd>
          <dt>node:</dt>
          <dd>
            <t>48 bit spatially unique identifier
Occupies bits 80 through 127 (octets 10-15)</t>
          </dd>
        </dl>
        <t>With UUIDv6 the steps for splitting the timestamp into time_high and time_mid
are <bcp14>OPTIONAL</bcp14>
since the 48 bits of time_high and time_mid will remain in the same order.
An extra step of splitting the first 48 bits of the timestamp into the most
significant
32 bits and least significant 16 bits proves useful when reusing an existing
UUIDv1 implementation.</t>
      </section>
      <section anchor="v7">
        <name>UUID Version 7</name>
        <t>UUID version 7 features a time-ordered value field derived from the widely
implemented and well known Unix Epoch timestamp source, the number of milliseconds
since midnight 1 Jan 1970 UTC, leap seconds excluded.
UUIDv7 generally has improved entropy characteristics over UUIDv1 <xref target="uuidv1"/> or UUIDv6 <xref target="uuidv6"/>.</t>
        <t>UUIDv7 values are created by allocating a Unix timestamp in milliseconds in the most significant 48 bits and filling the remaining 74 bits, excluding the required version and variant bits, with random bits for each new UUIDv7 generated to provide uniqueness as per <xref target="unguessability"/>. Alternatively, implementations <bcp14>MAY</bcp14> fill the 74 bits, jointly, with a combination of the following subfields, in this order from the most significant bits to the least, to guarantee additional monotonicity within a millisecond:</t>
        <ol spacing="normal" type="1"><li>An <bcp14>OPTIONAL</bcp14> sub-millisecond timestamp fraction (12 bits at maximum) as per <xref target="monotonicity_counters"/> (Method 3).</li>
          <li>An <bcp14>OPTIONAL</bcp14> carefully seeded counter as per <xref target="monotonicity_counters"/> (Method 1 or 2).</li>
          <li>Random data for each new UUIDv7 generated for any remaining space.</li>
        </ol>
        <t>Implementations <bcp14>SHOULD</bcp14> utilize UUIDv7 instead of UUIDv1 and UUIDv6 if
possible.</t>
        <figure>
          <name>UUIDv7 Field and Bit Layout</name>
          <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           unix_ts_ms                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          unix_ts_ms           |  ver  |       rand_a          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|var|                        rand_b                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            rand_b                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <dl newline="true">
          <dt>unix_ts_ms:</dt>
          <dd>
            <t>48 bit big-endian unsigned number of Unix epoch timestamp in milliseconds as per <xref target="timestamp_considerations"/>.</t>
          </dd>
          <dt>ver:</dt>
          <dd>
            <t>4 bit UUIDv7 version set as per <xref target="version_field"/></t>
          </dd>
          <dt>rand_a:</dt>
          <dd>
            <t>12 bits pseudo-random data to provide uniqueness as per <xref target="unguessability"/> and/or optional constructs to guarantee additional monotonicity as per <xref target="monotonicity_counters"/>.</t>
          </dd>
          <dt>var:</dt>
          <dd>
            <t>The 2 bit variant defined by <xref target="variant_field"/>.</t>
          </dd>
          <dt>rand_b:</dt>
          <dd>
            <t>The final 62 bits of pseudo-random data to provide uniqueness as per <xref target="unguessability"/> and/or an optional counter to guarantee additional monotonicity as per <xref target="monotonicity_counters"/>.</t>
          </dd>
        </dl>
      </section>
      <section anchor="v8">
        <name>UUID Version 8</name>
        <t>UUID version 8 provides an RFC-compatible format for experimental or vendor-specific
use cases.
The only requirement is that the variant and version bits <bcp14>MUST</bcp14> be set as
defined in <xref target="variant_field"/> and <xref target="version_field"/>.
UUIDv8's uniqueness will be implementation-specific and <bcp14>MUST NOT</bcp14> be assumed.</t>
        <t>The only explicitly defined bits are the version and variant, leaving 122
bits
for implementation specific UUIDs. To be clear:
UUIDv8 is not a replacement for UUIDv4 <xref target="uuidv4"/> where all 122 extra bits are
filled with random data.</t>
        <t>Some example situations in which UUIDv8 usage could occur:</t>
        <ul spacing="normal">
          <li>An implementation would like to embed extra information
within the UUID other than what is defined in this document.</li>
          <li>An implementation has other application/language restrictions which
inhibit the use of one of the current UUIDs.</li>
        </ul>
        <figure>
          <name>UUIDv8 Field and Bit Layout</name>
          <artwork><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           custom_a                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          custom_a             |  ver  |       custom_b        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|var|                       custom_c                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           custom_c                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <dl newline="true">
          <dt>custom_a:</dt>
          <dd>
            <t>The first 48 bits of the layout that can be filled as an implementation sees
fit.</t>
          </dd>
          <dt>ver:</dt>
          <dd>
            <t>The 4 bit version field as defined by <xref target="version_field"/></t>
          </dd>
          <dt>custom_b:</dt>
          <dd>
            <t>12 more bits of the layout that can be filled as an implementation sees fit.</t>
          </dd>
          <dt>var:</dt>
          <dd>
            <t>The 2 bit variant field as defined by <xref target="variant_field"/>.</t>
          </dd>
          <dt>custom_c:</dt>
          <dd>
            <t>The final 62 bits of the layout immediately following the var field to be
filled as an implementation sees fit.</t>
          </dd>
        </dl>
      </section>
      <section anchor="niluuid">
        <name>Nil UUID</name>
        <t>The nil UUID is special form of UUID that is specified to have all
128 bits set to zero.</t>
        <figure>
          <name>Nil UUID Format</name>
          <artwork><![CDATA[
00000000-0000-0000-0000-000000000000
]]></artwork>
        </figure>
        <t>A Nil UUID value can be useful to communicate the absence of any other UUID value in situations that otherwise require or use a 128-bit UUID.  A Nil UUID can express the concept "no such value here". Thus it is reserved for such use as needed for implementation-specific situations.</t>
      </section>
      <section anchor="maxuuid">
        <name>Max UUID</name>
        <t>The Max UUID is special form of UUID that is specified to have all 128 bits
set to 1. This UUID can be thought of as the inverse of Nil UUID defined
in <xref target="niluuid"/>.</t>
        <figure>
          <name>Max UUID Format</name>
          <artwork><![CDATA[
FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF
]]></artwork>
        </figure>
        <t>A Max UUID value can be used as a sentinel value in situations where a 128-bit UUID is required but a concept such as "end of UUID list" needs to be expressed, and is reserved for such use as needed for implementation-specific situations.</t>
      </section>
    </section>
    <section anchor="uuid_best_practices">
      <name>UUID Best Practices</name>
      <t>The minimum requirements for generating UUIDs are
described in this document for each version.
Everything else is an implementation detail and
up to the implementer to decide what is appropriate for a given
implementation. Various relevant factors are covered
below to help guide an implementer through the different trade-offs among
differing UUID implementations.</t>
      <section anchor="timestamp_considerations">
        <name>Timestamp Considerations</name>
        <t>UUID timestamp source, precision, and length was the topic of great debate
while creating UUIDv7 for this specification. Choosing the right timestamp for
your application is a very important topic. This section will detail some
of the most common points on this topic.</t>
        <dl newline="true">
          <dt>Reliability:</dt>
          <dd>
            <t>Implementations acquire the current timestamp from a reliable source to
provide values that are time-ordered and continually increasing.
Take care to ensure that timestamp changes from the environment
or operating system are handled in a way that is consistent with implementation
requirements.
For example, if it is possible for the system clock to move backward due
to either manual adjustment or corrections from a time synchronization protocol,
implementations need to determine how to handle such cases. (See Altering, Fuzzing,
or Smearing below.)</t>
          </dd>
          <dt>Source:</dt>
          <dd>
            <t>UUID version 1 and 6 both utilize a Gregorian epoch timestamp while UUIDv7
utilizes a Unix Epoch timestamp. If other timestamp sources or a custom timestamp
epoch are required, UUIDv8 <bcp14>MUST</bcp14> be used.</t>
          </dd>
          <dt>Sub-second Precision and Accuracy:</dt>
          <dd>
            <t>Many levels of precision exist for timestamps: milliseconds, microseconds,
nanoseconds, and beyond.
Additionally fractional representations of sub-second precision may be desired
to mix various levels of precision in a time-ordered manner.
Furthermore, system clocks themselves have an underlying granularity and
it is frequently less than the precision offered by the operating system.
With UUID version 1 and 6, 100-nanoseconds of precision are present while
UUIDv7 features millisecond level of precision by default within the Unix epoch
that does not exceed the granularity capable in most modern systems.
For other levels of precision UUIDv8 is available.
Similar to <xref target="monotonicity_counters"/>, with UUIDv1 or UUIDv6,
a high resolution timestamp can be simulated by keeping a count of
the number of UUIDs that have been generated with the same value of
the system time, and using it to construct the low order bits of the
timestamp.  The count will range between zero and the number of
100-nanosecond intervals per system time interval.</t>
          </dd>
          <dt>Length:</dt>
          <dd>
            <t>The length of a given timestamp directly impacts how long a given UUID will
be valid.
That is, how many timestamp ticks can be contained in a UUID before the maximum
value for the timestamp field is reached.
Take care to ensure that the proper length is selected for a given
timestamp.
UUID version 1 and 6 utilize a 60 bit timestamp valid until 5623 AD and UUIDv7 features a 48
bit timestamp valid until the year 10889 AD.</t>
          </dd>
          <dt>Altering, Fuzzing, or Smearing:</dt>
          <dd>
            <t>Implementations <bcp14>MAY</bcp14> alter the actual timestamp. Some examples include security
considerations around providing a real clock value within a UUID, to correct
inaccurate clocks, or to handle leap seconds. This specification makes no
requirement or guarantee about how close the clock value needs to be to the actual
time.
If UUIDs do not need to be frequently generated, the UUIDv1 or UUIDv6 timestamp can
simply be the system time multiplied by the number of 100-nanosecond
intervals per system time interval.</t>
          </dd>
          <dt>Padding:</dt>
          <dd>
            <t>When timestamp padding is required, implementations <bcp14>MUST</bcp14> pad the most significant
bits (left-most) bits with zeros. An example is padding the most significant,
left-most bits of a Unix timestamp with zeros to fill out the 48
bit timestamp in UUIDv7. An alternative is to pad the most significant, left-most bits with the number of 32 bit Unix timestamp roll-overs after 2038-01-19.</t>
          </dd>
          <dt>Truncating:</dt>
          <dd>
            <t>When timestamps need to be truncated, the lower, least significant
bits <bcp14>MUST</bcp14> be used. An example would be truncating a 64 bit Unix timestamp
to the least significant, right-most 48 bits for UUIDv7.</t>
          </dd>
          <dt>Error Handling:</dt>
          <dd>
            <t>If a system overruns the generator by requesting too many UUIDs
within a single system time interval, the UUID service can
return an error, or stall the UUID generator until the system clock
catches up, and <bcp14>MUST NOT</bcp14> return knowingly duplicate values due to
counter rollover.
Note that if the processors overrun the UUID generation frequently,
additional node identifiers can be allocated to the system, which
will permit higher speed allocation by making multiple UUIDs
potentially available for each time stamp value.
Similar techniques are discussed in <xref target="distributed_shared_knowledge"/>.</t>
          </dd>
        </dl>
      </section>
      <section anchor="monotonicity_counters">
        <name>Monotonicity and Counters</name>
        <t>Monotonicity (each subsequent value being greater than the last) is the backbone of time-based sortable UUIDs. Normally, time-based
UUIDs from this document will be monotonic due to an embedded timestamp; however,
implementations can guarantee additional monotonicity via the concepts covered
in this section.</t>
        <t>Take care to ensure UUIDs generated in batches are
also monotonic. That is, if one thousand UUIDs are generated for the same
timestamp, there should be sufficient logic for organizing the creation order of
those one thousand UUIDs.
Batch UUID creation implementations <bcp14>MAY</bcp14> utilize a monotonic counter that
increments for each UUID created during a given timestamp.</t>
        <t>For single-node UUID implementations that do not need to create batches of
UUIDs, the embedded timestamp within UUID version 6 and 7 can provide
sufficient monotonicity guarantees by simply ensuring that timestamp increments
before creating a new UUID. Distributed nodes are discussed in
<xref target="distributed_shared_knowledge"/>.</t>
        <t>Implementations <bcp14>SHOULD</bcp14> employ the following methods for single-node UUID implementations
that require batch UUID creation, or are otherwise concerned about monotonicity
with high frequency UUID generation.</t>
        <dl newline="true">
          <dt>Fixed-Length Dedicated Counter Bits (Method 1):</dt>
          <dd>
            <t>Some implementations allocate a specific number of bits in the
UUID layout to the sole purpose of tallying the total number of UUIDs created
during a given UUID timestamp tick.
A fixed bit-length counter, if present, <bcp14>MUST</bcp14> be positioned immediately after the
embedded timestamp. This promotes sortability and allows random data generation
for each counter increment.
With this method, the rand_a section (or a subset of its left-most bits) of UUIDv7
is used as fixed-length dedicated counter bits that are incremented for
every UUID generation.
The trailing random bits generated for each new UUID in rand_b can help produce
unguessable UUIDs. In the event more counter bits are required, the most significant
(left-most) bits of rand_b <bcp14>MAY</bcp14> be used as additional counter bits.</t>
          </dd>
          <dt>Monotonic Random (Method 2):</dt>
          <dd>
            <t>With this method, the random data is extended to also function as a counter.
This monotonic value can be thought of as a "randomly seeded counter" which
<bcp14>MUST</bcp14> be incremented in the least significant position for each UUID created
on a given timestamp tick.
UUIDv7's rand_b section <bcp14>SHOULD</bcp14> be utilized with this method to handle batch
UUID generation during a single timestamp tick.
The increment value for every UUID generation is a random integer
of any desired length larger than zero. It ensures the UUIDs retain the required
level of unguessability provided by the underlying entropy.
The increment value <bcp14>MAY</bcp14> be one when the number of UUIDs generated in a particular
period of time is important and guessability is not an issue. However, it
<bcp14>SHOULD NOT</bcp14> be used by implementations that favor unguessablity, as the resulting
values are easily guessable.</t>
          </dd>
          <dt>Replace Left-Most Random Bits with Increased Clock Precision (Method 3):</dt>
          <dd>
            <t>For UUIDv7, which has millisecond timestamp precision, it is possible
to use additional clock precision available on the system to substitute
for up to 12 random bits immediately following the timestamp.  This can provide
values that are time-ordered with sub-millisecond precision, using
however many bits are appropriate in the implementation environment.
With this method, the additional time precision bits <bcp14>MUST</bcp14> follow the
timestamp as the next available bit, in the rand_a field for UUIDv7.
</t>
            <t>To calculate this value, start with the portion of the timestamp
expressed as a fraction of clock's tick value (fraction of a millisecond
for UUIDv7).  Compute the count of possible values that can be represented in
the available bit space, 4096 for the UUIDv7 rand_a field.
Using floating point math, multiply this fraction of a millisecond
value by 4096 and round down (toward zero) to an integer result to arrive at a number
between 0 and the maximum allowed for the indicated bits
which is sorts monotonically based on time. Each increasing fractional
value will result in an increasing bit field value, to the
precision available with these bits.</t>
            <t>For example, let's assume a system timestamp of 1 Jan 2023 12:34:56.1234567.
Taking the precision greater than 1ms gives us a value of 0.4567, as a
fraction of a millisecond.  If we wish to encode this as 12 bits, we can
take the count of possible values that fit in those bits (4096, or 2 to the 12th power)
and multiply it by our millisecond fraction value of 0.4567 and truncate the result to
an integer, which gives an integer value of 1870. Expressed as hexadecimal it is
0x74E, or the binary bits 011101001110.  One can then use those 12 bits
as the most significant (left-most) portion of the random section of the UUID
(e.g., the rand_a field in UUIDv7).
This works for any desired bit length that fits into a UUID, and applications
can decide the appropriate length based on available clock precision, but for
UUIDv7, it is limited to 12 bits at maximum to reserve sufficient space for
random bits.</t>
            <t>The main benefit to encoding additional timestamp precision
is that it utilizes additional time precision already available in the system clock
to provide values that are more likely to be unique, and thus may simplify
certain implementations. This technique can also be used in conjunction with one
of the other methods, where this additional time precision would immediately
follow the timestamp, and then if any bits are to be used as clock sequence
they would follow next.</t>
          </dd>
        </dl>
        <t>The following sub-topics cover topics related solely with creating reliable
fixed-length dedicated counters:</t>
        <dl newline="true">
          <dt>Fixed-Length Dedicated Counter Seeding:</dt>
          <dd>
            <t>Implementations utilizing the fixed-length counter method randomly initialize
the counter with each new timestamp tick.
However, when the timestamp has not incremented, the counter is frozen
and incremented via the desired increment logic.
When utilizing a randomly seeded counter alongside Method 1, the random value <bcp14>MAY</bcp14>
be regenerated with each counter increment without impacting sortability.
The downside is that Method 1 is prone to overflows if a counter of adequate
length is not selected or the random data generated leaves little room for
the required number of increments.
Implementations utilizing fixed-length counter method <bcp14>MAY</bcp14> also choose to
randomly initialize a portion counter rather than the entire counter. For
example, a 24 bit counter could have the 23 bits in least-significant, right-most,
position randomly initialized. The remaining most significant, left-most
counter bits are initialized as zero for the sole purpose of guarding against
counter rollovers.</t>
          </dd>
          <dt>Fixed-Length Dedicated Counter Length:</dt>
          <dd>
            <t>Select a counter bit-length that can properly handle
the level of timestamp precision in use.
For example, millisecond precision generally requires a larger counter than a
timestamp with nanosecond precision.
General guidance is that the counter <bcp14>SHOULD</bcp14> be at least 12 bits but no longer
than 42 bits.
Take care to ensure that the counter length selected leaves
room for sufficient entropy in the random portion of the UUID after the counter.
This entropy helps improve the unguessability characteristics of UUIDs created
within the batch.</t>
          </dd>
        </dl>
        <t>The following sub-topics cover rollover handling with either type of counter
method:</t>
        <dl newline="true">
          <dt>Counter Rollover Guards:</dt>
          <dd>
            <t>The technique from Fixed-Length Dedicated Counter Seeding that describes
allocating a segment of the fixed-length counter as a rollover guard is also
helpful to mitigate counter rollover issues.
This same technique can be used with monotonic random counter methods
by ensuring the total length of a possible increment in the least significant,
right most position is less than the total length of the random being incremented.
As such the most significant, left-most, bits can be incremented as rollover
guarding.</t>
          </dd>
          <dt>Counter Rollover Handling:</dt>
          <dd>
            <t>Counter rollovers <bcp14>MUST</bcp14> be handled by the application to avoid sorting issues.
The general guidance is that applications that care about absolute monotonicity
and sortability should freeze the counter and wait for the timestamp to advance
which ensures monotonicity is not broken.
Alternatively, implementations <bcp14>MAY</bcp14> increment the timestamp ahead of the actual
time and reinitialize the counter.</t>
          </dd>
        </dl>
        <t>Implementations <bcp14>MAY</bcp14> use the following logic to ensure UUIDs featuring embedded
counters are monotonic in nature:</t>
        <ol spacing="normal" type="1"><li>Compare the current timestamp against the previously stored timestamp.</li>
          <li>If the current timestamp is equal to the previous timestamp, increment the
  counter according to the desired method.</li>
          <li>If the current timestamp is greater than the previous timestamp, re-initialize
  the desired counter method to the new timestamp and generate new random bytes
  (if the bytes were frozen or being used as the seed for a monotonic counter).</li>
        </ol>
        <dl newline="true">
          <dt>Monotonic Error Checking:</dt>
          <dd>
            <t>Implementations <bcp14>SHOULD</bcp14> check if the currently generated UUID is greater
than the previously generated UUID. If this is not the case then any number
of things could have occurred, such as clock rollbacks,
leap second handling, and counter rollovers. Applications <bcp14>SHOULD</bcp14> embed sufficient
logic to catch these scenarios and correct the problem to ensure that the next
UUID generated is greater than the previous, or at least report an appropriate error.
To handle this scenario, the
general guidance is that application <bcp14>MAY</bcp14> reuse the previous timestamp and
increment the previous counter method.</t>
          </dd>
        </dl>
      </section>
      <section anchor="generator_states">
        <name>UUID Generator States</name>
        <t>The (optional) UUID generator state only needs to be read from stable storage once at boot
time, if it is read into a system-wide shared volatile store (and
updated whenever the stable store is updated).</t>
        <t>This stable storage <bcp14>MAY</bcp14> be used to record various portions of the UUID generation
which prove useful for batch UUID generation purposes and monotonic error checking with UUIDv6 and UUIDv7.
These stored values include but are not limited to last known timestamp, clock sequence, counters, and random data.</t>
        <t>If an implementation does not have any stable store available, then
it <bcp14>MAY</bcp14> proceed with UUID generation as if this was the first UUID created within a batch.
This is the least desirable implementation because it will increase the frequency
of creation of values such as clock sequence, counters, or random data, which increases the
probability of duplicates.</t>
        <t>An implementation <bcp14>MAY</bcp14> also return an application error in the event that collision resistance is of the utmost concern.
The semantics of this error are up to the application and implementation.
See <xref target="collision_resistance"/> for more information on weighting collision tolerance in applications.</t>
        <t>For UUIDv1 and UUIDv6, if the node ID can never change (e.g., the network interface card
from which the node ID is derived is inseparable
from the system), or if any change also re-initializes the clock
sequence to a random value, then instead of keeping it in stable
store, the current node ID may be returned.</t>
        <t>For UUIDv1 and UUIDv6, the state does not always need to be written to stable store every
time a UUID is generated.  The timestamp in the stable store can be
periodically set to a value larger than any yet used in a UUID.  As
long as the generated UUIDs have timestamps less than that value, and
the clock sequence and node ID remain unchanged, only the shared
volatile copy of the state needs to be updated.  Furthermore, if the
timestamp value in stable store is in the future by less than the
typical time it takes the system to reboot, a crash will not cause a
re-initialization of the clock sequence.</t>
        <t>If it is too expensive to access shared state each time a UUID is
generated, then the system-wide generator can be implemented to
allocate a block of time stamps each time it is called; a per-
process generator can allocate from that block until it is exhausted.</t>
      </section>
      <section anchor="distributed_shared_knowledge">
        <name>Distributed UUID Generation</name>
        <t>Some implementations <bcp14>MAY</bcp14> desire to utilize multi-node, clustered, applications
which involve two or more
nodes independently generating UUIDs that will be stored in a common location.
While UUIDs already feature sufficient entropy to ensure that the chances
of collision are low, as the total number of UUID generating nodes increase; so does the likelihood
of a collision.</t>
        <t>This section will detail the two additional collision resistance approaches that have been observed by multi-node
UUID implementations in distributed environments.</t>
        <t>It should be noted that although this section details two methods for the sake of completeness;
implementations should utilize the pseudo-random Node ID option if additional collision resistance for distributed UUID generation is a requirement.
Likewise, utilization of either method is not required for implementing UUID generation in distributed environments.</t>
        <dl newline="true">
          <dt>Node IDs:</dt>
          <dd>
            <t>With this method, a pseudo-random Node ID value is placed within the UUID
layout.
This identifier helps ensure the bit-space for a given node is unique, resulting
in UUIDs that do not conflict with any other UUID created by another node
with a different node id.
Implementations that choose to leverage an embedded node id <bcp14>SHOULD</bcp14> utilize
UUIDv8.
The node id <bcp14>SHOULD NOT</bcp14> be an IEEE 802 MAC address as per <xref target="Security"/>.
The location and bit length are left to implementations and are outside the
scope of this specification.
Furthermore, the creation and negotiation of unique node ids among nodes
is also out of scope for this specification.</t>
          </dd>
          <dt>Centralized Registry:</dt>
          <dd>
            <t>With this method all nodes tasked with creating UUIDs consult a central registry
and confirm the generated value is unique. As applications scale, the communication
with the central registry could become a bottleneck and impact UUID generation
in a negative way. Shared knowledge schemes with central/global
registries are outside the scope of this specification and is <bcp14>NOT RECOMMENDED</bcp14>.</t>
          </dd>
        </dl>
        <t>Distributed applications generating UUIDs at a variety of hosts <bcp14>MUST</bcp14>
be willing to rely on the random number source at all hosts.</t>
      </section>
      <section anchor="name_based_uuid_generation">
        <name>Name-Based UUID Generation</name>
        <t>The concept of name and name space should be broadly construed and not
limited to textual names.  For example, some name spaces are the
domain name system, URLs, Object Identifiers (OIDs), X.500 Distinguished
Names (DNs), and reserved words in a programming language.  The
mechanisms or conventions used for allocating names and ensuring
their uniqueness within their name spaces are beyond the scope of
this specification.</t>
        <t>The requirements for name-based UUIDs are as follows:</t>
        <ul spacing="normal">
          <li>UUIDs generated at different times from the same name in the
same namespace <bcp14>MUST</bcp14> be equal.</li>
          <li>UUIDs generated from two different names in the same namespace
should be different (with very high probability).</li>
          <li>UUIDs generated from the same name in two different namespaces
should be different (with very high probability).</li>
          <li>If two UUIDs that were generated from names are equal, then they
were generated from the same name in the same namespace (with very
high probability).</li>
        </ul>
        <dl newline="true">
          <dt>A note on namespaces:</dt>
          <dd>
            <t>While <xref target="namespaces"/> details a few interesting namespaces; implementations <bcp14>SHOULD</bcp14> provide the ability to input a custom namespace.
For example, any other UUID <bcp14>MAY</bcp14> be generated and used as the desired namespace input for a given application context to
ensure all names created are unique within the newly created namespace.</t>
          </dd>
          <dt>Name-based UUIDs using version 8:</dt>
          <dd>
            <t>As per <xref target="uuidv5"/> name-based UUIDs that desire to use modern hashing algorithms <bcp14>MUST</bcp14> be created within the UUIDv8 space.
 These <bcp14>MAY</bcp14> leverage newer hashing protocols such as SHA-256 or SHA-512 defined by <xref target="FIPS180-4"/>, SHA-3 or SHAKE defined by <xref target="FIPS202"/>, or even protocols that have not been defined yet.
 To ensure UUIDv8 name-based UUID values of different hashing protocols can exist in the same bit space; this document defines various "hashspaces" in <xref target="hashspaces"/>.
 Creation of name-based version 8 UUIDs follows the same logic defined in <xref target="uuidv5"/>, but the hashspace should be used to as the starting point with the desired
 namespace and name concatenated to the end of the hashspace.
 Then an implementation may apply the desired hashing algorithm to the entire value after all have been converted to a canonical sequence of octets in network byte order.
 Ensure the version and variant and variant bits are modified as per <xref target="v8"/> bit layout, and finally trim any excess bits beyond 128.
 An important note for secure hashing algorithms that produce variable rate outputs, such as those found in SHAKE, the output hash <bcp14>MUST</bcp14> be 128 bits or larger.
 See <xref target="uuidv8_example_name"/> for a SHA-256 UUIDv8 example test vector.</t>
          </dd>
          <dt>Advertising the Hash Algorithm:</dt>
          <dd>
            <t>Name-based UUIDs utilizing UUIDv8 do not allocate any available bits to identifying the hashing algorithm.
As such where common knowledge about the hashing algorithm for a given UUIDv8 name-space UUID is required, sharing the Hash Space ID proves useful for identifying the algorithm.
That is, to detail SHA-256 was used to create a given UUIDv8 name-based UUID an implementation may also share the "3fb32780-953c-4464-9cfd-e85dbbe9843d" hash space which uniquely identifies the SHA-256 hashing algorithm for the purpose of UUIDv8. Mind you that this need not be the only method of sharing the hashing algorithm; this is one example of how two systems could share knowledge.
The protocol of choice, communication channels, and actual method of sharing this data between systems are outside the scope of this specification.</t>
          </dd>
        </dl>
      </section>
      <section anchor="collision_resistance">
        <name>Collision Resistance</name>
        <t>Implementations should weigh the consequences of UUID collisions within their
application and when deciding between UUID versions that use entropy (randomness)
versus the other components such as those in <xref target="timestamp_considerations"/> and <xref target="monotonicity_counters"/>.
This is especially true for distributed node collision resistance as defined
by <xref target="distributed_shared_knowledge"/>.</t>
        <t>There are two example scenarios below which help illustrate the varying seriousness
of a collision within an application.</t>
        <dl newline="true">
          <dt>Low Impact:</dt>
          <dd>
            <t>A UUID collision generated a duplicate log entry which results in incorrect
statistics derived from the data. Implementations that are not negatively
affected by collisions may continue with the entropy and uniqueness provided
by the traditional UUID format.</t>
          </dd>
          <dt>High Impact:</dt>
          <dd>
            <t>A duplicate key causes an airplane to receive the wrong course which puts
people's lives at risk. In this scenario there is no margin for error. Collisions
<bcp14>MUST</bcp14> be avoided and failure is unacceptable. Applications dealing with this
type of scenario <bcp14>MUST</bcp14> employ as much collision resistance as possible within
the given application context.</t>
          </dd>
        </dl>
      </section>
      <section anchor="global_local_uniqueness">
        <name>Global and Local Uniqueness</name>
        <t>UUIDs created by this specification <bcp14>MAY</bcp14> be used to provide local uniqueness
guarantees.
For example, ensuring UUIDs created within a local application context are
unique within a database <bcp14>MAY</bcp14> be sufficient for some implementations where
global uniqueness outside of the application context, in other applications,
or around the world is not required.</t>
        <t>Although true global uniqueness is impossible to guarantee without a shared
knowledge scheme, a shared knowledge scheme is not required by UUID to provide
uniqueness for practical implementation purposes.
Implementations <bcp14>MAY</bcp14> implement a shared knowledge scheme introduced in <xref target="distributed_shared_knowledge"/> as they see fit to extend the uniqueness guaranteed by this specification.</t>
      </section>
      <section anchor="unguessability">
        <name>Unguessability</name>
        <t>Implementations <bcp14>SHOULD</bcp14> utilize a cryptographically secure pseudo-random number
generator (CSPRNG) to provide values that are both difficult to predict ("unguessable")
and have a low likelihood of collision ("unique").  The exception is when a
suitable CSPRNG is unavailable in the execution environment.
Take care to ensure the CSPRNG state is properly reseeded upon
state changes, such as process forks, to ensure proper CSPRNG operation.
CSPRNG ensures the best of <xref target="collision_resistance"/> and <xref target="Security"/> are present in modern UUIDs.</t>
        <t>Further advice on generating cryptographic-quality random numbers can be found in <xref target="RFC4086"/> and in <xref target="RANDOM"/>.</t>
      </section>
      <section anchor="unidentifiable">
        <name>UUIDs That Do Not Identify the Host</name>
        <t>This section describes how to generate a UUIDv1 or UUIDv6 value if an IEEE
802 address is not available, or its use is not desired.</t>
        <t>Implementations obtain a 47-bit cryptographic-quality random
number as per <xref target="unguessability"/> and use it as the low 47 bits of the node ID.</t>
        <t>Implementations <bcp14>MUST</bcp14> set the least significant bit of the first octet of the node ID set to one to create a 48-bit node id.
This bit is the unicast/multicast bit, which will never be set in IEEE 802
addresses obtained from network cards.  Hence, there can never be a
conflict between UUIDs generated by machines with and without network
cards.</t>
        <t>For compatibility with earlier specifications, note that this
document uses the unicast/multicast bit, instead of the arguably more
correct local/global bit because MAC addresses with the local/global bit set or not are both possible in a network.
This is not the case with the unicast/multicast bit.
One node cannot have a MAC address that multicasts to multiple nodes.</t>
        <t>In addition, items such as the computer's name and the name of the
operating system, while not strictly speaking random, will help
differentiate the results from those obtained by other systems.</t>
        <t>The exact algorithm to generate a node ID using these data is system
specific, because both the data available and the functions to obtain
them are often very system specific.  A generic approach, however, is
to accumulate as many sources as possible into a buffer, use a
message digest such as MD5 <xref target="RFC1321"/> or SHA-1 <xref target="FIPS180-4"/>, take an arbitrary 6
bytes from the hash value, and set the multicast bit as described
above.</t>
      </section>
      <section anchor="sorting">
        <name>Sorting</name>
        <t>UUIDv6 and UUIDv7 are designed so that implementations that require sorting
(e.g., database indexes) sort as opaque raw bytes, without need for
parsing or introspection.</t>
        <t>Time ordered monotonic UUIDs benefit from greater database index locality
because the new values are near each other in the index.
As a result objects are more easily clustered together for better performance.
The real-world differences in this approach of index locality vs random data
inserts can be quite large.</t>
        <t>UUIDs formats created by this specification are intended to be lexicographically sortable
while in the textual representation.</t>
        <t>UUIDs created by this specification are crafted with big-endian byte order
(network byte order) in mind. If little-endian style is required, UUIDv8
is available for custom UUID formats.</t>
      </section>
      <section anchor="opacity">
        <name>Opacity</name>
        <t>UUIDs <bcp14>SHOULD</bcp14> be treated as opaque values and implementations <bcp14>SHOULD NOT</bcp14> examine
the bits in a UUID. However,
inspectors <bcp14>MAY</bcp14> refer to <xref target="variant_field"/> and <xref target="version_field"/> when required to determine UUID version and variant.</t>
        <t>As general guidance, we recommend not parsing UUID values unnecessarily,
and instead treating them as opaquely as possible.  Although application-specific
concerns could of course require some degree of introspection
(e.g., to examine the variant, version or perhaps the timestamp of a UUID),
the advice here is to avoid this or other parsing unless absolutely necessary.
Applications typically tend to be simpler, more interoperable, and perform better,
when this advice is followed.</t>
      </section>
      <section anchor="database_considerations">
        <name>DBMS and Database Considerations</name>
        <t>For many applications, such as databases, storing UUIDs as text is unnecessarily
verbose, requiring 288 bits to represent 128 bit UUID values.
Thus, where feasible, UUIDs <bcp14>SHOULD</bcp14> be stored within database applications
as the underlying 128 bit binary value.</t>
        <t>For other systems, UUIDs <bcp14>MAY</bcp14> be stored in binary form or as text, as appropriate.
The trade-offs to both approaches are:</t>
        <ul spacing="normal">
          <li>Storing as binary requires less space and may result in faster data access.</li>
          <li>Storing as text requires more space but may require less translation if the
resulting text form is to be used after retrieval and thus maybe simpler
to implement.</li>
        </ul>
        <t>DBMS vendors are encouraged to provide functionality to generate and store
UUID formats defined by this specification for use as identifiers or left
parts of identifiers such as, but not limited to, primary keys, surrogate
keys for temporal databases, foreign keys included in polymorphic relationships,
and keys for key-value pairs in JSON columns and key-value databases.
Applications using a monolithic database may find using database-generated
UUIDs (as opposed to client-generate UUIDs) provides the best UUID monotonicity.
In addition to UUIDs, additional identifiers <bcp14>MAY</bcp14> be used to ensure integrity
and feedback.</t>
      </section>
    </section>
    <section anchor="IANA">
      <name>IANA Considerations</name>
      <t>There is no update required to the IANA URN namespace registration <xref target="URNNamespaces"/> for UUID filed in <xref target="RFC4122"/>.
Further, at this time the authors and working group have concluded that IANA is not required to track UUIDs used for identifying items such as versions, variants, namespaces, or hashspaces.</t>
    </section>
    <section anchor="Security">
      <name>Security Considerations</name>
      <t>Implementations <bcp14>SHOULD NOT</bcp14> assume that UUIDs are hard to guess.
For example, they <bcp14>MUST NOT</bcp14> be used
as security capabilities (identifiers whose mere possession grants
access).  Discovery of predictability in a random number source will
result in a vulnerability.</t>
      <t>Implementations <bcp14>MUST NOT</bcp14> assume that it is easy to determine if a UUID has been
slightly transposed in order to redirect a reference to another
object.  Humans do not have the ability to easily check the integrity
of a UUID by simply glancing at it.</t>
      <t>MAC addresses pose inherent security risks and <bcp14>SHOULD NOT</bcp14> be used within
a UUID.
Instead CSPRNG data <bcp14>SHOULD</bcp14> be selected from a source with sufficient entropy
to ensure guaranteed
uniqueness among UUID generation. See <xref target="unguessability"/> and <xref target="unidentifiable"/> for more information.</t>
      <t>Timestamps embedded in the UUID do pose a very small attack surface. The
timestamp in conjunction with
an embedded counter does signal the order of creation for a given UUID and
its corresponding data but
does not define anything about the data itself or the application as a whole.
If UUIDs are required for
use with any security operation within an application context in any shape
or form then UUIDv4, <xref target="uuidv4"/> <bcp14>SHOULD</bcp14> be utilized.</t>
      <t>See <xref target="RFC6151"/> for MD5 Security Considerations and <xref target="RFC6194"/> for SHA-1 security considerations.</t>
    </section>
    <section anchor="Acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors gratefully acknowledge the contributions of Rich Salz,
Michael Mealling,
Ben Campbell,
Ben Ramsey,
Fabio Lima,
Gonzalo Salgueiro,
Martin Thomson,
Murray S. Kucherawy,
Rick van Rein,
Rob Wilton,
Sean Leonard,
Theodore Y. Ts'o,
Robert Kieffer,
Sergey Prokhorenko,
LiosK.</t>
      <t>As well as all of those in the IETF community and on GitHub to who contributed
to the discussions which resulted in this document.</t>
      <t>This document draws heavily on the OSF DCE specification for UUIDs.
Ted Ts'o provided helpful comments, especially on the byte ordering
section which we mostly plagiarized from a proposed wording he
supplied (all errors in that section are our responsibility,
however).</t>
      <t>We are also grateful to the careful reading and bit-twiddling of Ralf
S. Engelschall, John Larmouth, and Paul Thorpe.  Professor Larmouth
was also invaluable in achieving coordination with ISO/IEC.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="C309" target="https://pubs.opengroup.org/onlinepubs/9696999099/toc.pdf">
          <front>
            <title>DCE: Remote Procedure Call</title>
            <author>
              <organization/>
            </author>
            <date year="1994" month="August"/>
          </front>
          <seriesInfo name="ISBN" value="1-85912-041-5"/>
          <refcontent>Open Group CAE Specification C309</refcontent>
        </reference>
        <reference anchor="X667">
          <front>
            <title>Information Technology, "Procedures for the operation of OSI Registration Authorities: Generation and registration of Universally Unique Identifiers (UUIDs) and their use as ASN.1 Object Identifier components"</title>
            <author>
              <organization/>
            </author>
            <date year="2004"/>
          </front>
          <seriesInfo name="ISO/IEC" value="9834-8:2004"/>
          <seriesInfo name="ITU-T Rec." value="X.667"/>
        </reference>
        <reference anchor="RFC4086">
          <front>
            <title>Randomness Requirements for Security</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="J. Schiller" initials="J." surname="Schiller"/>
            <author fullname="S. Crocker" initials="S." surname="Crocker"/>
            <date month="June" year="2005"/>
            <abstract>
              <t>Security systems are built on strong cryptographic algorithms that foil pattern analysis attempts. However, the security of these systems is dependent on generating secret quantities for passwords, cryptographic keys, and similar quantities. The use of pseudo-random processes to generate secret quantities can result in pseudo-security. A sophisticated attacker may find it easier to reproduce the environment that produced the secret quantities and to search the resulting small set of possibilities than to locate the quantities in the whole of the potential number space.</t>
              <t>Choosing random quantities to foil a resourceful and motivated adversary is surprisingly difficult. This document points out many pitfalls in using poor entropy sources or traditional pseudo-random number generation techniques for generating such quantities. It recommends the use of truly random hardware techniques and shows that the existing hardware on many systems can be used for this purpose. It provides suggestions to ameliorate the problem when a hardware solution is not available, and it gives examples of how large such quantities need to be for some applications. 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="106"/>
          <seriesInfo name="RFC" value="4086"/>
          <seriesInfo name="DOI" value="10.17487/RFC4086"/>
        </reference>
        <reference anchor="RFC8141">
          <front>
            <title>Uniform Resource Names (URNs)</title>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <date month="April" year="2017"/>
            <abstract>
              <t>A Uniform Resource Name (URN) is a Uniform Resource Identifier (URI) that is assigned under the "urn" URI scheme and a particular URN namespace, with the intent that the URN will be a persistent, location-independent resource identifier. With regard to URN syntax, this document defines the canonical syntax for URNs (in a way that is consistent with URI syntax), specifies methods for determining URN-equivalence, and discusses URI conformance. With regard to URN namespaces, this document specifies a method for defining a URN namespace and associating it with a namespace identifier, and it describes procedures for registering namespace identifiers with the Internet Assigned Numbers Authority (IANA). This document obsoletes both RFCs 2141 and 3406.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8141"/>
          <seriesInfo name="DOI" value="10.17487/RFC8141"/>
        </reference>
        <reference anchor="FIPS180-4" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf">
          <front>
            <title>Secure Hash Standard</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2015" month="August"/>
          </front>
          <seriesInfo name="FIPS" value="PUB 180-4"/>
        </reference>
        <reference anchor="FIPS202" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf">
          <front>
            <title>SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2015" month="August"/>
          </front>
          <seriesInfo name="FIPS" value="PUB 202"/>
        </reference>
        <reference anchor="C311" target="https://pubs.opengroup.org/onlinepubs/9696989899/toc.pdf">
          <front>
            <title>DCE 1.1: Authentication and Security Services</title>
            <author>
              <organization/>
            </author>
            <date year="1997"/>
          </front>
          <refcontent>Open Group CAE Specification C311</refcontent>
        </reference>
        <reference anchor="RANDOM" target="https://peteroupc.github.io/random.html">
          <front>
            <title>Random Number Generator Recommendations for Applications</title>
            <author initials="P." surname="Occil" fullname="Peter Occil">
              <organization/>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC1321">
          <front>
            <title>The MD5 Message-Digest Algorithm</title>
            <author fullname="R. Rivest" initials="R." surname="Rivest"/>
            <date month="April" year="1992"/>
            <abstract>
              <t>This document describes the MD5 message-digest algorithm. The algorithm takes as input a message of arbitrary length and produces as output a 128-bit "fingerprint" or "message digest" of the input. This memo provides information for the Internet community. It does not specify an Internet standard.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1321"/>
          <seriesInfo name="DOI" value="10.17487/RFC1321"/>
        </reference>
        <reference anchor="RFC4122">
          <front>
            <title>A Universally Unique IDentifier (UUID) URN Namespace</title>
            <author fullname="P. Leach" initials="P." surname="Leach"/>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <author fullname="R. Salz" initials="R." surname="Salz"/>
            <date month="July" year="2005"/>
            <abstract>
              <t>This specification defines a Uniform Resource Name namespace for UUIDs (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDentifier). A UUID is 128 bits long, and can guarantee uniqueness across space and time. UUIDs were originally used in the Apollo Network Computing System and later in the Open Software Foundation\'s (OSF) Distributed Computing Environment (DCE), and then in Microsoft Windows platforms.</t>
              <t>This specification is derived from the DCE specification with the kind permission of the OSF (now known as The Open Group). Information from earlier versions of the DCE specification have been incorporated into this document. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4122"/>
          <seriesInfo name="DOI" value="10.17487/RFC4122"/>
        </reference>
        <reference anchor="RFC5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
            <author fullname="P. Overell" initials="P." surname="Overell"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC6151">
          <front>
            <title>Updated Security Considerations for the MD5 Message-Digest and the HMAC-MD5 Algorithms</title>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <author fullname="L. Chen" initials="L." surname="Chen"/>
            <date month="March" year="2011"/>
            <abstract>
              <t>This document updates the security considerations for the MD5 message digest algorithm. It also updates the security considerations for HMAC-MD5. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6151"/>
          <seriesInfo name="DOI" value="10.17487/RFC6151"/>
        </reference>
        <reference anchor="RFC6194">
          <front>
            <title>Security Considerations for the SHA-0 and SHA-1 Message-Digest Algorithms</title>
            <author fullname="T. Polk" initials="T." surname="Polk"/>
            <author fullname="L. Chen" initials="L." surname="Chen"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="March" year="2011"/>
            <abstract>
              <t>This document includes security considerations for the SHA-0 and SHA-1 message digest algorithm. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6194"/>
          <seriesInfo name="DOI" value="10.17487/RFC6194"/>
        </reference>
        <reference anchor="LexicalUUID" target="https://github.com/twitter-archive/cassie">
          <front>
            <title>A Scala client for Cassandra</title>
            <author>
              <organization>Twitter</organization>
            </author>
            <date year="2012" month="November"/>
          </front>
          <seriesInfo name="commit" value="f6da4e0"/>
        </reference>
        <reference anchor="Snowflake" target="https://github.com/twitter-archive/snowflake/releases/tag/snowflake-2010">
          <front>
            <title>Snowflake is a network service for generating unique ID numbers at high scale with some simple guarantees.</title>
            <author>
              <organization>Twitter</organization>
            </author>
            <date year="2014" month="May"/>
          </front>
          <seriesInfo name="Commit" value="b3f6a3c"/>
        </reference>
        <reference anchor="Flake" target="https://github.com/boundary/flake">
          <front>
            <title>Flake: A decentralized, k-ordered id generation service in Erlang</title>
            <author>
              <organization>Boundary</organization>
            </author>
            <date year="2017" month="February"/>
          </front>
          <seriesInfo name="Commit" value="15c933a"/>
        </reference>
        <reference anchor="ShardingID" target="https://instagram-engineering.com/sharding-ids-at-instagram-1cf5a71e5a5c">
          <front>
            <title>Sharding &amp; IDs at Instagram</title>
            <author>
              <organization>Instagram Engineering</organization>
            </author>
            <date year="2012" month="December"/>
          </front>
        </reference>
        <reference anchor="KSUID" target="https://github.com/segmentio/ksuid">
          <front>
            <title>K-Sortable Globally Unique IDs</title>
            <author>
              <organization>Segment</organization>
            </author>
            <date year="2020" month="July"/>
          </front>
          <seriesInfo name="Commit" value="bf376a7"/>
        </reference>
        <reference anchor="Elasticflake" target="https://github.com/ppearcy/elasticflake">
          <front>
            <title>Sequential UUID / Flake ID generator pulled out of elasticsearch common</title>
            <author initials="P." surname="Pearcy" fullname="Paul Pearcy">
              <organization/>
            </author>
            <date year="2015" month="January"/>
          </front>
          <seriesInfo name="Commit" value="dd71c21"/>
        </reference>
        <reference anchor="FlakeID" target="https://github.com/T-PWK/flake-idgen">
          <front>
            <title>Flake ID Generator</title>
            <author initials="T." surname="Pawlak" fullname="Tom Pawlak">
              <organization/>
            </author>
            <date year="2020" month="April"/>
          </front>
          <seriesInfo name="Commit" value="fcd6a2f"/>
        </reference>
        <reference anchor="Sonyflake" target="https://github.com/sony/sonyflake">
          <front>
            <title>A distributed unique ID generator inspired by Twitter's Snowflake</title>
            <author>
              <organization>Sony</organization>
            </author>
            <date year="2020" month="August"/>
          </front>
          <seriesInfo name="Commit" value="848d664"/>
        </reference>
        <reference anchor="orderedUuid" target="https://itnext.io/laravel-the-mysterious-ordered-uuid-29e7500b4f8">
          <front>
            <title>Laravel: The mysterious "Ordered UUID"</title>
            <author initials="I. B." surname="Cabrera" fullname="Italo Baeza Cabrera">
              <organization/>
            </author>
            <date year="2020" month="January"/>
          </front>
        </reference>
        <reference anchor="COMBGUID" target="https://github.com/richardtallent/RT.Comb">
          <front>
            <title>Creating sequential GUIDs in C# for MSSQL or PostgreSql</title>
            <author initials="R." surname="Tallent" fullname="Richard Tallent">
              <organization/>
            </author>
            <date year="2020" month="December"/>
          </front>
          <seriesInfo name="Commit" value="2759820"/>
        </reference>
        <reference anchor="ULID" target="https://github.com/ulid/spec">
          <front>
            <title>Universally Unique Lexicographically Sortable Identifier</title>
            <author initials="A." surname="Feerasta" fullname="Alizain Feerasta">
              <organization/>
            </author>
            <date year="2019" month="May"/>
          </front>
          <seriesInfo name="Commit" value="d0c7170"/>
        </reference>
        <reference anchor="SID" target="https://github.com/chilts/sid">
          <front>
            <title>sid : generate sortable identifiers</title>
            <author initials="A." surname="Chilton" fullname="Andrew Chilton">
              <organization/>
            </author>
            <date year="2019" month="June"/>
          </front>
          <seriesInfo name="Commit" value="660e947"/>
        </reference>
        <reference anchor="pushID" target="https://firebase.googleblog.com/2015/02/the-2120-ways-to-ensure-unique_68.html">
          <front>
            <title>The 2^120 Ways to Ensure Unique Identifiers</title>
            <author>
              <organization>Google</organization>
            </author>
            <date year="2015" month="February"/>
          </front>
        </reference>
        <reference anchor="XID" target="https://github.com/rs/xid">
          <front>
            <title>Globally Unique ID Generator</title>
            <author initials="O." surname="Poitrey" fullname="Olivier Poitrey">
              <organization/>
            </author>
            <date year="2020" month="October"/>
          </front>
          <seriesInfo name="Commit" value="efa678f"/>
        </reference>
        <reference anchor="ObjectID" target="https://docs.mongodb.com/manual/reference/method/ObjectId/">
          <front>
            <title>ObjectId - MongoDB Manual</title>
            <author>
              <organization>MongoDB</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="CUID" target="https://github.com/ericelliott/cuid">
          <front>
            <title>Collision-resistant ids optimized for horizontal scaling and performance.</title>
            <author initials="E." surname="Elliott" fullname="Eric Elliott">
              <organization/>
            </author>
            <date year="2020" month="October"/>
          </front>
          <seriesInfo name="Commit" value="215b27b"/>
        </reference>
        <reference anchor="IEEE754" target="https://standards.ieee.org/ieee/754/6210/">
          <front>
            <title>IEEE Standard for Floating-Point Arithmetic.</title>
            <author>
              <organization>IEEE</organization>
            </author>
            <date year="2019" month="July"/>
          </front>
          <seriesInfo name="Series" value="754-2019"/>
        </reference>
        <reference anchor="URNNamespaces" target="https://www.iana.org/assignments/urn-namespaces/urn-namespaces.xhtml">
          <front>
            <title>Uniform Resource Names (URN) Namespaces</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date year="2022" month="November" day="18"/>
          </front>
        </reference>
        <reference anchor="Python" target="https://docs.python.org/3/library/uuid.html">
          <front>
            <title>UUID objects according to RFC</title>
            <author>
              <organization>Python</organization>
            </author>
            <date year="2023" month="May" day="23"/>
          </front>
        </reference>
        <reference anchor="Microsoft" target="https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dtyp/a66edeb1-52a0-4d64-a93b-2f5c833d7d92">
          <front>
            <title>curly braced GUID string</title>
            <author>
              <organization>Microsoft</organization>
            </author>
            <date year="2023" month="April" day="03"/>
          </front>
        </reference>
        <reference anchor="MS_COM_GUID" target="https://devblogs.microsoft.com/oldnewthing/20220928-00/?p=107221">
          <front>
            <title>Why does COM express GUIDs in a mix of big-endian and little-endian? Why can’t it just pick a side and stick with it?</title>
            <author initials="R." surname="Chen" fullname="Raymond Chen">
              <organization/>
            </author>
            <date year="2022" month="September" day="28"/>
          </front>
        </reference>
        <reference anchor="IBM_NCS" target="https://www.ibm.com/docs/en/aix/7.1?topic=u-uuid-gen-command-ncs">
          <front>
            <title>uuid_gen Command (NCS)</title>
            <author>
              <organization>IBM</organization>
            </author>
            <date year="2023" month="March" day="23"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 1869?>

<section anchor="namespaces">
      <name>Some Name Space IDs</name>
      <t>This appendix lists the name space IDs for some potentially interesting name spaces such those for
fully-qualified domain names (DNS), uniform resource locators (URLs), Object Identifiers (OIDs) in dot-notation without leading dot, and X.500 distinguished names (DNs) in distinguished encoding rule (DER) or text format.</t>
      <sourcecode type="code"><![CDATA[
NameSpace_DNS  = "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
NameSpace_URL  = "6ba7b811-9dad-11d1-80b4-00c04fd430c8"
NameSpace_OID  = "6ba7b812-9dad-11d1-80b4-00c04fd430c8"
NameSpace_X500 = "6ba7b814-9dad-11d1-80b4-00c04fd430c8"
]]></sourcecode>
    </section>
    <section anchor="hashspaces">
      <name>Some Hash Space IDs</name>
      <t>This appendix lists the hash space IDs for use with UUIDv8 name-based UUIDs.</t>
      <sourcecode type="code"><![CDATA[
SHA2_224     = "59031ca3-fbdb-47fb-9f6c-0f30e2e83145"
SHA2_256     = "3fb32780-953c-4464-9cfd-e85dbbe9843d"
SHA2_384     = "e6800581-f333-484b-8778-601ff2b58da8"
SHA2_512     = "0fde22f2-e7ba-4fd1-9753-9c2ea88fa3f9"
SHA2_512_224 = "003c2038-c4fe-4b95-a672-0c26c1b79542"
SHA2_512_256 = "9475ad00-3769-4c07-9642-5e7383732306"
SHA3_224     = "9768761f-ac5a-419e-a180-7ca239e8025a"
SHA3_256     = "2034d66b-4047-4553-8f80-70e593176877"
SHA3_384     = "872fb339-2636-4bdd-bda6-b6dc2a82b1b3"
SHA3_512     = "a4920a5d-a8a6-426c-8d14-a6cafbe64c7b"
SHAKE_128    = "7ea218f6-629a-425f-9f88-7439d63296bb"
SHAKE_256    = "2e7fc6a4-2919-4edc-b0ba-7d7062ce4f0a"
]]></sourcecode>
    </section>
    <section anchor="test_vectors">
      <name>Test Vectors</name>
      <t>Both UUIDv1 and UUIDv6 test vectors utilize the same 60 bit timestamp: 0x1EC9414C232AB00
(138648505420000000) Tuesday, February 22, 2022 2:22:22.000000 PM GMT-05:00</t>
      <t>Both UUIDv1 and UUIDv6 utilize the same values in clock_seq,
and node. All of which have been generated with random data.</t>
      <t>The pseudocode used for converting from a 64 bit Unix timestamp to a 100ns Gregorian timestamp value
has been left in the document for reference purposes.</t>
      <figure>
        <name>Test Vector Timestamp Pseudo-code</name>
        <sourcecode type="code"><![CDATA[
# Gregorian to Unix Offset:
# The number of 100-ns intervals between the
# UUID epoch 1582-10-15 00:00:00
# and the Unix epoch 1970-01-01 00:00:00
# Greg_Unix_offset = 0x01b21dd213814000 or 122192928000000000

# Unix 64 bit Nanosecond Timestamp:
# Unix NS: Tuesday, February 22, 2022 2:22:22 PM GMT-05:00
# Unix_64_bit_ns = 0x16D6320C3D4DCC00 or 1645557742000000000

# Unix Nanosecond precision to Gregorian 100-nanosecond intervals
# Greg_100_ns = (Unix_64_bit_ns/100)+Greg_Unix_offset

# Work:
# Greg_100_ns = (1645557742000000000/100)+122192928000000000
# Unix_64_bit_ns = (138648505420000000-122192928000000000)*100

# Final:
# Greg_100_ns = 0x1EC9414C232AB00 or 138648505420000000
]]></sourcecode>
      </figure>
      <section anchor="uuidv1_example">
        <name>Example of a UUIDv1 Value</name>
        <figure>
          <name>UUIDv1 Example Test Vector</name>
          <artwork><![CDATA[
-------------------------------------------
field      bits value
-------------------------------------------
time_low   32   0xC232AB00
time_mid   16   0x9414
ver         4   0x1
time_high  12   0x1EC
var         2   b10
clock_seq  14   b11, 0x3C8
node       48   0x9E6BDECED846
-------------------------------------------
total      128
-------------------------------------------
final: C232AB00-9414-11EC-B3C8-9E6BDECED846
]]></artwork>
        </figure>
      </section>
      <section anchor="uuidv3_example">
        <name>Example of a UUIDv3 Value</name>
        <t>The MD5 computation from is detailed in <xref target="v3md5"/> using the DNS NameSpace and the Name "www.example.com".
while the field mapping and all values are illustrated in <xref target="v3fields"/>.
Finally to further illustrate the bit swapping for version and variant see <xref target="v3vervar"/>.</t>
        <figure anchor="v3md5">
          <name>UUIDv3 Example MD5</name>
          <artwork><![CDATA[
Name Space (DNS): 6ba7b810-9dad-11d1-80b4-00c04fd430c8
Name:             www.example.com
------------------------------------------------------
MD5:              5df418813aed051548a72f4a814cf09e
]]></artwork>
        </figure>
        <figure anchor="v3fields">
          <name>UUIDv3 Example Test Vector</name>
          <artwork><![CDATA[
-------------------------------------------
field     bits value
-------------------------------------------
md5_high  48   0x5df418813aed
ver        4   0x3
md5_mid   12   0x515
var        2   b10
md5_low   62   b00, 0x8a72f4a814cf09e
-------------------------------------------
total     128
-------------------------------------------
final: 5df41881-3aed-3515-88a7-2f4a814cf09e
]]></artwork>
        </figure>
        <figure anchor="v3vervar">
          <name>UUIDv3 Example Ver Var bit swaps</name>
          <artwork><![CDATA[
MD5 hex and dash:      5df41881-3aed-0515-48a7-2f4a814cf09e
Ver and Var Overwrite: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
Final:                 5df41881-3aed-3515-88a7-2f4a814cf09e
]]></artwork>
        </figure>
      </section>
      <section anchor="uuidv4_example">
        <name>Example of a UUIDv4 Value</name>
        <t>This UUIDv4 example was created by generating 16 bytes
of random data resulting in the hexadecimal value of
919108F752D133205BACF847DB4148A8. This is then used to
fill out the fields as shown in <xref target="v4fields"/>.</t>
        <t>Finally to further illustrate the bit swapping for version and variant see <xref target="v4vervar"/>.</t>
        <figure anchor="v4fields">
          <name>UUIDv4 Example Test Vector</name>
          <artwork><![CDATA[
-------------------------------------------
field     bits value
-------------------------------------------
random_a  48   0x919108f752d1
ver        4   0x4
random_b  12   0x320
var        2   b10
random_c  62   b01, 0xbacf847db4148a8
-------------------------------------------
total     128
-------------------------------------------
final: 919108f7-52d1-4320-9bac-f847db4148a8
]]></artwork>
        </figure>
        <figure anchor="v4vervar">
          <name>UUIDv4 Example Ver/Var bit swaps</name>
          <artwork><![CDATA[
Random hex:            919108f752d133205bacf847db4148a8
Random hex and dash:   919108f7-52d1-3320-5bac-f847db4148a8
Ver and Var Overwrite: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
Final:                 919108f7-52d1-4320-9bac-f847db4148a8
]]></artwork>
        </figure>
      </section>
      <section anchor="uuidv5_example">
        <name>Example of a UUIDv5 Value</name>
        <t>The SHA-1 computation from is detailed in <xref target="v5sha1"/> using the DNS NameSpace and the Name "www.example.com".
while the field mapping and all values are illustrated in <xref target="v5fields"/>.
Finally to further illustrate the bit swapping for version and variant and the unused/discarded part of the SHA-1 value see <xref target="v5vervar"/>.</t>
        <figure anchor="v5sha1">
          <name>UUIDv5 Example SHA-1</name>
          <artwork><![CDATA[
Name Space (DNS): 6ba7b810-9dad-11d1-80b4-00c04fd430c8
Name:             www.example.com
----------------------------------------------------------
SHA-1:            2ed6657de927468b55e12665a8aea6a22dee3e35
]]></artwork>
        </figure>
        <figure anchor="v5fields">
          <name>UUIDv5 Example Test Vector</name>
          <artwork><![CDATA[
-------------------------------------------
field      bits value
-------------------------------------------
sha1_high  48   0x2ed6657de927
ver         4   0x5
sha1_mid   12   0x68b
var         2   b10
sha1_low   62   b01, 0x5e12665a8aea6a2
-------------------------------------------
total      128
-------------------------------------------
final: 2ed6657d-e927-568b-95e1-2665a8aea6a2
]]></artwork>
        </figure>
        <figure anchor="v5vervar">
          <name>UUIDv5 Example Ver/Var bit swaps and discarded SHA-1 segment</name>
          <artwork><![CDATA[
SHA-1 hex and dash:    2ed6657d-e927-468b-55e1-2665a8aea6a2-2dee3e35
Ver and Var Overwrite: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
Final:                 2ed6657d-e927-568b-95e1-2665a8aea6a2
Discarded:                                                 -2dee3e35
]]></artwork>
        </figure>
      </section>
      <section anchor="uuidv6_example">
        <name>Example of a UUIDv6 Value</name>
        <figure>
          <name>UUIDv6 Example Test Vector</name>
          <artwork><![CDATA[
-------------------------------------------
field       bits value
-------------------------------------------
time_high   32   0x1EC9414C
time_mid    16   0x232A
ver          4   0x6
time_high   12   0xB00
var          2   b10
clock_seq   14   b11, 0x3C8
node        48   0x9E6BDECED846
-------------------------------------------
total       128
-------------------------------------------
final: 1EC9414C-232A-6B00-B3C8-9E6BDECED846
]]></artwork>
        </figure>
      </section>
      <section anchor="uuidv7_example">
        <name>Example of a UUIDv7 Value</name>
        <t>This example UUIDv7 test vector utilizes a well-known Unix epoch timestamp with
millisecond precision to fill the first 48 bits.</t>
        <t>rand_a and rand_b are filled with random data.</t>
        <t>The timestamp is Tuesday, February 22, 2022 2:22:22.00 PM GMT-05:00 represented
as 0x17F22E279B0 or 1645557742000</t>
        <figure>
          <name>UUIDv7 Example Test Vector</name>
          <artwork><![CDATA[
-------------------------------------------
field       bits value
-------------------------------------------
unix_ts_ms  48   0x17F22E279B0
ver          4   0x7
rand_a      12   0xCC3
var          2   b10
rand_b      62   b01, 0x8C4DC0C0C07398F
-------------------------------------------
total       128
-------------------------------------------
final: 017F22E2-79B0-7CC3-98C4-DC0C0C07398F
]]></artwork>
        </figure>
      </section>
      <section anchor="uuidv8_example">
        <name>Example of a UUIDv8 Value (time-based)</name>
        <t>This example UUIDv8 test vector utilizes a well-known 64 bit Unix epoch timestamp with
nanosecond precision, truncated to the least-significant, right-most, bits
to fill the first 48 bits through version.</t>
        <t>The next two segments of custom_b and custom_c are filled with random
data.</t>
        <t>Timestamp is Tuesday, February 22, 2022 2:22:22.000000 PM GMT-05:00 represented
as 0x16D6320C3D4DCC00 or 1645557742000000000</t>
        <t>It should be noted that this example is just to illustrate one scenario for
UUIDv8. Test vectors will likely be implementation specific and vary greatly
from this simple example.</t>
        <figure>
          <name>UUIDv8 Example Time-based Test Vector</name>
          <artwork><![CDATA[
-------------------------------------------
field     bits value
-------------------------------------------
custom_a  48   0x320C3D4DCC00
ver        4   0x8
custom_b  12   0x75B
var        2   b10
custom_c  62   b00, 0xEC932D5F69181C0
-------------------------------------------
total     128
-------------------------------------------
final: 320C3D4D-CC00-875B-8EC9-32D5F69181C0
]]></artwork>
        </figure>
      </section>
      <section anchor="uuidv8_example_name">
        <name>Example of a UUIDv8 Value (name-based)</name>
        <t>A SHA-256 version of <xref target="uuidv5_example"/> is detailed in <xref target="v8sha256"/> to detail the usage of hash spaces alongside namespace and names.
The field mapping and all values are illustrated in <xref target="v8fieldssha256"/>.
Finally to further illustrate the bit swapping for version and variant and the unused/discarded part of the SHA-256 value see <xref target="v8vervar"/>.</t>
        <figure anchor="v8sha256">
          <name>UUIDv8 Example SHA256</name>
          <artwork><![CDATA[
Hash Space (SHA2_256): 3fb32780-953c-4464-9cfd-e85dbbe9843d
Name Space (DNS):      6ba7b810-9dad-11d1-80b4-00c04fd430c8
Name:                  www.example.com
----------------------------------------------------------------
SHA-256:
401835fda627a70a073fed73f2bc5b2c2a8936385a38a9c133de0ca4af0dfaed
]]></artwork>
        </figure>
        <figure anchor="v8fieldssha256">
          <name>UUIDv8 Example Name-Based SHA-256 Test Vector</name>
          <artwork><![CDATA[
-------------------------------------------
field     bits value
-------------------------------------------
custom_a  48   0x401835fda627
ver        4   0x8
custom_b  12   0x627
var        2   b10
custom_c  62   b0, 0x73fed73f2bc5b2c
-------------------------------------------
total     128
-------------------------------------------
final: 401835fd-a627-870a-873f-ed73f2bc5b2c
]]></artwork>
        </figure>
        <figure anchor="v8vervar">
          <name>UUIDv8 Example Ver/Var bit swaps and discarded SHA-256 segment</name>
          <artwork><![CDATA[
A: 401835fd-a627-a70a-073f-ed73f2bc5b2c-2a8936385a38a9c133de0ca4af0dfaed
B: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
C: 401835fd-a627-870a-873f-ed73f2bc5b2c
D:                                     -2a8936385a38a9c133de0ca4af0dfaed
]]></artwork>
        </figure>
        <t>Examining <xref target="v8vervar"/>:</t>
        <ul spacing="compact">
          <li>Line A details the full SHA-256 as a hexadecimal value with the dashes inserted.</li>
          <li>Line B details the version and variant hexadecimal positions which must be overwritten.</li>
          <li>Line C details the final value after the ver/var have been overwritten.</li>
          <li>Line D details the discarded, leftover values from the original SHA-256 computation.</li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+y92XLjWJYg+C4z/QNasmmXqgmK4C5FR2XJJXmEV4Qv7VJk
RFl3jxtIghLSSYAFgFrCy9v6N+ZtnuZD5lP6S+asdwFBuTzSI3KqqpVpHhIJ
3OXcc8++hGG4u3N7EvR2d2b5NIuXyUkwK+J5FaZJNQ/X63RWJLdhMZ/2o253
kpZhZ7y7M42rk6CsZrs7+aTMF0mVlCfBM3ziGXyZZ2WSlWv8qCrWCXxUrifL
tCzTPKseVjDDy4urF7s7q/RkdyeAcYp0CuM9e0jKZ/hBlU/9v2bJqrqBj3r0
QfmwLJJ56TxS5kXlfBTsB/F0ms6SrIoXi4dgmhdFMq3S7Np8HpyEh7s7VVot
YDU/ZeltUpT0LPz+z+skeHkOD6XzFD4ODn766eU5PB1PJgAKeBz+hL+KJD4J
Tt9d7e7cXZ8EAqjdnQ93/AfAM65g8G6nC7CF59fVTV7AhsOAofzDw69JEbxr
B+fxbVriNpJlnC5Ogg8PM/zkH6ZpOc3b03yJ3+UFTHKGnwSXD2WVLEs70vMi
ngXftYO3STzJZw/OUBP45h9W/HE7zc1AP2XTRb6e4RBpBmB72w5+TOLpDT7A
Y7qfyGCrvyxG/7C+ayeztTMQgS6tHoJ8HvwclzcA5SrPcMdZXizjCr6nUz7r
dY7pFzjRuLhO4MBvqmpVnhwdrdaTsp2vkuy6yNerNgx8lGeLNEvwi6PjIfzv
+LhzfHwEqNBezeYyCh/e3vnZxUnwLlnmVRK8LfIpLK9IgjM4zT1+sABsegOj
B9/h8MHZ6UVwuUqmcLqAxoCStDR+tEyKNCnTbJ7LUoPg5eXz1ydBFI4Hx1E3
7PSjcMBf8fGerq/XZRVEx8d9/PiX4XB08shYb45eXpwBmh6Pe/1wfNLtdPrP
zLdXP4VXsJNp+yT4pQ0Defv8e/MYjEiAhZVfJdObLF/k1w+tYM9svgzgiaC6
SfQVgG3BL8Ahvbl8CZNcp3Dt+LNTwsy0SvESf5dk+myczXSAwn0exmi6MbPa
jSkPcQRcRlroOOsyCeIyOL183Y6CN5O/wK10XoSLulzlGfxZ7rkwRijh3+9e
nPU74+GJ/iKfjaN+dKK/4GcvXr69jMadsL8F37LbBaFcBntqX+e3R/gL4Rq+
efT65eVVG39r0yAbGHeZTBHDvgdkDy4r2GNcCKDMHcc/Qr4hrwlo8QLOrYQB
1oClAEB9ryQY2WNsQK1uJxpsxShcJlzWn54HtFbdPRCdv3bvMMTmXbv8/jTs
mcXDxEmxXFe0w/B5XCYzhgru6eK+SuCpySIJ36xhhip4sc6m+KQe7t8SWrA7
JkpR9NuJ0hj+t50oBVE7OqHLhfg9NXeK8Qcp5mVS3KbTpHw6nYoid8tAdIhG
vDt9ff7m1bZ9AHPG8abt67S6WU+ADRwVsIx82b6plgt/2e/oi+D1ejmB6yi0
AGgJEKV8ucTzpAMk+nK6Wi1kZVtOVDgJLiB4A4x34V9q5IupEjPhEnCLo16X
rzP+otceJIsT/UU+G3R7/RP9RT4bRgN+F38xnx33T/QX/OzH5B7WvUAatQVm
AinY81F1l1aw/jAupjewyKNpDGJM4kHtNLiE4eJgukhRskDYnMFTAMoi3o7p
VzywDxLgMHrEDeiLZ5DCMufDWdxPOvjxZZbfzRfxh+TLd1Lqq0dFskjg8pZH
VXxtPw5hOZ1mFmRmDVK4kkGWVHd58QGXjPhMELgWPgIy11pFqiAjvIJXquAm
vb7R4UoAXxLA8m5AklsmQZkuV/DB9ToGRK2SpGx/KRj7YWc7FTgTME5682Hc
mxLNfBoIJ/ka6dDDEW3eg80zHgKQYZZMAQ2KeJH+msxawYcwL2ZJAaQxnRmo
wGVWYKVZcFEs4uz62fZNPpd5a7schUzFHt1lNJge93qEiJc3QEPhRLbiPciC
gAJFvAyB7AGpg1Gza9p5Ka+G6awMY1AOzJPRdD6IR1EyiAdTn03KK8F/hKOn
M3+pL23fqXkkuLAr2LwjtO0fLp90g8vkeokUOD/6UJJc7qzxh/ASVAdkUsF3
i3ziawDl9mVe8pg1etYJO6PPY928NxrG9NzFIgYmN33i/V2BHF9MH44S562a
XALrho0C90TaFhwxWuPFuzaUfLVeLAAXc+DHwFhlrBJHviH6gqL7dlIerxeo
ZcAyamcyCDvb6ZZufTYbRVOm6bSyp5zeVfj25x/4vgHuwT68LZsNGlb1yOqv
gLO9je/glc1z63928fPpbBh3ic1f5tnDEw+thEfpn83jAkqBMnU6ASFn5hBJ
e1ZwyVYpUo7Jg9K5Z6Ulvo+gJ0y4ucfxZ/c47o9nw2GftTsiWj/BjdlGLKos
ua9QnFgAnb5NFiFIOuESldMizdel0j2yIYTd42Q06HQm/fnYp5s/8stwPDdJ
YN8O9t4I2URc3msmjnyuL0HLz4PncfJrDIwXdHRlu+7mCevO3rx6/t2TiEaR
TpF8of0ArtTRu6s2wGjirfysSJi/lfbe4eAlkvSzfeKCry4v/8uPAMvgbV5W
10Vy+c+LRzbyjicNrnjWjU1En6f2z7qjwfG42yF4/fTjU7a6XqSzoxIETW93
DRoeyU05EOfVDcpP8IUhnlaHe2R7p8ARY4DNC6DqQHZqhxQdP4VnzzrTUTRi
0ecpmwNRZ1GVR2WN7j+DD4ITvWoJGZBoI6nVYh9DuVOQ7ZK74AxHV4rpbmT4
2Y0Mh53kuE9sYLUub7buZQ4EYALCGehq+fUimYDaQxtDmnvU6R7hnetGgBx3
8UMZVnmIlrciCZmevB+ON6V8vGjd/xPeCX6Gd4IqB16L7zRo8ttJzHe0nE0u
QCj6y5OuWHl0XzuWTR78JML+ZpHeovngbZ5WRbJJ+VSMfeQ4knk8HI2JurNZ
YusOZvm0bAObvM5nvI9lnK3jBQjRcyBX2TQ5WiawxtmRjDM78raon8LiX+Eg
58+DVzTAdlDLc+625vGiTIL94JdffgmmN8mUONrZkygbwGCaLBZpXlVH07o8
dJbDN2imDQsAFNxR0GdA4gvyVZUuUZ4lqobWol9zNK6S6E52VdBrV0lByhzA
oFlg59O6gAWA6EMr+C1H1Y0Gk+6IaPHLi4uL0WCbmadUq0E7TZKENHj85Qje
OBp2o45/MDiWMTTQNl8sciLwIeAVwOEUdPYbONt0+og6gqNskoPtUuElfXQS
wJpQ3yIz5E/vXr8GSJWreApfNe/t7u6uncZZTLtClfQ6Q4G0PFoXWZiZt2t/
tu83iAHcNDw00PDLfF2APkJTBwewiMPALuORHZ++Pq0dIyqxYUR8/u0DvJE9
dpVW9ATto3e0SCcF6lcoMmwSLpJqc7pAJVryc9YvgICBdr99hbyG2hp7wG1C
tEAEwat0WuRlPq+2LBOU4yJrL/UpvkVZuC6P0DyEnLM8ukuzWX5Xvl8VeZVP
80V5tCzDWfWwOoqHw2SWTKJw0I07YX827IfxcW8SdueD6bjXm41mx11vl9N1
ARQQ4DCF64YCBTlIVAtqJBC6tM09giLMe7x8D8LP+0eEn1lyi8ylrG00X8yy
5K5Cs/4RHm3nuDsOO52jP62+jTqjbjfy1v7zzUMwywF/YLIguV8BFSmtUBQH
y/Qe1Y5Jeg18agYITIRjAaLtIpFP/kSDTOPsf/3P/wuITxX8Bc16q3T6Ad4H
tp3QK6i1fGCTQVr96TGZKn4AYj0DVp3UUaAbdo7DLqHpy+ev3r8+u3zssk2W
BA/EWTj9ozi9Pxq1oz9VOSzt2zULuSBPhKhEwQrDbFp6oMEH3sMDRMdwCwcw
4eEj9+r5q83j7IXsTArDMIgnaJGfVvj31U1aBqVnLJwlc9CfS7S/08XBO/2o
n8uY6/meNRIGoQuGorRl6BikB2BJefABlJMMTfx86AebHN3OB2T0lOeCxUfd
MaAF3OtFLuwkRZxBGzJcA7jixhq0u8OyTYa4FSOu4tZhMbz+dAmrkmXdAUcG
aKbXaUaLWKOFGhCRXCOnK2B2efBajFdwLKs1yfPsX2PMjNF2yW+wbfYSLsYd
bHd35wUZZRDWoJQdvLl8cRicOwqdHe8iu02LnOhzcHB+dnHYUkhnaAC11zf4
malIsIJ5Efho+Go8XPgAlCM4TeBUBai1uDw0OftP0fWgvX5ImT+LExbvIO3o
8kVwACdmj+1K90k2aDwi191EcwE1XKC0RX4/NAbLYJvz34BiF0wS3iZQ61WO
wjaeAJxnhbuC27RGuLSDK/fPwHiV1ebbVqxfprMZyp27O/vBy6wq8tmanArB
x/3n8fQDGuuz2ad/q3eiAFUzRQdflgdiZdzd8ZxzK3QCloo4CXnc0GHHNLgE
ogwi8jKB2QEdbuMSdo/4PVVshbsDrz3QB0VaAqRx93B4rm4Eb8xRhSsA9qg4
oLQENO1BHY2oFKuTulxPb3Dzm1iOG4odJ0Kgj+KMr/Jf08UiDn5OJsAL4XGY
lagCIBNNNUWLdQvQa4omY+A1uVxu+jYDEVblvwBVo203Ka5gmauK1CB9AQRd
WEMMXAfpKxppYxSBkwygFsOWYKoyRW2RFwR8CWbgN9zhJkCi5sDAcDsIOQAU
YGxSZEnV5sNJnbt1g7QKlrdMUOim12HgaZ5N4RSA+iHnY7cubBSuNnna4XTy
gKzldG3EplzCqeMZ0KG39OzpkCdACS1tAMQtg48fxXX66VMLTRU5rLeA8RPF
IV4X8GrjoHZ8QXyKmbq2rQT98SP6wj99ErggxfRIFk2LV/vTJ8C55zka/5MK
qQngjHtEpaUjcJ9A0E1mPCki3hrvUYUOQTZJYPTJcgXvwfG00VcexLNZisMA
0Q2u6eb53uy5eCVxj5OEYAp36Dadsd0ND+8qWdCe15lZ0qVBFR7lOVyDeI03
jYD0ze4OntUsqeJ0ASiXJMF//e8HnjxRrdtAB1GUoDdAiM+io7fxNQjteGAk
ApftuFzdI1F4nZMIxqzIpZTlTb5ezBBZMOwGw22IW+ZA1ApEGUOZjQuVzoMp
IRvX+G7sw5Wr0ttYiOnS/EHE9E2WKJ1fog0HdluqI9BBNgQijW/pE2qNGv2C
Tk94QqgYLTSeLVN0QScUsLAMDuIFPLm+vgnyjBAergcSMbh2pKGNO10YfOZZ
alqMswgV+K46hIM/Rb8UEMr1omo5XpfdHeICJH+BiMlgw+tTIUWEReZL4lD4
PQkLuL84uI1BS6MQF0COdYGkpmRCybTacevEi+ucFEWYppyCMACD0BUq1yvg
f4DgcDKApuj/gocXudAh5IzESqMO8DjUjjOk0IA605x5NwB+CjiAAk2wJHoM
q8kSpPagMrWCMmfQV0y+ESuS24T2SFtBwgoSVBkzuuu5W2YFk8fBPL2HZ0sk
gQfKf0BgubtJgTbT2eHBxxMAV7mE9cuFk9Okc4BtIZUjpy6DCd5bAMEA9KjK
ZDEHuWyxIIILAAHcacGxoLEXfyXQ33AcEa0InsTH4JDLKi/kDgDtiSfMANhZ
CBhmYMljoEcTB4DLjP6kpbzJR7WgrV+CVJI43Fps8GLLQPsHoFiLAbpER0Ny
j6YTvHYiCezu+HqzIIUONEkXiPIovaqlEb2ld4w1SILRDxM3s3DCjju+YrxG
Zgq5vYpEv62UB48noCvBVokFT/Oy4qu9H/y0QjXCueL4+SvklERXhMZOb+Ls
2ojIJEsDfC2Q6vL0FE3gyQwmeQVXssh8dk5D4n4ZN/hhvlpVinRBQc8cH8SN
Jfk4HTmjfv2CWTonMxtqhiBeqOiySO5FhNH4EZE/WiR6LtZkKADBHOkD6JvL
tOJFKSIFH5IHQKZ5ClydJLmWe914MLht/A2xfSfcCVeJV60KZ8jgMvee8SVD
8okBg7hevkq8dQLRdUykeJWv1otYaSQAxVtbW6UX2rYR+mFzeCNhd3Acrj8J
rt+a7/Ry82hIrGdxS8SoPaR9PBqylb2gnAI1JooEl4AJCHBDc++E1AaoOu3u
4H1u6Tkmc4BH5RH5aU6mGrK0W2dJBhwMbYEuKFmfg9tsggqQTOMO0SbCsl4M
BwnkIhMhag6AZsrHMBW6Tku2aMdXsuXRrxtc5228WCN3QariwE/wx1xS3g5f
K9kM3lUkCyVzLhAv8hxZnaV+LUI5uuxGW4rCAaiVU9hYUlTISplmArdIC3JB
oA8ItgSgIdfsCeLP7k7UDl6DTItX0gQU+AOr9Iyf3vaDA8t/YJKPH1GeuO1/
+nTISLfKUT5RDAOJPLlHcwPSUKRZZOIkhEN5VJk6UC4Gl958HBrmRXJFzA8w
DrFiukAZFYCPEaSywZTML4yzMJkoVmsjDaC3MylUclZjMvItAD6FJen6FIWZ
1mbJNcHaNT8jDpKRENCfr1ueiXc7MFpLaTg8Lwz2evA8BO1I5Hpk1XAdQRoH
NVCQagacJGYLMB0JLiDqdMIsznLh1N8BLc/xtSBZ5TCz2hzoWKLmY4nwWPBo
QUpbrkiKAqnUeONxOUj40imIMwifIkHLGlLBeDpdI18h4wYZ4o2kJ9E2KkMh
etBgKPGL4RxEb8Yu2gyp0yh6I4CPgKfTgDV5jXCPBGNiDnSbp0mLNSTWwSqK
MyZZOiCMhtfkcMiER8E9k4cqCScPIf43YBEihYvpructENN4+kDbtyFGEjuX
liXiIb6VMDnU/b86PUOhn0yPausJWGYEGgNSESDFn/nSBJERgIPgQlRI5/3E
pyYxaUGg4uH1LdfFHI1OsDlCykQZRqlHVgBPADKHSIQObboG+J2r9cUTJC50
dfX14AAl4iUxWPQtIX0DdC1acGcrJp3wjRlNdAwQek9F08HvW0YsgL3ckkll
HtymRbWGFZmZSAxGRw78VSCvDDzoOXa2lEwOaIeA0zemuJl7XCRNiGBiVFK1
u4gexHod476of/Drbb5AtRC45ozOKp/PS6M2wtGnRECM1o2CIw30wPIBSIie
3JHxjTaiMeEfGYoSsigWZKUgb6+3zNLdjVneLJ0RTUPmAAi2BsUbEKK6Q3UU
tyqXg7wvXuQb310Sqg2hXjMG2dXyNulOPJCAiyw3S1TgZrG8YtO1kX3MOs/X
BA06ZZg64TgnFCb4erTYGHIHHLYmHhjK70IOeBfZPItr73NYOZDfQqSVEpWz
iqV3ODYR3XIA5xI3O5WoCGThACYKzSOmhbPNWtbTLjJyTdiTAPHYE37EOniD
tpdFEhMdIuEBr1XtDEGVuGVdMljFGJjf+U/BQwK0jJZL7iL4qkS7na4aedgC
1LGKYKTypTEa/XyDQiEQXCRR9H7diEQqAiwf5XV8Ihq6cmp9fSREx3BLH9Sf
CjyHlCPAhhydqoAsoGRcVzctVL/gQB6ASLTgM4pbFYKOQD4C2pvPWIMy7CPA
FJuWZSfyvPsJc40pUAkmi/TAkY2+b6FWJ55gAHs2WxjVbAksKA2dydAP44U1
EkeA50Vw+XhC1nn44Ns9ovPTau8TXbGPHzFA5dMn5CanbScshL5zonT5ERPp
SV+bKKimL1/YL2zoJL9mQiD5ayckkb6nmEL+ysT40RdurB5//7ZtQuHspGax
bRNqxvNqCJiMTQFa9I0TaCVLgndNGBM9omFL/P27tg0Q4rEdIJqIFPqGI0v4
Sw3YoC9+0U/ftG3UBH2j0Q/8tQk94HWYNVy0rQd/d+c0o1A1FhyEBZQb1NWY
0oV1W0EImCAQErnes6DuHFDjAzmDSjYaxavKKsXKr2RaGl5sWlfo8+BkgeDj
fmX/+iSK8TuXfP8I6u86Bur3cd8l6+8X8vkntaoDUULVB1az9+qny6u9Fv83
eP2Gfn938V9+evnu4hx/v/z+9McfzS878sTl929++vHc/mbfhMN+dfH6nF+G
TwPvo529V6f/tMdXce/N26uXb16f/ri3aRZExsGCNHE8oF5k1ip3PPHz+dnb
//f/jvpwtP8B2F03io7hePmPcTQC8RBAn4g9JUfrN/+JBpGdmOJRyfwNDHga
r1IgXSUJgqBY3bFBu72z83f/FSHz30+C/zyZrqL+38sHuGHvQ4WZ9yHBbPOT
jZcZiA0fNUxjoOl9XoO0v97Tf/L+Vrg7H/7nP2FqSBBG4z/9/Y6g1inlC6aC
/R/3UbfNHpalwSLLMWLvUbJFGVelc6wnQlBRg8qqb/eiPpJSzkdsTmN04vLg
wXev5bmGkA+6yM9fv8AnTtdE+mAF6FNbl+HreF0EL8jgtbtzdvn23evv8Lmz
4mFV+RGBnBv1tkzWszzckk5CtqfTMxzhVTJL4+CUNMjgLEcNZEFfXz6nr3Ng
4ZfpdUa8FvD6eUoU5/z5q0v8/lylBBA+4X4S6l+KsYYNxviUl0t0sQA6VRAj
pTQl+jPPQNM2IeeAxS8z1vFeXv3EI4hOT7alDX8AglRMaucD3hZInkBHztNr
tMgNyNr4/Sl+5WaPnaqxWL4Po61PgKpCEv1SRp7xyGgwHnbISqtjdLv97aM0
jUHGXhgIXvQHGgx/40CDoTfQAANXf8tA8KI3UG/7MD155oeLR54JSAhFY8AP
F2dnpz9Yaz1djytCyTNjrJrZKxVcgcRDljy+axu5i3Lnz8iCCgwG7vtUf/+E
lxZ4CXC5NCvmUyIAnGSNQdlbZaQweJHeoziXl8F+FPX0k6SAaxQHw253EBzE
aD48xO9H+M8YHzo9h8t9myZ3J0jiA6DwYSD0EB7p1x4BvRFlYXQxmCBG4qu3
EV2R2yG+Nay99Y72o8OiDC38vw9Pdzv49HlaTtdwr/dAP8+qcJHH6FQrkOrd
UrbnGq/VHsnAvW6Isi7bTAgn3qLnDmgjh1PiEgYO3EaPwA3nvkA7LLlJyPoP
nApUtvhD+R9gIMz2DXUD68wqins9wrc9Y68ZBcl9TPYKeItAywcMWyI/CXlq
2PCzF4R/H+w5H5C9NJnHIDDvAWAX7BdHsI7+1//8f3A/HV4GwKICAnbPaiIQ
Y3wO5hsRxMlxJtOWDgCGnwHAK9z7d7J3oLIVb72L310hKGAdIoOtWBPN4c8w
Wa5AEKP7txJyZ/UCHICw8DlpdsEZ2qtBDT9jG2KA/AOfIQz7c1JMUrzUfA/w
+2G7i1+75zj4zDbOxCVh4APLdH9nHVOcAET/f0RAB6/ThVG7aRntYP94QBBF
HzJQaMKqXlAl95U1lgjBYRcB0/b9Y0L9V+gAErvRkRhd0XrOJuFMvEUakDTg
KBBYDOpuALhjOs2zFJ0wlxQeR6F9celHv/EiDXT6n4GO4DAGdcQikO6Puy34
Z8xS2/4xnddbdHKvrcMepeAiKKuHRUIeP3yt76A3RdHQ5UP9ECixgKuPlJVG
oaM87gQHZHvbHw8PCbZAShDggDUuaqHtaeRqiXBwg/ZIYKTGOKBfx5Gzq3dJ
yIZfchUBnV2gPpJXyKyDAz3AQ7b+mW/QOIhbPGPqgqDvKuGMl5P0eo1WAzr1
mLbJN32IRms064lFE7Z0zNcI4UtnQ4YwUBcrxjOalnVz3I+aWQU++2NCthfr
goxXAEc2fGnUHhlQ0KSAlkMQzAIKJORBCSrkoU9lLD5EDUuobtBITcSNHpWp
hVSV+jwcBj6MO53LMqZ8YfFkDQpz2ACsKDV1A9Tw7QqgG6vwx1RJCEcgJ8KR
BFsgVb8t2W4wRYsMfkBjGSzvfRbLb1Pk2xhqjEIiRoEWIivvjyI93T1UdYDa
L0yeKeBdPq2SqtwzZCDYH9JNvEIXHRp8DdWVSGc8GICmuOhIhJAv9kdCsIVH
kuLjixglUJkh4c1rPBNycoJQ4sn3clww3nCod4ZdJDyWpwrsDwfOjUA8Ydcf
xpTCgnoGRc9YHgXkrwEItuPFye0Px+YlyrZ9rQnYzs7oJZOZDRMRcXgF/Nyx
Pglh91Twl+evX15dBvMkmU1iTEsAKQCUwWs07Qaq9+ELVj1jo+kaWbD4y028
2v5ooPO2BZHN7C0SjJR6jca1Bz2sxAeO7QM89xEtJ55hfDGr//tjOmDDGpCM
9HFrbJRYGuJjL3nkoHH3SawsWM4G7yn6Ay4XyfxmOCQJN3H0fpkC4R7Qgs9F
XUd+dmT4HrypN5SNqfssnim1Ub4soThZqMSY7X0a78CmWzx0dO6InFXzg9J8
TlGQ/T6t6xS0fyCK98Hzlsv9MhFeBi7WztZsSk5YPiAEpqs8rV3lATNaA+aL
oiDRJ5l+IF6Ewavw3yy5I2V7fzAygo6pqVDDftZAiXLvd2l40Ww2Nzagw7+4
XxkzJ4YVIKFDrxF7ghHwRihGQmapNEzQp+t4tkiAj69XjIciSYo/4zyH62bU
Bo4u+x513P1hZCmdtzaAwGVFwUEG6/ojZ6XrFUbz3TygQf1e5GcjYpPbBhid
sXXv9/uMVhjyFFyybHuGSGFOdH/YdZA6+pyYSXIwCYCXK8wrggNK6Nz2RRcB
8rb3FBDEJcUF7VklhHmkHGwdWSLCwzecx/x2ga44N/yaEJ1OYJ+VEeXw74HD
s0sRn1iT2slyAc6y3xV2co36Y5ce7BF3uWKS2+0a6ml4hl9O5wpEaIwbJyLa
xLG6PRGPcft8JSxNJXUOoCF1LeBpOrDn6+WKn/WgA08F8hhTShQzHoLbsUtf
UWJWyrvfHTk3c896ZvZEEIhTFW1UQBgzOu53j10SI5IEynXsVXXlPVAAB8F+
j+B+BVT6xIiN/TZIpyrwvcAXW4wdPKfIG3vwMt8lDt4QIZ/277m/v0/u0caC
EkWPlve8QM3mOajvBXkHl8pMJOj8Lg+QdiCf7nfMSZKQIAwGl2FVWcZA+gN2
1I8Uo2HoO/Sxe6chLv5YZco+kXh5HcTlPuEOUrUsySnywXkZXsTgZVeM3e8P
dL4f40lCnp9gbxt93AtQmiRjHMmjBfq4KIyLJMv9/tA5eYqltM/Trvco5FTi
Qzm8J3Vv6Q3cUjiZPl1r1SzZHADU0yUanUeNGq8SdDCqf5VUL35PCpWFwH9W
KIGFQOk5sYYvCOhD7eXMstITR2KRejFyKbj8y5bnulFfn+OKUduew4vFz3GJ
mabnsKQQ1V6iIc1ffTorMenZ94AUoLYvfPU28oVNIFGKbHQg5wiVoOPNfFWk
S4yKmaGJHU9FiILcCPE72+cx5hjo6qRMK5bUKAg5QO/GbcxOJELJuIpPgufx
zBcCEaqjQSf4b/8S9IYAtf2++7gINK/OBzoDxfywGoLZUvRefzQEnhIcnGIu
xAsS13QApKuUF8XhRO9RNMKdv8dAu4NDfD3qDeDmdA/deZGkcOTfjGJHSB2D
Z4fD4QDtKu6zOMXz0/PgDSrbbICnR9F2tn/sPvkykzqBwdsYPbc3mAErDMKS
rx4tagwUd+C+3JwbjwT9rblkuBR8ud8dA7mqL7LfjmBwjyRI5gWtiawS+Pbx
AO18G6/7tMSqb0zaxvhq/3gEex55b9aoea+YHS1UScM4GRkIkRkdfDjMYDDs
gORbX4BhriDcvgcS+B4RssC4jiXQjbB0jPikEqo+xgtDE2PHQ0XfwqTxPxQu
xDFI6Isy22ZbBZmOvXkIZr1BH8cn6it3agAztLttEKJYBDJhGsDP/owhbsQq
9gCQ7FwTKVvsmmYM4qtmKxjUkixSR40ZtiN8K/LfUqjPsJzjuiAbmQ2W1/QE
jm55RBZvk56JtlhP7ueZ4RYC1vDpI0OSA4UNHd1qSpvEMZhhnpMFZJaSQ9yP
PajQLH8LiJgXNiL5tv/bX+399lcH5lXkjEh9tkn/5lK0XKZgXmXt66kvH/fZ
pUyn8IJNLh/3mTMZl55rj8EMrqEYIJxg+m88CwvhKNGy7C+aiWKskSKC7e7Q
U57rtqLQx3tjcKJBZgl7uNGol2HygMY6tgOOYpmxRV7zNYwpguN+GOh1taas
4gITm4IOx9VnFJIZdUfol1+o8PSENwbsUeO1x5OSqBWhKuqHMKsbc4SlihyW
FmhidS05yJJJvD+YBkEhpyySYrobBsgAxAxI0aOIkf+OSxFJyjwtANUOTKre
Jr055JSB+NYmu6D52UqafOIzDM+fPDhxMGQmEh0SzsjJfea3YNzv87tEopYk
2UqSBqfxbRJLdLNJoHtWUnIpmeTVEYXx94vg4OzNq0NJM1zgiEhafPsyUc2S
d/GdxD4i4ipmaABHimGiTtb4p0+4LrRla1YR0K5VYh72TsVJLHl1+k8YhWAE
FA6jFLBhkFdAhY6q5BpwvY3RVglGk1AgmM1RwzC/0ijUbswamrkfgmsKuyeU
5oQouDL+pJLKtXeT3IeYnj2Ly5s9yazX4xNDhmSeqAlgd4cqQJI1cb1CLxmZ
OO+SYkoBdIsViEESyg6jxzMAxBLdJhrHXRpDLy2DgvUB4LCApDy6eVjBjs3O
ye3PIrEJtV9RdT6mR4hzHz/qd+99pVjCeTm0AM2PrhFZU0ZsQYGa1IjnW898
sxEKByhnHnLWHkrDMtf/gB+4y9mcz5tqWnwb9AEOb4gs7IV7WuqCfrpf9Zuh
frO7Y575Nvj+4pfzl9/Jf3Z34J+XV7yu/+O+1wlRUZRH8DP++ijYO93Df5/T
v2f07zn9e0H/vtjjzeKmX2OpYc21YgSYYF0Q98iX8QNlcMLdJ6RBXGnRnwZ1
KNtySfYT+bakPC8D45ZVHts9AvhpZhySBG6OeaYLiJdjTcmN3qGaTBEOsiJt
IdUQHYpAL2m8S0IJjrYzJ7u7Mx9Hs/48TsIRoHUYRbNOGI+GA1Dx4s70OEqG
k/lQnwWFb78+GFuqv32mchZ/4zKfZ4Z3UlCmtQU0rYyj0e2txhgmJiX6NP/J
T7cobuOaQMrfyt8yGGWRIrFFu7o+Ar/L15ojOXlwc2Qd4ET406Ef/AX/1+HP
IvpA/+B/+DnzbKfz33Z3zDv0PX8sz8nz9LG+Rs/y4PLOJuwtAOqwF0jhVwx0
frXXPR53OqPeYHg8HoyHw+5x93gAyt7xaDyIokFnGI26x2jLq8/kALM+lcKd
vjtgZOOwXiGO7KE5dNexLrITVAZPfhvOybnVV4JHa3fM2cxo++Z0dZKa76QK
Fp+3hmszdn7DPhLjWsNXOZodESOBuwz48JYJdOaQhbQ0tle8sjfxuiRPyiIt
K61uQRF1huLOiQ+azACAkck0/YwJ9jLXe1OLuGw5GfXo6ZqTu5MuPdfEkTsA
jF5lC7w0dylQqZxrNptERWb5LrtsBTazjplZC8WthebhO3VsSlJVTEa47Ln0
pGVXgNRIcLXd0QIAkKDE00hILRbJNSaHfPwotVuQOPhZBxLzj2gnwebufDZP
nIdXVbdzTyVqPn4knQ8uvET26PdktATBXwT49yTZGRqmYr3aREUe58w4cRY7
nJjyRUlwbHGiionWNKXWkWUwnqqqYNj4LFlRRGzOn5VJxZH3MoH7vLcuzo9G
3GhhgR3OFSZ3sk0nIgEKLRkosFFIOb/7TXCHoghlruHAmg0a4E45mUohS1qw
ZMT6cBFBq2S1m77Dc5CEJcyypkTzRn1efbrB2AMk3RFzZnTPSqMZkHdPnvZW
gnkWSSFFLhZscti7R5V/Rh4rxJ09EOmfVeEUrv4ep7/RZP8SvConnYD+E/F/
uvCfc8cM/hV+/gUngh+cCH7u4T/39DlGb5J5pRUA8gfobCWDtAd8KVCBtxS2
YkJijJyRpYs1xZ23zURRYOaTidzj8xJ4ahVcvnBHMhH+p1Pfka0VciZVYxCc
zXvcOnHDRJE/EdGZ+ZoSZR1J2QOa8bkaoC3jewWamQjZEOOe8h+ObJH8QWY+
L23uEa28RbpMxtqjJGxpxqFceeAmcs0yqp/BAolqichebC4W5ZrKp4v0A2b8
SBWRjGPiKQVTS5qwNqtKGxosbZ75RjQ5XbxhnyAzHHiqxAF9x4p+5FzOQ7aN
TYgs4ULYL9Kh+HAXi4r8Luj6FBcFXa3uhqlsSALRKoEDMAFZSFhVfJunnFQg
7IJTAHBNmvnuOZuQbvPfhm5fWTuLEqDUkM0NEtSvESEQRBgC/TGG5VDhikHk
QujQJU1dQ5qIrM9dK49G36TCF/XORZ37x+7dI7QI/tOD/ygEvjZxqtGmxv/I
bz9lpNh+pZ9HJ47MxJEQL5uRa92dogd/ITlrnjiq77hbpzFYgMWYGeW45cIn
gHEUYPL2zeXLXyQd9csmtjvuyY7RfSL7VNTevlUWWbHECtlSpfZGu3HiaMsZ
92VijtfD9NQiWHEOgPlIS2A8ZU3txye2Ox78lTtmE7C75+aJN854SGesmfhf
A8UendjueETXKb0PLijU469F6WCDUW67x+M6Vk9Bp9FoRTUkf9H0j05sd3z8
WZb9ZOHj0YnrZxx1/tiJzY6j6PeeeMs9jjYo1+87sd1x7w+aeOOM+3/sxHbH
g99jYiOHdj051BUljLThmLc2LfgssTrmxluNfJehRJe1rkCxFbPSRWvY3SHl
KnhlTXalK/BgmcupxFJL3LFrP68ZMkFY6gcHaAk75Dx1fP71xtCyPH9op2TS
PF87pQQen88B28nuzjg4QDPcYQsIEv4WwW+n+FuEnz2n36JDa89SU15I//Tx
n7H+qT+NTx0/6anTJz31fPOpe/kJ6Z9X+M9r/VN/HPOag0dwyGoFEfOaajZu
HTo0g82seZwVmQJ7CGbG9GvUHMckZXV39VzZJPpyPQmrhxWmvAvycGYQRiCn
5VKdWEWiNaGpZMqG86N5FVxQ2MzglkmUwmji9ZJRfMeXJ4jv+1kfH/f5mrB5
KA+osAfGhE/zbL4ubQEQ0m5sFW+NNRXfMdmpseS8QMQJ32e7Ec/Ku3e37Xp0
yPxKnizxb/lhrdbt7rrB6LbIKjDKG7U1LbvEryN8rD3eWAo3FCeq5odOVlOR
zE39iABUUglHHEm35htyh9bFnHmC9a244MuwQ6ljpiYBllPzHH/bM/qCg5+u
zg4ZNpSOxhX4OiHW+jIlfcgodxtjARMqhtbpnND/251OCwn5m2mVo94YDcbd
4AC3T8XW0I5lBcMioXBE8Vef3VB5pxhdvFgaLxb/soYQYqwU75FsULXcFFaC
TU0+LXV1kyxWrBLv7pigawnoYyMfl8shHzDZxmhYpP2gyqp5hZVfSndEkzTj
vMSNa8i/8TM6ZXU8o14WmGqNlOkr+QEtWOuarA0aUKiZA8DsXphKa1LUTj2w
UlUfBzOFedjvG9/G6YJsh4hf4mtGcIjZUSri6VvYr5bU9gP+j+j7QMC1DA5z
EU5dOaI8FmN5IPsspfyW1ZGXztJSiz4xGIok4PGFYMj0uztUF26JlSooCRWg
BHtq94IfT187biW2h9V+oobPug2f9ej9CL7rAb8cgJ4yAsn9+Es+2935T+Ff
+T8Rgbb8IHK9h6P5jDDzlVdBs2JqhTtLgIQmMKoGPUPJGV91FcBo7EpsFLqz
CueHrtTvDIuGn81pf5cTaZQrIrHO4TV6nlbCP1m2gEdvKcr+22cd/kTR5wQT
sdkVFNe4Ta9r7HR4ATlDnuOSyGGurIIKf72ZToEpJmUgpky14/UioRPwYdg7
NFMvqSWWNKyicuQY5/Vb54Ol6oT9kZmwHw5oQsBOM1dfAyeJMTLRjUvfTe1b
Nz+p8RXdxw1zbxgtxajZNnvFu0AL0MRYYibkIRSK2czu9XETfvAlIBlYkAx7
BiTDcMQgiS1IugwSz7m0ARLPUWdAEnUaZvZs3GLJJmCYS0tTc92/fkjvCBy0
tJTPqpvmGJrdjY7N7sbhMUsAeA9pkv6YIYauDu5eUK+YtTn22GIvBujp4FEn
jBifXB7rBvpTaS+QhSxH5dqV8DV9Rf4xZIeMF6YoLvVU4JEwbQWLc6HT9uqM
olm4bn3JD8+wYhh3h+dsMZICaLGUQouSNa0MeLcExLU8T3qhhceRj7Mk5nQZ
JTEYNsBpucS5qUQhedmxBq2KkcGv5EzBInMJS6Mv549IQxKlgzXPbB1y74nd
nYOkfd1uSTyk3Uhwh04jDPdBfj+f28YPXtloNKXFGZ58Rf6SdZFo5p5bd9fa
T1nKtuUiqWIbO4vYk3nLEcy5iIh2c7ggWDsdX9aAruS0Ydcv591jDfW5Jgre
Uh1DHjyfN70OwKPARfQrY42Xf+IKRFJVNpl9Y6vLo+dZkpSskygWC3KAfmSk
PeE/r6keqW9Ndtywl6BQwf7RTdQsqgZyOJNkGlN1OaeybDHjqlN0ppgXMzOl
/bRGIpyZ+NWb9ussGc6PpUlV8rSqMYiSNiA8drIhZ3xGXHsOJHbRdjFiIfUP
h+Y33EWXZs9Gj0TolF0f6JT5NI091UyLPCucCLnk1CrqSdKEFxtHyfSBbz6W
imSXo1EMGvCKilfb4tEHaTuBc8kzboJLFCadJ3xp51g/kG/RYUDqrATHu0gi
AK8cxdqkTCwkE0YbxDDN02rkJgJlGd+ny/WSwosl1k4z8BA+bjFqIZhI8yiF
CikpAHUq2VNy5fFA+bciXqUzgsgVFb2lPchRmXy8iV2uVj5L6vXt23XCTUcJ
xIFULKNZxY95X3Z3HPcLLUECFFFZ+oYaFHz8uM7cNGwTHAR8R9aCfEEi4Ooa
fFc1+G5dg+8aqoCswHOFMXX7+PGs1zk202GXc/YBS01jUqjrtpxSq4d/YVRy
fd09XXevvu6e7cZRa2jNE3POHJUE38M7I+VKZ0V8x2GXTO2Fa7OZpcXhZPQW
Ny3ac6Ix4MP3ZON4r82iJLJXYM6JE1qCGSfTMsyTB9vBBdVKdORRzCLmxGEI
E3q4qCkEGoEoWNouQRACW43AYJlPLaguNdUTX8qDcKfmGCczwZYdliVOTWob
XVHgaDn15LA0wFRjwOu+GWCvFc5x7bwi1qgzY9/gCukVR9Wa5jhuNAJbsNpO
LoaeJuVsa848Zw6RjVjsgly98FaCpj4nVTOi1gRLZkd4vFJpug5ht5GJDn+b
xnLyXGRChvmZDOfGTM1pLw671OpwizRZa5Tcba/NZIKbQzhFhnNGiG2p1Hz5
JUHGC3D9N2+JsMUYfm+911lF45x1SwQ+5Borfg9LRAMs/nCrzN9uFY2WiN4X
WSL0JI0+ysa/vk+ZxKxO/YpSDKhEvW2rpRzr/M6rkD6WgfB5o0gznU9mlk62
v6qhIIp0Z2rnAF2eSErDnvyMmarJFkNVxQsUcXlPkTXNqNWEMppTrmJvM04U
uE/a/deyCejeXfPSnOJbh90mADQvXTyRMjlF4dEu6PTt0ROsQu/sHUC5s8kS
+k9Gh7qY01cxp18Xc/pPEXOqYr14CB3dzFfHpN5SW4sB+3HYKGma/jcu25a3
KQtMnRm7O8rt5xKGbrm7TaLTdhb8CYZi1hk++4i/Fsfn0ZpZ/qnt90HBihv7
R91pepNLS4yNeChaD6frmkYLJhJarGgIcn7xfdySId5PWMCUv6aYYqpGOiwj
7rSZdGU7zwPvwij16tljP5oyNWLzC6rRhHXkKZqdGlbZw/PqfzdpEv+eZAo9
p9+fgzmraJy0LlMo3nzlVTwiUxjc/CNh8TdchZEp0tm3z1wS9awWR/ElUoae
7ZOkDHb2ctMSl9+417Uegr15X7+mRBFxORhFvs+JFA0bqK2dteXGJX9NMUCx
5veVA568tzpHHyhHH9Q5+uD/n4aLwVMMFxyP+/EjFtKhOjr/yowXvP6/0nwR
XNxTPXT6fpI8YAwKPk+nlJZot6bWO//KjRxXZOQQO2Q5hcMr0twJEeH0NtIt
sB7EdZxJt1U6F7FlrHKsHYHxIBxsyAewSCcFNg3kPGxxrDjBIthvLcEySuus
jOeJJhw6Rse00pXZzmxuH0cn4JxvldfcVosMwrBZcpdQJSgpsFiSrFo2jGCM
wm57RLg2eBBqP5doLcWY27HA3j/JMUEYZbaaKIoiHDVIk9K3PJOSBhgNAbGx
MFN5gAys60lY2lYfT7j922xSpvjl56xSx/1/XxIkFQH9g61SzXPWJEhTnfQr
r+IRCZKm/Jtbpf64VTRapQZfJC+ao/ybmKUcDvg1DFNmQ39ja5QB6hN3/ddJ
om2z7d/TEIXFaD6kq5U+2X301N1JbSC1TaDStoci8+igVKRq+PmhKVLmNHug
j0nY46FZVnElH5FOKcyzSTIeqmQ8/KTCp8G5IYcTEzxCpwSAfq++lMhpzYlN
YzXRa848tcBYAWxD4zZMfUme8OQepSyNgJeyjhQwxQ2OuZGt8eBQevo9hnyT
+FJxOjruN7kXXL61XSovG0J3pH+iFkSQ5YuvaC1+0tuRxudIES4Tq1OusECU
npZt7Mb1UjmGtoVxbtKaG1mEqTmGF0GDllumkL6WBScPrArQ2J7cDI6CM58q
9TwUqWlJtbmwoWb92pKwK3USWAOINaLMDspSt6fcmvSUyO+2CmTAfDVsOXG7
QNqayw7YtcKr+GhLrpktluRTtwPuMShGtMPNx80d2t2J/CttairUt7gtusLW
M6ZheGRsISuhHkqv0sIsyIfHtoH9ca3/EaPrJWCnITCHG2JjHTbtdQ5YYeIP
vgluNLqr3iGuZil1qkxgfPnm0txmpZMEFI8U86i4eJDZWrDVJ+q2OqUynyJd
s9SLAijO/fGjxivU62vZvKVoSI1sW6rW6ab9Sku3Q0kH0ba7/07k2XpU9e8n
Pf2meG9Hrvvf8d5fexWeRVQvgG8NHX559Lcn3W4Q7P8d/V03wTYGO29Ef7+p
R3+r8Pl48Pdm+P2/7ehvDv4O/vUFf/9M9TT5ypEpp0pWpdR2fkwINOSbxHu5
BCykaitMDcgmOcjRMxtfZRQSKUWQiKQlNaVS3jG2tMIVbgqpjepsg+TK8qSD
mFjsTsQ5LHi7ibdykUm+p7y6+Xqhhaalv3xmBHOTreeLMcLb61rJCGvPjDY1
kpGb50dpjqpriCwllcQc6yLujXt67+6YuUUvwhYaEm1ZqxLBwOGWnyzyWi+z
07au1KOEg8oo7D0K/hF2HR2POhzYD3BbBfIwAIMKJaFaIXoGC3qIs6AVGmUp
wALX+erB1shEIE5Ltutv6FyBkc71w6HrSxht8SXAtPmUfR0x799FC2+b20v8
jC2KoKKsWGd13hFf/pZs3j4gnvMmczy/4Lp81LNfk5RHTqA/N67HSGW5/9TI
ZqubqB3UYhGa5GsKq8Dlml38JU8xGUNWF7v5zzZr3thB1hP2aLZMhQ8ux24w
s1l/UmUS71yLLOlauApl8FTM+l77C5HGY/fYqANuhAXsMkN7yCTtNl50Wp9T
tSvUxpQlUQQ3xXwfOiW9nGnfS1vKEpDQNpkD1OvWZsWCcEAeFljrOUGzhLz4
9GEjxPIujt2Dsd85nsDH0QK/xexXi5EkIrFmXztytQO4LoWRl6tTa1oCSst8
d0dDT/99KSrYQul9Vb5flr+3WPwvn5m0KXTDje74A8JBacrJtm9/H1j8DVfR
aHgffZFqYk/SleGcgu/rDOmiF9/1k+3atZ1VGYpiHmmu/K36Qt/aIEa2HlZS
2YEarOyMYp6879t2iDJ9IUtCyB1hBRbbTFbaTZZPYwKfI6afsbZ/1sjO+LXd
xP71QADn70CBWcXXA0Fd3ByjuDneFDfHNvcJFvTuxZlrBXesWmjGLlJiJAtk
U7eAwnkRakINhWlS2XKtvUJ5liICUeGdVPRF8UGYSiu6EoKwWyQSM/H0vNhe
VtPdJCLBR10VPMfPSvc4SMXAjDWPH5r1W6e6ZGHFZbleikPBbEc7U1AwgiCS
GoO3hFGSeEzdFSJsFcd+svmmJ94sRCr+XVGpzim8jKgs3njTvk/iOExBI4ki
0zBYgA27DziypCvak64VLdaNEUc2mkPLPJWptAkm+ZiDcmUxbCLlOiI51gk+
Ydng74LNkN87egpTAqkjFNY4lDU5Nlj1N7oljZ2yp3eSWuigxGbBnW0LQNWD
x3KaRRwtYribuAvQtqoiFScG7RIXk2Y3Kdnbb0w9UadyFOyYahGpL+bfkVzE
lf7+4JDWxknrcpE89AeGtMqMf+OQ1j9uFY1y0fiL5CI9yd8awBqXDVH1oHRx
BEJafa04A0Wm3xCiunWJdn1fISJAT/13iwj4/DZAzjB1xD/uawFxKQalX2jm
bbzwe3Bqtrh10FZSXwIYF7pBBSPESPtrUuRO3Jdf3s7/x5a3q+OrWe0Lp93I
qd2ExI/yaYrFD+aecj/tqWZMOP2qbOcIZwDgTg7vpI3aUgciFgXS1iBGN2Go
IjqaFexypmRgXJFTkiNMYNZVFexlOQcm8nTI7fcwknBdYqgitUVxaknSkzRV
SbUvbORCozBkV65nbMqef9zXeucqGdku1L/llE3g6+6OmuLbnJNvtj9BiKMZ
mwpocfkQjHKAC0vwN7CS+4JdE7xi9hZlXshP2PCP/myijNmhjzLm4zrKSHE9
LDgH61k0YoTIZ97J87GJ0RCrKcTmuLVxxx42T1PAYuXwPallwqXdBVOSmSlB
9jXRgGd9jhXU3krZ+FJia95P4NP3Wky+NMhBhRjWS1cRKJuj0EkurbW0c2s0
GxOYEGpY0gX8+oDy4nWQLEpulLZBrbg7C4IDdJSV2h2tmbzgVi9TVN9UxAQZ
schXBRJLNq5xkIljXWfLPpW/5M69i+SWaHfMzQnJDo2m7IRaj6FLWQvyUdqU
t1CScNlRQ1HqpswlCMizJMTKNFzvUYuCmIqVNYOu3tYrYzmo9TD8uL/VYmA0
w03fAODUNOUa5ewnya5Bb7iTm8jthAEnr9HuDqCcANiw1isWvyFbvIknHtmS
9n4lhuAMozyM4ZzcDI7VFtPdHrD0pNsRkAK3EAMQCnlRUZA7rkXohwYlk+Yn
WIBJC6YfChmmJWx9hTZv6ZyCiiqN0yy9OC09ie/WLazxlIm7qyO4FmjQtVCB
W3CPE4YxTIhcV80I4swwqRieGwiPAN2MacZh8VSDJUbgkX/xKv6QkC2aNK3M
Vg+ya9CALGOiT7LbtMip1igOQfYZvZ1SvQQHhNdmC76bMXZJMpTd1nBildJH
SwqxdO4/LfMF2RRIyaRKPcy0TIUDDaSR2dmPioVdsNKKafwxW5OwghtNiQEv
YwRKEM/+ApIRkQ0spsQtc02AmtZ9Kh+yKVw7zSIwLSUpJrTuKkFyyZRCW2re
yJ0moDBpZftHcHCZJOx6AQC2ghfrXzGkviWgvVyCTo+Q5XZRh6xzIxYQOtWq
nZIDmtNT1GYfO+Xl65ZCvnV82XA+eadU91fN/dfGikGiY9euPTdZ1KLuTjHV
QCZFjFBu1VKjgNpvTDDmJacHoBvmrZIR2tQptRaa8h16FVOg5y2QcTKymSfJ
t8rYYOpbnXjGUIxFxJo+8heuz5ZqLZlicc4MR5QaoxqKweIO2qj2TKso7dLt
gtwkEA6RpnJD9yS9Iyto2gVdGO8SA6Jm5NoOtFkvKhctD9+JvC7LZHGrWTRk
MoYBFg+IP9cFYLt0+CX2FsgtmhcUcIBmqgXLjdI1xq4oJxZjYg/r150WZsID
6ujYopK4DpT93TolgBkfcTCl/+rbdv1zBDJ/jAlZ2OL1ovJMQsY4ToDnoNeE
jWLJ/ZSuKDzmAmYar4jOogkd6f0yB/hlpv6TkiK+A01nZ01vJl+I3pJCY9yA
c4slVlyo4lKzAaYUGs2hswCLfLHm1rWWQLMoWYLotFBX9ockWbEfWwsTMwxc
tz1LUgQXm3VVrxOnwRW2SFjgklou50ch1cSQ04rVHzHTawiweHkdPZPGsYSF
9FFeKod3UG94LaeGqpwpfuf0+QpqqOXUWkabt7NG8w2RmR9JJnEqgJKIQgXW
OD7YAneWIjdYkNgQo98BCTlXJnT7xuKicT0TglTK1MMEHeM71DLQjguCL1xZ
OTqJA1JmSSNOsOIzywXicsYhbYSsH7ViWhYXKPUms88wd7rdeI117yQBLTj0
3JNh3VPSm7nBcCyvaQqrTjHeHp4IBsNuLzg9t95iL3qlPyYAbn0bF/0AzBDO
fDw+hnFs/QSPcbpcs1HkwjiGeMFyNDato8anDi5eej0bpZeXyTTDRdaSzSQd
juUxvnVwDAuRQ/jITDgCbrzFl4QEDTYda+s8oeW0CSsuuDEzKq96fayXcNJI
2GrCU0B1F4yHiIrFIy5Sm0Un5IyX6KqGovgwcBQLCAFeKuGQBAIVddCaZTmJ
ISO2wrxL03zqhcOWKEI9sPbuURet451a/mNJmH/9GZRPogBv0V0m+EGtk+2C
VvyVq143xMKg5AJPNsasCB6XwYFJUjnkD4imIjWDY3TaY6AsK7M2Zk/hgJup
NBsxSnb0jQooTZdLYtVvR7SW2Ab/kPMt37q9jbQewynswXCkXH2BRb5YhKjn
wp2hROpupzcOO1EYHbPrrFhnHIDVcDCli2oVP6n4RV2RW5sxeeYkPEnTBf2d
Np6ozNxIxvoNyxfxrTkzzE0LU9O08bWNaHcXRQEffI9X2pAmPEVBUoQLrEFq
yJvirhP2iyaczVPlOXMSuoOODyzWzuBNKO+0eUD7TjpN9NoVCZBfqiWf4OqI
7sBmJcirVmfW0mFX8CSCGFfAdcpgvWr5vlEZH0MKqR2fU8BU1FauY8pUld3a
iCUIDCI3tlt2qpVkc0xvR7OJQGxjqWS2N7SI5SfrHa/VxzRMWKL/bCFN3mTL
evg4DwsVuorEMSQwK8RJDRxkURSIMVWg0v4D5qhWOSq9HJFr08mNqYrVTJuM
5AuOyfSG/NM2nW1dlurrhj+rIp1gMuH78gYemL1HkIP6fe2U3HzlxQXAMZ2J
7Il22kaZFF/03jqglYKuw1HKlbCOScIqBoZSOn0nFzFSPmltgHr4RD2itiFH
icYYLVMIZPE19Z7HgEL7ENuajAnCNfSpp96sXwvjIkprdzxzhW32UN06x2jw
+XAKrEbgWNZLa7dTG6RYkpigNUhgvBUrZ2P7FLk+ZNWk7h1mzraVIlN2KKN1
u1QRirHBD+5TmZ3D8GnfLU4NdPrslOv5HEsfYDOm/BrARp2OuEyCiUcncxyV
T5iZzrooOWwuA3b7HDchdnh9sSmE1AqL9sxMRAvsFSE5dY2/hHJ23AQtOdK8
pSat21q3RAtDuupNps/ATYFUtsKjm8PA7dLemHpuIpOb8OWkiCJMRoRNYqDb
3XGA7SGTQbeSsmlZBCI04SOIfXatUEEbMSkHxl4am1DPdnBuaQHRuk2CgQ1F
n0AxtgSDJvBx/lAL7JXqFOw3+AzwpWqMurUmm3hDbIh6JxknGN23AlUkFmNd
OO7ukARCGrLQfUlldTjCFvvsi/Q+mYWsEAbnCTduNpQR3dOljbg9JKZN+kEd
oZR7ICNWj0itDhubJYwSpe5gYTY5kEDp2U4UEmmgSanAimwbmrvcBhywdiFq
lnnUNdmcBULhPYchhaL4yc0j6iJmmJaRljTdE7HG8Qez7CZ72bwXbVMle5lj
oi5TeNtSOuZOb80l4MidrJdeyYJBfWtpIlLLWMf3U2Jc1Y5/QEosMSpyBOIB
+GLroYlfJtundkKKSwaSAmhmcEJXY5OZ4sIras6uBwAJ+Rk28Y+tHFUBnB9P
y43k9ym4F7xNbY45jhWJCnmFpDk92Ww1YNCy0JfMfWEZRHCKxF+6b4rdpsBs
6C5SchGW4XRKIt+lZZXuPG1PeNAAdb1LXb5L289SUYOS4ivq20BsnXpbgajO
1dZN6y0RFwnzLF/xfK2+WzgO9kwxRT8Ef89KfHoR3EPemrdmkqMbmRbZ87MG
C5O5nYyLz0oFs6KyU7iZWaexzRmwObYCIqeGyDgSsaERoig0rODqxtmqm43d
hNDsUpOjQk3jmtPKJMZBq2fJNXK6THBkRvCyEomoNAJ86WZtK4qy8is2Xz88
1vanE8uAY++WjKGt+xIkRlHGdDSrU1hPSItBIS4AVGgrJmk+KdJ8ptIstf02
nkUkc95CNRZTmqm3bY+SlG6bnLGEk9LNmjw0Sy3z+JZ0Mb321AtevKsATNQ6
0PcbuElO6PFDq4xSija7Jrm814940V8hCZA7+two9S/ZW4gMkQxF1iljk1vo
Hr8wqq7oSxRD2ZxW4ziIfT+eKNgUcuDQFJrZcRg4Xds8Y1FO5L5Kq3WVKBth
H37U9Yjt9tgm3yKdlr4YFzzuaiWI1bOJnM2ShRxHER2EFXlDkt0wArkCteAE
x/H6CCN0QEeI6bhJjCWEd71hh1c0oqorFs4TbFKnt5LZLNubawaOAOOQp/Fi
yoXqaGUEsRbn7lpDEd4TJ0HM9xdqVApTaZOEBc8SKgCBRIIl1/jA/d5L9lIU
4AUewomecb0d0d+kX6NxIrtnKxzD7QSZZur68ADDyVOtoN85HhrtS4zbLqyY
wpOPZL7IWWqnMALAguqmpdYC6ab76KZE5X7gOamIL9mfZ5i2eVDl5OxGGnso
erAQZ6EO9GGBCaGYzhYL0WPnBbtbOsbXog1OYik+ohtMMxWKtJSTaSeJ0p7D
gsnYwZq+OK3awQXyRhuI4DhW7fYkyZcWnGa8C/MCwp0xUNCLhWgOitikE4p2
ZWIFk1pMwSKpnpUSxm9NcvZioK2ZElm7nW4P6MlJr38yGLajbq8/GI7U26Jk
xC7CM4lEy5K4P0qaGI2irZA6bRyEiHjMBaK2nD737LnDHZU3bFKY5jO5afC2
ZN608BEx8FVogfg8ws9TKeGcC5CCA8QuUsS6qqNEXYAjdaQ61HJNBm0xVekh
wKgbl/qZndT2yggmNlyHc4kl0OKschMGm4PLZsBoPOpgzUuHaLh9mYnD4Jid
+1H/gv0qaIxKs7gQ4tuJImzDTP8BCL/JWGKspPqmAEVgS8srG6VmT2SuUThh
P07pQ6UTJGtzk6kN+mos9IdWuMXSoaVJ4lQpC2+ESFp6niWnsqvHiTQvGxBV
stk202A2ImwOB5LBzM21t6nGj7mTk2g+KgIwX1+ky1TsqZsJtFyjh8INXWMU
F6SU4RymrQyGiBKazEA0m7O3mS4BibY+56tJG6LksS25cmJdtvLLeAG3d+ba
alNP4jDmbyenqy4hkPrF3a3EdcFpRlpefc1FRsn2k87Zu5gUJATXw/X4/I0h
mE6P1CG/INhfVDkiskfd6gJTG4rjnthY0zJVw9LHoMAeEkdmYsaqAkTgGBlN
AbeUdQCb7pS7CqNf50LY6oNMJCOjCOLUS3ISyEMKtxPDayB/aA8sNKMsOPnb
Wsc0fA4zmR7T7MuT32QjugTtcZuv2ZZIJXuZO73qyqLBGWXU9itTgUOfpF0Z
20CD/maUCqPR2IdQHueCb04TNnd0EjvyX9npT/HAjtKrZm+lN1abIusxi6NE
MM2GnY5i9RR3jJ+gnltqWPPUfqOfSUBFkdSCUpptQ/Qdpy5gpAZhi7U8GT0Q
pSSaW2mBSadnm1VG2Iq4NSczFaKymQwZ8gzwNmYNwwZPIGRNAIXwmAYDF+nD
MbIyrEgCBKXI4Qmhdq7S66ii1u7L/vetGPYYdnHMA9AKUyDN0lcP51DNFdZl
/HFxdeN6ddCHZW1KVCGN5XaRpeKgy+5THYCz/kwnUBCg1B76aA+TFvvMxKjS
sNYZN+6whQwe8VS7DkZDltzWgHA9KMzIeFBqBlm01TOX4Q5/TR5L5lKfIRdO
8NElYYyDX45h1ughHKhDBVHQwKOYYkwiDawOQcsFqWtibqNm6tRcEfRD6VQM
No5nJmPptBZv4ERfmRFp4u94VFs12k3p1WGtbSuuxKSmogKKFVlOsVaJ3A9Y
Qr9r630+Gt+kMwg4zeXk+0fYL3fPFT+0zoyj7cJDNWGODGHGCL5pf9RB0FRr
atiIfcqzCm1Us2kw7TsBjWTaewpTVHxklMFHmG5y2HP1wD0OZd27O0wjtjA/
Rdt3OuZ3eBFKEzxn5RHyzj6NV4r/TfI3WKh2i++UyTXHL823802yDpid0vUk
k+SiJNqGwJdsLJBC02sKrqrdVzbGlfbkKNTRl7BUbiEIWsuyYIZPZmkjE8+F
p84bN8bQaGCWd20zKtuKw0zcbAHOshatW5/GQV/2zjvsnJ1BToPMRwhnS0qV
MShcmQAOQAGJ4ymBbDdijRf2clanm8bQrkkDYs91MzhQl7nNU44Y4AAt5/DU
Cd5Ab1ytR8lqoeFw8YQiapOaQ5ElINdzJa7zeZEkvyYehaHCWXFaNYRl4ppn
t7FIuazKqtHb8wSLCDEp8g8Jk88nFGOy6OPPGt9IdZ7NED42FyUOv/cp2KbX
l1z2Ei1oSQ7HDNSDGjiak6zv4hXEjt0SY8LakN4f7INBoZ9SByBqk3lOayNs
psJoY12xr1A3aRQtuQKwHwIgA76cbxkLafQ/U9Rn7o3n6jIecF1mH0+nOUsC
8rbKxEwDnrqAjWCZpkUUSbipDuh8NRFP2/96qgE5IkzXCfhKSQKWUCbTg4RV
cU1l6ubMWgBKsUw4VG0jqSgxAcIb0RuHW1zs1gfIEXBnN8n0wzaFSQSCKT6j
IV8CPzes1GRAChgppiCrI4f/uJyHbQlPY8eM2xkprGoL5Q7A2DXbkV2pbAX5
TDW/khVZpGIY3ITpJE6krmG+LUnCqsuKwalLmEx0BeYzWokEhtSrRkF2Ysc0
DU9kbAollu3nwFqWTSIR6tSStud4th5BRY7DUMGsSFAOQiOcayiiuEGs4mI8
kBwFJQts8fV5CnEmUoOVEpMt94HzVnyqZ57yb4NX1eY7E8F4CWhGWagmqPF9
SR+ZFNQDrbJzWI9+pAe5sosbKY0mIunhzXFsSJGwSgi1JocdTvK84lAsJ3WN
3hL7HFuTQqzJGHAoTnCbYwdyGQwWJfmoM9aBAVvJf0QX0k5KQJWHDkVMxJPw
l+U678kEh9TM5COJpOs3FnKjM5iHsUQr+e5IDpwgHsdDLOoTI6mlF4QyfMWN
bCpx4TY1gAsDlabGuxjWNBx/Is0n8B47dkaMOJQClg4Z9Q1OLWPvcVsg2pI2
GJS7mRismUOSWvXgQ96YCAnfMfe3IkhTtKpKj3XwxCVTOLTqCn3l2hZesJsJ
8FXx/0pImBUYbZOh2qonyTTG+5RKoKT4UISba6gU0Tsb7DdXWPtkrgl8eeFC
T431OkvJdx8pkkpRMLiJAN7W8dPYKmxwskslGHtSN8aFhbocdVsyFSSYX6pk
RjB5XUkGL8WRSdmpMlmCtCuqFx0Ej46YZdO/3dnJMFav2HpJ3YbMAt7bBXz6
RNejqYD8XYJiPV4Au/IqXwBy0MK9TZcmsnGj4GJLuSTF20kRBKYPnLnrehe0
9RgFhs9jigMvsCcB0i8+PHeo1DamQpTLygQENLGkajYwU69DwgUx+8q8coaO
BCNFKdhsbmrxExF0bX8tMSLbMpOazsZeKr55MEJFWZCuiKUrl8RLxiBJLt0C
PqGiVWLveLy4ix+8fIO7Iq2qhJQQ795TZAxTd03cSp24EUls83IuNqg2q1Zw
TyigRFympkMCW0Pd8BkE8QN8rTb/2BQCKVFaQAXaSyJINFSYLXA2n8JVIONK
YU+8xpxTQzcH2GO9R0SL+SJtjTjY7o5hYVM0hcglZDi77FP4VbuW2ZpKkmC9
P4c5fcvxBKTzNWoTqDh6ejEM8bCiZnwcpVORR7R03TjEBZFLo+lyWmC7QCKW
iAlMPuPdHRePveK2G0W7iYEwl8dsDSyFl5XobcfjnFJrPuHyDA0b+28QSOUl
tdG7XieWE6xYooq5U8kZjbtOPOqEVqhxSnL2dlZeKmIddteIMa4pJKJNS/Un
MqPK9Ufxhkbn1JBUetjcANQq21/HjUh2BTKE4sf9RyORTYm5Jv2XFSEKGZKY
cnJHU+QxMn1cBMnrvt9TmRQ3vgGCGAiF5grqiFHcPNDTOWztEVvHfmKkE7qG
Uh1Cc0Fg+z+bBPvSeBMl5bHJ6thkxrxBdlAyizZ8AvkTddYxVTU2A4Tdheu+
mC9/g+10iNiRCIHOyfQmz2c0SWyncWTIhuoYNO9d7od/NrBgUhZiCqmv5Rrn
E6k2g0kz5uREQ6kfOEDYwRQ3FoqZ48vKyW6Aq5tID6V4wXGfgZucIXsoaQNu
7DrdMzQrE7hxCRVVhPxmM19EZlPUI2XEK/f5WoglaxTEHD8DKlzBrH5ZNiIu
bX4nbPxHOD0MkG/JQgxt0hoXbBwQjde4l7xCPqZAjDvVZ8C9qebLdsstcb31
Xj8KHdPtlIIRZ669W8MjpLGpsdLa5C0xsZtLQ7EroYkhsB1fc3b4qe/di5M0
PXvcpBCQE+dAMyRmrVa0y60Zn/HnjLmBVkG3VXkk3azRd8dyq2lZhC4d0tHc
3CV5v1aK2wRbjI39s/agVibNgpcXFxfBuNP1WhaZsrBeeyIeySSzUTUMG1lC
VCeZk2Cykf+A4SWYsbGuSoknobRe4P6JEa79Mj7knXKZPtE7VUNI3Eiuc2C5
itLSxUI2KlWOmLZJcAeJnGjWxYIcNPWWEkJko0ayK96/d8k1YvtDI/JS5TEm
oVVcflB1zqtWxGVtMIQJCCgPjI5rGlTNyYhTabGsyWbmAvD22miY90zWJfBm
hY6pK5faCqj8TW1OMVyBApiTZDHJ0d+coVVNVJh4Wm2q9wFzMgA8ZwKDHNwO
LllcMVwZVnQDZy8xwjLz0fUC1LwFJ5XSGlIJPnZQ4jF80BpkiLjvLs7evHp1
8fr8grP8XQnCg81mYbCKZGaYnLXNG1D62L2AWVPEwMR0W2CgSO75+YSBSpUl
Yh4LHsFUL8Tuts9Nd1tfknmkl630R5P6bLAu6nxMOG5bIFv+NQGOOVs8aCEN
qeOUoSHJMXZg6z+0YlNv5HbN1Usdt+3gpuzw7g7sNE6197LkuP707kdQ599M
/oJmxJdOcuzBG4AqaHe/tAedDklyAL51Wt6gjI/QgEfOX+MT7FkQjg5aJjfJ
iNEEcl3EyyW5DaSELutF6HlE+SYtlyWXXspQneewhlINzdYvSPukedTBRopK
Wvilm5V/pMXG/qUdtouJOEQjebiy4Rg2F3GjuzF5kkrxjHAA0d9tZA8gW7Fl
2lClsdW0yOVI67T5YeYzxgt1jpHPot08BY8H0ozDeQhcboccMyRNYrDNvnJA
N5qyPSibzjHdHD468cZGNldCp/BXTIzGexjVlcETP/cVVyI4Ugi0rPpEVLjp
jaZDqJ+AXR65lhtXuCkRnZIcGkifcwaAFDZAtcBvam5E0hg0hDu20EjSv33s
mw2+K9xeww/JXCW2NuTS2YoLQ3JdLjPQZmRITcIRK7GDwlTixzqC1AllYcRz
uVKXazeTTqUSeCQCG/FVOjCVqMjwxmzeEQSz5A6JoTzj7oJpkHcjuRCRqVhP
AD815fWx4vkAoL1xkTUiQTXKMtHqT9ielsISFlhGrbpZWnd1zUarQqs2Vkcw
sxEb4WnEO27qrsNqITlrb3X6v+Ovg6jrF/d98fLtZTTuhH2sGYVP9OTRHy42
H+x2uvgYZ3FlzmxWGeMO90lmXn5ISNq+8ty7sKka0NROjEZdc5M3tzXVrlfe
5TK5E98EfkY/L6I0Lok9HJHRf4+rHdgPWGg9c0zXzhJt0wLxTjONtktgz5rX
NEDxg6Oa8UkzmUO31HmiTlFtTMcJHUYms2Xf7C0xLB9lAcCdzK04IeVavWkF
h7IGnwQaOfGOPXg3cgNd7egUtyeNbucciblw9HHiv4WsJ8Zz4wwOawPUznbE
VtSYjK5j03wtuLC6WFMnq3pXKwkLmHGpX9thZAx3lFQP0v1a0k+LC/GBKLgk
goVV3ErpXyesPeqSRsReBcnGIypMgV6o6yRNF5oug2TV8vrQxkhec5geCFtp
vb6cDzCnnJs043vH4jk/SuMbEmHKUsP8bMXF9bHHgLBt/F6I8HvEC3EYxIYI
yNXTejUV1tO9TbBuLLtPZnhkqamG+j3OfaobI+K3SSFNyKgMLjqvtRlmD36W
E1lrRe02WekbYPTCiji2XExiVnXgqJvG1z3e4VIcvjn1msctMqN6+76kB1+e
11rwkbGjtnh/0abGBtfsRPOWwh89c3rfpUJE0xodqrjloqJqSvZNmn+vN5/0
uiOg4seD3jTs94f98Hg6n4XJeDCbTJLjcb8322NU4v2z2ZKZI4bBqpDONEiX
2wxVMk7ZWFaxHASvUkBhuF9qbkzF58EMgVEa7fqiBqNS7YB8Y6pvTHQFRlEr
xpISdkeym9RRFN2UgWFQw5gflHOQDe4mT9nl6Ci+ZBTNkoX4b6WCW9Mika9g
+LVmtukCvkAtVc3vzBjs3lmD3cf9RqdfUxyVcA/y+okunyldNZGf1izoKzK7
O3UfJEX4U+4OF4fl/bmlSISooSCj9uUD1nNRTzqkngflmrGHJT80eMLJoa7j
0zpijdu7R0lrne0NhtRjnUjFd6Lh6017J1l2mo3Ipr8BqPEPT6t4dMVF0ws2
U5seNSZyhgttS7YyVlVIF+gyKDQlDdgAkYsyIUEEoVa3kBvnvCfsblEHfoTZ
XpLdhWXS2om7wrZTJguEFDq/B1kpmy6JAaeZU0MQnUkSRrzR7pNCG5qtjxpD
oRYfTu+JQZqbioXTQUmkY1JM2mZVGuwiFcEq4pqbLzGx5C4oYmMAp82zQ5zg
9T3eCw88FgYfkgf2xFEKYJwWq0WcSZf3aZJKcPVdkZMzfY2V/iVOZc0Ze6sk
h70/w7QLyiOsgiItP0ilDCdaCcdhr2KGddaK61SqOVCQk6UBpVscgqJSRUWa
A+tYSyQOFnVMVuStrMV6zZLYRmXjAii0T8KyzVpofKm2g8n0VDN6y+UwIcWM
kBoquFUPa5s2s9+R2Y4W/2OOwt5P9gg/7rNR7z3KBYv39nBN/ffStYU32PRq
0UaqptJ4DrLs7thSSG321BvN1ART+/OZsBgeq0nXpHJavjYZ011AZq1Lc9xw
JCI2ORtJloE1MqgcHFceorG2m4ugxPmNXlIYKkhhJiREEvLmxWLDTaMVTsWB
hSRzcw1SeELO3+sJpxlRsfHK1224LfPdhnl3w2c0kRIg9hwVurQOhJ60dMC8
W18C0kiwdnOAsXn6seUgmUH5/Ek170Q3o9yzQBNFqY4MRwPZdRtwbcFhe1V+
8rM3Pu7XmvV9tn8qhhc8rCq0h65uTKAH6SS+c0zjUK33/eDs8u27198dPpZr
SnXfURPHIiUVP4kZGFVwsOeUCdoD3h9nEtQaU3lm6wMOPD8zvoeA2juUSBbU
uFbqiyQZJMbyZinHZPAahfjVk2aTe9hpQx2L5iweMxgHSXBuHudBoZGZ8gnX
K3RZ8APSpcBqaRrAMMd86ZYzthQ+luGlljkds3zkVqXBRiUIkq3RXSz6WCea
V8+cyoiTDUmL5AFtY48X5gVgHU7L9ykSzEWPEA2YiGgeUphUDKOAfvz47sVZ
vzMeynL4o9PX529e+e0dS9ZzznOsqqlWfubM32NsHCK0qhV4cp9q3n+Tr6Pd
DExkebxZ4VfcWnP1QO7uoAtS3Y9aD8eGTaKOVpGqpV+KQaMxKyGfUIp0HPRH
1BDnMcDt7ohf59Emm4HESYpNB29Ff+R1xpLgp+YsCeTVFLPVlMVDlgyTy4QR
nmRFqQ2sMV+SgmqUzT73/LGOZDqUiYQYMTGbwoxHFEOBv3HFFhaBOJSJ4gGl
U2ZqXcJACPhAEgWpsaOLcQfjA9G39D2HfrJ8ZEMMJxQcZZzlrh7iOgmoKur0
hux64lCfGe4kU8EwNJeG6mlnUSa2kvhbLFKuumrpM1zuzBSJZWHK2BLXEoS6
DUROiCHx7wKYwQQVXooG0rB6kjDEv8lNeSWs1nGoJ04Z5I3nqQZdwRivdNpJ
AiOHK8HA0ZW8BAUzdOM+4C0sWsHaE2jGJkrZ8/gTfMx7ZNExJWrJuc2InZko
FSzjgMqy1QXJnoMldAoQpY0Hk1AY/9DK/vX+EC1pNEJJ0tQ5E/neKuGCKXxJ
W4yoqIdp3yKqleuVBzFuM7JjKL5O1HNh2zSw9w5ESMyude2gDsXSW7dW21mZ
mIpzPBLwFkG0ljlyOjvVqRwjmQJCS9MRfHmJ5KTknjj5HINIyc0lwYc6A/Vx
o9Vhe1kJmWqZcrUUFMgBhGtu80AqAcWhSwMWVwuQzILJGuHYCiSGcYk07xrd
btfI1vRcX50PmIdEvW4ExFDcDlHd00ClZFD/KgDnCiyfMkRlvHK9mWSvsoGk
hiR6+MravPTuAhI0yW8T5VOXktz3cV/S/Iyq4WUHcE3TRBpilzljd2O9NK0z
KuPt7kg8tFEEMNzvPikP6QlcW76KUWUo4jtOi2o5pCqRKo+ruCC8oVB0EEzx
HK3rGOMqTfMWk/fAVFErlxDMNPXGXwxTEEpEVLwTN5hb1C3DZggUx8nor0XD
cARYxikHi1FMSk6O/dJWJJGCcCZGErD1OqFRKJsjqXBRcI1JQee4VvaHx4uQ
VRW9o1P1MWsnNFrQvLaR4NYr+IlZPGVS2LxSOKJKopzbVrdk88DndEzO5Lcl
IifIge/TqS9mS5lpbTUmwNIQCr+hT/up6i01bivQlyIxQU67dusWAZTb9JUc
knSYYlGnl3MpB6GvltUDdwWod0wCuJW10uHi2nXMKaXVWN6s4imrKjn/5iju
NvW+UuerQX3Fso1kh9INL0MVPcX6MhJ4V7rR6N/bQtsZXQ6s2M4ZXvNEGuE8
qUU3qxlGC/W6anmllx3XEivO5UZOMFXGwpSn5TLhgJpAL7Lr0FxnWYLKAwxG
9eNZqmZRodKoLybqCrLFg0uA25S/y2q7o/Y7DdAlD0Vt4ZyOXzjdPskQMUuA
QCR8nRwiY2hYleshqMWSu4grSHK6xDfxSsKE3XpmfFCHLT4+UUfU/GWSrQnp
TcsjBdY6oyB7TZ6mlDgGGBZa8WxdEn6PJl9SvnPpVQRYBZxJEmPgPElomCyE
bwjpEUrUwlubKJHhlabq0HXizJ+/uqS3z5WabjQ0VDrb1M8QhU7iqJ6hxrBJ
fRU/AmR2Qs5KIiOs9jqIQxb2SV5SvCkeKr7SHY+NQ80QHXUSukhIFHdtijTN
kWITeOq3VyLQxcBlGIkf8x6rGGzqo+qUUglNOw4wGDx5SqdUg5mJeJdXuX1r
oXDgOnY2Q1RYh9OdEnEAxSgnMjw2ieB/F1wKdONSZzBlSQjrrCMd7dG2RuA8
LpWVSqKFycX2BqXDMkMSBvKQ6PLnIfkKciIJsK1yEWsIt0RomQBiHo1AkJqc
FoqTIQd7kWAc5K0YWLXcl70BUj3MEFmzYsLlW7gx2h8Uq5ytMXzEM6SquBlr
xI8VcFH6qkiPcXmDGyDSwNDm2mS49FpkoO86mVck9rBC7H4rN6QlJVvchExs
B5ou8Qw/JA90mYoiv6bySfgBOycT9NQDiJwbhuXtQbajtzTnk3BulS8e4MiQ
r3PRL8Tvm3RVCpk2o8IvIdsgVjGo3PjuP16+eY3GrfVSApbtM2bqOvli7YCz
3Rd4xab2iiGuzFPT+0w/D43eq6z2gNgEGkDZjbxAc7N5jK/XoZ6pY3iig3Pd
am1PQcOxpEOBk1ngnkzN/C4WMKqhyL2syGcBQi3mrxvc2w9enr4+3SSe+Okn
9auxj4TTtzzujKun939699oJfJGgYImV/Qhfvnaj37RSK7YtShyzVtTtkhFL
zGatQB3VlLtEnGsNjLbgA0UZizuR5OsVK8HIaBl7SBugldUt27jqAiBgIsg0
Q8IJGvB1YfWxtpTnohXC7IesWTZKiflToEbCTcAa8+EjbRdQ4JL6pLQRG356
g5VvyO7PJM/znpAN3LTjEVwgfqANzbjpIVpZMJbgwEWfO1K0l3jcKNnA8OSn
RHM58hSisWgZPk9LKjz0IM0Q0eZsKl9nNrvTj6/mnnlOjdfgdr3AK2Eqtm2x
s9VBIWlncfngS4epCjlU/A5DnECjX2DWLTmgga7zlUy1wwnxZO74R7qTKDhc
Rpd44u4Oq1JoEVuDsGDaoJnqZk70pSpZVMuCVTNz8YwA5nT+uF6AjErkBvdE
+/ctTCt2xt9wpJ05QPRlMv43lBFXh6DI5UhAWJAVazexS0eaMF0AufetOSuq
bV3PWCObhFAV60fx3EKcpFFvhqABUE2GWPzYM0M351AbTVszGjVjxgnExNMh
oEnv5xJbCwF4K7zssGpMgW5zKLqXo1svo4mE0k6gpSYohQ5NEDFnw2mbHJvE
Uo9okgoW1DaogENd5dlMWQdyTzRdJmr9Rj6NoVjcs9wGTrGRqoKTmmupQS86
BPV+uLlU5d1063ObPrAFY612RTIiKS4Zf0hzaIPxraach1yCbpGQL5NEIAq2
JlW139L4tj6c32YLAzo9RgIg88NoEMkxozVqG6Vk7KDnj/vyPJuqLDHz3hDK
ezo1nkEO5f+4X//IFABRdnKNrHm+pl5d9lmN3GHPYyqVMt6hof0yXvwKQsgr
+D1OFsGrJKZUE/joOQDlDDBrkiwW8ue7eFkmqFq+ANzPgx9BRoI/vsuzX+NF
jkPBvUiLHMej2FLA0XxZ5hl+ACIUCB6X7eAHYEaw0zsc5x2XRMfopBSfepdP
gp/TRUWvXCbwxY8JiAfFrEXbzGd4m/4JcL98lvPjSVEFP6QJWQzxleIaOMfb
Iv8A4EiyD/jUj2le/qC69V2CV4k637DlVyKFiP9fXL3QmC3p+gK4811afb+e
IGUE9LRQRIKhpZS4S5E43W24i95qJ07YJqfayGGABVZ/jm9Tm9rz5vJFcH52
0SDnqk/uCkZHMNhuElo7ju0EyNudyCUZ11pyyKhoMmTZ6cIl1eDp1SK+TkFE
+NWSVNSMiO/cSR2pG2oRteIelwcIT4o3EbtaXBkHHIetUSH3FeI5k004GDET
cyLCzxz0RAGHisUqmKGfFf/EVGSiKpzhF1Z36YwrBSI6x4s5YEA7uMiuk0UJ
+Ax4G/xjfgNIFBdLoEM3rKW/jWEowMxihRYPwJU5deYzT4HaHktSXpqhoK3+
YPQFJbdc+4KAYElO8PLyzdHLizORRsMwpM5xIkKhUQTlRhPqWUrelQiSBimA
ZqEx7R50EXJ23LjJUIEYF9nI4rblq6ddaPKQVMrjwF8gnkQY2M9IgctOThUl
RF0ettBXQ0QRmzYTE6XoWjzXA0y3Onwk34rSb/MqBEZgIYP0fyHnNsslJprz
smZuXpZdhQzkfWmqZRdrOIuD84t3h8RFVI2VcKz/AT/BlJJaEd4E7vewryD4
NtgbTuLRZBx1wuNZPAujaBaF486kH3Y6005/Puv3OtPxnvsi7Nd9MXryiwAN
98Xuk1/8BcFiX+x/5kXcroNiXjQxopiTcrAdwZxgXUUww2SbY4XLOqyBm3Xf
d7v9AH9g+YPjTi+axr1wPplNwv5oPgmP58Np2Jn3Okk3Gfei/mBPXxsM9bUn
BRfLa72xmS0ZjjudwTgK571eL+yP+5NwPBqNw2Enms+7k8F4Fo/1NcxKkdc6
81nS7c67YTKaxCFAFc53NOjBlN0kHo/ncW9+7LxG+8PXOr0pNYCd9udJ2J8c
D8J4OOqGnWl3OI0mo+NBv+u9BvuD1477o0E863TC3mh4HPannVF4POx3w0Ey
6o17o1631xnyaz0Xksej4Xg0jOZhPB3AIqPjJIzRtTWaxt3ecTLudAexec1C
EhbYnw2HAPtOfxT2B7Ct8Rxf6ySD416Eg470NQeS41EXjqB3HHaHvSHsbTYL
J7N4GE6Gs2k3Hncn0aSnrzmQjPvH3U48mIXxGB7uAxzC8QyQNx5O4/kkGfan
owm/9sPFe7Tg8WujJO5G4/kwHHaPYW/dwRywZDwOR/3e8WzY6x4PJ/Y12Rzu
LRnNp8O4H3aPI4BkMpuGkw6c4Gg26gy706Q/78TO3cDbcYVmiT+LNf/jPmYj
vOdsBKa9z3Pbwd4W2XGzFkqvYgLl4dSbhp8Enfvo4uy4H/XPur3u6fNOZ3fn
IOqNh/3xoANY0eGfw+AKtIdZ/NAKXiSTYo1mpm63hT06ukH3pIv/b/OjwdtX
wXevrsLO4AQH27rQjbWZsmNc6OV9mfyzWJrQf9wOTln60Z5HmkpTq1heLzF2
ZYpFUP8OY3CQDBxuikLCQmMnYs7PiTodEJO+KxL0b8duSzFaNEgFovVy0r6I
ZkZawvmsiusE6HkEad+dIOd1vJnPywSjdPe58IDfjrsMbA9ujQchq6lU40tW
OYAqGoy7IXCQaBB0Oif0f3xC3eg0jzx5POpgj+hO5D2Jy3qPj73PaTmA0J37
TjTpRrNZF3Al6uOxwx6jbjc67h53xx39YVSmKQS8r20Ra6NRnpiHXl+ePAHT
aijG774f9t/DBO8BKri+aHgO17Fz1jvvn5+dyfqGQFUGo5FBa2+BrxvKa+NB
2FPxe6Bb4BsgwQM8/4G/oiP44vA/1eHIc/+cFx9OGkZoWCwP0wTlBhA03OJw
89XDv4sUCC8w56thJRsUgkC5MbhSr48ncD2qRfLtM4eC2bMO3nL4JeI8B+vv
7wcXNoHFxLf9mazFH/dJs400c+uTXhqSV5/6g+0osMsL/ZBPSO7tF42Bt/49
RqsF2HQd+9xYmknfLVOcIhrSdwgx8ksF+tOnzyN5mFKbg4gHAgjDs7F9Fj+e
RDCwoYXwbJ8+jFrwQu9szDWUdOwxT3oxfH5+cXZxPu4Pv3R3VNiIfoDdfTF4
EXcChUeImwcR8OIsfA4rDf1l1fFEDlyRwEGbRxCk5yNIz0EQpJRo2+AIKtFC
kcZTkT1MOVOz921vOcMUZROYFKDcbURbQyNJD9q7u7tryyxtGHuvrREOHGyI
CLYEWVWVPdQunRgSm/JiJqd3OG/nhSZcYstNDlut5chQdNudjI8cpSnnsyQz
z23vFglTITGpDG9HlyOt6SR4im7B750E7k8NDl+EKh7WwCH5IweD2bwfjcdR
L05mnUE06I9jEO/6MfCY6bxznDjIk86+fUbn98zDo57BFRj92V9PLn4ztYCV
yR2Xu+nuzSMMTBd6/IrQECYLAAGPLBiqgE8yJRrSZ50OEoUNYH3Rgi0B+M33
X7cY4h7DHiw/HMOiwkePkG/BtlPcoAb8Nt7vm+SekH8GyuCJjz+8AMSgsL+5
gD9LKfk/A2TfwEFgyUnA8Xv5CemfV/jPa/1Tf+Sm1tB2Y+Ynbp2v6bat4zJx
iXrzy0fIYd8nh32PHALdk4c0NQ+NRU68lRMXD9xLKpZLF2Ltq2P98CLeur3f
tEfc7g7oN1Fn/GI06J5HPRDABs9Pz16M+6Pz58ASxqdj6a3F8dSZ+ksRg1C8
F7s7owSaPMsbLDDM9LLv0MuvTTH7DRTzC2/AX00xGNrvY8vNCZZzgOUsaqAY
ffPKxFAMgHgzxZAnp4ZikBgxiadzOJzZBA8n/tJb/xUohm4xxD2GfVh+eAyL
Cv1V+dem30Qx+p+jGNJxF7DWu7wujAlfN0BiX/Sojb9yfDUcbK789yA1vwlm
TaSm75KaI4/UBAy6LdRm4FObQU34YkfRE8SvQXkTR38z+Wvw9eUvXfA6Q8J2
hE6WuEA/B0bzaO4Dg4dJppCfwb8GgY0vLq3eG7+bzIbDwWiWHHdH/eF4Mhgk
URc+icdxEv9/xV1Nb9swDL0X6H8YelkHTJtjR7Y8YIfGaU477l64iX0Y1hVo
0sMO++8jqU/acqJkWZMCQZrECkXzUeKTRJZtnm+6rugKObRJuvvcIqUzNvqZ
M8zfTnfHKB2fwYUdjYV20lzE5nCgkInQjr7LZnHkkwfau0AYZ/spsKNCQg9E
DVIJLtbgZsacsjzklDUURhM5LgDalJBDAYQ3q//hZNN0sLQAHzdw6CEmYRFz
1XKPqybVOU9jV+mprNeeGWPJfXh5RoblHykWjTnLsVjyiXEslmRBvoEj0UCx
5G0ZLBJVE2IxyrPsJVrOy7ScjlGrFoEqECWSLqlUSzmNyglbqbitVMxWdCE+
c435erAKEZT/pY0MQtcMCWhnXuYQgtto6UQcmTFG8Cc758rXKzbFnG2REZgR
45iPF+xbGGBlopJWOBj1HFatp41+YK3VKs/v86pejBlnreBLQesVCeLd9uFp
62w4EDYKosrp1dgqvds0xRSIjOrpEQ5pqpkvmwz/qqJWq0vgJTOdFdhbUUEn
RA1iCS5XFC/V0XhRBi+3aGB6EfqDBY86AB6VAJ5wqSqOoVit0I+uDrzbPby/
Kqwpwz6JPHjnhQ7emKmww9Uvyj+Jaaj0MERbt/TxKUQmJmjW/6wnYHp95XF6
NEZHq5AxnKYvD02lu9+Ftw5e/njd6nzdPm7A8+UuyQztZrH5wL6Hy7R0HtdU
Lg8LTOjYyW6nsoHGb32UEU+9mMOgeLaALrLifDqDqznZ0Zhb62mMUM8RGkO5
SzyNUclFnMZwdsOITxgLi3wpV2U9U7Mme3saw3ZRYB+FAvGFAqEElyrqXZT3
Ls5ZJK6BODfj97qM3YzOdYgpcm3iOndkrXdpOJ1P+hOJ0hUEKnAdfOZz9lGQ
S0ecMemc242zDSqOjzNxbs0BpRNidaXDCyvJBSJ20lwYs6tIzB7sZrq1O4Ug
cE/ZJBQL+PVAemLUT48zhv7W5I0yvlxfzbOZKmS/acu8aqushVG07zbwlD+u
5WOO22/qoiyUbAvV1utZUWy6bN3O2z7b9LQKwiMfY2jvJ/CBCoVPL7imM3Jt
oQYSXZv+ZoprQ8820OjbezbbQ4FdBM+WtfBU9IJLNbiPIVin7maQ39/Ca4Ik
uBtKgbYmsqEU4rC5LVJJgSa148u0wD9BtoEKYySAOooEQI0yGuCezi9TyofA
e9li5Oiq4bOvN5QNZr27oWvEu294NuLOl/GhzBs/fdZWOgQxXgvyqZnBJXa6
pN2LrlRl2lywNmO+OWzVluO2u9WfcLYFk6Vnw/fsqJizabrh4qIls2TM5gc/
IwyDIkmxppasKadhXbab6m2bccsl5niGGTT9otVQQIRDu38BWwnLwclzAQA=

-->

</rfc>
