<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>147599</bug_id>
          
          <creation_ts>2015-08-03 16:46:32 -0700</creation_ts>
          <short_desc>[INTL] Implement supportedLocalesOf on Intl Constructors</short_desc>
          <delta_ts>2015-09-15 10:43:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>90906</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andy VanWagoner">andy</reporter>
          <assigned_to name="Andy VanWagoner">andy</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1114437</commentid>
    <comment_count>0</comment_count>
    <who name="Andy VanWagoner">andy</who>
    <bug_when>2015-08-03 16:46:32 -0700</bug_when>
    <thetext>Implement ECMA-402 2.0 supportedLocalesOf
http://ecma-international.org/publications/standards/Ecma-402.htm

10.2.2 Intl.Collator.supportedLocalesOf (locales [, options ])
11.2.2 Intl.NumberFormat.supportedLocalesOf (locales [, options ])
12.2.2 Intl.DateTimeFormat.supportedLocalesOf (locales [, options ])

All of these functions operate in similar ways and rely on abstract operations:

6.2.3 CanonicalizeLanguageTag (locale)
9.2.1 CanonicalizeLocaleList (locales)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118769</commentid>
    <comment_count>1</comment_count>
      <attachid>259338</attachid>
    <who name="Andy VanWagoner">andy</who>
    <bug_when>2015-08-18 18:42:03 -0700</bug_when>
    <thetext>Created attachment 259338
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118917</commentid>
    <comment_count>2</comment_count>
    <who name="Andy VanWagoner">andy</who>
    <bug_when>2015-08-19 10:29:28 -0700</bug_when>
    <thetext>Some style check errors were lost in the sea of style problems with the added icu headers. I will fix the errors in IntlObject.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1118941</commentid>
    <comment_count>3</comment_count>
      <attachid>259382</attachid>
    <who name="Andy VanWagoner">andy</who>
    <bug_when>2015-08-19 11:34:39 -0700</bug_when>
    <thetext>Created attachment 259382
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121522</commentid>
    <comment_count>4</comment_count>
      <attachid>259382</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-08-27 18:18:56 -0700</bug_when>
    <thetext>Comment on attachment 259382
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=259382&amp;action=review

I am finally starting on this.
Some quick comments first.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:62
&gt; +String getCanonicalLangTag(const Vector&lt;String&gt;&amp;);
&gt; +String getPrivateUseLangTag(const Vector&lt;String&gt;&amp;, size_t);
&gt; +String getGrandfatheredLangTag(const String&amp;);
&gt; +String canonicalizeLanguageTag(String);
&gt; +String defaultLocale();
&gt; +String bestAvailableLocale(const HashSet&lt;String&gt;&amp;, String);
&gt; +JSArray* lookupSupportedLocales(ExecState*, const HashSet&lt;String&gt;&amp;, JSArray*);
&gt; +JSArray* bestFitSupportedLocales(ExecState*, const HashSet&lt;String&gt;&amp;, JSArray*);
&gt; +String getIntlStringOption(ExecState*, JSValue, PropertyName, const HashSet&lt;String&gt;&amp;, const char*, String);
&gt; +bool getIntlBooleanOption(ExecState*, JSValue, PropertyName, bool);

You don&apos;t need to declare everything ahead of time when the function is in the same file.

If it is 
1) static
2) defined before it is used

you can use it without previous declaration.
Static function also tell the compiler that they are not available anywhere else than this file, which is a good thing to know for optimizing the code.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:119
&gt; +String canonicalizeLanguageTag(String locale)

You can pass the argument as const String&amp; to avoid ref-deref of the input.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:136
&gt; +    size_t numParts = parts.size();
&gt; +    if (numParts &gt; 0) {

You can replace those two lines by
    if (!parts.isEmpty()) {

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:150
&gt; +{

Since parts not being empty is a precondition of this function, you can make that explicit by using an assertion:
ASSERT(!parts.isEmpty());

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:158
&gt; +    String currentPart = parts[currentIndex];

const String&amp; currentPart = ...

To avoid a ref-deref.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:165
&gt; +    canonical.append(currentPart.lower());

You can safely use convertToASCIILowercase().
String::lower() is a bit slower since it needs to checks for full unicode conversion. Here you know it can&apos;t happen by design since you would have escaped the previous branch.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:170
&gt; +        for (int times = 0; times &lt; 3 &amp;&amp; currentIndex &lt; numParts; ++times) {

int -&gt; unsigned.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:172
&gt; +            currentPart = parts[currentIndex];
&gt; +            currentLength = currentPart.length();

Better use locals in this block rather than use the more global names.
You are gonna make the compiler&apos;s life simpler as the liveness analysis is guaranteed to end with the block.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:175
&gt; +                canonical.append(&quot;-&quot;);

canonical.append(&apos;-&apos;);

StringBuilder has a fast path for single characters.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:176
&gt; +                canonical.append(currentPart.lower());

lower()-&gt;convertToASCIILowercase()

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:284
&gt; +        [] (String a, String b) -&gt; bool {

String -&gt; const String&amp;

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:358
&gt; +    //  grandfathered = irregular / regular
&gt; +    HashMap&lt;String, String&gt; tagMap = {

Can you add a performance note?
FIXME: convert to a compile time hash table if this is causing performance issues.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:389
&gt; +    String lowerTag = locale.lower();

Should this really be a full conversion? Most spec requires ASCII lower which is obtained by convertToASCIILowercase().
I&apos;ll have to check BCP47 a bit.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:391
&gt; +    if (tagMap.contains(lowerTag))
&gt; +        return tagMap.get(lowerTag);

You can just do return tagMap.get(lowerTag). It will return a default constructed object if the key is not present.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:420
&gt; +    // 2. Let seen be an empty List.
&gt; +    // Done before to also return in step 1, if needed.

This looks cleaner than the actual spec :)

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:423
&gt; +    JSObject* oLocales;

Terrible name...:(
I wish the spec had picked something better.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:426
&gt; +        JSArray* aLocales = JSArray::tryCreateUninitialized(vm, globalObject-&gt;arrayStructureForIndexingTypeDuringAllocation(ArrayWithUndecided), 1);

You could also use ArrayWithContiguous instead of ArrayWithUndecided.

It does not matter much. ArrayWithUndecided is an array with contiguous values without any particular type. ArrayWithContiguous is a contiguous array with any type, it is used when you put any non-numeric value in a contiguous array.

The next line, initializeIndex() will convert the Undecided shape into a Contiguous shape because &quot;locales&quot; is a string.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:445
&gt; +    int32_t length = lengthProperty.toInt32(exec);
&gt; +    if (length &lt; 0)

Looks like the spec defines ToLength on 53 bits.
I am okay with this for now, this is really a detail and we have the same bug all over JSArray.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:449
&gt; +    HashSet&lt;String&gt; seenSet = HashSet&lt;String&gt;();

You can do:
    HashSet&lt;String&gt; seenSet;

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:496
&gt; +            if (!seenSet.contains(canonicalizedTag)) {
&gt; +                seenSet.add(canonicalizedTag);

There is a trick to do this faster.

If you do set.contains() followed by set.add(), you have 2 hash lookup. They are both in amortized O(1) but you still do the operation twice.
Instead, you can do
    if (seenSet.add(canonicalizedTag).isNewEntry)
        seen-&gt;push(exec, jsString(exec, canonicalizedTag));

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:582
&gt; +            builder.append(&quot;-&quot;);

&apos;-&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121725</commentid>
    <comment_count>5</comment_count>
    <who name="Andy VanWagoner">andy</who>
    <bug_when>2015-08-28 09:36:30 -0700</bug_when>
    <thetext>Thanks! I&apos;ll make these changes as soon as I can.

(In reply to comment #4)
&gt; Comment on attachment 259382 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=259382&amp;action=review
&gt; 
&gt; I am finally starting on this.
&gt; Some quick comments first.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IntlObject.cpp:62
&gt; &gt; +String getCanonicalLangTag(const Vector&lt;String&gt;&amp;);
&gt; &gt; +String getPrivateUseLangTag(const Vector&lt;String&gt;&amp;, size_t);
&gt; &gt; +String getGrandfatheredLangTag(const String&amp;);
&gt; &gt; +String canonicalizeLanguageTag(String);
&gt; &gt; +String defaultLocale();
&gt; &gt; +String bestAvailableLocale(const HashSet&lt;String&gt;&amp;, String);
&gt; &gt; +JSArray* lookupSupportedLocales(ExecState*, const HashSet&lt;String&gt;&amp;, JSArray*);
&gt; &gt; +JSArray* bestFitSupportedLocales(ExecState*, const HashSet&lt;String&gt;&amp;, JSArray*);
&gt; &gt; +String getIntlStringOption(ExecState*, JSValue, PropertyName, const HashSet&lt;String&gt;&amp;, const char*, String);
&gt; &gt; +bool getIntlBooleanOption(ExecState*, JSValue, PropertyName, bool);
&gt; 
&gt; You don&apos;t need to declare everything ahead of time when the function is in
&gt; the same file.
&gt; 
&gt; If it is 
&gt; 1) static
&gt; 2) defined before it is used
&gt; 
&gt; you can use it without previous declaration.
&gt; Static function also tell the compiler that they are not available anywhere
&gt; else than this file, which is a good thing to know for optimizing the code.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IntlObject.cpp:119
&gt; &gt; +String canonicalizeLanguageTag(String locale)
&gt; 
&gt; You can pass the argument as const String&amp; to avoid ref-deref of the input.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IntlObject.cpp:136
&gt; &gt; +    size_t numParts = parts.size();
&gt; &gt; +    if (numParts &gt; 0) {
&gt; 
&gt; You can replace those two lines by
&gt;     if (!parts.isEmpty()) {
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IntlObject.cpp:150
&gt; &gt; +{
&gt; 
&gt; Since parts not being empty is a precondition of this function, you can make
&gt; that explicit by using an assertion:
&gt; ASSERT(!parts.isEmpty());
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IntlObject.cpp:158
&gt; &gt; +    String currentPart = parts[currentIndex];
&gt; 
&gt; const String&amp; currentPart = ...
&gt; 
&gt; To avoid a ref-deref.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IntlObject.cpp:165
&gt; &gt; +    canonical.append(currentPart.lower());
&gt; 
&gt; You can safely use convertToASCIILowercase().
&gt; String::lower() is a bit slower since it needs to checks for full unicode
&gt; conversion. Here you know it can&apos;t happen by design since you would have
&gt; escaped the previous branch.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IntlObject.cpp:170
&gt; &gt; +        for (int times = 0; times &lt; 3 &amp;&amp; currentIndex &lt; numParts; ++times) {
&gt; 
&gt; int -&gt; unsigned.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IntlObject.cpp:172
&gt; &gt; +            currentPart = parts[currentIndex];
&gt; &gt; +            currentLength = currentPart.length();
&gt; 
&gt; Better use locals in this block rather than use the more global names.
&gt; You are gonna make the compiler&apos;s life simpler as the liveness analysis is
&gt; guaranteed to end with the block.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IntlObject.cpp:175
&gt; &gt; +                canonical.append(&quot;-&quot;);
&gt; 
&gt; canonical.append(&apos;-&apos;);
&gt; 
&gt; StringBuilder has a fast path for single characters.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IntlObject.cpp:176
&gt; &gt; +                canonical.append(currentPart.lower());
&gt; 
&gt; lower()-&gt;convertToASCIILowercase()
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IntlObject.cpp:284
&gt; &gt; +        [] (String a, String b) -&gt; bool {
&gt; 
&gt; String -&gt; const String&amp;
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IntlObject.cpp:358
&gt; &gt; +    //  grandfathered = irregular / regular
&gt; &gt; +    HashMap&lt;String, String&gt; tagMap = {
&gt; 
&gt; Can you add a performance note?
&gt; FIXME: convert to a compile time hash table if this is causing performance
&gt; issues.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IntlObject.cpp:389
&gt; &gt; +    String lowerTag = locale.lower();
&gt; 
&gt; Should this really be a full conversion? Most spec requires ASCII lower
&gt; which is obtained by convertToASCIILowercase().
&gt; I&apos;ll have to check BCP47 a bit.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IntlObject.cpp:391
&gt; &gt; +    if (tagMap.contains(lowerTag))
&gt; &gt; +        return tagMap.get(lowerTag);
&gt; 
&gt; You can just do return tagMap.get(lowerTag). It will return a default
&gt; constructed object if the key is not present.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IntlObject.cpp:420
&gt; &gt; +    // 2. Let seen be an empty List.
&gt; &gt; +    // Done before to also return in step 1, if needed.
&gt; 
&gt; This looks cleaner than the actual spec :)
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IntlObject.cpp:423
&gt; &gt; +    JSObject* oLocales;
&gt; 
&gt; Terrible name...:(
&gt; I wish the spec had picked something better.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IntlObject.cpp:426
&gt; &gt; +        JSArray* aLocales = JSArray::tryCreateUninitialized(vm, globalObject-&gt;arrayStructureForIndexingTypeDuringAllocation(ArrayWithUndecided), 1);
&gt; 
&gt; You could also use ArrayWithContiguous instead of ArrayWithUndecided.
&gt; 
&gt; It does not matter much. ArrayWithUndecided is an array with contiguous
&gt; values without any particular type. ArrayWithContiguous is a contiguous
&gt; array with any type, it is used when you put any non-numeric value in a
&gt; contiguous array.
&gt; 
&gt; The next line, initializeIndex() will convert the Undecided shape into a
&gt; Contiguous shape because &quot;locales&quot; is a string.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IntlObject.cpp:445
&gt; &gt; +    int32_t length = lengthProperty.toInt32(exec);
&gt; &gt; +    if (length &lt; 0)
&gt; 
&gt; Looks like the spec defines ToLength on 53 bits.
&gt; I am okay with this for now, this is really a detail and we have the same
&gt; bug all over JSArray.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IntlObject.cpp:449
&gt; &gt; +    HashSet&lt;String&gt; seenSet = HashSet&lt;String&gt;();
&gt; 
&gt; You can do:
&gt;     HashSet&lt;String&gt; seenSet;
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IntlObject.cpp:496
&gt; &gt; +            if (!seenSet.contains(canonicalizedTag)) {
&gt; &gt; +                seenSet.add(canonicalizedTag);
&gt; 
&gt; There is a trick to do this faster.
&gt; 
&gt; If you do set.contains() followed by set.add(), you have 2 hash lookup. They
&gt; are both in amortized O(1) but you still do the operation twice.
&gt; Instead, you can do
&gt;     if (seenSet.add(canonicalizedTag).isNewEntry)
&gt;         seen-&gt;push(exec, jsString(exec, canonicalizedTag));
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/IntlObject.cpp:582
&gt; &gt; +            builder.append(&quot;-&quot;);
&gt; 
&gt; &apos;-&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121999</commentid>
    <comment_count>6</comment_count>
      <attachid>260225</attachid>
    <who name="Andy VanWagoner">andy</who>
    <bug_when>2015-08-29 12:40:57 -0700</bug_when>
    <thetext>Created attachment 260225
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1122465</commentid>
    <comment_count>7</comment_count>
      <attachid>260225</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-08-31 21:37:04 -0700</bug_when>
    <thetext>Comment on attachment 260225
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=260225&amp;action=review

Quick comments. I emailed the JS team to get help on your patch.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:108
&gt; +String defaultLocale()

This does not seem to be used anywhere.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:112
&gt; +    String loc = String(def, strlen(def));

You can use
    String loc(def);
or just
    String locale(uloc_getDefault());
The string constructor taking a char* use strlen to find the length by default.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:551
&gt; +        size_t pos = candidate.reverseFind(&quot;-&quot;);

I believe there is a faster String::reverseFind(&apos;-&apos;) available.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:556
&gt; +        if (pos &gt;= 2 &amp;&amp; candidate.substring(pos-2, 1) == &quot;-&quot;)

You really don&apos;t want to do candidate.substring(pos-2, 1) to check a character because it is a heavy operation. A new string of size 1 is allocated, initialized, the character copied. Then it is compared to &quot;-&quot; and immediately destroyed.

Instead, you could to:
    if (post &gt;= 2 &amp;&amp; pos - 2 &lt;= candidate.length &amp;&amp; candidate[post - 2] == &apos;-&apos;)

&gt; Source/JavaScriptCore/runtime/IntlObject.h:62
&gt; +JSArray* canonicalizeLocaleList(ExecState*, JSValue);
&gt; +JSValue supportedLocales(ExecState*, const HashSet&lt;String&gt;&amp;, JSArray*, JSValue);

It would be worth naming some of those arguments for clarity. For example, in the first one, adding the name &quot;locales&quot; for the second argument.

&gt; Source/JavaScriptCore/runtime/JSCJSValue.cpp:60
&gt; +{

Can you please add a reference to the spec? (http://www.ecma-international.org/ecma-262/6.0/#sec-tolength)
This seems valuable since this code is non obvious.

&gt; Source/JavaScriptCore/runtime/JSGlobalObject.cpp:1004
&gt; +            String str = String(udat_getAvailable(i));

This could be 
    String str(udat_getAvailable(i));

The variable could be more descriptive, &quot;localeName&quot; maybe?

&gt; Source/JavaScriptCore/runtime/JSGlobalObject.cpp:1018
&gt; +            String str = String(unum_getAvailable(i));

This could be 
    String str(unum_getAvailable(i));

The variable could be more descriptive, &quot;localeName&quot; maybe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1122550</commentid>
    <comment_count>8</comment_count>
      <attachid>260225</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-09-01 09:20:44 -0700</bug_when>
    <thetext>Comment on attachment 260225
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=260225&amp;action=review

&gt; Source/JavaScriptCore/icu/unicode/ucal.h:5
&gt; + *******************************************************************************
&gt; + * Copyright (C) 1996-2010, International Business Machines Corporation and
&gt; + * others. All Rights Reserved.
&gt; + *******************************************************************************

Just curious, Andy, did IBM release the right to use this and the other files copyrighted by them?  If so, under what terms?  Are the terms compatible with the WebKit BSD license (see https://www.webkit.org/coding/bsd-license.html)?

I&apos;m not a lawyer, but I think if IBM is willing to open source this code, their license / terms should be stated here.  This header, read literally, suggests that we have no right to use these files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1122565</commentid>
    <comment_count>9</comment_count>
      <attachid>260225</attachid>
    <who name="Andy VanWagoner">andy</who>
    <bug_when>2015-09-01 10:30:31 -0700</bug_when>
    <thetext>Comment on attachment 260225
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=260225&amp;action=review

&gt;&gt; Source/JavaScriptCore/icu/unicode/ucal.h:5
&gt;&gt; + *******************************************************************************
&gt; 
&gt; Just curious, Andy, did IBM release the right to use this and the other files copyrighted by them?  If so, under what terms?  Are the terms compatible with the WebKit BSD license (see https://www.webkit.org/coding/bsd-license.html)?
&gt; 
&gt; I&apos;m not a lawyer, but I think if IBM is willing to open source this code, their license / terms should be stated here.  This header, read literally, suggests that we have no right to use these files.

We already have several of the ICU header files in this folder, and the existing ones contain the same notice, so I assumed we are able to use them without issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1122981</commentid>
    <comment_count>10</comment_count>
      <attachid>260461</attachid>
    <who name="Andy VanWagoner">andy</who>
    <bug_when>2015-09-02 17:55:15 -0700</bug_when>
    <thetext>Created attachment 260461
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124825</commentid>
    <comment_count>11</comment_count>
      <attachid>260461</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-09-09 20:39:20 -0700</bug_when>
    <thetext>Comment on attachment 260461
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=260461&amp;action=review

Some more comments from reading from the bottom. I have not found any bug so far.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:530
&gt; +static String bestAvailableLocale(const HashSet&lt;String&gt;&amp; availableLocales, String locale)

const String&amp; locale

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:595
&gt; +        sLocale.split(&quot;-&quot;, parts);

split(&apos;-&apos;, parts)

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:597
&gt; +        size_t pp = parts.size();

pp -&gt; partSize

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:600
&gt; +        for (size_t p = 1; p &lt; pp;) {

Why not have the &quot;++p&quot; in the for() statement?

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:603
&gt; +                while (++p &lt; pp &amp;&amp; parts[p].length() &gt; 1) { }

I am afraid this could be read as if the &quot;continue&quot; was the only statement inside the while() loop.

It may be better to have:
    ++p
    while (p &lt;&lt; partSize &amp;&amp; ...) {
        // Skip part.
        ++p;
    }
    continue;
?

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:642
&gt; +        const HashSet&lt;String&gt; matchers = HashSet&lt;String&gt;({ ASCIILiteral(&quot;lookup&quot;), ASCIILiteral(&quot;best fit&quot;) });

const HashSet&lt;String&gt; matchers({ ASCIILiteral(&quot;lookup&quot;), ASCIILiteral(&quot;best fit&quot;) });

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:672
&gt; +    PropertyNameArray keys = PropertyNameArray(exec, PropertyNameMode::Strings);

PropertyNameArray keys(exec, PropertyNameMode::Strings);

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:675
&gt; +    PropertyDescriptor desc = PropertyDescriptor();

PropertyDescriptor desc;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125092</commentid>
    <comment_count>12</comment_count>
      <attachid>260461</attachid>
    <who name="Andy VanWagoner">andy</who>
    <bug_when>2015-09-10 17:26:22 -0700</bug_when>
    <thetext>Comment on attachment 260461
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=260461&amp;action=review

&gt;&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:600
&gt;&gt; +        for (size_t p = 1; p &lt; pp;) {
&gt; 
&gt; Why not have the &quot;++p&quot; in the for() statement?

because it would execute after the continue and skip the next singleton.

&gt;&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:603
&gt;&gt; +                while (++p &lt; pp &amp;&amp; parts[p].length() &gt; 1) { }
&gt; 
&gt; I am afraid this could be read as if the &quot;continue&quot; was the only statement inside the while() loop.
&gt; 
&gt; It may be better to have:
&gt;     ++p
&gt;     while (p &lt;&lt; partSize &amp;&amp; ...) {
&gt;         // Skip part.
&gt;         ++p;
&gt;     }
&gt;     continue;
&gt; ?

My code here isn&apos;t easy to follow, I&apos;ll try a different approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125128</commentid>
    <comment_count>13</comment_count>
      <attachid>260983</attachid>
    <who name="Andy VanWagoner">andy</who>
    <bug_when>2015-09-10 19:05:54 -0700</bug_when>
    <thetext>Created attachment 260983
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125242</commentid>
    <comment_count>14</comment_count>
      <attachid>260983</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-09-11 14:15:29 -0700</bug_when>
    <thetext>Comment on attachment 260983
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=260983&amp;action=review

Some more comments, trying to find untested branches.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:192
&gt; +        if (!numExtParts)
&gt; +            return String();

Do you have test covering this case? I did not see it.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:215
&gt; +    if (languageLength &lt; 2 || languageLength &gt; 8 || !language.isAllSpecialCharacters&lt;isASCIIAlpha&gt;())

I was very confused by this, I believed this to be wrong for a while, added some comments, then saw the &quot;languageLength &lt;= 3&quot; later.

I believe it could be clearer to:
1) Add the full grammar with the 4-8 rules
2) Maybe put &quot;languageLength &lt;= 3&quot; in a temporary earlier to clarify the &quot;language&quot;. Proposal:
    if (language &lt; 2)
        return String();
    bool languageCanBeISO639PlusExtlang = languageLength &lt;= 3;
    if (!languageCanBeISO639PlusExtlang &amp;&amp; languageLength &gt; 8 &amp;&amp; ...)
       return String()

What do you think?

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:246
&gt; +            canonical.append(script.substring(1, 3).convertToASCIILowercase());

You are losing me there. Why do you remove the first character?

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:491
&gt; +        if (kPresent) {

I don&apos;t see a test case for &quot;kPresent == false&quot;. Can you please add one if it is missing?


&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:514
&gt; +            String canonicalizedTag = canonicalizeLanguageTag(tag-&gt;value(exec));

Can you please add a test of an empty string for the tag?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125261</commentid>
    <comment_count>15</comment_count>
      <attachid>260983</attachid>
    <who name="Andy VanWagoner">andy</who>
    <bug_when>2015-09-11 14:44:17 -0700</bug_when>
    <thetext>Comment on attachment 260983
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=260983&amp;action=review

&gt;&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:192
&gt;&gt; +            return String();
&gt; 
&gt; Do you have test covering this case? I did not see it.

Invalid language tag: en-x takes this path.

&gt;&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:215
&gt;&gt; +    if (languageLength &lt; 2 || languageLength &gt; 8 || !language.isAllSpecialCharacters&lt;isASCIIAlpha&gt;())
&gt; 
&gt; I was very confused by this, I believed this to be wrong for a while, added some comments, then saw the &quot;languageLength &lt;= 3&quot; later.
&gt; 
&gt; I believe it could be clearer to:
&gt; 1) Add the full grammar with the 4-8 rules
&gt; 2) Maybe put &quot;languageLength &lt;= 3&quot; in a temporary earlier to clarify the &quot;language&quot;. Proposal:
&gt;     if (language &lt; 2)
&gt;         return String();
&gt;     bool languageCanBeISO639PlusExtlang = languageLength &lt;= 3;
&gt;     if (!languageCanBeISO639PlusExtlang &amp;&amp; languageLength &gt; 8 &amp;&amp; ...)
&gt;        return String()
&gt; 
&gt; What do you think?

Yeah, this can probably be made clearer.

&gt;&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:246
&gt;&gt; +            canonical.append(script.substring(1, 3).convertToASCIILowercase());
&gt; 
&gt; You are losing me there. Why do you remove the first character?

The first character was added capitalized, the rest added lowercased. Like Hans in zh-Hans-TW.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125380</commentid>
    <comment_count>16</comment_count>
      <attachid>261054</attachid>
    <who name="Andy VanWagoner">andy</who>
    <bug_when>2015-09-12 07:56:07 -0700</bug_when>
    <thetext>Created attachment 261054
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125385</commentid>
    <comment_count>17</comment_count>
      <attachid>261056</attachid>
    <who name="Andy VanWagoner">andy</who>
    <bug_when>2015-09-12 10:12:59 -0700</bug_when>
    <thetext>Created attachment 261056
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125879</commentid>
    <comment_count>18</comment_count>
      <attachid>261056</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-09-14 21:07:03 -0700</bug_when>
    <thetext>Comment on attachment 261056
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=261056&amp;action=review

Review in progress

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:247
&gt; +            canonical.append(toASCIIUpper(script[0]));

I am an idiot for missing that one :)

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:282
&gt; +        const String&amp; lowerVariant = variant.convertToASCIILowercase();

I am not a big fan of this feature of C++.

I think using &quot;String&quot; instead of &quot;const String&amp;&quot; makes it more explicit that the lifetime of the reference is scoped by lowerVariant.

You don&apos;t have to change that, just a comment.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:285
&gt; +        if (subtags.contains(lowerVariant))
&gt; +            return String();
&gt; +        subtags.add(lowerVariant);

You can use add(lowerVariant).isNewEntry to avoid a double lookup.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:310
&gt; +        if (subtags.contains(singleton))
&gt; +            return String();
&gt; +        subtags.add(singleton);

if (!subtags.add(singleton).isNewEntry)

To avoid a double-lookup.

&gt; Source/JavaScriptCore/runtime/IntlObject.cpp:365
&gt; +static String getGrandfatheredLangTag(const String&amp; locale)

note to self: resume review from here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125896</commentid>
    <comment_count>19</comment_count>
      <attachid>261056</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-09-14 22:41:43 -0700</bug_when>
    <thetext>Comment on attachment 261056
Patch

No more comment!

This patch is in great shape, let&apos;s land it!

Can you do the minor hash map update?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125956</commentid>
    <comment_count>20</comment_count>
      <attachid>261192</attachid>
    <who name="Andy VanWagoner">andy</who>
    <bug_when>2015-09-15 07:59:21 -0700</bug_when>
    <thetext>Created attachment 261192
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126024</commentid>
    <comment_count>21</comment_count>
      <attachid>261192</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-15 10:43:42 -0700</bug_when>
    <thetext>Comment on attachment 261192
Patch

Clearing flags on attachment: 261192

Committed r189811: &lt;http://trac.webkit.org/changeset/189811&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126025</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-15 10:43:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259338</attachid>
            <date>2015-08-18 18:42:03 -0700</date>
            <delta_ts>2015-08-19 11:34:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147599-20150818194159.patch</filename>
            <type>text/plain</type>
            <size>180530</size>
            <attacher name="Andy VanWagoner">andy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4NjE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
Nzc3ZDRhNzY2MmQ0MWZmMjNjMzg5M2NkNDM0NTczNjc0M2I3NDFhLi43OThmNzliZDBjNGVlYTNl
ODFkMGQ4Y2UxYzZmZGQ5M2YwYTFlMGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxNS0wOC0xOCAgQW5keSBWYW5XYWdvbmVyICA8dGhldGFsZWNyYWZ0ZXJA
Z21haWwuY29tPgorCisgICAgICAgIFtJTlRMXSBJbXBsZW1lbnQgc3VwcG9ydGVkTG9jYWxlc09m
IG9uIEludGwgQ29uc3RydWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDc1OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbXBsZW1lbnRzIGFsbCBvZiB0aGUgYWJzdHJhY3Qgb3BlcmF0aW9ucyB1
c2VkIGJ5IHN1cHBvcnRlZExvY2FsZXNPZiwgZXhjZXB0IGR1cmluZyBjYW5vbmljYWxpemF0aW9u
IGl0IGRvZXMgbm90IHJlcGxhY2UgcmVkdW5kYW50IHRhZ3MsIG9yIHN1YnRhZ3Mgd2l0aCB0aGVp
ciBwcmVmZXJyZWQgdmFsdWVzLgorCisgICAgICAgICogaWN1L3VuaWNvZGUvdWNhbC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBpY3UvdW5pY29kZS91ZGF0Lmg6IEFkZGVkLgorICAgICAgICAqIGljdS91
bmljb2RlL3VtaXNjLmg6IEFkZGVkLgorICAgICAgICAqIGljdS91bmljb2RlL3VudW0uaDogQWRk
ZWQuCisgICAgICAgICogaWN1L3VuaWNvZGUvdXR5cGVzLmg6IENsZWFyIHRoZSBVX1NIT1dfQ1BM
VVNQTFVTX0FQSSBmbGFnIHRvIHByZXZlbnQgQysrIGhlYWRlcnMgZnJvbSBiZWluZyBpbmNsdWRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6IEFkZGUgbG9jYWxlTWF0
Y2hlci4KKyAgICAgICAgKiBydW50aW1lL0ludGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6SW50bENvbGxhdG9yQ29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09m
KTogSW1wbGVtZW50ZWQuCisgICAgICAgICogcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25z
dHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9y
RnVuY1N1cHBvcnRlZExvY2FsZXNPZik6IEltcGxlbWVudGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJl
ckZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZik6IEltcGxlbWVudGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmNhbm9uaWNh
bGl6ZUxhbmd1YWdlVGFnKToKKyAgICAgICAgKEpTQzo6Z2V0Q2Fub25pY2FsTGFuZ1RhZyk6Cisg
ICAgICAgIChKU0M6OmdldFByaXZhdGVVc2VMYW5nVGFnKToKKyAgICAgICAgKEpTQzo6Z2V0R3Jh
bmRmYXRoZXJlZExhbmdUYWcpOgorICAgICAgICAoSlNDOjpkZWZhdWx0TG9jYWxlKToKKyAgICAg
ICAgKEpTQzo6Y2Fub25pY2FsaXplTG9jYWxlTGlzdCk6CisgICAgICAgIChKU0M6OmJlc3RBdmFp
bGFibGVMb2NhbGUpOgorICAgICAgICAoSlNDOjpsb29rdXBTdXBwb3J0ZWRMb2NhbGVzKToKKyAg
ICAgICAgKEpTQzo6YmVzdEZpdFN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAoSlNDOjpzdXBw
b3J0ZWRMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6Z2V0SW50bFN0cmluZ09wdGlvbik6CisgICAg
ICAgIChKU0M6OmdldEludGxCb29sZWFuT3B0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0ludGxP
YmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAg
KEpTQzo6SlNHbG9iYWxPYmplY3Q6OmludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMpOiBBZGRl
ZCBsYXp5IGxvY2FsZSBsaXN0LgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW50bERh
dGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcyk6IEFkZGVkIGxhenkgbG9jYWxlIGxpc3QuCisg
ICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjppbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9j
YWxlcyk6IEFkZGVkIGxhenkgbG9jYWxlIGxpc3QuCisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oOgorCiAyMDE1LTA4LTE4ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPgogCiAgICAgICAgIEludHJvZHVjZSBub24tdXNlci1vYnNlcnZhYmxlIFByb21pc2Ug
ZnVuY3Rpb25zIHRvIHVzZSBQcm9taXNlcyBpbnRlcm5hbGx5CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdWNhbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ljdS91bmljb2RlL3VjYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OTdhZjE1M2Q0MzliNGMxMzJkNGNmMGMx
ZTUxODIyNjk4YjM3YjE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ljdS91bmljb2RlL3VjYWwuaApAQCAtMCwwICsxLDEyODUgQEAKKy8qCisgKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTAsIEludGVybmF0aW9uYWwgQnVz
aW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kCisgKiBvdGhlcnMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgVUNBTF9ICisj
ZGVmaW5lIFVDQUxfSAorCisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKyNpbmNsdWRlICJ1
bmljb2RlL3VlbnVtLmgiCisjaW5jbHVkZSAidW5pY29kZS91bG9jLmgiCisjaW5jbHVkZSAidW5p
Y29kZS9sb2NhbHBvaW50ZXIuaCIKKworI2lmICFVQ09ORklHX05PX0ZPUk1BVFRJTkcKKworLyoq
CisgKiBcZmlsZQorICogXGJyaWVmIEMgQVBJOiBDYWxlbmRhcgorICoKKyAqIDxoMj5DYWxlbmRh
ciBDIEFQSTwvaDI+CisgKgorICogVUNhbGVuZGFyIEMgQVBJIGlzIHVzZWQgIGZvciBjb252ZXJ0
aW5nIGJldHdlZW4gYSA8Y29kZT5VRGF0ZTwvY29kZT4gb2JqZWN0CisgKiBhbmQgYSBzZXQgb2Yg
aW50ZWdlciBmaWVsZHMgc3VjaCBhcyA8Y29kZT5VQ0FMX1lFQVI8L2NvZGU+LCA8Y29kZT5VQ0FM
X01PTlRIPC9jb2RlPiwKKyAqIDxjb2RlPlVDQUxfREFZPC9jb2RlPiwgPGNvZGU+VUNBTF9IT1VS
PC9jb2RlPiwgYW5kIHNvIG9uLgorICogKEEgPGNvZGU+VURhdGU8L2NvZGU+IG9iamVjdCByZXBy
ZXNlbnRzIGEgc3BlY2lmaWMgaW5zdGFudCBpbgorICogdGltZSB3aXRoIG1pbGxpc2Vjb25kIHBy
ZWNpc2lvbi4gU2VlIFVEYXRlCisgKiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIDxjb2RlPlVE
YXRlPC9jb2RlPiAuKQorICoKKyAqIDxwPgorICogVHlwZXMgb2YgPGNvZGU+VUNhbGVuZGFyPC9j
b2RlPiBpbnRlcnByZXQgYSA8Y29kZT5VRGF0ZTwvY29kZT4KKyAqIGFjY29yZGluZyB0byB0aGUg
cnVsZXMgb2YgYSBzcGVjaWZpYyBjYWxlbmRhciBzeXN0ZW0uIFRoZSBVX1NUQUJMRQorICogcHJv
dmlkZXMgdGhlIGVudW0gVUNhbGVuZGFyVHlwZSB3aXRoIFVDQUxfVFJBRElUSU9OQUwgYW5kCisg
KiBVQ0FMX0dSRUdPUklBTi4KKyAqIDxwPgorICogTGlrZSBvdGhlciBsb2NhbGUtc2Vuc2l0aXZl
IEMgQVBJLCBjYWxlbmRhciBBUEkgIHByb3ZpZGVzIGEKKyAqIGZ1bmN0aW9uLCA8Y29kZT51Y2Fs
X29wZW4oKTwvY29kZT4sIHdoaWNoIHJldHVybnMgYSBwb2ludGVyIHRvCisgKiA8Y29kZT5VQ2Fs
ZW5kYXI8L2NvZGU+IHdob3NlIHRpbWUgZmllbGRzIGhhdmUgYmVlbiBpbml0aWFsaXplZAorICog
d2l0aCB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lLiBXZSBuZWVkIHRvIHNwZWNpZnkgdGhlIHR5
cGUgb2YKKyAqIGNhbGVuZGFyIHRvIGJlIG9wZW5lZCBhbmQgdGhlICB0aW1lem9uZUlkLgorICog
XGh0bWxvbmx5PGJsb2NrcXVvdGU+XGVuZGh0bWxvbmx5CisgKiA8cHJlPgorICogXGNvZGUKKyAq
IFVDYWxlbmRhciAqY2FsZGVmOworICogVUNoYXIgKnR6SWQ7CisgKiBVRXJyb3JDb2RlIHN0YXR1
czsKKyAqIHR6SWQ9KFVDaGFyKiltYWxsb2Moc2l6ZW9mKFVDaGFyKSAqIChzdHJsZW4oIlBTVCIp
ICsxKSApOworICogdV91YXN0cmNweSh0eklkLCAiUFNUIik7CisgKiBjYWxkZWY9dWNhbF9vcGVu
KHR6SUQsIHVfc3RybGVuKHR6SUQpLCBOVUxMLCBVQ0FMX1RSQURJVElPTkFMLCAmc3RhdHVzKTsK
KyAqIFxlbmRjb2RlCisgKiA8L3ByZT4KKyAqIFxodG1sb25seTwvYmxvY2txdW90ZT5cZW5kaHRt
bG9ubHkKKyAqCisgKiA8cD4KKyAqIEEgPGNvZGU+VUNhbGVuZGFyPC9jb2RlPiBvYmplY3QgY2Fu
IHByb2R1Y2UgYWxsIHRoZSB0aW1lIGZpZWxkIHZhbHVlcworICogbmVlZGVkIHRvIGltcGxlbWVu
dCB0aGUgZGF0ZS10aW1lIGZvcm1hdHRpbmcgZm9yIGEgcGFydGljdWxhciBsYW5ndWFnZQorICog
YW5kIGNhbGVuZGFyIHN0eWxlIChmb3IgZXhhbXBsZSwgSmFwYW5lc2UtR3JlZ29yaWFuLCBKYXBh
bmVzZS1UcmFkaXRpb25hbCkuCisgKgorICogPHA+CisgKiBXaGVuIGNvbXB1dGluZyBhIDxjb2Rl
PlVEYXRlPC9jb2RlPiBmcm9tIHRpbWUgZmllbGRzLCB0d28gc3BlY2lhbCBjaXJjdW1zdGFuY2Vz
CisgKiBtYXkgYXJpc2U6IHRoZXJlIG1heSBiZSBpbnN1ZmZpY2llbnQgaW5mb3JtYXRpb24gdG8g
Y29tcHV0ZSB0aGUKKyAqIDxjb2RlPlVEYXRlPC9jb2RlPiAoc3VjaCBhcyBvbmx5IHllYXIgYW5k
IG1vbnRoIGJ1dCBubyBkYXkgaW4gdGhlIG1vbnRoKSwKKyAqIG9yIHRoZXJlIG1heSBiZSBpbmNv
bnNpc3RlbnQgaW5mb3JtYXRpb24gKHN1Y2ggYXMgIlR1ZXNkYXksIEp1bHkgMTUsIDE5OTYiCisg
KiAtLSBKdWx5IDE1LCAxOTk2IGlzIGFjdHVhbGx5IGEgTW9uZGF5KS4KKyAqCisgKiA8cD4KKyAq
IDxzdHJvbmc+SW5zdWZmaWNpZW50IGluZm9ybWF0aW9uLjwvc3Ryb25nPiBUaGUgY2FsZW5kYXIg
d2lsbCB1c2UgZGVmYXVsdAorICogaW5mb3JtYXRpb24gdG8gc3BlY2lmeSB0aGUgbWlzc2luZyBm
aWVsZHMuIFRoaXMgbWF5IHZhcnkgYnkgY2FsZW5kYXI7IGZvcgorICogdGhlIEdyZWdvcmlhbiBj
YWxlbmRhciwgdGhlIGRlZmF1bHQgZm9yIGEgZmllbGQgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0
aGUKKyAqIHN0YXJ0IG9mIHRoZSBlcG9jaDogaS5lLiwgVUNBTF9ZRUFSID0gMTk3MCwgVUNBTF9N
T05USCA9IEpBTlVBUlksIFVDQUxfREFURSA9IDEsIGV0Yy4KKyAqCisgKiA8cD4KKyAqIDxzdHJv
bmc+SW5jb25zaXN0ZW50IGluZm9ybWF0aW9uLjwvc3Ryb25nPiBJZiBmaWVsZHMgY29uZmxpY3Qs
IHRoZSBjYWxlbmRhcgorICogd2lsbCBnaXZlIHByZWZlcmVuY2UgdG8gZmllbGRzIHNldCBtb3Jl
IHJlY2VudGx5LiBGb3IgZXhhbXBsZSwgd2hlbgorICogZGV0ZXJtaW5pbmcgdGhlIGRheSwgdGhl
IGNhbGVuZGFyIHdpbGwgbG9vayBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIGNvbWJpbmF0
aW9ucyBvZiBmaWVsZHMuICBUaGUgbW9zdCByZWNlbnQgY29tYmluYXRpb24sIGFzIGRldGVybWlu
ZWQgYnkgdGhlCisgKiBtb3N0IHJlY2VudGx5IHNldCBzaW5nbGUgZmllbGQsIHdpbGwgYmUgdXNl
ZC4KKyAqCisgKiBcaHRtbG9ubHk8YmxvY2txdW90ZT5cZW5kaHRtbG9ubHkKKyAqIDxwcmU+Cisg
KiBcY29kZQorICogVUNBTF9NT05USCArIFVDQUxfREFZX09GX01PTlRICisgKiBVQ0FMX01PTlRI
ICsgVUNBTF9XRUVLX09GX01PTlRIICsgVUNBTF9EQVlfT0ZfV0VFSworICogVUNBTF9NT05USCAr
IFVDQUxfREFZX09GX1dFRUtfSU5fTU9OVEggKyBVQ0FMX0RBWV9PRl9XRUVLCisgKiBVQ0FMX0RB
WV9PRl9ZRUFSCisgKiBVQ0FMX0RBWV9PRl9XRUVLICsgVUNBTF9XRUVLX09GX1lFQVIKKyAqIFxl
bmRjb2RlCisgKiA8L3ByZT4KKyAqIFxodG1sb25seTwvYmxvY2txdW90ZT5cZW5kaHRtbG9ubHkK
KyAqCisgKiBGb3IgdGhlIHRpbWUgb2YgZGF5OgorICoKKyAqIFxodG1sb25seTxibG9ja3F1b3Rl
PlxlbmRodG1sb25seQorICogPHByZT4KKyAqIFxjb2RlCisgKiBVQ0FMX0hPVVJfT0ZfREFZCisg
KiBVQ0FMX0FNX1BNICsgVUNBTF9IT1VSCisgKiBcZW5kY29kZQorICogPC9wcmU+CisgKiBcaHRt
bG9ubHk8L2Jsb2NrcXVvdGU+XGVuZGh0bWxvbmx5CisgKgorICogPHA+CisgKiA8c3Ryb25nPk5v
dGU6PC9zdHJvbmc+IGZvciBzb21lIG5vbi1HcmVnb3JpYW4gY2FsZW5kYXJzLCBkaWZmZXJlbnQK
KyAqIGZpZWxkcyBtYXkgYmUgbmVjZXNzYXJ5IGZvciBjb21wbGV0ZSBkaXNhbWJpZ3VhdGlvbi4g
Rm9yIGV4YW1wbGUsIGEgZnVsbAorICogc3BlY2lmaWNhdGlvbiBvZiB0aGUgaGlzdG9yaWFsIEFy
YWJpYyBhc3Ryb25vbWljYWwgY2FsZW5kYXIgcmVxdWlyZXMgeWVhciwKKyAqIG1vbnRoLCBkYXkt
b2YtbW9udGggPGVtPmFuZDwvZW0+IGRheS1vZi13ZWVrIGluIHNvbWUgY2FzZXMuCisgKgorICog
PHA+CisgKiA8c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRoZXJlIGFyZSBjZXJ0YWluIHBvc3NpYmxl
IGFtYmlndWl0aWVzIGluCisgKiBpbnRlcnByZXRhdGlvbiBvZiBjZXJ0YWluIHNpbmd1bGFyIHRp
bWVzLCB3aGljaCBhcmUgcmVzb2x2ZWQgaW4gdGhlCisgKiBmb2xsb3dpbmcgd2F5czoKKyAqIDxv
bD4KKyAqICAgICA8bGk+IDI0OjAwOjAwICJiZWxvbmdzIiB0byB0aGUgZm9sbG93aW5nIGRheS4g
VGhhdCBpcywKKyAqICAgICAgICAgIDIzOjU5IG9uIERlYyAzMSwgMTk2OSAmbHQ7IDI0OjAwIG9u
IEphbiAxLCAxOTcwICZsdDsgMjQ6MDE6MDAgb24gSmFuIDEsIDE5NzAKKyAqCisgKiAgICAgPGxp
PiBBbHRob3VnaCBoaXN0b3JpY2FsbHkgbm90IHByZWNpc2UsIG1pZG5pZ2h0IGFsc28gYmVsb25n
cyB0byAiYW0iLAorICogICAgICAgICAgYW5kIG5vb24gYmVsb25ncyB0byAicG0iLCBzbyBvbiB0
aGUgc2FtZSBkYXksCisgKiAgICAgICAgICAxMjowMCBhbSAobWlkbmlnaHQpICZsdDsgMTI6MDEg
YW0sIGFuZCAxMjowMCBwbSAobm9vbikgJmx0OyAxMjowMSBwbQorICogPC9vbD4KKyAqCisgKiA8
cD4KKyAqIFRoZSBkYXRlIG9yIHRpbWUgZm9ybWF0IHN0cmluZ3MgYXJlIG5vdCBwYXJ0IG9mIHRo
ZSBkZWZpbml0aW9uIG9mIGEKKyAqIGNhbGVuZGFyLCBhcyB0aG9zZSBtdXN0IGJlIG1vZGlmaWFi
bGUgb3Igb3ZlcnJpZGFibGUgYnkgdGhlIHVzZXIgYXQKKyAqIHJ1bnRpbWUuIFVzZSB7QGxpbmsg
RGF0ZUZvcm1hdH0KKyAqIHRvIGZvcm1hdCBkYXRlcy4KKyAqCisgKiA8cD4KKyAqIDxjb2RlPkNh
bGVuZGFyPC9jb2RlPiBwcm92aWRlcyBhbiBBUEkgZm9yIGZpZWxkICJyb2xsaW5nIiwgd2hlcmUg
ZmllbGRzCisgKiBjYW4gYmUgaW5jcmVtZW50ZWQgb3IgZGVjcmVtZW50ZWQsIGJ1dCB3cmFwIGFy
b3VuZC4gRm9yIGV4YW1wbGUsIHJvbGxpbmcgdGhlCisgKiBtb250aCB1cCBpbiB0aGUgZGF0ZSA8
Y29kZT5EZWNlbWJlciAxMiwgPGI+MTk5NjwvYj48L2NvZGU+IHJlc3VsdHMgaW4KKyAqIDxjb2Rl
PkphbnVhcnkgMTIsIDxiPjE5OTY8L2I+PC9jb2RlPi4KKyAqCisgKiA8cD4KKyAqIDxjb2RlPkNh
bGVuZGFyPC9jb2RlPiBhbHNvIHByb3ZpZGVzIGEgZGF0ZSBhcml0aG1ldGljIGZ1bmN0aW9uIGZv
cgorICogYWRkaW5nIHRoZSBzcGVjaWZpZWQgKHNpZ25lZCkgYW1vdW50IG9mIHRpbWUgdG8gYSBw
YXJ0aWN1bGFyIHRpbWUgZmllbGQuCisgKiBGb3IgZXhhbXBsZSwgc3VidHJhY3RpbmcgNSBkYXlz
IGZyb20gdGhlIGRhdGUgPGNvZGU+U2VwdGVtYmVyIDEyLCAxOTk2PC9jb2RlPgorICogcmVzdWx0
cyBpbiA8Y29kZT5TZXB0ZW1iZXIgNywgMTk5NjwvY29kZT4uCisgKgorICogQHN0YWJsZSBJQ1Ug
Mi4wCisgKi8KKworLyoqIEEgY2FsZW5kYXIuCisgKiAgRm9yIHVzYWdlIGluIEMgcHJvZ3JhbXMu
CisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLwordHlwZWRlZiB2b2lkKiBVQ2FsZW5kYXI7CisKKy8q
KiBQb3NzaWJsZSB0eXBlcyBvZiBVQ2FsZW5kYXJzIAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8K
K2VudW0gVUNhbGVuZGFyVHlwZSB7CisgIC8qKgorICAgKiBEZXNwaXRlIHRoZSBuYW1lLCBVQ0FM
X1RSQURJVElPTkFMIGRlc2lnbmF0ZXMgdGhlIGxvY2FsZSdzIGRlZmF1bHQgY2FsZW5kYXIsCisg
ICAqIHdoaWNoIG1heSBiZSB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyIG9yIHNvbWUgb3RoZXIgY2Fs
ZW5kYXIuCisgICAqIEBzdGFibGUgSUNVIDIuMAorICAgKi8KKyAgVUNBTF9UUkFESVRJT05BTCwK
KyAgLyoqCisgICAqIEEgYmV0dGVyIG5hbWUgZm9yIFVDQUxfVFJBRElUSU9OQUwuCisgICAqIEBz
dGFibGUgSUNVIDQuMgorICAgKi8KKyAgVUNBTF9ERUZBVUxUID0gVUNBTF9UUkFESVRJT05BTCwK
KyAgLyoqCisgICAqIFVuYW1iaWd1b3VzbHkgZGVzaWduYXRlcyB0aGUgR3JlZ29yaWFuIGNhbGVu
ZGFyIGZvciB0aGUgbG9jYWxlLgorICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICovCisgIFVDQUxf
R1JFR09SSUFOCit9OworCisvKiogQHN0YWJsZSBJQ1UgMi4wICovCit0eXBlZGVmIGVudW0gVUNh
bGVuZGFyVHlwZSBVQ2FsZW5kYXJUeXBlOworCisvKiogUG9zc2libGUgZmllbGRzIGluIGEgVUNh
bGVuZGFyIAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK2VudW0gVUNhbGVuZGFyRGF0ZUZpZWxk
cyB7CisgIC8qKiAKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlIGVyYSwgZS5nLiwg
QUQgb3IgQkMgaW4gdGhlIEdyZWdvcmlhbiAoSnVsaWFuKSBjYWxlbmRhci4gCisgICAqIFRoaXMg
aXMgYSBjYWxlbmRhci1zcGVjaWZpYyB2YWx1ZS4KKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAg
Ki8KKyAgVUNBTF9FUkEsCisKKyAgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRo
ZSB5ZWFyLiBUaGlzIGlzIGEgY2FsZW5kYXItc3BlY2lmaWMgdmFsdWUuCisgICAqIEBzdGFibGUg
SUNVIDIuNiAKKyAgICovCisgIFVDQUxfWUVBUiwKKworICAvKioKKyAgICogRmllbGQgbnVtYmVy
IGluZGljYXRpbmcgdGhlIG1vbnRoLiBUaGlzIGlzIGEgY2FsZW5kYXItc3BlY2lmaWMgdmFsdWUu
IAorICAgKiBUaGUgZmlyc3QgbW9udGggb2YgdGhlIHllYXIgaXMKKyAgICogPGNvZGU+SkFOVUFS
WTwvY29kZT47IHRoZSBsYXN0IGRlcGVuZHMgb24gdGhlIG51bWJlciBvZiBtb250aHMgaW4gYSB5
ZWFyLgorICAgKiBAc2VlICNVQ0FMX0pBTlVBUlkKKyAgICogQHNlZSAjVUNBTF9GRUJSVUFSWQor
ICAgKiBAc2VlICNVQ0FMX01BUkNICisgICAqIEBzZWUgI1VDQUxfQVBSSUwKKyAgICogQHNlZSAj
VUNBTF9NQVkKKyAgICogQHNlZSAjVUNBTF9KVU5FCisgICAqIEBzZWUgI1VDQUxfSlVMWQorICAg
KiBAc2VlICNVQ0FMX0FVR1VTVAorICAgKiBAc2VlICNVQ0FMX1NFUFRFTUJFUgorICAgKiBAc2Vl
ICNVQ0FMX09DVE9CRVIKKyAgICogQHNlZSAjVUNBTF9OT1ZFTUJFUgorICAgKiBAc2VlICNVQ0FM
X0RFQ0VNQkVSCisgICAqIEBzZWUgI1VDQUxfVU5ERUNJTUJFUgorICAgKiBAc3RhYmxlIElDVSAy
LjYgCisgICAqLworICBVQ0FMX01PTlRILAorCisgIC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5k
aWNhdGluZyB0aGUKKyAgICogd2VlayBudW1iZXIgd2l0aGluIHRoZSBjdXJyZW50IHllYXIuICBU
aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhciwgYXMKKyAgICogZGVmaW5lZCBieSA8Y29kZT5VQ0FM
X0ZJUlNUX0RBWV9PRl9XRUVLPC9jb2RlPiBhbmQgPGNvZGU+VUNBTF9NSU5JTUFMX0RBWVNfSU5f
RklSU1RfV0VFSzwvY29kZT4KKyAgICogYXR0cmlidXRlcywgaGFzIHZhbHVlIDEuICBTdWJjbGFz
c2VzIGRlZmluZQorICAgKiB0aGUgdmFsdWUgb2YgPGNvZGU+VUNBTF9XRUVLX09GX1lFQVI8L2Nv
ZGU+IGZvciBkYXlzIGJlZm9yZSB0aGUgZmlyc3Qgd2VlayBvZgorICAgKiB0aGUgeWVhci4KKyAg
ICogQHNlZSB1Y2FsX2dldEF0dHJpYnV0ZQorICAgKiBAc2VlIHVjYWxfc2V0QXR0cmlidXRlCisg
ICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfV0VFS19PRl9ZRUFSLAorCisgLyoq
CisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZQorICAgKiB3ZWVrIG51bWJlciB3aXRo
aW4gdGhlIGN1cnJlbnQgbW9udGguICBUaGUgZmlyc3Qgd2VlayBvZiB0aGUgbW9udGgsIGFzCisg
ICAqIGRlZmluZWQgYnkgPGNvZGU+VUNBTF9GSVJTVF9EQVlfT0ZfV0VFSzwvY29kZT4gYW5kIDxj
b2RlPlVDQUxfTUlOSU1BTF9EQVlTX0lOX0ZJUlNUX1dFRUs8L2NvZGU+CisgICAqIGF0dHJpYnV0
ZXMsIGhhcyB2YWx1ZSAxLiAgU3ViY2xhc3NlcyBkZWZpbmUKKyAgICogdGhlIHZhbHVlIG9mIDxj
b2RlPldFRUtfT0ZfTU9OVEg8L2NvZGU+IGZvciBkYXlzIGJlZm9yZSB0aGUgZmlyc3Qgd2VlayBv
ZgorICAgKiB0aGUgbW9udGguCisgICAqIEBzZWUgdWNhbF9nZXRBdHRyaWJ1dGUKKyAgICogQHNl
ZSB1Y2FsX3NldEF0dHJpYnV0ZQorICAgKiBAc2VlICNVQ0FMX0ZJUlNUX0RBWV9PRl9XRUVLCisg
ICAqIEBzZWUgI1VDQUxfTUlOSU1BTF9EQVlTX0lOX0ZJUlNUX1dFRUsKKyAgICogQHN0YWJsZSBJ
Q1UgMi42IAorICAgKi8KKyAgVUNBTF9XRUVLX09GX01PTlRILAorCisgLyoqCisgICAqIEZpZWxk
IG51bWJlciBpbmRpY2F0aW5nIHRoZQorICAgKiBkYXkgb2YgdGhlIG1vbnRoLiBUaGlzIGlzIGEg
c3lub255bSBmb3IgPGNvZGU+REFZX09GX01PTlRIPC9jb2RlPi4KKyAgICogVGhlIGZpcnN0IGRh
eSBvZiB0aGUgbW9udGggaGFzIHZhbHVlIDEuCisgICAqIEBzZWUgI1VDQUxfREFZX09GX01PTlRI
CisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfREFURSwKKworIC8qKgorICAg
KiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUgZGF5CisgICAqIG51bWJlciB3aXRoaW4gdGhl
IGN1cnJlbnQgeWVhci4gIFRoZSBmaXJzdCBkYXkgb2YgdGhlIHllYXIgaGFzIHZhbHVlIDEuCisg
ICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfREFZX09GX1lFQVIsCisKKyAvKioK
KyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlIGRheQorICAgKiBvZiB0aGUgd2Vlay4g
IFRoaXMgZmllbGQgdGFrZXMgdmFsdWVzIDxjb2RlPlNVTkRBWTwvY29kZT4sCisgICAqIDxjb2Rl
Pk1PTkRBWTwvY29kZT4sIDxjb2RlPlRVRVNEQVk8L2NvZGU+LCA8Y29kZT5XRURORVNEQVk8L2Nv
ZGU+LAorICAgKiA8Y29kZT5USFVSU0RBWTwvY29kZT4sIDxjb2RlPkZSSURBWTwvY29kZT4sIGFu
ZCA8Y29kZT5TQVRVUkRBWTwvY29kZT4uCisgICAqIEBzZWUgI1VDQUxfU1VOREFZCisgICAqIEBz
ZWUgI1VDQUxfTU9OREFZCisgICAqIEBzZWUgI1VDQUxfVFVFU0RBWQorICAgKiBAc2VlICNVQ0FM
X1dFRE5FU0RBWQorICAgKiBAc2VlICNVQ0FMX1RIVVJTREFZCisgICAqIEBzZWUgI1VDQUxfRlJJ
REFZCisgICAqIEBzZWUgI1VDQUxfU0FUVVJEQVkKKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAg
Ki8KKyAgVUNBTF9EQVlfT0ZfV0VFSywKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNh
dGluZyB0aGUKKyAgICogb3JkaW5hbCBudW1iZXIgb2YgdGhlIGRheSBvZiB0aGUgd2VlayB3aXRo
aW4gdGhlIGN1cnJlbnQgbW9udGguIFRvZ2V0aGVyCisgICAqIHdpdGggdGhlIDxjb2RlPkRBWV9P
Rl9XRUVLPC9jb2RlPiBmaWVsZCwgdGhpcyB1bmlxdWVseSBzcGVjaWZpZXMgYSBkYXkKKyAgICog
d2l0aGluIGEgbW9udGguICBVbmxpa2UgPGNvZGU+V0VFS19PRl9NT05USDwvY29kZT4gYW5kCisg
ICAqIDxjb2RlPldFRUtfT0ZfWUVBUjwvY29kZT4sIHRoaXMgZmllbGQncyB2YWx1ZSBkb2VzIDxl
bT5ub3Q8L2VtPiBkZXBlbmQgb24KKyAgICogPGNvZGU+Z2V0Rmlyc3REYXlPZldlZWsoKTwvY29k
ZT4gb3IKKyAgICogPGNvZGU+Z2V0TWluaW1hbERheXNJbkZpcnN0V2VlaygpPC9jb2RlPi4gIDxj
b2RlPkRBWV9PRl9NT05USCAxPC9jb2RlPgorICAgKiB0aHJvdWdoIDxjb2RlPjc8L2NvZGU+IGFs
d2F5cyBjb3JyZXNwb25kIHRvIDxjb2RlPkRBWV9PRl9XRUVLX0lOX01PTlRICisgICAqIDE8L2Nv
ZGU+OyA8Y29kZT44PC9jb2RlPiB0aHJvdWdoIDxjb2RlPjE1PC9jb2RlPiBjb3JyZXNwb25kIHRv
CisgICAqIDxjb2RlPkRBWV9PRl9XRUVLX0lOX01PTlRIIDI8L2NvZGU+LCBhbmQgc28gb24uCisg
ICAqIDxjb2RlPkRBWV9PRl9XRUVLX0lOX01PTlRIIDA8L2NvZGU+IGluZGljYXRlcyB0aGUgd2Vl
ayBiZWZvcmUKKyAgICogPGNvZGU+REFZX09GX1dFRUtfSU5fTU9OVEggMTwvY29kZT4uICBOZWdh
dGl2ZSB2YWx1ZXMgY291bnQgYmFjayBmcm9tIHRoZQorICAgKiBlbmQgb2YgdGhlIG1vbnRoLCBz
byB0aGUgbGFzdCBTdW5kYXkgb2YgYSBtb250aCBpcyBzcGVjaWZpZWQgYXMKKyAgICogPGNvZGU+
REFZX09GX1dFRUsgPSBTVU5EQVksIERBWV9PRl9XRUVLX0lOX01PTlRIID0gLTE8L2NvZGU+LiAg
QmVjYXVzZQorICAgKiBuZWdhdGl2ZSB2YWx1ZXMgY291bnQgYmFja3dhcmQgdGhleSB3aWxsIHVz
dWFsbHkgYmUgYWxpZ25lZCBkaWZmZXJlbnRseQorICAgKiB3aXRoaW4gdGhlIG1vbnRoIHRoYW4g
cG9zaXRpdmUgdmFsdWVzLiAgRm9yIGV4YW1wbGUsIGlmIGEgbW9udGggaGFzIDMxCisgICAqIGRh
eXMsIDxjb2RlPkRBWV9PRl9XRUVLX0lOX01PTlRIIC0xPC9jb2RlPiB3aWxsIG92ZXJsYXAKKyAg
ICogPGNvZGU+REFZX09GX1dFRUtfSU5fTU9OVEggNTwvY29kZT4gYW5kIHRoZSBlbmQgb2YgPGNv
ZGU+NDwvY29kZT4uCisgICAqIEBzZWUgI1VDQUxfREFZX09GX1dFRUsKKyAgICogQHNlZSAjVUNB
TF9XRUVLX09GX01PTlRICisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfREFZ
X09GX1dFRUtfSU5fTU9OVEgsCisKKyAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcK
KyAgICogd2hldGhlciB0aGUgPGNvZGU+SE9VUjwvY29kZT4gaXMgYmVmb3JlIG9yIGFmdGVyIG5v
b24uCisgICAqIEUuZy4sIGF0IDEwOjA0OjE1LjI1MCBQTSB0aGUgPGNvZGU+QU1fUE08L2NvZGU+
IGlzIDxjb2RlPlBNPC9jb2RlPi4KKyAgICogQHNlZSAjVUNBTF9BTQorICAgKiBAc2VlICNVQ0FM
X1BNCisgICAqIEBzZWUgI1VDQUxfSE9VUgorICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAqLwor
ICBVQ0FMX0FNX1BNLAorCisgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZQor
ICAgKiBob3VyIG9mIHRoZSBtb3JuaW5nIG9yIGFmdGVybm9vbi4gPGNvZGU+SE9VUjwvY29kZT4g
aXMgdXNlZCBmb3IgdGhlIDEyLWhvdXIKKyAgICogY2xvY2suCisgICAqIEUuZy4sIGF0IDEwOjA0
OjE1LjI1MCBQTSB0aGUgPGNvZGU+SE9VUjwvY29kZT4gaXMgMTAuCisgICAqIEBzZWUgI1VDQUxf
QU1fUE0KKyAgICogQHNlZSAjVUNBTF9IT1VSX09GX0RBWQorICAgKiBAc3RhYmxlIElDVSAyLjYg
CisgICAqLworICBVQ0FMX0hPVVIsCisKKyAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRp
bmcgdGhlCisgICAqIGhvdXIgb2YgdGhlIGRheS4gPGNvZGU+SE9VUl9PRl9EQVk8L2NvZGU+IGlz
IHVzZWQgZm9yIHRoZSAyNC1ob3VyIGNsb2NrLgorICAgKiBFLmcuLCBhdCAxMDowNDoxNS4yNTAg
UE0gdGhlIDxjb2RlPkhPVVJfT0ZfREFZPC9jb2RlPiBpcyAyMi4KKyAgICogQHNlZSAjVUNBTF9I
T1VSCisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfSE9VUl9PRl9EQVksCisK
KyAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIG1pbnV0ZSB3aXRo
aW4gdGhlIGhvdXIuCisgICAqIEUuZy4sIGF0IDEwOjA0OjE1LjI1MCBQTSB0aGUgPGNvZGU+VUNB
TF9NSU5VVEU8L2NvZGU+IGlzIDQuCisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVD
QUxfTUlOVVRFLAorCisgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZQorICAg
KiBzZWNvbmQgd2l0aGluIHRoZSBtaW51dGUuCisgICAqIEUuZy4sIGF0IDEwOjA0OjE1LjI1MCBQ
TSB0aGUgPGNvZGU+VUNBTF9TRUNPTkQ8L2NvZGU+IGlzIDE1LgorICAgKiBAc3RhYmxlIElDVSAy
LjYgCisgICAqLworICBVQ0FMX1NFQ09ORCwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5k
aWNhdGluZyB0aGUKKyAgICogbWlsbGlzZWNvbmQgd2l0aGluIHRoZSBzZWNvbmQuCisgICAqIEUu
Zy4sIGF0IDEwOjA0OjE1LjI1MCBQTSB0aGUgPGNvZGU+VUNBTF9NSUxMSVNFQ09ORDwvY29kZT4g
aXMgMjUwLgorICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAqLworICBVQ0FMX01JTExJU0VDT05E
LAorCisgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZQorICAgKiByYXcgb2Zm
c2V0IGZyb20gR01UIGluIG1pbGxpc2Vjb25kcy4KKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAg
Ki8KKyAgVUNBTF9aT05FX09GRlNFVCwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNh
dGluZyB0aGUKKyAgICogZGF5bGlnaHQgc2F2aW5ncyBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzLgor
ICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAqLworICBVQ0FMX0RTVF9PRkZTRVQsCisgIAorIC8q
KgorICAgKiBGaWVsZCBudW1iZXIgCisgICAqIGluZGljYXRpbmcgdGhlIGV4dGVuZGVkIHllYXIg
Y29ycmVzcG9uZGluZyB0byB0aGUKKyAgICogPGNvZGU+VUNBTF9XRUVLX09GX1lFQVI8L2NvZGU+
IGZpZWxkLiAgVGhpcyBtYXkgYmUgb25lIGdyZWF0ZXIgb3IgbGVzcworICAgKiB0aGFuIHRoZSB2
YWx1ZSBvZiA8Y29kZT5VQ0FMX0VYVEVOREVEX1lFQVI8L2NvZGU+LgorICAgKiBAc3RhYmxlIElD
VSAyLjYKKyAgICovCisgIFVDQUxfWUVBUl9XT1ksCisKKyAvKioKKyAgICogRmllbGQgbnVtYmVy
IAorICAgKiBpbmRpY2F0aW5nIHRoZSBsb2NhbGl6ZWQgZGF5IG9mIHdlZWsuICBUaGlzIHdpbGwg
YmUgYSB2YWx1ZSBmcm9tIDEKKyAgICogdG8gNyBpbmNsdXNpdmUsIHdpdGggMSBiZWluZyB0aGUg
bG9jYWxpemVkIGZpcnN0IGRheSBvZiB0aGUgd2Vlay4KKyAgICogQHN0YWJsZSBJQ1UgMi42Cisg
ICAqLworICBVQ0FMX0RPV19MT0NBTCwKKworICAvKioKKyAgICogWWVhciBvZiB0aGlzIGNhbGVu
ZGFyIHN5c3RlbSwgZW5jb21wYXNzaW5nIGFsbCBzdXByYS15ZWFyIGZpZWxkcy4gRm9yIGV4YW1w
bGUsIAorICAgKiBpbiBHcmVnb3JpYW4vSnVsaWFuIGNhbGVuZGFycywgcG9zaXRpdmUgRXh0ZW5k
ZWQgWWVhciB2YWx1ZXMgaW5kaWNhdGUgeWVhcnMgQUQsCisgICAqICAxIEJDID0gMCBleHRlbmRl
ZCwgMiBCQyA9IC0xIGV4dGVuZGVkLCBhbmQgc28gb24uIAorICAgKiBAc3RhYmxlIElDVSAyLjgg
CisgICAqLworICBVQ0FMX0VYVEVOREVEX1lFQVIsCisKKyAvKioKKyAgICogRmllbGQgbnVtYmVy
IAorICAgKiBpbmRpY2F0aW5nIHRoZSBtb2RpZmllZCBKdWxpYW4gZGF5IG51bWJlci4gIFRoaXMg
aXMgZGlmZmVyZW50IGZyb20KKyAgICogdGhlIGNvbnZlbnRpb25hbCBKdWxpYW4gZGF5IG51bWJl
ciBpbiB0d28gcmVnYXJkcy4gIEZpcnN0LCBpdAorICAgKiBkZW1hcmNhdGVzIGRheXMgYXQgbG9j
YWwgem9uZSBtaWRuaWdodCwgcmF0aGVyIHRoYW4gbm9vbiBHTVQuCisgICAqIFNlY29uZCwgaXQg
aXMgYSBsb2NhbCBudW1iZXI7IHRoYXQgaXMsIGl0IGRlcGVuZHMgb24gdGhlIGxvY2FsIHRpbWUK
KyAgICogem9uZS4gIEl0IGNhbiBiZSB0aG91Z2h0IG9mIGFzIGEgc2luZ2xlIG51bWJlciB0aGF0
IGVuY29tcGFzc2VzIGFsbAorICAgKiB0aGUgZGF0ZS1yZWxhdGVkIGZpZWxkcy4KKyAgICogQHN0
YWJsZSBJQ1UgMi44CisgICAqLworICBVQ0FMX0pVTElBTl9EQVksIAorCisgIC8qKgorICAgKiBS
YW5nZXMgZnJvbSAwIHRvIDIzOjU5OjU5Ljk5OSAocmVnYXJkbGVzcyBvZiBEU1QpLiAgVGhpcyBm
aWVsZCBiZWhhdmVzIDxlbT5leGFjdGx5PC9lbT4gCisgICAqIGxpa2UgYSBjb21wb3NpdGUgb2Yg
YWxsIHRpbWUtcmVsYXRlZCBmaWVsZHMsIG5vdCBpbmNsdWRpbmcgdGhlIHpvbmUgZmllbGRzLiAg
QXMgc3VjaCwgCisgICAqIGl0IGFsc28gcmVmbGVjdHMgZGlzY29udGludWl0aWVzIG9mIHRob3Nl
IGZpZWxkcyBvbiBEU1QgdHJhbnNpdGlvbiBkYXlzLiAgT24gYSBkYXkKKyAgICogb2YgRFNUIG9u
c2V0LCBpdCB3aWxsIGp1bXAgZm9yd2FyZC4gIE9uIGEgZGF5IG9mIERTVCBjZXNzYXRpb24sIGl0
IHdpbGwganVtcCAKKyAgICogYmFja3dhcmQuICBUaGlzIHJlZmxlY3RzIHRoZSBmYWN0IHRoYXQg
aXQgbXVzdCBiZSBjb21iaW5lZCB3aXRoIHRoZSBEU1RfT0ZGU0VUIGZpZWxkCisgICAqIHRvIG9i
dGFpbiBhIHVuaXF1ZSBsb2NhbCB0aW1lIHZhbHVlLgorICAgKiBAc3RhYmxlIElDVSAyLjgKKyAg
ICovCisgIFVDQUxfTUlMTElTRUNPTkRTX0lOX0RBWSwKKworICAvKioKKyAgICogV2hldGhlciBv
ciBub3QgdGhlIGN1cnJlbnQgbW9udGggaXMgYSBsZWFwIG1vbnRoICgwIG9yIDEpLiBTZWUgdGhl
IENoaW5lc2UgY2FsZW5kYXIgZm9yCisgICAqIGFuIGV4YW1wbGUgb2YgdGhpcy4KKyAgICovCisg
IFVDQUxfSVNfTEVBUF9NT05USCwKKyAgCisgIC8qKgorICAgKiBGaWVsZCBjb3VudAorICAgKiBA
c3RhYmxlIElDVSAyLjYKKyAgICovCisgIFVDQUxfRklFTERfQ09VTlQsCisKKyAvKioKKyAgICog
RmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIGRheSBvZiB0aGUgbW9udGguIFRoaXMg
aXMgYSBzeW5vbnltIGZvciA8Y29kZT5VQ0FMX0RBVEU8L2NvZGU+LgorICAgKiBUaGUgZmlyc3Qg
ZGF5IG9mIHRoZSBtb250aCBoYXMgdmFsdWUgMS4KKyAgICogQHNlZSAjVUNBTF9EQVRFCisgICAq
IFN5bm9ueW0gZm9yIFVDQUxfREFURQorICAgKiBAc3RhYmxlIElDVSAyLjgKKyAgICoqLworICBV
Q0FMX0RBWV9PRl9NT05USD1VQ0FMX0RBVEUKK307CisKKy8qKiBAc3RhYmxlIElDVSAyLjAgKi8K
K3R5cGVkZWYgZW51bSBVQ2FsZW5kYXJEYXRlRmllbGRzIFVDYWxlbmRhckRhdGVGaWVsZHM7Cisg
ICAgLyoqCisgICAgICogVXNlZnVsIGNvbnN0YW50IGZvciBkYXlzIG9mIHdlZWsuIE5vdGU6IENh
bGVuZGFyIGRheS1vZi13ZWVrIGlzIDEtYmFzZWQuIENsaWVudHMKKyAgICAgKiB3aG8gY3JlYXRl
IGxvY2FsZSByZXNvdXJjZXMgZm9yIHRoZSBmaWVsZCBvZiBmaXJzdC1kYXktb2Ytd2VlayBzaG91
bGQgYmUgYXdhcmUgb2YKKyAgICAgKiB0aGlzLiBGb3IgaW5zdGFuY2UsIGluIFVTIGxvY2FsZSwg
Zmlyc3QtZGF5LW9mLXdlZWsgaXMgc2V0IHRvIDEsIGkuZS4sIFVDQUxfU1VOREFZLgorICAgICAq
LworLyoqIFBvc3NpYmxlIGRheXMgb2YgdGhlIHdlZWsgaW4gYSBVQ2FsZW5kYXIgCisgKiBAc3Rh
YmxlIElDVSAyLjAKKyAqLworZW51bSBVQ2FsZW5kYXJEYXlzT2ZXZWVrIHsKKyAgLyoqIFN1bmRh
eSAqLworICBVQ0FMX1NVTkRBWSA9IDEsCisgIC8qKiBNb25kYXkgKi8KKyAgVUNBTF9NT05EQVks
CisgIC8qKiBUdWVzZGF5ICovCisgIFVDQUxfVFVFU0RBWSwKKyAgLyoqIFdlZG5lc2RheSAqLwor
ICBVQ0FMX1dFRE5FU0RBWSwKKyAgLyoqIFRodXJzZGF5ICovCisgIFVDQUxfVEhVUlNEQVksCisg
IC8qKiBGcmlkYXkgKi8KKyAgVUNBTF9GUklEQVksCisgIC8qKiBTYXR1cmRheSAqLworICBVQ0FM
X1NBVFVSREFZCit9OworCisvKiogQHN0YWJsZSBJQ1UgMi4wICovCit0eXBlZGVmIGVudW0gVUNh
bGVuZGFyRGF5c09mV2VlayBVQ2FsZW5kYXJEYXlzT2ZXZWVrOworCisvKiogUG9zc2libGUgbW9u
dGhzIGluIGEgVUNhbGVuZGFyLiBOb3RlOiBDYWxlbmRhciBtb250aCBpcyAwLWJhc2VkLgorICog
QHN0YWJsZSBJQ1UgMi4wCisgKi8KK2VudW0gVUNhbGVuZGFyTW9udGhzIHsKKyAgLyoqIEphbnVh
cnkgKi8KKyAgVUNBTF9KQU5VQVJZLAorICAvKiogRmVicnVhcnkgKi8KKyAgVUNBTF9GRUJSVUFS
WSwKKyAgLyoqIE1hcmNoICovCisgIFVDQUxfTUFSQ0gsCisgIC8qKiBBcHJpbCAqLworICBVQ0FM
X0FQUklMLAorICAvKiogTWF5ICovCisgIFVDQUxfTUFZLAorICAvKiogSnVuZSAqLworICBVQ0FM
X0pVTkUsCisgIC8qKiBKdWx5ICovCisgIFVDQUxfSlVMWSwKKyAgLyoqIEF1Z3VzdCAqLworICBV
Q0FMX0FVR1VTVCwKKyAgLyoqIFNlcHRlbWJlciAqLworICBVQ0FMX1NFUFRFTUJFUiwKKyAgLyoq
IE9jdG9iZXIgKi8KKyAgVUNBTF9PQ1RPQkVSLAorICAvKiogTm92ZW1iZXIgKi8KKyAgVUNBTF9O
T1ZFTUJFUiwKKyAgLyoqIERlY2VtYmVyICovCisgIFVDQUxfREVDRU1CRVIsCisgIC8qKiBWYWx1
ZSBvZiB0aGUgPGNvZGU+VUNBTF9NT05USDwvY29kZT4gZmllbGQgaW5kaWNhdGluZyB0aGUKKyAg
ICAqIHRoaXJ0ZWVudGggbW9udGggb2YgdGhlIHllYXIuIEFsdGhvdWdoIHRoZSBHcmVnb3JpYW4g
Y2FsZW5kYXIKKyAgICAqIGRvZXMgbm90IHVzZSB0aGlzIHZhbHVlLCBsdW5hciBjYWxlbmRhcnMg
ZG8uCisgICAgKi8KKyAgVUNBTF9VTkRFQ0lNQkVSCit9OworCisvKiogQHN0YWJsZSBJQ1UgMi4w
ICovCit0eXBlZGVmIGVudW0gVUNhbGVuZGFyTW9udGhzIFVDYWxlbmRhck1vbnRoczsKKworLyoq
IFBvc3NpYmxlIEFNL1BNIHZhbHVlcyBpbiBhIFVDYWxlbmRhciAKKyAqIEBzdGFibGUgSUNVIDIu
MAorICovCitlbnVtIFVDYWxlbmRhckFNUE1zIHsKKyAgICAvKiogQU0gKi8KKyAgVUNBTF9BTSwK
KyAgLyoqIFBNICovCisgIFVDQUxfUE0KK307CisKKy8qKiBAc3RhYmxlIElDVSAyLjAgKi8KK3R5
cGVkZWYgZW51bSBVQ2FsZW5kYXJBTVBNcyBVQ2FsZW5kYXJBTVBNczsKKworLyoqCisgKiBDcmVh
dGUgYW4gZW51bWVyYXRpb24gb3ZlciBhbGwgdGltZSB6b25lcy4KKyAqCisgKiBAcGFyYW0gZWMg
aW5wdXQvb3V0cHV0IGVycm9yIGNvZGUKKyAqCisgKiBAcmV0dXJuIGFuIGVudW1lcmF0aW9uIG9i
amVjdCB0aGF0IHRoZSBjYWxsZXIgbXVzdCBkaXNwb3NlIG9mIHVzaW5nCisgKiB1ZW51bV9jbG9z
ZSgpLCBvciBOVUxMIHVwb24gZmFpbHVyZS4gSW4gY2FzZSBvZiBmYWlsdXJlICplYyB3aWxsCisg
KiBpbmRpY2F0ZSB0aGUgZXJyb3IuCisgKgorICogQHN0YWJsZSBJQ1UgMi42CisgKi8KK1VfU1RB
QkxFIFVFbnVtZXJhdGlvbiogVV9FWFBPUlQyCit1Y2FsX29wZW5UaW1lWm9uZXMoVUVycm9yQ29k
ZSogZWMpOworCisvKioKKyAqIENyZWF0ZSBhbiBlbnVtZXJhdGlvbiBvdmVyIGFsbCB0aW1lIHpv
bmVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4KKyAqIGNvdW50cnkuIFNvbWUgem9uZXMgYXJl
IGFmZmlsaWF0ZWQgd2l0aCBubyBjb3VudHJ5IChlLmcuLCAiVVRDIik7CisgKiB0aGVzZSBtYXkg
YWxzbyBiZSByZXRyaWV2ZWQsIGFzIGEgZ3JvdXAuCisgKgorICogQHBhcmFtIGNvdW50cnkgdGhl
IElTTyAzMTY2IHR3by1sZXR0ZXIgY291bnRyeSBjb2RlLCBvciBOVUxMIHRvCisgKiByZXRyaWV2
ZSB6b25lcyBub3QgYWZmaWxpYXRlZCB3aXRoIGFueSBjb3VudHJ5CisgKgorICogQHBhcmFtIGVj
IGlucHV0L291dHB1dCBlcnJvciBjb2RlCisgKgorICogQHJldHVybiBhbiBlbnVtZXJhdGlvbiBv
YmplY3QgdGhhdCB0aGUgY2FsbGVyIG11c3QgZGlzcG9zZSBvZiB1c2luZworICogdWVudW1fY2xv
c2UoKSwgb3IgTlVMTCB1cG9uIGZhaWx1cmUuIEluIGNhc2Ugb2YgZmFpbHVyZSAqZWMgd2lsbAor
ICogaW5kaWNhdGUgdGhlIGVycm9yLgorICoKKyAqIEBzdGFibGUgSUNVIDIuNgorICovCitVX1NU
QUJMRSBVRW51bWVyYXRpb24qIFVfRVhQT1JUMgordWNhbF9vcGVuQ291bnRyeVRpbWVab25lcyhj
b25zdCBjaGFyKiBjb3VudHJ5LCBVRXJyb3JDb2RlKiBlYyk7CisKKy8qKgorICogUmV0dXJuIHRo
ZSBkZWZhdWx0IHRpbWUgem9uZS4gVGhlIGRlZmF1bHQgaXMgZGV0ZXJtaW5lZCBpbml0aWFsbHkK
KyAqIGJ5IHF1ZXJ5aW5nIHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0uIEl0IG1heSBiZSBjaGFu
Z2VkIHdpdGgKKyAqIHVjYWxfc2V0RGVmYXVsdFRpbWVab25lKCkgb3Igd2l0aCB0aGUgQysrIFRp
bWVab25lIEFQSS4KKyAqCisgKiBAcGFyYW0gcmVzdWx0IEEgYnVmZmVyIHRvIHJlY2VpdmUgdGhl
IHJlc3VsdCwgb3IgTlVMTAorICoKKyAqIEBwYXJhbSByZXN1bHRDYXBhY2l0eSBUaGUgY2FwYWNp
dHkgb2YgdGhlIHJlc3VsdCBidWZmZXIKKyAqCisgKiBAcGFyYW0gZWMgaW5wdXQvb3V0cHV0IGVy
cm9yIGNvZGUKKyAqCisgKiBAcmV0dXJuIFRoZSByZXN1bHQgc3RyaW5nIGxlbmd0aCwgbm90IGlu
Y2x1ZGluZyB0aGUgdGVybWluYXRpbmcKKyAqIG51bGwKKyAqCisgKiBAc3RhYmxlIElDVSAyLjYK
KyAqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKK3VjYWxfZ2V0RGVmYXVsdFRpbWVab25l
KFVDaGFyKiByZXN1bHQsIGludDMyX3QgcmVzdWx0Q2FwYWNpdHksIFVFcnJvckNvZGUqIGVjKTsK
KworLyoqCisgKiBTZXQgdGhlIGRlZmF1bHQgdGltZSB6b25lLgorICoKKyAqIEBwYXJhbSB6b25l
SUQgbnVsbC10ZXJtaW5hdGVkIHRpbWUgem9uZSBJRAorICoKKyAqIEBwYXJhbSBlYyBpbnB1dC9v
dXRwdXQgZXJyb3IgY29kZQorICoKKyAqIEBzdGFibGUgSUNVIDIuNgorICovCitVX1NUQUJMRSB2
b2lkIFVfRVhQT1JUMgordWNhbF9zZXREZWZhdWx0VGltZVpvbmUoY29uc3QgVUNoYXIqIHpvbmVJ
RCwgVUVycm9yQ29kZSogZWMpOworCisvKioKKyAqIFJldHVybiB0aGUgYW1vdW50IG9mIHRpbWUg
aW4gbWlsbGlzZWNvbmRzIHRoYXQgdGhlIGNsb2NrIGlzCisgKiBhZHZhbmNlZCBkdXJpbmcgZGF5
bGlnaHQgc2F2aW5ncyB0aW1lIGZvciB0aGUgZ2l2ZW4gdGltZSB6b25lLCBvcgorICogemVybyBp
ZiB0aGUgdGltZSB6b25lIGRvZXMgbm90IG9ic2VydmUgZGF5bGlnaHQgc2F2aW5ncyB0aW1lLgor
ICoKKyAqIEBwYXJhbSB6b25lSUQgbnVsbC10ZXJtaW5hdGVkIHRpbWUgem9uZSBJRAorICoKKyAq
IEBwYXJhbSBlYyBpbnB1dC9vdXRwdXQgZXJyb3IgY29kZQorICoKKyAqIEByZXR1cm4gdGhlIG51
bWJlciBvZiBtaWxsaXNlY29uZHMgdGhlIHRpbWUgaXMgYWR2YW5jZWQgd2l0aAorICogcmVzcGVj
dCB0byBzdGFuZGFyZCB0aW1lIHdoZW4gdGhlIGRheWxpZ2h0IHNhdmluZ3MgcnVsZXMgYXJlIGlu
CisgKiBlZmZlY3QuIFRoaXMgaXMgYWx3YXlzIGEgbm9uLW5lZ2F0aXZlIG51bWJlciwgbW9zdCBj
b21tb25seSBlaXRoZXIKKyAqIDMsNjAwLDAwMCAob25lIGhvdXIpIG9yIHplcm8uCisgKgorICog
QHN0YWJsZSBJQ1UgMi42CisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyCit1Y2FsX2dl
dERTVFNhdmluZ3MoY29uc3QgVUNoYXIqIHpvbmVJRCwgVUVycm9yQ29kZSogZWMpOworCisvKioK
KyAqIEdldCB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lLgorICogVGhlIHZhbHVlIHJldHVybmVk
IGlzIHJlcHJlc2VudGVkIGFzIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBlcG9jaC4KKyAqIEByZXR1
cm4gVGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZS4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitV
X1NUQUJMRSBVRGF0ZSBVX0VYUE9SVDIgCit1Y2FsX2dldE5vdyh2b2lkKTsKKworLyoqCisgKiBP
cGVuIGEgVUNhbGVuZGFyLgorICogQSBVQ2FsZW5kYXIgbWF5IGJlIHVzZWQgdG8gY29udmVydCBh
IG1pbGxpc2Vjb25kIHZhbHVlIHRvIGEgeWVhciwKKyAqIG1vbnRoLCBhbmQgZGF5LgorICogPHA+
CisgKiBOb3RlOiBXaGVuIHVua25vd24gVGltZVpvbmUgSUQgaXMgc3BlY2lmaWVkLCB0aGUgVUNh
bGVuZGFyIHJldHVybmVkCisgKiBieSB0aGUgZnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQgd2l0aCBH
TVQgKCJFdGMvR01UIikgd2l0aG91dCBhbnkKKyAqIGVycm9ycy93YXJuaW5ncy4gIElmIHlvdSB3
YW50IHRvIGNoZWNrIGlmIGEgVGltZVpvbmUgSUQgaXMgdmFsaWQsCisgKiB1c2UgdWNhbF9nZXRD
YW5vbmljYWxUaW1lWm9uZUlEIHByaW9yIHRvIHRoaXMgZnVuY3Rpb24uCisgKiAKKyAqIEBwYXJh
bSB6b25lSUQgVGhlIGRlc2lyZWQgVGltZVpvbmUgSUQuICBJZiAwLCB1c2UgdGhlIGRlZmF1bHQg
dGltZSB6b25lLgorICogQHBhcmFtIGxlbiBUaGUgbGVuZ3RoIG9mIHpvbmVJRCwgb3IgLTEgaWYg
bnVsbC10ZXJtaW5hdGVkLgorICogQHBhcmFtIGxvY2FsZSBUaGUgZGVzaXJlZCBsb2NhbGUKKyAq
IEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIFVDYWxlbmRhciB0byBvcGVuLiBUaGlzIGNhbiBiZSBV
Q0FMX0dSRUdPUklBTiB0byBvcGVuIHRoZSBHcmVnb3JpYW4KKyAqIGNhbGVuZGFyIGZvciB0aGUg
bG9jYWxlLCBvciBVQ0FMX0RFRkFVTFQgdG8gb3BlbiB0aGUgZGVmYXVsdCBjYWxlbmRhciBmb3Ig
dGhlIGxvY2FsZSAodGhlCisgKiBkZWZhdWx0IGNhbGVuZGFyIG1heSBhbHNvIGJlIEdyZWdvcmlh
bikuIFRvIG9wZW4gYSBzcGVjaWZpYyBub24tR3JlZ29yaWFuIGNhbGVuZGFyIGZvciB0aGUKKyAq
IGxvY2FsZSwgdXNlIHVsb2Nfc2V0S2V5d29yZFZhbHVlIHRvIHNldCB0aGUgdmFsdWUgb2YgdGhl
IGNhbGVuZGFyIGtleXdvcmQgZm9yIHRoZSBsb2NhbGUKKyAqIGFuZCB0aGVuIHBhc3MgdGhlIGxv
Y2FsZSB0byB1Y2FsX29wZW4gd2l0aCBVQ0FMX0RFRkFVTFQgYXMgdGhlIHR5cGUuCisgKiBAcGFy
YW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9y
cworICogQHJldHVybiBBIHBvaW50ZXIgdG8gYSBVQ2FsZW5kYXIsIG9yIDAgaWYgYW4gZXJyb3Ig
b2NjdXJyZWQuCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgVUNhbGVuZGFyKiBV
X0VYUE9SVDIgCit1Y2FsX29wZW4oY29uc3QgVUNoYXIqICAgem9uZUlELAorICAgICAgICAgIGlu
dDMyX3QgICAgICAgIGxlbiwKKyAgICAgICAgICBjb25zdCBjaGFyKiAgICBsb2NhbGUsCisgICAg
ICAgICAgVUNhbGVuZGFyVHlwZSAgdHlwZSwKKyAgICAgICAgICBVRXJyb3JDb2RlKiAgICBzdGF0
dXMpOworCisvKioKKyAqIENsb3NlIGEgVUNhbGVuZGFyLgorICogT25jZSBjbG9zZWQsIGEgVUNh
bGVuZGFyIG1heSBubyBsb25nZXIgYmUgdXNlZC4KKyAqIEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRh
ciB0byBjbG9zZS4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQ
T1JUMiAKK3VjYWxfY2xvc2UoVUNhbGVuZGFyICpjYWwpOworCisjaWYgVV9TSE9XX0NQTFVTUExV
U19BUEkKKworVV9OQU1FU1BBQ0VfQkVHSU4KKworLyoqCisgKiBcY2xhc3MgTG9jYWxVQ2FsZW5k
YXJQb2ludGVyCisgKiAiU21hcnQgcG9pbnRlciIgY2xhc3MsIGNsb3NlcyBhIFVDYWxlbmRhciB2
aWEgdWNhbF9jbG9zZSgpLgorICogRm9yIG1vc3QgbWV0aG9kcyBzZWUgdGhlIExvY2FsUG9pbnRl
ckJhc2UgYmFzZSBjbGFzcy4KKyAqCisgKiBAc2VlIExvY2FsUG9pbnRlckJhc2UKKyAqIEBzZWUg
TG9jYWxQb2ludGVyCisgKiBAc3RhYmxlIElDVSA0LjQKKyAqLworVV9ERUZJTkVfTE9DQUxfT1BF
Tl9QT0lOVEVSKExvY2FsVUNhbGVuZGFyUG9pbnRlciwgVUNhbGVuZGFyLCB1Y2FsX2Nsb3NlKTsK
KworVV9OQU1FU1BBQ0VfRU5ECisKKyNlbmRpZgorCisvKioKKyAqIE9wZW4gYSBjb3B5IG9mIGEg
VUNhbGVuZGFyLgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhIGRlZXAgY29weS4KKyAqIEBw
YXJhbSBjYWwgVGhlIGNhbGVuZGFyIHRvIGNvcHkKKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVy
IHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzLgorICogQHJldHVybiBBIHBv
aW50ZXIgdG8gYSBVQ2FsZW5kYXIgaWRlbnRpY2FsIHRvIGNhbC4KKyAqIEBzdGFibGUgSUNVIDQu
MAorICovCitVX1NUQUJMRSBVQ2FsZW5kYXIqIFVfRVhQT1JUMiAKK3VjYWxfY2xvbmUoY29uc3Qg
VUNhbGVuZGFyKiBjYWwsCisgICAgICAgICAgIFVFcnJvckNvZGUqICAgICAgc3RhdHVzKTsKKwor
LyoqCisgKiBTZXQgdGhlIFRpbWVab25lIHVzZWQgYnkgYSBVQ2FsZW5kYXIuCisgKiBBIFVDYWxl
bmRhciB1c2VzIGEgdGltZXpvbmUgZm9yIGNvbnZlcnRpbmcgZnJvbSBHcmVlbndpY2ggdGltZSB0
byBsb2NhbCB0aW1lLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHNldC4KKyAqIEBw
YXJhbSB6b25lSUQgVGhlIGRlc2lyZWQgVGltZVpvbmUgSUQuICBJZiAwLCB1c2UgdGhlIGRlZmF1
bHQgdGltZSB6b25lLgorICogQHBhcmFtIGxlbiBUaGUgbGVuZ3RoIG9mIHpvbmVJRCwgb3IgLTEg
aWYgbnVsbC10ZXJtaW5hdGVkLgorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVy
cm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMuCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLwor
VV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1Y2FsX3NldFRpbWVab25lKFVDYWxlbmRhciogICAg
Y2FsLAorICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogIHpvbmVJRCwKKyAgICAgICAgICAg
ICAgICAgaW50MzJfdCAgICAgICBsZW4sCisgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUqICAg
c3RhdHVzKTsKKworLyoqCisgKiBQb3NzaWJsZSBmb3JtYXRzIGZvciBhIFVDYWxlbmRhcidzIGRp
c3BsYXkgbmFtZSAKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitlbnVtIFVDYWxlbmRhckRpc3Bs
YXlOYW1lVHlwZSB7CisgIC8qKiBTdGFuZGFyZCBkaXNwbGF5IG5hbWUgKi8KKyAgVUNBTF9TVEFO
REFSRCwKKyAgLyoqIFNob3J0IHN0YW5kYXJkIGRpc3BsYXkgbmFtZSAqLworICBVQ0FMX1NIT1JU
X1NUQU5EQVJELAorICAvKiogRGF5bGlnaHQgc2F2aW5ncyBkaXNwbGF5IG5hbWUgKi8KKyAgVUNB
TF9EU1QsCisgIC8qKiBTaG9ydCBkYXlsaWdodCBzYXZpbmdzIGRpc3BsYXkgbmFtZSAqLworICBV
Q0FMX1NIT1JUX0RTVAorfTsKKworLyoqIEBzdGFibGUgSUNVIDIuMCAqLwordHlwZWRlZiBlbnVt
IFVDYWxlbmRhckRpc3BsYXlOYW1lVHlwZSBVQ2FsZW5kYXJEaXNwbGF5TmFtZVR5cGU7CisKKy8q
KgorICogR2V0IHRoZSBkaXNwbGF5IG5hbWUgZm9yIGEgVUNhbGVuZGFyJ3MgVGltZVpvbmUuCisg
KiBBIGRpc3BsYXkgbmFtZSBpcyBzdWl0YWJsZSBmb3IgcHJlc2VudGF0aW9uIHRvIGEgdXNlci4K
KyAqIEBwYXJhbSBjYWwgICAgICAgICAgVGhlIFVDYWxlbmRhciB0byBxdWVyeS4KKyAqIEBwYXJh
bSB0eXBlICAgICAgICAgVGhlIGRlc2lyZWQgZGlzcGxheSBuYW1lIGZvcm1hdDsgb25lIG9mIFVD
QUxfU1RBTkRBUkQsIFVDQUxfU0hPUlRfU1RBTkRBUkQsCisgKiAgICAgICAgICAgICAgICAgICAg
IFVDQUxfRFNULCBVQ0FMX1NIT1JUX0RTVAorICogQHBhcmFtIGxvY2FsZSAgICAgICBUaGUgZGVz
aXJlZCBsb2NhbGUgZm9yIHRoZSBkaXNwbGF5IG5hbWUuCisgKiBAcGFyYW0gcmVzdWx0ICAgICAg
IEEgcG9pbnRlciB0byBhIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBmb3JtYXR0ZWQgbnVtYmVyLgor
ICogQHBhcmFtIHJlc3VsdExlbmd0aCBUaGUgbWF4aW11bSBzaXplIG9mIHJlc3VsdC4KKyAqIEBw
YXJhbSBzdGF0dXMgICAgICAgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBh
bnkgZXJyb3JzCisgKiBAcmV0dXJuICAgICAgICAgICAgIFRoZSB0b3RhbCBidWZmZXIgc2l6ZSBu
ZWVkZWQ7IGlmIGdyZWF0ZXIgdGhhbiByZXN1bHRMZW5ndGgsIHRoZSBvdXRwdXQgd2FzIHRydW5j
YXRlZC4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JU
MiAKK3VjYWxfZ2V0VGltZVpvbmVEaXNwbGF5TmFtZShjb25zdCBVQ2FsZW5kYXIqICAgICAgICAg
IGNhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2FsZW5kYXJEaXNwbGF5TmFtZVR5
cGUgIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICAgICAg
ICAgICAgICBsb2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIqICAgICAg
ICAgICAgICAgICAgICByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJf
dCAgICAgICAgICAgICAgICAgICByZXN1bHRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVUVycm9yQ29kZSogICAgICAgICAgICAgICBzdGF0dXMpOworCisvKioKKyAqIERldGVy
bWluZSBpZiBhIFVDYWxlbmRhciBpcyBjdXJyZW50bHkgaW4gZGF5bGlnaHQgc2F2aW5ncyB0aW1l
LgorICogRGF5bGlnaHQgc2F2aW5ncyB0aW1lIGlzIG5vdCB1c2VkIGluIGFsbCBwYXJ0cyBvZiB0
aGUgd29ybGQuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gcXVlcnkuCisgKiBAcGFy
YW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9y
cworICogQHJldHVybiBUUlVFIGlmIGNhbCBpcyBjdXJyZW50bHkgaW4gZGF5bGlnaHQgc2F2aW5n
cyB0aW1lLCBGQUxTRSBvdGhlcndpc2UKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJM
RSBVQm9vbCBVX0VYUE9SVDIgCit1Y2FsX2luRGF5bGlnaHRUaW1lKGNvbnN0IFVDYWxlbmRhciog
IGNhbCwKKyAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSogICAgICAgc3RhdHVzICk7CisK
Ky8qKgorICogU2V0cyB0aGUgR3JlZ29yaWFuQ2FsZW5kYXIgY2hhbmdlIGRhdGUuIFRoaXMgaXMg
dGhlIHBvaW50IHdoZW4gdGhlIHN3aXRjaCBmcm9tCisgKiBKdWxpYW4gZGF0ZXMgdG8gR3JlZ29y
aWFuIGRhdGVzIG9jY3VycmVkLiBEZWZhdWx0IGlzIDAwOjAwOjAwIGxvY2FsIHRpbWUsIE9jdG9i
ZXIKKyAqIDE1LCAxNTgyLiBQcmV2aW91cyB0byB0aGlzIHRpbWUgYW5kIGRhdGUgd2lsbCBiZSBK
dWxpYW4gZGF0ZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiB3b3JrcyBvbmx5IGZvciBHcmVnb3Jp
YW4gY2FsZW5kYXJzLiBJZiB0aGUgVUNhbGVuZGFyIGlzIG5vdAorICogYW4gaW5zdGFuY2Ugb2Yg
YSBHcmVnb3JpYW4gY2FsZW5kYXIsIHRoZW4gYSBVX1VOU1VQUE9SVEVEX0VSUk9SCisgKiBlcnJv
ciBjb2RlIGlzIHNldC4KKyAqCisgKiBAcGFyYW0gY2FsICAgICAgICBUaGUgY2FsZW5kYXIgb2Jq
ZWN0LgorICogQHBhcmFtIGRhdGUgICAgICAgVGhlIGdpdmVuIEdyZWdvcmlhbiBjdXRvdmVyIGRh
dGUuCisgKiBAcGFyYW0gcEVycm9yQ29kZSBQb2ludGVyIHRvIGEgc3RhbmRhcmQgSUNVIGVycm9y
IGNvZGUuIEl0cyBpbnB1dCB2YWx1ZSBtdXN0CisgKiAgICAgICAgICAgICAgICAgICBwYXNzIHRo
ZSBVX1NVQ0NFU1MoKSB0ZXN0LCBvciBlbHNlIHRoZSBmdW5jdGlvbiByZXR1cm5zCisgKiAgICAg
ICAgICAgICAgICAgICBpbW1lZGlhdGVseS4gQ2hlY2sgZm9yIFVfRkFJTFVSRSgpIG9uIG91dHB1
dCBvciB1c2Ugd2l0aAorICogICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY2hhaW5pbmcuIChT
ZWUgVXNlciBHdWlkZSBmb3IgZGV0YWlscy4pCisgKgorICogQHNlZSBHcmVnb3JpYW5DYWxlbmRh
cjo6c2V0R3JlZ29yaWFuQ2hhbmdlCisgKiBAc2VlIHVjYWxfZ2V0R3JlZ29yaWFuQ2hhbmdlCisg
KiBAc3RhYmxlIElDVSAzLjYKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKK3VjYWxfc2V0
R3JlZ29yaWFuQ2hhbmdlKFVDYWxlbmRhciAqY2FsLCBVRGF0ZSBkYXRlLCBVRXJyb3JDb2RlICpw
RXJyb3JDb2RlKTsKKworLyoqCisgKiBHZXRzIHRoZSBHcmVnb3JpYW4gQ2FsZW5kYXIgY2hhbmdl
IGRhdGUuIFRoaXMgaXMgdGhlIHBvaW50IHdoZW4gdGhlIHN3aXRjaCBmcm9tCisgKiBKdWxpYW4g
ZGF0ZXMgdG8gR3JlZ29yaWFuIGRhdGVzIG9jY3VycmVkLiBEZWZhdWx0IGlzIDAwOjAwOjAwIGxv
Y2FsIHRpbWUsIE9jdG9iZXIKKyAqIDE1LCAxNTgyLiBQcmV2aW91cyB0byB0aGlzIHRpbWUgYW5k
IGRhdGUgd2lsbCBiZSBKdWxpYW4gZGF0ZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiB3b3JrcyBv
bmx5IGZvciBHcmVnb3JpYW4gY2FsZW5kYXJzLiBJZiB0aGUgVUNhbGVuZGFyIGlzIG5vdAorICog
YW4gaW5zdGFuY2Ugb2YgYSBHcmVnb3JpYW4gY2FsZW5kYXIsIHRoZW4gYSBVX1VOU1VQUE9SVEVE
X0VSUk9SCisgKiBlcnJvciBjb2RlIGlzIHNldC4KKyAqCisgKiBAcGFyYW0gY2FsICAgICAgICBU
aGUgY2FsZW5kYXIgb2JqZWN0LgorICogQHBhcmFtIHBFcnJvckNvZGUgUG9pbnRlciB0byBhIHN0
YW5kYXJkIElDVSBlcnJvciBjb2RlLiBJdHMgaW5wdXQgdmFsdWUgbXVzdAorICogICAgICAgICAg
ICAgICAgICAgcGFzcyB0aGUgVV9TVUNDRVNTKCkgdGVzdCwgb3IgZWxzZSB0aGUgZnVuY3Rpb24g
cmV0dXJucworICogICAgICAgICAgICAgICAgICAgaW1tZWRpYXRlbHkuIENoZWNrIGZvciBVX0ZB
SUxVUkUoKSBvbiBvdXRwdXQgb3IgdXNlIHdpdGgKKyAqICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uIGNoYWluaW5nLiAoU2VlIFVzZXIgR3VpZGUgZm9yIGRldGFpbHMuKQorICogQHJldHVybiAg
IFRoZSBHcmVnb3JpYW4gY3V0b3ZlciB0aW1lIGZvciB0aGlzIGNhbGVuZGFyLgorICoKKyAqIEBz
ZWUgR3JlZ29yaWFuQ2FsZW5kYXI6OmdldEdyZWdvcmlhbkNoYW5nZQorICogQHNlZSB1Y2FsX3Nl
dEdyZWdvcmlhbkNoYW5nZQorICogQHN0YWJsZSBJQ1UgMy42CisgKi8KK1VfU1RBQkxFIFVEYXRl
IFVfRVhQT1JUMgordWNhbF9nZXRHcmVnb3JpYW5DaGFuZ2UoY29uc3QgVUNhbGVuZGFyICpjYWws
IFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOworCisvKioKKyAqIFR5cGVzIG9mIFVDYWxlbmRhciBh
dHRyaWJ1dGVzIAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK2VudW0gVUNhbGVuZGFyQXR0cmli
dXRlIHsKKyAgICAvKiogTGVuaWVudCBwYXJzaW5nICovCisgIFVDQUxfTEVOSUVOVCwKKyAgLyoq
IEZpcnN0IGRheSBvZiB3ZWVrICovCisgIFVDQUxfRklSU1RfREFZX09GX1dFRUssCisgIC8qKiBN
aW5pbXVtIG51bWJlciBvZiBkYXlzIGluIGZpcnN0IHdlZWsgKi8KKyAgVUNBTF9NSU5JTUFMX0RB
WVNfSU5fRklSU1RfV0VFSworfTsKKworLyoqIEBzdGFibGUgSUNVIDIuMCAqLwordHlwZWRlZiBl
bnVtIFVDYWxlbmRhckF0dHJpYnV0ZSBVQ2FsZW5kYXJBdHRyaWJ1dGU7CisKKy8qKgorICogR2V0
IGEgbnVtZXJpYyBhdHRyaWJ1dGUgYXNzb2NpYXRlZCB3aXRoIGEgVUNhbGVuZGFyLgorICogTnVt
ZXJpYyBhdHRyaWJ1dGVzIGluY2x1ZGUgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlaywgb3IgdGhl
IG1pbmltYWwgbnVtYmVycworICogb2YgZGF5cyBpbiB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgbW9u
dGguCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gcXVlcnkuCisgKiBAcGFyYW0gYXR0
ciBUaGUgZGVzaXJlZCBhdHRyaWJ1dGU7IG9uZSBvZiBVQ0FMX0xFTklFTlQsIFVDQUxfRklSU1Rf
REFZX09GX1dFRUssCisgKiBvciBVQ0FMX01JTklNQUxfREFZU19JTl9GSVJTVF9XRUVLCisgKiBA
cmV0dXJuIFRoZSB2YWx1ZSBvZiBhdHRyLgorICogQHNlZSB1Y2FsX3NldEF0dHJpYnV0ZQorICog
QHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordWNhbF9n
ZXRBdHRyaWJ1dGUoY29uc3QgVUNhbGVuZGFyKiAgICBjYWwsCisgICAgICAgICAgICAgICAgICBV
Q2FsZW5kYXJBdHRyaWJ1dGUgIGF0dHIpOworCisvKioKKyAqIFNldCBhIG51bWVyaWMgYXR0cmli
dXRlIGFzc29jaWF0ZWQgd2l0aCBhIFVDYWxlbmRhci4KKyAqIE51bWVyaWMgYXR0cmlidXRlcyBp
bmNsdWRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWssIG9yIHRoZSBtaW5pbWFsIG51bWJlcnMK
KyAqIG9mIGRheXMgaW4gdGhlIGZpcnN0IHdlZWsgb2YgdGhlIG1vbnRoLgorICogQHBhcmFtIGNh
bCBUaGUgVUNhbGVuZGFyIHRvIHNldC4KKyAqIEBwYXJhbSBhdHRyIFRoZSBkZXNpcmVkIGF0dHJp
YnV0ZTsgb25lIG9mIFVDQUxfTEVOSUVOVCwgVUNBTF9GSVJTVF9EQVlfT0ZfV0VFSywKKyAqIG9y
IFVDQUxfTUlOSU1BTF9EQVlTX0lOX0ZJUlNUX1dFRUsKKyAqIEBwYXJhbSBuZXdWYWx1ZSBUaGUg
bmV3IHZhbHVlIG9mIGF0dHIuCisgKiBAc2VlIHVjYWxfZ2V0QXR0cmlidXRlCisgKiBAc3RhYmxl
IElDVSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1Y2FsX3NldEF0dHJpYnV0
ZShVQ2FsZW5kYXIqICAgICAgICAgIGNhbCwKKyAgICAgICAgICAgICAgICAgIFVDYWxlbmRhckF0
dHJpYnV0ZSAgYXR0ciwKKyAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgICAgbmV3
VmFsdWUpOworCisvKioKKyAqIEdldCBhIGxvY2FsZSBmb3Igd2hpY2ggY2FsZW5kYXJzIGFyZSBh
dmFpbGFibGUuCisgKiBBIFVDYWxlbmRhciBpbiBhIGxvY2FsZSByZXR1cm5lZCBieSB0aGlzIGZ1
bmN0aW9uIHdpbGwgY29udGFpbiB0aGUgY29ycmVjdAorICogZGF5IGFuZCBtb250aCBuYW1lcyBm
b3IgdGhlIGxvY2FsZS4KKyAqIEBwYXJhbSBsb2NhbGVJbmRleCBUaGUgaW5kZXggb2YgdGhlIGRl
c2lyZWQgbG9jYWxlLgorICogQHJldHVybiBBIGxvY2FsZSBmb3Igd2hpY2ggY2FsZW5kYXJzIGFy
ZSBhdmFpbGFibGUsIG9yIDAgaWYgbm9uZS4KKyAqIEBzZWUgdWNhbF9jb3VudEF2YWlsYWJsZQor
ICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIGNvbnN0IGNoYXIqIFVfRVhQT1JUMiAK
K3VjYWxfZ2V0QXZhaWxhYmxlKGludDMyX3QgbG9jYWxlSW5kZXgpOworCisvKioKKyAqIERldGVy
bWluZSBob3cgbWFueSBsb2NhbGVzIGhhdmUgY2FsZW5kYXJzIGF2YWlsYWJsZS4KKyAqIFRoaXMg
ZnVuY3Rpb24gaXMgbW9zdCB1c2VmdWwgYXMgZGV0ZXJtaW5pbmcgdGhlIGxvb3AgZW5kaW5nIGNv
bmRpdGlvbiBmb3IKKyAqIGNhbGxzIHRvIFxyZWYgdWNhbF9nZXRBdmFpbGFibGUuCisgKiBAcmV0
dXJuIFRoZSBudW1iZXIgb2YgbG9jYWxlcyBmb3Igd2hpY2ggY2FsZW5kYXJzIGFyZSBhdmFpbGFi
bGUuCisgKiBAc2VlIHVjYWxfZ2V0QXZhaWxhYmxlCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLwor
VV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1Y2FsX2NvdW50QXZhaWxhYmxlKHZvaWQpOwor
CisvKioKKyAqIEdldCBhIFVDYWxlbmRhcidzIGN1cnJlbnQgdGltZSBpbiBtaWxsaXMuCisgKiBU
aGUgdGltZSBpcyByZXByZXNlbnRlZCBhcyBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZXBvY2guCisg
KiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gcXVlcnkuCisgKiBAcGFyYW0gc3RhdHVzIEEg
cG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworICogQHJldHVy
biBUaGUgY2FsZW5kYXIncyBjdXJyZW50IHRpbWUgaW4gbWlsbGlzLgorICogQHNlZSB1Y2FsX3Nl
dE1pbGxpcworICogQHNlZSB1Y2FsX3NldERhdGUKKyAqIEBzZWUgdWNhbF9zZXREYXRlVGltZQor
ICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIFVEYXRlIFVfRVhQT1JUMiAKK3VjYWxf
Z2V0TWlsbGlzKGNvbnN0IFVDYWxlbmRhciogIGNhbCwKKyAgICAgICAgICAgICAgIFVFcnJvckNv
ZGUqICAgICAgIHN0YXR1cyk7CisKKy8qKgorICogU2V0IGEgVUNhbGVuZGFyJ3MgY3VycmVudCB0
aW1lIGluIG1pbGxpcy4KKyAqIFRoZSB0aW1lIGlzIHJlcHJlc2VudGVkIGFzIG1pbGxpc2Vjb25k
cyBmcm9tIHRoZSBlcG9jaC4KKyAqIEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBzZXQuCisg
KiBAcGFyYW0gZGF0ZVRpbWUgVGhlIGRlc2lyZWQgZGF0ZSBhbmQgdGltZS4KKyAqIEBwYXJhbSBz
dGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisg
KiBAc2VlIHVjYWxfZ2V0TWlsbGlzCisgKiBAc2VlIHVjYWxfc2V0RGF0ZQorICogQHNlZSB1Y2Fs
X3NldERhdGVUaW1lCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VY
UE9SVDIgCit1Y2FsX3NldE1pbGxpcyhVQ2FsZW5kYXIqICAgY2FsLAorICAgICAgICAgICAgICAg
VURhdGUgICAgICAgIGRhdGVUaW1lLAorICAgICAgICAgICAgICAgVUVycm9yQ29kZSogIHN0YXR1
cyApOworCisvKioKKyAqIFNldCBhIFVDYWxlbmRhcidzIGN1cnJlbnQgZGF0ZS4KKyAqIFRoZSBk
YXRlIGlzIHJlcHJlc2VudGVkIGFzIGEgc2VyaWVzIG9mIDMyLWJpdCBpbnRlZ2Vycy4KKyAqIEBw
YXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBzZXQuCisgKiBAcGFyYW0geWVhciBUaGUgZGVzaXJl
ZCB5ZWFyLgorICogQHBhcmFtIG1vbnRoIFRoZSBkZXNpcmVkIG1vbnRoOyBvbmUgb2YgVUNBTF9K
QU5VQVJZLCBVQ0FMX0ZFQlJVQVJZLCBVQ0FMX01BUkNILCBVQ0FMX0FQUklMLCBVQ0FMX01BWSwK
KyAqIFVDQUxfSlVORSwgVUNBTF9KVUxZLCBVQ0FMX0FVR1VTVCwgVUNBTF9TRVBURU1CRVIsIFVD
QUxfT0NUT0JFUiwgVUNBTF9OT1ZFTUJFUiwgVUNBTF9ERUNFTUJFUiwgVUNBTF9VTkRFQ0lNQkVS
CisgKiBAcGFyYW0gZGF0ZSBUaGUgZGVzaXJlZCBkYXkgb2YgdGhlIG1vbnRoLgorICogQHBhcmFt
IHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMK
KyAqIEBzZWUgdWNhbF9nZXRNaWxsaXMKKyAqIEBzZWUgdWNhbF9zZXRNaWxsaXMKKyAqIEBzZWUg
dWNhbF9zZXREYXRlVGltZQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHZvaWQg
VV9FWFBPUlQyIAordWNhbF9zZXREYXRlKFVDYWxlbmRhciogICBjYWwsCisgICAgICAgICAgICAg
aW50MzJfdCAgICAgIHllYXIsCisgICAgICAgICAgICAgaW50MzJfdCAgICAgIG1vbnRoLAorICAg
ICAgICAgICAgIGludDMyX3QgICAgICBkYXRlLAorICAgICAgICAgICAgIFVFcnJvckNvZGUqICBz
dGF0dXMpOworCisvKioKKyAqIFNldCBhIFVDYWxlbmRhcidzIGN1cnJlbnQgZGF0ZS4KKyAqIFRo
ZSBkYXRlIGlzIHJlcHJlc2VudGVkIGFzIGEgc2VyaWVzIG9mIDMyLWJpdCBpbnRlZ2Vycy4KKyAq
IEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBzZXQuCisgKiBAcGFyYW0geWVhciBUaGUgZGVz
aXJlZCB5ZWFyLgorICogQHBhcmFtIG1vbnRoIFRoZSBkZXNpcmVkIG1vbnRoOyBvbmUgb2YgVUNB
TF9KQU5VQVJZLCBVQ0FMX0ZFQlJVQVJZLCBVQ0FMX01BUkNILCBVQ0FMX0FQUklMLCBVQ0FMX01B
WSwKKyAqIFVDQUxfSlVORSwgVUNBTF9KVUxZLCBVQ0FMX0FVR1VTVCwgVUNBTF9TRVBURU1CRVIs
IFVDQUxfT0NUT0JFUiwgVUNBTF9OT1ZFTUJFUiwgVUNBTF9ERUNFTUJFUiwgVUNBTF9VTkRFQ0lN
QkVSCisgKiBAcGFyYW0gZGF0ZSBUaGUgZGVzaXJlZCBkYXkgb2YgdGhlIG1vbnRoLgorICogQHBh
cmFtIGhvdXIgVGhlIGRlc2lyZWQgaG91ciBvZiBkYXkuCisgKiBAcGFyYW0gbWludXRlIFRoZSBk
ZXNpcmVkIG1pbnV0ZS4KKyAqIEBwYXJhbSBzZWNvbmQgVGhlIGRlc2lyZWMgc2Vjb25kLgorICog
QHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBl
cnJvcnMKKyAqIEBzZWUgdWNhbF9nZXRNaWxsaXMKKyAqIEBzZWUgdWNhbF9zZXRNaWxsaXMKKyAq
IEBzZWUgdWNhbF9zZXREYXRlCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgdm9p
ZCBVX0VYUE9SVDIgCit1Y2FsX3NldERhdGVUaW1lKFVDYWxlbmRhciogICBjYWwsCisgICAgICAg
ICAgICAgICAgIGludDMyX3QgICAgICB5ZWFyLAorICAgICAgICAgICAgICAgICBpbnQzMl90ICAg
ICAgbW9udGgsCisgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICBkYXRlLAorICAgICAgICAg
ICAgICAgICBpbnQzMl90ICAgICAgaG91ciwKKyAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAg
IG1pbnV0ZSwKKyAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgIHNlY29uZCwKKyAgICAgICAg
ICAgICAgICAgVUVycm9yQ29kZSogIHN0YXR1cyk7CisKKy8qKgorICogUmV0dXJucyBUUlVFIGlm
IHR3byBVQ2FsZW5kYXJzIGFyZSBlcXVpdmFsZW50LiAgRXF1aXZhbGVudAorICogVUNhbGVuZGFy
cyB3aWxsIGJlaGF2ZSBpZGVudGljYWxseSwgYnV0IHRoZXkgbWF5IGJlIHNldCB0bworICogZGlm
ZmVyZW50IHRpbWVzLgorICogQHBhcmFtIGNhbDEgVGhlIGZpcnN0IG9mIHRoZSBVQ2FsZW5kYXJz
IHRvIGNvbXBhcmUuCisgKiBAcGFyYW0gY2FsMiBUaGUgc2Vjb25kIG9mIHRoZSBVQ2FsZW5kYXJz
IHRvIGNvbXBhcmUuCisgKiBAcmV0dXJuIFRSVUUgaWYgY2FsMSBhbmQgY2FsMiBhcmUgZXF1aXZh
bGVudCwgRkFMU0Ugb3RoZXJ3aXNlLgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxF
IFVCb29sIFVfRVhQT1JUMiAKK3VjYWxfZXF1aXZhbGVudFRvKGNvbnN0IFVDYWxlbmRhciogIGNh
bDEsCisgICAgICAgICAgICAgICAgICBjb25zdCBVQ2FsZW5kYXIqICBjYWwyKTsKKworLyoqCisg
KiBBZGQgYSBzcGVjaWZpZWQgc2lnbmVkIGFtb3VudCB0byBhIHBhcnRpY3VsYXIgZmllbGQgaW4g
YSBVQ2FsZW5kYXIuCisgKiBUaGlzIGNhbiBtb2RpZnkgbW9yZSBzaWduaWZpY2FudCBmaWVsZHMg
aW4gdGhlIGNhbGVuZGFyLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHdoaWNoIHRv
IGFkZC4KKyAqIEBwYXJhbSBmaWVsZCBUaGUgZmllbGQgdG8gd2hpY2ggdG8gYWRkIHRoZSBzaWdu
ZWQgdmFsdWU7IG9uZSBvZiBVQ0FMX0VSQSwgVUNBTF9ZRUFSLCBVQ0FMX01PTlRILAorICogVUNB
TF9XRUVLX09GX1lFQVIsIFVDQUxfV0VFS19PRl9NT05USCwgVUNBTF9EQVRFLCBVQ0FMX0RBWV9P
Rl9ZRUFSLCBVQ0FMX0RBWV9PRl9XRUVLLAorICogVUNBTF9EQVlfT0ZfV0VFS19JTl9NT05USCwg
VUNBTF9BTV9QTSwgVUNBTF9IT1VSLCBVQ0FMX0hPVVJfT0ZfREFZLCBVQ0FMX01JTlVURSwgVUNB
TF9TRUNPTkQsCisgKiBVQ0FMX01JTExJU0VDT05ELCBVQ0FMX1pPTkVfT0ZGU0VULCBVQ0FMX0RT
VF9PRkZTRVQuCisgKiBAcGFyYW0gYW1vdW50IFRoZSBzaWduZWQgYW1vdW50IHRvIGFkZCB0byBm
aWVsZC4gSWYgdGhlIGFtb3VudCBjYXVzZXMgdGhlIHZhbHVlCisgKiB0byBleGNlZWQgdG8gbWF4
aW11bSBvciBtaW5pbXVtIHZhbHVlcyBmb3IgdGhhdCBmaWVsZCwgb3RoZXIgZmllbGRzIGFyZSBt
b2RpZmllZAorICogdG8gcHJlc2VydmUgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY2hhbmdlLgorICog
QHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBl
cnJvcnMKKyAqIEBzZWUgdWNhbF9yb2xsCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFC
TEUgdm9pZCBVX0VYUE9SVDIgCit1Y2FsX2FkZChVQ2FsZW5kYXIqICAgICAgICAgICBjYWwsCisg
ICAgICAgICBVQ2FsZW5kYXJEYXRlRmllbGRzICBmaWVsZCwKKyAgICAgICAgIGludDMyX3QgICAg
ICAgICAgICAgIGFtb3VudCwKKyAgICAgICAgIFVFcnJvckNvZGUqICAgICAgICAgIHN0YXR1cyk7
CisKKy8qKgorICogQWRkIGEgc3BlY2lmaWVkIHNpZ25lZCBhbW91bnQgdG8gYSBwYXJ0aWN1bGFy
IGZpZWxkIGluIGEgVUNhbGVuZGFyLgorICogVGhpcyB3aWxsIG5vdCBtb2RpZnkgbW9yZSBzaWdu
aWZpY2FudCBmaWVsZHMgaW4gdGhlIGNhbGVuZGFyLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVu
ZGFyIHRvIHdoaWNoIHRvIGFkZC4KKyAqIEBwYXJhbSBmaWVsZCBUaGUgZmllbGQgdG8gd2hpY2gg
dG8gYWRkIHRoZSBzaWduZWQgdmFsdWU7IG9uZSBvZiBVQ0FMX0VSQSwgVUNBTF9ZRUFSLCBVQ0FM
X01PTlRILAorICogVUNBTF9XRUVLX09GX1lFQVIsIFVDQUxfV0VFS19PRl9NT05USCwgVUNBTF9E
QVRFLCBVQ0FMX0RBWV9PRl9ZRUFSLCBVQ0FMX0RBWV9PRl9XRUVLLAorICogVUNBTF9EQVlfT0Zf
V0VFS19JTl9NT05USCwgVUNBTF9BTV9QTSwgVUNBTF9IT1VSLCBVQ0FMX0hPVVJfT0ZfREFZLCBV
Q0FMX01JTlVURSwgVUNBTF9TRUNPTkQsCisgKiBVQ0FMX01JTExJU0VDT05ELCBVQ0FMX1pPTkVf
T0ZGU0VULCBVQ0FMX0RTVF9PRkZTRVQuCisgKiBAcGFyYW0gYW1vdW50IFRoZSBzaWduZWQgYW1v
dW50IHRvIGFkZCB0byBmaWVsZC4gSWYgdGhlIGFtb3VudCBjYXVzZXMgdGhlIHZhbHVlCisgKiB0
byBleGNlZWQgdG8gbWF4aW11bSBvciBtaW5pbXVtIHZhbHVlcyBmb3IgdGhhdCBmaWVsZCwgdGhl
IGZpZWxkIGlzIHBpbm5lZCB0byBhIHBlcm1pc3NpYmxlCisgKiB2YWx1ZS4KKyAqIEBwYXJhbSBz
dGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisg
KiBAc2VlIHVjYWxfYWRkCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBV
X0VYUE9SVDIgCit1Y2FsX3JvbGwoVUNhbGVuZGFyKiAgICAgICAgICAgY2FsLAorICAgICAgICAg
IFVDYWxlbmRhckRhdGVGaWVsZHMgIGZpZWxkLAorICAgICAgICAgIGludDMyX3QgICAgICAgICAg
ICAgIGFtb3VudCwKKyAgICAgICAgICBVRXJyb3JDb2RlKiAgICAgICAgICBzdGF0dXMpOworCisv
KioKKyAqIEdldCB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIGZpZWxkIGZyb20gYSBVQ2FsZW5kYXIu
CisgKiBBbGwgZmllbGRzIGFyZSByZXByZXNlbnRlZCBhcyAzMi1iaXQgaW50ZWdlcnMuCisgKiBA
cGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gcXVlcnkuCisgKiBAcGFyYW0gZmllbGQgVGhlIGRl
c2lyZWQgZmllbGQ7IG9uZSBvZiBVQ0FMX0VSQSwgVUNBTF9ZRUFSLCBVQ0FMX01PTlRILAorICog
VUNBTF9XRUVLX09GX1lFQVIsIFVDQUxfV0VFS19PRl9NT05USCwgVUNBTF9EQVRFLCBVQ0FMX0RB
WV9PRl9ZRUFSLCBVQ0FMX0RBWV9PRl9XRUVLLAorICogVUNBTF9EQVlfT0ZfV0VFS19JTl9NT05U
SCwgVUNBTF9BTV9QTSwgVUNBTF9IT1VSLCBVQ0FMX0hPVVJfT0ZfREFZLCBVQ0FMX01JTlVURSwg
VUNBTF9TRUNPTkQsCisgKiBVQ0FMX01JTExJU0VDT05ELCBVQ0FMX1pPTkVfT0ZGU0VULCBVQ0FM
X0RTVF9PRkZTRVQuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2Rl
IHRvIHJlY2VpdmUgYW55IGVycm9ycworICogQHJldHVybiBUaGUgdmFsdWUgb2YgdGhlIGRlc2ly
ZWQgZmllbGQuCisgKiBAc2VlIHVjYWxfc2V0CisgKiBAc2VlIHVjYWxfaXNTZXQKKyAqIEBzZWUg
dWNhbF9jbGVhckZpZWxkCisgKiBAc2VlIHVjYWxfY2xlYXIKKyAqIEBzdGFibGUgSUNVIDIuMAor
ICovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VjYWxfZ2V0KGNvbnN0IFVDYWxlbmRh
ciogICAgIGNhbCwKKyAgICAgICAgIFVDYWxlbmRhckRhdGVGaWVsZHMgIGZpZWxkLAorICAgICAg
ICAgVUVycm9yQ29kZSogICAgICAgICAgc3RhdHVzICk7CisKKy8qKgorICogU2V0IHRoZSB2YWx1
ZSBvZiBhIGZpZWxkIGluIGEgVUNhbGVuZGFyLgorICogQWxsIGZpZWxkcyBhcmUgcmVwcmVzZW50
ZWQgYXMgMzItYml0IGludGVnZXJzLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHNl
dC4KKyAqIEBwYXJhbSBmaWVsZCBUaGUgZmllbGQgdG8gc2V0OyBvbmUgb2YgVUNBTF9FUkEsIFVD
QUxfWUVBUiwgVUNBTF9NT05USCwKKyAqIFVDQUxfV0VFS19PRl9ZRUFSLCBVQ0FMX1dFRUtfT0Zf
TU9OVEgsIFVDQUxfREFURSwgVUNBTF9EQVlfT0ZfWUVBUiwgVUNBTF9EQVlfT0ZfV0VFSywKKyAq
IFVDQUxfREFZX09GX1dFRUtfSU5fTU9OVEgsIFVDQUxfQU1fUE0sIFVDQUxfSE9VUiwgVUNBTF9I
T1VSX09GX0RBWSwgVUNBTF9NSU5VVEUsIFVDQUxfU0VDT05ELAorICogVUNBTF9NSUxMSVNFQ09O
RCwgVUNBTF9aT05FX09GRlNFVCwgVUNBTF9EU1RfT0ZGU0VULgorICogQHBhcmFtIHZhbHVlIFRo
ZSBkZXNpcmVkIHZhbHVlIG9mIGZpZWxkLgorICogQHNlZSB1Y2FsX2dldAorICogQHNlZSB1Y2Fs
X2lzU2V0CisgKiBAc2VlIHVjYWxfY2xlYXJGaWVsZAorICogQHNlZSB1Y2FsX2NsZWFyCisgKiBA
c3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1Y2FsX3NldChV
Q2FsZW5kYXIqICAgICAgICAgICBjYWwsCisgICAgICAgICBVQ2FsZW5kYXJEYXRlRmllbGRzICBm
aWVsZCwKKyAgICAgICAgIGludDMyX3QgICAgICAgICAgICAgIHZhbHVlKTsKKworLyoqCisgKiBE
ZXRlcm1pbmUgaWYgYSBmaWVsZCBpbiBhIFVDYWxlbmRhciBpcyBzZXQuCisgKiBBbGwgZmllbGRz
IGFyZSByZXByZXNlbnRlZCBhcyAzMi1iaXQgaW50ZWdlcnMuCisgKiBAcGFyYW0gY2FsIFRoZSBV
Q2FsZW5kYXIgdG8gcXVlcnkuCisgKiBAcGFyYW0gZmllbGQgVGhlIGRlc2lyZWQgZmllbGQ7IG9u
ZSBvZiBVQ0FMX0VSQSwgVUNBTF9ZRUFSLCBVQ0FMX01PTlRILAorICogVUNBTF9XRUVLX09GX1lF
QVIsIFVDQUxfV0VFS19PRl9NT05USCwgVUNBTF9EQVRFLCBVQ0FMX0RBWV9PRl9ZRUFSLCBVQ0FM
X0RBWV9PRl9XRUVLLAorICogVUNBTF9EQVlfT0ZfV0VFS19JTl9NT05USCwgVUNBTF9BTV9QTSwg
VUNBTF9IT1VSLCBVQ0FMX0hPVVJfT0ZfREFZLCBVQ0FMX01JTlVURSwgVUNBTF9TRUNPTkQsCisg
KiBVQ0FMX01JTExJU0VDT05ELCBVQ0FMX1pPTkVfT0ZGU0VULCBVQ0FMX0RTVF9PRkZTRVQuCisg
KiBAcmV0dXJuIFRSVUUgaWYgZmllbGQgaXMgc2V0LCBGQUxTRSBvdGhlcndpc2UuCisgKiBAc2Vl
IHVjYWxfZ2V0CisgKiBAc2VlIHVjYWxfc2V0CisgKiBAc2VlIHVjYWxfY2xlYXJGaWVsZAorICog
QHNlZSB1Y2FsX2NsZWFyCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgVUJvb2wg
VV9FWFBPUlQyIAordWNhbF9pc1NldChjb25zdCBVQ2FsZW5kYXIqICAgICBjYWwsCisgICAgICAg
ICAgIFVDYWxlbmRhckRhdGVGaWVsZHMgIGZpZWxkKTsKKworLyoqCisgKiBDbGVhciBhIGZpZWxk
IGluIGEgVUNhbGVuZGFyLgorICogQWxsIGZpZWxkcyBhcmUgcmVwcmVzZW50ZWQgYXMgMzItYml0
IGludGVnZXJzLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIGNvbnRhaW5pbmcgdGhlIGZp
ZWxkIHRvIGNsZWFyLgorICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZCB0byBjbGVhcjsgb25lIG9m
IFVDQUxfRVJBLCBVQ0FMX1lFQVIsIFVDQUxfTU9OVEgsCisgKiBVQ0FMX1dFRUtfT0ZfWUVBUiwg
VUNBTF9XRUVLX09GX01PTlRILCBVQ0FMX0RBVEUsIFVDQUxfREFZX09GX1lFQVIsIFVDQUxfREFZ
X09GX1dFRUssCisgKiBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRILCBVQ0FMX0FNX1BNLCBVQ0FM
X0hPVVIsIFVDQUxfSE9VUl9PRl9EQVksIFVDQUxfTUlOVVRFLCBVQ0FMX1NFQ09ORCwKKyAqIFVD
QUxfTUlMTElTRUNPTkQsIFVDQUxfWk9ORV9PRkZTRVQsIFVDQUxfRFNUX09GRlNFVC4KKyAqIEBz
ZWUgdWNhbF9nZXQKKyAqIEBzZWUgdWNhbF9zZXQKKyAqIEBzZWUgdWNhbF9pc1NldAorICogQHNl
ZSB1Y2FsX2NsZWFyCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VY
UE9SVDIgCit1Y2FsX2NsZWFyRmllbGQoVUNhbGVuZGFyKiAgICAgICAgICAgY2FsLAorICAgICAg
ICAgICAgICAgIFVDYWxlbmRhckRhdGVGaWVsZHMgIGZpZWxkKTsKKworLyoqCisgKiBDbGVhciBh
bGwgZmllbGRzIGluIGEgVUNhbGVuZGFyLgorICogQWxsIGZpZWxkcyBhcmUgcmVwcmVzZW50ZWQg
YXMgMzItYml0IGludGVnZXJzLgorICogQHBhcmFtIGNhbGVuZGFyIFRoZSBVQ2FsZW5kYXIgdG8g
Y2xlYXIuCisgKiBAc2VlIHVjYWxfZ2V0CisgKiBAc2VlIHVjYWxfc2V0CisgKiBAc2VlIHVjYWxf
aXNTZXQKKyAqIEBzZWUgdWNhbF9jbGVhckZpZWxkCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLwor
VV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1Y2FsX2NsZWFyKFVDYWxlbmRhciogY2FsZW5kYXIp
OworCisvKioKKyAqIFBvc3NpYmxlIGxpbWl0IHZhbHVlcyBmb3IgYSBVQ2FsZW5kYXIgCisgKiBA
c3RhYmxlIElDVSAyLjAKKyAqLworZW51bSBVQ2FsZW5kYXJMaW1pdFR5cGUgeworICAvKiogTWlu
aW11bSB2YWx1ZSAqLworICBVQ0FMX01JTklNVU0sCisgIC8qKiBNYXhpbXVtIHZhbHVlICovCisg
IFVDQUxfTUFYSU1VTSwKKyAgLyoqIEdyZWF0ZXN0IG1pbmltdW0gdmFsdWUgKi8KKyAgVUNBTF9H
UkVBVEVTVF9NSU5JTVVNLAorICAvKiogTGVhZXN0IG1heGltdW0gdmFsdWUgKi8KKyAgVUNBTF9M
RUFTVF9NQVhJTVVNLAorICAvKiogQWN0dWFsIG1pbmltdW0gdmFsdWUgKi8KKyAgVUNBTF9BQ1RV
QUxfTUlOSU1VTSwKKyAgLyoqIEFjdHVhbCBtYXhpbXVtIHZhbHVlICovCisgIFVDQUxfQUNUVUFM
X01BWElNVU0KK307CisKKy8qKiBAc3RhYmxlIElDVSAyLjAgKi8KK3R5cGVkZWYgZW51bSBVQ2Fs
ZW5kYXJMaW1pdFR5cGUgVUNhbGVuZGFyTGltaXRUeXBlOworCisvKioKKyAqIERldGVybWluZSBh
IGxpbWl0IGZvciBhIGZpZWxkIGluIGEgVUNhbGVuZGFyLgorICogQSBsaW1pdCBpcyBhIG1heGlt
dW0gb3IgbWluaW11bSB2YWx1ZSBmb3IgYSBmaWVsZC4KKyAqIEBwYXJhbSBjYWwgVGhlIFVDYWxl
bmRhciB0byBxdWVyeS4KKyAqIEBwYXJhbSBmaWVsZCBUaGUgZGVzaXJlZCBmaWVsZDsgb25lIG9m
IFVDQUxfRVJBLCBVQ0FMX1lFQVIsIFVDQUxfTU9OVEgsCisgKiBVQ0FMX1dFRUtfT0ZfWUVBUiwg
VUNBTF9XRUVLX09GX01PTlRILCBVQ0FMX0RBVEUsIFVDQUxfREFZX09GX1lFQVIsIFVDQUxfREFZ
X09GX1dFRUssCisgKiBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRILCBVQ0FMX0FNX1BNLCBVQ0FM
X0hPVVIsIFVDQUxfSE9VUl9PRl9EQVksIFVDQUxfTUlOVVRFLCBVQ0FMX1NFQ09ORCwKKyAqIFVD
QUxfTUlMTElTRUNPTkQsIFVDQUxfWk9ORV9PRkZTRVQsIFVDQUxfRFNUX09GRlNFVC4KKyAqIEBw
YXJhbSB0eXBlIFRoZSBkZXNpcmVkIGNyaXRpY2FsIHBvaW50OyBvbmUgb2YgVUNBTF9NSU5JTVVN
LCBVQ0FMX01BWElNVU0sIFVDQUxfR1JFQVRFU1RfTUlOSU1VTSwKKyAqIFVDQUxfTEVBU1RfTUFY
SU1VTSwgVUNBTF9BQ1RVQUxfTUlOSU1VTSwgVUNBTF9BQ1RVQUxfTUFYSU1VTQorICogQHBhcmFt
IHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMu
CisgKiBAcmV0dXJuIFRoZSByZXF1ZXN0ZWQgdmFsdWUuCisgKiBAc3RhYmxlIElDVSAyLjAKKyAq
LworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1Y2FsX2dldExpbWl0KGNvbnN0IFVDYWxl
bmRhciogICAgIGNhbCwKKyAgICAgICAgICAgICAgVUNhbGVuZGFyRGF0ZUZpZWxkcyAgZmllbGQs
CisgICAgICAgICAgICAgIFVDYWxlbmRhckxpbWl0VHlwZSAgIHR5cGUsCisgICAgICAgICAgICAg
IFVFcnJvckNvZGUqICAgICAgICAgIHN0YXR1cyk7CisKKy8qKiBHZXQgdGhlIGxvY2FsZSBmb3Ig
dGhpcyBjYWxlbmRhciBvYmplY3QuIFlvdSBjYW4gY2hvb3NlIGJldHdlZW4gdmFsaWQgYW5kIGFj
dHVhbCBsb2NhbGUuCisgKiAgQHBhcmFtIGNhbCBUaGUgY2FsZW5kYXIgb2JqZWN0CisgKiAgQHBh
cmFtIHR5cGUgdHlwZSBvZiB0aGUgbG9jYWxlIHdlJ3JlIGxvb2tpbmcgZm9yICh2YWxpZCBvciBh
Y3R1YWwpIAorICogIEBwYXJhbSBzdGF0dXMgZXJyb3IgY29kZSBmb3IgdGhlIG9wZXJhdGlvbgor
ICogIEByZXR1cm4gdGhlIGxvY2FsZSBuYW1lCisgKiAgQHN0YWJsZSBJQ1UgMi44CisgKi8KK1Vf
U1RBQkxFIGNvbnN0IGNoYXIgKiBVX0VYUE9SVDIKK3VjYWxfZ2V0TG9jYWxlQnlUeXBlKGNvbnN0
IFVDYWxlbmRhciAqY2FsLCBVTG9jRGF0YUxvY2FsZVR5cGUgdHlwZSwgVUVycm9yQ29kZSogc3Rh
dHVzKTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSB0aW1lem9uZSBkYXRhIHZlcnNpb24gY3VycmVu
dGx5IHVzZWQgYnkgSUNVLgorICogQHBhcmFtIHN0YXR1cyBlcnJvciBjb2RlIGZvciB0aGUgb3Bl
cmF0aW9uCisgKiBAcmV0dXJuIHRoZSB2ZXJzaW9uIHN0cmluZywgc3VjaCBhcyAiMjAwN2YiCisg
KiBAc3RhYmxlIElDVSAzLjgKKyAqLworVV9TVEFCTEUgY29uc3QgY2hhciAqIFVfRVhQT1JUMgor
dWNhbF9nZXRUWkRhdGFWZXJzaW9uKFVFcnJvckNvZGUqIHN0YXR1cyk7CisKKy8qKgorICogUmV0
dXJucyB0aGUgY2Fub25pY2FsIHN5c3RlbSB0aW1lem9uZSBJRCBvciB0aGUgbm9ybWFsaXplZAor
ICogY3VzdG9tIHRpbWUgem9uZSBJRCBmb3IgdGhlIGdpdmVuIHRpbWUgem9uZSBJRC4KKyAqIEBw
YXJhbSBpZCAgICAgICAgVGhlIGlucHV0IHRpbWV6b25lIElEIHRvIGJlIGNhbm9uaWNhbGl6ZWQu
CisgKiBAcGFyYW0gbGVuICAgICAgIFRoZSBsZW5ndGggb2YgaWQsIG9yIC0xIGlmIG51bGwtdGVy
bWluYXRlZC4KKyAqIEBwYXJhbSByZXN1bHQgICAgVGhlIGJ1ZmZlciByZWNlaXZlcyB0aGUgY2Fu
b25pY2FsIHN5c3RlbSB0aW1lem9uZSBJRAorICogICAgICAgICAgICAgICAgICBvciB0aGUgY3Vz
dG9tIHRpbWV6b25lIElEIGluIG5vcm1hbGl6ZWQgZm9ybWF0LgorICogQHBhcmFtIHJlc3VsdENh
cGFjaXR5ICAgIFRoZSBjYXBhY2l0eSBvZiB0aGUgcmVzdWx0IGJ1ZmZlci4KKyAqIEBwYXJhbSBp
c1N5c3RlbUlEICAgICAgICBSZWNlaXZlcyBpZiB0aGUgZ2l2ZW4gSUQgaXMgYSBrbm93biBzeXN0
ZW0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICB0aW1lem9uZSBJRC4KKyAqIEBwYXJhbSBz
dGF0dXMgICAgUmVjZXZpZXMgdGhlIHN0YXR1cy4gIFdoZW4gdGhlIGdpdmVuIHRpbWV6b25lIElE
CisgKiAgICAgICAgICAgICAgICAgIGlzIG5laXRoZXIgYSBrbm93biBzeXN0ZW0gdGltZSB6b25l
IElEIG5vciBhCisgKiAgICAgICAgICAgICAgICAgIHZhbGlkIGN1c3RvbSB0aW1lem9uZSBJRCwg
VV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SCisgKiAgICAgICAgICAgICAgICAgIGlzIHNldC4KKyAq
IEByZXR1cm4gICAgICAgICAgVGhlIHJlc3VsdCBzdHJpbmcgbGVuZ3RoLCBub3QgaW5jbHVkaW5n
IHRoZSB0ZXJtaW5hdGluZworICogICAgICAgICAgICAgICAgICBudWxsLgorICogQHN0YWJsZSBJ
Q1UgNC4wCisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyCit1Y2FsX2dldENhbm9uaWNh
bFRpbWVab25lSUQoY29uc3QgVUNoYXIqIGlkLCBpbnQzMl90IGxlbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVQ2hhciogcmVzdWx0LCBpbnQzMl90IHJlc3VsdENhcGFjaXR5LCBVQm9v
bCAqaXNTeXN0ZW1JRCwgVUVycm9yQ29kZSogc3RhdHVzKTsKKy8qKgorICogR2V0IHRoZSByZXNv
dXJjZSBrZXl3b3JkIHZhbHVlIHN0cmluZyBkZXNpZ25hdGluZyB0aGUgY2FsZW5kYXIgdHlwZSBm
b3IgdGhlIFVDYWxlbmRhci4KKyAqIEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBxdWVyeS4K
KyAqIEBwYXJhbSBzdGF0dXMgVGhlIGVycm9yIGNvZGUgZm9yIHRoZSBvcGVyYXRpb24uCisgKiBA
cmV0dXJuIFRoZSByZXNvdXJjZSBrZXl3b3JkIHZhbHVlIHN0cmluZy4KKyAqIEBzdGFibGUgSUNV
IDQuMgorICovCitVX1NUQUJMRSBjb25zdCBjaGFyICogVV9FWFBPUlQyCit1Y2FsX2dldFR5cGUo
Y29uc3QgVUNhbGVuZGFyICpjYWwsIFVFcnJvckNvZGUqIHN0YXR1cyk7CisKKy8qKgorICogR2l2
ZW4gYSBrZXkgYW5kIGEgbG9jYWxlLCByZXR1cm5zIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMg
aW4gYSBwcmVmZXJyZWQKKyAqIG9yZGVyIHRoYXQgd291bGQgbWFrZSBhIGRpZmZlcmVuY2UuIFRo
ZXNlIGFyZSBhbGwgYW5kIG9ubHkgdGhvc2UgdmFsdWVzIHdoZXJlCisgKiB0aGUgb3BlbiAoY3Jl
YXRpb24pIG9mIHRoZSBzZXJ2aWNlIHdpdGggdGhlIGxvY2FsZSBmb3JtZWQgZnJvbSB0aGUgaW5w
dXQgbG9jYWxlCisgKiBwbHVzIGlucHV0IGtleXdvcmQgYW5kIHRoYXQgdmFsdWUgaGFzIGRpZmZl
cmVudCBiZWhhdmlvciB0aGFuIGNyZWF0aW9uIHdpdGggdGhlCisgKiBpbnB1dCBsb2NhbGUgYWxv
bmUuCisgKiBAcGFyYW0ga2V5ICAgICAgICAgICBvbmUgb2YgdGhlIGtleXMgc3VwcG9ydGVkIGJ5
IHRoaXMgc2VydmljZS4gIEZvciBub3csIG9ubHkKKyAqICAgICAgICAgICAgICAgICAgICAgICJj
YWxlbmRhciIgaXMgc3VwcG9ydGVkLgorICogQHBhcmFtIGxvY2FsZSAgICAgICAgdGhlIGxvY2Fs
ZQorICogQHBhcmFtIGNvbW1vbmx5VXNlZCAgaWYgc2V0IHRvIHRydWUgaXQgd2lsbCByZXR1cm4g
b25seSBjb21tb25seSB1c2VkIHZhbHVlcworICogICAgICAgICAgICAgICAgICAgICAgd2l0aCB0
aGUgZ2l2ZW4gbG9jYWxlIGluIHByZWZlcnJlZCBvcmRlci4gIE90aGVyd2lzZSwKKyAqICAgICAg
ICAgICAgICAgICAgICAgIGl0IHdpbGwgcmV0dXJuIGFsbCB0aGUgYXZhaWxhYmxlIHZhbHVlcyBm
b3IgdGhlIGxvY2FsZS4KKyAqIEBwYXJhbSBzdGF0dXMgZXJyb3Igc3RhdHVzCisgKiBAcmV0dXJu
IGEgc3RyaW5nIGVudW1lcmF0aW9uIG92ZXIga2V5d29yZCB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBr
ZXkgYW5kIHRoZSBsb2NhbGUuCisgKiBAc3RhYmxlIElDVSA0LjIKKyAqLworVV9TVEFCTEUgVUVu
dW1lcmF0aW9uKiBVX0VYUE9SVDIKK3VjYWxfZ2V0S2V5d29yZFZhbHVlc0ZvckxvY2FsZShjb25z
dCBjaGFyKiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
bG9jYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVCb29sIGNvbW1vbmx5VXNl
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiBzdGF0dXMpOwor
CisKKy8qKiBXZWVrZGF5IHR5cGVzLCBhcyByZXR1cm5lZCBieSB1Y2FsX2dldERheU9mV2Vla1R5
cGUoKS4KKyAqIEBzdGFibGUgSUNVIDQuNAorICovCitlbnVtIFVDYWxlbmRhcldlZWtkYXlUeXBl
IHsKKyAgLyoqCisgICAqIERlc2lnbmF0ZXMgYSBmdWxsIHdlZWtkYXkgKG5vIHBhcnQgb2YgdGhl
IGRheSBpcyBpbmNsdWRlZCBpbiB0aGUgd2Vla2VuZCkuCisgICAqIEBzdGFibGUgSUNVIDQuNCAK
KyAgICovCisgIFVDQUxfV0VFS0RBWSwKKyAgLyoqCisgICAqIERlc2lnbmF0ZXMgYSBmdWxsIHdl
ZWtlbmQgZGF5ICh0aGUgZW50aXJlIGRheSBpcyBpbmNsdWRlZCBpbiB0aGUgd2Vla2VuZCkuCisg
ICAqIEBzdGFibGUgSUNVIDQuNCAKKyAgICovCisgIFVDQUxfV0VFS0VORCwKKyAgLyoqCisgICAq
IERlc2lnbmF0ZXMgYSBkYXkgdGhhdCBzdGFydHMgYXMgYSB3ZWVrZGF5IGFuZCB0cmFuc2l0aW9u
cyB0byB0aGUgd2Vla2VuZC4KKyAgICogQ2FsbCB1Y2FsX2dldFdlZWtlbmRUcmFuc2l0aW9uKCkg
dG8gZ2V0IHRoZSB0aW1lIG9mIHRyYW5zaXRpb24uCisgICAqIEBzdGFibGUgSUNVIDQuNCAKKyAg
ICovCisgIFVDQUxfV0VFS0VORF9PTlNFVCwKKyAgLyoqCisgICAqIERlc2lnbmF0ZXMgYSBkYXkg
dGhhdCBzdGFydHMgYXMgdGhlIHdlZWtlbmQgYW5kIHRyYW5zaXRpb25zIHRvIGEgd2Vla2RheS4K
KyAgICogQ2FsbCB1Y2FsX2dldFdlZWtlbmRUcmFuc2l0aW9uKCkgdG8gZ2V0IHRoZSB0aW1lIG9m
IHRyYW5zaXRpb24uCisgICAqIEBzdGFibGUgSUNVIDQuNCAKKyAgICovCisgIFVDQUxfV0VFS0VO
RF9DRUFTRQorfTsKKworLyoqIEBzdGFibGUgSUNVIDQuNCAqLwordHlwZWRlZiBlbnVtIFVDYWxl
bmRhcldlZWtkYXlUeXBlIFVDYWxlbmRhcldlZWtkYXlUeXBlOworCisvKioKKyAqIFJldHVybnMg
d2hldGhlciB0aGUgZ2l2ZW4gZGF5IG9mIHRoZSB3ZWVrIGlzIGEgd2Vla2RheSwgYQorICogd2Vl
a2VuZCBkYXksIG9yIGEgZGF5IHRoYXQgdHJhbnNpdGlvbnMgZnJvbSBvbmUgdG8gdGhlIG90aGVy
LAorICogaW4gdGhpcyBjYWxlbmRhciBzeXN0ZW0uIElmIGEgdHJhbnNpdGlvbiBvY2N1cnMgYXQg
bWlkbmlnaHQsCisgKiB0aGVuIHRoZSBkYXlzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHRyYW5zaXRp
b24gd2lsbCBoYXZlIHRoZQorICogdHlwZSBVQ0FMX1dFRUtEQVkgb3IgVUNBTF9XRUVLRU5ELiBJ
ZiBhIHRyYW5zaXRpb24gb2NjdXJzIGF0IGEgdGltZQorICogb3RoZXIgdGhhbiBtaWRuaWdodCwg
dGhlbiB0aGUgZGF5IG9mIHRoZSB0cmFuc2l0aW9uIHdpbGwgaGF2ZQorICogdGhlIHR5cGUgVUNB
TF9XRUVLRU5EX09OU0VUIG9yIFVDQUxfV0VFS0VORF9DRUFTRS4gSW4gdGhpcyBjYXNlLCB0aGUK
KyAqIG1ldGhvZCBnZXRXZWVrZW5kVHJhbnNpdGlvbigpIHdpbGwgcmV0dXJuIHRoZSBwb2ludCBv
ZgorICogdHJhbnNpdGlvbi4KKyAqIEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBxdWVyeS4K
KyAqIEBwYXJhbSBkYXlPZldlZWsgVGhlIGRheSBvZiB0aGUgd2VlayB3aG9zZSB0eXBlIGlzIGRl
c2lyZWQgKFVDQUxfU1VOREFZLi5VQ0FMX1NBVFVSREFZKS4KKyAqIEBwYXJhbSBzdGF0dXMgVGhl
IGVycm9yIGNvZGUgZm9yIHRoZSBvcGVyYXRpb24uCisgKiBAcmV0dXJuIFRoZSBVQ2FsZW5kYXJX
ZWVrZGF5VHlwZSBmb3IgdGhlIGRheSBvZiB0aGUgd2Vlay4KKyAqIEBzdGFibGUgSUNVIDQuNAor
ICovCitVX1NUQUJMRSBVQ2FsZW5kYXJXZWVrZGF5VHlwZSBVX0VYUE9SVDIKK3VjYWxfZ2V0RGF5
T2ZXZWVrVHlwZShjb25zdCBVQ2FsZW5kYXIgKmNhbCwgVUNhbGVuZGFyRGF5c09mV2VlayBkYXlP
ZldlZWssIFVFcnJvckNvZGUqIHN0YXR1cyk7CisKKy8qKgorICogUmV0dXJucyB0aGUgdGltZSBk
dXJpbmcgdGhlIGRheSBhdCB3aGljaCB0aGUgd2Vla2VuZCBiZWdpbnMgb3IgZW5kcyBpbgorICog
dGhpcyBjYWxlbmRhciBzeXN0ZW0uICBJZiB1Y2FsX2dldERheU9mV2Vla1R5cGUoKSByZXJ0dXJu
cyBVQ0FMX1dFRUtFTkRfT05TRVQKKyAqIGZvciB0aGUgc3BlY2lmaWVkIGRheU9mV2VlaywgcmV0
dXJuIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSB3ZWVrZW5kIGJlZ2lucy4KKyAqIElmIHVjYWxfZ2V0
RGF5T2ZXZWVrVHlwZSgpIHJldHVybnMgVUNBTF9XRUVLRU5EX0NFQVNFIGZvciB0aGUgc3BlY2lm
aWVkIGRheU9mV2VlaywKKyAqIHJldHVybiB0aGUgdGltZSBhdCB3aGljaCB0aGUgd2Vla2VuZCBl
bmRzLiBJZiB1Y2FsX2dldERheU9mV2Vla1R5cGUoKSByZXR1cm5zCisgKiBzb21lIG90aGVyIFVD
YWxlbmRhcldlZWtkYXlUeXBlIGZvciB0aGUgc3BlY2lmaWVkIGRheU9mV2VlaywgaXMgaXQgYW4g
ZXJyb3IgY29uZGl0aW9uCisgKiAoVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SKS4KKyAqIEBwYXJh
bSBjYWwgVGhlIFVDYWxlbmRhciB0byBxdWVyeS4KKyAqIEBwYXJhbSBkYXlPZldlZWsgVGhlIGRh
eSBvZiB0aGUgd2VlayBmb3Igd2hpY2ggdGhlIHdlZWtlbmQgdHJhbnNpdGlvbiB0aW1lIGlzCisg
KiBkZXNpcmVkIChVQ0FMX1NVTkRBWS4uVUNBTF9TQVRVUkRBWSkuCisgKiBAcGFyYW0gc3RhdHVz
IFRoZSBlcnJvciBjb2RlIGZvciB0aGUgb3BlcmF0aW9uLgorICogQHJldHVybiBUaGUgbWlsbGlz
ZWNvbmRzIGFmdGVyIG1pZG5pZ2h0IGF0IHdoaWNoIHRoZSB3ZWVrZW5kIGJlZ2lucyBvciBlbmRz
LgorICogQHN0YWJsZSBJQ1UgNC40CisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyCit1
Y2FsX2dldFdlZWtlbmRUcmFuc2l0aW9uKGNvbnN0IFVDYWxlbmRhciAqY2FsLCBVQ2FsZW5kYXJE
YXlzT2ZXZWVrIGRheU9mV2VlaywgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworLyoqCisgKiBSZXR1
cm5zIFRSVUUgaWYgdGhlIGdpdmVuIFVEYXRlIGlzIGluIHRoZSB3ZWVrZW5kIGluCisgKiB0aGlz
IGNhbGVuZGFyIHN5c3RlbS4KKyAqIEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBxdWVyeS4K
KyAqIEBwYXJhbSBkYXRlIFRoZSBVRGF0ZSBpbiBxdWVzdGlvbi4KKyAqIEBwYXJhbSBzdGF0dXMg
VGhlIGVycm9yIGNvZGUgZm9yIHRoZSBvcGVyYXRpb24uCisgKiBAcmV0dXJuIFRSVUUgaWYgdGhl
IGdpdmVuIFVEYXRlIGlzIGluIHRoZSB3ZWVrZW5kIGluCisgKiB0aGlzIGNhbGVuZGFyIHN5c3Rl
bSwgRkFMU0Ugb3RoZXJ3aXNlLgorICogQHN0YWJsZSBJQ1UgNC40CisgKi8KK1VfU1RBQkxFIFVC
b29sIFVfRVhQT1JUMgordWNhbF9pc1dlZWtlbmQoY29uc3QgVUNhbGVuZGFyICpjYWwsIFVEYXRl
IGRhdGUsIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKworI2VuZGlmIC8qICNpZiAhVUNPTkZJR19O
T19GT1JNQVRUSU5HICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ljdS91bmljb2RlL3VkYXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29k
ZS91ZGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZDQ4MGM3ZGE1MTQ3NWIzOTNjZTBkM2M5YjcyMmNjNmRjNGQz
ZDBiYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29k
ZS91ZGF0LmgKQEAgLTAsMCArMSw5OTcgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgor
ICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMTAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGlu
ZXMKKyAqIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKgorKi8KKworI2lmbmRlZiBVREFUX0gKKyNkZWZpbmUgVURBVF9I
CisKKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorCisjaWYgIVVDT05GSUdfTk9fRk9STUFU
VElORworCisjaW5jbHVkZSAidW5pY29kZS9sb2NhbHBvaW50ZXIuaCIKKyNpbmNsdWRlICJ1bmlj
b2RlL3VjYWwuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VudW0uaCIKKy8qKgorICogXGZpbGUKKyAq
IFxicmllZiBDIEFQSTogRGF0ZUZvcm1hdAorICoKKyAqIDxoMj4gRGF0ZSBGb3JtYXQgQyBBUEk8
L2gyPgorICoKKyAqIERhdGUgRm9ybWF0IEMgQVBJICBjb25zaXN0cyBvZiBmdW5jdGlvbnMgdGhh
dCBjb252ZXJ0IGRhdGVzIGFuZAorICogdGltZXMgZnJvbSB0aGVpciBpbnRlcm5hbCByZXByZXNl
bnRhdGlvbnMgdG8gdGV4dHVhbCBmb3JtIGFuZCBiYWNrIGFnYWluIGluIGEKKyAqIGxhbmd1YWdl
LWluZGVwZW5kZW50IG1hbm5lci4gQ29udmVydGluZyBmcm9tIHRoZSBpbnRlcm5hbCByZXByZXNl
bnRhdGlvbiAobWlsbGlzZWNvbmRzCisgKiBzaW5jZSBtaWRuaWdodCwgSmFudWFyeSAxLCAxOTcw
KSB0byB0ZXh0IGlzIGtub3duIGFzICJmb3JtYXR0aW5nLCIgYW5kIGNvbnZlcnRpbmcKKyAqIGZy
b20gdGV4dCB0byBtaWxsaXMgaXMga25vd24gYXMgInBhcnNpbmcuIiAgV2UgY3VycmVudGx5IGRl
ZmluZSBvbmx5IG9uZSBjb25jcmV0ZQorICogc3RydWN0dXJlIFVEYXRlRm9ybWF0LCB3aGljaCBj
YW4gaGFuZGxlIHByZXR0eSBtdWNoIGFsbCBub3JtYWwKKyAqIGRhdGUgZm9ybWF0dGluZyBhbmQg
cGFyc2luZyBhY3Rpb25zLgorICogPFA+CisgKiBEYXRlIEZvcm1hdCBoZWxwcyB5b3UgdG8gZm9y
bWF0IGFuZCBwYXJzZSBkYXRlcyBmb3IgYW55IGxvY2FsZS4gWW91ciBjb2RlIGNhbgorICogYmUg
Y29tcGxldGVseSBpbmRlcGVuZGVudCBvZiB0aGUgbG9jYWxlIGNvbnZlbnRpb25zIGZvciBtb250
aHMsIGRheXMgb2YgdGhlCisgKiB3ZWVrLCBvciBldmVuIHRoZSBjYWxlbmRhciBmb3JtYXQ6IGx1
bmFyIHZzLiBzb2xhci4KKyAqIDxQPgorICogVG8gZm9ybWF0IGEgZGF0ZSBmb3IgdGhlIGN1cnJl
bnQgTG9jYWxlIHdpdGggZGVmYXVsdCB0aW1lIGFuZCBkYXRlIHN0eWxlLAorICogdXNlIG9uZSBv
ZiB0aGUgc3RhdGljIGZhY3RvcnkgbWV0aG9kczoKKyAqIDxwcmU+CisgKiBcY29kZQorICogIFVF
cnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICogIFVDaGFyICpteVN0cmluZzsKKyAq
ICBpbnQzMl90IG15U3RybGVuID0gMDsKKyAqICBVRGF0ZUZvcm1hdCogZGZtdCA9IHVkYXRfb3Bl
bihVREFUX0RFRkFVTFQsIFVEQVRfREVGQVVMVCwgTlVMTCwgTlVMTCwgLTEsIE5VTEwsIC0xLCAm
c3RhdHVzKTsKKyAqICBteVN0cmxlbiA9IHVkYXRfZm9ybWF0KGRmbXQsIG15RGF0ZSwgTlVMTCwg
bXlTdHJsZW4sIE5VTEwsICZzdGF0dXMpOworICogIGlmIChzdGF0dXM9PVVfQlVGRkVSX09WRVJG
TE9XX0VSUk9SKXsKKyAqICAgICAgc3RhdHVzPVVfWkVST19FUlJPUjsKKyAqICAgICAgbXlTdHJp
bmc9KFVDaGFyKiltYWxsb2Moc2l6ZW9mKFVDaGFyKSAqIChteVN0cmxlbisxKSApOworICogICAg
ICB1ZGF0X2Zvcm1hdChkZm10LCBteURhdGUsIG15U3RyaW5nLCBteVN0cmxlbisxLCBOVUxMLCAm
c3RhdHVzKTsKKyAqICB9CisgKiBcZW5kY29kZQorICogPC9wcmU+CisgKiBJZiB5b3UgYXJlIGZv
cm1hdHRpbmcgbXVsdGlwbGUgbnVtYmVycywgaXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gZ2V0IHRo
ZQorICogZm9ybWF0IGFuZCB1c2UgaXQgbXVsdGlwbGUgdGltZXMgc28gdGhhdCB0aGUgc3lzdGVt
IGRvZXNuJ3QgaGF2ZSB0byBmZXRjaCB0aGUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2Nh
bCBsYW5ndWFnZSBhbmQgY291bnRyeSBjb252ZW50aW9ucyBtdWx0aXBsZSB0aW1lcy4KKyAqIDxw
cmU+CisgKiBcY29kZQorICogIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICog
IGludDMyX3QgaSwgbXlTdHJsZW4gPSAwOworICogIFVDaGFyKiBteVN0cmluZzsKKyAqICBjaGFy
IGJ1ZmZlclsxMDI0XTsKKyAqICBVRGF0ZSBteURhdGVBcnJbXSA9IHsgMC4wLCAxMDAwMDAwMDAu
MCwgMjAwMDAwMDAwMC4wIH07IC8vIHRlc3QgdmFsdWVzCisgKiAgVURhdGVGb3JtYXQqIGRmID0g
dWRhdF9vcGVuKFVEQVRfREVGQVVMVCwgVURBVF9ERUZBVUxULCBOVUxMLCBOVUxMLCAtMSwgTlVM
TCwgMCwgJnN0YXR1cyk7CisgKiAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworICogICAgICBt
eVN0cmxlbiA9IHVkYXRfZm9ybWF0KGRmLCBteURhdGVBcnJbaV0sIE5VTEwsIG15U3RybGVuLCBO
VUxMLCAmc3RhdHVzKTsKKyAqICAgICAgaWYoc3RhdHVzID09IFVfQlVGRkVSX09WRVJGTE9XX0VS
Uk9SKXsKKyAqICAgICAgICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAqICAgICAgICAgIG15
U3RyaW5nID0gKFVDaGFyKiltYWxsb2Moc2l6ZW9mKFVDaGFyKSAqIChteVN0cmxlbisxKSApOwor
ICogICAgICAgICAgdWRhdF9mb3JtYXQoZGYsIG15RGF0ZUFycltpXSwgbXlTdHJpbmcsIG15U3Ry
bGVuKzEsIE5VTEwsICZzdGF0dXMpOworICogICAgICAgICAgcHJpbnRmKCIlc1xuIiwgdV9hdXN0
cmNweShidWZmZXIsIG15U3RyaW5nKSApOworICogICAgICAgICAgZnJlZShteVN0cmluZyk7Cisg
KiAgICAgIH0KKyAqICB9CisgKiBcZW5kY29kZQorICogPC9wcmU+CisgKiBUbyBnZXQgc3BlY2lm
aWMgZmllbGRzIG9mIGEgZGF0ZSwgeW91IGNhbiB1c2UgVUZpZWxkUG9zaXRpb24gdG8KKyAqIGdl
dCBzcGVjaWZpYyBmaWVsZHMuCisgKiA8cHJlPgorICogXGNvZGUKKyAqICBVRXJyb3JDb2RlIHN0
YXR1cyA9IFVfWkVST19FUlJPUjsKKyAqICBVRmllbGRQb3NpdGlvbiBwb3M7CisgKiAgVUNoYXIg
Km15U3RyaW5nOworICogIGludDMyX3QgbXlTdHJsZW4gPSAwOworICogIGNoYXIgYnVmZmVyWzEw
MjRdOworICoKKyAqICBwb3MuZmllbGQgPSAxOyAgLy8gU2FtZSBhcyB0aGUgRGF0ZUZvcm1hdDo6
RUZpZWxkIGVudW0KKyAqICBVRGF0ZUZvcm1hdCogZGZtdCA9IHVkYXRfb3BlbihVREFUX0RFRkFV
TFQsIFVEQVRfREVGQVVMVCwgTlVMTCwgLTEsIE5VTEwsIDAsICZzdGF0dXMpOworICogIG15U3Ry
bGVuID0gdWRhdF9mb3JtYXQoZGZtdCwgbXlEYXRlLCBOVUxMLCBteVN0cmxlbiwgJnBvcywgJnN0
YXR1cyk7CisgKiAgaWYgKHN0YXR1cz09VV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpeworICogICAg
ICBzdGF0dXM9VV9aRVJPX0VSUk9SOworICogICAgICBteVN0cmluZz0oVUNoYXIqKW1hbGxvYyhz
aXplb2YoVUNoYXIpICogKG15U3RybGVuKzEpICk7CisgKiAgICAgIHVkYXRfZm9ybWF0KGRmbXQs
IG15RGF0ZSwgbXlTdHJpbmcsIG15U3RybGVuKzEsICZwb3MsICZzdGF0dXMpOworICogIH0KKyAq
ICBwcmludGYoImRhdGUgZm9ybWF0OiAlc1xuIiwgdV9hdXN0cmNweShidWZmZXIsIG15U3RyaW5n
KSk7CisgKiAgYnVmZmVyW3Bvcy5lbmRJbmRleF0gPSAwOyAgIC8vIE5VTEwgdGVybWluYXRlIHRo
ZSBzdHJpbmcuCisgKiAgcHJpbnRmKCJVRmllbGRQb3NpdGlvbiBwb3NpdGlvbiBlcXVhbHMgJXNc
biIsICZidWZmZXJbcG9zLmJlZ2luSW5kZXhdKTsKKyAqIFxlbmRjb2RlCisgKiA8L3ByZT4KKyAq
IFRvIGZvcm1hdCBhIGRhdGUgZm9yIGEgZGlmZmVyZW50IExvY2FsZSwgc3BlY2lmeSBpdCBpbiB0
aGUgY2FsbCB0bworICogdWRhdF9vcGVuKCkKKyAqIDxwcmU+CisgKiBcY29kZQorICogICAgICAg
IFVEYXRlRm9ybWF0KiBkZiA9IHVkYXRfb3BlbihVREFUX1NIT1JULCBVREFUX1NIT1JULCAiZnJf
RlIiLCBOVUxMLCAtMSwgTlVMTCwgMCwgJnN0YXR1cyk7CisgKiBcZW5kY29kZQorICogPC9wcmU+
CisgKiBZb3UgY2FuIHVzZSBhIERhdGVGb3JtYXQgQVBJIHVkYXRfcGFyc2UoKSB0byBwYXJzZS4K
KyAqIDxwcmU+CisgKiBcY29kZQorICogIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9S
OworICogIGludDMyX3QgcGFyc2Vwb3M9MDsKKyAqICBVRGF0ZSBteURhdGUgPSB1ZGF0X3BhcnNl
KGRmLCBteVN0cmluZywgdV9zdHJsZW4obXlTdHJpbmcpLCAmcGFyc2Vwb3MsICZzdGF0dXMpOwor
ICogXGVuZGNvZGUKKyAqIDwvcHJlPgorICogIFlvdSBjYW4gcGFzcyBpbiBkaWZmZXJlbnQgb3B0
aW9ucyBmb3IgdGhlIGFyZ3VtZW50cyBmb3IgZGF0ZSBhbmQgdGltZSBzdHlsZQorICogIHRvIGNv
bnRyb2wgdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0OyBmcm9tIFNIT1JUIHRvIE1FRElVTSB0byBM
T05HIHRvIEZVTEwuCisgKiAgVGhlIGV4YWN0IHJlc3VsdCBkZXBlbmRzIG9uIHRoZSBsb2NhbGUs
IGJ1dCBnZW5lcmFsbHk6CisgKiAgc2VlIFVEYXRlRm9ybWF0U3R5bGUgZm9yIG1vcmUgZGV0YWls
cworICogPHVsIHR5cGU9cm91bmQ+CisgKiAgIDxsaT4gICBVREFUX1NIT1JUIGlzIGNvbXBsZXRl
bHkgbnVtZXJpYywgc3VjaCBhcyAxMi8xMy81MiBvciAzOjMwcG0KKyAqICAgPGxpPiAgIFVEQVRf
TUVESVVNIGlzIGxvbmdlciwgc3VjaCBhcyBKYW4gMTIsIDE5NTIKKyAqICAgPGxpPiAgIFVEQVRf
TE9ORyBpcyBsb25nZXIsIHN1Y2ggYXMgSmFudWFyeSAxMiwgMTk1MiBvciAzOjMwOjMycG0KKyAq
ICAgPGxpPiAgIFVEQVRfRlVMTCBpcyBwcmV0dHkgY29tcGxldGVseSBzcGVjaWZpZWQsIHN1Y2gg
YXMKKyAqICAgICAgICAgIFR1ZXNkYXksIEFwcmlsIDEyLCAxOTUyIEFEIG9yIDM6MzA6NDJwbSBQ
U1QuCisgKiA8L3VsPgorICogWW91IGNhbiBhbHNvIHNldCB0aGUgdGltZSB6b25lIG9uIHRoZSBm
b3JtYXQgaWYgeW91IHdpc2guCisgKiA8UD4KKyAqIFlvdSBjYW4gYWxzbyB1c2UgZm9ybXMgb2Yg
dGhlIHBhcnNlIGFuZCBmb3JtYXQgbWV0aG9kcyB3aXRoIFBhcnNlIFBvc2l0aW9uIGFuZAorICog
VUZpZWxkUG9zaXRpb24gdG8gYWxsb3cgeW91IHRvCisgKiA8dWwgdHlwZT1yb3VuZD4KKyAqICAg
PGxpPiAgIFByb2dyZXNzaXZlbHkgcGFyc2UgdGhyb3VnaCBwaWVjZXMgb2YgYSBzdHJpbmcuCisg
KiAgIDxsaT4gICBBbGlnbiBhbnkgcGFydGljdWxhciBmaWVsZCwgb3IgZmluZCBvdXQgd2hlcmUg
aXQgaXMgZm9yIHNlbGVjdGlvbgorICogICAgICAgICAgb24gdGhlIHNjcmVlbi4KKyAqIDwvdWw+
CisgKi8KKworLyoqIEEgZGF0ZSBmb3JtYXR0ZXIuCisgKiAgRm9yIHVzYWdlIGluIEMgcHJvZ3Jh
bXMuCisgKiAgQHN0YWJsZSBJQ1UgMi42CisgKi8KK3R5cGVkZWYgdm9pZCogVURhdGVGb3JtYXQ7
CisKKy8qKiBUaGUgcG9zc2libGUgZGF0ZS90aW1lIGZvcm1hdCBzdHlsZXMgCisgKiAgQHN0YWJs
ZSBJQ1UgMi42CisgKi8KK3R5cGVkZWYgZW51bSBVRGF0ZUZvcm1hdFN0eWxlIHsKKyAgICAvKiog
RnVsbCBzdHlsZSAqLworICAgIFVEQVRfRlVMTCwKKyAgICAvKiogTG9uZyBzdHlsZSAqLworICAg
IFVEQVRfTE9ORywKKyAgICAvKiogTWVkaXVtIHN0eWxlICovCisgICAgVURBVF9NRURJVU0sCisg
ICAgLyoqIFNob3J0IHN0eWxlICovCisgICAgVURBVF9TSE9SVCwKKyAgICAvKiogRGVmYXVsdCBz
dHlsZSAqLworICAgIFVEQVRfREVGQVVMVCA9IFVEQVRfTUVESVVNLAorCisgICAgLyoqIEJpdGZp
ZWxkIGZvciByZWxhdGl2ZSBkYXRlICovCisgICAgVURBVF9SRUxBVElWRSA9ICgxIDw8IDcpLAor
ICAgIAorICAgIFVEQVRfRlVMTF9SRUxBVElWRSA9IFVEQVRfRlVMTCB8IFVEQVRfUkVMQVRJVkUs
CisgICAgICAgIAorICAgIFVEQVRfTE9OR19SRUxBVElWRSA9IFVEQVRfTE9ORyB8IFVEQVRfUkVM
QVRJVkUsCisgICAgCisgICAgVURBVF9NRURJVU1fUkVMQVRJVkUgPSBVREFUX01FRElVTSB8IFVE
QVRfUkVMQVRJVkUsCisgICAgCisgICAgVURBVF9TSE9SVF9SRUxBVElWRSA9IFVEQVRfU0hPUlQg
fCBVREFUX1JFTEFUSVZFLAorICAgIAorICAgIAorICAgIC8qKiBObyBzdHlsZSAqLworICAgIFVE
QVRfTk9ORSA9IC0xLAorICAgIC8qKiBmb3IgaW50ZXJuYWwgQVBJIHVzZSBvbmx5ICovCisgICAg
VURBVF9JR05PUkUgPSAtMgorCit9IFVEYXRlRm9ybWF0U3R5bGU7CisKKworLyoqCisgKiBAewor
ICogQmVsb3cgYXJlIGEgc2V0IG9mIHByZS1kZWZpbmVkIHNrZWxldG9ucy4KKyAqCisgKiA8UD4K
KyAqIEEgc2tlbGV0b24gCisgKiA8b2w+CisgKiA8bGk+CisgKiAgICBvbmx5IGtlZXBzIHRoZSBm
aWVsZCBwYXR0ZXJuIGxldHRlciBhbmQgaWdub3JlcyBhbGwgb3RoZXIgcGFydHMgCisgKiAgICBp
biBhIHBhdHRlcm4sIHN1Y2ggYXMgc3BhY2UsIHB1bmN0dWF0aW9ucywgYW5kIHN0cmluZyBsaXRl
cmFscy4KKyAqIDwvbGk+CisgKiA8bGk+CisgKiAgICBoaWRlcyB0aGUgb3JkZXIgb2YgZmllbGRz
LiAKKyAqIDwvbGk+CisgKiA8bGk+CisgKiAgICBtaWdodCBoaWRlIGEgZmllbGQncyBwYXR0ZXJu
IGxldHRlciBsZW5ndGguCisgKgorICogICAgRm9yIHRob3NlIG5vbi1kaWdpdCBjYWxlbmRhciBm
aWVsZHMsIHRoZSBwYXR0ZXJuIGxldHRlciBsZW5ndGggaXMgCisgKiAgICBpbXBvcnRhbnQsIHN1
Y2ggYXMgTU1NLCBNTU1NLCBhbmQgTU1NTU07IEVFRSBhbmQgRUVFRSwgCisgKiAgICBhbmQgdGhl
IGZpZWxkJ3MgcGF0dGVybiBsZXR0ZXIgbGVuZ3RoIGlzIGhvbm9yZWQuCisgKiAgICAKKyAqICAg
IEZvciB0aGUgZGlnaXQgY2FsZW5kYXIgZmllbGRzLCAgc3VjaCBhcyBNIG9yIE1NLCBkIG9yIGRk
LCB5eSBvciB5eXl5LCAKKyAqICAgIHRoZSBmaWVsZCBwYXR0ZXJuIGxlbmd0aCBpcyBpZ25vcmVk
IGFuZCB0aGUgYmVzdCBtYXRjaCwgd2hpY2ggaXMgZGVmaW5lZCAKKyAqICAgIGluIGRhdGUgdGlt
ZSBwYXR0ZXJucywgd2lsbCBiZSByZXR1cm5lZCB3aXRob3V0IGhvbm9yIHRoZSBmaWVsZCBwYXR0
ZXJuCisgKiAgICBsZXR0ZXIgbGVuZ3RoIGluIHNrZWxldG9uLgorICogPC9saT4KKyAqIDwvb2w+
CisgKgorICogQHN0YWJsZSBJQ1UgNC4wCisgKi8KKworI2RlZmluZSBVREFUX01JTlVURV9TRUNP
TkQgICAgICAgICAgICAgICJtcyIKKyNkZWZpbmUgVURBVF9IT1VSMjRfTUlOVVRFICAgICAgICAg
ICAgICAiSG0iCisjZGVmaW5lIFVEQVRfSE9VUjI0X01JTlVURV9TRUNPTkQgICAgICAgIkhtcyIg
ICAgICAKKyNkZWZpbmUgVURBVF9IT1VSX01JTlVURV9TRUNPTkQgICAgICAgICAiaG1zIgorI2Rl
ZmluZSBVREFUX1NUQU5EQUxPTkVfTU9OVEggICAgICAgICAgICJMTExMIgorI2RlZmluZSBVREFU
X0FCQlJfU1RBTkRBTE9ORV9NT05USCAgICAgICJMTEwiCisjZGVmaW5lIFVEQVRfWUVBUl9RVUFS
VEVSICAgICAgICAgICAgICAgInlRUVEiCisjZGVmaW5lIFVEQVRfWUVBUl9BQkJSX1FVQVJURVIg
ICAgICAgICAgInlRIgorCisvKiogQH0gKi8KKworLyoqCisgKiBAeworICogQmVsb3cgYXJlIGEg
c2V0IG9mIHByZS1kZWZpbmVkIHNrZWxldG9ucyB0aGF0IAorICogaGF2ZSBwcmUtZGVmaW5lZCBp
bnRlcnZhbCBwYXR0ZXJucyBpbiByZXNvdXJjZSBmaWxlcy4KKyAqIFVzZXJzIGFyZSBlbmNvdXJh
Z2VkIHRvIHVzZSB0aGVtIGluIGRhdGUgaW50ZXJ2YWwgZm9ybWF0IGZhY3RvcnkgbWV0aG9kcy4K
KyAqIAorICogQHN0YWJsZSBJQ1UgNC4wCisgKi8KKyNkZWZpbmUgVURBVF9IT1VSX01JTlVURSAg
ICAgICAgICAgICAgICAiaG0iCisjZGVmaW5lIFVEQVRfWUVBUiAgICAgICAgICAgICAgICAgICAg
ICAgInkiCisjZGVmaW5lIFVEQVRfREFZICAgICAgICAgICAgICAgICAgICAgICAgImQiCisjZGVm
aW5lIFVEQVRfTlVNX01PTlRIX1dFRUtEQVlfREFZICAgICAgIk1FZCIKKyNkZWZpbmUgVURBVF9Z
RUFSX05VTV9NT05USCAgICAgICAgICAgICAieU0iICAgICAgICAgICAgICAKKyNkZWZpbmUgVURB
VF9OVU1fTU9OVEhfREFZICAgICAgICAgICAgICAiTWQiCisjZGVmaW5lIFVEQVRfWUVBUl9OVU1f
TU9OVEhfV0VFS0RBWV9EQVkgInlNRWQiCisjZGVmaW5lIFVEQVRfQUJCUl9NT05USF9XRUVLREFZ
X0RBWSAgICAgIk1NTUVkIgorI2RlZmluZSBVREFUX1lFQVJfTU9OVEggICAgICAgICAgICAgICAg
ICJ5TU1NTSIKKyNkZWZpbmUgVURBVF9ZRUFSX0FCQlJfTU9OVEggICAgICAgICAgICAieU1NTSIK
KyNkZWZpbmUgVURBVF9NT05USF9EQVkgICAgICAgICAgICAgICAgICAiTU1NTWQiCisjZGVmaW5l
IFVEQVRfQUJCUl9NT05USF9EQVkgICAgICAgICAgICAgIk1NTWQiIAorI2RlZmluZSBVREFUX01P
TlRIX1dFRUtEQVlfREFZICAgICAgICAgICJNTU1NRUVFRWQiCisjZGVmaW5lIFVEQVRfWUVBUl9B
QkJSX01PTlRIX1dFRUtEQVlfREFZICJ5TU1NRWQiIAorI2RlZmluZSBVREFUX1lFQVJfTU9OVEhf
V0VFS0RBWV9EQVkgICAgICJ5TU1NTUVFRUVkIgorI2RlZmluZSBVREFUX1lFQVJfTU9OVEhfREFZ
ICAgICAgICAgICAgICJ5TU1NTWQiCisjZGVmaW5lIFVEQVRfWUVBUl9BQkJSX01PTlRIX0RBWSAg
ICAgICAgInlNTU1kIgorI2RlZmluZSBVREFUX1lFQVJfTlVNX01PTlRIX0RBWSAgICAgICAgICJ5
TWQiCisjZGVmaW5lIFVEQVRfTlVNX01PTlRIICAgICAgICAgICAgICAgICAgIk0iCisjZGVmaW5l
IFVEQVRfQUJCUl9NT05USCAgICAgICAgICAgICAgICAgIk1NTSIKKyNkZWZpbmUgVURBVF9NT05U
SCAgICAgICAgICAgICAgICAgICAgICAiTU1NTSIKKyNkZWZpbmUgVURBVF9IT1VSX01JTlVURV9H
RU5FUklDX1RaICAgICAiaG12IgorI2RlZmluZSBVREFUX0hPVVJfTUlOVVRFX1RaICAgICAgICAg
ICAgICJobXoiCisjZGVmaW5lIFVEQVRfSE9VUiAgICAgICAgICAgICAgICAgICAgICAgImgiCisj
ZGVmaW5lIFVEQVRfSE9VUl9HRU5FUklDX1RaICAgICAgICAgICAgImh2IgorI2RlZmluZSBVREFU
X0hPVVJfVFogICAgICAgICAgICAgICAgICAgICJoeiIKKworLyoqIEB9ICovCisKKworLyoqCisg
KiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvcnMgZm9yIGZvcm1hdCBm
aWVsZHMKKyAqIGRlZmluZWQgYnkgRGF0ZUZvcm1hdCBhbmQgVURhdGVGb3JtYXQuCisgKiBAc3Rh
YmxlIElDVSAzLjAKKyAqLwordHlwZWRlZiBlbnVtIFVEYXRlRm9ybWF0RmllbGQgeworICAgIC8q
KgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAn
RycgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfRVJB
IGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfRVJBX0ZJ
RUxEID0gMCwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0
aW9uIHNlbGVjdG9yIGZvciAneScgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRp
bmcgdG8gdGhlIFVDQUxfWUVBUiBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAg
Ki8KKyAgICBVREFUX1lFQVJfRklFTEQgPSAxLAorCisgICAgLyoqCisgICAgICogRmllbGRQb3Np
dGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdNJyBmaWVsZCBhbGlnbm1lbnQs
CisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9NT05USCBmaWVsZC4KKyAgICAgKiBA
c3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFUX01PTlRIX0ZJRUxEID0gMiwKKworICAg
IC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZv
ciAnZCcgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxf
REFURSBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFUX0RB
VEVfRklFTEQgPSAzLAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxk
UG9zaXRpb24gc2VsZWN0b3IgZm9yICdrJyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVz
cG9uZGluZyB0byB0aGUgVUNBTF9IT1VSX09GX0RBWSBmaWVsZC4KKyAgICAgKiBVREFUX0hPVVJf
T0ZfREFZMV9GSUVMRCBpcyB1c2VkIGZvciB0aGUgb25lLWJhc2VkIDI0LWhvdXIgY2xvY2suCisg
ICAgICogRm9yIGV4YW1wbGUsIDIzOjU5ICsgMDE6MDAgcmVzdWx0cyBpbiAyNDo1OS4KKyAgICAg
KiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFUX0hPVVJfT0ZfREFZMV9GSUVMRCA9
IDQsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBz
ZWxlY3RvciBmb3IgJ0gnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRv
IHRoZSBVQ0FMX0hPVVJfT0ZfREFZIGZpZWxkLgorICAgICAqIFVEQVRfSE9VUl9PRl9EQVkwX0ZJ
RUxEIGlzIHVzZWQgZm9yIHRoZSB6ZXJvLWJhc2VkIDI0LWhvdXIgY2xvY2suCisgICAgICogRm9y
IGV4YW1wbGUsIDIzOjU5ICsgMDE6MDAgcmVzdWx0cyBpbiAwMDo1OS4KKyAgICAgKiBAc3RhYmxl
IElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFUX0hPVVJfT0ZfREFZMF9GSUVMRCA9IDUsCisKKyAg
ICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBm
b3IgJ20nIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FM
X01JTlVURSBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFU
X01JTlVURV9GSUVMRCA9IDYsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBV
RmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ3MnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBj
b3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX1NFQ09ORCBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElD
VSAzLjAKKyAgICAgKi8KKyAgICBVREFUX1NFQ09ORF9GSUVMRCA9IDcsCisKKyAgICAvKioKKyAg
ICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ1MnIGZp
ZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX01JTExJU0VD
T05EIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfRlJB
Q1RJT05BTF9TRUNPTkRfRklFTEQgPSA4LAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlv
biBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdFJyBmaWVsZCBhbGlnbm1lbnQsCisg
ICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9EQVlfT0ZfV0VFSyBmaWVsZC4KKyAgICAg
KiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFUX0RBWV9PRl9XRUVLX0ZJRUxEID0g
OSwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNl
bGVjdG9yIGZvciAnRCcgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8g
dGhlIFVDQUxfREFZX09GX1lFQVIgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAg
ICovCisgICAgVURBVF9EQVlfT0ZfWUVBUl9GSUVMRCA9IDEwLAorCisgICAgLyoqCisgICAgICog
RmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdGJyBmaWVsZCBh
bGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9EQVlfT0ZfV0VFS19J
Tl9NT05USCBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFU
X0RBWV9PRl9XRUVLX0lOX01PTlRIX0ZJRUxEID0gMTEsCisKKyAgICAvKioKKyAgICAgKiBGaWVs
ZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ3cnIGZpZWxkIGFsaWdu
bWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX1dFRUtfT0ZfWUVBUiBmaWVs
ZC4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFUX1dFRUtfT0ZfWUVB
Ul9GSUVMRCA9IDEyLAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxk
UG9zaXRpb24gc2VsZWN0b3IgZm9yICdXJyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVz
cG9uZGluZyB0byB0aGUgVUNBTF9XRUVLX09GX01PTlRIIGZpZWxkLgorICAgICAqIEBzdGFibGUg
SUNVIDMuMAorICAgICAqLworICAgIFVEQVRfV0VFS19PRl9NT05USF9GSUVMRCA9IDEzLAorCisg
ICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3Ig
Zm9yICdhJyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNB
TF9BTV9QTSBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFU
X0FNX1BNX0ZJRUxEID0gMTQsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBV
RmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ2gnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBj
b3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0hPVVIgZmllbGQuCisgICAgICogVURBVF9IT1VSMV9G
SUVMRCBpcyB1c2VkIGZvciB0aGUgb25lLWJhc2VkIDEyLWhvdXIgY2xvY2suCisgICAgICogRm9y
IGV4YW1wbGUsIDExOjMwIFBNICsgMSBob3VyIHJlc3VsdHMgaW4gMTI6MzAgQU0uCisgICAgICog
QHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9IT1VSMV9GSUVMRCA9IDE1LAorCisg
ICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3Ig
Zm9yICdLJyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNB
TF9IT1VSIGZpZWxkLgorICAgICAqIFVEQVRfSE9VUjBfRklFTEQgaXMgdXNlZCBmb3IgdGhlIHpl
cm8tYmFzZWQgMTItaG91ciBjbG9jay4KKyAgICAgKiBGb3IgZXhhbXBsZSwgMTE6MzAgUE0gKyAx
IGhvdXIgcmVzdWx0cyBpbiAwMDozMCBBTS4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAg
Ki8KKyAgICBVREFUX0hPVVIwX0ZJRUxEID0gMTYsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBv
c2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ3onIGZpZWxkIGFsaWdubWVu
dCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX1pPTkVfT0ZGU0VUIGFuZAorICAg
ICAqIFVDQUxfRFNUX09GRlNFVCBmaWVsZHMuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAg
ICovCisgICAgVURBVF9USU1FWk9ORV9GSUVMRCA9IDE3LAorCisgICAgLyoqCisgICAgICogRmll
bGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdZJyBmaWVsZCBhbGln
bm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9ZRUFSX1dPWSBmaWVsZC4K
KyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFUX1lFQVJfV09ZX0ZJRUxE
ID0gMTgsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlv
biBzZWxlY3RvciBmb3IgJ2UnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5n
IHRvIHRoZSBVQ0FMX0RPV19MT0NBTCBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAg
ICAgKi8KKyAgICBVREFUX0RPV19MT0NBTF9GSUVMRCA9IDE5LAorCisgICAgLyoqCisgICAgICog
RmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICd1JyBmaWVsZCBh
bGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9FWFRFTkRFRF9ZRUFS
IGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfRVhURU5E
RURfWUVBUl9GSUVMRCA9IDIwLAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQg
VUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdnJyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICog
Y29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9KVUxJQU5fREFZIGZpZWxkLgorICAgICAqIEBzdGFi
bGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfSlVMSUFOX0RBWV9GSUVMRCA9IDIxLAorCisg
ICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3Ig
Zm9yICdBJyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNB
TF9NSUxMSVNFQ09ORFNfSU5fREFZIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAg
ICAqLworICAgIFVEQVRfTUlMTElTRUNPTkRTX0lOX0RBWV9GSUVMRCA9IDIyLAorCisgICAgLyoq
CisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICda
JyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9aT05F
X09GRlNFVCBhbmQKKyAgICAgKiBVQ0FMX0RTVF9PRkZTRVQgZmllbGRzLgorICAgICAqIEBzdGFi
bGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfVElNRVpPTkVfUkZDX0ZJRUxEID0gMjMsCisK
KyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3Rv
ciBmb3IgJ3YnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBV
Q0FMX1pPTkVfT0ZGU0VUIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuNAorICAgICAqLwor
ICAgIFVEQVRfVElNRVpPTkVfR0VORVJJQ19GSUVMRCA9IDI0LAorICAgIC8qKgorICAgICAqIEZp
ZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdjJyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29y
cmVzcG9uZGluZyB0byB0aGUge0BsaW5rICNVQ0FMX0RPV19MT0NBTH0gZmllbGQuCisgICAgICog
VGhpcyBkaXNwbGF5cyB0aGUgc3RhbmQgYWxvbmUgZGF5IG5hbWUsIGlmIGF2YWlsYWJsZS4KKyAg
ICAgKiBAc3RhYmxlIElDVSAzLjQKKyAgICAgKi8KKyAgICBVREFUX1NUQU5EQUxPTkVfREFZX0ZJ
RUxEID0gMjUsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAn
TCcgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHtAbGluayAj
VUNBTF9NT05USH0gZmllbGQuCisgICAgICogVGhpcyBkaXNwbGF5cyB0aGUgc3RhbmQgYWxvbmUg
bW9udGggbmFtZSwgaWYgYXZhaWxhYmxlLgorICAgICAqIEBzdGFibGUgSUNVIDMuNAorICAgICAq
LworICAgIFVEQVRfU1RBTkRBTE9ORV9NT05USF9GSUVMRCA9IDI2LAorCisgICAgLyoqCisgICAg
ICogRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgIlEiIGZpZWxkIGFsaWdubWVudCwKKyAgICAg
KiBjb3JyZXNwb25kaW5nIHRvIHF1YXJ0ZXJzLiBUaGlzIGlzIGltcGxlbWVudGVkCisgICAgICog
dXNpbmcgdGhlIHtAbGluayAjVUNBTF9NT05USH0gZmllbGQuIFRoaXMKKyAgICAgKiBkaXNwbGF5
cyB0aGUgcXVhcnRlci4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjYKKyAgICAgKi8KKyAgICBVREFU
X1FVQVJURVJfRklFTEQgPSAyNywKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gc2Vs
ZWN0b3IgZm9yIHRoZSAicSIgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcg
dG8gc3RhbmQtYWxvbmUgcXVhcnRlcnMuIFRoaXMgaXMKKyAgICAgKiBpbXBsZW1lbnRlZCB1c2lu
ZyB0aGUge0BsaW5rICNVQ0FMX01PTlRIfSBmaWVsZC4KKyAgICAgKiBUaGlzIGRpc3BsYXlzIHRo
ZSBzdGFuZC1hbG9uZSBxdWFydGVyLgorICAgICAqIEBzdGFibGUgSUNVIDMuNgorICAgICAqLwor
ICAgIFVEQVRfU1RBTkRBTE9ORV9RVUFSVEVSX0ZJRUxEID0gMjgsCisKKyAgICAvKioKKyAgICAg
KiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ1YnIGZpZWxk
IGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX1pPTkVfT0ZGU0VU
IGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuOAorICAgICAqLworICAgIFVEQVRfVElNRVpP
TkVfU1BFQ0lBTF9GSUVMRCA9IDI5LAorCisgICAvKioKKyAgICAgKiBOdW1iZXIgb2YgRmllbGRQ
b3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3JzIGZvcgorICAgICAqIERhdGVGb3Jt
YXQgYW5kIFVEYXRlRm9ybWF0LgorICAgICAqIFZhbGlkIHNlbGVjdG9ycyByYW5nZSBmcm9tIDAg
dG8gVURBVF9GSUVMRF9DT1VOVC0xLgorICAgICAqIFRoaXMgdmFsdWUgaXMgc3ViamVjdCB0byBj
aGFuZ2UgaWYgbmV3IGZpZWxkcyBhcmUgZGVmaW5lZAorICAgICAqIGluIHRoZSBmdXR1cmUuCisg
ICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9GSUVMRF9DT1VOVCA9IDMw
CisKK30gVURhdGVGb3JtYXRGaWVsZDsKKworCisvKioKKyAqIE1hcHMgZnJvbSBhIFVEYXRlRm9y
bWF0RmllbGQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgVUNhbGVuZGFyRGF0ZUZpZWxkcy4KKyAqIE5v
dGU6IHNpbmNlIHRoZSBtYXBwaW5nIGlzIG1hbnktdG8tb25lLCB0aGVyZSBpcyBubyBpbnZlcnNl
IG1hcHBpbmcuCisgKiBAcGFyYW0gZmllbGQgdGhlIFVEYXRlRm9ybWF0RmllbGQuCisgKiBAcmV0
dXJuIHRoZSBVQ2FsZW5kYXJEYXRlRmllbGQuICBUaGlzIHdpbGwgYmUgVUNBTF9GSUVMRF9DT1VO
VCBpbiBjYXNlCisgKiBvZiBlcnJvciAoZS5nLiwgdGhlIGlucHV0IGZpZWxkIGlzIFVEQVRfRklF
TERfQ09VTlQpLgorICogQHN0YWJsZSBJQ1UgNC40CisgKi8KK1VfU1RBQkxFIFVDYWxlbmRhckRh
dGVGaWVsZHMgVV9FWFBPUlQyCit1ZGF0X3RvQ2FsZW5kYXJEYXRlRmllbGQoVURhdGVGb3JtYXRG
aWVsZCBmaWVsZCk7CisKKworLyoqCisgKiBPcGVuIGEgbmV3IFVEYXRlRm9ybWF0IGZvciBmb3Jt
YXR0aW5nIGFuZCBwYXJzaW5nIGRhdGVzIGFuZCB0aW1lcy4KKyAqIEEgVURhdGVGb3JtYXQgbWF5
IGJlIHVzZWQgdG8gZm9ybWF0IGRhdGVzIGluIGNhbGxzIHRvIHtAbGluayAjdWRhdF9mb3JtYXQg
fSwKKyAqIGFuZCB0byBwYXJzZSBkYXRlcyBpbiBjYWxscyB0byB7QGxpbmsgI3VkYXRfcGFyc2Ug
fS4KKyAqIEBwYXJhbSB0aW1lU3R5bGUgVGhlIHN0eWxlIHVzZWQgdG8gZm9ybWF0IHRpbWVzOyBv
bmUgb2YgVURBVF9GVUxMLCBVREFUX0xPTkcsCisgKiBVREFUX01FRElVTSwgVURBVF9TSE9SVCwg
VURBVF9ERUZBVUxULCBvciBVREFUX05PTkUgKHJlbGF0aXZlIHRpbWUgc3R5bGVzCisgKiBhcmUg
bm90IGN1cnJlbnRseSBzdXBwb3J0ZWQpCisgKiBAcGFyYW0gZGF0ZVN0eWxlIFRoZSBzdHlsZSB1
c2VkIHRvIGZvcm1hdCBkYXRlczsgb25lIG9mIFVEQVRfRlVMTCwgVURBVF9MT05HLAorICogVURB
VF9NRURJVU0sIFVEQVRfU0hPUlQsIFVEQVRfREVGQVVMVCwgVURBVF9GVUxMX1JFTEFUSVZFLCBV
REFUX0xPTkdfUkVMQVRJVkUsCisgKiBVREFUX01FRElVTV9SRUxBVElWRSwgVURBVF9TSE9SVF9S
RUxBVElWRSwgb3IgVURBVF9OT05FCisgKiBAcGFyYW0gbG9jYWxlIFRoZSBsb2NhbGUgc3BlY2lm
eWluZyB0aGUgZm9ybWF0dGluZyBjb252ZW50aW9ucworICogQHBhcmFtIHR6SUQgQSB0aW1lem9u
ZSBJRCBzcGVjaWZ5aW5nIHRoZSB0aW1lem9uZSB0byB1c2UuICBJZiAwLCB1c2UKKyAqIHRoZSBk
ZWZhdWx0IHRpbWV6b25lLgorICogQHBhcmFtIHR6SURMZW5ndGggVGhlIGxlbmd0aCBvZiB0eklE
LCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisgKiBAcGFyYW0gcGF0dGVybiBBIHBhdHRlcm4g
c3BlY2lmeWluZyB0aGUgZm9ybWF0IHRvIHVzZS4KKyAqIEBwYXJhbSBwYXR0ZXJuTGVuZ3RoIFRo
ZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgcGF0dGVybiwgb3IgLTEgaWYgbnVsbC10ZXJt
aW5hdGVkLgorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byBy
ZWNlaXZlIGFueSBlcnJvcnMKKyAqIEByZXR1cm4gQSBwb2ludGVyIHRvIGEgVURhdGVGb3JtYXQg
dG8gdXNlIGZvciBmb3JtYXR0aW5nIGRhdGVzIGFuZCB0aW1lcywgb3IgMCBpZgorICogYW4gZXJy
b3Igb2NjdXJyZWQuCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgVURhdGVGb3Jt
YXQqIFVfRVhQT1JUMiAKK3VkYXRfb3BlbihVRGF0ZUZvcm1hdFN0eWxlICB0aW1lU3R5bGUsCisg
ICAgICAgICAgVURhdGVGb3JtYXRTdHlsZSAgZGF0ZVN0eWxlLAorICAgICAgICAgIGNvbnN0IGNo
YXIgICAgICAgICpsb2NhbGUsCisgICAgICAgICAgY29uc3QgVUNoYXIgICAgICAgKnR6SUQsCisg
ICAgICAgICAgaW50MzJfdCAgICAgICAgICAgdHpJRExlbmd0aCwKKyAgICAgICAgICBjb25zdCBV
Q2hhciAgICAgICAqcGF0dGVybiwKKyAgICAgICAgICBpbnQzMl90ICAgICAgICAgICBwYXR0ZXJu
TGVuZ3RoLAorICAgICAgICAgIFVFcnJvckNvZGUgICAgICAgICpzdGF0dXMpOworCisKKy8qKgor
KiBDbG9zZSBhIFVEYXRlRm9ybWF0LgorKiBPbmNlIGNsb3NlZCwgYSBVRGF0ZUZvcm1hdCBtYXkg
bm8gbG9uZ2VyIGJlIHVzZWQuCisqIEBwYXJhbSBmb3JtYXQgVGhlIGZvcm1hdHRlciB0byBjbG9z
ZS4KKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1ZGF0
X2Nsb3NlKFVEYXRlRm9ybWF0KiBmb3JtYXQpOworCisjaWYgVV9TSE9XX0NQTFVTUExVU19BUEkK
KworVV9OQU1FU1BBQ0VfQkVHSU4KKworLyoqCisgKiBcY2xhc3MgTG9jYWxVRGF0ZUZvcm1hdFBv
aW50ZXIKKyAqICJTbWFydCBwb2ludGVyIiBjbGFzcywgY2xvc2VzIGEgVURhdGVGb3JtYXQgdmlh
IHVkYXRfY2xvc2UoKS4KKyAqIEZvciBtb3N0IG1ldGhvZHMgc2VlIHRoZSBMb2NhbFBvaW50ZXJC
YXNlIGJhc2UgY2xhc3MuCisgKgorICogQHNlZSBMb2NhbFBvaW50ZXJCYXNlCisgKiBAc2VlIExv
Y2FsUG9pbnRlcgorICogQHN0YWJsZSBJQ1UgNC40CisgKi8KK1VfREVGSU5FX0xPQ0FMX09QRU5f
UE9JTlRFUihMb2NhbFVEYXRlRm9ybWF0UG9pbnRlciwgVURhdGVGb3JtYXQsIHVkYXRfY2xvc2Up
OworCitVX05BTUVTUEFDRV9FTkQKKworI2VuZGlmCisKKy8qKgorICogT3BlbiBhIGNvcHkgb2Yg
YSBVRGF0ZUZvcm1hdC4KKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSBkZWVwIGNvcHkuCisg
KiBAcGFyYW0gZm10IFRoZSBmb3JtYXQgdG8gY29weQorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50
ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMuCisgKiBAcmV0dXJuIEEg
cG9pbnRlciB0byBhIFVEYXRlRm9ybWF0IGlkZW50aWNhbCB0byBmbXQuCisgKiBAc3RhYmxlIElD
VSAyLjAKKyAqLworVV9TVEFCTEUgVURhdGVGb3JtYXQqIFVfRVhQT1JUMiAKK3VkYXRfY2xvbmUo
Y29uc3QgVURhdGVGb3JtYXQgKmZtdCwKKyAgICAgICBVRXJyb3JDb2RlICpzdGF0dXMpOworCisv
KioKKyogRm9ybWF0IGEgZGF0ZSB1c2luZyBhbiBVRGF0ZUZvcm1hdC4KKyogVGhlIGRhdGUgd2ls
bCBiZSBmb3JtYXR0ZWQgdXNpbmcgdGhlIGNvbnZlbnRpb25zIHNwZWNpZmllZCBpbiB7QGxpbmsg
I3VkYXRfb3BlbiB9CisqIEBwYXJhbSBmb3JtYXQgVGhlIGZvcm1hdHRlciB0byB1c2UKKyogQHBh
cmFtIGRhdGVUb0Zvcm1hdCBUaGUgZGF0ZSB0byBmb3JtYXQKKyogQHBhcmFtIHJlc3VsdCBBIHBv
aW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgZm9ybWF0dGVkIG51bWJlci4KKyogQHBh
cmFtIHJlc3VsdExlbmd0aCBUaGUgbWF4aW11bSBzaXplIG9mIHJlc3VsdC4KKyogQHBhcmFtIHBv
c2l0aW9uIEEgcG9pbnRlciB0byBhIFVGaWVsZFBvc2l0aW9uLiAgT24gaW5wdXQsIHBvc2l0aW9u
LT5maWVsZAorKiBpcyByZWFkLiAgT24gb3V0cHV0LCBwb3NpdGlvbi0+YmVnaW5JbmRleCBhbmQg
cG9zaXRpb24tPmVuZEluZGV4IGluZGljYXRlCisqIHRoZSBiZWdpbm5pbmcgYW5kIGVuZGluZyBp
bmRpY2VzIG9mIGZpZWxkIG51bWJlciBwb3NpdGlvbi0+ZmllbGQsIGlmIHN1Y2gKKyogYSBmaWVs
ZCBleGlzdHMuICBUaGlzIHBhcmFtZXRlciBtYXkgYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSBubyBm
aWVsZAorKiBwb3NpdGlvbiBkYXRhIGlzIHJldHVybmVkLgorKiBAcGFyYW0gc3RhdHVzIEEgcG9p
bnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAcmV0dXJuIFRo
ZSB0b3RhbCBidWZmZXIgc2l6ZSBuZWVkZWQ7IGlmIGdyZWF0ZXIgdGhhbiByZXN1bHRMZW5ndGgs
IHRoZSBvdXRwdXQgd2FzIHRydW5jYXRlZC4KKyogQHNlZSB1ZGF0X3BhcnNlCisqIEBzZWUgVUZp
ZWxkUG9zaXRpb24KKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VY
UE9SVDIgCit1ZGF0X2Zvcm1hdCggICAgY29uc3QgICAgVURhdGVGb3JtYXQqICAgIGZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIFVEYXRlICAgICAgICAgICBkYXRlVG9Gb3JtYXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICBVQ2hhciogICAgICAgICAgcmVzdWx0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFVGaWVsZFBvc2l0aW9uKiBwb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFVFcnJvckNvZGUqICAgICBzdGF0dXMpOworCisvKioKKyogUGFyc2UgYSBzdHJpbmcg
aW50byBhbiBkYXRlL3RpbWUgdXNpbmcgYSBVRGF0ZUZvcm1hdC4KKyogVGhlIGRhdGUgd2lsbCBi
ZSBwYXJzZWQgdXNpbmcgdGhlIGNvbnZlbnRpb25zIHNwZWNpZmllZCBpbiB7QGxpbmsgI3VkYXRf
b3BlbiB9CisqIEBwYXJhbSBmb3JtYXQgVGhlIGZvcm1hdHRlciB0byB1c2UuCisqIEBwYXJhbSB0
ZXh0IFRoZSB0ZXh0IHRvIHBhcnNlLgorKiBAcGFyYW0gdGV4dExlbmd0aCBUaGUgbGVuZ3RoIG9m
IHRleHQsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyogQHBhcmFtIHBhcnNlUG9zIElmIG5v
dCAwLCBvbiBpbnB1dCBhIHBvaW50ZXIgdG8gYW4gaW50ZWdlciBzcGVjaWZ5aW5nIHRoZSBvZmZz
ZXQgYXQgd2hpY2gKKyogdG8gYmVnaW4gcGFyc2luZy4gIElmIG5vdCAwLCBvbiBvdXRwdXQgdGhl
IG9mZnNldCBhdCB3aGljaCBwYXJzaW5nIGVuZGVkLgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRl
ciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAcmV0dXJuIFRoZSB2
YWx1ZSBvZiB0aGUgcGFyc2VkIGRhdGUvdGltZQorKiBAc2VlIHVkYXRfZm9ybWF0CisqIEBzdGFi
bGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIFVEYXRlIFVfRVhQT1JUMiAKK3VkYXRfcGFyc2UoICAg
IGNvbnN0ICAgIFVEYXRlRm9ybWF0KiAgICBmb3JtYXQsCisgICAgICAgICAgICBjb25zdCAgICBV
Q2hhciogICAgICAgICAgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAg
IHRleHRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAqcGFyc2VQ
b3MsCisgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgICAqc3RhdHVzKTsKKworLyoq
CisqIFBhcnNlIGEgc3RyaW5nIGludG8gYW4gZGF0ZS90aW1lIHVzaW5nIGEgVURhdGVGb3JtYXQu
CisqIFRoZSBkYXRlIHdpbGwgYmUgcGFyc2VkIHVzaW5nIHRoZSBjb252ZW50aW9ucyBzcGVjaWZp
ZWQgaW4ge0BsaW5rICN1ZGF0X29wZW4gfQorKiBAcGFyYW0gZm9ybWF0IFRoZSBmb3JtYXR0ZXIg
dG8gdXNlLgorKiBAcGFyYW0gY2FsZW5kYXIgVGhlIGNhbGVuZGFyIGluIHdoaWNoIHRvIHN0b3Jl
IHRoZSBwYXJzZWQgZGF0YS4KKyogQHBhcmFtIHRleHQgVGhlIHRleHQgdG8gcGFyc2UuCisqIEBw
YXJhbSB0ZXh0TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGV4dCwgb3IgLTEgaWYgbnVsbC10ZXJtaW5h
dGVkLgorKiBAcGFyYW0gcGFyc2VQb3MgSWYgbm90IDAsIG9uIGlucHV0IGEgcG9pbnRlciB0byBh
biBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlIG9mZnNldCBhdCB3aGljaAorKiB0byBiZWdpbiBwYXJz
aW5nLiAgSWYgbm90IDAsIG9uIG91dHB1dCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHBhcnNpbmcgZW5k
ZWQuCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2
ZSBhbnkgZXJyb3JzCisqIEBzZWUgdWRhdF9mb3JtYXQKKyogQHN0YWJsZSBJQ1UgMi4wCisqLwor
VV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1ZGF0X3BhcnNlQ2FsZW5kYXIoY29uc3QgICAgVURh
dGVGb3JtYXQqICAgIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2FsZW5k
YXIqICAgICAgY2FsZW5kYXIsCisgICAgICAgICAgICAgICAgICAgY29uc3QgICAgVUNoYXIqICAg
ICAgICAgIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAg
IHRleHRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAg
ICpwYXJzZVBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAg
KnN0YXR1cyk7CisKKy8qKgorKiBEZXRlcm1pbmUgaWYgYW4gVURhdGVGb3JtYXQgd2lsbCBwZXJm
b3JtIGxlbmllbnQgcGFyc2luZy4KKyogV2l0aCBsZW5pZW50IHBhcnNpbmcsIHRoZSBwYXJzZXIg
bWF5IHVzZSBoZXVyaXN0aWNzIHRvIGludGVycHJldCBpbnB1dHMgdGhhdCBkbyBub3QKKyogcHJl
Y2lzZWx5IG1hdGNoIHRoZSBwYXR0ZXJuLiBXaXRoIHN0cmljdCBwYXJzaW5nLCBpbnB1dHMgbXVz
dCBtYXRjaCB0aGUgcGF0dGVybi4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHF1ZXJ5
CisqIEByZXR1cm4gVFJVRSBpZiBmbXQgaXMgc2V0IHRvIHBlcmZvcm0gbGVuaWVudCBwYXJzaW5n
LCBGQUxTRSBvdGhlcndpc2UuCisqIEBzZWUgdWRhdF9zZXRMZW5pZW50CisqIEBzdGFibGUgSUNV
IDIuMAorKi8KK1VfU1RBQkxFIFVCb29sIFVfRVhQT1JUMiAKK3VkYXRfaXNMZW5pZW50KGNvbnN0
IFVEYXRlRm9ybWF0KiBmbXQpOworCisvKioKKyogU3BlY2lmeSB3aGV0aGVyIGFuIFVEYXRlRm9y
bWF0IHdpbGwgcGVyZm9ybSBsZW5pZW50IHBhcnNpbmcuCisqIFdpdGggbGVuaWVudCBwYXJzaW5n
LCB0aGUgcGFyc2VyIG1heSB1c2UgaGV1cmlzdGljcyB0byBpbnRlcnByZXQgaW5wdXRzIHRoYXQg
ZG8gbm90CisqIHByZWNpc2VseSBtYXRjaCB0aGUgcGF0dGVybi4gV2l0aCBzdHJpY3QgcGFyc2lu
ZywgaW5wdXRzIG11c3QgbWF0Y2ggdGhlIHBhdHRlcm4uCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1h
dHRlciB0byBzZXQKKyogQHBhcmFtIGlzTGVuaWVudCBUUlVFIGlmIGZtdCBzaG91bGQgcGVyZm9y
bSBsZW5pZW50IHBhcnNpbmcsIEZBTFNFIG90aGVyd2lzZS4KKyogQHNlZSBkYXRfaXNMZW5pZW50
CisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWRhdF9z
ZXRMZW5pZW50KCAgICBVRGF0ZUZvcm1hdCogICAgZm10LAorICAgICAgICAgICAgICAgICAgICBV
Qm9vbCAgICAgICAgICBpc0xlbmllbnQpOworCisvKioKKyogR2V0IHRoZSBVQ2FsZW5kYXIgYXNz
b2NpYXRlZCB3aXRoIGFuIFVEYXRlRm9ybWF0LgorKiBBIFVEYXRlRm9ybWF0IHVzZXMgYSBVQ2Fs
ZW5kYXIgdG8gY29udmVydCBhIHJhdyB2YWx1ZSB0bywgZm9yIGV4YW1wbGUsCisqIHRoZSBkYXkg
b2YgdGhlIHdlZWsuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBxdWVyeS4KKyogQHJl
dHVybiBBIHBvaW50ZXIgdG8gdGhlIFVDYWxlbmRhciB1c2VkIGJ5IGZtdC4KKyogQHNlZSB1ZGF0
X3NldENhbGVuZGFyCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGNvbnN0IFVDYWxl
bmRhciogVV9FWFBPUlQyIAordWRhdF9nZXRDYWxlbmRhcihjb25zdCBVRGF0ZUZvcm1hdCogZm10
KTsKKworLyoqCisqIFNldCB0aGUgVUNhbGVuZGFyIGFzc29jaWF0ZWQgd2l0aCBhbiBVRGF0ZUZv
cm1hdC4KKyogQSBVRGF0ZUZvcm1hdCB1c2VzIGEgVUNhbGVuZGFyIHRvIGNvbnZlcnQgYSByYXcg
dmFsdWUgdG8sIGZvciBleGFtcGxlLAorKiB0aGUgZGF5IG9mIHRoZSB3ZWVrLgorKiBAcGFyYW0g
Zm10IFRoZSBmb3JtYXR0ZXIgdG8gc2V0LgorKiBAcGFyYW0gY2FsZW5kYXJUb1NldCBBIHBvaW50
ZXIgdG8gYW4gVUNhbGVuZGFyIHRvIGJlIHVzZWQgYnkgZm10LgorKiBAc2VlIHVkYXRfc2V0Q2Fs
ZW5kYXIKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1
ZGF0X3NldENhbGVuZGFyKCAgICAgICAgICAgIFVEYXRlRm9ybWF0KiAgICBmbXQsCisgICAgICAg
ICAgICAgICAgICAgIGNvbnN0ICAgVUNhbGVuZGFyKiAgICAgIGNhbGVuZGFyVG9TZXQpOworCisv
KioKKyogR2V0IHRoZSBVTnVtYmVyRm9ybWF0IGFzc29jaWF0ZWQgd2l0aCBhbiBVRGF0ZUZvcm1h
dC4KKyogQSBVRGF0ZUZvcm1hdCB1c2VzIGEgVU51bWJlckZvcm1hdCB0byBmb3JtYXQgbnVtYmVy
cyB3aXRoaW4gYSBkYXRlLAorKiBmb3IgZXhhbXBsZSB0aGUgZGF5IG51bWJlci4KKyogQHBhcmFt
IGZtdCBUaGUgZm9ybWF0dGVyIHRvIHF1ZXJ5LgorKiBAcmV0dXJuIEEgcG9pbnRlciB0byB0aGUg
VU51bWJlckZvcm1hdCB1c2VkIGJ5IGZtdCB0byBmb3JtYXQgbnVtYmVycy4KKyogQHNlZSB1ZGF0
X3NldE51bWJlckZvcm1hdAorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBjb25zdCBV
TnVtYmVyRm9ybWF0KiBVX0VYUE9SVDIgCit1ZGF0X2dldE51bWJlckZvcm1hdChjb25zdCBVRGF0
ZUZvcm1hdCogZm10KTsKKworLyoqCisqIFNldCB0aGUgVU51bWJlckZvcm1hdCBhc3NvY2lhdGVk
IHdpdGggYW4gVURhdGVGb3JtYXQuCisqIEEgVURhdGVGb3JtYXQgdXNlcyBhIFVOdW1iZXJGb3Jt
YXQgdG8gZm9ybWF0IG51bWJlcnMgd2l0aGluIGEgZGF0ZSwKKyogZm9yIGV4YW1wbGUgdGhlIGRh
eSBudW1iZXIuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBzZXQuCisqIEBwYXJhbSBu
dW1iZXJGb3JtYXRUb1NldCBBIHBvaW50ZXIgdG8gdGhlIFVOdW1iZXJGb3JtYXQgdG8gYmUgdXNl
ZCBieSBmbXQgdG8gZm9ybWF0IG51bWJlcnMuCisqIEBzZWUgdWRhdF9nZXROdW1iZXJGb3JtYXQK
KyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1ZGF0X3Nl
dE51bWJlckZvcm1hdCggICAgICAgICAgICBVRGF0ZUZvcm1hdCogICAgZm10LAorICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgICBVTnVtYmVyRm9ybWF0KiAgbnVtYmVyRm9ybWF0VG9TZXQp
OworCisvKioKKyogR2V0IGEgbG9jYWxlIGZvciB3aGljaCBkYXRlL3RpbWUgZm9ybWF0dGluZyBw
YXR0ZXJucyBhcmUgYXZhaWxhYmxlLgorKiBBIFVEYXRlRm9ybWF0IGluIGEgbG9jYWxlIHJldHVy
bmVkIGJ5IHRoaXMgZnVuY3Rpb24gd2lsbCBwZXJmb3JtIHRoZSBjb3JyZWN0CisqIGZvcm1hdHRp
bmcgYW5kIHBhcnNpbmcgZm9yIHRoZSBsb2NhbGUuCisqIEBwYXJhbSBsb2NhbGVJbmRleCBUaGUg
aW5kZXggb2YgdGhlIGRlc2lyZWQgbG9jYWxlLgorKiBAcmV0dXJuIEEgbG9jYWxlIGZvciB3aGlj
aCBkYXRlL3RpbWUgZm9ybWF0dGluZyBwYXR0ZXJucyBhcmUgYXZhaWxhYmxlLCBvciAwIGlmIG5v
bmUuCisqIEBzZWUgdWRhdF9jb3VudEF2YWlsYWJsZQorKiBAc3RhYmxlIElDVSAyLjAKKyovCitV
X1NUQUJMRSBjb25zdCBjaGFyKiBVX0VYUE9SVDIgCit1ZGF0X2dldEF2YWlsYWJsZShpbnQzMl90
IGxvY2FsZUluZGV4KTsKKworLyoqCisqIERldGVybWluZSBob3cgbWFueSBsb2NhbGVzIGhhdmUg
ZGF0ZS90aW1lICBmb3JtYXR0aW5nIHBhdHRlcm5zIGF2YWlsYWJsZS4KKyogVGhpcyBmdW5jdGlv
biBpcyBtb3N0IHVzZWZ1bCBhcyBkZXRlcm1pbmluZyB0aGUgbG9vcCBlbmRpbmcgY29uZGl0aW9u
IGZvcgorKiBjYWxscyB0byB7QGxpbmsgI3VkYXRfZ2V0QXZhaWxhYmxlIH0uCisqIEByZXR1cm4g
VGhlIG51bWJlciBvZiBsb2NhbGVzIGZvciB3aGljaCBkYXRlL3RpbWUgZm9ybWF0dGluZyBwYXR0
ZXJucyBhcmUgYXZhaWxhYmxlLgorKiBAc2VlIHVkYXRfZ2V0QXZhaWxhYmxlCisqIEBzdGFibGUg
SUNVIDIuMAorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordWRhdF9jb3VudEF2YWls
YWJsZSh2b2lkKTsKKworLyoqCisqIEdldCB0aGUgeWVhciByZWxhdGl2ZSB0byB3aGljaCBhbGwg
Mi1kaWdpdCB5ZWFycyBhcmUgaW50ZXJwcmV0ZWQuCisqIEZvciBleGFtcGxlLCBpZiB0aGUgMi1k
aWdpdCBzdGFydCB5ZWFyIGlzIDIxMDAsIHRoZSB5ZWFyIDk5IHdpbGwgYmUKKyogaW50ZXJwcmV0
ZWQgYXMgMjE5OS4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHF1ZXJ5LgorKiBAcGFy
YW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9y
cworKiBAcmV0dXJuIFRoZSB5ZWFyIHJlbGF0aXZlIHRvIHdoaWNoIGFsbCAyLWRpZ2l0IHllYXJz
IGFyZSBpbnRlcnByZXRlZC4KKyogQHNlZSB1ZGF0X1NldDJEaWdpdFllYXJTdGFydAorKiBAc3Rh
YmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBVRGF0ZSBVX0VYUE9SVDIgCit1ZGF0X2dldDJEaWdp
dFllYXJTdGFydCggICAgY29uc3QgICBVRGF0ZUZvcm1hdCAgICAgKmZtdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgICAqc3RhdHVzKTsKKworLyoq
CisqIFNldCB0aGUgeWVhciByZWxhdGl2ZSB0byB3aGljaCBhbGwgMi1kaWdpdCB5ZWFycyB3aWxs
IGJlIGludGVycHJldGVkLgorKiBGb3IgZXhhbXBsZSwgaWYgdGhlIDItZGlnaXQgc3RhcnQgeWVh
ciBpcyAyMTAwLCB0aGUgeWVhciA5OSB3aWxsIGJlCisqIGludGVycHJldGVkIGFzIDIxOTkuCisq
IEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBzZXQuCisqIEBwYXJhbSBkIFRoZSB5ZWFyIHJl
bGF0aXZlIHRvIHdoaWNoIGFsbCAyLWRpZ2l0IHllYXJzIHdpbGwgYmUgaW50ZXJwcmV0ZWQuCisq
IEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkg
ZXJyb3JzCisqIEBzZWUgdWRhdF9TZXQyRGlnaXRZZWFyU3RhcnQKKyogQHN0YWJsZSBJQ1UgMi4w
CisqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1ZGF0X3NldDJEaWdpdFllYXJTdGFydCgg
ICAgVURhdGVGb3JtYXQgICAgICpmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVURh
dGUgICAgICAgICAgIGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAg
ICAgICpzdGF0dXMpOworCisvKioKKyogRXh0cmFjdCB0aGUgcGF0dGVybiBmcm9tIGEgVURhdGVG
b3JtYXQuCisqIFRoZSBwYXR0ZXJuIHdpbGwgZm9sbG93IHRoZSBwYXR0ZXJuIHN5bnRheCBydWxl
cy4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHF1ZXJ5LgorKiBAcGFyYW0gbG9jYWxp
emVkIFRSVUUgaWYgdGhlIHBhdHRlcm4gc2hvdWxkIGJlIGxvY2FsaXplZCwgRkFMU0Ugb3RoZXJ3
aXNlLgorKiBAcGFyYW0gcmVzdWx0IEEgcG9pbnRlciB0byBhIGJ1ZmZlciB0byByZWNlaXZlIHRo
ZSBwYXR0ZXJuLgorKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIFRoZSBtYXhpbXVtIHNpemUgb2YgcmVz
dWx0LgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2Vp
dmUgYW55IGVycm9ycworKiBAcmV0dXJuIFRoZSB0b3RhbCBidWZmZXIgc2l6ZSBuZWVkZWQ7IGlm
IGdyZWF0ZXIgdGhhbiByZXN1bHRMZW5ndGgsIHRoZSBvdXRwdXQgd2FzIHRydW5jYXRlZC4KKyog
QHNlZSB1ZGF0X2FwcGx5UGF0dGVybgorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBp
bnQzMl90IFVfRVhQT1JUMiAKK3VkYXRfdG9QYXR0ZXJuKCAgICBjb25zdCAgIFVEYXRlRm9ybWF0
ICAgICAqZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgVUJvb2wgICAgICAgICAgbG9jYWxp
emVkLAorICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIgICAgICAgICAgICpyZXN1bHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgcmVzdWx0TGVuZ3RoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICpzdGF0dXMpOworCisvKioKKyog
U2V0IHRoZSBwYXR0ZXJuIHVzZWQgYnkgYW4gVURhdGVGb3JtYXQuCisqIFRoZSBwYXR0ZXJuIHNo
b3VsZCBmb2xsb3cgdGhlIHBhdHRlcm4gc3ludGF4IHJ1bGVzLgorKiBAcGFyYW0gZm9ybWF0IFRo
ZSBmb3JtYXR0ZXIgdG8gc2V0LgorKiBAcGFyYW0gbG9jYWxpemVkIFRSVUUgaWYgdGhlIHBhdHRl
cm4gaXMgbG9jYWxpemVkLCBGQUxTRSBvdGhlcndpc2UuCisqIEBwYXJhbSBwYXR0ZXJuIFRoZSBu
ZXcgcGF0dGVybgorKiBAcGFyYW0gcGF0dGVybkxlbmd0aCBUaGUgbGVuZ3RoIG9mIHBhdHRlcm4s
IG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyogQHNlZSB1ZGF0X3RvUGF0dGVybgorKiBAc3Rh
YmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VkYXRfYXBwbHlQYXR0
ZXJuKCAgICAgICAgICAgIFVEYXRlRm9ybWF0ICAgICAqZm9ybWF0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFVCb29sICAgICAgICAgIGxvY2FsaXplZCwKKyAgICAgICAgICAgICAgICAg
ICAgY29uc3QgICBVQ2hhciAgICAgICAgICAgKnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50MzJfdCAgICAgICAgIHBhdHRlcm5MZW5ndGgpOworCisvKiogCisgKiBUaGUg
cG9zc2libGUgdHlwZXMgb2YgZGF0ZSBmb3JtYXQgc3ltYm9scyAKKyAqIEBzdGFibGUgSUNVIDIu
NgorICovCit0eXBlZGVmIGVudW0gVURhdGVGb3JtYXRTeW1ib2xUeXBlIHsKKyAgICAvKiogVGhl
IGVyYSBuYW1lcywgZm9yIGV4YW1wbGUgQUQgKi8KKyAgICBVREFUX0VSQVMsCisgICAgLyoqIFRo
ZSBtb250aCBuYW1lcywgZm9yIGV4YW1wbGUgRmVicnVhcnkgKi8KKyAgICBVREFUX01PTlRIUywK
KyAgICAvKiogVGhlIHNob3J0IG1vbnRoIG5hbWVzLCBmb3IgZXhhbXBsZSBGZWIuICovCisgICAg
VURBVF9TSE9SVF9NT05USFMsCisgICAgLyoqIFRoZSB3ZWVrZGF5IG5hbWVzLCBmb3IgZXhhbXBs
ZSBNb25kYXkgKi8KKyAgICBVREFUX1dFRUtEQVlTLAorICAgIC8qKiBUaGUgc2hvcnQgd2Vla2Rh
eSBuYW1lcywgZm9yIGV4YW1wbGUgTW9uLiAqLworICAgIFVEQVRfU0hPUlRfV0VFS0RBWVMsCisg
ICAgLyoqIFRoZSBBTS9QTSBuYW1lcywgZm9yIGV4YW1wbGUgQU0gKi8KKyAgICBVREFUX0FNX1BN
UywKKyAgICAvKiogVGhlIGxvY2FsaXplZCBjaGFyYWN0ZXJzICovCisgICAgVURBVF9MT0NBTEla
RURfQ0hBUlMsCisgICAgLyoqIFRoZSBsb25nIGVyYSBuYW1lcywgZm9yIGV4YW1wbGUgQW5ubyBE
b21pbmkgKi8KKyAgICBVREFUX0VSQV9OQU1FUywKKyAgICAvKiogVGhlIG5hcnJvdyBtb250aCBu
YW1lcywgZm9yIGV4YW1wbGUgRiAqLworICAgIFVEQVRfTkFSUk9XX01PTlRIUywKKyAgICAvKiog
VGhlIG5hcnJvdyB3ZWVrZGF5IG5hbWVzLCBmb3IgZXhhbXBsZSBOICovCisgICAgVURBVF9OQVJS
T1dfV0VFS0RBWVMsCisgICAgLyoqIFN0YW5kYWxvbmUgY29udGV4dCB2ZXJzaW9ucyBvZiBtb250
aHMgKi8KKyAgICBVREFUX1NUQU5EQUxPTkVfTU9OVEhTLAorICAgIFVEQVRfU1RBTkRBTE9ORV9T
SE9SVF9NT05USFMsCisgICAgVURBVF9TVEFOREFMT05FX05BUlJPV19NT05USFMsCisgICAgLyoq
IFN0YW5kYWxvbmUgY29udGV4dCB2ZXJzaW9ucyBvZiB3ZWVrZGF5cyAqLworICAgIFVEQVRfU1RB
TkRBTE9ORV9XRUVLREFZUywKKyAgICBVREFUX1NUQU5EQUxPTkVfU0hPUlRfV0VFS0RBWVMsCisg
ICAgVURBVF9TVEFOREFMT05FX05BUlJPV19XRUVLREFZUywKKyAgICAvKiogVGhlIHF1YXJ0ZXJz
LCBmb3IgZXhhbXBsZSAxc3QgUXVhcnRlciAqLworICAgIFVEQVRfUVVBUlRFUlMsCisgICAgLyoq
IFRoZSBzaG9ydCBxdWFydGVyIG5hbWVzLCBmb3IgZXhhbXBsZSBRMSAqLworICAgIFVEQVRfU0hP
UlRfUVVBUlRFUlMsCisgICAgLyoqIFN0YW5kYWxvbmUgY29udGV4dCB2ZXJzaW9ucyBvZiBxdWFy
dGVycyAqLworICAgIFVEQVRfU1RBTkRBTE9ORV9RVUFSVEVSUywKKyAgICBVREFUX1NUQU5EQUxP
TkVfU0hPUlRfUVVBUlRFUlMKKworfSBVRGF0ZUZvcm1hdFN5bWJvbFR5cGU7CisKK3N0cnVjdCBV
RGF0ZUZvcm1hdFN5bWJvbHM7CisvKiogRGF0ZSBmb3JtYXQgc3ltYm9scy4KKyAqICBGb3IgdXNh
Z2UgaW4gQyBwcm9ncmFtcy4KKyAqICBAc3RhYmxlIElDVSAyLjYKKyAqLwordHlwZWRlZiBzdHJ1
Y3QgVURhdGVGb3JtYXRTeW1ib2xzIFVEYXRlRm9ybWF0U3ltYm9sczsKKworLyoqCisqIEdldCB0
aGUgc3ltYm9scyBhc3NvY2lhdGVkIHdpdGggYW4gVURhdGVGb3JtYXQuCisqIFRoZSBzeW1ib2xz
IGFyZSB3aGF0IGEgVURhdGVGb3JtYXQgdXNlcyB0byByZXByZXNlbnQgbG9jYWxlLXNwZWNpZmlj
IGRhdGEsCisqIGZvciBleGFtcGxlIG1vbnRoIG9yIGRheSBuYW1lcy4KKyogQHBhcmFtIGZtdCBU
aGUgZm9ybWF0dGVyIHRvIHF1ZXJ5LgorKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBzeW1ib2xz
IHRvIGdldC4gIE9uZSBvZiBVREFUX0VSQVMsIFVEQVRfTU9OVEhTLCBVREFUX1NIT1JUX01PTlRI
UywKKyogVURBVF9XRUVLREFZUywgVURBVF9TSE9SVF9XRUVLREFZUywgVURBVF9BTV9QTVMsIG9y
IFVEQVRfTE9DQUxJWkVEX0NIQVJTCisqIEBwYXJhbSBzeW1ib2xJbmRleCBUaGUgZGVzaXJlZCBz
eW1ib2wgb2YgdHlwZSB0eXBlLgorKiBAcGFyYW0gcmVzdWx0IEEgcG9pbnRlciB0byBhIGJ1ZmZl
ciB0byByZWNlaXZlIHRoZSBwYXR0ZXJuLgorKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIFRoZSBtYXhp
bXVtIHNpemUgb2YgcmVzdWx0LgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJy
b3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAcmV0dXJuIFRoZSB0b3RhbCBidWZmZXIg
c2l6ZSBuZWVkZWQ7IGlmIGdyZWF0ZXIgdGhhbiByZXN1bHRMZW5ndGgsIHRoZSBvdXRwdXQgd2Fz
IHRydW5jYXRlZC4KKyogQHNlZSB1ZGF0X2NvdW50U3ltYm9scworKiBAc2VlIHVkYXRfc2V0U3lt
Ym9scworKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAK
K3VkYXRfZ2V0U3ltYm9scyhjb25zdCAgIFVEYXRlRm9ybWF0ICAgICAgICAgICAgICpmbXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICBVRGF0ZUZvcm1hdFN5bWJvbFR5cGUgICB0eXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgc3ltYm9sSW5kZXgs
CisgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhciAgICAgICAgICAgICAgICAgICAqcmVzdWx0
LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgcmVzdWx0
TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICAgICAgICAg
KnN0YXR1cyk7CisKKy8qKgorKiBDb3VudCB0aGUgbnVtYmVyIG9mIHBhcnRpY3VsYXIgc3ltYm9s
cyBmb3IgYW4gVURhdGVGb3JtYXQuCisqIFRoaXMgZnVuY3Rpb24gaXMgbW9zdCB1c2VmdWwgYXMg
Zm9yIGRldGVtaW5pbmcgdGhlIGxvb3AgdGVybWluYXRpb24gY29uZGl0aW9uCisqIGZvciBjYWxs
cyB0byB7QGxpbmsgI3VkYXRfZ2V0U3ltYm9scyB9LgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0
ZXIgdG8gcXVlcnkuCisqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHN5bWJvbHMgdG8gY291bnQu
ICBPbmUgb2YgVURBVF9FUkFTLCBVREFUX01PTlRIUywgVURBVF9TSE9SVF9NT05USFMsCisqIFVE
QVRfV0VFS0RBWVMsIFVEQVRfU0hPUlRfV0VFS0RBWVMsIFVEQVRfQU1fUE1TLCBvciBVREFUX0xP
Q0FMSVpFRF9DSEFSUworKiBAcmV0dXJuIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBvZiB0eXBlIHR5
cGUuCisqIEBzZWUgdWRhdF9nZXRTeW1ib2xzCisqIEBzZWUgdWRhdF9zZXRTeW1ib2xzCisqIEBz
dGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordWRhdF9jb3Vu
dFN5bWJvbHMoICAgIGNvbnN0ICAgIFVEYXRlRm9ybWF0ICAgICAgICAgICAgICAgICpmbXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVURhdGVGb3JtYXRTeW1ib2xUeXBlICAgIHR5cGUp
OworCisvKioKKyogU2V0IHRoZSBzeW1ib2xzIGFzc29jaWF0ZWQgd2l0aCBhbiBVRGF0ZUZvcm1h
dC4KKyogVGhlIHN5bWJvbHMgYXJlIHdoYXQgYSBVRGF0ZUZvcm1hdCB1c2VzIHRvIHJlcHJlc2Vu
dCBsb2NhbGUtc3BlY2lmaWMgZGF0YSwKKyogZm9yIGV4YW1wbGUgbW9udGggb3IgZGF5IG5hbWVz
LgorKiBAcGFyYW0gZm9ybWF0IFRoZSBmb3JtYXR0ZXIgdG8gc2V0CisqIEBwYXJhbSB0eXBlIFRo
ZSB0eXBlIG9mIHN5bWJvbHMgdG8gc2V0LiAgT25lIG9mIFVEQVRfRVJBUywgVURBVF9NT05USFMs
IFVEQVRfU0hPUlRfTU9OVEhTLAorKiBVREFUX1dFRUtEQVlTLCBVREFUX1NIT1JUX1dFRUtEQVlT
LCBVREFUX0FNX1BNUywgb3IgVURBVF9MT0NBTElaRURfQ0hBUlMKKyogQHBhcmFtIHN5bWJvbElu
ZGV4IFRoZSBpbmRleCBvZiB0aGUgc3ltYm9sIHRvIHNldCBvZiB0eXBlIHR5cGUuCisqIEBwYXJh
bSB2YWx1ZSBUaGUgbmV3IHZhbHVlCisqIEBwYXJhbSB2YWx1ZUxlbmd0aCBUaGUgbGVuZ3RoIG9m
IHZhbHVlLCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQKKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50
ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHNlZSB1ZGF0X2dl
dFN5bWJvbHMKKyogQHNlZSB1ZGF0X2NvdW50U3ltYm9scworKiBAc3RhYmxlIElDVSAyLjAKKyov
CitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VkYXRfc2V0U3ltYm9scyggICAgVURhdGVGb3Jt
YXQgICAgICAgICAgICAgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgVURhdGVGb3JtYXRT
eW1ib2xUeXBlICAgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAg
ICAgICAgc3ltYm9sSW5kZXgsCisgICAgICAgICAgICAgICAgICAgIFVDaGFyICAgICAgICAgICAg
ICAgICAgICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgICAg
ICAgdmFsdWVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgICAgICAg
ICAgICpzdGF0dXMpOworCisvKioKKyAqIEdldCB0aGUgbG9jYWxlIGZvciB0aGlzIGRhdGUgZm9y
bWF0IG9iamVjdC4KKyAqIFlvdSBjYW4gY2hvb3NlIGJldHdlZW4gdmFsaWQgYW5kIGFjdHVhbCBs
b2NhbGUuCisgKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gZ2V0IHRoZSBsb2NhbGUgZnJv
bQorICogQHBhcmFtIHR5cGUgdHlwZSBvZiB0aGUgbG9jYWxlIHdlJ3JlIGxvb2tpbmcgZm9yICh2
YWxpZCBvciBhY3R1YWwpIAorICogQHBhcmFtIHN0YXR1cyBlcnJvciBjb2RlIGZvciB0aGUgb3Bl
cmF0aW9uCisgKiBAcmV0dXJuIHRoZSBsb2NhbGUgbmFtZQorICogQHN0YWJsZSBJQ1UgMi44Cisg
Ki8KK1VfU1RBQkxFIGNvbnN0IGNoYXIqIFVfRVhQT1JUMgordWRhdF9nZXRMb2NhbGVCeVR5cGUo
Y29uc3QgVURhdGVGb3JtYXQgKmZtdCwKKyAgICAgICAgICAgICAgICAgICAgIFVMb2NEYXRhTG9j
YWxlVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSogc3RhdHVzKTsg
CisKKy8qKgorKiBFeHRyYWN0IHRoZSBkYXRlIHBhdHRlcm4gZnJvbSBhIFVEYXRlRm9ybWF0IHNl
dCBmb3IgcmVsYXRpdmUgZGF0ZSBmb3JtYXR0aW5nLgorKiBUaGUgcGF0dGVybiB3aWxsIGZvbGxv
dyB0aGUgcGF0dGVybiBzeW50YXggcnVsZXMuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0
byBxdWVyeS4KKyogQHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2
ZSB0aGUgcGF0dGVybi4KKyogQHBhcmFtIHJlc3VsdExlbmd0aCBUaGUgbWF4aW11bSBzaXplIG9m
IHJlc3VsdC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYSBVRXJyb3JDb2RlIHRvIHJl
Y2VpdmUgYW55IGVycm9ycworKiBAcmV0dXJuIFRoZSB0b3RhbCBidWZmZXIgc2l6ZSBuZWVkZWQ7
IGlmIGdyZWF0ZXIgdGhhbiByZXN1bHRMZW5ndGgsIHRoZSBvdXRwdXQgd2FzIHRydW5jYXRlZC4K
KyogQHNlZSB1ZGF0X2FwcGx5UGF0dGVyblJlbGF0aXZlCisqIEBpbnRlcm5hbCBJQ1UgNC4yIHRl
Y2hub2xvZ3kgcHJldmlldworKi8KK1VfSU5URVJOQUwgaW50MzJfdCBVX0VYUE9SVDIgCit1ZGF0
X3RvUGF0dGVyblJlbGF0aXZlRGF0ZShjb25zdCBVRGF0ZUZvcm1hdCAqZm10LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVUNoYXIgICAgICAgICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgICAgICpzdGF0dXMpOworCisvKioKKyog
RXh0cmFjdCB0aGUgdGltZSBwYXR0ZXJuIGZyb20gYSBVRGF0ZUZvcm1hdCBzZXQgZm9yIHJlbGF0
aXZlIGRhdGUgZm9ybWF0dGluZy4KKyogVGhlIHBhdHRlcm4gd2lsbCBmb2xsb3cgdGhlIHBhdHRl
cm4gc3ludGF4IHJ1bGVzLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisq
IEBwYXJhbSByZXN1bHQgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIHBhdHRl
cm4uCisqIEBwYXJhbSByZXN1bHRMZW5ndGggVGhlIG1heGltdW0gc2l6ZSBvZiByZXN1bHQuCisq
IEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGEgVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBl
cnJvcnMKKyogQHJldHVybiBUaGUgdG90YWwgYnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVy
IHRoYW4gcmVzdWx0TGVuZ3RoLCB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisqIEBzZWUgdWRh
dF9hcHBseVBhdHRlcm5SZWxhdGl2ZQorKiBAaW50ZXJuYWwgSUNVIDQuMiB0ZWNobm9sb2d5IHBy
ZXZpZXcKKyovCitVX0lOVEVSTkFMIGludDMyX3QgVV9FWFBPUlQyIAordWRhdF90b1BhdHRlcm5S
ZWxhdGl2ZVRpbWUoY29uc3QgVURhdGVGb3JtYXQgKmZtdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVDaGFyICAgICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQzMl90ICAgICAgICAgICByZXN1bHRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBVRXJyb3JDb2RlICAgICAgICAqc3RhdHVzKTsKKworLyoqCisqIFNldCB0aGUgZGF0
ZSAmIHRpbWUgcGF0dGVybnMgdXNlZCBieSBhIFVEYXRlRm9ybWF0IHNldCBmb3IgcmVsYXRpdmUg
ZGF0ZSBmb3JtYXR0aW5nLgorKiBUaGUgcGF0dGVybnMgc2hvdWxkIGZvbGxvdyB0aGUgcGF0dGVy
biBzeW50YXggcnVsZXMuCisqIEBwYXJhbSBmb3JtYXQgVGhlIGZvcm1hdHRlciB0byBzZXQuCisq
IEBwYXJhbSBkYXRlUGF0dGVybiBUaGUgbmV3IGRhdGUgcGF0dGVybgorKiBAcGFyYW0gZGF0ZVBh
dHRlcm5MZW5ndGggVGhlIGxlbmd0aCBvZiBkYXRlUGF0dGVybiwgb3IgLTEgaWYgbnVsbC10ZXJt
aW5hdGVkLgorKiBAcGFyYW0gdGltZVBhdHRlcm4gVGhlIG5ldyB0aW1lIHBhdHRlcm4KKyogQHBh
cmFtIHRpbWVQYXR0ZXJuTGVuZ3RoIFRoZSBsZW5ndGggb2YgdGltZVBhdHRlcm4sIG9yIC0xIGlm
IG51bGwtdGVybWluYXRlZC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYSBVRXJyb3JD
b2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAc2VlIHVkYXRfdG9QYXR0ZXJuUmVsYXRpdmVE
YXRlLCB1ZGF0X3RvUGF0dGVyblJlbGF0aXZlVGltZQorKiBAaW50ZXJuYWwgSUNVIDQuMiB0ZWNo
bm9sb2d5IHByZXZpZXcKKyovCitVX0lOVEVSTkFMIHZvaWQgVV9FWFBPUlQyIAordWRhdF9hcHBs
eVBhdHRlcm5SZWxhdGl2ZShVRGF0ZUZvcm1hdCAqZm9ybWF0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBVQ2hhciAqZGF0ZVBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludDMyX3QgICAgIGRhdGVQYXR0ZXJuTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBVQ2hhciAqdGltZVBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
IGludDMyX3QgICAgIHRpbWVQYXR0ZXJuTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBVRXJyb3JDb2RlICAqc3RhdHVzKTsKKworCisjZW5kaWYgLyogI2lmICFVQ09ORklHX05PX0ZP
Uk1BVFRJTkcgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aWN1L3VuaWNvZGUvdW1pc2MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29kZS91
bWlzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmQ4NTQ1MWZjNzY3YzA1ODM1ZjZjMTVmNTY2ZjM1NjJlMmQ0YWY4
MzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUv
dW1pc2MuaApAQCAtMCwwICsxLDYwIEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIENvcHlyaWdo
dCAoQykgMTk5OS0yMDA2LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29y
cG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
CisqICAgZmlsZSBuYW1lOiAgdW1pc2MuaAorKiAgIGVuY29kaW5nOiAgIFVTLUFTQ0lJCisqICAg
dGFiIHNpemU6ICAgOCAobm90IHVzZWQpCisqICAgaW5kZW50YXRpb246NAorKgorKiAgIGNyZWF0
ZWQgb246IDE5OTlvY3QxNQorKiAgIGNyZWF0ZWQgYnk6IE1hcmt1cyBXLiBTY2hlcmVyCisqLwor
CisjaWZuZGVmIFVNSVNDX0gKKyNkZWZpbmUgVU1JU0NfSAorCisjaW5jbHVkZSAidW5pY29kZS91
dHlwZXMuaCIKKworLyoqCisgKiBcZmlsZQorICogXGJyaWVmICBDIEFQSTptaXNjIGRlZmluaXRp
b25zIAorICoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgbWlzY2VsbGFuZW91cyBkZWZpbml0aW9u
cyBmb3IgdGhlIEMgQVBJcy4gCisgKi8KKworVV9DREVDTF9CRUdJTgorCisvKiogQSBzdHJ1Y3Qg
cmVwcmVzZW50aW5nIGEgcmFuZ2Ugb2YgdGV4dCBjb250YWluaW5nIGEgc3BlY2lmaWMgZmllbGQg
CisgKiAgQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3R5cGVkZWYgc3RydWN0IFVGaWVsZFBvc2l0aW9u
IHsKKyAgLyoqCisgICAqIFRoZSBmaWVsZCAKKyAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAqLwor
ICBpbnQzMl90IGZpZWxkOworICAvKioKKyAgICogVGhlIHN0YXJ0IG9mIHRoZSB0ZXh0IHJhbmdl
IGNvbnRhaW5pbmcgZmllbGQgCisgICAqIEBzdGFibGUgSUNVIDIuMAorICAgKi8KKyAgaW50MzJf
dCBiZWdpbkluZGV4OworICAvKiogCisgICAqIFRoZSBsaW1pdCBvZiB0aGUgdGV4dCByYW5nZSBj
b250YWluaW5nIGZpZWxkIAorICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICovCisgIGludDMyX3Qg
ZW5kSW5kZXg7Cit9IFVGaWVsZFBvc2l0aW9uOworCisjaWYgIVVDT05GSUdfTk9fU0VSVklDRQor
LyoqCisgKiBPcGFxdWUgdHlwZSByZXR1cm5lZCBieSByZWdpc3Rlckluc3RhbmNlLCByZWdpc3Rl
ckZhY3RvcnkgYW5kIHVucmVnaXN0ZXIgZm9yIHNlcnZpY2UgcmVnaXN0cmF0aW9uLgorICogQHN0
YWJsZSBJQ1UgMi42CisgKi8KK3R5cGVkZWYgY29uc3Qgdm9pZCogVVJlZ2lzdHJ5S2V5OworI2Vu
ZGlmCisKK1VfQ0RFQ0xfRU5ECisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ljdS91bmljb2RlL3VudW0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5p
Y29kZS91bnVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTEwMmJhYjU4YjNkMWJiMmUyYjIwODJjYjU1ODljNWRk
ZWZlOGNjMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5p
Y29kZS91bnVtLmgKQEAgLTAsMCArMSw5OTkgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
CisqIENvcHlyaWdodCAoQykgMTk5Ny0yMDEwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hp
bmVzIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqIE1v
ZGlmaWNhdGlvbiBIaXN0b3J5OgorKgorKiAgIERhdGUgICAgICAgIE5hbWUgICAgICAgIERlc2Ny
aXB0aW9uCisqICAgMDYvMjQvOTkgICAgaGVsZW5hICAgICAgSW50ZWdyYXRlZCBBbGFuJ3MgTkYg
ZW5oYW5jZW1lbnRzIGFuZCBKYXZhMiBidWcgZml4ZXMKKyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK
KyovCisKKyNpZm5kZWYgX1VOVU0KKyNkZWZpbmUgX1VOVU0KKworI2luY2x1ZGUgInVuaWNvZGUv
dXR5cGVzLmgiCisKKyNpZiAhVUNPTkZJR19OT19GT1JNQVRUSU5HCisKKyNpbmNsdWRlICJ1bmlj
b2RlL2xvY2FscG9pbnRlci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWxvYy5oIgorI2luY2x1ZGUg
InVuaWNvZGUvdW1pc2MuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3BhcnNlZXJyLmgiCisvKioKKyAq
IFxmaWxlCisgKiBcYnJpZWYgQyBBUEk6IE51bWJlckZvcm1hdAorICoKKyAqIDxoMj4gTnVtYmVy
IEZvcm1hdCBDIEFQSSA8L2gyPgorICoKKyAqIE51bWJlciBGb3JtYXQgQyBBUEkgIFByb3ZpZGVz
IGZ1bmN0aW9ucyBmb3IKKyAqIGZvcm1hdHRpbmcgYW5kIHBhcnNpbmcgYSBudW1iZXIuICBBbHNv
IHByb3ZpZGVzIG1ldGhvZHMgZm9yCisgKiBkZXRlcm1pbmluZyB3aGljaCBsb2NhbGVzIGhhdmUg
bnVtYmVyIGZvcm1hdHMsIGFuZCB3aGF0IHRoZWlyIG5hbWVzCisgKiBhcmUuCisgKiA8UD4KKyAq
IFVOdW1iZXJGb3JtYXQgaGVscHMgeW91IHRvIGZvcm1hdCBhbmQgcGFyc2UgbnVtYmVycyBmb3Ig
YW55IGxvY2FsZS4KKyAqIFlvdXIgY29kZSBjYW4gYmUgY29tcGxldGVseSBpbmRlcGVuZGVudCBv
ZiB0aGUgbG9jYWxlIGNvbnZlbnRpb25zCisgKiBmb3IgZGVjaW1hbCBwb2ludHMsIHRob3VzYW5k
cy1zZXBhcmF0b3JzLCBvciBldmVuIHRoZSBwYXJ0aWN1bGFyCisgKiBkZWNpbWFsIGRpZ2l0cyB1
c2VkLCBvciB3aGV0aGVyIHRoZSBudW1iZXIgZm9ybWF0IGlzIGV2ZW4gZGVjaW1hbC4KKyAqIFRo
ZXJlIGFyZSBkaWZmZXJlbnQgbnVtYmVyIGZvcm1hdCBzdHlsZXMgbGlrZSBkZWNpbWFsLCBjdXJy
ZW5jeSwKKyAqIHBlcmNlbnQgYW5kIHNwZWxsb3V0LgorICogPFA+CisgKiBUbyBmb3JtYXQgYSBu
dW1iZXIgZm9yIHRoZSBjdXJyZW50IExvY2FsZSwgdXNlIG9uZSBvZiB0aGUgc3RhdGljCisgKiBm
YWN0b3J5IG1ldGhvZHM6CisgKiA8cHJlPgorICogXGNvZGUKKyAqICAgIFVDaGFyIG15U3RyaW5n
WzIwXTsKKyAqICAgIGRvdWJsZSBteU51bWJlciA9IDcuMDsKKyAqICAgIFVFcnJvckNvZGUgc3Rh
dHVzID0gVV9aRVJPX0VSUk9SOworICogICAgVU51bWJlckZvcm1hdCogbmYgPSB1bnVtX29wZW4o
VU5VTV9ERUZBVUxULCBOVUxMLCAtMSwgTlVMTCwgTlVMTCwgJnN0YXR1cyk7CisgKiAgICB1bnVt
X2Zvcm1hdERvdWJsZShuZiwgbXlOdW1iZXIsIG15U3RyaW5nLCAyMCwgTlVMTCwgJnN0YXR1cyk7
CisgKiAgICBwcmludGYoIiBFeGFtcGxlIDE6ICVzXG4iLCBhdXN0cmR1cChteVN0cmluZykgKTsg
Ly9hdXN0cmR1cCggYSBmdW5jdGlvbiB1c2VkIHRvIGNvbnZlcnQgVUNoYXIqIHRvIGNoYXIqKQor
ICogXGVuZGNvZGUKKyAqIDwvcHJlPgorICogSWYgeW91IGFyZSBmb3JtYXR0aW5nIG11bHRpcGxl
IG51bWJlcnMsIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGdldAorICogdGhlIGZvcm1hdCBhbmQg
dXNlIGl0IG11bHRpcGxlIHRpbWVzIHNvIHRoYXQgdGhlIHN5c3RlbSBkb2Vzbid0CisgKiBoYXZl
IHRvIGZldGNoIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbG9jYWwgbGFuZ3VhZ2UgYW5kIGNv
dW50cnkKKyAqIGNvbnZlbnRpb25zIG11bHRpcGxlIHRpbWVzLgorICogPHByZT4KKyAqIFxjb2Rl
CisgKiB1aW50MzJfdCBpLCByZXN1bHRsZW5ndGgsIHJlc2xlbm5lZWRlZDsKKyAqIFVFcnJvckNv
ZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICogVUZpZWxkUG9zaXRpb24gcG9zOworICogdWlu
dDMyX3QgYVtdID0geyAxMjMsIDMzMzMsIC0xMjM0NTY3IH07CisgKiBjb25zdCB1aW50MzJfdCBh
X2xlbiA9IHNpemVvZihhKSAvIHNpemVvZihhWzBdKTsKKyAqIFVOdW1iZXJGb3JtYXQqIG5mOwor
ICogVUNoYXIqIHJlc3VsdCA9IE5VTEw7CisgKgorICogbmYgPSB1bnVtX29wZW4oVU5VTV9ERUZB
VUxULCBOVUxMLCAtMSwgTlVMTCwgTlVMTCwgJnN0YXR1cyk7CisgKiBmb3IgKGkgPSAwOyBpIDwg
YV9sZW47IGkrKykgeworICogICAgcmVzdWx0bGVuZ3RoPTA7CisgKiAgICByZXNsZW5uZWVkZWQ9
dW51bV9mb3JtYXQobmYsIGFbaV0sIE5VTEwsIHJlc3VsdGxlbmd0aCwgJnBvcywgJnN0YXR1cyk7
CisgKiAgICByZXN1bHQgPSBOVUxMOworICogICAgaWYoc3RhdHVzPT1VX0JVRkZFUl9PVkVSRkxP
V19FUlJPUil7CisgKiAgICAgICBzdGF0dXM9VV9aRVJPX0VSUk9SOworICogICAgICAgcmVzdWx0
bGVuZ3RoPXJlc2xlbm5lZWRlZCsxOworICogICAgICAgcmVzdWx0PShVQ2hhciopbWFsbG9jKHNp
emVvZihVQ2hhcikgKiByZXN1bHRsZW5ndGgpOworICogICAgICAgdW51bV9mb3JtYXQobmYsIGFb
aV0sIHJlc3VsdCwgcmVzdWx0bGVuZ3RoLCAmcG9zLCAmc3RhdHVzKTsKKyAqICAgIH0KKyAqICAg
IHByaW50ZiggIiBFeGFtcGxlIDI6ICVzXG4iLCBhdXN0cmR1cChyZXN1bHQpKTsKKyAqICAgIGZy
ZWUocmVzdWx0KTsKKyAqIH0KKyAqIFxlbmRjb2RlCisgKiA8L3ByZT4KKyAqIFRvIGZvcm1hdCBh
IG51bWJlciBmb3IgYSBkaWZmZXJlbnQgTG9jYWxlLCBzcGVjaWZ5IGl0IGluIHRoZQorICogY2Fs
bCB0byB1bnVtX29wZW4oKS4KKyAqIDxwcmU+CisgKiBcY29kZQorICogICAgIFVOdW1iZXJGb3Jt
YXQqIG5mID0gdW51bV9vcGVuKFVOVU1fREVGQVVMVCwgTlVMTCwgLTEsICJmcl9GUiIsIE5VTEws
ICZzdWNjZXNzKQorICogXGVuZGNvZGUKKyAqIDwvcHJlPgorICogWW91IGNhbiB1c2UgYSBOdW1i
ZXJGb3JtYXQgQVBJIHVudW1fcGFyc2UoKSB0byBwYXJzZS4KKyAqIDxwcmU+CisgKiBcY29kZQor
ICogICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgKiAgICBpbnQzMl90IHBv
cz0wOworICogICAgaW50MzJfdCBudW07CisgKiAgICBudW0gPSB1bnVtX3BhcnNlKG5mLCBzdHIs
IHVfc3RybGVuKHN0ciksICZwb3MsICZzdGF0dXMpOworICogXGVuZGNvZGUKKyAqIDwvcHJlPgor
ICogVXNlIFVOVU1fREVDSU1BTCB0byBnZXQgdGhlIG5vcm1hbCBudW1iZXIgZm9ybWF0IGZvciB0
aGF0IGNvdW50cnkuCisgKiBUaGVyZSBhcmUgb3RoZXIgc3RhdGljIG9wdGlvbnMgYXZhaWxhYmxl
LiAgVXNlIFVOVU1fQ1VSUkVOQ1kKKyAqIHRvIGdldCB0aGUgY3VycmVuY3kgbnVtYmVyIGZvcm1h
dCBmb3IgdGhhdCBjb3VudHJ5LiAgVXNlIFVOVU1fUEVSQ0VOVAorICogdG8gZ2V0IGEgZm9ybWF0
IGZvciBkaXNwbGF5aW5nIHBlcmNlbnRhZ2VzLiBXaXRoIHRoaXMgZm9ybWF0LCBhCisgKiBmcmFj
dGlvbiBmcm9tIDAuNTMgaXMgZGlzcGxheWVkIGFzIDUzJS4KKyAqIDxQPgorICogVXNlIGEgcGF0
dGVybiB0byBjcmVhdGUgZWl0aGVyIGEgRGVjaW1hbEZvcm1hdCBvciBhIFJ1bGVCYXNlZE51bWJl
ckZvcm1hdAorICogZm9ybWF0dGVyLiAgVGhlIHBhdHRlcm4gbXVzdCBjb25mb3JtIHRvIHRoZSBz
eW50YXggZGVmaW5lZCBmb3IgdGhvc2UKKyAqIGZvcm1hdHRlcnMuCisgKiA8UD4KKyAqIFlvdSBj
YW4gYWxzbyBjb250cm9sIHRoZSBkaXNwbGF5IG9mIG51bWJlcnMgd2l0aCBzdWNoIGZ1bmN0aW9u
IGFzCisgKiB1bnVtX2dldEF0dHJpYnVlcygpIGFuZCB1bnVtX3NldEF0cmlidXRlcygpLCB3aGlj
aCBsZXQgeW91IHNldCB0aGUKKyAqIG1pbWludW0gZnJhY3Rpb24gZGlnaXRzLCBncm91cGluZywg
ZXRjLgorICogQHNlZSBVTnVtYmVyRm9ybWF0QXR0cmlidXRlcyBmb3IgbW9yZSBkZXRhaWxzCisg
KiA8UD4KKyAqIFlvdSBjYW4gYWxzbyB1c2UgZm9ybXMgb2YgdGhlIHBhcnNlIGFuZCBmb3JtYXQg
bWV0aG9kcyB3aXRoCisgKiBQYXJzZVBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiB0byBhbGxv
dyB5b3UgdG86CisgKiA8dWwgdHlwZT1yb3VuZD4KKyAqICAgPGxpPihhKSBwcm9ncmVzc2l2ZWx5
IHBhcnNlIHRocm91Z2ggcGllY2VzIG9mIGEgc3RyaW5nLgorICogICA8bGk+KGIpIGFsaWduIHRo
ZSBkZWNpbWFsIHBvaW50IGFuZCBvdGhlciBhcmVhcy4KKyAqIDwvdWw+CisgKiA8cD4KKyAqIEl0
IGlzIGFsc28gcG9zc2libGUgdG8gY2hhbmdlIG9yIHNldCB0aGUgc3ltYm9scyB1c2VkIGZvciBh
IHBhcnRpY3VsYXIKKyAqIGxvY2FsZSBsaWtlIHRoZSBjdXJyZW5jeSBzeW1ib2wsIHRoZSBncm91
cGluZyBzZXBlcmF0b3IgLCBtb25ldGFyeSBzZXBlcmF0b3IKKyAqIGV0YyBieSBtYWtpbmcgdXNl
IG9mIGZ1bmN0aW9ucyB1bnVtX3NldFN5bWJvbHMoKSBhbmQgdW51bV9nZXRTeW1ib2xzKCkuCisg
Ki8KKworLyoqIEEgbnVtYmVyIGZvcm1hdHRlci4KKyAqICBGb3IgdXNhZ2UgaW4gQyBwcm9ncmFt
cy4KKyAqICBAc3RhYmxlIElDVSAyLjAKKyAqLwordHlwZWRlZiB2b2lkKiBVTnVtYmVyRm9ybWF0
OworCisvKiogVGhlIHBvc3NpYmxlIG51bWJlciBmb3JtYXQgc3R5bGVzLiAKKyAqICBAc3RhYmxl
IElDVSAyLjAKKyAqLwordHlwZWRlZiBlbnVtIFVOdW1iZXJGb3JtYXRTdHlsZSB7CisgICAgLyoq
CisgICAgICogRGVjaW1hbCBmb3JtYXQgZGVmaW5lZCBieSBwYXR0ZXJuIAorICAgICAqIEBzdGFi
bGUgSUNVIDMuMAorICAgICAqLworICAgIFVOVU1fUEFUVEVSTl9ERUNJTUFMPTAsCisgICAgLyoq
IERlY2ltYWwgZm9ybWF0ICovCisgICAgVU5VTV9ERUNJTUFMPTEsCisgICAgLyoqIEN1cnJlbmN5
IGZvcm1hdCAqLworICAgIFVOVU1fQ1VSUkVOQ1ksCisgICAgLyoqIFBlcmNlbnQgZm9ybWF0ICov
CisgICAgVU5VTV9QRVJDRU5ULAorICAgIC8qKiBTY2llbnRpZmljIGZvcm1hdCAqLworICAgIFVO
VU1fU0NJRU5USUZJQywKKyAgICAvKiogU3BlbGxvdXQgcnVsZS1iYXNlZCBmb3JtYXQgKi8KKyAg
ICBVTlVNX1NQRUxMT1VULAorICAgIC8qKiAKKyAgICAgKiBPcmRpbmFsIHJ1bGUtYmFzZWQgZm9y
bWF0IAorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVOVU1fT1JESU5BTCwK
KyAgICAvKiogCisgICAgICogRHVyYXRpb24gcnVsZS1iYXNlZCBmb3JtYXQgCisgICAgICogQHN0
YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVU5VTV9EVVJBVElPTiwKKyAgICAvKiogCisgICAg
ICogTnVtYmVyaW5nIHN5c3RlbSBydWxlLWJhc2VkIGZvcm1hdCAKKyAgICAgKiBAc3RhYmxlIElD
VSA0LjIKKyAgICAgKi8KKyAgICBVTlVNX05VTUJFUklOR19TWVNURU0sCisgICAgLyoqIAorICAg
ICAqIFJ1bGUtYmFzZWQgZm9ybWF0IGRlZmluZWQgYnkgcGF0dGVybiAKKyAgICAgKiBAc3RhYmxl
IElDVSAzLjAKKyAgICAgKi8KKyAgICBVTlVNX1BBVFRFUk5fUlVMRUJBU0VELAorICAgIC8qKiBE
ZWZhdWx0IGZvcm1hdCAqLworICAgIFVOVU1fREVGQVVMVCA9IFVOVU1fREVDSU1BTCwKKyAgICAv
KiogKEFsaWFzIGZvciBVTlVNX1BBVFRFUk5fREVDSU1BTCkgKi8KKyAgICBVTlVNX0lHTk9SRSA9
IFVOVU1fUEFUVEVSTl9ERUNJTUFMCit9IFVOdW1iZXJGb3JtYXRTdHlsZTsKKworLyoqIFRoZSBw
b3NzaWJsZSBudW1iZXIgZm9ybWF0IHJvdW5kaW5nIG1vZGVzLiAKKyAqICBAc3RhYmxlIElDVSAy
LjAKKyAqLwordHlwZWRlZiBlbnVtIFVOdW1iZXJGb3JtYXRSb3VuZGluZ01vZGUgeworICAgIFVO
VU1fUk9VTkRfQ0VJTElORywKKyAgICBVTlVNX1JPVU5EX0ZMT09SLAorICAgIFVOVU1fUk9VTkRf
RE9XTiwKKyAgICBVTlVNX1JPVU5EX1VQLAorICAgIC8qKgorICAgICAqIEhhbGYtZXZlbiByb3Vu
ZGluZywgbWlzc3BlbGxlZCBuYW1lCisgICAgICogQGRlcHJlY2F0ZWQsIElDVSAzLjgKKyAgICAg
Ki8KKyAgICBVTlVNX0ZPVU5EX0hBTEZFVkVOLAorICAgIFVOVU1fUk9VTkRfSEFMRkRPV04sCisg
ICAgVU5VTV9ST1VORF9IQUxGVVAsCisgICAgLyoqCisgICAgICogSGFsZi1ldmVuIHJvdW5kaW5n
CisgICAgICogQHN0YWJsZSwgSUNVIDMuOAorICAgICAqLworICAgIFVOVU1fUk9VTkRfSEFMRkVW
RU4gPSBVTlVNX0ZPVU5EX0hBTEZFVkVOCit9IFVOdW1iZXJGb3JtYXRSb3VuZGluZ01vZGU7CisK
Ky8qKiBUaGUgcG9zc2libGUgbnVtYmVyIGZvcm1hdCBwYWQgcG9zaXRpb25zLiAKKyAqICBAc3Rh
YmxlIElDVSAyLjAKKyAqLwordHlwZWRlZiBlbnVtIFVOdW1iZXJGb3JtYXRQYWRQb3NpdGlvbiB7
CisgICAgVU5VTV9QQURfQkVGT1JFX1BSRUZJWCwKKyAgICBVTlVNX1BBRF9BRlRFUl9QUkVGSVgs
CisgICAgVU5VTV9QQURfQkVGT1JFX1NVRkZJWCwKKyAgICBVTlVNX1BBRF9BRlRFUl9TVUZGSVgK
K30gVU51bWJlckZvcm1hdFBhZFBvc2l0aW9uOworCisvKioKKyAqIENyZWF0ZSBhbmQgcmV0dXJu
IGEgbmV3IFVOdW1iZXJGb3JtYXQgZm9yIGZvcm1hdHRpbmcgYW5kIHBhcnNpbmcKKyAqIG51bWJl
cnMuICBBIFVOdW1iZXJGb3JtYXQgbWF5IGJlIHVzZWQgdG8gZm9ybWF0IG51bWJlcnMgYnkgY2Fs
bGluZworICoge0BsaW5rICN1bnVtX2Zvcm1hdCB9LCBhbmQgdG8gcGFyc2UgbnVtYmVycyBieSBj
YWxsaW5nIHtAbGluayAjdW51bV9wYXJzZSB9LgorICogVGhlIGNhbGxlciBtdXN0IGNhbGwge0Bs
aW5rICN1bnVtX2Nsb3NlIH0gd2hlbiBkb25lIHRvIHJlbGVhc2UgcmVzb3VyY2VzCisgKiB1c2Vk
IGJ5IHRoaXMgb2JqZWN0LgorICogQHBhcmFtIHN0eWxlIFRoZSB0eXBlIG9mIG51bWJlciBmb3Jt
YXQgdG8gb3Blbjogb25lIG9mCisgKiBVTlVNX0RFQ0lNQUwsIFVOVU1fQ1VSUkVOQ1ksIFVOVU1f
UEVSQ0VOVCwgVU5VTV9TQ0lFTlRJRklDLCBVTlVNX1NQRUxMT1VULAorICogVU5VTV9QQVRURVJO
X0RFQ0lNQUwsIFVOVU1fUEFUVEVSTl9SVUxFQkFTRUQsIG9yIFVOVU1fREVGQVVMVC4KKyAqIElm
IFVOVU1fUEFUVEVSTl9ERUNJTUFMIG9yIFVOVU1fUEFUVEVSTl9SVUxFQkFTRUQgaXMgcGFzc2Vk
IHRoZW4gdGhlCisgKiBudW1iZXIgZm9ybWF0IGlzIG9wZW5lZCB1c2luZyB0aGUgZ2l2ZW4gcGF0
dGVybiwgd2hpY2ggbXVzdCBjb25mb3JtCisgKiB0byB0aGUgc3ludGF4IGRlc2NyaWJlZCBpbiBE
ZWNpbWFsRm9ybWF0IG9yIFJ1bGVCYXNlZE51bWJlckZvcm1hdCwKKyAqIHJlc3BlY3RpdmVseS4K
KyAqIEBwYXJhbSBwYXR0ZXJuIEEgcGF0dGVybiBzcGVjaWZ5aW5nIHRoZSBmb3JtYXQgdG8gdXNl
LiAKKyAqIFRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgdW5sZXNzIHRoZSBzdHlsZSBpcworICog
VU5VTV9QQVRURVJOX0RFQ0lNQUwgb3IgVU5VTV9QQVRURVJOX1JVTEVCQVNFRC4KKyAqIEBwYXJh
bSBwYXR0ZXJuTGVuZ3RoIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgcGF0dGVybiwg
b3IgLTEKKyAqIGlmIG51bGwtdGVybWluYXRlZC4gVGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCB1
bmxlc3MgdGhlIHN0eWxlIGlzCisgKiBVTlVNX1BBVFRFUk4uCisgKiBAcGFyYW0gbG9jYWxlIEEg
bG9jYWxlIGlkZW50aWZpZXIgdG8gdXNlIHRvIGRldGVybWluZSBmb3JtYXR0aW5nCisgKiBhbmQg
cGFyc2luZyBjb252ZW50aW9ucywgb3IgTlVMTCB0byB1c2UgdGhlIGRlZmF1bHQgbG9jYWxlLgor
ICogQHBhcmFtIHBhcnNlRXJyIEEgcG9pbnRlciB0byBhIFVQYXJzZUVycm9yIHN0cnVjdCB0byBy
ZWNlaXZlIHRoZQorICogZGV0YWlscyBvZiBhbnkgcGFyc2luZyBlcnJvcnMsIG9yIE5VTEwgaWYg
bm8gcGFyc2luZyBlcnJvciBkZXRhaWxzCisgKiBhcmUgZGVzaXJlZC4KKyAqIEBwYXJhbSBzdGF0
dXMgQSBwb2ludGVyIHRvIGFuIGlucHV0LW91dHB1dCBVRXJyb3JDb2RlLgorICogQHJldHVybiBB
IHBvaW50ZXIgdG8gYSBuZXdseSBjcmVhdGVkIFVOdW1iZXJGb3JtYXQsIG9yIE5VTEwgaWYgYW4K
KyAqIGVycm9yIG9jY3VycmVkLgorICogQHNlZSB1bnVtX2Nsb3NlCisgKiBAc2VlIERlY2ltYWxG
b3JtYXQKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBVTnVtYmVyRm9ybWF0KiBV
X0VYUE9SVDIgCit1bnVtX29wZW4oICBVTnVtYmVyRm9ybWF0U3R5bGUgICAgc3R5bGUsCisgICAg
ICAgICAgICBjb25zdCAgICBVQ2hhciogICAgcGF0dGVybiwKKyAgICAgICAgICAgIGludDMyX3Qg
ICAgICAgICAgICBwYXR0ZXJuTGVuZ3RoLAorICAgICAgICAgICAgY29uc3QgICAgY2hhciogICAg
IGxvY2FsZSwKKyAgICAgICAgICAgIFVQYXJzZUVycm9yKiAgICAgICBwYXJzZUVyciwKKyAgICAg
ICAgICAgIFVFcnJvckNvZGUqICAgICAgICBzdGF0dXMpOworCisKKy8qKgorKiBDbG9zZSBhIFVO
dW1iZXJGb3JtYXQuCisqIE9uY2UgY2xvc2VkLCBhIFVOdW1iZXJGb3JtYXQgbWF5IG5vIGxvbmdl
ciBiZSB1c2VkLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gY2xvc2UuCisqIEBzdGFi
bGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordW51bV9jbG9zZShVTnVt
YmVyRm9ybWF0KiBmbXQpOworCisjaWYgVV9TSE9XX0NQTFVTUExVU19BUEkKKworVV9OQU1FU1BB
Q0VfQkVHSU4KKworLyoqCisgKiBcY2xhc3MgTG9jYWxVTnVtYmVyRm9ybWF0UG9pbnRlcgorICog
IlNtYXJ0IHBvaW50ZXIiIGNsYXNzLCBjbG9zZXMgYSBVTnVtYmVyRm9ybWF0IHZpYSB1bnVtX2Ns
b3NlKCkuCisgKiBGb3IgbW9zdCBtZXRob2RzIHNlZSB0aGUgTG9jYWxQb2ludGVyQmFzZSBiYXNl
IGNsYXNzLgorICoKKyAqIEBzZWUgTG9jYWxQb2ludGVyQmFzZQorICogQHNlZSBMb2NhbFBvaW50
ZXIKKyAqIEBzdGFibGUgSUNVIDQuNAorICovCitVX0RFRklORV9MT0NBTF9PUEVOX1BPSU5URVIo
TG9jYWxVTnVtYmVyRm9ybWF0UG9pbnRlciwgVU51bWJlckZvcm1hdCwgdW51bV9jbG9zZSk7CisK
K1VfTkFNRVNQQUNFX0VORAorCisjZW5kaWYKKworLyoqCisgKiBPcGVuIGEgY29weSBvZiBhIFVO
dW1iZXJGb3JtYXQuCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGEgZGVlcCBjb3B5LgorICog
QHBhcmFtIGZtdCBUaGUgZm9ybWF0IHRvIGNvcHkKKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVy
IHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzLgorICogQHJldHVybiBBIHBv
aW50ZXIgdG8gYSBVTnVtYmVyRm9ybWF0IGlkZW50aWNhbCB0byBmbXQuCisgKiBAc3RhYmxlIElD
VSAyLjAKKyAqLworVV9TVEFCTEUgVU51bWJlckZvcm1hdCogVV9FWFBPUlQyIAordW51bV9jbG9u
ZShjb25zdCBVTnVtYmVyRm9ybWF0ICpmbXQsCisgICAgICAgVUVycm9yQ29kZSAqc3RhdHVzKTsK
KworLyoqCisqIEZvcm1hdCBhbiBpbnRlZ2VyIHVzaW5nIGEgVU51bWJlckZvcm1hdC4KKyogVGhl
IGludGVnZXIgd2lsbCBiZSBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBVTnVtYmVyRm9ybWF0
J3MgbG9jYWxlLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gdXNlLgorKiBAcGFyYW0g
bnVtYmVyIFRoZSBudW1iZXIgdG8gZm9ybWF0LgorKiBAcGFyYW0gcmVzdWx0IEEgcG9pbnRlciB0
byBhIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBmb3JtYXR0ZWQgbnVtYmVyLgorKiBAcGFyYW0gcmVz
dWx0TGVuZ3RoIFRoZSBtYXhpbXVtIHNpemUgb2YgcmVzdWx0LgorKiBAcGFyYW0gcG9zICAgIEEg
cG9pbnRlciB0byBhIFVGaWVsZFBvc2l0aW9uLiAgT24gaW5wdXQsIHBvc2l0aW9uLT5maWVsZAor
KiBpcyByZWFkLiAgT24gb3V0cHV0LCBwb3NpdGlvbi0+YmVnaW5JbmRleCBhbmQgcG9zaXRpb24t
PmVuZEluZGV4IGluZGljYXRlCisqIHRoZSBiZWdpbm5pbmcgYW5kIGVuZGluZyBpbmRpY2VzIG9m
IGZpZWxkIG51bWJlciBwb3NpdGlvbi0+ZmllbGQsIGlmIHN1Y2gKKyogYSBmaWVsZCBleGlzdHMu
ICBUaGlzIHBhcmFtZXRlciBtYXkgYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSBubyBmaWVsZAorKiBA
cGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVy
cm9ycworKiBAcmV0dXJuIFRoZSB0b3RhbCBidWZmZXIgc2l6ZSBuZWVkZWQ7IGlmIGdyZWF0ZXIg
dGhhbiByZXN1bHRMZW5ndGgsIHRoZSBvdXRwdXQgd2FzIHRydW5jYXRlZC4KKyogQHNlZSB1bnVt
X2Zvcm1hdEludDY0CisqIEBzZWUgdW51bV9mb3JtYXREb3VibGUKKyogQHNlZSB1bnVtX3BhcnNl
CisqIEBzZWUgdW51bV9wYXJzZUludDY0CisqIEBzZWUgdW51bV9wYXJzZURvdWJsZQorKiBAc2Vl
IFVGaWVsZFBvc2l0aW9uCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGludDMyX3Qg
VV9FWFBPUlQyIAordW51bV9mb3JtYXQoICAgIGNvbnN0ICAgIFVOdW1iZXJGb3JtYXQqICAgIGZt
dCwKKyAgICAgICAgaW50MzJfdCAgICAgICAgICAgIG51bWJlciwKKyAgICAgICAgVUNoYXIqICAg
ICAgICAgICAgcmVzdWx0LAorICAgICAgICBpbnQzMl90ICAgICAgICAgICAgcmVzdWx0TGVuZ3Ro
LAorICAgICAgICBVRmllbGRQb3NpdGlvbiAgICAqcG9zLAorICAgICAgICBVRXJyb3JDb2RlKiAg
ICAgICAgc3RhdHVzKTsKKworLyoqCisqIEZvcm1hdCBhbiBpbnQ2NCB1c2luZyBhIFVOdW1iZXJG
b3JtYXQuCisqIFRoZSBpbnQ2NCB3aWxsIGJlIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIFVO
dW1iZXJGb3JtYXQncyBsb2NhbGUuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byB1c2Uu
CisqIEBwYXJhbSBudW1iZXIgVGhlIG51bWJlciB0byBmb3JtYXQuCisqIEBwYXJhbSByZXN1bHQg
QSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIGZvcm1hdHRlZCBudW1iZXIuCisq
IEBwYXJhbSByZXN1bHRMZW5ndGggVGhlIG1heGltdW0gc2l6ZSBvZiByZXN1bHQuCisqIEBwYXJh
bSBwb3MgICAgQSBwb2ludGVyIHRvIGEgVUZpZWxkUG9zaXRpb24uICBPbiBpbnB1dCwgcG9zaXRp
b24tPmZpZWxkCisqIGlzIHJlYWQuICBPbiBvdXRwdXQsIHBvc2l0aW9uLT5iZWdpbkluZGV4IGFu
ZCBwb3NpdGlvbi0+ZW5kSW5kZXggaW5kaWNhdGUKKyogdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5n
IGluZGljZXMgb2YgZmllbGQgbnVtYmVyIHBvc2l0aW9uLT5maWVsZCwgaWYgc3VjaAorKiBhIGZp
ZWxkIGV4aXN0cy4gIFRoaXMgcGFyYW1ldGVyIG1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIG5v
IGZpZWxkCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVj
ZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsg
aWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgor
KiBAc2VlIHVudW1fZm9ybWF0CisqIEBzZWUgdW51bV9mb3JtYXREb3VibGUKKyogQHNlZSB1bnVt
X3BhcnNlCisqIEBzZWUgdW51bV9wYXJzZUludDY0CisqIEBzZWUgdW51bV9wYXJzZURvdWJsZQor
KiBAc2VlIFVGaWVsZFBvc2l0aW9uCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGlu
dDMyX3QgVV9FWFBPUlQyIAordW51bV9mb3JtYXRJbnQ2NChjb25zdCBVTnVtYmVyRm9ybWF0ICpm
bXQsCisgICAgICAgIGludDY0X3QgICAgICAgICBudW1iZXIsCisgICAgICAgIFVDaGFyKiAgICAg
ICAgICByZXN1bHQsCisgICAgICAgIGludDMyX3QgICAgICAgICByZXN1bHRMZW5ndGgsCisgICAg
ICAgIFVGaWVsZFBvc2l0aW9uICpwb3MsCisgICAgICAgIFVFcnJvckNvZGUqICAgICBzdGF0dXMp
OworCisvKioKKyogRm9ybWF0IGEgZG91YmxlIHVzaW5nIGEgVU51bWJlckZvcm1hdC4KKyogVGhl
IGRvdWJsZSB3aWxsIGJlIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIFVOdW1iZXJGb3JtYXQn
cyBsb2NhbGUuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byB1c2UuCisqIEBwYXJhbSBu
dW1iZXIgVGhlIG51bWJlciB0byBmb3JtYXQuCisqIEBwYXJhbSByZXN1bHQgQSBwb2ludGVyIHRv
IGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIGZvcm1hdHRlZCBudW1iZXIuCisqIEBwYXJhbSByZXN1
bHRMZW5ndGggVGhlIG1heGltdW0gc2l6ZSBvZiByZXN1bHQuCisqIEBwYXJhbSBwb3MgICAgQSBw
b2ludGVyIHRvIGEgVUZpZWxkUG9zaXRpb24uICBPbiBpbnB1dCwgcG9zaXRpb24tPmZpZWxkCisq
IGlzIHJlYWQuICBPbiBvdXRwdXQsIHBvc2l0aW9uLT5iZWdpbkluZGV4IGFuZCBwb3NpdGlvbi0+
ZW5kSW5kZXggaW5kaWNhdGUKKyogdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIGluZGljZXMgb2Yg
ZmllbGQgbnVtYmVyIHBvc2l0aW9uLT5maWVsZCwgaWYgc3VjaAorKiBhIGZpZWxkIGV4aXN0cy4g
IFRoaXMgcGFyYW1ldGVyIG1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIG5vIGZpZWxkCisqIEBw
YXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJy
b3JzCisqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0
aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorKiBAc2VlIHVudW1f
Zm9ybWF0CisqIEBzZWUgdW51bV9mb3JtYXRJbnQ2NAorKiBAc2VlIHVudW1fcGFyc2UKKyogQHNl
ZSB1bnVtX3BhcnNlSW50NjQKKyogQHNlZSB1bnVtX3BhcnNlRG91YmxlCisqIEBzZWUgVUZpZWxk
UG9zaXRpb24KKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9S
VDIgCit1bnVtX2Zvcm1hdERvdWJsZSggICAgY29uc3QgICAgVU51bWJlckZvcm1hdCogIGZtdCwK
KyAgICAgICAgICAgIGRvdWJsZSAgICAgICAgICBudW1iZXIsCisgICAgICAgICAgICBVQ2hhciog
ICAgICAgICAgcmVzdWx0LAorICAgICAgICAgICAgaW50MzJfdCAgICAgICAgIHJlc3VsdExlbmd0
aCwKKyAgICAgICAgICAgIFVGaWVsZFBvc2l0aW9uICAqcG9zLCAvKiAwIGlmIGlnbm9yZSAqLwor
ICAgICAgICAgICAgVUVycm9yQ29kZSogICAgIHN0YXR1cyk7CisKKy8qKgorKiBGb3JtYXQgYSBk
ZWNpbWFsIG51bWJlciB1c2luZyBhIFVOdW1iZXJGb3JtYXQuCisqIFRoZSBudW1iZXIgd2lsbCBi
ZSBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBVTnVtYmVyRm9ybWF0J3MgbG9jYWxlLgorKiBU
aGUgc3ludGF4IG9mIHRoZSBpbnB1dCBudW1iZXIgaXMgYSAibnVtZXJpYyBzdHJpbmciCisqIGFz
IGRlZmluZWQgaW4gdGhlIERlY2ltYWwgQXJpdGhtZXRpYyBTcGVjaWZpY2F0aW9uLCBhdmFpbGFi
bGUgYXQKKyogaHR0cDovL3NwZWxlb3Ryb3ZlLmNvbS9kZWNpbWFsCisqIEBwYXJhbSBmbXQgVGhl
IGZvcm1hdHRlciB0byB1c2UuCisqIEBwYXJhbSBudW1iZXIgVGhlIG51bWJlciB0byBmb3JtYXQu
CisqIEBwYXJhbSBsZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQgbnVtYmVyLCBvciAtMSBp
ZiB0aGUgaW5wdXQgaXMgbnVsLXRlcm1pbmF0ZWQuCisqIEBwYXJhbSByZXN1bHQgQSBwb2ludGVy
IHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIGZvcm1hdHRlZCBudW1iZXIuCisqIEBwYXJhbSBy
ZXN1bHRMZW5ndGggVGhlIG1heGltdW0gc2l6ZSBvZiByZXN1bHQuCisqIEBwYXJhbSBwb3MgICAg
QSBwb2ludGVyIHRvIGEgVUZpZWxkUG9zaXRpb24uICBPbiBpbnB1dCwgcG9zaXRpb24tPmZpZWxk
CisqICAgICAgICAgICAgICAgaXMgcmVhZC4gIE9uIG91dHB1dCwgcG9zaXRpb24tPmJlZ2luSW5k
ZXggYW5kIHBvc2l0aW9uLT5lbmRJbmRleCBpbmRpY2F0ZQorKiAgICAgICAgICAgICAgIHRoZSBi
ZWdpbm5pbmcgYW5kIGVuZGluZyBpbmRpY2VzIG9mIGZpZWxkIG51bWJlciBwb3NpdGlvbi0+Zmll
bGQsIGlmIHN1Y2gKKyogICAgICAgICAgICAgICBhIGZpZWxkIGV4aXN0cy4gIFRoaXMgcGFyYW1l
dGVyIG1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIGl0IGlzIGlnbm9yZWQuCisqIEBwYXJhbSBz
dGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisq
IEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJl
c3VsdExlbmd0aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorKiBAc2VlIHVudW1fZm9ybWF0
CisqIEBzZWUgdW51bV9mb3JtYXRJbnQ2NAorKiBAc2VlIHVudW1fcGFyc2UKKyogQHNlZSB1bnVt
X3BhcnNlSW50NjQKKyogQHNlZSB1bnVtX3BhcnNlRG91YmxlCisqIEBzZWUgVUZpZWxkUG9zaXRp
b24KKyogQHN0YWJsZSBJQ1UgNC40IAorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAor
dW51bV9mb3JtYXREZWNpbWFsKCAgICBjb25zdCAgICBVTnVtYmVyRm9ybWF0KiAgZm10LAorICAg
ICAgICAgICAgY29uc3QgY2hhciAqICAgIG51bWJlciwKKyAgICAgICAgICAgIGludDMyX3QgICAg
ICAgICBsZW5ndGgsCisgICAgICAgICAgICBVQ2hhciogICAgICAgICAgcmVzdWx0LAorICAgICAg
ICAgICAgaW50MzJfdCAgICAgICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAgICAgIFVGaWVsZFBv
c2l0aW9uICAqcG9zLCAvKiAwIGlmIGlnbm9yZSAqLworICAgICAgICAgICAgVUVycm9yQ29kZSog
ICAgIHN0YXR1cyk7CisKKy8qKgorICogRm9ybWF0IGEgZG91YmxlIGN1cnJlbmN5IGFtb3VudCB1
c2luZyBhIFVOdW1iZXJGb3JtYXQuCisgKiBUaGUgZG91YmxlIHdpbGwgYmUgZm9ybWF0dGVkIGFj
Y29yZGluZyB0byB0aGUgVU51bWJlckZvcm1hdCdzIGxvY2FsZS4KKyAqIEBwYXJhbSBmbXQgdGhl
IGZvcm1hdHRlciB0byB1c2UKKyAqIEBwYXJhbSBudW1iZXIgdGhlIG51bWJlciB0byBmb3JtYXQK
KyAqIEBwYXJhbSBjdXJyZW5jeSB0aGUgMy1sZXR0ZXIgbnVsbC10ZXJtaW5hdGVkIElTTyA0MjE3
IGN1cnJlbmN5IGNvZGUKKyAqIEBwYXJhbSByZXN1bHQgYSBwb2ludGVyIHRvIHRoZSBidWZmZXIg
dG8gcmVjZWl2ZSB0aGUgZm9ybWF0dGVkIG51bWJlcgorICogQHBhcmFtIHJlc3VsdExlbmd0aCB0
aGUgbWF4aW11bSBudW1iZXIgb2YgVUNoYXJzIHRvIHdyaXRlIHRvIHJlc3VsdAorICogQHBhcmFt
IHBvcyBhIHBvaW50ZXIgdG8gYSBVRmllbGRQb3NpdGlvbi4gIE9uIGlucHV0LAorICogcG9zaXRp
b24tPmZpZWxkIGlzIHJlYWQuICBPbiBvdXRwdXQsIHBvc2l0aW9uLT5iZWdpbkluZGV4IGFuZAor
ICogcG9zaXRpb24tPmVuZEluZGV4IGluZGljYXRlIHRoZSBiZWdpbm5pbmcgYW5kIGVuZGluZyBp
bmRpY2VzIG9mCisgKiBmaWVsZCBudW1iZXIgcG9zaXRpb24tPmZpZWxkLCBpZiBzdWNoIGEgZmll
bGQgZXhpc3RzLiAgVGhpcworICogcGFyYW1ldGVyIG1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNl
IGl0IGlzIGlnbm9yZWQuCisgKiBAcGFyYW0gc3RhdHVzIGEgcG9pbnRlciB0byBhbiBpbnB1dC1v
dXRwdXQgVUVycm9yQ29kZQorICogQHJldHVybiB0aGUgdG90YWwgYnVmZmVyIHNpemUgbmVlZGVk
OyBpZiBncmVhdGVyIHRoYW4gcmVzdWx0TGVuZ3RoLAorICogdGhlIG91dHB1dCB3YXMgdHJ1bmNh
dGVkLgorICogQHNlZSB1bnVtX2Zvcm1hdERvdWJsZQorICogQHNlZSB1bnVtX3BhcnNlRG91Ymxl
Q3VycmVuY3kKKyAqIEBzZWUgVUZpZWxkUG9zaXRpb24KKyAqIEBzdGFibGUgSUNVIDMuMAorICov
CitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VudW1fZm9ybWF0RG91YmxlQ3VycmVuY3ko
Y29uc3QgVU51bWJlckZvcm1hdCogZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgICBkb3Vi
bGUgbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhciogY3VycmVuY3ksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyKiByZXN1bHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludDMyX3QgcmVzdWx0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBVRmllbGRQb3NpdGlvbiogcG9zLCAvKiBpZ25vcmVkIGlmIDAgKi8KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgVUVycm9yQ29kZSogc3RhdHVzKTsKKworLyoqCisqIFBhcnNlIGEgc3RyaW5n
IGludG8gYW4gaW50ZWdlciB1c2luZyBhIFVOdW1iZXJGb3JtYXQuCisqIFRoZSBzdHJpbmcgd2ls
bCBiZSBwYXJzZWQgYWNjb3JkaW5nIHRvIHRoZSBVTnVtYmVyRm9ybWF0J3MgbG9jYWxlLgorKiBA
cGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gdXNlLgorKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0
byBwYXJzZS4KKyogQHBhcmFtIHRleHRMZW5ndGggVGhlIGxlbmd0aCBvZiB0ZXh0LCBvciAtMSBp
ZiBudWxsLXRlcm1pbmF0ZWQuCisqIEBwYXJhbSBwYXJzZVBvcyBJZiBub3QgMCwgb24gaW5wdXQg
YSBwb2ludGVyIHRvIGFuIGludGVnZXIgc3BlY2lmeWluZyB0aGUgb2Zmc2V0IGF0IHdoaWNoCisq
IHRvIGJlZ2luIHBhcnNpbmcuICBJZiBub3QgMCwgb24gb3V0cHV0IHRoZSBvZmZzZXQgYXQgd2hp
Y2ggcGFyc2luZyBlbmRlZC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9y
Q29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUgdmFsdWUgb2YgdGhlIHBh
cnNlZCBpbnRlZ2VyCisqIEBzZWUgdW51bV9wYXJzZUludDY0CisqIEBzZWUgdW51bV9wYXJzZURv
dWJsZQorKiBAc2VlIHVudW1fZm9ybWF0CisqIEBzZWUgdW51bV9mb3JtYXRJbnQ2NAorKiBAc2Vl
IHVudW1fZm9ybWF0RG91YmxlCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGludDMy
X3QgVV9FWFBPUlQyIAordW51bV9wYXJzZSggICAgY29uc3QgICBVTnVtYmVyRm9ybWF0KiAgZm10
LAorICAgICAgICBjb25zdCAgIFVDaGFyKiAgICAgICAgICB0ZXh0LAorICAgICAgICBpbnQzMl90
ICAgICAgICAgdGV4dExlbmd0aCwKKyAgICAgICAgaW50MzJfdCAgICAgICAgICpwYXJzZVBvcyAv
KiAwID0gc3RhcnQgKi8sCisgICAgICAgIFVFcnJvckNvZGUgICAgICAqc3RhdHVzKTsKKworLyoq
CisqIFBhcnNlIGEgc3RyaW5nIGludG8gYW4gaW50NjQgdXNpbmcgYSBVTnVtYmVyRm9ybWF0Lgor
KiBUaGUgc3RyaW5nIHdpbGwgYmUgcGFyc2VkIGFjY29yZGluZyB0byB0aGUgVU51bWJlckZvcm1h
dCdzIGxvY2FsZS4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHVzZS4KKyogQHBhcmFt
IHRleHQgVGhlIHRleHQgdG8gcGFyc2UuCisqIEBwYXJhbSB0ZXh0TGVuZ3RoIFRoZSBsZW5ndGgg
b2YgdGV4dCwgb3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorKiBAcGFyYW0gcGFyc2VQb3MgSWYg
bm90IDAsIG9uIGlucHV0IGEgcG9pbnRlciB0byBhbiBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlIG9m
ZnNldCBhdCB3aGljaAorKiB0byBiZWdpbiBwYXJzaW5nLiAgSWYgbm90IDAsIG9uIG91dHB1dCB0
aGUgb2Zmc2V0IGF0IHdoaWNoIHBhcnNpbmcgZW5kZWQuCisqIEBwYXJhbSBzdGF0dXMgQSBwb2lu
dGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhl
IHZhbHVlIG9mIHRoZSBwYXJzZWQgaW50ZWdlcgorKiBAc2VlIHVudW1fcGFyc2UKKyogQHNlZSB1
bnVtX3BhcnNlRG91YmxlCisqIEBzZWUgdW51bV9mb3JtYXQKKyogQHNlZSB1bnVtX2Zvcm1hdElu
dDY0CisqIEBzZWUgdW51bV9mb3JtYXREb3VibGUKKyogQHN0YWJsZSBJQ1UgMi44CisqLworVV9T
VEFCTEUgaW50NjRfdCBVX0VYUE9SVDIgCit1bnVtX3BhcnNlSW50NjQoY29uc3QgVU51bWJlckZv
cm1hdCogIGZtdCwKKyAgICAgICAgY29uc3QgVUNoYXIqICB0ZXh0LAorICAgICAgICBpbnQzMl90
ICAgICAgIHRleHRMZW5ndGgsCisgICAgICAgIGludDMyX3QgICAgICAgKnBhcnNlUG9zIC8qIDAg
PSBzdGFydCAqLywKKyAgICAgICAgVUVycm9yQ29kZSAgICAqc3RhdHVzKTsKKworLyoqCisqIFBh
cnNlIGEgc3RyaW5nIGludG8gYSBkb3VibGUgdXNpbmcgYSBVTnVtYmVyRm9ybWF0LgorKiBUaGUg
c3RyaW5nIHdpbGwgYmUgcGFyc2VkIGFjY29yZGluZyB0byB0aGUgVU51bWJlckZvcm1hdCdzIGxv
Y2FsZS4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHVzZS4KKyogQHBhcmFtIHRleHQg
VGhlIHRleHQgdG8gcGFyc2UuCisqIEBwYXJhbSB0ZXh0TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGV4
dCwgb3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorKiBAcGFyYW0gcGFyc2VQb3MgSWYgbm90IDAs
IG9uIGlucHV0IGEgcG9pbnRlciB0byBhbiBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlIG9mZnNldCBh
dCB3aGljaAorKiB0byBiZWdpbiBwYXJzaW5nLiAgSWYgbm90IDAsIG9uIG91dHB1dCB0aGUgb2Zm
c2V0IGF0IHdoaWNoIHBhcnNpbmcgZW5kZWQuCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRv
IGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHZhbHVl
IG9mIHRoZSBwYXJzZWQgZG91YmxlCisqIEBzZWUgdW51bV9wYXJzZQorKiBAc2VlIHVudW1fcGFy
c2VJbnQ2NAorKiBAc2VlIHVudW1fZm9ybWF0CisqIEBzZWUgdW51bV9mb3JtYXRJbnQ2NAorKiBA
c2VlIHVudW1fZm9ybWF0RG91YmxlCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGRv
dWJsZSBVX0VYUE9SVDIgCit1bnVtX3BhcnNlRG91YmxlKCAgICBjb25zdCAgIFVOdW1iZXJGb3Jt
YXQqICBmbXQsCisgICAgICAgICAgICBjb25zdCAgIFVDaGFyKiAgICAgICAgICB0ZXh0LAorICAg
ICAgICAgICAgaW50MzJfdCAgICAgICAgIHRleHRMZW5ndGgsCisgICAgICAgICAgICBpbnQzMl90
ICAgICAgICAgKnBhcnNlUG9zIC8qIDAgPSBzdGFydCAqLywKKyAgICAgICAgICAgIFVFcnJvckNv
ZGUgICAgICAqc3RhdHVzKTsKKworCisvKioKKyogUGFyc2UgYSBudW1iZXIgZnJvbSBhIHN0cmlu
ZyBpbnRvIGFuIHVuZm9ybWF0dGVkIG51bWVyaWMgc3RyaW5nIHVzaW5nIGEgVU51bWJlckZvcm1h
dC4KKyogVGhlIGlucHV0IHN0cmluZyB3aWxsIGJlIHBhcnNlZCBhY2NvcmRpbmcgdG8gdGhlIFVO
dW1iZXJGb3JtYXQncyBsb2NhbGUuCisqIFRoZSBzeW50YXggb2YgdGhlIG91dHB1dCBpcyBhICJu
dW1lcmljIHN0cmluZyIKKyogYXMgZGVmaW5lZCBpbiB0aGUgRGVjaW1hbCBBcml0aG1ldGljIFNw
ZWNpZmljYXRpb24sIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vc3BlbGVvdHJvdmUuY29tL2RlY2lt
YWwKKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHVzZS4KKyogQHBhcmFtIHRleHQgVGhl
IHRleHQgdG8gcGFyc2UuCisqIEBwYXJhbSB0ZXh0TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGV4dCwg
b3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorKiBAcGFyYW0gcGFyc2VQb3MgSWYgbm90IDAsIG9u
IGlucHV0IGEgcG9pbnRlciB0byBhbiBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlIG9mZnNldCBhdCB3
aGljaAorKiAgICAgICAgICAgICAgICAgdG8gYmVnaW4gcGFyc2luZy4gIElmIG5vdCAwLCBvbiBv
dXRwdXQgdGhlIG9mZnNldCBhdCB3aGljaCBwYXJzaW5nIGVuZGVkLgorKiBAcGFyYW0gb3V0QnVm
IEEgKGNoYXIgKikgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIHBhcnNlZCBudW1iZXIgYXMgYSBzdHJp
bmcuICBUaGUgb3V0cHV0IHN0cmluZworKiAgICAgICAgICAgICAgIHdpbGwgYmUgbnVsLXRlcm1p
bmF0ZWQgaWYgdGhlcmUgaXMgc3VmZmljaWVudCBzcGFjZS4KKyogQHBhcmFtIG91dEJ1Zkxlbmd0
aCBUaGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlci4gIE1heSBiZSB6ZXJvLCBpbiB3aGljaCBj
YXNlCisqICAgICAgICAgICAgICAgdGhlIG91dEJ1ZiBwb2ludGVyIG1heSBiZSBOVUxMLCBhbmQg
dGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZQorKiAgICAgICAgICAgICAgIHNpemUgb2YgdGhl
IG91dHB1dCBzdHJpbmcuCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNv
ZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgb3V0
cHV0IHN0cmluZywgbm90IGluY2x1ZGluZyBhbnkgdGVybWluYXRpbmcgbnVsLgorKiBAc2VlIHVu
dW1fcGFyc2UKKyogQHNlZSB1bnVtX3BhcnNlSW50NjQKKyogQHNlZSB1bnVtX2Zvcm1hdAorKiBA
c2VlIHVudW1fZm9ybWF0SW50NjQKKyogQHNlZSB1bnVtX2Zvcm1hdERvdWJsZQorKiBAc3RhYmxl
IElDVSA0LjQKKyovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VudW1fcGFyc2VEZWNp
bWFsKGNvbnN0ICAgVU51bWJlckZvcm1hdCogIGZtdCwKKyAgICAgICAgICAgICAgICAgY29uc3Qg
ICBVQ2hhciogICAgICAgICAgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90
ICAgICAgICAgdGV4dExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAg
ICAgICAgKnBhcnNlUG9zIC8qIDAgPSBzdGFydCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICAgICAgICAgICAgKm91dEJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQz
Ml90ICAgICAgICAgb3V0QnVmTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJv
ckNvZGUgICAgICAqc3RhdHVzKTsKKworLyoqCisgKiBQYXJzZSBhIHN0cmluZyBpbnRvIGEgZG91
YmxlIGFuZCBhIGN1cnJlbmN5IHVzaW5nIGEgVU51bWJlckZvcm1hdC4KKyAqIFRoZSBzdHJpbmcg
d2lsbCBiZSBwYXJzZWQgYWNjb3JkaW5nIHRvIHRoZSBVTnVtYmVyRm9ybWF0J3MgbG9jYWxlLgor
ICogQHBhcmFtIGZtdCB0aGUgZm9ybWF0dGVyIHRvIHVzZQorICogQHBhcmFtIHRleHQgdGhlIHRl
eHQgdG8gcGFyc2UKKyAqIEBwYXJhbSB0ZXh0TGVuZ3RoIHRoZSBsZW5ndGggb2YgdGV4dCwgb3Ig
LTEgaWYgbnVsbC10ZXJtaW5hdGVkCisgKiBAcGFyYW0gcGFyc2VQb3MgYSBwb2ludGVyIHRvIGFu
IG9mZnNldCBpbmRleCBpbnRvIHRleHQgYXQgd2hpY2ggdG8KKyAqIGJlZ2luIHBhcnNpbmcuIE9u
IG91dHB1dCwgKnBhcnNlUG9zIHdpbGwgcG9pbnQgYWZ0ZXIgdGhlIGxhc3QKKyAqIHBhcnNlZCBj
aGFyYWN0ZXIuICBUaGlzIHBhcmFtZXRlciBtYXkgYmUgMCwgaW4gd2hpY2ggY2FzZSBwYXJzaW5n
CisgKiBiZWdpbnMgYXQgb2Zmc2V0IDAuCisgKiBAcGFyYW0gY3VycmVuY3kgYSBwb2ludGVyIHRv
IHRoZSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgcGFyc2VkIG51bGwtCisgKiB0ZXJtaW5hdGVkIGN1
cnJlbmN5LiAgVGhpcyBidWZmZXIgbXVzdCBoYXZlIGEgY2FwYWNpdHkgb2YgYXQgbGVhc3QKKyAq
IDQgVUNoYXJzLgorICogQHBhcmFtIHN0YXR1cyBhIHBvaW50ZXIgdG8gYW4gaW5wdXQtb3V0cHV0
IFVFcnJvckNvZGUKKyAqIEByZXR1cm4gdGhlIHBhcnNlZCBkb3VibGUKKyAqIEBzZWUgdW51bV9w
YXJzZURvdWJsZQorICogQHNlZSB1bnVtX2Zvcm1hdERvdWJsZUN1cnJlbmN5CisgKiBAc3RhYmxl
IElDVSAzLjAKKyAqLworVV9TVEFCTEUgZG91YmxlIFVfRVhQT1JUMgordW51bV9wYXJzZURvdWJs
ZUN1cnJlbmN5KGNvbnN0IFVOdW1iZXJGb3JtYXQqIGZtdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBVQ2hhciogdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90
IHRleHRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCogcGFyc2VQb3Ms
IC8qIDAgPSBzdGFydCAqLworICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyKiBjdXJyZW5j
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiBzdGF0dXMpOworCisvKioK
KyAqIFNldCB0aGUgcGF0dGVybiB1c2VkIGJ5IGEgVU51bWJlckZvcm1hdC4gIFRoaXMgY2FuIG9u
bHkgYmUgdXNlZAorICogb24gYSBEZWNpbWFsRm9ybWF0LCBvdGhlciBmb3JtYXRzIHJldHVybiBV
X0lMTEVHQUxfQVJHVU1FTlRfRVJST1IKKyAqIGluIHRoZSBzdGF0dXMuCisgKiBAcGFyYW0gZm9y
bWF0IFRoZSBmb3JtYXR0ZXIgdG8gc2V0LgorICogQHBhcmFtIGxvY2FsaXplZCBUUlVFIGlmIHRo
ZSBwYXR0ZXJuIGlzIGxvY2FsaXplZCwgRkFMU0Ugb3RoZXJ3aXNlLgorICogQHBhcmFtIHBhdHRl
cm4gVGhlIG5ldyBwYXR0ZXJuCisgKiBAcGFyYW0gcGF0dGVybkxlbmd0aCBUaGUgbGVuZ3RoIG9m
IHBhdHRlcm4sIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyAqIEBwYXJhbSBwYXJzZUVycm9y
IEEgcG9pbnRlciB0byBVUGFyc2VFcnJvciB0byByZWNpZXZlIGluZm9ybWF0aW9uCisgKiBhYm91
dCBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHBhcnNpbmcsIG9yIE5VTEwgaWYgbm8gcGFyc2UgZXJy
b3IKKyAqIGluZm9ybWF0aW9uIGlzIGRlc2lyZWQuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRl
ciB0byBhbiBpbnB1dC1vdXRwdXQgVUVycm9yQ29kZS4KKyAqIEBzZWUgdW51bV90b1BhdHRlcm4K
KyAqIEBzZWUgRGVjaW1hbEZvcm1hdAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxF
IHZvaWQgVV9FWFBPUlQyIAordW51bV9hcHBseVBhdHRlcm4oICAgICAgICAgIFVOdW1iZXJGb3Jt
YXQgICpmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUJvb2wgICAgICAgICAg
bG9jYWxpemVkLAorICAgICAgICAgICAgICAgICAgICBjb25zdCAgIFVDaGFyICAgICAgICAgICpw
YXR0ZXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICBwYXR0
ZXJuTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQYXJzZUVycm9yICAgICpw
YXJzZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgICpz
dGF0dXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisKKy8qKgorKiBH
ZXQgYSBsb2NhbGUgZm9yIHdoaWNoIGRlY2ltYWwgZm9ybWF0dGluZyBwYXR0ZXJucyBhcmUgYXZh
aWxhYmxlLgorKiBBIFVOdW1iZXJGb3JtYXQgaW4gYSBsb2NhbGUgcmV0dXJuZWQgYnkgdGhpcyBm
dW5jdGlvbiB3aWxsIHBlcmZvcm0gdGhlIGNvcnJlY3QKKyogZm9ybWF0dGluZyBhbmQgcGFyc2lu
ZyBmb3IgdGhlIGxvY2FsZS4gIFRoZSByZXN1bHRzIG9mIHRoaXMgY2FsbCBhcmUgbm90CisqIHZh
bGlkIGZvciBydWxlLWJhc2VkIG51bWJlciBmb3JtYXRzLgorKiBAcGFyYW0gbG9jYWxlSW5kZXgg
VGhlIGluZGV4IG9mIHRoZSBkZXNpcmVkIGxvY2FsZS4KKyogQHJldHVybiBBIGxvY2FsZSBmb3Ig
d2hpY2ggbnVtYmVyIGZvcm1hdHRpbmcgcGF0dGVybnMgYXJlIGF2YWlsYWJsZSwgb3IgMCBpZiBu
b25lLgorKiBAc2VlIHVudW1fY291bnRBdmFpbGFibGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLwor
VV9TVEFCTEUgY29uc3QgY2hhciogVV9FWFBPUlQyIAordW51bV9nZXRBdmFpbGFibGUoaW50MzJf
dCBsb2NhbGVJbmRleCk7CisKKy8qKgorKiBEZXRlcm1pbmUgaG93IG1hbnkgbG9jYWxlcyBoYXZl
IGRlY2ltYWwgZm9ybWF0dGluZyBwYXR0ZXJucyBhdmFpbGFibGUuICBUaGUKKyogcmVzdWx0cyBv
ZiB0aGlzIGNhbGwgYXJlIG5vdCB2YWxpZCBmb3IgcnVsZS1iYXNlZCBudW1iZXIgZm9ybWF0cy4K
KyogVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIGRldGVybWluaW5nIHRoZSBsb29wIGVuZGlu
ZyBjb25kaXRpb24gZm9yCisqIGNhbGxzIHRvIHtAbGluayAjdW51bV9nZXRBdmFpbGFibGUgfS4K
KyogQHJldHVybiBUaGUgbnVtYmVyIG9mIGxvY2FsZXMgZm9yIHdoaWNoIGRlY2ltYWwgZm9ybWF0
dGluZyBwYXR0ZXJucyBhcmUgYXZhaWxhYmxlLgorKiBAc2VlIHVudW1fZ2V0QXZhaWxhYmxlCisq
IEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordW51bV9j
b3VudEF2YWlsYWJsZSh2b2lkKTsKKworLyoqIFRoZSBwb3NzaWJsZSBVTnVtYmVyRm9ybWF0IG51
bWVyaWMgYXR0cmlidXRlcyBAc3RhYmxlIElDVSAyLjAgKi8KK3R5cGVkZWYgZW51bSBVTnVtYmVy
Rm9ybWF0QXR0cmlidXRlIHsKKyAgLyoqIFBhcnNlIGludGVnZXJzIG9ubHkgKi8KKyAgVU5VTV9Q
QVJTRV9JTlRfT05MWSwKKyAgLyoqIFVzZSBncm91cGluZyBzZXBhcmF0b3IgKi8KKyAgVU5VTV9H
Uk9VUElOR19VU0VELAorICAvKiogQWx3YXlzIHNob3cgZGVjaW1hbCBwb2ludCAqLworICBVTlVN
X0RFQ0lNQUxfQUxXQVlTX1NIT1dOLAorICAvKiogTWF4aW11bSBpbnRlZ2VyIGRpZ2l0cyAqLwor
ICBVTlVNX01BWF9JTlRFR0VSX0RJR0lUUywKKyAgLyoqIE1pbmltdW0gaW50ZWdlciBkaWdpdHMg
Ki8KKyAgVU5VTV9NSU5fSU5URUdFUl9ESUdJVFMsCisgIC8qKiBJbnRlZ2VyIGRpZ2l0cyAqLwor
ICBVTlVNX0lOVEVHRVJfRElHSVRTLAorICAvKiogTWF4aW11bSBmcmFjdGlvbiBkaWdpdHMgKi8K
KyAgVU5VTV9NQVhfRlJBQ1RJT05fRElHSVRTLAorICAvKiogTWluaW11bSBmcmFjdGlvbiBkaWdp
dHMgKi8KKyAgVU5VTV9NSU5fRlJBQ1RJT05fRElHSVRTLAorICAvKiogRnJhY3Rpb24gZGlnaXRz
ICovCisgIFVOVU1fRlJBQ1RJT05fRElHSVRTLAorICAvKiogTXVsdGlwbGllciAqLworICBVTlVN
X01VTFRJUExJRVIsCisgIC8qKiBHcm91cGluZyBzaXplICovCisgIFVOVU1fR1JPVVBJTkdfU0la
RSwKKyAgLyoqIFJvdW5kaW5nIE1vZGUgKi8KKyAgVU5VTV9ST1VORElOR19NT0RFLAorICAvKiog
Um91bmRpbmcgaW5jcmVtZW50ICovCisgIFVOVU1fUk9VTkRJTkdfSU5DUkVNRU5ULAorICAvKiog
VGhlIHdpZHRoIHRvIHdoaWNoIHRoZSBvdXRwdXQgb2YgPGNvZGU+Zm9ybWF0KCk8L2NvZGU+IGlz
IHBhZGRlZC4gKi8KKyAgVU5VTV9GT1JNQVRfV0lEVEgsCisgIC8qKiBUaGUgcG9zaXRpb24gYXQg
d2hpY2ggcGFkZGluZyB3aWxsIHRha2UgcGxhY2UuICovCisgIFVOVU1fUEFERElOR19QT1NJVElP
TiwKKyAgLyoqIFNlY29uZGFyeSBncm91cGluZyBzaXplICovCisgIFVOVU1fU0VDT05EQVJZX0dS
T1VQSU5HX1NJWkUsCisgIC8qKiBVc2Ugc2lnbmlmaWNhbnQgZGlnaXRzCisgICAqIEBzdGFibGUg
SUNVIDMuMCAqLworICBVTlVNX1NJR05JRklDQU5UX0RJR0lUU19VU0VELAorICAvKiogTWluaW11
bSBzaWduaWZpY2FudCBkaWdpdHMKKyAgICogQHN0YWJsZSBJQ1UgMy4wICovCisgIFVOVU1fTUlO
X1NJR05JRklDQU5UX0RJR0lUUywKKyAgLyoqIE1heGltdW0gc2lnbmlmaWNhbnQgZGlnaXRzCisg
ICAqIEBzdGFibGUgSUNVIDMuMCAqLworICBVTlVNX01BWF9TSUdOSUZJQ0FOVF9ESUdJVFMsCisg
IC8qKiBMZW5pZW50IHBhcnNlIG1vZGUgdXNlZCBieSBydWxlLWJhc2VkIGZvcm1hdHMuCisgICAq
IEBzdGFibGUgSUNVIDMuMAorICAgKi8KKyAgVU5VTV9MRU5JRU5UX1BBUlNFCit9IFVOdW1iZXJG
b3JtYXRBdHRyaWJ1dGU7CisKKy8qKgorKiBHZXQgYSBudW1lcmljIGF0dHJpYnV0ZSBhc3NvY2lh
dGVkIHdpdGggYSBVTnVtYmVyRm9ybWF0LgorKiBBbiBleGFtcGxlIG9mIGEgbnVtZXJpYyBhdHRy
aWJ1dGUgaXMgdGhlIG51bWJlciBvZiBpbnRlZ2VyIGRpZ2l0cyBhIGZvcm1hdHRlciB3aWxsIHBy
b2R1Y2UuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBxdWVyeS4KKyogQHBhcmFtIGF0
dHIgVGhlIGF0dHJpYnV0ZSB0byBxdWVyeTsgb25lIG9mIFVOVU1fUEFSU0VfSU5UX09OTFksIFVO
VU1fR1JPVVBJTkdfVVNFRCwKKyogVU5VTV9ERUNJTUFMX0FMV0FZU19TSE9XTiwgVU5VTV9NQVhf
SU5URUdFUl9ESUdJVFMsIFVOVU1fTUlOX0lOVEVHRVJfRElHSVRTLCBVTlVNX0lOVEVHRVJfRElH
SVRTLAorKiBVTlVNX01BWF9GUkFDVElPTl9ESUdJVFMsIFVOVU1fTUlOX0ZSQUNUSU9OX0RJR0lU
UywgVU5VTV9GUkFDVElPTl9ESUdJVFMsIFVOVU1fTVVMVElQTElFUiwKKyogVU5VTV9HUk9VUElO
R19TSVpFLCBVTlVNX1JPVU5ESU5HX01PREUsIFVOVU1fRk9STUFUX1dJRFRILCBVTlVNX1BBRERJ
TkdfUE9TSVRJT04sIFVOVU1fU0VDT05EQVJZX0dST1VQSU5HX1NJWkUuCisqIEByZXR1cm4gVGhl
IHZhbHVlIG9mIGF0dHIuCisqIEBzZWUgdW51bV9zZXRBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX2dl
dERvdWJsZUF0dHJpYnV0ZQorKiBAc2VlIHVudW1fc2V0RG91YmxlQXR0cmlidXRlCisqIEBzZWUg
dW51bV9nZXRUZXh0QXR0cmlidXRlCisqIEBzZWUgdW51bV9zZXRUZXh0QXR0cmlidXRlCisqIEBz
dGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordW51bV9nZXRB
dHRyaWJ1dGUoY29uc3QgVU51bWJlckZvcm1hdCogICAgICAgICAgZm10LAorICAgICAgICAgIFVO
dW1iZXJGb3JtYXRBdHRyaWJ1dGUgIGF0dHIpOworCisvKioKKyogU2V0IGEgbnVtZXJpYyBhdHRy
aWJ1dGUgYXNzb2NpYXRlZCB3aXRoIGEgVU51bWJlckZvcm1hdC4KKyogQW4gZXhhbXBsZSBvZiBh
IG51bWVyaWMgYXR0cmlidXRlIGlzIHRoZSBudW1iZXIgb2YgaW50ZWdlciBkaWdpdHMgYSBmb3Jt
YXR0ZXIgd2lsbCBwcm9kdWNlLiAgSWYgdGhlCisqIGZvcm1hdHRlciBkb2VzIG5vdCB1bmRlcnN0
YW5kIHRoZSBhdHRyaWJ1dGUsIHRoZSBjYWxsIGlzIGlnbm9yZWQuICBSdWxlLWJhc2VkIGZvcm1h
dHRlcnMgb25seSB1bmRlcnN0YW5kCisqIHRoZSBsZW5pZW50LXBhcnNlIGF0dHJpYnV0ZS4KKyog
QHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHNldC4KKyogQHBhcmFtIGF0dHIgVGhlIGF0dHJp
YnV0ZSB0byBzZXQ7IG9uZSBvZiBVTlVNX1BBUlNFX0lOVF9PTkxZLCBVTlVNX0dST1VQSU5HX1VT
RUQsCisqIFVOVU1fREVDSU1BTF9BTFdBWVNfU0hPV04sIFVOVU1fTUFYX0lOVEVHRVJfRElHSVRT
LCBVTlVNX01JTl9JTlRFR0VSX0RJR0lUUywgVU5VTV9JTlRFR0VSX0RJR0lUUywKKyogVU5VTV9N
QVhfRlJBQ1RJT05fRElHSVRTLCBVTlVNX01JTl9GUkFDVElPTl9ESUdJVFMsIFVOVU1fRlJBQ1RJ
T05fRElHSVRTLCBVTlVNX01VTFRJUExJRVIsCisqIFVOVU1fR1JPVVBJTkdfU0laRSwgVU5VTV9S
T1VORElOR19NT0RFLCBVTlVNX0ZPUk1BVF9XSURUSCwgVU5VTV9QQURESU5HX1BPU0lUSU9OLCBV
TlVNX1NFQ09OREFSWV9HUk9VUElOR19TSVpFLAorKiBvciBVTlVNX0xFTklFTlRfUEFSU0UuCisq
IEBwYXJhbSBuZXdWYWx1ZSBUaGUgbmV3IHZhbHVlIG9mIGF0dHIuCisqIEBzZWUgdW51bV9nZXRB
dHRyaWJ1dGUKKyogQHNlZSB1bnVtX2dldERvdWJsZUF0dHJpYnV0ZQorKiBAc2VlIHVudW1fc2V0
RG91YmxlQXR0cmlidXRlCisqIEBzZWUgdW51bV9nZXRUZXh0QXR0cmlidXRlCisqIEBzZWUgdW51
bV9zZXRUZXh0QXR0cmlidXRlCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIHZvaWQg
VV9FWFBPUlQyIAordW51bV9zZXRBdHRyaWJ1dGUoICAgIFVOdW1iZXJGb3JtYXQqICAgICAgICAg
IGZtdCwKKyAgICAgICAgICAgIFVOdW1iZXJGb3JtYXRBdHRyaWJ1dGUgIGF0dHIsCisgICAgICAg
ICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBuZXdWYWx1ZSk7CisKKworLyoqCisqIEdldCBh
IG51bWVyaWMgYXR0cmlidXRlIGFzc29jaWF0ZWQgd2l0aCBhIFVOdW1iZXJGb3JtYXQuCisqIEFu
IGV4YW1wbGUgb2YgYSBudW1lcmljIGF0dHJpYnV0ZSBpcyB0aGUgbnVtYmVyIG9mIGludGVnZXIg
ZGlnaXRzIGEgZm9ybWF0dGVyIHdpbGwgcHJvZHVjZS4KKyogSWYgdGhlIGZvcm1hdHRlciBkb2Vz
IG5vdCB1bmRlcnN0YW5kIHRoZSBhdHRyaWJ1dGUsIC0xIGlzIHJldHVybmVkLgorKiBAcGFyYW0g
Zm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisqIEBwYXJhbSBhdHRyIFRoZSBhdHRyaWJ1dGUg
dG8gcXVlcnk7IGUuZy4gVU5VTV9ST1VORElOR19JTkNSRU1FTlQuCisqIEByZXR1cm4gVGhlIHZh
bHVlIG9mIGF0dHIuCisqIEBzZWUgdW51bV9nZXRBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX3NldEF0
dHJpYnV0ZQorKiBAc2VlIHVudW1fc2V0RG91YmxlQXR0cmlidXRlCisqIEBzZWUgdW51bV9nZXRU
ZXh0QXR0cmlidXRlCisqIEBzZWUgdW51bV9zZXRUZXh0QXR0cmlidXRlCisqIEBzdGFibGUgSUNV
IDIuMAorKi8KK1VfU1RBQkxFIGRvdWJsZSBVX0VYUE9SVDIgCit1bnVtX2dldERvdWJsZUF0dHJp
YnV0ZShjb25zdCBVTnVtYmVyRm9ybWF0KiAgICAgICAgICBmbXQsCisgICAgICAgICAgVU51bWJl
ckZvcm1hdEF0dHJpYnV0ZSAgYXR0cik7CisKKy8qKgorKiBTZXQgYSBudW1lcmljIGF0dHJpYnV0
ZSBhc3NvY2lhdGVkIHdpdGggYSBVTnVtYmVyRm9ybWF0LgorKiBBbiBleGFtcGxlIG9mIGEgbnVt
ZXJpYyBhdHRyaWJ1dGUgaXMgdGhlIG51bWJlciBvZiBpbnRlZ2VyIGRpZ2l0cyBhIGZvcm1hdHRl
ciB3aWxsIHByb2R1Y2UuCisqIElmIHRoZSBmb3JtYXR0ZXIgZG9lcyBub3QgdW5kZXJzdGFuZCB0
aGUgYXR0cmlidXRlLCB0aGlzIGNhbGwgaXMgaWdub3JlZC4KKyogQHBhcmFtIGZtdCBUaGUgZm9y
bWF0dGVyIHRvIHNldC4KKyogQHBhcmFtIGF0dHIgVGhlIGF0dHJpYnV0ZSB0byBzZXQ7IGUuZy4g
VU5VTV9ST1VORElOR19JTkNSRU1FTlQuCisqIEBwYXJhbSBuZXdWYWx1ZSBUaGUgbmV3IHZhbHVl
IG9mIGF0dHIuCisqIEBzZWUgdW51bV9nZXRBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX3NldEF0dHJp
YnV0ZQorKiBAc2VlIHVudW1fZ2V0RG91YmxlQXR0cmlidXRlCisqIEBzZWUgdW51bV9nZXRUZXh0
QXR0cmlidXRlCisqIEBzZWUgdW51bV9zZXRUZXh0QXR0cmlidXRlCisqIEBzdGFibGUgSUNVIDIu
MAorKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordW51bV9zZXREb3VibGVBdHRyaWJ1dGUo
ICAgIFVOdW1iZXJGb3JtYXQqICAgICAgICAgIGZtdCwKKyAgICAgICAgICAgIFVOdW1iZXJGb3Jt
YXRBdHRyaWJ1dGUgIGF0dHIsCisgICAgICAgICAgICBkb3VibGUgICAgICAgICAgICAgICAgIG5l
d1ZhbHVlKTsKKworLyoqIFRoZSBwb3NzaWJsZSBVTnVtYmVyRm9ybWF0IHRleHQgYXR0cmlidXRl
cyBAc3RhYmxlIElDVSAyLjAqLwordHlwZWRlZiBlbnVtIFVOdW1iZXJGb3JtYXRUZXh0QXR0cmli
dXRlIHsKKyAgLyoqIFBvc2l0aXZlIHByZWZpeCAqLworICBVTlVNX1BPU0lUSVZFX1BSRUZJWCwK
KyAgLyoqIFBvc2l0aXZlIHN1ZmZpeCAqLworICBVTlVNX1BPU0lUSVZFX1NVRkZJWCwKKyAgLyoq
IE5lZ2F0aXZlIHByZWZpeCAqLworICBVTlVNX05FR0FUSVZFX1BSRUZJWCwKKyAgLyoqIE5lZ2F0
aXZlIHN1ZmZpeCAqLworICBVTlVNX05FR0FUSVZFX1NVRkZJWCwKKyAgLyoqIFRoZSBjaGFyYWN0
ZXIgdXNlZCB0byBwYWQgdG8gdGhlIGZvcm1hdCB3aWR0aC4gKi8KKyAgVU5VTV9QQURESU5HX0NI
QVJBQ1RFUiwKKyAgLyoqIFRoZSBJU08gY3VycmVuY3kgY29kZSAqLworICBVTlVNX0NVUlJFTkNZ
X0NPREUsCisgIC8qKgorICAgKiBUaGUgZGVmYXVsdCBydWxlIHNldC4gIFRoaXMgaXMgb25seSBh
dmFpbGFibGUgd2l0aCBydWxlLWJhc2VkIGZvcm1hdHRlcnMuCisgICAqIEBzdGFibGUgSUNVIDMu
MAorICAgKi8KKyAgVU5VTV9ERUZBVUxUX1JVTEVTRVQsCisgIC8qKgorICAgKiBUaGUgcHVibGlj
IHJ1bGUgc2V0cy4gIFRoaXMgaXMgb25seSBhdmFpbGFibGUgd2l0aCBydWxlLWJhc2VkIGZvcm1h
dHRlcnMuCisgICAqIFRoaXMgaXMgYSByZWFkLW9ubHkgYXR0cmlidXRlLiAgVGhlIHB1YmxpYyBy
dWxlc2V0cyBhcmUgcmV0dXJuZWQgYXMgYQorICAgKiBzaW5nbGUgc3RyaW5nLCB3aXRoIGVhY2gg
cnVsZXNldCBuYW1lIGRlbGltaXRlZCBieSAnOycgKHNlbWljb2xvbikuCisgICAqIEBzdGFibGUg
SUNVIDMuMAorICAgKi8KKyAgVU5VTV9QVUJMSUNfUlVMRVNFVFMKK30gVU51bWJlckZvcm1hdFRl
eHRBdHRyaWJ1dGU7CisKKy8qKgorKiBHZXQgYSB0ZXh0IGF0dHJpYnV0ZSBhc3NvY2lhdGVkIHdp
dGggYSBVTnVtYmVyRm9ybWF0LgorKiBBbiBleGFtcGxlIG9mIGEgdGV4dCBhdHRyaWJ1dGUgaXMg
dGhlIHN1ZmZpeCBmb3IgcG9zaXRpdmUgbnVtYmVycy4gIElmIHRoZSBmb3JtYXR0ZXIKKyogZG9l
cyBub3QgdW5kZXJzdGFuZCB0aGUgYXR0cmlidXRyZSwgVV9VTlNVUFBPUlRFRF9FUlJPUiBpcyBy
ZXR1cm5lZCBhcyB0aGUgc3RhdHVzLgorKiBSdWxlLWJhc2VkIGZvcm1hdHRlcnMgb25seSB1bmRl
cnN0YW5kIFVOVU1fREVGQVVMVF9SVUxFU0VUIGFuZCBVTlVNX1BVQkxJQ19SVUxFU0VUUy4KKyog
QHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHF1ZXJ5LgorKiBAcGFyYW0gdGFnIFRoZSBhdHRy
aWJ1dGUgdG8gcXVlcnk7IG9uZSBvZiBVTlVNX1BPU0lUSVZFX1BSRUZJWCwgVU5VTV9QT1NJVElW
RV9TVUZGSVgsCisqIFVOVU1fTkVHQVRJVkVfUFJFRklYLCBVTlVNX05FR0FUSVZFX1NVRkZJWCwg
VU5VTV9QQURESU5HX0NIQVJBQ1RFUiwgVU5VTV9DVVJSRU5DWV9DT0RFLAorKiBVTlVNX0RFRkFV
TFRfUlVMRVNFVCwgb3IgVU5VTV9QVUJMSUNfUlVMRVNFVFMuCisqIEBwYXJhbSByZXN1bHQgQSBw
b2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIGF0dHJpYnV0ZS4KKyogQHBhcmFtIHJl
c3VsdExlbmd0aCBUaGUgbWF4aW11bSBzaXplIG9mIHJlc3VsdC4KKyogQHBhcmFtIHN0YXR1cyBB
IHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVy
biBUaGUgdG90YWwgYnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVyIHRoYW4gcmVzdWx0TGVu
Z3RoLCB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisqIEBzZWUgdW51bV9zZXRUZXh0QXR0cmli
dXRlCisqIEBzZWUgdW51bV9nZXRBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX3NldEF0dHJpYnV0ZQor
KiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VudW1f
Z2V0VGV4dEF0dHJpYnV0ZSggICAgY29uc3QgICAgVU51bWJlckZvcm1hdCogICAgICAgICAgICAg
ICAgICAgIGZtdCwKKyAgICAgICAgICAgIFVOdW1iZXJGb3JtYXRUZXh0QXR0cmlidXRlICAgICAg
dGFnLAorICAgICAgICAgICAgVUNoYXIqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCwKKyAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
TGVuZ3RoLAorICAgICAgICAgICAgVUVycm9yQ29kZSogICAgICAgICAgICAgICAgICAgICAgICBz
dGF0dXMpOworCisvKioKKyogU2V0IGEgdGV4dCBhdHRyaWJ1dGUgYXNzb2NpYXRlZCB3aXRoIGEg
VU51bWJlckZvcm1hdC4KKyogQW4gZXhhbXBsZSBvZiBhIHRleHQgYXR0cmlidXRlIGlzIHRoZSBz
dWZmaXggZm9yIHBvc2l0aXZlIG51bWJlcnMuICBSdWxlLWJhc2VkIGZvcm1hdHRlcnMKKyogb25s
eSB1bmRlcnN0YW5kIFVOVU1fREVGQVVMVF9SVUxFU0VULgorKiBAcGFyYW0gZm10IFRoZSBmb3Jt
YXR0ZXIgdG8gc2V0LgorKiBAcGFyYW0gdGFnIFRoZSBhdHRyaWJ1dGUgdG8gc2V0OyBvbmUgb2Yg
VU5VTV9QT1NJVElWRV9QUkVGSVgsIFVOVU1fUE9TSVRJVkVfU1VGRklYLAorKiBVTlVNX05FR0FU
SVZFX1BSRUZJWCwgVU5VTV9ORUdBVElWRV9TVUZGSVgsIFVOVU1fUEFERElOR19DSEFSQUNURVIs
IFVOVU1fQ1VSUkVOQ1lfQ09ERSwKKyogb3IgVU5VTV9ERUZBVUxUX1JVTEVTRVQuCisqIEBwYXJh
bSBuZXdWYWx1ZSBUaGUgbmV3IHZhbHVlIG9mIGF0dHIuCisqIEBwYXJhbSBuZXdWYWx1ZUxlbmd0
aCBUaGUgbGVuZ3RoIG9mIG5ld1ZhbHVlLCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisqIEBw
YXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJy
b3JzCisqIEBzZWUgdW51bV9nZXRUZXh0QXR0cmlidXRlCisqIEBzZWUgdW51bV9nZXRBdHRyaWJ1
dGUKKyogQHNlZSB1bnVtX3NldEF0dHJpYnV0ZQorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NU
QUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VudW1fc2V0VGV4dEF0dHJpYnV0ZSggICAgVU51bWJlckZv
cm1hdCogICAgICAgICAgICAgICAgICAgIGZtdCwKKyAgICAgICAgICAgIFVOdW1iZXJGb3JtYXRU
ZXh0QXR0cmlidXRlICAgICAgdGFnLAorICAgICAgICAgICAgY29uc3QgICAgVUNoYXIqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlLAorICAgICAgICAgICAgaW50MzJfdCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZUxlbmd0aCwKKyAgICAgICAgICAgIFVFcnJv
ckNvZGUgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdHVzKTsKKworLyoqCisgKiBFeHRyYWN0
IHRoZSBwYXR0ZXJuIGZyb20gYSBVTnVtYmVyRm9ybWF0LiAgVGhlIHBhdHRlcm4gd2lsbCBmb2xs
b3cKKyAqIHRoZSBEZWNpbWFsRm9ybWF0IHBhdHRlcm4gc3ludGF4LgorICogQHBhcmFtIGZtdCBU
aGUgZm9ybWF0dGVyIHRvIHF1ZXJ5LgorICogQHBhcmFtIGlzUGF0dGVybkxvY2FsaXplZCBUUlVF
IGlmIHRoZSBwYXR0ZXJuIHNob3VsZCBiZSBsb2NhbGl6ZWQsCisgKiBGQUxTRSBvdGhlcndpc2Uu
ICBUaGlzIGlzIGlnbm9yZWQgaWYgdGhlIGZvcm1hdHRlciBpcyBhIHJ1bGUtYmFzZWQKKyAqIGZv
cm1hdHRlci4KKyAqIEBwYXJhbSByZXN1bHQgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2Vp
dmUgdGhlIHBhdHRlcm4uCisgKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIFRoZSBtYXhpbXVtIHNpemUg
b2YgcmVzdWx0LgorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gaW5wdXQtb3V0cHV0
IFVFcnJvckNvZGUuCisgKiBAcmV0dXJuIFRoZSB0b3RhbCBidWZmZXIgc2l6ZSBuZWVkZWQ7IGlm
IGdyZWF0ZXIgdGhhbiByZXN1bHRMZW5ndGgsCisgKiB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQu
CisgKiBAc2VlIHVudW1fYXBwbHlQYXR0ZXJuCisgKiBAc2VlIERlY2ltYWxGb3JtYXQKKyAqIEBz
dGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VudW1fdG9Q
YXR0ZXJuKCAgICBjb25zdCAgICBVTnVtYmVyRm9ybWF0KiAgICAgICAgICBmbXQsCisgICAgICAg
IFVCb29sICAgICAgICAgICAgICAgICAgaXNQYXR0ZXJuTG9jYWxpemVkLAorICAgICAgICBVQ2hh
ciogICAgICAgICAgICAgICAgICByZXN1bHQsCisgICAgICAgIGludDMyX3QgICAgICAgICAgICAg
ICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAgVUVycm9yQ29kZSogICAgICAgICAgICAgc3RhdHVz
KTsKKworCisvKioKKyAqIENvbnN0YW50cyBmb3Igc3BlY2lmeWluZyBhIG51bWJlciBmb3JtYXQg
c3ltYm9sLgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3R5cGVkZWYgZW51bSBVTnVtYmVyRm9y
bWF0U3ltYm9sIHsKKyAgLyoqIFRoZSBkZWNpbWFsIHNlcGFyYXRvciAqLworICBVTlVNX0RFQ0lN
QUxfU0VQQVJBVE9SX1NZTUJPTCA9IDAsCisgIC8qKiBUaGUgZ3JvdXBpbmcgc2VwYXJhdG9yICov
CisgIFVOVU1fR1JPVVBJTkdfU0VQQVJBVE9SX1NZTUJPTCA9IDEsCisgIC8qKiBUaGUgcGF0dGVy
biBzZXBhcmF0b3IgKi8KKyAgVU5VTV9QQVRURVJOX1NFUEFSQVRPUl9TWU1CT0wgPSAyLAorICAv
KiogVGhlIHBlcmNlbnQgc2lnbiAqLworICBVTlVNX1BFUkNFTlRfU1lNQk9MID0gMywKKyAgLyoq
IFplcm8qLworICBVTlVNX1pFUk9fRElHSVRfU1lNQk9MID0gNCwKKyAgLyoqIENoYXJhY3RlciBy
ZXByZXNlbnRpbmcgYSBkaWdpdCBpbiB0aGUgcGF0dGVybiAqLworICBVTlVNX0RJR0lUX1NZTUJP
TCA9IDUsCisgIC8qKiBUaGUgbWludXMgc2lnbiAqLworICBVTlVNX01JTlVTX1NJR05fU1lNQk9M
ID0gNiwKKyAgLyoqIFRoZSBwbHVzIHNpZ24gKi8KKyAgVU5VTV9QTFVTX1NJR05fU1lNQk9MID0g
NywKKyAgLyoqIFRoZSBjdXJyZW5jeSBzeW1ib2wgKi8KKyAgVU5VTV9DVVJSRU5DWV9TWU1CT0wg
PSA4LAorICAvKiogVGhlIGludGVybmF0aW9uYWwgY3VycmVuY3kgc3ltYm9sICovCisgIFVOVU1f
SU5UTF9DVVJSRU5DWV9TWU1CT0wgPSA5LAorICAvKiogVGhlIG1vbmV0YXJ5IHNlcGFyYXRvciAq
LworICBVTlVNX01PTkVUQVJZX1NFUEFSQVRPUl9TWU1CT0wgPSAxMCwKKyAgLyoqIFRoZSBleHBv
bmVudGlhbCBzeW1ib2wgKi8KKyAgVU5VTV9FWFBPTkVOVElBTF9TWU1CT0wgPSAxMSwKKyAgLyoq
IFBlciBtaWxsIHN5bWJvbCAqLworICBVTlVNX1BFUk1JTExfU1lNQk9MID0gMTIsCisgIC8qKiBF
c2NhcGUgcGFkZGluZyBjaGFyYWN0ZXIgKi8KKyAgVU5VTV9QQURfRVNDQVBFX1NZTUJPTCA9IDEz
LAorICAvKiogSW5maW5pdHkgc3ltYm9sICovCisgIFVOVU1fSU5GSU5JVFlfU1lNQk9MID0gMTQs
CisgIC8qKiBOYW4gc3ltYm9sICovCisgIFVOVU1fTkFOX1NZTUJPTCA9IDE1LAorICAvKiogU2ln
bmlmaWNhbnQgZGlnaXQgc3ltYm9sCisgICAqIEBzdGFibGUgSUNVIDMuMCAqLworICBVTlVNX1NJ
R05JRklDQU5UX0RJR0lUX1NZTUJPTCA9IDE2LAorICAvKiogVGhlIG1vbmV0YXJ5IGdyb3VwaW5n
IHNlcGFyYXRvciAKKyAgICogQHN0YWJsZSBJQ1UgMy42CisgICAqLworICBVTlVNX01PTkVUQVJZ
X0dST1VQSU5HX1NFUEFSQVRPUl9TWU1CT0wgPSAxNywgIAorICAvKiogT25lCisgICAqIEBkcmFm
dCBJQ1UgNC42CisgICAqLworICBVTlVNX09ORV9ESUdJVF9TWU1CT0wgPSAxOCwKKyAgLyoqIFR3
bworICAgKiBAZHJhZnQgSUNVIDQuNgorICAgKi8KKyAgVU5VTV9UV09fRElHSVRfU1lNQk9MID0g
MTksCisgIC8qKiBUaHJlZQorICAgKiBAZHJhZnQgSUNVIDQuNgorICAgKi8KKyAgVU5VTV9USFJF
RV9ESUdJVF9TWU1CT0wgPSAyMCwKKyAgLyoqIEZvdXIKKyAgICogQGRyYWZ0IElDVSA0LjYKKyAg
ICovCisgIFVOVU1fRk9VUl9ESUdJVF9TWU1CT0wgPSAyMSwKKyAgLyoqIEZpdmUKKyAgICogQGRy
YWZ0IElDVSA0LjYKKyAgICovCisgIFVOVU1fRklWRV9ESUdJVF9TWU1CT0wgPSAyMiwKKyAgLyoq
IFNpeAorICAgKiBAZHJhZnQgSUNVIDQuNgorICAgKi8KKyAgVU5VTV9TSVhfRElHSVRfU1lNQk9M
ID0gMjMsCisgIC8qKiBTZXZlbgorICAgICogQGRyYWZ0IElDVSA0LjYKKyAgICovCisgIFVOVU1f
U0VWRU5fRElHSVRfU1lNQk9MID0gMjQsCisgIC8qKiBFaWdodAorICAgKiBAZHJhZnQgSUNVIDQu
NgorICAgKi8KKyAgVU5VTV9FSUdIVF9ESUdJVF9TWU1CT0wgPSAyNSwKKyAgLyoqIE5pbmUKKyAg
ICogQGRyYWZ0IElDVSA0LjYKKyAgICovCisgIFVOVU1fTklORV9ESUdJVF9TWU1CT0wgPSAyNiwK
KyAgLyoqIGNvdW50IHN5bWJvbCBjb25zdGFudHMgKi8KKyAgVU5VTV9GT1JNQVRfU1lNQk9MX0NP
VU5UID0gMjcKK30gVU51bWJlckZvcm1hdFN5bWJvbDsKKworLyoqCisqIEdldCBhIHN5bWJvbCBh
c3NvY2lhdGVkIHdpdGggYSBVTnVtYmVyRm9ybWF0LgorKiBBIFVOdW1iZXJGb3JtYXQgdXNlcyBz
eW1ib2xzIHRvIHJlcHJlc2VudCB0aGUgc3BlY2lhbCBsb2NhbGUtZGVwZW5kZW50CisqIGNoYXJh
Y3RlcnMgaW4gYSBudW1iZXIsIGZvciBleGFtcGxlIHRoZSBwZXJjZW50IHNpZ24uIFRoaXMgQVBJ
IGlzIG5vdAorKiBzdXBwb3J0ZWQgZm9yIHJ1bGUtYmFzZWQgZm9ybWF0dGVycy4KKyogQHBhcmFt
IGZtdCBUaGUgZm9ybWF0dGVyIHRvIHF1ZXJ5LgorKiBAcGFyYW0gc3ltYm9sIFRoZSBVTnVtYmVy
Rm9ybWF0U3ltYm9sIGNvbnN0YW50IGZvciB0aGUgc3ltYm9sIHRvIGdldAorKiBAcGFyYW0gYnVm
ZmVyIFRoZSBzdHJpbmcgYnVmZmVyIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBzeW1ib2wgc3RyaW5n
OworKiAgICAgICAgICAgICAgIGlmIGl0IGlzIE5VTEwsIHRoZW4gb25seSB0aGUgbGVuZ3RoIG9m
IHRoZSBzeW1ib2wgaXMgcmV0dXJuZWQKKyogQHBhcmFtIHNpemUgVGhlIHNpemUgb2YgdGhlIHN0
cmluZyBidWZmZXIKKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0
byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUgbGVuZ3RoIG9mIHRoZSBzeW1ib2w7
IHRoZSBidWZmZXIgaXMgbm90IG1vZGlmaWVkIGlmCisqICAgICAgICAgPGNvZGU+bGVuZ3RoJmd0
Oz1zaXplPC9jb2RlPgorKiBAc2VlIHVudW1fc2V0U3ltYm9sCisqIEBzdGFibGUgSUNVIDIuMAor
Ki8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyCit1bnVtX2dldFN5bWJvbChjb25zdCBVTnVt
YmVyRm9ybWF0ICpmbXQsCisgICAgICAgICAgICAgICBVTnVtYmVyRm9ybWF0U3ltYm9sIHN5bWJv
bCwKKyAgICAgICAgICAgICAgIFVDaGFyICpidWZmZXIsCisgICAgICAgICAgICAgICBpbnQzMl90
IHNpemUsCisgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpzdGF0dXMpOworCisvKioKKyogU2V0
IGEgc3ltYm9sIGFzc29jaWF0ZWQgd2l0aCBhIFVOdW1iZXJGb3JtYXQuCisqIEEgVU51bWJlckZv
cm1hdCB1c2VzIHN5bWJvbHMgdG8gcmVwcmVzZW50IHRoZSBzcGVjaWFsIGxvY2FsZS1kZXBlbmRl
bnQKKyogY2hhcmFjdGVycyBpbiBhIG51bWJlciwgZm9yIGV4YW1wbGUgdGhlIHBlcmNlbnQgc2ln
bi4gIFRoaXMgQVBJIGlzIG5vdAorKiBzdXBwb3J0ZWQgZm9yIHJ1bGUtYmFzZWQgZm9ybWF0dGVy
cy4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHNldC4KKyogQHBhcmFtIHN5bWJvbCBU
aGUgVU51bWJlckZvcm1hdFN5bWJvbCBjb25zdGFudCBmb3IgdGhlIHN5bWJvbCB0byBzZXQKKyog
QHBhcmFtIHZhbHVlIFRoZSBzdHJpbmcgdG8gc2V0IHRoZSBzeW1ib2wgdG8KKyogQHBhcmFtIGxl
bmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcsIG9yIC0xIGZvciBhIHplcm8tdGVybWluYXRl
ZCBzdHJpbmcKKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byBy
ZWNlaXZlIGFueSBlcnJvcnMuCisqIEBzZWUgdW51bV9nZXRTeW1ib2wKKyogQHN0YWJsZSBJQ1Ug
Mi4wCisqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKK3VudW1fc2V0U3ltYm9sKFVOdW1iZXJG
b3JtYXQgKmZtdCwKKyAgICAgICAgICAgICAgIFVOdW1iZXJGb3JtYXRTeW1ib2wgc3ltYm9sLAor
ICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgKnZhbHVlLAorICAgICAgICAgICAgICAgaW50MzJf
dCBsZW5ndGgsCisgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpzdGF0dXMpOworCisKKy8qKgor
ICogR2V0IHRoZSBsb2NhbGUgZm9yIHRoaXMgbnVtYmVyIGZvcm1hdCBvYmplY3QuCisgKiBZb3Ug
Y2FuIGNob29zZSBiZXR3ZWVuIHZhbGlkIGFuZCBhY3R1YWwgbG9jYWxlLgorICogQHBhcmFtIGZt
dCBUaGUgZm9ybWF0dGVyIHRvIGdldCB0aGUgbG9jYWxlIGZyb20KKyAqIEBwYXJhbSB0eXBlIHR5
cGUgb2YgdGhlIGxvY2FsZSB3ZSdyZSBsb29raW5nIGZvciAodmFsaWQgb3IgYWN0dWFsKSAKKyAq
IEBwYXJhbSBzdGF0dXMgZXJyb3IgY29kZSBmb3IgdGhlIG9wZXJhdGlvbgorICogQHJldHVybiB0
aGUgbG9jYWxlIG5hbWUKKyAqIEBzdGFibGUgSUNVIDIuOAorICovCitVX1NUQUJMRSBjb25zdCBj
aGFyKiBVX0VYUE9SVDIKK3VudW1fZ2V0TG9jYWxlQnlUeXBlKGNvbnN0IFVOdW1iZXJGb3JtYXQg
KmZtdCwKKyAgICAgICAgICAgICAgICAgICAgIFVMb2NEYXRhTG9jYWxlVHlwZSB0eXBlLAorICAg
ICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSogc3RhdHVzKTsgCisKKyNlbmRpZiAvKiAjaWYg
IVVDT05GSUdfTk9fRk9STUFUVElORyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pY3UvdW5pY29kZS91dHlwZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pY3UvdW5pY29kZS91dHlwZXMuaAppbmRleCAwMGJmMTRjZThlNmU1ZDZlYzhlZDg3ZDhlOTU2
MTcwY2E1Nzc4N2IyLi4xYmNmN2Y1ZDM5MDlmZjY2YjY1OGVhOTViYTRhMmNkZWI1NDljOWMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdXR5cGVzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3V0eXBlcy5oCkBAIC01NSw3ICs1
NSw3IEBACiAgKi8KICNpZmRlZiBYUF9DUExVU1BMVVMKICMgICBpZm5kZWYgVV9TSE9XX0NQTFVT
UExVU19BUEkKLSMgICAgICAgZGVmaW5lIFVfU0hPV19DUExVU1BMVVNfQVBJIDEKKyMgICAgICAg
ZGVmaW5lIFVfU0hPV19DUExVU1BMVVNfQVBJIDAKICMgICBlbmRpZgogI2Vsc2UKICMgICB1bmRl
ZiBVX1NIT1dfQ1BMVVNQTFVTX0FQSQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKaW5kZXggMzQ0N2IzOThmZDA2MTgwNTkwOWU2ZjAyMmUz
ZDY2NTIzYmFjNDY5OC4uNzc1NWJmNGNlYTBjZjQzNmQ3ODM5Mjg2N2M3YzdkY2FlZTk0YmFlNiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmll
cnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVy
cy5oCkBAIC0xNDEsNiArMTQxLDcgQEAKICAgICBtYWNybyhsYXN0SW5kZXgpIFwKICAgICBtYWNy
byhsZW5ndGgpIFwKICAgICBtYWNybyhsaW5lKSBcCisgICAgbWFjcm8obG9jYWxlTWF0Y2hlcikg
XAogICAgIG1hY3JvKG1lc3NhZ2UpIFwKICAgICBtYWNybyhtdWx0aWxpbmUpIFwKICAgICBtYWNy
byhuYW1lKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
Q29sbGF0b3JDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5jcHAKaW5kZXggZDQxZGQxN2NkOGViMTEyYTIxZWZiNmMy
MWExNDQ5NGZiMmVkNmQ2NS4uMzEwN2IzZjVlOTRkYzhhZGViMWI5Njg1Y2ZiMzUwZjQ3MzFkZmRi
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9y
Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxD
b2xsYXRvckNvbnN0cnVjdG9yLmNwcApAQCAtMTUwLDI1ICsxNTAsMTcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBJbnRsQ29sbGF0b3JDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2Nh
bGVzT2YoRXhlY1MKICAgICAvLyAxMC4yLjIgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVz
T2YobG9jYWxlcyBbLCBvcHRpb25zXSkgKEVDTUEtNDAyIDIuMCkKIAogICAgIC8vIDEuIExldCBy
ZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCi0gICAg
Ly8gRklYTUU6IHJlcXVlc3RlZCA9IENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcyk7Cisg
ICAgSlNBcnJheSogcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZXhl
YywgZXhlYy0+YXJndW1lbnQoMCkpOwogCiAgICAgLy8gMi4gUmV0dXJuSWZBYnJ1cHQocmVxdWVz
dGVkTG9jYWxlcykuCi0gICAgLy8gaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgIC8vICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogICAgIC8vIDMuIFJldHVybiBTdXBwb3J0ZWRMb2NhbGVzKCVDb2xsYXRvciUuW1th
dmFpbGFibGVMb2NhbGVzXV0sIHJlcXVlc3RlZExvY2FsZXMsIG9wdGlvbnMpLgotICAgIC8vIEZJ
WE1FOiByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN1cHBvcnRlZExvY2FsZXMoYXZhaWxhYmxlLCBy
ZXF1ZXN0ZWQsIG9wdGlvbnMpKTsKLQotICAgIC8vIFJldHVybiBlbXB0eSBhcnJheSB1bnRpbCBw
cm9wZXJseSBpbXBsZW1lbnRlZC4KLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7
Ci0gICAgSlNBcnJheSogc3VwcG9ydGVkTG9jYWxlcyA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5p
dGlhbGl6ZWQodm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVE
dXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aFVuZGVjaWRlZCksIDApOwotICAgIGlmICghc3VwcG9y
dGVkTG9jYWxlcykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd091dE9mTWVt
b3J5RXJyb3IoZXhlYykpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdXBwb3J0ZWRM
b2NhbGVzKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN1cHBvcnRlZExvY2FsZXMoZXhl
YywgZ2xvYmFsT2JqZWN0LT5pbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCksIHJlcXVlc3Rl
ZExvY2FsZXMsIGV4ZWMtPmFyZ3VtZW50KDEpKSk7CiB9Ci0gICAgCisKIHZvaWQgSW50bENvbGxh
dG9yQ29uc3RydWN0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKICAgICBJbnRsQ29sbGF0b3JDb25zdHJ1Y3RvciogdGhpc09iamVjdCA9IGpz
Q2FzdDxJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvcio+KGNlbGwpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3Ry
dWN0b3IuY3BwCmluZGV4IDBiOGQ0NjBkMjY3NDFhNGI5MzM2YjhjYjBmOGI2NGZiNzhkMDY4N2Qu
Ljk4ZDNiYmUzZDQwZTJhY2ZlYjcyOGY4YTM2MDU0MzQ1NTI2MDM3MjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9y
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3Jt
YXRDb25zdHJ1Y3Rvci5jcHAKQEAgLTE1MCwyMiArMTUwLDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9j
YWxlc09mCiAgICAgLy8gMTIuMi4yIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mKGxvY2FsZXMgWywgb3B0aW9uc10pIChFQ01BLTQwMiAyLjApCiAKICAgICAvLyAxLiBMZXQg
YXZhaWxhYmxlTG9jYWxlcyBiZSAlRGF0ZVRpbWVGb3JtYXQlLltbYXZhaWxhYmxlTG9jYWxlc11d
LgotICAgIC8vIEZJWE1FOiBhdmFpbGFibGUgPSBJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rv
cjo6Z2V0QXZhaWxhYmxlTG9jYWxlcygpCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKTsKKyAgICBjb25zdCBIYXNoU2V0PFN0
cmluZz4gYXZhaWxhYmxlTG9jYWxlcyA9IGdsb2JhbE9iamVjdC0+aW50bERhdGVUaW1lRm9ybWF0
QXZhaWxhYmxlTG9jYWxlcygpOwogCiAgICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUg
Q2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KLSAgICAvLyBGSVhNRTogcmVxdWVzdGVk
ID0gQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKQorICAgIEpTQXJyYXkqIHJlcXVlc3Rl
ZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDAp
KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyAzLiBSZXR1cm4gU3VwcG9ydGVkTG9j
YWxlcyhhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKS4KLSAgICAv
LyBGSVhNRTogcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTdXBwb3J0ZWRMb2NhbGVzKGF2YWlsYWJs
ZSwgcmVxdWVzdGVkLCBvcHRpb25zKSk7Ci0KLSAgICAvLyBSZXR1cm4gZW1wdHkgYXJyYXkgdW50
aWwgcHJvcGVybHkgaW1wbGVtZW50ZWQuCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVj
dCgpOwotICAgIEpTQXJyYXkqIHN1cHBvcnRlZExvY2FsZXMgPSBKU0FycmF5Ojp0cnlDcmVhdGVV
bmluaXRpYWxpemVkKHZtLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdU
eXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhVbmRlY2lkZWQpLCAwKTsKLSAgICBpZiAoIXN1
cHBvcnRlZExvY2FsZXMpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpKTsKLQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3VwcG9y
dGVkTG9jYWxlcyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdXBwb3J0ZWRMb2NhbGVz
KGV4ZWMsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGV4ZWMtPmFyZ3VtZW50
KDEpKSk7CiB9CiAgICAgCiB2b2lkIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdENv
bnN0cnVjdG9yLmNwcAppbmRleCBiODYzOWQ2YjE0YzcwMDdhODcxMDI1NTc3YWFlMmVkMjlmYmNk
MmUxLi5kMDY2ZWU4MDRiZjc4NjJkMDRjZTFjYWQ5N2ZmYmViMWMxZmNjNjA4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0
b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3Jt
YXRDb25zdHJ1Y3Rvci5jcHAKQEAgLTE1MCwyMiArMTUwLDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2Fs
ZXNPZihFCiAgICAgLy8gMTEuMi4yIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNP
Zihsb2NhbGVzIFssIG9wdGlvbnNdKSAoRUNNQS00MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IGF2
YWlsYWJsZUxvY2FsZXMgYmUgJU51bWJlckZvcm1hdCUuW1thdmFpbGFibGVMb2NhbGVzXV0uCi0g
ICAgLy8gRklYTUU6IGF2YWlsYWJsZSA9IEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvcjo6Z2V0
QXZhaWxhYmxlTG9jYWxlcygpCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4
ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKTsKKyAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4g
YXZhaWxhYmxlTG9jYWxlcyA9IGdsb2JhbE9iamVjdC0+aW50bE51bWJlckZvcm1hdEF2YWlsYWJs
ZUxvY2FsZXMoKTsKIAogICAgIC8vIDIuIExldCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNh
bGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCi0gICAgLy8gRklYTUU6IHJlcXVlc3RlZCA9IENhbm9u
aWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykKKyAgICBKU0FycmF5KiByZXF1ZXN0ZWRMb2NhbGVz
ID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gMy4gUmV0dXJuIFN1cHBvcnRlZExvY2FsZXMoYXZh
aWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgb3B0aW9ucykuCi0gICAgLy8gRklYTUU6
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3VwcG9ydGVkTG9jYWxlcyhhdmFpbGFibGUsIHJlcXVl
c3RlZCwgb3B0aW9ucykpOwotCi0gICAgLy8gUmV0dXJuIGVtcHR5IGFycmF5IHVudGlsIHByb3Bl
cmx5IGltcGxlbWVudGVkLgotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKTsKLSAg
ICBKU0FycmF5KiBzdXBwb3J0ZWRMb2NhbGVzID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZCh2bSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmlu
Z0FsbG9jYXRpb24oQXJyYXlXaXRoVW5kZWNpZGVkKSwgMCk7Ci0gICAgaWYgKCFzdXBwb3J0ZWRM
b2NhbGVzKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93T3V0T2ZNZW1vcnlF
cnJvcihleGVjKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN1cHBvcnRlZExvY2Fs
ZXMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3VwcG9ydGVkTG9jYWxlcyhleGVjLCBh
dmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBleGVjLT5hcmd1bWVudCgxKSkpOwog
fQogCiB2b2lkIEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvcjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsT2JqZWN0LmNwcAppbmRleCBiYTQ1N2U3MjU2MDkxMDc4OTEyMmY1MTM3NWVl
OWZkYzEwMjRkMzJmLi5iYzhlZDllODgzNjZlYWY5YmVkNmUyMGE2OThiNWQ2NzJkZmU3ZDg3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcApAQCAtMjgs
NiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElOVEwpCiAKKyNpbmNsdWRlICJFcnJvci5oIgogI2lu
Y2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSW50bENvbGxhdG9yLmgiCiAj
aW5jbHVkZSAiSW50bENvbGxhdG9yQ29uc3RydWN0b3IuaCIKQEAgLTM5LDE0ICs0MCwyNyBAQAog
I2luY2x1ZGUgIkludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkludGxO
dW1iZXJGb3JtYXRQcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJMb29rdXAuaCIKICNpbmNsdWRlICJP
YmplY3RQcm90b3R5cGUuaCIKKyNpbmNsdWRlIDx1bmljb2RlL3Vsb2MuaD4KICNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogU1RBVElDX0FTU0VSVF9JU19U
UklWSUFMTFlfREVTVFJVQ1RJQkxFKEludGxPYmplY3QpOwogCitTdHJpbmcgZ2V0Q2Fub25pY2Fs
TGFuZ1RhZyhjb25zdCBWZWN0b3I8U3RyaW5nPiYpOworU3RyaW5nIGdldFByaXZhdGVVc2VMYW5n
VGFnKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jiwgc2l6ZV90KTsKK1N0cmluZyBnZXRHcmFuZGZhdGhl
cmVkTGFuZ1RhZyhjb25zdCBTdHJpbmcmKTsKK1N0cmluZyBjYW5vbmljYWxpemVMYW5ndWFnZVRh
ZyhTdHJpbmcpOworU3RyaW5nIGRlZmF1bHRMb2NhbGUoKTsKK1N0cmluZyBiZXN0QXZhaWxhYmxl
TG9jYWxlKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYsIFN0cmluZyk7CitKU0FycmF5KiBsb29rdXBT
dXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSosIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYsIEpTQXJy
YXkqKTsKK0pTQXJyYXkqIGJlc3RGaXRTdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSosIGNvbnN0
IEhhc2hTZXQ8U3RyaW5nPiYsIEpTQXJyYXkqKTsKK1N0cmluZyBnZXRJbnRsU3RyaW5nT3B0aW9u
KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIFByb3BlcnR5TmFtZSwgY29uc3QgSGFzaFNldDxTdHJpbmc+
JiwgY29uc3QgY2hhciosIFN0cmluZyk7Citib29sIGdldEludGxCb29sZWFuT3B0aW9uKEV4ZWNT
dGF0ZSosIEpTVmFsdWUsIFByb3BlcnR5TmFtZSwgYm9vbCk7CisKIH0KIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC0xMDIsNiArMTE2LDY0NCBAQCBTdHJ1Y3R1cmUqIEludGxPYmplY3Q6OmNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVgogICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAorU3RyaW5nIGNh
bm9uaWNhbGl6ZUxhbmd1YWdlVGFnKFN0cmluZyBsb2NhbGUpCit7CisgICAgLy8gNi4yLjIgSXNT
dHJ1Y3R1cmFsbHlWYWxpZExhbmd1YWdlVGFnIChsb2NhbGUpCisgICAgLy8gNi4yLjMgQ2Fub25p
Y2FsaXplTGFuZ3VhZ2VUYWcgKGxvY2FsZSkKKyAgICAvLyBUaGVzZSBhcmUgZG9uZSBvbmUgYWZ0
ZXIgYW5vdGhlciBpbiBDYW5vbmljYWxpemVMb2NhbGVMaXN0LCBzbyB0aGV5IGFyZSBjb21iaW5l
ZCBoZXJlIHRvIHJlZHVjZSBkdXBsaWNhdGlvbi4KKyAgICAvLyBodHRwczovL3d3dy5yZmMtZWRp
dG9yLm9yZy9yZmMvYmNwL2JjcDQ3LnR4dAorCisgICAgLy8gTGFuZ3VhZ2UtVGFnID0gbGFuZ3Rh
ZyAvIHByaXZhdGV1c2UgLyBncmFuZGZhdGhlcmVkCisgICAgU3RyaW5nIGdyYW5kZmF0aGVyID0g
Z2V0R3JhbmRmYXRoZXJlZExhbmdUYWcobG9jYWxlKTsKKyAgICBpZiAoIWdyYW5kZmF0aGVyLmlz
TnVsbCgpKQorICAgICAgICByZXR1cm4gZ3JhbmRmYXRoZXI7CisKKyAgICAvLyBGSVhNRTogUmVw
bGFjZSByZWR1bmRhbnQgdGFncyBbUkZDNDY0N10uCisKKyAgICBWZWN0b3I8U3RyaW5nPiBwYXJ0
czsKKyAgICBsb2NhbGUuc3BsaXQoIi0iLCBwYXJ0cyk7CisgICAgc2l6ZV90IG51bVBhcnRzID0g
cGFydHMuc2l6ZSgpOworICAgIGlmIChudW1QYXJ0cyA+IDApIHsKKyAgICAgICAgU3RyaW5nIGxh
bmd0YWcgPSBnZXRDYW5vbmljYWxMYW5nVGFnKHBhcnRzKTsKKyAgICAgICAgaWYgKCFsYW5ndGFn
LmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGxhbmd0YWc7CisKKyAgICAgICAgU3RyaW5n
IHByaXZhdGV1c2UgPSBnZXRQcml2YXRlVXNlTGFuZ1RhZyhwYXJ0cywgMCk7CisgICAgICAgIGlm
ICghcHJpdmF0ZXVzZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBwcml2YXRldXNlOwor
ICAgIH0KKworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGdldENhbm9uaWNhbExh
bmdUYWcoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcnRzKQoreworICAgIC8vIEZvbGxvd3MgdGhl
IGdyYW1tYXIgYXQgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL2JjcC9iY3A0Ny50eHQK
KyAgICAvLyBsYW5ndGFnID0gbGFuZ3VhZ2UgWyItIiBzY3JpcHRdIFsiLSIgcmVnaW9uXSAqKCIt
IiB2YXJpYW50KSAqKCItIiBleHRlbnNpb24pIFsiLSIgcHJpdmF0ZXVzZV0KKworICAgIHNpemVf
dCBudW1QYXJ0cyA9IHBhcnRzLnNpemUoKTsKKyAgICAvLyBDaGVjayBmb3IgbGFuZ3VhZ2UuCisg
ICAgLy8gbGFuZ3VhZ2UgPSAyKjNBTFBIQSBbIi0iIGV4dGxhbmddIC8gNEFMUEhBIC8gNSo4QUxQ
SEEKKyAgICBzaXplX3QgY3VycmVudEluZGV4ID0gMDsKKyAgICBTdHJpbmcgY3VycmVudFBhcnQg
PSBwYXJ0c1tjdXJyZW50SW5kZXhdOworICAgIHVuc2lnbmVkIGludCBjdXJyZW50TGVuZ3RoID0g
Y3VycmVudFBhcnQubGVuZ3RoKCk7CisgICAgaWYgKGN1cnJlbnRMZW5ndGggPCAyIHx8IGN1cnJl
bnRMZW5ndGggPiA4IHx8ICFjdXJyZW50UGFydC5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzQVND
SUlBbHBoYT4oKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgKytjdXJyZW50SW5k
ZXg7CisgICAgU3RyaW5nQnVpbGRlciBjYW5vbmljYWw7CisgICAgY2Fub25pY2FsLmFwcGVuZChj
dXJyZW50UGFydC5sb3dlcigpKTsKKworICAgIC8vIENoZWNrIGZvciBleHRsYW5nLgorICAgIC8v
IGV4dGxhbmcgPSAzQUxQSEEgKjIoIi0iIDNBTFBIQSkKKyAgICBpZiAoY3VycmVudExlbmd0aCA8
PSAzKSB7CisgICAgICAgIGZvciAoaW50IHRpbWVzID0gMDsgdGltZXMgPCAzICYmIGN1cnJlbnRJ
bmRleCA8IG51bVBhcnRzOyArK3RpbWVzKSB7CisgICAgICAgICAgICBjdXJyZW50UGFydCA9IHBh
cnRzW2N1cnJlbnRJbmRleF07CisgICAgICAgICAgICBjdXJyZW50TGVuZ3RoID0gY3VycmVudFBh
cnQubGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAoY3VycmVudExlbmd0aCA9PSAzICYmIGN1cnJl
bnRQYXJ0LmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNBU0NJSUFscGhhPigpKSB7CisgICAgICAg
ICAgICAgICAgKytjdXJyZW50SW5kZXg7CisgICAgICAgICAgICAgICAgY2Fub25pY2FsLmFwcGVu
ZCgiLSIpOworICAgICAgICAgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQoY3VycmVudFBhcnQubG93
ZXIoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIHNjcmlwdC4K
KyAgICAvLyBzY3JpcHQgPSA0QUxQSEEKKyAgICBpZiAoY3VycmVudEluZGV4IDwgbnVtUGFydHMp
IHsKKyAgICAgICAgY3VycmVudFBhcnQgPSBwYXJ0c1tjdXJyZW50SW5kZXhdOworICAgICAgICBj
dXJyZW50TGVuZ3RoID0gY3VycmVudFBhcnQubGVuZ3RoKCk7CisgICAgICAgIGlmIChjdXJyZW50
TGVuZ3RoID09IDQgJiYgY3VycmVudFBhcnQuaXNBbGxTcGVjaWFsQ2hhcmFjdGVyczxpc0FTQ0lJ
QWxwaGE+KCkpIHsKKyAgICAgICAgICAgICsrY3VycmVudEluZGV4OworICAgICAgICAgICAgY2Fu
b25pY2FsLmFwcGVuZCgiLSIpOworICAgICAgICAgICAgY2Fub25pY2FsLmFwcGVuZCh0b0FTQ0lJ
VXBwZXIoY3VycmVudFBhcnRbMF0pKTsKKyAgICAgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQoY3Vy
cmVudFBhcnQuc3Vic3RyaW5nKDEsIDMpLmxvd2VyKCkpOworICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gQ2hlY2sgZm9yIHJlZ2lvbi4KKyAgICAvLyByZWdpb24gPSAyQUxQSEEgLyAzRElHSVQK
KyAgICBpZiAoY3VycmVudEluZGV4IDwgbnVtUGFydHMpIHsKKyAgICAgICAgY3VycmVudFBhcnQg
PSBwYXJ0c1tjdXJyZW50SW5kZXhdOworICAgICAgICBjdXJyZW50TGVuZ3RoID0gY3VycmVudFBh
cnQubGVuZ3RoKCk7CisgICAgICAgIGJvb2wgaXNWYWxpZFJlZ2lvbiA9ICgKKyAgICAgICAgICAg
IChjdXJyZW50TGVuZ3RoID09IDIgJiYgY3VycmVudFBhcnQuaXNBbGxTcGVjaWFsQ2hhcmFjdGVy
czxpc0FTQ0lJQWxwaGE+KCkpIHx8CisgICAgICAgICAgICAoY3VycmVudExlbmd0aCA9PSAzICYm
IGN1cnJlbnRQYXJ0LmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNBU0NJSURpZ2l0PigpKQorICAg
ICAgICApOworICAgICAgICBpZiAoaXNWYWxpZFJlZ2lvbikgeworICAgICAgICAgICAgKytjdXJy
ZW50SW5kZXg7CisgICAgICAgICAgICBjYW5vbmljYWwuYXBwZW5kKCItIik7CisgICAgICAgICAg
ICBjYW5vbmljYWwuYXBwZW5kKGN1cnJlbnRQYXJ0LnVwcGVyKCkpOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gQ2hlY2sgZm9yIHZhcmlhbnQuCisgICAgLy8gNSo4YWxwaGFudW0gLyAoRElH
SVQgM2FscGhhbnVtKQorICAgIEhhc2hTZXQ8U3RyaW5nPiBzdWJ0YWdzOworICAgIHdoaWxlIChj
dXJyZW50SW5kZXggPCBudW1QYXJ0cykgeworICAgICAgICBjdXJyZW50UGFydCA9IHBhcnRzW2N1
cnJlbnRJbmRleF07CisgICAgICAgIGN1cnJlbnRMZW5ndGggPSBjdXJyZW50UGFydC5sZW5ndGgo
KTsKKyAgICAgICAgYm9vbCBpc1ZhbGlkVmFyaWFudCA9ICgKKyAgICAgICAgICAgIChjdXJyZW50
TGVuZ3RoID49IDUgJiYgY3VycmVudExlbmd0aCA8PSA4ICYmIGN1cnJlbnRQYXJ0LmlzQWxsU3Bl
Y2lhbENoYXJhY3RlcnM8aXNBU0NJSUFscGhhbnVtZXJpYz4oKSkgfHwKKyAgICAgICAgICAgIChj
dXJyZW50TGVuZ3RoID09IDQgJiYgaXNBU0NJSURpZ2l0KGN1cnJlbnRQYXJ0WzBdKSAmJiBjdXJy
ZW50UGFydC5zdWJzdHJpbmcoMSwgMykuaXNBbGxTcGVjaWFsQ2hhcmFjdGVyczxpc0FTQ0lJQWxw
aGFudW1lcmljPigpKQorICAgICAgICApOworICAgICAgICBpZiAoIWlzVmFsaWRWYXJpYW50KQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gQ2Fubm90IGluY2x1ZGUgZHVwbGljYXRl
IHN1YnRhZ3MgKGNhc2UgaW5zZW5zaXRpdmUpLgorICAgICAgICBjdXJyZW50UGFydCA9IGN1cnJl
bnRQYXJ0Lmxvd2VyKCk7CisgICAgICAgIGlmIChzdWJ0YWdzLmNvbnRhaW5zKGN1cnJlbnRQYXJ0
KSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgc3VidGFncy5hZGQoY3Vy
cmVudFBhcnQpOworCisgICAgICAgICsrY3VycmVudEluZGV4OworCisgICAgICAgIC8vIFJlb3Jk
ZXJpbmcgdmFyaWFudCBzdWJ0YWdzIGlzIG5vdCByZXF1aXJlZCBpbiB0aGUgc3BlYy4KKyAgICAg
ICAgY2Fub25pY2FsLmFwcGVuZCgiLSIpOworICAgICAgICBjYW5vbmljYWwuYXBwZW5kKGN1cnJl
bnRQYXJ0KTsKKyAgICB9CisKKyAgICAvLyBDaGVjayBmb3IgZXh0ZW5zaW9uLgorICAgIC8vIGV4
dGVuc2lvbiA9IHNpbmdsZXRvbiAxKigiLSIgKDIqOGFscGhhbnVtKSkKKyAgICAvLyBzaW5nbGV0
b24gPSBhbHBoYW51bSBleGNlcHQgeCBvciBYCisgICAgc3VidGFncy5jbGVhcigpOworICAgIFZl
Y3RvcjxTdHJpbmc+IGV4dGVuc2lvbnM7CisgICAgd2hpbGUgKGN1cnJlbnRJbmRleCA8IG51bVBh
cnRzKSB7CisgICAgICAgIGN1cnJlbnRQYXJ0ID0gcGFydHNbY3VycmVudEluZGV4XS5sb3dlcigp
OworICAgICAgICBjdXJyZW50TGVuZ3RoID0gY3VycmVudFBhcnQubGVuZ3RoKCk7CisgICAgICAg
IGJvb2wgaXNWYWxpZFNpbmdsZXRvbiA9IChjdXJyZW50TGVuZ3RoID09IDEgJiYgY3VycmVudFBh
cnQgIT0gIngiICYmIGlzQVNDSUlBbHBoYW51bWVyaWMoY3VycmVudFBhcnRbMF0pKTsKKyAgICAg
ICAgaWYgKCFpc1ZhbGlkU2luZ2xldG9uKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Ly8gQ2Fubm90IGluY2x1ZGUgZHVwbGljYXRlIHNpbmdsZXRvbiAoY2FzZSBpbnNlbnNpdGl2ZSwg
YWxyZWFkeSBsb3dlcmNhc2VkKS4KKyAgICAgICAgY3VycmVudFBhcnQgPSBjdXJyZW50UGFydDsK
KyAgICAgICAgaWYgKHN1YnRhZ3MuY29udGFpbnMoY3VycmVudFBhcnQpKQorICAgICAgICAgICAg
cmV0dXJuIFN0cmluZygpOworICAgICAgICBzdWJ0YWdzLmFkZChjdXJyZW50UGFydCk7CisKKyAg
ICAgICAgKytjdXJyZW50SW5kZXg7CisgICAgICAgIGludCBudW1FeHRQYXJ0cyA9IDA7CisgICAg
ICAgIFN0cmluZ0J1aWxkZXIgZXh0ZW5zaW9uOworICAgICAgICBleHRlbnNpb24uYXBwZW5kKGN1
cnJlbnRQYXJ0KTsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnRJbmRleCA8IG51bVBhcnRzKSB7Cisg
ICAgICAgICAgICBjdXJyZW50UGFydCA9IHBhcnRzW2N1cnJlbnRJbmRleF07CisgICAgICAgICAg
ICBjdXJyZW50TGVuZ3RoID0gY3VycmVudFBhcnQubGVuZ3RoKCk7CisKKyAgICAgICAgICAgIGJv
b2wgaXNWYWxpZCA9IChjdXJyZW50TGVuZ3RoID49IDIgJiYgY3VycmVudExlbmd0aCA8PSA4ICYm
IGN1cnJlbnRQYXJ0LmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNBU0NJSUFscGhhbnVtZXJpYz4o
KSk7CisgICAgICAgICAgICBpZiAoIWlzVmFsaWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICsrY3VycmVudEluZGV4OworICAgICAgICAgICAgKytudW1FeHRQYXJ0czsK
KyAgICAgICAgICAgIGV4dGVuc2lvbi5hcHBlbmQoIi0iKTsKKyAgICAgICAgICAgIGV4dGVuc2lv
bi5hcHBlbmQoY3VycmVudFBhcnQubG93ZXIoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBS
ZXF1aXJlcyBhdCBsZWFzdCBvbmUgcHJvZHVjdGlvbi4KKyAgICAgICAgaWYgKG51bUV4dFBhcnRz
ID09IDApCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAgICAgZXh0ZW5zaW9u
cy5hcHBlbmQoZXh0ZW5zaW9uLnRvU3RyaW5nKCkpOworICAgIH0KKworICAgIC8vIEFkZCBleHRl
bnNpb25zIHRvIGNhbm9uaWNhbCBzb3J0ZWQgYnkgc2luZ2xldG9uLgorICAgIHN0ZDo6c29ydCgK
KyAgICAgICAgZXh0ZW5zaW9ucy5iZWdpbigpLAorICAgICAgICBleHRlbnNpb25zLmVuZCgpLAor
ICAgICAgICBbXSAoU3RyaW5nIGEsIFN0cmluZyBiKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJl
dHVybiBhWzBdIDwgYlswXTsKKyAgICAgICAgfQorICAgICk7CisgICAgc2l6ZV90IG51bUV4dGVu
c3Rpb25zID0gZXh0ZW5zaW9ucy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1FeHRlbnN0aW9uczsgKytpKSB7CisgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQoIi0iKTsKKyAg
ICAgICAgY2Fub25pY2FsLmFwcGVuZChleHRlbnNpb25zW2ldKTsKKyAgICB9CisKKyAgICAvLyBD
aGVjayBmb3IgcHJpdmF0ZXVzZS4KKyAgICBpZiAoY3VycmVudEluZGV4IDwgbnVtUGFydHMpIHsK
KyAgICAgICAgU3RyaW5nIHByaXZhdGV1c2UgPSBnZXRQcml2YXRlVXNlTGFuZ1RhZyhwYXJ0cywg
Y3VycmVudEluZGV4KTsKKyAgICAgICAgaWYgKHByaXZhdGV1c2UuaXNOdWxsKCkpCisgICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQoIi0iKTsKKyAg
ICAgICAgY2Fub25pY2FsLmFwcGVuZChwcml2YXRldXNlKTsKKyAgICB9CisKKyAgICAvLyBGSVhN
RTogUmVwbGFjZSBzdWJ0YWdzIHdpdGggdGhlaXIgcHJlZmVycmVkIHZhbHVlcy4KKworICAgIHJl
dHVybiBjYW5vbmljYWwudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIGdldFByaXZhdGVVc2VMYW5n
VGFnKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJ0cywgc2l6ZV90IHN0YXJ0SW5kZXgpCit7Cisg
ICAgc2l6ZV90IG51bVBhcnRzID0gcGFydHMuc2l6ZSgpOworICAgIHNpemVfdCBjdXJyZW50SW5k
ZXggPSBzdGFydEluZGV4OworCisgICAgLy8gQ2hlY2sgZm9yIHByaXZhdGV1c2UuCisgICAgLy8g
cHJpdmF0ZXVzZSA9ICJ4IiAxKigiLSIgKDIqOGFscGhhbnVtKSkKKyAgICBTdHJpbmdCdWlsZGVy
IHByaXZhdGV1c2U7CisgICAgd2hpbGUgKGN1cnJlbnRJbmRleCA8IG51bVBhcnRzKSB7CisgICAg
ICAgIFN0cmluZyBjdXJyZW50UGFydCA9IHBhcnRzW2N1cnJlbnRJbmRleF0ubG93ZXIoKTsKKyAg
ICAgICAgdW5zaWduZWQgaW50IGN1cnJlbnRMZW5ndGggPSBjdXJyZW50UGFydC5sZW5ndGgoKTsK
KyAgICAgICAgYm9vbCBpc1ZhbGlkID0gKGN1cnJlbnRMZW5ndGggPT0gMSAmJiBjdXJyZW50UGFy
dCA9PSAieCIpOworICAgICAgICBpZiAoIWlzVmFsaWQpCisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBpZiAoY3VycmVudEluZGV4ICE9IHN0YXJ0SW5kZXgpCisgICAgICAgICAgICBwcml2
YXRldXNlLmFwcGVuZCgiLSIpOworCisgICAgICAgICsrY3VycmVudEluZGV4OworICAgICAgICBp
bnQgbnVtRXh0UGFydHMgPSAwOworICAgICAgICBwcml2YXRldXNlLmFwcGVuZChjdXJyZW50UGFy
dCk7CisgICAgICAgIHdoaWxlIChjdXJyZW50SW5kZXggPCBudW1QYXJ0cykgeworICAgICAgICAg
ICAgY3VycmVudFBhcnQgPSBwYXJ0c1tjdXJyZW50SW5kZXhdOworICAgICAgICAgICAgY3VycmVu
dExlbmd0aCA9IGN1cnJlbnRQYXJ0Lmxlbmd0aCgpOworCisgICAgICAgICAgICBib29sIGlzVmFs
aWQgPSAoY3VycmVudExlbmd0aCA+PSAyICYmIGN1cnJlbnRMZW5ndGggPD0gOCAmJiBjdXJyZW50
UGFydC5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzQVNDSUlBbHBoYW51bWVyaWM+KCkpOworICAg
ICAgICAgICAgaWYgKCFpc1ZhbGlkKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICArK2N1cnJlbnRJbmRleDsKKyAgICAgICAgICAgICsrbnVtRXh0UGFydHM7CisgICAgICAg
ICAgICBwcml2YXRldXNlLmFwcGVuZCgiLSIpOworICAgICAgICAgICAgcHJpdmF0ZXVzZS5hcHBl
bmQoY3VycmVudFBhcnQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVxdWlyZXMgYXQgbGVh
c3Qgb25lIHByb2R1Y3Rpb24uCisgICAgICAgIGlmIChudW1FeHRQYXJ0cyA9PSAwKQorICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KKworICAgIC8vIExlZnRvdmVycyBtYWtlcyBp
dCBpbnZhbGlkLgorICAgIGlmIChjdXJyZW50SW5kZXggPCBudW1QYXJ0cykKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworCisgICAgcmV0dXJuIHByaXZhdGV1c2UudG9TdHJpbmcoKTsKK30KKwor
U3RyaW5nIGdldEdyYW5kZmF0aGVyZWRMYW5nVGFnKGNvbnN0IFN0cmluZyYgbG9jYWxlKQorewor
ICAgIC8vICBncmFuZGZhdGhlcmVkID0gaXJyZWd1bGFyIC8gcmVndWxhcgorICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+IHRhZ01hcCA9IHsKKyAgICAgICAgLy8gSXJyZWd1bGFyLgorICAgICAg
ICB7IEFTQ0lJTGl0ZXJhbCgiZW4tZ2Itb2VkIiksIEFTQ0lJTGl0ZXJhbCgiZW4tR0Itb2VkIikg
fSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImktYW1pIiksIEFTQ0lJTGl0ZXJhbCgiYW1pIikg
fSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImktYm5uIiksIEFTQ0lJTGl0ZXJhbCgiYm5uIikg
fSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImktZGVmYXVsdCIpLCBBU0NJSUxpdGVyYWwoImkt
ZGVmYXVsdCIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJpLWVub2NoaWFuIiksIEFTQ0lJ
TGl0ZXJhbCgiaS1lbm9jaGlhbiIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJpLWhhayIp
LCBBU0NJSUxpdGVyYWwoImhhayIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJpLWtsaW5n
b24iKSwgQVNDSUlMaXRlcmFsKCJ0bGgiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiaS1s
dXgiKSwgQVNDSUlMaXRlcmFsKCJsYiIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJpLW1p
bmdvIiksIEFTQ0lJTGl0ZXJhbCgiaS1taW5nbyIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFs
KCJpLW5hdmFqbyIpLCBBU0NJSUxpdGVyYWwoIm52IikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVy
YWwoImktcHduIiksIEFTQ0lJTGl0ZXJhbCgicHduIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVy
YWwoImktdGFvIiksIEFTQ0lJTGl0ZXJhbCgidGFvIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVy
YWwoImktdGF5IiksIEFTQ0lJTGl0ZXJhbCgidGF5IikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVy
YWwoImktdHN1IiksIEFTQ0lJTGl0ZXJhbCgidHN1IikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVy
YWwoInNnbi1iZS1mciIpLCBBU0NJSUxpdGVyYWwoInNmYiIpIH0sCisgICAgICAgIHsgQVNDSUlM
aXRlcmFsKCJzZ24tYmUtbmwiKSwgQVNDSUlMaXRlcmFsKCJ2Z3QiKSB9LAorICAgICAgICB7IEFT
Q0lJTGl0ZXJhbCgic2duLWNoLWRlIiksIEFTQ0lJTGl0ZXJhbCgic2dnIikgfSwKKyAgICAgICAg
Ly8gUmVndWxhci4KKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImFydC1sb2piYW4iKSwgQVNDSUlM
aXRlcmFsKCJqYm8iKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiY2VsLWdhdWxpc2giKSwg
QVNDSUlMaXRlcmFsKCJjZWwtZ2F1bGlzaCIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJu
by1ib2siKSwgQVNDSUlMaXRlcmFsKCJuYiIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJu
by1ueW4iKSwgQVNDSUlMaXRlcmFsKCJubiIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJ6
aC1ndW95dSIpLCBBU0NJSUxpdGVyYWwoImNtbiIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFs
KCJ6aC1oYWtrYSIpLCBBU0NJSUxpdGVyYWwoImhhayIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRl
cmFsKCJ6aC1taW4iKSwgQVNDSUlMaXRlcmFsKCJ6aC1taW4iKSB9LAorICAgICAgICB7IEFTQ0lJ
TGl0ZXJhbCgiemgtbWluLW5hbiIpLCBBU0NJSUxpdGVyYWwoIm5hbiIpIH0sCisgICAgICAgIHsg
QVNDSUlMaXRlcmFsKCJ6aC14aWFuZyIpLCBBU0NJSUxpdGVyYWwoImhzbiIpIH0KKyAgICB9Owor
CisgICAgU3RyaW5nIGxvd2VyVGFnID0gbG9jYWxlLmxvd2VyKCk7CisgICAgaWYgKHRhZ01hcC5j
b250YWlucyhsb3dlclRhZykpCisgICAgICAgIHJldHVybiB0YWdNYXAuZ2V0KGxvd2VyVGFnKTsK
KworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGRlZmF1bHRMb2NhbGUoKQorewor
ICAgIC8vIDYuMi40IERlZmF1bHRMb2NhbGUgKCkKKyAgICBjb25zdCBjaGFyKiBkZWYgPSB1bG9j
X2dldERlZmF1bHQoKTsKKyAgICBTdHJpbmcgbG9jID0gU3RyaW5nKGRlZiwgc3RybGVuKGRlZikp
OworICAgIHJldHVybiBsb2MucmVwbGFjZSgnXycsICctJyk7Cit9CisKK0pTQXJyYXkqIGNhbm9u
aWNhbGl6ZUxvY2FsZUxpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGxvY2FsZXMpCit7Cisg
ICAgLy8gOS4yLjEgQ2Fub25pY2FsaXplTG9jYWxlTGlzdCAobG9jYWxlcykKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5j
YWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgSlNBcnJheSogc2VlbiA9IEpTQXJyYXk6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aFVuZGVjaWRlZCksIDApOworICAg
IGlmICghc2VlbikgeworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIC8vIDEuIElmIGxvY2FsZXMgaXMgdW5k
ZWZpbmVkLCB0aGVuIGEuIFJldHVybiBhIG5ldyBlbXB0eSBMaXN0LgorICAgIGlmIChsb2NhbGVz
LmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVybiBzZWVuOworCisgICAgLy8gMi4gTGV0IHNl
ZW4gYmUgYW4gZW1wdHkgTGlzdC4KKyAgICAvLyBEb25lIGJlZm9yZSB0byBhbHNvIHJldHVybiBp
biBzdGVwIDEsIGlmIG5lZWRlZC4KKworICAgIC8vIDMuIElmIFR5cGUobG9jYWxlcykgaXMgU3Ry
aW5nLCB0aGVuCisgICAgSlNPYmplY3QqIG9Mb2NhbGVzOworICAgIGlmIChsb2NhbGVzLmlzU3Ry
aW5nKCkpIHsKKyAgICAgICAgLy8gIGEuIExldCBhTG9jYWxlcyBiZSBDcmVhdGVBcnJheUZyb21M
aXN0KMKrbG9jYWxlc8K7KS4KKyAgICAgICAgSlNBcnJheSogYUxvY2FsZXMgPSBKU0FycmF5Ojp0
cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9y
SW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhVbmRlY2lkZWQpLCAxKTsKKyAg
ICAgICAgYUxvY2FsZXMtPmluaXRpYWxpemVJbmRleCh2bSwgMCwgbG9jYWxlcyk7CisgICAgICAg
IC8vIDQuIExldCBPIGJlIFRvT2JqZWN0KGFMb2NhbGVzKS4KKyAgICAgICAgb0xvY2FsZXMgPSBh
TG9jYWxlczsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyA0LiBMZXQgTyBiZSBUb09iamVjdChh
TG9jYWxlcykuCisgICAgICAgIG9Mb2NhbGVzID0gbG9jYWxlcy50b09iamVjdChleGVjKTsKKyAg
ICB9CisKKyAgICAvLyA1LiBSZXR1cm5JZkFicnVwdChPKS4KKyAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gNi4gTGV0IGxlbiBi
ZSBUb0xlbmd0aChHZXQoTywgImxlbmd0aCIpKS4KKyAgICBKU1ZhbHVlIGxlbmd0aFByb3BlcnR5
ID0gb0xvY2FsZXMtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBp
bnQzMl90IGxlbmd0aCA9IGxlbmd0aFByb3BlcnR5LnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGxl
bmd0aCA8IDApCisgICAgICAgIGxlbmd0aCA9IDA7CisKKyAgICAvLyBLZWVwIHRyYWNrIG9mIGxv
Y2FsZXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIGxpc3QuCisgICAgSGFzaFNldDxTdHJp
bmc+IHNlZW5TZXQgPSBIYXNoU2V0PFN0cmluZz4oKTsKKworICAgIC8vIDcuIExldCBrIGJlIDAu
CisgICAgLy8gOC4gUmVwZWF0LCB3aGlsZSBrIDwgbGVuCisgICAgZm9yIChpbnQzMl90IGsgPSAw
OyBrIDwgbGVuZ3RoOyArK2spIHsKKyAgICAgICAgLy8gYS4gTGV0IFBrIGJlIFRvU3RyaW5nKGsp
LgorICAgICAgICAvLyBOb3QgbmVlZGVkIGJlY2F1c2UgaGFzUHJvcGVydHkgYW5kIGdldCB0YWtl
IGFuIGludCBmb3IgbnVtZXJpYyBrZXkuCisKKyAgICAgICAgLy8gYi4gTGV0IGtQcmVzZW50IGJl
IEhhc1Byb3BlcnR5KE8sIFBrKS4KKyAgICAgICAgYm9vbCBrUHJlc2VudCA9IG9Mb2NhbGVzLT5o
YXNQcm9wZXJ0eShleGVjLCBrKTsKKworICAgICAgICAvLyBjLiBSZXR1cm5JZkFicnVwdChrUHJl
c2VudCkuCisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgICAgIC8vIGQuIElmIGtQcmVzZW50IGlzIHRydWUsIHRoZW4K
KyAgICAgICAgaWYgKGtQcmVzZW50KSB7CisgICAgICAgICAgICAvLyBpLiBMZXQga1ZhbHVlIGJl
IEdldChPLCBQaykuCisgICAgICAgICAgICBKU1ZhbHVlIGtWYWx1ZSA9IG9Mb2NhbGVzLT5nZXQo
ZXhlYywgayk7CisKKyAgICAgICAgICAgIC8vIGlpLiBSZXR1cm5JZkFicnVwdChrVmFsdWUpLgor
ICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgICAgICAgICAvLyBpaWkuIElmIFR5cGUoa1ZhbHVlKSBpcyBu
b3QgU3RyaW5nIG9yIE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLgorICAgICAg
ICAgICAgaWYgKCFrVmFsdWUuaXNTdHJpbmcoKSAmJiAha1ZhbHVlLmlzT2JqZWN0KCkpIHsKKyAg
ICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImxvY2FsZSB2
YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG9iamVjdCIpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gaXYuIExldCB0YWcg
YmUgVG9TdHJpbmcoa1ZhbHVlKS4KKyAgICAgICAgICAgIEpTU3RyaW5nKiB0YWcgPSBrVmFsdWUu
dG9TdHJpbmcoZXhlYyk7CisKKyAgICAgICAgICAgIC8vIHYuIFJldHVybklmQWJydXB0KHRhZyku
CisgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgICAgIC8vIHZpLiBJZiBJc1N0cnVjdHVyYWxseVZh
bGlkTGFuZ3VhZ2VUYWcodGFnKSBpcyBmYWxzZSwgdGhyb3cgYSBSYW5nZUVycm9yIGV4Y2VwdGlv
bi4KKyAgICAgICAgICAgIC8vIHZpaS4gTGV0IGNhbm9uaWNhbGl6ZWRUYWcgYmUgQ2Fub25pY2Fs
aXplTGFuZ3VhZ2VUYWcodGFnKS4KKyAgICAgICAgICAgIFN0cmluZyBjYW5vbmljYWxpemVkVGFn
ID0gY2Fub25pY2FsaXplTGFuZ3VhZ2VUYWcodGFnLT52YWx1ZShleGVjKSk7CisgICAgICAgICAg
ICBpZiAoY2Fub25pY2FsaXplZFRhZy5pc051bGwoKSkgeworICAgICAgICAgICAgICAgIGV4ZWMt
PnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBTdHJpbmc6
OmZvcm1hdCgiaW52YWxpZCBsYW5ndWFnZSB0YWc6ICVzIiwgdGFnLT52YWx1ZShleGVjKS51dGY4
KCkuZGF0YSgpKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyB2aWlpLiBJZiBjYW5vbmljYWxpemVkVGFnIGlzIG5vdCBh
biBlbGVtZW50IG9mIHNlZW4sIGFwcGVuZCBjYW5vbmljYWxpemVkVGFnIGFzIHRoZSBsYXN0IGVs
ZW1lbnQgb2Ygc2Vlbi4KKyAgICAgICAgICAgIGlmICghc2VlblNldC5jb250YWlucyhjYW5vbmlj
YWxpemVkVGFnKSkgeworICAgICAgICAgICAgICAgIHNlZW5TZXQuYWRkKGNhbm9uaWNhbGl6ZWRU
YWcpOworICAgICAgICAgICAgICAgIHNlZW4tPnB1c2goZXhlYywganNTdHJpbmcoZXhlYywgY2Fu
b25pY2FsaXplZFRhZykpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIGUu
IEluY3JlYXNlIGsgYnkgMS4KKyAgICB9CisKKyAgICByZXR1cm4gc2VlbjsKK30KKworU3RyaW5n
IGJlc3RBdmFpbGFibGVMb2NhbGUoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2Nh
bGVzLCBTdHJpbmcgbG9jYWxlKQoreworICAgIC8vIDkuMi4yIEJlc3RBdmFpbGFibGVMb2NhbGUg
KGF2YWlsYWJsZUxvY2FsZXMsIGxvY2FsZSkKKyAgICAvLyAxLiBMZXQgY2FuZGlkYXRlIGJlIGxv
Y2FsZS4KKyAgICBTdHJpbmcgY2FuZGlkYXRlID0gbG9jYWxlOworCisgICAgLy8gMi4gUmVwZWF0
CisgICAgd2hpbGUgKCFjYW5kaWRhdGUuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIGEuIElmIGF2
YWlsYWJsZUxvY2FsZXMgY29udGFpbnMgYW4gZWxlbWVudCBlcXVhbCB0byBjYW5kaWRhdGUsIHRo
ZW4gcmV0dXJuIGNhbmRpZGF0ZS4KKyAgICAgICAgaWYgKGF2YWlsYWJsZUxvY2FsZXMuY29udGFp
bnMoY2FuZGlkYXRlKSkKKyAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CisKKyAgICAgICAg
Ly8gYi4gTGV0IHBvcyBiZSB0aGUgY2hhcmFjdGVyIGluZGV4IG9mIHRoZSBsYXN0IG9jY3VycmVu
Y2Ugb2YgIi0iIChVKzAwMkQpIHdpdGhpbiBjYW5kaWRhdGUuIElmIHRoYXQgY2hhcmFjdGVyIGRv
ZXMgbm90IG9jY3VyLCByZXR1cm4gdW5kZWZpbmVkLgorICAgICAgICBzaXplX3QgcG9zID0gY2Fu
ZGlkYXRlLnJldmVyc2VGaW5kKCItIik7CisgICAgICAgIGlmIChwb3MgPT0gbm90Rm91bmQpCisg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAgICAgLy8gYy4gSWYgcG9zIOKJpSAy
IGFuZCB0aGUgY2hhcmFjdGVyICItIiBvY2N1cnMgYXQgaW5kZXggcG9zLTIgb2YgY2FuZGlkYXRl
LCB0aGVuIGRlY3JlYXNlIHBvcyBieSAyLgorICAgICAgICBpZiAocG9zID49IDIgJiYgY2FuZGlk
YXRlLnN1YnN0cmluZyhwb3MtMiwgMSkgPT0gIi0iKQorICAgICAgICAgICAgcG9zIC09IDI7CisK
KyAgICAgICAgLy8gZC4gTGV0IGNhbmRpZGF0ZSBiZSB0aGUgc3Vic3RyaW5nIG9mIGNhbmRpZGF0
ZSBmcm9tIHBvc2l0aW9uIDAsIGluY2x1c2l2ZSwgdG8gcG9zaXRpb24gcG9zLCBleGNsdXNpdmUu
CisgICAgICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZS5zdWJzdHJpbmcoMCwgcG9zKTsKKyAgICB9
CisKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK0pTQXJyYXkqIGxvb2t1cFN1cHBvcnRlZExv
Y2FsZXMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxv
Y2FsZXMsIEpTQXJyYXkqIHJlcXVlc3RlZExvY2FsZXMpCit7CisgICAgLy8gOS4yLjYgTG9va3Vw
U3VwcG9ydGVkTG9jYWxlcyAoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcykKKwor
ICAgIC8vIDEuIExldCByTG9jYWxlcyBiZSBDcmVhdGVBcnJheUZyb21MaXN0KHJlcXVlc3RlZExv
Y2FsZXMpLgorICAgIC8vIEFscmVhZHkgYW4gYXJyYXkuCisKKyAgICAvLyAyLiBMZXQgbGVuIGJl
IFRvTGVuZ3RoKEdldChyTG9jYWxlcywgImxlbmd0aCIpKS4KKyAgICB1bnNpZ25lZCBpbnQgbGVu
ID0gcmVxdWVzdGVkTG9jYWxlcy0+bGVuZ3RoKCk7CisKKyAgICAvLyAzLiBMZXQgc3Vic2V0IGJl
IGFuIGVtcHR5IExpc3QuCisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpOworICAg
IEpTQXJyYXkqIHN1YnNldCA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIGds
b2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9u
KEFycmF5V2l0aFVuZGVjaWRlZCksIDApOworICAgIGlmICghc3Vic2V0KSB7CisgICAgICAgIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorCisgICAgLy8gNC4gTGV0IGsgYmUgMC4KKyAgICAvLyA1LiBSZXBlYXQgd2hpbGUgayA8IGxl
bgorICAgIGZvciAodW5zaWduZWQgaW50IGsgPSAwOyBrIDwgbGVuOyArK2spIHsKKyAgICAgICAg
Ly8gYS4gTGV0IFBrIGJlIFRvU3RyaW5nKGspLgorICAgICAgICAvLyBiLiBMZXQgbG9jYWxlIGJl
IEdldChyTG9jYWxlcywgUGspLgorICAgICAgICBKU1ZhbHVlIGxvY2FsZSA9IHJlcXVlc3RlZExv
Y2FsZXMtPmdldChleGVjLCBrKTsKKworICAgICAgICAvLyBjLiBSZXR1cm5JZkFicnVwdChsb2Nh
bGUpLgorICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgICAgICAvLyBkLiBMZXQgbm9FeHRlbnNpb25zTG9jYWxlIGJlIHRo
ZSBTdHJpbmcgdmFsdWUgdGhhdCBpcyBsb2NhbGUgd2l0aCBhbGwgVW5pY29kZSBsb2NhbGUgZXh0
ZW5zaW9uIHNlcXVlbmNlcyByZW1vdmVkLgorICAgICAgICBKU1N0cmluZyoganNMb2NhbGUgPSBs
b2NhbGUudG9TdHJpbmcoZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIFN0cmluZyBzTG9jYWxlID0g
anNMb2NhbGUtPnZhbHVlKGV4ZWMpOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBwYXJ0czsKKyAg
ICAgICAgc0xvY2FsZS5zcGxpdCgiLSIsIHBhcnRzKTsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOworICAgICAgICBzaXplX3QgcHAgPSBwYXJ0cy5zaXplKCk7CisgICAgICAgIGlmIChw
cCA+IDApCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChwYXJ0c1swXSk7CisgICAgICAgIGZv
ciAoc2l6ZV90IHAgPSAxOyBwIDwgcHA7KSB7CisgICAgICAgICAgICBpZiAocGFydHNbcF0gPT0g
InUiKSB7CisgICAgICAgICAgICAgICAgLy8gU2tpcCB0aGUgdS0gYW5kIGFueXRoaW5nIHRoYXQg
Zm9sbG93cyB1bnRpbCBhbm90aGVyIHNpbmdsZXRvbi4KKyAgICAgICAgICAgICAgICB3aGlsZSAo
KytwIDwgcHAgJiYgcGFydHNbcF0ubGVuZ3RoKCkgPiAxKTsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCItIik7Cisg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZChwYXJ0c1twXSk7CisgICAgICAgICAgICArK3A7Cisg
ICAgICAgIH0KKyAgICAgICAgU3RyaW5nIG5vRXh0ZW5zaW9uc0xvY2FsZSA9IGJ1aWxkZXIudG9T
dHJpbmcoKTsKKworICAgICAgICAvLyBlLiBMZXQgYXZhaWxhYmxlTG9jYWxlIGJlIEJlc3RBdmFp
bGFibGVMb2NhbGUoYXZhaWxhYmxlTG9jYWxlcywgbm9FeHRlbnNpb25zTG9jYWxlKS4KKyAgICAg
ICAgU3RyaW5nIGF2YWlsYWJsZUxvY2FsZSA9IGJlc3RBdmFpbGFibGVMb2NhbGUoYXZhaWxhYmxl
TG9jYWxlcywgbm9FeHRlbnNpb25zTG9jYWxlKTsKKworICAgICAgICAvLyBmLiBJZiBhdmFpbGFi
bGVMb2NhbGUgaXMgbm90IHVuZGVmaW5lZCwgdGhlbiBhcHBlbmQgbG9jYWxlIHRvIHRoZSBlbmQg
b2Ygc3Vic2V0LgorICAgICAgICBpZiAoIWF2YWlsYWJsZUxvY2FsZS5pc051bGwoKSkKKyAgICAg
ICAgICAgIHN1YnNldC0+cHVzaChleGVjLCBsb2NhbGUpOworCisgICAgICAgIC8vIGcuIEluY3Jl
bWVudCBrIGJ5IDEuCisgICAgfQorCisgICAgLy8gNi4gUmV0dXJuIHN1YnNldC4KKyAgICByZXR1
cm4gc3Vic2V0OworfQorCitKU0FycmF5KiBiZXN0Rml0U3VwcG9ydGVkTG9jYWxlcyhFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgSlNBcnJh
eSogcmVxdWVzdGVkTG9jYWxlcykKK3sKKyAgICAvLyA5LjIuNyBCZXN0Rml0U3VwcG9ydGVkTG9j
YWxlcyAoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcykKKyAgICAvLyBGSVhNRTog
SW1wbGVtZW50IHNvbWV0aGluZyBiZXR0ZXIgdGhhbiBsb29rdXAuCisgICAgcmV0dXJuIGxvb2t1
cFN1cHBvcnRlZExvY2FsZXMoZXhlYywgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxl
cyk7Cit9CisKK0pTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgSlNBcnJheSogcmVxdWVzdGVkTG9j
YWxlcywgSlNWYWx1ZSBvcHRpb25zKQoreworICAgIC8vIDkuMi44IFN1cHBvcnRlZExvY2FsZXMg
KGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9wdGlvbnMpCisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBTdHJpbmcgbWF0Y2hlcjsKKworICAgIC8vIDEuIElmIG9wdGlv
bnMgaXMgbm90IHVuZGVmaW5lZCwgdGhlbgorICAgIGlmICghb3B0aW9ucy5pc1VuZGVmaW5lZCgp
KSB7CisgICAgICAgIC8vIGEuIExldCBtYXRjaGVyIGJlIEdldE9wdGlvbihvcHRpb25zLCAibG9j
YWxlTWF0Y2hlciIsICJzdHJpbmciLCDCqyAibG9va3VwIiwgImJlc3QgZml0IiDCuywgImJlc3Qg
Zml0IikuCisgICAgICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiBtYXRjaGVycyA9IEhhc2hTZXQ8
U3RyaW5nPih7IEFTQ0lJTGl0ZXJhbCgibG9va3VwIiksIEFTQ0lJTGl0ZXJhbCgiYmVzdCBmaXQi
KSB9KTsKKyAgICAgICAgbWF0Y2hlciA9IGdldEludGxTdHJpbmdPcHRpb24oZXhlYywgb3B0aW9u
cywgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgbWF0Y2hlcnMsICJsb2NhbGVNYXRj
aGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIiwgQVNDSUlMaXRl
cmFsKCJiZXN0IGZpdCIpKTsKKyAgICAgICAgLy8gYi4gUmV0dXJuSWZBYnJ1cHQobWF0Y2hlciku
CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIDIuIEVsc2UsIGxldCBtYXRj
aGVyIGJlICJiZXN0IGZpdCIuCisgICAgICAgIG1hdGNoZXIgPSBBU0NJSUxpdGVyYWwoImJlc3Qg
Zml0Iik7CisgICAgfQorCisgICAgSlNBcnJheSogc3VwcG9ydGVkTG9jYWxlczsKKyAgICAvLyAz
LiBJZiBtYXRjaGVyIGlzICJiZXN0IGZpdCIsCisgICAgaWYgKG1hdGNoZXIgPT0gImJlc3QgZml0
IikKKyAgICAgICAgLy8gYS4gTGV0IE1hdGNoZXJPcGVyYXRpb24gYmUgdGhlIGFic3RyYWN0IG9w
ZXJhdGlvbiBCZXN0Rml0U3VwcG9ydGVkTG9jYWxlcy4KKyAgICAgICAgLy8gNS4gTGV0IHN1cHBv
cnRlZExvY2FsZXMgYmUgTWF0Y2hlck9wZXJhdGlvbihhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0
ZWRMb2NhbGVzKS4KKyAgICAgICAgc3VwcG9ydGVkTG9jYWxlcyA9IGJlc3RGaXRTdXBwb3J0ZWRM
b2NhbGVzKGV4ZWMsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpOworCisgICAg
Ly8gNC4gRWxzZQorICAgIGVsc2UKKyAgICAgICAgLy8gYS4gTGV0IE1hdGNoZXJPcGVyYXRpb24g
YmUgdGhlIGFic3RyYWN0IG9wZXJhdGlvbiBMb29rdXBTdXBwb3J0ZWRMb2NhbGVzLgorICAgICAg
ICAvLyA1LiBMZXQgc3VwcG9ydGVkTG9jYWxlcyBiZSBNYXRjaGVyT3BlcmF0aW9uKGF2YWlsYWJs
ZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpLgorICAgICAgICBzdXBwb3J0ZWRMb2NhbGVzID0g
bG9va3VwU3VwcG9ydGVkTG9jYWxlcyhleGVjLCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRM
b2NhbGVzKTsKKworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisKKyAgICAvLyA2LiBMZXQgc3Vic2V0IGJlIENyZWF0ZUFycmF5RnJv
bUxpc3Qoc3VwcG9ydGVkTG9jYWxlcykuCisgICAgLy8gQWxyZWFkeSBhbiBhcnJheS4KKworICAg
IC8vIDcuIExldCBrZXlzIGJlIHN1YnNldC5bW093blByb3BlcnR5S2V5c11dKCkuCisgICAgUHJv
cGVydHlOYW1lQXJyYXkga2V5cyA9IFByb3BlcnR5TmFtZUFycmF5KGV4ZWMsIFByb3BlcnR5TmFt
ZU1vZGU6OlN0cmluZ3MpOworICAgIHN1cHBvcnRlZExvY2FsZXMtPmdldE93blByb3BlcnR5TmFt
ZXMoc3VwcG9ydGVkTG9jYWxlcywgZXhlYywga2V5cywgRW51bWVyYXRpb25Nb2RlKCkpOworCisg
ICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2MgPSBQcm9wZXJ0eURlc2NyaXB0b3IoKTsKKyAgICBk
ZXNjLnNldENvbmZpZ3VyYWJsZShmYWxzZSk7CisgICAgZGVzYy5zZXRXcml0YWJsZShmYWxzZSk7
CisKKyAgICAvLyA4LiBSZXBlYXQgZm9yIGVhY2ggZWxlbWVudCBQIG9mIGtleXMgaW4gTGlzdCBv
cmRlciwKKyAgICBzaXplX3QgbGVuID0ga2V5cy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICAvLyBhLiBMZXQgZGVzYyBiZSBQcm9wZXJ0eURl
c2NyaXB0b3IgeyBbW0NvbmZpZ3VyYWJsZV1dOiBmYWxzZSwgW1tXcml0YWJsZV1dOiBmYWxzZSB9
LgorICAgICAgICAvLyBDcmVhdGVkIGFib3ZlIGZvciByZXVzZS4KKworICAgICAgICAvLyBiLiBM
ZXQgc3RhdHVzIGJlIERlZmluZVByb3BlcnR5T3JUaHJvdyhzdWJzZXQsIFAsIGRlc2MpLgorICAg
ICAgICBzdXBwb3J0ZWRMb2NhbGVzLT5kZWZpbmVPd25Qcm9wZXJ0eShzdXBwb3J0ZWRMb2NhbGVz
LCBleGVjLCBrZXlzW2ldLCBkZXNjLCB0cnVlKTsKKworICAgICAgICAvLyBjLiBBc3NlcnQ6IHN0
YXR1cyBpcyBub3QgYWJydXB0IGNvbXBsZXRpb24uCisgICAgICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAg
IC8vIDkuIFJldHVybiBzdWJzZXQuCisgICAgcmV0dXJuIHN1cHBvcnRlZExvY2FsZXM7Cit9CisK
K1N0cmluZyBnZXRJbnRsU3RyaW5nT3B0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBvcHRp
b25zLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHksIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgdmFsdWVz
LCBjb25zdCBjaGFyKiBub3RGb3VuZCwgU3RyaW5nIGZhbGxiYWNrKQoreworICAgIC8vIDkuMi45
IEdldE9wdGlvbiAob3B0aW9ucywgcHJvcGVydHksIHR5cGUsIHZhbHVlcywgZmFsbGJhY2spCisg
ICAgLy8gRm9yIHR5cGU9InN0cmluZyIuCisKKyAgICAvLyAxLiBMZXQgb3B0cyBiZSBUb09iamVj
dChvcHRpb25zKS4KKyAgICBKU09iamVjdCogb3B0cyA9IG9wdGlvbnMudG9PYmplY3QoZXhlYyk7
CisKKyAgICAvLyAyLiBSZXR1cm5JZkFicnVwdChvcHRzKS4KKyAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIC8vIDMuIExldCB2YWx1
ZSBiZSBHZXQob3B0cywgcHJvcGVydHkpLgorICAgIEpTVmFsdWUgdmFsdWUgPSBvcHRzLT5nZXQo
ZXhlYywgcHJvcGVydHkpOworCisgICAgLy8gNC4gUmV0dXJuSWZBYnJ1cHQodmFsdWUpLgorICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisg
ICAgLy8gNS4gSWYgdmFsdWUgaXMgbm90IHVuZGVmaW5lZCwgdGhlbgorICAgIGlmICghdmFsdWUu
aXNVbmRlZmluZWQoKSkgeworICAgICAgICAvLyBhLiBBc3NlcnQ6IHR5cGUgaXMgImJvb2xlYW4i
IG9yICJzdHJpbmciLgorICAgICAgICAvLyBGdW5jdGlvbiBkZWRpY2F0ZWQgdG8gInN0cmluZyIu
CisKKyAgICAgICAgLy8gYy4gSWYgdHlwZSBpcyAic3RyaW5nIiwgdGhlbgorICAgICAgICAvLyBp
LiBMZXQgdmFsdWUgYmUgVG9TdHJpbmcodmFsdWUpLgorICAgICAgICBKU1N0cmluZyogc3RyaW5n
VmFsdWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKworICAgICAgICAvLyBpaS4gUmV0dXJuSWZB
YnJ1cHQodmFsdWUpLgorICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAgICAgLy8gZC4gSWYgdmFsdWVzIGlzIG5vdCB1
bmRlZmluZWQsIHRoZW4KKyAgICAgICAgLy8gaS4gSWYgdmFsdWVzIGRvZXMgbm90IGNvbnRhaW4g
YW4gZWxlbWVudCBlcXVhbCB0byB2YWx1ZSwgdGhyb3cgYSBSYW5nZUVycm9yIGV4Y2VwdGlvbi4K
KyAgICAgICAgaWYgKCF2YWx1ZXMuaXNFbXB0eSgpICYmICF2YWx1ZXMuY29udGFpbnMoc3RyaW5n
VmFsdWUtPnZhbHVlKGV4ZWMpKSkgeworICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2Vw
dGlvbihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIFN0cmluZyhub3RGb3VuZCkpKTsKKyAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGUuIFJl
dHVybiB2YWx1ZS4KKyAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlLT52YWx1ZShleGVjKTsKKyAg
ICB9CisKKyAgICAvLyA2LiBFbHNlIHJldHVybiBmYWxsYmFjay4KKyAgICByZXR1cm4gZmFsbGJh
Y2s7Cit9CisKK2Jvb2wgZ2V0SW50bEJvb2xlYW5PcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIG9wdGlvbnMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eSwgYm9vbCBmYWxsYmFjaykKK3sKKyAg
ICAvLyA5LjIuOSBHZXRPcHRpb24gKG9wdGlvbnMsIHByb3BlcnR5LCB0eXBlLCB2YWx1ZXMsIGZh
bGxiYWNrKQorICAgIC8vIEZvciB0eXBlPSJib29sZWFuIi4KKworICAgIC8vIDEuIExldCBvcHRz
IGJlIFRvT2JqZWN0KG9wdGlvbnMpLgorICAgIEpTT2JqZWN0KiBvcHRzID0gb3B0aW9ucy50b09i
amVjdChleGVjKTsKKworICAgIC8vIDIuIFJldHVybklmQWJydXB0KG9wdHMpLgorICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gMy4g
TGV0IHZhbHVlIGJlIEdldChvcHRzLCBwcm9wZXJ0eSkuCisgICAgSlNWYWx1ZSB2YWx1ZSA9IG9w
dHMtPmdldChleGVjLCBwcm9wZXJ0eSk7CisKKyAgICAvLyA0LiBSZXR1cm5JZkFicnVwdCh2YWx1
ZSkuCisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyA1LiBJZiB2YWx1ZSBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCisgICAgaWYgKCF2
YWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIC8vIGEuIEFzc2VydDogdHlwZSBpcyAiYm9v
bGVhbiIgb3IgInN0cmluZyIuCisgICAgICAgIC8vIEZ1bmN0aW9uIGRlZGljYXRlZCB0byAiYm9v
bGVhbiIuCisKKyAgICAgICAgLy8gYi4gSWYgdHlwZSBpcyAiYm9vbGVhbiIsIHRoZW4KKyAgICAg
ICAgLy8gaS4gTGV0IHZhbHVlIGJlIFRvQm9vbGVhbih2YWx1ZSkuCisgICAgICAgIGJvb2wgYm9v
bGVhblZhbHVlID0gdmFsdWUudG9Cb29sZWFuKGV4ZWMpOworCisgICAgICAgIC8vIGUuIFJldHVy
biB2YWx1ZS4KKyAgICAgICAgcmV0dXJuIGJvb2xlYW5WYWx1ZTsKKyAgICB9CisKKyAgICAvLyA2
LiBFbHNlIHJldHVybiBmYWxsYmFjay4KKyAgICByZXR1cm4gZmFsbGJhY2s7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKElOVEwpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgKaW5kZXggODM0Mjg1NDJiMmQwZmJjN2U1YjE0NGEz
NmJjYmI4NmVkZmNiYmU4Mi4uNjNkYmQxZDc2MmY5ZGY0MzU5ZmE4ZTY4M2VjMzc1ODBlNDk5MjMz
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaApAQCAtMjgs
NiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElOVEwpCiAKKyNpbmNsdWRlICJKU0NKU1ZhbHVlSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNTYs
NiArNTcsOSBAQCBwcml2YXRlOgogICAgIEludGxPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqKTsKIH07
CiAKK0pTQXJyYXkqIGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7
CitKU1ZhbHVlIHN1cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlKiwgY29uc3QgSGFzaFNldDxTdHJp
bmc+JiwgSlNBcnJheSosIEpTVmFsdWUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIEVOQUJMRShJTlRMKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCmluZGV4IGUwYzNmYWRmYzRmM2I1MmRkNmJhNzFiNzg4NmQ4ZWM2MDhk
NDQxN2UuLjdkN2ZjMjdjYmYwNTJkODMxOGE0NGI5YjU0ZWQzMjI1MzhiNjFiNTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTEz
OSw2ICsxMzksOSBAQAogCiAjaWYgRU5BQkxFKElOVEwpCiAjaW5jbHVkZSAiSW50bE9iamVjdC5o
IgorI2luY2x1ZGUgPHVuaWNvZGUvdWNvbC5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWRhdC5oPgor
I2luY2x1ZGUgPHVuaWNvZGUvdW51bS5oPgogI2VuZGlmIC8vIEVOQUJMRShJTlRMKQogCiAjaWYg
RU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCkBAIC05NTYsNiArOTU5LDUwIEBAIHZvaWQgSlNHbG9i
YWxPYmplY3Q6OnNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQogI2VuZGlmCiB9CiAKKyMgaWYg
RU5BQkxFKElOVEwpCitjb25zdCBIYXNoU2V0PFN0cmluZz4mIEpTR2xvYmFsT2JqZWN0OjppbnRs
Q29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCkKK3sKKyAgICBpZiAobV9pbnRsQ29sbGF0b3JBdmFp
bGFibGVMb2NhbGVzLmlzRW1wdHkoKSkgeworICAgICAgICBpbnQzMl90IGNvdW50ID0gdWNvbF9j
b3VudEF2YWlsYWJsZSgpOworICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7CisgICAgICAgICAgICBTdHJpbmcgc3RyID0gU3RyaW5nKHVjb2xfZ2V0QXZhaWxhYmxl
KGkpKTsKKyAgICAgICAgICAgIC8vIENoYW5nZSBmcm9tIElDVSBmb3JtYXQgdG8gQkNQNDcuCisg
ICAgICAgICAgICBzdHIucmVwbGFjZSgnXycsICctJyk7CisgICAgICAgICAgICBtX2ludGxDb2xs
YXRvckF2YWlsYWJsZUxvY2FsZXMuYWRkKHN0cik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIG1faW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlczsKK30KKworY29uc3QgSGFzaFNldDxT
dHJpbmc+JiBKU0dsb2JhbE9iamVjdDo6aW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxl
cygpCit7CisgICAgaWYgKG1faW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgaW50MzJfdCBjb3VudCA9IHVkYXRfY291bnRBdmFpbGFibGUoKTsK
KyAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAg
ICAgU3RyaW5nIHN0ciA9IFN0cmluZyh1ZGF0X2dldEF2YWlsYWJsZShpKSk7CisgICAgICAgICAg
ICAvLyBDaGFuZ2UgZnJvbSBJQ1UgZm9ybWF0IHRvIEJDUDQ3LgorICAgICAgICAgICAgc3RyLnJl
cGxhY2UoJ18nLCAnLScpOworICAgICAgICAgICAgbV9pbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFi
bGVMb2NhbGVzLmFkZChzdHIpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBtX2ludGxE
YXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXM7Cit9CisKK2NvbnN0IEhhc2hTZXQ8U3RyaW5n
PiYgSlNHbG9iYWxPYmplY3Q6OmludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkKK3sK
KyAgICBpZiAobV9pbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgaW50MzJfdCBjb3VudCA9IHVudW1fY291bnRBdmFpbGFibGUoKTsKKyAgICAgICAg
Zm9yIChpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgU3RyaW5n
IHN0ciA9IFN0cmluZyh1bnVtX2dldEF2YWlsYWJsZShpKSk7CisgICAgICAgICAgICAvLyBDaGFu
Z2UgZnJvbSBJQ1UgZm9ybWF0IHRvIEJDUDQ3LgorICAgICAgICAgICAgc3RyLnJlcGxhY2UoJ18n
LCAnLScpOworICAgICAgICAgICAgbV9pbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcy5h
ZGQoc3RyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbV9pbnRsTnVtYmVyRm9ybWF0
QXZhaWxhYmxlTG9jYWxlczsKK30KKyNlbmRpZiAvLyBFTkFCTEUoSU5UTCkKKwogdm9pZCBKU0ds
b2JhbE9iamVjdDo6cXVldWVNaWNyb3Rhc2soUGFzc1JlZlB0cjxNaWNyb3Rhc2s+IHRhc2spCiB7
CiAgICAgaWYgKGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnF1ZXVlVGFza1RvRXZlbnRMb29w
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApp
bmRleCBhNmNkYzMyMmQxY2M5MDIwZjkxNjhjN2RlNjg1ZWQxZjU2ZTE0NjM1Li5iYmYwODIyN2Jj
YWM4MDBjMGM1ZWI5NzUyNDY3ZTg1ZjEwOGIzNmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAgLTI3OSw2ICsyNzksMTIgQEAgcHJvdGVj
dGVkOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxKU0dsb2JhbE9iamVjdERlYnVnZ2FibGU+IG1faW5z
cGVjdG9yRGVidWdnYWJsZTsKICNlbmRpZgogCisjaWYgRU5BQkxFKElOVEwpCisgICAgSGFzaFNl
dDxTdHJpbmc+IG1faW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlczsKKyAgICBIYXNoU2V0PFN0
cmluZz4gbV9pbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzOworICAgIEhhc2hTZXQ8
U3RyaW5nPiBtX2ludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzOworI2VuZGlmIC8vIEVO
QUJMRShJTlRMKQorCiAgICAgUmVmUHRyPFdhdGNocG9pbnRTZXQ+IG1fbWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZFdhdGNocG9pbnQ7CiAgICAgUmVmUHRyPFdhdGNocG9pbnRTZXQ+IG1faGF2aW5nQUJh
ZFRpbWVXYXRjaHBvaW50OwogICAgIFJlZlB0cjxXYXRjaHBvaW50U2V0PiBtX3ZhckluamVjdGlv
bldhdGNocG9pbnQ7CkBAIC00OTAsNiArNDk2LDEyIEBAIHB1YmxpYzoKICAgICBKU0dsb2JhbE9i
amVjdERlYnVnZ2FibGUmIGluc3BlY3RvckRlYnVnZ2FibGUoKSB7IHJldHVybiAqbV9pbnNwZWN0
b3JEZWJ1Z2dhYmxlLmdldCgpOyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShJTlRMKQorICAgIGNv
bnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlcygpOworICAg
IGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxl
cygpOworICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bE51bWJlckZvcm1hdEF2YWlsYWJs
ZUxvY2FsZXMoKTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5UTCkKKwogICAgIHZvaWQgc2V0Q29uc29s
ZUNsaWVudChDb25zb2xlQ2xpZW50KiBjb25zb2xlQ2xpZW50KSB7IG1fY29uc29sZUNsaWVudCA9
IGNvbnNvbGVDbGllbnQ7IH0KICAgICBDb25zb2xlQ2xpZW50KiBjb25zb2xlQ2xpZW50KCkgY29u
c3QgeyByZXR1cm4gbV9jb25zb2xlQ2xpZW50OyB9CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3MjY1ZWU4NjdhOTY2OWIx
YzdkMzQxM2IyM2U4MjU0ZTkxMWQyMjA3Li42Y2YwYTMzZWYxY2Y5ZTg2NDE3MTlkMTQxNmMxMTI2
NjczMzRhZGU0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTUtMDgtMTggIEFuZHkgVmFuV2Fn
b25lciAgPHRoZXRhbGVjcmFmdGVyQGdtYWlsLmNvbT4KKworICAgICAgICBbSU5UTF0gSW1wbGVt
ZW50IHN1cHBvcnRlZExvY2FsZXNPZiBvbiBJbnRsIENvbnN0cnVjdG9ycworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTk5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBqcy9pbnRsLWNvbGxhdG9yLWV4
cGVjdGVkLnR4dDogQWRkZWQgdGVzdHMgZm9yIHN1cHBvcnRlZExvY2FsZXNPZgorICAgICAgICAq
IGpzL2ludGwtZGF0ZXRpbWVmb3JtYXQtZXhwZWN0ZWQudHh0OiBBZGRlZCB0ZXN0cyBmb3Igc3Vw
cG9ydGVkTG9jYWxlc09mCisgICAgICAgICoganMvaW50bC1udW1iZXJmb3JtYXQtZXhwZWN0ZWQu
dHh0OiBBZGRlZCB0ZXN0cyBmb3Igc3VwcG9ydGVkTG9jYWxlc09mCisgICAgICAgICoganMvc2Ny
aXB0LXRlc3RzL2ludGwtY29sbGF0b3IuanM6IEFkZGVkIHRlc3RzIGZvciBzdXBwb3J0ZWRMb2Nh
bGVzT2YKKyAgICAgICAgKiBqcy9zY3JpcHQtdGVzdHMvaW50bC1kYXRldGltZWZvcm1hdC5qczog
QWRkZWQgdGVzdHMgZm9yIHN1cHBvcnRlZExvY2FsZXNPZgorICAgICAgICAqIGpzL3NjcmlwdC10
ZXN0cy9pbnRsLW51bWJlcmZvcm1hdC5qczogQWRkZWQgdGVzdHMgZm9yIHN1cHBvcnRlZExvY2Fs
ZXNPZgorCiAyMDE1LTA4LTE4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBs
ZS5jb20+CiAKICAgICAgICAgRml4IGEgcmFyZSBmbGFraW5lc3MgaW4gc3ZnL2FuaW1hdGlvbnMv
c3ZnUHJlc2VydmVBc3BlY3RSYXRpby1hbmltYXRpb24tMS5odG1sCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9qcy9pbnRsLWNvbGxhdG9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL2lu
dGwtY29sbGF0b3ItZXhwZWN0ZWQudHh0CmluZGV4IDRkNWZkZGY3NTZmYzhmZjAwMGZlZTMwYTU3
ZGZhYTA2MjZlNDM1OTguLjU5MjQ2NTQ5MzMxOWEwODA2ODk3MjAxNjZkMjEzMWViMWQ0ZDE1ZTYg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2pzL2ludGwtY29sbGF0b3ItZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL2pzL2ludGwtY29sbGF0b3ItZXhwZWN0ZWQudHh0CkBAIC0xOCw2ICsx
OCwyOSBAQCBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSW50bC5Db2xsYXRv
ciwgJ3Byb3RvdHlwZScpLmVudW1lcmFibGUgaXMgZgogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEludGwuQ29sbGF0b3IsICdwcm90b3R5cGUnKS5jb25maWd1cmFibGUgaXMg
ZmFsc2UKIFBBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YubGVuZ3RoIGlzIDEK
IFBBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoKSBpcyBhbiBpbnN0YW5jZSBv
ZiBBcnJheQorUEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKG51bGws
ICdlbicpIGlzIFsgJ2VuJyBdCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09m
LmNhbGwoe30sICdlbicpIGlzIFsgJ2VuJyBdCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVk
TG9jYWxlc09mLmNhbGwoMSwgJ2VuJykgaXMgWyAnZW4nIF0KK1BBU1MgSW50bC5Db2xsYXRvci5z
dXBwb3J0ZWRMb2NhbGVzT2YoOSkgaXMgW10KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRM
b2NhbGVzT2YoJ2VuJykgaXMgWyAnZW4nIF0KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRM
b2NhbGVzT2YoeyBsZW5ndGg6IDIsIDE6ICdlbicsIDA6ICdlcycgfSkgaXMgWyAnZXMnLCAnZW4n
IF0KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoWyAnZW4nLCAncHQnLCAn
ZW4nLCAnZXMnIF0pIGlzIFsgJ2VuJywgJ3B0JywgJ2VzJyBdCitQQVNTIEludGwuQ29sbGF0b3Iu
c3VwcG9ydGVkTG9jYWxlc09mKCdFbi1sYVRuLXVzLXZhcmlhbnQyLXZhcmlhbnQxLTFhYmMtVS1r
by10UnVlLUEtYWEtYWFhLXgtUkVTRVJWRUQnKSBpcyBbICdlbi1MYXRuLVVTLXZhcmlhbnQyLXZh
cmlhbnQxLTFhYmMtYS1hYS1hYWEtdS1rby10cnVlLXgtUkVTRVJWRUQnIF0KK1BBU1MgSW50bC5D
b2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ25vLWJvaycpIGlzIFsgJ25iJyBdCitQQVNTIElu
dGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCd4LXNvbWUtdGhpbmcnKSBpcyBbXQorUEFT
UyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsg
bGVuZ3RoOiB7IGdldCgpIHsgdGhyb3cgRXJyb3IoJ2EnKSB9IH0gfSkpIHRocmV3IGV4Y2VwdGlv
biBFcnJvcjogYS4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoT2JqZWN0
LmNyZWF0ZShudWxsLCB7IGxlbmd0aDogeyB2YWx1ZTogMSB9LCAwOiB7IGdldCgpIHsgdGhyb3cg
RXJyb3IoJ2InKSB9IH0gfSkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogYi4KK1BBU1MgSW50bC5D
b2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoWyB7IHRvU3RyaW5nKCkgeyB0aHJvdyBFcnJvcign
YycpIH0gfSBdKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IGMuCitQQVNTIEludGwuQ29sbGF0b3Iu
c3VwcG9ydGVkTG9jYWxlc09mKFsgNSBdKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBsb2Nh
bGUgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvciBvYmplY3QuCitQQVNTIEludGwuQ29sbGF0b3Iu
c3VwcG9ydGVkTG9jYWxlc09mKCcnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxp
ZCBsYW5ndWFnZSB0YWc6IC4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2Yo
J2EnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGEu
CitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdhYmNkZWZnaGlqJykgdGhy
ZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBhYmNkZWZnaGlq
LgorUEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignIyQnKSB0aHJldyBleGNl
cHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6ICMkLgorUEFTUyBJbnRsLkNv
bGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignZW4tQC1hYmMnKSB0aHJldyBleGNlcHRpb24gUmFu
Z2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLUAtYWJjLgorUEFTUyBJbnRsLkNvbGxh
dG9yLnN1cHBvcnRlZExvY2FsZXNPZignZW4tdScpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9y
OiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tdS4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0
ZWRMb2NhbGVzT2YoJ2VuLXUta24tdHJ1ZS11LWtvLXRydWUnKSB0aHJldyBleGNlcHRpb24gUmFu
Z2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXUta24tdHJ1ZS11LWtvLXRydWUuCitQ
QVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi14JykgdGhyZXcgZXhjZXB0
aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi14LgorUEFTUyBJbnRsLkNv
bGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignZW4tKicpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVy
cm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tKi4KIFBBU1MgSW50bC5Db2xsYXRvci5wcm90
b3R5cGUuY29uc3RydWN0b3IgaXMgSW50bC5Db2xsYXRvcgogUEFTUyBJbnRsLkNvbGxhdG9yLnBy
b3RvdHlwZS5jb21wYXJlIGlzIGFuIGluc3RhbmNlIG9mIEZ1bmN0aW9uCiBQQVNTIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSW50bC5Db2xsYXRvci5wcm90b3R5cGUsICdjb21wYXJl
JykuZ2V0IGlzIGFuIGluc3RhbmNlIG9mIEZ1bmN0aW9uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9qcy9pbnRsLWRhdGV0aW1lZm9ybWF0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL2lu
dGwtZGF0ZXRpbWVmb3JtYXQtZXhwZWN0ZWQudHh0CmluZGV4IDYwMTczZmUyNzIyZWY2NWIyMjBk
ZDliZTQ3YWYxNDJiZmJmMzg0MzUuLmIyMDkwNmEwYzAyNzc4Mzg5ZmQ1OGE2NTJjYzQ1MDE0N2Q5
YzVhYjQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2pzL2ludGwtZGF0ZXRpbWVmb3JtYXQtZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2pzL2ludGwtZGF0ZXRpbWVmb3JtYXQtZXhwZWN0
ZWQudHh0CkBAIC0xOCw2ICsxOCwyOSBAQCBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSW50bC5EYXRlVGltZUZvcm1hdCwgJ3Byb3RvdHlwZScpLmVudW1lcmFibAogUEFTUyBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuRGF0ZVRpbWVGb3JtYXQsICdwcm90
b3R5cGUnKS5jb25maWd1cmFibGUgaXMgZmFsc2UKIFBBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5z
dXBwb3J0ZWRMb2NhbGVzT2YubGVuZ3RoIGlzIDEKIFBBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5z
dXBwb3J0ZWRMb2NhbGVzT2YoKSBpcyBhbiBpbnN0YW5jZSBvZiBBcnJheQorUEFTUyBJbnRsLkRh
dGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKG51bGwsICdlbicpIGlzIFsgJ2Vu
JyBdCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoe30s
ICdlbicpIGlzIFsgJ2VuJyBdCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9j
YWxlc09mLmNhbGwoMSwgJ2VuJykgaXMgWyAnZW4nIF0KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1h
dC5zdXBwb3J0ZWRMb2NhbGVzT2YoOSkgaXMgW10KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5z
dXBwb3J0ZWRMb2NhbGVzT2YoJ2VuJykgaXMgWyAnZW4nIF0KK1BBU1MgSW50bC5EYXRlVGltZUZv
cm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoeyBsZW5ndGg6IDIsIDE6ICdlbicsIDA6ICdlcycgfSkg
aXMgWyAnZXMnLCAnZW4nIF0KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2Nh
bGVzT2YoWyAnZW4nLCAncHQnLCAnZW4nLCAnZXMnIF0pIGlzIFsgJ2VuJywgJ3B0JywgJ2VzJyBd
CitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdFbi1sYVRuLXVz
LXZhcmlhbnQyLXZhcmlhbnQxLTFhYmMtVS1rby10UnVlLUEtYWEtYWFhLXgtUkVTRVJWRUQnKSBp
cyBbICdlbi1MYXRuLVVTLXZhcmlhbnQyLXZhcmlhbnQxLTFhYmMtYS1hYS1hYWEtdS1rby10cnVl
LXgtUkVTRVJWRUQnIF0KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YoJ25vLWJvaycpIGlzIFsgJ25iJyBdCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9y
dGVkTG9jYWxlc09mKCd4LXNvbWUtdGhpbmcnKSBpcyBbXQorUEFTUyBJbnRsLkRhdGVUaW1lRm9y
bWF0LnN1cHBvcnRlZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVuZ3RoOiB7IGdl
dCgpIHsgdGhyb3cgRXJyb3IoJ2EnKSB9IH0gfSkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogYS4K
K1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoT2JqZWN0LmNyZWF0
ZShudWxsLCB7IGxlbmd0aDogeyB2YWx1ZTogMSB9LCAwOiB7IGdldCgpIHsgdGhyb3cgRXJyb3Io
J2InKSB9IH0gfSkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogYi4KK1BBU1MgSW50bC5EYXRlVGlt
ZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoWyB7IHRvU3RyaW5nKCkgeyB0aHJvdyBFcnJvcign
YycpIH0gfSBdKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IGMuCitQQVNTIEludGwuRGF0ZVRpbWVG
b3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsgNSBdKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9y
OiBsb2NhbGUgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvciBvYmplY3QuCitQQVNTIEludGwuRGF0
ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCcnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VF
cnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IC4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5z
dXBwb3J0ZWRMb2NhbGVzT2YoJ2EnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxp
ZCBsYW5ndWFnZSB0YWc6IGEuCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9j
YWxlc09mKCdhYmNkZWZnaGlqJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQg
bGFuZ3VhZ2UgdGFnOiBhYmNkZWZnaGlqLgorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBv
cnRlZExvY2FsZXNPZignIyQnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBs
YW5ndWFnZSB0YWc6ICMkLgorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2Fs
ZXNPZignZW4tQC1hYmMnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5n
dWFnZSB0YWc6IGVuLUAtYWJjLgorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExv
Y2FsZXNPZignZW4tdScpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1
YWdlIHRhZzogZW4tdS4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YoJ2VuLXUta24tdHJ1ZS11LWtvLXRydWUnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjog
aW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXUta24tdHJ1ZS11LWtvLXRydWUuCitQQVNTIEludGwu
RGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi14JykgdGhyZXcgZXhjZXB0aW9u
IFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi14LgorUEFTUyBJbnRsLkRhdGVU
aW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tKicpIHRocmV3IGV4Y2VwdGlvbiBSYW5n
ZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tKi4KIFBBU1MgSW50bC5EYXRlVGltZUZv
cm1hdC5wcm90b3R5cGUuY29uc3RydWN0b3IgaXMgSW50bC5EYXRlVGltZUZvcm1hdAogUEFTUyBJ
bnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZS5mb3JtYXQgaXMgYW4gaW5zdGFuY2Ugb2YgRnVu
Y3Rpb24KIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJbnRsLkRhdGVUaW1l
Rm9ybWF0LnByb3RvdHlwZSwgJ2Zvcm1hdCcpLmdldCBpcyBhbiBpbnN0YW5jZSBvZiBGdW5jdGlv
bgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvaW50bC1udW1iZXJmb3JtYXQtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvanMvaW50bC1udW1iZXJmb3JtYXQtZXhwZWN0ZWQudHh0CmluZGV4
IDUyMTg1MWVkNjY1ZDhlNzQ4ZDFiNjkyNDY1MzQ2YjFmN2JlY2Y0ZDAuLmJmMWViOGI0MDdmZmQ2
NGI4ZTJmZjgxYmMzOTVlNDYwNjIwZGU2YWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2pzL2lu
dGwtbnVtYmVyZm9ybWF0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9qcy9pbnRsLW51
bWJlcmZvcm1hdC1leHBlY3RlZC50eHQKQEAgLTE4LDYgKzE4LDI5IEBAIFBBU1MgT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihJbnRsLk51bWJlckZvcm1hdCwgJ3Byb3RvdHlwZScpLmVu
dW1lcmFibGUKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJbnRsLk51bWJl
ckZvcm1hdCwgJ3Byb3RvdHlwZScpLmNvbmZpZ3VyYWJsZSBpcyBmYWxzZQogUEFTUyBJbnRsLk51
bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YubGVuZ3RoIGlzIDEKIFBBU1MgSW50bC5OdW1i
ZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCkgaXMgYW4gaW5zdGFuY2Ugb2YgQXJyYXkKK1BB
U1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwobnVsbCwgJ2VuJykg
aXMgWyAnZW4nIF0KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNh
bGwoe30sICdlbicpIGlzIFsgJ2VuJyBdCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRl
ZExvY2FsZXNPZi5jYWxsKDEsICdlbicpIGlzIFsgJ2VuJyBdCitQQVNTIEludGwuTnVtYmVyRm9y
bWF0LnN1cHBvcnRlZExvY2FsZXNPZig5KSBpcyBbXQorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5z
dXBwb3J0ZWRMb2NhbGVzT2YoJ2VuJykgaXMgWyAnZW4nIF0KK1BBU1MgSW50bC5OdW1iZXJGb3Jt
YXQuc3VwcG9ydGVkTG9jYWxlc09mKHsgbGVuZ3RoOiAyLCAxOiAnZW4nLCAwOiAnZXMnIH0pIGlz
IFsgJ2VzJywgJ2VuJyBdCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNP
ZihbICdlbicsICdwdCcsICdlbicsICdlcycgXSkgaXMgWyAnZW4nLCAncHQnLCAnZXMnIF0KK1BB
U1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdFbi1sYVRuLXVzLXZhcmlh
bnQyLXZhcmlhbnQxLTFhYmMtVS1rby10UnVlLUEtYWEtYWFhLXgtUkVTRVJWRUQnKSBpcyBbICdl
bi1MYXRuLVVTLXZhcmlhbnQyLXZhcmlhbnQxLTFhYmMtYS1hYS1hYWEtdS1rby10cnVlLXgtUkVT
RVJWRUQnIF0KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCduby1i
b2snKSBpcyBbICduYicgXQorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YoJ3gtc29tZS10aGluZycpIGlzIFtdCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRl
ZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVuZ3RoOiB7IGdldCgpIHsgdGhyb3cg
RXJyb3IoJ2EnKSB9IH0gfSkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogYS4KK1BBU1MgSW50bC5O
dW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKE9iamVjdC5jcmVhdGUobnVsbCwgeyBsZW5n
dGg6IHsgdmFsdWU6IDEgfSwgMDogeyBnZXQoKSB7IHRocm93IEVycm9yKCdiJykgfSB9IH0pKSB0
aHJldyBleGNlcHRpb24gRXJyb3I6IGIuCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRl
ZExvY2FsZXNPZihbIHsgdG9TdHJpbmcoKSB7IHRocm93IEVycm9yKCdjJykgfSB9IF0pIHRocmV3
IGV4Y2VwdGlvbiBFcnJvcjogYy4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9j
YWxlc09mKFsgNSBdKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBsb2NhbGUgdmFsdWUgbXVz
dCBiZSBhIHN0cmluZyBvciBvYmplY3QuCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRl
ZExvY2FsZXNPZignJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3Vh
Z2UgdGFnOiAuCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignYScp
IHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogYS4KK1BB
U1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdhYmNkZWZnaGlqJykgdGhy
ZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBhYmNkZWZnaGlq
LgorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJyMkJykgdGhyZXcg
ZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiAjJC4KK1BBU1MgSW50
bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi1ALWFiYycpIHRocmV3IGV4Y2Vw
dGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tQC1hYmMuCitQQVNTIElu
dGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tdScpIHRocmV3IGV4Y2VwdGlv
biBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tdS4KK1BBU1MgSW50bC5OdW1i
ZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi11LWtuLXRydWUtdS1rby10cnVlJykgdGhy
ZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi11LWtuLXRy
dWUtdS1rby10cnVlLgorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2Yo
J2VuLXgnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6
IGVuLXguCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tKicp
IHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tKi4K
IFBBU1MgSW50bC5OdW1iZXJGb3JtYXQucHJvdG90eXBlLmNvbnN0cnVjdG9yIGlzIEludGwuTnVt
YmVyRm9ybWF0CiBQQVNTIEludGwuTnVtYmVyRm9ybWF0LnByb3RvdHlwZS5mb3JtYXQgaXMgYW4g
aW5zdGFuY2Ugb2YgRnVuY3Rpb24KIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUsICdmb3JtYXQnKS5nZXQgaXMgYW4gaW5zdGFu
Y2Ugb2YgRnVuY3Rpb24KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9p
bnRsLWNvbGxhdG9yLmpzIGIvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2ludGwtY29sbGF0
b3IuanMKaW5kZXggNWRlMTkwZWMzMzBjOThkYjE2MmUyZWI2MzRiMWYzYTY1ZGI4OTUwOC4uMzQy
MmU5NjBkYjhiNDk2YTEwYTMxZmJmOWY2N2FiZDZkZDEzYWEwZSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvanMvc2NyaXB0LXRlc3RzL2ludGwtY29sbGF0b3IuanMKKysrIGIvTGF5b3V0VGVzdHMv
anMvc2NyaXB0LXRlc3RzL2ludGwtY29sbGF0b3IuanMKQEAgLTM1LDggKzM1LDQxIEBAIHNob3Vs
ZEJlRmFsc2UoIk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSW50bC5Db2xsYXRvciwg
J3Byb3RvdHlwZScpLmNvbmZpCiAvLyBUaGUgdmFsdWUgb2YgdGhlIGxlbmd0aCBwcm9wZXJ0eSBv
ZiB0aGUgc3VwcG9ydGVkTG9jYWxlc09mIG1ldGhvZCBpcyAxLgogc2hvdWxkQmUoIkludGwuQ29s
bGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mLmxlbmd0aCIsICIxIik7CiAKLS8vIFJldHVybnMgU3Vw
cG9ydGVkTG9jYWxlcworLy8gUmV0dXJucyBTdXBwb3J0ZWRMb2NhbGVzLgogc2hvdWxkQmVUeXBl
KCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZigpIiwgIkFycmF5Iik7CisvLyBEb2Vz
bid0IGNhcmUgYWJvdXQgYHRoaXNgLgorc2hvdWxkQmUoIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVk
TG9jYWxlc09mLmNhbGwobnVsbCwgJ2VuJykiLCAiWyAnZW4nIF0iKTsKK3Nob3VsZEJlKCJJbnRs
LkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKHt9LCAnZW4nKSIsICJbICdlbicgXSIp
Oworc2hvdWxkQmUoIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoMSwgJ2Vu
JykiLCAiWyAnZW4nIF0iKTsKKy8vIElnbm9yZXMgbm9uLW9iamVjdCwgbm9uLXN0cmluZyBsaXN0
Lgorc2hvdWxkQmUoIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKDkpIiwgIltdIik7
CisvLyBNYWtlcyBhbiBhcnJheSBvZiB0YWdzLgorc2hvdWxkQmUoIkludGwuQ29sbGF0b3Iuc3Vw
cG9ydGVkTG9jYWxlc09mKCdlbicpIiwgIlsgJ2VuJyBdIik7CisvLyBIYW5kbGVzIGFycmF5LWxp
a2Ugb2JqZWN0cy4KK3Nob3VsZEJlKCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZih7
IGxlbmd0aDogMiwgMTogJ2VuJywgMDogJ2VzJyB9KSIsICJbICdlcycsICdlbicgXSIpOworLy8g
RGVkdXBsaWNhdGVzIHRhZ3MuCitzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2Nh
bGVzT2YoWyAnZW4nLCAncHQnLCAnZW4nLCAnZXMnIF0pIiwgIlsgJ2VuJywgJ3B0JywgJ2VzJyBd
Iik7CisvLyBDYW5vbmljYWxpemVzIHRhZ3MuCitzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBw
b3J0ZWRMb2NhbGVzT2YoJ0VuLWxhVG4tdXMtdmFyaWFudDItdmFyaWFudDEtMWFiYy1VLWtvLXRS
dWUtQS1hYS1hYWEteC1SRVNFUlZFRCcpIiwgIlsgJ2VuLUxhdG4tVVMtdmFyaWFudDItdmFyaWFu
dDEtMWFiYy1hLWFhLWFhYS11LWtvLXRydWUteC1SRVNFUlZFRCcgXSIpOworLy8gUmVwbGFjZXMg
b3V0ZGF0ZWQgdGFncy4KK3Nob3VsZEJlKCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNP
Zignbm8tYm9rJykiLCAiWyAnbmInIF0iKTsKKy8vIERvZXNuJ3QgdGhyb3csIGJ1dCBpZ25vcmVz
IHByaXZhdGUgdGFncy4KK3Nob3VsZEJlKCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNP
ZigneC1zb21lLXRoaW5nJykiLCAiW10iKTsKKy8vIFRocm93cyBvbiBwcm9ibGVtcyB3aXRoIGxl
bmd0aCwgZ2V0LCBvciB0b1N0cmluZy4KK3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1cHBv
cnRlZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVuZ3RoOiB7IGdldCgpIHsgdGhy
b3cgRXJyb3IoJ2EnKSB9IH0gfSkpIiwgIidFcnJvcjogYSciKTsKK3Nob3VsZFRocm93KCJJbnRs
LkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVuZ3Ro
OiB7IHZhbHVlOiAxIH0sIDA6IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcignYicpIH0gfSB9KSkiLCAi
J0Vycm9yOiBiJyIpOworc2hvdWxkVGhyb3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxl
c09mKFsgeyB0b1N0cmluZygpIHsgdGhyb3cgRXJyb3IoJ2MnKSB9IH0gXSkiLCAiJ0Vycm9yOiBj
JyIpOworLy8gVGhyb3dzIG9uIGJhZCB0YWdzLgorc2hvdWxkVGhyb3coIkludGwuQ29sbGF0b3Iu
c3VwcG9ydGVkTG9jYWxlc09mKFsgNSBdKSIsICInVHlwZUVycm9yOiBsb2NhbGUgdmFsdWUgbXVz
dCBiZSBhIHN0cmluZyBvciBvYmplY3QnIik7CitzaG91bGRUaHJvdygiSW50bC5Db2xsYXRvci5z
dXBwb3J0ZWRMb2NhbGVzT2YoJycpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRh
ZzogJyIpOworc2hvdWxkVGhyb3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdh
JykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBhJyIpOworc2hvdWxkVGhy
b3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdhYmNkZWZnaGlqJykiLCAiJ1Jh
bmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBhYmNkZWZnaGlqJyIpOworc2hvdWxkVGhy
b3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCcjJCcpIiwgIidSYW5nZUVycm9y
OiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogIyQnIik7CitzaG91bGRUaHJvdygiSW50bC5Db2xsYXRv
ci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLUAtYWJjJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQg
bGFuZ3VhZ2UgdGFnOiBlbi1ALWFiYyciKTsKK3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1
cHBvcnRlZExvY2FsZXNPZignZW4tdScpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdl
IHRhZzogZW4tdSciKTsKK3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2Fs
ZXNPZignZW4tdS1rbi10cnVlLXUta28tdHJ1ZScpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxh
bmd1YWdlIHRhZzogZW4tdS1rbi10cnVlLXUta28tdHJ1ZSciKTsKK3Nob3VsZFRocm93KCJJbnRs
LkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignZW4teCcpIiwgIidSYW5nZUVycm9yOiBpbnZh
bGlkIGxhbmd1YWdlIHRhZzogZW4teCciKTsKK3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1
cHBvcnRlZExvY2FsZXNPZignZW4tKicpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdl
IHRhZzogZW4tKiciKTsKIAogLy8gMTAuMyBQcm9wZXJ0aWVzIG9mIHRoZSBJbnRsLkNvbGxhdG9y
IFByb3RvdHlwZSBPYmplY3QKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRl
c3RzL2ludGwtZGF0ZXRpbWVmb3JtYXQuanMgYi9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMv
aW50bC1kYXRldGltZWZvcm1hdC5qcwppbmRleCBiYzdjOWE3N2NlMjExNjJkZDJiODM3ZjU1ZmU0
ZjE3MjNjZjc4NGY4Li40OGJmZDhjYWQzMWY0NzhjYTgxOWYzZTMxOWQ2M2VlYzdjODMxZjYwIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1kYXRldGltZWZvcm1h
dC5qcworKysgYi9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1kYXRldGltZWZvcm1h
dC5qcwpAQCAtMzcsNiArMzcsMzkgQEAgc2hvdWxkQmUoIkludGwuRGF0ZVRpbWVGb3JtYXQuc3Vw
cG9ydGVkTG9jYWxlc09mLmxlbmd0aCIsICIxIik7CiAKIC8vIFJldHVybnMgU3VwcG9ydGVkTG9j
YWxlcwogc2hvdWxkQmVUeXBlKCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNP
ZigpIiwgIkFycmF5Iik7CisvLyBEb2Vzbid0IGNhcmUgYWJvdXQgYHRoaXNgLgorc2hvdWxkQmUo
IkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwobnVsbCwgJ2VuJyki
LCAiWyAnZW4nIF0iKTsKK3Nob3VsZEJlKCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExv
Y2FsZXNPZi5jYWxsKHt9LCAnZW4nKSIsICJbICdlbicgXSIpOworc2hvdWxkQmUoIkludGwuRGF0
ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoMSwgJ2VuJykiLCAiWyAnZW4nIF0i
KTsKKy8vIElnbm9yZXMgbm9uLW9iamVjdCwgbm9uLXN0cmluZyBsaXN0Lgorc2hvdWxkQmUoIklu
dGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKDkpIiwgIltdIik7CisvLyBNYWtl
cyBhbiBhcnJheSBvZiB0YWdzLgorc2hvdWxkQmUoIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9y
dGVkTG9jYWxlc09mKCdlbicpIiwgIlsgJ2VuJyBdIik7CisvLyBIYW5kbGVzIGFycmF5LWxpa2Ug
b2JqZWN0cy4KK3Nob3VsZEJlKCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNP
Zih7IGxlbmd0aDogMiwgMTogJ2VuJywgMDogJ2VzJyB9KSIsICJbICdlcycsICdlbicgXSIpOwor
Ly8gRGVkdXBsaWNhdGVzIHRhZ3MuCitzaG91bGRCZSgiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBw
b3J0ZWRMb2NhbGVzT2YoWyAnZW4nLCAncHQnLCAnZW4nLCAnZXMnIF0pIiwgIlsgJ2VuJywgJ3B0
JywgJ2VzJyBdIik7CisvLyBDYW5vbmljYWxpemVzIHRhZ3MuCitzaG91bGRCZSgiSW50bC5EYXRl
VGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ0VuLWxhVG4tdXMtdmFyaWFudDItdmFyaWFu
dDEtMWFiYy1VLWtvLXRSdWUtQS1hYS1hYWEteC1SRVNFUlZFRCcpIiwgIlsgJ2VuLUxhdG4tVVMt
dmFyaWFudDItdmFyaWFudDEtMWFiYy1hLWFhLWFhYS11LWtvLXRydWUteC1SRVNFUlZFRCcgXSIp
OworLy8gUmVwbGFjZXMgb3V0ZGF0ZWQgdGFncy4KK3Nob3VsZEJlKCJJbnRsLkRhdGVUaW1lRm9y
bWF0LnN1cHBvcnRlZExvY2FsZXNPZignbm8tYm9rJykiLCAiWyAnbmInIF0iKTsKKy8vIERvZXNu
J3QgdGhyb3csIGJ1dCBpZ25vcmVzIHByaXZhdGUgdGFncy4KK3Nob3VsZEJlKCJJbnRsLkRhdGVU
aW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZigneC1zb21lLXRoaW5nJykiLCAiW10iKTsKKy8v
IFRocm93cyBvbiBwcm9ibGVtcyB3aXRoIGxlbmd0aCwgZ2V0LCBvciB0b1N0cmluZy4KK3Nob3Vs
ZFRocm93KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihPYmplY3QuY3Jl
YXRlKG51bGwsIHsgbGVuZ3RoOiB7IGdldCgpIHsgdGhyb3cgRXJyb3IoJ2EnKSB9IH0gfSkpIiwg
IidFcnJvcjogYSciKTsKK3Nob3VsZFRocm93KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRl
ZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVuZ3RoOiB7IHZhbHVlOiAxIH0sIDA6
IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcignYicpIH0gfSB9KSkiLCAiJ0Vycm9yOiBiJyIpOworc2hv
dWxkVGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsgeyB0b1N0
cmluZygpIHsgdGhyb3cgRXJyb3IoJ2MnKSB9IH0gXSkiLCAiJ0Vycm9yOiBjJyIpOworLy8gVGhy
b3dzIG9uIGJhZCB0YWdzLgorc2hvdWxkVGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9y
dGVkTG9jYWxlc09mKFsgNSBdKSIsICInVHlwZUVycm9yOiBsb2NhbGUgdmFsdWUgbXVzdCBiZSBh
IHN0cmluZyBvciBvYmplY3QnIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRlVGltZUZvcm1hdC5z
dXBwb3J0ZWRMb2NhbGVzT2YoJycpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRh
ZzogJyIpOworc2hvdWxkVGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mKCdhJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBhJyIpOworc2hv
dWxkVGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdhYmNkZWZn
aGlqJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBhYmNkZWZnaGlqJyIp
Oworc2hvdWxkVGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCcj
JCcpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogIyQnIik7CitzaG91bGRU
aHJvdygiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLUAtYWJjJyki
LCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi1ALWFiYyciKTsKK3Nob3Vs
ZFRocm93KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tdScpIiwg
IidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tdSciKTsKK3Nob3VsZFRocm93
KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tdS1rbi10cnVlLXUt
a28tdHJ1ZScpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tdS1rbi10
cnVlLXUta28tdHJ1ZSciKTsKK3Nob3VsZFRocm93KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBv
cnRlZExvY2FsZXNPZignZW4teCcpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRh
ZzogZW4teCciKTsKK3Nob3VsZFRocm93KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExv
Y2FsZXNPZignZW4tKicpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4t
KiciKTsKIAogLy8gMTIuMyBQcm9wZXJ0aWVzIG9mIHRoZSBJbnRsLkRhdGVUaW1lRm9ybWF0IFBy
b3RvdHlwZSBPYmplY3QKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3Rz
L2ludGwtbnVtYmVyZm9ybWF0LmpzIGIvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2ludGwt
bnVtYmVyZm9ybWF0LmpzCmluZGV4IDA2NWQ5MjE1NjU0MzQyZGE3ZTRmMjMzZTYzY2Q1N2FkZmU1
OWQ0ZWIuLjdhMmNmODAwMzJkYzAwMjU4ODc4MDY0MTI1NDI5NTFlYzU2OWFjZjYgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9pbnRsLW51bWJlcmZvcm1hdC5qcworKysg
Yi9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1udW1iZXJmb3JtYXQuanMKQEAgLTM3
LDYgKzM3LDM5IEBAIHNob3VsZEJlKCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YubGVuZ3RoIiwgIjEiKTsKIAogLy8gUmV0dXJucyBTdXBwb3J0ZWRMb2NhbGVzCiBzaG91bGRC
ZVR5cGUoIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZigpIiwgIkFycmF5Iik7
CisvLyBEb2Vzbid0IGNhcmUgYWJvdXQgYHRoaXNgLgorc2hvdWxkQmUoIkludGwuTnVtYmVyRm9y
bWF0LnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKG51bGwsICdlbicpIiwgIlsgJ2VuJyBdIik7Citz
aG91bGRCZSgiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoe30sICdl
bicpIiwgIlsgJ2VuJyBdIik7CitzaG91bGRCZSgiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVk
TG9jYWxlc09mLmNhbGwoMSwgJ2VuJykiLCAiWyAnZW4nIF0iKTsKKy8vIElnbm9yZXMgbm9uLW9i
amVjdCwgbm9uLXN0cmluZyBsaXN0Lgorc2hvdWxkQmUoIkludGwuTnVtYmVyRm9ybWF0LnN1cHBv
cnRlZExvY2FsZXNPZig5KSIsICJbXSIpOworLy8gTWFrZXMgYW4gYXJyYXkgb2YgdGFncy4KK3No
b3VsZEJlKCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuJykiLCAiWyAn
ZW4nIF0iKTsKKy8vIEhhbmRsZXMgYXJyYXktbGlrZSBvYmplY3RzLgorc2hvdWxkQmUoIkludGwu
TnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZih7IGxlbmd0aDogMiwgMTogJ2VuJywgMDog
J2VzJyB9KSIsICJbICdlcycsICdlbicgXSIpOworLy8gRGVkdXBsaWNhdGVzIHRhZ3MuCitzaG91
bGRCZSgiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsgJ2VuJywgJ3B0Jywg
J2VuJywgJ2VzJyBdKSIsICJbICdlbicsICdwdCcsICdlcycgXSIpOworLy8gQ2Fub25pY2FsaXpl
cyB0YWdzLgorc2hvdWxkQmUoIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZign
RW4tbGFUbi11cy12YXJpYW50Mi12YXJpYW50MS0xYWJjLVUta28tdFJ1ZS1BLWFhLWFhYS14LVJF
U0VSVkVEJykiLCAiWyAnZW4tTGF0bi1VUy12YXJpYW50Mi12YXJpYW50MS0xYWJjLWEtYWEtYWFh
LXUta28tdHJ1ZS14LVJFU0VSVkVEJyBdIik7CisvLyBSZXBsYWNlcyBvdXRkYXRlZCB0YWdzLgor
c2hvdWxkQmUoIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignbm8tYm9rJyki
LCAiWyAnbmInIF0iKTsKKy8vIERvZXNuJ3QgdGhyb3csIGJ1dCBpZ25vcmVzIHByaXZhdGUgdGFn
cy4KK3Nob3VsZEJlKCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ3gtc29t
ZS10aGluZycpIiwgIltdIik7CisvLyBUaHJvd3Mgb24gcHJvYmxlbXMgd2l0aCBsZW5ndGgsIGdl
dCwgb3IgdG9TdHJpbmcuCitzaG91bGRUaHJvdygiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVk
TG9jYWxlc09mKE9iamVjdC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgZ2V0KCkgeyB0aHJvdyBF
cnJvcignYScpIH0gfSB9KSkiLCAiJ0Vycm9yOiBhJyIpOworc2hvdWxkVGhyb3coIkludGwuTnVt
YmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVuZ3Ro
OiB7IHZhbHVlOiAxIH0sIDA6IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcignYicpIH0gfSB9KSkiLCAi
J0Vycm9yOiBiJyIpOworc2hvdWxkVGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExv
Y2FsZXNPZihbIHsgdG9TdHJpbmcoKSB7IHRocm93IEVycm9yKCdjJykgfSB9IF0pIiwgIidFcnJv
cjogYyciKTsKKy8vIFRocm93cyBvbiBiYWQgdGFncy4KK3Nob3VsZFRocm93KCJJbnRsLk51bWJl
ckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoWyA1IF0pIiwgIidUeXBlRXJyb3I6IGxvY2FsZSB2
YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG9iamVjdCciKTsKK3Nob3VsZFRocm93KCJJbnRsLk51
bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJycpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlk
IGxhbmd1YWdlIHRhZzogJyIpOworc2hvdWxkVGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBv
cnRlZExvY2FsZXNPZignYScpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzog
YSciKTsKK3Nob3VsZFRocm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2Yo
J2FiY2RlZmdoaWonKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGFiY2Rl
ZmdoaWonIik7CitzaG91bGRUaHJvdygiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mKCcjJCcpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogIyQnIik7Citz
aG91bGRUaHJvdygiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi1ALWFi
YycpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tQC1hYmMnIik7Citz
aG91bGRUaHJvdygiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi11Jyki
LCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi11JyIpOworc2hvdWxkVGhy
b3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tdS1rbi10cnVlLXUt
a28tdHJ1ZScpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tdS1rbi10
cnVlLXUta28tdHJ1ZSciKTsKK3Nob3VsZFRocm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0
ZWRMb2NhbGVzT2YoJ2VuLXgnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6
IGVuLXgnIik7CitzaG91bGRUaHJvdygiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mKCdlbi0qJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi0qJyIp
OwogCiAvLyAxMS4zIFByb3BlcnRpZXMgb2YgdGhlIEludGwuTnVtYmVyRm9ybWF0IFByb3RvdHlw
ZSBPYmplY3QKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259382</attachid>
            <date>2015-08-19 11:34:39 -0700</date>
            <delta_ts>2015-08-29 12:40:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147599-20150819123435.patch</filename>
            <type>text/plain</type>
            <size>180511</size>
            <attacher name="Andy VanWagoner">andy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4NjQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
ZTc2MTQ5MWYyMjA4NWQ0NDI1ZjIwMDFhODFiZmYzYTgzODUyYjBjLi5hOTllNzI0NWVlNTE4ZTJm
NDY3ZGU2OWY0ODk2NGFjM2FhM2FmZTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxNS0wOC0xOSAgQW5keSBWYW5XYWdvbmVyICA8dGhldGFsZWNyYWZ0ZXJA
Z21haWwuY29tPgorCisgICAgICAgIFtJTlRMXSBJbXBsZW1lbnQgc3VwcG9ydGVkTG9jYWxlc09m
IG9uIEludGwgQ29uc3RydWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDc1OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbXBsZW1lbnRzIGFsbCBvZiB0aGUgYWJzdHJhY3Qgb3BlcmF0aW9ucyB1
c2VkIGJ5IHN1cHBvcnRlZExvY2FsZXNPZiwgZXhjZXB0IGR1cmluZyBjYW5vbmljYWxpemF0aW9u
IGl0IGRvZXMgbm90IHJlcGxhY2UgcmVkdW5kYW50IHRhZ3MsIG9yIHN1YnRhZ3Mgd2l0aCB0aGVp
ciBwcmVmZXJyZWQgdmFsdWVzLgorCisgICAgICAgICogaWN1L3VuaWNvZGUvdWNhbC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBpY3UvdW5pY29kZS91ZGF0Lmg6IEFkZGVkLgorICAgICAgICAqIGljdS91
bmljb2RlL3VtaXNjLmg6IEFkZGVkLgorICAgICAgICAqIGljdS91bmljb2RlL3VudW0uaDogQWRk
ZWQuCisgICAgICAgICogaWN1L3VuaWNvZGUvdXR5cGVzLmg6IENsZWFyIHRoZSBVX1NIT1dfQ1BM
VVNQTFVTX0FQSSBmbGFnIHRvIHByZXZlbnQgQysrIGhlYWRlcnMgZnJvbSBiZWluZyBpbmNsdWRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6IEFkZGUgbG9jYWxlTWF0
Y2hlci4KKyAgICAgICAgKiBydW50aW1lL0ludGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6SW50bENvbGxhdG9yQ29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09m
KTogSW1wbGVtZW50ZWQuCisgICAgICAgICogcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25z
dHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9y
RnVuY1N1cHBvcnRlZExvY2FsZXNPZik6IEltcGxlbWVudGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJl
ckZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZik6IEltcGxlbWVudGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmNhbm9uaWNh
bGl6ZUxhbmd1YWdlVGFnKToKKyAgICAgICAgKEpTQzo6Z2V0Q2Fub25pY2FsTGFuZ1RhZyk6Cisg
ICAgICAgIChKU0M6OmdldFByaXZhdGVVc2VMYW5nVGFnKToKKyAgICAgICAgKEpTQzo6Z2V0R3Jh
bmRmYXRoZXJlZExhbmdUYWcpOgorICAgICAgICAoSlNDOjpkZWZhdWx0TG9jYWxlKToKKyAgICAg
ICAgKEpTQzo6Y2Fub25pY2FsaXplTG9jYWxlTGlzdCk6CisgICAgICAgIChKU0M6OmJlc3RBdmFp
bGFibGVMb2NhbGUpOgorICAgICAgICAoSlNDOjpsb29rdXBTdXBwb3J0ZWRMb2NhbGVzKToKKyAg
ICAgICAgKEpTQzo6YmVzdEZpdFN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAoSlNDOjpzdXBw
b3J0ZWRMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6Z2V0SW50bFN0cmluZ09wdGlvbik6CisgICAg
ICAgIChKU0M6OmdldEludGxCb29sZWFuT3B0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0ludGxP
YmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAg
KEpTQzo6SlNHbG9iYWxPYmplY3Q6OmludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMpOiBBZGRl
ZCBsYXp5IGxvY2FsZSBsaXN0LgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW50bERh
dGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcyk6IEFkZGVkIGxhenkgbG9jYWxlIGxpc3QuCisg
ICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjppbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9j
YWxlcyk6IEFkZGVkIGxhenkgbG9jYWxlIGxpc3QuCisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oOgorCiAyMDE1LTA4LTE4ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBs
ZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogTGlua3MgZm9yIHJ1bGVzIGluIDxzdHls
ZT4gYXJlIGluY29ycmVjdCwgZG8gbm90IGFjY291bnQgZm9yIDxzdHlsZT4gb2Zmc2V0IGluIHRo
ZSBkb2N1bWVudApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2Rl
L3VjYWwuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29kZS91Y2FsLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOTk3YWYxNTNkNDM5YjRjMTMyZDRjZjBjMWU1MTgyMjY5OGIzN2IxNwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29kZS91Y2FsLmgKQEAgLTAs
MCArMSwxMjg1IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAo
QykgMTk5Ni0yMDEwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9u
IGFuZAorICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioKKyAqLworCisjaWZuZGVmIFVDQUxfSAorI2RlZmluZSBVQ0FMX0gKKworI2luY2x1ZGUg
InVuaWNvZGUvdXR5cGVzLmgiCisjaW5jbHVkZSAidW5pY29kZS91ZW51bS5oIgorI2luY2x1ZGUg
InVuaWNvZGUvdWxvYy5oIgorI2luY2x1ZGUgInVuaWNvZGUvbG9jYWxwb2ludGVyLmgiCisKKyNp
ZiAhVUNPTkZJR19OT19GT1JNQVRUSU5HCisKKy8qKgorICogXGZpbGUKKyAqIFxicmllZiBDIEFQ
STogQ2FsZW5kYXIKKyAqCisgKiA8aDI+Q2FsZW5kYXIgQyBBUEk8L2gyPgorICoKKyAqIFVDYWxl
bmRhciBDIEFQSSBpcyB1c2VkICBmb3IgY29udmVydGluZyBiZXR3ZWVuIGEgPGNvZGU+VURhdGU8
L2NvZGU+IG9iamVjdAorICogYW5kIGEgc2V0IG9mIGludGVnZXIgZmllbGRzIHN1Y2ggYXMgPGNv
ZGU+VUNBTF9ZRUFSPC9jb2RlPiwgPGNvZGU+VUNBTF9NT05USDwvY29kZT4sCisgKiA8Y29kZT5V
Q0FMX0RBWTwvY29kZT4sIDxjb2RlPlVDQUxfSE9VUjwvY29kZT4sIGFuZCBzbyBvbi4KKyAqIChB
IDxjb2RlPlVEYXRlPC9jb2RlPiBvYmplY3QgcmVwcmVzZW50cyBhIHNwZWNpZmljIGluc3RhbnQg
aW4KKyAqIHRpbWUgd2l0aCBtaWxsaXNlY29uZCBwcmVjaXNpb24uIFNlZSBVRGF0ZQorICogZm9y
IGluZm9ybWF0aW9uIGFib3V0IHRoZSA8Y29kZT5VRGF0ZTwvY29kZT4gLikKKyAqCisgKiA8cD4K
KyAqIFR5cGVzIG9mIDxjb2RlPlVDYWxlbmRhcjwvY29kZT4gaW50ZXJwcmV0IGEgPGNvZGU+VURh
dGU8L2NvZGU+CisgKiBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIG9mIGEgc3BlY2lmaWMgY2FsZW5k
YXIgc3lzdGVtLiBUaGUgVV9TVEFCTEUKKyAqIHByb3ZpZGVzIHRoZSBlbnVtIFVDYWxlbmRhclR5
cGUgd2l0aCBVQ0FMX1RSQURJVElPTkFMIGFuZAorICogVUNBTF9HUkVHT1JJQU4uCisgKiA8cD4K
KyAqIExpa2Ugb3RoZXIgbG9jYWxlLXNlbnNpdGl2ZSBDIEFQSSwgY2FsZW5kYXIgQVBJICBwcm92
aWRlcyBhCisgKiBmdW5jdGlvbiwgPGNvZGU+dWNhbF9vcGVuKCk8L2NvZGU+LCB3aGljaCByZXR1
cm5zIGEgcG9pbnRlciB0bworICogPGNvZGU+VUNhbGVuZGFyPC9jb2RlPiB3aG9zZSB0aW1lIGZp
ZWxkcyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQKKyAqIHdpdGggdGhlIGN1cnJlbnQgZGF0ZSBhbmQg
dGltZS4gV2UgbmVlZCB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mCisgKiBjYWxlbmRhciB0byBiZSBv
cGVuZWQgYW5kIHRoZSAgdGltZXpvbmVJZC4KKyAqIFxodG1sb25seTxibG9ja3F1b3RlPlxlbmRo
dG1sb25seQorICogPHByZT4KKyAqIFxjb2RlCisgKiBVQ2FsZW5kYXIgKmNhbGRlZjsKKyAqIFVD
aGFyICp0eklkOworICogVUVycm9yQ29kZSBzdGF0dXM7CisgKiB0eklkPShVQ2hhciopbWFsbG9j
KHNpemVvZihVQ2hhcikgKiAoc3RybGVuKCJQU1QiKSArMSkgKTsKKyAqIHVfdWFzdHJjcHkodHpJ
ZCwgIlBTVCIpOworICogY2FsZGVmPXVjYWxfb3Blbih0eklELCB1X3N0cmxlbih0eklEKSwgTlVM
TCwgVUNBTF9UUkFESVRJT05BTCwgJnN0YXR1cyk7CisgKiBcZW5kY29kZQorICogPC9wcmU+Cisg
KiBcaHRtbG9ubHk8L2Jsb2NrcXVvdGU+XGVuZGh0bWxvbmx5CisgKgorICogPHA+CisgKiBBIDxj
b2RlPlVDYWxlbmRhcjwvY29kZT4gb2JqZWN0IGNhbiBwcm9kdWNlIGFsbCB0aGUgdGltZSBmaWVs
ZCB2YWx1ZXMKKyAqIG5lZWRlZCB0byBpbXBsZW1lbnQgdGhlIGRhdGUtdGltZSBmb3JtYXR0aW5n
IGZvciBhIHBhcnRpY3VsYXIgbGFuZ3VhZ2UKKyAqIGFuZCBjYWxlbmRhciBzdHlsZSAoZm9yIGV4
YW1wbGUsIEphcGFuZXNlLUdyZWdvcmlhbiwgSmFwYW5lc2UtVHJhZGl0aW9uYWwpLgorICoKKyAq
IDxwPgorICogV2hlbiBjb21wdXRpbmcgYSA8Y29kZT5VRGF0ZTwvY29kZT4gZnJvbSB0aW1lIGZp
ZWxkcywgdHdvIHNwZWNpYWwgY2lyY3Vtc3RhbmNlcworICogbWF5IGFyaXNlOiB0aGVyZSBtYXkg
YmUgaW5zdWZmaWNpZW50IGluZm9ybWF0aW9uIHRvIGNvbXB1dGUgdGhlCisgKiA8Y29kZT5VRGF0
ZTwvY29kZT4gKHN1Y2ggYXMgb25seSB5ZWFyIGFuZCBtb250aCBidXQgbm8gZGF5IGluIHRoZSBt
b250aCksCisgKiBvciB0aGVyZSBtYXkgYmUgaW5jb25zaXN0ZW50IGluZm9ybWF0aW9uIChzdWNo
IGFzICJUdWVzZGF5LCBKdWx5IDE1LCAxOTk2IgorICogLS0gSnVseSAxNSwgMTk5NiBpcyBhY3R1
YWxseSBhIE1vbmRheSkuCisgKgorICogPHA+CisgKiA8c3Ryb25nPkluc3VmZmljaWVudCBpbmZv
cm1hdGlvbi48L3N0cm9uZz4gVGhlIGNhbGVuZGFyIHdpbGwgdXNlIGRlZmF1bHQKKyAqIGluZm9y
bWF0aW9uIHRvIHNwZWNpZnkgdGhlIG1pc3NpbmcgZmllbGRzLiBUaGlzIG1heSB2YXJ5IGJ5IGNh
bGVuZGFyOyBmb3IKKyAqIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIsIHRoZSBkZWZhdWx0IGZvciBh
IGZpZWxkIGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlCisgKiBzdGFydCBvZiB0aGUgZXBvY2g6
IGkuZS4sIFVDQUxfWUVBUiA9IDE5NzAsIFVDQUxfTU9OVEggPSBKQU5VQVJZLCBVQ0FMX0RBVEUg
PSAxLCBldGMuCisgKgorICogPHA+CisgKiA8c3Ryb25nPkluY29uc2lzdGVudCBpbmZvcm1hdGlv
bi48L3N0cm9uZz4gSWYgZmllbGRzIGNvbmZsaWN0LCB0aGUgY2FsZW5kYXIKKyAqIHdpbGwgZ2l2
ZSBwcmVmZXJlbmNlIHRvIGZpZWxkcyBzZXQgbW9yZSByZWNlbnRseS4gRm9yIGV4YW1wbGUsIHdo
ZW4KKyAqIGRldGVybWluaW5nIHRoZSBkYXksIHRoZSBjYWxlbmRhciB3aWxsIGxvb2sgZm9yIG9u
ZSBvZiB0aGUgZm9sbG93aW5nCisgKiBjb21iaW5hdGlvbnMgb2YgZmllbGRzLiAgVGhlIG1vc3Qg
cmVjZW50IGNvbWJpbmF0aW9uLCBhcyBkZXRlcm1pbmVkIGJ5IHRoZQorICogbW9zdCByZWNlbnRs
eSBzZXQgc2luZ2xlIGZpZWxkLCB3aWxsIGJlIHVzZWQuCisgKgorICogXGh0bWxvbmx5PGJsb2Nr
cXVvdGU+XGVuZGh0bWxvbmx5CisgKiA8cHJlPgorICogXGNvZGUKKyAqIFVDQUxfTU9OVEggKyBV
Q0FMX0RBWV9PRl9NT05USAorICogVUNBTF9NT05USCArIFVDQUxfV0VFS19PRl9NT05USCArIFVD
QUxfREFZX09GX1dFRUsKKyAqIFVDQUxfTU9OVEggKyBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRI
ICsgVUNBTF9EQVlfT0ZfV0VFSworICogVUNBTF9EQVlfT0ZfWUVBUgorICogVUNBTF9EQVlfT0Zf
V0VFSyArIFVDQUxfV0VFS19PRl9ZRUFSCisgKiBcZW5kY29kZQorICogPC9wcmU+CisgKiBcaHRt
bG9ubHk8L2Jsb2NrcXVvdGU+XGVuZGh0bWxvbmx5CisgKgorICogRm9yIHRoZSB0aW1lIG9mIGRh
eToKKyAqCisgKiBcaHRtbG9ubHk8YmxvY2txdW90ZT5cZW5kaHRtbG9ubHkKKyAqIDxwcmU+Cisg
KiBcY29kZQorICogVUNBTF9IT1VSX09GX0RBWQorICogVUNBTF9BTV9QTSArIFVDQUxfSE9VUgor
ICogXGVuZGNvZGUKKyAqIDwvcHJlPgorICogXGh0bWxvbmx5PC9ibG9ja3F1b3RlPlxlbmRodG1s
b25seQorICoKKyAqIDxwPgorICogPHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBmb3Igc29tZSBub24t
R3JlZ29yaWFuIGNhbGVuZGFycywgZGlmZmVyZW50CisgKiBmaWVsZHMgbWF5IGJlIG5lY2Vzc2Fy
eSBmb3IgY29tcGxldGUgZGlzYW1iaWd1YXRpb24uIEZvciBleGFtcGxlLCBhIGZ1bGwKKyAqIHNw
ZWNpZmljYXRpb24gb2YgdGhlIGhpc3RvcmlhbCBBcmFiaWMgYXN0cm9ub21pY2FsIGNhbGVuZGFy
IHJlcXVpcmVzIHllYXIsCisgKiBtb250aCwgZGF5LW9mLW1vbnRoIDxlbT5hbmQ8L2VtPiBkYXkt
b2Ytd2VlayBpbiBzb21lIGNhc2VzLgorICoKKyAqIDxwPgorICogPHN0cm9uZz5Ob3RlOjwvc3Ry
b25nPiBUaGVyZSBhcmUgY2VydGFpbiBwb3NzaWJsZSBhbWJpZ3VpdGllcyBpbgorICogaW50ZXJw
cmV0YXRpb24gb2YgY2VydGFpbiBzaW5ndWxhciB0aW1lcywgd2hpY2ggYXJlIHJlc29sdmVkIGlu
IHRoZQorICogZm9sbG93aW5nIHdheXM6CisgKiA8b2w+CisgKiAgICAgPGxpPiAyNDowMDowMCAi
YmVsb25ncyIgdG8gdGhlIGZvbGxvd2luZyBkYXkuIFRoYXQgaXMsCisgKiAgICAgICAgICAyMzo1
OSBvbiBEZWMgMzEsIDE5NjkgJmx0OyAyNDowMCBvbiBKYW4gMSwgMTk3MCAmbHQ7IDI0OjAxOjAw
IG9uIEphbiAxLCAxOTcwCisgKgorICogICAgIDxsaT4gQWx0aG91Z2ggaGlzdG9yaWNhbGx5IG5v
dCBwcmVjaXNlLCBtaWRuaWdodCBhbHNvIGJlbG9uZ3MgdG8gImFtIiwKKyAqICAgICAgICAgIGFu
ZCBub29uIGJlbG9uZ3MgdG8gInBtIiwgc28gb24gdGhlIHNhbWUgZGF5LAorICogICAgICAgICAg
MTI6MDAgYW0gKG1pZG5pZ2h0KSAmbHQ7IDEyOjAxIGFtLCBhbmQgMTI6MDAgcG0gKG5vb24pICZs
dDsgMTI6MDEgcG0KKyAqIDwvb2w+CisgKgorICogPHA+CisgKiBUaGUgZGF0ZSBvciB0aW1lIGZv
cm1hdCBzdHJpbmdzIGFyZSBub3QgcGFydCBvZiB0aGUgZGVmaW5pdGlvbiBvZiBhCisgKiBjYWxl
bmRhciwgYXMgdGhvc2UgbXVzdCBiZSBtb2RpZmlhYmxlIG9yIG92ZXJyaWRhYmxlIGJ5IHRoZSB1
c2VyIGF0CisgKiBydW50aW1lLiBVc2Uge0BsaW5rIERhdGVGb3JtYXR9CisgKiB0byBmb3JtYXQg
ZGF0ZXMuCisgKgorICogPHA+CisgKiA8Y29kZT5DYWxlbmRhcjwvY29kZT4gcHJvdmlkZXMgYW4g
QVBJIGZvciBmaWVsZCAicm9sbGluZyIsIHdoZXJlIGZpZWxkcworICogY2FuIGJlIGluY3JlbWVu
dGVkIG9yIGRlY3JlbWVudGVkLCBidXQgd3JhcCBhcm91bmQuIEZvciBleGFtcGxlLCByb2xsaW5n
IHRoZQorICogbW9udGggdXAgaW4gdGhlIGRhdGUgPGNvZGU+RGVjZW1iZXIgMTIsIDxiPjE5OTY8
L2I+PC9jb2RlPiByZXN1bHRzIGluCisgKiA8Y29kZT5KYW51YXJ5IDEyLCA8Yj4xOTk2PC9iPjwv
Y29kZT4uCisgKgorICogPHA+CisgKiA8Y29kZT5DYWxlbmRhcjwvY29kZT4gYWxzbyBwcm92aWRl
cyBhIGRhdGUgYXJpdGhtZXRpYyBmdW5jdGlvbiBmb3IKKyAqIGFkZGluZyB0aGUgc3BlY2lmaWVk
IChzaWduZWQpIGFtb3VudCBvZiB0aW1lIHRvIGEgcGFydGljdWxhciB0aW1lIGZpZWxkLgorICog
Rm9yIGV4YW1wbGUsIHN1YnRyYWN0aW5nIDUgZGF5cyBmcm9tIHRoZSBkYXRlIDxjb2RlPlNlcHRl
bWJlciAxMiwgMTk5NjwvY29kZT4KKyAqIHJlc3VsdHMgaW4gPGNvZGU+U2VwdGVtYmVyIDcsIDE5
OTY8L2NvZGU+LgorICoKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCisKKy8qKiBBIGNhbGVuZGFy
LgorICogIEZvciB1c2FnZSBpbiBDIHByb2dyYW1zLgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8K
K3R5cGVkZWYgdm9pZCogVUNhbGVuZGFyOworCisvKiogUG9zc2libGUgdHlwZXMgb2YgVUNhbGVu
ZGFycyAKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitlbnVtIFVDYWxlbmRhclR5cGUgeworICAv
KioKKyAgICogRGVzcGl0ZSB0aGUgbmFtZSwgVUNBTF9UUkFESVRJT05BTCBkZXNpZ25hdGVzIHRo
ZSBsb2NhbGUncyBkZWZhdWx0IGNhbGVuZGFyLAorICAgKiB3aGljaCBtYXkgYmUgdGhlIEdyZWdv
cmlhbiBjYWxlbmRhciBvciBzb21lIG90aGVyIGNhbGVuZGFyLgorICAgKiBAc3RhYmxlIElDVSAy
LjAKKyAgICovCisgIFVDQUxfVFJBRElUSU9OQUwsCisgIC8qKgorICAgKiBBIGJldHRlciBuYW1l
IGZvciBVQ0FMX1RSQURJVElPTkFMLgorICAgKiBAc3RhYmxlIElDVSA0LjIKKyAgICovCisgIFVD
QUxfREVGQVVMVCA9IFVDQUxfVFJBRElUSU9OQUwsCisgIC8qKgorICAgKiBVbmFtYmlndW91c2x5
IGRlc2lnbmF0ZXMgdGhlIEdyZWdvcmlhbiBjYWxlbmRhciBmb3IgdGhlIGxvY2FsZS4KKyAgICog
QHN0YWJsZSBJQ1UgMi4wCisgICAqLworICBVQ0FMX0dSRUdPUklBTgorfTsKKworLyoqIEBzdGFi
bGUgSUNVIDIuMCAqLwordHlwZWRlZiBlbnVtIFVDYWxlbmRhclR5cGUgVUNhbGVuZGFyVHlwZTsK
KworLyoqIFBvc3NpYmxlIGZpZWxkcyBpbiBhIFVDYWxlbmRhciAKKyAqIEBzdGFibGUgSUNVIDIu
MAorICovCitlbnVtIFVDYWxlbmRhckRhdGVGaWVsZHMgeworICAvKiogCisgICAqIEZpZWxkIG51
bWJlciBpbmRpY2F0aW5nIHRoZSBlcmEsIGUuZy4sIEFEIG9yIEJDIGluIHRoZSBHcmVnb3JpYW4g
KEp1bGlhbikgY2FsZW5kYXIuIAorICAgKiBUaGlzIGlzIGEgY2FsZW5kYXItc3BlY2lmaWMgdmFs
dWUuCisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfRVJBLAorCisgIC8qKgor
ICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUgeWVhci4gVGhpcyBpcyBhIGNhbGVuZGFy
LXNwZWNpZmljIHZhbHVlLgorICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAqLworICBVQ0FMX1lF
QVIsCisKKyAgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZSBtb250aC4gVGhp
cyBpcyBhIGNhbGVuZGFyLXNwZWNpZmljIHZhbHVlLiAKKyAgICogVGhlIGZpcnN0IG1vbnRoIG9m
IHRoZSB5ZWFyIGlzCisgICAqIDxjb2RlPkpBTlVBUlk8L2NvZGU+OyB0aGUgbGFzdCBkZXBlbmRz
IG9uIHRoZSBudW1iZXIgb2YgbW9udGhzIGluIGEgeWVhci4KKyAgICogQHNlZSAjVUNBTF9KQU5V
QVJZCisgICAqIEBzZWUgI1VDQUxfRkVCUlVBUlkKKyAgICogQHNlZSAjVUNBTF9NQVJDSAorICAg
KiBAc2VlICNVQ0FMX0FQUklMCisgICAqIEBzZWUgI1VDQUxfTUFZCisgICAqIEBzZWUgI1VDQUxf
SlVORQorICAgKiBAc2VlICNVQ0FMX0pVTFkKKyAgICogQHNlZSAjVUNBTF9BVUdVU1QKKyAgICog
QHNlZSAjVUNBTF9TRVBURU1CRVIKKyAgICogQHNlZSAjVUNBTF9PQ1RPQkVSCisgICAqIEBzZWUg
I1VDQUxfTk9WRU1CRVIKKyAgICogQHNlZSAjVUNBTF9ERUNFTUJFUgorICAgKiBAc2VlICNVQ0FM
X1VOREVDSU1CRVIKKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9NT05USCwK
KworICAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIHdlZWsgbnVt
YmVyIHdpdGhpbiB0aGUgY3VycmVudCB5ZWFyLiAgVGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIs
IGFzCisgICAqIGRlZmluZWQgYnkgPGNvZGU+VUNBTF9GSVJTVF9EQVlfT0ZfV0VFSzwvY29kZT4g
YW5kIDxjb2RlPlVDQUxfTUlOSU1BTF9EQVlTX0lOX0ZJUlNUX1dFRUs8L2NvZGU+CisgICAqIGF0
dHJpYnV0ZXMsIGhhcyB2YWx1ZSAxLiAgU3ViY2xhc3NlcyBkZWZpbmUKKyAgICogdGhlIHZhbHVl
IG9mIDxjb2RlPlVDQUxfV0VFS19PRl9ZRUFSPC9jb2RlPiBmb3IgZGF5cyBiZWZvcmUgdGhlIGZp
cnN0IHdlZWsgb2YKKyAgICogdGhlIHllYXIuCisgICAqIEBzZWUgdWNhbF9nZXRBdHRyaWJ1dGUK
KyAgICogQHNlZSB1Y2FsX3NldEF0dHJpYnV0ZQorICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAq
LworICBVQ0FMX1dFRUtfT0ZfWUVBUiwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNh
dGluZyB0aGUKKyAgICogd2VlayBudW1iZXIgd2l0aGluIHRoZSBjdXJyZW50IG1vbnRoLiAgVGhl
IGZpcnN0IHdlZWsgb2YgdGhlIG1vbnRoLCBhcworICAgKiBkZWZpbmVkIGJ5IDxjb2RlPlVDQUxf
RklSU1RfREFZX09GX1dFRUs8L2NvZGU+IGFuZCA8Y29kZT5VQ0FMX01JTklNQUxfREFZU19JTl9G
SVJTVF9XRUVLPC9jb2RlPgorICAgKiBhdHRyaWJ1dGVzLCBoYXMgdmFsdWUgMS4gIFN1YmNsYXNz
ZXMgZGVmaW5lCisgICAqIHRoZSB2YWx1ZSBvZiA8Y29kZT5XRUVLX09GX01PTlRIPC9jb2RlPiBm
b3IgZGF5cyBiZWZvcmUgdGhlIGZpcnN0IHdlZWsgb2YKKyAgICogdGhlIG1vbnRoLgorICAgKiBA
c2VlIHVjYWxfZ2V0QXR0cmlidXRlCisgICAqIEBzZWUgdWNhbF9zZXRBdHRyaWJ1dGUKKyAgICog
QHNlZSAjVUNBTF9GSVJTVF9EQVlfT0ZfV0VFSworICAgKiBAc2VlICNVQ0FMX01JTklNQUxfREFZ
U19JTl9GSVJTVF9XRUVLCisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfV0VF
S19PRl9NT05USCwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUKKyAg
ICogZGF5IG9mIHRoZSBtb250aC4gVGhpcyBpcyBhIHN5bm9ueW0gZm9yIDxjb2RlPkRBWV9PRl9N
T05USDwvY29kZT4uCisgICAqIFRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoIGhhcyB2YWx1ZSAx
LgorICAgKiBAc2VlICNVQ0FMX0RBWV9PRl9NT05USAorICAgKiBAc3RhYmxlIElDVSAyLjYgCisg
ICAqLworICBVQ0FMX0RBVEUsCisKKyAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcg
dGhlIGRheQorICAgKiBudW1iZXIgd2l0aGluIHRoZSBjdXJyZW50IHllYXIuICBUaGUgZmlyc3Qg
ZGF5IG9mIHRoZSB5ZWFyIGhhcyB2YWx1ZSAxLgorICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAq
LworICBVQ0FMX0RBWV9PRl9ZRUFSLAorCisgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0
aW5nIHRoZSBkYXkKKyAgICogb2YgdGhlIHdlZWsuICBUaGlzIGZpZWxkIHRha2VzIHZhbHVlcyA8
Y29kZT5TVU5EQVk8L2NvZGU+LAorICAgKiA8Y29kZT5NT05EQVk8L2NvZGU+LCA8Y29kZT5UVUVT
REFZPC9jb2RlPiwgPGNvZGU+V0VETkVTREFZPC9jb2RlPiwKKyAgICogPGNvZGU+VEhVUlNEQVk8
L2NvZGU+LCA8Y29kZT5GUklEQVk8L2NvZGU+LCBhbmQgPGNvZGU+U0FUVVJEQVk8L2NvZGU+Lgor
ICAgKiBAc2VlICNVQ0FMX1NVTkRBWQorICAgKiBAc2VlICNVQ0FMX01PTkRBWQorICAgKiBAc2Vl
ICNVQ0FMX1RVRVNEQVkKKyAgICogQHNlZSAjVUNBTF9XRURORVNEQVkKKyAgICogQHNlZSAjVUNB
TF9USFVSU0RBWQorICAgKiBAc2VlICNVQ0FMX0ZSSURBWQorICAgKiBAc2VlICNVQ0FMX1NBVFVS
REFZCisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfREFZX09GX1dFRUssCisK
KyAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIG9yZGluYWwgbnVt
YmVyIG9mIHRoZSBkYXkgb2YgdGhlIHdlZWsgd2l0aGluIHRoZSBjdXJyZW50IG1vbnRoLiBUb2dl
dGhlcgorICAgKiB3aXRoIHRoZSA8Y29kZT5EQVlfT0ZfV0VFSzwvY29kZT4gZmllbGQsIHRoaXMg
dW5pcXVlbHkgc3BlY2lmaWVzIGEgZGF5CisgICAqIHdpdGhpbiBhIG1vbnRoLiAgVW5saWtlIDxj
b2RlPldFRUtfT0ZfTU9OVEg8L2NvZGU+IGFuZAorICAgKiA8Y29kZT5XRUVLX09GX1lFQVI8L2Nv
ZGU+LCB0aGlzIGZpZWxkJ3MgdmFsdWUgZG9lcyA8ZW0+bm90PC9lbT4gZGVwZW5kIG9uCisgICAq
IDxjb2RlPmdldEZpcnN0RGF5T2ZXZWVrKCk8L2NvZGU+IG9yCisgICAqIDxjb2RlPmdldE1pbmlt
YWxEYXlzSW5GaXJzdFdlZWsoKTwvY29kZT4uICA8Y29kZT5EQVlfT0ZfTU9OVEggMTwvY29kZT4K
KyAgICogdGhyb3VnaCA8Y29kZT43PC9jb2RlPiBhbHdheXMgY29ycmVzcG9uZCB0byA8Y29kZT5E
QVlfT0ZfV0VFS19JTl9NT05USAorICAgKiAxPC9jb2RlPjsgPGNvZGU+ODwvY29kZT4gdGhyb3Vn
aCA8Y29kZT4xNTwvY29kZT4gY29ycmVzcG9uZCB0bworICAgKiA8Y29kZT5EQVlfT0ZfV0VFS19J
Tl9NT05USCAyPC9jb2RlPiwgYW5kIHNvIG9uLgorICAgKiA8Y29kZT5EQVlfT0ZfV0VFS19JTl9N
T05USCAwPC9jb2RlPiBpbmRpY2F0ZXMgdGhlIHdlZWsgYmVmb3JlCisgICAqIDxjb2RlPkRBWV9P
Rl9XRUVLX0lOX01PTlRIIDE8L2NvZGU+LiAgTmVnYXRpdmUgdmFsdWVzIGNvdW50IGJhY2sgZnJv
bSB0aGUKKyAgICogZW5kIG9mIHRoZSBtb250aCwgc28gdGhlIGxhc3QgU3VuZGF5IG9mIGEgbW9u
dGggaXMgc3BlY2lmaWVkIGFzCisgICAqIDxjb2RlPkRBWV9PRl9XRUVLID0gU1VOREFZLCBEQVlf
T0ZfV0VFS19JTl9NT05USCA9IC0xPC9jb2RlPi4gIEJlY2F1c2UKKyAgICogbmVnYXRpdmUgdmFs
dWVzIGNvdW50IGJhY2t3YXJkIHRoZXkgd2lsbCB1c3VhbGx5IGJlIGFsaWduZWQgZGlmZmVyZW50
bHkKKyAgICogd2l0aGluIHRoZSBtb250aCB0aGFuIHBvc2l0aXZlIHZhbHVlcy4gIEZvciBleGFt
cGxlLCBpZiBhIG1vbnRoIGhhcyAzMQorICAgKiBkYXlzLCA8Y29kZT5EQVlfT0ZfV0VFS19JTl9N
T05USCAtMTwvY29kZT4gd2lsbCBvdmVybGFwCisgICAqIDxjb2RlPkRBWV9PRl9XRUVLX0lOX01P
TlRIIDU8L2NvZGU+IGFuZCB0aGUgZW5kIG9mIDxjb2RlPjQ8L2NvZGU+LgorICAgKiBAc2VlICNV
Q0FMX0RBWV9PRl9XRUVLCisgICAqIEBzZWUgI1VDQUxfV0VFS19PRl9NT05USAorICAgKiBAc3Rh
YmxlIElDVSAyLjYgCisgICAqLworICBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRILAorCisgLyoq
CisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nCisgICAqIHdoZXRoZXIgdGhlIDxjb2RlPkhP
VVI8L2NvZGU+IGlzIGJlZm9yZSBvciBhZnRlciBub29uLgorICAgKiBFLmcuLCBhdCAxMDowNDox
NS4yNTAgUE0gdGhlIDxjb2RlPkFNX1BNPC9jb2RlPiBpcyA8Y29kZT5QTTwvY29kZT4uCisgICAq
IEBzZWUgI1VDQUxfQU0KKyAgICogQHNlZSAjVUNBTF9QTQorICAgKiBAc2VlICNVQ0FMX0hPVVIK
KyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9BTV9QTSwKKworIC8qKgorICAg
KiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUKKyAgICogaG91ciBvZiB0aGUgbW9ybmluZyBv
ciBhZnRlcm5vb24uIDxjb2RlPkhPVVI8L2NvZGU+IGlzIHVzZWQgZm9yIHRoZSAxMi1ob3VyCisg
ICAqIGNsb2NrLgorICAgKiBFLmcuLCBhdCAxMDowNDoxNS4yNTAgUE0gdGhlIDxjb2RlPkhPVVI8
L2NvZGU+IGlzIDEwLgorICAgKiBAc2VlICNVQ0FMX0FNX1BNCisgICAqIEBzZWUgI1VDQUxfSE9V
Ul9PRl9EQVkKKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9IT1VSLAorCisg
LyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZQorICAgKiBob3VyIG9mIHRoZSBk
YXkuIDxjb2RlPkhPVVJfT0ZfREFZPC9jb2RlPiBpcyB1c2VkIGZvciB0aGUgMjQtaG91ciBjbG9j
ay4KKyAgICogRS5nLiwgYXQgMTA6MDQ6MTUuMjUwIFBNIHRoZSA8Y29kZT5IT1VSX09GX0RBWTwv
Y29kZT4gaXMgMjIuCisgICAqIEBzZWUgI1VDQUxfSE9VUgorICAgKiBAc3RhYmxlIElDVSAyLjYg
CisgICAqLworICBVQ0FMX0hPVVJfT0ZfREFZLAorCisgLyoqCisgICAqIEZpZWxkIG51bWJlciBp
bmRpY2F0aW5nIHRoZQorICAgKiBtaW51dGUgd2l0aGluIHRoZSBob3VyLgorICAgKiBFLmcuLCBh
dCAxMDowNDoxNS4yNTAgUE0gdGhlIDxjb2RlPlVDQUxfTUlOVVRFPC9jb2RlPiBpcyA0LgorICAg
KiBAc3RhYmxlIElDVSAyLjYgCisgICAqLworICBVQ0FMX01JTlVURSwKKworIC8qKgorICAgKiBG
aWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUKKyAgICogc2Vjb25kIHdpdGhpbiB0aGUgbWludXRl
LgorICAgKiBFLmcuLCBhdCAxMDowNDoxNS4yNTAgUE0gdGhlIDxjb2RlPlVDQUxfU0VDT05EPC9j
b2RlPiBpcyAxNS4KKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9TRUNPTkQs
CisKKyAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIG1pbGxpc2Vj
b25kIHdpdGhpbiB0aGUgc2Vjb25kLgorICAgKiBFLmcuLCBhdCAxMDowNDoxNS4yNTAgUE0gdGhl
IDxjb2RlPlVDQUxfTUlMTElTRUNPTkQ8L2NvZGU+IGlzIDI1MC4KKyAgICogQHN0YWJsZSBJQ1Ug
Mi42IAorICAgKi8KKyAgVUNBTF9NSUxMSVNFQ09ORCwKKworIC8qKgorICAgKiBGaWVsZCBudW1i
ZXIgaW5kaWNhdGluZyB0aGUKKyAgICogcmF3IG9mZnNldCBmcm9tIEdNVCBpbiBtaWxsaXNlY29u
ZHMuCisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfWk9ORV9PRkZTRVQsCisK
KyAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIGRheWxpZ2h0IHNh
dmluZ3Mgb2Zmc2V0IGluIG1pbGxpc2Vjb25kcy4KKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAg
Ki8KKyAgVUNBTF9EU1RfT0ZGU0VULAorICAKKyAvKioKKyAgICogRmllbGQgbnVtYmVyIAorICAg
KiBpbmRpY2F0aW5nIHRoZSBleHRlbmRlZCB5ZWFyIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisgICAq
IDxjb2RlPlVDQUxfV0VFS19PRl9ZRUFSPC9jb2RlPiBmaWVsZC4gIFRoaXMgbWF5IGJlIG9uZSBn
cmVhdGVyIG9yIGxlc3MKKyAgICogdGhhbiB0aGUgdmFsdWUgb2YgPGNvZGU+VUNBTF9FWFRFTkRF
RF9ZRUFSPC9jb2RlPi4KKyAgICogQHN0YWJsZSBJQ1UgMi42CisgICAqLworICBVQ0FMX1lFQVJf
V09ZLAorCisgLyoqCisgICAqIEZpZWxkIG51bWJlciAKKyAgICogaW5kaWNhdGluZyB0aGUgbG9j
YWxpemVkIGRheSBvZiB3ZWVrLiAgVGhpcyB3aWxsIGJlIGEgdmFsdWUgZnJvbSAxCisgICAqIHRv
IDcgaW5jbHVzaXZlLCB3aXRoIDEgYmVpbmcgdGhlIGxvY2FsaXplZCBmaXJzdCBkYXkgb2YgdGhl
IHdlZWsuCisgICAqIEBzdGFibGUgSUNVIDIuNgorICAgKi8KKyAgVUNBTF9ET1dfTE9DQUwsCisK
KyAgLyoqCisgICAqIFllYXIgb2YgdGhpcyBjYWxlbmRhciBzeXN0ZW0sIGVuY29tcGFzc2luZyBh
bGwgc3VwcmEteWVhciBmaWVsZHMuIEZvciBleGFtcGxlLCAKKyAgICogaW4gR3JlZ29yaWFuL0p1
bGlhbiBjYWxlbmRhcnMsIHBvc2l0aXZlIEV4dGVuZGVkIFllYXIgdmFsdWVzIGluZGljYXRlIHll
YXJzIEFELAorICAgKiAgMSBCQyA9IDAgZXh0ZW5kZWQsIDIgQkMgPSAtMSBleHRlbmRlZCwgYW5k
IHNvIG9uLiAKKyAgICogQHN0YWJsZSBJQ1UgMi44IAorICAgKi8KKyAgVUNBTF9FWFRFTkRFRF9Z
RUFSLAorCisgLyoqCisgICAqIEZpZWxkIG51bWJlciAKKyAgICogaW5kaWNhdGluZyB0aGUgbW9k
aWZpZWQgSnVsaWFuIGRheSBudW1iZXIuICBUaGlzIGlzIGRpZmZlcmVudCBmcm9tCisgICAqIHRo
ZSBjb252ZW50aW9uYWwgSnVsaWFuIGRheSBudW1iZXIgaW4gdHdvIHJlZ2FyZHMuICBGaXJzdCwg
aXQKKyAgICogZGVtYXJjYXRlcyBkYXlzIGF0IGxvY2FsIHpvbmUgbWlkbmlnaHQsIHJhdGhlciB0
aGFuIG5vb24gR01ULgorICAgKiBTZWNvbmQsIGl0IGlzIGEgbG9jYWwgbnVtYmVyOyB0aGF0IGlz
LCBpdCBkZXBlbmRzIG9uIHRoZSBsb2NhbCB0aW1lCisgICAqIHpvbmUuICBJdCBjYW4gYmUgdGhv
dWdodCBvZiBhcyBhIHNpbmdsZSBudW1iZXIgdGhhdCBlbmNvbXBhc3NlcyBhbGwKKyAgICogdGhl
IGRhdGUtcmVsYXRlZCBmaWVsZHMuCisgICAqIEBzdGFibGUgSUNVIDIuOAorICAgKi8KKyAgVUNB
TF9KVUxJQU5fREFZLCAKKworICAvKioKKyAgICogUmFuZ2VzIGZyb20gMCB0byAyMzo1OTo1OS45
OTkgKHJlZ2FyZGxlc3Mgb2YgRFNUKS4gIFRoaXMgZmllbGQgYmVoYXZlcyA8ZW0+ZXhhY3RseTwv
ZW0+IAorICAgKiBsaWtlIGEgY29tcG9zaXRlIG9mIGFsbCB0aW1lLXJlbGF0ZWQgZmllbGRzLCBu
b3QgaW5jbHVkaW5nIHRoZSB6b25lIGZpZWxkcy4gIEFzIHN1Y2gsIAorICAgKiBpdCBhbHNvIHJl
ZmxlY3RzIGRpc2NvbnRpbnVpdGllcyBvZiB0aG9zZSBmaWVsZHMgb24gRFNUIHRyYW5zaXRpb24g
ZGF5cy4gIE9uIGEgZGF5CisgICAqIG9mIERTVCBvbnNldCwgaXQgd2lsbCBqdW1wIGZvcndhcmQu
ICBPbiBhIGRheSBvZiBEU1QgY2Vzc2F0aW9uLCBpdCB3aWxsIGp1bXAgCisgICAqIGJhY2t3YXJk
LiAgVGhpcyByZWZsZWN0cyB0aGUgZmFjdCB0aGF0IGl0IG11c3QgYmUgY29tYmluZWQgd2l0aCB0
aGUgRFNUX09GRlNFVCBmaWVsZAorICAgKiB0byBvYnRhaW4gYSB1bmlxdWUgbG9jYWwgdGltZSB2
YWx1ZS4KKyAgICogQHN0YWJsZSBJQ1UgMi44CisgICAqLworICBVQ0FMX01JTExJU0VDT05EU19J
Tl9EQVksCisKKyAgLyoqCisgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBjdXJyZW50IG1vbnRoIGlz
IGEgbGVhcCBtb250aCAoMCBvciAxKS4gU2VlIHRoZSBDaGluZXNlIGNhbGVuZGFyIGZvcgorICAg
KiBhbiBleGFtcGxlIG9mIHRoaXMuCisgICAqLworICBVQ0FMX0lTX0xFQVBfTU9OVEgsCisgIAor
ICAvKioKKyAgICogRmllbGQgY291bnQKKyAgICogQHN0YWJsZSBJQ1UgMi42CisgICAqLworICBV
Q0FMX0ZJRUxEX0NPVU5ULAorCisgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRo
ZQorICAgKiBkYXkgb2YgdGhlIG1vbnRoLiBUaGlzIGlzIGEgc3lub255bSBmb3IgPGNvZGU+VUNB
TF9EQVRFPC9jb2RlPi4KKyAgICogVGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGggaGFzIHZhbHVl
IDEuCisgICAqIEBzZWUgI1VDQUxfREFURQorICAgKiBTeW5vbnltIGZvciBVQ0FMX0RBVEUKKyAg
ICogQHN0YWJsZSBJQ1UgMi44CisgICAqKi8KKyAgVUNBTF9EQVlfT0ZfTU9OVEg9VUNBTF9EQVRF
Cit9OworCisvKiogQHN0YWJsZSBJQ1UgMi4wICovCit0eXBlZGVmIGVudW0gVUNhbGVuZGFyRGF0
ZUZpZWxkcyBVQ2FsZW5kYXJEYXRlRmllbGRzOworICAgIC8qKgorICAgICAqIFVzZWZ1bCBjb25z
dGFudCBmb3IgZGF5cyBvZiB3ZWVrLiBOb3RlOiBDYWxlbmRhciBkYXktb2Ytd2VlayBpcyAxLWJh
c2VkLiBDbGllbnRzCisgICAgICogd2hvIGNyZWF0ZSBsb2NhbGUgcmVzb3VyY2VzIGZvciB0aGUg
ZmllbGQgb2YgZmlyc3QtZGF5LW9mLXdlZWsgc2hvdWxkIGJlIGF3YXJlIG9mCisgICAgICogdGhp
cy4gRm9yIGluc3RhbmNlLCBpbiBVUyBsb2NhbGUsIGZpcnN0LWRheS1vZi13ZWVrIGlzIHNldCB0
byAxLCBpLmUuLCBVQ0FMX1NVTkRBWS4KKyAgICAgKi8KKy8qKiBQb3NzaWJsZSBkYXlzIG9mIHRo
ZSB3ZWVrIGluIGEgVUNhbGVuZGFyIAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK2VudW0gVUNh
bGVuZGFyRGF5c09mV2VlayB7CisgIC8qKiBTdW5kYXkgKi8KKyAgVUNBTF9TVU5EQVkgPSAxLAor
ICAvKiogTW9uZGF5ICovCisgIFVDQUxfTU9OREFZLAorICAvKiogVHVlc2RheSAqLworICBVQ0FM
X1RVRVNEQVksCisgIC8qKiBXZWRuZXNkYXkgKi8KKyAgVUNBTF9XRURORVNEQVksCisgIC8qKiBU
aHVyc2RheSAqLworICBVQ0FMX1RIVVJTREFZLAorICAvKiogRnJpZGF5ICovCisgIFVDQUxfRlJJ
REFZLAorICAvKiogU2F0dXJkYXkgKi8KKyAgVUNBTF9TQVRVUkRBWQorfTsKKworLyoqIEBzdGFi
bGUgSUNVIDIuMCAqLwordHlwZWRlZiBlbnVtIFVDYWxlbmRhckRheXNPZldlZWsgVUNhbGVuZGFy
RGF5c09mV2VlazsKKworLyoqIFBvc3NpYmxlIG1vbnRocyBpbiBhIFVDYWxlbmRhci4gTm90ZTog
Q2FsZW5kYXIgbW9udGggaXMgMC1iYXNlZC4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitlbnVt
IFVDYWxlbmRhck1vbnRocyB7CisgIC8qKiBKYW51YXJ5ICovCisgIFVDQUxfSkFOVUFSWSwKKyAg
LyoqIEZlYnJ1YXJ5ICovCisgIFVDQUxfRkVCUlVBUlksCisgIC8qKiBNYXJjaCAqLworICBVQ0FM
X01BUkNILAorICAvKiogQXByaWwgKi8KKyAgVUNBTF9BUFJJTCwKKyAgLyoqIE1heSAqLworICBV
Q0FMX01BWSwKKyAgLyoqIEp1bmUgKi8KKyAgVUNBTF9KVU5FLAorICAvKiogSnVseSAqLworICBV
Q0FMX0pVTFksCisgIC8qKiBBdWd1c3QgKi8KKyAgVUNBTF9BVUdVU1QsCisgIC8qKiBTZXB0ZW1i
ZXIgKi8KKyAgVUNBTF9TRVBURU1CRVIsCisgIC8qKiBPY3RvYmVyICovCisgIFVDQUxfT0NUT0JF
UiwKKyAgLyoqIE5vdmVtYmVyICovCisgIFVDQUxfTk9WRU1CRVIsCisgIC8qKiBEZWNlbWJlciAq
LworICBVQ0FMX0RFQ0VNQkVSLAorICAvKiogVmFsdWUgb2YgdGhlIDxjb2RlPlVDQUxfTU9OVEg8
L2NvZGU+IGZpZWxkIGluZGljYXRpbmcgdGhlCisgICAgKiB0aGlydGVlbnRoIG1vbnRoIG9mIHRo
ZSB5ZWFyLiBBbHRob3VnaCB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyCisgICAgKiBkb2VzIG5vdCB1
c2UgdGhpcyB2YWx1ZSwgbHVuYXIgY2FsZW5kYXJzIGRvLgorICAgICovCisgIFVDQUxfVU5ERUNJ
TUJFUgorfTsKKworLyoqIEBzdGFibGUgSUNVIDIuMCAqLwordHlwZWRlZiBlbnVtIFVDYWxlbmRh
ck1vbnRocyBVQ2FsZW5kYXJNb250aHM7CisKKy8qKiBQb3NzaWJsZSBBTS9QTSB2YWx1ZXMgaW4g
YSBVQ2FsZW5kYXIgCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworZW51bSBVQ2FsZW5kYXJBTVBN
cyB7CisgICAgLyoqIEFNICovCisgIFVDQUxfQU0sCisgIC8qKiBQTSAqLworICBVQ0FMX1BNCit9
OworCisvKiogQHN0YWJsZSBJQ1UgMi4wICovCit0eXBlZGVmIGVudW0gVUNhbGVuZGFyQU1QTXMg
VUNhbGVuZGFyQU1QTXM7CisKKy8qKgorICogQ3JlYXRlIGFuIGVudW1lcmF0aW9uIG92ZXIgYWxs
IHRpbWUgem9uZXMuCisgKgorICogQHBhcmFtIGVjIGlucHV0L291dHB1dCBlcnJvciBjb2RlCisg
KgorICogQHJldHVybiBhbiBlbnVtZXJhdGlvbiBvYmplY3QgdGhhdCB0aGUgY2FsbGVyIG11c3Qg
ZGlzcG9zZSBvZiB1c2luZworICogdWVudW1fY2xvc2UoKSwgb3IgTlVMTCB1cG9uIGZhaWx1cmUu
IEluIGNhc2Ugb2YgZmFpbHVyZSAqZWMgd2lsbAorICogaW5kaWNhdGUgdGhlIGVycm9yLgorICoK
KyAqIEBzdGFibGUgSUNVIDIuNgorICovCitVX1NUQUJMRSBVRW51bWVyYXRpb24qIFVfRVhQT1JU
MgordWNhbF9vcGVuVGltZVpvbmVzKFVFcnJvckNvZGUqIGVjKTsKKworLyoqCisgKiBDcmVhdGUg
YW4gZW51bWVyYXRpb24gb3ZlciBhbGwgdGltZSB6b25lcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdp
dmVuCisgKiBjb3VudHJ5LiBTb21lIHpvbmVzIGFyZSBhZmZpbGlhdGVkIHdpdGggbm8gY291bnRy
eSAoZS5nLiwgIlVUQyIpOworICogdGhlc2UgbWF5IGFsc28gYmUgcmV0cmlldmVkLCBhcyBhIGdy
b3VwLgorICoKKyAqIEBwYXJhbSBjb3VudHJ5IHRoZSBJU08gMzE2NiB0d28tbGV0dGVyIGNvdW50
cnkgY29kZSwgb3IgTlVMTCB0bworICogcmV0cmlldmUgem9uZXMgbm90IGFmZmlsaWF0ZWQgd2l0
aCBhbnkgY291bnRyeQorICoKKyAqIEBwYXJhbSBlYyBpbnB1dC9vdXRwdXQgZXJyb3IgY29kZQor
ICoKKyAqIEByZXR1cm4gYW4gZW51bWVyYXRpb24gb2JqZWN0IHRoYXQgdGhlIGNhbGxlciBtdXN0
IGRpc3Bvc2Ugb2YgdXNpbmcKKyAqIHVlbnVtX2Nsb3NlKCksIG9yIE5VTEwgdXBvbiBmYWlsdXJl
LiBJbiBjYXNlIG9mIGZhaWx1cmUgKmVjIHdpbGwKKyAqIGluZGljYXRlIHRoZSBlcnJvci4KKyAq
CisgKiBAc3RhYmxlIElDVSAyLjYKKyAqLworVV9TVEFCTEUgVUVudW1lcmF0aW9uKiBVX0VYUE9S
VDIKK3VjYWxfb3BlbkNvdW50cnlUaW1lWm9uZXMoY29uc3QgY2hhciogY291bnRyeSwgVUVycm9y
Q29kZSogZWMpOworCisvKioKKyAqIFJldHVybiB0aGUgZGVmYXVsdCB0aW1lIHpvbmUuIFRoZSBk
ZWZhdWx0IGlzIGRldGVybWluZWQgaW5pdGlhbGx5CisgKiBieSBxdWVyeWluZyB0aGUgaG9zdCBv
cGVyYXRpbmcgc3lzdGVtLiBJdCBtYXkgYmUgY2hhbmdlZCB3aXRoCisgKiB1Y2FsX3NldERlZmF1
bHRUaW1lWm9uZSgpIG9yIHdpdGggdGhlIEMrKyBUaW1lWm9uZSBBUEkuCisgKgorICogQHBhcmFt
IHJlc3VsdCBBIGJ1ZmZlciB0byByZWNlaXZlIHRoZSByZXN1bHQsIG9yIE5VTEwKKyAqCisgKiBA
cGFyYW0gcmVzdWx0Q2FwYWNpdHkgVGhlIGNhcGFjaXR5IG9mIHRoZSByZXN1bHQgYnVmZmVyCisg
KgorICogQHBhcmFtIGVjIGlucHV0L291dHB1dCBlcnJvciBjb2RlCisgKgorICogQHJldHVybiBU
aGUgcmVzdWx0IHN0cmluZyBsZW5ndGgsIG5vdCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nCisg
KiBudWxsCisgKgorICogQHN0YWJsZSBJQ1UgMi42CisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9F
WFBPUlQyCit1Y2FsX2dldERlZmF1bHRUaW1lWm9uZShVQ2hhciogcmVzdWx0LCBpbnQzMl90IHJl
c3VsdENhcGFjaXR5LCBVRXJyb3JDb2RlKiBlYyk7CisKKy8qKgorICogU2V0IHRoZSBkZWZhdWx0
IHRpbWUgem9uZS4KKyAqCisgKiBAcGFyYW0gem9uZUlEIG51bGwtdGVybWluYXRlZCB0aW1lIHpv
bmUgSUQKKyAqCisgKiBAcGFyYW0gZWMgaW5wdXQvb3V0cHV0IGVycm9yIGNvZGUKKyAqCisgKiBA
c3RhYmxlIElDVSAyLjYKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKK3VjYWxfc2V0RGVm
YXVsdFRpbWVab25lKGNvbnN0IFVDaGFyKiB6b25lSUQsIFVFcnJvckNvZGUqIGVjKTsKKworLyoq
CisgKiBSZXR1cm4gdGhlIGFtb3VudCBvZiB0aW1lIGluIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSBj
bG9jayBpcworICogYWR2YW5jZWQgZHVyaW5nIGRheWxpZ2h0IHNhdmluZ3MgdGltZSBmb3IgdGhl
IGdpdmVuIHRpbWUgem9uZSwgb3IKKyAqIHplcm8gaWYgdGhlIHRpbWUgem9uZSBkb2VzIG5vdCBv
YnNlcnZlIGRheWxpZ2h0IHNhdmluZ3MgdGltZS4KKyAqCisgKiBAcGFyYW0gem9uZUlEIG51bGwt
dGVybWluYXRlZCB0aW1lIHpvbmUgSUQKKyAqCisgKiBAcGFyYW0gZWMgaW5wdXQvb3V0cHV0IGVy
cm9yIGNvZGUKKyAqCisgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoZSB0
aW1lIGlzIGFkdmFuY2VkIHdpdGgKKyAqIHJlc3BlY3QgdG8gc3RhbmRhcmQgdGltZSB3aGVuIHRo
ZSBkYXlsaWdodCBzYXZpbmdzIHJ1bGVzIGFyZSBpbgorICogZWZmZWN0LiBUaGlzIGlzIGFsd2F5
cyBhIG5vbi1uZWdhdGl2ZSBudW1iZXIsIG1vc3QgY29tbW9ubHkgZWl0aGVyCisgKiAzLDYwMCww
MDAgKG9uZSBob3VyKSBvciB6ZXJvLgorICoKKyAqIEBzdGFibGUgSUNVIDIuNgorICovCitVX1NU
QUJMRSBpbnQzMl90IFVfRVhQT1JUMgordWNhbF9nZXREU1RTYXZpbmdzKGNvbnN0IFVDaGFyKiB6
b25lSUQsIFVFcnJvckNvZGUqIGVjKTsKKworLyoqCisgKiBHZXQgdGhlIGN1cnJlbnQgZGF0ZSBh
bmQgdGltZS4KKyAqIFRoZSB2YWx1ZSByZXR1cm5lZCBpcyByZXByZXNlbnRlZCBhcyBtaWxsaXNl
Y29uZHMgZnJvbSB0aGUgZXBvY2guCisgKiBAcmV0dXJuIFRoZSBjdXJyZW50IGRhdGUgYW5kIHRp
bWUuCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgVURhdGUgVV9FWFBPUlQyIAor
dWNhbF9nZXROb3codm9pZCk7CisKKy8qKgorICogT3BlbiBhIFVDYWxlbmRhci4KKyAqIEEgVUNh
bGVuZGFyIG1heSBiZSB1c2VkIHRvIGNvbnZlcnQgYSBtaWxsaXNlY29uZCB2YWx1ZSB0byBhIHll
YXIsCisgKiBtb250aCwgYW5kIGRheS4KKyAqIDxwPgorICogTm90ZTogV2hlbiB1bmtub3duIFRp
bWVab25lIElEIGlzIHNwZWNpZmllZCwgdGhlIFVDYWxlbmRhciByZXR1cm5lZAorICogYnkgdGhl
IGZ1bmN0aW9uIGlzIGluaXRpYWxpemVkIHdpdGggR01UICgiRXRjL0dNVCIpIHdpdGhvdXQgYW55
CisgKiBlcnJvcnMvd2FybmluZ3MuICBJZiB5b3Ugd2FudCB0byBjaGVjayBpZiBhIFRpbWVab25l
IElEIGlzIHZhbGlkLAorICogdXNlIHVjYWxfZ2V0Q2Fub25pY2FsVGltZVpvbmVJRCBwcmlvciB0
byB0aGlzIGZ1bmN0aW9uLgorICogCisgKiBAcGFyYW0gem9uZUlEIFRoZSBkZXNpcmVkIFRpbWVa
b25lIElELiAgSWYgMCwgdXNlIHRoZSBkZWZhdWx0IHRpbWUgem9uZS4KKyAqIEBwYXJhbSBsZW4g
VGhlIGxlbmd0aCBvZiB6b25lSUQsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyAqIEBwYXJh
bSBsb2NhbGUgVGhlIGRlc2lyZWQgbG9jYWxlCisgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBV
Q2FsZW5kYXIgdG8gb3Blbi4gVGhpcyBjYW4gYmUgVUNBTF9HUkVHT1JJQU4gdG8gb3BlbiB0aGUg
R3JlZ29yaWFuCisgKiBjYWxlbmRhciBmb3IgdGhlIGxvY2FsZSwgb3IgVUNBTF9ERUZBVUxUIHRv
IG9wZW4gdGhlIGRlZmF1bHQgY2FsZW5kYXIgZm9yIHRoZSBsb2NhbGUgKHRoZQorICogZGVmYXVs
dCBjYWxlbmRhciBtYXkgYWxzbyBiZSBHcmVnb3JpYW4pLiBUbyBvcGVuIGEgc3BlY2lmaWMgbm9u
LUdyZWdvcmlhbiBjYWxlbmRhciBmb3IgdGhlCisgKiBsb2NhbGUsIHVzZSB1bG9jX3NldEtleXdv
cmRWYWx1ZSB0byBzZXQgdGhlIHZhbHVlIG9mIHRoZSBjYWxlbmRhciBrZXl3b3JkIGZvciB0aGUg
bG9jYWxlCisgKiBhbmQgdGhlbiBwYXNzIHRoZSBsb2NhbGUgdG8gdWNhbF9vcGVuIHdpdGggVUNB
TF9ERUZBVUxUIGFzIHRoZSB0eXBlLgorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4g
VUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyAqIEByZXR1cm4gQSBwb2ludGVyIHRv
IGEgVUNhbGVuZGFyLCBvciAwIGlmIGFuIGVycm9yIG9jY3VycmVkLgorICogQHN0YWJsZSBJQ1Ug
Mi4wCisgKi8KK1VfU1RBQkxFIFVDYWxlbmRhciogVV9FWFBPUlQyIAordWNhbF9vcGVuKGNvbnN0
IFVDaGFyKiAgIHpvbmVJRCwKKyAgICAgICAgICBpbnQzMl90ICAgICAgICBsZW4sCisgICAgICAg
ICAgY29uc3QgY2hhciogICAgbG9jYWxlLAorICAgICAgICAgIFVDYWxlbmRhclR5cGUgIHR5cGUs
CisgICAgICAgICAgVUVycm9yQ29kZSogICAgc3RhdHVzKTsKKworLyoqCisgKiBDbG9zZSBhIFVD
YWxlbmRhci4KKyAqIE9uY2UgY2xvc2VkLCBhIFVDYWxlbmRhciBtYXkgbm8gbG9uZ2VyIGJlIHVz
ZWQuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gY2xvc2UuCisgKiBAc3RhYmxlIElD
VSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1Y2FsX2Nsb3NlKFVDYWxlbmRh
ciAqY2FsKTsKKworI2lmIFVfU0hPV19DUExVU1BMVVNfQVBJCisKK1VfTkFNRVNQQUNFX0JFR0lO
CisKKy8qKgorICogXGNsYXNzIExvY2FsVUNhbGVuZGFyUG9pbnRlcgorICogIlNtYXJ0IHBvaW50
ZXIiIGNsYXNzLCBjbG9zZXMgYSBVQ2FsZW5kYXIgdmlhIHVjYWxfY2xvc2UoKS4KKyAqIEZvciBt
b3N0IG1ldGhvZHMgc2VlIHRoZSBMb2NhbFBvaW50ZXJCYXNlIGJhc2UgY2xhc3MuCisgKgorICog
QHNlZSBMb2NhbFBvaW50ZXJCYXNlCisgKiBAc2VlIExvY2FsUG9pbnRlcgorICogQHN0YWJsZSBJ
Q1UgNC40CisgKi8KK1VfREVGSU5FX0xPQ0FMX09QRU5fUE9JTlRFUihMb2NhbFVDYWxlbmRhclBv
aW50ZXIsIFVDYWxlbmRhciwgdWNhbF9jbG9zZSk7CisKK1VfTkFNRVNQQUNFX0VORAorCisjZW5k
aWYKKworLyoqCisgKiBPcGVuIGEgY29weSBvZiBhIFVDYWxlbmRhci4KKyAqIFRoaXMgZnVuY3Rp
b24gcGVyZm9ybXMgYSBkZWVwIGNvcHkuCisgKiBAcGFyYW0gY2FsIFRoZSBjYWxlbmRhciB0byBj
b3B5CisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2Vp
dmUgYW55IGVycm9ycy4KKyAqIEByZXR1cm4gQSBwb2ludGVyIHRvIGEgVUNhbGVuZGFyIGlkZW50
aWNhbCB0byBjYWwuCisgKiBAc3RhYmxlIElDVSA0LjAKKyAqLworVV9TVEFCTEUgVUNhbGVuZGFy
KiBVX0VYUE9SVDIgCit1Y2FsX2Nsb25lKGNvbnN0IFVDYWxlbmRhciogY2FsLAorICAgICAgICAg
ICBVRXJyb3JDb2RlKiAgICAgIHN0YXR1cyk7CisKKy8qKgorICogU2V0IHRoZSBUaW1lWm9uZSB1
c2VkIGJ5IGEgVUNhbGVuZGFyLgorICogQSBVQ2FsZW5kYXIgdXNlcyBhIHRpbWV6b25lIGZvciBj
b252ZXJ0aW5nIGZyb20gR3JlZW53aWNoIHRpbWUgdG8gbG9jYWwgdGltZS4KKyAqIEBwYXJhbSBj
YWwgVGhlIFVDYWxlbmRhciB0byBzZXQuCisgKiBAcGFyYW0gem9uZUlEIFRoZSBkZXNpcmVkIFRp
bWVab25lIElELiAgSWYgMCwgdXNlIHRoZSBkZWZhdWx0IHRpbWUgem9uZS4KKyAqIEBwYXJhbSBs
ZW4gVGhlIGxlbmd0aCBvZiB6b25lSUQsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyAqIEBw
YXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJy
b3JzLgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAor
dWNhbF9zZXRUaW1lWm9uZShVQ2FsZW5kYXIqICAgIGNhbCwKKyAgICAgICAgICAgICAgICAgY29u
c3QgVUNoYXIqICB6b25lSUQsCisgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgbGVuLAor
ICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiAgIHN0YXR1cyk7CisKKy8qKgorICogUG9zc2li
bGUgZm9ybWF0cyBmb3IgYSBVQ2FsZW5kYXIncyBkaXNwbGF5IG5hbWUgCisgKiBAc3RhYmxlIElD
VSAyLjAKKyAqLworZW51bSBVQ2FsZW5kYXJEaXNwbGF5TmFtZVR5cGUgeworICAvKiogU3RhbmRh
cmQgZGlzcGxheSBuYW1lICovCisgIFVDQUxfU1RBTkRBUkQsCisgIC8qKiBTaG9ydCBzdGFuZGFy
ZCBkaXNwbGF5IG5hbWUgKi8KKyAgVUNBTF9TSE9SVF9TVEFOREFSRCwKKyAgLyoqIERheWxpZ2h0
IHNhdmluZ3MgZGlzcGxheSBuYW1lICovCisgIFVDQUxfRFNULAorICAvKiogU2hvcnQgZGF5bGln
aHQgc2F2aW5ncyBkaXNwbGF5IG5hbWUgKi8KKyAgVUNBTF9TSE9SVF9EU1QKK307CisKKy8qKiBA
c3RhYmxlIElDVSAyLjAgKi8KK3R5cGVkZWYgZW51bSBVQ2FsZW5kYXJEaXNwbGF5TmFtZVR5cGUg
VUNhbGVuZGFyRGlzcGxheU5hbWVUeXBlOworCisvKioKKyAqIEdldCB0aGUgZGlzcGxheSBuYW1l
IGZvciBhIFVDYWxlbmRhcidzIFRpbWVab25lLgorICogQSBkaXNwbGF5IG5hbWUgaXMgc3VpdGFi
bGUgZm9yIHByZXNlbnRhdGlvbiB0byBhIHVzZXIuCisgKiBAcGFyYW0gY2FsICAgICAgICAgIFRo
ZSBVQ2FsZW5kYXIgdG8gcXVlcnkuCisgKiBAcGFyYW0gdHlwZSAgICAgICAgIFRoZSBkZXNpcmVk
IGRpc3BsYXkgbmFtZSBmb3JtYXQ7IG9uZSBvZiBVQ0FMX1NUQU5EQVJELCBVQ0FMX1NIT1JUX1NU
QU5EQVJELAorICogICAgICAgICAgICAgICAgICAgICBVQ0FMX0RTVCwgVUNBTF9TSE9SVF9EU1QK
KyAqIEBwYXJhbSBsb2NhbGUgICAgICAgVGhlIGRlc2lyZWQgbG9jYWxlIGZvciB0aGUgZGlzcGxh
eSBuYW1lLgorICogQHBhcmFtIHJlc3VsdCAgICAgICBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8g
cmVjZWl2ZSB0aGUgZm9ybWF0dGVkIG51bWJlci4KKyAqIEBwYXJhbSByZXN1bHRMZW5ndGggVGhl
IG1heGltdW0gc2l6ZSBvZiByZXN1bHQuCisgKiBAcGFyYW0gc3RhdHVzICAgICAgIEEgcG9pbnRl
ciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworICogQHJldHVybiAgICAg
ICAgICAgICBUaGUgdG90YWwgYnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVyIHRoYW4gcmVz
dWx0TGVuZ3RoLCB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisgKiBAc3RhYmxlIElDVSAyLjAK
KyAqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1Y2FsX2dldFRpbWVab25lRGlzcGxh
eU5hbWUoY29uc3QgVUNhbGVuZGFyKiAgICAgICAgICBjYWwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVUNhbGVuZGFyRGlzcGxheU5hbWVUeXBlICB0eXBlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqICAgICAgICAgICAgICAgbG9jYWxlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFVDaGFyKiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgICAgICAgICAgcmVzdWx0
TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUqICAgICAgICAg
ICAgICAgc3RhdHVzKTsKKworLyoqCisgKiBEZXRlcm1pbmUgaWYgYSBVQ2FsZW5kYXIgaXMgY3Vy
cmVudGx5IGluIGRheWxpZ2h0IHNhdmluZ3MgdGltZS4KKyAqIERheWxpZ2h0IHNhdmluZ3MgdGlt
ZSBpcyBub3QgdXNlZCBpbiBhbGwgcGFydHMgb2YgdGhlIHdvcmxkLgorICogQHBhcmFtIGNhbCBU
aGUgVUNhbGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4g
VUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyAqIEByZXR1cm4gVFJVRSBpZiBjYWwg
aXMgY3VycmVudGx5IGluIGRheWxpZ2h0IHNhdmluZ3MgdGltZSwgRkFMU0Ugb3RoZXJ3aXNlCisg
KiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgVUJvb2wgVV9FWFBPUlQyIAordWNhbF9p
bkRheWxpZ2h0VGltZShjb25zdCBVQ2FsZW5kYXIqICBjYWwsCisgICAgICAgICAgICAgICAgICAg
IFVFcnJvckNvZGUqICAgICAgIHN0YXR1cyApOworCisvKioKKyAqIFNldHMgdGhlIEdyZWdvcmlh
bkNhbGVuZGFyIGNoYW5nZSBkYXRlLiBUaGlzIGlzIHRoZSBwb2ludCB3aGVuIHRoZSBzd2l0Y2gg
ZnJvbQorICogSnVsaWFuIGRhdGVzIHRvIEdyZWdvcmlhbiBkYXRlcyBvY2N1cnJlZC4gRGVmYXVs
dCBpcyAwMDowMDowMCBsb2NhbCB0aW1lLCBPY3RvYmVyCisgKiAxNSwgMTU4Mi4gUHJldmlvdXMg
dG8gdGhpcyB0aW1lIGFuZCBkYXRlIHdpbGwgYmUgSnVsaWFuIGRhdGVzLgorICoKKyAqIFRoaXMg
ZnVuY3Rpb24gd29ya3Mgb25seSBmb3IgR3JlZ29yaWFuIGNhbGVuZGFycy4gSWYgdGhlIFVDYWxl
bmRhciBpcyBub3QKKyAqIGFuIGluc3RhbmNlIG9mIGEgR3JlZ29yaWFuIGNhbGVuZGFyLCB0aGVu
IGEgVV9VTlNVUFBPUlRFRF9FUlJPUgorICogZXJyb3IgY29kZSBpcyBzZXQuCisgKgorICogQHBh
cmFtIGNhbCAgICAgICAgVGhlIGNhbGVuZGFyIG9iamVjdC4KKyAqIEBwYXJhbSBkYXRlICAgICAg
IFRoZSBnaXZlbiBHcmVnb3JpYW4gY3V0b3ZlciBkYXRlLgorICogQHBhcmFtIHBFcnJvckNvZGUg
UG9pbnRlciB0byBhIHN0YW5kYXJkIElDVSBlcnJvciBjb2RlLiBJdHMgaW5wdXQgdmFsdWUgbXVz
dAorICogICAgICAgICAgICAgICAgICAgcGFzcyB0aGUgVV9TVUNDRVNTKCkgdGVzdCwgb3IgZWxz
ZSB0aGUgZnVuY3Rpb24gcmV0dXJucworICogICAgICAgICAgICAgICAgICAgaW1tZWRpYXRlbHku
IENoZWNrIGZvciBVX0ZBSUxVUkUoKSBvbiBvdXRwdXQgb3IgdXNlIHdpdGgKKyAqICAgICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uIGNoYWluaW5nLiAoU2VlIFVzZXIgR3VpZGUgZm9yIGRldGFpbHMu
KQorICoKKyAqIEBzZWUgR3JlZ29yaWFuQ2FsZW5kYXI6OnNldEdyZWdvcmlhbkNoYW5nZQorICog
QHNlZSB1Y2FsX2dldEdyZWdvcmlhbkNoYW5nZQorICogQHN0YWJsZSBJQ1UgMy42CisgKi8KK1Vf
U1RBQkxFIHZvaWQgVV9FWFBPUlQyCit1Y2FsX3NldEdyZWdvcmlhbkNoYW5nZShVQ2FsZW5kYXIg
KmNhbCwgVURhdGUgZGF0ZSwgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7CisKKy8qKgorICogR2V0
cyB0aGUgR3JlZ29yaWFuIENhbGVuZGFyIGNoYW5nZSBkYXRlLiBUaGlzIGlzIHRoZSBwb2ludCB3
aGVuIHRoZSBzd2l0Y2ggZnJvbQorICogSnVsaWFuIGRhdGVzIHRvIEdyZWdvcmlhbiBkYXRlcyBv
Y2N1cnJlZC4gRGVmYXVsdCBpcyAwMDowMDowMCBsb2NhbCB0aW1lLCBPY3RvYmVyCisgKiAxNSwg
MTU4Mi4gUHJldmlvdXMgdG8gdGhpcyB0aW1lIGFuZCBkYXRlIHdpbGwgYmUgSnVsaWFuIGRhdGVz
LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd29ya3Mgb25seSBmb3IgR3JlZ29yaWFuIGNhbGVuZGFy
cy4gSWYgdGhlIFVDYWxlbmRhciBpcyBub3QKKyAqIGFuIGluc3RhbmNlIG9mIGEgR3JlZ29yaWFu
IGNhbGVuZGFyLCB0aGVuIGEgVV9VTlNVUFBPUlRFRF9FUlJPUgorICogZXJyb3IgY29kZSBpcyBz
ZXQuCisgKgorICogQHBhcmFtIGNhbCAgICAgICAgVGhlIGNhbGVuZGFyIG9iamVjdC4KKyAqIEBw
YXJhbSBwRXJyb3JDb2RlIFBvaW50ZXIgdG8gYSBzdGFuZGFyZCBJQ1UgZXJyb3IgY29kZS4gSXRz
IGlucHV0IHZhbHVlIG11c3QKKyAqICAgICAgICAgICAgICAgICAgIHBhc3MgdGhlIFVfU1VDQ0VT
UygpIHRlc3QsIG9yIGVsc2UgdGhlIGZ1bmN0aW9uIHJldHVybnMKKyAqICAgICAgICAgICAgICAg
ICAgIGltbWVkaWF0ZWx5LiBDaGVjayBmb3IgVV9GQUlMVVJFKCkgb24gb3V0cHV0IG9yIHVzZSB3
aXRoCisgKiAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjaGFpbmluZy4gKFNlZSBVc2VyIEd1
aWRlIGZvciBkZXRhaWxzLikKKyAqIEByZXR1cm4gICBUaGUgR3JlZ29yaWFuIGN1dG92ZXIgdGlt
ZSBmb3IgdGhpcyBjYWxlbmRhci4KKyAqCisgKiBAc2VlIEdyZWdvcmlhbkNhbGVuZGFyOjpnZXRH
cmVnb3JpYW5DaGFuZ2UKKyAqIEBzZWUgdWNhbF9zZXRHcmVnb3JpYW5DaGFuZ2UKKyAqIEBzdGFi
bGUgSUNVIDMuNgorICovCitVX1NUQUJMRSBVRGF0ZSBVX0VYUE9SVDIKK3VjYWxfZ2V0R3JlZ29y
aWFuQ2hhbmdlKGNvbnN0IFVDYWxlbmRhciAqY2FsLCBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsK
KworLyoqCisgKiBUeXBlcyBvZiBVQ2FsZW5kYXIgYXR0cmlidXRlcyAKKyAqIEBzdGFibGUgSUNV
IDIuMAorICovCitlbnVtIFVDYWxlbmRhckF0dHJpYnV0ZSB7CisgICAgLyoqIExlbmllbnQgcGFy
c2luZyAqLworICBVQ0FMX0xFTklFTlQsCisgIC8qKiBGaXJzdCBkYXkgb2Ygd2VlayAqLworICBV
Q0FMX0ZJUlNUX0RBWV9PRl9XRUVLLAorICAvKiogTWluaW11bSBudW1iZXIgb2YgZGF5cyBpbiBm
aXJzdCB3ZWVrICovCisgIFVDQUxfTUlOSU1BTF9EQVlTX0lOX0ZJUlNUX1dFRUsKK307CisKKy8q
KiBAc3RhYmxlIElDVSAyLjAgKi8KK3R5cGVkZWYgZW51bSBVQ2FsZW5kYXJBdHRyaWJ1dGUgVUNh
bGVuZGFyQXR0cmlidXRlOworCisvKioKKyAqIEdldCBhIG51bWVyaWMgYXR0cmlidXRlIGFzc29j
aWF0ZWQgd2l0aCBhIFVDYWxlbmRhci4KKyAqIE51bWVyaWMgYXR0cmlidXRlcyBpbmNsdWRlIHRo
ZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWssIG9yIHRoZSBtaW5pbWFsIG51bWJlcnMKKyAqIG9mIGRh
eXMgaW4gdGhlIGZpcnN0IHdlZWsgb2YgdGhlIG1vbnRoLgorICogQHBhcmFtIGNhbCBUaGUgVUNh
bGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIGF0dHIgVGhlIGRlc2lyZWQgYXR0cmlidXRlOyBv
bmUgb2YgVUNBTF9MRU5JRU5ULCBVQ0FMX0ZJUlNUX0RBWV9PRl9XRUVLLAorICogb3IgVUNBTF9N
SU5JTUFMX0RBWVNfSU5fRklSU1RfV0VFSworICogQHJldHVybiBUaGUgdmFsdWUgb2YgYXR0ci4K
KyAqIEBzZWUgdWNhbF9zZXRBdHRyaWJ1dGUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NU
QUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VjYWxfZ2V0QXR0cmlidXRlKGNvbnN0IFVDYWxlbmRh
ciogICAgY2FsLAorICAgICAgICAgICAgICAgICAgVUNhbGVuZGFyQXR0cmlidXRlICBhdHRyKTsK
KworLyoqCisgKiBTZXQgYSBudW1lcmljIGF0dHJpYnV0ZSBhc3NvY2lhdGVkIHdpdGggYSBVQ2Fs
ZW5kYXIuCisgKiBOdW1lcmljIGF0dHJpYnV0ZXMgaW5jbHVkZSB0aGUgZmlyc3QgZGF5IG9mIHRo
ZSB3ZWVrLCBvciB0aGUgbWluaW1hbCBudW1iZXJzCisgKiBvZiBkYXlzIGluIHRoZSBmaXJzdCB3
ZWVrIG9mIHRoZSBtb250aC4KKyAqIEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBzZXQuCisg
KiBAcGFyYW0gYXR0ciBUaGUgZGVzaXJlZCBhdHRyaWJ1dGU7IG9uZSBvZiBVQ0FMX0xFTklFTlQs
IFVDQUxfRklSU1RfREFZX09GX1dFRUssCisgKiBvciBVQ0FMX01JTklNQUxfREFZU19JTl9GSVJT
VF9XRUVLCisgKiBAcGFyYW0gbmV3VmFsdWUgVGhlIG5ldyB2YWx1ZSBvZiBhdHRyLgorICogQHNl
ZSB1Y2FsX2dldEF0dHJpYnV0ZQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHZv
aWQgVV9FWFBPUlQyIAordWNhbF9zZXRBdHRyaWJ1dGUoVUNhbGVuZGFyKiAgICAgICAgICBjYWws
CisgICAgICAgICAgICAgICAgICBVQ2FsZW5kYXJBdHRyaWJ1dGUgIGF0dHIsCisgICAgICAgICAg
ICAgICAgICBpbnQzMl90ICAgICAgICAgICAgIG5ld1ZhbHVlKTsKKworLyoqCisgKiBHZXQgYSBs
b2NhbGUgZm9yIHdoaWNoIGNhbGVuZGFycyBhcmUgYXZhaWxhYmxlLgorICogQSBVQ2FsZW5kYXIg
aW4gYSBsb2NhbGUgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnRhaW4gdGhlIGNv
cnJlY3QKKyAqIGRheSBhbmQgbW9udGggbmFtZXMgZm9yIHRoZSBsb2NhbGUuCisgKiBAcGFyYW0g
bG9jYWxlSW5kZXggVGhlIGluZGV4IG9mIHRoZSBkZXNpcmVkIGxvY2FsZS4KKyAqIEByZXR1cm4g
QSBsb2NhbGUgZm9yIHdoaWNoIGNhbGVuZGFycyBhcmUgYXZhaWxhYmxlLCBvciAwIGlmIG5vbmUu
CisgKiBAc2VlIHVjYWxfY291bnRBdmFpbGFibGUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitV
X1NUQUJMRSBjb25zdCBjaGFyKiBVX0VYUE9SVDIgCit1Y2FsX2dldEF2YWlsYWJsZShpbnQzMl90
IGxvY2FsZUluZGV4KTsKKworLyoqCisgKiBEZXRlcm1pbmUgaG93IG1hbnkgbG9jYWxlcyBoYXZl
IGNhbGVuZGFycyBhdmFpbGFibGUuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG1vc3QgdXNlZnVsIGFz
IGRldGVybWluaW5nIHRoZSBsb29wIGVuZGluZyBjb25kaXRpb24gZm9yCisgKiBjYWxscyB0byBc
cmVmIHVjYWxfZ2V0QXZhaWxhYmxlLgorICogQHJldHVybiBUaGUgbnVtYmVyIG9mIGxvY2FsZXMg
Zm9yIHdoaWNoIGNhbGVuZGFycyBhcmUgYXZhaWxhYmxlLgorICogQHNlZSB1Y2FsX2dldEF2YWls
YWJsZQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQy
IAordWNhbF9jb3VudEF2YWlsYWJsZSh2b2lkKTsKKworLyoqCisgKiBHZXQgYSBVQ2FsZW5kYXIn
cyBjdXJyZW50IHRpbWUgaW4gbWlsbGlzLgorICogVGhlIHRpbWUgaXMgcmVwcmVzZW50ZWQgYXMg
bWlsbGlzZWNvbmRzIGZyb20gdGhlIGVwb2NoLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFy
IHRvIHF1ZXJ5LgorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0
byByZWNlaXZlIGFueSBlcnJvcnMKKyAqIEByZXR1cm4gVGhlIGNhbGVuZGFyJ3MgY3VycmVudCB0
aW1lIGluIG1pbGxpcy4KKyAqIEBzZWUgdWNhbF9zZXRNaWxsaXMKKyAqIEBzZWUgdWNhbF9zZXRE
YXRlCisgKiBAc2VlIHVjYWxfc2V0RGF0ZVRpbWUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitV
X1NUQUJMRSBVRGF0ZSBVX0VYUE9SVDIgCit1Y2FsX2dldE1pbGxpcyhjb25zdCBVQ2FsZW5kYXIq
ICBjYWwsCisgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiAgICAgICBzdGF0dXMpOworCisvKioK
KyAqIFNldCBhIFVDYWxlbmRhcidzIGN1cnJlbnQgdGltZSBpbiBtaWxsaXMuCisgKiBUaGUgdGlt
ZSBpcyByZXByZXNlbnRlZCBhcyBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZXBvY2guCisgKiBAcGFy
YW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gc2V0LgorICogQHBhcmFtIGRhdGVUaW1lIFRoZSBkZXNp
cmVkIGRhdGUgYW5kIHRpbWUuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJy
b3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworICogQHNlZSB1Y2FsX2dldE1pbGxpcworICog
QHNlZSB1Y2FsX3NldERhdGUKKyAqIEBzZWUgdWNhbF9zZXREYXRlVGltZQorICogQHN0YWJsZSBJ
Q1UgMi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWNhbF9zZXRNaWxsaXMoVUNh
bGVuZGFyKiAgIGNhbCwKKyAgICAgICAgICAgICAgIFVEYXRlICAgICAgICBkYXRlVGltZSwKKyAg
ICAgICAgICAgICAgIFVFcnJvckNvZGUqICBzdGF0dXMgKTsKKworLyoqCisgKiBTZXQgYSBVQ2Fs
ZW5kYXIncyBjdXJyZW50IGRhdGUuCisgKiBUaGUgZGF0ZSBpcyByZXByZXNlbnRlZCBhcyBhIHNl
cmllcyBvZiAzMi1iaXQgaW50ZWdlcnMuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8g
c2V0LgorICogQHBhcmFtIHllYXIgVGhlIGRlc2lyZWQgeWVhci4KKyAqIEBwYXJhbSBtb250aCBU
aGUgZGVzaXJlZCBtb250aDsgb25lIG9mIFVDQUxfSkFOVUFSWSwgVUNBTF9GRUJSVUFSWSwgVUNB
TF9NQVJDSCwgVUNBTF9BUFJJTCwgVUNBTF9NQVksCisgKiBVQ0FMX0pVTkUsIFVDQUxfSlVMWSwg
VUNBTF9BVUdVU1QsIFVDQUxfU0VQVEVNQkVSLCBVQ0FMX09DVE9CRVIsIFVDQUxfTk9WRU1CRVIs
IFVDQUxfREVDRU1CRVIsIFVDQUxfVU5ERUNJTUJFUgorICogQHBhcmFtIGRhdGUgVGhlIGRlc2ly
ZWQgZGF5IG9mIHRoZSBtb250aC4KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVF
cnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisgKiBAc2VlIHVjYWxfZ2V0TWlsbGlzCisg
KiBAc2VlIHVjYWxfc2V0TWlsbGlzCisgKiBAc2VlIHVjYWxfc2V0RGF0ZVRpbWUKKyAqIEBzdGFi
bGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfc2V0RGF0ZShV
Q2FsZW5kYXIqICAgY2FsLAorICAgICAgICAgICAgIGludDMyX3QgICAgICB5ZWFyLAorICAgICAg
ICAgICAgIGludDMyX3QgICAgICBtb250aCwKKyAgICAgICAgICAgICBpbnQzMl90ICAgICAgZGF0
ZSwKKyAgICAgICAgICAgICBVRXJyb3JDb2RlKiAgc3RhdHVzKTsKKworLyoqCisgKiBTZXQgYSBV
Q2FsZW5kYXIncyBjdXJyZW50IGRhdGUuCisgKiBUaGUgZGF0ZSBpcyByZXByZXNlbnRlZCBhcyBh
IHNlcmllcyBvZiAzMi1iaXQgaW50ZWdlcnMuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIg
dG8gc2V0LgorICogQHBhcmFtIHllYXIgVGhlIGRlc2lyZWQgeWVhci4KKyAqIEBwYXJhbSBtb250
aCBUaGUgZGVzaXJlZCBtb250aDsgb25lIG9mIFVDQUxfSkFOVUFSWSwgVUNBTF9GRUJSVUFSWSwg
VUNBTF9NQVJDSCwgVUNBTF9BUFJJTCwgVUNBTF9NQVksCisgKiBVQ0FMX0pVTkUsIFVDQUxfSlVM
WSwgVUNBTF9BVUdVU1QsIFVDQUxfU0VQVEVNQkVSLCBVQ0FMX09DVE9CRVIsIFVDQUxfTk9WRU1C
RVIsIFVDQUxfREVDRU1CRVIsIFVDQUxfVU5ERUNJTUJFUgorICogQHBhcmFtIGRhdGUgVGhlIGRl
c2lyZWQgZGF5IG9mIHRoZSBtb250aC4KKyAqIEBwYXJhbSBob3VyIFRoZSBkZXNpcmVkIGhvdXIg
b2YgZGF5LgorICogQHBhcmFtIG1pbnV0ZSBUaGUgZGVzaXJlZCBtaW51dGUuCisgKiBAcGFyYW0g
c2Vjb25kIFRoZSBkZXNpcmVjIHNlY29uZC4KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRv
IGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisgKiBAc2VlIHVjYWxfZ2V0TWls
bGlzCisgKiBAc2VlIHVjYWxfc2V0TWlsbGlzCisgKiBAc2VlIHVjYWxfc2V0RGF0ZQorICogQHN0
YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWNhbF9zZXREYXRl
VGltZShVQ2FsZW5kYXIqICAgY2FsLAorICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgeWVh
ciwKKyAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgIG1vbnRoLAorICAgICAgICAgICAgICAg
ICBpbnQzMl90ICAgICAgZGF0ZSwKKyAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgIGhvdXIs
CisgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICBtaW51dGUsCisgICAgICAgICAgICAgICAg
IGludDMyX3QgICAgICBzZWNvbmQsCisgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUqICBzdGF0
dXMpOworCisvKioKKyAqIFJldHVybnMgVFJVRSBpZiB0d28gVUNhbGVuZGFycyBhcmUgZXF1aXZh
bGVudC4gIEVxdWl2YWxlbnQKKyAqIFVDYWxlbmRhcnMgd2lsbCBiZWhhdmUgaWRlbnRpY2FsbHks
IGJ1dCB0aGV5IG1heSBiZSBzZXQgdG8KKyAqIGRpZmZlcmVudCB0aW1lcy4KKyAqIEBwYXJhbSBj
YWwxIFRoZSBmaXJzdCBvZiB0aGUgVUNhbGVuZGFycyB0byBjb21wYXJlLgorICogQHBhcmFtIGNh
bDIgVGhlIHNlY29uZCBvZiB0aGUgVUNhbGVuZGFycyB0byBjb21wYXJlLgorICogQHJldHVybiBU
UlVFIGlmIGNhbDEgYW5kIGNhbDIgYXJlIGVxdWl2YWxlbnQsIEZBTFNFIG90aGVyd2lzZS4KKyAq
IEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBVQm9vbCBVX0VYUE9SVDIgCit1Y2FsX2Vx
dWl2YWxlbnRUbyhjb25zdCBVQ2FsZW5kYXIqICBjYWwxLAorICAgICAgICAgICAgICAgICAgY29u
c3QgVUNhbGVuZGFyKiAgY2FsMik7CisKKy8qKgorICogQWRkIGEgc3BlY2lmaWVkIHNpZ25lZCBh
bW91bnQgdG8gYSBwYXJ0aWN1bGFyIGZpZWxkIGluIGEgVUNhbGVuZGFyLgorICogVGhpcyBjYW4g
bW9kaWZ5IG1vcmUgc2lnbmlmaWNhbnQgZmllbGRzIGluIHRoZSBjYWxlbmRhci4KKyAqIEBwYXJh
bSBjYWwgVGhlIFVDYWxlbmRhciB0byB3aGljaCB0byBhZGQuCisgKiBAcGFyYW0gZmllbGQgVGhl
IGZpZWxkIHRvIHdoaWNoIHRvIGFkZCB0aGUgc2lnbmVkIHZhbHVlOyBvbmUgb2YgVUNBTF9FUkEs
IFVDQUxfWUVBUiwgVUNBTF9NT05USCwKKyAqIFVDQUxfV0VFS19PRl9ZRUFSLCBVQ0FMX1dFRUtf
T0ZfTU9OVEgsIFVDQUxfREFURSwgVUNBTF9EQVlfT0ZfWUVBUiwgVUNBTF9EQVlfT0ZfV0VFSywK
KyAqIFVDQUxfREFZX09GX1dFRUtfSU5fTU9OVEgsIFVDQUxfQU1fUE0sIFVDQUxfSE9VUiwgVUNB
TF9IT1VSX09GX0RBWSwgVUNBTF9NSU5VVEUsIFVDQUxfU0VDT05ELAorICogVUNBTF9NSUxMSVNF
Q09ORCwgVUNBTF9aT05FX09GRlNFVCwgVUNBTF9EU1RfT0ZGU0VULgorICogQHBhcmFtIGFtb3Vu
dCBUaGUgc2lnbmVkIGFtb3VudCB0byBhZGQgdG8gZmllbGQuIElmIHRoZSBhbW91bnQgY2F1c2Vz
IHRoZSB2YWx1ZQorICogdG8gZXhjZWVkIHRvIG1heGltdW0gb3IgbWluaW11bSB2YWx1ZXMgZm9y
IHRoYXQgZmllbGQsIG90aGVyIGZpZWxkcyBhcmUgbW9kaWZpZWQKKyAqIHRvIHByZXNlcnZlIHRo
ZSBtYWduaXR1ZGUgb2YgdGhlIGNoYW5nZS4KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRv
IGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisgKiBAc2VlIHVjYWxfcm9sbAor
ICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWNhbF9h
ZGQoVUNhbGVuZGFyKiAgICAgICAgICAgY2FsLAorICAgICAgICAgVUNhbGVuZGFyRGF0ZUZpZWxk
cyAgZmllbGQsCisgICAgICAgICBpbnQzMl90ICAgICAgICAgICAgICBhbW91bnQsCisgICAgICAg
ICBVRXJyb3JDb2RlKiAgICAgICAgICBzdGF0dXMpOworCisvKioKKyAqIEFkZCBhIHNwZWNpZmll
ZCBzaWduZWQgYW1vdW50IHRvIGEgcGFydGljdWxhciBmaWVsZCBpbiBhIFVDYWxlbmRhci4KKyAq
IFRoaXMgd2lsbCBub3QgbW9kaWZ5IG1vcmUgc2lnbmlmaWNhbnQgZmllbGRzIGluIHRoZSBjYWxl
bmRhci4KKyAqIEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byB3aGljaCB0byBhZGQuCisgKiBA
cGFyYW0gZmllbGQgVGhlIGZpZWxkIHRvIHdoaWNoIHRvIGFkZCB0aGUgc2lnbmVkIHZhbHVlOyBv
bmUgb2YgVUNBTF9FUkEsIFVDQUxfWUVBUiwgVUNBTF9NT05USCwKKyAqIFVDQUxfV0VFS19PRl9Z
RUFSLCBVQ0FMX1dFRUtfT0ZfTU9OVEgsIFVDQUxfREFURSwgVUNBTF9EQVlfT0ZfWUVBUiwgVUNB
TF9EQVlfT0ZfV0VFSywKKyAqIFVDQUxfREFZX09GX1dFRUtfSU5fTU9OVEgsIFVDQUxfQU1fUE0s
IFVDQUxfSE9VUiwgVUNBTF9IT1VSX09GX0RBWSwgVUNBTF9NSU5VVEUsIFVDQUxfU0VDT05ELAor
ICogVUNBTF9NSUxMSVNFQ09ORCwgVUNBTF9aT05FX09GRlNFVCwgVUNBTF9EU1RfT0ZGU0VULgor
ICogQHBhcmFtIGFtb3VudCBUaGUgc2lnbmVkIGFtb3VudCB0byBhZGQgdG8gZmllbGQuIElmIHRo
ZSBhbW91bnQgY2F1c2VzIHRoZSB2YWx1ZQorICogdG8gZXhjZWVkIHRvIG1heGltdW0gb3IgbWlu
aW11bSB2YWx1ZXMgZm9yIHRoYXQgZmllbGQsIHRoZSBmaWVsZCBpcyBwaW5uZWQgdG8gYSBwZXJt
aXNzaWJsZQorICogdmFsdWUuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJy
b3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworICogQHNlZSB1Y2FsX2FkZAorICogQHN0YWJs
ZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWNhbF9yb2xsKFVDYWxl
bmRhciogICAgICAgICAgIGNhbCwKKyAgICAgICAgICBVQ2FsZW5kYXJEYXRlRmllbGRzICBmaWVs
ZCwKKyAgICAgICAgICBpbnQzMl90ICAgICAgICAgICAgICBhbW91bnQsCisgICAgICAgICAgVUVy
cm9yQ29kZSogICAgICAgICAgc3RhdHVzKTsKKworLyoqCisgKiBHZXQgdGhlIGN1cnJlbnQgdmFs
dWUgb2YgYSBmaWVsZCBmcm9tIGEgVUNhbGVuZGFyLgorICogQWxsIGZpZWxkcyBhcmUgcmVwcmVz
ZW50ZWQgYXMgMzItYml0IGludGVnZXJzLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRv
IHF1ZXJ5LgorICogQHBhcmFtIGZpZWxkIFRoZSBkZXNpcmVkIGZpZWxkOyBvbmUgb2YgVUNBTF9F
UkEsIFVDQUxfWUVBUiwgVUNBTF9NT05USCwKKyAqIFVDQUxfV0VFS19PRl9ZRUFSLCBVQ0FMX1dF
RUtfT0ZfTU9OVEgsIFVDQUxfREFURSwgVUNBTF9EQVlfT0ZfWUVBUiwgVUNBTF9EQVlfT0ZfV0VF
SywKKyAqIFVDQUxfREFZX09GX1dFRUtfSU5fTU9OVEgsIFVDQUxfQU1fUE0sIFVDQUxfSE9VUiwg
VUNBTF9IT1VSX09GX0RBWSwgVUNBTF9NSU5VVEUsIFVDQUxfU0VDT05ELAorICogVUNBTF9NSUxM
SVNFQ09ORCwgVUNBTF9aT05FX09GRlNFVCwgVUNBTF9EU1RfT0ZGU0VULgorICogQHBhcmFtIHN0
YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyAq
IEByZXR1cm4gVGhlIHZhbHVlIG9mIHRoZSBkZXNpcmVkIGZpZWxkLgorICogQHNlZSB1Y2FsX3Nl
dAorICogQHNlZSB1Y2FsX2lzU2V0CisgKiBAc2VlIHVjYWxfY2xlYXJGaWVsZAorICogQHNlZSB1
Y2FsX2NsZWFyCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgaW50MzJfdCBVX0VY
UE9SVDIgCit1Y2FsX2dldChjb25zdCBVQ2FsZW5kYXIqICAgICBjYWwsCisgICAgICAgICBVQ2Fs
ZW5kYXJEYXRlRmllbGRzICBmaWVsZCwKKyAgICAgICAgIFVFcnJvckNvZGUqICAgICAgICAgIHN0
YXR1cyApOworCisvKioKKyAqIFNldCB0aGUgdmFsdWUgb2YgYSBmaWVsZCBpbiBhIFVDYWxlbmRh
ci4KKyAqIEFsbCBmaWVsZHMgYXJlIHJlcHJlc2VudGVkIGFzIDMyLWJpdCBpbnRlZ2Vycy4KKyAq
IEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBzZXQuCisgKiBAcGFyYW0gZmllbGQgVGhlIGZp
ZWxkIHRvIHNldDsgb25lIG9mIFVDQUxfRVJBLCBVQ0FMX1lFQVIsIFVDQUxfTU9OVEgsCisgKiBV
Q0FMX1dFRUtfT0ZfWUVBUiwgVUNBTF9XRUVLX09GX01PTlRILCBVQ0FMX0RBVEUsIFVDQUxfREFZ
X09GX1lFQVIsIFVDQUxfREFZX09GX1dFRUssCisgKiBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRI
LCBVQ0FMX0FNX1BNLCBVQ0FMX0hPVVIsIFVDQUxfSE9VUl9PRl9EQVksIFVDQUxfTUlOVVRFLCBV
Q0FMX1NFQ09ORCwKKyAqIFVDQUxfTUlMTElTRUNPTkQsIFVDQUxfWk9ORV9PRkZTRVQsIFVDQUxf
RFNUX09GRlNFVC4KKyAqIEBwYXJhbSB2YWx1ZSBUaGUgZGVzaXJlZCB2YWx1ZSBvZiBmaWVsZC4K
KyAqIEBzZWUgdWNhbF9nZXQKKyAqIEBzZWUgdWNhbF9pc1NldAorICogQHNlZSB1Y2FsX2NsZWFy
RmllbGQKKyAqIEBzZWUgdWNhbF9jbGVhcgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RB
QkxFIHZvaWQgVV9FWFBPUlQyIAordWNhbF9zZXQoVUNhbGVuZGFyKiAgICAgICAgICAgY2FsLAor
ICAgICAgICAgVUNhbGVuZGFyRGF0ZUZpZWxkcyAgZmllbGQsCisgICAgICAgICBpbnQzMl90ICAg
ICAgICAgICAgICB2YWx1ZSk7CisKKy8qKgorICogRGV0ZXJtaW5lIGlmIGEgZmllbGQgaW4gYSBV
Q2FsZW5kYXIgaXMgc2V0LgorICogQWxsIGZpZWxkcyBhcmUgcmVwcmVzZW50ZWQgYXMgMzItYml0
IGludGVnZXJzLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHF1ZXJ5LgorICogQHBh
cmFtIGZpZWxkIFRoZSBkZXNpcmVkIGZpZWxkOyBvbmUgb2YgVUNBTF9FUkEsIFVDQUxfWUVBUiwg
VUNBTF9NT05USCwKKyAqIFVDQUxfV0VFS19PRl9ZRUFSLCBVQ0FMX1dFRUtfT0ZfTU9OVEgsIFVD
QUxfREFURSwgVUNBTF9EQVlfT0ZfWUVBUiwgVUNBTF9EQVlfT0ZfV0VFSywKKyAqIFVDQUxfREFZ
X09GX1dFRUtfSU5fTU9OVEgsIFVDQUxfQU1fUE0sIFVDQUxfSE9VUiwgVUNBTF9IT1VSX09GX0RB
WSwgVUNBTF9NSU5VVEUsIFVDQUxfU0VDT05ELAorICogVUNBTF9NSUxMSVNFQ09ORCwgVUNBTF9a
T05FX09GRlNFVCwgVUNBTF9EU1RfT0ZGU0VULgorICogQHJldHVybiBUUlVFIGlmIGZpZWxkIGlz
IHNldCwgRkFMU0Ugb3RoZXJ3aXNlLgorICogQHNlZSB1Y2FsX2dldAorICogQHNlZSB1Y2FsX3Nl
dAorICogQHNlZSB1Y2FsX2NsZWFyRmllbGQKKyAqIEBzZWUgdWNhbF9jbGVhcgorICogQHN0YWJs
ZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIFVCb29sIFVfRVhQT1JUMiAKK3VjYWxfaXNTZXQoY29u
c3QgVUNhbGVuZGFyKiAgICAgY2FsLAorICAgICAgICAgICBVQ2FsZW5kYXJEYXRlRmllbGRzICBm
aWVsZCk7CisKKy8qKgorICogQ2xlYXIgYSBmaWVsZCBpbiBhIFVDYWxlbmRhci4KKyAqIEFsbCBm
aWVsZHMgYXJlIHJlcHJlc2VudGVkIGFzIDMyLWJpdCBpbnRlZ2Vycy4KKyAqIEBwYXJhbSBjYWwg
VGhlIFVDYWxlbmRhciBjb250YWluaW5nIHRoZSBmaWVsZCB0byBjbGVhci4KKyAqIEBwYXJhbSBm
aWVsZCBUaGUgZmllbGQgdG8gY2xlYXI7IG9uZSBvZiBVQ0FMX0VSQSwgVUNBTF9ZRUFSLCBVQ0FM
X01PTlRILAorICogVUNBTF9XRUVLX09GX1lFQVIsIFVDQUxfV0VFS19PRl9NT05USCwgVUNBTF9E
QVRFLCBVQ0FMX0RBWV9PRl9ZRUFSLCBVQ0FMX0RBWV9PRl9XRUVLLAorICogVUNBTF9EQVlfT0Zf
V0VFS19JTl9NT05USCwgVUNBTF9BTV9QTSwgVUNBTF9IT1VSLCBVQ0FMX0hPVVJfT0ZfREFZLCBV
Q0FMX01JTlVURSwgVUNBTF9TRUNPTkQsCisgKiBVQ0FMX01JTExJU0VDT05ELCBVQ0FMX1pPTkVf
T0ZGU0VULCBVQ0FMX0RTVF9PRkZTRVQuCisgKiBAc2VlIHVjYWxfZ2V0CisgKiBAc2VlIHVjYWxf
c2V0CisgKiBAc2VlIHVjYWxfaXNTZXQKKyAqIEBzZWUgdWNhbF9jbGVhcgorICogQHN0YWJsZSBJ
Q1UgMi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWNhbF9jbGVhckZpZWxkKFVD
YWxlbmRhciogICAgICAgICAgIGNhbCwKKyAgICAgICAgICAgICAgICBVQ2FsZW5kYXJEYXRlRmll
bGRzICBmaWVsZCk7CisKKy8qKgorICogQ2xlYXIgYWxsIGZpZWxkcyBpbiBhIFVDYWxlbmRhci4K
KyAqIEFsbCBmaWVsZHMgYXJlIHJlcHJlc2VudGVkIGFzIDMyLWJpdCBpbnRlZ2Vycy4KKyAqIEBw
YXJhbSBjYWxlbmRhciBUaGUgVUNhbGVuZGFyIHRvIGNsZWFyLgorICogQHNlZSB1Y2FsX2dldAor
ICogQHNlZSB1Y2FsX3NldAorICogQHNlZSB1Y2FsX2lzU2V0CisgKiBAc2VlIHVjYWxfY2xlYXJG
aWVsZAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAor
dWNhbF9jbGVhcihVQ2FsZW5kYXIqIGNhbGVuZGFyKTsKKworLyoqCisgKiBQb3NzaWJsZSBsaW1p
dCB2YWx1ZXMgZm9yIGEgVUNhbGVuZGFyIAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK2VudW0g
VUNhbGVuZGFyTGltaXRUeXBlIHsKKyAgLyoqIE1pbmltdW0gdmFsdWUgKi8KKyAgVUNBTF9NSU5J
TVVNLAorICAvKiogTWF4aW11bSB2YWx1ZSAqLworICBVQ0FMX01BWElNVU0sCisgIC8qKiBHcmVh
dGVzdCBtaW5pbXVtIHZhbHVlICovCisgIFVDQUxfR1JFQVRFU1RfTUlOSU1VTSwKKyAgLyoqIExl
YWVzdCBtYXhpbXVtIHZhbHVlICovCisgIFVDQUxfTEVBU1RfTUFYSU1VTSwKKyAgLyoqIEFjdHVh
bCBtaW5pbXVtIHZhbHVlICovCisgIFVDQUxfQUNUVUFMX01JTklNVU0sCisgIC8qKiBBY3R1YWwg
bWF4aW11bSB2YWx1ZSAqLworICBVQ0FMX0FDVFVBTF9NQVhJTVVNCit9OworCisvKiogQHN0YWJs
ZSBJQ1UgMi4wICovCit0eXBlZGVmIGVudW0gVUNhbGVuZGFyTGltaXRUeXBlIFVDYWxlbmRhckxp
bWl0VHlwZTsKKworLyoqCisgKiBEZXRlcm1pbmUgYSBsaW1pdCBmb3IgYSBmaWVsZCBpbiBhIFVD
YWxlbmRhci4KKyAqIEEgbGltaXQgaXMgYSBtYXhpbXVtIG9yIG1pbmltdW0gdmFsdWUgZm9yIGEg
ZmllbGQuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gcXVlcnkuCisgKiBAcGFyYW0g
ZmllbGQgVGhlIGRlc2lyZWQgZmllbGQ7IG9uZSBvZiBVQ0FMX0VSQSwgVUNBTF9ZRUFSLCBVQ0FM
X01PTlRILAorICogVUNBTF9XRUVLX09GX1lFQVIsIFVDQUxfV0VFS19PRl9NT05USCwgVUNBTF9E
QVRFLCBVQ0FMX0RBWV9PRl9ZRUFSLCBVQ0FMX0RBWV9PRl9XRUVLLAorICogVUNBTF9EQVlfT0Zf
V0VFS19JTl9NT05USCwgVUNBTF9BTV9QTSwgVUNBTF9IT1VSLCBVQ0FMX0hPVVJfT0ZfREFZLCBV
Q0FMX01JTlVURSwgVUNBTF9TRUNPTkQsCisgKiBVQ0FMX01JTExJU0VDT05ELCBVQ0FMX1pPTkVf
T0ZGU0VULCBVQ0FMX0RTVF9PRkZTRVQuCisgKiBAcGFyYW0gdHlwZSBUaGUgZGVzaXJlZCBjcml0
aWNhbCBwb2ludDsgb25lIG9mIFVDQUxfTUlOSU1VTSwgVUNBTF9NQVhJTVVNLCBVQ0FMX0dSRUFU
RVNUX01JTklNVU0sCisgKiBVQ0FMX0xFQVNUX01BWElNVU0sIFVDQUxfQUNUVUFMX01JTklNVU0s
IFVDQUxfQUNUVUFMX01BWElNVU0KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVF
cnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzLgorICogQHJldHVybiBUaGUgcmVxdWVzdGVk
IHZhbHVlLgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBP
UlQyIAordWNhbF9nZXRMaW1pdChjb25zdCBVQ2FsZW5kYXIqICAgICBjYWwsCisgICAgICAgICAg
ICAgIFVDYWxlbmRhckRhdGVGaWVsZHMgIGZpZWxkLAorICAgICAgICAgICAgICBVQ2FsZW5kYXJM
aW1pdFR5cGUgICB0eXBlLAorICAgICAgICAgICAgICBVRXJyb3JDb2RlKiAgICAgICAgICBzdGF0
dXMpOworCisvKiogR2V0IHRoZSBsb2NhbGUgZm9yIHRoaXMgY2FsZW5kYXIgb2JqZWN0LiBZb3Ug
Y2FuIGNob29zZSBiZXR3ZWVuIHZhbGlkIGFuZCBhY3R1YWwgbG9jYWxlLgorICogIEBwYXJhbSBj
YWwgVGhlIGNhbGVuZGFyIG9iamVjdAorICogIEBwYXJhbSB0eXBlIHR5cGUgb2YgdGhlIGxvY2Fs
ZSB3ZSdyZSBsb29raW5nIGZvciAodmFsaWQgb3IgYWN0dWFsKSAKKyAqICBAcGFyYW0gc3RhdHVz
IGVycm9yIGNvZGUgZm9yIHRoZSBvcGVyYXRpb24KKyAqICBAcmV0dXJuIHRoZSBsb2NhbGUgbmFt
ZQorICogIEBzdGFibGUgSUNVIDIuOAorICovCitVX1NUQUJMRSBjb25zdCBjaGFyICogVV9FWFBP
UlQyCit1Y2FsX2dldExvY2FsZUJ5VHlwZShjb25zdCBVQ2FsZW5kYXIgKmNhbCwgVUxvY0RhdGFM
b2NhbGVUeXBlIHR5cGUsIFVFcnJvckNvZGUqIHN0YXR1cyk7CisKKy8qKgorICogUmV0dXJucyB0
aGUgdGltZXpvbmUgZGF0YSB2ZXJzaW9uIGN1cnJlbnRseSB1c2VkIGJ5IElDVS4KKyAqIEBwYXJh
bSBzdGF0dXMgZXJyb3IgY29kZSBmb3IgdGhlIG9wZXJhdGlvbgorICogQHJldHVybiB0aGUgdmVy
c2lvbiBzdHJpbmcsIHN1Y2ggYXMgIjIwMDdmIgorICogQHN0YWJsZSBJQ1UgMy44CisgKi8KK1Vf
U1RBQkxFIGNvbnN0IGNoYXIgKiBVX0VYUE9SVDIKK3VjYWxfZ2V0VFpEYXRhVmVyc2lvbihVRXJy
b3JDb2RlKiBzdGF0dXMpOworCisvKioKKyAqIFJldHVybnMgdGhlIGNhbm9uaWNhbCBzeXN0ZW0g
dGltZXpvbmUgSUQgb3IgdGhlIG5vcm1hbGl6ZWQKKyAqIGN1c3RvbSB0aW1lIHpvbmUgSUQgZm9y
IHRoZSBnaXZlbiB0aW1lIHpvbmUgSUQuCisgKiBAcGFyYW0gaWQgICAgICAgIFRoZSBpbnB1dCB0
aW1lem9uZSBJRCB0byBiZSBjYW5vbmljYWxpemVkLgorICogQHBhcmFtIGxlbiAgICAgICBUaGUg
bGVuZ3RoIG9mIGlkLCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisgKiBAcGFyYW0gcmVzdWx0
ICAgIFRoZSBidWZmZXIgcmVjZWl2ZXMgdGhlIGNhbm9uaWNhbCBzeXN0ZW0gdGltZXpvbmUgSUQK
KyAqICAgICAgICAgICAgICAgICAgb3IgdGhlIGN1c3RvbSB0aW1lem9uZSBJRCBpbiBub3JtYWxp
emVkIGZvcm1hdC4KKyAqIEBwYXJhbSByZXN1bHRDYXBhY2l0eSAgICBUaGUgY2FwYWNpdHkgb2Yg
dGhlIHJlc3VsdCBidWZmZXIuCisgKiBAcGFyYW0gaXNTeXN0ZW1JRCAgICAgICAgUmVjZWl2ZXMg
aWYgdGhlIGdpdmVuIElEIGlzIGEga25vd24gc3lzdGVtCisgICAgICogICAgICAgICAgICAgICAg
ICAgICAgdGltZXpvbmUgSUQuCisgKiBAcGFyYW0gc3RhdHVzICAgIFJlY2V2aWVzIHRoZSBzdGF0
dXMuICBXaGVuIHRoZSBnaXZlbiB0aW1lem9uZSBJRAorICogICAgICAgICAgICAgICAgICBpcyBu
ZWl0aGVyIGEga25vd24gc3lzdGVtIHRpbWUgem9uZSBJRCBub3IgYQorICogICAgICAgICAgICAg
ICAgICB2YWxpZCBjdXN0b20gdGltZXpvbmUgSUQsIFVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUgor
ICogICAgICAgICAgICAgICAgICBpcyBzZXQuCisgKiBAcmV0dXJuICAgICAgICAgIFRoZSByZXN1
bHQgc3RyaW5nIGxlbmd0aCwgbm90IGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcKKyAqICAgICAg
ICAgICAgICAgICAgbnVsbC4KKyAqIEBzdGFibGUgSUNVIDQuMAorICovCitVX1NUQUJMRSBpbnQz
Ml90IFVfRVhQT1JUMgordWNhbF9nZXRDYW5vbmljYWxUaW1lWm9uZUlEKGNvbnN0IFVDaGFyKiBp
ZCwgaW50MzJfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIqIHJlc3Vs
dCwgaW50MzJfdCByZXN1bHRDYXBhY2l0eSwgVUJvb2wgKmlzU3lzdGVtSUQsIFVFcnJvckNvZGUq
IHN0YXR1cyk7CisvKioKKyAqIEdldCB0aGUgcmVzb3VyY2Uga2V5d29yZCB2YWx1ZSBzdHJpbmcg
ZGVzaWduYXRpbmcgdGhlIGNhbGVuZGFyIHR5cGUgZm9yIHRoZSBVQ2FsZW5kYXIuCisgKiBAcGFy
YW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gcXVlcnkuCisgKiBAcGFyYW0gc3RhdHVzIFRoZSBlcnJv
ciBjb2RlIGZvciB0aGUgb3BlcmF0aW9uLgorICogQHJldHVybiBUaGUgcmVzb3VyY2Uga2V5d29y
ZCB2YWx1ZSBzdHJpbmcuCisgKiBAc3RhYmxlIElDVSA0LjIKKyAqLworVV9TVEFCTEUgY29uc3Qg
Y2hhciAqIFVfRVhQT1JUMgordWNhbF9nZXRUeXBlKGNvbnN0IFVDYWxlbmRhciAqY2FsLCBVRXJy
b3JDb2RlKiBzdGF0dXMpOworCisvKioKKyAqIEdpdmVuIGEga2V5IGFuZCBhIGxvY2FsZSwgcmV0
dXJucyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzIGluIGEgcHJlZmVycmVkCisgKiBvcmRlciB0
aGF0IHdvdWxkIG1ha2UgYSBkaWZmZXJlbmNlLiBUaGVzZSBhcmUgYWxsIGFuZCBvbmx5IHRob3Nl
IHZhbHVlcyB3aGVyZQorICogdGhlIG9wZW4gKGNyZWF0aW9uKSBvZiB0aGUgc2VydmljZSB3aXRo
IHRoZSBsb2NhbGUgZm9ybWVkIGZyb20gdGhlIGlucHV0IGxvY2FsZQorICogcGx1cyBpbnB1dCBr
ZXl3b3JkIGFuZCB0aGF0IHZhbHVlIGhhcyBkaWZmZXJlbnQgYmVoYXZpb3IgdGhhbiBjcmVhdGlv
biB3aXRoIHRoZQorICogaW5wdXQgbG9jYWxlIGFsb25lLgorICogQHBhcmFtIGtleSAgICAgICAg
ICAgb25lIG9mIHRoZSBrZXlzIHN1cHBvcnRlZCBieSB0aGlzIHNlcnZpY2UuICBGb3Igbm93LCBv
bmx5CisgKiAgICAgICAgICAgICAgICAgICAgICAiY2FsZW5kYXIiIGlzIHN1cHBvcnRlZC4KKyAq
IEBwYXJhbSBsb2NhbGUgICAgICAgIHRoZSBsb2NhbGUKKyAqIEBwYXJhbSBjb21tb25seVVzZWQg
IGlmIHNldCB0byB0cnVlIGl0IHdpbGwgcmV0dXJuIG9ubHkgY29tbW9ubHkgdXNlZCB2YWx1ZXMK
KyAqICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGdpdmVuIGxvY2FsZSBpbiBwcmVmZXJy
ZWQgb3JkZXIuICBPdGhlcndpc2UsCisgKiAgICAgICAgICAgICAgICAgICAgICBpdCB3aWxsIHJl
dHVybiBhbGwgdGhlIGF2YWlsYWJsZSB2YWx1ZXMgZm9yIHRoZSBsb2NhbGUuCisgKiBAcGFyYW0g
c3RhdHVzIGVycm9yIHN0YXR1cworICogQHJldHVybiBhIHN0cmluZyBlbnVtZXJhdGlvbiBvdmVy
IGtleXdvcmQgdmFsdWVzIGZvciB0aGUgZ2l2ZW4ga2V5IGFuZCB0aGUgbG9jYWxlLgorICogQHN0
YWJsZSBJQ1UgNC4yCisgKi8KK1VfU1RBQkxFIFVFbnVtZXJhdGlvbiogVV9FWFBPUlQyCit1Y2Fs
X2dldEtleXdvcmRWYWx1ZXNGb3JMb2NhbGUoY29uc3QgY2hhcioga2V5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGxvY2FsZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVQm9vbCBjb21tb25seVVzZWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVUVycm9yQ29kZSogc3RhdHVzKTsKKworCisvKiogV2Vla2RheSB0eXBlcywgYXMg
cmV0dXJuZWQgYnkgdWNhbF9nZXREYXlPZldlZWtUeXBlKCkuCisgKiBAc3RhYmxlIElDVSA0LjQK
KyAqLworZW51bSBVQ2FsZW5kYXJXZWVrZGF5VHlwZSB7CisgIC8qKgorICAgKiBEZXNpZ25hdGVz
IGEgZnVsbCB3ZWVrZGF5IChubyBwYXJ0IG9mIHRoZSBkYXkgaXMgaW5jbHVkZWQgaW4gdGhlIHdl
ZWtlbmQpLgorICAgKiBAc3RhYmxlIElDVSA0LjQgCisgICAqLworICBVQ0FMX1dFRUtEQVksCisg
IC8qKgorICAgKiBEZXNpZ25hdGVzIGEgZnVsbCB3ZWVrZW5kIGRheSAodGhlIGVudGlyZSBkYXkg
aXMgaW5jbHVkZWQgaW4gdGhlIHdlZWtlbmQpLgorICAgKiBAc3RhYmxlIElDVSA0LjQgCisgICAq
LworICBVQ0FMX1dFRUtFTkQsCisgIC8qKgorICAgKiBEZXNpZ25hdGVzIGEgZGF5IHRoYXQgc3Rh
cnRzIGFzIGEgd2Vla2RheSBhbmQgdHJhbnNpdGlvbnMgdG8gdGhlIHdlZWtlbmQuCisgICAqIENh
bGwgdWNhbF9nZXRXZWVrZW5kVHJhbnNpdGlvbigpIHRvIGdldCB0aGUgdGltZSBvZiB0cmFuc2l0
aW9uLgorICAgKiBAc3RhYmxlIElDVSA0LjQgCisgICAqLworICBVQ0FMX1dFRUtFTkRfT05TRVQs
CisgIC8qKgorICAgKiBEZXNpZ25hdGVzIGEgZGF5IHRoYXQgc3RhcnRzIGFzIHRoZSB3ZWVrZW5k
IGFuZCB0cmFuc2l0aW9ucyB0byBhIHdlZWtkYXkuCisgICAqIENhbGwgdWNhbF9nZXRXZWVrZW5k
VHJhbnNpdGlvbigpIHRvIGdldCB0aGUgdGltZSBvZiB0cmFuc2l0aW9uLgorICAgKiBAc3RhYmxl
IElDVSA0LjQgCisgICAqLworICBVQ0FMX1dFRUtFTkRfQ0VBU0UKK307CisKKy8qKiBAc3RhYmxl
IElDVSA0LjQgKi8KK3R5cGVkZWYgZW51bSBVQ2FsZW5kYXJXZWVrZGF5VHlwZSBVQ2FsZW5kYXJX
ZWVrZGF5VHlwZTsKKworLyoqCisgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGRheSBvZiB0
aGUgd2VlayBpcyBhIHdlZWtkYXksIGEKKyAqIHdlZWtlbmQgZGF5LCBvciBhIGRheSB0aGF0IHRy
YW5zaXRpb25zIGZyb20gb25lIHRvIHRoZSBvdGhlciwKKyAqIGluIHRoaXMgY2FsZW5kYXIgc3lz
dGVtLiBJZiBhIHRyYW5zaXRpb24gb2NjdXJzIGF0IG1pZG5pZ2h0LAorICogdGhlbiB0aGUgZGF5
cyBiZWZvcmUgYW5kIGFmdGVyIHRoZSB0cmFuc2l0aW9uIHdpbGwgaGF2ZSB0aGUKKyAqIHR5cGUg
VUNBTF9XRUVLREFZIG9yIFVDQUxfV0VFS0VORC4gSWYgYSB0cmFuc2l0aW9uIG9jY3VycyBhdCBh
IHRpbWUKKyAqIG90aGVyIHRoYW4gbWlkbmlnaHQsIHRoZW4gdGhlIGRheSBvZiB0aGUgdHJhbnNp
dGlvbiB3aWxsIGhhdmUKKyAqIHRoZSB0eXBlIFVDQUxfV0VFS0VORF9PTlNFVCBvciBVQ0FMX1dF
RUtFTkRfQ0VBU0UuIEluIHRoaXMgY2FzZSwgdGhlCisgKiBtZXRob2QgZ2V0V2Vla2VuZFRyYW5z
aXRpb24oKSB3aWxsIHJldHVybiB0aGUgcG9pbnQgb2YKKyAqIHRyYW5zaXRpb24uCisgKiBAcGFy
YW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gcXVlcnkuCisgKiBAcGFyYW0gZGF5T2ZXZWVrIFRoZSBk
YXkgb2YgdGhlIHdlZWsgd2hvc2UgdHlwZSBpcyBkZXNpcmVkIChVQ0FMX1NVTkRBWS4uVUNBTF9T
QVRVUkRBWSkuCisgKiBAcGFyYW0gc3RhdHVzIFRoZSBlcnJvciBjb2RlIGZvciB0aGUgb3BlcmF0
aW9uLgorICogQHJldHVybiBUaGUgVUNhbGVuZGFyV2Vla2RheVR5cGUgZm9yIHRoZSBkYXkgb2Yg
dGhlIHdlZWsuCisgKiBAc3RhYmxlIElDVSA0LjQKKyAqLworVV9TVEFCTEUgVUNhbGVuZGFyV2Vl
a2RheVR5cGUgVV9FWFBPUlQyCit1Y2FsX2dldERheU9mV2Vla1R5cGUoY29uc3QgVUNhbGVuZGFy
ICpjYWwsIFVDYWxlbmRhckRheXNPZldlZWsgZGF5T2ZXZWVrLCBVRXJyb3JDb2RlKiBzdGF0dXMp
OworCisvKioKKyAqIFJldHVybnMgdGhlIHRpbWUgZHVyaW5nIHRoZSBkYXkgYXQgd2hpY2ggdGhl
IHdlZWtlbmQgYmVnaW5zIG9yIGVuZHMgaW4KKyAqIHRoaXMgY2FsZW5kYXIgc3lzdGVtLiAgSWYg
dWNhbF9nZXREYXlPZldlZWtUeXBlKCkgcmVydHVybnMgVUNBTF9XRUVLRU5EX09OU0VUCisgKiBm
b3IgdGhlIHNwZWNpZmllZCBkYXlPZldlZWssIHJldHVybiB0aGUgdGltZSBhdCB3aGljaCB0aGUg
d2Vla2VuZCBiZWdpbnMuCisgKiBJZiB1Y2FsX2dldERheU9mV2Vla1R5cGUoKSByZXR1cm5zIFVD
QUxfV0VFS0VORF9DRUFTRSBmb3IgdGhlIHNwZWNpZmllZCBkYXlPZldlZWssCisgKiByZXR1cm4g
dGhlIHRpbWUgYXQgd2hpY2ggdGhlIHdlZWtlbmQgZW5kcy4gSWYgdWNhbF9nZXREYXlPZldlZWtU
eXBlKCkgcmV0dXJucworICogc29tZSBvdGhlciBVQ2FsZW5kYXJXZWVrZGF5VHlwZSBmb3IgdGhl
IHNwZWNpZmllZCBkYXlPZldlZWssIGlzIGl0IGFuIGVycm9yIGNvbmRpdGlvbgorICogKFVfSUxM
RUdBTF9BUkdVTUVOVF9FUlJPUikuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gcXVl
cnkuCisgKiBAcGFyYW0gZGF5T2ZXZWVrIFRoZSBkYXkgb2YgdGhlIHdlZWsgZm9yIHdoaWNoIHRo
ZSB3ZWVrZW5kIHRyYW5zaXRpb24gdGltZSBpcworICogZGVzaXJlZCAoVUNBTF9TVU5EQVkuLlVD
QUxfU0FUVVJEQVkpLgorICogQHBhcmFtIHN0YXR1cyBUaGUgZXJyb3IgY29kZSBmb3IgdGhlIG9w
ZXJhdGlvbi4KKyAqIEByZXR1cm4gVGhlIG1pbGxpc2Vjb25kcyBhZnRlciBtaWRuaWdodCBhdCB3
aGljaCB0aGUgd2Vla2VuZCBiZWdpbnMgb3IgZW5kcy4KKyAqIEBzdGFibGUgSUNVIDQuNAorICov
CitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgordWNhbF9nZXRXZWVrZW5kVHJhbnNpdGlvbihj
b25zdCBVQ2FsZW5kYXIgKmNhbCwgVUNhbGVuZGFyRGF5c09mV2VlayBkYXlPZldlZWssIFVFcnJv
ckNvZGUgKnN0YXR1cyk7CisKKy8qKgorICogUmV0dXJucyBUUlVFIGlmIHRoZSBnaXZlbiBVRGF0
ZSBpcyBpbiB0aGUgd2Vla2VuZCBpbgorICogdGhpcyBjYWxlbmRhciBzeXN0ZW0uCisgKiBAcGFy
YW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gcXVlcnkuCisgKiBAcGFyYW0gZGF0ZSBUaGUgVURhdGUg
aW4gcXVlc3Rpb24uCisgKiBAcGFyYW0gc3RhdHVzIFRoZSBlcnJvciBjb2RlIGZvciB0aGUgb3Bl
cmF0aW9uLgorICogQHJldHVybiBUUlVFIGlmIHRoZSBnaXZlbiBVRGF0ZSBpcyBpbiB0aGUgd2Vl
a2VuZCBpbgorICogdGhpcyBjYWxlbmRhciBzeXN0ZW0sIEZBTFNFIG90aGVyd2lzZS4KKyAqIEBz
dGFibGUgSUNVIDQuNAorICovCitVX1NUQUJMRSBVQm9vbCBVX0VYUE9SVDIKK3VjYWxfaXNXZWVr
ZW5kKGNvbnN0IFVDYWxlbmRhciAqY2FsLCBVRGF0ZSBkYXRlLCBVRXJyb3JDb2RlICpzdGF0dXMp
OworCisKKyNlbmRpZiAvKiAjaWYgIVVDT05GSUdfTk9fRk9STUFUVElORyAqLworCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29kZS91ZGF0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdWRhdC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ0ODBj
N2RhNTE0NzViMzkzY2UwZDNjOWI3MjJjYzZkYzRkM2QwYmIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdWRhdC5oCkBAIC0wLDAgKzEsOTk3IEBA
CisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDEw
LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisgKiBDb3Jwb3JhdGlvbiBhbmQgb3Ro
ZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisK
KyNpZm5kZWYgVURBVF9ICisjZGVmaW5lIFVEQVRfSAorCisjaW5jbHVkZSAidW5pY29kZS91dHlw
ZXMuaCIKKworI2lmICFVQ09ORklHX05PX0ZPUk1BVFRJTkcKKworI2luY2x1ZGUgInVuaWNvZGUv
bG9jYWxwb2ludGVyLmgiCisjaW5jbHVkZSAidW5pY29kZS91Y2FsLmgiCisjaW5jbHVkZSAidW5p
Y29kZS91bnVtLmgiCisvKioKKyAqIFxmaWxlCisgKiBcYnJpZWYgQyBBUEk6IERhdGVGb3JtYXQK
KyAqCisgKiA8aDI+IERhdGUgRm9ybWF0IEMgQVBJPC9oMj4KKyAqCisgKiBEYXRlIEZvcm1hdCBD
IEFQSSAgY29uc2lzdHMgb2YgZnVuY3Rpb25zIHRoYXQgY29udmVydCBkYXRlcyBhbmQKKyAqIHRp
bWVzIGZyb20gdGhlaXIgaW50ZXJuYWwgcmVwcmVzZW50YXRpb25zIHRvIHRleHR1YWwgZm9ybSBh
bmQgYmFjayBhZ2FpbiBpbiBhCisgKiBsYW5ndWFnZS1pbmRlcGVuZGVudCBtYW5uZXIuIENvbnZl
cnRpbmcgZnJvbSB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gKG1pbGxpc2Vjb25kcworICog
c2luY2UgbWlkbmlnaHQsIEphbnVhcnkgMSwgMTk3MCkgdG8gdGV4dCBpcyBrbm93biBhcyAiZm9y
bWF0dGluZywiIGFuZCBjb252ZXJ0aW5nCisgKiBmcm9tIHRleHQgdG8gbWlsbGlzIGlzIGtub3du
IGFzICJwYXJzaW5nLiIgIFdlIGN1cnJlbnRseSBkZWZpbmUgb25seSBvbmUgY29uY3JldGUKKyAq
IHN0cnVjdHVyZSBVRGF0ZUZvcm1hdCwgd2hpY2ggY2FuIGhhbmRsZSBwcmV0dHkgbXVjaCBhbGwg
bm9ybWFsCisgKiBkYXRlIGZvcm1hdHRpbmcgYW5kIHBhcnNpbmcgYWN0aW9ucy4KKyAqIDxQPgor
ICogRGF0ZSBGb3JtYXQgaGVscHMgeW91IHRvIGZvcm1hdCBhbmQgcGFyc2UgZGF0ZXMgZm9yIGFu
eSBsb2NhbGUuIFlvdXIgY29kZSBjYW4KKyAqIGJlIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgb2Yg
dGhlIGxvY2FsZSBjb252ZW50aW9ucyBmb3IgbW9udGhzLCBkYXlzIG9mIHRoZQorICogd2Vlaywg
b3IgZXZlbiB0aGUgY2FsZW5kYXIgZm9ybWF0OiBsdW5hciB2cy4gc29sYXIuCisgKiA8UD4KKyAq
IFRvIGZvcm1hdCBhIGRhdGUgZm9yIHRoZSBjdXJyZW50IExvY2FsZSB3aXRoIGRlZmF1bHQgdGlt
ZSBhbmQgZGF0ZSBzdHlsZSwKKyAqIHVzZSBvbmUgb2YgdGhlIHN0YXRpYyBmYWN0b3J5IG1ldGhv
ZHM6CisgKiA8cHJlPgorICogXGNvZGUKKyAqICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19F
UlJPUjsKKyAqICBVQ2hhciAqbXlTdHJpbmc7CisgKiAgaW50MzJfdCBteVN0cmxlbiA9IDA7Cisg
KiAgVURhdGVGb3JtYXQqIGRmbXQgPSB1ZGF0X29wZW4oVURBVF9ERUZBVUxULCBVREFUX0RFRkFV
TFQsIE5VTEwsIE5VTEwsIC0xLCBOVUxMLCAtMSwgJnN0YXR1cyk7CisgKiAgbXlTdHJsZW4gPSB1
ZGF0X2Zvcm1hdChkZm10LCBteURhdGUsIE5VTEwsIG15U3RybGVuLCBOVUxMLCAmc3RhdHVzKTsK
KyAqICBpZiAoc3RhdHVzPT1VX0JVRkZFUl9PVkVSRkxPV19FUlJPUil7CisgKiAgICAgIHN0YXR1
cz1VX1pFUk9fRVJST1I7CisgKiAgICAgIG15U3RyaW5nPShVQ2hhciopbWFsbG9jKHNpemVvZihV
Q2hhcikgKiAobXlTdHJsZW4rMSkgKTsKKyAqICAgICAgdWRhdF9mb3JtYXQoZGZtdCwgbXlEYXRl
LCBteVN0cmluZywgbXlTdHJsZW4rMSwgTlVMTCwgJnN0YXR1cyk7CisgKiAgfQorICogXGVuZGNv
ZGUKKyAqIDwvcHJlPgorICogSWYgeW91IGFyZSBmb3JtYXR0aW5nIG11bHRpcGxlIG51bWJlcnMs
IGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGdldCB0aGUKKyAqIGZvcm1hdCBhbmQgdXNlIGl0IG11
bHRpcGxlIHRpbWVzIHNvIHRoYXQgdGhlIHN5c3RlbSBkb2Vzbid0IGhhdmUgdG8gZmV0Y2ggdGhl
CisgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbG9jYWwgbGFuZ3VhZ2UgYW5kIGNvdW50cnkgY29u
dmVudGlvbnMgbXVsdGlwbGUgdGltZXMuCisgKiA8cHJlPgorICogXGNvZGUKKyAqICBVRXJyb3JD
b2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAqICBpbnQzMl90IGksIG15U3RybGVuID0gMDsK
KyAqICBVQ2hhciogbXlTdHJpbmc7CisgKiAgY2hhciBidWZmZXJbMTAyNF07CisgKiAgVURhdGUg
bXlEYXRlQXJyW10gPSB7IDAuMCwgMTAwMDAwMDAwLjAsIDIwMDAwMDAwMDAuMCB9OyAvLyB0ZXN0
IHZhbHVlcworICogIFVEYXRlRm9ybWF0KiBkZiA9IHVkYXRfb3BlbihVREFUX0RFRkFVTFQsIFVE
QVRfREVGQVVMVCwgTlVMTCwgTlVMTCwgLTEsIE5VTEwsIDAsICZzdGF0dXMpOworICogIGZvciAo
aSA9IDA7IGkgPCAzOyBpKyspIHsKKyAqICAgICAgbXlTdHJsZW4gPSB1ZGF0X2Zvcm1hdChkZiwg
bXlEYXRlQXJyW2ldLCBOVUxMLCBteVN0cmxlbiwgTlVMTCwgJnN0YXR1cyk7CisgKiAgICAgIGlm
KHN0YXR1cyA9PSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUil7CisgKiAgICAgICAgICBzdGF0dXMg
PSBVX1pFUk9fRVJST1I7CisgKiAgICAgICAgICBteVN0cmluZyA9IChVQ2hhciopbWFsbG9jKHNp
emVvZihVQ2hhcikgKiAobXlTdHJsZW4rMSkgKTsKKyAqICAgICAgICAgIHVkYXRfZm9ybWF0KGRm
LCBteURhdGVBcnJbaV0sIG15U3RyaW5nLCBteVN0cmxlbisxLCBOVUxMLCAmc3RhdHVzKTsKKyAq
ICAgICAgICAgIHByaW50ZigiJXNcbiIsIHVfYXVzdHJjcHkoYnVmZmVyLCBteVN0cmluZykgKTsK
KyAqICAgICAgICAgIGZyZWUobXlTdHJpbmcpOworICogICAgICB9CisgKiAgfQorICogXGVuZGNv
ZGUKKyAqIDwvcHJlPgorICogVG8gZ2V0IHNwZWNpZmljIGZpZWxkcyBvZiBhIGRhdGUsIHlvdSBj
YW4gdXNlIFVGaWVsZFBvc2l0aW9uIHRvCisgKiBnZXQgc3BlY2lmaWMgZmllbGRzLgorICogPHBy
ZT4KKyAqIFxjb2RlCisgKiAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgKiAg
VUZpZWxkUG9zaXRpb24gcG9zOworICogIFVDaGFyICpteVN0cmluZzsKKyAqICBpbnQzMl90IG15
U3RybGVuID0gMDsKKyAqICBjaGFyIGJ1ZmZlclsxMDI0XTsKKyAqCisgKiAgcG9zLmZpZWxkID0g
MTsgIC8vIFNhbWUgYXMgdGhlIERhdGVGb3JtYXQ6OkVGaWVsZCBlbnVtCisgKiAgVURhdGVGb3Jt
YXQqIGRmbXQgPSB1ZGF0X29wZW4oVURBVF9ERUZBVUxULCBVREFUX0RFRkFVTFQsIE5VTEwsIC0x
LCBOVUxMLCAwLCAmc3RhdHVzKTsKKyAqICBteVN0cmxlbiA9IHVkYXRfZm9ybWF0KGRmbXQsIG15
RGF0ZSwgTlVMTCwgbXlTdHJsZW4sICZwb3MsICZzdGF0dXMpOworICogIGlmIChzdGF0dXM9PVVf
QlVGRkVSX09WRVJGTE9XX0VSUk9SKXsKKyAqICAgICAgc3RhdHVzPVVfWkVST19FUlJPUjsKKyAq
ICAgICAgbXlTdHJpbmc9KFVDaGFyKiltYWxsb2Moc2l6ZW9mKFVDaGFyKSAqIChteVN0cmxlbisx
KSApOworICogICAgICB1ZGF0X2Zvcm1hdChkZm10LCBteURhdGUsIG15U3RyaW5nLCBteVN0cmxl
bisxLCAmcG9zLCAmc3RhdHVzKTsKKyAqICB9CisgKiAgcHJpbnRmKCJkYXRlIGZvcm1hdDogJXNc
biIsIHVfYXVzdHJjcHkoYnVmZmVyLCBteVN0cmluZykpOworICogIGJ1ZmZlcltwb3MuZW5kSW5k
ZXhdID0gMDsgICAvLyBOVUxMIHRlcm1pbmF0ZSB0aGUgc3RyaW5nLgorICogIHByaW50ZigiVUZp
ZWxkUG9zaXRpb24gcG9zaXRpb24gZXF1YWxzICVzXG4iLCAmYnVmZmVyW3Bvcy5iZWdpbkluZGV4
XSk7CisgKiBcZW5kY29kZQorICogPC9wcmU+CisgKiBUbyBmb3JtYXQgYSBkYXRlIGZvciBhIGRp
ZmZlcmVudCBMb2NhbGUsIHNwZWNpZnkgaXQgaW4gdGhlIGNhbGwgdG8KKyAqIHVkYXRfb3Blbigp
CisgKiA8cHJlPgorICogXGNvZGUKKyAqICAgICAgICBVRGF0ZUZvcm1hdCogZGYgPSB1ZGF0X29w
ZW4oVURBVF9TSE9SVCwgVURBVF9TSE9SVCwgImZyX0ZSIiwgTlVMTCwgLTEsIE5VTEwsIDAsICZz
dGF0dXMpOworICogXGVuZGNvZGUKKyAqIDwvcHJlPgorICogWW91IGNhbiB1c2UgYSBEYXRlRm9y
bWF0IEFQSSB1ZGF0X3BhcnNlKCkgdG8gcGFyc2UuCisgKiA8cHJlPgorICogXGNvZGUKKyAqICBV
RXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAqICBpbnQzMl90IHBhcnNlcG9zPTA7
CisgKiAgVURhdGUgbXlEYXRlID0gdWRhdF9wYXJzZShkZiwgbXlTdHJpbmcsIHVfc3RybGVuKG15
U3RyaW5nKSwgJnBhcnNlcG9zLCAmc3RhdHVzKTsKKyAqIFxlbmRjb2RlCisgKiA8L3ByZT4KKyAq
ICBZb3UgY2FuIHBhc3MgaW4gZGlmZmVyZW50IG9wdGlvbnMgZm9yIHRoZSBhcmd1bWVudHMgZm9y
IGRhdGUgYW5kIHRpbWUgc3R5bGUKKyAqICB0byBjb250cm9sIHRoZSBsZW5ndGggb2YgdGhlIHJl
c3VsdDsgZnJvbSBTSE9SVCB0byBNRURJVU0gdG8gTE9ORyB0byBGVUxMLgorICogIFRoZSBleGFj
dCByZXN1bHQgZGVwZW5kcyBvbiB0aGUgbG9jYWxlLCBidXQgZ2VuZXJhbGx5OgorICogIHNlZSBV
RGF0ZUZvcm1hdFN0eWxlIGZvciBtb3JlIGRldGFpbHMKKyAqIDx1bCB0eXBlPXJvdW5kPgorICog
ICA8bGk+ICAgVURBVF9TSE9SVCBpcyBjb21wbGV0ZWx5IG51bWVyaWMsIHN1Y2ggYXMgMTIvMTMv
NTIgb3IgMzozMHBtCisgKiAgIDxsaT4gICBVREFUX01FRElVTSBpcyBsb25nZXIsIHN1Y2ggYXMg
SmFuIDEyLCAxOTUyCisgKiAgIDxsaT4gICBVREFUX0xPTkcgaXMgbG9uZ2VyLCBzdWNoIGFzIEph
bnVhcnkgMTIsIDE5NTIgb3IgMzozMDozMnBtCisgKiAgIDxsaT4gICBVREFUX0ZVTEwgaXMgcHJl
dHR5IGNvbXBsZXRlbHkgc3BlY2lmaWVkLCBzdWNoIGFzCisgKiAgICAgICAgICBUdWVzZGF5LCBB
cHJpbCAxMiwgMTk1MiBBRCBvciAzOjMwOjQycG0gUFNULgorICogPC91bD4KKyAqIFlvdSBjYW4g
YWxzbyBzZXQgdGhlIHRpbWUgem9uZSBvbiB0aGUgZm9ybWF0IGlmIHlvdSB3aXNoLgorICogPFA+
CisgKiBZb3UgY2FuIGFsc28gdXNlIGZvcm1zIG9mIHRoZSBwYXJzZSBhbmQgZm9ybWF0IG1ldGhv
ZHMgd2l0aCBQYXJzZSBQb3NpdGlvbiBhbmQKKyAqIFVGaWVsZFBvc2l0aW9uIHRvIGFsbG93IHlv
dSB0bworICogPHVsIHR5cGU9cm91bmQ+CisgKiAgIDxsaT4gICBQcm9ncmVzc2l2ZWx5IHBhcnNl
IHRocm91Z2ggcGllY2VzIG9mIGEgc3RyaW5nLgorICogICA8bGk+ICAgQWxpZ24gYW55IHBhcnRp
Y3VsYXIgZmllbGQsIG9yIGZpbmQgb3V0IHdoZXJlIGl0IGlzIGZvciBzZWxlY3Rpb24KKyAqICAg
ICAgICAgIG9uIHRoZSBzY3JlZW4uCisgKiA8L3VsPgorICovCisKKy8qKiBBIGRhdGUgZm9ybWF0
dGVyLgorICogIEZvciB1c2FnZSBpbiBDIHByb2dyYW1zLgorICogIEBzdGFibGUgSUNVIDIuNgor
ICovCit0eXBlZGVmIHZvaWQqIFVEYXRlRm9ybWF0OworCisvKiogVGhlIHBvc3NpYmxlIGRhdGUv
dGltZSBmb3JtYXQgc3R5bGVzIAorICogIEBzdGFibGUgSUNVIDIuNgorICovCit0eXBlZGVmIGVu
dW0gVURhdGVGb3JtYXRTdHlsZSB7CisgICAgLyoqIEZ1bGwgc3R5bGUgKi8KKyAgICBVREFUX0ZV
TEwsCisgICAgLyoqIExvbmcgc3R5bGUgKi8KKyAgICBVREFUX0xPTkcsCisgICAgLyoqIE1lZGl1
bSBzdHlsZSAqLworICAgIFVEQVRfTUVESVVNLAorICAgIC8qKiBTaG9ydCBzdHlsZSAqLworICAg
IFVEQVRfU0hPUlQsCisgICAgLyoqIERlZmF1bHQgc3R5bGUgKi8KKyAgICBVREFUX0RFRkFVTFQg
PSBVREFUX01FRElVTSwKKworICAgIC8qKiBCaXRmaWVsZCBmb3IgcmVsYXRpdmUgZGF0ZSAqLwor
ICAgIFVEQVRfUkVMQVRJVkUgPSAoMSA8PCA3KSwKKyAgICAKKyAgICBVREFUX0ZVTExfUkVMQVRJ
VkUgPSBVREFUX0ZVTEwgfCBVREFUX1JFTEFUSVZFLAorICAgICAgICAKKyAgICBVREFUX0xPTkdf
UkVMQVRJVkUgPSBVREFUX0xPTkcgfCBVREFUX1JFTEFUSVZFLAorICAgIAorICAgIFVEQVRfTUVE
SVVNX1JFTEFUSVZFID0gVURBVF9NRURJVU0gfCBVREFUX1JFTEFUSVZFLAorICAgIAorICAgIFVE
QVRfU0hPUlRfUkVMQVRJVkUgPSBVREFUX1NIT1JUIHwgVURBVF9SRUxBVElWRSwKKyAgICAKKyAg
ICAKKyAgICAvKiogTm8gc3R5bGUgKi8KKyAgICBVREFUX05PTkUgPSAtMSwKKyAgICAvKiogZm9y
IGludGVybmFsIEFQSSB1c2Ugb25seSAqLworICAgIFVEQVRfSUdOT1JFID0gLTIKKworfSBVRGF0
ZUZvcm1hdFN0eWxlOworCisKKy8qKgorICogQHsKKyAqIEJlbG93IGFyZSBhIHNldCBvZiBwcmUt
ZGVmaW5lZCBza2VsZXRvbnMuCisgKgorICogPFA+CisgKiBBIHNrZWxldG9uIAorICogPG9sPgor
ICogPGxpPgorICogICAgb25seSBrZWVwcyB0aGUgZmllbGQgcGF0dGVybiBsZXR0ZXIgYW5kIGln
bm9yZXMgYWxsIG90aGVyIHBhcnRzIAorICogICAgaW4gYSBwYXR0ZXJuLCBzdWNoIGFzIHNwYWNl
LCBwdW5jdHVhdGlvbnMsIGFuZCBzdHJpbmcgbGl0ZXJhbHMuCisgKiA8L2xpPgorICogPGxpPgor
ICogICAgaGlkZXMgdGhlIG9yZGVyIG9mIGZpZWxkcy4gCisgKiA8L2xpPgorICogPGxpPgorICog
ICAgbWlnaHQgaGlkZSBhIGZpZWxkJ3MgcGF0dGVybiBsZXR0ZXIgbGVuZ3RoLgorICoKKyAqICAg
IEZvciB0aG9zZSBub24tZGlnaXQgY2FsZW5kYXIgZmllbGRzLCB0aGUgcGF0dGVybiBsZXR0ZXIg
bGVuZ3RoIGlzIAorICogICAgaW1wb3J0YW50LCBzdWNoIGFzIE1NTSwgTU1NTSwgYW5kIE1NTU1N
OyBFRUUgYW5kIEVFRUUsIAorICogICAgYW5kIHRoZSBmaWVsZCdzIHBhdHRlcm4gbGV0dGVyIGxl
bmd0aCBpcyBob25vcmVkLgorICogICAgCisgKiAgICBGb3IgdGhlIGRpZ2l0IGNhbGVuZGFyIGZp
ZWxkcywgIHN1Y2ggYXMgTSBvciBNTSwgZCBvciBkZCwgeXkgb3IgeXl5eSwgCisgKiAgICB0aGUg
ZmllbGQgcGF0dGVybiBsZW5ndGggaXMgaWdub3JlZCBhbmQgdGhlIGJlc3QgbWF0Y2gsIHdoaWNo
IGlzIGRlZmluZWQgCisgKiAgICBpbiBkYXRlIHRpbWUgcGF0dGVybnMsIHdpbGwgYmUgcmV0dXJu
ZWQgd2l0aG91dCBob25vciB0aGUgZmllbGQgcGF0dGVybgorICogICAgbGV0dGVyIGxlbmd0aCBp
biBza2VsZXRvbi4KKyAqIDwvbGk+CisgKiA8L29sPgorICoKKyAqIEBzdGFibGUgSUNVIDQuMAor
ICovCisKKyNkZWZpbmUgVURBVF9NSU5VVEVfU0VDT05EICAgICAgICAgICAgICAibXMiCisjZGVm
aW5lIFVEQVRfSE9VUjI0X01JTlVURSAgICAgICAgICAgICAgIkhtIgorI2RlZmluZSBVREFUX0hP
VVIyNF9NSU5VVEVfU0VDT05EICAgICAgICJIbXMiICAgICAgCisjZGVmaW5lIFVEQVRfSE9VUl9N
SU5VVEVfU0VDT05EICAgICAgICAgImhtcyIKKyNkZWZpbmUgVURBVF9TVEFOREFMT05FX01PTlRI
ICAgICAgICAgICAiTExMTCIKKyNkZWZpbmUgVURBVF9BQkJSX1NUQU5EQUxPTkVfTU9OVEggICAg
ICAiTExMIgorI2RlZmluZSBVREFUX1lFQVJfUVVBUlRFUiAgICAgICAgICAgICAgICJ5UVFRIgor
I2RlZmluZSBVREFUX1lFQVJfQUJCUl9RVUFSVEVSICAgICAgICAgICJ5USIKKworLyoqIEB9ICov
CisKKy8qKgorICogQHsKKyAqIEJlbG93IGFyZSBhIHNldCBvZiBwcmUtZGVmaW5lZCBza2VsZXRv
bnMgdGhhdCAKKyAqIGhhdmUgcHJlLWRlZmluZWQgaW50ZXJ2YWwgcGF0dGVybnMgaW4gcmVzb3Vy
Y2UgZmlsZXMuCisgKiBVc2VycyBhcmUgZW5jb3VyYWdlZCB0byB1c2UgdGhlbSBpbiBkYXRlIGlu
dGVydmFsIGZvcm1hdCBmYWN0b3J5IG1ldGhvZHMuCisgKiAKKyAqIEBzdGFibGUgSUNVIDQuMAor
ICovCisjZGVmaW5lIFVEQVRfSE9VUl9NSU5VVEUgICAgICAgICAgICAgICAgImhtIgorI2RlZmlu
ZSBVREFUX1lFQVIgICAgICAgICAgICAgICAgICAgICAgICJ5IgorI2RlZmluZSBVREFUX0RBWSAg
ICAgICAgICAgICAgICAgICAgICAgICJkIgorI2RlZmluZSBVREFUX05VTV9NT05USF9XRUVLREFZ
X0RBWSAgICAgICJNRWQiCisjZGVmaW5lIFVEQVRfWUVBUl9OVU1fTU9OVEggICAgICAgICAgICAg
InlNIiAgICAgICAgICAgICAgCisjZGVmaW5lIFVEQVRfTlVNX01PTlRIX0RBWSAgICAgICAgICAg
ICAgIk1kIgorI2RlZmluZSBVREFUX1lFQVJfTlVNX01PTlRIX1dFRUtEQVlfREFZICJ5TUVkIgor
I2RlZmluZSBVREFUX0FCQlJfTU9OVEhfV0VFS0RBWV9EQVkgICAgICJNTU1FZCIKKyNkZWZpbmUg
VURBVF9ZRUFSX01PTlRIICAgICAgICAgICAgICAgICAieU1NTU0iCisjZGVmaW5lIFVEQVRfWUVB
Ul9BQkJSX01PTlRIICAgICAgICAgICAgInlNTU0iCisjZGVmaW5lIFVEQVRfTU9OVEhfREFZICAg
ICAgICAgICAgICAgICAgIk1NTU1kIgorI2RlZmluZSBVREFUX0FCQlJfTU9OVEhfREFZICAgICAg
ICAgICAgICJNTU1kIiAKKyNkZWZpbmUgVURBVF9NT05USF9XRUVLREFZX0RBWSAgICAgICAgICAi
TU1NTUVFRUVkIgorI2RlZmluZSBVREFUX1lFQVJfQUJCUl9NT05USF9XRUVLREFZX0RBWSAieU1N
TUVkIiAKKyNkZWZpbmUgVURBVF9ZRUFSX01PTlRIX1dFRUtEQVlfREFZICAgICAieU1NTU1FRUVF
ZCIKKyNkZWZpbmUgVURBVF9ZRUFSX01PTlRIX0RBWSAgICAgICAgICAgICAieU1NTU1kIgorI2Rl
ZmluZSBVREFUX1lFQVJfQUJCUl9NT05USF9EQVkgICAgICAgICJ5TU1NZCIKKyNkZWZpbmUgVURB
VF9ZRUFSX05VTV9NT05USF9EQVkgICAgICAgICAieU1kIgorI2RlZmluZSBVREFUX05VTV9NT05U
SCAgICAgICAgICAgICAgICAgICJNIgorI2RlZmluZSBVREFUX0FCQlJfTU9OVEggICAgICAgICAg
ICAgICAgICJNTU0iCisjZGVmaW5lIFVEQVRfTU9OVEggICAgICAgICAgICAgICAgICAgICAgIk1N
TU0iCisjZGVmaW5lIFVEQVRfSE9VUl9NSU5VVEVfR0VORVJJQ19UWiAgICAgImhtdiIKKyNkZWZp
bmUgVURBVF9IT1VSX01JTlVURV9UWiAgICAgICAgICAgICAiaG16IgorI2RlZmluZSBVREFUX0hP
VVIgICAgICAgICAgICAgICAgICAgICAgICJoIgorI2RlZmluZSBVREFUX0hPVVJfR0VORVJJQ19U
WiAgICAgICAgICAgICJodiIKKyNkZWZpbmUgVURBVF9IT1VSX1RaICAgICAgICAgICAgICAgICAg
ICAiaHoiCisKKy8qKiBAfSAqLworCisKKy8qKgorICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxk
UG9zaXRpb24gc2VsZWN0b3JzIGZvciBmb3JtYXQgZmllbGRzCisgKiBkZWZpbmVkIGJ5IERhdGVG
b3JtYXQgYW5kIFVEYXRlRm9ybWF0LgorICogQHN0YWJsZSBJQ1UgMy4wCisgKi8KK3R5cGVkZWYg
ZW51bSBVRGF0ZUZvcm1hdEZpZWxkIHsKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFu
ZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ0cnIGZpZWxkIGFsaWdubWVudCwKKyAgICAg
KiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0VSQSBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElD
VSAzLjAKKyAgICAgKi8KKyAgICBVREFUX0VSQV9GSUVMRCA9IDAsCisKKyAgICAvKioKKyAgICAg
KiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ3knIGZpZWxk
IGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX1lFQVIgZmllbGQu
CisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9ZRUFSX0ZJRUxEID0g
MSwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNl
bGVjdG9yIGZvciAnTScgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8g
dGhlIFVDQUxfTU9OVEggZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisg
ICAgVURBVF9NT05USF9GSUVMRCA9IDIsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9u
IGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ2QnIGZpZWxkIGFsaWdubWVudCwKKyAg
ICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0RBVEUgZmllbGQuCisgICAgICogQHN0YWJs
ZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9EQVRFX0ZJRUxEID0gMywKKworICAgIC8qKgor
ICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnaycg
ZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfSE9VUl9P
Rl9EQVkgZmllbGQuCisgICAgICogVURBVF9IT1VSX09GX0RBWTFfRklFTEQgaXMgdXNlZCBmb3Ig
dGhlIG9uZS1iYXNlZCAyNC1ob3VyIGNsb2NrLgorICAgICAqIEZvciBleGFtcGxlLCAyMzo1OSAr
IDAxOjAwIHJlc3VsdHMgaW4gMjQ6NTkuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICov
CisgICAgVURBVF9IT1VSX09GX0RBWTFfRklFTEQgPSA0LAorCisgICAgLyoqCisgICAgICogRmll
bGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdIJyBmaWVsZCBhbGln
bm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9IT1VSX09GX0RBWSBmaWVs
ZC4KKyAgICAgKiBVREFUX0hPVVJfT0ZfREFZMF9GSUVMRCBpcyB1c2VkIGZvciB0aGUgemVyby1i
YXNlZCAyNC1ob3VyIGNsb2NrLgorICAgICAqIEZvciBleGFtcGxlLCAyMzo1OSArIDAxOjAwIHJl
c3VsdHMgaW4gMDA6NTkuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURB
VF9IT1VSX09GX0RBWTBfRklFTEQgPSA1LAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlv
biBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdtJyBmaWVsZCBhbGlnbm1lbnQsCisg
ICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9NSU5VVEUgZmllbGQuCisgICAgICogQHN0
YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9NSU5VVEVfRklFTEQgPSA2LAorCisgICAg
LyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9y
ICdzJyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9T
RUNPTkQgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9T
RUNPTkRfRklFTEQgPSA3LAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZp
ZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdTJyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29y
cmVzcG9uZGluZyB0byB0aGUgVUNBTF9NSUxMSVNFQ09ORCBmaWVsZC4KKyAgICAgKiBAc3RhYmxl
IElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFUX0ZSQUNUSU9OQUxfU0VDT05EX0ZJRUxEID0gOCwK
KworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVj
dG9yIGZvciAnRScgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhl
IFVDQUxfREFZX09GX1dFRUsgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICov
CisgICAgVURBVF9EQVlfT0ZfV0VFS19GSUVMRCA9IDksCisKKyAgICAvKioKKyAgICAgKiBGaWVs
ZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ0QnIGZpZWxkIGFsaWdu
bWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0RBWV9PRl9ZRUFSIGZpZWxk
LgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfREFZX09GX1lFQVJf
RklFTEQgPSAxMCwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBv
c2l0aW9uIHNlbGVjdG9yIGZvciAnRicgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3Bv
bmRpbmcgdG8gdGhlIFVDQUxfREFZX09GX1dFRUtfSU5fTU9OVEggZmllbGQuCisgICAgICogQHN0
YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9EQVlfT0ZfV0VFS19JTl9NT05USF9GSUVM
RCA9IDExLAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRp
b24gc2VsZWN0b3IgZm9yICd3JyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGlu
ZyB0byB0aGUgVUNBTF9XRUVLX09GX1lFQVIgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4w
CisgICAgICovCisgICAgVURBVF9XRUVLX09GX1lFQVJfRklFTEQgPSAxMiwKKworICAgIC8qKgor
ICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnVycg
ZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfV0VFS19P
Rl9NT05USCBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFU
X1dFRUtfT0ZfTU9OVEhfRklFTEQgPSAxMywKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRp
b24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnYScgZmllbGQgYWxpZ25tZW50LAor
ICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfQU1fUE0gZmllbGQuCisgICAgICogQHN0
YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9BTV9QTV9GSUVMRCA9IDE0LAorCisgICAg
LyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9y
ICdoJyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9I
T1VSIGZpZWxkLgorICAgICAqIFVEQVRfSE9VUjFfRklFTEQgaXMgdXNlZCBmb3IgdGhlIG9uZS1i
YXNlZCAxMi1ob3VyIGNsb2NrLgorICAgICAqIEZvciBleGFtcGxlLCAxMTozMCBQTSArIDEgaG91
ciByZXN1bHRzIGluIDEyOjMwIEFNLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLwor
ICAgIFVEQVRfSE9VUjFfRklFTEQgPSAxNSwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRp
b24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnSycgZmllbGQgYWxpZ25tZW50LAor
ICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfSE9VUiBmaWVsZC4KKyAgICAgKiBVREFU
X0hPVVIwX0ZJRUxEIGlzIHVzZWQgZm9yIHRoZSB6ZXJvLWJhc2VkIDEyLWhvdXIgY2xvY2suCisg
ICAgICogRm9yIGV4YW1wbGUsIDExOjMwIFBNICsgMSBob3VyIHJlc3VsdHMgaW4gMDA6MzAgQU0u
CisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9IT1VSMF9GSUVMRCA9
IDE2LAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24g
c2VsZWN0b3IgZm9yICd6JyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0
byB0aGUgVUNBTF9aT05FX09GRlNFVCBhbmQKKyAgICAgKiBVQ0FMX0RTVF9PRkZTRVQgZmllbGRz
LgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfVElNRVpPTkVfRklF
TEQgPSAxNywKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0
aW9uIHNlbGVjdG9yIGZvciAnWScgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRp
bmcgdG8gdGhlIFVDQUxfWUVBUl9XT1kgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisg
ICAgICovCisgICAgVURBVF9ZRUFSX1dPWV9GSUVMRCA9IDE4LAorCisgICAgLyoqCisgICAgICog
RmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdlJyBmaWVsZCBh
bGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9ET1dfTE9DQUwgZmll
bGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9ET1dfTE9DQUxf
RklFTEQgPSAxOSwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBv
c2l0aW9uIHNlbGVjdG9yIGZvciAndScgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3Bv
bmRpbmcgdG8gdGhlIFVDQUxfRVhURU5ERURfWUVBUiBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElD
VSAzLjAKKyAgICAgKi8KKyAgICBVREFUX0VYVEVOREVEX1lFQVJfRklFTEQgPSAyMCwKKworICAg
IC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZv
ciAnZycgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxf
SlVMSUFOX0RBWSBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBV
REFUX0pVTElBTl9EQVlfRklFTEQgPSAyMSwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRp
b24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnQScgZmllbGQgYWxpZ25tZW50LAor
ICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfTUlMTElTRUNPTkRTX0lOX0RBWSBmaWVs
ZC4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFUX01JTExJU0VDT05E
U19JTl9EQVlfRklFTEQgPSAyMiwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5k
IFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnWicgZmllbGQgYWxpZ25tZW50LAorICAgICAq
IGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfWk9ORV9PRkZTRVQgYW5kCisgICAgICogVUNBTF9E
U1RfT0ZGU0VUIGZpZWxkcy4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBV
REFUX1RJTUVaT05FX1JGQ19GSUVMRCA9IDIzLAorCisgICAgLyoqCisgICAgICogRmllbGRQb3Np
dGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICd2JyBmaWVsZCBhbGlnbm1lbnQs
CisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9aT05FX09GRlNFVCBmaWVsZC4KKyAg
ICAgKiBAc3RhYmxlIElDVSAzLjQKKyAgICAgKi8KKyAgICBVREFUX1RJTUVaT05FX0dFTkVSSUNf
RklFTEQgPSAyNCwKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAn
YycgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHtAbGluayAj
VUNBTF9ET1dfTE9DQUx9IGZpZWxkLgorICAgICAqIFRoaXMgZGlzcGxheXMgdGhlIHN0YW5kIGFs
b25lIGRheSBuYW1lLCBpZiBhdmFpbGFibGUuCisgICAgICogQHN0YWJsZSBJQ1UgMy40CisgICAg
ICovCisgICAgVURBVF9TVEFOREFMT05FX0RBWV9GSUVMRCA9IDI1LAorCisgICAgLyoqCisgICAg
ICogRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ0wnIGZpZWxkIGFsaWdubWVudCwKKyAgICAg
KiBjb3JyZXNwb25kaW5nIHRvIHRoZSB7QGxpbmsgI1VDQUxfTU9OVEh9IGZpZWxkLgorICAgICAq
IFRoaXMgZGlzcGxheXMgdGhlIHN0YW5kIGFsb25lIG1vbnRoIG5hbWUsIGlmIGF2YWlsYWJsZS4K
KyAgICAgKiBAc3RhYmxlIElDVSAzLjQKKyAgICAgKi8KKyAgICBVREFUX1NUQU5EQUxPTkVfTU9O
VEhfRklFTEQgPSAyNiwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gc2VsZWN0b3Ig
Zm9yICJRIiBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byBxdWFydGVy
cy4gVGhpcyBpcyBpbXBsZW1lbnRlZAorICAgICAqIHVzaW5nIHRoZSB7QGxpbmsgI1VDQUxfTU9O
VEh9IGZpZWxkLiBUaGlzCisgICAgICogZGlzcGxheXMgdGhlIHF1YXJ0ZXIuCisgICAgICogQHN0
YWJsZSBJQ1UgMy42CisgICAgICovCisgICAgVURBVF9RVUFSVEVSX0ZJRUxEID0gMjcsCisKKyAg
ICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciB0aGUgInEiIGZpZWxkIGFs
aWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHN0YW5kLWFsb25lIHF1YXJ0ZXJzLiBU
aGlzIGlzCisgICAgICogaW1wbGVtZW50ZWQgdXNpbmcgdGhlIHtAbGluayAjVUNBTF9NT05USH0g
ZmllbGQuCisgICAgICogVGhpcyBkaXNwbGF5cyB0aGUgc3RhbmQtYWxvbmUgcXVhcnRlci4KKyAg
ICAgKiBAc3RhYmxlIElDVSAzLjYKKyAgICAgKi8KKyAgICBVREFUX1NUQU5EQUxPTkVfUVVBUlRF
Ul9GSUVMRCA9IDI4LAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxk
UG9zaXRpb24gc2VsZWN0b3IgZm9yICdWJyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVz
cG9uZGluZyB0byB0aGUgVUNBTF9aT05FX09GRlNFVCBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElD
VSAzLjgKKyAgICAgKi8KKyAgICBVREFUX1RJTUVaT05FX1NQRUNJQUxfRklFTEQgPSAyOSwKKwor
ICAgLyoqCisgICAgICogTnVtYmVyIG9mIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9u
IHNlbGVjdG9ycyBmb3IKKyAgICAgKiBEYXRlRm9ybWF0IGFuZCBVRGF0ZUZvcm1hdC4KKyAgICAg
KiBWYWxpZCBzZWxlY3RvcnMgcmFuZ2UgZnJvbSAwIHRvIFVEQVRfRklFTERfQ09VTlQtMS4KKyAg
ICAgKiBUaGlzIHZhbHVlIGlzIHN1YmplY3QgdG8gY2hhbmdlIGlmIG5ldyBmaWVsZHMgYXJlIGRl
ZmluZWQKKyAgICAgKiBpbiB0aGUgZnV0dXJlLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAg
ICAqLworICAgIFVEQVRfRklFTERfQ09VTlQgPSAzMAorCit9IFVEYXRlRm9ybWF0RmllbGQ7CisK
KworLyoqCisgKiBNYXBzIGZyb20gYSBVRGF0ZUZvcm1hdEZpZWxkIHRvIHRoZSBjb3JyZXNwb25k
aW5nIFVDYWxlbmRhckRhdGVGaWVsZHMuCisgKiBOb3RlOiBzaW5jZSB0aGUgbWFwcGluZyBpcyBt
YW55LXRvLW9uZSwgdGhlcmUgaXMgbm8gaW52ZXJzZSBtYXBwaW5nLgorICogQHBhcmFtIGZpZWxk
IHRoZSBVRGF0ZUZvcm1hdEZpZWxkLgorICogQHJldHVybiB0aGUgVUNhbGVuZGFyRGF0ZUZpZWxk
LiAgVGhpcyB3aWxsIGJlIFVDQUxfRklFTERfQ09VTlQgaW4gY2FzZQorICogb2YgZXJyb3IgKGUu
Zy4sIHRoZSBpbnB1dCBmaWVsZCBpcyBVREFUX0ZJRUxEX0NPVU5UKS4KKyAqIEBzdGFibGUgSUNV
IDQuNAorICovCitVX1NUQUJMRSBVQ2FsZW5kYXJEYXRlRmllbGRzIFVfRVhQT1JUMgordWRhdF90
b0NhbGVuZGFyRGF0ZUZpZWxkKFVEYXRlRm9ybWF0RmllbGQgZmllbGQpOworCisKKy8qKgorICog
T3BlbiBhIG5ldyBVRGF0ZUZvcm1hdCBmb3IgZm9ybWF0dGluZyBhbmQgcGFyc2luZyBkYXRlcyBh
bmQgdGltZXMuCisgKiBBIFVEYXRlRm9ybWF0IG1heSBiZSB1c2VkIHRvIGZvcm1hdCBkYXRlcyBp
biBjYWxscyB0byB7QGxpbmsgI3VkYXRfZm9ybWF0IH0sCisgKiBhbmQgdG8gcGFyc2UgZGF0ZXMg
aW4gY2FsbHMgdG8ge0BsaW5rICN1ZGF0X3BhcnNlIH0uCisgKiBAcGFyYW0gdGltZVN0eWxlIFRo
ZSBzdHlsZSB1c2VkIHRvIGZvcm1hdCB0aW1lczsgb25lIG9mIFVEQVRfRlVMTCwgVURBVF9MT05H
LAorICogVURBVF9NRURJVU0sIFVEQVRfU0hPUlQsIFVEQVRfREVGQVVMVCwgb3IgVURBVF9OT05F
IChyZWxhdGl2ZSB0aW1lIHN0eWxlcworICogYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkKQor
ICogQHBhcmFtIGRhdGVTdHlsZSBUaGUgc3R5bGUgdXNlZCB0byBmb3JtYXQgZGF0ZXM7IG9uZSBv
ZiBVREFUX0ZVTEwsIFVEQVRfTE9ORywKKyAqIFVEQVRfTUVESVVNLCBVREFUX1NIT1JULCBVREFU
X0RFRkFVTFQsIFVEQVRfRlVMTF9SRUxBVElWRSwgVURBVF9MT05HX1JFTEFUSVZFLAorICogVURB
VF9NRURJVU1fUkVMQVRJVkUsIFVEQVRfU0hPUlRfUkVMQVRJVkUsIG9yIFVEQVRfTk9ORQorICog
QHBhcmFtIGxvY2FsZSBUaGUgbG9jYWxlIHNwZWNpZnlpbmcgdGhlIGZvcm1hdHRpbmcgY29udmVu
dGlvbnMKKyAqIEBwYXJhbSB0eklEIEEgdGltZXpvbmUgSUQgc3BlY2lmeWluZyB0aGUgdGltZXpv
bmUgdG8gdXNlLiAgSWYgMCwgdXNlCisgKiB0aGUgZGVmYXVsdCB0aW1lem9uZS4KKyAqIEBwYXJh
bSB0eklETGVuZ3RoIFRoZSBsZW5ndGggb2YgdHpJRCwgb3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVk
LgorICogQHBhcmFtIHBhdHRlcm4gQSBwYXR0ZXJuIHNwZWNpZnlpbmcgdGhlIGZvcm1hdCB0byB1
c2UuCisgKiBAcGFyYW0gcGF0dGVybkxlbmd0aCBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4g
dGhlIHBhdHRlcm4sIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyAqIEBwYXJhbSBzdGF0dXMg
QSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisgKiBAcmV0
dXJuIEEgcG9pbnRlciB0byBhIFVEYXRlRm9ybWF0IHRvIHVzZSBmb3IgZm9ybWF0dGluZyBkYXRl
cyBhbmQgdGltZXMsIG9yIDAgaWYKKyAqIGFuIGVycm9yIG9jY3VycmVkLgorICogQHN0YWJsZSBJ
Q1UgMi4wCisgKi8KK1VfU1RBQkxFIFVEYXRlRm9ybWF0KiBVX0VYUE9SVDIgCit1ZGF0X29wZW4o
VURhdGVGb3JtYXRTdHlsZSAgdGltZVN0eWxlLAorICAgICAgICAgIFVEYXRlRm9ybWF0U3R5bGUg
IGRhdGVTdHlsZSwKKyAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAqbG9jYWxlLAorICAgICAg
ICAgIGNvbnN0IFVDaGFyICAgICAgICp0eklELAorICAgICAgICAgIGludDMyX3QgICAgICAgICAg
IHR6SURMZW5ndGgsCisgICAgICAgICAgY29uc3QgVUNoYXIgICAgICAgKnBhdHRlcm4sCisgICAg
ICAgICAgaW50MzJfdCAgICAgICAgICAgcGF0dGVybkxlbmd0aCwKKyAgICAgICAgICBVRXJyb3JD
b2RlICAgICAgICAqc3RhdHVzKTsKKworCisvKioKKyogQ2xvc2UgYSBVRGF0ZUZvcm1hdC4KKyog
T25jZSBjbG9zZWQsIGEgVURhdGVGb3JtYXQgbWF5IG5vIGxvbmdlciBiZSB1c2VkLgorKiBAcGFy
YW0gZm9ybWF0IFRoZSBmb3JtYXR0ZXIgdG8gY2xvc2UuCisqIEBzdGFibGUgSUNVIDIuMAorKi8K
K1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWRhdF9jbG9zZShVRGF0ZUZvcm1hdCogZm9ybWF0
KTsKKworI2lmIFVfU0hPV19DUExVU1BMVVNfQVBJCisKK1VfTkFNRVNQQUNFX0JFR0lOCisKKy8q
KgorICogXGNsYXNzIExvY2FsVURhdGVGb3JtYXRQb2ludGVyCisgKiAiU21hcnQgcG9pbnRlciIg
Y2xhc3MsIGNsb3NlcyBhIFVEYXRlRm9ybWF0IHZpYSB1ZGF0X2Nsb3NlKCkuCisgKiBGb3IgbW9z
dCBtZXRob2RzIHNlZSB0aGUgTG9jYWxQb2ludGVyQmFzZSBiYXNlIGNsYXNzLgorICoKKyAqIEBz
ZWUgTG9jYWxQb2ludGVyQmFzZQorICogQHNlZSBMb2NhbFBvaW50ZXIKKyAqIEBzdGFibGUgSUNV
IDQuNAorICovCitVX0RFRklORV9MT0NBTF9PUEVOX1BPSU5URVIoTG9jYWxVRGF0ZUZvcm1hdFBv
aW50ZXIsIFVEYXRlRm9ybWF0LCB1ZGF0X2Nsb3NlKTsKKworVV9OQU1FU1BBQ0VfRU5ECisKKyNl
bmRpZgorCisvKioKKyAqIE9wZW4gYSBjb3B5IG9mIGEgVURhdGVGb3JtYXQuCisgKiBUaGlzIGZ1
bmN0aW9uIHBlcmZvcm1zIGEgZGVlcCBjb3B5LgorICogQHBhcmFtIGZtdCBUaGUgZm9ybWF0IHRv
IGNvcHkKKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVj
ZWl2ZSBhbnkgZXJyb3JzLgorICogQHJldHVybiBBIHBvaW50ZXIgdG8gYSBVRGF0ZUZvcm1hdCBp
ZGVudGljYWwgdG8gZm10LgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIFVEYXRl
Rm9ybWF0KiBVX0VYUE9SVDIgCit1ZGF0X2Nsb25lKGNvbnN0IFVEYXRlRm9ybWF0ICpmbXQsCisg
ICAgICAgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworLyoqCisqIEZvcm1hdCBhIGRhdGUgdXNpbmcg
YW4gVURhdGVGb3JtYXQuCisqIFRoZSBkYXRlIHdpbGwgYmUgZm9ybWF0dGVkIHVzaW5nIHRoZSBj
b252ZW50aW9ucyBzcGVjaWZpZWQgaW4ge0BsaW5rICN1ZGF0X29wZW4gfQorKiBAcGFyYW0gZm9y
bWF0IFRoZSBmb3JtYXR0ZXIgdG8gdXNlCisqIEBwYXJhbSBkYXRlVG9Gb3JtYXQgVGhlIGRhdGUg
dG8gZm9ybWF0CisqIEBwYXJhbSByZXN1bHQgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2Vp
dmUgdGhlIGZvcm1hdHRlZCBudW1iZXIuCisqIEBwYXJhbSByZXN1bHRMZW5ndGggVGhlIG1heGlt
dW0gc2l6ZSBvZiByZXN1bHQuCisqIEBwYXJhbSBwb3NpdGlvbiBBIHBvaW50ZXIgdG8gYSBVRmll
bGRQb3NpdGlvbi4gIE9uIGlucHV0LCBwb3NpdGlvbi0+ZmllbGQKKyogaXMgcmVhZC4gIE9uIG91
dHB1dCwgcG9zaXRpb24tPmJlZ2luSW5kZXggYW5kIHBvc2l0aW9uLT5lbmRJbmRleCBpbmRpY2F0
ZQorKiB0aGUgYmVnaW5uaW5nIGFuZCBlbmRpbmcgaW5kaWNlcyBvZiBmaWVsZCBudW1iZXIgcG9z
aXRpb24tPmZpZWxkLCBpZiBzdWNoCisqIGEgZmllbGQgZXhpc3RzLiAgVGhpcyBwYXJhbWV0ZXIg
bWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2Ugbm8gZmllbGQKKyogcG9zaXRpb24gZGF0YSBpcyBy
ZXR1cm5lZC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byBy
ZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUgdG90YWwgYnVmZmVyIHNpemUgbmVlZGVk
OyBpZiBncmVhdGVyIHRoYW4gcmVzdWx0TGVuZ3RoLCB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQu
CisqIEBzZWUgdWRhdF9wYXJzZQorKiBAc2VlIFVGaWVsZFBvc2l0aW9uCisqIEBzdGFibGUgSUNV
IDIuMAorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordWRhdF9mb3JtYXQoICAgIGNv
bnN0ICAgIFVEYXRlRm9ybWF0KiAgICBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBV
RGF0ZSAgICAgICAgICAgZGF0ZVRvRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgVUNo
YXIqICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAg
ICAgICByZXN1bHRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBVRmllbGRQb3NpdGlv
biogcG9zaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiAgICAgc3Rh
dHVzKTsKKworLyoqCisqIFBhcnNlIGEgc3RyaW5nIGludG8gYW4gZGF0ZS90aW1lIHVzaW5nIGEg
VURhdGVGb3JtYXQuCisqIFRoZSBkYXRlIHdpbGwgYmUgcGFyc2VkIHVzaW5nIHRoZSBjb252ZW50
aW9ucyBzcGVjaWZpZWQgaW4ge0BsaW5rICN1ZGF0X29wZW4gfQorKiBAcGFyYW0gZm9ybWF0IFRo
ZSBmb3JtYXR0ZXIgdG8gdXNlLgorKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBwYXJzZS4KKyog
QHBhcmFtIHRleHRMZW5ndGggVGhlIGxlbmd0aCBvZiB0ZXh0LCBvciAtMSBpZiBudWxsLXRlcm1p
bmF0ZWQuCisqIEBwYXJhbSBwYXJzZVBvcyBJZiBub3QgMCwgb24gaW5wdXQgYSBwb2ludGVyIHRv
IGFuIGludGVnZXIgc3BlY2lmeWluZyB0aGUgb2Zmc2V0IGF0IHdoaWNoCisqIHRvIGJlZ2luIHBh
cnNpbmcuICBJZiBub3QgMCwgb24gb3V0cHV0IHRoZSBvZmZzZXQgYXQgd2hpY2ggcGFyc2luZyBl
bmRlZC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNl
aXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUgdmFsdWUgb2YgdGhlIHBhcnNlZCBkYXRlL3Rp
bWUKKyogQHNlZSB1ZGF0X2Zvcm1hdAorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBV
RGF0ZSBVX0VYUE9SVDIgCit1ZGF0X3BhcnNlKCAgICBjb25zdCAgICBVRGF0ZUZvcm1hdCogICAg
Zm9ybWF0LAorICAgICAgICAgICAgY29uc3QgICAgVUNoYXIqICAgICAgICAgIHRleHQsCisgICAg
ICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICB0ZXh0TGVuZ3RoLAorICAgICAgICAgICAg
ICAgICAgICBpbnQzMl90ICAgICAgICAgKnBhcnNlUG9zLAorICAgICAgICAgICAgICAgICAgICBV
RXJyb3JDb2RlICAgICAgKnN0YXR1cyk7CisKKy8qKgorKiBQYXJzZSBhIHN0cmluZyBpbnRvIGFu
IGRhdGUvdGltZSB1c2luZyBhIFVEYXRlRm9ybWF0LgorKiBUaGUgZGF0ZSB3aWxsIGJlIHBhcnNl
ZCB1c2luZyB0aGUgY29udmVudGlvbnMgc3BlY2lmaWVkIGluIHtAbGluayAjdWRhdF9vcGVuIH0K
KyogQHBhcmFtIGZvcm1hdCBUaGUgZm9ybWF0dGVyIHRvIHVzZS4KKyogQHBhcmFtIGNhbGVuZGFy
IFRoZSBjYWxlbmRhciBpbiB3aGljaCB0byBzdG9yZSB0aGUgcGFyc2VkIGRhdGEuCisqIEBwYXJh
bSB0ZXh0IFRoZSB0ZXh0IHRvIHBhcnNlLgorKiBAcGFyYW0gdGV4dExlbmd0aCBUaGUgbGVuZ3Ro
IG9mIHRleHQsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyogQHBhcmFtIHBhcnNlUG9zIElm
IG5vdCAwLCBvbiBpbnB1dCBhIHBvaW50ZXIgdG8gYW4gaW50ZWdlciBzcGVjaWZ5aW5nIHRoZSBv
ZmZzZXQgYXQgd2hpY2gKKyogdG8gYmVnaW4gcGFyc2luZy4gIElmIG5vdCAwLCBvbiBvdXRwdXQg
dGhlIG9mZnNldCBhdCB3aGljaCBwYXJzaW5nIGVuZGVkLgorKiBAcGFyYW0gc3RhdHVzIEEgcG9p
bnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAc2VlIHVkYXRf
Zm9ybWF0CisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAor
dWRhdF9wYXJzZUNhbGVuZGFyKGNvbnN0ICAgIFVEYXRlRm9ybWF0KiAgICBmb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVUNhbGVuZGFyKiAgICAgIGNhbGVuZGFyLAorICAgICAg
ICAgICAgICAgICAgIGNvbnN0ICAgIFVDaGFyKiAgICAgICAgICB0ZXh0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICB0ZXh0TGVuZ3RoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAqcGFyc2VQb3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICpzdGF0dXMpOworCisvKioKKyogRGV0ZXJt
aW5lIGlmIGFuIFVEYXRlRm9ybWF0IHdpbGwgcGVyZm9ybSBsZW5pZW50IHBhcnNpbmcuCisqIFdp
dGggbGVuaWVudCBwYXJzaW5nLCB0aGUgcGFyc2VyIG1heSB1c2UgaGV1cmlzdGljcyB0byBpbnRl
cnByZXQgaW5wdXRzIHRoYXQgZG8gbm90CisqIHByZWNpc2VseSBtYXRjaCB0aGUgcGF0dGVybi4g
V2l0aCBzdHJpY3QgcGFyc2luZywgaW5wdXRzIG11c3QgbWF0Y2ggdGhlIHBhdHRlcm4uCisqIEBw
YXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBxdWVyeQorKiBAcmV0dXJuIFRSVUUgaWYgZm10IGlz
IHNldCB0byBwZXJmb3JtIGxlbmllbnQgcGFyc2luZywgRkFMU0Ugb3RoZXJ3aXNlLgorKiBAc2Vl
IHVkYXRfc2V0TGVuaWVudAorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBVQm9vbCBV
X0VYUE9SVDIgCit1ZGF0X2lzTGVuaWVudChjb25zdCBVRGF0ZUZvcm1hdCogZm10KTsKKworLyoq
CisqIFNwZWNpZnkgd2hldGhlciBhbiBVRGF0ZUZvcm1hdCB3aWxsIHBlcmZvcm0gbGVuaWVudCBw
YXJzaW5nLgorKiBXaXRoIGxlbmllbnQgcGFyc2luZywgdGhlIHBhcnNlciBtYXkgdXNlIGhldXJp
c3RpY3MgdG8gaW50ZXJwcmV0IGlucHV0cyB0aGF0IGRvIG5vdAorKiBwcmVjaXNlbHkgbWF0Y2gg
dGhlIHBhdHRlcm4uIFdpdGggc3RyaWN0IHBhcnNpbmcsIGlucHV0cyBtdXN0IG1hdGNoIHRoZSBw
YXR0ZXJuLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gc2V0CisqIEBwYXJhbSBpc0xl
bmllbnQgVFJVRSBpZiBmbXQgc2hvdWxkIHBlcmZvcm0gbGVuaWVudCBwYXJzaW5nLCBGQUxTRSBv
dGhlcndpc2UuCisqIEBzZWUgZGF0X2lzTGVuaWVudAorKiBAc3RhYmxlIElDVSAyLjAKKyovCitV
X1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VkYXRfc2V0TGVuaWVudCggICAgVURhdGVGb3JtYXQq
ICAgIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgVUJvb2wgICAgICAgICAgaXNMZW5pZW50KTsK
KworLyoqCisqIEdldCB0aGUgVUNhbGVuZGFyIGFzc29jaWF0ZWQgd2l0aCBhbiBVRGF0ZUZvcm1h
dC4KKyogQSBVRGF0ZUZvcm1hdCB1c2VzIGEgVUNhbGVuZGFyIHRvIGNvbnZlcnQgYSByYXcgdmFs
dWUgdG8sIGZvciBleGFtcGxlLAorKiB0aGUgZGF5IG9mIHRoZSB3ZWVrLgorKiBAcGFyYW0gZm10
IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisqIEByZXR1cm4gQSBwb2ludGVyIHRvIHRoZSBVQ2Fs
ZW5kYXIgdXNlZCBieSBmbXQuCisqIEBzZWUgdWRhdF9zZXRDYWxlbmRhcgorKiBAc3RhYmxlIElD
VSAyLjAKKyovCitVX1NUQUJMRSBjb25zdCBVQ2FsZW5kYXIqIFVfRVhQT1JUMiAKK3VkYXRfZ2V0
Q2FsZW5kYXIoY29uc3QgVURhdGVGb3JtYXQqIGZtdCk7CisKKy8qKgorKiBTZXQgdGhlIFVDYWxl
bmRhciBhc3NvY2lhdGVkIHdpdGggYW4gVURhdGVGb3JtYXQuCisqIEEgVURhdGVGb3JtYXQgdXNl
cyBhIFVDYWxlbmRhciB0byBjb252ZXJ0IGEgcmF3IHZhbHVlIHRvLCBmb3IgZXhhbXBsZSwKKyog
dGhlIGRheSBvZiB0aGUgd2Vlay4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHNldC4K
KyogQHBhcmFtIGNhbGVuZGFyVG9TZXQgQSBwb2ludGVyIHRvIGFuIFVDYWxlbmRhciB0byBiZSB1
c2VkIGJ5IGZtdC4KKyogQHNlZSB1ZGF0X3NldENhbGVuZGFyCisqIEBzdGFibGUgSUNVIDIuMAor
Ki8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWRhdF9zZXRDYWxlbmRhciggICAgICAgICAg
ICBVRGF0ZUZvcm1hdCogICAgZm10LAorICAgICAgICAgICAgICAgICAgICBjb25zdCAgIFVDYWxl
bmRhciogICAgICBjYWxlbmRhclRvU2V0KTsKKworLyoqCisqIEdldCB0aGUgVU51bWJlckZvcm1h
dCBhc3NvY2lhdGVkIHdpdGggYW4gVURhdGVGb3JtYXQuCisqIEEgVURhdGVGb3JtYXQgdXNlcyBh
IFVOdW1iZXJGb3JtYXQgdG8gZm9ybWF0IG51bWJlcnMgd2l0aGluIGEgZGF0ZSwKKyogZm9yIGV4
YW1wbGUgdGhlIGRheSBudW1iZXIuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBxdWVy
eS4KKyogQHJldHVybiBBIHBvaW50ZXIgdG8gdGhlIFVOdW1iZXJGb3JtYXQgdXNlZCBieSBmbXQg
dG8gZm9ybWF0IG51bWJlcnMuCisqIEBzZWUgdWRhdF9zZXROdW1iZXJGb3JtYXQKKyogQHN0YWJs
ZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgY29uc3QgVU51bWJlckZvcm1hdCogVV9FWFBPUlQyIAor
dWRhdF9nZXROdW1iZXJGb3JtYXQoY29uc3QgVURhdGVGb3JtYXQqIGZtdCk7CisKKy8qKgorKiBT
ZXQgdGhlIFVOdW1iZXJGb3JtYXQgYXNzb2NpYXRlZCB3aXRoIGFuIFVEYXRlRm9ybWF0LgorKiBB
IFVEYXRlRm9ybWF0IHVzZXMgYSBVTnVtYmVyRm9ybWF0IHRvIGZvcm1hdCBudW1iZXJzIHdpdGhp
biBhIGRhdGUsCisqIGZvciBleGFtcGxlIHRoZSBkYXkgbnVtYmVyLgorKiBAcGFyYW0gZm10IFRo
ZSBmb3JtYXR0ZXIgdG8gc2V0LgorKiBAcGFyYW0gbnVtYmVyRm9ybWF0VG9TZXQgQSBwb2ludGVy
IHRvIHRoZSBVTnVtYmVyRm9ybWF0IHRvIGJlIHVzZWQgYnkgZm10IHRvIGZvcm1hdCBudW1iZXJz
LgorKiBAc2VlIHVkYXRfZ2V0TnVtYmVyRm9ybWF0CisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1Vf
U1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWRhdF9zZXROdW1iZXJGb3JtYXQoICAgICAgICAgICAg
VURhdGVGb3JtYXQqICAgIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0ICAgVU51
bWJlckZvcm1hdCogIG51bWJlckZvcm1hdFRvU2V0KTsKKworLyoqCisqIEdldCBhIGxvY2FsZSBm
b3Igd2hpY2ggZGF0ZS90aW1lIGZvcm1hdHRpbmcgcGF0dGVybnMgYXJlIGF2YWlsYWJsZS4KKyog
QSBVRGF0ZUZvcm1hdCBpbiBhIGxvY2FsZSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIHdpbGwg
cGVyZm9ybSB0aGUgY29ycmVjdAorKiBmb3JtYXR0aW5nIGFuZCBwYXJzaW5nIGZvciB0aGUgbG9j
YWxlLgorKiBAcGFyYW0gbG9jYWxlSW5kZXggVGhlIGluZGV4IG9mIHRoZSBkZXNpcmVkIGxvY2Fs
ZS4KKyogQHJldHVybiBBIGxvY2FsZSBmb3Igd2hpY2ggZGF0ZS90aW1lIGZvcm1hdHRpbmcgcGF0
dGVybnMgYXJlIGF2YWlsYWJsZSwgb3IgMCBpZiBub25lLgorKiBAc2VlIHVkYXRfY291bnRBdmFp
bGFibGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgY29uc3QgY2hhciogVV9FWFBP
UlQyIAordWRhdF9nZXRBdmFpbGFibGUoaW50MzJfdCBsb2NhbGVJbmRleCk7CisKKy8qKgorKiBE
ZXRlcm1pbmUgaG93IG1hbnkgbG9jYWxlcyBoYXZlIGRhdGUvdGltZSAgZm9ybWF0dGluZyBwYXR0
ZXJucyBhdmFpbGFibGUuCisqIFRoaXMgZnVuY3Rpb24gaXMgbW9zdCB1c2VmdWwgYXMgZGV0ZXJt
aW5pbmcgdGhlIGxvb3AgZW5kaW5nIGNvbmRpdGlvbiBmb3IKKyogY2FsbHMgdG8ge0BsaW5rICN1
ZGF0X2dldEF2YWlsYWJsZSB9LgorKiBAcmV0dXJuIFRoZSBudW1iZXIgb2YgbG9jYWxlcyBmb3Ig
d2hpY2ggZGF0ZS90aW1lIGZvcm1hdHRpbmcgcGF0dGVybnMgYXJlIGF2YWlsYWJsZS4KKyogQHNl
ZSB1ZGF0X2dldEF2YWlsYWJsZQorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBpbnQz
Ml90IFVfRVhQT1JUMiAKK3VkYXRfY291bnRBdmFpbGFibGUodm9pZCk7CisKKy8qKgorKiBHZXQg
dGhlIHllYXIgcmVsYXRpdmUgdG8gd2hpY2ggYWxsIDItZGlnaXQgeWVhcnMgYXJlIGludGVycHJl
dGVkLgorKiBGb3IgZXhhbXBsZSwgaWYgdGhlIDItZGlnaXQgc3RhcnQgeWVhciBpcyAyMTAwLCB0
aGUgeWVhciA5OSB3aWxsIGJlCisqIGludGVycHJldGVkIGFzIDIxOTkuCisqIEBwYXJhbSBmbXQg
VGhlIGZvcm1hdHRlciB0byBxdWVyeS4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4g
VUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUgeWVhciByZWxh
dGl2ZSB0byB3aGljaCBhbGwgMi1kaWdpdCB5ZWFycyBhcmUgaW50ZXJwcmV0ZWQuCisqIEBzZWUg
dWRhdF9TZXQyRGlnaXRZZWFyU3RhcnQKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUg
VURhdGUgVV9FWFBPUlQyIAordWRhdF9nZXQyRGlnaXRZZWFyU3RhcnQoICAgIGNvbnN0ICAgVURh
dGVGb3JtYXQgICAgICpmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBV
RXJyb3JDb2RlICAgICAgKnN0YXR1cyk7CisKKy8qKgorKiBTZXQgdGhlIHllYXIgcmVsYXRpdmUg
dG8gd2hpY2ggYWxsIDItZGlnaXQgeWVhcnMgd2lsbCBiZSBpbnRlcnByZXRlZC4KKyogRm9yIGV4
YW1wbGUsIGlmIHRoZSAyLWRpZ2l0IHN0YXJ0IHllYXIgaXMgMjEwMCwgdGhlIHllYXIgOTkgd2ls
bCBiZQorKiBpbnRlcnByZXRlZCBhcyAyMTk5LgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIg
dG8gc2V0LgorKiBAcGFyYW0gZCBUaGUgeWVhciByZWxhdGl2ZSB0byB3aGljaCBhbGwgMi1kaWdp
dCB5ZWFycyB3aWxsIGJlIGludGVycHJldGVkLgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0
byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAc2VlIHVkYXRfU2V0MkRp
Z2l0WWVhclN0YXJ0CisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBP
UlQyIAordWRhdF9zZXQyRGlnaXRZZWFyU3RhcnQoICAgIFVEYXRlRm9ybWF0ICAgICAqZm10LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVEYXRlICAgICAgICAgICBkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgICAqc3RhdHVzKTsKKworLyoqCisqIEV4
dHJhY3QgdGhlIHBhdHRlcm4gZnJvbSBhIFVEYXRlRm9ybWF0LgorKiBUaGUgcGF0dGVybiB3aWxs
IGZvbGxvdyB0aGUgcGF0dGVybiBzeW50YXggcnVsZXMuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1h
dHRlciB0byBxdWVyeS4KKyogQHBhcmFtIGxvY2FsaXplZCBUUlVFIGlmIHRoZSBwYXR0ZXJuIHNo
b3VsZCBiZSBsb2NhbGl6ZWQsIEZBTFNFIG90aGVyd2lzZS4KKyogQHBhcmFtIHJlc3VsdCBBIHBv
aW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgcGF0dGVybi4KKyogQHBhcmFtIHJlc3Vs
dExlbmd0aCBUaGUgbWF4aW11bSBzaXplIG9mIHJlc3VsdC4KKyogQHBhcmFtIHN0YXR1cyBBIHBv
aW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBU
aGUgdG90YWwgYnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVyIHRoYW4gcmVzdWx0TGVuZ3Ro
LCB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisqIEBzZWUgdWRhdF9hcHBseVBhdHRlcm4KKyog
QHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1ZGF0X3Rv
UGF0dGVybiggICAgY29uc3QgICBVRGF0ZUZvcm1hdCAgICAgKmZtdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFVCb29sICAgICAgICAgIGxvY2FsaXplZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFVDaGFyICAgICAgICAgICAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50
MzJfdCAgICAgICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJv
ckNvZGUgICAgICAqc3RhdHVzKTsKKworLyoqCisqIFNldCB0aGUgcGF0dGVybiB1c2VkIGJ5IGFu
IFVEYXRlRm9ybWF0LgorKiBUaGUgcGF0dGVybiBzaG91bGQgZm9sbG93IHRoZSBwYXR0ZXJuIHN5
bnRheCBydWxlcy4KKyogQHBhcmFtIGZvcm1hdCBUaGUgZm9ybWF0dGVyIHRvIHNldC4KKyogQHBh
cmFtIGxvY2FsaXplZCBUUlVFIGlmIHRoZSBwYXR0ZXJuIGlzIGxvY2FsaXplZCwgRkFMU0Ugb3Ro
ZXJ3aXNlLgorKiBAcGFyYW0gcGF0dGVybiBUaGUgbmV3IHBhdHRlcm4KKyogQHBhcmFtIHBhdHRl
cm5MZW5ndGggVGhlIGxlbmd0aCBvZiBwYXR0ZXJuLCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQu
CisqIEBzZWUgdWRhdF90b1BhdHRlcm4KKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUg
dm9pZCBVX0VYUE9SVDIgCit1ZGF0X2FwcGx5UGF0dGVybiggICAgICAgICAgICBVRGF0ZUZvcm1h
dCAgICAgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCAgICAgICAg
ICBsb2NhbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ICAgVUNoYXIgICAgICAgICAg
ICpwYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICBw
YXR0ZXJuTGVuZ3RoKTsKKworLyoqIAorICogVGhlIHBvc3NpYmxlIHR5cGVzIG9mIGRhdGUgZm9y
bWF0IHN5bWJvbHMgCisgKiBAc3RhYmxlIElDVSAyLjYKKyAqLwordHlwZWRlZiBlbnVtIFVEYXRl
Rm9ybWF0U3ltYm9sVHlwZSB7CisgICAgLyoqIFRoZSBlcmEgbmFtZXMsIGZvciBleGFtcGxlIEFE
ICovCisgICAgVURBVF9FUkFTLAorICAgIC8qKiBUaGUgbW9udGggbmFtZXMsIGZvciBleGFtcGxl
IEZlYnJ1YXJ5ICovCisgICAgVURBVF9NT05USFMsCisgICAgLyoqIFRoZSBzaG9ydCBtb250aCBu
YW1lcywgZm9yIGV4YW1wbGUgRmViLiAqLworICAgIFVEQVRfU0hPUlRfTU9OVEhTLAorICAgIC8q
KiBUaGUgd2Vla2RheSBuYW1lcywgZm9yIGV4YW1wbGUgTW9uZGF5ICovCisgICAgVURBVF9XRUVL
REFZUywKKyAgICAvKiogVGhlIHNob3J0IHdlZWtkYXkgbmFtZXMsIGZvciBleGFtcGxlIE1vbi4g
Ki8KKyAgICBVREFUX1NIT1JUX1dFRUtEQVlTLAorICAgIC8qKiBUaGUgQU0vUE0gbmFtZXMsIGZv
ciBleGFtcGxlIEFNICovCisgICAgVURBVF9BTV9QTVMsCisgICAgLyoqIFRoZSBsb2NhbGl6ZWQg
Y2hhcmFjdGVycyAqLworICAgIFVEQVRfTE9DQUxJWkVEX0NIQVJTLAorICAgIC8qKiBUaGUgbG9u
ZyBlcmEgbmFtZXMsIGZvciBleGFtcGxlIEFubm8gRG9taW5pICovCisgICAgVURBVF9FUkFfTkFN
RVMsCisgICAgLyoqIFRoZSBuYXJyb3cgbW9udGggbmFtZXMsIGZvciBleGFtcGxlIEYgKi8KKyAg
ICBVREFUX05BUlJPV19NT05USFMsCisgICAgLyoqIFRoZSBuYXJyb3cgd2Vla2RheSBuYW1lcywg
Zm9yIGV4YW1wbGUgTiAqLworICAgIFVEQVRfTkFSUk9XX1dFRUtEQVlTLAorICAgIC8qKiBTdGFu
ZGFsb25lIGNvbnRleHQgdmVyc2lvbnMgb2YgbW9udGhzICovCisgICAgVURBVF9TVEFOREFMT05F
X01PTlRIUywKKyAgICBVREFUX1NUQU5EQUxPTkVfU0hPUlRfTU9OVEhTLAorICAgIFVEQVRfU1RB
TkRBTE9ORV9OQVJST1dfTU9OVEhTLAorICAgIC8qKiBTdGFuZGFsb25lIGNvbnRleHQgdmVyc2lv
bnMgb2Ygd2Vla2RheXMgKi8KKyAgICBVREFUX1NUQU5EQUxPTkVfV0VFS0RBWVMsCisgICAgVURB
VF9TVEFOREFMT05FX1NIT1JUX1dFRUtEQVlTLAorICAgIFVEQVRfU1RBTkRBTE9ORV9OQVJST1df
V0VFS0RBWVMsCisgICAgLyoqIFRoZSBxdWFydGVycywgZm9yIGV4YW1wbGUgMXN0IFF1YXJ0ZXIg
Ki8KKyAgICBVREFUX1FVQVJURVJTLAorICAgIC8qKiBUaGUgc2hvcnQgcXVhcnRlciBuYW1lcywg
Zm9yIGV4YW1wbGUgUTEgKi8KKyAgICBVREFUX1NIT1JUX1FVQVJURVJTLAorICAgIC8qKiBTdGFu
ZGFsb25lIGNvbnRleHQgdmVyc2lvbnMgb2YgcXVhcnRlcnMgKi8KKyAgICBVREFUX1NUQU5EQUxP
TkVfUVVBUlRFUlMsCisgICAgVURBVF9TVEFOREFMT05FX1NIT1JUX1FVQVJURVJTCisKK30gVURh
dGVGb3JtYXRTeW1ib2xUeXBlOworCitzdHJ1Y3QgVURhdGVGb3JtYXRTeW1ib2xzOworLyoqIERh
dGUgZm9ybWF0IHN5bWJvbHMuCisgKiAgRm9yIHVzYWdlIGluIEMgcHJvZ3JhbXMuCisgKiAgQHN0
YWJsZSBJQ1UgMi42CisgKi8KK3R5cGVkZWYgc3RydWN0IFVEYXRlRm9ybWF0U3ltYm9scyBVRGF0
ZUZvcm1hdFN5bWJvbHM7CisKKy8qKgorKiBHZXQgdGhlIHN5bWJvbHMgYXNzb2NpYXRlZCB3aXRo
IGFuIFVEYXRlRm9ybWF0LgorKiBUaGUgc3ltYm9scyBhcmUgd2hhdCBhIFVEYXRlRm9ybWF0IHVz
ZXMgdG8gcmVwcmVzZW50IGxvY2FsZS1zcGVjaWZpYyBkYXRhLAorKiBmb3IgZXhhbXBsZSBtb250
aCBvciBkYXkgbmFtZXMuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBxdWVyeS4KKyog
QHBhcmFtIHR5cGUgVGhlIHR5cGUgb2Ygc3ltYm9scyB0byBnZXQuICBPbmUgb2YgVURBVF9FUkFT
LCBVREFUX01PTlRIUywgVURBVF9TSE9SVF9NT05USFMsCisqIFVEQVRfV0VFS0RBWVMsIFVEQVRf
U0hPUlRfV0VFS0RBWVMsIFVEQVRfQU1fUE1TLCBvciBVREFUX0xPQ0FMSVpFRF9DSEFSUworKiBA
cGFyYW0gc3ltYm9sSW5kZXggVGhlIGRlc2lyZWQgc3ltYm9sIG9mIHR5cGUgdHlwZS4KKyogQHBh
cmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgcGF0dGVybi4K
KyogQHBhcmFtIHJlc3VsdExlbmd0aCBUaGUgbWF4aW11bSBzaXplIG9mIHJlc3VsdC4KKyogQHBh
cmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJv
cnMKKyogQHJldHVybiBUaGUgdG90YWwgYnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVyIHRo
YW4gcmVzdWx0TGVuZ3RoLCB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisqIEBzZWUgdWRhdF9j
b3VudFN5bWJvbHMKKyogQHNlZSB1ZGF0X3NldFN5bWJvbHMKKyogQHN0YWJsZSBJQ1UgMi4wCisq
LworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1ZGF0X2dldFN5bWJvbHMoY29uc3QgICBV
RGF0ZUZvcm1hdCAgICAgICAgICAgICAqZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgVURh
dGVGb3JtYXRTeW1ib2xUeXBlICAgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludDMy
X3QgICAgICAgICAgICAgICAgIHN5bWJvbEluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAg
VUNoYXIgICAgICAgICAgICAgICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGludDMyX3QgICAgICAgICAgICAgICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFVFcnJvckNvZGUgICAgICAgICAgICAgICpzdGF0dXMpOworCisvKioKKyogQ291bnQg
dGhlIG51bWJlciBvZiBwYXJ0aWN1bGFyIHN5bWJvbHMgZm9yIGFuIFVEYXRlRm9ybWF0LgorKiBU
aGlzIGZ1bmN0aW9uIGlzIG1vc3QgdXNlZnVsIGFzIGZvciBkZXRlbWluaW5nIHRoZSBsb29wIHRl
cm1pbmF0aW9uIGNvbmRpdGlvbgorKiBmb3IgY2FsbHMgdG8ge0BsaW5rICN1ZGF0X2dldFN5bWJv
bHMgfS4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHF1ZXJ5LgorKiBAcGFyYW0gdHlw
ZSBUaGUgdHlwZSBvZiBzeW1ib2xzIHRvIGNvdW50LiAgT25lIG9mIFVEQVRfRVJBUywgVURBVF9N
T05USFMsIFVEQVRfU0hPUlRfTU9OVEhTLAorKiBVREFUX1dFRUtEQVlTLCBVREFUX1NIT1JUX1dF
RUtEQVlTLCBVREFUX0FNX1BNUywgb3IgVURBVF9MT0NBTElaRURfQ0hBUlMKKyogQHJldHVybiBU
aGUgbnVtYmVyIG9mIHN5bWJvbHMgb2YgdHlwZSB0eXBlLgorKiBAc2VlIHVkYXRfZ2V0U3ltYm9s
cworKiBAc2VlIHVkYXRfc2V0U3ltYm9scworKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJM
RSBpbnQzMl90IFVfRVhQT1JUMiAKK3VkYXRfY291bnRTeW1ib2xzKCAgICBjb25zdCAgICBVRGF0
ZUZvcm1hdCAgICAgICAgICAgICAgICAqZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVEYXRlRm9ybWF0U3ltYm9sVHlwZSAgICB0eXBlKTsKKworLyoqCisqIFNldCB0aGUgc3ltYm9s
cyBhc3NvY2lhdGVkIHdpdGggYW4gVURhdGVGb3JtYXQuCisqIFRoZSBzeW1ib2xzIGFyZSB3aGF0
IGEgVURhdGVGb3JtYXQgdXNlcyB0byByZXByZXNlbnQgbG9jYWxlLXNwZWNpZmljIGRhdGEsCisq
IGZvciBleGFtcGxlIG1vbnRoIG9yIGRheSBuYW1lcy4KKyogQHBhcmFtIGZvcm1hdCBUaGUgZm9y
bWF0dGVyIHRvIHNldAorKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBzeW1ib2xzIHRvIHNldC4g
IE9uZSBvZiBVREFUX0VSQVMsIFVEQVRfTU9OVEhTLCBVREFUX1NIT1JUX01PTlRIUywKKyogVURB
VF9XRUVLREFZUywgVURBVF9TSE9SVF9XRUVLREFZUywgVURBVF9BTV9QTVMsIG9yIFVEQVRfTE9D
QUxJWkVEX0NIQVJTCisqIEBwYXJhbSBzeW1ib2xJbmRleCBUaGUgaW5kZXggb2YgdGhlIHN5bWJv
bCB0byBzZXQgb2YgdHlwZSB0eXBlLgorKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyB2YWx1ZQorKiBA
cGFyYW0gdmFsdWVMZW5ndGggVGhlIGxlbmd0aCBvZiB2YWx1ZSwgb3IgLTEgaWYgbnVsbC10ZXJt
aW5hdGVkCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVj
ZWl2ZSBhbnkgZXJyb3JzCisqIEBzZWUgdWRhdF9nZXRTeW1ib2xzCisqIEBzZWUgdWRhdF9jb3Vu
dFN5bWJvbHMKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIg
Cit1ZGF0X3NldFN5bWJvbHMoICAgIFVEYXRlRm9ybWF0ICAgICAgICAgICAgICpmb3JtYXQsCisg
ICAgICAgICAgICAgICAgICAgIFVEYXRlRm9ybWF0U3ltYm9sVHlwZSAgIHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgICAgICAgIHN5bWJvbEluZGV4LAorICAgICAg
ICAgICAgICAgICAgICBVQ2hhciAgICAgICAgICAgICAgICAgICAqdmFsdWUsCisgICAgICAgICAg
ICAgICAgICAgIGludDMyX3QgICAgICAgICAgICAgICAgIHZhbHVlTGVuZ3RoLAorICAgICAgICAg
ICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgICAgICAgICAqc3RhdHVzKTsKKworLyoqCisgKiBH
ZXQgdGhlIGxvY2FsZSBmb3IgdGhpcyBkYXRlIGZvcm1hdCBvYmplY3QuCisgKiBZb3UgY2FuIGNo
b29zZSBiZXR3ZWVuIHZhbGlkIGFuZCBhY3R1YWwgbG9jYWxlLgorICogQHBhcmFtIGZtdCBUaGUg
Zm9ybWF0dGVyIHRvIGdldCB0aGUgbG9jYWxlIGZyb20KKyAqIEBwYXJhbSB0eXBlIHR5cGUgb2Yg
dGhlIGxvY2FsZSB3ZSdyZSBsb29raW5nIGZvciAodmFsaWQgb3IgYWN0dWFsKSAKKyAqIEBwYXJh
bSBzdGF0dXMgZXJyb3IgY29kZSBmb3IgdGhlIG9wZXJhdGlvbgorICogQHJldHVybiB0aGUgbG9j
YWxlIG5hbWUKKyAqIEBzdGFibGUgSUNVIDIuOAorICovCitVX1NUQUJMRSBjb25zdCBjaGFyKiBV
X0VYUE9SVDIKK3VkYXRfZ2V0TG9jYWxlQnlUeXBlKGNvbnN0IFVEYXRlRm9ybWF0ICpmbXQsCisg
ICAgICAgICAgICAgICAgICAgICBVTG9jRGF0YUxvY2FsZVR5cGUgdHlwZSwKKyAgICAgICAgICAg
ICAgICAgICAgIFVFcnJvckNvZGUqIHN0YXR1cyk7IAorCisvKioKKyogRXh0cmFjdCB0aGUgZGF0
ZSBwYXR0ZXJuIGZyb20gYSBVRGF0ZUZvcm1hdCBzZXQgZm9yIHJlbGF0aXZlIGRhdGUgZm9ybWF0
dGluZy4KKyogVGhlIHBhdHRlcm4gd2lsbCBmb2xsb3cgdGhlIHBhdHRlcm4gc3ludGF4IHJ1bGVz
LgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisqIEBwYXJhbSByZXN1bHQg
QSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIHBhdHRlcm4uCisqIEBwYXJhbSBy
ZXN1bHRMZW5ndGggVGhlIG1heGltdW0gc2l6ZSBvZiByZXN1bHQuCisqIEBwYXJhbSBzdGF0dXMg
QSBwb2ludGVyIHRvIGEgVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVy
biBUaGUgdG90YWwgYnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVyIHRoYW4gcmVzdWx0TGVu
Z3RoLCB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisqIEBzZWUgdWRhdF9hcHBseVBhdHRlcm5S
ZWxhdGl2ZQorKiBAaW50ZXJuYWwgSUNVIDQuMiB0ZWNobm9sb2d5IHByZXZpZXcKKyovCitVX0lO
VEVSTkFMIGludDMyX3QgVV9FWFBPUlQyIAordWRhdF90b1BhdHRlcm5SZWxhdGl2ZURhdGUoY29u
c3QgVURhdGVGb3JtYXQgKmZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyICAg
ICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAg
ICAgICAgICByZXN1bHRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JD
b2RlICAgICAgICAqc3RhdHVzKTsKKworLyoqCisqIEV4dHJhY3QgdGhlIHRpbWUgcGF0dGVybiBm
cm9tIGEgVURhdGVGb3JtYXQgc2V0IGZvciByZWxhdGl2ZSBkYXRlIGZvcm1hdHRpbmcuCisqIFRo
ZSBwYXR0ZXJuIHdpbGwgZm9sbG93IHRoZSBwYXR0ZXJuIHN5bnRheCBydWxlcy4KKyogQHBhcmFt
IGZtdCBUaGUgZm9ybWF0dGVyIHRvIHF1ZXJ5LgorKiBAcGFyYW0gcmVzdWx0IEEgcG9pbnRlciB0
byBhIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBwYXR0ZXJuLgorKiBAcGFyYW0gcmVzdWx0TGVuZ3Ro
IFRoZSBtYXhpbXVtIHNpemUgb2YgcmVzdWx0LgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0
byBhIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHRvdGFs
IGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91
dHB1dCB3YXMgdHJ1bmNhdGVkLgorKiBAc2VlIHVkYXRfYXBwbHlQYXR0ZXJuUmVsYXRpdmUKKyog
QGludGVybmFsIElDVSA0LjIgdGVjaG5vbG9neSBwcmV2aWV3CisqLworVV9JTlRFUk5BTCBpbnQz
Ml90IFVfRVhQT1JUMiAKK3VkYXRfdG9QYXR0ZXJuUmVsYXRpdmVUaW1lKGNvbnN0IFVEYXRlRm9y
bWF0ICpmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhciAgICAgICAgICAgICAq
cmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgcmVz
dWx0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICAg
KnN0YXR1cyk7CisKKy8qKgorKiBTZXQgdGhlIGRhdGUgJiB0aW1lIHBhdHRlcm5zIHVzZWQgYnkg
YSBVRGF0ZUZvcm1hdCBzZXQgZm9yIHJlbGF0aXZlIGRhdGUgZm9ybWF0dGluZy4KKyogVGhlIHBh
dHRlcm5zIHNob3VsZCBmb2xsb3cgdGhlIHBhdHRlcm4gc3ludGF4IHJ1bGVzLgorKiBAcGFyYW0g
Zm9ybWF0IFRoZSBmb3JtYXR0ZXIgdG8gc2V0LgorKiBAcGFyYW0gZGF0ZVBhdHRlcm4gVGhlIG5l
dyBkYXRlIHBhdHRlcm4KKyogQHBhcmFtIGRhdGVQYXR0ZXJuTGVuZ3RoIFRoZSBsZW5ndGggb2Yg
ZGF0ZVBhdHRlcm4sIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyogQHBhcmFtIHRpbWVQYXR0
ZXJuIFRoZSBuZXcgdGltZSBwYXR0ZXJuCisqIEBwYXJhbSB0aW1lUGF0dGVybkxlbmd0aCBUaGUg
bGVuZ3RoIG9mIHRpbWVQYXR0ZXJuLCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisqIEBwYXJh
bSBzdGF0dXMgQSBwb2ludGVyIHRvIGEgVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMK
KyogQHNlZSB1ZGF0X3RvUGF0dGVyblJlbGF0aXZlRGF0ZSwgdWRhdF90b1BhdHRlcm5SZWxhdGl2
ZVRpbWUKKyogQGludGVybmFsIElDVSA0LjIgdGVjaG5vbG9neSBwcmV2aWV3CisqLworVV9JTlRF
Uk5BTCB2b2lkIFVfRVhQT1JUMiAKK3VkYXRfYXBwbHlQYXR0ZXJuUmVsYXRpdmUoVURhdGVGb3Jt
YXQgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgKmRhdGVQ
YXR0ZXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICBkYXRlUGF0dGVy
bkxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgKnRpbWVQYXR0
ZXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICB0aW1lUGF0dGVybkxl
bmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgKnN0YXR1cyk7CisK
KworI2VuZGlmIC8qICNpZiAhVUNPTkZJR19OT19GT1JNQVRUSU5HICovCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3VtaXNjLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdW1pc2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kODU0NTFm
Yzc2N2MwNTgzNWY2YzE1ZjU2NmYzNTYyZTJkNGFmODM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3VtaXNjLmgKQEAgLTAsMCArMSw2MCBAQAor
LyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioKKyogICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgSW50ZXJuYXRp
b25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwg
UmlnaHRzIFJlc2VydmVkLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIGZpbGUgbmFtZTogIHVtaXNjLmgK
KyogICBlbmNvZGluZzogICBVUy1BU0NJSQorKiAgIHRhYiBzaXplOiAgIDggKG5vdCB1c2VkKQor
KiAgIGluZGVudGF0aW9uOjQKKyoKKyogICBjcmVhdGVkIG9uOiAxOTk5b2N0MTUKKyogICBjcmVh
dGVkIGJ5OiBNYXJrdXMgVy4gU2NoZXJlcgorKi8KKworI2lmbmRlZiBVTUlTQ19ICisjZGVmaW5l
IFVNSVNDX0gKKworI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCisKKy8qKgorICogXGZpbGUK
KyAqIFxicmllZiAgQyBBUEk6bWlzYyBkZWZpbml0aW9ucyAKKyAqCisgKiAgVGhpcyBmaWxlIGNv
bnRhaW5zIG1pc2NlbGxhbmVvdXMgZGVmaW5pdGlvbnMgZm9yIHRoZSBDIEFQSXMuIAorICovCisK
K1VfQ0RFQ0xfQkVHSU4KKworLyoqIEEgc3RydWN0IHJlcHJlc2VudGluZyBhIHJhbmdlIG9mIHRl
eHQgY29udGFpbmluZyBhIHNwZWNpZmljIGZpZWxkIAorICogIEBzdGFibGUgSUNVIDIuMAorICov
Cit0eXBlZGVmIHN0cnVjdCBVRmllbGRQb3NpdGlvbiB7CisgIC8qKgorICAgKiBUaGUgZmllbGQg
CisgICAqIEBzdGFibGUgSUNVIDIuMAorICAgKi8KKyAgaW50MzJfdCBmaWVsZDsKKyAgLyoqCisg
ICAqIFRoZSBzdGFydCBvZiB0aGUgdGV4dCByYW5nZSBjb250YWluaW5nIGZpZWxkIAorICAgKiBA
c3RhYmxlIElDVSAyLjAKKyAgICovCisgIGludDMyX3QgYmVnaW5JbmRleDsKKyAgLyoqIAorICAg
KiBUaGUgbGltaXQgb2YgdGhlIHRleHQgcmFuZ2UgY29udGFpbmluZyBmaWVsZCAKKyAgICogQHN0
YWJsZSBJQ1UgMi4wCisgICAqLworICBpbnQzMl90IGVuZEluZGV4OworfSBVRmllbGRQb3NpdGlv
bjsKKworI2lmICFVQ09ORklHX05PX1NFUlZJQ0UKKy8qKgorICogT3BhcXVlIHR5cGUgcmV0dXJu
ZWQgYnkgcmVnaXN0ZXJJbnN0YW5jZSwgcmVnaXN0ZXJGYWN0b3J5IGFuZCB1bnJlZ2lzdGVyIGZv
ciBzZXJ2aWNlIHJlZ2lzdHJhdGlvbi4KKyAqIEBzdGFibGUgSUNVIDIuNgorICovCit0eXBlZGVm
IGNvbnN0IHZvaWQqIFVSZWdpc3RyeUtleTsKKyNlbmRpZgorCitVX0NERUNMX0VORAorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29kZS91bnVtLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdW51bS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEx
MDJiYWI1OGIzZDFiYjJlMmIyMDgyY2I1NTg5YzVkZGVmZThjYzAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdW51bS5oCkBAIC0wLDAgKzEsOTk5
IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDE5OTctMjAx
MCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJz
LgorKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiBNb2RpZmljYXRpb24gSGlzdG9yeToKKyoKKyog
ICBEYXRlICAgICAgICBOYW1lICAgICAgICBEZXNjcmlwdGlvbgorKiAgIDA2LzI0Lzk5ICAgIGhl
bGVuYSAgICAgIEludGVncmF0ZWQgQWxhbidzIE5GIGVuaGFuY2VtZW50cyBhbmQgSmF2YTIgYnVn
IGZpeGVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaWZuZGVmIF9VTlVNCisjZGVm
aW5lIF9VTlVNCisKKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorCisjaWYgIVVDT05GSUdf
Tk9fRk9STUFUVElORworCisjaW5jbHVkZSAidW5pY29kZS9sb2NhbHBvaW50ZXIuaCIKKyNpbmNs
dWRlICJ1bmljb2RlL3Vsb2MuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VtaXNjLmgiCisjaW5jbHVk
ZSAidW5pY29kZS9wYXJzZWVyci5oIgorLyoqCisgKiBcZmlsZQorICogXGJyaWVmIEMgQVBJOiBO
dW1iZXJGb3JtYXQKKyAqCisgKiA8aDI+IE51bWJlciBGb3JtYXQgQyBBUEkgPC9oMj4KKyAqCisg
KiBOdW1iZXIgRm9ybWF0IEMgQVBJICBQcm92aWRlcyBmdW5jdGlvbnMgZm9yCisgKiBmb3JtYXR0
aW5nIGFuZCBwYXJzaW5nIGEgbnVtYmVyLiAgQWxzbyBwcm92aWRlcyBtZXRob2RzIGZvcgorICog
ZGV0ZXJtaW5pbmcgd2hpY2ggbG9jYWxlcyBoYXZlIG51bWJlciBmb3JtYXRzLCBhbmQgd2hhdCB0
aGVpciBuYW1lcworICogYXJlLgorICogPFA+CisgKiBVTnVtYmVyRm9ybWF0IGhlbHBzIHlvdSB0
byBmb3JtYXQgYW5kIHBhcnNlIG51bWJlcnMgZm9yIGFueSBsb2NhbGUuCisgKiBZb3VyIGNvZGUg
Y2FuIGJlIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgb2YgdGhlIGxvY2FsZSBjb252ZW50aW9ucwor
ICogZm9yIGRlY2ltYWwgcG9pbnRzLCB0aG91c2FuZHMtc2VwYXJhdG9ycywgb3IgZXZlbiB0aGUg
cGFydGljdWxhcgorICogZGVjaW1hbCBkaWdpdHMgdXNlZCwgb3Igd2hldGhlciB0aGUgbnVtYmVy
IGZvcm1hdCBpcyBldmVuIGRlY2ltYWwuCisgKiBUaGVyZSBhcmUgZGlmZmVyZW50IG51bWJlciBm
b3JtYXQgc3R5bGVzIGxpa2UgZGVjaW1hbCwgY3VycmVuY3ksCisgKiBwZXJjZW50IGFuZCBzcGVs
bG91dC4KKyAqIDxQPgorICogVG8gZm9ybWF0IGEgbnVtYmVyIGZvciB0aGUgY3VycmVudCBMb2Nh
bGUsIHVzZSBvbmUgb2YgdGhlIHN0YXRpYworICogZmFjdG9yeSBtZXRob2RzOgorICogPHByZT4K
KyAqIFxjb2RlCisgKiAgICBVQ2hhciBteVN0cmluZ1syMF07CisgKiAgICBkb3VibGUgbXlOdW1i
ZXIgPSA3LjA7CisgKiAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAqICAg
IFVOdW1iZXJGb3JtYXQqIG5mID0gdW51bV9vcGVuKFVOVU1fREVGQVVMVCwgTlVMTCwgLTEsIE5V
TEwsIE5VTEwsICZzdGF0dXMpOworICogICAgdW51bV9mb3JtYXREb3VibGUobmYsIG15TnVtYmVy
LCBteVN0cmluZywgMjAsIE5VTEwsICZzdGF0dXMpOworICogICAgcHJpbnRmKCIgRXhhbXBsZSAx
OiAlc1xuIiwgYXVzdHJkdXAobXlTdHJpbmcpICk7IC8vYXVzdHJkdXAoIGEgZnVuY3Rpb24gdXNl
ZCB0byBjb252ZXJ0IFVDaGFyKiB0byBjaGFyKikKKyAqIFxlbmRjb2RlCisgKiA8L3ByZT4KKyAq
IElmIHlvdSBhcmUgZm9ybWF0dGluZyBtdWx0aXBsZSBudW1iZXJzLCBpdCBpcyBtb3JlIGVmZmlj
aWVudCB0byBnZXQKKyAqIHRoZSBmb3JtYXQgYW5kIHVzZSBpdCBtdWx0aXBsZSB0aW1lcyBzbyB0
aGF0IHRoZSBzeXN0ZW0gZG9lc24ndAorICogaGF2ZSB0byBmZXRjaCB0aGUgaW5mb3JtYXRpb24g
YWJvdXQgdGhlIGxvY2FsIGxhbmd1YWdlIGFuZCBjb3VudHJ5CisgKiBjb252ZW50aW9ucyBtdWx0
aXBsZSB0aW1lcy4KKyAqIDxwcmU+CisgKiBcY29kZQorICogdWludDMyX3QgaSwgcmVzdWx0bGVu
Z3RoLCByZXNsZW5uZWVkZWQ7CisgKiBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsK
KyAqIFVGaWVsZFBvc2l0aW9uIHBvczsKKyAqIHVpbnQzMl90IGFbXSA9IHsgMTIzLCAzMzMzLCAt
MTIzNDU2NyB9OworICogY29uc3QgdWludDMyX3QgYV9sZW4gPSBzaXplb2YoYSkgLyBzaXplb2Yo
YVswXSk7CisgKiBVTnVtYmVyRm9ybWF0KiBuZjsKKyAqIFVDaGFyKiByZXN1bHQgPSBOVUxMOwor
ICoKKyAqIG5mID0gdW51bV9vcGVuKFVOVU1fREVGQVVMVCwgTlVMTCwgLTEsIE5VTEwsIE5VTEws
ICZzdGF0dXMpOworICogZm9yIChpID0gMDsgaSA8IGFfbGVuOyBpKyspIHsKKyAqICAgIHJlc3Vs
dGxlbmd0aD0wOworICogICAgcmVzbGVubmVlZGVkPXVudW1fZm9ybWF0KG5mLCBhW2ldLCBOVUxM
LCByZXN1bHRsZW5ndGgsICZwb3MsICZzdGF0dXMpOworICogICAgcmVzdWx0ID0gTlVMTDsKKyAq
ICAgIGlmKHN0YXR1cz09VV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpeworICogICAgICAgc3RhdHVz
PVVfWkVST19FUlJPUjsKKyAqICAgICAgIHJlc3VsdGxlbmd0aD1yZXNsZW5uZWVkZWQrMTsKKyAq
ICAgICAgIHJlc3VsdD0oVUNoYXIqKW1hbGxvYyhzaXplb2YoVUNoYXIpICogcmVzdWx0bGVuZ3Ro
KTsKKyAqICAgICAgIHVudW1fZm9ybWF0KG5mLCBhW2ldLCByZXN1bHQsIHJlc3VsdGxlbmd0aCwg
JnBvcywgJnN0YXR1cyk7CisgKiAgICB9CisgKiAgICBwcmludGYoICIgRXhhbXBsZSAyOiAlc1xu
IiwgYXVzdHJkdXAocmVzdWx0KSk7CisgKiAgICBmcmVlKHJlc3VsdCk7CisgKiB9CisgKiBcZW5k
Y29kZQorICogPC9wcmU+CisgKiBUbyBmb3JtYXQgYSBudW1iZXIgZm9yIGEgZGlmZmVyZW50IExv
Y2FsZSwgc3BlY2lmeSBpdCBpbiB0aGUKKyAqIGNhbGwgdG8gdW51bV9vcGVuKCkuCisgKiA8cHJl
PgorICogXGNvZGUKKyAqICAgICBVTnVtYmVyRm9ybWF0KiBuZiA9IHVudW1fb3BlbihVTlVNX0RF
RkFVTFQsIE5VTEwsIC0xLCAiZnJfRlIiLCBOVUxMLCAmc3VjY2VzcykKKyAqIFxlbmRjb2RlCisg
KiA8L3ByZT4KKyAqIFlvdSBjYW4gdXNlIGEgTnVtYmVyRm9ybWF0IEFQSSB1bnVtX3BhcnNlKCkg
dG8gcGFyc2UuCisgKiA8cHJlPgorICogXGNvZGUKKyAqICAgIFVFcnJvckNvZGUgc3RhdHVzID0g
VV9aRVJPX0VSUk9SOworICogICAgaW50MzJfdCBwb3M9MDsKKyAqICAgIGludDMyX3QgbnVtOwor
ICogICAgbnVtID0gdW51bV9wYXJzZShuZiwgc3RyLCB1X3N0cmxlbihzdHIpLCAmcG9zLCAmc3Rh
dHVzKTsKKyAqIFxlbmRjb2RlCisgKiA8L3ByZT4KKyAqIFVzZSBVTlVNX0RFQ0lNQUwgdG8gZ2V0
IHRoZSBub3JtYWwgbnVtYmVyIGZvcm1hdCBmb3IgdGhhdCBjb3VudHJ5LgorICogVGhlcmUgYXJl
IG90aGVyIHN0YXRpYyBvcHRpb25zIGF2YWlsYWJsZS4gIFVzZSBVTlVNX0NVUlJFTkNZCisgKiB0
byBnZXQgdGhlIGN1cnJlbmN5IG51bWJlciBmb3JtYXQgZm9yIHRoYXQgY291bnRyeS4gIFVzZSBV
TlVNX1BFUkNFTlQKKyAqIHRvIGdldCBhIGZvcm1hdCBmb3IgZGlzcGxheWluZyBwZXJjZW50YWdl
cy4gV2l0aCB0aGlzIGZvcm1hdCwgYQorICogZnJhY3Rpb24gZnJvbSAwLjUzIGlzIGRpc3BsYXll
ZCBhcyA1MyUuCisgKiA8UD4KKyAqIFVzZSBhIHBhdHRlcm4gdG8gY3JlYXRlIGVpdGhlciBhIERl
Y2ltYWxGb3JtYXQgb3IgYSBSdWxlQmFzZWROdW1iZXJGb3JtYXQKKyAqIGZvcm1hdHRlci4gIFRo
ZSBwYXR0ZXJuIG11c3QgY29uZm9ybSB0byB0aGUgc3ludGF4IGRlZmluZWQgZm9yIHRob3NlCisg
KiBmb3JtYXR0ZXJzLgorICogPFA+CisgKiBZb3UgY2FuIGFsc28gY29udHJvbCB0aGUgZGlzcGxh
eSBvZiBudW1iZXJzIHdpdGggc3VjaCBmdW5jdGlvbiBhcworICogdW51bV9nZXRBdHRyaWJ1ZXMo
KSBhbmQgdW51bV9zZXRBdHJpYnV0ZXMoKSwgd2hpY2ggbGV0IHlvdSBzZXQgdGhlCisgKiBtaW1p
bnVtIGZyYWN0aW9uIGRpZ2l0cywgZ3JvdXBpbmcsIGV0Yy4KKyAqIEBzZWUgVU51bWJlckZvcm1h
dEF0dHJpYnV0ZXMgZm9yIG1vcmUgZGV0YWlscworICogPFA+CisgKiBZb3UgY2FuIGFsc28gdXNl
IGZvcm1zIG9mIHRoZSBwYXJzZSBhbmQgZm9ybWF0IG1ldGhvZHMgd2l0aAorICogUGFyc2VQb3Np
dGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gdG8gYWxsb3cgeW91IHRvOgorICogPHVsIHR5cGU9cm91
bmQ+CisgKiAgIDxsaT4oYSkgcHJvZ3Jlc3NpdmVseSBwYXJzZSB0aHJvdWdoIHBpZWNlcyBvZiBh
IHN0cmluZy4KKyAqICAgPGxpPihiKSBhbGlnbiB0aGUgZGVjaW1hbCBwb2ludCBhbmQgb3RoZXIg
YXJlYXMuCisgKiA8L3VsPgorICogPHA+CisgKiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNoYW5n
ZSBvciBzZXQgdGhlIHN5bWJvbHMgdXNlZCBmb3IgYSBwYXJ0aWN1bGFyCisgKiBsb2NhbGUgbGlr
ZSB0aGUgY3VycmVuY3kgc3ltYm9sLCB0aGUgZ3JvdXBpbmcgc2VwZXJhdG9yICwgbW9uZXRhcnkg
c2VwZXJhdG9yCisgKiBldGMgYnkgbWFraW5nIHVzZSBvZiBmdW5jdGlvbnMgdW51bV9zZXRTeW1i
b2xzKCkgYW5kIHVudW1fZ2V0U3ltYm9scygpLgorICovCisKKy8qKiBBIG51bWJlciBmb3JtYXR0
ZXIuCisgKiAgRm9yIHVzYWdlIGluIEMgcHJvZ3JhbXMuCisgKiAgQHN0YWJsZSBJQ1UgMi4wCisg
Ki8KK3R5cGVkZWYgdm9pZCogVU51bWJlckZvcm1hdDsKKworLyoqIFRoZSBwb3NzaWJsZSBudW1i
ZXIgZm9ybWF0IHN0eWxlcy4gCisgKiAgQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3R5cGVkZWYgZW51
bSBVTnVtYmVyRm9ybWF0U3R5bGUgeworICAgIC8qKgorICAgICAqIERlY2ltYWwgZm9ybWF0IGRl
ZmluZWQgYnkgcGF0dGVybiAKKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBV
TlVNX1BBVFRFUk5fREVDSU1BTD0wLAorICAgIC8qKiBEZWNpbWFsIGZvcm1hdCAqLworICAgIFVO
VU1fREVDSU1BTD0xLAorICAgIC8qKiBDdXJyZW5jeSBmb3JtYXQgKi8KKyAgICBVTlVNX0NVUlJF
TkNZLAorICAgIC8qKiBQZXJjZW50IGZvcm1hdCAqLworICAgIFVOVU1fUEVSQ0VOVCwKKyAgICAv
KiogU2NpZW50aWZpYyBmb3JtYXQgKi8KKyAgICBVTlVNX1NDSUVOVElGSUMsCisgICAgLyoqIFNw
ZWxsb3V0IHJ1bGUtYmFzZWQgZm9ybWF0ICovCisgICAgVU5VTV9TUEVMTE9VVCwKKyAgICAvKiog
CisgICAgICogT3JkaW5hbCBydWxlLWJhc2VkIGZvcm1hdCAKKyAgICAgKiBAc3RhYmxlIElDVSAz
LjAKKyAgICAgKi8KKyAgICBVTlVNX09SRElOQUwsCisgICAgLyoqIAorICAgICAqIER1cmF0aW9u
IHJ1bGUtYmFzZWQgZm9ybWF0IAorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAg
IFVOVU1fRFVSQVRJT04sCisgICAgLyoqIAorICAgICAqIE51bWJlcmluZyBzeXN0ZW0gcnVsZS1i
YXNlZCBmb3JtYXQgCisgICAgICogQHN0YWJsZSBJQ1UgNC4yCisgICAgICovCisgICAgVU5VTV9O
VU1CRVJJTkdfU1lTVEVNLAorICAgIC8qKiAKKyAgICAgKiBSdWxlLWJhc2VkIGZvcm1hdCBkZWZp
bmVkIGJ5IHBhdHRlcm4gCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVU5V
TV9QQVRURVJOX1JVTEVCQVNFRCwKKyAgICAvKiogRGVmYXVsdCBmb3JtYXQgKi8KKyAgICBVTlVN
X0RFRkFVTFQgPSBVTlVNX0RFQ0lNQUwsCisgICAgLyoqIChBbGlhcyBmb3IgVU5VTV9QQVRURVJO
X0RFQ0lNQUwpICovCisgICAgVU5VTV9JR05PUkUgPSBVTlVNX1BBVFRFUk5fREVDSU1BTAorfSBV
TnVtYmVyRm9ybWF0U3R5bGU7CisKKy8qKiBUaGUgcG9zc2libGUgbnVtYmVyIGZvcm1hdCByb3Vu
ZGluZyBtb2Rlcy4gCisgKiAgQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3R5cGVkZWYgZW51bSBVTnVt
YmVyRm9ybWF0Um91bmRpbmdNb2RlIHsKKyAgICBVTlVNX1JPVU5EX0NFSUxJTkcsCisgICAgVU5V
TV9ST1VORF9GTE9PUiwKKyAgICBVTlVNX1JPVU5EX0RPV04sCisgICAgVU5VTV9ST1VORF9VUCwK
KyAgICAvKioKKyAgICAgKiBIYWxmLWV2ZW4gcm91bmRpbmcsIG1pc3NwZWxsZWQgbmFtZQorICAg
ICAqIEBkZXByZWNhdGVkLCBJQ1UgMy44CisgICAgICovCisgICAgVU5VTV9GT1VORF9IQUxGRVZF
TiwKKyAgICBVTlVNX1JPVU5EX0hBTEZET1dOLAorICAgIFVOVU1fUk9VTkRfSEFMRlVQLAorICAg
IC8qKgorICAgICAqIEhhbGYtZXZlbiByb3VuZGluZworICAgICAqIEBzdGFibGUsIElDVSAzLjgK
KyAgICAgKi8KKyAgICBVTlVNX1JPVU5EX0hBTEZFVkVOID0gVU5VTV9GT1VORF9IQUxGRVZFTgor
fSBVTnVtYmVyRm9ybWF0Um91bmRpbmdNb2RlOworCisvKiogVGhlIHBvc3NpYmxlIG51bWJlciBm
b3JtYXQgcGFkIHBvc2l0aW9ucy4gCisgKiAgQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3R5cGVkZWYg
ZW51bSBVTnVtYmVyRm9ybWF0UGFkUG9zaXRpb24geworICAgIFVOVU1fUEFEX0JFRk9SRV9QUkVG
SVgsCisgICAgVU5VTV9QQURfQUZURVJfUFJFRklYLAorICAgIFVOVU1fUEFEX0JFRk9SRV9TVUZG
SVgsCisgICAgVU5VTV9QQURfQUZURVJfU1VGRklYCit9IFVOdW1iZXJGb3JtYXRQYWRQb3NpdGlv
bjsKKworLyoqCisgKiBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBVTnVtYmVyRm9ybWF0IGZvciBm
b3JtYXR0aW5nIGFuZCBwYXJzaW5nCisgKiBudW1iZXJzLiAgQSBVTnVtYmVyRm9ybWF0IG1heSBi
ZSB1c2VkIHRvIGZvcm1hdCBudW1iZXJzIGJ5IGNhbGxpbmcKKyAqIHtAbGluayAjdW51bV9mb3Jt
YXQgfSwgYW5kIHRvIHBhcnNlIG51bWJlcnMgYnkgY2FsbGluZyB7QGxpbmsgI3VudW1fcGFyc2Ug
fS4KKyAqIFRoZSBjYWxsZXIgbXVzdCBjYWxsIHtAbGluayAjdW51bV9jbG9zZSB9IHdoZW4gZG9u
ZSB0byByZWxlYXNlIHJlc291cmNlcworICogdXNlZCBieSB0aGlzIG9iamVjdC4KKyAqIEBwYXJh
bSBzdHlsZSBUaGUgdHlwZSBvZiBudW1iZXIgZm9ybWF0IHRvIG9wZW46IG9uZSBvZgorICogVU5V
TV9ERUNJTUFMLCBVTlVNX0NVUlJFTkNZLCBVTlVNX1BFUkNFTlQsIFVOVU1fU0NJRU5USUZJQywg
VU5VTV9TUEVMTE9VVCwKKyAqIFVOVU1fUEFUVEVSTl9ERUNJTUFMLCBVTlVNX1BBVFRFUk5fUlVM
RUJBU0VELCBvciBVTlVNX0RFRkFVTFQuCisgKiBJZiBVTlVNX1BBVFRFUk5fREVDSU1BTCBvciBV
TlVNX1BBVFRFUk5fUlVMRUJBU0VEIGlzIHBhc3NlZCB0aGVuIHRoZQorICogbnVtYmVyIGZvcm1h
dCBpcyBvcGVuZWQgdXNpbmcgdGhlIGdpdmVuIHBhdHRlcm4sIHdoaWNoIG11c3QgY29uZm9ybQor
ICogdG8gdGhlIHN5bnRheCBkZXNjcmliZWQgaW4gRGVjaW1hbEZvcm1hdCBvciBSdWxlQmFzZWRO
dW1iZXJGb3JtYXQsCisgKiByZXNwZWN0aXZlbHkuCisgKiBAcGFyYW0gcGF0dGVybiBBIHBhdHRl
cm4gc3BlY2lmeWluZyB0aGUgZm9ybWF0IHRvIHVzZS4gCisgKiBUaGlzIHBhcmFtZXRlciBpcyBp
Z25vcmVkIHVubGVzcyB0aGUgc3R5bGUgaXMKKyAqIFVOVU1fUEFUVEVSTl9ERUNJTUFMIG9yIFVO
VU1fUEFUVEVSTl9SVUxFQkFTRUQuCisgKiBAcGFyYW0gcGF0dGVybkxlbmd0aCBUaGUgbnVtYmVy
IG9mIGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm4sIG9yIC0xCisgKiBpZiBudWxsLXRlcm1pbmF0
ZWQuIFRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgdW5sZXNzIHRoZSBzdHlsZSBpcworICogVU5V
TV9QQVRURVJOLgorICogQHBhcmFtIGxvY2FsZSBBIGxvY2FsZSBpZGVudGlmaWVyIHRvIHVzZSB0
byBkZXRlcm1pbmUgZm9ybWF0dGluZworICogYW5kIHBhcnNpbmcgY29udmVudGlvbnMsIG9yIE5V
TEwgdG8gdXNlIHRoZSBkZWZhdWx0IGxvY2FsZS4KKyAqIEBwYXJhbSBwYXJzZUVyciBBIHBvaW50
ZXIgdG8gYSBVUGFyc2VFcnJvciBzdHJ1Y3QgdG8gcmVjZWl2ZSB0aGUKKyAqIGRldGFpbHMgb2Yg
YW55IHBhcnNpbmcgZXJyb3JzLCBvciBOVUxMIGlmIG5vIHBhcnNpbmcgZXJyb3IgZGV0YWlscwor
ICogYXJlIGRlc2lyZWQuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBpbnB1dC1v
dXRwdXQgVUVycm9yQ29kZS4KKyAqIEByZXR1cm4gQSBwb2ludGVyIHRvIGEgbmV3bHkgY3JlYXRl
ZCBVTnVtYmVyRm9ybWF0LCBvciBOVUxMIGlmIGFuCisgKiBlcnJvciBvY2N1cnJlZC4KKyAqIEBz
ZWUgdW51bV9jbG9zZQorICogQHNlZSBEZWNpbWFsRm9ybWF0CisgKiBAc3RhYmxlIElDVSAyLjAK
KyAqLworVV9TVEFCTEUgVU51bWJlckZvcm1hdCogVV9FWFBPUlQyIAordW51bV9vcGVuKCAgVU51
bWJlckZvcm1hdFN0eWxlICAgIHN0eWxlLAorICAgICAgICAgICAgY29uc3QgICAgVUNoYXIqICAg
IHBhdHRlcm4sCisgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICAgcGF0dGVybkxlbmd0aCwK
KyAgICAgICAgICAgIGNvbnN0ICAgIGNoYXIqICAgICBsb2NhbGUsCisgICAgICAgICAgICBVUGFy
c2VFcnJvciogICAgICAgcGFyc2VFcnIsCisgICAgICAgICAgICBVRXJyb3JDb2RlKiAgICAgICAg
c3RhdHVzKTsKKworCisvKioKKyogQ2xvc2UgYSBVTnVtYmVyRm9ybWF0LgorKiBPbmNlIGNsb3Nl
ZCwgYSBVTnVtYmVyRm9ybWF0IG1heSBubyBsb25nZXIgYmUgdXNlZC4KKyogQHBhcmFtIGZtdCBU
aGUgZm9ybWF0dGVyIHRvIGNsb3NlLgorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2
b2lkIFVfRVhQT1JUMiAKK3VudW1fY2xvc2UoVU51bWJlckZvcm1hdCogZm10KTsKKworI2lmIFVf
U0hPV19DUExVU1BMVVNfQVBJCisKK1VfTkFNRVNQQUNFX0JFR0lOCisKKy8qKgorICogXGNsYXNz
IExvY2FsVU51bWJlckZvcm1hdFBvaW50ZXIKKyAqICJTbWFydCBwb2ludGVyIiBjbGFzcywgY2xv
c2VzIGEgVU51bWJlckZvcm1hdCB2aWEgdW51bV9jbG9zZSgpLgorICogRm9yIG1vc3QgbWV0aG9k
cyBzZWUgdGhlIExvY2FsUG9pbnRlckJhc2UgYmFzZSBjbGFzcy4KKyAqCisgKiBAc2VlIExvY2Fs
UG9pbnRlckJhc2UKKyAqIEBzZWUgTG9jYWxQb2ludGVyCisgKiBAc3RhYmxlIElDVSA0LjQKKyAq
LworVV9ERUZJTkVfTE9DQUxfT1BFTl9QT0lOVEVSKExvY2FsVU51bWJlckZvcm1hdFBvaW50ZXIs
IFVOdW1iZXJGb3JtYXQsIHVudW1fY2xvc2UpOworCitVX05BTUVTUEFDRV9FTkQKKworI2VuZGlm
CisKKy8qKgorICogT3BlbiBhIGNvcHkgb2YgYSBVTnVtYmVyRm9ybWF0LgorICogVGhpcyBmdW5j
dGlvbiBwZXJmb3JtcyBhIGRlZXAgY29weS4KKyAqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdCB0byBj
b3B5CisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2Vp
dmUgYW55IGVycm9ycy4KKyAqIEByZXR1cm4gQSBwb2ludGVyIHRvIGEgVU51bWJlckZvcm1hdCBp
ZGVudGljYWwgdG8gZm10LgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIFVOdW1i
ZXJGb3JtYXQqIFVfRVhQT1JUMiAKK3VudW1fY2xvbmUoY29uc3QgVU51bWJlckZvcm1hdCAqZm10
LAorICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKy8qKgorKiBGb3JtYXQgYW4gaW50ZWdl
ciB1c2luZyBhIFVOdW1iZXJGb3JtYXQuCisqIFRoZSBpbnRlZ2VyIHdpbGwgYmUgZm9ybWF0dGVk
IGFjY29yZGluZyB0byB0aGUgVU51bWJlckZvcm1hdCdzIGxvY2FsZS4KKyogQHBhcmFtIGZtdCBU
aGUgZm9ybWF0dGVyIHRvIHVzZS4KKyogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIHRvIGZvcm1h
dC4KKyogQHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUg
Zm9ybWF0dGVkIG51bWJlci4KKyogQHBhcmFtIHJlc3VsdExlbmd0aCBUaGUgbWF4aW11bSBzaXpl
IG9mIHJlc3VsdC4KKyogQHBhcmFtIHBvcyAgICBBIHBvaW50ZXIgdG8gYSBVRmllbGRQb3NpdGlv
bi4gIE9uIGlucHV0LCBwb3NpdGlvbi0+ZmllbGQKKyogaXMgcmVhZC4gIE9uIG91dHB1dCwgcG9z
aXRpb24tPmJlZ2luSW5kZXggYW5kIHBvc2l0aW9uLT5lbmRJbmRleCBpbmRpY2F0ZQorKiB0aGUg
YmVnaW5uaW5nIGFuZCBlbmRpbmcgaW5kaWNlcyBvZiBmaWVsZCBudW1iZXIgcG9zaXRpb24tPmZp
ZWxkLCBpZiBzdWNoCisqIGEgZmllbGQgZXhpc3RzLiAgVGhpcyBwYXJhbWV0ZXIgbWF5IGJlIE5V
TEwsIGluIHdoaWNoIGNhc2Ugbm8gZmllbGQKKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8g
YW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUgdG90YWwg
YnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVyIHRoYW4gcmVzdWx0TGVuZ3RoLCB0aGUgb3V0
cHV0IHdhcyB0cnVuY2F0ZWQuCisqIEBzZWUgdW51bV9mb3JtYXRJbnQ2NAorKiBAc2VlIHVudW1f
Zm9ybWF0RG91YmxlCisqIEBzZWUgdW51bV9wYXJzZQorKiBAc2VlIHVudW1fcGFyc2VJbnQ2NAor
KiBAc2VlIHVudW1fcGFyc2VEb3VibGUKKyogQHNlZSBVRmllbGRQb3NpdGlvbgorKiBAc3RhYmxl
IElDVSAyLjAKKyovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VudW1fZm9ybWF0KCAg
ICBjb25zdCAgICBVTnVtYmVyRm9ybWF0KiAgICBmbXQsCisgICAgICAgIGludDMyX3QgICAgICAg
ICAgICBudW1iZXIsCisgICAgICAgIFVDaGFyKiAgICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAg
aW50MzJfdCAgICAgICAgICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAgVUZpZWxkUG9zaXRpb24g
ICAgKnBvcywKKyAgICAgICAgVUVycm9yQ29kZSogICAgICAgIHN0YXR1cyk7CisKKy8qKgorKiBG
b3JtYXQgYW4gaW50NjQgdXNpbmcgYSBVTnVtYmVyRm9ybWF0LgorKiBUaGUgaW50NjQgd2lsbCBi
ZSBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBVTnVtYmVyRm9ybWF0J3MgbG9jYWxlLgorKiBA
cGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gdXNlLgorKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1i
ZXIgdG8gZm9ybWF0LgorKiBAcGFyYW0gcmVzdWx0IEEgcG9pbnRlciB0byBhIGJ1ZmZlciB0byBy
ZWNlaXZlIHRoZSBmb3JtYXR0ZWQgbnVtYmVyLgorKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIFRoZSBt
YXhpbXVtIHNpemUgb2YgcmVzdWx0LgorKiBAcGFyYW0gcG9zICAgIEEgcG9pbnRlciB0byBhIFVG
aWVsZFBvc2l0aW9uLiAgT24gaW5wdXQsIHBvc2l0aW9uLT5maWVsZAorKiBpcyByZWFkLiAgT24g
b3V0cHV0LCBwb3NpdGlvbi0+YmVnaW5JbmRleCBhbmQgcG9zaXRpb24tPmVuZEluZGV4IGluZGlj
YXRlCisqIHRoZSBiZWdpbm5pbmcgYW5kIGVuZGluZyBpbmRpY2VzIG9mIGZpZWxkIG51bWJlciBw
b3NpdGlvbi0+ZmllbGQsIGlmIHN1Y2gKKyogYSBmaWVsZCBleGlzdHMuICBUaGlzIHBhcmFtZXRl
ciBtYXkgYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSBubyBmaWVsZAorKiBAcGFyYW0gc3RhdHVzIEEg
cG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAcmV0dXJu
IFRoZSB0b3RhbCBidWZmZXIgc2l6ZSBuZWVkZWQ7IGlmIGdyZWF0ZXIgdGhhbiByZXN1bHRMZW5n
dGgsIHRoZSBvdXRwdXQgd2FzIHRydW5jYXRlZC4KKyogQHNlZSB1bnVtX2Zvcm1hdAorKiBAc2Vl
IHVudW1fZm9ybWF0RG91YmxlCisqIEBzZWUgdW51bV9wYXJzZQorKiBAc2VlIHVudW1fcGFyc2VJ
bnQ2NAorKiBAc2VlIHVudW1fcGFyc2VEb3VibGUKKyogQHNlZSBVRmllbGRQb3NpdGlvbgorKiBA
c3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VudW1fZm9y
bWF0SW50NjQoY29uc3QgVU51bWJlckZvcm1hdCAqZm10LAorICAgICAgICBpbnQ2NF90ICAgICAg
ICAgbnVtYmVyLAorICAgICAgICBVQ2hhciogICAgICAgICAgcmVzdWx0LAorICAgICAgICBpbnQz
Ml90ICAgICAgICAgcmVzdWx0TGVuZ3RoLAorICAgICAgICBVRmllbGRQb3NpdGlvbiAqcG9zLAor
ICAgICAgICBVRXJyb3JDb2RlKiAgICAgc3RhdHVzKTsKKworLyoqCisqIEZvcm1hdCBhIGRvdWJs
ZSB1c2luZyBhIFVOdW1iZXJGb3JtYXQuCisqIFRoZSBkb3VibGUgd2lsbCBiZSBmb3JtYXR0ZWQg
YWNjb3JkaW5nIHRvIHRoZSBVTnVtYmVyRm9ybWF0J3MgbG9jYWxlLgorKiBAcGFyYW0gZm10IFRo
ZSBmb3JtYXR0ZXIgdG8gdXNlLgorKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgdG8gZm9ybWF0
LgorKiBAcGFyYW0gcmVzdWx0IEEgcG9pbnRlciB0byBhIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBm
b3JtYXR0ZWQgbnVtYmVyLgorKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIFRoZSBtYXhpbXVtIHNpemUg
b2YgcmVzdWx0LgorKiBAcGFyYW0gcG9zICAgIEEgcG9pbnRlciB0byBhIFVGaWVsZFBvc2l0aW9u
LiAgT24gaW5wdXQsIHBvc2l0aW9uLT5maWVsZAorKiBpcyByZWFkLiAgT24gb3V0cHV0LCBwb3Np
dGlvbi0+YmVnaW5JbmRleCBhbmQgcG9zaXRpb24tPmVuZEluZGV4IGluZGljYXRlCisqIHRoZSBi
ZWdpbm5pbmcgYW5kIGVuZGluZyBpbmRpY2VzIG9mIGZpZWxkIG51bWJlciBwb3NpdGlvbi0+Zmll
bGQsIGlmIHN1Y2gKKyogYSBmaWVsZCBleGlzdHMuICBUaGlzIHBhcmFtZXRlciBtYXkgYmUgTlVM
TCwgaW4gd2hpY2ggY2FzZSBubyBmaWVsZAorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBh
biBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAcmV0dXJuIFRoZSB0b3RhbCBi
dWZmZXIgc2l6ZSBuZWVkZWQ7IGlmIGdyZWF0ZXIgdGhhbiByZXN1bHRMZW5ndGgsIHRoZSBvdXRw
dXQgd2FzIHRydW5jYXRlZC4KKyogQHNlZSB1bnVtX2Zvcm1hdAorKiBAc2VlIHVudW1fZm9ybWF0
SW50NjQKKyogQHNlZSB1bnVtX3BhcnNlCisqIEBzZWUgdW51bV9wYXJzZUludDY0CisqIEBzZWUg
dW51bV9wYXJzZURvdWJsZQorKiBAc2VlIFVGaWVsZFBvc2l0aW9uCisqIEBzdGFibGUgSUNVIDIu
MAorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordW51bV9mb3JtYXREb3VibGUoICAg
IGNvbnN0ICAgIFVOdW1iZXJGb3JtYXQqICBmbXQsCisgICAgICAgICAgICBkb3VibGUgICAgICAg
ICAgbnVtYmVyLAorICAgICAgICAgICAgVUNoYXIqICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAg
ICAgIGludDMyX3QgICAgICAgICByZXN1bHRMZW5ndGgsCisgICAgICAgICAgICBVRmllbGRQb3Np
dGlvbiAgKnBvcywgLyogMCBpZiBpZ25vcmUgKi8KKyAgICAgICAgICAgIFVFcnJvckNvZGUqICAg
ICBzdGF0dXMpOworCisvKioKKyogRm9ybWF0IGEgZGVjaW1hbCBudW1iZXIgdXNpbmcgYSBVTnVt
YmVyRm9ybWF0LgorKiBUaGUgbnVtYmVyIHdpbGwgYmUgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0
aGUgVU51bWJlckZvcm1hdCdzIGxvY2FsZS4KKyogVGhlIHN5bnRheCBvZiB0aGUgaW5wdXQgbnVt
YmVyIGlzIGEgIm51bWVyaWMgc3RyaW5nIgorKiBhcyBkZWZpbmVkIGluIHRoZSBEZWNpbWFsIEFy
aXRobWV0aWMgU3BlY2lmaWNhdGlvbiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly9zcGVsZW90cm92
ZS5jb20vZGVjaW1hbAorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gdXNlLgorKiBAcGFy
YW0gbnVtYmVyIFRoZSBudW1iZXIgdG8gZm9ybWF0LgorKiBAcGFyYW0gbGVuZ3RoIFRoZSBsZW5n
dGggb2YgdGhlIGlucHV0IG51bWJlciwgb3IgLTEgaWYgdGhlIGlucHV0IGlzIG51bC10ZXJtaW5h
dGVkLgorKiBAcGFyYW0gcmVzdWx0IEEgcG9pbnRlciB0byBhIGJ1ZmZlciB0byByZWNlaXZlIHRo
ZSBmb3JtYXR0ZWQgbnVtYmVyLgorKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIFRoZSBtYXhpbXVtIHNp
emUgb2YgcmVzdWx0LgorKiBAcGFyYW0gcG9zICAgIEEgcG9pbnRlciB0byBhIFVGaWVsZFBvc2l0
aW9uLiAgT24gaW5wdXQsIHBvc2l0aW9uLT5maWVsZAorKiAgICAgICAgICAgICAgIGlzIHJlYWQu
ICBPbiBvdXRwdXQsIHBvc2l0aW9uLT5iZWdpbkluZGV4IGFuZCBwb3NpdGlvbi0+ZW5kSW5kZXgg
aW5kaWNhdGUKKyogICAgICAgICAgICAgICB0aGUgYmVnaW5uaW5nIGFuZCBlbmRpbmcgaW5kaWNl
cyBvZiBmaWVsZCBudW1iZXIgcG9zaXRpb24tPmZpZWxkLCBpZiBzdWNoCisqICAgICAgICAgICAg
ICAgYSBmaWVsZCBleGlzdHMuICBUaGlzIHBhcmFtZXRlciBtYXkgYmUgTlVMTCwgaW4gd2hpY2gg
Y2FzZSBpdCBpcyBpZ25vcmVkLgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJy
b3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAcmV0dXJuIFRoZSB0b3RhbCBidWZmZXIg
c2l6ZSBuZWVkZWQ7IGlmIGdyZWF0ZXIgdGhhbiByZXN1bHRMZW5ndGgsIHRoZSBvdXRwdXQgd2Fz
IHRydW5jYXRlZC4KKyogQHNlZSB1bnVtX2Zvcm1hdAorKiBAc2VlIHVudW1fZm9ybWF0SW50NjQK
KyogQHNlZSB1bnVtX3BhcnNlCisqIEBzZWUgdW51bV9wYXJzZUludDY0CisqIEBzZWUgdW51bV9w
YXJzZURvdWJsZQorKiBAc2VlIFVGaWVsZFBvc2l0aW9uCisqIEBzdGFibGUgSUNVIDQuNCAKKyov
CitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VudW1fZm9ybWF0RGVjaW1hbCggICAgY29u
c3QgICAgVU51bWJlckZvcm1hdCogIGZtdCwKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKiAgICBu
dW1iZXIsCisgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgbGVuZ3RoLAorICAgICAgICAgICAg
VUNoYXIqICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgICAgIGludDMyX3QgICAgICAgICByZXN1
bHRMZW5ndGgsCisgICAgICAgICAgICBVRmllbGRQb3NpdGlvbiAgKnBvcywgLyogMCBpZiBpZ25v
cmUgKi8KKyAgICAgICAgICAgIFVFcnJvckNvZGUqICAgICBzdGF0dXMpOworCisvKioKKyAqIEZv
cm1hdCBhIGRvdWJsZSBjdXJyZW5jeSBhbW91bnQgdXNpbmcgYSBVTnVtYmVyRm9ybWF0LgorICog
VGhlIGRvdWJsZSB3aWxsIGJlIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIFVOdW1iZXJGb3Jt
YXQncyBsb2NhbGUuCisgKiBAcGFyYW0gZm10IHRoZSBmb3JtYXR0ZXIgdG8gdXNlCisgKiBAcGFy
YW0gbnVtYmVyIHRoZSBudW1iZXIgdG8gZm9ybWF0CisgKiBAcGFyYW0gY3VycmVuY3kgdGhlIDMt
bGV0dGVyIG51bGwtdGVybWluYXRlZCBJU08gNDIxNyBjdXJyZW5jeSBjb2RlCisgKiBAcGFyYW0g
cmVzdWx0IGEgcG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIGZvcm1hdHRlZCBu
dW1iZXIKKyAqIEBwYXJhbSByZXN1bHRMZW5ndGggdGhlIG1heGltdW0gbnVtYmVyIG9mIFVDaGFy
cyB0byB3cml0ZSB0byByZXN1bHQKKyAqIEBwYXJhbSBwb3MgYSBwb2ludGVyIHRvIGEgVUZpZWxk
UG9zaXRpb24uICBPbiBpbnB1dCwKKyAqIHBvc2l0aW9uLT5maWVsZCBpcyByZWFkLiAgT24gb3V0
cHV0LCBwb3NpdGlvbi0+YmVnaW5JbmRleCBhbmQKKyAqIHBvc2l0aW9uLT5lbmRJbmRleCBpbmRp
Y2F0ZSB0aGUgYmVnaW5uaW5nIGFuZCBlbmRpbmcgaW5kaWNlcyBvZgorICogZmllbGQgbnVtYmVy
IHBvc2l0aW9uLT5maWVsZCwgaWYgc3VjaCBhIGZpZWxkIGV4aXN0cy4gIFRoaXMKKyAqIHBhcmFt
ZXRlciBtYXkgYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSBpdCBpcyBpZ25vcmVkLgorICogQHBhcmFt
IHN0YXR1cyBhIHBvaW50ZXIgdG8gYW4gaW5wdXQtb3V0cHV0IFVFcnJvckNvZGUKKyAqIEByZXR1
cm4gdGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3VsdExl
bmd0aCwKKyAqIHRoZSBvdXRwdXQgd2FzIHRydW5jYXRlZC4KKyAqIEBzZWUgdW51bV9mb3JtYXRE
b3VibGUKKyAqIEBzZWUgdW51bV9wYXJzZURvdWJsZUN1cnJlbmN5CisgKiBAc2VlIFVGaWVsZFBv
c2l0aW9uCisgKiBAc3RhYmxlIElDVSAzLjAKKyAqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9S
VDIgCit1bnVtX2Zvcm1hdERvdWJsZUN1cnJlbmN5KGNvbnN0IFVOdW1iZXJGb3JtYXQqIGZtdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIG51bWJlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgVUNoYXIqIGN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBV
Q2hhciogcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHJlc3VsdExl
bmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVUZpZWxkUG9zaXRpb24qIHBvcywgLyog
aWdub3JlZCBpZiAwICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUqIHN0
YXR1cyk7CisKKy8qKgorKiBQYXJzZSBhIHN0cmluZyBpbnRvIGFuIGludGVnZXIgdXNpbmcgYSBV
TnVtYmVyRm9ybWF0LgorKiBUaGUgc3RyaW5nIHdpbGwgYmUgcGFyc2VkIGFjY29yZGluZyB0byB0
aGUgVU51bWJlckZvcm1hdCdzIGxvY2FsZS4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRv
IHVzZS4KKyogQHBhcmFtIHRleHQgVGhlIHRleHQgdG8gcGFyc2UuCisqIEBwYXJhbSB0ZXh0TGVu
Z3RoIFRoZSBsZW5ndGggb2YgdGV4dCwgb3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorKiBAcGFy
YW0gcGFyc2VQb3MgSWYgbm90IDAsIG9uIGlucHV0IGEgcG9pbnRlciB0byBhbiBpbnRlZ2VyIHNw
ZWNpZnlpbmcgdGhlIG9mZnNldCBhdCB3aGljaAorKiB0byBiZWdpbiBwYXJzaW5nLiAgSWYgbm90
IDAsIG9uIG91dHB1dCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHBhcnNpbmcgZW5kZWQuCisqIEBwYXJh
bSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3Jz
CisqIEByZXR1cm4gVGhlIHZhbHVlIG9mIHRoZSBwYXJzZWQgaW50ZWdlcgorKiBAc2VlIHVudW1f
cGFyc2VJbnQ2NAorKiBAc2VlIHVudW1fcGFyc2VEb3VibGUKKyogQHNlZSB1bnVtX2Zvcm1hdAor
KiBAc2VlIHVudW1fZm9ybWF0SW50NjQKKyogQHNlZSB1bnVtX2Zvcm1hdERvdWJsZQorKiBAc3Rh
YmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VudW1fcGFyc2Uo
ICAgIGNvbnN0ICAgVU51bWJlckZvcm1hdCogIGZtdCwKKyAgICAgICAgY29uc3QgICBVQ2hhciog
ICAgICAgICAgdGV4dCwKKyAgICAgICAgaW50MzJfdCAgICAgICAgIHRleHRMZW5ndGgsCisgICAg
ICAgIGludDMyX3QgICAgICAgICAqcGFyc2VQb3MgLyogMCA9IHN0YXJ0ICovLAorICAgICAgICBV
RXJyb3JDb2RlICAgICAgKnN0YXR1cyk7CisKKy8qKgorKiBQYXJzZSBhIHN0cmluZyBpbnRvIGFu
IGludDY0IHVzaW5nIGEgVU51bWJlckZvcm1hdC4KKyogVGhlIHN0cmluZyB3aWxsIGJlIHBhcnNl
ZCBhY2NvcmRpbmcgdG8gdGhlIFVOdW1iZXJGb3JtYXQncyBsb2NhbGUuCisqIEBwYXJhbSBmbXQg
VGhlIGZvcm1hdHRlciB0byB1c2UuCisqIEBwYXJhbSB0ZXh0IFRoZSB0ZXh0IHRvIHBhcnNlLgor
KiBAcGFyYW0gdGV4dExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRleHQsIG9yIC0xIGlmIG51bGwtdGVy
bWluYXRlZC4KKyogQHBhcmFtIHBhcnNlUG9zIElmIG5vdCAwLCBvbiBpbnB1dCBhIHBvaW50ZXIg
dG8gYW4gaW50ZWdlciBzcGVjaWZ5aW5nIHRoZSBvZmZzZXQgYXQgd2hpY2gKKyogdG8gYmVnaW4g
cGFyc2luZy4gIElmIG5vdCAwLCBvbiBvdXRwdXQgdGhlIG9mZnNldCBhdCB3aGljaCBwYXJzaW5n
IGVuZGVkLgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJl
Y2VpdmUgYW55IGVycm9ycworKiBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgcGFyc2VkIGludGVn
ZXIKKyogQHNlZSB1bnVtX3BhcnNlCisqIEBzZWUgdW51bV9wYXJzZURvdWJsZQorKiBAc2VlIHVu
dW1fZm9ybWF0CisqIEBzZWUgdW51bV9mb3JtYXRJbnQ2NAorKiBAc2VlIHVudW1fZm9ybWF0RG91
YmxlCisqIEBzdGFibGUgSUNVIDIuOAorKi8KK1VfU1RBQkxFIGludDY0X3QgVV9FWFBPUlQyIAor
dW51bV9wYXJzZUludDY0KGNvbnN0IFVOdW1iZXJGb3JtYXQqICBmbXQsCisgICAgICAgIGNvbnN0
IFVDaGFyKiAgdGV4dCwKKyAgICAgICAgaW50MzJfdCAgICAgICB0ZXh0TGVuZ3RoLAorICAgICAg
ICBpbnQzMl90ICAgICAgICpwYXJzZVBvcyAvKiAwID0gc3RhcnQgKi8sCisgICAgICAgIFVFcnJv
ckNvZGUgICAgKnN0YXR1cyk7CisKKy8qKgorKiBQYXJzZSBhIHN0cmluZyBpbnRvIGEgZG91Ymxl
IHVzaW5nIGEgVU51bWJlckZvcm1hdC4KKyogVGhlIHN0cmluZyB3aWxsIGJlIHBhcnNlZCBhY2Nv
cmRpbmcgdG8gdGhlIFVOdW1iZXJGb3JtYXQncyBsb2NhbGUuCisqIEBwYXJhbSBmbXQgVGhlIGZv
cm1hdHRlciB0byB1c2UuCisqIEBwYXJhbSB0ZXh0IFRoZSB0ZXh0IHRvIHBhcnNlLgorKiBAcGFy
YW0gdGV4dExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRleHQsIG9yIC0xIGlmIG51bGwtdGVybWluYXRl
ZC4KKyogQHBhcmFtIHBhcnNlUG9zIElmIG5vdCAwLCBvbiBpbnB1dCBhIHBvaW50ZXIgdG8gYW4g
aW50ZWdlciBzcGVjaWZ5aW5nIHRoZSBvZmZzZXQgYXQgd2hpY2gKKyogdG8gYmVnaW4gcGFyc2lu
Zy4gIElmIG5vdCAwLCBvbiBvdXRwdXQgdGhlIG9mZnNldCBhdCB3aGljaCBwYXJzaW5nIGVuZGVk
LgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUg
YW55IGVycm9ycworKiBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgcGFyc2VkIGRvdWJsZQorKiBA
c2VlIHVudW1fcGFyc2UKKyogQHNlZSB1bnVtX3BhcnNlSW50NjQKKyogQHNlZSB1bnVtX2Zvcm1h
dAorKiBAc2VlIHVudW1fZm9ybWF0SW50NjQKKyogQHNlZSB1bnVtX2Zvcm1hdERvdWJsZQorKiBA
c3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBkb3VibGUgVV9FWFBPUlQyIAordW51bV9wYXJz
ZURvdWJsZSggICAgY29uc3QgICBVTnVtYmVyRm9ybWF0KiAgZm10LAorICAgICAgICAgICAgY29u
c3QgICBVQ2hhciogICAgICAgICAgdGV4dCwKKyAgICAgICAgICAgIGludDMyX3QgICAgICAgICB0
ZXh0TGVuZ3RoLAorICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICpwYXJzZVBvcyAvKiAwID0g
c3RhcnQgKi8sCisgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgKnN0YXR1cyk7CisKKworLyoq
CisqIFBhcnNlIGEgbnVtYmVyIGZyb20gYSBzdHJpbmcgaW50byBhbiB1bmZvcm1hdHRlZCBudW1l
cmljIHN0cmluZyB1c2luZyBhIFVOdW1iZXJGb3JtYXQuCisqIFRoZSBpbnB1dCBzdHJpbmcgd2ls
bCBiZSBwYXJzZWQgYWNjb3JkaW5nIHRvIHRoZSBVTnVtYmVyRm9ybWF0J3MgbG9jYWxlLgorKiBU
aGUgc3ludGF4IG9mIHRoZSBvdXRwdXQgaXMgYSAibnVtZXJpYyBzdHJpbmciCisqIGFzIGRlZmlu
ZWQgaW4gdGhlIERlY2ltYWwgQXJpdGhtZXRpYyBTcGVjaWZpY2F0aW9uLCBhdmFpbGFibGUgYXQK
KyogaHR0cDovL3NwZWxlb3Ryb3ZlLmNvbS9kZWNpbWFsCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1h
dHRlciB0byB1c2UuCisqIEBwYXJhbSB0ZXh0IFRoZSB0ZXh0IHRvIHBhcnNlLgorKiBAcGFyYW0g
dGV4dExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRleHQsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4K
KyogQHBhcmFtIHBhcnNlUG9zIElmIG5vdCAwLCBvbiBpbnB1dCBhIHBvaW50ZXIgdG8gYW4gaW50
ZWdlciBzcGVjaWZ5aW5nIHRoZSBvZmZzZXQgYXQgd2hpY2gKKyogICAgICAgICAgICAgICAgIHRv
IGJlZ2luIHBhcnNpbmcuICBJZiBub3QgMCwgb24gb3V0cHV0IHRoZSBvZmZzZXQgYXQgd2hpY2gg
cGFyc2luZyBlbmRlZC4KKyogQHBhcmFtIG91dEJ1ZiBBIChjaGFyICopIGJ1ZmZlciB0byByZWNl
aXZlIHRoZSBwYXJzZWQgbnVtYmVyIGFzIGEgc3RyaW5nLiAgVGhlIG91dHB1dCBzdHJpbmcKKyog
ICAgICAgICAgICAgICB3aWxsIGJlIG51bC10ZXJtaW5hdGVkIGlmIHRoZXJlIGlzIHN1ZmZpY2ll
bnQgc3BhY2UuCisqIEBwYXJhbSBvdXRCdWZMZW5ndGggVGhlIHNpemUgb2YgdGhlIG91dHB1dCBi
dWZmZXIuICBNYXkgYmUgemVybywgaW4gd2hpY2ggY2FzZQorKiAgICAgICAgICAgICAgIHRoZSBv
dXRCdWYgcG9pbnRlciBtYXkgYmUgTlVMTCwgYW5kIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB0
aGUKKyogICAgICAgICAgICAgICBzaXplIG9mIHRoZSBvdXRwdXQgc3RyaW5nLgorKiBAcGFyYW0g
c3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycwor
KiBAcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIG91dHB1dCBzdHJpbmcsIG5vdCBpbmNsdWRpbmcg
YW55IHRlcm1pbmF0aW5nIG51bC4KKyogQHNlZSB1bnVtX3BhcnNlCisqIEBzZWUgdW51bV9wYXJz
ZUludDY0CisqIEBzZWUgdW51bV9mb3JtYXQKKyogQHNlZSB1bnVtX2Zvcm1hdEludDY0CisqIEBz
ZWUgdW51bV9mb3JtYXREb3VibGUKKyogQHN0YWJsZSBJQ1UgNC40CisqLworVV9TVEFCTEUgaW50
MzJfdCBVX0VYUE9SVDIgCit1bnVtX3BhcnNlRGVjaW1hbChjb25zdCAgIFVOdW1iZXJGb3JtYXQq
ICBmbXQsCisgICAgICAgICAgICAgICAgIGNvbnN0ICAgVUNoYXIqICAgICAgICAgIHRleHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgIHRleHRMZW5ndGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICpwYXJzZVBvcyAvKiAwID0gc3Rh
cnQgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAgICpvdXRCdWYs
CisgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgIG91dEJ1Zkxlbmd0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgKnN0YXR1cyk7CisKKy8q
KgorICogUGFyc2UgYSBzdHJpbmcgaW50byBhIGRvdWJsZSBhbmQgYSBjdXJyZW5jeSB1c2luZyBh
IFVOdW1iZXJGb3JtYXQuCisgKiBUaGUgc3RyaW5nIHdpbGwgYmUgcGFyc2VkIGFjY29yZGluZyB0
byB0aGUgVU51bWJlckZvcm1hdCdzIGxvY2FsZS4KKyAqIEBwYXJhbSBmbXQgdGhlIGZvcm1hdHRl
ciB0byB1c2UKKyAqIEBwYXJhbSB0ZXh0IHRoZSB0ZXh0IHRvIHBhcnNlCisgKiBAcGFyYW0gdGV4
dExlbmd0aCB0aGUgbGVuZ3RoIG9mIHRleHQsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZAorICog
QHBhcmFtIHBhcnNlUG9zIGEgcG9pbnRlciB0byBhbiBvZmZzZXQgaW5kZXggaW50byB0ZXh0IGF0
IHdoaWNoIHRvCisgKiBiZWdpbiBwYXJzaW5nLiBPbiBvdXRwdXQsICpwYXJzZVBvcyB3aWxsIHBv
aW50IGFmdGVyIHRoZSBsYXN0CisgKiBwYXJzZWQgY2hhcmFjdGVyLiAgVGhpcyBwYXJhbWV0ZXIg
bWF5IGJlIDAsIGluIHdoaWNoIGNhc2UgcGFyc2luZworICogYmVnaW5zIGF0IG9mZnNldCAwLgor
ICogQHBhcmFtIGN1cnJlbmN5IGEgcG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIHJlY2VpdmUgdGhl
IHBhcnNlZCBudWxsLQorICogdGVybWluYXRlZCBjdXJyZW5jeS4gIFRoaXMgYnVmZmVyIG11c3Qg
aGF2ZSBhIGNhcGFjaXR5IG9mIGF0IGxlYXN0CisgKiA0IFVDaGFycy4KKyAqIEBwYXJhbSBzdGF0
dXMgYSBwb2ludGVyIHRvIGFuIGlucHV0LW91dHB1dCBVRXJyb3JDb2RlCisgKiBAcmV0dXJuIHRo
ZSBwYXJzZWQgZG91YmxlCisgKiBAc2VlIHVudW1fcGFyc2VEb3VibGUKKyAqIEBzZWUgdW51bV9m
b3JtYXREb3VibGVDdXJyZW5jeQorICogQHN0YWJsZSBJQ1UgMy4wCisgKi8KK1VfU1RBQkxFIGRv
dWJsZSBVX0VYUE9SVDIKK3VudW1fcGFyc2VEb3VibGVDdXJyZW5jeShjb25zdCBVTnVtYmVyRm9y
bWF0KiBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIHRleHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCB0ZXh0TGVuZ3RoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIGludDMyX3QqIHBhcnNlUG9zLCAvKiAwID0gc3RhcnQgKi8KKyAgICAgICAg
ICAgICAgICAgICAgICAgICBVQ2hhciogY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgVUVycm9yQ29kZSogc3RhdHVzKTsKKworLyoqCisgKiBTZXQgdGhlIHBhdHRlcm4gdXNlZCBi
eSBhIFVOdW1iZXJGb3JtYXQuICBUaGlzIGNhbiBvbmx5IGJlIHVzZWQKKyAqIG9uIGEgRGVjaW1h
bEZvcm1hdCwgb3RoZXIgZm9ybWF0cyByZXR1cm4gVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SCisg
KiBpbiB0aGUgc3RhdHVzLgorICogQHBhcmFtIGZvcm1hdCBUaGUgZm9ybWF0dGVyIHRvIHNldC4K
KyAqIEBwYXJhbSBsb2NhbGl6ZWQgVFJVRSBpZiB0aGUgcGF0dGVybiBpcyBsb2NhbGl6ZWQsIEZB
TFNFIG90aGVyd2lzZS4KKyAqIEBwYXJhbSBwYXR0ZXJuIFRoZSBuZXcgcGF0dGVybgorICogQHBh
cmFtIHBhdHRlcm5MZW5ndGggVGhlIGxlbmd0aCBvZiBwYXR0ZXJuLCBvciAtMSBpZiBudWxsLXRl
cm1pbmF0ZWQuCisgKiBAcGFyYW0gcGFyc2VFcnJvciBBIHBvaW50ZXIgdG8gVVBhcnNlRXJyb3Ig
dG8gcmVjaWV2ZSBpbmZvcm1hdGlvbgorICogYWJvdXQgZXJyb3JzIG9jY3VycmVkIGR1cmluZyBw
YXJzaW5nLCBvciBOVUxMIGlmIG5vIHBhcnNlIGVycm9yCisgKiBpbmZvcm1hdGlvbiBpcyBkZXNp
cmVkLgorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gaW5wdXQtb3V0cHV0IFVFcnJv
ckNvZGUuCisgKiBAc2VlIHVudW1fdG9QYXR0ZXJuCisgKiBAc2VlIERlY2ltYWxGb3JtYXQKKyAq
IEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VudW1fYXBw
bHlQYXR0ZXJuKCAgICAgICAgICBVTnVtYmVyRm9ybWF0ICAqZm9ybWF0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFVCb29sICAgICAgICAgIGxvY2FsaXplZCwKKyAgICAgICAgICAgICAg
ICAgICAgY29uc3QgICBVQ2hhciAgICAgICAgICAqcGF0dGVybiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQzMl90ICAgICAgICAgcGF0dGVybkxlbmd0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVUGFyc2VFcnJvciAgICAqcGFyc2VFcnJvciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAqc3RhdHVzCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApOworCisvKioKKyogR2V0IGEgbG9jYWxlIGZvciB3aGljaCBkZWNp
bWFsIGZvcm1hdHRpbmcgcGF0dGVybnMgYXJlIGF2YWlsYWJsZS4KKyogQSBVTnVtYmVyRm9ybWF0
IGluIGEgbG9jYWxlIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gd2lsbCBwZXJmb3JtIHRoZSBj
b3JyZWN0CisqIGZvcm1hdHRpbmcgYW5kIHBhcnNpbmcgZm9yIHRoZSBsb2NhbGUuICBUaGUgcmVz
dWx0cyBvZiB0aGlzIGNhbGwgYXJlIG5vdAorKiB2YWxpZCBmb3IgcnVsZS1iYXNlZCBudW1iZXIg
Zm9ybWF0cy4KKyogQHBhcmFtIGxvY2FsZUluZGV4IFRoZSBpbmRleCBvZiB0aGUgZGVzaXJlZCBs
b2NhbGUuCisqIEByZXR1cm4gQSBsb2NhbGUgZm9yIHdoaWNoIG51bWJlciBmb3JtYXR0aW5nIHBh
dHRlcm5zIGFyZSBhdmFpbGFibGUsIG9yIDAgaWYgbm9uZS4KKyogQHNlZSB1bnVtX2NvdW50QXZh
aWxhYmxlCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGNvbnN0IGNoYXIqIFVfRVhQ
T1JUMiAKK3VudW1fZ2V0QXZhaWxhYmxlKGludDMyX3QgbG9jYWxlSW5kZXgpOworCisvKioKKyog
RGV0ZXJtaW5lIGhvdyBtYW55IGxvY2FsZXMgaGF2ZSBkZWNpbWFsIGZvcm1hdHRpbmcgcGF0dGVy
bnMgYXZhaWxhYmxlLiAgVGhlCisqIHJlc3VsdHMgb2YgdGhpcyBjYWxsIGFyZSBub3QgdmFsaWQg
Zm9yIHJ1bGUtYmFzZWQgbnVtYmVyIGZvcm1hdHMuCisqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVs
IGZvciBkZXRlcm1pbmluZyB0aGUgbG9vcCBlbmRpbmcgY29uZGl0aW9uIGZvcgorKiBjYWxscyB0
byB7QGxpbmsgI3VudW1fZ2V0QXZhaWxhYmxlIH0uCisqIEByZXR1cm4gVGhlIG51bWJlciBvZiBs
b2NhbGVzIGZvciB3aGljaCBkZWNpbWFsIGZvcm1hdHRpbmcgcGF0dGVybnMgYXJlIGF2YWlsYWJs
ZS4KKyogQHNlZSB1bnVtX2dldEF2YWlsYWJsZQorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NU
QUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VudW1fY291bnRBdmFpbGFibGUodm9pZCk7CisKKy8q
KiBUaGUgcG9zc2libGUgVU51bWJlckZvcm1hdCBudW1lcmljIGF0dHJpYnV0ZXMgQHN0YWJsZSBJ
Q1UgMi4wICovCit0eXBlZGVmIGVudW0gVU51bWJlckZvcm1hdEF0dHJpYnV0ZSB7CisgIC8qKiBQ
YXJzZSBpbnRlZ2VycyBvbmx5ICovCisgIFVOVU1fUEFSU0VfSU5UX09OTFksCisgIC8qKiBVc2Ug
Z3JvdXBpbmcgc2VwYXJhdG9yICovCisgIFVOVU1fR1JPVVBJTkdfVVNFRCwKKyAgLyoqIEFsd2F5
cyBzaG93IGRlY2ltYWwgcG9pbnQgKi8KKyAgVU5VTV9ERUNJTUFMX0FMV0FZU19TSE9XTiwKKyAg
LyoqIE1heGltdW0gaW50ZWdlciBkaWdpdHMgKi8KKyAgVU5VTV9NQVhfSU5URUdFUl9ESUdJVFMs
CisgIC8qKiBNaW5pbXVtIGludGVnZXIgZGlnaXRzICovCisgIFVOVU1fTUlOX0lOVEVHRVJfRElH
SVRTLAorICAvKiogSW50ZWdlciBkaWdpdHMgKi8KKyAgVU5VTV9JTlRFR0VSX0RJR0lUUywKKyAg
LyoqIE1heGltdW0gZnJhY3Rpb24gZGlnaXRzICovCisgIFVOVU1fTUFYX0ZSQUNUSU9OX0RJR0lU
UywKKyAgLyoqIE1pbmltdW0gZnJhY3Rpb24gZGlnaXRzICovCisgIFVOVU1fTUlOX0ZSQUNUSU9O
X0RJR0lUUywKKyAgLyoqIEZyYWN0aW9uIGRpZ2l0cyAqLworICBVTlVNX0ZSQUNUSU9OX0RJR0lU
UywKKyAgLyoqIE11bHRpcGxpZXIgKi8KKyAgVU5VTV9NVUxUSVBMSUVSLAorICAvKiogR3JvdXBp
bmcgc2l6ZSAqLworICBVTlVNX0dST1VQSU5HX1NJWkUsCisgIC8qKiBSb3VuZGluZyBNb2RlICov
CisgIFVOVU1fUk9VTkRJTkdfTU9ERSwKKyAgLyoqIFJvdW5kaW5nIGluY3JlbWVudCAqLworICBV
TlVNX1JPVU5ESU5HX0lOQ1JFTUVOVCwKKyAgLyoqIFRoZSB3aWR0aCB0byB3aGljaCB0aGUgb3V0
cHV0IG9mIDxjb2RlPmZvcm1hdCgpPC9jb2RlPiBpcyBwYWRkZWQuICovCisgIFVOVU1fRk9STUFU
X1dJRFRILAorICAvKiogVGhlIHBvc2l0aW9uIGF0IHdoaWNoIHBhZGRpbmcgd2lsbCB0YWtlIHBs
YWNlLiAqLworICBVTlVNX1BBRERJTkdfUE9TSVRJT04sCisgIC8qKiBTZWNvbmRhcnkgZ3JvdXBp
bmcgc2l6ZSAqLworICBVTlVNX1NFQ09OREFSWV9HUk9VUElOR19TSVpFLAorICAvKiogVXNlIHNp
Z25pZmljYW50IGRpZ2l0cworICAgKiBAc3RhYmxlIElDVSAzLjAgKi8KKyAgVU5VTV9TSUdOSUZJ
Q0FOVF9ESUdJVFNfVVNFRCwKKyAgLyoqIE1pbmltdW0gc2lnbmlmaWNhbnQgZGlnaXRzCisgICAq
IEBzdGFibGUgSUNVIDMuMCAqLworICBVTlVNX01JTl9TSUdOSUZJQ0FOVF9ESUdJVFMsCisgIC8q
KiBNYXhpbXVtIHNpZ25pZmljYW50IGRpZ2l0cworICAgKiBAc3RhYmxlIElDVSAzLjAgKi8KKyAg
VU5VTV9NQVhfU0lHTklGSUNBTlRfRElHSVRTLAorICAvKiogTGVuaWVudCBwYXJzZSBtb2RlIHVz
ZWQgYnkgcnVsZS1iYXNlZCBmb3JtYXRzLgorICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICovCisg
IFVOVU1fTEVOSUVOVF9QQVJTRQorfSBVTnVtYmVyRm9ybWF0QXR0cmlidXRlOworCisvKioKKyog
R2V0IGEgbnVtZXJpYyBhdHRyaWJ1dGUgYXNzb2NpYXRlZCB3aXRoIGEgVU51bWJlckZvcm1hdC4K
KyogQW4gZXhhbXBsZSBvZiBhIG51bWVyaWMgYXR0cmlidXRlIGlzIHRoZSBudW1iZXIgb2YgaW50
ZWdlciBkaWdpdHMgYSBmb3JtYXR0ZXIgd2lsbCBwcm9kdWNlLgorKiBAcGFyYW0gZm10IFRoZSBm
b3JtYXR0ZXIgdG8gcXVlcnkuCisqIEBwYXJhbSBhdHRyIFRoZSBhdHRyaWJ1dGUgdG8gcXVlcnk7
IG9uZSBvZiBVTlVNX1BBUlNFX0lOVF9PTkxZLCBVTlVNX0dST1VQSU5HX1VTRUQsCisqIFVOVU1f
REVDSU1BTF9BTFdBWVNfU0hPV04sIFVOVU1fTUFYX0lOVEVHRVJfRElHSVRTLCBVTlVNX01JTl9J
TlRFR0VSX0RJR0lUUywgVU5VTV9JTlRFR0VSX0RJR0lUUywKKyogVU5VTV9NQVhfRlJBQ1RJT05f
RElHSVRTLCBVTlVNX01JTl9GUkFDVElPTl9ESUdJVFMsIFVOVU1fRlJBQ1RJT05fRElHSVRTLCBV
TlVNX01VTFRJUExJRVIsCisqIFVOVU1fR1JPVVBJTkdfU0laRSwgVU5VTV9ST1VORElOR19NT0RF
LCBVTlVNX0ZPUk1BVF9XSURUSCwgVU5VTV9QQURESU5HX1BPU0lUSU9OLCBVTlVNX1NFQ09OREFS
WV9HUk9VUElOR19TSVpFLgorKiBAcmV0dXJuIFRoZSB2YWx1ZSBvZiBhdHRyLgorKiBAc2VlIHVu
dW1fc2V0QXR0cmlidXRlCisqIEBzZWUgdW51bV9nZXREb3VibGVBdHRyaWJ1dGUKKyogQHNlZSB1
bnVtX3NldERvdWJsZUF0dHJpYnV0ZQorKiBAc2VlIHVudW1fZ2V0VGV4dEF0dHJpYnV0ZQorKiBA
c2VlIHVudW1fc2V0VGV4dEF0dHJpYnV0ZQorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJM
RSBpbnQzMl90IFVfRVhQT1JUMiAKK3VudW1fZ2V0QXR0cmlidXRlKGNvbnN0IFVOdW1iZXJGb3Jt
YXQqICAgICAgICAgIGZtdCwKKyAgICAgICAgICBVTnVtYmVyRm9ybWF0QXR0cmlidXRlICBhdHRy
KTsKKworLyoqCisqIFNldCBhIG51bWVyaWMgYXR0cmlidXRlIGFzc29jaWF0ZWQgd2l0aCBhIFVO
dW1iZXJGb3JtYXQuCisqIEFuIGV4YW1wbGUgb2YgYSBudW1lcmljIGF0dHJpYnV0ZSBpcyB0aGUg
bnVtYmVyIG9mIGludGVnZXIgZGlnaXRzIGEgZm9ybWF0dGVyIHdpbGwgcHJvZHVjZS4gIElmIHRo
ZQorKiBmb3JtYXR0ZXIgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUgYXR0cmlidXRlLCB0aGUgY2Fs
bCBpcyBpZ25vcmVkLiAgUnVsZS1iYXNlZCBmb3JtYXR0ZXJzIG9ubHkgdW5kZXJzdGFuZAorKiB0
aGUgbGVuaWVudC1wYXJzZSBhdHRyaWJ1dGUuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0
byBzZXQuCisqIEBwYXJhbSBhdHRyIFRoZSBhdHRyaWJ1dGUgdG8gc2V0OyBvbmUgb2YgVU5VTV9Q
QVJTRV9JTlRfT05MWSwgVU5VTV9HUk9VUElOR19VU0VELAorKiBVTlVNX0RFQ0lNQUxfQUxXQVlT
X1NIT1dOLCBVTlVNX01BWF9JTlRFR0VSX0RJR0lUUywgVU5VTV9NSU5fSU5URUdFUl9ESUdJVFMs
IFVOVU1fSU5URUdFUl9ESUdJVFMsCisqIFVOVU1fTUFYX0ZSQUNUSU9OX0RJR0lUUywgVU5VTV9N
SU5fRlJBQ1RJT05fRElHSVRTLCBVTlVNX0ZSQUNUSU9OX0RJR0lUUywgVU5VTV9NVUxUSVBMSUVS
LAorKiBVTlVNX0dST1VQSU5HX1NJWkUsIFVOVU1fUk9VTkRJTkdfTU9ERSwgVU5VTV9GT1JNQVRf
V0lEVEgsIFVOVU1fUEFERElOR19QT1NJVElPTiwgVU5VTV9TRUNPTkRBUllfR1JPVVBJTkdfU0la
RSwKKyogb3IgVU5VTV9MRU5JRU5UX1BBUlNFLgorKiBAcGFyYW0gbmV3VmFsdWUgVGhlIG5ldyB2
YWx1ZSBvZiBhdHRyLgorKiBAc2VlIHVudW1fZ2V0QXR0cmlidXRlCisqIEBzZWUgdW51bV9nZXRE
b3VibGVBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX3NldERvdWJsZUF0dHJpYnV0ZQorKiBAc2VlIHVu
dW1fZ2V0VGV4dEF0dHJpYnV0ZQorKiBAc2VlIHVudW1fc2V0VGV4dEF0dHJpYnV0ZQorKiBAc3Rh
YmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VudW1fc2V0QXR0cmli
dXRlKCAgICBVTnVtYmVyRm9ybWF0KiAgICAgICAgICBmbXQsCisgICAgICAgICAgICBVTnVtYmVy
Rm9ybWF0QXR0cmlidXRlICBhdHRyLAorICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgICAg
ICAgbmV3VmFsdWUpOworCisKKy8qKgorKiBHZXQgYSBudW1lcmljIGF0dHJpYnV0ZSBhc3NvY2lh
dGVkIHdpdGggYSBVTnVtYmVyRm9ybWF0LgorKiBBbiBleGFtcGxlIG9mIGEgbnVtZXJpYyBhdHRy
aWJ1dGUgaXMgdGhlIG51bWJlciBvZiBpbnRlZ2VyIGRpZ2l0cyBhIGZvcm1hdHRlciB3aWxsIHBy
b2R1Y2UuCisqIElmIHRoZSBmb3JtYXR0ZXIgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUgYXR0cmli
dXRlLCAtMSBpcyByZXR1cm5lZC4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHF1ZXJ5
LgorKiBAcGFyYW0gYXR0ciBUaGUgYXR0cmlidXRlIHRvIHF1ZXJ5OyBlLmcuIFVOVU1fUk9VTkRJ
TkdfSU5DUkVNRU5ULgorKiBAcmV0dXJuIFRoZSB2YWx1ZSBvZiBhdHRyLgorKiBAc2VlIHVudW1f
Z2V0QXR0cmlidXRlCisqIEBzZWUgdW51bV9zZXRBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX3NldERv
dWJsZUF0dHJpYnV0ZQorKiBAc2VlIHVudW1fZ2V0VGV4dEF0dHJpYnV0ZQorKiBAc2VlIHVudW1f
c2V0VGV4dEF0dHJpYnV0ZQorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBkb3VibGUg
VV9FWFBPUlQyIAordW51bV9nZXREb3VibGVBdHRyaWJ1dGUoY29uc3QgVU51bWJlckZvcm1hdCog
ICAgICAgICAgZm10LAorICAgICAgICAgIFVOdW1iZXJGb3JtYXRBdHRyaWJ1dGUgIGF0dHIpOwor
CisvKioKKyogU2V0IGEgbnVtZXJpYyBhdHRyaWJ1dGUgYXNzb2NpYXRlZCB3aXRoIGEgVU51bWJl
ckZvcm1hdC4KKyogQW4gZXhhbXBsZSBvZiBhIG51bWVyaWMgYXR0cmlidXRlIGlzIHRoZSBudW1i
ZXIgb2YgaW50ZWdlciBkaWdpdHMgYSBmb3JtYXR0ZXIgd2lsbCBwcm9kdWNlLgorKiBJZiB0aGUg
Zm9ybWF0dGVyIGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlIGF0dHJpYnV0ZSwgdGhpcyBjYWxsIGlz
IGlnbm9yZWQuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBzZXQuCisqIEBwYXJhbSBh
dHRyIFRoZSBhdHRyaWJ1dGUgdG8gc2V0OyBlLmcuIFVOVU1fUk9VTkRJTkdfSU5DUkVNRU5ULgor
KiBAcGFyYW0gbmV3VmFsdWUgVGhlIG5ldyB2YWx1ZSBvZiBhdHRyLgorKiBAc2VlIHVudW1fZ2V0
QXR0cmlidXRlCisqIEBzZWUgdW51bV9zZXRBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX2dldERvdWJs
ZUF0dHJpYnV0ZQorKiBAc2VlIHVudW1fZ2V0VGV4dEF0dHJpYnV0ZQorKiBAc2VlIHVudW1fc2V0
VGV4dEF0dHJpYnV0ZQorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2b2lkIFVfRVhQ
T1JUMiAKK3VudW1fc2V0RG91YmxlQXR0cmlidXRlKCAgICBVTnVtYmVyRm9ybWF0KiAgICAgICAg
ICBmbXQsCisgICAgICAgICAgICBVTnVtYmVyRm9ybWF0QXR0cmlidXRlICBhdHRyLAorICAgICAg
ICAgICAgZG91YmxlICAgICAgICAgICAgICAgICBuZXdWYWx1ZSk7CisKKy8qKiBUaGUgcG9zc2li
bGUgVU51bWJlckZvcm1hdCB0ZXh0IGF0dHJpYnV0ZXMgQHN0YWJsZSBJQ1UgMi4wKi8KK3R5cGVk
ZWYgZW51bSBVTnVtYmVyRm9ybWF0VGV4dEF0dHJpYnV0ZSB7CisgIC8qKiBQb3NpdGl2ZSBwcmVm
aXggKi8KKyAgVU5VTV9QT1NJVElWRV9QUkVGSVgsCisgIC8qKiBQb3NpdGl2ZSBzdWZmaXggKi8K
KyAgVU5VTV9QT1NJVElWRV9TVUZGSVgsCisgIC8qKiBOZWdhdGl2ZSBwcmVmaXggKi8KKyAgVU5V
TV9ORUdBVElWRV9QUkVGSVgsCisgIC8qKiBOZWdhdGl2ZSBzdWZmaXggKi8KKyAgVU5VTV9ORUdB
VElWRV9TVUZGSVgsCisgIC8qKiBUaGUgY2hhcmFjdGVyIHVzZWQgdG8gcGFkIHRvIHRoZSBmb3Jt
YXQgd2lkdGguICovCisgIFVOVU1fUEFERElOR19DSEFSQUNURVIsCisgIC8qKiBUaGUgSVNPIGN1
cnJlbmN5IGNvZGUgKi8KKyAgVU5VTV9DVVJSRU5DWV9DT0RFLAorICAvKioKKyAgICogVGhlIGRl
ZmF1bHQgcnVsZSBzZXQuICBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIHdpdGggcnVsZS1iYXNlZCBm
b3JtYXR0ZXJzLgorICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICovCisgIFVOVU1fREVGQVVMVF9S
VUxFU0VULAorICAvKioKKyAgICogVGhlIHB1YmxpYyBydWxlIHNldHMuICBUaGlzIGlzIG9ubHkg
YXZhaWxhYmxlIHdpdGggcnVsZS1iYXNlZCBmb3JtYXR0ZXJzLgorICAgKiBUaGlzIGlzIGEgcmVh
ZC1vbmx5IGF0dHJpYnV0ZS4gIFRoZSBwdWJsaWMgcnVsZXNldHMgYXJlIHJldHVybmVkIGFzIGEK
KyAgICogc2luZ2xlIHN0cmluZywgd2l0aCBlYWNoIHJ1bGVzZXQgbmFtZSBkZWxpbWl0ZWQgYnkg
JzsnIChzZW1pY29sb24pLgorICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICovCisgIFVOVU1fUFVC
TElDX1JVTEVTRVRTCit9IFVOdW1iZXJGb3JtYXRUZXh0QXR0cmlidXRlOworCisvKioKKyogR2V0
IGEgdGV4dCBhdHRyaWJ1dGUgYXNzb2NpYXRlZCB3aXRoIGEgVU51bWJlckZvcm1hdC4KKyogQW4g
ZXhhbXBsZSBvZiBhIHRleHQgYXR0cmlidXRlIGlzIHRoZSBzdWZmaXggZm9yIHBvc2l0aXZlIG51
bWJlcnMuICBJZiB0aGUgZm9ybWF0dGVyCisqIGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlIGF0dHJp
YnV0cmUsIFVfVU5TVVBQT1JURURfRVJST1IgaXMgcmV0dXJuZWQgYXMgdGhlIHN0YXR1cy4KKyog
UnVsZS1iYXNlZCBmb3JtYXR0ZXJzIG9ubHkgdW5kZXJzdGFuZCBVTlVNX0RFRkFVTFRfUlVMRVNF
VCBhbmQgVU5VTV9QVUJMSUNfUlVMRVNFVFMuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0
byBxdWVyeS4KKyogQHBhcmFtIHRhZyBUaGUgYXR0cmlidXRlIHRvIHF1ZXJ5OyBvbmUgb2YgVU5V
TV9QT1NJVElWRV9QUkVGSVgsIFVOVU1fUE9TSVRJVkVfU1VGRklYLAorKiBVTlVNX05FR0FUSVZF
X1BSRUZJWCwgVU5VTV9ORUdBVElWRV9TVUZGSVgsIFVOVU1fUEFERElOR19DSEFSQUNURVIsIFVO
VU1fQ1VSUkVOQ1lfQ09ERSwKKyogVU5VTV9ERUZBVUxUX1JVTEVTRVQsIG9yIFVOVU1fUFVCTElD
X1JVTEVTRVRTLgorKiBAcGFyYW0gcmVzdWx0IEEgcG9pbnRlciB0byBhIGJ1ZmZlciB0byByZWNl
aXZlIHRoZSBhdHRyaWJ1dGUuCisqIEBwYXJhbSByZXN1bHRMZW5ndGggVGhlIG1heGltdW0gc2l6
ZSBvZiByZXN1bHQuCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUg
dG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5l
ZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNh
dGVkLgorKiBAc2VlIHVudW1fc2V0VGV4dEF0dHJpYnV0ZQorKiBAc2VlIHVudW1fZ2V0QXR0cmli
dXRlCisqIEBzZWUgdW51bV9zZXRBdHRyaWJ1dGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9T
VEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1bnVtX2dldFRleHRBdHRyaWJ1dGUoICAgIGNvbnN0
ICAgIFVOdW1iZXJGb3JtYXQqICAgICAgICAgICAgICAgICAgICBmbXQsCisgICAgICAgICAgICBV
TnVtYmVyRm9ybWF0VGV4dEF0dHJpYnV0ZSAgICAgIHRhZywKKyAgICAgICAgICAgIFVDaGFyKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQsCisgICAgICAgICAgICBpbnQzMl90ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAgICAgIFVFcnJv
ckNvZGUqICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzKTsKKworLyoqCisqIFNldCBhIHRl
eHQgYXR0cmlidXRlIGFzc29jaWF0ZWQgd2l0aCBhIFVOdW1iZXJGb3JtYXQuCisqIEFuIGV4YW1w
bGUgb2YgYSB0ZXh0IGF0dHJpYnV0ZSBpcyB0aGUgc3VmZml4IGZvciBwb3NpdGl2ZSBudW1iZXJz
LiAgUnVsZS1iYXNlZCBmb3JtYXR0ZXJzCisqIG9ubHkgdW5kZXJzdGFuZCBVTlVNX0RFRkFVTFRf
UlVMRVNFVC4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHNldC4KKyogQHBhcmFtIHRh
ZyBUaGUgYXR0cmlidXRlIHRvIHNldDsgb25lIG9mIFVOVU1fUE9TSVRJVkVfUFJFRklYLCBVTlVN
X1BPU0lUSVZFX1NVRkZJWCwKKyogVU5VTV9ORUdBVElWRV9QUkVGSVgsIFVOVU1fTkVHQVRJVkVf
U1VGRklYLCBVTlVNX1BBRERJTkdfQ0hBUkFDVEVSLCBVTlVNX0NVUlJFTkNZX0NPREUsCisqIG9y
IFVOVU1fREVGQVVMVF9SVUxFU0VULgorKiBAcGFyYW0gbmV3VmFsdWUgVGhlIG5ldyB2YWx1ZSBv
ZiBhdHRyLgorKiBAcGFyYW0gbmV3VmFsdWVMZW5ndGggVGhlIGxlbmd0aCBvZiBuZXdWYWx1ZSwg
b3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBh
biBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAc2VlIHVudW1fZ2V0VGV4dEF0
dHJpYnV0ZQorKiBAc2VlIHVudW1fZ2V0QXR0cmlidXRlCisqIEBzZWUgdW51bV9zZXRBdHRyaWJ1
dGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1bnVt
X3NldFRleHRBdHRyaWJ1dGUoICAgIFVOdW1iZXJGb3JtYXQqICAgICAgICAgICAgICAgICAgICBm
bXQsCisgICAgICAgICAgICBVTnVtYmVyRm9ybWF0VGV4dEF0dHJpYnV0ZSAgICAgIHRhZywKKyAg
ICAgICAgICAgIGNvbnN0ICAgIFVDaGFyKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdW
YWx1ZSwKKyAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3
VmFsdWVMZW5ndGgsCisgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgICAgICAgICAgICAgICAg
ICAgKnN0YXR1cyk7CisKKy8qKgorICogRXh0cmFjdCB0aGUgcGF0dGVybiBmcm9tIGEgVU51bWJl
ckZvcm1hdC4gIFRoZSBwYXR0ZXJuIHdpbGwgZm9sbG93CisgKiB0aGUgRGVjaW1hbEZvcm1hdCBw
YXR0ZXJuIHN5bnRheC4KKyAqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBxdWVyeS4KKyAq
IEBwYXJhbSBpc1BhdHRlcm5Mb2NhbGl6ZWQgVFJVRSBpZiB0aGUgcGF0dGVybiBzaG91bGQgYmUg
bG9jYWxpemVkLAorICogRkFMU0Ugb3RoZXJ3aXNlLiAgVGhpcyBpcyBpZ25vcmVkIGlmIHRoZSBm
b3JtYXR0ZXIgaXMgYSBydWxlLWJhc2VkCisgKiBmb3JtYXR0ZXIuCisgKiBAcGFyYW0gcmVzdWx0
IEEgcG9pbnRlciB0byBhIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBwYXR0ZXJuLgorICogQHBhcmFt
IHJlc3VsdExlbmd0aCBUaGUgbWF4aW11bSBzaXplIG9mIHJlc3VsdC4KKyAqIEBwYXJhbSBzdGF0
dXMgQSBwb2ludGVyIHRvIGFuIGlucHV0LW91dHB1dCBVRXJyb3JDb2RlLgorICogQHJldHVybiBU
aGUgdG90YWwgYnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVyIHRoYW4gcmVzdWx0TGVuZ3Ro
LAorICogdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorICogQHNlZSB1bnVtX2FwcGx5UGF0dGVy
bgorICogQHNlZSBEZWNpbWFsRm9ybWF0CisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFC
TEUgaW50MzJfdCBVX0VYUE9SVDIgCit1bnVtX3RvUGF0dGVybiggICAgY29uc3QgICAgVU51bWJl
ckZvcm1hdCogICAgICAgICAgZm10LAorICAgICAgICBVQm9vbCAgICAgICAgICAgICAgICAgIGlz
UGF0dGVybkxvY2FsaXplZCwKKyAgICAgICAgVUNoYXIqICAgICAgICAgICAgICAgICAgcmVzdWx0
LAorICAgICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICByZXN1bHRMZW5ndGgsCisgICAgICAg
IFVFcnJvckNvZGUqICAgICAgICAgICAgIHN0YXR1cyk7CisKKworLyoqCisgKiBDb25zdGFudHMg
Zm9yIHNwZWNpZnlpbmcgYSBudW1iZXIgZm9ybWF0IHN5bWJvbC4KKyAqIEBzdGFibGUgSUNVIDIu
MAorICovCit0eXBlZGVmIGVudW0gVU51bWJlckZvcm1hdFN5bWJvbCB7CisgIC8qKiBUaGUgZGVj
aW1hbCBzZXBhcmF0b3IgKi8KKyAgVU5VTV9ERUNJTUFMX1NFUEFSQVRPUl9TWU1CT0wgPSAwLAor
ICAvKiogVGhlIGdyb3VwaW5nIHNlcGFyYXRvciAqLworICBVTlVNX0dST1VQSU5HX1NFUEFSQVRP
Ul9TWU1CT0wgPSAxLAorICAvKiogVGhlIHBhdHRlcm4gc2VwYXJhdG9yICovCisgIFVOVU1fUEFU
VEVSTl9TRVBBUkFUT1JfU1lNQk9MID0gMiwKKyAgLyoqIFRoZSBwZXJjZW50IHNpZ24gKi8KKyAg
VU5VTV9QRVJDRU5UX1NZTUJPTCA9IDMsCisgIC8qKiBaZXJvKi8KKyAgVU5VTV9aRVJPX0RJR0lU
X1NZTUJPTCA9IDQsCisgIC8qKiBDaGFyYWN0ZXIgcmVwcmVzZW50aW5nIGEgZGlnaXQgaW4gdGhl
IHBhdHRlcm4gKi8KKyAgVU5VTV9ESUdJVF9TWU1CT0wgPSA1LAorICAvKiogVGhlIG1pbnVzIHNp
Z24gKi8KKyAgVU5VTV9NSU5VU19TSUdOX1NZTUJPTCA9IDYsCisgIC8qKiBUaGUgcGx1cyBzaWdu
ICovCisgIFVOVU1fUExVU19TSUdOX1NZTUJPTCA9IDcsCisgIC8qKiBUaGUgY3VycmVuY3kgc3lt
Ym9sICovCisgIFVOVU1fQ1VSUkVOQ1lfU1lNQk9MID0gOCwKKyAgLyoqIFRoZSBpbnRlcm5hdGlv
bmFsIGN1cnJlbmN5IHN5bWJvbCAqLworICBVTlVNX0lOVExfQ1VSUkVOQ1lfU1lNQk9MID0gOSwK
KyAgLyoqIFRoZSBtb25ldGFyeSBzZXBhcmF0b3IgKi8KKyAgVU5VTV9NT05FVEFSWV9TRVBBUkFU
T1JfU1lNQk9MID0gMTAsCisgIC8qKiBUaGUgZXhwb25lbnRpYWwgc3ltYm9sICovCisgIFVOVU1f
RVhQT05FTlRJQUxfU1lNQk9MID0gMTEsCisgIC8qKiBQZXIgbWlsbCBzeW1ib2wgKi8KKyAgVU5V
TV9QRVJNSUxMX1NZTUJPTCA9IDEyLAorICAvKiogRXNjYXBlIHBhZGRpbmcgY2hhcmFjdGVyICov
CisgIFVOVU1fUEFEX0VTQ0FQRV9TWU1CT0wgPSAxMywKKyAgLyoqIEluZmluaXR5IHN5bWJvbCAq
LworICBVTlVNX0lORklOSVRZX1NZTUJPTCA9IDE0LAorICAvKiogTmFuIHN5bWJvbCAqLworICBV
TlVNX05BTl9TWU1CT0wgPSAxNSwKKyAgLyoqIFNpZ25pZmljYW50IGRpZ2l0IHN5bWJvbAorICAg
KiBAc3RhYmxlIElDVSAzLjAgKi8KKyAgVU5VTV9TSUdOSUZJQ0FOVF9ESUdJVF9TWU1CT0wgPSAx
NiwKKyAgLyoqIFRoZSBtb25ldGFyeSBncm91cGluZyBzZXBhcmF0b3IgCisgICAqIEBzdGFibGUg
SUNVIDMuNgorICAgKi8KKyAgVU5VTV9NT05FVEFSWV9HUk9VUElOR19TRVBBUkFUT1JfU1lNQk9M
ID0gMTcsICAKKyAgLyoqIE9uZQorICAgKiBAZHJhZnQgSUNVIDQuNgorICAgKi8KKyAgVU5VTV9P
TkVfRElHSVRfU1lNQk9MID0gMTgsCisgIC8qKiBUd28KKyAgICogQGRyYWZ0IElDVSA0LjYKKyAg
ICovCisgIFVOVU1fVFdPX0RJR0lUX1NZTUJPTCA9IDE5LAorICAvKiogVGhyZWUKKyAgICogQGRy
YWZ0IElDVSA0LjYKKyAgICovCisgIFVOVU1fVEhSRUVfRElHSVRfU1lNQk9MID0gMjAsCisgIC8q
KiBGb3VyCisgICAqIEBkcmFmdCBJQ1UgNC42CisgICAqLworICBVTlVNX0ZPVVJfRElHSVRfU1lN
Qk9MID0gMjEsCisgIC8qKiBGaXZlCisgICAqIEBkcmFmdCBJQ1UgNC42CisgICAqLworICBVTlVN
X0ZJVkVfRElHSVRfU1lNQk9MID0gMjIsCisgIC8qKiBTaXgKKyAgICogQGRyYWZ0IElDVSA0LjYK
KyAgICovCisgIFVOVU1fU0lYX0RJR0lUX1NZTUJPTCA9IDIzLAorICAvKiogU2V2ZW4KKyAgICAq
IEBkcmFmdCBJQ1UgNC42CisgICAqLworICBVTlVNX1NFVkVOX0RJR0lUX1NZTUJPTCA9IDI0LAor
ICAvKiogRWlnaHQKKyAgICogQGRyYWZ0IElDVSA0LjYKKyAgICovCisgIFVOVU1fRUlHSFRfRElH
SVRfU1lNQk9MID0gMjUsCisgIC8qKiBOaW5lCisgICAqIEBkcmFmdCBJQ1UgNC42CisgICAqLwor
ICBVTlVNX05JTkVfRElHSVRfU1lNQk9MID0gMjYsCisgIC8qKiBjb3VudCBzeW1ib2wgY29uc3Rh
bnRzICovCisgIFVOVU1fRk9STUFUX1NZTUJPTF9DT1VOVCA9IDI3Cit9IFVOdW1iZXJGb3JtYXRT
eW1ib2w7CisKKy8qKgorKiBHZXQgYSBzeW1ib2wgYXNzb2NpYXRlZCB3aXRoIGEgVU51bWJlckZv
cm1hdC4KKyogQSBVTnVtYmVyRm9ybWF0IHVzZXMgc3ltYm9scyB0byByZXByZXNlbnQgdGhlIHNw
ZWNpYWwgbG9jYWxlLWRlcGVuZGVudAorKiBjaGFyYWN0ZXJzIGluIGEgbnVtYmVyLCBmb3IgZXhh
bXBsZSB0aGUgcGVyY2VudCBzaWduLiBUaGlzIEFQSSBpcyBub3QKKyogc3VwcG9ydGVkIGZvciBy
dWxlLWJhc2VkIGZvcm1hdHRlcnMuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBxdWVy
eS4KKyogQHBhcmFtIHN5bWJvbCBUaGUgVU51bWJlckZvcm1hdFN5bWJvbCBjb25zdGFudCBmb3Ig
dGhlIHN5bWJvbCB0byBnZXQKKyogQHBhcmFtIGJ1ZmZlciBUaGUgc3RyaW5nIGJ1ZmZlciB0aGF0
IHdpbGwgcmVjZWl2ZSB0aGUgc3ltYm9sIHN0cmluZzsKKyogICAgICAgICAgICAgICBpZiBpdCBp
cyBOVUxMLCB0aGVuIG9ubHkgdGhlIGxlbmd0aCBvZiB0aGUgc3ltYm9sIGlzIHJldHVybmVkCisq
IEBwYXJhbSBzaXplIFRoZSBzaXplIG9mIHRoZSBzdHJpbmcgYnVmZmVyCisqIEBwYXJhbSBzdGF0
dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEBy
ZXR1cm4gVGhlIGxlbmd0aCBvZiB0aGUgc3ltYm9sOyB0aGUgYnVmZmVyIGlzIG5vdCBtb2RpZmll
ZCBpZgorKiAgICAgICAgIDxjb2RlPmxlbmd0aCZndDs9c2l6ZTwvY29kZT4KKyogQHNlZSB1bnVt
X3NldFN5bWJvbAorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQ
T1JUMgordW51bV9nZXRTeW1ib2woY29uc3QgVU51bWJlckZvcm1hdCAqZm10LAorICAgICAgICAg
ICAgICAgVU51bWJlckZvcm1hdFN5bWJvbCBzeW1ib2wsCisgICAgICAgICAgICAgICBVQ2hhciAq
YnVmZmVyLAorICAgICAgICAgICAgICAgaW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgVUVy
cm9yQ29kZSAqc3RhdHVzKTsKKworLyoqCisqIFNldCBhIHN5bWJvbCBhc3NvY2lhdGVkIHdpdGgg
YSBVTnVtYmVyRm9ybWF0LgorKiBBIFVOdW1iZXJGb3JtYXQgdXNlcyBzeW1ib2xzIHRvIHJlcHJl
c2VudCB0aGUgc3BlY2lhbCBsb2NhbGUtZGVwZW5kZW50CisqIGNoYXJhY3RlcnMgaW4gYSBudW1i
ZXIsIGZvciBleGFtcGxlIHRoZSBwZXJjZW50IHNpZ24uICBUaGlzIEFQSSBpcyBub3QKKyogc3Vw
cG9ydGVkIGZvciBydWxlLWJhc2VkIGZvcm1hdHRlcnMuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1h
dHRlciB0byBzZXQuCisqIEBwYXJhbSBzeW1ib2wgVGhlIFVOdW1iZXJGb3JtYXRTeW1ib2wgY29u
c3RhbnQgZm9yIHRoZSBzeW1ib2wgdG8gc2V0CisqIEBwYXJhbSB2YWx1ZSBUaGUgc3RyaW5nIHRv
IHNldCB0aGUgc3ltYm9sIHRvCisqIEBwYXJhbSBsZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgc3Ry
aW5nLCBvciAtMSBmb3IgYSB6ZXJvLXRlcm1pbmF0ZWQgc3RyaW5nCisqIEBwYXJhbSBzdGF0dXMg
QSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzLgorKiBAc2Vl
IHVudW1fZ2V0U3ltYm9sCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIHZvaWQgVV9F
WFBPUlQyCit1bnVtX3NldFN5bWJvbChVTnVtYmVyRm9ybWF0ICpmbXQsCisgICAgICAgICAgICAg
ICBVTnVtYmVyRm9ybWF0U3ltYm9sIHN5bWJvbCwKKyAgICAgICAgICAgICAgIGNvbnN0IFVDaGFy
ICp2YWx1ZSwKKyAgICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAg
VUVycm9yQ29kZSAqc3RhdHVzKTsKKworCisvKioKKyAqIEdldCB0aGUgbG9jYWxlIGZvciB0aGlz
IG51bWJlciBmb3JtYXQgb2JqZWN0LgorICogWW91IGNhbiBjaG9vc2UgYmV0d2VlbiB2YWxpZCBh
bmQgYWN0dWFsIGxvY2FsZS4KKyAqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBnZXQgdGhl
IGxvY2FsZSBmcm9tCisgKiBAcGFyYW0gdHlwZSB0eXBlIG9mIHRoZSBsb2NhbGUgd2UncmUgbG9v
a2luZyBmb3IgKHZhbGlkIG9yIGFjdHVhbCkgCisgKiBAcGFyYW0gc3RhdHVzIGVycm9yIGNvZGUg
Zm9yIHRoZSBvcGVyYXRpb24KKyAqIEByZXR1cm4gdGhlIGxvY2FsZSBuYW1lCisgKiBAc3RhYmxl
IElDVSAyLjgKKyAqLworVV9TVEFCTEUgY29uc3QgY2hhciogVV9FWFBPUlQyCit1bnVtX2dldExv
Y2FsZUJ5VHlwZShjb25zdCBVTnVtYmVyRm9ybWF0ICpmbXQsCisgICAgICAgICAgICAgICAgICAg
ICBVTG9jRGF0YUxvY2FsZVR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNv
ZGUqIHN0YXR1cyk7IAorCisjZW5kaWYgLyogI2lmICFVQ09ORklHX05PX0ZPUk1BVFRJTkcgKi8K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUv
dXR5cGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdXR5cGVzLmgKaW5k
ZXggMDBiZjE0Y2U4ZTZlNWQ2ZWM4ZWQ4N2Q4ZTk1NjE3MGNhNTc3ODdiMi4uMWJjZjdmNWQzOTA5
ZmY2NmI2NThlYTk1YmE0YTJjZGViNTQ5YzljMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ljdS91bmljb2RlL3V0eXBlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
Y3UvdW5pY29kZS91dHlwZXMuaApAQCAtNTUsNyArNTUsNyBAQAogICovCiAjaWZkZWYgWFBfQ1BM
VVNQTFVTCiAjICAgaWZuZGVmIFVfU0hPV19DUExVU1BMVVNfQVBJCi0jICAgICAgIGRlZmluZSBV
X1NIT1dfQ1BMVVNQTFVTX0FQSSAxCisjICAgICAgIGRlZmluZSBVX1NIT1dfQ1BMVVNQTFVTX0FQ
SSAwCiAjICAgZW5kaWYKICNlbHNlCiAjICAgdW5kZWYgVV9TSE9XX0NQTFVTUExVU19BUEkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCmlu
ZGV4IDM0NDdiMzk4ZmQwNjE4MDU5MDllNmYwMjJlM2Q2NjUyM2JhYzQ2OTguLjc3NTViZjRjZWEw
Y2Y0MzZkNzgzOTI4NjdjN2M3ZGNhZWU5NGJhZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaApAQCAtMTQxLDYgKzE0MSw3IEBACiAg
ICAgbWFjcm8obGFzdEluZGV4KSBcCiAgICAgbWFjcm8obGVuZ3RoKSBcCiAgICAgbWFjcm8obGlu
ZSkgXAorICAgIG1hY3JvKGxvY2FsZU1hdGNoZXIpIFwKICAgICBtYWNybyhtZXNzYWdlKSBcCiAg
ICAgbWFjcm8obXVsdGlsaW5lKSBcCiAgICAgbWFjcm8obmFtZSkgXApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yQ29uc3RydWN0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yQ29uc3RydWN0b3IuY3Bw
CmluZGV4IGQ0MWRkMTdjZDhlYjExMmEyMWVmYjZjMjFhMTQ0OTRmYjJlZDZkNjUuLjMxMDdiM2Y1
ZTk0ZGM4YWRlYjFiOTY4NWNmYjM1MGY0NzMxZGZkYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5jcHAKQEAg
LTE1MCwyNSArMTUwLDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxh
dG9yQ29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKEV4ZWNTCiAgICAgLy8gMTAuMi4y
IEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKGxvY2FsZXMgWywgb3B0aW9uc10pIChF
Q01BLTQwMiAyLjApCiAKICAgICAvLyAxLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBiZSBDYW5vbmlj
YWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgotICAgIC8vIEZJWE1FOiByZXF1ZXN0ZWQgPSBDYW5v
bmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpOworICAgIEpTQXJyYXkqIHJlcXVlc3RlZExvY2Fs
ZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKIAog
ICAgIC8vIDIuIFJldHVybklmQWJydXB0KHJlcXVlc3RlZExvY2FsZXMpLgotICAgIC8vIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAvLyAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyAzLiBSZXR1cm4g
U3VwcG9ydGVkTG9jYWxlcyglQ29sbGF0b3IlLltbYXZhaWxhYmxlTG9jYWxlc11dLCByZXF1ZXN0
ZWRMb2NhbGVzLCBvcHRpb25zKS4KLSAgICAvLyBGSVhNRTogcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShTdXBwb3J0ZWRMb2NhbGVzKGF2YWlsYWJsZSwgcmVxdWVzdGVkLCBvcHRpb25zKSk7Ci0KLSAg
ICAvLyBSZXR1cm4gZW1wdHkgYXJyYXkgdW50aWwgcHJvcGVybHkgaW1wbGVtZW50ZWQuCi0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
ZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpOwotICAgIEpTQXJyYXkqIHN1cHBvcnRlZExv
Y2FsZXMgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBnbG9iYWxPYmplY3Qt
PmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhV
bmRlY2lkZWQpLCAwKTsKLSAgICBpZiAoIXN1cHBvcnRlZExvY2FsZXMpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKLQotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoc3VwcG9ydGVkTG9jYWxlcyk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShzdXBwb3J0ZWRMb2NhbGVzKGV4ZWMsIGdsb2JhbE9iamVjdC0+aW50bENvbGxh
dG9yQXZhaWxhYmxlTG9jYWxlcygpLCByZXF1ZXN0ZWRMb2NhbGVzLCBleGVjLT5hcmd1bWVudCgx
KSkpOwogfQotICAgIAorCiB2b2lkIEludGxDb2xsYXRvckNvbnN0cnVjdG9yOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bENvbGxh
dG9yQ29uc3RydWN0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bENvbGxhdG9yQ29uc3RydWN0
b3IqPihjZWxsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAppbmRleCAwYjhkNDYwZDI2
NzQxYTRiOTMzNmI4Y2IwZjhiNjRmYjc4ZDA2ODdkLi45OGQzYmJlM2Q0MGUyYWNmZWI3MjhmOGEz
NjA1NDM0NTUyNjAzNzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwCkBAIC0xNTAs
MjIgKzE1MCwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGltZUZv
cm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZgogICAgIC8vIDEyLjIuMiBJbnRs
LkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVzIFssIG9wdGlvbnNdKSAo
RUNNQS00MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IGF2YWlsYWJsZUxvY2FsZXMgYmUgJURhdGVU
aW1lRm9ybWF0JS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4KLSAgICAvLyBGSVhNRTogYXZhaWxhYmxl
ID0gSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3I6OmdldEF2YWlsYWJsZUxvY2FsZXMoKQor
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5jYWxsZWUoKS0+Z2xvYmFs
T2JqZWN0KCk7CisgICAgY29uc3QgSGFzaFNldDxTdHJpbmc+IGF2YWlsYWJsZUxvY2FsZXMgPSBn
bG9iYWxPYmplY3QtPmludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAg
IC8vIDIuIExldCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9j
YWxlcykuCi0gICAgLy8gRklYTUU6IHJlcXVlc3RlZCA9IENhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
bG9jYWxlcykKKyAgICBKU0FycmF5KiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9j
YWxlTGlzdChleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
CiAgICAgLy8gMy4gUmV0dXJuIFN1cHBvcnRlZExvY2FsZXMoYXZhaWxhYmxlTG9jYWxlcywgcmVx
dWVzdGVkTG9jYWxlcywgb3B0aW9ucykuCi0gICAgLy8gRklYTUU6IHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoU3VwcG9ydGVkTG9jYWxlcyhhdmFpbGFibGUsIHJlcXVlc3RlZCwgb3B0aW9ucykpOwot
Ci0gICAgLy8gUmV0dXJuIGVtcHR5IGFycmF5IHVudGlsIHByb3Blcmx5IGltcGxlbWVudGVkLgot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKTsKLSAgICBKU0FycmF5KiBzdXBwb3J0
ZWRMb2NhbGVzID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgZ2xvYmFsT2Jq
ZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlX
aXRoVW5kZWNpZGVkKSwgMCk7Ci0gICAgaWYgKCFzdXBwb3J0ZWRMb2NhbGVzKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7Ci0KLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN1cHBvcnRlZExvY2FsZXMpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoc3VwcG9ydGVkTG9jYWxlcyhleGVjLCBhdmFpbGFibGVMb2NhbGVzLCBy
ZXF1ZXN0ZWRMb2NhbGVzLCBleGVjLT5hcmd1bWVudCgxKSkpOwogfQogICAgIAogdm9pZCBJbnRs
RGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggYjg2Mzlk
NmIxNGM3MDA3YTg3MTAyNTU3N2FhZTJlZDI5ZmJjZDJlMS4uZDA2NmVlODA0YmY3ODYyZDA0Y2Ux
Y2FkOTdmZmJlYjFjMWZjYzYwOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwCkBAIC0xNTAs
MjIgKzE1MCwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3Jt
YXRDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YoRQogICAgIC8vIDExLjIuMiBJbnRs
Lk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YobG9jYWxlcyBbLCBvcHRpb25zXSkgKEVD
TUEtNDAyIDIuMCkKIAogICAgIC8vIDEuIExldCBhdmFpbGFibGVMb2NhbGVzIGJlICVOdW1iZXJG
b3JtYXQlLltbYXZhaWxhYmxlTG9jYWxlc11dLgotICAgIC8vIEZJWE1FOiBhdmFpbGFibGUgPSBJ
bnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3I6OmdldEF2YWlsYWJsZUxvY2FsZXMoKQorICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0
KCk7CisgICAgY29uc3QgSGFzaFNldDxTdHJpbmc+IGF2YWlsYWJsZUxvY2FsZXMgPSBnbG9iYWxP
YmplY3QtPmludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CiAKICAgICAvLyAyLiBM
ZXQgcmVxdWVzdGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgot
ICAgIC8vIEZJWE1FOiByZXF1ZXN0ZWQgPSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMp
CisgICAgSlNBcnJheSogcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
ZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8v
IDMuIFJldHVybiBTdXBwb3J0ZWRMb2NhbGVzKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExv
Y2FsZXMsIG9wdGlvbnMpLgotICAgIC8vIEZJWE1FOiByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN1
cHBvcnRlZExvY2FsZXMoYXZhaWxhYmxlLCByZXF1ZXN0ZWQsIG9wdGlvbnMpKTsKLQotICAgIC8v
IFJldHVybiBlbXB0eSBhcnJheSB1bnRpbCBwcm9wZXJseSBpbXBsZW1lbnRlZC4KLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVj
LT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgSlNBcnJheSogc3VwcG9ydGVkTG9jYWxl
cyA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIGdsb2JhbE9iamVjdC0+YXJy
YXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aFVuZGVj
aWRlZCksIDApOwotICAgIGlmICghc3VwcG9ydGVkTG9jYWxlcykKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYykpOwotCi0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShzdXBwb3J0ZWRMb2NhbGVzKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHN1cHBvcnRlZExvY2FsZXMoZXhlYywgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVk
TG9jYWxlcywgZXhlYy0+YXJndW1lbnQoMSkpKTsKIH0KIAogdm9pZCBJbnRsTnVtYmVyRm9ybWF0
Q29uc3RydWN0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmpl
Y3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAKaW5k
ZXggYmE0NTdlNzI1NjA5MTA3ODkxMjJmNTEzNzVlZTlmZGMxMDI0ZDMyZi4uMWYzNjZiNmIxZDEw
MTk3NGYzNjJmZjMxN2RkMDU2MDg1YjI3NDI4NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bE9iamVjdC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShJ
TlRMKQogCisjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJGdW5jdGlvblByb3RvdHlwZS5o
IgogI2luY2x1ZGUgIkludGxDb2xsYXRvci5oIgogI2luY2x1ZGUgIkludGxDb2xsYXRvckNvbnN0
cnVjdG9yLmgiCkBAIC0zOSwxNCArNDAsMjcgQEAKICNpbmNsdWRlICJJbnRsTnVtYmVyRm9ybWF0
Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCisjaW5jbHVk
ZSA8dW5pY29kZS91bG9jLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShJbnRs
T2JqZWN0KTsKIAorU3RyaW5nIGdldENhbm9uaWNhbExhbmdUYWcoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mKTsKK1N0cmluZyBnZXRQcml2YXRlVXNlTGFuZ1RhZyhjb25zdCBWZWN0b3I8U3RyaW5nPiYs
IHNpemVfdCk7CitTdHJpbmcgZ2V0R3JhbmRmYXRoZXJlZExhbmdUYWcoY29uc3QgU3RyaW5nJik7
CitTdHJpbmcgY2Fub25pY2FsaXplTGFuZ3VhZ2VUYWcoU3RyaW5nKTsKK1N0cmluZyBkZWZhdWx0
TG9jYWxlKCk7CitTdHJpbmcgYmVzdEF2YWlsYWJsZUxvY2FsZShjb25zdCBIYXNoU2V0PFN0cmlu
Zz4mLCBTdHJpbmcpOworSlNBcnJheSogbG9va3VwU3VwcG9ydGVkTG9jYWxlcyhFeGVjU3RhdGUq
LCBjb25zdCBIYXNoU2V0PFN0cmluZz4mLCBKU0FycmF5Kik7CitKU0FycmF5KiBiZXN0Rml0U3Vw
cG9ydGVkTG9jYWxlcyhFeGVjU3RhdGUqLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mLCBKU0FycmF5
Kik7CitTdHJpbmcgZ2V0SW50bFN0cmluZ09wdGlvbihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYsIGNvbnN0IGNoYXIqLCBTdHJpbmcpOwor
Ym9vbCBnZXRJbnRsQm9vbGVhbk9wdGlvbihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBQcm9wZXJ0eU5h
bWUsIGJvb2wpOworCiB9CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTAyLDYgKzExNiw2NDMgQEAg
U3RydWN0dXJlKiBJbnRsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1YKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7CiB9CiAKK1N0cmluZyBjYW5vbmljYWxpemVMYW5ndWFnZVRhZyhTdHJp
bmcgbG9jYWxlKQoreworICAgIC8vIDYuMi4yIElzU3RydWN0dXJhbGx5VmFsaWRMYW5ndWFnZVRh
ZyAobG9jYWxlKQorICAgIC8vIDYuMi4zIENhbm9uaWNhbGl6ZUxhbmd1YWdlVGFnIChsb2NhbGUp
CisgICAgLy8gVGhlc2UgYXJlIGRvbmUgb25lIGFmdGVyIGFub3RoZXIgaW4gQ2Fub25pY2FsaXpl
TG9jYWxlTGlzdCwgc28gdGhleSBhcmUgY29tYmluZWQgaGVyZSB0byByZWR1Y2UgZHVwbGljYXRp
b24uCisgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL2JjcC9iY3A0Ny50eHQK
KworICAgIC8vIExhbmd1YWdlLVRhZyA9IGxhbmd0YWcgLyBwcml2YXRldXNlIC8gZ3JhbmRmYXRo
ZXJlZAorICAgIFN0cmluZyBncmFuZGZhdGhlciA9IGdldEdyYW5kZmF0aGVyZWRMYW5nVGFnKGxv
Y2FsZSk7CisgICAgaWYgKCFncmFuZGZhdGhlci5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGdy
YW5kZmF0aGVyOworCisgICAgLy8gRklYTUU6IFJlcGxhY2UgcmVkdW5kYW50IHRhZ3MgW1JGQzQ2
NDddLgorCisgICAgVmVjdG9yPFN0cmluZz4gcGFydHM7CisgICAgbG9jYWxlLnNwbGl0KCItIiwg
cGFydHMpOworICAgIHNpemVfdCBudW1QYXJ0cyA9IHBhcnRzLnNpemUoKTsKKyAgICBpZiAobnVt
UGFydHMgPiAwKSB7CisgICAgICAgIFN0cmluZyBsYW5ndGFnID0gZ2V0Q2Fub25pY2FsTGFuZ1Rh
ZyhwYXJ0cyk7CisgICAgICAgIGlmICghbGFuZ3RhZy5pc051bGwoKSkKKyAgICAgICAgICAgIHJl
dHVybiBsYW5ndGFnOworCisgICAgICAgIFN0cmluZyBwcml2YXRldXNlID0gZ2V0UHJpdmF0ZVVz
ZUxhbmdUYWcocGFydHMsIDApOworICAgICAgICBpZiAoIXByaXZhdGV1c2UuaXNOdWxsKCkpCisg
ICAgICAgICAgICByZXR1cm4gcHJpdmF0ZXVzZTsKKyAgICB9CisKKyAgICByZXR1cm4gU3RyaW5n
KCk7Cit9CisKK1N0cmluZyBnZXRDYW5vbmljYWxMYW5nVGFnKGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXJ0cykKK3sKKyAgICAvLyBGb2xsb3dzIHRoZSBncmFtbWFyIGF0IGh0dHBzOi8vd3d3LnJm
Yy1lZGl0b3Iub3JnL3JmYy9iY3AvYmNwNDcudHh0CisgICAgLy8gbGFuZ3RhZyA9IGxhbmd1YWdl
IFsiLSIgc2NyaXB0XSBbIi0iIHJlZ2lvbl0gKigiLSIgdmFyaWFudCkgKigiLSIgZXh0ZW5zaW9u
KSBbIi0iIHByaXZhdGV1c2VdCisKKyAgICBzaXplX3QgbnVtUGFydHMgPSBwYXJ0cy5zaXplKCk7
CisgICAgLy8gQ2hlY2sgZm9yIGxhbmd1YWdlLgorICAgIC8vIGxhbmd1YWdlID0gMiozQUxQSEEg
WyItIiBleHRsYW5nXSAvIDRBTFBIQSAvIDUqOEFMUEhBCisgICAgc2l6ZV90IGN1cnJlbnRJbmRl
eCA9IDA7CisgICAgU3RyaW5nIGN1cnJlbnRQYXJ0ID0gcGFydHNbY3VycmVudEluZGV4XTsKKyAg
ICB1bnNpZ25lZCBjdXJyZW50TGVuZ3RoID0gY3VycmVudFBhcnQubGVuZ3RoKCk7CisgICAgaWYg
KGN1cnJlbnRMZW5ndGggPCAyIHx8IGN1cnJlbnRMZW5ndGggPiA4IHx8ICFjdXJyZW50UGFydC5p
c0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzQVNDSUlBbHBoYT4oKSkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworCisgICAgKytjdXJyZW50SW5kZXg7CisgICAgU3RyaW5nQnVpbGRlciBjYW5vbmlj
YWw7CisgICAgY2Fub25pY2FsLmFwcGVuZChjdXJyZW50UGFydC5sb3dlcigpKTsKKworICAgIC8v
IENoZWNrIGZvciBleHRsYW5nLgorICAgIC8vIGV4dGxhbmcgPSAzQUxQSEEgKjIoIi0iIDNBTFBI
QSkKKyAgICBpZiAoY3VycmVudExlbmd0aCA8PSAzKSB7CisgICAgICAgIGZvciAoaW50IHRpbWVz
ID0gMDsgdGltZXMgPCAzICYmIGN1cnJlbnRJbmRleCA8IG51bVBhcnRzOyArK3RpbWVzKSB7Cisg
ICAgICAgICAgICBjdXJyZW50UGFydCA9IHBhcnRzW2N1cnJlbnRJbmRleF07CisgICAgICAgICAg
ICBjdXJyZW50TGVuZ3RoID0gY3VycmVudFBhcnQubGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAo
Y3VycmVudExlbmd0aCA9PSAzICYmIGN1cnJlbnRQYXJ0LmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8
aXNBU0NJSUFscGhhPigpKSB7CisgICAgICAgICAgICAgICAgKytjdXJyZW50SW5kZXg7CisgICAg
ICAgICAgICAgICAgY2Fub25pY2FsLmFwcGVuZCgiLSIpOworICAgICAgICAgICAgICAgIGNhbm9u
aWNhbC5hcHBlbmQoY3VycmVudFBhcnQubG93ZXIoKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENoZWNrIGZv
ciBzY3JpcHQuCisgICAgLy8gc2NyaXB0ID0gNEFMUEhBCisgICAgaWYgKGN1cnJlbnRJbmRleCA8
IG51bVBhcnRzKSB7CisgICAgICAgIGN1cnJlbnRQYXJ0ID0gcGFydHNbY3VycmVudEluZGV4XTsK
KyAgICAgICAgY3VycmVudExlbmd0aCA9IGN1cnJlbnRQYXJ0Lmxlbmd0aCgpOworICAgICAgICBp
ZiAoY3VycmVudExlbmd0aCA9PSA0ICYmIGN1cnJlbnRQYXJ0LmlzQWxsU3BlY2lhbENoYXJhY3Rl
cnM8aXNBU0NJSUFscGhhPigpKSB7CisgICAgICAgICAgICArK2N1cnJlbnRJbmRleDsKKyAgICAg
ICAgICAgIGNhbm9uaWNhbC5hcHBlbmQoIi0iKTsKKyAgICAgICAgICAgIGNhbm9uaWNhbC5hcHBl
bmQodG9BU0NJSVVwcGVyKGN1cnJlbnRQYXJ0WzBdKSk7CisgICAgICAgICAgICBjYW5vbmljYWwu
YXBwZW5kKGN1cnJlbnRQYXJ0LnN1YnN0cmluZygxLCAzKS5sb3dlcigpKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIENoZWNrIGZvciByZWdpb24uCisgICAgLy8gcmVnaW9uID0gMkFMUEhB
IC8gM0RJR0lUCisgICAgaWYgKGN1cnJlbnRJbmRleCA8IG51bVBhcnRzKSB7CisgICAgICAgIGN1
cnJlbnRQYXJ0ID0gcGFydHNbY3VycmVudEluZGV4XTsKKyAgICAgICAgY3VycmVudExlbmd0aCA9
IGN1cnJlbnRQYXJ0Lmxlbmd0aCgpOworICAgICAgICBib29sIGlzVmFsaWRSZWdpb24gPSAoCisg
ICAgICAgICAgICAoY3VycmVudExlbmd0aCA9PSAyICYmIGN1cnJlbnRQYXJ0LmlzQWxsU3BlY2lh
bENoYXJhY3RlcnM8aXNBU0NJSUFscGhhPigpKQorICAgICAgICAgICAgfHwgKGN1cnJlbnRMZW5n
dGggPT0gMyAmJiBjdXJyZW50UGFydC5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzQVNDSUlEaWdp
dD4oKSkKKyAgICAgICAgKTsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpb24pIHsKKyAgICAgICAg
ICAgICsrY3VycmVudEluZGV4OworICAgICAgICAgICAgY2Fub25pY2FsLmFwcGVuZCgiLSIpOwor
ICAgICAgICAgICAgY2Fub25pY2FsLmFwcGVuZChjdXJyZW50UGFydC51cHBlcigpKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIENoZWNrIGZvciB2YXJpYW50LgorICAgIC8vIDUqOGFscGhh
bnVtIC8gKERJR0lUIDNhbHBoYW51bSkKKyAgICBIYXNoU2V0PFN0cmluZz4gc3VidGFnczsKKyAg
ICB3aGlsZSAoY3VycmVudEluZGV4IDwgbnVtUGFydHMpIHsKKyAgICAgICAgY3VycmVudFBhcnQg
PSBwYXJ0c1tjdXJyZW50SW5kZXhdOworICAgICAgICBjdXJyZW50TGVuZ3RoID0gY3VycmVudFBh
cnQubGVuZ3RoKCk7CisgICAgICAgIGJvb2wgaXNWYWxpZFZhcmlhbnQgPSAoCisgICAgICAgICAg
ICAoY3VycmVudExlbmd0aCA+PSA1ICYmIGN1cnJlbnRMZW5ndGggPD0gOCAmJiBjdXJyZW50UGFy
dC5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzQVNDSUlBbHBoYW51bWVyaWM+KCkpCisgICAgICAg
ICAgICB8fCAoY3VycmVudExlbmd0aCA9PSA0ICYmIGlzQVNDSUlEaWdpdChjdXJyZW50UGFydFsw
XSkgJiYgY3VycmVudFBhcnQuc3Vic3RyaW5nKDEsIDMpLmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8
aXNBU0NJSUFscGhhbnVtZXJpYz4oKSkKKyAgICAgICAgKTsKKyAgICAgICAgaWYgKCFpc1ZhbGlk
VmFyaWFudCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIENhbm5vdCBpbmNsdWRl
IGR1cGxpY2F0ZSBzdWJ0YWdzIChjYXNlIGluc2Vuc2l0aXZlKS4KKyAgICAgICAgY3VycmVudFBh
cnQgPSBjdXJyZW50UGFydC5sb3dlcigpOworICAgICAgICBpZiAoc3VidGFncy5jb250YWlucyhj
dXJyZW50UGFydCkpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIHN1YnRh
Z3MuYWRkKGN1cnJlbnRQYXJ0KTsKKworICAgICAgICArK2N1cnJlbnRJbmRleDsKKworICAgICAg
ICAvLyBSZW9yZGVyaW5nIHZhcmlhbnQgc3VidGFncyBpcyBub3QgcmVxdWlyZWQgaW4gdGhlIHNw
ZWMuCisgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQoIi0iKTsKKyAgICAgICAgY2Fub25pY2FsLmFw
cGVuZChjdXJyZW50UGFydCk7CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIGV4dGVuc2lvbi4K
KyAgICAvLyBleHRlbnNpb24gPSBzaW5nbGV0b24gMSooIi0iICgyKjhhbHBoYW51bSkpCisgICAg
Ly8gc2luZ2xldG9uID0gYWxwaGFudW0gZXhjZXB0IHggb3IgWAorICAgIHN1YnRhZ3MuY2xlYXIo
KTsKKyAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25zOworICAgIHdoaWxlIChjdXJyZW50SW5k
ZXggPCBudW1QYXJ0cykgeworICAgICAgICBjdXJyZW50UGFydCA9IHBhcnRzW2N1cnJlbnRJbmRl
eF0ubG93ZXIoKTsKKyAgICAgICAgY3VycmVudExlbmd0aCA9IGN1cnJlbnRQYXJ0Lmxlbmd0aCgp
OworICAgICAgICBib29sIGlzVmFsaWRTaW5nbGV0b24gPSAoY3VycmVudExlbmd0aCA9PSAxICYm
IGN1cnJlbnRQYXJ0ICE9ICJ4IiAmJiBpc0FTQ0lJQWxwaGFudW1lcmljKGN1cnJlbnRQYXJ0WzBd
KSk7CisgICAgICAgIGlmICghaXNWYWxpZFNpbmdsZXRvbikKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIC8vIENhbm5vdCBpbmNsdWRlIGR1cGxpY2F0ZSBzaW5nbGV0b24gKGNhc2UgaW5z
ZW5zaXRpdmUsIGFscmVhZHkgbG93ZXJjYXNlZCkuCisgICAgICAgIGN1cnJlbnRQYXJ0ID0gY3Vy
cmVudFBhcnQ7CisgICAgICAgIGlmIChzdWJ0YWdzLmNvbnRhaW5zKGN1cnJlbnRQYXJ0KSkKKyAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgc3VidGFncy5hZGQoY3VycmVudFBh
cnQpOworCisgICAgICAgICsrY3VycmVudEluZGV4OworICAgICAgICBpbnQgbnVtRXh0UGFydHMg
PSAwOworICAgICAgICBTdHJpbmdCdWlsZGVyIGV4dGVuc2lvbjsKKyAgICAgICAgZXh0ZW5zaW9u
LmFwcGVuZChjdXJyZW50UGFydCk7CisgICAgICAgIHdoaWxlIChjdXJyZW50SW5kZXggPCBudW1Q
YXJ0cykgeworICAgICAgICAgICAgY3VycmVudFBhcnQgPSBwYXJ0c1tjdXJyZW50SW5kZXhdOwor
ICAgICAgICAgICAgY3VycmVudExlbmd0aCA9IGN1cnJlbnRQYXJ0Lmxlbmd0aCgpOworCisgICAg
ICAgICAgICBib29sIGlzVmFsaWQgPSAoY3VycmVudExlbmd0aCA+PSAyICYmIGN1cnJlbnRMZW5n
dGggPD0gOCAmJiBjdXJyZW50UGFydC5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzQVNDSUlBbHBo
YW51bWVyaWM+KCkpOworICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKQorICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICArK2N1cnJlbnRJbmRleDsKKyAgICAgICAgICAgICsrbnVt
RXh0UGFydHM7CisgICAgICAgICAgICBleHRlbnNpb24uYXBwZW5kKCItIik7CisgICAgICAgICAg
ICBleHRlbnNpb24uYXBwZW5kKGN1cnJlbnRQYXJ0Lmxvd2VyKCkpOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gUmVxdWlyZXMgYXQgbGVhc3Qgb25lIHByb2R1Y3Rpb24uCisgICAgICAgIGlmICgh
bnVtRXh0UGFydHMpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAgICAgZXh0
ZW5zaW9ucy5hcHBlbmQoZXh0ZW5zaW9uLnRvU3RyaW5nKCkpOworICAgIH0KKworICAgIC8vIEFk
ZCBleHRlbnNpb25zIHRvIGNhbm9uaWNhbCBzb3J0ZWQgYnkgc2luZ2xldG9uLgorICAgIHN0ZDo6
c29ydCgKKyAgICAgICAgZXh0ZW5zaW9ucy5iZWdpbigpLAorICAgICAgICBleHRlbnNpb25zLmVu
ZCgpLAorICAgICAgICBbXSAoU3RyaW5nIGEsIFN0cmluZyBiKSAtPiBib29sIHsKKyAgICAgICAg
ICAgIHJldHVybiBhWzBdIDwgYlswXTsKKyAgICAgICAgfQorICAgICk7CisgICAgc2l6ZV90IG51
bUV4dGVuc3Rpb25zID0gZXh0ZW5zaW9ucy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW1FeHRlbnN0aW9uczsgKytpKSB7CisgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQoIi0i
KTsKKyAgICAgICAgY2Fub25pY2FsLmFwcGVuZChleHRlbnNpb25zW2ldKTsKKyAgICB9CisKKyAg
ICAvLyBDaGVjayBmb3IgcHJpdmF0ZXVzZS4KKyAgICBpZiAoY3VycmVudEluZGV4IDwgbnVtUGFy
dHMpIHsKKyAgICAgICAgU3RyaW5nIHByaXZhdGV1c2UgPSBnZXRQcml2YXRlVXNlTGFuZ1RhZyhw
YXJ0cywgY3VycmVudEluZGV4KTsKKyAgICAgICAgaWYgKHByaXZhdGV1c2UuaXNOdWxsKCkpCisg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQoIi0i
KTsKKyAgICAgICAgY2Fub25pY2FsLmFwcGVuZChwcml2YXRldXNlKTsKKyAgICB9CisKKyAgICAv
LyBGSVhNRTogUmVwbGFjZSBzdWJ0YWdzIHdpdGggdGhlaXIgcHJlZmVycmVkIHZhbHVlcy4KKwor
ICAgIHJldHVybiBjYW5vbmljYWwudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIGdldFByaXZhdGVV
c2VMYW5nVGFnKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJ0cywgc2l6ZV90IHN0YXJ0SW5kZXgp
Cit7CisgICAgc2l6ZV90IG51bVBhcnRzID0gcGFydHMuc2l6ZSgpOworICAgIHNpemVfdCBjdXJy
ZW50SW5kZXggPSBzdGFydEluZGV4OworCisgICAgLy8gQ2hlY2sgZm9yIHByaXZhdGV1c2UuCisg
ICAgLy8gcHJpdmF0ZXVzZSA9ICJ4IiAxKigiLSIgKDIqOGFscGhhbnVtKSkKKyAgICBTdHJpbmdC
dWlsZGVyIHByaXZhdGV1c2U7CisgICAgd2hpbGUgKGN1cnJlbnRJbmRleCA8IG51bVBhcnRzKSB7
CisgICAgICAgIFN0cmluZyBjdXJyZW50UGFydCA9IHBhcnRzW2N1cnJlbnRJbmRleF0ubG93ZXIo
KTsKKyAgICAgICAgdW5zaWduZWQgY3VycmVudExlbmd0aCA9IGN1cnJlbnRQYXJ0Lmxlbmd0aCgp
OworICAgICAgICBib29sIGlzVmFsaWQgPSAoY3VycmVudExlbmd0aCA9PSAxICYmIGN1cnJlbnRQ
YXJ0ID09ICJ4Iik7CisgICAgICAgIGlmICghaXNWYWxpZCkKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGlmIChjdXJyZW50SW5kZXggIT0gc3RhcnRJbmRleCkKKyAgICAgICAgICAgIHBy
aXZhdGV1c2UuYXBwZW5kKCItIik7CisKKyAgICAgICAgKytjdXJyZW50SW5kZXg7CisgICAgICAg
IGludCBudW1FeHRQYXJ0cyA9IDA7CisgICAgICAgIHByaXZhdGV1c2UuYXBwZW5kKGN1cnJlbnRQ
YXJ0KTsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnRJbmRleCA8IG51bVBhcnRzKSB7CisgICAgICAg
ICAgICBjdXJyZW50UGFydCA9IHBhcnRzW2N1cnJlbnRJbmRleF07CisgICAgICAgICAgICBjdXJy
ZW50TGVuZ3RoID0gY3VycmVudFBhcnQubGVuZ3RoKCk7CisKKyAgICAgICAgICAgIGJvb2wgaXNW
YWxpZCA9IChjdXJyZW50TGVuZ3RoID49IDIgJiYgY3VycmVudExlbmd0aCA8PSA4ICYmIGN1cnJl
bnRQYXJ0LmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNBU0NJSUFscGhhbnVtZXJpYz4oKSk7Cisg
ICAgICAgICAgICBpZiAoIWlzVmFsaWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgICsrY3VycmVudEluZGV4OworICAgICAgICAgICAgKytudW1FeHRQYXJ0czsKKyAgICAg
ICAgICAgIHByaXZhdGV1c2UuYXBwZW5kKCItIik7CisgICAgICAgICAgICBwcml2YXRldXNlLmFw
cGVuZChjdXJyZW50UGFydCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXF1aXJlcyBhdCBs
ZWFzdCBvbmUgcHJvZHVjdGlvbi4KKyAgICAgICAgaWYgKCFudW1FeHRQYXJ0cykKKyAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisKKyAgICAvLyBMZWZ0b3ZlcnMgbWFrZXMgaXQg
aW52YWxpZC4KKyAgICBpZiAoY3VycmVudEluZGV4IDwgbnVtUGFydHMpCisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKworICAgIHJldHVybiBwcml2YXRldXNlLnRvU3RyaW5nKCk7Cit9CisKK1N0
cmluZyBnZXRHcmFuZGZhdGhlcmVkTGFuZ1RhZyhjb25zdCBTdHJpbmcmIGxvY2FsZSkKK3sKKyAg
ICAvLyAgZ3JhbmRmYXRoZXJlZCA9IGlycmVndWxhciAvIHJlZ3VsYXIKKyAgICBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiB0YWdNYXAgPSB7CisgICAgICAgIC8vIElycmVndWxhci4KKyAgICAgICAg
eyBBU0NJSUxpdGVyYWwoImVuLWdiLW9lZCIpLCBBU0NJSUxpdGVyYWwoImVuLUdCLW9lZCIpIH0s
CisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJpLWFtaSIpLCBBU0NJSUxpdGVyYWwoImFtaSIpIH0s
CisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJpLWJubiIpLCBBU0NJSUxpdGVyYWwoImJubiIpIH0s
CisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJpLWRlZmF1bHQiKSwgQVNDSUlMaXRlcmFsKCJpLWRl
ZmF1bHQiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiaS1lbm9jaGlhbiIpLCBBU0NJSUxp
dGVyYWwoImktZW5vY2hpYW4iKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiaS1oYWsiKSwg
QVNDSUlMaXRlcmFsKCJoYWsiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiaS1rbGluZ29u
IiksIEFTQ0lJTGl0ZXJhbCgidGxoIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImktbHV4
IiksIEFTQ0lJTGl0ZXJhbCgibGIiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiaS1taW5n
byIpLCBBU0NJSUxpdGVyYWwoImktbWluZ28iKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgi
aS1uYXZham8iKSwgQVNDSUlMaXRlcmFsKCJudiIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFs
KCJpLXB3biIpLCBBU0NJSUxpdGVyYWwoInB3biIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFs
KCJpLXRhbyIpLCBBU0NJSUxpdGVyYWwoInRhbyIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFs
KCJpLXRheSIpLCBBU0NJSUxpdGVyYWwoInRheSIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFs
KCJpLXRzdSIpLCBBU0NJSUxpdGVyYWwoInRzdSIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFs
KCJzZ24tYmUtZnIiKSwgQVNDSUlMaXRlcmFsKCJzZmIiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0
ZXJhbCgic2duLWJlLW5sIiksIEFTQ0lJTGl0ZXJhbCgidmd0IikgfSwKKyAgICAgICAgeyBBU0NJ
SUxpdGVyYWwoInNnbi1jaC1kZSIpLCBBU0NJSUxpdGVyYWwoInNnZyIpIH0sCisgICAgICAgIC8v
IFJlZ3VsYXIuCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJhcnQtbG9qYmFuIiksIEFTQ0lJTGl0
ZXJhbCgiamJvIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImNlbC1nYXVsaXNoIiksIEFT
Q0lJTGl0ZXJhbCgiY2VsLWdhdWxpc2giKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgibm8t
Ym9rIiksIEFTQ0lJTGl0ZXJhbCgibmIiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgibm8t
bnluIiksIEFTQ0lJTGl0ZXJhbCgibm4iKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiemgt
Z3VveXUiKSwgQVNDSUlMaXRlcmFsKCJjbW4iKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgi
emgtaGFra2EiKSwgQVNDSUlMaXRlcmFsKCJoYWsiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJh
bCgiemgtbWluIiksIEFTQ0lJTGl0ZXJhbCgiemgtbWluIikgfSwKKyAgICAgICAgeyBBU0NJSUxp
dGVyYWwoInpoLW1pbi1uYW4iKSwgQVNDSUlMaXRlcmFsKCJuYW4iKSB9LAorICAgICAgICB7IEFT
Q0lJTGl0ZXJhbCgiemgteGlhbmciKSwgQVNDSUlMaXRlcmFsKCJoc24iKSB9CisgICAgfTsKKwor
ICAgIFN0cmluZyBsb3dlclRhZyA9IGxvY2FsZS5sb3dlcigpOworICAgIGlmICh0YWdNYXAuY29u
dGFpbnMobG93ZXJUYWcpKQorICAgICAgICByZXR1cm4gdGFnTWFwLmdldChsb3dlclRhZyk7CisK
KyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBkZWZhdWx0TG9jYWxlKCkKK3sKKyAg
ICAvLyA2LjIuNCBEZWZhdWx0TG9jYWxlICgpCisgICAgY29uc3QgY2hhciogZGVmID0gdWxvY19n
ZXREZWZhdWx0KCk7CisgICAgU3RyaW5nIGxvYyA9IFN0cmluZyhkZWYsIHN0cmxlbihkZWYpKTsK
KyAgICByZXR1cm4gbG9jLnJlcGxhY2UoJ18nLCAnLScpOworfQorCitKU0FycmF5KiBjYW5vbmlj
YWxpemVMb2NhbGVMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBsb2NhbGVzKQoreworICAg
IC8vIDkuMi4xIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QgKGxvY2FsZXMpCisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2Fs
bGVlKCktPmdsb2JhbE9iamVjdCgpOworICAgIEpTQXJyYXkqIHNlZW4gPSBKU0FycmF5Ojp0cnlD
cmVhdGVVbmluaXRpYWxpemVkKHZtLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5k
ZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhVbmRlY2lkZWQpLCAwKTsKKyAgICBp
ZiAoIXNlZW4pIHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICAvLyAxLiBJZiBsb2NhbGVzIGlzIHVuZGVm
aW5lZCwgdGhlbiBhLiBSZXR1cm4gYSBuZXcgZW1wdHkgTGlzdC4KKyAgICBpZiAobG9jYWxlcy5p
c1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4gc2VlbjsKKworICAgIC8vIDIuIExldCBzZWVu
IGJlIGFuIGVtcHR5IExpc3QuCisgICAgLy8gRG9uZSBiZWZvcmUgdG8gYWxzbyByZXR1cm4gaW4g
c3RlcCAxLCBpZiBuZWVkZWQuCisKKyAgICAvLyAzLiBJZiBUeXBlKGxvY2FsZXMpIGlzIFN0cmlu
ZywgdGhlbgorICAgIEpTT2JqZWN0KiBvTG9jYWxlczsKKyAgICBpZiAobG9jYWxlcy5pc1N0cmlu
ZygpKSB7CisgICAgICAgIC8vICBhLiBMZXQgYUxvY2FsZXMgYmUgQ3JlYXRlQXJyYXlGcm9tTGlz
dCjCq2xvY2FsZXPCuykuCisgICAgICAgIEpTQXJyYXkqIGFMb2NhbGVzID0gSlNBcnJheTo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvcklu
ZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoVW5kZWNpZGVkKSwgMSk7CisgICAg
ICAgIGFMb2NhbGVzLT5pbml0aWFsaXplSW5kZXgodm0sIDAsIGxvY2FsZXMpOworICAgICAgICAv
LyA0LiBMZXQgTyBiZSBUb09iamVjdChhTG9jYWxlcykuCisgICAgICAgIG9Mb2NhbGVzID0gYUxv
Y2FsZXM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gNC4gTGV0IE8gYmUgVG9PYmplY3QoYUxv
Y2FsZXMpLgorICAgICAgICBvTG9jYWxlcyA9IGxvY2FsZXMudG9PYmplY3QoZXhlYyk7CisgICAg
fQorCisgICAgLy8gNS4gUmV0dXJuSWZBYnJ1cHQoTykuCisgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIDYuIExldCBsZW4gYmUg
VG9MZW5ndGgoR2V0KE8sICJsZW5ndGgiKSkuCisgICAgSlNWYWx1ZSBsZW5ndGhQcm9wZXJ0eSA9
IG9Mb2NhbGVzLT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaW50
MzJfdCBsZW5ndGggPSBsZW5ndGhQcm9wZXJ0eS50b0ludDMyKGV4ZWMpOworICAgIGlmIChsZW5n
dGggPCAwKQorICAgICAgICBsZW5ndGggPSAwOworCisgICAgLy8gS2VlcCB0cmFjayBvZiBsb2Nh
bGVzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBsaXN0LgorICAgIEhhc2hTZXQ8U3RyaW5n
PiBzZWVuU2V0ID0gSGFzaFNldDxTdHJpbmc+KCk7CisKKyAgICAvLyA3LiBMZXQgayBiZSAwLgor
ICAgIC8vIDguIFJlcGVhdCwgd2hpbGUgayA8IGxlbgorICAgIGZvciAoaW50MzJfdCBrID0gMDsg
ayA8IGxlbmd0aDsgKytrKSB7CisgICAgICAgIC8vIGEuIExldCBQayBiZSBUb1N0cmluZyhrKS4K
KyAgICAgICAgLy8gTm90IG5lZWRlZCBiZWNhdXNlIGhhc1Byb3BlcnR5IGFuZCBnZXQgdGFrZSBh
biBpbnQgZm9yIG51bWVyaWMga2V5LgorCisgICAgICAgIC8vIGIuIExldCBrUHJlc2VudCBiZSBI
YXNQcm9wZXJ0eShPLCBQaykuCisgICAgICAgIGJvb2wga1ByZXNlbnQgPSBvTG9jYWxlcy0+aGFz
UHJvcGVydHkoZXhlYywgayk7CisKKyAgICAgICAgLy8gYy4gUmV0dXJuSWZBYnJ1cHQoa1ByZXNl
bnQpLgorICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgICAgICAvLyBkLiBJZiBrUHJlc2VudCBpcyB0cnVlLCB0aGVuCisg
ICAgICAgIGlmIChrUHJlc2VudCkgeworICAgICAgICAgICAgLy8gaS4gTGV0IGtWYWx1ZSBiZSBH
ZXQoTywgUGspLgorICAgICAgICAgICAgSlNWYWx1ZSBrVmFsdWUgPSBvTG9jYWxlcy0+Z2V0KGV4
ZWMsIGspOworCisgICAgICAgICAgICAvLyBpaS4gUmV0dXJuSWZBYnJ1cHQoa1ZhbHVlKS4KKyAg
ICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgICAgICAgICAgLy8gaWlpLiBJZiBUeXBlKGtWYWx1ZSkgaXMgbm90
IFN0cmluZyBvciBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4KKyAgICAgICAg
ICAgIGlmICgha1ZhbHVlLmlzU3RyaW5nKCkgJiYgIWtWYWx1ZS5pc09iamVjdCgpKSB7CisgICAg
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJsb2NhbGUgdmFs
dWUgbXVzdCBiZSBhIHN0cmluZyBvciBvYmplY3QiKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGl2LiBMZXQgdGFnIGJl
IFRvU3RyaW5nKGtWYWx1ZSkuCisgICAgICAgICAgICBKU1N0cmluZyogdGFnID0ga1ZhbHVlLnRv
U3RyaW5nKGV4ZWMpOworCisgICAgICAgICAgICAvLyB2LiBSZXR1cm5JZkFicnVwdCh0YWcpLgor
ICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgICAgICAgICAvLyB2aS4gSWYgSXNTdHJ1Y3R1cmFsbHlWYWxp
ZExhbmd1YWdlVGFnKHRhZykgaXMgZmFsc2UsIHRocm93IGEgUmFuZ2VFcnJvciBleGNlcHRpb24u
CisgICAgICAgICAgICAvLyB2aWkuIExldCBjYW5vbmljYWxpemVkVGFnIGJlIENhbm9uaWNhbGl6
ZUxhbmd1YWdlVGFnKHRhZykuCisgICAgICAgICAgICBTdHJpbmcgY2Fub25pY2FsaXplZFRhZyA9
IGNhbm9uaWNhbGl6ZUxhbmd1YWdlVGFnKHRhZy0+dmFsdWUoZXhlYykpOworICAgICAgICAgICAg
aWYgKGNhbm9uaWNhbGl6ZWRUYWcuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICBleGVjLT52
bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgU3RyaW5nOjpm
b3JtYXQoImludmFsaWQgbGFuZ3VhZ2UgdGFnOiAlcyIsIHRhZy0+dmFsdWUoZXhlYykudXRmOCgp
LmRhdGEoKSkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gdmlpaS4gSWYgY2Fub25pY2FsaXplZFRhZyBpcyBub3QgYW4g
ZWxlbWVudCBvZiBzZWVuLCBhcHBlbmQgY2Fub25pY2FsaXplZFRhZyBhcyB0aGUgbGFzdCBlbGVt
ZW50IG9mIHNlZW4uCisgICAgICAgICAgICBpZiAoIXNlZW5TZXQuY29udGFpbnMoY2Fub25pY2Fs
aXplZFRhZykpIHsKKyAgICAgICAgICAgICAgICBzZWVuU2V0LmFkZChjYW5vbmljYWxpemVkVGFn
KTsKKyAgICAgICAgICAgICAgICBzZWVuLT5wdXNoKGV4ZWMsIGpzU3RyaW5nKGV4ZWMsIGNhbm9u
aWNhbGl6ZWRUYWcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBlLiBJ
bmNyZWFzZSBrIGJ5IDEuCisgICAgfQorCisgICAgcmV0dXJuIHNlZW47Cit9CisKK1N0cmluZyBi
ZXN0QXZhaWxhYmxlTG9jYWxlKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxl
cywgU3RyaW5nIGxvY2FsZSkKK3sKKyAgICAvLyA5LjIuMiBCZXN0QXZhaWxhYmxlTG9jYWxlIChh
dmFpbGFibGVMb2NhbGVzLCBsb2NhbGUpCisgICAgLy8gMS4gTGV0IGNhbmRpZGF0ZSBiZSBsb2Nh
bGUuCisgICAgU3RyaW5nIGNhbmRpZGF0ZSA9IGxvY2FsZTsKKworICAgIC8vIDIuIFJlcGVhdAor
ICAgIHdoaWxlICghY2FuZGlkYXRlLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBhLiBJZiBhdmFp
bGFibGVMb2NhbGVzIGNvbnRhaW5zIGFuIGVsZW1lbnQgZXF1YWwgdG8gY2FuZGlkYXRlLCB0aGVu
IHJldHVybiBjYW5kaWRhdGUuCisgICAgICAgIGlmIChhdmFpbGFibGVMb2NhbGVzLmNvbnRhaW5z
KGNhbmRpZGF0ZSkpCisgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlOworCisgICAgICAgIC8v
IGIuIExldCBwb3MgYmUgdGhlIGNoYXJhY3RlciBpbmRleCBvZiB0aGUgbGFzdCBvY2N1cnJlbmNl
IG9mICItIiAoVSswMDJEKSB3aXRoaW4gY2FuZGlkYXRlLiBJZiB0aGF0IGNoYXJhY3RlciBkb2Vz
IG5vdCBvY2N1ciwgcmV0dXJuIHVuZGVmaW5lZC4KKyAgICAgICAgc2l6ZV90IHBvcyA9IGNhbmRp
ZGF0ZS5yZXZlcnNlRmluZCgiLSIpOworICAgICAgICBpZiAocG9zID09IG5vdEZvdW5kKQorICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgICAgIC8vIGMuIElmIHBvcyDiiaUgMiBh
bmQgdGhlIGNoYXJhY3RlciAiLSIgb2NjdXJzIGF0IGluZGV4IHBvcy0yIG9mIGNhbmRpZGF0ZSwg
dGhlbiBkZWNyZWFzZSBwb3MgYnkgMi4KKyAgICAgICAgaWYgKHBvcyA+PSAyICYmIGNhbmRpZGF0
ZS5zdWJzdHJpbmcocG9zLTIsIDEpID09ICItIikKKyAgICAgICAgICAgIHBvcyAtPSAyOworCisg
ICAgICAgIC8vIGQuIExldCBjYW5kaWRhdGUgYmUgdGhlIHN1YnN0cmluZyBvZiBjYW5kaWRhdGUg
ZnJvbSBwb3NpdGlvbiAwLCBpbmNsdXNpdmUsIHRvIHBvc2l0aW9uIHBvcywgZXhjbHVzaXZlLgor
ICAgICAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGUuc3Vic3RyaW5nKDAsIHBvcyk7CisgICAgfQor
CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitKU0FycmF5KiBsb29rdXBTdXBwb3J0ZWRMb2Nh
bGVzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2Nh
bGVzLCBKU0FycmF5KiByZXF1ZXN0ZWRMb2NhbGVzKQoreworICAgIC8vIDkuMi42IExvb2t1cFN1
cHBvcnRlZExvY2FsZXMgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpCisKKyAg
ICAvLyAxLiBMZXQgckxvY2FsZXMgYmUgQ3JlYXRlQXJyYXlGcm9tTGlzdChyZXF1ZXN0ZWRMb2Nh
bGVzKS4KKyAgICAvLyBBbHJlYWR5IGFuIGFycmF5LgorCisgICAgLy8gMi4gTGV0IGxlbiBiZSBU
b0xlbmd0aChHZXQockxvY2FsZXMsICJsZW5ndGgiKSkuCisgICAgdW5zaWduZWQgbGVuID0gcmVx
dWVzdGVkTG9jYWxlcy0+bGVuZ3RoKCk7CisKKyAgICAvLyAzLiBMZXQgc3Vic2V0IGJlIGFuIGVt
cHR5IExpc3QuCisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpOworICAgIEpTQXJy
YXkqIHN1YnNldCA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIGdsb2JhbE9i
amVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5
V2l0aFVuZGVjaWRlZCksIDApOworICAgIGlmICghc3Vic2V0KSB7CisgICAgICAgIHRocm93T3V0
T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgLy8gNC4gTGV0IGsgYmUgMC4KKyAgICAvLyA1LiBSZXBlYXQgd2hpbGUgayA8IGxlbgorICAg
IGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW47ICsraykgeworICAgICAgICAvLyBhLiBMZXQg
UGsgYmUgVG9TdHJpbmcoaykuCisgICAgICAgIC8vIGIuIExldCBsb2NhbGUgYmUgR2V0KHJMb2Nh
bGVzLCBQaykuCisgICAgICAgIEpTVmFsdWUgbG9jYWxlID0gcmVxdWVzdGVkTG9jYWxlcy0+Z2V0
KGV4ZWMsIGspOworCisgICAgICAgIC8vIGMuIFJldHVybklmQWJydXB0KGxvY2FsZSkuCisgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgICAgIC8vIGQuIExldCBub0V4dGVuc2lvbnNMb2NhbGUgYmUgdGhlIFN0cmluZyB2
YWx1ZSB0aGF0IGlzIGxvY2FsZSB3aXRoIGFsbCBVbmljb2RlIGxvY2FsZSBleHRlbnNpb24gc2Vx
dWVuY2VzIHJlbW92ZWQuCisgICAgICAgIEpTU3RyaW5nKiBqc0xvY2FsZSA9IGxvY2FsZS50b1N0
cmluZyhleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgU3RyaW5nIHNMb2NhbGUgPSBqc0xvY2FsZS0+
dmFsdWUoZXhlYyk7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IHBhcnRzOworICAgICAgICBzTG9j
YWxlLnNwbGl0KCItIiwgcGFydHMpOworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Cisg
ICAgICAgIHNpemVfdCBwcCA9IHBhcnRzLnNpemUoKTsKKyAgICAgICAgaWYgKHBwID4gMCkKKyAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHBhcnRzWzBdKTsKKyAgICAgICAgZm9yIChzaXplX3Qg
cCA9IDE7IHAgPCBwcDspIHsKKyAgICAgICAgICAgIGlmIChwYXJ0c1twXSA9PSAidSIpIHsKKyAg
ICAgICAgICAgICAgICAvLyBTa2lwIHRoZSB1LSBhbmQgYW55dGhpbmcgdGhhdCBmb2xsb3dzIHVu
dGlsIGFub3RoZXIgc2luZ2xldG9uLgorICAgICAgICAgICAgICAgIHdoaWxlICgrK3AgPCBwcCAm
JiBwYXJ0c1twXS5sZW5ndGgoKSA+IDEpIHsgfQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIi0iKTsKKyAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKHBhcnRzW3BdKTsKKyAgICAgICAgICAgICsrcDsKKyAgICAgICAg
fQorICAgICAgICBTdHJpbmcgbm9FeHRlbnNpb25zTG9jYWxlID0gYnVpbGRlci50b1N0cmluZygp
OworCisgICAgICAgIC8vIGUuIExldCBhdmFpbGFibGVMb2NhbGUgYmUgQmVzdEF2YWlsYWJsZUxv
Y2FsZShhdmFpbGFibGVMb2NhbGVzLCBub0V4dGVuc2lvbnNMb2NhbGUpLgorICAgICAgICBTdHJp
bmcgYXZhaWxhYmxlTG9jYWxlID0gYmVzdEF2YWlsYWJsZUxvY2FsZShhdmFpbGFibGVMb2NhbGVz
LCBub0V4dGVuc2lvbnNMb2NhbGUpOworCisgICAgICAgIC8vIGYuIElmIGF2YWlsYWJsZUxvY2Fs
ZSBpcyBub3QgdW5kZWZpbmVkLCB0aGVuIGFwcGVuZCBsb2NhbGUgdG8gdGhlIGVuZCBvZiBzdWJz
ZXQuCisgICAgICAgIGlmICghYXZhaWxhYmxlTG9jYWxlLmlzTnVsbCgpKQorICAgICAgICAgICAg
c3Vic2V0LT5wdXNoKGV4ZWMsIGxvY2FsZSk7CisKKyAgICAgICAgLy8gZy4gSW5jcmVtZW50IGsg
YnkgMS4KKyAgICB9CisKKyAgICAvLyA2LiBSZXR1cm4gc3Vic2V0LgorICAgIHJldHVybiBzdWJz
ZXQ7Cit9CisKK0pTQXJyYXkqIGJlc3RGaXRTdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBKU0FycmF5KiByZXF1
ZXN0ZWRMb2NhbGVzKQoreworICAgIC8vIDkuMi43IEJlc3RGaXRTdXBwb3J0ZWRMb2NhbGVzIChh
dmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKQorICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgc29tZXRoaW5nIGJldHRlciB0aGFuIGxvb2t1cC4KKyAgICByZXR1cm4gbG9va3VwU3VwcG9y
dGVkTG9jYWxlcyhleGVjLCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTsKK30K
KworSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSGFzaFNl
dDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBKU0FycmF5KiByZXF1ZXN0ZWRMb2NhbGVzLCBK
U1ZhbHVlIG9wdGlvbnMpCit7CisgICAgLy8gOS4yLjggU3VwcG9ydGVkTG9jYWxlcyAoYXZhaWxh
YmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgb3B0aW9ucykKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIFN0cmluZyBtYXRjaGVyOworCisgICAgLy8gMS4gSWYgb3B0aW9ucyBpcyBu
b3QgdW5kZWZpbmVkLCB0aGVuCisgICAgaWYgKCFvcHRpb25zLmlzVW5kZWZpbmVkKCkpIHsKKyAg
ICAgICAgLy8gYS4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJsb2NhbGVNYXRj
aGVyIiwgInN0cmluZyIsIMKrICJsb29rdXAiLCAiYmVzdCBmaXQiIMK7LCAiYmVzdCBmaXQiKS4K
KyAgICAgICAgY29uc3QgSGFzaFNldDxTdHJpbmc+IG1hdGNoZXJzID0gSGFzaFNldDxTdHJpbmc+
KHsgQVNDSUlMaXRlcmFsKCJsb29rdXAiKSwgQVNDSUlMaXRlcmFsKCJiZXN0IGZpdCIpIH0pOwor
ICAgICAgICBtYXRjaGVyID0gZ2V0SW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5w
cm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCBtYXRjaGVycywgImxvY2FsZU1hdGNoZXIgbXVz
dCBiZSBlaXRoZXIgXCJsb29rdXBcIiBvciBcImJlc3QgZml0XCIiLCBBU0NJSUxpdGVyYWwoImJl
c3QgZml0IikpOworICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdChtYXRjaGVyKS4KKyAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gMi4gRWxzZSwgbGV0IG1hdGNoZXIgYmUg
ImJlc3QgZml0Ii4KKyAgICAgICAgbWF0Y2hlciA9IEFTQ0lJTGl0ZXJhbCgiYmVzdCBmaXQiKTsK
KyAgICB9CisKKyAgICBKU0FycmF5KiBzdXBwb3J0ZWRMb2NhbGVzOworICAgIC8vIDMuIElmIG1h
dGNoZXIgaXMgImJlc3QgZml0IiwKKyAgICBpZiAobWF0Y2hlciA9PSAiYmVzdCBmaXQiKSB7Cisg
ICAgICAgIC8vIGEuIExldCBNYXRjaGVyT3BlcmF0aW9uIGJlIHRoZSBhYnN0cmFjdCBvcGVyYXRp
b24gQmVzdEZpdFN1cHBvcnRlZExvY2FsZXMuCisgICAgICAgIC8vIDUuIExldCBzdXBwb3J0ZWRM
b2NhbGVzIGJlIE1hdGNoZXJPcGVyYXRpb24oYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9j
YWxlcykuCisgICAgICAgIHN1cHBvcnRlZExvY2FsZXMgPSBiZXN0Rml0U3VwcG9ydGVkTG9jYWxl
cyhleGVjLCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyA0LiBFbHNlCisgICAgICAgIC8vIGEuIExldCBNYXRjaGVyT3BlcmF0aW9u
IGJlIHRoZSBhYnN0cmFjdCBvcGVyYXRpb24gTG9va3VwU3VwcG9ydGVkTG9jYWxlcy4KKyAgICAg
ICAgLy8gNS4gTGV0IHN1cHBvcnRlZExvY2FsZXMgYmUgTWF0Y2hlck9wZXJhdGlvbihhdmFpbGFi
bGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKS4KKyAgICAgICAgc3VwcG9ydGVkTG9jYWxlcyA9
IGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoZXhlYywgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVk
TG9jYWxlcyk7CisgICAgfQorCisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIC8vIDYuIExldCBzdWJzZXQgYmUgQ3JlYXRl
QXJyYXlGcm9tTGlzdChzdXBwb3J0ZWRMb2NhbGVzKS4KKyAgICAvLyBBbHJlYWR5IGFuIGFycmF5
LgorCisgICAgLy8gNy4gTGV0IGtleXMgYmUgc3Vic2V0LltbT3duUHJvcGVydHlLZXlzXV0oKS4K
KyAgICBQcm9wZXJ0eU5hbWVBcnJheSBrZXlzID0gUHJvcGVydHlOYW1lQXJyYXkoZXhlYywgUHJv
cGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CisgICAgc3VwcG9ydGVkTG9jYWxlcy0+Z2V0T3duUHJv
cGVydHlOYW1lcyhzdXBwb3J0ZWRMb2NhbGVzLCBleGVjLCBrZXlzLCBFbnVtZXJhdGlvbk1vZGUo
KSk7CisKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzYyA9IFByb3BlcnR5RGVzY3JpcHRvcigp
OworICAgIGRlc2Muc2V0Q29uZmlndXJhYmxlKGZhbHNlKTsKKyAgICBkZXNjLnNldFdyaXRhYmxl
KGZhbHNlKTsKKworICAgIC8vIDguIFJlcGVhdCBmb3IgZWFjaCBlbGVtZW50IFAgb2Yga2V5cyBp
biBMaXN0IG9yZGVyLAorICAgIHNpemVfdCBsZW4gPSBrZXlzLnNpemUoKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgIC8vIGEuIExldCBkZXNjIGJlIFBy
b3BlcnR5RGVzY3JpcHRvciB7IFtbQ29uZmlndXJhYmxlXV06IGZhbHNlLCBbW1dyaXRhYmxlXV06
IGZhbHNlIH0uCisgICAgICAgIC8vIENyZWF0ZWQgYWJvdmUgZm9yIHJldXNlLgorCisgICAgICAg
IC8vIGIuIExldCBzdGF0dXMgYmUgRGVmaW5lUHJvcGVydHlPclRocm93KHN1YnNldCwgUCwgZGVz
YykuCisgICAgICAgIHN1cHBvcnRlZExvY2FsZXMtPmRlZmluZU93blByb3BlcnR5KHN1cHBvcnRl
ZExvY2FsZXMsIGV4ZWMsIGtleXNbaV0sIGRlc2MsIHRydWUpOworCisgICAgICAgIC8vIGMuIEFz
c2VydDogc3RhdHVzIGlzIG5vdCBhYnJ1cHQgY29tcGxldGlvbi4KKyAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
fQorCisgICAgLy8gOS4gUmV0dXJuIHN1YnNldC4KKyAgICByZXR1cm4gc3VwcG9ydGVkTG9jYWxl
czsKK30KKworU3RyaW5nIGdldEludGxTdHJpbmdPcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIG9wdGlvbnMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eSwgY29uc3QgSGFzaFNldDxTdHJpbmc+
JiB2YWx1ZXMsIGNvbnN0IGNoYXIqIG5vdEZvdW5kLCBTdHJpbmcgZmFsbGJhY2spCit7CisgICAg
Ly8gOS4yLjkgR2V0T3B0aW9uIChvcHRpb25zLCBwcm9wZXJ0eSwgdHlwZSwgdmFsdWVzLCBmYWxs
YmFjaykKKyAgICAvLyBGb3IgdHlwZT0ic3RyaW5nIi4KKworICAgIC8vIDEuIExldCBvcHRzIGJl
IFRvT2JqZWN0KG9wdGlvbnMpLgorICAgIEpTT2JqZWN0KiBvcHRzID0gb3B0aW9ucy50b09iamVj
dChleGVjKTsKKworICAgIC8vIDIuIFJldHVybklmQWJydXB0KG9wdHMpLgorICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gMy4g
TGV0IHZhbHVlIGJlIEdldChvcHRzLCBwcm9wZXJ0eSkuCisgICAgSlNWYWx1ZSB2YWx1ZSA9IG9w
dHMtPmdldChleGVjLCBwcm9wZXJ0eSk7CisKKyAgICAvLyA0LiBSZXR1cm5JZkFicnVwdCh2YWx1
ZSkuCisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisKKyAgICAvLyA1LiBJZiB2YWx1ZSBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCisgICAgaWYg
KCF2YWx1ZS5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIC8vIGEuIEFzc2VydDogdHlwZSBpcyAi
Ym9vbGVhbiIgb3IgInN0cmluZyIuCisgICAgICAgIC8vIEZ1bmN0aW9uIGRlZGljYXRlZCB0byAi
c3RyaW5nIi4KKworICAgICAgICAvLyBjLiBJZiB0eXBlIGlzICJzdHJpbmciLCB0aGVuCisgICAg
ICAgIC8vIGkuIExldCB2YWx1ZSBiZSBUb1N0cmluZyh2YWx1ZSkuCisgICAgICAgIEpTU3RyaW5n
KiBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworCisgICAgICAgIC8vIGlpLiBS
ZXR1cm5JZkFicnVwdCh2YWx1ZSkuCisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgICAgICAvLyBkLiBJZiB2YWx1ZXMg
aXMgbm90IHVuZGVmaW5lZCwgdGhlbgorICAgICAgICAvLyBpLiBJZiB2YWx1ZXMgZG9lcyBub3Qg
Y29udGFpbiBhbiBlbGVtZW50IGVxdWFsIHRvIHZhbHVlLCB0aHJvdyBhIFJhbmdlRXJyb3IgZXhj
ZXB0aW9uLgorICAgICAgICBpZiAoIXZhbHVlcy5pc0VtcHR5KCkgJiYgIXZhbHVlcy5jb250YWlu
cyhzdHJpbmdWYWx1ZS0+dmFsdWUoZXhlYykpKSB7CisgICAgICAgICAgICBleGVjLT52bSgpLnRo
cm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgU3RyaW5nKG5vdEZvdW5k
KSkpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gZS4gUmV0dXJuIHZhbHVlLgorICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWUtPnZhbHVlKGV4
ZWMpOworICAgIH0KKworICAgIC8vIDYuIEVsc2UgcmV0dXJuIGZhbGxiYWNrLgorICAgIHJldHVy
biBmYWxsYmFjazsKK30KKworYm9vbCBnZXRJbnRsQm9vbGVhbk9wdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgb3B0aW9ucywgUHJvcGVydHlOYW1lIHByb3BlcnR5LCBib29sIGZhbGxiYWNr
KQoreworICAgIC8vIDkuMi45IEdldE9wdGlvbiAob3B0aW9ucywgcHJvcGVydHksIHR5cGUsIHZh
bHVlcywgZmFsbGJhY2spCisgICAgLy8gRm9yIHR5cGU9ImJvb2xlYW4iLgorCisgICAgLy8gMS4g
TGV0IG9wdHMgYmUgVG9PYmplY3Qob3B0aW9ucykuCisgICAgSlNPYmplY3QqIG9wdHMgPSBvcHRp
b25zLnRvT2JqZWN0KGV4ZWMpOworCisgICAgLy8gMi4gUmV0dXJuSWZBYnJ1cHQob3B0cykuCisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyAzLiBMZXQgdmFsdWUgYmUgR2V0KG9wdHMsIHByb3BlcnR5KS4KKyAgICBKU1ZhbHVlIHZh
bHVlID0gb3B0cy0+Z2V0KGV4ZWMsIHByb3BlcnR5KTsKKworICAgIC8vIDQuIFJldHVybklmQWJy
dXB0KHZhbHVlKS4KKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIDUuIElmIHZhbHVlIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KKyAg
ICBpZiAoIXZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgLy8gYS4gQXNzZXJ0OiB0eXBl
IGlzICJib29sZWFuIiBvciAic3RyaW5nIi4KKyAgICAgICAgLy8gRnVuY3Rpb24gZGVkaWNhdGVk
IHRvICJib29sZWFuIi4KKworICAgICAgICAvLyBiLiBJZiB0eXBlIGlzICJib29sZWFuIiwgdGhl
bgorICAgICAgICAvLyBpLiBMZXQgdmFsdWUgYmUgVG9Cb29sZWFuKHZhbHVlKS4KKyAgICAgICAg
Ym9vbCBib29sZWFuVmFsdWUgPSB2YWx1ZS50b0Jvb2xlYW4oZXhlYyk7CisKKyAgICAgICAgLy8g
ZS4gUmV0dXJuIHZhbHVlLgorICAgICAgICByZXR1cm4gYm9vbGVhblZhbHVlOworICAgIH0KKwor
ICAgIC8vIDYuIEVsc2UgcmV0dXJuIGZhbGxiYWNrLgorICAgIHJldHVybiBmYWxsYmFjazsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5UTCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaAppbmRleCA4MzQyODU0MmIyZDBmYmM3
ZTViMTQ0YTM2YmNiYjg2ZWRmY2JiZTgyLi42M2RiZDFkNzYyZjlkZjQzNTlmYThlNjgzZWMzNzU4
MGU0OTkyMzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
T2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5o
CkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoSU5UTCkKIAorI2luY2x1ZGUgIkpTQ0pT
VmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7
CkBAIC01Niw2ICs1Nyw5IEBAIHByaXZhdGU6CiAgICAgSW50bE9iamVjdChWTSYsIFN0cnVjdHVy
ZSopOwogfTsKIAorSlNBcnJheSogY2Fub25pY2FsaXplTG9jYWxlTGlzdChFeGVjU3RhdGUqLCBK
U1ZhbHVlKTsKK0pTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhFeGVjU3RhdGUqLCBjb25zdCBIYXNo
U2V0PFN0cmluZz4mLCBKU0FycmF5KiwgSlNWYWx1ZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gRU5BQkxFKElOVEwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXggZTBjM2ZhZGZjNGYzYjUyZGQ2YmE3MWI3ODg2
ZDhlYzYwOGQ0NDE3ZS4uN2Q3ZmMyN2NiZjA1MmQ4MzE4YTQ0YjliNTRlZDMyMjUzOGI2MWI1MiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cApAQCAtMTM5LDYgKzEzOSw5IEBACiAKICNpZiBFTkFCTEUoSU5UTCkKICNpbmNsdWRlICJJbnRs
T2JqZWN0LmgiCisjaW5jbHVkZSA8dW5pY29kZS91Y29sLmg+CisjaW5jbHVkZSA8dW5pY29kZS91
ZGF0Lmg+CisjaW5jbHVkZSA8dW5pY29kZS91bnVtLmg+CiAjZW5kaWYgLy8gRU5BQkxFKElOVEwp
CiAKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKQEAgLTk1Niw2ICs5NTksNTAgQEAgdm9p
ZCBKU0dsb2JhbE9iamVjdDo6c2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCiAjZW5kaWYKIH0K
IAorIyBpZiBFTkFCTEUoSU5UTCkKK2NvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgSlNHbG9iYWxPYmpl
Y3Q6OmludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKQoreworICAgIGlmIChtX2ludGxDb2xs
YXRvckF2YWlsYWJsZUxvY2FsZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGludDMyX3QgY291bnQg
PSB1Y29sX2NvdW50QXZhaWxhYmxlKCk7CisgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8
IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZyBzdHIgPSBTdHJpbmcodWNvbF9nZXRB
dmFpbGFibGUoaSkpOworICAgICAgICAgICAgLy8gQ2hhbmdlIGZyb20gSUNVIGZvcm1hdCB0byBC
Q1A0Ny4KKyAgICAgICAgICAgIHN0ci5yZXBsYWNlKCdfJywgJy0nKTsKKyAgICAgICAgICAgIG1f
aW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlcy5hZGQoc3RyKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gbV9pbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzOworfQorCitjb25zdCBI
YXNoU2V0PFN0cmluZz4mIEpTR2xvYmFsT2JqZWN0OjppbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFi
bGVMb2NhbGVzKCkKK3sKKyAgICBpZiAobV9pbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2Nh
bGVzLmlzRW1wdHkoKSkgeworICAgICAgICBpbnQzMl90IGNvdW50ID0gdWRhdF9jb3VudEF2YWls
YWJsZSgpOworICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Cisg
ICAgICAgICAgICBTdHJpbmcgc3RyID0gU3RyaW5nKHVkYXRfZ2V0QXZhaWxhYmxlKGkpKTsKKyAg
ICAgICAgICAgIC8vIENoYW5nZSBmcm9tIElDVSBmb3JtYXQgdG8gQkNQNDcuCisgICAgICAgICAg
ICBzdHIucmVwbGFjZSgnXycsICctJyk7CisgICAgICAgICAgICBtX2ludGxEYXRlVGltZUZvcm1h
dEF2YWlsYWJsZUxvY2FsZXMuYWRkKHN0cik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IG1faW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlczsKK30KKworY29uc3QgSGFzaFNl
dDxTdHJpbmc+JiBKU0dsb2JhbE9iamVjdDo6aW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2Fs
ZXMoKQoreworICAgIGlmIChtX2ludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzLmlzRW1w
dHkoKSkgeworICAgICAgICBpbnQzMl90IGNvdW50ID0gdW51bV9jb3VudEF2YWlsYWJsZSgpOwor
ICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAg
ICBTdHJpbmcgc3RyID0gU3RyaW5nKHVudW1fZ2V0QXZhaWxhYmxlKGkpKTsKKyAgICAgICAgICAg
IC8vIENoYW5nZSBmcm9tIElDVSBmb3JtYXQgdG8gQkNQNDcuCisgICAgICAgICAgICBzdHIucmVw
bGFjZSgnXycsICctJyk7CisgICAgICAgICAgICBtX2ludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVM
b2NhbGVzLmFkZChzdHIpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBtX2ludGxOdW1i
ZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzOworfQorI2VuZGlmIC8vIEVOQUJMRShJTlRMKQorCiB2
b2lkIEpTR2xvYmFsT2JqZWN0OjpxdWV1ZU1pY3JvdGFzayhQYXNzUmVmUHRyPE1pY3JvdGFzaz4g
dGFzaykKIHsKICAgICBpZiAoZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cXVldWVUYXNrVG9F
dmVudExvb3ApIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oCmluZGV4IGE2Y2RjMzIyZDFjYzkwMjBmOTE2OGM3ZGU2ODVlZDFmNTZlMTQ2MzUuLmJi
ZjA4MjI3YmNhYzgwMGMwYzVlYjk3NTI0NjdlODVmMTA4YjM2ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAtMjc5LDYgKzI3OSwxMiBA
QCBwcm90ZWN0ZWQ6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpTR2xvYmFsT2JqZWN0RGVidWdnYWJs
ZT4gbV9pbnNwZWN0b3JEZWJ1Z2dhYmxlOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoSU5UTCkKKyAg
ICBIYXNoU2V0PFN0cmluZz4gbV9pbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzOworICAgIEhh
c2hTZXQ8U3RyaW5nPiBtX2ludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXM7CisgICAg
SGFzaFNldDxTdHJpbmc+IG1faW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXM7CisjZW5k
aWYgLy8gRU5BQkxFKElOVEwpCisKICAgICBSZWZQdHI8V2F0Y2hwb2ludFNldD4gbV9tYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludDsKICAgICBSZWZQdHI8V2F0Y2hwb2ludFNldD4gbV9o
YXZpbmdBQmFkVGltZVdhdGNocG9pbnQ7CiAgICAgUmVmUHRyPFdhdGNocG9pbnRTZXQ+IG1fdmFy
SW5qZWN0aW9uV2F0Y2hwb2ludDsKQEAgLTQ5MCw2ICs0OTYsMTIgQEAgcHVibGljOgogICAgIEpT
R2xvYmFsT2JqZWN0RGVidWdnYWJsZSYgaW5zcGVjdG9yRGVidWdnYWJsZSgpIHsgcmV0dXJuICpt
X2luc3BlY3RvckRlYnVnZ2FibGUuZ2V0KCk7IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKElOVEwp
CisgICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVz
KCk7CisgICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFi
bGVMb2NhbGVzKCk7CisgICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsTnVtYmVyRm9ybWF0
QXZhaWxhYmxlTG9jYWxlcygpOworI2VuZGlmIC8vIEVOQUJMRShJTlRMKQorCiAgICAgdm9pZCBz
ZXRDb25zb2xlQ2xpZW50KENvbnNvbGVDbGllbnQqIGNvbnNvbGVDbGllbnQpIHsgbV9jb25zb2xl
Q2xpZW50ID0gY29uc29sZUNsaWVudDsgfQogICAgIENvbnNvbGVDbGllbnQqIGNvbnNvbGVDbGll
bnQoKSBjb25zdCB7IHJldHVybiBtX2NvbnNvbGVDbGllbnQ7IH0KIApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDdkYWZkMTE1
NDRkYzQwMDUzNTc5N2RjMGFjYWJkYzZkMjJjOThmM2EuLmIyMjcxOWNjM2ZhZjdhOGM3ZjI5MGFj
YjY3OTY2YWRhY2U3MGQ5OTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNS0wOC0xOSAgQW5k
eSBWYW5XYWdvbmVyICA8dGhldGFsZWNyYWZ0ZXJAZ21haWwuY29tPgorCisgICAgICAgIFtJTlRM
XSBJbXBsZW1lbnQgc3VwcG9ydGVkTG9jYWxlc09mIG9uIEludGwgQ29uc3RydWN0b3JzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1OTkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGpzL2ludGwtY29s
bGF0b3ItZXhwZWN0ZWQudHh0OiBBZGRlZCB0ZXN0cyBmb3Igc3VwcG9ydGVkTG9jYWxlc09mCisg
ICAgICAgICoganMvaW50bC1kYXRldGltZWZvcm1hdC1leHBlY3RlZC50eHQ6IEFkZGVkIHRlc3Rz
IGZvciBzdXBwb3J0ZWRMb2NhbGVzT2YKKyAgICAgICAgKiBqcy9pbnRsLW51bWJlcmZvcm1hdC1l
eHBlY3RlZC50eHQ6IEFkZGVkIHRlc3RzIGZvciBzdXBwb3J0ZWRMb2NhbGVzT2YKKyAgICAgICAg
KiBqcy9zY3JpcHQtdGVzdHMvaW50bC1jb2xsYXRvci5qczogQWRkZWQgdGVzdHMgZm9yIHN1cHBv
cnRlZExvY2FsZXNPZgorICAgICAgICAqIGpzL3NjcmlwdC10ZXN0cy9pbnRsLWRhdGV0aW1lZm9y
bWF0LmpzOiBBZGRlZCB0ZXN0cyBmb3Igc3VwcG9ydGVkTG9jYWxlc09mCisgICAgICAgICoganMv
c2NyaXB0LXRlc3RzL2ludGwtbnVtYmVyZm9ybWF0LmpzOiBBZGRlZCB0ZXN0cyBmb3Igc3VwcG9y
dGVkTG9jYWxlc09mCisKIDIwMTUtMDgtMTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KIAogICAgICAgICBXZWJLaXQgbWF5IGtlZXAgb3V0ZGF0ZWQgZW50cnkgaW4gdGhlIGRpc2sg
Y2FjaGUgYWZ0ZXIgYSByZWxvYWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL2ludGwtY29s
bGF0b3ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvaW50bC1jb2xsYXRvci1leHBlY3Rl
ZC50eHQKaW5kZXggNGQ1ZmRkZjc1NmZjOGZmMDAwZmVlMzBhNTdkZmFhMDYyNmU0MzU5OC4uNTky
NDY1NDkzMzE5YTA4MDY4OTcyMDE2NmQyMTMxZWIxZDRkMTVlNiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvanMvaW50bC1jb2xsYXRvci1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvanMv
aW50bC1jb2xsYXRvci1leHBlY3RlZC50eHQKQEAgLTE4LDYgKzE4LDI5IEBAIFBBU1MgT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJbnRsLkNvbGxhdG9yLCAncHJvdG90eXBlJykuZW51
bWVyYWJsZSBpcyBmCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSW50bC5D
b2xsYXRvciwgJ3Byb3RvdHlwZScpLmNvbmZpZ3VyYWJsZSBpcyBmYWxzZQogUEFTUyBJbnRsLkNv
bGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZi5sZW5ndGggaXMgMQogUEFTUyBJbnRsLkNvbGxhdG9y
LnN1cHBvcnRlZExvY2FsZXNPZigpIGlzIGFuIGluc3RhbmNlIG9mIEFycmF5CitQQVNTIEludGwu
Q29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwobnVsbCwgJ2VuJykgaXMgWyAnZW4nIF0K
K1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbCh7fSwgJ2VuJykgaXMg
WyAnZW4nIF0KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbCgxLCAn
ZW4nKSBpcyBbICdlbicgXQorUEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZig5
KSBpcyBbXQorUEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignZW4nKSBpcyBb
ICdlbicgXQorUEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZih7IGxlbmd0aDog
MiwgMTogJ2VuJywgMDogJ2VzJyB9KSBpcyBbICdlcycsICdlbicgXQorUEFTUyBJbnRsLkNvbGxh
dG9yLnN1cHBvcnRlZExvY2FsZXNPZihbICdlbicsICdwdCcsICdlbicsICdlcycgXSkgaXMgWyAn
ZW4nLCAncHQnLCAnZXMnIF0KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2Yo
J0VuLWxhVG4tdXMtdmFyaWFudDItdmFyaWFudDEtMWFiYy1VLWtvLXRSdWUtQS1hYS1hYWEteC1S
RVNFUlZFRCcpIGlzIFsgJ2VuLUxhdG4tVVMtdmFyaWFudDItdmFyaWFudDEtMWFiYy1hLWFhLWFh
YS11LWtvLXRydWUteC1SRVNFUlZFRCcgXQorUEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExv
Y2FsZXNPZignbm8tYm9rJykgaXMgWyAnbmInIF0KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0
ZWRMb2NhbGVzT2YoJ3gtc29tZS10aGluZycpIGlzIFtdCitQQVNTIEludGwuQ29sbGF0b3Iuc3Vw
cG9ydGVkTG9jYWxlc09mKE9iamVjdC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgZ2V0KCkgeyB0
aHJvdyBFcnJvcignYScpIH0gfSB9KSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBhLgorUEFTUyBJ
bnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVu
Z3RoOiB7IHZhbHVlOiAxIH0sIDA6IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcignYicpIH0gfSB9KSkg
dGhyZXcgZXhjZXB0aW9uIEVycm9yOiBiLgorUEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExv
Y2FsZXNPZihbIHsgdG9TdHJpbmcoKSB7IHRocm93IEVycm9yKCdjJykgfSB9IF0pIHRocmV3IGV4
Y2VwdGlvbiBFcnJvcjogYy4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2Yo
WyA1IF0pIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IGxvY2FsZSB2YWx1ZSBtdXN0IGJlIGEg
c3RyaW5nIG9yIG9iamVjdC4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2Yo
JycpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogLgor
UEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignYScpIHRocmV3IGV4Y2VwdGlv
biBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogYS4KK1BBU1MgSW50bC5Db2xsYXRv
ci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2FiY2RlZmdoaWonKSB0aHJldyBleGNlcHRpb24gUmFuZ2VF
cnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGFiY2RlZmdoaWouCitQQVNTIEludGwuQ29sbGF0
b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCcjJCcpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBp
bnZhbGlkIGxhbmd1YWdlIHRhZzogIyQuCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9j
YWxlc09mKCdlbi1ALWFiYycpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxh
bmd1YWdlIHRhZzogZW4tQC1hYmMuCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxl
c09mKCdlbi11JykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2Ug
dGFnOiBlbi11LgorUEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignZW4tdS1r
bi10cnVlLXUta28tdHJ1ZScpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxh
bmd1YWdlIHRhZzogZW4tdS1rbi10cnVlLXUta28tdHJ1ZS4KK1BBU1MgSW50bC5Db2xsYXRvci5z
dXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXgnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52
YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXguCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9j
YWxlc09mKCdlbi0qJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3Vh
Z2UgdGFnOiBlbi0qLgogUEFTUyBJbnRsLkNvbGxhdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciBp
cyBJbnRsLkNvbGxhdG9yCiBQQVNTIEludGwuQ29sbGF0b3IucHJvdG90eXBlLmNvbXBhcmUgaXMg
YW4gaW5zdGFuY2Ugb2YgRnVuY3Rpb24KIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihJbnRsLkNvbGxhdG9yLnByb3RvdHlwZSwgJ2NvbXBhcmUnKS5nZXQgaXMgYW4gaW5zdGFu
Y2Ugb2YgRnVuY3Rpb24KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL2ludGwtZGF0ZXRpbWVm
b3JtYXQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvaW50bC1kYXRldGltZWZvcm1hdC1l
eHBlY3RlZC50eHQKaW5kZXggNjAxNzNmZTI3MjJlZjY1YjIyMGRkOWJlNDdhZjE0MmJmYmYzODQz
NS4uYjIwOTA2YTBjMDI3NzgzODlmZDU4YTY1MmNjNDUwMTQ3ZDljNWFiNCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvanMvaW50bC1kYXRldGltZWZvcm1hdC1leHBlY3RlZC50eHQKKysrIGIvTGF5
b3V0VGVzdHMvanMvaW50bC1kYXRldGltZWZvcm1hdC1leHBlY3RlZC50eHQKQEAgLTE4LDYgKzE4
LDI5IEBAIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJbnRsLkRhdGVUaW1l
Rm9ybWF0LCAncHJvdG90eXBlJykuZW51bWVyYWJsCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoSW50bC5EYXRlVGltZUZvcm1hdCwgJ3Byb3RvdHlwZScpLmNvbmZpZ3VyYWJs
ZSBpcyBmYWxzZQogUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5s
ZW5ndGggaXMgMQogUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZigp
IGlzIGFuIGluc3RhbmNlIG9mIEFycmF5CitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9y
dGVkTG9jYWxlc09mLmNhbGwobnVsbCwgJ2VuJykgaXMgWyAnZW4nIF0KK1BBU1MgSW50bC5EYXRl
VGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbCh7fSwgJ2VuJykgaXMgWyAnZW4nIF0K
K1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbCgxLCAnZW4n
KSBpcyBbICdlbicgXQorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNP
Zig5KSBpcyBbXQorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZign
ZW4nKSBpcyBbICdlbicgXQorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2Fs
ZXNPZih7IGxlbmd0aDogMiwgMTogJ2VuJywgMDogJ2VzJyB9KSBpcyBbICdlcycsICdlbicgXQor
UEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihbICdlbicsICdwdCcs
ICdlbicsICdlcycgXSkgaXMgWyAnZW4nLCAncHQnLCAnZXMnIF0KK1BBU1MgSW50bC5EYXRlVGlt
ZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ0VuLWxhVG4tdXMtdmFyaWFudDItdmFyaWFudDEt
MWFiYy1VLWtvLXRSdWUtQS1hYS1hYWEteC1SRVNFUlZFRCcpIGlzIFsgJ2VuLUxhdG4tVVMtdmFy
aWFudDItdmFyaWFudDEtMWFiYy1hLWFhLWFhYS11LWtvLXRydWUteC1SRVNFUlZFRCcgXQorUEFT
UyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignbm8tYm9rJykgaXMgWyAn
bmInIF0KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ3gtc29t
ZS10aGluZycpIGlzIFtdCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mKE9iamVjdC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcign
YScpIH0gfSB9KSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBhLgorUEFTUyBJbnRsLkRhdGVUaW1l
Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVuZ3RoOiB7
IHZhbHVlOiAxIH0sIDA6IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcignYicpIH0gfSB9KSkgdGhyZXcg
ZXhjZXB0aW9uIEVycm9yOiBiLgorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExv
Y2FsZXNPZihbIHsgdG9TdHJpbmcoKSB7IHRocm93IEVycm9yKCdjJykgfSB9IF0pIHRocmV3IGV4
Y2VwdGlvbiBFcnJvcjogYy4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2Nh
bGVzT2YoWyA1IF0pIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IGxvY2FsZSB2YWx1ZSBtdXN0
IGJlIGEgc3RyaW5nIG9yIG9iamVjdC4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0
ZWRMb2NhbGVzT2YoJycpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1
YWdlIHRhZzogLgorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZign
YScpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogYS4K
K1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2FiY2RlZmdoaWon
KSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGFiY2Rl
ZmdoaWouCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCcjJCcp
IHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogIyQuCitQ
QVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi1ALWFiYycpIHRo
cmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tQC1hYmMu
CitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi11JykgdGhy
ZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi11LgorUEFT
UyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tdS1rbi10cnVlLXUt
a28tdHJ1ZScpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRh
ZzogZW4tdS1rbi10cnVlLXUta28tdHJ1ZS4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBw
b3J0ZWRMb2NhbGVzT2YoJ2VuLXgnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxp
ZCBsYW5ndWFnZSB0YWc6IGVuLXguCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVk
TG9jYWxlc09mKCdlbi0qJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFu
Z3VhZ2UgdGFnOiBlbi0qLgogUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZS5jb25z
dHJ1Y3RvciBpcyBJbnRsLkRhdGVUaW1lRm9ybWF0CiBQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQu
cHJvdG90eXBlLmZvcm1hdCBpcyBhbiBpbnN0YW5jZSBvZiBGdW5jdGlvbgogUEFTUyBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90eXBlLCAn
Zm9ybWF0JykuZ2V0IGlzIGFuIGluc3RhbmNlIG9mIEZ1bmN0aW9uCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9qcy9pbnRsLW51bWJlcmZvcm1hdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9q
cy9pbnRsLW51bWJlcmZvcm1hdC1leHBlY3RlZC50eHQKaW5kZXggNTIxODUxZWQ2NjVkOGU3NDhk
MWI2OTI0NjUzNDZiMWY3YmVjZjRkMC4uYmYxZWI4YjQwN2ZmZDY0YjhlMmZmODFiYzM5NWU0NjA2
MjBkZTZhZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvanMvaW50bC1udW1iZXJmb3JtYXQtZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2pzL2ludGwtbnVtYmVyZm9ybWF0LWV4cGVjdGVk
LnR4dApAQCAtMTgsNiArMTgsMjkgQEAgUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEludGwuTnVtYmVyRm9ybWF0LCAncHJvdG90eXBlJykuZW51bWVyYWJsZQogUEFTUyBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuTnVtYmVyRm9ybWF0LCAncHJvdG90eXBl
JykuY29uZmlndXJhYmxlIGlzIGZhbHNlCiBQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRl
ZExvY2FsZXNPZi5sZW5ndGggaXMgMQogUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRM
b2NhbGVzT2YoKSBpcyBhbiBpbnN0YW5jZSBvZiBBcnJheQorUEFTUyBJbnRsLk51bWJlckZvcm1h
dC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbChudWxsLCAnZW4nKSBpcyBbICdlbicgXQorUEFTUyBJ
bnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbCh7fSwgJ2VuJykgaXMgWyAn
ZW4nIF0KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoMSwg
J2VuJykgaXMgWyAnZW4nIF0KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mKDkpIGlzIFtdCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZign
ZW4nKSBpcyBbICdlbicgXQorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YoeyBsZW5ndGg6IDIsIDE6ICdlbicsIDA6ICdlcycgfSkgaXMgWyAnZXMnLCAnZW4nIF0KK1BB
U1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsgJ2VuJywgJ3B0JywgJ2Vu
JywgJ2VzJyBdKSBpcyBbICdlbicsICdwdCcsICdlcycgXQorUEFTUyBJbnRsLk51bWJlckZvcm1h
dC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ0VuLWxhVG4tdXMtdmFyaWFudDItdmFyaWFudDEtMWFiYy1V
LWtvLXRSdWUtQS1hYS1hYWEteC1SRVNFUlZFRCcpIGlzIFsgJ2VuLUxhdG4tVVMtdmFyaWFudDIt
dmFyaWFudDEtMWFiYy1hLWFhLWFhYS11LWtvLXRydWUteC1SRVNFUlZFRCcgXQorUEFTUyBJbnRs
Lk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ25vLWJvaycpIGlzIFsgJ25iJyBdCitQ
QVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZigneC1zb21lLXRoaW5nJykg
aXMgW10KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKE9iamVjdC5j
cmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcignYScpIH0gfSB9KSkg
dGhyZXcgZXhjZXB0aW9uIEVycm9yOiBhLgorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0
ZWRMb2NhbGVzT2YoT2JqZWN0LmNyZWF0ZShudWxsLCB7IGxlbmd0aDogeyB2YWx1ZTogMSB9LCAw
OiB7IGdldCgpIHsgdGhyb3cgRXJyb3IoJ2InKSB9IH0gfSkpIHRocmV3IGV4Y2VwdGlvbiBFcnJv
cjogYi4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsgeyB0b1N0
cmluZygpIHsgdGhyb3cgRXJyb3IoJ2MnKSB9IH0gXSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBj
LgorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoWyA1IF0pIHRocmV3
IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IGxvY2FsZSB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG9i
amVjdC4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCcnKSB0aHJl
dyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IC4KK1BBU1MgSW50
bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdhJykgdGhyZXcgZXhjZXB0aW9uIFJh
bmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBhLgorUEFTUyBJbnRsLk51bWJlckZvcm1h
dC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2FiY2RlZmdoaWonKSB0aHJldyBleGNlcHRpb24gUmFuZ2VF
cnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGFiY2RlZmdoaWouCitQQVNTIEludGwuTnVtYmVy
Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignIyQnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJv
cjogaW52YWxpZCBsYW5ndWFnZSB0YWc6ICMkLgorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBw
b3J0ZWRMb2NhbGVzT2YoJ2VuLUAtYWJjJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGlu
dmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi1ALWFiYy4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3Vw
cG9ydGVkTG9jYWxlc09mKCdlbi11JykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFs
aWQgbGFuZ3VhZ2UgdGFnOiBlbi11LgorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRM
b2NhbGVzT2YoJ2VuLXUta24tdHJ1ZS11LWtvLXRydWUnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VF
cnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXUta24tdHJ1ZS11LWtvLXRydWUuCitQQVNT
IEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4teCcpIHRocmV3IGV4Y2Vw
dGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4teC4KK1BBU1MgSW50bC5O
dW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi0qJykgdGhyZXcgZXhjZXB0aW9uIFJh
bmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi0qLgogUEFTUyBJbnRsLk51bWJlckZv
cm1hdC5wcm90b3R5cGUuY29uc3RydWN0b3IgaXMgSW50bC5OdW1iZXJGb3JtYXQKIFBBU1MgSW50
bC5OdW1iZXJGb3JtYXQucHJvdG90eXBlLmZvcm1hdCBpcyBhbiBpbnN0YW5jZSBvZiBGdW5jdGlv
bgogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuTnVtYmVyRm9ybWF0
LnByb3RvdHlwZSwgJ2Zvcm1hdCcpLmdldCBpcyBhbiBpbnN0YW5jZSBvZiBGdW5jdGlvbgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2ludGwtY29sbGF0b3IuanMgYi9M
YXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1jb2xsYXRvci5qcwppbmRleCA1ZGUxOTBl
YzMzMGM5OGRiMTYyZTJlYjYzNGIxZjNhNjVkYjg5NTA4Li4zNDIyZTk2MGRiOGI0OTZhMTBhMzFm
YmY5ZjY3YWJkNmRkMTNhYTBlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVz
dHMvaW50bC1jb2xsYXRvci5qcworKysgYi9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50
bC1jb2xsYXRvci5qcwpAQCAtMzUsOCArMzUsNDEgQEAgc2hvdWxkQmVGYWxzZSgiT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihJbnRsLkNvbGxhdG9yLCAncHJvdG90eXBlJykuY29uZmkK
IC8vIFRoZSB2YWx1ZSBvZiB0aGUgbGVuZ3RoIHByb3BlcnR5IG9mIHRoZSBzdXBwb3J0ZWRMb2Nh
bGVzT2YgbWV0aG9kIGlzIDEuCiBzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2Nh
bGVzT2YubGVuZ3RoIiwgIjEiKTsKIAotLy8gUmV0dXJucyBTdXBwb3J0ZWRMb2NhbGVzCisvLyBS
ZXR1cm5zIFN1cHBvcnRlZExvY2FsZXMuCiBzaG91bGRCZVR5cGUoIkludGwuQ29sbGF0b3Iuc3Vw
cG9ydGVkTG9jYWxlc09mKCkiLCAiQXJyYXkiKTsKKy8vIERvZXNuJ3QgY2FyZSBhYm91dCBgdGhp
c2AuCitzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbChudWxs
LCAnZW4nKSIsICJbICdlbicgXSIpOworc2hvdWxkQmUoIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVk
TG9jYWxlc09mLmNhbGwoe30sICdlbicpIiwgIlsgJ2VuJyBdIik7CitzaG91bGRCZSgiSW50bC5D
b2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbCgxLCAnZW4nKSIsICJbICdlbicgXSIpOwor
Ly8gSWdub3JlcyBub24tb2JqZWN0LCBub24tc3RyaW5nIGxpc3QuCitzaG91bGRCZSgiSW50bC5D
b2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoOSkiLCAiW10iKTsKKy8vIE1ha2VzIGFuIGFycmF5
IG9mIHRhZ3MuCitzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2Vu
JykiLCAiWyAnZW4nIF0iKTsKKy8vIEhhbmRsZXMgYXJyYXktbGlrZSBvYmplY3RzLgorc2hvdWxk
QmUoIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKHsgbGVuZ3RoOiAyLCAxOiAnZW4n
LCAwOiAnZXMnIH0pIiwgIlsgJ2VzJywgJ2VuJyBdIik7CisvLyBEZWR1cGxpY2F0ZXMgdGFncy4K
K3Nob3VsZEJlKCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZihbICdlbicsICdwdCcs
ICdlbicsICdlcycgXSkiLCAiWyAnZW4nLCAncHQnLCAnZXMnIF0iKTsKKy8vIENhbm9uaWNhbGl6
ZXMgdGFncy4KK3Nob3VsZEJlKCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignRW4t
bGFUbi11cy12YXJpYW50Mi12YXJpYW50MS0xYWJjLVUta28tdFJ1ZS1BLWFhLWFhYS14LVJFU0VS
VkVEJykiLCAiWyAnZW4tTGF0bi1VUy12YXJpYW50Mi12YXJpYW50MS0xYWJjLWEtYWEtYWFhLXUt
a28tdHJ1ZS14LVJFU0VSVkVEJyBdIik7CisvLyBSZXBsYWNlcyBvdXRkYXRlZCB0YWdzLgorc2hv
dWxkQmUoIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCduby1ib2snKSIsICJbICdu
YicgXSIpOworLy8gRG9lc24ndCB0aHJvdywgYnV0IGlnbm9yZXMgcHJpdmF0ZSB0YWdzLgorc2hv
dWxkQmUoIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCd4LXNvbWUtdGhpbmcnKSIs
ICJbXSIpOworLy8gVGhyb3dzIG9uIHByb2JsZW1zIHdpdGggbGVuZ3RoLCBnZXQsIG9yIHRvU3Ry
aW5nLgorc2hvdWxkVGhyb3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKE9iamVj
dC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcignYScpIH0gfSB9
KSkiLCAiJ0Vycm9yOiBhJyIpOworc2hvdWxkVGhyb3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVk
TG9jYWxlc09mKE9iamVjdC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgdmFsdWU6IDEgfSwgMDog
eyBnZXQoKSB7IHRocm93IEVycm9yKCdiJykgfSB9IH0pKSIsICInRXJyb3I6IGInIik7CitzaG91
bGRUaHJvdygiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoWyB7IHRvU3RyaW5nKCkg
eyB0aHJvdyBFcnJvcignYycpIH0gfSBdKSIsICInRXJyb3I6IGMnIik7CisvLyBUaHJvd3Mgb24g
YmFkIHRhZ3MuCitzaG91bGRUaHJvdygiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2Yo
WyA1IF0pIiwgIidUeXBlRXJyb3I6IGxvY2FsZSB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG9i
amVjdCciKTsKK3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZign
JykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiAnIik7CitzaG91bGRUaHJv
dygiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2EnKSIsICInUmFuZ2VFcnJvcjog
aW52YWxpZCBsYW5ndWFnZSB0YWc6IGEnIik7CitzaG91bGRUaHJvdygiSW50bC5Db2xsYXRvci5z
dXBwb3J0ZWRMb2NhbGVzT2YoJ2FiY2RlZmdoaWonKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBs
YW5ndWFnZSB0YWc6IGFiY2RlZmdoaWonIik7CitzaG91bGRUaHJvdygiSW50bC5Db2xsYXRvci5z
dXBwb3J0ZWRMb2NhbGVzT2YoJyMkJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2Ug
dGFnOiAjJCciKTsKK3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNP
ZignZW4tQC1hYmMnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLUAt
YWJjJyIpOworc2hvdWxkVGhyb3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdl
bi11JykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi11JyIpOworc2hv
dWxkVGhyb3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi11LWtuLXRydWUt
dS1rby10cnVlJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi11LWtu
LXRydWUtdS1rby10cnVlJyIpOworc2hvdWxkVGhyb3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVk
TG9jYWxlc09mKCdlbi14JykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBl
bi14JyIpOworc2hvdWxkVGhyb3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdl
bi0qJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi0qJyIpOwogCiAv
LyAxMC4zIFByb3BlcnRpZXMgb2YgdGhlIEludGwuQ29sbGF0b3IgUHJvdG90eXBlIE9iamVjdAog
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1kYXRldGltZWZv
cm1hdC5qcyBiL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9pbnRsLWRhdGV0aW1lZm9ybWF0
LmpzCmluZGV4IGJjN2M5YTc3Y2UyMTE2MmRkMmI4MzdmNTVmZTRmMTcyM2NmNzg0ZjguLjQ4YmZk
OGNhZDMxZjQ3OGNhODE5ZjNlMzE5ZDYzZWVjN2M4MzFmNjAgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2pzL3NjcmlwdC10ZXN0cy9pbnRsLWRhdGV0aW1lZm9ybWF0LmpzCisrKyBiL0xheW91dFRl
c3RzL2pzL3NjcmlwdC10ZXN0cy9pbnRsLWRhdGV0aW1lZm9ybWF0LmpzCkBAIC0zNyw2ICszNywz
OSBAQCBzaG91bGRCZSgiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YubGVu
Z3RoIiwgIjEiKTsKIAogLy8gUmV0dXJucyBTdXBwb3J0ZWRMb2NhbGVzCiBzaG91bGRCZVR5cGUo
IkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCkiLCAiQXJyYXkiKTsKKy8v
IERvZXNuJ3QgY2FyZSBhYm91dCBgdGhpc2AuCitzaG91bGRCZSgiSW50bC5EYXRlVGltZUZvcm1h
dC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbChudWxsLCAnZW4nKSIsICJbICdlbicgXSIpOworc2hv
dWxkQmUoIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoe30sICdl
bicpIiwgIlsgJ2VuJyBdIik7CitzaG91bGRCZSgiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0
ZWRMb2NhbGVzT2YuY2FsbCgxLCAnZW4nKSIsICJbICdlbicgXSIpOworLy8gSWdub3JlcyBub24t
b2JqZWN0LCBub24tc3RyaW5nIGxpc3QuCitzaG91bGRCZSgiSW50bC5EYXRlVGltZUZvcm1hdC5z
dXBwb3J0ZWRMb2NhbGVzT2YoOSkiLCAiW10iKTsKKy8vIE1ha2VzIGFuIGFycmF5IG9mIHRhZ3Mu
CitzaG91bGRCZSgiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuJyki
LCAiWyAnZW4nIF0iKTsKKy8vIEhhbmRsZXMgYXJyYXktbGlrZSBvYmplY3RzLgorc2hvdWxkQmUo
IkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKHsgbGVuZ3RoOiAyLCAxOiAn
ZW4nLCAwOiAnZXMnIH0pIiwgIlsgJ2VzJywgJ2VuJyBdIik7CisvLyBEZWR1cGxpY2F0ZXMgdGFn
cy4KK3Nob3VsZEJlKCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihbICdl
bicsICdwdCcsICdlbicsICdlcycgXSkiLCAiWyAnZW4nLCAncHQnLCAnZXMnIF0iKTsKKy8vIENh
bm9uaWNhbGl6ZXMgdGFncy4KK3Nob3VsZEJlKCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRl
ZExvY2FsZXNPZignRW4tbGFUbi11cy12YXJpYW50Mi12YXJpYW50MS0xYWJjLVUta28tdFJ1ZS1B
LWFhLWFhYS14LVJFU0VSVkVEJykiLCAiWyAnZW4tTGF0bi1VUy12YXJpYW50Mi12YXJpYW50MS0x
YWJjLWEtYWEtYWFhLXUta28tdHJ1ZS14LVJFU0VSVkVEJyBdIik7CisvLyBSZXBsYWNlcyBvdXRk
YXRlZCB0YWdzLgorc2hvdWxkQmUoIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mKCduby1ib2snKSIsICJbICduYicgXSIpOworLy8gRG9lc24ndCB0aHJvdywgYnV0IGlnbm9y
ZXMgcHJpdmF0ZSB0YWdzLgorc2hvdWxkQmUoIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVk
TG9jYWxlc09mKCd4LXNvbWUtdGhpbmcnKSIsICJbXSIpOworLy8gVGhyb3dzIG9uIHByb2JsZW1z
IHdpdGggbGVuZ3RoLCBnZXQsIG9yIHRvU3RyaW5nLgorc2hvdWxkVGhyb3coIkludGwuRGF0ZVRp
bWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKE9iamVjdC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6
IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcignYScpIH0gfSB9KSkiLCAiJ0Vycm9yOiBhJyIpOworc2hv
dWxkVGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKE9iamVjdC5j
cmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgdmFsdWU6IDEgfSwgMDogeyBnZXQoKSB7IHRocm93IEVy
cm9yKCdiJykgfSB9IH0pKSIsICInRXJyb3I6IGInIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRl
VGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoWyB7IHRvU3RyaW5nKCkgeyB0aHJvdyBFcnJv
cignYycpIH0gfSBdKSIsICInRXJyb3I6IGMnIik7CisvLyBUaHJvd3Mgb24gYmFkIHRhZ3MuCitz
aG91bGRUaHJvdygiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoWyA1IF0p
IiwgIidUeXBlRXJyb3I6IGxvY2FsZSB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG9iamVjdCci
KTsKK3Nob3VsZFRocm93KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZign
JykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiAnIik7CitzaG91bGRUaHJv
dygiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2EnKSIsICInUmFuZ2VF
cnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGEnIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRl
VGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2FiY2RlZmdoaWonKSIsICInUmFuZ2VFcnJv
cjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGFiY2RlZmdoaWonIik7CitzaG91bGRUaHJvdygiSW50
bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJyMkJykiLCAiJ1JhbmdlRXJyb3I6
IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiAjJCciKTsKK3Nob3VsZFRocm93KCJJbnRsLkRhdGVUaW1l
Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tQC1hYmMnKSIsICInUmFuZ2VFcnJvcjogaW52
YWxpZCBsYW5ndWFnZSB0YWc6IGVuLUAtYWJjJyIpOworc2hvdWxkVGhyb3coIkludGwuRGF0ZVRp
bWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi11JykiLCAiJ1JhbmdlRXJyb3I6IGludmFs
aWQgbGFuZ3VhZ2UgdGFnOiBlbi11JyIpOworc2hvdWxkVGhyb3coIkludGwuRGF0ZVRpbWVGb3Jt
YXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi11LWtuLXRydWUtdS1rby10cnVlJykiLCAiJ1Jhbmdl
RXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi11LWtuLXRydWUtdS1rby10cnVlJyIpOwor
c2hvdWxkVGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi14
JykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi14JyIpOworc2hvdWxk
VGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi0qJykiLCAi
J1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi0qJyIpOwogCiAvLyAxMi4zIFBy
b3BlcnRpZXMgb2YgdGhlIEludGwuRGF0ZVRpbWVGb3JtYXQgUHJvdG90eXBlIE9iamVjdAogCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1udW1iZXJmb3JtYXQu
anMgYi9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1udW1iZXJmb3JtYXQuanMKaW5k
ZXggMDY1ZDkyMTU2NTQzNDJkYTdlNGYyMzNlNjNjZDU3YWRmZTU5ZDRlYi4uN2EyY2Y4MDAzMmRj
MDAyNTg4NzgwNjQxMjU0Mjk1MWVjNTY5YWNmNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvanMv
c2NyaXB0LXRlc3RzL2ludGwtbnVtYmVyZm9ybWF0LmpzCisrKyBiL0xheW91dFRlc3RzL2pzL3Nj
cmlwdC10ZXN0cy9pbnRsLW51bWJlcmZvcm1hdC5qcwpAQCAtMzcsNiArMzcsMzkgQEAgc2hvdWxk
QmUoIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5sZW5ndGgiLCAiMSIpOwog
CiAvLyBSZXR1cm5zIFN1cHBvcnRlZExvY2FsZXMKIHNob3VsZEJlVHlwZSgiSW50bC5OdW1iZXJG
b3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCkiLCAiQXJyYXkiKTsKKy8vIERvZXNuJ3QgY2FyZSBh
Ym91dCBgdGhpc2AuCitzaG91bGRCZSgiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mLmNhbGwobnVsbCwgJ2VuJykiLCAiWyAnZW4nIF0iKTsKK3Nob3VsZEJlKCJJbnRsLk51bWJl
ckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbCh7fSwgJ2VuJykiLCAiWyAnZW4nIF0iKTsK
K3Nob3VsZEJlKCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbCgxLCAn
ZW4nKSIsICJbICdlbicgXSIpOworLy8gSWdub3JlcyBub24tb2JqZWN0LCBub24tc3RyaW5nIGxp
c3QuCitzaG91bGRCZSgiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKDkpIiwg
IltdIik7CisvLyBNYWtlcyBhbiBhcnJheSBvZiB0YWdzLgorc2hvdWxkQmUoIkludGwuTnVtYmVy
Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4nKSIsICJbICdlbicgXSIpOworLy8gSGFuZGxl
cyBhcnJheS1saWtlIG9iamVjdHMuCitzaG91bGRCZSgiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9y
dGVkTG9jYWxlc09mKHsgbGVuZ3RoOiAyLCAxOiAnZW4nLCAwOiAnZXMnIH0pIiwgIlsgJ2VzJywg
J2VuJyBdIik7CisvLyBEZWR1cGxpY2F0ZXMgdGFncy4KK3Nob3VsZEJlKCJJbnRsLk51bWJlckZv
cm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoWyAnZW4nLCAncHQnLCAnZW4nLCAnZXMnIF0pIiwgIlsg
J2VuJywgJ3B0JywgJ2VzJyBdIik7CisvLyBDYW5vbmljYWxpemVzIHRhZ3MuCitzaG91bGRCZSgi
SW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdFbi1sYVRuLXVzLXZhcmlhbnQy
LXZhcmlhbnQxLTFhYmMtVS1rby10UnVlLUEtYWEtYWFhLXgtUkVTRVJWRUQnKSIsICJbICdlbi1M
YXRuLVVTLXZhcmlhbnQyLXZhcmlhbnQxLTFhYmMtYS1hYS1hYWEtdS1rby10cnVlLXgtUkVTRVJW
RUQnIF0iKTsKKy8vIFJlcGxhY2VzIG91dGRhdGVkIHRhZ3MuCitzaG91bGRCZSgiSW50bC5OdW1i
ZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCduby1ib2snKSIsICJbICduYicgXSIpOworLy8g
RG9lc24ndCB0aHJvdywgYnV0IGlnbm9yZXMgcHJpdmF0ZSB0YWdzLgorc2hvdWxkQmUoIkludGwu
TnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZigneC1zb21lLXRoaW5nJykiLCAiW10iKTsK
Ky8vIFRocm93cyBvbiBwcm9ibGVtcyB3aXRoIGxlbmd0aCwgZ2V0LCBvciB0b1N0cmluZy4KK3No
b3VsZFRocm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoT2JqZWN0LmNy
ZWF0ZShudWxsLCB7IGxlbmd0aDogeyBnZXQoKSB7IHRocm93IEVycm9yKCdhJykgfSB9IH0pKSIs
ICInRXJyb3I6IGEnIik7CitzaG91bGRUaHJvdygiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVk
TG9jYWxlc09mKE9iamVjdC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgdmFsdWU6IDEgfSwgMDog
eyBnZXQoKSB7IHRocm93IEVycm9yKCdiJykgfSB9IH0pKSIsICInRXJyb3I6IGInIik7CitzaG91
bGRUaHJvdygiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsgeyB0b1N0cmlu
ZygpIHsgdGhyb3cgRXJyb3IoJ2MnKSB9IH0gXSkiLCAiJ0Vycm9yOiBjJyIpOworLy8gVGhyb3dz
IG9uIGJhZCB0YWdzLgorc2hvdWxkVGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExv
Y2FsZXNPZihbIDUgXSkiLCAiJ1R5cGVFcnJvcjogbG9jYWxlIHZhbHVlIG11c3QgYmUgYSBzdHJp
bmcgb3Igb2JqZWN0JyIpOworc2hvdWxkVGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRl
ZExvY2FsZXNPZignJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiAnIik7
CitzaG91bGRUaHJvdygiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdhJyki
LCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBhJyIpOworc2hvdWxkVGhyb3co
IkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignYWJjZGVmZ2hpaicpIiwgIidS
YW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogYWJjZGVmZ2hpaiciKTsKK3Nob3VsZFRo
cm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJyMkJykiLCAiJ1Jhbmdl
RXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiAjJCciKTsKK3Nob3VsZFRocm93KCJJbnRsLk51
bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLUAtYWJjJykiLCAiJ1JhbmdlRXJyb3I6
IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi1ALWFiYyciKTsKK3Nob3VsZFRocm93KCJJbnRsLk51
bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXUnKSIsICInUmFuZ2VFcnJvcjogaW52
YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXUnIik7CitzaG91bGRUaHJvdygiSW50bC5OdW1iZXJGb3Jt
YXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi11LWtuLXRydWUtdS1rby10cnVlJykiLCAiJ1Jhbmdl
RXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi11LWtuLXRydWUtdS1rby10cnVlJyIpOwor
c2hvdWxkVGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4teCcp
IiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4teCciKTsKK3Nob3VsZFRo
cm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLSonKSIsICInUmFu
Z2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLSonIik7CiAKIC8vIDExLjMgUHJvcGVy
dGllcyBvZiB0aGUgSW50bC5OdW1iZXJGb3JtYXQgUHJvdG90eXBlIE9iamVjdAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260225</attachid>
            <date>2015-08-29 12:40:57 -0700</date>
            <delta_ts>2015-09-02 17:55:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147599-20150829134041.patch</filename>
            <type>text/plain</type>
            <size>180667</size>
            <attacher name="Andy VanWagoner">andy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
N2ZmMDg0YjFiNWQ5NzQ0OTdhZDNhNTFmMTEwNjEyOWU0M2ZhMGZmLi42MDhmYzg0YzA4MDhmMWRk
NTZjMThmOWJhMWQ0MGJkZTI5NGM5ZjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NyBAQAorMjAxNS0wOC0yOSAgQW5keSBWYW5XYWdvbmVyICA8dGhldGFsZWNyYWZ0ZXJA
Z21haWwuY29tPgorCisgICAgICAgIFtJTlRMXSBJbXBsZW1lbnQgc3VwcG9ydGVkTG9jYWxlc09m
IG9uIEludGwgQ29uc3RydWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDc1OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbXBsZW1lbnRzIGFsbCBvZiB0aGUgYWJzdHJhY3Qgb3BlcmF0aW9ucyB1
c2VkIGJ5IHN1cHBvcnRlZExvY2FsZXNPZiwgZXhjZXB0IGR1cmluZyBjYW5vbmljYWxpemF0aW9u
IGl0IGRvZXMgbm90IHJlcGxhY2UgcmVkdW5kYW50IHRhZ3MsIG9yIHN1YnRhZ3Mgd2l0aCB0aGVp
ciBwcmVmZXJyZWQgdmFsdWVzLgorCisgICAgICAgICogaWN1L3VuaWNvZGUvdWNhbC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBpY3UvdW5pY29kZS91ZGF0Lmg6IEFkZGVkLgorICAgICAgICAqIGljdS91
bmljb2RlL3VtaXNjLmg6IEFkZGVkLgorICAgICAgICAqIGljdS91bmljb2RlL3VudW0uaDogQWRk
ZWQuCisgICAgICAgICogaWN1L3VuaWNvZGUvdXR5cGVzLmg6IENsZWFyIHRoZSBVX1NIT1dfQ1BM
VVNQTFVTX0FQSSBmbGFnIHRvIHByZXZlbnQgQysrIGhlYWRlcnMgZnJvbSBiZWluZyBpbmNsdWRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6IEFkZGUgbG9jYWxlTWF0
Y2hlci4KKyAgICAgICAgKiBydW50aW1lL0ludGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6SW50bENvbGxhdG9yQ29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09m
KTogSW1wbGVtZW50ZWQuCisgICAgICAgICogcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25z
dHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9y
RnVuY1N1cHBvcnRlZExvY2FsZXNPZik6IEltcGxlbWVudGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJl
ckZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZik6IEltcGxlbWVudGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmNhbm9uaWNh
bGl6ZUxhbmd1YWdlVGFnKToKKyAgICAgICAgKEpTQzo6Z2V0Q2Fub25pY2FsTGFuZ1RhZyk6Cisg
ICAgICAgIChKU0M6OmdldFByaXZhdGVVc2VMYW5nVGFnKToKKyAgICAgICAgKEpTQzo6Z2V0R3Jh
bmRmYXRoZXJlZExhbmdUYWcpOgorICAgICAgICAoSlNDOjpkZWZhdWx0TG9jYWxlKToKKyAgICAg
ICAgKEpTQzo6Y2Fub25pY2FsaXplTG9jYWxlTGlzdCk6CisgICAgICAgIChKU0M6OmJlc3RBdmFp
bGFibGVMb2NhbGUpOgorICAgICAgICAoSlNDOjpsb29rdXBTdXBwb3J0ZWRMb2NhbGVzKToKKyAg
ICAgICAgKEpTQzo6YmVzdEZpdFN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAoSlNDOjpzdXBw
b3J0ZWRMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6Z2V0SW50bFN0cmluZ09wdGlvbik6CisgICAg
ICAgIChKU0M6OmdldEludGxCb29sZWFuT3B0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0ludGxP
YmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUuaDogQWRkZWQgdG9MZW5ndGgu
CisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmNwcDogQWRkZWQgdG9MZW5ndGguCisgICAg
ICAgIChKU0M6OkpTVmFsdWU6OnRvTGVuZ3RoKTogSW1wbGVtZW50IFRvTGVuZ3RoIGZyb20gRUNN
QSAyNjIgNi4wIDcuMS4xNQorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxl
cyk6IEFkZGVkIGxhenkgbG9jYWxlIGxpc3QuCisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
OjppbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKTogQWRkZWQgbGF6eSBsb2NhbGUg
bGlzdC4KKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmludGxOdW1iZXJGb3JtYXRBdmFp
bGFibGVMb2NhbGVzKTogQWRkZWQgbGF6eSBsb2NhbGUgbGlzdC4KKyAgICAgICAgKiBydW50aW1l
L0pTR2xvYmFsT2JqZWN0Lmg6CisKIDIwMTUtMDgtMjggIEJlbmphbWluIFBvdWxhaW4gIDxicG91
bGFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gR2V0IHJpZCBvZiBERkcncyBNZXJnZU1v
ZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29kZS91Y2FsLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdWNhbC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5
N2FmMTUzZDQzOWI0YzEzMmQ0Y2YwYzFlNTE4MjI2OThiMzdiMTcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdWNhbC5oCkBAIC0wLDAgKzEsMTI4
NSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYt
MjAxMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQKKyAq
IG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisg
Ki8KKworI2lmbmRlZiBVQ0FMX0gKKyNkZWZpbmUgVUNBTF9ICisKKyNpbmNsdWRlICJ1bmljb2Rl
L3V0eXBlcy5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWVudW0uaCIKKyNpbmNsdWRlICJ1bmljb2Rl
L3Vsb2MuaCIKKyNpbmNsdWRlICJ1bmljb2RlL2xvY2FscG9pbnRlci5oIgorCisjaWYgIVVDT05G
SUdfTk9fRk9STUFUVElORworCisvKioKKyAqIFxmaWxlCisgKiBcYnJpZWYgQyBBUEk6IENhbGVu
ZGFyCisgKgorICogPGgyPkNhbGVuZGFyIEMgQVBJPC9oMj4KKyAqCisgKiBVQ2FsZW5kYXIgQyBB
UEkgaXMgdXNlZCAgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBhIDxjb2RlPlVEYXRlPC9jb2RlPiBv
YmplY3QKKyAqIGFuZCBhIHNldCBvZiBpbnRlZ2VyIGZpZWxkcyBzdWNoIGFzIDxjb2RlPlVDQUxf
WUVBUjwvY29kZT4sIDxjb2RlPlVDQUxfTU9OVEg8L2NvZGU+LAorICogPGNvZGU+VUNBTF9EQVk8
L2NvZGU+LCA8Y29kZT5VQ0FMX0hPVVI8L2NvZGU+LCBhbmQgc28gb24uCisgKiAoQSA8Y29kZT5V
RGF0ZTwvY29kZT4gb2JqZWN0IHJlcHJlc2VudHMgYSBzcGVjaWZpYyBpbnN0YW50IGluCisgKiB0
aW1lIHdpdGggbWlsbGlzZWNvbmQgcHJlY2lzaW9uLiBTZWUgVURhdGUKKyAqIGZvciBpbmZvcm1h
dGlvbiBhYm91dCB0aGUgPGNvZGU+VURhdGU8L2NvZGU+IC4pCisgKgorICogPHA+CisgKiBUeXBl
cyBvZiA8Y29kZT5VQ2FsZW5kYXI8L2NvZGU+IGludGVycHJldCBhIDxjb2RlPlVEYXRlPC9jb2Rl
PgorICogYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiBhIHNwZWNpZmljIGNhbGVuZGFyIHN5c3Rl
bS4gVGhlIFVfU1RBQkxFCisgKiBwcm92aWRlcyB0aGUgZW51bSBVQ2FsZW5kYXJUeXBlIHdpdGgg
VUNBTF9UUkFESVRJT05BTCBhbmQKKyAqIFVDQUxfR1JFR09SSUFOLgorICogPHA+CisgKiBMaWtl
IG90aGVyIGxvY2FsZS1zZW5zaXRpdmUgQyBBUEksIGNhbGVuZGFyIEFQSSAgcHJvdmlkZXMgYQor
ICogZnVuY3Rpb24sIDxjb2RlPnVjYWxfb3BlbigpPC9jb2RlPiwgd2hpY2ggcmV0dXJucyBhIHBv
aW50ZXIgdG8KKyAqIDxjb2RlPlVDYWxlbmRhcjwvY29kZT4gd2hvc2UgdGltZSBmaWVsZHMgaGF2
ZSBiZWVuIGluaXRpYWxpemVkCisgKiB3aXRoIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUuIFdl
IG5lZWQgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZgorICogY2FsZW5kYXIgdG8gYmUgb3BlbmVkIGFu
ZCB0aGUgIHRpbWV6b25lSWQuCisgKiBcaHRtbG9ubHk8YmxvY2txdW90ZT5cZW5kaHRtbG9ubHkK
KyAqIDxwcmU+CisgKiBcY29kZQorICogVUNhbGVuZGFyICpjYWxkZWY7CisgKiBVQ2hhciAqdHpJ
ZDsKKyAqIFVFcnJvckNvZGUgc3RhdHVzOworICogdHpJZD0oVUNoYXIqKW1hbGxvYyhzaXplb2Yo
VUNoYXIpICogKHN0cmxlbigiUFNUIikgKzEpICk7CisgKiB1X3Vhc3RyY3B5KHR6SWQsICJQU1Qi
KTsKKyAqIGNhbGRlZj11Y2FsX29wZW4odHpJRCwgdV9zdHJsZW4odHpJRCksIE5VTEwsIFVDQUxf
VFJBRElUSU9OQUwsICZzdGF0dXMpOworICogXGVuZGNvZGUKKyAqIDwvcHJlPgorICogXGh0bWxv
bmx5PC9ibG9ja3F1b3RlPlxlbmRodG1sb25seQorICoKKyAqIDxwPgorICogQSA8Y29kZT5VQ2Fs
ZW5kYXI8L2NvZGU+IG9iamVjdCBjYW4gcHJvZHVjZSBhbGwgdGhlIHRpbWUgZmllbGQgdmFsdWVz
CisgKiBuZWVkZWQgdG8gaW1wbGVtZW50IHRoZSBkYXRlLXRpbWUgZm9ybWF0dGluZyBmb3IgYSBw
YXJ0aWN1bGFyIGxhbmd1YWdlCisgKiBhbmQgY2FsZW5kYXIgc3R5bGUgKGZvciBleGFtcGxlLCBK
YXBhbmVzZS1HcmVnb3JpYW4sIEphcGFuZXNlLVRyYWRpdGlvbmFsKS4KKyAqCisgKiA8cD4KKyAq
IFdoZW4gY29tcHV0aW5nIGEgPGNvZGU+VURhdGU8L2NvZGU+IGZyb20gdGltZSBmaWVsZHMsIHR3
byBzcGVjaWFsIGNpcmN1bXN0YW5jZXMKKyAqIG1heSBhcmlzZTogdGhlcmUgbWF5IGJlIGluc3Vm
ZmljaWVudCBpbmZvcm1hdGlvbiB0byBjb21wdXRlIHRoZQorICogPGNvZGU+VURhdGU8L2NvZGU+
IChzdWNoIGFzIG9ubHkgeWVhciBhbmQgbW9udGggYnV0IG5vIGRheSBpbiB0aGUgbW9udGgpLAor
ICogb3IgdGhlcmUgbWF5IGJlIGluY29uc2lzdGVudCBpbmZvcm1hdGlvbiAoc3VjaCBhcyAiVHVl
c2RheSwgSnVseSAxNSwgMTk5NiIKKyAqIC0tIEp1bHkgMTUsIDE5OTYgaXMgYWN0dWFsbHkgYSBN
b25kYXkpLgorICoKKyAqIDxwPgorICogPHN0cm9uZz5JbnN1ZmZpY2llbnQgaW5mb3JtYXRpb24u
PC9zdHJvbmc+IFRoZSBjYWxlbmRhciB3aWxsIHVzZSBkZWZhdWx0CisgKiBpbmZvcm1hdGlvbiB0
byBzcGVjaWZ5IHRoZSBtaXNzaW5nIGZpZWxkcy4gVGhpcyBtYXkgdmFyeSBieSBjYWxlbmRhcjsg
Zm9yCisgKiB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyLCB0aGUgZGVmYXVsdCBmb3IgYSBmaWVsZCBp
cyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZQorICogc3RhcnQgb2YgdGhlIGVwb2NoOiBpLmUuLCBV
Q0FMX1lFQVIgPSAxOTcwLCBVQ0FMX01PTlRIID0gSkFOVUFSWSwgVUNBTF9EQVRFID0gMSwgZXRj
LgorICoKKyAqIDxwPgorICogPHN0cm9uZz5JbmNvbnNpc3RlbnQgaW5mb3JtYXRpb24uPC9zdHJv
bmc+IElmIGZpZWxkcyBjb25mbGljdCwgdGhlIGNhbGVuZGFyCisgKiB3aWxsIGdpdmUgcHJlZmVy
ZW5jZSB0byBmaWVsZHMgc2V0IG1vcmUgcmVjZW50bHkuIEZvciBleGFtcGxlLCB3aGVuCisgKiBk
ZXRlcm1pbmluZyB0aGUgZGF5LCB0aGUgY2FsZW5kYXIgd2lsbCBsb29rIGZvciBvbmUgb2YgdGhl
IGZvbGxvd2luZworICogY29tYmluYXRpb25zIG9mIGZpZWxkcy4gIFRoZSBtb3N0IHJlY2VudCBj
b21iaW5hdGlvbiwgYXMgZGV0ZXJtaW5lZCBieSB0aGUKKyAqIG1vc3QgcmVjZW50bHkgc2V0IHNp
bmdsZSBmaWVsZCwgd2lsbCBiZSB1c2VkLgorICoKKyAqIFxodG1sb25seTxibG9ja3F1b3RlPlxl
bmRodG1sb25seQorICogPHByZT4KKyAqIFxjb2RlCisgKiBVQ0FMX01PTlRIICsgVUNBTF9EQVlf
T0ZfTU9OVEgKKyAqIFVDQUxfTU9OVEggKyBVQ0FMX1dFRUtfT0ZfTU9OVEggKyBVQ0FMX0RBWV9P
Rl9XRUVLCisgKiBVQ0FMX01PTlRIICsgVUNBTF9EQVlfT0ZfV0VFS19JTl9NT05USCArIFVDQUxf
REFZX09GX1dFRUsKKyAqIFVDQUxfREFZX09GX1lFQVIKKyAqIFVDQUxfREFZX09GX1dFRUsgKyBV
Q0FMX1dFRUtfT0ZfWUVBUgorICogXGVuZGNvZGUKKyAqIDwvcHJlPgorICogXGh0bWxvbmx5PC9i
bG9ja3F1b3RlPlxlbmRodG1sb25seQorICoKKyAqIEZvciB0aGUgdGltZSBvZiBkYXk6CisgKgor
ICogXGh0bWxvbmx5PGJsb2NrcXVvdGU+XGVuZGh0bWxvbmx5CisgKiA8cHJlPgorICogXGNvZGUK
KyAqIFVDQUxfSE9VUl9PRl9EQVkKKyAqIFVDQUxfQU1fUE0gKyBVQ0FMX0hPVVIKKyAqIFxlbmRj
b2RlCisgKiA8L3ByZT4KKyAqIFxodG1sb25seTwvYmxvY2txdW90ZT5cZW5kaHRtbG9ubHkKKyAq
CisgKiA8cD4KKyAqIDxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gZm9yIHNvbWUgbm9uLUdyZWdvcmlh
biBjYWxlbmRhcnMsIGRpZmZlcmVudAorICogZmllbGRzIG1heSBiZSBuZWNlc3NhcnkgZm9yIGNv
bXBsZXRlIGRpc2FtYmlndWF0aW9uLiBGb3IgZXhhbXBsZSwgYSBmdWxsCisgKiBzcGVjaWZpY2F0
aW9uIG9mIHRoZSBoaXN0b3JpYWwgQXJhYmljIGFzdHJvbm9taWNhbCBjYWxlbmRhciByZXF1aXJl
cyB5ZWFyLAorICogbW9udGgsIGRheS1vZi1tb250aCA8ZW0+YW5kPC9lbT4gZGF5LW9mLXdlZWsg
aW4gc29tZSBjYXNlcy4KKyAqCisgKiA8cD4KKyAqIDxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhl
cmUgYXJlIGNlcnRhaW4gcG9zc2libGUgYW1iaWd1aXRpZXMgaW4KKyAqIGludGVycHJldGF0aW9u
IG9mIGNlcnRhaW4gc2luZ3VsYXIgdGltZXMsIHdoaWNoIGFyZSByZXNvbHZlZCBpbiB0aGUKKyAq
IGZvbGxvd2luZyB3YXlzOgorICogPG9sPgorICogICAgIDxsaT4gMjQ6MDA6MDAgImJlbG9uZ3Mi
IHRvIHRoZSBmb2xsb3dpbmcgZGF5LiBUaGF0IGlzLAorICogICAgICAgICAgMjM6NTkgb24gRGVj
IDMxLCAxOTY5ICZsdDsgMjQ6MDAgb24gSmFuIDEsIDE5NzAgJmx0OyAyNDowMTowMCBvbiBKYW4g
MSwgMTk3MAorICoKKyAqICAgICA8bGk+IEFsdGhvdWdoIGhpc3RvcmljYWxseSBub3QgcHJlY2lz
ZSwgbWlkbmlnaHQgYWxzbyBiZWxvbmdzIHRvICJhbSIsCisgKiAgICAgICAgICBhbmQgbm9vbiBi
ZWxvbmdzIHRvICJwbSIsIHNvIG9uIHRoZSBzYW1lIGRheSwKKyAqICAgICAgICAgIDEyOjAwIGFt
IChtaWRuaWdodCkgJmx0OyAxMjowMSBhbSwgYW5kIDEyOjAwIHBtIChub29uKSAmbHQ7IDEyOjAx
IHBtCisgKiA8L29sPgorICoKKyAqIDxwPgorICogVGhlIGRhdGUgb3IgdGltZSBmb3JtYXQgc3Ry
aW5ncyBhcmUgbm90IHBhcnQgb2YgdGhlIGRlZmluaXRpb24gb2YgYQorICogY2FsZW5kYXIsIGFz
IHRob3NlIG11c3QgYmUgbW9kaWZpYWJsZSBvciBvdmVycmlkYWJsZSBieSB0aGUgdXNlciBhdAor
ICogcnVudGltZS4gVXNlIHtAbGluayBEYXRlRm9ybWF0fQorICogdG8gZm9ybWF0IGRhdGVzLgor
ICoKKyAqIDxwPgorICogPGNvZGU+Q2FsZW5kYXI8L2NvZGU+IHByb3ZpZGVzIGFuIEFQSSBmb3Ig
ZmllbGQgInJvbGxpbmciLCB3aGVyZSBmaWVsZHMKKyAqIGNhbiBiZSBpbmNyZW1lbnRlZCBvciBk
ZWNyZW1lbnRlZCwgYnV0IHdyYXAgYXJvdW5kLiBGb3IgZXhhbXBsZSwgcm9sbGluZyB0aGUKKyAq
IG1vbnRoIHVwIGluIHRoZSBkYXRlIDxjb2RlPkRlY2VtYmVyIDEyLCA8Yj4xOTk2PC9iPjwvY29k
ZT4gcmVzdWx0cyBpbgorICogPGNvZGU+SmFudWFyeSAxMiwgPGI+MTk5NjwvYj48L2NvZGU+Lgor
ICoKKyAqIDxwPgorICogPGNvZGU+Q2FsZW5kYXI8L2NvZGU+IGFsc28gcHJvdmlkZXMgYSBkYXRl
IGFyaXRobWV0aWMgZnVuY3Rpb24gZm9yCisgKiBhZGRpbmcgdGhlIHNwZWNpZmllZCAoc2lnbmVk
KSBhbW91bnQgb2YgdGltZSB0byBhIHBhcnRpY3VsYXIgdGltZSBmaWVsZC4KKyAqIEZvciBleGFt
cGxlLCBzdWJ0cmFjdGluZyA1IGRheXMgZnJvbSB0aGUgZGF0ZSA8Y29kZT5TZXB0ZW1iZXIgMTIs
IDE5OTY8L2NvZGU+CisgKiByZXN1bHRzIGluIDxjb2RlPlNlcHRlbWJlciA3LCAxOTk2PC9jb2Rl
Pi4KKyAqCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworCisvKiogQSBjYWxlbmRhci4KKyAqICBG
b3IgdXNhZ2UgaW4gQyBwcm9ncmFtcy4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCit0eXBlZGVm
IHZvaWQqIFVDYWxlbmRhcjsKKworLyoqIFBvc3NpYmxlIHR5cGVzIG9mIFVDYWxlbmRhcnMgCisg
KiBAc3RhYmxlIElDVSAyLjAKKyAqLworZW51bSBVQ2FsZW5kYXJUeXBlIHsKKyAgLyoqCisgICAq
IERlc3BpdGUgdGhlIG5hbWUsIFVDQUxfVFJBRElUSU9OQUwgZGVzaWduYXRlcyB0aGUgbG9jYWxl
J3MgZGVmYXVsdCBjYWxlbmRhciwKKyAgICogd2hpY2ggbWF5IGJlIHRoZSBHcmVnb3JpYW4gY2Fs
ZW5kYXIgb3Igc29tZSBvdGhlciBjYWxlbmRhci4KKyAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAq
LworICBVQ0FMX1RSQURJVElPTkFMLAorICAvKioKKyAgICogQSBiZXR0ZXIgbmFtZSBmb3IgVUNB
TF9UUkFESVRJT05BTC4KKyAgICogQHN0YWJsZSBJQ1UgNC4yCisgICAqLworICBVQ0FMX0RFRkFV
TFQgPSBVQ0FMX1RSQURJVElPTkFMLAorICAvKioKKyAgICogVW5hbWJpZ3VvdXNseSBkZXNpZ25h
dGVzIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIgZm9yIHRoZSBsb2NhbGUuCisgICAqIEBzdGFibGUg
SUNVIDIuMAorICAgKi8KKyAgVUNBTF9HUkVHT1JJQU4KK307CisKKy8qKiBAc3RhYmxlIElDVSAy
LjAgKi8KK3R5cGVkZWYgZW51bSBVQ2FsZW5kYXJUeXBlIFVDYWxlbmRhclR5cGU7CisKKy8qKiBQ
b3NzaWJsZSBmaWVsZHMgaW4gYSBVQ2FsZW5kYXIgCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLwor
ZW51bSBVQ2FsZW5kYXJEYXRlRmllbGRzIHsKKyAgLyoqIAorICAgKiBGaWVsZCBudW1iZXIgaW5k
aWNhdGluZyB0aGUgZXJhLCBlLmcuLCBBRCBvciBCQyBpbiB0aGUgR3JlZ29yaWFuIChKdWxpYW4p
IGNhbGVuZGFyLiAKKyAgICogVGhpcyBpcyBhIGNhbGVuZGFyLXNwZWNpZmljIHZhbHVlLgorICAg
KiBAc3RhYmxlIElDVSAyLjYgCisgICAqLworICBVQ0FMX0VSQSwKKworICAvKioKKyAgICogRmll
bGQgbnVtYmVyIGluZGljYXRpbmcgdGhlIHllYXIuIFRoaXMgaXMgYSBjYWxlbmRhci1zcGVjaWZp
YyB2YWx1ZS4KKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9ZRUFSLAorCisg
IC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUgbW9udGguIFRoaXMgaXMgYSBj
YWxlbmRhci1zcGVjaWZpYyB2YWx1ZS4gCisgICAqIFRoZSBmaXJzdCBtb250aCBvZiB0aGUgeWVh
ciBpcworICAgKiA8Y29kZT5KQU5VQVJZPC9jb2RlPjsgdGhlIGxhc3QgZGVwZW5kcyBvbiB0aGUg
bnVtYmVyIG9mIG1vbnRocyBpbiBhIHllYXIuCisgICAqIEBzZWUgI1VDQUxfSkFOVUFSWQorICAg
KiBAc2VlICNVQ0FMX0ZFQlJVQVJZCisgICAqIEBzZWUgI1VDQUxfTUFSQ0gKKyAgICogQHNlZSAj
VUNBTF9BUFJJTAorICAgKiBAc2VlICNVQ0FMX01BWQorICAgKiBAc2VlICNVQ0FMX0pVTkUKKyAg
ICogQHNlZSAjVUNBTF9KVUxZCisgICAqIEBzZWUgI1VDQUxfQVVHVVNUCisgICAqIEBzZWUgI1VD
QUxfU0VQVEVNQkVSCisgICAqIEBzZWUgI1VDQUxfT0NUT0JFUgorICAgKiBAc2VlICNVQ0FMX05P
VkVNQkVSCisgICAqIEBzZWUgI1VDQUxfREVDRU1CRVIKKyAgICogQHNlZSAjVUNBTF9VTkRFQ0lN
QkVSCisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfTU9OVEgsCisKKyAgLyoq
CisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZQorICAgKiB3ZWVrIG51bWJlciB3aXRo
aW4gdGhlIGN1cnJlbnQgeWVhci4gIFRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLCBhcworICAg
KiBkZWZpbmVkIGJ5IDxjb2RlPlVDQUxfRklSU1RfREFZX09GX1dFRUs8L2NvZGU+IGFuZCA8Y29k
ZT5VQ0FMX01JTklNQUxfREFZU19JTl9GSVJTVF9XRUVLPC9jb2RlPgorICAgKiBhdHRyaWJ1dGVz
LCBoYXMgdmFsdWUgMS4gIFN1YmNsYXNzZXMgZGVmaW5lCisgICAqIHRoZSB2YWx1ZSBvZiA8Y29k
ZT5VQ0FMX1dFRUtfT0ZfWUVBUjwvY29kZT4gZm9yIGRheXMgYmVmb3JlIHRoZSBmaXJzdCB3ZWVr
IG9mCisgICAqIHRoZSB5ZWFyLgorICAgKiBAc2VlIHVjYWxfZ2V0QXR0cmlidXRlCisgICAqIEBz
ZWUgdWNhbF9zZXRBdHRyaWJ1dGUKKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNB
TF9XRUVLX09GX1lFQVIsCisKKyAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhl
CisgICAqIHdlZWsgbnVtYmVyIHdpdGhpbiB0aGUgY3VycmVudCBtb250aC4gIFRoZSBmaXJzdCB3
ZWVrIG9mIHRoZSBtb250aCwgYXMKKyAgICogZGVmaW5lZCBieSA8Y29kZT5VQ0FMX0ZJUlNUX0RB
WV9PRl9XRUVLPC9jb2RlPiBhbmQgPGNvZGU+VUNBTF9NSU5JTUFMX0RBWVNfSU5fRklSU1RfV0VF
SzwvY29kZT4KKyAgICogYXR0cmlidXRlcywgaGFzIHZhbHVlIDEuICBTdWJjbGFzc2VzIGRlZmlu
ZQorICAgKiB0aGUgdmFsdWUgb2YgPGNvZGU+V0VFS19PRl9NT05USDwvY29kZT4gZm9yIGRheXMg
YmVmb3JlIHRoZSBmaXJzdCB3ZWVrIG9mCisgICAqIHRoZSBtb250aC4KKyAgICogQHNlZSB1Y2Fs
X2dldEF0dHJpYnV0ZQorICAgKiBAc2VlIHVjYWxfc2V0QXR0cmlidXRlCisgICAqIEBzZWUgI1VD
QUxfRklSU1RfREFZX09GX1dFRUsKKyAgICogQHNlZSAjVUNBTF9NSU5JTUFMX0RBWVNfSU5fRklS
U1RfV0VFSworICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAqLworICBVQ0FMX1dFRUtfT0ZfTU9O
VEgsCisKKyAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIGRheSBv
ZiB0aGUgbW9udGguIFRoaXMgaXMgYSBzeW5vbnltIGZvciA8Y29kZT5EQVlfT0ZfTU9OVEg8L2Nv
ZGU+LgorICAgKiBUaGUgZmlyc3QgZGF5IG9mIHRoZSBtb250aCBoYXMgdmFsdWUgMS4KKyAgICog
QHNlZSAjVUNBTF9EQVlfT0ZfTU9OVEgKKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAg
VUNBTF9EQVRFLAorCisgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZSBkYXkK
KyAgICogbnVtYmVyIHdpdGhpbiB0aGUgY3VycmVudCB5ZWFyLiAgVGhlIGZpcnN0IGRheSBvZiB0
aGUgeWVhciBoYXMgdmFsdWUgMS4KKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNB
TF9EQVlfT0ZfWUVBUiwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUg
ZGF5CisgICAqIG9mIHRoZSB3ZWVrLiAgVGhpcyBmaWVsZCB0YWtlcyB2YWx1ZXMgPGNvZGU+U1VO
REFZPC9jb2RlPiwKKyAgICogPGNvZGU+TU9OREFZPC9jb2RlPiwgPGNvZGU+VFVFU0RBWTwvY29k
ZT4sIDxjb2RlPldFRE5FU0RBWTwvY29kZT4sCisgICAqIDxjb2RlPlRIVVJTREFZPC9jb2RlPiwg
PGNvZGU+RlJJREFZPC9jb2RlPiwgYW5kIDxjb2RlPlNBVFVSREFZPC9jb2RlPi4KKyAgICogQHNl
ZSAjVUNBTF9TVU5EQVkKKyAgICogQHNlZSAjVUNBTF9NT05EQVkKKyAgICogQHNlZSAjVUNBTF9U
VUVTREFZCisgICAqIEBzZWUgI1VDQUxfV0VETkVTREFZCisgICAqIEBzZWUgI1VDQUxfVEhVUlNE
QVkKKyAgICogQHNlZSAjVUNBTF9GUklEQVkKKyAgICogQHNlZSAjVUNBTF9TQVRVUkRBWQorICAg
KiBAc3RhYmxlIElDVSAyLjYgCisgICAqLworICBVQ0FMX0RBWV9PRl9XRUVLLAorCisgLyoqCisg
ICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZQorICAgKiBvcmRpbmFsIG51bWJlciBvZiB0
aGUgZGF5IG9mIHRoZSB3ZWVrIHdpdGhpbiB0aGUgY3VycmVudCBtb250aC4gVG9nZXRoZXIKKyAg
ICogd2l0aCB0aGUgPGNvZGU+REFZX09GX1dFRUs8L2NvZGU+IGZpZWxkLCB0aGlzIHVuaXF1ZWx5
IHNwZWNpZmllcyBhIGRheQorICAgKiB3aXRoaW4gYSBtb250aC4gIFVubGlrZSA8Y29kZT5XRUVL
X09GX01PTlRIPC9jb2RlPiBhbmQKKyAgICogPGNvZGU+V0VFS19PRl9ZRUFSPC9jb2RlPiwgdGhp
cyBmaWVsZCdzIHZhbHVlIGRvZXMgPGVtPm5vdDwvZW0+IGRlcGVuZCBvbgorICAgKiA8Y29kZT5n
ZXRGaXJzdERheU9mV2VlaygpPC9jb2RlPiBvcgorICAgKiA8Y29kZT5nZXRNaW5pbWFsRGF5c0lu
Rmlyc3RXZWVrKCk8L2NvZGU+LiAgPGNvZGU+REFZX09GX01PTlRIIDE8L2NvZGU+CisgICAqIHRo
cm91Z2ggPGNvZGU+NzwvY29kZT4gYWx3YXlzIGNvcnJlc3BvbmQgdG8gPGNvZGU+REFZX09GX1dF
RUtfSU5fTU9OVEgKKyAgICogMTwvY29kZT47IDxjb2RlPjg8L2NvZGU+IHRocm91Z2ggPGNvZGU+
MTU8L2NvZGU+IGNvcnJlc3BvbmQgdG8KKyAgICogPGNvZGU+REFZX09GX1dFRUtfSU5fTU9OVEgg
MjwvY29kZT4sIGFuZCBzbyBvbi4KKyAgICogPGNvZGU+REFZX09GX1dFRUtfSU5fTU9OVEggMDwv
Y29kZT4gaW5kaWNhdGVzIHRoZSB3ZWVrIGJlZm9yZQorICAgKiA8Y29kZT5EQVlfT0ZfV0VFS19J
Tl9NT05USCAxPC9jb2RlPi4gIE5lZ2F0aXZlIHZhbHVlcyBjb3VudCBiYWNrIGZyb20gdGhlCisg
ICAqIGVuZCBvZiB0aGUgbW9udGgsIHNvIHRoZSBsYXN0IFN1bmRheSBvZiBhIG1vbnRoIGlzIHNw
ZWNpZmllZCBhcworICAgKiA8Y29kZT5EQVlfT0ZfV0VFSyA9IFNVTkRBWSwgREFZX09GX1dFRUtf
SU5fTU9OVEggPSAtMTwvY29kZT4uICBCZWNhdXNlCisgICAqIG5lZ2F0aXZlIHZhbHVlcyBjb3Vu
dCBiYWNrd2FyZCB0aGV5IHdpbGwgdXN1YWxseSBiZSBhbGlnbmVkIGRpZmZlcmVudGx5CisgICAq
IHdpdGhpbiB0aGUgbW9udGggdGhhbiBwb3NpdGl2ZSB2YWx1ZXMuICBGb3IgZXhhbXBsZSwgaWYg
YSBtb250aCBoYXMgMzEKKyAgICogZGF5cywgPGNvZGU+REFZX09GX1dFRUtfSU5fTU9OVEggLTE8
L2NvZGU+IHdpbGwgb3ZlcmxhcAorICAgKiA8Y29kZT5EQVlfT0ZfV0VFS19JTl9NT05USCA1PC9j
b2RlPiBhbmQgdGhlIGVuZCBvZiA8Y29kZT40PC9jb2RlPi4KKyAgICogQHNlZSAjVUNBTF9EQVlf
T0ZfV0VFSworICAgKiBAc2VlICNVQ0FMX1dFRUtfT0ZfTU9OVEgKKyAgICogQHN0YWJsZSBJQ1Ug
Mi42IAorICAgKi8KKyAgVUNBTF9EQVlfT0ZfV0VFS19JTl9NT05USCwKKworIC8qKgorICAgKiBG
aWVsZCBudW1iZXIgaW5kaWNhdGluZworICAgKiB3aGV0aGVyIHRoZSA8Y29kZT5IT1VSPC9jb2Rl
PiBpcyBiZWZvcmUgb3IgYWZ0ZXIgbm9vbi4KKyAgICogRS5nLiwgYXQgMTA6MDQ6MTUuMjUwIFBN
IHRoZSA8Y29kZT5BTV9QTTwvY29kZT4gaXMgPGNvZGU+UE08L2NvZGU+LgorICAgKiBAc2VlICNV
Q0FMX0FNCisgICAqIEBzZWUgI1VDQUxfUE0KKyAgICogQHNlZSAjVUNBTF9IT1VSCisgICAqIEBz
dGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfQU1fUE0sCisKKyAvKioKKyAgICogRmllbGQg
bnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIGhvdXIgb2YgdGhlIG1vcm5pbmcgb3IgYWZ0ZXJu
b29uLiA8Y29kZT5IT1VSPC9jb2RlPiBpcyB1c2VkIGZvciB0aGUgMTItaG91cgorICAgKiBjbG9j
ay4KKyAgICogRS5nLiwgYXQgMTA6MDQ6MTUuMjUwIFBNIHRoZSA8Y29kZT5IT1VSPC9jb2RlPiBp
cyAxMC4KKyAgICogQHNlZSAjVUNBTF9BTV9QTQorICAgKiBAc2VlICNVQ0FMX0hPVVJfT0ZfREFZ
CisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfSE9VUiwKKworIC8qKgorICAg
KiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUKKyAgICogaG91ciBvZiB0aGUgZGF5LiA8Y29k
ZT5IT1VSX09GX0RBWTwvY29kZT4gaXMgdXNlZCBmb3IgdGhlIDI0LWhvdXIgY2xvY2suCisgICAq
IEUuZy4sIGF0IDEwOjA0OjE1LjI1MCBQTSB0aGUgPGNvZGU+SE9VUl9PRl9EQVk8L2NvZGU+IGlz
IDIyLgorICAgKiBAc2VlICNVQ0FMX0hPVVIKKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8K
KyAgVUNBTF9IT1VSX09GX0RBWSwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGlu
ZyB0aGUKKyAgICogbWludXRlIHdpdGhpbiB0aGUgaG91ci4KKyAgICogRS5nLiwgYXQgMTA6MDQ6
MTUuMjUwIFBNIHRoZSA8Y29kZT5VQ0FMX01JTlVURTwvY29kZT4gaXMgNC4KKyAgICogQHN0YWJs
ZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9NSU5VVEUsCisKKyAvKioKKyAgICogRmllbGQgbnVt
YmVyIGluZGljYXRpbmcgdGhlCisgICAqIHNlY29uZCB3aXRoaW4gdGhlIG1pbnV0ZS4KKyAgICog
RS5nLiwgYXQgMTA6MDQ6MTUuMjUwIFBNIHRoZSA8Y29kZT5VQ0FMX1NFQ09ORDwvY29kZT4gaXMg
MTUuCisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfU0VDT05ELAorCisgLyoq
CisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZQorICAgKiBtaWxsaXNlY29uZCB3aXRo
aW4gdGhlIHNlY29uZC4KKyAgICogRS5nLiwgYXQgMTA6MDQ6MTUuMjUwIFBNIHRoZSA8Y29kZT5V
Q0FMX01JTExJU0VDT05EPC9jb2RlPiBpcyAyNTAuCisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAg
ICovCisgIFVDQUxfTUlMTElTRUNPTkQsCisKKyAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGlj
YXRpbmcgdGhlCisgICAqIHJhdyBvZmZzZXQgZnJvbSBHTVQgaW4gbWlsbGlzZWNvbmRzLgorICAg
KiBAc3RhYmxlIElDVSAyLjYgCisgICAqLworICBVQ0FMX1pPTkVfT0ZGU0VULAorCisgLyoqCisg
ICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZQorICAgKiBkYXlsaWdodCBzYXZpbmdzIG9m
ZnNldCBpbiBtaWxsaXNlY29uZHMuCisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVD
QUxfRFNUX09GRlNFVCwKKyAgCisgLyoqCisgICAqIEZpZWxkIG51bWJlciAKKyAgICogaW5kaWNh
dGluZyB0aGUgZXh0ZW5kZWQgeWVhciBjb3JyZXNwb25kaW5nIHRvIHRoZQorICAgKiA8Y29kZT5V
Q0FMX1dFRUtfT0ZfWUVBUjwvY29kZT4gZmllbGQuICBUaGlzIG1heSBiZSBvbmUgZ3JlYXRlciBv
ciBsZXNzCisgICAqIHRoYW4gdGhlIHZhbHVlIG9mIDxjb2RlPlVDQUxfRVhURU5ERURfWUVBUjwv
Y29kZT4uCisgICAqIEBzdGFibGUgSUNVIDIuNgorICAgKi8KKyAgVUNBTF9ZRUFSX1dPWSwKKwor
IC8qKgorICAgKiBGaWVsZCBudW1iZXIgCisgICAqIGluZGljYXRpbmcgdGhlIGxvY2FsaXplZCBk
YXkgb2Ygd2Vlay4gIFRoaXMgd2lsbCBiZSBhIHZhbHVlIGZyb20gMQorICAgKiB0byA3IGluY2x1
c2l2ZSwgd2l0aCAxIGJlaW5nIHRoZSBsb2NhbGl6ZWQgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLgor
ICAgKiBAc3RhYmxlIElDVSAyLjYKKyAgICovCisgIFVDQUxfRE9XX0xPQ0FMLAorCisgIC8qKgor
ICAgKiBZZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLCBlbmNvbXBhc3NpbmcgYWxsIHN1cHJh
LXllYXIgZmllbGRzLiBGb3IgZXhhbXBsZSwgCisgICAqIGluIEdyZWdvcmlhbi9KdWxpYW4gY2Fs
ZW5kYXJzLCBwb3NpdGl2ZSBFeHRlbmRlZCBZZWFyIHZhbHVlcyBpbmRpY2F0ZSB5ZWFycyBBRCwK
KyAgICogIDEgQkMgPSAwIGV4dGVuZGVkLCAyIEJDID0gLTEgZXh0ZW5kZWQsIGFuZCBzbyBvbi4g
CisgICAqIEBzdGFibGUgSUNVIDIuOCAKKyAgICovCisgIFVDQUxfRVhURU5ERURfWUVBUiwKKwor
IC8qKgorICAgKiBGaWVsZCBudW1iZXIgCisgICAqIGluZGljYXRpbmcgdGhlIG1vZGlmaWVkIEp1
bGlhbiBkYXkgbnVtYmVyLiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbQorICAgKiB0aGUgY29udmVu
dGlvbmFsIEp1bGlhbiBkYXkgbnVtYmVyIGluIHR3byByZWdhcmRzLiAgRmlyc3QsIGl0CisgICAq
IGRlbWFyY2F0ZXMgZGF5cyBhdCBsb2NhbCB6b25lIG1pZG5pZ2h0LCByYXRoZXIgdGhhbiBub29u
IEdNVC4KKyAgICogU2Vjb25kLCBpdCBpcyBhIGxvY2FsIG51bWJlcjsgdGhhdCBpcywgaXQgZGVw
ZW5kcyBvbiB0aGUgbG9jYWwgdGltZQorICAgKiB6b25lLiAgSXQgY2FuIGJlIHRob3VnaHQgb2Yg
YXMgYSBzaW5nbGUgbnVtYmVyIHRoYXQgZW5jb21wYXNzZXMgYWxsCisgICAqIHRoZSBkYXRlLXJl
bGF0ZWQgZmllbGRzLgorICAgKiBAc3RhYmxlIElDVSAyLjgKKyAgICovCisgIFVDQUxfSlVMSUFO
X0RBWSwgCisKKyAgLyoqCisgICAqIFJhbmdlcyBmcm9tIDAgdG8gMjM6NTk6NTkuOTk5IChyZWdh
cmRsZXNzIG9mIERTVCkuICBUaGlzIGZpZWxkIGJlaGF2ZXMgPGVtPmV4YWN0bHk8L2VtPiAKKyAg
ICogbGlrZSBhIGNvbXBvc2l0ZSBvZiBhbGwgdGltZS1yZWxhdGVkIGZpZWxkcywgbm90IGluY2x1
ZGluZyB0aGUgem9uZSBmaWVsZHMuICBBcyBzdWNoLCAKKyAgICogaXQgYWxzbyByZWZsZWN0cyBk
aXNjb250aW51aXRpZXMgb2YgdGhvc2UgZmllbGRzIG9uIERTVCB0cmFuc2l0aW9uIGRheXMuICBP
biBhIGRheQorICAgKiBvZiBEU1Qgb25zZXQsIGl0IHdpbGwganVtcCBmb3J3YXJkLiAgT24gYSBk
YXkgb2YgRFNUIGNlc3NhdGlvbiwgaXQgd2lsbCBqdW1wIAorICAgKiBiYWNrd2FyZC4gIFRoaXMg
cmVmbGVjdHMgdGhlIGZhY3QgdGhhdCBpdCBtdXN0IGJlIGNvbWJpbmVkIHdpdGggdGhlIERTVF9P
RkZTRVQgZmllbGQKKyAgICogdG8gb2J0YWluIGEgdW5pcXVlIGxvY2FsIHRpbWUgdmFsdWUuCisg
ICAqIEBzdGFibGUgSUNVIDIuOAorICAgKi8KKyAgVUNBTF9NSUxMSVNFQ09ORFNfSU5fREFZLAor
CisgIC8qKgorICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgY3VycmVudCBtb250aCBpcyBhIGxlYXAg
bW9udGggKDAgb3IgMSkuIFNlZSB0aGUgQ2hpbmVzZSBjYWxlbmRhciBmb3IKKyAgICogYW4gZXhh
bXBsZSBvZiB0aGlzLgorICAgKi8KKyAgVUNBTF9JU19MRUFQX01PTlRILAorICAKKyAgLyoqCisg
ICAqIEZpZWxkIGNvdW50CisgICAqIEBzdGFibGUgSUNVIDIuNgorICAgKi8KKyAgVUNBTF9GSUVM
RF9DT1VOVCwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUKKyAgICog
ZGF5IG9mIHRoZSBtb250aC4gVGhpcyBpcyBhIHN5bm9ueW0gZm9yIDxjb2RlPlVDQUxfREFURTwv
Y29kZT4uCisgICAqIFRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoIGhhcyB2YWx1ZSAxLgorICAg
KiBAc2VlICNVQ0FMX0RBVEUKKyAgICogU3lub255bSBmb3IgVUNBTF9EQVRFCisgICAqIEBzdGFi
bGUgSUNVIDIuOAorICAgKiovCisgIFVDQUxfREFZX09GX01PTlRIPVVDQUxfREFURQorfTsKKwor
LyoqIEBzdGFibGUgSUNVIDIuMCAqLwordHlwZWRlZiBlbnVtIFVDYWxlbmRhckRhdGVGaWVsZHMg
VUNhbGVuZGFyRGF0ZUZpZWxkczsKKyAgICAvKioKKyAgICAgKiBVc2VmdWwgY29uc3RhbnQgZm9y
IGRheXMgb2Ygd2Vlay4gTm90ZTogQ2FsZW5kYXIgZGF5LW9mLXdlZWsgaXMgMS1iYXNlZC4gQ2xp
ZW50cworICAgICAqIHdobyBjcmVhdGUgbG9jYWxlIHJlc291cmNlcyBmb3IgdGhlIGZpZWxkIG9m
IGZpcnN0LWRheS1vZi13ZWVrIHNob3VsZCBiZSBhd2FyZSBvZgorICAgICAqIHRoaXMuIEZvciBp
bnN0YW5jZSwgaW4gVVMgbG9jYWxlLCBmaXJzdC1kYXktb2Ytd2VlayBpcyBzZXQgdG8gMSwgaS5l
LiwgVUNBTF9TVU5EQVkuCisgICAgICovCisvKiogUG9zc2libGUgZGF5cyBvZiB0aGUgd2VlayBp
biBhIFVDYWxlbmRhciAKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitlbnVtIFVDYWxlbmRhckRh
eXNPZldlZWsgeworICAvKiogU3VuZGF5ICovCisgIFVDQUxfU1VOREFZID0gMSwKKyAgLyoqIE1v
bmRheSAqLworICBVQ0FMX01PTkRBWSwKKyAgLyoqIFR1ZXNkYXkgKi8KKyAgVUNBTF9UVUVTREFZ
LAorICAvKiogV2VkbmVzZGF5ICovCisgIFVDQUxfV0VETkVTREFZLAorICAvKiogVGh1cnNkYXkg
Ki8KKyAgVUNBTF9USFVSU0RBWSwKKyAgLyoqIEZyaWRheSAqLworICBVQ0FMX0ZSSURBWSwKKyAg
LyoqIFNhdHVyZGF5ICovCisgIFVDQUxfU0FUVVJEQVkKK307CisKKy8qKiBAc3RhYmxlIElDVSAy
LjAgKi8KK3R5cGVkZWYgZW51bSBVQ2FsZW5kYXJEYXlzT2ZXZWVrIFVDYWxlbmRhckRheXNPZldl
ZWs7CisKKy8qKiBQb3NzaWJsZSBtb250aHMgaW4gYSBVQ2FsZW5kYXIuIE5vdGU6IENhbGVuZGFy
IG1vbnRoIGlzIDAtYmFzZWQuCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworZW51bSBVQ2FsZW5k
YXJNb250aHMgeworICAvKiogSmFudWFyeSAqLworICBVQ0FMX0pBTlVBUlksCisgIC8qKiBGZWJy
dWFyeSAqLworICBVQ0FMX0ZFQlJVQVJZLAorICAvKiogTWFyY2ggKi8KKyAgVUNBTF9NQVJDSCwK
KyAgLyoqIEFwcmlsICovCisgIFVDQUxfQVBSSUwsCisgIC8qKiBNYXkgKi8KKyAgVUNBTF9NQVks
CisgIC8qKiBKdW5lICovCisgIFVDQUxfSlVORSwKKyAgLyoqIEp1bHkgKi8KKyAgVUNBTF9KVUxZ
LAorICAvKiogQXVndXN0ICovCisgIFVDQUxfQVVHVVNULAorICAvKiogU2VwdGVtYmVyICovCisg
IFVDQUxfU0VQVEVNQkVSLAorICAvKiogT2N0b2JlciAqLworICBVQ0FMX09DVE9CRVIsCisgIC8q
KiBOb3ZlbWJlciAqLworICBVQ0FMX05PVkVNQkVSLAorICAvKiogRGVjZW1iZXIgKi8KKyAgVUNB
TF9ERUNFTUJFUiwKKyAgLyoqIFZhbHVlIG9mIHRoZSA8Y29kZT5VQ0FMX01PTlRIPC9jb2RlPiBm
aWVsZCBpbmRpY2F0aW5nIHRoZQorICAgICogdGhpcnRlZW50aCBtb250aCBvZiB0aGUgeWVhci4g
QWx0aG91Z2ggdGhlIEdyZWdvcmlhbiBjYWxlbmRhcgorICAgICogZG9lcyBub3QgdXNlIHRoaXMg
dmFsdWUsIGx1bmFyIGNhbGVuZGFycyBkby4KKyAgICAqLworICBVQ0FMX1VOREVDSU1CRVIKK307
CisKKy8qKiBAc3RhYmxlIElDVSAyLjAgKi8KK3R5cGVkZWYgZW51bSBVQ2FsZW5kYXJNb250aHMg
VUNhbGVuZGFyTW9udGhzOworCisvKiogUG9zc2libGUgQU0vUE0gdmFsdWVzIGluIGEgVUNhbGVu
ZGFyIAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK2VudW0gVUNhbGVuZGFyQU1QTXMgeworICAg
IC8qKiBBTSAqLworICBVQ0FMX0FNLAorICAvKiogUE0gKi8KKyAgVUNBTF9QTQorfTsKKworLyoq
IEBzdGFibGUgSUNVIDIuMCAqLwordHlwZWRlZiBlbnVtIFVDYWxlbmRhckFNUE1zIFVDYWxlbmRh
ckFNUE1zOworCisvKioKKyAqIENyZWF0ZSBhbiBlbnVtZXJhdGlvbiBvdmVyIGFsbCB0aW1lIHpv
bmVzLgorICoKKyAqIEBwYXJhbSBlYyBpbnB1dC9vdXRwdXQgZXJyb3IgY29kZQorICoKKyAqIEBy
ZXR1cm4gYW4gZW51bWVyYXRpb24gb2JqZWN0IHRoYXQgdGhlIGNhbGxlciBtdXN0IGRpc3Bvc2Ug
b2YgdXNpbmcKKyAqIHVlbnVtX2Nsb3NlKCksIG9yIE5VTEwgdXBvbiBmYWlsdXJlLiBJbiBjYXNl
IG9mIGZhaWx1cmUgKmVjIHdpbGwKKyAqIGluZGljYXRlIHRoZSBlcnJvci4KKyAqCisgKiBAc3Rh
YmxlIElDVSAyLjYKKyAqLworVV9TVEFCTEUgVUVudW1lcmF0aW9uKiBVX0VYUE9SVDIKK3VjYWxf
b3BlblRpbWVab25lcyhVRXJyb3JDb2RlKiBlYyk7CisKKy8qKgorICogQ3JlYXRlIGFuIGVudW1l
cmF0aW9uIG92ZXIgYWxsIHRpbWUgem9uZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbgorICog
Y291bnRyeS4gU29tZSB6b25lcyBhcmUgYWZmaWxpYXRlZCB3aXRoIG5vIGNvdW50cnkgKGUuZy4s
ICJVVEMiKTsKKyAqIHRoZXNlIG1heSBhbHNvIGJlIHJldHJpZXZlZCwgYXMgYSBncm91cC4KKyAq
CisgKiBAcGFyYW0gY291bnRyeSB0aGUgSVNPIDMxNjYgdHdvLWxldHRlciBjb3VudHJ5IGNvZGUs
IG9yIE5VTEwgdG8KKyAqIHJldHJpZXZlIHpvbmVzIG5vdCBhZmZpbGlhdGVkIHdpdGggYW55IGNv
dW50cnkKKyAqCisgKiBAcGFyYW0gZWMgaW5wdXQvb3V0cHV0IGVycm9yIGNvZGUKKyAqCisgKiBA
cmV0dXJuIGFuIGVudW1lcmF0aW9uIG9iamVjdCB0aGF0IHRoZSBjYWxsZXIgbXVzdCBkaXNwb3Nl
IG9mIHVzaW5nCisgKiB1ZW51bV9jbG9zZSgpLCBvciBOVUxMIHVwb24gZmFpbHVyZS4gSW4gY2Fz
ZSBvZiBmYWlsdXJlICplYyB3aWxsCisgKiBpbmRpY2F0ZSB0aGUgZXJyb3IuCisgKgorICogQHN0
YWJsZSBJQ1UgMi42CisgKi8KK1VfU1RBQkxFIFVFbnVtZXJhdGlvbiogVV9FWFBPUlQyCit1Y2Fs
X29wZW5Db3VudHJ5VGltZVpvbmVzKGNvbnN0IGNoYXIqIGNvdW50cnksIFVFcnJvckNvZGUqIGVj
KTsKKworLyoqCisgKiBSZXR1cm4gdGhlIGRlZmF1bHQgdGltZSB6b25lLiBUaGUgZGVmYXVsdCBp
cyBkZXRlcm1pbmVkIGluaXRpYWxseQorICogYnkgcXVlcnlpbmcgdGhlIGhvc3Qgb3BlcmF0aW5n
IHN5c3RlbS4gSXQgbWF5IGJlIGNoYW5nZWQgd2l0aAorICogdWNhbF9zZXREZWZhdWx0VGltZVpv
bmUoKSBvciB3aXRoIHRoZSBDKysgVGltZVpvbmUgQVBJLgorICoKKyAqIEBwYXJhbSByZXN1bHQg
QSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgcmVzdWx0LCBvciBOVUxMCisgKgorICogQHBhcmFtIHJl
c3VsdENhcGFjaXR5IFRoZSBjYXBhY2l0eSBvZiB0aGUgcmVzdWx0IGJ1ZmZlcgorICoKKyAqIEBw
YXJhbSBlYyBpbnB1dC9vdXRwdXQgZXJyb3IgY29kZQorICoKKyAqIEByZXR1cm4gVGhlIHJlc3Vs
dCBzdHJpbmcgbGVuZ3RoLCBub3QgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZworICogbnVsbAor
ICoKKyAqIEBzdGFibGUgSUNVIDIuNgorICovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgor
dWNhbF9nZXREZWZhdWx0VGltZVpvbmUoVUNoYXIqIHJlc3VsdCwgaW50MzJfdCByZXN1bHRDYXBh
Y2l0eSwgVUVycm9yQ29kZSogZWMpOworCisvKioKKyAqIFNldCB0aGUgZGVmYXVsdCB0aW1lIHpv
bmUuCisgKgorICogQHBhcmFtIHpvbmVJRCBudWxsLXRlcm1pbmF0ZWQgdGltZSB6b25lIElECisg
KgorICogQHBhcmFtIGVjIGlucHV0L291dHB1dCBlcnJvciBjb2RlCisgKgorICogQHN0YWJsZSBJ
Q1UgMi42CisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyCit1Y2FsX3NldERlZmF1bHRUaW1l
Wm9uZShjb25zdCBVQ2hhciogem9uZUlELCBVRXJyb3JDb2RlKiBlYyk7CisKKy8qKgorICogUmV0
dXJuIHRoZSBhbW91bnQgb2YgdGltZSBpbiBtaWxsaXNlY29uZHMgdGhhdCB0aGUgY2xvY2sgaXMK
KyAqIGFkdmFuY2VkIGR1cmluZyBkYXlsaWdodCBzYXZpbmdzIHRpbWUgZm9yIHRoZSBnaXZlbiB0
aW1lIHpvbmUsIG9yCisgKiB6ZXJvIGlmIHRoZSB0aW1lIHpvbmUgZG9lcyBub3Qgb2JzZXJ2ZSBk
YXlsaWdodCBzYXZpbmdzIHRpbWUuCisgKgorICogQHBhcmFtIHpvbmVJRCBudWxsLXRlcm1pbmF0
ZWQgdGltZSB6b25lIElECisgKgorICogQHBhcmFtIGVjIGlucHV0L291dHB1dCBlcnJvciBjb2Rl
CisgKgorICogQHJldHVybiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGUgdGltZSBpcyBh
ZHZhbmNlZCB3aXRoCisgKiByZXNwZWN0IHRvIHN0YW5kYXJkIHRpbWUgd2hlbiB0aGUgZGF5bGln
aHQgc2F2aW5ncyBydWxlcyBhcmUgaW4KKyAqIGVmZmVjdC4gVGhpcyBpcyBhbHdheXMgYSBub24t
bmVnYXRpdmUgbnVtYmVyLCBtb3N0IGNvbW1vbmx5IGVpdGhlcgorICogMyw2MDAsMDAwIChvbmUg
aG91cikgb3IgemVyby4KKyAqCisgKiBAc3RhYmxlIElDVSAyLjYKKyAqLworVV9TVEFCTEUgaW50
MzJfdCBVX0VYUE9SVDIKK3VjYWxfZ2V0RFNUU2F2aW5ncyhjb25zdCBVQ2hhciogem9uZUlELCBV
RXJyb3JDb2RlKiBlYyk7CisKKy8qKgorICogR2V0IHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUu
CisgKiBUaGUgdmFsdWUgcmV0dXJuZWQgaXMgcmVwcmVzZW50ZWQgYXMgbWlsbGlzZWNvbmRzIGZy
b20gdGhlIGVwb2NoLgorICogQHJldHVybiBUaGUgY3VycmVudCBkYXRlIGFuZCB0aW1lLgorICog
QHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIFVEYXRlIFVfRVhQT1JUMiAKK3VjYWxfZ2V0
Tm93KHZvaWQpOworCisvKioKKyAqIE9wZW4gYSBVQ2FsZW5kYXIuCisgKiBBIFVDYWxlbmRhciBt
YXkgYmUgdXNlZCB0byBjb252ZXJ0IGEgbWlsbGlzZWNvbmQgdmFsdWUgdG8gYSB5ZWFyLAorICog
bW9udGgsIGFuZCBkYXkuCisgKiA8cD4KKyAqIE5vdGU6IFdoZW4gdW5rbm93biBUaW1lWm9uZSBJ
RCBpcyBzcGVjaWZpZWQsIHRoZSBVQ2FsZW5kYXIgcmV0dXJuZWQKKyAqIGJ5IHRoZSBmdW5jdGlv
biBpcyBpbml0aWFsaXplZCB3aXRoIEdNVCAoIkV0Yy9HTVQiKSB3aXRob3V0IGFueQorICogZXJy
b3JzL3dhcm5pbmdzLiAgSWYgeW91IHdhbnQgdG8gY2hlY2sgaWYgYSBUaW1lWm9uZSBJRCBpcyB2
YWxpZCwKKyAqIHVzZSB1Y2FsX2dldENhbm9uaWNhbFRpbWVab25lSUQgcHJpb3IgdG8gdGhpcyBm
dW5jdGlvbi4KKyAqIAorICogQHBhcmFtIHpvbmVJRCBUaGUgZGVzaXJlZCBUaW1lWm9uZSBJRC4g
IElmIDAsIHVzZSB0aGUgZGVmYXVsdCB0aW1lIHpvbmUuCisgKiBAcGFyYW0gbGVuIFRoZSBsZW5n
dGggb2Ygem9uZUlELCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisgKiBAcGFyYW0gbG9jYWxl
IFRoZSBkZXNpcmVkIGxvY2FsZQorICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgVUNhbGVuZGFy
IHRvIG9wZW4uIFRoaXMgY2FuIGJlIFVDQUxfR1JFR09SSUFOIHRvIG9wZW4gdGhlIEdyZWdvcmlh
bgorICogY2FsZW5kYXIgZm9yIHRoZSBsb2NhbGUsIG9yIFVDQUxfREVGQVVMVCB0byBvcGVuIHRo
ZSBkZWZhdWx0IGNhbGVuZGFyIGZvciB0aGUgbG9jYWxlICh0aGUKKyAqIGRlZmF1bHQgY2FsZW5k
YXIgbWF5IGFsc28gYmUgR3JlZ29yaWFuKS4gVG8gb3BlbiBhIHNwZWNpZmljIG5vbi1HcmVnb3Jp
YW4gY2FsZW5kYXIgZm9yIHRoZQorICogbG9jYWxlLCB1c2UgdWxvY19zZXRLZXl3b3JkVmFsdWUg
dG8gc2V0IHRoZSB2YWx1ZSBvZiB0aGUgY2FsZW5kYXIga2V5d29yZCBmb3IgdGhlIGxvY2FsZQor
ICogYW5kIHRoZW4gcGFzcyB0aGUgbG9jYWxlIHRvIHVjYWxfb3BlbiB3aXRoIFVDQUxfREVGQVVM
VCBhcyB0aGUgdHlwZS4KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNv
ZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisgKiBAcmV0dXJuIEEgcG9pbnRlciB0byBhIFVDYWxl
bmRhciwgb3IgMCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKyAqIEBzdGFibGUgSUNVIDIuMAorICov
CitVX1NUQUJMRSBVQ2FsZW5kYXIqIFVfRVhQT1JUMiAKK3VjYWxfb3Blbihjb25zdCBVQ2hhciog
ICB6b25lSUQsCisgICAgICAgICAgaW50MzJfdCAgICAgICAgbGVuLAorICAgICAgICAgIGNvbnN0
IGNoYXIqICAgIGxvY2FsZSwKKyAgICAgICAgICBVQ2FsZW5kYXJUeXBlICB0eXBlLAorICAgICAg
ICAgIFVFcnJvckNvZGUqICAgIHN0YXR1cyk7CisKKy8qKgorICogQ2xvc2UgYSBVQ2FsZW5kYXIu
CisgKiBPbmNlIGNsb3NlZCwgYSBVQ2FsZW5kYXIgbWF5IG5vIGxvbmdlciBiZSB1c2VkLgorICog
QHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIGNsb3NlLgorICogQHN0YWJsZSBJQ1UgMi4wCisg
Ki8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWNhbF9jbG9zZShVQ2FsZW5kYXIgKmNhbCk7
CisKKyNpZiBVX1NIT1dfQ1BMVVNQTFVTX0FQSQorCitVX05BTUVTUEFDRV9CRUdJTgorCisvKioK
KyAqIFxjbGFzcyBMb2NhbFVDYWxlbmRhclBvaW50ZXIKKyAqICJTbWFydCBwb2ludGVyIiBjbGFz
cywgY2xvc2VzIGEgVUNhbGVuZGFyIHZpYSB1Y2FsX2Nsb3NlKCkuCisgKiBGb3IgbW9zdCBtZXRo
b2RzIHNlZSB0aGUgTG9jYWxQb2ludGVyQmFzZSBiYXNlIGNsYXNzLgorICoKKyAqIEBzZWUgTG9j
YWxQb2ludGVyQmFzZQorICogQHNlZSBMb2NhbFBvaW50ZXIKKyAqIEBzdGFibGUgSUNVIDQuNAor
ICovCitVX0RFRklORV9MT0NBTF9PUEVOX1BPSU5URVIoTG9jYWxVQ2FsZW5kYXJQb2ludGVyLCBV
Q2FsZW5kYXIsIHVjYWxfY2xvc2UpOworCitVX05BTUVTUEFDRV9FTkQKKworI2VuZGlmCisKKy8q
KgorICogT3BlbiBhIGNvcHkgb2YgYSBVQ2FsZW5kYXIuCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZv
cm1zIGEgZGVlcCBjb3B5LgorICogQHBhcmFtIGNhbCBUaGUgY2FsZW5kYXIgdG8gY29weQorICog
QHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBl
cnJvcnMuCisgKiBAcmV0dXJuIEEgcG9pbnRlciB0byBhIFVDYWxlbmRhciBpZGVudGljYWwgdG8g
Y2FsLgorICogQHN0YWJsZSBJQ1UgNC4wCisgKi8KK1VfU1RBQkxFIFVDYWxlbmRhciogVV9FWFBP
UlQyIAordWNhbF9jbG9uZShjb25zdCBVQ2FsZW5kYXIqIGNhbCwKKyAgICAgICAgICAgVUVycm9y
Q29kZSogICAgICBzdGF0dXMpOworCisvKioKKyAqIFNldCB0aGUgVGltZVpvbmUgdXNlZCBieSBh
IFVDYWxlbmRhci4KKyAqIEEgVUNhbGVuZGFyIHVzZXMgYSB0aW1lem9uZSBmb3IgY29udmVydGlu
ZyBmcm9tIEdyZWVud2ljaCB0aW1lIHRvIGxvY2FsIHRpbWUuCisgKiBAcGFyYW0gY2FsIFRoZSBV
Q2FsZW5kYXIgdG8gc2V0LgorICogQHBhcmFtIHpvbmVJRCBUaGUgZGVzaXJlZCBUaW1lWm9uZSBJ
RC4gIElmIDAsIHVzZSB0aGUgZGVmYXVsdCB0aW1lIHpvbmUuCisgKiBAcGFyYW0gbGVuIFRoZSBs
ZW5ndGggb2Ygem9uZUlELCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisgKiBAcGFyYW0gc3Rh
dHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycy4KKyAq
IEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfc2V0
VGltZVpvbmUoVUNhbGVuZGFyKiAgICBjYWwsCisgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFy
KiAgem9uZUlELAorICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgIGxlbiwKKyAgICAgICAg
ICAgICAgICAgVUVycm9yQ29kZSogICBzdGF0dXMpOworCisvKioKKyAqIFBvc3NpYmxlIGZvcm1h
dHMgZm9yIGEgVUNhbGVuZGFyJ3MgZGlzcGxheSBuYW1lIAorICogQHN0YWJsZSBJQ1UgMi4wCisg
Ki8KK2VudW0gVUNhbGVuZGFyRGlzcGxheU5hbWVUeXBlIHsKKyAgLyoqIFN0YW5kYXJkIGRpc3Bs
YXkgbmFtZSAqLworICBVQ0FMX1NUQU5EQVJELAorICAvKiogU2hvcnQgc3RhbmRhcmQgZGlzcGxh
eSBuYW1lICovCisgIFVDQUxfU0hPUlRfU1RBTkRBUkQsCisgIC8qKiBEYXlsaWdodCBzYXZpbmdz
IGRpc3BsYXkgbmFtZSAqLworICBVQ0FMX0RTVCwKKyAgLyoqIFNob3J0IGRheWxpZ2h0IHNhdmlu
Z3MgZGlzcGxheSBuYW1lICovCisgIFVDQUxfU0hPUlRfRFNUCit9OworCisvKiogQHN0YWJsZSBJ
Q1UgMi4wICovCit0eXBlZGVmIGVudW0gVUNhbGVuZGFyRGlzcGxheU5hbWVUeXBlIFVDYWxlbmRh
ckRpc3BsYXlOYW1lVHlwZTsKKworLyoqCisgKiBHZXQgdGhlIGRpc3BsYXkgbmFtZSBmb3IgYSBV
Q2FsZW5kYXIncyBUaW1lWm9uZS4KKyAqIEEgZGlzcGxheSBuYW1lIGlzIHN1aXRhYmxlIGZvciBw
cmVzZW50YXRpb24gdG8gYSB1c2VyLgorICogQHBhcmFtIGNhbCAgICAgICAgICBUaGUgVUNhbGVu
ZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIHR5cGUgICAgICAgICBUaGUgZGVzaXJlZCBkaXNwbGF5
IG5hbWUgZm9ybWF0OyBvbmUgb2YgVUNBTF9TVEFOREFSRCwgVUNBTF9TSE9SVF9TVEFOREFSRCwK
KyAqICAgICAgICAgICAgICAgICAgICAgVUNBTF9EU1QsIFVDQUxfU0hPUlRfRFNUCisgKiBAcGFy
YW0gbG9jYWxlICAgICAgIFRoZSBkZXNpcmVkIGxvY2FsZSBmb3IgdGhlIGRpc3BsYXkgbmFtZS4K
KyAqIEBwYXJhbSByZXN1bHQgICAgICAgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUg
dGhlIGZvcm1hdHRlZCBudW1iZXIuCisgKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIFRoZSBtYXhpbXVt
IHNpemUgb2YgcmVzdWx0LgorICogQHBhcmFtIHN0YXR1cyAgICAgICBBIHBvaW50ZXIgdG8gYW4g
VUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyAqIEByZXR1cm4gICAgICAgICAgICAg
VGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0
aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1Vf
U1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordWNhbF9nZXRUaW1lWm9uZURpc3BsYXlOYW1lKGNv
bnN0IFVDYWxlbmRhciogICAgICAgICAgY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVDYWxlbmRhckRpc3BsYXlOYW1lVHlwZSAgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiAgICAgICAgICAgICAgIGxvY2FsZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBVQ2hhciogICAgICAgICAgICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICAgIHJlc3VsdExlbmd0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiAgICAgICAgICAgICAgIHN0
YXR1cyk7CisKKy8qKgorICogRGV0ZXJtaW5lIGlmIGEgVUNhbGVuZGFyIGlzIGN1cnJlbnRseSBp
biBkYXlsaWdodCBzYXZpbmdzIHRpbWUuCisgKiBEYXlsaWdodCBzYXZpbmdzIHRpbWUgaXMgbm90
IHVzZWQgaW4gYWxsIHBhcnRzIG9mIHRoZSB3b3JsZC4KKyAqIEBwYXJhbSBjYWwgVGhlIFVDYWxl
bmRhciB0byBxdWVyeS4KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNv
ZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisgKiBAcmV0dXJuIFRSVUUgaWYgY2FsIGlzIGN1cnJl
bnRseSBpbiBkYXlsaWdodCBzYXZpbmdzIHRpbWUsIEZBTFNFIG90aGVyd2lzZQorICogQHN0YWJs
ZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIFVCb29sIFVfRVhQT1JUMiAKK3VjYWxfaW5EYXlsaWdo
dFRpbWUoY29uc3QgVUNhbGVuZGFyKiAgY2FsLAorICAgICAgICAgICAgICAgICAgICBVRXJyb3JD
b2RlKiAgICAgICBzdGF0dXMgKTsKKworLyoqCisgKiBTZXRzIHRoZSBHcmVnb3JpYW5DYWxlbmRh
ciBjaGFuZ2UgZGF0ZS4gVGhpcyBpcyB0aGUgcG9pbnQgd2hlbiB0aGUgc3dpdGNoIGZyb20KKyAq
IEp1bGlhbiBkYXRlcyB0byBHcmVnb3JpYW4gZGF0ZXMgb2NjdXJyZWQuIERlZmF1bHQgaXMgMDA6
MDA6MDAgbG9jYWwgdGltZSwgT2N0b2JlcgorICogMTUsIDE1ODIuIFByZXZpb3VzIHRvIHRoaXMg
dGltZSBhbmQgZGF0ZSB3aWxsIGJlIEp1bGlhbiBkYXRlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9u
IHdvcmtzIG9ubHkgZm9yIEdyZWdvcmlhbiBjYWxlbmRhcnMuIElmIHRoZSBVQ2FsZW5kYXIgaXMg
bm90CisgKiBhbiBpbnN0YW5jZSBvZiBhIEdyZWdvcmlhbiBjYWxlbmRhciwgdGhlbiBhIFVfVU5T
VVBQT1JURURfRVJST1IKKyAqIGVycm9yIGNvZGUgaXMgc2V0LgorICoKKyAqIEBwYXJhbSBjYWwg
ICAgICAgIFRoZSBjYWxlbmRhciBvYmplY3QuCisgKiBAcGFyYW0gZGF0ZSAgICAgICBUaGUgZ2l2
ZW4gR3JlZ29yaWFuIGN1dG92ZXIgZGF0ZS4KKyAqIEBwYXJhbSBwRXJyb3JDb2RlIFBvaW50ZXIg
dG8gYSBzdGFuZGFyZCBJQ1UgZXJyb3IgY29kZS4gSXRzIGlucHV0IHZhbHVlIG11c3QKKyAqICAg
ICAgICAgICAgICAgICAgIHBhc3MgdGhlIFVfU1VDQ0VTUygpIHRlc3QsIG9yIGVsc2UgdGhlIGZ1
bmN0aW9uIHJldHVybnMKKyAqICAgICAgICAgICAgICAgICAgIGltbWVkaWF0ZWx5LiBDaGVjayBm
b3IgVV9GQUlMVVJFKCkgb24gb3V0cHV0IG9yIHVzZSB3aXRoCisgKiAgICAgICAgICAgICAgICAg
ICBmdW5jdGlvbiBjaGFpbmluZy4gKFNlZSBVc2VyIEd1aWRlIGZvciBkZXRhaWxzLikKKyAqCisg
KiBAc2VlIEdyZWdvcmlhbkNhbGVuZGFyOjpzZXRHcmVnb3JpYW5DaGFuZ2UKKyAqIEBzZWUgdWNh
bF9nZXRHcmVnb3JpYW5DaGFuZ2UKKyAqIEBzdGFibGUgSUNVIDMuNgorICovCitVX1NUQUJMRSB2
b2lkIFVfRVhQT1JUMgordWNhbF9zZXRHcmVnb3JpYW5DaGFuZ2UoVUNhbGVuZGFyICpjYWwsIFVE
YXRlIGRhdGUsIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOworCisvKioKKyAqIEdldHMgdGhlIEdy
ZWdvcmlhbiBDYWxlbmRhciBjaGFuZ2UgZGF0ZS4gVGhpcyBpcyB0aGUgcG9pbnQgd2hlbiB0aGUg
c3dpdGNoIGZyb20KKyAqIEp1bGlhbiBkYXRlcyB0byBHcmVnb3JpYW4gZGF0ZXMgb2NjdXJyZWQu
IERlZmF1bHQgaXMgMDA6MDA6MDAgbG9jYWwgdGltZSwgT2N0b2JlcgorICogMTUsIDE1ODIuIFBy
ZXZpb3VzIHRvIHRoaXMgdGltZSBhbmQgZGF0ZSB3aWxsIGJlIEp1bGlhbiBkYXRlcy4KKyAqCisg
KiBUaGlzIGZ1bmN0aW9uIHdvcmtzIG9ubHkgZm9yIEdyZWdvcmlhbiBjYWxlbmRhcnMuIElmIHRo
ZSBVQ2FsZW5kYXIgaXMgbm90CisgKiBhbiBpbnN0YW5jZSBvZiBhIEdyZWdvcmlhbiBjYWxlbmRh
ciwgdGhlbiBhIFVfVU5TVVBQT1JURURfRVJST1IKKyAqIGVycm9yIGNvZGUgaXMgc2V0LgorICoK
KyAqIEBwYXJhbSBjYWwgICAgICAgIFRoZSBjYWxlbmRhciBvYmplY3QuCisgKiBAcGFyYW0gcEVy
cm9yQ29kZSBQb2ludGVyIHRvIGEgc3RhbmRhcmQgSUNVIGVycm9yIGNvZGUuIEl0cyBpbnB1dCB2
YWx1ZSBtdXN0CisgKiAgICAgICAgICAgICAgICAgICBwYXNzIHRoZSBVX1NVQ0NFU1MoKSB0ZXN0
LCBvciBlbHNlIHRoZSBmdW5jdGlvbiByZXR1cm5zCisgKiAgICAgICAgICAgICAgICAgICBpbW1l
ZGlhdGVseS4gQ2hlY2sgZm9yIFVfRkFJTFVSRSgpIG9uIG91dHB1dCBvciB1c2Ugd2l0aAorICog
ICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY2hhaW5pbmcuIChTZWUgVXNlciBHdWlkZSBmb3Ig
ZGV0YWlscy4pCisgKiBAcmV0dXJuICAgVGhlIEdyZWdvcmlhbiBjdXRvdmVyIHRpbWUgZm9yIHRo
aXMgY2FsZW5kYXIuCisgKgorICogQHNlZSBHcmVnb3JpYW5DYWxlbmRhcjo6Z2V0R3JlZ29yaWFu
Q2hhbmdlCisgKiBAc2VlIHVjYWxfc2V0R3JlZ29yaWFuQ2hhbmdlCisgKiBAc3RhYmxlIElDVSAz
LjYKKyAqLworVV9TVEFCTEUgVURhdGUgVV9FWFBPUlQyCit1Y2FsX2dldEdyZWdvcmlhbkNoYW5n
ZShjb25zdCBVQ2FsZW5kYXIgKmNhbCwgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7CisKKy8qKgor
ICogVHlwZXMgb2YgVUNhbGVuZGFyIGF0dHJpYnV0ZXMgCisgKiBAc3RhYmxlIElDVSAyLjAKKyAq
LworZW51bSBVQ2FsZW5kYXJBdHRyaWJ1dGUgeworICAgIC8qKiBMZW5pZW50IHBhcnNpbmcgKi8K
KyAgVUNBTF9MRU5JRU5ULAorICAvKiogRmlyc3QgZGF5IG9mIHdlZWsgKi8KKyAgVUNBTF9GSVJT
VF9EQVlfT0ZfV0VFSywKKyAgLyoqIE1pbmltdW0gbnVtYmVyIG9mIGRheXMgaW4gZmlyc3Qgd2Vl
ayAqLworICBVQ0FMX01JTklNQUxfREFZU19JTl9GSVJTVF9XRUVLCit9OworCisvKiogQHN0YWJs
ZSBJQ1UgMi4wICovCit0eXBlZGVmIGVudW0gVUNhbGVuZGFyQXR0cmlidXRlIFVDYWxlbmRhckF0
dHJpYnV0ZTsKKworLyoqCisgKiBHZXQgYSBudW1lcmljIGF0dHJpYnV0ZSBhc3NvY2lhdGVkIHdp
dGggYSBVQ2FsZW5kYXIuCisgKiBOdW1lcmljIGF0dHJpYnV0ZXMgaW5jbHVkZSB0aGUgZmlyc3Qg
ZGF5IG9mIHRoZSB3ZWVrLCBvciB0aGUgbWluaW1hbCBudW1iZXJzCisgKiBvZiBkYXlzIGluIHRo
ZSBmaXJzdCB3ZWVrIG9mIHRoZSBtb250aC4KKyAqIEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0
byBxdWVyeS4KKyAqIEBwYXJhbSBhdHRyIFRoZSBkZXNpcmVkIGF0dHJpYnV0ZTsgb25lIG9mIFVD
QUxfTEVOSUVOVCwgVUNBTF9GSVJTVF9EQVlfT0ZfV0VFSywKKyAqIG9yIFVDQUxfTUlOSU1BTF9E
QVlTX0lOX0ZJUlNUX1dFRUsKKyAqIEByZXR1cm4gVGhlIHZhbHVlIG9mIGF0dHIuCisgKiBAc2Vl
IHVjYWxfc2V0QXR0cmlidXRlCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgaW50
MzJfdCBVX0VYUE9SVDIgCit1Y2FsX2dldEF0dHJpYnV0ZShjb25zdCBVQ2FsZW5kYXIqICAgIGNh
bCwKKyAgICAgICAgICAgICAgICAgIFVDYWxlbmRhckF0dHJpYnV0ZSAgYXR0cik7CisKKy8qKgor
ICogU2V0IGEgbnVtZXJpYyBhdHRyaWJ1dGUgYXNzb2NpYXRlZCB3aXRoIGEgVUNhbGVuZGFyLgor
ICogTnVtZXJpYyBhdHRyaWJ1dGVzIGluY2x1ZGUgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlaywg
b3IgdGhlIG1pbmltYWwgbnVtYmVycworICogb2YgZGF5cyBpbiB0aGUgZmlyc3Qgd2VlayBvZiB0
aGUgbW9udGguCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gc2V0LgorICogQHBhcmFt
IGF0dHIgVGhlIGRlc2lyZWQgYXR0cmlidXRlOyBvbmUgb2YgVUNBTF9MRU5JRU5ULCBVQ0FMX0ZJ
UlNUX0RBWV9PRl9XRUVLLAorICogb3IgVUNBTF9NSU5JTUFMX0RBWVNfSU5fRklSU1RfV0VFSwor
ICogQHBhcmFtIG5ld1ZhbHVlIFRoZSBuZXcgdmFsdWUgb2YgYXR0ci4KKyAqIEBzZWUgdWNhbF9n
ZXRBdHRyaWJ1dGUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQ
T1JUMiAKK3VjYWxfc2V0QXR0cmlidXRlKFVDYWxlbmRhciogICAgICAgICAgY2FsLAorICAgICAg
ICAgICAgICAgICAgVUNhbGVuZGFyQXR0cmlidXRlICBhdHRyLAorICAgICAgICAgICAgICAgICAg
aW50MzJfdCAgICAgICAgICAgICBuZXdWYWx1ZSk7CisKKy8qKgorICogR2V0IGEgbG9jYWxlIGZv
ciB3aGljaCBjYWxlbmRhcnMgYXJlIGF2YWlsYWJsZS4KKyAqIEEgVUNhbGVuZGFyIGluIGEgbG9j
YWxlIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gd2lsbCBjb250YWluIHRoZSBjb3JyZWN0Cisg
KiBkYXkgYW5kIG1vbnRoIG5hbWVzIGZvciB0aGUgbG9jYWxlLgorICogQHBhcmFtIGxvY2FsZUlu
ZGV4IFRoZSBpbmRleCBvZiB0aGUgZGVzaXJlZCBsb2NhbGUuCisgKiBAcmV0dXJuIEEgbG9jYWxl
IGZvciB3aGljaCBjYWxlbmRhcnMgYXJlIGF2YWlsYWJsZSwgb3IgMCBpZiBub25lLgorICogQHNl
ZSB1Y2FsX2NvdW50QXZhaWxhYmxlCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUg
Y29uc3QgY2hhciogVV9FWFBPUlQyIAordWNhbF9nZXRBdmFpbGFibGUoaW50MzJfdCBsb2NhbGVJ
bmRleCk7CisKKy8qKgorICogRGV0ZXJtaW5lIGhvdyBtYW55IGxvY2FsZXMgaGF2ZSBjYWxlbmRh
cnMgYXZhaWxhYmxlLgorICogVGhpcyBmdW5jdGlvbiBpcyBtb3N0IHVzZWZ1bCBhcyBkZXRlcm1p
bmluZyB0aGUgbG9vcCBlbmRpbmcgY29uZGl0aW9uIGZvcgorICogY2FsbHMgdG8gXHJlZiB1Y2Fs
X2dldEF2YWlsYWJsZS4KKyAqIEByZXR1cm4gVGhlIG51bWJlciBvZiBsb2NhbGVzIGZvciB3aGlj
aCBjYWxlbmRhcnMgYXJlIGF2YWlsYWJsZS4KKyAqIEBzZWUgdWNhbF9nZXRBdmFpbGFibGUKKyAq
IEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VjYWxf
Y291bnRBdmFpbGFibGUodm9pZCk7CisKKy8qKgorICogR2V0IGEgVUNhbGVuZGFyJ3MgY3VycmVu
dCB0aW1lIGluIG1pbGxpcy4KKyAqIFRoZSB0aW1lIGlzIHJlcHJlc2VudGVkIGFzIG1pbGxpc2Vj
b25kcyBmcm9tIHRoZSBlcG9jaC4KKyAqIEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBxdWVy
eS4KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2
ZSBhbnkgZXJyb3JzCisgKiBAcmV0dXJuIFRoZSBjYWxlbmRhcidzIGN1cnJlbnQgdGltZSBpbiBt
aWxsaXMuCisgKiBAc2VlIHVjYWxfc2V0TWlsbGlzCisgKiBAc2VlIHVjYWxfc2V0RGF0ZQorICog
QHNlZSB1Y2FsX3NldERhdGVUaW1lCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUg
VURhdGUgVV9FWFBPUlQyIAordWNhbF9nZXRNaWxsaXMoY29uc3QgVUNhbGVuZGFyKiAgY2FsLAor
ICAgICAgICAgICAgICAgVUVycm9yQ29kZSogICAgICAgc3RhdHVzKTsKKworLyoqCisgKiBTZXQg
YSBVQ2FsZW5kYXIncyBjdXJyZW50IHRpbWUgaW4gbWlsbGlzLgorICogVGhlIHRpbWUgaXMgcmVw
cmVzZW50ZWQgYXMgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGVwb2NoLgorICogQHBhcmFtIGNhbCBU
aGUgVUNhbGVuZGFyIHRvIHNldC4KKyAqIEBwYXJhbSBkYXRlVGltZSBUaGUgZGVzaXJlZCBkYXRl
IGFuZCB0aW1lLgorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0
byByZWNlaXZlIGFueSBlcnJvcnMKKyAqIEBzZWUgdWNhbF9nZXRNaWxsaXMKKyAqIEBzZWUgdWNh
bF9zZXREYXRlCisgKiBAc2VlIHVjYWxfc2V0RGF0ZVRpbWUKKyAqIEBzdGFibGUgSUNVIDIuMAor
ICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfc2V0TWlsbGlzKFVDYWxlbmRhciog
ICBjYWwsCisgICAgICAgICAgICAgICBVRGF0ZSAgICAgICAgZGF0ZVRpbWUsCisgICAgICAgICAg
ICAgICBVRXJyb3JDb2RlKiAgc3RhdHVzICk7CisKKy8qKgorICogU2V0IGEgVUNhbGVuZGFyJ3Mg
Y3VycmVudCBkYXRlLgorICogVGhlIGRhdGUgaXMgcmVwcmVzZW50ZWQgYXMgYSBzZXJpZXMgb2Yg
MzItYml0IGludGVnZXJzLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHNldC4KKyAq
IEBwYXJhbSB5ZWFyIFRoZSBkZXNpcmVkIHllYXIuCisgKiBAcGFyYW0gbW9udGggVGhlIGRlc2ly
ZWQgbW9udGg7IG9uZSBvZiBVQ0FMX0pBTlVBUlksIFVDQUxfRkVCUlVBUlksIFVDQUxfTUFSQ0gs
IFVDQUxfQVBSSUwsIFVDQUxfTUFZLAorICogVUNBTF9KVU5FLCBVQ0FMX0pVTFksIFVDQUxfQVVH
VVNULCBVQ0FMX1NFUFRFTUJFUiwgVUNBTF9PQ1RPQkVSLCBVQ0FMX05PVkVNQkVSLCBVQ0FMX0RF
Q0VNQkVSLCBVQ0FMX1VOREVDSU1CRVIKKyAqIEBwYXJhbSBkYXRlIFRoZSBkZXNpcmVkIGRheSBv
ZiB0aGUgbW9udGguCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2Rl
IHRvIHJlY2VpdmUgYW55IGVycm9ycworICogQHNlZSB1Y2FsX2dldE1pbGxpcworICogQHNlZSB1
Y2FsX3NldE1pbGxpcworICogQHNlZSB1Y2FsX3NldERhdGVUaW1lCisgKiBAc3RhYmxlIElDVSAy
LjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1Y2FsX3NldERhdGUoVUNhbGVuZGFy
KiAgIGNhbCwKKyAgICAgICAgICAgICBpbnQzMl90ICAgICAgeWVhciwKKyAgICAgICAgICAgICBp
bnQzMl90ICAgICAgbW9udGgsCisgICAgICAgICAgICAgaW50MzJfdCAgICAgIGRhdGUsCisgICAg
ICAgICAgICAgVUVycm9yQ29kZSogIHN0YXR1cyk7CisKKy8qKgorICogU2V0IGEgVUNhbGVuZGFy
J3MgY3VycmVudCBkYXRlLgorICogVGhlIGRhdGUgaXMgcmVwcmVzZW50ZWQgYXMgYSBzZXJpZXMg
b2YgMzItYml0IGludGVnZXJzLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHNldC4K
KyAqIEBwYXJhbSB5ZWFyIFRoZSBkZXNpcmVkIHllYXIuCisgKiBAcGFyYW0gbW9udGggVGhlIGRl
c2lyZWQgbW9udGg7IG9uZSBvZiBVQ0FMX0pBTlVBUlksIFVDQUxfRkVCUlVBUlksIFVDQUxfTUFS
Q0gsIFVDQUxfQVBSSUwsIFVDQUxfTUFZLAorICogVUNBTF9KVU5FLCBVQ0FMX0pVTFksIFVDQUxf
QVVHVVNULCBVQ0FMX1NFUFRFTUJFUiwgVUNBTF9PQ1RPQkVSLCBVQ0FMX05PVkVNQkVSLCBVQ0FM
X0RFQ0VNQkVSLCBVQ0FMX1VOREVDSU1CRVIKKyAqIEBwYXJhbSBkYXRlIFRoZSBkZXNpcmVkIGRh
eSBvZiB0aGUgbW9udGguCisgKiBAcGFyYW0gaG91ciBUaGUgZGVzaXJlZCBob3VyIG9mIGRheS4K
KyAqIEBwYXJhbSBtaW51dGUgVGhlIGRlc2lyZWQgbWludXRlLgorICogQHBhcmFtIHNlY29uZCBU
aGUgZGVzaXJlYyBzZWNvbmQuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJy
b3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworICogQHNlZSB1Y2FsX2dldE1pbGxpcworICog
QHNlZSB1Y2FsX3NldE1pbGxpcworICogQHNlZSB1Y2FsX3NldERhdGUKKyAqIEBzdGFibGUgSUNV
IDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfc2V0RGF0ZVRpbWUoVUNh
bGVuZGFyKiAgIGNhbCwKKyAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgIHllYXIsCisgICAg
ICAgICAgICAgICAgIGludDMyX3QgICAgICBtb250aCwKKyAgICAgICAgICAgICAgICAgaW50MzJf
dCAgICAgIGRhdGUsCisgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICBob3VyLAorICAgICAg
ICAgICAgICAgICBpbnQzMl90ICAgICAgbWludXRlLAorICAgICAgICAgICAgICAgICBpbnQzMl90
ICAgICAgc2Vjb25kLAorICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiAgc3RhdHVzKTsKKwor
LyoqCisgKiBSZXR1cm5zIFRSVUUgaWYgdHdvIFVDYWxlbmRhcnMgYXJlIGVxdWl2YWxlbnQuICBF
cXVpdmFsZW50CisgKiBVQ2FsZW5kYXJzIHdpbGwgYmVoYXZlIGlkZW50aWNhbGx5LCBidXQgdGhl
eSBtYXkgYmUgc2V0IHRvCisgKiBkaWZmZXJlbnQgdGltZXMuCisgKiBAcGFyYW0gY2FsMSBUaGUg
Zmlyc3Qgb2YgdGhlIFVDYWxlbmRhcnMgdG8gY29tcGFyZS4KKyAqIEBwYXJhbSBjYWwyIFRoZSBz
ZWNvbmQgb2YgdGhlIFVDYWxlbmRhcnMgdG8gY29tcGFyZS4KKyAqIEByZXR1cm4gVFJVRSBpZiBj
YWwxIGFuZCBjYWwyIGFyZSBlcXVpdmFsZW50LCBGQUxTRSBvdGhlcndpc2UuCisgKiBAc3RhYmxl
IElDVSAyLjAKKyAqLworVV9TVEFCTEUgVUJvb2wgVV9FWFBPUlQyIAordWNhbF9lcXVpdmFsZW50
VG8oY29uc3QgVUNhbGVuZGFyKiAgY2FsMSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IFVDYWxl
bmRhciogIGNhbDIpOworCisvKioKKyAqIEFkZCBhIHNwZWNpZmllZCBzaWduZWQgYW1vdW50IHRv
IGEgcGFydGljdWxhciBmaWVsZCBpbiBhIFVDYWxlbmRhci4KKyAqIFRoaXMgY2FuIG1vZGlmeSBt
b3JlIHNpZ25pZmljYW50IGZpZWxkcyBpbiB0aGUgY2FsZW5kYXIuCisgKiBAcGFyYW0gY2FsIFRo
ZSBVQ2FsZW5kYXIgdG8gd2hpY2ggdG8gYWRkLgorICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZCB0
byB3aGljaCB0byBhZGQgdGhlIHNpZ25lZCB2YWx1ZTsgb25lIG9mIFVDQUxfRVJBLCBVQ0FMX1lF
QVIsIFVDQUxfTU9OVEgsCisgKiBVQ0FMX1dFRUtfT0ZfWUVBUiwgVUNBTF9XRUVLX09GX01PTlRI
LCBVQ0FMX0RBVEUsIFVDQUxfREFZX09GX1lFQVIsIFVDQUxfREFZX09GX1dFRUssCisgKiBVQ0FM
X0RBWV9PRl9XRUVLX0lOX01PTlRILCBVQ0FMX0FNX1BNLCBVQ0FMX0hPVVIsIFVDQUxfSE9VUl9P
Rl9EQVksIFVDQUxfTUlOVVRFLCBVQ0FMX1NFQ09ORCwKKyAqIFVDQUxfTUlMTElTRUNPTkQsIFVD
QUxfWk9ORV9PRkZTRVQsIFVDQUxfRFNUX09GRlNFVC4KKyAqIEBwYXJhbSBhbW91bnQgVGhlIHNp
Z25lZCBhbW91bnQgdG8gYWRkIHRvIGZpZWxkLiBJZiB0aGUgYW1vdW50IGNhdXNlcyB0aGUgdmFs
dWUKKyAqIHRvIGV4Y2VlZCB0byBtYXhpbXVtIG9yIG1pbmltdW0gdmFsdWVzIGZvciB0aGF0IGZp
ZWxkLCBvdGhlciBmaWVsZHMgYXJlIG1vZGlmaWVkCisgKiB0byBwcmVzZXJ2ZSB0aGUgbWFnbml0
dWRlIG9mIHRoZSBjaGFuZ2UuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJy
b3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworICogQHNlZSB1Y2FsX3JvbGwKKyAqIEBzdGFi
bGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfYWRkKFVDYWxl
bmRhciogICAgICAgICAgIGNhbCwKKyAgICAgICAgIFVDYWxlbmRhckRhdGVGaWVsZHMgIGZpZWxk
LAorICAgICAgICAgaW50MzJfdCAgICAgICAgICAgICAgYW1vdW50LAorICAgICAgICAgVUVycm9y
Q29kZSogICAgICAgICAgc3RhdHVzKTsKKworLyoqCisgKiBBZGQgYSBzcGVjaWZpZWQgc2lnbmVk
IGFtb3VudCB0byBhIHBhcnRpY3VsYXIgZmllbGQgaW4gYSBVQ2FsZW5kYXIuCisgKiBUaGlzIHdp
bGwgbm90IG1vZGlmeSBtb3JlIHNpZ25pZmljYW50IGZpZWxkcyBpbiB0aGUgY2FsZW5kYXIuCisg
KiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gd2hpY2ggdG8gYWRkLgorICogQHBhcmFtIGZp
ZWxkIFRoZSBmaWVsZCB0byB3aGljaCB0byBhZGQgdGhlIHNpZ25lZCB2YWx1ZTsgb25lIG9mIFVD
QUxfRVJBLCBVQ0FMX1lFQVIsIFVDQUxfTU9OVEgsCisgKiBVQ0FMX1dFRUtfT0ZfWUVBUiwgVUNB
TF9XRUVLX09GX01PTlRILCBVQ0FMX0RBVEUsIFVDQUxfREFZX09GX1lFQVIsIFVDQUxfREFZX09G
X1dFRUssCisgKiBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRILCBVQ0FMX0FNX1BNLCBVQ0FMX0hP
VVIsIFVDQUxfSE9VUl9PRl9EQVksIFVDQUxfTUlOVVRFLCBVQ0FMX1NFQ09ORCwKKyAqIFVDQUxf
TUlMTElTRUNPTkQsIFVDQUxfWk9ORV9PRkZTRVQsIFVDQUxfRFNUX09GRlNFVC4KKyAqIEBwYXJh
bSBhbW91bnQgVGhlIHNpZ25lZCBhbW91bnQgdG8gYWRkIHRvIGZpZWxkLiBJZiB0aGUgYW1vdW50
IGNhdXNlcyB0aGUgdmFsdWUKKyAqIHRvIGV4Y2VlZCB0byBtYXhpbXVtIG9yIG1pbmltdW0gdmFs
dWVzIGZvciB0aGF0IGZpZWxkLCB0aGUgZmllbGQgaXMgcGlubmVkIHRvIGEgcGVybWlzc2libGUK
KyAqIHZhbHVlLgorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0
byByZWNlaXZlIGFueSBlcnJvcnMKKyAqIEBzZWUgdWNhbF9hZGQKKyAqIEBzdGFibGUgSUNVIDIu
MAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfcm9sbChVQ2FsZW5kYXIqICAg
ICAgICAgICBjYWwsCisgICAgICAgICAgVUNhbGVuZGFyRGF0ZUZpZWxkcyAgZmllbGQsCisgICAg
ICAgICAgaW50MzJfdCAgICAgICAgICAgICAgYW1vdW50LAorICAgICAgICAgIFVFcnJvckNvZGUq
ICAgICAgICAgIHN0YXR1cyk7CisKKy8qKgorICogR2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIGEg
ZmllbGQgZnJvbSBhIFVDYWxlbmRhci4KKyAqIEFsbCBmaWVsZHMgYXJlIHJlcHJlc2VudGVkIGFz
IDMyLWJpdCBpbnRlZ2Vycy4KKyAqIEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBxdWVyeS4K
KyAqIEBwYXJhbSBmaWVsZCBUaGUgZGVzaXJlZCBmaWVsZDsgb25lIG9mIFVDQUxfRVJBLCBVQ0FM
X1lFQVIsIFVDQUxfTU9OVEgsCisgKiBVQ0FMX1dFRUtfT0ZfWUVBUiwgVUNBTF9XRUVLX09GX01P
TlRILCBVQ0FMX0RBVEUsIFVDQUxfREFZX09GX1lFQVIsIFVDQUxfREFZX09GX1dFRUssCisgKiBV
Q0FMX0RBWV9PRl9XRUVLX0lOX01PTlRILCBVQ0FMX0FNX1BNLCBVQ0FMX0hPVVIsIFVDQUxfSE9V
Ul9PRl9EQVksIFVDQUxfTUlOVVRFLCBVQ0FMX1NFQ09ORCwKKyAqIFVDQUxfTUlMTElTRUNPTkQs
IFVDQUxfWk9ORV9PRkZTRVQsIFVDQUxfRFNUX09GRlNFVC4KKyAqIEBwYXJhbSBzdGF0dXMgQSBw
b2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisgKiBAcmV0dXJu
IFRoZSB2YWx1ZSBvZiB0aGUgZGVzaXJlZCBmaWVsZC4KKyAqIEBzZWUgdWNhbF9zZXQKKyAqIEBz
ZWUgdWNhbF9pc1NldAorICogQHNlZSB1Y2FsX2NsZWFyRmllbGQKKyAqIEBzZWUgdWNhbF9jbGVh
cgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAor
dWNhbF9nZXQoY29uc3QgVUNhbGVuZGFyKiAgICAgY2FsLAorICAgICAgICAgVUNhbGVuZGFyRGF0
ZUZpZWxkcyAgZmllbGQsCisgICAgICAgICBVRXJyb3JDb2RlKiAgICAgICAgICBzdGF0dXMgKTsK
KworLyoqCisgKiBTZXQgdGhlIHZhbHVlIG9mIGEgZmllbGQgaW4gYSBVQ2FsZW5kYXIuCisgKiBB
bGwgZmllbGRzIGFyZSByZXByZXNlbnRlZCBhcyAzMi1iaXQgaW50ZWdlcnMuCisgKiBAcGFyYW0g
Y2FsIFRoZSBVQ2FsZW5kYXIgdG8gc2V0LgorICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZCB0byBz
ZXQ7IG9uZSBvZiBVQ0FMX0VSQSwgVUNBTF9ZRUFSLCBVQ0FMX01PTlRILAorICogVUNBTF9XRUVL
X09GX1lFQVIsIFVDQUxfV0VFS19PRl9NT05USCwgVUNBTF9EQVRFLCBVQ0FMX0RBWV9PRl9ZRUFS
LCBVQ0FMX0RBWV9PRl9XRUVLLAorICogVUNBTF9EQVlfT0ZfV0VFS19JTl9NT05USCwgVUNBTF9B
TV9QTSwgVUNBTF9IT1VSLCBVQ0FMX0hPVVJfT0ZfREFZLCBVQ0FMX01JTlVURSwgVUNBTF9TRUNP
TkQsCisgKiBVQ0FMX01JTExJU0VDT05ELCBVQ0FMX1pPTkVfT0ZGU0VULCBVQ0FMX0RTVF9PRkZT
RVQuCisgKiBAcGFyYW0gdmFsdWUgVGhlIGRlc2lyZWQgdmFsdWUgb2YgZmllbGQuCisgKiBAc2Vl
IHVjYWxfZ2V0CisgKiBAc2VlIHVjYWxfaXNTZXQKKyAqIEBzZWUgdWNhbF9jbGVhckZpZWxkCisg
KiBAc2VlIHVjYWxfY2xlYXIKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lk
IFVfRVhQT1JUMiAKK3VjYWxfc2V0KFVDYWxlbmRhciogICAgICAgICAgIGNhbCwKKyAgICAgICAg
IFVDYWxlbmRhckRhdGVGaWVsZHMgIGZpZWxkLAorICAgICAgICAgaW50MzJfdCAgICAgICAgICAg
ICAgdmFsdWUpOworCisvKioKKyAqIERldGVybWluZSBpZiBhIGZpZWxkIGluIGEgVUNhbGVuZGFy
IGlzIHNldC4KKyAqIEFsbCBmaWVsZHMgYXJlIHJlcHJlc2VudGVkIGFzIDMyLWJpdCBpbnRlZ2Vy
cy4KKyAqIEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBxdWVyeS4KKyAqIEBwYXJhbSBmaWVs
ZCBUaGUgZGVzaXJlZCBmaWVsZDsgb25lIG9mIFVDQUxfRVJBLCBVQ0FMX1lFQVIsIFVDQUxfTU9O
VEgsCisgKiBVQ0FMX1dFRUtfT0ZfWUVBUiwgVUNBTF9XRUVLX09GX01PTlRILCBVQ0FMX0RBVEUs
IFVDQUxfREFZX09GX1lFQVIsIFVDQUxfREFZX09GX1dFRUssCisgKiBVQ0FMX0RBWV9PRl9XRUVL
X0lOX01PTlRILCBVQ0FMX0FNX1BNLCBVQ0FMX0hPVVIsIFVDQUxfSE9VUl9PRl9EQVksIFVDQUxf
TUlOVVRFLCBVQ0FMX1NFQ09ORCwKKyAqIFVDQUxfTUlMTElTRUNPTkQsIFVDQUxfWk9ORV9PRkZT
RVQsIFVDQUxfRFNUX09GRlNFVC4KKyAqIEByZXR1cm4gVFJVRSBpZiBmaWVsZCBpcyBzZXQsIEZB
TFNFIG90aGVyd2lzZS4KKyAqIEBzZWUgdWNhbF9nZXQKKyAqIEBzZWUgdWNhbF9zZXQKKyAqIEBz
ZWUgdWNhbF9jbGVhckZpZWxkCisgKiBAc2VlIHVjYWxfY2xlYXIKKyAqIEBzdGFibGUgSUNVIDIu
MAorICovCitVX1NUQUJMRSBVQm9vbCBVX0VYUE9SVDIgCit1Y2FsX2lzU2V0KGNvbnN0IFVDYWxl
bmRhciogICAgIGNhbCwKKyAgICAgICAgICAgVUNhbGVuZGFyRGF0ZUZpZWxkcyAgZmllbGQpOwor
CisvKioKKyAqIENsZWFyIGEgZmllbGQgaW4gYSBVQ2FsZW5kYXIuCisgKiBBbGwgZmllbGRzIGFy
ZSByZXByZXNlbnRlZCBhcyAzMi1iaXQgaW50ZWdlcnMuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2Fs
ZW5kYXIgY29udGFpbmluZyB0aGUgZmllbGQgdG8gY2xlYXIuCisgKiBAcGFyYW0gZmllbGQgVGhl
IGZpZWxkIHRvIGNsZWFyOyBvbmUgb2YgVUNBTF9FUkEsIFVDQUxfWUVBUiwgVUNBTF9NT05USCwK
KyAqIFVDQUxfV0VFS19PRl9ZRUFSLCBVQ0FMX1dFRUtfT0ZfTU9OVEgsIFVDQUxfREFURSwgVUNB
TF9EQVlfT0ZfWUVBUiwgVUNBTF9EQVlfT0ZfV0VFSywKKyAqIFVDQUxfREFZX09GX1dFRUtfSU5f
TU9OVEgsIFVDQUxfQU1fUE0sIFVDQUxfSE9VUiwgVUNBTF9IT1VSX09GX0RBWSwgVUNBTF9NSU5V
VEUsIFVDQUxfU0VDT05ELAorICogVUNBTF9NSUxMSVNFQ09ORCwgVUNBTF9aT05FX09GRlNFVCwg
VUNBTF9EU1RfT0ZGU0VULgorICogQHNlZSB1Y2FsX2dldAorICogQHNlZSB1Y2FsX3NldAorICog
QHNlZSB1Y2FsX2lzU2V0CisgKiBAc2VlIHVjYWxfY2xlYXIKKyAqIEBzdGFibGUgSUNVIDIuMAor
ICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfY2xlYXJGaWVsZChVQ2FsZW5kYXIq
ICAgICAgICAgICBjYWwsCisgICAgICAgICAgICAgICAgVUNhbGVuZGFyRGF0ZUZpZWxkcyAgZmll
bGQpOworCisvKioKKyAqIENsZWFyIGFsbCBmaWVsZHMgaW4gYSBVQ2FsZW5kYXIuCisgKiBBbGwg
ZmllbGRzIGFyZSByZXByZXNlbnRlZCBhcyAzMi1iaXQgaW50ZWdlcnMuCisgKiBAcGFyYW0gY2Fs
ZW5kYXIgVGhlIFVDYWxlbmRhciB0byBjbGVhci4KKyAqIEBzZWUgdWNhbF9nZXQKKyAqIEBzZWUg
dWNhbF9zZXQKKyAqIEBzZWUgdWNhbF9pc1NldAorICogQHNlZSB1Y2FsX2NsZWFyRmllbGQKKyAq
IEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfY2xl
YXIoVUNhbGVuZGFyKiBjYWxlbmRhcik7CisKKy8qKgorICogUG9zc2libGUgbGltaXQgdmFsdWVz
IGZvciBhIFVDYWxlbmRhciAKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitlbnVtIFVDYWxlbmRh
ckxpbWl0VHlwZSB7CisgIC8qKiBNaW5pbXVtIHZhbHVlICovCisgIFVDQUxfTUlOSU1VTSwKKyAg
LyoqIE1heGltdW0gdmFsdWUgKi8KKyAgVUNBTF9NQVhJTVVNLAorICAvKiogR3JlYXRlc3QgbWlu
aW11bSB2YWx1ZSAqLworICBVQ0FMX0dSRUFURVNUX01JTklNVU0sCisgIC8qKiBMZWFlc3QgbWF4
aW11bSB2YWx1ZSAqLworICBVQ0FMX0xFQVNUX01BWElNVU0sCisgIC8qKiBBY3R1YWwgbWluaW11
bSB2YWx1ZSAqLworICBVQ0FMX0FDVFVBTF9NSU5JTVVNLAorICAvKiogQWN0dWFsIG1heGltdW0g
dmFsdWUgKi8KKyAgVUNBTF9BQ1RVQUxfTUFYSU1VTQorfTsKKworLyoqIEBzdGFibGUgSUNVIDIu
MCAqLwordHlwZWRlZiBlbnVtIFVDYWxlbmRhckxpbWl0VHlwZSBVQ2FsZW5kYXJMaW1pdFR5cGU7
CisKKy8qKgorICogRGV0ZXJtaW5lIGEgbGltaXQgZm9yIGEgZmllbGQgaW4gYSBVQ2FsZW5kYXIu
CisgKiBBIGxpbWl0IGlzIGEgbWF4aW11bSBvciBtaW5pbXVtIHZhbHVlIGZvciBhIGZpZWxkLgor
ICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIGZpZWxkIFRo
ZSBkZXNpcmVkIGZpZWxkOyBvbmUgb2YgVUNBTF9FUkEsIFVDQUxfWUVBUiwgVUNBTF9NT05USCwK
KyAqIFVDQUxfV0VFS19PRl9ZRUFSLCBVQ0FMX1dFRUtfT0ZfTU9OVEgsIFVDQUxfREFURSwgVUNB
TF9EQVlfT0ZfWUVBUiwgVUNBTF9EQVlfT0ZfV0VFSywKKyAqIFVDQUxfREFZX09GX1dFRUtfSU5f
TU9OVEgsIFVDQUxfQU1fUE0sIFVDQUxfSE9VUiwgVUNBTF9IT1VSX09GX0RBWSwgVUNBTF9NSU5V
VEUsIFVDQUxfU0VDT05ELAorICogVUNBTF9NSUxMSVNFQ09ORCwgVUNBTF9aT05FX09GRlNFVCwg
VUNBTF9EU1RfT0ZGU0VULgorICogQHBhcmFtIHR5cGUgVGhlIGRlc2lyZWQgY3JpdGljYWwgcG9p
bnQ7IG9uZSBvZiBVQ0FMX01JTklNVU0sIFVDQUxfTUFYSU1VTSwgVUNBTF9HUkVBVEVTVF9NSU5J
TVVNLAorICogVUNBTF9MRUFTVF9NQVhJTVVNLCBVQ0FMX0FDVFVBTF9NSU5JTVVNLCBVQ0FMX0FD
VFVBTF9NQVhJTVVNCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2Rl
IHRvIHJlY2VpdmUgYW55IGVycm9ycy4KKyAqIEByZXR1cm4gVGhlIHJlcXVlc3RlZCB2YWx1ZS4K
KyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3Vj
YWxfZ2V0TGltaXQoY29uc3QgVUNhbGVuZGFyKiAgICAgY2FsLAorICAgICAgICAgICAgICBVQ2Fs
ZW5kYXJEYXRlRmllbGRzICBmaWVsZCwKKyAgICAgICAgICAgICAgVUNhbGVuZGFyTGltaXRUeXBl
ICAgdHlwZSwKKyAgICAgICAgICAgICAgVUVycm9yQ29kZSogICAgICAgICAgc3RhdHVzKTsKKwor
LyoqIEdldCB0aGUgbG9jYWxlIGZvciB0aGlzIGNhbGVuZGFyIG9iamVjdC4gWW91IGNhbiBjaG9v
c2UgYmV0d2VlbiB2YWxpZCBhbmQgYWN0dWFsIGxvY2FsZS4KKyAqICBAcGFyYW0gY2FsIFRoZSBj
YWxlbmRhciBvYmplY3QKKyAqICBAcGFyYW0gdHlwZSB0eXBlIG9mIHRoZSBsb2NhbGUgd2UncmUg
bG9va2luZyBmb3IgKHZhbGlkIG9yIGFjdHVhbCkgCisgKiAgQHBhcmFtIHN0YXR1cyBlcnJvciBj
b2RlIGZvciB0aGUgb3BlcmF0aW9uCisgKiAgQHJldHVybiB0aGUgbG9jYWxlIG5hbWUKKyAqICBA
c3RhYmxlIElDVSAyLjgKKyAqLworVV9TVEFCTEUgY29uc3QgY2hhciAqIFVfRVhQT1JUMgordWNh
bF9nZXRMb2NhbGVCeVR5cGUoY29uc3QgVUNhbGVuZGFyICpjYWwsIFVMb2NEYXRhTG9jYWxlVHlw
ZSB0eXBlLCBVRXJyb3JDb2RlKiBzdGF0dXMpOworCisvKioKKyAqIFJldHVybnMgdGhlIHRpbWV6
b25lIGRhdGEgdmVyc2lvbiBjdXJyZW50bHkgdXNlZCBieSBJQ1UuCisgKiBAcGFyYW0gc3RhdHVz
IGVycm9yIGNvZGUgZm9yIHRoZSBvcGVyYXRpb24KKyAqIEByZXR1cm4gdGhlIHZlcnNpb24gc3Ry
aW5nLCBzdWNoIGFzICIyMDA3ZiIKKyAqIEBzdGFibGUgSUNVIDMuOAorICovCitVX1NUQUJMRSBj
b25zdCBjaGFyICogVV9FWFBPUlQyCit1Y2FsX2dldFRaRGF0YVZlcnNpb24oVUVycm9yQ29kZSog
c3RhdHVzKTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBjYW5vbmljYWwgc3lzdGVtIHRpbWV6b25l
IElEIG9yIHRoZSBub3JtYWxpemVkCisgKiBjdXN0b20gdGltZSB6b25lIElEIGZvciB0aGUgZ2l2
ZW4gdGltZSB6b25lIElELgorICogQHBhcmFtIGlkICAgICAgICBUaGUgaW5wdXQgdGltZXpvbmUg
SUQgdG8gYmUgY2Fub25pY2FsaXplZC4KKyAqIEBwYXJhbSBsZW4gICAgICAgVGhlIGxlbmd0aCBv
ZiBpZCwgb3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorICogQHBhcmFtIHJlc3VsdCAgICBUaGUg
YnVmZmVyIHJlY2VpdmVzIHRoZSBjYW5vbmljYWwgc3lzdGVtIHRpbWV6b25lIElECisgKiAgICAg
ICAgICAgICAgICAgIG9yIHRoZSBjdXN0b20gdGltZXpvbmUgSUQgaW4gbm9ybWFsaXplZCBmb3Jt
YXQuCisgKiBAcGFyYW0gcmVzdWx0Q2FwYWNpdHkgICAgVGhlIGNhcGFjaXR5IG9mIHRoZSByZXN1
bHQgYnVmZmVyLgorICogQHBhcmFtIGlzU3lzdGVtSUQgICAgICAgIFJlY2VpdmVzIGlmIHRoZSBn
aXZlbiBJRCBpcyBhIGtub3duIHN5c3RlbQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIHRp
bWV6b25lIElELgorICogQHBhcmFtIHN0YXR1cyAgICBSZWNldmllcyB0aGUgc3RhdHVzLiAgV2hl
biB0aGUgZ2l2ZW4gdGltZXpvbmUgSUQKKyAqICAgICAgICAgICAgICAgICAgaXMgbmVpdGhlciBh
IGtub3duIHN5c3RlbSB0aW1lIHpvbmUgSUQgbm9yIGEKKyAqICAgICAgICAgICAgICAgICAgdmFs
aWQgY3VzdG9tIHRpbWV6b25lIElELCBVX0lMTEVHQUxfQVJHVU1FTlRfRVJST1IKKyAqICAgICAg
ICAgICAgICAgICAgaXMgc2V0LgorICogQHJldHVybiAgICAgICAgICBUaGUgcmVzdWx0IHN0cmlu
ZyBsZW5ndGgsIG5vdCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nCisgKiAgICAgICAgICAgICAg
ICAgIG51bGwuCisgKiBAc3RhYmxlIElDVSA0LjAKKyAqLworVV9TVEFCTEUgaW50MzJfdCBVX0VY
UE9SVDIKK3VjYWxfZ2V0Q2Fub25pY2FsVGltZVpvbmVJRChjb25zdCBVQ2hhciogaWQsIGludDMy
X3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyKiByZXN1bHQsIGludDMy
X3QgcmVzdWx0Q2FwYWNpdHksIFVCb29sICppc1N5c3RlbUlELCBVRXJyb3JDb2RlKiBzdGF0dXMp
OworLyoqCisgKiBHZXQgdGhlIHJlc291cmNlIGtleXdvcmQgdmFsdWUgc3RyaW5nIGRlc2lnbmF0
aW5nIHRoZSBjYWxlbmRhciB0eXBlIGZvciB0aGUgVUNhbGVuZGFyLgorICogQHBhcmFtIGNhbCBU
aGUgVUNhbGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIHN0YXR1cyBUaGUgZXJyb3IgY29kZSBm
b3IgdGhlIG9wZXJhdGlvbi4KKyAqIEByZXR1cm4gVGhlIHJlc291cmNlIGtleXdvcmQgdmFsdWUg
c3RyaW5nLgorICogQHN0YWJsZSBJQ1UgNC4yCisgKi8KK1VfU1RBQkxFIGNvbnN0IGNoYXIgKiBV
X0VYUE9SVDIKK3VjYWxfZ2V0VHlwZShjb25zdCBVQ2FsZW5kYXIgKmNhbCwgVUVycm9yQ29kZSog
c3RhdHVzKTsKKworLyoqCisgKiBHaXZlbiBhIGtleSBhbmQgYSBsb2NhbGUsIHJldHVybnMgYW4g
YXJyYXkgb2Ygc3RyaW5nIHZhbHVlcyBpbiBhIHByZWZlcnJlZAorICogb3JkZXIgdGhhdCB3b3Vs
ZCBtYWtlIGEgZGlmZmVyZW5jZS4gVGhlc2UgYXJlIGFsbCBhbmQgb25seSB0aG9zZSB2YWx1ZXMg
d2hlcmUKKyAqIHRoZSBvcGVuIChjcmVhdGlvbikgb2YgdGhlIHNlcnZpY2Ugd2l0aCB0aGUgbG9j
YWxlIGZvcm1lZCBmcm9tIHRoZSBpbnB1dCBsb2NhbGUKKyAqIHBsdXMgaW5wdXQga2V5d29yZCBh
bmQgdGhhdCB2YWx1ZSBoYXMgZGlmZmVyZW50IGJlaGF2aW9yIHRoYW4gY3JlYXRpb24gd2l0aCB0
aGUKKyAqIGlucHV0IGxvY2FsZSBhbG9uZS4KKyAqIEBwYXJhbSBrZXkgICAgICAgICAgIG9uZSBv
ZiB0aGUga2V5cyBzdXBwb3J0ZWQgYnkgdGhpcyBzZXJ2aWNlLiAgRm9yIG5vdywgb25seQorICog
ICAgICAgICAgICAgICAgICAgICAgImNhbGVuZGFyIiBpcyBzdXBwb3J0ZWQuCisgKiBAcGFyYW0g
bG9jYWxlICAgICAgICB0aGUgbG9jYWxlCisgKiBAcGFyYW0gY29tbW9ubHlVc2VkICBpZiBzZXQg
dG8gdHJ1ZSBpdCB3aWxsIHJldHVybiBvbmx5IGNvbW1vbmx5IHVzZWQgdmFsdWVzCisgKiAgICAg
ICAgICAgICAgICAgICAgICB3aXRoIHRoZSBnaXZlbiBsb2NhbGUgaW4gcHJlZmVycmVkIG9yZGVy
LiAgT3RoZXJ3aXNlLAorICogICAgICAgICAgICAgICAgICAgICAgaXQgd2lsbCByZXR1cm4gYWxs
IHRoZSBhdmFpbGFibGUgdmFsdWVzIGZvciB0aGUgbG9jYWxlLgorICogQHBhcmFtIHN0YXR1cyBl
cnJvciBzdGF0dXMKKyAqIEByZXR1cm4gYSBzdHJpbmcgZW51bWVyYXRpb24gb3ZlciBrZXl3b3Jk
IHZhbHVlcyBmb3IgdGhlIGdpdmVuIGtleSBhbmQgdGhlIGxvY2FsZS4KKyAqIEBzdGFibGUgSUNV
IDQuMgorICovCitVX1NUQUJMRSBVRW51bWVyYXRpb24qIFVfRVhQT1JUMgordWNhbF9nZXRLZXl3
b3JkVmFsdWVzRm9yTG9jYWxlKGNvbnN0IGNoYXIqIGtleSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBsb2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVUJvb2wgY29tbW9ubHlVc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVFcnJvckNvZGUqIHN0YXR1cyk7CisKKworLyoqIFdlZWtkYXkgdHlwZXMsIGFzIHJldHVybmVk
IGJ5IHVjYWxfZ2V0RGF5T2ZXZWVrVHlwZSgpLgorICogQHN0YWJsZSBJQ1UgNC40CisgKi8KK2Vu
dW0gVUNhbGVuZGFyV2Vla2RheVR5cGUgeworICAvKioKKyAgICogRGVzaWduYXRlcyBhIGZ1bGwg
d2Vla2RheSAobm8gcGFydCBvZiB0aGUgZGF5IGlzIGluY2x1ZGVkIGluIHRoZSB3ZWVrZW5kKS4K
KyAgICogQHN0YWJsZSBJQ1UgNC40IAorICAgKi8KKyAgVUNBTF9XRUVLREFZLAorICAvKioKKyAg
ICogRGVzaWduYXRlcyBhIGZ1bGwgd2Vla2VuZCBkYXkgKHRoZSBlbnRpcmUgZGF5IGlzIGluY2x1
ZGVkIGluIHRoZSB3ZWVrZW5kKS4KKyAgICogQHN0YWJsZSBJQ1UgNC40IAorICAgKi8KKyAgVUNB
TF9XRUVLRU5ELAorICAvKioKKyAgICogRGVzaWduYXRlcyBhIGRheSB0aGF0IHN0YXJ0cyBhcyBh
IHdlZWtkYXkgYW5kIHRyYW5zaXRpb25zIHRvIHRoZSB3ZWVrZW5kLgorICAgKiBDYWxsIHVjYWxf
Z2V0V2Vla2VuZFRyYW5zaXRpb24oKSB0byBnZXQgdGhlIHRpbWUgb2YgdHJhbnNpdGlvbi4KKyAg
ICogQHN0YWJsZSBJQ1UgNC40IAorICAgKi8KKyAgVUNBTF9XRUVLRU5EX09OU0VULAorICAvKioK
KyAgICogRGVzaWduYXRlcyBhIGRheSB0aGF0IHN0YXJ0cyBhcyB0aGUgd2Vla2VuZCBhbmQgdHJh
bnNpdGlvbnMgdG8gYSB3ZWVrZGF5LgorICAgKiBDYWxsIHVjYWxfZ2V0V2Vla2VuZFRyYW5zaXRp
b24oKSB0byBnZXQgdGhlIHRpbWUgb2YgdHJhbnNpdGlvbi4KKyAgICogQHN0YWJsZSBJQ1UgNC40
IAorICAgKi8KKyAgVUNBTF9XRUVLRU5EX0NFQVNFCit9OworCisvKiogQHN0YWJsZSBJQ1UgNC40
ICovCit0eXBlZGVmIGVudW0gVUNhbGVuZGFyV2Vla2RheVR5cGUgVUNhbGVuZGFyV2Vla2RheVR5
cGU7CisKKy8qKgorICogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBkYXkgb2YgdGhlIHdlZWsg
aXMgYSB3ZWVrZGF5LCBhCisgKiB3ZWVrZW5kIGRheSwgb3IgYSBkYXkgdGhhdCB0cmFuc2l0aW9u
cyBmcm9tIG9uZSB0byB0aGUgb3RoZXIsCisgKiBpbiB0aGlzIGNhbGVuZGFyIHN5c3RlbS4gSWYg
YSB0cmFuc2l0aW9uIG9jY3VycyBhdCBtaWRuaWdodCwKKyAqIHRoZW4gdGhlIGRheXMgYmVmb3Jl
IGFuZCBhZnRlciB0aGUgdHJhbnNpdGlvbiB3aWxsIGhhdmUgdGhlCisgKiB0eXBlIFVDQUxfV0VF
S0RBWSBvciBVQ0FMX1dFRUtFTkQuIElmIGEgdHJhbnNpdGlvbiBvY2N1cnMgYXQgYSB0aW1lCisg
KiBvdGhlciB0aGFuIG1pZG5pZ2h0LCB0aGVuIHRoZSBkYXkgb2YgdGhlIHRyYW5zaXRpb24gd2ls
bCBoYXZlCisgKiB0aGUgdHlwZSBVQ0FMX1dFRUtFTkRfT05TRVQgb3IgVUNBTF9XRUVLRU5EX0NF
QVNFLiBJbiB0aGlzIGNhc2UsIHRoZQorICogbWV0aG9kIGdldFdlZWtlbmRUcmFuc2l0aW9uKCkg
d2lsbCByZXR1cm4gdGhlIHBvaW50IG9mCisgKiB0cmFuc2l0aW9uLgorICogQHBhcmFtIGNhbCBU
aGUgVUNhbGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIGRheU9mV2VlayBUaGUgZGF5IG9mIHRo
ZSB3ZWVrIHdob3NlIHR5cGUgaXMgZGVzaXJlZCAoVUNBTF9TVU5EQVkuLlVDQUxfU0FUVVJEQVkp
LgorICogQHBhcmFtIHN0YXR1cyBUaGUgZXJyb3IgY29kZSBmb3IgdGhlIG9wZXJhdGlvbi4KKyAq
IEByZXR1cm4gVGhlIFVDYWxlbmRhcldlZWtkYXlUeXBlIGZvciB0aGUgZGF5IG9mIHRoZSB3ZWVr
LgorICogQHN0YWJsZSBJQ1UgNC40CisgKi8KK1VfU1RBQkxFIFVDYWxlbmRhcldlZWtkYXlUeXBl
IFVfRVhQT1JUMgordWNhbF9nZXREYXlPZldlZWtUeXBlKGNvbnN0IFVDYWxlbmRhciAqY2FsLCBV
Q2FsZW5kYXJEYXlzT2ZXZWVrIGRheU9mV2VlaywgVUVycm9yQ29kZSogc3RhdHVzKTsKKworLyoq
CisgKiBSZXR1cm5zIHRoZSB0aW1lIGR1cmluZyB0aGUgZGF5IGF0IHdoaWNoIHRoZSB3ZWVrZW5k
IGJlZ2lucyBvciBlbmRzIGluCisgKiB0aGlzIGNhbGVuZGFyIHN5c3RlbS4gIElmIHVjYWxfZ2V0
RGF5T2ZXZWVrVHlwZSgpIHJlcnR1cm5zIFVDQUxfV0VFS0VORF9PTlNFVAorICogZm9yIHRoZSBz
cGVjaWZpZWQgZGF5T2ZXZWVrLCByZXR1cm4gdGhlIHRpbWUgYXQgd2hpY2ggdGhlIHdlZWtlbmQg
YmVnaW5zLgorICogSWYgdWNhbF9nZXREYXlPZldlZWtUeXBlKCkgcmV0dXJucyBVQ0FMX1dFRUtF
TkRfQ0VBU0UgZm9yIHRoZSBzcGVjaWZpZWQgZGF5T2ZXZWVrLAorICogcmV0dXJuIHRoZSB0aW1l
IGF0IHdoaWNoIHRoZSB3ZWVrZW5kIGVuZHMuIElmIHVjYWxfZ2V0RGF5T2ZXZWVrVHlwZSgpIHJl
dHVybnMKKyAqIHNvbWUgb3RoZXIgVUNhbGVuZGFyV2Vla2RheVR5cGUgZm9yIHRoZSBzcGVjaWZp
ZWQgZGF5T2ZXZWVrLCBpcyBpdCBhbiBlcnJvciBjb25kaXRpb24KKyAqIChVX0lMTEVHQUxfQVJH
VU1FTlRfRVJST1IpLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHF1ZXJ5LgorICog
QHBhcmFtIGRheU9mV2VlayBUaGUgZGF5IG9mIHRoZSB3ZWVrIGZvciB3aGljaCB0aGUgd2Vla2Vu
ZCB0cmFuc2l0aW9uIHRpbWUgaXMKKyAqIGRlc2lyZWQgKFVDQUxfU1VOREFZLi5VQ0FMX1NBVFVS
REFZKS4KKyAqIEBwYXJhbSBzdGF0dXMgVGhlIGVycm9yIGNvZGUgZm9yIHRoZSBvcGVyYXRpb24u
CisgKiBAcmV0dXJuIFRoZSBtaWxsaXNlY29uZHMgYWZ0ZXIgbWlkbmlnaHQgYXQgd2hpY2ggdGhl
IHdlZWtlbmQgYmVnaW5zIG9yIGVuZHMuCisgKiBAc3RhYmxlIElDVSA0LjQKKyAqLworVV9TVEFC
TEUgaW50MzJfdCBVX0VYUE9SVDIKK3VjYWxfZ2V0V2Vla2VuZFRyYW5zaXRpb24oY29uc3QgVUNh
bGVuZGFyICpjYWwsIFVDYWxlbmRhckRheXNPZldlZWsgZGF5T2ZXZWVrLCBVRXJyb3JDb2RlICpz
dGF0dXMpOworCisvKioKKyAqIFJldHVybnMgVFJVRSBpZiB0aGUgZ2l2ZW4gVURhdGUgaXMgaW4g
dGhlIHdlZWtlbmQgaW4KKyAqIHRoaXMgY2FsZW5kYXIgc3lzdGVtLgorICogQHBhcmFtIGNhbCBU
aGUgVUNhbGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIGRhdGUgVGhlIFVEYXRlIGluIHF1ZXN0
aW9uLgorICogQHBhcmFtIHN0YXR1cyBUaGUgZXJyb3IgY29kZSBmb3IgdGhlIG9wZXJhdGlvbi4K
KyAqIEByZXR1cm4gVFJVRSBpZiB0aGUgZ2l2ZW4gVURhdGUgaXMgaW4gdGhlIHdlZWtlbmQgaW4K
KyAqIHRoaXMgY2FsZW5kYXIgc3lzdGVtLCBGQUxTRSBvdGhlcndpc2UuCisgKiBAc3RhYmxlIElD
VSA0LjQKKyAqLworVV9TVEFCTEUgVUJvb2wgVV9FWFBPUlQyCit1Y2FsX2lzV2Vla2VuZChjb25z
dCBVQ2FsZW5kYXIgKmNhbCwgVURhdGUgZGF0ZSwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworCisj
ZW5kaWYgLyogI2lmICFVQ09ORklHX05PX0ZPUk1BVFRJTkcgKi8KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdWRhdC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3VkYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDgwYzdkYTUxNDc1
YjM5M2NlMGQzYzliNzIyY2M2ZGM0ZDNkMGJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3VkYXQuaApAQCAtMCwwICsxLDk5NyBAQAorLyoKKyAq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMCwgSW50ZXJu
YXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworICogQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaWZuZGVm
IFVEQVRfSAorI2RlZmluZSBVREFUX0gKKworI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCisK
KyNpZiAhVUNPTkZJR19OT19GT1JNQVRUSU5HCisKKyNpbmNsdWRlICJ1bmljb2RlL2xvY2FscG9p
bnRlci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWNhbC5oIgorI2luY2x1ZGUgInVuaWNvZGUvdW51
bS5oIgorLyoqCisgKiBcZmlsZQorICogXGJyaWVmIEMgQVBJOiBEYXRlRm9ybWF0CisgKgorICog
PGgyPiBEYXRlIEZvcm1hdCBDIEFQSTwvaDI+CisgKgorICogRGF0ZSBGb3JtYXQgQyBBUEkgIGNv
bnNpc3RzIG9mIGZ1bmN0aW9ucyB0aGF0IGNvbnZlcnQgZGF0ZXMgYW5kCisgKiB0aW1lcyBmcm9t
IHRoZWlyIGludGVybmFsIHJlcHJlc2VudGF0aW9ucyB0byB0ZXh0dWFsIGZvcm0gYW5kIGJhY2sg
YWdhaW4gaW4gYQorICogbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgbWFubmVyLiBDb252ZXJ0aW5nIGZy
b20gdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIChtaWxsaXNlY29uZHMKKyAqIHNpbmNlIG1p
ZG5pZ2h0LCBKYW51YXJ5IDEsIDE5NzApIHRvIHRleHQgaXMga25vd24gYXMgImZvcm1hdHRpbmcs
IiBhbmQgY29udmVydGluZworICogZnJvbSB0ZXh0IHRvIG1pbGxpcyBpcyBrbm93biBhcyAicGFy
c2luZy4iICBXZSBjdXJyZW50bHkgZGVmaW5lIG9ubHkgb25lIGNvbmNyZXRlCisgKiBzdHJ1Y3R1
cmUgVURhdGVGb3JtYXQsIHdoaWNoIGNhbiBoYW5kbGUgcHJldHR5IG11Y2ggYWxsIG5vcm1hbAor
ICogZGF0ZSBmb3JtYXR0aW5nIGFuZCBwYXJzaW5nIGFjdGlvbnMuCisgKiA8UD4KKyAqIERhdGUg
Rm9ybWF0IGhlbHBzIHlvdSB0byBmb3JtYXQgYW5kIHBhcnNlIGRhdGVzIGZvciBhbnkgbG9jYWxl
LiBZb3VyIGNvZGUgY2FuCisgKiBiZSBjb21wbGV0ZWx5IGluZGVwZW5kZW50IG9mIHRoZSBsb2Nh
bGUgY29udmVudGlvbnMgZm9yIG1vbnRocywgZGF5cyBvZiB0aGUKKyAqIHdlZWssIG9yIGV2ZW4g
dGhlIGNhbGVuZGFyIGZvcm1hdDogbHVuYXIgdnMuIHNvbGFyLgorICogPFA+CisgKiBUbyBmb3Jt
YXQgYSBkYXRlIGZvciB0aGUgY3VycmVudCBMb2NhbGUgd2l0aCBkZWZhdWx0IHRpbWUgYW5kIGRh
dGUgc3R5bGUsCisgKiB1c2Ugb25lIG9mIHRoZSBzdGF0aWMgZmFjdG9yeSBtZXRob2RzOgorICog
PHByZT4KKyAqIFxjb2RlCisgKiAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Cisg
KiAgVUNoYXIgKm15U3RyaW5nOworICogIGludDMyX3QgbXlTdHJsZW4gPSAwOworICogIFVEYXRl
Rm9ybWF0KiBkZm10ID0gdWRhdF9vcGVuKFVEQVRfREVGQVVMVCwgVURBVF9ERUZBVUxULCBOVUxM
LCBOVUxMLCAtMSwgTlVMTCwgLTEsICZzdGF0dXMpOworICogIG15U3RybGVuID0gdWRhdF9mb3Jt
YXQoZGZtdCwgbXlEYXRlLCBOVUxMLCBteVN0cmxlbiwgTlVMTCwgJnN0YXR1cyk7CisgKiAgaWYg
KHN0YXR1cz09VV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpeworICogICAgICBzdGF0dXM9VV9aRVJP
X0VSUk9SOworICogICAgICBteVN0cmluZz0oVUNoYXIqKW1hbGxvYyhzaXplb2YoVUNoYXIpICog
KG15U3RybGVuKzEpICk7CisgKiAgICAgIHVkYXRfZm9ybWF0KGRmbXQsIG15RGF0ZSwgbXlTdHJp
bmcsIG15U3RybGVuKzEsIE5VTEwsICZzdGF0dXMpOworICogIH0KKyAqIFxlbmRjb2RlCisgKiA8
L3ByZT4KKyAqIElmIHlvdSBhcmUgZm9ybWF0dGluZyBtdWx0aXBsZSBudW1iZXJzLCBpdCBpcyBt
b3JlIGVmZmljaWVudCB0byBnZXQgdGhlCisgKiBmb3JtYXQgYW5kIHVzZSBpdCBtdWx0aXBsZSB0
aW1lcyBzbyB0aGF0IHRoZSBzeXN0ZW0gZG9lc24ndCBoYXZlIHRvIGZldGNoIHRoZQorICogaW5m
b3JtYXRpb24gYWJvdXQgdGhlIGxvY2FsIGxhbmd1YWdlIGFuZCBjb3VudHJ5IGNvbnZlbnRpb25z
IG11bHRpcGxlIHRpbWVzLgorICogPHByZT4KKyAqIFxjb2RlCisgKiAgVUVycm9yQ29kZSBzdGF0
dXMgPSBVX1pFUk9fRVJST1I7CisgKiAgaW50MzJfdCBpLCBteVN0cmxlbiA9IDA7CisgKiAgVUNo
YXIqIG15U3RyaW5nOworICogIGNoYXIgYnVmZmVyWzEwMjRdOworICogIFVEYXRlIG15RGF0ZUFy
cltdID0geyAwLjAsIDEwMDAwMDAwMC4wLCAyMDAwMDAwMDAwLjAgfTsgLy8gdGVzdCB2YWx1ZXMK
KyAqICBVRGF0ZUZvcm1hdCogZGYgPSB1ZGF0X29wZW4oVURBVF9ERUZBVUxULCBVREFUX0RFRkFV
TFQsIE5VTEwsIE5VTEwsIC0xLCBOVUxMLCAwLCAmc3RhdHVzKTsKKyAqICBmb3IgKGkgPSAwOyBp
IDwgMzsgaSsrKSB7CisgKiAgICAgIG15U3RybGVuID0gdWRhdF9mb3JtYXQoZGYsIG15RGF0ZUFy
cltpXSwgTlVMTCwgbXlTdHJsZW4sIE5VTEwsICZzdGF0dXMpOworICogICAgICBpZihzdGF0dXMg
PT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpeworICogICAgICAgICAgc3RhdHVzID0gVV9aRVJP
X0VSUk9SOworICogICAgICAgICAgbXlTdHJpbmcgPSAoVUNoYXIqKW1hbGxvYyhzaXplb2YoVUNo
YXIpICogKG15U3RybGVuKzEpICk7CisgKiAgICAgICAgICB1ZGF0X2Zvcm1hdChkZiwgbXlEYXRl
QXJyW2ldLCBteVN0cmluZywgbXlTdHJsZW4rMSwgTlVMTCwgJnN0YXR1cyk7CisgKiAgICAgICAg
ICBwcmludGYoIiVzXG4iLCB1X2F1c3RyY3B5KGJ1ZmZlciwgbXlTdHJpbmcpICk7CisgKiAgICAg
ICAgICBmcmVlKG15U3RyaW5nKTsKKyAqICAgICAgfQorICogIH0KKyAqIFxlbmRjb2RlCisgKiA8
L3ByZT4KKyAqIFRvIGdldCBzcGVjaWZpYyBmaWVsZHMgb2YgYSBkYXRlLCB5b3UgY2FuIHVzZSBV
RmllbGRQb3NpdGlvbiB0bworICogZ2V0IHNwZWNpZmljIGZpZWxkcy4KKyAqIDxwcmU+CisgKiBc
Y29kZQorICogIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICogIFVGaWVsZFBv
c2l0aW9uIHBvczsKKyAqICBVQ2hhciAqbXlTdHJpbmc7CisgKiAgaW50MzJfdCBteVN0cmxlbiA9
IDA7CisgKiAgY2hhciBidWZmZXJbMTAyNF07CisgKgorICogIHBvcy5maWVsZCA9IDE7ICAvLyBT
YW1lIGFzIHRoZSBEYXRlRm9ybWF0OjpFRmllbGQgZW51bQorICogIFVEYXRlRm9ybWF0KiBkZm10
ID0gdWRhdF9vcGVuKFVEQVRfREVGQVVMVCwgVURBVF9ERUZBVUxULCBOVUxMLCAtMSwgTlVMTCwg
MCwgJnN0YXR1cyk7CisgKiAgbXlTdHJsZW4gPSB1ZGF0X2Zvcm1hdChkZm10LCBteURhdGUsIE5V
TEwsIG15U3RybGVuLCAmcG9zLCAmc3RhdHVzKTsKKyAqICBpZiAoc3RhdHVzPT1VX0JVRkZFUl9P
VkVSRkxPV19FUlJPUil7CisgKiAgICAgIHN0YXR1cz1VX1pFUk9fRVJST1I7CisgKiAgICAgIG15
U3RyaW5nPShVQ2hhciopbWFsbG9jKHNpemVvZihVQ2hhcikgKiAobXlTdHJsZW4rMSkgKTsKKyAq
ICAgICAgdWRhdF9mb3JtYXQoZGZtdCwgbXlEYXRlLCBteVN0cmluZywgbXlTdHJsZW4rMSwgJnBv
cywgJnN0YXR1cyk7CisgKiAgfQorICogIHByaW50ZigiZGF0ZSBmb3JtYXQ6ICVzXG4iLCB1X2F1
c3RyY3B5KGJ1ZmZlciwgbXlTdHJpbmcpKTsKKyAqICBidWZmZXJbcG9zLmVuZEluZGV4XSA9IDA7
ICAgLy8gTlVMTCB0ZXJtaW5hdGUgdGhlIHN0cmluZy4KKyAqICBwcmludGYoIlVGaWVsZFBvc2l0
aW9uIHBvc2l0aW9uIGVxdWFscyAlc1xuIiwgJmJ1ZmZlcltwb3MuYmVnaW5JbmRleF0pOworICog
XGVuZGNvZGUKKyAqIDwvcHJlPgorICogVG8gZm9ybWF0IGEgZGF0ZSBmb3IgYSBkaWZmZXJlbnQg
TG9jYWxlLCBzcGVjaWZ5IGl0IGluIHRoZSBjYWxsIHRvCisgKiB1ZGF0X29wZW4oKQorICogPHBy
ZT4KKyAqIFxjb2RlCisgKiAgICAgICAgVURhdGVGb3JtYXQqIGRmID0gdWRhdF9vcGVuKFVEQVRf
U0hPUlQsIFVEQVRfU0hPUlQsICJmcl9GUiIsIE5VTEwsIC0xLCBOVUxMLCAwLCAmc3RhdHVzKTsK
KyAqIFxlbmRjb2RlCisgKiA8L3ByZT4KKyAqIFlvdSBjYW4gdXNlIGEgRGF0ZUZvcm1hdCBBUEkg
dWRhdF9wYXJzZSgpIHRvIHBhcnNlLgorICogPHByZT4KKyAqIFxjb2RlCisgKiAgVUVycm9yQ29k
ZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgKiAgaW50MzJfdCBwYXJzZXBvcz0wOworICogIFVE
YXRlIG15RGF0ZSA9IHVkYXRfcGFyc2UoZGYsIG15U3RyaW5nLCB1X3N0cmxlbihteVN0cmluZyks
ICZwYXJzZXBvcywgJnN0YXR1cyk7CisgKiBcZW5kY29kZQorICogPC9wcmU+CisgKiAgWW91IGNh
biBwYXNzIGluIGRpZmZlcmVudCBvcHRpb25zIGZvciB0aGUgYXJndW1lbnRzIGZvciBkYXRlIGFu
ZCB0aW1lIHN0eWxlCisgKiAgdG8gY29udHJvbCB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQ7IGZy
b20gU0hPUlQgdG8gTUVESVVNIHRvIExPTkcgdG8gRlVMTC4KKyAqICBUaGUgZXhhY3QgcmVzdWx0
IGRlcGVuZHMgb24gdGhlIGxvY2FsZSwgYnV0IGdlbmVyYWxseToKKyAqICBzZWUgVURhdGVGb3Jt
YXRTdHlsZSBmb3IgbW9yZSBkZXRhaWxzCisgKiA8dWwgdHlwZT1yb3VuZD4KKyAqICAgPGxpPiAg
IFVEQVRfU0hPUlQgaXMgY29tcGxldGVseSBudW1lcmljLCBzdWNoIGFzIDEyLzEzLzUyIG9yIDM6
MzBwbQorICogICA8bGk+ICAgVURBVF9NRURJVU0gaXMgbG9uZ2VyLCBzdWNoIGFzIEphbiAxMiwg
MTk1MgorICogICA8bGk+ICAgVURBVF9MT05HIGlzIGxvbmdlciwgc3VjaCBhcyBKYW51YXJ5IDEy
LCAxOTUyIG9yIDM6MzA6MzJwbQorICogICA8bGk+ICAgVURBVF9GVUxMIGlzIHByZXR0eSBjb21w
bGV0ZWx5IHNwZWNpZmllZCwgc3VjaCBhcworICogICAgICAgICAgVHVlc2RheSwgQXByaWwgMTIs
IDE5NTIgQUQgb3IgMzozMDo0MnBtIFBTVC4KKyAqIDwvdWw+CisgKiBZb3UgY2FuIGFsc28gc2V0
IHRoZSB0aW1lIHpvbmUgb24gdGhlIGZvcm1hdCBpZiB5b3Ugd2lzaC4KKyAqIDxQPgorICogWW91
IGNhbiBhbHNvIHVzZSBmb3JtcyBvZiB0aGUgcGFyc2UgYW5kIGZvcm1hdCBtZXRob2RzIHdpdGgg
UGFyc2UgUG9zaXRpb24gYW5kCisgKiBVRmllbGRQb3NpdGlvbiB0byBhbGxvdyB5b3UgdG8KKyAq
IDx1bCB0eXBlPXJvdW5kPgorICogICA8bGk+ICAgUHJvZ3Jlc3NpdmVseSBwYXJzZSB0aHJvdWdo
IHBpZWNlcyBvZiBhIHN0cmluZy4KKyAqICAgPGxpPiAgIEFsaWduIGFueSBwYXJ0aWN1bGFyIGZp
ZWxkLCBvciBmaW5kIG91dCB3aGVyZSBpdCBpcyBmb3Igc2VsZWN0aW9uCisgKiAgICAgICAgICBv
biB0aGUgc2NyZWVuLgorICogPC91bD4KKyAqLworCisvKiogQSBkYXRlIGZvcm1hdHRlci4KKyAq
ICBGb3IgdXNhZ2UgaW4gQyBwcm9ncmFtcy4KKyAqICBAc3RhYmxlIElDVSAyLjYKKyAqLwordHlw
ZWRlZiB2b2lkKiBVRGF0ZUZvcm1hdDsKKworLyoqIFRoZSBwb3NzaWJsZSBkYXRlL3RpbWUgZm9y
bWF0IHN0eWxlcyAKKyAqICBAc3RhYmxlIElDVSAyLjYKKyAqLwordHlwZWRlZiBlbnVtIFVEYXRl
Rm9ybWF0U3R5bGUgeworICAgIC8qKiBGdWxsIHN0eWxlICovCisgICAgVURBVF9GVUxMLAorICAg
IC8qKiBMb25nIHN0eWxlICovCisgICAgVURBVF9MT05HLAorICAgIC8qKiBNZWRpdW0gc3R5bGUg
Ki8KKyAgICBVREFUX01FRElVTSwKKyAgICAvKiogU2hvcnQgc3R5bGUgKi8KKyAgICBVREFUX1NI
T1JULAorICAgIC8qKiBEZWZhdWx0IHN0eWxlICovCisgICAgVURBVF9ERUZBVUxUID0gVURBVF9N
RURJVU0sCisKKyAgICAvKiogQml0ZmllbGQgZm9yIHJlbGF0aXZlIGRhdGUgKi8KKyAgICBVREFU
X1JFTEFUSVZFID0gKDEgPDwgNyksCisgICAgCisgICAgVURBVF9GVUxMX1JFTEFUSVZFID0gVURB
VF9GVUxMIHwgVURBVF9SRUxBVElWRSwKKyAgICAgICAgCisgICAgVURBVF9MT05HX1JFTEFUSVZF
ID0gVURBVF9MT05HIHwgVURBVF9SRUxBVElWRSwKKyAgICAKKyAgICBVREFUX01FRElVTV9SRUxB
VElWRSA9IFVEQVRfTUVESVVNIHwgVURBVF9SRUxBVElWRSwKKyAgICAKKyAgICBVREFUX1NIT1JU
X1JFTEFUSVZFID0gVURBVF9TSE9SVCB8IFVEQVRfUkVMQVRJVkUsCisgICAgCisgICAgCisgICAg
LyoqIE5vIHN0eWxlICovCisgICAgVURBVF9OT05FID0gLTEsCisgICAgLyoqIGZvciBpbnRlcm5h
bCBBUEkgdXNlIG9ubHkgKi8KKyAgICBVREFUX0lHTk9SRSA9IC0yCisKK30gVURhdGVGb3JtYXRT
dHlsZTsKKworCisvKioKKyAqIEB7CisgKiBCZWxvdyBhcmUgYSBzZXQgb2YgcHJlLWRlZmluZWQg
c2tlbGV0b25zLgorICoKKyAqIDxQPgorICogQSBza2VsZXRvbiAKKyAqIDxvbD4KKyAqIDxsaT4K
KyAqICAgIG9ubHkga2VlcHMgdGhlIGZpZWxkIHBhdHRlcm4gbGV0dGVyIGFuZCBpZ25vcmVzIGFs
bCBvdGhlciBwYXJ0cyAKKyAqICAgIGluIGEgcGF0dGVybiwgc3VjaCBhcyBzcGFjZSwgcHVuY3R1
YXRpb25zLCBhbmQgc3RyaW5nIGxpdGVyYWxzLgorICogPC9saT4KKyAqIDxsaT4KKyAqICAgIGhp
ZGVzIHRoZSBvcmRlciBvZiBmaWVsZHMuIAorICogPC9saT4KKyAqIDxsaT4KKyAqICAgIG1pZ2h0
IGhpZGUgYSBmaWVsZCdzIHBhdHRlcm4gbGV0dGVyIGxlbmd0aC4KKyAqCisgKiAgICBGb3IgdGhv
c2Ugbm9uLWRpZ2l0IGNhbGVuZGFyIGZpZWxkcywgdGhlIHBhdHRlcm4gbGV0dGVyIGxlbmd0aCBp
cyAKKyAqICAgIGltcG9ydGFudCwgc3VjaCBhcyBNTU0sIE1NTU0sIGFuZCBNTU1NTTsgRUVFIGFu
ZCBFRUVFLCAKKyAqICAgIGFuZCB0aGUgZmllbGQncyBwYXR0ZXJuIGxldHRlciBsZW5ndGggaXMg
aG9ub3JlZC4KKyAqICAgIAorICogICAgRm9yIHRoZSBkaWdpdCBjYWxlbmRhciBmaWVsZHMsICBz
dWNoIGFzIE0gb3IgTU0sIGQgb3IgZGQsIHl5IG9yIHl5eXksIAorICogICAgdGhlIGZpZWxkIHBh
dHRlcm4gbGVuZ3RoIGlzIGlnbm9yZWQgYW5kIHRoZSBiZXN0IG1hdGNoLCB3aGljaCBpcyBkZWZp
bmVkIAorICogICAgaW4gZGF0ZSB0aW1lIHBhdHRlcm5zLCB3aWxsIGJlIHJldHVybmVkIHdpdGhv
dXQgaG9ub3IgdGhlIGZpZWxkIHBhdHRlcm4KKyAqICAgIGxldHRlciBsZW5ndGggaW4gc2tlbGV0
b24uCisgKiA8L2xpPgorICogPC9vbD4KKyAqCisgKiBAc3RhYmxlIElDVSA0LjAKKyAqLworCisj
ZGVmaW5lIFVEQVRfTUlOVVRFX1NFQ09ORCAgICAgICAgICAgICAgIm1zIgorI2RlZmluZSBVREFU
X0hPVVIyNF9NSU5VVEUgICAgICAgICAgICAgICJIbSIKKyNkZWZpbmUgVURBVF9IT1VSMjRfTUlO
VVRFX1NFQ09ORCAgICAgICAiSG1zIiAgICAgIAorI2RlZmluZSBVREFUX0hPVVJfTUlOVVRFX1NF
Q09ORCAgICAgICAgICJobXMiCisjZGVmaW5lIFVEQVRfU1RBTkRBTE9ORV9NT05USCAgICAgICAg
ICAgIkxMTEwiCisjZGVmaW5lIFVEQVRfQUJCUl9TVEFOREFMT05FX01PTlRIICAgICAgIkxMTCIK
KyNkZWZpbmUgVURBVF9ZRUFSX1FVQVJURVIgICAgICAgICAgICAgICAieVFRUSIKKyNkZWZpbmUg
VURBVF9ZRUFSX0FCQlJfUVVBUlRFUiAgICAgICAgICAieVEiCisKKy8qKiBAfSAqLworCisvKioK
KyAqIEB7CisgKiBCZWxvdyBhcmUgYSBzZXQgb2YgcHJlLWRlZmluZWQgc2tlbGV0b25zIHRoYXQg
CisgKiBoYXZlIHByZS1kZWZpbmVkIGludGVydmFsIHBhdHRlcm5zIGluIHJlc291cmNlIGZpbGVz
LgorICogVXNlcnMgYXJlIGVuY291cmFnZWQgdG8gdXNlIHRoZW0gaW4gZGF0ZSBpbnRlcnZhbCBm
b3JtYXQgZmFjdG9yeSBtZXRob2RzLgorICogCisgKiBAc3RhYmxlIElDVSA0LjAKKyAqLworI2Rl
ZmluZSBVREFUX0hPVVJfTUlOVVRFICAgICAgICAgICAgICAgICJobSIKKyNkZWZpbmUgVURBVF9Z
RUFSICAgICAgICAgICAgICAgICAgICAgICAieSIKKyNkZWZpbmUgVURBVF9EQVkgICAgICAgICAg
ICAgICAgICAgICAgICAiZCIKKyNkZWZpbmUgVURBVF9OVU1fTU9OVEhfV0VFS0RBWV9EQVkgICAg
ICAiTUVkIgorI2RlZmluZSBVREFUX1lFQVJfTlVNX01PTlRIICAgICAgICAgICAgICJ5TSIgICAg
ICAgICAgICAgIAorI2RlZmluZSBVREFUX05VTV9NT05USF9EQVkgICAgICAgICAgICAgICJNZCIK
KyNkZWZpbmUgVURBVF9ZRUFSX05VTV9NT05USF9XRUVLREFZX0RBWSAieU1FZCIKKyNkZWZpbmUg
VURBVF9BQkJSX01PTlRIX1dFRUtEQVlfREFZICAgICAiTU1NRWQiCisjZGVmaW5lIFVEQVRfWUVB
Ul9NT05USCAgICAgICAgICAgICAgICAgInlNTU1NIgorI2RlZmluZSBVREFUX1lFQVJfQUJCUl9N
T05USCAgICAgICAgICAgICJ5TU1NIgorI2RlZmluZSBVREFUX01PTlRIX0RBWSAgICAgICAgICAg
ICAgICAgICJNTU1NZCIKKyNkZWZpbmUgVURBVF9BQkJSX01PTlRIX0RBWSAgICAgICAgICAgICAi
TU1NZCIgCisjZGVmaW5lIFVEQVRfTU9OVEhfV0VFS0RBWV9EQVkgICAgICAgICAgIk1NTU1FRUVF
ZCIKKyNkZWZpbmUgVURBVF9ZRUFSX0FCQlJfTU9OVEhfV0VFS0RBWV9EQVkgInlNTU1FZCIgCisj
ZGVmaW5lIFVEQVRfWUVBUl9NT05USF9XRUVLREFZX0RBWSAgICAgInlNTU1NRUVFRWQiCisjZGVm
aW5lIFVEQVRfWUVBUl9NT05USF9EQVkgICAgICAgICAgICAgInlNTU1NZCIKKyNkZWZpbmUgVURB
VF9ZRUFSX0FCQlJfTU9OVEhfREFZICAgICAgICAieU1NTWQiCisjZGVmaW5lIFVEQVRfWUVBUl9O
VU1fTU9OVEhfREFZICAgICAgICAgInlNZCIKKyNkZWZpbmUgVURBVF9OVU1fTU9OVEggICAgICAg
ICAgICAgICAgICAiTSIKKyNkZWZpbmUgVURBVF9BQkJSX01PTlRIICAgICAgICAgICAgICAgICAi
TU1NIgorI2RlZmluZSBVREFUX01PTlRIICAgICAgICAgICAgICAgICAgICAgICJNTU1NIgorI2Rl
ZmluZSBVREFUX0hPVVJfTUlOVVRFX0dFTkVSSUNfVFogICAgICJobXYiCisjZGVmaW5lIFVEQVRf
SE9VUl9NSU5VVEVfVFogICAgICAgICAgICAgImhteiIKKyNkZWZpbmUgVURBVF9IT1VSICAgICAg
ICAgICAgICAgICAgICAgICAiaCIKKyNkZWZpbmUgVURBVF9IT1VSX0dFTkVSSUNfVFogICAgICAg
ICAgICAiaHYiCisjZGVmaW5lIFVEQVRfSE9VUl9UWiAgICAgICAgICAgICAgICAgICAgImh6Igor
CisvKiogQH0gKi8KKworCisvKioKKyAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9u
IHNlbGVjdG9ycyBmb3IgZm9ybWF0IGZpZWxkcworICogZGVmaW5lZCBieSBEYXRlRm9ybWF0IGFu
ZCBVRGF0ZUZvcm1hdC4KKyAqIEBzdGFibGUgSUNVIDMuMAorICovCit0eXBlZGVmIGVudW0gVURh
dGVGb3JtYXRGaWVsZCB7CisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxk
UG9zaXRpb24gc2VsZWN0b3IgZm9yICdHJyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVz
cG9uZGluZyB0byB0aGUgVUNBTF9FUkEgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisg
ICAgICovCisgICAgVURBVF9FUkFfRklFTEQgPSAwLAorCisgICAgLyoqCisgICAgICogRmllbGRQ
b3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICd5JyBmaWVsZCBhbGlnbm1l
bnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9ZRUFSIGZpZWxkLgorICAgICAq
IEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfWUVBUl9GSUVMRCA9IDEsCisKKyAg
ICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBm
b3IgJ00nIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FM
X01PTlRIIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRf
TU9OVEhfRklFTEQgPSAyLAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZp
ZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdkJyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29y
cmVzcG9uZGluZyB0byB0aGUgVUNBTF9EQVRFIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMu
MAorICAgICAqLworICAgIFVEQVRfREFURV9GSUVMRCA9IDMsCisKKyAgICAvKioKKyAgICAgKiBG
aWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ2snIGZpZWxkIGFs
aWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0hPVVJfT0ZfREFZIGZp
ZWxkLgorICAgICAqIFVEQVRfSE9VUl9PRl9EQVkxX0ZJRUxEIGlzIHVzZWQgZm9yIHRoZSBvbmUt
YmFzZWQgMjQtaG91ciBjbG9jay4KKyAgICAgKiBGb3IgZXhhbXBsZSwgMjM6NTkgKyAwMTowMCBy
ZXN1bHRzIGluIDI0OjU5LgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVE
QVRfSE9VUl9PRl9EQVkxX0ZJRUxEID0gNCwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRp
b24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnSCcgZmllbGQgYWxpZ25tZW50LAor
ICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfSE9VUl9PRl9EQVkgZmllbGQuCisgICAg
ICogVURBVF9IT1VSX09GX0RBWTBfRklFTEQgaXMgdXNlZCBmb3IgdGhlIHplcm8tYmFzZWQgMjQt
aG91ciBjbG9jay4KKyAgICAgKiBGb3IgZXhhbXBsZSwgMjM6NTkgKyAwMTowMCByZXN1bHRzIGlu
IDAwOjU5LgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfSE9VUl9P
Rl9EQVkwX0ZJRUxEID0gNSwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVG
aWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnbScgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNv
cnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfTUlOVVRFIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNV
IDMuMAorICAgICAqLworICAgIFVEQVRfTUlOVVRFX0ZJRUxEID0gNiwKKworICAgIC8qKgorICAg
ICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAncycgZmll
bGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfU0VDT05EIGZp
ZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfU0VDT05EX0ZJ
RUxEID0gNywKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0
aW9uIHNlbGVjdG9yIGZvciAnUycgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRp
bmcgdG8gdGhlIFVDQUxfTUlMTElTRUNPTkQgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4w
CisgICAgICovCisgICAgVURBVF9GUkFDVElPTkFMX1NFQ09ORF9GSUVMRCA9IDgsCisKKyAgICAv
KioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3Ig
J0UnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0RB
WV9PRl9XRUVLIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVE
QVRfREFZX09GX1dFRUtfRklFTEQgPSA5LAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlv
biBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdEJyBmaWVsZCBhbGlnbm1lbnQsCisg
ICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9EQVlfT0ZfWUVBUiBmaWVsZC4KKyAgICAg
KiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFUX0RBWV9PRl9ZRUFSX0ZJRUxEID0g
MTAsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBz
ZWxlY3RvciBmb3IgJ0YnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRv
IHRoZSBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRIIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNV
IDMuMAorICAgICAqLworICAgIFVEQVRfREFZX09GX1dFRUtfSU5fTU9OVEhfRklFTEQgPSAxMSwK
KworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVj
dG9yIGZvciAndycgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhl
IFVDQUxfV0VFS19PRl9ZRUFSIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAq
LworICAgIFVEQVRfV0VFS19PRl9ZRUFSX0ZJRUxEID0gMTIsCisKKyAgICAvKioKKyAgICAgKiBG
aWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ1cnIGZpZWxkIGFs
aWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX1dFRUtfT0ZfTU9OVEgg
ZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9XRUVLX09G
X01PTlRIX0ZJRUxEID0gMTMsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBV
RmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ2EnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBj
b3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0FNX1BNIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNV
IDMuMAorICAgICAqLworICAgIFVEQVRfQU1fUE1fRklFTEQgPSAxNCwKKworICAgIC8qKgorICAg
ICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnaCcgZmll
bGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfSE9VUiBmaWVs
ZC4KKyAgICAgKiBVREFUX0hPVVIxX0ZJRUxEIGlzIHVzZWQgZm9yIHRoZSBvbmUtYmFzZWQgMTIt
aG91ciBjbG9jay4KKyAgICAgKiBGb3IgZXhhbXBsZSwgMTE6MzAgUE0gKyAxIGhvdXIgcmVzdWx0
cyBpbiAxMjozMCBBTS4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFU
X0hPVVIxX0ZJRUxEID0gMTUsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBV
RmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ0snIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBj
b3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0hPVVIgZmllbGQuCisgICAgICogVURBVF9IT1VSMF9G
SUVMRCBpcyB1c2VkIGZvciB0aGUgemVyby1iYXNlZCAxMi1ob3VyIGNsb2NrLgorICAgICAqIEZv
ciBleGFtcGxlLCAxMTozMCBQTSArIDEgaG91ciByZXN1bHRzIGluIDAwOjMwIEFNLgorICAgICAq
IEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfSE9VUjBfRklFTEQgPSAxNiwKKwor
ICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9y
IGZvciAneicgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVD
QUxfWk9ORV9PRkZTRVQgYW5kCisgICAgICogVUNBTF9EU1RfT0ZGU0VUIGZpZWxkcy4KKyAgICAg
KiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFUX1RJTUVaT05FX0ZJRUxEID0gMTcs
CisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxl
Y3RvciBmb3IgJ1knIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRo
ZSBVQ0FMX1lFQVJfV09ZIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLwor
ICAgIFVEQVRfWUVBUl9XT1lfRklFTEQgPSAxOCwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9z
aXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnZScgZmllbGQgYWxpZ25tZW50
LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfRE9XX0xPQ0FMIGZpZWxkLgorICAg
ICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfRE9XX0xPQ0FMX0ZJRUxEID0g
MTksCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBz
ZWxlY3RvciBmb3IgJ3UnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRv
IHRoZSBVQ0FMX0VYVEVOREVEX1lFQVIgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisg
ICAgICovCisgICAgVURBVF9FWFRFTkRFRF9ZRUFSX0ZJRUxEID0gMjAsCisKKyAgICAvKioKKyAg
ICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ2cnIGZp
ZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0pVTElBTl9E
QVkgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9KVUxJ
QU5fREFZX0ZJRUxEID0gMjEsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBV
RmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ0EnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBj
b3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX01JTExJU0VDT05EU19JTl9EQVkgZmllbGQuCisgICAg
ICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9NSUxMSVNFQ09ORFNfSU5fREFZ
X0ZJRUxEID0gMjIsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQ
b3NpdGlvbiBzZWxlY3RvciBmb3IgJ1onIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNw
b25kaW5nIHRvIHRoZSBVQ0FMX1pPTkVfT0ZGU0VUIGFuZAorICAgICAqIFVDQUxfRFNUX09GRlNF
VCBmaWVsZHMuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9USU1F
Wk9ORV9SRkNfRklFTEQgPSAyMywKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5k
IFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAndicgZmllbGQgYWxpZ25tZW50LAorICAgICAq
IGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfWk9ORV9PRkZTRVQgZmllbGQuCisgICAgICogQHN0
YWJsZSBJQ1UgMy40CisgICAgICovCisgICAgVURBVF9USU1FWk9ORV9HRU5FUklDX0ZJRUxEID0g
MjQsCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ2MnIGZpZWxk
IGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSB7QGxpbmsgI1VDQUxfRE9X
X0xPQ0FMfSBmaWVsZC4KKyAgICAgKiBUaGlzIGRpc3BsYXlzIHRoZSBzdGFuZCBhbG9uZSBkYXkg
bmFtZSwgaWYgYXZhaWxhYmxlLgorICAgICAqIEBzdGFibGUgSUNVIDMuNAorICAgICAqLworICAg
IFVEQVRfU1RBTkRBTE9ORV9EQVlfRklFTEQgPSAyNSwKKworICAgIC8qKgorICAgICAqIEZpZWxk
UG9zaXRpb24gc2VsZWN0b3IgZm9yICdMJyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVz
cG9uZGluZyB0byB0aGUge0BsaW5rICNVQ0FMX01PTlRIfSBmaWVsZC4KKyAgICAgKiBUaGlzIGRp
c3BsYXlzIHRoZSBzdGFuZCBhbG9uZSBtb250aCBuYW1lLCBpZiBhdmFpbGFibGUuCisgICAgICog
QHN0YWJsZSBJQ1UgMy40CisgICAgICovCisgICAgVURBVF9TVEFOREFMT05FX01PTlRIX0ZJRUxE
ID0gMjYsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAiUSIg
ZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gcXVhcnRlcnMuIFRoaXMg
aXMgaW1wbGVtZW50ZWQKKyAgICAgKiB1c2luZyB0aGUge0BsaW5rICNVQ0FMX01PTlRIfSBmaWVs
ZC4gVGhpcworICAgICAqIGRpc3BsYXlzIHRoZSBxdWFydGVyLgorICAgICAqIEBzdGFibGUgSUNV
IDMuNgorICAgICAqLworICAgIFVEQVRfUVVBUlRFUl9GSUVMRCA9IDI3LAorCisgICAgLyoqCisg
ICAgICogRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgdGhlICJxIiBmaWVsZCBhbGlnbm1lbnQs
CisgICAgICogY29ycmVzcG9uZGluZyB0byBzdGFuZC1hbG9uZSBxdWFydGVycy4gVGhpcyBpcwor
ICAgICAqIGltcGxlbWVudGVkIHVzaW5nIHRoZSB7QGxpbmsgI1VDQUxfTU9OVEh9IGZpZWxkLgor
ICAgICAqIFRoaXMgZGlzcGxheXMgdGhlIHN0YW5kLWFsb25lIHF1YXJ0ZXIuCisgICAgICogQHN0
YWJsZSBJQ1UgMy42CisgICAgICovCisgICAgVURBVF9TVEFOREFMT05FX1FVQVJURVJfRklFTEQg
PSAyOCwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9u
IHNlbGVjdG9yIGZvciAnVicgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcg
dG8gdGhlIFVDQUxfWk9ORV9PRkZTRVQgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy44Cisg
ICAgICovCisgICAgVURBVF9USU1FWk9ORV9TUEVDSUFMX0ZJRUxEID0gMjksCisKKyAgIC8qKgor
ICAgICAqIE51bWJlciBvZiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3Rv
cnMgZm9yCisgICAgICogRGF0ZUZvcm1hdCBhbmQgVURhdGVGb3JtYXQuCisgICAgICogVmFsaWQg
c2VsZWN0b3JzIHJhbmdlIGZyb20gMCB0byBVREFUX0ZJRUxEX0NPVU5ULTEuCisgICAgICogVGhp
cyB2YWx1ZSBpcyBzdWJqZWN0IHRvIGNoYW5nZSBpZiBuZXcgZmllbGRzIGFyZSBkZWZpbmVkCisg
ICAgICogaW4gdGhlIGZ1dHVyZS4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAg
ICBVREFUX0ZJRUxEX0NPVU5UID0gMzAKKworfSBVRGF0ZUZvcm1hdEZpZWxkOworCisKKy8qKgor
ICogTWFwcyBmcm9tIGEgVURhdGVGb3JtYXRGaWVsZCB0byB0aGUgY29ycmVzcG9uZGluZyBVQ2Fs
ZW5kYXJEYXRlRmllbGRzLgorICogTm90ZTogc2luY2UgdGhlIG1hcHBpbmcgaXMgbWFueS10by1v
bmUsIHRoZXJlIGlzIG5vIGludmVyc2UgbWFwcGluZy4KKyAqIEBwYXJhbSBmaWVsZCB0aGUgVURh
dGVGb3JtYXRGaWVsZC4KKyAqIEByZXR1cm4gdGhlIFVDYWxlbmRhckRhdGVGaWVsZC4gIFRoaXMg
d2lsbCBiZSBVQ0FMX0ZJRUxEX0NPVU5UIGluIGNhc2UKKyAqIG9mIGVycm9yIChlLmcuLCB0aGUg
aW5wdXQgZmllbGQgaXMgVURBVF9GSUVMRF9DT1VOVCkuCisgKiBAc3RhYmxlIElDVSA0LjQKKyAq
LworVV9TVEFCTEUgVUNhbGVuZGFyRGF0ZUZpZWxkcyBVX0VYUE9SVDIKK3VkYXRfdG9DYWxlbmRh
ckRhdGVGaWVsZChVRGF0ZUZvcm1hdEZpZWxkIGZpZWxkKTsKKworCisvKioKKyAqIE9wZW4gYSBu
ZXcgVURhdGVGb3JtYXQgZm9yIGZvcm1hdHRpbmcgYW5kIHBhcnNpbmcgZGF0ZXMgYW5kIHRpbWVz
LgorICogQSBVRGF0ZUZvcm1hdCBtYXkgYmUgdXNlZCB0byBmb3JtYXQgZGF0ZXMgaW4gY2FsbHMg
dG8ge0BsaW5rICN1ZGF0X2Zvcm1hdCB9LAorICogYW5kIHRvIHBhcnNlIGRhdGVzIGluIGNhbGxz
IHRvIHtAbGluayAjdWRhdF9wYXJzZSB9LgorICogQHBhcmFtIHRpbWVTdHlsZSBUaGUgc3R5bGUg
dXNlZCB0byBmb3JtYXQgdGltZXM7IG9uZSBvZiBVREFUX0ZVTEwsIFVEQVRfTE9ORywKKyAqIFVE
QVRfTUVESVVNLCBVREFUX1NIT1JULCBVREFUX0RFRkFVTFQsIG9yIFVEQVRfTk9ORSAocmVsYXRp
dmUgdGltZSBzdHlsZXMKKyAqIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCkKKyAqIEBwYXJh
bSBkYXRlU3R5bGUgVGhlIHN0eWxlIHVzZWQgdG8gZm9ybWF0IGRhdGVzOyBvbmUgb2YgVURBVF9G
VUxMLCBVREFUX0xPTkcsCisgKiBVREFUX01FRElVTSwgVURBVF9TSE9SVCwgVURBVF9ERUZBVUxU
LCBVREFUX0ZVTExfUkVMQVRJVkUsIFVEQVRfTE9OR19SRUxBVElWRSwKKyAqIFVEQVRfTUVESVVN
X1JFTEFUSVZFLCBVREFUX1NIT1JUX1JFTEFUSVZFLCBvciBVREFUX05PTkUKKyAqIEBwYXJhbSBs
b2NhbGUgVGhlIGxvY2FsZSBzcGVjaWZ5aW5nIHRoZSBmb3JtYXR0aW5nIGNvbnZlbnRpb25zCisg
KiBAcGFyYW0gdHpJRCBBIHRpbWV6b25lIElEIHNwZWNpZnlpbmcgdGhlIHRpbWV6b25lIHRvIHVz
ZS4gIElmIDAsIHVzZQorICogdGhlIGRlZmF1bHQgdGltZXpvbmUuCisgKiBAcGFyYW0gdHpJRExl
bmd0aCBUaGUgbGVuZ3RoIG9mIHR6SUQsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyAqIEBw
YXJhbSBwYXR0ZXJuIEEgcGF0dGVybiBzcGVjaWZ5aW5nIHRoZSBmb3JtYXQgdG8gdXNlLgorICog
QHBhcmFtIHBhdHRlcm5MZW5ndGggVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0
ZXJuLCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRl
ciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworICogQHJldHVybiBBIHBv
aW50ZXIgdG8gYSBVRGF0ZUZvcm1hdCB0byB1c2UgZm9yIGZvcm1hdHRpbmcgZGF0ZXMgYW5kIHRp
bWVzLCBvciAwIGlmCisgKiBhbiBlcnJvciBvY2N1cnJlZC4KKyAqIEBzdGFibGUgSUNVIDIuMAor
ICovCitVX1NUQUJMRSBVRGF0ZUZvcm1hdCogVV9FWFBPUlQyIAordWRhdF9vcGVuKFVEYXRlRm9y
bWF0U3R5bGUgIHRpbWVTdHlsZSwKKyAgICAgICAgICBVRGF0ZUZvcm1hdFN0eWxlICBkYXRlU3R5
bGUsCisgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgKmxvY2FsZSwKKyAgICAgICAgICBjb25z
dCBVQ2hhciAgICAgICAqdHpJRCwKKyAgICAgICAgICBpbnQzMl90ICAgICAgICAgICB0eklETGVu
Z3RoLAorICAgICAgICAgIGNvbnN0IFVDaGFyICAgICAgICpwYXR0ZXJuLAorICAgICAgICAgIGlu
dDMyX3QgICAgICAgICAgIHBhdHRlcm5MZW5ndGgsCisgICAgICAgICAgVUVycm9yQ29kZSAgICAg
ICAgKnN0YXR1cyk7CisKKworLyoqCisqIENsb3NlIGEgVURhdGVGb3JtYXQuCisqIE9uY2UgY2xv
c2VkLCBhIFVEYXRlRm9ybWF0IG1heSBubyBsb25nZXIgYmUgdXNlZC4KKyogQHBhcmFtIGZvcm1h
dCBUaGUgZm9ybWF0dGVyIHRvIGNsb3NlLgorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJM
RSB2b2lkIFVfRVhQT1JUMiAKK3VkYXRfY2xvc2UoVURhdGVGb3JtYXQqIGZvcm1hdCk7CisKKyNp
ZiBVX1NIT1dfQ1BMVVNQTFVTX0FQSQorCitVX05BTUVTUEFDRV9CRUdJTgorCisvKioKKyAqIFxj
bGFzcyBMb2NhbFVEYXRlRm9ybWF0UG9pbnRlcgorICogIlNtYXJ0IHBvaW50ZXIiIGNsYXNzLCBj
bG9zZXMgYSBVRGF0ZUZvcm1hdCB2aWEgdWRhdF9jbG9zZSgpLgorICogRm9yIG1vc3QgbWV0aG9k
cyBzZWUgdGhlIExvY2FsUG9pbnRlckJhc2UgYmFzZSBjbGFzcy4KKyAqCisgKiBAc2VlIExvY2Fs
UG9pbnRlckJhc2UKKyAqIEBzZWUgTG9jYWxQb2ludGVyCisgKiBAc3RhYmxlIElDVSA0LjQKKyAq
LworVV9ERUZJTkVfTE9DQUxfT1BFTl9QT0lOVEVSKExvY2FsVURhdGVGb3JtYXRQb2ludGVyLCBV
RGF0ZUZvcm1hdCwgdWRhdF9jbG9zZSk7CisKK1VfTkFNRVNQQUNFX0VORAorCisjZW5kaWYKKwor
LyoqCisgKiBPcGVuIGEgY29weSBvZiBhIFVEYXRlRm9ybWF0LgorICogVGhpcyBmdW5jdGlvbiBw
ZXJmb3JtcyBhIGRlZXAgY29weS4KKyAqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdCB0byBjb3B5Cisg
KiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55
IGVycm9ycy4KKyAqIEByZXR1cm4gQSBwb2ludGVyIHRvIGEgVURhdGVGb3JtYXQgaWRlbnRpY2Fs
IHRvIGZtdC4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBVRGF0ZUZvcm1hdCog
VV9FWFBPUlQyIAordWRhdF9jbG9uZShjb25zdCBVRGF0ZUZvcm1hdCAqZm10LAorICAgICAgIFVF
cnJvckNvZGUgKnN0YXR1cyk7CisKKy8qKgorKiBGb3JtYXQgYSBkYXRlIHVzaW5nIGFuIFVEYXRl
Rm9ybWF0LgorKiBUaGUgZGF0ZSB3aWxsIGJlIGZvcm1hdHRlZCB1c2luZyB0aGUgY29udmVudGlv
bnMgc3BlY2lmaWVkIGluIHtAbGluayAjdWRhdF9vcGVuIH0KKyogQHBhcmFtIGZvcm1hdCBUaGUg
Zm9ybWF0dGVyIHRvIHVzZQorKiBAcGFyYW0gZGF0ZVRvRm9ybWF0IFRoZSBkYXRlIHRvIGZvcm1h
dAorKiBAcGFyYW0gcmVzdWx0IEEgcG9pbnRlciB0byBhIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBm
b3JtYXR0ZWQgbnVtYmVyLgorKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIFRoZSBtYXhpbXVtIHNpemUg
b2YgcmVzdWx0LgorKiBAcGFyYW0gcG9zaXRpb24gQSBwb2ludGVyIHRvIGEgVUZpZWxkUG9zaXRp
b24uICBPbiBpbnB1dCwgcG9zaXRpb24tPmZpZWxkCisqIGlzIHJlYWQuICBPbiBvdXRwdXQsIHBv
c2l0aW9uLT5iZWdpbkluZGV4IGFuZCBwb3NpdGlvbi0+ZW5kSW5kZXggaW5kaWNhdGUKKyogdGhl
IGJlZ2lubmluZyBhbmQgZW5kaW5nIGluZGljZXMgb2YgZmllbGQgbnVtYmVyIHBvc2l0aW9uLT5m
aWVsZCwgaWYgc3VjaAorKiBhIGZpZWxkIGV4aXN0cy4gIFRoaXMgcGFyYW1ldGVyIG1heSBiZSBO
VUxMLCBpbiB3aGljaCBjYXNlIG5vIGZpZWxkCisqIHBvc2l0aW9uIGRhdGEgaXMgcmV0dXJuZWQu
CisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBh
bnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3Jl
YXRlciB0aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorKiBAc2Vl
IHVkYXRfcGFyc2UKKyogQHNlZSBVRmllbGRQb3NpdGlvbgorKiBAc3RhYmxlIElDVSAyLjAKKyov
CitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VkYXRfZm9ybWF0KCAgICBjb25zdCAgICBV
RGF0ZUZvcm1hdCogICAgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgVURhdGUgICAg
ICAgICAgIGRhdGVUb0Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyKiAgICAg
ICAgICByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgcmVz
dWx0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgVUZpZWxkUG9zaXRpb24qIHBvc2l0
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSogICAgIHN0YXR1cyk7CisK
Ky8qKgorKiBQYXJzZSBhIHN0cmluZyBpbnRvIGFuIGRhdGUvdGltZSB1c2luZyBhIFVEYXRlRm9y
bWF0LgorKiBUaGUgZGF0ZSB3aWxsIGJlIHBhcnNlZCB1c2luZyB0aGUgY29udmVudGlvbnMgc3Bl
Y2lmaWVkIGluIHtAbGluayAjdWRhdF9vcGVuIH0KKyogQHBhcmFtIGZvcm1hdCBUaGUgZm9ybWF0
dGVyIHRvIHVzZS4KKyogQHBhcmFtIHRleHQgVGhlIHRleHQgdG8gcGFyc2UuCisqIEBwYXJhbSB0
ZXh0TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGV4dCwgb3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgor
KiBAcGFyYW0gcGFyc2VQb3MgSWYgbm90IDAsIG9uIGlucHV0IGEgcG9pbnRlciB0byBhbiBpbnRl
Z2VyIHNwZWNpZnlpbmcgdGhlIG9mZnNldCBhdCB3aGljaAorKiB0byBiZWdpbiBwYXJzaW5nLiAg
SWYgbm90IDAsIG9uIG91dHB1dCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHBhcnNpbmcgZW5kZWQuCisq
IEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkg
ZXJyb3JzCisqIEByZXR1cm4gVGhlIHZhbHVlIG9mIHRoZSBwYXJzZWQgZGF0ZS90aW1lCisqIEBz
ZWUgdWRhdF9mb3JtYXQKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgVURhdGUgVV9F
WFBPUlQyIAordWRhdF9wYXJzZSggICAgY29uc3QgICAgVURhdGVGb3JtYXQqICAgIGZvcm1hdCwK
KyAgICAgICAgICAgIGNvbnN0ICAgIFVDaGFyKiAgICAgICAgICB0ZXh0LAorICAgICAgICAgICAg
ICAgICAgICBpbnQzMl90ICAgICAgICAgdGV4dExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAg
aW50MzJfdCAgICAgICAgICpwYXJzZVBvcywKKyAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29k
ZSAgICAgICpzdGF0dXMpOworCisvKioKKyogUGFyc2UgYSBzdHJpbmcgaW50byBhbiBkYXRlL3Rp
bWUgdXNpbmcgYSBVRGF0ZUZvcm1hdC4KKyogVGhlIGRhdGUgd2lsbCBiZSBwYXJzZWQgdXNpbmcg
dGhlIGNvbnZlbnRpb25zIHNwZWNpZmllZCBpbiB7QGxpbmsgI3VkYXRfb3BlbiB9CisqIEBwYXJh
bSBmb3JtYXQgVGhlIGZvcm1hdHRlciB0byB1c2UuCisqIEBwYXJhbSBjYWxlbmRhciBUaGUgY2Fs
ZW5kYXIgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHBhcnNlZCBkYXRhLgorKiBAcGFyYW0gdGV4dCBU
aGUgdGV4dCB0byBwYXJzZS4KKyogQHBhcmFtIHRleHRMZW5ndGggVGhlIGxlbmd0aCBvZiB0ZXh0
LCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisqIEBwYXJhbSBwYXJzZVBvcyBJZiBub3QgMCwg
b24gaW5wdXQgYSBwb2ludGVyIHRvIGFuIGludGVnZXIgc3BlY2lmeWluZyB0aGUgb2Zmc2V0IGF0
IHdoaWNoCisqIHRvIGJlZ2luIHBhcnNpbmcuICBJZiBub3QgMCwgb24gb3V0cHV0IHRoZSBvZmZz
ZXQgYXQgd2hpY2ggcGFyc2luZyBlbmRlZC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8g
YW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHNlZSB1ZGF0X2Zvcm1hdAor
KiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VkYXRfcGFy
c2VDYWxlbmRhcihjb25zdCAgICBVRGF0ZUZvcm1hdCogICAgZm9ybWF0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFVDYWxlbmRhciogICAgICBjYWxlbmRhciwKKyAgICAgICAgICAgICAg
ICAgICBjb25zdCAgICBVQ2hhciogICAgICAgICAgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQzMl90ICAgICAgICAgdGV4dExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQzMl90ICAgICAgICAgKnBhcnNlUG9zLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVFcnJvckNvZGUgICAgICAqc3RhdHVzKTsKKworLyoqCisqIERldGVybWluZSBpZiBh
biBVRGF0ZUZvcm1hdCB3aWxsIHBlcmZvcm0gbGVuaWVudCBwYXJzaW5nLgorKiBXaXRoIGxlbmll
bnQgcGFyc2luZywgdGhlIHBhcnNlciBtYXkgdXNlIGhldXJpc3RpY3MgdG8gaW50ZXJwcmV0IGlu
cHV0cyB0aGF0IGRvIG5vdAorKiBwcmVjaXNlbHkgbWF0Y2ggdGhlIHBhdHRlcm4uIFdpdGggc3Ry
aWN0IHBhcnNpbmcsIGlucHV0cyBtdXN0IG1hdGNoIHRoZSBwYXR0ZXJuLgorKiBAcGFyYW0gZm10
IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkKKyogQHJldHVybiBUUlVFIGlmIGZtdCBpcyBzZXQgdG8g
cGVyZm9ybSBsZW5pZW50IHBhcnNpbmcsIEZBTFNFIG90aGVyd2lzZS4KKyogQHNlZSB1ZGF0X3Nl
dExlbmllbnQKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgVUJvb2wgVV9FWFBPUlQy
IAordWRhdF9pc0xlbmllbnQoY29uc3QgVURhdGVGb3JtYXQqIGZtdCk7CisKKy8qKgorKiBTcGVj
aWZ5IHdoZXRoZXIgYW4gVURhdGVGb3JtYXQgd2lsbCBwZXJmb3JtIGxlbmllbnQgcGFyc2luZy4K
KyogV2l0aCBsZW5pZW50IHBhcnNpbmcsIHRoZSBwYXJzZXIgbWF5IHVzZSBoZXVyaXN0aWNzIHRv
IGludGVycHJldCBpbnB1dHMgdGhhdCBkbyBub3QKKyogcHJlY2lzZWx5IG1hdGNoIHRoZSBwYXR0
ZXJuLiBXaXRoIHN0cmljdCBwYXJzaW5nLCBpbnB1dHMgbXVzdCBtYXRjaCB0aGUgcGF0dGVybi4K
KyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHNldAorKiBAcGFyYW0gaXNMZW5pZW50IFRS
VUUgaWYgZm10IHNob3VsZCBwZXJmb3JtIGxlbmllbnQgcGFyc2luZywgRkFMU0Ugb3RoZXJ3aXNl
LgorKiBAc2VlIGRhdF9pc0xlbmllbnQKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUg
dm9pZCBVX0VYUE9SVDIgCit1ZGF0X3NldExlbmllbnQoICAgIFVEYXRlRm9ybWF0KiAgICBmbXQs
CisgICAgICAgICAgICAgICAgICAgIFVCb29sICAgICAgICAgIGlzTGVuaWVudCk7CisKKy8qKgor
KiBHZXQgdGhlIFVDYWxlbmRhciBhc3NvY2lhdGVkIHdpdGggYW4gVURhdGVGb3JtYXQuCisqIEEg
VURhdGVGb3JtYXQgdXNlcyBhIFVDYWxlbmRhciB0byBjb252ZXJ0IGEgcmF3IHZhbHVlIHRvLCBm
b3IgZXhhbXBsZSwKKyogdGhlIGRheSBvZiB0aGUgd2Vlay4KKyogQHBhcmFtIGZtdCBUaGUgZm9y
bWF0dGVyIHRvIHF1ZXJ5LgorKiBAcmV0dXJuIEEgcG9pbnRlciB0byB0aGUgVUNhbGVuZGFyIHVz
ZWQgYnkgZm10LgorKiBAc2VlIHVkYXRfc2V0Q2FsZW5kYXIKKyogQHN0YWJsZSBJQ1UgMi4wCisq
LworVV9TVEFCTEUgY29uc3QgVUNhbGVuZGFyKiBVX0VYUE9SVDIgCit1ZGF0X2dldENhbGVuZGFy
KGNvbnN0IFVEYXRlRm9ybWF0KiBmbXQpOworCisvKioKKyogU2V0IHRoZSBVQ2FsZW5kYXIgYXNz
b2NpYXRlZCB3aXRoIGFuIFVEYXRlRm9ybWF0LgorKiBBIFVEYXRlRm9ybWF0IHVzZXMgYSBVQ2Fs
ZW5kYXIgdG8gY29udmVydCBhIHJhdyB2YWx1ZSB0bywgZm9yIGV4YW1wbGUsCisqIHRoZSBkYXkg
b2YgdGhlIHdlZWsuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBzZXQuCisqIEBwYXJh
bSBjYWxlbmRhclRvU2V0IEEgcG9pbnRlciB0byBhbiBVQ2FsZW5kYXIgdG8gYmUgdXNlZCBieSBm
bXQuCisqIEBzZWUgdWRhdF9zZXRDYWxlbmRhcgorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NU
QUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VkYXRfc2V0Q2FsZW5kYXIoICAgICAgICAgICAgVURhdGVG
b3JtYXQqICAgIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgICBVQ2FsZW5kYXIqICAg
ICAgY2FsZW5kYXJUb1NldCk7CisKKy8qKgorKiBHZXQgdGhlIFVOdW1iZXJGb3JtYXQgYXNzb2Np
YXRlZCB3aXRoIGFuIFVEYXRlRm9ybWF0LgorKiBBIFVEYXRlRm9ybWF0IHVzZXMgYSBVTnVtYmVy
Rm9ybWF0IHRvIGZvcm1hdCBudW1iZXJzIHdpdGhpbiBhIGRhdGUsCisqIGZvciBleGFtcGxlIHRo
ZSBkYXkgbnVtYmVyLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisqIEBy
ZXR1cm4gQSBwb2ludGVyIHRvIHRoZSBVTnVtYmVyRm9ybWF0IHVzZWQgYnkgZm10IHRvIGZvcm1h
dCBudW1iZXJzLgorKiBAc2VlIHVkYXRfc2V0TnVtYmVyRm9ybWF0CisqIEBzdGFibGUgSUNVIDIu
MAorKi8KK1VfU1RBQkxFIGNvbnN0IFVOdW1iZXJGb3JtYXQqIFVfRVhQT1JUMiAKK3VkYXRfZ2V0
TnVtYmVyRm9ybWF0KGNvbnN0IFVEYXRlRm9ybWF0KiBmbXQpOworCisvKioKKyogU2V0IHRoZSBV
TnVtYmVyRm9ybWF0IGFzc29jaWF0ZWQgd2l0aCBhbiBVRGF0ZUZvcm1hdC4KKyogQSBVRGF0ZUZv
cm1hdCB1c2VzIGEgVU51bWJlckZvcm1hdCB0byBmb3JtYXQgbnVtYmVycyB3aXRoaW4gYSBkYXRl
LAorKiBmb3IgZXhhbXBsZSB0aGUgZGF5IG51bWJlci4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0
dGVyIHRvIHNldC4KKyogQHBhcmFtIG51bWJlckZvcm1hdFRvU2V0IEEgcG9pbnRlciB0byB0aGUg
VU51bWJlckZvcm1hdCB0byBiZSB1c2VkIGJ5IGZtdCB0byBmb3JtYXQgbnVtYmVycy4KKyogQHNl
ZSB1ZGF0X2dldE51bWJlckZvcm1hdAorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2
b2lkIFVfRVhQT1JUMiAKK3VkYXRfc2V0TnVtYmVyRm9ybWF0KCAgICAgICAgICAgIFVEYXRlRm9y
bWF0KiAgICBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCAgIFVOdW1iZXJGb3Jt
YXQqICBudW1iZXJGb3JtYXRUb1NldCk7CisKKy8qKgorKiBHZXQgYSBsb2NhbGUgZm9yIHdoaWNo
IGRhdGUvdGltZSBmb3JtYXR0aW5nIHBhdHRlcm5zIGFyZSBhdmFpbGFibGUuCisqIEEgVURhdGVG
b3JtYXQgaW4gYSBsb2NhbGUgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiB3aWxsIHBlcmZvcm0g
dGhlIGNvcnJlY3QKKyogZm9ybWF0dGluZyBhbmQgcGFyc2luZyBmb3IgdGhlIGxvY2FsZS4KKyog
QHBhcmFtIGxvY2FsZUluZGV4IFRoZSBpbmRleCBvZiB0aGUgZGVzaXJlZCBsb2NhbGUuCisqIEBy
ZXR1cm4gQSBsb2NhbGUgZm9yIHdoaWNoIGRhdGUvdGltZSBmb3JtYXR0aW5nIHBhdHRlcm5zIGFy
ZSBhdmFpbGFibGUsIG9yIDAgaWYgbm9uZS4KKyogQHNlZSB1ZGF0X2NvdW50QXZhaWxhYmxlCisq
IEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGNvbnN0IGNoYXIqIFVfRVhQT1JUMiAKK3Vk
YXRfZ2V0QXZhaWxhYmxlKGludDMyX3QgbG9jYWxlSW5kZXgpOworCisvKioKKyogRGV0ZXJtaW5l
IGhvdyBtYW55IGxvY2FsZXMgaGF2ZSBkYXRlL3RpbWUgIGZvcm1hdHRpbmcgcGF0dGVybnMgYXZh
aWxhYmxlLgorKiBUaGlzIGZ1bmN0aW9uIGlzIG1vc3QgdXNlZnVsIGFzIGRldGVybWluaW5nIHRo
ZSBsb29wIGVuZGluZyBjb25kaXRpb24gZm9yCisqIGNhbGxzIHRvIHtAbGluayAjdWRhdF9nZXRB
dmFpbGFibGUgfS4KKyogQHJldHVybiBUaGUgbnVtYmVyIG9mIGxvY2FsZXMgZm9yIHdoaWNoIGRh
dGUvdGltZSBmb3JtYXR0aW5nIHBhdHRlcm5zIGFyZSBhdmFpbGFibGUuCisqIEBzZWUgdWRhdF9n
ZXRBdmFpbGFibGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VY
UE9SVDIgCit1ZGF0X2NvdW50QXZhaWxhYmxlKHZvaWQpOworCisvKioKKyogR2V0IHRoZSB5ZWFy
IHJlbGF0aXZlIHRvIHdoaWNoIGFsbCAyLWRpZ2l0IHllYXJzIGFyZSBpbnRlcnByZXRlZC4KKyog
Rm9yIGV4YW1wbGUsIGlmIHRoZSAyLWRpZ2l0IHN0YXJ0IHllYXIgaXMgMjEwMCwgdGhlIHllYXIg
OTkgd2lsbCBiZQorKiBpbnRlcnByZXRlZCBhcyAyMTk5LgorKiBAcGFyYW0gZm10IFRoZSBmb3Jt
YXR0ZXIgdG8gcXVlcnkuCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNv
ZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHllYXIgcmVsYXRpdmUgdG8g
d2hpY2ggYWxsIDItZGlnaXQgeWVhcnMgYXJlIGludGVycHJldGVkLgorKiBAc2VlIHVkYXRfU2V0
MkRpZ2l0WWVhclN0YXJ0CisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIFVEYXRlIFVf
RVhQT1JUMiAKK3VkYXRfZ2V0MkRpZ2l0WWVhclN0YXJ0KCAgICBjb25zdCAgIFVEYXRlRm9ybWF0
ICAgICAqZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29k
ZSAgICAgICpzdGF0dXMpOworCisvKioKKyogU2V0IHRoZSB5ZWFyIHJlbGF0aXZlIHRvIHdoaWNo
IGFsbCAyLWRpZ2l0IHllYXJzIHdpbGwgYmUgaW50ZXJwcmV0ZWQuCisqIEZvciBleGFtcGxlLCBp
ZiB0aGUgMi1kaWdpdCBzdGFydCB5ZWFyIGlzIDIxMDAsIHRoZSB5ZWFyIDk5IHdpbGwgYmUKKyog
aW50ZXJwcmV0ZWQgYXMgMjE5OS4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHNldC4K
KyogQHBhcmFtIGQgVGhlIHllYXIgcmVsYXRpdmUgdG8gd2hpY2ggYWxsIDItZGlnaXQgeWVhcnMg
d2lsbCBiZSBpbnRlcnByZXRlZC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVy
cm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHNlZSB1ZGF0X1NldDJEaWdpdFllYXJT
dGFydAorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3Vk
YXRfc2V0MkRpZ2l0WWVhclN0YXJ0KCAgICBVRGF0ZUZvcm1hdCAgICAgKmZtdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBVRGF0ZSAgICAgICAgICAgZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgKnN0YXR1cyk7CisKKy8qKgorKiBFeHRyYWN0IHRo
ZSBwYXR0ZXJuIGZyb20gYSBVRGF0ZUZvcm1hdC4KKyogVGhlIHBhdHRlcm4gd2lsbCBmb2xsb3cg
dGhlIHBhdHRlcm4gc3ludGF4IHJ1bGVzLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8g
cXVlcnkuCisqIEBwYXJhbSBsb2NhbGl6ZWQgVFJVRSBpZiB0aGUgcGF0dGVybiBzaG91bGQgYmUg
bG9jYWxpemVkLCBGQUxTRSBvdGhlcndpc2UuCisqIEBwYXJhbSByZXN1bHQgQSBwb2ludGVyIHRv
IGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIHBhdHRlcm4uCisqIEBwYXJhbSByZXN1bHRMZW5ndGgg
VGhlIG1heGltdW0gc2l6ZSBvZiByZXN1bHQuCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRv
IGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHRvdGFs
IGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91
dHB1dCB3YXMgdHJ1bmNhdGVkLgorKiBAc2VlIHVkYXRfYXBwbHlQYXR0ZXJuCisqIEBzdGFibGUg
SUNVIDIuMAorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordWRhdF90b1BhdHRlcm4o
ICAgIGNvbnN0ICAgVURhdGVGb3JtYXQgICAgICpmbXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICBVQm9vbCAgICAgICAgICBsb2NhbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICBVQ2hh
ciAgICAgICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAg
ICAgICByZXN1bHRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAg
ICAgKnN0YXR1cyk7CisKKy8qKgorKiBTZXQgdGhlIHBhdHRlcm4gdXNlZCBieSBhbiBVRGF0ZUZv
cm1hdC4KKyogVGhlIHBhdHRlcm4gc2hvdWxkIGZvbGxvdyB0aGUgcGF0dGVybiBzeW50YXggcnVs
ZXMuCisqIEBwYXJhbSBmb3JtYXQgVGhlIGZvcm1hdHRlciB0byBzZXQuCisqIEBwYXJhbSBsb2Nh
bGl6ZWQgVFJVRSBpZiB0aGUgcGF0dGVybiBpcyBsb2NhbGl6ZWQsIEZBTFNFIG90aGVyd2lzZS4K
KyogQHBhcmFtIHBhdHRlcm4gVGhlIG5ldyBwYXR0ZXJuCisqIEBwYXJhbSBwYXR0ZXJuTGVuZ3Ro
IFRoZSBsZW5ndGggb2YgcGF0dGVybiwgb3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorKiBAc2Vl
IHVkYXRfdG9QYXR0ZXJuCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIHZvaWQgVV9F
WFBPUlQyIAordWRhdF9hcHBseVBhdHRlcm4oICAgICAgICAgICAgVURhdGVGb3JtYXQgICAgICpm
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUJvb2wgICAgICAgICAgbG9jYWxp
emVkLAorICAgICAgICAgICAgICAgICAgICBjb25zdCAgIFVDaGFyICAgICAgICAgICAqcGF0dGVy
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgcGF0dGVybkxl
bmd0aCk7CisKKy8qKiAKKyAqIFRoZSBwb3NzaWJsZSB0eXBlcyBvZiBkYXRlIGZvcm1hdCBzeW1i
b2xzIAorICogQHN0YWJsZSBJQ1UgMi42CisgKi8KK3R5cGVkZWYgZW51bSBVRGF0ZUZvcm1hdFN5
bWJvbFR5cGUgeworICAgIC8qKiBUaGUgZXJhIG5hbWVzLCBmb3IgZXhhbXBsZSBBRCAqLworICAg
IFVEQVRfRVJBUywKKyAgICAvKiogVGhlIG1vbnRoIG5hbWVzLCBmb3IgZXhhbXBsZSBGZWJydWFy
eSAqLworICAgIFVEQVRfTU9OVEhTLAorICAgIC8qKiBUaGUgc2hvcnQgbW9udGggbmFtZXMsIGZv
ciBleGFtcGxlIEZlYi4gKi8KKyAgICBVREFUX1NIT1JUX01PTlRIUywKKyAgICAvKiogVGhlIHdl
ZWtkYXkgbmFtZXMsIGZvciBleGFtcGxlIE1vbmRheSAqLworICAgIFVEQVRfV0VFS0RBWVMsCisg
ICAgLyoqIFRoZSBzaG9ydCB3ZWVrZGF5IG5hbWVzLCBmb3IgZXhhbXBsZSBNb24uICovCisgICAg
VURBVF9TSE9SVF9XRUVLREFZUywKKyAgICAvKiogVGhlIEFNL1BNIG5hbWVzLCBmb3IgZXhhbXBs
ZSBBTSAqLworICAgIFVEQVRfQU1fUE1TLAorICAgIC8qKiBUaGUgbG9jYWxpemVkIGNoYXJhY3Rl
cnMgKi8KKyAgICBVREFUX0xPQ0FMSVpFRF9DSEFSUywKKyAgICAvKiogVGhlIGxvbmcgZXJhIG5h
bWVzLCBmb3IgZXhhbXBsZSBBbm5vIERvbWluaSAqLworICAgIFVEQVRfRVJBX05BTUVTLAorICAg
IC8qKiBUaGUgbmFycm93IG1vbnRoIG5hbWVzLCBmb3IgZXhhbXBsZSBGICovCisgICAgVURBVF9O
QVJST1dfTU9OVEhTLAorICAgIC8qKiBUaGUgbmFycm93IHdlZWtkYXkgbmFtZXMsIGZvciBleGFt
cGxlIE4gKi8KKyAgICBVREFUX05BUlJPV19XRUVLREFZUywKKyAgICAvKiogU3RhbmRhbG9uZSBj
b250ZXh0IHZlcnNpb25zIG9mIG1vbnRocyAqLworICAgIFVEQVRfU1RBTkRBTE9ORV9NT05USFMs
CisgICAgVURBVF9TVEFOREFMT05FX1NIT1JUX01PTlRIUywKKyAgICBVREFUX1NUQU5EQUxPTkVf
TkFSUk9XX01PTlRIUywKKyAgICAvKiogU3RhbmRhbG9uZSBjb250ZXh0IHZlcnNpb25zIG9mIHdl
ZWtkYXlzICovCisgICAgVURBVF9TVEFOREFMT05FX1dFRUtEQVlTLAorICAgIFVEQVRfU1RBTkRB
TE9ORV9TSE9SVF9XRUVLREFZUywKKyAgICBVREFUX1NUQU5EQUxPTkVfTkFSUk9XX1dFRUtEQVlT
LAorICAgIC8qKiBUaGUgcXVhcnRlcnMsIGZvciBleGFtcGxlIDFzdCBRdWFydGVyICovCisgICAg
VURBVF9RVUFSVEVSUywKKyAgICAvKiogVGhlIHNob3J0IHF1YXJ0ZXIgbmFtZXMsIGZvciBleGFt
cGxlIFExICovCisgICAgVURBVF9TSE9SVF9RVUFSVEVSUywKKyAgICAvKiogU3RhbmRhbG9uZSBj
b250ZXh0IHZlcnNpb25zIG9mIHF1YXJ0ZXJzICovCisgICAgVURBVF9TVEFOREFMT05FX1FVQVJU
RVJTLAorICAgIFVEQVRfU1RBTkRBTE9ORV9TSE9SVF9RVUFSVEVSUworCit9IFVEYXRlRm9ybWF0
U3ltYm9sVHlwZTsKKworc3RydWN0IFVEYXRlRm9ybWF0U3ltYm9sczsKKy8qKiBEYXRlIGZvcm1h
dCBzeW1ib2xzLgorICogIEZvciB1c2FnZSBpbiBDIHByb2dyYW1zLgorICogIEBzdGFibGUgSUNV
IDIuNgorICovCit0eXBlZGVmIHN0cnVjdCBVRGF0ZUZvcm1hdFN5bWJvbHMgVURhdGVGb3JtYXRT
eW1ib2xzOworCisvKioKKyogR2V0IHRoZSBzeW1ib2xzIGFzc29jaWF0ZWQgd2l0aCBhbiBVRGF0
ZUZvcm1hdC4KKyogVGhlIHN5bWJvbHMgYXJlIHdoYXQgYSBVRGF0ZUZvcm1hdCB1c2VzIHRvIHJl
cHJlc2VudCBsb2NhbGUtc3BlY2lmaWMgZGF0YSwKKyogZm9yIGV4YW1wbGUgbW9udGggb3IgZGF5
IG5hbWVzLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisqIEBwYXJhbSB0
eXBlIFRoZSB0eXBlIG9mIHN5bWJvbHMgdG8gZ2V0LiAgT25lIG9mIFVEQVRfRVJBUywgVURBVF9N
T05USFMsIFVEQVRfU0hPUlRfTU9OVEhTLAorKiBVREFUX1dFRUtEQVlTLCBVREFUX1NIT1JUX1dF
RUtEQVlTLCBVREFUX0FNX1BNUywgb3IgVURBVF9MT0NBTElaRURfQ0hBUlMKKyogQHBhcmFtIHN5
bWJvbEluZGV4IFRoZSBkZXNpcmVkIHN5bWJvbCBvZiB0eXBlIHR5cGUuCisqIEBwYXJhbSByZXN1
bHQgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIHBhdHRlcm4uCisqIEBwYXJh
bSByZXN1bHRMZW5ndGggVGhlIG1heGltdW0gc2l6ZSBvZiByZXN1bHQuCisqIEBwYXJhbSBzdGF0
dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEBy
ZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3Vs
dExlbmd0aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorKiBAc2VlIHVkYXRfY291bnRTeW1i
b2xzCisqIEBzZWUgdWRhdF9zZXRTeW1ib2xzCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RB
QkxFIGludDMyX3QgVV9FWFBPUlQyIAordWRhdF9nZXRTeW1ib2xzKGNvbnN0ICAgVURhdGVGb3Jt
YXQgICAgICAgICAgICAgKmZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFVEYXRlRm9ybWF0
U3ltYm9sVHlwZSAgIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAg
ICAgICAgICAgICBzeW1ib2xJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyICAg
ICAgICAgICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90
ICAgICAgICAgICAgICAgICByZXN1bHRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBV
RXJyb3JDb2RlICAgICAgICAgICAgICAqc3RhdHVzKTsKKworLyoqCisqIENvdW50IHRoZSBudW1i
ZXIgb2YgcGFydGljdWxhciBzeW1ib2xzIGZvciBhbiBVRGF0ZUZvcm1hdC4KKyogVGhpcyBmdW5j
dGlvbiBpcyBtb3N0IHVzZWZ1bCBhcyBmb3IgZGV0ZW1pbmluZyB0aGUgbG9vcCB0ZXJtaW5hdGlv
biBjb25kaXRpb24KKyogZm9yIGNhbGxzIHRvIHtAbGluayAjdWRhdF9nZXRTeW1ib2xzIH0uCisq
IEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBxdWVyeS4KKyogQHBhcmFtIHR5cGUgVGhlIHR5
cGUgb2Ygc3ltYm9scyB0byBjb3VudC4gIE9uZSBvZiBVREFUX0VSQVMsIFVEQVRfTU9OVEhTLCBV
REFUX1NIT1JUX01PTlRIUywKKyogVURBVF9XRUVLREFZUywgVURBVF9TSE9SVF9XRUVLREFZUywg
VURBVF9BTV9QTVMsIG9yIFVEQVRfTE9DQUxJWkVEX0NIQVJTCisqIEByZXR1cm4gVGhlIG51bWJl
ciBvZiBzeW1ib2xzIG9mIHR5cGUgdHlwZS4KKyogQHNlZSB1ZGF0X2dldFN5bWJvbHMKKyogQHNl
ZSB1ZGF0X3NldFN5bWJvbHMKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJf
dCBVX0VYUE9SVDIgCit1ZGF0X2NvdW50U3ltYm9scyggICAgY29uc3QgICAgVURhdGVGb3JtYXQg
ICAgICAgICAgICAgICAgKmZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRGF0ZUZv
cm1hdFN5bWJvbFR5cGUgICAgdHlwZSk7CisKKy8qKgorKiBTZXQgdGhlIHN5bWJvbHMgYXNzb2Np
YXRlZCB3aXRoIGFuIFVEYXRlRm9ybWF0LgorKiBUaGUgc3ltYm9scyBhcmUgd2hhdCBhIFVEYXRl
Rm9ybWF0IHVzZXMgdG8gcmVwcmVzZW50IGxvY2FsZS1zcGVjaWZpYyBkYXRhLAorKiBmb3IgZXhh
bXBsZSBtb250aCBvciBkYXkgbmFtZXMuCisqIEBwYXJhbSBmb3JtYXQgVGhlIGZvcm1hdHRlciB0
byBzZXQKKyogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2Ygc3ltYm9scyB0byBzZXQuICBPbmUgb2Yg
VURBVF9FUkFTLCBVREFUX01PTlRIUywgVURBVF9TSE9SVF9NT05USFMsCisqIFVEQVRfV0VFS0RB
WVMsIFVEQVRfU0hPUlRfV0VFS0RBWVMsIFVEQVRfQU1fUE1TLCBvciBVREFUX0xPQ0FMSVpFRF9D
SEFSUworKiBAcGFyYW0gc3ltYm9sSW5kZXggVGhlIGluZGV4IG9mIHRoZSBzeW1ib2wgdG8gc2V0
IG9mIHR5cGUgdHlwZS4KKyogQHBhcmFtIHZhbHVlIFRoZSBuZXcgdmFsdWUKKyogQHBhcmFtIHZh
bHVlTGVuZ3RoIFRoZSBsZW5ndGggb2YgdmFsdWUsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZAor
KiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55
IGVycm9ycworKiBAc2VlIHVkYXRfZ2V0U3ltYm9scworKiBAc2VlIHVkYXRfY291bnRTeW1ib2xz
CisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWRhdF9z
ZXRTeW1ib2xzKCAgICBVRGF0ZUZvcm1hdCAgICAgICAgICAgICAqZm9ybWF0LAorICAgICAgICAg
ICAgICAgICAgICBVRGF0ZUZvcm1hdFN5bWJvbFR5cGUgICB0eXBlLAorICAgICAgICAgICAgICAg
ICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBzeW1ib2xJbmRleCwKKyAgICAgICAgICAgICAg
ICAgICAgVUNoYXIgICAgICAgICAgICAgICAgICAgKnZhbHVlLAorICAgICAgICAgICAgICAgICAg
ICBpbnQzMl90ICAgICAgICAgICAgICAgICB2YWx1ZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAg
ICAgVUVycm9yQ29kZSAgICAgICAgICAgICAgKnN0YXR1cyk7CisKKy8qKgorICogR2V0IHRoZSBs
b2NhbGUgZm9yIHRoaXMgZGF0ZSBmb3JtYXQgb2JqZWN0LgorICogWW91IGNhbiBjaG9vc2UgYmV0
d2VlbiB2YWxpZCBhbmQgYWN0dWFsIGxvY2FsZS4KKyAqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRl
ciB0byBnZXQgdGhlIGxvY2FsZSBmcm9tCisgKiBAcGFyYW0gdHlwZSB0eXBlIG9mIHRoZSBsb2Nh
bGUgd2UncmUgbG9va2luZyBmb3IgKHZhbGlkIG9yIGFjdHVhbCkgCisgKiBAcGFyYW0gc3RhdHVz
IGVycm9yIGNvZGUgZm9yIHRoZSBvcGVyYXRpb24KKyAqIEByZXR1cm4gdGhlIGxvY2FsZSBuYW1l
CisgKiBAc3RhYmxlIElDVSAyLjgKKyAqLworVV9TVEFCTEUgY29uc3QgY2hhciogVV9FWFBPUlQy
Cit1ZGF0X2dldExvY2FsZUJ5VHlwZShjb25zdCBVRGF0ZUZvcm1hdCAqZm10LAorICAgICAgICAg
ICAgICAgICAgICAgVUxvY0RhdGFMb2NhbGVUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAg
ICBVRXJyb3JDb2RlKiBzdGF0dXMpOyAKKworLyoqCisqIEV4dHJhY3QgdGhlIGRhdGUgcGF0dGVy
biBmcm9tIGEgVURhdGVGb3JtYXQgc2V0IGZvciByZWxhdGl2ZSBkYXRlIGZvcm1hdHRpbmcuCisq
IFRoZSBwYXR0ZXJuIHdpbGwgZm9sbG93IHRoZSBwYXR0ZXJuIHN5bnRheCBydWxlcy4KKyogQHBh
cmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHF1ZXJ5LgorKiBAcGFyYW0gcmVzdWx0IEEgcG9pbnRl
ciB0byBhIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBwYXR0ZXJuLgorKiBAcGFyYW0gcmVzdWx0TGVu
Z3RoIFRoZSBtYXhpbXVtIHNpemUgb2YgcmVzdWx0LgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRl
ciB0byBhIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHRv
dGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwgdGhl
IG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorKiBAc2VlIHVkYXRfYXBwbHlQYXR0ZXJuUmVsYXRpdmUK
KyogQGludGVybmFsIElDVSA0LjIgdGVjaG5vbG9neSBwcmV2aWV3CisqLworVV9JTlRFUk5BTCBp
bnQzMl90IFVfRVhQT1JUMiAKK3VkYXRfdG9QYXR0ZXJuUmVsYXRpdmVEYXRlKGNvbnN0IFVEYXRl
Rm9ybWF0ICpmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhciAgICAgICAgICAg
ICAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAg
cmVzdWx0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAg
ICAgKnN0YXR1cyk7CisKKy8qKgorKiBFeHRyYWN0IHRoZSB0aW1lIHBhdHRlcm4gZnJvbSBhIFVE
YXRlRm9ybWF0IHNldCBmb3IgcmVsYXRpdmUgZGF0ZSBmb3JtYXR0aW5nLgorKiBUaGUgcGF0dGVy
biB3aWxsIGZvbGxvdyB0aGUgcGF0dGVybiBzeW50YXggcnVsZXMuCisqIEBwYXJhbSBmbXQgVGhl
IGZvcm1hdHRlciB0byBxdWVyeS4KKyogQHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8gYSBidWZm
ZXIgdG8gcmVjZWl2ZSB0aGUgcGF0dGVybi4KKyogQHBhcmFtIHJlc3VsdExlbmd0aCBUaGUgbWF4
aW11bSBzaXplIG9mIHJlc3VsdC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYSBVRXJy
b3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAcmV0dXJuIFRoZSB0b3RhbCBidWZmZXIg
c2l6ZSBuZWVkZWQ7IGlmIGdyZWF0ZXIgdGhhbiByZXN1bHRMZW5ndGgsIHRoZSBvdXRwdXQgd2Fz
IHRydW5jYXRlZC4KKyogQHNlZSB1ZGF0X2FwcGx5UGF0dGVyblJlbGF0aXZlCisqIEBpbnRlcm5h
bCBJQ1UgNC4yIHRlY2hub2xvZ3kgcHJldmlldworKi8KK1VfSU5URVJOQUwgaW50MzJfdCBVX0VY
UE9SVDIgCit1ZGF0X3RvUGF0dGVyblJlbGF0aXZlVGltZShjb25zdCBVRGF0ZUZvcm1hdCAqZm10
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIgICAgICAgICAgICAgKnJlc3VsdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgIHJlc3VsdExlbmd0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgICAgICpzdGF0dXMp
OworCisvKioKKyogU2V0IHRoZSBkYXRlICYgdGltZSBwYXR0ZXJucyB1c2VkIGJ5IGEgVURhdGVG
b3JtYXQgc2V0IGZvciByZWxhdGl2ZSBkYXRlIGZvcm1hdHRpbmcuCisqIFRoZSBwYXR0ZXJucyBz
aG91bGQgZm9sbG93IHRoZSBwYXR0ZXJuIHN5bnRheCBydWxlcy4KKyogQHBhcmFtIGZvcm1hdCBU
aGUgZm9ybWF0dGVyIHRvIHNldC4KKyogQHBhcmFtIGRhdGVQYXR0ZXJuIFRoZSBuZXcgZGF0ZSBw
YXR0ZXJuCisqIEBwYXJhbSBkYXRlUGF0dGVybkxlbmd0aCBUaGUgbGVuZ3RoIG9mIGRhdGVQYXR0
ZXJuLCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisqIEBwYXJhbSB0aW1lUGF0dGVybiBUaGUg
bmV3IHRpbWUgcGF0dGVybgorKiBAcGFyYW0gdGltZVBhdHRlcm5MZW5ndGggVGhlIGxlbmd0aCBv
ZiB0aW1lUGF0dGVybiwgb3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorKiBAcGFyYW0gc3RhdHVz
IEEgcG9pbnRlciB0byBhIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEBzZWUg
dWRhdF90b1BhdHRlcm5SZWxhdGl2ZURhdGUsIHVkYXRfdG9QYXR0ZXJuUmVsYXRpdmVUaW1lCisq
IEBpbnRlcm5hbCBJQ1UgNC4yIHRlY2hub2xvZ3kgcHJldmlldworKi8KK1VfSU5URVJOQUwgdm9p
ZCBVX0VYUE9SVDIgCit1ZGF0X2FwcGx5UGF0dGVyblJlbGF0aXZlKFVEYXRlRm9ybWF0ICpmb3Jt
YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICpkYXRlUGF0dGVybiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgZGF0ZVBhdHRlcm5MZW5ndGgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICp0aW1lUGF0dGVybiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgdGltZVBhdHRlcm5MZW5ndGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICpzdGF0dXMpOworCisKKyNlbmRp
ZiAvKiAjaWYgIVVDT05GSUdfTk9fRk9STUFUVElORyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29kZS91bWlzYy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ljdS91bmljb2RlL3VtaXNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDg1NDUxZmM3NjdjMDU4
MzVmNmMxNWY1NjZmMzU2MmUyZDRhZjgzNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pY3UvdW5pY29kZS91bWlzYy5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqCisqICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIEludGVybmF0aW9uYWwgQnVz
aW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioKKyogICBmaWxlIG5hbWU6ICB1bWlzYy5oCisqICAgZW5j
b2Rpbmc6ICAgVVMtQVNDSUkKKyogICB0YWIgc2l6ZTogICA4IChub3QgdXNlZCkKKyogICBpbmRl
bnRhdGlvbjo0CisqCisqICAgY3JlYXRlZCBvbjogMTk5OW9jdDE1CisqICAgY3JlYXRlZCBieTog
TWFya3VzIFcuIFNjaGVyZXIKKyovCisKKyNpZm5kZWYgVU1JU0NfSAorI2RlZmluZSBVTUlTQ19I
CisKKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorCisvKioKKyAqIFxmaWxlCisgKiBcYnJp
ZWYgIEMgQVBJOm1pc2MgZGVmaW5pdGlvbnMgCisgKgorICogIFRoaXMgZmlsZSBjb250YWlucyBt
aXNjZWxsYW5lb3VzIGRlZmluaXRpb25zIGZvciB0aGUgQyBBUElzLiAKKyAqLworCitVX0NERUNM
X0JFR0lOCisKKy8qKiBBIHN0cnVjdCByZXByZXNlbnRpbmcgYSByYW5nZSBvZiB0ZXh0IGNvbnRh
aW5pbmcgYSBzcGVjaWZpYyBmaWVsZCAKKyAqICBAc3RhYmxlIElDVSAyLjAKKyAqLwordHlwZWRl
ZiBzdHJ1Y3QgVUZpZWxkUG9zaXRpb24geworICAvKioKKyAgICogVGhlIGZpZWxkIAorICAgKiBA
c3RhYmxlIElDVSAyLjAKKyAgICovCisgIGludDMyX3QgZmllbGQ7CisgIC8qKgorICAgKiBUaGUg
c3RhcnQgb2YgdGhlIHRleHQgcmFuZ2UgY29udGFpbmluZyBmaWVsZCAKKyAgICogQHN0YWJsZSBJ
Q1UgMi4wCisgICAqLworICBpbnQzMl90IGJlZ2luSW5kZXg7CisgIC8qKiAKKyAgICogVGhlIGxp
bWl0IG9mIHRoZSB0ZXh0IHJhbmdlIGNvbnRhaW5pbmcgZmllbGQgCisgICAqIEBzdGFibGUgSUNV
IDIuMAorICAgKi8KKyAgaW50MzJfdCBlbmRJbmRleDsKK30gVUZpZWxkUG9zaXRpb247CisKKyNp
ZiAhVUNPTkZJR19OT19TRVJWSUNFCisvKioKKyAqIE9wYXF1ZSB0eXBlIHJldHVybmVkIGJ5IHJl
Z2lzdGVySW5zdGFuY2UsIHJlZ2lzdGVyRmFjdG9yeSBhbmQgdW5yZWdpc3RlciBmb3Igc2Vydmlj
ZSByZWdpc3RyYXRpb24uCisgKiBAc3RhYmxlIElDVSAyLjYKKyAqLwordHlwZWRlZiBjb25zdCB2
b2lkKiBVUmVnaXN0cnlLZXk7CisjZW5kaWYKKworVV9DREVDTF9FTkQKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdW51bS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3VudW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMTAyYmFiNThi
M2QxYmIyZTJiMjA4MmNiNTU4OWM1ZGRlZmU4Y2MwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3VudW0uaApAQCAtMCwwICsxLDk5OSBAQAorLyoK
KyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAxOTk3LTIwMTAsIEludGVy
bmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyogQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyogTW9kaWZpY2F0aW9uIEhpc3Rvcnk6CisqCisqICAgRGF0ZSAg
ICAgICAgTmFtZSAgICAgICAgRGVzY3JpcHRpb24KKyogICAwNi8yNC85OSAgICBoZWxlbmEgICAg
ICBJbnRlZ3JhdGVkIEFsYW4ncyBORiBlbmhhbmNlbWVudHMgYW5kIEphdmEyIGJ1ZyBmaXhlcwor
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2lmbmRlZiBfVU5VTQorI2RlZmluZSBfVU5V
TQorCisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKworI2lmICFVQ09ORklHX05PX0ZPUk1B
VFRJTkcKKworI2luY2x1ZGUgInVuaWNvZGUvbG9jYWxwb2ludGVyLmgiCisjaW5jbHVkZSAidW5p
Y29kZS91bG9jLmgiCisjaW5jbHVkZSAidW5pY29kZS91bWlzYy5oIgorI2luY2x1ZGUgInVuaWNv
ZGUvcGFyc2VlcnIuaCIKKy8qKgorICogXGZpbGUKKyAqIFxicmllZiBDIEFQSTogTnVtYmVyRm9y
bWF0CisgKgorICogPGgyPiBOdW1iZXIgRm9ybWF0IEMgQVBJIDwvaDI+CisgKgorICogTnVtYmVy
IEZvcm1hdCBDIEFQSSAgUHJvdmlkZXMgZnVuY3Rpb25zIGZvcgorICogZm9ybWF0dGluZyBhbmQg
cGFyc2luZyBhIG51bWJlci4gIEFsc28gcHJvdmlkZXMgbWV0aG9kcyBmb3IKKyAqIGRldGVybWlu
aW5nIHdoaWNoIGxvY2FsZXMgaGF2ZSBudW1iZXIgZm9ybWF0cywgYW5kIHdoYXQgdGhlaXIgbmFt
ZXMKKyAqIGFyZS4KKyAqIDxQPgorICogVU51bWJlckZvcm1hdCBoZWxwcyB5b3UgdG8gZm9ybWF0
IGFuZCBwYXJzZSBudW1iZXJzIGZvciBhbnkgbG9jYWxlLgorICogWW91ciBjb2RlIGNhbiBiZSBj
b21wbGV0ZWx5IGluZGVwZW5kZW50IG9mIHRoZSBsb2NhbGUgY29udmVudGlvbnMKKyAqIGZvciBk
ZWNpbWFsIHBvaW50cywgdGhvdXNhbmRzLXNlcGFyYXRvcnMsIG9yIGV2ZW4gdGhlIHBhcnRpY3Vs
YXIKKyAqIGRlY2ltYWwgZGlnaXRzIHVzZWQsIG9yIHdoZXRoZXIgdGhlIG51bWJlciBmb3JtYXQg
aXMgZXZlbiBkZWNpbWFsLgorICogVGhlcmUgYXJlIGRpZmZlcmVudCBudW1iZXIgZm9ybWF0IHN0
eWxlcyBsaWtlIGRlY2ltYWwsIGN1cnJlbmN5LAorICogcGVyY2VudCBhbmQgc3BlbGxvdXQuCisg
KiA8UD4KKyAqIFRvIGZvcm1hdCBhIG51bWJlciBmb3IgdGhlIGN1cnJlbnQgTG9jYWxlLCB1c2Ug
b25lIG9mIHRoZSBzdGF0aWMKKyAqIGZhY3RvcnkgbWV0aG9kczoKKyAqIDxwcmU+CisgKiBcY29k
ZQorICogICAgVUNoYXIgbXlTdHJpbmdbMjBdOworICogICAgZG91YmxlIG15TnVtYmVyID0gNy4w
OworICogICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgKiAgICBVTnVtYmVy
Rm9ybWF0KiBuZiA9IHVudW1fb3BlbihVTlVNX0RFRkFVTFQsIE5VTEwsIC0xLCBOVUxMLCBOVUxM
LCAmc3RhdHVzKTsKKyAqICAgIHVudW1fZm9ybWF0RG91YmxlKG5mLCBteU51bWJlciwgbXlTdHJp
bmcsIDIwLCBOVUxMLCAmc3RhdHVzKTsKKyAqICAgIHByaW50ZigiIEV4YW1wbGUgMTogJXNcbiIs
IGF1c3RyZHVwKG15U3RyaW5nKSApOyAvL2F1c3RyZHVwKCBhIGZ1bmN0aW9uIHVzZWQgdG8gY29u
dmVydCBVQ2hhciogdG8gY2hhciopCisgKiBcZW5kY29kZQorICogPC9wcmU+CisgKiBJZiB5b3Ug
YXJlIGZvcm1hdHRpbmcgbXVsdGlwbGUgbnVtYmVycywgaXQgaXMgbW9yZSBlZmZpY2llbnQgdG8g
Z2V0CisgKiB0aGUgZm9ybWF0IGFuZCB1c2UgaXQgbXVsdGlwbGUgdGltZXMgc28gdGhhdCB0aGUg
c3lzdGVtIGRvZXNuJ3QKKyAqIGhhdmUgdG8gZmV0Y2ggdGhlIGluZm9ybWF0aW9uIGFib3V0IHRo
ZSBsb2NhbCBsYW5ndWFnZSBhbmQgY291bnRyeQorICogY29udmVudGlvbnMgbXVsdGlwbGUgdGlt
ZXMuCisgKiA8cHJlPgorICogXGNvZGUKKyAqIHVpbnQzMl90IGksIHJlc3VsdGxlbmd0aCwgcmVz
bGVubmVlZGVkOworICogVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgKiBVRmll
bGRQb3NpdGlvbiBwb3M7CisgKiB1aW50MzJfdCBhW10gPSB7IDEyMywgMzMzMywgLTEyMzQ1Njcg
fTsKKyAqIGNvbnN0IHVpbnQzMl90IGFfbGVuID0gc2l6ZW9mKGEpIC8gc2l6ZW9mKGFbMF0pOwor
ICogVU51bWJlckZvcm1hdCogbmY7CisgKiBVQ2hhciogcmVzdWx0ID0gTlVMTDsKKyAqCisgKiBu
ZiA9IHVudW1fb3BlbihVTlVNX0RFRkFVTFQsIE5VTEwsIC0xLCBOVUxMLCBOVUxMLCAmc3RhdHVz
KTsKKyAqIGZvciAoaSA9IDA7IGkgPCBhX2xlbjsgaSsrKSB7CisgKiAgICByZXN1bHRsZW5ndGg9
MDsKKyAqICAgIHJlc2xlbm5lZWRlZD11bnVtX2Zvcm1hdChuZiwgYVtpXSwgTlVMTCwgcmVzdWx0
bGVuZ3RoLCAmcG9zLCAmc3RhdHVzKTsKKyAqICAgIHJlc3VsdCA9IE5VTEw7CisgKiAgICBpZihz
dGF0dXM9PVVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKXsKKyAqICAgICAgIHN0YXR1cz1VX1pFUk9f
RVJST1I7CisgKiAgICAgICByZXN1bHRsZW5ndGg9cmVzbGVubmVlZGVkKzE7CisgKiAgICAgICBy
ZXN1bHQ9KFVDaGFyKiltYWxsb2Moc2l6ZW9mKFVDaGFyKSAqIHJlc3VsdGxlbmd0aCk7CisgKiAg
ICAgICB1bnVtX2Zvcm1hdChuZiwgYVtpXSwgcmVzdWx0LCByZXN1bHRsZW5ndGgsICZwb3MsICZz
dGF0dXMpOworICogICAgfQorICogICAgcHJpbnRmKCAiIEV4YW1wbGUgMjogJXNcbiIsIGF1c3Ry
ZHVwKHJlc3VsdCkpOworICogICAgZnJlZShyZXN1bHQpOworICogfQorICogXGVuZGNvZGUKKyAq
IDwvcHJlPgorICogVG8gZm9ybWF0IGEgbnVtYmVyIGZvciBhIGRpZmZlcmVudCBMb2NhbGUsIHNw
ZWNpZnkgaXQgaW4gdGhlCisgKiBjYWxsIHRvIHVudW1fb3BlbigpLgorICogPHByZT4KKyAqIFxj
b2RlCisgKiAgICAgVU51bWJlckZvcm1hdCogbmYgPSB1bnVtX29wZW4oVU5VTV9ERUZBVUxULCBO
VUxMLCAtMSwgImZyX0ZSIiwgTlVMTCwgJnN1Y2Nlc3MpCisgKiBcZW5kY29kZQorICogPC9wcmU+
CisgKiBZb3UgY2FuIHVzZSBhIE51bWJlckZvcm1hdCBBUEkgdW51bV9wYXJzZSgpIHRvIHBhcnNl
LgorICogPHByZT4KKyAqIFxjb2RlCisgKiAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19F
UlJPUjsKKyAqICAgIGludDMyX3QgcG9zPTA7CisgKiAgICBpbnQzMl90IG51bTsKKyAqICAgIG51
bSA9IHVudW1fcGFyc2UobmYsIHN0ciwgdV9zdHJsZW4oc3RyKSwgJnBvcywgJnN0YXR1cyk7Cisg
KiBcZW5kY29kZQorICogPC9wcmU+CisgKiBVc2UgVU5VTV9ERUNJTUFMIHRvIGdldCB0aGUgbm9y
bWFsIG51bWJlciBmb3JtYXQgZm9yIHRoYXQgY291bnRyeS4KKyAqIFRoZXJlIGFyZSBvdGhlciBz
dGF0aWMgb3B0aW9ucyBhdmFpbGFibGUuICBVc2UgVU5VTV9DVVJSRU5DWQorICogdG8gZ2V0IHRo
ZSBjdXJyZW5jeSBudW1iZXIgZm9ybWF0IGZvciB0aGF0IGNvdW50cnkuICBVc2UgVU5VTV9QRVJD
RU5UCisgKiB0byBnZXQgYSBmb3JtYXQgZm9yIGRpc3BsYXlpbmcgcGVyY2VudGFnZXMuIFdpdGgg
dGhpcyBmb3JtYXQsIGEKKyAqIGZyYWN0aW9uIGZyb20gMC41MyBpcyBkaXNwbGF5ZWQgYXMgNTMl
LgorICogPFA+CisgKiBVc2UgYSBwYXR0ZXJuIHRvIGNyZWF0ZSBlaXRoZXIgYSBEZWNpbWFsRm9y
bWF0IG9yIGEgUnVsZUJhc2VkTnVtYmVyRm9ybWF0CisgKiBmb3JtYXR0ZXIuICBUaGUgcGF0dGVy
biBtdXN0IGNvbmZvcm0gdG8gdGhlIHN5bnRheCBkZWZpbmVkIGZvciB0aG9zZQorICogZm9ybWF0
dGVycy4KKyAqIDxQPgorICogWW91IGNhbiBhbHNvIGNvbnRyb2wgdGhlIGRpc3BsYXkgb2YgbnVt
YmVycyB3aXRoIHN1Y2ggZnVuY3Rpb24gYXMKKyAqIHVudW1fZ2V0QXR0cmlidWVzKCkgYW5kIHVu
dW1fc2V0QXRyaWJ1dGVzKCksIHdoaWNoIGxldCB5b3Ugc2V0IHRoZQorICogbWltaW51bSBmcmFj
dGlvbiBkaWdpdHMsIGdyb3VwaW5nLCBldGMuCisgKiBAc2VlIFVOdW1iZXJGb3JtYXRBdHRyaWJ1
dGVzIGZvciBtb3JlIGRldGFpbHMKKyAqIDxQPgorICogWW91IGNhbiBhbHNvIHVzZSBmb3JtcyBv
ZiB0aGUgcGFyc2UgYW5kIGZvcm1hdCBtZXRob2RzIHdpdGgKKyAqIFBhcnNlUG9zaXRpb24gYW5k
IFVGaWVsZFBvc2l0aW9uIHRvIGFsbG93IHlvdSB0bzoKKyAqIDx1bCB0eXBlPXJvdW5kPgorICog
ICA8bGk+KGEpIHByb2dyZXNzaXZlbHkgcGFyc2UgdGhyb3VnaCBwaWVjZXMgb2YgYSBzdHJpbmcu
CisgKiAgIDxsaT4oYikgYWxpZ24gdGhlIGRlY2ltYWwgcG9pbnQgYW5kIG90aGVyIGFyZWFzLgor
ICogPC91bD4KKyAqIDxwPgorICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjaGFuZ2Ugb3Igc2V0
IHRoZSBzeW1ib2xzIHVzZWQgZm9yIGEgcGFydGljdWxhcgorICogbG9jYWxlIGxpa2UgdGhlIGN1
cnJlbmN5IHN5bWJvbCwgdGhlIGdyb3VwaW5nIHNlcGVyYXRvciAsIG1vbmV0YXJ5IHNlcGVyYXRv
cgorICogZXRjIGJ5IG1ha2luZyB1c2Ugb2YgZnVuY3Rpb25zIHVudW1fc2V0U3ltYm9scygpIGFu
ZCB1bnVtX2dldFN5bWJvbHMoKS4KKyAqLworCisvKiogQSBudW1iZXIgZm9ybWF0dGVyLgorICog
IEZvciB1c2FnZSBpbiBDIHByb2dyYW1zLgorICogIEBzdGFibGUgSUNVIDIuMAorICovCit0eXBl
ZGVmIHZvaWQqIFVOdW1iZXJGb3JtYXQ7CisKKy8qKiBUaGUgcG9zc2libGUgbnVtYmVyIGZvcm1h
dCBzdHlsZXMuIAorICogIEBzdGFibGUgSUNVIDIuMAorICovCit0eXBlZGVmIGVudW0gVU51bWJl
ckZvcm1hdFN0eWxlIHsKKyAgICAvKioKKyAgICAgKiBEZWNpbWFsIGZvcm1hdCBkZWZpbmVkIGJ5
IHBhdHRlcm4gCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVU5VTV9QQVRU
RVJOX0RFQ0lNQUw9MCwKKyAgICAvKiogRGVjaW1hbCBmb3JtYXQgKi8KKyAgICBVTlVNX0RFQ0lN
QUw9MSwKKyAgICAvKiogQ3VycmVuY3kgZm9ybWF0ICovCisgICAgVU5VTV9DVVJSRU5DWSwKKyAg
ICAvKiogUGVyY2VudCBmb3JtYXQgKi8KKyAgICBVTlVNX1BFUkNFTlQsCisgICAgLyoqIFNjaWVu
dGlmaWMgZm9ybWF0ICovCisgICAgVU5VTV9TQ0lFTlRJRklDLAorICAgIC8qKiBTcGVsbG91dCBy
dWxlLWJhc2VkIGZvcm1hdCAqLworICAgIFVOVU1fU1BFTExPVVQsCisgICAgLyoqIAorICAgICAq
IE9yZGluYWwgcnVsZS1iYXNlZCBmb3JtYXQgCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAg
ICovCisgICAgVU5VTV9PUkRJTkFMLAorICAgIC8qKiAKKyAgICAgKiBEdXJhdGlvbiBydWxlLWJh
c2VkIGZvcm1hdCAKKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVTlVNX0RV
UkFUSU9OLAorICAgIC8qKiAKKyAgICAgKiBOdW1iZXJpbmcgc3lzdGVtIHJ1bGUtYmFzZWQgZm9y
bWF0IAorICAgICAqIEBzdGFibGUgSUNVIDQuMgorICAgICAqLworICAgIFVOVU1fTlVNQkVSSU5H
X1NZU1RFTSwKKyAgICAvKiogCisgICAgICogUnVsZS1iYXNlZCBmb3JtYXQgZGVmaW5lZCBieSBw
YXR0ZXJuIAorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVOVU1fUEFUVEVS
Tl9SVUxFQkFTRUQsCisgICAgLyoqIERlZmF1bHQgZm9ybWF0ICovCisgICAgVU5VTV9ERUZBVUxU
ID0gVU5VTV9ERUNJTUFMLAorICAgIC8qKiAoQWxpYXMgZm9yIFVOVU1fUEFUVEVSTl9ERUNJTUFM
KSAqLworICAgIFVOVU1fSUdOT1JFID0gVU5VTV9QQVRURVJOX0RFQ0lNQUwKK30gVU51bWJlckZv
cm1hdFN0eWxlOworCisvKiogVGhlIHBvc3NpYmxlIG51bWJlciBmb3JtYXQgcm91bmRpbmcgbW9k
ZXMuIAorICogIEBzdGFibGUgSUNVIDIuMAorICovCit0eXBlZGVmIGVudW0gVU51bWJlckZvcm1h
dFJvdW5kaW5nTW9kZSB7CisgICAgVU5VTV9ST1VORF9DRUlMSU5HLAorICAgIFVOVU1fUk9VTkRf
RkxPT1IsCisgICAgVU5VTV9ST1VORF9ET1dOLAorICAgIFVOVU1fUk9VTkRfVVAsCisgICAgLyoq
CisgICAgICogSGFsZi1ldmVuIHJvdW5kaW5nLCBtaXNzcGVsbGVkIG5hbWUKKyAgICAgKiBAZGVw
cmVjYXRlZCwgSUNVIDMuOAorICAgICAqLworICAgIFVOVU1fRk9VTkRfSEFMRkVWRU4sCisgICAg
VU5VTV9ST1VORF9IQUxGRE9XTiwKKyAgICBVTlVNX1JPVU5EX0hBTEZVUCwKKyAgICAvKioKKyAg
ICAgKiBIYWxmLWV2ZW4gcm91bmRpbmcKKyAgICAgKiBAc3RhYmxlLCBJQ1UgMy44CisgICAgICov
CisgICAgVU5VTV9ST1VORF9IQUxGRVZFTiA9IFVOVU1fRk9VTkRfSEFMRkVWRU4KK30gVU51bWJl
ckZvcm1hdFJvdW5kaW5nTW9kZTsKKworLyoqIFRoZSBwb3NzaWJsZSBudW1iZXIgZm9ybWF0IHBh
ZCBwb3NpdGlvbnMuIAorICogIEBzdGFibGUgSUNVIDIuMAorICovCit0eXBlZGVmIGVudW0gVU51
bWJlckZvcm1hdFBhZFBvc2l0aW9uIHsKKyAgICBVTlVNX1BBRF9CRUZPUkVfUFJFRklYLAorICAg
IFVOVU1fUEFEX0FGVEVSX1BSRUZJWCwKKyAgICBVTlVNX1BBRF9CRUZPUkVfU1VGRklYLAorICAg
IFVOVU1fUEFEX0FGVEVSX1NVRkZJWAorfSBVTnVtYmVyRm9ybWF0UGFkUG9zaXRpb247CisKKy8q
KgorICogQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgVU51bWJlckZvcm1hdCBmb3IgZm9ybWF0dGlu
ZyBhbmQgcGFyc2luZworICogbnVtYmVycy4gIEEgVU51bWJlckZvcm1hdCBtYXkgYmUgdXNlZCB0
byBmb3JtYXQgbnVtYmVycyBieSBjYWxsaW5nCisgKiB7QGxpbmsgI3VudW1fZm9ybWF0IH0sIGFu
ZCB0byBwYXJzZSBudW1iZXJzIGJ5IGNhbGxpbmcge0BsaW5rICN1bnVtX3BhcnNlIH0uCisgKiBU
aGUgY2FsbGVyIG11c3QgY2FsbCB7QGxpbmsgI3VudW1fY2xvc2UgfSB3aGVuIGRvbmUgdG8gcmVs
ZWFzZSByZXNvdXJjZXMKKyAqIHVzZWQgYnkgdGhpcyBvYmplY3QuCisgKiBAcGFyYW0gc3R5bGUg
VGhlIHR5cGUgb2YgbnVtYmVyIGZvcm1hdCB0byBvcGVuOiBvbmUgb2YKKyAqIFVOVU1fREVDSU1B
TCwgVU5VTV9DVVJSRU5DWSwgVU5VTV9QRVJDRU5ULCBVTlVNX1NDSUVOVElGSUMsIFVOVU1fU1BF
TExPVVQsCisgKiBVTlVNX1BBVFRFUk5fREVDSU1BTCwgVU5VTV9QQVRURVJOX1JVTEVCQVNFRCwg
b3IgVU5VTV9ERUZBVUxULgorICogSWYgVU5VTV9QQVRURVJOX0RFQ0lNQUwgb3IgVU5VTV9QQVRU
RVJOX1JVTEVCQVNFRCBpcyBwYXNzZWQgdGhlbiB0aGUKKyAqIG51bWJlciBmb3JtYXQgaXMgb3Bl
bmVkIHVzaW5nIHRoZSBnaXZlbiBwYXR0ZXJuLCB3aGljaCBtdXN0IGNvbmZvcm0KKyAqIHRvIHRo
ZSBzeW50YXggZGVzY3JpYmVkIGluIERlY2ltYWxGb3JtYXQgb3IgUnVsZUJhc2VkTnVtYmVyRm9y
bWF0LAorICogcmVzcGVjdGl2ZWx5LgorICogQHBhcmFtIHBhdHRlcm4gQSBwYXR0ZXJuIHNwZWNp
ZnlpbmcgdGhlIGZvcm1hdCB0byB1c2UuIAorICogVGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCB1
bmxlc3MgdGhlIHN0eWxlIGlzCisgKiBVTlVNX1BBVFRFUk5fREVDSU1BTCBvciBVTlVNX1BBVFRF
Uk5fUlVMRUJBU0VELgorICogQHBhcmFtIHBhdHRlcm5MZW5ndGggVGhlIG51bWJlciBvZiBjaGFy
YWN0ZXJzIGluIHRoZSBwYXR0ZXJuLCBvciAtMQorICogaWYgbnVsbC10ZXJtaW5hdGVkLiBUaGlz
IHBhcmFtZXRlciBpcyBpZ25vcmVkIHVubGVzcyB0aGUgc3R5bGUgaXMKKyAqIFVOVU1fUEFUVEVS
Ti4KKyAqIEBwYXJhbSBsb2NhbGUgQSBsb2NhbGUgaWRlbnRpZmllciB0byB1c2UgdG8gZGV0ZXJt
aW5lIGZvcm1hdHRpbmcKKyAqIGFuZCBwYXJzaW5nIGNvbnZlbnRpb25zLCBvciBOVUxMIHRvIHVz
ZSB0aGUgZGVmYXVsdCBsb2NhbGUuCisgKiBAcGFyYW0gcGFyc2VFcnIgQSBwb2ludGVyIHRvIGEg
VVBhcnNlRXJyb3Igc3RydWN0IHRvIHJlY2VpdmUgdGhlCisgKiBkZXRhaWxzIG9mIGFueSBwYXJz
aW5nIGVycm9ycywgb3IgTlVMTCBpZiBubyBwYXJzaW5nIGVycm9yIGRldGFpbHMKKyAqIGFyZSBk
ZXNpcmVkLgorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gaW5wdXQtb3V0cHV0IFVF
cnJvckNvZGUuCisgKiBAcmV0dXJuIEEgcG9pbnRlciB0byBhIG5ld2x5IGNyZWF0ZWQgVU51bWJl
ckZvcm1hdCwgb3IgTlVMTCBpZiBhbgorICogZXJyb3Igb2NjdXJyZWQuCisgKiBAc2VlIHVudW1f
Y2xvc2UKKyAqIEBzZWUgRGVjaW1hbEZvcm1hdAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1Vf
U1RBQkxFIFVOdW1iZXJGb3JtYXQqIFVfRVhQT1JUMiAKK3VudW1fb3BlbiggIFVOdW1iZXJGb3Jt
YXRTdHlsZSAgICBzdHlsZSwKKyAgICAgICAgICAgIGNvbnN0ICAgIFVDaGFyKiAgICBwYXR0ZXJu
LAorICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgIHBhdHRlcm5MZW5ndGgsCisgICAgICAg
ICAgICBjb25zdCAgICBjaGFyKiAgICAgbG9jYWxlLAorICAgICAgICAgICAgVVBhcnNlRXJyb3Iq
ICAgICAgIHBhcnNlRXJyLAorICAgICAgICAgICAgVUVycm9yQ29kZSogICAgICAgIHN0YXR1cyk7
CisKKworLyoqCisqIENsb3NlIGEgVU51bWJlckZvcm1hdC4KKyogT25jZSBjbG9zZWQsIGEgVU51
bWJlckZvcm1hdCBtYXkgbm8gbG9uZ2VyIGJlIHVzZWQuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1h
dHRlciB0byBjbG9zZS4KKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgdm9pZCBVX0VY
UE9SVDIgCit1bnVtX2Nsb3NlKFVOdW1iZXJGb3JtYXQqIGZtdCk7CisKKyNpZiBVX1NIT1dfQ1BM
VVNQTFVTX0FQSQorCitVX05BTUVTUEFDRV9CRUdJTgorCisvKioKKyAqIFxjbGFzcyBMb2NhbFVO
dW1iZXJGb3JtYXRQb2ludGVyCisgKiAiU21hcnQgcG9pbnRlciIgY2xhc3MsIGNsb3NlcyBhIFVO
dW1iZXJGb3JtYXQgdmlhIHVudW1fY2xvc2UoKS4KKyAqIEZvciBtb3N0IG1ldGhvZHMgc2VlIHRo
ZSBMb2NhbFBvaW50ZXJCYXNlIGJhc2UgY2xhc3MuCisgKgorICogQHNlZSBMb2NhbFBvaW50ZXJC
YXNlCisgKiBAc2VlIExvY2FsUG9pbnRlcgorICogQHN0YWJsZSBJQ1UgNC40CisgKi8KK1VfREVG
SU5FX0xPQ0FMX09QRU5fUE9JTlRFUihMb2NhbFVOdW1iZXJGb3JtYXRQb2ludGVyLCBVTnVtYmVy
Rm9ybWF0LCB1bnVtX2Nsb3NlKTsKKworVV9OQU1FU1BBQ0VfRU5ECisKKyNlbmRpZgorCisvKioK
KyAqIE9wZW4gYSBjb3B5IG9mIGEgVU51bWJlckZvcm1hdC4KKyAqIFRoaXMgZnVuY3Rpb24gcGVy
Zm9ybXMgYSBkZWVwIGNvcHkuCisgKiBAcGFyYW0gZm10IFRoZSBmb3JtYXQgdG8gY29weQorICog
QHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBl
cnJvcnMuCisgKiBAcmV0dXJuIEEgcG9pbnRlciB0byBhIFVOdW1iZXJGb3JtYXQgaWRlbnRpY2Fs
IHRvIGZtdC4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBVTnVtYmVyRm9ybWF0
KiBVX0VYUE9SVDIgCit1bnVtX2Nsb25lKGNvbnN0IFVOdW1iZXJGb3JtYXQgKmZtdCwKKyAgICAg
ICBVRXJyb3JDb2RlICpzdGF0dXMpOworCisvKioKKyogRm9ybWF0IGFuIGludGVnZXIgdXNpbmcg
YSBVTnVtYmVyRm9ybWF0LgorKiBUaGUgaW50ZWdlciB3aWxsIGJlIGZvcm1hdHRlZCBhY2NvcmRp
bmcgdG8gdGhlIFVOdW1iZXJGb3JtYXQncyBsb2NhbGUuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1h
dHRlciB0byB1c2UuCisqIEBwYXJhbSBudW1iZXIgVGhlIG51bWJlciB0byBmb3JtYXQuCisqIEBw
YXJhbSByZXN1bHQgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIGZvcm1hdHRl
ZCBudW1iZXIuCisqIEBwYXJhbSByZXN1bHRMZW5ndGggVGhlIG1heGltdW0gc2l6ZSBvZiByZXN1
bHQuCisqIEBwYXJhbSBwb3MgICAgQSBwb2ludGVyIHRvIGEgVUZpZWxkUG9zaXRpb24uICBPbiBp
bnB1dCwgcG9zaXRpb24tPmZpZWxkCisqIGlzIHJlYWQuICBPbiBvdXRwdXQsIHBvc2l0aW9uLT5i
ZWdpbkluZGV4IGFuZCBwb3NpdGlvbi0+ZW5kSW5kZXggaW5kaWNhdGUKKyogdGhlIGJlZ2lubmlu
ZyBhbmQgZW5kaW5nIGluZGljZXMgb2YgZmllbGQgbnVtYmVyIHBvc2l0aW9uLT5maWVsZCwgaWYg
c3VjaAorKiBhIGZpZWxkIGV4aXN0cy4gIFRoaXMgcGFyYW1ldGVyIG1heSBiZSBOVUxMLCBpbiB3
aGljaCBjYXNlIG5vIGZpZWxkCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJv
ckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBz
aXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3YXMg
dHJ1bmNhdGVkLgorKiBAc2VlIHVudW1fZm9ybWF0SW50NjQKKyogQHNlZSB1bnVtX2Zvcm1hdERv
dWJsZQorKiBAc2VlIHVudW1fcGFyc2UKKyogQHNlZSB1bnVtX3BhcnNlSW50NjQKKyogQHNlZSB1
bnVtX3BhcnNlRG91YmxlCisqIEBzZWUgVUZpZWxkUG9zaXRpb24KKyogQHN0YWJsZSBJQ1UgMi4w
CisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1bnVtX2Zvcm1hdCggICAgY29uc3Qg
ICAgVU51bWJlckZvcm1hdCogICAgZm10LAorICAgICAgICBpbnQzMl90ICAgICAgICAgICAgbnVt
YmVyLAorICAgICAgICBVQ2hhciogICAgICAgICAgICByZXN1bHQsCisgICAgICAgIGludDMyX3Qg
ICAgICAgICAgICByZXN1bHRMZW5ndGgsCisgICAgICAgIFVGaWVsZFBvc2l0aW9uICAgICpwb3Ms
CisgICAgICAgIFVFcnJvckNvZGUqICAgICAgICBzdGF0dXMpOworCisvKioKKyogRm9ybWF0IGFu
IGludDY0IHVzaW5nIGEgVU51bWJlckZvcm1hdC4KKyogVGhlIGludDY0IHdpbGwgYmUgZm9ybWF0
dGVkIGFjY29yZGluZyB0byB0aGUgVU51bWJlckZvcm1hdCdzIGxvY2FsZS4KKyogQHBhcmFtIGZt
dCBUaGUgZm9ybWF0dGVyIHRvIHVzZS4KKyogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIHRvIGZv
cm1hdC4KKyogQHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0
aGUgZm9ybWF0dGVkIG51bWJlci4KKyogQHBhcmFtIHJlc3VsdExlbmd0aCBUaGUgbWF4aW11bSBz
aXplIG9mIHJlc3VsdC4KKyogQHBhcmFtIHBvcyAgICBBIHBvaW50ZXIgdG8gYSBVRmllbGRQb3Np
dGlvbi4gIE9uIGlucHV0LCBwb3NpdGlvbi0+ZmllbGQKKyogaXMgcmVhZC4gIE9uIG91dHB1dCwg
cG9zaXRpb24tPmJlZ2luSW5kZXggYW5kIHBvc2l0aW9uLT5lbmRJbmRleCBpbmRpY2F0ZQorKiB0
aGUgYmVnaW5uaW5nIGFuZCBlbmRpbmcgaW5kaWNlcyBvZiBmaWVsZCBudW1iZXIgcG9zaXRpb24t
PmZpZWxkLCBpZiBzdWNoCisqIGEgZmllbGQgZXhpc3RzLiAgVGhpcyBwYXJhbWV0ZXIgbWF5IGJl
IE5VTEwsIGluIHdoaWNoIGNhc2Ugbm8gZmllbGQKKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIg
dG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUgdG90
YWwgYnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVyIHRoYW4gcmVzdWx0TGVuZ3RoLCB0aGUg
b3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisqIEBzZWUgdW51bV9mb3JtYXQKKyogQHNlZSB1bnVtX2Zv
cm1hdERvdWJsZQorKiBAc2VlIHVudW1fcGFyc2UKKyogQHNlZSB1bnVtX3BhcnNlSW50NjQKKyog
QHNlZSB1bnVtX3BhcnNlRG91YmxlCisqIEBzZWUgVUZpZWxkUG9zaXRpb24KKyogQHN0YWJsZSBJ
Q1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1bnVtX2Zvcm1hdEludDY0
KGNvbnN0IFVOdW1iZXJGb3JtYXQgKmZtdCwKKyAgICAgICAgaW50NjRfdCAgICAgICAgIG51bWJl
ciwKKyAgICAgICAgVUNoYXIqICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgaW50MzJfdCAgICAg
ICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAgVUZpZWxkUG9zaXRpb24gKnBvcywKKyAgICAgICAg
VUVycm9yQ29kZSogICAgIHN0YXR1cyk7CisKKy8qKgorKiBGb3JtYXQgYSBkb3VibGUgdXNpbmcg
YSBVTnVtYmVyRm9ybWF0LgorKiBUaGUgZG91YmxlIHdpbGwgYmUgZm9ybWF0dGVkIGFjY29yZGlu
ZyB0byB0aGUgVU51bWJlckZvcm1hdCdzIGxvY2FsZS4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0
dGVyIHRvIHVzZS4KKyogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIHRvIGZvcm1hdC4KKyogQHBh
cmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgZm9ybWF0dGVk
IG51bWJlci4KKyogQHBhcmFtIHJlc3VsdExlbmd0aCBUaGUgbWF4aW11bSBzaXplIG9mIHJlc3Vs
dC4KKyogQHBhcmFtIHBvcyAgICBBIHBvaW50ZXIgdG8gYSBVRmllbGRQb3NpdGlvbi4gIE9uIGlu
cHV0LCBwb3NpdGlvbi0+ZmllbGQKKyogaXMgcmVhZC4gIE9uIG91dHB1dCwgcG9zaXRpb24tPmJl
Z2luSW5kZXggYW5kIHBvc2l0aW9uLT5lbmRJbmRleCBpbmRpY2F0ZQorKiB0aGUgYmVnaW5uaW5n
IGFuZCBlbmRpbmcgaW5kaWNlcyBvZiBmaWVsZCBudW1iZXIgcG9zaXRpb24tPmZpZWxkLCBpZiBz
dWNoCisqIGEgZmllbGQgZXhpc3RzLiAgVGhpcyBwYXJhbWV0ZXIgbWF5IGJlIE5VTEwsIGluIHdo
aWNoIGNhc2Ugbm8gZmllbGQKKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9y
Q29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUgdG90YWwgYnVmZmVyIHNp
emUgbmVlZGVkOyBpZiBncmVhdGVyIHRoYW4gcmVzdWx0TGVuZ3RoLCB0aGUgb3V0cHV0IHdhcyB0
cnVuY2F0ZWQuCisqIEBzZWUgdW51bV9mb3JtYXQKKyogQHNlZSB1bnVtX2Zvcm1hdEludDY0Cisq
IEBzZWUgdW51bV9wYXJzZQorKiBAc2VlIHVudW1fcGFyc2VJbnQ2NAorKiBAc2VlIHVudW1fcGFy
c2VEb3VibGUKKyogQHNlZSBVRmllbGRQb3NpdGlvbgorKiBAc3RhYmxlIElDVSAyLjAKKyovCitV
X1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VudW1fZm9ybWF0RG91YmxlKCAgICBjb25zdCAg
ICBVTnVtYmVyRm9ybWF0KiAgZm10LAorICAgICAgICAgICAgZG91YmxlICAgICAgICAgIG51bWJl
ciwKKyAgICAgICAgICAgIFVDaGFyKiAgICAgICAgICByZXN1bHQsCisgICAgICAgICAgICBpbnQz
Ml90ICAgICAgICAgcmVzdWx0TGVuZ3RoLAorICAgICAgICAgICAgVUZpZWxkUG9zaXRpb24gICpw
b3MsIC8qIDAgaWYgaWdub3JlICovCisgICAgICAgICAgICBVRXJyb3JDb2RlKiAgICAgc3RhdHVz
KTsKKworLyoqCisqIEZvcm1hdCBhIGRlY2ltYWwgbnVtYmVyIHVzaW5nIGEgVU51bWJlckZvcm1h
dC4KKyogVGhlIG51bWJlciB3aWxsIGJlIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIFVOdW1i
ZXJGb3JtYXQncyBsb2NhbGUuCisqIFRoZSBzeW50YXggb2YgdGhlIGlucHV0IG51bWJlciBpcyBh
ICJudW1lcmljIHN0cmluZyIKKyogYXMgZGVmaW5lZCBpbiB0aGUgRGVjaW1hbCBBcml0aG1ldGlj
IFNwZWNpZmljYXRpb24sIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vc3BlbGVvdHJvdmUuY29tL2Rl
Y2ltYWwKKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHVzZS4KKyogQHBhcmFtIG51bWJl
ciBUaGUgbnVtYmVyIHRvIGZvcm1hdC4KKyogQHBhcmFtIGxlbmd0aCBUaGUgbGVuZ3RoIG9mIHRo
ZSBpbnB1dCBudW1iZXIsIG9yIC0xIGlmIHRoZSBpbnB1dCBpcyBudWwtdGVybWluYXRlZC4KKyog
QHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgZm9ybWF0
dGVkIG51bWJlci4KKyogQHBhcmFtIHJlc3VsdExlbmd0aCBUaGUgbWF4aW11bSBzaXplIG9mIHJl
c3VsdC4KKyogQHBhcmFtIHBvcyAgICBBIHBvaW50ZXIgdG8gYSBVRmllbGRQb3NpdGlvbi4gIE9u
IGlucHV0LCBwb3NpdGlvbi0+ZmllbGQKKyogICAgICAgICAgICAgICBpcyByZWFkLiAgT24gb3V0
cHV0LCBwb3NpdGlvbi0+YmVnaW5JbmRleCBhbmQgcG9zaXRpb24tPmVuZEluZGV4IGluZGljYXRl
CisqICAgICAgICAgICAgICAgdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIGluZGljZXMgb2YgZmll
bGQgbnVtYmVyIHBvc2l0aW9uLT5maWVsZCwgaWYgc3VjaAorKiAgICAgICAgICAgICAgIGEgZmll
bGQgZXhpc3RzLiAgVGhpcyBwYXJhbWV0ZXIgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2UgaXQg
aXMgaWdub3JlZC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0
byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUgdG90YWwgYnVmZmVyIHNpemUgbmVl
ZGVkOyBpZiBncmVhdGVyIHRoYW4gcmVzdWx0TGVuZ3RoLCB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0
ZWQuCisqIEBzZWUgdW51bV9mb3JtYXQKKyogQHNlZSB1bnVtX2Zvcm1hdEludDY0CisqIEBzZWUg
dW51bV9wYXJzZQorKiBAc2VlIHVudW1fcGFyc2VJbnQ2NAorKiBAc2VlIHVudW1fcGFyc2VEb3Vi
bGUKKyogQHNlZSBVRmllbGRQb3NpdGlvbgorKiBAc3RhYmxlIElDVSA0LjQgCisqLworVV9TVEFC
TEUgaW50MzJfdCBVX0VYUE9SVDIgCit1bnVtX2Zvcm1hdERlY2ltYWwoICAgIGNvbnN0ICAgIFVO
dW1iZXJGb3JtYXQqICBmbXQsCisgICAgICAgICAgICBjb25zdCBjaGFyICogICAgbnVtYmVyLAor
ICAgICAgICAgICAgaW50MzJfdCAgICAgICAgIGxlbmd0aCwKKyAgICAgICAgICAgIFVDaGFyKiAg
ICAgICAgICByZXN1bHQsCisgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgcmVzdWx0TGVuZ3Ro
LAorICAgICAgICAgICAgVUZpZWxkUG9zaXRpb24gICpwb3MsIC8qIDAgaWYgaWdub3JlICovCisg
ICAgICAgICAgICBVRXJyb3JDb2RlKiAgICAgc3RhdHVzKTsKKworLyoqCisgKiBGb3JtYXQgYSBk
b3VibGUgY3VycmVuY3kgYW1vdW50IHVzaW5nIGEgVU51bWJlckZvcm1hdC4KKyAqIFRoZSBkb3Vi
bGUgd2lsbCBiZSBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBVTnVtYmVyRm9ybWF0J3MgbG9j
YWxlLgorICogQHBhcmFtIGZtdCB0aGUgZm9ybWF0dGVyIHRvIHVzZQorICogQHBhcmFtIG51bWJl
ciB0aGUgbnVtYmVyIHRvIGZvcm1hdAorICogQHBhcmFtIGN1cnJlbmN5IHRoZSAzLWxldHRlciBu
dWxsLXRlcm1pbmF0ZWQgSVNPIDQyMTcgY3VycmVuY3kgY29kZQorICogQHBhcmFtIHJlc3VsdCBh
IHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBmb3JtYXR0ZWQgbnVtYmVyCisg
KiBAcGFyYW0gcmVzdWx0TGVuZ3RoIHRoZSBtYXhpbXVtIG51bWJlciBvZiBVQ2hhcnMgdG8gd3Jp
dGUgdG8gcmVzdWx0CisgKiBAcGFyYW0gcG9zIGEgcG9pbnRlciB0byBhIFVGaWVsZFBvc2l0aW9u
LiAgT24gaW5wdXQsCisgKiBwb3NpdGlvbi0+ZmllbGQgaXMgcmVhZC4gIE9uIG91dHB1dCwgcG9z
aXRpb24tPmJlZ2luSW5kZXggYW5kCisgKiBwb3NpdGlvbi0+ZW5kSW5kZXggaW5kaWNhdGUgdGhl
IGJlZ2lubmluZyBhbmQgZW5kaW5nIGluZGljZXMgb2YKKyAqIGZpZWxkIG51bWJlciBwb3NpdGlv
bi0+ZmllbGQsIGlmIHN1Y2ggYSBmaWVsZCBleGlzdHMuICBUaGlzCisgKiBwYXJhbWV0ZXIgbWF5
IGJlIE5VTEwsIGluIHdoaWNoIGNhc2UgaXQgaXMgaWdub3JlZC4KKyAqIEBwYXJhbSBzdGF0dXMg
YSBwb2ludGVyIHRvIGFuIGlucHV0LW91dHB1dCBVRXJyb3JDb2RlCisgKiBAcmV0dXJuIHRoZSB0
b3RhbCBidWZmZXIgc2l6ZSBuZWVkZWQ7IGlmIGdyZWF0ZXIgdGhhbiByZXN1bHRMZW5ndGgsCisg
KiB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisgKiBAc2VlIHVudW1fZm9ybWF0RG91YmxlCisg
KiBAc2VlIHVudW1fcGFyc2VEb3VibGVDdXJyZW5jeQorICogQHNlZSBVRmllbGRQb3NpdGlvbgor
ICogQHN0YWJsZSBJQ1UgMy4wCisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordW51
bV9mb3JtYXREb3VibGVDdXJyZW5jeShjb25zdCBVTnVtYmVyRm9ybWF0KiBmbXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRvdWJsZSBudW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIFVDaGFyKiBjdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIqIHJl
c3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCByZXN1bHRMZW5ndGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIFVGaWVsZFBvc2l0aW9uKiBwb3MsIC8qIGlnbm9yZWQg
aWYgMCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiBzdGF0dXMpOwor
CisvKioKKyogUGFyc2UgYSBzdHJpbmcgaW50byBhbiBpbnRlZ2VyIHVzaW5nIGEgVU51bWJlckZv
cm1hdC4KKyogVGhlIHN0cmluZyB3aWxsIGJlIHBhcnNlZCBhY2NvcmRpbmcgdG8gdGhlIFVOdW1i
ZXJGb3JtYXQncyBsb2NhbGUuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byB1c2UuCisq
IEBwYXJhbSB0ZXh0IFRoZSB0ZXh0IHRvIHBhcnNlLgorKiBAcGFyYW0gdGV4dExlbmd0aCBUaGUg
bGVuZ3RoIG9mIHRleHQsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyogQHBhcmFtIHBhcnNl
UG9zIElmIG5vdCAwLCBvbiBpbnB1dCBhIHBvaW50ZXIgdG8gYW4gaW50ZWdlciBzcGVjaWZ5aW5n
IHRoZSBvZmZzZXQgYXQgd2hpY2gKKyogdG8gYmVnaW4gcGFyc2luZy4gIElmIG5vdCAwLCBvbiBv
dXRwdXQgdGhlIG9mZnNldCBhdCB3aGljaCBwYXJzaW5nIGVuZGVkLgorKiBAcGFyYW0gc3RhdHVz
IEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAcmV0
dXJuIFRoZSB2YWx1ZSBvZiB0aGUgcGFyc2VkIGludGVnZXIKKyogQHNlZSB1bnVtX3BhcnNlSW50
NjQKKyogQHNlZSB1bnVtX3BhcnNlRG91YmxlCisqIEBzZWUgdW51bV9mb3JtYXQKKyogQHNlZSB1
bnVtX2Zvcm1hdEludDY0CisqIEBzZWUgdW51bV9mb3JtYXREb3VibGUKKyogQHN0YWJsZSBJQ1Ug
Mi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1bnVtX3BhcnNlKCAgICBjb25z
dCAgIFVOdW1iZXJGb3JtYXQqICBmbXQsCisgICAgICAgIGNvbnN0ICAgVUNoYXIqICAgICAgICAg
IHRleHQsCisgICAgICAgIGludDMyX3QgICAgICAgICB0ZXh0TGVuZ3RoLAorICAgICAgICBpbnQz
Ml90ICAgICAgICAgKnBhcnNlUG9zIC8qIDAgPSBzdGFydCAqLywKKyAgICAgICAgVUVycm9yQ29k
ZSAgICAgICpzdGF0dXMpOworCisvKioKKyogUGFyc2UgYSBzdHJpbmcgaW50byBhbiBpbnQ2NCB1
c2luZyBhIFVOdW1iZXJGb3JtYXQuCisqIFRoZSBzdHJpbmcgd2lsbCBiZSBwYXJzZWQgYWNjb3Jk
aW5nIHRvIHRoZSBVTnVtYmVyRm9ybWF0J3MgbG9jYWxlLgorKiBAcGFyYW0gZm10IFRoZSBmb3Jt
YXR0ZXIgdG8gdXNlLgorKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBwYXJzZS4KKyogQHBhcmFt
IHRleHRMZW5ndGggVGhlIGxlbmd0aCBvZiB0ZXh0LCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQu
CisqIEBwYXJhbSBwYXJzZVBvcyBJZiBub3QgMCwgb24gaW5wdXQgYSBwb2ludGVyIHRvIGFuIGlu
dGVnZXIgc3BlY2lmeWluZyB0aGUgb2Zmc2V0IGF0IHdoaWNoCisqIHRvIGJlZ2luIHBhcnNpbmcu
ICBJZiBub3QgMCwgb24gb3V0cHV0IHRoZSBvZmZzZXQgYXQgd2hpY2ggcGFyc2luZyBlbmRlZC4K
KyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFu
eSBlcnJvcnMKKyogQHJldHVybiBUaGUgdmFsdWUgb2YgdGhlIHBhcnNlZCBpbnRlZ2VyCisqIEBz
ZWUgdW51bV9wYXJzZQorKiBAc2VlIHVudW1fcGFyc2VEb3VibGUKKyogQHNlZSB1bnVtX2Zvcm1h
dAorKiBAc2VlIHVudW1fZm9ybWF0SW50NjQKKyogQHNlZSB1bnVtX2Zvcm1hdERvdWJsZQorKiBA
c3RhYmxlIElDVSAyLjgKKyovCitVX1NUQUJMRSBpbnQ2NF90IFVfRVhQT1JUMiAKK3VudW1fcGFy
c2VJbnQ2NChjb25zdCBVTnVtYmVyRm9ybWF0KiAgZm10LAorICAgICAgICBjb25zdCBVQ2hhciog
IHRleHQsCisgICAgICAgIGludDMyX3QgICAgICAgdGV4dExlbmd0aCwKKyAgICAgICAgaW50MzJf
dCAgICAgICAqcGFyc2VQb3MgLyogMCA9IHN0YXJ0ICovLAorICAgICAgICBVRXJyb3JDb2RlICAg
ICpzdGF0dXMpOworCisvKioKKyogUGFyc2UgYSBzdHJpbmcgaW50byBhIGRvdWJsZSB1c2luZyBh
IFVOdW1iZXJGb3JtYXQuCisqIFRoZSBzdHJpbmcgd2lsbCBiZSBwYXJzZWQgYWNjb3JkaW5nIHRv
IHRoZSBVTnVtYmVyRm9ybWF0J3MgbG9jYWxlLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIg
dG8gdXNlLgorKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBwYXJzZS4KKyogQHBhcmFtIHRleHRM
ZW5ndGggVGhlIGxlbmd0aCBvZiB0ZXh0LCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisqIEBw
YXJhbSBwYXJzZVBvcyBJZiBub3QgMCwgb24gaW5wdXQgYSBwb2ludGVyIHRvIGFuIGludGVnZXIg
c3BlY2lmeWluZyB0aGUgb2Zmc2V0IGF0IHdoaWNoCisqIHRvIGJlZ2luIHBhcnNpbmcuICBJZiBu
b3QgMCwgb24gb3V0cHV0IHRoZSBvZmZzZXQgYXQgd2hpY2ggcGFyc2luZyBlbmRlZC4KKyogQHBh
cmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJv
cnMKKyogQHJldHVybiBUaGUgdmFsdWUgb2YgdGhlIHBhcnNlZCBkb3VibGUKKyogQHNlZSB1bnVt
X3BhcnNlCisqIEBzZWUgdW51bV9wYXJzZUludDY0CisqIEBzZWUgdW51bV9mb3JtYXQKKyogQHNl
ZSB1bnVtX2Zvcm1hdEludDY0CisqIEBzZWUgdW51bV9mb3JtYXREb3VibGUKKyogQHN0YWJsZSBJ
Q1UgMi4wCisqLworVV9TVEFCTEUgZG91YmxlIFVfRVhQT1JUMiAKK3VudW1fcGFyc2VEb3VibGUo
ICAgIGNvbnN0ICAgVU51bWJlckZvcm1hdCogIGZtdCwKKyAgICAgICAgICAgIGNvbnN0ICAgVUNo
YXIqICAgICAgICAgIHRleHQsCisgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgdGV4dExlbmd0
aCwKKyAgICAgICAgICAgIGludDMyX3QgICAgICAgICAqcGFyc2VQb3MgLyogMCA9IHN0YXJ0ICov
LAorICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICpzdGF0dXMpOworCisKKy8qKgorKiBQYXJz
ZSBhIG51bWJlciBmcm9tIGEgc3RyaW5nIGludG8gYW4gdW5mb3JtYXR0ZWQgbnVtZXJpYyBzdHJp
bmcgdXNpbmcgYSBVTnVtYmVyRm9ybWF0LgorKiBUaGUgaW5wdXQgc3RyaW5nIHdpbGwgYmUgcGFy
c2VkIGFjY29yZGluZyB0byB0aGUgVU51bWJlckZvcm1hdCdzIGxvY2FsZS4KKyogVGhlIHN5bnRh
eCBvZiB0aGUgb3V0cHV0IGlzIGEgIm51bWVyaWMgc3RyaW5nIgorKiBhcyBkZWZpbmVkIGluIHRo
ZSBEZWNpbWFsIEFyaXRobWV0aWMgU3BlY2lmaWNhdGlvbiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6
Ly9zcGVsZW90cm92ZS5jb20vZGVjaW1hbAorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8g
dXNlLgorKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBwYXJzZS4KKyogQHBhcmFtIHRleHRMZW5n
dGggVGhlIGxlbmd0aCBvZiB0ZXh0LCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisqIEBwYXJh
bSBwYXJzZVBvcyBJZiBub3QgMCwgb24gaW5wdXQgYSBwb2ludGVyIHRvIGFuIGludGVnZXIgc3Bl
Y2lmeWluZyB0aGUgb2Zmc2V0IGF0IHdoaWNoCisqICAgICAgICAgICAgICAgICB0byBiZWdpbiBw
YXJzaW5nLiAgSWYgbm90IDAsIG9uIG91dHB1dCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHBhcnNpbmcg
ZW5kZWQuCisqIEBwYXJhbSBvdXRCdWYgQSAoY2hhciAqKSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUg
cGFyc2VkIG51bWJlciBhcyBhIHN0cmluZy4gIFRoZSBvdXRwdXQgc3RyaW5nCisqICAgICAgICAg
ICAgICAgd2lsbCBiZSBudWwtdGVybWluYXRlZCBpZiB0aGVyZSBpcyBzdWZmaWNpZW50IHNwYWNl
LgorKiBAcGFyYW0gb3V0QnVmTGVuZ3RoIFRoZSBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyLiAg
TWF5IGJlIHplcm8sIGluIHdoaWNoIGNhc2UKKyogICAgICAgICAgICAgICB0aGUgb3V0QnVmIHBv
aW50ZXIgbWF5IGJlIE5VTEwsIGFuZCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlCisqICAg
ICAgICAgICAgICAgc2l6ZSBvZiB0aGUgb3V0cHV0IHN0cmluZy4KKyogQHBhcmFtIHN0YXR1cyBB
IHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVy
biB0aGUgbGVuZ3RoIG9mIHRoZSBvdXRwdXQgc3RyaW5nLCBub3QgaW5jbHVkaW5nIGFueSB0ZXJt
aW5hdGluZyBudWwuCisqIEBzZWUgdW51bV9wYXJzZQorKiBAc2VlIHVudW1fcGFyc2VJbnQ2NAor
KiBAc2VlIHVudW1fZm9ybWF0CisqIEBzZWUgdW51bV9mb3JtYXRJbnQ2NAorKiBAc2VlIHVudW1f
Zm9ybWF0RG91YmxlCisqIEBzdGFibGUgSUNVIDQuNAorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9F
WFBPUlQyIAordW51bV9wYXJzZURlY2ltYWwoY29uc3QgICBVTnVtYmVyRm9ybWF0KiAgZm10LAor
ICAgICAgICAgICAgICAgICBjb25zdCAgIFVDaGFyKiAgICAgICAgICB0ZXh0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICB0ZXh0TGVuZ3RoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAqcGFyc2VQb3MgLyogMCA9IHN0YXJ0ICovLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICAgICAqb3V0QnVmLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICBvdXRCdWZMZW5ndGgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICpzdGF0dXMpOworCisvKioKKyAqIFBh
cnNlIGEgc3RyaW5nIGludG8gYSBkb3VibGUgYW5kIGEgY3VycmVuY3kgdXNpbmcgYSBVTnVtYmVy
Rm9ybWF0LgorICogVGhlIHN0cmluZyB3aWxsIGJlIHBhcnNlZCBhY2NvcmRpbmcgdG8gdGhlIFVO
dW1iZXJGb3JtYXQncyBsb2NhbGUuCisgKiBAcGFyYW0gZm10IHRoZSBmb3JtYXR0ZXIgdG8gdXNl
CisgKiBAcGFyYW0gdGV4dCB0aGUgdGV4dCB0byBwYXJzZQorICogQHBhcmFtIHRleHRMZW5ndGgg
dGhlIGxlbmd0aCBvZiB0ZXh0LCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQKKyAqIEBwYXJhbSBw
YXJzZVBvcyBhIHBvaW50ZXIgdG8gYW4gb2Zmc2V0IGluZGV4IGludG8gdGV4dCBhdCB3aGljaCB0
bworICogYmVnaW4gcGFyc2luZy4gT24gb3V0cHV0LCAqcGFyc2VQb3Mgd2lsbCBwb2ludCBhZnRl
ciB0aGUgbGFzdAorICogcGFyc2VkIGNoYXJhY3Rlci4gIFRoaXMgcGFyYW1ldGVyIG1heSBiZSAw
LCBpbiB3aGljaCBjYXNlIHBhcnNpbmcKKyAqIGJlZ2lucyBhdCBvZmZzZXQgMC4KKyAqIEBwYXJh
bSBjdXJyZW5jeSBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBwYXJzZWQg
bnVsbC0KKyAqIHRlcm1pbmF0ZWQgY3VycmVuY3kuICBUaGlzIGJ1ZmZlciBtdXN0IGhhdmUgYSBj
YXBhY2l0eSBvZiBhdCBsZWFzdAorICogNCBVQ2hhcnMuCisgKiBAcGFyYW0gc3RhdHVzIGEgcG9p
bnRlciB0byBhbiBpbnB1dC1vdXRwdXQgVUVycm9yQ29kZQorICogQHJldHVybiB0aGUgcGFyc2Vk
IGRvdWJsZQorICogQHNlZSB1bnVtX3BhcnNlRG91YmxlCisgKiBAc2VlIHVudW1fZm9ybWF0RG91
YmxlQ3VycmVuY3kKKyAqIEBzdGFibGUgSUNVIDMuMAorICovCitVX1NUQUJMRSBkb3VibGUgVV9F
WFBPUlQyCit1bnVtX3BhcnNlRG91YmxlQ3VycmVuY3koY29uc3QgVU51bWJlckZvcm1hdCogZm10
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiB0ZXh0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGludDMyX3QgdGV4dExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQzMl90KiBwYXJzZVBvcywgLyogMCA9IHN0YXJ0ICovCisgICAgICAgICAgICAgICAg
ICAgICAgICAgVUNoYXIqIGN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJv
ckNvZGUqIHN0YXR1cyk7CisKKy8qKgorICogU2V0IHRoZSBwYXR0ZXJuIHVzZWQgYnkgYSBVTnVt
YmVyRm9ybWF0LiAgVGhpcyBjYW4gb25seSBiZSB1c2VkCisgKiBvbiBhIERlY2ltYWxGb3JtYXQs
IG90aGVyIGZvcm1hdHMgcmV0dXJuIFVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUgorICogaW4gdGhl
IHN0YXR1cy4KKyAqIEBwYXJhbSBmb3JtYXQgVGhlIGZvcm1hdHRlciB0byBzZXQuCisgKiBAcGFy
YW0gbG9jYWxpemVkIFRSVUUgaWYgdGhlIHBhdHRlcm4gaXMgbG9jYWxpemVkLCBGQUxTRSBvdGhl
cndpc2UuCisgKiBAcGFyYW0gcGF0dGVybiBUaGUgbmV3IHBhdHRlcm4KKyAqIEBwYXJhbSBwYXR0
ZXJuTGVuZ3RoIFRoZSBsZW5ndGggb2YgcGF0dGVybiwgb3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVk
LgorICogQHBhcmFtIHBhcnNlRXJyb3IgQSBwb2ludGVyIHRvIFVQYXJzZUVycm9yIHRvIHJlY2ll
dmUgaW5mb3JtYXRpb24KKyAqIGFib3V0IGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZywg
b3IgTlVMTCBpZiBubyBwYXJzZSBlcnJvcgorICogaW5mb3JtYXRpb24gaXMgZGVzaXJlZC4KKyAq
IEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIGlucHV0LW91dHB1dCBVRXJyb3JDb2RlLgor
ICogQHNlZSB1bnVtX3RvUGF0dGVybgorICogQHNlZSBEZWNpbWFsRm9ybWF0CisgKiBAc3RhYmxl
IElDVSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1bnVtX2FwcGx5UGF0dGVy
biggICAgICAgICAgVU51bWJlckZvcm1hdCAgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBVQm9vbCAgICAgICAgICBsb2NhbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgIGNv
bnN0ICAgVUNoYXIgICAgICAgICAgKnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50MzJfdCAgICAgICAgIHBhdHRlcm5MZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVVBhcnNlRXJyb3IgICAgKnBhcnNlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVUVycm9yQ29kZSAgICAgKnN0YXR1cworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKTsKKworLyoqCisqIEdldCBhIGxvY2FsZSBmb3Igd2hpY2ggZGVjaW1hbCBmb3Jt
YXR0aW5nIHBhdHRlcm5zIGFyZSBhdmFpbGFibGUuCisqIEEgVU51bWJlckZvcm1hdCBpbiBhIGxv
Y2FsZSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIHdpbGwgcGVyZm9ybSB0aGUgY29ycmVjdAor
KiBmb3JtYXR0aW5nIGFuZCBwYXJzaW5nIGZvciB0aGUgbG9jYWxlLiAgVGhlIHJlc3VsdHMgb2Yg
dGhpcyBjYWxsIGFyZSBub3QKKyogdmFsaWQgZm9yIHJ1bGUtYmFzZWQgbnVtYmVyIGZvcm1hdHMu
CisqIEBwYXJhbSBsb2NhbGVJbmRleCBUaGUgaW5kZXggb2YgdGhlIGRlc2lyZWQgbG9jYWxlLgor
KiBAcmV0dXJuIEEgbG9jYWxlIGZvciB3aGljaCBudW1iZXIgZm9ybWF0dGluZyBwYXR0ZXJucyBh
cmUgYXZhaWxhYmxlLCBvciAwIGlmIG5vbmUuCisqIEBzZWUgdW51bV9jb3VudEF2YWlsYWJsZQor
KiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBjb25zdCBjaGFyKiBVX0VYUE9SVDIgCit1
bnVtX2dldEF2YWlsYWJsZShpbnQzMl90IGxvY2FsZUluZGV4KTsKKworLyoqCisqIERldGVybWlu
ZSBob3cgbWFueSBsb2NhbGVzIGhhdmUgZGVjaW1hbCBmb3JtYXR0aW5nIHBhdHRlcm5zIGF2YWls
YWJsZS4gIFRoZQorKiByZXN1bHRzIG9mIHRoaXMgY2FsbCBhcmUgbm90IHZhbGlkIGZvciBydWxl
LWJhc2VkIG51bWJlciBmb3JtYXRzLgorKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCBmb3IgZGV0
ZXJtaW5pbmcgdGhlIGxvb3AgZW5kaW5nIGNvbmRpdGlvbiBmb3IKKyogY2FsbHMgdG8ge0BsaW5r
ICN1bnVtX2dldEF2YWlsYWJsZSB9LgorKiBAcmV0dXJuIFRoZSBudW1iZXIgb2YgbG9jYWxlcyBm
b3Igd2hpY2ggZGVjaW1hbCBmb3JtYXR0aW5nIHBhdHRlcm5zIGFyZSBhdmFpbGFibGUuCisqIEBz
ZWUgdW51bV9nZXRBdmFpbGFibGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50
MzJfdCBVX0VYUE9SVDIgCit1bnVtX2NvdW50QXZhaWxhYmxlKHZvaWQpOworCisvKiogVGhlIHBv
c3NpYmxlIFVOdW1iZXJGb3JtYXQgbnVtZXJpYyBhdHRyaWJ1dGVzIEBzdGFibGUgSUNVIDIuMCAq
LwordHlwZWRlZiBlbnVtIFVOdW1iZXJGb3JtYXRBdHRyaWJ1dGUgeworICAvKiogUGFyc2UgaW50
ZWdlcnMgb25seSAqLworICBVTlVNX1BBUlNFX0lOVF9PTkxZLAorICAvKiogVXNlIGdyb3VwaW5n
IHNlcGFyYXRvciAqLworICBVTlVNX0dST1VQSU5HX1VTRUQsCisgIC8qKiBBbHdheXMgc2hvdyBk
ZWNpbWFsIHBvaW50ICovCisgIFVOVU1fREVDSU1BTF9BTFdBWVNfU0hPV04sCisgIC8qKiBNYXhp
bXVtIGludGVnZXIgZGlnaXRzICovCisgIFVOVU1fTUFYX0lOVEVHRVJfRElHSVRTLAorICAvKiog
TWluaW11bSBpbnRlZ2VyIGRpZ2l0cyAqLworICBVTlVNX01JTl9JTlRFR0VSX0RJR0lUUywKKyAg
LyoqIEludGVnZXIgZGlnaXRzICovCisgIFVOVU1fSU5URUdFUl9ESUdJVFMsCisgIC8qKiBNYXhp
bXVtIGZyYWN0aW9uIGRpZ2l0cyAqLworICBVTlVNX01BWF9GUkFDVElPTl9ESUdJVFMsCisgIC8q
KiBNaW5pbXVtIGZyYWN0aW9uIGRpZ2l0cyAqLworICBVTlVNX01JTl9GUkFDVElPTl9ESUdJVFMs
CisgIC8qKiBGcmFjdGlvbiBkaWdpdHMgKi8KKyAgVU5VTV9GUkFDVElPTl9ESUdJVFMsCisgIC8q
KiBNdWx0aXBsaWVyICovCisgIFVOVU1fTVVMVElQTElFUiwKKyAgLyoqIEdyb3VwaW5nIHNpemUg
Ki8KKyAgVU5VTV9HUk9VUElOR19TSVpFLAorICAvKiogUm91bmRpbmcgTW9kZSAqLworICBVTlVN
X1JPVU5ESU5HX01PREUsCisgIC8qKiBSb3VuZGluZyBpbmNyZW1lbnQgKi8KKyAgVU5VTV9ST1VO
RElOR19JTkNSRU1FTlQsCisgIC8qKiBUaGUgd2lkdGggdG8gd2hpY2ggdGhlIG91dHB1dCBvZiA8
Y29kZT5mb3JtYXQoKTwvY29kZT4gaXMgcGFkZGVkLiAqLworICBVTlVNX0ZPUk1BVF9XSURUSCwK
KyAgLyoqIFRoZSBwb3NpdGlvbiBhdCB3aGljaCBwYWRkaW5nIHdpbGwgdGFrZSBwbGFjZS4gKi8K
KyAgVU5VTV9QQURESU5HX1BPU0lUSU9OLAorICAvKiogU2Vjb25kYXJ5IGdyb3VwaW5nIHNpemUg
Ki8KKyAgVU5VTV9TRUNPTkRBUllfR1JPVVBJTkdfU0laRSwKKyAgLyoqIFVzZSBzaWduaWZpY2Fu
dCBkaWdpdHMKKyAgICogQHN0YWJsZSBJQ1UgMy4wICovCisgIFVOVU1fU0lHTklGSUNBTlRfRElH
SVRTX1VTRUQsCisgIC8qKiBNaW5pbXVtIHNpZ25pZmljYW50IGRpZ2l0cworICAgKiBAc3RhYmxl
IElDVSAzLjAgKi8KKyAgVU5VTV9NSU5fU0lHTklGSUNBTlRfRElHSVRTLAorICAvKiogTWF4aW11
bSBzaWduaWZpY2FudCBkaWdpdHMKKyAgICogQHN0YWJsZSBJQ1UgMy4wICovCisgIFVOVU1fTUFY
X1NJR05JRklDQU5UX0RJR0lUUywKKyAgLyoqIExlbmllbnQgcGFyc2UgbW9kZSB1c2VkIGJ5IHJ1
bGUtYmFzZWQgZm9ybWF0cy4KKyAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAqLworICBVTlVNX0xF
TklFTlRfUEFSU0UKK30gVU51bWJlckZvcm1hdEF0dHJpYnV0ZTsKKworLyoqCisqIEdldCBhIG51
bWVyaWMgYXR0cmlidXRlIGFzc29jaWF0ZWQgd2l0aCBhIFVOdW1iZXJGb3JtYXQuCisqIEFuIGV4
YW1wbGUgb2YgYSBudW1lcmljIGF0dHJpYnV0ZSBpcyB0aGUgbnVtYmVyIG9mIGludGVnZXIgZGln
aXRzIGEgZm9ybWF0dGVyIHdpbGwgcHJvZHVjZS4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVy
IHRvIHF1ZXJ5LgorKiBAcGFyYW0gYXR0ciBUaGUgYXR0cmlidXRlIHRvIHF1ZXJ5OyBvbmUgb2Yg
VU5VTV9QQVJTRV9JTlRfT05MWSwgVU5VTV9HUk9VUElOR19VU0VELAorKiBVTlVNX0RFQ0lNQUxf
QUxXQVlTX1NIT1dOLCBVTlVNX01BWF9JTlRFR0VSX0RJR0lUUywgVU5VTV9NSU5fSU5URUdFUl9E
SUdJVFMsIFVOVU1fSU5URUdFUl9ESUdJVFMsCisqIFVOVU1fTUFYX0ZSQUNUSU9OX0RJR0lUUywg
VU5VTV9NSU5fRlJBQ1RJT05fRElHSVRTLCBVTlVNX0ZSQUNUSU9OX0RJR0lUUywgVU5VTV9NVUxU
SVBMSUVSLAorKiBVTlVNX0dST1VQSU5HX1NJWkUsIFVOVU1fUk9VTkRJTkdfTU9ERSwgVU5VTV9G
T1JNQVRfV0lEVEgsIFVOVU1fUEFERElOR19QT1NJVElPTiwgVU5VTV9TRUNPTkRBUllfR1JPVVBJ
TkdfU0laRS4KKyogQHJldHVybiBUaGUgdmFsdWUgb2YgYXR0ci4KKyogQHNlZSB1bnVtX3NldEF0
dHJpYnV0ZQorKiBAc2VlIHVudW1fZ2V0RG91YmxlQXR0cmlidXRlCisqIEBzZWUgdW51bV9zZXRE
b3VibGVBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX2dldFRleHRBdHRyaWJ1dGUKKyogQHNlZSB1bnVt
X3NldFRleHRBdHRyaWJ1dGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJf
dCBVX0VYUE9SVDIgCit1bnVtX2dldEF0dHJpYnV0ZShjb25zdCBVTnVtYmVyRm9ybWF0KiAgICAg
ICAgICBmbXQsCisgICAgICAgICAgVU51bWJlckZvcm1hdEF0dHJpYnV0ZSAgYXR0cik7CisKKy8q
KgorKiBTZXQgYSBudW1lcmljIGF0dHJpYnV0ZSBhc3NvY2lhdGVkIHdpdGggYSBVTnVtYmVyRm9y
bWF0LgorKiBBbiBleGFtcGxlIG9mIGEgbnVtZXJpYyBhdHRyaWJ1dGUgaXMgdGhlIG51bWJlciBv
ZiBpbnRlZ2VyIGRpZ2l0cyBhIGZvcm1hdHRlciB3aWxsIHByb2R1Y2UuICBJZiB0aGUKKyogZm9y
bWF0dGVyIGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlIGF0dHJpYnV0ZSwgdGhlIGNhbGwgaXMgaWdu
b3JlZC4gIFJ1bGUtYmFzZWQgZm9ybWF0dGVycyBvbmx5IHVuZGVyc3RhbmQKKyogdGhlIGxlbmll
bnQtcGFyc2UgYXR0cmlidXRlLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gc2V0Lgor
KiBAcGFyYW0gYXR0ciBUaGUgYXR0cmlidXRlIHRvIHNldDsgb25lIG9mIFVOVU1fUEFSU0VfSU5U
X09OTFksIFVOVU1fR1JPVVBJTkdfVVNFRCwKKyogVU5VTV9ERUNJTUFMX0FMV0FZU19TSE9XTiwg
VU5VTV9NQVhfSU5URUdFUl9ESUdJVFMsIFVOVU1fTUlOX0lOVEVHRVJfRElHSVRTLCBVTlVNX0lO
VEVHRVJfRElHSVRTLAorKiBVTlVNX01BWF9GUkFDVElPTl9ESUdJVFMsIFVOVU1fTUlOX0ZSQUNU
SU9OX0RJR0lUUywgVU5VTV9GUkFDVElPTl9ESUdJVFMsIFVOVU1fTVVMVElQTElFUiwKKyogVU5V
TV9HUk9VUElOR19TSVpFLCBVTlVNX1JPVU5ESU5HX01PREUsIFVOVU1fRk9STUFUX1dJRFRILCBV
TlVNX1BBRERJTkdfUE9TSVRJT04sIFVOVU1fU0VDT05EQVJZX0dST1VQSU5HX1NJWkUsCisqIG9y
IFVOVU1fTEVOSUVOVF9QQVJTRS4KKyogQHBhcmFtIG5ld1ZhbHVlIFRoZSBuZXcgdmFsdWUgb2Yg
YXR0ci4KKyogQHNlZSB1bnVtX2dldEF0dHJpYnV0ZQorKiBAc2VlIHVudW1fZ2V0RG91YmxlQXR0
cmlidXRlCisqIEBzZWUgdW51bV9zZXREb3VibGVBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX2dldFRl
eHRBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX3NldFRleHRBdHRyaWJ1dGUKKyogQHN0YWJsZSBJQ1Ug
Mi4wCisqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1bnVtX3NldEF0dHJpYnV0ZSggICAg
VU51bWJlckZvcm1hdCogICAgICAgICAgZm10LAorICAgICAgICAgICAgVU51bWJlckZvcm1hdEF0
dHJpYnV0ZSAgYXR0ciwKKyAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgICAgICAgIG5ld1Zh
bHVlKTsKKworCisvKioKKyogR2V0IGEgbnVtZXJpYyBhdHRyaWJ1dGUgYXNzb2NpYXRlZCB3aXRo
IGEgVU51bWJlckZvcm1hdC4KKyogQW4gZXhhbXBsZSBvZiBhIG51bWVyaWMgYXR0cmlidXRlIGlz
IHRoZSBudW1iZXIgb2YgaW50ZWdlciBkaWdpdHMgYSBmb3JtYXR0ZXIgd2lsbCBwcm9kdWNlLgor
KiBJZiB0aGUgZm9ybWF0dGVyIGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlIGF0dHJpYnV0ZSwgLTEg
aXMgcmV0dXJuZWQuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBxdWVyeS4KKyogQHBh
cmFtIGF0dHIgVGhlIGF0dHJpYnV0ZSB0byBxdWVyeTsgZS5nLiBVTlVNX1JPVU5ESU5HX0lOQ1JF
TUVOVC4KKyogQHJldHVybiBUaGUgdmFsdWUgb2YgYXR0ci4KKyogQHNlZSB1bnVtX2dldEF0dHJp
YnV0ZQorKiBAc2VlIHVudW1fc2V0QXR0cmlidXRlCisqIEBzZWUgdW51bV9zZXREb3VibGVBdHRy
aWJ1dGUKKyogQHNlZSB1bnVtX2dldFRleHRBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX3NldFRleHRB
dHRyaWJ1dGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgZG91YmxlIFVfRVhQT1JU
MiAKK3VudW1fZ2V0RG91YmxlQXR0cmlidXRlKGNvbnN0IFVOdW1iZXJGb3JtYXQqICAgICAgICAg
IGZtdCwKKyAgICAgICAgICBVTnVtYmVyRm9ybWF0QXR0cmlidXRlICBhdHRyKTsKKworLyoqCisq
IFNldCBhIG51bWVyaWMgYXR0cmlidXRlIGFzc29jaWF0ZWQgd2l0aCBhIFVOdW1iZXJGb3JtYXQu
CisqIEFuIGV4YW1wbGUgb2YgYSBudW1lcmljIGF0dHJpYnV0ZSBpcyB0aGUgbnVtYmVyIG9mIGlu
dGVnZXIgZGlnaXRzIGEgZm9ybWF0dGVyIHdpbGwgcHJvZHVjZS4KKyogSWYgdGhlIGZvcm1hdHRl
ciBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoZSBhdHRyaWJ1dGUsIHRoaXMgY2FsbCBpcyBpZ25vcmVk
LgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gc2V0LgorKiBAcGFyYW0gYXR0ciBUaGUg
YXR0cmlidXRlIHRvIHNldDsgZS5nLiBVTlVNX1JPVU5ESU5HX0lOQ1JFTUVOVC4KKyogQHBhcmFt
IG5ld1ZhbHVlIFRoZSBuZXcgdmFsdWUgb2YgYXR0ci4KKyogQHNlZSB1bnVtX2dldEF0dHJpYnV0
ZQorKiBAc2VlIHVudW1fc2V0QXR0cmlidXRlCisqIEBzZWUgdW51bV9nZXREb3VibGVBdHRyaWJ1
dGUKKyogQHNlZSB1bnVtX2dldFRleHRBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX3NldFRleHRBdHRy
aWJ1dGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1
bnVtX3NldERvdWJsZUF0dHJpYnV0ZSggICAgVU51bWJlckZvcm1hdCogICAgICAgICAgZm10LAor
ICAgICAgICAgICAgVU51bWJlckZvcm1hdEF0dHJpYnV0ZSAgYXR0ciwKKyAgICAgICAgICAgIGRv
dWJsZSAgICAgICAgICAgICAgICAgbmV3VmFsdWUpOworCisvKiogVGhlIHBvc3NpYmxlIFVOdW1i
ZXJGb3JtYXQgdGV4dCBhdHRyaWJ1dGVzIEBzdGFibGUgSUNVIDIuMCovCit0eXBlZGVmIGVudW0g
VU51bWJlckZvcm1hdFRleHRBdHRyaWJ1dGUgeworICAvKiogUG9zaXRpdmUgcHJlZml4ICovCisg
IFVOVU1fUE9TSVRJVkVfUFJFRklYLAorICAvKiogUG9zaXRpdmUgc3VmZml4ICovCisgIFVOVU1f
UE9TSVRJVkVfU1VGRklYLAorICAvKiogTmVnYXRpdmUgcHJlZml4ICovCisgIFVOVU1fTkVHQVRJ
VkVfUFJFRklYLAorICAvKiogTmVnYXRpdmUgc3VmZml4ICovCisgIFVOVU1fTkVHQVRJVkVfU1VG
RklYLAorICAvKiogVGhlIGNoYXJhY3RlciB1c2VkIHRvIHBhZCB0byB0aGUgZm9ybWF0IHdpZHRo
LiAqLworICBVTlVNX1BBRERJTkdfQ0hBUkFDVEVSLAorICAvKiogVGhlIElTTyBjdXJyZW5jeSBj
b2RlICovCisgIFVOVU1fQ1VSUkVOQ1lfQ09ERSwKKyAgLyoqCisgICAqIFRoZSBkZWZhdWx0IHJ1
bGUgc2V0LiAgVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSB3aXRoIHJ1bGUtYmFzZWQgZm9ybWF0dGVy
cy4KKyAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAqLworICBVTlVNX0RFRkFVTFRfUlVMRVNFVCwK
KyAgLyoqCisgICAqIFRoZSBwdWJsaWMgcnVsZSBzZXRzLiAgVGhpcyBpcyBvbmx5IGF2YWlsYWJs
ZSB3aXRoIHJ1bGUtYmFzZWQgZm9ybWF0dGVycy4KKyAgICogVGhpcyBpcyBhIHJlYWQtb25seSBh
dHRyaWJ1dGUuICBUaGUgcHVibGljIHJ1bGVzZXRzIGFyZSByZXR1cm5lZCBhcyBhCisgICAqIHNp
bmdsZSBzdHJpbmcsIHdpdGggZWFjaCBydWxlc2V0IG5hbWUgZGVsaW1pdGVkIGJ5ICc7JyAoc2Vt
aWNvbG9uKS4KKyAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAqLworICBVTlVNX1BVQkxJQ19SVUxF
U0VUUworfSBVTnVtYmVyRm9ybWF0VGV4dEF0dHJpYnV0ZTsKKworLyoqCisqIEdldCBhIHRleHQg
YXR0cmlidXRlIGFzc29jaWF0ZWQgd2l0aCBhIFVOdW1iZXJGb3JtYXQuCisqIEFuIGV4YW1wbGUg
b2YgYSB0ZXh0IGF0dHJpYnV0ZSBpcyB0aGUgc3VmZml4IGZvciBwb3NpdGl2ZSBudW1iZXJzLiAg
SWYgdGhlIGZvcm1hdHRlcgorKiBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoZSBhdHRyaWJ1dHJlLCBV
X1VOU1VQUE9SVEVEX0VSUk9SIGlzIHJldHVybmVkIGFzIHRoZSBzdGF0dXMuCisqIFJ1bGUtYmFz
ZWQgZm9ybWF0dGVycyBvbmx5IHVuZGVyc3RhbmQgVU5VTV9ERUZBVUxUX1JVTEVTRVQgYW5kIFVO
VU1fUFVCTElDX1JVTEVTRVRTLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnku
CisqIEBwYXJhbSB0YWcgVGhlIGF0dHJpYnV0ZSB0byBxdWVyeTsgb25lIG9mIFVOVU1fUE9TSVRJ
VkVfUFJFRklYLCBVTlVNX1BPU0lUSVZFX1NVRkZJWCwKKyogVU5VTV9ORUdBVElWRV9QUkVGSVgs
IFVOVU1fTkVHQVRJVkVfU1VGRklYLCBVTlVNX1BBRERJTkdfQ0hBUkFDVEVSLCBVTlVNX0NVUlJF
TkNZX0NPREUsCisqIFVOVU1fREVGQVVMVF9SVUxFU0VULCBvciBVTlVNX1BVQkxJQ19SVUxFU0VU
Uy4KKyogQHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUg
YXR0cmlidXRlLgorKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIFRoZSBtYXhpbXVtIHNpemUgb2YgcmVz
dWx0LgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2Vp
dmUgYW55IGVycm9ycworKiBAcmV0dXJuIFRoZSB0b3RhbCBidWZmZXIgc2l6ZSBuZWVkZWQ7IGlm
IGdyZWF0ZXIgdGhhbiByZXN1bHRMZW5ndGgsIHRoZSBvdXRwdXQgd2FzIHRydW5jYXRlZC4KKyog
QHNlZSB1bnVtX3NldFRleHRBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX2dldEF0dHJpYnV0ZQorKiBA
c2VlIHVudW1fc2V0QXR0cmlidXRlCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGlu
dDMyX3QgVV9FWFBPUlQyIAordW51bV9nZXRUZXh0QXR0cmlidXRlKCAgICBjb25zdCAgICBVTnVt
YmVyRm9ybWF0KiAgICAgICAgICAgICAgICAgICAgZm10LAorICAgICAgICAgICAgVU51bWJlckZv
cm1hdFRleHRBdHRyaWJ1dGUgICAgICB0YWcsCisgICAgICAgICAgICBVQ2hhciogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LAorICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHRMZW5ndGgsCisgICAgICAgICAgICBVRXJyb3JDb2RlKiAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyk7CisKKy8qKgorKiBTZXQgYSB0ZXh0IGF0dHJp
YnV0ZSBhc3NvY2lhdGVkIHdpdGggYSBVTnVtYmVyRm9ybWF0LgorKiBBbiBleGFtcGxlIG9mIGEg
dGV4dCBhdHRyaWJ1dGUgaXMgdGhlIHN1ZmZpeCBmb3IgcG9zaXRpdmUgbnVtYmVycy4gIFJ1bGUt
YmFzZWQgZm9ybWF0dGVycworKiBvbmx5IHVuZGVyc3RhbmQgVU5VTV9ERUZBVUxUX1JVTEVTRVQu
CisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBzZXQuCisqIEBwYXJhbSB0YWcgVGhlIGF0
dHJpYnV0ZSB0byBzZXQ7IG9uZSBvZiBVTlVNX1BPU0lUSVZFX1BSRUZJWCwgVU5VTV9QT1NJVElW
RV9TVUZGSVgsCisqIFVOVU1fTkVHQVRJVkVfUFJFRklYLCBVTlVNX05FR0FUSVZFX1NVRkZJWCwg
VU5VTV9QQURESU5HX0NIQVJBQ1RFUiwgVU5VTV9DVVJSRU5DWV9DT0RFLAorKiBvciBVTlVNX0RF
RkFVTFRfUlVMRVNFVC4KKyogQHBhcmFtIG5ld1ZhbHVlIFRoZSBuZXcgdmFsdWUgb2YgYXR0ci4K
KyogQHBhcmFtIG5ld1ZhbHVlTGVuZ3RoIFRoZSBsZW5ndGggb2YgbmV3VmFsdWUsIG9yIC0xIGlm
IG51bGwtdGVybWluYXRlZC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9y
Q29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHNlZSB1bnVtX2dldFRleHRBdHRyaWJ1dGUK
KyogQHNlZSB1bnVtX2dldEF0dHJpYnV0ZQorKiBAc2VlIHVudW1fc2V0QXR0cmlidXRlCisqIEBz
dGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordW51bV9zZXRUZXh0
QXR0cmlidXRlKCAgICBVTnVtYmVyRm9ybWF0KiAgICAgICAgICAgICAgICAgICAgZm10LAorICAg
ICAgICAgICAgVU51bWJlckZvcm1hdFRleHRBdHRyaWJ1dGUgICAgICB0YWcsCisgICAgICAgICAg
ICBjb25zdCAgICBVQ2hhciogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUsCisg
ICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlTGVu
Z3RoLAorICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0
dXMpOworCisvKioKKyAqIEV4dHJhY3QgdGhlIHBhdHRlcm4gZnJvbSBhIFVOdW1iZXJGb3JtYXQu
ICBUaGUgcGF0dGVybiB3aWxsIGZvbGxvdworICogdGhlIERlY2ltYWxGb3JtYXQgcGF0dGVybiBz
eW50YXguCisgKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisgKiBAcGFyYW0g
aXNQYXR0ZXJuTG9jYWxpemVkIFRSVUUgaWYgdGhlIHBhdHRlcm4gc2hvdWxkIGJlIGxvY2FsaXpl
ZCwKKyAqIEZBTFNFIG90aGVyd2lzZS4gIFRoaXMgaXMgaWdub3JlZCBpZiB0aGUgZm9ybWF0dGVy
IGlzIGEgcnVsZS1iYXNlZAorICogZm9ybWF0dGVyLgorICogQHBhcmFtIHJlc3VsdCBBIHBvaW50
ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgcGF0dGVybi4KKyAqIEBwYXJhbSByZXN1bHRM
ZW5ndGggVGhlIG1heGltdW0gc2l6ZSBvZiByZXN1bHQuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9p
bnRlciB0byBhbiBpbnB1dC1vdXRwdXQgVUVycm9yQ29kZS4KKyAqIEByZXR1cm4gVGhlIHRvdGFs
IGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwKKyAqIHRo
ZSBvdXRwdXQgd2FzIHRydW5jYXRlZC4KKyAqIEBzZWUgdW51bV9hcHBseVBhdHRlcm4KKyAqIEBz
ZWUgRGVjaW1hbEZvcm1hdAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIGludDMy
X3QgVV9FWFBPUlQyIAordW51bV90b1BhdHRlcm4oICAgIGNvbnN0ICAgIFVOdW1iZXJGb3JtYXQq
ICAgICAgICAgIGZtdCwKKyAgICAgICAgVUJvb2wgICAgICAgICAgICAgICAgICBpc1BhdHRlcm5M
b2NhbGl6ZWQsCisgICAgICAgIFVDaGFyKiAgICAgICAgICAgICAgICAgIHJlc3VsdCwKKyAgICAg
ICAgaW50MzJfdCAgICAgICAgICAgICAgICAgcmVzdWx0TGVuZ3RoLAorICAgICAgICBVRXJyb3JD
b2RlKiAgICAgICAgICAgICBzdGF0dXMpOworCisKKy8qKgorICogQ29uc3RhbnRzIGZvciBzcGVj
aWZ5aW5nIGEgbnVtYmVyIGZvcm1hdCBzeW1ib2wuCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLwor
dHlwZWRlZiBlbnVtIFVOdW1iZXJGb3JtYXRTeW1ib2wgeworICAvKiogVGhlIGRlY2ltYWwgc2Vw
YXJhdG9yICovCisgIFVOVU1fREVDSU1BTF9TRVBBUkFUT1JfU1lNQk9MID0gMCwKKyAgLyoqIFRo
ZSBncm91cGluZyBzZXBhcmF0b3IgKi8KKyAgVU5VTV9HUk9VUElOR19TRVBBUkFUT1JfU1lNQk9M
ID0gMSwKKyAgLyoqIFRoZSBwYXR0ZXJuIHNlcGFyYXRvciAqLworICBVTlVNX1BBVFRFUk5fU0VQ
QVJBVE9SX1NZTUJPTCA9IDIsCisgIC8qKiBUaGUgcGVyY2VudCBzaWduICovCisgIFVOVU1fUEVS
Q0VOVF9TWU1CT0wgPSAzLAorICAvKiogWmVybyovCisgIFVOVU1fWkVST19ESUdJVF9TWU1CT0wg
PSA0LAorICAvKiogQ2hhcmFjdGVyIHJlcHJlc2VudGluZyBhIGRpZ2l0IGluIHRoZSBwYXR0ZXJu
ICovCisgIFVOVU1fRElHSVRfU1lNQk9MID0gNSwKKyAgLyoqIFRoZSBtaW51cyBzaWduICovCisg
IFVOVU1fTUlOVVNfU0lHTl9TWU1CT0wgPSA2LAorICAvKiogVGhlIHBsdXMgc2lnbiAqLworICBV
TlVNX1BMVVNfU0lHTl9TWU1CT0wgPSA3LAorICAvKiogVGhlIGN1cnJlbmN5IHN5bWJvbCAqLwor
ICBVTlVNX0NVUlJFTkNZX1NZTUJPTCA9IDgsCisgIC8qKiBUaGUgaW50ZXJuYXRpb25hbCBjdXJy
ZW5jeSBzeW1ib2wgKi8KKyAgVU5VTV9JTlRMX0NVUlJFTkNZX1NZTUJPTCA9IDksCisgIC8qKiBU
aGUgbW9uZXRhcnkgc2VwYXJhdG9yICovCisgIFVOVU1fTU9ORVRBUllfU0VQQVJBVE9SX1NZTUJP
TCA9IDEwLAorICAvKiogVGhlIGV4cG9uZW50aWFsIHN5bWJvbCAqLworICBVTlVNX0VYUE9ORU5U
SUFMX1NZTUJPTCA9IDExLAorICAvKiogUGVyIG1pbGwgc3ltYm9sICovCisgIFVOVU1fUEVSTUlM
TF9TWU1CT0wgPSAxMiwKKyAgLyoqIEVzY2FwZSBwYWRkaW5nIGNoYXJhY3RlciAqLworICBVTlVN
X1BBRF9FU0NBUEVfU1lNQk9MID0gMTMsCisgIC8qKiBJbmZpbml0eSBzeW1ib2wgKi8KKyAgVU5V
TV9JTkZJTklUWV9TWU1CT0wgPSAxNCwKKyAgLyoqIE5hbiBzeW1ib2wgKi8KKyAgVU5VTV9OQU5f
U1lNQk9MID0gMTUsCisgIC8qKiBTaWduaWZpY2FudCBkaWdpdCBzeW1ib2wKKyAgICogQHN0YWJs
ZSBJQ1UgMy4wICovCisgIFVOVU1fU0lHTklGSUNBTlRfRElHSVRfU1lNQk9MID0gMTYsCisgIC8q
KiBUaGUgbW9uZXRhcnkgZ3JvdXBpbmcgc2VwYXJhdG9yIAorICAgKiBAc3RhYmxlIElDVSAzLjYK
KyAgICovCisgIFVOVU1fTU9ORVRBUllfR1JPVVBJTkdfU0VQQVJBVE9SX1NZTUJPTCA9IDE3LCAg
CisgIC8qKiBPbmUKKyAgICogQGRyYWZ0IElDVSA0LjYKKyAgICovCisgIFVOVU1fT05FX0RJR0lU
X1NZTUJPTCA9IDE4LAorICAvKiogVHdvCisgICAqIEBkcmFmdCBJQ1UgNC42CisgICAqLworICBV
TlVNX1RXT19ESUdJVF9TWU1CT0wgPSAxOSwKKyAgLyoqIFRocmVlCisgICAqIEBkcmFmdCBJQ1Ug
NC42CisgICAqLworICBVTlVNX1RIUkVFX0RJR0lUX1NZTUJPTCA9IDIwLAorICAvKiogRm91cgor
ICAgKiBAZHJhZnQgSUNVIDQuNgorICAgKi8KKyAgVU5VTV9GT1VSX0RJR0lUX1NZTUJPTCA9IDIx
LAorICAvKiogRml2ZQorICAgKiBAZHJhZnQgSUNVIDQuNgorICAgKi8KKyAgVU5VTV9GSVZFX0RJ
R0lUX1NZTUJPTCA9IDIyLAorICAvKiogU2l4CisgICAqIEBkcmFmdCBJQ1UgNC42CisgICAqLwor
ICBVTlVNX1NJWF9ESUdJVF9TWU1CT0wgPSAyMywKKyAgLyoqIFNldmVuCisgICAgKiBAZHJhZnQg
SUNVIDQuNgorICAgKi8KKyAgVU5VTV9TRVZFTl9ESUdJVF9TWU1CT0wgPSAyNCwKKyAgLyoqIEVp
Z2h0CisgICAqIEBkcmFmdCBJQ1UgNC42CisgICAqLworICBVTlVNX0VJR0hUX0RJR0lUX1NZTUJP
TCA9IDI1LAorICAvKiogTmluZQorICAgKiBAZHJhZnQgSUNVIDQuNgorICAgKi8KKyAgVU5VTV9O
SU5FX0RJR0lUX1NZTUJPTCA9IDI2LAorICAvKiogY291bnQgc3ltYm9sIGNvbnN0YW50cyAqLwor
ICBVTlVNX0ZPUk1BVF9TWU1CT0xfQ09VTlQgPSAyNworfSBVTnVtYmVyRm9ybWF0U3ltYm9sOwor
CisvKioKKyogR2V0IGEgc3ltYm9sIGFzc29jaWF0ZWQgd2l0aCBhIFVOdW1iZXJGb3JtYXQuCisq
IEEgVU51bWJlckZvcm1hdCB1c2VzIHN5bWJvbHMgdG8gcmVwcmVzZW50IHRoZSBzcGVjaWFsIGxv
Y2FsZS1kZXBlbmRlbnQKKyogY2hhcmFjdGVycyBpbiBhIG51bWJlciwgZm9yIGV4YW1wbGUgdGhl
IHBlcmNlbnQgc2lnbi4gVGhpcyBBUEkgaXMgbm90CisqIHN1cHBvcnRlZCBmb3IgcnVsZS1iYXNl
ZCBmb3JtYXR0ZXJzLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisqIEBw
YXJhbSBzeW1ib2wgVGhlIFVOdW1iZXJGb3JtYXRTeW1ib2wgY29uc3RhbnQgZm9yIHRoZSBzeW1i
b2wgdG8gZ2V0CisqIEBwYXJhbSBidWZmZXIgVGhlIHN0cmluZyBidWZmZXIgdGhhdCB3aWxsIHJl
Y2VpdmUgdGhlIHN5bWJvbCBzdHJpbmc7CisqICAgICAgICAgICAgICAgaWYgaXQgaXMgTlVMTCwg
dGhlbiBvbmx5IHRoZSBsZW5ndGggb2YgdGhlIHN5bWJvbCBpcyByZXR1cm5lZAorKiBAcGFyYW0g
c2l6ZSBUaGUgc2l6ZSBvZiB0aGUgc3RyaW5nIGJ1ZmZlcgorKiBAcGFyYW0gc3RhdHVzIEEgcG9p
bnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAcmV0dXJuIFRo
ZSBsZW5ndGggb2YgdGhlIHN5bWJvbDsgdGhlIGJ1ZmZlciBpcyBub3QgbW9kaWZpZWQgaWYKKyog
ICAgICAgICA8Y29kZT5sZW5ndGgmZ3Q7PXNpemU8L2NvZGU+CisqIEBzZWUgdW51bV9zZXRTeW1i
b2wKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKK3Vu
dW1fZ2V0U3ltYm9sKGNvbnN0IFVOdW1iZXJGb3JtYXQgKmZtdCwKKyAgICAgICAgICAgICAgIFVO
dW1iZXJGb3JtYXRTeW1ib2wgc3ltYm9sLAorICAgICAgICAgICAgICAgVUNoYXIgKmJ1ZmZlciwK
KyAgICAgICAgICAgICAgIGludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgIFVFcnJvckNvZGUg
KnN0YXR1cyk7CisKKy8qKgorKiBTZXQgYSBzeW1ib2wgYXNzb2NpYXRlZCB3aXRoIGEgVU51bWJl
ckZvcm1hdC4KKyogQSBVTnVtYmVyRm9ybWF0IHVzZXMgc3ltYm9scyB0byByZXByZXNlbnQgdGhl
IHNwZWNpYWwgbG9jYWxlLWRlcGVuZGVudAorKiBjaGFyYWN0ZXJzIGluIGEgbnVtYmVyLCBmb3Ig
ZXhhbXBsZSB0aGUgcGVyY2VudCBzaWduLiAgVGhpcyBBUEkgaXMgbm90CisqIHN1cHBvcnRlZCBm
b3IgcnVsZS1iYXNlZCBmb3JtYXR0ZXJzLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8g
c2V0LgorKiBAcGFyYW0gc3ltYm9sIFRoZSBVTnVtYmVyRm9ybWF0U3ltYm9sIGNvbnN0YW50IGZv
ciB0aGUgc3ltYm9sIHRvIHNldAorKiBAcGFyYW0gdmFsdWUgVGhlIHN0cmluZyB0byBzZXQgdGhl
IHN5bWJvbCB0bworKiBAcGFyYW0gbGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZywgb3Ig
LTEgZm9yIGEgemVyby10ZXJtaW5hdGVkIHN0cmluZworKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRl
ciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycy4KKyogQHNlZSB1bnVtX2dl
dFN5bWJvbAorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMgor
dW51bV9zZXRTeW1ib2woVU51bWJlckZvcm1hdCAqZm10LAorICAgICAgICAgICAgICAgVU51bWJl
ckZvcm1hdFN5bWJvbCBzeW1ib2wsCisgICAgICAgICAgICAgICBjb25zdCBVQ2hhciAqdmFsdWUs
CisgICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCwKKyAgICAgICAgICAgICAgIFVFcnJvckNv
ZGUgKnN0YXR1cyk7CisKKworLyoqCisgKiBHZXQgdGhlIGxvY2FsZSBmb3IgdGhpcyBudW1iZXIg
Zm9ybWF0IG9iamVjdC4KKyAqIFlvdSBjYW4gY2hvb3NlIGJldHdlZW4gdmFsaWQgYW5kIGFjdHVh
bCBsb2NhbGUuCisgKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gZ2V0IHRoZSBsb2NhbGUg
ZnJvbQorICogQHBhcmFtIHR5cGUgdHlwZSBvZiB0aGUgbG9jYWxlIHdlJ3JlIGxvb2tpbmcgZm9y
ICh2YWxpZCBvciBhY3R1YWwpIAorICogQHBhcmFtIHN0YXR1cyBlcnJvciBjb2RlIGZvciB0aGUg
b3BlcmF0aW9uCisgKiBAcmV0dXJuIHRoZSBsb2NhbGUgbmFtZQorICogQHN0YWJsZSBJQ1UgMi44
CisgKi8KK1VfU1RBQkxFIGNvbnN0IGNoYXIqIFVfRVhQT1JUMgordW51bV9nZXRMb2NhbGVCeVR5
cGUoY29uc3QgVU51bWJlckZvcm1hdCAqZm10LAorICAgICAgICAgICAgICAgICAgICAgVUxvY0Rh
dGFMb2NhbGVUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiBzdGF0
dXMpOyAKKworI2VuZGlmIC8qICNpZiAhVUNPTkZJR19OT19GT1JNQVRUSU5HICovCisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3V0eXBlcy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3V0eXBlcy5oCmluZGV4IDAwYmYx
NGNlOGU2ZTVkNmVjOGVkODdkOGU5NTYxNzBjYTU3Nzg3YjIuLjFiY2Y3ZjVkMzkwOWZmNjZiNjU4
ZWE5NWJhNGEyY2RlYjU0OWM5YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
Y3UvdW5pY29kZS91dHlwZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNv
ZGUvdXR5cGVzLmgKQEAgLTU1LDcgKzU1LDcgQEAKICAqLwogI2lmZGVmIFhQX0NQTFVTUExVUwog
IyAgIGlmbmRlZiBVX1NIT1dfQ1BMVVNQTFVTX0FQSQotIyAgICAgICBkZWZpbmUgVV9TSE9XX0NQ
TFVTUExVU19BUEkgMQorIyAgICAgICBkZWZpbmUgVV9TSE9XX0NQTFVTUExVU19BUEkgMAogIyAg
IGVuZGlmCiAjZWxzZQogIyAgIHVuZGVmIFVfU0hPV19DUExVU1BMVVNfQVBJCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAppbmRleCAxNjNi
MTE2MTA0MWNjZGIzNWFkNTI5NzZjYWZlNmJkMTFkZmM4Yjc3Li5jNTFiNDZkNzE2YTI1OTk3YTE3
MzE2ODNiZmY3OGNhMzQxYzQxZmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKQEAgLTE0Miw2ICsxNDIsNyBAQAogICAgIG1hY3Jv
KGxhc3RJbmRleCkgXAogICAgIG1hY3JvKGxlbmd0aCkgXAogICAgIG1hY3JvKGxpbmUpIFwKKyAg
ICBtYWNybyhsb2NhbGVNYXRjaGVyKSBcCiAgICAgbWFjcm8obWVzc2FnZSkgXAogICAgIG1hY3Jv
KG11bHRpbGluZSkgXAogICAgIG1hY3JvKG5hbWUpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcAppbmRleCBk
NDFkZDE3Y2Q4ZWIxMTJhMjFlZmI2YzIxYTE0NDk0ZmIyZWQ2ZDY1Li4zMTA3YjNmNWU5NGRjOGFk
ZWIxYjk2ODVjZmIzNTBmNDczMWRmZGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yQ29uc3RydWN0b3IuY3BwCkBAIC0xNTAsMjUg
KzE1MCwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxDb2xsYXRvckNvbnN0
cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZihFeGVjUwogICAgIC8vIDEwLjIuMiBJbnRsLkNv
bGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVzIFssIG9wdGlvbnNdKSAoRUNNQS00MDIg
Mi4wKQogCiAgICAgLy8gMS4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9j
YWxlTGlzdChsb2NhbGVzKS4KLSAgICAvLyBGSVhNRTogcmVxdWVzdGVkID0gQ2Fub25pY2FsaXpl
TG9jYWxlTGlzdChsb2NhbGVzKTsKKyAgICBKU0FycmF5KiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fu
b25pY2FsaXplTG9jYWxlTGlzdChleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAKICAgICAvLyAy
LiBSZXR1cm5JZkFicnVwdChyZXF1ZXN0ZWRMb2NhbGVzKS4KLSAgICAvLyBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCi0gICAgLy8gICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gMy4gUmV0dXJuIFN1cHBvcnRl
ZExvY2FsZXMoJUNvbGxhdG9yJS5bW2F2YWlsYWJsZUxvY2FsZXNdXSwgcmVxdWVzdGVkTG9jYWxl
cywgb3B0aW9ucykuCi0gICAgLy8gRklYTUU6IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3VwcG9y
dGVkTG9jYWxlcyhhdmFpbGFibGUsIHJlcXVlc3RlZCwgb3B0aW9ucykpOwotCi0gICAgLy8gUmV0
dXJuIGVtcHR5IGFycmF5IHVudGlsIHByb3Blcmx5IGltcGxlbWVudGVkLgotICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmNh
bGxlZSgpLT5nbG9iYWxPYmplY3QoKTsKLSAgICBKU0FycmF5KiBzdXBwb3J0ZWRMb2NhbGVzID0g
SlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0
cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoVW5kZWNpZGVk
KSwgMCk7Ci0gICAgaWYgKCFzdXBwb3J0ZWRMb2NhbGVzKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7Ci0KLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHN1cHBvcnRlZExvY2FsZXMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoc3VwcG9ydGVkTG9jYWxlcyhleGVjLCBnbG9iYWxPYmplY3QtPmludGxDb2xsYXRvckF2YWls
YWJsZUxvY2FsZXMoKSwgcmVxdWVzdGVkTG9jYWxlcywgZXhlYy0+YXJndW1lbnQoMSkpKTsKIH0K
LSAgICAKKwogdm9pZCBJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvcjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGxDb2xsYXRvckNvbnN0
cnVjdG9yKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxDb2xsYXRvckNvbnN0cnVjdG9yKj4oY2Vs
bCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRp
bWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMGI4ZDQ2MGQyNjc0MWE0Yjkz
MzZiOGNiMGY4YjY0ZmI3OGQwNjg3ZC4uOThkM2JiZTNkNDBlMmFjZmViNzI4ZjhhMzYwNTQzNDU1
MjYwMzcyMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERh
dGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcApAQCAtMTUwLDIyICsxNTAs
MTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbWVGb3JtYXRDb25z
dHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YKICAgICAvLyAxMi4yLjIgSW50bC5EYXRlVGlt
ZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YobG9jYWxlcyBbLCBvcHRpb25zXSkgKEVDTUEtNDAy
IDIuMCkKIAogICAgIC8vIDEuIExldCBhdmFpbGFibGVMb2NhbGVzIGJlICVEYXRlVGltZUZvcm1h
dCUuW1thdmFpbGFibGVMb2NhbGVzXV0uCi0gICAgLy8gRklYTUU6IGF2YWlsYWJsZSA9IEludGxE
YXRlVGltZUZvcm1hdENvbnN0cnVjdG9yOjpnZXRBdmFpbGFibGVMb2NhbGVzKCkKKyAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgp
OworICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiBhdmFpbGFibGVMb2NhbGVzID0gZ2xvYmFsT2Jq
ZWN0LT5pbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CiAKICAgICAvLyAyLiBM
ZXQgcmVxdWVzdGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgot
ICAgIC8vIEZJWE1FOiByZXF1ZXN0ZWQgPSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMp
CisgICAgSlNBcnJheSogcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
ZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8v
IDMuIFJldHVybiBTdXBwb3J0ZWRMb2NhbGVzKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExv
Y2FsZXMsIG9wdGlvbnMpLgotICAgIC8vIEZJWE1FOiByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN1
cHBvcnRlZExvY2FsZXMoYXZhaWxhYmxlLCByZXF1ZXN0ZWQsIG9wdGlvbnMpKTsKLQotICAgIC8v
IFJldHVybiBlbXB0eSBhcnJheSB1bnRpbCBwcm9wZXJseSBpbXBsZW1lbnRlZC4KLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVj
LT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgSlNBcnJheSogc3VwcG9ydGVkTG9jYWxl
cyA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIGdsb2JhbE9iamVjdC0+YXJy
YXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aFVuZGVj
aWRlZCksIDApOwotICAgIGlmICghc3VwcG9ydGVkTG9jYWxlcykKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYykpOwotCi0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShzdXBwb3J0ZWRMb2NhbGVzKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHN1cHBvcnRlZExvY2FsZXMoZXhlYywgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVk
TG9jYWxlcywgZXhlYy0+YXJndW1lbnQoMSkpKTsKIH0KICAgICAKIHZvaWQgSW50bERhdGVUaW1l
Rm9ybWF0Q29uc3RydWN0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwCmluZGV4IGI4NjM5ZDZiMTRjNzAw
N2E4NzEwMjU1NzdhYWUyZWQyOWZiY2QyZTEuLmQwNjZlZTgwNGJmNzg2MmQwNGNlMWNhZDk3ZmZi
ZWIxYzFmY2M2MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcApAQCAtMTUwLDIyICsxNTAs
MTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9ybWF0Q29uc3Ry
dWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKEUKICAgICAvLyAxMS4yLjIgSW50bC5OdW1iZXJG
b3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKGxvY2FsZXMgWywgb3B0aW9uc10pIChFQ01BLTQwMiAy
LjApCiAKICAgICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlTnVtYmVyRm9ybWF0JS5b
W2F2YWlsYWJsZUxvY2FsZXNdXS4KLSAgICAvLyBGSVhNRTogYXZhaWxhYmxlID0gSW50bE51bWJl
ckZvcm1hdENvbnN0cnVjdG9yOjpnZXRBdmFpbGFibGVMb2NhbGVzKCkKKyAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpOworICAg
IGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiBhdmFpbGFibGVMb2NhbGVzID0gZ2xvYmFsT2JqZWN0LT5p
bnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogCiAgICAgLy8gMi4gTGV0IHJlcXVl
c3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KLSAgICAvLyBG
SVhNRTogcmVxdWVzdGVkID0gQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKQorICAgIEpT
QXJyYXkqIHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGV4ZWMsIGV4
ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyAzLiBSZXR1
cm4gU3VwcG9ydGVkTG9jYWxlcyhhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBv
cHRpb25zKS4KLSAgICAvLyBGSVhNRTogcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTdXBwb3J0ZWRM
b2NhbGVzKGF2YWlsYWJsZSwgcmVxdWVzdGVkLCBvcHRpb25zKSk7Ci0KLSAgICAvLyBSZXR1cm4g
ZW1wdHkgYXJyYXkgdW50aWwgcHJvcGVybHkgaW1wbGVtZW50ZWQuCi0gICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2FsbGVl
KCktPmdsb2JhbE9iamVjdCgpOwotICAgIEpTQXJyYXkqIHN1cHBvcnRlZExvY2FsZXMgPSBKU0Fy
cmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0
dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhVbmRlY2lkZWQpLCAw
KTsKLSAgICBpZiAoIXN1cHBvcnRlZExvY2FsZXMpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKLQotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoc3VwcG9ydGVkTG9jYWxlcyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShz
dXBwb3J0ZWRMb2NhbGVzKGV4ZWMsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMs
IGV4ZWMtPmFyZ3VtZW50KDEpKSk7CiB9CiAKIHZvaWQgSW50bE51bWJlckZvcm1hdENvbnN0cnVj
dG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCmluZGV4IGJhNDU3
ZTcyNTYwOTEwNzg5MTIyZjUxMzc1ZWU5ZmRjMTAyNGQzMmYuLjkwNjlmNWRiMGM4NGY4NmJiODNm
MDJmNWQyZjBjODllMzZhOWE2NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxPYmplY3QuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoSU5UTCkKIAor
I2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNs
dWRlICJJbnRsQ29sbGF0b3IuaCIKICNpbmNsdWRlICJJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5o
IgpAQCAtMzksOCArNDAsMTAgQEAKICNpbmNsdWRlICJJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0
b3IuaCIKICNpbmNsdWRlICJJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
TG9va3VwLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCisjaW5jbHVkZSA8dW5pY29k
ZS91bG9jLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CkBAIC0xMDIsNiArMTA1LDYwMyBAQCBTdHJ1Y3R1cmUqIEludGxPYmplY3Q6OmNyZWF0ZVN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVgogICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAorU3RyaW5nIGRlZmF1
bHRMb2NhbGUoKQoreworICAgIC8vIDYuMi40IERlZmF1bHRMb2NhbGUgKCkKKyAgICBjb25zdCBj
aGFyKiBkZWYgPSB1bG9jX2dldERlZmF1bHQoKTsKKyAgICBTdHJpbmcgbG9jID0gU3RyaW5nKGRl
Ziwgc3RybGVuKGRlZikpOworICAgIHJldHVybiBsb2MucmVwbGFjZSgnXycsICctJyk7Cit9CisK
K3N0YXRpYyBTdHJpbmcgZ2V0SW50bFN0cmluZ09wdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgb3B0aW9ucywgUHJvcGVydHlOYW1lIHByb3BlcnR5LCBjb25zdCBIYXNoU2V0PFN0cmluZz4m
IHZhbHVlcywgY29uc3QgY2hhciogbm90Rm91bmQsIFN0cmluZyBmYWxsYmFjaykKK3sKKyAgICAv
LyA5LjIuOSBHZXRPcHRpb24gKG9wdGlvbnMsIHByb3BlcnR5LCB0eXBlLCB2YWx1ZXMsIGZhbGxi
YWNrKQorICAgIC8vIEZvciB0eXBlPSJzdHJpbmciLgorCisgICAgLy8gMS4gTGV0IG9wdHMgYmUg
VG9PYmplY3Qob3B0aW9ucykuCisgICAgSlNPYmplY3QqIG9wdHMgPSBvcHRpb25zLnRvT2JqZWN0
KGV4ZWMpOworCisgICAgLy8gMi4gUmV0dXJuSWZBYnJ1cHQob3B0cykuCisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAvLyAzLiBM
ZXQgdmFsdWUgYmUgR2V0KG9wdHMsIHByb3BlcnR5KS4KKyAgICBKU1ZhbHVlIHZhbHVlID0gb3B0
cy0+Z2V0KGV4ZWMsIHByb3BlcnR5KTsKKworICAgIC8vIDQuIFJldHVybklmQWJydXB0KHZhbHVl
KS4KKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKworICAgIC8vIDUuIElmIHZhbHVlIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KKyAgICBpZiAo
IXZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgLy8gYS4gQXNzZXJ0OiB0eXBlIGlzICJi
b29sZWFuIiBvciAic3RyaW5nIi4KKyAgICAgICAgLy8gRnVuY3Rpb24gZGVkaWNhdGVkIHRvICJz
dHJpbmciLgorCisgICAgICAgIC8vIGMuIElmIHR5cGUgaXMgInN0cmluZyIsIHRoZW4KKyAgICAg
ICAgLy8gaS4gTGV0IHZhbHVlIGJlIFRvU3RyaW5nKHZhbHVlKS4KKyAgICAgICAgSlNTdHJpbmcq
IHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisKKyAgICAgICAgLy8gaWkuIFJl
dHVybklmQWJydXB0KHZhbHVlKS4KKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgICAgIC8vIGQuIElmIHZhbHVlcyBp
cyBub3QgdW5kZWZpbmVkLCB0aGVuCisgICAgICAgIC8vIGkuIElmIHZhbHVlcyBkb2VzIG5vdCBj
b250YWluIGFuIGVsZW1lbnQgZXF1YWwgdG8gdmFsdWUsIHRocm93IGEgUmFuZ2VFcnJvciBleGNl
cHRpb24uCisgICAgICAgIGlmICghdmFsdWVzLmlzRW1wdHkoKSAmJiAhdmFsdWVzLmNvbnRhaW5z
KHN0cmluZ1ZhbHVlLT52YWx1ZShleGVjKSkpIHsKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkudGhy
b3dFeGNlcHRpb24oZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBTdHJpbmcobm90Rm91bmQp
KSk7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBlLiBSZXR1cm4gdmFsdWUuCisgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZS0+dmFsdWUoZXhl
Yyk7CisgICAgfQorCisgICAgLy8gNi4gRWxzZSByZXR1cm4gZmFsbGJhY2suCisgICAgcmV0dXJu
IGZhbGxiYWNrOworfQorCitzdGF0aWMgU3RyaW5nIGdldFByaXZhdGVVc2VMYW5nVGFnKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXJ0cywgc2l6ZV90IHN0YXJ0SW5kZXgpCit7CisgICAgc2l6ZV90
IG51bVBhcnRzID0gcGFydHMuc2l6ZSgpOworICAgIHNpemVfdCBjdXJyZW50SW5kZXggPSBzdGFy
dEluZGV4OworCisgICAgLy8gQ2hlY2sgZm9yIHByaXZhdGV1c2UuCisgICAgLy8gcHJpdmF0ZXVz
ZSA9ICJ4IiAxKigiLSIgKDIqOGFscGhhbnVtKSkKKyAgICBTdHJpbmdCdWlsZGVyIHByaXZhdGV1
c2U7CisgICAgd2hpbGUgKGN1cnJlbnRJbmRleCA8IG51bVBhcnRzKSB7CisgICAgICAgIGNvbnN0
IFN0cmluZyYgc2luZ2xldG9uID0gcGFydHNbY3VycmVudEluZGV4XTsKKyAgICAgICAgdW5zaWdu
ZWQgc2luZ2xldG9uTGVuZ3RoID0gc2luZ2xldG9uLmxlbmd0aCgpOworICAgICAgICBib29sIGlz
VmFsaWQgPSAoc2luZ2xldG9uTGVuZ3RoID09IDEgJiYgKHNpbmdsZXRvbiA9PSAieCIgfHwgc2lu
Z2xldG9uID09ICJYIikpOworICAgICAgICBpZiAoIWlzVmFsaWQpCisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBpZiAoY3VycmVudEluZGV4ICE9IHN0YXJ0SW5kZXgpCisgICAgICAgICAg
ICBwcml2YXRldXNlLmFwcGVuZCgnLScpOworCisgICAgICAgICsrY3VycmVudEluZGV4OworICAg
ICAgICB1bnNpZ25lZCBudW1FeHRQYXJ0cyA9IDA7CisgICAgICAgIHByaXZhdGV1c2UuYXBwZW5k
KCd4Jyk7CisgICAgICAgIHdoaWxlIChjdXJyZW50SW5kZXggPCBudW1QYXJ0cykgeworICAgICAg
ICAgICAgY29uc3QgU3RyaW5nJiBleHRQYXJ0ID0gcGFydHNbY3VycmVudEluZGV4XTsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGV4dFBhcnRMZW5ndGggPSBleHRQYXJ0Lmxlbmd0aCgpOworCisgICAg
ICAgICAgICBib29sIGlzVmFsaWQgPSAoZXh0UGFydExlbmd0aCA+PSAyICYmIGV4dFBhcnRMZW5n
dGggPD0gOCAmJiBleHRQYXJ0LmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNBU0NJSUFscGhhbnVt
ZXJpYz4oKSk7CisgICAgICAgICAgICBpZiAoIWlzVmFsaWQpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgICsrY3VycmVudEluZGV4OworICAgICAgICAgICAgKytudW1FeHRQ
YXJ0czsKKyAgICAgICAgICAgIHByaXZhdGV1c2UuYXBwZW5kKCctJyk7CisgICAgICAgICAgICBw
cml2YXRldXNlLmFwcGVuZChleHRQYXJ0LmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkpOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gUmVxdWlyZXMgYXQgbGVhc3Qgb25lIHByb2R1Y3Rpb24uCisg
ICAgICAgIGlmICghbnVtRXh0UGFydHMpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Cisg
ICAgfQorCisgICAgLy8gTGVmdG92ZXJzIG1ha2VzIGl0IGludmFsaWQuCisgICAgaWYgKGN1cnJl
bnRJbmRleCA8IG51bVBhcnRzKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICByZXR1
cm4gcHJpdmF0ZXVzZS50b1N0cmluZygpOworfQorCitzdGF0aWMgU3RyaW5nIGdldENhbm9uaWNh
bExhbmdUYWcoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcnRzKQoreworICAgIEFTU0VSVCghcGFy
dHMuaXNFbXB0eSgpKTsKKworICAgIC8vIEZvbGxvd3MgdGhlIGdyYW1tYXIgYXQgaHR0cHM6Ly93
d3cucmZjLWVkaXRvci5vcmcvcmZjL2JjcC9iY3A0Ny50eHQKKyAgICAvLyBsYW5ndGFnID0gbGFu
Z3VhZ2UgWyItIiBzY3JpcHRdIFsiLSIgcmVnaW9uXSAqKCItIiB2YXJpYW50KSAqKCItIiBleHRl
bnNpb24pIFsiLSIgcHJpdmF0ZXVzZV0KKworICAgIHNpemVfdCBudW1QYXJ0cyA9IHBhcnRzLnNp
emUoKTsKKyAgICAvLyBDaGVjayBmb3IgbGFuZ3VhZ2UuCisgICAgLy8gbGFuZ3VhZ2UgPSAyKjNB
TFBIQSBbIi0iIGV4dGxhbmddIC8gNEFMUEhBIC8gNSo4QUxQSEEKKyAgICBzaXplX3QgY3VycmVu
dEluZGV4ID0gMDsKKyAgICBjb25zdCBTdHJpbmcmIGxhbmd1YWdlID0gcGFydHNbY3VycmVudElu
ZGV4XTsKKyAgICB1bnNpZ25lZCBsYW5ndWFnZUxlbmd0aCA9IGxhbmd1YWdlLmxlbmd0aCgpOwor
ICAgIGlmIChsYW5ndWFnZUxlbmd0aCA8IDIgfHwgbGFuZ3VhZ2VMZW5ndGggPiA4IHx8ICFsYW5n
dWFnZS5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzQVNDSUlBbHBoYT4oKSkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworCisgICAgKytjdXJyZW50SW5kZXg7CisgICAgU3RyaW5nQnVpbGRlciBj
YW5vbmljYWw7CisgICAgY2Fub25pY2FsLmFwcGVuZChsYW5ndWFnZS5jb252ZXJ0VG9BU0NJSUxv
d2VyY2FzZSgpKTsKKworICAgIC8vIENoZWNrIGZvciBleHRsYW5nLgorICAgIC8vIGV4dGxhbmcg
PSAzQUxQSEEgKjIoIi0iIDNBTFBIQSkKKyAgICBpZiAobGFuZ3VhZ2VMZW5ndGggPD0gMykgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIHRpbWVzID0gMDsgdGltZXMgPCAzICYmIGN1cnJlbnRJbmRl
eCA8IG51bVBhcnRzOyArK3RpbWVzKSB7CisgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGV4dGxh
bmcgPSBwYXJ0c1tjdXJyZW50SW5kZXhdOworICAgICAgICAgICAgdW5zaWduZWQgZXh0bGFuZ0xl
bmd0aCA9IGV4dGxhbmcubGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAoZXh0bGFuZ0xlbmd0aCA9
PSAzICYmIGV4dGxhbmcuaXNBbGxTcGVjaWFsQ2hhcmFjdGVyczxpc0FTQ0lJQWxwaGE+KCkpIHsK
KyAgICAgICAgICAgICAgICArK2N1cnJlbnRJbmRleDsKKyAgICAgICAgICAgICAgICBjYW5vbmlj
YWwuYXBwZW5kKCctJyk7CisgICAgICAgICAgICAgICAgY2Fub25pY2FsLmFwcGVuZChleHRsYW5n
LmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDaGVjayBmb3Igc2Ny
aXB0LgorICAgIC8vIHNjcmlwdCA9IDRBTFBIQQorICAgIGlmIChjdXJyZW50SW5kZXggPCBudW1Q
YXJ0cykgeworICAgICAgICBjb25zdCBTdHJpbmcmIHNjcmlwdCA9IHBhcnRzW2N1cnJlbnRJbmRl
eF07CisgICAgICAgIHVuc2lnbmVkIHNjcmlwdExlbmd0aCA9IHNjcmlwdC5sZW5ndGgoKTsKKyAg
ICAgICAgaWYgKHNjcmlwdExlbmd0aCA9PSA0ICYmIHNjcmlwdC5pc0FsbFNwZWNpYWxDaGFyYWN0
ZXJzPGlzQVNDSUlBbHBoYT4oKSkgeworICAgICAgICAgICAgKytjdXJyZW50SW5kZXg7CisgICAg
ICAgICAgICBjYW5vbmljYWwuYXBwZW5kKCctJyk7CisgICAgICAgICAgICBjYW5vbmljYWwuYXBw
ZW5kKHRvQVNDSUlVcHBlcihzY3JpcHRbMF0pKTsKKyAgICAgICAgICAgIGNhbm9uaWNhbC5hcHBl
bmQoc2NyaXB0LnN1YnN0cmluZygxLCAzKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIENoZWNrIGZvciByZWdpb24uCisgICAgLy8gcmVnaW9u
ID0gMkFMUEhBIC8gM0RJR0lUCisgICAgaWYgKGN1cnJlbnRJbmRleCA8IG51bVBhcnRzKSB7Cisg
ICAgICAgIGNvbnN0IFN0cmluZyYgcmVnaW9uID0gcGFydHNbY3VycmVudEluZGV4XTsKKyAgICAg
ICAgdW5zaWduZWQgcmVnaW9uTGVuZ3RoID0gcmVnaW9uLmxlbmd0aCgpOworICAgICAgICBib29s
IGlzVmFsaWRSZWdpb24gPSAoCisgICAgICAgICAgICAocmVnaW9uTGVuZ3RoID09IDIgJiYgcmVn
aW9uLmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNBU0NJSUFscGhhPigpKQorICAgICAgICAgICAg
fHwgKHJlZ2lvbkxlbmd0aCA9PSAzICYmIHJlZ2lvbi5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlz
QVNDSUlEaWdpdD4oKSkKKyAgICAgICAgKTsKKyAgICAgICAgaWYgKGlzVmFsaWRSZWdpb24pIHsK
KyAgICAgICAgICAgICsrY3VycmVudEluZGV4OworICAgICAgICAgICAgY2Fub25pY2FsLmFwcGVu
ZCgnLScpOworICAgICAgICAgICAgY2Fub25pY2FsLmFwcGVuZChyZWdpb24udXBwZXIoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDaGVjayBmb3IgdmFyaWFudC4KKyAgICAvLyA1Kjhh
bHBoYW51bSAvIChESUdJVCAzYWxwaGFudW0pCisgICAgSGFzaFNldDxTdHJpbmc+IHN1YnRhZ3M7
CisgICAgd2hpbGUgKGN1cnJlbnRJbmRleCA8IG51bVBhcnRzKSB7CisgICAgICAgIGNvbnN0IFN0
cmluZyYgdmFyaWFudCA9IHBhcnRzW2N1cnJlbnRJbmRleF07CisgICAgICAgIHVuc2lnbmVkIHZh
cmlhbnRMZW5ndGggPSB2YXJpYW50Lmxlbmd0aCgpOworICAgICAgICBib29sIGlzVmFsaWRWYXJp
YW50ID0gKAorICAgICAgICAgICAgKHZhcmlhbnRMZW5ndGggPj0gNSAmJiB2YXJpYW50TGVuZ3Ro
IDw9IDggJiYgdmFyaWFudC5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzQVNDSUlBbHBoYW51bWVy
aWM+KCkpCisgICAgICAgICAgICB8fCAodmFyaWFudExlbmd0aCA9PSA0ICYmIGlzQVNDSUlEaWdp
dCh2YXJpYW50WzBdKSAmJiB2YXJpYW50LnN1YnN0cmluZygxLCAzKS5pc0FsbFNwZWNpYWxDaGFy
YWN0ZXJzPGlzQVNDSUlBbHBoYW51bWVyaWM+KCkpCisgICAgICAgICk7CisgICAgICAgIGlmICgh
aXNWYWxpZFZhcmlhbnQpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBDYW5ub3Qg
aW5jbHVkZSBkdXBsaWNhdGUgc3VidGFncyAoY2FzZSBpbnNlbnNpdGl2ZSkuCisgICAgICAgIGNv
bnN0IFN0cmluZyYgbG93ZXJWYXJpYW50ID0gdmFyaWFudC5jb252ZXJ0VG9BU0NJSUxvd2VyY2Fz
ZSgpOworICAgICAgICBpZiAoc3VidGFncy5jb250YWlucyhsb3dlclZhcmlhbnQpKQorICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICBzdWJ0YWdzLmFkZChsb3dlclZhcmlhbnQp
OworCisgICAgICAgICsrY3VycmVudEluZGV4OworCisgICAgICAgIC8vIFJlb3JkZXJpbmcgdmFy
aWFudCBzdWJ0YWdzIGlzIG5vdCByZXF1aXJlZCBpbiB0aGUgc3BlYy4KKyAgICAgICAgY2Fub25p
Y2FsLmFwcGVuZCgnLScpOworICAgICAgICBjYW5vbmljYWwuYXBwZW5kKGxvd2VyVmFyaWFudCk7
CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIGV4dGVuc2lvbi4KKyAgICAvLyBleHRlbnNpb24g
PSBzaW5nbGV0b24gMSooIi0iICgyKjhhbHBoYW51bSkpCisgICAgLy8gc2luZ2xldG9uID0gYWxw
aGFudW0gZXhjZXB0IHggb3IgWAorICAgIHN1YnRhZ3MuY2xlYXIoKTsKKyAgICBWZWN0b3I8U3Ry
aW5nPiBleHRlbnNpb25zOworICAgIHdoaWxlIChjdXJyZW50SW5kZXggPCBudW1QYXJ0cykgewor
ICAgICAgICBjb25zdCBTdHJpbmcmIHBvc3NpYmxlU2luZ2xldG9uID0gcGFydHNbY3VycmVudElu
ZGV4XTsKKyAgICAgICAgdW5zaWduZWQgc2luZ2xldG9uTGVuZ3RoID0gcG9zc2libGVTaW5nbGV0
b24ubGVuZ3RoKCk7CisgICAgICAgIGJvb2wgaXNWYWxpZFNpbmdsZXRvbiA9IChzaW5nbGV0b25M
ZW5ndGggPT0gMSAmJiBwb3NzaWJsZVNpbmdsZXRvbiAhPSAieCIgJiYgcG9zc2libGVTaW5nbGV0
b24gIT0gIlgiICYmIGlzQVNDSUlBbHBoYW51bWVyaWMocG9zc2libGVTaW5nbGV0b25bMF0pKTsK
KyAgICAgICAgaWYgKCFpc1ZhbGlkU2luZ2xldG9uKQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgLy8gQ2Fubm90IGluY2x1ZGUgZHVwbGljYXRlIHNpbmdsZXRvbiAoY2FzZSBpbnNlbnNp
dGl2ZSkuCisgICAgICAgIGNvbnN0IFN0cmluZyYgc2luZ2xldG9uID0gcG9zc2libGVTaW5nbGV0
b24uY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKKyAgICAgICAgaWYgKHN1YnRhZ3MuY29udGFp
bnMoc2luZ2xldG9uKSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgc3Vi
dGFncy5hZGQoc2luZ2xldG9uKTsKKworICAgICAgICArK2N1cnJlbnRJbmRleDsKKyAgICAgICAg
aW50IG51bUV4dFBhcnRzID0gMDsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBleHRlbnNpb247Cisg
ICAgICAgIGV4dGVuc2lvbi5hcHBlbmQoc2luZ2xldG9uKTsKKyAgICAgICAgd2hpbGUgKGN1cnJl
bnRJbmRleCA8IG51bVBhcnRzKSB7CisgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGV4dFBhcnQg
PSBwYXJ0c1tjdXJyZW50SW5kZXhdOworICAgICAgICAgICAgdW5zaWduZWQgZXh0UGFydExlbmd0
aCA9IGV4dFBhcnQubGVuZ3RoKCk7CisKKyAgICAgICAgICAgIGJvb2wgaXNWYWxpZCA9IChleHRQ
YXJ0TGVuZ3RoID49IDIgJiYgZXh0UGFydExlbmd0aCA8PSA4ICYmIGV4dFBhcnQuaXNBbGxTcGVj
aWFsQ2hhcmFjdGVyczxpc0FTQ0lJQWxwaGFudW1lcmljPigpKTsKKyAgICAgICAgICAgIGlmICgh
aXNWYWxpZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgKytjdXJyZW50
SW5kZXg7CisgICAgICAgICAgICArK251bUV4dFBhcnRzOworICAgICAgICAgICAgZXh0ZW5zaW9u
LmFwcGVuZCgnLScpOworICAgICAgICAgICAgZXh0ZW5zaW9uLmFwcGVuZChleHRQYXJ0LmNvbnZl
cnRUb0FTQ0lJTG93ZXJjYXNlKCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVxdWlyZXMg
YXQgbGVhc3Qgb25lIHByb2R1Y3Rpb24uCisgICAgICAgIGlmICghbnVtRXh0UGFydHMpCisgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAgICAgZXh0ZW5zaW9ucy5hcHBlbmQoZXh0
ZW5zaW9uLnRvU3RyaW5nKCkpOworICAgIH0KKworICAgIC8vIEFkZCBleHRlbnNpb25zIHRvIGNh
bm9uaWNhbCBzb3J0ZWQgYnkgc2luZ2xldG9uLgorICAgIHN0ZDo6c29ydCgKKyAgICAgICAgZXh0
ZW5zaW9ucy5iZWdpbigpLAorICAgICAgICBleHRlbnNpb25zLmVuZCgpLAorICAgICAgICBbXSAo
Y29uc3QgU3RyaW5nJiBhLCBjb25zdCBTdHJpbmcmIGIpIC0+IGJvb2wgeworICAgICAgICAgICAg
cmV0dXJuIGFbMF0gPCBiWzBdOworICAgICAgICB9CisgICAgKTsKKyAgICBzaXplX3QgbnVtRXh0
ZW5zdGlvbnMgPSBleHRlbnNpb25zLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bUV4dGVuc3Rpb25zOyArK2kpIHsKKyAgICAgICAgY2Fub25pY2FsLmFwcGVuZCgnLScpOwor
ICAgICAgICBjYW5vbmljYWwuYXBwZW5kKGV4dGVuc2lvbnNbaV0pOworICAgIH0KKworICAgIC8v
IENoZWNrIGZvciBwcml2YXRldXNlLgorICAgIGlmIChjdXJyZW50SW5kZXggPCBudW1QYXJ0cykg
eworICAgICAgICBTdHJpbmcgcHJpdmF0ZXVzZSA9IGdldFByaXZhdGVVc2VMYW5nVGFnKHBhcnRz
LCBjdXJyZW50SW5kZXgpOworICAgICAgICBpZiAocHJpdmF0ZXVzZS5pc051bGwoKSkKKyAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgY2Fub25pY2FsLmFwcGVuZCgnLScpOwor
ICAgICAgICBjYW5vbmljYWwuYXBwZW5kKHByaXZhdGV1c2UpOworICAgIH0KKworICAgIC8vIEZJ
WE1FOiBSZXBsYWNlIHN1YnRhZ3Mgd2l0aCB0aGVpciBwcmVmZXJyZWQgdmFsdWVzLgorCisgICAg
cmV0dXJuIGNhbm9uaWNhbC50b1N0cmluZygpOworfQorCitzdGF0aWMgU3RyaW5nIGdldEdyYW5k
ZmF0aGVyZWRMYW5nVGFnKGNvbnN0IFN0cmluZyYgbG9jYWxlKQoreworICAgIC8vIGdyYW5kZmF0
aGVyZWQgPSBpcnJlZ3VsYXIgLyByZWd1bGFyCisgICAgLy8gRklYTUU6IGNvbnZlcnQgdG8gYSBj
b21waWxlIHRpbWUgaGFzaCB0YWJsZSBpZiB0aGlzIGlzIGNhdXNpbmcgcGVyZm9ybWFuY2UgaXNz
dWVzLgorICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHRhZ01hcCA9IHsKKyAgICAgICAgLy8g
SXJyZWd1bGFyLgorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiZW4tZ2Itb2VkIiksIEFTQ0lJTGl0
ZXJhbCgiZW4tR0Itb2VkIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImktYW1pIiksIEFT
Q0lJTGl0ZXJhbCgiYW1pIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImktYm5uIiksIEFT
Q0lJTGl0ZXJhbCgiYm5uIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImktZGVmYXVsdCIp
LCBBU0NJSUxpdGVyYWwoImktZGVmYXVsdCIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJp
LWVub2NoaWFuIiksIEFTQ0lJTGl0ZXJhbCgiaS1lbm9jaGlhbiIpIH0sCisgICAgICAgIHsgQVND
SUlMaXRlcmFsKCJpLWhhayIpLCBBU0NJSUxpdGVyYWwoImhhayIpIH0sCisgICAgICAgIHsgQVND
SUlMaXRlcmFsKCJpLWtsaW5nb24iKSwgQVNDSUlMaXRlcmFsKCJ0bGgiKSB9LAorICAgICAgICB7
IEFTQ0lJTGl0ZXJhbCgiaS1sdXgiKSwgQVNDSUlMaXRlcmFsKCJsYiIpIH0sCisgICAgICAgIHsg
QVNDSUlMaXRlcmFsKCJpLW1pbmdvIiksIEFTQ0lJTGl0ZXJhbCgiaS1taW5nbyIpIH0sCisgICAg
ICAgIHsgQVNDSUlMaXRlcmFsKCJpLW5hdmFqbyIpLCBBU0NJSUxpdGVyYWwoIm52IikgfSwKKyAg
ICAgICAgeyBBU0NJSUxpdGVyYWwoImktcHduIiksIEFTQ0lJTGl0ZXJhbCgicHduIikgfSwKKyAg
ICAgICAgeyBBU0NJSUxpdGVyYWwoImktdGFvIiksIEFTQ0lJTGl0ZXJhbCgidGFvIikgfSwKKyAg
ICAgICAgeyBBU0NJSUxpdGVyYWwoImktdGF5IiksIEFTQ0lJTGl0ZXJhbCgidGF5IikgfSwKKyAg
ICAgICAgeyBBU0NJSUxpdGVyYWwoImktdHN1IiksIEFTQ0lJTGl0ZXJhbCgidHN1IikgfSwKKyAg
ICAgICAgeyBBU0NJSUxpdGVyYWwoInNnbi1iZS1mciIpLCBBU0NJSUxpdGVyYWwoInNmYiIpIH0s
CisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJzZ24tYmUtbmwiKSwgQVNDSUlMaXRlcmFsKCJ2Z3Qi
KSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgic2duLWNoLWRlIiksIEFTQ0lJTGl0ZXJhbCgi
c2dnIikgfSwKKyAgICAgICAgLy8gUmVndWxhci4KKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImFy
dC1sb2piYW4iKSwgQVNDSUlMaXRlcmFsKCJqYm8iKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJh
bCgiY2VsLWdhdWxpc2giKSwgQVNDSUlMaXRlcmFsKCJjZWwtZ2F1bGlzaCIpIH0sCisgICAgICAg
IHsgQVNDSUlMaXRlcmFsKCJuby1ib2siKSwgQVNDSUlMaXRlcmFsKCJuYiIpIH0sCisgICAgICAg
IHsgQVNDSUlMaXRlcmFsKCJuby1ueW4iKSwgQVNDSUlMaXRlcmFsKCJubiIpIH0sCisgICAgICAg
IHsgQVNDSUlMaXRlcmFsKCJ6aC1ndW95dSIpLCBBU0NJSUxpdGVyYWwoImNtbiIpIH0sCisgICAg
ICAgIHsgQVNDSUlMaXRlcmFsKCJ6aC1oYWtrYSIpLCBBU0NJSUxpdGVyYWwoImhhayIpIH0sCisg
ICAgICAgIHsgQVNDSUlMaXRlcmFsKCJ6aC1taW4iKSwgQVNDSUlMaXRlcmFsKCJ6aC1taW4iKSB9
LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiemgtbWluLW5hbiIpLCBBU0NJSUxpdGVyYWwoIm5h
biIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJ6aC14aWFuZyIpLCBBU0NJSUxpdGVyYWwo
ImhzbiIpIH0KKyAgICB9OworCisgICAgcmV0dXJuIHRhZ01hcC5nZXQobG9jYWxlLmNvbnZlcnRU
b0FTQ0lJTG93ZXJjYXNlKCkpOworfQorCitzdGF0aWMgU3RyaW5nIGNhbm9uaWNhbGl6ZUxhbmd1
YWdlVGFnKGNvbnN0IFN0cmluZyYgbG9jYWxlKQoreworICAgIC8vIDYuMi4yIElzU3RydWN0dXJh
bGx5VmFsaWRMYW5ndWFnZVRhZyAobG9jYWxlKQorICAgIC8vIDYuMi4zIENhbm9uaWNhbGl6ZUxh
bmd1YWdlVGFnIChsb2NhbGUpCisgICAgLy8gVGhlc2UgYXJlIGRvbmUgb25lIGFmdGVyIGFub3Ro
ZXIgaW4gQ2Fub25pY2FsaXplTG9jYWxlTGlzdCwgc28gdGhleSBhcmUgY29tYmluZWQgaGVyZSB0
byByZWR1Y2UgZHVwbGljYXRpb24uCisgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcv
cmZjL2JjcC9iY3A0Ny50eHQKKworICAgIC8vIExhbmd1YWdlLVRhZyA9IGxhbmd0YWcgLyBwcml2
YXRldXNlIC8gZ3JhbmRmYXRoZXJlZAorICAgIFN0cmluZyBncmFuZGZhdGhlciA9IGdldEdyYW5k
ZmF0aGVyZWRMYW5nVGFnKGxvY2FsZSk7CisgICAgaWYgKCFncmFuZGZhdGhlci5pc051bGwoKSkK
KyAgICAgICAgcmV0dXJuIGdyYW5kZmF0aGVyOworCisgICAgLy8gRklYTUU6IFJlcGxhY2UgcmVk
dW5kYW50IHRhZ3MgW1JGQzQ2NDddLgorCisgICAgVmVjdG9yPFN0cmluZz4gcGFydHM7CisgICAg
bG9jYWxlLnNwbGl0KCctJywgcGFydHMpOworICAgIGlmICghcGFydHMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIFN0cmluZyBsYW5ndGFnID0gZ2V0Q2Fub25pY2FsTGFuZ1RhZyhwYXJ0cyk7CisgICAg
ICAgIGlmICghbGFuZ3RhZy5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBsYW5ndGFnOwor
CisgICAgICAgIFN0cmluZyBwcml2YXRldXNlID0gZ2V0UHJpdmF0ZVVzZUxhbmdUYWcocGFydHMs
IDApOworICAgICAgICBpZiAoIXByaXZhdGV1c2UuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1
cm4gcHJpdmF0ZXVzZTsKKyAgICB9CisKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK0pTQXJy
YXkqIGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGxvY2Fs
ZXMpCit7CisgICAgLy8gOS4yLjEgQ2Fub25pY2FsaXplTG9jYWxlTGlzdCAobG9jYWxlcykKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgSlNBcnJheSogc2VlbiA9IEpT
QXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1
Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aENvbnRpZ3VvdXMp
LCAwKTsKKyAgICBpZiAoIXNlZW4pIHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICAvLyAxLiBJZiBsb2Nh
bGVzIGlzIHVuZGVmaW5lZCwgdGhlbiBhLiBSZXR1cm4gYSBuZXcgZW1wdHkgTGlzdC4KKyAgICBp
ZiAobG9jYWxlcy5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4gc2VlbjsKKworICAgIC8v
IDIuIExldCBzZWVuIGJlIGFuIGVtcHR5IExpc3QuCisgICAgLy8gRG9uZSBiZWZvcmUgdG8gYWxz
byByZXR1cm4gaW4gc3RlcCAxLCBpZiBuZWVkZWQuCisKKyAgICAvLyAzLiBJZiBUeXBlKGxvY2Fs
ZXMpIGlzIFN0cmluZywgdGhlbgorICAgIEpTT2JqZWN0KiBsb2NhbGVzT2JqZWN0OworICAgIGlm
IChsb2NhbGVzLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgLy8gIGEuIExldCBhTG9jYWxlcyBiZSBD
cmVhdGVBcnJheUZyb21MaXN0KMKrbG9jYWxlc8K7KS4KKyAgICAgICAgSlNBcnJheSogbG9jYWxl
c0FycmF5ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgZ2xvYmFsT2JqZWN0
LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRo
Q29udGlndW91cyksIDEpOworICAgICAgICBsb2NhbGVzQXJyYXktPmluaXRpYWxpemVJbmRleCh2
bSwgMCwgbG9jYWxlcyk7CisgICAgICAgIC8vIDQuIExldCBPIGJlIFRvT2JqZWN0KGFMb2NhbGVz
KS4KKyAgICAgICAgbG9jYWxlc09iamVjdCA9IGxvY2FsZXNBcnJheTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyA0LiBMZXQgTyBiZSBUb09iamVjdChhTG9jYWxlcykuCisgICAgICAgIGxvY2Fs
ZXNPYmplY3QgPSBsb2NhbGVzLnRvT2JqZWN0KGV4ZWMpOworICAgIH0KKworICAgIC8vIDUuIFJl
dHVybklmQWJydXB0KE8pLgorICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyA2LiBMZXQgbGVuIGJlIFRvTGVuZ3RoKEdldChPLCAi
bGVuZ3RoIikpLgorICAgIEpTVmFsdWUgbGVuZ3RoUHJvcGVydHkgPSBsb2NhbGVzT2JqZWN0LT5n
ZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgZG91YmxlIGxlbmd0aCA9
IGxlbmd0aFByb3BlcnR5LnRvTGVuZ3RoKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBLZWVwIHRyYWNrIG9mIGxv
Y2FsZXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIGxpc3QuCisgICAgSGFzaFNldDxTdHJp
bmc+IHNlZW5TZXQ7CisKKyAgICAvLyA3LiBMZXQgayBiZSAwLgorICAgIC8vIDguIFJlcGVhdCwg
d2hpbGUgayA8IGxlbgorICAgIGZvciAoZG91YmxlIGsgPSAwOyBrIDwgbGVuZ3RoOyArK2spIHsK
KyAgICAgICAgLy8gYS4gTGV0IFBrIGJlIFRvU3RyaW5nKGspLgorICAgICAgICAvLyBOb3QgbmVl
ZGVkIGJlY2F1c2UgaGFzUHJvcGVydHkgYW5kIGdldCB0YWtlIGFuIGludCBmb3IgbnVtZXJpYyBr
ZXkuCisKKyAgICAgICAgLy8gYi4gTGV0IGtQcmVzZW50IGJlIEhhc1Byb3BlcnR5KE8sIFBrKS4K
KyAgICAgICAgYm9vbCBrUHJlc2VudCA9IGxvY2FsZXNPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMs
IGspOworCisgICAgICAgIC8vIGMuIFJldHVybklmQWJydXB0KGtQcmVzZW50KS4KKyAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAgICAgLy8gZC4gSWYga1ByZXNlbnQgaXMgdHJ1ZSwgdGhlbgorICAgICAgICBpZiAoa1By
ZXNlbnQpIHsKKyAgICAgICAgICAgIC8vIGkuIExldCBrVmFsdWUgYmUgR2V0KE8sIFBrKS4KKyAg
ICAgICAgICAgIEpTVmFsdWUga1ZhbHVlID0gbG9jYWxlc09iamVjdC0+Z2V0KGV4ZWMsIGspOwor
CisgICAgICAgICAgICAvLyBpaS4gUmV0dXJuSWZBYnJ1cHQoa1ZhbHVlKS4KKyAgICAgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgICAgICAgICAgLy8gaWlpLiBJZiBUeXBlKGtWYWx1ZSkgaXMgbm90IFN0cmluZyBv
ciBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIGlmICgh
a1ZhbHVlLmlzU3RyaW5nKCkgJiYgIWtWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJsb2NhbGUgdmFsdWUgbXVzdCBi
ZSBhIHN0cmluZyBvciBvYmplY3QiKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGl2LiBMZXQgdGFnIGJlIFRvU3RyaW5n
KGtWYWx1ZSkuCisgICAgICAgICAgICBKU1N0cmluZyogdGFnID0ga1ZhbHVlLnRvU3RyaW5nKGV4
ZWMpOworCisgICAgICAgICAgICAvLyB2LiBSZXR1cm5JZkFicnVwdCh0YWcpLgorICAgICAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgICAgICAgICAvLyB2aS4gSWYgSXNTdHJ1Y3R1cmFsbHlWYWxpZExhbmd1YWdl
VGFnKHRhZykgaXMgZmFsc2UsIHRocm93IGEgUmFuZ2VFcnJvciBleGNlcHRpb24uCisgICAgICAg
ICAgICAvLyB2aWkuIExldCBjYW5vbmljYWxpemVkVGFnIGJlIENhbm9uaWNhbGl6ZUxhbmd1YWdl
VGFnKHRhZykuCisgICAgICAgICAgICBTdHJpbmcgY2Fub25pY2FsaXplZFRhZyA9IGNhbm9uaWNh
bGl6ZUxhbmd1YWdlVGFnKHRhZy0+dmFsdWUoZXhlYykpOworICAgICAgICAgICAgaWYgKGNhbm9u
aWNhbGl6ZWRUYWcuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICBleGVjLT52bSgpLnRocm93
RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgU3RyaW5nOjpmb3JtYXQoImlu
dmFsaWQgbGFuZ3VhZ2UgdGFnOiAlcyIsIHRhZy0+dmFsdWUoZXhlYykudXRmOCgpLmRhdGEoKSkp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gdmlpaS4gSWYgY2Fub25pY2FsaXplZFRhZyBpcyBub3QgYW4gZWxlbWVudCBv
ZiBzZWVuLCBhcHBlbmQgY2Fub25pY2FsaXplZFRhZyBhcyB0aGUgbGFzdCBlbGVtZW50IG9mIHNl
ZW4uCisgICAgICAgICAgICBpZiAoc2VlblNldC5hZGQoY2Fub25pY2FsaXplZFRhZykuaXNOZXdF
bnRyeSkKKyAgICAgICAgICAgICAgICBzZWVuLT5wdXNoKGV4ZWMsIGpzU3RyaW5nKGV4ZWMsIGNh
bm9uaWNhbGl6ZWRUYWcpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBlLiBJbmNyZWFzZSBrIGJ5
IDEuCisgICAgfQorCisgICAgcmV0dXJuIHNlZW47Cit9CisKK3N0YXRpYyBTdHJpbmcgYmVzdEF2
YWlsYWJsZUxvY2FsZShjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIFN0
cmluZyBsb2NhbGUpCit7CisgICAgLy8gOS4yLjIgQmVzdEF2YWlsYWJsZUxvY2FsZSAoYXZhaWxh
YmxlTG9jYWxlcywgbG9jYWxlKQorICAgIC8vIDEuIExldCBjYW5kaWRhdGUgYmUgbG9jYWxlLgor
ICAgIFN0cmluZyBjYW5kaWRhdGUgPSBsb2NhbGU7CisKKyAgICAvLyAyLiBSZXBlYXQKKyAgICB3
aGlsZSAoIWNhbmRpZGF0ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gYS4gSWYgYXZhaWxhYmxl
TG9jYWxlcyBjb250YWlucyBhbiBlbGVtZW50IGVxdWFsIHRvIGNhbmRpZGF0ZSwgdGhlbiByZXR1
cm4gY2FuZGlkYXRlLgorICAgICAgICBpZiAoYXZhaWxhYmxlTG9jYWxlcy5jb250YWlucyhjYW5k
aWRhdGUpKQorICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKKworICAgICAgICAvLyBiLiBM
ZXQgcG9zIGJlIHRoZSBjaGFyYWN0ZXIgaW5kZXggb2YgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiAi
LSIgKFUrMDAyRCkgd2l0aGluIGNhbmRpZGF0ZS4gSWYgdGhhdCBjaGFyYWN0ZXIgZG9lcyBub3Qg
b2NjdXIsIHJldHVybiB1bmRlZmluZWQuCisgICAgICAgIHNpemVfdCBwb3MgPSBjYW5kaWRhdGUu
cmV2ZXJzZUZpbmQoIi0iKTsKKyAgICAgICAgaWYgKHBvcyA9PSBub3RGb3VuZCkKKyAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgICAgICAvLyBjLiBJZiBwb3Mg4omlIDIgYW5kIHRo
ZSBjaGFyYWN0ZXIgIi0iIG9jY3VycyBhdCBpbmRleCBwb3MtMiBvZiBjYW5kaWRhdGUsIHRoZW4g
ZGVjcmVhc2UgcG9zIGJ5IDIuCisgICAgICAgIGlmIChwb3MgPj0gMiAmJiBjYW5kaWRhdGUuc3Vi
c3RyaW5nKHBvcy0yLCAxKSA9PSAiLSIpCisgICAgICAgICAgICBwb3MgLT0gMjsKKworICAgICAg
ICAvLyBkLiBMZXQgY2FuZGlkYXRlIGJlIHRoZSBzdWJzdHJpbmcgb2YgY2FuZGlkYXRlIGZyb20g
cG9zaXRpb24gMCwgaW5jbHVzaXZlLCB0byBwb3NpdGlvbiBwb3MsIGV4Y2x1c2l2ZS4KKyAgICAg
ICAgY2FuZGlkYXRlID0gY2FuZGlkYXRlLnN1YnN0cmluZygwLCBwb3MpOworICAgIH0KKworICAg
IHJldHVybiBTdHJpbmcoKTsKK30KKworc3RhdGljIEpTQXJyYXkqIGxvb2t1cFN1cHBvcnRlZExv
Y2FsZXMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxv
Y2FsZXMsIEpTQXJyYXkqIHJlcXVlc3RlZExvY2FsZXMpCit7CisgICAgLy8gOS4yLjYgTG9va3Vw
U3VwcG9ydGVkTG9jYWxlcyAoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcykKKwor
ICAgIC8vIDEuIExldCByTG9jYWxlcyBiZSBDcmVhdGVBcnJheUZyb21MaXN0KHJlcXVlc3RlZExv
Y2FsZXMpLgorICAgIC8vIEFscmVhZHkgYW4gYXJyYXkuCisKKyAgICAvLyAyLiBMZXQgbGVuIGJl
IFRvTGVuZ3RoKEdldChyTG9jYWxlcywgImxlbmd0aCIpKS4KKyAgICB1bnNpZ25lZCBsZW4gPSBy
ZXF1ZXN0ZWRMb2NhbGVzLT5sZW5ndGgoKTsKKworICAgIC8vIDMuIExldCBzdWJzZXQgYmUgYW4g
ZW1wdHkgTGlzdC4KKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgSlNB
cnJheSogc3Vic2V0ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgZ2xvYmFs
T2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJy
YXlXaXRoVW5kZWNpZGVkKSwgMCk7CisgICAgaWYgKCFzdWJzZXQpIHsKKyAgICAgICAgdGhyb3dP
dXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisK
KyAgICAvLyA0LiBMZXQgayBiZSAwLgorICAgIC8vIDUuIFJlcGVhdCB3aGlsZSBrIDwgbGVuCisg
ICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGxlbjsgKytrKSB7CisgICAgICAgIC8vIGEuIExl
dCBQayBiZSBUb1N0cmluZyhrKS4KKyAgICAgICAgLy8gYi4gTGV0IGxvY2FsZSBiZSBHZXQockxv
Y2FsZXMsIFBrKS4KKyAgICAgICAgSlNWYWx1ZSBsb2NhbGUgPSByZXF1ZXN0ZWRMb2NhbGVzLT5n
ZXQoZXhlYywgayk7CisKKyAgICAgICAgLy8gYy4gUmV0dXJuSWZBYnJ1cHQobG9jYWxlKS4KKyAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICAgICAgLy8gZC4gTGV0IG5vRXh0ZW5zaW9uc0xvY2FsZSBiZSB0aGUgU3RyaW5n
IHZhbHVlIHRoYXQgaXMgbG9jYWxlIHdpdGggYWxsIFVuaWNvZGUgbG9jYWxlIGV4dGVuc2lvbiBz
ZXF1ZW5jZXMgcmVtb3ZlZC4KKyAgICAgICAgSlNTdHJpbmcqIGpzTG9jYWxlID0gbG9jYWxlLnRv
U3RyaW5nKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBTdHJpbmcgc0xvY2FsZSA9IGpzTG9jYWxl
LT52YWx1ZShleGVjKTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gcGFydHM7CisgICAgICAgIHNM
b2NhbGUuc3BsaXQoIi0iLCBwYXJ0cyk7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
KyAgICAgICAgc2l6ZV90IHBwID0gcGFydHMuc2l6ZSgpOworICAgICAgICBpZiAocHAgPiAwKQor
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocGFydHNbMF0pOworICAgICAgICBmb3IgKHNpemVf
dCBwID0gMTsgcCA8IHBwOykgeworICAgICAgICAgICAgaWYgKHBhcnRzW3BdID09ICJ1Iikgewor
ICAgICAgICAgICAgICAgIC8vIFNraXAgdGhlIHUtIGFuZCBhbnl0aGluZyB0aGF0IGZvbGxvd3Mg
dW50aWwgYW5vdGhlciBzaW5nbGV0b24uCisgICAgICAgICAgICAgICAgd2hpbGUgKCsrcCA8IHBw
ICYmIHBhcnRzW3BdLmxlbmd0aCgpID4gMSkgeyB9CisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnLScpOworICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQocGFydHNbcF0pOworICAgICAgICAgICAgKytwOworICAgICAg
ICB9CisgICAgICAgIFN0cmluZyBub0V4dGVuc2lvbnNMb2NhbGUgPSBidWlsZGVyLnRvU3RyaW5n
KCk7CisKKyAgICAgICAgLy8gZS4gTGV0IGF2YWlsYWJsZUxvY2FsZSBiZSBCZXN0QXZhaWxhYmxl
TG9jYWxlKGF2YWlsYWJsZUxvY2FsZXMsIG5vRXh0ZW5zaW9uc0xvY2FsZSkuCisgICAgICAgIFN0
cmluZyBhdmFpbGFibGVMb2NhbGUgPSBiZXN0QXZhaWxhYmxlTG9jYWxlKGF2YWlsYWJsZUxvY2Fs
ZXMsIG5vRXh0ZW5zaW9uc0xvY2FsZSk7CisKKyAgICAgICAgLy8gZi4gSWYgYXZhaWxhYmxlTG9j
YWxlIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4gYXBwZW5kIGxvY2FsZSB0byB0aGUgZW5kIG9mIHN1
YnNldC4KKyAgICAgICAgaWYgKCFhdmFpbGFibGVMb2NhbGUuaXNOdWxsKCkpCisgICAgICAgICAg
ICBzdWJzZXQtPnB1c2goZXhlYywgbG9jYWxlKTsKKworICAgICAgICAvLyBnLiBJbmNyZW1lbnQg
ayBieSAxLgorICAgIH0KKworICAgIC8vIDYuIFJldHVybiBzdWJzZXQuCisgICAgcmV0dXJuIHN1
YnNldDsKK30KKworc3RhdGljIEpTQXJyYXkqIGJlc3RGaXRTdXBwb3J0ZWRMb2NhbGVzKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBKU0Fy
cmF5KiByZXF1ZXN0ZWRMb2NhbGVzKQoreworICAgIC8vIDkuMi43IEJlc3RGaXRTdXBwb3J0ZWRM
b2NhbGVzIChhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKQorICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgc29tZXRoaW5nIGJldHRlciB0aGFuIGxvb2t1cC4KKyAgICByZXR1cm4gbG9v
a3VwU3VwcG9ydGVkTG9jYWxlcyhleGVjLCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2Nh
bGVzKTsKK30KKworSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBKU0FycmF5KiByZXF1ZXN0ZWRM
b2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnMpCit7CisgICAgLy8gOS4yLjggU3VwcG9ydGVkTG9jYWxl
cyAoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgb3B0aW9ucykKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIFN0cmluZyBtYXRjaGVyOworCisgICAgLy8gMS4gSWYgb3B0
aW9ucyBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCisgICAgaWYgKCFvcHRpb25zLmlzVW5kZWZpbmVk
KCkpIHsKKyAgICAgICAgLy8gYS4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJs
b2NhbGVNYXRjaGVyIiwgInN0cmluZyIsIMKrICJsb29rdXAiLCAiYmVzdCBmaXQiIMK7LCAiYmVz
dCBmaXQiKS4KKyAgICAgICAgY29uc3QgSGFzaFNldDxTdHJpbmc+IG1hdGNoZXJzID0gSGFzaFNl
dDxTdHJpbmc+KHsgQVNDSUlMaXRlcmFsKCJsb29rdXAiKSwgQVNDSUlMaXRlcmFsKCJiZXN0IGZp
dCIpIH0pOworICAgICAgICBtYXRjaGVyID0gZ2V0SW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRp
b25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCBtYXRjaGVycywgImxvY2FsZU1h
dGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBvciBcImJlc3QgZml0XCIiLCBBU0NJSUxp
dGVyYWwoImJlc3QgZml0IikpOworICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdChtYXRjaGVy
KS4KKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gMi4gRWxzZSwgbGV0IG1h
dGNoZXIgYmUgImJlc3QgZml0Ii4KKyAgICAgICAgbWF0Y2hlciA9IEFTQ0lJTGl0ZXJhbCgiYmVz
dCBmaXQiKTsKKyAgICB9CisKKyAgICBKU0FycmF5KiBzdXBwb3J0ZWRMb2NhbGVzOworICAgIC8v
IDMuIElmIG1hdGNoZXIgaXMgImJlc3QgZml0IiwKKyAgICBpZiAobWF0Y2hlciA9PSAiYmVzdCBm
aXQiKSB7CisgICAgICAgIC8vIGEuIExldCBNYXRjaGVyT3BlcmF0aW9uIGJlIHRoZSBhYnN0cmFj
dCBvcGVyYXRpb24gQmVzdEZpdFN1cHBvcnRlZExvY2FsZXMuCisgICAgICAgIC8vIDUuIExldCBz
dXBwb3J0ZWRMb2NhbGVzIGJlIE1hdGNoZXJPcGVyYXRpb24oYXZhaWxhYmxlTG9jYWxlcywgcmVx
dWVzdGVkTG9jYWxlcykuCisgICAgICAgIHN1cHBvcnRlZExvY2FsZXMgPSBiZXN0Rml0U3VwcG9y
dGVkTG9jYWxlcyhleGVjLCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyA0LiBFbHNlCisgICAgICAgIC8vIGEuIExldCBNYXRjaGVy
T3BlcmF0aW9uIGJlIHRoZSBhYnN0cmFjdCBvcGVyYXRpb24gTG9va3VwU3VwcG9ydGVkTG9jYWxl
cy4KKyAgICAgICAgLy8gNS4gTGV0IHN1cHBvcnRlZExvY2FsZXMgYmUgTWF0Y2hlck9wZXJhdGlv
bihhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKS4KKyAgICAgICAgc3VwcG9ydGVk
TG9jYWxlcyA9IGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoZXhlYywgYXZhaWxhYmxlTG9jYWxlcywg
cmVxdWVzdGVkTG9jYWxlcyk7CisgICAgfQorCisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIC8vIDYuIExldCBzdWJzZXQg
YmUgQ3JlYXRlQXJyYXlGcm9tTGlzdChzdXBwb3J0ZWRMb2NhbGVzKS4KKyAgICAvLyBBbHJlYWR5
IGFuIGFycmF5LgorCisgICAgLy8gNy4gTGV0IGtleXMgYmUgc3Vic2V0LltbT3duUHJvcGVydHlL
ZXlzXV0oKS4KKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBrZXlzID0gUHJvcGVydHlOYW1lQXJyYXko
ZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CisgICAgc3VwcG9ydGVkTG9jYWxlcy0+
Z2V0T3duUHJvcGVydHlOYW1lcyhzdXBwb3J0ZWRMb2NhbGVzLCBleGVjLCBrZXlzLCBFbnVtZXJh
dGlvbk1vZGUoKSk7CisKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzYyA9IFByb3BlcnR5RGVz
Y3JpcHRvcigpOworICAgIGRlc2Muc2V0Q29uZmlndXJhYmxlKGZhbHNlKTsKKyAgICBkZXNjLnNl
dFdyaXRhYmxlKGZhbHNlKTsKKworICAgIC8vIDguIFJlcGVhdCBmb3IgZWFjaCBlbGVtZW50IFAg
b2Yga2V5cyBpbiBMaXN0IG9yZGVyLAorICAgIHNpemVfdCBsZW4gPSBrZXlzLnNpemUoKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgIC8vIGEuIExldCBk
ZXNjIGJlIFByb3BlcnR5RGVzY3JpcHRvciB7IFtbQ29uZmlndXJhYmxlXV06IGZhbHNlLCBbW1dy
aXRhYmxlXV06IGZhbHNlIH0uCisgICAgICAgIC8vIENyZWF0ZWQgYWJvdmUgZm9yIHJldXNlLgor
CisgICAgICAgIC8vIGIuIExldCBzdGF0dXMgYmUgRGVmaW5lUHJvcGVydHlPclRocm93KHN1YnNl
dCwgUCwgZGVzYykuCisgICAgICAgIHN1cHBvcnRlZExvY2FsZXMtPmRlZmluZU93blByb3BlcnR5
KHN1cHBvcnRlZExvY2FsZXMsIGV4ZWMsIGtleXNbaV0sIGRlc2MsIHRydWUpOworCisgICAgICAg
IC8vIGMuIEFzc2VydDogc3RhdHVzIGlzIG5vdCBhYnJ1cHQgY29tcGxldGlvbi4KKyAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgfQorCisgICAgLy8gOS4gUmV0dXJuIHN1YnNldC4KKyAgICByZXR1cm4gc3VwcG9y
dGVkTG9jYWxlczsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUo
SU5UTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmpl
Y3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaAppbmRleCA4
MzQyODU0MmIyZDBmYmM3ZTViMTQ0YTM2YmNiYjg2ZWRmY2JiZTgyLi4yYjA4Mzc1ZmIxZTI1OGE5
MWQ3M2E5OGNlZDFlZjViZjM4NjA3ZTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bE9iamVjdC5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoSU5UTCkKIAor
I2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CkBAIC01Niw2ICs1NywxMCBAQCBwcml2YXRlOgogICAgIEludGxPYmpl
Y3QoVk0mLCBTdHJ1Y3R1cmUqKTsKIH07CiAKK1N0cmluZyBkZWZhdWx0TG9jYWxlKCk7CitKU0Fy
cmF5KiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworSlNWYWx1
ZSBzdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSosIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYsIEpT
QXJyYXkqLCBKU1ZhbHVlKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFC
TEUoSU5UTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pT
VmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAK
aW5kZXggOWUwYWFiMTc3NGRlMTdhMDNjYTZkZTEyYzllOThmOWQ3MjM2MzYwYi4uZDQ2YmYyY2Yw
ZjM3ZWRiZWQ5MmM2YzBmNDAwZWEyNGNkMGYwZTQzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKQEAgLTU2LDYgKzU2LDE2IEBAIGRvdWJsZSBKU1Zh
bHVlOjp0b0ludGVnZXJQcmVzZXJ2ZU5hTihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgcmV0
dXJuIHRydW5jKHRvTnVtYmVyKGV4ZWMpKTsKIH0KIAorZG91YmxlIEpTVmFsdWU6OnRvTGVuZ3Ro
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICBkb3VibGUgZCA9IHRvSW50ZWdlcihleGVj
KTsKKyAgICBpZiAoZCA8PSAwKQorICAgICAgICByZXR1cm4gMC4wOworICAgIGlmIChzdGQ6Omlz
aW5mKGQpKQorICAgICAgICByZXR1cm4gOTAwNzE5OTI1NDc0MDk5MS4wOyAvLyAyICoqIDUzIC0g
MQorICAgIHJldHVybiBzdGQ6Om1pbihkLCA5MDA3MTk5MjU0NzQwOTkxLjApOworfQorCiBkb3Vi
bGUgSlNWYWx1ZTo6dG9OdW1iZXJTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKCFpc0ludDMyKCkgJiYgIWlzRG91YmxlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCmluZGV4IGI3ZWFhZDJkYTBhMmQ1MzM2NmE5MWU2NGE0
YzI5M2ViMGNiOThjYTcuLmM4MDNiNjQ5YTUwNzIyNTQ0YTkzYzBmNjFjMjAxMjVjYTEyYjVkYzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgKQEAgLTI2Miw2
ICsyNjIsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvSW50ZWdl
clByZXNlcnZlTmFOKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgIGludDMyX3QgdG9JbnQzMihFeGVj
U3RhdGUqKSBjb25zdDsKICAgICB1aW50MzJfdCB0b1VJbnQzMihFeGVjU3RhdGUqKSBjb25zdDsK
KyAgICBkb3VibGUgdG9MZW5ndGgoRXhlY1N0YXRlKikgY29uc3Q7CiAKICAgICAvLyBGbG9hdGlu
ZyBwb2ludCBjb252ZXJzaW9ucyAodGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBX
ZWJDb3JlOwogICAgIC8vIHNpbmdsZSBwcmVjaXNpb24gZmxvYXQgaXMgbm90IGEgcmVwcmVzZW50
YXRpb24gdXNlZCBpbiBKUyBvciBKU0MpLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IDk4NjYzZGZjYjA4MmM3YWFiMDdhNjk1Yjkw
OTNjN2RjNDU5ZDFjMjIuLmVlZjM4YTJhODc0ZTBmZDI1NTQ0OTIwNDM3OTFkNTQ3OWE4YWI5YjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAKQEAgLTE0NSw2ICsxNDUsOSBAQAogCiAjaWYgRU5BQkxFKElOVEwpCiAjaW5jbHVkZSAiSW50
bE9iamVjdC5oIgorI2luY2x1ZGUgPHVuaWNvZGUvdWNvbC5oPgorI2luY2x1ZGUgPHVuaWNvZGUv
dWRhdC5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdW51bS5oPgogI2VuZGlmIC8vIEVOQUJMRShJTlRM
KQogCiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCkBAIC05NzgsNiArOTgxLDUwIEBAIHZv
aWQgSlNHbG9iYWxPYmplY3Q6OnNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQogI2VuZGlmCiB9
CiAKKyMgaWYgRU5BQkxFKElOVEwpCitjb25zdCBIYXNoU2V0PFN0cmluZz4mIEpTR2xvYmFsT2Jq
ZWN0OjppbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCkKK3sKKyAgICBpZiAobV9pbnRsQ29s
bGF0b3JBdmFpbGFibGVMb2NhbGVzLmlzRW1wdHkoKSkgeworICAgICAgICBpbnQzMl90IGNvdW50
ID0gdWNvbF9jb3VudEF2YWlsYWJsZSgpOworICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkg
PCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBTdHJpbmcgc3RyID0gU3RyaW5nKHVjb2xfZ2V0
QXZhaWxhYmxlKGkpKTsKKyAgICAgICAgICAgIC8vIENoYW5nZSBmcm9tIElDVSBmb3JtYXQgdG8g
QkNQNDcuCisgICAgICAgICAgICBzdHIucmVwbGFjZSgnXycsICctJyk7CisgICAgICAgICAgICBt
X2ludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMuYWRkKHN0cik7CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIG1faW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlczsKK30KKworY29uc3Qg
SGFzaFNldDxTdHJpbmc+JiBKU0dsb2JhbE9iamVjdDo6aW50bERhdGVUaW1lRm9ybWF0QXZhaWxh
YmxlTG9jYWxlcygpCit7CisgICAgaWYgKG1faW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9j
YWxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaW50MzJfdCBjb3VudCA9IHVkYXRfY291bnRBdmFp
bGFibGUoKTsKKyAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewor
ICAgICAgICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZyh1ZGF0X2dldEF2YWlsYWJsZShpKSk7Cisg
ICAgICAgICAgICAvLyBDaGFuZ2UgZnJvbSBJQ1UgZm9ybWF0IHRvIEJDUDQ3LgorICAgICAgICAg
ICAgc3RyLnJlcGxhY2UoJ18nLCAnLScpOworICAgICAgICAgICAgbV9pbnRsRGF0ZVRpbWVGb3Jt
YXRBdmFpbGFibGVMb2NhbGVzLmFkZChzdHIpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biBtX2ludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXM7Cit9CisKK2NvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgSlNHbG9iYWxPYmplY3Q6OmludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2Nh
bGVzKCkKK3sKKyAgICBpZiAobV9pbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgaW50MzJfdCBjb3VudCA9IHVudW1fY291bnRBdmFpbGFibGUoKTsK
KyAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAg
ICAgU3RyaW5nIHN0ciA9IFN0cmluZyh1bnVtX2dldEF2YWlsYWJsZShpKSk7CisgICAgICAgICAg
ICAvLyBDaGFuZ2UgZnJvbSBJQ1UgZm9ybWF0IHRvIEJDUDQ3LgorICAgICAgICAgICAgc3RyLnJl
cGxhY2UoJ18nLCAnLScpOworICAgICAgICAgICAgbV9pbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxl
TG9jYWxlcy5hZGQoc3RyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbV9pbnRsTnVt
YmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlczsKK30KKyNlbmRpZiAvLyBFTkFCTEUoSU5UTCkKKwog
dm9pZCBKU0dsb2JhbE9iamVjdDo6cXVldWVNaWNyb3Rhc2soUGFzc1JlZlB0cjxNaWNyb3Rhc2s+
IHRhc2spCiB7CiAgICAgaWYgKGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnF1ZXVlVGFza1Rv
RXZlbnRMb29wKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuaAppbmRleCAxYTUyNTBjNjdjZDE0NmVmYmNmZDExMjdjNTcwNjM4YWE0MTNiMTk2Li41
ZGZiNGY0NWQ0M2ZjOTgyNTUzYTI4MjNkMjhhNTMxNTllNjRhMTY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAgLTMwMSw2ICszMDEsMTIg
QEAgcHJvdGVjdGVkOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxKU0dsb2JhbE9iamVjdERlYnVnZ2Fi
bGU+IG1faW5zcGVjdG9yRGVidWdnYWJsZTsKICNlbmRpZgogCisjaWYgRU5BQkxFKElOVEwpCisg
ICAgSGFzaFNldDxTdHJpbmc+IG1faW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlczsKKyAgICBI
YXNoU2V0PFN0cmluZz4gbV9pbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzOworICAg
IEhhc2hTZXQ8U3RyaW5nPiBtX2ludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzOworI2Vu
ZGlmIC8vIEVOQUJMRShJTlRMKQorCiAgICAgUmVmUHRyPFdhdGNocG9pbnRTZXQ+IG1fbWFzcXVl
cmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQ7CiAgICAgUmVmUHRyPFdhdGNocG9pbnRTZXQ+IG1f
aGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50OwogICAgIFJlZlB0cjxXYXRjaHBvaW50U2V0PiBtX3Zh
ckluamVjdGlvbldhdGNocG9pbnQ7CkBAIC01MTgsNiArNTI0LDEyIEBAIHB1YmxpYzoKICAgICBK
U0dsb2JhbE9iamVjdERlYnVnZ2FibGUmIGluc3BlY3RvckRlYnVnZ2FibGUoKSB7IHJldHVybiAq
bV9pbnNwZWN0b3JEZWJ1Z2dhYmxlLmdldCgpOyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShJTlRM
KQorICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxl
cygpOworICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bERhdGVUaW1lRm9ybWF0QXZhaWxh
YmxlTG9jYWxlcygpOworICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bE51bWJlckZvcm1h
dEF2YWlsYWJsZUxvY2FsZXMoKTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5UTCkKKwogICAgIHZvaWQg
c2V0Q29uc29sZUNsaWVudChDb25zb2xlQ2xpZW50KiBjb25zb2xlQ2xpZW50KSB7IG1fY29uc29s
ZUNsaWVudCA9IGNvbnNvbGVDbGllbnQ7IH0KICAgICBDb25zb2xlQ2xpZW50KiBjb25zb2xlQ2xp
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9jb25zb2xlQ2xpZW50OyB9CiAKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAzNzNmYWU2
NTg5Y2RlYzE5ZWJhOTVmNjQ3ZDYzMmE4MTI3ZjE4YTc3Li40NjY2NTRjZWZjNTg1YTBmNjgzODBk
NWU4MjIzN2VkY2NmNWU3YjFlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTUtMDgtMjkgIEFu
ZHkgVmFuV2Fnb25lciAgPHRoZXRhbGVjcmFmdGVyQGdtYWlsLmNvbT4KKworICAgICAgICBbSU5U
TF0gSW1wbGVtZW50IHN1cHBvcnRlZExvY2FsZXNPZiBvbiBJbnRsIENvbnN0cnVjdG9ycworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTk5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBqcy9pbnRsLWNv
bGxhdG9yLWV4cGVjdGVkLnR4dDogQWRkZWQgdGVzdHMgZm9yIHN1cHBvcnRlZExvY2FsZXNPZgor
ICAgICAgICAqIGpzL2ludGwtZGF0ZXRpbWVmb3JtYXQtZXhwZWN0ZWQudHh0OiBBZGRlZCB0ZXN0
cyBmb3Igc3VwcG9ydGVkTG9jYWxlc09mCisgICAgICAgICoganMvaW50bC1udW1iZXJmb3JtYXQt
ZXhwZWN0ZWQudHh0OiBBZGRlZCB0ZXN0cyBmb3Igc3VwcG9ydGVkTG9jYWxlc09mCisgICAgICAg
ICoganMvc2NyaXB0LXRlc3RzL2ludGwtY29sbGF0b3IuanM6IEFkZGVkIHRlc3RzIGZvciBzdXBw
b3J0ZWRMb2NhbGVzT2YKKyAgICAgICAgKiBqcy9zY3JpcHQtdGVzdHMvaW50bC1kYXRldGltZWZv
cm1hdC5qczogQWRkZWQgdGVzdHMgZm9yIHN1cHBvcnRlZExvY2FsZXNPZgorICAgICAgICAqIGpz
L3NjcmlwdC10ZXN0cy9pbnRsLW51bWJlcmZvcm1hdC5qczogQWRkZWQgdGVzdHMgZm9yIHN1cHBv
cnRlZExvY2FsZXNPZgorCiAyMDE1LTA4LTI4ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNv
bT4KIAogICAgICAgICBodHRwL3Rlc3RzL21lZGlhL3ZpZGVvLXBsYXktc3RhbGwuaHRtbCBpcyBm
bGFrZXkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL2ludGwtY29sbGF0b3ItZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvanMvaW50bC1jb2xsYXRvci1leHBlY3RlZC50eHQKaW5kZXggNGQ1
ZmRkZjc1NmZjOGZmMDAwZmVlMzBhNTdkZmFhMDYyNmU0MzU5OC4uZTQzNTBjNzU0MjgwMzU0Yzk0
ZTA2M2U0MjM1MzY5ZDdkYzBjZmI4OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvanMvaW50bC1j
b2xsYXRvci1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvanMvaW50bC1jb2xsYXRvci1l
eHBlY3RlZC50eHQKQEAgLTE4LDYgKzE4LDI5IEBAIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihJbnRsLkNvbGxhdG9yLCAncHJvdG90eXBlJykuZW51bWVyYWJsZSBpcyBmCiBQ
QVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSW50bC5Db2xsYXRvciwgJ3Byb3Rv
dHlwZScpLmNvbmZpZ3VyYWJsZSBpcyBmYWxzZQogUEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRl
ZExvY2FsZXNPZi5sZW5ndGggaXMgMQogUEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2Fs
ZXNPZigpIGlzIGFuIGluc3RhbmNlIG9mIEFycmF5CitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9y
dGVkTG9jYWxlc09mLmNhbGwobnVsbCwgJ2VuJykgaXMgWyAnZW4nIF0KK1BBU1MgSW50bC5Db2xs
YXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbCh7fSwgJ2VuJykgaXMgWyAnZW4nIF0KK1BBU1Mg
SW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbCgxLCAnZW4nKSBpcyBbICdlbicg
XQorUEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZig5KSBpcyBbXQorUEFTUyBJ
bnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignZW4nKSBpcyBbICdlbicgXQorUEFTUyBJ
bnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZih7IGxlbmd0aDogMiwgMTogJ2VuJywgMDog
J2VzJyB9KSBpcyBbICdlcycsICdlbicgXQorUEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExv
Y2FsZXNPZihbICdlbicsICdwdCcsICdlbicsICdlcycgXSkgaXMgWyAnZW4nLCAncHQnLCAnZXMn
IF0KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ0VuLWxhVG4tdXMtdmFy
aWFudDItdmFyaWFudDEtMWFiYy1VLWtvLXRSdWUtQS1hYS1hYWEteC1SRVNFUlZFRCcpIGlzIFsg
J2VuLUxhdG4tVVMtdmFyaWFudDItdmFyaWFudDEtMWFiYy1hLWFhLWFhYS11LWtvLXRydWUteC1y
ZXNlcnZlZCcgXQorUEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignbm8tYm9r
JykgaXMgWyAnbmInIF0KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ3gt
c29tZS10aGluZycpIGlzIFtdCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09m
KE9iamVjdC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcignYScp
IH0gfSB9KSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBhLgorUEFTUyBJbnRsLkNvbGxhdG9yLnN1
cHBvcnRlZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVuZ3RoOiB7IHZhbHVlOiAx
IH0sIDA6IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcignYicpIH0gfSB9KSkgdGhyZXcgZXhjZXB0aW9u
IEVycm9yOiBiLgorUEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZihbIHsgdG9T
dHJpbmcoKSB7IHRocm93IEVycm9yKCdjJykgfSB9IF0pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjog
Yy4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoWyA1IF0pIHRocmV3IGV4
Y2VwdGlvbiBUeXBlRXJyb3I6IGxvY2FsZSB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG9iamVj
dC4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJycpIHRocmV3IGV4Y2Vw
dGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogLgorUEFTUyBJbnRsLkNvbGxh
dG9yLnN1cHBvcnRlZExvY2FsZXNPZignYScpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBp
bnZhbGlkIGxhbmd1YWdlIHRhZzogYS4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2Nh
bGVzT2YoJ2FiY2RlZmdoaWonKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBs
YW5ndWFnZSB0YWc6IGFiY2RlZmdoaWouCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9j
YWxlc09mKCcjJCcpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdl
IHRhZzogIyQuCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi1ALWFi
YycpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4t
QC1hYmMuCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi11JykgdGhy
ZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi11LgorUEFT
UyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignZW4tdS1rbi10cnVlLXUta28tdHJ1
ZScpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4t
dS1rbi10cnVlLXUta28tdHJ1ZS4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVz
T2YoJ2VuLXgnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0
YWc6IGVuLXguCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi0qJykg
dGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi0qLgog
UEFTUyBJbnRsLkNvbGxhdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciBpcyBJbnRsLkNvbGxhdG9y
CiBQQVNTIEludGwuQ29sbGF0b3IucHJvdG90eXBlLmNvbXBhcmUgaXMgYW4gaW5zdGFuY2Ugb2Yg
RnVuY3Rpb24KIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJbnRsLkNvbGxh
dG9yLnByb3RvdHlwZSwgJ2NvbXBhcmUnKS5nZXQgaXMgYW4gaW5zdGFuY2Ugb2YgRnVuY3Rpb24K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL2ludGwtZGF0ZXRpbWVmb3JtYXQtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvanMvaW50bC1kYXRldGltZWZvcm1hdC1leHBlY3RlZC50eHQKaW5k
ZXggNjAxNzNmZTI3MjJlZjY1YjIyMGRkOWJlNDdhZjE0MmJmYmYzODQzNS4uZDA4ODVjMjIxYzdk
MTI3YjRmNmRlMTQ4NTA2NmUxYTkzMjU0NjUyOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvanMv
aW50bC1kYXRldGltZWZvcm1hdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvanMvaW50
bC1kYXRldGltZWZvcm1hdC1leHBlY3RlZC50eHQKQEAgLTE4LDYgKzE4LDI5IEBAIFBBU1MgT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJbnRsLkRhdGVUaW1lRm9ybWF0LCAncHJvdG90
eXBlJykuZW51bWVyYWJsCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSW50
bC5EYXRlVGltZUZvcm1hdCwgJ3Byb3RvdHlwZScpLmNvbmZpZ3VyYWJsZSBpcyBmYWxzZQogUEFT
UyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5sZW5ndGggaXMgMQogUEFT
UyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZigpIGlzIGFuIGluc3RhbmNl
IG9mIEFycmF5CitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNh
bGwobnVsbCwgJ2VuJykgaXMgWyAnZW4nIF0KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBw
b3J0ZWRMb2NhbGVzT2YuY2FsbCh7fSwgJ2VuJykgaXMgWyAnZW4nIF0KK1BBU1MgSW50bC5EYXRl
VGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbCgxLCAnZW4nKSBpcyBbICdlbicgXQor
UEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZig5KSBpcyBbXQorUEFT
UyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4nKSBpcyBbICdlbicg
XQorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZih7IGxlbmd0aDog
MiwgMTogJ2VuJywgMDogJ2VzJyB9KSBpcyBbICdlcycsICdlbicgXQorUEFTUyBJbnRsLkRhdGVU
aW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihbICdlbicsICdwdCcsICdlbicsICdlcycgXSkg
aXMgWyAnZW4nLCAncHQnLCAnZXMnIF0KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0
ZWRMb2NhbGVzT2YoJ0VuLWxhVG4tdXMtdmFyaWFudDItdmFyaWFudDEtMWFiYy1VLWtvLXRSdWUt
QS1hYS1hYWEteC1SRVNFUlZFRCcpIGlzIFsgJ2VuLUxhdG4tVVMtdmFyaWFudDItdmFyaWFudDEt
MWFiYy1hLWFhLWFhYS11LWtvLXRydWUteC1yZXNlcnZlZCcgXQorUEFTUyBJbnRsLkRhdGVUaW1l
Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignbm8tYm9rJykgaXMgWyAnbmInIF0KK1BBU1MgSW50
bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ3gtc29tZS10aGluZycpIGlzIFtd
CitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKE9iamVjdC5jcmVh
dGUobnVsbCwgeyBsZW5ndGg6IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcignYScpIH0gfSB9KSkgdGhy
ZXcgZXhjZXB0aW9uIEVycm9yOiBhLgorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRl
ZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVuZ3RoOiB7IHZhbHVlOiAxIH0sIDA6
IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcignYicpIH0gfSB9KSkgdGhyZXcgZXhjZXB0aW9uIEVycm9y
OiBiLgorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihbIHsgdG9T
dHJpbmcoKSB7IHRocm93IEVycm9yKCdjJykgfSB9IF0pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjog
Yy4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoWyA1IF0pIHRo
cmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IGxvY2FsZSB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9y
IG9iamVjdC4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJycp
IHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogLgorUEFT
UyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignYScpIHRocmV3IGV4Y2Vw
dGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogYS4KK1BBU1MgSW50bC5EYXRl
VGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2FiY2RlZmdoaWonKSB0aHJldyBleGNlcHRp
b24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGFiY2RlZmdoaWouCitQQVNTIElu
dGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCcjJCcpIHRocmV3IGV4Y2VwdGlv
biBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogIyQuCitQQVNTIEludGwuRGF0ZVRp
bWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi1ALWFiYycpIHRocmV3IGV4Y2VwdGlvbiBS
YW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tQC1hYmMuCitQQVNTIEludGwuRGF0
ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi11JykgdGhyZXcgZXhjZXB0aW9uIFJh
bmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi11LgorUEFTUyBJbnRsLkRhdGVUaW1l
Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tdS1rbi10cnVlLXUta28tdHJ1ZScpIHRocmV3
IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tdS1rbi10cnVl
LXUta28tdHJ1ZS4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2Yo
J2VuLXgnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6
IGVuLXguCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi0q
JykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi0q
LgogUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciBpcyBJbnRs
LkRhdGVUaW1lRm9ybWF0CiBQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90eXBlLmZvcm1h
dCBpcyBhbiBpbnN0YW5jZSBvZiBGdW5jdGlvbgogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90eXBlLCAnZm9ybWF0JykuZ2V0IGlz
IGFuIGluc3RhbmNlIG9mIEZ1bmN0aW9uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9pbnRs
LW51bWJlcmZvcm1hdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9pbnRsLW51bWJlcmZv
cm1hdC1leHBlY3RlZC50eHQKaW5kZXggNTIxODUxZWQ2NjVkOGU3NDhkMWI2OTI0NjUzNDZiMWY3
YmVjZjRkMC4uODcwZjExNDc2ZjlkMjExNGE0Y2UwYTZiNjNlN2U2NDkyNGIzYzA0NSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvanMvaW50bC1udW1iZXJmb3JtYXQtZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL2pzL2ludGwtbnVtYmVyZm9ybWF0LWV4cGVjdGVkLnR4dApAQCAtMTgsNiAr
MTgsMjkgQEAgUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuTnVtYmVy
Rm9ybWF0LCAncHJvdG90eXBlJykuZW51bWVyYWJsZQogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEludGwuTnVtYmVyRm9ybWF0LCAncHJvdG90eXBlJykuY29uZmlndXJhYmxl
IGlzIGZhbHNlCiBQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5sZW5n
dGggaXMgMQogUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoKSBpcyBh
biBpbnN0YW5jZSBvZiBBcnJheQorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2Nh
bGVzT2YuY2FsbChudWxsLCAnZW4nKSBpcyBbICdlbicgXQorUEFTUyBJbnRsLk51bWJlckZvcm1h
dC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbCh7fSwgJ2VuJykgaXMgWyAnZW4nIF0KK1BBU1MgSW50
bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoMSwgJ2VuJykgaXMgWyAnZW4n
IF0KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKDkpIGlzIFtdCitQ
QVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4nKSBpcyBbICdlbicg
XQorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoeyBsZW5ndGg6IDIs
IDE6ICdlbicsIDA6ICdlcycgfSkgaXMgWyAnZXMnLCAnZW4nIF0KK1BBU1MgSW50bC5OdW1iZXJG
b3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsgJ2VuJywgJ3B0JywgJ2VuJywgJ2VzJyBdKSBpcyBb
ICdlbicsICdwdCcsICdlcycgXQorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2Nh
bGVzT2YoJ0VuLWxhVG4tdXMtdmFyaWFudDItdmFyaWFudDEtMWFiYy1VLWtvLXRSdWUtQS1hYS1h
YWEteC1SRVNFUlZFRCcpIGlzIFsgJ2VuLUxhdG4tVVMtdmFyaWFudDItdmFyaWFudDEtMWFiYy1h
LWFhLWFhYS11LWtvLXRydWUteC1yZXNlcnZlZCcgXQorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5z
dXBwb3J0ZWRMb2NhbGVzT2YoJ25vLWJvaycpIGlzIFsgJ25iJyBdCitQQVNTIEludGwuTnVtYmVy
Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZigneC1zb21lLXRoaW5nJykgaXMgW10KK1BBU1MgSW50
bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKE9iamVjdC5jcmVhdGUobnVsbCwgeyBs
ZW5ndGg6IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcignYScpIH0gfSB9KSkgdGhyZXcgZXhjZXB0aW9u
IEVycm9yOiBhLgorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoT2Jq
ZWN0LmNyZWF0ZShudWxsLCB7IGxlbmd0aDogeyB2YWx1ZTogMSB9LCAwOiB7IGdldCgpIHsgdGhy
b3cgRXJyb3IoJ2InKSB9IH0gfSkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogYi4KK1BBU1MgSW50
bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsgeyB0b1N0cmluZygpIHsgdGhyb3cg
RXJyb3IoJ2MnKSB9IH0gXSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBjLgorUEFTUyBJbnRsLk51
bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoWyA1IF0pIHRocmV3IGV4Y2VwdGlvbiBUeXBl
RXJyb3I6IGxvY2FsZSB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG9iamVjdC4KK1BBU1MgSW50
bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCcnKSB0aHJldyBleGNlcHRpb24gUmFu
Z2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IC4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQu
c3VwcG9ydGVkTG9jYWxlc09mKCdhJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFs
aWQgbGFuZ3VhZ2UgdGFnOiBhLgorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2Nh
bGVzT2YoJ2FiY2RlZmdoaWonKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBs
YW5ndWFnZSB0YWc6IGFiY2RlZmdoaWouCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRl
ZExvY2FsZXNPZignIyQnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5n
dWFnZSB0YWc6ICMkLgorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2Yo
J2VuLUAtYWJjJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2Ug
dGFnOiBlbi1ALWFiYy4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09m
KCdlbi11JykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFn
OiBlbi11LgorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXUt
a24tdHJ1ZS11LWtvLXRydWUnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBs
YW5ndWFnZSB0YWc6IGVuLXUta24tdHJ1ZS11LWtvLXRydWUuCitQQVNTIEludGwuTnVtYmVyRm9y
bWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4teCcpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9y
OiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4teC4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3Vw
cG9ydGVkTG9jYWxlc09mKCdlbi0qJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFs
aWQgbGFuZ3VhZ2UgdGFnOiBlbi0qLgogUEFTUyBJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUu
Y29uc3RydWN0b3IgaXMgSW50bC5OdW1iZXJGb3JtYXQKIFBBU1MgSW50bC5OdW1iZXJGb3JtYXQu
cHJvdG90eXBlLmZvcm1hdCBpcyBhbiBpbnN0YW5jZSBvZiBGdW5jdGlvbgogUEFTUyBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuTnVtYmVyRm9ybWF0LnByb3RvdHlwZSwgJ2Zv
cm1hdCcpLmdldCBpcyBhbiBpbnN0YW5jZSBvZiBGdW5jdGlvbgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvanMvc2NyaXB0LXRlc3RzL2ludGwtY29sbGF0b3IuanMgYi9MYXlvdXRUZXN0cy9qcy9z
Y3JpcHQtdGVzdHMvaW50bC1jb2xsYXRvci5qcwppbmRleCA1ZGUxOTBlYzMzMGM5OGRiMTYyZTJl
YjYzNGIxZjNhNjVkYjg5NTA4Li5mNTRjYjRkNDIyMjVmYTIzNTQ3MzYwYTg0YzdkYTI0OWRiMDc0
NDdkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1jb2xsYXRv
ci5qcworKysgYi9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1jb2xsYXRvci5qcwpA
QCAtMzUsOCArMzUsNDEgQEAgc2hvdWxkQmVGYWxzZSgiT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihJbnRsLkNvbGxhdG9yLCAncHJvdG90eXBlJykuY29uZmkKIC8vIFRoZSB2YWx1ZSBv
ZiB0aGUgbGVuZ3RoIHByb3BlcnR5IG9mIHRoZSBzdXBwb3J0ZWRMb2NhbGVzT2YgbWV0aG9kIGlz
IDEuCiBzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YubGVuZ3RoIiwg
IjEiKTsKIAotLy8gUmV0dXJucyBTdXBwb3J0ZWRMb2NhbGVzCisvLyBSZXR1cm5zIFN1cHBvcnRl
ZExvY2FsZXMuCiBzaG91bGRCZVR5cGUoIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09m
KCkiLCAiQXJyYXkiKTsKKy8vIERvZXNuJ3QgY2FyZSBhYm91dCBgdGhpc2AuCitzaG91bGRCZSgi
SW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbChudWxsLCAnZW4nKSIsICJbICdl
bicgXSIpOworc2hvdWxkQmUoIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwo
e30sICdlbicpIiwgIlsgJ2VuJyBdIik7CitzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0
ZWRMb2NhbGVzT2YuY2FsbCgxLCAnZW4nKSIsICJbICdlbicgXSIpOworLy8gSWdub3JlcyBub24t
b2JqZWN0LCBub24tc3RyaW5nIGxpc3QuCitzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0
ZWRMb2NhbGVzT2YoOSkiLCAiW10iKTsKKy8vIE1ha2VzIGFuIGFycmF5IG9mIHRhZ3MuCitzaG91
bGRCZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuJykiLCAiWyAnZW4nIF0i
KTsKKy8vIEhhbmRsZXMgYXJyYXktbGlrZSBvYmplY3RzLgorc2hvdWxkQmUoIkludGwuQ29sbGF0
b3Iuc3VwcG9ydGVkTG9jYWxlc09mKHsgbGVuZ3RoOiAyLCAxOiAnZW4nLCAwOiAnZXMnIH0pIiwg
IlsgJ2VzJywgJ2VuJyBdIik7CisvLyBEZWR1cGxpY2F0ZXMgdGFncy4KK3Nob3VsZEJlKCJJbnRs
LkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZihbICdlbicsICdwdCcsICdlbicsICdlcycgXSki
LCAiWyAnZW4nLCAncHQnLCAnZXMnIF0iKTsKKy8vIENhbm9uaWNhbGl6ZXMgdGFncy4KK3Nob3Vs
ZEJlKCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignRW4tbGFUbi11cy12YXJpYW50
Mi12YXJpYW50MS0xYWJjLVUta28tdFJ1ZS1BLWFhLWFhYS14LVJFU0VSVkVEJykiLCAiWyAnZW4t
TGF0bi1VUy12YXJpYW50Mi12YXJpYW50MS0xYWJjLWEtYWEtYWFhLXUta28tdHJ1ZS14LXJlc2Vy
dmVkJyBdIik7CisvLyBSZXBsYWNlcyBvdXRkYXRlZCB0YWdzLgorc2hvdWxkQmUoIkludGwuQ29s
bGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCduby1ib2snKSIsICJbICduYicgXSIpOworLy8gRG9l
c24ndCB0aHJvdywgYnV0IGlnbm9yZXMgcHJpdmF0ZSB0YWdzLgorc2hvdWxkQmUoIkludGwuQ29s
bGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCd4LXNvbWUtdGhpbmcnKSIsICJbXSIpOworLy8gVGhy
b3dzIG9uIHByb2JsZW1zIHdpdGggbGVuZ3RoLCBnZXQsIG9yIHRvU3RyaW5nLgorc2hvdWxkVGhy
b3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKE9iamVjdC5jcmVhdGUobnVsbCwg
eyBsZW5ndGg6IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcignYScpIH0gfSB9KSkiLCAiJ0Vycm9yOiBh
JyIpOworc2hvdWxkVGhyb3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKE9iamVj
dC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgdmFsdWU6IDEgfSwgMDogeyBnZXQoKSB7IHRocm93
IEVycm9yKCdiJykgfSB9IH0pKSIsICInRXJyb3I6IGInIik7CitzaG91bGRUaHJvdygiSW50bC5D
b2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoWyB7IHRvU3RyaW5nKCkgeyB0aHJvdyBFcnJvcign
YycpIH0gfSBdKSIsICInRXJyb3I6IGMnIik7CisvLyBUaHJvd3Mgb24gYmFkIHRhZ3MuCitzaG91
bGRUaHJvdygiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoWyA1IF0pIiwgIidUeXBl
RXJyb3I6IGxvY2FsZSB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG9iamVjdCciKTsKK3Nob3Vs
ZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignJykiLCAiJ1JhbmdlRXJy
b3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiAnIik7CitzaG91bGRUaHJvdygiSW50bC5Db2xsYXRv
ci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2EnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFn
ZSB0YWc6IGEnIik7CitzaG91bGRUaHJvdygiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVz
T2YoJ2FiY2RlZmdoaWonKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGFi
Y2RlZmdoaWonIik7CitzaG91bGRUaHJvdygiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVz
T2YoJyMkJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiAjJCciKTsKK3No
b3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignZW4tQC1hYmMnKSIs
ICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLUAtYWJjJyIpOworc2hvdWxk
VGhyb3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi11JykiLCAiJ1Jhbmdl
RXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi11JyIpOworc2hvdWxkVGhyb3coIkludGwu
Q29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi11LWtuLXRydWUtdS1rby10cnVlJykiLCAi
J1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi11LWtuLXRydWUtdS1rby10cnVl
JyIpOworc2hvdWxkVGhyb3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi14
JykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi14JyIpOworc2hvdWxk
VGhyb3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi0qJykiLCAiJ1Jhbmdl
RXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi0qJyIpOwogCiAvLyAxMC4zIFByb3BlcnRp
ZXMgb2YgdGhlIEludGwuQ29sbGF0b3IgUHJvdG90eXBlIE9iamVjdAogCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1kYXRldGltZWZvcm1hdC5qcyBiL0xheW91
dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9pbnRsLWRhdGV0aW1lZm9ybWF0LmpzCmluZGV4IGJjN2M5
YTc3Y2UyMTE2MmRkMmI4MzdmNTVmZTRmMTcyM2NmNzg0ZjguLjU1NmVlYmRlMmYzMDhkYTBiYzk0
Y2M5NDRlMDhmYjIwN2Q0NWY1ZjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2pzL3NjcmlwdC10
ZXN0cy9pbnRsLWRhdGV0aW1lZm9ybWF0LmpzCisrKyBiL0xheW91dFRlc3RzL2pzL3NjcmlwdC10
ZXN0cy9pbnRsLWRhdGV0aW1lZm9ybWF0LmpzCkBAIC0zNyw2ICszNywzOSBAQCBzaG91bGRCZSgi
SW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YubGVuZ3RoIiwgIjEiKTsKIAog
Ly8gUmV0dXJucyBTdXBwb3J0ZWRMb2NhbGVzCiBzaG91bGRCZVR5cGUoIkludGwuRGF0ZVRpbWVG
b3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCkiLCAiQXJyYXkiKTsKKy8vIERvZXNuJ3QgY2FyZSBh
Ym91dCBgdGhpc2AuCitzaG91bGRCZSgiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2Nh
bGVzT2YuY2FsbChudWxsLCAnZW4nKSIsICJbICdlbicgXSIpOworc2hvdWxkQmUoIkludGwuRGF0
ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoe30sICdlbicpIiwgIlsgJ2VuJyBd
Iik7CitzaG91bGRCZSgiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2Fs
bCgxLCAnZW4nKSIsICJbICdlbicgXSIpOworLy8gSWdub3JlcyBub24tb2JqZWN0LCBub24tc3Ry
aW5nIGxpc3QuCitzaG91bGRCZSgiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YoOSkiLCAiW10iKTsKKy8vIE1ha2VzIGFuIGFycmF5IG9mIHRhZ3MuCitzaG91bGRCZSgiSW50
bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuJykiLCAiWyAnZW4nIF0iKTsK
Ky8vIEhhbmRsZXMgYXJyYXktbGlrZSBvYmplY3RzLgorc2hvdWxkQmUoIkludGwuRGF0ZVRpbWVG
b3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKHsgbGVuZ3RoOiAyLCAxOiAnZW4nLCAwOiAnZXMnIH0p
IiwgIlsgJ2VzJywgJ2VuJyBdIik7CisvLyBEZWR1cGxpY2F0ZXMgdGFncy4KK3Nob3VsZEJlKCJJ
bnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihbICdlbicsICdwdCcsICdlbics
ICdlcycgXSkiLCAiWyAnZW4nLCAncHQnLCAnZXMnIF0iKTsKKy8vIENhbm9uaWNhbGl6ZXMgdGFn
cy4KK3Nob3VsZEJlKCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignRW4t
bGFUbi11cy12YXJpYW50Mi12YXJpYW50MS0xYWJjLVUta28tdFJ1ZS1BLWFhLWFhYS14LVJFU0VS
VkVEJykiLCAiWyAnZW4tTGF0bi1VUy12YXJpYW50Mi12YXJpYW50MS0xYWJjLWEtYWEtYWFhLXUt
a28tdHJ1ZS14LXJlc2VydmVkJyBdIik7CisvLyBSZXBsYWNlcyBvdXRkYXRlZCB0YWdzLgorc2hv
dWxkQmUoIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCduby1ib2snKSIs
ICJbICduYicgXSIpOworLy8gRG9lc24ndCB0aHJvdywgYnV0IGlnbm9yZXMgcHJpdmF0ZSB0YWdz
Lgorc2hvdWxkQmUoIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCd4LXNv
bWUtdGhpbmcnKSIsICJbXSIpOworLy8gVGhyb3dzIG9uIHByb2JsZW1zIHdpdGggbGVuZ3RoLCBn
ZXQsIG9yIHRvU3RyaW5nLgorc2hvdWxkVGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9y
dGVkTG9jYWxlc09mKE9iamVjdC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgZ2V0KCkgeyB0aHJv
dyBFcnJvcignYScpIH0gfSB9KSkiLCAiJ0Vycm9yOiBhJyIpOworc2hvdWxkVGhyb3coIkludGwu
RGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKE9iamVjdC5jcmVhdGUobnVsbCwgeyBs
ZW5ndGg6IHsgdmFsdWU6IDEgfSwgMDogeyBnZXQoKSB7IHRocm93IEVycm9yKCdiJykgfSB9IH0p
KSIsICInRXJyb3I6IGInIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBw
b3J0ZWRMb2NhbGVzT2YoWyB7IHRvU3RyaW5nKCkgeyB0aHJvdyBFcnJvcignYycpIH0gfSBdKSIs
ICInRXJyb3I6IGMnIik7CisvLyBUaHJvd3Mgb24gYmFkIHRhZ3MuCitzaG91bGRUaHJvdygiSW50
bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoWyA1IF0pIiwgIidUeXBlRXJyb3I6
IGxvY2FsZSB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG9iamVjdCciKTsKK3Nob3VsZFRocm93
KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignJykiLCAiJ1JhbmdlRXJy
b3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiAnIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRlVGlt
ZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2EnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBs
YW5ndWFnZSB0YWc6IGEnIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBw
b3J0ZWRMb2NhbGVzT2YoJ2FiY2RlZmdoaWonKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5n
dWFnZSB0YWc6IGFiY2RlZmdoaWonIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRlVGltZUZvcm1h
dC5zdXBwb3J0ZWRMb2NhbGVzT2YoJyMkJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3Vh
Z2UgdGFnOiAjJCciKTsKK3Nob3VsZFRocm93KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRl
ZExvY2FsZXNPZignZW4tQC1hYmMnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0
YWc6IGVuLUAtYWJjJyIpOworc2hvdWxkVGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9y
dGVkTG9jYWxlc09mKCdlbi11JykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFn
OiBlbi11JyIpOworc2hvdWxkVGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9j
YWxlc09mKCdlbi11LWtuLXRydWUtdS1rby10cnVlJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQg
bGFuZ3VhZ2UgdGFnOiBlbi11LWtuLXRydWUtdS1rby10cnVlJyIpOworc2hvdWxkVGhyb3coIklu
dGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi14JykiLCAiJ1JhbmdlRXJy
b3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi14JyIpOworc2hvdWxkVGhyb3coIkludGwuRGF0
ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi0qJykiLCAiJ1JhbmdlRXJyb3I6IGlu
dmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi0qJyIpOwogCiAvLyAxMi4zIFByb3BlcnRpZXMgb2YgdGhl
IEludGwuRGF0ZVRpbWVGb3JtYXQgUHJvdG90eXBlIE9iamVjdAogCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1udW1iZXJmb3JtYXQuanMgYi9MYXlvdXRUZXN0
cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1udW1iZXJmb3JtYXQuanMKaW5kZXggMDY1ZDkyMTU2NTQz
NDJkYTdlNGYyMzNlNjNjZDU3YWRmZTU5ZDRlYi4uNzMyNjc4M2JiYTg3MDJmZTE0ZjE5ZTI4NThh
MWY5ODU2NDNlYzhhZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2lu
dGwtbnVtYmVyZm9ybWF0LmpzCisrKyBiL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9pbnRs
LW51bWJlcmZvcm1hdC5qcwpAQCAtMzcsNiArMzcsMzkgQEAgc2hvdWxkQmUoIkludGwuTnVtYmVy
Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5sZW5ndGgiLCAiMSIpOwogCiAvLyBSZXR1cm5zIFN1
cHBvcnRlZExvY2FsZXMKIHNob3VsZEJlVHlwZSgiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVk
TG9jYWxlc09mKCkiLCAiQXJyYXkiKTsKKy8vIERvZXNuJ3QgY2FyZSBhYm91dCBgdGhpc2AuCitz
aG91bGRCZSgiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwobnVsbCwg
J2VuJykiLCAiWyAnZW4nIF0iKTsKK3Nob3VsZEJlKCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0
ZWRMb2NhbGVzT2YuY2FsbCh7fSwgJ2VuJykiLCAiWyAnZW4nIF0iKTsKK3Nob3VsZEJlKCJJbnRs
Lk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbCgxLCAnZW4nKSIsICJbICdlbicg
XSIpOworLy8gSWdub3JlcyBub24tb2JqZWN0LCBub24tc3RyaW5nIGxpc3QuCitzaG91bGRCZSgi
SW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKDkpIiwgIltdIik7CisvLyBNYWtl
cyBhbiBhcnJheSBvZiB0YWdzLgorc2hvdWxkQmUoIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRl
ZExvY2FsZXNPZignZW4nKSIsICJbICdlbicgXSIpOworLy8gSGFuZGxlcyBhcnJheS1saWtlIG9i
amVjdHMuCitzaG91bGRCZSgiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKHsg
bGVuZ3RoOiAyLCAxOiAnZW4nLCAwOiAnZXMnIH0pIiwgIlsgJ2VzJywgJ2VuJyBdIik7CisvLyBE
ZWR1cGxpY2F0ZXMgdGFncy4KK3Nob3VsZEJlKCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRM
b2NhbGVzT2YoWyAnZW4nLCAncHQnLCAnZW4nLCAnZXMnIF0pIiwgIlsgJ2VuJywgJ3B0JywgJ2Vz
JyBdIik7CisvLyBDYW5vbmljYWxpemVzIHRhZ3MuCitzaG91bGRCZSgiSW50bC5OdW1iZXJGb3Jt
YXQuc3VwcG9ydGVkTG9jYWxlc09mKCdFbi1sYVRuLXVzLXZhcmlhbnQyLXZhcmlhbnQxLTFhYmMt
VS1rby10UnVlLUEtYWEtYWFhLXgtUkVTRVJWRUQnKSIsICJbICdlbi1MYXRuLVVTLXZhcmlhbnQy
LXZhcmlhbnQxLTFhYmMtYS1hYS1hYWEtdS1rby10cnVlLXgtcmVzZXJ2ZWQnIF0iKTsKKy8vIFJl
cGxhY2VzIG91dGRhdGVkIHRhZ3MuCitzaG91bGRCZSgiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9y
dGVkTG9jYWxlc09mKCduby1ib2snKSIsICJbICduYicgXSIpOworLy8gRG9lc24ndCB0aHJvdywg
YnV0IGlnbm9yZXMgcHJpdmF0ZSB0YWdzLgorc2hvdWxkQmUoIkludGwuTnVtYmVyRm9ybWF0LnN1
cHBvcnRlZExvY2FsZXNPZigneC1zb21lLXRoaW5nJykiLCAiW10iKTsKKy8vIFRocm93cyBvbiBw
cm9ibGVtcyB3aXRoIGxlbmd0aCwgZ2V0LCBvciB0b1N0cmluZy4KK3Nob3VsZFRocm93KCJJbnRs
Lk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoT2JqZWN0LmNyZWF0ZShudWxsLCB7IGxl
bmd0aDogeyBnZXQoKSB7IHRocm93IEVycm9yKCdhJykgfSB9IH0pKSIsICInRXJyb3I6IGEnIik7
CitzaG91bGRUaHJvdygiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKE9iamVj
dC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgdmFsdWU6IDEgfSwgMDogeyBnZXQoKSB7IHRocm93
IEVycm9yKCdiJykgfSB9IH0pKSIsICInRXJyb3I6IGInIik7CitzaG91bGRUaHJvdygiSW50bC5O
dW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsgeyB0b1N0cmluZygpIHsgdGhyb3cgRXJy
b3IoJ2MnKSB9IH0gXSkiLCAiJ0Vycm9yOiBjJyIpOworLy8gVGhyb3dzIG9uIGJhZCB0YWdzLgor
c2hvdWxkVGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihbIDUgXSki
LCAiJ1R5cGVFcnJvcjogbG9jYWxlIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb3Igb2JqZWN0JyIp
Oworc2hvdWxkVGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignJyki
LCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiAnIik7CitzaG91bGRUaHJvdygi
SW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdhJykiLCAiJ1JhbmdlRXJyb3I6
IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBhJyIpOworc2hvdWxkVGhyb3coIkludGwuTnVtYmVyRm9y
bWF0LnN1cHBvcnRlZExvY2FsZXNPZignYWJjZGVmZ2hpaicpIiwgIidSYW5nZUVycm9yOiBpbnZh
bGlkIGxhbmd1YWdlIHRhZzogYWJjZGVmZ2hpaiciKTsKK3Nob3VsZFRocm93KCJJbnRsLk51bWJl
ckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJyMkJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQg
bGFuZ3VhZ2UgdGFnOiAjJCciKTsKK3Nob3VsZFRocm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBw
b3J0ZWRMb2NhbGVzT2YoJ2VuLUAtYWJjJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3Vh
Z2UgdGFnOiBlbi1ALWFiYyciKTsKK3Nob3VsZFRocm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBw
b3J0ZWRMb2NhbGVzT2YoJ2VuLXUnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0
YWc6IGVuLXUnIik7CitzaG91bGRUaHJvdygiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9j
YWxlc09mKCdlbi11LWtuLXRydWUtdS1rby10cnVlJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQg
bGFuZ3VhZ2UgdGFnOiBlbi11LWtuLXRydWUtdS1rby10cnVlJyIpOworc2hvdWxkVGhyb3coIklu
dGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4teCcpIiwgIidSYW5nZUVycm9y
OiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4teCciKTsKK3Nob3VsZFRocm93KCJJbnRsLk51bWJl
ckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLSonKSIsICInUmFuZ2VFcnJvcjogaW52YWxp
ZCBsYW5ndWFnZSB0YWc6IGVuLSonIik7CiAKIC8vIDExLjMgUHJvcGVydGllcyBvZiB0aGUgSW50
bC5OdW1iZXJGb3JtYXQgUHJvdG90eXBlIE9iamVjdAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260461</attachid>
            <date>2015-09-02 17:55:15 -0700</date>
            <delta_ts>2015-09-10 19:05:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147599-20150902185513.patch</filename>
            <type>text/plain</type>
            <size>180531</size>
            <attacher name="Andy VanWagoner">andy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5MjY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
N2ZhOGRlZDYzMDg5YjIyNzc0ODM2YzMzZGE0NDFkZDA3ZjIxOGI2Li42NDcyOWM1OGNlMmJiYjY0
M2Y0ZGUwMDQ1YmNhNTdkYjdiZDViMTVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NiBAQAorMjAxNS0wOS0wMiAgQW5keSBWYW5XYWdvbmVyICA8dGhldGFsZWNyYWZ0ZXJA
Z21haWwuY29tPgorCisgICAgICAgIFtJTlRMXSBJbXBsZW1lbnQgc3VwcG9ydGVkTG9jYWxlc09m
IG9uIEludGwgQ29uc3RydWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDc1OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbXBsZW1lbnRzIGFsbCBvZiB0aGUgYWJzdHJhY3Qgb3BlcmF0aW9ucyB1
c2VkIGJ5IHN1cHBvcnRlZExvY2FsZXNPZiwgZXhjZXB0IGR1cmluZyBjYW5vbmljYWxpemF0aW9u
IGl0IGRvZXMgbm90IHJlcGxhY2UgcmVkdW5kYW50IHRhZ3MsIG9yIHN1YnRhZ3Mgd2l0aCB0aGVp
ciBwcmVmZXJyZWQgdmFsdWVzLgorCisgICAgICAgICogaWN1L3VuaWNvZGUvdWNhbC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBpY3UvdW5pY29kZS91ZGF0Lmg6IEFkZGVkLgorICAgICAgICAqIGljdS91
bmljb2RlL3VtaXNjLmg6IEFkZGVkLgorICAgICAgICAqIGljdS91bmljb2RlL3VudW0uaDogQWRk
ZWQuCisgICAgICAgICogaWN1L3VuaWNvZGUvdXR5cGVzLmg6IENsZWFyIHRoZSBVX1NIT1dfQ1BM
VVNQTFVTX0FQSSBmbGFnIHRvIHByZXZlbnQgQysrIGhlYWRlcnMgZnJvbSBiZWluZyBpbmNsdWRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6IEFkZGUgbG9jYWxlTWF0
Y2hlci4KKyAgICAgICAgKiBydW50aW1lL0ludGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6SW50bENvbGxhdG9yQ29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09m
KTogSW1wbGVtZW50ZWQuCisgICAgICAgICogcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25z
dHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9y
RnVuY1N1cHBvcnRlZExvY2FsZXNPZik6IEltcGxlbWVudGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJl
ckZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZik6IEltcGxlbWVudGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmNhbm9uaWNh
bGl6ZUxhbmd1YWdlVGFnKToKKyAgICAgICAgKEpTQzo6Z2V0Q2Fub25pY2FsTGFuZ1RhZyk6Cisg
ICAgICAgIChKU0M6OmdldFByaXZhdGVVc2VMYW5nVGFnKToKKyAgICAgICAgKEpTQzo6Z2V0R3Jh
bmRmYXRoZXJlZExhbmdUYWcpOgorICAgICAgICAoSlNDOjpjYW5vbmljYWxpemVMb2NhbGVMaXN0
KToKKyAgICAgICAgKEpTQzo6YmVzdEF2YWlsYWJsZUxvY2FsZSk6CisgICAgICAgIChKU0M6Omxv
b2t1cFN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAoSlNDOjpiZXN0Rml0U3VwcG9ydGVkTG9j
YWxlcyk6CisgICAgICAgIChKU0M6OnN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAoSlNDOjpn
ZXRJbnRsU3RyaW5nT3B0aW9uKToKKyAgICAgICAgKEpTQzo6Z2V0SW50bEJvb2xlYW5PcHRpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlND
SlNWYWx1ZS5oOiBBZGRlZCB0b0xlbmd0aC4KKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUu
Y3BwOiBBZGRlZCB0b0xlbmd0aC4KKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6dG9MZW5ndGgpOiBJ
bXBsZW1lbnQgVG9MZW5ndGggZnJvbSBFQ01BIDI2MiA2LjAgNy4xLjE1CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojpp
bnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKTogQWRkZWQgbGF6eSBsb2NhbGUgbGlzdC4KKyAg
ICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxv
Y2FsZXMpOiBBZGRlZCBsYXp5IGxvY2FsZSBsaXN0LgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9i
amVjdDo6aW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMpOiBBZGRlZCBsYXp5IGxvY2Fs
ZSBsaXN0LgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKwogMjAxNS0wOS0w
MiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBzb21l
IHVudXNlZCBtZXRob2RzIGZyb20gR2V0QnlJZEFjY2Vzcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pY3UvdW5pY29kZS91Y2FsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aWN1L3VuaWNvZGUvdWNhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5N2FmMTUzZDQzOWI0YzEzMmQ0Y2YwYzFl
NTE4MjI2OThiMzdiMTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aWN1L3VuaWNvZGUvdWNhbC5oCkBAIC0wLDAgKzEsMTI4NSBAQAorLyoKKyAqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMCwgSW50ZXJuYXRpb25hbCBCdXNp
bmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBVQ0FMX0gKKyNk
ZWZpbmUgVUNBTF9ICisKKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorI2luY2x1ZGUgInVu
aWNvZGUvdWVudW0uaCIKKyNpbmNsdWRlICJ1bmljb2RlL3Vsb2MuaCIKKyNpbmNsdWRlICJ1bmlj
b2RlL2xvY2FscG9pbnRlci5oIgorCisjaWYgIVVDT05GSUdfTk9fRk9STUFUVElORworCisvKioK
KyAqIFxmaWxlCisgKiBcYnJpZWYgQyBBUEk6IENhbGVuZGFyCisgKgorICogPGgyPkNhbGVuZGFy
IEMgQVBJPC9oMj4KKyAqCisgKiBVQ2FsZW5kYXIgQyBBUEkgaXMgdXNlZCAgZm9yIGNvbnZlcnRp
bmcgYmV0d2VlbiBhIDxjb2RlPlVEYXRlPC9jb2RlPiBvYmplY3QKKyAqIGFuZCBhIHNldCBvZiBp
bnRlZ2VyIGZpZWxkcyBzdWNoIGFzIDxjb2RlPlVDQUxfWUVBUjwvY29kZT4sIDxjb2RlPlVDQUxf
TU9OVEg8L2NvZGU+LAorICogPGNvZGU+VUNBTF9EQVk8L2NvZGU+LCA8Y29kZT5VQ0FMX0hPVVI8
L2NvZGU+LCBhbmQgc28gb24uCisgKiAoQSA8Y29kZT5VRGF0ZTwvY29kZT4gb2JqZWN0IHJlcHJl
c2VudHMgYSBzcGVjaWZpYyBpbnN0YW50IGluCisgKiB0aW1lIHdpdGggbWlsbGlzZWNvbmQgcHJl
Y2lzaW9uLiBTZWUgVURhdGUKKyAqIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgPGNvZGU+VURh
dGU8L2NvZGU+IC4pCisgKgorICogPHA+CisgKiBUeXBlcyBvZiA8Y29kZT5VQ2FsZW5kYXI8L2Nv
ZGU+IGludGVycHJldCBhIDxjb2RlPlVEYXRlPC9jb2RlPgorICogYWNjb3JkaW5nIHRvIHRoZSBy
dWxlcyBvZiBhIHNwZWNpZmljIGNhbGVuZGFyIHN5c3RlbS4gVGhlIFVfU1RBQkxFCisgKiBwcm92
aWRlcyB0aGUgZW51bSBVQ2FsZW5kYXJUeXBlIHdpdGggVUNBTF9UUkFESVRJT05BTCBhbmQKKyAq
IFVDQUxfR1JFR09SSUFOLgorICogPHA+CisgKiBMaWtlIG90aGVyIGxvY2FsZS1zZW5zaXRpdmUg
QyBBUEksIGNhbGVuZGFyIEFQSSAgcHJvdmlkZXMgYQorICogZnVuY3Rpb24sIDxjb2RlPnVjYWxf
b3BlbigpPC9jb2RlPiwgd2hpY2ggcmV0dXJucyBhIHBvaW50ZXIgdG8KKyAqIDxjb2RlPlVDYWxl
bmRhcjwvY29kZT4gd2hvc2UgdGltZSBmaWVsZHMgaGF2ZSBiZWVuIGluaXRpYWxpemVkCisgKiB3
aXRoIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUuIFdlIG5lZWQgdG8gc3BlY2lmeSB0aGUgdHlw
ZSBvZgorICogY2FsZW5kYXIgdG8gYmUgb3BlbmVkIGFuZCB0aGUgIHRpbWV6b25lSWQuCisgKiBc
aHRtbG9ubHk8YmxvY2txdW90ZT5cZW5kaHRtbG9ubHkKKyAqIDxwcmU+CisgKiBcY29kZQorICog
VUNhbGVuZGFyICpjYWxkZWY7CisgKiBVQ2hhciAqdHpJZDsKKyAqIFVFcnJvckNvZGUgc3RhdHVz
OworICogdHpJZD0oVUNoYXIqKW1hbGxvYyhzaXplb2YoVUNoYXIpICogKHN0cmxlbigiUFNUIikg
KzEpICk7CisgKiB1X3Vhc3RyY3B5KHR6SWQsICJQU1QiKTsKKyAqIGNhbGRlZj11Y2FsX29wZW4o
dHpJRCwgdV9zdHJsZW4odHpJRCksIE5VTEwsIFVDQUxfVFJBRElUSU9OQUwsICZzdGF0dXMpOwor
ICogXGVuZGNvZGUKKyAqIDwvcHJlPgorICogXGh0bWxvbmx5PC9ibG9ja3F1b3RlPlxlbmRodG1s
b25seQorICoKKyAqIDxwPgorICogQSA8Y29kZT5VQ2FsZW5kYXI8L2NvZGU+IG9iamVjdCBjYW4g
cHJvZHVjZSBhbGwgdGhlIHRpbWUgZmllbGQgdmFsdWVzCisgKiBuZWVkZWQgdG8gaW1wbGVtZW50
IHRoZSBkYXRlLXRpbWUgZm9ybWF0dGluZyBmb3IgYSBwYXJ0aWN1bGFyIGxhbmd1YWdlCisgKiBh
bmQgY2FsZW5kYXIgc3R5bGUgKGZvciBleGFtcGxlLCBKYXBhbmVzZS1HcmVnb3JpYW4sIEphcGFu
ZXNlLVRyYWRpdGlvbmFsKS4KKyAqCisgKiA8cD4KKyAqIFdoZW4gY29tcHV0aW5nIGEgPGNvZGU+
VURhdGU8L2NvZGU+IGZyb20gdGltZSBmaWVsZHMsIHR3byBzcGVjaWFsIGNpcmN1bXN0YW5jZXMK
KyAqIG1heSBhcmlzZTogdGhlcmUgbWF5IGJlIGluc3VmZmljaWVudCBpbmZvcm1hdGlvbiB0byBj
b21wdXRlIHRoZQorICogPGNvZGU+VURhdGU8L2NvZGU+IChzdWNoIGFzIG9ubHkgeWVhciBhbmQg
bW9udGggYnV0IG5vIGRheSBpbiB0aGUgbW9udGgpLAorICogb3IgdGhlcmUgbWF5IGJlIGluY29u
c2lzdGVudCBpbmZvcm1hdGlvbiAoc3VjaCBhcyAiVHVlc2RheSwgSnVseSAxNSwgMTk5NiIKKyAq
IC0tIEp1bHkgMTUsIDE5OTYgaXMgYWN0dWFsbHkgYSBNb25kYXkpLgorICoKKyAqIDxwPgorICog
PHN0cm9uZz5JbnN1ZmZpY2llbnQgaW5mb3JtYXRpb24uPC9zdHJvbmc+IFRoZSBjYWxlbmRhciB3
aWxsIHVzZSBkZWZhdWx0CisgKiBpbmZvcm1hdGlvbiB0byBzcGVjaWZ5IHRoZSBtaXNzaW5nIGZp
ZWxkcy4gVGhpcyBtYXkgdmFyeSBieSBjYWxlbmRhcjsgZm9yCisgKiB0aGUgR3JlZ29yaWFuIGNh
bGVuZGFyLCB0aGUgZGVmYXVsdCBmb3IgYSBmaWVsZCBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRo
ZQorICogc3RhcnQgb2YgdGhlIGVwb2NoOiBpLmUuLCBVQ0FMX1lFQVIgPSAxOTcwLCBVQ0FMX01P
TlRIID0gSkFOVUFSWSwgVUNBTF9EQVRFID0gMSwgZXRjLgorICoKKyAqIDxwPgorICogPHN0cm9u
Zz5JbmNvbnNpc3RlbnQgaW5mb3JtYXRpb24uPC9zdHJvbmc+IElmIGZpZWxkcyBjb25mbGljdCwg
dGhlIGNhbGVuZGFyCisgKiB3aWxsIGdpdmUgcHJlZmVyZW5jZSB0byBmaWVsZHMgc2V0IG1vcmUg
cmVjZW50bHkuIEZvciBleGFtcGxlLCB3aGVuCisgKiBkZXRlcm1pbmluZyB0aGUgZGF5LCB0aGUg
Y2FsZW5kYXIgd2lsbCBsb29rIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogY29tYmluYXRp
b25zIG9mIGZpZWxkcy4gIFRoZSBtb3N0IHJlY2VudCBjb21iaW5hdGlvbiwgYXMgZGV0ZXJtaW5l
ZCBieSB0aGUKKyAqIG1vc3QgcmVjZW50bHkgc2V0IHNpbmdsZSBmaWVsZCwgd2lsbCBiZSB1c2Vk
LgorICoKKyAqIFxodG1sb25seTxibG9ja3F1b3RlPlxlbmRodG1sb25seQorICogPHByZT4KKyAq
IFxjb2RlCisgKiBVQ0FMX01PTlRIICsgVUNBTF9EQVlfT0ZfTU9OVEgKKyAqIFVDQUxfTU9OVEgg
KyBVQ0FMX1dFRUtfT0ZfTU9OVEggKyBVQ0FMX0RBWV9PRl9XRUVLCisgKiBVQ0FMX01PTlRIICsg
VUNBTF9EQVlfT0ZfV0VFS19JTl9NT05USCArIFVDQUxfREFZX09GX1dFRUsKKyAqIFVDQUxfREFZ
X09GX1lFQVIKKyAqIFVDQUxfREFZX09GX1dFRUsgKyBVQ0FMX1dFRUtfT0ZfWUVBUgorICogXGVu
ZGNvZGUKKyAqIDwvcHJlPgorICogXGh0bWxvbmx5PC9ibG9ja3F1b3RlPlxlbmRodG1sb25seQor
ICoKKyAqIEZvciB0aGUgdGltZSBvZiBkYXk6CisgKgorICogXGh0bWxvbmx5PGJsb2NrcXVvdGU+
XGVuZGh0bWxvbmx5CisgKiA8cHJlPgorICogXGNvZGUKKyAqIFVDQUxfSE9VUl9PRl9EQVkKKyAq
IFVDQUxfQU1fUE0gKyBVQ0FMX0hPVVIKKyAqIFxlbmRjb2RlCisgKiA8L3ByZT4KKyAqIFxodG1s
b25seTwvYmxvY2txdW90ZT5cZW5kaHRtbG9ubHkKKyAqCisgKiA8cD4KKyAqIDxzdHJvbmc+Tm90
ZTo8L3N0cm9uZz4gZm9yIHNvbWUgbm9uLUdyZWdvcmlhbiBjYWxlbmRhcnMsIGRpZmZlcmVudAor
ICogZmllbGRzIG1heSBiZSBuZWNlc3NhcnkgZm9yIGNvbXBsZXRlIGRpc2FtYmlndWF0aW9uLiBG
b3IgZXhhbXBsZSwgYSBmdWxsCisgKiBzcGVjaWZpY2F0aW9uIG9mIHRoZSBoaXN0b3JpYWwgQXJh
YmljIGFzdHJvbm9taWNhbCBjYWxlbmRhciByZXF1aXJlcyB5ZWFyLAorICogbW9udGgsIGRheS1v
Zi1tb250aCA8ZW0+YW5kPC9lbT4gZGF5LW9mLXdlZWsgaW4gc29tZSBjYXNlcy4KKyAqCisgKiA8
cD4KKyAqIDxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhlcmUgYXJlIGNlcnRhaW4gcG9zc2libGUg
YW1iaWd1aXRpZXMgaW4KKyAqIGludGVycHJldGF0aW9uIG9mIGNlcnRhaW4gc2luZ3VsYXIgdGlt
ZXMsIHdoaWNoIGFyZSByZXNvbHZlZCBpbiB0aGUKKyAqIGZvbGxvd2luZyB3YXlzOgorICogPG9s
PgorICogICAgIDxsaT4gMjQ6MDA6MDAgImJlbG9uZ3MiIHRvIHRoZSBmb2xsb3dpbmcgZGF5LiBU
aGF0IGlzLAorICogICAgICAgICAgMjM6NTkgb24gRGVjIDMxLCAxOTY5ICZsdDsgMjQ6MDAgb24g
SmFuIDEsIDE5NzAgJmx0OyAyNDowMTowMCBvbiBKYW4gMSwgMTk3MAorICoKKyAqICAgICA8bGk+
IEFsdGhvdWdoIGhpc3RvcmljYWxseSBub3QgcHJlY2lzZSwgbWlkbmlnaHQgYWxzbyBiZWxvbmdz
IHRvICJhbSIsCisgKiAgICAgICAgICBhbmQgbm9vbiBiZWxvbmdzIHRvICJwbSIsIHNvIG9uIHRo
ZSBzYW1lIGRheSwKKyAqICAgICAgICAgIDEyOjAwIGFtIChtaWRuaWdodCkgJmx0OyAxMjowMSBh
bSwgYW5kIDEyOjAwIHBtIChub29uKSAmbHQ7IDEyOjAxIHBtCisgKiA8L29sPgorICoKKyAqIDxw
PgorICogVGhlIGRhdGUgb3IgdGltZSBmb3JtYXQgc3RyaW5ncyBhcmUgbm90IHBhcnQgb2YgdGhl
IGRlZmluaXRpb24gb2YgYQorICogY2FsZW5kYXIsIGFzIHRob3NlIG11c3QgYmUgbW9kaWZpYWJs
ZSBvciBvdmVycmlkYWJsZSBieSB0aGUgdXNlciBhdAorICogcnVudGltZS4gVXNlIHtAbGluayBE
YXRlRm9ybWF0fQorICogdG8gZm9ybWF0IGRhdGVzLgorICoKKyAqIDxwPgorICogPGNvZGU+Q2Fs
ZW5kYXI8L2NvZGU+IHByb3ZpZGVzIGFuIEFQSSBmb3IgZmllbGQgInJvbGxpbmciLCB3aGVyZSBm
aWVsZHMKKyAqIGNhbiBiZSBpbmNyZW1lbnRlZCBvciBkZWNyZW1lbnRlZCwgYnV0IHdyYXAgYXJv
dW5kLiBGb3IgZXhhbXBsZSwgcm9sbGluZyB0aGUKKyAqIG1vbnRoIHVwIGluIHRoZSBkYXRlIDxj
b2RlPkRlY2VtYmVyIDEyLCA8Yj4xOTk2PC9iPjwvY29kZT4gcmVzdWx0cyBpbgorICogPGNvZGU+
SmFudWFyeSAxMiwgPGI+MTk5NjwvYj48L2NvZGU+LgorICoKKyAqIDxwPgorICogPGNvZGU+Q2Fs
ZW5kYXI8L2NvZGU+IGFsc28gcHJvdmlkZXMgYSBkYXRlIGFyaXRobWV0aWMgZnVuY3Rpb24gZm9y
CisgKiBhZGRpbmcgdGhlIHNwZWNpZmllZCAoc2lnbmVkKSBhbW91bnQgb2YgdGltZSB0byBhIHBh
cnRpY3VsYXIgdGltZSBmaWVsZC4KKyAqIEZvciBleGFtcGxlLCBzdWJ0cmFjdGluZyA1IGRheXMg
ZnJvbSB0aGUgZGF0ZSA8Y29kZT5TZXB0ZW1iZXIgMTIsIDE5OTY8L2NvZGU+CisgKiByZXN1bHRz
IGluIDxjb2RlPlNlcHRlbWJlciA3LCAxOTk2PC9jb2RlPi4KKyAqCisgKiBAc3RhYmxlIElDVSAy
LjAKKyAqLworCisvKiogQSBjYWxlbmRhci4KKyAqICBGb3IgdXNhZ2UgaW4gQyBwcm9ncmFtcy4K
KyAqIEBzdGFibGUgSUNVIDIuMAorICovCit0eXBlZGVmIHZvaWQqIFVDYWxlbmRhcjsKKworLyoq
IFBvc3NpYmxlIHR5cGVzIG9mIFVDYWxlbmRhcnMgCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLwor
ZW51bSBVQ2FsZW5kYXJUeXBlIHsKKyAgLyoqCisgICAqIERlc3BpdGUgdGhlIG5hbWUsIFVDQUxf
VFJBRElUSU9OQUwgZGVzaWduYXRlcyB0aGUgbG9jYWxlJ3MgZGVmYXVsdCBjYWxlbmRhciwKKyAg
ICogd2hpY2ggbWF5IGJlIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIgb3Igc29tZSBvdGhlciBjYWxl
bmRhci4KKyAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAqLworICBVQ0FMX1RSQURJVElPTkFMLAor
ICAvKioKKyAgICogQSBiZXR0ZXIgbmFtZSBmb3IgVUNBTF9UUkFESVRJT05BTC4KKyAgICogQHN0
YWJsZSBJQ1UgNC4yCisgICAqLworICBVQ0FMX0RFRkFVTFQgPSBVQ0FMX1RSQURJVElPTkFMLAor
ICAvKioKKyAgICogVW5hbWJpZ3VvdXNseSBkZXNpZ25hdGVzIHRoZSBHcmVnb3JpYW4gY2FsZW5k
YXIgZm9yIHRoZSBsb2NhbGUuCisgICAqIEBzdGFibGUgSUNVIDIuMAorICAgKi8KKyAgVUNBTF9H
UkVHT1JJQU4KK307CisKKy8qKiBAc3RhYmxlIElDVSAyLjAgKi8KK3R5cGVkZWYgZW51bSBVQ2Fs
ZW5kYXJUeXBlIFVDYWxlbmRhclR5cGU7CisKKy8qKiBQb3NzaWJsZSBmaWVsZHMgaW4gYSBVQ2Fs
ZW5kYXIgCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworZW51bSBVQ2FsZW5kYXJEYXRlRmllbGRz
IHsKKyAgLyoqIAorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUgZXJhLCBlLmcuLCBB
RCBvciBCQyBpbiB0aGUgR3JlZ29yaWFuIChKdWxpYW4pIGNhbGVuZGFyLiAKKyAgICogVGhpcyBp
cyBhIGNhbGVuZGFyLXNwZWNpZmljIHZhbHVlLgorICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAq
LworICBVQ0FMX0VSQSwKKworICAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhl
IHllYXIuIFRoaXMgaXMgYSBjYWxlbmRhci1zcGVjaWZpYyB2YWx1ZS4KKyAgICogQHN0YWJsZSBJ
Q1UgMi42IAorICAgKi8KKyAgVUNBTF9ZRUFSLAorCisgIC8qKgorICAgKiBGaWVsZCBudW1iZXIg
aW5kaWNhdGluZyB0aGUgbW9udGguIFRoaXMgaXMgYSBjYWxlbmRhci1zcGVjaWZpYyB2YWx1ZS4g
CisgICAqIFRoZSBmaXJzdCBtb250aCBvZiB0aGUgeWVhciBpcworICAgKiA8Y29kZT5KQU5VQVJZ
PC9jb2RlPjsgdGhlIGxhc3QgZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mIG1vbnRocyBpbiBhIHll
YXIuCisgICAqIEBzZWUgI1VDQUxfSkFOVUFSWQorICAgKiBAc2VlICNVQ0FMX0ZFQlJVQVJZCisg
ICAqIEBzZWUgI1VDQUxfTUFSQ0gKKyAgICogQHNlZSAjVUNBTF9BUFJJTAorICAgKiBAc2VlICNV
Q0FMX01BWQorICAgKiBAc2VlICNVQ0FMX0pVTkUKKyAgICogQHNlZSAjVUNBTF9KVUxZCisgICAq
IEBzZWUgI1VDQUxfQVVHVVNUCisgICAqIEBzZWUgI1VDQUxfU0VQVEVNQkVSCisgICAqIEBzZWUg
I1VDQUxfT0NUT0JFUgorICAgKiBAc2VlICNVQ0FMX05PVkVNQkVSCisgICAqIEBzZWUgI1VDQUxf
REVDRU1CRVIKKyAgICogQHNlZSAjVUNBTF9VTkRFQ0lNQkVSCisgICAqIEBzdGFibGUgSUNVIDIu
NiAKKyAgICovCisgIFVDQUxfTU9OVEgsCisKKyAgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRp
Y2F0aW5nIHRoZQorICAgKiB3ZWVrIG51bWJlciB3aXRoaW4gdGhlIGN1cnJlbnQgeWVhci4gIFRo
ZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLCBhcworICAgKiBkZWZpbmVkIGJ5IDxjb2RlPlVDQUxf
RklSU1RfREFZX09GX1dFRUs8L2NvZGU+IGFuZCA8Y29kZT5VQ0FMX01JTklNQUxfREFZU19JTl9G
SVJTVF9XRUVLPC9jb2RlPgorICAgKiBhdHRyaWJ1dGVzLCBoYXMgdmFsdWUgMS4gIFN1YmNsYXNz
ZXMgZGVmaW5lCisgICAqIHRoZSB2YWx1ZSBvZiA8Y29kZT5VQ0FMX1dFRUtfT0ZfWUVBUjwvY29k
ZT4gZm9yIGRheXMgYmVmb3JlIHRoZSBmaXJzdCB3ZWVrIG9mCisgICAqIHRoZSB5ZWFyLgorICAg
KiBAc2VlIHVjYWxfZ2V0QXR0cmlidXRlCisgICAqIEBzZWUgdWNhbF9zZXRBdHRyaWJ1dGUKKyAg
ICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9XRUVLX09GX1lFQVIsCisKKyAvKioK
KyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIHdlZWsgbnVtYmVyIHdpdGhp
biB0aGUgY3VycmVudCBtb250aC4gIFRoZSBmaXJzdCB3ZWVrIG9mIHRoZSBtb250aCwgYXMKKyAg
ICogZGVmaW5lZCBieSA8Y29kZT5VQ0FMX0ZJUlNUX0RBWV9PRl9XRUVLPC9jb2RlPiBhbmQgPGNv
ZGU+VUNBTF9NSU5JTUFMX0RBWVNfSU5fRklSU1RfV0VFSzwvY29kZT4KKyAgICogYXR0cmlidXRl
cywgaGFzIHZhbHVlIDEuICBTdWJjbGFzc2VzIGRlZmluZQorICAgKiB0aGUgdmFsdWUgb2YgPGNv
ZGU+V0VFS19PRl9NT05USDwvY29kZT4gZm9yIGRheXMgYmVmb3JlIHRoZSBmaXJzdCB3ZWVrIG9m
CisgICAqIHRoZSBtb250aC4KKyAgICogQHNlZSB1Y2FsX2dldEF0dHJpYnV0ZQorICAgKiBAc2Vl
IHVjYWxfc2V0QXR0cmlidXRlCisgICAqIEBzZWUgI1VDQUxfRklSU1RfREFZX09GX1dFRUsKKyAg
ICogQHNlZSAjVUNBTF9NSU5JTUFMX0RBWVNfSU5fRklSU1RfV0VFSworICAgKiBAc3RhYmxlIElD
VSAyLjYgCisgICAqLworICBVQ0FMX1dFRUtfT0ZfTU9OVEgsCisKKyAvKioKKyAgICogRmllbGQg
bnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIGRheSBvZiB0aGUgbW9udGguIFRoaXMgaXMgYSBz
eW5vbnltIGZvciA8Y29kZT5EQVlfT0ZfTU9OVEg8L2NvZGU+LgorICAgKiBUaGUgZmlyc3QgZGF5
IG9mIHRoZSBtb250aCBoYXMgdmFsdWUgMS4KKyAgICogQHNlZSAjVUNBTF9EQVlfT0ZfTU9OVEgK
KyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9EQVRFLAorCisgLyoqCisgICAq
IEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZSBkYXkKKyAgICogbnVtYmVyIHdpdGhpbiB0aGUg
Y3VycmVudCB5ZWFyLiAgVGhlIGZpcnN0IGRheSBvZiB0aGUgeWVhciBoYXMgdmFsdWUgMS4KKyAg
ICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9EQVlfT0ZfWUVBUiwKKworIC8qKgor
ICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUgZGF5CisgICAqIG9mIHRoZSB3ZWVrLiAg
VGhpcyBmaWVsZCB0YWtlcyB2YWx1ZXMgPGNvZGU+U1VOREFZPC9jb2RlPiwKKyAgICogPGNvZGU+
TU9OREFZPC9jb2RlPiwgPGNvZGU+VFVFU0RBWTwvY29kZT4sIDxjb2RlPldFRE5FU0RBWTwvY29k
ZT4sCisgICAqIDxjb2RlPlRIVVJTREFZPC9jb2RlPiwgPGNvZGU+RlJJREFZPC9jb2RlPiwgYW5k
IDxjb2RlPlNBVFVSREFZPC9jb2RlPi4KKyAgICogQHNlZSAjVUNBTF9TVU5EQVkKKyAgICogQHNl
ZSAjVUNBTF9NT05EQVkKKyAgICogQHNlZSAjVUNBTF9UVUVTREFZCisgICAqIEBzZWUgI1VDQUxf
V0VETkVTREFZCisgICAqIEBzZWUgI1VDQUxfVEhVUlNEQVkKKyAgICogQHNlZSAjVUNBTF9GUklE
QVkKKyAgICogQHNlZSAjVUNBTF9TQVRVUkRBWQorICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAq
LworICBVQ0FMX0RBWV9PRl9XRUVLLAorCisgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0
aW5nIHRoZQorICAgKiBvcmRpbmFsIG51bWJlciBvZiB0aGUgZGF5IG9mIHRoZSB3ZWVrIHdpdGhp
biB0aGUgY3VycmVudCBtb250aC4gVG9nZXRoZXIKKyAgICogd2l0aCB0aGUgPGNvZGU+REFZX09G
X1dFRUs8L2NvZGU+IGZpZWxkLCB0aGlzIHVuaXF1ZWx5IHNwZWNpZmllcyBhIGRheQorICAgKiB3
aXRoaW4gYSBtb250aC4gIFVubGlrZSA8Y29kZT5XRUVLX09GX01PTlRIPC9jb2RlPiBhbmQKKyAg
ICogPGNvZGU+V0VFS19PRl9ZRUFSPC9jb2RlPiwgdGhpcyBmaWVsZCdzIHZhbHVlIGRvZXMgPGVt
Pm5vdDwvZW0+IGRlcGVuZCBvbgorICAgKiA8Y29kZT5nZXRGaXJzdERheU9mV2VlaygpPC9jb2Rl
PiBvcgorICAgKiA8Y29kZT5nZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrKCk8L2NvZGU+LiAgPGNv
ZGU+REFZX09GX01PTlRIIDE8L2NvZGU+CisgICAqIHRocm91Z2ggPGNvZGU+NzwvY29kZT4gYWx3
YXlzIGNvcnJlc3BvbmQgdG8gPGNvZGU+REFZX09GX1dFRUtfSU5fTU9OVEgKKyAgICogMTwvY29k
ZT47IDxjb2RlPjg8L2NvZGU+IHRocm91Z2ggPGNvZGU+MTU8L2NvZGU+IGNvcnJlc3BvbmQgdG8K
KyAgICogPGNvZGU+REFZX09GX1dFRUtfSU5fTU9OVEggMjwvY29kZT4sIGFuZCBzbyBvbi4KKyAg
ICogPGNvZGU+REFZX09GX1dFRUtfSU5fTU9OVEggMDwvY29kZT4gaW5kaWNhdGVzIHRoZSB3ZWVr
IGJlZm9yZQorICAgKiA8Y29kZT5EQVlfT0ZfV0VFS19JTl9NT05USCAxPC9jb2RlPi4gIE5lZ2F0
aXZlIHZhbHVlcyBjb3VudCBiYWNrIGZyb20gdGhlCisgICAqIGVuZCBvZiB0aGUgbW9udGgsIHNv
IHRoZSBsYXN0IFN1bmRheSBvZiBhIG1vbnRoIGlzIHNwZWNpZmllZCBhcworICAgKiA8Y29kZT5E
QVlfT0ZfV0VFSyA9IFNVTkRBWSwgREFZX09GX1dFRUtfSU5fTU9OVEggPSAtMTwvY29kZT4uICBC
ZWNhdXNlCisgICAqIG5lZ2F0aXZlIHZhbHVlcyBjb3VudCBiYWNrd2FyZCB0aGV5IHdpbGwgdXN1
YWxseSBiZSBhbGlnbmVkIGRpZmZlcmVudGx5CisgICAqIHdpdGhpbiB0aGUgbW9udGggdGhhbiBw
b3NpdGl2ZSB2YWx1ZXMuICBGb3IgZXhhbXBsZSwgaWYgYSBtb250aCBoYXMgMzEKKyAgICogZGF5
cywgPGNvZGU+REFZX09GX1dFRUtfSU5fTU9OVEggLTE8L2NvZGU+IHdpbGwgb3ZlcmxhcAorICAg
KiA8Y29kZT5EQVlfT0ZfV0VFS19JTl9NT05USCA1PC9jb2RlPiBhbmQgdGhlIGVuZCBvZiA8Y29k
ZT40PC9jb2RlPi4KKyAgICogQHNlZSAjVUNBTF9EQVlfT0ZfV0VFSworICAgKiBAc2VlICNVQ0FM
X1dFRUtfT0ZfTU9OVEgKKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9EQVlf
T0ZfV0VFS19JTl9NT05USCwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZwor
ICAgKiB3aGV0aGVyIHRoZSA8Y29kZT5IT1VSPC9jb2RlPiBpcyBiZWZvcmUgb3IgYWZ0ZXIgbm9v
bi4KKyAgICogRS5nLiwgYXQgMTA6MDQ6MTUuMjUwIFBNIHRoZSA8Y29kZT5BTV9QTTwvY29kZT4g
aXMgPGNvZGU+UE08L2NvZGU+LgorICAgKiBAc2VlICNVQ0FMX0FNCisgICAqIEBzZWUgI1VDQUxf
UE0KKyAgICogQHNlZSAjVUNBTF9IT1VSCisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisg
IFVDQUxfQU1fUE0sCisKKyAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlCisg
ICAqIGhvdXIgb2YgdGhlIG1vcm5pbmcgb3IgYWZ0ZXJub29uLiA8Y29kZT5IT1VSPC9jb2RlPiBp
cyB1c2VkIGZvciB0aGUgMTItaG91cgorICAgKiBjbG9jay4KKyAgICogRS5nLiwgYXQgMTA6MDQ6
MTUuMjUwIFBNIHRoZSA8Y29kZT5IT1VSPC9jb2RlPiBpcyAxMC4KKyAgICogQHNlZSAjVUNBTF9B
TV9QTQorICAgKiBAc2VlICNVQ0FMX0hPVVJfT0ZfREFZCisgICAqIEBzdGFibGUgSUNVIDIuNiAK
KyAgICovCisgIFVDQUxfSE9VUiwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGlu
ZyB0aGUKKyAgICogaG91ciBvZiB0aGUgZGF5LiA8Y29kZT5IT1VSX09GX0RBWTwvY29kZT4gaXMg
dXNlZCBmb3IgdGhlIDI0LWhvdXIgY2xvY2suCisgICAqIEUuZy4sIGF0IDEwOjA0OjE1LjI1MCBQ
TSB0aGUgPGNvZGU+SE9VUl9PRl9EQVk8L2NvZGU+IGlzIDIyLgorICAgKiBAc2VlICNVQ0FMX0hP
VVIKKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9IT1VSX09GX0RBWSwKKwor
IC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUKKyAgICogbWludXRlIHdpdGhp
biB0aGUgaG91ci4KKyAgICogRS5nLiwgYXQgMTA6MDQ6MTUuMjUwIFBNIHRoZSA8Y29kZT5VQ0FM
X01JTlVURTwvY29kZT4gaXMgNC4KKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNB
TF9NSU5VVEUsCisKKyAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAq
IHNlY29uZCB3aXRoaW4gdGhlIG1pbnV0ZS4KKyAgICogRS5nLiwgYXQgMTA6MDQ6MTUuMjUwIFBN
IHRoZSA8Y29kZT5VQ0FMX1NFQ09ORDwvY29kZT4gaXMgMTUuCisgICAqIEBzdGFibGUgSUNVIDIu
NiAKKyAgICovCisgIFVDQUxfU0VDT05ELAorCisgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRp
Y2F0aW5nIHRoZQorICAgKiBtaWxsaXNlY29uZCB3aXRoaW4gdGhlIHNlY29uZC4KKyAgICogRS5n
LiwgYXQgMTA6MDQ6MTUuMjUwIFBNIHRoZSA8Y29kZT5VQ0FMX01JTExJU0VDT05EPC9jb2RlPiBp
cyAyNTAuCisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfTUlMTElTRUNPTkQs
CisKKyAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIHJhdyBvZmZz
ZXQgZnJvbSBHTVQgaW4gbWlsbGlzZWNvbmRzLgorICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAq
LworICBVQ0FMX1pPTkVfT0ZGU0VULAorCisgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0
aW5nIHRoZQorICAgKiBkYXlsaWdodCBzYXZpbmdzIG9mZnNldCBpbiBtaWxsaXNlY29uZHMuCisg
ICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfRFNUX09GRlNFVCwKKyAgCisgLyoq
CisgICAqIEZpZWxkIG51bWJlciAKKyAgICogaW5kaWNhdGluZyB0aGUgZXh0ZW5kZWQgeWVhciBj
b3JyZXNwb25kaW5nIHRvIHRoZQorICAgKiA8Y29kZT5VQ0FMX1dFRUtfT0ZfWUVBUjwvY29kZT4g
ZmllbGQuICBUaGlzIG1heSBiZSBvbmUgZ3JlYXRlciBvciBsZXNzCisgICAqIHRoYW4gdGhlIHZh
bHVlIG9mIDxjb2RlPlVDQUxfRVhURU5ERURfWUVBUjwvY29kZT4uCisgICAqIEBzdGFibGUgSUNV
IDIuNgorICAgKi8KKyAgVUNBTF9ZRUFSX1dPWSwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIg
CisgICAqIGluZGljYXRpbmcgdGhlIGxvY2FsaXplZCBkYXkgb2Ygd2Vlay4gIFRoaXMgd2lsbCBi
ZSBhIHZhbHVlIGZyb20gMQorICAgKiB0byA3IGluY2x1c2l2ZSwgd2l0aCAxIGJlaW5nIHRoZSBs
b2NhbGl6ZWQgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLgorICAgKiBAc3RhYmxlIElDVSAyLjYKKyAg
ICovCisgIFVDQUxfRE9XX0xPQ0FMLAorCisgIC8qKgorICAgKiBZZWFyIG9mIHRoaXMgY2FsZW5k
YXIgc3lzdGVtLCBlbmNvbXBhc3NpbmcgYWxsIHN1cHJhLXllYXIgZmllbGRzLiBGb3IgZXhhbXBs
ZSwgCisgICAqIGluIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzLCBwb3NpdGl2ZSBFeHRlbmRl
ZCBZZWFyIHZhbHVlcyBpbmRpY2F0ZSB5ZWFycyBBRCwKKyAgICogIDEgQkMgPSAwIGV4dGVuZGVk
LCAyIEJDID0gLTEgZXh0ZW5kZWQsIGFuZCBzbyBvbi4gCisgICAqIEBzdGFibGUgSUNVIDIuOCAK
KyAgICovCisgIFVDQUxfRVhURU5ERURfWUVBUiwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIg
CisgICAqIGluZGljYXRpbmcgdGhlIG1vZGlmaWVkIEp1bGlhbiBkYXkgbnVtYmVyLiAgVGhpcyBp
cyBkaWZmZXJlbnQgZnJvbQorICAgKiB0aGUgY29udmVudGlvbmFsIEp1bGlhbiBkYXkgbnVtYmVy
IGluIHR3byByZWdhcmRzLiAgRmlyc3QsIGl0CisgICAqIGRlbWFyY2F0ZXMgZGF5cyBhdCBsb2Nh
bCB6b25lIG1pZG5pZ2h0LCByYXRoZXIgdGhhbiBub29uIEdNVC4KKyAgICogU2Vjb25kLCBpdCBp
cyBhIGxvY2FsIG51bWJlcjsgdGhhdCBpcywgaXQgZGVwZW5kcyBvbiB0aGUgbG9jYWwgdGltZQor
ICAgKiB6b25lLiAgSXQgY2FuIGJlIHRob3VnaHQgb2YgYXMgYSBzaW5nbGUgbnVtYmVyIHRoYXQg
ZW5jb21wYXNzZXMgYWxsCisgICAqIHRoZSBkYXRlLXJlbGF0ZWQgZmllbGRzLgorICAgKiBAc3Rh
YmxlIElDVSAyLjgKKyAgICovCisgIFVDQUxfSlVMSUFOX0RBWSwgCisKKyAgLyoqCisgICAqIFJh
bmdlcyBmcm9tIDAgdG8gMjM6NTk6NTkuOTk5IChyZWdhcmRsZXNzIG9mIERTVCkuICBUaGlzIGZp
ZWxkIGJlaGF2ZXMgPGVtPmV4YWN0bHk8L2VtPiAKKyAgICogbGlrZSBhIGNvbXBvc2l0ZSBvZiBh
bGwgdGltZS1yZWxhdGVkIGZpZWxkcywgbm90IGluY2x1ZGluZyB0aGUgem9uZSBmaWVsZHMuICBB
cyBzdWNoLCAKKyAgICogaXQgYWxzbyByZWZsZWN0cyBkaXNjb250aW51aXRpZXMgb2YgdGhvc2Ug
ZmllbGRzIG9uIERTVCB0cmFuc2l0aW9uIGRheXMuICBPbiBhIGRheQorICAgKiBvZiBEU1Qgb25z
ZXQsIGl0IHdpbGwganVtcCBmb3J3YXJkLiAgT24gYSBkYXkgb2YgRFNUIGNlc3NhdGlvbiwgaXQg
d2lsbCBqdW1wIAorICAgKiBiYWNrd2FyZC4gIFRoaXMgcmVmbGVjdHMgdGhlIGZhY3QgdGhhdCBp
dCBtdXN0IGJlIGNvbWJpbmVkIHdpdGggdGhlIERTVF9PRkZTRVQgZmllbGQKKyAgICogdG8gb2J0
YWluIGEgdW5pcXVlIGxvY2FsIHRpbWUgdmFsdWUuCisgICAqIEBzdGFibGUgSUNVIDIuOAorICAg
Ki8KKyAgVUNBTF9NSUxMSVNFQ09ORFNfSU5fREFZLAorCisgIC8qKgorICAgKiBXaGV0aGVyIG9y
IG5vdCB0aGUgY3VycmVudCBtb250aCBpcyBhIGxlYXAgbW9udGggKDAgb3IgMSkuIFNlZSB0aGUg
Q2hpbmVzZSBjYWxlbmRhciBmb3IKKyAgICogYW4gZXhhbXBsZSBvZiB0aGlzLgorICAgKi8KKyAg
VUNBTF9JU19MRUFQX01PTlRILAorICAKKyAgLyoqCisgICAqIEZpZWxkIGNvdW50CisgICAqIEBz
dGFibGUgSUNVIDIuNgorICAgKi8KKyAgVUNBTF9GSUVMRF9DT1VOVCwKKworIC8qKgorICAgKiBG
aWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUKKyAgICogZGF5IG9mIHRoZSBtb250aC4gVGhpcyBp
cyBhIHN5bm9ueW0gZm9yIDxjb2RlPlVDQUxfREFURTwvY29kZT4uCisgICAqIFRoZSBmaXJzdCBk
YXkgb2YgdGhlIG1vbnRoIGhhcyB2YWx1ZSAxLgorICAgKiBAc2VlICNVQ0FMX0RBVEUKKyAgICog
U3lub255bSBmb3IgVUNBTF9EQVRFCisgICAqIEBzdGFibGUgSUNVIDIuOAorICAgKiovCisgIFVD
QUxfREFZX09GX01PTlRIPVVDQUxfREFURQorfTsKKworLyoqIEBzdGFibGUgSUNVIDIuMCAqLwor
dHlwZWRlZiBlbnVtIFVDYWxlbmRhckRhdGVGaWVsZHMgVUNhbGVuZGFyRGF0ZUZpZWxkczsKKyAg
ICAvKioKKyAgICAgKiBVc2VmdWwgY29uc3RhbnQgZm9yIGRheXMgb2Ygd2Vlay4gTm90ZTogQ2Fs
ZW5kYXIgZGF5LW9mLXdlZWsgaXMgMS1iYXNlZC4gQ2xpZW50cworICAgICAqIHdobyBjcmVhdGUg
bG9jYWxlIHJlc291cmNlcyBmb3IgdGhlIGZpZWxkIG9mIGZpcnN0LWRheS1vZi13ZWVrIHNob3Vs
ZCBiZSBhd2FyZSBvZgorICAgICAqIHRoaXMuIEZvciBpbnN0YW5jZSwgaW4gVVMgbG9jYWxlLCBm
aXJzdC1kYXktb2Ytd2VlayBpcyBzZXQgdG8gMSwgaS5lLiwgVUNBTF9TVU5EQVkuCisgICAgICov
CisvKiogUG9zc2libGUgZGF5cyBvZiB0aGUgd2VlayBpbiBhIFVDYWxlbmRhciAKKyAqIEBzdGFi
bGUgSUNVIDIuMAorICovCitlbnVtIFVDYWxlbmRhckRheXNPZldlZWsgeworICAvKiogU3VuZGF5
ICovCisgIFVDQUxfU1VOREFZID0gMSwKKyAgLyoqIE1vbmRheSAqLworICBVQ0FMX01PTkRBWSwK
KyAgLyoqIFR1ZXNkYXkgKi8KKyAgVUNBTF9UVUVTREFZLAorICAvKiogV2VkbmVzZGF5ICovCisg
IFVDQUxfV0VETkVTREFZLAorICAvKiogVGh1cnNkYXkgKi8KKyAgVUNBTF9USFVSU0RBWSwKKyAg
LyoqIEZyaWRheSAqLworICBVQ0FMX0ZSSURBWSwKKyAgLyoqIFNhdHVyZGF5ICovCisgIFVDQUxf
U0FUVVJEQVkKK307CisKKy8qKiBAc3RhYmxlIElDVSAyLjAgKi8KK3R5cGVkZWYgZW51bSBVQ2Fs
ZW5kYXJEYXlzT2ZXZWVrIFVDYWxlbmRhckRheXNPZldlZWs7CisKKy8qKiBQb3NzaWJsZSBtb250
aHMgaW4gYSBVQ2FsZW5kYXIuIE5vdGU6IENhbGVuZGFyIG1vbnRoIGlzIDAtYmFzZWQuCisgKiBA
c3RhYmxlIElDVSAyLjAKKyAqLworZW51bSBVQ2FsZW5kYXJNb250aHMgeworICAvKiogSmFudWFy
eSAqLworICBVQ0FMX0pBTlVBUlksCisgIC8qKiBGZWJydWFyeSAqLworICBVQ0FMX0ZFQlJVQVJZ
LAorICAvKiogTWFyY2ggKi8KKyAgVUNBTF9NQVJDSCwKKyAgLyoqIEFwcmlsICovCisgIFVDQUxf
QVBSSUwsCisgIC8qKiBNYXkgKi8KKyAgVUNBTF9NQVksCisgIC8qKiBKdW5lICovCisgIFVDQUxf
SlVORSwKKyAgLyoqIEp1bHkgKi8KKyAgVUNBTF9KVUxZLAorICAvKiogQXVndXN0ICovCisgIFVD
QUxfQVVHVVNULAorICAvKiogU2VwdGVtYmVyICovCisgIFVDQUxfU0VQVEVNQkVSLAorICAvKiog
T2N0b2JlciAqLworICBVQ0FMX09DVE9CRVIsCisgIC8qKiBOb3ZlbWJlciAqLworICBVQ0FMX05P
VkVNQkVSLAorICAvKiogRGVjZW1iZXIgKi8KKyAgVUNBTF9ERUNFTUJFUiwKKyAgLyoqIFZhbHVl
IG9mIHRoZSA8Y29kZT5VQ0FMX01PTlRIPC9jb2RlPiBmaWVsZCBpbmRpY2F0aW5nIHRoZQorICAg
ICogdGhpcnRlZW50aCBtb250aCBvZiB0aGUgeWVhci4gQWx0aG91Z2ggdGhlIEdyZWdvcmlhbiBj
YWxlbmRhcgorICAgICogZG9lcyBub3QgdXNlIHRoaXMgdmFsdWUsIGx1bmFyIGNhbGVuZGFycyBk
by4KKyAgICAqLworICBVQ0FMX1VOREVDSU1CRVIKK307CisKKy8qKiBAc3RhYmxlIElDVSAyLjAg
Ki8KK3R5cGVkZWYgZW51bSBVQ2FsZW5kYXJNb250aHMgVUNhbGVuZGFyTW9udGhzOworCisvKiog
UG9zc2libGUgQU0vUE0gdmFsdWVzIGluIGEgVUNhbGVuZGFyIAorICogQHN0YWJsZSBJQ1UgMi4w
CisgKi8KK2VudW0gVUNhbGVuZGFyQU1QTXMgeworICAgIC8qKiBBTSAqLworICBVQ0FMX0FNLAor
ICAvKiogUE0gKi8KKyAgVUNBTF9QTQorfTsKKworLyoqIEBzdGFibGUgSUNVIDIuMCAqLwordHlw
ZWRlZiBlbnVtIFVDYWxlbmRhckFNUE1zIFVDYWxlbmRhckFNUE1zOworCisvKioKKyAqIENyZWF0
ZSBhbiBlbnVtZXJhdGlvbiBvdmVyIGFsbCB0aW1lIHpvbmVzLgorICoKKyAqIEBwYXJhbSBlYyBp
bnB1dC9vdXRwdXQgZXJyb3IgY29kZQorICoKKyAqIEByZXR1cm4gYW4gZW51bWVyYXRpb24gb2Jq
ZWN0IHRoYXQgdGhlIGNhbGxlciBtdXN0IGRpc3Bvc2Ugb2YgdXNpbmcKKyAqIHVlbnVtX2Nsb3Nl
KCksIG9yIE5VTEwgdXBvbiBmYWlsdXJlLiBJbiBjYXNlIG9mIGZhaWx1cmUgKmVjIHdpbGwKKyAq
IGluZGljYXRlIHRoZSBlcnJvci4KKyAqCisgKiBAc3RhYmxlIElDVSAyLjYKKyAqLworVV9TVEFC
TEUgVUVudW1lcmF0aW9uKiBVX0VYUE9SVDIKK3VjYWxfb3BlblRpbWVab25lcyhVRXJyb3JDb2Rl
KiBlYyk7CisKKy8qKgorICogQ3JlYXRlIGFuIGVudW1lcmF0aW9uIG92ZXIgYWxsIHRpbWUgem9u
ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbgorICogY291bnRyeS4gU29tZSB6b25lcyBhcmUg
YWZmaWxpYXRlZCB3aXRoIG5vIGNvdW50cnkgKGUuZy4sICJVVEMiKTsKKyAqIHRoZXNlIG1heSBh
bHNvIGJlIHJldHJpZXZlZCwgYXMgYSBncm91cC4KKyAqCisgKiBAcGFyYW0gY291bnRyeSB0aGUg
SVNPIDMxNjYgdHdvLWxldHRlciBjb3VudHJ5IGNvZGUsIG9yIE5VTEwgdG8KKyAqIHJldHJpZXZl
IHpvbmVzIG5vdCBhZmZpbGlhdGVkIHdpdGggYW55IGNvdW50cnkKKyAqCisgKiBAcGFyYW0gZWMg
aW5wdXQvb3V0cHV0IGVycm9yIGNvZGUKKyAqCisgKiBAcmV0dXJuIGFuIGVudW1lcmF0aW9uIG9i
amVjdCB0aGF0IHRoZSBjYWxsZXIgbXVzdCBkaXNwb3NlIG9mIHVzaW5nCisgKiB1ZW51bV9jbG9z
ZSgpLCBvciBOVUxMIHVwb24gZmFpbHVyZS4gSW4gY2FzZSBvZiBmYWlsdXJlICplYyB3aWxsCisg
KiBpbmRpY2F0ZSB0aGUgZXJyb3IuCisgKgorICogQHN0YWJsZSBJQ1UgMi42CisgKi8KK1VfU1RB
QkxFIFVFbnVtZXJhdGlvbiogVV9FWFBPUlQyCit1Y2FsX29wZW5Db3VudHJ5VGltZVpvbmVzKGNv
bnN0IGNoYXIqIGNvdW50cnksIFVFcnJvckNvZGUqIGVjKTsKKworLyoqCisgKiBSZXR1cm4gdGhl
IGRlZmF1bHQgdGltZSB6b25lLiBUaGUgZGVmYXVsdCBpcyBkZXRlcm1pbmVkIGluaXRpYWxseQor
ICogYnkgcXVlcnlpbmcgdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbS4gSXQgbWF5IGJlIGNoYW5n
ZWQgd2l0aAorICogdWNhbF9zZXREZWZhdWx0VGltZVpvbmUoKSBvciB3aXRoIHRoZSBDKysgVGlt
ZVpvbmUgQVBJLgorICoKKyAqIEBwYXJhbSByZXN1bHQgQSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUg
cmVzdWx0LCBvciBOVUxMCisgKgorICogQHBhcmFtIHJlc3VsdENhcGFjaXR5IFRoZSBjYXBhY2l0
eSBvZiB0aGUgcmVzdWx0IGJ1ZmZlcgorICoKKyAqIEBwYXJhbSBlYyBpbnB1dC9vdXRwdXQgZXJy
b3IgY29kZQorICoKKyAqIEByZXR1cm4gVGhlIHJlc3VsdCBzdHJpbmcgbGVuZ3RoLCBub3QgaW5j
bHVkaW5nIHRoZSB0ZXJtaW5hdGluZworICogbnVsbAorICoKKyAqIEBzdGFibGUgSUNVIDIuNgor
ICovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgordWNhbF9nZXREZWZhdWx0VGltZVpvbmUo
VUNoYXIqIHJlc3VsdCwgaW50MzJfdCByZXN1bHRDYXBhY2l0eSwgVUVycm9yQ29kZSogZWMpOwor
CisvKioKKyAqIFNldCB0aGUgZGVmYXVsdCB0aW1lIHpvbmUuCisgKgorICogQHBhcmFtIHpvbmVJ
RCBudWxsLXRlcm1pbmF0ZWQgdGltZSB6b25lIElECisgKgorICogQHBhcmFtIGVjIGlucHV0L291
dHB1dCBlcnJvciBjb2RlCisgKgorICogQHN0YWJsZSBJQ1UgMi42CisgKi8KK1VfU1RBQkxFIHZv
aWQgVV9FWFBPUlQyCit1Y2FsX3NldERlZmF1bHRUaW1lWm9uZShjb25zdCBVQ2hhciogem9uZUlE
LCBVRXJyb3JDb2RlKiBlYyk7CisKKy8qKgorICogUmV0dXJuIHRoZSBhbW91bnQgb2YgdGltZSBp
biBtaWxsaXNlY29uZHMgdGhhdCB0aGUgY2xvY2sgaXMKKyAqIGFkdmFuY2VkIGR1cmluZyBkYXls
aWdodCBzYXZpbmdzIHRpbWUgZm9yIHRoZSBnaXZlbiB0aW1lIHpvbmUsIG9yCisgKiB6ZXJvIGlm
IHRoZSB0aW1lIHpvbmUgZG9lcyBub3Qgb2JzZXJ2ZSBkYXlsaWdodCBzYXZpbmdzIHRpbWUuCisg
KgorICogQHBhcmFtIHpvbmVJRCBudWxsLXRlcm1pbmF0ZWQgdGltZSB6b25lIElECisgKgorICog
QHBhcmFtIGVjIGlucHV0L291dHB1dCBlcnJvciBjb2RlCisgKgorICogQHJldHVybiB0aGUgbnVt
YmVyIG9mIG1pbGxpc2Vjb25kcyB0aGUgdGltZSBpcyBhZHZhbmNlZCB3aXRoCisgKiByZXNwZWN0
IHRvIHN0YW5kYXJkIHRpbWUgd2hlbiB0aGUgZGF5bGlnaHQgc2F2aW5ncyBydWxlcyBhcmUgaW4K
KyAqIGVmZmVjdC4gVGhpcyBpcyBhbHdheXMgYSBub24tbmVnYXRpdmUgbnVtYmVyLCBtb3N0IGNv
bW1vbmx5IGVpdGhlcgorICogMyw2MDAsMDAwIChvbmUgaG91cikgb3IgemVyby4KKyAqCisgKiBA
c3RhYmxlIElDVSAyLjYKKyAqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKK3VjYWxfZ2V0
RFNUU2F2aW5ncyhjb25zdCBVQ2hhciogem9uZUlELCBVRXJyb3JDb2RlKiBlYyk7CisKKy8qKgor
ICogR2V0IHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUuCisgKiBUaGUgdmFsdWUgcmV0dXJuZWQg
aXMgcmVwcmVzZW50ZWQgYXMgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGVwb2NoLgorICogQHJldHVy
biBUaGUgY3VycmVudCBkYXRlIGFuZCB0aW1lLgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1Vf
U1RBQkxFIFVEYXRlIFVfRVhQT1JUMiAKK3VjYWxfZ2V0Tm93KHZvaWQpOworCisvKioKKyAqIE9w
ZW4gYSBVQ2FsZW5kYXIuCisgKiBBIFVDYWxlbmRhciBtYXkgYmUgdXNlZCB0byBjb252ZXJ0IGEg
bWlsbGlzZWNvbmQgdmFsdWUgdG8gYSB5ZWFyLAorICogbW9udGgsIGFuZCBkYXkuCisgKiA8cD4K
KyAqIE5vdGU6IFdoZW4gdW5rbm93biBUaW1lWm9uZSBJRCBpcyBzcGVjaWZpZWQsIHRoZSBVQ2Fs
ZW5kYXIgcmV0dXJuZWQKKyAqIGJ5IHRoZSBmdW5jdGlvbiBpcyBpbml0aWFsaXplZCB3aXRoIEdN
VCAoIkV0Yy9HTVQiKSB3aXRob3V0IGFueQorICogZXJyb3JzL3dhcm5pbmdzLiAgSWYgeW91IHdh
bnQgdG8gY2hlY2sgaWYgYSBUaW1lWm9uZSBJRCBpcyB2YWxpZCwKKyAqIHVzZSB1Y2FsX2dldENh
bm9uaWNhbFRpbWVab25lSUQgcHJpb3IgdG8gdGhpcyBmdW5jdGlvbi4KKyAqIAorICogQHBhcmFt
IHpvbmVJRCBUaGUgZGVzaXJlZCBUaW1lWm9uZSBJRC4gIElmIDAsIHVzZSB0aGUgZGVmYXVsdCB0
aW1lIHpvbmUuCisgKiBAcGFyYW0gbGVuIFRoZSBsZW5ndGggb2Ygem9uZUlELCBvciAtMSBpZiBu
dWxsLXRlcm1pbmF0ZWQuCisgKiBAcGFyYW0gbG9jYWxlIFRoZSBkZXNpcmVkIGxvY2FsZQorICog
QHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgVUNhbGVuZGFyIHRvIG9wZW4uIFRoaXMgY2FuIGJlIFVD
QUxfR1JFR09SSUFOIHRvIG9wZW4gdGhlIEdyZWdvcmlhbgorICogY2FsZW5kYXIgZm9yIHRoZSBs
b2NhbGUsIG9yIFVDQUxfREVGQVVMVCB0byBvcGVuIHRoZSBkZWZhdWx0IGNhbGVuZGFyIGZvciB0
aGUgbG9jYWxlICh0aGUKKyAqIGRlZmF1bHQgY2FsZW5kYXIgbWF5IGFsc28gYmUgR3JlZ29yaWFu
KS4gVG8gb3BlbiBhIHNwZWNpZmljIG5vbi1HcmVnb3JpYW4gY2FsZW5kYXIgZm9yIHRoZQorICog
bG9jYWxlLCB1c2UgdWxvY19zZXRLZXl3b3JkVmFsdWUgdG8gc2V0IHRoZSB2YWx1ZSBvZiB0aGUg
Y2FsZW5kYXIga2V5d29yZCBmb3IgdGhlIGxvY2FsZQorICogYW5kIHRoZW4gcGFzcyB0aGUgbG9j
YWxlIHRvIHVjYWxfb3BlbiB3aXRoIFVDQUxfREVGQVVMVCBhcyB0aGUgdHlwZS4KKyAqIEBwYXJh
bSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3Jz
CisgKiBAcmV0dXJuIEEgcG9pbnRlciB0byBhIFVDYWxlbmRhciwgb3IgMCBpZiBhbiBlcnJvciBv
Y2N1cnJlZC4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBVQ2FsZW5kYXIqIFVf
RVhQT1JUMiAKK3VjYWxfb3Blbihjb25zdCBVQ2hhciogICB6b25lSUQsCisgICAgICAgICAgaW50
MzJfdCAgICAgICAgbGVuLAorICAgICAgICAgIGNvbnN0IGNoYXIqICAgIGxvY2FsZSwKKyAgICAg
ICAgICBVQ2FsZW5kYXJUeXBlICB0eXBlLAorICAgICAgICAgIFVFcnJvckNvZGUqICAgIHN0YXR1
cyk7CisKKy8qKgorICogQ2xvc2UgYSBVQ2FsZW5kYXIuCisgKiBPbmNlIGNsb3NlZCwgYSBVQ2Fs
ZW5kYXIgbWF5IG5vIGxvbmdlciBiZSB1c2VkLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFy
IHRvIGNsb3NlLgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBP
UlQyIAordWNhbF9jbG9zZShVQ2FsZW5kYXIgKmNhbCk7CisKKyNpZiBVX1NIT1dfQ1BMVVNQTFVT
X0FQSQorCitVX05BTUVTUEFDRV9CRUdJTgorCisvKioKKyAqIFxjbGFzcyBMb2NhbFVDYWxlbmRh
clBvaW50ZXIKKyAqICJTbWFydCBwb2ludGVyIiBjbGFzcywgY2xvc2VzIGEgVUNhbGVuZGFyIHZp
YSB1Y2FsX2Nsb3NlKCkuCisgKiBGb3IgbW9zdCBtZXRob2RzIHNlZSB0aGUgTG9jYWxQb2ludGVy
QmFzZSBiYXNlIGNsYXNzLgorICoKKyAqIEBzZWUgTG9jYWxQb2ludGVyQmFzZQorICogQHNlZSBM
b2NhbFBvaW50ZXIKKyAqIEBzdGFibGUgSUNVIDQuNAorICovCitVX0RFRklORV9MT0NBTF9PUEVO
X1BPSU5URVIoTG9jYWxVQ2FsZW5kYXJQb2ludGVyLCBVQ2FsZW5kYXIsIHVjYWxfY2xvc2UpOwor
CitVX05BTUVTUEFDRV9FTkQKKworI2VuZGlmCisKKy8qKgorICogT3BlbiBhIGNvcHkgb2YgYSBV
Q2FsZW5kYXIuCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGEgZGVlcCBjb3B5LgorICogQHBh
cmFtIGNhbCBUaGUgY2FsZW5kYXIgdG8gY29weQorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIg
dG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMuCisgKiBAcmV0dXJuIEEgcG9p
bnRlciB0byBhIFVDYWxlbmRhciBpZGVudGljYWwgdG8gY2FsLgorICogQHN0YWJsZSBJQ1UgNC4w
CisgKi8KK1VfU1RBQkxFIFVDYWxlbmRhciogVV9FWFBPUlQyIAordWNhbF9jbG9uZShjb25zdCBV
Q2FsZW5kYXIqIGNhbCwKKyAgICAgICAgICAgVUVycm9yQ29kZSogICAgICBzdGF0dXMpOworCisv
KioKKyAqIFNldCB0aGUgVGltZVpvbmUgdXNlZCBieSBhIFVDYWxlbmRhci4KKyAqIEEgVUNhbGVu
ZGFyIHVzZXMgYSB0aW1lem9uZSBmb3IgY29udmVydGluZyBmcm9tIEdyZWVud2ljaCB0aW1lIHRv
IGxvY2FsIHRpbWUuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gc2V0LgorICogQHBh
cmFtIHpvbmVJRCBUaGUgZGVzaXJlZCBUaW1lWm9uZSBJRC4gIElmIDAsIHVzZSB0aGUgZGVmYXVs
dCB0aW1lIHpvbmUuCisgKiBAcGFyYW0gbGVuIFRoZSBsZW5ndGggb2Ygem9uZUlELCBvciAtMSBp
ZiBudWxsLXRlcm1pbmF0ZWQuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJy
b3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycy4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitV
X1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfc2V0VGltZVpvbmUoVUNhbGVuZGFyKiAgICBj
YWwsCisgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiAgem9uZUlELAorICAgICAgICAgICAg
ICAgICBpbnQzMl90ICAgICAgIGxlbiwKKyAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSogICBz
dGF0dXMpOworCisvKioKKyAqIFBvc3NpYmxlIGZvcm1hdHMgZm9yIGEgVUNhbGVuZGFyJ3MgZGlz
cGxheSBuYW1lIAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK2VudW0gVUNhbGVuZGFyRGlzcGxh
eU5hbWVUeXBlIHsKKyAgLyoqIFN0YW5kYXJkIGRpc3BsYXkgbmFtZSAqLworICBVQ0FMX1NUQU5E
QVJELAorICAvKiogU2hvcnQgc3RhbmRhcmQgZGlzcGxheSBuYW1lICovCisgIFVDQUxfU0hPUlRf
U1RBTkRBUkQsCisgIC8qKiBEYXlsaWdodCBzYXZpbmdzIGRpc3BsYXkgbmFtZSAqLworICBVQ0FM
X0RTVCwKKyAgLyoqIFNob3J0IGRheWxpZ2h0IHNhdmluZ3MgZGlzcGxheSBuYW1lICovCisgIFVD
QUxfU0hPUlRfRFNUCit9OworCisvKiogQHN0YWJsZSBJQ1UgMi4wICovCit0eXBlZGVmIGVudW0g
VUNhbGVuZGFyRGlzcGxheU5hbWVUeXBlIFVDYWxlbmRhckRpc3BsYXlOYW1lVHlwZTsKKworLyoq
CisgKiBHZXQgdGhlIGRpc3BsYXkgbmFtZSBmb3IgYSBVQ2FsZW5kYXIncyBUaW1lWm9uZS4KKyAq
IEEgZGlzcGxheSBuYW1lIGlzIHN1aXRhYmxlIGZvciBwcmVzZW50YXRpb24gdG8gYSB1c2VyLgor
ICogQHBhcmFtIGNhbCAgICAgICAgICBUaGUgVUNhbGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFt
IHR5cGUgICAgICAgICBUaGUgZGVzaXJlZCBkaXNwbGF5IG5hbWUgZm9ybWF0OyBvbmUgb2YgVUNB
TF9TVEFOREFSRCwgVUNBTF9TSE9SVF9TVEFOREFSRCwKKyAqICAgICAgICAgICAgICAgICAgICAg
VUNBTF9EU1QsIFVDQUxfU0hPUlRfRFNUCisgKiBAcGFyYW0gbG9jYWxlICAgICAgIFRoZSBkZXNp
cmVkIGxvY2FsZSBmb3IgdGhlIGRpc3BsYXkgbmFtZS4KKyAqIEBwYXJhbSByZXN1bHQgICAgICAg
QSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIGZvcm1hdHRlZCBudW1iZXIuCisg
KiBAcGFyYW0gcmVzdWx0TGVuZ3RoIFRoZSBtYXhpbXVtIHNpemUgb2YgcmVzdWx0LgorICogQHBh
cmFtIHN0YXR1cyAgICAgICBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFu
eSBlcnJvcnMKKyAqIEByZXR1cm4gICAgICAgICAgICAgVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5l
ZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNh
dGVkLgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQy
IAordWNhbF9nZXRUaW1lWm9uZURpc3BsYXlOYW1lKGNvbnN0IFVDYWxlbmRhciogICAgICAgICAg
Y2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDYWxlbmRhckRpc3BsYXlOYW1lVHlw
ZSAgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgICAgICAg
ICAgICAgIGxvY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhciogICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90
ICAgICAgICAgICAgICAgICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBVRXJyb3JDb2RlKiAgICAgICAgICAgICAgIHN0YXR1cyk7CisKKy8qKgorICogRGV0ZXJt
aW5lIGlmIGEgVUNhbGVuZGFyIGlzIGN1cnJlbnRseSBpbiBkYXlsaWdodCBzYXZpbmdzIHRpbWUu
CisgKiBEYXlsaWdodCBzYXZpbmdzIHRpbWUgaXMgbm90IHVzZWQgaW4gYWxsIHBhcnRzIG9mIHRo
ZSB3b3JsZC4KKyAqIEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBxdWVyeS4KKyAqIEBwYXJh
bSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3Jz
CisgKiBAcmV0dXJuIFRSVUUgaWYgY2FsIGlzIGN1cnJlbnRseSBpbiBkYXlsaWdodCBzYXZpbmdz
IHRpbWUsIEZBTFNFIG90aGVyd2lzZQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxF
IFVCb29sIFVfRVhQT1JUMiAKK3VjYWxfaW5EYXlsaWdodFRpbWUoY29uc3QgVUNhbGVuZGFyKiAg
Y2FsLAorICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiAgICAgICBzdGF0dXMgKTsKKwor
LyoqCisgKiBTZXRzIHRoZSBHcmVnb3JpYW5DYWxlbmRhciBjaGFuZ2UgZGF0ZS4gVGhpcyBpcyB0
aGUgcG9pbnQgd2hlbiB0aGUgc3dpdGNoIGZyb20KKyAqIEp1bGlhbiBkYXRlcyB0byBHcmVnb3Jp
YW4gZGF0ZXMgb2NjdXJyZWQuIERlZmF1bHQgaXMgMDA6MDA6MDAgbG9jYWwgdGltZSwgT2N0b2Jl
cgorICogMTUsIDE1ODIuIFByZXZpb3VzIHRvIHRoaXMgdGltZSBhbmQgZGF0ZSB3aWxsIGJlIEp1
bGlhbiBkYXRlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIG9ubHkgZm9yIEdyZWdvcmlh
biBjYWxlbmRhcnMuIElmIHRoZSBVQ2FsZW5kYXIgaXMgbm90CisgKiBhbiBpbnN0YW5jZSBvZiBh
IEdyZWdvcmlhbiBjYWxlbmRhciwgdGhlbiBhIFVfVU5TVVBQT1JURURfRVJST1IKKyAqIGVycm9y
IGNvZGUgaXMgc2V0LgorICoKKyAqIEBwYXJhbSBjYWwgICAgICAgIFRoZSBjYWxlbmRhciBvYmpl
Y3QuCisgKiBAcGFyYW0gZGF0ZSAgICAgICBUaGUgZ2l2ZW4gR3JlZ29yaWFuIGN1dG92ZXIgZGF0
ZS4KKyAqIEBwYXJhbSBwRXJyb3JDb2RlIFBvaW50ZXIgdG8gYSBzdGFuZGFyZCBJQ1UgZXJyb3Ig
Y29kZS4gSXRzIGlucHV0IHZhbHVlIG11c3QKKyAqICAgICAgICAgICAgICAgICAgIHBhc3MgdGhl
IFVfU1VDQ0VTUygpIHRlc3QsIG9yIGVsc2UgdGhlIGZ1bmN0aW9uIHJldHVybnMKKyAqICAgICAg
ICAgICAgICAgICAgIGltbWVkaWF0ZWx5LiBDaGVjayBmb3IgVV9GQUlMVVJFKCkgb24gb3V0cHV0
IG9yIHVzZSB3aXRoCisgKiAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjaGFpbmluZy4gKFNl
ZSBVc2VyIEd1aWRlIGZvciBkZXRhaWxzLikKKyAqCisgKiBAc2VlIEdyZWdvcmlhbkNhbGVuZGFy
OjpzZXRHcmVnb3JpYW5DaGFuZ2UKKyAqIEBzZWUgdWNhbF9nZXRHcmVnb3JpYW5DaGFuZ2UKKyAq
IEBzdGFibGUgSUNVIDMuNgorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMgordWNhbF9zZXRH
cmVnb3JpYW5DaGFuZ2UoVUNhbGVuZGFyICpjYWwsIFVEYXRlIGRhdGUsIFVFcnJvckNvZGUgKnBF
cnJvckNvZGUpOworCisvKioKKyAqIEdldHMgdGhlIEdyZWdvcmlhbiBDYWxlbmRhciBjaGFuZ2Ug
ZGF0ZS4gVGhpcyBpcyB0aGUgcG9pbnQgd2hlbiB0aGUgc3dpdGNoIGZyb20KKyAqIEp1bGlhbiBk
YXRlcyB0byBHcmVnb3JpYW4gZGF0ZXMgb2NjdXJyZWQuIERlZmF1bHQgaXMgMDA6MDA6MDAgbG9j
YWwgdGltZSwgT2N0b2JlcgorICogMTUsIDE1ODIuIFByZXZpb3VzIHRvIHRoaXMgdGltZSBhbmQg
ZGF0ZSB3aWxsIGJlIEp1bGlhbiBkYXRlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIG9u
bHkgZm9yIEdyZWdvcmlhbiBjYWxlbmRhcnMuIElmIHRoZSBVQ2FsZW5kYXIgaXMgbm90CisgKiBh
biBpbnN0YW5jZSBvZiBhIEdyZWdvcmlhbiBjYWxlbmRhciwgdGhlbiBhIFVfVU5TVVBQT1JURURf
RVJST1IKKyAqIGVycm9yIGNvZGUgaXMgc2V0LgorICoKKyAqIEBwYXJhbSBjYWwgICAgICAgIFRo
ZSBjYWxlbmRhciBvYmplY3QuCisgKiBAcGFyYW0gcEVycm9yQ29kZSBQb2ludGVyIHRvIGEgc3Rh
bmRhcmQgSUNVIGVycm9yIGNvZGUuIEl0cyBpbnB1dCB2YWx1ZSBtdXN0CisgKiAgICAgICAgICAg
ICAgICAgICBwYXNzIHRoZSBVX1NVQ0NFU1MoKSB0ZXN0LCBvciBlbHNlIHRoZSBmdW5jdGlvbiBy
ZXR1cm5zCisgKiAgICAgICAgICAgICAgICAgICBpbW1lZGlhdGVseS4gQ2hlY2sgZm9yIFVfRkFJ
TFVSRSgpIG9uIG91dHB1dCBvciB1c2Ugd2l0aAorICogICAgICAgICAgICAgICAgICAgZnVuY3Rp
b24gY2hhaW5pbmcuIChTZWUgVXNlciBHdWlkZSBmb3IgZGV0YWlscy4pCisgKiBAcmV0dXJuICAg
VGhlIEdyZWdvcmlhbiBjdXRvdmVyIHRpbWUgZm9yIHRoaXMgY2FsZW5kYXIuCisgKgorICogQHNl
ZSBHcmVnb3JpYW5DYWxlbmRhcjo6Z2V0R3JlZ29yaWFuQ2hhbmdlCisgKiBAc2VlIHVjYWxfc2V0
R3JlZ29yaWFuQ2hhbmdlCisgKiBAc3RhYmxlIElDVSAzLjYKKyAqLworVV9TVEFCTEUgVURhdGUg
VV9FWFBPUlQyCit1Y2FsX2dldEdyZWdvcmlhbkNoYW5nZShjb25zdCBVQ2FsZW5kYXIgKmNhbCwg
VUVycm9yQ29kZSAqcEVycm9yQ29kZSk7CisKKy8qKgorICogVHlwZXMgb2YgVUNhbGVuZGFyIGF0
dHJpYnV0ZXMgCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworZW51bSBVQ2FsZW5kYXJBdHRyaWJ1
dGUgeworICAgIC8qKiBMZW5pZW50IHBhcnNpbmcgKi8KKyAgVUNBTF9MRU5JRU5ULAorICAvKiog
Rmlyc3QgZGF5IG9mIHdlZWsgKi8KKyAgVUNBTF9GSVJTVF9EQVlfT0ZfV0VFSywKKyAgLyoqIE1p
bmltdW0gbnVtYmVyIG9mIGRheXMgaW4gZmlyc3Qgd2VlayAqLworICBVQ0FMX01JTklNQUxfREFZ
U19JTl9GSVJTVF9XRUVLCit9OworCisvKiogQHN0YWJsZSBJQ1UgMi4wICovCit0eXBlZGVmIGVu
dW0gVUNhbGVuZGFyQXR0cmlidXRlIFVDYWxlbmRhckF0dHJpYnV0ZTsKKworLyoqCisgKiBHZXQg
YSBudW1lcmljIGF0dHJpYnV0ZSBhc3NvY2lhdGVkIHdpdGggYSBVQ2FsZW5kYXIuCisgKiBOdW1l
cmljIGF0dHJpYnV0ZXMgaW5jbHVkZSB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLCBvciB0aGUg
bWluaW1hbCBudW1iZXJzCisgKiBvZiBkYXlzIGluIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSBtb250
aC4KKyAqIEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBxdWVyeS4KKyAqIEBwYXJhbSBhdHRy
IFRoZSBkZXNpcmVkIGF0dHJpYnV0ZTsgb25lIG9mIFVDQUxfTEVOSUVOVCwgVUNBTF9GSVJTVF9E
QVlfT0ZfV0VFSywKKyAqIG9yIFVDQUxfTUlOSU1BTF9EQVlTX0lOX0ZJUlNUX1dFRUsKKyAqIEBy
ZXR1cm4gVGhlIHZhbHVlIG9mIGF0dHIuCisgKiBAc2VlIHVjYWxfc2V0QXR0cmlidXRlCisgKiBA
c3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1Y2FsX2dl
dEF0dHJpYnV0ZShjb25zdCBVQ2FsZW5kYXIqICAgIGNhbCwKKyAgICAgICAgICAgICAgICAgIFVD
YWxlbmRhckF0dHJpYnV0ZSAgYXR0cik7CisKKy8qKgorICogU2V0IGEgbnVtZXJpYyBhdHRyaWJ1
dGUgYXNzb2NpYXRlZCB3aXRoIGEgVUNhbGVuZGFyLgorICogTnVtZXJpYyBhdHRyaWJ1dGVzIGlu
Y2x1ZGUgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlaywgb3IgdGhlIG1pbmltYWwgbnVtYmVycwor
ICogb2YgZGF5cyBpbiB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgbW9udGguCisgKiBAcGFyYW0gY2Fs
IFRoZSBVQ2FsZW5kYXIgdG8gc2V0LgorICogQHBhcmFtIGF0dHIgVGhlIGRlc2lyZWQgYXR0cmli
dXRlOyBvbmUgb2YgVUNBTF9MRU5JRU5ULCBVQ0FMX0ZJUlNUX0RBWV9PRl9XRUVLLAorICogb3Ig
VUNBTF9NSU5JTUFMX0RBWVNfSU5fRklSU1RfV0VFSworICogQHBhcmFtIG5ld1ZhbHVlIFRoZSBu
ZXcgdmFsdWUgb2YgYXR0ci4KKyAqIEBzZWUgdWNhbF9nZXRBdHRyaWJ1dGUKKyAqIEBzdGFibGUg
SUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfc2V0QXR0cmlidXRl
KFVDYWxlbmRhciogICAgICAgICAgY2FsLAorICAgICAgICAgICAgICAgICAgVUNhbGVuZGFyQXR0
cmlidXRlICBhdHRyLAorICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgICBuZXdW
YWx1ZSk7CisKKy8qKgorICogR2V0IGEgbG9jYWxlIGZvciB3aGljaCBjYWxlbmRhcnMgYXJlIGF2
YWlsYWJsZS4KKyAqIEEgVUNhbGVuZGFyIGluIGEgbG9jYWxlIHJldHVybmVkIGJ5IHRoaXMgZnVu
Y3Rpb24gd2lsbCBjb250YWluIHRoZSBjb3JyZWN0CisgKiBkYXkgYW5kIG1vbnRoIG5hbWVzIGZv
ciB0aGUgbG9jYWxlLgorICogQHBhcmFtIGxvY2FsZUluZGV4IFRoZSBpbmRleCBvZiB0aGUgZGVz
aXJlZCBsb2NhbGUuCisgKiBAcmV0dXJuIEEgbG9jYWxlIGZvciB3aGljaCBjYWxlbmRhcnMgYXJl
IGF2YWlsYWJsZSwgb3IgMCBpZiBub25lLgorICogQHNlZSB1Y2FsX2NvdW50QXZhaWxhYmxlCisg
KiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgY29uc3QgY2hhciogVV9FWFBPUlQyIAor
dWNhbF9nZXRBdmFpbGFibGUoaW50MzJfdCBsb2NhbGVJbmRleCk7CisKKy8qKgorICogRGV0ZXJt
aW5lIGhvdyBtYW55IGxvY2FsZXMgaGF2ZSBjYWxlbmRhcnMgYXZhaWxhYmxlLgorICogVGhpcyBm
dW5jdGlvbiBpcyBtb3N0IHVzZWZ1bCBhcyBkZXRlcm1pbmluZyB0aGUgbG9vcCBlbmRpbmcgY29u
ZGl0aW9uIGZvcgorICogY2FsbHMgdG8gXHJlZiB1Y2FsX2dldEF2YWlsYWJsZS4KKyAqIEByZXR1
cm4gVGhlIG51bWJlciBvZiBsb2NhbGVzIGZvciB3aGljaCBjYWxlbmRhcnMgYXJlIGF2YWlsYWJs
ZS4KKyAqIEBzZWUgdWNhbF9nZXRBdmFpbGFibGUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitV
X1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VjYWxfY291bnRBdmFpbGFibGUodm9pZCk7CisK
Ky8qKgorICogR2V0IGEgVUNhbGVuZGFyJ3MgY3VycmVudCB0aW1lIGluIG1pbGxpcy4KKyAqIFRo
ZSB0aW1lIGlzIHJlcHJlc2VudGVkIGFzIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBlcG9jaC4KKyAq
IEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBxdWVyeS4KKyAqIEBwYXJhbSBzdGF0dXMgQSBw
b2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisgKiBAcmV0dXJu
IFRoZSBjYWxlbmRhcidzIGN1cnJlbnQgdGltZSBpbiBtaWxsaXMuCisgKiBAc2VlIHVjYWxfc2V0
TWlsbGlzCisgKiBAc2VlIHVjYWxfc2V0RGF0ZQorICogQHNlZSB1Y2FsX3NldERhdGVUaW1lCisg
KiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgVURhdGUgVV9FWFBPUlQyIAordWNhbF9n
ZXRNaWxsaXMoY29uc3QgVUNhbGVuZGFyKiAgY2FsLAorICAgICAgICAgICAgICAgVUVycm9yQ29k
ZSogICAgICAgc3RhdHVzKTsKKworLyoqCisgKiBTZXQgYSBVQ2FsZW5kYXIncyBjdXJyZW50IHRp
bWUgaW4gbWlsbGlzLgorICogVGhlIHRpbWUgaXMgcmVwcmVzZW50ZWQgYXMgbWlsbGlzZWNvbmRz
IGZyb20gdGhlIGVwb2NoLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHNldC4KKyAq
IEBwYXJhbSBkYXRlVGltZSBUaGUgZGVzaXJlZCBkYXRlIGFuZCB0aW1lLgorICogQHBhcmFtIHN0
YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyAq
IEBzZWUgdWNhbF9nZXRNaWxsaXMKKyAqIEBzZWUgdWNhbF9zZXREYXRlCisgKiBAc2VlIHVjYWxf
c2V0RGF0ZVRpbWUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQ
T1JUMiAKK3VjYWxfc2V0TWlsbGlzKFVDYWxlbmRhciogICBjYWwsCisgICAgICAgICAgICAgICBV
RGF0ZSAgICAgICAgZGF0ZVRpbWUsCisgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiAgc3RhdHVz
ICk7CisKKy8qKgorICogU2V0IGEgVUNhbGVuZGFyJ3MgY3VycmVudCBkYXRlLgorICogVGhlIGRh
dGUgaXMgcmVwcmVzZW50ZWQgYXMgYSBzZXJpZXMgb2YgMzItYml0IGludGVnZXJzLgorICogQHBh
cmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHNldC4KKyAqIEBwYXJhbSB5ZWFyIFRoZSBkZXNpcmVk
IHllYXIuCisgKiBAcGFyYW0gbW9udGggVGhlIGRlc2lyZWQgbW9udGg7IG9uZSBvZiBVQ0FMX0pB
TlVBUlksIFVDQUxfRkVCUlVBUlksIFVDQUxfTUFSQ0gsIFVDQUxfQVBSSUwsIFVDQUxfTUFZLAor
ICogVUNBTF9KVU5FLCBVQ0FMX0pVTFksIFVDQUxfQVVHVVNULCBVQ0FMX1NFUFRFTUJFUiwgVUNB
TF9PQ1RPQkVSLCBVQ0FMX05PVkVNQkVSLCBVQ0FMX0RFQ0VNQkVSLCBVQ0FMX1VOREVDSU1CRVIK
KyAqIEBwYXJhbSBkYXRlIFRoZSBkZXNpcmVkIGRheSBvZiB0aGUgbW9udGguCisgKiBAcGFyYW0g
c3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycwor
ICogQHNlZSB1Y2FsX2dldE1pbGxpcworICogQHNlZSB1Y2FsX3NldE1pbGxpcworICogQHNlZSB1
Y2FsX3NldERhdGVUaW1lCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBV
X0VYUE9SVDIgCit1Y2FsX3NldERhdGUoVUNhbGVuZGFyKiAgIGNhbCwKKyAgICAgICAgICAgICBp
bnQzMl90ICAgICAgeWVhciwKKyAgICAgICAgICAgICBpbnQzMl90ICAgICAgbW9udGgsCisgICAg
ICAgICAgICAgaW50MzJfdCAgICAgIGRhdGUsCisgICAgICAgICAgICAgVUVycm9yQ29kZSogIHN0
YXR1cyk7CisKKy8qKgorICogU2V0IGEgVUNhbGVuZGFyJ3MgY3VycmVudCBkYXRlLgorICogVGhl
IGRhdGUgaXMgcmVwcmVzZW50ZWQgYXMgYSBzZXJpZXMgb2YgMzItYml0IGludGVnZXJzLgorICog
QHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHNldC4KKyAqIEBwYXJhbSB5ZWFyIFRoZSBkZXNp
cmVkIHllYXIuCisgKiBAcGFyYW0gbW9udGggVGhlIGRlc2lyZWQgbW9udGg7IG9uZSBvZiBVQ0FM
X0pBTlVBUlksIFVDQUxfRkVCUlVBUlksIFVDQUxfTUFSQ0gsIFVDQUxfQVBSSUwsIFVDQUxfTUFZ
LAorICogVUNBTF9KVU5FLCBVQ0FMX0pVTFksIFVDQUxfQVVHVVNULCBVQ0FMX1NFUFRFTUJFUiwg
VUNBTF9PQ1RPQkVSLCBVQ0FMX05PVkVNQkVSLCBVQ0FMX0RFQ0VNQkVSLCBVQ0FMX1VOREVDSU1C
RVIKKyAqIEBwYXJhbSBkYXRlIFRoZSBkZXNpcmVkIGRheSBvZiB0aGUgbW9udGguCisgKiBAcGFy
YW0gaG91ciBUaGUgZGVzaXJlZCBob3VyIG9mIGRheS4KKyAqIEBwYXJhbSBtaW51dGUgVGhlIGRl
c2lyZWQgbWludXRlLgorICogQHBhcmFtIHNlY29uZCBUaGUgZGVzaXJlYyBzZWNvbmQuCisgKiBA
cGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVy
cm9ycworICogQHNlZSB1Y2FsX2dldE1pbGxpcworICogQHNlZSB1Y2FsX3NldE1pbGxpcworICog
QHNlZSB1Y2FsX3NldERhdGUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lk
IFVfRVhQT1JUMiAKK3VjYWxfc2V0RGF0ZVRpbWUoVUNhbGVuZGFyKiAgIGNhbCwKKyAgICAgICAg
ICAgICAgICAgaW50MzJfdCAgICAgIHllYXIsCisgICAgICAgICAgICAgICAgIGludDMyX3QgICAg
ICBtb250aCwKKyAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgIGRhdGUsCisgICAgICAgICAg
ICAgICAgIGludDMyX3QgICAgICBob3VyLAorICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAg
bWludXRlLAorICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgc2Vjb25kLAorICAgICAgICAg
ICAgICAgICBVRXJyb3JDb2RlKiAgc3RhdHVzKTsKKworLyoqCisgKiBSZXR1cm5zIFRSVUUgaWYg
dHdvIFVDYWxlbmRhcnMgYXJlIGVxdWl2YWxlbnQuICBFcXVpdmFsZW50CisgKiBVQ2FsZW5kYXJz
IHdpbGwgYmVoYXZlIGlkZW50aWNhbGx5LCBidXQgdGhleSBtYXkgYmUgc2V0IHRvCisgKiBkaWZm
ZXJlbnQgdGltZXMuCisgKiBAcGFyYW0gY2FsMSBUaGUgZmlyc3Qgb2YgdGhlIFVDYWxlbmRhcnMg
dG8gY29tcGFyZS4KKyAqIEBwYXJhbSBjYWwyIFRoZSBzZWNvbmQgb2YgdGhlIFVDYWxlbmRhcnMg
dG8gY29tcGFyZS4KKyAqIEByZXR1cm4gVFJVRSBpZiBjYWwxIGFuZCBjYWwyIGFyZSBlcXVpdmFs
ZW50LCBGQUxTRSBvdGhlcndpc2UuCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUg
VUJvb2wgVV9FWFBPUlQyIAordWNhbF9lcXVpdmFsZW50VG8oY29uc3QgVUNhbGVuZGFyKiAgY2Fs
MSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IFVDYWxlbmRhciogIGNhbDIpOworCisvKioKKyAq
IEFkZCBhIHNwZWNpZmllZCBzaWduZWQgYW1vdW50IHRvIGEgcGFydGljdWxhciBmaWVsZCBpbiBh
IFVDYWxlbmRhci4KKyAqIFRoaXMgY2FuIG1vZGlmeSBtb3JlIHNpZ25pZmljYW50IGZpZWxkcyBp
biB0aGUgY2FsZW5kYXIuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gd2hpY2ggdG8g
YWRkLgorICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZCB0byB3aGljaCB0byBhZGQgdGhlIHNpZ25l
ZCB2YWx1ZTsgb25lIG9mIFVDQUxfRVJBLCBVQ0FMX1lFQVIsIFVDQUxfTU9OVEgsCisgKiBVQ0FM
X1dFRUtfT0ZfWUVBUiwgVUNBTF9XRUVLX09GX01PTlRILCBVQ0FMX0RBVEUsIFVDQUxfREFZX09G
X1lFQVIsIFVDQUxfREFZX09GX1dFRUssCisgKiBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRILCBV
Q0FMX0FNX1BNLCBVQ0FMX0hPVVIsIFVDQUxfSE9VUl9PRl9EQVksIFVDQUxfTUlOVVRFLCBVQ0FM
X1NFQ09ORCwKKyAqIFVDQUxfTUlMTElTRUNPTkQsIFVDQUxfWk9ORV9PRkZTRVQsIFVDQUxfRFNU
X09GRlNFVC4KKyAqIEBwYXJhbSBhbW91bnQgVGhlIHNpZ25lZCBhbW91bnQgdG8gYWRkIHRvIGZp
ZWxkLiBJZiB0aGUgYW1vdW50IGNhdXNlcyB0aGUgdmFsdWUKKyAqIHRvIGV4Y2VlZCB0byBtYXhp
bXVtIG9yIG1pbmltdW0gdmFsdWVzIGZvciB0aGF0IGZpZWxkLCBvdGhlciBmaWVsZHMgYXJlIG1v
ZGlmaWVkCisgKiB0byBwcmVzZXJ2ZSB0aGUgbWFnbml0dWRlIG9mIHRoZSBjaGFuZ2UuCisgKiBA
cGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVy
cm9ycworICogQHNlZSB1Y2FsX3JvbGwKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJM
RSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfYWRkKFVDYWxlbmRhciogICAgICAgICAgIGNhbCwKKyAg
ICAgICAgIFVDYWxlbmRhckRhdGVGaWVsZHMgIGZpZWxkLAorICAgICAgICAgaW50MzJfdCAgICAg
ICAgICAgICAgYW1vdW50LAorICAgICAgICAgVUVycm9yQ29kZSogICAgICAgICAgc3RhdHVzKTsK
KworLyoqCisgKiBBZGQgYSBzcGVjaWZpZWQgc2lnbmVkIGFtb3VudCB0byBhIHBhcnRpY3VsYXIg
ZmllbGQgaW4gYSBVQ2FsZW5kYXIuCisgKiBUaGlzIHdpbGwgbm90IG1vZGlmeSBtb3JlIHNpZ25p
ZmljYW50IGZpZWxkcyBpbiB0aGUgY2FsZW5kYXIuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5k
YXIgdG8gd2hpY2ggdG8gYWRkLgorICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZCB0byB3aGljaCB0
byBhZGQgdGhlIHNpZ25lZCB2YWx1ZTsgb25lIG9mIFVDQUxfRVJBLCBVQ0FMX1lFQVIsIFVDQUxf
TU9OVEgsCisgKiBVQ0FMX1dFRUtfT0ZfWUVBUiwgVUNBTF9XRUVLX09GX01PTlRILCBVQ0FMX0RB
VEUsIFVDQUxfREFZX09GX1lFQVIsIFVDQUxfREFZX09GX1dFRUssCisgKiBVQ0FMX0RBWV9PRl9X
RUVLX0lOX01PTlRILCBVQ0FMX0FNX1BNLCBVQ0FMX0hPVVIsIFVDQUxfSE9VUl9PRl9EQVksIFVD
QUxfTUlOVVRFLCBVQ0FMX1NFQ09ORCwKKyAqIFVDQUxfTUlMTElTRUNPTkQsIFVDQUxfWk9ORV9P
RkZTRVQsIFVDQUxfRFNUX09GRlNFVC4KKyAqIEBwYXJhbSBhbW91bnQgVGhlIHNpZ25lZCBhbW91
bnQgdG8gYWRkIHRvIGZpZWxkLiBJZiB0aGUgYW1vdW50IGNhdXNlcyB0aGUgdmFsdWUKKyAqIHRv
IGV4Y2VlZCB0byBtYXhpbXVtIG9yIG1pbmltdW0gdmFsdWVzIGZvciB0aGF0IGZpZWxkLCB0aGUg
ZmllbGQgaXMgcGlubmVkIHRvIGEgcGVybWlzc2libGUKKyAqIHZhbHVlLgorICogQHBhcmFtIHN0
YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyAq
IEBzZWUgdWNhbF9hZGQKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVf
RVhQT1JUMiAKK3VjYWxfcm9sbChVQ2FsZW5kYXIqICAgICAgICAgICBjYWwsCisgICAgICAgICAg
VUNhbGVuZGFyRGF0ZUZpZWxkcyAgZmllbGQsCisgICAgICAgICAgaW50MzJfdCAgICAgICAgICAg
ICAgYW1vdW50LAorICAgICAgICAgIFVFcnJvckNvZGUqICAgICAgICAgIHN0YXR1cyk7CisKKy8q
KgorICogR2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgZmllbGQgZnJvbSBhIFVDYWxlbmRhci4K
KyAqIEFsbCBmaWVsZHMgYXJlIHJlcHJlc2VudGVkIGFzIDMyLWJpdCBpbnRlZ2Vycy4KKyAqIEBw
YXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBxdWVyeS4KKyAqIEBwYXJhbSBmaWVsZCBUaGUgZGVz
aXJlZCBmaWVsZDsgb25lIG9mIFVDQUxfRVJBLCBVQ0FMX1lFQVIsIFVDQUxfTU9OVEgsCisgKiBV
Q0FMX1dFRUtfT0ZfWUVBUiwgVUNBTF9XRUVLX09GX01PTlRILCBVQ0FMX0RBVEUsIFVDQUxfREFZ
X09GX1lFQVIsIFVDQUxfREFZX09GX1dFRUssCisgKiBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRI
LCBVQ0FMX0FNX1BNLCBVQ0FMX0hPVVIsIFVDQUxfSE9VUl9PRl9EQVksIFVDQUxfTUlOVVRFLCBV
Q0FMX1NFQ09ORCwKKyAqIFVDQUxfTUlMTElTRUNPTkQsIFVDQUxfWk9ORV9PRkZTRVQsIFVDQUxf
RFNUX09GRlNFVC4KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUg
dG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisgKiBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgZGVzaXJl
ZCBmaWVsZC4KKyAqIEBzZWUgdWNhbF9zZXQKKyAqIEBzZWUgdWNhbF9pc1NldAorICogQHNlZSB1
Y2FsX2NsZWFyRmllbGQKKyAqIEBzZWUgdWNhbF9jbGVhcgorICogQHN0YWJsZSBJQ1UgMi4wCisg
Ki8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordWNhbF9nZXQoY29uc3QgVUNhbGVuZGFy
KiAgICAgY2FsLAorICAgICAgICAgVUNhbGVuZGFyRGF0ZUZpZWxkcyAgZmllbGQsCisgICAgICAg
ICBVRXJyb3JDb2RlKiAgICAgICAgICBzdGF0dXMgKTsKKworLyoqCisgKiBTZXQgdGhlIHZhbHVl
IG9mIGEgZmllbGQgaW4gYSBVQ2FsZW5kYXIuCisgKiBBbGwgZmllbGRzIGFyZSByZXByZXNlbnRl
ZCBhcyAzMi1iaXQgaW50ZWdlcnMuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gc2V0
LgorICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZCB0byBzZXQ7IG9uZSBvZiBVQ0FMX0VSQSwgVUNB
TF9ZRUFSLCBVQ0FMX01PTlRILAorICogVUNBTF9XRUVLX09GX1lFQVIsIFVDQUxfV0VFS19PRl9N
T05USCwgVUNBTF9EQVRFLCBVQ0FMX0RBWV9PRl9ZRUFSLCBVQ0FMX0RBWV9PRl9XRUVLLAorICog
VUNBTF9EQVlfT0ZfV0VFS19JTl9NT05USCwgVUNBTF9BTV9QTSwgVUNBTF9IT1VSLCBVQ0FMX0hP
VVJfT0ZfREFZLCBVQ0FMX01JTlVURSwgVUNBTF9TRUNPTkQsCisgKiBVQ0FMX01JTExJU0VDT05E
LCBVQ0FMX1pPTkVfT0ZGU0VULCBVQ0FMX0RTVF9PRkZTRVQuCisgKiBAcGFyYW0gdmFsdWUgVGhl
IGRlc2lyZWQgdmFsdWUgb2YgZmllbGQuCisgKiBAc2VlIHVjYWxfZ2V0CisgKiBAc2VlIHVjYWxf
aXNTZXQKKyAqIEBzZWUgdWNhbF9jbGVhckZpZWxkCisgKiBAc2VlIHVjYWxfY2xlYXIKKyAqIEBz
dGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfc2V0KFVD
YWxlbmRhciogICAgICAgICAgIGNhbCwKKyAgICAgICAgIFVDYWxlbmRhckRhdGVGaWVsZHMgIGZp
ZWxkLAorICAgICAgICAgaW50MzJfdCAgICAgICAgICAgICAgdmFsdWUpOworCisvKioKKyAqIERl
dGVybWluZSBpZiBhIGZpZWxkIGluIGEgVUNhbGVuZGFyIGlzIHNldC4KKyAqIEFsbCBmaWVsZHMg
YXJlIHJlcHJlc2VudGVkIGFzIDMyLWJpdCBpbnRlZ2Vycy4KKyAqIEBwYXJhbSBjYWwgVGhlIFVD
YWxlbmRhciB0byBxdWVyeS4KKyAqIEBwYXJhbSBmaWVsZCBUaGUgZGVzaXJlZCBmaWVsZDsgb25l
IG9mIFVDQUxfRVJBLCBVQ0FMX1lFQVIsIFVDQUxfTU9OVEgsCisgKiBVQ0FMX1dFRUtfT0ZfWUVB
UiwgVUNBTF9XRUVLX09GX01PTlRILCBVQ0FMX0RBVEUsIFVDQUxfREFZX09GX1lFQVIsIFVDQUxf
REFZX09GX1dFRUssCisgKiBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRILCBVQ0FMX0FNX1BNLCBV
Q0FMX0hPVVIsIFVDQUxfSE9VUl9PRl9EQVksIFVDQUxfTUlOVVRFLCBVQ0FMX1NFQ09ORCwKKyAq
IFVDQUxfTUlMTElTRUNPTkQsIFVDQUxfWk9ORV9PRkZTRVQsIFVDQUxfRFNUX09GRlNFVC4KKyAq
IEByZXR1cm4gVFJVRSBpZiBmaWVsZCBpcyBzZXQsIEZBTFNFIG90aGVyd2lzZS4KKyAqIEBzZWUg
dWNhbF9nZXQKKyAqIEBzZWUgdWNhbF9zZXQKKyAqIEBzZWUgdWNhbF9jbGVhckZpZWxkCisgKiBA
c2VlIHVjYWxfY2xlYXIKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBVQm9vbCBV
X0VYUE9SVDIgCit1Y2FsX2lzU2V0KGNvbnN0IFVDYWxlbmRhciogICAgIGNhbCwKKyAgICAgICAg
ICAgVUNhbGVuZGFyRGF0ZUZpZWxkcyAgZmllbGQpOworCisvKioKKyAqIENsZWFyIGEgZmllbGQg
aW4gYSBVQ2FsZW5kYXIuCisgKiBBbGwgZmllbGRzIGFyZSByZXByZXNlbnRlZCBhcyAzMi1iaXQg
aW50ZWdlcnMuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgY29udGFpbmluZyB0aGUgZmll
bGQgdG8gY2xlYXIuCisgKiBAcGFyYW0gZmllbGQgVGhlIGZpZWxkIHRvIGNsZWFyOyBvbmUgb2Yg
VUNBTF9FUkEsIFVDQUxfWUVBUiwgVUNBTF9NT05USCwKKyAqIFVDQUxfV0VFS19PRl9ZRUFSLCBV
Q0FMX1dFRUtfT0ZfTU9OVEgsIFVDQUxfREFURSwgVUNBTF9EQVlfT0ZfWUVBUiwgVUNBTF9EQVlf
T0ZfV0VFSywKKyAqIFVDQUxfREFZX09GX1dFRUtfSU5fTU9OVEgsIFVDQUxfQU1fUE0sIFVDQUxf
SE9VUiwgVUNBTF9IT1VSX09GX0RBWSwgVUNBTF9NSU5VVEUsIFVDQUxfU0VDT05ELAorICogVUNB
TF9NSUxMSVNFQ09ORCwgVUNBTF9aT05FX09GRlNFVCwgVUNBTF9EU1RfT0ZGU0VULgorICogQHNl
ZSB1Y2FsX2dldAorICogQHNlZSB1Y2FsX3NldAorICogQHNlZSB1Y2FsX2lzU2V0CisgKiBAc2Vl
IHVjYWxfY2xlYXIKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQ
T1JUMiAKK3VjYWxfY2xlYXJGaWVsZChVQ2FsZW5kYXIqICAgICAgICAgICBjYWwsCisgICAgICAg
ICAgICAgICAgVUNhbGVuZGFyRGF0ZUZpZWxkcyAgZmllbGQpOworCisvKioKKyAqIENsZWFyIGFs
bCBmaWVsZHMgaW4gYSBVQ2FsZW5kYXIuCisgKiBBbGwgZmllbGRzIGFyZSByZXByZXNlbnRlZCBh
cyAzMi1iaXQgaW50ZWdlcnMuCisgKiBAcGFyYW0gY2FsZW5kYXIgVGhlIFVDYWxlbmRhciB0byBj
bGVhci4KKyAqIEBzZWUgdWNhbF9nZXQKKyAqIEBzZWUgdWNhbF9zZXQKKyAqIEBzZWUgdWNhbF9p
c1NldAorICogQHNlZSB1Y2FsX2NsZWFyRmllbGQKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitV
X1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfY2xlYXIoVUNhbGVuZGFyKiBjYWxlbmRhcik7
CisKKy8qKgorICogUG9zc2libGUgbGltaXQgdmFsdWVzIGZvciBhIFVDYWxlbmRhciAKKyAqIEBz
dGFibGUgSUNVIDIuMAorICovCitlbnVtIFVDYWxlbmRhckxpbWl0VHlwZSB7CisgIC8qKiBNaW5p
bXVtIHZhbHVlICovCisgIFVDQUxfTUlOSU1VTSwKKyAgLyoqIE1heGltdW0gdmFsdWUgKi8KKyAg
VUNBTF9NQVhJTVVNLAorICAvKiogR3JlYXRlc3QgbWluaW11bSB2YWx1ZSAqLworICBVQ0FMX0dS
RUFURVNUX01JTklNVU0sCisgIC8qKiBMZWFlc3QgbWF4aW11bSB2YWx1ZSAqLworICBVQ0FMX0xF
QVNUX01BWElNVU0sCisgIC8qKiBBY3R1YWwgbWluaW11bSB2YWx1ZSAqLworICBVQ0FMX0FDVFVB
TF9NSU5JTVVNLAorICAvKiogQWN0dWFsIG1heGltdW0gdmFsdWUgKi8KKyAgVUNBTF9BQ1RVQUxf
TUFYSU1VTQorfTsKKworLyoqIEBzdGFibGUgSUNVIDIuMCAqLwordHlwZWRlZiBlbnVtIFVDYWxl
bmRhckxpbWl0VHlwZSBVQ2FsZW5kYXJMaW1pdFR5cGU7CisKKy8qKgorICogRGV0ZXJtaW5lIGEg
bGltaXQgZm9yIGEgZmllbGQgaW4gYSBVQ2FsZW5kYXIuCisgKiBBIGxpbWl0IGlzIGEgbWF4aW11
bSBvciBtaW5pbXVtIHZhbHVlIGZvciBhIGZpZWxkLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVu
ZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIGZpZWxkIFRoZSBkZXNpcmVkIGZpZWxkOyBvbmUgb2Yg
VUNBTF9FUkEsIFVDQUxfWUVBUiwgVUNBTF9NT05USCwKKyAqIFVDQUxfV0VFS19PRl9ZRUFSLCBV
Q0FMX1dFRUtfT0ZfTU9OVEgsIFVDQUxfREFURSwgVUNBTF9EQVlfT0ZfWUVBUiwgVUNBTF9EQVlf
T0ZfV0VFSywKKyAqIFVDQUxfREFZX09GX1dFRUtfSU5fTU9OVEgsIFVDQUxfQU1fUE0sIFVDQUxf
SE9VUiwgVUNBTF9IT1VSX09GX0RBWSwgVUNBTF9NSU5VVEUsIFVDQUxfU0VDT05ELAorICogVUNB
TF9NSUxMSVNFQ09ORCwgVUNBTF9aT05FX09GRlNFVCwgVUNBTF9EU1RfT0ZGU0VULgorICogQHBh
cmFtIHR5cGUgVGhlIGRlc2lyZWQgY3JpdGljYWwgcG9pbnQ7IG9uZSBvZiBVQ0FMX01JTklNVU0s
IFVDQUxfTUFYSU1VTSwgVUNBTF9HUkVBVEVTVF9NSU5JTVVNLAorICogVUNBTF9MRUFTVF9NQVhJ
TVVNLCBVQ0FMX0FDVFVBTF9NSU5JTVVNLCBVQ0FMX0FDVFVBTF9NQVhJTVVNCisgKiBAcGFyYW0g
c3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycy4K
KyAqIEByZXR1cm4gVGhlIHJlcXVlc3RlZCB2YWx1ZS4KKyAqIEBzdGFibGUgSUNVIDIuMAorICov
CitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VjYWxfZ2V0TGltaXQoY29uc3QgVUNhbGVu
ZGFyKiAgICAgY2FsLAorICAgICAgICAgICAgICBVQ2FsZW5kYXJEYXRlRmllbGRzICBmaWVsZCwK
KyAgICAgICAgICAgICAgVUNhbGVuZGFyTGltaXRUeXBlICAgdHlwZSwKKyAgICAgICAgICAgICAg
VUVycm9yQ29kZSogICAgICAgICAgc3RhdHVzKTsKKworLyoqIEdldCB0aGUgbG9jYWxlIGZvciB0
aGlzIGNhbGVuZGFyIG9iamVjdC4gWW91IGNhbiBjaG9vc2UgYmV0d2VlbiB2YWxpZCBhbmQgYWN0
dWFsIGxvY2FsZS4KKyAqICBAcGFyYW0gY2FsIFRoZSBjYWxlbmRhciBvYmplY3QKKyAqICBAcGFy
YW0gdHlwZSB0eXBlIG9mIHRoZSBsb2NhbGUgd2UncmUgbG9va2luZyBmb3IgKHZhbGlkIG9yIGFj
dHVhbCkgCisgKiAgQHBhcmFtIHN0YXR1cyBlcnJvciBjb2RlIGZvciB0aGUgb3BlcmF0aW9uCisg
KiAgQHJldHVybiB0aGUgbG9jYWxlIG5hbWUKKyAqICBAc3RhYmxlIElDVSAyLjgKKyAqLworVV9T
VEFCTEUgY29uc3QgY2hhciAqIFVfRVhQT1JUMgordWNhbF9nZXRMb2NhbGVCeVR5cGUoY29uc3Qg
VUNhbGVuZGFyICpjYWwsIFVMb2NEYXRhTG9jYWxlVHlwZSB0eXBlLCBVRXJyb3JDb2RlKiBzdGF0
dXMpOworCisvKioKKyAqIFJldHVybnMgdGhlIHRpbWV6b25lIGRhdGEgdmVyc2lvbiBjdXJyZW50
bHkgdXNlZCBieSBJQ1UuCisgKiBAcGFyYW0gc3RhdHVzIGVycm9yIGNvZGUgZm9yIHRoZSBvcGVy
YXRpb24KKyAqIEByZXR1cm4gdGhlIHZlcnNpb24gc3RyaW5nLCBzdWNoIGFzICIyMDA3ZiIKKyAq
IEBzdGFibGUgSUNVIDMuOAorICovCitVX1NUQUJMRSBjb25zdCBjaGFyICogVV9FWFBPUlQyCit1
Y2FsX2dldFRaRGF0YVZlcnNpb24oVUVycm9yQ29kZSogc3RhdHVzKTsKKworLyoqCisgKiBSZXR1
cm5zIHRoZSBjYW5vbmljYWwgc3lzdGVtIHRpbWV6b25lIElEIG9yIHRoZSBub3JtYWxpemVkCisg
KiBjdXN0b20gdGltZSB6b25lIElEIGZvciB0aGUgZ2l2ZW4gdGltZSB6b25lIElELgorICogQHBh
cmFtIGlkICAgICAgICBUaGUgaW5wdXQgdGltZXpvbmUgSUQgdG8gYmUgY2Fub25pY2FsaXplZC4K
KyAqIEBwYXJhbSBsZW4gICAgICAgVGhlIGxlbmd0aCBvZiBpZCwgb3IgLTEgaWYgbnVsbC10ZXJt
aW5hdGVkLgorICogQHBhcmFtIHJlc3VsdCAgICBUaGUgYnVmZmVyIHJlY2VpdmVzIHRoZSBjYW5v
bmljYWwgc3lzdGVtIHRpbWV6b25lIElECisgKiAgICAgICAgICAgICAgICAgIG9yIHRoZSBjdXN0
b20gdGltZXpvbmUgSUQgaW4gbm9ybWFsaXplZCBmb3JtYXQuCisgKiBAcGFyYW0gcmVzdWx0Q2Fw
YWNpdHkgICAgVGhlIGNhcGFjaXR5IG9mIHRoZSByZXN1bHQgYnVmZmVyLgorICogQHBhcmFtIGlz
U3lzdGVtSUQgICAgICAgIFJlY2VpdmVzIGlmIHRoZSBnaXZlbiBJRCBpcyBhIGtub3duIHN5c3Rl
bQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIHRpbWV6b25lIElELgorICogQHBhcmFtIHN0
YXR1cyAgICBSZWNldmllcyB0aGUgc3RhdHVzLiAgV2hlbiB0aGUgZ2l2ZW4gdGltZXpvbmUgSUQK
KyAqICAgICAgICAgICAgICAgICAgaXMgbmVpdGhlciBhIGtub3duIHN5c3RlbSB0aW1lIHpvbmUg
SUQgbm9yIGEKKyAqICAgICAgICAgICAgICAgICAgdmFsaWQgY3VzdG9tIHRpbWV6b25lIElELCBV
X0lMTEVHQUxfQVJHVU1FTlRfRVJST1IKKyAqICAgICAgICAgICAgICAgICAgaXMgc2V0LgorICog
QHJldHVybiAgICAgICAgICBUaGUgcmVzdWx0IHN0cmluZyBsZW5ndGgsIG5vdCBpbmNsdWRpbmcg
dGhlIHRlcm1pbmF0aW5nCisgKiAgICAgICAgICAgICAgICAgIG51bGwuCisgKiBAc3RhYmxlIElD
VSA0LjAKKyAqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKK3VjYWxfZ2V0Q2Fub25pY2Fs
VGltZVpvbmVJRChjb25zdCBVQ2hhciogaWQsIGludDMyX3QgbGVuLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFVDaGFyKiByZXN1bHQsIGludDMyX3QgcmVzdWx0Q2FwYWNpdHksIFVCb29s
ICppc1N5c3RlbUlELCBVRXJyb3JDb2RlKiBzdGF0dXMpOworLyoqCisgKiBHZXQgdGhlIHJlc291
cmNlIGtleXdvcmQgdmFsdWUgc3RyaW5nIGRlc2lnbmF0aW5nIHRoZSBjYWxlbmRhciB0eXBlIGZv
ciB0aGUgVUNhbGVuZGFyLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHF1ZXJ5Lgor
ICogQHBhcmFtIHN0YXR1cyBUaGUgZXJyb3IgY29kZSBmb3IgdGhlIG9wZXJhdGlvbi4KKyAqIEBy
ZXR1cm4gVGhlIHJlc291cmNlIGtleXdvcmQgdmFsdWUgc3RyaW5nLgorICogQHN0YWJsZSBJQ1Ug
NC4yCisgKi8KK1VfU1RBQkxFIGNvbnN0IGNoYXIgKiBVX0VYUE9SVDIKK3VjYWxfZ2V0VHlwZShj
b25zdCBVQ2FsZW5kYXIgKmNhbCwgVUVycm9yQ29kZSogc3RhdHVzKTsKKworLyoqCisgKiBHaXZl
biBhIGtleSBhbmQgYSBsb2NhbGUsIHJldHVybnMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcyBp
biBhIHByZWZlcnJlZAorICogb3JkZXIgdGhhdCB3b3VsZCBtYWtlIGEgZGlmZmVyZW5jZS4gVGhl
c2UgYXJlIGFsbCBhbmQgb25seSB0aG9zZSB2YWx1ZXMgd2hlcmUKKyAqIHRoZSBvcGVuIChjcmVh
dGlvbikgb2YgdGhlIHNlcnZpY2Ugd2l0aCB0aGUgbG9jYWxlIGZvcm1lZCBmcm9tIHRoZSBpbnB1
dCBsb2NhbGUKKyAqIHBsdXMgaW5wdXQga2V5d29yZCBhbmQgdGhhdCB2YWx1ZSBoYXMgZGlmZmVy
ZW50IGJlaGF2aW9yIHRoYW4gY3JlYXRpb24gd2l0aCB0aGUKKyAqIGlucHV0IGxvY2FsZSBhbG9u
ZS4KKyAqIEBwYXJhbSBrZXkgICAgICAgICAgIG9uZSBvZiB0aGUga2V5cyBzdXBwb3J0ZWQgYnkg
dGhpcyBzZXJ2aWNlLiAgRm9yIG5vdywgb25seQorICogICAgICAgICAgICAgICAgICAgICAgImNh
bGVuZGFyIiBpcyBzdXBwb3J0ZWQuCisgKiBAcGFyYW0gbG9jYWxlICAgICAgICB0aGUgbG9jYWxl
CisgKiBAcGFyYW0gY29tbW9ubHlVc2VkICBpZiBzZXQgdG8gdHJ1ZSBpdCB3aWxsIHJldHVybiBv
bmx5IGNvbW1vbmx5IHVzZWQgdmFsdWVzCisgKiAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRo
ZSBnaXZlbiBsb2NhbGUgaW4gcHJlZmVycmVkIG9yZGVyLiAgT3RoZXJ3aXNlLAorICogICAgICAg
ICAgICAgICAgICAgICAgaXQgd2lsbCByZXR1cm4gYWxsIHRoZSBhdmFpbGFibGUgdmFsdWVzIGZv
ciB0aGUgbG9jYWxlLgorICogQHBhcmFtIHN0YXR1cyBlcnJvciBzdGF0dXMKKyAqIEByZXR1cm4g
YSBzdHJpbmcgZW51bWVyYXRpb24gb3ZlciBrZXl3b3JkIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGtl
eSBhbmQgdGhlIGxvY2FsZS4KKyAqIEBzdGFibGUgSUNVIDQuMgorICovCitVX1NUQUJMRSBVRW51
bWVyYXRpb24qIFVfRVhQT1JUMgordWNhbF9nZXRLZXl3b3JkVmFsdWVzRm9yTG9jYWxlKGNvbnN0
IGNoYXIqIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBs
b2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUJvb2wgY29tbW9ubHlVc2Vk
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUqIHN0YXR1cyk7CisK
KworLyoqIFdlZWtkYXkgdHlwZXMsIGFzIHJldHVybmVkIGJ5IHVjYWxfZ2V0RGF5T2ZXZWVrVHlw
ZSgpLgorICogQHN0YWJsZSBJQ1UgNC40CisgKi8KK2VudW0gVUNhbGVuZGFyV2Vla2RheVR5cGUg
eworICAvKioKKyAgICogRGVzaWduYXRlcyBhIGZ1bGwgd2Vla2RheSAobm8gcGFydCBvZiB0aGUg
ZGF5IGlzIGluY2x1ZGVkIGluIHRoZSB3ZWVrZW5kKS4KKyAgICogQHN0YWJsZSBJQ1UgNC40IAor
ICAgKi8KKyAgVUNBTF9XRUVLREFZLAorICAvKioKKyAgICogRGVzaWduYXRlcyBhIGZ1bGwgd2Vl
a2VuZCBkYXkgKHRoZSBlbnRpcmUgZGF5IGlzIGluY2x1ZGVkIGluIHRoZSB3ZWVrZW5kKS4KKyAg
ICogQHN0YWJsZSBJQ1UgNC40IAorICAgKi8KKyAgVUNBTF9XRUVLRU5ELAorICAvKioKKyAgICog
RGVzaWduYXRlcyBhIGRheSB0aGF0IHN0YXJ0cyBhcyBhIHdlZWtkYXkgYW5kIHRyYW5zaXRpb25z
IHRvIHRoZSB3ZWVrZW5kLgorICAgKiBDYWxsIHVjYWxfZ2V0V2Vla2VuZFRyYW5zaXRpb24oKSB0
byBnZXQgdGhlIHRpbWUgb2YgdHJhbnNpdGlvbi4KKyAgICogQHN0YWJsZSBJQ1UgNC40IAorICAg
Ki8KKyAgVUNBTF9XRUVLRU5EX09OU0VULAorICAvKioKKyAgICogRGVzaWduYXRlcyBhIGRheSB0
aGF0IHN0YXJ0cyBhcyB0aGUgd2Vla2VuZCBhbmQgdHJhbnNpdGlvbnMgdG8gYSB3ZWVrZGF5Lgor
ICAgKiBDYWxsIHVjYWxfZ2V0V2Vla2VuZFRyYW5zaXRpb24oKSB0byBnZXQgdGhlIHRpbWUgb2Yg
dHJhbnNpdGlvbi4KKyAgICogQHN0YWJsZSBJQ1UgNC40IAorICAgKi8KKyAgVUNBTF9XRUVLRU5E
X0NFQVNFCit9OworCisvKiogQHN0YWJsZSBJQ1UgNC40ICovCit0eXBlZGVmIGVudW0gVUNhbGVu
ZGFyV2Vla2RheVR5cGUgVUNhbGVuZGFyV2Vla2RheVR5cGU7CisKKy8qKgorICogUmV0dXJucyB3
aGV0aGVyIHRoZSBnaXZlbiBkYXkgb2YgdGhlIHdlZWsgaXMgYSB3ZWVrZGF5LCBhCisgKiB3ZWVr
ZW5kIGRheSwgb3IgYSBkYXkgdGhhdCB0cmFuc2l0aW9ucyBmcm9tIG9uZSB0byB0aGUgb3RoZXIs
CisgKiBpbiB0aGlzIGNhbGVuZGFyIHN5c3RlbS4gSWYgYSB0cmFuc2l0aW9uIG9jY3VycyBhdCBt
aWRuaWdodCwKKyAqIHRoZW4gdGhlIGRheXMgYmVmb3JlIGFuZCBhZnRlciB0aGUgdHJhbnNpdGlv
biB3aWxsIGhhdmUgdGhlCisgKiB0eXBlIFVDQUxfV0VFS0RBWSBvciBVQ0FMX1dFRUtFTkQuIElm
IGEgdHJhbnNpdGlvbiBvY2N1cnMgYXQgYSB0aW1lCisgKiBvdGhlciB0aGFuIG1pZG5pZ2h0LCB0
aGVuIHRoZSBkYXkgb2YgdGhlIHRyYW5zaXRpb24gd2lsbCBoYXZlCisgKiB0aGUgdHlwZSBVQ0FM
X1dFRUtFTkRfT05TRVQgb3IgVUNBTF9XRUVLRU5EX0NFQVNFLiBJbiB0aGlzIGNhc2UsIHRoZQor
ICogbWV0aG9kIGdldFdlZWtlbmRUcmFuc2l0aW9uKCkgd2lsbCByZXR1cm4gdGhlIHBvaW50IG9m
CisgKiB0cmFuc2l0aW9uLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHF1ZXJ5Lgor
ICogQHBhcmFtIGRheU9mV2VlayBUaGUgZGF5IG9mIHRoZSB3ZWVrIHdob3NlIHR5cGUgaXMgZGVz
aXJlZCAoVUNBTF9TVU5EQVkuLlVDQUxfU0FUVVJEQVkpLgorICogQHBhcmFtIHN0YXR1cyBUaGUg
ZXJyb3IgY29kZSBmb3IgdGhlIG9wZXJhdGlvbi4KKyAqIEByZXR1cm4gVGhlIFVDYWxlbmRhcldl
ZWtkYXlUeXBlIGZvciB0aGUgZGF5IG9mIHRoZSB3ZWVrLgorICogQHN0YWJsZSBJQ1UgNC40Cisg
Ki8KK1VfU1RBQkxFIFVDYWxlbmRhcldlZWtkYXlUeXBlIFVfRVhQT1JUMgordWNhbF9nZXREYXlP
ZldlZWtUeXBlKGNvbnN0IFVDYWxlbmRhciAqY2FsLCBVQ2FsZW5kYXJEYXlzT2ZXZWVrIGRheU9m
V2VlaywgVUVycm9yQ29kZSogc3RhdHVzKTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSB0aW1lIGR1
cmluZyB0aGUgZGF5IGF0IHdoaWNoIHRoZSB3ZWVrZW5kIGJlZ2lucyBvciBlbmRzIGluCisgKiB0
aGlzIGNhbGVuZGFyIHN5c3RlbS4gIElmIHVjYWxfZ2V0RGF5T2ZXZWVrVHlwZSgpIHJlcnR1cm5z
IFVDQUxfV0VFS0VORF9PTlNFVAorICogZm9yIHRoZSBzcGVjaWZpZWQgZGF5T2ZXZWVrLCByZXR1
cm4gdGhlIHRpbWUgYXQgd2hpY2ggdGhlIHdlZWtlbmQgYmVnaW5zLgorICogSWYgdWNhbF9nZXRE
YXlPZldlZWtUeXBlKCkgcmV0dXJucyBVQ0FMX1dFRUtFTkRfQ0VBU0UgZm9yIHRoZSBzcGVjaWZp
ZWQgZGF5T2ZXZWVrLAorICogcmV0dXJuIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSB3ZWVrZW5kIGVu
ZHMuIElmIHVjYWxfZ2V0RGF5T2ZXZWVrVHlwZSgpIHJldHVybnMKKyAqIHNvbWUgb3RoZXIgVUNh
bGVuZGFyV2Vla2RheVR5cGUgZm9yIHRoZSBzcGVjaWZpZWQgZGF5T2ZXZWVrLCBpcyBpdCBhbiBl
cnJvciBjb25kaXRpb24KKyAqIChVX0lMTEVHQUxfQVJHVU1FTlRfRVJST1IpLgorICogQHBhcmFt
IGNhbCBUaGUgVUNhbGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIGRheU9mV2VlayBUaGUgZGF5
IG9mIHRoZSB3ZWVrIGZvciB3aGljaCB0aGUgd2Vla2VuZCB0cmFuc2l0aW9uIHRpbWUgaXMKKyAq
IGRlc2lyZWQgKFVDQUxfU1VOREFZLi5VQ0FMX1NBVFVSREFZKS4KKyAqIEBwYXJhbSBzdGF0dXMg
VGhlIGVycm9yIGNvZGUgZm9yIHRoZSBvcGVyYXRpb24uCisgKiBAcmV0dXJuIFRoZSBtaWxsaXNl
Y29uZHMgYWZ0ZXIgbWlkbmlnaHQgYXQgd2hpY2ggdGhlIHdlZWtlbmQgYmVnaW5zIG9yIGVuZHMu
CisgKiBAc3RhYmxlIElDVSA0LjQKKyAqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKK3Vj
YWxfZ2V0V2Vla2VuZFRyYW5zaXRpb24oY29uc3QgVUNhbGVuZGFyICpjYWwsIFVDYWxlbmRhckRh
eXNPZldlZWsgZGF5T2ZXZWVrLCBVRXJyb3JDb2RlICpzdGF0dXMpOworCisvKioKKyAqIFJldHVy
bnMgVFJVRSBpZiB0aGUgZ2l2ZW4gVURhdGUgaXMgaW4gdGhlIHdlZWtlbmQgaW4KKyAqIHRoaXMg
Y2FsZW5kYXIgc3lzdGVtLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHF1ZXJ5Lgor
ICogQHBhcmFtIGRhdGUgVGhlIFVEYXRlIGluIHF1ZXN0aW9uLgorICogQHBhcmFtIHN0YXR1cyBU
aGUgZXJyb3IgY29kZSBmb3IgdGhlIG9wZXJhdGlvbi4KKyAqIEByZXR1cm4gVFJVRSBpZiB0aGUg
Z2l2ZW4gVURhdGUgaXMgaW4gdGhlIHdlZWtlbmQgaW4KKyAqIHRoaXMgY2FsZW5kYXIgc3lzdGVt
LCBGQUxTRSBvdGhlcndpc2UuCisgKiBAc3RhYmxlIElDVSA0LjQKKyAqLworVV9TVEFCTEUgVUJv
b2wgVV9FWFBPUlQyCit1Y2FsX2lzV2Vla2VuZChjb25zdCBVQ2FsZW5kYXIgKmNhbCwgVURhdGUg
ZGF0ZSwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworCisjZW5kaWYgLyogI2lmICFVQ09ORklHX05P
X0ZPUk1BVFRJTkcgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaWN1L3VuaWNvZGUvdWRhdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2Rl
L3VkYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kNDgwYzdkYTUxNDc1YjM5M2NlMGQzYzliNzIyY2M2ZGM0ZDNk
MGJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2Rl
L3VkYXQuaApAQCAtMCwwICsxLDk5NyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisg
KiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5l
cworICogQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqCisqLworCisjaWZuZGVmIFVEQVRfSAorI2RlZmluZSBVREFUX0gK
KworI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCisKKyNpZiAhVUNPTkZJR19OT19GT1JNQVRU
SU5HCisKKyNpbmNsdWRlICJ1bmljb2RlL2xvY2FscG9pbnRlci5oIgorI2luY2x1ZGUgInVuaWNv
ZGUvdWNhbC5oIgorI2luY2x1ZGUgInVuaWNvZGUvdW51bS5oIgorLyoqCisgKiBcZmlsZQorICog
XGJyaWVmIEMgQVBJOiBEYXRlRm9ybWF0CisgKgorICogPGgyPiBEYXRlIEZvcm1hdCBDIEFQSTwv
aDI+CisgKgorICogRGF0ZSBGb3JtYXQgQyBBUEkgIGNvbnNpc3RzIG9mIGZ1bmN0aW9ucyB0aGF0
IGNvbnZlcnQgZGF0ZXMgYW5kCisgKiB0aW1lcyBmcm9tIHRoZWlyIGludGVybmFsIHJlcHJlc2Vu
dGF0aW9ucyB0byB0ZXh0dWFsIGZvcm0gYW5kIGJhY2sgYWdhaW4gaW4gYQorICogbGFuZ3VhZ2Ut
aW5kZXBlbmRlbnQgbWFubmVyLiBDb252ZXJ0aW5nIGZyb20gdGhlIGludGVybmFsIHJlcHJlc2Vu
dGF0aW9uIChtaWxsaXNlY29uZHMKKyAqIHNpbmNlIG1pZG5pZ2h0LCBKYW51YXJ5IDEsIDE5NzAp
IHRvIHRleHQgaXMga25vd24gYXMgImZvcm1hdHRpbmcsIiBhbmQgY29udmVydGluZworICogZnJv
bSB0ZXh0IHRvIG1pbGxpcyBpcyBrbm93biBhcyAicGFyc2luZy4iICBXZSBjdXJyZW50bHkgZGVm
aW5lIG9ubHkgb25lIGNvbmNyZXRlCisgKiBzdHJ1Y3R1cmUgVURhdGVGb3JtYXQsIHdoaWNoIGNh
biBoYW5kbGUgcHJldHR5IG11Y2ggYWxsIG5vcm1hbAorICogZGF0ZSBmb3JtYXR0aW5nIGFuZCBw
YXJzaW5nIGFjdGlvbnMuCisgKiA8UD4KKyAqIERhdGUgRm9ybWF0IGhlbHBzIHlvdSB0byBmb3Jt
YXQgYW5kIHBhcnNlIGRhdGVzIGZvciBhbnkgbG9jYWxlLiBZb3VyIGNvZGUgY2FuCisgKiBiZSBj
b21wbGV0ZWx5IGluZGVwZW5kZW50IG9mIHRoZSBsb2NhbGUgY29udmVudGlvbnMgZm9yIG1vbnRo
cywgZGF5cyBvZiB0aGUKKyAqIHdlZWssIG9yIGV2ZW4gdGhlIGNhbGVuZGFyIGZvcm1hdDogbHVu
YXIgdnMuIHNvbGFyLgorICogPFA+CisgKiBUbyBmb3JtYXQgYSBkYXRlIGZvciB0aGUgY3VycmVu
dCBMb2NhbGUgd2l0aCBkZWZhdWx0IHRpbWUgYW5kIGRhdGUgc3R5bGUsCisgKiB1c2Ugb25lIG9m
IHRoZSBzdGF0aWMgZmFjdG9yeSBtZXRob2RzOgorICogPHByZT4KKyAqIFxjb2RlCisgKiAgVUVy
cm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgKiAgVUNoYXIgKm15U3RyaW5nOworICog
IGludDMyX3QgbXlTdHJsZW4gPSAwOworICogIFVEYXRlRm9ybWF0KiBkZm10ID0gdWRhdF9vcGVu
KFVEQVRfREVGQVVMVCwgVURBVF9ERUZBVUxULCBOVUxMLCBOVUxMLCAtMSwgTlVMTCwgLTEsICZz
dGF0dXMpOworICogIG15U3RybGVuID0gdWRhdF9mb3JtYXQoZGZtdCwgbXlEYXRlLCBOVUxMLCBt
eVN0cmxlbiwgTlVMTCwgJnN0YXR1cyk7CisgKiAgaWYgKHN0YXR1cz09VV9CVUZGRVJfT1ZFUkZM
T1dfRVJST1IpeworICogICAgICBzdGF0dXM9VV9aRVJPX0VSUk9SOworICogICAgICBteVN0cmlu
Zz0oVUNoYXIqKW1hbGxvYyhzaXplb2YoVUNoYXIpICogKG15U3RybGVuKzEpICk7CisgKiAgICAg
IHVkYXRfZm9ybWF0KGRmbXQsIG15RGF0ZSwgbXlTdHJpbmcsIG15U3RybGVuKzEsIE5VTEwsICZz
dGF0dXMpOworICogIH0KKyAqIFxlbmRjb2RlCisgKiA8L3ByZT4KKyAqIElmIHlvdSBhcmUgZm9y
bWF0dGluZyBtdWx0aXBsZSBudW1iZXJzLCBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBnZXQgdGhl
CisgKiBmb3JtYXQgYW5kIHVzZSBpdCBtdWx0aXBsZSB0aW1lcyBzbyB0aGF0IHRoZSBzeXN0ZW0g
ZG9lc24ndCBoYXZlIHRvIGZldGNoIHRoZQorICogaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxvY2Fs
IGxhbmd1YWdlIGFuZCBjb3VudHJ5IGNvbnZlbnRpb25zIG11bHRpcGxlIHRpbWVzLgorICogPHBy
ZT4KKyAqIFxjb2RlCisgKiAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgKiAg
aW50MzJfdCBpLCBteVN0cmxlbiA9IDA7CisgKiAgVUNoYXIqIG15U3RyaW5nOworICogIGNoYXIg
YnVmZmVyWzEwMjRdOworICogIFVEYXRlIG15RGF0ZUFycltdID0geyAwLjAsIDEwMDAwMDAwMC4w
LCAyMDAwMDAwMDAwLjAgfTsgLy8gdGVzdCB2YWx1ZXMKKyAqICBVRGF0ZUZvcm1hdCogZGYgPSB1
ZGF0X29wZW4oVURBVF9ERUZBVUxULCBVREFUX0RFRkFVTFQsIE5VTEwsIE5VTEwsIC0xLCBOVUxM
LCAwLCAmc3RhdHVzKTsKKyAqICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgKiAgICAgIG15
U3RybGVuID0gdWRhdF9mb3JtYXQoZGYsIG15RGF0ZUFycltpXSwgTlVMTCwgbXlTdHJsZW4sIE5V
TEwsICZzdGF0dXMpOworICogICAgICBpZihzdGF0dXMgPT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJS
T1IpeworICogICAgICAgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICogICAgICAgICAgbXlT
dHJpbmcgPSAoVUNoYXIqKW1hbGxvYyhzaXplb2YoVUNoYXIpICogKG15U3RybGVuKzEpICk7Cisg
KiAgICAgICAgICB1ZGF0X2Zvcm1hdChkZiwgbXlEYXRlQXJyW2ldLCBteVN0cmluZywgbXlTdHJs
ZW4rMSwgTlVMTCwgJnN0YXR1cyk7CisgKiAgICAgICAgICBwcmludGYoIiVzXG4iLCB1X2F1c3Ry
Y3B5KGJ1ZmZlciwgbXlTdHJpbmcpICk7CisgKiAgICAgICAgICBmcmVlKG15U3RyaW5nKTsKKyAq
ICAgICAgfQorICogIH0KKyAqIFxlbmRjb2RlCisgKiA8L3ByZT4KKyAqIFRvIGdldCBzcGVjaWZp
YyBmaWVsZHMgb2YgYSBkYXRlLCB5b3UgY2FuIHVzZSBVRmllbGRQb3NpdGlvbiB0bworICogZ2V0
IHNwZWNpZmljIGZpZWxkcy4KKyAqIDxwcmU+CisgKiBcY29kZQorICogIFVFcnJvckNvZGUgc3Rh
dHVzID0gVV9aRVJPX0VSUk9SOworICogIFVGaWVsZFBvc2l0aW9uIHBvczsKKyAqICBVQ2hhciAq
bXlTdHJpbmc7CisgKiAgaW50MzJfdCBteVN0cmxlbiA9IDA7CisgKiAgY2hhciBidWZmZXJbMTAy
NF07CisgKgorICogIHBvcy5maWVsZCA9IDE7ICAvLyBTYW1lIGFzIHRoZSBEYXRlRm9ybWF0OjpF
RmllbGQgZW51bQorICogIFVEYXRlRm9ybWF0KiBkZm10ID0gdWRhdF9vcGVuKFVEQVRfREVGQVVM
VCwgVURBVF9ERUZBVUxULCBOVUxMLCAtMSwgTlVMTCwgMCwgJnN0YXR1cyk7CisgKiAgbXlTdHJs
ZW4gPSB1ZGF0X2Zvcm1hdChkZm10LCBteURhdGUsIE5VTEwsIG15U3RybGVuLCAmcG9zLCAmc3Rh
dHVzKTsKKyAqICBpZiAoc3RhdHVzPT1VX0JVRkZFUl9PVkVSRkxPV19FUlJPUil7CisgKiAgICAg
IHN0YXR1cz1VX1pFUk9fRVJST1I7CisgKiAgICAgIG15U3RyaW5nPShVQ2hhciopbWFsbG9jKHNp
emVvZihVQ2hhcikgKiAobXlTdHJsZW4rMSkgKTsKKyAqICAgICAgdWRhdF9mb3JtYXQoZGZtdCwg
bXlEYXRlLCBteVN0cmluZywgbXlTdHJsZW4rMSwgJnBvcywgJnN0YXR1cyk7CisgKiAgfQorICog
IHByaW50ZigiZGF0ZSBmb3JtYXQ6ICVzXG4iLCB1X2F1c3RyY3B5KGJ1ZmZlciwgbXlTdHJpbmcp
KTsKKyAqICBidWZmZXJbcG9zLmVuZEluZGV4XSA9IDA7ICAgLy8gTlVMTCB0ZXJtaW5hdGUgdGhl
IHN0cmluZy4KKyAqICBwcmludGYoIlVGaWVsZFBvc2l0aW9uIHBvc2l0aW9uIGVxdWFscyAlc1xu
IiwgJmJ1ZmZlcltwb3MuYmVnaW5JbmRleF0pOworICogXGVuZGNvZGUKKyAqIDwvcHJlPgorICog
VG8gZm9ybWF0IGEgZGF0ZSBmb3IgYSBkaWZmZXJlbnQgTG9jYWxlLCBzcGVjaWZ5IGl0IGluIHRo
ZSBjYWxsIHRvCisgKiB1ZGF0X29wZW4oKQorICogPHByZT4KKyAqIFxjb2RlCisgKiAgICAgICAg
VURhdGVGb3JtYXQqIGRmID0gdWRhdF9vcGVuKFVEQVRfU0hPUlQsIFVEQVRfU0hPUlQsICJmcl9G
UiIsIE5VTEwsIC0xLCBOVUxMLCAwLCAmc3RhdHVzKTsKKyAqIFxlbmRjb2RlCisgKiA8L3ByZT4K
KyAqIFlvdSBjYW4gdXNlIGEgRGF0ZUZvcm1hdCBBUEkgdWRhdF9wYXJzZSgpIHRvIHBhcnNlLgor
ICogPHByZT4KKyAqIFxjb2RlCisgKiAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7
CisgKiAgaW50MzJfdCBwYXJzZXBvcz0wOworICogIFVEYXRlIG15RGF0ZSA9IHVkYXRfcGFyc2Uo
ZGYsIG15U3RyaW5nLCB1X3N0cmxlbihteVN0cmluZyksICZwYXJzZXBvcywgJnN0YXR1cyk7Cisg
KiBcZW5kY29kZQorICogPC9wcmU+CisgKiAgWW91IGNhbiBwYXNzIGluIGRpZmZlcmVudCBvcHRp
b25zIGZvciB0aGUgYXJndW1lbnRzIGZvciBkYXRlIGFuZCB0aW1lIHN0eWxlCisgKiAgdG8gY29u
dHJvbCB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQ7IGZyb20gU0hPUlQgdG8gTUVESVVNIHRvIExP
TkcgdG8gRlVMTC4KKyAqICBUaGUgZXhhY3QgcmVzdWx0IGRlcGVuZHMgb24gdGhlIGxvY2FsZSwg
YnV0IGdlbmVyYWxseToKKyAqICBzZWUgVURhdGVGb3JtYXRTdHlsZSBmb3IgbW9yZSBkZXRhaWxz
CisgKiA8dWwgdHlwZT1yb3VuZD4KKyAqICAgPGxpPiAgIFVEQVRfU0hPUlQgaXMgY29tcGxldGVs
eSBudW1lcmljLCBzdWNoIGFzIDEyLzEzLzUyIG9yIDM6MzBwbQorICogICA8bGk+ICAgVURBVF9N
RURJVU0gaXMgbG9uZ2VyLCBzdWNoIGFzIEphbiAxMiwgMTk1MgorICogICA8bGk+ICAgVURBVF9M
T05HIGlzIGxvbmdlciwgc3VjaCBhcyBKYW51YXJ5IDEyLCAxOTUyIG9yIDM6MzA6MzJwbQorICog
ICA8bGk+ICAgVURBVF9GVUxMIGlzIHByZXR0eSBjb21wbGV0ZWx5IHNwZWNpZmllZCwgc3VjaCBh
cworICogICAgICAgICAgVHVlc2RheSwgQXByaWwgMTIsIDE5NTIgQUQgb3IgMzozMDo0MnBtIFBT
VC4KKyAqIDwvdWw+CisgKiBZb3UgY2FuIGFsc28gc2V0IHRoZSB0aW1lIHpvbmUgb24gdGhlIGZv
cm1hdCBpZiB5b3Ugd2lzaC4KKyAqIDxQPgorICogWW91IGNhbiBhbHNvIHVzZSBmb3JtcyBvZiB0
aGUgcGFyc2UgYW5kIGZvcm1hdCBtZXRob2RzIHdpdGggUGFyc2UgUG9zaXRpb24gYW5kCisgKiBV
RmllbGRQb3NpdGlvbiB0byBhbGxvdyB5b3UgdG8KKyAqIDx1bCB0eXBlPXJvdW5kPgorICogICA8
bGk+ICAgUHJvZ3Jlc3NpdmVseSBwYXJzZSB0aHJvdWdoIHBpZWNlcyBvZiBhIHN0cmluZy4KKyAq
ICAgPGxpPiAgIEFsaWduIGFueSBwYXJ0aWN1bGFyIGZpZWxkLCBvciBmaW5kIG91dCB3aGVyZSBp
dCBpcyBmb3Igc2VsZWN0aW9uCisgKiAgICAgICAgICBvbiB0aGUgc2NyZWVuLgorICogPC91bD4K
KyAqLworCisvKiogQSBkYXRlIGZvcm1hdHRlci4KKyAqICBGb3IgdXNhZ2UgaW4gQyBwcm9ncmFt
cy4KKyAqICBAc3RhYmxlIElDVSAyLjYKKyAqLwordHlwZWRlZiB2b2lkKiBVRGF0ZUZvcm1hdDsK
KworLyoqIFRoZSBwb3NzaWJsZSBkYXRlL3RpbWUgZm9ybWF0IHN0eWxlcyAKKyAqICBAc3RhYmxl
IElDVSAyLjYKKyAqLwordHlwZWRlZiBlbnVtIFVEYXRlRm9ybWF0U3R5bGUgeworICAgIC8qKiBG
dWxsIHN0eWxlICovCisgICAgVURBVF9GVUxMLAorICAgIC8qKiBMb25nIHN0eWxlICovCisgICAg
VURBVF9MT05HLAorICAgIC8qKiBNZWRpdW0gc3R5bGUgKi8KKyAgICBVREFUX01FRElVTSwKKyAg
ICAvKiogU2hvcnQgc3R5bGUgKi8KKyAgICBVREFUX1NIT1JULAorICAgIC8qKiBEZWZhdWx0IHN0
eWxlICovCisgICAgVURBVF9ERUZBVUxUID0gVURBVF9NRURJVU0sCisKKyAgICAvKiogQml0Zmll
bGQgZm9yIHJlbGF0aXZlIGRhdGUgKi8KKyAgICBVREFUX1JFTEFUSVZFID0gKDEgPDwgNyksCisg
ICAgCisgICAgVURBVF9GVUxMX1JFTEFUSVZFID0gVURBVF9GVUxMIHwgVURBVF9SRUxBVElWRSwK
KyAgICAgICAgCisgICAgVURBVF9MT05HX1JFTEFUSVZFID0gVURBVF9MT05HIHwgVURBVF9SRUxB
VElWRSwKKyAgICAKKyAgICBVREFUX01FRElVTV9SRUxBVElWRSA9IFVEQVRfTUVESVVNIHwgVURB
VF9SRUxBVElWRSwKKyAgICAKKyAgICBVREFUX1NIT1JUX1JFTEFUSVZFID0gVURBVF9TSE9SVCB8
IFVEQVRfUkVMQVRJVkUsCisgICAgCisgICAgCisgICAgLyoqIE5vIHN0eWxlICovCisgICAgVURB
VF9OT05FID0gLTEsCisgICAgLyoqIGZvciBpbnRlcm5hbCBBUEkgdXNlIG9ubHkgKi8KKyAgICBV
REFUX0lHTk9SRSA9IC0yCisKK30gVURhdGVGb3JtYXRTdHlsZTsKKworCisvKioKKyAqIEB7Cisg
KiBCZWxvdyBhcmUgYSBzZXQgb2YgcHJlLWRlZmluZWQgc2tlbGV0b25zLgorICoKKyAqIDxQPgor
ICogQSBza2VsZXRvbiAKKyAqIDxvbD4KKyAqIDxsaT4KKyAqICAgIG9ubHkga2VlcHMgdGhlIGZp
ZWxkIHBhdHRlcm4gbGV0dGVyIGFuZCBpZ25vcmVzIGFsbCBvdGhlciBwYXJ0cyAKKyAqICAgIGlu
IGEgcGF0dGVybiwgc3VjaCBhcyBzcGFjZSwgcHVuY3R1YXRpb25zLCBhbmQgc3RyaW5nIGxpdGVy
YWxzLgorICogPC9saT4KKyAqIDxsaT4KKyAqICAgIGhpZGVzIHRoZSBvcmRlciBvZiBmaWVsZHMu
IAorICogPC9saT4KKyAqIDxsaT4KKyAqICAgIG1pZ2h0IGhpZGUgYSBmaWVsZCdzIHBhdHRlcm4g
bGV0dGVyIGxlbmd0aC4KKyAqCisgKiAgICBGb3IgdGhvc2Ugbm9uLWRpZ2l0IGNhbGVuZGFyIGZp
ZWxkcywgdGhlIHBhdHRlcm4gbGV0dGVyIGxlbmd0aCBpcyAKKyAqICAgIGltcG9ydGFudCwgc3Vj
aCBhcyBNTU0sIE1NTU0sIGFuZCBNTU1NTTsgRUVFIGFuZCBFRUVFLCAKKyAqICAgIGFuZCB0aGUg
ZmllbGQncyBwYXR0ZXJuIGxldHRlciBsZW5ndGggaXMgaG9ub3JlZC4KKyAqICAgIAorICogICAg
Rm9yIHRoZSBkaWdpdCBjYWxlbmRhciBmaWVsZHMsICBzdWNoIGFzIE0gb3IgTU0sIGQgb3IgZGQs
IHl5IG9yIHl5eXksIAorICogICAgdGhlIGZpZWxkIHBhdHRlcm4gbGVuZ3RoIGlzIGlnbm9yZWQg
YW5kIHRoZSBiZXN0IG1hdGNoLCB3aGljaCBpcyBkZWZpbmVkIAorICogICAgaW4gZGF0ZSB0aW1l
IHBhdHRlcm5zLCB3aWxsIGJlIHJldHVybmVkIHdpdGhvdXQgaG9ub3IgdGhlIGZpZWxkIHBhdHRl
cm4KKyAqICAgIGxldHRlciBsZW5ndGggaW4gc2tlbGV0b24uCisgKiA8L2xpPgorICogPC9vbD4K
KyAqCisgKiBAc3RhYmxlIElDVSA0LjAKKyAqLworCisjZGVmaW5lIFVEQVRfTUlOVVRFX1NFQ09O
RCAgICAgICAgICAgICAgIm1zIgorI2RlZmluZSBVREFUX0hPVVIyNF9NSU5VVEUgICAgICAgICAg
ICAgICJIbSIKKyNkZWZpbmUgVURBVF9IT1VSMjRfTUlOVVRFX1NFQ09ORCAgICAgICAiSG1zIiAg
ICAgIAorI2RlZmluZSBVREFUX0hPVVJfTUlOVVRFX1NFQ09ORCAgICAgICAgICJobXMiCisjZGVm
aW5lIFVEQVRfU1RBTkRBTE9ORV9NT05USCAgICAgICAgICAgIkxMTEwiCisjZGVmaW5lIFVEQVRf
QUJCUl9TVEFOREFMT05FX01PTlRIICAgICAgIkxMTCIKKyNkZWZpbmUgVURBVF9ZRUFSX1FVQVJU
RVIgICAgICAgICAgICAgICAieVFRUSIKKyNkZWZpbmUgVURBVF9ZRUFSX0FCQlJfUVVBUlRFUiAg
ICAgICAgICAieVEiCisKKy8qKiBAfSAqLworCisvKioKKyAqIEB7CisgKiBCZWxvdyBhcmUgYSBz
ZXQgb2YgcHJlLWRlZmluZWQgc2tlbGV0b25zIHRoYXQgCisgKiBoYXZlIHByZS1kZWZpbmVkIGlu
dGVydmFsIHBhdHRlcm5zIGluIHJlc291cmNlIGZpbGVzLgorICogVXNlcnMgYXJlIGVuY291cmFn
ZWQgdG8gdXNlIHRoZW0gaW4gZGF0ZSBpbnRlcnZhbCBmb3JtYXQgZmFjdG9yeSBtZXRob2RzLgor
ICogCisgKiBAc3RhYmxlIElDVSA0LjAKKyAqLworI2RlZmluZSBVREFUX0hPVVJfTUlOVVRFICAg
ICAgICAgICAgICAgICJobSIKKyNkZWZpbmUgVURBVF9ZRUFSICAgICAgICAgICAgICAgICAgICAg
ICAieSIKKyNkZWZpbmUgVURBVF9EQVkgICAgICAgICAgICAgICAgICAgICAgICAiZCIKKyNkZWZp
bmUgVURBVF9OVU1fTU9OVEhfV0VFS0RBWV9EQVkgICAgICAiTUVkIgorI2RlZmluZSBVREFUX1lF
QVJfTlVNX01PTlRIICAgICAgICAgICAgICJ5TSIgICAgICAgICAgICAgIAorI2RlZmluZSBVREFU
X05VTV9NT05USF9EQVkgICAgICAgICAgICAgICJNZCIKKyNkZWZpbmUgVURBVF9ZRUFSX05VTV9N
T05USF9XRUVLREFZX0RBWSAieU1FZCIKKyNkZWZpbmUgVURBVF9BQkJSX01PTlRIX1dFRUtEQVlf
REFZICAgICAiTU1NRWQiCisjZGVmaW5lIFVEQVRfWUVBUl9NT05USCAgICAgICAgICAgICAgICAg
InlNTU1NIgorI2RlZmluZSBVREFUX1lFQVJfQUJCUl9NT05USCAgICAgICAgICAgICJ5TU1NIgor
I2RlZmluZSBVREFUX01PTlRIX0RBWSAgICAgICAgICAgICAgICAgICJNTU1NZCIKKyNkZWZpbmUg
VURBVF9BQkJSX01PTlRIX0RBWSAgICAgICAgICAgICAiTU1NZCIgCisjZGVmaW5lIFVEQVRfTU9O
VEhfV0VFS0RBWV9EQVkgICAgICAgICAgIk1NTU1FRUVFZCIKKyNkZWZpbmUgVURBVF9ZRUFSX0FC
QlJfTU9OVEhfV0VFS0RBWV9EQVkgInlNTU1FZCIgCisjZGVmaW5lIFVEQVRfWUVBUl9NT05USF9X
RUVLREFZX0RBWSAgICAgInlNTU1NRUVFRWQiCisjZGVmaW5lIFVEQVRfWUVBUl9NT05USF9EQVkg
ICAgICAgICAgICAgInlNTU1NZCIKKyNkZWZpbmUgVURBVF9ZRUFSX0FCQlJfTU9OVEhfREFZICAg
ICAgICAieU1NTWQiCisjZGVmaW5lIFVEQVRfWUVBUl9OVU1fTU9OVEhfREFZICAgICAgICAgInlN
ZCIKKyNkZWZpbmUgVURBVF9OVU1fTU9OVEggICAgICAgICAgICAgICAgICAiTSIKKyNkZWZpbmUg
VURBVF9BQkJSX01PTlRIICAgICAgICAgICAgICAgICAiTU1NIgorI2RlZmluZSBVREFUX01PTlRI
ICAgICAgICAgICAgICAgICAgICAgICJNTU1NIgorI2RlZmluZSBVREFUX0hPVVJfTUlOVVRFX0dF
TkVSSUNfVFogICAgICJobXYiCisjZGVmaW5lIFVEQVRfSE9VUl9NSU5VVEVfVFogICAgICAgICAg
ICAgImhteiIKKyNkZWZpbmUgVURBVF9IT1VSICAgICAgICAgICAgICAgICAgICAgICAiaCIKKyNk
ZWZpbmUgVURBVF9IT1VSX0dFTkVSSUNfVFogICAgICAgICAgICAiaHYiCisjZGVmaW5lIFVEQVRf
SE9VUl9UWiAgICAgICAgICAgICAgICAgICAgImh6IgorCisvKiogQH0gKi8KKworCisvKioKKyAq
IEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9ycyBmb3IgZm9ybWF0IGZp
ZWxkcworICogZGVmaW5lZCBieSBEYXRlRm9ybWF0IGFuZCBVRGF0ZUZvcm1hdC4KKyAqIEBzdGFi
bGUgSUNVIDMuMAorICovCit0eXBlZGVmIGVudW0gVURhdGVGb3JtYXRGaWVsZCB7CisgICAgLyoq
CisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdH
JyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9FUkEg
ZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9FUkFfRklF
TEQgPSAwLAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRp
b24gc2VsZWN0b3IgZm9yICd5JyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGlu
ZyB0byB0aGUgVUNBTF9ZRUFSIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAq
LworICAgIFVEQVRfWUVBUl9GSUVMRCA9IDEsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0
aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ00nIGZpZWxkIGFsaWdubWVudCwK
KyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX01PTlRIIGZpZWxkLgorICAgICAqIEBz
dGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfTU9OVEhfRklFTEQgPSAyLAorCisgICAg
LyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9y
ICdkJyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9E
QVRFIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfREFU
RV9GSUVMRCA9IDMsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQ
b3NpdGlvbiBzZWxlY3RvciBmb3IgJ2snIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNw
b25kaW5nIHRvIHRoZSBVQ0FMX0hPVVJfT0ZfREFZIGZpZWxkLgorICAgICAqIFVEQVRfSE9VUl9P
Rl9EQVkxX0ZJRUxEIGlzIHVzZWQgZm9yIHRoZSBvbmUtYmFzZWQgMjQtaG91ciBjbG9jay4KKyAg
ICAgKiBGb3IgZXhhbXBsZSwgMjM6NTkgKyAwMTowMCByZXN1bHRzIGluIDI0OjU5LgorICAgICAq
IEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfSE9VUl9PRl9EQVkxX0ZJRUxEID0g
NCwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNl
bGVjdG9yIGZvciAnSCcgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8g
dGhlIFVDQUxfSE9VUl9PRl9EQVkgZmllbGQuCisgICAgICogVURBVF9IT1VSX09GX0RBWTBfRklF
TEQgaXMgdXNlZCBmb3IgdGhlIHplcm8tYmFzZWQgMjQtaG91ciBjbG9jay4KKyAgICAgKiBGb3Ig
ZXhhbXBsZSwgMjM6NTkgKyAwMTowMCByZXN1bHRzIGluIDAwOjU5LgorICAgICAqIEBzdGFibGUg
SUNVIDMuMAorICAgICAqLworICAgIFVEQVRfSE9VUl9PRl9EQVkwX0ZJRUxEID0gNSwKKworICAg
IC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZv
ciAnbScgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxf
TUlOVVRFIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRf
TUlOVVRFX0ZJRUxEID0gNiwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVG
aWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAncycgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNv
cnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfU0VDT05EIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNV
IDMuMAorICAgICAqLworICAgIFVEQVRfU0VDT05EX0ZJRUxEID0gNywKKworICAgIC8qKgorICAg
ICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnUycgZmll
bGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfTUlMTElTRUNP
TkQgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9GUkFD
VElPTkFMX1NFQ09ORF9GSUVMRCA9IDgsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9u
IGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ0UnIGZpZWxkIGFsaWdubWVudCwKKyAg
ICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0RBWV9PRl9XRUVLIGZpZWxkLgorICAgICAq
IEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfREFZX09GX1dFRUtfRklFTEQgPSA5
LAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2Vs
ZWN0b3IgZm9yICdEJyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0
aGUgVUNBTF9EQVlfT0ZfWUVBUiBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAg
Ki8KKyAgICBVREFUX0RBWV9PRl9ZRUFSX0ZJRUxEID0gMTAsCisKKyAgICAvKioKKyAgICAgKiBG
aWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ0YnIGZpZWxkIGFs
aWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0RBWV9PRl9XRUVLX0lO
X01PTlRIIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRf
REFZX09GX1dFRUtfSU5fTU9OVEhfRklFTEQgPSAxMSwKKworICAgIC8qKgorICAgICAqIEZpZWxk
UG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAndycgZmllbGQgYWxpZ25t
ZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfV0VFS19PRl9ZRUFSIGZpZWxk
LgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfV0VFS19PRl9ZRUFS
X0ZJRUxEID0gMTIsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQ
b3NpdGlvbiBzZWxlY3RvciBmb3IgJ1cnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNw
b25kaW5nIHRvIHRoZSBVQ0FMX1dFRUtfT0ZfTU9OVEggZmllbGQuCisgICAgICogQHN0YWJsZSBJ
Q1UgMy4wCisgICAgICovCisgICAgVURBVF9XRUVLX09GX01PTlRIX0ZJRUxEID0gMTMsCisKKyAg
ICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBm
b3IgJ2EnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FM
X0FNX1BNIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRf
QU1fUE1fRklFTEQgPSAxNCwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVG
aWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnaCcgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNv
cnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfSE9VUiBmaWVsZC4KKyAgICAgKiBVREFUX0hPVVIxX0ZJ
RUxEIGlzIHVzZWQgZm9yIHRoZSBvbmUtYmFzZWQgMTItaG91ciBjbG9jay4KKyAgICAgKiBGb3Ig
ZXhhbXBsZSwgMTE6MzAgUE0gKyAxIGhvdXIgcmVzdWx0cyBpbiAxMjozMCBBTS4KKyAgICAgKiBA
c3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFUX0hPVVIxX0ZJRUxEID0gMTUsCisKKyAg
ICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBm
b3IgJ0snIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FM
X0hPVVIgZmllbGQuCisgICAgICogVURBVF9IT1VSMF9GSUVMRCBpcyB1c2VkIGZvciB0aGUgemVy
by1iYXNlZCAxMi1ob3VyIGNsb2NrLgorICAgICAqIEZvciBleGFtcGxlLCAxMTozMCBQTSArIDEg
aG91ciByZXN1bHRzIGluIDAwOjMwIEFNLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAq
LworICAgIFVEQVRfSE9VUjBfRklFTEQgPSAxNiwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9z
aXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAneicgZmllbGQgYWxpZ25tZW50
LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfWk9ORV9PRkZTRVQgYW5kCisgICAg
ICogVUNBTF9EU1RfT0ZGU0VUIGZpZWxkcy4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAg
Ki8KKyAgICBVREFUX1RJTUVaT05FX0ZJRUxEID0gMTcsCisKKyAgICAvKioKKyAgICAgKiBGaWVs
ZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ1knIGZpZWxkIGFsaWdu
bWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX1lFQVJfV09ZIGZpZWxkLgor
ICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfWUVBUl9XT1lfRklFTEQg
PSAxOCwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9u
IHNlbGVjdG9yIGZvciAnZScgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcg
dG8gdGhlIFVDQUxfRE9XX0xPQ0FMIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAg
ICAqLworICAgIFVEQVRfRE9XX0xPQ0FMX0ZJRUxEID0gMTksCisKKyAgICAvKioKKyAgICAgKiBG
aWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ3UnIGZpZWxkIGFs
aWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0VYVEVOREVEX1lFQVIg
ZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9FWFRFTkRF
RF9ZRUFSX0ZJRUxEID0gMjAsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBV
RmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ2cnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBj
b3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0pVTElBTl9EQVkgZmllbGQuCisgICAgICogQHN0YWJs
ZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9KVUxJQU5fREFZX0ZJRUxEID0gMjEsCisKKyAg
ICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBm
b3IgJ0EnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FM
X01JTExJU0VDT05EU19JTl9EQVkgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAg
ICovCisgICAgVURBVF9NSUxMSVNFQ09ORFNfSU5fREFZX0ZJRUxEID0gMjIsCisKKyAgICAvKioK
KyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ1on
IGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX1pPTkVf
T0ZGU0VUIGFuZAorICAgICAqIFVDQUxfRFNUX09GRlNFVCBmaWVsZHMuCisgICAgICogQHN0YWJs
ZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9USU1FWk9ORV9SRkNfRklFTEQgPSAyMywKKwor
ICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9y
IGZvciAndicgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVD
QUxfWk9ORV9PRkZTRVQgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy40CisgICAgICovCisg
ICAgVURBVF9USU1FWk9ORV9HRU5FUklDX0ZJRUxEID0gMjQsCisgICAgLyoqCisgICAgICogRmll
bGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ2MnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3Jy
ZXNwb25kaW5nIHRvIHRoZSB7QGxpbmsgI1VDQUxfRE9XX0xPQ0FMfSBmaWVsZC4KKyAgICAgKiBU
aGlzIGRpc3BsYXlzIHRoZSBzdGFuZCBhbG9uZSBkYXkgbmFtZSwgaWYgYXZhaWxhYmxlLgorICAg
ICAqIEBzdGFibGUgSUNVIDMuNAorICAgICAqLworICAgIFVEQVRfU1RBTkRBTE9ORV9EQVlfRklF
TEQgPSAyNSwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdM
JyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUge0BsaW5rICNV
Q0FMX01PTlRIfSBmaWVsZC4KKyAgICAgKiBUaGlzIGRpc3BsYXlzIHRoZSBzdGFuZCBhbG9uZSBt
b250aCBuYW1lLCBpZiBhdmFpbGFibGUuCisgICAgICogQHN0YWJsZSBJQ1UgMy40CisgICAgICov
CisgICAgVURBVF9TVEFOREFMT05FX01PTlRIX0ZJRUxEID0gMjYsCisKKyAgICAvKioKKyAgICAg
KiBGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAiUSIgZmllbGQgYWxpZ25tZW50LAorICAgICAq
IGNvcnJlc3BvbmRpbmcgdG8gcXVhcnRlcnMuIFRoaXMgaXMgaW1wbGVtZW50ZWQKKyAgICAgKiB1
c2luZyB0aGUge0BsaW5rICNVQ0FMX01PTlRIfSBmaWVsZC4gVGhpcworICAgICAqIGRpc3BsYXlz
IHRoZSBxdWFydGVyLgorICAgICAqIEBzdGFibGUgSUNVIDMuNgorICAgICAqLworICAgIFVEQVRf
UVVBUlRFUl9GSUVMRCA9IDI3LAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBzZWxl
Y3RvciBmb3IgdGhlICJxIiBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0
byBzdGFuZC1hbG9uZSBxdWFydGVycy4gVGhpcyBpcworICAgICAqIGltcGxlbWVudGVkIHVzaW5n
IHRoZSB7QGxpbmsgI1VDQUxfTU9OVEh9IGZpZWxkLgorICAgICAqIFRoaXMgZGlzcGxheXMgdGhl
IHN0YW5kLWFsb25lIHF1YXJ0ZXIuCisgICAgICogQHN0YWJsZSBJQ1UgMy42CisgICAgICovCisg
ICAgVURBVF9TVEFOREFMT05FX1FVQVJURVJfRklFTEQgPSAyOCwKKworICAgIC8qKgorICAgICAq
IEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnVicgZmllbGQg
YWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfWk9ORV9PRkZTRVQg
ZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy44CisgICAgICovCisgICAgVURBVF9USU1FWk9O
RV9TUEVDSUFMX0ZJRUxEID0gMjksCisKKyAgIC8qKgorICAgICAqIE51bWJlciBvZiBGaWVsZFBv
c2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvcnMgZm9yCisgICAgICogRGF0ZUZvcm1h
dCBhbmQgVURhdGVGb3JtYXQuCisgICAgICogVmFsaWQgc2VsZWN0b3JzIHJhbmdlIGZyb20gMCB0
byBVREFUX0ZJRUxEX0NPVU5ULTEuCisgICAgICogVGhpcyB2YWx1ZSBpcyBzdWJqZWN0IHRvIGNo
YW5nZSBpZiBuZXcgZmllbGRzIGFyZSBkZWZpbmVkCisgICAgICogaW4gdGhlIGZ1dHVyZS4KKyAg
ICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFUX0ZJRUxEX0NPVU5UID0gMzAK
KworfSBVRGF0ZUZvcm1hdEZpZWxkOworCisKKy8qKgorICogTWFwcyBmcm9tIGEgVURhdGVGb3Jt
YXRGaWVsZCB0byB0aGUgY29ycmVzcG9uZGluZyBVQ2FsZW5kYXJEYXRlRmllbGRzLgorICogTm90
ZTogc2luY2UgdGhlIG1hcHBpbmcgaXMgbWFueS10by1vbmUsIHRoZXJlIGlzIG5vIGludmVyc2Ug
bWFwcGluZy4KKyAqIEBwYXJhbSBmaWVsZCB0aGUgVURhdGVGb3JtYXRGaWVsZC4KKyAqIEByZXR1
cm4gdGhlIFVDYWxlbmRhckRhdGVGaWVsZC4gIFRoaXMgd2lsbCBiZSBVQ0FMX0ZJRUxEX0NPVU5U
IGluIGNhc2UKKyAqIG9mIGVycm9yIChlLmcuLCB0aGUgaW5wdXQgZmllbGQgaXMgVURBVF9GSUVM
RF9DT1VOVCkuCisgKiBAc3RhYmxlIElDVSA0LjQKKyAqLworVV9TVEFCTEUgVUNhbGVuZGFyRGF0
ZUZpZWxkcyBVX0VYUE9SVDIKK3VkYXRfdG9DYWxlbmRhckRhdGVGaWVsZChVRGF0ZUZvcm1hdEZp
ZWxkIGZpZWxkKTsKKworCisvKioKKyAqIE9wZW4gYSBuZXcgVURhdGVGb3JtYXQgZm9yIGZvcm1h
dHRpbmcgYW5kIHBhcnNpbmcgZGF0ZXMgYW5kIHRpbWVzLgorICogQSBVRGF0ZUZvcm1hdCBtYXkg
YmUgdXNlZCB0byBmb3JtYXQgZGF0ZXMgaW4gY2FsbHMgdG8ge0BsaW5rICN1ZGF0X2Zvcm1hdCB9
LAorICogYW5kIHRvIHBhcnNlIGRhdGVzIGluIGNhbGxzIHRvIHtAbGluayAjdWRhdF9wYXJzZSB9
LgorICogQHBhcmFtIHRpbWVTdHlsZSBUaGUgc3R5bGUgdXNlZCB0byBmb3JtYXQgdGltZXM7IG9u
ZSBvZiBVREFUX0ZVTEwsIFVEQVRfTE9ORywKKyAqIFVEQVRfTUVESVVNLCBVREFUX1NIT1JULCBV
REFUX0RFRkFVTFQsIG9yIFVEQVRfTk9ORSAocmVsYXRpdmUgdGltZSBzdHlsZXMKKyAqIGFyZSBu
b3QgY3VycmVudGx5IHN1cHBvcnRlZCkKKyAqIEBwYXJhbSBkYXRlU3R5bGUgVGhlIHN0eWxlIHVz
ZWQgdG8gZm9ybWF0IGRhdGVzOyBvbmUgb2YgVURBVF9GVUxMLCBVREFUX0xPTkcsCisgKiBVREFU
X01FRElVTSwgVURBVF9TSE9SVCwgVURBVF9ERUZBVUxULCBVREFUX0ZVTExfUkVMQVRJVkUsIFVE
QVRfTE9OR19SRUxBVElWRSwKKyAqIFVEQVRfTUVESVVNX1JFTEFUSVZFLCBVREFUX1NIT1JUX1JF
TEFUSVZFLCBvciBVREFUX05PTkUKKyAqIEBwYXJhbSBsb2NhbGUgVGhlIGxvY2FsZSBzcGVjaWZ5
aW5nIHRoZSBmb3JtYXR0aW5nIGNvbnZlbnRpb25zCisgKiBAcGFyYW0gdHpJRCBBIHRpbWV6b25l
IElEIHNwZWNpZnlpbmcgdGhlIHRpbWV6b25lIHRvIHVzZS4gIElmIDAsIHVzZQorICogdGhlIGRl
ZmF1bHQgdGltZXpvbmUuCisgKiBAcGFyYW0gdHpJRExlbmd0aCBUaGUgbGVuZ3RoIG9mIHR6SUQs
IG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyAqIEBwYXJhbSBwYXR0ZXJuIEEgcGF0dGVybiBz
cGVjaWZ5aW5nIHRoZSBmb3JtYXQgdG8gdXNlLgorICogQHBhcmFtIHBhdHRlcm5MZW5ndGggVGhl
IG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuLCBvciAtMSBpZiBudWxsLXRlcm1p
bmF0ZWQuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJl
Y2VpdmUgYW55IGVycm9ycworICogQHJldHVybiBBIHBvaW50ZXIgdG8gYSBVRGF0ZUZvcm1hdCB0
byB1c2UgZm9yIGZvcm1hdHRpbmcgZGF0ZXMgYW5kIHRpbWVzLCBvciAwIGlmCisgKiBhbiBlcnJv
ciBvY2N1cnJlZC4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBVRGF0ZUZvcm1h
dCogVV9FWFBPUlQyIAordWRhdF9vcGVuKFVEYXRlRm9ybWF0U3R5bGUgIHRpbWVTdHlsZSwKKyAg
ICAgICAgICBVRGF0ZUZvcm1hdFN0eWxlICBkYXRlU3R5bGUsCisgICAgICAgICAgY29uc3QgY2hh
ciAgICAgICAgKmxvY2FsZSwKKyAgICAgICAgICBjb25zdCBVQ2hhciAgICAgICAqdHpJRCwKKyAg
ICAgICAgICBpbnQzMl90ICAgICAgICAgICB0eklETGVuZ3RoLAorICAgICAgICAgIGNvbnN0IFVD
aGFyICAgICAgICpwYXR0ZXJuLAorICAgICAgICAgIGludDMyX3QgICAgICAgICAgIHBhdHRlcm5M
ZW5ndGgsCisgICAgICAgICAgVUVycm9yQ29kZSAgICAgICAgKnN0YXR1cyk7CisKKworLyoqCisq
IENsb3NlIGEgVURhdGVGb3JtYXQuCisqIE9uY2UgY2xvc2VkLCBhIFVEYXRlRm9ybWF0IG1heSBu
byBsb25nZXIgYmUgdXNlZC4KKyogQHBhcmFtIGZvcm1hdCBUaGUgZm9ybWF0dGVyIHRvIGNsb3Nl
LgorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VkYXRf
Y2xvc2UoVURhdGVGb3JtYXQqIGZvcm1hdCk7CisKKyNpZiBVX1NIT1dfQ1BMVVNQTFVTX0FQSQor
CitVX05BTUVTUEFDRV9CRUdJTgorCisvKioKKyAqIFxjbGFzcyBMb2NhbFVEYXRlRm9ybWF0UG9p
bnRlcgorICogIlNtYXJ0IHBvaW50ZXIiIGNsYXNzLCBjbG9zZXMgYSBVRGF0ZUZvcm1hdCB2aWEg
dWRhdF9jbG9zZSgpLgorICogRm9yIG1vc3QgbWV0aG9kcyBzZWUgdGhlIExvY2FsUG9pbnRlckJh
c2UgYmFzZSBjbGFzcy4KKyAqCisgKiBAc2VlIExvY2FsUG9pbnRlckJhc2UKKyAqIEBzZWUgTG9j
YWxQb2ludGVyCisgKiBAc3RhYmxlIElDVSA0LjQKKyAqLworVV9ERUZJTkVfTE9DQUxfT1BFTl9Q
T0lOVEVSKExvY2FsVURhdGVGb3JtYXRQb2ludGVyLCBVRGF0ZUZvcm1hdCwgdWRhdF9jbG9zZSk7
CisKK1VfTkFNRVNQQUNFX0VORAorCisjZW5kaWYKKworLyoqCisgKiBPcGVuIGEgY29weSBvZiBh
IFVEYXRlRm9ybWF0LgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhIGRlZXAgY29weS4KKyAq
IEBwYXJhbSBmbXQgVGhlIGZvcm1hdCB0byBjb3B5CisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRl
ciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycy4KKyAqIEByZXR1cm4gQSBw
b2ludGVyIHRvIGEgVURhdGVGb3JtYXQgaWRlbnRpY2FsIHRvIGZtdC4KKyAqIEBzdGFibGUgSUNV
IDIuMAorICovCitVX1NUQUJMRSBVRGF0ZUZvcm1hdCogVV9FWFBPUlQyIAordWRhdF9jbG9uZShj
b25zdCBVRGF0ZUZvcm1hdCAqZm10LAorICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKy8q
KgorKiBGb3JtYXQgYSBkYXRlIHVzaW5nIGFuIFVEYXRlRm9ybWF0LgorKiBUaGUgZGF0ZSB3aWxs
IGJlIGZvcm1hdHRlZCB1c2luZyB0aGUgY29udmVudGlvbnMgc3BlY2lmaWVkIGluIHtAbGluayAj
dWRhdF9vcGVuIH0KKyogQHBhcmFtIGZvcm1hdCBUaGUgZm9ybWF0dGVyIHRvIHVzZQorKiBAcGFy
YW0gZGF0ZVRvRm9ybWF0IFRoZSBkYXRlIHRvIGZvcm1hdAorKiBAcGFyYW0gcmVzdWx0IEEgcG9p
bnRlciB0byBhIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBmb3JtYXR0ZWQgbnVtYmVyLgorKiBAcGFy
YW0gcmVzdWx0TGVuZ3RoIFRoZSBtYXhpbXVtIHNpemUgb2YgcmVzdWx0LgorKiBAcGFyYW0gcG9z
aXRpb24gQSBwb2ludGVyIHRvIGEgVUZpZWxkUG9zaXRpb24uICBPbiBpbnB1dCwgcG9zaXRpb24t
PmZpZWxkCisqIGlzIHJlYWQuICBPbiBvdXRwdXQsIHBvc2l0aW9uLT5iZWdpbkluZGV4IGFuZCBw
b3NpdGlvbi0+ZW5kSW5kZXggaW5kaWNhdGUKKyogdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIGlu
ZGljZXMgb2YgZmllbGQgbnVtYmVyIHBvc2l0aW9uLT5maWVsZCwgaWYgc3VjaAorKiBhIGZpZWxk
IGV4aXN0cy4gIFRoaXMgcGFyYW1ldGVyIG1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIG5vIGZp
ZWxkCisqIHBvc2l0aW9uIGRhdGEgaXMgcmV0dXJuZWQuCisqIEBwYXJhbSBzdGF0dXMgQSBwb2lu
dGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhl
IHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwg
dGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorKiBAc2VlIHVkYXRfcGFyc2UKKyogQHNlZSBVRmll
bGRQb3NpdGlvbgorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQ
T1JUMiAKK3VkYXRfZm9ybWF0KCAgICBjb25zdCAgICBVRGF0ZUZvcm1hdCogICAgZm9ybWF0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgVURhdGUgICAgICAgICAgIGRhdGVUb0Zvcm1hdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFVDaGFyKiAgICAgICAgICByZXN1bHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgcmVzdWx0TGVuZ3RoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgVUZpZWxkUG9zaXRpb24qIHBvc2l0aW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgVUVycm9yQ29kZSogICAgIHN0YXR1cyk7CisKKy8qKgorKiBQYXJzZSBhIHN0cmluZyBp
bnRvIGFuIGRhdGUvdGltZSB1c2luZyBhIFVEYXRlRm9ybWF0LgorKiBUaGUgZGF0ZSB3aWxsIGJl
IHBhcnNlZCB1c2luZyB0aGUgY29udmVudGlvbnMgc3BlY2lmaWVkIGluIHtAbGluayAjdWRhdF9v
cGVuIH0KKyogQHBhcmFtIGZvcm1hdCBUaGUgZm9ybWF0dGVyIHRvIHVzZS4KKyogQHBhcmFtIHRl
eHQgVGhlIHRleHQgdG8gcGFyc2UuCisqIEBwYXJhbSB0ZXh0TGVuZ3RoIFRoZSBsZW5ndGggb2Yg
dGV4dCwgb3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorKiBAcGFyYW0gcGFyc2VQb3MgSWYgbm90
IDAsIG9uIGlucHV0IGEgcG9pbnRlciB0byBhbiBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlIG9mZnNl
dCBhdCB3aGljaAorKiB0byBiZWdpbiBwYXJzaW5nLiAgSWYgbm90IDAsIG9uIG91dHB1dCB0aGUg
b2Zmc2V0IGF0IHdoaWNoIHBhcnNpbmcgZW5kZWQuCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVy
IHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHZh
bHVlIG9mIHRoZSBwYXJzZWQgZGF0ZS90aW1lCisqIEBzZWUgdWRhdF9mb3JtYXQKKyogQHN0YWJs
ZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgVURhdGUgVV9FWFBPUlQyIAordWRhdF9wYXJzZSggICAg
Y29uc3QgICAgVURhdGVGb3JtYXQqICAgIGZvcm1hdCwKKyAgICAgICAgICAgIGNvbnN0ICAgIFVD
aGFyKiAgICAgICAgICB0ZXh0LAorICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAg
dGV4dExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICpwYXJzZVBv
cywKKyAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICpzdGF0dXMpOworCisvKioK
KyogUGFyc2UgYSBzdHJpbmcgaW50byBhbiBkYXRlL3RpbWUgdXNpbmcgYSBVRGF0ZUZvcm1hdC4K
KyogVGhlIGRhdGUgd2lsbCBiZSBwYXJzZWQgdXNpbmcgdGhlIGNvbnZlbnRpb25zIHNwZWNpZmll
ZCBpbiB7QGxpbmsgI3VkYXRfb3BlbiB9CisqIEBwYXJhbSBmb3JtYXQgVGhlIGZvcm1hdHRlciB0
byB1c2UuCisqIEBwYXJhbSBjYWxlbmRhciBUaGUgY2FsZW5kYXIgaW4gd2hpY2ggdG8gc3RvcmUg
dGhlIHBhcnNlZCBkYXRhLgorKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBwYXJzZS4KKyogQHBh
cmFtIHRleHRMZW5ndGggVGhlIGxlbmd0aCBvZiB0ZXh0LCBvciAtMSBpZiBudWxsLXRlcm1pbmF0
ZWQuCisqIEBwYXJhbSBwYXJzZVBvcyBJZiBub3QgMCwgb24gaW5wdXQgYSBwb2ludGVyIHRvIGFu
IGludGVnZXIgc3BlY2lmeWluZyB0aGUgb2Zmc2V0IGF0IHdoaWNoCisqIHRvIGJlZ2luIHBhcnNp
bmcuICBJZiBub3QgMCwgb24gb3V0cHV0IHRoZSBvZmZzZXQgYXQgd2hpY2ggcGFyc2luZyBlbmRl
ZC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZl
IGFueSBlcnJvcnMKKyogQHNlZSB1ZGF0X2Zvcm1hdAorKiBAc3RhYmxlIElDVSAyLjAKKyovCitV
X1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VkYXRfcGFyc2VDYWxlbmRhcihjb25zdCAgICBVRGF0
ZUZvcm1hdCogICAgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDYWxlbmRh
ciogICAgICBjYWxlbmRhciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCAgICBVQ2hhciogICAg
ICAgICAgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAg
dGV4dExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAg
KnBhcnNlUG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgICAq
c3RhdHVzKTsKKworLyoqCisqIERldGVybWluZSBpZiBhbiBVRGF0ZUZvcm1hdCB3aWxsIHBlcmZv
cm0gbGVuaWVudCBwYXJzaW5nLgorKiBXaXRoIGxlbmllbnQgcGFyc2luZywgdGhlIHBhcnNlciBt
YXkgdXNlIGhldXJpc3RpY3MgdG8gaW50ZXJwcmV0IGlucHV0cyB0aGF0IGRvIG5vdAorKiBwcmVj
aXNlbHkgbWF0Y2ggdGhlIHBhdHRlcm4uIFdpdGggc3RyaWN0IHBhcnNpbmcsIGlucHV0cyBtdXN0
IG1hdGNoIHRoZSBwYXR0ZXJuLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkK
KyogQHJldHVybiBUUlVFIGlmIGZtdCBpcyBzZXQgdG8gcGVyZm9ybSBsZW5pZW50IHBhcnNpbmcs
IEZBTFNFIG90aGVyd2lzZS4KKyogQHNlZSB1ZGF0X3NldExlbmllbnQKKyogQHN0YWJsZSBJQ1Ug
Mi4wCisqLworVV9TVEFCTEUgVUJvb2wgVV9FWFBPUlQyIAordWRhdF9pc0xlbmllbnQoY29uc3Qg
VURhdGVGb3JtYXQqIGZtdCk7CisKKy8qKgorKiBTcGVjaWZ5IHdoZXRoZXIgYW4gVURhdGVGb3Jt
YXQgd2lsbCBwZXJmb3JtIGxlbmllbnQgcGFyc2luZy4KKyogV2l0aCBsZW5pZW50IHBhcnNpbmcs
IHRoZSBwYXJzZXIgbWF5IHVzZSBoZXVyaXN0aWNzIHRvIGludGVycHJldCBpbnB1dHMgdGhhdCBk
byBub3QKKyogcHJlY2lzZWx5IG1hdGNoIHRoZSBwYXR0ZXJuLiBXaXRoIHN0cmljdCBwYXJzaW5n
LCBpbnB1dHMgbXVzdCBtYXRjaCB0aGUgcGF0dGVybi4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0
dGVyIHRvIHNldAorKiBAcGFyYW0gaXNMZW5pZW50IFRSVUUgaWYgZm10IHNob3VsZCBwZXJmb3Jt
IGxlbmllbnQgcGFyc2luZywgRkFMU0Ugb3RoZXJ3aXNlLgorKiBAc2VlIGRhdF9pc0xlbmllbnQK
KyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1ZGF0X3Nl
dExlbmllbnQoICAgIFVEYXRlRm9ybWF0KiAgICBmbXQsCisgICAgICAgICAgICAgICAgICAgIFVC
b29sICAgICAgICAgIGlzTGVuaWVudCk7CisKKy8qKgorKiBHZXQgdGhlIFVDYWxlbmRhciBhc3Nv
Y2lhdGVkIHdpdGggYW4gVURhdGVGb3JtYXQuCisqIEEgVURhdGVGb3JtYXQgdXNlcyBhIFVDYWxl
bmRhciB0byBjb252ZXJ0IGEgcmF3IHZhbHVlIHRvLCBmb3IgZXhhbXBsZSwKKyogdGhlIGRheSBv
ZiB0aGUgd2Vlay4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHF1ZXJ5LgorKiBAcmV0
dXJuIEEgcG9pbnRlciB0byB0aGUgVUNhbGVuZGFyIHVzZWQgYnkgZm10LgorKiBAc2VlIHVkYXRf
c2V0Q2FsZW5kYXIKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgY29uc3QgVUNhbGVu
ZGFyKiBVX0VYUE9SVDIgCit1ZGF0X2dldENhbGVuZGFyKGNvbnN0IFVEYXRlRm9ybWF0KiBmbXQp
OworCisvKioKKyogU2V0IHRoZSBVQ2FsZW5kYXIgYXNzb2NpYXRlZCB3aXRoIGFuIFVEYXRlRm9y
bWF0LgorKiBBIFVEYXRlRm9ybWF0IHVzZXMgYSBVQ2FsZW5kYXIgdG8gY29udmVydCBhIHJhdyB2
YWx1ZSB0bywgZm9yIGV4YW1wbGUsCisqIHRoZSBkYXkgb2YgdGhlIHdlZWsuCisqIEBwYXJhbSBm
bXQgVGhlIGZvcm1hdHRlciB0byBzZXQuCisqIEBwYXJhbSBjYWxlbmRhclRvU2V0IEEgcG9pbnRl
ciB0byBhbiBVQ2FsZW5kYXIgdG8gYmUgdXNlZCBieSBmbXQuCisqIEBzZWUgdWRhdF9zZXRDYWxl
bmRhcgorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3Vk
YXRfc2V0Q2FsZW5kYXIoICAgICAgICAgICAgVURhdGVGb3JtYXQqICAgIGZtdCwKKyAgICAgICAg
ICAgICAgICAgICAgY29uc3QgICBVQ2FsZW5kYXIqICAgICAgY2FsZW5kYXJUb1NldCk7CisKKy8q
KgorKiBHZXQgdGhlIFVOdW1iZXJGb3JtYXQgYXNzb2NpYXRlZCB3aXRoIGFuIFVEYXRlRm9ybWF0
LgorKiBBIFVEYXRlRm9ybWF0IHVzZXMgYSBVTnVtYmVyRm9ybWF0IHRvIGZvcm1hdCBudW1iZXJz
IHdpdGhpbiBhIGRhdGUsCisqIGZvciBleGFtcGxlIHRoZSBkYXkgbnVtYmVyLgorKiBAcGFyYW0g
Zm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisqIEByZXR1cm4gQSBwb2ludGVyIHRvIHRoZSBV
TnVtYmVyRm9ybWF0IHVzZWQgYnkgZm10IHRvIGZvcm1hdCBudW1iZXJzLgorKiBAc2VlIHVkYXRf
c2V0TnVtYmVyRm9ybWF0CisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGNvbnN0IFVO
dW1iZXJGb3JtYXQqIFVfRVhQT1JUMiAKK3VkYXRfZ2V0TnVtYmVyRm9ybWF0KGNvbnN0IFVEYXRl
Rm9ybWF0KiBmbXQpOworCisvKioKKyogU2V0IHRoZSBVTnVtYmVyRm9ybWF0IGFzc29jaWF0ZWQg
d2l0aCBhbiBVRGF0ZUZvcm1hdC4KKyogQSBVRGF0ZUZvcm1hdCB1c2VzIGEgVU51bWJlckZvcm1h
dCB0byBmb3JtYXQgbnVtYmVycyB3aXRoaW4gYSBkYXRlLAorKiBmb3IgZXhhbXBsZSB0aGUgZGF5
IG51bWJlci4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHNldC4KKyogQHBhcmFtIG51
bWJlckZvcm1hdFRvU2V0IEEgcG9pbnRlciB0byB0aGUgVU51bWJlckZvcm1hdCB0byBiZSB1c2Vk
IGJ5IGZtdCB0byBmb3JtYXQgbnVtYmVycy4KKyogQHNlZSB1ZGF0X2dldE51bWJlckZvcm1hdAor
KiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VkYXRfc2V0
TnVtYmVyRm9ybWF0KCAgICAgICAgICAgIFVEYXRlRm9ybWF0KiAgICBmbXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCAgIFVOdW1iZXJGb3JtYXQqICBudW1iZXJGb3JtYXRUb1NldCk7
CisKKy8qKgorKiBHZXQgYSBsb2NhbGUgZm9yIHdoaWNoIGRhdGUvdGltZSBmb3JtYXR0aW5nIHBh
dHRlcm5zIGFyZSBhdmFpbGFibGUuCisqIEEgVURhdGVGb3JtYXQgaW4gYSBsb2NhbGUgcmV0dXJu
ZWQgYnkgdGhpcyBmdW5jdGlvbiB3aWxsIHBlcmZvcm0gdGhlIGNvcnJlY3QKKyogZm9ybWF0dGlu
ZyBhbmQgcGFyc2luZyBmb3IgdGhlIGxvY2FsZS4KKyogQHBhcmFtIGxvY2FsZUluZGV4IFRoZSBp
bmRleCBvZiB0aGUgZGVzaXJlZCBsb2NhbGUuCisqIEByZXR1cm4gQSBsb2NhbGUgZm9yIHdoaWNo
IGRhdGUvdGltZSBmb3JtYXR0aW5nIHBhdHRlcm5zIGFyZSBhdmFpbGFibGUsIG9yIDAgaWYgbm9u
ZS4KKyogQHNlZSB1ZGF0X2NvdW50QXZhaWxhYmxlCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1Vf
U1RBQkxFIGNvbnN0IGNoYXIqIFVfRVhQT1JUMiAKK3VkYXRfZ2V0QXZhaWxhYmxlKGludDMyX3Qg
bG9jYWxlSW5kZXgpOworCisvKioKKyogRGV0ZXJtaW5lIGhvdyBtYW55IGxvY2FsZXMgaGF2ZSBk
YXRlL3RpbWUgIGZvcm1hdHRpbmcgcGF0dGVybnMgYXZhaWxhYmxlLgorKiBUaGlzIGZ1bmN0aW9u
IGlzIG1vc3QgdXNlZnVsIGFzIGRldGVybWluaW5nIHRoZSBsb29wIGVuZGluZyBjb25kaXRpb24g
Zm9yCisqIGNhbGxzIHRvIHtAbGluayAjdWRhdF9nZXRBdmFpbGFibGUgfS4KKyogQHJldHVybiBU
aGUgbnVtYmVyIG9mIGxvY2FsZXMgZm9yIHdoaWNoIGRhdGUvdGltZSBmb3JtYXR0aW5nIHBhdHRl
cm5zIGFyZSBhdmFpbGFibGUuCisqIEBzZWUgdWRhdF9nZXRBdmFpbGFibGUKKyogQHN0YWJsZSBJ
Q1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1ZGF0X2NvdW50QXZhaWxh
YmxlKHZvaWQpOworCisvKioKKyogR2V0IHRoZSB5ZWFyIHJlbGF0aXZlIHRvIHdoaWNoIGFsbCAy
LWRpZ2l0IHllYXJzIGFyZSBpbnRlcnByZXRlZC4KKyogRm9yIGV4YW1wbGUsIGlmIHRoZSAyLWRp
Z2l0IHN0YXJ0IHllYXIgaXMgMjEwMCwgdGhlIHllYXIgOTkgd2lsbCBiZQorKiBpbnRlcnByZXRl
ZCBhcyAyMTk5LgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisqIEBwYXJh
bSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3Jz
CisqIEByZXR1cm4gVGhlIHllYXIgcmVsYXRpdmUgdG8gd2hpY2ggYWxsIDItZGlnaXQgeWVhcnMg
YXJlIGludGVycHJldGVkLgorKiBAc2VlIHVkYXRfU2V0MkRpZ2l0WWVhclN0YXJ0CisqIEBzdGFi
bGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIFVEYXRlIFVfRVhQT1JUMiAKK3VkYXRfZ2V0MkRpZ2l0
WWVhclN0YXJ0KCAgICBjb25zdCAgIFVEYXRlRm9ybWF0ICAgICAqZm10LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICpzdGF0dXMpOworCisvKioK
KyogU2V0IHRoZSB5ZWFyIHJlbGF0aXZlIHRvIHdoaWNoIGFsbCAyLWRpZ2l0IHllYXJzIHdpbGwg
YmUgaW50ZXJwcmV0ZWQuCisqIEZvciBleGFtcGxlLCBpZiB0aGUgMi1kaWdpdCBzdGFydCB5ZWFy
IGlzIDIxMDAsIHRoZSB5ZWFyIDk5IHdpbGwgYmUKKyogaW50ZXJwcmV0ZWQgYXMgMjE5OS4KKyog
QHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHNldC4KKyogQHBhcmFtIGQgVGhlIHllYXIgcmVs
YXRpdmUgdG8gd2hpY2ggYWxsIDItZGlnaXQgeWVhcnMgd2lsbCBiZSBpbnRlcnByZXRlZC4KKyog
QHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBl
cnJvcnMKKyogQHNlZSB1ZGF0X1NldDJEaWdpdFllYXJTdGFydAorKiBAc3RhYmxlIElDVSAyLjAK
KyovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VkYXRfc2V0MkRpZ2l0WWVhclN0YXJ0KCAg
ICBVRGF0ZUZvcm1hdCAgICAgKmZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRGF0
ZSAgICAgICAgICAgZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAg
ICAgKnN0YXR1cyk7CisKKy8qKgorKiBFeHRyYWN0IHRoZSBwYXR0ZXJuIGZyb20gYSBVRGF0ZUZv
cm1hdC4KKyogVGhlIHBhdHRlcm4gd2lsbCBmb2xsb3cgdGhlIHBhdHRlcm4gc3ludGF4IHJ1bGVz
LgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisqIEBwYXJhbSBsb2NhbGl6
ZWQgVFJVRSBpZiB0aGUgcGF0dGVybiBzaG91bGQgYmUgbG9jYWxpemVkLCBGQUxTRSBvdGhlcndp
c2UuCisqIEBwYXJhbSByZXN1bHQgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhl
IHBhdHRlcm4uCisqIEBwYXJhbSByZXN1bHRMZW5ndGggVGhlIG1heGltdW0gc2l6ZSBvZiByZXN1
bHQuCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2
ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYg
Z3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorKiBA
c2VlIHVkYXRfYXBwbHlQYXR0ZXJuCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGlu
dDMyX3QgVV9FWFBPUlQyIAordWRhdF90b1BhdHRlcm4oICAgIGNvbnN0ICAgVURhdGVGb3JtYXQg
ICAgICpmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCAgICAgICAgICBsb2NhbGl6
ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhciAgICAgICAgICAgKnJlc3VsdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICByZXN1bHRMZW5ndGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgKnN0YXR1cyk7CisKKy8qKgorKiBT
ZXQgdGhlIHBhdHRlcm4gdXNlZCBieSBhbiBVRGF0ZUZvcm1hdC4KKyogVGhlIHBhdHRlcm4gc2hv
dWxkIGZvbGxvdyB0aGUgcGF0dGVybiBzeW50YXggcnVsZXMuCisqIEBwYXJhbSBmb3JtYXQgVGhl
IGZvcm1hdHRlciB0byBzZXQuCisqIEBwYXJhbSBsb2NhbGl6ZWQgVFJVRSBpZiB0aGUgcGF0dGVy
biBpcyBsb2NhbGl6ZWQsIEZBTFNFIG90aGVyd2lzZS4KKyogQHBhcmFtIHBhdHRlcm4gVGhlIG5l
dyBwYXR0ZXJuCisqIEBwYXJhbSBwYXR0ZXJuTGVuZ3RoIFRoZSBsZW5ndGggb2YgcGF0dGVybiwg
b3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorKiBAc2VlIHVkYXRfdG9QYXR0ZXJuCisqIEBzdGFi
bGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWRhdF9hcHBseVBhdHRl
cm4oICAgICAgICAgICAgVURhdGVGb3JtYXQgICAgICpmb3JtYXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVUJvb2wgICAgICAgICAgbG9jYWxpemVkLAorICAgICAgICAgICAgICAgICAg
ICBjb25zdCAgIFVDaGFyICAgICAgICAgICAqcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQzMl90ICAgICAgICAgcGF0dGVybkxlbmd0aCk7CisKKy8qKiAKKyAqIFRoZSBw
b3NzaWJsZSB0eXBlcyBvZiBkYXRlIGZvcm1hdCBzeW1ib2xzIAorICogQHN0YWJsZSBJQ1UgMi42
CisgKi8KK3R5cGVkZWYgZW51bSBVRGF0ZUZvcm1hdFN5bWJvbFR5cGUgeworICAgIC8qKiBUaGUg
ZXJhIG5hbWVzLCBmb3IgZXhhbXBsZSBBRCAqLworICAgIFVEQVRfRVJBUywKKyAgICAvKiogVGhl
IG1vbnRoIG5hbWVzLCBmb3IgZXhhbXBsZSBGZWJydWFyeSAqLworICAgIFVEQVRfTU9OVEhTLAor
ICAgIC8qKiBUaGUgc2hvcnQgbW9udGggbmFtZXMsIGZvciBleGFtcGxlIEZlYi4gKi8KKyAgICBV
REFUX1NIT1JUX01PTlRIUywKKyAgICAvKiogVGhlIHdlZWtkYXkgbmFtZXMsIGZvciBleGFtcGxl
IE1vbmRheSAqLworICAgIFVEQVRfV0VFS0RBWVMsCisgICAgLyoqIFRoZSBzaG9ydCB3ZWVrZGF5
IG5hbWVzLCBmb3IgZXhhbXBsZSBNb24uICovCisgICAgVURBVF9TSE9SVF9XRUVLREFZUywKKyAg
ICAvKiogVGhlIEFNL1BNIG5hbWVzLCBmb3IgZXhhbXBsZSBBTSAqLworICAgIFVEQVRfQU1fUE1T
LAorICAgIC8qKiBUaGUgbG9jYWxpemVkIGNoYXJhY3RlcnMgKi8KKyAgICBVREFUX0xPQ0FMSVpF
RF9DSEFSUywKKyAgICAvKiogVGhlIGxvbmcgZXJhIG5hbWVzLCBmb3IgZXhhbXBsZSBBbm5vIERv
bWluaSAqLworICAgIFVEQVRfRVJBX05BTUVTLAorICAgIC8qKiBUaGUgbmFycm93IG1vbnRoIG5h
bWVzLCBmb3IgZXhhbXBsZSBGICovCisgICAgVURBVF9OQVJST1dfTU9OVEhTLAorICAgIC8qKiBU
aGUgbmFycm93IHdlZWtkYXkgbmFtZXMsIGZvciBleGFtcGxlIE4gKi8KKyAgICBVREFUX05BUlJP
V19XRUVLREFZUywKKyAgICAvKiogU3RhbmRhbG9uZSBjb250ZXh0IHZlcnNpb25zIG9mIG1vbnRo
cyAqLworICAgIFVEQVRfU1RBTkRBTE9ORV9NT05USFMsCisgICAgVURBVF9TVEFOREFMT05FX1NI
T1JUX01PTlRIUywKKyAgICBVREFUX1NUQU5EQUxPTkVfTkFSUk9XX01PTlRIUywKKyAgICAvKiog
U3RhbmRhbG9uZSBjb250ZXh0IHZlcnNpb25zIG9mIHdlZWtkYXlzICovCisgICAgVURBVF9TVEFO
REFMT05FX1dFRUtEQVlTLAorICAgIFVEQVRfU1RBTkRBTE9ORV9TSE9SVF9XRUVLREFZUywKKyAg
ICBVREFUX1NUQU5EQUxPTkVfTkFSUk9XX1dFRUtEQVlTLAorICAgIC8qKiBUaGUgcXVhcnRlcnMs
IGZvciBleGFtcGxlIDFzdCBRdWFydGVyICovCisgICAgVURBVF9RVUFSVEVSUywKKyAgICAvKiog
VGhlIHNob3J0IHF1YXJ0ZXIgbmFtZXMsIGZvciBleGFtcGxlIFExICovCisgICAgVURBVF9TSE9S
VF9RVUFSVEVSUywKKyAgICAvKiogU3RhbmRhbG9uZSBjb250ZXh0IHZlcnNpb25zIG9mIHF1YXJ0
ZXJzICovCisgICAgVURBVF9TVEFOREFMT05FX1FVQVJURVJTLAorICAgIFVEQVRfU1RBTkRBTE9O
RV9TSE9SVF9RVUFSVEVSUworCit9IFVEYXRlRm9ybWF0U3ltYm9sVHlwZTsKKworc3RydWN0IFVE
YXRlRm9ybWF0U3ltYm9sczsKKy8qKiBEYXRlIGZvcm1hdCBzeW1ib2xzLgorICogIEZvciB1c2Fn
ZSBpbiBDIHByb2dyYW1zLgorICogIEBzdGFibGUgSUNVIDIuNgorICovCit0eXBlZGVmIHN0cnVj
dCBVRGF0ZUZvcm1hdFN5bWJvbHMgVURhdGVGb3JtYXRTeW1ib2xzOworCisvKioKKyogR2V0IHRo
ZSBzeW1ib2xzIGFzc29jaWF0ZWQgd2l0aCBhbiBVRGF0ZUZvcm1hdC4KKyogVGhlIHN5bWJvbHMg
YXJlIHdoYXQgYSBVRGF0ZUZvcm1hdCB1c2VzIHRvIHJlcHJlc2VudCBsb2NhbGUtc3BlY2lmaWMg
ZGF0YSwKKyogZm9yIGV4YW1wbGUgbW9udGggb3IgZGF5IG5hbWVzLgorKiBAcGFyYW0gZm10IFRo
ZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHN5bWJvbHMg
dG8gZ2V0LiAgT25lIG9mIFVEQVRfRVJBUywgVURBVF9NT05USFMsIFVEQVRfU0hPUlRfTU9OVEhT
LAorKiBVREFUX1dFRUtEQVlTLCBVREFUX1NIT1JUX1dFRUtEQVlTLCBVREFUX0FNX1BNUywgb3Ig
VURBVF9MT0NBTElaRURfQ0hBUlMKKyogQHBhcmFtIHN5bWJvbEluZGV4IFRoZSBkZXNpcmVkIHN5
bWJvbCBvZiB0eXBlIHR5cGUuCisqIEBwYXJhbSByZXN1bHQgQSBwb2ludGVyIHRvIGEgYnVmZmVy
IHRvIHJlY2VpdmUgdGhlIHBhdHRlcm4uCisqIEBwYXJhbSByZXN1bHRMZW5ndGggVGhlIG1heGlt
dW0gc2l6ZSBvZiByZXN1bHQuCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJv
ckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBz
aXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3YXMg
dHJ1bmNhdGVkLgorKiBAc2VlIHVkYXRfY291bnRTeW1ib2xzCisqIEBzZWUgdWRhdF9zZXRTeW1i
b2xzCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAor
dWRhdF9nZXRTeW1ib2xzKGNvbnN0ICAgVURhdGVGb3JtYXQgICAgICAgICAgICAgKmZtdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFVEYXRlRm9ybWF0U3ltYm9sVHlwZSAgIHR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBzeW1ib2xJbmRleCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyICAgICAgICAgICAgICAgICAgICpyZXN1bHQs
CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICByZXN1bHRM
ZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgICAgICAgICAq
c3RhdHVzKTsKKworLyoqCisqIENvdW50IHRoZSBudW1iZXIgb2YgcGFydGljdWxhciBzeW1ib2xz
IGZvciBhbiBVRGF0ZUZvcm1hdC4KKyogVGhpcyBmdW5jdGlvbiBpcyBtb3N0IHVzZWZ1bCBhcyBm
b3IgZGV0ZW1pbmluZyB0aGUgbG9vcCB0ZXJtaW5hdGlvbiBjb25kaXRpb24KKyogZm9yIGNhbGxz
IHRvIHtAbGluayAjdWRhdF9nZXRTeW1ib2xzIH0uCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRl
ciB0byBxdWVyeS4KKyogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2Ygc3ltYm9scyB0byBjb3VudC4g
IE9uZSBvZiBVREFUX0VSQVMsIFVEQVRfTU9OVEhTLCBVREFUX1NIT1JUX01PTlRIUywKKyogVURB
VF9XRUVLREFZUywgVURBVF9TSE9SVF9XRUVLREFZUywgVURBVF9BTV9QTVMsIG9yIFVEQVRfTE9D
QUxJWkVEX0NIQVJTCisqIEByZXR1cm4gVGhlIG51bWJlciBvZiBzeW1ib2xzIG9mIHR5cGUgdHlw
ZS4KKyogQHNlZSB1ZGF0X2dldFN5bWJvbHMKKyogQHNlZSB1ZGF0X3NldFN5bWJvbHMKKyogQHN0
YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1ZGF0X2NvdW50
U3ltYm9scyggICAgY29uc3QgICAgVURhdGVGb3JtYXQgICAgICAgICAgICAgICAgKmZtdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBVRGF0ZUZvcm1hdFN5bWJvbFR5cGUgICAgdHlwZSk7
CisKKy8qKgorKiBTZXQgdGhlIHN5bWJvbHMgYXNzb2NpYXRlZCB3aXRoIGFuIFVEYXRlRm9ybWF0
LgorKiBUaGUgc3ltYm9scyBhcmUgd2hhdCBhIFVEYXRlRm9ybWF0IHVzZXMgdG8gcmVwcmVzZW50
IGxvY2FsZS1zcGVjaWZpYyBkYXRhLAorKiBmb3IgZXhhbXBsZSBtb250aCBvciBkYXkgbmFtZXMu
CisqIEBwYXJhbSBmb3JtYXQgVGhlIGZvcm1hdHRlciB0byBzZXQKKyogQHBhcmFtIHR5cGUgVGhl
IHR5cGUgb2Ygc3ltYm9scyB0byBzZXQuICBPbmUgb2YgVURBVF9FUkFTLCBVREFUX01PTlRIUywg
VURBVF9TSE9SVF9NT05USFMsCisqIFVEQVRfV0VFS0RBWVMsIFVEQVRfU0hPUlRfV0VFS0RBWVMs
IFVEQVRfQU1fUE1TLCBvciBVREFUX0xPQ0FMSVpFRF9DSEFSUworKiBAcGFyYW0gc3ltYm9sSW5k
ZXggVGhlIGluZGV4IG9mIHRoZSBzeW1ib2wgdG8gc2V0IG9mIHR5cGUgdHlwZS4KKyogQHBhcmFt
IHZhbHVlIFRoZSBuZXcgdmFsdWUKKyogQHBhcmFtIHZhbHVlTGVuZ3RoIFRoZSBsZW5ndGggb2Yg
dmFsdWUsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZAorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRl
ciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAc2VlIHVkYXRfZ2V0
U3ltYm9scworKiBAc2VlIHVkYXRfY291bnRTeW1ib2xzCisqIEBzdGFibGUgSUNVIDIuMAorKi8K
K1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWRhdF9zZXRTeW1ib2xzKCAgICBVRGF0ZUZvcm1h
dCAgICAgICAgICAgICAqZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICBVRGF0ZUZvcm1hdFN5
bWJvbFR5cGUgICB0eXBlLAorICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICAg
ICAgICBzeW1ib2xJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgVUNoYXIgICAgICAgICAgICAg
ICAgICAgKnZhbHVlLAorICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICAgICAg
ICB2YWx1ZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICAgICAg
ICAgKnN0YXR1cyk7CisKKy8qKgorICogR2V0IHRoZSBsb2NhbGUgZm9yIHRoaXMgZGF0ZSBmb3Jt
YXQgb2JqZWN0LgorICogWW91IGNhbiBjaG9vc2UgYmV0d2VlbiB2YWxpZCBhbmQgYWN0dWFsIGxv
Y2FsZS4KKyAqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBnZXQgdGhlIGxvY2FsZSBmcm9t
CisgKiBAcGFyYW0gdHlwZSB0eXBlIG9mIHRoZSBsb2NhbGUgd2UncmUgbG9va2luZyBmb3IgKHZh
bGlkIG9yIGFjdHVhbCkgCisgKiBAcGFyYW0gc3RhdHVzIGVycm9yIGNvZGUgZm9yIHRoZSBvcGVy
YXRpb24KKyAqIEByZXR1cm4gdGhlIGxvY2FsZSBuYW1lCisgKiBAc3RhYmxlIElDVSAyLjgKKyAq
LworVV9TVEFCTEUgY29uc3QgY2hhciogVV9FWFBPUlQyCit1ZGF0X2dldExvY2FsZUJ5VHlwZShj
b25zdCBVRGF0ZUZvcm1hdCAqZm10LAorICAgICAgICAgICAgICAgICAgICAgVUxvY0RhdGFMb2Nh
bGVUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiBzdGF0dXMpOyAK
KworLyoqCisqIEV4dHJhY3QgdGhlIGRhdGUgcGF0dGVybiBmcm9tIGEgVURhdGVGb3JtYXQgc2V0
IGZvciByZWxhdGl2ZSBkYXRlIGZvcm1hdHRpbmcuCisqIFRoZSBwYXR0ZXJuIHdpbGwgZm9sbG93
IHRoZSBwYXR0ZXJuIHN5bnRheCBydWxlcy4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRv
IHF1ZXJ5LgorKiBAcGFyYW0gcmVzdWx0IEEgcG9pbnRlciB0byBhIGJ1ZmZlciB0byByZWNlaXZl
IHRoZSBwYXR0ZXJuLgorKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIFRoZSBtYXhpbXVtIHNpemUgb2Yg
cmVzdWx0LgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhIFVFcnJvckNvZGUgdG8gcmVj
ZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsg
aWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgor
KiBAc2VlIHVkYXRfYXBwbHlQYXR0ZXJuUmVsYXRpdmUKKyogQGludGVybmFsIElDVSA0LjIgdGVj
aG5vbG9neSBwcmV2aWV3CisqLworVV9JTlRFUk5BTCBpbnQzMl90IFVfRVhQT1JUMiAKK3VkYXRf
dG9QYXR0ZXJuUmVsYXRpdmVEYXRlKGNvbnN0IFVEYXRlRm9ybWF0ICpmbXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBVQ2hhciAgICAgICAgICAgICAqcmVzdWx0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgcmVzdWx0TGVuZ3RoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICAgKnN0YXR1cyk7CisKKy8qKgorKiBF
eHRyYWN0IHRoZSB0aW1lIHBhdHRlcm4gZnJvbSBhIFVEYXRlRm9ybWF0IHNldCBmb3IgcmVsYXRp
dmUgZGF0ZSBmb3JtYXR0aW5nLgorKiBUaGUgcGF0dGVybiB3aWxsIGZvbGxvdyB0aGUgcGF0dGVy
biBzeW50YXggcnVsZXMuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBxdWVyeS4KKyog
QHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgcGF0dGVy
bi4KKyogQHBhcmFtIHJlc3VsdExlbmd0aCBUaGUgbWF4aW11bSBzaXplIG9mIHJlc3VsdC4KKyog
QHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYSBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVy
cm9ycworKiBAcmV0dXJuIFRoZSB0b3RhbCBidWZmZXIgc2l6ZSBuZWVkZWQ7IGlmIGdyZWF0ZXIg
dGhhbiByZXN1bHRMZW5ndGgsIHRoZSBvdXRwdXQgd2FzIHRydW5jYXRlZC4KKyogQHNlZSB1ZGF0
X2FwcGx5UGF0dGVyblJlbGF0aXZlCisqIEBpbnRlcm5hbCBJQ1UgNC4yIHRlY2hub2xvZ3kgcHJl
dmlldworKi8KK1VfSU5URVJOQUwgaW50MzJfdCBVX0VYUE9SVDIgCit1ZGF0X3RvUGF0dGVyblJl
bGF0aXZlVGltZShjb25zdCBVRGF0ZUZvcm1hdCAqZm10LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVUNoYXIgICAgICAgICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludDMyX3QgICAgICAgICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVFcnJvckNvZGUgICAgICAgICpzdGF0dXMpOworCisvKioKKyogU2V0IHRoZSBkYXRl
ICYgdGltZSBwYXR0ZXJucyB1c2VkIGJ5IGEgVURhdGVGb3JtYXQgc2V0IGZvciByZWxhdGl2ZSBk
YXRlIGZvcm1hdHRpbmcuCisqIFRoZSBwYXR0ZXJucyBzaG91bGQgZm9sbG93IHRoZSBwYXR0ZXJu
IHN5bnRheCBydWxlcy4KKyogQHBhcmFtIGZvcm1hdCBUaGUgZm9ybWF0dGVyIHRvIHNldC4KKyog
QHBhcmFtIGRhdGVQYXR0ZXJuIFRoZSBuZXcgZGF0ZSBwYXR0ZXJuCisqIEBwYXJhbSBkYXRlUGF0
dGVybkxlbmd0aCBUaGUgbGVuZ3RoIG9mIGRhdGVQYXR0ZXJuLCBvciAtMSBpZiBudWxsLXRlcm1p
bmF0ZWQuCisqIEBwYXJhbSB0aW1lUGF0dGVybiBUaGUgbmV3IHRpbWUgcGF0dGVybgorKiBAcGFy
YW0gdGltZVBhdHRlcm5MZW5ndGggVGhlIGxlbmd0aCBvZiB0aW1lUGF0dGVybiwgb3IgLTEgaWYg
bnVsbC10ZXJtaW5hdGVkLgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhIFVFcnJvckNv
ZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEBzZWUgdWRhdF90b1BhdHRlcm5SZWxhdGl2ZURh
dGUsIHVkYXRfdG9QYXR0ZXJuUmVsYXRpdmVUaW1lCisqIEBpbnRlcm5hbCBJQ1UgNC4yIHRlY2hu
b2xvZ3kgcHJldmlldworKi8KK1VfSU5URVJOQUwgdm9pZCBVX0VYUE9SVDIgCit1ZGF0X2FwcGx5
UGF0dGVyblJlbGF0aXZlKFVEYXRlRm9ybWF0ICpmb3JtYXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFVDaGFyICpkYXRlUGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50MzJfdCAgICAgZGF0ZVBhdHRlcm5MZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFVDaGFyICp0aW1lUGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50MzJfdCAgICAgdGltZVBhdHRlcm5MZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IFVFcnJvckNvZGUgICpzdGF0dXMpOworCisKKyNlbmRpZiAvKiAjaWYgIVVDT05GSUdfTk9fRk9S
TUFUVElORyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
Y3UvdW5pY29kZS91bWlzYy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3Vt
aXNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZDg1NDUxZmM3NjdjMDU4MzVmNmMxNWY1NjZmMzU2MmUyZDRhZjgz
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29kZS91
bWlzYy5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDYsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jw
b3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK
KyogICBmaWxlIG5hbWU6ICB1bWlzYy5oCisqICAgZW5jb2Rpbmc6ICAgVVMtQVNDSUkKKyogICB0
YWIgc2l6ZTogICA4IChub3QgdXNlZCkKKyogICBpbmRlbnRhdGlvbjo0CisqCisqICAgY3JlYXRl
ZCBvbjogMTk5OW9jdDE1CisqICAgY3JlYXRlZCBieTogTWFya3VzIFcuIFNjaGVyZXIKKyovCisK
KyNpZm5kZWYgVU1JU0NfSAorI2RlZmluZSBVTUlTQ19ICisKKyNpbmNsdWRlICJ1bmljb2RlL3V0
eXBlcy5oIgorCisvKioKKyAqIFxmaWxlCisgKiBcYnJpZWYgIEMgQVBJOm1pc2MgZGVmaW5pdGlv
bnMgCisgKgorICogIFRoaXMgZmlsZSBjb250YWlucyBtaXNjZWxsYW5lb3VzIGRlZmluaXRpb25z
IGZvciB0aGUgQyBBUElzLiAKKyAqLworCitVX0NERUNMX0JFR0lOCisKKy8qKiBBIHN0cnVjdCBy
ZXByZXNlbnRpbmcgYSByYW5nZSBvZiB0ZXh0IGNvbnRhaW5pbmcgYSBzcGVjaWZpYyBmaWVsZCAK
KyAqICBAc3RhYmxlIElDVSAyLjAKKyAqLwordHlwZWRlZiBzdHJ1Y3QgVUZpZWxkUG9zaXRpb24g
eworICAvKioKKyAgICogVGhlIGZpZWxkIAorICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICovCisg
IGludDMyX3QgZmllbGQ7CisgIC8qKgorICAgKiBUaGUgc3RhcnQgb2YgdGhlIHRleHQgcmFuZ2Ug
Y29udGFpbmluZyBmaWVsZCAKKyAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAqLworICBpbnQzMl90
IGJlZ2luSW5kZXg7CisgIC8qKiAKKyAgICogVGhlIGxpbWl0IG9mIHRoZSB0ZXh0IHJhbmdlIGNv
bnRhaW5pbmcgZmllbGQgCisgICAqIEBzdGFibGUgSUNVIDIuMAorICAgKi8KKyAgaW50MzJfdCBl
bmRJbmRleDsKK30gVUZpZWxkUG9zaXRpb247CisKKyNpZiAhVUNPTkZJR19OT19TRVJWSUNFCisv
KioKKyAqIE9wYXF1ZSB0eXBlIHJldHVybmVkIGJ5IHJlZ2lzdGVySW5zdGFuY2UsIHJlZ2lzdGVy
RmFjdG9yeSBhbmQgdW5yZWdpc3RlciBmb3Igc2VydmljZSByZWdpc3RyYXRpb24uCisgKiBAc3Rh
YmxlIElDVSAyLjYKKyAqLwordHlwZWRlZiBjb25zdCB2b2lkKiBVUmVnaXN0cnlLZXk7CisjZW5k
aWYKKworVV9DREVDTF9FTkQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaWN1L3VuaWNvZGUvdW51bS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmlj
b2RlL3VudW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMTAyYmFiNThiM2QxYmIyZTJiMjA4MmNiNTU4OWM1ZGRl
ZmU4Y2MwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmlj
b2RlL3VudW0uaApAQCAtMCwwICsxLDk5OSBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK
KyogQ29weXJpZ2h0IChDKSAxOTk3LTIwMTAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGlu
ZXMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogTW9k
aWZpY2F0aW9uIEhpc3Rvcnk6CisqCisqICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3Jp
cHRpb24KKyogICAwNi8yNC85OSAgICBoZWxlbmEgICAgICBJbnRlZ3JhdGVkIEFsYW4ncyBORiBl
bmhhbmNlbWVudHMgYW5kIEphdmEyIGJ1ZyBmaXhlcworKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgor
Ki8KKworI2lmbmRlZiBfVU5VTQorI2RlZmluZSBfVU5VTQorCisjaW5jbHVkZSAidW5pY29kZS91
dHlwZXMuaCIKKworI2lmICFVQ09ORklHX05PX0ZPUk1BVFRJTkcKKworI2luY2x1ZGUgInVuaWNv
ZGUvbG9jYWxwb2ludGVyLmgiCisjaW5jbHVkZSAidW5pY29kZS91bG9jLmgiCisjaW5jbHVkZSAi
dW5pY29kZS91bWlzYy5oIgorI2luY2x1ZGUgInVuaWNvZGUvcGFyc2VlcnIuaCIKKy8qKgorICog
XGZpbGUKKyAqIFxicmllZiBDIEFQSTogTnVtYmVyRm9ybWF0CisgKgorICogPGgyPiBOdW1iZXIg
Rm9ybWF0IEMgQVBJIDwvaDI+CisgKgorICogTnVtYmVyIEZvcm1hdCBDIEFQSSAgUHJvdmlkZXMg
ZnVuY3Rpb25zIGZvcgorICogZm9ybWF0dGluZyBhbmQgcGFyc2luZyBhIG51bWJlci4gIEFsc28g
cHJvdmlkZXMgbWV0aG9kcyBmb3IKKyAqIGRldGVybWluaW5nIHdoaWNoIGxvY2FsZXMgaGF2ZSBu
dW1iZXIgZm9ybWF0cywgYW5kIHdoYXQgdGhlaXIgbmFtZXMKKyAqIGFyZS4KKyAqIDxQPgorICog
VU51bWJlckZvcm1hdCBoZWxwcyB5b3UgdG8gZm9ybWF0IGFuZCBwYXJzZSBudW1iZXJzIGZvciBh
bnkgbG9jYWxlLgorICogWW91ciBjb2RlIGNhbiBiZSBjb21wbGV0ZWx5IGluZGVwZW5kZW50IG9m
IHRoZSBsb2NhbGUgY29udmVudGlvbnMKKyAqIGZvciBkZWNpbWFsIHBvaW50cywgdGhvdXNhbmRz
LXNlcGFyYXRvcnMsIG9yIGV2ZW4gdGhlIHBhcnRpY3VsYXIKKyAqIGRlY2ltYWwgZGlnaXRzIHVz
ZWQsIG9yIHdoZXRoZXIgdGhlIG51bWJlciBmb3JtYXQgaXMgZXZlbiBkZWNpbWFsLgorICogVGhl
cmUgYXJlIGRpZmZlcmVudCBudW1iZXIgZm9ybWF0IHN0eWxlcyBsaWtlIGRlY2ltYWwsIGN1cnJl
bmN5LAorICogcGVyY2VudCBhbmQgc3BlbGxvdXQuCisgKiA8UD4KKyAqIFRvIGZvcm1hdCBhIG51
bWJlciBmb3IgdGhlIGN1cnJlbnQgTG9jYWxlLCB1c2Ugb25lIG9mIHRoZSBzdGF0aWMKKyAqIGZh
Y3RvcnkgbWV0aG9kczoKKyAqIDxwcmU+CisgKiBcY29kZQorICogICAgVUNoYXIgbXlTdHJpbmdb
MjBdOworICogICAgZG91YmxlIG15TnVtYmVyID0gNy4wOworICogICAgVUVycm9yQ29kZSBzdGF0
dXMgPSBVX1pFUk9fRVJST1I7CisgKiAgICBVTnVtYmVyRm9ybWF0KiBuZiA9IHVudW1fb3BlbihV
TlVNX0RFRkFVTFQsIE5VTEwsIC0xLCBOVUxMLCBOVUxMLCAmc3RhdHVzKTsKKyAqICAgIHVudW1f
Zm9ybWF0RG91YmxlKG5mLCBteU51bWJlciwgbXlTdHJpbmcsIDIwLCBOVUxMLCAmc3RhdHVzKTsK
KyAqICAgIHByaW50ZigiIEV4YW1wbGUgMTogJXNcbiIsIGF1c3RyZHVwKG15U3RyaW5nKSApOyAv
L2F1c3RyZHVwKCBhIGZ1bmN0aW9uIHVzZWQgdG8gY29udmVydCBVQ2hhciogdG8gY2hhciopCisg
KiBcZW5kY29kZQorICogPC9wcmU+CisgKiBJZiB5b3UgYXJlIGZvcm1hdHRpbmcgbXVsdGlwbGUg
bnVtYmVycywgaXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gZ2V0CisgKiB0aGUgZm9ybWF0IGFuZCB1
c2UgaXQgbXVsdGlwbGUgdGltZXMgc28gdGhhdCB0aGUgc3lzdGVtIGRvZXNuJ3QKKyAqIGhhdmUg
dG8gZmV0Y2ggdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2NhbCBsYW5ndWFnZSBhbmQgY291
bnRyeQorICogY29udmVudGlvbnMgbXVsdGlwbGUgdGltZXMuCisgKiA8cHJlPgorICogXGNvZGUK
KyAqIHVpbnQzMl90IGksIHJlc3VsdGxlbmd0aCwgcmVzbGVubmVlZGVkOworICogVUVycm9yQ29k
ZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgKiBVRmllbGRQb3NpdGlvbiBwb3M7CisgKiB1aW50
MzJfdCBhW10gPSB7IDEyMywgMzMzMywgLTEyMzQ1NjcgfTsKKyAqIGNvbnN0IHVpbnQzMl90IGFf
bGVuID0gc2l6ZW9mKGEpIC8gc2l6ZW9mKGFbMF0pOworICogVU51bWJlckZvcm1hdCogbmY7Cisg
KiBVQ2hhciogcmVzdWx0ID0gTlVMTDsKKyAqCisgKiBuZiA9IHVudW1fb3BlbihVTlVNX0RFRkFV
TFQsIE5VTEwsIC0xLCBOVUxMLCBOVUxMLCAmc3RhdHVzKTsKKyAqIGZvciAoaSA9IDA7IGkgPCBh
X2xlbjsgaSsrKSB7CisgKiAgICByZXN1bHRsZW5ndGg9MDsKKyAqICAgIHJlc2xlbm5lZWRlZD11
bnVtX2Zvcm1hdChuZiwgYVtpXSwgTlVMTCwgcmVzdWx0bGVuZ3RoLCAmcG9zLCAmc3RhdHVzKTsK
KyAqICAgIHJlc3VsdCA9IE5VTEw7CisgKiAgICBpZihzdGF0dXM9PVVfQlVGRkVSX09WRVJGTE9X
X0VSUk9SKXsKKyAqICAgICAgIHN0YXR1cz1VX1pFUk9fRVJST1I7CisgKiAgICAgICByZXN1bHRs
ZW5ndGg9cmVzbGVubmVlZGVkKzE7CisgKiAgICAgICByZXN1bHQ9KFVDaGFyKiltYWxsb2Moc2l6
ZW9mKFVDaGFyKSAqIHJlc3VsdGxlbmd0aCk7CisgKiAgICAgICB1bnVtX2Zvcm1hdChuZiwgYVtp
XSwgcmVzdWx0LCByZXN1bHRsZW5ndGgsICZwb3MsICZzdGF0dXMpOworICogICAgfQorICogICAg
cHJpbnRmKCAiIEV4YW1wbGUgMjogJXNcbiIsIGF1c3RyZHVwKHJlc3VsdCkpOworICogICAgZnJl
ZShyZXN1bHQpOworICogfQorICogXGVuZGNvZGUKKyAqIDwvcHJlPgorICogVG8gZm9ybWF0IGEg
bnVtYmVyIGZvciBhIGRpZmZlcmVudCBMb2NhbGUsIHNwZWNpZnkgaXQgaW4gdGhlCisgKiBjYWxs
IHRvIHVudW1fb3BlbigpLgorICogPHByZT4KKyAqIFxjb2RlCisgKiAgICAgVU51bWJlckZvcm1h
dCogbmYgPSB1bnVtX29wZW4oVU5VTV9ERUZBVUxULCBOVUxMLCAtMSwgImZyX0ZSIiwgTlVMTCwg
JnN1Y2Nlc3MpCisgKiBcZW5kY29kZQorICogPC9wcmU+CisgKiBZb3UgY2FuIHVzZSBhIE51bWJl
ckZvcm1hdCBBUEkgdW51bV9wYXJzZSgpIHRvIHBhcnNlLgorICogPHByZT4KKyAqIFxjb2RlCisg
KiAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAqICAgIGludDMyX3QgcG9z
PTA7CisgKiAgICBpbnQzMl90IG51bTsKKyAqICAgIG51bSA9IHVudW1fcGFyc2UobmYsIHN0ciwg
dV9zdHJsZW4oc3RyKSwgJnBvcywgJnN0YXR1cyk7CisgKiBcZW5kY29kZQorICogPC9wcmU+Cisg
KiBVc2UgVU5VTV9ERUNJTUFMIHRvIGdldCB0aGUgbm9ybWFsIG51bWJlciBmb3JtYXQgZm9yIHRo
YXQgY291bnRyeS4KKyAqIFRoZXJlIGFyZSBvdGhlciBzdGF0aWMgb3B0aW9ucyBhdmFpbGFibGUu
ICBVc2UgVU5VTV9DVVJSRU5DWQorICogdG8gZ2V0IHRoZSBjdXJyZW5jeSBudW1iZXIgZm9ybWF0
IGZvciB0aGF0IGNvdW50cnkuICBVc2UgVU5VTV9QRVJDRU5UCisgKiB0byBnZXQgYSBmb3JtYXQg
Zm9yIGRpc3BsYXlpbmcgcGVyY2VudGFnZXMuIFdpdGggdGhpcyBmb3JtYXQsIGEKKyAqIGZyYWN0
aW9uIGZyb20gMC41MyBpcyBkaXNwbGF5ZWQgYXMgNTMlLgorICogPFA+CisgKiBVc2UgYSBwYXR0
ZXJuIHRvIGNyZWF0ZSBlaXRoZXIgYSBEZWNpbWFsRm9ybWF0IG9yIGEgUnVsZUJhc2VkTnVtYmVy
Rm9ybWF0CisgKiBmb3JtYXR0ZXIuICBUaGUgcGF0dGVybiBtdXN0IGNvbmZvcm0gdG8gdGhlIHN5
bnRheCBkZWZpbmVkIGZvciB0aG9zZQorICogZm9ybWF0dGVycy4KKyAqIDxQPgorICogWW91IGNh
biBhbHNvIGNvbnRyb2wgdGhlIGRpc3BsYXkgb2YgbnVtYmVycyB3aXRoIHN1Y2ggZnVuY3Rpb24g
YXMKKyAqIHVudW1fZ2V0QXR0cmlidWVzKCkgYW5kIHVudW1fc2V0QXRyaWJ1dGVzKCksIHdoaWNo
IGxldCB5b3Ugc2V0IHRoZQorICogbWltaW51bSBmcmFjdGlvbiBkaWdpdHMsIGdyb3VwaW5nLCBl
dGMuCisgKiBAc2VlIFVOdW1iZXJGb3JtYXRBdHRyaWJ1dGVzIGZvciBtb3JlIGRldGFpbHMKKyAq
IDxQPgorICogWW91IGNhbiBhbHNvIHVzZSBmb3JtcyBvZiB0aGUgcGFyc2UgYW5kIGZvcm1hdCBt
ZXRob2RzIHdpdGgKKyAqIFBhcnNlUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHRvIGFsbG93
IHlvdSB0bzoKKyAqIDx1bCB0eXBlPXJvdW5kPgorICogICA8bGk+KGEpIHByb2dyZXNzaXZlbHkg
cGFyc2UgdGhyb3VnaCBwaWVjZXMgb2YgYSBzdHJpbmcuCisgKiAgIDxsaT4oYikgYWxpZ24gdGhl
IGRlY2ltYWwgcG9pbnQgYW5kIG90aGVyIGFyZWFzLgorICogPC91bD4KKyAqIDxwPgorICogSXQg
aXMgYWxzbyBwb3NzaWJsZSB0byBjaGFuZ2Ugb3Igc2V0IHRoZSBzeW1ib2xzIHVzZWQgZm9yIGEg
cGFydGljdWxhcgorICogbG9jYWxlIGxpa2UgdGhlIGN1cnJlbmN5IHN5bWJvbCwgdGhlIGdyb3Vw
aW5nIHNlcGVyYXRvciAsIG1vbmV0YXJ5IHNlcGVyYXRvcgorICogZXRjIGJ5IG1ha2luZyB1c2Ug
b2YgZnVuY3Rpb25zIHVudW1fc2V0U3ltYm9scygpIGFuZCB1bnVtX2dldFN5bWJvbHMoKS4KKyAq
LworCisvKiogQSBudW1iZXIgZm9ybWF0dGVyLgorICogIEZvciB1c2FnZSBpbiBDIHByb2dyYW1z
LgorICogIEBzdGFibGUgSUNVIDIuMAorICovCit0eXBlZGVmIHZvaWQqIFVOdW1iZXJGb3JtYXQ7
CisKKy8qKiBUaGUgcG9zc2libGUgbnVtYmVyIGZvcm1hdCBzdHlsZXMuIAorICogIEBzdGFibGUg
SUNVIDIuMAorICovCit0eXBlZGVmIGVudW0gVU51bWJlckZvcm1hdFN0eWxlIHsKKyAgICAvKioK
KyAgICAgKiBEZWNpbWFsIGZvcm1hdCBkZWZpbmVkIGJ5IHBhdHRlcm4gCisgICAgICogQHN0YWJs
ZSBJQ1UgMy4wCisgICAgICovCisgICAgVU5VTV9QQVRURVJOX0RFQ0lNQUw9MCwKKyAgICAvKiog
RGVjaW1hbCBmb3JtYXQgKi8KKyAgICBVTlVNX0RFQ0lNQUw9MSwKKyAgICAvKiogQ3VycmVuY3kg
Zm9ybWF0ICovCisgICAgVU5VTV9DVVJSRU5DWSwKKyAgICAvKiogUGVyY2VudCBmb3JtYXQgKi8K
KyAgICBVTlVNX1BFUkNFTlQsCisgICAgLyoqIFNjaWVudGlmaWMgZm9ybWF0ICovCisgICAgVU5V
TV9TQ0lFTlRJRklDLAorICAgIC8qKiBTcGVsbG91dCBydWxlLWJhc2VkIGZvcm1hdCAqLworICAg
IFVOVU1fU1BFTExPVVQsCisgICAgLyoqIAorICAgICAqIE9yZGluYWwgcnVsZS1iYXNlZCBmb3Jt
YXQgCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVU5VTV9PUkRJTkFMLAor
ICAgIC8qKiAKKyAgICAgKiBEdXJhdGlvbiBydWxlLWJhc2VkIGZvcm1hdCAKKyAgICAgKiBAc3Rh
YmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVTlVNX0RVUkFUSU9OLAorICAgIC8qKiAKKyAgICAg
KiBOdW1iZXJpbmcgc3lzdGVtIHJ1bGUtYmFzZWQgZm9ybWF0IAorICAgICAqIEBzdGFibGUgSUNV
IDQuMgorICAgICAqLworICAgIFVOVU1fTlVNQkVSSU5HX1NZU1RFTSwKKyAgICAvKiogCisgICAg
ICogUnVsZS1iYXNlZCBmb3JtYXQgZGVmaW5lZCBieSBwYXR0ZXJuIAorICAgICAqIEBzdGFibGUg
SUNVIDMuMAorICAgICAqLworICAgIFVOVU1fUEFUVEVSTl9SVUxFQkFTRUQsCisgICAgLyoqIERl
ZmF1bHQgZm9ybWF0ICovCisgICAgVU5VTV9ERUZBVUxUID0gVU5VTV9ERUNJTUFMLAorICAgIC8q
KiAoQWxpYXMgZm9yIFVOVU1fUEFUVEVSTl9ERUNJTUFMKSAqLworICAgIFVOVU1fSUdOT1JFID0g
VU5VTV9QQVRURVJOX0RFQ0lNQUwKK30gVU51bWJlckZvcm1hdFN0eWxlOworCisvKiogVGhlIHBv
c3NpYmxlIG51bWJlciBmb3JtYXQgcm91bmRpbmcgbW9kZXMuIAorICogIEBzdGFibGUgSUNVIDIu
MAorICovCit0eXBlZGVmIGVudW0gVU51bWJlckZvcm1hdFJvdW5kaW5nTW9kZSB7CisgICAgVU5V
TV9ST1VORF9DRUlMSU5HLAorICAgIFVOVU1fUk9VTkRfRkxPT1IsCisgICAgVU5VTV9ST1VORF9E
T1dOLAorICAgIFVOVU1fUk9VTkRfVVAsCisgICAgLyoqCisgICAgICogSGFsZi1ldmVuIHJvdW5k
aW5nLCBtaXNzcGVsbGVkIG5hbWUKKyAgICAgKiBAZGVwcmVjYXRlZCwgSUNVIDMuOAorICAgICAq
LworICAgIFVOVU1fRk9VTkRfSEFMRkVWRU4sCisgICAgVU5VTV9ST1VORF9IQUxGRE9XTiwKKyAg
ICBVTlVNX1JPVU5EX0hBTEZVUCwKKyAgICAvKioKKyAgICAgKiBIYWxmLWV2ZW4gcm91bmRpbmcK
KyAgICAgKiBAc3RhYmxlLCBJQ1UgMy44CisgICAgICovCisgICAgVU5VTV9ST1VORF9IQUxGRVZF
TiA9IFVOVU1fRk9VTkRfSEFMRkVWRU4KK30gVU51bWJlckZvcm1hdFJvdW5kaW5nTW9kZTsKKwor
LyoqIFRoZSBwb3NzaWJsZSBudW1iZXIgZm9ybWF0IHBhZCBwb3NpdGlvbnMuIAorICogIEBzdGFi
bGUgSUNVIDIuMAorICovCit0eXBlZGVmIGVudW0gVU51bWJlckZvcm1hdFBhZFBvc2l0aW9uIHsK
KyAgICBVTlVNX1BBRF9CRUZPUkVfUFJFRklYLAorICAgIFVOVU1fUEFEX0FGVEVSX1BSRUZJWCwK
KyAgICBVTlVNX1BBRF9CRUZPUkVfU1VGRklYLAorICAgIFVOVU1fUEFEX0FGVEVSX1NVRkZJWAor
fSBVTnVtYmVyRm9ybWF0UGFkUG9zaXRpb247CisKKy8qKgorICogQ3JlYXRlIGFuZCByZXR1cm4g
YSBuZXcgVU51bWJlckZvcm1hdCBmb3IgZm9ybWF0dGluZyBhbmQgcGFyc2luZworICogbnVtYmVy
cy4gIEEgVU51bWJlckZvcm1hdCBtYXkgYmUgdXNlZCB0byBmb3JtYXQgbnVtYmVycyBieSBjYWxs
aW5nCisgKiB7QGxpbmsgI3VudW1fZm9ybWF0IH0sIGFuZCB0byBwYXJzZSBudW1iZXJzIGJ5IGNh
bGxpbmcge0BsaW5rICN1bnVtX3BhcnNlIH0uCisgKiBUaGUgY2FsbGVyIG11c3QgY2FsbCB7QGxp
bmsgI3VudW1fY2xvc2UgfSB3aGVuIGRvbmUgdG8gcmVsZWFzZSByZXNvdXJjZXMKKyAqIHVzZWQg
YnkgdGhpcyBvYmplY3QuCisgKiBAcGFyYW0gc3R5bGUgVGhlIHR5cGUgb2YgbnVtYmVyIGZvcm1h
dCB0byBvcGVuOiBvbmUgb2YKKyAqIFVOVU1fREVDSU1BTCwgVU5VTV9DVVJSRU5DWSwgVU5VTV9Q
RVJDRU5ULCBVTlVNX1NDSUVOVElGSUMsIFVOVU1fU1BFTExPVVQsCisgKiBVTlVNX1BBVFRFUk5f
REVDSU1BTCwgVU5VTV9QQVRURVJOX1JVTEVCQVNFRCwgb3IgVU5VTV9ERUZBVUxULgorICogSWYg
VU5VTV9QQVRURVJOX0RFQ0lNQUwgb3IgVU5VTV9QQVRURVJOX1JVTEVCQVNFRCBpcyBwYXNzZWQg
dGhlbiB0aGUKKyAqIG51bWJlciBmb3JtYXQgaXMgb3BlbmVkIHVzaW5nIHRoZSBnaXZlbiBwYXR0
ZXJuLCB3aGljaCBtdXN0IGNvbmZvcm0KKyAqIHRvIHRoZSBzeW50YXggZGVzY3JpYmVkIGluIERl
Y2ltYWxGb3JtYXQgb3IgUnVsZUJhc2VkTnVtYmVyRm9ybWF0LAorICogcmVzcGVjdGl2ZWx5Lgor
ICogQHBhcmFtIHBhdHRlcm4gQSBwYXR0ZXJuIHNwZWNpZnlpbmcgdGhlIGZvcm1hdCB0byB1c2Uu
IAorICogVGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCB1bmxlc3MgdGhlIHN0eWxlIGlzCisgKiBV
TlVNX1BBVFRFUk5fREVDSU1BTCBvciBVTlVNX1BBVFRFUk5fUlVMRUJBU0VELgorICogQHBhcmFt
IHBhdHRlcm5MZW5ndGggVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuLCBv
ciAtMQorICogaWYgbnVsbC10ZXJtaW5hdGVkLiBUaGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIHVu
bGVzcyB0aGUgc3R5bGUgaXMKKyAqIFVOVU1fUEFUVEVSTi4KKyAqIEBwYXJhbSBsb2NhbGUgQSBs
b2NhbGUgaWRlbnRpZmllciB0byB1c2UgdG8gZGV0ZXJtaW5lIGZvcm1hdHRpbmcKKyAqIGFuZCBw
YXJzaW5nIGNvbnZlbnRpb25zLCBvciBOVUxMIHRvIHVzZSB0aGUgZGVmYXVsdCBsb2NhbGUuCisg
KiBAcGFyYW0gcGFyc2VFcnIgQSBwb2ludGVyIHRvIGEgVVBhcnNlRXJyb3Igc3RydWN0IHRvIHJl
Y2VpdmUgdGhlCisgKiBkZXRhaWxzIG9mIGFueSBwYXJzaW5nIGVycm9ycywgb3IgTlVMTCBpZiBu
byBwYXJzaW5nIGVycm9yIGRldGFpbHMKKyAqIGFyZSBkZXNpcmVkLgorICogQHBhcmFtIHN0YXR1
cyBBIHBvaW50ZXIgdG8gYW4gaW5wdXQtb3V0cHV0IFVFcnJvckNvZGUuCisgKiBAcmV0dXJuIEEg
cG9pbnRlciB0byBhIG5ld2x5IGNyZWF0ZWQgVU51bWJlckZvcm1hdCwgb3IgTlVMTCBpZiBhbgor
ICogZXJyb3Igb2NjdXJyZWQuCisgKiBAc2VlIHVudW1fY2xvc2UKKyAqIEBzZWUgRGVjaW1hbEZv
cm1hdAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIFVOdW1iZXJGb3JtYXQqIFVf
RVhQT1JUMiAKK3VudW1fb3BlbiggIFVOdW1iZXJGb3JtYXRTdHlsZSAgICBzdHlsZSwKKyAgICAg
ICAgICAgIGNvbnN0ICAgIFVDaGFyKiAgICBwYXR0ZXJuLAorICAgICAgICAgICAgaW50MzJfdCAg
ICAgICAgICAgIHBhdHRlcm5MZW5ndGgsCisgICAgICAgICAgICBjb25zdCAgICBjaGFyKiAgICAg
bG9jYWxlLAorICAgICAgICAgICAgVVBhcnNlRXJyb3IqICAgICAgIHBhcnNlRXJyLAorICAgICAg
ICAgICAgVUVycm9yQ29kZSogICAgICAgIHN0YXR1cyk7CisKKworLyoqCisqIENsb3NlIGEgVU51
bWJlckZvcm1hdC4KKyogT25jZSBjbG9zZWQsIGEgVU51bWJlckZvcm1hdCBtYXkgbm8gbG9uZ2Vy
IGJlIHVzZWQuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBjbG9zZS4KKyogQHN0YWJs
ZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1bnVtX2Nsb3NlKFVOdW1i
ZXJGb3JtYXQqIGZtdCk7CisKKyNpZiBVX1NIT1dfQ1BMVVNQTFVTX0FQSQorCitVX05BTUVTUEFD
RV9CRUdJTgorCisvKioKKyAqIFxjbGFzcyBMb2NhbFVOdW1iZXJGb3JtYXRQb2ludGVyCisgKiAi
U21hcnQgcG9pbnRlciIgY2xhc3MsIGNsb3NlcyBhIFVOdW1iZXJGb3JtYXQgdmlhIHVudW1fY2xv
c2UoKS4KKyAqIEZvciBtb3N0IG1ldGhvZHMgc2VlIHRoZSBMb2NhbFBvaW50ZXJCYXNlIGJhc2Ug
Y2xhc3MuCisgKgorICogQHNlZSBMb2NhbFBvaW50ZXJCYXNlCisgKiBAc2VlIExvY2FsUG9pbnRl
cgorICogQHN0YWJsZSBJQ1UgNC40CisgKi8KK1VfREVGSU5FX0xPQ0FMX09QRU5fUE9JTlRFUihM
b2NhbFVOdW1iZXJGb3JtYXRQb2ludGVyLCBVTnVtYmVyRm9ybWF0LCB1bnVtX2Nsb3NlKTsKKwor
VV9OQU1FU1BBQ0VfRU5ECisKKyNlbmRpZgorCisvKioKKyAqIE9wZW4gYSBjb3B5IG9mIGEgVU51
bWJlckZvcm1hdC4KKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSBkZWVwIGNvcHkuCisgKiBA
cGFyYW0gZm10IFRoZSBmb3JtYXQgdG8gY29weQorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIg
dG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMuCisgKiBAcmV0dXJuIEEgcG9p
bnRlciB0byBhIFVOdW1iZXJGb3JtYXQgaWRlbnRpY2FsIHRvIGZtdC4KKyAqIEBzdGFibGUgSUNV
IDIuMAorICovCitVX1NUQUJMRSBVTnVtYmVyRm9ybWF0KiBVX0VYUE9SVDIgCit1bnVtX2Nsb25l
KGNvbnN0IFVOdW1iZXJGb3JtYXQgKmZtdCwKKyAgICAgICBVRXJyb3JDb2RlICpzdGF0dXMpOwor
CisvKioKKyogRm9ybWF0IGFuIGludGVnZXIgdXNpbmcgYSBVTnVtYmVyRm9ybWF0LgorKiBUaGUg
aW50ZWdlciB3aWxsIGJlIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIFVOdW1iZXJGb3JtYXQn
cyBsb2NhbGUuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byB1c2UuCisqIEBwYXJhbSBu
dW1iZXIgVGhlIG51bWJlciB0byBmb3JtYXQuCisqIEBwYXJhbSByZXN1bHQgQSBwb2ludGVyIHRv
IGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIGZvcm1hdHRlZCBudW1iZXIuCisqIEBwYXJhbSByZXN1
bHRMZW5ndGggVGhlIG1heGltdW0gc2l6ZSBvZiByZXN1bHQuCisqIEBwYXJhbSBwb3MgICAgQSBw
b2ludGVyIHRvIGEgVUZpZWxkUG9zaXRpb24uICBPbiBpbnB1dCwgcG9zaXRpb24tPmZpZWxkCisq
IGlzIHJlYWQuICBPbiBvdXRwdXQsIHBvc2l0aW9uLT5iZWdpbkluZGV4IGFuZCBwb3NpdGlvbi0+
ZW5kSW5kZXggaW5kaWNhdGUKKyogdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIGluZGljZXMgb2Yg
ZmllbGQgbnVtYmVyIHBvc2l0aW9uLT5maWVsZCwgaWYgc3VjaAorKiBhIGZpZWxkIGV4aXN0cy4g
IFRoaXMgcGFyYW1ldGVyIG1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIG5vIGZpZWxkCisqIEBw
YXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJy
b3JzCisqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0
aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorKiBAc2VlIHVudW1f
Zm9ybWF0SW50NjQKKyogQHNlZSB1bnVtX2Zvcm1hdERvdWJsZQorKiBAc2VlIHVudW1fcGFyc2UK
KyogQHNlZSB1bnVtX3BhcnNlSW50NjQKKyogQHNlZSB1bnVtX3BhcnNlRG91YmxlCisqIEBzZWUg
VUZpZWxkUG9zaXRpb24KKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBV
X0VYUE9SVDIgCit1bnVtX2Zvcm1hdCggICAgY29uc3QgICAgVU51bWJlckZvcm1hdCogICAgZm10
LAorICAgICAgICBpbnQzMl90ICAgICAgICAgICAgbnVtYmVyLAorICAgICAgICBVQ2hhciogICAg
ICAgICAgICByZXN1bHQsCisgICAgICAgIGludDMyX3QgICAgICAgICAgICByZXN1bHRMZW5ndGgs
CisgICAgICAgIFVGaWVsZFBvc2l0aW9uICAgICpwb3MsCisgICAgICAgIFVFcnJvckNvZGUqICAg
ICAgICBzdGF0dXMpOworCisvKioKKyogRm9ybWF0IGFuIGludDY0IHVzaW5nIGEgVU51bWJlckZv
cm1hdC4KKyogVGhlIGludDY0IHdpbGwgYmUgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgVU51
bWJlckZvcm1hdCdzIGxvY2FsZS4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHVzZS4K
KyogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIHRvIGZvcm1hdC4KKyogQHBhcmFtIHJlc3VsdCBB
IHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgZm9ybWF0dGVkIG51bWJlci4KKyog
QHBhcmFtIHJlc3VsdExlbmd0aCBUaGUgbWF4aW11bSBzaXplIG9mIHJlc3VsdC4KKyogQHBhcmFt
IHBvcyAgICBBIHBvaW50ZXIgdG8gYSBVRmllbGRQb3NpdGlvbi4gIE9uIGlucHV0LCBwb3NpdGlv
bi0+ZmllbGQKKyogaXMgcmVhZC4gIE9uIG91dHB1dCwgcG9zaXRpb24tPmJlZ2luSW5kZXggYW5k
IHBvc2l0aW9uLT5lbmRJbmRleCBpbmRpY2F0ZQorKiB0aGUgYmVnaW5uaW5nIGFuZCBlbmRpbmcg
aW5kaWNlcyBvZiBmaWVsZCBudW1iZXIgcG9zaXRpb24tPmZpZWxkLCBpZiBzdWNoCisqIGEgZmll
bGQgZXhpc3RzLiAgVGhpcyBwYXJhbWV0ZXIgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2Ugbm8g
ZmllbGQKKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNl
aXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUgdG90YWwgYnVmZmVyIHNpemUgbmVlZGVkOyBp
ZiBncmVhdGVyIHRoYW4gcmVzdWx0TGVuZ3RoLCB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisq
IEBzZWUgdW51bV9mb3JtYXQKKyogQHNlZSB1bnVtX2Zvcm1hdERvdWJsZQorKiBAc2VlIHVudW1f
cGFyc2UKKyogQHNlZSB1bnVtX3BhcnNlSW50NjQKKyogQHNlZSB1bnVtX3BhcnNlRG91YmxlCisq
IEBzZWUgVUZpZWxkUG9zaXRpb24KKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50
MzJfdCBVX0VYUE9SVDIgCit1bnVtX2Zvcm1hdEludDY0KGNvbnN0IFVOdW1iZXJGb3JtYXQgKmZt
dCwKKyAgICAgICAgaW50NjRfdCAgICAgICAgIG51bWJlciwKKyAgICAgICAgVUNoYXIqICAgICAg
ICAgIHJlc3VsdCwKKyAgICAgICAgaW50MzJfdCAgICAgICAgIHJlc3VsdExlbmd0aCwKKyAgICAg
ICAgVUZpZWxkUG9zaXRpb24gKnBvcywKKyAgICAgICAgVUVycm9yQ29kZSogICAgIHN0YXR1cyk7
CisKKy8qKgorKiBGb3JtYXQgYSBkb3VibGUgdXNpbmcgYSBVTnVtYmVyRm9ybWF0LgorKiBUaGUg
ZG91YmxlIHdpbGwgYmUgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgVU51bWJlckZvcm1hdCdz
IGxvY2FsZS4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHVzZS4KKyogQHBhcmFtIG51
bWJlciBUaGUgbnVtYmVyIHRvIGZvcm1hdC4KKyogQHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8g
YSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgZm9ybWF0dGVkIG51bWJlci4KKyogQHBhcmFtIHJlc3Vs
dExlbmd0aCBUaGUgbWF4aW11bSBzaXplIG9mIHJlc3VsdC4KKyogQHBhcmFtIHBvcyAgICBBIHBv
aW50ZXIgdG8gYSBVRmllbGRQb3NpdGlvbi4gIE9uIGlucHV0LCBwb3NpdGlvbi0+ZmllbGQKKyog
aXMgcmVhZC4gIE9uIG91dHB1dCwgcG9zaXRpb24tPmJlZ2luSW5kZXggYW5kIHBvc2l0aW9uLT5l
bmRJbmRleCBpbmRpY2F0ZQorKiB0aGUgYmVnaW5uaW5nIGFuZCBlbmRpbmcgaW5kaWNlcyBvZiBm
aWVsZCBudW1iZXIgcG9zaXRpb24tPmZpZWxkLCBpZiBzdWNoCisqIGEgZmllbGQgZXhpc3RzLiAg
VGhpcyBwYXJhbWV0ZXIgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2Ugbm8gZmllbGQKKyogQHBh
cmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJv
cnMKKyogQHJldHVybiBUaGUgdG90YWwgYnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVyIHRo
YW4gcmVzdWx0TGVuZ3RoLCB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisqIEBzZWUgdW51bV9m
b3JtYXQKKyogQHNlZSB1bnVtX2Zvcm1hdEludDY0CisqIEBzZWUgdW51bV9wYXJzZQorKiBAc2Vl
IHVudW1fcGFyc2VJbnQ2NAorKiBAc2VlIHVudW1fcGFyc2VEb3VibGUKKyogQHNlZSBVRmllbGRQ
b3NpdGlvbgorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JU
MiAKK3VudW1fZm9ybWF0RG91YmxlKCAgICBjb25zdCAgICBVTnVtYmVyRm9ybWF0KiAgZm10LAor
ICAgICAgICAgICAgZG91YmxlICAgICAgICAgIG51bWJlciwKKyAgICAgICAgICAgIFVDaGFyKiAg
ICAgICAgICByZXN1bHQsCisgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgcmVzdWx0TGVuZ3Ro
LAorICAgICAgICAgICAgVUZpZWxkUG9zaXRpb24gICpwb3MsIC8qIDAgaWYgaWdub3JlICovCisg
ICAgICAgICAgICBVRXJyb3JDb2RlKiAgICAgc3RhdHVzKTsKKworLyoqCisqIEZvcm1hdCBhIGRl
Y2ltYWwgbnVtYmVyIHVzaW5nIGEgVU51bWJlckZvcm1hdC4KKyogVGhlIG51bWJlciB3aWxsIGJl
IGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIFVOdW1iZXJGb3JtYXQncyBsb2NhbGUuCisqIFRo
ZSBzeW50YXggb2YgdGhlIGlucHV0IG51bWJlciBpcyBhICJudW1lcmljIHN0cmluZyIKKyogYXMg
ZGVmaW5lZCBpbiB0aGUgRGVjaW1hbCBBcml0aG1ldGljIFNwZWNpZmljYXRpb24sIGF2YWlsYWJs
ZSBhdAorKiBodHRwOi8vc3BlbGVvdHJvdmUuY29tL2RlY2ltYWwKKyogQHBhcmFtIGZtdCBUaGUg
Zm9ybWF0dGVyIHRvIHVzZS4KKyogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIHRvIGZvcm1hdC4K
KyogQHBhcmFtIGxlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBudW1iZXIsIG9yIC0xIGlm
IHRoZSBpbnB1dCBpcyBudWwtdGVybWluYXRlZC4KKyogQHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIg
dG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgZm9ybWF0dGVkIG51bWJlci4KKyogQHBhcmFtIHJl
c3VsdExlbmd0aCBUaGUgbWF4aW11bSBzaXplIG9mIHJlc3VsdC4KKyogQHBhcmFtIHBvcyAgICBB
IHBvaW50ZXIgdG8gYSBVRmllbGRQb3NpdGlvbi4gIE9uIGlucHV0LCBwb3NpdGlvbi0+ZmllbGQK
KyogICAgICAgICAgICAgICBpcyByZWFkLiAgT24gb3V0cHV0LCBwb3NpdGlvbi0+YmVnaW5JbmRl
eCBhbmQgcG9zaXRpb24tPmVuZEluZGV4IGluZGljYXRlCisqICAgICAgICAgICAgICAgdGhlIGJl
Z2lubmluZyBhbmQgZW5kaW5nIGluZGljZXMgb2YgZmllbGQgbnVtYmVyIHBvc2l0aW9uLT5maWVs
ZCwgaWYgc3VjaAorKiAgICAgICAgICAgICAgIGEgZmllbGQgZXhpc3RzLiAgVGhpcyBwYXJhbWV0
ZXIgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2UgaXQgaXMgaWdub3JlZC4KKyogQHBhcmFtIHN0
YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyog
QHJldHVybiBUaGUgdG90YWwgYnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVyIHRoYW4gcmVz
dWx0TGVuZ3RoLCB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisqIEBzZWUgdW51bV9mb3JtYXQK
KyogQHNlZSB1bnVtX2Zvcm1hdEludDY0CisqIEBzZWUgdW51bV9wYXJzZQorKiBAc2VlIHVudW1f
cGFyc2VJbnQ2NAorKiBAc2VlIHVudW1fcGFyc2VEb3VibGUKKyogQHNlZSBVRmllbGRQb3NpdGlv
bgorKiBAc3RhYmxlIElDVSA0LjQgCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1
bnVtX2Zvcm1hdERlY2ltYWwoICAgIGNvbnN0ICAgIFVOdW1iZXJGb3JtYXQqICBmbXQsCisgICAg
ICAgICAgICBjb25zdCBjaGFyICogICAgbnVtYmVyLAorICAgICAgICAgICAgaW50MzJfdCAgICAg
ICAgIGxlbmd0aCwKKyAgICAgICAgICAgIFVDaGFyKiAgICAgICAgICByZXN1bHQsCisgICAgICAg
ICAgICBpbnQzMl90ICAgICAgICAgcmVzdWx0TGVuZ3RoLAorICAgICAgICAgICAgVUZpZWxkUG9z
aXRpb24gICpwb3MsIC8qIDAgaWYgaWdub3JlICovCisgICAgICAgICAgICBVRXJyb3JDb2RlKiAg
ICAgc3RhdHVzKTsKKworLyoqCisgKiBGb3JtYXQgYSBkb3VibGUgY3VycmVuY3kgYW1vdW50IHVz
aW5nIGEgVU51bWJlckZvcm1hdC4KKyAqIFRoZSBkb3VibGUgd2lsbCBiZSBmb3JtYXR0ZWQgYWNj
b3JkaW5nIHRvIHRoZSBVTnVtYmVyRm9ybWF0J3MgbG9jYWxlLgorICogQHBhcmFtIGZtdCB0aGUg
Zm9ybWF0dGVyIHRvIHVzZQorICogQHBhcmFtIG51bWJlciB0aGUgbnVtYmVyIHRvIGZvcm1hdAor
ICogQHBhcmFtIGN1cnJlbmN5IHRoZSAzLWxldHRlciBudWxsLXRlcm1pbmF0ZWQgSVNPIDQyMTcg
Y3VycmVuY3kgY29kZQorICogQHBhcmFtIHJlc3VsdCBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0
byByZWNlaXZlIHRoZSBmb3JtYXR0ZWQgbnVtYmVyCisgKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIHRo
ZSBtYXhpbXVtIG51bWJlciBvZiBVQ2hhcnMgdG8gd3JpdGUgdG8gcmVzdWx0CisgKiBAcGFyYW0g
cG9zIGEgcG9pbnRlciB0byBhIFVGaWVsZFBvc2l0aW9uLiAgT24gaW5wdXQsCisgKiBwb3NpdGlv
bi0+ZmllbGQgaXMgcmVhZC4gIE9uIG91dHB1dCwgcG9zaXRpb24tPmJlZ2luSW5kZXggYW5kCisg
KiBwb3NpdGlvbi0+ZW5kSW5kZXggaW5kaWNhdGUgdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIGlu
ZGljZXMgb2YKKyAqIGZpZWxkIG51bWJlciBwb3NpdGlvbi0+ZmllbGQsIGlmIHN1Y2ggYSBmaWVs
ZCBleGlzdHMuICBUaGlzCisgKiBwYXJhbWV0ZXIgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2Ug
aXQgaXMgaWdub3JlZC4KKyAqIEBwYXJhbSBzdGF0dXMgYSBwb2ludGVyIHRvIGFuIGlucHV0LW91
dHB1dCBVRXJyb3JDb2RlCisgKiBAcmV0dXJuIHRoZSB0b3RhbCBidWZmZXIgc2l6ZSBuZWVkZWQ7
IGlmIGdyZWF0ZXIgdGhhbiByZXN1bHRMZW5ndGgsCisgKiB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0
ZWQuCisgKiBAc2VlIHVudW1fZm9ybWF0RG91YmxlCisgKiBAc2VlIHVudW1fcGFyc2VEb3VibGVD
dXJyZW5jeQorICogQHNlZSBVRmllbGRQb3NpdGlvbgorICogQHN0YWJsZSBJQ1UgMy4wCisgKi8K
K1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordW51bV9mb3JtYXREb3VibGVDdXJyZW5jeShj
b25zdCBVTnVtYmVyRm9ybWF0KiBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJs
ZSBudW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyKiBjdXJyZW5jeSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIqIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50MzJfdCByZXN1bHRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IFVGaWVsZFBvc2l0aW9uKiBwb3MsIC8qIGlnbm9yZWQgaWYgMCAqLworICAgICAgICAgICAgICAg
ICAgICAgICAgICBVRXJyb3JDb2RlKiBzdGF0dXMpOworCisvKioKKyogUGFyc2UgYSBzdHJpbmcg
aW50byBhbiBpbnRlZ2VyIHVzaW5nIGEgVU51bWJlckZvcm1hdC4KKyogVGhlIHN0cmluZyB3aWxs
IGJlIHBhcnNlZCBhY2NvcmRpbmcgdG8gdGhlIFVOdW1iZXJGb3JtYXQncyBsb2NhbGUuCisqIEBw
YXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byB1c2UuCisqIEBwYXJhbSB0ZXh0IFRoZSB0ZXh0IHRv
IHBhcnNlLgorKiBAcGFyYW0gdGV4dExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRleHQsIG9yIC0xIGlm
IG51bGwtdGVybWluYXRlZC4KKyogQHBhcmFtIHBhcnNlUG9zIElmIG5vdCAwLCBvbiBpbnB1dCBh
IHBvaW50ZXIgdG8gYW4gaW50ZWdlciBzcGVjaWZ5aW5nIHRoZSBvZmZzZXQgYXQgd2hpY2gKKyog
dG8gYmVnaW4gcGFyc2luZy4gIElmIG5vdCAwLCBvbiBvdXRwdXQgdGhlIG9mZnNldCBhdCB3aGlj
aCBwYXJzaW5nIGVuZGVkLgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JD
b2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgcGFy
c2VkIGludGVnZXIKKyogQHNlZSB1bnVtX3BhcnNlSW50NjQKKyogQHNlZSB1bnVtX3BhcnNlRG91
YmxlCisqIEBzZWUgdW51bV9mb3JtYXQKKyogQHNlZSB1bnVtX2Zvcm1hdEludDY0CisqIEBzZWUg
dW51bV9mb3JtYXREb3VibGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJf
dCBVX0VYUE9SVDIgCit1bnVtX3BhcnNlKCAgICBjb25zdCAgIFVOdW1iZXJGb3JtYXQqICBmbXQs
CisgICAgICAgIGNvbnN0ICAgVUNoYXIqICAgICAgICAgIHRleHQsCisgICAgICAgIGludDMyX3Qg
ICAgICAgICB0ZXh0TGVuZ3RoLAorICAgICAgICBpbnQzMl90ICAgICAgICAgKnBhcnNlUG9zIC8q
IDAgPSBzdGFydCAqLywKKyAgICAgICAgVUVycm9yQ29kZSAgICAgICpzdGF0dXMpOworCisvKioK
KyogUGFyc2UgYSBzdHJpbmcgaW50byBhbiBpbnQ2NCB1c2luZyBhIFVOdW1iZXJGb3JtYXQuCisq
IFRoZSBzdHJpbmcgd2lsbCBiZSBwYXJzZWQgYWNjb3JkaW5nIHRvIHRoZSBVTnVtYmVyRm9ybWF0
J3MgbG9jYWxlLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gdXNlLgorKiBAcGFyYW0g
dGV4dCBUaGUgdGV4dCB0byBwYXJzZS4KKyogQHBhcmFtIHRleHRMZW5ndGggVGhlIGxlbmd0aCBv
ZiB0ZXh0LCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisqIEBwYXJhbSBwYXJzZVBvcyBJZiBu
b3QgMCwgb24gaW5wdXQgYSBwb2ludGVyIHRvIGFuIGludGVnZXIgc3BlY2lmeWluZyB0aGUgb2Zm
c2V0IGF0IHdoaWNoCisqIHRvIGJlZ2luIHBhcnNpbmcuICBJZiBub3QgMCwgb24gb3V0cHV0IHRo
ZSBvZmZzZXQgYXQgd2hpY2ggcGFyc2luZyBlbmRlZC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50
ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUg
dmFsdWUgb2YgdGhlIHBhcnNlZCBpbnRlZ2VyCisqIEBzZWUgdW51bV9wYXJzZQorKiBAc2VlIHVu
dW1fcGFyc2VEb3VibGUKKyogQHNlZSB1bnVtX2Zvcm1hdAorKiBAc2VlIHVudW1fZm9ybWF0SW50
NjQKKyogQHNlZSB1bnVtX2Zvcm1hdERvdWJsZQorKiBAc3RhYmxlIElDVSAyLjgKKyovCitVX1NU
QUJMRSBpbnQ2NF90IFVfRVhQT1JUMiAKK3VudW1fcGFyc2VJbnQ2NChjb25zdCBVTnVtYmVyRm9y
bWF0KiAgZm10LAorICAgICAgICBjb25zdCBVQ2hhciogIHRleHQsCisgICAgICAgIGludDMyX3Qg
ICAgICAgdGV4dExlbmd0aCwKKyAgICAgICAgaW50MzJfdCAgICAgICAqcGFyc2VQb3MgLyogMCA9
IHN0YXJ0ICovLAorICAgICAgICBVRXJyb3JDb2RlICAgICpzdGF0dXMpOworCisvKioKKyogUGFy
c2UgYSBzdHJpbmcgaW50byBhIGRvdWJsZSB1c2luZyBhIFVOdW1iZXJGb3JtYXQuCisqIFRoZSBz
dHJpbmcgd2lsbCBiZSBwYXJzZWQgYWNjb3JkaW5nIHRvIHRoZSBVTnVtYmVyRm9ybWF0J3MgbG9j
YWxlLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gdXNlLgorKiBAcGFyYW0gdGV4dCBU
aGUgdGV4dCB0byBwYXJzZS4KKyogQHBhcmFtIHRleHRMZW5ndGggVGhlIGxlbmd0aCBvZiB0ZXh0
LCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisqIEBwYXJhbSBwYXJzZVBvcyBJZiBub3QgMCwg
b24gaW5wdXQgYSBwb2ludGVyIHRvIGFuIGludGVnZXIgc3BlY2lmeWluZyB0aGUgb2Zmc2V0IGF0
IHdoaWNoCisqIHRvIGJlZ2luIHBhcnNpbmcuICBJZiBub3QgMCwgb24gb3V0cHV0IHRoZSBvZmZz
ZXQgYXQgd2hpY2ggcGFyc2luZyBlbmRlZC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8g
YW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUgdmFsdWUg
b2YgdGhlIHBhcnNlZCBkb3VibGUKKyogQHNlZSB1bnVtX3BhcnNlCisqIEBzZWUgdW51bV9wYXJz
ZUludDY0CisqIEBzZWUgdW51bV9mb3JtYXQKKyogQHNlZSB1bnVtX2Zvcm1hdEludDY0CisqIEBz
ZWUgdW51bV9mb3JtYXREb3VibGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgZG91
YmxlIFVfRVhQT1JUMiAKK3VudW1fcGFyc2VEb3VibGUoICAgIGNvbnN0ICAgVU51bWJlckZvcm1h
dCogIGZtdCwKKyAgICAgICAgICAgIGNvbnN0ICAgVUNoYXIqICAgICAgICAgIHRleHQsCisgICAg
ICAgICAgICBpbnQzMl90ICAgICAgICAgdGV4dExlbmd0aCwKKyAgICAgICAgICAgIGludDMyX3Qg
ICAgICAgICAqcGFyc2VQb3MgLyogMCA9IHN0YXJ0ICovLAorICAgICAgICAgICAgVUVycm9yQ29k
ZSAgICAgICpzdGF0dXMpOworCisKKy8qKgorKiBQYXJzZSBhIG51bWJlciBmcm9tIGEgc3RyaW5n
IGludG8gYW4gdW5mb3JtYXR0ZWQgbnVtZXJpYyBzdHJpbmcgdXNpbmcgYSBVTnVtYmVyRm9ybWF0
LgorKiBUaGUgaW5wdXQgc3RyaW5nIHdpbGwgYmUgcGFyc2VkIGFjY29yZGluZyB0byB0aGUgVU51
bWJlckZvcm1hdCdzIGxvY2FsZS4KKyogVGhlIHN5bnRheCBvZiB0aGUgb3V0cHV0IGlzIGEgIm51
bWVyaWMgc3RyaW5nIgorKiBhcyBkZWZpbmVkIGluIHRoZSBEZWNpbWFsIEFyaXRobWV0aWMgU3Bl
Y2lmaWNhdGlvbiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly9zcGVsZW90cm92ZS5jb20vZGVjaW1h
bAorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gdXNlLgorKiBAcGFyYW0gdGV4dCBUaGUg
dGV4dCB0byBwYXJzZS4KKyogQHBhcmFtIHRleHRMZW5ndGggVGhlIGxlbmd0aCBvZiB0ZXh0LCBv
ciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisqIEBwYXJhbSBwYXJzZVBvcyBJZiBub3QgMCwgb24g
aW5wdXQgYSBwb2ludGVyIHRvIGFuIGludGVnZXIgc3BlY2lmeWluZyB0aGUgb2Zmc2V0IGF0IHdo
aWNoCisqICAgICAgICAgICAgICAgICB0byBiZWdpbiBwYXJzaW5nLiAgSWYgbm90IDAsIG9uIG91
dHB1dCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHBhcnNpbmcgZW5kZWQuCisqIEBwYXJhbSBvdXRCdWYg
QSAoY2hhciAqKSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgcGFyc2VkIG51bWJlciBhcyBhIHN0cmlu
Zy4gIFRoZSBvdXRwdXQgc3RyaW5nCisqICAgICAgICAgICAgICAgd2lsbCBiZSBudWwtdGVybWlu
YXRlZCBpZiB0aGVyZSBpcyBzdWZmaWNpZW50IHNwYWNlLgorKiBAcGFyYW0gb3V0QnVmTGVuZ3Ro
IFRoZSBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyLiAgTWF5IGJlIHplcm8sIGluIHdoaWNoIGNh
c2UKKyogICAgICAgICAgICAgICB0aGUgb3V0QnVmIHBvaW50ZXIgbWF5IGJlIE5VTEwsIGFuZCB0
aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlCisqICAgICAgICAgICAgICAgc2l6ZSBvZiB0aGUg
b3V0cHV0IHN0cmluZy4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29k
ZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBvdXRw
dXQgc3RyaW5nLCBub3QgaW5jbHVkaW5nIGFueSB0ZXJtaW5hdGluZyBudWwuCisqIEBzZWUgdW51
bV9wYXJzZQorKiBAc2VlIHVudW1fcGFyc2VJbnQ2NAorKiBAc2VlIHVudW1fZm9ybWF0CisqIEBz
ZWUgdW51bV9mb3JtYXRJbnQ2NAorKiBAc2VlIHVudW1fZm9ybWF0RG91YmxlCisqIEBzdGFibGUg
SUNVIDQuNAorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordW51bV9wYXJzZURlY2lt
YWwoY29uc3QgICBVTnVtYmVyRm9ybWF0KiAgZm10LAorICAgICAgICAgICAgICAgICBjb25zdCAg
IFVDaGFyKiAgICAgICAgICB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qg
ICAgICAgICB0ZXh0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAg
ICAgICAqcGFyc2VQb3MgLyogMCA9IHN0YXJ0ICovLAorICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgICAgICAgICAgICAqb3V0QnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludDMy
X3QgICAgICAgICBvdXRCdWZMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9y
Q29kZSAgICAgICpzdGF0dXMpOworCisvKioKKyAqIFBhcnNlIGEgc3RyaW5nIGludG8gYSBkb3Vi
bGUgYW5kIGEgY3VycmVuY3kgdXNpbmcgYSBVTnVtYmVyRm9ybWF0LgorICogVGhlIHN0cmluZyB3
aWxsIGJlIHBhcnNlZCBhY2NvcmRpbmcgdG8gdGhlIFVOdW1iZXJGb3JtYXQncyBsb2NhbGUuCisg
KiBAcGFyYW0gZm10IHRoZSBmb3JtYXR0ZXIgdG8gdXNlCisgKiBAcGFyYW0gdGV4dCB0aGUgdGV4
dCB0byBwYXJzZQorICogQHBhcmFtIHRleHRMZW5ndGggdGhlIGxlbmd0aCBvZiB0ZXh0LCBvciAt
MSBpZiBudWxsLXRlcm1pbmF0ZWQKKyAqIEBwYXJhbSBwYXJzZVBvcyBhIHBvaW50ZXIgdG8gYW4g
b2Zmc2V0IGluZGV4IGludG8gdGV4dCBhdCB3aGljaCB0bworICogYmVnaW4gcGFyc2luZy4gT24g
b3V0cHV0LCAqcGFyc2VQb3Mgd2lsbCBwb2ludCBhZnRlciB0aGUgbGFzdAorICogcGFyc2VkIGNo
YXJhY3Rlci4gIFRoaXMgcGFyYW1ldGVyIG1heSBiZSAwLCBpbiB3aGljaCBjYXNlIHBhcnNpbmcK
KyAqIGJlZ2lucyBhdCBvZmZzZXQgMC4KKyAqIEBwYXJhbSBjdXJyZW5jeSBhIHBvaW50ZXIgdG8g
dGhlIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBwYXJzZWQgbnVsbC0KKyAqIHRlcm1pbmF0ZWQgY3Vy
cmVuY3kuICBUaGlzIGJ1ZmZlciBtdXN0IGhhdmUgYSBjYXBhY2l0eSBvZiBhdCBsZWFzdAorICog
NCBVQ2hhcnMuCisgKiBAcGFyYW0gc3RhdHVzIGEgcG9pbnRlciB0byBhbiBpbnB1dC1vdXRwdXQg
VUVycm9yQ29kZQorICogQHJldHVybiB0aGUgcGFyc2VkIGRvdWJsZQorICogQHNlZSB1bnVtX3Bh
cnNlRG91YmxlCisgKiBAc2VlIHVudW1fZm9ybWF0RG91YmxlQ3VycmVuY3kKKyAqIEBzdGFibGUg
SUNVIDMuMAorICovCitVX1NUQUJMRSBkb3VibGUgVV9FWFBPUlQyCit1bnVtX3BhcnNlRG91Ymxl
Q3VycmVuY3koY29uc3QgVU51bWJlckZvcm1hdCogZm10LAorICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFVDaGFyKiB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qg
dGV4dExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90KiBwYXJzZVBvcywg
LyogMCA9IHN0YXJ0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIqIGN1cnJlbmN5
LAorICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUqIHN0YXR1cyk7CisKKy8qKgor
ICogU2V0IHRoZSBwYXR0ZXJuIHVzZWQgYnkgYSBVTnVtYmVyRm9ybWF0LiAgVGhpcyBjYW4gb25s
eSBiZSB1c2VkCisgKiBvbiBhIERlY2ltYWxGb3JtYXQsIG90aGVyIGZvcm1hdHMgcmV0dXJuIFVf
SUxMRUdBTF9BUkdVTUVOVF9FUlJPUgorICogaW4gdGhlIHN0YXR1cy4KKyAqIEBwYXJhbSBmb3Jt
YXQgVGhlIGZvcm1hdHRlciB0byBzZXQuCisgKiBAcGFyYW0gbG9jYWxpemVkIFRSVUUgaWYgdGhl
IHBhdHRlcm4gaXMgbG9jYWxpemVkLCBGQUxTRSBvdGhlcndpc2UuCisgKiBAcGFyYW0gcGF0dGVy
biBUaGUgbmV3IHBhdHRlcm4KKyAqIEBwYXJhbSBwYXR0ZXJuTGVuZ3RoIFRoZSBsZW5ndGggb2Yg
cGF0dGVybiwgb3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorICogQHBhcmFtIHBhcnNlRXJyb3Ig
QSBwb2ludGVyIHRvIFVQYXJzZUVycm9yIHRvIHJlY2lldmUgaW5mb3JtYXRpb24KKyAqIGFib3V0
IGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZywgb3IgTlVMTCBpZiBubyBwYXJzZSBlcnJv
cgorICogaW5mb3JtYXRpb24gaXMgZGVzaXJlZC4KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVy
IHRvIGFuIGlucHV0LW91dHB1dCBVRXJyb3JDb2RlLgorICogQHNlZSB1bnVtX3RvUGF0dGVybgor
ICogQHNlZSBEZWNpbWFsRm9ybWF0CisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUg
dm9pZCBVX0VYUE9SVDIgCit1bnVtX2FwcGx5UGF0dGVybiggICAgICAgICAgVU51bWJlckZvcm1h
dCAgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCAgICAgICAgICBs
b2NhbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ICAgVUNoYXIgICAgICAgICAgKnBh
dHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgIHBhdHRl
cm5MZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBhcnNlRXJyb3IgICAgKnBh
cnNlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgKnN0
YXR1cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKworLyoqCisqIEdl
dCBhIGxvY2FsZSBmb3Igd2hpY2ggZGVjaW1hbCBmb3JtYXR0aW5nIHBhdHRlcm5zIGFyZSBhdmFp
bGFibGUuCisqIEEgVU51bWJlckZvcm1hdCBpbiBhIGxvY2FsZSByZXR1cm5lZCBieSB0aGlzIGZ1
bmN0aW9uIHdpbGwgcGVyZm9ybSB0aGUgY29ycmVjdAorKiBmb3JtYXR0aW5nIGFuZCBwYXJzaW5n
IGZvciB0aGUgbG9jYWxlLiAgVGhlIHJlc3VsdHMgb2YgdGhpcyBjYWxsIGFyZSBub3QKKyogdmFs
aWQgZm9yIHJ1bGUtYmFzZWQgbnVtYmVyIGZvcm1hdHMuCisqIEBwYXJhbSBsb2NhbGVJbmRleCBU
aGUgaW5kZXggb2YgdGhlIGRlc2lyZWQgbG9jYWxlLgorKiBAcmV0dXJuIEEgbG9jYWxlIGZvciB3
aGljaCBudW1iZXIgZm9ybWF0dGluZyBwYXR0ZXJucyBhcmUgYXZhaWxhYmxlLCBvciAwIGlmIG5v
bmUuCisqIEBzZWUgdW51bV9jb3VudEF2YWlsYWJsZQorKiBAc3RhYmxlIElDVSAyLjAKKyovCitV
X1NUQUJMRSBjb25zdCBjaGFyKiBVX0VYUE9SVDIgCit1bnVtX2dldEF2YWlsYWJsZShpbnQzMl90
IGxvY2FsZUluZGV4KTsKKworLyoqCisqIERldGVybWluZSBob3cgbWFueSBsb2NhbGVzIGhhdmUg
ZGVjaW1hbCBmb3JtYXR0aW5nIHBhdHRlcm5zIGF2YWlsYWJsZS4gIFRoZQorKiByZXN1bHRzIG9m
IHRoaXMgY2FsbCBhcmUgbm90IHZhbGlkIGZvciBydWxlLWJhc2VkIG51bWJlciBmb3JtYXRzLgor
KiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCBmb3IgZGV0ZXJtaW5pbmcgdGhlIGxvb3AgZW5kaW5n
IGNvbmRpdGlvbiBmb3IKKyogY2FsbHMgdG8ge0BsaW5rICN1bnVtX2dldEF2YWlsYWJsZSB9Lgor
KiBAcmV0dXJuIFRoZSBudW1iZXIgb2YgbG9jYWxlcyBmb3Igd2hpY2ggZGVjaW1hbCBmb3JtYXR0
aW5nIHBhdHRlcm5zIGFyZSBhdmFpbGFibGUuCisqIEBzZWUgdW51bV9nZXRBdmFpbGFibGUKKyog
QHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1bnVtX2Nv
dW50QXZhaWxhYmxlKHZvaWQpOworCisvKiogVGhlIHBvc3NpYmxlIFVOdW1iZXJGb3JtYXQgbnVt
ZXJpYyBhdHRyaWJ1dGVzIEBzdGFibGUgSUNVIDIuMCAqLwordHlwZWRlZiBlbnVtIFVOdW1iZXJG
b3JtYXRBdHRyaWJ1dGUgeworICAvKiogUGFyc2UgaW50ZWdlcnMgb25seSAqLworICBVTlVNX1BB
UlNFX0lOVF9PTkxZLAorICAvKiogVXNlIGdyb3VwaW5nIHNlcGFyYXRvciAqLworICBVTlVNX0dS
T1VQSU5HX1VTRUQsCisgIC8qKiBBbHdheXMgc2hvdyBkZWNpbWFsIHBvaW50ICovCisgIFVOVU1f
REVDSU1BTF9BTFdBWVNfU0hPV04sCisgIC8qKiBNYXhpbXVtIGludGVnZXIgZGlnaXRzICovCisg
IFVOVU1fTUFYX0lOVEVHRVJfRElHSVRTLAorICAvKiogTWluaW11bSBpbnRlZ2VyIGRpZ2l0cyAq
LworICBVTlVNX01JTl9JTlRFR0VSX0RJR0lUUywKKyAgLyoqIEludGVnZXIgZGlnaXRzICovCisg
IFVOVU1fSU5URUdFUl9ESUdJVFMsCisgIC8qKiBNYXhpbXVtIGZyYWN0aW9uIGRpZ2l0cyAqLwor
ICBVTlVNX01BWF9GUkFDVElPTl9ESUdJVFMsCisgIC8qKiBNaW5pbXVtIGZyYWN0aW9uIGRpZ2l0
cyAqLworICBVTlVNX01JTl9GUkFDVElPTl9ESUdJVFMsCisgIC8qKiBGcmFjdGlvbiBkaWdpdHMg
Ki8KKyAgVU5VTV9GUkFDVElPTl9ESUdJVFMsCisgIC8qKiBNdWx0aXBsaWVyICovCisgIFVOVU1f
TVVMVElQTElFUiwKKyAgLyoqIEdyb3VwaW5nIHNpemUgKi8KKyAgVU5VTV9HUk9VUElOR19TSVpF
LAorICAvKiogUm91bmRpbmcgTW9kZSAqLworICBVTlVNX1JPVU5ESU5HX01PREUsCisgIC8qKiBS
b3VuZGluZyBpbmNyZW1lbnQgKi8KKyAgVU5VTV9ST1VORElOR19JTkNSRU1FTlQsCisgIC8qKiBU
aGUgd2lkdGggdG8gd2hpY2ggdGhlIG91dHB1dCBvZiA8Y29kZT5mb3JtYXQoKTwvY29kZT4gaXMg
cGFkZGVkLiAqLworICBVTlVNX0ZPUk1BVF9XSURUSCwKKyAgLyoqIFRoZSBwb3NpdGlvbiBhdCB3
aGljaCBwYWRkaW5nIHdpbGwgdGFrZSBwbGFjZS4gKi8KKyAgVU5VTV9QQURESU5HX1BPU0lUSU9O
LAorICAvKiogU2Vjb25kYXJ5IGdyb3VwaW5nIHNpemUgKi8KKyAgVU5VTV9TRUNPTkRBUllfR1JP
VVBJTkdfU0laRSwKKyAgLyoqIFVzZSBzaWduaWZpY2FudCBkaWdpdHMKKyAgICogQHN0YWJsZSBJ
Q1UgMy4wICovCisgIFVOVU1fU0lHTklGSUNBTlRfRElHSVRTX1VTRUQsCisgIC8qKiBNaW5pbXVt
IHNpZ25pZmljYW50IGRpZ2l0cworICAgKiBAc3RhYmxlIElDVSAzLjAgKi8KKyAgVU5VTV9NSU5f
U0lHTklGSUNBTlRfRElHSVRTLAorICAvKiogTWF4aW11bSBzaWduaWZpY2FudCBkaWdpdHMKKyAg
ICogQHN0YWJsZSBJQ1UgMy4wICovCisgIFVOVU1fTUFYX1NJR05JRklDQU5UX0RJR0lUUywKKyAg
LyoqIExlbmllbnQgcGFyc2UgbW9kZSB1c2VkIGJ5IHJ1bGUtYmFzZWQgZm9ybWF0cy4KKyAgICog
QHN0YWJsZSBJQ1UgMy4wCisgICAqLworICBVTlVNX0xFTklFTlRfUEFSU0UKK30gVU51bWJlckZv
cm1hdEF0dHJpYnV0ZTsKKworLyoqCisqIEdldCBhIG51bWVyaWMgYXR0cmlidXRlIGFzc29jaWF0
ZWQgd2l0aCBhIFVOdW1iZXJGb3JtYXQuCisqIEFuIGV4YW1wbGUgb2YgYSBudW1lcmljIGF0dHJp
YnV0ZSBpcyB0aGUgbnVtYmVyIG9mIGludGVnZXIgZGlnaXRzIGEgZm9ybWF0dGVyIHdpbGwgcHJv
ZHVjZS4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHF1ZXJ5LgorKiBAcGFyYW0gYXR0
ciBUaGUgYXR0cmlidXRlIHRvIHF1ZXJ5OyBvbmUgb2YgVU5VTV9QQVJTRV9JTlRfT05MWSwgVU5V
TV9HUk9VUElOR19VU0VELAorKiBVTlVNX0RFQ0lNQUxfQUxXQVlTX1NIT1dOLCBVTlVNX01BWF9J
TlRFR0VSX0RJR0lUUywgVU5VTV9NSU5fSU5URUdFUl9ESUdJVFMsIFVOVU1fSU5URUdFUl9ESUdJ
VFMsCisqIFVOVU1fTUFYX0ZSQUNUSU9OX0RJR0lUUywgVU5VTV9NSU5fRlJBQ1RJT05fRElHSVRT
LCBVTlVNX0ZSQUNUSU9OX0RJR0lUUywgVU5VTV9NVUxUSVBMSUVSLAorKiBVTlVNX0dST1VQSU5H
X1NJWkUsIFVOVU1fUk9VTkRJTkdfTU9ERSwgVU5VTV9GT1JNQVRfV0lEVEgsIFVOVU1fUEFERElO
R19QT1NJVElPTiwgVU5VTV9TRUNPTkRBUllfR1JPVVBJTkdfU0laRS4KKyogQHJldHVybiBUaGUg
dmFsdWUgb2YgYXR0ci4KKyogQHNlZSB1bnVtX3NldEF0dHJpYnV0ZQorKiBAc2VlIHVudW1fZ2V0
RG91YmxlQXR0cmlidXRlCisqIEBzZWUgdW51bV9zZXREb3VibGVBdHRyaWJ1dGUKKyogQHNlZSB1
bnVtX2dldFRleHRBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX3NldFRleHRBdHRyaWJ1dGUKKyogQHN0
YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1bnVtX2dldEF0
dHJpYnV0ZShjb25zdCBVTnVtYmVyRm9ybWF0KiAgICAgICAgICBmbXQsCisgICAgICAgICAgVU51
bWJlckZvcm1hdEF0dHJpYnV0ZSAgYXR0cik7CisKKy8qKgorKiBTZXQgYSBudW1lcmljIGF0dHJp
YnV0ZSBhc3NvY2lhdGVkIHdpdGggYSBVTnVtYmVyRm9ybWF0LgorKiBBbiBleGFtcGxlIG9mIGEg
bnVtZXJpYyBhdHRyaWJ1dGUgaXMgdGhlIG51bWJlciBvZiBpbnRlZ2VyIGRpZ2l0cyBhIGZvcm1h
dHRlciB3aWxsIHByb2R1Y2UuICBJZiB0aGUKKyogZm9ybWF0dGVyIGRvZXMgbm90IHVuZGVyc3Rh
bmQgdGhlIGF0dHJpYnV0ZSwgdGhlIGNhbGwgaXMgaWdub3JlZC4gIFJ1bGUtYmFzZWQgZm9ybWF0
dGVycyBvbmx5IHVuZGVyc3RhbmQKKyogdGhlIGxlbmllbnQtcGFyc2UgYXR0cmlidXRlLgorKiBA
cGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gc2V0LgorKiBAcGFyYW0gYXR0ciBUaGUgYXR0cmli
dXRlIHRvIHNldDsgb25lIG9mIFVOVU1fUEFSU0VfSU5UX09OTFksIFVOVU1fR1JPVVBJTkdfVVNF
RCwKKyogVU5VTV9ERUNJTUFMX0FMV0FZU19TSE9XTiwgVU5VTV9NQVhfSU5URUdFUl9ESUdJVFMs
IFVOVU1fTUlOX0lOVEVHRVJfRElHSVRTLCBVTlVNX0lOVEVHRVJfRElHSVRTLAorKiBVTlVNX01B
WF9GUkFDVElPTl9ESUdJVFMsIFVOVU1fTUlOX0ZSQUNUSU9OX0RJR0lUUywgVU5VTV9GUkFDVElP
Tl9ESUdJVFMsIFVOVU1fTVVMVElQTElFUiwKKyogVU5VTV9HUk9VUElOR19TSVpFLCBVTlVNX1JP
VU5ESU5HX01PREUsIFVOVU1fRk9STUFUX1dJRFRILCBVTlVNX1BBRERJTkdfUE9TSVRJT04sIFVO
VU1fU0VDT05EQVJZX0dST1VQSU5HX1NJWkUsCisqIG9yIFVOVU1fTEVOSUVOVF9QQVJTRS4KKyog
QHBhcmFtIG5ld1ZhbHVlIFRoZSBuZXcgdmFsdWUgb2YgYXR0ci4KKyogQHNlZSB1bnVtX2dldEF0
dHJpYnV0ZQorKiBAc2VlIHVudW1fZ2V0RG91YmxlQXR0cmlidXRlCisqIEBzZWUgdW51bV9zZXRE
b3VibGVBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX2dldFRleHRBdHRyaWJ1dGUKKyogQHNlZSB1bnVt
X3NldFRleHRBdHRyaWJ1dGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgdm9pZCBV
X0VYUE9SVDIgCit1bnVtX3NldEF0dHJpYnV0ZSggICAgVU51bWJlckZvcm1hdCogICAgICAgICAg
Zm10LAorICAgICAgICAgICAgVU51bWJlckZvcm1hdEF0dHJpYnV0ZSAgYXR0ciwKKyAgICAgICAg
ICAgIGludDMyX3QgICAgICAgICAgICAgICAgIG5ld1ZhbHVlKTsKKworCisvKioKKyogR2V0IGEg
bnVtZXJpYyBhdHRyaWJ1dGUgYXNzb2NpYXRlZCB3aXRoIGEgVU51bWJlckZvcm1hdC4KKyogQW4g
ZXhhbXBsZSBvZiBhIG51bWVyaWMgYXR0cmlidXRlIGlzIHRoZSBudW1iZXIgb2YgaW50ZWdlciBk
aWdpdHMgYSBmb3JtYXR0ZXIgd2lsbCBwcm9kdWNlLgorKiBJZiB0aGUgZm9ybWF0dGVyIGRvZXMg
bm90IHVuZGVyc3RhbmQgdGhlIGF0dHJpYnV0ZSwgLTEgaXMgcmV0dXJuZWQuCisqIEBwYXJhbSBm
bXQgVGhlIGZvcm1hdHRlciB0byBxdWVyeS4KKyogQHBhcmFtIGF0dHIgVGhlIGF0dHJpYnV0ZSB0
byBxdWVyeTsgZS5nLiBVTlVNX1JPVU5ESU5HX0lOQ1JFTUVOVC4KKyogQHJldHVybiBUaGUgdmFs
dWUgb2YgYXR0ci4KKyogQHNlZSB1bnVtX2dldEF0dHJpYnV0ZQorKiBAc2VlIHVudW1fc2V0QXR0
cmlidXRlCisqIEBzZWUgdW51bV9zZXREb3VibGVBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX2dldFRl
eHRBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX3NldFRleHRBdHRyaWJ1dGUKKyogQHN0YWJsZSBJQ1Ug
Mi4wCisqLworVV9TVEFCTEUgZG91YmxlIFVfRVhQT1JUMiAKK3VudW1fZ2V0RG91YmxlQXR0cmli
dXRlKGNvbnN0IFVOdW1iZXJGb3JtYXQqICAgICAgICAgIGZtdCwKKyAgICAgICAgICBVTnVtYmVy
Rm9ybWF0QXR0cmlidXRlICBhdHRyKTsKKworLyoqCisqIFNldCBhIG51bWVyaWMgYXR0cmlidXRl
IGFzc29jaWF0ZWQgd2l0aCBhIFVOdW1iZXJGb3JtYXQuCisqIEFuIGV4YW1wbGUgb2YgYSBudW1l
cmljIGF0dHJpYnV0ZSBpcyB0aGUgbnVtYmVyIG9mIGludGVnZXIgZGlnaXRzIGEgZm9ybWF0dGVy
IHdpbGwgcHJvZHVjZS4KKyogSWYgdGhlIGZvcm1hdHRlciBkb2VzIG5vdCB1bmRlcnN0YW5kIHRo
ZSBhdHRyaWJ1dGUsIHRoaXMgY2FsbCBpcyBpZ25vcmVkLgorKiBAcGFyYW0gZm10IFRoZSBmb3Jt
YXR0ZXIgdG8gc2V0LgorKiBAcGFyYW0gYXR0ciBUaGUgYXR0cmlidXRlIHRvIHNldDsgZS5nLiBV
TlVNX1JPVU5ESU5HX0lOQ1JFTUVOVC4KKyogQHBhcmFtIG5ld1ZhbHVlIFRoZSBuZXcgdmFsdWUg
b2YgYXR0ci4KKyogQHNlZSB1bnVtX2dldEF0dHJpYnV0ZQorKiBAc2VlIHVudW1fc2V0QXR0cmli
dXRlCisqIEBzZWUgdW51bV9nZXREb3VibGVBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX2dldFRleHRB
dHRyaWJ1dGUKKyogQHNlZSB1bnVtX3NldFRleHRBdHRyaWJ1dGUKKyogQHN0YWJsZSBJQ1UgMi4w
CisqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1bnVtX3NldERvdWJsZUF0dHJpYnV0ZSgg
ICAgVU51bWJlckZvcm1hdCogICAgICAgICAgZm10LAorICAgICAgICAgICAgVU51bWJlckZvcm1h
dEF0dHJpYnV0ZSAgYXR0ciwKKyAgICAgICAgICAgIGRvdWJsZSAgICAgICAgICAgICAgICAgbmV3
VmFsdWUpOworCisvKiogVGhlIHBvc3NpYmxlIFVOdW1iZXJGb3JtYXQgdGV4dCBhdHRyaWJ1dGVz
IEBzdGFibGUgSUNVIDIuMCovCit0eXBlZGVmIGVudW0gVU51bWJlckZvcm1hdFRleHRBdHRyaWJ1
dGUgeworICAvKiogUG9zaXRpdmUgcHJlZml4ICovCisgIFVOVU1fUE9TSVRJVkVfUFJFRklYLAor
ICAvKiogUG9zaXRpdmUgc3VmZml4ICovCisgIFVOVU1fUE9TSVRJVkVfU1VGRklYLAorICAvKiog
TmVnYXRpdmUgcHJlZml4ICovCisgIFVOVU1fTkVHQVRJVkVfUFJFRklYLAorICAvKiogTmVnYXRp
dmUgc3VmZml4ICovCisgIFVOVU1fTkVHQVRJVkVfU1VGRklYLAorICAvKiogVGhlIGNoYXJhY3Rl
ciB1c2VkIHRvIHBhZCB0byB0aGUgZm9ybWF0IHdpZHRoLiAqLworICBVTlVNX1BBRERJTkdfQ0hB
UkFDVEVSLAorICAvKiogVGhlIElTTyBjdXJyZW5jeSBjb2RlICovCisgIFVOVU1fQ1VSUkVOQ1lf
Q09ERSwKKyAgLyoqCisgICAqIFRoZSBkZWZhdWx0IHJ1bGUgc2V0LiAgVGhpcyBpcyBvbmx5IGF2
YWlsYWJsZSB3aXRoIHJ1bGUtYmFzZWQgZm9ybWF0dGVycy4KKyAgICogQHN0YWJsZSBJQ1UgMy4w
CisgICAqLworICBVTlVNX0RFRkFVTFRfUlVMRVNFVCwKKyAgLyoqCisgICAqIFRoZSBwdWJsaWMg
cnVsZSBzZXRzLiAgVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSB3aXRoIHJ1bGUtYmFzZWQgZm9ybWF0
dGVycy4KKyAgICogVGhpcyBpcyBhIHJlYWQtb25seSBhdHRyaWJ1dGUuICBUaGUgcHVibGljIHJ1
bGVzZXRzIGFyZSByZXR1cm5lZCBhcyBhCisgICAqIHNpbmdsZSBzdHJpbmcsIHdpdGggZWFjaCBy
dWxlc2V0IG5hbWUgZGVsaW1pdGVkIGJ5ICc7JyAoc2VtaWNvbG9uKS4KKyAgICogQHN0YWJsZSBJ
Q1UgMy4wCisgICAqLworICBVTlVNX1BVQkxJQ19SVUxFU0VUUworfSBVTnVtYmVyRm9ybWF0VGV4
dEF0dHJpYnV0ZTsKKworLyoqCisqIEdldCBhIHRleHQgYXR0cmlidXRlIGFzc29jaWF0ZWQgd2l0
aCBhIFVOdW1iZXJGb3JtYXQuCisqIEFuIGV4YW1wbGUgb2YgYSB0ZXh0IGF0dHJpYnV0ZSBpcyB0
aGUgc3VmZml4IGZvciBwb3NpdGl2ZSBudW1iZXJzLiAgSWYgdGhlIGZvcm1hdHRlcgorKiBkb2Vz
IG5vdCB1bmRlcnN0YW5kIHRoZSBhdHRyaWJ1dHJlLCBVX1VOU1VQUE9SVEVEX0VSUk9SIGlzIHJl
dHVybmVkIGFzIHRoZSBzdGF0dXMuCisqIFJ1bGUtYmFzZWQgZm9ybWF0dGVycyBvbmx5IHVuZGVy
c3RhbmQgVU5VTV9ERUZBVUxUX1JVTEVTRVQgYW5kIFVOVU1fUFVCTElDX1JVTEVTRVRTLgorKiBA
cGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisqIEBwYXJhbSB0YWcgVGhlIGF0dHJp
YnV0ZSB0byBxdWVyeTsgb25lIG9mIFVOVU1fUE9TSVRJVkVfUFJFRklYLCBVTlVNX1BPU0lUSVZF
X1NVRkZJWCwKKyogVU5VTV9ORUdBVElWRV9QUkVGSVgsIFVOVU1fTkVHQVRJVkVfU1VGRklYLCBV
TlVNX1BBRERJTkdfQ0hBUkFDVEVSLCBVTlVNX0NVUlJFTkNZX0NPREUsCisqIFVOVU1fREVGQVVM
VF9SVUxFU0VULCBvciBVTlVNX1BVQkxJQ19SVUxFU0VUUy4KKyogQHBhcmFtIHJlc3VsdCBBIHBv
aW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgYXR0cmlidXRlLgorKiBAcGFyYW0gcmVz
dWx0TGVuZ3RoIFRoZSBtYXhpbXVtIHNpemUgb2YgcmVzdWx0LgorKiBAcGFyYW0gc3RhdHVzIEEg
cG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAcmV0dXJu
IFRoZSB0b3RhbCBidWZmZXIgc2l6ZSBuZWVkZWQ7IGlmIGdyZWF0ZXIgdGhhbiByZXN1bHRMZW5n
dGgsIHRoZSBvdXRwdXQgd2FzIHRydW5jYXRlZC4KKyogQHNlZSB1bnVtX3NldFRleHRBdHRyaWJ1
dGUKKyogQHNlZSB1bnVtX2dldEF0dHJpYnV0ZQorKiBAc2VlIHVudW1fc2V0QXR0cmlidXRlCisq
IEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordW51bV9n
ZXRUZXh0QXR0cmlidXRlKCAgICBjb25zdCAgICBVTnVtYmVyRm9ybWF0KiAgICAgICAgICAgICAg
ICAgICAgZm10LAorICAgICAgICAgICAgVU51bWJlckZvcm1hdFRleHRBdHRyaWJ1dGUgICAgICB0
YWcsCisgICAgICAgICAgICBVQ2hhciogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LAorICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRM
ZW5ndGgsCisgICAgICAgICAgICBVRXJyb3JDb2RlKiAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXR1cyk7CisKKy8qKgorKiBTZXQgYSB0ZXh0IGF0dHJpYnV0ZSBhc3NvY2lhdGVkIHdpdGggYSBV
TnVtYmVyRm9ybWF0LgorKiBBbiBleGFtcGxlIG9mIGEgdGV4dCBhdHRyaWJ1dGUgaXMgdGhlIHN1
ZmZpeCBmb3IgcG9zaXRpdmUgbnVtYmVycy4gIFJ1bGUtYmFzZWQgZm9ybWF0dGVycworKiBvbmx5
IHVuZGVyc3RhbmQgVU5VTV9ERUZBVUxUX1JVTEVTRVQuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1h
dHRlciB0byBzZXQuCisqIEBwYXJhbSB0YWcgVGhlIGF0dHJpYnV0ZSB0byBzZXQ7IG9uZSBvZiBV
TlVNX1BPU0lUSVZFX1BSRUZJWCwgVU5VTV9QT1NJVElWRV9TVUZGSVgsCisqIFVOVU1fTkVHQVRJ
VkVfUFJFRklYLCBVTlVNX05FR0FUSVZFX1NVRkZJWCwgVU5VTV9QQURESU5HX0NIQVJBQ1RFUiwg
VU5VTV9DVVJSRU5DWV9DT0RFLAorKiBvciBVTlVNX0RFRkFVTFRfUlVMRVNFVC4KKyogQHBhcmFt
IG5ld1ZhbHVlIFRoZSBuZXcgdmFsdWUgb2YgYXR0ci4KKyogQHBhcmFtIG5ld1ZhbHVlTGVuZ3Ro
IFRoZSBsZW5ndGggb2YgbmV3VmFsdWUsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyogQHBh
cmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJv
cnMKKyogQHNlZSB1bnVtX2dldFRleHRBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX2dldEF0dHJpYnV0
ZQorKiBAc2VlIHVudW1fc2V0QXR0cmlidXRlCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RB
QkxFIHZvaWQgVV9FWFBPUlQyIAordW51bV9zZXRUZXh0QXR0cmlidXRlKCAgICBVTnVtYmVyRm9y
bWF0KiAgICAgICAgICAgICAgICAgICAgZm10LAorICAgICAgICAgICAgVU51bWJlckZvcm1hdFRl
eHRBdHRyaWJ1dGUgICAgICB0YWcsCisgICAgICAgICAgICBjb25zdCAgICBVQ2hhciogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUsCisgICAgICAgICAgICBpbnQzMl90ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlTGVuZ3RoLAorICAgICAgICAgICAgVUVycm9y
Q29kZSAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0dXMpOworCisvKioKKyAqIEV4dHJhY3Qg
dGhlIHBhdHRlcm4gZnJvbSBhIFVOdW1iZXJGb3JtYXQuICBUaGUgcGF0dGVybiB3aWxsIGZvbGxv
dworICogdGhlIERlY2ltYWxGb3JtYXQgcGF0dGVybiBzeW50YXguCisgKiBAcGFyYW0gZm10IFRo
ZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisgKiBAcGFyYW0gaXNQYXR0ZXJuTG9jYWxpemVkIFRSVUUg
aWYgdGhlIHBhdHRlcm4gc2hvdWxkIGJlIGxvY2FsaXplZCwKKyAqIEZBTFNFIG90aGVyd2lzZS4g
IFRoaXMgaXMgaWdub3JlZCBpZiB0aGUgZm9ybWF0dGVyIGlzIGEgcnVsZS1iYXNlZAorICogZm9y
bWF0dGVyLgorICogQHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2
ZSB0aGUgcGF0dGVybi4KKyAqIEBwYXJhbSByZXN1bHRMZW5ndGggVGhlIG1heGltdW0gc2l6ZSBv
ZiByZXN1bHQuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBpbnB1dC1vdXRwdXQg
VUVycm9yQ29kZS4KKyAqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYg
Z3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwKKyAqIHRoZSBvdXRwdXQgd2FzIHRydW5jYXRlZC4K
KyAqIEBzZWUgdW51bV9hcHBseVBhdHRlcm4KKyAqIEBzZWUgRGVjaW1hbEZvcm1hdAorICogQHN0
YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordW51bV90b1Bh
dHRlcm4oICAgIGNvbnN0ICAgIFVOdW1iZXJGb3JtYXQqICAgICAgICAgIGZtdCwKKyAgICAgICAg
VUJvb2wgICAgICAgICAgICAgICAgICBpc1BhdHRlcm5Mb2NhbGl6ZWQsCisgICAgICAgIFVDaGFy
KiAgICAgICAgICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgaW50MzJfdCAgICAgICAgICAgICAg
ICAgcmVzdWx0TGVuZ3RoLAorICAgICAgICBVRXJyb3JDb2RlKiAgICAgICAgICAgICBzdGF0dXMp
OworCisKKy8qKgorICogQ29uc3RhbnRzIGZvciBzcGVjaWZ5aW5nIGEgbnVtYmVyIGZvcm1hdCBz
eW1ib2wuCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLwordHlwZWRlZiBlbnVtIFVOdW1iZXJGb3Jt
YXRTeW1ib2wgeworICAvKiogVGhlIGRlY2ltYWwgc2VwYXJhdG9yICovCisgIFVOVU1fREVDSU1B
TF9TRVBBUkFUT1JfU1lNQk9MID0gMCwKKyAgLyoqIFRoZSBncm91cGluZyBzZXBhcmF0b3IgKi8K
KyAgVU5VTV9HUk9VUElOR19TRVBBUkFUT1JfU1lNQk9MID0gMSwKKyAgLyoqIFRoZSBwYXR0ZXJu
IHNlcGFyYXRvciAqLworICBVTlVNX1BBVFRFUk5fU0VQQVJBVE9SX1NZTUJPTCA9IDIsCisgIC8q
KiBUaGUgcGVyY2VudCBzaWduICovCisgIFVOVU1fUEVSQ0VOVF9TWU1CT0wgPSAzLAorICAvKiog
WmVybyovCisgIFVOVU1fWkVST19ESUdJVF9TWU1CT0wgPSA0LAorICAvKiogQ2hhcmFjdGVyIHJl
cHJlc2VudGluZyBhIGRpZ2l0IGluIHRoZSBwYXR0ZXJuICovCisgIFVOVU1fRElHSVRfU1lNQk9M
ID0gNSwKKyAgLyoqIFRoZSBtaW51cyBzaWduICovCisgIFVOVU1fTUlOVVNfU0lHTl9TWU1CT0wg
PSA2LAorICAvKiogVGhlIHBsdXMgc2lnbiAqLworICBVTlVNX1BMVVNfU0lHTl9TWU1CT0wgPSA3
LAorICAvKiogVGhlIGN1cnJlbmN5IHN5bWJvbCAqLworICBVTlVNX0NVUlJFTkNZX1NZTUJPTCA9
IDgsCisgIC8qKiBUaGUgaW50ZXJuYXRpb25hbCBjdXJyZW5jeSBzeW1ib2wgKi8KKyAgVU5VTV9J
TlRMX0NVUlJFTkNZX1NZTUJPTCA9IDksCisgIC8qKiBUaGUgbW9uZXRhcnkgc2VwYXJhdG9yICov
CisgIFVOVU1fTU9ORVRBUllfU0VQQVJBVE9SX1NZTUJPTCA9IDEwLAorICAvKiogVGhlIGV4cG9u
ZW50aWFsIHN5bWJvbCAqLworICBVTlVNX0VYUE9ORU5USUFMX1NZTUJPTCA9IDExLAorICAvKiog
UGVyIG1pbGwgc3ltYm9sICovCisgIFVOVU1fUEVSTUlMTF9TWU1CT0wgPSAxMiwKKyAgLyoqIEVz
Y2FwZSBwYWRkaW5nIGNoYXJhY3RlciAqLworICBVTlVNX1BBRF9FU0NBUEVfU1lNQk9MID0gMTMs
CisgIC8qKiBJbmZpbml0eSBzeW1ib2wgKi8KKyAgVU5VTV9JTkZJTklUWV9TWU1CT0wgPSAxNCwK
KyAgLyoqIE5hbiBzeW1ib2wgKi8KKyAgVU5VTV9OQU5fU1lNQk9MID0gMTUsCisgIC8qKiBTaWdu
aWZpY2FudCBkaWdpdCBzeW1ib2wKKyAgICogQHN0YWJsZSBJQ1UgMy4wICovCisgIFVOVU1fU0lH
TklGSUNBTlRfRElHSVRfU1lNQk9MID0gMTYsCisgIC8qKiBUaGUgbW9uZXRhcnkgZ3JvdXBpbmcg
c2VwYXJhdG9yIAorICAgKiBAc3RhYmxlIElDVSAzLjYKKyAgICovCisgIFVOVU1fTU9ORVRBUllf
R1JPVVBJTkdfU0VQQVJBVE9SX1NZTUJPTCA9IDE3LCAgCisgIC8qKiBPbmUKKyAgICogQGRyYWZ0
IElDVSA0LjYKKyAgICovCisgIFVOVU1fT05FX0RJR0lUX1NZTUJPTCA9IDE4LAorICAvKiogVHdv
CisgICAqIEBkcmFmdCBJQ1UgNC42CisgICAqLworICBVTlVNX1RXT19ESUdJVF9TWU1CT0wgPSAx
OSwKKyAgLyoqIFRocmVlCisgICAqIEBkcmFmdCBJQ1UgNC42CisgICAqLworICBVTlVNX1RIUkVF
X0RJR0lUX1NZTUJPTCA9IDIwLAorICAvKiogRm91cgorICAgKiBAZHJhZnQgSUNVIDQuNgorICAg
Ki8KKyAgVU5VTV9GT1VSX0RJR0lUX1NZTUJPTCA9IDIxLAorICAvKiogRml2ZQorICAgKiBAZHJh
ZnQgSUNVIDQuNgorICAgKi8KKyAgVU5VTV9GSVZFX0RJR0lUX1NZTUJPTCA9IDIyLAorICAvKiog
U2l4CisgICAqIEBkcmFmdCBJQ1UgNC42CisgICAqLworICBVTlVNX1NJWF9ESUdJVF9TWU1CT0wg
PSAyMywKKyAgLyoqIFNldmVuCisgICAgKiBAZHJhZnQgSUNVIDQuNgorICAgKi8KKyAgVU5VTV9T
RVZFTl9ESUdJVF9TWU1CT0wgPSAyNCwKKyAgLyoqIEVpZ2h0CisgICAqIEBkcmFmdCBJQ1UgNC42
CisgICAqLworICBVTlVNX0VJR0hUX0RJR0lUX1NZTUJPTCA9IDI1LAorICAvKiogTmluZQorICAg
KiBAZHJhZnQgSUNVIDQuNgorICAgKi8KKyAgVU5VTV9OSU5FX0RJR0lUX1NZTUJPTCA9IDI2LAor
ICAvKiogY291bnQgc3ltYm9sIGNvbnN0YW50cyAqLworICBVTlVNX0ZPUk1BVF9TWU1CT0xfQ09V
TlQgPSAyNworfSBVTnVtYmVyRm9ybWF0U3ltYm9sOworCisvKioKKyogR2V0IGEgc3ltYm9sIGFz
c29jaWF0ZWQgd2l0aCBhIFVOdW1iZXJGb3JtYXQuCisqIEEgVU51bWJlckZvcm1hdCB1c2VzIHN5
bWJvbHMgdG8gcmVwcmVzZW50IHRoZSBzcGVjaWFsIGxvY2FsZS1kZXBlbmRlbnQKKyogY2hhcmFj
dGVycyBpbiBhIG51bWJlciwgZm9yIGV4YW1wbGUgdGhlIHBlcmNlbnQgc2lnbi4gVGhpcyBBUEkg
aXMgbm90CisqIHN1cHBvcnRlZCBmb3IgcnVsZS1iYXNlZCBmb3JtYXR0ZXJzLgorKiBAcGFyYW0g
Zm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisqIEBwYXJhbSBzeW1ib2wgVGhlIFVOdW1iZXJG
b3JtYXRTeW1ib2wgY29uc3RhbnQgZm9yIHRoZSBzeW1ib2wgdG8gZ2V0CisqIEBwYXJhbSBidWZm
ZXIgVGhlIHN0cmluZyBidWZmZXIgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIHN5bWJvbCBzdHJpbmc7
CisqICAgICAgICAgICAgICAgaWYgaXQgaXMgTlVMTCwgdGhlbiBvbmx5IHRoZSBsZW5ndGggb2Yg
dGhlIHN5bWJvbCBpcyByZXR1cm5lZAorKiBAcGFyYW0gc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgc3Ry
aW5nIGJ1ZmZlcgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRv
IHJlY2VpdmUgYW55IGVycm9ycworKiBAcmV0dXJuIFRoZSBsZW5ndGggb2YgdGhlIHN5bWJvbDsg
dGhlIGJ1ZmZlciBpcyBub3QgbW9kaWZpZWQgaWYKKyogICAgICAgICA8Y29kZT5sZW5ndGgmZ3Q7
PXNpemU8L2NvZGU+CisqIEBzZWUgdW51bV9zZXRTeW1ib2wKKyogQHN0YWJsZSBJQ1UgMi4wCisq
LworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKK3VudW1fZ2V0U3ltYm9sKGNvbnN0IFVOdW1i
ZXJGb3JtYXQgKmZtdCwKKyAgICAgICAgICAgICAgIFVOdW1iZXJGb3JtYXRTeW1ib2wgc3ltYm9s
LAorICAgICAgICAgICAgICAgVUNoYXIgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgIGludDMyX3Qg
c2l6ZSwKKyAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKy8qKgorKiBTZXQg
YSBzeW1ib2wgYXNzb2NpYXRlZCB3aXRoIGEgVU51bWJlckZvcm1hdC4KKyogQSBVTnVtYmVyRm9y
bWF0IHVzZXMgc3ltYm9scyB0byByZXByZXNlbnQgdGhlIHNwZWNpYWwgbG9jYWxlLWRlcGVuZGVu
dAorKiBjaGFyYWN0ZXJzIGluIGEgbnVtYmVyLCBmb3IgZXhhbXBsZSB0aGUgcGVyY2VudCBzaWdu
LiAgVGhpcyBBUEkgaXMgbm90CisqIHN1cHBvcnRlZCBmb3IgcnVsZS1iYXNlZCBmb3JtYXR0ZXJz
LgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gc2V0LgorKiBAcGFyYW0gc3ltYm9sIFRo
ZSBVTnVtYmVyRm9ybWF0U3ltYm9sIGNvbnN0YW50IGZvciB0aGUgc3ltYm9sIHRvIHNldAorKiBA
cGFyYW0gdmFsdWUgVGhlIHN0cmluZyB0byBzZXQgdGhlIHN5bWJvbCB0bworKiBAcGFyYW0gbGVu
Z3RoIFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZywgb3IgLTEgZm9yIGEgemVyby10ZXJtaW5hdGVk
IHN0cmluZworKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJl
Y2VpdmUgYW55IGVycm9ycy4KKyogQHNlZSB1bnVtX2dldFN5bWJvbAorKiBAc3RhYmxlIElDVSAy
LjAKKyovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMgordW51bV9zZXRTeW1ib2woVU51bWJlckZv
cm1hdCAqZm10LAorICAgICAgICAgICAgICAgVU51bWJlckZvcm1hdFN5bWJvbCBzeW1ib2wsCisg
ICAgICAgICAgICAgICBjb25zdCBVQ2hhciAqdmFsdWUsCisgICAgICAgICAgICAgICBpbnQzMl90
IGxlbmd0aCwKKyAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKworLyoqCisg
KiBHZXQgdGhlIGxvY2FsZSBmb3IgdGhpcyBudW1iZXIgZm9ybWF0IG9iamVjdC4KKyAqIFlvdSBj
YW4gY2hvb3NlIGJldHdlZW4gdmFsaWQgYW5kIGFjdHVhbCBsb2NhbGUuCisgKiBAcGFyYW0gZm10
IFRoZSBmb3JtYXR0ZXIgdG8gZ2V0IHRoZSBsb2NhbGUgZnJvbQorICogQHBhcmFtIHR5cGUgdHlw
ZSBvZiB0aGUgbG9jYWxlIHdlJ3JlIGxvb2tpbmcgZm9yICh2YWxpZCBvciBhY3R1YWwpIAorICog
QHBhcmFtIHN0YXR1cyBlcnJvciBjb2RlIGZvciB0aGUgb3BlcmF0aW9uCisgKiBAcmV0dXJuIHRo
ZSBsb2NhbGUgbmFtZQorICogQHN0YWJsZSBJQ1UgMi44CisgKi8KK1VfU1RBQkxFIGNvbnN0IGNo
YXIqIFVfRVhQT1JUMgordW51bV9nZXRMb2NhbGVCeVR5cGUoY29uc3QgVU51bWJlckZvcm1hdCAq
Zm10LAorICAgICAgICAgICAgICAgICAgICAgVUxvY0RhdGFMb2NhbGVUeXBlIHR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiBzdGF0dXMpOyAKKworI2VuZGlmIC8qICNpZiAh
VUNPTkZJR19OT19GT1JNQVRUSU5HICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3V0eXBlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ljdS91bmljb2RlL3V0eXBlcy5oCmluZGV4IDAwYmYxNGNlOGU2ZTVkNmVjOGVkODdkOGU5NTYx
NzBjYTU3Nzg3YjIuLjFiY2Y3ZjVkMzkwOWZmNjZiNjU4ZWE5NWJhNGEyY2RlYjU0OWM5YzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29kZS91dHlwZXMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdXR5cGVzLmgKQEAgLTU1LDcgKzU1
LDcgQEAKICAqLwogI2lmZGVmIFhQX0NQTFVTUExVUwogIyAgIGlmbmRlZiBVX1NIT1dfQ1BMVVNQ
TFVTX0FQSQotIyAgICAgICBkZWZpbmUgVV9TSE9XX0NQTFVTUExVU19BUEkgMQorIyAgICAgICBk
ZWZpbmUgVV9TSE9XX0NQTFVTUExVU19BUEkgMAogIyAgIGVuZGlmCiAjZWxzZQogIyAgIHVuZGVm
IFVfU0hPV19DUExVU1BMVVNfQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25JZGVudGlmaWVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uSWRlbnRpZmllcnMuaAppbmRleCAxNjNiMTE2MTA0MWNjZGIzNWFkNTI5NzZjYWZl
NmJkMTFkZmM4Yjc3Li5jNTFiNDZkNzE2YTI1OTk3YTE3MzE2ODNiZmY3OGNhMzQxYzQxZmM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVy
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJz
LmgKQEAgLTE0Miw2ICsxNDIsNyBAQAogICAgIG1hY3JvKGxhc3RJbmRleCkgXAogICAgIG1hY3Jv
KGxlbmd0aCkgXAogICAgIG1hY3JvKGxpbmUpIFwKKyAgICBtYWNybyhsb2NhbGVNYXRjaGVyKSBc
CiAgICAgbWFjcm8obWVzc2FnZSkgXAogICAgIG1hY3JvKG11bHRpbGluZSkgXAogICAgIG1hY3Jv
KG5hbWUpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxD
b2xsYXRvckNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcAppbmRleCBkNDFkZDE3Y2Q4ZWIxMTJhMjFlZmI2YzIx
YTE0NDk0ZmIyZWQ2ZDY1Li4zMTA3YjNmNWU5NGRjOGFkZWIxYjk2ODVjZmIzNTBmNDczMWRmZGI5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JD
b25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENv
bGxhdG9yQ29uc3RydWN0b3IuY3BwCkBAIC0xNTAsMjUgKzE1MCwxNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIEludGxDb2xsYXRvckNvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2Fs
ZXNPZihFeGVjUwogICAgIC8vIDEwLjIuMiBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNP
Zihsb2NhbGVzIFssIG9wdGlvbnNdKSAoRUNNQS00MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IHJl
cXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KLSAgICAv
LyBGSVhNRTogcmVxdWVzdGVkID0gQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKTsKKyAg
ICBKU0FycmF5KiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChleGVj
LCBleGVjLT5hcmd1bWVudCgwKSk7CiAKICAgICAvLyAyLiBSZXR1cm5JZkFicnVwdChyZXF1ZXN0
ZWRMb2NhbGVzKS4KLSAgICAvLyBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgLy8gICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogCiAgICAgLy8gMy4gUmV0dXJuIFN1cHBvcnRlZExvY2FsZXMoJUNvbGxhdG9yJS5bW2F2
YWlsYWJsZUxvY2FsZXNdXSwgcmVxdWVzdGVkTG9jYWxlcywgb3B0aW9ucykuCi0gICAgLy8gRklY
TUU6IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3VwcG9ydGVkTG9jYWxlcyhhdmFpbGFibGUsIHJl
cXVlc3RlZCwgb3B0aW9ucykpOwotCi0gICAgLy8gUmV0dXJuIGVtcHR5IGFycmF5IHVudGlsIHBy
b3Blcmx5IGltcGxlbWVudGVkLgotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKTsK
LSAgICBKU0FycmF5KiBzdXBwb3J0ZWRMb2NhbGVzID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0
aWFsaXplZCh2bSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1
cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoVW5kZWNpZGVkKSwgMCk7Ci0gICAgaWYgKCFzdXBwb3J0
ZWRMb2NhbGVzKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93T3V0T2ZNZW1v
cnlFcnJvcihleGVjKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN1cHBvcnRlZExv
Y2FsZXMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3VwcG9ydGVkTG9jYWxlcyhleGVj
LCBnbG9iYWxPYmplY3QtPmludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKSwgcmVxdWVzdGVk
TG9jYWxlcywgZXhlYy0+YXJndW1lbnQoMSkpKTsKIH0KLSAgICAKKwogdm9pZCBJbnRsQ29sbGF0
b3JDb25zdHJ1Y3Rvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIEludGxDb2xsYXRvckNvbnN0cnVjdG9yKiB0aGlzT2JqZWN0ID0ganND
YXN0PEludGxDb2xsYXRvckNvbnN0cnVjdG9yKj4oY2VsbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAKaW5kZXggMGI4ZDQ2MGQyNjc0MWE0YjkzMzZiOGNiMGY4YjY0ZmI3OGQwNjg3ZC4u
OThkM2JiZTNkNDBlMmFjZmViNzI4ZjhhMzYwNTQzNDU1MjYwMzcyMSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1h
dENvbnN0cnVjdG9yLmNwcApAQCAtMTUwLDIyICsxNTAsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2Nh
bGVzT2YKICAgICAvLyAxMi4yLjIgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YobG9jYWxlcyBbLCBvcHRpb25zXSkgKEVDTUEtNDAyIDIuMCkKIAogICAgIC8vIDEuIExldCBh
dmFpbGFibGVMb2NhbGVzIGJlICVEYXRlVGltZUZvcm1hdCUuW1thdmFpbGFibGVMb2NhbGVzXV0u
Ci0gICAgLy8gRklYTUU6IGF2YWlsYWJsZSA9IEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9y
OjpnZXRBdmFpbGFibGVMb2NhbGVzKCkKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpOworICAgIGNvbnN0IEhhc2hTZXQ8U3Ry
aW5nPiBhdmFpbGFibGVMb2NhbGVzID0gZ2xvYmFsT2JqZWN0LT5pbnRsRGF0ZVRpbWVGb3JtYXRB
dmFpbGFibGVMb2NhbGVzKCk7CiAKICAgICAvLyAyLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBiZSBD
YW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgotICAgIC8vIEZJWE1FOiByZXF1ZXN0ZWQg
PSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpCisgICAgSlNBcnJheSogcmVxdWVzdGVk
TG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkp
OworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDMuIFJldHVybiBTdXBwb3J0ZWRMb2Nh
bGVzKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9wdGlvbnMpLgotICAgIC8v
IEZJWE1FOiByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN1cHBvcnRlZExvY2FsZXMoYXZhaWxhYmxl
LCByZXF1ZXN0ZWQsIG9wdGlvbnMpKTsKLQotICAgIC8vIFJldHVybiBlbXB0eSBhcnJheSB1bnRp
bCBwcm9wZXJseSBpbXBsZW1lbnRlZC4KLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0
KCk7Ci0gICAgSlNBcnJheSogc3VwcG9ydGVkTG9jYWxlcyA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQodm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5
cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aFVuZGVjaWRlZCksIDApOwotICAgIGlmICghc3Vw
cG9ydGVkTG9jYWxlcykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd091dE9m
TWVtb3J5RXJyb3IoZXhlYykpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdXBwb3J0
ZWRMb2NhbGVzKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN1cHBvcnRlZExvY2FsZXMo
ZXhlYywgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgZXhlYy0+YXJndW1lbnQo
MSkpKTsKIH0KICAgICAKIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3I6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rv
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29u
c3RydWN0b3IuY3BwCmluZGV4IGI4NjM5ZDZiMTRjNzAwN2E4NzEwMjU1NzdhYWUyZWQyOWZiY2Qy
ZTEuLmQwNjZlZTgwNGJmNzg2MmQwNGNlMWNhZDk3ZmZiZWIxYzFmY2M2MDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rv
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1h
dENvbnN0cnVjdG9yLmNwcApAQCAtMTUwLDIyICsxNTAsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxl
c09mKEUKICAgICAvLyAxMS4yLjIgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09m
KGxvY2FsZXMgWywgb3B0aW9uc10pIChFQ01BLTQwMiAyLjApCiAKICAgICAvLyAxLiBMZXQgYXZh
aWxhYmxlTG9jYWxlcyBiZSAlTnVtYmVyRm9ybWF0JS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4KLSAg
ICAvLyBGSVhNRTogYXZhaWxhYmxlID0gSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yOjpnZXRB
dmFpbGFibGVMb2NhbGVzKCkKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhl
Yy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpOworICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiBh
dmFpbGFibGVMb2NhbGVzID0gZ2xvYmFsT2JqZWN0LT5pbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxl
TG9jYWxlcygpOwogCiAgICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2Fs
aXplTG9jYWxlTGlzdChsb2NhbGVzKS4KLSAgICAvLyBGSVhNRTogcmVxdWVzdGVkID0gQ2Fub25p
Y2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKQorICAgIEpTQXJyYXkqIHJlcXVlc3RlZExvY2FsZXMg
PSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKICAgICAvLyAzLiBSZXR1cm4gU3VwcG9ydGVkTG9jYWxlcyhhdmFp
bGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKS4KLSAgICAvLyBGSVhNRTog
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShTdXBwb3J0ZWRMb2NhbGVzKGF2YWlsYWJsZSwgcmVxdWVz
dGVkLCBvcHRpb25zKSk7Ci0KLSAgICAvLyBSZXR1cm4gZW1wdHkgYXJyYXkgdW50aWwgcHJvcGVy
bHkgaW1wbGVtZW50ZWQuCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpOwotICAg
IEpTQXJyYXkqIHN1cHBvcnRlZExvY2FsZXMgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxp
emVkKHZtLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5n
QWxsb2NhdGlvbihBcnJheVdpdGhVbmRlY2lkZWQpLCAwKTsKLSAgICBpZiAoIXN1cHBvcnRlZExv
Y2FsZXMpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGV4ZWMpKTsKLQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3VwcG9ydGVkTG9jYWxl
cyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdXBwb3J0ZWRMb2NhbGVzKGV4ZWMsIGF2
YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGV4ZWMtPmFyZ3VtZW50KDEpKSk7CiB9
CiAKIHZvaWQgSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxPYmplY3QuY3BwCmluZGV4IGJhNDU3ZTcyNTYwOTEwNzg5MTIyZjUxMzc1ZWU5
ZmRjMTAyNGQzMmYuLmZlYWUyZWVhODkwZTI4ODUwNGE4N2FjZTM3MWVkNmVkODIwZGUxOTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCkBAIC0yOCw2
ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoSU5UTCkKIAorI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5j
bHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJJbnRsQ29sbGF0b3IuaCIKICNp
bmNsdWRlICJJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5oIgpAQCAtMzksOCArNDAsMTAgQEAKICNp
bmNsdWRlICJJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJJbnRsTnVt
YmVyRm9ybWF0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUg
IkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiT2Jq
ZWN0UHJvdG90eXBlLmgiCisjaW5jbHVkZSA8dW5pY29kZS91bG9jLmg+CiAjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xMDIsNiArMTA1LDU5NSBAQCBT
dHJ1Y3R1cmUqIEludGxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVgogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKIH0KIAorc3RhdGljIFN0cmluZyBnZXRJbnRsU3RyaW5nT3B0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBvcHRpb25zLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHksIGNv
bnN0IEhhc2hTZXQ8U3RyaW5nPiYgdmFsdWVzLCBjb25zdCBjaGFyKiBub3RGb3VuZCwgU3RyaW5n
IGZhbGxiYWNrKQoreworICAgIC8vIDkuMi45IEdldE9wdGlvbiAob3B0aW9ucywgcHJvcGVydHks
IHR5cGUsIHZhbHVlcywgZmFsbGJhY2spCisgICAgLy8gRm9yIHR5cGU9InN0cmluZyIuCisKKyAg
ICAvLyAxLiBMZXQgb3B0cyBiZSBUb09iamVjdChvcHRpb25zKS4KKyAgICBKU09iamVjdCogb3B0
cyA9IG9wdGlvbnMudG9PYmplY3QoZXhlYyk7CisKKyAgICAvLyAyLiBSZXR1cm5JZkFicnVwdChv
cHRzKS4KKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKworICAgIC8vIDMuIExldCB2YWx1ZSBiZSBHZXQob3B0cywgcHJvcGVydHkpLgorICAg
IEpTVmFsdWUgdmFsdWUgPSBvcHRzLT5nZXQoZXhlYywgcHJvcGVydHkpOworCisgICAgLy8gNC4g
UmV0dXJuSWZBYnJ1cHQodmFsdWUpLgorICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gNS4gSWYgdmFsdWUgaXMgbm90IHVuZGVm
aW5lZCwgdGhlbgorICAgIGlmICghdmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICAvLyBh
LiBBc3NlcnQ6IHR5cGUgaXMgImJvb2xlYW4iIG9yICJzdHJpbmciLgorICAgICAgICAvLyBGdW5j
dGlvbiBkZWRpY2F0ZWQgdG8gInN0cmluZyIuCisKKyAgICAgICAgLy8gYy4gSWYgdHlwZSBpcyAi
c3RyaW5nIiwgdGhlbgorICAgICAgICAvLyBpLiBMZXQgdmFsdWUgYmUgVG9TdHJpbmcodmFsdWUp
LgorICAgICAgICBKU1N0cmluZyogc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsK
KworICAgICAgICAvLyBpaS4gUmV0dXJuSWZBYnJ1cHQodmFsdWUpLgorICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAg
ICAgLy8gZC4gSWYgdmFsdWVzIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KKyAgICAgICAgLy8gaS4g
SWYgdmFsdWVzIGRvZXMgbm90IGNvbnRhaW4gYW4gZWxlbWVudCBlcXVhbCB0byB2YWx1ZSwgdGhy
b3cgYSBSYW5nZUVycm9yIGV4Y2VwdGlvbi4KKyAgICAgICAgaWYgKCF2YWx1ZXMuaXNFbXB0eSgp
ICYmICF2YWx1ZXMuY29udGFpbnMoc3RyaW5nVmFsdWUtPnZhbHVlKGV4ZWMpKSkgeworICAgICAg
ICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4
ZWMsIFN0cmluZyhub3RGb3VuZCkpKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIGUuIFJldHVybiB2YWx1ZS4KKyAgICAgICAgcmV0dXJuIHN0
cmluZ1ZhbHVlLT52YWx1ZShleGVjKTsKKyAgICB9CisKKyAgICAvLyA2LiBFbHNlIHJldHVybiBm
YWxsYmFjay4KKyAgICByZXR1cm4gZmFsbGJhY2s7Cit9CisKK3N0YXRpYyBTdHJpbmcgZ2V0UHJp
dmF0ZVVzZUxhbmdUYWcoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcnRzLCBzaXplX3Qgc3RhcnRJ
bmRleCkKK3sKKyAgICBzaXplX3QgbnVtUGFydHMgPSBwYXJ0cy5zaXplKCk7CisgICAgc2l6ZV90
IGN1cnJlbnRJbmRleCA9IHN0YXJ0SW5kZXg7CisKKyAgICAvLyBDaGVjayBmb3IgcHJpdmF0ZXVz
ZS4KKyAgICAvLyBwcml2YXRldXNlID0gIngiIDEqKCItIiAoMio4YWxwaGFudW0pKQorICAgIFN0
cmluZ0J1aWxkZXIgcHJpdmF0ZXVzZTsKKyAgICB3aGlsZSAoY3VycmVudEluZGV4IDwgbnVtUGFy
dHMpIHsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBzaW5nbGV0b24gPSBwYXJ0c1tjdXJyZW50SW5k
ZXhdOworICAgICAgICB1bnNpZ25lZCBzaW5nbGV0b25MZW5ndGggPSBzaW5nbGV0b24ubGVuZ3Ro
KCk7CisgICAgICAgIGJvb2wgaXNWYWxpZCA9IChzaW5nbGV0b25MZW5ndGggPT0gMSAmJiAoc2lu
Z2xldG9uID09ICJ4IiB8fCBzaW5nbGV0b24gPT0gIlgiKSk7CisgICAgICAgIGlmICghaXNWYWxp
ZCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChjdXJyZW50SW5kZXggIT0gc3Rh
cnRJbmRleCkKKyAgICAgICAgICAgIHByaXZhdGV1c2UuYXBwZW5kKCctJyk7CisKKyAgICAgICAg
KytjdXJyZW50SW5kZXg7CisgICAgICAgIHVuc2lnbmVkIG51bUV4dFBhcnRzID0gMDsKKyAgICAg
ICAgcHJpdmF0ZXVzZS5hcHBlbmQoJ3gnKTsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnRJbmRleCA8
IG51bVBhcnRzKSB7CisgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGV4dFBhcnQgPSBwYXJ0c1tj
dXJyZW50SW5kZXhdOworICAgICAgICAgICAgdW5zaWduZWQgZXh0UGFydExlbmd0aCA9IGV4dFBh
cnQubGVuZ3RoKCk7CisKKyAgICAgICAgICAgIGJvb2wgaXNWYWxpZCA9IChleHRQYXJ0TGVuZ3Ro
ID49IDIgJiYgZXh0UGFydExlbmd0aCA8PSA4ICYmIGV4dFBhcnQuaXNBbGxTcGVjaWFsQ2hhcmFj
dGVyczxpc0FTQ0lJQWxwaGFudW1lcmljPigpKTsKKyAgICAgICAgICAgIGlmICghaXNWYWxpZCkK
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgKytjdXJyZW50SW5kZXg7Cisg
ICAgICAgICAgICArK251bUV4dFBhcnRzOworICAgICAgICAgICAgcHJpdmF0ZXVzZS5hcHBlbmQo
Jy0nKTsKKyAgICAgICAgICAgIHByaXZhdGV1c2UuYXBwZW5kKGV4dFBhcnQuY29udmVydFRvQVND
SUlMb3dlcmNhc2UoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXF1aXJlcyBhdCBsZWFz
dCBvbmUgcHJvZHVjdGlvbi4KKyAgICAgICAgaWYgKCFudW1FeHRQYXJ0cykKKyAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisKKyAgICAvLyBMZWZ0b3ZlcnMgbWFrZXMgaXQgaW52
YWxpZC4KKyAgICBpZiAoY3VycmVudEluZGV4IDwgbnVtUGFydHMpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKworICAgIHJldHVybiBwcml2YXRldXNlLnRvU3RyaW5nKCk7Cit9CisKK3N0YXRp
YyBTdHJpbmcgZ2V0Q2Fub25pY2FsTGFuZ1RhZyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFydHMp
Cit7CisgICAgQVNTRVJUKCFwYXJ0cy5pc0VtcHR5KCkpOworCisgICAgLy8gRm9sbG93cyB0aGUg
Z3JhbW1hciBhdCBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvYmNwL2JjcDQ3LnR4dAor
ICAgIC8vIGxhbmd0YWcgPSBsYW5ndWFnZSBbIi0iIHNjcmlwdF0gWyItIiByZWdpb25dICooIi0i
IHZhcmlhbnQpICooIi0iIGV4dGVuc2lvbikgWyItIiBwcml2YXRldXNlXQorCisgICAgc2l6ZV90
IG51bVBhcnRzID0gcGFydHMuc2l6ZSgpOworICAgIC8vIENoZWNrIGZvciBsYW5ndWFnZS4KKyAg
ICAvLyBsYW5ndWFnZSA9IDIqM0FMUEhBIFsiLSIgZXh0bGFuZ10gLyA0QUxQSEEgLyA1KjhBTFBI
QQorICAgIHNpemVfdCBjdXJyZW50SW5kZXggPSAwOworICAgIGNvbnN0IFN0cmluZyYgbGFuZ3Vh
Z2UgPSBwYXJ0c1tjdXJyZW50SW5kZXhdOworICAgIHVuc2lnbmVkIGxhbmd1YWdlTGVuZ3RoID0g
bGFuZ3VhZ2UubGVuZ3RoKCk7CisgICAgaWYgKGxhbmd1YWdlTGVuZ3RoIDwgMiB8fCBsYW5ndWFn
ZUxlbmd0aCA+IDggfHwgIWxhbmd1YWdlLmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNBU0NJSUFs
cGhhPigpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICArK2N1cnJlbnRJbmRleDsK
KyAgICBTdHJpbmdCdWlsZGVyIGNhbm9uaWNhbDsKKyAgICBjYW5vbmljYWwuYXBwZW5kKGxhbmd1
YWdlLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkpOworCisgICAgLy8gQ2hlY2sgZm9yIGV4dGxh
bmcuCisgICAgLy8gZXh0bGFuZyA9IDNBTFBIQSAqMigiLSIgM0FMUEhBKQorICAgIGlmIChsYW5n
dWFnZUxlbmd0aCA8PSAzKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgdGltZXMgPSAwOyB0aW1l
cyA8IDMgJiYgY3VycmVudEluZGV4IDwgbnVtUGFydHM7ICsrdGltZXMpIHsKKyAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgZXh0bGFuZyA9IHBhcnRzW2N1cnJlbnRJbmRleF07CisgICAgICAgICAg
ICB1bnNpZ25lZCBleHRsYW5nTGVuZ3RoID0gZXh0bGFuZy5sZW5ndGgoKTsKKyAgICAgICAgICAg
IGlmIChleHRsYW5nTGVuZ3RoID09IDMgJiYgZXh0bGFuZy5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJz
PGlzQVNDSUlBbHBoYT4oKSkgeworICAgICAgICAgICAgICAgICsrY3VycmVudEluZGV4OworICAg
ICAgICAgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQoJy0nKTsKKyAgICAgICAgICAgICAgICBjYW5v
bmljYWwuYXBwZW5kKGV4dGxhbmcuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIENoZWNrIGZvciBzY3JpcHQuCisgICAgLy8gc2NyaXB0ID0gNEFMUEhBCisgICAgaWYg
KGN1cnJlbnRJbmRleCA8IG51bVBhcnRzKSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYgc2NyaXB0
ID0gcGFydHNbY3VycmVudEluZGV4XTsKKyAgICAgICAgdW5zaWduZWQgc2NyaXB0TGVuZ3RoID0g
c2NyaXB0Lmxlbmd0aCgpOworICAgICAgICBpZiAoc2NyaXB0TGVuZ3RoID09IDQgJiYgc2NyaXB0
LmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNBU0NJSUFscGhhPigpKSB7CisgICAgICAgICAgICAr
K2N1cnJlbnRJbmRleDsKKyAgICAgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQoJy0nKTsKKyAgICAg
ICAgICAgIGNhbm9uaWNhbC5hcHBlbmQodG9BU0NJSVVwcGVyKHNjcmlwdFswXSkpOworICAgICAg
ICAgICAgY2Fub25pY2FsLmFwcGVuZChzY3JpcHQuc3Vic3RyaW5nKDEsIDMpLmNvbnZlcnRUb0FT
Q0lJTG93ZXJjYXNlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIHJl
Z2lvbi4KKyAgICAvLyByZWdpb24gPSAyQUxQSEEgLyAzRElHSVQKKyAgICBpZiAoY3VycmVudElu
ZGV4IDwgbnVtUGFydHMpIHsKKyAgICAgICAgY29uc3QgU3RyaW5nJiByZWdpb24gPSBwYXJ0c1tj
dXJyZW50SW5kZXhdOworICAgICAgICB1bnNpZ25lZCByZWdpb25MZW5ndGggPSByZWdpb24ubGVu
Z3RoKCk7CisgICAgICAgIGJvb2wgaXNWYWxpZFJlZ2lvbiA9ICgKKyAgICAgICAgICAgIChyZWdp
b25MZW5ndGggPT0gMiAmJiByZWdpb24uaXNBbGxTcGVjaWFsQ2hhcmFjdGVyczxpc0FTQ0lJQWxw
aGE+KCkpCisgICAgICAgICAgICB8fCAocmVnaW9uTGVuZ3RoID09IDMgJiYgcmVnaW9uLmlzQWxs
U3BlY2lhbENoYXJhY3RlcnM8aXNBU0NJSURpZ2l0PigpKQorICAgICAgICApOworICAgICAgICBp
ZiAoaXNWYWxpZFJlZ2lvbikgeworICAgICAgICAgICAgKytjdXJyZW50SW5kZXg7CisgICAgICAg
ICAgICBjYW5vbmljYWwuYXBwZW5kKCctJyk7CisgICAgICAgICAgICBjYW5vbmljYWwuYXBwZW5k
KHJlZ2lvbi51cHBlcigpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENoZWNrIGZvciB2
YXJpYW50LgorICAgIC8vIDUqOGFscGhhbnVtIC8gKERJR0lUIDNhbHBoYW51bSkKKyAgICBIYXNo
U2V0PFN0cmluZz4gc3VidGFnczsKKyAgICB3aGlsZSAoY3VycmVudEluZGV4IDwgbnVtUGFydHMp
IHsKKyAgICAgICAgY29uc3QgU3RyaW5nJiB2YXJpYW50ID0gcGFydHNbY3VycmVudEluZGV4XTsK
KyAgICAgICAgdW5zaWduZWQgdmFyaWFudExlbmd0aCA9IHZhcmlhbnQubGVuZ3RoKCk7CisgICAg
ICAgIGJvb2wgaXNWYWxpZFZhcmlhbnQgPSAoCisgICAgICAgICAgICAodmFyaWFudExlbmd0aCA+
PSA1ICYmIHZhcmlhbnRMZW5ndGggPD0gOCAmJiB2YXJpYW50LmlzQWxsU3BlY2lhbENoYXJhY3Rl
cnM8aXNBU0NJSUFscGhhbnVtZXJpYz4oKSkKKyAgICAgICAgICAgIHx8ICh2YXJpYW50TGVuZ3Ro
ID09IDQgJiYgaXNBU0NJSURpZ2l0KHZhcmlhbnRbMF0pICYmIHZhcmlhbnQuc3Vic3RyaW5nKDEs
IDMpLmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNBU0NJSUFscGhhbnVtZXJpYz4oKSkKKyAgICAg
ICAgKTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkVmFyaWFudCkKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIC8vIENhbm5vdCBpbmNsdWRlIGR1cGxpY2F0ZSBzdWJ0YWdzIChjYXNlIGluc2Vu
c2l0aXZlKS4KKyAgICAgICAgY29uc3QgU3RyaW5nJiBsb3dlclZhcmlhbnQgPSB2YXJpYW50LmNv
bnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7CisgICAgICAgIGlmIChzdWJ0YWdzLmNvbnRhaW5zKGxv
d2VyVmFyaWFudCkpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIHN1YnRh
Z3MuYWRkKGxvd2VyVmFyaWFudCk7CisKKyAgICAgICAgKytjdXJyZW50SW5kZXg7CisKKyAgICAg
ICAgLy8gUmVvcmRlcmluZyB2YXJpYW50IHN1YnRhZ3MgaXMgbm90IHJlcXVpcmVkIGluIHRoZSBz
cGVjLgorICAgICAgICBjYW5vbmljYWwuYXBwZW5kKCctJyk7CisgICAgICAgIGNhbm9uaWNhbC5h
cHBlbmQobG93ZXJWYXJpYW50KTsKKyAgICB9CisKKyAgICAvLyBDaGVjayBmb3IgZXh0ZW5zaW9u
LgorICAgIC8vIGV4dGVuc2lvbiA9IHNpbmdsZXRvbiAxKigiLSIgKDIqOGFscGhhbnVtKSkKKyAg
ICAvLyBzaW5nbGV0b24gPSBhbHBoYW51bSBleGNlcHQgeCBvciBYCisgICAgc3VidGFncy5jbGVh
cigpOworICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnM7CisgICAgd2hpbGUgKGN1cnJlbnRJ
bmRleCA8IG51bVBhcnRzKSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYgcG9zc2libGVTaW5nbGV0
b24gPSBwYXJ0c1tjdXJyZW50SW5kZXhdOworICAgICAgICB1bnNpZ25lZCBzaW5nbGV0b25MZW5n
dGggPSBwb3NzaWJsZVNpbmdsZXRvbi5sZW5ndGgoKTsKKyAgICAgICAgYm9vbCBpc1ZhbGlkU2lu
Z2xldG9uID0gKHNpbmdsZXRvbkxlbmd0aCA9PSAxICYmIHBvc3NpYmxlU2luZ2xldG9uICE9ICJ4
IiAmJiBwb3NzaWJsZVNpbmdsZXRvbiAhPSAiWCIgJiYgaXNBU0NJSUFscGhhbnVtZXJpYyhwb3Nz
aWJsZVNpbmdsZXRvblswXSkpOworICAgICAgICBpZiAoIWlzVmFsaWRTaW5nbGV0b24pCisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAvLyBDYW5ub3QgaW5jbHVkZSBkdXBsaWNhdGUgc2lu
Z2xldG9uIChjYXNlIGluc2Vuc2l0aXZlKS4KKyAgICAgICAgY29uc3QgU3RyaW5nJiBzaW5nbGV0
b24gPSBwb3NzaWJsZVNpbmdsZXRvbi5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOworICAgICAg
ICBpZiAoc3VidGFncy5jb250YWlucyhzaW5nbGV0b24pKQorICAgICAgICAgICAgcmV0dXJuIFN0
cmluZygpOworICAgICAgICBzdWJ0YWdzLmFkZChzaW5nbGV0b24pOworCisgICAgICAgICsrY3Vy
cmVudEluZGV4OworICAgICAgICBpbnQgbnVtRXh0UGFydHMgPSAwOworICAgICAgICBTdHJpbmdC
dWlsZGVyIGV4dGVuc2lvbjsKKyAgICAgICAgZXh0ZW5zaW9uLmFwcGVuZChzaW5nbGV0b24pOwor
ICAgICAgICB3aGlsZSAoY3VycmVudEluZGV4IDwgbnVtUGFydHMpIHsKKyAgICAgICAgICAgIGNv
bnN0IFN0cmluZyYgZXh0UGFydCA9IHBhcnRzW2N1cnJlbnRJbmRleF07CisgICAgICAgICAgICB1
bnNpZ25lZCBleHRQYXJ0TGVuZ3RoID0gZXh0UGFydC5sZW5ndGgoKTsKKworICAgICAgICAgICAg
Ym9vbCBpc1ZhbGlkID0gKGV4dFBhcnRMZW5ndGggPj0gMiAmJiBleHRQYXJ0TGVuZ3RoIDw9IDgg
JiYgZXh0UGFydC5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzQVNDSUlBbHBoYW51bWVyaWM+KCkp
OworICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICArK2N1cnJlbnRJbmRleDsKKyAgICAgICAgICAgICsrbnVtRXh0UGFydHM7Cisg
ICAgICAgICAgICBleHRlbnNpb24uYXBwZW5kKCctJyk7CisgICAgICAgICAgICBleHRlbnNpb24u
YXBwZW5kKGV4dFBhcnQuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBSZXF1aXJlcyBhdCBsZWFzdCBvbmUgcHJvZHVjdGlvbi4KKyAgICAgICAgaWYg
KCFudW1FeHRQYXJ0cykKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgICAgICBl
eHRlbnNpb25zLmFwcGVuZChleHRlbnNpb24udG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgLy8g
QWRkIGV4dGVuc2lvbnMgdG8gY2Fub25pY2FsIHNvcnRlZCBieSBzaW5nbGV0b24uCisgICAgc3Rk
Ojpzb3J0KAorICAgICAgICBleHRlbnNpb25zLmJlZ2luKCksCisgICAgICAgIGV4dGVuc2lvbnMu
ZW5kKCksCisgICAgICAgIFtdIChjb25zdCBTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikgLT4g
Ym9vbCB7CisgICAgICAgICAgICByZXR1cm4gYVswXSA8IGJbMF07CisgICAgICAgIH0KKyAgICAp
OworICAgIHNpemVfdCBudW1FeHRlbnN0aW9ucyA9IGV4dGVuc2lvbnMuc2l6ZSgpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtRXh0ZW5zdGlvbnM7ICsraSkgeworICAgICAgICBjYW5v
bmljYWwuYXBwZW5kKCctJyk7CisgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQoZXh0ZW5zaW9uc1tp
XSk7CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIHByaXZhdGV1c2UuCisgICAgaWYgKGN1cnJl
bnRJbmRleCA8IG51bVBhcnRzKSB7CisgICAgICAgIFN0cmluZyBwcml2YXRldXNlID0gZ2V0UHJp
dmF0ZVVzZUxhbmdUYWcocGFydHMsIGN1cnJlbnRJbmRleCk7CisgICAgICAgIGlmIChwcml2YXRl
dXNlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICBjYW5v
bmljYWwuYXBwZW5kKCctJyk7CisgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQocHJpdmF0ZXVzZSk7
CisgICAgfQorCisgICAgLy8gRklYTUU6IFJlcGxhY2Ugc3VidGFncyB3aXRoIHRoZWlyIHByZWZl
cnJlZCB2YWx1ZXMuCisKKyAgICByZXR1cm4gY2Fub25pY2FsLnRvU3RyaW5nKCk7Cit9CisKK3N0
YXRpYyBTdHJpbmcgZ2V0R3JhbmRmYXRoZXJlZExhbmdUYWcoY29uc3QgU3RyaW5nJiBsb2NhbGUp
Cit7CisgICAgLy8gZ3JhbmRmYXRoZXJlZCA9IGlycmVndWxhciAvIHJlZ3VsYXIKKyAgICAvLyBG
SVhNRTogY29udmVydCB0byBhIGNvbXBpbGUgdGltZSBoYXNoIHRhYmxlIGlmIHRoaXMgaXMgY2F1
c2luZyBwZXJmb3JtYW5jZSBpc3N1ZXMuCisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gdGFn
TWFwID0geworICAgICAgICAvLyBJcnJlZ3VsYXIuCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJl
bi1nYi1vZWQiKSwgQVNDSUlMaXRlcmFsKCJlbi1HQi1vZWQiKSB9LAorICAgICAgICB7IEFTQ0lJ
TGl0ZXJhbCgiaS1hbWkiKSwgQVNDSUlMaXRlcmFsKCJhbWkiKSB9LAorICAgICAgICB7IEFTQ0lJ
TGl0ZXJhbCgiaS1ibm4iKSwgQVNDSUlMaXRlcmFsKCJibm4iKSB9LAorICAgICAgICB7IEFTQ0lJ
TGl0ZXJhbCgiaS1kZWZhdWx0IiksIEFTQ0lJTGl0ZXJhbCgiaS1kZWZhdWx0IikgfSwKKyAgICAg
ICAgeyBBU0NJSUxpdGVyYWwoImktZW5vY2hpYW4iKSwgQVNDSUlMaXRlcmFsKCJpLWVub2NoaWFu
IikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImktaGFrIiksIEFTQ0lJTGl0ZXJhbCgiaGFr
IikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImkta2xpbmdvbiIpLCBBU0NJSUxpdGVyYWwo
InRsaCIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJpLWx1eCIpLCBBU0NJSUxpdGVyYWwo
ImxiIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImktbWluZ28iKSwgQVNDSUlMaXRlcmFs
KCJpLW1pbmdvIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImktbmF2YWpvIiksIEFTQ0lJ
TGl0ZXJhbCgibnYiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiaS1wd24iKSwgQVNDSUlM
aXRlcmFsKCJwd24iKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiaS10YW8iKSwgQVNDSUlM
aXRlcmFsKCJ0YW8iKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiaS10YXkiKSwgQVNDSUlM
aXRlcmFsKCJ0YXkiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiaS10c3UiKSwgQVNDSUlM
aXRlcmFsKCJ0c3UiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgic2duLWJlLWZyIiksIEFT
Q0lJTGl0ZXJhbCgic2ZiIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoInNnbi1iZS1ubCIp
LCBBU0NJSUxpdGVyYWwoInZndCIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJzZ24tY2gt
ZGUiKSwgQVNDSUlMaXRlcmFsKCJzZ2ciKSB9LAorICAgICAgICAvLyBSZWd1bGFyLgorICAgICAg
ICB7IEFTQ0lJTGl0ZXJhbCgiYXJ0LWxvamJhbiIpLCBBU0NJSUxpdGVyYWwoImpibyIpIH0sCisg
ICAgICAgIHsgQVNDSUlMaXRlcmFsKCJjZWwtZ2F1bGlzaCIpLCBBU0NJSUxpdGVyYWwoImNlbC1n
YXVsaXNoIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoIm5vLWJvayIpLCBBU0NJSUxpdGVy
YWwoIm5iIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoIm5vLW55biIpLCBBU0NJSUxpdGVy
YWwoIm5uIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoInpoLWd1b3l1IiksIEFTQ0lJTGl0
ZXJhbCgiY21uIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoInpoLWhha2thIiksIEFTQ0lJ
TGl0ZXJhbCgiaGFrIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoInpoLW1pbiIpLCBBU0NJ
SUxpdGVyYWwoInpoLW1pbiIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJ6aC1taW4tbmFu
IiksIEFTQ0lJTGl0ZXJhbCgibmFuIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoInpoLXhp
YW5nIiksIEFTQ0lJTGl0ZXJhbCgiaHNuIikgfQorICAgIH07CisKKyAgICByZXR1cm4gdGFnTWFw
LmdldChsb2NhbGUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7Cit9CisKK3N0YXRpYyBTdHJp
bmcgY2Fub25pY2FsaXplTGFuZ3VhZ2VUYWcoY29uc3QgU3RyaW5nJiBsb2NhbGUpCit7CisgICAg
Ly8gNi4yLjIgSXNTdHJ1Y3R1cmFsbHlWYWxpZExhbmd1YWdlVGFnIChsb2NhbGUpCisgICAgLy8g
Ni4yLjMgQ2Fub25pY2FsaXplTGFuZ3VhZ2VUYWcgKGxvY2FsZSkKKyAgICAvLyBUaGVzZSBhcmUg
ZG9uZSBvbmUgYWZ0ZXIgYW5vdGhlciBpbiBDYW5vbmljYWxpemVMb2NhbGVMaXN0LCBzbyB0aGV5
IGFyZSBjb21iaW5lZCBoZXJlIHRvIHJlZHVjZSBkdXBsaWNhdGlvbi4KKyAgICAvLyBodHRwczov
L3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvYmNwL2JjcDQ3LnR4dAorCisgICAgLy8gTGFuZ3VhZ2Ut
VGFnID0gbGFuZ3RhZyAvIHByaXZhdGV1c2UgLyBncmFuZGZhdGhlcmVkCisgICAgU3RyaW5nIGdy
YW5kZmF0aGVyID0gZ2V0R3JhbmRmYXRoZXJlZExhbmdUYWcobG9jYWxlKTsKKyAgICBpZiAoIWdy
YW5kZmF0aGVyLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZ3JhbmRmYXRoZXI7CisKKyAgICAv
LyBGSVhNRTogUmVwbGFjZSByZWR1bmRhbnQgdGFncyBbUkZDNDY0N10uCisKKyAgICBWZWN0b3I8
U3RyaW5nPiBwYXJ0czsKKyAgICBsb2NhbGUuc3BsaXQoJy0nLCBwYXJ0cyk7CisgICAgaWYgKCFw
YXJ0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU3RyaW5nIGxhbmd0YWcgPSBnZXRDYW5vbmljYWxM
YW5nVGFnKHBhcnRzKTsKKyAgICAgICAgaWYgKCFsYW5ndGFnLmlzTnVsbCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGxhbmd0YWc7CisKKyAgICAgICAgU3RyaW5nIHByaXZhdGV1c2UgPSBnZXRQcml2
YXRlVXNlTGFuZ1RhZyhwYXJ0cywgMCk7CisgICAgICAgIGlmICghcHJpdmF0ZXVzZS5pc051bGwo
KSkKKyAgICAgICAgICAgIHJldHVybiBwcml2YXRldXNlOworICAgIH0KKworICAgIHJldHVybiBT
dHJpbmcoKTsKK30KKworSlNBcnJheSogY2Fub25pY2FsaXplTG9jYWxlTGlzdChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgbG9jYWxlcykKK3sKKyAgICAvLyA5LjIuMSBDYW5vbmljYWxpemVMb2Nh
bGVMaXN0IChsb2NhbGVzKQorICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKTsKKyAg
ICBKU0FycmF5KiBzZWVuID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgZ2xv
YmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24o
QXJyYXlXaXRoQ29udGlndW91cyksIDApOworICAgIGlmICghc2VlbikgeworICAgICAgICB0aHJv
d091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KworICAgIC8vIDEuIElmIGxvY2FsZXMgaXMgdW5kZWZpbmVkLCB0aGVuIGEuIFJldHVybiBhIG5l
dyBlbXB0eSBMaXN0LgorICAgIGlmIChsb2NhbGVzLmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJl
dHVybiBzZWVuOworCisgICAgLy8gMi4gTGV0IHNlZW4gYmUgYW4gZW1wdHkgTGlzdC4KKyAgICAv
LyBEb25lIGJlZm9yZSB0byBhbHNvIHJldHVybiBpbiBzdGVwIDEsIGlmIG5lZWRlZC4KKworICAg
IC8vIDMuIElmIFR5cGUobG9jYWxlcykgaXMgU3RyaW5nLCB0aGVuCisgICAgSlNPYmplY3QqIGxv
Y2FsZXNPYmplY3Q7CisgICAgaWYgKGxvY2FsZXMuaXNTdHJpbmcoKSkgeworICAgICAgICAvLyAg
YS4gTGV0IGFMb2NhbGVzIGJlIENyZWF0ZUFycmF5RnJvbUxpc3Qowqtsb2NhbGVzwrspLgorICAg
ICAgICBKU0FycmF5KiBsb2NhbGVzQXJyYXkgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxp
emVkKHZtLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5n
QWxsb2NhdGlvbihBcnJheVdpdGhDb250aWd1b3VzKSwgMSk7CisgICAgICAgIGxvY2FsZXNBcnJh
eS0+aW5pdGlhbGl6ZUluZGV4KHZtLCAwLCBsb2NhbGVzKTsKKyAgICAgICAgLy8gNC4gTGV0IE8g
YmUgVG9PYmplY3QoYUxvY2FsZXMpLgorICAgICAgICBsb2NhbGVzT2JqZWN0ID0gbG9jYWxlc0Fy
cmF5OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIDQuIExldCBPIGJlIFRvT2JqZWN0KGFMb2Nh
bGVzKS4KKyAgICAgICAgbG9jYWxlc09iamVjdCA9IGxvY2FsZXMudG9PYmplY3QoZXhlYyk7Cisg
ICAgfQorCisgICAgLy8gNS4gUmV0dXJuSWZBYnJ1cHQoTykuCisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIDYuIExldCBsZW4g
YmUgVG9MZW5ndGgoR2V0KE8sICJsZW5ndGgiKSkuCisgICAgSlNWYWx1ZSBsZW5ndGhQcm9wZXJ0
eSA9IGxvY2FsZXNPYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBkb3VibGUgbGVuZ3RoID0gbGVuZ3RoUHJvcGVydHkudG9MZW5ndGgoZXhlYyk7CisgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IC8vIEtlZXAgdHJhY2sgb2YgbG9jYWxlcyB0aGF0IGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgbGlz
dC4KKyAgICBIYXNoU2V0PFN0cmluZz4gc2VlblNldDsKKworICAgIC8vIDcuIExldCBrIGJlIDAu
CisgICAgLy8gOC4gUmVwZWF0LCB3aGlsZSBrIDwgbGVuCisgICAgZm9yIChkb3VibGUgayA9IDA7
IGsgPCBsZW5ndGg7ICsraykgeworICAgICAgICAvLyBhLiBMZXQgUGsgYmUgVG9TdHJpbmcoayku
CisgICAgICAgIC8vIE5vdCBuZWVkZWQgYmVjYXVzZSBoYXNQcm9wZXJ0eSBhbmQgZ2V0IHRha2Ug
YW4gaW50IGZvciBudW1lcmljIGtleS4KKworICAgICAgICAvLyBiLiBMZXQga1ByZXNlbnQgYmUg
SGFzUHJvcGVydHkoTywgUGspLgorICAgICAgICBib29sIGtQcmVzZW50ID0gbG9jYWxlc09iamVj
dC0+aGFzUHJvcGVydHkoZXhlYywgayk7CisKKyAgICAgICAgLy8gYy4gUmV0dXJuSWZBYnJ1cHQo
a1ByZXNlbnQpLgorICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAvLyBkLiBJZiBrUHJlc2VudCBpcyB0cnVlLCB0
aGVuCisgICAgICAgIGlmIChrUHJlc2VudCkgeworICAgICAgICAgICAgLy8gaS4gTGV0IGtWYWx1
ZSBiZSBHZXQoTywgUGspLgorICAgICAgICAgICAgSlNWYWx1ZSBrVmFsdWUgPSBsb2NhbGVzT2Jq
ZWN0LT5nZXQoZXhlYywgayk7CisKKyAgICAgICAgICAgIC8vIGlpLiBSZXR1cm5JZkFicnVwdChr
VmFsdWUpLgorICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgICAgICAvLyBpaWkuIElmIFR5cGUoa1Zh
bHVlKSBpcyBub3QgU3RyaW5nIG9yIE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9u
LgorICAgICAgICAgICAgaWYgKCFrVmFsdWUuaXNTdHJpbmcoKSAmJiAha1ZhbHVlLmlzT2JqZWN0
KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
ImxvY2FsZSB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG9iamVjdCIpKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gaXYu
IExldCB0YWcgYmUgVG9TdHJpbmcoa1ZhbHVlKS4KKyAgICAgICAgICAgIEpTU3RyaW5nKiB0YWcg
PSBrVmFsdWUudG9TdHJpbmcoZXhlYyk7CisKKyAgICAgICAgICAgIC8vIHYuIFJldHVybklmQWJy
dXB0KHRhZykuCisgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgICAgIC8vIHZpLiBJZiBJc1N0cnVj
dHVyYWxseVZhbGlkTGFuZ3VhZ2VUYWcodGFnKSBpcyBmYWxzZSwgdGhyb3cgYSBSYW5nZUVycm9y
IGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIC8vIHZpaS4gTGV0IGNhbm9uaWNhbGl6ZWRUYWcgYmUg
Q2Fub25pY2FsaXplTGFuZ3VhZ2VUYWcodGFnKS4KKyAgICAgICAgICAgIFN0cmluZyBjYW5vbmlj
YWxpemVkVGFnID0gY2Fub25pY2FsaXplTGFuZ3VhZ2VUYWcodGFnLT52YWx1ZShleGVjKSk7Cisg
ICAgICAgICAgICBpZiAoY2Fub25pY2FsaXplZFRhZy5pc051bGwoKSkgeworICAgICAgICAgICAg
ICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVj
LCBTdHJpbmc6OmZvcm1hdCgiaW52YWxpZCBsYW5ndWFnZSB0YWc6ICVzIiwgdGFnLT52YWx1ZShl
eGVjKS51dGY4KCkuZGF0YSgpKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB2aWlpLiBJZiBjYW5vbmljYWxpemVkVGFn
IGlzIG5vdCBhbiBlbGVtZW50IG9mIHNlZW4sIGFwcGVuZCBjYW5vbmljYWxpemVkVGFnIGFzIHRo
ZSBsYXN0IGVsZW1lbnQgb2Ygc2Vlbi4KKyAgICAgICAgICAgIGlmIChzZWVuU2V0LmFkZChjYW5v
bmljYWxpemVkVGFnKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgIHNlZW4tPnB1c2goZXhl
YywganNTdHJpbmcoZXhlYywgY2Fub25pY2FsaXplZFRhZykpOworICAgICAgICB9CisgICAgICAg
IC8vIGUuIEluY3JlYXNlIGsgYnkgMS4KKyAgICB9CisKKyAgICByZXR1cm4gc2VlbjsKK30KKwor
c3RhdGljIFN0cmluZyBiZXN0QXZhaWxhYmxlTG9jYWxlKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYg
YXZhaWxhYmxlTG9jYWxlcywgU3RyaW5nIGxvY2FsZSkKK3sKKyAgICAvLyA5LjIuMiBCZXN0QXZh
aWxhYmxlTG9jYWxlIChhdmFpbGFibGVMb2NhbGVzLCBsb2NhbGUpCisgICAgLy8gMS4gTGV0IGNh
bmRpZGF0ZSBiZSBsb2NhbGUuCisgICAgU3RyaW5nIGNhbmRpZGF0ZSA9IGxvY2FsZTsKKworICAg
IC8vIDIuIFJlcGVhdAorICAgIHdoaWxlICghY2FuZGlkYXRlLmlzRW1wdHkoKSkgeworICAgICAg
ICAvLyBhLiBJZiBhdmFpbGFibGVMb2NhbGVzIGNvbnRhaW5zIGFuIGVsZW1lbnQgZXF1YWwgdG8g
Y2FuZGlkYXRlLCB0aGVuIHJldHVybiBjYW5kaWRhdGUuCisgICAgICAgIGlmIChhdmFpbGFibGVM
b2NhbGVzLmNvbnRhaW5zKGNhbmRpZGF0ZSkpCisgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRl
OworCisgICAgICAgIC8vIGIuIExldCBwb3MgYmUgdGhlIGNoYXJhY3RlciBpbmRleCBvZiB0aGUg
bGFzdCBvY2N1cnJlbmNlIG9mICItIiAoVSswMDJEKSB3aXRoaW4gY2FuZGlkYXRlLiBJZiB0aGF0
IGNoYXJhY3RlciBkb2VzIG5vdCBvY2N1ciwgcmV0dXJuIHVuZGVmaW5lZC4KKyAgICAgICAgc2l6
ZV90IHBvcyA9IGNhbmRpZGF0ZS5yZXZlcnNlRmluZCgnLScpOworICAgICAgICBpZiAocG9zID09
IG5vdEZvdW5kKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgICAgIC8vIGMu
IElmIHBvcyDiiaUgMiBhbmQgdGhlIGNoYXJhY3RlciAiLSIgb2NjdXJzIGF0IGluZGV4IHBvcy0y
IG9mIGNhbmRpZGF0ZSwgdGhlbiBkZWNyZWFzZSBwb3MgYnkgMi4KKyAgICAgICAgaWYgKHBvcyA+
PSAyICYmIGNhbmRpZGF0ZVtwb3MgLSAyXSA9PSAnLScpCisgICAgICAgICAgICBwb3MgLT0gMjsK
KworICAgICAgICAvLyBkLiBMZXQgY2FuZGlkYXRlIGJlIHRoZSBzdWJzdHJpbmcgb2YgY2FuZGlk
YXRlIGZyb20gcG9zaXRpb24gMCwgaW5jbHVzaXZlLCB0byBwb3NpdGlvbiBwb3MsIGV4Y2x1c2l2
ZS4KKyAgICAgICAgY2FuZGlkYXRlID0gY2FuZGlkYXRlLnN1YnN0cmluZygwLCBwb3MpOworICAg
IH0KKworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworc3RhdGljIEpTQXJyYXkqIGxvb2t1cFN1
cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2
YWlsYWJsZUxvY2FsZXMsIEpTQXJyYXkqIHJlcXVlc3RlZExvY2FsZXMpCit7CisgICAgLy8gOS4y
LjYgTG9va3VwU3VwcG9ydGVkTG9jYWxlcyAoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9j
YWxlcykKKworICAgIC8vIDEuIExldCByTG9jYWxlcyBiZSBDcmVhdGVBcnJheUZyb21MaXN0KHJl
cXVlc3RlZExvY2FsZXMpLgorICAgIC8vIEFscmVhZHkgYW4gYXJyYXkuCisKKyAgICAvLyAyLiBM
ZXQgbGVuIGJlIFRvTGVuZ3RoKEdldChyTG9jYWxlcywgImxlbmd0aCIpKS4KKyAgICB1bnNpZ25l
ZCBsZW4gPSByZXF1ZXN0ZWRMb2NhbGVzLT5sZW5ndGgoKTsKKworICAgIC8vIDMuIExldCBzdWJz
ZXQgYmUgYW4gZW1wdHkgTGlzdC4KKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7
CisgICAgSlNBcnJheSogc3Vic2V0ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2
bSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9j
YXRpb24oQXJyYXlXaXRoVW5kZWNpZGVkKSwgMCk7CisgICAgaWYgKCFzdWJzZXQpIHsKKyAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICAvLyA0LiBMZXQgayBiZSAwLgorICAgIC8vIDUuIFJlcGVhdCB3aGlsZSBr
IDwgbGVuCisgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGxlbjsgKytrKSB7CisgICAgICAg
IC8vIGEuIExldCBQayBiZSBUb1N0cmluZyhrKS4KKyAgICAgICAgLy8gYi4gTGV0IGxvY2FsZSBi
ZSBHZXQockxvY2FsZXMsIFBrKS4KKyAgICAgICAgSlNWYWx1ZSBsb2NhbGUgPSByZXF1ZXN0ZWRM
b2NhbGVzLT5nZXQoZXhlYywgayk7CisKKyAgICAgICAgLy8gYy4gUmV0dXJuSWZBYnJ1cHQobG9j
YWxlKS4KKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICAgICAgLy8gZC4gTGV0IG5vRXh0ZW5zaW9uc0xvY2FsZSBiZSB0
aGUgU3RyaW5nIHZhbHVlIHRoYXQgaXMgbG9jYWxlIHdpdGggYWxsIFVuaWNvZGUgbG9jYWxlIGV4
dGVuc2lvbiBzZXF1ZW5jZXMgcmVtb3ZlZC4KKyAgICAgICAgSlNTdHJpbmcqIGpzTG9jYWxlID0g
bG9jYWxlLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBTdHJpbmcgc0xvY2FsZSA9
IGpzTG9jYWxlLT52YWx1ZShleGVjKTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gcGFydHM7Cisg
ICAgICAgIHNMb2NhbGUuc3BsaXQoIi0iLCBwYXJ0cyk7CisgICAgICAgIFN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKKyAgICAgICAgc2l6ZV90IHBwID0gcGFydHMuc2l6ZSgpOworICAgICAgICBpZiAo
cHAgPiAwKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocGFydHNbMF0pOworICAgICAgICBm
b3IgKHNpemVfdCBwID0gMTsgcCA8IHBwOykgeworICAgICAgICAgICAgaWYgKHBhcnRzW3BdID09
ICJ1IikgeworICAgICAgICAgICAgICAgIC8vIFNraXAgdGhlIHUtIGFuZCBhbnl0aGluZyB0aGF0
IGZvbGxvd3MgdW50aWwgYW5vdGhlciBzaW5nbGV0b24uCisgICAgICAgICAgICAgICAgd2hpbGUg
KCsrcCA8IHBwICYmIHBhcnRzW3BdLmxlbmd0aCgpID4gMSkgeyB9CisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnLScp
OworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocGFydHNbcF0pOworICAgICAgICAgICAgKytw
OworICAgICAgICB9CisgICAgICAgIFN0cmluZyBub0V4dGVuc2lvbnNMb2NhbGUgPSBidWlsZGVy
LnRvU3RyaW5nKCk7CisKKyAgICAgICAgLy8gZS4gTGV0IGF2YWlsYWJsZUxvY2FsZSBiZSBCZXN0
QXZhaWxhYmxlTG9jYWxlKGF2YWlsYWJsZUxvY2FsZXMsIG5vRXh0ZW5zaW9uc0xvY2FsZSkuCisg
ICAgICAgIFN0cmluZyBhdmFpbGFibGVMb2NhbGUgPSBiZXN0QXZhaWxhYmxlTG9jYWxlKGF2YWls
YWJsZUxvY2FsZXMsIG5vRXh0ZW5zaW9uc0xvY2FsZSk7CisKKyAgICAgICAgLy8gZi4gSWYgYXZh
aWxhYmxlTG9jYWxlIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4gYXBwZW5kIGxvY2FsZSB0byB0aGUg
ZW5kIG9mIHN1YnNldC4KKyAgICAgICAgaWYgKCFhdmFpbGFibGVMb2NhbGUuaXNOdWxsKCkpCisg
ICAgICAgICAgICBzdWJzZXQtPnB1c2goZXhlYywgbG9jYWxlKTsKKworICAgICAgICAvLyBnLiBJ
bmNyZW1lbnQgayBieSAxLgorICAgIH0KKworICAgIC8vIDYuIFJldHVybiBzdWJzZXQuCisgICAg
cmV0dXJuIHN1YnNldDsKK30KKworc3RhdGljIEpTQXJyYXkqIGJlc3RGaXRTdXBwb3J0ZWRMb2Nh
bGVzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2Nh
bGVzLCBKU0FycmF5KiByZXF1ZXN0ZWRMb2NhbGVzKQoreworICAgIC8vIDkuMi43IEJlc3RGaXRT
dXBwb3J0ZWRMb2NhbGVzIChhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKQorICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgc29tZXRoaW5nIGJldHRlciB0aGFuIGxvb2t1cC4KKyAgICBy
ZXR1cm4gbG9va3VwU3VwcG9ydGVkTG9jYWxlcyhleGVjLCBhdmFpbGFibGVMb2NhbGVzLCByZXF1
ZXN0ZWRMb2NhbGVzKTsKK30KKworSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBKU0FycmF5KiBy
ZXF1ZXN0ZWRMb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnMpCit7CisgICAgLy8gOS4yLjggU3VwcG9y
dGVkTG9jYWxlcyAoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgb3B0aW9ucykK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFN0cmluZyBtYXRjaGVyOworCisgICAgLy8g
MS4gSWYgb3B0aW9ucyBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCisgICAgaWYgKCFvcHRpb25zLmlz
VW5kZWZpbmVkKCkpIHsKKyAgICAgICAgLy8gYS4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9w
dGlvbnMsICJsb2NhbGVNYXRjaGVyIiwgInN0cmluZyIsIMKrICJsb29rdXAiLCAiYmVzdCBmaXQi
IMK7LCAiYmVzdCBmaXQiKS4KKyAgICAgICAgY29uc3QgSGFzaFNldDxTdHJpbmc+IG1hdGNoZXJz
ID0gSGFzaFNldDxTdHJpbmc+KHsgQVNDSUlMaXRlcmFsKCJsb29rdXAiKSwgQVNDSUlMaXRlcmFs
KCJiZXN0IGZpdCIpIH0pOworICAgICAgICBtYXRjaGVyID0gZ2V0SW50bFN0cmluZ09wdGlvbihl
eGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCBtYXRjaGVycywg
ImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBvciBcImJlc3QgZml0XCIi
LCBBU0NJSUxpdGVyYWwoImJlc3QgZml0IikpOworICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVw
dChtYXRjaGVyKS4KKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gMi4gRWxz
ZSwgbGV0IG1hdGNoZXIgYmUgImJlc3QgZml0Ii4KKyAgICAgICAgbWF0Y2hlciA9IEFTQ0lJTGl0
ZXJhbCgiYmVzdCBmaXQiKTsKKyAgICB9CisKKyAgICBKU0FycmF5KiBzdXBwb3J0ZWRMb2NhbGVz
OworICAgIC8vIDMuIElmIG1hdGNoZXIgaXMgImJlc3QgZml0IiwKKyAgICBpZiAobWF0Y2hlciA9
PSAiYmVzdCBmaXQiKSB7CisgICAgICAgIC8vIGEuIExldCBNYXRjaGVyT3BlcmF0aW9uIGJlIHRo
ZSBhYnN0cmFjdCBvcGVyYXRpb24gQmVzdEZpdFN1cHBvcnRlZExvY2FsZXMuCisgICAgICAgIC8v
IDUuIExldCBzdXBwb3J0ZWRMb2NhbGVzIGJlIE1hdGNoZXJPcGVyYXRpb24oYXZhaWxhYmxlTG9j
YWxlcywgcmVxdWVzdGVkTG9jYWxlcykuCisgICAgICAgIHN1cHBvcnRlZExvY2FsZXMgPSBiZXN0
Rml0U3VwcG9ydGVkTG9jYWxlcyhleGVjLCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2Nh
bGVzKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyA0LiBFbHNlCisgICAgICAgIC8vIGEuIExl
dCBNYXRjaGVyT3BlcmF0aW9uIGJlIHRoZSBhYnN0cmFjdCBvcGVyYXRpb24gTG9va3VwU3VwcG9y
dGVkTG9jYWxlcy4KKyAgICAgICAgLy8gNS4gTGV0IHN1cHBvcnRlZExvY2FsZXMgYmUgTWF0Y2hl
ck9wZXJhdGlvbihhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKS4KKyAgICAgICAg
c3VwcG9ydGVkTG9jYWxlcyA9IGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoZXhlYywgYXZhaWxhYmxl
TG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcyk7CisgICAgfQorCisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIC8vIDYuIExl
dCBzdWJzZXQgYmUgQ3JlYXRlQXJyYXlGcm9tTGlzdChzdXBwb3J0ZWRMb2NhbGVzKS4KKyAgICAv
LyBBbHJlYWR5IGFuIGFycmF5LgorCisgICAgLy8gNy4gTGV0IGtleXMgYmUgc3Vic2V0LltbT3du
UHJvcGVydHlLZXlzXV0oKS4KKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBrZXlzID0gUHJvcGVydHlO
YW1lQXJyYXkoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CisgICAgc3VwcG9ydGVk
TG9jYWxlcy0+Z2V0T3duUHJvcGVydHlOYW1lcyhzdXBwb3J0ZWRMb2NhbGVzLCBleGVjLCBrZXlz
LCBFbnVtZXJhdGlvbk1vZGUoKSk7CisKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzYyA9IFBy
b3BlcnR5RGVzY3JpcHRvcigpOworICAgIGRlc2Muc2V0Q29uZmlndXJhYmxlKGZhbHNlKTsKKyAg
ICBkZXNjLnNldFdyaXRhYmxlKGZhbHNlKTsKKworICAgIC8vIDguIFJlcGVhdCBmb3IgZWFjaCBl
bGVtZW50IFAgb2Yga2V5cyBpbiBMaXN0IG9yZGVyLAorICAgIHNpemVfdCBsZW4gPSBrZXlzLnNp
emUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgIC8v
IGEuIExldCBkZXNjIGJlIFByb3BlcnR5RGVzY3JpcHRvciB7IFtbQ29uZmlndXJhYmxlXV06IGZh
bHNlLCBbW1dyaXRhYmxlXV06IGZhbHNlIH0uCisgICAgICAgIC8vIENyZWF0ZWQgYWJvdmUgZm9y
IHJldXNlLgorCisgICAgICAgIC8vIGIuIExldCBzdGF0dXMgYmUgRGVmaW5lUHJvcGVydHlPclRo
cm93KHN1YnNldCwgUCwgZGVzYykuCisgICAgICAgIHN1cHBvcnRlZExvY2FsZXMtPmRlZmluZU93
blByb3BlcnR5KHN1cHBvcnRlZExvY2FsZXMsIGV4ZWMsIGtleXNbaV0sIGRlc2MsIHRydWUpOwor
CisgICAgICAgIC8vIGMuIEFzc2VydDogc3RhdHVzIGlzIG5vdCBhYnJ1cHQgY29tcGxldGlvbi4K
KyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgLy8gOS4gUmV0dXJuIHN1YnNldC4KKyAgICByZXR1
cm4gc3VwcG9ydGVkTG9jYWxlczsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAv
LyBFTkFCTEUoSU5UTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3Qu
aAppbmRleCA4MzQyODU0MmIyZDBmYmM3ZTViMTQ0YTM2YmNiYjg2ZWRmY2JiZTgyLi5mZGU2MmI1
M2E2NjA1NzJkZGM5OTQyMDM3NTJiN2VkN2VkMDJhNjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bE9iamVjdC5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUo
SU5UTCkKIAorI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNPYmpl
Y3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC01Niw2ICs1Nyw5IEBAIHByaXZhdGU6CiAgICAg
SW50bE9iamVjdChWTSYsIFN0cnVjdHVyZSopOwogfTsKIAorSlNBcnJheSogY2Fub25pY2FsaXpl
TG9jYWxlTGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVlIGxvY2FsZXMpOworSlNWYWx1ZSBzdXBwb3J0
ZWRMb2NhbGVzKEV4ZWNTdGF0ZSosIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9j
YWxlcywgSlNBcnJheSogcmVxdWVzdGVkTG9jYWxlcywgSlNWYWx1ZSBvcHRpb25zKTsKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5UTCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKaW5kZXggOWUwYWFiMTc3NGRlMTdhMDNj
YTZkZTEyYzllOThmOWQ3MjM2MzYwYi4uYTBjZjc3N2RkNjk4YTQ2Njg0ZTQ3MGNjNTIwYmVjMWNl
NDE4YTg3YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNW
YWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5j
cHAKQEAgLTU2LDYgKzU2LDE4IEBAIGRvdWJsZSBKU1ZhbHVlOjp0b0ludGVnZXJQcmVzZXJ2ZU5h
TihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgcmV0dXJuIHRydW5jKHRvTnVtYmVyKGV4ZWMp
KTsKIH0KIAorZG91YmxlIEpTVmFsdWU6OnRvTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QK
K3sKKyAgICAvLyBFQ01BIDcuMS4xNQorICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlv
bmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b2xlbmd0aAorICAgIGRvdWJsZSBkID0gdG9JbnRl
Z2VyKGV4ZWMpOworICAgIGlmIChkIDw9IDApCisgICAgICAgIHJldHVybiAwLjA7CisgICAgaWYg
KHN0ZDo6aXNpbmYoZCkpCisgICAgICAgIHJldHVybiA5MDA3MTk5MjU0NzQwOTkxLjA7IC8vIDIg
KiogNTMgLSAxCisgICAgcmV0dXJuIHN0ZDo6bWluKGQsIDkwMDcxOTkyNTQ3NDA5OTEuMCk7Cit9
CisKIGRvdWJsZSBKU1ZhbHVlOjp0b051bWJlclNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKIHsKICAgICBBU1NFUlQoIWlzSW50MzIoKSAmJiAhaXNEb3VibGUoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgKaW5kZXggYjdlYWFkMmRhMGEyZDUzMzY2
YTkxZTY0YTRjMjkzZWIwY2I5OGNhNy4uYzgwM2I2NDlhNTA3MjI1NDRhOTNjMGY2MWMyMDEyNWNh
MTJiNWRjMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNW
YWx1ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaApA
QCAtMjYyLDYgKzI2Miw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBkb3VibGUg
dG9JbnRlZ2VyUHJlc2VydmVOYU4oRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgaW50MzJfdCB0b0lu
dDMyKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgIHVpbnQzMl90IHRvVUludDMyKEV4ZWNTdGF0ZSop
IGNvbnN0OworICAgIGRvdWJsZSB0b0xlbmd0aChFeGVjU3RhdGUqKSBjb25zdDsKIAogICAgIC8v
IEZsb2F0aW5nIHBvaW50IGNvbnZlcnNpb25zICh0aGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rp
b24gZm9yIFdlYkNvcmU7CiAgICAgLy8gc2luZ2xlIHByZWNpc2lvbiBmbG9hdCBpcyBub3QgYSBy
ZXByZXNlbnRhdGlvbiB1c2VkIGluIEpTIG9yIEpTQykuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXggNGUwOTRmZDY3OWI5ZDViY2Y0
Yjg4NmYzNjAyYzZjMWIwZmIyMDkxYS4uMWMxMzQ5MzUxNzQ0YjNjYTE0Njk5NzdmYjYxNjY2ZTM4
YjZmYTNkYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcApAQCAtMTQ1LDYgKzE0NSw5IEBACiAKICNpZiBFTkFCTEUoSU5UTCkKICNpbmNs
dWRlICJJbnRsT2JqZWN0LmgiCisjaW5jbHVkZSA8dW5pY29kZS91Y29sLmg+CisjaW5jbHVkZSA8
dW5pY29kZS91ZGF0Lmg+CisjaW5jbHVkZSA8dW5pY29kZS91bnVtLmg+CiAjZW5kaWYgLy8gRU5B
QkxFKElOVEwpCiAKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKQEAgLTk5Nyw2ICsxMDAw
LDUwIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQog
I2VuZGlmCiB9CiAKKyMgaWYgRU5BQkxFKElOVEwpCitjb25zdCBIYXNoU2V0PFN0cmluZz4mIEpT
R2xvYmFsT2JqZWN0OjppbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCkKK3sKKyAgICBpZiAo
bV9pbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzLmlzRW1wdHkoKSkgeworICAgICAgICBpbnQz
Ml90IGNvdW50ID0gdWNvbF9jb3VudEF2YWlsYWJsZSgpOworICAgICAgICBmb3IgKGludDMyX3Qg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBTdHJpbmcgbG9jYWxlKHVjb2xf
Z2V0QXZhaWxhYmxlKGkpKTsKKyAgICAgICAgICAgIC8vIENoYW5nZSBmcm9tIElDVSBmb3JtYXQg
dG8gQkNQNDcuCisgICAgICAgICAgICBsb2NhbGUucmVwbGFjZSgnXycsICctJyk7CisgICAgICAg
ICAgICBtX2ludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMuYWRkKGxvY2FsZSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIG1faW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlczsKK30K
KworY29uc3QgSGFzaFNldDxTdHJpbmc+JiBKU0dsb2JhbE9iamVjdDo6aW50bERhdGVUaW1lRm9y
bWF0QXZhaWxhYmxlTG9jYWxlcygpCit7CisgICAgaWYgKG1faW50bERhdGVUaW1lRm9ybWF0QXZh
aWxhYmxlTG9jYWxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaW50MzJfdCBjb3VudCA9IHVkYXRf
Y291bnRBdmFpbGFibGUoKTsKKyAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7
ICsraSkgeworICAgICAgICAgICAgU3RyaW5nIGxvY2FsZSh1ZGF0X2dldEF2YWlsYWJsZShpKSk7
CisgICAgICAgICAgICAvLyBDaGFuZ2UgZnJvbSBJQ1UgZm9ybWF0IHRvIEJDUDQ3LgorICAgICAg
ICAgICAgbG9jYWxlLnJlcGxhY2UoJ18nLCAnLScpOworICAgICAgICAgICAgbV9pbnRsRGF0ZVRp
bWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzLmFkZChsb2NhbGUpOworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBtX2ludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXM7Cit9CisKK2Nv
bnN0IEhhc2hTZXQ8U3RyaW5nPiYgSlNHbG9iYWxPYmplY3Q6OmludGxOdW1iZXJGb3JtYXRBdmFp
bGFibGVMb2NhbGVzKCkKK3sKKyAgICBpZiAobV9pbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9j
YWxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaW50MzJfdCBjb3VudCA9IHVudW1fY291bnRBdmFp
bGFibGUoKTsKKyAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewor
ICAgICAgICAgICAgU3RyaW5nIGxvY2FsZSh1bnVtX2dldEF2YWlsYWJsZShpKSk7CisgICAgICAg
ICAgICAvLyBDaGFuZ2UgZnJvbSBJQ1UgZm9ybWF0IHRvIEJDUDQ3LgorICAgICAgICAgICAgbG9j
YWxlLnJlcGxhY2UoJ18nLCAnLScpOworICAgICAgICAgICAgbV9pbnRsTnVtYmVyRm9ybWF0QXZh
aWxhYmxlTG9jYWxlcy5hZGQobG9jYWxlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
bV9pbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlczsKK30KKyNlbmRpZiAvLyBFTkFCTEUo
SU5UTCkKKwogdm9pZCBKU0dsb2JhbE9iamVjdDo6cXVldWVNaWNyb3Rhc2soUGFzc1JlZlB0cjxN
aWNyb3Rhc2s+IHRhc2spCiB7CiAgICAgaWYgKGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnF1
ZXVlVGFza1RvRXZlbnRMb29wKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaAppbmRleCAxY2EzMWI3YjEyNmZiMmVmZDNiNzE5MGVhZjc2NGY1Y2Rh
MDk5MWZlLi5mMDdlNTFmOTNjZTFhMGI0NjM0MDViMWY3MDc3M2IwZjFiZWFmNDA3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAgLTMwMyw2
ICszMDMsMTIgQEAgcHJvdGVjdGVkOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxKU0dsb2JhbE9iamVj
dERlYnVnZ2FibGU+IG1faW5zcGVjdG9yRGVidWdnYWJsZTsKICNlbmRpZgogCisjaWYgRU5BQkxF
KElOVEwpCisgICAgSGFzaFNldDxTdHJpbmc+IG1faW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxl
czsKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9pbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2Nh
bGVzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2ludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2Nh
bGVzOworI2VuZGlmIC8vIEVOQUJMRShJTlRMKQorCiAgICAgUmVmUHRyPFdhdGNocG9pbnRTZXQ+
IG1fbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQ7CiAgICAgUmVmUHRyPFdhdGNocG9p
bnRTZXQ+IG1faGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50OwogICAgIFJlZlB0cjxXYXRjaHBvaW50
U2V0PiBtX3ZhckluamVjdGlvbldhdGNocG9pbnQ7CkBAIC01MjAsNiArNTI2LDEyIEBAIHB1Ymxp
YzoKICAgICBKU0dsb2JhbE9iamVjdERlYnVnZ2FibGUmIGluc3BlY3RvckRlYnVnZ2FibGUoKSB7
IHJldHVybiAqbV9pbnNwZWN0b3JEZWJ1Z2dhYmxlLmdldCgpOyB9CiAjZW5kaWYKIAorI2lmIEVO
QUJMRShJTlRMKQorICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bENvbGxhdG9yQXZhaWxh
YmxlTG9jYWxlcygpOworICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bERhdGVUaW1lRm9y
bWF0QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bE51
bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5UTCkKKwog
ICAgIHZvaWQgc2V0Q29uc29sZUNsaWVudChDb25zb2xlQ2xpZW50KiBjb25zb2xlQ2xpZW50KSB7
IG1fY29uc29sZUNsaWVudCA9IGNvbnNvbGVDbGllbnQ7IH0KICAgICBDb25zb2xlQ2xpZW50KiBj
b25zb2xlQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jb25zb2xlQ2xpZW50OyB9CiAKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCA5NDAwOTNjZmNjMGNiMjc5YTYzZGM1OTUzYmIyMzM1NjQ3OGMwNDJjLi5mYmQ4NTkwMzE5OWYz
NGJmMWY0ODUwMGYxODg1N2RjYjFlMzQwZjUyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTUt
MDktMDIgIEFuZHkgVmFuV2Fnb25lciAgPHRoZXRhbGVjcmFmdGVyQGdtYWlsLmNvbT4KKworICAg
ICAgICBbSU5UTF0gSW1wbGVtZW50IHN1cHBvcnRlZExvY2FsZXNPZiBvbiBJbnRsIENvbnN0cnVj
dG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3
NTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBq
cy9pbnRsLWNvbGxhdG9yLWV4cGVjdGVkLnR4dDogQWRkZWQgdGVzdHMgZm9yIHN1cHBvcnRlZExv
Y2FsZXNPZgorICAgICAgICAqIGpzL2ludGwtZGF0ZXRpbWVmb3JtYXQtZXhwZWN0ZWQudHh0OiBB
ZGRlZCB0ZXN0cyBmb3Igc3VwcG9ydGVkTG9jYWxlc09mCisgICAgICAgICoganMvaW50bC1udW1i
ZXJmb3JtYXQtZXhwZWN0ZWQudHh0OiBBZGRlZCB0ZXN0cyBmb3Igc3VwcG9ydGVkTG9jYWxlc09m
CisgICAgICAgICoganMvc2NyaXB0LXRlc3RzL2ludGwtY29sbGF0b3IuanM6IEFkZGVkIHRlc3Rz
IGZvciBzdXBwb3J0ZWRMb2NhbGVzT2YKKyAgICAgICAgKiBqcy9zY3JpcHQtdGVzdHMvaW50bC1k
YXRldGltZWZvcm1hdC5qczogQWRkZWQgdGVzdHMgZm9yIHN1cHBvcnRlZExvY2FsZXNPZgorICAg
ICAgICAqIGpzL3NjcmlwdC10ZXN0cy9pbnRsLW51bWJlcmZvcm1hdC5qczogQWRkZWQgdGVzdHMg
Zm9yIHN1cHBvcnRlZExvY2FsZXNPZgorCiAyMDE1LTA5LTAyICBaYWxhbiBCdWp0YXMgIDx6YWxh
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVwYWludCBjbGVhbnVwOgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvanMvaW50bC1jb2xsYXRvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9p
bnRsLWNvbGxhdG9yLWV4cGVjdGVkLnR4dAppbmRleCA0ZDVmZGRmNzU2ZmM4ZmYwMDBmZWUzMGE1
N2RmYWEwNjI2ZTQzNTk4Li5lNDM1MGM3NTQyODAzNTRjOTRlMDYzZTQyMzUzNjlkN2RjMGNmYjg4
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9qcy9pbnRsLWNvbGxhdG9yLWV4cGVjdGVkLnR4dAor
KysgYi9MYXlvdXRUZXN0cy9qcy9pbnRsLWNvbGxhdG9yLWV4cGVjdGVkLnR4dApAQCAtMTgsNiAr
MTgsMjkgQEAgUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuQ29sbGF0
b3IsICdwcm90b3R5cGUnKS5lbnVtZXJhYmxlIGlzIGYKIFBBU1MgT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihJbnRsLkNvbGxhdG9yLCAncHJvdG90eXBlJykuY29uZmlndXJhYmxlIGlz
IGZhbHNlCiBQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mLmxlbmd0aCBpcyAx
CiBQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCkgaXMgYW4gaW5zdGFuY2Ug
b2YgQXJyYXkKK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbChudWxs
LCAnZW4nKSBpcyBbICdlbicgXQorUEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNP
Zi5jYWxsKHt9LCAnZW4nKSBpcyBbICdlbicgXQorUEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRl
ZExvY2FsZXNPZi5jYWxsKDEsICdlbicpIGlzIFsgJ2VuJyBdCitQQVNTIEludGwuQ29sbGF0b3Iu
c3VwcG9ydGVkTG9jYWxlc09mKDkpIGlzIFtdCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVk
TG9jYWxlc09mKCdlbicpIGlzIFsgJ2VuJyBdCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVk
TG9jYWxlc09mKHsgbGVuZ3RoOiAyLCAxOiAnZW4nLCAwOiAnZXMnIH0pIGlzIFsgJ2VzJywgJ2Vu
JyBdCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKFsgJ2VuJywgJ3B0Jywg
J2VuJywgJ2VzJyBdKSBpcyBbICdlbicsICdwdCcsICdlcycgXQorUEFTUyBJbnRsLkNvbGxhdG9y
LnN1cHBvcnRlZExvY2FsZXNPZignRW4tbGFUbi11cy12YXJpYW50Mi12YXJpYW50MS0xYWJjLVUt
a28tdFJ1ZS1BLWFhLWFhYS14LVJFU0VSVkVEJykgaXMgWyAnZW4tTGF0bi1VUy12YXJpYW50Mi12
YXJpYW50MS0xYWJjLWEtYWEtYWFhLXUta28tdHJ1ZS14LXJlc2VydmVkJyBdCitQQVNTIEludGwu
Q29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCduby1ib2snKSBpcyBbICduYicgXQorUEFTUyBJ
bnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZigneC1zb21lLXRoaW5nJykgaXMgW10KK1BB
U1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoT2JqZWN0LmNyZWF0ZShudWxsLCB7
IGxlbmd0aDogeyBnZXQoKSB7IHRocm93IEVycm9yKCdhJykgfSB9IH0pKSB0aHJldyBleGNlcHRp
b24gRXJyb3I6IGEuCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKE9iamVj
dC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgdmFsdWU6IDEgfSwgMDogeyBnZXQoKSB7IHRocm93
IEVycm9yKCdiJykgfSB9IH0pKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IGIuCitQQVNTIEludGwu
Q29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKFsgeyB0b1N0cmluZygpIHsgdGhyb3cgRXJyb3Io
J2MnKSB9IH0gXSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBjLgorUEFTUyBJbnRsLkNvbGxhdG9y
LnN1cHBvcnRlZExvY2FsZXNPZihbIDUgXSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogbG9j
YWxlIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb3Igb2JqZWN0LgorUEFTUyBJbnRsLkNvbGxhdG9y
LnN1cHBvcnRlZExvY2FsZXNPZignJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFs
aWQgbGFuZ3VhZ2UgdGFnOiAuCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09m
KCdhJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBh
LgorUEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignYWJjZGVmZ2hpaicpIHRo
cmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogYWJjZGVmZ2hp
ai4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJyMkJykgdGhyZXcgZXhj
ZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiAjJC4KK1BBU1MgSW50bC5D
b2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLUAtYWJjJykgdGhyZXcgZXhjZXB0aW9uIFJh
bmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi1ALWFiYy4KK1BBU1MgSW50bC5Db2xs
YXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXUnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJv
cjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXUuCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9y
dGVkTG9jYWxlc09mKCdlbi11LWtuLXRydWUtdS1rby10cnVlJykgdGhyZXcgZXhjZXB0aW9uIFJh
bmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi11LWtuLXRydWUtdS1rby10cnVlLgor
UEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignZW4teCcpIHRocmV3IGV4Y2Vw
dGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4teC4KK1BBU1MgSW50bC5D
b2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLSonKSB0aHJldyBleGNlcHRpb24gUmFuZ2VF
cnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLSouCiBQQVNTIEludGwuQ29sbGF0b3IucHJv
dG90eXBlLmNvbnN0cnVjdG9yIGlzIEludGwuQ29sbGF0b3IKIFBBU1MgSW50bC5Db2xsYXRvci5w
cm90b3R5cGUuY29tcGFyZSBpcyBhbiBpbnN0YW5jZSBvZiBGdW5jdGlvbgogUEFTUyBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuQ29sbGF0b3IucHJvdG90eXBlLCAnY29tcGFy
ZScpLmdldCBpcyBhbiBpbnN0YW5jZSBvZiBGdW5jdGlvbgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvanMvaW50bC1kYXRldGltZWZvcm1hdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9p
bnRsLWRhdGV0aW1lZm9ybWF0LWV4cGVjdGVkLnR4dAppbmRleCA2MDE3M2ZlMjcyMmVmNjViMjIw
ZGQ5YmU0N2FmMTQyYmZiZjM4NDM1Li5kMDg4NWMyMjFjN2QxMjdiNGY2ZGUxNDg1MDY2ZTFhOTMy
NTQ2NTI4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9qcy9pbnRsLWRhdGV0aW1lZm9ybWF0LWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9qcy9pbnRsLWRhdGV0aW1lZm9ybWF0LWV4cGVj
dGVkLnR4dApAQCAtMTgsNiArMTgsMjkgQEAgUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEludGwuRGF0ZVRpbWVGb3JtYXQsICdwcm90b3R5cGUnKS5lbnVtZXJhYmwKIFBBU1Mg
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJbnRsLkRhdGVUaW1lRm9ybWF0LCAncHJv
dG90eXBlJykuY29uZmlndXJhYmxlIGlzIGZhbHNlCiBQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQu
c3VwcG9ydGVkTG9jYWxlc09mLmxlbmd0aCBpcyAxCiBQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQu
c3VwcG9ydGVkTG9jYWxlc09mKCkgaXMgYW4gaW5zdGFuY2Ugb2YgQXJyYXkKK1BBU1MgSW50bC5E
YXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbChudWxsLCAnZW4nKSBpcyBbICdl
bicgXQorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKHt9
LCAnZW4nKSBpcyBbICdlbicgXQorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExv
Y2FsZXNPZi5jYWxsKDEsICdlbicpIGlzIFsgJ2VuJyBdCitQQVNTIEludGwuRGF0ZVRpbWVGb3Jt
YXQuc3VwcG9ydGVkTG9jYWxlc09mKDkpIGlzIFtdCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQu
c3VwcG9ydGVkTG9jYWxlc09mKCdlbicpIGlzIFsgJ2VuJyBdCitQQVNTIEludGwuRGF0ZVRpbWVG
b3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKHsgbGVuZ3RoOiAyLCAxOiAnZW4nLCAwOiAnZXMnIH0p
IGlzIFsgJ2VzJywgJ2VuJyBdCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9j
YWxlc09mKFsgJ2VuJywgJ3B0JywgJ2VuJywgJ2VzJyBdKSBpcyBbICdlbicsICdwdCcsICdlcycg
XQorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignRW4tbGFUbi11
cy12YXJpYW50Mi12YXJpYW50MS0xYWJjLVUta28tdFJ1ZS1BLWFhLWFhYS14LVJFU0VSVkVEJykg
aXMgWyAnZW4tTGF0bi1VUy12YXJpYW50Mi12YXJpYW50MS0xYWJjLWEtYWEtYWFhLXUta28tdHJ1
ZS14LXJlc2VydmVkJyBdCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mKCduby1ib2snKSBpcyBbICduYicgXQorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBv
cnRlZExvY2FsZXNPZigneC1zb21lLXRoaW5nJykgaXMgW10KK1BBU1MgSW50bC5EYXRlVGltZUZv
cm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoT2JqZWN0LmNyZWF0ZShudWxsLCB7IGxlbmd0aDogeyBn
ZXQoKSB7IHRocm93IEVycm9yKCdhJykgfSB9IH0pKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IGEu
CitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKE9iamVjdC5jcmVh
dGUobnVsbCwgeyBsZW5ndGg6IHsgdmFsdWU6IDEgfSwgMDogeyBnZXQoKSB7IHRocm93IEVycm9y
KCdiJykgfSB9IH0pKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IGIuCitQQVNTIEludGwuRGF0ZVRp
bWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsgeyB0b1N0cmluZygpIHsgdGhyb3cgRXJyb3Io
J2MnKSB9IH0gXSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBjLgorUEFTUyBJbnRsLkRhdGVUaW1l
Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihbIDUgXSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJv
cjogbG9jYWxlIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb3Igb2JqZWN0LgorUEFTUyBJbnRsLkRh
dGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdl
RXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiAuCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQu
c3VwcG9ydGVkTG9jYWxlc09mKCdhJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFs
aWQgbGFuZ3VhZ2UgdGFnOiBhLgorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExv
Y2FsZXNPZignYWJjZGVmZ2hpaicpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlk
IGxhbmd1YWdlIHRhZzogYWJjZGVmZ2hpai4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBw
b3J0ZWRMb2NhbGVzT2YoJyMkJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQg
bGFuZ3VhZ2UgdGFnOiAjJC4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2Nh
bGVzT2YoJ2VuLUAtYWJjJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFu
Z3VhZ2UgdGFnOiBlbi1ALWFiYy4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRM
b2NhbGVzT2YoJ2VuLXUnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5n
dWFnZSB0YWc6IGVuLXUuCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mKCdlbi11LWtuLXRydWUtdS1rby10cnVlJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6
IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi11LWtuLXRydWUtdS1rby10cnVlLgorUEFTUyBJbnRs
LkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4teCcpIHRocmV3IGV4Y2VwdGlv
biBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4teC4KK1BBU1MgSW50bC5EYXRl
VGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLSonKSB0aHJldyBleGNlcHRpb24gUmFu
Z2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLSouCiBQQVNTIEludGwuRGF0ZVRpbWVG
b3JtYXQucHJvdG90eXBlLmNvbnN0cnVjdG9yIGlzIEludGwuRGF0ZVRpbWVGb3JtYXQKIFBBU1Mg
SW50bC5EYXRlVGltZUZvcm1hdC5wcm90b3R5cGUuZm9ybWF0IGlzIGFuIGluc3RhbmNlIG9mIEZ1
bmN0aW9uCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSW50bC5EYXRlVGlt
ZUZvcm1hdC5wcm90b3R5cGUsICdmb3JtYXQnKS5nZXQgaXMgYW4gaW5zdGFuY2Ugb2YgRnVuY3Rp
b24KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL2ludGwtbnVtYmVyZm9ybWF0LWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2pzL2ludGwtbnVtYmVyZm9ybWF0LWV4cGVjdGVkLnR4dAppbmRl
eCA1MjE4NTFlZDY2NWQ4ZTc0OGQxYjY5MjQ2NTM0NmIxZjdiZWNmNGQwLi44NzBmMTE0NzZmOWQy
MTE0YTRjZTBhNmI2M2U3ZTY0OTI0YjNjMDQ1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9qcy9p
bnRsLW51bWJlcmZvcm1hdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvanMvaW50bC1u
dW1iZXJmb3JtYXQtZXhwZWN0ZWQudHh0CkBAIC0xOCw2ICsxOCwyOSBAQCBQQVNTIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSW50bC5OdW1iZXJGb3JtYXQsICdwcm90b3R5cGUnKS5l
bnVtZXJhYmxlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSW50bC5OdW1i
ZXJGb3JtYXQsICdwcm90b3R5cGUnKS5jb25maWd1cmFibGUgaXMgZmFsc2UKIFBBU1MgSW50bC5O
dW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmxlbmd0aCBpcyAxCiBQQVNTIEludGwuTnVt
YmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZigpIGlzIGFuIGluc3RhbmNlIG9mIEFycmF5CitQ
QVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKG51bGwsICdlbicp
IGlzIFsgJ2VuJyBdCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5j
YWxsKHt9LCAnZW4nKSBpcyBbICdlbicgXQorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0
ZWRMb2NhbGVzT2YuY2FsbCgxLCAnZW4nKSBpcyBbICdlbicgXQorUEFTUyBJbnRsLk51bWJlckZv
cm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoOSkgaXMgW10KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQu
c3VwcG9ydGVkTG9jYWxlc09mKCdlbicpIGlzIFsgJ2VuJyBdCitQQVNTIEludGwuTnVtYmVyRm9y
bWF0LnN1cHBvcnRlZExvY2FsZXNPZih7IGxlbmd0aDogMiwgMTogJ2VuJywgMDogJ2VzJyB9KSBp
cyBbICdlcycsICdlbicgXQorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YoWyAnZW4nLCAncHQnLCAnZW4nLCAnZXMnIF0pIGlzIFsgJ2VuJywgJ3B0JywgJ2VzJyBdCitQ
QVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignRW4tbGFUbi11cy12YXJp
YW50Mi12YXJpYW50MS0xYWJjLVUta28tdFJ1ZS1BLWFhLWFhYS14LVJFU0VSVkVEJykgaXMgWyAn
ZW4tTGF0bi1VUy12YXJpYW50Mi12YXJpYW50MS0xYWJjLWEtYWEtYWFhLXUta28tdHJ1ZS14LXJl
c2VydmVkJyBdCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignbm8t
Ym9rJykgaXMgWyAnbmInIF0KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mKCd4LXNvbWUtdGhpbmcnKSBpcyBbXQorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0
ZWRMb2NhbGVzT2YoT2JqZWN0LmNyZWF0ZShudWxsLCB7IGxlbmd0aDogeyBnZXQoKSB7IHRocm93
IEVycm9yKCdhJykgfSB9IH0pKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IGEuCitQQVNTIEludGwu
TnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVu
Z3RoOiB7IHZhbHVlOiAxIH0sIDA6IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcignYicpIH0gfSB9KSkg
dGhyZXcgZXhjZXB0aW9uIEVycm9yOiBiLgorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0
ZWRMb2NhbGVzT2YoWyB7IHRvU3RyaW5nKCkgeyB0aHJvdyBFcnJvcignYycpIH0gfSBdKSB0aHJl
dyBleGNlcHRpb24gRXJyb3I6IGMuCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExv
Y2FsZXNPZihbIDUgXSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogbG9jYWxlIHZhbHVlIG11
c3QgYmUgYSBzdHJpbmcgb3Igb2JqZWN0LgorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0
ZWRMb2NhbGVzT2YoJycpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1
YWdlIHRhZzogLgorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2En
KSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGEuCitQ
QVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignYWJjZGVmZ2hpaicpIHRo
cmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogYWJjZGVmZ2hp
ai4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCcjJCcpIHRocmV3
IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogIyQuCitQQVNTIElu
dGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tQC1hYmMnKSB0aHJldyBleGNl
cHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLUAtYWJjLgorUEFTUyBJ
bnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXUnKSB0aHJldyBleGNlcHRp
b24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXUuCitQQVNTIEludGwuTnVt
YmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tdS1rbi10cnVlLXUta28tdHJ1ZScpIHRo
cmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tdS1rbi10
cnVlLXUta28tdHJ1ZS4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09m
KCdlbi14JykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFn
OiBlbi14LgorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLSon
KSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLSou
CiBQQVNTIEludGwuTnVtYmVyRm9ybWF0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciBpcyBJbnRsLk51
bWJlckZvcm1hdAogUEFTUyBJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUuZm9ybWF0IGlzIGFu
IGluc3RhbmNlIG9mIEZ1bmN0aW9uCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSW50bC5OdW1iZXJGb3JtYXQucHJvdG90eXBlLCAnZm9ybWF0JykuZ2V0IGlzIGFuIGluc3Rh
bmNlIG9mIEZ1bmN0aW9uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMv
aW50bC1jb2xsYXRvci5qcyBiL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9pbnRsLWNvbGxh
dG9yLmpzCmluZGV4IDVkZTE5MGVjMzMwYzk4ZGIxNjJlMmViNjM0YjFmM2E2NWRiODk1MDguLmY1
NGNiNGQ0MjIyNWZhMjM1NDczNjBhODRjN2RhMjQ5ZGIwNzQ0N2QgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9pbnRsLWNvbGxhdG9yLmpzCisrKyBiL0xheW91dFRlc3Rz
L2pzL3NjcmlwdC10ZXN0cy9pbnRsLWNvbGxhdG9yLmpzCkBAIC0zNSw4ICszNSw0MSBAQCBzaG91
bGRCZUZhbHNlKCJPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuQ29sbGF0b3Is
ICdwcm90b3R5cGUnKS5jb25maQogLy8gVGhlIHZhbHVlIG9mIHRoZSBsZW5ndGggcHJvcGVydHkg
b2YgdGhlIHN1cHBvcnRlZExvY2FsZXNPZiBtZXRob2QgaXMgMS4KIHNob3VsZEJlKCJJbnRsLkNv
bGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZi5sZW5ndGgiLCAiMSIpOwogCi0vLyBSZXR1cm5zIFN1
cHBvcnRlZExvY2FsZXMKKy8vIFJldHVybnMgU3VwcG9ydGVkTG9jYWxlcy4KIHNob3VsZEJlVHlw
ZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoKSIsICJBcnJheSIpOworLy8gRG9l
c24ndCBjYXJlIGFib3V0IGB0aGlzYC4KK3Nob3VsZEJlKCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRl
ZExvY2FsZXNPZi5jYWxsKG51bGwsICdlbicpIiwgIlsgJ2VuJyBdIik7CitzaG91bGRCZSgiSW50
bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbCh7fSwgJ2VuJykiLCAiWyAnZW4nIF0i
KTsKK3Nob3VsZEJlKCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKDEsICdl
bicpIiwgIlsgJ2VuJyBdIik7CisvLyBJZ25vcmVzIG5vbi1vYmplY3QsIG5vbi1zdHJpbmcgbGlz
dC4KK3Nob3VsZEJlKCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZig5KSIsICJbXSIp
OworLy8gTWFrZXMgYW4gYXJyYXkgb2YgdGFncy4KK3Nob3VsZEJlKCJJbnRsLkNvbGxhdG9yLnN1
cHBvcnRlZExvY2FsZXNPZignZW4nKSIsICJbICdlbicgXSIpOworLy8gSGFuZGxlcyBhcnJheS1s
aWtlIG9iamVjdHMuCitzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2Yo
eyBsZW5ndGg6IDIsIDE6ICdlbicsIDA6ICdlcycgfSkiLCAiWyAnZXMnLCAnZW4nIF0iKTsKKy8v
IERlZHVwbGljYXRlcyB0YWdzLgorc2hvdWxkQmUoIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9j
YWxlc09mKFsgJ2VuJywgJ3B0JywgJ2VuJywgJ2VzJyBdKSIsICJbICdlbicsICdwdCcsICdlcycg
XSIpOworLy8gQ2Fub25pY2FsaXplcyB0YWdzLgorc2hvdWxkQmUoIkludGwuQ29sbGF0b3Iuc3Vw
cG9ydGVkTG9jYWxlc09mKCdFbi1sYVRuLXVzLXZhcmlhbnQyLXZhcmlhbnQxLTFhYmMtVS1rby10
UnVlLUEtYWEtYWFhLXgtUkVTRVJWRUQnKSIsICJbICdlbi1MYXRuLVVTLXZhcmlhbnQyLXZhcmlh
bnQxLTFhYmMtYS1hYS1hYWEtdS1rby10cnVlLXgtcmVzZXJ2ZWQnIF0iKTsKKy8vIFJlcGxhY2Vz
IG91dGRhdGVkIHRhZ3MuCitzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVz
T2YoJ25vLWJvaycpIiwgIlsgJ25iJyBdIik7CisvLyBEb2Vzbid0IHRocm93LCBidXQgaWdub3Jl
cyBwcml2YXRlIHRhZ3MuCitzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVz
T2YoJ3gtc29tZS10aGluZycpIiwgIltdIik7CisvLyBUaHJvd3Mgb24gcHJvYmxlbXMgd2l0aCBs
ZW5ndGgsIGdldCwgb3IgdG9TdHJpbmcuCitzaG91bGRUaHJvdygiSW50bC5Db2xsYXRvci5zdXBw
b3J0ZWRMb2NhbGVzT2YoT2JqZWN0LmNyZWF0ZShudWxsLCB7IGxlbmd0aDogeyBnZXQoKSB7IHRo
cm93IEVycm9yKCdhJykgfSB9IH0pKSIsICInRXJyb3I6IGEnIik7CitzaG91bGRUaHJvdygiSW50
bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoT2JqZWN0LmNyZWF0ZShudWxsLCB7IGxlbmd0
aDogeyB2YWx1ZTogMSB9LCAwOiB7IGdldCgpIHsgdGhyb3cgRXJyb3IoJ2InKSB9IH0gfSkpIiwg
IidFcnJvcjogYiciKTsKK3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2Fs
ZXNPZihbIHsgdG9TdHJpbmcoKSB7IHRocm93IEVycm9yKCdjJykgfSB9IF0pIiwgIidFcnJvcjog
YyciKTsKKy8vIFRocm93cyBvbiBiYWQgdGFncy4KK3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9y
LnN1cHBvcnRlZExvY2FsZXNPZihbIDUgXSkiLCAiJ1R5cGVFcnJvcjogbG9jYWxlIHZhbHVlIG11
c3QgYmUgYSBzdHJpbmcgb3Igb2JqZWN0JyIpOworc2hvdWxkVGhyb3coIkludGwuQ29sbGF0b3Iu
c3VwcG9ydGVkTG9jYWxlc09mKCcnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0
YWc6ICciKTsKK3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZign
YScpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogYSciKTsKK3Nob3VsZFRo
cm93KCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignYWJjZGVmZ2hpaicpIiwgIidS
YW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogYWJjZGVmZ2hpaiciKTsKK3Nob3VsZFRo
cm93KCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignIyQnKSIsICInUmFuZ2VFcnJv
cjogaW52YWxpZCBsYW5ndWFnZSB0YWc6ICMkJyIpOworc2hvdWxkVGhyb3coIkludGwuQ29sbGF0
b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi1ALWFiYycpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlk
IGxhbmd1YWdlIHRhZzogZW4tQC1hYmMnIik7CitzaG91bGRUaHJvdygiSW50bC5Db2xsYXRvci5z
dXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXUnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFn
ZSB0YWc6IGVuLXUnIik7CitzaG91bGRUaHJvdygiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2Nh
bGVzT2YoJ2VuLXUta24tdHJ1ZS11LWtvLXRydWUnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBs
YW5ndWFnZSB0YWc6IGVuLXUta24tdHJ1ZS11LWtvLXRydWUnIik7CitzaG91bGRUaHJvdygiSW50
bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXgnKSIsICInUmFuZ2VFcnJvcjogaW52
YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXgnIik7CitzaG91bGRUaHJvdygiSW50bC5Db2xsYXRvci5z
dXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLSonKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFn
ZSB0YWc6IGVuLSonIik7CiAKIC8vIDEwLjMgUHJvcGVydGllcyBvZiB0aGUgSW50bC5Db2xsYXRv
ciBQcm90b3R5cGUgT2JqZWN0CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3NjcmlwdC10
ZXN0cy9pbnRsLWRhdGV0aW1lZm9ybWF0LmpzIGIvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3Rz
L2ludGwtZGF0ZXRpbWVmb3JtYXQuanMKaW5kZXggYmM3YzlhNzdjZTIxMTYyZGQyYjgzN2Y1NWZl
NGYxNzIzY2Y3ODRmOC4uNTU2ZWViZGUyZjMwOGRhMGJjOTRjYzk0NGUwOGZiMjA3ZDQ1ZjVmNiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2ludGwtZGF0ZXRpbWVmb3Jt
YXQuanMKKysrIGIvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2ludGwtZGF0ZXRpbWVmb3Jt
YXQuanMKQEAgLTM3LDYgKzM3LDM5IEBAIHNob3VsZEJlKCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1
cHBvcnRlZExvY2FsZXNPZi5sZW5ndGgiLCAiMSIpOwogCiAvLyBSZXR1cm5zIFN1cHBvcnRlZExv
Y2FsZXMKIHNob3VsZEJlVHlwZSgiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YoKSIsICJBcnJheSIpOworLy8gRG9lc24ndCBjYXJlIGFib3V0IGB0aGlzYC4KK3Nob3VsZEJl
KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKG51bGwsICdlbicp
IiwgIlsgJ2VuJyBdIik7CitzaG91bGRCZSgiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRM
b2NhbGVzT2YuY2FsbCh7fSwgJ2VuJykiLCAiWyAnZW4nIF0iKTsKK3Nob3VsZEJlKCJJbnRsLkRh
dGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKDEsICdlbicpIiwgIlsgJ2VuJyBd
Iik7CisvLyBJZ25vcmVzIG5vbi1vYmplY3QsIG5vbi1zdHJpbmcgbGlzdC4KK3Nob3VsZEJlKCJJ
bnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZig5KSIsICJbXSIpOworLy8gTWFr
ZXMgYW4gYXJyYXkgb2YgdGFncy4KK3Nob3VsZEJlKCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBv
cnRlZExvY2FsZXNPZignZW4nKSIsICJbICdlbicgXSIpOworLy8gSGFuZGxlcyBhcnJheS1saWtl
IG9iamVjdHMuCitzaG91bGRCZSgiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YoeyBsZW5ndGg6IDIsIDE6ICdlbicsIDA6ICdlcycgfSkiLCAiWyAnZXMnLCAnZW4nIF0iKTsK
Ky8vIERlZHVwbGljYXRlcyB0YWdzLgorc2hvdWxkQmUoIkludGwuRGF0ZVRpbWVGb3JtYXQuc3Vw
cG9ydGVkTG9jYWxlc09mKFsgJ2VuJywgJ3B0JywgJ2VuJywgJ2VzJyBdKSIsICJbICdlbicsICdw
dCcsICdlcycgXSIpOworLy8gQ2Fub25pY2FsaXplcyB0YWdzLgorc2hvdWxkQmUoIkludGwuRGF0
ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdFbi1sYVRuLXVzLXZhcmlhbnQyLXZhcmlh
bnQxLTFhYmMtVS1rby10UnVlLUEtYWEtYWFhLXgtUkVTRVJWRUQnKSIsICJbICdlbi1MYXRuLVVT
LXZhcmlhbnQyLXZhcmlhbnQxLTFhYmMtYS1hYS1hYWEtdS1rby10cnVlLXgtcmVzZXJ2ZWQnIF0i
KTsKKy8vIFJlcGxhY2VzIG91dGRhdGVkIHRhZ3MuCitzaG91bGRCZSgiSW50bC5EYXRlVGltZUZv
cm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ25vLWJvaycpIiwgIlsgJ25iJyBdIik7CisvLyBEb2Vz
bid0IHRocm93LCBidXQgaWdub3JlcyBwcml2YXRlIHRhZ3MuCitzaG91bGRCZSgiSW50bC5EYXRl
VGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ3gtc29tZS10aGluZycpIiwgIltdIik7Cisv
LyBUaHJvd3Mgb24gcHJvYmxlbXMgd2l0aCBsZW5ndGgsIGdldCwgb3IgdG9TdHJpbmcuCitzaG91
bGRUaHJvdygiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoT2JqZWN0LmNy
ZWF0ZShudWxsLCB7IGxlbmd0aDogeyBnZXQoKSB7IHRocm93IEVycm9yKCdhJykgfSB9IH0pKSIs
ICInRXJyb3I6IGEnIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0
ZWRMb2NhbGVzT2YoT2JqZWN0LmNyZWF0ZShudWxsLCB7IGxlbmd0aDogeyB2YWx1ZTogMSB9LCAw
OiB7IGdldCgpIHsgdGhyb3cgRXJyb3IoJ2InKSB9IH0gfSkpIiwgIidFcnJvcjogYiciKTsKK3No
b3VsZFRocm93KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihbIHsgdG9T
dHJpbmcoKSB7IHRocm93IEVycm9yKCdjJykgfSB9IF0pIiwgIidFcnJvcjogYyciKTsKKy8vIFRo
cm93cyBvbiBiYWQgdGFncy4KK3Nob3VsZFRocm93KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBv
cnRlZExvY2FsZXNPZihbIDUgXSkiLCAiJ1R5cGVFcnJvcjogbG9jYWxlIHZhbHVlIG11c3QgYmUg
YSBzdHJpbmcgb3Igb2JqZWN0JyIpOworc2hvdWxkVGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQu
c3VwcG9ydGVkTG9jYWxlc09mKCcnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0
YWc6ICciKTsKK3Nob3VsZFRocm93KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2Fs
ZXNPZignYScpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogYSciKTsKK3No
b3VsZFRocm93KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignYWJjZGVm
Z2hpaicpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogYWJjZGVmZ2hpaici
KTsKK3Nob3VsZFRocm93KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZign
IyQnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6ICMkJyIpOworc2hvdWxk
VGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi1ALWFiYycp
IiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tQC1hYmMnIik7CitzaG91
bGRUaHJvdygiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXUnKSIs
ICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXUnIik7CitzaG91bGRUaHJv
dygiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXUta24tdHJ1ZS11
LWtvLXRydWUnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXUta24t
dHJ1ZS11LWtvLXRydWUnIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBw
b3J0ZWRMb2NhbGVzT2YoJ2VuLXgnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0
YWc6IGVuLXgnIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRM
b2NhbGVzT2YoJ2VuLSonKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVu
LSonIik7CiAKIC8vIDEyLjMgUHJvcGVydGllcyBvZiB0aGUgSW50bC5EYXRlVGltZUZvcm1hdCBQ
cm90b3R5cGUgT2JqZWN0CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0
cy9pbnRsLW51bWJlcmZvcm1hdC5qcyBiL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9pbnRs
LW51bWJlcmZvcm1hdC5qcwppbmRleCAwNjVkOTIxNTY1NDM0MmRhN2U0ZjIzM2U2M2NkNTdhZGZl
NTlkNGViLi43MzI2NzgzYmJhODcwMmZlMTRmMTllMjg1OGExZjk4NTY0M2VjOGFlIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1udW1iZXJmb3JtYXQuanMKKysr
IGIvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2ludGwtbnVtYmVyZm9ybWF0LmpzCkBAIC0z
Nyw2ICszNywzOSBAQCBzaG91bGRCZSgiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mLmxlbmd0aCIsICIxIik7CiAKIC8vIFJldHVybnMgU3VwcG9ydGVkTG9jYWxlcwogc2hvdWxk
QmVUeXBlKCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoKSIsICJBcnJheSIp
OworLy8gRG9lc24ndCBjYXJlIGFib3V0IGB0aGlzYC4KK3Nob3VsZEJlKCJJbnRsLk51bWJlckZv
cm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbChudWxsLCAnZW4nKSIsICJbICdlbicgXSIpOwor
c2hvdWxkQmUoIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKHt9LCAn
ZW4nKSIsICJbICdlbicgXSIpOworc2hvdWxkQmUoIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRl
ZExvY2FsZXNPZi5jYWxsKDEsICdlbicpIiwgIlsgJ2VuJyBdIik7CisvLyBJZ25vcmVzIG5vbi1v
YmplY3QsIG5vbi1zdHJpbmcgbGlzdC4KK3Nob3VsZEJlKCJJbnRsLk51bWJlckZvcm1hdC5zdXBw
b3J0ZWRMb2NhbGVzT2YoOSkiLCAiW10iKTsKKy8vIE1ha2VzIGFuIGFycmF5IG9mIHRhZ3MuCitz
aG91bGRCZSgiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbicpIiwgIlsg
J2VuJyBdIik7CisvLyBIYW5kbGVzIGFycmF5LWxpa2Ugb2JqZWN0cy4KK3Nob3VsZEJlKCJJbnRs
Lk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoeyBsZW5ndGg6IDIsIDE6ICdlbicsIDA6
ICdlcycgfSkiLCAiWyAnZXMnLCAnZW4nIF0iKTsKKy8vIERlZHVwbGljYXRlcyB0YWdzLgorc2hv
dWxkQmUoIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihbICdlbicsICdwdCcs
ICdlbicsICdlcycgXSkiLCAiWyAnZW4nLCAncHQnLCAnZXMnIF0iKTsKKy8vIENhbm9uaWNhbGl6
ZXMgdGFncy4KK3Nob3VsZEJlKCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2Yo
J0VuLWxhVG4tdXMtdmFyaWFudDItdmFyaWFudDEtMWFiYy1VLWtvLXRSdWUtQS1hYS1hYWEteC1S
RVNFUlZFRCcpIiwgIlsgJ2VuLUxhdG4tVVMtdmFyaWFudDItdmFyaWFudDEtMWFiYy1hLWFhLWFh
YS11LWtvLXRydWUteC1yZXNlcnZlZCcgXSIpOworLy8gUmVwbGFjZXMgb3V0ZGF0ZWQgdGFncy4K
K3Nob3VsZEJlKCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ25vLWJvaycp
IiwgIlsgJ25iJyBdIik7CisvLyBEb2Vzbid0IHRocm93LCBidXQgaWdub3JlcyBwcml2YXRlIHRh
Z3MuCitzaG91bGRCZSgiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCd4LXNv
bWUtdGhpbmcnKSIsICJbXSIpOworLy8gVGhyb3dzIG9uIHByb2JsZW1zIHdpdGggbGVuZ3RoLCBn
ZXQsIG9yIHRvU3RyaW5nLgorc2hvdWxkVGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRl
ZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVuZ3RoOiB7IGdldCgpIHsgdGhyb3cg
RXJyb3IoJ2EnKSB9IH0gfSkpIiwgIidFcnJvcjogYSciKTsKK3Nob3VsZFRocm93KCJJbnRsLk51
bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoT2JqZWN0LmNyZWF0ZShudWxsLCB7IGxlbmd0
aDogeyB2YWx1ZTogMSB9LCAwOiB7IGdldCgpIHsgdGhyb3cgRXJyb3IoJ2InKSB9IH0gfSkpIiwg
IidFcnJvcjogYiciKTsKK3Nob3VsZFRocm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRM
b2NhbGVzT2YoWyB7IHRvU3RyaW5nKCkgeyB0aHJvdyBFcnJvcignYycpIH0gfSBdKSIsICInRXJy
b3I6IGMnIik7CisvLyBUaHJvd3Mgb24gYmFkIHRhZ3MuCitzaG91bGRUaHJvdygiSW50bC5OdW1i
ZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsgNSBdKSIsICInVHlwZUVycm9yOiBsb2NhbGUg
dmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvciBvYmplY3QnIik7CitzaG91bGRUaHJvdygiSW50bC5O
dW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCcnKSIsICInUmFuZ2VFcnJvcjogaW52YWxp
ZCBsYW5ndWFnZSB0YWc6ICciKTsKK3Nob3VsZFRocm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBw
b3J0ZWRMb2NhbGVzT2YoJ2EnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6
IGEnIik7CitzaG91bGRUaHJvdygiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09m
KCdhYmNkZWZnaGlqJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBhYmNk
ZWZnaGlqJyIpOworc2hvdWxkVGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2Fs
ZXNPZignIyQnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6ICMkJyIpOwor
c2hvdWxkVGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tQC1h
YmMnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLUAtYWJjJyIpOwor
c2hvdWxkVGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tdScp
IiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tdSciKTsKK3Nob3VsZFRo
cm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXUta24tdHJ1ZS11
LWtvLXRydWUnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXUta24t
dHJ1ZS11LWtvLXRydWUnIik7CitzaG91bGRUaHJvdygiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9y
dGVkTG9jYWxlc09mKCdlbi14JykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFn
OiBlbi14JyIpOworc2hvdWxkVGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2Fs
ZXNPZignZW4tKicpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tKici
KTsKIAogLy8gMTEuMyBQcm9wZXJ0aWVzIG9mIHRoZSBJbnRsLk51bWJlckZvcm1hdCBQcm90b3R5
cGUgT2JqZWN0CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260983</attachid>
            <date>2015-09-10 19:05:54 -0700</date>
            <delta_ts>2015-09-12 07:56:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147599-20150910200545.patch</filename>
            <type>text/plain</type>
            <size>180686</size>
            <attacher name="Andy VanWagoner">andy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5NTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
YzhiZWY1YzY4OGVjZDcwYzgxYTZlNzA1YWI1OGFjY2ViOWU0MGQzLi5lZGUwY2ZjYTFhYjE4ZDdi
M2IyZWYxMzhkYTI0OTRkNTNkMGEzNWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NiBAQAorMjAxNS0wOS0xMCAgQW5keSBWYW5XYWdvbmVyICA8dGhldGFsZWNyYWZ0ZXJA
Z21haWwuY29tPgorCisgICAgICAgIFtJTlRMXSBJbXBsZW1lbnQgc3VwcG9ydGVkTG9jYWxlc09m
IG9uIEludGwgQ29uc3RydWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDc1OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbXBsZW1lbnRzIGFsbCBvZiB0aGUgYWJzdHJhY3Qgb3BlcmF0aW9ucyB1
c2VkIGJ5IHN1cHBvcnRlZExvY2FsZXNPZiwgZXhjZXB0IGR1cmluZyBjYW5vbmljYWxpemF0aW9u
IGl0IGRvZXMgbm90IHJlcGxhY2UgcmVkdW5kYW50IHRhZ3MsIG9yIHN1YnRhZ3Mgd2l0aCB0aGVp
ciBwcmVmZXJyZWQgdmFsdWVzLgorCisgICAgICAgICogaWN1L3VuaWNvZGUvdWNhbC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBpY3UvdW5pY29kZS91ZGF0Lmg6IEFkZGVkLgorICAgICAgICAqIGljdS91
bmljb2RlL3VtaXNjLmg6IEFkZGVkLgorICAgICAgICAqIGljdS91bmljb2RlL3VudW0uaDogQWRk
ZWQuCisgICAgICAgICogaWN1L3VuaWNvZGUvdXR5cGVzLmg6IENsZWFyIHRoZSBVX1NIT1dfQ1BM
VVNQTFVTX0FQSSBmbGFnIHRvIHByZXZlbnQgQysrIGhlYWRlcnMgZnJvbSBiZWluZyBpbmNsdWRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6IEFkZGUgbG9jYWxlTWF0
Y2hlci4KKyAgICAgICAgKiBydW50aW1lL0ludGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6SW50bENvbGxhdG9yQ29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09m
KTogSW1wbGVtZW50ZWQuCisgICAgICAgICogcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25z
dHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9y
RnVuY1N1cHBvcnRlZExvY2FsZXNPZik6IEltcGxlbWVudGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJl
ckZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZik6IEltcGxlbWVudGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmNhbm9uaWNh
bGl6ZUxhbmd1YWdlVGFnKToKKyAgICAgICAgKEpTQzo6Z2V0Q2Fub25pY2FsTGFuZ1RhZyk6Cisg
ICAgICAgIChKU0M6OmdldFByaXZhdGVVc2VMYW5nVGFnKToKKyAgICAgICAgKEpTQzo6Z2V0R3Jh
bmRmYXRoZXJlZExhbmdUYWcpOgorICAgICAgICAoSlNDOjpjYW5vbmljYWxpemVMb2NhbGVMaXN0
KToKKyAgICAgICAgKEpTQzo6YmVzdEF2YWlsYWJsZUxvY2FsZSk6CisgICAgICAgIChKU0M6Omxv
b2t1cFN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAoSlNDOjpiZXN0Rml0U3VwcG9ydGVkTG9j
YWxlcyk6CisgICAgICAgIChKU0M6OnN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAoSlNDOjpn
ZXRJbnRsU3RyaW5nT3B0aW9uKToKKyAgICAgICAgKEpTQzo6Z2V0SW50bEJvb2xlYW5PcHRpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlND
SlNWYWx1ZS5oOiBBZGRlZCB0b0xlbmd0aC4KKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUu
Y3BwOiBBZGRlZCB0b0xlbmd0aC4KKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6dG9MZW5ndGgpOiBJ
bXBsZW1lbnQgVG9MZW5ndGggZnJvbSBFQ01BIDI2MiA2LjAgNy4xLjE1CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojpp
bnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKTogQWRkZWQgbGF6eSBsb2NhbGUgbGlzdC4KKyAg
ICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxv
Y2FsZXMpOiBBZGRlZCBsYXp5IGxvY2FsZSBsaXN0LgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9i
amVjdDo6aW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMpOiBBZGRlZCBsYXp5IGxvY2Fs
ZSBsaXN0LgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKwogMjAxNS0wOS0x
MCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFN0cnVjdHVyZSBz
aG91bGQgYmUgYWJsZSB0byB0ZWxsIHlvdSBpZiBpdCBoYWQgZXZlciBiZWVuIGEgZGljdGlvbmFy
eQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3VjYWwuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29kZS91Y2FsLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTk3
YWYxNTNkNDM5YjRjMTMyZDRjZjBjMWU1MTgyMjY5OGIzN2IxNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29kZS91Y2FsLmgKQEAgLTAsMCArMSwxMjg1
IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0y
MDEwLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZAorICog
b3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAq
LworCisjaWZuZGVmIFVDQUxfSAorI2RlZmluZSBVQ0FMX0gKKworI2luY2x1ZGUgInVuaWNvZGUv
dXR5cGVzLmgiCisjaW5jbHVkZSAidW5pY29kZS91ZW51bS5oIgorI2luY2x1ZGUgInVuaWNvZGUv
dWxvYy5oIgorI2luY2x1ZGUgInVuaWNvZGUvbG9jYWxwb2ludGVyLmgiCisKKyNpZiAhVUNPTkZJ
R19OT19GT1JNQVRUSU5HCisKKy8qKgorICogXGZpbGUKKyAqIFxicmllZiBDIEFQSTogQ2FsZW5k
YXIKKyAqCisgKiA8aDI+Q2FsZW5kYXIgQyBBUEk8L2gyPgorICoKKyAqIFVDYWxlbmRhciBDIEFQ
SSBpcyB1c2VkICBmb3IgY29udmVydGluZyBiZXR3ZWVuIGEgPGNvZGU+VURhdGU8L2NvZGU+IG9i
amVjdAorICogYW5kIGEgc2V0IG9mIGludGVnZXIgZmllbGRzIHN1Y2ggYXMgPGNvZGU+VUNBTF9Z
RUFSPC9jb2RlPiwgPGNvZGU+VUNBTF9NT05USDwvY29kZT4sCisgKiA8Y29kZT5VQ0FMX0RBWTwv
Y29kZT4sIDxjb2RlPlVDQUxfSE9VUjwvY29kZT4sIGFuZCBzbyBvbi4KKyAqIChBIDxjb2RlPlVE
YXRlPC9jb2RlPiBvYmplY3QgcmVwcmVzZW50cyBhIHNwZWNpZmljIGluc3RhbnQgaW4KKyAqIHRp
bWUgd2l0aCBtaWxsaXNlY29uZCBwcmVjaXNpb24uIFNlZSBVRGF0ZQorICogZm9yIGluZm9ybWF0
aW9uIGFib3V0IHRoZSA8Y29kZT5VRGF0ZTwvY29kZT4gLikKKyAqCisgKiA8cD4KKyAqIFR5cGVz
IG9mIDxjb2RlPlVDYWxlbmRhcjwvY29kZT4gaW50ZXJwcmV0IGEgPGNvZGU+VURhdGU8L2NvZGU+
CisgKiBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIG9mIGEgc3BlY2lmaWMgY2FsZW5kYXIgc3lzdGVt
LiBUaGUgVV9TVEFCTEUKKyAqIHByb3ZpZGVzIHRoZSBlbnVtIFVDYWxlbmRhclR5cGUgd2l0aCBV
Q0FMX1RSQURJVElPTkFMIGFuZAorICogVUNBTF9HUkVHT1JJQU4uCisgKiA8cD4KKyAqIExpa2Ug
b3RoZXIgbG9jYWxlLXNlbnNpdGl2ZSBDIEFQSSwgY2FsZW5kYXIgQVBJICBwcm92aWRlcyBhCisg
KiBmdW5jdGlvbiwgPGNvZGU+dWNhbF9vcGVuKCk8L2NvZGU+LCB3aGljaCByZXR1cm5zIGEgcG9p
bnRlciB0bworICogPGNvZGU+VUNhbGVuZGFyPC9jb2RlPiB3aG9zZSB0aW1lIGZpZWxkcyBoYXZl
IGJlZW4gaW5pdGlhbGl6ZWQKKyAqIHdpdGggdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZS4gV2Ug
bmVlZCB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mCisgKiBjYWxlbmRhciB0byBiZSBvcGVuZWQgYW5k
IHRoZSAgdGltZXpvbmVJZC4KKyAqIFxodG1sb25seTxibG9ja3F1b3RlPlxlbmRodG1sb25seQor
ICogPHByZT4KKyAqIFxjb2RlCisgKiBVQ2FsZW5kYXIgKmNhbGRlZjsKKyAqIFVDaGFyICp0eklk
OworICogVUVycm9yQ29kZSBzdGF0dXM7CisgKiB0eklkPShVQ2hhciopbWFsbG9jKHNpemVvZihV
Q2hhcikgKiAoc3RybGVuKCJQU1QiKSArMSkgKTsKKyAqIHVfdWFzdHJjcHkodHpJZCwgIlBTVCIp
OworICogY2FsZGVmPXVjYWxfb3Blbih0eklELCB1X3N0cmxlbih0eklEKSwgTlVMTCwgVUNBTF9U
UkFESVRJT05BTCwgJnN0YXR1cyk7CisgKiBcZW5kY29kZQorICogPC9wcmU+CisgKiBcaHRtbG9u
bHk8L2Jsb2NrcXVvdGU+XGVuZGh0bWxvbmx5CisgKgorICogPHA+CisgKiBBIDxjb2RlPlVDYWxl
bmRhcjwvY29kZT4gb2JqZWN0IGNhbiBwcm9kdWNlIGFsbCB0aGUgdGltZSBmaWVsZCB2YWx1ZXMK
KyAqIG5lZWRlZCB0byBpbXBsZW1lbnQgdGhlIGRhdGUtdGltZSBmb3JtYXR0aW5nIGZvciBhIHBh
cnRpY3VsYXIgbGFuZ3VhZ2UKKyAqIGFuZCBjYWxlbmRhciBzdHlsZSAoZm9yIGV4YW1wbGUsIEph
cGFuZXNlLUdyZWdvcmlhbiwgSmFwYW5lc2UtVHJhZGl0aW9uYWwpLgorICoKKyAqIDxwPgorICog
V2hlbiBjb21wdXRpbmcgYSA8Y29kZT5VRGF0ZTwvY29kZT4gZnJvbSB0aW1lIGZpZWxkcywgdHdv
IHNwZWNpYWwgY2lyY3Vtc3RhbmNlcworICogbWF5IGFyaXNlOiB0aGVyZSBtYXkgYmUgaW5zdWZm
aWNpZW50IGluZm9ybWF0aW9uIHRvIGNvbXB1dGUgdGhlCisgKiA8Y29kZT5VRGF0ZTwvY29kZT4g
KHN1Y2ggYXMgb25seSB5ZWFyIGFuZCBtb250aCBidXQgbm8gZGF5IGluIHRoZSBtb250aCksCisg
KiBvciB0aGVyZSBtYXkgYmUgaW5jb25zaXN0ZW50IGluZm9ybWF0aW9uIChzdWNoIGFzICJUdWVz
ZGF5LCBKdWx5IDE1LCAxOTk2IgorICogLS0gSnVseSAxNSwgMTk5NiBpcyBhY3R1YWxseSBhIE1v
bmRheSkuCisgKgorICogPHA+CisgKiA8c3Ryb25nPkluc3VmZmljaWVudCBpbmZvcm1hdGlvbi48
L3N0cm9uZz4gVGhlIGNhbGVuZGFyIHdpbGwgdXNlIGRlZmF1bHQKKyAqIGluZm9ybWF0aW9uIHRv
IHNwZWNpZnkgdGhlIG1pc3NpbmcgZmllbGRzLiBUaGlzIG1heSB2YXJ5IGJ5IGNhbGVuZGFyOyBm
b3IKKyAqIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIsIHRoZSBkZWZhdWx0IGZvciBhIGZpZWxkIGlz
IHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlCisgKiBzdGFydCBvZiB0aGUgZXBvY2g6IGkuZS4sIFVD
QUxfWUVBUiA9IDE5NzAsIFVDQUxfTU9OVEggPSBKQU5VQVJZLCBVQ0FMX0RBVEUgPSAxLCBldGMu
CisgKgorICogPHA+CisgKiA8c3Ryb25nPkluY29uc2lzdGVudCBpbmZvcm1hdGlvbi48L3N0cm9u
Zz4gSWYgZmllbGRzIGNvbmZsaWN0LCB0aGUgY2FsZW5kYXIKKyAqIHdpbGwgZ2l2ZSBwcmVmZXJl
bmNlIHRvIGZpZWxkcyBzZXQgbW9yZSByZWNlbnRseS4gRm9yIGV4YW1wbGUsIHdoZW4KKyAqIGRl
dGVybWluaW5nIHRoZSBkYXksIHRoZSBjYWxlbmRhciB3aWxsIGxvb2sgZm9yIG9uZSBvZiB0aGUg
Zm9sbG93aW5nCisgKiBjb21iaW5hdGlvbnMgb2YgZmllbGRzLiAgVGhlIG1vc3QgcmVjZW50IGNv
bWJpbmF0aW9uLCBhcyBkZXRlcm1pbmVkIGJ5IHRoZQorICogbW9zdCByZWNlbnRseSBzZXQgc2lu
Z2xlIGZpZWxkLCB3aWxsIGJlIHVzZWQuCisgKgorICogXGh0bWxvbmx5PGJsb2NrcXVvdGU+XGVu
ZGh0bWxvbmx5CisgKiA8cHJlPgorICogXGNvZGUKKyAqIFVDQUxfTU9OVEggKyBVQ0FMX0RBWV9P
Rl9NT05USAorICogVUNBTF9NT05USCArIFVDQUxfV0VFS19PRl9NT05USCArIFVDQUxfREFZX09G
X1dFRUsKKyAqIFVDQUxfTU9OVEggKyBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRIICsgVUNBTF9E
QVlfT0ZfV0VFSworICogVUNBTF9EQVlfT0ZfWUVBUgorICogVUNBTF9EQVlfT0ZfV0VFSyArIFVD
QUxfV0VFS19PRl9ZRUFSCisgKiBcZW5kY29kZQorICogPC9wcmU+CisgKiBcaHRtbG9ubHk8L2Js
b2NrcXVvdGU+XGVuZGh0bWxvbmx5CisgKgorICogRm9yIHRoZSB0aW1lIG9mIGRheToKKyAqCisg
KiBcaHRtbG9ubHk8YmxvY2txdW90ZT5cZW5kaHRtbG9ubHkKKyAqIDxwcmU+CisgKiBcY29kZQor
ICogVUNBTF9IT1VSX09GX0RBWQorICogVUNBTF9BTV9QTSArIFVDQUxfSE9VUgorICogXGVuZGNv
ZGUKKyAqIDwvcHJlPgorICogXGh0bWxvbmx5PC9ibG9ja3F1b3RlPlxlbmRodG1sb25seQorICoK
KyAqIDxwPgorICogPHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBmb3Igc29tZSBub24tR3JlZ29yaWFu
IGNhbGVuZGFycywgZGlmZmVyZW50CisgKiBmaWVsZHMgbWF5IGJlIG5lY2Vzc2FyeSBmb3IgY29t
cGxldGUgZGlzYW1iaWd1YXRpb24uIEZvciBleGFtcGxlLCBhIGZ1bGwKKyAqIHNwZWNpZmljYXRp
b24gb2YgdGhlIGhpc3RvcmlhbCBBcmFiaWMgYXN0cm9ub21pY2FsIGNhbGVuZGFyIHJlcXVpcmVz
IHllYXIsCisgKiBtb250aCwgZGF5LW9mLW1vbnRoIDxlbT5hbmQ8L2VtPiBkYXktb2Ytd2VlayBp
biBzb21lIGNhc2VzLgorICoKKyAqIDxwPgorICogPHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUaGVy
ZSBhcmUgY2VydGFpbiBwb3NzaWJsZSBhbWJpZ3VpdGllcyBpbgorICogaW50ZXJwcmV0YXRpb24g
b2YgY2VydGFpbiBzaW5ndWxhciB0aW1lcywgd2hpY2ggYXJlIHJlc29sdmVkIGluIHRoZQorICog
Zm9sbG93aW5nIHdheXM6CisgKiA8b2w+CisgKiAgICAgPGxpPiAyNDowMDowMCAiYmVsb25ncyIg
dG8gdGhlIGZvbGxvd2luZyBkYXkuIFRoYXQgaXMsCisgKiAgICAgICAgICAyMzo1OSBvbiBEZWMg
MzEsIDE5NjkgJmx0OyAyNDowMCBvbiBKYW4gMSwgMTk3MCAmbHQ7IDI0OjAxOjAwIG9uIEphbiAx
LCAxOTcwCisgKgorICogICAgIDxsaT4gQWx0aG91Z2ggaGlzdG9yaWNhbGx5IG5vdCBwcmVjaXNl
LCBtaWRuaWdodCBhbHNvIGJlbG9uZ3MgdG8gImFtIiwKKyAqICAgICAgICAgIGFuZCBub29uIGJl
bG9uZ3MgdG8gInBtIiwgc28gb24gdGhlIHNhbWUgZGF5LAorICogICAgICAgICAgMTI6MDAgYW0g
KG1pZG5pZ2h0KSAmbHQ7IDEyOjAxIGFtLCBhbmQgMTI6MDAgcG0gKG5vb24pICZsdDsgMTI6MDEg
cG0KKyAqIDwvb2w+CisgKgorICogPHA+CisgKiBUaGUgZGF0ZSBvciB0aW1lIGZvcm1hdCBzdHJp
bmdzIGFyZSBub3QgcGFydCBvZiB0aGUgZGVmaW5pdGlvbiBvZiBhCisgKiBjYWxlbmRhciwgYXMg
dGhvc2UgbXVzdCBiZSBtb2RpZmlhYmxlIG9yIG92ZXJyaWRhYmxlIGJ5IHRoZSB1c2VyIGF0Cisg
KiBydW50aW1lLiBVc2Uge0BsaW5rIERhdGVGb3JtYXR9CisgKiB0byBmb3JtYXQgZGF0ZXMuCisg
KgorICogPHA+CisgKiA8Y29kZT5DYWxlbmRhcjwvY29kZT4gcHJvdmlkZXMgYW4gQVBJIGZvciBm
aWVsZCAicm9sbGluZyIsIHdoZXJlIGZpZWxkcworICogY2FuIGJlIGluY3JlbWVudGVkIG9yIGRl
Y3JlbWVudGVkLCBidXQgd3JhcCBhcm91bmQuIEZvciBleGFtcGxlLCByb2xsaW5nIHRoZQorICog
bW9udGggdXAgaW4gdGhlIGRhdGUgPGNvZGU+RGVjZW1iZXIgMTIsIDxiPjE5OTY8L2I+PC9jb2Rl
PiByZXN1bHRzIGluCisgKiA8Y29kZT5KYW51YXJ5IDEyLCA8Yj4xOTk2PC9iPjwvY29kZT4uCisg
KgorICogPHA+CisgKiA8Y29kZT5DYWxlbmRhcjwvY29kZT4gYWxzbyBwcm92aWRlcyBhIGRhdGUg
YXJpdGhtZXRpYyBmdW5jdGlvbiBmb3IKKyAqIGFkZGluZyB0aGUgc3BlY2lmaWVkIChzaWduZWQp
IGFtb3VudCBvZiB0aW1lIHRvIGEgcGFydGljdWxhciB0aW1lIGZpZWxkLgorICogRm9yIGV4YW1w
bGUsIHN1YnRyYWN0aW5nIDUgZGF5cyBmcm9tIHRoZSBkYXRlIDxjb2RlPlNlcHRlbWJlciAxMiwg
MTk5NjwvY29kZT4KKyAqIHJlc3VsdHMgaW4gPGNvZGU+U2VwdGVtYmVyIDcsIDE5OTY8L2NvZGU+
LgorICoKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCisKKy8qKiBBIGNhbGVuZGFyLgorICogIEZv
ciB1c2FnZSBpbiBDIHByb2dyYW1zLgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3R5cGVkZWYg
dm9pZCogVUNhbGVuZGFyOworCisvKiogUG9zc2libGUgdHlwZXMgb2YgVUNhbGVuZGFycyAKKyAq
IEBzdGFibGUgSUNVIDIuMAorICovCitlbnVtIFVDYWxlbmRhclR5cGUgeworICAvKioKKyAgICog
RGVzcGl0ZSB0aGUgbmFtZSwgVUNBTF9UUkFESVRJT05BTCBkZXNpZ25hdGVzIHRoZSBsb2NhbGUn
cyBkZWZhdWx0IGNhbGVuZGFyLAorICAgKiB3aGljaCBtYXkgYmUgdGhlIEdyZWdvcmlhbiBjYWxl
bmRhciBvciBzb21lIG90aGVyIGNhbGVuZGFyLgorICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICov
CisgIFVDQUxfVFJBRElUSU9OQUwsCisgIC8qKgorICAgKiBBIGJldHRlciBuYW1lIGZvciBVQ0FM
X1RSQURJVElPTkFMLgorICAgKiBAc3RhYmxlIElDVSA0LjIKKyAgICovCisgIFVDQUxfREVGQVVM
VCA9IFVDQUxfVFJBRElUSU9OQUwsCisgIC8qKgorICAgKiBVbmFtYmlndW91c2x5IGRlc2lnbmF0
ZXMgdGhlIEdyZWdvcmlhbiBjYWxlbmRhciBmb3IgdGhlIGxvY2FsZS4KKyAgICogQHN0YWJsZSBJ
Q1UgMi4wCisgICAqLworICBVQ0FMX0dSRUdPUklBTgorfTsKKworLyoqIEBzdGFibGUgSUNVIDIu
MCAqLwordHlwZWRlZiBlbnVtIFVDYWxlbmRhclR5cGUgVUNhbGVuZGFyVHlwZTsKKworLyoqIFBv
c3NpYmxlIGZpZWxkcyBpbiBhIFVDYWxlbmRhciAKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitl
bnVtIFVDYWxlbmRhckRhdGVGaWVsZHMgeworICAvKiogCisgICAqIEZpZWxkIG51bWJlciBpbmRp
Y2F0aW5nIHRoZSBlcmEsIGUuZy4sIEFEIG9yIEJDIGluIHRoZSBHcmVnb3JpYW4gKEp1bGlhbikg
Y2FsZW5kYXIuIAorICAgKiBUaGlzIGlzIGEgY2FsZW5kYXItc3BlY2lmaWMgdmFsdWUuCisgICAq
IEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfRVJBLAorCisgIC8qKgorICAgKiBGaWVs
ZCBudW1iZXIgaW5kaWNhdGluZyB0aGUgeWVhci4gVGhpcyBpcyBhIGNhbGVuZGFyLXNwZWNpZmlj
IHZhbHVlLgorICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAqLworICBVQ0FMX1lFQVIsCisKKyAg
LyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZSBtb250aC4gVGhpcyBpcyBhIGNh
bGVuZGFyLXNwZWNpZmljIHZhbHVlLiAKKyAgICogVGhlIGZpcnN0IG1vbnRoIG9mIHRoZSB5ZWFy
IGlzCisgICAqIDxjb2RlPkpBTlVBUlk8L2NvZGU+OyB0aGUgbGFzdCBkZXBlbmRzIG9uIHRoZSBu
dW1iZXIgb2YgbW9udGhzIGluIGEgeWVhci4KKyAgICogQHNlZSAjVUNBTF9KQU5VQVJZCisgICAq
IEBzZWUgI1VDQUxfRkVCUlVBUlkKKyAgICogQHNlZSAjVUNBTF9NQVJDSAorICAgKiBAc2VlICNV
Q0FMX0FQUklMCisgICAqIEBzZWUgI1VDQUxfTUFZCisgICAqIEBzZWUgI1VDQUxfSlVORQorICAg
KiBAc2VlICNVQ0FMX0pVTFkKKyAgICogQHNlZSAjVUNBTF9BVUdVU1QKKyAgICogQHNlZSAjVUNB
TF9TRVBURU1CRVIKKyAgICogQHNlZSAjVUNBTF9PQ1RPQkVSCisgICAqIEBzZWUgI1VDQUxfTk9W
RU1CRVIKKyAgICogQHNlZSAjVUNBTF9ERUNFTUJFUgorICAgKiBAc2VlICNVQ0FMX1VOREVDSU1C
RVIKKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9NT05USCwKKworICAvKioK
KyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIHdlZWsgbnVtYmVyIHdpdGhp
biB0aGUgY3VycmVudCB5ZWFyLiAgVGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIsIGFzCisgICAq
IGRlZmluZWQgYnkgPGNvZGU+VUNBTF9GSVJTVF9EQVlfT0ZfV0VFSzwvY29kZT4gYW5kIDxjb2Rl
PlVDQUxfTUlOSU1BTF9EQVlTX0lOX0ZJUlNUX1dFRUs8L2NvZGU+CisgICAqIGF0dHJpYnV0ZXMs
IGhhcyB2YWx1ZSAxLiAgU3ViY2xhc3NlcyBkZWZpbmUKKyAgICogdGhlIHZhbHVlIG9mIDxjb2Rl
PlVDQUxfV0VFS19PRl9ZRUFSPC9jb2RlPiBmb3IgZGF5cyBiZWZvcmUgdGhlIGZpcnN0IHdlZWsg
b2YKKyAgICogdGhlIHllYXIuCisgICAqIEBzZWUgdWNhbF9nZXRBdHRyaWJ1dGUKKyAgICogQHNl
ZSB1Y2FsX3NldEF0dHJpYnV0ZQorICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAqLworICBVQ0FM
X1dFRUtfT0ZfWUVBUiwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUK
KyAgICogd2VlayBudW1iZXIgd2l0aGluIHRoZSBjdXJyZW50IG1vbnRoLiAgVGhlIGZpcnN0IHdl
ZWsgb2YgdGhlIG1vbnRoLCBhcworICAgKiBkZWZpbmVkIGJ5IDxjb2RlPlVDQUxfRklSU1RfREFZ
X09GX1dFRUs8L2NvZGU+IGFuZCA8Y29kZT5VQ0FMX01JTklNQUxfREFZU19JTl9GSVJTVF9XRUVL
PC9jb2RlPgorICAgKiBhdHRyaWJ1dGVzLCBoYXMgdmFsdWUgMS4gIFN1YmNsYXNzZXMgZGVmaW5l
CisgICAqIHRoZSB2YWx1ZSBvZiA8Y29kZT5XRUVLX09GX01PTlRIPC9jb2RlPiBmb3IgZGF5cyBi
ZWZvcmUgdGhlIGZpcnN0IHdlZWsgb2YKKyAgICogdGhlIG1vbnRoLgorICAgKiBAc2VlIHVjYWxf
Z2V0QXR0cmlidXRlCisgICAqIEBzZWUgdWNhbF9zZXRBdHRyaWJ1dGUKKyAgICogQHNlZSAjVUNB
TF9GSVJTVF9EQVlfT0ZfV0VFSworICAgKiBAc2VlICNVQ0FMX01JTklNQUxfREFZU19JTl9GSVJT
VF9XRUVLCisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfV0VFS19PRl9NT05U
SCwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUKKyAgICogZGF5IG9m
IHRoZSBtb250aC4gVGhpcyBpcyBhIHN5bm9ueW0gZm9yIDxjb2RlPkRBWV9PRl9NT05USDwvY29k
ZT4uCisgICAqIFRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoIGhhcyB2YWx1ZSAxLgorICAgKiBA
c2VlICNVQ0FMX0RBWV9PRl9NT05USAorICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAqLworICBV
Q0FMX0RBVEUsCisKKyAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlIGRheQor
ICAgKiBudW1iZXIgd2l0aGluIHRoZSBjdXJyZW50IHllYXIuICBUaGUgZmlyc3QgZGF5IG9mIHRo
ZSB5ZWFyIGhhcyB2YWx1ZSAxLgorICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAqLworICBVQ0FM
X0RBWV9PRl9ZRUFSLAorCisgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZSBk
YXkKKyAgICogb2YgdGhlIHdlZWsuICBUaGlzIGZpZWxkIHRha2VzIHZhbHVlcyA8Y29kZT5TVU5E
QVk8L2NvZGU+LAorICAgKiA8Y29kZT5NT05EQVk8L2NvZGU+LCA8Y29kZT5UVUVTREFZPC9jb2Rl
PiwgPGNvZGU+V0VETkVTREFZPC9jb2RlPiwKKyAgICogPGNvZGU+VEhVUlNEQVk8L2NvZGU+LCA8
Y29kZT5GUklEQVk8L2NvZGU+LCBhbmQgPGNvZGU+U0FUVVJEQVk8L2NvZGU+LgorICAgKiBAc2Vl
ICNVQ0FMX1NVTkRBWQorICAgKiBAc2VlICNVQ0FMX01PTkRBWQorICAgKiBAc2VlICNVQ0FMX1RV
RVNEQVkKKyAgICogQHNlZSAjVUNBTF9XRURORVNEQVkKKyAgICogQHNlZSAjVUNBTF9USFVSU0RB
WQorICAgKiBAc2VlICNVQ0FMX0ZSSURBWQorICAgKiBAc2VlICNVQ0FMX1NBVFVSREFZCisgICAq
IEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfREFZX09GX1dFRUssCisKKyAvKioKKyAg
ICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIG9yZGluYWwgbnVtYmVyIG9mIHRo
ZSBkYXkgb2YgdGhlIHdlZWsgd2l0aGluIHRoZSBjdXJyZW50IG1vbnRoLiBUb2dldGhlcgorICAg
KiB3aXRoIHRoZSA8Y29kZT5EQVlfT0ZfV0VFSzwvY29kZT4gZmllbGQsIHRoaXMgdW5pcXVlbHkg
c3BlY2lmaWVzIGEgZGF5CisgICAqIHdpdGhpbiBhIG1vbnRoLiAgVW5saWtlIDxjb2RlPldFRUtf
T0ZfTU9OVEg8L2NvZGU+IGFuZAorICAgKiA8Y29kZT5XRUVLX09GX1lFQVI8L2NvZGU+LCB0aGlz
IGZpZWxkJ3MgdmFsdWUgZG9lcyA8ZW0+bm90PC9lbT4gZGVwZW5kIG9uCisgICAqIDxjb2RlPmdl
dEZpcnN0RGF5T2ZXZWVrKCk8L2NvZGU+IG9yCisgICAqIDxjb2RlPmdldE1pbmltYWxEYXlzSW5G
aXJzdFdlZWsoKTwvY29kZT4uICA8Y29kZT5EQVlfT0ZfTU9OVEggMTwvY29kZT4KKyAgICogdGhy
b3VnaCA8Y29kZT43PC9jb2RlPiBhbHdheXMgY29ycmVzcG9uZCB0byA8Y29kZT5EQVlfT0ZfV0VF
S19JTl9NT05USAorICAgKiAxPC9jb2RlPjsgPGNvZGU+ODwvY29kZT4gdGhyb3VnaCA8Y29kZT4x
NTwvY29kZT4gY29ycmVzcG9uZCB0bworICAgKiA8Y29kZT5EQVlfT0ZfV0VFS19JTl9NT05USCAy
PC9jb2RlPiwgYW5kIHNvIG9uLgorICAgKiA8Y29kZT5EQVlfT0ZfV0VFS19JTl9NT05USCAwPC9j
b2RlPiBpbmRpY2F0ZXMgdGhlIHdlZWsgYmVmb3JlCisgICAqIDxjb2RlPkRBWV9PRl9XRUVLX0lO
X01PTlRIIDE8L2NvZGU+LiAgTmVnYXRpdmUgdmFsdWVzIGNvdW50IGJhY2sgZnJvbSB0aGUKKyAg
ICogZW5kIG9mIHRoZSBtb250aCwgc28gdGhlIGxhc3QgU3VuZGF5IG9mIGEgbW9udGggaXMgc3Bl
Y2lmaWVkIGFzCisgICAqIDxjb2RlPkRBWV9PRl9XRUVLID0gU1VOREFZLCBEQVlfT0ZfV0VFS19J
Tl9NT05USCA9IC0xPC9jb2RlPi4gIEJlY2F1c2UKKyAgICogbmVnYXRpdmUgdmFsdWVzIGNvdW50
IGJhY2t3YXJkIHRoZXkgd2lsbCB1c3VhbGx5IGJlIGFsaWduZWQgZGlmZmVyZW50bHkKKyAgICog
d2l0aGluIHRoZSBtb250aCB0aGFuIHBvc2l0aXZlIHZhbHVlcy4gIEZvciBleGFtcGxlLCBpZiBh
IG1vbnRoIGhhcyAzMQorICAgKiBkYXlzLCA8Y29kZT5EQVlfT0ZfV0VFS19JTl9NT05USCAtMTwv
Y29kZT4gd2lsbCBvdmVybGFwCisgICAqIDxjb2RlPkRBWV9PRl9XRUVLX0lOX01PTlRIIDU8L2Nv
ZGU+IGFuZCB0aGUgZW5kIG9mIDxjb2RlPjQ8L2NvZGU+LgorICAgKiBAc2VlICNVQ0FMX0RBWV9P
Rl9XRUVLCisgICAqIEBzZWUgI1VDQUxfV0VFS19PRl9NT05USAorICAgKiBAc3RhYmxlIElDVSAy
LjYgCisgICAqLworICBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRILAorCisgLyoqCisgICAqIEZp
ZWxkIG51bWJlciBpbmRpY2F0aW5nCisgICAqIHdoZXRoZXIgdGhlIDxjb2RlPkhPVVI8L2NvZGU+
IGlzIGJlZm9yZSBvciBhZnRlciBub29uLgorICAgKiBFLmcuLCBhdCAxMDowNDoxNS4yNTAgUE0g
dGhlIDxjb2RlPkFNX1BNPC9jb2RlPiBpcyA8Y29kZT5QTTwvY29kZT4uCisgICAqIEBzZWUgI1VD
QUxfQU0KKyAgICogQHNlZSAjVUNBTF9QTQorICAgKiBAc2VlICNVQ0FMX0hPVVIKKyAgICogQHN0
YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9BTV9QTSwKKworIC8qKgorICAgKiBGaWVsZCBu
dW1iZXIgaW5kaWNhdGluZyB0aGUKKyAgICogaG91ciBvZiB0aGUgbW9ybmluZyBvciBhZnRlcm5v
b24uIDxjb2RlPkhPVVI8L2NvZGU+IGlzIHVzZWQgZm9yIHRoZSAxMi1ob3VyCisgICAqIGNsb2Nr
LgorICAgKiBFLmcuLCBhdCAxMDowNDoxNS4yNTAgUE0gdGhlIDxjb2RlPkhPVVI8L2NvZGU+IGlz
IDEwLgorICAgKiBAc2VlICNVQ0FMX0FNX1BNCisgICAqIEBzZWUgI1VDQUxfSE9VUl9PRl9EQVkK
KyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9IT1VSLAorCisgLyoqCisgICAq
IEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZQorICAgKiBob3VyIG9mIHRoZSBkYXkuIDxjb2Rl
PkhPVVJfT0ZfREFZPC9jb2RlPiBpcyB1c2VkIGZvciB0aGUgMjQtaG91ciBjbG9jay4KKyAgICog
RS5nLiwgYXQgMTA6MDQ6MTUuMjUwIFBNIHRoZSA8Y29kZT5IT1VSX09GX0RBWTwvY29kZT4gaXMg
MjIuCisgICAqIEBzZWUgI1VDQUxfSE9VUgorICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAqLwor
ICBVQ0FMX0hPVVJfT0ZfREFZLAorCisgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5n
IHRoZQorICAgKiBtaW51dGUgd2l0aGluIHRoZSBob3VyLgorICAgKiBFLmcuLCBhdCAxMDowNDox
NS4yNTAgUE0gdGhlIDxjb2RlPlVDQUxfTUlOVVRFPC9jb2RlPiBpcyA0LgorICAgKiBAc3RhYmxl
IElDVSAyLjYgCisgICAqLworICBVQ0FMX01JTlVURSwKKworIC8qKgorICAgKiBGaWVsZCBudW1i
ZXIgaW5kaWNhdGluZyB0aGUKKyAgICogc2Vjb25kIHdpdGhpbiB0aGUgbWludXRlLgorICAgKiBF
LmcuLCBhdCAxMDowNDoxNS4yNTAgUE0gdGhlIDxjb2RlPlVDQUxfU0VDT05EPC9jb2RlPiBpcyAx
NS4KKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9TRUNPTkQsCisKKyAvKioK
KyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIG1pbGxpc2Vjb25kIHdpdGhp
biB0aGUgc2Vjb25kLgorICAgKiBFLmcuLCBhdCAxMDowNDoxNS4yNTAgUE0gdGhlIDxjb2RlPlVD
QUxfTUlMTElTRUNPTkQ8L2NvZGU+IGlzIDI1MC4KKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAg
Ki8KKyAgVUNBTF9NSUxMSVNFQ09ORCwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNh
dGluZyB0aGUKKyAgICogcmF3IG9mZnNldCBmcm9tIEdNVCBpbiBtaWxsaXNlY29uZHMuCisgICAq
IEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfWk9ORV9PRkZTRVQsCisKKyAvKioKKyAg
ICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIGRheWxpZ2h0IHNhdmluZ3Mgb2Zm
c2V0IGluIG1pbGxpc2Vjb25kcy4KKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNB
TF9EU1RfT0ZGU0VULAorICAKKyAvKioKKyAgICogRmllbGQgbnVtYmVyIAorICAgKiBpbmRpY2F0
aW5nIHRoZSBleHRlbmRlZCB5ZWFyIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisgICAqIDxjb2RlPlVD
QUxfV0VFS19PRl9ZRUFSPC9jb2RlPiBmaWVsZC4gIFRoaXMgbWF5IGJlIG9uZSBncmVhdGVyIG9y
IGxlc3MKKyAgICogdGhhbiB0aGUgdmFsdWUgb2YgPGNvZGU+VUNBTF9FWFRFTkRFRF9ZRUFSPC9j
b2RlPi4KKyAgICogQHN0YWJsZSBJQ1UgMi42CisgICAqLworICBVQ0FMX1lFQVJfV09ZLAorCisg
LyoqCisgICAqIEZpZWxkIG51bWJlciAKKyAgICogaW5kaWNhdGluZyB0aGUgbG9jYWxpemVkIGRh
eSBvZiB3ZWVrLiAgVGhpcyB3aWxsIGJlIGEgdmFsdWUgZnJvbSAxCisgICAqIHRvIDcgaW5jbHVz
aXZlLCB3aXRoIDEgYmVpbmcgdGhlIGxvY2FsaXplZCBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuCisg
ICAqIEBzdGFibGUgSUNVIDIuNgorICAgKi8KKyAgVUNBTF9ET1dfTE9DQUwsCisKKyAgLyoqCisg
ICAqIFllYXIgb2YgdGhpcyBjYWxlbmRhciBzeXN0ZW0sIGVuY29tcGFzc2luZyBhbGwgc3VwcmEt
eWVhciBmaWVsZHMuIEZvciBleGFtcGxlLCAKKyAgICogaW4gR3JlZ29yaWFuL0p1bGlhbiBjYWxl
bmRhcnMsIHBvc2l0aXZlIEV4dGVuZGVkIFllYXIgdmFsdWVzIGluZGljYXRlIHllYXJzIEFELAor
ICAgKiAgMSBCQyA9IDAgZXh0ZW5kZWQsIDIgQkMgPSAtMSBleHRlbmRlZCwgYW5kIHNvIG9uLiAK
KyAgICogQHN0YWJsZSBJQ1UgMi44IAorICAgKi8KKyAgVUNBTF9FWFRFTkRFRF9ZRUFSLAorCisg
LyoqCisgICAqIEZpZWxkIG51bWJlciAKKyAgICogaW5kaWNhdGluZyB0aGUgbW9kaWZpZWQgSnVs
aWFuIGRheSBudW1iZXIuICBUaGlzIGlzIGRpZmZlcmVudCBmcm9tCisgICAqIHRoZSBjb252ZW50
aW9uYWwgSnVsaWFuIGRheSBudW1iZXIgaW4gdHdvIHJlZ2FyZHMuICBGaXJzdCwgaXQKKyAgICog
ZGVtYXJjYXRlcyBkYXlzIGF0IGxvY2FsIHpvbmUgbWlkbmlnaHQsIHJhdGhlciB0aGFuIG5vb24g
R01ULgorICAgKiBTZWNvbmQsIGl0IGlzIGEgbG9jYWwgbnVtYmVyOyB0aGF0IGlzLCBpdCBkZXBl
bmRzIG9uIHRoZSBsb2NhbCB0aW1lCisgICAqIHpvbmUuICBJdCBjYW4gYmUgdGhvdWdodCBvZiBh
cyBhIHNpbmdsZSBudW1iZXIgdGhhdCBlbmNvbXBhc3NlcyBhbGwKKyAgICogdGhlIGRhdGUtcmVs
YXRlZCBmaWVsZHMuCisgICAqIEBzdGFibGUgSUNVIDIuOAorICAgKi8KKyAgVUNBTF9KVUxJQU5f
REFZLCAKKworICAvKioKKyAgICogUmFuZ2VzIGZyb20gMCB0byAyMzo1OTo1OS45OTkgKHJlZ2Fy
ZGxlc3Mgb2YgRFNUKS4gIFRoaXMgZmllbGQgYmVoYXZlcyA8ZW0+ZXhhY3RseTwvZW0+IAorICAg
KiBsaWtlIGEgY29tcG9zaXRlIG9mIGFsbCB0aW1lLXJlbGF0ZWQgZmllbGRzLCBub3QgaW5jbHVk
aW5nIHRoZSB6b25lIGZpZWxkcy4gIEFzIHN1Y2gsIAorICAgKiBpdCBhbHNvIHJlZmxlY3RzIGRp
c2NvbnRpbnVpdGllcyBvZiB0aG9zZSBmaWVsZHMgb24gRFNUIHRyYW5zaXRpb24gZGF5cy4gIE9u
IGEgZGF5CisgICAqIG9mIERTVCBvbnNldCwgaXQgd2lsbCBqdW1wIGZvcndhcmQuICBPbiBhIGRh
eSBvZiBEU1QgY2Vzc2F0aW9uLCBpdCB3aWxsIGp1bXAgCisgICAqIGJhY2t3YXJkLiAgVGhpcyBy
ZWZsZWN0cyB0aGUgZmFjdCB0aGF0IGl0IG11c3QgYmUgY29tYmluZWQgd2l0aCB0aGUgRFNUX09G
RlNFVCBmaWVsZAorICAgKiB0byBvYnRhaW4gYSB1bmlxdWUgbG9jYWwgdGltZSB2YWx1ZS4KKyAg
ICogQHN0YWJsZSBJQ1UgMi44CisgICAqLworICBVQ0FMX01JTExJU0VDT05EU19JTl9EQVksCisK
KyAgLyoqCisgICAqIFdoZXRoZXIgb3Igbm90IHRoZSBjdXJyZW50IG1vbnRoIGlzIGEgbGVhcCBt
b250aCAoMCBvciAxKS4gU2VlIHRoZSBDaGluZXNlIGNhbGVuZGFyIGZvcgorICAgKiBhbiBleGFt
cGxlIG9mIHRoaXMuCisgICAqLworICBVQ0FMX0lTX0xFQVBfTU9OVEgsCisgIAorICAvKioKKyAg
ICogRmllbGQgY291bnQKKyAgICogQHN0YWJsZSBJQ1UgMi42CisgICAqLworICBVQ0FMX0ZJRUxE
X0NPVU5ULAorCisgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZQorICAgKiBk
YXkgb2YgdGhlIG1vbnRoLiBUaGlzIGlzIGEgc3lub255bSBmb3IgPGNvZGU+VUNBTF9EQVRFPC9j
b2RlPi4KKyAgICogVGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGggaGFzIHZhbHVlIDEuCisgICAq
IEBzZWUgI1VDQUxfREFURQorICAgKiBTeW5vbnltIGZvciBVQ0FMX0RBVEUKKyAgICogQHN0YWJs
ZSBJQ1UgMi44CisgICAqKi8KKyAgVUNBTF9EQVlfT0ZfTU9OVEg9VUNBTF9EQVRFCit9OworCisv
KiogQHN0YWJsZSBJQ1UgMi4wICovCit0eXBlZGVmIGVudW0gVUNhbGVuZGFyRGF0ZUZpZWxkcyBV
Q2FsZW5kYXJEYXRlRmllbGRzOworICAgIC8qKgorICAgICAqIFVzZWZ1bCBjb25zdGFudCBmb3Ig
ZGF5cyBvZiB3ZWVrLiBOb3RlOiBDYWxlbmRhciBkYXktb2Ytd2VlayBpcyAxLWJhc2VkLiBDbGll
bnRzCisgICAgICogd2hvIGNyZWF0ZSBsb2NhbGUgcmVzb3VyY2VzIGZvciB0aGUgZmllbGQgb2Yg
Zmlyc3QtZGF5LW9mLXdlZWsgc2hvdWxkIGJlIGF3YXJlIG9mCisgICAgICogdGhpcy4gRm9yIGlu
c3RhbmNlLCBpbiBVUyBsb2NhbGUsIGZpcnN0LWRheS1vZi13ZWVrIGlzIHNldCB0byAxLCBpLmUu
LCBVQ0FMX1NVTkRBWS4KKyAgICAgKi8KKy8qKiBQb3NzaWJsZSBkYXlzIG9mIHRoZSB3ZWVrIGlu
IGEgVUNhbGVuZGFyIAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK2VudW0gVUNhbGVuZGFyRGF5
c09mV2VlayB7CisgIC8qKiBTdW5kYXkgKi8KKyAgVUNBTF9TVU5EQVkgPSAxLAorICAvKiogTW9u
ZGF5ICovCisgIFVDQUxfTU9OREFZLAorICAvKiogVHVlc2RheSAqLworICBVQ0FMX1RVRVNEQVks
CisgIC8qKiBXZWRuZXNkYXkgKi8KKyAgVUNBTF9XRURORVNEQVksCisgIC8qKiBUaHVyc2RheSAq
LworICBVQ0FMX1RIVVJTREFZLAorICAvKiogRnJpZGF5ICovCisgIFVDQUxfRlJJREFZLAorICAv
KiogU2F0dXJkYXkgKi8KKyAgVUNBTF9TQVRVUkRBWQorfTsKKworLyoqIEBzdGFibGUgSUNVIDIu
MCAqLwordHlwZWRlZiBlbnVtIFVDYWxlbmRhckRheXNPZldlZWsgVUNhbGVuZGFyRGF5c09mV2Vl
azsKKworLyoqIFBvc3NpYmxlIG1vbnRocyBpbiBhIFVDYWxlbmRhci4gTm90ZTogQ2FsZW5kYXIg
bW9udGggaXMgMC1iYXNlZC4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitlbnVtIFVDYWxlbmRh
ck1vbnRocyB7CisgIC8qKiBKYW51YXJ5ICovCisgIFVDQUxfSkFOVUFSWSwKKyAgLyoqIEZlYnJ1
YXJ5ICovCisgIFVDQUxfRkVCUlVBUlksCisgIC8qKiBNYXJjaCAqLworICBVQ0FMX01BUkNILAor
ICAvKiogQXByaWwgKi8KKyAgVUNBTF9BUFJJTCwKKyAgLyoqIE1heSAqLworICBVQ0FMX01BWSwK
KyAgLyoqIEp1bmUgKi8KKyAgVUNBTF9KVU5FLAorICAvKiogSnVseSAqLworICBVQ0FMX0pVTFks
CisgIC8qKiBBdWd1c3QgKi8KKyAgVUNBTF9BVUdVU1QsCisgIC8qKiBTZXB0ZW1iZXIgKi8KKyAg
VUNBTF9TRVBURU1CRVIsCisgIC8qKiBPY3RvYmVyICovCisgIFVDQUxfT0NUT0JFUiwKKyAgLyoq
IE5vdmVtYmVyICovCisgIFVDQUxfTk9WRU1CRVIsCisgIC8qKiBEZWNlbWJlciAqLworICBVQ0FM
X0RFQ0VNQkVSLAorICAvKiogVmFsdWUgb2YgdGhlIDxjb2RlPlVDQUxfTU9OVEg8L2NvZGU+IGZp
ZWxkIGluZGljYXRpbmcgdGhlCisgICAgKiB0aGlydGVlbnRoIG1vbnRoIG9mIHRoZSB5ZWFyLiBB
bHRob3VnaCB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyCisgICAgKiBkb2VzIG5vdCB1c2UgdGhpcyB2
YWx1ZSwgbHVuYXIgY2FsZW5kYXJzIGRvLgorICAgICovCisgIFVDQUxfVU5ERUNJTUJFUgorfTsK
KworLyoqIEBzdGFibGUgSUNVIDIuMCAqLwordHlwZWRlZiBlbnVtIFVDYWxlbmRhck1vbnRocyBV
Q2FsZW5kYXJNb250aHM7CisKKy8qKiBQb3NzaWJsZSBBTS9QTSB2YWx1ZXMgaW4gYSBVQ2FsZW5k
YXIgCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworZW51bSBVQ2FsZW5kYXJBTVBNcyB7CisgICAg
LyoqIEFNICovCisgIFVDQUxfQU0sCisgIC8qKiBQTSAqLworICBVQ0FMX1BNCit9OworCisvKiog
QHN0YWJsZSBJQ1UgMi4wICovCit0eXBlZGVmIGVudW0gVUNhbGVuZGFyQU1QTXMgVUNhbGVuZGFy
QU1QTXM7CisKKy8qKgorICogQ3JlYXRlIGFuIGVudW1lcmF0aW9uIG92ZXIgYWxsIHRpbWUgem9u
ZXMuCisgKgorICogQHBhcmFtIGVjIGlucHV0L291dHB1dCBlcnJvciBjb2RlCisgKgorICogQHJl
dHVybiBhbiBlbnVtZXJhdGlvbiBvYmplY3QgdGhhdCB0aGUgY2FsbGVyIG11c3QgZGlzcG9zZSBv
ZiB1c2luZworICogdWVudW1fY2xvc2UoKSwgb3IgTlVMTCB1cG9uIGZhaWx1cmUuIEluIGNhc2Ug
b2YgZmFpbHVyZSAqZWMgd2lsbAorICogaW5kaWNhdGUgdGhlIGVycm9yLgorICoKKyAqIEBzdGFi
bGUgSUNVIDIuNgorICovCitVX1NUQUJMRSBVRW51bWVyYXRpb24qIFVfRVhQT1JUMgordWNhbF9v
cGVuVGltZVpvbmVzKFVFcnJvckNvZGUqIGVjKTsKKworLyoqCisgKiBDcmVhdGUgYW4gZW51bWVy
YXRpb24gb3ZlciBhbGwgdGltZSB6b25lcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuCisgKiBj
b3VudHJ5LiBTb21lIHpvbmVzIGFyZSBhZmZpbGlhdGVkIHdpdGggbm8gY291bnRyeSAoZS5nLiwg
IlVUQyIpOworICogdGhlc2UgbWF5IGFsc28gYmUgcmV0cmlldmVkLCBhcyBhIGdyb3VwLgorICoK
KyAqIEBwYXJhbSBjb3VudHJ5IHRoZSBJU08gMzE2NiB0d28tbGV0dGVyIGNvdW50cnkgY29kZSwg
b3IgTlVMTCB0bworICogcmV0cmlldmUgem9uZXMgbm90IGFmZmlsaWF0ZWQgd2l0aCBhbnkgY291
bnRyeQorICoKKyAqIEBwYXJhbSBlYyBpbnB1dC9vdXRwdXQgZXJyb3IgY29kZQorICoKKyAqIEBy
ZXR1cm4gYW4gZW51bWVyYXRpb24gb2JqZWN0IHRoYXQgdGhlIGNhbGxlciBtdXN0IGRpc3Bvc2Ug
b2YgdXNpbmcKKyAqIHVlbnVtX2Nsb3NlKCksIG9yIE5VTEwgdXBvbiBmYWlsdXJlLiBJbiBjYXNl
IG9mIGZhaWx1cmUgKmVjIHdpbGwKKyAqIGluZGljYXRlIHRoZSBlcnJvci4KKyAqCisgKiBAc3Rh
YmxlIElDVSAyLjYKKyAqLworVV9TVEFCTEUgVUVudW1lcmF0aW9uKiBVX0VYUE9SVDIKK3VjYWxf
b3BlbkNvdW50cnlUaW1lWm9uZXMoY29uc3QgY2hhciogY291bnRyeSwgVUVycm9yQ29kZSogZWMp
OworCisvKioKKyAqIFJldHVybiB0aGUgZGVmYXVsdCB0aW1lIHpvbmUuIFRoZSBkZWZhdWx0IGlz
IGRldGVybWluZWQgaW5pdGlhbGx5CisgKiBieSBxdWVyeWluZyB0aGUgaG9zdCBvcGVyYXRpbmcg
c3lzdGVtLiBJdCBtYXkgYmUgY2hhbmdlZCB3aXRoCisgKiB1Y2FsX3NldERlZmF1bHRUaW1lWm9u
ZSgpIG9yIHdpdGggdGhlIEMrKyBUaW1lWm9uZSBBUEkuCisgKgorICogQHBhcmFtIHJlc3VsdCBB
IGJ1ZmZlciB0byByZWNlaXZlIHRoZSByZXN1bHQsIG9yIE5VTEwKKyAqCisgKiBAcGFyYW0gcmVz
dWx0Q2FwYWNpdHkgVGhlIGNhcGFjaXR5IG9mIHRoZSByZXN1bHQgYnVmZmVyCisgKgorICogQHBh
cmFtIGVjIGlucHV0L291dHB1dCBlcnJvciBjb2RlCisgKgorICogQHJldHVybiBUaGUgcmVzdWx0
IHN0cmluZyBsZW5ndGgsIG5vdCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nCisgKiBudWxsCisg
KgorICogQHN0YWJsZSBJQ1UgMi42CisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyCit1
Y2FsX2dldERlZmF1bHRUaW1lWm9uZShVQ2hhciogcmVzdWx0LCBpbnQzMl90IHJlc3VsdENhcGFj
aXR5LCBVRXJyb3JDb2RlKiBlYyk7CisKKy8qKgorICogU2V0IHRoZSBkZWZhdWx0IHRpbWUgem9u
ZS4KKyAqCisgKiBAcGFyYW0gem9uZUlEIG51bGwtdGVybWluYXRlZCB0aW1lIHpvbmUgSUQKKyAq
CisgKiBAcGFyYW0gZWMgaW5wdXQvb3V0cHV0IGVycm9yIGNvZGUKKyAqCisgKiBAc3RhYmxlIElD
VSAyLjYKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKK3VjYWxfc2V0RGVmYXVsdFRpbWVa
b25lKGNvbnN0IFVDaGFyKiB6b25lSUQsIFVFcnJvckNvZGUqIGVjKTsKKworLyoqCisgKiBSZXR1
cm4gdGhlIGFtb3VudCBvZiB0aW1lIGluIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSBjbG9jayBpcwor
ICogYWR2YW5jZWQgZHVyaW5nIGRheWxpZ2h0IHNhdmluZ3MgdGltZSBmb3IgdGhlIGdpdmVuIHRp
bWUgem9uZSwgb3IKKyAqIHplcm8gaWYgdGhlIHRpbWUgem9uZSBkb2VzIG5vdCBvYnNlcnZlIGRh
eWxpZ2h0IHNhdmluZ3MgdGltZS4KKyAqCisgKiBAcGFyYW0gem9uZUlEIG51bGwtdGVybWluYXRl
ZCB0aW1lIHpvbmUgSUQKKyAqCisgKiBAcGFyYW0gZWMgaW5wdXQvb3V0cHV0IGVycm9yIGNvZGUK
KyAqCisgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoZSB0aW1lIGlzIGFk
dmFuY2VkIHdpdGgKKyAqIHJlc3BlY3QgdG8gc3RhbmRhcmQgdGltZSB3aGVuIHRoZSBkYXlsaWdo
dCBzYXZpbmdzIHJ1bGVzIGFyZSBpbgorICogZWZmZWN0LiBUaGlzIGlzIGFsd2F5cyBhIG5vbi1u
ZWdhdGl2ZSBudW1iZXIsIG1vc3QgY29tbW9ubHkgZWl0aGVyCisgKiAzLDYwMCwwMDAgKG9uZSBo
b3VyKSBvciB6ZXJvLgorICoKKyAqIEBzdGFibGUgSUNVIDIuNgorICovCitVX1NUQUJMRSBpbnQz
Ml90IFVfRVhQT1JUMgordWNhbF9nZXREU1RTYXZpbmdzKGNvbnN0IFVDaGFyKiB6b25lSUQsIFVF
cnJvckNvZGUqIGVjKTsKKworLyoqCisgKiBHZXQgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZS4K
KyAqIFRoZSB2YWx1ZSByZXR1cm5lZCBpcyByZXByZXNlbnRlZCBhcyBtaWxsaXNlY29uZHMgZnJv
bSB0aGUgZXBvY2guCisgKiBAcmV0dXJuIFRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUuCisgKiBA
c3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgVURhdGUgVV9FWFBPUlQyIAordWNhbF9nZXRO
b3codm9pZCk7CisKKy8qKgorICogT3BlbiBhIFVDYWxlbmRhci4KKyAqIEEgVUNhbGVuZGFyIG1h
eSBiZSB1c2VkIHRvIGNvbnZlcnQgYSBtaWxsaXNlY29uZCB2YWx1ZSB0byBhIHllYXIsCisgKiBt
b250aCwgYW5kIGRheS4KKyAqIDxwPgorICogTm90ZTogV2hlbiB1bmtub3duIFRpbWVab25lIElE
IGlzIHNwZWNpZmllZCwgdGhlIFVDYWxlbmRhciByZXR1cm5lZAorICogYnkgdGhlIGZ1bmN0aW9u
IGlzIGluaXRpYWxpemVkIHdpdGggR01UICgiRXRjL0dNVCIpIHdpdGhvdXQgYW55CisgKiBlcnJv
cnMvd2FybmluZ3MuICBJZiB5b3Ugd2FudCB0byBjaGVjayBpZiBhIFRpbWVab25lIElEIGlzIHZh
bGlkLAorICogdXNlIHVjYWxfZ2V0Q2Fub25pY2FsVGltZVpvbmVJRCBwcmlvciB0byB0aGlzIGZ1
bmN0aW9uLgorICogCisgKiBAcGFyYW0gem9uZUlEIFRoZSBkZXNpcmVkIFRpbWVab25lIElELiAg
SWYgMCwgdXNlIHRoZSBkZWZhdWx0IHRpbWUgem9uZS4KKyAqIEBwYXJhbSBsZW4gVGhlIGxlbmd0
aCBvZiB6b25lSUQsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyAqIEBwYXJhbSBsb2NhbGUg
VGhlIGRlc2lyZWQgbG9jYWxlCisgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBVQ2FsZW5kYXIg
dG8gb3Blbi4gVGhpcyBjYW4gYmUgVUNBTF9HUkVHT1JJQU4gdG8gb3BlbiB0aGUgR3JlZ29yaWFu
CisgKiBjYWxlbmRhciBmb3IgdGhlIGxvY2FsZSwgb3IgVUNBTF9ERUZBVUxUIHRvIG9wZW4gdGhl
IGRlZmF1bHQgY2FsZW5kYXIgZm9yIHRoZSBsb2NhbGUgKHRoZQorICogZGVmYXVsdCBjYWxlbmRh
ciBtYXkgYWxzbyBiZSBHcmVnb3JpYW4pLiBUbyBvcGVuIGEgc3BlY2lmaWMgbm9uLUdyZWdvcmlh
biBjYWxlbmRhciBmb3IgdGhlCisgKiBsb2NhbGUsIHVzZSB1bG9jX3NldEtleXdvcmRWYWx1ZSB0
byBzZXQgdGhlIHZhbHVlIG9mIHRoZSBjYWxlbmRhciBrZXl3b3JkIGZvciB0aGUgbG9jYWxlCisg
KiBhbmQgdGhlbiBwYXNzIHRoZSBsb2NhbGUgdG8gdWNhbF9vcGVuIHdpdGggVUNBTF9ERUZBVUxU
IGFzIHRoZSB0eXBlLgorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29k
ZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyAqIEByZXR1cm4gQSBwb2ludGVyIHRvIGEgVUNhbGVu
ZGFyLCBvciAwIGlmIGFuIGVycm9yIG9jY3VycmVkLgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8K
K1VfU1RBQkxFIFVDYWxlbmRhciogVV9FWFBPUlQyIAordWNhbF9vcGVuKGNvbnN0IFVDaGFyKiAg
IHpvbmVJRCwKKyAgICAgICAgICBpbnQzMl90ICAgICAgICBsZW4sCisgICAgICAgICAgY29uc3Qg
Y2hhciogICAgbG9jYWxlLAorICAgICAgICAgIFVDYWxlbmRhclR5cGUgIHR5cGUsCisgICAgICAg
ICAgVUVycm9yQ29kZSogICAgc3RhdHVzKTsKKworLyoqCisgKiBDbG9zZSBhIFVDYWxlbmRhci4K
KyAqIE9uY2UgY2xvc2VkLCBhIFVDYWxlbmRhciBtYXkgbm8gbG9uZ2VyIGJlIHVzZWQuCisgKiBA
cGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gY2xvc2UuCisgKiBAc3RhYmxlIElDVSAyLjAKKyAq
LworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1Y2FsX2Nsb3NlKFVDYWxlbmRhciAqY2FsKTsK
KworI2lmIFVfU0hPV19DUExVU1BMVVNfQVBJCisKK1VfTkFNRVNQQUNFX0JFR0lOCisKKy8qKgor
ICogXGNsYXNzIExvY2FsVUNhbGVuZGFyUG9pbnRlcgorICogIlNtYXJ0IHBvaW50ZXIiIGNsYXNz
LCBjbG9zZXMgYSBVQ2FsZW5kYXIgdmlhIHVjYWxfY2xvc2UoKS4KKyAqIEZvciBtb3N0IG1ldGhv
ZHMgc2VlIHRoZSBMb2NhbFBvaW50ZXJCYXNlIGJhc2UgY2xhc3MuCisgKgorICogQHNlZSBMb2Nh
bFBvaW50ZXJCYXNlCisgKiBAc2VlIExvY2FsUG9pbnRlcgorICogQHN0YWJsZSBJQ1UgNC40Cisg
Ki8KK1VfREVGSU5FX0xPQ0FMX09QRU5fUE9JTlRFUihMb2NhbFVDYWxlbmRhclBvaW50ZXIsIFVD
YWxlbmRhciwgdWNhbF9jbG9zZSk7CisKK1VfTkFNRVNQQUNFX0VORAorCisjZW5kaWYKKworLyoq
CisgKiBPcGVuIGEgY29weSBvZiBhIFVDYWxlbmRhci4KKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9y
bXMgYSBkZWVwIGNvcHkuCisgKiBAcGFyYW0gY2FsIFRoZSBjYWxlbmRhciB0byBjb3B5CisgKiBA
cGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVy
cm9ycy4KKyAqIEByZXR1cm4gQSBwb2ludGVyIHRvIGEgVUNhbGVuZGFyIGlkZW50aWNhbCB0byBj
YWwuCisgKiBAc3RhYmxlIElDVSA0LjAKKyAqLworVV9TVEFCTEUgVUNhbGVuZGFyKiBVX0VYUE9S
VDIgCit1Y2FsX2Nsb25lKGNvbnN0IFVDYWxlbmRhciogY2FsLAorICAgICAgICAgICBVRXJyb3JD
b2RlKiAgICAgIHN0YXR1cyk7CisKKy8qKgorICogU2V0IHRoZSBUaW1lWm9uZSB1c2VkIGJ5IGEg
VUNhbGVuZGFyLgorICogQSBVQ2FsZW5kYXIgdXNlcyBhIHRpbWV6b25lIGZvciBjb252ZXJ0aW5n
IGZyb20gR3JlZW53aWNoIHRpbWUgdG8gbG9jYWwgdGltZS4KKyAqIEBwYXJhbSBjYWwgVGhlIFVD
YWxlbmRhciB0byBzZXQuCisgKiBAcGFyYW0gem9uZUlEIFRoZSBkZXNpcmVkIFRpbWVab25lIElE
LiAgSWYgMCwgdXNlIHRoZSBkZWZhdWx0IHRpbWUgem9uZS4KKyAqIEBwYXJhbSBsZW4gVGhlIGxl
bmd0aCBvZiB6b25lSUQsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyAqIEBwYXJhbSBzdGF0
dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzLgorICog
QHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWNhbF9zZXRU
aW1lWm9uZShVQ2FsZW5kYXIqICAgIGNhbCwKKyAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIq
ICB6b25lSUQsCisgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgbGVuLAorICAgICAgICAg
ICAgICAgICBVRXJyb3JDb2RlKiAgIHN0YXR1cyk7CisKKy8qKgorICogUG9zc2libGUgZm9ybWF0
cyBmb3IgYSBVQ2FsZW5kYXIncyBkaXNwbGF5IG5hbWUgCisgKiBAc3RhYmxlIElDVSAyLjAKKyAq
LworZW51bSBVQ2FsZW5kYXJEaXNwbGF5TmFtZVR5cGUgeworICAvKiogU3RhbmRhcmQgZGlzcGxh
eSBuYW1lICovCisgIFVDQUxfU1RBTkRBUkQsCisgIC8qKiBTaG9ydCBzdGFuZGFyZCBkaXNwbGF5
IG5hbWUgKi8KKyAgVUNBTF9TSE9SVF9TVEFOREFSRCwKKyAgLyoqIERheWxpZ2h0IHNhdmluZ3Mg
ZGlzcGxheSBuYW1lICovCisgIFVDQUxfRFNULAorICAvKiogU2hvcnQgZGF5bGlnaHQgc2F2aW5n
cyBkaXNwbGF5IG5hbWUgKi8KKyAgVUNBTF9TSE9SVF9EU1QKK307CisKKy8qKiBAc3RhYmxlIElD
VSAyLjAgKi8KK3R5cGVkZWYgZW51bSBVQ2FsZW5kYXJEaXNwbGF5TmFtZVR5cGUgVUNhbGVuZGFy
RGlzcGxheU5hbWVUeXBlOworCisvKioKKyAqIEdldCB0aGUgZGlzcGxheSBuYW1lIGZvciBhIFVD
YWxlbmRhcidzIFRpbWVab25lLgorICogQSBkaXNwbGF5IG5hbWUgaXMgc3VpdGFibGUgZm9yIHBy
ZXNlbnRhdGlvbiB0byBhIHVzZXIuCisgKiBAcGFyYW0gY2FsICAgICAgICAgIFRoZSBVQ2FsZW5k
YXIgdG8gcXVlcnkuCisgKiBAcGFyYW0gdHlwZSAgICAgICAgIFRoZSBkZXNpcmVkIGRpc3BsYXkg
bmFtZSBmb3JtYXQ7IG9uZSBvZiBVQ0FMX1NUQU5EQVJELCBVQ0FMX1NIT1JUX1NUQU5EQVJELAor
ICogICAgICAgICAgICAgICAgICAgICBVQ0FMX0RTVCwgVUNBTF9TSE9SVF9EU1QKKyAqIEBwYXJh
bSBsb2NhbGUgICAgICAgVGhlIGRlc2lyZWQgbG9jYWxlIGZvciB0aGUgZGlzcGxheSBuYW1lLgor
ICogQHBhcmFtIHJlc3VsdCAgICAgICBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0
aGUgZm9ybWF0dGVkIG51bWJlci4KKyAqIEBwYXJhbSByZXN1bHRMZW5ndGggVGhlIG1heGltdW0g
c2l6ZSBvZiByZXN1bHQuCisgKiBAcGFyYW0gc3RhdHVzICAgICAgIEEgcG9pbnRlciB0byBhbiBV
RXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworICogQHJldHVybiAgICAgICAgICAgICBU
aGUgdG90YWwgYnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVyIHRoYW4gcmVzdWx0TGVuZ3Ro
LCB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9T
VEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1Y2FsX2dldFRpbWVab25lRGlzcGxheU5hbWUoY29u
c3QgVUNhbGVuZGFyKiAgICAgICAgICBjYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VUNhbGVuZGFyRGlzcGxheU5hbWVUeXBlICB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqICAgICAgICAgICAgICAgbG9jYWxlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVDaGFyKiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgICAgICAgICAgcmVzdWx0TGVuZ3RoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUqICAgICAgICAgICAgICAgc3Rh
dHVzKTsKKworLyoqCisgKiBEZXRlcm1pbmUgaWYgYSBVQ2FsZW5kYXIgaXMgY3VycmVudGx5IGlu
IGRheWxpZ2h0IHNhdmluZ3MgdGltZS4KKyAqIERheWxpZ2h0IHNhdmluZ3MgdGltZSBpcyBub3Qg
dXNlZCBpbiBhbGwgcGFydHMgb2YgdGhlIHdvcmxkLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVu
ZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29k
ZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyAqIEByZXR1cm4gVFJVRSBpZiBjYWwgaXMgY3VycmVu
dGx5IGluIGRheWxpZ2h0IHNhdmluZ3MgdGltZSwgRkFMU0Ugb3RoZXJ3aXNlCisgKiBAc3RhYmxl
IElDVSAyLjAKKyAqLworVV9TVEFCTEUgVUJvb2wgVV9FWFBPUlQyIAordWNhbF9pbkRheWxpZ2h0
VGltZShjb25zdCBVQ2FsZW5kYXIqICBjYWwsCisgICAgICAgICAgICAgICAgICAgIFVFcnJvckNv
ZGUqICAgICAgIHN0YXR1cyApOworCisvKioKKyAqIFNldHMgdGhlIEdyZWdvcmlhbkNhbGVuZGFy
IGNoYW5nZSBkYXRlLiBUaGlzIGlzIHRoZSBwb2ludCB3aGVuIHRoZSBzd2l0Y2ggZnJvbQorICog
SnVsaWFuIGRhdGVzIHRvIEdyZWdvcmlhbiBkYXRlcyBvY2N1cnJlZC4gRGVmYXVsdCBpcyAwMDow
MDowMCBsb2NhbCB0aW1lLCBPY3RvYmVyCisgKiAxNSwgMTU4Mi4gUHJldmlvdXMgdG8gdGhpcyB0
aW1lIGFuZCBkYXRlIHdpbGwgYmUgSnVsaWFuIGRhdGVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24g
d29ya3Mgb25seSBmb3IgR3JlZ29yaWFuIGNhbGVuZGFycy4gSWYgdGhlIFVDYWxlbmRhciBpcyBu
b3QKKyAqIGFuIGluc3RhbmNlIG9mIGEgR3JlZ29yaWFuIGNhbGVuZGFyLCB0aGVuIGEgVV9VTlNV
UFBPUlRFRF9FUlJPUgorICogZXJyb3IgY29kZSBpcyBzZXQuCisgKgorICogQHBhcmFtIGNhbCAg
ICAgICAgVGhlIGNhbGVuZGFyIG9iamVjdC4KKyAqIEBwYXJhbSBkYXRlICAgICAgIFRoZSBnaXZl
biBHcmVnb3JpYW4gY3V0b3ZlciBkYXRlLgorICogQHBhcmFtIHBFcnJvckNvZGUgUG9pbnRlciB0
byBhIHN0YW5kYXJkIElDVSBlcnJvciBjb2RlLiBJdHMgaW5wdXQgdmFsdWUgbXVzdAorICogICAg
ICAgICAgICAgICAgICAgcGFzcyB0aGUgVV9TVUNDRVNTKCkgdGVzdCwgb3IgZWxzZSB0aGUgZnVu
Y3Rpb24gcmV0dXJucworICogICAgICAgICAgICAgICAgICAgaW1tZWRpYXRlbHkuIENoZWNrIGZv
ciBVX0ZBSUxVUkUoKSBvbiBvdXRwdXQgb3IgdXNlIHdpdGgKKyAqICAgICAgICAgICAgICAgICAg
IGZ1bmN0aW9uIGNoYWluaW5nLiAoU2VlIFVzZXIgR3VpZGUgZm9yIGRldGFpbHMuKQorICoKKyAq
IEBzZWUgR3JlZ29yaWFuQ2FsZW5kYXI6OnNldEdyZWdvcmlhbkNoYW5nZQorICogQHNlZSB1Y2Fs
X2dldEdyZWdvcmlhbkNoYW5nZQorICogQHN0YWJsZSBJQ1UgMy42CisgKi8KK1VfU1RBQkxFIHZv
aWQgVV9FWFBPUlQyCit1Y2FsX3NldEdyZWdvcmlhbkNoYW5nZShVQ2FsZW5kYXIgKmNhbCwgVURh
dGUgZGF0ZSwgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7CisKKy8qKgorICogR2V0cyB0aGUgR3Jl
Z29yaWFuIENhbGVuZGFyIGNoYW5nZSBkYXRlLiBUaGlzIGlzIHRoZSBwb2ludCB3aGVuIHRoZSBz
d2l0Y2ggZnJvbQorICogSnVsaWFuIGRhdGVzIHRvIEdyZWdvcmlhbiBkYXRlcyBvY2N1cnJlZC4g
RGVmYXVsdCBpcyAwMDowMDowMCBsb2NhbCB0aW1lLCBPY3RvYmVyCisgKiAxNSwgMTU4Mi4gUHJl
dmlvdXMgdG8gdGhpcyB0aW1lIGFuZCBkYXRlIHdpbGwgYmUgSnVsaWFuIGRhdGVzLgorICoKKyAq
IFRoaXMgZnVuY3Rpb24gd29ya3Mgb25seSBmb3IgR3JlZ29yaWFuIGNhbGVuZGFycy4gSWYgdGhl
IFVDYWxlbmRhciBpcyBub3QKKyAqIGFuIGluc3RhbmNlIG9mIGEgR3JlZ29yaWFuIGNhbGVuZGFy
LCB0aGVuIGEgVV9VTlNVUFBPUlRFRF9FUlJPUgorICogZXJyb3IgY29kZSBpcyBzZXQuCisgKgor
ICogQHBhcmFtIGNhbCAgICAgICAgVGhlIGNhbGVuZGFyIG9iamVjdC4KKyAqIEBwYXJhbSBwRXJy
b3JDb2RlIFBvaW50ZXIgdG8gYSBzdGFuZGFyZCBJQ1UgZXJyb3IgY29kZS4gSXRzIGlucHV0IHZh
bHVlIG11c3QKKyAqICAgICAgICAgICAgICAgICAgIHBhc3MgdGhlIFVfU1VDQ0VTUygpIHRlc3Qs
IG9yIGVsc2UgdGhlIGZ1bmN0aW9uIHJldHVybnMKKyAqICAgICAgICAgICAgICAgICAgIGltbWVk
aWF0ZWx5LiBDaGVjayBmb3IgVV9GQUlMVVJFKCkgb24gb3V0cHV0IG9yIHVzZSB3aXRoCisgKiAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjaGFpbmluZy4gKFNlZSBVc2VyIEd1aWRlIGZvciBk
ZXRhaWxzLikKKyAqIEByZXR1cm4gICBUaGUgR3JlZ29yaWFuIGN1dG92ZXIgdGltZSBmb3IgdGhp
cyBjYWxlbmRhci4KKyAqCisgKiBAc2VlIEdyZWdvcmlhbkNhbGVuZGFyOjpnZXRHcmVnb3JpYW5D
aGFuZ2UKKyAqIEBzZWUgdWNhbF9zZXRHcmVnb3JpYW5DaGFuZ2UKKyAqIEBzdGFibGUgSUNVIDMu
NgorICovCitVX1NUQUJMRSBVRGF0ZSBVX0VYUE9SVDIKK3VjYWxfZ2V0R3JlZ29yaWFuQ2hhbmdl
KGNvbnN0IFVDYWxlbmRhciAqY2FsLCBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKKworLyoqCisg
KiBUeXBlcyBvZiBVQ2FsZW5kYXIgYXR0cmlidXRlcyAKKyAqIEBzdGFibGUgSUNVIDIuMAorICov
CitlbnVtIFVDYWxlbmRhckF0dHJpYnV0ZSB7CisgICAgLyoqIExlbmllbnQgcGFyc2luZyAqLwor
ICBVQ0FMX0xFTklFTlQsCisgIC8qKiBGaXJzdCBkYXkgb2Ygd2VlayAqLworICBVQ0FMX0ZJUlNU
X0RBWV9PRl9XRUVLLAorICAvKiogTWluaW11bSBudW1iZXIgb2YgZGF5cyBpbiBmaXJzdCB3ZWVr
ICovCisgIFVDQUxfTUlOSU1BTF9EQVlTX0lOX0ZJUlNUX1dFRUsKK307CisKKy8qKiBAc3RhYmxl
IElDVSAyLjAgKi8KK3R5cGVkZWYgZW51bSBVQ2FsZW5kYXJBdHRyaWJ1dGUgVUNhbGVuZGFyQXR0
cmlidXRlOworCisvKioKKyAqIEdldCBhIG51bWVyaWMgYXR0cmlidXRlIGFzc29jaWF0ZWQgd2l0
aCBhIFVDYWxlbmRhci4KKyAqIE51bWVyaWMgYXR0cmlidXRlcyBpbmNsdWRlIHRoZSBmaXJzdCBk
YXkgb2YgdGhlIHdlZWssIG9yIHRoZSBtaW5pbWFsIG51bWJlcnMKKyAqIG9mIGRheXMgaW4gdGhl
IGZpcnN0IHdlZWsgb2YgdGhlIG1vbnRoLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRv
IHF1ZXJ5LgorICogQHBhcmFtIGF0dHIgVGhlIGRlc2lyZWQgYXR0cmlidXRlOyBvbmUgb2YgVUNB
TF9MRU5JRU5ULCBVQ0FMX0ZJUlNUX0RBWV9PRl9XRUVLLAorICogb3IgVUNBTF9NSU5JTUFMX0RB
WVNfSU5fRklSU1RfV0VFSworICogQHJldHVybiBUaGUgdmFsdWUgb2YgYXR0ci4KKyAqIEBzZWUg
dWNhbF9zZXRBdHRyaWJ1dGUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBpbnQz
Ml90IFVfRVhQT1JUMiAKK3VjYWxfZ2V0QXR0cmlidXRlKGNvbnN0IFVDYWxlbmRhciogICAgY2Fs
LAorICAgICAgICAgICAgICAgICAgVUNhbGVuZGFyQXR0cmlidXRlICBhdHRyKTsKKworLyoqCisg
KiBTZXQgYSBudW1lcmljIGF0dHJpYnV0ZSBhc3NvY2lhdGVkIHdpdGggYSBVQ2FsZW5kYXIuCisg
KiBOdW1lcmljIGF0dHJpYnV0ZXMgaW5jbHVkZSB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLCBv
ciB0aGUgbWluaW1hbCBudW1iZXJzCisgKiBvZiBkYXlzIGluIHRoZSBmaXJzdCB3ZWVrIG9mIHRo
ZSBtb250aC4KKyAqIEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBzZXQuCisgKiBAcGFyYW0g
YXR0ciBUaGUgZGVzaXJlZCBhdHRyaWJ1dGU7IG9uZSBvZiBVQ0FMX0xFTklFTlQsIFVDQUxfRklS
U1RfREFZX09GX1dFRUssCisgKiBvciBVQ0FMX01JTklNQUxfREFZU19JTl9GSVJTVF9XRUVLCisg
KiBAcGFyYW0gbmV3VmFsdWUgVGhlIG5ldyB2YWx1ZSBvZiBhdHRyLgorICogQHNlZSB1Y2FsX2dl
dEF0dHJpYnV0ZQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBP
UlQyIAordWNhbF9zZXRBdHRyaWJ1dGUoVUNhbGVuZGFyKiAgICAgICAgICBjYWwsCisgICAgICAg
ICAgICAgICAgICBVQ2FsZW5kYXJBdHRyaWJ1dGUgIGF0dHIsCisgICAgICAgICAgICAgICAgICBp
bnQzMl90ICAgICAgICAgICAgIG5ld1ZhbHVlKTsKKworLyoqCisgKiBHZXQgYSBsb2NhbGUgZm9y
IHdoaWNoIGNhbGVuZGFycyBhcmUgYXZhaWxhYmxlLgorICogQSBVQ2FsZW5kYXIgaW4gYSBsb2Nh
bGUgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnRhaW4gdGhlIGNvcnJlY3QKKyAq
IGRheSBhbmQgbW9udGggbmFtZXMgZm9yIHRoZSBsb2NhbGUuCisgKiBAcGFyYW0gbG9jYWxlSW5k
ZXggVGhlIGluZGV4IG9mIHRoZSBkZXNpcmVkIGxvY2FsZS4KKyAqIEByZXR1cm4gQSBsb2NhbGUg
Zm9yIHdoaWNoIGNhbGVuZGFycyBhcmUgYXZhaWxhYmxlLCBvciAwIGlmIG5vbmUuCisgKiBAc2Vl
IHVjYWxfY291bnRBdmFpbGFibGUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBj
b25zdCBjaGFyKiBVX0VYUE9SVDIgCit1Y2FsX2dldEF2YWlsYWJsZShpbnQzMl90IGxvY2FsZUlu
ZGV4KTsKKworLyoqCisgKiBEZXRlcm1pbmUgaG93IG1hbnkgbG9jYWxlcyBoYXZlIGNhbGVuZGFy
cyBhdmFpbGFibGUuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG1vc3QgdXNlZnVsIGFzIGRldGVybWlu
aW5nIHRoZSBsb29wIGVuZGluZyBjb25kaXRpb24gZm9yCisgKiBjYWxscyB0byBccmVmIHVjYWxf
Z2V0QXZhaWxhYmxlLgorICogQHJldHVybiBUaGUgbnVtYmVyIG9mIGxvY2FsZXMgZm9yIHdoaWNo
IGNhbGVuZGFycyBhcmUgYXZhaWxhYmxlLgorICogQHNlZSB1Y2FsX2dldEF2YWlsYWJsZQorICog
QHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordWNhbF9j
b3VudEF2YWlsYWJsZSh2b2lkKTsKKworLyoqCisgKiBHZXQgYSBVQ2FsZW5kYXIncyBjdXJyZW50
IHRpbWUgaW4gbWlsbGlzLgorICogVGhlIHRpbWUgaXMgcmVwcmVzZW50ZWQgYXMgbWlsbGlzZWNv
bmRzIGZyb20gdGhlIGVwb2NoLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHF1ZXJ5
LgorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZl
IGFueSBlcnJvcnMKKyAqIEByZXR1cm4gVGhlIGNhbGVuZGFyJ3MgY3VycmVudCB0aW1lIGluIG1p
bGxpcy4KKyAqIEBzZWUgdWNhbF9zZXRNaWxsaXMKKyAqIEBzZWUgdWNhbF9zZXREYXRlCisgKiBA
c2VlIHVjYWxfc2V0RGF0ZVRpbWUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBV
RGF0ZSBVX0VYUE9SVDIgCit1Y2FsX2dldE1pbGxpcyhjb25zdCBVQ2FsZW5kYXIqICBjYWwsCisg
ICAgICAgICAgICAgICBVRXJyb3JDb2RlKiAgICAgICBzdGF0dXMpOworCisvKioKKyAqIFNldCBh
IFVDYWxlbmRhcidzIGN1cnJlbnQgdGltZSBpbiBtaWxsaXMuCisgKiBUaGUgdGltZSBpcyByZXBy
ZXNlbnRlZCBhcyBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZXBvY2guCisgKiBAcGFyYW0gY2FsIFRo
ZSBVQ2FsZW5kYXIgdG8gc2V0LgorICogQHBhcmFtIGRhdGVUaW1lIFRoZSBkZXNpcmVkIGRhdGUg
YW5kIHRpbWUuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRv
IHJlY2VpdmUgYW55IGVycm9ycworICogQHNlZSB1Y2FsX2dldE1pbGxpcworICogQHNlZSB1Y2Fs
X3NldERhdGUKKyAqIEBzZWUgdWNhbF9zZXREYXRlVGltZQorICogQHN0YWJsZSBJQ1UgMi4wCisg
Ki8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWNhbF9zZXRNaWxsaXMoVUNhbGVuZGFyKiAg
IGNhbCwKKyAgICAgICAgICAgICAgIFVEYXRlICAgICAgICBkYXRlVGltZSwKKyAgICAgICAgICAg
ICAgIFVFcnJvckNvZGUqICBzdGF0dXMgKTsKKworLyoqCisgKiBTZXQgYSBVQ2FsZW5kYXIncyBj
dXJyZW50IGRhdGUuCisgKiBUaGUgZGF0ZSBpcyByZXByZXNlbnRlZCBhcyBhIHNlcmllcyBvZiAz
Mi1iaXQgaW50ZWdlcnMuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gc2V0LgorICog
QHBhcmFtIHllYXIgVGhlIGRlc2lyZWQgeWVhci4KKyAqIEBwYXJhbSBtb250aCBUaGUgZGVzaXJl
ZCBtb250aDsgb25lIG9mIFVDQUxfSkFOVUFSWSwgVUNBTF9GRUJSVUFSWSwgVUNBTF9NQVJDSCwg
VUNBTF9BUFJJTCwgVUNBTF9NQVksCisgKiBVQ0FMX0pVTkUsIFVDQUxfSlVMWSwgVUNBTF9BVUdV
U1QsIFVDQUxfU0VQVEVNQkVSLCBVQ0FMX09DVE9CRVIsIFVDQUxfTk9WRU1CRVIsIFVDQUxfREVD
RU1CRVIsIFVDQUxfVU5ERUNJTUJFUgorICogQHBhcmFtIGRhdGUgVGhlIGRlc2lyZWQgZGF5IG9m
IHRoZSBtb250aC4KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUg
dG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisgKiBAc2VlIHVjYWxfZ2V0TWlsbGlzCisgKiBAc2VlIHVj
YWxfc2V0TWlsbGlzCisgKiBAc2VlIHVjYWxfc2V0RGF0ZVRpbWUKKyAqIEBzdGFibGUgSUNVIDIu
MAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfc2V0RGF0ZShVQ2FsZW5kYXIq
ICAgY2FsLAorICAgICAgICAgICAgIGludDMyX3QgICAgICB5ZWFyLAorICAgICAgICAgICAgIGlu
dDMyX3QgICAgICBtb250aCwKKyAgICAgICAgICAgICBpbnQzMl90ICAgICAgZGF0ZSwKKyAgICAg
ICAgICAgICBVRXJyb3JDb2RlKiAgc3RhdHVzKTsKKworLyoqCisgKiBTZXQgYSBVQ2FsZW5kYXIn
cyBjdXJyZW50IGRhdGUuCisgKiBUaGUgZGF0ZSBpcyByZXByZXNlbnRlZCBhcyBhIHNlcmllcyBv
ZiAzMi1iaXQgaW50ZWdlcnMuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gc2V0Lgor
ICogQHBhcmFtIHllYXIgVGhlIGRlc2lyZWQgeWVhci4KKyAqIEBwYXJhbSBtb250aCBUaGUgZGVz
aXJlZCBtb250aDsgb25lIG9mIFVDQUxfSkFOVUFSWSwgVUNBTF9GRUJSVUFSWSwgVUNBTF9NQVJD
SCwgVUNBTF9BUFJJTCwgVUNBTF9NQVksCisgKiBVQ0FMX0pVTkUsIFVDQUxfSlVMWSwgVUNBTF9B
VUdVU1QsIFVDQUxfU0VQVEVNQkVSLCBVQ0FMX09DVE9CRVIsIFVDQUxfTk9WRU1CRVIsIFVDQUxf
REVDRU1CRVIsIFVDQUxfVU5ERUNJTUJFUgorICogQHBhcmFtIGRhdGUgVGhlIGRlc2lyZWQgZGF5
IG9mIHRoZSBtb250aC4KKyAqIEBwYXJhbSBob3VyIFRoZSBkZXNpcmVkIGhvdXIgb2YgZGF5Lgor
ICogQHBhcmFtIG1pbnV0ZSBUaGUgZGVzaXJlZCBtaW51dGUuCisgKiBAcGFyYW0gc2Vjb25kIFRo
ZSBkZXNpcmVjIHNlY29uZC4KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJv
ckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisgKiBAc2VlIHVjYWxfZ2V0TWlsbGlzCisgKiBA
c2VlIHVjYWxfc2V0TWlsbGlzCisgKiBAc2VlIHVjYWxfc2V0RGF0ZQorICogQHN0YWJsZSBJQ1Ug
Mi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWNhbF9zZXREYXRlVGltZShVQ2Fs
ZW5kYXIqICAgY2FsLAorICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgeWVhciwKKyAgICAg
ICAgICAgICAgICAgaW50MzJfdCAgICAgIG1vbnRoLAorICAgICAgICAgICAgICAgICBpbnQzMl90
ICAgICAgZGF0ZSwKKyAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgIGhvdXIsCisgICAgICAg
ICAgICAgICAgIGludDMyX3QgICAgICBtaW51dGUsCisgICAgICAgICAgICAgICAgIGludDMyX3Qg
ICAgICBzZWNvbmQsCisgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUqICBzdGF0dXMpOworCisv
KioKKyAqIFJldHVybnMgVFJVRSBpZiB0d28gVUNhbGVuZGFycyBhcmUgZXF1aXZhbGVudC4gIEVx
dWl2YWxlbnQKKyAqIFVDYWxlbmRhcnMgd2lsbCBiZWhhdmUgaWRlbnRpY2FsbHksIGJ1dCB0aGV5
IG1heSBiZSBzZXQgdG8KKyAqIGRpZmZlcmVudCB0aW1lcy4KKyAqIEBwYXJhbSBjYWwxIFRoZSBm
aXJzdCBvZiB0aGUgVUNhbGVuZGFycyB0byBjb21wYXJlLgorICogQHBhcmFtIGNhbDIgVGhlIHNl
Y29uZCBvZiB0aGUgVUNhbGVuZGFycyB0byBjb21wYXJlLgorICogQHJldHVybiBUUlVFIGlmIGNh
bDEgYW5kIGNhbDIgYXJlIGVxdWl2YWxlbnQsIEZBTFNFIG90aGVyd2lzZS4KKyAqIEBzdGFibGUg
SUNVIDIuMAorICovCitVX1NUQUJMRSBVQm9vbCBVX0VYUE9SVDIgCit1Y2FsX2VxdWl2YWxlbnRU
byhjb25zdCBVQ2FsZW5kYXIqICBjYWwxLAorICAgICAgICAgICAgICAgICAgY29uc3QgVUNhbGVu
ZGFyKiAgY2FsMik7CisKKy8qKgorICogQWRkIGEgc3BlY2lmaWVkIHNpZ25lZCBhbW91bnQgdG8g
YSBwYXJ0aWN1bGFyIGZpZWxkIGluIGEgVUNhbGVuZGFyLgorICogVGhpcyBjYW4gbW9kaWZ5IG1v
cmUgc2lnbmlmaWNhbnQgZmllbGRzIGluIHRoZSBjYWxlbmRhci4KKyAqIEBwYXJhbSBjYWwgVGhl
IFVDYWxlbmRhciB0byB3aGljaCB0byBhZGQuCisgKiBAcGFyYW0gZmllbGQgVGhlIGZpZWxkIHRv
IHdoaWNoIHRvIGFkZCB0aGUgc2lnbmVkIHZhbHVlOyBvbmUgb2YgVUNBTF9FUkEsIFVDQUxfWUVB
UiwgVUNBTF9NT05USCwKKyAqIFVDQUxfV0VFS19PRl9ZRUFSLCBVQ0FMX1dFRUtfT0ZfTU9OVEgs
IFVDQUxfREFURSwgVUNBTF9EQVlfT0ZfWUVBUiwgVUNBTF9EQVlfT0ZfV0VFSywKKyAqIFVDQUxf
REFZX09GX1dFRUtfSU5fTU9OVEgsIFVDQUxfQU1fUE0sIFVDQUxfSE9VUiwgVUNBTF9IT1VSX09G
X0RBWSwgVUNBTF9NSU5VVEUsIFVDQUxfU0VDT05ELAorICogVUNBTF9NSUxMSVNFQ09ORCwgVUNB
TF9aT05FX09GRlNFVCwgVUNBTF9EU1RfT0ZGU0VULgorICogQHBhcmFtIGFtb3VudCBUaGUgc2ln
bmVkIGFtb3VudCB0byBhZGQgdG8gZmllbGQuIElmIHRoZSBhbW91bnQgY2F1c2VzIHRoZSB2YWx1
ZQorICogdG8gZXhjZWVkIHRvIG1heGltdW0gb3IgbWluaW11bSB2YWx1ZXMgZm9yIHRoYXQgZmll
bGQsIG90aGVyIGZpZWxkcyBhcmUgbW9kaWZpZWQKKyAqIHRvIHByZXNlcnZlIHRoZSBtYWduaXR1
ZGUgb2YgdGhlIGNoYW5nZS4KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJv
ckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisgKiBAc2VlIHVjYWxfcm9sbAorICogQHN0YWJs
ZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWNhbF9hZGQoVUNhbGVu
ZGFyKiAgICAgICAgICAgY2FsLAorICAgICAgICAgVUNhbGVuZGFyRGF0ZUZpZWxkcyAgZmllbGQs
CisgICAgICAgICBpbnQzMl90ICAgICAgICAgICAgICBhbW91bnQsCisgICAgICAgICBVRXJyb3JD
b2RlKiAgICAgICAgICBzdGF0dXMpOworCisvKioKKyAqIEFkZCBhIHNwZWNpZmllZCBzaWduZWQg
YW1vdW50IHRvIGEgcGFydGljdWxhciBmaWVsZCBpbiBhIFVDYWxlbmRhci4KKyAqIFRoaXMgd2ls
bCBub3QgbW9kaWZ5IG1vcmUgc2lnbmlmaWNhbnQgZmllbGRzIGluIHRoZSBjYWxlbmRhci4KKyAq
IEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byB3aGljaCB0byBhZGQuCisgKiBAcGFyYW0gZmll
bGQgVGhlIGZpZWxkIHRvIHdoaWNoIHRvIGFkZCB0aGUgc2lnbmVkIHZhbHVlOyBvbmUgb2YgVUNB
TF9FUkEsIFVDQUxfWUVBUiwgVUNBTF9NT05USCwKKyAqIFVDQUxfV0VFS19PRl9ZRUFSLCBVQ0FM
X1dFRUtfT0ZfTU9OVEgsIFVDQUxfREFURSwgVUNBTF9EQVlfT0ZfWUVBUiwgVUNBTF9EQVlfT0Zf
V0VFSywKKyAqIFVDQUxfREFZX09GX1dFRUtfSU5fTU9OVEgsIFVDQUxfQU1fUE0sIFVDQUxfSE9V
UiwgVUNBTF9IT1VSX09GX0RBWSwgVUNBTF9NSU5VVEUsIFVDQUxfU0VDT05ELAorICogVUNBTF9N
SUxMSVNFQ09ORCwgVUNBTF9aT05FX09GRlNFVCwgVUNBTF9EU1RfT0ZGU0VULgorICogQHBhcmFt
IGFtb3VudCBUaGUgc2lnbmVkIGFtb3VudCB0byBhZGQgdG8gZmllbGQuIElmIHRoZSBhbW91bnQg
Y2F1c2VzIHRoZSB2YWx1ZQorICogdG8gZXhjZWVkIHRvIG1heGltdW0gb3IgbWluaW11bSB2YWx1
ZXMgZm9yIHRoYXQgZmllbGQsIHRoZSBmaWVsZCBpcyBwaW5uZWQgdG8gYSBwZXJtaXNzaWJsZQor
ICogdmFsdWUuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRv
IHJlY2VpdmUgYW55IGVycm9ycworICogQHNlZSB1Y2FsX2FkZAorICogQHN0YWJsZSBJQ1UgMi4w
CisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWNhbF9yb2xsKFVDYWxlbmRhciogICAg
ICAgICAgIGNhbCwKKyAgICAgICAgICBVQ2FsZW5kYXJEYXRlRmllbGRzICBmaWVsZCwKKyAgICAg
ICAgICBpbnQzMl90ICAgICAgICAgICAgICBhbW91bnQsCisgICAgICAgICAgVUVycm9yQ29kZSog
ICAgICAgICAgc3RhdHVzKTsKKworLyoqCisgKiBHZXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBm
aWVsZCBmcm9tIGEgVUNhbGVuZGFyLgorICogQWxsIGZpZWxkcyBhcmUgcmVwcmVzZW50ZWQgYXMg
MzItYml0IGludGVnZXJzLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHF1ZXJ5Lgor
ICogQHBhcmFtIGZpZWxkIFRoZSBkZXNpcmVkIGZpZWxkOyBvbmUgb2YgVUNBTF9FUkEsIFVDQUxf
WUVBUiwgVUNBTF9NT05USCwKKyAqIFVDQUxfV0VFS19PRl9ZRUFSLCBVQ0FMX1dFRUtfT0ZfTU9O
VEgsIFVDQUxfREFURSwgVUNBTF9EQVlfT0ZfWUVBUiwgVUNBTF9EQVlfT0ZfV0VFSywKKyAqIFVD
QUxfREFZX09GX1dFRUtfSU5fTU9OVEgsIFVDQUxfQU1fUE0sIFVDQUxfSE9VUiwgVUNBTF9IT1VS
X09GX0RBWSwgVUNBTF9NSU5VVEUsIFVDQUxfU0VDT05ELAorICogVUNBTF9NSUxMSVNFQ09ORCwg
VUNBTF9aT05FX09GRlNFVCwgVUNBTF9EU1RfT0ZGU0VULgorICogQHBhcmFtIHN0YXR1cyBBIHBv
aW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyAqIEByZXR1cm4g
VGhlIHZhbHVlIG9mIHRoZSBkZXNpcmVkIGZpZWxkLgorICogQHNlZSB1Y2FsX3NldAorICogQHNl
ZSB1Y2FsX2lzU2V0CisgKiBAc2VlIHVjYWxfY2xlYXJGaWVsZAorICogQHNlZSB1Y2FsX2NsZWFy
CisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1
Y2FsX2dldChjb25zdCBVQ2FsZW5kYXIqICAgICBjYWwsCisgICAgICAgICBVQ2FsZW5kYXJEYXRl
RmllbGRzICBmaWVsZCwKKyAgICAgICAgIFVFcnJvckNvZGUqICAgICAgICAgIHN0YXR1cyApOwor
CisvKioKKyAqIFNldCB0aGUgdmFsdWUgb2YgYSBmaWVsZCBpbiBhIFVDYWxlbmRhci4KKyAqIEFs
bCBmaWVsZHMgYXJlIHJlcHJlc2VudGVkIGFzIDMyLWJpdCBpbnRlZ2Vycy4KKyAqIEBwYXJhbSBj
YWwgVGhlIFVDYWxlbmRhciB0byBzZXQuCisgKiBAcGFyYW0gZmllbGQgVGhlIGZpZWxkIHRvIHNl
dDsgb25lIG9mIFVDQUxfRVJBLCBVQ0FMX1lFQVIsIFVDQUxfTU9OVEgsCisgKiBVQ0FMX1dFRUtf
T0ZfWUVBUiwgVUNBTF9XRUVLX09GX01PTlRILCBVQ0FMX0RBVEUsIFVDQUxfREFZX09GX1lFQVIs
IFVDQUxfREFZX09GX1dFRUssCisgKiBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRILCBVQ0FMX0FN
X1BNLCBVQ0FMX0hPVVIsIFVDQUxfSE9VUl9PRl9EQVksIFVDQUxfTUlOVVRFLCBVQ0FMX1NFQ09O
RCwKKyAqIFVDQUxfTUlMTElTRUNPTkQsIFVDQUxfWk9ORV9PRkZTRVQsIFVDQUxfRFNUX09GRlNF
VC4KKyAqIEBwYXJhbSB2YWx1ZSBUaGUgZGVzaXJlZCB2YWx1ZSBvZiBmaWVsZC4KKyAqIEBzZWUg
dWNhbF9nZXQKKyAqIEBzZWUgdWNhbF9pc1NldAorICogQHNlZSB1Y2FsX2NsZWFyRmllbGQKKyAq
IEBzZWUgdWNhbF9jbGVhcgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHZvaWQg
VV9FWFBPUlQyIAordWNhbF9zZXQoVUNhbGVuZGFyKiAgICAgICAgICAgY2FsLAorICAgICAgICAg
VUNhbGVuZGFyRGF0ZUZpZWxkcyAgZmllbGQsCisgICAgICAgICBpbnQzMl90ICAgICAgICAgICAg
ICB2YWx1ZSk7CisKKy8qKgorICogRGV0ZXJtaW5lIGlmIGEgZmllbGQgaW4gYSBVQ2FsZW5kYXIg
aXMgc2V0LgorICogQWxsIGZpZWxkcyBhcmUgcmVwcmVzZW50ZWQgYXMgMzItYml0IGludGVnZXJz
LgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIGZpZWxk
IFRoZSBkZXNpcmVkIGZpZWxkOyBvbmUgb2YgVUNBTF9FUkEsIFVDQUxfWUVBUiwgVUNBTF9NT05U
SCwKKyAqIFVDQUxfV0VFS19PRl9ZRUFSLCBVQ0FMX1dFRUtfT0ZfTU9OVEgsIFVDQUxfREFURSwg
VUNBTF9EQVlfT0ZfWUVBUiwgVUNBTF9EQVlfT0ZfV0VFSywKKyAqIFVDQUxfREFZX09GX1dFRUtf
SU5fTU9OVEgsIFVDQUxfQU1fUE0sIFVDQUxfSE9VUiwgVUNBTF9IT1VSX09GX0RBWSwgVUNBTF9N
SU5VVEUsIFVDQUxfU0VDT05ELAorICogVUNBTF9NSUxMSVNFQ09ORCwgVUNBTF9aT05FX09GRlNF
VCwgVUNBTF9EU1RfT0ZGU0VULgorICogQHJldHVybiBUUlVFIGlmIGZpZWxkIGlzIHNldCwgRkFM
U0Ugb3RoZXJ3aXNlLgorICogQHNlZSB1Y2FsX2dldAorICogQHNlZSB1Y2FsX3NldAorICogQHNl
ZSB1Y2FsX2NsZWFyRmllbGQKKyAqIEBzZWUgdWNhbF9jbGVhcgorICogQHN0YWJsZSBJQ1UgMi4w
CisgKi8KK1VfU1RBQkxFIFVCb29sIFVfRVhQT1JUMiAKK3VjYWxfaXNTZXQoY29uc3QgVUNhbGVu
ZGFyKiAgICAgY2FsLAorICAgICAgICAgICBVQ2FsZW5kYXJEYXRlRmllbGRzICBmaWVsZCk7CisK
Ky8qKgorICogQ2xlYXIgYSBmaWVsZCBpbiBhIFVDYWxlbmRhci4KKyAqIEFsbCBmaWVsZHMgYXJl
IHJlcHJlc2VudGVkIGFzIDMyLWJpdCBpbnRlZ2Vycy4KKyAqIEBwYXJhbSBjYWwgVGhlIFVDYWxl
bmRhciBjb250YWluaW5nIHRoZSBmaWVsZCB0byBjbGVhci4KKyAqIEBwYXJhbSBmaWVsZCBUaGUg
ZmllbGQgdG8gY2xlYXI7IG9uZSBvZiBVQ0FMX0VSQSwgVUNBTF9ZRUFSLCBVQ0FMX01PTlRILAor
ICogVUNBTF9XRUVLX09GX1lFQVIsIFVDQUxfV0VFS19PRl9NT05USCwgVUNBTF9EQVRFLCBVQ0FM
X0RBWV9PRl9ZRUFSLCBVQ0FMX0RBWV9PRl9XRUVLLAorICogVUNBTF9EQVlfT0ZfV0VFS19JTl9N
T05USCwgVUNBTF9BTV9QTSwgVUNBTF9IT1VSLCBVQ0FMX0hPVVJfT0ZfREFZLCBVQ0FMX01JTlVU
RSwgVUNBTF9TRUNPTkQsCisgKiBVQ0FMX01JTExJU0VDT05ELCBVQ0FMX1pPTkVfT0ZGU0VULCBV
Q0FMX0RTVF9PRkZTRVQuCisgKiBAc2VlIHVjYWxfZ2V0CisgKiBAc2VlIHVjYWxfc2V0CisgKiBA
c2VlIHVjYWxfaXNTZXQKKyAqIEBzZWUgdWNhbF9jbGVhcgorICogQHN0YWJsZSBJQ1UgMi4wCisg
Ki8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWNhbF9jbGVhckZpZWxkKFVDYWxlbmRhciog
ICAgICAgICAgIGNhbCwKKyAgICAgICAgICAgICAgICBVQ2FsZW5kYXJEYXRlRmllbGRzICBmaWVs
ZCk7CisKKy8qKgorICogQ2xlYXIgYWxsIGZpZWxkcyBpbiBhIFVDYWxlbmRhci4KKyAqIEFsbCBm
aWVsZHMgYXJlIHJlcHJlc2VudGVkIGFzIDMyLWJpdCBpbnRlZ2Vycy4KKyAqIEBwYXJhbSBjYWxl
bmRhciBUaGUgVUNhbGVuZGFyIHRvIGNsZWFyLgorICogQHNlZSB1Y2FsX2dldAorICogQHNlZSB1
Y2FsX3NldAorICogQHNlZSB1Y2FsX2lzU2V0CisgKiBAc2VlIHVjYWxfY2xlYXJGaWVsZAorICog
QHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWNhbF9jbGVh
cihVQ2FsZW5kYXIqIGNhbGVuZGFyKTsKKworLyoqCisgKiBQb3NzaWJsZSBsaW1pdCB2YWx1ZXMg
Zm9yIGEgVUNhbGVuZGFyIAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK2VudW0gVUNhbGVuZGFy
TGltaXRUeXBlIHsKKyAgLyoqIE1pbmltdW0gdmFsdWUgKi8KKyAgVUNBTF9NSU5JTVVNLAorICAv
KiogTWF4aW11bSB2YWx1ZSAqLworICBVQ0FMX01BWElNVU0sCisgIC8qKiBHcmVhdGVzdCBtaW5p
bXVtIHZhbHVlICovCisgIFVDQUxfR1JFQVRFU1RfTUlOSU1VTSwKKyAgLyoqIExlYWVzdCBtYXhp
bXVtIHZhbHVlICovCisgIFVDQUxfTEVBU1RfTUFYSU1VTSwKKyAgLyoqIEFjdHVhbCBtaW5pbXVt
IHZhbHVlICovCisgIFVDQUxfQUNUVUFMX01JTklNVU0sCisgIC8qKiBBY3R1YWwgbWF4aW11bSB2
YWx1ZSAqLworICBVQ0FMX0FDVFVBTF9NQVhJTVVNCit9OworCisvKiogQHN0YWJsZSBJQ1UgMi4w
ICovCit0eXBlZGVmIGVudW0gVUNhbGVuZGFyTGltaXRUeXBlIFVDYWxlbmRhckxpbWl0VHlwZTsK
KworLyoqCisgKiBEZXRlcm1pbmUgYSBsaW1pdCBmb3IgYSBmaWVsZCBpbiBhIFVDYWxlbmRhci4K
KyAqIEEgbGltaXQgaXMgYSBtYXhpbXVtIG9yIG1pbmltdW0gdmFsdWUgZm9yIGEgZmllbGQuCisg
KiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gcXVlcnkuCisgKiBAcGFyYW0gZmllbGQgVGhl
IGRlc2lyZWQgZmllbGQ7IG9uZSBvZiBVQ0FMX0VSQSwgVUNBTF9ZRUFSLCBVQ0FMX01PTlRILAor
ICogVUNBTF9XRUVLX09GX1lFQVIsIFVDQUxfV0VFS19PRl9NT05USCwgVUNBTF9EQVRFLCBVQ0FM
X0RBWV9PRl9ZRUFSLCBVQ0FMX0RBWV9PRl9XRUVLLAorICogVUNBTF9EQVlfT0ZfV0VFS19JTl9N
T05USCwgVUNBTF9BTV9QTSwgVUNBTF9IT1VSLCBVQ0FMX0hPVVJfT0ZfREFZLCBVQ0FMX01JTlVU
RSwgVUNBTF9TRUNPTkQsCisgKiBVQ0FMX01JTExJU0VDT05ELCBVQ0FMX1pPTkVfT0ZGU0VULCBV
Q0FMX0RTVF9PRkZTRVQuCisgKiBAcGFyYW0gdHlwZSBUaGUgZGVzaXJlZCBjcml0aWNhbCBwb2lu
dDsgb25lIG9mIFVDQUxfTUlOSU1VTSwgVUNBTF9NQVhJTVVNLCBVQ0FMX0dSRUFURVNUX01JTklN
VU0sCisgKiBVQ0FMX0xFQVNUX01BWElNVU0sIFVDQUxfQUNUVUFMX01JTklNVU0sIFVDQUxfQUNU
VUFMX01BWElNVU0KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUg
dG8gcmVjZWl2ZSBhbnkgZXJyb3JzLgorICogQHJldHVybiBUaGUgcmVxdWVzdGVkIHZhbHVlLgor
ICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordWNh
bF9nZXRMaW1pdChjb25zdCBVQ2FsZW5kYXIqICAgICBjYWwsCisgICAgICAgICAgICAgIFVDYWxl
bmRhckRhdGVGaWVsZHMgIGZpZWxkLAorICAgICAgICAgICAgICBVQ2FsZW5kYXJMaW1pdFR5cGUg
ICB0eXBlLAorICAgICAgICAgICAgICBVRXJyb3JDb2RlKiAgICAgICAgICBzdGF0dXMpOworCisv
KiogR2V0IHRoZSBsb2NhbGUgZm9yIHRoaXMgY2FsZW5kYXIgb2JqZWN0LiBZb3UgY2FuIGNob29z
ZSBiZXR3ZWVuIHZhbGlkIGFuZCBhY3R1YWwgbG9jYWxlLgorICogIEBwYXJhbSBjYWwgVGhlIGNh
bGVuZGFyIG9iamVjdAorICogIEBwYXJhbSB0eXBlIHR5cGUgb2YgdGhlIGxvY2FsZSB3ZSdyZSBs
b29raW5nIGZvciAodmFsaWQgb3IgYWN0dWFsKSAKKyAqICBAcGFyYW0gc3RhdHVzIGVycm9yIGNv
ZGUgZm9yIHRoZSBvcGVyYXRpb24KKyAqICBAcmV0dXJuIHRoZSBsb2NhbGUgbmFtZQorICogIEBz
dGFibGUgSUNVIDIuOAorICovCitVX1NUQUJMRSBjb25zdCBjaGFyICogVV9FWFBPUlQyCit1Y2Fs
X2dldExvY2FsZUJ5VHlwZShjb25zdCBVQ2FsZW5kYXIgKmNhbCwgVUxvY0RhdGFMb2NhbGVUeXBl
IHR5cGUsIFVFcnJvckNvZGUqIHN0YXR1cyk7CisKKy8qKgorICogUmV0dXJucyB0aGUgdGltZXpv
bmUgZGF0YSB2ZXJzaW9uIGN1cnJlbnRseSB1c2VkIGJ5IElDVS4KKyAqIEBwYXJhbSBzdGF0dXMg
ZXJyb3IgY29kZSBmb3IgdGhlIG9wZXJhdGlvbgorICogQHJldHVybiB0aGUgdmVyc2lvbiBzdHJp
bmcsIHN1Y2ggYXMgIjIwMDdmIgorICogQHN0YWJsZSBJQ1UgMy44CisgKi8KK1VfU1RBQkxFIGNv
bnN0IGNoYXIgKiBVX0VYUE9SVDIKK3VjYWxfZ2V0VFpEYXRhVmVyc2lvbihVRXJyb3JDb2RlKiBz
dGF0dXMpOworCisvKioKKyAqIFJldHVybnMgdGhlIGNhbm9uaWNhbCBzeXN0ZW0gdGltZXpvbmUg
SUQgb3IgdGhlIG5vcm1hbGl6ZWQKKyAqIGN1c3RvbSB0aW1lIHpvbmUgSUQgZm9yIHRoZSBnaXZl
biB0aW1lIHpvbmUgSUQuCisgKiBAcGFyYW0gaWQgICAgICAgIFRoZSBpbnB1dCB0aW1lem9uZSBJ
RCB0byBiZSBjYW5vbmljYWxpemVkLgorICogQHBhcmFtIGxlbiAgICAgICBUaGUgbGVuZ3RoIG9m
IGlkLCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisgKiBAcGFyYW0gcmVzdWx0ICAgIFRoZSBi
dWZmZXIgcmVjZWl2ZXMgdGhlIGNhbm9uaWNhbCBzeXN0ZW0gdGltZXpvbmUgSUQKKyAqICAgICAg
ICAgICAgICAgICAgb3IgdGhlIGN1c3RvbSB0aW1lem9uZSBJRCBpbiBub3JtYWxpemVkIGZvcm1h
dC4KKyAqIEBwYXJhbSByZXN1bHRDYXBhY2l0eSAgICBUaGUgY2FwYWNpdHkgb2YgdGhlIHJlc3Vs
dCBidWZmZXIuCisgKiBAcGFyYW0gaXNTeXN0ZW1JRCAgICAgICAgUmVjZWl2ZXMgaWYgdGhlIGdp
dmVuIElEIGlzIGEga25vd24gc3lzdGVtCisgICAgICogICAgICAgICAgICAgICAgICAgICAgdGlt
ZXpvbmUgSUQuCisgKiBAcGFyYW0gc3RhdHVzICAgIFJlY2V2aWVzIHRoZSBzdGF0dXMuICBXaGVu
IHRoZSBnaXZlbiB0aW1lem9uZSBJRAorICogICAgICAgICAgICAgICAgICBpcyBuZWl0aGVyIGEg
a25vd24gc3lzdGVtIHRpbWUgem9uZSBJRCBub3IgYQorICogICAgICAgICAgICAgICAgICB2YWxp
ZCBjdXN0b20gdGltZXpvbmUgSUQsIFVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUgorICogICAgICAg
ICAgICAgICAgICBpcyBzZXQuCisgKiBAcmV0dXJuICAgICAgICAgIFRoZSByZXN1bHQgc3RyaW5n
IGxlbmd0aCwgbm90IGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcKKyAqICAgICAgICAgICAgICAg
ICAgbnVsbC4KKyAqIEBzdGFibGUgSUNVIDQuMAorICovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQ
T1JUMgordWNhbF9nZXRDYW5vbmljYWxUaW1lWm9uZUlEKGNvbnN0IFVDaGFyKiBpZCwgaW50MzJf
dCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIqIHJlc3VsdCwgaW50MzJf
dCByZXN1bHRDYXBhY2l0eSwgVUJvb2wgKmlzU3lzdGVtSUQsIFVFcnJvckNvZGUqIHN0YXR1cyk7
CisvKioKKyAqIEdldCB0aGUgcmVzb3VyY2Uga2V5d29yZCB2YWx1ZSBzdHJpbmcgZGVzaWduYXRp
bmcgdGhlIGNhbGVuZGFyIHR5cGUgZm9yIHRoZSBVQ2FsZW5kYXIuCisgKiBAcGFyYW0gY2FsIFRo
ZSBVQ2FsZW5kYXIgdG8gcXVlcnkuCisgKiBAcGFyYW0gc3RhdHVzIFRoZSBlcnJvciBjb2RlIGZv
ciB0aGUgb3BlcmF0aW9uLgorICogQHJldHVybiBUaGUgcmVzb3VyY2Uga2V5d29yZCB2YWx1ZSBz
dHJpbmcuCisgKiBAc3RhYmxlIElDVSA0LjIKKyAqLworVV9TVEFCTEUgY29uc3QgY2hhciAqIFVf
RVhQT1JUMgordWNhbF9nZXRUeXBlKGNvbnN0IFVDYWxlbmRhciAqY2FsLCBVRXJyb3JDb2RlKiBz
dGF0dXMpOworCisvKioKKyAqIEdpdmVuIGEga2V5IGFuZCBhIGxvY2FsZSwgcmV0dXJucyBhbiBh
cnJheSBvZiBzdHJpbmcgdmFsdWVzIGluIGEgcHJlZmVycmVkCisgKiBvcmRlciB0aGF0IHdvdWxk
IG1ha2UgYSBkaWZmZXJlbmNlLiBUaGVzZSBhcmUgYWxsIGFuZCBvbmx5IHRob3NlIHZhbHVlcyB3
aGVyZQorICogdGhlIG9wZW4gKGNyZWF0aW9uKSBvZiB0aGUgc2VydmljZSB3aXRoIHRoZSBsb2Nh
bGUgZm9ybWVkIGZyb20gdGhlIGlucHV0IGxvY2FsZQorICogcGx1cyBpbnB1dCBrZXl3b3JkIGFu
ZCB0aGF0IHZhbHVlIGhhcyBkaWZmZXJlbnQgYmVoYXZpb3IgdGhhbiBjcmVhdGlvbiB3aXRoIHRo
ZQorICogaW5wdXQgbG9jYWxlIGFsb25lLgorICogQHBhcmFtIGtleSAgICAgICAgICAgb25lIG9m
IHRoZSBrZXlzIHN1cHBvcnRlZCBieSB0aGlzIHNlcnZpY2UuICBGb3Igbm93LCBvbmx5CisgKiAg
ICAgICAgICAgICAgICAgICAgICAiY2FsZW5kYXIiIGlzIHN1cHBvcnRlZC4KKyAqIEBwYXJhbSBs
b2NhbGUgICAgICAgIHRoZSBsb2NhbGUKKyAqIEBwYXJhbSBjb21tb25seVVzZWQgIGlmIHNldCB0
byB0cnVlIGl0IHdpbGwgcmV0dXJuIG9ubHkgY29tbW9ubHkgdXNlZCB2YWx1ZXMKKyAqICAgICAg
ICAgICAgICAgICAgICAgIHdpdGggdGhlIGdpdmVuIGxvY2FsZSBpbiBwcmVmZXJyZWQgb3JkZXIu
ICBPdGhlcndpc2UsCisgKiAgICAgICAgICAgICAgICAgICAgICBpdCB3aWxsIHJldHVybiBhbGwg
dGhlIGF2YWlsYWJsZSB2YWx1ZXMgZm9yIHRoZSBsb2NhbGUuCisgKiBAcGFyYW0gc3RhdHVzIGVy
cm9yIHN0YXR1cworICogQHJldHVybiBhIHN0cmluZyBlbnVtZXJhdGlvbiBvdmVyIGtleXdvcmQg
dmFsdWVzIGZvciB0aGUgZ2l2ZW4ga2V5IGFuZCB0aGUgbG9jYWxlLgorICogQHN0YWJsZSBJQ1Ug
NC4yCisgKi8KK1VfU1RBQkxFIFVFbnVtZXJhdGlvbiogVV9FWFBPUlQyCit1Y2FsX2dldEtleXdv
cmRWYWx1ZXNGb3JMb2NhbGUoY29uc3QgY2hhcioga2V5LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIGxvY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBVQm9vbCBjb21tb25seVVzZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VUVycm9yQ29kZSogc3RhdHVzKTsKKworCisvKiogV2Vla2RheSB0eXBlcywgYXMgcmV0dXJuZWQg
YnkgdWNhbF9nZXREYXlPZldlZWtUeXBlKCkuCisgKiBAc3RhYmxlIElDVSA0LjQKKyAqLworZW51
bSBVQ2FsZW5kYXJXZWVrZGF5VHlwZSB7CisgIC8qKgorICAgKiBEZXNpZ25hdGVzIGEgZnVsbCB3
ZWVrZGF5IChubyBwYXJ0IG9mIHRoZSBkYXkgaXMgaW5jbHVkZWQgaW4gdGhlIHdlZWtlbmQpLgor
ICAgKiBAc3RhYmxlIElDVSA0LjQgCisgICAqLworICBVQ0FMX1dFRUtEQVksCisgIC8qKgorICAg
KiBEZXNpZ25hdGVzIGEgZnVsbCB3ZWVrZW5kIGRheSAodGhlIGVudGlyZSBkYXkgaXMgaW5jbHVk
ZWQgaW4gdGhlIHdlZWtlbmQpLgorICAgKiBAc3RhYmxlIElDVSA0LjQgCisgICAqLworICBVQ0FM
X1dFRUtFTkQsCisgIC8qKgorICAgKiBEZXNpZ25hdGVzIGEgZGF5IHRoYXQgc3RhcnRzIGFzIGEg
d2Vla2RheSBhbmQgdHJhbnNpdGlvbnMgdG8gdGhlIHdlZWtlbmQuCisgICAqIENhbGwgdWNhbF9n
ZXRXZWVrZW5kVHJhbnNpdGlvbigpIHRvIGdldCB0aGUgdGltZSBvZiB0cmFuc2l0aW9uLgorICAg
KiBAc3RhYmxlIElDVSA0LjQgCisgICAqLworICBVQ0FMX1dFRUtFTkRfT05TRVQsCisgIC8qKgor
ICAgKiBEZXNpZ25hdGVzIGEgZGF5IHRoYXQgc3RhcnRzIGFzIHRoZSB3ZWVrZW5kIGFuZCB0cmFu
c2l0aW9ucyB0byBhIHdlZWtkYXkuCisgICAqIENhbGwgdWNhbF9nZXRXZWVrZW5kVHJhbnNpdGlv
bigpIHRvIGdldCB0aGUgdGltZSBvZiB0cmFuc2l0aW9uLgorICAgKiBAc3RhYmxlIElDVSA0LjQg
CisgICAqLworICBVQ0FMX1dFRUtFTkRfQ0VBU0UKK307CisKKy8qKiBAc3RhYmxlIElDVSA0LjQg
Ki8KK3R5cGVkZWYgZW51bSBVQ2FsZW5kYXJXZWVrZGF5VHlwZSBVQ2FsZW5kYXJXZWVrZGF5VHlw
ZTsKKworLyoqCisgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGRheSBvZiB0aGUgd2VlayBp
cyBhIHdlZWtkYXksIGEKKyAqIHdlZWtlbmQgZGF5LCBvciBhIGRheSB0aGF0IHRyYW5zaXRpb25z
IGZyb20gb25lIHRvIHRoZSBvdGhlciwKKyAqIGluIHRoaXMgY2FsZW5kYXIgc3lzdGVtLiBJZiBh
IHRyYW5zaXRpb24gb2NjdXJzIGF0IG1pZG5pZ2h0LAorICogdGhlbiB0aGUgZGF5cyBiZWZvcmUg
YW5kIGFmdGVyIHRoZSB0cmFuc2l0aW9uIHdpbGwgaGF2ZSB0aGUKKyAqIHR5cGUgVUNBTF9XRUVL
REFZIG9yIFVDQUxfV0VFS0VORC4gSWYgYSB0cmFuc2l0aW9uIG9jY3VycyBhdCBhIHRpbWUKKyAq
IG90aGVyIHRoYW4gbWlkbmlnaHQsIHRoZW4gdGhlIGRheSBvZiB0aGUgdHJhbnNpdGlvbiB3aWxs
IGhhdmUKKyAqIHRoZSB0eXBlIFVDQUxfV0VFS0VORF9PTlNFVCBvciBVQ0FMX1dFRUtFTkRfQ0VB
U0UuIEluIHRoaXMgY2FzZSwgdGhlCisgKiBtZXRob2QgZ2V0V2Vla2VuZFRyYW5zaXRpb24oKSB3
aWxsIHJldHVybiB0aGUgcG9pbnQgb2YKKyAqIHRyYW5zaXRpb24uCisgKiBAcGFyYW0gY2FsIFRo
ZSBVQ2FsZW5kYXIgdG8gcXVlcnkuCisgKiBAcGFyYW0gZGF5T2ZXZWVrIFRoZSBkYXkgb2YgdGhl
IHdlZWsgd2hvc2UgdHlwZSBpcyBkZXNpcmVkIChVQ0FMX1NVTkRBWS4uVUNBTF9TQVRVUkRBWSku
CisgKiBAcGFyYW0gc3RhdHVzIFRoZSBlcnJvciBjb2RlIGZvciB0aGUgb3BlcmF0aW9uLgorICog
QHJldHVybiBUaGUgVUNhbGVuZGFyV2Vla2RheVR5cGUgZm9yIHRoZSBkYXkgb2YgdGhlIHdlZWsu
CisgKiBAc3RhYmxlIElDVSA0LjQKKyAqLworVV9TVEFCTEUgVUNhbGVuZGFyV2Vla2RheVR5cGUg
VV9FWFBPUlQyCit1Y2FsX2dldERheU9mV2Vla1R5cGUoY29uc3QgVUNhbGVuZGFyICpjYWwsIFVD
YWxlbmRhckRheXNPZldlZWsgZGF5T2ZXZWVrLCBVRXJyb3JDb2RlKiBzdGF0dXMpOworCisvKioK
KyAqIFJldHVybnMgdGhlIHRpbWUgZHVyaW5nIHRoZSBkYXkgYXQgd2hpY2ggdGhlIHdlZWtlbmQg
YmVnaW5zIG9yIGVuZHMgaW4KKyAqIHRoaXMgY2FsZW5kYXIgc3lzdGVtLiAgSWYgdWNhbF9nZXRE
YXlPZldlZWtUeXBlKCkgcmVydHVybnMgVUNBTF9XRUVLRU5EX09OU0VUCisgKiBmb3IgdGhlIHNw
ZWNpZmllZCBkYXlPZldlZWssIHJldHVybiB0aGUgdGltZSBhdCB3aGljaCB0aGUgd2Vla2VuZCBi
ZWdpbnMuCisgKiBJZiB1Y2FsX2dldERheU9mV2Vla1R5cGUoKSByZXR1cm5zIFVDQUxfV0VFS0VO
RF9DRUFTRSBmb3IgdGhlIHNwZWNpZmllZCBkYXlPZldlZWssCisgKiByZXR1cm4gdGhlIHRpbWUg
YXQgd2hpY2ggdGhlIHdlZWtlbmQgZW5kcy4gSWYgdWNhbF9nZXREYXlPZldlZWtUeXBlKCkgcmV0
dXJucworICogc29tZSBvdGhlciBVQ2FsZW5kYXJXZWVrZGF5VHlwZSBmb3IgdGhlIHNwZWNpZmll
ZCBkYXlPZldlZWssIGlzIGl0IGFuIGVycm9yIGNvbmRpdGlvbgorICogKFVfSUxMRUdBTF9BUkdV
TUVOVF9FUlJPUikuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gcXVlcnkuCisgKiBA
cGFyYW0gZGF5T2ZXZWVrIFRoZSBkYXkgb2YgdGhlIHdlZWsgZm9yIHdoaWNoIHRoZSB3ZWVrZW5k
IHRyYW5zaXRpb24gdGltZSBpcworICogZGVzaXJlZCAoVUNBTF9TVU5EQVkuLlVDQUxfU0FUVVJE
QVkpLgorICogQHBhcmFtIHN0YXR1cyBUaGUgZXJyb3IgY29kZSBmb3IgdGhlIG9wZXJhdGlvbi4K
KyAqIEByZXR1cm4gVGhlIG1pbGxpc2Vjb25kcyBhZnRlciBtaWRuaWdodCBhdCB3aGljaCB0aGUg
d2Vla2VuZCBiZWdpbnMgb3IgZW5kcy4KKyAqIEBzdGFibGUgSUNVIDQuNAorICovCitVX1NUQUJM
RSBpbnQzMl90IFVfRVhQT1JUMgordWNhbF9nZXRXZWVrZW5kVHJhbnNpdGlvbihjb25zdCBVQ2Fs
ZW5kYXIgKmNhbCwgVUNhbGVuZGFyRGF5c09mV2VlayBkYXlPZldlZWssIFVFcnJvckNvZGUgKnN0
YXR1cyk7CisKKy8qKgorICogUmV0dXJucyBUUlVFIGlmIHRoZSBnaXZlbiBVRGF0ZSBpcyBpbiB0
aGUgd2Vla2VuZCBpbgorICogdGhpcyBjYWxlbmRhciBzeXN0ZW0uCisgKiBAcGFyYW0gY2FsIFRo
ZSBVQ2FsZW5kYXIgdG8gcXVlcnkuCisgKiBAcGFyYW0gZGF0ZSBUaGUgVURhdGUgaW4gcXVlc3Rp
b24uCisgKiBAcGFyYW0gc3RhdHVzIFRoZSBlcnJvciBjb2RlIGZvciB0aGUgb3BlcmF0aW9uLgor
ICogQHJldHVybiBUUlVFIGlmIHRoZSBnaXZlbiBVRGF0ZSBpcyBpbiB0aGUgd2Vla2VuZCBpbgor
ICogdGhpcyBjYWxlbmRhciBzeXN0ZW0sIEZBTFNFIG90aGVyd2lzZS4KKyAqIEBzdGFibGUgSUNV
IDQuNAorICovCitVX1NUQUJMRSBVQm9vbCBVX0VYUE9SVDIKK3VjYWxfaXNXZWVrZW5kKGNvbnN0
IFVDYWxlbmRhciAqY2FsLCBVRGF0ZSBkYXRlLCBVRXJyb3JDb2RlICpzdGF0dXMpOworCisKKyNl
bmRpZiAvKiAjaWYgIVVDT05GSUdfTk9fRk9STUFUVElORyAqLworCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29kZS91ZGF0LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdWRhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ0ODBjN2RhNTE0NzVi
MzkzY2UwZDNjOWI3MjJjYzZkYzRkM2QwYmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdWRhdC5oCkBAIC0wLDAgKzEsOTk3IEBACisvKgorICoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDEwLCBJbnRlcm5h
dGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisgKiBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKyNpZm5kZWYg
VURBVF9ICisjZGVmaW5lIFVEQVRfSAorCisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKwor
I2lmICFVQ09ORklHX05PX0ZPUk1BVFRJTkcKKworI2luY2x1ZGUgInVuaWNvZGUvbG9jYWxwb2lu
dGVyLmgiCisjaW5jbHVkZSAidW5pY29kZS91Y2FsLmgiCisjaW5jbHVkZSAidW5pY29kZS91bnVt
LmgiCisvKioKKyAqIFxmaWxlCisgKiBcYnJpZWYgQyBBUEk6IERhdGVGb3JtYXQKKyAqCisgKiA8
aDI+IERhdGUgRm9ybWF0IEMgQVBJPC9oMj4KKyAqCisgKiBEYXRlIEZvcm1hdCBDIEFQSSAgY29u
c2lzdHMgb2YgZnVuY3Rpb25zIHRoYXQgY29udmVydCBkYXRlcyBhbmQKKyAqIHRpbWVzIGZyb20g
dGhlaXIgaW50ZXJuYWwgcmVwcmVzZW50YXRpb25zIHRvIHRleHR1YWwgZm9ybSBhbmQgYmFjayBh
Z2FpbiBpbiBhCisgKiBsYW5ndWFnZS1pbmRlcGVuZGVudCBtYW5uZXIuIENvbnZlcnRpbmcgZnJv
bSB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gKG1pbGxpc2Vjb25kcworICogc2luY2UgbWlk
bmlnaHQsIEphbnVhcnkgMSwgMTk3MCkgdG8gdGV4dCBpcyBrbm93biBhcyAiZm9ybWF0dGluZywi
IGFuZCBjb252ZXJ0aW5nCisgKiBmcm9tIHRleHQgdG8gbWlsbGlzIGlzIGtub3duIGFzICJwYXJz
aW5nLiIgIFdlIGN1cnJlbnRseSBkZWZpbmUgb25seSBvbmUgY29uY3JldGUKKyAqIHN0cnVjdHVy
ZSBVRGF0ZUZvcm1hdCwgd2hpY2ggY2FuIGhhbmRsZSBwcmV0dHkgbXVjaCBhbGwgbm9ybWFsCisg
KiBkYXRlIGZvcm1hdHRpbmcgYW5kIHBhcnNpbmcgYWN0aW9ucy4KKyAqIDxQPgorICogRGF0ZSBG
b3JtYXQgaGVscHMgeW91IHRvIGZvcm1hdCBhbmQgcGFyc2UgZGF0ZXMgZm9yIGFueSBsb2NhbGUu
IFlvdXIgY29kZSBjYW4KKyAqIGJlIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgb2YgdGhlIGxvY2Fs
ZSBjb252ZW50aW9ucyBmb3IgbW9udGhzLCBkYXlzIG9mIHRoZQorICogd2Vlaywgb3IgZXZlbiB0
aGUgY2FsZW5kYXIgZm9ybWF0OiBsdW5hciB2cy4gc29sYXIuCisgKiA8UD4KKyAqIFRvIGZvcm1h
dCBhIGRhdGUgZm9yIHRoZSBjdXJyZW50IExvY2FsZSB3aXRoIGRlZmF1bHQgdGltZSBhbmQgZGF0
ZSBzdHlsZSwKKyAqIHVzZSBvbmUgb2YgdGhlIHN0YXRpYyBmYWN0b3J5IG1ldGhvZHM6CisgKiA8
cHJlPgorICogXGNvZGUKKyAqICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAq
ICBVQ2hhciAqbXlTdHJpbmc7CisgKiAgaW50MzJfdCBteVN0cmxlbiA9IDA7CisgKiAgVURhdGVG
b3JtYXQqIGRmbXQgPSB1ZGF0X29wZW4oVURBVF9ERUZBVUxULCBVREFUX0RFRkFVTFQsIE5VTEws
IE5VTEwsIC0xLCBOVUxMLCAtMSwgJnN0YXR1cyk7CisgKiAgbXlTdHJsZW4gPSB1ZGF0X2Zvcm1h
dChkZm10LCBteURhdGUsIE5VTEwsIG15U3RybGVuLCBOVUxMLCAmc3RhdHVzKTsKKyAqICBpZiAo
c3RhdHVzPT1VX0JVRkZFUl9PVkVSRkxPV19FUlJPUil7CisgKiAgICAgIHN0YXR1cz1VX1pFUk9f
RVJST1I7CisgKiAgICAgIG15U3RyaW5nPShVQ2hhciopbWFsbG9jKHNpemVvZihVQ2hhcikgKiAo
bXlTdHJsZW4rMSkgKTsKKyAqICAgICAgdWRhdF9mb3JtYXQoZGZtdCwgbXlEYXRlLCBteVN0cmlu
ZywgbXlTdHJsZW4rMSwgTlVMTCwgJnN0YXR1cyk7CisgKiAgfQorICogXGVuZGNvZGUKKyAqIDwv
cHJlPgorICogSWYgeW91IGFyZSBmb3JtYXR0aW5nIG11bHRpcGxlIG51bWJlcnMsIGl0IGlzIG1v
cmUgZWZmaWNpZW50IHRvIGdldCB0aGUKKyAqIGZvcm1hdCBhbmQgdXNlIGl0IG11bHRpcGxlIHRp
bWVzIHNvIHRoYXQgdGhlIHN5c3RlbSBkb2Vzbid0IGhhdmUgdG8gZmV0Y2ggdGhlCisgKiBpbmZv
cm1hdGlvbiBhYm91dCB0aGUgbG9jYWwgbGFuZ3VhZ2UgYW5kIGNvdW50cnkgY29udmVudGlvbnMg
bXVsdGlwbGUgdGltZXMuCisgKiA8cHJlPgorICogXGNvZGUKKyAqICBVRXJyb3JDb2RlIHN0YXR1
cyA9IFVfWkVST19FUlJPUjsKKyAqICBpbnQzMl90IGksIG15U3RybGVuID0gMDsKKyAqICBVQ2hh
ciogbXlTdHJpbmc7CisgKiAgY2hhciBidWZmZXJbMTAyNF07CisgKiAgVURhdGUgbXlEYXRlQXJy
W10gPSB7IDAuMCwgMTAwMDAwMDAwLjAsIDIwMDAwMDAwMDAuMCB9OyAvLyB0ZXN0IHZhbHVlcwor
ICogIFVEYXRlRm9ybWF0KiBkZiA9IHVkYXRfb3BlbihVREFUX0RFRkFVTFQsIFVEQVRfREVGQVVM
VCwgTlVMTCwgTlVMTCwgLTEsIE5VTEwsIDAsICZzdGF0dXMpOworICogIGZvciAoaSA9IDA7IGkg
PCAzOyBpKyspIHsKKyAqICAgICAgbXlTdHJsZW4gPSB1ZGF0X2Zvcm1hdChkZiwgbXlEYXRlQXJy
W2ldLCBOVUxMLCBteVN0cmxlbiwgTlVMTCwgJnN0YXR1cyk7CisgKiAgICAgIGlmKHN0YXR1cyA9
PSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUil7CisgKiAgICAgICAgICBzdGF0dXMgPSBVX1pFUk9f
RVJST1I7CisgKiAgICAgICAgICBteVN0cmluZyA9IChVQ2hhciopbWFsbG9jKHNpemVvZihVQ2hh
cikgKiAobXlTdHJsZW4rMSkgKTsKKyAqICAgICAgICAgIHVkYXRfZm9ybWF0KGRmLCBteURhdGVB
cnJbaV0sIG15U3RyaW5nLCBteVN0cmxlbisxLCBOVUxMLCAmc3RhdHVzKTsKKyAqICAgICAgICAg
IHByaW50ZigiJXNcbiIsIHVfYXVzdHJjcHkoYnVmZmVyLCBteVN0cmluZykgKTsKKyAqICAgICAg
ICAgIGZyZWUobXlTdHJpbmcpOworICogICAgICB9CisgKiAgfQorICogXGVuZGNvZGUKKyAqIDwv
cHJlPgorICogVG8gZ2V0IHNwZWNpZmljIGZpZWxkcyBvZiBhIGRhdGUsIHlvdSBjYW4gdXNlIFVG
aWVsZFBvc2l0aW9uIHRvCisgKiBnZXQgc3BlY2lmaWMgZmllbGRzLgorICogPHByZT4KKyAqIFxj
b2RlCisgKiAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgKiAgVUZpZWxkUG9z
aXRpb24gcG9zOworICogIFVDaGFyICpteVN0cmluZzsKKyAqICBpbnQzMl90IG15U3RybGVuID0g
MDsKKyAqICBjaGFyIGJ1ZmZlclsxMDI0XTsKKyAqCisgKiAgcG9zLmZpZWxkID0gMTsgIC8vIFNh
bWUgYXMgdGhlIERhdGVGb3JtYXQ6OkVGaWVsZCBlbnVtCisgKiAgVURhdGVGb3JtYXQqIGRmbXQg
PSB1ZGF0X29wZW4oVURBVF9ERUZBVUxULCBVREFUX0RFRkFVTFQsIE5VTEwsIC0xLCBOVUxMLCAw
LCAmc3RhdHVzKTsKKyAqICBteVN0cmxlbiA9IHVkYXRfZm9ybWF0KGRmbXQsIG15RGF0ZSwgTlVM
TCwgbXlTdHJsZW4sICZwb3MsICZzdGF0dXMpOworICogIGlmIChzdGF0dXM9PVVfQlVGRkVSX09W
RVJGTE9XX0VSUk9SKXsKKyAqICAgICAgc3RhdHVzPVVfWkVST19FUlJPUjsKKyAqICAgICAgbXlT
dHJpbmc9KFVDaGFyKiltYWxsb2Moc2l6ZW9mKFVDaGFyKSAqIChteVN0cmxlbisxKSApOworICog
ICAgICB1ZGF0X2Zvcm1hdChkZm10LCBteURhdGUsIG15U3RyaW5nLCBteVN0cmxlbisxLCAmcG9z
LCAmc3RhdHVzKTsKKyAqICB9CisgKiAgcHJpbnRmKCJkYXRlIGZvcm1hdDogJXNcbiIsIHVfYXVz
dHJjcHkoYnVmZmVyLCBteVN0cmluZykpOworICogIGJ1ZmZlcltwb3MuZW5kSW5kZXhdID0gMDsg
ICAvLyBOVUxMIHRlcm1pbmF0ZSB0aGUgc3RyaW5nLgorICogIHByaW50ZigiVUZpZWxkUG9zaXRp
b24gcG9zaXRpb24gZXF1YWxzICVzXG4iLCAmYnVmZmVyW3Bvcy5iZWdpbkluZGV4XSk7CisgKiBc
ZW5kY29kZQorICogPC9wcmU+CisgKiBUbyBmb3JtYXQgYSBkYXRlIGZvciBhIGRpZmZlcmVudCBM
b2NhbGUsIHNwZWNpZnkgaXQgaW4gdGhlIGNhbGwgdG8KKyAqIHVkYXRfb3BlbigpCisgKiA8cHJl
PgorICogXGNvZGUKKyAqICAgICAgICBVRGF0ZUZvcm1hdCogZGYgPSB1ZGF0X29wZW4oVURBVF9T
SE9SVCwgVURBVF9TSE9SVCwgImZyX0ZSIiwgTlVMTCwgLTEsIE5VTEwsIDAsICZzdGF0dXMpOwor
ICogXGVuZGNvZGUKKyAqIDwvcHJlPgorICogWW91IGNhbiB1c2UgYSBEYXRlRm9ybWF0IEFQSSB1
ZGF0X3BhcnNlKCkgdG8gcGFyc2UuCisgKiA8cHJlPgorICogXGNvZGUKKyAqICBVRXJyb3JDb2Rl
IHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAqICBpbnQzMl90IHBhcnNlcG9zPTA7CisgKiAgVURh
dGUgbXlEYXRlID0gdWRhdF9wYXJzZShkZiwgbXlTdHJpbmcsIHVfc3RybGVuKG15U3RyaW5nKSwg
JnBhcnNlcG9zLCAmc3RhdHVzKTsKKyAqIFxlbmRjb2RlCisgKiA8L3ByZT4KKyAqICBZb3UgY2Fu
IHBhc3MgaW4gZGlmZmVyZW50IG9wdGlvbnMgZm9yIHRoZSBhcmd1bWVudHMgZm9yIGRhdGUgYW5k
IHRpbWUgc3R5bGUKKyAqICB0byBjb250cm9sIHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdDsgZnJv
bSBTSE9SVCB0byBNRURJVU0gdG8gTE9ORyB0byBGVUxMLgorICogIFRoZSBleGFjdCByZXN1bHQg
ZGVwZW5kcyBvbiB0aGUgbG9jYWxlLCBidXQgZ2VuZXJhbGx5OgorICogIHNlZSBVRGF0ZUZvcm1h
dFN0eWxlIGZvciBtb3JlIGRldGFpbHMKKyAqIDx1bCB0eXBlPXJvdW5kPgorICogICA8bGk+ICAg
VURBVF9TSE9SVCBpcyBjb21wbGV0ZWx5IG51bWVyaWMsIHN1Y2ggYXMgMTIvMTMvNTIgb3IgMzoz
MHBtCisgKiAgIDxsaT4gICBVREFUX01FRElVTSBpcyBsb25nZXIsIHN1Y2ggYXMgSmFuIDEyLCAx
OTUyCisgKiAgIDxsaT4gICBVREFUX0xPTkcgaXMgbG9uZ2VyLCBzdWNoIGFzIEphbnVhcnkgMTIs
IDE5NTIgb3IgMzozMDozMnBtCisgKiAgIDxsaT4gICBVREFUX0ZVTEwgaXMgcHJldHR5IGNvbXBs
ZXRlbHkgc3BlY2lmaWVkLCBzdWNoIGFzCisgKiAgICAgICAgICBUdWVzZGF5LCBBcHJpbCAxMiwg
MTk1MiBBRCBvciAzOjMwOjQycG0gUFNULgorICogPC91bD4KKyAqIFlvdSBjYW4gYWxzbyBzZXQg
dGhlIHRpbWUgem9uZSBvbiB0aGUgZm9ybWF0IGlmIHlvdSB3aXNoLgorICogPFA+CisgKiBZb3Ug
Y2FuIGFsc28gdXNlIGZvcm1zIG9mIHRoZSBwYXJzZSBhbmQgZm9ybWF0IG1ldGhvZHMgd2l0aCBQ
YXJzZSBQb3NpdGlvbiBhbmQKKyAqIFVGaWVsZFBvc2l0aW9uIHRvIGFsbG93IHlvdSB0bworICog
PHVsIHR5cGU9cm91bmQ+CisgKiAgIDxsaT4gICBQcm9ncmVzc2l2ZWx5IHBhcnNlIHRocm91Z2gg
cGllY2VzIG9mIGEgc3RyaW5nLgorICogICA8bGk+ICAgQWxpZ24gYW55IHBhcnRpY3VsYXIgZmll
bGQsIG9yIGZpbmQgb3V0IHdoZXJlIGl0IGlzIGZvciBzZWxlY3Rpb24KKyAqICAgICAgICAgIG9u
IHRoZSBzY3JlZW4uCisgKiA8L3VsPgorICovCisKKy8qKiBBIGRhdGUgZm9ybWF0dGVyLgorICog
IEZvciB1c2FnZSBpbiBDIHByb2dyYW1zLgorICogIEBzdGFibGUgSUNVIDIuNgorICovCit0eXBl
ZGVmIHZvaWQqIFVEYXRlRm9ybWF0OworCisvKiogVGhlIHBvc3NpYmxlIGRhdGUvdGltZSBmb3Jt
YXQgc3R5bGVzIAorICogIEBzdGFibGUgSUNVIDIuNgorICovCit0eXBlZGVmIGVudW0gVURhdGVG
b3JtYXRTdHlsZSB7CisgICAgLyoqIEZ1bGwgc3R5bGUgKi8KKyAgICBVREFUX0ZVTEwsCisgICAg
LyoqIExvbmcgc3R5bGUgKi8KKyAgICBVREFUX0xPTkcsCisgICAgLyoqIE1lZGl1bSBzdHlsZSAq
LworICAgIFVEQVRfTUVESVVNLAorICAgIC8qKiBTaG9ydCBzdHlsZSAqLworICAgIFVEQVRfU0hP
UlQsCisgICAgLyoqIERlZmF1bHQgc3R5bGUgKi8KKyAgICBVREFUX0RFRkFVTFQgPSBVREFUX01F
RElVTSwKKworICAgIC8qKiBCaXRmaWVsZCBmb3IgcmVsYXRpdmUgZGF0ZSAqLworICAgIFVEQVRf
UkVMQVRJVkUgPSAoMSA8PCA3KSwKKyAgICAKKyAgICBVREFUX0ZVTExfUkVMQVRJVkUgPSBVREFU
X0ZVTEwgfCBVREFUX1JFTEFUSVZFLAorICAgICAgICAKKyAgICBVREFUX0xPTkdfUkVMQVRJVkUg
PSBVREFUX0xPTkcgfCBVREFUX1JFTEFUSVZFLAorICAgIAorICAgIFVEQVRfTUVESVVNX1JFTEFU
SVZFID0gVURBVF9NRURJVU0gfCBVREFUX1JFTEFUSVZFLAorICAgIAorICAgIFVEQVRfU0hPUlRf
UkVMQVRJVkUgPSBVREFUX1NIT1JUIHwgVURBVF9SRUxBVElWRSwKKyAgICAKKyAgICAKKyAgICAv
KiogTm8gc3R5bGUgKi8KKyAgICBVREFUX05PTkUgPSAtMSwKKyAgICAvKiogZm9yIGludGVybmFs
IEFQSSB1c2Ugb25seSAqLworICAgIFVEQVRfSUdOT1JFID0gLTIKKworfSBVRGF0ZUZvcm1hdFN0
eWxlOworCisKKy8qKgorICogQHsKKyAqIEJlbG93IGFyZSBhIHNldCBvZiBwcmUtZGVmaW5lZCBz
a2VsZXRvbnMuCisgKgorICogPFA+CisgKiBBIHNrZWxldG9uIAorICogPG9sPgorICogPGxpPgor
ICogICAgb25seSBrZWVwcyB0aGUgZmllbGQgcGF0dGVybiBsZXR0ZXIgYW5kIGlnbm9yZXMgYWxs
IG90aGVyIHBhcnRzIAorICogICAgaW4gYSBwYXR0ZXJuLCBzdWNoIGFzIHNwYWNlLCBwdW5jdHVh
dGlvbnMsIGFuZCBzdHJpbmcgbGl0ZXJhbHMuCisgKiA8L2xpPgorICogPGxpPgorICogICAgaGlk
ZXMgdGhlIG9yZGVyIG9mIGZpZWxkcy4gCisgKiA8L2xpPgorICogPGxpPgorICogICAgbWlnaHQg
aGlkZSBhIGZpZWxkJ3MgcGF0dGVybiBsZXR0ZXIgbGVuZ3RoLgorICoKKyAqICAgIEZvciB0aG9z
ZSBub24tZGlnaXQgY2FsZW5kYXIgZmllbGRzLCB0aGUgcGF0dGVybiBsZXR0ZXIgbGVuZ3RoIGlz
IAorICogICAgaW1wb3J0YW50LCBzdWNoIGFzIE1NTSwgTU1NTSwgYW5kIE1NTU1NOyBFRUUgYW5k
IEVFRUUsIAorICogICAgYW5kIHRoZSBmaWVsZCdzIHBhdHRlcm4gbGV0dGVyIGxlbmd0aCBpcyBo
b25vcmVkLgorICogICAgCisgKiAgICBGb3IgdGhlIGRpZ2l0IGNhbGVuZGFyIGZpZWxkcywgIHN1
Y2ggYXMgTSBvciBNTSwgZCBvciBkZCwgeXkgb3IgeXl5eSwgCisgKiAgICB0aGUgZmllbGQgcGF0
dGVybiBsZW5ndGggaXMgaWdub3JlZCBhbmQgdGhlIGJlc3QgbWF0Y2gsIHdoaWNoIGlzIGRlZmlu
ZWQgCisgKiAgICBpbiBkYXRlIHRpbWUgcGF0dGVybnMsIHdpbGwgYmUgcmV0dXJuZWQgd2l0aG91
dCBob25vciB0aGUgZmllbGQgcGF0dGVybgorICogICAgbGV0dGVyIGxlbmd0aCBpbiBza2VsZXRv
bi4KKyAqIDwvbGk+CisgKiA8L29sPgorICoKKyAqIEBzdGFibGUgSUNVIDQuMAorICovCisKKyNk
ZWZpbmUgVURBVF9NSU5VVEVfU0VDT05EICAgICAgICAgICAgICAibXMiCisjZGVmaW5lIFVEQVRf
SE9VUjI0X01JTlVURSAgICAgICAgICAgICAgIkhtIgorI2RlZmluZSBVREFUX0hPVVIyNF9NSU5V
VEVfU0VDT05EICAgICAgICJIbXMiICAgICAgCisjZGVmaW5lIFVEQVRfSE9VUl9NSU5VVEVfU0VD
T05EICAgICAgICAgImhtcyIKKyNkZWZpbmUgVURBVF9TVEFOREFMT05FX01PTlRIICAgICAgICAg
ICAiTExMTCIKKyNkZWZpbmUgVURBVF9BQkJSX1NUQU5EQUxPTkVfTU9OVEggICAgICAiTExMIgor
I2RlZmluZSBVREFUX1lFQVJfUVVBUlRFUiAgICAgICAgICAgICAgICJ5UVFRIgorI2RlZmluZSBV
REFUX1lFQVJfQUJCUl9RVUFSVEVSICAgICAgICAgICJ5USIKKworLyoqIEB9ICovCisKKy8qKgor
ICogQHsKKyAqIEJlbG93IGFyZSBhIHNldCBvZiBwcmUtZGVmaW5lZCBza2VsZXRvbnMgdGhhdCAK
KyAqIGhhdmUgcHJlLWRlZmluZWQgaW50ZXJ2YWwgcGF0dGVybnMgaW4gcmVzb3VyY2UgZmlsZXMu
CisgKiBVc2VycyBhcmUgZW5jb3VyYWdlZCB0byB1c2UgdGhlbSBpbiBkYXRlIGludGVydmFsIGZv
cm1hdCBmYWN0b3J5IG1ldGhvZHMuCisgKiAKKyAqIEBzdGFibGUgSUNVIDQuMAorICovCisjZGVm
aW5lIFVEQVRfSE9VUl9NSU5VVEUgICAgICAgICAgICAgICAgImhtIgorI2RlZmluZSBVREFUX1lF
QVIgICAgICAgICAgICAgICAgICAgICAgICJ5IgorI2RlZmluZSBVREFUX0RBWSAgICAgICAgICAg
ICAgICAgICAgICAgICJkIgorI2RlZmluZSBVREFUX05VTV9NT05USF9XRUVLREFZX0RBWSAgICAg
ICJNRWQiCisjZGVmaW5lIFVEQVRfWUVBUl9OVU1fTU9OVEggICAgICAgICAgICAgInlNIiAgICAg
ICAgICAgICAgCisjZGVmaW5lIFVEQVRfTlVNX01PTlRIX0RBWSAgICAgICAgICAgICAgIk1kIgor
I2RlZmluZSBVREFUX1lFQVJfTlVNX01PTlRIX1dFRUtEQVlfREFZICJ5TUVkIgorI2RlZmluZSBV
REFUX0FCQlJfTU9OVEhfV0VFS0RBWV9EQVkgICAgICJNTU1FZCIKKyNkZWZpbmUgVURBVF9ZRUFS
X01PTlRIICAgICAgICAgICAgICAgICAieU1NTU0iCisjZGVmaW5lIFVEQVRfWUVBUl9BQkJSX01P
TlRIICAgICAgICAgICAgInlNTU0iCisjZGVmaW5lIFVEQVRfTU9OVEhfREFZICAgICAgICAgICAg
ICAgICAgIk1NTU1kIgorI2RlZmluZSBVREFUX0FCQlJfTU9OVEhfREFZICAgICAgICAgICAgICJN
TU1kIiAKKyNkZWZpbmUgVURBVF9NT05USF9XRUVLREFZX0RBWSAgICAgICAgICAiTU1NTUVFRUVk
IgorI2RlZmluZSBVREFUX1lFQVJfQUJCUl9NT05USF9XRUVLREFZX0RBWSAieU1NTUVkIiAKKyNk
ZWZpbmUgVURBVF9ZRUFSX01PTlRIX1dFRUtEQVlfREFZICAgICAieU1NTU1FRUVFZCIKKyNkZWZp
bmUgVURBVF9ZRUFSX01PTlRIX0RBWSAgICAgICAgICAgICAieU1NTU1kIgorI2RlZmluZSBVREFU
X1lFQVJfQUJCUl9NT05USF9EQVkgICAgICAgICJ5TU1NZCIKKyNkZWZpbmUgVURBVF9ZRUFSX05V
TV9NT05USF9EQVkgICAgICAgICAieU1kIgorI2RlZmluZSBVREFUX05VTV9NT05USCAgICAgICAg
ICAgICAgICAgICJNIgorI2RlZmluZSBVREFUX0FCQlJfTU9OVEggICAgICAgICAgICAgICAgICJN
TU0iCisjZGVmaW5lIFVEQVRfTU9OVEggICAgICAgICAgICAgICAgICAgICAgIk1NTU0iCisjZGVm
aW5lIFVEQVRfSE9VUl9NSU5VVEVfR0VORVJJQ19UWiAgICAgImhtdiIKKyNkZWZpbmUgVURBVF9I
T1VSX01JTlVURV9UWiAgICAgICAgICAgICAiaG16IgorI2RlZmluZSBVREFUX0hPVVIgICAgICAg
ICAgICAgICAgICAgICAgICJoIgorI2RlZmluZSBVREFUX0hPVVJfR0VORVJJQ19UWiAgICAgICAg
ICAgICJodiIKKyNkZWZpbmUgVURBVF9IT1VSX1RaICAgICAgICAgICAgICAgICAgICAiaHoiCisK
Ky8qKiBAfSAqLworCisKKy8qKgorICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24g
c2VsZWN0b3JzIGZvciBmb3JtYXQgZmllbGRzCisgKiBkZWZpbmVkIGJ5IERhdGVGb3JtYXQgYW5k
IFVEYXRlRm9ybWF0LgorICogQHN0YWJsZSBJQ1UgMy4wCisgKi8KK3R5cGVkZWYgZW51bSBVRGF0
ZUZvcm1hdEZpZWxkIHsKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQ
b3NpdGlvbiBzZWxlY3RvciBmb3IgJ0cnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNw
b25kaW5nIHRvIHRoZSBVQ0FMX0VSQSBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAg
ICAgKi8KKyAgICBVREFUX0VSQV9GSUVMRCA9IDAsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBv
c2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ3knIGZpZWxkIGFsaWdubWVu
dCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX1lFQVIgZmllbGQuCisgICAgICog
QHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9ZRUFSX0ZJRUxEID0gMSwKKworICAg
IC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZv
ciAnTScgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxf
TU9OVEggZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9N
T05USF9GSUVMRCA9IDIsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmll
bGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ2QnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3Jy
ZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0RBVEUgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4w
CisgICAgICovCisgICAgVURBVF9EQVRFX0ZJRUxEID0gMywKKworICAgIC8qKgorICAgICAqIEZp
ZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnaycgZmllbGQgYWxp
Z25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfSE9VUl9PRl9EQVkgZmll
bGQuCisgICAgICogVURBVF9IT1VSX09GX0RBWTFfRklFTEQgaXMgdXNlZCBmb3IgdGhlIG9uZS1i
YXNlZCAyNC1ob3VyIGNsb2NrLgorICAgICAqIEZvciBleGFtcGxlLCAyMzo1OSArIDAxOjAwIHJl
c3VsdHMgaW4gMjQ6NTkuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURB
VF9IT1VSX09GX0RBWTFfRklFTEQgPSA0LAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlv
biBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdIJyBmaWVsZCBhbGlnbm1lbnQsCisg
ICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9IT1VSX09GX0RBWSBmaWVsZC4KKyAgICAg
KiBVREFUX0hPVVJfT0ZfREFZMF9GSUVMRCBpcyB1c2VkIGZvciB0aGUgemVyby1iYXNlZCAyNC1o
b3VyIGNsb2NrLgorICAgICAqIEZvciBleGFtcGxlLCAyMzo1OSArIDAxOjAwIHJlc3VsdHMgaW4g
MDA6NTkuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9IT1VSX09G
X0RBWTBfRklFTEQgPSA1LAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZp
ZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdtJyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29y
cmVzcG9uZGluZyB0byB0aGUgVUNBTF9NSU5VVEUgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1Ug
My4wCisgICAgICovCisgICAgVURBVF9NSU5VVEVfRklFTEQgPSA2LAorCisgICAgLyoqCisgICAg
ICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdzJyBmaWVs
ZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9TRUNPTkQgZmll
bGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9TRUNPTkRfRklF
TEQgPSA3LAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRp
b24gc2VsZWN0b3IgZm9yICdTJyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGlu
ZyB0byB0aGUgVUNBTF9NSUxMSVNFQ09ORCBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAK
KyAgICAgKi8KKyAgICBVREFUX0ZSQUNUSU9OQUxfU0VDT05EX0ZJRUxEID0gOCwKKworICAgIC8q
KgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAn
RScgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfREFZ
X09GX1dFRUsgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURB
VF9EQVlfT0ZfV0VFS19GSUVMRCA9IDksCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9u
IGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ0QnIGZpZWxkIGFsaWdubWVudCwKKyAg
ICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0RBWV9PRl9ZRUFSIGZpZWxkLgorICAgICAq
IEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfREFZX09GX1lFQVJfRklFTEQgPSAx
MCwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNl
bGVjdG9yIGZvciAnRicgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8g
dGhlIFVDQUxfREFZX09GX1dFRUtfSU5fTU9OVEggZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1Ug
My4wCisgICAgICovCisgICAgVURBVF9EQVlfT0ZfV0VFS19JTl9NT05USF9GSUVMRCA9IDExLAor
CisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0
b3IgZm9yICd3JyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUg
VUNBTF9XRUVLX09GX1lFQVIgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICov
CisgICAgVURBVF9XRUVLX09GX1lFQVJfRklFTEQgPSAxMiwKKworICAgIC8qKgorICAgICAqIEZp
ZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnVycgZmllbGQgYWxp
Z25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfV0VFS19PRl9NT05USCBm
aWVsZC4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFUX1dFRUtfT0Zf
TU9OVEhfRklFTEQgPSAxMywKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVG
aWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnYScgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNv
cnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfQU1fUE0gZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1Ug
My4wCisgICAgICovCisgICAgVURBVF9BTV9QTV9GSUVMRCA9IDE0LAorCisgICAgLyoqCisgICAg
ICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdoJyBmaWVs
ZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9IT1VSIGZpZWxk
LgorICAgICAqIFVEQVRfSE9VUjFfRklFTEQgaXMgdXNlZCBmb3IgdGhlIG9uZS1iYXNlZCAxMi1o
b3VyIGNsb2NrLgorICAgICAqIEZvciBleGFtcGxlLCAxMTozMCBQTSArIDEgaG91ciByZXN1bHRz
IGluIDEyOjMwIEFNLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRf
SE9VUjFfRklFTEQgPSAxNSwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVG
aWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnSycgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNv
cnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfSE9VUiBmaWVsZC4KKyAgICAgKiBVREFUX0hPVVIwX0ZJ
RUxEIGlzIHVzZWQgZm9yIHRoZSB6ZXJvLWJhc2VkIDEyLWhvdXIgY2xvY2suCisgICAgICogRm9y
IGV4YW1wbGUsIDExOjMwIFBNICsgMSBob3VyIHJlc3VsdHMgaW4gMDA6MzAgQU0uCisgICAgICog
QHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9IT1VSMF9GSUVMRCA9IDE2LAorCisg
ICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3Ig
Zm9yICd6JyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNB
TF9aT05FX09GRlNFVCBhbmQKKyAgICAgKiBVQ0FMX0RTVF9PRkZTRVQgZmllbGRzLgorICAgICAq
IEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfVElNRVpPTkVfRklFTEQgPSAxNywK
KworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVj
dG9yIGZvciAnWScgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhl
IFVDQUxfWUVBUl9XT1kgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisg
ICAgVURBVF9ZRUFSX1dPWV9GSUVMRCA9IDE4LAorCisgICAgLyoqCisgICAgICogRmllbGRQb3Np
dGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdlJyBmaWVsZCBhbGlnbm1lbnQs
CisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9ET1dfTE9DQUwgZmllbGQuCisgICAg
ICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9ET1dfTE9DQUxfRklFTEQgPSAx
OSwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNl
bGVjdG9yIGZvciAndScgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8g
dGhlIFVDQUxfRVhURU5ERURfWUVBUiBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAg
ICAgKi8KKyAgICBVREFUX0VYVEVOREVEX1lFQVJfRklFTEQgPSAyMCwKKworICAgIC8qKgorICAg
ICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnZycgZmll
bGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfSlVMSUFOX0RB
WSBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFUX0pVTElB
Tl9EQVlfRklFTEQgPSAyMSwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVG
aWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnQScgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNv
cnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfTUlMTElTRUNPTkRTX0lOX0RBWSBmaWVsZC4KKyAgICAg
KiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFUX01JTExJU0VDT05EU19JTl9EQVlf
RklFTEQgPSAyMiwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBv
c2l0aW9uIHNlbGVjdG9yIGZvciAnWicgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3Bv
bmRpbmcgdG8gdGhlIFVDQUxfWk9ORV9PRkZTRVQgYW5kCisgICAgICogVUNBTF9EU1RfT0ZGU0VU
IGZpZWxkcy4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFUX1RJTUVa
T05FX1JGQ19GSUVMRCA9IDIzLAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQg
VUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICd2JyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICog
Y29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9aT05FX09GRlNFVCBmaWVsZC4KKyAgICAgKiBAc3Rh
YmxlIElDVSAzLjQKKyAgICAgKi8KKyAgICBVREFUX1RJTUVaT05FX0dFTkVSSUNfRklFTEQgPSAy
NCwKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnYycgZmllbGQg
YWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHtAbGluayAjVUNBTF9ET1df
TE9DQUx9IGZpZWxkLgorICAgICAqIFRoaXMgZGlzcGxheXMgdGhlIHN0YW5kIGFsb25lIGRheSBu
YW1lLCBpZiBhdmFpbGFibGUuCisgICAgICogQHN0YWJsZSBJQ1UgMy40CisgICAgICovCisgICAg
VURBVF9TVEFOREFMT05FX0RBWV9GSUVMRCA9IDI1LAorCisgICAgLyoqCisgICAgICogRmllbGRQ
b3NpdGlvbiBzZWxlY3RvciBmb3IgJ0wnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNw
b25kaW5nIHRvIHRoZSB7QGxpbmsgI1VDQUxfTU9OVEh9IGZpZWxkLgorICAgICAqIFRoaXMgZGlz
cGxheXMgdGhlIHN0YW5kIGFsb25lIG1vbnRoIG5hbWUsIGlmIGF2YWlsYWJsZS4KKyAgICAgKiBA
c3RhYmxlIElDVSAzLjQKKyAgICAgKi8KKyAgICBVREFUX1NUQU5EQUxPTkVfTU9OVEhfRklFTEQg
PSAyNiwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICJRIiBm
aWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byBxdWFydGVycy4gVGhpcyBp
cyBpbXBsZW1lbnRlZAorICAgICAqIHVzaW5nIHRoZSB7QGxpbmsgI1VDQUxfTU9OVEh9IGZpZWxk
LiBUaGlzCisgICAgICogZGlzcGxheXMgdGhlIHF1YXJ0ZXIuCisgICAgICogQHN0YWJsZSBJQ1Ug
My42CisgICAgICovCisgICAgVURBVF9RVUFSVEVSX0ZJRUxEID0gMjcsCisKKyAgICAvKioKKyAg
ICAgKiBGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciB0aGUgInEiIGZpZWxkIGFsaWdubWVudCwK
KyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHN0YW5kLWFsb25lIHF1YXJ0ZXJzLiBUaGlzIGlzCisg
ICAgICogaW1wbGVtZW50ZWQgdXNpbmcgdGhlIHtAbGluayAjVUNBTF9NT05USH0gZmllbGQuCisg
ICAgICogVGhpcyBkaXNwbGF5cyB0aGUgc3RhbmQtYWxvbmUgcXVhcnRlci4KKyAgICAgKiBAc3Rh
YmxlIElDVSAzLjYKKyAgICAgKi8KKyAgICBVREFUX1NUQU5EQUxPTkVfUVVBUlRFUl9GSUVMRCA9
IDI4LAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24g
c2VsZWN0b3IgZm9yICdWJyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0
byB0aGUgVUNBTF9aT05FX09GRlNFVCBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjgKKyAg
ICAgKi8KKyAgICBVREFUX1RJTUVaT05FX1NQRUNJQUxfRklFTEQgPSAyOSwKKworICAgLyoqCisg
ICAgICogTnVtYmVyIG9mIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9y
cyBmb3IKKyAgICAgKiBEYXRlRm9ybWF0IGFuZCBVRGF0ZUZvcm1hdC4KKyAgICAgKiBWYWxpZCBz
ZWxlY3RvcnMgcmFuZ2UgZnJvbSAwIHRvIFVEQVRfRklFTERfQ09VTlQtMS4KKyAgICAgKiBUaGlz
IHZhbHVlIGlzIHN1YmplY3QgdG8gY2hhbmdlIGlmIG5ldyBmaWVsZHMgYXJlIGRlZmluZWQKKyAg
ICAgKiBpbiB0aGUgZnV0dXJlLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAg
IFVEQVRfRklFTERfQ09VTlQgPSAzMAorCit9IFVEYXRlRm9ybWF0RmllbGQ7CisKKworLyoqCisg
KiBNYXBzIGZyb20gYSBVRGF0ZUZvcm1hdEZpZWxkIHRvIHRoZSBjb3JyZXNwb25kaW5nIFVDYWxl
bmRhckRhdGVGaWVsZHMuCisgKiBOb3RlOiBzaW5jZSB0aGUgbWFwcGluZyBpcyBtYW55LXRvLW9u
ZSwgdGhlcmUgaXMgbm8gaW52ZXJzZSBtYXBwaW5nLgorICogQHBhcmFtIGZpZWxkIHRoZSBVRGF0
ZUZvcm1hdEZpZWxkLgorICogQHJldHVybiB0aGUgVUNhbGVuZGFyRGF0ZUZpZWxkLiAgVGhpcyB3
aWxsIGJlIFVDQUxfRklFTERfQ09VTlQgaW4gY2FzZQorICogb2YgZXJyb3IgKGUuZy4sIHRoZSBp
bnB1dCBmaWVsZCBpcyBVREFUX0ZJRUxEX0NPVU5UKS4KKyAqIEBzdGFibGUgSUNVIDQuNAorICov
CitVX1NUQUJMRSBVQ2FsZW5kYXJEYXRlRmllbGRzIFVfRVhQT1JUMgordWRhdF90b0NhbGVuZGFy
RGF0ZUZpZWxkKFVEYXRlRm9ybWF0RmllbGQgZmllbGQpOworCisKKy8qKgorICogT3BlbiBhIG5l
dyBVRGF0ZUZvcm1hdCBmb3IgZm9ybWF0dGluZyBhbmQgcGFyc2luZyBkYXRlcyBhbmQgdGltZXMu
CisgKiBBIFVEYXRlRm9ybWF0IG1heSBiZSB1c2VkIHRvIGZvcm1hdCBkYXRlcyBpbiBjYWxscyB0
byB7QGxpbmsgI3VkYXRfZm9ybWF0IH0sCisgKiBhbmQgdG8gcGFyc2UgZGF0ZXMgaW4gY2FsbHMg
dG8ge0BsaW5rICN1ZGF0X3BhcnNlIH0uCisgKiBAcGFyYW0gdGltZVN0eWxlIFRoZSBzdHlsZSB1
c2VkIHRvIGZvcm1hdCB0aW1lczsgb25lIG9mIFVEQVRfRlVMTCwgVURBVF9MT05HLAorICogVURB
VF9NRURJVU0sIFVEQVRfU0hPUlQsIFVEQVRfREVGQVVMVCwgb3IgVURBVF9OT05FIChyZWxhdGl2
ZSB0aW1lIHN0eWxlcworICogYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkKQorICogQHBhcmFt
IGRhdGVTdHlsZSBUaGUgc3R5bGUgdXNlZCB0byBmb3JtYXQgZGF0ZXM7IG9uZSBvZiBVREFUX0ZV
TEwsIFVEQVRfTE9ORywKKyAqIFVEQVRfTUVESVVNLCBVREFUX1NIT1JULCBVREFUX0RFRkFVTFQs
IFVEQVRfRlVMTF9SRUxBVElWRSwgVURBVF9MT05HX1JFTEFUSVZFLAorICogVURBVF9NRURJVU1f
UkVMQVRJVkUsIFVEQVRfU0hPUlRfUkVMQVRJVkUsIG9yIFVEQVRfTk9ORQorICogQHBhcmFtIGxv
Y2FsZSBUaGUgbG9jYWxlIHNwZWNpZnlpbmcgdGhlIGZvcm1hdHRpbmcgY29udmVudGlvbnMKKyAq
IEBwYXJhbSB0eklEIEEgdGltZXpvbmUgSUQgc3BlY2lmeWluZyB0aGUgdGltZXpvbmUgdG8gdXNl
LiAgSWYgMCwgdXNlCisgKiB0aGUgZGVmYXVsdCB0aW1lem9uZS4KKyAqIEBwYXJhbSB0eklETGVu
Z3RoIFRoZSBsZW5ndGggb2YgdHpJRCwgb3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorICogQHBh
cmFtIHBhdHRlcm4gQSBwYXR0ZXJuIHNwZWNpZnlpbmcgdGhlIGZvcm1hdCB0byB1c2UuCisgKiBA
cGFyYW0gcGF0dGVybkxlbmd0aCBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRl
cm4sIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVy
IHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisgKiBAcmV0dXJuIEEgcG9p
bnRlciB0byBhIFVEYXRlRm9ybWF0IHRvIHVzZSBmb3IgZm9ybWF0dGluZyBkYXRlcyBhbmQgdGlt
ZXMsIG9yIDAgaWYKKyAqIGFuIGVycm9yIG9jY3VycmVkLgorICogQHN0YWJsZSBJQ1UgMi4wCisg
Ki8KK1VfU1RBQkxFIFVEYXRlRm9ybWF0KiBVX0VYUE9SVDIgCit1ZGF0X29wZW4oVURhdGVGb3Jt
YXRTdHlsZSAgdGltZVN0eWxlLAorICAgICAgICAgIFVEYXRlRm9ybWF0U3R5bGUgIGRhdGVTdHls
ZSwKKyAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAqbG9jYWxlLAorICAgICAgICAgIGNvbnN0
IFVDaGFyICAgICAgICp0eklELAorICAgICAgICAgIGludDMyX3QgICAgICAgICAgIHR6SURMZW5n
dGgsCisgICAgICAgICAgY29uc3QgVUNoYXIgICAgICAgKnBhdHRlcm4sCisgICAgICAgICAgaW50
MzJfdCAgICAgICAgICAgcGF0dGVybkxlbmd0aCwKKyAgICAgICAgICBVRXJyb3JDb2RlICAgICAg
ICAqc3RhdHVzKTsKKworCisvKioKKyogQ2xvc2UgYSBVRGF0ZUZvcm1hdC4KKyogT25jZSBjbG9z
ZWQsIGEgVURhdGVGb3JtYXQgbWF5IG5vIGxvbmdlciBiZSB1c2VkLgorKiBAcGFyYW0gZm9ybWF0
IFRoZSBmb3JtYXR0ZXIgdG8gY2xvc2UuCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxF
IHZvaWQgVV9FWFBPUlQyIAordWRhdF9jbG9zZShVRGF0ZUZvcm1hdCogZm9ybWF0KTsKKworI2lm
IFVfU0hPV19DUExVU1BMVVNfQVBJCisKK1VfTkFNRVNQQUNFX0JFR0lOCisKKy8qKgorICogXGNs
YXNzIExvY2FsVURhdGVGb3JtYXRQb2ludGVyCisgKiAiU21hcnQgcG9pbnRlciIgY2xhc3MsIGNs
b3NlcyBhIFVEYXRlRm9ybWF0IHZpYSB1ZGF0X2Nsb3NlKCkuCisgKiBGb3IgbW9zdCBtZXRob2Rz
IHNlZSB0aGUgTG9jYWxQb2ludGVyQmFzZSBiYXNlIGNsYXNzLgorICoKKyAqIEBzZWUgTG9jYWxQ
b2ludGVyQmFzZQorICogQHNlZSBMb2NhbFBvaW50ZXIKKyAqIEBzdGFibGUgSUNVIDQuNAorICov
CitVX0RFRklORV9MT0NBTF9PUEVOX1BPSU5URVIoTG9jYWxVRGF0ZUZvcm1hdFBvaW50ZXIsIFVE
YXRlRm9ybWF0LCB1ZGF0X2Nsb3NlKTsKKworVV9OQU1FU1BBQ0VfRU5ECisKKyNlbmRpZgorCisv
KioKKyAqIE9wZW4gYSBjb3B5IG9mIGEgVURhdGVGb3JtYXQuCisgKiBUaGlzIGZ1bmN0aW9uIHBl
cmZvcm1zIGEgZGVlcCBjb3B5LgorICogQHBhcmFtIGZtdCBUaGUgZm9ybWF0IHRvIGNvcHkKKyAq
IEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkg
ZXJyb3JzLgorICogQHJldHVybiBBIHBvaW50ZXIgdG8gYSBVRGF0ZUZvcm1hdCBpZGVudGljYWwg
dG8gZm10LgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIFVEYXRlRm9ybWF0KiBV
X0VYUE9SVDIgCit1ZGF0X2Nsb25lKGNvbnN0IFVEYXRlRm9ybWF0ICpmbXQsCisgICAgICAgVUVy
cm9yQ29kZSAqc3RhdHVzKTsKKworLyoqCisqIEZvcm1hdCBhIGRhdGUgdXNpbmcgYW4gVURhdGVG
b3JtYXQuCisqIFRoZSBkYXRlIHdpbGwgYmUgZm9ybWF0dGVkIHVzaW5nIHRoZSBjb252ZW50aW9u
cyBzcGVjaWZpZWQgaW4ge0BsaW5rICN1ZGF0X29wZW4gfQorKiBAcGFyYW0gZm9ybWF0IFRoZSBm
b3JtYXR0ZXIgdG8gdXNlCisqIEBwYXJhbSBkYXRlVG9Gb3JtYXQgVGhlIGRhdGUgdG8gZm9ybWF0
CisqIEBwYXJhbSByZXN1bHQgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIGZv
cm1hdHRlZCBudW1iZXIuCisqIEBwYXJhbSByZXN1bHRMZW5ndGggVGhlIG1heGltdW0gc2l6ZSBv
ZiByZXN1bHQuCisqIEBwYXJhbSBwb3NpdGlvbiBBIHBvaW50ZXIgdG8gYSBVRmllbGRQb3NpdGlv
bi4gIE9uIGlucHV0LCBwb3NpdGlvbi0+ZmllbGQKKyogaXMgcmVhZC4gIE9uIG91dHB1dCwgcG9z
aXRpb24tPmJlZ2luSW5kZXggYW5kIHBvc2l0aW9uLT5lbmRJbmRleCBpbmRpY2F0ZQorKiB0aGUg
YmVnaW5uaW5nIGFuZCBlbmRpbmcgaW5kaWNlcyBvZiBmaWVsZCBudW1iZXIgcG9zaXRpb24tPmZp
ZWxkLCBpZiBzdWNoCisqIGEgZmllbGQgZXhpc3RzLiAgVGhpcyBwYXJhbWV0ZXIgbWF5IGJlIE5V
TEwsIGluIHdoaWNoIGNhc2Ugbm8gZmllbGQKKyogcG9zaXRpb24gZGF0YSBpcyByZXR1cm5lZC4K
KyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFu
eSBlcnJvcnMKKyogQHJldHVybiBUaGUgdG90YWwgYnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVh
dGVyIHRoYW4gcmVzdWx0TGVuZ3RoLCB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisqIEBzZWUg
dWRhdF9wYXJzZQorKiBAc2VlIFVGaWVsZFBvc2l0aW9uCisqIEBzdGFibGUgSUNVIDIuMAorKi8K
K1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordWRhdF9mb3JtYXQoICAgIGNvbnN0ICAgIFVE
YXRlRm9ybWF0KiAgICBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBVRGF0ZSAgICAg
ICAgICAgZGF0ZVRvRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIqICAgICAg
ICAgIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICByZXN1
bHRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBVRmllbGRQb3NpdGlvbiogcG9zaXRp
b24sCisgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiAgICAgc3RhdHVzKTsKKwor
LyoqCisqIFBhcnNlIGEgc3RyaW5nIGludG8gYW4gZGF0ZS90aW1lIHVzaW5nIGEgVURhdGVGb3Jt
YXQuCisqIFRoZSBkYXRlIHdpbGwgYmUgcGFyc2VkIHVzaW5nIHRoZSBjb252ZW50aW9ucyBzcGVj
aWZpZWQgaW4ge0BsaW5rICN1ZGF0X29wZW4gfQorKiBAcGFyYW0gZm9ybWF0IFRoZSBmb3JtYXR0
ZXIgdG8gdXNlLgorKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBwYXJzZS4KKyogQHBhcmFtIHRl
eHRMZW5ndGggVGhlIGxlbmd0aCBvZiB0ZXh0LCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisq
IEBwYXJhbSBwYXJzZVBvcyBJZiBub3QgMCwgb24gaW5wdXQgYSBwb2ludGVyIHRvIGFuIGludGVn
ZXIgc3BlY2lmeWluZyB0aGUgb2Zmc2V0IGF0IHdoaWNoCisqIHRvIGJlZ2luIHBhcnNpbmcuICBJ
ZiBub3QgMCwgb24gb3V0cHV0IHRoZSBvZmZzZXQgYXQgd2hpY2ggcGFyc2luZyBlbmRlZC4KKyog
QHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBl
cnJvcnMKKyogQHJldHVybiBUaGUgdmFsdWUgb2YgdGhlIHBhcnNlZCBkYXRlL3RpbWUKKyogQHNl
ZSB1ZGF0X2Zvcm1hdAorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBVRGF0ZSBVX0VY
UE9SVDIgCit1ZGF0X3BhcnNlKCAgICBjb25zdCAgICBVRGF0ZUZvcm1hdCogICAgZm9ybWF0LAor
ICAgICAgICAgICAgY29uc3QgICAgVUNoYXIqICAgICAgICAgIHRleHQsCisgICAgICAgICAgICAg
ICAgICAgIGludDMyX3QgICAgICAgICB0ZXh0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBp
bnQzMl90ICAgICAgICAgKnBhcnNlUG9zLAorICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2Rl
ICAgICAgKnN0YXR1cyk7CisKKy8qKgorKiBQYXJzZSBhIHN0cmluZyBpbnRvIGFuIGRhdGUvdGlt
ZSB1c2luZyBhIFVEYXRlRm9ybWF0LgorKiBUaGUgZGF0ZSB3aWxsIGJlIHBhcnNlZCB1c2luZyB0
aGUgY29udmVudGlvbnMgc3BlY2lmaWVkIGluIHtAbGluayAjdWRhdF9vcGVuIH0KKyogQHBhcmFt
IGZvcm1hdCBUaGUgZm9ybWF0dGVyIHRvIHVzZS4KKyogQHBhcmFtIGNhbGVuZGFyIFRoZSBjYWxl
bmRhciBpbiB3aGljaCB0byBzdG9yZSB0aGUgcGFyc2VkIGRhdGEuCisqIEBwYXJhbSB0ZXh0IFRo
ZSB0ZXh0IHRvIHBhcnNlLgorKiBAcGFyYW0gdGV4dExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRleHQs
IG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyogQHBhcmFtIHBhcnNlUG9zIElmIG5vdCAwLCBv
biBpbnB1dCBhIHBvaW50ZXIgdG8gYW4gaW50ZWdlciBzcGVjaWZ5aW5nIHRoZSBvZmZzZXQgYXQg
d2hpY2gKKyogdG8gYmVnaW4gcGFyc2luZy4gIElmIG5vdCAwLCBvbiBvdXRwdXQgdGhlIG9mZnNl
dCBhdCB3aGljaCBwYXJzaW5nIGVuZGVkLgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBh
biBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAc2VlIHVkYXRfZm9ybWF0Cisq
IEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWRhdF9wYXJz
ZUNhbGVuZGFyKGNvbnN0ICAgIFVEYXRlRm9ybWF0KiAgICBmb3JtYXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVUNhbGVuZGFyKiAgICAgIGNhbGVuZGFyLAorICAgICAgICAgICAgICAg
ICAgIGNvbnN0ICAgIFVDaGFyKiAgICAgICAgICB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludDMyX3QgICAgICAgICB0ZXh0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludDMyX3QgICAgICAgICAqcGFyc2VQb3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVUVycm9yQ29kZSAgICAgICpzdGF0dXMpOworCisvKioKKyogRGV0ZXJtaW5lIGlmIGFu
IFVEYXRlRm9ybWF0IHdpbGwgcGVyZm9ybSBsZW5pZW50IHBhcnNpbmcuCisqIFdpdGggbGVuaWVu
dCBwYXJzaW5nLCB0aGUgcGFyc2VyIG1heSB1c2UgaGV1cmlzdGljcyB0byBpbnRlcnByZXQgaW5w
dXRzIHRoYXQgZG8gbm90CisqIHByZWNpc2VseSBtYXRjaCB0aGUgcGF0dGVybi4gV2l0aCBzdHJp
Y3QgcGFyc2luZywgaW5wdXRzIG11c3QgbWF0Y2ggdGhlIHBhdHRlcm4uCisqIEBwYXJhbSBmbXQg
VGhlIGZvcm1hdHRlciB0byBxdWVyeQorKiBAcmV0dXJuIFRSVUUgaWYgZm10IGlzIHNldCB0byBw
ZXJmb3JtIGxlbmllbnQgcGFyc2luZywgRkFMU0Ugb3RoZXJ3aXNlLgorKiBAc2VlIHVkYXRfc2V0
TGVuaWVudAorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBVQm9vbCBVX0VYUE9SVDIg
Cit1ZGF0X2lzTGVuaWVudChjb25zdCBVRGF0ZUZvcm1hdCogZm10KTsKKworLyoqCisqIFNwZWNp
Znkgd2hldGhlciBhbiBVRGF0ZUZvcm1hdCB3aWxsIHBlcmZvcm0gbGVuaWVudCBwYXJzaW5nLgor
KiBXaXRoIGxlbmllbnQgcGFyc2luZywgdGhlIHBhcnNlciBtYXkgdXNlIGhldXJpc3RpY3MgdG8g
aW50ZXJwcmV0IGlucHV0cyB0aGF0IGRvIG5vdAorKiBwcmVjaXNlbHkgbWF0Y2ggdGhlIHBhdHRl
cm4uIFdpdGggc3RyaWN0IHBhcnNpbmcsIGlucHV0cyBtdXN0IG1hdGNoIHRoZSBwYXR0ZXJuLgor
KiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gc2V0CisqIEBwYXJhbSBpc0xlbmllbnQgVFJV
RSBpZiBmbXQgc2hvdWxkIHBlcmZvcm0gbGVuaWVudCBwYXJzaW5nLCBGQUxTRSBvdGhlcndpc2Uu
CisqIEBzZWUgZGF0X2lzTGVuaWVudAorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2
b2lkIFVfRVhQT1JUMiAKK3VkYXRfc2V0TGVuaWVudCggICAgVURhdGVGb3JtYXQqICAgIGZtdCwK
KyAgICAgICAgICAgICAgICAgICAgVUJvb2wgICAgICAgICAgaXNMZW5pZW50KTsKKworLyoqCisq
IEdldCB0aGUgVUNhbGVuZGFyIGFzc29jaWF0ZWQgd2l0aCBhbiBVRGF0ZUZvcm1hdC4KKyogQSBV
RGF0ZUZvcm1hdCB1c2VzIGEgVUNhbGVuZGFyIHRvIGNvbnZlcnQgYSByYXcgdmFsdWUgdG8sIGZv
ciBleGFtcGxlLAorKiB0aGUgZGF5IG9mIHRoZSB3ZWVrLgorKiBAcGFyYW0gZm10IFRoZSBmb3Jt
YXR0ZXIgdG8gcXVlcnkuCisqIEByZXR1cm4gQSBwb2ludGVyIHRvIHRoZSBVQ2FsZW5kYXIgdXNl
ZCBieSBmbXQuCisqIEBzZWUgdWRhdF9zZXRDYWxlbmRhcgorKiBAc3RhYmxlIElDVSAyLjAKKyov
CitVX1NUQUJMRSBjb25zdCBVQ2FsZW5kYXIqIFVfRVhQT1JUMiAKK3VkYXRfZ2V0Q2FsZW5kYXIo
Y29uc3QgVURhdGVGb3JtYXQqIGZtdCk7CisKKy8qKgorKiBTZXQgdGhlIFVDYWxlbmRhciBhc3Nv
Y2lhdGVkIHdpdGggYW4gVURhdGVGb3JtYXQuCisqIEEgVURhdGVGb3JtYXQgdXNlcyBhIFVDYWxl
bmRhciB0byBjb252ZXJ0IGEgcmF3IHZhbHVlIHRvLCBmb3IgZXhhbXBsZSwKKyogdGhlIGRheSBv
ZiB0aGUgd2Vlay4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHNldC4KKyogQHBhcmFt
IGNhbGVuZGFyVG9TZXQgQSBwb2ludGVyIHRvIGFuIFVDYWxlbmRhciB0byBiZSB1c2VkIGJ5IGZt
dC4KKyogQHNlZSB1ZGF0X3NldENhbGVuZGFyCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RB
QkxFIHZvaWQgVV9FWFBPUlQyIAordWRhdF9zZXRDYWxlbmRhciggICAgICAgICAgICBVRGF0ZUZv
cm1hdCogICAgZm10LAorICAgICAgICAgICAgICAgICAgICBjb25zdCAgIFVDYWxlbmRhciogICAg
ICBjYWxlbmRhclRvU2V0KTsKKworLyoqCisqIEdldCB0aGUgVU51bWJlckZvcm1hdCBhc3NvY2lh
dGVkIHdpdGggYW4gVURhdGVGb3JtYXQuCisqIEEgVURhdGVGb3JtYXQgdXNlcyBhIFVOdW1iZXJG
b3JtYXQgdG8gZm9ybWF0IG51bWJlcnMgd2l0aGluIGEgZGF0ZSwKKyogZm9yIGV4YW1wbGUgdGhl
IGRheSBudW1iZXIuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBxdWVyeS4KKyogQHJl
dHVybiBBIHBvaW50ZXIgdG8gdGhlIFVOdW1iZXJGb3JtYXQgdXNlZCBieSBmbXQgdG8gZm9ybWF0
IG51bWJlcnMuCisqIEBzZWUgdWRhdF9zZXROdW1iZXJGb3JtYXQKKyogQHN0YWJsZSBJQ1UgMi4w
CisqLworVV9TVEFCTEUgY29uc3QgVU51bWJlckZvcm1hdCogVV9FWFBPUlQyIAordWRhdF9nZXRO
dW1iZXJGb3JtYXQoY29uc3QgVURhdGVGb3JtYXQqIGZtdCk7CisKKy8qKgorKiBTZXQgdGhlIFVO
dW1iZXJGb3JtYXQgYXNzb2NpYXRlZCB3aXRoIGFuIFVEYXRlRm9ybWF0LgorKiBBIFVEYXRlRm9y
bWF0IHVzZXMgYSBVTnVtYmVyRm9ybWF0IHRvIGZvcm1hdCBudW1iZXJzIHdpdGhpbiBhIGRhdGUs
CisqIGZvciBleGFtcGxlIHRoZSBkYXkgbnVtYmVyLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0
ZXIgdG8gc2V0LgorKiBAcGFyYW0gbnVtYmVyRm9ybWF0VG9TZXQgQSBwb2ludGVyIHRvIHRoZSBV
TnVtYmVyRm9ybWF0IHRvIGJlIHVzZWQgYnkgZm10IHRvIGZvcm1hdCBudW1iZXJzLgorKiBAc2Vl
IHVkYXRfZ2V0TnVtYmVyRm9ybWF0CisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIHZv
aWQgVV9FWFBPUlQyIAordWRhdF9zZXROdW1iZXJGb3JtYXQoICAgICAgICAgICAgVURhdGVGb3Jt
YXQqICAgIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0ICAgVU51bWJlckZvcm1h
dCogIG51bWJlckZvcm1hdFRvU2V0KTsKKworLyoqCisqIEdldCBhIGxvY2FsZSBmb3Igd2hpY2gg
ZGF0ZS90aW1lIGZvcm1hdHRpbmcgcGF0dGVybnMgYXJlIGF2YWlsYWJsZS4KKyogQSBVRGF0ZUZv
cm1hdCBpbiBhIGxvY2FsZSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIHdpbGwgcGVyZm9ybSB0
aGUgY29ycmVjdAorKiBmb3JtYXR0aW5nIGFuZCBwYXJzaW5nIGZvciB0aGUgbG9jYWxlLgorKiBA
cGFyYW0gbG9jYWxlSW5kZXggVGhlIGluZGV4IG9mIHRoZSBkZXNpcmVkIGxvY2FsZS4KKyogQHJl
dHVybiBBIGxvY2FsZSBmb3Igd2hpY2ggZGF0ZS90aW1lIGZvcm1hdHRpbmcgcGF0dGVybnMgYXJl
IGF2YWlsYWJsZSwgb3IgMCBpZiBub25lLgorKiBAc2VlIHVkYXRfY291bnRBdmFpbGFibGUKKyog
QHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgY29uc3QgY2hhciogVV9FWFBPUlQyIAordWRh
dF9nZXRBdmFpbGFibGUoaW50MzJfdCBsb2NhbGVJbmRleCk7CisKKy8qKgorKiBEZXRlcm1pbmUg
aG93IG1hbnkgbG9jYWxlcyBoYXZlIGRhdGUvdGltZSAgZm9ybWF0dGluZyBwYXR0ZXJucyBhdmFp
bGFibGUuCisqIFRoaXMgZnVuY3Rpb24gaXMgbW9zdCB1c2VmdWwgYXMgZGV0ZXJtaW5pbmcgdGhl
IGxvb3AgZW5kaW5nIGNvbmRpdGlvbiBmb3IKKyogY2FsbHMgdG8ge0BsaW5rICN1ZGF0X2dldEF2
YWlsYWJsZSB9LgorKiBAcmV0dXJuIFRoZSBudW1iZXIgb2YgbG9jYWxlcyBmb3Igd2hpY2ggZGF0
ZS90aW1lIGZvcm1hdHRpbmcgcGF0dGVybnMgYXJlIGF2YWlsYWJsZS4KKyogQHNlZSB1ZGF0X2dl
dEF2YWlsYWJsZQorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQ
T1JUMiAKK3VkYXRfY291bnRBdmFpbGFibGUodm9pZCk7CisKKy8qKgorKiBHZXQgdGhlIHllYXIg
cmVsYXRpdmUgdG8gd2hpY2ggYWxsIDItZGlnaXQgeWVhcnMgYXJlIGludGVycHJldGVkLgorKiBG
b3IgZXhhbXBsZSwgaWYgdGhlIDItZGlnaXQgc3RhcnQgeWVhciBpcyAyMTAwLCB0aGUgeWVhciA5
OSB3aWxsIGJlCisqIGludGVycHJldGVkIGFzIDIxOTkuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1h
dHRlciB0byBxdWVyeS4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29k
ZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUgeWVhciByZWxhdGl2ZSB0byB3
aGljaCBhbGwgMi1kaWdpdCB5ZWFycyBhcmUgaW50ZXJwcmV0ZWQuCisqIEBzZWUgdWRhdF9TZXQy
RGlnaXRZZWFyU3RhcnQKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgVURhdGUgVV9F
WFBPUlQyIAordWRhdF9nZXQyRGlnaXRZZWFyU3RhcnQoICAgIGNvbnN0ICAgVURhdGVGb3JtYXQg
ICAgICpmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2Rl
ICAgICAgKnN0YXR1cyk7CisKKy8qKgorKiBTZXQgdGhlIHllYXIgcmVsYXRpdmUgdG8gd2hpY2gg
YWxsIDItZGlnaXQgeWVhcnMgd2lsbCBiZSBpbnRlcnByZXRlZC4KKyogRm9yIGV4YW1wbGUsIGlm
IHRoZSAyLWRpZ2l0IHN0YXJ0IHllYXIgaXMgMjEwMCwgdGhlIHllYXIgOTkgd2lsbCBiZQorKiBp
bnRlcnByZXRlZCBhcyAyMTk5LgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gc2V0Lgor
KiBAcGFyYW0gZCBUaGUgeWVhciByZWxhdGl2ZSB0byB3aGljaCBhbGwgMi1kaWdpdCB5ZWFycyB3
aWxsIGJlIGludGVycHJldGVkLgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJy
b3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAc2VlIHVkYXRfU2V0MkRpZ2l0WWVhclN0
YXJ0CisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWRh
dF9zZXQyRGlnaXRZZWFyU3RhcnQoICAgIFVEYXRlRm9ybWF0ICAgICAqZm10LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFVEYXRlICAgICAgICAgICBkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVFcnJvckNvZGUgICAgICAqc3RhdHVzKTsKKworLyoqCisqIEV4dHJhY3QgdGhl
IHBhdHRlcm4gZnJvbSBhIFVEYXRlRm9ybWF0LgorKiBUaGUgcGF0dGVybiB3aWxsIGZvbGxvdyB0
aGUgcGF0dGVybiBzeW50YXggcnVsZXMuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBx
dWVyeS4KKyogQHBhcmFtIGxvY2FsaXplZCBUUlVFIGlmIHRoZSBwYXR0ZXJuIHNob3VsZCBiZSBs
b2NhbGl6ZWQsIEZBTFNFIG90aGVyd2lzZS4KKyogQHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8g
YSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgcGF0dGVybi4KKyogQHBhcmFtIHJlc3VsdExlbmd0aCBU
aGUgbWF4aW11bSBzaXplIG9mIHJlc3VsdC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8g
YW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUgdG90YWwg
YnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVyIHRoYW4gcmVzdWx0TGVuZ3RoLCB0aGUgb3V0
cHV0IHdhcyB0cnVuY2F0ZWQuCisqIEBzZWUgdWRhdF9hcHBseVBhdHRlcm4KKyogQHN0YWJsZSBJ
Q1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1ZGF0X3RvUGF0dGVybigg
ICAgY29uc3QgICBVRGF0ZUZvcm1hdCAgICAgKmZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IFVCb29sICAgICAgICAgIGxvY2FsaXplZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFy
ICAgICAgICAgICAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAg
ICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAg
ICAqc3RhdHVzKTsKKworLyoqCisqIFNldCB0aGUgcGF0dGVybiB1c2VkIGJ5IGFuIFVEYXRlRm9y
bWF0LgorKiBUaGUgcGF0dGVybiBzaG91bGQgZm9sbG93IHRoZSBwYXR0ZXJuIHN5bnRheCBydWxl
cy4KKyogQHBhcmFtIGZvcm1hdCBUaGUgZm9ybWF0dGVyIHRvIHNldC4KKyogQHBhcmFtIGxvY2Fs
aXplZCBUUlVFIGlmIHRoZSBwYXR0ZXJuIGlzIGxvY2FsaXplZCwgRkFMU0Ugb3RoZXJ3aXNlLgor
KiBAcGFyYW0gcGF0dGVybiBUaGUgbmV3IHBhdHRlcm4KKyogQHBhcmFtIHBhdHRlcm5MZW5ndGgg
VGhlIGxlbmd0aCBvZiBwYXR0ZXJuLCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisqIEBzZWUg
dWRhdF90b1BhdHRlcm4KKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgdm9pZCBVX0VY
UE9SVDIgCit1ZGF0X2FwcGx5UGF0dGVybiggICAgICAgICAgICBVRGF0ZUZvcm1hdCAgICAgKmZv
cm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCAgICAgICAgICBsb2NhbGl6
ZWQsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ICAgVUNoYXIgICAgICAgICAgICpwYXR0ZXJu
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICBwYXR0ZXJuTGVu
Z3RoKTsKKworLyoqIAorICogVGhlIHBvc3NpYmxlIHR5cGVzIG9mIGRhdGUgZm9ybWF0IHN5bWJv
bHMgCisgKiBAc3RhYmxlIElDVSAyLjYKKyAqLwordHlwZWRlZiBlbnVtIFVEYXRlRm9ybWF0U3lt
Ym9sVHlwZSB7CisgICAgLyoqIFRoZSBlcmEgbmFtZXMsIGZvciBleGFtcGxlIEFEICovCisgICAg
VURBVF9FUkFTLAorICAgIC8qKiBUaGUgbW9udGggbmFtZXMsIGZvciBleGFtcGxlIEZlYnJ1YXJ5
ICovCisgICAgVURBVF9NT05USFMsCisgICAgLyoqIFRoZSBzaG9ydCBtb250aCBuYW1lcywgZm9y
IGV4YW1wbGUgRmViLiAqLworICAgIFVEQVRfU0hPUlRfTU9OVEhTLAorICAgIC8qKiBUaGUgd2Vl
a2RheSBuYW1lcywgZm9yIGV4YW1wbGUgTW9uZGF5ICovCisgICAgVURBVF9XRUVLREFZUywKKyAg
ICAvKiogVGhlIHNob3J0IHdlZWtkYXkgbmFtZXMsIGZvciBleGFtcGxlIE1vbi4gKi8KKyAgICBV
REFUX1NIT1JUX1dFRUtEQVlTLAorICAgIC8qKiBUaGUgQU0vUE0gbmFtZXMsIGZvciBleGFtcGxl
IEFNICovCisgICAgVURBVF9BTV9QTVMsCisgICAgLyoqIFRoZSBsb2NhbGl6ZWQgY2hhcmFjdGVy
cyAqLworICAgIFVEQVRfTE9DQUxJWkVEX0NIQVJTLAorICAgIC8qKiBUaGUgbG9uZyBlcmEgbmFt
ZXMsIGZvciBleGFtcGxlIEFubm8gRG9taW5pICovCisgICAgVURBVF9FUkFfTkFNRVMsCisgICAg
LyoqIFRoZSBuYXJyb3cgbW9udGggbmFtZXMsIGZvciBleGFtcGxlIEYgKi8KKyAgICBVREFUX05B
UlJPV19NT05USFMsCisgICAgLyoqIFRoZSBuYXJyb3cgd2Vla2RheSBuYW1lcywgZm9yIGV4YW1w
bGUgTiAqLworICAgIFVEQVRfTkFSUk9XX1dFRUtEQVlTLAorICAgIC8qKiBTdGFuZGFsb25lIGNv
bnRleHQgdmVyc2lvbnMgb2YgbW9udGhzICovCisgICAgVURBVF9TVEFOREFMT05FX01PTlRIUywK
KyAgICBVREFUX1NUQU5EQUxPTkVfU0hPUlRfTU9OVEhTLAorICAgIFVEQVRfU1RBTkRBTE9ORV9O
QVJST1dfTU9OVEhTLAorICAgIC8qKiBTdGFuZGFsb25lIGNvbnRleHQgdmVyc2lvbnMgb2Ygd2Vl
a2RheXMgKi8KKyAgICBVREFUX1NUQU5EQUxPTkVfV0VFS0RBWVMsCisgICAgVURBVF9TVEFOREFM
T05FX1NIT1JUX1dFRUtEQVlTLAorICAgIFVEQVRfU1RBTkRBTE9ORV9OQVJST1dfV0VFS0RBWVMs
CisgICAgLyoqIFRoZSBxdWFydGVycywgZm9yIGV4YW1wbGUgMXN0IFF1YXJ0ZXIgKi8KKyAgICBV
REFUX1FVQVJURVJTLAorICAgIC8qKiBUaGUgc2hvcnQgcXVhcnRlciBuYW1lcywgZm9yIGV4YW1w
bGUgUTEgKi8KKyAgICBVREFUX1NIT1JUX1FVQVJURVJTLAorICAgIC8qKiBTdGFuZGFsb25lIGNv
bnRleHQgdmVyc2lvbnMgb2YgcXVhcnRlcnMgKi8KKyAgICBVREFUX1NUQU5EQUxPTkVfUVVBUlRF
UlMsCisgICAgVURBVF9TVEFOREFMT05FX1NIT1JUX1FVQVJURVJTCisKK30gVURhdGVGb3JtYXRT
eW1ib2xUeXBlOworCitzdHJ1Y3QgVURhdGVGb3JtYXRTeW1ib2xzOworLyoqIERhdGUgZm9ybWF0
IHN5bWJvbHMuCisgKiAgRm9yIHVzYWdlIGluIEMgcHJvZ3JhbXMuCisgKiAgQHN0YWJsZSBJQ1Ug
Mi42CisgKi8KK3R5cGVkZWYgc3RydWN0IFVEYXRlRm9ybWF0U3ltYm9scyBVRGF0ZUZvcm1hdFN5
bWJvbHM7CisKKy8qKgorKiBHZXQgdGhlIHN5bWJvbHMgYXNzb2NpYXRlZCB3aXRoIGFuIFVEYXRl
Rm9ybWF0LgorKiBUaGUgc3ltYm9scyBhcmUgd2hhdCBhIFVEYXRlRm9ybWF0IHVzZXMgdG8gcmVw
cmVzZW50IGxvY2FsZS1zcGVjaWZpYyBkYXRhLAorKiBmb3IgZXhhbXBsZSBtb250aCBvciBkYXkg
bmFtZXMuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBxdWVyeS4KKyogQHBhcmFtIHR5
cGUgVGhlIHR5cGUgb2Ygc3ltYm9scyB0byBnZXQuICBPbmUgb2YgVURBVF9FUkFTLCBVREFUX01P
TlRIUywgVURBVF9TSE9SVF9NT05USFMsCisqIFVEQVRfV0VFS0RBWVMsIFVEQVRfU0hPUlRfV0VF
S0RBWVMsIFVEQVRfQU1fUE1TLCBvciBVREFUX0xPQ0FMSVpFRF9DSEFSUworKiBAcGFyYW0gc3lt
Ym9sSW5kZXggVGhlIGRlc2lyZWQgc3ltYm9sIG9mIHR5cGUgdHlwZS4KKyogQHBhcmFtIHJlc3Vs
dCBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgcGF0dGVybi4KKyogQHBhcmFt
IHJlc3VsdExlbmd0aCBUaGUgbWF4aW11bSBzaXplIG9mIHJlc3VsdC4KKyogQHBhcmFtIHN0YXR1
cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJl
dHVybiBUaGUgdG90YWwgYnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVyIHRoYW4gcmVzdWx0
TGVuZ3RoLCB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisqIEBzZWUgdWRhdF9jb3VudFN5bWJv
bHMKKyogQHNlZSB1ZGF0X3NldFN5bWJvbHMKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFC
TEUgaW50MzJfdCBVX0VYUE9SVDIgCit1ZGF0X2dldFN5bWJvbHMoY29uc3QgICBVRGF0ZUZvcm1h
dCAgICAgICAgICAgICAqZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgVURhdGVGb3JtYXRT
eW1ib2xUeXBlICAgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAg
ICAgICAgICAgIHN5bWJvbEluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIgICAg
ICAgICAgICAgICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qg
ICAgICAgICAgICAgICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFVF
cnJvckNvZGUgICAgICAgICAgICAgICpzdGF0dXMpOworCisvKioKKyogQ291bnQgdGhlIG51bWJl
ciBvZiBwYXJ0aWN1bGFyIHN5bWJvbHMgZm9yIGFuIFVEYXRlRm9ybWF0LgorKiBUaGlzIGZ1bmN0
aW9uIGlzIG1vc3QgdXNlZnVsIGFzIGZvciBkZXRlbWluaW5nIHRoZSBsb29wIHRlcm1pbmF0aW9u
IGNvbmRpdGlvbgorKiBmb3IgY2FsbHMgdG8ge0BsaW5rICN1ZGF0X2dldFN5bWJvbHMgfS4KKyog
QHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHF1ZXJ5LgorKiBAcGFyYW0gdHlwZSBUaGUgdHlw
ZSBvZiBzeW1ib2xzIHRvIGNvdW50LiAgT25lIG9mIFVEQVRfRVJBUywgVURBVF9NT05USFMsIFVE
QVRfU0hPUlRfTU9OVEhTLAorKiBVREFUX1dFRUtEQVlTLCBVREFUX1NIT1JUX1dFRUtEQVlTLCBV
REFUX0FNX1BNUywgb3IgVURBVF9MT0NBTElaRURfQ0hBUlMKKyogQHJldHVybiBUaGUgbnVtYmVy
IG9mIHN5bWJvbHMgb2YgdHlwZSB0eXBlLgorKiBAc2VlIHVkYXRfZ2V0U3ltYm9scworKiBAc2Vl
IHVkYXRfc2V0U3ltYm9scworKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBpbnQzMl90
IFVfRVhQT1JUMiAKK3VkYXRfY291bnRTeW1ib2xzKCAgICBjb25zdCAgICBVRGF0ZUZvcm1hdCAg
ICAgICAgICAgICAgICAqZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVEYXRlRm9y
bWF0U3ltYm9sVHlwZSAgICB0eXBlKTsKKworLyoqCisqIFNldCB0aGUgc3ltYm9scyBhc3NvY2lh
dGVkIHdpdGggYW4gVURhdGVGb3JtYXQuCisqIFRoZSBzeW1ib2xzIGFyZSB3aGF0IGEgVURhdGVG
b3JtYXQgdXNlcyB0byByZXByZXNlbnQgbG9jYWxlLXNwZWNpZmljIGRhdGEsCisqIGZvciBleGFt
cGxlIG1vbnRoIG9yIGRheSBuYW1lcy4KKyogQHBhcmFtIGZvcm1hdCBUaGUgZm9ybWF0dGVyIHRv
IHNldAorKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBzeW1ib2xzIHRvIHNldC4gIE9uZSBvZiBV
REFUX0VSQVMsIFVEQVRfTU9OVEhTLCBVREFUX1NIT1JUX01PTlRIUywKKyogVURBVF9XRUVLREFZ
UywgVURBVF9TSE9SVF9XRUVLREFZUywgVURBVF9BTV9QTVMsIG9yIFVEQVRfTE9DQUxJWkVEX0NI
QVJTCisqIEBwYXJhbSBzeW1ib2xJbmRleCBUaGUgaW5kZXggb2YgdGhlIHN5bWJvbCB0byBzZXQg
b2YgdHlwZSB0eXBlLgorKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyB2YWx1ZQorKiBAcGFyYW0gdmFs
dWVMZW5ndGggVGhlIGxlbmd0aCBvZiB2YWx1ZSwgb3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkCisq
IEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkg
ZXJyb3JzCisqIEBzZWUgdWRhdF9nZXRTeW1ib2xzCisqIEBzZWUgdWRhdF9jb3VudFN5bWJvbHMK
KyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1ZGF0X3Nl
dFN5bWJvbHMoICAgIFVEYXRlRm9ybWF0ICAgICAgICAgICAgICpmb3JtYXQsCisgICAgICAgICAg
ICAgICAgICAgIFVEYXRlRm9ybWF0U3ltYm9sVHlwZSAgIHR5cGUsCisgICAgICAgICAgICAgICAg
ICAgIGludDMyX3QgICAgICAgICAgICAgICAgIHN5bWJvbEluZGV4LAorICAgICAgICAgICAgICAg
ICAgICBVQ2hhciAgICAgICAgICAgICAgICAgICAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAg
IGludDMyX3QgICAgICAgICAgICAgICAgIHZhbHVlTGVuZ3RoLAorICAgICAgICAgICAgICAgICAg
ICBVRXJyb3JDb2RlICAgICAgICAgICAgICAqc3RhdHVzKTsKKworLyoqCisgKiBHZXQgdGhlIGxv
Y2FsZSBmb3IgdGhpcyBkYXRlIGZvcm1hdCBvYmplY3QuCisgKiBZb3UgY2FuIGNob29zZSBiZXR3
ZWVuIHZhbGlkIGFuZCBhY3R1YWwgbG9jYWxlLgorICogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVy
IHRvIGdldCB0aGUgbG9jYWxlIGZyb20KKyAqIEBwYXJhbSB0eXBlIHR5cGUgb2YgdGhlIGxvY2Fs
ZSB3ZSdyZSBsb29raW5nIGZvciAodmFsaWQgb3IgYWN0dWFsKSAKKyAqIEBwYXJhbSBzdGF0dXMg
ZXJyb3IgY29kZSBmb3IgdGhlIG9wZXJhdGlvbgorICogQHJldHVybiB0aGUgbG9jYWxlIG5hbWUK
KyAqIEBzdGFibGUgSUNVIDIuOAorICovCitVX1NUQUJMRSBjb25zdCBjaGFyKiBVX0VYUE9SVDIK
K3VkYXRfZ2V0TG9jYWxlQnlUeXBlKGNvbnN0IFVEYXRlRm9ybWF0ICpmbXQsCisgICAgICAgICAg
ICAgICAgICAgICBVTG9jRGF0YUxvY2FsZVR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAg
IFVFcnJvckNvZGUqIHN0YXR1cyk7IAorCisvKioKKyogRXh0cmFjdCB0aGUgZGF0ZSBwYXR0ZXJu
IGZyb20gYSBVRGF0ZUZvcm1hdCBzZXQgZm9yIHJlbGF0aXZlIGRhdGUgZm9ybWF0dGluZy4KKyog
VGhlIHBhdHRlcm4gd2lsbCBmb2xsb3cgdGhlIHBhdHRlcm4gc3ludGF4IHJ1bGVzLgorKiBAcGFy
YW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisqIEBwYXJhbSByZXN1bHQgQSBwb2ludGVy
IHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIHBhdHRlcm4uCisqIEBwYXJhbSByZXN1bHRMZW5n
dGggVGhlIG1heGltdW0gc2l6ZSBvZiByZXN1bHQuCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVy
IHRvIGEgVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUgdG90
YWwgYnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVyIHRoYW4gcmVzdWx0TGVuZ3RoLCB0aGUg
b3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisqIEBzZWUgdWRhdF9hcHBseVBhdHRlcm5SZWxhdGl2ZQor
KiBAaW50ZXJuYWwgSUNVIDQuMiB0ZWNobm9sb2d5IHByZXZpZXcKKyovCitVX0lOVEVSTkFMIGlu
dDMyX3QgVV9FWFBPUlQyIAordWRhdF90b1BhdHRlcm5SZWxhdGl2ZURhdGUoY29uc3QgVURhdGVG
b3JtYXQgKmZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyICAgICAgICAgICAg
ICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICBy
ZXN1bHRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAg
ICAqc3RhdHVzKTsKKworLyoqCisqIEV4dHJhY3QgdGhlIHRpbWUgcGF0dGVybiBmcm9tIGEgVURh
dGVGb3JtYXQgc2V0IGZvciByZWxhdGl2ZSBkYXRlIGZvcm1hdHRpbmcuCisqIFRoZSBwYXR0ZXJu
IHdpbGwgZm9sbG93IHRoZSBwYXR0ZXJuIHN5bnRheCBydWxlcy4KKyogQHBhcmFtIGZtdCBUaGUg
Zm9ybWF0dGVyIHRvIHF1ZXJ5LgorKiBAcGFyYW0gcmVzdWx0IEEgcG9pbnRlciB0byBhIGJ1ZmZl
ciB0byByZWNlaXZlIHRoZSBwYXR0ZXJuLgorKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIFRoZSBtYXhp
bXVtIHNpemUgb2YgcmVzdWx0LgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhIFVFcnJv
ckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBz
aXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3YXMg
dHJ1bmNhdGVkLgorKiBAc2VlIHVkYXRfYXBwbHlQYXR0ZXJuUmVsYXRpdmUKKyogQGludGVybmFs
IElDVSA0LjIgdGVjaG5vbG9neSBwcmV2aWV3CisqLworVV9JTlRFUk5BTCBpbnQzMl90IFVfRVhQ
T1JUMiAKK3VkYXRfdG9QYXR0ZXJuUmVsYXRpdmVUaW1lKGNvbnN0IFVEYXRlRm9ybWF0ICpmbXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhciAgICAgICAgICAgICAqcmVzdWx0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgcmVzdWx0TGVuZ3Ro
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICAgKnN0YXR1cyk7
CisKKy8qKgorKiBTZXQgdGhlIGRhdGUgJiB0aW1lIHBhdHRlcm5zIHVzZWQgYnkgYSBVRGF0ZUZv
cm1hdCBzZXQgZm9yIHJlbGF0aXZlIGRhdGUgZm9ybWF0dGluZy4KKyogVGhlIHBhdHRlcm5zIHNo
b3VsZCBmb2xsb3cgdGhlIHBhdHRlcm4gc3ludGF4IHJ1bGVzLgorKiBAcGFyYW0gZm9ybWF0IFRo
ZSBmb3JtYXR0ZXIgdG8gc2V0LgorKiBAcGFyYW0gZGF0ZVBhdHRlcm4gVGhlIG5ldyBkYXRlIHBh
dHRlcm4KKyogQHBhcmFtIGRhdGVQYXR0ZXJuTGVuZ3RoIFRoZSBsZW5ndGggb2YgZGF0ZVBhdHRl
cm4sIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyogQHBhcmFtIHRpbWVQYXR0ZXJuIFRoZSBu
ZXcgdGltZSBwYXR0ZXJuCisqIEBwYXJhbSB0aW1lUGF0dGVybkxlbmd0aCBUaGUgbGVuZ3RoIG9m
IHRpbWVQYXR0ZXJuLCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisqIEBwYXJhbSBzdGF0dXMg
QSBwb2ludGVyIHRvIGEgVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHNlZSB1
ZGF0X3RvUGF0dGVyblJlbGF0aXZlRGF0ZSwgdWRhdF90b1BhdHRlcm5SZWxhdGl2ZVRpbWUKKyog
QGludGVybmFsIElDVSA0LjIgdGVjaG5vbG9neSBwcmV2aWV3CisqLworVV9JTlRFUk5BTCB2b2lk
IFVfRVhQT1JUMiAKK3VkYXRfYXBwbHlQYXR0ZXJuUmVsYXRpdmUoVURhdGVGb3JtYXQgKmZvcm1h
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgKmRhdGVQYXR0ZXJuLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICBkYXRlUGF0dGVybkxlbmd0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgKnRpbWVQYXR0ZXJuLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICB0aW1lUGF0dGVybkxlbmd0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgKnN0YXR1cyk7CisKKworI2VuZGlm
IC8qICNpZiAhVUNPTkZJR19OT19GT1JNQVRUSU5HICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3VtaXNjLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaWN1L3VuaWNvZGUvdW1pc2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kODU0NTFmYzc2N2MwNTgz
NWY2YzE1ZjU2NmYzNTYyZTJkNGFmODM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ljdS91bmljb2RlL3VtaXNjLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioKKyogICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgSW50ZXJuYXRpb25hbCBCdXNp
bmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJl
c2VydmVkLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKgorKiAgIGZpbGUgbmFtZTogIHVtaXNjLmgKKyogICBlbmNv
ZGluZzogICBVUy1BU0NJSQorKiAgIHRhYiBzaXplOiAgIDggKG5vdCB1c2VkKQorKiAgIGluZGVu
dGF0aW9uOjQKKyoKKyogICBjcmVhdGVkIG9uOiAxOTk5b2N0MTUKKyogICBjcmVhdGVkIGJ5OiBN
YXJrdXMgVy4gU2NoZXJlcgorKi8KKworI2lmbmRlZiBVTUlTQ19ICisjZGVmaW5lIFVNSVNDX0gK
KworI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCisKKy8qKgorICogXGZpbGUKKyAqIFxicmll
ZiAgQyBBUEk6bWlzYyBkZWZpbml0aW9ucyAKKyAqCisgKiAgVGhpcyBmaWxlIGNvbnRhaW5zIG1p
c2NlbGxhbmVvdXMgZGVmaW5pdGlvbnMgZm9yIHRoZSBDIEFQSXMuIAorICovCisKK1VfQ0RFQ0xf
QkVHSU4KKworLyoqIEEgc3RydWN0IHJlcHJlc2VudGluZyBhIHJhbmdlIG9mIHRleHQgY29udGFp
bmluZyBhIHNwZWNpZmljIGZpZWxkIAorICogIEBzdGFibGUgSUNVIDIuMAorICovCit0eXBlZGVm
IHN0cnVjdCBVRmllbGRQb3NpdGlvbiB7CisgIC8qKgorICAgKiBUaGUgZmllbGQgCisgICAqIEBz
dGFibGUgSUNVIDIuMAorICAgKi8KKyAgaW50MzJfdCBmaWVsZDsKKyAgLyoqCisgICAqIFRoZSBz
dGFydCBvZiB0aGUgdGV4dCByYW5nZSBjb250YWluaW5nIGZpZWxkIAorICAgKiBAc3RhYmxlIElD
VSAyLjAKKyAgICovCisgIGludDMyX3QgYmVnaW5JbmRleDsKKyAgLyoqIAorICAgKiBUaGUgbGlt
aXQgb2YgdGhlIHRleHQgcmFuZ2UgY29udGFpbmluZyBmaWVsZCAKKyAgICogQHN0YWJsZSBJQ1Ug
Mi4wCisgICAqLworICBpbnQzMl90IGVuZEluZGV4OworfSBVRmllbGRQb3NpdGlvbjsKKworI2lm
ICFVQ09ORklHX05PX1NFUlZJQ0UKKy8qKgorICogT3BhcXVlIHR5cGUgcmV0dXJuZWQgYnkgcmVn
aXN0ZXJJbnN0YW5jZSwgcmVnaXN0ZXJGYWN0b3J5IGFuZCB1bnJlZ2lzdGVyIGZvciBzZXJ2aWNl
IHJlZ2lzdHJhdGlvbi4KKyAqIEBzdGFibGUgSUNVIDIuNgorICovCit0eXBlZGVmIGNvbnN0IHZv
aWQqIFVSZWdpc3RyeUtleTsKKyNlbmRpZgorCitVX0NERUNMX0VORAorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29kZS91bnVtLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdW51bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjExMDJiYWI1OGIz
ZDFiYjJlMmIyMDgyY2I1NTg5YzVkZGVmZThjYzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdW51bS5oCkBAIC0wLDAgKzEsOTk5IEBACisvKgor
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMCwgSW50ZXJu
YXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorKiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorKiBNb2RpZmljYXRpb24gSGlzdG9yeToKKyoKKyogICBEYXRlICAg
ICAgICBOYW1lICAgICAgICBEZXNjcmlwdGlvbgorKiAgIDA2LzI0Lzk5ICAgIGhlbGVuYSAgICAg
IEludGVncmF0ZWQgQWxhbidzIE5GIGVuaGFuY2VtZW50cyBhbmQgSmF2YTIgYnVnIGZpeGVzCisq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqCisqLworCisjaWZuZGVmIF9VTlVNCisjZGVmaW5lIF9VTlVN
CisKKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorCisjaWYgIVVDT05GSUdfTk9fRk9STUFU
VElORworCisjaW5jbHVkZSAidW5pY29kZS9sb2NhbHBvaW50ZXIuaCIKKyNpbmNsdWRlICJ1bmlj
b2RlL3Vsb2MuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VtaXNjLmgiCisjaW5jbHVkZSAidW5pY29k
ZS9wYXJzZWVyci5oIgorLyoqCisgKiBcZmlsZQorICogXGJyaWVmIEMgQVBJOiBOdW1iZXJGb3Jt
YXQKKyAqCisgKiA8aDI+IE51bWJlciBGb3JtYXQgQyBBUEkgPC9oMj4KKyAqCisgKiBOdW1iZXIg
Rm9ybWF0IEMgQVBJICBQcm92aWRlcyBmdW5jdGlvbnMgZm9yCisgKiBmb3JtYXR0aW5nIGFuZCBw
YXJzaW5nIGEgbnVtYmVyLiAgQWxzbyBwcm92aWRlcyBtZXRob2RzIGZvcgorICogZGV0ZXJtaW5p
bmcgd2hpY2ggbG9jYWxlcyBoYXZlIG51bWJlciBmb3JtYXRzLCBhbmQgd2hhdCB0aGVpciBuYW1l
cworICogYXJlLgorICogPFA+CisgKiBVTnVtYmVyRm9ybWF0IGhlbHBzIHlvdSB0byBmb3JtYXQg
YW5kIHBhcnNlIG51bWJlcnMgZm9yIGFueSBsb2NhbGUuCisgKiBZb3VyIGNvZGUgY2FuIGJlIGNv
bXBsZXRlbHkgaW5kZXBlbmRlbnQgb2YgdGhlIGxvY2FsZSBjb252ZW50aW9ucworICogZm9yIGRl
Y2ltYWwgcG9pbnRzLCB0aG91c2FuZHMtc2VwYXJhdG9ycywgb3IgZXZlbiB0aGUgcGFydGljdWxh
cgorICogZGVjaW1hbCBkaWdpdHMgdXNlZCwgb3Igd2hldGhlciB0aGUgbnVtYmVyIGZvcm1hdCBp
cyBldmVuIGRlY2ltYWwuCisgKiBUaGVyZSBhcmUgZGlmZmVyZW50IG51bWJlciBmb3JtYXQgc3R5
bGVzIGxpa2UgZGVjaW1hbCwgY3VycmVuY3ksCisgKiBwZXJjZW50IGFuZCBzcGVsbG91dC4KKyAq
IDxQPgorICogVG8gZm9ybWF0IGEgbnVtYmVyIGZvciB0aGUgY3VycmVudCBMb2NhbGUsIHVzZSBv
bmUgb2YgdGhlIHN0YXRpYworICogZmFjdG9yeSBtZXRob2RzOgorICogPHByZT4KKyAqIFxjb2Rl
CisgKiAgICBVQ2hhciBteVN0cmluZ1syMF07CisgKiAgICBkb3VibGUgbXlOdW1iZXIgPSA3LjA7
CisgKiAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAqICAgIFVOdW1iZXJG
b3JtYXQqIG5mID0gdW51bV9vcGVuKFVOVU1fREVGQVVMVCwgTlVMTCwgLTEsIE5VTEwsIE5VTEws
ICZzdGF0dXMpOworICogICAgdW51bV9mb3JtYXREb3VibGUobmYsIG15TnVtYmVyLCBteVN0cmlu
ZywgMjAsIE5VTEwsICZzdGF0dXMpOworICogICAgcHJpbnRmKCIgRXhhbXBsZSAxOiAlc1xuIiwg
YXVzdHJkdXAobXlTdHJpbmcpICk7IC8vYXVzdHJkdXAoIGEgZnVuY3Rpb24gdXNlZCB0byBjb252
ZXJ0IFVDaGFyKiB0byBjaGFyKikKKyAqIFxlbmRjb2RlCisgKiA8L3ByZT4KKyAqIElmIHlvdSBh
cmUgZm9ybWF0dGluZyBtdWx0aXBsZSBudW1iZXJzLCBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBn
ZXQKKyAqIHRoZSBmb3JtYXQgYW5kIHVzZSBpdCBtdWx0aXBsZSB0aW1lcyBzbyB0aGF0IHRoZSBz
eXN0ZW0gZG9lc24ndAorICogaGF2ZSB0byBmZXRjaCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhl
IGxvY2FsIGxhbmd1YWdlIGFuZCBjb3VudHJ5CisgKiBjb252ZW50aW9ucyBtdWx0aXBsZSB0aW1l
cy4KKyAqIDxwcmU+CisgKiBcY29kZQorICogdWludDMyX3QgaSwgcmVzdWx0bGVuZ3RoLCByZXNs
ZW5uZWVkZWQ7CisgKiBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAqIFVGaWVs
ZFBvc2l0aW9uIHBvczsKKyAqIHVpbnQzMl90IGFbXSA9IHsgMTIzLCAzMzMzLCAtMTIzNDU2NyB9
OworICogY29uc3QgdWludDMyX3QgYV9sZW4gPSBzaXplb2YoYSkgLyBzaXplb2YoYVswXSk7Cisg
KiBVTnVtYmVyRm9ybWF0KiBuZjsKKyAqIFVDaGFyKiByZXN1bHQgPSBOVUxMOworICoKKyAqIG5m
ID0gdW51bV9vcGVuKFVOVU1fREVGQVVMVCwgTlVMTCwgLTEsIE5VTEwsIE5VTEwsICZzdGF0dXMp
OworICogZm9yIChpID0gMDsgaSA8IGFfbGVuOyBpKyspIHsKKyAqICAgIHJlc3VsdGxlbmd0aD0w
OworICogICAgcmVzbGVubmVlZGVkPXVudW1fZm9ybWF0KG5mLCBhW2ldLCBOVUxMLCByZXN1bHRs
ZW5ndGgsICZwb3MsICZzdGF0dXMpOworICogICAgcmVzdWx0ID0gTlVMTDsKKyAqICAgIGlmKHN0
YXR1cz09VV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpeworICogICAgICAgc3RhdHVzPVVfWkVST19F
UlJPUjsKKyAqICAgICAgIHJlc3VsdGxlbmd0aD1yZXNsZW5uZWVkZWQrMTsKKyAqICAgICAgIHJl
c3VsdD0oVUNoYXIqKW1hbGxvYyhzaXplb2YoVUNoYXIpICogcmVzdWx0bGVuZ3RoKTsKKyAqICAg
ICAgIHVudW1fZm9ybWF0KG5mLCBhW2ldLCByZXN1bHQsIHJlc3VsdGxlbmd0aCwgJnBvcywgJnN0
YXR1cyk7CisgKiAgICB9CisgKiAgICBwcmludGYoICIgRXhhbXBsZSAyOiAlc1xuIiwgYXVzdHJk
dXAocmVzdWx0KSk7CisgKiAgICBmcmVlKHJlc3VsdCk7CisgKiB9CisgKiBcZW5kY29kZQorICog
PC9wcmU+CisgKiBUbyBmb3JtYXQgYSBudW1iZXIgZm9yIGEgZGlmZmVyZW50IExvY2FsZSwgc3Bl
Y2lmeSBpdCBpbiB0aGUKKyAqIGNhbGwgdG8gdW51bV9vcGVuKCkuCisgKiA8cHJlPgorICogXGNv
ZGUKKyAqICAgICBVTnVtYmVyRm9ybWF0KiBuZiA9IHVudW1fb3BlbihVTlVNX0RFRkFVTFQsIE5V
TEwsIC0xLCAiZnJfRlIiLCBOVUxMLCAmc3VjY2VzcykKKyAqIFxlbmRjb2RlCisgKiA8L3ByZT4K
KyAqIFlvdSBjYW4gdXNlIGEgTnVtYmVyRm9ybWF0IEFQSSB1bnVtX3BhcnNlKCkgdG8gcGFyc2Uu
CisgKiA8cHJlPgorICogXGNvZGUKKyAqICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VS
Uk9SOworICogICAgaW50MzJfdCBwb3M9MDsKKyAqICAgIGludDMyX3QgbnVtOworICogICAgbnVt
ID0gdW51bV9wYXJzZShuZiwgc3RyLCB1X3N0cmxlbihzdHIpLCAmcG9zLCAmc3RhdHVzKTsKKyAq
IFxlbmRjb2RlCisgKiA8L3ByZT4KKyAqIFVzZSBVTlVNX0RFQ0lNQUwgdG8gZ2V0IHRoZSBub3Jt
YWwgbnVtYmVyIGZvcm1hdCBmb3IgdGhhdCBjb3VudHJ5LgorICogVGhlcmUgYXJlIG90aGVyIHN0
YXRpYyBvcHRpb25zIGF2YWlsYWJsZS4gIFVzZSBVTlVNX0NVUlJFTkNZCisgKiB0byBnZXQgdGhl
IGN1cnJlbmN5IG51bWJlciBmb3JtYXQgZm9yIHRoYXQgY291bnRyeS4gIFVzZSBVTlVNX1BFUkNF
TlQKKyAqIHRvIGdldCBhIGZvcm1hdCBmb3IgZGlzcGxheWluZyBwZXJjZW50YWdlcy4gV2l0aCB0
aGlzIGZvcm1hdCwgYQorICogZnJhY3Rpb24gZnJvbSAwLjUzIGlzIGRpc3BsYXllZCBhcyA1MyUu
CisgKiA8UD4KKyAqIFVzZSBhIHBhdHRlcm4gdG8gY3JlYXRlIGVpdGhlciBhIERlY2ltYWxGb3Jt
YXQgb3IgYSBSdWxlQmFzZWROdW1iZXJGb3JtYXQKKyAqIGZvcm1hdHRlci4gIFRoZSBwYXR0ZXJu
IG11c3QgY29uZm9ybSB0byB0aGUgc3ludGF4IGRlZmluZWQgZm9yIHRob3NlCisgKiBmb3JtYXR0
ZXJzLgorICogPFA+CisgKiBZb3UgY2FuIGFsc28gY29udHJvbCB0aGUgZGlzcGxheSBvZiBudW1i
ZXJzIHdpdGggc3VjaCBmdW5jdGlvbiBhcworICogdW51bV9nZXRBdHRyaWJ1ZXMoKSBhbmQgdW51
bV9zZXRBdHJpYnV0ZXMoKSwgd2hpY2ggbGV0IHlvdSBzZXQgdGhlCisgKiBtaW1pbnVtIGZyYWN0
aW9uIGRpZ2l0cywgZ3JvdXBpbmcsIGV0Yy4KKyAqIEBzZWUgVU51bWJlckZvcm1hdEF0dHJpYnV0
ZXMgZm9yIG1vcmUgZGV0YWlscworICogPFA+CisgKiBZb3UgY2FuIGFsc28gdXNlIGZvcm1zIG9m
IHRoZSBwYXJzZSBhbmQgZm9ybWF0IG1ldGhvZHMgd2l0aAorICogUGFyc2VQb3NpdGlvbiBhbmQg
VUZpZWxkUG9zaXRpb24gdG8gYWxsb3cgeW91IHRvOgorICogPHVsIHR5cGU9cm91bmQ+CisgKiAg
IDxsaT4oYSkgcHJvZ3Jlc3NpdmVseSBwYXJzZSB0aHJvdWdoIHBpZWNlcyBvZiBhIHN0cmluZy4K
KyAqICAgPGxpPihiKSBhbGlnbiB0aGUgZGVjaW1hbCBwb2ludCBhbmQgb3RoZXIgYXJlYXMuCisg
KiA8L3VsPgorICogPHA+CisgKiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNoYW5nZSBvciBzZXQg
dGhlIHN5bWJvbHMgdXNlZCBmb3IgYSBwYXJ0aWN1bGFyCisgKiBsb2NhbGUgbGlrZSB0aGUgY3Vy
cmVuY3kgc3ltYm9sLCB0aGUgZ3JvdXBpbmcgc2VwZXJhdG9yICwgbW9uZXRhcnkgc2VwZXJhdG9y
CisgKiBldGMgYnkgbWFraW5nIHVzZSBvZiBmdW5jdGlvbnMgdW51bV9zZXRTeW1ib2xzKCkgYW5k
IHVudW1fZ2V0U3ltYm9scygpLgorICovCisKKy8qKiBBIG51bWJlciBmb3JtYXR0ZXIuCisgKiAg
Rm9yIHVzYWdlIGluIEMgcHJvZ3JhbXMuCisgKiAgQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3R5cGVk
ZWYgdm9pZCogVU51bWJlckZvcm1hdDsKKworLyoqIFRoZSBwb3NzaWJsZSBudW1iZXIgZm9ybWF0
IHN0eWxlcy4gCisgKiAgQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3R5cGVkZWYgZW51bSBVTnVtYmVy
Rm9ybWF0U3R5bGUgeworICAgIC8qKgorICAgICAqIERlY2ltYWwgZm9ybWF0IGRlZmluZWQgYnkg
cGF0dGVybiAKKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVTlVNX1BBVFRF
Uk5fREVDSU1BTD0wLAorICAgIC8qKiBEZWNpbWFsIGZvcm1hdCAqLworICAgIFVOVU1fREVDSU1B
TD0xLAorICAgIC8qKiBDdXJyZW5jeSBmb3JtYXQgKi8KKyAgICBVTlVNX0NVUlJFTkNZLAorICAg
IC8qKiBQZXJjZW50IGZvcm1hdCAqLworICAgIFVOVU1fUEVSQ0VOVCwKKyAgICAvKiogU2NpZW50
aWZpYyBmb3JtYXQgKi8KKyAgICBVTlVNX1NDSUVOVElGSUMsCisgICAgLyoqIFNwZWxsb3V0IHJ1
bGUtYmFzZWQgZm9ybWF0ICovCisgICAgVU5VTV9TUEVMTE9VVCwKKyAgICAvKiogCisgICAgICog
T3JkaW5hbCBydWxlLWJhc2VkIGZvcm1hdCAKKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAg
Ki8KKyAgICBVTlVNX09SRElOQUwsCisgICAgLyoqIAorICAgICAqIER1cmF0aW9uIHJ1bGUtYmFz
ZWQgZm9ybWF0IAorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVOVU1fRFVS
QVRJT04sCisgICAgLyoqIAorICAgICAqIE51bWJlcmluZyBzeXN0ZW0gcnVsZS1iYXNlZCBmb3Jt
YXQgCisgICAgICogQHN0YWJsZSBJQ1UgNC4yCisgICAgICovCisgICAgVU5VTV9OVU1CRVJJTkdf
U1lTVEVNLAorICAgIC8qKiAKKyAgICAgKiBSdWxlLWJhc2VkIGZvcm1hdCBkZWZpbmVkIGJ5IHBh
dHRlcm4gCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVU5VTV9QQVRURVJO
X1JVTEVCQVNFRCwKKyAgICAvKiogRGVmYXVsdCBmb3JtYXQgKi8KKyAgICBVTlVNX0RFRkFVTFQg
PSBVTlVNX0RFQ0lNQUwsCisgICAgLyoqIChBbGlhcyBmb3IgVU5VTV9QQVRURVJOX0RFQ0lNQUwp
ICovCisgICAgVU5VTV9JR05PUkUgPSBVTlVNX1BBVFRFUk5fREVDSU1BTAorfSBVTnVtYmVyRm9y
bWF0U3R5bGU7CisKKy8qKiBUaGUgcG9zc2libGUgbnVtYmVyIGZvcm1hdCByb3VuZGluZyBtb2Rl
cy4gCisgKiAgQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3R5cGVkZWYgZW51bSBVTnVtYmVyRm9ybWF0
Um91bmRpbmdNb2RlIHsKKyAgICBVTlVNX1JPVU5EX0NFSUxJTkcsCisgICAgVU5VTV9ST1VORF9G
TE9PUiwKKyAgICBVTlVNX1JPVU5EX0RPV04sCisgICAgVU5VTV9ST1VORF9VUCwKKyAgICAvKioK
KyAgICAgKiBIYWxmLWV2ZW4gcm91bmRpbmcsIG1pc3NwZWxsZWQgbmFtZQorICAgICAqIEBkZXBy
ZWNhdGVkLCBJQ1UgMy44CisgICAgICovCisgICAgVU5VTV9GT1VORF9IQUxGRVZFTiwKKyAgICBV
TlVNX1JPVU5EX0hBTEZET1dOLAorICAgIFVOVU1fUk9VTkRfSEFMRlVQLAorICAgIC8qKgorICAg
ICAqIEhhbGYtZXZlbiByb3VuZGluZworICAgICAqIEBzdGFibGUsIElDVSAzLjgKKyAgICAgKi8K
KyAgICBVTlVNX1JPVU5EX0hBTEZFVkVOID0gVU5VTV9GT1VORF9IQUxGRVZFTgorfSBVTnVtYmVy
Rm9ybWF0Um91bmRpbmdNb2RlOworCisvKiogVGhlIHBvc3NpYmxlIG51bWJlciBmb3JtYXQgcGFk
IHBvc2l0aW9ucy4gCisgKiAgQHN0YWJsZSBJQ1UgMi4wCisgKi8KK3R5cGVkZWYgZW51bSBVTnVt
YmVyRm9ybWF0UGFkUG9zaXRpb24geworICAgIFVOVU1fUEFEX0JFRk9SRV9QUkVGSVgsCisgICAg
VU5VTV9QQURfQUZURVJfUFJFRklYLAorICAgIFVOVU1fUEFEX0JFRk9SRV9TVUZGSVgsCisgICAg
VU5VTV9QQURfQUZURVJfU1VGRklYCit9IFVOdW1iZXJGb3JtYXRQYWRQb3NpdGlvbjsKKworLyoq
CisgKiBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBVTnVtYmVyRm9ybWF0IGZvciBmb3JtYXR0aW5n
IGFuZCBwYXJzaW5nCisgKiBudW1iZXJzLiAgQSBVTnVtYmVyRm9ybWF0IG1heSBiZSB1c2VkIHRv
IGZvcm1hdCBudW1iZXJzIGJ5IGNhbGxpbmcKKyAqIHtAbGluayAjdW51bV9mb3JtYXQgfSwgYW5k
IHRvIHBhcnNlIG51bWJlcnMgYnkgY2FsbGluZyB7QGxpbmsgI3VudW1fcGFyc2UgfS4KKyAqIFRo
ZSBjYWxsZXIgbXVzdCBjYWxsIHtAbGluayAjdW51bV9jbG9zZSB9IHdoZW4gZG9uZSB0byByZWxl
YXNlIHJlc291cmNlcworICogdXNlZCBieSB0aGlzIG9iamVjdC4KKyAqIEBwYXJhbSBzdHlsZSBU
aGUgdHlwZSBvZiBudW1iZXIgZm9ybWF0IHRvIG9wZW46IG9uZSBvZgorICogVU5VTV9ERUNJTUFM
LCBVTlVNX0NVUlJFTkNZLCBVTlVNX1BFUkNFTlQsIFVOVU1fU0NJRU5USUZJQywgVU5VTV9TUEVM
TE9VVCwKKyAqIFVOVU1fUEFUVEVSTl9ERUNJTUFMLCBVTlVNX1BBVFRFUk5fUlVMRUJBU0VELCBv
ciBVTlVNX0RFRkFVTFQuCisgKiBJZiBVTlVNX1BBVFRFUk5fREVDSU1BTCBvciBVTlVNX1BBVFRF
Uk5fUlVMRUJBU0VEIGlzIHBhc3NlZCB0aGVuIHRoZQorICogbnVtYmVyIGZvcm1hdCBpcyBvcGVu
ZWQgdXNpbmcgdGhlIGdpdmVuIHBhdHRlcm4sIHdoaWNoIG11c3QgY29uZm9ybQorICogdG8gdGhl
IHN5bnRheCBkZXNjcmliZWQgaW4gRGVjaW1hbEZvcm1hdCBvciBSdWxlQmFzZWROdW1iZXJGb3Jt
YXQsCisgKiByZXNwZWN0aXZlbHkuCisgKiBAcGFyYW0gcGF0dGVybiBBIHBhdHRlcm4gc3BlY2lm
eWluZyB0aGUgZm9ybWF0IHRvIHVzZS4gCisgKiBUaGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIHVu
bGVzcyB0aGUgc3R5bGUgaXMKKyAqIFVOVU1fUEFUVEVSTl9ERUNJTUFMIG9yIFVOVU1fUEFUVEVS
Tl9SVUxFQkFTRUQuCisgKiBAcGFyYW0gcGF0dGVybkxlbmd0aCBUaGUgbnVtYmVyIG9mIGNoYXJh
Y3RlcnMgaW4gdGhlIHBhdHRlcm4sIG9yIC0xCisgKiBpZiBudWxsLXRlcm1pbmF0ZWQuIFRoaXMg
cGFyYW1ldGVyIGlzIGlnbm9yZWQgdW5sZXNzIHRoZSBzdHlsZSBpcworICogVU5VTV9QQVRURVJO
LgorICogQHBhcmFtIGxvY2FsZSBBIGxvY2FsZSBpZGVudGlmaWVyIHRvIHVzZSB0byBkZXRlcm1p
bmUgZm9ybWF0dGluZworICogYW5kIHBhcnNpbmcgY29udmVudGlvbnMsIG9yIE5VTEwgdG8gdXNl
IHRoZSBkZWZhdWx0IGxvY2FsZS4KKyAqIEBwYXJhbSBwYXJzZUVyciBBIHBvaW50ZXIgdG8gYSBV
UGFyc2VFcnJvciBzdHJ1Y3QgdG8gcmVjZWl2ZSB0aGUKKyAqIGRldGFpbHMgb2YgYW55IHBhcnNp
bmcgZXJyb3JzLCBvciBOVUxMIGlmIG5vIHBhcnNpbmcgZXJyb3IgZGV0YWlscworICogYXJlIGRl
c2lyZWQuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBpbnB1dC1vdXRwdXQgVUVy
cm9yQ29kZS4KKyAqIEByZXR1cm4gQSBwb2ludGVyIHRvIGEgbmV3bHkgY3JlYXRlZCBVTnVtYmVy
Rm9ybWF0LCBvciBOVUxMIGlmIGFuCisgKiBlcnJvciBvY2N1cnJlZC4KKyAqIEBzZWUgdW51bV9j
bG9zZQorICogQHNlZSBEZWNpbWFsRm9ybWF0CisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9T
VEFCTEUgVU51bWJlckZvcm1hdCogVV9FWFBPUlQyIAordW51bV9vcGVuKCAgVU51bWJlckZvcm1h
dFN0eWxlICAgIHN0eWxlLAorICAgICAgICAgICAgY29uc3QgICAgVUNoYXIqICAgIHBhdHRlcm4s
CisgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICAgcGF0dGVybkxlbmd0aCwKKyAgICAgICAg
ICAgIGNvbnN0ICAgIGNoYXIqICAgICBsb2NhbGUsCisgICAgICAgICAgICBVUGFyc2VFcnJvciog
ICAgICAgcGFyc2VFcnIsCisgICAgICAgICAgICBVRXJyb3JDb2RlKiAgICAgICAgc3RhdHVzKTsK
KworCisvKioKKyogQ2xvc2UgYSBVTnVtYmVyRm9ybWF0LgorKiBPbmNlIGNsb3NlZCwgYSBVTnVt
YmVyRm9ybWF0IG1heSBubyBsb25nZXIgYmUgdXNlZC4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0
dGVyIHRvIGNsb3NlLgorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2b2lkIFVfRVhQ
T1JUMiAKK3VudW1fY2xvc2UoVU51bWJlckZvcm1hdCogZm10KTsKKworI2lmIFVfU0hPV19DUExV
U1BMVVNfQVBJCisKK1VfTkFNRVNQQUNFX0JFR0lOCisKKy8qKgorICogXGNsYXNzIExvY2FsVU51
bWJlckZvcm1hdFBvaW50ZXIKKyAqICJTbWFydCBwb2ludGVyIiBjbGFzcywgY2xvc2VzIGEgVU51
bWJlckZvcm1hdCB2aWEgdW51bV9jbG9zZSgpLgorICogRm9yIG1vc3QgbWV0aG9kcyBzZWUgdGhl
IExvY2FsUG9pbnRlckJhc2UgYmFzZSBjbGFzcy4KKyAqCisgKiBAc2VlIExvY2FsUG9pbnRlckJh
c2UKKyAqIEBzZWUgTG9jYWxQb2ludGVyCisgKiBAc3RhYmxlIElDVSA0LjQKKyAqLworVV9ERUZJ
TkVfTE9DQUxfT1BFTl9QT0lOVEVSKExvY2FsVU51bWJlckZvcm1hdFBvaW50ZXIsIFVOdW1iZXJG
b3JtYXQsIHVudW1fY2xvc2UpOworCitVX05BTUVTUEFDRV9FTkQKKworI2VuZGlmCisKKy8qKgor
ICogT3BlbiBhIGNvcHkgb2YgYSBVTnVtYmVyRm9ybWF0LgorICogVGhpcyBmdW5jdGlvbiBwZXJm
b3JtcyBhIGRlZXAgY29weS4KKyAqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdCB0byBjb3B5CisgKiBA
cGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVy
cm9ycy4KKyAqIEByZXR1cm4gQSBwb2ludGVyIHRvIGEgVU51bWJlckZvcm1hdCBpZGVudGljYWwg
dG8gZm10LgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIFVOdW1iZXJGb3JtYXQq
IFVfRVhQT1JUMiAKK3VudW1fY2xvbmUoY29uc3QgVU51bWJlckZvcm1hdCAqZm10LAorICAgICAg
IFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKy8qKgorKiBGb3JtYXQgYW4gaW50ZWdlciB1c2luZyBh
IFVOdW1iZXJGb3JtYXQuCisqIFRoZSBpbnRlZ2VyIHdpbGwgYmUgZm9ybWF0dGVkIGFjY29yZGlu
ZyB0byB0aGUgVU51bWJlckZvcm1hdCdzIGxvY2FsZS4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0
dGVyIHRvIHVzZS4KKyogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIHRvIGZvcm1hdC4KKyogQHBh
cmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgZm9ybWF0dGVk
IG51bWJlci4KKyogQHBhcmFtIHJlc3VsdExlbmd0aCBUaGUgbWF4aW11bSBzaXplIG9mIHJlc3Vs
dC4KKyogQHBhcmFtIHBvcyAgICBBIHBvaW50ZXIgdG8gYSBVRmllbGRQb3NpdGlvbi4gIE9uIGlu
cHV0LCBwb3NpdGlvbi0+ZmllbGQKKyogaXMgcmVhZC4gIE9uIG91dHB1dCwgcG9zaXRpb24tPmJl
Z2luSW5kZXggYW5kIHBvc2l0aW9uLT5lbmRJbmRleCBpbmRpY2F0ZQorKiB0aGUgYmVnaW5uaW5n
IGFuZCBlbmRpbmcgaW5kaWNlcyBvZiBmaWVsZCBudW1iZXIgcG9zaXRpb24tPmZpZWxkLCBpZiBz
dWNoCisqIGEgZmllbGQgZXhpc3RzLiAgVGhpcyBwYXJhbWV0ZXIgbWF5IGJlIE5VTEwsIGluIHdo
aWNoIGNhc2Ugbm8gZmllbGQKKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9y
Q29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUgdG90YWwgYnVmZmVyIHNp
emUgbmVlZGVkOyBpZiBncmVhdGVyIHRoYW4gcmVzdWx0TGVuZ3RoLCB0aGUgb3V0cHV0IHdhcyB0
cnVuY2F0ZWQuCisqIEBzZWUgdW51bV9mb3JtYXRJbnQ2NAorKiBAc2VlIHVudW1fZm9ybWF0RG91
YmxlCisqIEBzZWUgdW51bV9wYXJzZQorKiBAc2VlIHVudW1fcGFyc2VJbnQ2NAorKiBAc2VlIHVu
dW1fcGFyc2VEb3VibGUKKyogQHNlZSBVRmllbGRQb3NpdGlvbgorKiBAc3RhYmxlIElDVSAyLjAK
KyovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VudW1fZm9ybWF0KCAgICBjb25zdCAg
ICBVTnVtYmVyRm9ybWF0KiAgICBmbXQsCisgICAgICAgIGludDMyX3QgICAgICAgICAgICBudW1i
ZXIsCisgICAgICAgIFVDaGFyKiAgICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgaW50MzJfdCAg
ICAgICAgICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAgVUZpZWxkUG9zaXRpb24gICAgKnBvcywK
KyAgICAgICAgVUVycm9yQ29kZSogICAgICAgIHN0YXR1cyk7CisKKy8qKgorKiBGb3JtYXQgYW4g
aW50NjQgdXNpbmcgYSBVTnVtYmVyRm9ybWF0LgorKiBUaGUgaW50NjQgd2lsbCBiZSBmb3JtYXR0
ZWQgYWNjb3JkaW5nIHRvIHRoZSBVTnVtYmVyRm9ybWF0J3MgbG9jYWxlLgorKiBAcGFyYW0gZm10
IFRoZSBmb3JtYXR0ZXIgdG8gdXNlLgorKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgdG8gZm9y
bWF0LgorKiBAcGFyYW0gcmVzdWx0IEEgcG9pbnRlciB0byBhIGJ1ZmZlciB0byByZWNlaXZlIHRo
ZSBmb3JtYXR0ZWQgbnVtYmVyLgorKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIFRoZSBtYXhpbXVtIHNp
emUgb2YgcmVzdWx0LgorKiBAcGFyYW0gcG9zICAgIEEgcG9pbnRlciB0byBhIFVGaWVsZFBvc2l0
aW9uLiAgT24gaW5wdXQsIHBvc2l0aW9uLT5maWVsZAorKiBpcyByZWFkLiAgT24gb3V0cHV0LCBw
b3NpdGlvbi0+YmVnaW5JbmRleCBhbmQgcG9zaXRpb24tPmVuZEluZGV4IGluZGljYXRlCisqIHRo
ZSBiZWdpbm5pbmcgYW5kIGVuZGluZyBpbmRpY2VzIG9mIGZpZWxkIG51bWJlciBwb3NpdGlvbi0+
ZmllbGQsIGlmIHN1Y2gKKyogYSBmaWVsZCBleGlzdHMuICBUaGlzIHBhcmFtZXRlciBtYXkgYmUg
TlVMTCwgaW4gd2hpY2ggY2FzZSBubyBmaWVsZAorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0
byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAcmV0dXJuIFRoZSB0b3Rh
bCBidWZmZXIgc2l6ZSBuZWVkZWQ7IGlmIGdyZWF0ZXIgdGhhbiByZXN1bHRMZW5ndGgsIHRoZSBv
dXRwdXQgd2FzIHRydW5jYXRlZC4KKyogQHNlZSB1bnVtX2Zvcm1hdAorKiBAc2VlIHVudW1fZm9y
bWF0RG91YmxlCisqIEBzZWUgdW51bV9wYXJzZQorKiBAc2VlIHVudW1fcGFyc2VJbnQ2NAorKiBA
c2VlIHVudW1fcGFyc2VEb3VibGUKKyogQHNlZSBVRmllbGRQb3NpdGlvbgorKiBAc3RhYmxlIElD
VSAyLjAKKyovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VudW1fZm9ybWF0SW50NjQo
Y29uc3QgVU51bWJlckZvcm1hdCAqZm10LAorICAgICAgICBpbnQ2NF90ICAgICAgICAgbnVtYmVy
LAorICAgICAgICBVQ2hhciogICAgICAgICAgcmVzdWx0LAorICAgICAgICBpbnQzMl90ICAgICAg
ICAgcmVzdWx0TGVuZ3RoLAorICAgICAgICBVRmllbGRQb3NpdGlvbiAqcG9zLAorICAgICAgICBV
RXJyb3JDb2RlKiAgICAgc3RhdHVzKTsKKworLyoqCisqIEZvcm1hdCBhIGRvdWJsZSB1c2luZyBh
IFVOdW1iZXJGb3JtYXQuCisqIFRoZSBkb3VibGUgd2lsbCBiZSBmb3JtYXR0ZWQgYWNjb3JkaW5n
IHRvIHRoZSBVTnVtYmVyRm9ybWF0J3MgbG9jYWxlLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0
ZXIgdG8gdXNlLgorKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgdG8gZm9ybWF0LgorKiBAcGFy
YW0gcmVzdWx0IEEgcG9pbnRlciB0byBhIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBmb3JtYXR0ZWQg
bnVtYmVyLgorKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIFRoZSBtYXhpbXVtIHNpemUgb2YgcmVzdWx0
LgorKiBAcGFyYW0gcG9zICAgIEEgcG9pbnRlciB0byBhIFVGaWVsZFBvc2l0aW9uLiAgT24gaW5w
dXQsIHBvc2l0aW9uLT5maWVsZAorKiBpcyByZWFkLiAgT24gb3V0cHV0LCBwb3NpdGlvbi0+YmVn
aW5JbmRleCBhbmQgcG9zaXRpb24tPmVuZEluZGV4IGluZGljYXRlCisqIHRoZSBiZWdpbm5pbmcg
YW5kIGVuZGluZyBpbmRpY2VzIG9mIGZpZWxkIG51bWJlciBwb3NpdGlvbi0+ZmllbGQsIGlmIHN1
Y2gKKyogYSBmaWVsZCBleGlzdHMuICBUaGlzIHBhcmFtZXRlciBtYXkgYmUgTlVMTCwgaW4gd2hp
Y2ggY2FzZSBubyBmaWVsZAorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JD
b2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAcmV0dXJuIFRoZSB0b3RhbCBidWZmZXIgc2l6
ZSBuZWVkZWQ7IGlmIGdyZWF0ZXIgdGhhbiByZXN1bHRMZW5ndGgsIHRoZSBvdXRwdXQgd2FzIHRy
dW5jYXRlZC4KKyogQHNlZSB1bnVtX2Zvcm1hdAorKiBAc2VlIHVudW1fZm9ybWF0SW50NjQKKyog
QHNlZSB1bnVtX3BhcnNlCisqIEBzZWUgdW51bV9wYXJzZUludDY0CisqIEBzZWUgdW51bV9wYXJz
ZURvdWJsZQorKiBAc2VlIFVGaWVsZFBvc2l0aW9uCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1Vf
U1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordW51bV9mb3JtYXREb3VibGUoICAgIGNvbnN0ICAg
IFVOdW1iZXJGb3JtYXQqICBmbXQsCisgICAgICAgICAgICBkb3VibGUgICAgICAgICAgbnVtYmVy
LAorICAgICAgICAgICAgVUNoYXIqICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgICAgIGludDMy
X3QgICAgICAgICByZXN1bHRMZW5ndGgsCisgICAgICAgICAgICBVRmllbGRQb3NpdGlvbiAgKnBv
cywgLyogMCBpZiBpZ25vcmUgKi8KKyAgICAgICAgICAgIFVFcnJvckNvZGUqICAgICBzdGF0dXMp
OworCisvKioKKyogRm9ybWF0IGEgZGVjaW1hbCBudW1iZXIgdXNpbmcgYSBVTnVtYmVyRm9ybWF0
LgorKiBUaGUgbnVtYmVyIHdpbGwgYmUgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgVU51bWJl
ckZvcm1hdCdzIGxvY2FsZS4KKyogVGhlIHN5bnRheCBvZiB0aGUgaW5wdXQgbnVtYmVyIGlzIGEg
Im51bWVyaWMgc3RyaW5nIgorKiBhcyBkZWZpbmVkIGluIHRoZSBEZWNpbWFsIEFyaXRobWV0aWMg
U3BlY2lmaWNhdGlvbiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly9zcGVsZW90cm92ZS5jb20vZGVj
aW1hbAorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gdXNlLgorKiBAcGFyYW0gbnVtYmVy
IFRoZSBudW1iZXIgdG8gZm9ybWF0LgorKiBAcGFyYW0gbGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhl
IGlucHV0IG51bWJlciwgb3IgLTEgaWYgdGhlIGlucHV0IGlzIG51bC10ZXJtaW5hdGVkLgorKiBA
cGFyYW0gcmVzdWx0IEEgcG9pbnRlciB0byBhIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBmb3JtYXR0
ZWQgbnVtYmVyLgorKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIFRoZSBtYXhpbXVtIHNpemUgb2YgcmVz
dWx0LgorKiBAcGFyYW0gcG9zICAgIEEgcG9pbnRlciB0byBhIFVGaWVsZFBvc2l0aW9uLiAgT24g
aW5wdXQsIHBvc2l0aW9uLT5maWVsZAorKiAgICAgICAgICAgICAgIGlzIHJlYWQuICBPbiBvdXRw
dXQsIHBvc2l0aW9uLT5iZWdpbkluZGV4IGFuZCBwb3NpdGlvbi0+ZW5kSW5kZXggaW5kaWNhdGUK
KyogICAgICAgICAgICAgICB0aGUgYmVnaW5uaW5nIGFuZCBlbmRpbmcgaW5kaWNlcyBvZiBmaWVs
ZCBudW1iZXIgcG9zaXRpb24tPmZpZWxkLCBpZiBzdWNoCisqICAgICAgICAgICAgICAgYSBmaWVs
ZCBleGlzdHMuICBUaGlzIHBhcmFtZXRlciBtYXkgYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSBpdCBp
cyBpZ25vcmVkLgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRv
IHJlY2VpdmUgYW55IGVycm9ycworKiBAcmV0dXJuIFRoZSB0b3RhbCBidWZmZXIgc2l6ZSBuZWVk
ZWQ7IGlmIGdyZWF0ZXIgdGhhbiByZXN1bHRMZW5ndGgsIHRoZSBvdXRwdXQgd2FzIHRydW5jYXRl
ZC4KKyogQHNlZSB1bnVtX2Zvcm1hdAorKiBAc2VlIHVudW1fZm9ybWF0SW50NjQKKyogQHNlZSB1
bnVtX3BhcnNlCisqIEBzZWUgdW51bV9wYXJzZUludDY0CisqIEBzZWUgdW51bV9wYXJzZURvdWJs
ZQorKiBAc2VlIFVGaWVsZFBvc2l0aW9uCisqIEBzdGFibGUgSUNVIDQuNCAKKyovCitVX1NUQUJM
RSBpbnQzMl90IFVfRVhQT1JUMiAKK3VudW1fZm9ybWF0RGVjaW1hbCggICAgY29uc3QgICAgVU51
bWJlckZvcm1hdCogIGZtdCwKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKiAgICBudW1iZXIsCisg
ICAgICAgICAgICBpbnQzMl90ICAgICAgICAgbGVuZ3RoLAorICAgICAgICAgICAgVUNoYXIqICAg
ICAgICAgIHJlc3VsdCwKKyAgICAgICAgICAgIGludDMyX3QgICAgICAgICByZXN1bHRMZW5ndGgs
CisgICAgICAgICAgICBVRmllbGRQb3NpdGlvbiAgKnBvcywgLyogMCBpZiBpZ25vcmUgKi8KKyAg
ICAgICAgICAgIFVFcnJvckNvZGUqICAgICBzdGF0dXMpOworCisvKioKKyAqIEZvcm1hdCBhIGRv
dWJsZSBjdXJyZW5jeSBhbW91bnQgdXNpbmcgYSBVTnVtYmVyRm9ybWF0LgorICogVGhlIGRvdWJs
ZSB3aWxsIGJlIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIFVOdW1iZXJGb3JtYXQncyBsb2Nh
bGUuCisgKiBAcGFyYW0gZm10IHRoZSBmb3JtYXR0ZXIgdG8gdXNlCisgKiBAcGFyYW0gbnVtYmVy
IHRoZSBudW1iZXIgdG8gZm9ybWF0CisgKiBAcGFyYW0gY3VycmVuY3kgdGhlIDMtbGV0dGVyIG51
bGwtdGVybWluYXRlZCBJU08gNDIxNyBjdXJyZW5jeSBjb2RlCisgKiBAcGFyYW0gcmVzdWx0IGEg
cG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIGZvcm1hdHRlZCBudW1iZXIKKyAq
IEBwYXJhbSByZXN1bHRMZW5ndGggdGhlIG1heGltdW0gbnVtYmVyIG9mIFVDaGFycyB0byB3cml0
ZSB0byByZXN1bHQKKyAqIEBwYXJhbSBwb3MgYSBwb2ludGVyIHRvIGEgVUZpZWxkUG9zaXRpb24u
ICBPbiBpbnB1dCwKKyAqIHBvc2l0aW9uLT5maWVsZCBpcyByZWFkLiAgT24gb3V0cHV0LCBwb3Np
dGlvbi0+YmVnaW5JbmRleCBhbmQKKyAqIHBvc2l0aW9uLT5lbmRJbmRleCBpbmRpY2F0ZSB0aGUg
YmVnaW5uaW5nIGFuZCBlbmRpbmcgaW5kaWNlcyBvZgorICogZmllbGQgbnVtYmVyIHBvc2l0aW9u
LT5maWVsZCwgaWYgc3VjaCBhIGZpZWxkIGV4aXN0cy4gIFRoaXMKKyAqIHBhcmFtZXRlciBtYXkg
YmUgTlVMTCwgaW4gd2hpY2ggY2FzZSBpdCBpcyBpZ25vcmVkLgorICogQHBhcmFtIHN0YXR1cyBh
IHBvaW50ZXIgdG8gYW4gaW5wdXQtb3V0cHV0IFVFcnJvckNvZGUKKyAqIEByZXR1cm4gdGhlIHRv
dGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwKKyAq
IHRoZSBvdXRwdXQgd2FzIHRydW5jYXRlZC4KKyAqIEBzZWUgdW51bV9mb3JtYXREb3VibGUKKyAq
IEBzZWUgdW51bV9wYXJzZURvdWJsZUN1cnJlbmN5CisgKiBAc2VlIFVGaWVsZFBvc2l0aW9uCisg
KiBAc3RhYmxlIElDVSAzLjAKKyAqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1bnVt
X2Zvcm1hdERvdWJsZUN1cnJlbmN5KGNvbnN0IFVOdW1iZXJGb3JtYXQqIGZtdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIG51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgVUNoYXIqIGN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhciogcmVz
dWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHJlc3VsdExlbmd0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgVUZpZWxkUG9zaXRpb24qIHBvcywgLyogaWdub3JlZCBp
ZiAwICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUqIHN0YXR1cyk7CisK
Ky8qKgorKiBQYXJzZSBhIHN0cmluZyBpbnRvIGFuIGludGVnZXIgdXNpbmcgYSBVTnVtYmVyRm9y
bWF0LgorKiBUaGUgc3RyaW5nIHdpbGwgYmUgcGFyc2VkIGFjY29yZGluZyB0byB0aGUgVU51bWJl
ckZvcm1hdCdzIGxvY2FsZS4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHVzZS4KKyog
QHBhcmFtIHRleHQgVGhlIHRleHQgdG8gcGFyc2UuCisqIEBwYXJhbSB0ZXh0TGVuZ3RoIFRoZSBs
ZW5ndGggb2YgdGV4dCwgb3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorKiBAcGFyYW0gcGFyc2VQ
b3MgSWYgbm90IDAsIG9uIGlucHV0IGEgcG9pbnRlciB0byBhbiBpbnRlZ2VyIHNwZWNpZnlpbmcg
dGhlIG9mZnNldCBhdCB3aGljaAorKiB0byBiZWdpbiBwYXJzaW5nLiAgSWYgbm90IDAsIG9uIG91
dHB1dCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHBhcnNpbmcgZW5kZWQuCisqIEBwYXJhbSBzdGF0dXMg
QSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1
cm4gVGhlIHZhbHVlIG9mIHRoZSBwYXJzZWQgaW50ZWdlcgorKiBAc2VlIHVudW1fcGFyc2VJbnQ2
NAorKiBAc2VlIHVudW1fcGFyc2VEb3VibGUKKyogQHNlZSB1bnVtX2Zvcm1hdAorKiBAc2VlIHVu
dW1fZm9ybWF0SW50NjQKKyogQHNlZSB1bnVtX2Zvcm1hdERvdWJsZQorKiBAc3RhYmxlIElDVSAy
LjAKKyovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VudW1fcGFyc2UoICAgIGNvbnN0
ICAgVU51bWJlckZvcm1hdCogIGZtdCwKKyAgICAgICAgY29uc3QgICBVQ2hhciogICAgICAgICAg
dGV4dCwKKyAgICAgICAgaW50MzJfdCAgICAgICAgIHRleHRMZW5ndGgsCisgICAgICAgIGludDMy
X3QgICAgICAgICAqcGFyc2VQb3MgLyogMCA9IHN0YXJ0ICovLAorICAgICAgICBVRXJyb3JDb2Rl
ICAgICAgKnN0YXR1cyk7CisKKy8qKgorKiBQYXJzZSBhIHN0cmluZyBpbnRvIGFuIGludDY0IHVz
aW5nIGEgVU51bWJlckZvcm1hdC4KKyogVGhlIHN0cmluZyB3aWxsIGJlIHBhcnNlZCBhY2NvcmRp
bmcgdG8gdGhlIFVOdW1iZXJGb3JtYXQncyBsb2NhbGUuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1h
dHRlciB0byB1c2UuCisqIEBwYXJhbSB0ZXh0IFRoZSB0ZXh0IHRvIHBhcnNlLgorKiBAcGFyYW0g
dGV4dExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRleHQsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4K
KyogQHBhcmFtIHBhcnNlUG9zIElmIG5vdCAwLCBvbiBpbnB1dCBhIHBvaW50ZXIgdG8gYW4gaW50
ZWdlciBzcGVjaWZ5aW5nIHRoZSBvZmZzZXQgYXQgd2hpY2gKKyogdG8gYmVnaW4gcGFyc2luZy4g
IElmIG5vdCAwLCBvbiBvdXRwdXQgdGhlIG9mZnNldCBhdCB3aGljaCBwYXJzaW5nIGVuZGVkLgor
KiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55
IGVycm9ycworKiBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgcGFyc2VkIGludGVnZXIKKyogQHNl
ZSB1bnVtX3BhcnNlCisqIEBzZWUgdW51bV9wYXJzZURvdWJsZQorKiBAc2VlIHVudW1fZm9ybWF0
CisqIEBzZWUgdW51bV9mb3JtYXRJbnQ2NAorKiBAc2VlIHVudW1fZm9ybWF0RG91YmxlCisqIEBz
dGFibGUgSUNVIDIuOAorKi8KK1VfU1RBQkxFIGludDY0X3QgVV9FWFBPUlQyIAordW51bV9wYXJz
ZUludDY0KGNvbnN0IFVOdW1iZXJGb3JtYXQqICBmbXQsCisgICAgICAgIGNvbnN0IFVDaGFyKiAg
dGV4dCwKKyAgICAgICAgaW50MzJfdCAgICAgICB0ZXh0TGVuZ3RoLAorICAgICAgICBpbnQzMl90
ICAgICAgICpwYXJzZVBvcyAvKiAwID0gc3RhcnQgKi8sCisgICAgICAgIFVFcnJvckNvZGUgICAg
KnN0YXR1cyk7CisKKy8qKgorKiBQYXJzZSBhIHN0cmluZyBpbnRvIGEgZG91YmxlIHVzaW5nIGEg
VU51bWJlckZvcm1hdC4KKyogVGhlIHN0cmluZyB3aWxsIGJlIHBhcnNlZCBhY2NvcmRpbmcgdG8g
dGhlIFVOdW1iZXJGb3JtYXQncyBsb2NhbGUuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0
byB1c2UuCisqIEBwYXJhbSB0ZXh0IFRoZSB0ZXh0IHRvIHBhcnNlLgorKiBAcGFyYW0gdGV4dExl
bmd0aCBUaGUgbGVuZ3RoIG9mIHRleHQsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyogQHBh
cmFtIHBhcnNlUG9zIElmIG5vdCAwLCBvbiBpbnB1dCBhIHBvaW50ZXIgdG8gYW4gaW50ZWdlciBz
cGVjaWZ5aW5nIHRoZSBvZmZzZXQgYXQgd2hpY2gKKyogdG8gYmVnaW4gcGFyc2luZy4gIElmIG5v
dCAwLCBvbiBvdXRwdXQgdGhlIG9mZnNldCBhdCB3aGljaCBwYXJzaW5nIGVuZGVkLgorKiBAcGFy
YW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9y
cworKiBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgcGFyc2VkIGRvdWJsZQorKiBAc2VlIHVudW1f
cGFyc2UKKyogQHNlZSB1bnVtX3BhcnNlSW50NjQKKyogQHNlZSB1bnVtX2Zvcm1hdAorKiBAc2Vl
IHVudW1fZm9ybWF0SW50NjQKKyogQHNlZSB1bnVtX2Zvcm1hdERvdWJsZQorKiBAc3RhYmxlIElD
VSAyLjAKKyovCitVX1NUQUJMRSBkb3VibGUgVV9FWFBPUlQyIAordW51bV9wYXJzZURvdWJsZSgg
ICAgY29uc3QgICBVTnVtYmVyRm9ybWF0KiAgZm10LAorICAgICAgICAgICAgY29uc3QgICBVQ2hh
ciogICAgICAgICAgdGV4dCwKKyAgICAgICAgICAgIGludDMyX3QgICAgICAgICB0ZXh0TGVuZ3Ro
LAorICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICpwYXJzZVBvcyAvKiAwID0gc3RhcnQgKi8s
CisgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgKnN0YXR1cyk7CisKKworLyoqCisqIFBhcnNl
IGEgbnVtYmVyIGZyb20gYSBzdHJpbmcgaW50byBhbiB1bmZvcm1hdHRlZCBudW1lcmljIHN0cmlu
ZyB1c2luZyBhIFVOdW1iZXJGb3JtYXQuCisqIFRoZSBpbnB1dCBzdHJpbmcgd2lsbCBiZSBwYXJz
ZWQgYWNjb3JkaW5nIHRvIHRoZSBVTnVtYmVyRm9ybWF0J3MgbG9jYWxlLgorKiBUaGUgc3ludGF4
IG9mIHRoZSBvdXRwdXQgaXMgYSAibnVtZXJpYyBzdHJpbmciCisqIGFzIGRlZmluZWQgaW4gdGhl
IERlY2ltYWwgQXJpdGhtZXRpYyBTcGVjaWZpY2F0aW9uLCBhdmFpbGFibGUgYXQKKyogaHR0cDov
L3NwZWxlb3Ryb3ZlLmNvbS9kZWNpbWFsCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byB1
c2UuCisqIEBwYXJhbSB0ZXh0IFRoZSB0ZXh0IHRvIHBhcnNlLgorKiBAcGFyYW0gdGV4dExlbmd0
aCBUaGUgbGVuZ3RoIG9mIHRleHQsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyogQHBhcmFt
IHBhcnNlUG9zIElmIG5vdCAwLCBvbiBpbnB1dCBhIHBvaW50ZXIgdG8gYW4gaW50ZWdlciBzcGVj
aWZ5aW5nIHRoZSBvZmZzZXQgYXQgd2hpY2gKKyogICAgICAgICAgICAgICAgIHRvIGJlZ2luIHBh
cnNpbmcuICBJZiBub3QgMCwgb24gb3V0cHV0IHRoZSBvZmZzZXQgYXQgd2hpY2ggcGFyc2luZyBl
bmRlZC4KKyogQHBhcmFtIG91dEJ1ZiBBIChjaGFyICopIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBw
YXJzZWQgbnVtYmVyIGFzIGEgc3RyaW5nLiAgVGhlIG91dHB1dCBzdHJpbmcKKyogICAgICAgICAg
ICAgICB3aWxsIGJlIG51bC10ZXJtaW5hdGVkIGlmIHRoZXJlIGlzIHN1ZmZpY2llbnQgc3BhY2Uu
CisqIEBwYXJhbSBvdXRCdWZMZW5ndGggVGhlIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIuICBN
YXkgYmUgemVybywgaW4gd2hpY2ggY2FzZQorKiAgICAgICAgICAgICAgIHRoZSBvdXRCdWYgcG9p
bnRlciBtYXkgYmUgTlVMTCwgYW5kIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUKKyogICAg
ICAgICAgICAgICBzaXplIG9mIHRoZSBvdXRwdXQgc3RyaW5nLgorKiBAcGFyYW0gc3RhdHVzIEEg
cG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAcmV0dXJu
IHRoZSBsZW5ndGggb2YgdGhlIG91dHB1dCBzdHJpbmcsIG5vdCBpbmNsdWRpbmcgYW55IHRlcm1p
bmF0aW5nIG51bC4KKyogQHNlZSB1bnVtX3BhcnNlCisqIEBzZWUgdW51bV9wYXJzZUludDY0Cisq
IEBzZWUgdW51bV9mb3JtYXQKKyogQHNlZSB1bnVtX2Zvcm1hdEludDY0CisqIEBzZWUgdW51bV9m
b3JtYXREb3VibGUKKyogQHN0YWJsZSBJQ1UgNC40CisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VY
UE9SVDIgCit1bnVtX3BhcnNlRGVjaW1hbChjb25zdCAgIFVOdW1iZXJGb3JtYXQqICBmbXQsCisg
ICAgICAgICAgICAgICAgIGNvbnN0ICAgVUNoYXIqICAgICAgICAgIHRleHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgIHRleHRMZW5ndGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICpwYXJzZVBvcyAvKiAwID0gc3RhcnQgKi8sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAgICpvdXRCdWYsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgIG91dEJ1Zkxlbmd0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgKnN0YXR1cyk7CisKKy8qKgorICogUGFy
c2UgYSBzdHJpbmcgaW50byBhIGRvdWJsZSBhbmQgYSBjdXJyZW5jeSB1c2luZyBhIFVOdW1iZXJG
b3JtYXQuCisgKiBUaGUgc3RyaW5nIHdpbGwgYmUgcGFyc2VkIGFjY29yZGluZyB0byB0aGUgVU51
bWJlckZvcm1hdCdzIGxvY2FsZS4KKyAqIEBwYXJhbSBmbXQgdGhlIGZvcm1hdHRlciB0byB1c2UK
KyAqIEBwYXJhbSB0ZXh0IHRoZSB0ZXh0IHRvIHBhcnNlCisgKiBAcGFyYW0gdGV4dExlbmd0aCB0
aGUgbGVuZ3RoIG9mIHRleHQsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZAorICogQHBhcmFtIHBh
cnNlUG9zIGEgcG9pbnRlciB0byBhbiBvZmZzZXQgaW5kZXggaW50byB0ZXh0IGF0IHdoaWNoIHRv
CisgKiBiZWdpbiBwYXJzaW5nLiBPbiBvdXRwdXQsICpwYXJzZVBvcyB3aWxsIHBvaW50IGFmdGVy
IHRoZSBsYXN0CisgKiBwYXJzZWQgY2hhcmFjdGVyLiAgVGhpcyBwYXJhbWV0ZXIgbWF5IGJlIDAs
IGluIHdoaWNoIGNhc2UgcGFyc2luZworICogYmVnaW5zIGF0IG9mZnNldCAwLgorICogQHBhcmFt
IGN1cnJlbmN5IGEgcG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIHBhcnNlZCBu
dWxsLQorICogdGVybWluYXRlZCBjdXJyZW5jeS4gIFRoaXMgYnVmZmVyIG11c3QgaGF2ZSBhIGNh
cGFjaXR5IG9mIGF0IGxlYXN0CisgKiA0IFVDaGFycy4KKyAqIEBwYXJhbSBzdGF0dXMgYSBwb2lu
dGVyIHRvIGFuIGlucHV0LW91dHB1dCBVRXJyb3JDb2RlCisgKiBAcmV0dXJuIHRoZSBwYXJzZWQg
ZG91YmxlCisgKiBAc2VlIHVudW1fcGFyc2VEb3VibGUKKyAqIEBzZWUgdW51bV9mb3JtYXREb3Vi
bGVDdXJyZW5jeQorICogQHN0YWJsZSBJQ1UgMy4wCisgKi8KK1VfU1RBQkxFIGRvdWJsZSBVX0VY
UE9SVDIKK3VudW1fcGFyc2VEb3VibGVDdXJyZW5jeShjb25zdCBVTnVtYmVyRm9ybWF0KiBmbXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIHRleHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50MzJfdCB0ZXh0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIGludDMyX3QqIHBhcnNlUG9zLCAvKiAwID0gc3RhcnQgKi8KKyAgICAgICAgICAgICAgICAg
ICAgICAgICBVQ2hhciogY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9y
Q29kZSogc3RhdHVzKTsKKworLyoqCisgKiBTZXQgdGhlIHBhdHRlcm4gdXNlZCBieSBhIFVOdW1i
ZXJGb3JtYXQuICBUaGlzIGNhbiBvbmx5IGJlIHVzZWQKKyAqIG9uIGEgRGVjaW1hbEZvcm1hdCwg
b3RoZXIgZm9ybWF0cyByZXR1cm4gVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SCisgKiBpbiB0aGUg
c3RhdHVzLgorICogQHBhcmFtIGZvcm1hdCBUaGUgZm9ybWF0dGVyIHRvIHNldC4KKyAqIEBwYXJh
bSBsb2NhbGl6ZWQgVFJVRSBpZiB0aGUgcGF0dGVybiBpcyBsb2NhbGl6ZWQsIEZBTFNFIG90aGVy
d2lzZS4KKyAqIEBwYXJhbSBwYXR0ZXJuIFRoZSBuZXcgcGF0dGVybgorICogQHBhcmFtIHBhdHRl
cm5MZW5ndGggVGhlIGxlbmd0aCBvZiBwYXR0ZXJuLCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQu
CisgKiBAcGFyYW0gcGFyc2VFcnJvciBBIHBvaW50ZXIgdG8gVVBhcnNlRXJyb3IgdG8gcmVjaWV2
ZSBpbmZvcm1hdGlvbgorICogYWJvdXQgZXJyb3JzIG9jY3VycmVkIGR1cmluZyBwYXJzaW5nLCBv
ciBOVUxMIGlmIG5vIHBhcnNlIGVycm9yCisgKiBpbmZvcm1hdGlvbiBpcyBkZXNpcmVkLgorICog
QHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gaW5wdXQtb3V0cHV0IFVFcnJvckNvZGUuCisg
KiBAc2VlIHVudW1fdG9QYXR0ZXJuCisgKiBAc2VlIERlY2ltYWxGb3JtYXQKKyAqIEBzdGFibGUg
SUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VudW1fYXBwbHlQYXR0ZXJu
KCAgICAgICAgICBVTnVtYmVyRm9ybWF0ICAqZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVCb29sICAgICAgICAgIGxvY2FsaXplZCwKKyAgICAgICAgICAgICAgICAgICAgY29u
c3QgICBVQ2hhciAgICAgICAgICAqcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQzMl90ICAgICAgICAgcGF0dGVybkxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBVUGFyc2VFcnJvciAgICAqcGFyc2VFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBVRXJyb3JDb2RlICAgICAqc3RhdHVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICApOworCisvKioKKyogR2V0IGEgbG9jYWxlIGZvciB3aGljaCBkZWNpbWFsIGZvcm1h
dHRpbmcgcGF0dGVybnMgYXJlIGF2YWlsYWJsZS4KKyogQSBVTnVtYmVyRm9ybWF0IGluIGEgbG9j
YWxlIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gd2lsbCBwZXJmb3JtIHRoZSBjb3JyZWN0Cisq
IGZvcm1hdHRpbmcgYW5kIHBhcnNpbmcgZm9yIHRoZSBsb2NhbGUuICBUaGUgcmVzdWx0cyBvZiB0
aGlzIGNhbGwgYXJlIG5vdAorKiB2YWxpZCBmb3IgcnVsZS1iYXNlZCBudW1iZXIgZm9ybWF0cy4K
KyogQHBhcmFtIGxvY2FsZUluZGV4IFRoZSBpbmRleCBvZiB0aGUgZGVzaXJlZCBsb2NhbGUuCisq
IEByZXR1cm4gQSBsb2NhbGUgZm9yIHdoaWNoIG51bWJlciBmb3JtYXR0aW5nIHBhdHRlcm5zIGFy
ZSBhdmFpbGFibGUsIG9yIDAgaWYgbm9uZS4KKyogQHNlZSB1bnVtX2NvdW50QXZhaWxhYmxlCisq
IEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGNvbnN0IGNoYXIqIFVfRVhQT1JUMiAKK3Vu
dW1fZ2V0QXZhaWxhYmxlKGludDMyX3QgbG9jYWxlSW5kZXgpOworCisvKioKKyogRGV0ZXJtaW5l
IGhvdyBtYW55IGxvY2FsZXMgaGF2ZSBkZWNpbWFsIGZvcm1hdHRpbmcgcGF0dGVybnMgYXZhaWxh
YmxlLiAgVGhlCisqIHJlc3VsdHMgb2YgdGhpcyBjYWxsIGFyZSBub3QgdmFsaWQgZm9yIHJ1bGUt
YmFzZWQgbnVtYmVyIGZvcm1hdHMuCisqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIGZvciBkZXRl
cm1pbmluZyB0aGUgbG9vcCBlbmRpbmcgY29uZGl0aW9uIGZvcgorKiBjYWxscyB0byB7QGxpbmsg
I3VudW1fZ2V0QXZhaWxhYmxlIH0uCisqIEByZXR1cm4gVGhlIG51bWJlciBvZiBsb2NhbGVzIGZv
ciB3aGljaCBkZWNpbWFsIGZvcm1hdHRpbmcgcGF0dGVybnMgYXJlIGF2YWlsYWJsZS4KKyogQHNl
ZSB1bnVtX2dldEF2YWlsYWJsZQorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBpbnQz
Ml90IFVfRVhQT1JUMiAKK3VudW1fY291bnRBdmFpbGFibGUodm9pZCk7CisKKy8qKiBUaGUgcG9z
c2libGUgVU51bWJlckZvcm1hdCBudW1lcmljIGF0dHJpYnV0ZXMgQHN0YWJsZSBJQ1UgMi4wICov
Cit0eXBlZGVmIGVudW0gVU51bWJlckZvcm1hdEF0dHJpYnV0ZSB7CisgIC8qKiBQYXJzZSBpbnRl
Z2VycyBvbmx5ICovCisgIFVOVU1fUEFSU0VfSU5UX09OTFksCisgIC8qKiBVc2UgZ3JvdXBpbmcg
c2VwYXJhdG9yICovCisgIFVOVU1fR1JPVVBJTkdfVVNFRCwKKyAgLyoqIEFsd2F5cyBzaG93IGRl
Y2ltYWwgcG9pbnQgKi8KKyAgVU5VTV9ERUNJTUFMX0FMV0FZU19TSE9XTiwKKyAgLyoqIE1heGlt
dW0gaW50ZWdlciBkaWdpdHMgKi8KKyAgVU5VTV9NQVhfSU5URUdFUl9ESUdJVFMsCisgIC8qKiBN
aW5pbXVtIGludGVnZXIgZGlnaXRzICovCisgIFVOVU1fTUlOX0lOVEVHRVJfRElHSVRTLAorICAv
KiogSW50ZWdlciBkaWdpdHMgKi8KKyAgVU5VTV9JTlRFR0VSX0RJR0lUUywKKyAgLyoqIE1heGlt
dW0gZnJhY3Rpb24gZGlnaXRzICovCisgIFVOVU1fTUFYX0ZSQUNUSU9OX0RJR0lUUywKKyAgLyoq
IE1pbmltdW0gZnJhY3Rpb24gZGlnaXRzICovCisgIFVOVU1fTUlOX0ZSQUNUSU9OX0RJR0lUUywK
KyAgLyoqIEZyYWN0aW9uIGRpZ2l0cyAqLworICBVTlVNX0ZSQUNUSU9OX0RJR0lUUywKKyAgLyoq
IE11bHRpcGxpZXIgKi8KKyAgVU5VTV9NVUxUSVBMSUVSLAorICAvKiogR3JvdXBpbmcgc2l6ZSAq
LworICBVTlVNX0dST1VQSU5HX1NJWkUsCisgIC8qKiBSb3VuZGluZyBNb2RlICovCisgIFVOVU1f
Uk9VTkRJTkdfTU9ERSwKKyAgLyoqIFJvdW5kaW5nIGluY3JlbWVudCAqLworICBVTlVNX1JPVU5E
SU5HX0lOQ1JFTUVOVCwKKyAgLyoqIFRoZSB3aWR0aCB0byB3aGljaCB0aGUgb3V0cHV0IG9mIDxj
b2RlPmZvcm1hdCgpPC9jb2RlPiBpcyBwYWRkZWQuICovCisgIFVOVU1fRk9STUFUX1dJRFRILAor
ICAvKiogVGhlIHBvc2l0aW9uIGF0IHdoaWNoIHBhZGRpbmcgd2lsbCB0YWtlIHBsYWNlLiAqLwor
ICBVTlVNX1BBRERJTkdfUE9TSVRJT04sCisgIC8qKiBTZWNvbmRhcnkgZ3JvdXBpbmcgc2l6ZSAq
LworICBVTlVNX1NFQ09OREFSWV9HUk9VUElOR19TSVpFLAorICAvKiogVXNlIHNpZ25pZmljYW50
IGRpZ2l0cworICAgKiBAc3RhYmxlIElDVSAzLjAgKi8KKyAgVU5VTV9TSUdOSUZJQ0FOVF9ESUdJ
VFNfVVNFRCwKKyAgLyoqIE1pbmltdW0gc2lnbmlmaWNhbnQgZGlnaXRzCisgICAqIEBzdGFibGUg
SUNVIDMuMCAqLworICBVTlVNX01JTl9TSUdOSUZJQ0FOVF9ESUdJVFMsCisgIC8qKiBNYXhpbXVt
IHNpZ25pZmljYW50IGRpZ2l0cworICAgKiBAc3RhYmxlIElDVSAzLjAgKi8KKyAgVU5VTV9NQVhf
U0lHTklGSUNBTlRfRElHSVRTLAorICAvKiogTGVuaWVudCBwYXJzZSBtb2RlIHVzZWQgYnkgcnVs
ZS1iYXNlZCBmb3JtYXRzLgorICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICovCisgIFVOVU1fTEVO
SUVOVF9QQVJTRQorfSBVTnVtYmVyRm9ybWF0QXR0cmlidXRlOworCisvKioKKyogR2V0IGEgbnVt
ZXJpYyBhdHRyaWJ1dGUgYXNzb2NpYXRlZCB3aXRoIGEgVU51bWJlckZvcm1hdC4KKyogQW4gZXhh
bXBsZSBvZiBhIG51bWVyaWMgYXR0cmlidXRlIGlzIHRoZSBudW1iZXIgb2YgaW50ZWdlciBkaWdp
dHMgYSBmb3JtYXR0ZXIgd2lsbCBwcm9kdWNlLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIg
dG8gcXVlcnkuCisqIEBwYXJhbSBhdHRyIFRoZSBhdHRyaWJ1dGUgdG8gcXVlcnk7IG9uZSBvZiBV
TlVNX1BBUlNFX0lOVF9PTkxZLCBVTlVNX0dST1VQSU5HX1VTRUQsCisqIFVOVU1fREVDSU1BTF9B
TFdBWVNfU0hPV04sIFVOVU1fTUFYX0lOVEVHRVJfRElHSVRTLCBVTlVNX01JTl9JTlRFR0VSX0RJ
R0lUUywgVU5VTV9JTlRFR0VSX0RJR0lUUywKKyogVU5VTV9NQVhfRlJBQ1RJT05fRElHSVRTLCBV
TlVNX01JTl9GUkFDVElPTl9ESUdJVFMsIFVOVU1fRlJBQ1RJT05fRElHSVRTLCBVTlVNX01VTFRJ
UExJRVIsCisqIFVOVU1fR1JPVVBJTkdfU0laRSwgVU5VTV9ST1VORElOR19NT0RFLCBVTlVNX0ZP
Uk1BVF9XSURUSCwgVU5VTV9QQURESU5HX1BPU0lUSU9OLCBVTlVNX1NFQ09OREFSWV9HUk9VUElO
R19TSVpFLgorKiBAcmV0dXJuIFRoZSB2YWx1ZSBvZiBhdHRyLgorKiBAc2VlIHVudW1fc2V0QXR0
cmlidXRlCisqIEBzZWUgdW51bV9nZXREb3VibGVBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX3NldERv
dWJsZUF0dHJpYnV0ZQorKiBAc2VlIHVudW1fZ2V0VGV4dEF0dHJpYnV0ZQorKiBAc2VlIHVudW1f
c2V0VGV4dEF0dHJpYnV0ZQorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBpbnQzMl90
IFVfRVhQT1JUMiAKK3VudW1fZ2V0QXR0cmlidXRlKGNvbnN0IFVOdW1iZXJGb3JtYXQqICAgICAg
ICAgIGZtdCwKKyAgICAgICAgICBVTnVtYmVyRm9ybWF0QXR0cmlidXRlICBhdHRyKTsKKworLyoq
CisqIFNldCBhIG51bWVyaWMgYXR0cmlidXRlIGFzc29jaWF0ZWQgd2l0aCBhIFVOdW1iZXJGb3Jt
YXQuCisqIEFuIGV4YW1wbGUgb2YgYSBudW1lcmljIGF0dHJpYnV0ZSBpcyB0aGUgbnVtYmVyIG9m
IGludGVnZXIgZGlnaXRzIGEgZm9ybWF0dGVyIHdpbGwgcHJvZHVjZS4gIElmIHRoZQorKiBmb3Jt
YXR0ZXIgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUgYXR0cmlidXRlLCB0aGUgY2FsbCBpcyBpZ25v
cmVkLiAgUnVsZS1iYXNlZCBmb3JtYXR0ZXJzIG9ubHkgdW5kZXJzdGFuZAorKiB0aGUgbGVuaWVu
dC1wYXJzZSBhdHRyaWJ1dGUuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBzZXQuCisq
IEBwYXJhbSBhdHRyIFRoZSBhdHRyaWJ1dGUgdG8gc2V0OyBvbmUgb2YgVU5VTV9QQVJTRV9JTlRf
T05MWSwgVU5VTV9HUk9VUElOR19VU0VELAorKiBVTlVNX0RFQ0lNQUxfQUxXQVlTX1NIT1dOLCBV
TlVNX01BWF9JTlRFR0VSX0RJR0lUUywgVU5VTV9NSU5fSU5URUdFUl9ESUdJVFMsIFVOVU1fSU5U
RUdFUl9ESUdJVFMsCisqIFVOVU1fTUFYX0ZSQUNUSU9OX0RJR0lUUywgVU5VTV9NSU5fRlJBQ1RJ
T05fRElHSVRTLCBVTlVNX0ZSQUNUSU9OX0RJR0lUUywgVU5VTV9NVUxUSVBMSUVSLAorKiBVTlVN
X0dST1VQSU5HX1NJWkUsIFVOVU1fUk9VTkRJTkdfTU9ERSwgVU5VTV9GT1JNQVRfV0lEVEgsIFVO
VU1fUEFERElOR19QT1NJVElPTiwgVU5VTV9TRUNPTkRBUllfR1JPVVBJTkdfU0laRSwKKyogb3Ig
VU5VTV9MRU5JRU5UX1BBUlNFLgorKiBAcGFyYW0gbmV3VmFsdWUgVGhlIG5ldyB2YWx1ZSBvZiBh
dHRyLgorKiBAc2VlIHVudW1fZ2V0QXR0cmlidXRlCisqIEBzZWUgdW51bV9nZXREb3VibGVBdHRy
aWJ1dGUKKyogQHNlZSB1bnVtX3NldERvdWJsZUF0dHJpYnV0ZQorKiBAc2VlIHVudW1fZ2V0VGV4
dEF0dHJpYnV0ZQorKiBAc2VlIHVudW1fc2V0VGV4dEF0dHJpYnV0ZQorKiBAc3RhYmxlIElDVSAy
LjAKKyovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VudW1fc2V0QXR0cmlidXRlKCAgICBV
TnVtYmVyRm9ybWF0KiAgICAgICAgICBmbXQsCisgICAgICAgICAgICBVTnVtYmVyRm9ybWF0QXR0
cmlidXRlICBhdHRyLAorICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgbmV3VmFs
dWUpOworCisKKy8qKgorKiBHZXQgYSBudW1lcmljIGF0dHJpYnV0ZSBhc3NvY2lhdGVkIHdpdGgg
YSBVTnVtYmVyRm9ybWF0LgorKiBBbiBleGFtcGxlIG9mIGEgbnVtZXJpYyBhdHRyaWJ1dGUgaXMg
dGhlIG51bWJlciBvZiBpbnRlZ2VyIGRpZ2l0cyBhIGZvcm1hdHRlciB3aWxsIHByb2R1Y2UuCisq
IElmIHRoZSBmb3JtYXR0ZXIgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUgYXR0cmlidXRlLCAtMSBp
cyByZXR1cm5lZC4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHF1ZXJ5LgorKiBAcGFy
YW0gYXR0ciBUaGUgYXR0cmlidXRlIHRvIHF1ZXJ5OyBlLmcuIFVOVU1fUk9VTkRJTkdfSU5DUkVN
RU5ULgorKiBAcmV0dXJuIFRoZSB2YWx1ZSBvZiBhdHRyLgorKiBAc2VlIHVudW1fZ2V0QXR0cmli
dXRlCisqIEBzZWUgdW51bV9zZXRBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX3NldERvdWJsZUF0dHJp
YnV0ZQorKiBAc2VlIHVudW1fZ2V0VGV4dEF0dHJpYnV0ZQorKiBAc2VlIHVudW1fc2V0VGV4dEF0
dHJpYnV0ZQorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBkb3VibGUgVV9FWFBPUlQy
IAordW51bV9nZXREb3VibGVBdHRyaWJ1dGUoY29uc3QgVU51bWJlckZvcm1hdCogICAgICAgICAg
Zm10LAorICAgICAgICAgIFVOdW1iZXJGb3JtYXRBdHRyaWJ1dGUgIGF0dHIpOworCisvKioKKyog
U2V0IGEgbnVtZXJpYyBhdHRyaWJ1dGUgYXNzb2NpYXRlZCB3aXRoIGEgVU51bWJlckZvcm1hdC4K
KyogQW4gZXhhbXBsZSBvZiBhIG51bWVyaWMgYXR0cmlidXRlIGlzIHRoZSBudW1iZXIgb2YgaW50
ZWdlciBkaWdpdHMgYSBmb3JtYXR0ZXIgd2lsbCBwcm9kdWNlLgorKiBJZiB0aGUgZm9ybWF0dGVy
IGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlIGF0dHJpYnV0ZSwgdGhpcyBjYWxsIGlzIGlnbm9yZWQu
CisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBzZXQuCisqIEBwYXJhbSBhdHRyIFRoZSBh
dHRyaWJ1dGUgdG8gc2V0OyBlLmcuIFVOVU1fUk9VTkRJTkdfSU5DUkVNRU5ULgorKiBAcGFyYW0g
bmV3VmFsdWUgVGhlIG5ldyB2YWx1ZSBvZiBhdHRyLgorKiBAc2VlIHVudW1fZ2V0QXR0cmlidXRl
CisqIEBzZWUgdW51bV9zZXRBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX2dldERvdWJsZUF0dHJpYnV0
ZQorKiBAc2VlIHVudW1fZ2V0VGV4dEF0dHJpYnV0ZQorKiBAc2VlIHVudW1fc2V0VGV4dEF0dHJp
YnV0ZQorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3Vu
dW1fc2V0RG91YmxlQXR0cmlidXRlKCAgICBVTnVtYmVyRm9ybWF0KiAgICAgICAgICBmbXQsCisg
ICAgICAgICAgICBVTnVtYmVyRm9ybWF0QXR0cmlidXRlICBhdHRyLAorICAgICAgICAgICAgZG91
YmxlICAgICAgICAgICAgICAgICBuZXdWYWx1ZSk7CisKKy8qKiBUaGUgcG9zc2libGUgVU51bWJl
ckZvcm1hdCB0ZXh0IGF0dHJpYnV0ZXMgQHN0YWJsZSBJQ1UgMi4wKi8KK3R5cGVkZWYgZW51bSBV
TnVtYmVyRm9ybWF0VGV4dEF0dHJpYnV0ZSB7CisgIC8qKiBQb3NpdGl2ZSBwcmVmaXggKi8KKyAg
VU5VTV9QT1NJVElWRV9QUkVGSVgsCisgIC8qKiBQb3NpdGl2ZSBzdWZmaXggKi8KKyAgVU5VTV9Q
T1NJVElWRV9TVUZGSVgsCisgIC8qKiBOZWdhdGl2ZSBwcmVmaXggKi8KKyAgVU5VTV9ORUdBVElW
RV9QUkVGSVgsCisgIC8qKiBOZWdhdGl2ZSBzdWZmaXggKi8KKyAgVU5VTV9ORUdBVElWRV9TVUZG
SVgsCisgIC8qKiBUaGUgY2hhcmFjdGVyIHVzZWQgdG8gcGFkIHRvIHRoZSBmb3JtYXQgd2lkdGgu
ICovCisgIFVOVU1fUEFERElOR19DSEFSQUNURVIsCisgIC8qKiBUaGUgSVNPIGN1cnJlbmN5IGNv
ZGUgKi8KKyAgVU5VTV9DVVJSRU5DWV9DT0RFLAorICAvKioKKyAgICogVGhlIGRlZmF1bHQgcnVs
ZSBzZXQuICBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIHdpdGggcnVsZS1iYXNlZCBmb3JtYXR0ZXJz
LgorICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICovCisgIFVOVU1fREVGQVVMVF9SVUxFU0VULAor
ICAvKioKKyAgICogVGhlIHB1YmxpYyBydWxlIHNldHMuICBUaGlzIGlzIG9ubHkgYXZhaWxhYmxl
IHdpdGggcnVsZS1iYXNlZCBmb3JtYXR0ZXJzLgorICAgKiBUaGlzIGlzIGEgcmVhZC1vbmx5IGF0
dHJpYnV0ZS4gIFRoZSBwdWJsaWMgcnVsZXNldHMgYXJlIHJldHVybmVkIGFzIGEKKyAgICogc2lu
Z2xlIHN0cmluZywgd2l0aCBlYWNoIHJ1bGVzZXQgbmFtZSBkZWxpbWl0ZWQgYnkgJzsnIChzZW1p
Y29sb24pLgorICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICovCisgIFVOVU1fUFVCTElDX1JVTEVT
RVRTCit9IFVOdW1iZXJGb3JtYXRUZXh0QXR0cmlidXRlOworCisvKioKKyogR2V0IGEgdGV4dCBh
dHRyaWJ1dGUgYXNzb2NpYXRlZCB3aXRoIGEgVU51bWJlckZvcm1hdC4KKyogQW4gZXhhbXBsZSBv
ZiBhIHRleHQgYXR0cmlidXRlIGlzIHRoZSBzdWZmaXggZm9yIHBvc2l0aXZlIG51bWJlcnMuICBJ
ZiB0aGUgZm9ybWF0dGVyCisqIGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlIGF0dHJpYnV0cmUsIFVf
VU5TVVBQT1JURURfRVJST1IgaXMgcmV0dXJuZWQgYXMgdGhlIHN0YXR1cy4KKyogUnVsZS1iYXNl
ZCBmb3JtYXR0ZXJzIG9ubHkgdW5kZXJzdGFuZCBVTlVNX0RFRkFVTFRfUlVMRVNFVCBhbmQgVU5V
TV9QVUJMSUNfUlVMRVNFVFMuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBxdWVyeS4K
KyogQHBhcmFtIHRhZyBUaGUgYXR0cmlidXRlIHRvIHF1ZXJ5OyBvbmUgb2YgVU5VTV9QT1NJVElW
RV9QUkVGSVgsIFVOVU1fUE9TSVRJVkVfU1VGRklYLAorKiBVTlVNX05FR0FUSVZFX1BSRUZJWCwg
VU5VTV9ORUdBVElWRV9TVUZGSVgsIFVOVU1fUEFERElOR19DSEFSQUNURVIsIFVOVU1fQ1VSUkVO
Q1lfQ09ERSwKKyogVU5VTV9ERUZBVUxUX1JVTEVTRVQsIG9yIFVOVU1fUFVCTElDX1JVTEVTRVRT
LgorKiBAcGFyYW0gcmVzdWx0IEEgcG9pbnRlciB0byBhIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBh
dHRyaWJ1dGUuCisqIEBwYXJhbSByZXN1bHRMZW5ndGggVGhlIG1heGltdW0gc2l6ZSBvZiByZXN1
bHQuCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2
ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYg
Z3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorKiBA
c2VlIHVudW1fc2V0VGV4dEF0dHJpYnV0ZQorKiBAc2VlIHVudW1fZ2V0QXR0cmlidXRlCisqIEBz
ZWUgdW51bV9zZXRBdHRyaWJ1dGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50
MzJfdCBVX0VYUE9SVDIgCit1bnVtX2dldFRleHRBdHRyaWJ1dGUoICAgIGNvbnN0ICAgIFVOdW1i
ZXJGb3JtYXQqICAgICAgICAgICAgICAgICAgICBmbXQsCisgICAgICAgICAgICBVTnVtYmVyRm9y
bWF0VGV4dEF0dHJpYnV0ZSAgICAgIHRhZywKKyAgICAgICAgICAgIFVDaGFyKiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQsCisgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAgICAgIFVFcnJvckNvZGUqICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdHVzKTsKKworLyoqCisqIFNldCBhIHRleHQgYXR0cmli
dXRlIGFzc29jaWF0ZWQgd2l0aCBhIFVOdW1iZXJGb3JtYXQuCisqIEFuIGV4YW1wbGUgb2YgYSB0
ZXh0IGF0dHJpYnV0ZSBpcyB0aGUgc3VmZml4IGZvciBwb3NpdGl2ZSBudW1iZXJzLiAgUnVsZS1i
YXNlZCBmb3JtYXR0ZXJzCisqIG9ubHkgdW5kZXJzdGFuZCBVTlVNX0RFRkFVTFRfUlVMRVNFVC4K
KyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHNldC4KKyogQHBhcmFtIHRhZyBUaGUgYXR0
cmlidXRlIHRvIHNldDsgb25lIG9mIFVOVU1fUE9TSVRJVkVfUFJFRklYLCBVTlVNX1BPU0lUSVZF
X1NVRkZJWCwKKyogVU5VTV9ORUdBVElWRV9QUkVGSVgsIFVOVU1fTkVHQVRJVkVfU1VGRklYLCBV
TlVNX1BBRERJTkdfQ0hBUkFDVEVSLCBVTlVNX0NVUlJFTkNZX0NPREUsCisqIG9yIFVOVU1fREVG
QVVMVF9SVUxFU0VULgorKiBAcGFyYW0gbmV3VmFsdWUgVGhlIG5ldyB2YWx1ZSBvZiBhdHRyLgor
KiBAcGFyYW0gbmV3VmFsdWVMZW5ndGggVGhlIGxlbmd0aCBvZiBuZXdWYWx1ZSwgb3IgLTEgaWYg
bnVsbC10ZXJtaW5hdGVkLgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JD
b2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAc2VlIHVudW1fZ2V0VGV4dEF0dHJpYnV0ZQor
KiBAc2VlIHVudW1fZ2V0QXR0cmlidXRlCisqIEBzZWUgdW51bV9zZXRBdHRyaWJ1dGUKKyogQHN0
YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1bnVtX3NldFRleHRB
dHRyaWJ1dGUoICAgIFVOdW1iZXJGb3JtYXQqICAgICAgICAgICAgICAgICAgICBmbXQsCisgICAg
ICAgICAgICBVTnVtYmVyRm9ybWF0VGV4dEF0dHJpYnV0ZSAgICAgIHRhZywKKyAgICAgICAgICAg
IGNvbnN0ICAgIFVDaGFyKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSwKKyAg
ICAgICAgICAgIGludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWVMZW5n
dGgsCisgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXR1
cyk7CisKKy8qKgorICogRXh0cmFjdCB0aGUgcGF0dGVybiBmcm9tIGEgVU51bWJlckZvcm1hdC4g
IFRoZSBwYXR0ZXJuIHdpbGwgZm9sbG93CisgKiB0aGUgRGVjaW1hbEZvcm1hdCBwYXR0ZXJuIHN5
bnRheC4KKyAqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBxdWVyeS4KKyAqIEBwYXJhbSBp
c1BhdHRlcm5Mb2NhbGl6ZWQgVFJVRSBpZiB0aGUgcGF0dGVybiBzaG91bGQgYmUgbG9jYWxpemVk
LAorICogRkFMU0Ugb3RoZXJ3aXNlLiAgVGhpcyBpcyBpZ25vcmVkIGlmIHRoZSBmb3JtYXR0ZXIg
aXMgYSBydWxlLWJhc2VkCisgKiBmb3JtYXR0ZXIuCisgKiBAcGFyYW0gcmVzdWx0IEEgcG9pbnRl
ciB0byBhIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBwYXR0ZXJuLgorICogQHBhcmFtIHJlc3VsdExl
bmd0aCBUaGUgbWF4aW11bSBzaXplIG9mIHJlc3VsdC4KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2lu
dGVyIHRvIGFuIGlucHV0LW91dHB1dCBVRXJyb3JDb2RlLgorICogQHJldHVybiBUaGUgdG90YWwg
YnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVyIHRoYW4gcmVzdWx0TGVuZ3RoLAorICogdGhl
IG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorICogQHNlZSB1bnVtX2FwcGx5UGF0dGVybgorICogQHNl
ZSBEZWNpbWFsRm9ybWF0CisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgaW50MzJf
dCBVX0VYUE9SVDIgCit1bnVtX3RvUGF0dGVybiggICAgY29uc3QgICAgVU51bWJlckZvcm1hdCog
ICAgICAgICAgZm10LAorICAgICAgICBVQm9vbCAgICAgICAgICAgICAgICAgIGlzUGF0dGVybkxv
Y2FsaXplZCwKKyAgICAgICAgVUNoYXIqICAgICAgICAgICAgICAgICAgcmVzdWx0LAorICAgICAg
ICBpbnQzMl90ICAgICAgICAgICAgICAgICByZXN1bHRMZW5ndGgsCisgICAgICAgIFVFcnJvckNv
ZGUqICAgICAgICAgICAgIHN0YXR1cyk7CisKKworLyoqCisgKiBDb25zdGFudHMgZm9yIHNwZWNp
ZnlpbmcgYSBudW1iZXIgZm9ybWF0IHN5bWJvbC4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCit0
eXBlZGVmIGVudW0gVU51bWJlckZvcm1hdFN5bWJvbCB7CisgIC8qKiBUaGUgZGVjaW1hbCBzZXBh
cmF0b3IgKi8KKyAgVU5VTV9ERUNJTUFMX1NFUEFSQVRPUl9TWU1CT0wgPSAwLAorICAvKiogVGhl
IGdyb3VwaW5nIHNlcGFyYXRvciAqLworICBVTlVNX0dST1VQSU5HX1NFUEFSQVRPUl9TWU1CT0wg
PSAxLAorICAvKiogVGhlIHBhdHRlcm4gc2VwYXJhdG9yICovCisgIFVOVU1fUEFUVEVSTl9TRVBB
UkFUT1JfU1lNQk9MID0gMiwKKyAgLyoqIFRoZSBwZXJjZW50IHNpZ24gKi8KKyAgVU5VTV9QRVJD
RU5UX1NZTUJPTCA9IDMsCisgIC8qKiBaZXJvKi8KKyAgVU5VTV9aRVJPX0RJR0lUX1NZTUJPTCA9
IDQsCisgIC8qKiBDaGFyYWN0ZXIgcmVwcmVzZW50aW5nIGEgZGlnaXQgaW4gdGhlIHBhdHRlcm4g
Ki8KKyAgVU5VTV9ESUdJVF9TWU1CT0wgPSA1LAorICAvKiogVGhlIG1pbnVzIHNpZ24gKi8KKyAg
VU5VTV9NSU5VU19TSUdOX1NZTUJPTCA9IDYsCisgIC8qKiBUaGUgcGx1cyBzaWduICovCisgIFVO
VU1fUExVU19TSUdOX1NZTUJPTCA9IDcsCisgIC8qKiBUaGUgY3VycmVuY3kgc3ltYm9sICovCisg
IFVOVU1fQ1VSUkVOQ1lfU1lNQk9MID0gOCwKKyAgLyoqIFRoZSBpbnRlcm5hdGlvbmFsIGN1cnJl
bmN5IHN5bWJvbCAqLworICBVTlVNX0lOVExfQ1VSUkVOQ1lfU1lNQk9MID0gOSwKKyAgLyoqIFRo
ZSBtb25ldGFyeSBzZXBhcmF0b3IgKi8KKyAgVU5VTV9NT05FVEFSWV9TRVBBUkFUT1JfU1lNQk9M
ID0gMTAsCisgIC8qKiBUaGUgZXhwb25lbnRpYWwgc3ltYm9sICovCisgIFVOVU1fRVhQT05FTlRJ
QUxfU1lNQk9MID0gMTEsCisgIC8qKiBQZXIgbWlsbCBzeW1ib2wgKi8KKyAgVU5VTV9QRVJNSUxM
X1NZTUJPTCA9IDEyLAorICAvKiogRXNjYXBlIHBhZGRpbmcgY2hhcmFjdGVyICovCisgIFVOVU1f
UEFEX0VTQ0FQRV9TWU1CT0wgPSAxMywKKyAgLyoqIEluZmluaXR5IHN5bWJvbCAqLworICBVTlVN
X0lORklOSVRZX1NZTUJPTCA9IDE0LAorICAvKiogTmFuIHN5bWJvbCAqLworICBVTlVNX05BTl9T
WU1CT0wgPSAxNSwKKyAgLyoqIFNpZ25pZmljYW50IGRpZ2l0IHN5bWJvbAorICAgKiBAc3RhYmxl
IElDVSAzLjAgKi8KKyAgVU5VTV9TSUdOSUZJQ0FOVF9ESUdJVF9TWU1CT0wgPSAxNiwKKyAgLyoq
IFRoZSBtb25ldGFyeSBncm91cGluZyBzZXBhcmF0b3IgCisgICAqIEBzdGFibGUgSUNVIDMuNgor
ICAgKi8KKyAgVU5VTV9NT05FVEFSWV9HUk9VUElOR19TRVBBUkFUT1JfU1lNQk9MID0gMTcsICAK
KyAgLyoqIE9uZQorICAgKiBAZHJhZnQgSUNVIDQuNgorICAgKi8KKyAgVU5VTV9PTkVfRElHSVRf
U1lNQk9MID0gMTgsCisgIC8qKiBUd28KKyAgICogQGRyYWZ0IElDVSA0LjYKKyAgICovCisgIFVO
VU1fVFdPX0RJR0lUX1NZTUJPTCA9IDE5LAorICAvKiogVGhyZWUKKyAgICogQGRyYWZ0IElDVSA0
LjYKKyAgICovCisgIFVOVU1fVEhSRUVfRElHSVRfU1lNQk9MID0gMjAsCisgIC8qKiBGb3VyCisg
ICAqIEBkcmFmdCBJQ1UgNC42CisgICAqLworICBVTlVNX0ZPVVJfRElHSVRfU1lNQk9MID0gMjEs
CisgIC8qKiBGaXZlCisgICAqIEBkcmFmdCBJQ1UgNC42CisgICAqLworICBVTlVNX0ZJVkVfRElH
SVRfU1lNQk9MID0gMjIsCisgIC8qKiBTaXgKKyAgICogQGRyYWZ0IElDVSA0LjYKKyAgICovCisg
IFVOVU1fU0lYX0RJR0lUX1NZTUJPTCA9IDIzLAorICAvKiogU2V2ZW4KKyAgICAqIEBkcmFmdCBJ
Q1UgNC42CisgICAqLworICBVTlVNX1NFVkVOX0RJR0lUX1NZTUJPTCA9IDI0LAorICAvKiogRWln
aHQKKyAgICogQGRyYWZ0IElDVSA0LjYKKyAgICovCisgIFVOVU1fRUlHSFRfRElHSVRfU1lNQk9M
ID0gMjUsCisgIC8qKiBOaW5lCisgICAqIEBkcmFmdCBJQ1UgNC42CisgICAqLworICBVTlVNX05J
TkVfRElHSVRfU1lNQk9MID0gMjYsCisgIC8qKiBjb3VudCBzeW1ib2wgY29uc3RhbnRzICovCisg
IFVOVU1fRk9STUFUX1NZTUJPTF9DT1VOVCA9IDI3Cit9IFVOdW1iZXJGb3JtYXRTeW1ib2w7CisK
Ky8qKgorKiBHZXQgYSBzeW1ib2wgYXNzb2NpYXRlZCB3aXRoIGEgVU51bWJlckZvcm1hdC4KKyog
QSBVTnVtYmVyRm9ybWF0IHVzZXMgc3ltYm9scyB0byByZXByZXNlbnQgdGhlIHNwZWNpYWwgbG9j
YWxlLWRlcGVuZGVudAorKiBjaGFyYWN0ZXJzIGluIGEgbnVtYmVyLCBmb3IgZXhhbXBsZSB0aGUg
cGVyY2VudCBzaWduLiBUaGlzIEFQSSBpcyBub3QKKyogc3VwcG9ydGVkIGZvciBydWxlLWJhc2Vk
IGZvcm1hdHRlcnMuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBxdWVyeS4KKyogQHBh
cmFtIHN5bWJvbCBUaGUgVU51bWJlckZvcm1hdFN5bWJvbCBjb25zdGFudCBmb3IgdGhlIHN5bWJv
bCB0byBnZXQKKyogQHBhcmFtIGJ1ZmZlciBUaGUgc3RyaW5nIGJ1ZmZlciB0aGF0IHdpbGwgcmVj
ZWl2ZSB0aGUgc3ltYm9sIHN0cmluZzsKKyogICAgICAgICAgICAgICBpZiBpdCBpcyBOVUxMLCB0
aGVuIG9ubHkgdGhlIGxlbmd0aCBvZiB0aGUgc3ltYm9sIGlzIHJldHVybmVkCisqIEBwYXJhbSBz
aXplIFRoZSBzaXplIG9mIHRoZSBzdHJpbmcgYnVmZmVyCisqIEBwYXJhbSBzdGF0dXMgQSBwb2lu
dGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhl
IGxlbmd0aCBvZiB0aGUgc3ltYm9sOyB0aGUgYnVmZmVyIGlzIG5vdCBtb2RpZmllZCBpZgorKiAg
ICAgICAgIDxjb2RlPmxlbmd0aCZndDs9c2l6ZTwvY29kZT4KKyogQHNlZSB1bnVtX3NldFN5bWJv
bAorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgordW51
bV9nZXRTeW1ib2woY29uc3QgVU51bWJlckZvcm1hdCAqZm10LAorICAgICAgICAgICAgICAgVU51
bWJlckZvcm1hdFN5bWJvbCBzeW1ib2wsCisgICAgICAgICAgICAgICBVQ2hhciAqYnVmZmVyLAor
ICAgICAgICAgICAgICAgaW50MzJfdCBzaXplLAorICAgICAgICAgICAgICAgVUVycm9yQ29kZSAq
c3RhdHVzKTsKKworLyoqCisqIFNldCBhIHN5bWJvbCBhc3NvY2lhdGVkIHdpdGggYSBVTnVtYmVy
Rm9ybWF0LgorKiBBIFVOdW1iZXJGb3JtYXQgdXNlcyBzeW1ib2xzIHRvIHJlcHJlc2VudCB0aGUg
c3BlY2lhbCBsb2NhbGUtZGVwZW5kZW50CisqIGNoYXJhY3RlcnMgaW4gYSBudW1iZXIsIGZvciBl
eGFtcGxlIHRoZSBwZXJjZW50IHNpZ24uICBUaGlzIEFQSSBpcyBub3QKKyogc3VwcG9ydGVkIGZv
ciBydWxlLWJhc2VkIGZvcm1hdHRlcnMuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBz
ZXQuCisqIEBwYXJhbSBzeW1ib2wgVGhlIFVOdW1iZXJGb3JtYXRTeW1ib2wgY29uc3RhbnQgZm9y
IHRoZSBzeW1ib2wgdG8gc2V0CisqIEBwYXJhbSB2YWx1ZSBUaGUgc3RyaW5nIHRvIHNldCB0aGUg
c3ltYm9sIHRvCisqIEBwYXJhbSBsZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLCBvciAt
MSBmb3IgYSB6ZXJvLXRlcm1pbmF0ZWQgc3RyaW5nCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVy
IHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzLgorKiBAc2VlIHVudW1fZ2V0
U3ltYm9sCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyCit1
bnVtX3NldFN5bWJvbChVTnVtYmVyRm9ybWF0ICpmbXQsCisgICAgICAgICAgICAgICBVTnVtYmVy
Rm9ybWF0U3ltYm9sIHN5bWJvbCwKKyAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICp2YWx1ZSwK
KyAgICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgVUVycm9yQ29k
ZSAqc3RhdHVzKTsKKworCisvKioKKyAqIEdldCB0aGUgbG9jYWxlIGZvciB0aGlzIG51bWJlciBm
b3JtYXQgb2JqZWN0LgorICogWW91IGNhbiBjaG9vc2UgYmV0d2VlbiB2YWxpZCBhbmQgYWN0dWFs
IGxvY2FsZS4KKyAqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBnZXQgdGhlIGxvY2FsZSBm
cm9tCisgKiBAcGFyYW0gdHlwZSB0eXBlIG9mIHRoZSBsb2NhbGUgd2UncmUgbG9va2luZyBmb3Ig
KHZhbGlkIG9yIGFjdHVhbCkgCisgKiBAcGFyYW0gc3RhdHVzIGVycm9yIGNvZGUgZm9yIHRoZSBv
cGVyYXRpb24KKyAqIEByZXR1cm4gdGhlIGxvY2FsZSBuYW1lCisgKiBAc3RhYmxlIElDVSAyLjgK
KyAqLworVV9TVEFCTEUgY29uc3QgY2hhciogVV9FWFBPUlQyCit1bnVtX2dldExvY2FsZUJ5VHlw
ZShjb25zdCBVTnVtYmVyRm9ybWF0ICpmbXQsCisgICAgICAgICAgICAgICAgICAgICBVTG9jRGF0
YUxvY2FsZVR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUqIHN0YXR1
cyk7IAorCisjZW5kaWYgLyogI2lmICFVQ09ORklHX05PX0ZPUk1BVFRJTkcgKi8KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdXR5cGVzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdXR5cGVzLmgKaW5kZXggMDBiZjE0
Y2U4ZTZlNWQ2ZWM4ZWQ4N2Q4ZTk1NjE3MGNhNTc3ODdiMi4uMWJjZjdmNWQzOTA5ZmY2NmI2NThl
YTk1YmE0YTJjZGViNTQ5YzljMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lj
dS91bmljb2RlL3V0eXBlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29k
ZS91dHlwZXMuaApAQCAtNTUsNyArNTUsNyBAQAogICovCiAjaWZkZWYgWFBfQ1BMVVNQTFVTCiAj
ICAgaWZuZGVmIFVfU0hPV19DUExVU1BMVVNfQVBJCi0jICAgICAgIGRlZmluZSBVX1NIT1dfQ1BM
VVNQTFVTX0FQSSAxCisjICAgICAgIGRlZmluZSBVX1NIT1dfQ1BMVVNQTFVTX0FQSSAwCiAjICAg
ZW5kaWYKICNlbHNlCiAjICAgdW5kZWYgVV9TSE9XX0NQTFVTUExVU19BUEkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCmluZGV4IDE2M2Ix
MTYxMDQxY2NkYjM1YWQ1Mjk3NmNhZmU2YmQxMWRmYzhiNzcuLmM1MWI0NmQ3MTZhMjU5OTdhMTcz
MTY4M2JmZjc4Y2EzNDFjNDFmYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaApAQCAtMTQyLDYgKzE0Miw3IEBACiAgICAgbWFjcm8o
bGFzdEluZGV4KSBcCiAgICAgbWFjcm8obGVuZ3RoKSBcCiAgICAgbWFjcm8obGluZSkgXAorICAg
IG1hY3JvKGxvY2FsZU1hdGNoZXIpIFwKICAgICBtYWNybyhtZXNzYWdlKSBcCiAgICAgbWFjcm8o
bXVsdGlsaW5lKSBcCiAgICAgbWFjcm8obmFtZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yQ29uc3RydWN0b3IuY3BwCmluZGV4IGQ0
MWRkMTdjZDhlYjExMmEyMWVmYjZjMjFhMTQ0OTRmYjJlZDZkNjUuLjMxMDdiM2Y1ZTk0ZGM4YWRl
YjFiOTY4NWNmYjM1MGY0NzMxZGZkYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5jcHAKQEAgLTE1MCwyNSAr
MTUwLDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG9yQ29uc3Ry
dWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKEV4ZWNTCiAgICAgLy8gMTAuMi4yIEludGwuQ29s
bGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKGxvY2FsZXMgWywgb3B0aW9uc10pIChFQ01BLTQwMiAy
LjApCiAKICAgICAvLyAxLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2Nh
bGVMaXN0KGxvY2FsZXMpLgotICAgIC8vIEZJWE1FOiByZXF1ZXN0ZWQgPSBDYW5vbmljYWxpemVM
b2NhbGVMaXN0KGxvY2FsZXMpOworICAgIEpTQXJyYXkqIHJlcXVlc3RlZExvY2FsZXMgPSBjYW5v
bmljYWxpemVMb2NhbGVMaXN0KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKIAogICAgIC8vIDIu
IFJldHVybklmQWJydXB0KHJlcXVlc3RlZExvY2FsZXMpLgotICAgIC8vIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKLSAgICAvLyAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyAzLiBSZXR1cm4gU3VwcG9ydGVk
TG9jYWxlcyglQ29sbGF0b3IlLltbYXZhaWxhYmxlTG9jYWxlc11dLCByZXF1ZXN0ZWRMb2NhbGVz
LCBvcHRpb25zKS4KLSAgICAvLyBGSVhNRTogcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTdXBwb3J0
ZWRMb2NhbGVzKGF2YWlsYWJsZSwgcmVxdWVzdGVkLCBvcHRpb25zKSk7Ci0KLSAgICAvLyBSZXR1
cm4gZW1wdHkgYXJyYXkgdW50aWwgcHJvcGVybHkgaW1wbGVtZW50ZWQuCi0gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2Fs
bGVlKCktPmdsb2JhbE9iamVjdCgpOwotICAgIEpTQXJyYXkqIHN1cHBvcnRlZExvY2FsZXMgPSBK
U0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBnbG9iYWxPYmplY3QtPmFycmF5U3Ry
dWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhVbmRlY2lkZWQp
LCAwKTsKLSAgICBpZiAoIXN1cHBvcnRlZExvY2FsZXMpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKLQotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoc3VwcG9ydGVkTG9jYWxlcyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShzdXBwb3J0ZWRMb2NhbGVzKGV4ZWMsIGdsb2JhbE9iamVjdC0+aW50bENvbGxhdG9yQXZhaWxh
YmxlTG9jYWxlcygpLCByZXF1ZXN0ZWRMb2NhbGVzLCBleGVjLT5hcmd1bWVudCgxKSkpOwogfQot
ICAgIAorCiB2b2lkIEludGxDb2xsYXRvckNvbnN0cnVjdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSW50bENvbGxhdG9yQ29uc3Ry
dWN0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW50bENvbGxhdG9yQ29uc3RydWN0b3IqPihjZWxs
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGlt
ZUZvcm1hdENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAppbmRleCAwYjhkNDYwZDI2NzQxYTRiOTMz
NmI4Y2IwZjhiNjRmYjc4ZDA2ODdkLi45OGQzYmJlM2Q0MGUyYWNmZWI3MjhmOGEzNjA1NDM0NTUy
NjAzNzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0
ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwCkBAIC0xNTAsMjIgKzE1MCwx
NiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGltZUZvcm1hdENvbnN0
cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZgogICAgIC8vIDEyLjIuMiBJbnRsLkRhdGVUaW1l
Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVzIFssIG9wdGlvbnNdKSAoRUNNQS00MDIg
Mi4wKQogCiAgICAgLy8gMS4gTGV0IGF2YWlsYWJsZUxvY2FsZXMgYmUgJURhdGVUaW1lRm9ybWF0
JS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4KLSAgICAvLyBGSVhNRTogYXZhaWxhYmxlID0gSW50bERh
dGVUaW1lRm9ybWF0Q29uc3RydWN0b3I6OmdldEF2YWlsYWJsZUxvY2FsZXMoKQorICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7
CisgICAgY29uc3QgSGFzaFNldDxTdHJpbmc+IGF2YWlsYWJsZUxvY2FsZXMgPSBnbG9iYWxPYmpl
Y3QtPmludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKIAogICAgIC8vIDIuIExl
dCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCi0g
ICAgLy8gRklYTUU6IHJlcXVlc3RlZCA9IENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykK
KyAgICBKU0FycmF5KiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChl
eGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8g
My4gUmV0dXJuIFN1cHBvcnRlZExvY2FsZXMoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9j
YWxlcywgb3B0aW9ucykuCi0gICAgLy8gRklYTUU6IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3Vw
cG9ydGVkTG9jYWxlcyhhdmFpbGFibGUsIHJlcXVlc3RlZCwgb3B0aW9ucykpOwotCi0gICAgLy8g
UmV0dXJuIGVtcHR5IGFycmF5IHVudGlsIHByb3Blcmx5IGltcGxlbWVudGVkLgotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMt
PmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKTsKLSAgICBKU0FycmF5KiBzdXBwb3J0ZWRMb2NhbGVz
ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgZ2xvYmFsT2JqZWN0LT5hcnJh
eVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoVW5kZWNp
ZGVkKSwgMCk7Ci0gICAgaWYgKCFzdXBwb3J0ZWRMb2NhbGVzKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7Ci0KLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHN1cHBvcnRlZExvY2FsZXMpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoc3VwcG9ydGVkTG9jYWxlcyhleGVjLCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRM
b2NhbGVzLCBleGVjLT5hcmd1bWVudCgxKSkpOwogfQogICAgIAogdm9pZCBJbnRsRGF0ZVRpbWVG
b3JtYXRDb25zdHJ1Y3Rvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggYjg2MzlkNmIxNGM3MDA3
YTg3MTAyNTU3N2FhZTJlZDI5ZmJjZDJlMS4uZDA2NmVlODA0YmY3ODYyZDA0Y2UxY2FkOTdmZmJl
YjFjMWZjYzYwOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwCkBAIC0xNTAsMjIgKzE1MCwx
NiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3JtYXRDb25zdHJ1
Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YoRQogICAgIC8vIDExLjIuMiBJbnRsLk51bWJlckZv
cm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YobG9jYWxlcyBbLCBvcHRpb25zXSkgKEVDTUEtNDAyIDIu
MCkKIAogICAgIC8vIDEuIExldCBhdmFpbGFibGVMb2NhbGVzIGJlICVOdW1iZXJGb3JtYXQlLltb
YXZhaWxhYmxlTG9jYWxlc11dLgotICAgIC8vIEZJWE1FOiBhdmFpbGFibGUgPSBJbnRsTnVtYmVy
Rm9ybWF0Q29uc3RydWN0b3I6OmdldEF2YWlsYWJsZUxvY2FsZXMoKQorICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7CisgICAg
Y29uc3QgSGFzaFNldDxTdHJpbmc+IGF2YWlsYWJsZUxvY2FsZXMgPSBnbG9iYWxPYmplY3QtPmlu
dGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CiAKICAgICAvLyAyLiBMZXQgcmVxdWVz
dGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgotICAgIC8vIEZJ
WE1FOiByZXF1ZXN0ZWQgPSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpCisgICAgSlNB
cnJheSogcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZXhlYywgZXhl
Yy0+YXJndW1lbnQoMCkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDMuIFJldHVy
biBTdXBwb3J0ZWRMb2NhbGVzKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9w
dGlvbnMpLgotICAgIC8vIEZJWE1FOiByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN1cHBvcnRlZExv
Y2FsZXMoYXZhaWxhYmxlLCByZXF1ZXN0ZWQsIG9wdGlvbnMpKTsKLQotICAgIC8vIFJldHVybiBl
bXB0eSBhcnJheSB1bnRpbCBwcm9wZXJseSBpbXBsZW1lbnRlZC4KLSAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5jYWxsZWUo
KS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgSlNBcnJheSogc3VwcG9ydGVkTG9jYWxlcyA9IEpTQXJy
YXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1
cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aFVuZGVjaWRlZCksIDAp
OwotICAgIGlmICghc3VwcG9ydGVkTG9jYWxlcykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYykpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShzdXBwb3J0ZWRMb2NhbGVzKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN1
cHBvcnRlZExvY2FsZXMoZXhlYywgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywg
ZXhlYy0+YXJndW1lbnQoMSkpKTsKIH0KIAogdm9pZCBJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0
b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAKaW5kZXggYmE0NTdl
NzI1NjA5MTA3ODkxMjJmNTEzNzVlZTlmZGMxMDI0ZDMyZi4uNjQ3ZjM1YzMzZWRhYmM0YjVhYzE3
ZmQxYjRmOTdiZWQyZDVhOTY2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bE9iamVjdC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShJTlRMKQogCisj
aW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJGdW5jdGlvblByb3RvdHlwZS5oIgogI2luY2x1
ZGUgIkludGxDb2xsYXRvci5oIgogI2luY2x1ZGUgIkludGxDb2xsYXRvckNvbnN0cnVjdG9yLmgi
CkBAIC0zOSw4ICs0MCwxMCBAQAogI2luY2x1ZGUgIkludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rv
ci5oIgogI2luY2x1ZGUgIkludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuaCIKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJM
b29rdXAuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKKyNpbmNsdWRlIDx1bmljb2Rl
L3Vsb2MuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
QEAgLTEwMiw2ICsxMDUsNTk2IEBAIFN0cnVjdHVyZSogSW50bE9iamVjdDo6Y3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWCiAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCitzdGF0aWMgU3RyaW5n
IGdldEludGxTdHJpbmdPcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIG9wdGlvbnMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eSwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiB2YWx1ZXMsIGNvbnN0
IGNoYXIqIG5vdEZvdW5kLCBTdHJpbmcgZmFsbGJhY2spCit7CisgICAgLy8gOS4yLjkgR2V0T3B0
aW9uIChvcHRpb25zLCBwcm9wZXJ0eSwgdHlwZSwgdmFsdWVzLCBmYWxsYmFjaykKKyAgICAvLyBG
b3IgdHlwZT0ic3RyaW5nIi4KKworICAgIC8vIDEuIExldCBvcHRzIGJlIFRvT2JqZWN0KG9wdGlv
bnMpLgorICAgIEpTT2JqZWN0KiBvcHRzID0gb3B0aW9ucy50b09iamVjdChleGVjKTsKKworICAg
IC8vIDIuIFJldHVybklmQWJydXB0KG9wdHMpLgorICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gMy4gTGV0IHZhbHVlIGJlIEdl
dChvcHRzLCBwcm9wZXJ0eSkuCisgICAgSlNWYWx1ZSB2YWx1ZSA9IG9wdHMtPmdldChleGVjLCBw
cm9wZXJ0eSk7CisKKyAgICAvLyA0LiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCisgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAvLyA1
LiBJZiB2YWx1ZSBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCisgICAgaWYgKCF2YWx1ZS5pc1VuZGVm
aW5lZCgpKSB7CisgICAgICAgIC8vIGEuIEFzc2VydDogdHlwZSBpcyAiYm9vbGVhbiIgb3IgInN0
cmluZyIuCisgICAgICAgIC8vIEZ1bmN0aW9uIGRlZGljYXRlZCB0byAic3RyaW5nIi4KKworICAg
ICAgICAvLyBjLiBJZiB0eXBlIGlzICJzdHJpbmciLCB0aGVuCisgICAgICAgIC8vIGkuIExldCB2
YWx1ZSBiZSBUb1N0cmluZyh2YWx1ZSkuCisgICAgICAgIEpTU3RyaW5nKiBzdHJpbmdWYWx1ZSA9
IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworCisgICAgICAgIC8vIGlpLiBSZXR1cm5JZkFicnVwdCh2
YWx1ZSkuCisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKworICAgICAgICAvLyBkLiBJZiB2YWx1ZXMgaXMgbm90IHVuZGVmaW5l
ZCwgdGhlbgorICAgICAgICAvLyBpLiBJZiB2YWx1ZXMgZG9lcyBub3QgY29udGFpbiBhbiBlbGVt
ZW50IGVxdWFsIHRvIHZhbHVlLCB0aHJvdyBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uLgorICAgICAg
ICBpZiAoIXZhbHVlcy5pc0VtcHR5KCkgJiYgIXZhbHVlcy5jb250YWlucyhzdHJpbmdWYWx1ZS0+
dmFsdWUoZXhlYykpKSB7CisgICAgICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4
ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgU3RyaW5nKG5vdEZvdW5kKSkpOworICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9CisKKyAgICAgICAgLy8gZS4gUmV0dXJuIHZh
bHVlLgorICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWUtPnZhbHVlKGV4ZWMpOworICAgIH0KKwor
ICAgIC8vIDYuIEVsc2UgcmV0dXJuIGZhbGxiYWNrLgorICAgIHJldHVybiBmYWxsYmFjazsKK30K
Kworc3RhdGljIFN0cmluZyBnZXRQcml2YXRlVXNlTGFuZ1RhZyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGFydHMsIHNpemVfdCBzdGFydEluZGV4KQoreworICAgIHNpemVfdCBudW1QYXJ0cyA9IHBh
cnRzLnNpemUoKTsKKyAgICBzaXplX3QgY3VycmVudEluZGV4ID0gc3RhcnRJbmRleDsKKworICAg
IC8vIENoZWNrIGZvciBwcml2YXRldXNlLgorICAgIC8vIHByaXZhdGV1c2UgPSAieCIgMSooIi0i
ICgyKjhhbHBoYW51bSkpCisgICAgU3RyaW5nQnVpbGRlciBwcml2YXRldXNlOworICAgIHdoaWxl
IChjdXJyZW50SW5kZXggPCBudW1QYXJ0cykgeworICAgICAgICBjb25zdCBTdHJpbmcmIHNpbmds
ZXRvbiA9IHBhcnRzW2N1cnJlbnRJbmRleF07CisgICAgICAgIHVuc2lnbmVkIHNpbmdsZXRvbkxl
bmd0aCA9IHNpbmdsZXRvbi5sZW5ndGgoKTsKKyAgICAgICAgYm9vbCBpc1ZhbGlkID0gKHNpbmds
ZXRvbkxlbmd0aCA9PSAxICYmIChzaW5nbGV0b24gPT0gIngiIHx8IHNpbmdsZXRvbiA9PSAiWCIp
KTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
aWYgKGN1cnJlbnRJbmRleCAhPSBzdGFydEluZGV4KQorICAgICAgICAgICAgcHJpdmF0ZXVzZS5h
cHBlbmQoJy0nKTsKKworICAgICAgICArK2N1cnJlbnRJbmRleDsKKyAgICAgICAgdW5zaWduZWQg
bnVtRXh0UGFydHMgPSAwOworICAgICAgICBwcml2YXRldXNlLmFwcGVuZCgneCcpOworICAgICAg
ICB3aGlsZSAoY3VycmVudEluZGV4IDwgbnVtUGFydHMpIHsKKyAgICAgICAgICAgIGNvbnN0IFN0
cmluZyYgZXh0UGFydCA9IHBhcnRzW2N1cnJlbnRJbmRleF07CisgICAgICAgICAgICB1bnNpZ25l
ZCBleHRQYXJ0TGVuZ3RoID0gZXh0UGFydC5sZW5ndGgoKTsKKworICAgICAgICAgICAgYm9vbCBp
c1ZhbGlkID0gKGV4dFBhcnRMZW5ndGggPj0gMiAmJiBleHRQYXJ0TGVuZ3RoIDw9IDggJiYgZXh0
UGFydC5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzQVNDSUlBbHBoYW51bWVyaWM+KCkpOworICAg
ICAgICAgICAgaWYgKCFpc1ZhbGlkKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICArK2N1cnJlbnRJbmRleDsKKyAgICAgICAgICAgICsrbnVtRXh0UGFydHM7CisgICAgICAg
ICAgICBwcml2YXRldXNlLmFwcGVuZCgnLScpOworICAgICAgICAgICAgcHJpdmF0ZXVzZS5hcHBl
bmQoZXh0UGFydC5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIFJlcXVpcmVzIGF0IGxlYXN0IG9uZSBwcm9kdWN0aW9uLgorICAgICAgICBpZiAoIW51
bUV4dFBhcnRzKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KKworICAgIC8v
IExlZnRvdmVycyBtYWtlcyBpdCBpbnZhbGlkLgorICAgIGlmIChjdXJyZW50SW5kZXggPCBudW1Q
YXJ0cykKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgcmV0dXJuIHByaXZhdGV1c2Uu
dG9TdHJpbmcoKTsKK30KKworc3RhdGljIFN0cmluZyBnZXRDYW5vbmljYWxMYW5nVGFnKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXJ0cykKK3sKKyAgICBBU1NFUlQoIXBhcnRzLmlzRW1wdHkoKSk7
CisKKyAgICAvLyBGb2xsb3dzIHRoZSBncmFtbWFyIGF0IGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iu
b3JnL3JmYy9iY3AvYmNwNDcudHh0CisgICAgLy8gbGFuZ3RhZyA9IGxhbmd1YWdlIFsiLSIgc2Ny
aXB0XSBbIi0iIHJlZ2lvbl0gKigiLSIgdmFyaWFudCkgKigiLSIgZXh0ZW5zaW9uKSBbIi0iIHBy
aXZhdGV1c2VdCisKKyAgICBzaXplX3QgbnVtUGFydHMgPSBwYXJ0cy5zaXplKCk7CisgICAgLy8g
Q2hlY2sgZm9yIGxhbmd1YWdlLgorICAgIC8vIGxhbmd1YWdlID0gMiozQUxQSEEgWyItIiBleHRs
YW5nXSAvIDRBTFBIQSAvIDUqOEFMUEhBCisgICAgc2l6ZV90IGN1cnJlbnRJbmRleCA9IDA7Cisg
ICAgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSA9IHBhcnRzW2N1cnJlbnRJbmRleF07CisgICAgdW5z
aWduZWQgbGFuZ3VhZ2VMZW5ndGggPSBsYW5ndWFnZS5sZW5ndGgoKTsKKyAgICBpZiAobGFuZ3Vh
Z2VMZW5ndGggPCAyIHx8IGxhbmd1YWdlTGVuZ3RoID4gOCB8fCAhbGFuZ3VhZ2UuaXNBbGxTcGVj
aWFsQ2hhcmFjdGVyczxpc0FTQ0lJQWxwaGE+KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KworICAgICsrY3VycmVudEluZGV4OworICAgIFN0cmluZ0J1aWxkZXIgY2Fub25pY2FsOworICAg
IGNhbm9uaWNhbC5hcHBlbmQobGFuZ3VhZ2UuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CisK
KyAgICAvLyBDaGVjayBmb3IgZXh0bGFuZy4KKyAgICAvLyBleHRsYW5nID0gM0FMUEhBICoyKCIt
IiAzQUxQSEEpCisgICAgaWYgKGxhbmd1YWdlTGVuZ3RoIDw9IDMpIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCB0aW1lcyA9IDA7IHRpbWVzIDwgMyAmJiBjdXJyZW50SW5kZXggPCBudW1QYXJ0czsg
Kyt0aW1lcykgeworICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBleHRsYW5nID0gcGFydHNbY3Vy
cmVudEluZGV4XTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGV4dGxhbmdMZW5ndGggPSBleHRsYW5n
Lmxlbmd0aCgpOworICAgICAgICAgICAgaWYgKGV4dGxhbmdMZW5ndGggPT0gMyAmJiBleHRsYW5n
LmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNBU0NJSUFscGhhPigpKSB7CisgICAgICAgICAgICAg
ICAgKytjdXJyZW50SW5kZXg7CisgICAgICAgICAgICAgICAgY2Fub25pY2FsLmFwcGVuZCgnLScp
OworICAgICAgICAgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQoZXh0bGFuZy5jb252ZXJ0VG9BU0NJ
SUxvd2VyY2FzZSgpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIHNjcmlwdC4KKyAgICAvLyBz
Y3JpcHQgPSA0QUxQSEEKKyAgICBpZiAoY3VycmVudEluZGV4IDwgbnVtUGFydHMpIHsKKyAgICAg
ICAgY29uc3QgU3RyaW5nJiBzY3JpcHQgPSBwYXJ0c1tjdXJyZW50SW5kZXhdOworICAgICAgICB1
bnNpZ25lZCBzY3JpcHRMZW5ndGggPSBzY3JpcHQubGVuZ3RoKCk7CisgICAgICAgIGlmIChzY3Jp
cHRMZW5ndGggPT0gNCAmJiBzY3JpcHQuaXNBbGxTcGVjaWFsQ2hhcmFjdGVyczxpc0FTQ0lJQWxw
aGE+KCkpIHsKKyAgICAgICAgICAgICsrY3VycmVudEluZGV4OworICAgICAgICAgICAgY2Fub25p
Y2FsLmFwcGVuZCgnLScpOworICAgICAgICAgICAgY2Fub25pY2FsLmFwcGVuZCh0b0FTQ0lJVXBw
ZXIoc2NyaXB0WzBdKSk7CisgICAgICAgICAgICBjYW5vbmljYWwuYXBwZW5kKHNjcmlwdC5zdWJz
dHJpbmcoMSwgMykuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBDaGVjayBmb3IgcmVnaW9uLgorICAgIC8vIHJlZ2lvbiA9IDJBTFBIQSAvIDNE
SUdJVAorICAgIGlmIChjdXJyZW50SW5kZXggPCBudW1QYXJ0cykgeworICAgICAgICBjb25zdCBT
dHJpbmcmIHJlZ2lvbiA9IHBhcnRzW2N1cnJlbnRJbmRleF07CisgICAgICAgIHVuc2lnbmVkIHJl
Z2lvbkxlbmd0aCA9IHJlZ2lvbi5sZW5ndGgoKTsKKyAgICAgICAgYm9vbCBpc1ZhbGlkUmVnaW9u
ID0gKAorICAgICAgICAgICAgKHJlZ2lvbkxlbmd0aCA9PSAyICYmIHJlZ2lvbi5pc0FsbFNwZWNp
YWxDaGFyYWN0ZXJzPGlzQVNDSUlBbHBoYT4oKSkKKyAgICAgICAgICAgIHx8IChyZWdpb25MZW5n
dGggPT0gMyAmJiByZWdpb24uaXNBbGxTcGVjaWFsQ2hhcmFjdGVyczxpc0FTQ0lJRGlnaXQ+KCkp
CisgICAgICAgICk7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaW9uKSB7CisgICAgICAgICAgICAr
K2N1cnJlbnRJbmRleDsKKyAgICAgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQoJy0nKTsKKyAgICAg
ICAgICAgIGNhbm9uaWNhbC5hcHBlbmQocmVnaW9uLnVwcGVyKCkpOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gQ2hlY2sgZm9yIHZhcmlhbnQuCisgICAgLy8gNSo4YWxwaGFudW0gLyAoRElH
SVQgM2FscGhhbnVtKQorICAgIEhhc2hTZXQ8U3RyaW5nPiBzdWJ0YWdzOworICAgIHdoaWxlIChj
dXJyZW50SW5kZXggPCBudW1QYXJ0cykgeworICAgICAgICBjb25zdCBTdHJpbmcmIHZhcmlhbnQg
PSBwYXJ0c1tjdXJyZW50SW5kZXhdOworICAgICAgICB1bnNpZ25lZCB2YXJpYW50TGVuZ3RoID0g
dmFyaWFudC5sZW5ndGgoKTsKKyAgICAgICAgYm9vbCBpc1ZhbGlkVmFyaWFudCA9ICgKKyAgICAg
ICAgICAgICh2YXJpYW50TGVuZ3RoID49IDUgJiYgdmFyaWFudExlbmd0aCA8PSA4ICYmIHZhcmlh
bnQuaXNBbGxTcGVjaWFsQ2hhcmFjdGVyczxpc0FTQ0lJQWxwaGFudW1lcmljPigpKQorICAgICAg
ICAgICAgfHwgKHZhcmlhbnRMZW5ndGggPT0gNCAmJiBpc0FTQ0lJRGlnaXQodmFyaWFudFswXSkg
JiYgdmFyaWFudC5zdWJzdHJpbmcoMSwgMykuaXNBbGxTcGVjaWFsQ2hhcmFjdGVyczxpc0FTQ0lJ
QWxwaGFudW1lcmljPigpKQorICAgICAgICApOworICAgICAgICBpZiAoIWlzVmFsaWRWYXJpYW50
KQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gQ2Fubm90IGluY2x1ZGUgZHVwbGlj
YXRlIHN1YnRhZ3MgKGNhc2UgaW5zZW5zaXRpdmUpLgorICAgICAgICBjb25zdCBTdHJpbmcmIGxv
d2VyVmFyaWFudCA9IHZhcmlhbnQuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKKyAgICAgICAg
aWYgKHN1YnRhZ3MuY29udGFpbnMobG93ZXJWYXJpYW50KSkKKyAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICAgICAgc3VidGFncy5hZGQobG93ZXJWYXJpYW50KTsKKworICAgICAgICAr
K2N1cnJlbnRJbmRleDsKKworICAgICAgICAvLyBSZW9yZGVyaW5nIHZhcmlhbnQgc3VidGFncyBp
cyBub3QgcmVxdWlyZWQgaW4gdGhlIHNwZWMuCisgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQoJy0n
KTsKKyAgICAgICAgY2Fub25pY2FsLmFwcGVuZChsb3dlclZhcmlhbnQpOworICAgIH0KKworICAg
IC8vIENoZWNrIGZvciBleHRlbnNpb24uCisgICAgLy8gZXh0ZW5zaW9uID0gc2luZ2xldG9uIDEq
KCItIiAoMio4YWxwaGFudW0pKQorICAgIC8vIHNpbmdsZXRvbiA9IGFscGhhbnVtIGV4Y2VwdCB4
IG9yIFgKKyAgICBzdWJ0YWdzLmNsZWFyKCk7CisgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9u
czsKKyAgICB3aGlsZSAoY3VycmVudEluZGV4IDwgbnVtUGFydHMpIHsKKyAgICAgICAgY29uc3Qg
U3RyaW5nJiBwb3NzaWJsZVNpbmdsZXRvbiA9IHBhcnRzW2N1cnJlbnRJbmRleF07CisgICAgICAg
IHVuc2lnbmVkIHNpbmdsZXRvbkxlbmd0aCA9IHBvc3NpYmxlU2luZ2xldG9uLmxlbmd0aCgpOwor
ICAgICAgICBib29sIGlzVmFsaWRTaW5nbGV0b24gPSAoc2luZ2xldG9uTGVuZ3RoID09IDEgJiYg
cG9zc2libGVTaW5nbGV0b24gIT0gIngiICYmIHBvc3NpYmxlU2luZ2xldG9uICE9ICJYIiAmJiBp
c0FTQ0lJQWxwaGFudW1lcmljKHBvc3NpYmxlU2luZ2xldG9uWzBdKSk7CisgICAgICAgIGlmICgh
aXNWYWxpZFNpbmdsZXRvbikKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIENhbm5v
dCBpbmNsdWRlIGR1cGxpY2F0ZSBzaW5nbGV0b24gKGNhc2UgaW5zZW5zaXRpdmUpLgorICAgICAg
ICBjb25zdCBTdHJpbmcmIHNpbmdsZXRvbiA9IHBvc3NpYmxlU2luZ2xldG9uLmNvbnZlcnRUb0FT
Q0lJTG93ZXJjYXNlKCk7CisgICAgICAgIGlmIChzdWJ0YWdzLmNvbnRhaW5zKHNpbmdsZXRvbikp
CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIHN1YnRhZ3MuYWRkKHNpbmds
ZXRvbik7CisKKyAgICAgICAgKytjdXJyZW50SW5kZXg7CisgICAgICAgIGludCBudW1FeHRQYXJ0
cyA9IDA7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgZXh0ZW5zaW9uOworICAgICAgICBleHRlbnNp
b24uYXBwZW5kKHNpbmdsZXRvbik7CisgICAgICAgIHdoaWxlIChjdXJyZW50SW5kZXggPCBudW1Q
YXJ0cykgeworICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBleHRQYXJ0ID0gcGFydHNbY3VycmVu
dEluZGV4XTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGV4dFBhcnRMZW5ndGggPSBleHRQYXJ0Lmxl
bmd0aCgpOworCisgICAgICAgICAgICBib29sIGlzVmFsaWQgPSAoZXh0UGFydExlbmd0aCA+PSAy
ICYmIGV4dFBhcnRMZW5ndGggPD0gOCAmJiBleHRQYXJ0LmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8
aXNBU0NJSUFscGhhbnVtZXJpYz4oKSk7CisgICAgICAgICAgICBpZiAoIWlzVmFsaWQpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICsrY3VycmVudEluZGV4OworICAgICAg
ICAgICAgKytudW1FeHRQYXJ0czsKKyAgICAgICAgICAgIGV4dGVuc2lvbi5hcHBlbmQoJy0nKTsK
KyAgICAgICAgICAgIGV4dGVuc2lvbi5hcHBlbmQoZXh0UGFydC5jb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlcXVpcmVzIGF0IGxlYXN0IG9uZSBw
cm9kdWN0aW9uLgorICAgICAgICBpZiAoIW51bUV4dFBhcnRzKQorICAgICAgICAgICAgcmV0dXJu
IFN0cmluZygpOworCisgICAgICAgIGV4dGVuc2lvbnMuYXBwZW5kKGV4dGVuc2lvbi50b1N0cmlu
ZygpKTsKKyAgICB9CisKKyAgICAvLyBBZGQgZXh0ZW5zaW9ucyB0byBjYW5vbmljYWwgc29ydGVk
IGJ5IHNpbmdsZXRvbi4KKyAgICBzdGQ6OnNvcnQoCisgICAgICAgIGV4dGVuc2lvbnMuYmVnaW4o
KSwKKyAgICAgICAgZXh0ZW5zaW9ucy5lbmQoKSwKKyAgICAgICAgW10gKGNvbnN0IFN0cmluZyYg
YSwgY29uc3QgU3RyaW5nJiBiKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBhWzBdIDwg
YlswXTsKKyAgICAgICAgfQorICAgICk7CisgICAgc2l6ZV90IG51bUV4dGVuc3Rpb25zID0gZXh0
ZW5zaW9ucy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1FeHRlbnN0aW9u
czsgKytpKSB7CisgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQoJy0nKTsKKyAgICAgICAgY2Fub25p
Y2FsLmFwcGVuZChleHRlbnNpb25zW2ldKTsKKyAgICB9CisKKyAgICAvLyBDaGVjayBmb3IgcHJp
dmF0ZXVzZS4KKyAgICBpZiAoY3VycmVudEluZGV4IDwgbnVtUGFydHMpIHsKKyAgICAgICAgU3Ry
aW5nIHByaXZhdGV1c2UgPSBnZXRQcml2YXRlVXNlTGFuZ1RhZyhwYXJ0cywgY3VycmVudEluZGV4
KTsKKyAgICAgICAgaWYgKHByaXZhdGV1c2UuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQoJy0nKTsKKyAgICAgICAgY2Fub25p
Y2FsLmFwcGVuZChwcml2YXRldXNlKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogUmVwbGFjZSBz
dWJ0YWdzIHdpdGggdGhlaXIgcHJlZmVycmVkIHZhbHVlcy4KKworICAgIHJldHVybiBjYW5vbmlj
YWwudG9TdHJpbmcoKTsKK30KKworc3RhdGljIFN0cmluZyBnZXRHcmFuZGZhdGhlcmVkTGFuZ1Rh
Zyhjb25zdCBTdHJpbmcmIGxvY2FsZSkKK3sKKyAgICAvLyBncmFuZGZhdGhlcmVkID0gaXJyZWd1
bGFyIC8gcmVndWxhcgorICAgIC8vIEZJWE1FOiBjb252ZXJ0IHRvIGEgY29tcGlsZSB0aW1lIGhh
c2ggdGFibGUgaWYgdGhpcyBpcyBjYXVzaW5nIHBlcmZvcm1hbmNlIGlzc3Vlcy4KKyAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiB0YWdNYXAgPSB7CisgICAgICAgIC8vIElycmVndWxhci4KKyAg
ICAgICAgeyBBU0NJSUxpdGVyYWwoImVuLWdiLW9lZCIpLCBBU0NJSUxpdGVyYWwoImVuLUdCLW9l
ZCIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJpLWFtaSIpLCBBU0NJSUxpdGVyYWwoImFt
aSIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJpLWJubiIpLCBBU0NJSUxpdGVyYWwoImJu
biIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJpLWRlZmF1bHQiKSwgQVNDSUlMaXRlcmFs
KCJpLWRlZmF1bHQiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiaS1lbm9jaGlhbiIpLCBB
U0NJSUxpdGVyYWwoImktZW5vY2hpYW4iKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiaS1o
YWsiKSwgQVNDSUlMaXRlcmFsKCJoYWsiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiaS1r
bGluZ29uIiksIEFTQ0lJTGl0ZXJhbCgidGxoIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwo
ImktbHV4IiksIEFTQ0lJTGl0ZXJhbCgibGIiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgi
aS1taW5nbyIpLCBBU0NJSUxpdGVyYWwoImktbWluZ28iKSB9LAorICAgICAgICB7IEFTQ0lJTGl0
ZXJhbCgiaS1uYXZham8iKSwgQVNDSUlMaXRlcmFsKCJudiIpIH0sCisgICAgICAgIHsgQVNDSUlM
aXRlcmFsKCJpLXB3biIpLCBBU0NJSUxpdGVyYWwoInB3biIpIH0sCisgICAgICAgIHsgQVNDSUlM
aXRlcmFsKCJpLXRhbyIpLCBBU0NJSUxpdGVyYWwoInRhbyIpIH0sCisgICAgICAgIHsgQVNDSUlM
aXRlcmFsKCJpLXRheSIpLCBBU0NJSUxpdGVyYWwoInRheSIpIH0sCisgICAgICAgIHsgQVNDSUlM
aXRlcmFsKCJpLXRzdSIpLCBBU0NJSUxpdGVyYWwoInRzdSIpIH0sCisgICAgICAgIHsgQVNDSUlM
aXRlcmFsKCJzZ24tYmUtZnIiKSwgQVNDSUlMaXRlcmFsKCJzZmIiKSB9LAorICAgICAgICB7IEFT
Q0lJTGl0ZXJhbCgic2duLWJlLW5sIiksIEFTQ0lJTGl0ZXJhbCgidmd0IikgfSwKKyAgICAgICAg
eyBBU0NJSUxpdGVyYWwoInNnbi1jaC1kZSIpLCBBU0NJSUxpdGVyYWwoInNnZyIpIH0sCisgICAg
ICAgIC8vIFJlZ3VsYXIuCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJhcnQtbG9qYmFuIiksIEFT
Q0lJTGl0ZXJhbCgiamJvIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImNlbC1nYXVsaXNo
IiksIEFTQ0lJTGl0ZXJhbCgiY2VsLWdhdWxpc2giKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJh
bCgibm8tYm9rIiksIEFTQ0lJTGl0ZXJhbCgibmIiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJh
bCgibm8tbnluIiksIEFTQ0lJTGl0ZXJhbCgibm4iKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJh
bCgiemgtZ3VveXUiKSwgQVNDSUlMaXRlcmFsKCJjbW4iKSB9LAorICAgICAgICB7IEFTQ0lJTGl0
ZXJhbCgiemgtaGFra2EiKSwgQVNDSUlMaXRlcmFsKCJoYWsiKSB9LAorICAgICAgICB7IEFTQ0lJ
TGl0ZXJhbCgiemgtbWluIiksIEFTQ0lJTGl0ZXJhbCgiemgtbWluIikgfSwKKyAgICAgICAgeyBB
U0NJSUxpdGVyYWwoInpoLW1pbi1uYW4iKSwgQVNDSUlMaXRlcmFsKCJuYW4iKSB9LAorICAgICAg
ICB7IEFTQ0lJTGl0ZXJhbCgiemgteGlhbmciKSwgQVNDSUlMaXRlcmFsKCJoc24iKSB9CisgICAg
fTsKKworICAgIHJldHVybiB0YWdNYXAuZ2V0KGxvY2FsZS5jb252ZXJ0VG9BU0NJSUxvd2VyY2Fz
ZSgpKTsKK30KKworc3RhdGljIFN0cmluZyBjYW5vbmljYWxpemVMYW5ndWFnZVRhZyhjb25zdCBT
dHJpbmcmIGxvY2FsZSkKK3sKKyAgICAvLyA2LjIuMiBJc1N0cnVjdHVyYWxseVZhbGlkTGFuZ3Vh
Z2VUYWcgKGxvY2FsZSkKKyAgICAvLyA2LjIuMyBDYW5vbmljYWxpemVMYW5ndWFnZVRhZyAobG9j
YWxlKQorICAgIC8vIFRoZXNlIGFyZSBkb25lIG9uZSBhZnRlciBhbm90aGVyIGluIENhbm9uaWNh
bGl6ZUxvY2FsZUxpc3QsIHNvIHRoZXkgYXJlIGNvbWJpbmVkIGhlcmUgdG8gcmVkdWNlIGR1cGxp
Y2F0aW9uLgorICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9iY3AvYmNwNDcu
dHh0CisKKyAgICAvLyBMYW5ndWFnZS1UYWcgPSBsYW5ndGFnIC8gcHJpdmF0ZXVzZSAvIGdyYW5k
ZmF0aGVyZWQKKyAgICBTdHJpbmcgZ3JhbmRmYXRoZXIgPSBnZXRHcmFuZGZhdGhlcmVkTGFuZ1Rh
Zyhsb2NhbGUpOworICAgIGlmICghZ3JhbmRmYXRoZXIuaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biBncmFuZGZhdGhlcjsKKworICAgIC8vIEZJWE1FOiBSZXBsYWNlIHJlZHVuZGFudCB0YWdzIFtS
RkM0NjQ3XS4KKworICAgIFZlY3RvcjxTdHJpbmc+IHBhcnRzOworICAgIGxvY2FsZS5zcGxpdCgn
LScsIHBhcnRzKTsKKyAgICBpZiAoIXBhcnRzLmlzRW1wdHkoKSkgeworICAgICAgICBTdHJpbmcg
bGFuZ3RhZyA9IGdldENhbm9uaWNhbExhbmdUYWcocGFydHMpOworICAgICAgICBpZiAoIWxhbmd0
YWcuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gbGFuZ3RhZzsKKworICAgICAgICBTdHJp
bmcgcHJpdmF0ZXVzZSA9IGdldFByaXZhdGVVc2VMYW5nVGFnKHBhcnRzLCAwKTsKKyAgICAgICAg
aWYgKCFwcml2YXRldXNlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIHByaXZhdGV1c2U7
CisgICAgfQorCisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitKU0FycmF5KiBjYW5vbmljYWxp
emVMb2NhbGVMaXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBsb2NhbGVzKQoreworICAgIC8v
IDkuMi4xIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QgKGxvY2FsZXMpCisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2FsbGVl
KCktPmdsb2JhbE9iamVjdCgpOworICAgIEpTQXJyYXkqIHNlZW4gPSBKU0FycmF5Ojp0cnlDcmVh
dGVVbmluaXRpYWxpemVkKHZtLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhp
bmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhDb250aWd1b3VzKSwgMCk7CisgICAgaWYg
KCFzZWVuKSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgLy8gMS4gSWYgbG9jYWxlcyBpcyB1bmRlZmlu
ZWQsIHRoZW4gYS4gUmV0dXJuIGEgbmV3IGVtcHR5IExpc3QuCisgICAgaWYgKGxvY2FsZXMuaXNV
bmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIHNlZW47CisKKyAgICAvLyAyLiBMZXQgc2VlbiBi
ZSBhbiBlbXB0eSBMaXN0LgorICAgIC8vIERvbmUgYmVmb3JlIHRvIGFsc28gcmV0dXJuIGluIHN0
ZXAgMSwgaWYgbmVlZGVkLgorCisgICAgLy8gMy4gSWYgVHlwZShsb2NhbGVzKSBpcyBTdHJpbmcs
IHRoZW4KKyAgICBKU09iamVjdCogbG9jYWxlc09iamVjdDsKKyAgICBpZiAobG9jYWxlcy5pc1N0
cmluZygpKSB7CisgICAgICAgIC8vICBhLiBMZXQgYUxvY2FsZXMgYmUgQ3JlYXRlQXJyYXlGcm9t
TGlzdCjCq2xvY2FsZXPCuykuCisgICAgICAgIEpTQXJyYXkqIGxvY2FsZXNBcnJheSA9IEpTQXJy
YXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1
cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aENvbnRpZ3VvdXMpLCAx
KTsKKyAgICAgICAgbG9jYWxlc0FycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIDAsIGxvY2FsZXMp
OworICAgICAgICAvLyA0LiBMZXQgTyBiZSBUb09iamVjdChhTG9jYWxlcykuCisgICAgICAgIGxv
Y2FsZXNPYmplY3QgPSBsb2NhbGVzQXJyYXk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gNC4g
TGV0IE8gYmUgVG9PYmplY3QoYUxvY2FsZXMpLgorICAgICAgICBsb2NhbGVzT2JqZWN0ID0gbG9j
YWxlcy50b09iamVjdChleGVjKTsKKyAgICB9CisKKyAgICAvLyA1LiBSZXR1cm5JZkFicnVwdChP
KS4KKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgLy8gNi4gTGV0IGxlbiBiZSBUb0xlbmd0aChHZXQoTywgImxlbmd0aCIpKS4KKyAg
ICBKU1ZhbHVlIGxlbmd0aFByb3BlcnR5ID0gbG9jYWxlc09iamVjdC0+Z2V0KGV4ZWMsIHZtLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGRvdWJsZSBsZW5ndGggPSBsZW5ndGhQcm9wZXJ0
eS50b0xlbmd0aChleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgLy8gS2VlcCB0cmFjayBvZiBsb2NhbGVzIHRoYXQgaGF2
ZSBiZWVuIGFkZGVkIHRvIHRoZSBsaXN0LgorICAgIEhhc2hTZXQ8U3RyaW5nPiBzZWVuU2V0Owor
CisgICAgLy8gNy4gTGV0IGsgYmUgMC4KKyAgICAvLyA4LiBSZXBlYXQsIHdoaWxlIGsgPCBsZW4K
KyAgICBmb3IgKGRvdWJsZSBrID0gMDsgayA8IGxlbmd0aDsgKytrKSB7CisgICAgICAgIC8vIGEu
IExldCBQayBiZSBUb1N0cmluZyhrKS4KKyAgICAgICAgLy8gTm90IG5lZWRlZCBiZWNhdXNlIGhh
c1Byb3BlcnR5IGFuZCBnZXQgdGFrZSBhbiBpbnQgZm9yIG51bWVyaWMga2V5LgorCisgICAgICAg
IC8vIGIuIExldCBrUHJlc2VudCBiZSBIYXNQcm9wZXJ0eShPLCBQaykuCisgICAgICAgIGJvb2wg
a1ByZXNlbnQgPSBsb2NhbGVzT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBrKTsKKworICAgICAg
ICAvLyBjLiBSZXR1cm5JZkFicnVwdChrUHJlc2VudCkuCisgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIC8vIGQu
IElmIGtQcmVzZW50IGlzIHRydWUsIHRoZW4KKyAgICAgICAgaWYgKGtQcmVzZW50KSB7CisgICAg
ICAgICAgICAvLyBpLiBMZXQga1ZhbHVlIGJlIEdldChPLCBQaykuCisgICAgICAgICAgICBKU1Zh
bHVlIGtWYWx1ZSA9IGxvY2FsZXNPYmplY3QtPmdldChleGVjLCBrKTsKKworICAgICAgICAgICAg
Ly8gaWkuIFJldHVybklmQWJydXB0KGtWYWx1ZSkuCisgICAgICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAg
ICAgIC8vIGlpaS4gSWYgVHlwZShrVmFsdWUpIGlzIG5vdCBTdHJpbmcgb3IgT2JqZWN0LCB0aHJv
dyBhIFR5cGVFcnJvciBleGNlcHRpb24uCisgICAgICAgICAgICBpZiAoIWtWYWx1ZS5pc1N0cmlu
ZygpICYmICFrVmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgibG9jYWxlIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb3Ig
b2JqZWN0IikpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBpdi4gTGV0IHRhZyBiZSBUb1N0cmluZyhrVmFsdWUpLgorICAg
ICAgICAgICAgSlNTdHJpbmcqIHRhZyA9IGtWYWx1ZS50b1N0cmluZyhleGVjKTsKKworICAgICAg
ICAgICAgLy8gdi4gUmV0dXJuSWZBYnJ1cHQodGFnKS4KKyAgICAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAg
ICAgICAgLy8gdmkuIElmIElzU3RydWN0dXJhbGx5VmFsaWRMYW5ndWFnZVRhZyh0YWcpIGlzIGZh
bHNlLCB0aHJvdyBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uLgorICAgICAgICAgICAgLy8gdmlpLiBM
ZXQgY2Fub25pY2FsaXplZFRhZyBiZSBDYW5vbmljYWxpemVMYW5ndWFnZVRhZyh0YWcpLgorICAg
ICAgICAgICAgU3RyaW5nIGNhbm9uaWNhbGl6ZWRUYWcgPSBjYW5vbmljYWxpemVMYW5ndWFnZVRh
Zyh0YWctPnZhbHVlKGV4ZWMpKTsKKyAgICAgICAgICAgIGlmIChjYW5vbmljYWxpemVkVGFnLmlz
TnVsbCgpKSB7CisgICAgICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVj
LCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIFN0cmluZzo6Zm9ybWF0KCJpbnZhbGlkIGxhbmd1YWdl
IHRhZzogJXMiLCB0YWctPnZhbHVlKGV4ZWMpLnV0ZjgoKS5kYXRhKCkpKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHZp
aWkuIElmIGNhbm9uaWNhbGl6ZWRUYWcgaXMgbm90IGFuIGVsZW1lbnQgb2Ygc2VlbiwgYXBwZW5k
IGNhbm9uaWNhbGl6ZWRUYWcgYXMgdGhlIGxhc3QgZWxlbWVudCBvZiBzZWVuLgorICAgICAgICAg
ICAgaWYgKHNlZW5TZXQuYWRkKGNhbm9uaWNhbGl6ZWRUYWcpLmlzTmV3RW50cnkpCisgICAgICAg
ICAgICAgICAgc2Vlbi0+cHVzaChleGVjLCBqc1N0cmluZyhleGVjLCBjYW5vbmljYWxpemVkVGFn
KSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gZS4gSW5jcmVhc2UgayBieSAxLgorICAgIH0KKwor
ICAgIHJldHVybiBzZWVuOworfQorCitzdGF0aWMgU3RyaW5nIGJlc3RBdmFpbGFibGVMb2NhbGUo
Y29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBTdHJpbmcmIGxv
Y2FsZSkKK3sKKyAgICAvLyA5LjIuMiBCZXN0QXZhaWxhYmxlTG9jYWxlIChhdmFpbGFibGVMb2Nh
bGVzLCBsb2NhbGUpCisgICAgLy8gMS4gTGV0IGNhbmRpZGF0ZSBiZSBsb2NhbGUuCisgICAgU3Ry
aW5nIGNhbmRpZGF0ZSA9IGxvY2FsZTsKKworICAgIC8vIDIuIFJlcGVhdAorICAgIHdoaWxlICgh
Y2FuZGlkYXRlLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBhLiBJZiBhdmFpbGFibGVMb2NhbGVz
IGNvbnRhaW5zIGFuIGVsZW1lbnQgZXF1YWwgdG8gY2FuZGlkYXRlLCB0aGVuIHJldHVybiBjYW5k
aWRhdGUuCisgICAgICAgIGlmIChhdmFpbGFibGVMb2NhbGVzLmNvbnRhaW5zKGNhbmRpZGF0ZSkp
CisgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlOworCisgICAgICAgIC8vIGIuIExldCBwb3Mg
YmUgdGhlIGNoYXJhY3RlciBpbmRleCBvZiB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mICItIiAoVSsw
MDJEKSB3aXRoaW4gY2FuZGlkYXRlLiBJZiB0aGF0IGNoYXJhY3RlciBkb2VzIG5vdCBvY2N1ciwg
cmV0dXJuIHVuZGVmaW5lZC4KKyAgICAgICAgc2l6ZV90IHBvcyA9IGNhbmRpZGF0ZS5yZXZlcnNl
RmluZCgnLScpOworICAgICAgICBpZiAocG9zID09IG5vdEZvdW5kKQorICAgICAgICAgICAgcmV0
dXJuIFN0cmluZygpOworCisgICAgICAgIC8vIGMuIElmIHBvcyDiiaUgMiBhbmQgdGhlIGNoYXJh
Y3RlciAiLSIgb2NjdXJzIGF0IGluZGV4IHBvcy0yIG9mIGNhbmRpZGF0ZSwgdGhlbiBkZWNyZWFz
ZSBwb3MgYnkgMi4KKyAgICAgICAgaWYgKHBvcyA+PSAyICYmIGNhbmRpZGF0ZVtwb3MgLSAyXSA9
PSAnLScpCisgICAgICAgICAgICBwb3MgLT0gMjsKKworICAgICAgICAvLyBkLiBMZXQgY2FuZGlk
YXRlIGJlIHRoZSBzdWJzdHJpbmcgb2YgY2FuZGlkYXRlIGZyb20gcG9zaXRpb24gMCwgaW5jbHVz
aXZlLCB0byBwb3NpdGlvbiBwb3MsIGV4Y2x1c2l2ZS4KKyAgICAgICAgY2FuZGlkYXRlID0gY2Fu
ZGlkYXRlLnN1YnN0cmluZygwLCBwb3MpOworICAgIH0KKworICAgIHJldHVybiBTdHJpbmcoKTsK
K30KKworc3RhdGljIEpTQXJyYXkqIGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIEpTQXJyYXkqIHJl
cXVlc3RlZExvY2FsZXMpCit7CisgICAgLy8gOS4yLjYgTG9va3VwU3VwcG9ydGVkTG9jYWxlcyAo
YXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcykKKworICAgIC8vIDEuIExldCByTG9j
YWxlcyBiZSBDcmVhdGVBcnJheUZyb21MaXN0KHJlcXVlc3RlZExvY2FsZXMpLgorICAgIC8vIEFs
cmVhZHkgYW4gYXJyYXkuCisKKyAgICAvLyAyLiBMZXQgbGVuIGJlIFRvTGVuZ3RoKEdldChyTG9j
YWxlcywgImxlbmd0aCIpKS4KKyAgICB1bnNpZ25lZCBsZW4gPSByZXF1ZXN0ZWRMb2NhbGVzLT5s
ZW5ndGgoKTsKKworICAgIC8vIDMuIExldCBzdWJzZXQgYmUgYW4gZW1wdHkgTGlzdC4KKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBl
eGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgSlNBcnJheSogc3Vic2V0ID0gSlNB
cnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVj
dHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoVW5kZWNpZGVkKSwg
MCk7CisgICAgaWYgKCFzdWJzZXQpIHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICAvLyA0LiBMZXQgayBi
ZSAwLgorICAgIC8vIDUuIFJlcGVhdCB3aGlsZSBrIDwgbGVuCisgICAgZm9yICh1bnNpZ25lZCBr
ID0gMDsgayA8IGxlbjsgKytrKSB7CisgICAgICAgIC8vIGEuIExldCBQayBiZSBUb1N0cmluZyhr
KS4KKyAgICAgICAgLy8gYi4gTGV0IGxvY2FsZSBiZSBHZXQockxvY2FsZXMsIFBrKS4KKyAgICAg
ICAgSlNWYWx1ZSBsb2NhbGUgPSByZXF1ZXN0ZWRMb2NhbGVzLT5nZXQoZXhlYywgayk7CisKKyAg
ICAgICAgLy8gYy4gUmV0dXJuSWZBYnJ1cHQobG9jYWxlKS4KKyAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgLy8g
ZC4gTGV0IG5vRXh0ZW5zaW9uc0xvY2FsZSBiZSB0aGUgU3RyaW5nIHZhbHVlIHRoYXQgaXMgbG9j
YWxlIHdpdGggYWxsIFVuaWNvZGUgbG9jYWxlIGV4dGVuc2lvbiBzZXF1ZW5jZXMgcmVtb3ZlZC4K
KyAgICAgICAgSlNTdHJpbmcqIGpzTG9jYWxlID0gbG9jYWxlLnRvU3RyaW5nKGV4ZWMpOworICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgICAgICBTdHJpbmcgc0xvY2FsZSA9IGpzTG9jYWxlLT52YWx1ZShleGVjKTsKKyAg
ICAgICAgVmVjdG9yPFN0cmluZz4gcGFydHM7CisgICAgICAgIHNMb2NhbGUuc3BsaXQoJy0nLCBw
YXJ0cyk7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgc2l6ZV90IHBh
cnRzU2l6ZSA9IHBhcnRzLnNpemUoKTsKKyAgICAgICAgaWYgKHBhcnRzU2l6ZSA+IDApCisgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZChwYXJ0c1swXSk7CisgICAgICAgIGZvciAoc2l6ZV90IHAg
PSAxOyBwIDwgcGFydHNTaXplOyArK3ApIHsKKyAgICAgICAgICAgIGlmIChwYXJ0c1twXSA9PSAi
dSIpIHsKKyAgICAgICAgICAgICAgICAvLyBTa2lwIHRoZSB1LSBhbmQgYW55dGhpbmcgdGhhdCBm
b2xsb3dzIHVudGlsIGFub3RoZXIgc2luZ2xldG9uLgorICAgICAgICAgICAgICAgIC8vIFdoaWxl
IHRoZSBuZXh0IHBhcnQgaXMgcGFydCBvZiB0aGUgdW5pY29kZSBleHRlbnNpb24sIHNraXAgaXQu
CisgICAgICAgICAgICAgICAgd2hpbGUgKHAgKyAxIDwgcGFydHNTaXplICYmIHBhcnRzW3AgKyAx
XS5sZW5ndGgoKSA+IDEpCisgICAgICAgICAgICAgICAgICAgICsrcDsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJy0nKTsKKyAgICAgICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZChwYXJ0c1twXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgU3RyaW5nIG5vRXh0ZW5zaW9uc0xvY2FsZSA9IGJ1aWxkZXIudG9TdHJpbmcoKTsK
KworICAgICAgICAvLyBlLiBMZXQgYXZhaWxhYmxlTG9jYWxlIGJlIEJlc3RBdmFpbGFibGVMb2Nh
bGUoYXZhaWxhYmxlTG9jYWxlcywgbm9FeHRlbnNpb25zTG9jYWxlKS4KKyAgICAgICAgU3RyaW5n
IGF2YWlsYWJsZUxvY2FsZSA9IGJlc3RBdmFpbGFibGVMb2NhbGUoYXZhaWxhYmxlTG9jYWxlcywg
bm9FeHRlbnNpb25zTG9jYWxlKTsKKworICAgICAgICAvLyBmLiBJZiBhdmFpbGFibGVMb2NhbGUg
aXMgbm90IHVuZGVmaW5lZCwgdGhlbiBhcHBlbmQgbG9jYWxlIHRvIHRoZSBlbmQgb2Ygc3Vic2V0
LgorICAgICAgICBpZiAoIWF2YWlsYWJsZUxvY2FsZS5pc051bGwoKSkKKyAgICAgICAgICAgIHN1
YnNldC0+cHVzaChleGVjLCBsb2NhbGUpOworCisgICAgICAgIC8vIGcuIEluY3JlbWVudCBrIGJ5
IDEuCisgICAgfQorCisgICAgLy8gNi4gUmV0dXJuIHN1YnNldC4KKyAgICByZXR1cm4gc3Vic2V0
OworfQorCitzdGF0aWMgSlNBcnJheSogYmVzdEZpdFN1cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIEpTQXJyYXkq
IHJlcXVlc3RlZExvY2FsZXMpCit7CisgICAgLy8gOS4yLjcgQmVzdEZpdFN1cHBvcnRlZExvY2Fs
ZXMgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpCisgICAgLy8gRklYTUU6IElt
cGxlbWVudCBzb21ldGhpbmcgYmV0dGVyIHRoYW4gbG9va3VwLgorICAgIHJldHVybiBsb29rdXBT
dXBwb3J0ZWRMb2NhbGVzKGV4ZWMsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMp
OworfQorCitKU1ZhbHVlIHN1cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBI
YXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIEpTQXJyYXkqIHJlcXVlc3RlZExvY2Fs
ZXMsIEpTVmFsdWUgb3B0aW9ucykKK3sKKyAgICAvLyA5LjIuOCBTdXBwb3J0ZWRMb2NhbGVzIChh
dmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKQorICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgU3RyaW5nIG1hdGNoZXI7CisKKyAgICAvLyAxLiBJZiBvcHRpb25z
IGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KKyAgICBpZiAoIW9wdGlvbnMuaXNVbmRlZmluZWQoKSkg
eworICAgICAgICAvLyBhLiBMZXQgbWF0Y2hlciBiZSBHZXRPcHRpb24ob3B0aW9ucywgImxvY2Fs
ZU1hdGNoZXIiLCAic3RyaW5nIiwgwqsgImxvb2t1cCIsICJiZXN0IGZpdCIgwrssICJiZXN0IGZp
dCIpLgorICAgICAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4gbWF0Y2hlcnMoeyBBU0NJSUxpdGVy
YWwoImxvb2t1cCIpLCBBU0NJSUxpdGVyYWwoImJlc3QgZml0IikgfSk7CisgICAgICAgIG1hdGNo
ZXIgPSBnZXRJbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMt
PmxvY2FsZU1hdGNoZXIsIG1hdGNoZXJzLCAibG9jYWxlTWF0Y2hlciBtdXN0IGJlIGVpdGhlciBc
Imxvb2t1cFwiIG9yIFwiYmVzdCBmaXRcIiIsIEFTQ0lJTGl0ZXJhbCgiYmVzdCBmaXQiKSk7Cisg
ICAgICAgIC8vIGIuIFJldHVybklmQWJydXB0KG1hdGNoZXIpLgorICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICAvLyAyLiBFbHNlLCBsZXQgbWF0Y2hlciBiZSAiYmVzdCBmaXQiLgor
ICAgICAgICBtYXRjaGVyID0gQVNDSUlMaXRlcmFsKCJiZXN0IGZpdCIpOworICAgIH0KKworICAg
IEpTQXJyYXkqIHN1cHBvcnRlZExvY2FsZXM7CisgICAgLy8gMy4gSWYgbWF0Y2hlciBpcyAiYmVz
dCBmaXQiLAorICAgIGlmIChtYXRjaGVyID09ICJiZXN0IGZpdCIpIHsKKyAgICAgICAgLy8gYS4g
TGV0IE1hdGNoZXJPcGVyYXRpb24gYmUgdGhlIGFic3RyYWN0IG9wZXJhdGlvbiBCZXN0Rml0U3Vw
cG9ydGVkTG9jYWxlcy4KKyAgICAgICAgLy8gNS4gTGV0IHN1cHBvcnRlZExvY2FsZXMgYmUgTWF0
Y2hlck9wZXJhdGlvbihhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKS4KKyAgICAg
ICAgc3VwcG9ydGVkTG9jYWxlcyA9IGJlc3RGaXRTdXBwb3J0ZWRMb2NhbGVzKGV4ZWMsIGF2YWls
YWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IDQuIEVsc2UKKyAgICAgICAgLy8gYS4gTGV0IE1hdGNoZXJPcGVyYXRpb24gYmUgdGhlIGFic3Ry
YWN0IG9wZXJhdGlvbiBMb29rdXBTdXBwb3J0ZWRMb2NhbGVzLgorICAgICAgICAvLyA1LiBMZXQg
c3VwcG9ydGVkTG9jYWxlcyBiZSBNYXRjaGVyT3BlcmF0aW9uKGF2YWlsYWJsZUxvY2FsZXMsIHJl
cXVlc3RlZExvY2FsZXMpLgorICAgICAgICBzdXBwb3J0ZWRMb2NhbGVzID0gbG9va3VwU3VwcG9y
dGVkTG9jYWxlcyhleGVjLCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTsKKyAg
ICB9CisKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworCisgICAgLy8gNi4gTGV0IHN1YnNldCBiZSBDcmVhdGVBcnJheUZyb21MaXN0
KHN1cHBvcnRlZExvY2FsZXMpLgorICAgIC8vIEFscmVhZHkgYW4gYXJyYXkuCisKKyAgICAvLyA3
LiBMZXQga2V5cyBiZSBzdWJzZXQuW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgorICAgIFByb3BlcnR5
TmFtZUFycmF5IGtleXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CisgICAgc3Vw
cG9ydGVkTG9jYWxlcy0+Z2V0T3duUHJvcGVydHlOYW1lcyhzdXBwb3J0ZWRMb2NhbGVzLCBleGVj
LCBrZXlzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CisKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVz
YzsKKyAgICBkZXNjLnNldENvbmZpZ3VyYWJsZShmYWxzZSk7CisgICAgZGVzYy5zZXRXcml0YWJs
ZShmYWxzZSk7CisKKyAgICAvLyA4LiBSZXBlYXQgZm9yIGVhY2ggZWxlbWVudCBQIG9mIGtleXMg
aW4gTGlzdCBvcmRlciwKKyAgICBzaXplX3QgbGVuID0ga2V5cy5zaXplKCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICAvLyBhLiBMZXQgZGVzYyBiZSBQ
cm9wZXJ0eURlc2NyaXB0b3IgeyBbW0NvbmZpZ3VyYWJsZV1dOiBmYWxzZSwgW1tXcml0YWJsZV1d
OiBmYWxzZSB9LgorICAgICAgICAvLyBDcmVhdGVkIGFib3ZlIGZvciByZXVzZS4KKworICAgICAg
ICAvLyBiLiBMZXQgc3RhdHVzIGJlIERlZmluZVByb3BlcnR5T3JUaHJvdyhzdWJzZXQsIFAsIGRl
c2MpLgorICAgICAgICBzdXBwb3J0ZWRMb2NhbGVzLT5kZWZpbmVPd25Qcm9wZXJ0eShzdXBwb3J0
ZWRMb2NhbGVzLCBleGVjLCBrZXlzW2ldLCBkZXNjLCB0cnVlKTsKKworICAgICAgICAvLyBjLiBB
c3NlcnQ6IHN0YXR1cyBpcyBub3QgYWJydXB0IGNvbXBsZXRpb24uCisgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IH0KKworICAgIC8vIDkuIFJldHVybiBzdWJzZXQuCisgICAgcmV0dXJuIHN1cHBvcnRlZExvY2Fs
ZXM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKElOVEwpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgKaW5kZXggODM0Mjg1NDJi
MmQwZmJjN2U1YjE0NGEzNmJjYmI4NmVkZmNiYmU4Mi4uZmRlNjJiNTNhNjYwNTcyZGRjOTk0MjAz
NzUyYjdlZDdlZDAyYTY4ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxP
YmplY3QuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElOVEwpCiAKKyNpbmNsdWRl
ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtNTYsNiArNTcsOSBAQCBwcml2YXRlOgogICAgIEludGxPYmplY3QoVk0mLCBT
dHJ1Y3R1cmUqKTsKIH07CiAKK0pTQXJyYXkqIGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoRXhlY1N0
YXRlKiwgSlNWYWx1ZSBsb2NhbGVzKTsKK0pTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhFeGVjU3Rh
dGUqLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIEpTQXJyYXkqIHJl
cXVlc3RlZExvY2FsZXMsIEpTVmFsdWUgb3B0aW9ucyk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gRU5BQkxFKElOVEwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ0pTVmFsdWUuY3BwCmluZGV4IDllMGFhYjE3NzRkZTE3YTAzY2E2ZGUxMmM5ZTk4ZjlkNzIz
NjM2MGIuLmEwY2Y3NzdkZDY5OGE0NjY4NGU0NzBjYzUyMGJlYzFjZTQxOGE4N2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCkBAIC01Niw2ICs1Niwx
OCBAQCBkb3VibGUgSlNWYWx1ZTo6dG9JbnRlZ2VyUHJlc2VydmVOYU4oRXhlY1N0YXRlKiBleGVj
KSBjb25zdAogICAgIHJldHVybiB0cnVuYyh0b051bWJlcihleGVjKSk7CiB9CiAKK2RvdWJsZSBK
U1ZhbHVlOjp0b0xlbmd0aChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgLy8gRUNNQSA3
LjEuMTUKKyAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIv
Ni4wLyNzZWMtdG9sZW5ndGgKKyAgICBkb3VibGUgZCA9IHRvSW50ZWdlcihleGVjKTsKKyAgICBp
ZiAoZCA8PSAwKQorICAgICAgICByZXR1cm4gMC4wOworICAgIGlmIChzdGQ6OmlzaW5mKGQpKQor
ICAgICAgICByZXR1cm4gOTAwNzE5OTI1NDc0MDk5MS4wOyAvLyAyICoqIDUzIC0gMQorICAgIHJl
dHVybiBzdGQ6Om1pbihkLCA5MDA3MTk5MjU0NzQwOTkxLjApOworfQorCiBkb3VibGUgSlNWYWx1
ZTo6dG9OdW1iZXJTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KCFpc0ludDMyKCkgJiYgIWlzRG91YmxlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDSlNWYWx1ZS5oCmluZGV4IGI3ZWFhZDJkYTBhMmQ1MzM2NmE5MWU2NGE0YzI5M2ViMGNi
OThjYTcuLmM4MDNiNjQ5YTUwNzIyNTQ0YTkzYzBmNjFjMjAxMjVjYTEyYjVkYzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgKQEAgLTI2Miw2ICsyNjIsNyBA
QCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvSW50ZWdlclByZXNlcnZl
TmFOKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgIGludDMyX3QgdG9JbnQzMihFeGVjU3RhdGUqKSBj
b25zdDsKICAgICB1aW50MzJfdCB0b1VJbnQzMihFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBkb3Vi
bGUgdG9MZW5ndGgoRXhlY1N0YXRlKikgY29uc3Q7CiAKICAgICAvLyBGbG9hdGluZyBwb2ludCBj
b252ZXJzaW9ucyAodGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBXZWJDb3JlOwog
ICAgIC8vIHNpbmdsZSBwcmVjaXNpb24gZmxvYXQgaXMgbm90IGEgcmVwcmVzZW50YXRpb24gdXNl
ZCBpbiBKUyBvciBKU0MpLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCmluZGV4IDI5OTEwNjQ5ODI4N2RmMjg5MDY1MThkM2RhMjcxMjJmYjhj
N2MxY2MuLjU0NWExMzQ3MWQzZGZlOTE4ZDk5NmYwYjA1OWVhNTc4NjY0OGVmYjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTE0
Nyw2ICsxNDcsOSBAQAogCiAjaWYgRU5BQkxFKElOVEwpCiAjaW5jbHVkZSAiSW50bE9iamVjdC5o
IgorI2luY2x1ZGUgPHVuaWNvZGUvdWNvbC5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWRhdC5oPgor
I2luY2x1ZGUgPHVuaWNvZGUvdW51bS5oPgogI2VuZGlmIC8vIEVOQUJMRShJTlRMKQogCiAjaWYg
RU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCkBAIC0xMDA3LDYgKzEwMTAsNTAgQEAgdm9pZCBKU0ds
b2JhbE9iamVjdDo6c2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCiAjZW5kaWYKIH0KIAorIyBp
ZiBFTkFCTEUoSU5UTCkKK2NvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgSlNHbG9iYWxPYmplY3Q6Omlu
dGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKQoreworICAgIGlmIChtX2ludGxDb2xsYXRvckF2
YWlsYWJsZUxvY2FsZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGludDMyX3QgY291bnQgPSB1Y29s
X2NvdW50QXZhaWxhYmxlKCk7CisgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZyBsb2NhbGUodWNvbF9nZXRBdmFpbGFibGUoaSkp
OworICAgICAgICAgICAgLy8gQ2hhbmdlIGZyb20gSUNVIGZvcm1hdCB0byBCQ1A0Ny4KKyAgICAg
ICAgICAgIGxvY2FsZS5yZXBsYWNlKCdfJywgJy0nKTsKKyAgICAgICAgICAgIG1faW50bENvbGxh
dG9yQXZhaWxhYmxlTG9jYWxlcy5hZGQobG9jYWxlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gbV9pbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzOworfQorCitjb25zdCBIYXNoU2V0
PFN0cmluZz4mIEpTR2xvYmFsT2JqZWN0OjppbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2Nh
bGVzKCkKK3sKKyAgICBpZiAobV9pbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzLmlz
RW1wdHkoKSkgeworICAgICAgICBpbnQzMl90IGNvdW50ID0gdWRhdF9jb3VudEF2YWlsYWJsZSgp
OworICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAg
ICAgICBTdHJpbmcgbG9jYWxlKHVkYXRfZ2V0QXZhaWxhYmxlKGkpKTsKKyAgICAgICAgICAgIC8v
IENoYW5nZSBmcm9tIElDVSBmb3JtYXQgdG8gQkNQNDcuCisgICAgICAgICAgICBsb2NhbGUucmVw
bGFjZSgnXycsICctJyk7CisgICAgICAgICAgICBtX2ludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJs
ZUxvY2FsZXMuYWRkKGxvY2FsZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG1faW50
bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlczsKK30KKworY29uc3QgSGFzaFNldDxTdHJp
bmc+JiBKU0dsb2JhbE9iamVjdDo6aW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKQor
eworICAgIGlmIChtX2ludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzLmlzRW1wdHkoKSkg
eworICAgICAgICBpbnQzMl90IGNvdW50ID0gdW51bV9jb3VudEF2YWlsYWJsZSgpOworICAgICAg
ICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBTdHJp
bmcgbG9jYWxlKHVudW1fZ2V0QXZhaWxhYmxlKGkpKTsKKyAgICAgICAgICAgIC8vIENoYW5nZSBm
cm9tIElDVSBmb3JtYXQgdG8gQkNQNDcuCisgICAgICAgICAgICBsb2NhbGUucmVwbGFjZSgnXycs
ICctJyk7CisgICAgICAgICAgICBtX2ludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzLmFk
ZChsb2NhbGUpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBtX2ludGxOdW1iZXJGb3Jt
YXRBdmFpbGFibGVMb2NhbGVzOworfQorI2VuZGlmIC8vIEVOQUJMRShJTlRMKQorCiB2b2lkIEpT
R2xvYmFsT2JqZWN0OjpxdWV1ZU1pY3JvdGFzayhQYXNzUmVmUHRyPE1pY3JvdGFzaz4gdGFzaykK
IHsKICAgICBpZiAoZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cXVldWVUYXNrVG9FdmVudExv
b3ApIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
CmluZGV4IGRjYjNhMDg3Zjc5OWJmNmJkMmM0YTY2MzY4NjA4NDMxZjFiYjRkZWQuLjFkZjZkYTI0
MjAzZmY3ZDE0YjZjNDYxYTM1ZTVkMDY5OGY0YzcxZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAtMzA3LDYgKzMwNywxMiBAQCBwcm90
ZWN0ZWQ6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpTR2xvYmFsT2JqZWN0RGVidWdnYWJsZT4gbV9p
bnNwZWN0b3JEZWJ1Z2dhYmxlOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoSU5UTCkKKyAgICBIYXNo
U2V0PFN0cmluZz4gbV9pbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzOworICAgIEhhc2hTZXQ8
U3RyaW5nPiBtX2ludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXM7CisgICAgSGFzaFNl
dDxTdHJpbmc+IG1faW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXM7CisjZW5kaWYgLy8g
RU5BQkxFKElOVEwpCisKICAgICBSZWZQdHI8V2F0Y2hwb2ludFNldD4gbV9tYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkV2F0Y2hwb2ludDsKICAgICBSZWZQdHI8V2F0Y2hwb2ludFNldD4gbV9oYXZpbmdB
QmFkVGltZVdhdGNocG9pbnQ7CiAgICAgUmVmUHRyPFdhdGNocG9pbnRTZXQ+IG1fdmFySW5qZWN0
aW9uV2F0Y2hwb2ludDsKQEAgLTUyNSw2ICs1MzEsMTIgQEAgcHVibGljOgogICAgIEpTR2xvYmFs
T2JqZWN0RGVidWdnYWJsZSYgaW5zcGVjdG9yRGVidWdnYWJsZSgpIHsgcmV0dXJuICptX2luc3Bl
Y3RvckRlYnVnZ2FibGUuZ2V0KCk7IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKElOVEwpCisgICAg
Y29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCk7Cisg
ICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2Nh
bGVzKCk7CisgICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBpbnRsTnVtYmVyRm9ybWF0QXZhaWxh
YmxlTG9jYWxlcygpOworI2VuZGlmIC8vIEVOQUJMRShJTlRMKQorCiAgICAgdm9pZCBzZXRDb25z
b2xlQ2xpZW50KENvbnNvbGVDbGllbnQqIGNvbnNvbGVDbGllbnQpIHsgbV9jb25zb2xlQ2xpZW50
ID0gY29uc29sZUNsaWVudDsgfQogICAgIENvbnNvbGVDbGllbnQqIGNvbnNvbGVDbGllbnQoKSBj
b25zdCB7IHJldHVybiBtX2NvbnNvbGVDbGllbnQ7IH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGVhNDU2NjgyNDM0YTRk
ODg3OGViOTc4N2QwMTJlYTI4MjYzZmIwYTguLjkwMjllY2I2Mjk1YzZkZWUwMWJhOGNjYzk3ZWZi
OGE5OThhM2JhZWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNS0wOS0xMCAgQW5keSBWYW5X
YWdvbmVyICA8dGhldGFsZWNyYWZ0ZXJAZ21haWwuY29tPgorCisgICAgICAgIFtJTlRMXSBJbXBs
ZW1lbnQgc3VwcG9ydGVkTG9jYWxlc09mIG9uIEludGwgQ29uc3RydWN0b3JzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1OTkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGpzL2ludGwtY29sbGF0b3It
ZXhwZWN0ZWQudHh0OiBBZGRlZCB0ZXN0cyBmb3Igc3VwcG9ydGVkTG9jYWxlc09mCisgICAgICAg
ICoganMvaW50bC1kYXRldGltZWZvcm1hdC1leHBlY3RlZC50eHQ6IEFkZGVkIHRlc3RzIGZvciBz
dXBwb3J0ZWRMb2NhbGVzT2YKKyAgICAgICAgKiBqcy9pbnRsLW51bWJlcmZvcm1hdC1leHBlY3Rl
ZC50eHQ6IEFkZGVkIHRlc3RzIGZvciBzdXBwb3J0ZWRMb2NhbGVzT2YKKyAgICAgICAgKiBqcy9z
Y3JpcHQtdGVzdHMvaW50bC1jb2xsYXRvci5qczogQWRkZWQgdGVzdHMgZm9yIHN1cHBvcnRlZExv
Y2FsZXNPZgorICAgICAgICAqIGpzL3NjcmlwdC10ZXN0cy9pbnRsLWRhdGV0aW1lZm9ybWF0Lmpz
OiBBZGRlZCB0ZXN0cyBmb3Igc3VwcG9ydGVkTG9jYWxlc09mCisgICAgICAgICoganMvc2NyaXB0
LXRlc3RzL2ludGwtbnVtYmVyZm9ybWF0LmpzOiBBZGRlZCB0ZXN0cyBmb3Igc3VwcG9ydGVkTG9j
YWxlc09mCisKIDIwMTUtMDktMTAgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+
CiAKICAgICAgICAgU3B1cmlvdXMgb3V0cHV0IG9uIFdpbmRvd3MgdGVzdHM6IEFRTUVJT01hbmFn
ZXI6OkZpbmRJT1VuaXQ6IGVycm9yIC0xCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9pbnRs
LWNvbGxhdG9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL2ludGwtY29sbGF0b3ItZXhw
ZWN0ZWQudHh0CmluZGV4IDRkNWZkZGY3NTZmYzhmZjAwMGZlZTMwYTU3ZGZhYTA2MjZlNDM1OTgu
LmU0MzUwYzc1NDI4MDM1NGM5NGUwNjNlNDIzNTM2OWQ3ZGMwY2ZiODggMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2pzL2ludGwtY29sbGF0b3ItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L2pzL2ludGwtY29sbGF0b3ItZXhwZWN0ZWQudHh0CkBAIC0xOCw2ICsxOCwyOSBAQCBQQVNTIE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSW50bC5Db2xsYXRvciwgJ3Byb3RvdHlwZScp
LmVudW1lcmFibGUgaXMgZgogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKElu
dGwuQ29sbGF0b3IsICdwcm90b3R5cGUnKS5jb25maWd1cmFibGUgaXMgZmFsc2UKIFBBU1MgSW50
bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YubGVuZ3RoIGlzIDEKIFBBU1MgSW50bC5Db2xs
YXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoKSBpcyBhbiBpbnN0YW5jZSBvZiBBcnJheQorUEFTUyBJ
bnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKG51bGwsICdlbicpIGlzIFsgJ2Vu
JyBdCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoe30sICdlbicp
IGlzIFsgJ2VuJyBdCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwo
MSwgJ2VuJykgaXMgWyAnZW4nIF0KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVz
T2YoOSkgaXMgW10KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuJykg
aXMgWyAnZW4nIF0KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoeyBsZW5n
dGg6IDIsIDE6ICdlbicsIDA6ICdlcycgfSkgaXMgWyAnZXMnLCAnZW4nIF0KK1BBU1MgSW50bC5D
b2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoWyAnZW4nLCAncHQnLCAnZW4nLCAnZXMnIF0pIGlz
IFsgJ2VuJywgJ3B0JywgJ2VzJyBdCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxl
c09mKCdFbi1sYVRuLXVzLXZhcmlhbnQyLXZhcmlhbnQxLTFhYmMtVS1rby10UnVlLUEtYWEtYWFh
LXgtUkVTRVJWRUQnKSBpcyBbICdlbi1MYXRuLVVTLXZhcmlhbnQyLXZhcmlhbnQxLTFhYmMtYS1h
YS1hYWEtdS1rby10cnVlLXgtcmVzZXJ2ZWQnIF0KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0
ZWRMb2NhbGVzT2YoJ25vLWJvaycpIGlzIFsgJ25iJyBdCitQQVNTIEludGwuQ29sbGF0b3Iuc3Vw
cG9ydGVkTG9jYWxlc09mKCd4LXNvbWUtdGhpbmcnKSBpcyBbXQorUEFTUyBJbnRsLkNvbGxhdG9y
LnN1cHBvcnRlZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVuZ3RoOiB7IGdldCgp
IHsgdGhyb3cgRXJyb3IoJ2EnKSB9IH0gfSkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogYS4KK1BB
U1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoT2JqZWN0LmNyZWF0ZShudWxsLCB7
IGxlbmd0aDogeyB2YWx1ZTogMSB9LCAwOiB7IGdldCgpIHsgdGhyb3cgRXJyb3IoJ2InKSB9IH0g
fSkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogYi4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0
ZWRMb2NhbGVzT2YoWyB7IHRvU3RyaW5nKCkgeyB0aHJvdyBFcnJvcignYycpIH0gfSBdKSB0aHJl
dyBleGNlcHRpb24gRXJyb3I6IGMuCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxl
c09mKFsgNSBdKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBsb2NhbGUgdmFsdWUgbXVzdCBi
ZSBhIHN0cmluZyBvciBvYmplY3QuCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxl
c09mKCcnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6
IC4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2EnKSB0aHJldyBleGNl
cHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGEuCitQQVNTIEludGwuQ29s
bGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdhYmNkZWZnaGlqJykgdGhyZXcgZXhjZXB0aW9uIFJh
bmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBhYmNkZWZnaGlqLgorUEFTUyBJbnRsLkNv
bGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignIyQnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJv
cjogaW52YWxpZCBsYW5ndWFnZSB0YWc6ICMkLgorUEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRl
ZExvY2FsZXNPZignZW4tQC1hYmMnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxp
ZCBsYW5ndWFnZSB0YWc6IGVuLUAtYWJjLgorUEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExv
Y2FsZXNPZignZW4tdScpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1
YWdlIHRhZzogZW4tdS4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2Vu
LXUta24tdHJ1ZS11LWtvLXRydWUnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxp
ZCBsYW5ndWFnZSB0YWc6IGVuLXUta24tdHJ1ZS11LWtvLXRydWUuCitQQVNTIEludGwuQ29sbGF0
b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi14JykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6
IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi14LgorUEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRl
ZExvY2FsZXNPZignZW4tKicpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxh
bmd1YWdlIHRhZzogZW4tKi4KIFBBU1MgSW50bC5Db2xsYXRvci5wcm90b3R5cGUuY29uc3RydWN0
b3IgaXMgSW50bC5Db2xsYXRvcgogUEFTUyBJbnRsLkNvbGxhdG9yLnByb3RvdHlwZS5jb21wYXJl
IGlzIGFuIGluc3RhbmNlIG9mIEZ1bmN0aW9uCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoSW50bC5Db2xsYXRvci5wcm90b3R5cGUsICdjb21wYXJlJykuZ2V0IGlzIGFuIGlu
c3RhbmNlIG9mIEZ1bmN0aW9uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9pbnRsLWRhdGV0
aW1lZm9ybWF0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL2ludGwtZGF0ZXRpbWVmb3Jt
YXQtZXhwZWN0ZWQudHh0CmluZGV4IDYwMTczZmUyNzIyZWY2NWIyMjBkZDliZTQ3YWYxNDJiZmJm
Mzg0MzUuLmQwODg1YzIyMWM3ZDEyN2I0ZjZkZTE0ODUwNjZlMWE5MzI1NDY1MjggMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2pzL2ludGwtZGF0ZXRpbWVmb3JtYXQtZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL2pzL2ludGwtZGF0ZXRpbWVmb3JtYXQtZXhwZWN0ZWQudHh0CkBAIC0xOCw2
ICsxOCwyOSBAQCBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSW50bC5EYXRl
VGltZUZvcm1hdCwgJ3Byb3RvdHlwZScpLmVudW1lcmFibAogUEFTUyBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEludGwuRGF0ZVRpbWVGb3JtYXQsICdwcm90b3R5cGUnKS5jb25maWd1
cmFibGUgaXMgZmFsc2UKIFBBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YubGVuZ3RoIGlzIDEKIFBBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YoKSBpcyBhbiBpbnN0YW5jZSBvZiBBcnJheQorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1
cHBvcnRlZExvY2FsZXNPZi5jYWxsKG51bGwsICdlbicpIGlzIFsgJ2VuJyBdCitQQVNTIEludGwu
RGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoe30sICdlbicpIGlzIFsgJ2Vu
JyBdCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoMSwg
J2VuJykgaXMgWyAnZW4nIF0KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2Nh
bGVzT2YoOSkgaXMgW10KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YoJ2VuJykgaXMgWyAnZW4nIF0KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRM
b2NhbGVzT2YoeyBsZW5ndGg6IDIsIDE6ICdlbicsIDA6ICdlcycgfSkgaXMgWyAnZXMnLCAnZW4n
IF0KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoWyAnZW4nLCAn
cHQnLCAnZW4nLCAnZXMnIF0pIGlzIFsgJ2VuJywgJ3B0JywgJ2VzJyBdCitQQVNTIEludGwuRGF0
ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdFbi1sYVRuLXVzLXZhcmlhbnQyLXZhcmlh
bnQxLTFhYmMtVS1rby10UnVlLUEtYWEtYWFhLXgtUkVTRVJWRUQnKSBpcyBbICdlbi1MYXRuLVVT
LXZhcmlhbnQyLXZhcmlhbnQxLTFhYmMtYS1hYS1hYWEtdS1rby10cnVlLXgtcmVzZXJ2ZWQnIF0K
K1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ25vLWJvaycpIGlz
IFsgJ25iJyBdCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCd4
LXNvbWUtdGhpbmcnKSBpcyBbXQorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExv
Y2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVuZ3RoOiB7IGdldCgpIHsgdGhyb3cgRXJy
b3IoJ2EnKSB9IH0gfSkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogYS4KK1BBU1MgSW50bC5EYXRl
VGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoT2JqZWN0LmNyZWF0ZShudWxsLCB7IGxlbmd0
aDogeyB2YWx1ZTogMSB9LCAwOiB7IGdldCgpIHsgdGhyb3cgRXJyb3IoJ2InKSB9IH0gfSkpIHRo
cmV3IGV4Y2VwdGlvbiBFcnJvcjogYi4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0
ZWRMb2NhbGVzT2YoWyB7IHRvU3RyaW5nKCkgeyB0aHJvdyBFcnJvcignYycpIH0gfSBdKSB0aHJl
dyBleGNlcHRpb24gRXJyb3I6IGMuCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVk
TG9jYWxlc09mKFsgNSBdKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBsb2NhbGUgdmFsdWUg
bXVzdCBiZSBhIHN0cmluZyBvciBvYmplY3QuCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3Vw
cG9ydGVkTG9jYWxlc09mKCcnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBs
YW5ndWFnZSB0YWc6IC4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YoJ2EnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6
IGEuCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdhYmNkZWZn
aGlqJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBh
YmNkZWZnaGlqLgorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZign
IyQnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6ICMk
LgorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tQC1hYmMn
KSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLUAt
YWJjLgorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tdScp
IHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tdS4K
K1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXUta24tdHJ1
ZS11LWtvLXRydWUnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFn
ZSB0YWc6IGVuLXUta24tdHJ1ZS11LWtvLXRydWUuCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQu
c3VwcG9ydGVkTG9jYWxlc09mKCdlbi14JykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGlu
dmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi14LgorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBv
cnRlZExvY2FsZXNPZignZW4tKicpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlk
IGxhbmd1YWdlIHRhZzogZW4tKi4KIFBBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5wcm90b3R5cGUu
Y29uc3RydWN0b3IgaXMgSW50bC5EYXRlVGltZUZvcm1hdAogUEFTUyBJbnRsLkRhdGVUaW1lRm9y
bWF0LnByb3RvdHlwZS5mb3JtYXQgaXMgYW4gaW5zdGFuY2Ugb2YgRnVuY3Rpb24KIFBBU1MgT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlw
ZSwgJ2Zvcm1hdCcpLmdldCBpcyBhbiBpbnN0YW5jZSBvZiBGdW5jdGlvbgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvanMvaW50bC1udW1iZXJmb3JtYXQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvanMvaW50bC1udW1iZXJmb3JtYXQtZXhwZWN0ZWQudHh0CmluZGV4IDUyMTg1MWVkNjY1ZDhl
NzQ4ZDFiNjkyNDY1MzQ2YjFmN2JlY2Y0ZDAuLjg3MGYxMTQ3NmY5ZDIxMTRhNGNlMGE2YjYzZTdl
NjQ5MjRiM2MwNDUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2pzL2ludGwtbnVtYmVyZm9ybWF0
LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9qcy9pbnRsLW51bWJlcmZvcm1hdC1leHBl
Y3RlZC50eHQKQEAgLTE4LDYgKzE4LDI5IEBAIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihJbnRsLk51bWJlckZvcm1hdCwgJ3Byb3RvdHlwZScpLmVudW1lcmFibGUKIFBBU1Mg
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJbnRsLk51bWJlckZvcm1hdCwgJ3Byb3Rv
dHlwZScpLmNvbmZpZ3VyYWJsZSBpcyBmYWxzZQogUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBw
b3J0ZWRMb2NhbGVzT2YubGVuZ3RoIGlzIDEKIFBBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9y
dGVkTG9jYWxlc09mKCkgaXMgYW4gaW5zdGFuY2Ugb2YgQXJyYXkKK1BBU1MgSW50bC5OdW1iZXJG
b3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwobnVsbCwgJ2VuJykgaXMgWyAnZW4nIF0KK1BB
U1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoe30sICdlbicpIGlz
IFsgJ2VuJyBdCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5jYWxs
KDEsICdlbicpIGlzIFsgJ2VuJyBdCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExv
Y2FsZXNPZig5KSBpcyBbXQorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YoJ2VuJykgaXMgWyAnZW4nIF0KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9j
YWxlc09mKHsgbGVuZ3RoOiAyLCAxOiAnZW4nLCAwOiAnZXMnIH0pIGlzIFsgJ2VzJywgJ2VuJyBd
CitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihbICdlbicsICdwdCcs
ICdlbicsICdlcycgXSkgaXMgWyAnZW4nLCAncHQnLCAnZXMnIF0KK1BBU1MgSW50bC5OdW1iZXJG
b3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdFbi1sYVRuLXVzLXZhcmlhbnQyLXZhcmlhbnQxLTFh
YmMtVS1rby10UnVlLUEtYWEtYWFhLXgtUkVTRVJWRUQnKSBpcyBbICdlbi1MYXRuLVVTLXZhcmlh
bnQyLXZhcmlhbnQxLTFhYmMtYS1hYS1hYWEtdS1rby10cnVlLXgtcmVzZXJ2ZWQnIF0KK1BBU1Mg
SW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCduby1ib2snKSBpcyBbICduYicg
XQorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ3gtc29tZS10aGlu
ZycpIGlzIFtdCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihPYmpl
Y3QuY3JlYXRlKG51bGwsIHsgbGVuZ3RoOiB7IGdldCgpIHsgdGhyb3cgRXJyb3IoJ2EnKSB9IH0g
fSkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogYS4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3Vw
cG9ydGVkTG9jYWxlc09mKE9iamVjdC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgdmFsdWU6IDEg
fSwgMDogeyBnZXQoKSB7IHRocm93IEVycm9yKCdiJykgfSB9IH0pKSB0aHJldyBleGNlcHRpb24g
RXJyb3I6IGIuCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihbIHsg
dG9TdHJpbmcoKSB7IHRocm93IEVycm9yKCdjJykgfSB9IF0pIHRocmV3IGV4Y2VwdGlvbiBFcnJv
cjogYy4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsgNSBdKSB0
aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBsb2NhbGUgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBv
ciBvYmplY3QuCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignJykg
dGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiAuCitQQVNT
IEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignYScpIHRocmV3IGV4Y2VwdGlv
biBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogYS4KK1BBU1MgSW50bC5OdW1iZXJG
b3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdhYmNkZWZnaGlqJykgdGhyZXcgZXhjZXB0aW9uIFJh
bmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBhYmNkZWZnaGlqLgorUEFTUyBJbnRsLk51
bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJyMkJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdl
RXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiAjJC4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQu
c3VwcG9ydGVkTG9jYWxlc09mKCdlbi1ALWFiYycpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9y
OiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tQC1hYmMuCitQQVNTIEludGwuTnVtYmVyRm9ybWF0
LnN1cHBvcnRlZExvY2FsZXNPZignZW4tdScpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBp
bnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tdS4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9y
dGVkTG9jYWxlc09mKCdlbi11LWtuLXRydWUtdS1rby10cnVlJykgdGhyZXcgZXhjZXB0aW9uIFJh
bmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi11LWtuLXRydWUtdS1rby10cnVlLgor
UEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXgnKSB0aHJldyBl
eGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXguCitQQVNTIElu
dGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tKicpIHRocmV3IGV4Y2VwdGlv
biBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tKi4KIFBBU1MgSW50bC5OdW1i
ZXJGb3JtYXQucHJvdG90eXBlLmNvbnN0cnVjdG9yIGlzIEludGwuTnVtYmVyRm9ybWF0CiBQQVNT
IEludGwuTnVtYmVyRm9ybWF0LnByb3RvdHlwZS5mb3JtYXQgaXMgYW4gaW5zdGFuY2Ugb2YgRnVu
Y3Rpb24KIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJbnRsLk51bWJlckZv
cm1hdC5wcm90b3R5cGUsICdmb3JtYXQnKS5nZXQgaXMgYW4gaW5zdGFuY2Ugb2YgRnVuY3Rpb24K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9pbnRsLWNvbGxhdG9yLmpz
IGIvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2ludGwtY29sbGF0b3IuanMKaW5kZXggNWRl
MTkwZWMzMzBjOThkYjE2MmUyZWI2MzRiMWYzYTY1ZGI4OTUwOC4uZjU0Y2I0ZDQyMjI1ZmEyMzU0
NzM2MGE4NGM3ZGEyNDlkYjA3NDQ3ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvanMvc2NyaXB0
LXRlc3RzL2ludGwtY29sbGF0b3IuanMKKysrIGIvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3Rz
L2ludGwtY29sbGF0b3IuanMKQEAgLTM1LDggKzM1LDQxIEBAIHNob3VsZEJlRmFsc2UoIk9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSW50bC5Db2xsYXRvciwgJ3Byb3RvdHlwZScpLmNv
bmZpCiAvLyBUaGUgdmFsdWUgb2YgdGhlIGxlbmd0aCBwcm9wZXJ0eSBvZiB0aGUgc3VwcG9ydGVk
TG9jYWxlc09mIG1ldGhvZCBpcyAxLgogc2hvdWxkQmUoIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVk
TG9jYWxlc09mLmxlbmd0aCIsICIxIik7CiAKLS8vIFJldHVybnMgU3VwcG9ydGVkTG9jYWxlcwor
Ly8gUmV0dXJucyBTdXBwb3J0ZWRMb2NhbGVzLgogc2hvdWxkQmVUeXBlKCJJbnRsLkNvbGxhdG9y
LnN1cHBvcnRlZExvY2FsZXNPZigpIiwgIkFycmF5Iik7CisvLyBEb2Vzbid0IGNhcmUgYWJvdXQg
YHRoaXNgLgorc2hvdWxkQmUoIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwo
bnVsbCwgJ2VuJykiLCAiWyAnZW4nIF0iKTsKK3Nob3VsZEJlKCJJbnRsLkNvbGxhdG9yLnN1cHBv
cnRlZExvY2FsZXNPZi5jYWxsKHt9LCAnZW4nKSIsICJbICdlbicgXSIpOworc2hvdWxkQmUoIklu
dGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoMSwgJ2VuJykiLCAiWyAnZW4nIF0i
KTsKKy8vIElnbm9yZXMgbm9uLW9iamVjdCwgbm9uLXN0cmluZyBsaXN0Lgorc2hvdWxkQmUoIklu
dGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKDkpIiwgIltdIik7CisvLyBNYWtlcyBhbiBh
cnJheSBvZiB0YWdzLgorc2hvdWxkQmUoIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09m
KCdlbicpIiwgIlsgJ2VuJyBdIik7CisvLyBIYW5kbGVzIGFycmF5LWxpa2Ugb2JqZWN0cy4KK3No
b3VsZEJlKCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZih7IGxlbmd0aDogMiwgMTog
J2VuJywgMDogJ2VzJyB9KSIsICJbICdlcycsICdlbicgXSIpOworLy8gRGVkdXBsaWNhdGVzIHRh
Z3MuCitzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoWyAnZW4nLCAn
cHQnLCAnZW4nLCAnZXMnIF0pIiwgIlsgJ2VuJywgJ3B0JywgJ2VzJyBdIik7CisvLyBDYW5vbmlj
YWxpemVzIHRhZ3MuCitzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2Yo
J0VuLWxhVG4tdXMtdmFyaWFudDItdmFyaWFudDEtMWFiYy1VLWtvLXRSdWUtQS1hYS1hYWEteC1S
RVNFUlZFRCcpIiwgIlsgJ2VuLUxhdG4tVVMtdmFyaWFudDItdmFyaWFudDEtMWFiYy1hLWFhLWFh
YS11LWtvLXRydWUteC1yZXNlcnZlZCcgXSIpOworLy8gUmVwbGFjZXMgb3V0ZGF0ZWQgdGFncy4K
K3Nob3VsZEJlKCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignbm8tYm9rJykiLCAi
WyAnbmInIF0iKTsKKy8vIERvZXNuJ3QgdGhyb3csIGJ1dCBpZ25vcmVzIHByaXZhdGUgdGFncy4K
K3Nob3VsZEJlKCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZigneC1zb21lLXRoaW5n
JykiLCAiW10iKTsKKy8vIFRocm93cyBvbiBwcm9ibGVtcyB3aXRoIGxlbmd0aCwgZ2V0LCBvciB0
b1N0cmluZy4KK3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZihP
YmplY3QuY3JlYXRlKG51bGwsIHsgbGVuZ3RoOiB7IGdldCgpIHsgdGhyb3cgRXJyb3IoJ2EnKSB9
IH0gfSkpIiwgIidFcnJvcjogYSciKTsKK3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1cHBv
cnRlZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVuZ3RoOiB7IHZhbHVlOiAxIH0s
IDA6IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcignYicpIH0gfSB9KSkiLCAiJ0Vycm9yOiBiJyIpOwor
c2hvdWxkVGhyb3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKFsgeyB0b1N0cmlu
ZygpIHsgdGhyb3cgRXJyb3IoJ2MnKSB9IH0gXSkiLCAiJ0Vycm9yOiBjJyIpOworLy8gVGhyb3dz
IG9uIGJhZCB0YWdzLgorc2hvdWxkVGhyb3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxl
c09mKFsgNSBdKSIsICInVHlwZUVycm9yOiBsb2NhbGUgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBv
ciBvYmplY3QnIik7CitzaG91bGRUaHJvdygiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVz
T2YoJycpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogJyIpOworc2hvdWxk
VGhyb3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdhJykiLCAiJ1JhbmdlRXJy
b3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBhJyIpOworc2hvdWxkVGhyb3coIkludGwuQ29sbGF0
b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdhYmNkZWZnaGlqJykiLCAiJ1JhbmdlRXJyb3I6IGludmFs
aWQgbGFuZ3VhZ2UgdGFnOiBhYmNkZWZnaGlqJyIpOworc2hvdWxkVGhyb3coIkludGwuQ29sbGF0
b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCcjJCcpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1
YWdlIHRhZzogIyQnIik7CitzaG91bGRUaHJvdygiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2Nh
bGVzT2YoJ2VuLUAtYWJjJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBl
bi1ALWFiYyciKTsKK3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNP
ZignZW4tdScpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tdSciKTsK
K3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignZW4tdS1rbi10
cnVlLXUta28tdHJ1ZScpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4t
dS1rbi10cnVlLXUta28tdHJ1ZSciKTsKK3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1cHBv
cnRlZExvY2FsZXNPZignZW4teCcpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRh
ZzogZW4teCciKTsKK3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNP
ZignZW4tKicpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tKiciKTsK
IAogLy8gMTAuMyBQcm9wZXJ0aWVzIG9mIHRoZSBJbnRsLkNvbGxhdG9yIFByb3RvdHlwZSBPYmpl
Y3QKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2ludGwtZGF0ZXRp
bWVmb3JtYXQuanMgYi9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1kYXRldGltZWZv
cm1hdC5qcwppbmRleCBiYzdjOWE3N2NlMjExNjJkZDJiODM3ZjU1ZmU0ZjE3MjNjZjc4NGY4Li41
NTZlZWJkZTJmMzA4ZGEwYmM5NGNjOTQ0ZTA4ZmIyMDdkNDVmNWY2IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1kYXRldGltZWZvcm1hdC5qcworKysgYi9MYXlv
dXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1kYXRldGltZWZvcm1hdC5qcwpAQCAtMzcsNiAr
MzcsMzkgQEAgc2hvdWxkQmUoIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09m
Lmxlbmd0aCIsICIxIik7CiAKIC8vIFJldHVybnMgU3VwcG9ydGVkTG9jYWxlcwogc2hvdWxkQmVU
eXBlKCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZigpIiwgIkFycmF5Iik7
CisvLyBEb2Vzbid0IGNhcmUgYWJvdXQgYHRoaXNgLgorc2hvdWxkQmUoIkludGwuRGF0ZVRpbWVG
b3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwobnVsbCwgJ2VuJykiLCAiWyAnZW4nIF0iKTsK
K3Nob3VsZEJlKCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKHt9
LCAnZW4nKSIsICJbICdlbicgXSIpOworc2hvdWxkQmUoIkludGwuRGF0ZVRpbWVGb3JtYXQuc3Vw
cG9ydGVkTG9jYWxlc09mLmNhbGwoMSwgJ2VuJykiLCAiWyAnZW4nIF0iKTsKKy8vIElnbm9yZXMg
bm9uLW9iamVjdCwgbm9uLXN0cmluZyBsaXN0Lgorc2hvdWxkQmUoIkludGwuRGF0ZVRpbWVGb3Jt
YXQuc3VwcG9ydGVkTG9jYWxlc09mKDkpIiwgIltdIik7CisvLyBNYWtlcyBhbiBhcnJheSBvZiB0
YWdzLgorc2hvdWxkQmUoIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdl
bicpIiwgIlsgJ2VuJyBdIik7CisvLyBIYW5kbGVzIGFycmF5LWxpa2Ugb2JqZWN0cy4KK3Nob3Vs
ZEJlKCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZih7IGxlbmd0aDogMiwg
MTogJ2VuJywgMDogJ2VzJyB9KSIsICJbICdlcycsICdlbicgXSIpOworLy8gRGVkdXBsaWNhdGVz
IHRhZ3MuCitzaG91bGRCZSgiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2Yo
WyAnZW4nLCAncHQnLCAnZW4nLCAnZXMnIF0pIiwgIlsgJ2VuJywgJ3B0JywgJ2VzJyBdIik7Cisv
LyBDYW5vbmljYWxpemVzIHRhZ3MuCitzaG91bGRCZSgiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBw
b3J0ZWRMb2NhbGVzT2YoJ0VuLWxhVG4tdXMtdmFyaWFudDItdmFyaWFudDEtMWFiYy1VLWtvLXRS
dWUtQS1hYS1hYWEteC1SRVNFUlZFRCcpIiwgIlsgJ2VuLUxhdG4tVVMtdmFyaWFudDItdmFyaWFu
dDEtMWFiYy1hLWFhLWFhYS11LWtvLXRydWUteC1yZXNlcnZlZCcgXSIpOworLy8gUmVwbGFjZXMg
b3V0ZGF0ZWQgdGFncy4KK3Nob3VsZEJlKCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExv
Y2FsZXNPZignbm8tYm9rJykiLCAiWyAnbmInIF0iKTsKKy8vIERvZXNuJ3QgdGhyb3csIGJ1dCBp
Z25vcmVzIHByaXZhdGUgdGFncy4KK3Nob3VsZEJlKCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBv
cnRlZExvY2FsZXNPZigneC1zb21lLXRoaW5nJykiLCAiW10iKTsKKy8vIFRocm93cyBvbiBwcm9i
bGVtcyB3aXRoIGxlbmd0aCwgZ2V0LCBvciB0b1N0cmluZy4KK3Nob3VsZFRocm93KCJJbnRsLkRh
dGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVu
Z3RoOiB7IGdldCgpIHsgdGhyb3cgRXJyb3IoJ2EnKSB9IH0gfSkpIiwgIidFcnJvcjogYSciKTsK
K3Nob3VsZFRocm93KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihPYmpl
Y3QuY3JlYXRlKG51bGwsIHsgbGVuZ3RoOiB7IHZhbHVlOiAxIH0sIDA6IHsgZ2V0KCkgeyB0aHJv
dyBFcnJvcignYicpIH0gfSB9KSkiLCAiJ0Vycm9yOiBiJyIpOworc2hvdWxkVGhyb3coIkludGwu
RGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsgeyB0b1N0cmluZygpIHsgdGhyb3cg
RXJyb3IoJ2MnKSB9IH0gXSkiLCAiJ0Vycm9yOiBjJyIpOworLy8gVGhyb3dzIG9uIGJhZCB0YWdz
Lgorc2hvdWxkVGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsg
NSBdKSIsICInVHlwZUVycm9yOiBsb2NhbGUgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvciBvYmpl
Y3QnIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YoJycpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogJyIpOworc2hvdWxk
VGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdhJykiLCAiJ1Jh
bmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBhJyIpOworc2hvdWxkVGhyb3coIkludGwu
RGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdhYmNkZWZnaGlqJykiLCAiJ1Jhbmdl
RXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBhYmNkZWZnaGlqJyIpOworc2hvdWxkVGhyb3co
IkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCcjJCcpIiwgIidSYW5nZUVy
cm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogIyQnIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRl
VGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLUAtYWJjJykiLCAiJ1JhbmdlRXJyb3I6
IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi1ALWFiYyciKTsKK3Nob3VsZFRocm93KCJJbnRsLkRh
dGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tdScpIiwgIidSYW5nZUVycm9yOiBp
bnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tdSciKTsKK3Nob3VsZFRocm93KCJJbnRsLkRhdGVUaW1l
Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tdS1rbi10cnVlLXUta28tdHJ1ZScpIiwgIidS
YW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tdS1rbi10cnVlLXUta28tdHJ1ZSci
KTsKK3Nob3VsZFRocm93KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZign
ZW4teCcpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4teCciKTsKK3No
b3VsZFRocm93KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tKicp
IiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tKiciKTsKIAogLy8gMTIu
MyBQcm9wZXJ0aWVzIG9mIHRoZSBJbnRsLkRhdGVUaW1lRm9ybWF0IFByb3RvdHlwZSBPYmplY3QK
IApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2ludGwtbnVtYmVyZm9y
bWF0LmpzIGIvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2ludGwtbnVtYmVyZm9ybWF0Lmpz
CmluZGV4IDA2NWQ5MjE1NjU0MzQyZGE3ZTRmMjMzZTYzY2Q1N2FkZmU1OWQ0ZWIuLjczMjY3ODNi
YmE4NzAyZmUxNGYxOWUyODU4YTFmOTg1NjQzZWM4YWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2pzL3NjcmlwdC10ZXN0cy9pbnRsLW51bWJlcmZvcm1hdC5qcworKysgYi9MYXlvdXRUZXN0cy9q
cy9zY3JpcHQtdGVzdHMvaW50bC1udW1iZXJmb3JtYXQuanMKQEAgLTM3LDYgKzM3LDM5IEBAIHNo
b3VsZEJlKCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YubGVuZ3RoIiwgIjEi
KTsKIAogLy8gUmV0dXJucyBTdXBwb3J0ZWRMb2NhbGVzCiBzaG91bGRCZVR5cGUoIkludGwuTnVt
YmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZigpIiwgIkFycmF5Iik7CisvLyBEb2Vzbid0IGNh
cmUgYWJvdXQgYHRoaXNgLgorc2hvdWxkQmUoIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExv
Y2FsZXNPZi5jYWxsKG51bGwsICdlbicpIiwgIlsgJ2VuJyBdIik7CitzaG91bGRCZSgiSW50bC5O
dW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoe30sICdlbicpIiwgIlsgJ2VuJyBd
Iik7CitzaG91bGRCZSgiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwo
MSwgJ2VuJykiLCAiWyAnZW4nIF0iKTsKKy8vIElnbm9yZXMgbm9uLW9iamVjdCwgbm9uLXN0cmlu
ZyBsaXN0Lgorc2hvdWxkQmUoIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZig5
KSIsICJbXSIpOworLy8gTWFrZXMgYW4gYXJyYXkgb2YgdGFncy4KK3Nob3VsZEJlKCJJbnRsLk51
bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuJykiLCAiWyAnZW4nIF0iKTsKKy8vIEhh
bmRsZXMgYXJyYXktbGlrZSBvYmplY3RzLgorc2hvdWxkQmUoIkludGwuTnVtYmVyRm9ybWF0LnN1
cHBvcnRlZExvY2FsZXNPZih7IGxlbmd0aDogMiwgMTogJ2VuJywgMDogJ2VzJyB9KSIsICJbICdl
cycsICdlbicgXSIpOworLy8gRGVkdXBsaWNhdGVzIHRhZ3MuCitzaG91bGRCZSgiSW50bC5OdW1i
ZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsgJ2VuJywgJ3B0JywgJ2VuJywgJ2VzJyBdKSIs
ICJbICdlbicsICdwdCcsICdlcycgXSIpOworLy8gQ2Fub25pY2FsaXplcyB0YWdzLgorc2hvdWxk
QmUoIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignRW4tbGFUbi11cy12YXJp
YW50Mi12YXJpYW50MS0xYWJjLVUta28tdFJ1ZS1BLWFhLWFhYS14LVJFU0VSVkVEJykiLCAiWyAn
ZW4tTGF0bi1VUy12YXJpYW50Mi12YXJpYW50MS0xYWJjLWEtYWEtYWFhLXUta28tdHJ1ZS14LXJl
c2VydmVkJyBdIik7CisvLyBSZXBsYWNlcyBvdXRkYXRlZCB0YWdzLgorc2hvdWxkQmUoIkludGwu
TnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignbm8tYm9rJykiLCAiWyAnbmInIF0iKTsK
Ky8vIERvZXNuJ3QgdGhyb3csIGJ1dCBpZ25vcmVzIHByaXZhdGUgdGFncy4KK3Nob3VsZEJlKCJJ
bnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ3gtc29tZS10aGluZycpIiwgIltd
Iik7CisvLyBUaHJvd3Mgb24gcHJvYmxlbXMgd2l0aCBsZW5ndGgsIGdldCwgb3IgdG9TdHJpbmcu
CitzaG91bGRUaHJvdygiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKE9iamVj
dC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcignYScpIH0gfSB9
KSkiLCAiJ0Vycm9yOiBhJyIpOworc2hvdWxkVGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBv
cnRlZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVuZ3RoOiB7IHZhbHVlOiAxIH0s
IDA6IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcignYicpIH0gfSB9KSkiLCAiJ0Vycm9yOiBiJyIpOwor
c2hvdWxkVGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihbIHsgdG9T
dHJpbmcoKSB7IHRocm93IEVycm9yKCdjJykgfSB9IF0pIiwgIidFcnJvcjogYyciKTsKKy8vIFRo
cm93cyBvbiBiYWQgdGFncy4KK3Nob3VsZFRocm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0
ZWRMb2NhbGVzT2YoWyA1IF0pIiwgIidUeXBlRXJyb3I6IGxvY2FsZSB2YWx1ZSBtdXN0IGJlIGEg
c3RyaW5nIG9yIG9iamVjdCciKTsKK3Nob3VsZFRocm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBw
b3J0ZWRMb2NhbGVzT2YoJycpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzog
JyIpOworc2hvdWxkVGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZign
YScpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogYSciKTsKK3Nob3VsZFRo
cm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2FiY2RlZmdoaWonKSIs
ICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGFiY2RlZmdoaWonIik7CitzaG91
bGRUaHJvdygiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCcjJCcpIiwgIidS
YW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogIyQnIik7CitzaG91bGRUaHJvdygiSW50
bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi1ALWFiYycpIiwgIidSYW5nZUVy
cm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tQC1hYmMnIik7CitzaG91bGRUaHJvdygiSW50
bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi11JykiLCAiJ1JhbmdlRXJyb3I6
IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi11JyIpOworc2hvdWxkVGhyb3coIkludGwuTnVtYmVy
Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tdS1rbi10cnVlLXUta28tdHJ1ZScpIiwgIidS
YW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tdS1rbi10cnVlLXUta28tdHJ1ZSci
KTsKK3Nob3VsZFRocm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2Vu
LXgnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXgnIik7CitzaG91
bGRUaHJvdygiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi0qJykiLCAi
J1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi0qJyIpOwogCiAvLyAxMS4zIFBy
b3BlcnRpZXMgb2YgdGhlIEludGwuTnVtYmVyRm9ybWF0IFByb3RvdHlwZSBPYmplY3QKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261054</attachid>
            <date>2015-09-12 07:56:07 -0700</date>
            <delta_ts>2015-09-12 10:12:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147599-20150912085558.patch</filename>
            <type>text/plain</type>
            <size>180971</size>
            <attacher name="Andy VanWagoner">andy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5NjQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
YWRiYTlkMTcxZTJhYjk4YTRhMjBlY2VkNTU0MTY4NzY0MjkzM2M3Li4xNzQyNzUwMjA4NGU5Njhk
MTBhMTgyZDk1Mzg1NWE5ZjY3YmM1ZGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0OCBAQAorMjAxNS0wOS0xMiAgQW5keSBWYW5XYWdvbmVyICA8dGhldGFsZWNyYWZ0ZXJA
Z21haWwuY29tPgorCisgICAgICAgIFtJTlRMXSBJbXBsZW1lbnQgc3VwcG9ydGVkTG9jYWxlc09m
IG9uIEludGwgQ29uc3RydWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDc1OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbXBsZW1lbnRzIGFsbCBvZiB0aGUgYWJzdHJhY3Qgb3BlcmF0aW9ucyB1
c2VkIGJ5IHN1cHBvcnRlZExvY2FsZXNPZiwKKyAgICAgICAgZXhjZXB0IGR1cmluZyBjYW5vbmlj
YWxpemF0aW9uIGl0IGRvZXMgbm90IHJlcGxhY2UgcmVkdW5kYW50IHRhZ3MsCisgICAgICAgIG9y
IHN1YnRhZ3Mgd2l0aCB0aGVpciBwcmVmZXJyZWQgdmFsdWVzLgorCisgICAgICAgICogaWN1L3Vu
aWNvZGUvdWNhbC5oOiBBZGRlZC4KKyAgICAgICAgKiBpY3UvdW5pY29kZS91ZGF0Lmg6IEFkZGVk
LgorICAgICAgICAqIGljdS91bmljb2RlL3VtaXNjLmg6IEFkZGVkLgorICAgICAgICAqIGljdS91
bmljb2RlL3VudW0uaDogQWRkZWQuCisgICAgICAgICogaWN1L3VuaWNvZGUvdXR5cGVzLmg6IENs
ZWFyIHRoZSBVX1NIT1dfQ1BMVVNQTFVTX0FQSSBmbGFnIHRvIHByZXZlbnQgQysrIGhlYWRlcnMg
ZnJvbSBiZWluZyBpbmNsdWRlZC4KKyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJz
Lmg6IEFkZGUgbG9jYWxlTWF0Y2hlci4KKyAgICAgICAgKiBydW50aW1lL0ludGxDb2xsYXRvckNv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yQ29uc3RydWN0b3JGdW5j
U3VwcG9ydGVkTG9jYWxlc09mKTogSW1wbGVtZW50ZWQuCisgICAgICAgICogcnVudGltZS9JbnRs
RGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkludGxEYXRlVGlt
ZUZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZik6IEltcGxlbWVudGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNP
Zik6IEltcGxlbWVudGVkLgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OmNhbm9uaWNhbGl6ZUxhbmd1YWdlVGFnKToKKyAgICAgICAgKEpTQzo6Z2V0Q2Fu
b25pY2FsTGFuZ1RhZyk6CisgICAgICAgIChKU0M6OmdldFByaXZhdGVVc2VMYW5nVGFnKToKKyAg
ICAgICAgKEpTQzo6Z2V0R3JhbmRmYXRoZXJlZExhbmdUYWcpOgorICAgICAgICAoSlNDOjpjYW5v
bmljYWxpemVMb2NhbGVMaXN0KToKKyAgICAgICAgKEpTQzo6YmVzdEF2YWlsYWJsZUxvY2FsZSk6
CisgICAgICAgIChKU0M6Omxvb2t1cFN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAoSlNDOjpi
ZXN0Rml0U3VwcG9ydGVkTG9jYWxlcyk6CisgICAgICAgIChKU0M6OnN1cHBvcnRlZExvY2FsZXMp
OgorICAgICAgICAoSlNDOjpnZXRJbnRsU3RyaW5nT3B0aW9uKToKKyAgICAgICAgKEpTQzo6Z2V0
SW50bEJvb2xlYW5PcHRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5oOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5oOiBBZGRlZCB0b0xlbmd0aC4KKyAgICAgICAgKiBy
dW50aW1lL0pTQ0pTVmFsdWUuY3BwOiBBZGRlZCB0b0xlbmd0aC4KKyAgICAgICAgKEpTQzo6SlNW
YWx1ZTo6dG9MZW5ndGgpOiBJbXBsZW1lbnQgVG9MZW5ndGggZnJvbSBFQ01BIDI2MiA2LjAgNy4x
LjE1CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjppbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKTogQWRkZWQgbGF6
eSBsb2NhbGUgbGlzdC4KKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmludGxEYXRlVGlt
ZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMpOiBBZGRlZCBsYXp5IGxvY2FsZSBsaXN0LgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMp
OiBBZGRlZCBsYXp5IGxvY2FsZSBsaXN0LgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaDoKKwogMjAxNS0wOS0xMSAgU3Vrb2xzYWsgU2Frc2h1d29uZyAgPHN1a29sc2FrQGdtYWls
LmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgdGhlIHJlbGF0aW9uYWwgaW5zdHJ1Y3Rpb25zIGZv
ciBmbG9hdHMgaW4gV2ViQXNzZW1ibHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pY3UvdW5pY29kZS91Y2FsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUv
dWNhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjk5N2FmMTUzZDQzOWI0YzEzMmQ0Y2YwYzFlNTE4MjI2OThiMzdi
MTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUv
dWNhbC5oCkBAIC0wLDAgKzEsMTI4NSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisg
KiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5l
cyBDb3Jwb3JhdGlvbiBhbmQKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBVQ0FMX0gKKyNkZWZpbmUgVUNBTF9I
CisKKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWVudW0u
aCIKKyNpbmNsdWRlICJ1bmljb2RlL3Vsb2MuaCIKKyNpbmNsdWRlICJ1bmljb2RlL2xvY2FscG9p
bnRlci5oIgorCisjaWYgIVVDT05GSUdfTk9fRk9STUFUVElORworCisvKioKKyAqIFxmaWxlCisg
KiBcYnJpZWYgQyBBUEk6IENhbGVuZGFyCisgKgorICogPGgyPkNhbGVuZGFyIEMgQVBJPC9oMj4K
KyAqCisgKiBVQ2FsZW5kYXIgQyBBUEkgaXMgdXNlZCAgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBh
IDxjb2RlPlVEYXRlPC9jb2RlPiBvYmplY3QKKyAqIGFuZCBhIHNldCBvZiBpbnRlZ2VyIGZpZWxk
cyBzdWNoIGFzIDxjb2RlPlVDQUxfWUVBUjwvY29kZT4sIDxjb2RlPlVDQUxfTU9OVEg8L2NvZGU+
LAorICogPGNvZGU+VUNBTF9EQVk8L2NvZGU+LCA8Y29kZT5VQ0FMX0hPVVI8L2NvZGU+LCBhbmQg
c28gb24uCisgKiAoQSA8Y29kZT5VRGF0ZTwvY29kZT4gb2JqZWN0IHJlcHJlc2VudHMgYSBzcGVj
aWZpYyBpbnN0YW50IGluCisgKiB0aW1lIHdpdGggbWlsbGlzZWNvbmQgcHJlY2lzaW9uLiBTZWUg
VURhdGUKKyAqIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgPGNvZGU+VURhdGU8L2NvZGU+IC4p
CisgKgorICogPHA+CisgKiBUeXBlcyBvZiA8Y29kZT5VQ2FsZW5kYXI8L2NvZGU+IGludGVycHJl
dCBhIDxjb2RlPlVEYXRlPC9jb2RlPgorICogYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiBhIHNw
ZWNpZmljIGNhbGVuZGFyIHN5c3RlbS4gVGhlIFVfU1RBQkxFCisgKiBwcm92aWRlcyB0aGUgZW51
bSBVQ2FsZW5kYXJUeXBlIHdpdGggVUNBTF9UUkFESVRJT05BTCBhbmQKKyAqIFVDQUxfR1JFR09S
SUFOLgorICogPHA+CisgKiBMaWtlIG90aGVyIGxvY2FsZS1zZW5zaXRpdmUgQyBBUEksIGNhbGVu
ZGFyIEFQSSAgcHJvdmlkZXMgYQorICogZnVuY3Rpb24sIDxjb2RlPnVjYWxfb3BlbigpPC9jb2Rl
Piwgd2hpY2ggcmV0dXJucyBhIHBvaW50ZXIgdG8KKyAqIDxjb2RlPlVDYWxlbmRhcjwvY29kZT4g
d2hvc2UgdGltZSBmaWVsZHMgaGF2ZSBiZWVuIGluaXRpYWxpemVkCisgKiB3aXRoIHRoZSBjdXJy
ZW50IGRhdGUgYW5kIHRpbWUuIFdlIG5lZWQgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZgorICogY2Fs
ZW5kYXIgdG8gYmUgb3BlbmVkIGFuZCB0aGUgIHRpbWV6b25lSWQuCisgKiBcaHRtbG9ubHk8Ymxv
Y2txdW90ZT5cZW5kaHRtbG9ubHkKKyAqIDxwcmU+CisgKiBcY29kZQorICogVUNhbGVuZGFyICpj
YWxkZWY7CisgKiBVQ2hhciAqdHpJZDsKKyAqIFVFcnJvckNvZGUgc3RhdHVzOworICogdHpJZD0o
VUNoYXIqKW1hbGxvYyhzaXplb2YoVUNoYXIpICogKHN0cmxlbigiUFNUIikgKzEpICk7CisgKiB1
X3Vhc3RyY3B5KHR6SWQsICJQU1QiKTsKKyAqIGNhbGRlZj11Y2FsX29wZW4odHpJRCwgdV9zdHJs
ZW4odHpJRCksIE5VTEwsIFVDQUxfVFJBRElUSU9OQUwsICZzdGF0dXMpOworICogXGVuZGNvZGUK
KyAqIDwvcHJlPgorICogXGh0bWxvbmx5PC9ibG9ja3F1b3RlPlxlbmRodG1sb25seQorICoKKyAq
IDxwPgorICogQSA8Y29kZT5VQ2FsZW5kYXI8L2NvZGU+IG9iamVjdCBjYW4gcHJvZHVjZSBhbGwg
dGhlIHRpbWUgZmllbGQgdmFsdWVzCisgKiBuZWVkZWQgdG8gaW1wbGVtZW50IHRoZSBkYXRlLXRp
bWUgZm9ybWF0dGluZyBmb3IgYSBwYXJ0aWN1bGFyIGxhbmd1YWdlCisgKiBhbmQgY2FsZW5kYXIg
c3R5bGUgKGZvciBleGFtcGxlLCBKYXBhbmVzZS1HcmVnb3JpYW4sIEphcGFuZXNlLVRyYWRpdGlv
bmFsKS4KKyAqCisgKiA8cD4KKyAqIFdoZW4gY29tcHV0aW5nIGEgPGNvZGU+VURhdGU8L2NvZGU+
IGZyb20gdGltZSBmaWVsZHMsIHR3byBzcGVjaWFsIGNpcmN1bXN0YW5jZXMKKyAqIG1heSBhcmlz
ZTogdGhlcmUgbWF5IGJlIGluc3VmZmljaWVudCBpbmZvcm1hdGlvbiB0byBjb21wdXRlIHRoZQor
ICogPGNvZGU+VURhdGU8L2NvZGU+IChzdWNoIGFzIG9ubHkgeWVhciBhbmQgbW9udGggYnV0IG5v
IGRheSBpbiB0aGUgbW9udGgpLAorICogb3IgdGhlcmUgbWF5IGJlIGluY29uc2lzdGVudCBpbmZv
cm1hdGlvbiAoc3VjaCBhcyAiVHVlc2RheSwgSnVseSAxNSwgMTk5NiIKKyAqIC0tIEp1bHkgMTUs
IDE5OTYgaXMgYWN0dWFsbHkgYSBNb25kYXkpLgorICoKKyAqIDxwPgorICogPHN0cm9uZz5JbnN1
ZmZpY2llbnQgaW5mb3JtYXRpb24uPC9zdHJvbmc+IFRoZSBjYWxlbmRhciB3aWxsIHVzZSBkZWZh
dWx0CisgKiBpbmZvcm1hdGlvbiB0byBzcGVjaWZ5IHRoZSBtaXNzaW5nIGZpZWxkcy4gVGhpcyBt
YXkgdmFyeSBieSBjYWxlbmRhcjsgZm9yCisgKiB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyLCB0aGUg
ZGVmYXVsdCBmb3IgYSBmaWVsZCBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZQorICogc3RhcnQg
b2YgdGhlIGVwb2NoOiBpLmUuLCBVQ0FMX1lFQVIgPSAxOTcwLCBVQ0FMX01PTlRIID0gSkFOVUFS
WSwgVUNBTF9EQVRFID0gMSwgZXRjLgorICoKKyAqIDxwPgorICogPHN0cm9uZz5JbmNvbnNpc3Rl
bnQgaW5mb3JtYXRpb24uPC9zdHJvbmc+IElmIGZpZWxkcyBjb25mbGljdCwgdGhlIGNhbGVuZGFy
CisgKiB3aWxsIGdpdmUgcHJlZmVyZW5jZSB0byBmaWVsZHMgc2V0IG1vcmUgcmVjZW50bHkuIEZv
ciBleGFtcGxlLCB3aGVuCisgKiBkZXRlcm1pbmluZyB0aGUgZGF5LCB0aGUgY2FsZW5kYXIgd2ls
bCBsb29rIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogY29tYmluYXRpb25zIG9mIGZpZWxk
cy4gIFRoZSBtb3N0IHJlY2VudCBjb21iaW5hdGlvbiwgYXMgZGV0ZXJtaW5lZCBieSB0aGUKKyAq
IG1vc3QgcmVjZW50bHkgc2V0IHNpbmdsZSBmaWVsZCwgd2lsbCBiZSB1c2VkLgorICoKKyAqIFxo
dG1sb25seTxibG9ja3F1b3RlPlxlbmRodG1sb25seQorICogPHByZT4KKyAqIFxjb2RlCisgKiBV
Q0FMX01PTlRIICsgVUNBTF9EQVlfT0ZfTU9OVEgKKyAqIFVDQUxfTU9OVEggKyBVQ0FMX1dFRUtf
T0ZfTU9OVEggKyBVQ0FMX0RBWV9PRl9XRUVLCisgKiBVQ0FMX01PTlRIICsgVUNBTF9EQVlfT0Zf
V0VFS19JTl9NT05USCArIFVDQUxfREFZX09GX1dFRUsKKyAqIFVDQUxfREFZX09GX1lFQVIKKyAq
IFVDQUxfREFZX09GX1dFRUsgKyBVQ0FMX1dFRUtfT0ZfWUVBUgorICogXGVuZGNvZGUKKyAqIDwv
cHJlPgorICogXGh0bWxvbmx5PC9ibG9ja3F1b3RlPlxlbmRodG1sb25seQorICoKKyAqIEZvciB0
aGUgdGltZSBvZiBkYXk6CisgKgorICogXGh0bWxvbmx5PGJsb2NrcXVvdGU+XGVuZGh0bWxvbmx5
CisgKiA8cHJlPgorICogXGNvZGUKKyAqIFVDQUxfSE9VUl9PRl9EQVkKKyAqIFVDQUxfQU1fUE0g
KyBVQ0FMX0hPVVIKKyAqIFxlbmRjb2RlCisgKiA8L3ByZT4KKyAqIFxodG1sb25seTwvYmxvY2tx
dW90ZT5cZW5kaHRtbG9ubHkKKyAqCisgKiA8cD4KKyAqIDxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4g
Zm9yIHNvbWUgbm9uLUdyZWdvcmlhbiBjYWxlbmRhcnMsIGRpZmZlcmVudAorICogZmllbGRzIG1h
eSBiZSBuZWNlc3NhcnkgZm9yIGNvbXBsZXRlIGRpc2FtYmlndWF0aW9uLiBGb3IgZXhhbXBsZSwg
YSBmdWxsCisgKiBzcGVjaWZpY2F0aW9uIG9mIHRoZSBoaXN0b3JpYWwgQXJhYmljIGFzdHJvbm9t
aWNhbCBjYWxlbmRhciByZXF1aXJlcyB5ZWFyLAorICogbW9udGgsIGRheS1vZi1tb250aCA8ZW0+
YW5kPC9lbT4gZGF5LW9mLXdlZWsgaW4gc29tZSBjYXNlcy4KKyAqCisgKiA8cD4KKyAqIDxzdHJv
bmc+Tm90ZTo8L3N0cm9uZz4gVGhlcmUgYXJlIGNlcnRhaW4gcG9zc2libGUgYW1iaWd1aXRpZXMg
aW4KKyAqIGludGVycHJldGF0aW9uIG9mIGNlcnRhaW4gc2luZ3VsYXIgdGltZXMsIHdoaWNoIGFy
ZSByZXNvbHZlZCBpbiB0aGUKKyAqIGZvbGxvd2luZyB3YXlzOgorICogPG9sPgorICogICAgIDxs
aT4gMjQ6MDA6MDAgImJlbG9uZ3MiIHRvIHRoZSBmb2xsb3dpbmcgZGF5LiBUaGF0IGlzLAorICog
ICAgICAgICAgMjM6NTkgb24gRGVjIDMxLCAxOTY5ICZsdDsgMjQ6MDAgb24gSmFuIDEsIDE5NzAg
Jmx0OyAyNDowMTowMCBvbiBKYW4gMSwgMTk3MAorICoKKyAqICAgICA8bGk+IEFsdGhvdWdoIGhp
c3RvcmljYWxseSBub3QgcHJlY2lzZSwgbWlkbmlnaHQgYWxzbyBiZWxvbmdzIHRvICJhbSIsCisg
KiAgICAgICAgICBhbmQgbm9vbiBiZWxvbmdzIHRvICJwbSIsIHNvIG9uIHRoZSBzYW1lIGRheSwK
KyAqICAgICAgICAgIDEyOjAwIGFtIChtaWRuaWdodCkgJmx0OyAxMjowMSBhbSwgYW5kIDEyOjAw
IHBtIChub29uKSAmbHQ7IDEyOjAxIHBtCisgKiA8L29sPgorICoKKyAqIDxwPgorICogVGhlIGRh
dGUgb3IgdGltZSBmb3JtYXQgc3RyaW5ncyBhcmUgbm90IHBhcnQgb2YgdGhlIGRlZmluaXRpb24g
b2YgYQorICogY2FsZW5kYXIsIGFzIHRob3NlIG11c3QgYmUgbW9kaWZpYWJsZSBvciBvdmVycmlk
YWJsZSBieSB0aGUgdXNlciBhdAorICogcnVudGltZS4gVXNlIHtAbGluayBEYXRlRm9ybWF0fQor
ICogdG8gZm9ybWF0IGRhdGVzLgorICoKKyAqIDxwPgorICogPGNvZGU+Q2FsZW5kYXI8L2NvZGU+
IHByb3ZpZGVzIGFuIEFQSSBmb3IgZmllbGQgInJvbGxpbmciLCB3aGVyZSBmaWVsZHMKKyAqIGNh
biBiZSBpbmNyZW1lbnRlZCBvciBkZWNyZW1lbnRlZCwgYnV0IHdyYXAgYXJvdW5kLiBGb3IgZXhh
bXBsZSwgcm9sbGluZyB0aGUKKyAqIG1vbnRoIHVwIGluIHRoZSBkYXRlIDxjb2RlPkRlY2VtYmVy
IDEyLCA8Yj4xOTk2PC9iPjwvY29kZT4gcmVzdWx0cyBpbgorICogPGNvZGU+SmFudWFyeSAxMiwg
PGI+MTk5NjwvYj48L2NvZGU+LgorICoKKyAqIDxwPgorICogPGNvZGU+Q2FsZW5kYXI8L2NvZGU+
IGFsc28gcHJvdmlkZXMgYSBkYXRlIGFyaXRobWV0aWMgZnVuY3Rpb24gZm9yCisgKiBhZGRpbmcg
dGhlIHNwZWNpZmllZCAoc2lnbmVkKSBhbW91bnQgb2YgdGltZSB0byBhIHBhcnRpY3VsYXIgdGlt
ZSBmaWVsZC4KKyAqIEZvciBleGFtcGxlLCBzdWJ0cmFjdGluZyA1IGRheXMgZnJvbSB0aGUgZGF0
ZSA8Y29kZT5TZXB0ZW1iZXIgMTIsIDE5OTY8L2NvZGU+CisgKiByZXN1bHRzIGluIDxjb2RlPlNl
cHRlbWJlciA3LCAxOTk2PC9jb2RlPi4KKyAqCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworCisv
KiogQSBjYWxlbmRhci4KKyAqICBGb3IgdXNhZ2UgaW4gQyBwcm9ncmFtcy4KKyAqIEBzdGFibGUg
SUNVIDIuMAorICovCit0eXBlZGVmIHZvaWQqIFVDYWxlbmRhcjsKKworLyoqIFBvc3NpYmxlIHR5
cGVzIG9mIFVDYWxlbmRhcnMgCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworZW51bSBVQ2FsZW5k
YXJUeXBlIHsKKyAgLyoqCisgICAqIERlc3BpdGUgdGhlIG5hbWUsIFVDQUxfVFJBRElUSU9OQUwg
ZGVzaWduYXRlcyB0aGUgbG9jYWxlJ3MgZGVmYXVsdCBjYWxlbmRhciwKKyAgICogd2hpY2ggbWF5
IGJlIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIgb3Igc29tZSBvdGhlciBjYWxlbmRhci4KKyAgICog
QHN0YWJsZSBJQ1UgMi4wCisgICAqLworICBVQ0FMX1RSQURJVElPTkFMLAorICAvKioKKyAgICog
QSBiZXR0ZXIgbmFtZSBmb3IgVUNBTF9UUkFESVRJT05BTC4KKyAgICogQHN0YWJsZSBJQ1UgNC4y
CisgICAqLworICBVQ0FMX0RFRkFVTFQgPSBVQ0FMX1RSQURJVElPTkFMLAorICAvKioKKyAgICog
VW5hbWJpZ3VvdXNseSBkZXNpZ25hdGVzIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIgZm9yIHRoZSBs
b2NhbGUuCisgICAqIEBzdGFibGUgSUNVIDIuMAorICAgKi8KKyAgVUNBTF9HUkVHT1JJQU4KK307
CisKKy8qKiBAc3RhYmxlIElDVSAyLjAgKi8KK3R5cGVkZWYgZW51bSBVQ2FsZW5kYXJUeXBlIFVD
YWxlbmRhclR5cGU7CisKKy8qKiBQb3NzaWJsZSBmaWVsZHMgaW4gYSBVQ2FsZW5kYXIgCisgKiBA
c3RhYmxlIElDVSAyLjAKKyAqLworZW51bSBVQ2FsZW5kYXJEYXRlRmllbGRzIHsKKyAgLyoqIAor
ICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUgZXJhLCBlLmcuLCBBRCBvciBCQyBpbiB0
aGUgR3JlZ29yaWFuIChKdWxpYW4pIGNhbGVuZGFyLiAKKyAgICogVGhpcyBpcyBhIGNhbGVuZGFy
LXNwZWNpZmljIHZhbHVlLgorICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAqLworICBVQ0FMX0VS
QSwKKworICAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlIHllYXIuIFRoaXMg
aXMgYSBjYWxlbmRhci1zcGVjaWZpYyB2YWx1ZS4KKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAg
Ki8KKyAgVUNBTF9ZRUFSLAorCisgIC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZyB0
aGUgbW9udGguIFRoaXMgaXMgYSBjYWxlbmRhci1zcGVjaWZpYyB2YWx1ZS4gCisgICAqIFRoZSBm
aXJzdCBtb250aCBvZiB0aGUgeWVhciBpcworICAgKiA8Y29kZT5KQU5VQVJZPC9jb2RlPjsgdGhl
IGxhc3QgZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mIG1vbnRocyBpbiBhIHllYXIuCisgICAqIEBz
ZWUgI1VDQUxfSkFOVUFSWQorICAgKiBAc2VlICNVQ0FMX0ZFQlJVQVJZCisgICAqIEBzZWUgI1VD
QUxfTUFSQ0gKKyAgICogQHNlZSAjVUNBTF9BUFJJTAorICAgKiBAc2VlICNVQ0FMX01BWQorICAg
KiBAc2VlICNVQ0FMX0pVTkUKKyAgICogQHNlZSAjVUNBTF9KVUxZCisgICAqIEBzZWUgI1VDQUxf
QVVHVVNUCisgICAqIEBzZWUgI1VDQUxfU0VQVEVNQkVSCisgICAqIEBzZWUgI1VDQUxfT0NUT0JF
UgorICAgKiBAc2VlICNVQ0FMX05PVkVNQkVSCisgICAqIEBzZWUgI1VDQUxfREVDRU1CRVIKKyAg
ICogQHNlZSAjVUNBTF9VTkRFQ0lNQkVSCisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisg
IFVDQUxfTU9OVEgsCisKKyAgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZQor
ICAgKiB3ZWVrIG51bWJlciB3aXRoaW4gdGhlIGN1cnJlbnQgeWVhci4gIFRoZSBmaXJzdCB3ZWVr
IG9mIHRoZSB5ZWFyLCBhcworICAgKiBkZWZpbmVkIGJ5IDxjb2RlPlVDQUxfRklSU1RfREFZX09G
X1dFRUs8L2NvZGU+IGFuZCA8Y29kZT5VQ0FMX01JTklNQUxfREFZU19JTl9GSVJTVF9XRUVLPC9j
b2RlPgorICAgKiBhdHRyaWJ1dGVzLCBoYXMgdmFsdWUgMS4gIFN1YmNsYXNzZXMgZGVmaW5lCisg
ICAqIHRoZSB2YWx1ZSBvZiA8Y29kZT5VQ0FMX1dFRUtfT0ZfWUVBUjwvY29kZT4gZm9yIGRheXMg
YmVmb3JlIHRoZSBmaXJzdCB3ZWVrIG9mCisgICAqIHRoZSB5ZWFyLgorICAgKiBAc2VlIHVjYWxf
Z2V0QXR0cmlidXRlCisgICAqIEBzZWUgdWNhbF9zZXRBdHRyaWJ1dGUKKyAgICogQHN0YWJsZSBJ
Q1UgMi42IAorICAgKi8KKyAgVUNBTF9XRUVLX09GX1lFQVIsCisKKyAvKioKKyAgICogRmllbGQg
bnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIHdlZWsgbnVtYmVyIHdpdGhpbiB0aGUgY3VycmVu
dCBtb250aC4gIFRoZSBmaXJzdCB3ZWVrIG9mIHRoZSBtb250aCwgYXMKKyAgICogZGVmaW5lZCBi
eSA8Y29kZT5VQ0FMX0ZJUlNUX0RBWV9PRl9XRUVLPC9jb2RlPiBhbmQgPGNvZGU+VUNBTF9NSU5J
TUFMX0RBWVNfSU5fRklSU1RfV0VFSzwvY29kZT4KKyAgICogYXR0cmlidXRlcywgaGFzIHZhbHVl
IDEuICBTdWJjbGFzc2VzIGRlZmluZQorICAgKiB0aGUgdmFsdWUgb2YgPGNvZGU+V0VFS19PRl9N
T05USDwvY29kZT4gZm9yIGRheXMgYmVmb3JlIHRoZSBmaXJzdCB3ZWVrIG9mCisgICAqIHRoZSBt
b250aC4KKyAgICogQHNlZSB1Y2FsX2dldEF0dHJpYnV0ZQorICAgKiBAc2VlIHVjYWxfc2V0QXR0
cmlidXRlCisgICAqIEBzZWUgI1VDQUxfRklSU1RfREFZX09GX1dFRUsKKyAgICogQHNlZSAjVUNB
TF9NSU5JTUFMX0RBWVNfSU5fRklSU1RfV0VFSworICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAq
LworICBVQ0FMX1dFRUtfT0ZfTU9OVEgsCisKKyAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGlj
YXRpbmcgdGhlCisgICAqIGRheSBvZiB0aGUgbW9udGguIFRoaXMgaXMgYSBzeW5vbnltIGZvciA8
Y29kZT5EQVlfT0ZfTU9OVEg8L2NvZGU+LgorICAgKiBUaGUgZmlyc3QgZGF5IG9mIHRoZSBtb250
aCBoYXMgdmFsdWUgMS4KKyAgICogQHNlZSAjVUNBTF9EQVlfT0ZfTU9OVEgKKyAgICogQHN0YWJs
ZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9EQVRFLAorCisgLyoqCisgICAqIEZpZWxkIG51bWJl
ciBpbmRpY2F0aW5nIHRoZSBkYXkKKyAgICogbnVtYmVyIHdpdGhpbiB0aGUgY3VycmVudCB5ZWFy
LiAgVGhlIGZpcnN0IGRheSBvZiB0aGUgeWVhciBoYXMgdmFsdWUgMS4KKyAgICogQHN0YWJsZSBJ
Q1UgMi42IAorICAgKi8KKyAgVUNBTF9EQVlfT0ZfWUVBUiwKKworIC8qKgorICAgKiBGaWVsZCBu
dW1iZXIgaW5kaWNhdGluZyB0aGUgZGF5CisgICAqIG9mIHRoZSB3ZWVrLiAgVGhpcyBmaWVsZCB0
YWtlcyB2YWx1ZXMgPGNvZGU+U1VOREFZPC9jb2RlPiwKKyAgICogPGNvZGU+TU9OREFZPC9jb2Rl
PiwgPGNvZGU+VFVFU0RBWTwvY29kZT4sIDxjb2RlPldFRE5FU0RBWTwvY29kZT4sCisgICAqIDxj
b2RlPlRIVVJTREFZPC9jb2RlPiwgPGNvZGU+RlJJREFZPC9jb2RlPiwgYW5kIDxjb2RlPlNBVFVS
REFZPC9jb2RlPi4KKyAgICogQHNlZSAjVUNBTF9TVU5EQVkKKyAgICogQHNlZSAjVUNBTF9NT05E
QVkKKyAgICogQHNlZSAjVUNBTF9UVUVTREFZCisgICAqIEBzZWUgI1VDQUxfV0VETkVTREFZCisg
ICAqIEBzZWUgI1VDQUxfVEhVUlNEQVkKKyAgICogQHNlZSAjVUNBTF9GUklEQVkKKyAgICogQHNl
ZSAjVUNBTF9TQVRVUkRBWQorICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAqLworICBVQ0FMX0RB
WV9PRl9XRUVLLAorCisgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZQorICAg
KiBvcmRpbmFsIG51bWJlciBvZiB0aGUgZGF5IG9mIHRoZSB3ZWVrIHdpdGhpbiB0aGUgY3VycmVu
dCBtb250aC4gVG9nZXRoZXIKKyAgICogd2l0aCB0aGUgPGNvZGU+REFZX09GX1dFRUs8L2NvZGU+
IGZpZWxkLCB0aGlzIHVuaXF1ZWx5IHNwZWNpZmllcyBhIGRheQorICAgKiB3aXRoaW4gYSBtb250
aC4gIFVubGlrZSA8Y29kZT5XRUVLX09GX01PTlRIPC9jb2RlPiBhbmQKKyAgICogPGNvZGU+V0VF
S19PRl9ZRUFSPC9jb2RlPiwgdGhpcyBmaWVsZCdzIHZhbHVlIGRvZXMgPGVtPm5vdDwvZW0+IGRl
cGVuZCBvbgorICAgKiA8Y29kZT5nZXRGaXJzdERheU9mV2VlaygpPC9jb2RlPiBvcgorICAgKiA8
Y29kZT5nZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrKCk8L2NvZGU+LiAgPGNvZGU+REFZX09GX01P
TlRIIDE8L2NvZGU+CisgICAqIHRocm91Z2ggPGNvZGU+NzwvY29kZT4gYWx3YXlzIGNvcnJlc3Bv
bmQgdG8gPGNvZGU+REFZX09GX1dFRUtfSU5fTU9OVEgKKyAgICogMTwvY29kZT47IDxjb2RlPjg8
L2NvZGU+IHRocm91Z2ggPGNvZGU+MTU8L2NvZGU+IGNvcnJlc3BvbmQgdG8KKyAgICogPGNvZGU+
REFZX09GX1dFRUtfSU5fTU9OVEggMjwvY29kZT4sIGFuZCBzbyBvbi4KKyAgICogPGNvZGU+REFZ
X09GX1dFRUtfSU5fTU9OVEggMDwvY29kZT4gaW5kaWNhdGVzIHRoZSB3ZWVrIGJlZm9yZQorICAg
KiA8Y29kZT5EQVlfT0ZfV0VFS19JTl9NT05USCAxPC9jb2RlPi4gIE5lZ2F0aXZlIHZhbHVlcyBj
b3VudCBiYWNrIGZyb20gdGhlCisgICAqIGVuZCBvZiB0aGUgbW9udGgsIHNvIHRoZSBsYXN0IFN1
bmRheSBvZiBhIG1vbnRoIGlzIHNwZWNpZmllZCBhcworICAgKiA8Y29kZT5EQVlfT0ZfV0VFSyA9
IFNVTkRBWSwgREFZX09GX1dFRUtfSU5fTU9OVEggPSAtMTwvY29kZT4uICBCZWNhdXNlCisgICAq
IG5lZ2F0aXZlIHZhbHVlcyBjb3VudCBiYWNrd2FyZCB0aGV5IHdpbGwgdXN1YWxseSBiZSBhbGln
bmVkIGRpZmZlcmVudGx5CisgICAqIHdpdGhpbiB0aGUgbW9udGggdGhhbiBwb3NpdGl2ZSB2YWx1
ZXMuICBGb3IgZXhhbXBsZSwgaWYgYSBtb250aCBoYXMgMzEKKyAgICogZGF5cywgPGNvZGU+REFZ
X09GX1dFRUtfSU5fTU9OVEggLTE8L2NvZGU+IHdpbGwgb3ZlcmxhcAorICAgKiA8Y29kZT5EQVlf
T0ZfV0VFS19JTl9NT05USCA1PC9jb2RlPiBhbmQgdGhlIGVuZCBvZiA8Y29kZT40PC9jb2RlPi4K
KyAgICogQHNlZSAjVUNBTF9EQVlfT0ZfV0VFSworICAgKiBAc2VlICNVQ0FMX1dFRUtfT0ZfTU9O
VEgKKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9EQVlfT0ZfV0VFS19JTl9N
T05USCwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZworICAgKiB3aGV0aGVy
IHRoZSA8Y29kZT5IT1VSPC9jb2RlPiBpcyBiZWZvcmUgb3IgYWZ0ZXIgbm9vbi4KKyAgICogRS5n
LiwgYXQgMTA6MDQ6MTUuMjUwIFBNIHRoZSA8Y29kZT5BTV9QTTwvY29kZT4gaXMgPGNvZGU+UE08
L2NvZGU+LgorICAgKiBAc2VlICNVQ0FMX0FNCisgICAqIEBzZWUgI1VDQUxfUE0KKyAgICogQHNl
ZSAjVUNBTF9IT1VSCisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfQU1fUE0s
CisKKyAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIGhvdXIgb2Yg
dGhlIG1vcm5pbmcgb3IgYWZ0ZXJub29uLiA8Y29kZT5IT1VSPC9jb2RlPiBpcyB1c2VkIGZvciB0
aGUgMTItaG91cgorICAgKiBjbG9jay4KKyAgICogRS5nLiwgYXQgMTA6MDQ6MTUuMjUwIFBNIHRo
ZSA8Y29kZT5IT1VSPC9jb2RlPiBpcyAxMC4KKyAgICogQHNlZSAjVUNBTF9BTV9QTQorICAgKiBA
c2VlICNVQ0FMX0hPVVJfT0ZfREFZCisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVD
QUxfSE9VUiwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUKKyAgICog
aG91ciBvZiB0aGUgZGF5LiA8Y29kZT5IT1VSX09GX0RBWTwvY29kZT4gaXMgdXNlZCBmb3IgdGhl
IDI0LWhvdXIgY2xvY2suCisgICAqIEUuZy4sIGF0IDEwOjA0OjE1LjI1MCBQTSB0aGUgPGNvZGU+
SE9VUl9PRl9EQVk8L2NvZGU+IGlzIDIyLgorICAgKiBAc2VlICNVQ0FMX0hPVVIKKyAgICogQHN0
YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9IT1VSX09GX0RBWSwKKworIC8qKgorICAgKiBG
aWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUKKyAgICogbWludXRlIHdpdGhpbiB0aGUgaG91ci4K
KyAgICogRS5nLiwgYXQgMTA6MDQ6MTUuMjUwIFBNIHRoZSA8Y29kZT5VQ0FMX01JTlVURTwvY29k
ZT4gaXMgNC4KKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9NSU5VVEUsCisK
KyAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIHNlY29uZCB3aXRo
aW4gdGhlIG1pbnV0ZS4KKyAgICogRS5nLiwgYXQgMTA6MDQ6MTUuMjUwIFBNIHRoZSA8Y29kZT5V
Q0FMX1NFQ09ORDwvY29kZT4gaXMgMTUuCisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisg
IFVDQUxfU0VDT05ELAorCisgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZQor
ICAgKiBtaWxsaXNlY29uZCB3aXRoaW4gdGhlIHNlY29uZC4KKyAgICogRS5nLiwgYXQgMTA6MDQ6
MTUuMjUwIFBNIHRoZSA8Y29kZT5VQ0FMX01JTExJU0VDT05EPC9jb2RlPiBpcyAyNTAuCisgICAq
IEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfTUlMTElTRUNPTkQsCisKKyAvKioKKyAg
ICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIHJhdyBvZmZzZXQgZnJvbSBHTVQg
aW4gbWlsbGlzZWNvbmRzLgorICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAqLworICBVQ0FMX1pP
TkVfT0ZGU0VULAorCisgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZQorICAg
KiBkYXlsaWdodCBzYXZpbmdzIG9mZnNldCBpbiBtaWxsaXNlY29uZHMuCisgICAqIEBzdGFibGUg
SUNVIDIuNiAKKyAgICovCisgIFVDQUxfRFNUX09GRlNFVCwKKyAgCisgLyoqCisgICAqIEZpZWxk
IG51bWJlciAKKyAgICogaW5kaWNhdGluZyB0aGUgZXh0ZW5kZWQgeWVhciBjb3JyZXNwb25kaW5n
IHRvIHRoZQorICAgKiA8Y29kZT5VQ0FMX1dFRUtfT0ZfWUVBUjwvY29kZT4gZmllbGQuICBUaGlz
IG1heSBiZSBvbmUgZ3JlYXRlciBvciBsZXNzCisgICAqIHRoYW4gdGhlIHZhbHVlIG9mIDxjb2Rl
PlVDQUxfRVhURU5ERURfWUVBUjwvY29kZT4uCisgICAqIEBzdGFibGUgSUNVIDIuNgorICAgKi8K
KyAgVUNBTF9ZRUFSX1dPWSwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgCisgICAqIGluZGlj
YXRpbmcgdGhlIGxvY2FsaXplZCBkYXkgb2Ygd2Vlay4gIFRoaXMgd2lsbCBiZSBhIHZhbHVlIGZy
b20gMQorICAgKiB0byA3IGluY2x1c2l2ZSwgd2l0aCAxIGJlaW5nIHRoZSBsb2NhbGl6ZWQgZmly
c3QgZGF5IG9mIHRoZSB3ZWVrLgorICAgKiBAc3RhYmxlIElDVSAyLjYKKyAgICovCisgIFVDQUxf
RE9XX0xPQ0FMLAorCisgIC8qKgorICAgKiBZZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLCBl
bmNvbXBhc3NpbmcgYWxsIHN1cHJhLXllYXIgZmllbGRzLiBGb3IgZXhhbXBsZSwgCisgICAqIGlu
IEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzLCBwb3NpdGl2ZSBFeHRlbmRlZCBZZWFyIHZhbHVl
cyBpbmRpY2F0ZSB5ZWFycyBBRCwKKyAgICogIDEgQkMgPSAwIGV4dGVuZGVkLCAyIEJDID0gLTEg
ZXh0ZW5kZWQsIGFuZCBzbyBvbi4gCisgICAqIEBzdGFibGUgSUNVIDIuOCAKKyAgICovCisgIFVD
QUxfRVhURU5ERURfWUVBUiwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgCisgICAqIGluZGlj
YXRpbmcgdGhlIG1vZGlmaWVkIEp1bGlhbiBkYXkgbnVtYmVyLiAgVGhpcyBpcyBkaWZmZXJlbnQg
ZnJvbQorICAgKiB0aGUgY29udmVudGlvbmFsIEp1bGlhbiBkYXkgbnVtYmVyIGluIHR3byByZWdh
cmRzLiAgRmlyc3QsIGl0CisgICAqIGRlbWFyY2F0ZXMgZGF5cyBhdCBsb2NhbCB6b25lIG1pZG5p
Z2h0LCByYXRoZXIgdGhhbiBub29uIEdNVC4KKyAgICogU2Vjb25kLCBpdCBpcyBhIGxvY2FsIG51
bWJlcjsgdGhhdCBpcywgaXQgZGVwZW5kcyBvbiB0aGUgbG9jYWwgdGltZQorICAgKiB6b25lLiAg
SXQgY2FuIGJlIHRob3VnaHQgb2YgYXMgYSBzaW5nbGUgbnVtYmVyIHRoYXQgZW5jb21wYXNzZXMg
YWxsCisgICAqIHRoZSBkYXRlLXJlbGF0ZWQgZmllbGRzLgorICAgKiBAc3RhYmxlIElDVSAyLjgK
KyAgICovCisgIFVDQUxfSlVMSUFOX0RBWSwgCisKKyAgLyoqCisgICAqIFJhbmdlcyBmcm9tIDAg
dG8gMjM6NTk6NTkuOTk5IChyZWdhcmRsZXNzIG9mIERTVCkuICBUaGlzIGZpZWxkIGJlaGF2ZXMg
PGVtPmV4YWN0bHk8L2VtPiAKKyAgICogbGlrZSBhIGNvbXBvc2l0ZSBvZiBhbGwgdGltZS1yZWxh
dGVkIGZpZWxkcywgbm90IGluY2x1ZGluZyB0aGUgem9uZSBmaWVsZHMuICBBcyBzdWNoLCAKKyAg
ICogaXQgYWxzbyByZWZsZWN0cyBkaXNjb250aW51aXRpZXMgb2YgdGhvc2UgZmllbGRzIG9uIERT
VCB0cmFuc2l0aW9uIGRheXMuICBPbiBhIGRheQorICAgKiBvZiBEU1Qgb25zZXQsIGl0IHdpbGwg
anVtcCBmb3J3YXJkLiAgT24gYSBkYXkgb2YgRFNUIGNlc3NhdGlvbiwgaXQgd2lsbCBqdW1wIAor
ICAgKiBiYWNrd2FyZC4gIFRoaXMgcmVmbGVjdHMgdGhlIGZhY3QgdGhhdCBpdCBtdXN0IGJlIGNv
bWJpbmVkIHdpdGggdGhlIERTVF9PRkZTRVQgZmllbGQKKyAgICogdG8gb2J0YWluIGEgdW5pcXVl
IGxvY2FsIHRpbWUgdmFsdWUuCisgICAqIEBzdGFibGUgSUNVIDIuOAorICAgKi8KKyAgVUNBTF9N
SUxMSVNFQ09ORFNfSU5fREFZLAorCisgIC8qKgorICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgY3Vy
cmVudCBtb250aCBpcyBhIGxlYXAgbW9udGggKDAgb3IgMSkuIFNlZSB0aGUgQ2hpbmVzZSBjYWxl
bmRhciBmb3IKKyAgICogYW4gZXhhbXBsZSBvZiB0aGlzLgorICAgKi8KKyAgVUNBTF9JU19MRUFQ
X01PTlRILAorICAKKyAgLyoqCisgICAqIEZpZWxkIGNvdW50CisgICAqIEBzdGFibGUgSUNVIDIu
NgorICAgKi8KKyAgVUNBTF9GSUVMRF9DT1VOVCwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIg
aW5kaWNhdGluZyB0aGUKKyAgICogZGF5IG9mIHRoZSBtb250aC4gVGhpcyBpcyBhIHN5bm9ueW0g
Zm9yIDxjb2RlPlVDQUxfREFURTwvY29kZT4uCisgICAqIFRoZSBmaXJzdCBkYXkgb2YgdGhlIG1v
bnRoIGhhcyB2YWx1ZSAxLgorICAgKiBAc2VlICNVQ0FMX0RBVEUKKyAgICogU3lub255bSBmb3Ig
VUNBTF9EQVRFCisgICAqIEBzdGFibGUgSUNVIDIuOAorICAgKiovCisgIFVDQUxfREFZX09GX01P
TlRIPVVDQUxfREFURQorfTsKKworLyoqIEBzdGFibGUgSUNVIDIuMCAqLwordHlwZWRlZiBlbnVt
IFVDYWxlbmRhckRhdGVGaWVsZHMgVUNhbGVuZGFyRGF0ZUZpZWxkczsKKyAgICAvKioKKyAgICAg
KiBVc2VmdWwgY29uc3RhbnQgZm9yIGRheXMgb2Ygd2Vlay4gTm90ZTogQ2FsZW5kYXIgZGF5LW9m
LXdlZWsgaXMgMS1iYXNlZC4gQ2xpZW50cworICAgICAqIHdobyBjcmVhdGUgbG9jYWxlIHJlc291
cmNlcyBmb3IgdGhlIGZpZWxkIG9mIGZpcnN0LWRheS1vZi13ZWVrIHNob3VsZCBiZSBhd2FyZSBv
ZgorICAgICAqIHRoaXMuIEZvciBpbnN0YW5jZSwgaW4gVVMgbG9jYWxlLCBmaXJzdC1kYXktb2Yt
d2VlayBpcyBzZXQgdG8gMSwgaS5lLiwgVUNBTF9TVU5EQVkuCisgICAgICovCisvKiogUG9zc2li
bGUgZGF5cyBvZiB0aGUgd2VlayBpbiBhIFVDYWxlbmRhciAKKyAqIEBzdGFibGUgSUNVIDIuMAor
ICovCitlbnVtIFVDYWxlbmRhckRheXNPZldlZWsgeworICAvKiogU3VuZGF5ICovCisgIFVDQUxf
U1VOREFZID0gMSwKKyAgLyoqIE1vbmRheSAqLworICBVQ0FMX01PTkRBWSwKKyAgLyoqIFR1ZXNk
YXkgKi8KKyAgVUNBTF9UVUVTREFZLAorICAvKiogV2VkbmVzZGF5ICovCisgIFVDQUxfV0VETkVT
REFZLAorICAvKiogVGh1cnNkYXkgKi8KKyAgVUNBTF9USFVSU0RBWSwKKyAgLyoqIEZyaWRheSAq
LworICBVQ0FMX0ZSSURBWSwKKyAgLyoqIFNhdHVyZGF5ICovCisgIFVDQUxfU0FUVVJEQVkKK307
CisKKy8qKiBAc3RhYmxlIElDVSAyLjAgKi8KK3R5cGVkZWYgZW51bSBVQ2FsZW5kYXJEYXlzT2ZX
ZWVrIFVDYWxlbmRhckRheXNPZldlZWs7CisKKy8qKiBQb3NzaWJsZSBtb250aHMgaW4gYSBVQ2Fs
ZW5kYXIuIE5vdGU6IENhbGVuZGFyIG1vbnRoIGlzIDAtYmFzZWQuCisgKiBAc3RhYmxlIElDVSAy
LjAKKyAqLworZW51bSBVQ2FsZW5kYXJNb250aHMgeworICAvKiogSmFudWFyeSAqLworICBVQ0FM
X0pBTlVBUlksCisgIC8qKiBGZWJydWFyeSAqLworICBVQ0FMX0ZFQlJVQVJZLAorICAvKiogTWFy
Y2ggKi8KKyAgVUNBTF9NQVJDSCwKKyAgLyoqIEFwcmlsICovCisgIFVDQUxfQVBSSUwsCisgIC8q
KiBNYXkgKi8KKyAgVUNBTF9NQVksCisgIC8qKiBKdW5lICovCisgIFVDQUxfSlVORSwKKyAgLyoq
IEp1bHkgKi8KKyAgVUNBTF9KVUxZLAorICAvKiogQXVndXN0ICovCisgIFVDQUxfQVVHVVNULAor
ICAvKiogU2VwdGVtYmVyICovCisgIFVDQUxfU0VQVEVNQkVSLAorICAvKiogT2N0b2JlciAqLwor
ICBVQ0FMX09DVE9CRVIsCisgIC8qKiBOb3ZlbWJlciAqLworICBVQ0FMX05PVkVNQkVSLAorICAv
KiogRGVjZW1iZXIgKi8KKyAgVUNBTF9ERUNFTUJFUiwKKyAgLyoqIFZhbHVlIG9mIHRoZSA8Y29k
ZT5VQ0FMX01PTlRIPC9jb2RlPiBmaWVsZCBpbmRpY2F0aW5nIHRoZQorICAgICogdGhpcnRlZW50
aCBtb250aCBvZiB0aGUgeWVhci4gQWx0aG91Z2ggdGhlIEdyZWdvcmlhbiBjYWxlbmRhcgorICAg
ICogZG9lcyBub3QgdXNlIHRoaXMgdmFsdWUsIGx1bmFyIGNhbGVuZGFycyBkby4KKyAgICAqLwor
ICBVQ0FMX1VOREVDSU1CRVIKK307CisKKy8qKiBAc3RhYmxlIElDVSAyLjAgKi8KK3R5cGVkZWYg
ZW51bSBVQ2FsZW5kYXJNb250aHMgVUNhbGVuZGFyTW9udGhzOworCisvKiogUG9zc2libGUgQU0v
UE0gdmFsdWVzIGluIGEgVUNhbGVuZGFyIAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK2VudW0g
VUNhbGVuZGFyQU1QTXMgeworICAgIC8qKiBBTSAqLworICBVQ0FMX0FNLAorICAvKiogUE0gKi8K
KyAgVUNBTF9QTQorfTsKKworLyoqIEBzdGFibGUgSUNVIDIuMCAqLwordHlwZWRlZiBlbnVtIFVD
YWxlbmRhckFNUE1zIFVDYWxlbmRhckFNUE1zOworCisvKioKKyAqIENyZWF0ZSBhbiBlbnVtZXJh
dGlvbiBvdmVyIGFsbCB0aW1lIHpvbmVzLgorICoKKyAqIEBwYXJhbSBlYyBpbnB1dC9vdXRwdXQg
ZXJyb3IgY29kZQorICoKKyAqIEByZXR1cm4gYW4gZW51bWVyYXRpb24gb2JqZWN0IHRoYXQgdGhl
IGNhbGxlciBtdXN0IGRpc3Bvc2Ugb2YgdXNpbmcKKyAqIHVlbnVtX2Nsb3NlKCksIG9yIE5VTEwg
dXBvbiBmYWlsdXJlLiBJbiBjYXNlIG9mIGZhaWx1cmUgKmVjIHdpbGwKKyAqIGluZGljYXRlIHRo
ZSBlcnJvci4KKyAqCisgKiBAc3RhYmxlIElDVSAyLjYKKyAqLworVV9TVEFCTEUgVUVudW1lcmF0
aW9uKiBVX0VYUE9SVDIKK3VjYWxfb3BlblRpbWVab25lcyhVRXJyb3JDb2RlKiBlYyk7CisKKy8q
KgorICogQ3JlYXRlIGFuIGVudW1lcmF0aW9uIG92ZXIgYWxsIHRpbWUgem9uZXMgYXNzb2NpYXRl
ZCB3aXRoIHRoZSBnaXZlbgorICogY291bnRyeS4gU29tZSB6b25lcyBhcmUgYWZmaWxpYXRlZCB3
aXRoIG5vIGNvdW50cnkgKGUuZy4sICJVVEMiKTsKKyAqIHRoZXNlIG1heSBhbHNvIGJlIHJldHJp
ZXZlZCwgYXMgYSBncm91cC4KKyAqCisgKiBAcGFyYW0gY291bnRyeSB0aGUgSVNPIDMxNjYgdHdv
LWxldHRlciBjb3VudHJ5IGNvZGUsIG9yIE5VTEwgdG8KKyAqIHJldHJpZXZlIHpvbmVzIG5vdCBh
ZmZpbGlhdGVkIHdpdGggYW55IGNvdW50cnkKKyAqCisgKiBAcGFyYW0gZWMgaW5wdXQvb3V0cHV0
IGVycm9yIGNvZGUKKyAqCisgKiBAcmV0dXJuIGFuIGVudW1lcmF0aW9uIG9iamVjdCB0aGF0IHRo
ZSBjYWxsZXIgbXVzdCBkaXNwb3NlIG9mIHVzaW5nCisgKiB1ZW51bV9jbG9zZSgpLCBvciBOVUxM
IHVwb24gZmFpbHVyZS4gSW4gY2FzZSBvZiBmYWlsdXJlICplYyB3aWxsCisgKiBpbmRpY2F0ZSB0
aGUgZXJyb3IuCisgKgorICogQHN0YWJsZSBJQ1UgMi42CisgKi8KK1VfU1RBQkxFIFVFbnVtZXJh
dGlvbiogVV9FWFBPUlQyCit1Y2FsX29wZW5Db3VudHJ5VGltZVpvbmVzKGNvbnN0IGNoYXIqIGNv
dW50cnksIFVFcnJvckNvZGUqIGVjKTsKKworLyoqCisgKiBSZXR1cm4gdGhlIGRlZmF1bHQgdGlt
ZSB6b25lLiBUaGUgZGVmYXVsdCBpcyBkZXRlcm1pbmVkIGluaXRpYWxseQorICogYnkgcXVlcnlp
bmcgdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbS4gSXQgbWF5IGJlIGNoYW5nZWQgd2l0aAorICog
dWNhbF9zZXREZWZhdWx0VGltZVpvbmUoKSBvciB3aXRoIHRoZSBDKysgVGltZVpvbmUgQVBJLgor
ICoKKyAqIEBwYXJhbSByZXN1bHQgQSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgcmVzdWx0LCBvciBO
VUxMCisgKgorICogQHBhcmFtIHJlc3VsdENhcGFjaXR5IFRoZSBjYXBhY2l0eSBvZiB0aGUgcmVz
dWx0IGJ1ZmZlcgorICoKKyAqIEBwYXJhbSBlYyBpbnB1dC9vdXRwdXQgZXJyb3IgY29kZQorICoK
KyAqIEByZXR1cm4gVGhlIHJlc3VsdCBzdHJpbmcgbGVuZ3RoLCBub3QgaW5jbHVkaW5nIHRoZSB0
ZXJtaW5hdGluZworICogbnVsbAorICoKKyAqIEBzdGFibGUgSUNVIDIuNgorICovCitVX1NUQUJM
RSBpbnQzMl90IFVfRVhQT1JUMgordWNhbF9nZXREZWZhdWx0VGltZVpvbmUoVUNoYXIqIHJlc3Vs
dCwgaW50MzJfdCByZXN1bHRDYXBhY2l0eSwgVUVycm9yQ29kZSogZWMpOworCisvKioKKyAqIFNl
dCB0aGUgZGVmYXVsdCB0aW1lIHpvbmUuCisgKgorICogQHBhcmFtIHpvbmVJRCBudWxsLXRlcm1p
bmF0ZWQgdGltZSB6b25lIElECisgKgorICogQHBhcmFtIGVjIGlucHV0L291dHB1dCBlcnJvciBj
b2RlCisgKgorICogQHN0YWJsZSBJQ1UgMi42CisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQy
Cit1Y2FsX3NldERlZmF1bHRUaW1lWm9uZShjb25zdCBVQ2hhciogem9uZUlELCBVRXJyb3JDb2Rl
KiBlYyk7CisKKy8qKgorICogUmV0dXJuIHRoZSBhbW91bnQgb2YgdGltZSBpbiBtaWxsaXNlY29u
ZHMgdGhhdCB0aGUgY2xvY2sgaXMKKyAqIGFkdmFuY2VkIGR1cmluZyBkYXlsaWdodCBzYXZpbmdz
IHRpbWUgZm9yIHRoZSBnaXZlbiB0aW1lIHpvbmUsIG9yCisgKiB6ZXJvIGlmIHRoZSB0aW1lIHpv
bmUgZG9lcyBub3Qgb2JzZXJ2ZSBkYXlsaWdodCBzYXZpbmdzIHRpbWUuCisgKgorICogQHBhcmFt
IHpvbmVJRCBudWxsLXRlcm1pbmF0ZWQgdGltZSB6b25lIElECisgKgorICogQHBhcmFtIGVjIGlu
cHV0L291dHB1dCBlcnJvciBjb2RlCisgKgorICogQHJldHVybiB0aGUgbnVtYmVyIG9mIG1pbGxp
c2Vjb25kcyB0aGUgdGltZSBpcyBhZHZhbmNlZCB3aXRoCisgKiByZXNwZWN0IHRvIHN0YW5kYXJk
IHRpbWUgd2hlbiB0aGUgZGF5bGlnaHQgc2F2aW5ncyBydWxlcyBhcmUgaW4KKyAqIGVmZmVjdC4g
VGhpcyBpcyBhbHdheXMgYSBub24tbmVnYXRpdmUgbnVtYmVyLCBtb3N0IGNvbW1vbmx5IGVpdGhl
cgorICogMyw2MDAsMDAwIChvbmUgaG91cikgb3IgemVyby4KKyAqCisgKiBAc3RhYmxlIElDVSAy
LjYKKyAqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKK3VjYWxfZ2V0RFNUU2F2aW5ncyhj
b25zdCBVQ2hhciogem9uZUlELCBVRXJyb3JDb2RlKiBlYyk7CisKKy8qKgorICogR2V0IHRoZSBj
dXJyZW50IGRhdGUgYW5kIHRpbWUuCisgKiBUaGUgdmFsdWUgcmV0dXJuZWQgaXMgcmVwcmVzZW50
ZWQgYXMgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGVwb2NoLgorICogQHJldHVybiBUaGUgY3VycmVu
dCBkYXRlIGFuZCB0aW1lLgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIFVEYXRl
IFVfRVhQT1JUMiAKK3VjYWxfZ2V0Tm93KHZvaWQpOworCisvKioKKyAqIE9wZW4gYSBVQ2FsZW5k
YXIuCisgKiBBIFVDYWxlbmRhciBtYXkgYmUgdXNlZCB0byBjb252ZXJ0IGEgbWlsbGlzZWNvbmQg
dmFsdWUgdG8gYSB5ZWFyLAorICogbW9udGgsIGFuZCBkYXkuCisgKiA8cD4KKyAqIE5vdGU6IFdo
ZW4gdW5rbm93biBUaW1lWm9uZSBJRCBpcyBzcGVjaWZpZWQsIHRoZSBVQ2FsZW5kYXIgcmV0dXJu
ZWQKKyAqIGJ5IHRoZSBmdW5jdGlvbiBpcyBpbml0aWFsaXplZCB3aXRoIEdNVCAoIkV0Yy9HTVQi
KSB3aXRob3V0IGFueQorICogZXJyb3JzL3dhcm5pbmdzLiAgSWYgeW91IHdhbnQgdG8gY2hlY2sg
aWYgYSBUaW1lWm9uZSBJRCBpcyB2YWxpZCwKKyAqIHVzZSB1Y2FsX2dldENhbm9uaWNhbFRpbWVa
b25lSUQgcHJpb3IgdG8gdGhpcyBmdW5jdGlvbi4KKyAqIAorICogQHBhcmFtIHpvbmVJRCBUaGUg
ZGVzaXJlZCBUaW1lWm9uZSBJRC4gIElmIDAsIHVzZSB0aGUgZGVmYXVsdCB0aW1lIHpvbmUuCisg
KiBAcGFyYW0gbGVuIFRoZSBsZW5ndGggb2Ygem9uZUlELCBvciAtMSBpZiBudWxsLXRlcm1pbmF0
ZWQuCisgKiBAcGFyYW0gbG9jYWxlIFRoZSBkZXNpcmVkIGxvY2FsZQorICogQHBhcmFtIHR5cGUg
VGhlIHR5cGUgb2YgVUNhbGVuZGFyIHRvIG9wZW4uIFRoaXMgY2FuIGJlIFVDQUxfR1JFR09SSUFO
IHRvIG9wZW4gdGhlIEdyZWdvcmlhbgorICogY2FsZW5kYXIgZm9yIHRoZSBsb2NhbGUsIG9yIFVD
QUxfREVGQVVMVCB0byBvcGVuIHRoZSBkZWZhdWx0IGNhbGVuZGFyIGZvciB0aGUgbG9jYWxlICh0
aGUKKyAqIGRlZmF1bHQgY2FsZW5kYXIgbWF5IGFsc28gYmUgR3JlZ29yaWFuKS4gVG8gb3BlbiBh
IHNwZWNpZmljIG5vbi1HcmVnb3JpYW4gY2FsZW5kYXIgZm9yIHRoZQorICogbG9jYWxlLCB1c2Ug
dWxvY19zZXRLZXl3b3JkVmFsdWUgdG8gc2V0IHRoZSB2YWx1ZSBvZiB0aGUgY2FsZW5kYXIga2V5
d29yZCBmb3IgdGhlIGxvY2FsZQorICogYW5kIHRoZW4gcGFzcyB0aGUgbG9jYWxlIHRvIHVjYWxf
b3BlbiB3aXRoIFVDQUxfREVGQVVMVCBhcyB0aGUgdHlwZS4KKyAqIEBwYXJhbSBzdGF0dXMgQSBw
b2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisgKiBAcmV0dXJu
IEEgcG9pbnRlciB0byBhIFVDYWxlbmRhciwgb3IgMCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKyAq
IEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBVQ2FsZW5kYXIqIFVfRVhQT1JUMiAKK3Vj
YWxfb3Blbihjb25zdCBVQ2hhciogICB6b25lSUQsCisgICAgICAgICAgaW50MzJfdCAgICAgICAg
bGVuLAorICAgICAgICAgIGNvbnN0IGNoYXIqICAgIGxvY2FsZSwKKyAgICAgICAgICBVQ2FsZW5k
YXJUeXBlICB0eXBlLAorICAgICAgICAgIFVFcnJvckNvZGUqICAgIHN0YXR1cyk7CisKKy8qKgor
ICogQ2xvc2UgYSBVQ2FsZW5kYXIuCisgKiBPbmNlIGNsb3NlZCwgYSBVQ2FsZW5kYXIgbWF5IG5v
IGxvbmdlciBiZSB1c2VkLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIGNsb3NlLgor
ICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWNhbF9j
bG9zZShVQ2FsZW5kYXIgKmNhbCk7CisKKyNpZiBVX1NIT1dfQ1BMVVNQTFVTX0FQSQorCitVX05B
TUVTUEFDRV9CRUdJTgorCisvKioKKyAqIFxjbGFzcyBMb2NhbFVDYWxlbmRhclBvaW50ZXIKKyAq
ICJTbWFydCBwb2ludGVyIiBjbGFzcywgY2xvc2VzIGEgVUNhbGVuZGFyIHZpYSB1Y2FsX2Nsb3Nl
KCkuCisgKiBGb3IgbW9zdCBtZXRob2RzIHNlZSB0aGUgTG9jYWxQb2ludGVyQmFzZSBiYXNlIGNs
YXNzLgorICoKKyAqIEBzZWUgTG9jYWxQb2ludGVyQmFzZQorICogQHNlZSBMb2NhbFBvaW50ZXIK
KyAqIEBzdGFibGUgSUNVIDQuNAorICovCitVX0RFRklORV9MT0NBTF9PUEVOX1BPSU5URVIoTG9j
YWxVQ2FsZW5kYXJQb2ludGVyLCBVQ2FsZW5kYXIsIHVjYWxfY2xvc2UpOworCitVX05BTUVTUEFD
RV9FTkQKKworI2VuZGlmCisKKy8qKgorICogT3BlbiBhIGNvcHkgb2YgYSBVQ2FsZW5kYXIuCisg
KiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGEgZGVlcCBjb3B5LgorICogQHBhcmFtIGNhbCBUaGUg
Y2FsZW5kYXIgdG8gY29weQorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9y
Q29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMuCisgKiBAcmV0dXJuIEEgcG9pbnRlciB0byBhIFVD
YWxlbmRhciBpZGVudGljYWwgdG8gY2FsLgorICogQHN0YWJsZSBJQ1UgNC4wCisgKi8KK1VfU1RB
QkxFIFVDYWxlbmRhciogVV9FWFBPUlQyIAordWNhbF9jbG9uZShjb25zdCBVQ2FsZW5kYXIqIGNh
bCwKKyAgICAgICAgICAgVUVycm9yQ29kZSogICAgICBzdGF0dXMpOworCisvKioKKyAqIFNldCB0
aGUgVGltZVpvbmUgdXNlZCBieSBhIFVDYWxlbmRhci4KKyAqIEEgVUNhbGVuZGFyIHVzZXMgYSB0
aW1lem9uZSBmb3IgY29udmVydGluZyBmcm9tIEdyZWVud2ljaCB0aW1lIHRvIGxvY2FsIHRpbWUu
CisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gc2V0LgorICogQHBhcmFtIHpvbmVJRCBU
aGUgZGVzaXJlZCBUaW1lWm9uZSBJRC4gIElmIDAsIHVzZSB0aGUgZGVmYXVsdCB0aW1lIHpvbmUu
CisgKiBAcGFyYW0gbGVuIFRoZSBsZW5ndGggb2Ygem9uZUlELCBvciAtMSBpZiBudWxsLXRlcm1p
bmF0ZWQuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJl
Y2VpdmUgYW55IGVycm9ycy4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lk
IFVfRVhQT1JUMiAKK3VjYWxfc2V0VGltZVpvbmUoVUNhbGVuZGFyKiAgICBjYWwsCisgICAgICAg
ICAgICAgICAgIGNvbnN0IFVDaGFyKiAgem9uZUlELAorICAgICAgICAgICAgICAgICBpbnQzMl90
ICAgICAgIGxlbiwKKyAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSogICBzdGF0dXMpOworCisv
KioKKyAqIFBvc3NpYmxlIGZvcm1hdHMgZm9yIGEgVUNhbGVuZGFyJ3MgZGlzcGxheSBuYW1lIAor
ICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK2VudW0gVUNhbGVuZGFyRGlzcGxheU5hbWVUeXBlIHsK
KyAgLyoqIFN0YW5kYXJkIGRpc3BsYXkgbmFtZSAqLworICBVQ0FMX1NUQU5EQVJELAorICAvKiog
U2hvcnQgc3RhbmRhcmQgZGlzcGxheSBuYW1lICovCisgIFVDQUxfU0hPUlRfU1RBTkRBUkQsCisg
IC8qKiBEYXlsaWdodCBzYXZpbmdzIGRpc3BsYXkgbmFtZSAqLworICBVQ0FMX0RTVCwKKyAgLyoq
IFNob3J0IGRheWxpZ2h0IHNhdmluZ3MgZGlzcGxheSBuYW1lICovCisgIFVDQUxfU0hPUlRfRFNU
Cit9OworCisvKiogQHN0YWJsZSBJQ1UgMi4wICovCit0eXBlZGVmIGVudW0gVUNhbGVuZGFyRGlz
cGxheU5hbWVUeXBlIFVDYWxlbmRhckRpc3BsYXlOYW1lVHlwZTsKKworLyoqCisgKiBHZXQgdGhl
IGRpc3BsYXkgbmFtZSBmb3IgYSBVQ2FsZW5kYXIncyBUaW1lWm9uZS4KKyAqIEEgZGlzcGxheSBu
YW1lIGlzIHN1aXRhYmxlIGZvciBwcmVzZW50YXRpb24gdG8gYSB1c2VyLgorICogQHBhcmFtIGNh
bCAgICAgICAgICBUaGUgVUNhbGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIHR5cGUgICAgICAg
ICBUaGUgZGVzaXJlZCBkaXNwbGF5IG5hbWUgZm9ybWF0OyBvbmUgb2YgVUNBTF9TVEFOREFSRCwg
VUNBTF9TSE9SVF9TVEFOREFSRCwKKyAqICAgICAgICAgICAgICAgICAgICAgVUNBTF9EU1QsIFVD
QUxfU0hPUlRfRFNUCisgKiBAcGFyYW0gbG9jYWxlICAgICAgIFRoZSBkZXNpcmVkIGxvY2FsZSBm
b3IgdGhlIGRpc3BsYXkgbmFtZS4KKyAqIEBwYXJhbSByZXN1bHQgICAgICAgQSBwb2ludGVyIHRv
IGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIGZvcm1hdHRlZCBudW1iZXIuCisgKiBAcGFyYW0gcmVz
dWx0TGVuZ3RoIFRoZSBtYXhpbXVtIHNpemUgb2YgcmVzdWx0LgorICogQHBhcmFtIHN0YXR1cyAg
ICAgICBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyAq
IEByZXR1cm4gICAgICAgICAgICAgVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3Jl
YXRlciB0aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorICogQHN0
YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordWNhbF9nZXRU
aW1lWm9uZURpc3BsYXlOYW1lKGNvbnN0IFVDYWxlbmRhciogICAgICAgICAgY2FsLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFVDYWxlbmRhckRpc3BsYXlOYW1lVHlwZSAgdHlwZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgICAgICAgICAgICAgIGxvY2Fs
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhciogICAgICAgICAgICAgICAgICAg
IHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICAg
ICAgICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JD
b2RlKiAgICAgICAgICAgICAgIHN0YXR1cyk7CisKKy8qKgorICogRGV0ZXJtaW5lIGlmIGEgVUNh
bGVuZGFyIGlzIGN1cnJlbnRseSBpbiBkYXlsaWdodCBzYXZpbmdzIHRpbWUuCisgKiBEYXlsaWdo
dCBzYXZpbmdzIHRpbWUgaXMgbm90IHVzZWQgaW4gYWxsIHBhcnRzIG9mIHRoZSB3b3JsZC4KKyAq
IEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBxdWVyeS4KKyAqIEBwYXJhbSBzdGF0dXMgQSBw
b2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisgKiBAcmV0dXJu
IFRSVUUgaWYgY2FsIGlzIGN1cnJlbnRseSBpbiBkYXlsaWdodCBzYXZpbmdzIHRpbWUsIEZBTFNF
IG90aGVyd2lzZQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIFVCb29sIFVfRVhQ
T1JUMiAKK3VjYWxfaW5EYXlsaWdodFRpbWUoY29uc3QgVUNhbGVuZGFyKiAgY2FsLAorICAgICAg
ICAgICAgICAgICAgICBVRXJyb3JDb2RlKiAgICAgICBzdGF0dXMgKTsKKworLyoqCisgKiBTZXRz
IHRoZSBHcmVnb3JpYW5DYWxlbmRhciBjaGFuZ2UgZGF0ZS4gVGhpcyBpcyB0aGUgcG9pbnQgd2hl
biB0aGUgc3dpdGNoIGZyb20KKyAqIEp1bGlhbiBkYXRlcyB0byBHcmVnb3JpYW4gZGF0ZXMgb2Nj
dXJyZWQuIERlZmF1bHQgaXMgMDA6MDA6MDAgbG9jYWwgdGltZSwgT2N0b2JlcgorICogMTUsIDE1
ODIuIFByZXZpb3VzIHRvIHRoaXMgdGltZSBhbmQgZGF0ZSB3aWxsIGJlIEp1bGlhbiBkYXRlcy4K
KyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIG9ubHkgZm9yIEdyZWdvcmlhbiBjYWxlbmRhcnMu
IElmIHRoZSBVQ2FsZW5kYXIgaXMgbm90CisgKiBhbiBpbnN0YW5jZSBvZiBhIEdyZWdvcmlhbiBj
YWxlbmRhciwgdGhlbiBhIFVfVU5TVVBQT1JURURfRVJST1IKKyAqIGVycm9yIGNvZGUgaXMgc2V0
LgorICoKKyAqIEBwYXJhbSBjYWwgICAgICAgIFRoZSBjYWxlbmRhciBvYmplY3QuCisgKiBAcGFy
YW0gZGF0ZSAgICAgICBUaGUgZ2l2ZW4gR3JlZ29yaWFuIGN1dG92ZXIgZGF0ZS4KKyAqIEBwYXJh
bSBwRXJyb3JDb2RlIFBvaW50ZXIgdG8gYSBzdGFuZGFyZCBJQ1UgZXJyb3IgY29kZS4gSXRzIGlu
cHV0IHZhbHVlIG11c3QKKyAqICAgICAgICAgICAgICAgICAgIHBhc3MgdGhlIFVfU1VDQ0VTUygp
IHRlc3QsIG9yIGVsc2UgdGhlIGZ1bmN0aW9uIHJldHVybnMKKyAqICAgICAgICAgICAgICAgICAg
IGltbWVkaWF0ZWx5LiBDaGVjayBmb3IgVV9GQUlMVVJFKCkgb24gb3V0cHV0IG9yIHVzZSB3aXRo
CisgKiAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjaGFpbmluZy4gKFNlZSBVc2VyIEd1aWRl
IGZvciBkZXRhaWxzLikKKyAqCisgKiBAc2VlIEdyZWdvcmlhbkNhbGVuZGFyOjpzZXRHcmVnb3Jp
YW5DaGFuZ2UKKyAqIEBzZWUgdWNhbF9nZXRHcmVnb3JpYW5DaGFuZ2UKKyAqIEBzdGFibGUgSUNV
IDMuNgorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMgordWNhbF9zZXRHcmVnb3JpYW5DaGFu
Z2UoVUNhbGVuZGFyICpjYWwsIFVEYXRlIGRhdGUsIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOwor
CisvKioKKyAqIEdldHMgdGhlIEdyZWdvcmlhbiBDYWxlbmRhciBjaGFuZ2UgZGF0ZS4gVGhpcyBp
cyB0aGUgcG9pbnQgd2hlbiB0aGUgc3dpdGNoIGZyb20KKyAqIEp1bGlhbiBkYXRlcyB0byBHcmVn
b3JpYW4gZGF0ZXMgb2NjdXJyZWQuIERlZmF1bHQgaXMgMDA6MDA6MDAgbG9jYWwgdGltZSwgT2N0
b2JlcgorICogMTUsIDE1ODIuIFByZXZpb3VzIHRvIHRoaXMgdGltZSBhbmQgZGF0ZSB3aWxsIGJl
IEp1bGlhbiBkYXRlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIG9ubHkgZm9yIEdyZWdv
cmlhbiBjYWxlbmRhcnMuIElmIHRoZSBVQ2FsZW5kYXIgaXMgbm90CisgKiBhbiBpbnN0YW5jZSBv
ZiBhIEdyZWdvcmlhbiBjYWxlbmRhciwgdGhlbiBhIFVfVU5TVVBQT1JURURfRVJST1IKKyAqIGVy
cm9yIGNvZGUgaXMgc2V0LgorICoKKyAqIEBwYXJhbSBjYWwgICAgICAgIFRoZSBjYWxlbmRhciBv
YmplY3QuCisgKiBAcGFyYW0gcEVycm9yQ29kZSBQb2ludGVyIHRvIGEgc3RhbmRhcmQgSUNVIGVy
cm9yIGNvZGUuIEl0cyBpbnB1dCB2YWx1ZSBtdXN0CisgKiAgICAgICAgICAgICAgICAgICBwYXNz
IHRoZSBVX1NVQ0NFU1MoKSB0ZXN0LCBvciBlbHNlIHRoZSBmdW5jdGlvbiByZXR1cm5zCisgKiAg
ICAgICAgICAgICAgICAgICBpbW1lZGlhdGVseS4gQ2hlY2sgZm9yIFVfRkFJTFVSRSgpIG9uIG91
dHB1dCBvciB1c2Ugd2l0aAorICogICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY2hhaW5pbmcu
IChTZWUgVXNlciBHdWlkZSBmb3IgZGV0YWlscy4pCisgKiBAcmV0dXJuICAgVGhlIEdyZWdvcmlh
biBjdXRvdmVyIHRpbWUgZm9yIHRoaXMgY2FsZW5kYXIuCisgKgorICogQHNlZSBHcmVnb3JpYW5D
YWxlbmRhcjo6Z2V0R3JlZ29yaWFuQ2hhbmdlCisgKiBAc2VlIHVjYWxfc2V0R3JlZ29yaWFuQ2hh
bmdlCisgKiBAc3RhYmxlIElDVSAzLjYKKyAqLworVV9TVEFCTEUgVURhdGUgVV9FWFBPUlQyCit1
Y2FsX2dldEdyZWdvcmlhbkNoYW5nZShjb25zdCBVQ2FsZW5kYXIgKmNhbCwgVUVycm9yQ29kZSAq
cEVycm9yQ29kZSk7CisKKy8qKgorICogVHlwZXMgb2YgVUNhbGVuZGFyIGF0dHJpYnV0ZXMgCisg
KiBAc3RhYmxlIElDVSAyLjAKKyAqLworZW51bSBVQ2FsZW5kYXJBdHRyaWJ1dGUgeworICAgIC8q
KiBMZW5pZW50IHBhcnNpbmcgKi8KKyAgVUNBTF9MRU5JRU5ULAorICAvKiogRmlyc3QgZGF5IG9m
IHdlZWsgKi8KKyAgVUNBTF9GSVJTVF9EQVlfT0ZfV0VFSywKKyAgLyoqIE1pbmltdW0gbnVtYmVy
IG9mIGRheXMgaW4gZmlyc3Qgd2VlayAqLworICBVQ0FMX01JTklNQUxfREFZU19JTl9GSVJTVF9X
RUVLCit9OworCisvKiogQHN0YWJsZSBJQ1UgMi4wICovCit0eXBlZGVmIGVudW0gVUNhbGVuZGFy
QXR0cmlidXRlIFVDYWxlbmRhckF0dHJpYnV0ZTsKKworLyoqCisgKiBHZXQgYSBudW1lcmljIGF0
dHJpYnV0ZSBhc3NvY2lhdGVkIHdpdGggYSBVQ2FsZW5kYXIuCisgKiBOdW1lcmljIGF0dHJpYnV0
ZXMgaW5jbHVkZSB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLCBvciB0aGUgbWluaW1hbCBudW1i
ZXJzCisgKiBvZiBkYXlzIGluIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSBtb250aC4KKyAqIEBwYXJh
bSBjYWwgVGhlIFVDYWxlbmRhciB0byBxdWVyeS4KKyAqIEBwYXJhbSBhdHRyIFRoZSBkZXNpcmVk
IGF0dHJpYnV0ZTsgb25lIG9mIFVDQUxfTEVOSUVOVCwgVUNBTF9GSVJTVF9EQVlfT0ZfV0VFSywK
KyAqIG9yIFVDQUxfTUlOSU1BTF9EQVlTX0lOX0ZJUlNUX1dFRUsKKyAqIEByZXR1cm4gVGhlIHZh
bHVlIG9mIGF0dHIuCisgKiBAc2VlIHVjYWxfc2V0QXR0cmlidXRlCisgKiBAc3RhYmxlIElDVSAy
LjAKKyAqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1Y2FsX2dldEF0dHJpYnV0ZShj
b25zdCBVQ2FsZW5kYXIqICAgIGNhbCwKKyAgICAgICAgICAgICAgICAgIFVDYWxlbmRhckF0dHJp
YnV0ZSAgYXR0cik7CisKKy8qKgorICogU2V0IGEgbnVtZXJpYyBhdHRyaWJ1dGUgYXNzb2NpYXRl
ZCB3aXRoIGEgVUNhbGVuZGFyLgorICogTnVtZXJpYyBhdHRyaWJ1dGVzIGluY2x1ZGUgdGhlIGZp
cnN0IGRheSBvZiB0aGUgd2Vlaywgb3IgdGhlIG1pbmltYWwgbnVtYmVycworICogb2YgZGF5cyBp
biB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgbW9udGguCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5k
YXIgdG8gc2V0LgorICogQHBhcmFtIGF0dHIgVGhlIGRlc2lyZWQgYXR0cmlidXRlOyBvbmUgb2Yg
VUNBTF9MRU5JRU5ULCBVQ0FMX0ZJUlNUX0RBWV9PRl9XRUVLLAorICogb3IgVUNBTF9NSU5JTUFM
X0RBWVNfSU5fRklSU1RfV0VFSworICogQHBhcmFtIG5ld1ZhbHVlIFRoZSBuZXcgdmFsdWUgb2Yg
YXR0ci4KKyAqIEBzZWUgdWNhbF9nZXRBdHRyaWJ1dGUKKyAqIEBzdGFibGUgSUNVIDIuMAorICov
CitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfc2V0QXR0cmlidXRlKFVDYWxlbmRhciog
ICAgICAgICAgY2FsLAorICAgICAgICAgICAgICAgICAgVUNhbGVuZGFyQXR0cmlidXRlICBhdHRy
LAorICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgICBuZXdWYWx1ZSk7CisKKy8q
KgorICogR2V0IGEgbG9jYWxlIGZvciB3aGljaCBjYWxlbmRhcnMgYXJlIGF2YWlsYWJsZS4KKyAq
IEEgVUNhbGVuZGFyIGluIGEgbG9jYWxlIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gd2lsbCBj
b250YWluIHRoZSBjb3JyZWN0CisgKiBkYXkgYW5kIG1vbnRoIG5hbWVzIGZvciB0aGUgbG9jYWxl
LgorICogQHBhcmFtIGxvY2FsZUluZGV4IFRoZSBpbmRleCBvZiB0aGUgZGVzaXJlZCBsb2NhbGUu
CisgKiBAcmV0dXJuIEEgbG9jYWxlIGZvciB3aGljaCBjYWxlbmRhcnMgYXJlIGF2YWlsYWJsZSwg
b3IgMCBpZiBub25lLgorICogQHNlZSB1Y2FsX2NvdW50QXZhaWxhYmxlCisgKiBAc3RhYmxlIElD
VSAyLjAKKyAqLworVV9TVEFCTEUgY29uc3QgY2hhciogVV9FWFBPUlQyIAordWNhbF9nZXRBdmFp
bGFibGUoaW50MzJfdCBsb2NhbGVJbmRleCk7CisKKy8qKgorICogRGV0ZXJtaW5lIGhvdyBtYW55
IGxvY2FsZXMgaGF2ZSBjYWxlbmRhcnMgYXZhaWxhYmxlLgorICogVGhpcyBmdW5jdGlvbiBpcyBt
b3N0IHVzZWZ1bCBhcyBkZXRlcm1pbmluZyB0aGUgbG9vcCBlbmRpbmcgY29uZGl0aW9uIGZvcgor
ICogY2FsbHMgdG8gXHJlZiB1Y2FsX2dldEF2YWlsYWJsZS4KKyAqIEByZXR1cm4gVGhlIG51bWJl
ciBvZiBsb2NhbGVzIGZvciB3aGljaCBjYWxlbmRhcnMgYXJlIGF2YWlsYWJsZS4KKyAqIEBzZWUg
dWNhbF9nZXRBdmFpbGFibGUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBpbnQz
Ml90IFVfRVhQT1JUMiAKK3VjYWxfY291bnRBdmFpbGFibGUodm9pZCk7CisKKy8qKgorICogR2V0
IGEgVUNhbGVuZGFyJ3MgY3VycmVudCB0aW1lIGluIG1pbGxpcy4KKyAqIFRoZSB0aW1lIGlzIHJl
cHJlc2VudGVkIGFzIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBlcG9jaC4KKyAqIEBwYXJhbSBjYWwg
VGhlIFVDYWxlbmRhciB0byBxdWVyeS4KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFu
IFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisgKiBAcmV0dXJuIFRoZSBjYWxlbmRh
cidzIGN1cnJlbnQgdGltZSBpbiBtaWxsaXMuCisgKiBAc2VlIHVjYWxfc2V0TWlsbGlzCisgKiBA
c2VlIHVjYWxfc2V0RGF0ZQorICogQHNlZSB1Y2FsX3NldERhdGVUaW1lCisgKiBAc3RhYmxlIElD
VSAyLjAKKyAqLworVV9TVEFCTEUgVURhdGUgVV9FWFBPUlQyIAordWNhbF9nZXRNaWxsaXMoY29u
c3QgVUNhbGVuZGFyKiAgY2FsLAorICAgICAgICAgICAgICAgVUVycm9yQ29kZSogICAgICAgc3Rh
dHVzKTsKKworLyoqCisgKiBTZXQgYSBVQ2FsZW5kYXIncyBjdXJyZW50IHRpbWUgaW4gbWlsbGlz
LgorICogVGhlIHRpbWUgaXMgcmVwcmVzZW50ZWQgYXMgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGVw
b2NoLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHNldC4KKyAqIEBwYXJhbSBkYXRl
VGltZSBUaGUgZGVzaXJlZCBkYXRlIGFuZCB0aW1lLgorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50
ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyAqIEBzZWUgdWNhbF9n
ZXRNaWxsaXMKKyAqIEBzZWUgdWNhbF9zZXREYXRlCisgKiBAc2VlIHVjYWxfc2V0RGF0ZVRpbWUK
KyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxf
c2V0TWlsbGlzKFVDYWxlbmRhciogICBjYWwsCisgICAgICAgICAgICAgICBVRGF0ZSAgICAgICAg
ZGF0ZVRpbWUsCisgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiAgc3RhdHVzICk7CisKKy8qKgor
ICogU2V0IGEgVUNhbGVuZGFyJ3MgY3VycmVudCBkYXRlLgorICogVGhlIGRhdGUgaXMgcmVwcmVz
ZW50ZWQgYXMgYSBzZXJpZXMgb2YgMzItYml0IGludGVnZXJzLgorICogQHBhcmFtIGNhbCBUaGUg
VUNhbGVuZGFyIHRvIHNldC4KKyAqIEBwYXJhbSB5ZWFyIFRoZSBkZXNpcmVkIHllYXIuCisgKiBA
cGFyYW0gbW9udGggVGhlIGRlc2lyZWQgbW9udGg7IG9uZSBvZiBVQ0FMX0pBTlVBUlksIFVDQUxf
RkVCUlVBUlksIFVDQUxfTUFSQ0gsIFVDQUxfQVBSSUwsIFVDQUxfTUFZLAorICogVUNBTF9KVU5F
LCBVQ0FMX0pVTFksIFVDQUxfQVVHVVNULCBVQ0FMX1NFUFRFTUJFUiwgVUNBTF9PQ1RPQkVSLCBV
Q0FMX05PVkVNQkVSLCBVQ0FMX0RFQ0VNQkVSLCBVQ0FMX1VOREVDSU1CRVIKKyAqIEBwYXJhbSBk
YXRlIFRoZSBkZXNpcmVkIGRheSBvZiB0aGUgbW9udGguCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9p
bnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworICogQHNlZSB1Y2Fs
X2dldE1pbGxpcworICogQHNlZSB1Y2FsX3NldE1pbGxpcworICogQHNlZSB1Y2FsX3NldERhdGVU
aW1lCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1
Y2FsX3NldERhdGUoVUNhbGVuZGFyKiAgIGNhbCwKKyAgICAgICAgICAgICBpbnQzMl90ICAgICAg
eWVhciwKKyAgICAgICAgICAgICBpbnQzMl90ICAgICAgbW9udGgsCisgICAgICAgICAgICAgaW50
MzJfdCAgICAgIGRhdGUsCisgICAgICAgICAgICAgVUVycm9yQ29kZSogIHN0YXR1cyk7CisKKy8q
KgorICogU2V0IGEgVUNhbGVuZGFyJ3MgY3VycmVudCBkYXRlLgorICogVGhlIGRhdGUgaXMgcmVw
cmVzZW50ZWQgYXMgYSBzZXJpZXMgb2YgMzItYml0IGludGVnZXJzLgorICogQHBhcmFtIGNhbCBU
aGUgVUNhbGVuZGFyIHRvIHNldC4KKyAqIEBwYXJhbSB5ZWFyIFRoZSBkZXNpcmVkIHllYXIuCisg
KiBAcGFyYW0gbW9udGggVGhlIGRlc2lyZWQgbW9udGg7IG9uZSBvZiBVQ0FMX0pBTlVBUlksIFVD
QUxfRkVCUlVBUlksIFVDQUxfTUFSQ0gsIFVDQUxfQVBSSUwsIFVDQUxfTUFZLAorICogVUNBTF9K
VU5FLCBVQ0FMX0pVTFksIFVDQUxfQVVHVVNULCBVQ0FMX1NFUFRFTUJFUiwgVUNBTF9PQ1RPQkVS
LCBVQ0FMX05PVkVNQkVSLCBVQ0FMX0RFQ0VNQkVSLCBVQ0FMX1VOREVDSU1CRVIKKyAqIEBwYXJh
bSBkYXRlIFRoZSBkZXNpcmVkIGRheSBvZiB0aGUgbW9udGguCisgKiBAcGFyYW0gaG91ciBUaGUg
ZGVzaXJlZCBob3VyIG9mIGRheS4KKyAqIEBwYXJhbSBtaW51dGUgVGhlIGRlc2lyZWQgbWludXRl
LgorICogQHBhcmFtIHNlY29uZCBUaGUgZGVzaXJlYyBzZWNvbmQuCisgKiBAcGFyYW0gc3RhdHVz
IEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworICogQHNl
ZSB1Y2FsX2dldE1pbGxpcworICogQHNlZSB1Y2FsX3NldE1pbGxpcworICogQHNlZSB1Y2FsX3Nl
dERhdGUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAK
K3VjYWxfc2V0RGF0ZVRpbWUoVUNhbGVuZGFyKiAgIGNhbCwKKyAgICAgICAgICAgICAgICAgaW50
MzJfdCAgICAgIHllYXIsCisgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICBtb250aCwKKyAg
ICAgICAgICAgICAgICAgaW50MzJfdCAgICAgIGRhdGUsCisgICAgICAgICAgICAgICAgIGludDMy
X3QgICAgICBob3VyLAorICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgbWludXRlLAorICAg
ICAgICAgICAgICAgICBpbnQzMl90ICAgICAgc2Vjb25kLAorICAgICAgICAgICAgICAgICBVRXJy
b3JDb2RlKiAgc3RhdHVzKTsKKworLyoqCisgKiBSZXR1cm5zIFRSVUUgaWYgdHdvIFVDYWxlbmRh
cnMgYXJlIGVxdWl2YWxlbnQuICBFcXVpdmFsZW50CisgKiBVQ2FsZW5kYXJzIHdpbGwgYmVoYXZl
IGlkZW50aWNhbGx5LCBidXQgdGhleSBtYXkgYmUgc2V0IHRvCisgKiBkaWZmZXJlbnQgdGltZXMu
CisgKiBAcGFyYW0gY2FsMSBUaGUgZmlyc3Qgb2YgdGhlIFVDYWxlbmRhcnMgdG8gY29tcGFyZS4K
KyAqIEBwYXJhbSBjYWwyIFRoZSBzZWNvbmQgb2YgdGhlIFVDYWxlbmRhcnMgdG8gY29tcGFyZS4K
KyAqIEByZXR1cm4gVFJVRSBpZiBjYWwxIGFuZCBjYWwyIGFyZSBlcXVpdmFsZW50LCBGQUxTRSBv
dGhlcndpc2UuCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgVUJvb2wgVV9FWFBP
UlQyIAordWNhbF9lcXVpdmFsZW50VG8oY29uc3QgVUNhbGVuZGFyKiAgY2FsMSwKKyAgICAgICAg
ICAgICAgICAgIGNvbnN0IFVDYWxlbmRhciogIGNhbDIpOworCisvKioKKyAqIEFkZCBhIHNwZWNp
ZmllZCBzaWduZWQgYW1vdW50IHRvIGEgcGFydGljdWxhciBmaWVsZCBpbiBhIFVDYWxlbmRhci4K
KyAqIFRoaXMgY2FuIG1vZGlmeSBtb3JlIHNpZ25pZmljYW50IGZpZWxkcyBpbiB0aGUgY2FsZW5k
YXIuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gd2hpY2ggdG8gYWRkLgorICogQHBh
cmFtIGZpZWxkIFRoZSBmaWVsZCB0byB3aGljaCB0byBhZGQgdGhlIHNpZ25lZCB2YWx1ZTsgb25l
IG9mIFVDQUxfRVJBLCBVQ0FMX1lFQVIsIFVDQUxfTU9OVEgsCisgKiBVQ0FMX1dFRUtfT0ZfWUVB
UiwgVUNBTF9XRUVLX09GX01PTlRILCBVQ0FMX0RBVEUsIFVDQUxfREFZX09GX1lFQVIsIFVDQUxf
REFZX09GX1dFRUssCisgKiBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRILCBVQ0FMX0FNX1BNLCBV
Q0FMX0hPVVIsIFVDQUxfSE9VUl9PRl9EQVksIFVDQUxfTUlOVVRFLCBVQ0FMX1NFQ09ORCwKKyAq
IFVDQUxfTUlMTElTRUNPTkQsIFVDQUxfWk9ORV9PRkZTRVQsIFVDQUxfRFNUX09GRlNFVC4KKyAq
IEBwYXJhbSBhbW91bnQgVGhlIHNpZ25lZCBhbW91bnQgdG8gYWRkIHRvIGZpZWxkLiBJZiB0aGUg
YW1vdW50IGNhdXNlcyB0aGUgdmFsdWUKKyAqIHRvIGV4Y2VlZCB0byBtYXhpbXVtIG9yIG1pbmlt
dW0gdmFsdWVzIGZvciB0aGF0IGZpZWxkLCBvdGhlciBmaWVsZHMgYXJlIG1vZGlmaWVkCisgKiB0
byBwcmVzZXJ2ZSB0aGUgbWFnbml0dWRlIG9mIHRoZSBjaGFuZ2UuCisgKiBAcGFyYW0gc3RhdHVz
IEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworICogQHNl
ZSB1Y2FsX3JvbGwKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQ
T1JUMiAKK3VjYWxfYWRkKFVDYWxlbmRhciogICAgICAgICAgIGNhbCwKKyAgICAgICAgIFVDYWxl
bmRhckRhdGVGaWVsZHMgIGZpZWxkLAorICAgICAgICAgaW50MzJfdCAgICAgICAgICAgICAgYW1v
dW50LAorICAgICAgICAgVUVycm9yQ29kZSogICAgICAgICAgc3RhdHVzKTsKKworLyoqCisgKiBB
ZGQgYSBzcGVjaWZpZWQgc2lnbmVkIGFtb3VudCB0byBhIHBhcnRpY3VsYXIgZmllbGQgaW4gYSBV
Q2FsZW5kYXIuCisgKiBUaGlzIHdpbGwgbm90IG1vZGlmeSBtb3JlIHNpZ25pZmljYW50IGZpZWxk
cyBpbiB0aGUgY2FsZW5kYXIuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gd2hpY2gg
dG8gYWRkLgorICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZCB0byB3aGljaCB0byBhZGQgdGhlIHNp
Z25lZCB2YWx1ZTsgb25lIG9mIFVDQUxfRVJBLCBVQ0FMX1lFQVIsIFVDQUxfTU9OVEgsCisgKiBV
Q0FMX1dFRUtfT0ZfWUVBUiwgVUNBTF9XRUVLX09GX01PTlRILCBVQ0FMX0RBVEUsIFVDQUxfREFZ
X09GX1lFQVIsIFVDQUxfREFZX09GX1dFRUssCisgKiBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRI
LCBVQ0FMX0FNX1BNLCBVQ0FMX0hPVVIsIFVDQUxfSE9VUl9PRl9EQVksIFVDQUxfTUlOVVRFLCBV
Q0FMX1NFQ09ORCwKKyAqIFVDQUxfTUlMTElTRUNPTkQsIFVDQUxfWk9ORV9PRkZTRVQsIFVDQUxf
RFNUX09GRlNFVC4KKyAqIEBwYXJhbSBhbW91bnQgVGhlIHNpZ25lZCBhbW91bnQgdG8gYWRkIHRv
IGZpZWxkLiBJZiB0aGUgYW1vdW50IGNhdXNlcyB0aGUgdmFsdWUKKyAqIHRvIGV4Y2VlZCB0byBt
YXhpbXVtIG9yIG1pbmltdW0gdmFsdWVzIGZvciB0aGF0IGZpZWxkLCB0aGUgZmllbGQgaXMgcGlu
bmVkIHRvIGEgcGVybWlzc2libGUKKyAqIHZhbHVlLgorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50
ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyAqIEBzZWUgdWNhbF9h
ZGQKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3Vj
YWxfcm9sbChVQ2FsZW5kYXIqICAgICAgICAgICBjYWwsCisgICAgICAgICAgVUNhbGVuZGFyRGF0
ZUZpZWxkcyAgZmllbGQsCisgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgICAgYW1vdW50LAor
ICAgICAgICAgIFVFcnJvckNvZGUqICAgICAgICAgIHN0YXR1cyk7CisKKy8qKgorICogR2V0IHRo
ZSBjdXJyZW50IHZhbHVlIG9mIGEgZmllbGQgZnJvbSBhIFVDYWxlbmRhci4KKyAqIEFsbCBmaWVs
ZHMgYXJlIHJlcHJlc2VudGVkIGFzIDMyLWJpdCBpbnRlZ2Vycy4KKyAqIEBwYXJhbSBjYWwgVGhl
IFVDYWxlbmRhciB0byBxdWVyeS4KKyAqIEBwYXJhbSBmaWVsZCBUaGUgZGVzaXJlZCBmaWVsZDsg
b25lIG9mIFVDQUxfRVJBLCBVQ0FMX1lFQVIsIFVDQUxfTU9OVEgsCisgKiBVQ0FMX1dFRUtfT0Zf
WUVBUiwgVUNBTF9XRUVLX09GX01PTlRILCBVQ0FMX0RBVEUsIFVDQUxfREFZX09GX1lFQVIsIFVD
QUxfREFZX09GX1dFRUssCisgKiBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRILCBVQ0FMX0FNX1BN
LCBVQ0FMX0hPVVIsIFVDQUxfSE9VUl9PRl9EQVksIFVDQUxfTUlOVVRFLCBVQ0FMX1NFQ09ORCwK
KyAqIFVDQUxfTUlMTElTRUNPTkQsIFVDQUxfWk9ORV9PRkZTRVQsIFVDQUxfRFNUX09GRlNFVC4K
KyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBh
bnkgZXJyb3JzCisgKiBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgZGVzaXJlZCBmaWVsZC4KKyAq
IEBzZWUgdWNhbF9zZXQKKyAqIEBzZWUgdWNhbF9pc1NldAorICogQHNlZSB1Y2FsX2NsZWFyRmll
bGQKKyAqIEBzZWUgdWNhbF9jbGVhcgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxF
IGludDMyX3QgVV9FWFBPUlQyIAordWNhbF9nZXQoY29uc3QgVUNhbGVuZGFyKiAgICAgY2FsLAor
ICAgICAgICAgVUNhbGVuZGFyRGF0ZUZpZWxkcyAgZmllbGQsCisgICAgICAgICBVRXJyb3JDb2Rl
KiAgICAgICAgICBzdGF0dXMgKTsKKworLyoqCisgKiBTZXQgdGhlIHZhbHVlIG9mIGEgZmllbGQg
aW4gYSBVQ2FsZW5kYXIuCisgKiBBbGwgZmllbGRzIGFyZSByZXByZXNlbnRlZCBhcyAzMi1iaXQg
aW50ZWdlcnMuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gc2V0LgorICogQHBhcmFt
IGZpZWxkIFRoZSBmaWVsZCB0byBzZXQ7IG9uZSBvZiBVQ0FMX0VSQSwgVUNBTF9ZRUFSLCBVQ0FM
X01PTlRILAorICogVUNBTF9XRUVLX09GX1lFQVIsIFVDQUxfV0VFS19PRl9NT05USCwgVUNBTF9E
QVRFLCBVQ0FMX0RBWV9PRl9ZRUFSLCBVQ0FMX0RBWV9PRl9XRUVLLAorICogVUNBTF9EQVlfT0Zf
V0VFS19JTl9NT05USCwgVUNBTF9BTV9QTSwgVUNBTF9IT1VSLCBVQ0FMX0hPVVJfT0ZfREFZLCBV
Q0FMX01JTlVURSwgVUNBTF9TRUNPTkQsCisgKiBVQ0FMX01JTExJU0VDT05ELCBVQ0FMX1pPTkVf
T0ZGU0VULCBVQ0FMX0RTVF9PRkZTRVQuCisgKiBAcGFyYW0gdmFsdWUgVGhlIGRlc2lyZWQgdmFs
dWUgb2YgZmllbGQuCisgKiBAc2VlIHVjYWxfZ2V0CisgKiBAc2VlIHVjYWxfaXNTZXQKKyAqIEBz
ZWUgdWNhbF9jbGVhckZpZWxkCisgKiBAc2VlIHVjYWxfY2xlYXIKKyAqIEBzdGFibGUgSUNVIDIu
MAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfc2V0KFVDYWxlbmRhciogICAg
ICAgICAgIGNhbCwKKyAgICAgICAgIFVDYWxlbmRhckRhdGVGaWVsZHMgIGZpZWxkLAorICAgICAg
ICAgaW50MzJfdCAgICAgICAgICAgICAgdmFsdWUpOworCisvKioKKyAqIERldGVybWluZSBpZiBh
IGZpZWxkIGluIGEgVUNhbGVuZGFyIGlzIHNldC4KKyAqIEFsbCBmaWVsZHMgYXJlIHJlcHJlc2Vu
dGVkIGFzIDMyLWJpdCBpbnRlZ2Vycy4KKyAqIEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBx
dWVyeS4KKyAqIEBwYXJhbSBmaWVsZCBUaGUgZGVzaXJlZCBmaWVsZDsgb25lIG9mIFVDQUxfRVJB
LCBVQ0FMX1lFQVIsIFVDQUxfTU9OVEgsCisgKiBVQ0FMX1dFRUtfT0ZfWUVBUiwgVUNBTF9XRUVL
X09GX01PTlRILCBVQ0FMX0RBVEUsIFVDQUxfREFZX09GX1lFQVIsIFVDQUxfREFZX09GX1dFRUss
CisgKiBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRILCBVQ0FMX0FNX1BNLCBVQ0FMX0hPVVIsIFVD
QUxfSE9VUl9PRl9EQVksIFVDQUxfTUlOVVRFLCBVQ0FMX1NFQ09ORCwKKyAqIFVDQUxfTUlMTElT
RUNPTkQsIFVDQUxfWk9ORV9PRkZTRVQsIFVDQUxfRFNUX09GRlNFVC4KKyAqIEByZXR1cm4gVFJV
RSBpZiBmaWVsZCBpcyBzZXQsIEZBTFNFIG90aGVyd2lzZS4KKyAqIEBzZWUgdWNhbF9nZXQKKyAq
IEBzZWUgdWNhbF9zZXQKKyAqIEBzZWUgdWNhbF9jbGVhckZpZWxkCisgKiBAc2VlIHVjYWxfY2xl
YXIKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBVQm9vbCBVX0VYUE9SVDIgCit1
Y2FsX2lzU2V0KGNvbnN0IFVDYWxlbmRhciogICAgIGNhbCwKKyAgICAgICAgICAgVUNhbGVuZGFy
RGF0ZUZpZWxkcyAgZmllbGQpOworCisvKioKKyAqIENsZWFyIGEgZmllbGQgaW4gYSBVQ2FsZW5k
YXIuCisgKiBBbGwgZmllbGRzIGFyZSByZXByZXNlbnRlZCBhcyAzMi1iaXQgaW50ZWdlcnMuCisg
KiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgY29udGFpbmluZyB0aGUgZmllbGQgdG8gY2xlYXIu
CisgKiBAcGFyYW0gZmllbGQgVGhlIGZpZWxkIHRvIGNsZWFyOyBvbmUgb2YgVUNBTF9FUkEsIFVD
QUxfWUVBUiwgVUNBTF9NT05USCwKKyAqIFVDQUxfV0VFS19PRl9ZRUFSLCBVQ0FMX1dFRUtfT0Zf
TU9OVEgsIFVDQUxfREFURSwgVUNBTF9EQVlfT0ZfWUVBUiwgVUNBTF9EQVlfT0ZfV0VFSywKKyAq
IFVDQUxfREFZX09GX1dFRUtfSU5fTU9OVEgsIFVDQUxfQU1fUE0sIFVDQUxfSE9VUiwgVUNBTF9I
T1VSX09GX0RBWSwgVUNBTF9NSU5VVEUsIFVDQUxfU0VDT05ELAorICogVUNBTF9NSUxMSVNFQ09O
RCwgVUNBTF9aT05FX09GRlNFVCwgVUNBTF9EU1RfT0ZGU0VULgorICogQHNlZSB1Y2FsX2dldAor
ICogQHNlZSB1Y2FsX3NldAorICogQHNlZSB1Y2FsX2lzU2V0CisgKiBAc2VlIHVjYWxfY2xlYXIK
KyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxf
Y2xlYXJGaWVsZChVQ2FsZW5kYXIqICAgICAgICAgICBjYWwsCisgICAgICAgICAgICAgICAgVUNh
bGVuZGFyRGF0ZUZpZWxkcyAgZmllbGQpOworCisvKioKKyAqIENsZWFyIGFsbCBmaWVsZHMgaW4g
YSBVQ2FsZW5kYXIuCisgKiBBbGwgZmllbGRzIGFyZSByZXByZXNlbnRlZCBhcyAzMi1iaXQgaW50
ZWdlcnMuCisgKiBAcGFyYW0gY2FsZW5kYXIgVGhlIFVDYWxlbmRhciB0byBjbGVhci4KKyAqIEBz
ZWUgdWNhbF9nZXQKKyAqIEBzZWUgdWNhbF9zZXQKKyAqIEBzZWUgdWNhbF9pc1NldAorICogQHNl
ZSB1Y2FsX2NsZWFyRmllbGQKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lk
IFVfRVhQT1JUMiAKK3VjYWxfY2xlYXIoVUNhbGVuZGFyKiBjYWxlbmRhcik7CisKKy8qKgorICog
UG9zc2libGUgbGltaXQgdmFsdWVzIGZvciBhIFVDYWxlbmRhciAKKyAqIEBzdGFibGUgSUNVIDIu
MAorICovCitlbnVtIFVDYWxlbmRhckxpbWl0VHlwZSB7CisgIC8qKiBNaW5pbXVtIHZhbHVlICov
CisgIFVDQUxfTUlOSU1VTSwKKyAgLyoqIE1heGltdW0gdmFsdWUgKi8KKyAgVUNBTF9NQVhJTVVN
LAorICAvKiogR3JlYXRlc3QgbWluaW11bSB2YWx1ZSAqLworICBVQ0FMX0dSRUFURVNUX01JTklN
VU0sCisgIC8qKiBMZWFlc3QgbWF4aW11bSB2YWx1ZSAqLworICBVQ0FMX0xFQVNUX01BWElNVU0s
CisgIC8qKiBBY3R1YWwgbWluaW11bSB2YWx1ZSAqLworICBVQ0FMX0FDVFVBTF9NSU5JTVVNLAor
ICAvKiogQWN0dWFsIG1heGltdW0gdmFsdWUgKi8KKyAgVUNBTF9BQ1RVQUxfTUFYSU1VTQorfTsK
KworLyoqIEBzdGFibGUgSUNVIDIuMCAqLwordHlwZWRlZiBlbnVtIFVDYWxlbmRhckxpbWl0VHlw
ZSBVQ2FsZW5kYXJMaW1pdFR5cGU7CisKKy8qKgorICogRGV0ZXJtaW5lIGEgbGltaXQgZm9yIGEg
ZmllbGQgaW4gYSBVQ2FsZW5kYXIuCisgKiBBIGxpbWl0IGlzIGEgbWF4aW11bSBvciBtaW5pbXVt
IHZhbHVlIGZvciBhIGZpZWxkLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHF1ZXJ5
LgorICogQHBhcmFtIGZpZWxkIFRoZSBkZXNpcmVkIGZpZWxkOyBvbmUgb2YgVUNBTF9FUkEsIFVD
QUxfWUVBUiwgVUNBTF9NT05USCwKKyAqIFVDQUxfV0VFS19PRl9ZRUFSLCBVQ0FMX1dFRUtfT0Zf
TU9OVEgsIFVDQUxfREFURSwgVUNBTF9EQVlfT0ZfWUVBUiwgVUNBTF9EQVlfT0ZfV0VFSywKKyAq
IFVDQUxfREFZX09GX1dFRUtfSU5fTU9OVEgsIFVDQUxfQU1fUE0sIFVDQUxfSE9VUiwgVUNBTF9I
T1VSX09GX0RBWSwgVUNBTF9NSU5VVEUsIFVDQUxfU0VDT05ELAorICogVUNBTF9NSUxMSVNFQ09O
RCwgVUNBTF9aT05FX09GRlNFVCwgVUNBTF9EU1RfT0ZGU0VULgorICogQHBhcmFtIHR5cGUgVGhl
IGRlc2lyZWQgY3JpdGljYWwgcG9pbnQ7IG9uZSBvZiBVQ0FMX01JTklNVU0sIFVDQUxfTUFYSU1V
TSwgVUNBTF9HUkVBVEVTVF9NSU5JTVVNLAorICogVUNBTF9MRUFTVF9NQVhJTVVNLCBVQ0FMX0FD
VFVBTF9NSU5JTVVNLCBVQ0FMX0FDVFVBTF9NQVhJTVVNCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9p
bnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycy4KKyAqIEByZXR1cm4g
VGhlIHJlcXVlc3RlZCB2YWx1ZS4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBp
bnQzMl90IFVfRVhQT1JUMiAKK3VjYWxfZ2V0TGltaXQoY29uc3QgVUNhbGVuZGFyKiAgICAgY2Fs
LAorICAgICAgICAgICAgICBVQ2FsZW5kYXJEYXRlRmllbGRzICBmaWVsZCwKKyAgICAgICAgICAg
ICAgVUNhbGVuZGFyTGltaXRUeXBlICAgdHlwZSwKKyAgICAgICAgICAgICAgVUVycm9yQ29kZSog
ICAgICAgICAgc3RhdHVzKTsKKworLyoqIEdldCB0aGUgbG9jYWxlIGZvciB0aGlzIGNhbGVuZGFy
IG9iamVjdC4gWW91IGNhbiBjaG9vc2UgYmV0d2VlbiB2YWxpZCBhbmQgYWN0dWFsIGxvY2FsZS4K
KyAqICBAcGFyYW0gY2FsIFRoZSBjYWxlbmRhciBvYmplY3QKKyAqICBAcGFyYW0gdHlwZSB0eXBl
IG9mIHRoZSBsb2NhbGUgd2UncmUgbG9va2luZyBmb3IgKHZhbGlkIG9yIGFjdHVhbCkgCisgKiAg
QHBhcmFtIHN0YXR1cyBlcnJvciBjb2RlIGZvciB0aGUgb3BlcmF0aW9uCisgKiAgQHJldHVybiB0
aGUgbG9jYWxlIG5hbWUKKyAqICBAc3RhYmxlIElDVSAyLjgKKyAqLworVV9TVEFCTEUgY29uc3Qg
Y2hhciAqIFVfRVhQT1JUMgordWNhbF9nZXRMb2NhbGVCeVR5cGUoY29uc3QgVUNhbGVuZGFyICpj
YWwsIFVMb2NEYXRhTG9jYWxlVHlwZSB0eXBlLCBVRXJyb3JDb2RlKiBzdGF0dXMpOworCisvKioK
KyAqIFJldHVybnMgdGhlIHRpbWV6b25lIGRhdGEgdmVyc2lvbiBjdXJyZW50bHkgdXNlZCBieSBJ
Q1UuCisgKiBAcGFyYW0gc3RhdHVzIGVycm9yIGNvZGUgZm9yIHRoZSBvcGVyYXRpb24KKyAqIEBy
ZXR1cm4gdGhlIHZlcnNpb24gc3RyaW5nLCBzdWNoIGFzICIyMDA3ZiIKKyAqIEBzdGFibGUgSUNV
IDMuOAorICovCitVX1NUQUJMRSBjb25zdCBjaGFyICogVV9FWFBPUlQyCit1Y2FsX2dldFRaRGF0
YVZlcnNpb24oVUVycm9yQ29kZSogc3RhdHVzKTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBjYW5v
bmljYWwgc3lzdGVtIHRpbWV6b25lIElEIG9yIHRoZSBub3JtYWxpemVkCisgKiBjdXN0b20gdGlt
ZSB6b25lIElEIGZvciB0aGUgZ2l2ZW4gdGltZSB6b25lIElELgorICogQHBhcmFtIGlkICAgICAg
ICBUaGUgaW5wdXQgdGltZXpvbmUgSUQgdG8gYmUgY2Fub25pY2FsaXplZC4KKyAqIEBwYXJhbSBs
ZW4gICAgICAgVGhlIGxlbmd0aCBvZiBpZCwgb3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorICog
QHBhcmFtIHJlc3VsdCAgICBUaGUgYnVmZmVyIHJlY2VpdmVzIHRoZSBjYW5vbmljYWwgc3lzdGVt
IHRpbWV6b25lIElECisgKiAgICAgICAgICAgICAgICAgIG9yIHRoZSBjdXN0b20gdGltZXpvbmUg
SUQgaW4gbm9ybWFsaXplZCBmb3JtYXQuCisgKiBAcGFyYW0gcmVzdWx0Q2FwYWNpdHkgICAgVGhl
IGNhcGFjaXR5IG9mIHRoZSByZXN1bHQgYnVmZmVyLgorICogQHBhcmFtIGlzU3lzdGVtSUQgICAg
ICAgIFJlY2VpdmVzIGlmIHRoZSBnaXZlbiBJRCBpcyBhIGtub3duIHN5c3RlbQorICAgICAqICAg
ICAgICAgICAgICAgICAgICAgIHRpbWV6b25lIElELgorICogQHBhcmFtIHN0YXR1cyAgICBSZWNl
dmllcyB0aGUgc3RhdHVzLiAgV2hlbiB0aGUgZ2l2ZW4gdGltZXpvbmUgSUQKKyAqICAgICAgICAg
ICAgICAgICAgaXMgbmVpdGhlciBhIGtub3duIHN5c3RlbSB0aW1lIHpvbmUgSUQgbm9yIGEKKyAq
ICAgICAgICAgICAgICAgICAgdmFsaWQgY3VzdG9tIHRpbWV6b25lIElELCBVX0lMTEVHQUxfQVJH
VU1FTlRfRVJST1IKKyAqICAgICAgICAgICAgICAgICAgaXMgc2V0LgorICogQHJldHVybiAgICAg
ICAgICBUaGUgcmVzdWx0IHN0cmluZyBsZW5ndGgsIG5vdCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0
aW5nCisgKiAgICAgICAgICAgICAgICAgIG51bGwuCisgKiBAc3RhYmxlIElDVSA0LjAKKyAqLwor
VV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKK3VjYWxfZ2V0Q2Fub25pY2FsVGltZVpvbmVJRChj
b25zdCBVQ2hhciogaWQsIGludDMyX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVDaGFyKiByZXN1bHQsIGludDMyX3QgcmVzdWx0Q2FwYWNpdHksIFVCb29sICppc1N5c3RlbUlE
LCBVRXJyb3JDb2RlKiBzdGF0dXMpOworLyoqCisgKiBHZXQgdGhlIHJlc291cmNlIGtleXdvcmQg
dmFsdWUgc3RyaW5nIGRlc2lnbmF0aW5nIHRoZSBjYWxlbmRhciB0eXBlIGZvciB0aGUgVUNhbGVu
ZGFyLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIHN0
YXR1cyBUaGUgZXJyb3IgY29kZSBmb3IgdGhlIG9wZXJhdGlvbi4KKyAqIEByZXR1cm4gVGhlIHJl
c291cmNlIGtleXdvcmQgdmFsdWUgc3RyaW5nLgorICogQHN0YWJsZSBJQ1UgNC4yCisgKi8KK1Vf
U1RBQkxFIGNvbnN0IGNoYXIgKiBVX0VYUE9SVDIKK3VjYWxfZ2V0VHlwZShjb25zdCBVQ2FsZW5k
YXIgKmNhbCwgVUVycm9yQ29kZSogc3RhdHVzKTsKKworLyoqCisgKiBHaXZlbiBhIGtleSBhbmQg
YSBsb2NhbGUsIHJldHVybnMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcyBpbiBhIHByZWZlcnJl
ZAorICogb3JkZXIgdGhhdCB3b3VsZCBtYWtlIGEgZGlmZmVyZW5jZS4gVGhlc2UgYXJlIGFsbCBh
bmQgb25seSB0aG9zZSB2YWx1ZXMgd2hlcmUKKyAqIHRoZSBvcGVuIChjcmVhdGlvbikgb2YgdGhl
IHNlcnZpY2Ugd2l0aCB0aGUgbG9jYWxlIGZvcm1lZCBmcm9tIHRoZSBpbnB1dCBsb2NhbGUKKyAq
IHBsdXMgaW5wdXQga2V5d29yZCBhbmQgdGhhdCB2YWx1ZSBoYXMgZGlmZmVyZW50IGJlaGF2aW9y
IHRoYW4gY3JlYXRpb24gd2l0aCB0aGUKKyAqIGlucHV0IGxvY2FsZSBhbG9uZS4KKyAqIEBwYXJh
bSBrZXkgICAgICAgICAgIG9uZSBvZiB0aGUga2V5cyBzdXBwb3J0ZWQgYnkgdGhpcyBzZXJ2aWNl
LiAgRm9yIG5vdywgb25seQorICogICAgICAgICAgICAgICAgICAgICAgImNhbGVuZGFyIiBpcyBz
dXBwb3J0ZWQuCisgKiBAcGFyYW0gbG9jYWxlICAgICAgICB0aGUgbG9jYWxlCisgKiBAcGFyYW0g
Y29tbW9ubHlVc2VkICBpZiBzZXQgdG8gdHJ1ZSBpdCB3aWxsIHJldHVybiBvbmx5IGNvbW1vbmx5
IHVzZWQgdmFsdWVzCisgKiAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBnaXZlbiBsb2Nh
bGUgaW4gcHJlZmVycmVkIG9yZGVyLiAgT3RoZXJ3aXNlLAorICogICAgICAgICAgICAgICAgICAg
ICAgaXQgd2lsbCByZXR1cm4gYWxsIHRoZSBhdmFpbGFibGUgdmFsdWVzIGZvciB0aGUgbG9jYWxl
LgorICogQHBhcmFtIHN0YXR1cyBlcnJvciBzdGF0dXMKKyAqIEByZXR1cm4gYSBzdHJpbmcgZW51
bWVyYXRpb24gb3ZlciBrZXl3b3JkIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGtleSBhbmQgdGhlIGxv
Y2FsZS4KKyAqIEBzdGFibGUgSUNVIDQuMgorICovCitVX1NUQUJMRSBVRW51bWVyYXRpb24qIFVf
RVhQT1JUMgordWNhbF9nZXRLZXl3b3JkVmFsdWVzRm9yTG9jYWxlKGNvbnN0IGNoYXIqIGtleSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBsb2NhbGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVUJvb2wgY29tbW9ubHlVc2VkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUqIHN0YXR1cyk7CisKKworLyoqIFdlZWtk
YXkgdHlwZXMsIGFzIHJldHVybmVkIGJ5IHVjYWxfZ2V0RGF5T2ZXZWVrVHlwZSgpLgorICogQHN0
YWJsZSBJQ1UgNC40CisgKi8KK2VudW0gVUNhbGVuZGFyV2Vla2RheVR5cGUgeworICAvKioKKyAg
ICogRGVzaWduYXRlcyBhIGZ1bGwgd2Vla2RheSAobm8gcGFydCBvZiB0aGUgZGF5IGlzIGluY2x1
ZGVkIGluIHRoZSB3ZWVrZW5kKS4KKyAgICogQHN0YWJsZSBJQ1UgNC40IAorICAgKi8KKyAgVUNB
TF9XRUVLREFZLAorICAvKioKKyAgICogRGVzaWduYXRlcyBhIGZ1bGwgd2Vla2VuZCBkYXkgKHRo
ZSBlbnRpcmUgZGF5IGlzIGluY2x1ZGVkIGluIHRoZSB3ZWVrZW5kKS4KKyAgICogQHN0YWJsZSBJ
Q1UgNC40IAorICAgKi8KKyAgVUNBTF9XRUVLRU5ELAorICAvKioKKyAgICogRGVzaWduYXRlcyBh
IGRheSB0aGF0IHN0YXJ0cyBhcyBhIHdlZWtkYXkgYW5kIHRyYW5zaXRpb25zIHRvIHRoZSB3ZWVr
ZW5kLgorICAgKiBDYWxsIHVjYWxfZ2V0V2Vla2VuZFRyYW5zaXRpb24oKSB0byBnZXQgdGhlIHRp
bWUgb2YgdHJhbnNpdGlvbi4KKyAgICogQHN0YWJsZSBJQ1UgNC40IAorICAgKi8KKyAgVUNBTF9X
RUVLRU5EX09OU0VULAorICAvKioKKyAgICogRGVzaWduYXRlcyBhIGRheSB0aGF0IHN0YXJ0cyBh
cyB0aGUgd2Vla2VuZCBhbmQgdHJhbnNpdGlvbnMgdG8gYSB3ZWVrZGF5LgorICAgKiBDYWxsIHVj
YWxfZ2V0V2Vla2VuZFRyYW5zaXRpb24oKSB0byBnZXQgdGhlIHRpbWUgb2YgdHJhbnNpdGlvbi4K
KyAgICogQHN0YWJsZSBJQ1UgNC40IAorICAgKi8KKyAgVUNBTF9XRUVLRU5EX0NFQVNFCit9Owor
CisvKiogQHN0YWJsZSBJQ1UgNC40ICovCit0eXBlZGVmIGVudW0gVUNhbGVuZGFyV2Vla2RheVR5
cGUgVUNhbGVuZGFyV2Vla2RheVR5cGU7CisKKy8qKgorICogUmV0dXJucyB3aGV0aGVyIHRoZSBn
aXZlbiBkYXkgb2YgdGhlIHdlZWsgaXMgYSB3ZWVrZGF5LCBhCisgKiB3ZWVrZW5kIGRheSwgb3Ig
YSBkYXkgdGhhdCB0cmFuc2l0aW9ucyBmcm9tIG9uZSB0byB0aGUgb3RoZXIsCisgKiBpbiB0aGlz
IGNhbGVuZGFyIHN5c3RlbS4gSWYgYSB0cmFuc2l0aW9uIG9jY3VycyBhdCBtaWRuaWdodCwKKyAq
IHRoZW4gdGhlIGRheXMgYmVmb3JlIGFuZCBhZnRlciB0aGUgdHJhbnNpdGlvbiB3aWxsIGhhdmUg
dGhlCisgKiB0eXBlIFVDQUxfV0VFS0RBWSBvciBVQ0FMX1dFRUtFTkQuIElmIGEgdHJhbnNpdGlv
biBvY2N1cnMgYXQgYSB0aW1lCisgKiBvdGhlciB0aGFuIG1pZG5pZ2h0LCB0aGVuIHRoZSBkYXkg
b2YgdGhlIHRyYW5zaXRpb24gd2lsbCBoYXZlCisgKiB0aGUgdHlwZSBVQ0FMX1dFRUtFTkRfT05T
RVQgb3IgVUNBTF9XRUVLRU5EX0NFQVNFLiBJbiB0aGlzIGNhc2UsIHRoZQorICogbWV0aG9kIGdl
dFdlZWtlbmRUcmFuc2l0aW9uKCkgd2lsbCByZXR1cm4gdGhlIHBvaW50IG9mCisgKiB0cmFuc2l0
aW9uLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIGRh
eU9mV2VlayBUaGUgZGF5IG9mIHRoZSB3ZWVrIHdob3NlIHR5cGUgaXMgZGVzaXJlZCAoVUNBTF9T
VU5EQVkuLlVDQUxfU0FUVVJEQVkpLgorICogQHBhcmFtIHN0YXR1cyBUaGUgZXJyb3IgY29kZSBm
b3IgdGhlIG9wZXJhdGlvbi4KKyAqIEByZXR1cm4gVGhlIFVDYWxlbmRhcldlZWtkYXlUeXBlIGZv
ciB0aGUgZGF5IG9mIHRoZSB3ZWVrLgorICogQHN0YWJsZSBJQ1UgNC40CisgKi8KK1VfU1RBQkxF
IFVDYWxlbmRhcldlZWtkYXlUeXBlIFVfRVhQT1JUMgordWNhbF9nZXREYXlPZldlZWtUeXBlKGNv
bnN0IFVDYWxlbmRhciAqY2FsLCBVQ2FsZW5kYXJEYXlzT2ZXZWVrIGRheU9mV2VlaywgVUVycm9y
Q29kZSogc3RhdHVzKTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSB0aW1lIGR1cmluZyB0aGUgZGF5
IGF0IHdoaWNoIHRoZSB3ZWVrZW5kIGJlZ2lucyBvciBlbmRzIGluCisgKiB0aGlzIGNhbGVuZGFy
IHN5c3RlbS4gIElmIHVjYWxfZ2V0RGF5T2ZXZWVrVHlwZSgpIHJlcnR1cm5zIFVDQUxfV0VFS0VO
RF9PTlNFVAorICogZm9yIHRoZSBzcGVjaWZpZWQgZGF5T2ZXZWVrLCByZXR1cm4gdGhlIHRpbWUg
YXQgd2hpY2ggdGhlIHdlZWtlbmQgYmVnaW5zLgorICogSWYgdWNhbF9nZXREYXlPZldlZWtUeXBl
KCkgcmV0dXJucyBVQ0FMX1dFRUtFTkRfQ0VBU0UgZm9yIHRoZSBzcGVjaWZpZWQgZGF5T2ZXZWVr
LAorICogcmV0dXJuIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSB3ZWVrZW5kIGVuZHMuIElmIHVjYWxf
Z2V0RGF5T2ZXZWVrVHlwZSgpIHJldHVybnMKKyAqIHNvbWUgb3RoZXIgVUNhbGVuZGFyV2Vla2Rh
eVR5cGUgZm9yIHRoZSBzcGVjaWZpZWQgZGF5T2ZXZWVrLCBpcyBpdCBhbiBlcnJvciBjb25kaXRp
b24KKyAqIChVX0lMTEVHQUxfQVJHVU1FTlRfRVJST1IpLgorICogQHBhcmFtIGNhbCBUaGUgVUNh
bGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIGRheU9mV2VlayBUaGUgZGF5IG9mIHRoZSB3ZWVr
IGZvciB3aGljaCB0aGUgd2Vla2VuZCB0cmFuc2l0aW9uIHRpbWUgaXMKKyAqIGRlc2lyZWQgKFVD
QUxfU1VOREFZLi5VQ0FMX1NBVFVSREFZKS4KKyAqIEBwYXJhbSBzdGF0dXMgVGhlIGVycm9yIGNv
ZGUgZm9yIHRoZSBvcGVyYXRpb24uCisgKiBAcmV0dXJuIFRoZSBtaWxsaXNlY29uZHMgYWZ0ZXIg
bWlkbmlnaHQgYXQgd2hpY2ggdGhlIHdlZWtlbmQgYmVnaW5zIG9yIGVuZHMuCisgKiBAc3RhYmxl
IElDVSA0LjQKKyAqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKK3VjYWxfZ2V0V2Vla2Vu
ZFRyYW5zaXRpb24oY29uc3QgVUNhbGVuZGFyICpjYWwsIFVDYWxlbmRhckRheXNPZldlZWsgZGF5
T2ZXZWVrLCBVRXJyb3JDb2RlICpzdGF0dXMpOworCisvKioKKyAqIFJldHVybnMgVFJVRSBpZiB0
aGUgZ2l2ZW4gVURhdGUgaXMgaW4gdGhlIHdlZWtlbmQgaW4KKyAqIHRoaXMgY2FsZW5kYXIgc3lz
dGVtLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIGRh
dGUgVGhlIFVEYXRlIGluIHF1ZXN0aW9uLgorICogQHBhcmFtIHN0YXR1cyBUaGUgZXJyb3IgY29k
ZSBmb3IgdGhlIG9wZXJhdGlvbi4KKyAqIEByZXR1cm4gVFJVRSBpZiB0aGUgZ2l2ZW4gVURhdGUg
aXMgaW4gdGhlIHdlZWtlbmQgaW4KKyAqIHRoaXMgY2FsZW5kYXIgc3lzdGVtLCBGQUxTRSBvdGhl
cndpc2UuCisgKiBAc3RhYmxlIElDVSA0LjQKKyAqLworVV9TVEFCTEUgVUJvb2wgVV9FWFBPUlQy
Cit1Y2FsX2lzV2Vla2VuZChjb25zdCBVQ2FsZW5kYXIgKmNhbCwgVURhdGUgZGF0ZSwgVUVycm9y
Q29kZSAqc3RhdHVzKTsKKworCisjZW5kaWYgLyogI2lmICFVQ09ORklHX05PX0ZPUk1BVFRJTkcg
Ki8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNv
ZGUvdWRhdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3VkYXQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kNDgwYzdkYTUxNDc1YjM5M2NlMGQzYzliNzIyY2M2ZGM0ZDNkMGJiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3VkYXQuaApAQCAt
MCwwICsxLDk5NyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQg
KEMpIDE5OTYtMjAxMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworICogQ29ycG9y
YXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqCisqLworCisjaWZuZGVmIFVEQVRfSAorI2RlZmluZSBVREFUX0gKKworI2luY2x1ZGUg
InVuaWNvZGUvdXR5cGVzLmgiCisKKyNpZiAhVUNPTkZJR19OT19GT1JNQVRUSU5HCisKKyNpbmNs
dWRlICJ1bmljb2RlL2xvY2FscG9pbnRlci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWNhbC5oIgor
I2luY2x1ZGUgInVuaWNvZGUvdW51bS5oIgorLyoqCisgKiBcZmlsZQorICogXGJyaWVmIEMgQVBJ
OiBEYXRlRm9ybWF0CisgKgorICogPGgyPiBEYXRlIEZvcm1hdCBDIEFQSTwvaDI+CisgKgorICog
RGF0ZSBGb3JtYXQgQyBBUEkgIGNvbnNpc3RzIG9mIGZ1bmN0aW9ucyB0aGF0IGNvbnZlcnQgZGF0
ZXMgYW5kCisgKiB0aW1lcyBmcm9tIHRoZWlyIGludGVybmFsIHJlcHJlc2VudGF0aW9ucyB0byB0
ZXh0dWFsIGZvcm0gYW5kIGJhY2sgYWdhaW4gaW4gYQorICogbGFuZ3VhZ2UtaW5kZXBlbmRlbnQg
bWFubmVyLiBDb252ZXJ0aW5nIGZyb20gdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIChtaWxs
aXNlY29uZHMKKyAqIHNpbmNlIG1pZG5pZ2h0LCBKYW51YXJ5IDEsIDE5NzApIHRvIHRleHQgaXMg
a25vd24gYXMgImZvcm1hdHRpbmcsIiBhbmQgY29udmVydGluZworICogZnJvbSB0ZXh0IHRvIG1p
bGxpcyBpcyBrbm93biBhcyAicGFyc2luZy4iICBXZSBjdXJyZW50bHkgZGVmaW5lIG9ubHkgb25l
IGNvbmNyZXRlCisgKiBzdHJ1Y3R1cmUgVURhdGVGb3JtYXQsIHdoaWNoIGNhbiBoYW5kbGUgcHJl
dHR5IG11Y2ggYWxsIG5vcm1hbAorICogZGF0ZSBmb3JtYXR0aW5nIGFuZCBwYXJzaW5nIGFjdGlv
bnMuCisgKiA8UD4KKyAqIERhdGUgRm9ybWF0IGhlbHBzIHlvdSB0byBmb3JtYXQgYW5kIHBhcnNl
IGRhdGVzIGZvciBhbnkgbG9jYWxlLiBZb3VyIGNvZGUgY2FuCisgKiBiZSBjb21wbGV0ZWx5IGlu
ZGVwZW5kZW50IG9mIHRoZSBsb2NhbGUgY29udmVudGlvbnMgZm9yIG1vbnRocywgZGF5cyBvZiB0
aGUKKyAqIHdlZWssIG9yIGV2ZW4gdGhlIGNhbGVuZGFyIGZvcm1hdDogbHVuYXIgdnMuIHNvbGFy
LgorICogPFA+CisgKiBUbyBmb3JtYXQgYSBkYXRlIGZvciB0aGUgY3VycmVudCBMb2NhbGUgd2l0
aCBkZWZhdWx0IHRpbWUgYW5kIGRhdGUgc3R5bGUsCisgKiB1c2Ugb25lIG9mIHRoZSBzdGF0aWMg
ZmFjdG9yeSBtZXRob2RzOgorICogPHByZT4KKyAqIFxjb2RlCisgKiAgVUVycm9yQ29kZSBzdGF0
dXMgPSBVX1pFUk9fRVJST1I7CisgKiAgVUNoYXIgKm15U3RyaW5nOworICogIGludDMyX3QgbXlT
dHJsZW4gPSAwOworICogIFVEYXRlRm9ybWF0KiBkZm10ID0gdWRhdF9vcGVuKFVEQVRfREVGQVVM
VCwgVURBVF9ERUZBVUxULCBOVUxMLCBOVUxMLCAtMSwgTlVMTCwgLTEsICZzdGF0dXMpOworICog
IG15U3RybGVuID0gdWRhdF9mb3JtYXQoZGZtdCwgbXlEYXRlLCBOVUxMLCBteVN0cmxlbiwgTlVM
TCwgJnN0YXR1cyk7CisgKiAgaWYgKHN0YXR1cz09VV9CVUZGRVJfT1ZFUkZMT1dfRVJST1Ipewor
ICogICAgICBzdGF0dXM9VV9aRVJPX0VSUk9SOworICogICAgICBteVN0cmluZz0oVUNoYXIqKW1h
bGxvYyhzaXplb2YoVUNoYXIpICogKG15U3RybGVuKzEpICk7CisgKiAgICAgIHVkYXRfZm9ybWF0
KGRmbXQsIG15RGF0ZSwgbXlTdHJpbmcsIG15U3RybGVuKzEsIE5VTEwsICZzdGF0dXMpOworICog
IH0KKyAqIFxlbmRjb2RlCisgKiA8L3ByZT4KKyAqIElmIHlvdSBhcmUgZm9ybWF0dGluZyBtdWx0
aXBsZSBudW1iZXJzLCBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBnZXQgdGhlCisgKiBmb3JtYXQg
YW5kIHVzZSBpdCBtdWx0aXBsZSB0aW1lcyBzbyB0aGF0IHRoZSBzeXN0ZW0gZG9lc24ndCBoYXZl
IHRvIGZldGNoIHRoZQorICogaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxvY2FsIGxhbmd1YWdlIGFu
ZCBjb3VudHJ5IGNvbnZlbnRpb25zIG11bHRpcGxlIHRpbWVzLgorICogPHByZT4KKyAqIFxjb2Rl
CisgKiAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgKiAgaW50MzJfdCBpLCBt
eVN0cmxlbiA9IDA7CisgKiAgVUNoYXIqIG15U3RyaW5nOworICogIGNoYXIgYnVmZmVyWzEwMjRd
OworICogIFVEYXRlIG15RGF0ZUFycltdID0geyAwLjAsIDEwMDAwMDAwMC4wLCAyMDAwMDAwMDAw
LjAgfTsgLy8gdGVzdCB2YWx1ZXMKKyAqICBVRGF0ZUZvcm1hdCogZGYgPSB1ZGF0X29wZW4oVURB
VF9ERUZBVUxULCBVREFUX0RFRkFVTFQsIE5VTEwsIE5VTEwsIC0xLCBOVUxMLCAwLCAmc3RhdHVz
KTsKKyAqICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgKiAgICAgIG15U3RybGVuID0gdWRh
dF9mb3JtYXQoZGYsIG15RGF0ZUFycltpXSwgTlVMTCwgbXlTdHJsZW4sIE5VTEwsICZzdGF0dXMp
OworICogICAgICBpZihzdGF0dXMgPT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpeworICogICAg
ICAgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICogICAgICAgICAgbXlTdHJpbmcgPSAoVUNo
YXIqKW1hbGxvYyhzaXplb2YoVUNoYXIpICogKG15U3RybGVuKzEpICk7CisgKiAgICAgICAgICB1
ZGF0X2Zvcm1hdChkZiwgbXlEYXRlQXJyW2ldLCBteVN0cmluZywgbXlTdHJsZW4rMSwgTlVMTCwg
JnN0YXR1cyk7CisgKiAgICAgICAgICBwcmludGYoIiVzXG4iLCB1X2F1c3RyY3B5KGJ1ZmZlciwg
bXlTdHJpbmcpICk7CisgKiAgICAgICAgICBmcmVlKG15U3RyaW5nKTsKKyAqICAgICAgfQorICog
IH0KKyAqIFxlbmRjb2RlCisgKiA8L3ByZT4KKyAqIFRvIGdldCBzcGVjaWZpYyBmaWVsZHMgb2Yg
YSBkYXRlLCB5b3UgY2FuIHVzZSBVRmllbGRQb3NpdGlvbiB0bworICogZ2V0IHNwZWNpZmljIGZp
ZWxkcy4KKyAqIDxwcmU+CisgKiBcY29kZQorICogIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJP
X0VSUk9SOworICogIFVGaWVsZFBvc2l0aW9uIHBvczsKKyAqICBVQ2hhciAqbXlTdHJpbmc7Cisg
KiAgaW50MzJfdCBteVN0cmxlbiA9IDA7CisgKiAgY2hhciBidWZmZXJbMTAyNF07CisgKgorICog
IHBvcy5maWVsZCA9IDE7ICAvLyBTYW1lIGFzIHRoZSBEYXRlRm9ybWF0OjpFRmllbGQgZW51bQor
ICogIFVEYXRlRm9ybWF0KiBkZm10ID0gdWRhdF9vcGVuKFVEQVRfREVGQVVMVCwgVURBVF9ERUZB
VUxULCBOVUxMLCAtMSwgTlVMTCwgMCwgJnN0YXR1cyk7CisgKiAgbXlTdHJsZW4gPSB1ZGF0X2Zv
cm1hdChkZm10LCBteURhdGUsIE5VTEwsIG15U3RybGVuLCAmcG9zLCAmc3RhdHVzKTsKKyAqICBp
ZiAoc3RhdHVzPT1VX0JVRkZFUl9PVkVSRkxPV19FUlJPUil7CisgKiAgICAgIHN0YXR1cz1VX1pF
Uk9fRVJST1I7CisgKiAgICAgIG15U3RyaW5nPShVQ2hhciopbWFsbG9jKHNpemVvZihVQ2hhcikg
KiAobXlTdHJsZW4rMSkgKTsKKyAqICAgICAgdWRhdF9mb3JtYXQoZGZtdCwgbXlEYXRlLCBteVN0
cmluZywgbXlTdHJsZW4rMSwgJnBvcywgJnN0YXR1cyk7CisgKiAgfQorICogIHByaW50ZigiZGF0
ZSBmb3JtYXQ6ICVzXG4iLCB1X2F1c3RyY3B5KGJ1ZmZlciwgbXlTdHJpbmcpKTsKKyAqICBidWZm
ZXJbcG9zLmVuZEluZGV4XSA9IDA7ICAgLy8gTlVMTCB0ZXJtaW5hdGUgdGhlIHN0cmluZy4KKyAq
ICBwcmludGYoIlVGaWVsZFBvc2l0aW9uIHBvc2l0aW9uIGVxdWFscyAlc1xuIiwgJmJ1ZmZlcltw
b3MuYmVnaW5JbmRleF0pOworICogXGVuZGNvZGUKKyAqIDwvcHJlPgorICogVG8gZm9ybWF0IGEg
ZGF0ZSBmb3IgYSBkaWZmZXJlbnQgTG9jYWxlLCBzcGVjaWZ5IGl0IGluIHRoZSBjYWxsIHRvCisg
KiB1ZGF0X29wZW4oKQorICogPHByZT4KKyAqIFxjb2RlCisgKiAgICAgICAgVURhdGVGb3JtYXQq
IGRmID0gdWRhdF9vcGVuKFVEQVRfU0hPUlQsIFVEQVRfU0hPUlQsICJmcl9GUiIsIE5VTEwsIC0x
LCBOVUxMLCAwLCAmc3RhdHVzKTsKKyAqIFxlbmRjb2RlCisgKiA8L3ByZT4KKyAqIFlvdSBjYW4g
dXNlIGEgRGF0ZUZvcm1hdCBBUEkgdWRhdF9wYXJzZSgpIHRvIHBhcnNlLgorICogPHByZT4KKyAq
IFxjb2RlCisgKiAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgKiAgaW50MzJf
dCBwYXJzZXBvcz0wOworICogIFVEYXRlIG15RGF0ZSA9IHVkYXRfcGFyc2UoZGYsIG15U3RyaW5n
LCB1X3N0cmxlbihteVN0cmluZyksICZwYXJzZXBvcywgJnN0YXR1cyk7CisgKiBcZW5kY29kZQor
ICogPC9wcmU+CisgKiAgWW91IGNhbiBwYXNzIGluIGRpZmZlcmVudCBvcHRpb25zIGZvciB0aGUg
YXJndW1lbnRzIGZvciBkYXRlIGFuZCB0aW1lIHN0eWxlCisgKiAgdG8gY29udHJvbCB0aGUgbGVu
Z3RoIG9mIHRoZSByZXN1bHQ7IGZyb20gU0hPUlQgdG8gTUVESVVNIHRvIExPTkcgdG8gRlVMTC4K
KyAqICBUaGUgZXhhY3QgcmVzdWx0IGRlcGVuZHMgb24gdGhlIGxvY2FsZSwgYnV0IGdlbmVyYWxs
eToKKyAqICBzZWUgVURhdGVGb3JtYXRTdHlsZSBmb3IgbW9yZSBkZXRhaWxzCisgKiA8dWwgdHlw
ZT1yb3VuZD4KKyAqICAgPGxpPiAgIFVEQVRfU0hPUlQgaXMgY29tcGxldGVseSBudW1lcmljLCBz
dWNoIGFzIDEyLzEzLzUyIG9yIDM6MzBwbQorICogICA8bGk+ICAgVURBVF9NRURJVU0gaXMgbG9u
Z2VyLCBzdWNoIGFzIEphbiAxMiwgMTk1MgorICogICA8bGk+ICAgVURBVF9MT05HIGlzIGxvbmdl
ciwgc3VjaCBhcyBKYW51YXJ5IDEyLCAxOTUyIG9yIDM6MzA6MzJwbQorICogICA8bGk+ICAgVURB
VF9GVUxMIGlzIHByZXR0eSBjb21wbGV0ZWx5IHNwZWNpZmllZCwgc3VjaCBhcworICogICAgICAg
ICAgVHVlc2RheSwgQXByaWwgMTIsIDE5NTIgQUQgb3IgMzozMDo0MnBtIFBTVC4KKyAqIDwvdWw+
CisgKiBZb3UgY2FuIGFsc28gc2V0IHRoZSB0aW1lIHpvbmUgb24gdGhlIGZvcm1hdCBpZiB5b3Ug
d2lzaC4KKyAqIDxQPgorICogWW91IGNhbiBhbHNvIHVzZSBmb3JtcyBvZiB0aGUgcGFyc2UgYW5k
IGZvcm1hdCBtZXRob2RzIHdpdGggUGFyc2UgUG9zaXRpb24gYW5kCisgKiBVRmllbGRQb3NpdGlv
biB0byBhbGxvdyB5b3UgdG8KKyAqIDx1bCB0eXBlPXJvdW5kPgorICogICA8bGk+ICAgUHJvZ3Jl
c3NpdmVseSBwYXJzZSB0aHJvdWdoIHBpZWNlcyBvZiBhIHN0cmluZy4KKyAqICAgPGxpPiAgIEFs
aWduIGFueSBwYXJ0aWN1bGFyIGZpZWxkLCBvciBmaW5kIG91dCB3aGVyZSBpdCBpcyBmb3Igc2Vs
ZWN0aW9uCisgKiAgICAgICAgICBvbiB0aGUgc2NyZWVuLgorICogPC91bD4KKyAqLworCisvKiog
QSBkYXRlIGZvcm1hdHRlci4KKyAqICBGb3IgdXNhZ2UgaW4gQyBwcm9ncmFtcy4KKyAqICBAc3Rh
YmxlIElDVSAyLjYKKyAqLwordHlwZWRlZiB2b2lkKiBVRGF0ZUZvcm1hdDsKKworLyoqIFRoZSBw
b3NzaWJsZSBkYXRlL3RpbWUgZm9ybWF0IHN0eWxlcyAKKyAqICBAc3RhYmxlIElDVSAyLjYKKyAq
LwordHlwZWRlZiBlbnVtIFVEYXRlRm9ybWF0U3R5bGUgeworICAgIC8qKiBGdWxsIHN0eWxlICov
CisgICAgVURBVF9GVUxMLAorICAgIC8qKiBMb25nIHN0eWxlICovCisgICAgVURBVF9MT05HLAor
ICAgIC8qKiBNZWRpdW0gc3R5bGUgKi8KKyAgICBVREFUX01FRElVTSwKKyAgICAvKiogU2hvcnQg
c3R5bGUgKi8KKyAgICBVREFUX1NIT1JULAorICAgIC8qKiBEZWZhdWx0IHN0eWxlICovCisgICAg
VURBVF9ERUZBVUxUID0gVURBVF9NRURJVU0sCisKKyAgICAvKiogQml0ZmllbGQgZm9yIHJlbGF0
aXZlIGRhdGUgKi8KKyAgICBVREFUX1JFTEFUSVZFID0gKDEgPDwgNyksCisgICAgCisgICAgVURB
VF9GVUxMX1JFTEFUSVZFID0gVURBVF9GVUxMIHwgVURBVF9SRUxBVElWRSwKKyAgICAgICAgCisg
ICAgVURBVF9MT05HX1JFTEFUSVZFID0gVURBVF9MT05HIHwgVURBVF9SRUxBVElWRSwKKyAgICAK
KyAgICBVREFUX01FRElVTV9SRUxBVElWRSA9IFVEQVRfTUVESVVNIHwgVURBVF9SRUxBVElWRSwK
KyAgICAKKyAgICBVREFUX1NIT1JUX1JFTEFUSVZFID0gVURBVF9TSE9SVCB8IFVEQVRfUkVMQVRJ
VkUsCisgICAgCisgICAgCisgICAgLyoqIE5vIHN0eWxlICovCisgICAgVURBVF9OT05FID0gLTEs
CisgICAgLyoqIGZvciBpbnRlcm5hbCBBUEkgdXNlIG9ubHkgKi8KKyAgICBVREFUX0lHTk9SRSA9
IC0yCisKK30gVURhdGVGb3JtYXRTdHlsZTsKKworCisvKioKKyAqIEB7CisgKiBCZWxvdyBhcmUg
YSBzZXQgb2YgcHJlLWRlZmluZWQgc2tlbGV0b25zLgorICoKKyAqIDxQPgorICogQSBza2VsZXRv
biAKKyAqIDxvbD4KKyAqIDxsaT4KKyAqICAgIG9ubHkga2VlcHMgdGhlIGZpZWxkIHBhdHRlcm4g
bGV0dGVyIGFuZCBpZ25vcmVzIGFsbCBvdGhlciBwYXJ0cyAKKyAqICAgIGluIGEgcGF0dGVybiwg
c3VjaCBhcyBzcGFjZSwgcHVuY3R1YXRpb25zLCBhbmQgc3RyaW5nIGxpdGVyYWxzLgorICogPC9s
aT4KKyAqIDxsaT4KKyAqICAgIGhpZGVzIHRoZSBvcmRlciBvZiBmaWVsZHMuIAorICogPC9saT4K
KyAqIDxsaT4KKyAqICAgIG1pZ2h0IGhpZGUgYSBmaWVsZCdzIHBhdHRlcm4gbGV0dGVyIGxlbmd0
aC4KKyAqCisgKiAgICBGb3IgdGhvc2Ugbm9uLWRpZ2l0IGNhbGVuZGFyIGZpZWxkcywgdGhlIHBh
dHRlcm4gbGV0dGVyIGxlbmd0aCBpcyAKKyAqICAgIGltcG9ydGFudCwgc3VjaCBhcyBNTU0sIE1N
TU0sIGFuZCBNTU1NTTsgRUVFIGFuZCBFRUVFLCAKKyAqICAgIGFuZCB0aGUgZmllbGQncyBwYXR0
ZXJuIGxldHRlciBsZW5ndGggaXMgaG9ub3JlZC4KKyAqICAgIAorICogICAgRm9yIHRoZSBkaWdp
dCBjYWxlbmRhciBmaWVsZHMsICBzdWNoIGFzIE0gb3IgTU0sIGQgb3IgZGQsIHl5IG9yIHl5eXks
IAorICogICAgdGhlIGZpZWxkIHBhdHRlcm4gbGVuZ3RoIGlzIGlnbm9yZWQgYW5kIHRoZSBiZXN0
IG1hdGNoLCB3aGljaCBpcyBkZWZpbmVkIAorICogICAgaW4gZGF0ZSB0aW1lIHBhdHRlcm5zLCB3
aWxsIGJlIHJldHVybmVkIHdpdGhvdXQgaG9ub3IgdGhlIGZpZWxkIHBhdHRlcm4KKyAqICAgIGxl
dHRlciBsZW5ndGggaW4gc2tlbGV0b24uCisgKiA8L2xpPgorICogPC9vbD4KKyAqCisgKiBAc3Rh
YmxlIElDVSA0LjAKKyAqLworCisjZGVmaW5lIFVEQVRfTUlOVVRFX1NFQ09ORCAgICAgICAgICAg
ICAgIm1zIgorI2RlZmluZSBVREFUX0hPVVIyNF9NSU5VVEUgICAgICAgICAgICAgICJIbSIKKyNk
ZWZpbmUgVURBVF9IT1VSMjRfTUlOVVRFX1NFQ09ORCAgICAgICAiSG1zIiAgICAgIAorI2RlZmlu
ZSBVREFUX0hPVVJfTUlOVVRFX1NFQ09ORCAgICAgICAgICJobXMiCisjZGVmaW5lIFVEQVRfU1RB
TkRBTE9ORV9NT05USCAgICAgICAgICAgIkxMTEwiCisjZGVmaW5lIFVEQVRfQUJCUl9TVEFOREFM
T05FX01PTlRIICAgICAgIkxMTCIKKyNkZWZpbmUgVURBVF9ZRUFSX1FVQVJURVIgICAgICAgICAg
ICAgICAieVFRUSIKKyNkZWZpbmUgVURBVF9ZRUFSX0FCQlJfUVVBUlRFUiAgICAgICAgICAieVEi
CisKKy8qKiBAfSAqLworCisvKioKKyAqIEB7CisgKiBCZWxvdyBhcmUgYSBzZXQgb2YgcHJlLWRl
ZmluZWQgc2tlbGV0b25zIHRoYXQgCisgKiBoYXZlIHByZS1kZWZpbmVkIGludGVydmFsIHBhdHRl
cm5zIGluIHJlc291cmNlIGZpbGVzLgorICogVXNlcnMgYXJlIGVuY291cmFnZWQgdG8gdXNlIHRo
ZW0gaW4gZGF0ZSBpbnRlcnZhbCBmb3JtYXQgZmFjdG9yeSBtZXRob2RzLgorICogCisgKiBAc3Rh
YmxlIElDVSA0LjAKKyAqLworI2RlZmluZSBVREFUX0hPVVJfTUlOVVRFICAgICAgICAgICAgICAg
ICJobSIKKyNkZWZpbmUgVURBVF9ZRUFSICAgICAgICAgICAgICAgICAgICAgICAieSIKKyNkZWZp
bmUgVURBVF9EQVkgICAgICAgICAgICAgICAgICAgICAgICAiZCIKKyNkZWZpbmUgVURBVF9OVU1f
TU9OVEhfV0VFS0RBWV9EQVkgICAgICAiTUVkIgorI2RlZmluZSBVREFUX1lFQVJfTlVNX01PTlRI
ICAgICAgICAgICAgICJ5TSIgICAgICAgICAgICAgIAorI2RlZmluZSBVREFUX05VTV9NT05USF9E
QVkgICAgICAgICAgICAgICJNZCIKKyNkZWZpbmUgVURBVF9ZRUFSX05VTV9NT05USF9XRUVLREFZ
X0RBWSAieU1FZCIKKyNkZWZpbmUgVURBVF9BQkJSX01PTlRIX1dFRUtEQVlfREFZICAgICAiTU1N
RWQiCisjZGVmaW5lIFVEQVRfWUVBUl9NT05USCAgICAgICAgICAgICAgICAgInlNTU1NIgorI2Rl
ZmluZSBVREFUX1lFQVJfQUJCUl9NT05USCAgICAgICAgICAgICJ5TU1NIgorI2RlZmluZSBVREFU
X01PTlRIX0RBWSAgICAgICAgICAgICAgICAgICJNTU1NZCIKKyNkZWZpbmUgVURBVF9BQkJSX01P
TlRIX0RBWSAgICAgICAgICAgICAiTU1NZCIgCisjZGVmaW5lIFVEQVRfTU9OVEhfV0VFS0RBWV9E
QVkgICAgICAgICAgIk1NTU1FRUVFZCIKKyNkZWZpbmUgVURBVF9ZRUFSX0FCQlJfTU9OVEhfV0VF
S0RBWV9EQVkgInlNTU1FZCIgCisjZGVmaW5lIFVEQVRfWUVBUl9NT05USF9XRUVLREFZX0RBWSAg
ICAgInlNTU1NRUVFRWQiCisjZGVmaW5lIFVEQVRfWUVBUl9NT05USF9EQVkgICAgICAgICAgICAg
InlNTU1NZCIKKyNkZWZpbmUgVURBVF9ZRUFSX0FCQlJfTU9OVEhfREFZICAgICAgICAieU1NTWQi
CisjZGVmaW5lIFVEQVRfWUVBUl9OVU1fTU9OVEhfREFZICAgICAgICAgInlNZCIKKyNkZWZpbmUg
VURBVF9OVU1fTU9OVEggICAgICAgICAgICAgICAgICAiTSIKKyNkZWZpbmUgVURBVF9BQkJSX01P
TlRIICAgICAgICAgICAgICAgICAiTU1NIgorI2RlZmluZSBVREFUX01PTlRIICAgICAgICAgICAg
ICAgICAgICAgICJNTU1NIgorI2RlZmluZSBVREFUX0hPVVJfTUlOVVRFX0dFTkVSSUNfVFogICAg
ICJobXYiCisjZGVmaW5lIFVEQVRfSE9VUl9NSU5VVEVfVFogICAgICAgICAgICAgImhteiIKKyNk
ZWZpbmUgVURBVF9IT1VSICAgICAgICAgICAgICAgICAgICAgICAiaCIKKyNkZWZpbmUgVURBVF9I
T1VSX0dFTkVSSUNfVFogICAgICAgICAgICAiaHYiCisjZGVmaW5lIFVEQVRfSE9VUl9UWiAgICAg
ICAgICAgICAgICAgICAgImh6IgorCisvKiogQH0gKi8KKworCisvKioKKyAqIEZpZWxkUG9zaXRp
b24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9ycyBmb3IgZm9ybWF0IGZpZWxkcworICogZGVm
aW5lZCBieSBEYXRlRm9ybWF0IGFuZCBVRGF0ZUZvcm1hdC4KKyAqIEBzdGFibGUgSUNVIDMuMAor
ICovCit0eXBlZGVmIGVudW0gVURhdGVGb3JtYXRGaWVsZCB7CisgICAgLyoqCisgICAgICogRmll
bGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdHJyBmaWVsZCBhbGln
bm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9FUkEgZmllbGQuCisgICAg
ICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9FUkFfRklFTEQgPSAwLAorCisg
ICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3Ig
Zm9yICd5JyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNB
TF9ZRUFSIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRf
WUVBUl9GSUVMRCA9IDEsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmll
bGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ00nIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3Jy
ZXNwb25kaW5nIHRvIHRoZSBVQ0FMX01PTlRIIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMu
MAorICAgICAqLworICAgIFVEQVRfTU9OVEhfRklFTEQgPSAyLAorCisgICAgLyoqCisgICAgICog
RmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdkJyBmaWVsZCBh
bGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9EQVRFIGZpZWxkLgor
ICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfREFURV9GSUVMRCA9IDMs
CisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxl
Y3RvciBmb3IgJ2snIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRo
ZSBVQ0FMX0hPVVJfT0ZfREFZIGZpZWxkLgorICAgICAqIFVEQVRfSE9VUl9PRl9EQVkxX0ZJRUxE
IGlzIHVzZWQgZm9yIHRoZSBvbmUtYmFzZWQgMjQtaG91ciBjbG9jay4KKyAgICAgKiBGb3IgZXhh
bXBsZSwgMjM6NTkgKyAwMTowMCByZXN1bHRzIGluIDI0OjU5LgorICAgICAqIEBzdGFibGUgSUNV
IDMuMAorICAgICAqLworICAgIFVEQVRfSE9VUl9PRl9EQVkxX0ZJRUxEID0gNCwKKworICAgIC8q
KgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAn
SCcgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfSE9V
Ul9PRl9EQVkgZmllbGQuCisgICAgICogVURBVF9IT1VSX09GX0RBWTBfRklFTEQgaXMgdXNlZCBm
b3IgdGhlIHplcm8tYmFzZWQgMjQtaG91ciBjbG9jay4KKyAgICAgKiBGb3IgZXhhbXBsZSwgMjM6
NTkgKyAwMTowMCByZXN1bHRzIGluIDAwOjU5LgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAg
ICAqLworICAgIFVEQVRfSE9VUl9PRl9EQVkwX0ZJRUxEID0gNSwKKworICAgIC8qKgorICAgICAq
IEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnbScgZmllbGQg
YWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfTUlOVVRFIGZpZWxk
LgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfTUlOVVRFX0ZJRUxE
ID0gNiwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9u
IHNlbGVjdG9yIGZvciAncycgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcg
dG8gdGhlIFVDQUxfU0VDT05EIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAq
LworICAgIFVEQVRfU0VDT05EX0ZJRUxEID0gNywKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9z
aXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnUycgZmllbGQgYWxpZ25tZW50
LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfTUlMTElTRUNPTkQgZmllbGQuCisg
ICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9GUkFDVElPTkFMX1NFQ09O
RF9GSUVMRCA9IDgsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQ
b3NpdGlvbiBzZWxlY3RvciBmb3IgJ0UnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNw
b25kaW5nIHRvIHRoZSBVQ0FMX0RBWV9PRl9XRUVLIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNV
IDMuMAorICAgICAqLworICAgIFVEQVRfREFZX09GX1dFRUtfRklFTEQgPSA5LAorCisgICAgLyoq
CisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdE
JyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9EQVlf
T0ZfWUVBUiBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFU
X0RBWV9PRl9ZRUFSX0ZJRUxEID0gMTAsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9u
IGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ0YnIGZpZWxkIGFsaWdubWVudCwKKyAg
ICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRIIGZpZWxk
LgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfREFZX09GX1dFRUtf
SU5fTU9OVEhfRklFTEQgPSAxMSwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5k
IFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAndycgZmllbGQgYWxpZ25tZW50LAorICAgICAq
IGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfV0VFS19PRl9ZRUFSIGZpZWxkLgorICAgICAqIEBz
dGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfV0VFS19PRl9ZRUFSX0ZJRUxEID0gMTIs
CisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxl
Y3RvciBmb3IgJ1cnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRo
ZSBVQ0FMX1dFRUtfT0ZfTU9OVEggZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAg
ICovCisgICAgVURBVF9XRUVLX09GX01PTlRIX0ZJRUxEID0gMTMsCisKKyAgICAvKioKKyAgICAg
KiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ2EnIGZpZWxk
IGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0FNX1BNIGZpZWxk
LgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfQU1fUE1fRklFTEQg
PSAxNCwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9u
IHNlbGVjdG9yIGZvciAnaCcgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcg
dG8gdGhlIFVDQUxfSE9VUiBmaWVsZC4KKyAgICAgKiBVREFUX0hPVVIxX0ZJRUxEIGlzIHVzZWQg
Zm9yIHRoZSBvbmUtYmFzZWQgMTItaG91ciBjbG9jay4KKyAgICAgKiBGb3IgZXhhbXBsZSwgMTE6
MzAgUE0gKyAxIGhvdXIgcmVzdWx0cyBpbiAxMjozMCBBTS4KKyAgICAgKiBAc3RhYmxlIElDVSAz
LjAKKyAgICAgKi8KKyAgICBVREFUX0hPVVIxX0ZJRUxEID0gMTUsCisKKyAgICAvKioKKyAgICAg
KiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ0snIGZpZWxk
IGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0hPVVIgZmllbGQu
CisgICAgICogVURBVF9IT1VSMF9GSUVMRCBpcyB1c2VkIGZvciB0aGUgemVyby1iYXNlZCAxMi1o
b3VyIGNsb2NrLgorICAgICAqIEZvciBleGFtcGxlLCAxMTozMCBQTSArIDEgaG91ciByZXN1bHRz
IGluIDAwOjMwIEFNLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRf
SE9VUjBfRklFTEQgPSAxNiwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVG
aWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAneicgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNv
cnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfWk9ORV9PRkZTRVQgYW5kCisgICAgICogVUNBTF9EU1Rf
T0ZGU0VUIGZpZWxkcy4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFU
X1RJTUVaT05FX0ZJRUxEID0gMTcsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFu
ZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ1knIGZpZWxkIGFsaWdubWVudCwKKyAgICAg
KiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX1lFQVJfV09ZIGZpZWxkLgorICAgICAqIEBzdGFi
bGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfWUVBUl9XT1lfRklFTEQgPSAxOCwKKworICAg
IC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZv
ciAnZScgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxf
RE9XX0xPQ0FMIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVE
QVRfRE9XX0xPQ0FMX0ZJRUxEID0gMTksCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9u
IGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ3UnIGZpZWxkIGFsaWdubWVudCwKKyAg
ICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0VYVEVOREVEX1lFQVIgZmllbGQuCisgICAg
ICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9FWFRFTkRFRF9ZRUFSX0ZJRUxE
ID0gMjAsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlv
biBzZWxlY3RvciBmb3IgJ2cnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5n
IHRvIHRoZSBVQ0FMX0pVTElBTl9EQVkgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisg
ICAgICovCisgICAgVURBVF9KVUxJQU5fREFZX0ZJRUxEID0gMjEsCisKKyAgICAvKioKKyAgICAg
KiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ0EnIGZpZWxk
IGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX01JTExJU0VDT05E
U19JTl9EQVkgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURB
VF9NSUxMSVNFQ09ORFNfSU5fREFZX0ZJRUxEID0gMjIsCisKKyAgICAvKioKKyAgICAgKiBGaWVs
ZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ1onIGZpZWxkIGFsaWdu
bWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX1pPTkVfT0ZGU0VUIGFuZAor
ICAgICAqIFVDQUxfRFNUX09GRlNFVCBmaWVsZHMuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisg
ICAgICovCisgICAgVURBVF9USU1FWk9ORV9SRkNfRklFTEQgPSAyMywKKworICAgIC8qKgorICAg
ICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAndicgZmll
bGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfWk9ORV9PRkZT
RVQgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy40CisgICAgICovCisgICAgVURBVF9USU1F
Wk9ORV9HRU5FUklDX0ZJRUxEID0gMjQsCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBz
ZWxlY3RvciBmb3IgJ2MnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRv
IHRoZSB7QGxpbmsgI1VDQUxfRE9XX0xPQ0FMfSBmaWVsZC4KKyAgICAgKiBUaGlzIGRpc3BsYXlz
IHRoZSBzdGFuZCBhbG9uZSBkYXkgbmFtZSwgaWYgYXZhaWxhYmxlLgorICAgICAqIEBzdGFibGUg
SUNVIDMuNAorICAgICAqLworICAgIFVEQVRfU1RBTkRBTE9ORV9EQVlfRklFTEQgPSAyNSwKKwor
ICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdMJyBmaWVsZCBhbGln
bm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUge0BsaW5rICNVQ0FMX01PTlRIfSBm
aWVsZC4KKyAgICAgKiBUaGlzIGRpc3BsYXlzIHRoZSBzdGFuZCBhbG9uZSBtb250aCBuYW1lLCBp
ZiBhdmFpbGFibGUuCisgICAgICogQHN0YWJsZSBJQ1UgMy40CisgICAgICovCisgICAgVURBVF9T
VEFOREFMT05FX01PTlRIX0ZJRUxEID0gMjYsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0
aW9uIHNlbGVjdG9yIGZvciAiUSIgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRp
bmcgdG8gcXVhcnRlcnMuIFRoaXMgaXMgaW1wbGVtZW50ZWQKKyAgICAgKiB1c2luZyB0aGUge0Bs
aW5rICNVQ0FMX01PTlRIfSBmaWVsZC4gVGhpcworICAgICAqIGRpc3BsYXlzIHRoZSBxdWFydGVy
LgorICAgICAqIEBzdGFibGUgSUNVIDMuNgorICAgICAqLworICAgIFVEQVRfUVVBUlRFUl9GSUVM
RCA9IDI3LAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgdGhl
ICJxIiBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byBzdGFuZC1hbG9u
ZSBxdWFydGVycy4gVGhpcyBpcworICAgICAqIGltcGxlbWVudGVkIHVzaW5nIHRoZSB7QGxpbmsg
I1VDQUxfTU9OVEh9IGZpZWxkLgorICAgICAqIFRoaXMgZGlzcGxheXMgdGhlIHN0YW5kLWFsb25l
IHF1YXJ0ZXIuCisgICAgICogQHN0YWJsZSBJQ1UgMy42CisgICAgICovCisgICAgVURBVF9TVEFO
REFMT05FX1FVQVJURVJfRklFTEQgPSAyOCwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRp
b24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnVicgZmllbGQgYWxpZ25tZW50LAor
ICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfWk9ORV9PRkZTRVQgZmllbGQuCisgICAg
ICogQHN0YWJsZSBJQ1UgMy44CisgICAgICovCisgICAgVURBVF9USU1FWk9ORV9TUEVDSUFMX0ZJ
RUxEID0gMjksCisKKyAgIC8qKgorICAgICAqIE51bWJlciBvZiBGaWVsZFBvc2l0aW9uIGFuZCBV
RmllbGRQb3NpdGlvbiBzZWxlY3RvcnMgZm9yCisgICAgICogRGF0ZUZvcm1hdCBhbmQgVURhdGVG
b3JtYXQuCisgICAgICogVmFsaWQgc2VsZWN0b3JzIHJhbmdlIGZyb20gMCB0byBVREFUX0ZJRUxE
X0NPVU5ULTEuCisgICAgICogVGhpcyB2YWx1ZSBpcyBzdWJqZWN0IHRvIGNoYW5nZSBpZiBuZXcg
ZmllbGRzIGFyZSBkZWZpbmVkCisgICAgICogaW4gdGhlIGZ1dHVyZS4KKyAgICAgKiBAc3RhYmxl
IElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFUX0ZJRUxEX0NPVU5UID0gMzAKKworfSBVRGF0ZUZv
cm1hdEZpZWxkOworCisKKy8qKgorICogTWFwcyBmcm9tIGEgVURhdGVGb3JtYXRGaWVsZCB0byB0
aGUgY29ycmVzcG9uZGluZyBVQ2FsZW5kYXJEYXRlRmllbGRzLgorICogTm90ZTogc2luY2UgdGhl
IG1hcHBpbmcgaXMgbWFueS10by1vbmUsIHRoZXJlIGlzIG5vIGludmVyc2UgbWFwcGluZy4KKyAq
IEBwYXJhbSBmaWVsZCB0aGUgVURhdGVGb3JtYXRGaWVsZC4KKyAqIEByZXR1cm4gdGhlIFVDYWxl
bmRhckRhdGVGaWVsZC4gIFRoaXMgd2lsbCBiZSBVQ0FMX0ZJRUxEX0NPVU5UIGluIGNhc2UKKyAq
IG9mIGVycm9yIChlLmcuLCB0aGUgaW5wdXQgZmllbGQgaXMgVURBVF9GSUVMRF9DT1VOVCkuCisg
KiBAc3RhYmxlIElDVSA0LjQKKyAqLworVV9TVEFCTEUgVUNhbGVuZGFyRGF0ZUZpZWxkcyBVX0VY
UE9SVDIKK3VkYXRfdG9DYWxlbmRhckRhdGVGaWVsZChVRGF0ZUZvcm1hdEZpZWxkIGZpZWxkKTsK
KworCisvKioKKyAqIE9wZW4gYSBuZXcgVURhdGVGb3JtYXQgZm9yIGZvcm1hdHRpbmcgYW5kIHBh
cnNpbmcgZGF0ZXMgYW5kIHRpbWVzLgorICogQSBVRGF0ZUZvcm1hdCBtYXkgYmUgdXNlZCB0byBm
b3JtYXQgZGF0ZXMgaW4gY2FsbHMgdG8ge0BsaW5rICN1ZGF0X2Zvcm1hdCB9LAorICogYW5kIHRv
IHBhcnNlIGRhdGVzIGluIGNhbGxzIHRvIHtAbGluayAjdWRhdF9wYXJzZSB9LgorICogQHBhcmFt
IHRpbWVTdHlsZSBUaGUgc3R5bGUgdXNlZCB0byBmb3JtYXQgdGltZXM7IG9uZSBvZiBVREFUX0ZV
TEwsIFVEQVRfTE9ORywKKyAqIFVEQVRfTUVESVVNLCBVREFUX1NIT1JULCBVREFUX0RFRkFVTFQs
IG9yIFVEQVRfTk9ORSAocmVsYXRpdmUgdGltZSBzdHlsZXMKKyAqIGFyZSBub3QgY3VycmVudGx5
IHN1cHBvcnRlZCkKKyAqIEBwYXJhbSBkYXRlU3R5bGUgVGhlIHN0eWxlIHVzZWQgdG8gZm9ybWF0
IGRhdGVzOyBvbmUgb2YgVURBVF9GVUxMLCBVREFUX0xPTkcsCisgKiBVREFUX01FRElVTSwgVURB
VF9TSE9SVCwgVURBVF9ERUZBVUxULCBVREFUX0ZVTExfUkVMQVRJVkUsIFVEQVRfTE9OR19SRUxB
VElWRSwKKyAqIFVEQVRfTUVESVVNX1JFTEFUSVZFLCBVREFUX1NIT1JUX1JFTEFUSVZFLCBvciBV
REFUX05PTkUKKyAqIEBwYXJhbSBsb2NhbGUgVGhlIGxvY2FsZSBzcGVjaWZ5aW5nIHRoZSBmb3Jt
YXR0aW5nIGNvbnZlbnRpb25zCisgKiBAcGFyYW0gdHpJRCBBIHRpbWV6b25lIElEIHNwZWNpZnlp
bmcgdGhlIHRpbWV6b25lIHRvIHVzZS4gIElmIDAsIHVzZQorICogdGhlIGRlZmF1bHQgdGltZXpv
bmUuCisgKiBAcGFyYW0gdHpJRExlbmd0aCBUaGUgbGVuZ3RoIG9mIHR6SUQsIG9yIC0xIGlmIG51
bGwtdGVybWluYXRlZC4KKyAqIEBwYXJhbSBwYXR0ZXJuIEEgcGF0dGVybiBzcGVjaWZ5aW5nIHRo
ZSBmb3JtYXQgdG8gdXNlLgorICogQHBhcmFtIHBhdHRlcm5MZW5ndGggVGhlIG51bWJlciBvZiBj
aGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuLCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisgKiBA
cGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVy
cm9ycworICogQHJldHVybiBBIHBvaW50ZXIgdG8gYSBVRGF0ZUZvcm1hdCB0byB1c2UgZm9yIGZv
cm1hdHRpbmcgZGF0ZXMgYW5kIHRpbWVzLCBvciAwIGlmCisgKiBhbiBlcnJvciBvY2N1cnJlZC4K
KyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBVRGF0ZUZvcm1hdCogVV9FWFBPUlQy
IAordWRhdF9vcGVuKFVEYXRlRm9ybWF0U3R5bGUgIHRpbWVTdHlsZSwKKyAgICAgICAgICBVRGF0
ZUZvcm1hdFN0eWxlICBkYXRlU3R5bGUsCisgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgKmxv
Y2FsZSwKKyAgICAgICAgICBjb25zdCBVQ2hhciAgICAgICAqdHpJRCwKKyAgICAgICAgICBpbnQz
Ml90ICAgICAgICAgICB0eklETGVuZ3RoLAorICAgICAgICAgIGNvbnN0IFVDaGFyICAgICAgICpw
YXR0ZXJuLAorICAgICAgICAgIGludDMyX3QgICAgICAgICAgIHBhdHRlcm5MZW5ndGgsCisgICAg
ICAgICAgVUVycm9yQ29kZSAgICAgICAgKnN0YXR1cyk7CisKKworLyoqCisqIENsb3NlIGEgVURh
dGVGb3JtYXQuCisqIE9uY2UgY2xvc2VkLCBhIFVEYXRlRm9ybWF0IG1heSBubyBsb25nZXIgYmUg
dXNlZC4KKyogQHBhcmFtIGZvcm1hdCBUaGUgZm9ybWF0dGVyIHRvIGNsb3NlLgorKiBAc3RhYmxl
IElDVSAyLjAKKyovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VkYXRfY2xvc2UoVURhdGVG
b3JtYXQqIGZvcm1hdCk7CisKKyNpZiBVX1NIT1dfQ1BMVVNQTFVTX0FQSQorCitVX05BTUVTUEFD
RV9CRUdJTgorCisvKioKKyAqIFxjbGFzcyBMb2NhbFVEYXRlRm9ybWF0UG9pbnRlcgorICogIlNt
YXJ0IHBvaW50ZXIiIGNsYXNzLCBjbG9zZXMgYSBVRGF0ZUZvcm1hdCB2aWEgdWRhdF9jbG9zZSgp
LgorICogRm9yIG1vc3QgbWV0aG9kcyBzZWUgdGhlIExvY2FsUG9pbnRlckJhc2UgYmFzZSBjbGFz
cy4KKyAqCisgKiBAc2VlIExvY2FsUG9pbnRlckJhc2UKKyAqIEBzZWUgTG9jYWxQb2ludGVyCisg
KiBAc3RhYmxlIElDVSA0LjQKKyAqLworVV9ERUZJTkVfTE9DQUxfT1BFTl9QT0lOVEVSKExvY2Fs
VURhdGVGb3JtYXRQb2ludGVyLCBVRGF0ZUZvcm1hdCwgdWRhdF9jbG9zZSk7CisKK1VfTkFNRVNQ
QUNFX0VORAorCisjZW5kaWYKKworLyoqCisgKiBPcGVuIGEgY29weSBvZiBhIFVEYXRlRm9ybWF0
LgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhIGRlZXAgY29weS4KKyAqIEBwYXJhbSBmbXQg
VGhlIGZvcm1hdCB0byBjb3B5CisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJy
b3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycy4KKyAqIEByZXR1cm4gQSBwb2ludGVyIHRvIGEg
VURhdGVGb3JtYXQgaWRlbnRpY2FsIHRvIGZtdC4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitV
X1NUQUJMRSBVRGF0ZUZvcm1hdCogVV9FWFBPUlQyIAordWRhdF9jbG9uZShjb25zdCBVRGF0ZUZv
cm1hdCAqZm10LAorICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKy8qKgorKiBGb3JtYXQg
YSBkYXRlIHVzaW5nIGFuIFVEYXRlRm9ybWF0LgorKiBUaGUgZGF0ZSB3aWxsIGJlIGZvcm1hdHRl
ZCB1c2luZyB0aGUgY29udmVudGlvbnMgc3BlY2lmaWVkIGluIHtAbGluayAjdWRhdF9vcGVuIH0K
KyogQHBhcmFtIGZvcm1hdCBUaGUgZm9ybWF0dGVyIHRvIHVzZQorKiBAcGFyYW0gZGF0ZVRvRm9y
bWF0IFRoZSBkYXRlIHRvIGZvcm1hdAorKiBAcGFyYW0gcmVzdWx0IEEgcG9pbnRlciB0byBhIGJ1
ZmZlciB0byByZWNlaXZlIHRoZSBmb3JtYXR0ZWQgbnVtYmVyLgorKiBAcGFyYW0gcmVzdWx0TGVu
Z3RoIFRoZSBtYXhpbXVtIHNpemUgb2YgcmVzdWx0LgorKiBAcGFyYW0gcG9zaXRpb24gQSBwb2lu
dGVyIHRvIGEgVUZpZWxkUG9zaXRpb24uICBPbiBpbnB1dCwgcG9zaXRpb24tPmZpZWxkCisqIGlz
IHJlYWQuICBPbiBvdXRwdXQsIHBvc2l0aW9uLT5iZWdpbkluZGV4IGFuZCBwb3NpdGlvbi0+ZW5k
SW5kZXggaW5kaWNhdGUKKyogdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIGluZGljZXMgb2YgZmll
bGQgbnVtYmVyIHBvc2l0aW9uLT5maWVsZCwgaWYgc3VjaAorKiBhIGZpZWxkIGV4aXN0cy4gIFRo
aXMgcGFyYW1ldGVyIG1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIG5vIGZpZWxkCisqIHBvc2l0
aW9uIGRhdGEgaXMgcmV0dXJuZWQuCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVF
cnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZl
ciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3
YXMgdHJ1bmNhdGVkLgorKiBAc2VlIHVkYXRfcGFyc2UKKyogQHNlZSBVRmllbGRQb3NpdGlvbgor
KiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VkYXRf
Zm9ybWF0KCAgICBjb25zdCAgICBVRGF0ZUZvcm1hdCogICAgZm9ybWF0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgVURhdGUgICAgICAgICAgIGRhdGVUb0Zvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFVDaGFyKiAgICAgICAgICByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQzMl90ICAgICAgICAgcmVzdWx0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAg
VUZpZWxkUG9zaXRpb24qIHBvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9y
Q29kZSogICAgIHN0YXR1cyk7CisKKy8qKgorKiBQYXJzZSBhIHN0cmluZyBpbnRvIGFuIGRhdGUv
dGltZSB1c2luZyBhIFVEYXRlRm9ybWF0LgorKiBUaGUgZGF0ZSB3aWxsIGJlIHBhcnNlZCB1c2lu
ZyB0aGUgY29udmVudGlvbnMgc3BlY2lmaWVkIGluIHtAbGluayAjdWRhdF9vcGVuIH0KKyogQHBh
cmFtIGZvcm1hdCBUaGUgZm9ybWF0dGVyIHRvIHVzZS4KKyogQHBhcmFtIHRleHQgVGhlIHRleHQg
dG8gcGFyc2UuCisqIEBwYXJhbSB0ZXh0TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGV4dCwgb3IgLTEg
aWYgbnVsbC10ZXJtaW5hdGVkLgorKiBAcGFyYW0gcGFyc2VQb3MgSWYgbm90IDAsIG9uIGlucHV0
IGEgcG9pbnRlciB0byBhbiBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlIG9mZnNldCBhdCB3aGljaAor
KiB0byBiZWdpbiBwYXJzaW5nLiAgSWYgbm90IDAsIG9uIG91dHB1dCB0aGUgb2Zmc2V0IGF0IHdo
aWNoIHBhcnNpbmcgZW5kZWQuCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJv
ckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHZhbHVlIG9mIHRoZSBw
YXJzZWQgZGF0ZS90aW1lCisqIEBzZWUgdWRhdF9mb3JtYXQKKyogQHN0YWJsZSBJQ1UgMi4wCisq
LworVV9TVEFCTEUgVURhdGUgVV9FWFBPUlQyIAordWRhdF9wYXJzZSggICAgY29uc3QgICAgVURh
dGVGb3JtYXQqICAgIGZvcm1hdCwKKyAgICAgICAgICAgIGNvbnN0ICAgIFVDaGFyKiAgICAgICAg
ICB0ZXh0LAorICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgdGV4dExlbmd0aCwK
KyAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICpwYXJzZVBvcywKKyAgICAgICAg
ICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICpzdGF0dXMpOworCisvKioKKyogUGFyc2UgYSBz
dHJpbmcgaW50byBhbiBkYXRlL3RpbWUgdXNpbmcgYSBVRGF0ZUZvcm1hdC4KKyogVGhlIGRhdGUg
d2lsbCBiZSBwYXJzZWQgdXNpbmcgdGhlIGNvbnZlbnRpb25zIHNwZWNpZmllZCBpbiB7QGxpbmsg
I3VkYXRfb3BlbiB9CisqIEBwYXJhbSBmb3JtYXQgVGhlIGZvcm1hdHRlciB0byB1c2UuCisqIEBw
YXJhbSBjYWxlbmRhciBUaGUgY2FsZW5kYXIgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHBhcnNlZCBk
YXRhLgorKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBwYXJzZS4KKyogQHBhcmFtIHRleHRMZW5n
dGggVGhlIGxlbmd0aCBvZiB0ZXh0LCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisqIEBwYXJh
bSBwYXJzZVBvcyBJZiBub3QgMCwgb24gaW5wdXQgYSBwb2ludGVyIHRvIGFuIGludGVnZXIgc3Bl
Y2lmeWluZyB0aGUgb2Zmc2V0IGF0IHdoaWNoCisqIHRvIGJlZ2luIHBhcnNpbmcuICBJZiBub3Qg
MCwgb24gb3V0cHV0IHRoZSBvZmZzZXQgYXQgd2hpY2ggcGFyc2luZyBlbmRlZC4KKyogQHBhcmFt
IHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMK
KyogQHNlZSB1ZGF0X2Zvcm1hdAorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2b2lk
IFVfRVhQT1JUMiAKK3VkYXRfcGFyc2VDYWxlbmRhcihjb25zdCAgICBVRGF0ZUZvcm1hdCogICAg
Zm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDYWxlbmRhciogICAgICBjYWxl
bmRhciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCAgICBVQ2hhciogICAgICAgICAgdGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgdGV4dExlbmd0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgKnBhcnNlUG9zLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgICAqc3RhdHVzKTsKKwor
LyoqCisqIERldGVybWluZSBpZiBhbiBVRGF0ZUZvcm1hdCB3aWxsIHBlcmZvcm0gbGVuaWVudCBw
YXJzaW5nLgorKiBXaXRoIGxlbmllbnQgcGFyc2luZywgdGhlIHBhcnNlciBtYXkgdXNlIGhldXJp
c3RpY3MgdG8gaW50ZXJwcmV0IGlucHV0cyB0aGF0IGRvIG5vdAorKiBwcmVjaXNlbHkgbWF0Y2gg
dGhlIHBhdHRlcm4uIFdpdGggc3RyaWN0IHBhcnNpbmcsIGlucHV0cyBtdXN0IG1hdGNoIHRoZSBw
YXR0ZXJuLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkKKyogQHJldHVybiBU
UlVFIGlmIGZtdCBpcyBzZXQgdG8gcGVyZm9ybSBsZW5pZW50IHBhcnNpbmcsIEZBTFNFIG90aGVy
d2lzZS4KKyogQHNlZSB1ZGF0X3NldExlbmllbnQKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9T
VEFCTEUgVUJvb2wgVV9FWFBPUlQyIAordWRhdF9pc0xlbmllbnQoY29uc3QgVURhdGVGb3JtYXQq
IGZtdCk7CisKKy8qKgorKiBTcGVjaWZ5IHdoZXRoZXIgYW4gVURhdGVGb3JtYXQgd2lsbCBwZXJm
b3JtIGxlbmllbnQgcGFyc2luZy4KKyogV2l0aCBsZW5pZW50IHBhcnNpbmcsIHRoZSBwYXJzZXIg
bWF5IHVzZSBoZXVyaXN0aWNzIHRvIGludGVycHJldCBpbnB1dHMgdGhhdCBkbyBub3QKKyogcHJl
Y2lzZWx5IG1hdGNoIHRoZSBwYXR0ZXJuLiBXaXRoIHN0cmljdCBwYXJzaW5nLCBpbnB1dHMgbXVz
dCBtYXRjaCB0aGUgcGF0dGVybi4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHNldAor
KiBAcGFyYW0gaXNMZW5pZW50IFRSVUUgaWYgZm10IHNob3VsZCBwZXJmb3JtIGxlbmllbnQgcGFy
c2luZywgRkFMU0Ugb3RoZXJ3aXNlLgorKiBAc2VlIGRhdF9pc0xlbmllbnQKKyogQHN0YWJsZSBJ
Q1UgMi4wCisqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1ZGF0X3NldExlbmllbnQoICAg
IFVEYXRlRm9ybWF0KiAgICBmbXQsCisgICAgICAgICAgICAgICAgICAgIFVCb29sICAgICAgICAg
IGlzTGVuaWVudCk7CisKKy8qKgorKiBHZXQgdGhlIFVDYWxlbmRhciBhc3NvY2lhdGVkIHdpdGgg
YW4gVURhdGVGb3JtYXQuCisqIEEgVURhdGVGb3JtYXQgdXNlcyBhIFVDYWxlbmRhciB0byBjb252
ZXJ0IGEgcmF3IHZhbHVlIHRvLCBmb3IgZXhhbXBsZSwKKyogdGhlIGRheSBvZiB0aGUgd2Vlay4K
KyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHF1ZXJ5LgorKiBAcmV0dXJuIEEgcG9pbnRl
ciB0byB0aGUgVUNhbGVuZGFyIHVzZWQgYnkgZm10LgorKiBAc2VlIHVkYXRfc2V0Q2FsZW5kYXIK
KyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgY29uc3QgVUNhbGVuZGFyKiBVX0VYUE9S
VDIgCit1ZGF0X2dldENhbGVuZGFyKGNvbnN0IFVEYXRlRm9ybWF0KiBmbXQpOworCisvKioKKyog
U2V0IHRoZSBVQ2FsZW5kYXIgYXNzb2NpYXRlZCB3aXRoIGFuIFVEYXRlRm9ybWF0LgorKiBBIFVE
YXRlRm9ybWF0IHVzZXMgYSBVQ2FsZW5kYXIgdG8gY29udmVydCBhIHJhdyB2YWx1ZSB0bywgZm9y
IGV4YW1wbGUsCisqIHRoZSBkYXkgb2YgdGhlIHdlZWsuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1h
dHRlciB0byBzZXQuCisqIEBwYXJhbSBjYWxlbmRhclRvU2V0IEEgcG9pbnRlciB0byBhbiBVQ2Fs
ZW5kYXIgdG8gYmUgdXNlZCBieSBmbXQuCisqIEBzZWUgdWRhdF9zZXRDYWxlbmRhcgorKiBAc3Rh
YmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VkYXRfc2V0Q2FsZW5k
YXIoICAgICAgICAgICAgVURhdGVGb3JtYXQqICAgIGZtdCwKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3QgICBVQ2FsZW5kYXIqICAgICAgY2FsZW5kYXJUb1NldCk7CisKKy8qKgorKiBHZXQgdGhl
IFVOdW1iZXJGb3JtYXQgYXNzb2NpYXRlZCB3aXRoIGFuIFVEYXRlRm9ybWF0LgorKiBBIFVEYXRl
Rm9ybWF0IHVzZXMgYSBVTnVtYmVyRm9ybWF0IHRvIGZvcm1hdCBudW1iZXJzIHdpdGhpbiBhIGRh
dGUsCisqIGZvciBleGFtcGxlIHRoZSBkYXkgbnVtYmVyLgorKiBAcGFyYW0gZm10IFRoZSBmb3Jt
YXR0ZXIgdG8gcXVlcnkuCisqIEByZXR1cm4gQSBwb2ludGVyIHRvIHRoZSBVTnVtYmVyRm9ybWF0
IHVzZWQgYnkgZm10IHRvIGZvcm1hdCBudW1iZXJzLgorKiBAc2VlIHVkYXRfc2V0TnVtYmVyRm9y
bWF0CisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGNvbnN0IFVOdW1iZXJGb3JtYXQq
IFVfRVhQT1JUMiAKK3VkYXRfZ2V0TnVtYmVyRm9ybWF0KGNvbnN0IFVEYXRlRm9ybWF0KiBmbXQp
OworCisvKioKKyogU2V0IHRoZSBVTnVtYmVyRm9ybWF0IGFzc29jaWF0ZWQgd2l0aCBhbiBVRGF0
ZUZvcm1hdC4KKyogQSBVRGF0ZUZvcm1hdCB1c2VzIGEgVU51bWJlckZvcm1hdCB0byBmb3JtYXQg
bnVtYmVycyB3aXRoaW4gYSBkYXRlLAorKiBmb3IgZXhhbXBsZSB0aGUgZGF5IG51bWJlci4KKyog
QHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHNldC4KKyogQHBhcmFtIG51bWJlckZvcm1hdFRv
U2V0IEEgcG9pbnRlciB0byB0aGUgVU51bWJlckZvcm1hdCB0byBiZSB1c2VkIGJ5IGZtdCB0byBm
b3JtYXQgbnVtYmVycy4KKyogQHNlZSB1ZGF0X2dldE51bWJlckZvcm1hdAorKiBAc3RhYmxlIElD
VSAyLjAKKyovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VkYXRfc2V0TnVtYmVyRm9ybWF0
KCAgICAgICAgICAgIFVEYXRlRm9ybWF0KiAgICBmbXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCAgIFVOdW1iZXJGb3JtYXQqICBudW1iZXJGb3JtYXRUb1NldCk7CisKKy8qKgorKiBH
ZXQgYSBsb2NhbGUgZm9yIHdoaWNoIGRhdGUvdGltZSBmb3JtYXR0aW5nIHBhdHRlcm5zIGFyZSBh
dmFpbGFibGUuCisqIEEgVURhdGVGb3JtYXQgaW4gYSBsb2NhbGUgcmV0dXJuZWQgYnkgdGhpcyBm
dW5jdGlvbiB3aWxsIHBlcmZvcm0gdGhlIGNvcnJlY3QKKyogZm9ybWF0dGluZyBhbmQgcGFyc2lu
ZyBmb3IgdGhlIGxvY2FsZS4KKyogQHBhcmFtIGxvY2FsZUluZGV4IFRoZSBpbmRleCBvZiB0aGUg
ZGVzaXJlZCBsb2NhbGUuCisqIEByZXR1cm4gQSBsb2NhbGUgZm9yIHdoaWNoIGRhdGUvdGltZSBm
b3JtYXR0aW5nIHBhdHRlcm5zIGFyZSBhdmFpbGFibGUsIG9yIDAgaWYgbm9uZS4KKyogQHNlZSB1
ZGF0X2NvdW50QXZhaWxhYmxlCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGNvbnN0
IGNoYXIqIFVfRVhQT1JUMiAKK3VkYXRfZ2V0QXZhaWxhYmxlKGludDMyX3QgbG9jYWxlSW5kZXgp
OworCisvKioKKyogRGV0ZXJtaW5lIGhvdyBtYW55IGxvY2FsZXMgaGF2ZSBkYXRlL3RpbWUgIGZv
cm1hdHRpbmcgcGF0dGVybnMgYXZhaWxhYmxlLgorKiBUaGlzIGZ1bmN0aW9uIGlzIG1vc3QgdXNl
ZnVsIGFzIGRldGVybWluaW5nIHRoZSBsb29wIGVuZGluZyBjb25kaXRpb24gZm9yCisqIGNhbGxz
IHRvIHtAbGluayAjdWRhdF9nZXRBdmFpbGFibGUgfS4KKyogQHJldHVybiBUaGUgbnVtYmVyIG9m
IGxvY2FsZXMgZm9yIHdoaWNoIGRhdGUvdGltZSBmb3JtYXR0aW5nIHBhdHRlcm5zIGFyZSBhdmFp
bGFibGUuCisqIEBzZWUgdWRhdF9nZXRBdmFpbGFibGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLwor
VV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1ZGF0X2NvdW50QXZhaWxhYmxlKHZvaWQpOwor
CisvKioKKyogR2V0IHRoZSB5ZWFyIHJlbGF0aXZlIHRvIHdoaWNoIGFsbCAyLWRpZ2l0IHllYXJz
IGFyZSBpbnRlcnByZXRlZC4KKyogRm9yIGV4YW1wbGUsIGlmIHRoZSAyLWRpZ2l0IHN0YXJ0IHll
YXIgaXMgMjEwMCwgdGhlIHllYXIgOTkgd2lsbCBiZQorKiBpbnRlcnByZXRlZCBhcyAyMTk5Lgor
KiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisqIEBwYXJhbSBzdGF0dXMgQSBw
b2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4g
VGhlIHllYXIgcmVsYXRpdmUgdG8gd2hpY2ggYWxsIDItZGlnaXQgeWVhcnMgYXJlIGludGVycHJl
dGVkLgorKiBAc2VlIHVkYXRfU2V0MkRpZ2l0WWVhclN0YXJ0CisqIEBzdGFibGUgSUNVIDIuMAor
Ki8KK1VfU1RBQkxFIFVEYXRlIFVfRVhQT1JUMiAKK3VkYXRfZ2V0MkRpZ2l0WWVhclN0YXJ0KCAg
ICBjb25zdCAgIFVEYXRlRm9ybWF0ICAgICAqZm10LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICpzdGF0dXMpOworCisvKioKKyogU2V0IHRoZSB5
ZWFyIHJlbGF0aXZlIHRvIHdoaWNoIGFsbCAyLWRpZ2l0IHllYXJzIHdpbGwgYmUgaW50ZXJwcmV0
ZWQuCisqIEZvciBleGFtcGxlLCBpZiB0aGUgMi1kaWdpdCBzdGFydCB5ZWFyIGlzIDIxMDAsIHRo
ZSB5ZWFyIDk5IHdpbGwgYmUKKyogaW50ZXJwcmV0ZWQgYXMgMjE5OS4KKyogQHBhcmFtIGZtdCBU
aGUgZm9ybWF0dGVyIHRvIHNldC4KKyogQHBhcmFtIGQgVGhlIHllYXIgcmVsYXRpdmUgdG8gd2hp
Y2ggYWxsIDItZGlnaXQgeWVhcnMgd2lsbCBiZSBpbnRlcnByZXRlZC4KKyogQHBhcmFtIHN0YXR1
cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHNl
ZSB1ZGF0X1NldDJEaWdpdFllYXJTdGFydAorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJM
RSB2b2lkIFVfRVhQT1JUMiAKK3VkYXRfc2V0MkRpZ2l0WWVhclN0YXJ0KCAgICBVRGF0ZUZvcm1h
dCAgICAgKmZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRGF0ZSAgICAgICAgICAg
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgKnN0YXR1cyk7
CisKKy8qKgorKiBFeHRyYWN0IHRoZSBwYXR0ZXJuIGZyb20gYSBVRGF0ZUZvcm1hdC4KKyogVGhl
IHBhdHRlcm4gd2lsbCBmb2xsb3cgdGhlIHBhdHRlcm4gc3ludGF4IHJ1bGVzLgorKiBAcGFyYW0g
Zm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisqIEBwYXJhbSBsb2NhbGl6ZWQgVFJVRSBpZiB0
aGUgcGF0dGVybiBzaG91bGQgYmUgbG9jYWxpemVkLCBGQUxTRSBvdGhlcndpc2UuCisqIEBwYXJh
bSByZXN1bHQgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIHBhdHRlcm4uCisq
IEBwYXJhbSByZXN1bHRMZW5ndGggVGhlIG1heGltdW0gc2l6ZSBvZiByZXN1bHQuCisqIEBwYXJh
bSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3Jz
CisqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFu
IHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorKiBAc2VlIHVkYXRfYXBw
bHlQYXR0ZXJuCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBP
UlQyIAordWRhdF90b1BhdHRlcm4oICAgIGNvbnN0ICAgVURhdGVGb3JtYXQgICAgICpmbXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCAgICAgICAgICBsb2NhbGl6ZWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICBVQ2hhciAgICAgICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGludDMyX3QgICAgICAgICByZXN1bHRMZW5ndGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICBVRXJyb3JDb2RlICAgICAgKnN0YXR1cyk7CisKKy8qKgorKiBTZXQgdGhlIHBhdHRl
cm4gdXNlZCBieSBhbiBVRGF0ZUZvcm1hdC4KKyogVGhlIHBhdHRlcm4gc2hvdWxkIGZvbGxvdyB0
aGUgcGF0dGVybiBzeW50YXggcnVsZXMuCisqIEBwYXJhbSBmb3JtYXQgVGhlIGZvcm1hdHRlciB0
byBzZXQuCisqIEBwYXJhbSBsb2NhbGl6ZWQgVFJVRSBpZiB0aGUgcGF0dGVybiBpcyBsb2NhbGl6
ZWQsIEZBTFNFIG90aGVyd2lzZS4KKyogQHBhcmFtIHBhdHRlcm4gVGhlIG5ldyBwYXR0ZXJuCisq
IEBwYXJhbSBwYXR0ZXJuTGVuZ3RoIFRoZSBsZW5ndGggb2YgcGF0dGVybiwgb3IgLTEgaWYgbnVs
bC10ZXJtaW5hdGVkLgorKiBAc2VlIHVkYXRfdG9QYXR0ZXJuCisqIEBzdGFibGUgSUNVIDIuMAor
Ki8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWRhdF9hcHBseVBhdHRlcm4oICAgICAgICAg
ICAgVURhdGVGb3JtYXQgICAgICpmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VUJvb2wgICAgICAgICAgbG9jYWxpemVkLAorICAgICAgICAgICAgICAgICAgICBjb25zdCAgIFVD
aGFyICAgICAgICAgICAqcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQz
Ml90ICAgICAgICAgcGF0dGVybkxlbmd0aCk7CisKKy8qKiAKKyAqIFRoZSBwb3NzaWJsZSB0eXBl
cyBvZiBkYXRlIGZvcm1hdCBzeW1ib2xzIAorICogQHN0YWJsZSBJQ1UgMi42CisgKi8KK3R5cGVk
ZWYgZW51bSBVRGF0ZUZvcm1hdFN5bWJvbFR5cGUgeworICAgIC8qKiBUaGUgZXJhIG5hbWVzLCBm
b3IgZXhhbXBsZSBBRCAqLworICAgIFVEQVRfRVJBUywKKyAgICAvKiogVGhlIG1vbnRoIG5hbWVz
LCBmb3IgZXhhbXBsZSBGZWJydWFyeSAqLworICAgIFVEQVRfTU9OVEhTLAorICAgIC8qKiBUaGUg
c2hvcnQgbW9udGggbmFtZXMsIGZvciBleGFtcGxlIEZlYi4gKi8KKyAgICBVREFUX1NIT1JUX01P
TlRIUywKKyAgICAvKiogVGhlIHdlZWtkYXkgbmFtZXMsIGZvciBleGFtcGxlIE1vbmRheSAqLwor
ICAgIFVEQVRfV0VFS0RBWVMsCisgICAgLyoqIFRoZSBzaG9ydCB3ZWVrZGF5IG5hbWVzLCBmb3Ig
ZXhhbXBsZSBNb24uICovCisgICAgVURBVF9TSE9SVF9XRUVLREFZUywKKyAgICAvKiogVGhlIEFN
L1BNIG5hbWVzLCBmb3IgZXhhbXBsZSBBTSAqLworICAgIFVEQVRfQU1fUE1TLAorICAgIC8qKiBU
aGUgbG9jYWxpemVkIGNoYXJhY3RlcnMgKi8KKyAgICBVREFUX0xPQ0FMSVpFRF9DSEFSUywKKyAg
ICAvKiogVGhlIGxvbmcgZXJhIG5hbWVzLCBmb3IgZXhhbXBsZSBBbm5vIERvbWluaSAqLworICAg
IFVEQVRfRVJBX05BTUVTLAorICAgIC8qKiBUaGUgbmFycm93IG1vbnRoIG5hbWVzLCBmb3IgZXhh
bXBsZSBGICovCisgICAgVURBVF9OQVJST1dfTU9OVEhTLAorICAgIC8qKiBUaGUgbmFycm93IHdl
ZWtkYXkgbmFtZXMsIGZvciBleGFtcGxlIE4gKi8KKyAgICBVREFUX05BUlJPV19XRUVLREFZUywK
KyAgICAvKiogU3RhbmRhbG9uZSBjb250ZXh0IHZlcnNpb25zIG9mIG1vbnRocyAqLworICAgIFVE
QVRfU1RBTkRBTE9ORV9NT05USFMsCisgICAgVURBVF9TVEFOREFMT05FX1NIT1JUX01PTlRIUywK
KyAgICBVREFUX1NUQU5EQUxPTkVfTkFSUk9XX01PTlRIUywKKyAgICAvKiogU3RhbmRhbG9uZSBj
b250ZXh0IHZlcnNpb25zIG9mIHdlZWtkYXlzICovCisgICAgVURBVF9TVEFOREFMT05FX1dFRUtE
QVlTLAorICAgIFVEQVRfU1RBTkRBTE9ORV9TSE9SVF9XRUVLREFZUywKKyAgICBVREFUX1NUQU5E
QUxPTkVfTkFSUk9XX1dFRUtEQVlTLAorICAgIC8qKiBUaGUgcXVhcnRlcnMsIGZvciBleGFtcGxl
IDFzdCBRdWFydGVyICovCisgICAgVURBVF9RVUFSVEVSUywKKyAgICAvKiogVGhlIHNob3J0IHF1
YXJ0ZXIgbmFtZXMsIGZvciBleGFtcGxlIFExICovCisgICAgVURBVF9TSE9SVF9RVUFSVEVSUywK
KyAgICAvKiogU3RhbmRhbG9uZSBjb250ZXh0IHZlcnNpb25zIG9mIHF1YXJ0ZXJzICovCisgICAg
VURBVF9TVEFOREFMT05FX1FVQVJURVJTLAorICAgIFVEQVRfU1RBTkRBTE9ORV9TSE9SVF9RVUFS
VEVSUworCit9IFVEYXRlRm9ybWF0U3ltYm9sVHlwZTsKKworc3RydWN0IFVEYXRlRm9ybWF0U3lt
Ym9sczsKKy8qKiBEYXRlIGZvcm1hdCBzeW1ib2xzLgorICogIEZvciB1c2FnZSBpbiBDIHByb2dy
YW1zLgorICogIEBzdGFibGUgSUNVIDIuNgorICovCit0eXBlZGVmIHN0cnVjdCBVRGF0ZUZvcm1h
dFN5bWJvbHMgVURhdGVGb3JtYXRTeW1ib2xzOworCisvKioKKyogR2V0IHRoZSBzeW1ib2xzIGFz
c29jaWF0ZWQgd2l0aCBhbiBVRGF0ZUZvcm1hdC4KKyogVGhlIHN5bWJvbHMgYXJlIHdoYXQgYSBV
RGF0ZUZvcm1hdCB1c2VzIHRvIHJlcHJlc2VudCBsb2NhbGUtc3BlY2lmaWMgZGF0YSwKKyogZm9y
IGV4YW1wbGUgbW9udGggb3IgZGF5IG5hbWVzLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIg
dG8gcXVlcnkuCisqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHN5bWJvbHMgdG8gZ2V0LiAgT25l
IG9mIFVEQVRfRVJBUywgVURBVF9NT05USFMsIFVEQVRfU0hPUlRfTU9OVEhTLAorKiBVREFUX1dF
RUtEQVlTLCBVREFUX1NIT1JUX1dFRUtEQVlTLCBVREFUX0FNX1BNUywgb3IgVURBVF9MT0NBTEla
RURfQ0hBUlMKKyogQHBhcmFtIHN5bWJvbEluZGV4IFRoZSBkZXNpcmVkIHN5bWJvbCBvZiB0eXBl
IHR5cGUuCisqIEBwYXJhbSByZXN1bHQgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUg
dGhlIHBhdHRlcm4uCisqIEBwYXJhbSByZXN1bHRMZW5ndGggVGhlIG1heGltdW0gc2l6ZSBvZiBy
ZXN1bHQuCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVj
ZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsg
aWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgor
KiBAc2VlIHVkYXRfY291bnRTeW1ib2xzCisqIEBzZWUgdWRhdF9zZXRTeW1ib2xzCisqIEBzdGFi
bGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordWRhdF9nZXRTeW1i
b2xzKGNvbnN0ICAgVURhdGVGb3JtYXQgICAgICAgICAgICAgKmZtdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFVEYXRlRm9ybWF0U3ltYm9sVHlwZSAgIHR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBzeW1ib2xJbmRleCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFVDaGFyICAgICAgICAgICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICByZXN1bHRMZW5ndGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgICAgICAgICAqc3RhdHVzKTsKKwor
LyoqCisqIENvdW50IHRoZSBudW1iZXIgb2YgcGFydGljdWxhciBzeW1ib2xzIGZvciBhbiBVRGF0
ZUZvcm1hdC4KKyogVGhpcyBmdW5jdGlvbiBpcyBtb3N0IHVzZWZ1bCBhcyBmb3IgZGV0ZW1pbmlu
ZyB0aGUgbG9vcCB0ZXJtaW5hdGlvbiBjb25kaXRpb24KKyogZm9yIGNhbGxzIHRvIHtAbGluayAj
dWRhdF9nZXRTeW1ib2xzIH0uCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBxdWVyeS4K
KyogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2Ygc3ltYm9scyB0byBjb3VudC4gIE9uZSBvZiBVREFU
X0VSQVMsIFVEQVRfTU9OVEhTLCBVREFUX1NIT1JUX01PTlRIUywKKyogVURBVF9XRUVLREFZUywg
VURBVF9TSE9SVF9XRUVLREFZUywgVURBVF9BTV9QTVMsIG9yIFVEQVRfTE9DQUxJWkVEX0NIQVJT
CisqIEByZXR1cm4gVGhlIG51bWJlciBvZiBzeW1ib2xzIG9mIHR5cGUgdHlwZS4KKyogQHNlZSB1
ZGF0X2dldFN5bWJvbHMKKyogQHNlZSB1ZGF0X3NldFN5bWJvbHMKKyogQHN0YWJsZSBJQ1UgMi4w
CisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1ZGF0X2NvdW50U3ltYm9scyggICAg
Y29uc3QgICAgVURhdGVGb3JtYXQgICAgICAgICAgICAgICAgKmZtdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVRGF0ZUZvcm1hdFN5bWJvbFR5cGUgICAgdHlwZSk7CisKKy8qKgorKiBT
ZXQgdGhlIHN5bWJvbHMgYXNzb2NpYXRlZCB3aXRoIGFuIFVEYXRlRm9ybWF0LgorKiBUaGUgc3lt
Ym9scyBhcmUgd2hhdCBhIFVEYXRlRm9ybWF0IHVzZXMgdG8gcmVwcmVzZW50IGxvY2FsZS1zcGVj
aWZpYyBkYXRhLAorKiBmb3IgZXhhbXBsZSBtb250aCBvciBkYXkgbmFtZXMuCisqIEBwYXJhbSBm
b3JtYXQgVGhlIGZvcm1hdHRlciB0byBzZXQKKyogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2Ygc3lt
Ym9scyB0byBzZXQuICBPbmUgb2YgVURBVF9FUkFTLCBVREFUX01PTlRIUywgVURBVF9TSE9SVF9N
T05USFMsCisqIFVEQVRfV0VFS0RBWVMsIFVEQVRfU0hPUlRfV0VFS0RBWVMsIFVEQVRfQU1fUE1T
LCBvciBVREFUX0xPQ0FMSVpFRF9DSEFSUworKiBAcGFyYW0gc3ltYm9sSW5kZXggVGhlIGluZGV4
IG9mIHRoZSBzeW1ib2wgdG8gc2V0IG9mIHR5cGUgdHlwZS4KKyogQHBhcmFtIHZhbHVlIFRoZSBu
ZXcgdmFsdWUKKyogQHBhcmFtIHZhbHVlTGVuZ3RoIFRoZSBsZW5ndGggb2YgdmFsdWUsIG9yIC0x
IGlmIG51bGwtdGVybWluYXRlZAorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJy
b3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAc2VlIHVkYXRfZ2V0U3ltYm9scworKiBA
c2VlIHVkYXRfY291bnRTeW1ib2xzCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIHZv
aWQgVV9FWFBPUlQyIAordWRhdF9zZXRTeW1ib2xzKCAgICBVRGF0ZUZvcm1hdCAgICAgICAgICAg
ICAqZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICBVRGF0ZUZvcm1hdFN5bWJvbFR5cGUgICB0
eXBlLAorICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBzeW1ib2xJ
bmRleCwKKyAgICAgICAgICAgICAgICAgICAgVUNoYXIgICAgICAgICAgICAgICAgICAgKnZhbHVl
LAorICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICB2YWx1ZUxlbmd0
aCwKKyAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICAgICAgICAgKnN0YXR1cyk7
CisKKy8qKgorICogR2V0IHRoZSBsb2NhbGUgZm9yIHRoaXMgZGF0ZSBmb3JtYXQgb2JqZWN0Lgor
ICogWW91IGNhbiBjaG9vc2UgYmV0d2VlbiB2YWxpZCBhbmQgYWN0dWFsIGxvY2FsZS4KKyAqIEBw
YXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBnZXQgdGhlIGxvY2FsZSBmcm9tCisgKiBAcGFyYW0g
dHlwZSB0eXBlIG9mIHRoZSBsb2NhbGUgd2UncmUgbG9va2luZyBmb3IgKHZhbGlkIG9yIGFjdHVh
bCkgCisgKiBAcGFyYW0gc3RhdHVzIGVycm9yIGNvZGUgZm9yIHRoZSBvcGVyYXRpb24KKyAqIEBy
ZXR1cm4gdGhlIGxvY2FsZSBuYW1lCisgKiBAc3RhYmxlIElDVSAyLjgKKyAqLworVV9TVEFCTEUg
Y29uc3QgY2hhciogVV9FWFBPUlQyCit1ZGF0X2dldExvY2FsZUJ5VHlwZShjb25zdCBVRGF0ZUZv
cm1hdCAqZm10LAorICAgICAgICAgICAgICAgICAgICAgVUxvY0RhdGFMb2NhbGVUeXBlIHR5cGUs
CisgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiBzdGF0dXMpOyAKKworLyoqCisqIEV4
dHJhY3QgdGhlIGRhdGUgcGF0dGVybiBmcm9tIGEgVURhdGVGb3JtYXQgc2V0IGZvciByZWxhdGl2
ZSBkYXRlIGZvcm1hdHRpbmcuCisqIFRoZSBwYXR0ZXJuIHdpbGwgZm9sbG93IHRoZSBwYXR0ZXJu
IHN5bnRheCBydWxlcy4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHF1ZXJ5LgorKiBA
cGFyYW0gcmVzdWx0IEEgcG9pbnRlciB0byBhIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBwYXR0ZXJu
LgorKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIFRoZSBtYXhpbXVtIHNpemUgb2YgcmVzdWx0LgorKiBA
cGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJy
b3JzCisqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0
aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorKiBAc2VlIHVkYXRf
YXBwbHlQYXR0ZXJuUmVsYXRpdmUKKyogQGludGVybmFsIElDVSA0LjIgdGVjaG5vbG9neSBwcmV2
aWV3CisqLworVV9JTlRFUk5BTCBpbnQzMl90IFVfRVhQT1JUMiAKK3VkYXRfdG9QYXR0ZXJuUmVs
YXRpdmVEYXRlKGNvbnN0IFVEYXRlRm9ybWF0ICpmbXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBVQ2hhciAgICAgICAgICAgICAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50MzJfdCAgICAgICAgICAgcmVzdWx0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVUVycm9yQ29kZSAgICAgICAgKnN0YXR1cyk7CisKKy8qKgorKiBFeHRyYWN0IHRoZSB0
aW1lIHBhdHRlcm4gZnJvbSBhIFVEYXRlRm9ybWF0IHNldCBmb3IgcmVsYXRpdmUgZGF0ZSBmb3Jt
YXR0aW5nLgorKiBUaGUgcGF0dGVybiB3aWxsIGZvbGxvdyB0aGUgcGF0dGVybiBzeW50YXggcnVs
ZXMuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBxdWVyeS4KKyogQHBhcmFtIHJlc3Vs
dCBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgcGF0dGVybi4KKyogQHBhcmFt
IHJlc3VsdExlbmd0aCBUaGUgbWF4aW11bSBzaXplIG9mIHJlc3VsdC4KKyogQHBhcmFtIHN0YXR1
cyBBIHBvaW50ZXIgdG8gYSBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAcmV0
dXJuIFRoZSB0b3RhbCBidWZmZXIgc2l6ZSBuZWVkZWQ7IGlmIGdyZWF0ZXIgdGhhbiByZXN1bHRM
ZW5ndGgsIHRoZSBvdXRwdXQgd2FzIHRydW5jYXRlZC4KKyogQHNlZSB1ZGF0X2FwcGx5UGF0dGVy
blJlbGF0aXZlCisqIEBpbnRlcm5hbCBJQ1UgNC4yIHRlY2hub2xvZ3kgcHJldmlldworKi8KK1Vf
SU5URVJOQUwgaW50MzJfdCBVX0VYUE9SVDIgCit1ZGF0X3RvUGF0dGVyblJlbGF0aXZlVGltZShj
b25zdCBVRGF0ZUZvcm1hdCAqZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIg
ICAgICAgICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qg
ICAgICAgICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJv
ckNvZGUgICAgICAgICpzdGF0dXMpOworCisvKioKKyogU2V0IHRoZSBkYXRlICYgdGltZSBwYXR0
ZXJucyB1c2VkIGJ5IGEgVURhdGVGb3JtYXQgc2V0IGZvciByZWxhdGl2ZSBkYXRlIGZvcm1hdHRp
bmcuCisqIFRoZSBwYXR0ZXJucyBzaG91bGQgZm9sbG93IHRoZSBwYXR0ZXJuIHN5bnRheCBydWxl
cy4KKyogQHBhcmFtIGZvcm1hdCBUaGUgZm9ybWF0dGVyIHRvIHNldC4KKyogQHBhcmFtIGRhdGVQ
YXR0ZXJuIFRoZSBuZXcgZGF0ZSBwYXR0ZXJuCisqIEBwYXJhbSBkYXRlUGF0dGVybkxlbmd0aCBU
aGUgbGVuZ3RoIG9mIGRhdGVQYXR0ZXJuLCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisqIEBw
YXJhbSB0aW1lUGF0dGVybiBUaGUgbmV3IHRpbWUgcGF0dGVybgorKiBAcGFyYW0gdGltZVBhdHRl
cm5MZW5ndGggVGhlIGxlbmd0aCBvZiB0aW1lUGF0dGVybiwgb3IgLTEgaWYgbnVsbC10ZXJtaW5h
dGVkLgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhIFVFcnJvckNvZGUgdG8gcmVjZWl2
ZSBhbnkgZXJyb3JzCisqIEBzZWUgdWRhdF90b1BhdHRlcm5SZWxhdGl2ZURhdGUsIHVkYXRfdG9Q
YXR0ZXJuUmVsYXRpdmVUaW1lCisqIEBpbnRlcm5hbCBJQ1UgNC4yIHRlY2hub2xvZ3kgcHJldmll
dworKi8KK1VfSU5URVJOQUwgdm9pZCBVX0VYUE9SVDIgCit1ZGF0X2FwcGx5UGF0dGVyblJlbGF0
aXZlKFVEYXRlRm9ybWF0ICpmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFVDaGFyICpkYXRlUGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAg
ICAgZGF0ZVBhdHRlcm5MZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVD
aGFyICp0aW1lUGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAg
dGltZVBhdHRlcm5MZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUg
ICpzdGF0dXMpOworCisKKyNlbmRpZiAvKiAjaWYgIVVDT05GSUdfTk9fRk9STUFUVElORyAqLwor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29kZS91
bWlzYy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3VtaXNjLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDg1NDUxZmM3NjdjMDU4MzVmNmMxNWY1NjZmMzU2MmUyZDRhZjgzNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29kZS91bWlzYy5oCkBAIC0w
LDAgKzEsNjAgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgQ29weXJpZ2h0IChDKSAxOTk5LTIw
MDYsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQg
b3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBmaWxlIG5h
bWU6ICB1bWlzYy5oCisqICAgZW5jb2Rpbmc6ICAgVVMtQVNDSUkKKyogICB0YWIgc2l6ZTogICA4
IChub3QgdXNlZCkKKyogICBpbmRlbnRhdGlvbjo0CisqCisqICAgY3JlYXRlZCBvbjogMTk5OW9j
dDE1CisqICAgY3JlYXRlZCBieTogTWFya3VzIFcuIFNjaGVyZXIKKyovCisKKyNpZm5kZWYgVU1J
U0NfSAorI2RlZmluZSBVTUlTQ19ICisKKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorCisv
KioKKyAqIFxmaWxlCisgKiBcYnJpZWYgIEMgQVBJOm1pc2MgZGVmaW5pdGlvbnMgCisgKgorICog
IFRoaXMgZmlsZSBjb250YWlucyBtaXNjZWxsYW5lb3VzIGRlZmluaXRpb25zIGZvciB0aGUgQyBB
UElzLiAKKyAqLworCitVX0NERUNMX0JFR0lOCisKKy8qKiBBIHN0cnVjdCByZXByZXNlbnRpbmcg
YSByYW5nZSBvZiB0ZXh0IGNvbnRhaW5pbmcgYSBzcGVjaWZpYyBmaWVsZCAKKyAqICBAc3RhYmxl
IElDVSAyLjAKKyAqLwordHlwZWRlZiBzdHJ1Y3QgVUZpZWxkUG9zaXRpb24geworICAvKioKKyAg
ICogVGhlIGZpZWxkIAorICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICovCisgIGludDMyX3QgZmll
bGQ7CisgIC8qKgorICAgKiBUaGUgc3RhcnQgb2YgdGhlIHRleHQgcmFuZ2UgY29udGFpbmluZyBm
aWVsZCAKKyAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAqLworICBpbnQzMl90IGJlZ2luSW5kZXg7
CisgIC8qKiAKKyAgICogVGhlIGxpbWl0IG9mIHRoZSB0ZXh0IHJhbmdlIGNvbnRhaW5pbmcgZmll
bGQgCisgICAqIEBzdGFibGUgSUNVIDIuMAorICAgKi8KKyAgaW50MzJfdCBlbmRJbmRleDsKK30g
VUZpZWxkUG9zaXRpb247CisKKyNpZiAhVUNPTkZJR19OT19TRVJWSUNFCisvKioKKyAqIE9wYXF1
ZSB0eXBlIHJldHVybmVkIGJ5IHJlZ2lzdGVySW5zdGFuY2UsIHJlZ2lzdGVyRmFjdG9yeSBhbmQg
dW5yZWdpc3RlciBmb3Igc2VydmljZSByZWdpc3RyYXRpb24uCisgKiBAc3RhYmxlIElDVSAyLjYK
KyAqLwordHlwZWRlZiBjb25zdCB2b2lkKiBVUmVnaXN0cnlLZXk7CisjZW5kaWYKKworVV9DREVD
TF9FTkQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3Vu
aWNvZGUvdW51bS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3VudW0uaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xMTAyYmFiNThiM2QxYmIyZTJiMjA4MmNiNTU4OWM1ZGRlZmU4Y2MwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3VudW0uaApA
QCAtMCwwICsxLDk5OSBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0
IChDKSAxOTk3LTIwMTAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRp
b24gYW5kIG90aGVycy4KKyogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogTW9kaWZpY2F0aW9uIEhp
c3Rvcnk6CisqCisqICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3JpcHRpb24KKyogICAw
Ni8yNC85OSAgICBoZWxlbmEgICAgICBJbnRlZ3JhdGVkIEFsYW4ncyBORiBlbmhhbmNlbWVudHMg
YW5kIEphdmEyIGJ1ZyBmaXhlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2lmbmRl
ZiBfVU5VTQorI2RlZmluZSBfVU5VTQorCisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKwor
I2lmICFVQ09ORklHX05PX0ZPUk1BVFRJTkcKKworI2luY2x1ZGUgInVuaWNvZGUvbG9jYWxwb2lu
dGVyLmgiCisjaW5jbHVkZSAidW5pY29kZS91bG9jLmgiCisjaW5jbHVkZSAidW5pY29kZS91bWlz
Yy5oIgorI2luY2x1ZGUgInVuaWNvZGUvcGFyc2VlcnIuaCIKKy8qKgorICogXGZpbGUKKyAqIFxi
cmllZiBDIEFQSTogTnVtYmVyRm9ybWF0CisgKgorICogPGgyPiBOdW1iZXIgRm9ybWF0IEMgQVBJ
IDwvaDI+CisgKgorICogTnVtYmVyIEZvcm1hdCBDIEFQSSAgUHJvdmlkZXMgZnVuY3Rpb25zIGZv
cgorICogZm9ybWF0dGluZyBhbmQgcGFyc2luZyBhIG51bWJlci4gIEFsc28gcHJvdmlkZXMgbWV0
aG9kcyBmb3IKKyAqIGRldGVybWluaW5nIHdoaWNoIGxvY2FsZXMgaGF2ZSBudW1iZXIgZm9ybWF0
cywgYW5kIHdoYXQgdGhlaXIgbmFtZXMKKyAqIGFyZS4KKyAqIDxQPgorICogVU51bWJlckZvcm1h
dCBoZWxwcyB5b3UgdG8gZm9ybWF0IGFuZCBwYXJzZSBudW1iZXJzIGZvciBhbnkgbG9jYWxlLgor
ICogWW91ciBjb2RlIGNhbiBiZSBjb21wbGV0ZWx5IGluZGVwZW5kZW50IG9mIHRoZSBsb2NhbGUg
Y29udmVudGlvbnMKKyAqIGZvciBkZWNpbWFsIHBvaW50cywgdGhvdXNhbmRzLXNlcGFyYXRvcnMs
IG9yIGV2ZW4gdGhlIHBhcnRpY3VsYXIKKyAqIGRlY2ltYWwgZGlnaXRzIHVzZWQsIG9yIHdoZXRo
ZXIgdGhlIG51bWJlciBmb3JtYXQgaXMgZXZlbiBkZWNpbWFsLgorICogVGhlcmUgYXJlIGRpZmZl
cmVudCBudW1iZXIgZm9ybWF0IHN0eWxlcyBsaWtlIGRlY2ltYWwsIGN1cnJlbmN5LAorICogcGVy
Y2VudCBhbmQgc3BlbGxvdXQuCisgKiA8UD4KKyAqIFRvIGZvcm1hdCBhIG51bWJlciBmb3IgdGhl
IGN1cnJlbnQgTG9jYWxlLCB1c2Ugb25lIG9mIHRoZSBzdGF0aWMKKyAqIGZhY3RvcnkgbWV0aG9k
czoKKyAqIDxwcmU+CisgKiBcY29kZQorICogICAgVUNoYXIgbXlTdHJpbmdbMjBdOworICogICAg
ZG91YmxlIG15TnVtYmVyID0gNy4wOworICogICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9f
RVJST1I7CisgKiAgICBVTnVtYmVyRm9ybWF0KiBuZiA9IHVudW1fb3BlbihVTlVNX0RFRkFVTFQs
IE5VTEwsIC0xLCBOVUxMLCBOVUxMLCAmc3RhdHVzKTsKKyAqICAgIHVudW1fZm9ybWF0RG91Ymxl
KG5mLCBteU51bWJlciwgbXlTdHJpbmcsIDIwLCBOVUxMLCAmc3RhdHVzKTsKKyAqICAgIHByaW50
ZigiIEV4YW1wbGUgMTogJXNcbiIsIGF1c3RyZHVwKG15U3RyaW5nKSApOyAvL2F1c3RyZHVwKCBh
IGZ1bmN0aW9uIHVzZWQgdG8gY29udmVydCBVQ2hhciogdG8gY2hhciopCisgKiBcZW5kY29kZQor
ICogPC9wcmU+CisgKiBJZiB5b3UgYXJlIGZvcm1hdHRpbmcgbXVsdGlwbGUgbnVtYmVycywgaXQg
aXMgbW9yZSBlZmZpY2llbnQgdG8gZ2V0CisgKiB0aGUgZm9ybWF0IGFuZCB1c2UgaXQgbXVsdGlw
bGUgdGltZXMgc28gdGhhdCB0aGUgc3lzdGVtIGRvZXNuJ3QKKyAqIGhhdmUgdG8gZmV0Y2ggdGhl
IGluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2NhbCBsYW5ndWFnZSBhbmQgY291bnRyeQorICogY29u
dmVudGlvbnMgbXVsdGlwbGUgdGltZXMuCisgKiA8cHJlPgorICogXGNvZGUKKyAqIHVpbnQzMl90
IGksIHJlc3VsdGxlbmd0aCwgcmVzbGVubmVlZGVkOworICogVUVycm9yQ29kZSBzdGF0dXMgPSBV
X1pFUk9fRVJST1I7CisgKiBVRmllbGRQb3NpdGlvbiBwb3M7CisgKiB1aW50MzJfdCBhW10gPSB7
IDEyMywgMzMzMywgLTEyMzQ1NjcgfTsKKyAqIGNvbnN0IHVpbnQzMl90IGFfbGVuID0gc2l6ZW9m
KGEpIC8gc2l6ZW9mKGFbMF0pOworICogVU51bWJlckZvcm1hdCogbmY7CisgKiBVQ2hhciogcmVz
dWx0ID0gTlVMTDsKKyAqCisgKiBuZiA9IHVudW1fb3BlbihVTlVNX0RFRkFVTFQsIE5VTEwsIC0x
LCBOVUxMLCBOVUxMLCAmc3RhdHVzKTsKKyAqIGZvciAoaSA9IDA7IGkgPCBhX2xlbjsgaSsrKSB7
CisgKiAgICByZXN1bHRsZW5ndGg9MDsKKyAqICAgIHJlc2xlbm5lZWRlZD11bnVtX2Zvcm1hdChu
ZiwgYVtpXSwgTlVMTCwgcmVzdWx0bGVuZ3RoLCAmcG9zLCAmc3RhdHVzKTsKKyAqICAgIHJlc3Vs
dCA9IE5VTEw7CisgKiAgICBpZihzdGF0dXM9PVVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKXsKKyAq
ICAgICAgIHN0YXR1cz1VX1pFUk9fRVJST1I7CisgKiAgICAgICByZXN1bHRsZW5ndGg9cmVzbGVu
bmVlZGVkKzE7CisgKiAgICAgICByZXN1bHQ9KFVDaGFyKiltYWxsb2Moc2l6ZW9mKFVDaGFyKSAq
IHJlc3VsdGxlbmd0aCk7CisgKiAgICAgICB1bnVtX2Zvcm1hdChuZiwgYVtpXSwgcmVzdWx0LCBy
ZXN1bHRsZW5ndGgsICZwb3MsICZzdGF0dXMpOworICogICAgfQorICogICAgcHJpbnRmKCAiIEV4
YW1wbGUgMjogJXNcbiIsIGF1c3RyZHVwKHJlc3VsdCkpOworICogICAgZnJlZShyZXN1bHQpOwor
ICogfQorICogXGVuZGNvZGUKKyAqIDwvcHJlPgorICogVG8gZm9ybWF0IGEgbnVtYmVyIGZvciBh
IGRpZmZlcmVudCBMb2NhbGUsIHNwZWNpZnkgaXQgaW4gdGhlCisgKiBjYWxsIHRvIHVudW1fb3Bl
bigpLgorICogPHByZT4KKyAqIFxjb2RlCisgKiAgICAgVU51bWJlckZvcm1hdCogbmYgPSB1bnVt
X29wZW4oVU5VTV9ERUZBVUxULCBOVUxMLCAtMSwgImZyX0ZSIiwgTlVMTCwgJnN1Y2Nlc3MpCisg
KiBcZW5kY29kZQorICogPC9wcmU+CisgKiBZb3UgY2FuIHVzZSBhIE51bWJlckZvcm1hdCBBUEkg
dW51bV9wYXJzZSgpIHRvIHBhcnNlLgorICogPHByZT4KKyAqIFxjb2RlCisgKiAgICBVRXJyb3JD
b2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAqICAgIGludDMyX3QgcG9zPTA7CisgKiAgICBp
bnQzMl90IG51bTsKKyAqICAgIG51bSA9IHVudW1fcGFyc2UobmYsIHN0ciwgdV9zdHJsZW4oc3Ry
KSwgJnBvcywgJnN0YXR1cyk7CisgKiBcZW5kY29kZQorICogPC9wcmU+CisgKiBVc2UgVU5VTV9E
RUNJTUFMIHRvIGdldCB0aGUgbm9ybWFsIG51bWJlciBmb3JtYXQgZm9yIHRoYXQgY291bnRyeS4K
KyAqIFRoZXJlIGFyZSBvdGhlciBzdGF0aWMgb3B0aW9ucyBhdmFpbGFibGUuICBVc2UgVU5VTV9D
VVJSRU5DWQorICogdG8gZ2V0IHRoZSBjdXJyZW5jeSBudW1iZXIgZm9ybWF0IGZvciB0aGF0IGNv
dW50cnkuICBVc2UgVU5VTV9QRVJDRU5UCisgKiB0byBnZXQgYSBmb3JtYXQgZm9yIGRpc3BsYXlp
bmcgcGVyY2VudGFnZXMuIFdpdGggdGhpcyBmb3JtYXQsIGEKKyAqIGZyYWN0aW9uIGZyb20gMC41
MyBpcyBkaXNwbGF5ZWQgYXMgNTMlLgorICogPFA+CisgKiBVc2UgYSBwYXR0ZXJuIHRvIGNyZWF0
ZSBlaXRoZXIgYSBEZWNpbWFsRm9ybWF0IG9yIGEgUnVsZUJhc2VkTnVtYmVyRm9ybWF0CisgKiBm
b3JtYXR0ZXIuICBUaGUgcGF0dGVybiBtdXN0IGNvbmZvcm0gdG8gdGhlIHN5bnRheCBkZWZpbmVk
IGZvciB0aG9zZQorICogZm9ybWF0dGVycy4KKyAqIDxQPgorICogWW91IGNhbiBhbHNvIGNvbnRy
b2wgdGhlIGRpc3BsYXkgb2YgbnVtYmVycyB3aXRoIHN1Y2ggZnVuY3Rpb24gYXMKKyAqIHVudW1f
Z2V0QXR0cmlidWVzKCkgYW5kIHVudW1fc2V0QXRyaWJ1dGVzKCksIHdoaWNoIGxldCB5b3Ugc2V0
IHRoZQorICogbWltaW51bSBmcmFjdGlvbiBkaWdpdHMsIGdyb3VwaW5nLCBldGMuCisgKiBAc2Vl
IFVOdW1iZXJGb3JtYXRBdHRyaWJ1dGVzIGZvciBtb3JlIGRldGFpbHMKKyAqIDxQPgorICogWW91
IGNhbiBhbHNvIHVzZSBmb3JtcyBvZiB0aGUgcGFyc2UgYW5kIGZvcm1hdCBtZXRob2RzIHdpdGgK
KyAqIFBhcnNlUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHRvIGFsbG93IHlvdSB0bzoKKyAq
IDx1bCB0eXBlPXJvdW5kPgorICogICA8bGk+KGEpIHByb2dyZXNzaXZlbHkgcGFyc2UgdGhyb3Vn
aCBwaWVjZXMgb2YgYSBzdHJpbmcuCisgKiAgIDxsaT4oYikgYWxpZ24gdGhlIGRlY2ltYWwgcG9p
bnQgYW5kIG90aGVyIGFyZWFzLgorICogPC91bD4KKyAqIDxwPgorICogSXQgaXMgYWxzbyBwb3Nz
aWJsZSB0byBjaGFuZ2Ugb3Igc2V0IHRoZSBzeW1ib2xzIHVzZWQgZm9yIGEgcGFydGljdWxhcgor
ICogbG9jYWxlIGxpa2UgdGhlIGN1cnJlbmN5IHN5bWJvbCwgdGhlIGdyb3VwaW5nIHNlcGVyYXRv
ciAsIG1vbmV0YXJ5IHNlcGVyYXRvcgorICogZXRjIGJ5IG1ha2luZyB1c2Ugb2YgZnVuY3Rpb25z
IHVudW1fc2V0U3ltYm9scygpIGFuZCB1bnVtX2dldFN5bWJvbHMoKS4KKyAqLworCisvKiogQSBu
dW1iZXIgZm9ybWF0dGVyLgorICogIEZvciB1c2FnZSBpbiBDIHByb2dyYW1zLgorICogIEBzdGFi
bGUgSUNVIDIuMAorICovCit0eXBlZGVmIHZvaWQqIFVOdW1iZXJGb3JtYXQ7CisKKy8qKiBUaGUg
cG9zc2libGUgbnVtYmVyIGZvcm1hdCBzdHlsZXMuIAorICogIEBzdGFibGUgSUNVIDIuMAorICov
Cit0eXBlZGVmIGVudW0gVU51bWJlckZvcm1hdFN0eWxlIHsKKyAgICAvKioKKyAgICAgKiBEZWNp
bWFsIGZvcm1hdCBkZWZpbmVkIGJ5IHBhdHRlcm4gCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisg
ICAgICovCisgICAgVU5VTV9QQVRURVJOX0RFQ0lNQUw9MCwKKyAgICAvKiogRGVjaW1hbCBmb3Jt
YXQgKi8KKyAgICBVTlVNX0RFQ0lNQUw9MSwKKyAgICAvKiogQ3VycmVuY3kgZm9ybWF0ICovCisg
ICAgVU5VTV9DVVJSRU5DWSwKKyAgICAvKiogUGVyY2VudCBmb3JtYXQgKi8KKyAgICBVTlVNX1BF
UkNFTlQsCisgICAgLyoqIFNjaWVudGlmaWMgZm9ybWF0ICovCisgICAgVU5VTV9TQ0lFTlRJRklD
LAorICAgIC8qKiBTcGVsbG91dCBydWxlLWJhc2VkIGZvcm1hdCAqLworICAgIFVOVU1fU1BFTExP
VVQsCisgICAgLyoqIAorICAgICAqIE9yZGluYWwgcnVsZS1iYXNlZCBmb3JtYXQgCisgICAgICog
QHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVU5VTV9PUkRJTkFMLAorICAgIC8qKiAKKyAg
ICAgKiBEdXJhdGlvbiBydWxlLWJhc2VkIGZvcm1hdCAKKyAgICAgKiBAc3RhYmxlIElDVSAzLjAK
KyAgICAgKi8KKyAgICBVTlVNX0RVUkFUSU9OLAorICAgIC8qKiAKKyAgICAgKiBOdW1iZXJpbmcg
c3lzdGVtIHJ1bGUtYmFzZWQgZm9ybWF0IAorICAgICAqIEBzdGFibGUgSUNVIDQuMgorICAgICAq
LworICAgIFVOVU1fTlVNQkVSSU5HX1NZU1RFTSwKKyAgICAvKiogCisgICAgICogUnVsZS1iYXNl
ZCBmb3JtYXQgZGVmaW5lZCBieSBwYXR0ZXJuIAorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAg
ICAqLworICAgIFVOVU1fUEFUVEVSTl9SVUxFQkFTRUQsCisgICAgLyoqIERlZmF1bHQgZm9ybWF0
ICovCisgICAgVU5VTV9ERUZBVUxUID0gVU5VTV9ERUNJTUFMLAorICAgIC8qKiAoQWxpYXMgZm9y
IFVOVU1fUEFUVEVSTl9ERUNJTUFMKSAqLworICAgIFVOVU1fSUdOT1JFID0gVU5VTV9QQVRURVJO
X0RFQ0lNQUwKK30gVU51bWJlckZvcm1hdFN0eWxlOworCisvKiogVGhlIHBvc3NpYmxlIG51bWJl
ciBmb3JtYXQgcm91bmRpbmcgbW9kZXMuIAorICogIEBzdGFibGUgSUNVIDIuMAorICovCit0eXBl
ZGVmIGVudW0gVU51bWJlckZvcm1hdFJvdW5kaW5nTW9kZSB7CisgICAgVU5VTV9ST1VORF9DRUlM
SU5HLAorICAgIFVOVU1fUk9VTkRfRkxPT1IsCisgICAgVU5VTV9ST1VORF9ET1dOLAorICAgIFVO
VU1fUk9VTkRfVVAsCisgICAgLyoqCisgICAgICogSGFsZi1ldmVuIHJvdW5kaW5nLCBtaXNzcGVs
bGVkIG5hbWUKKyAgICAgKiBAZGVwcmVjYXRlZCwgSUNVIDMuOAorICAgICAqLworICAgIFVOVU1f
Rk9VTkRfSEFMRkVWRU4sCisgICAgVU5VTV9ST1VORF9IQUxGRE9XTiwKKyAgICBVTlVNX1JPVU5E
X0hBTEZVUCwKKyAgICAvKioKKyAgICAgKiBIYWxmLWV2ZW4gcm91bmRpbmcKKyAgICAgKiBAc3Rh
YmxlLCBJQ1UgMy44CisgICAgICovCisgICAgVU5VTV9ST1VORF9IQUxGRVZFTiA9IFVOVU1fRk9V
TkRfSEFMRkVWRU4KK30gVU51bWJlckZvcm1hdFJvdW5kaW5nTW9kZTsKKworLyoqIFRoZSBwb3Nz
aWJsZSBudW1iZXIgZm9ybWF0IHBhZCBwb3NpdGlvbnMuIAorICogIEBzdGFibGUgSUNVIDIuMAor
ICovCit0eXBlZGVmIGVudW0gVU51bWJlckZvcm1hdFBhZFBvc2l0aW9uIHsKKyAgICBVTlVNX1BB
RF9CRUZPUkVfUFJFRklYLAorICAgIFVOVU1fUEFEX0FGVEVSX1BSRUZJWCwKKyAgICBVTlVNX1BB
RF9CRUZPUkVfU1VGRklYLAorICAgIFVOVU1fUEFEX0FGVEVSX1NVRkZJWAorfSBVTnVtYmVyRm9y
bWF0UGFkUG9zaXRpb247CisKKy8qKgorICogQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgVU51bWJl
ckZvcm1hdCBmb3IgZm9ybWF0dGluZyBhbmQgcGFyc2luZworICogbnVtYmVycy4gIEEgVU51bWJl
ckZvcm1hdCBtYXkgYmUgdXNlZCB0byBmb3JtYXQgbnVtYmVycyBieSBjYWxsaW5nCisgKiB7QGxp
bmsgI3VudW1fZm9ybWF0IH0sIGFuZCB0byBwYXJzZSBudW1iZXJzIGJ5IGNhbGxpbmcge0BsaW5r
ICN1bnVtX3BhcnNlIH0uCisgKiBUaGUgY2FsbGVyIG11c3QgY2FsbCB7QGxpbmsgI3VudW1fY2xv
c2UgfSB3aGVuIGRvbmUgdG8gcmVsZWFzZSByZXNvdXJjZXMKKyAqIHVzZWQgYnkgdGhpcyBvYmpl
Y3QuCisgKiBAcGFyYW0gc3R5bGUgVGhlIHR5cGUgb2YgbnVtYmVyIGZvcm1hdCB0byBvcGVuOiBv
bmUgb2YKKyAqIFVOVU1fREVDSU1BTCwgVU5VTV9DVVJSRU5DWSwgVU5VTV9QRVJDRU5ULCBVTlVN
X1NDSUVOVElGSUMsIFVOVU1fU1BFTExPVVQsCisgKiBVTlVNX1BBVFRFUk5fREVDSU1BTCwgVU5V
TV9QQVRURVJOX1JVTEVCQVNFRCwgb3IgVU5VTV9ERUZBVUxULgorICogSWYgVU5VTV9QQVRURVJO
X0RFQ0lNQUwgb3IgVU5VTV9QQVRURVJOX1JVTEVCQVNFRCBpcyBwYXNzZWQgdGhlbiB0aGUKKyAq
IG51bWJlciBmb3JtYXQgaXMgb3BlbmVkIHVzaW5nIHRoZSBnaXZlbiBwYXR0ZXJuLCB3aGljaCBt
dXN0IGNvbmZvcm0KKyAqIHRvIHRoZSBzeW50YXggZGVzY3JpYmVkIGluIERlY2ltYWxGb3JtYXQg
b3IgUnVsZUJhc2VkTnVtYmVyRm9ybWF0LAorICogcmVzcGVjdGl2ZWx5LgorICogQHBhcmFtIHBh
dHRlcm4gQSBwYXR0ZXJuIHNwZWNpZnlpbmcgdGhlIGZvcm1hdCB0byB1c2UuIAorICogVGhpcyBw
YXJhbWV0ZXIgaXMgaWdub3JlZCB1bmxlc3MgdGhlIHN0eWxlIGlzCisgKiBVTlVNX1BBVFRFUk5f
REVDSU1BTCBvciBVTlVNX1BBVFRFUk5fUlVMRUJBU0VELgorICogQHBhcmFtIHBhdHRlcm5MZW5n
dGggVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuLCBvciAtMQorICogaWYg
bnVsbC10ZXJtaW5hdGVkLiBUaGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIHVubGVzcyB0aGUgc3R5
bGUgaXMKKyAqIFVOVU1fUEFUVEVSTi4KKyAqIEBwYXJhbSBsb2NhbGUgQSBsb2NhbGUgaWRlbnRp
ZmllciB0byB1c2UgdG8gZGV0ZXJtaW5lIGZvcm1hdHRpbmcKKyAqIGFuZCBwYXJzaW5nIGNvbnZl
bnRpb25zLCBvciBOVUxMIHRvIHVzZSB0aGUgZGVmYXVsdCBsb2NhbGUuCisgKiBAcGFyYW0gcGFy
c2VFcnIgQSBwb2ludGVyIHRvIGEgVVBhcnNlRXJyb3Igc3RydWN0IHRvIHJlY2VpdmUgdGhlCisg
KiBkZXRhaWxzIG9mIGFueSBwYXJzaW5nIGVycm9ycywgb3IgTlVMTCBpZiBubyBwYXJzaW5nIGVy
cm9yIGRldGFpbHMKKyAqIGFyZSBkZXNpcmVkLgorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIg
dG8gYW4gaW5wdXQtb3V0cHV0IFVFcnJvckNvZGUuCisgKiBAcmV0dXJuIEEgcG9pbnRlciB0byBh
IG5ld2x5IGNyZWF0ZWQgVU51bWJlckZvcm1hdCwgb3IgTlVMTCBpZiBhbgorICogZXJyb3Igb2Nj
dXJyZWQuCisgKiBAc2VlIHVudW1fY2xvc2UKKyAqIEBzZWUgRGVjaW1hbEZvcm1hdAorICogQHN0
YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIFVOdW1iZXJGb3JtYXQqIFVfRVhQT1JUMiAKK3Vu
dW1fb3BlbiggIFVOdW1iZXJGb3JtYXRTdHlsZSAgICBzdHlsZSwKKyAgICAgICAgICAgIGNvbnN0
ICAgIFVDaGFyKiAgICBwYXR0ZXJuLAorICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgIHBh
dHRlcm5MZW5ndGgsCisgICAgICAgICAgICBjb25zdCAgICBjaGFyKiAgICAgbG9jYWxlLAorICAg
ICAgICAgICAgVVBhcnNlRXJyb3IqICAgICAgIHBhcnNlRXJyLAorICAgICAgICAgICAgVUVycm9y
Q29kZSogICAgICAgIHN0YXR1cyk7CisKKworLyoqCisqIENsb3NlIGEgVU51bWJlckZvcm1hdC4K
KyogT25jZSBjbG9zZWQsIGEgVU51bWJlckZvcm1hdCBtYXkgbm8gbG9uZ2VyIGJlIHVzZWQuCisq
IEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBjbG9zZS4KKyogQHN0YWJsZSBJQ1UgMi4wCisq
LworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1bnVtX2Nsb3NlKFVOdW1iZXJGb3JtYXQqIGZt
dCk7CisKKyNpZiBVX1NIT1dfQ1BMVVNQTFVTX0FQSQorCitVX05BTUVTUEFDRV9CRUdJTgorCisv
KioKKyAqIFxjbGFzcyBMb2NhbFVOdW1iZXJGb3JtYXRQb2ludGVyCisgKiAiU21hcnQgcG9pbnRl
ciIgY2xhc3MsIGNsb3NlcyBhIFVOdW1iZXJGb3JtYXQgdmlhIHVudW1fY2xvc2UoKS4KKyAqIEZv
ciBtb3N0IG1ldGhvZHMgc2VlIHRoZSBMb2NhbFBvaW50ZXJCYXNlIGJhc2UgY2xhc3MuCisgKgor
ICogQHNlZSBMb2NhbFBvaW50ZXJCYXNlCisgKiBAc2VlIExvY2FsUG9pbnRlcgorICogQHN0YWJs
ZSBJQ1UgNC40CisgKi8KK1VfREVGSU5FX0xPQ0FMX09QRU5fUE9JTlRFUihMb2NhbFVOdW1iZXJG
b3JtYXRQb2ludGVyLCBVTnVtYmVyRm9ybWF0LCB1bnVtX2Nsb3NlKTsKKworVV9OQU1FU1BBQ0Vf
RU5ECisKKyNlbmRpZgorCisvKioKKyAqIE9wZW4gYSBjb3B5IG9mIGEgVU51bWJlckZvcm1hdC4K
KyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSBkZWVwIGNvcHkuCisgKiBAcGFyYW0gZm10IFRo
ZSBmb3JtYXQgdG8gY29weQorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9y
Q29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMuCisgKiBAcmV0dXJuIEEgcG9pbnRlciB0byBhIFVO
dW1iZXJGb3JtYXQgaWRlbnRpY2FsIHRvIGZtdC4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitV
X1NUQUJMRSBVTnVtYmVyRm9ybWF0KiBVX0VYUE9SVDIgCit1bnVtX2Nsb25lKGNvbnN0IFVOdW1i
ZXJGb3JtYXQgKmZtdCwKKyAgICAgICBVRXJyb3JDb2RlICpzdGF0dXMpOworCisvKioKKyogRm9y
bWF0IGFuIGludGVnZXIgdXNpbmcgYSBVTnVtYmVyRm9ybWF0LgorKiBUaGUgaW50ZWdlciB3aWxs
IGJlIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIFVOdW1iZXJGb3JtYXQncyBsb2NhbGUuCisq
IEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byB1c2UuCisqIEBwYXJhbSBudW1iZXIgVGhlIG51
bWJlciB0byBmb3JtYXQuCisqIEBwYXJhbSByZXN1bHQgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHRv
IHJlY2VpdmUgdGhlIGZvcm1hdHRlZCBudW1iZXIuCisqIEBwYXJhbSByZXN1bHRMZW5ndGggVGhl
IG1heGltdW0gc2l6ZSBvZiByZXN1bHQuCisqIEBwYXJhbSBwb3MgICAgQSBwb2ludGVyIHRvIGEg
VUZpZWxkUG9zaXRpb24uICBPbiBpbnB1dCwgcG9zaXRpb24tPmZpZWxkCisqIGlzIHJlYWQuICBP
biBvdXRwdXQsIHBvc2l0aW9uLT5iZWdpbkluZGV4IGFuZCBwb3NpdGlvbi0+ZW5kSW5kZXggaW5k
aWNhdGUKKyogdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIGluZGljZXMgb2YgZmllbGQgbnVtYmVy
IHBvc2l0aW9uLT5maWVsZCwgaWYgc3VjaAorKiBhIGZpZWxkIGV4aXN0cy4gIFRoaXMgcGFyYW1l
dGVyIG1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIG5vIGZpZWxkCisqIEBwYXJhbSBzdGF0dXMg
QSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1
cm4gVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3VsdExl
bmd0aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorKiBAc2VlIHVudW1fZm9ybWF0SW50NjQK
KyogQHNlZSB1bnVtX2Zvcm1hdERvdWJsZQorKiBAc2VlIHVudW1fcGFyc2UKKyogQHNlZSB1bnVt
X3BhcnNlSW50NjQKKyogQHNlZSB1bnVtX3BhcnNlRG91YmxlCisqIEBzZWUgVUZpZWxkUG9zaXRp
b24KKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1
bnVtX2Zvcm1hdCggICAgY29uc3QgICAgVU51bWJlckZvcm1hdCogICAgZm10LAorICAgICAgICBp
bnQzMl90ICAgICAgICAgICAgbnVtYmVyLAorICAgICAgICBVQ2hhciogICAgICAgICAgICByZXN1
bHQsCisgICAgICAgIGludDMyX3QgICAgICAgICAgICByZXN1bHRMZW5ndGgsCisgICAgICAgIFVG
aWVsZFBvc2l0aW9uICAgICpwb3MsCisgICAgICAgIFVFcnJvckNvZGUqICAgICAgICBzdGF0dXMp
OworCisvKioKKyogRm9ybWF0IGFuIGludDY0IHVzaW5nIGEgVU51bWJlckZvcm1hdC4KKyogVGhl
IGludDY0IHdpbGwgYmUgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgVU51bWJlckZvcm1hdCdz
IGxvY2FsZS4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHVzZS4KKyogQHBhcmFtIG51
bWJlciBUaGUgbnVtYmVyIHRvIGZvcm1hdC4KKyogQHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8g
YSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgZm9ybWF0dGVkIG51bWJlci4KKyogQHBhcmFtIHJlc3Vs
dExlbmd0aCBUaGUgbWF4aW11bSBzaXplIG9mIHJlc3VsdC4KKyogQHBhcmFtIHBvcyAgICBBIHBv
aW50ZXIgdG8gYSBVRmllbGRQb3NpdGlvbi4gIE9uIGlucHV0LCBwb3NpdGlvbi0+ZmllbGQKKyog
aXMgcmVhZC4gIE9uIG91dHB1dCwgcG9zaXRpb24tPmJlZ2luSW5kZXggYW5kIHBvc2l0aW9uLT5l
bmRJbmRleCBpbmRpY2F0ZQorKiB0aGUgYmVnaW5uaW5nIGFuZCBlbmRpbmcgaW5kaWNlcyBvZiBm
aWVsZCBudW1iZXIgcG9zaXRpb24tPmZpZWxkLCBpZiBzdWNoCisqIGEgZmllbGQgZXhpc3RzLiAg
VGhpcyBwYXJhbWV0ZXIgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2Ugbm8gZmllbGQKKyogQHBh
cmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJv
cnMKKyogQHJldHVybiBUaGUgdG90YWwgYnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVyIHRo
YW4gcmVzdWx0TGVuZ3RoLCB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisqIEBzZWUgdW51bV9m
b3JtYXQKKyogQHNlZSB1bnVtX2Zvcm1hdERvdWJsZQorKiBAc2VlIHVudW1fcGFyc2UKKyogQHNl
ZSB1bnVtX3BhcnNlSW50NjQKKyogQHNlZSB1bnVtX3BhcnNlRG91YmxlCisqIEBzZWUgVUZpZWxk
UG9zaXRpb24KKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9S
VDIgCit1bnVtX2Zvcm1hdEludDY0KGNvbnN0IFVOdW1iZXJGb3JtYXQgKmZtdCwKKyAgICAgICAg
aW50NjRfdCAgICAgICAgIG51bWJlciwKKyAgICAgICAgVUNoYXIqICAgICAgICAgIHJlc3VsdCwK
KyAgICAgICAgaW50MzJfdCAgICAgICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAgVUZpZWxkUG9z
aXRpb24gKnBvcywKKyAgICAgICAgVUVycm9yQ29kZSogICAgIHN0YXR1cyk7CisKKy8qKgorKiBG
b3JtYXQgYSBkb3VibGUgdXNpbmcgYSBVTnVtYmVyRm9ybWF0LgorKiBUaGUgZG91YmxlIHdpbGwg
YmUgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgVU51bWJlckZvcm1hdCdzIGxvY2FsZS4KKyog
QHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHVzZS4KKyogQHBhcmFtIG51bWJlciBUaGUgbnVt
YmVyIHRvIGZvcm1hdC4KKyogQHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8g
cmVjZWl2ZSB0aGUgZm9ybWF0dGVkIG51bWJlci4KKyogQHBhcmFtIHJlc3VsdExlbmd0aCBUaGUg
bWF4aW11bSBzaXplIG9mIHJlc3VsdC4KKyogQHBhcmFtIHBvcyAgICBBIHBvaW50ZXIgdG8gYSBV
RmllbGRQb3NpdGlvbi4gIE9uIGlucHV0LCBwb3NpdGlvbi0+ZmllbGQKKyogaXMgcmVhZC4gIE9u
IG91dHB1dCwgcG9zaXRpb24tPmJlZ2luSW5kZXggYW5kIHBvc2l0aW9uLT5lbmRJbmRleCBpbmRp
Y2F0ZQorKiB0aGUgYmVnaW5uaW5nIGFuZCBlbmRpbmcgaW5kaWNlcyBvZiBmaWVsZCBudW1iZXIg
cG9zaXRpb24tPmZpZWxkLCBpZiBzdWNoCisqIGEgZmllbGQgZXhpc3RzLiAgVGhpcyBwYXJhbWV0
ZXIgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2Ugbm8gZmllbGQKKyogQHBhcmFtIHN0YXR1cyBB
IHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVy
biBUaGUgdG90YWwgYnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVyIHRoYW4gcmVzdWx0TGVu
Z3RoLCB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisqIEBzZWUgdW51bV9mb3JtYXQKKyogQHNl
ZSB1bnVtX2Zvcm1hdEludDY0CisqIEBzZWUgdW51bV9wYXJzZQorKiBAc2VlIHVudW1fcGFyc2VJ
bnQ2NAorKiBAc2VlIHVudW1fcGFyc2VEb3VibGUKKyogQHNlZSBVRmllbGRQb3NpdGlvbgorKiBA
c3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VudW1fZm9y
bWF0RG91YmxlKCAgICBjb25zdCAgICBVTnVtYmVyRm9ybWF0KiAgZm10LAorICAgICAgICAgICAg
ZG91YmxlICAgICAgICAgIG51bWJlciwKKyAgICAgICAgICAgIFVDaGFyKiAgICAgICAgICByZXN1
bHQsCisgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgcmVzdWx0TGVuZ3RoLAorICAgICAgICAg
ICAgVUZpZWxkUG9zaXRpb24gICpwb3MsIC8qIDAgaWYgaWdub3JlICovCisgICAgICAgICAgICBV
RXJyb3JDb2RlKiAgICAgc3RhdHVzKTsKKworLyoqCisqIEZvcm1hdCBhIGRlY2ltYWwgbnVtYmVy
IHVzaW5nIGEgVU51bWJlckZvcm1hdC4KKyogVGhlIG51bWJlciB3aWxsIGJlIGZvcm1hdHRlZCBh
Y2NvcmRpbmcgdG8gdGhlIFVOdW1iZXJGb3JtYXQncyBsb2NhbGUuCisqIFRoZSBzeW50YXggb2Yg
dGhlIGlucHV0IG51bWJlciBpcyBhICJudW1lcmljIHN0cmluZyIKKyogYXMgZGVmaW5lZCBpbiB0
aGUgRGVjaW1hbCBBcml0aG1ldGljIFNwZWNpZmljYXRpb24sIGF2YWlsYWJsZSBhdAorKiBodHRw
Oi8vc3BlbGVvdHJvdmUuY29tL2RlY2ltYWwKKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRv
IHVzZS4KKyogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIHRvIGZvcm1hdC4KKyogQHBhcmFtIGxl
bmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBudW1iZXIsIG9yIC0xIGlmIHRoZSBpbnB1dCBp
cyBudWwtdGVybWluYXRlZC4KKyogQHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8gYSBidWZmZXIg
dG8gcmVjZWl2ZSB0aGUgZm9ybWF0dGVkIG51bWJlci4KKyogQHBhcmFtIHJlc3VsdExlbmd0aCBU
aGUgbWF4aW11bSBzaXplIG9mIHJlc3VsdC4KKyogQHBhcmFtIHBvcyAgICBBIHBvaW50ZXIgdG8g
YSBVRmllbGRQb3NpdGlvbi4gIE9uIGlucHV0LCBwb3NpdGlvbi0+ZmllbGQKKyogICAgICAgICAg
ICAgICBpcyByZWFkLiAgT24gb3V0cHV0LCBwb3NpdGlvbi0+YmVnaW5JbmRleCBhbmQgcG9zaXRp
b24tPmVuZEluZGV4IGluZGljYXRlCisqICAgICAgICAgICAgICAgdGhlIGJlZ2lubmluZyBhbmQg
ZW5kaW5nIGluZGljZXMgb2YgZmllbGQgbnVtYmVyIHBvc2l0aW9uLT5maWVsZCwgaWYgc3VjaAor
KiAgICAgICAgICAgICAgIGEgZmllbGQgZXhpc3RzLiAgVGhpcyBwYXJhbWV0ZXIgbWF5IGJlIE5V
TEwsIGluIHdoaWNoIGNhc2UgaXQgaXMgaWdub3JlZC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50
ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUg
dG90YWwgYnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVyIHRoYW4gcmVzdWx0TGVuZ3RoLCB0
aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisqIEBzZWUgdW51bV9mb3JtYXQKKyogQHNlZSB1bnVt
X2Zvcm1hdEludDY0CisqIEBzZWUgdW51bV9wYXJzZQorKiBAc2VlIHVudW1fcGFyc2VJbnQ2NAor
KiBAc2VlIHVudW1fcGFyc2VEb3VibGUKKyogQHNlZSBVRmllbGRQb3NpdGlvbgorKiBAc3RhYmxl
IElDVSA0LjQgCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1bnVtX2Zvcm1hdERl
Y2ltYWwoICAgIGNvbnN0ICAgIFVOdW1iZXJGb3JtYXQqICBmbXQsCisgICAgICAgICAgICBjb25z
dCBjaGFyICogICAgbnVtYmVyLAorICAgICAgICAgICAgaW50MzJfdCAgICAgICAgIGxlbmd0aCwK
KyAgICAgICAgICAgIFVDaGFyKiAgICAgICAgICByZXN1bHQsCisgICAgICAgICAgICBpbnQzMl90
ICAgICAgICAgcmVzdWx0TGVuZ3RoLAorICAgICAgICAgICAgVUZpZWxkUG9zaXRpb24gICpwb3Ms
IC8qIDAgaWYgaWdub3JlICovCisgICAgICAgICAgICBVRXJyb3JDb2RlKiAgICAgc3RhdHVzKTsK
KworLyoqCisgKiBGb3JtYXQgYSBkb3VibGUgY3VycmVuY3kgYW1vdW50IHVzaW5nIGEgVU51bWJl
ckZvcm1hdC4KKyAqIFRoZSBkb3VibGUgd2lsbCBiZSBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRo
ZSBVTnVtYmVyRm9ybWF0J3MgbG9jYWxlLgorICogQHBhcmFtIGZtdCB0aGUgZm9ybWF0dGVyIHRv
IHVzZQorICogQHBhcmFtIG51bWJlciB0aGUgbnVtYmVyIHRvIGZvcm1hdAorICogQHBhcmFtIGN1
cnJlbmN5IHRoZSAzLWxldHRlciBudWxsLXRlcm1pbmF0ZWQgSVNPIDQyMTcgY3VycmVuY3kgY29k
ZQorICogQHBhcmFtIHJlc3VsdCBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byByZWNlaXZlIHRo
ZSBmb3JtYXR0ZWQgbnVtYmVyCisgKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIHRoZSBtYXhpbXVtIG51
bWJlciBvZiBVQ2hhcnMgdG8gd3JpdGUgdG8gcmVzdWx0CisgKiBAcGFyYW0gcG9zIGEgcG9pbnRl
ciB0byBhIFVGaWVsZFBvc2l0aW9uLiAgT24gaW5wdXQsCisgKiBwb3NpdGlvbi0+ZmllbGQgaXMg
cmVhZC4gIE9uIG91dHB1dCwgcG9zaXRpb24tPmJlZ2luSW5kZXggYW5kCisgKiBwb3NpdGlvbi0+
ZW5kSW5kZXggaW5kaWNhdGUgdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIGluZGljZXMgb2YKKyAq
IGZpZWxkIG51bWJlciBwb3NpdGlvbi0+ZmllbGQsIGlmIHN1Y2ggYSBmaWVsZCBleGlzdHMuICBU
aGlzCisgKiBwYXJhbWV0ZXIgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2UgaXQgaXMgaWdub3Jl
ZC4KKyAqIEBwYXJhbSBzdGF0dXMgYSBwb2ludGVyIHRvIGFuIGlucHV0LW91dHB1dCBVRXJyb3JD
b2RlCisgKiBAcmV0dXJuIHRoZSB0b3RhbCBidWZmZXIgc2l6ZSBuZWVkZWQ7IGlmIGdyZWF0ZXIg
dGhhbiByZXN1bHRMZW5ndGgsCisgKiB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisgKiBAc2Vl
IHVudW1fZm9ybWF0RG91YmxlCisgKiBAc2VlIHVudW1fcGFyc2VEb3VibGVDdXJyZW5jeQorICog
QHNlZSBVRmllbGRQb3NpdGlvbgorICogQHN0YWJsZSBJQ1UgMy4wCisgKi8KK1VfU1RBQkxFIGlu
dDMyX3QgVV9FWFBPUlQyIAordW51bV9mb3JtYXREb3VibGVDdXJyZW5jeShjb25zdCBVTnVtYmVy
Rm9ybWF0KiBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBudW1iZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyKiBjdXJyZW5jeSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgVUNoYXIqIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
MzJfdCByZXN1bHRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVGaWVsZFBvc2l0
aW9uKiBwb3MsIC8qIGlnbm9yZWQgaWYgMCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBV
RXJyb3JDb2RlKiBzdGF0dXMpOworCisvKioKKyogUGFyc2UgYSBzdHJpbmcgaW50byBhbiBpbnRl
Z2VyIHVzaW5nIGEgVU51bWJlckZvcm1hdC4KKyogVGhlIHN0cmluZyB3aWxsIGJlIHBhcnNlZCBh
Y2NvcmRpbmcgdG8gdGhlIFVOdW1iZXJGb3JtYXQncyBsb2NhbGUuCisqIEBwYXJhbSBmbXQgVGhl
IGZvcm1hdHRlciB0byB1c2UuCisqIEBwYXJhbSB0ZXh0IFRoZSB0ZXh0IHRvIHBhcnNlLgorKiBA
cGFyYW0gdGV4dExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRleHQsIG9yIC0xIGlmIG51bGwtdGVybWlu
YXRlZC4KKyogQHBhcmFtIHBhcnNlUG9zIElmIG5vdCAwLCBvbiBpbnB1dCBhIHBvaW50ZXIgdG8g
YW4gaW50ZWdlciBzcGVjaWZ5aW5nIHRoZSBvZmZzZXQgYXQgd2hpY2gKKyogdG8gYmVnaW4gcGFy
c2luZy4gIElmIG5vdCAwLCBvbiBvdXRwdXQgdGhlIG9mZnNldCBhdCB3aGljaCBwYXJzaW5nIGVu
ZGVkLgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2Vp
dmUgYW55IGVycm9ycworKiBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgcGFyc2VkIGludGVnZXIK
KyogQHNlZSB1bnVtX3BhcnNlSW50NjQKKyogQHNlZSB1bnVtX3BhcnNlRG91YmxlCisqIEBzZWUg
dW51bV9mb3JtYXQKKyogQHNlZSB1bnVtX2Zvcm1hdEludDY0CisqIEBzZWUgdW51bV9mb3JtYXRE
b3VibGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIg
Cit1bnVtX3BhcnNlKCAgICBjb25zdCAgIFVOdW1iZXJGb3JtYXQqICBmbXQsCisgICAgICAgIGNv
bnN0ICAgVUNoYXIqICAgICAgICAgIHRleHQsCisgICAgICAgIGludDMyX3QgICAgICAgICB0ZXh0
TGVuZ3RoLAorICAgICAgICBpbnQzMl90ICAgICAgICAgKnBhcnNlUG9zIC8qIDAgPSBzdGFydCAq
LywKKyAgICAgICAgVUVycm9yQ29kZSAgICAgICpzdGF0dXMpOworCisvKioKKyogUGFyc2UgYSBz
dHJpbmcgaW50byBhbiBpbnQ2NCB1c2luZyBhIFVOdW1iZXJGb3JtYXQuCisqIFRoZSBzdHJpbmcg
d2lsbCBiZSBwYXJzZWQgYWNjb3JkaW5nIHRvIHRoZSBVTnVtYmVyRm9ybWF0J3MgbG9jYWxlLgor
KiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gdXNlLgorKiBAcGFyYW0gdGV4dCBUaGUgdGV4
dCB0byBwYXJzZS4KKyogQHBhcmFtIHRleHRMZW5ndGggVGhlIGxlbmd0aCBvZiB0ZXh0LCBvciAt
MSBpZiBudWxsLXRlcm1pbmF0ZWQuCisqIEBwYXJhbSBwYXJzZVBvcyBJZiBub3QgMCwgb24gaW5w
dXQgYSBwb2ludGVyIHRvIGFuIGludGVnZXIgc3BlY2lmeWluZyB0aGUgb2Zmc2V0IGF0IHdoaWNo
CisqIHRvIGJlZ2luIHBhcnNpbmcuICBJZiBub3QgMCwgb24gb3V0cHV0IHRoZSBvZmZzZXQgYXQg
d2hpY2ggcGFyc2luZyBlbmRlZC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVy
cm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUgdmFsdWUgb2YgdGhl
IHBhcnNlZCBpbnRlZ2VyCisqIEBzZWUgdW51bV9wYXJzZQorKiBAc2VlIHVudW1fcGFyc2VEb3Vi
bGUKKyogQHNlZSB1bnVtX2Zvcm1hdAorKiBAc2VlIHVudW1fZm9ybWF0SW50NjQKKyogQHNlZSB1
bnVtX2Zvcm1hdERvdWJsZQorKiBAc3RhYmxlIElDVSAyLjgKKyovCitVX1NUQUJMRSBpbnQ2NF90
IFVfRVhQT1JUMiAKK3VudW1fcGFyc2VJbnQ2NChjb25zdCBVTnVtYmVyRm9ybWF0KiAgZm10LAor
ICAgICAgICBjb25zdCBVQ2hhciogIHRleHQsCisgICAgICAgIGludDMyX3QgICAgICAgdGV4dExl
bmd0aCwKKyAgICAgICAgaW50MzJfdCAgICAgICAqcGFyc2VQb3MgLyogMCA9IHN0YXJ0ICovLAor
ICAgICAgICBVRXJyb3JDb2RlICAgICpzdGF0dXMpOworCisvKioKKyogUGFyc2UgYSBzdHJpbmcg
aW50byBhIGRvdWJsZSB1c2luZyBhIFVOdW1iZXJGb3JtYXQuCisqIFRoZSBzdHJpbmcgd2lsbCBi
ZSBwYXJzZWQgYWNjb3JkaW5nIHRvIHRoZSBVTnVtYmVyRm9ybWF0J3MgbG9jYWxlLgorKiBAcGFy
YW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gdXNlLgorKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBw
YXJzZS4KKyogQHBhcmFtIHRleHRMZW5ndGggVGhlIGxlbmd0aCBvZiB0ZXh0LCBvciAtMSBpZiBu
dWxsLXRlcm1pbmF0ZWQuCisqIEBwYXJhbSBwYXJzZVBvcyBJZiBub3QgMCwgb24gaW5wdXQgYSBw
b2ludGVyIHRvIGFuIGludGVnZXIgc3BlY2lmeWluZyB0aGUgb2Zmc2V0IGF0IHdoaWNoCisqIHRv
IGJlZ2luIHBhcnNpbmcuICBJZiBub3QgMCwgb24gb3V0cHV0IHRoZSBvZmZzZXQgYXQgd2hpY2gg
cGFyc2luZyBlbmRlZC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29k
ZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUgdmFsdWUgb2YgdGhlIHBhcnNl
ZCBkb3VibGUKKyogQHNlZSB1bnVtX3BhcnNlCisqIEBzZWUgdW51bV9wYXJzZUludDY0CisqIEBz
ZWUgdW51bV9mb3JtYXQKKyogQHNlZSB1bnVtX2Zvcm1hdEludDY0CisqIEBzZWUgdW51bV9mb3Jt
YXREb3VibGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgZG91YmxlIFVfRVhQT1JU
MiAKK3VudW1fcGFyc2VEb3VibGUoICAgIGNvbnN0ICAgVU51bWJlckZvcm1hdCogIGZtdCwKKyAg
ICAgICAgICAgIGNvbnN0ICAgVUNoYXIqICAgICAgICAgIHRleHQsCisgICAgICAgICAgICBpbnQz
Ml90ICAgICAgICAgdGV4dExlbmd0aCwKKyAgICAgICAgICAgIGludDMyX3QgICAgICAgICAqcGFy
c2VQb3MgLyogMCA9IHN0YXJ0ICovLAorICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICpzdGF0
dXMpOworCisKKy8qKgorKiBQYXJzZSBhIG51bWJlciBmcm9tIGEgc3RyaW5nIGludG8gYW4gdW5m
b3JtYXR0ZWQgbnVtZXJpYyBzdHJpbmcgdXNpbmcgYSBVTnVtYmVyRm9ybWF0LgorKiBUaGUgaW5w
dXQgc3RyaW5nIHdpbGwgYmUgcGFyc2VkIGFjY29yZGluZyB0byB0aGUgVU51bWJlckZvcm1hdCdz
IGxvY2FsZS4KKyogVGhlIHN5bnRheCBvZiB0aGUgb3V0cHV0IGlzIGEgIm51bWVyaWMgc3RyaW5n
IgorKiBhcyBkZWZpbmVkIGluIHRoZSBEZWNpbWFsIEFyaXRobWV0aWMgU3BlY2lmaWNhdGlvbiwg
YXZhaWxhYmxlIGF0CisqIGh0dHA6Ly9zcGVsZW90cm92ZS5jb20vZGVjaW1hbAorKiBAcGFyYW0g
Zm10IFRoZSBmb3JtYXR0ZXIgdG8gdXNlLgorKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBwYXJz
ZS4KKyogQHBhcmFtIHRleHRMZW5ndGggVGhlIGxlbmd0aCBvZiB0ZXh0LCBvciAtMSBpZiBudWxs
LXRlcm1pbmF0ZWQuCisqIEBwYXJhbSBwYXJzZVBvcyBJZiBub3QgMCwgb24gaW5wdXQgYSBwb2lu
dGVyIHRvIGFuIGludGVnZXIgc3BlY2lmeWluZyB0aGUgb2Zmc2V0IGF0IHdoaWNoCisqICAgICAg
ICAgICAgICAgICB0byBiZWdpbiBwYXJzaW5nLiAgSWYgbm90IDAsIG9uIG91dHB1dCB0aGUgb2Zm
c2V0IGF0IHdoaWNoIHBhcnNpbmcgZW5kZWQuCisqIEBwYXJhbSBvdXRCdWYgQSAoY2hhciAqKSBi
dWZmZXIgdG8gcmVjZWl2ZSB0aGUgcGFyc2VkIG51bWJlciBhcyBhIHN0cmluZy4gIFRoZSBvdXRw
dXQgc3RyaW5nCisqICAgICAgICAgICAgICAgd2lsbCBiZSBudWwtdGVybWluYXRlZCBpZiB0aGVy
ZSBpcyBzdWZmaWNpZW50IHNwYWNlLgorKiBAcGFyYW0gb3V0QnVmTGVuZ3RoIFRoZSBzaXplIG9m
IHRoZSBvdXRwdXQgYnVmZmVyLiAgTWF5IGJlIHplcm8sIGluIHdoaWNoIGNhc2UKKyogICAgICAg
ICAgICAgICB0aGUgb3V0QnVmIHBvaW50ZXIgbWF5IGJlIE5VTEwsIGFuZCB0aGUgZnVuY3Rpb24g
d2lsbCByZXR1cm4gdGhlCisqICAgICAgICAgICAgICAgc2l6ZSBvZiB0aGUgb3V0cHV0IHN0cmlu
Zy4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZl
IGFueSBlcnJvcnMKKyogQHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBvdXRwdXQgc3RyaW5nLCBu
b3QgaW5jbHVkaW5nIGFueSB0ZXJtaW5hdGluZyBudWwuCisqIEBzZWUgdW51bV9wYXJzZQorKiBA
c2VlIHVudW1fcGFyc2VJbnQ2NAorKiBAc2VlIHVudW1fZm9ybWF0CisqIEBzZWUgdW51bV9mb3Jt
YXRJbnQ2NAorKiBAc2VlIHVudW1fZm9ybWF0RG91YmxlCisqIEBzdGFibGUgSUNVIDQuNAorKi8K
K1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordW51bV9wYXJzZURlY2ltYWwoY29uc3QgICBV
TnVtYmVyRm9ybWF0KiAgZm10LAorICAgICAgICAgICAgICAgICBjb25zdCAgIFVDaGFyKiAgICAg
ICAgICB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICB0ZXh0
TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAqcGFyc2VQ
b3MgLyogMCA9IHN0YXJ0ICovLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAg
ICAgICAqb3V0QnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICBv
dXRCdWZMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICpz
dGF0dXMpOworCisvKioKKyAqIFBhcnNlIGEgc3RyaW5nIGludG8gYSBkb3VibGUgYW5kIGEgY3Vy
cmVuY3kgdXNpbmcgYSBVTnVtYmVyRm9ybWF0LgorICogVGhlIHN0cmluZyB3aWxsIGJlIHBhcnNl
ZCBhY2NvcmRpbmcgdG8gdGhlIFVOdW1iZXJGb3JtYXQncyBsb2NhbGUuCisgKiBAcGFyYW0gZm10
IHRoZSBmb3JtYXR0ZXIgdG8gdXNlCisgKiBAcGFyYW0gdGV4dCB0aGUgdGV4dCB0byBwYXJzZQor
ICogQHBhcmFtIHRleHRMZW5ndGggdGhlIGxlbmd0aCBvZiB0ZXh0LCBvciAtMSBpZiBudWxsLXRl
cm1pbmF0ZWQKKyAqIEBwYXJhbSBwYXJzZVBvcyBhIHBvaW50ZXIgdG8gYW4gb2Zmc2V0IGluZGV4
IGludG8gdGV4dCBhdCB3aGljaCB0bworICogYmVnaW4gcGFyc2luZy4gT24gb3V0cHV0LCAqcGFy
c2VQb3Mgd2lsbCBwb2ludCBhZnRlciB0aGUgbGFzdAorICogcGFyc2VkIGNoYXJhY3Rlci4gIFRo
aXMgcGFyYW1ldGVyIG1heSBiZSAwLCBpbiB3aGljaCBjYXNlIHBhcnNpbmcKKyAqIGJlZ2lucyBh
dCBvZmZzZXQgMC4KKyAqIEBwYXJhbSBjdXJyZW5jeSBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0
byByZWNlaXZlIHRoZSBwYXJzZWQgbnVsbC0KKyAqIHRlcm1pbmF0ZWQgY3VycmVuY3kuICBUaGlz
IGJ1ZmZlciBtdXN0IGhhdmUgYSBjYXBhY2l0eSBvZiBhdCBsZWFzdAorICogNCBVQ2hhcnMuCisg
KiBAcGFyYW0gc3RhdHVzIGEgcG9pbnRlciB0byBhbiBpbnB1dC1vdXRwdXQgVUVycm9yQ29kZQor
ICogQHJldHVybiB0aGUgcGFyc2VkIGRvdWJsZQorICogQHNlZSB1bnVtX3BhcnNlRG91YmxlCisg
KiBAc2VlIHVudW1fZm9ybWF0RG91YmxlQ3VycmVuY3kKKyAqIEBzdGFibGUgSUNVIDMuMAorICov
CitVX1NUQUJMRSBkb3VibGUgVV9FWFBPUlQyCit1bnVtX3BhcnNlRG91YmxlQ3VycmVuY3koY29u
c3QgVU51bWJlckZvcm1hdCogZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVD
aGFyKiB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgdGV4dExlbmd0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90KiBwYXJzZVBvcywgLyogMCA9IHN0YXJ0
ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIqIGN1cnJlbmN5LAorICAgICAgICAg
ICAgICAgICAgICAgICAgIFVFcnJvckNvZGUqIHN0YXR1cyk7CisKKy8qKgorICogU2V0IHRoZSBw
YXR0ZXJuIHVzZWQgYnkgYSBVTnVtYmVyRm9ybWF0LiAgVGhpcyBjYW4gb25seSBiZSB1c2VkCisg
KiBvbiBhIERlY2ltYWxGb3JtYXQsIG90aGVyIGZvcm1hdHMgcmV0dXJuIFVfSUxMRUdBTF9BUkdV
TUVOVF9FUlJPUgorICogaW4gdGhlIHN0YXR1cy4KKyAqIEBwYXJhbSBmb3JtYXQgVGhlIGZvcm1h
dHRlciB0byBzZXQuCisgKiBAcGFyYW0gbG9jYWxpemVkIFRSVUUgaWYgdGhlIHBhdHRlcm4gaXMg
bG9jYWxpemVkLCBGQUxTRSBvdGhlcndpc2UuCisgKiBAcGFyYW0gcGF0dGVybiBUaGUgbmV3IHBh
dHRlcm4KKyAqIEBwYXJhbSBwYXR0ZXJuTGVuZ3RoIFRoZSBsZW5ndGggb2YgcGF0dGVybiwgb3Ig
LTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorICogQHBhcmFtIHBhcnNlRXJyb3IgQSBwb2ludGVyIHRv
IFVQYXJzZUVycm9yIHRvIHJlY2lldmUgaW5mb3JtYXRpb24KKyAqIGFib3V0IGVycm9ycyBvY2N1
cnJlZCBkdXJpbmcgcGFyc2luZywgb3IgTlVMTCBpZiBubyBwYXJzZSBlcnJvcgorICogaW5mb3Jt
YXRpb24gaXMgZGVzaXJlZC4KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIGlucHV0
LW91dHB1dCBVRXJyb3JDb2RlLgorICogQHNlZSB1bnVtX3RvUGF0dGVybgorICogQHNlZSBEZWNp
bWFsRm9ybWF0CisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9S
VDIgCit1bnVtX2FwcGx5UGF0dGVybiggICAgICAgICAgVU51bWJlckZvcm1hdCAgKmZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCAgICAgICAgICBsb2NhbGl6ZWQsCisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0ICAgVUNoYXIgICAgICAgICAgKnBhdHRlcm4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgIHBhdHRlcm5MZW5ndGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBhcnNlRXJyb3IgICAgKnBhcnNlRXJyb3IsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgKnN0YXR1cworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKworLyoqCisqIEdldCBhIGxvY2FsZSBm
b3Igd2hpY2ggZGVjaW1hbCBmb3JtYXR0aW5nIHBhdHRlcm5zIGFyZSBhdmFpbGFibGUuCisqIEEg
VU51bWJlckZvcm1hdCBpbiBhIGxvY2FsZSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIHdpbGwg
cGVyZm9ybSB0aGUgY29ycmVjdAorKiBmb3JtYXR0aW5nIGFuZCBwYXJzaW5nIGZvciB0aGUgbG9j
YWxlLiAgVGhlIHJlc3VsdHMgb2YgdGhpcyBjYWxsIGFyZSBub3QKKyogdmFsaWQgZm9yIHJ1bGUt
YmFzZWQgbnVtYmVyIGZvcm1hdHMuCisqIEBwYXJhbSBsb2NhbGVJbmRleCBUaGUgaW5kZXggb2Yg
dGhlIGRlc2lyZWQgbG9jYWxlLgorKiBAcmV0dXJuIEEgbG9jYWxlIGZvciB3aGljaCBudW1iZXIg
Zm9ybWF0dGluZyBwYXR0ZXJucyBhcmUgYXZhaWxhYmxlLCBvciAwIGlmIG5vbmUuCisqIEBzZWUg
dW51bV9jb3VudEF2YWlsYWJsZQorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBjb25z
dCBjaGFyKiBVX0VYUE9SVDIgCit1bnVtX2dldEF2YWlsYWJsZShpbnQzMl90IGxvY2FsZUluZGV4
KTsKKworLyoqCisqIERldGVybWluZSBob3cgbWFueSBsb2NhbGVzIGhhdmUgZGVjaW1hbCBmb3Jt
YXR0aW5nIHBhdHRlcm5zIGF2YWlsYWJsZS4gIFRoZQorKiByZXN1bHRzIG9mIHRoaXMgY2FsbCBh
cmUgbm90IHZhbGlkIGZvciBydWxlLWJhc2VkIG51bWJlciBmb3JtYXRzLgorKiBUaGlzIGZ1bmN0
aW9uIGlzIHVzZWZ1bCBmb3IgZGV0ZXJtaW5pbmcgdGhlIGxvb3AgZW5kaW5nIGNvbmRpdGlvbiBm
b3IKKyogY2FsbHMgdG8ge0BsaW5rICN1bnVtX2dldEF2YWlsYWJsZSB9LgorKiBAcmV0dXJuIFRo
ZSBudW1iZXIgb2YgbG9jYWxlcyBmb3Igd2hpY2ggZGVjaW1hbCBmb3JtYXR0aW5nIHBhdHRlcm5z
IGFyZSBhdmFpbGFibGUuCisqIEBzZWUgdW51bV9nZXRBdmFpbGFibGUKKyogQHN0YWJsZSBJQ1Ug
Mi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1bnVtX2NvdW50QXZhaWxhYmxl
KHZvaWQpOworCisvKiogVGhlIHBvc3NpYmxlIFVOdW1iZXJGb3JtYXQgbnVtZXJpYyBhdHRyaWJ1
dGVzIEBzdGFibGUgSUNVIDIuMCAqLwordHlwZWRlZiBlbnVtIFVOdW1iZXJGb3JtYXRBdHRyaWJ1
dGUgeworICAvKiogUGFyc2UgaW50ZWdlcnMgb25seSAqLworICBVTlVNX1BBUlNFX0lOVF9PTkxZ
LAorICAvKiogVXNlIGdyb3VwaW5nIHNlcGFyYXRvciAqLworICBVTlVNX0dST1VQSU5HX1VTRUQs
CisgIC8qKiBBbHdheXMgc2hvdyBkZWNpbWFsIHBvaW50ICovCisgIFVOVU1fREVDSU1BTF9BTFdB
WVNfU0hPV04sCisgIC8qKiBNYXhpbXVtIGludGVnZXIgZGlnaXRzICovCisgIFVOVU1fTUFYX0lO
VEVHRVJfRElHSVRTLAorICAvKiogTWluaW11bSBpbnRlZ2VyIGRpZ2l0cyAqLworICBVTlVNX01J
Tl9JTlRFR0VSX0RJR0lUUywKKyAgLyoqIEludGVnZXIgZGlnaXRzICovCisgIFVOVU1fSU5URUdF
Ul9ESUdJVFMsCisgIC8qKiBNYXhpbXVtIGZyYWN0aW9uIGRpZ2l0cyAqLworICBVTlVNX01BWF9G
UkFDVElPTl9ESUdJVFMsCisgIC8qKiBNaW5pbXVtIGZyYWN0aW9uIGRpZ2l0cyAqLworICBVTlVN
X01JTl9GUkFDVElPTl9ESUdJVFMsCisgIC8qKiBGcmFjdGlvbiBkaWdpdHMgKi8KKyAgVU5VTV9G
UkFDVElPTl9ESUdJVFMsCisgIC8qKiBNdWx0aXBsaWVyICovCisgIFVOVU1fTVVMVElQTElFUiwK
KyAgLyoqIEdyb3VwaW5nIHNpemUgKi8KKyAgVU5VTV9HUk9VUElOR19TSVpFLAorICAvKiogUm91
bmRpbmcgTW9kZSAqLworICBVTlVNX1JPVU5ESU5HX01PREUsCisgIC8qKiBSb3VuZGluZyBpbmNy
ZW1lbnQgKi8KKyAgVU5VTV9ST1VORElOR19JTkNSRU1FTlQsCisgIC8qKiBUaGUgd2lkdGggdG8g
d2hpY2ggdGhlIG91dHB1dCBvZiA8Y29kZT5mb3JtYXQoKTwvY29kZT4gaXMgcGFkZGVkLiAqLwor
ICBVTlVNX0ZPUk1BVF9XSURUSCwKKyAgLyoqIFRoZSBwb3NpdGlvbiBhdCB3aGljaCBwYWRkaW5n
IHdpbGwgdGFrZSBwbGFjZS4gKi8KKyAgVU5VTV9QQURESU5HX1BPU0lUSU9OLAorICAvKiogU2Vj
b25kYXJ5IGdyb3VwaW5nIHNpemUgKi8KKyAgVU5VTV9TRUNPTkRBUllfR1JPVVBJTkdfU0laRSwK
KyAgLyoqIFVzZSBzaWduaWZpY2FudCBkaWdpdHMKKyAgICogQHN0YWJsZSBJQ1UgMy4wICovCisg
IFVOVU1fU0lHTklGSUNBTlRfRElHSVRTX1VTRUQsCisgIC8qKiBNaW5pbXVtIHNpZ25pZmljYW50
IGRpZ2l0cworICAgKiBAc3RhYmxlIElDVSAzLjAgKi8KKyAgVU5VTV9NSU5fU0lHTklGSUNBTlRf
RElHSVRTLAorICAvKiogTWF4aW11bSBzaWduaWZpY2FudCBkaWdpdHMKKyAgICogQHN0YWJsZSBJ
Q1UgMy4wICovCisgIFVOVU1fTUFYX1NJR05JRklDQU5UX0RJR0lUUywKKyAgLyoqIExlbmllbnQg
cGFyc2UgbW9kZSB1c2VkIGJ5IHJ1bGUtYmFzZWQgZm9ybWF0cy4KKyAgICogQHN0YWJsZSBJQ1Ug
My4wCisgICAqLworICBVTlVNX0xFTklFTlRfUEFSU0UKK30gVU51bWJlckZvcm1hdEF0dHJpYnV0
ZTsKKworLyoqCisqIEdldCBhIG51bWVyaWMgYXR0cmlidXRlIGFzc29jaWF0ZWQgd2l0aCBhIFVO
dW1iZXJGb3JtYXQuCisqIEFuIGV4YW1wbGUgb2YgYSBudW1lcmljIGF0dHJpYnV0ZSBpcyB0aGUg
bnVtYmVyIG9mIGludGVnZXIgZGlnaXRzIGEgZm9ybWF0dGVyIHdpbGwgcHJvZHVjZS4KKyogQHBh
cmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHF1ZXJ5LgorKiBAcGFyYW0gYXR0ciBUaGUgYXR0cmli
dXRlIHRvIHF1ZXJ5OyBvbmUgb2YgVU5VTV9QQVJTRV9JTlRfT05MWSwgVU5VTV9HUk9VUElOR19V
U0VELAorKiBVTlVNX0RFQ0lNQUxfQUxXQVlTX1NIT1dOLCBVTlVNX01BWF9JTlRFR0VSX0RJR0lU
UywgVU5VTV9NSU5fSU5URUdFUl9ESUdJVFMsIFVOVU1fSU5URUdFUl9ESUdJVFMsCisqIFVOVU1f
TUFYX0ZSQUNUSU9OX0RJR0lUUywgVU5VTV9NSU5fRlJBQ1RJT05fRElHSVRTLCBVTlVNX0ZSQUNU
SU9OX0RJR0lUUywgVU5VTV9NVUxUSVBMSUVSLAorKiBVTlVNX0dST1VQSU5HX1NJWkUsIFVOVU1f
Uk9VTkRJTkdfTU9ERSwgVU5VTV9GT1JNQVRfV0lEVEgsIFVOVU1fUEFERElOR19QT1NJVElPTiwg
VU5VTV9TRUNPTkRBUllfR1JPVVBJTkdfU0laRS4KKyogQHJldHVybiBUaGUgdmFsdWUgb2YgYXR0
ci4KKyogQHNlZSB1bnVtX3NldEF0dHJpYnV0ZQorKiBAc2VlIHVudW1fZ2V0RG91YmxlQXR0cmli
dXRlCisqIEBzZWUgdW51bV9zZXREb3VibGVBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX2dldFRleHRB
dHRyaWJ1dGUKKyogQHNlZSB1bnVtX3NldFRleHRBdHRyaWJ1dGUKKyogQHN0YWJsZSBJQ1UgMi4w
CisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1bnVtX2dldEF0dHJpYnV0ZShjb25z
dCBVTnVtYmVyRm9ybWF0KiAgICAgICAgICBmbXQsCisgICAgICAgICAgVU51bWJlckZvcm1hdEF0
dHJpYnV0ZSAgYXR0cik7CisKKy8qKgorKiBTZXQgYSBudW1lcmljIGF0dHJpYnV0ZSBhc3NvY2lh
dGVkIHdpdGggYSBVTnVtYmVyRm9ybWF0LgorKiBBbiBleGFtcGxlIG9mIGEgbnVtZXJpYyBhdHRy
aWJ1dGUgaXMgdGhlIG51bWJlciBvZiBpbnRlZ2VyIGRpZ2l0cyBhIGZvcm1hdHRlciB3aWxsIHBy
b2R1Y2UuICBJZiB0aGUKKyogZm9ybWF0dGVyIGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlIGF0dHJp
YnV0ZSwgdGhlIGNhbGwgaXMgaWdub3JlZC4gIFJ1bGUtYmFzZWQgZm9ybWF0dGVycyBvbmx5IHVu
ZGVyc3RhbmQKKyogdGhlIGxlbmllbnQtcGFyc2UgYXR0cmlidXRlLgorKiBAcGFyYW0gZm10IFRo
ZSBmb3JtYXR0ZXIgdG8gc2V0LgorKiBAcGFyYW0gYXR0ciBUaGUgYXR0cmlidXRlIHRvIHNldDsg
b25lIG9mIFVOVU1fUEFSU0VfSU5UX09OTFksIFVOVU1fR1JPVVBJTkdfVVNFRCwKKyogVU5VTV9E
RUNJTUFMX0FMV0FZU19TSE9XTiwgVU5VTV9NQVhfSU5URUdFUl9ESUdJVFMsIFVOVU1fTUlOX0lO
VEVHRVJfRElHSVRTLCBVTlVNX0lOVEVHRVJfRElHSVRTLAorKiBVTlVNX01BWF9GUkFDVElPTl9E
SUdJVFMsIFVOVU1fTUlOX0ZSQUNUSU9OX0RJR0lUUywgVU5VTV9GUkFDVElPTl9ESUdJVFMsIFVO
VU1fTVVMVElQTElFUiwKKyogVU5VTV9HUk9VUElOR19TSVpFLCBVTlVNX1JPVU5ESU5HX01PREUs
IFVOVU1fRk9STUFUX1dJRFRILCBVTlVNX1BBRERJTkdfUE9TSVRJT04sIFVOVU1fU0VDT05EQVJZ
X0dST1VQSU5HX1NJWkUsCisqIG9yIFVOVU1fTEVOSUVOVF9QQVJTRS4KKyogQHBhcmFtIG5ld1Zh
bHVlIFRoZSBuZXcgdmFsdWUgb2YgYXR0ci4KKyogQHNlZSB1bnVtX2dldEF0dHJpYnV0ZQorKiBA
c2VlIHVudW1fZ2V0RG91YmxlQXR0cmlidXRlCisqIEBzZWUgdW51bV9zZXREb3VibGVBdHRyaWJ1
dGUKKyogQHNlZSB1bnVtX2dldFRleHRBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX3NldFRleHRBdHRy
aWJ1dGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1
bnVtX3NldEF0dHJpYnV0ZSggICAgVU51bWJlckZvcm1hdCogICAgICAgICAgZm10LAorICAgICAg
ICAgICAgVU51bWJlckZvcm1hdEF0dHJpYnV0ZSAgYXR0ciwKKyAgICAgICAgICAgIGludDMyX3Qg
ICAgICAgICAgICAgICAgIG5ld1ZhbHVlKTsKKworCisvKioKKyogR2V0IGEgbnVtZXJpYyBhdHRy
aWJ1dGUgYXNzb2NpYXRlZCB3aXRoIGEgVU51bWJlckZvcm1hdC4KKyogQW4gZXhhbXBsZSBvZiBh
IG51bWVyaWMgYXR0cmlidXRlIGlzIHRoZSBudW1iZXIgb2YgaW50ZWdlciBkaWdpdHMgYSBmb3Jt
YXR0ZXIgd2lsbCBwcm9kdWNlLgorKiBJZiB0aGUgZm9ybWF0dGVyIGRvZXMgbm90IHVuZGVyc3Rh
bmQgdGhlIGF0dHJpYnV0ZSwgLTEgaXMgcmV0dXJuZWQuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1h
dHRlciB0byBxdWVyeS4KKyogQHBhcmFtIGF0dHIgVGhlIGF0dHJpYnV0ZSB0byBxdWVyeTsgZS5n
LiBVTlVNX1JPVU5ESU5HX0lOQ1JFTUVOVC4KKyogQHJldHVybiBUaGUgdmFsdWUgb2YgYXR0ci4K
KyogQHNlZSB1bnVtX2dldEF0dHJpYnV0ZQorKiBAc2VlIHVudW1fc2V0QXR0cmlidXRlCisqIEBz
ZWUgdW51bV9zZXREb3VibGVBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX2dldFRleHRBdHRyaWJ1dGUK
KyogQHNlZSB1bnVtX3NldFRleHRBdHRyaWJ1dGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9T
VEFCTEUgZG91YmxlIFVfRVhQT1JUMiAKK3VudW1fZ2V0RG91YmxlQXR0cmlidXRlKGNvbnN0IFVO
dW1iZXJGb3JtYXQqICAgICAgICAgIGZtdCwKKyAgICAgICAgICBVTnVtYmVyRm9ybWF0QXR0cmli
dXRlICBhdHRyKTsKKworLyoqCisqIFNldCBhIG51bWVyaWMgYXR0cmlidXRlIGFzc29jaWF0ZWQg
d2l0aCBhIFVOdW1iZXJGb3JtYXQuCisqIEFuIGV4YW1wbGUgb2YgYSBudW1lcmljIGF0dHJpYnV0
ZSBpcyB0aGUgbnVtYmVyIG9mIGludGVnZXIgZGlnaXRzIGEgZm9ybWF0dGVyIHdpbGwgcHJvZHVj
ZS4KKyogSWYgdGhlIGZvcm1hdHRlciBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoZSBhdHRyaWJ1dGUs
IHRoaXMgY2FsbCBpcyBpZ25vcmVkLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gc2V0
LgorKiBAcGFyYW0gYXR0ciBUaGUgYXR0cmlidXRlIHRvIHNldDsgZS5nLiBVTlVNX1JPVU5ESU5H
X0lOQ1JFTUVOVC4KKyogQHBhcmFtIG5ld1ZhbHVlIFRoZSBuZXcgdmFsdWUgb2YgYXR0ci4KKyog
QHNlZSB1bnVtX2dldEF0dHJpYnV0ZQorKiBAc2VlIHVudW1fc2V0QXR0cmlidXRlCisqIEBzZWUg
dW51bV9nZXREb3VibGVBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX2dldFRleHRBdHRyaWJ1dGUKKyog
QHNlZSB1bnVtX3NldFRleHRBdHRyaWJ1dGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFC
TEUgdm9pZCBVX0VYUE9SVDIgCit1bnVtX3NldERvdWJsZUF0dHJpYnV0ZSggICAgVU51bWJlckZv
cm1hdCogICAgICAgICAgZm10LAorICAgICAgICAgICAgVU51bWJlckZvcm1hdEF0dHJpYnV0ZSAg
YXR0ciwKKyAgICAgICAgICAgIGRvdWJsZSAgICAgICAgICAgICAgICAgbmV3VmFsdWUpOworCisv
KiogVGhlIHBvc3NpYmxlIFVOdW1iZXJGb3JtYXQgdGV4dCBhdHRyaWJ1dGVzIEBzdGFibGUgSUNV
IDIuMCovCit0eXBlZGVmIGVudW0gVU51bWJlckZvcm1hdFRleHRBdHRyaWJ1dGUgeworICAvKiog
UG9zaXRpdmUgcHJlZml4ICovCisgIFVOVU1fUE9TSVRJVkVfUFJFRklYLAorICAvKiogUG9zaXRp
dmUgc3VmZml4ICovCisgIFVOVU1fUE9TSVRJVkVfU1VGRklYLAorICAvKiogTmVnYXRpdmUgcHJl
Zml4ICovCisgIFVOVU1fTkVHQVRJVkVfUFJFRklYLAorICAvKiogTmVnYXRpdmUgc3VmZml4ICov
CisgIFVOVU1fTkVHQVRJVkVfU1VGRklYLAorICAvKiogVGhlIGNoYXJhY3RlciB1c2VkIHRvIHBh
ZCB0byB0aGUgZm9ybWF0IHdpZHRoLiAqLworICBVTlVNX1BBRERJTkdfQ0hBUkFDVEVSLAorICAv
KiogVGhlIElTTyBjdXJyZW5jeSBjb2RlICovCisgIFVOVU1fQ1VSUkVOQ1lfQ09ERSwKKyAgLyoq
CisgICAqIFRoZSBkZWZhdWx0IHJ1bGUgc2V0LiAgVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSB3aXRo
IHJ1bGUtYmFzZWQgZm9ybWF0dGVycy4KKyAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAqLworICBV
TlVNX0RFRkFVTFRfUlVMRVNFVCwKKyAgLyoqCisgICAqIFRoZSBwdWJsaWMgcnVsZSBzZXRzLiAg
VGhpcyBpcyBvbmx5IGF2YWlsYWJsZSB3aXRoIHJ1bGUtYmFzZWQgZm9ybWF0dGVycy4KKyAgICog
VGhpcyBpcyBhIHJlYWQtb25seSBhdHRyaWJ1dGUuICBUaGUgcHVibGljIHJ1bGVzZXRzIGFyZSBy
ZXR1cm5lZCBhcyBhCisgICAqIHNpbmdsZSBzdHJpbmcsIHdpdGggZWFjaCBydWxlc2V0IG5hbWUg
ZGVsaW1pdGVkIGJ5ICc7JyAoc2VtaWNvbG9uKS4KKyAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAq
LworICBVTlVNX1BVQkxJQ19SVUxFU0VUUworfSBVTnVtYmVyRm9ybWF0VGV4dEF0dHJpYnV0ZTsK
KworLyoqCisqIEdldCBhIHRleHQgYXR0cmlidXRlIGFzc29jaWF0ZWQgd2l0aCBhIFVOdW1iZXJG
b3JtYXQuCisqIEFuIGV4YW1wbGUgb2YgYSB0ZXh0IGF0dHJpYnV0ZSBpcyB0aGUgc3VmZml4IGZv
ciBwb3NpdGl2ZSBudW1iZXJzLiAgSWYgdGhlIGZvcm1hdHRlcgorKiBkb2VzIG5vdCB1bmRlcnN0
YW5kIHRoZSBhdHRyaWJ1dHJlLCBVX1VOU1VQUE9SVEVEX0VSUk9SIGlzIHJldHVybmVkIGFzIHRo
ZSBzdGF0dXMuCisqIFJ1bGUtYmFzZWQgZm9ybWF0dGVycyBvbmx5IHVuZGVyc3RhbmQgVU5VTV9E
RUZBVUxUX1JVTEVTRVQgYW5kIFVOVU1fUFVCTElDX1JVTEVTRVRTLgorKiBAcGFyYW0gZm10IFRo
ZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisqIEBwYXJhbSB0YWcgVGhlIGF0dHJpYnV0ZSB0byBxdWVy
eTsgb25lIG9mIFVOVU1fUE9TSVRJVkVfUFJFRklYLCBVTlVNX1BPU0lUSVZFX1NVRkZJWCwKKyog
VU5VTV9ORUdBVElWRV9QUkVGSVgsIFVOVU1fTkVHQVRJVkVfU1VGRklYLCBVTlVNX1BBRERJTkdf
Q0hBUkFDVEVSLCBVTlVNX0NVUlJFTkNZX0NPREUsCisqIFVOVU1fREVGQVVMVF9SVUxFU0VULCBv
ciBVTlVNX1BVQkxJQ19SVUxFU0VUUy4KKyogQHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8gYSBi
dWZmZXIgdG8gcmVjZWl2ZSB0aGUgYXR0cmlidXRlLgorKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIFRo
ZSBtYXhpbXVtIHNpemUgb2YgcmVzdWx0LgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBh
biBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAcmV0dXJuIFRoZSB0b3RhbCBi
dWZmZXIgc2l6ZSBuZWVkZWQ7IGlmIGdyZWF0ZXIgdGhhbiByZXN1bHRMZW5ndGgsIHRoZSBvdXRw
dXQgd2FzIHRydW5jYXRlZC4KKyogQHNlZSB1bnVtX3NldFRleHRBdHRyaWJ1dGUKKyogQHNlZSB1
bnVtX2dldEF0dHJpYnV0ZQorKiBAc2VlIHVudW1fc2V0QXR0cmlidXRlCisqIEBzdGFibGUgSUNV
IDIuMAorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordW51bV9nZXRUZXh0QXR0cmli
dXRlKCAgICBjb25zdCAgICBVTnVtYmVyRm9ybWF0KiAgICAgICAgICAgICAgICAgICAgZm10LAor
ICAgICAgICAgICAgVU51bWJlckZvcm1hdFRleHRBdHRyaWJ1dGUgICAgICB0YWcsCisgICAgICAg
ICAgICBVQ2hhciogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LAorICAgICAgICAg
ICAgaW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRMZW5ndGgsCisgICAg
ICAgICAgICBVRXJyb3JDb2RlKiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyk7CisKKy8q
KgorKiBTZXQgYSB0ZXh0IGF0dHJpYnV0ZSBhc3NvY2lhdGVkIHdpdGggYSBVTnVtYmVyRm9ybWF0
LgorKiBBbiBleGFtcGxlIG9mIGEgdGV4dCBhdHRyaWJ1dGUgaXMgdGhlIHN1ZmZpeCBmb3IgcG9z
aXRpdmUgbnVtYmVycy4gIFJ1bGUtYmFzZWQgZm9ybWF0dGVycworKiBvbmx5IHVuZGVyc3RhbmQg
VU5VTV9ERUZBVUxUX1JVTEVTRVQuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBzZXQu
CisqIEBwYXJhbSB0YWcgVGhlIGF0dHJpYnV0ZSB0byBzZXQ7IG9uZSBvZiBVTlVNX1BPU0lUSVZF
X1BSRUZJWCwgVU5VTV9QT1NJVElWRV9TVUZGSVgsCisqIFVOVU1fTkVHQVRJVkVfUFJFRklYLCBV
TlVNX05FR0FUSVZFX1NVRkZJWCwgVU5VTV9QQURESU5HX0NIQVJBQ1RFUiwgVU5VTV9DVVJSRU5D
WV9DT0RFLAorKiBvciBVTlVNX0RFRkFVTFRfUlVMRVNFVC4KKyogQHBhcmFtIG5ld1ZhbHVlIFRo
ZSBuZXcgdmFsdWUgb2YgYXR0ci4KKyogQHBhcmFtIG5ld1ZhbHVlTGVuZ3RoIFRoZSBsZW5ndGgg
b2YgbmV3VmFsdWUsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyogQHBhcmFtIHN0YXR1cyBB
IHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHNlZSB1
bnVtX2dldFRleHRBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX2dldEF0dHJpYnV0ZQorKiBAc2VlIHVu
dW1fc2V0QXR0cmlidXRlCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIHZvaWQgVV9F
WFBPUlQyIAordW51bV9zZXRUZXh0QXR0cmlidXRlKCAgICBVTnVtYmVyRm9ybWF0KiAgICAgICAg
ICAgICAgICAgICAgZm10LAorICAgICAgICAgICAgVU51bWJlckZvcm1hdFRleHRBdHRyaWJ1dGUg
ICAgICB0YWcsCisgICAgICAgICAgICBjb25zdCAgICBVQ2hhciogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3VmFsdWUsCisgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5ld1ZhbHVlTGVuZ3RoLAorICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICAg
ICAgICAgICAgICAgICAgICpzdGF0dXMpOworCisvKioKKyAqIEV4dHJhY3QgdGhlIHBhdHRlcm4g
ZnJvbSBhIFVOdW1iZXJGb3JtYXQuICBUaGUgcGF0dGVybiB3aWxsIGZvbGxvdworICogdGhlIERl
Y2ltYWxGb3JtYXQgcGF0dGVybiBzeW50YXguCisgKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIg
dG8gcXVlcnkuCisgKiBAcGFyYW0gaXNQYXR0ZXJuTG9jYWxpemVkIFRSVUUgaWYgdGhlIHBhdHRl
cm4gc2hvdWxkIGJlIGxvY2FsaXplZCwKKyAqIEZBTFNFIG90aGVyd2lzZS4gIFRoaXMgaXMgaWdu
b3JlZCBpZiB0aGUgZm9ybWF0dGVyIGlzIGEgcnVsZS1iYXNlZAorICogZm9ybWF0dGVyLgorICog
QHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgcGF0dGVy
bi4KKyAqIEBwYXJhbSByZXN1bHRMZW5ndGggVGhlIG1heGltdW0gc2l6ZSBvZiByZXN1bHQuCisg
KiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBpbnB1dC1vdXRwdXQgVUVycm9yQ29kZS4K
KyAqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFu
IHJlc3VsdExlbmd0aCwKKyAqIHRoZSBvdXRwdXQgd2FzIHRydW5jYXRlZC4KKyAqIEBzZWUgdW51
bV9hcHBseVBhdHRlcm4KKyAqIEBzZWUgRGVjaW1hbEZvcm1hdAorICogQHN0YWJsZSBJQ1UgMi4w
CisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordW51bV90b1BhdHRlcm4oICAgIGNv
bnN0ICAgIFVOdW1iZXJGb3JtYXQqICAgICAgICAgIGZtdCwKKyAgICAgICAgVUJvb2wgICAgICAg
ICAgICAgICAgICBpc1BhdHRlcm5Mb2NhbGl6ZWQsCisgICAgICAgIFVDaGFyKiAgICAgICAgICAg
ICAgICAgIHJlc3VsdCwKKyAgICAgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgcmVzdWx0TGVu
Z3RoLAorICAgICAgICBVRXJyb3JDb2RlKiAgICAgICAgICAgICBzdGF0dXMpOworCisKKy8qKgor
ICogQ29uc3RhbnRzIGZvciBzcGVjaWZ5aW5nIGEgbnVtYmVyIGZvcm1hdCBzeW1ib2wuCisgKiBA
c3RhYmxlIElDVSAyLjAKKyAqLwordHlwZWRlZiBlbnVtIFVOdW1iZXJGb3JtYXRTeW1ib2wgewor
ICAvKiogVGhlIGRlY2ltYWwgc2VwYXJhdG9yICovCisgIFVOVU1fREVDSU1BTF9TRVBBUkFUT1Jf
U1lNQk9MID0gMCwKKyAgLyoqIFRoZSBncm91cGluZyBzZXBhcmF0b3IgKi8KKyAgVU5VTV9HUk9V
UElOR19TRVBBUkFUT1JfU1lNQk9MID0gMSwKKyAgLyoqIFRoZSBwYXR0ZXJuIHNlcGFyYXRvciAq
LworICBVTlVNX1BBVFRFUk5fU0VQQVJBVE9SX1NZTUJPTCA9IDIsCisgIC8qKiBUaGUgcGVyY2Vu
dCBzaWduICovCisgIFVOVU1fUEVSQ0VOVF9TWU1CT0wgPSAzLAorICAvKiogWmVybyovCisgIFVO
VU1fWkVST19ESUdJVF9TWU1CT0wgPSA0LAorICAvKiogQ2hhcmFjdGVyIHJlcHJlc2VudGluZyBh
IGRpZ2l0IGluIHRoZSBwYXR0ZXJuICovCisgIFVOVU1fRElHSVRfU1lNQk9MID0gNSwKKyAgLyoq
IFRoZSBtaW51cyBzaWduICovCisgIFVOVU1fTUlOVVNfU0lHTl9TWU1CT0wgPSA2LAorICAvKiog
VGhlIHBsdXMgc2lnbiAqLworICBVTlVNX1BMVVNfU0lHTl9TWU1CT0wgPSA3LAorICAvKiogVGhl
IGN1cnJlbmN5IHN5bWJvbCAqLworICBVTlVNX0NVUlJFTkNZX1NZTUJPTCA9IDgsCisgIC8qKiBU
aGUgaW50ZXJuYXRpb25hbCBjdXJyZW5jeSBzeW1ib2wgKi8KKyAgVU5VTV9JTlRMX0NVUlJFTkNZ
X1NZTUJPTCA9IDksCisgIC8qKiBUaGUgbW9uZXRhcnkgc2VwYXJhdG9yICovCisgIFVOVU1fTU9O
RVRBUllfU0VQQVJBVE9SX1NZTUJPTCA9IDEwLAorICAvKiogVGhlIGV4cG9uZW50aWFsIHN5bWJv
bCAqLworICBVTlVNX0VYUE9ORU5USUFMX1NZTUJPTCA9IDExLAorICAvKiogUGVyIG1pbGwgc3lt
Ym9sICovCisgIFVOVU1fUEVSTUlMTF9TWU1CT0wgPSAxMiwKKyAgLyoqIEVzY2FwZSBwYWRkaW5n
IGNoYXJhY3RlciAqLworICBVTlVNX1BBRF9FU0NBUEVfU1lNQk9MID0gMTMsCisgIC8qKiBJbmZp
bml0eSBzeW1ib2wgKi8KKyAgVU5VTV9JTkZJTklUWV9TWU1CT0wgPSAxNCwKKyAgLyoqIE5hbiBz
eW1ib2wgKi8KKyAgVU5VTV9OQU5fU1lNQk9MID0gMTUsCisgIC8qKiBTaWduaWZpY2FudCBkaWdp
dCBzeW1ib2wKKyAgICogQHN0YWJsZSBJQ1UgMy4wICovCisgIFVOVU1fU0lHTklGSUNBTlRfRElH
SVRfU1lNQk9MID0gMTYsCisgIC8qKiBUaGUgbW9uZXRhcnkgZ3JvdXBpbmcgc2VwYXJhdG9yIAor
ICAgKiBAc3RhYmxlIElDVSAzLjYKKyAgICovCisgIFVOVU1fTU9ORVRBUllfR1JPVVBJTkdfU0VQ
QVJBVE9SX1NZTUJPTCA9IDE3LCAgCisgIC8qKiBPbmUKKyAgICogQGRyYWZ0IElDVSA0LjYKKyAg
ICovCisgIFVOVU1fT05FX0RJR0lUX1NZTUJPTCA9IDE4LAorICAvKiogVHdvCisgICAqIEBkcmFm
dCBJQ1UgNC42CisgICAqLworICBVTlVNX1RXT19ESUdJVF9TWU1CT0wgPSAxOSwKKyAgLyoqIFRo
cmVlCisgICAqIEBkcmFmdCBJQ1UgNC42CisgICAqLworICBVTlVNX1RIUkVFX0RJR0lUX1NZTUJP
TCA9IDIwLAorICAvKiogRm91cgorICAgKiBAZHJhZnQgSUNVIDQuNgorICAgKi8KKyAgVU5VTV9G
T1VSX0RJR0lUX1NZTUJPTCA9IDIxLAorICAvKiogRml2ZQorICAgKiBAZHJhZnQgSUNVIDQuNgor
ICAgKi8KKyAgVU5VTV9GSVZFX0RJR0lUX1NZTUJPTCA9IDIyLAorICAvKiogU2l4CisgICAqIEBk
cmFmdCBJQ1UgNC42CisgICAqLworICBVTlVNX1NJWF9ESUdJVF9TWU1CT0wgPSAyMywKKyAgLyoq
IFNldmVuCisgICAgKiBAZHJhZnQgSUNVIDQuNgorICAgKi8KKyAgVU5VTV9TRVZFTl9ESUdJVF9T
WU1CT0wgPSAyNCwKKyAgLyoqIEVpZ2h0CisgICAqIEBkcmFmdCBJQ1UgNC42CisgICAqLworICBV
TlVNX0VJR0hUX0RJR0lUX1NZTUJPTCA9IDI1LAorICAvKiogTmluZQorICAgKiBAZHJhZnQgSUNV
IDQuNgorICAgKi8KKyAgVU5VTV9OSU5FX0RJR0lUX1NZTUJPTCA9IDI2LAorICAvKiogY291bnQg
c3ltYm9sIGNvbnN0YW50cyAqLworICBVTlVNX0ZPUk1BVF9TWU1CT0xfQ09VTlQgPSAyNworfSBV
TnVtYmVyRm9ybWF0U3ltYm9sOworCisvKioKKyogR2V0IGEgc3ltYm9sIGFzc29jaWF0ZWQgd2l0
aCBhIFVOdW1iZXJGb3JtYXQuCisqIEEgVU51bWJlckZvcm1hdCB1c2VzIHN5bWJvbHMgdG8gcmVw
cmVzZW50IHRoZSBzcGVjaWFsIGxvY2FsZS1kZXBlbmRlbnQKKyogY2hhcmFjdGVycyBpbiBhIG51
bWJlciwgZm9yIGV4YW1wbGUgdGhlIHBlcmNlbnQgc2lnbi4gVGhpcyBBUEkgaXMgbm90CisqIHN1
cHBvcnRlZCBmb3IgcnVsZS1iYXNlZCBmb3JtYXR0ZXJzLgorKiBAcGFyYW0gZm10IFRoZSBmb3Jt
YXR0ZXIgdG8gcXVlcnkuCisqIEBwYXJhbSBzeW1ib2wgVGhlIFVOdW1iZXJGb3JtYXRTeW1ib2wg
Y29uc3RhbnQgZm9yIHRoZSBzeW1ib2wgdG8gZ2V0CisqIEBwYXJhbSBidWZmZXIgVGhlIHN0cmlu
ZyBidWZmZXIgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIHN5bWJvbCBzdHJpbmc7CisqICAgICAgICAg
ICAgICAgaWYgaXQgaXMgTlVMTCwgdGhlbiBvbmx5IHRoZSBsZW5ndGggb2YgdGhlIHN5bWJvbCBp
cyByZXR1cm5lZAorKiBAcGFyYW0gc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgc3RyaW5nIGJ1ZmZlcgor
KiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55
IGVycm9ycworKiBAcmV0dXJuIFRoZSBsZW5ndGggb2YgdGhlIHN5bWJvbDsgdGhlIGJ1ZmZlciBp
cyBub3QgbW9kaWZpZWQgaWYKKyogICAgICAgICA8Y29kZT5sZW5ndGgmZ3Q7PXNpemU8L2NvZGU+
CisqIEBzZWUgdW51bV9zZXRTeW1ib2wKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUg
aW50MzJfdCBVX0VYUE9SVDIKK3VudW1fZ2V0U3ltYm9sKGNvbnN0IFVOdW1iZXJGb3JtYXQgKmZt
dCwKKyAgICAgICAgICAgICAgIFVOdW1iZXJGb3JtYXRTeW1ib2wgc3ltYm9sLAorICAgICAgICAg
ICAgICAgVUNoYXIgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgIGludDMyX3Qgc2l6ZSwKKyAgICAg
ICAgICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKy8qKgorKiBTZXQgYSBzeW1ib2wgYXNz
b2NpYXRlZCB3aXRoIGEgVU51bWJlckZvcm1hdC4KKyogQSBVTnVtYmVyRm9ybWF0IHVzZXMgc3lt
Ym9scyB0byByZXByZXNlbnQgdGhlIHNwZWNpYWwgbG9jYWxlLWRlcGVuZGVudAorKiBjaGFyYWN0
ZXJzIGluIGEgbnVtYmVyLCBmb3IgZXhhbXBsZSB0aGUgcGVyY2VudCBzaWduLiAgVGhpcyBBUEkg
aXMgbm90CisqIHN1cHBvcnRlZCBmb3IgcnVsZS1iYXNlZCBmb3JtYXR0ZXJzLgorKiBAcGFyYW0g
Zm10IFRoZSBmb3JtYXR0ZXIgdG8gc2V0LgorKiBAcGFyYW0gc3ltYm9sIFRoZSBVTnVtYmVyRm9y
bWF0U3ltYm9sIGNvbnN0YW50IGZvciB0aGUgc3ltYm9sIHRvIHNldAorKiBAcGFyYW0gdmFsdWUg
VGhlIHN0cmluZyB0byBzZXQgdGhlIHN5bWJvbCB0bworKiBAcGFyYW0gbGVuZ3RoIFRoZSBsZW5n
dGggb2YgdGhlIHN0cmluZywgb3IgLTEgZm9yIGEgemVyby10ZXJtaW5hdGVkIHN0cmluZworKiBA
cGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVy
cm9ycy4KKyogQHNlZSB1bnVtX2dldFN5bWJvbAorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NU
QUJMRSB2b2lkIFVfRVhQT1JUMgordW51bV9zZXRTeW1ib2woVU51bWJlckZvcm1hdCAqZm10LAor
ICAgICAgICAgICAgICAgVU51bWJlckZvcm1hdFN5bWJvbCBzeW1ib2wsCisgICAgICAgICAgICAg
ICBjb25zdCBVQ2hhciAqdmFsdWUsCisgICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCwKKyAg
ICAgICAgICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKworLyoqCisgKiBHZXQgdGhlIGxv
Y2FsZSBmb3IgdGhpcyBudW1iZXIgZm9ybWF0IG9iamVjdC4KKyAqIFlvdSBjYW4gY2hvb3NlIGJl
dHdlZW4gdmFsaWQgYW5kIGFjdHVhbCBsb2NhbGUuCisgKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0
ZXIgdG8gZ2V0IHRoZSBsb2NhbGUgZnJvbQorICogQHBhcmFtIHR5cGUgdHlwZSBvZiB0aGUgbG9j
YWxlIHdlJ3JlIGxvb2tpbmcgZm9yICh2YWxpZCBvciBhY3R1YWwpIAorICogQHBhcmFtIHN0YXR1
cyBlcnJvciBjb2RlIGZvciB0aGUgb3BlcmF0aW9uCisgKiBAcmV0dXJuIHRoZSBsb2NhbGUgbmFt
ZQorICogQHN0YWJsZSBJQ1UgMi44CisgKi8KK1VfU1RBQkxFIGNvbnN0IGNoYXIqIFVfRVhQT1JU
MgordW51bV9nZXRMb2NhbGVCeVR5cGUoY29uc3QgVU51bWJlckZvcm1hdCAqZm10LAorICAgICAg
ICAgICAgICAgICAgICAgVUxvY0RhdGFMb2NhbGVUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICBVRXJyb3JDb2RlKiBzdGF0dXMpOyAKKworI2VuZGlmIC8qICNpZiAhVUNPTkZJR19OT19G
T1JNQVRUSU5HICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ljdS91bmljb2RlL3V0eXBlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2Rl
L3V0eXBlcy5oCmluZGV4IDAwYmYxNGNlOGU2ZTVkNmVjOGVkODdkOGU5NTYxNzBjYTU3Nzg3YjIu
LjFiY2Y3ZjVkMzkwOWZmNjZiNjU4ZWE5NWJhNGEyY2RlYjU0OWM5YzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29kZS91dHlwZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdXR5cGVzLmgKQEAgLTU1LDcgKzU1LDcgQEAKICAqLwog
I2lmZGVmIFhQX0NQTFVTUExVUwogIyAgIGlmbmRlZiBVX1NIT1dfQ1BMVVNQTFVTX0FQSQotIyAg
ICAgICBkZWZpbmUgVV9TSE9XX0NQTFVTUExVU19BUEkgMQorIyAgICAgICBkZWZpbmUgVV9TSE9X
X0NQTFVTUExVU19BUEkgMAogIyAgIGVuZGlmCiAjZWxzZQogIyAgIHVuZGVmIFVfU0hPV19DUExV
U1BMVVNfQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25JZGVudGlmaWVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRl
bnRpZmllcnMuaAppbmRleCAxNjNiMTE2MTA0MWNjZGIzNWFkNTI5NzZjYWZlNmJkMTFkZmM4Yjc3
Li5jNTFiNDZkNzE2YTI1OTk3YTE3MzE2ODNiZmY3OGNhMzQxYzQxZmM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKQEAgLTE0Miw2
ICsxNDIsNyBAQAogICAgIG1hY3JvKGxhc3RJbmRleCkgXAogICAgIG1hY3JvKGxlbmd0aCkgXAog
ICAgIG1hY3JvKGxpbmUpIFwKKyAgICBtYWNybyhsb2NhbGVNYXRjaGVyKSBcCiAgICAgbWFjcm8o
bWVzc2FnZSkgXAogICAgIG1hY3JvKG11bHRpbGluZSkgXAogICAgIG1hY3JvKG5hbWUpIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvckNvbnN0
cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvckNv
bnN0cnVjdG9yLmNwcAppbmRleCBkNDFkZDE3Y2Q4ZWIxMTJhMjFlZmI2YzIxYTE0NDk0ZmIyZWQ2
ZDY1Li4zMTA3YjNmNWU5NGRjOGFkZWIxYjk2ODVjZmIzNTBmNDczMWRmZGI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yQ29uc3Ry
dWN0b3IuY3BwCkBAIC0xNTAsMjUgKzE1MCwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIEludGxDb2xsYXRvckNvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZihFeGVjUwog
ICAgIC8vIDEwLjIuMiBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVzIFss
IG9wdGlvbnNdKSAoRUNNQS00MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IHJlcXVlc3RlZExvY2Fs
ZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KLSAgICAvLyBGSVhNRTogcmVx
dWVzdGVkID0gQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKTsKKyAgICBKU0FycmF5KiBy
ZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChleGVjLCBleGVjLT5hcmd1
bWVudCgwKSk7CiAKICAgICAvLyAyLiBSZXR1cm5JZkFicnVwdChyZXF1ZXN0ZWRMb2NhbGVzKS4K
LSAgICAvLyBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgLy8gICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
Ly8gMy4gUmV0dXJuIFN1cHBvcnRlZExvY2FsZXMoJUNvbGxhdG9yJS5bW2F2YWlsYWJsZUxvY2Fs
ZXNdXSwgcmVxdWVzdGVkTG9jYWxlcywgb3B0aW9ucykuCi0gICAgLy8gRklYTUU6IHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoU3VwcG9ydGVkTG9jYWxlcyhhdmFpbGFibGUsIHJlcXVlc3RlZCwgb3B0
aW9ucykpOwotCi0gICAgLy8gUmV0dXJuIGVtcHR5IGFycmF5IHVudGlsIHByb3Blcmx5IGltcGxl
bWVudGVkLgotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKTsKLSAgICBKU0FycmF5
KiBzdXBwb3J0ZWRMb2NhbGVzID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwg
Z2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRp
b24oQXJyYXlXaXRoVW5kZWNpZGVkKSwgMCk7Ci0gICAgaWYgKCFzdXBwb3J0ZWRMb2NhbGVzKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVj
KSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN1cHBvcnRlZExvY2FsZXMpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3VwcG9ydGVkTG9jYWxlcyhleGVjLCBnbG9iYWxPYmpl
Y3QtPmludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKSwgcmVxdWVzdGVkTG9jYWxlcywgZXhl
Yy0+YXJndW1lbnQoMSkpKTsKIH0KLSAgICAKKwogdm9pZCBJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rv
cjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEludGxDb2xsYXRvckNvbnN0cnVjdG9yKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxDb2xs
YXRvckNvbnN0cnVjdG9yKj4oY2VsbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKaW5k
ZXggMGI4ZDQ2MGQyNjc0MWE0YjkzMzZiOGNiMGY4YjY0ZmI3OGQwNjg3ZC4uOThkM2JiZTNkNDBl
MmFjZmViNzI4ZjhhMzYwNTQzNDU1MjYwMzcyMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9y
LmNwcApAQCAtMTUwLDIyICsxNTAsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJ
bnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YKICAgICAv
LyAxMi4yLjIgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YobG9jYWxlcyBb
LCBvcHRpb25zXSkgKEVDTUEtNDAyIDIuMCkKIAogICAgIC8vIDEuIExldCBhdmFpbGFibGVMb2Nh
bGVzIGJlICVEYXRlVGltZUZvcm1hdCUuW1thdmFpbGFibGVMb2NhbGVzXV0uCi0gICAgLy8gRklY
TUU6IGF2YWlsYWJsZSA9IEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yOjpnZXRBdmFpbGFi
bGVMb2NhbGVzKCkKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2Fs
bGVlKCktPmdsb2JhbE9iamVjdCgpOworICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiBhdmFpbGFi
bGVMb2NhbGVzID0gZ2xvYmFsT2JqZWN0LT5pbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2Nh
bGVzKCk7CiAKICAgICAvLyAyLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVM
b2NhbGVMaXN0KGxvY2FsZXMpLgotICAgIC8vIEZJWE1FOiByZXF1ZXN0ZWQgPSBDYW5vbmljYWxp
emVMb2NhbGVMaXN0KGxvY2FsZXMpCisgICAgSlNBcnJheSogcmVxdWVzdGVkTG9jYWxlcyA9IGNh
bm9uaWNhbGl6ZUxvY2FsZUxpc3QoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIAogICAgIC8vIDMuIFJldHVybiBTdXBwb3J0ZWRMb2NhbGVzKGF2YWlsYWJs
ZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9wdGlvbnMpLgotICAgIC8vIEZJWE1FOiByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKFN1cHBvcnRlZExvY2FsZXMoYXZhaWxhYmxlLCByZXF1ZXN0ZWQs
IG9wdGlvbnMpKTsKLQotICAgIC8vIFJldHVybiBlbXB0eSBhcnJheSB1bnRpbCBwcm9wZXJseSBp
bXBsZW1lbnRlZC4KLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgSlNB
cnJheSogc3VwcG9ydGVkTG9jYWxlcyA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQo
dm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxv
Y2F0aW9uKEFycmF5V2l0aFVuZGVjaWRlZCksIDApOwotICAgIGlmICghc3VwcG9ydGVkTG9jYWxl
cykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd091dE9mTWVtb3J5RXJyb3Io
ZXhlYykpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdXBwb3J0ZWRMb2NhbGVzKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN1cHBvcnRlZExvY2FsZXMoZXhlYywgYXZhaWxh
YmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgZXhlYy0+YXJndW1lbnQoMSkpKTsKIH0KICAg
ICAKIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3I6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3Bw
CmluZGV4IGI4NjM5ZDZiMTRjNzAwN2E4NzEwMjU1NzdhYWUyZWQyOWZiY2QyZTEuLmQwNjZlZTgw
NGJmNzg2MmQwNGNlMWNhZDk3ZmZiZWIxYzFmY2M2MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9y
LmNwcApAQCAtMTUwLDIyICsxNTAsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJ
bnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKEUKICAgICAv
LyAxMS4yLjIgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKGxvY2FsZXMgWywg
b3B0aW9uc10pIChFQ01BLTQwMiAyLjApCiAKICAgICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxl
cyBiZSAlTnVtYmVyRm9ybWF0JS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4KLSAgICAvLyBGSVhNRTog
YXZhaWxhYmxlID0gSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yOjpnZXRBdmFpbGFibGVMb2Nh
bGVzKCkKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2FsbGVlKCkt
Pmdsb2JhbE9iamVjdCgpOworICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiBhdmFpbGFibGVMb2Nh
bGVzID0gZ2xvYmFsT2JqZWN0LT5pbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwog
CiAgICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlz
dChsb2NhbGVzKS4KLSAgICAvLyBGSVhNRTogcmVxdWVzdGVkID0gQ2Fub25pY2FsaXplTG9jYWxl
TGlzdChsb2NhbGVzKQorICAgIEpTQXJyYXkqIHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxp
emVMb2NhbGVMaXN0KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICAvLyAzLiBSZXR1cm4gU3VwcG9ydGVkTG9jYWxlcyhhdmFpbGFibGVMb2NhbGVz
LCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKS4KLSAgICAvLyBGSVhNRTogcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShTdXBwb3J0ZWRMb2NhbGVzKGF2YWlsYWJsZSwgcmVxdWVzdGVkLCBvcHRpb25z
KSk7Ci0KLSAgICAvLyBSZXR1cm4gZW1wdHkgYXJyYXkgdW50aWwgcHJvcGVybHkgaW1wbGVtZW50
ZWQuCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpOwotICAgIEpTQXJyYXkqIHN1
cHBvcnRlZExvY2FsZXMgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBnbG9i
YWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihB
cnJheVdpdGhVbmRlY2lkZWQpLCAwKTsKLSAgICBpZiAoIXN1cHBvcnRlZExvY2FsZXMpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsK
LQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3VwcG9ydGVkTG9jYWxlcyk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShzdXBwb3J0ZWRMb2NhbGVzKGV4ZWMsIGF2YWlsYWJsZUxvY2Fs
ZXMsIHJlcXVlc3RlZExvY2FsZXMsIGV4ZWMtPmFyZ3VtZW50KDEpKSk7CiB9CiAKIHZvaWQgSW50
bE51bWJlckZvcm1hdENvbnN0cnVjdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxP
YmplY3QuY3BwCmluZGV4IGJhNDU3ZTcyNTYwOTEwNzg5MTIyZjUxMzc1ZWU5ZmRjMTAyNGQzMmYu
LjNjNDFjNTYxNDIyZDMxMWI4YmVmZGZjNTc3NTY1NDkxYThhZDFkYjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAK
ICNpZiBFTkFCTEUoSU5UTCkKIAorI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRnVuY3Rp
b25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJJbnRsQ29sbGF0b3IuaCIKICNpbmNsdWRlICJJbnRs
Q29sbGF0b3JDb25zdHJ1Y3Rvci5oIgpAQCAtMzksOCArNDAsMTAgQEAKICNpbmNsdWRlICJJbnRs
TnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJJbnRsTnVtYmVyRm9ybWF0UHJv
dG90eXBlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWVJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBl
LmgiCisjaW5jbHVkZSA8dW5pY29kZS91bG9jLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xMDIsNiArMTA1LDU5OCBAQCBTdHJ1Y3R1cmUqIElu
dGxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVgogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKIH0KIAorc3RhdGljIFN0cmluZyBnZXRJbnRsU3RyaW5nT3B0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBvcHRpb25zLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHksIGNvbnN0IEhhc2hTZXQ8
U3RyaW5nPiYgdmFsdWVzLCBjb25zdCBjaGFyKiBub3RGb3VuZCwgU3RyaW5nIGZhbGxiYWNrKQor
eworICAgIC8vIDkuMi45IEdldE9wdGlvbiAob3B0aW9ucywgcHJvcGVydHksIHR5cGUsIHZhbHVl
cywgZmFsbGJhY2spCisgICAgLy8gRm9yIHR5cGU9InN0cmluZyIuCisKKyAgICAvLyAxLiBMZXQg
b3B0cyBiZSBUb09iamVjdChvcHRpb25zKS4KKyAgICBKU09iamVjdCogb3B0cyA9IG9wdGlvbnMu
dG9PYmplY3QoZXhlYyk7CisKKyAgICAvLyAyLiBSZXR1cm5JZkFicnVwdChvcHRzKS4KKyAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAg
IC8vIDMuIExldCB2YWx1ZSBiZSBHZXQob3B0cywgcHJvcGVydHkpLgorICAgIEpTVmFsdWUgdmFs
dWUgPSBvcHRzLT5nZXQoZXhlYywgcHJvcGVydHkpOworCisgICAgLy8gNC4gUmV0dXJuSWZBYnJ1
cHQodmFsdWUpLgorICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworCisgICAgLy8gNS4gSWYgdmFsdWUgaXMgbm90IHVuZGVmaW5lZCwgdGhlbgor
ICAgIGlmICghdmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICAvLyBhLiBBc3NlcnQ6IHR5
cGUgaXMgImJvb2xlYW4iIG9yICJzdHJpbmciLgorICAgICAgICAvLyBGdW5jdGlvbiBkZWRpY2F0
ZWQgdG8gInN0cmluZyIuCisKKyAgICAgICAgLy8gYy4gSWYgdHlwZSBpcyAic3RyaW5nIiwgdGhl
bgorICAgICAgICAvLyBpLiBMZXQgdmFsdWUgYmUgVG9TdHJpbmcodmFsdWUpLgorICAgICAgICBK
U1N0cmluZyogc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKworICAgICAgICAv
LyBpaS4gUmV0dXJuSWZBYnJ1cHQodmFsdWUpLgorICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAgICAgLy8gZC4gSWYg
dmFsdWVzIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KKyAgICAgICAgLy8gaS4gSWYgdmFsdWVzIGRv
ZXMgbm90IGNvbnRhaW4gYW4gZWxlbWVudCBlcXVhbCB0byB2YWx1ZSwgdGhyb3cgYSBSYW5nZUVy
cm9yIGV4Y2VwdGlvbi4KKyAgICAgICAgaWYgKCF2YWx1ZXMuaXNFbXB0eSgpICYmICF2YWx1ZXMu
Y29udGFpbnMoc3RyaW5nVmFsdWUtPnZhbHVlKGV4ZWMpKSkgeworICAgICAgICAgICAgZXhlYy0+
dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIFN0cmluZyhu
b3RGb3VuZCkpKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIGUuIFJldHVybiB2YWx1ZS4KKyAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlLT52
YWx1ZShleGVjKTsKKyAgICB9CisKKyAgICAvLyA2LiBFbHNlIHJldHVybiBmYWxsYmFjay4KKyAg
ICByZXR1cm4gZmFsbGJhY2s7Cit9CisKK3N0YXRpYyBTdHJpbmcgZ2V0UHJpdmF0ZVVzZUxhbmdU
YWcoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcnRzLCBzaXplX3Qgc3RhcnRJbmRleCkKK3sKKyAg
ICBzaXplX3QgbnVtUGFydHMgPSBwYXJ0cy5zaXplKCk7CisgICAgc2l6ZV90IGN1cnJlbnRJbmRl
eCA9IHN0YXJ0SW5kZXg7CisKKyAgICAvLyBDaGVjayBmb3IgcHJpdmF0ZXVzZS4KKyAgICAvLyBw
cml2YXRldXNlID0gIngiIDEqKCItIiAoMio4YWxwaGFudW0pKQorICAgIFN0cmluZ0J1aWxkZXIg
cHJpdmF0ZXVzZTsKKyAgICB3aGlsZSAoY3VycmVudEluZGV4IDwgbnVtUGFydHMpIHsKKyAgICAg
ICAgY29uc3QgU3RyaW5nJiBzaW5nbGV0b24gPSBwYXJ0c1tjdXJyZW50SW5kZXhdOworICAgICAg
ICB1bnNpZ25lZCBzaW5nbGV0b25MZW5ndGggPSBzaW5nbGV0b24ubGVuZ3RoKCk7CisgICAgICAg
IGJvb2wgaXNWYWxpZCA9IChzaW5nbGV0b25MZW5ndGggPT0gMSAmJiAoc2luZ2xldG9uID09ICJ4
IiB8fCBzaW5nbGV0b24gPT0gIlgiKSk7CisgICAgICAgIGlmICghaXNWYWxpZCkKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGlmIChjdXJyZW50SW5kZXggIT0gc3RhcnRJbmRleCkKKyAg
ICAgICAgICAgIHByaXZhdGV1c2UuYXBwZW5kKCctJyk7CisKKyAgICAgICAgKytjdXJyZW50SW5k
ZXg7CisgICAgICAgIHVuc2lnbmVkIG51bUV4dFBhcnRzID0gMDsKKyAgICAgICAgcHJpdmF0ZXVz
ZS5hcHBlbmQoJ3gnKTsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnRJbmRleCA8IG51bVBhcnRzKSB7
CisgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGV4dFBhcnQgPSBwYXJ0c1tjdXJyZW50SW5kZXhd
OworICAgICAgICAgICAgdW5zaWduZWQgZXh0UGFydExlbmd0aCA9IGV4dFBhcnQubGVuZ3RoKCk7
CisKKyAgICAgICAgICAgIGJvb2wgaXNWYWxpZCA9IChleHRQYXJ0TGVuZ3RoID49IDIgJiYgZXh0
UGFydExlbmd0aCA8PSA4ICYmIGV4dFBhcnQuaXNBbGxTcGVjaWFsQ2hhcmFjdGVyczxpc0FTQ0lJ
QWxwaGFudW1lcmljPigpKTsKKyAgICAgICAgICAgIGlmICghaXNWYWxpZCkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgKytjdXJyZW50SW5kZXg7CisgICAgICAgICAgICAr
K251bUV4dFBhcnRzOworICAgICAgICAgICAgcHJpdmF0ZXVzZS5hcHBlbmQoJy0nKTsKKyAgICAg
ICAgICAgIHByaXZhdGV1c2UuYXBwZW5kKGV4dFBhcnQuY29udmVydFRvQVNDSUlMb3dlcmNhc2Uo
KSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXF1aXJlcyBhdCBsZWFzdCBvbmUgcHJvZHVj
dGlvbi4KKyAgICAgICAgaWYgKCFudW1FeHRQYXJ0cykKKyAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICB9CisKKyAgICAvLyBMZWZ0b3ZlcnMgbWFrZXMgaXQgaW52YWxpZC4KKyAgICBp
ZiAoY3VycmVudEluZGV4IDwgbnVtUGFydHMpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwor
ICAgIHJldHVybiBwcml2YXRldXNlLnRvU3RyaW5nKCk7Cit9CisKK3N0YXRpYyBTdHJpbmcgZ2V0
Q2Fub25pY2FsTGFuZ1RhZyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFydHMpCit7CisgICAgQVNT
RVJUKCFwYXJ0cy5pc0VtcHR5KCkpOworCisgICAgLy8gRm9sbG93cyB0aGUgZ3JhbW1hciBhdCBo
dHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvYmNwL2JjcDQ3LnR4dAorICAgIC8vIGxhbmd0
YWcgPSBsYW5ndWFnZSBbIi0iIHNjcmlwdF0gWyItIiByZWdpb25dICooIi0iIHZhcmlhbnQpICoo
Ii0iIGV4dGVuc2lvbikgWyItIiBwcml2YXRldXNlXQorCisgICAgc2l6ZV90IG51bVBhcnRzID0g
cGFydHMuc2l6ZSgpOworICAgIC8vIENoZWNrIGZvciBsYW5ndWFnZS4KKyAgICAvLyBsYW5ndWFn
ZSA9IDIqM0FMUEhBIFsiLSIgZXh0bGFuZ10gLyA0QUxQSEEgLyA1KjhBTFBIQQorICAgIHNpemVf
dCBjdXJyZW50SW5kZXggPSAwOworICAgIGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UgPSBwYXJ0c1tj
dXJyZW50SW5kZXhdOworICAgIHVuc2lnbmVkIGxhbmd1YWdlTGVuZ3RoID0gbGFuZ3VhZ2UubGVu
Z3RoKCk7CisgICAgYm9vbCBjYW5IYXZlRXh0bGFuZyA9IGxhbmd1YWdlTGVuZ3RoID49IDIgJiYg
bGFuZ3VhZ2VMZW5ndGggPD0gMzsKKyAgICBib29sIGlzVmFsaWRMYW5ndWFnZSA9IGxhbmd1YWdl
TGVuZ3RoID49IDIgJiYgbGFuZ3VhZ2VMZW5ndGggPD0gOCAmJiBsYW5ndWFnZS5pc0FsbFNwZWNp
YWxDaGFyYWN0ZXJzPGlzQVNDSUlBbHBoYT4oKTsKKyAgICBpZiAoIWlzVmFsaWRMYW5ndWFnZSkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgKytjdXJyZW50SW5kZXg7CisgICAgU3Ry
aW5nQnVpbGRlciBjYW5vbmljYWw7CisgICAgY2Fub25pY2FsLmFwcGVuZChsYW5ndWFnZS5jb252
ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKTsKKworICAgIC8vIENoZWNrIGZvciBleHRsYW5nLgorICAg
IC8vIGV4dGxhbmcgPSAzQUxQSEEgKjIoIi0iIDNBTFBIQSkKKyAgICBpZiAoY2FuSGF2ZUV4dGxh
bmcpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB0aW1lcyA9IDA7IHRpbWVzIDwgMyAmJiBjdXJy
ZW50SW5kZXggPCBudW1QYXJ0czsgKyt0aW1lcykgeworICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiBleHRsYW5nID0gcGFydHNbY3VycmVudEluZGV4XTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGV4
dGxhbmdMZW5ndGggPSBleHRsYW5nLmxlbmd0aCgpOworICAgICAgICAgICAgaWYgKGV4dGxhbmdM
ZW5ndGggPT0gMyAmJiBleHRsYW5nLmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNBU0NJSUFscGhh
PigpKSB7CisgICAgICAgICAgICAgICAgKytjdXJyZW50SW5kZXg7CisgICAgICAgICAgICAgICAg
Y2Fub25pY2FsLmFwcGVuZCgnLScpOworICAgICAgICAgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQo
ZXh0bGFuZy5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKTsKKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2hlY2sg
Zm9yIHNjcmlwdC4KKyAgICAvLyBzY3JpcHQgPSA0QUxQSEEKKyAgICBpZiAoY3VycmVudEluZGV4
IDwgbnVtUGFydHMpIHsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBzY3JpcHQgPSBwYXJ0c1tjdXJy
ZW50SW5kZXhdOworICAgICAgICB1bnNpZ25lZCBzY3JpcHRMZW5ndGggPSBzY3JpcHQubGVuZ3Ro
KCk7CisgICAgICAgIGlmIChzY3JpcHRMZW5ndGggPT0gNCAmJiBzY3JpcHQuaXNBbGxTcGVjaWFs
Q2hhcmFjdGVyczxpc0FTQ0lJQWxwaGE+KCkpIHsKKyAgICAgICAgICAgICsrY3VycmVudEluZGV4
OworICAgICAgICAgICAgY2Fub25pY2FsLmFwcGVuZCgnLScpOworICAgICAgICAgICAgY2Fub25p
Y2FsLmFwcGVuZCh0b0FTQ0lJVXBwZXIoc2NyaXB0WzBdKSk7CisgICAgICAgICAgICBjYW5vbmlj
YWwuYXBwZW5kKHNjcmlwdC5zdWJzdHJpbmcoMSwgMykuY29udmVydFRvQVNDSUlMb3dlcmNhc2Uo
KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDaGVjayBmb3IgcmVnaW9uLgorICAgIC8v
IHJlZ2lvbiA9IDJBTFBIQSAvIDNESUdJVAorICAgIGlmIChjdXJyZW50SW5kZXggPCBudW1QYXJ0
cykgeworICAgICAgICBjb25zdCBTdHJpbmcmIHJlZ2lvbiA9IHBhcnRzW2N1cnJlbnRJbmRleF07
CisgICAgICAgIHVuc2lnbmVkIHJlZ2lvbkxlbmd0aCA9IHJlZ2lvbi5sZW5ndGgoKTsKKyAgICAg
ICAgYm9vbCBpc1ZhbGlkUmVnaW9uID0gKAorICAgICAgICAgICAgKHJlZ2lvbkxlbmd0aCA9PSAy
ICYmIHJlZ2lvbi5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzQVNDSUlBbHBoYT4oKSkKKyAgICAg
ICAgICAgIHx8IChyZWdpb25MZW5ndGggPT0gMyAmJiByZWdpb24uaXNBbGxTcGVjaWFsQ2hhcmFj
dGVyczxpc0FTQ0lJRGlnaXQ+KCkpCisgICAgICAgICk7CisgICAgICAgIGlmIChpc1ZhbGlkUmVn
aW9uKSB7CisgICAgICAgICAgICArK2N1cnJlbnRJbmRleDsKKyAgICAgICAgICAgIGNhbm9uaWNh
bC5hcHBlbmQoJy0nKTsKKyAgICAgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQocmVnaW9uLnVwcGVy
KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIHZhcmlhbnQuCisgICAg
Ly8gdmFyaWFudCA9IDUqOGFscGhhbnVtIC8gKERJR0lUIDNhbHBoYW51bSkKKyAgICBIYXNoU2V0
PFN0cmluZz4gc3VidGFnczsKKyAgICB3aGlsZSAoY3VycmVudEluZGV4IDwgbnVtUGFydHMpIHsK
KyAgICAgICAgY29uc3QgU3RyaW5nJiB2YXJpYW50ID0gcGFydHNbY3VycmVudEluZGV4XTsKKyAg
ICAgICAgdW5zaWduZWQgdmFyaWFudExlbmd0aCA9IHZhcmlhbnQubGVuZ3RoKCk7CisgICAgICAg
IGJvb2wgaXNWYWxpZFZhcmlhbnQgPSAoCisgICAgICAgICAgICAodmFyaWFudExlbmd0aCA+PSA1
ICYmIHZhcmlhbnRMZW5ndGggPD0gOCAmJiB2YXJpYW50LmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8
aXNBU0NJSUFscGhhbnVtZXJpYz4oKSkKKyAgICAgICAgICAgIHx8ICh2YXJpYW50TGVuZ3RoID09
IDQgJiYgaXNBU0NJSURpZ2l0KHZhcmlhbnRbMF0pICYmIHZhcmlhbnQuc3Vic3RyaW5nKDEsIDMp
LmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNBU0NJSUFscGhhbnVtZXJpYz4oKSkKKyAgICAgICAg
KTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkVmFyaWFudCkKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIC8vIENhbm5vdCBpbmNsdWRlIGR1cGxpY2F0ZSBzdWJ0YWdzIChjYXNlIGluc2Vuc2l0
aXZlKS4KKyAgICAgICAgY29uc3QgU3RyaW5nJiBsb3dlclZhcmlhbnQgPSB2YXJpYW50LmNvbnZl
cnRUb0FTQ0lJTG93ZXJjYXNlKCk7CisgICAgICAgIGlmIChzdWJ0YWdzLmNvbnRhaW5zKGxvd2Vy
VmFyaWFudCkpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIHN1YnRhZ3Mu
YWRkKGxvd2VyVmFyaWFudCk7CisKKyAgICAgICAgKytjdXJyZW50SW5kZXg7CisKKyAgICAgICAg
Ly8gUmVvcmRlcmluZyB2YXJpYW50IHN1YnRhZ3MgaXMgbm90IHJlcXVpcmVkIGluIHRoZSBzcGVj
LgorICAgICAgICBjYW5vbmljYWwuYXBwZW5kKCctJyk7CisgICAgICAgIGNhbm9uaWNhbC5hcHBl
bmQobG93ZXJWYXJpYW50KTsKKyAgICB9CisKKyAgICAvLyBDaGVjayBmb3IgZXh0ZW5zaW9uLgor
ICAgIC8vIGV4dGVuc2lvbiA9IHNpbmdsZXRvbiAxKigiLSIgKDIqOGFscGhhbnVtKSkKKyAgICAv
LyBzaW5nbGV0b24gPSBhbHBoYW51bSBleGNlcHQgeCBvciBYCisgICAgc3VidGFncy5jbGVhcigp
OworICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnM7CisgICAgd2hpbGUgKGN1cnJlbnRJbmRl
eCA8IG51bVBhcnRzKSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYgcG9zc2libGVTaW5nbGV0b24g
PSBwYXJ0c1tjdXJyZW50SW5kZXhdOworICAgICAgICB1bnNpZ25lZCBzaW5nbGV0b25MZW5ndGgg
PSBwb3NzaWJsZVNpbmdsZXRvbi5sZW5ndGgoKTsKKyAgICAgICAgYm9vbCBpc1ZhbGlkU2luZ2xl
dG9uID0gKHNpbmdsZXRvbkxlbmd0aCA9PSAxICYmIHBvc3NpYmxlU2luZ2xldG9uICE9ICJ4IiAm
JiBwb3NzaWJsZVNpbmdsZXRvbiAhPSAiWCIgJiYgaXNBU0NJSUFscGhhbnVtZXJpYyhwb3NzaWJs
ZVNpbmdsZXRvblswXSkpOworICAgICAgICBpZiAoIWlzVmFsaWRTaW5nbGV0b24pCisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAvLyBDYW5ub3QgaW5jbHVkZSBkdXBsaWNhdGUgc2luZ2xl
dG9uIChjYXNlIGluc2Vuc2l0aXZlKS4KKyAgICAgICAgY29uc3QgU3RyaW5nJiBzaW5nbGV0b24g
PSBwb3NzaWJsZVNpbmdsZXRvbi5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOworICAgICAgICBp
ZiAoc3VidGFncy5jb250YWlucyhzaW5nbGV0b24pKQorICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgICAgICBzdWJ0YWdzLmFkZChzaW5nbGV0b24pOworCisgICAgICAgICsrY3VycmVu
dEluZGV4OworICAgICAgICBpbnQgbnVtRXh0UGFydHMgPSAwOworICAgICAgICBTdHJpbmdCdWls
ZGVyIGV4dGVuc2lvbjsKKyAgICAgICAgZXh0ZW5zaW9uLmFwcGVuZChzaW5nbGV0b24pOworICAg
ICAgICB3aGlsZSAoY3VycmVudEluZGV4IDwgbnVtUGFydHMpIHsKKyAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgZXh0UGFydCA9IHBhcnRzW2N1cnJlbnRJbmRleF07CisgICAgICAgICAgICB1bnNp
Z25lZCBleHRQYXJ0TGVuZ3RoID0gZXh0UGFydC5sZW5ndGgoKTsKKworICAgICAgICAgICAgYm9v
bCBpc1ZhbGlkID0gKGV4dFBhcnRMZW5ndGggPj0gMiAmJiBleHRQYXJ0TGVuZ3RoIDw9IDggJiYg
ZXh0UGFydC5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzQVNDSUlBbHBoYW51bWVyaWM+KCkpOwor
ICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICArK2N1cnJlbnRJbmRleDsKKyAgICAgICAgICAgICsrbnVtRXh0UGFydHM7CisgICAg
ICAgICAgICBleHRlbnNpb24uYXBwZW5kKCctJyk7CisgICAgICAgICAgICBleHRlbnNpb24uYXBw
ZW5kKGV4dFBhcnQuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBSZXF1aXJlcyBhdCBsZWFzdCBvbmUgcHJvZHVjdGlvbi4KKyAgICAgICAgaWYgKCFu
dW1FeHRQYXJ0cykKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgICAgICBleHRl
bnNpb25zLmFwcGVuZChleHRlbnNpb24udG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgLy8gQWRk
IGV4dGVuc2lvbnMgdG8gY2Fub25pY2FsIHNvcnRlZCBieSBzaW5nbGV0b24uCisgICAgc3RkOjpz
b3J0KAorICAgICAgICBleHRlbnNpb25zLmJlZ2luKCksCisgICAgICAgIGV4dGVuc2lvbnMuZW5k
KCksCisgICAgICAgIFtdIChjb25zdCBTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikgLT4gYm9v
bCB7CisgICAgICAgICAgICByZXR1cm4gYVswXSA8IGJbMF07CisgICAgICAgIH0KKyAgICApOwor
ICAgIHNpemVfdCBudW1FeHRlbnN0aW9ucyA9IGV4dGVuc2lvbnMuc2l6ZSgpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtRXh0ZW5zdGlvbnM7ICsraSkgeworICAgICAgICBjYW5vbmlj
YWwuYXBwZW5kKCctJyk7CisgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQoZXh0ZW5zaW9uc1tpXSk7
CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIHByaXZhdGV1c2UuCisgICAgaWYgKGN1cnJlbnRJ
bmRleCA8IG51bVBhcnRzKSB7CisgICAgICAgIFN0cmluZyBwcml2YXRldXNlID0gZ2V0UHJpdmF0
ZVVzZUxhbmdUYWcocGFydHMsIGN1cnJlbnRJbmRleCk7CisgICAgICAgIGlmIChwcml2YXRldXNl
LmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICBjYW5vbmlj
YWwuYXBwZW5kKCctJyk7CisgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQocHJpdmF0ZXVzZSk7Cisg
ICAgfQorCisgICAgLy8gRklYTUU6IFJlcGxhY2Ugc3VidGFncyB3aXRoIHRoZWlyIHByZWZlcnJl
ZCB2YWx1ZXMuCisKKyAgICByZXR1cm4gY2Fub25pY2FsLnRvU3RyaW5nKCk7Cit9CisKK3N0YXRp
YyBTdHJpbmcgZ2V0R3JhbmRmYXRoZXJlZExhbmdUYWcoY29uc3QgU3RyaW5nJiBsb2NhbGUpCit7
CisgICAgLy8gZ3JhbmRmYXRoZXJlZCA9IGlycmVndWxhciAvIHJlZ3VsYXIKKyAgICAvLyBGSVhN
RTogY29udmVydCB0byBhIGNvbXBpbGUgdGltZSBoYXNoIHRhYmxlIGlmIHRoaXMgaXMgY2F1c2lu
ZyBwZXJmb3JtYW5jZSBpc3N1ZXMuCisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gdGFnTWFw
ID0geworICAgICAgICAvLyBJcnJlZ3VsYXIuCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJlbi1n
Yi1vZWQiKSwgQVNDSUlMaXRlcmFsKCJlbi1HQi1vZWQiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0
ZXJhbCgiaS1hbWkiKSwgQVNDSUlMaXRlcmFsKCJhbWkiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0
ZXJhbCgiaS1ibm4iKSwgQVNDSUlMaXRlcmFsKCJibm4iKSB9LAorICAgICAgICB7IEFTQ0lJTGl0
ZXJhbCgiaS1kZWZhdWx0IiksIEFTQ0lJTGl0ZXJhbCgiaS1kZWZhdWx0IikgfSwKKyAgICAgICAg
eyBBU0NJSUxpdGVyYWwoImktZW5vY2hpYW4iKSwgQVNDSUlMaXRlcmFsKCJpLWVub2NoaWFuIikg
fSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImktaGFrIiksIEFTQ0lJTGl0ZXJhbCgiaGFrIikg
fSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImkta2xpbmdvbiIpLCBBU0NJSUxpdGVyYWwoInRs
aCIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJpLWx1eCIpLCBBU0NJSUxpdGVyYWwoImxi
IikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImktbWluZ28iKSwgQVNDSUlMaXRlcmFsKCJp
LW1pbmdvIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImktbmF2YWpvIiksIEFTQ0lJTGl0
ZXJhbCgibnYiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiaS1wd24iKSwgQVNDSUlMaXRl
cmFsKCJwd24iKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiaS10YW8iKSwgQVNDSUlMaXRl
cmFsKCJ0YW8iKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiaS10YXkiKSwgQVNDSUlMaXRl
cmFsKCJ0YXkiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiaS10c3UiKSwgQVNDSUlMaXRl
cmFsKCJ0c3UiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgic2duLWJlLWZyIiksIEFTQ0lJ
TGl0ZXJhbCgic2ZiIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoInNnbi1iZS1ubCIpLCBB
U0NJSUxpdGVyYWwoInZndCIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJzZ24tY2gtZGUi
KSwgQVNDSUlMaXRlcmFsKCJzZ2ciKSB9LAorICAgICAgICAvLyBSZWd1bGFyLgorICAgICAgICB7
IEFTQ0lJTGl0ZXJhbCgiYXJ0LWxvamJhbiIpLCBBU0NJSUxpdGVyYWwoImpibyIpIH0sCisgICAg
ICAgIHsgQVNDSUlMaXRlcmFsKCJjZWwtZ2F1bGlzaCIpLCBBU0NJSUxpdGVyYWwoImNlbC1nYXVs
aXNoIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoIm5vLWJvayIpLCBBU0NJSUxpdGVyYWwo
Im5iIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoIm5vLW55biIpLCBBU0NJSUxpdGVyYWwo
Im5uIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoInpoLWd1b3l1IiksIEFTQ0lJTGl0ZXJh
bCgiY21uIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoInpoLWhha2thIiksIEFTQ0lJTGl0
ZXJhbCgiaGFrIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoInpoLW1pbiIpLCBBU0NJSUxp
dGVyYWwoInpoLW1pbiIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJ6aC1taW4tbmFuIiks
IEFTQ0lJTGl0ZXJhbCgibmFuIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoInpoLXhpYW5n
IiksIEFTQ0lJTGl0ZXJhbCgiaHNuIikgfQorICAgIH07CisKKyAgICByZXR1cm4gdGFnTWFwLmdl
dChsb2NhbGUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7Cit9CisKK3N0YXRpYyBTdHJpbmcg
Y2Fub25pY2FsaXplTGFuZ3VhZ2VUYWcoY29uc3QgU3RyaW5nJiBsb2NhbGUpCit7CisgICAgLy8g
Ni4yLjIgSXNTdHJ1Y3R1cmFsbHlWYWxpZExhbmd1YWdlVGFnIChsb2NhbGUpCisgICAgLy8gNi4y
LjMgQ2Fub25pY2FsaXplTGFuZ3VhZ2VUYWcgKGxvY2FsZSkKKyAgICAvLyBUaGVzZSBhcmUgZG9u
ZSBvbmUgYWZ0ZXIgYW5vdGhlciBpbiBDYW5vbmljYWxpemVMb2NhbGVMaXN0LCBzbyB0aGV5IGFy
ZSBjb21iaW5lZCBoZXJlIHRvIHJlZHVjZSBkdXBsaWNhdGlvbi4KKyAgICAvLyBodHRwczovL3d3
dy5yZmMtZWRpdG9yLm9yZy9yZmMvYmNwL2JjcDQ3LnR4dAorCisgICAgLy8gTGFuZ3VhZ2UtVGFn
ID0gbGFuZ3RhZyAvIHByaXZhdGV1c2UgLyBncmFuZGZhdGhlcmVkCisgICAgU3RyaW5nIGdyYW5k
ZmF0aGVyID0gZ2V0R3JhbmRmYXRoZXJlZExhbmdUYWcobG9jYWxlKTsKKyAgICBpZiAoIWdyYW5k
ZmF0aGVyLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZ3JhbmRmYXRoZXI7CisKKyAgICAvLyBG
SVhNRTogUmVwbGFjZSByZWR1bmRhbnQgdGFncyBbUkZDNDY0N10uCisKKyAgICBWZWN0b3I8U3Ry
aW5nPiBwYXJ0czsKKyAgICBsb2NhbGUuc3BsaXQoJy0nLCBwYXJ0cyk7CisgICAgaWYgKCFwYXJ0
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU3RyaW5nIGxhbmd0YWcgPSBnZXRDYW5vbmljYWxMYW5n
VGFnKHBhcnRzKTsKKyAgICAgICAgaWYgKCFsYW5ndGFnLmlzTnVsbCgpKQorICAgICAgICAgICAg
cmV0dXJuIGxhbmd0YWc7CisKKyAgICAgICAgU3RyaW5nIHByaXZhdGV1c2UgPSBnZXRQcml2YXRl
VXNlTGFuZ1RhZyhwYXJ0cywgMCk7CisgICAgICAgIGlmICghcHJpdmF0ZXVzZS5pc051bGwoKSkK
KyAgICAgICAgICAgIHJldHVybiBwcml2YXRldXNlOworICAgIH0KKworICAgIHJldHVybiBTdHJp
bmcoKTsKK30KKworSlNBcnJheSogY2Fub25pY2FsaXplTG9jYWxlTGlzdChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgbG9jYWxlcykKK3sKKyAgICAvLyA5LjIuMSBDYW5vbmljYWxpemVMb2NhbGVM
aXN0IChsb2NhbGVzKQorICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKTsKKyAgICBK
U0FycmF5KiBzZWVuID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgZ2xvYmFs
T2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJy
YXlXaXRoQ29udGlndW91cyksIDApOworICAgIGlmICghc2VlbikgeworICAgICAgICB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIC8vIDEuIElmIGxvY2FsZXMgaXMgdW5kZWZpbmVkLCB0aGVuIGEuIFJldHVybiBhIG5ldyBl
bXB0eSBMaXN0LgorICAgIGlmIChsb2NhbGVzLmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVy
biBzZWVuOworCisgICAgLy8gMi4gTGV0IHNlZW4gYmUgYW4gZW1wdHkgTGlzdC4KKyAgICAvLyBE
b25lIGJlZm9yZSB0byBhbHNvIHJldHVybiBpbiBzdGVwIDEsIGlmIG5lZWRlZC4KKworICAgIC8v
IDMuIElmIFR5cGUobG9jYWxlcykgaXMgU3RyaW5nLCB0aGVuCisgICAgSlNPYmplY3QqIGxvY2Fs
ZXNPYmplY3Q7CisgICAgaWYgKGxvY2FsZXMuaXNTdHJpbmcoKSkgeworICAgICAgICAvLyAgYS4g
TGV0IGFMb2NhbGVzIGJlIENyZWF0ZUFycmF5RnJvbUxpc3Qowqtsb2NhbGVzwrspLgorICAgICAg
ICBKU0FycmF5KiBsb2NhbGVzQXJyYXkgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVk
KHZtLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxs
b2NhdGlvbihBcnJheVdpdGhDb250aWd1b3VzKSwgMSk7CisgICAgICAgIGxvY2FsZXNBcnJheS0+
aW5pdGlhbGl6ZUluZGV4KHZtLCAwLCBsb2NhbGVzKTsKKyAgICAgICAgLy8gNC4gTGV0IE8gYmUg
VG9PYmplY3QoYUxvY2FsZXMpLgorICAgICAgICBsb2NhbGVzT2JqZWN0ID0gbG9jYWxlc0FycmF5
OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIDQuIExldCBPIGJlIFRvT2JqZWN0KGFMb2NhbGVz
KS4KKyAgICAgICAgbG9jYWxlc09iamVjdCA9IGxvY2FsZXMudG9PYmplY3QoZXhlYyk7CisgICAg
fQorCisgICAgLy8gNS4gUmV0dXJuSWZBYnJ1cHQoTykuCisgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIDYuIExldCBsZW4gYmUg
VG9MZW5ndGgoR2V0KE8sICJsZW5ndGgiKSkuCisgICAgSlNWYWx1ZSBsZW5ndGhQcm9wZXJ0eSA9
IGxvY2FsZXNPYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBkb3VibGUgbGVuZ3RoID0gbGVuZ3RoUHJvcGVydHkudG9MZW5ndGgoZXhlYyk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8v
IEtlZXAgdHJhY2sgb2YgbG9jYWxlcyB0aGF0IGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgbGlzdC4K
KyAgICBIYXNoU2V0PFN0cmluZz4gc2VlblNldDsKKworICAgIC8vIDcuIExldCBrIGJlIDAuCisg
ICAgLy8gOC4gUmVwZWF0LCB3aGlsZSBrIDwgbGVuCisgICAgZm9yIChkb3VibGUgayA9IDA7IGsg
PCBsZW5ndGg7ICsraykgeworICAgICAgICAvLyBhLiBMZXQgUGsgYmUgVG9TdHJpbmcoaykuCisg
ICAgICAgIC8vIE5vdCBuZWVkZWQgYmVjYXVzZSBoYXNQcm9wZXJ0eSBhbmQgZ2V0IHRha2UgYW4g
aW50IGZvciBudW1lcmljIGtleS4KKworICAgICAgICAvLyBiLiBMZXQga1ByZXNlbnQgYmUgSGFz
UHJvcGVydHkoTywgUGspLgorICAgICAgICBib29sIGtQcmVzZW50ID0gbG9jYWxlc09iamVjdC0+
aGFzUHJvcGVydHkoZXhlYywgayk7CisKKyAgICAgICAgLy8gYy4gUmV0dXJuSWZBYnJ1cHQoa1By
ZXNlbnQpLgorICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAvLyBkLiBJZiBrUHJlc2VudCBpcyB0cnVlLCB0aGVu
CisgICAgICAgIGlmIChrUHJlc2VudCkgeworICAgICAgICAgICAgLy8gaS4gTGV0IGtWYWx1ZSBi
ZSBHZXQoTywgUGspLgorICAgICAgICAgICAgSlNWYWx1ZSBrVmFsdWUgPSBsb2NhbGVzT2JqZWN0
LT5nZXQoZXhlYywgayk7CisKKyAgICAgICAgICAgIC8vIGlpLiBSZXR1cm5JZkFicnVwdChrVmFs
dWUpLgorICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgICAgICAvLyBpaWkuIElmIFR5cGUoa1ZhbHVl
KSBpcyBub3QgU3RyaW5nIG9yIE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLgor
ICAgICAgICAgICAgaWYgKCFrVmFsdWUuaXNTdHJpbmcoKSAmJiAha1ZhbHVlLmlzT2JqZWN0KCkp
IHsKKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImxv
Y2FsZSB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG9iamVjdCIpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gaXYuIExl
dCB0YWcgYmUgVG9TdHJpbmcoa1ZhbHVlKS4KKyAgICAgICAgICAgIEpTU3RyaW5nKiB0YWcgPSBr
VmFsdWUudG9TdHJpbmcoZXhlYyk7CisKKyAgICAgICAgICAgIC8vIHYuIFJldHVybklmQWJydXB0
KHRhZykuCisgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgICAgIC8vIHZpLiBJZiBJc1N0cnVjdHVy
YWxseVZhbGlkTGFuZ3VhZ2VUYWcodGFnKSBpcyBmYWxzZSwgdGhyb3cgYSBSYW5nZUVycm9yIGV4
Y2VwdGlvbi4KKyAgICAgICAgICAgIC8vIHZpaS4gTGV0IGNhbm9uaWNhbGl6ZWRUYWcgYmUgQ2Fu
b25pY2FsaXplTGFuZ3VhZ2VUYWcodGFnKS4KKyAgICAgICAgICAgIFN0cmluZyBjYW5vbmljYWxp
emVkVGFnID0gY2Fub25pY2FsaXplTGFuZ3VhZ2VUYWcodGFnLT52YWx1ZShleGVjKSk7CisgICAg
ICAgICAgICBpZiAoY2Fub25pY2FsaXplZFRhZy5pc051bGwoKSkgeworICAgICAgICAgICAgICAg
IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBT
dHJpbmc6OmZvcm1hdCgiaW52YWxpZCBsYW5ndWFnZSB0YWc6ICVzIiwgdGFnLT52YWx1ZShleGVj
KS51dGY4KCkuZGF0YSgpKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB2aWlpLiBJZiBjYW5vbmljYWxpemVkVGFnIGlz
IG5vdCBhbiBlbGVtZW50IG9mIHNlZW4sIGFwcGVuZCBjYW5vbmljYWxpemVkVGFnIGFzIHRoZSBs
YXN0IGVsZW1lbnQgb2Ygc2Vlbi4KKyAgICAgICAgICAgIGlmIChzZWVuU2V0LmFkZChjYW5vbmlj
YWxpemVkVGFnKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgIHNlZW4tPnB1c2goZXhlYywg
anNTdHJpbmcoZXhlYywgY2Fub25pY2FsaXplZFRhZykpOworICAgICAgICB9CisgICAgICAgIC8v
IGUuIEluY3JlYXNlIGsgYnkgMS4KKyAgICB9CisKKyAgICByZXR1cm4gc2VlbjsKK30KKworc3Rh
dGljIFN0cmluZyBiZXN0QXZhaWxhYmxlTG9jYWxlKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZh
aWxhYmxlTG9jYWxlcywgY29uc3QgU3RyaW5nJiBsb2NhbGUpCit7CisgICAgLy8gOS4yLjIgQmVz
dEF2YWlsYWJsZUxvY2FsZSAoYXZhaWxhYmxlTG9jYWxlcywgbG9jYWxlKQorICAgIC8vIDEuIExl
dCBjYW5kaWRhdGUgYmUgbG9jYWxlLgorICAgIFN0cmluZyBjYW5kaWRhdGUgPSBsb2NhbGU7CisK
KyAgICAvLyAyLiBSZXBlYXQKKyAgICB3aGlsZSAoIWNhbmRpZGF0ZS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgLy8gYS4gSWYgYXZhaWxhYmxlTG9jYWxlcyBjb250YWlucyBhbiBlbGVtZW50IGVxdWFs
IHRvIGNhbmRpZGF0ZSwgdGhlbiByZXR1cm4gY2FuZGlkYXRlLgorICAgICAgICBpZiAoYXZhaWxh
YmxlTG9jYWxlcy5jb250YWlucyhjYW5kaWRhdGUpKQorICAgICAgICAgICAgcmV0dXJuIGNhbmRp
ZGF0ZTsKKworICAgICAgICAvLyBiLiBMZXQgcG9zIGJlIHRoZSBjaGFyYWN0ZXIgaW5kZXggb2Yg
dGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiAiLSIgKFUrMDAyRCkgd2l0aGluIGNhbmRpZGF0ZS4gSWYg
dGhhdCBjaGFyYWN0ZXIgZG9lcyBub3Qgb2NjdXIsIHJldHVybiB1bmRlZmluZWQuCisgICAgICAg
IHNpemVfdCBwb3MgPSBjYW5kaWRhdGUucmV2ZXJzZUZpbmQoJy0nKTsKKyAgICAgICAgaWYgKHBv
cyA9PSBub3RGb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgICAgICAv
LyBjLiBJZiBwb3Mg4omlIDIgYW5kIHRoZSBjaGFyYWN0ZXIgIi0iIG9jY3VycyBhdCBpbmRleCBw
b3MtMiBvZiBjYW5kaWRhdGUsIHRoZW4gZGVjcmVhc2UgcG9zIGJ5IDIuCisgICAgICAgIGlmIChw
b3MgPj0gMiAmJiBjYW5kaWRhdGVbcG9zIC0gMl0gPT0gJy0nKQorICAgICAgICAgICAgcG9zIC09
IDI7CisKKyAgICAgICAgLy8gZC4gTGV0IGNhbmRpZGF0ZSBiZSB0aGUgc3Vic3RyaW5nIG9mIGNh
bmRpZGF0ZSBmcm9tIHBvc2l0aW9uIDAsIGluY2x1c2l2ZSwgdG8gcG9zaXRpb24gcG9zLCBleGNs
dXNpdmUuCisgICAgICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZS5zdWJzdHJpbmcoMCwgcG9zKTsK
KyAgICB9CisKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3N0YXRpYyBKU0FycmF5KiBsb29r
dXBTdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSGFzaFNldDxTdHJpbmc+
JiBhdmFpbGFibGVMb2NhbGVzLCBKU0FycmF5KiByZXF1ZXN0ZWRMb2NhbGVzKQoreworICAgIC8v
IDkuMi42IExvb2t1cFN1cHBvcnRlZExvY2FsZXMgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3Rl
ZExvY2FsZXMpCisKKyAgICAvLyAxLiBMZXQgckxvY2FsZXMgYmUgQ3JlYXRlQXJyYXlGcm9tTGlz
dChyZXF1ZXN0ZWRMb2NhbGVzKS4KKyAgICAvLyBBbHJlYWR5IGFuIGFycmF5LgorCisgICAgLy8g
Mi4gTGV0IGxlbiBiZSBUb0xlbmd0aChHZXQockxvY2FsZXMsICJsZW5ndGgiKSkuCisgICAgdW5z
aWduZWQgbGVuID0gcmVxdWVzdGVkTG9jYWxlcy0+bGVuZ3RoKCk7CisKKyAgICAvLyAzLiBMZXQg
c3Vic2V0IGJlIGFuIGVtcHR5IExpc3QuCisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVj
dCgpOworICAgIEpTQXJyYXkqIHN1YnNldCA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQodm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdB
bGxvY2F0aW9uKEFycmF5V2l0aFVuZGVjaWRlZCksIDApOworICAgIGlmICghc3Vic2V0KSB7Cisg
ICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgLy8gNC4gTGV0IGsgYmUgMC4KKyAgICAvLyA1LiBSZXBlYXQgd2hp
bGUgayA8IGxlbgorICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW47ICsraykgeworICAg
ICAgICAvLyBhLiBMZXQgUGsgYmUgVG9TdHJpbmcoaykuCisgICAgICAgIC8vIGIuIExldCBsb2Nh
bGUgYmUgR2V0KHJMb2NhbGVzLCBQaykuCisgICAgICAgIEpTVmFsdWUgbG9jYWxlID0gcmVxdWVz
dGVkTG9jYWxlcy0+Z2V0KGV4ZWMsIGspOworCisgICAgICAgIC8vIGMuIFJldHVybklmQWJydXB0
KGxvY2FsZSkuCisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgICAgIC8vIGQuIExldCBub0V4dGVuc2lvbnNMb2NhbGUg
YmUgdGhlIFN0cmluZyB2YWx1ZSB0aGF0IGlzIGxvY2FsZSB3aXRoIGFsbCBVbmljb2RlIGxvY2Fs
ZSBleHRlbnNpb24gc2VxdWVuY2VzIHJlbW92ZWQuCisgICAgICAgIEpTU3RyaW5nKiBqc0xvY2Fs
ZSA9IGxvY2FsZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgU3RyaW5nIHNMb2Nh
bGUgPSBqc0xvY2FsZS0+dmFsdWUoZXhlYyk7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IHBhcnRz
OworICAgICAgICBzTG9jYWxlLnNwbGl0KCctJywgcGFydHMpOworICAgICAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7CisgICAgICAgIHNpemVfdCBwYXJ0c1NpemUgPSBwYXJ0cy5zaXplKCk7Cisg
ICAgICAgIGlmIChwYXJ0c1NpemUgPiAwKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocGFy
dHNbMF0pOworICAgICAgICBmb3IgKHNpemVfdCBwID0gMTsgcCA8IHBhcnRzU2l6ZTsgKytwKSB7
CisgICAgICAgICAgICBpZiAocGFydHNbcF0gPT0gInUiKSB7CisgICAgICAgICAgICAgICAgLy8g
U2tpcCB0aGUgdS0gYW5kIGFueXRoaW5nIHRoYXQgZm9sbG93cyB1bnRpbCBhbm90aGVyIHNpbmds
ZXRvbi4KKyAgICAgICAgICAgICAgICAvLyBXaGlsZSB0aGUgbmV4dCBwYXJ0IGlzIHBhcnQgb2Yg
dGhlIHVuaWNvZGUgZXh0ZW5zaW9uLCBza2lwIGl0LgorICAgICAgICAgICAgICAgIHdoaWxlIChw
ICsgMSA8IHBhcnRzU2l6ZSAmJiBwYXJ0c1twICsgMV0ubGVuZ3RoKCkgPiAxKQorICAgICAgICAg
ICAgICAgICAgICArK3A7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCctJyk7CisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocGFydHNb
cF0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFN0cmluZyBub0V4dGVuc2lv
bnNMb2NhbGUgPSBidWlsZGVyLnRvU3RyaW5nKCk7CisKKyAgICAgICAgLy8gZS4gTGV0IGF2YWls
YWJsZUxvY2FsZSBiZSBCZXN0QXZhaWxhYmxlTG9jYWxlKGF2YWlsYWJsZUxvY2FsZXMsIG5vRXh0
ZW5zaW9uc0xvY2FsZSkuCisgICAgICAgIFN0cmluZyBhdmFpbGFibGVMb2NhbGUgPSBiZXN0QXZh
aWxhYmxlTG9jYWxlKGF2YWlsYWJsZUxvY2FsZXMsIG5vRXh0ZW5zaW9uc0xvY2FsZSk7CisKKyAg
ICAgICAgLy8gZi4gSWYgYXZhaWxhYmxlTG9jYWxlIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4gYXBw
ZW5kIGxvY2FsZSB0byB0aGUgZW5kIG9mIHN1YnNldC4KKyAgICAgICAgaWYgKCFhdmFpbGFibGVM
b2NhbGUuaXNOdWxsKCkpCisgICAgICAgICAgICBzdWJzZXQtPnB1c2goZXhlYywgbG9jYWxlKTsK
KworICAgICAgICAvLyBnLiBJbmNyZW1lbnQgayBieSAxLgorICAgIH0KKworICAgIC8vIDYuIFJl
dHVybiBzdWJzZXQuCisgICAgcmV0dXJuIHN1YnNldDsKK30KKworc3RhdGljIEpTQXJyYXkqIGJl
c3RGaXRTdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSGFzaFNldDxTdHJp
bmc+JiBhdmFpbGFibGVMb2NhbGVzLCBKU0FycmF5KiByZXF1ZXN0ZWRMb2NhbGVzKQoreworICAg
IC8vIDkuMi43IEJlc3RGaXRTdXBwb3J0ZWRMb2NhbGVzIChhdmFpbGFibGVMb2NhbGVzLCByZXF1
ZXN0ZWRMb2NhbGVzKQorICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgc29tZXRoaW5nIGJldHRlciB0
aGFuIGxvb2t1cC4KKyAgICByZXR1cm4gbG9va3VwU3VwcG9ydGVkTG9jYWxlcyhleGVjLCBhdmFp
bGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTsKK30KKworSlNWYWx1ZSBzdXBwb3J0ZWRM
b2NhbGVzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVM
b2NhbGVzLCBKU0FycmF5KiByZXF1ZXN0ZWRMb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnMpCit7Cisg
ICAgLy8gOS4yLjggU3VwcG9ydGVkTG9jYWxlcyAoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVk
TG9jYWxlcywgb3B0aW9ucykKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFN0cmluZyBt
YXRjaGVyOworCisgICAgLy8gMS4gSWYgb3B0aW9ucyBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCisg
ICAgaWYgKCFvcHRpb25zLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgLy8gYS4gTGV0IG1hdGNo
ZXIgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJsb2NhbGVNYXRjaGVyIiwgInN0cmluZyIsIMKrICJs
b29rdXAiLCAiYmVzdCBmaXQiIMK7LCAiYmVzdCBmaXQiKS4KKyAgICAgICAgY29uc3QgSGFzaFNl
dDxTdHJpbmc+IG1hdGNoZXJzKHsgQVNDSUlMaXRlcmFsKCJsb29rdXAiKSwgQVNDSUlMaXRlcmFs
KCJiZXN0IGZpdCIpIH0pOworICAgICAgICBtYXRjaGVyID0gZ2V0SW50bFN0cmluZ09wdGlvbihl
eGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCBtYXRjaGVycywg
ImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBvciBcImJlc3QgZml0XCIi
LCBBU0NJSUxpdGVyYWwoImJlc3QgZml0IikpOworICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVw
dChtYXRjaGVyKS4KKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gMi4gRWxz
ZSwgbGV0IG1hdGNoZXIgYmUgImJlc3QgZml0Ii4KKyAgICAgICAgbWF0Y2hlciA9IEFTQ0lJTGl0
ZXJhbCgiYmVzdCBmaXQiKTsKKyAgICB9CisKKyAgICBKU0FycmF5KiBzdXBwb3J0ZWRMb2NhbGVz
OworICAgIC8vIDMuIElmIG1hdGNoZXIgaXMgImJlc3QgZml0IiwKKyAgICBpZiAobWF0Y2hlciA9
PSAiYmVzdCBmaXQiKSB7CisgICAgICAgIC8vIGEuIExldCBNYXRjaGVyT3BlcmF0aW9uIGJlIHRo
ZSBhYnN0cmFjdCBvcGVyYXRpb24gQmVzdEZpdFN1cHBvcnRlZExvY2FsZXMuCisgICAgICAgIC8v
IDUuIExldCBzdXBwb3J0ZWRMb2NhbGVzIGJlIE1hdGNoZXJPcGVyYXRpb24oYXZhaWxhYmxlTG9j
YWxlcywgcmVxdWVzdGVkTG9jYWxlcykuCisgICAgICAgIHN1cHBvcnRlZExvY2FsZXMgPSBiZXN0
Rml0U3VwcG9ydGVkTG9jYWxlcyhleGVjLCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2Nh
bGVzKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyA0LiBFbHNlCisgICAgICAgIC8vIGEuIExl
dCBNYXRjaGVyT3BlcmF0aW9uIGJlIHRoZSBhYnN0cmFjdCBvcGVyYXRpb24gTG9va3VwU3VwcG9y
dGVkTG9jYWxlcy4KKyAgICAgICAgLy8gNS4gTGV0IHN1cHBvcnRlZExvY2FsZXMgYmUgTWF0Y2hl
ck9wZXJhdGlvbihhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKS4KKyAgICAgICAg
c3VwcG9ydGVkTG9jYWxlcyA9IGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoZXhlYywgYXZhaWxhYmxl
TG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcyk7CisgICAgfQorCisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIC8vIDYuIExl
dCBzdWJzZXQgYmUgQ3JlYXRlQXJyYXlGcm9tTGlzdChzdXBwb3J0ZWRMb2NhbGVzKS4KKyAgICAv
LyBBbHJlYWR5IGFuIGFycmF5LgorCisgICAgLy8gNy4gTGV0IGtleXMgYmUgc3Vic2V0LltbT3du
UHJvcGVydHlLZXlzXV0oKS4KKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKGV4ZWMsIFByb3Bl
cnR5TmFtZU1vZGU6OlN0cmluZ3MpOworICAgIHN1cHBvcnRlZExvY2FsZXMtPmdldE93blByb3Bl
cnR5TmFtZXMoc3VwcG9ydGVkTG9jYWxlcywgZXhlYywga2V5cywgRW51bWVyYXRpb25Nb2RlKCkp
OworCisgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2M7CisgICAgZGVzYy5zZXRDb25maWd1cmFi
bGUoZmFsc2UpOworICAgIGRlc2Muc2V0V3JpdGFibGUoZmFsc2UpOworCisgICAgLy8gOC4gUmVw
ZWF0IGZvciBlYWNoIGVsZW1lbnQgUCBvZiBrZXlzIGluIExpc3Qgb3JkZXIsCisgICAgc2l6ZV90
IGxlbiA9IGtleXMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuOyArK2kp
IHsKKyAgICAgICAgLy8gYS4gTGV0IGRlc2MgYmUgUHJvcGVydHlEZXNjcmlwdG9yIHsgW1tDb25m
aWd1cmFibGVdXTogZmFsc2UsIFtbV3JpdGFibGVdXTogZmFsc2UgfS4KKyAgICAgICAgLy8gQ3Jl
YXRlZCBhYm92ZSBmb3IgcmV1c2UuCisKKyAgICAgICAgLy8gYi4gTGV0IHN0YXR1cyBiZSBEZWZp
bmVQcm9wZXJ0eU9yVGhyb3coc3Vic2V0LCBQLCBkZXNjKS4KKyAgICAgICAgc3VwcG9ydGVkTG9j
YWxlcy0+ZGVmaW5lT3duUHJvcGVydHkoc3VwcG9ydGVkTG9jYWxlcywgZXhlYywga2V5c1tpXSwg
ZGVzYywgdHJ1ZSk7CisKKyAgICAgICAgLy8gYy4gQXNzZXJ0OiBzdGF0dXMgaXMgbm90IGFicnVw
dCBjb21wbGV0aW9uLgorICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICAvLyA5LiBSZXR1cm4gc3Vi
c2V0LgorICAgIHJldHVybiBzdXBwb3J0ZWRMb2NhbGVzOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIAogI2VuZGlmIC8vIEVOQUJMRShJTlRMKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bE9iamVjdC5oCmluZGV4IDgzNDI4NTQyYjJkMGZiYzdlNWIxNDRhMzZiY2JiODZlZGZj
YmJlODIuLmZkZTYyYjUzYTY2MDU3MmRkYzk5NDIwMzc1MmI3ZWQ3ZWQwMmE2OGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgKQEAgLTI4LDYgKzI4LDcgQEAK
IAogI2lmIEVOQUJMRShJTlRMKQogCisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNp
bmNsdWRlICJKU09iamVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTU2LDYgKzU3LDkgQEAg
cHJpdmF0ZToKICAgICBJbnRsT2JqZWN0KFZNJiwgU3RydWN0dXJlKik7CiB9OwogCitKU0FycmF5
KiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUgbG9jYWxlcyk7CitK
U1ZhbHVlIHN1cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlKiwgY29uc3QgSGFzaFNldDxTdHJpbmc+
JiBhdmFpbGFibGVMb2NhbGVzLCBKU0FycmF5KiByZXF1ZXN0ZWRMb2NhbGVzLCBKU1ZhbHVlIG9w
dGlvbnMpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShJTlRMKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAppbmRleCA5ZTBh
YWIxNzc0ZGUxN2EwM2NhNmRlMTJjOWU5OGY5ZDcyMzYzNjBiLi5hMGNmNzc3ZGQ2OThhNDY2ODRl
NDcwY2M1MjBiZWMxY2U0MThhODdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NKU1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NKU1ZhbHVlLmNwcApAQCAtNTYsNiArNTYsMTggQEAgZG91YmxlIEpTVmFsdWU6OnRvSW50
ZWdlclByZXNlcnZlTmFOKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICByZXR1cm4gdHJ1bmMo
dG9OdW1iZXIoZXhlYykpOwogfQogCitkb3VibGUgSlNWYWx1ZTo6dG9MZW5ndGgoRXhlY1N0YXRl
KiBleGVjKSBjb25zdAoreworICAgIC8vIEVDTUEgNy4xLjE1CisgICAgLy8gaHR0cDovL3d3dy5l
Y21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbGVuZ3RoCisgICAgZG91
YmxlIGQgPSB0b0ludGVnZXIoZXhlYyk7CisgICAgaWYgKGQgPD0gMCkKKyAgICAgICAgcmV0dXJu
IDAuMDsKKyAgICBpZiAoc3RkOjppc2luZihkKSkKKyAgICAgICAgcmV0dXJuIDkwMDcxOTkyNTQ3
NDA5OTEuMDsgLy8gMiAqKiA1MyAtIDEKKyAgICByZXR1cm4gc3RkOjptaW4oZCwgOTAwNzE5OTI1
NDc0MDk5MS4wKTsKK30KKwogZG91YmxlIEpTVmFsdWU6OnRvTnVtYmVyU2xvd0Nhc2UoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAogewogICAgIEFTU0VSVCghaXNJbnQzMigpICYmICFpc0RvdWJsZSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAppbmRleCBiN2Vh
YWQyZGEwYTJkNTMzNjZhOTFlNjRhNGMyOTNlYjBjYjk4Y2E3Li5jODAzYjY0OWE1MDcyMjU0NGE5
M2MwZjYxYzIwMTI1Y2ExMmI1ZGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NKU1ZhbHVlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDSlNWYWx1ZS5oCkBAIC0yNjIsNiArMjYyLDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGRvdWJsZSB0b0ludGVnZXJQcmVzZXJ2ZU5hTihFeGVjU3RhdGUqKSBjb25zdDsKICAg
ICBpbnQzMl90IHRvSW50MzIoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgdWludDMyX3QgdG9VSW50
MzIoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgZG91YmxlIHRvTGVuZ3RoKEV4ZWNTdGF0ZSopIGNv
bnN0OwogCiAgICAgLy8gRmxvYXRpbmcgcG9pbnQgY29udmVyc2lvbnMgKHRoaXMgaXMgYSBjb252
ZW5pZW5jZSBmdW5jdGlvbiBmb3IgV2ViQ29yZTsKICAgICAvLyBzaW5nbGUgcHJlY2lzaW9uIGZs
b2F0IGlzIG5vdCBhIHJlcHJlc2VudGF0aW9uIHVzZWQgaW4gSlMgb3IgSlNDKS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAyOTkx
MDY0OTgyODdkZjI4OTA2NTE4ZDNkYTI3MTIyZmI4YzdjMWNjLi41NDVhMTM0NzFkM2RmZTkxOGQ5
OTZmMGIwNTllYTU3ODY2NDhlZmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC0xNDcsNiArMTQ3LDkgQEAKIAogI2lmIEVOQUJM
RShJTlRMKQogI2luY2x1ZGUgIkludGxPYmplY3QuaCIKKyNpbmNsdWRlIDx1bmljb2RlL3Vjb2wu
aD4KKyNpbmNsdWRlIDx1bmljb2RlL3VkYXQuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3VudW0uaD4K
ICNlbmRpZiAvLyBFTkFCTEUoSU5UTCkKIAogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpA
QCAtMTAwNyw2ICsxMDEwLDUwIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnNldE5hbWUoY29uc3Qg
U3RyaW5nJiBuYW1lKQogI2VuZGlmCiB9CiAKKyMgaWYgRU5BQkxFKElOVEwpCitjb25zdCBIYXNo
U2V0PFN0cmluZz4mIEpTR2xvYmFsT2JqZWN0OjppbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVz
KCkKK3sKKyAgICBpZiAobV9pbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzLmlzRW1wdHkoKSkg
eworICAgICAgICBpbnQzMl90IGNvdW50ID0gdWNvbF9jb3VudEF2YWlsYWJsZSgpOworICAgICAg
ICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBTdHJp
bmcgbG9jYWxlKHVjb2xfZ2V0QXZhaWxhYmxlKGkpKTsKKyAgICAgICAgICAgIC8vIENoYW5nZSBm
cm9tIElDVSBmb3JtYXQgdG8gQkNQNDcuCisgICAgICAgICAgICBsb2NhbGUucmVwbGFjZSgnXycs
ICctJyk7CisgICAgICAgICAgICBtX2ludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMuYWRkKGxv
Y2FsZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG1faW50bENvbGxhdG9yQXZhaWxh
YmxlTG9jYWxlczsKK30KKworY29uc3QgSGFzaFNldDxTdHJpbmc+JiBKU0dsb2JhbE9iamVjdDo6
aW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpCit7CisgICAgaWYgKG1faW50bERh
dGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaW50MzJf
dCBjb3VudCA9IHVkYXRfY291bnRBdmFpbGFibGUoKTsKKyAgICAgICAgZm9yIChpbnQzMl90IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nIGxvY2FsZSh1ZGF0X2dl
dEF2YWlsYWJsZShpKSk7CisgICAgICAgICAgICAvLyBDaGFuZ2UgZnJvbSBJQ1UgZm9ybWF0IHRv
IEJDUDQ3LgorICAgICAgICAgICAgbG9jYWxlLnJlcGxhY2UoJ18nLCAnLScpOworICAgICAgICAg
ICAgbV9pbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzLmFkZChsb2NhbGUpOworICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiBtX2ludGxEYXRlVGltZUZvcm1hdEF2YWlsYWJsZUxv
Y2FsZXM7Cit9CisKK2NvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgSlNHbG9iYWxPYmplY3Q6OmludGxO
dW1iZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkKK3sKKyAgICBpZiAobV9pbnRsTnVtYmVyRm9y
bWF0QXZhaWxhYmxlTG9jYWxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaW50MzJfdCBjb3VudCA9
IHVudW1fY291bnRBdmFpbGFibGUoKTsKKyAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nIGxvY2FsZSh1bnVtX2dldEF2YWlsYWJs
ZShpKSk7CisgICAgICAgICAgICAvLyBDaGFuZ2UgZnJvbSBJQ1UgZm9ybWF0IHRvIEJDUDQ3Lgor
ICAgICAgICAgICAgbG9jYWxlLnJlcGxhY2UoJ18nLCAnLScpOworICAgICAgICAgICAgbV9pbnRs
TnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcy5hZGQobG9jYWxlKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gbV9pbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlczsKK30KKyNl
bmRpZiAvLyBFTkFCTEUoSU5UTCkKKwogdm9pZCBKU0dsb2JhbE9iamVjdDo6cXVldWVNaWNyb3Rh
c2soUGFzc1JlZlB0cjxNaWNyb3Rhc2s+IHRhc2spCiB7CiAgICAgaWYgKGdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKCktPnF1ZXVlVGFza1RvRXZlbnRMb29wKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCBkY2IzYTA4N2Y3OTliZjZiZDJj
NGE2NjM2ODYwODQzMWYxYmI0ZGVkLi4xZGY2ZGEyNDIwM2ZmN2QxNGI2YzQ2MWEzNWU1ZDA2OThm
NGM3MWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgKQEAgLTMwNyw2ICszMDcsMTIgQEAgcHJvdGVjdGVkOgogICAgIHN0ZDo6dW5pcXVlX3B0
cjxKU0dsb2JhbE9iamVjdERlYnVnZ2FibGU+IG1faW5zcGVjdG9yRGVidWdnYWJsZTsKICNlbmRp
ZgogCisjaWYgRU5BQkxFKElOVEwpCisgICAgSGFzaFNldDxTdHJpbmc+IG1faW50bENvbGxhdG9y
QXZhaWxhYmxlTG9jYWxlczsKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9pbnRsRGF0ZVRpbWVGb3Jt
YXRBdmFpbGFibGVMb2NhbGVzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2ludGxOdW1iZXJGb3Jt
YXRBdmFpbGFibGVMb2NhbGVzOworI2VuZGlmIC8vIEVOQUJMRShJTlRMKQorCiAgICAgUmVmUHRy
PFdhdGNocG9pbnRTZXQ+IG1fbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQ7CiAgICAg
UmVmUHRyPFdhdGNocG9pbnRTZXQ+IG1faGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50OwogICAgIFJl
ZlB0cjxXYXRjaHBvaW50U2V0PiBtX3ZhckluamVjdGlvbldhdGNocG9pbnQ7CkBAIC01MjUsNiAr
NTMxLDEyIEBAIHB1YmxpYzoKICAgICBKU0dsb2JhbE9iamVjdERlYnVnZ2FibGUmIGluc3BlY3Rv
ckRlYnVnZ2FibGUoKSB7IHJldHVybiAqbV9pbnNwZWN0b3JEZWJ1Z2dhYmxlLmdldCgpOyB9CiAj
ZW5kaWYKIAorI2lmIEVOQUJMRShJTlRMKQorICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50
bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYg
aW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IEhhc2hTZXQ8
U3RyaW5nPiYgaW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKKyNlbmRpZiAvLyBF
TkFCTEUoSU5UTCkKKwogICAgIHZvaWQgc2V0Q29uc29sZUNsaWVudChDb25zb2xlQ2xpZW50KiBj
b25zb2xlQ2xpZW50KSB7IG1fY29uc29sZUNsaWVudCA9IGNvbnNvbGVDbGllbnQ7IH0KICAgICBD
b25zb2xlQ2xpZW50KiBjb25zb2xlQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jb25zb2xlQ2xp
ZW50OyB9CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwppbmRleCA3MTZhYzk4M2QyZGY0N2M1Y2UxMzBmMGE3OWEzMzk2YjdiYWUzYWQz
Li44YzRkYzk3MTQwMDNmNmZjYjVlOTgwODVlMTVjNzk4YWVlYWQ3NzgxIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTcgQEAKKzIwMTUtMDktMTIgIEFuZHkgVmFuV2Fnb25lciAgPHRoZXRhbGVjcmFmdGVyQGdt
YWlsLmNvbT4KKworICAgICAgICBbSU5UTF0gSW1wbGVtZW50IHN1cHBvcnRlZExvY2FsZXNPZiBv
biBJbnRsIENvbnN0cnVjdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQ3NTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBqcy9pbnRsLWNvbGxhdG9yLWV4cGVjdGVkLnR4dDogQWRkZWQgdGVzdHMg
Zm9yIHN1cHBvcnRlZExvY2FsZXNPZgorICAgICAgICAqIGpzL2ludGwtZGF0ZXRpbWVmb3JtYXQt
ZXhwZWN0ZWQudHh0OiBBZGRlZCB0ZXN0cyBmb3Igc3VwcG9ydGVkTG9jYWxlc09mCisgICAgICAg
ICoganMvaW50bC1udW1iZXJmb3JtYXQtZXhwZWN0ZWQudHh0OiBBZGRlZCB0ZXN0cyBmb3Igc3Vw
cG9ydGVkTG9jYWxlc09mCisgICAgICAgICoganMvc2NyaXB0LXRlc3RzL2ludGwtY29sbGF0b3Iu
anM6IEFkZGVkIHRlc3RzIGZvciBzdXBwb3J0ZWRMb2NhbGVzT2YKKyAgICAgICAgKiBqcy9zY3Jp
cHQtdGVzdHMvaW50bC1kYXRldGltZWZvcm1hdC5qczogQWRkZWQgdGVzdHMgZm9yIHN1cHBvcnRl
ZExvY2FsZXNPZgorICAgICAgICAqIGpzL3NjcmlwdC10ZXN0cy9pbnRsLW51bWJlcmZvcm1hdC5q
czogQWRkZWQgdGVzdHMgZm9yIHN1cHBvcnRlZExvY2FsZXNPZgorCiAyMDE1LTA5LTExICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgU1ZHQ29s
b3IgY3VzdG9tIHRleHQgZm9ybWF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBDU1MgY29sb3IgY3Vz
dG9tIHRleHQgZm9ybWF0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9pbnRsLWNvbGxhdG9y
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL2ludGwtY29sbGF0b3ItZXhwZWN0ZWQudHh0
CmluZGV4IDRkNWZkZGY3NTZmYzhmZjAwMGZlZTMwYTU3ZGZhYTA2MjZlNDM1OTguLjY0ZDE3MmM3
Yjk5YTU3YjdhYjU5ZDNlMjRiMWUyN2FkMDJhMWJlY2QgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2pzL2ludGwtY29sbGF0b3ItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2pzL2ludGwt
Y29sbGF0b3ItZXhwZWN0ZWQudHh0CkBAIC0xOCw2ICsxOCwyOSBAQCBQQVNTIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSW50bC5Db2xsYXRvciwgJ3Byb3RvdHlwZScpLmVudW1lcmFi
bGUgaXMgZgogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuQ29sbGF0
b3IsICdwcm90b3R5cGUnKS5jb25maWd1cmFibGUgaXMgZmFsc2UKIFBBU1MgSW50bC5Db2xsYXRv
ci5zdXBwb3J0ZWRMb2NhbGVzT2YubGVuZ3RoIGlzIDEKIFBBU1MgSW50bC5Db2xsYXRvci5zdXBw
b3J0ZWRMb2NhbGVzT2YoKSBpcyBhbiBpbnN0YW5jZSBvZiBBcnJheQorUEFTUyBJbnRsLkNvbGxh
dG9yLnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKG51bGwsICdlbicpIGlzIFsgJ2VuJyBdCitQQVNT
IEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoe30sICdlbicpIGlzIFsgJ2Vu
JyBdCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoMSwgJ2VuJykg
aXMgWyAnZW4nIF0KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoOSkgaXMg
W10KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuJykgaXMgWyAnZW4n
IF0KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoeyBsZW5ndGg6IDQsIDE6
ICdlbicsIDA6ICdlcycsIDM6ICdkZScgfSkgaXMgWyAnZXMnLCAnZW4nLCAnZGUnIF0KK1BBU1Mg
SW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoWyAnZW4nLCAncHQnLCAnZW4nLCAnZXMn
IF0pIGlzIFsgJ2VuJywgJ3B0JywgJ2VzJyBdCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVk
TG9jYWxlc09mKCdFbi1sYVRuLXVzLXZhcmlhbnQyLXZhcmlhbnQxLTFhYmMtVS1rby10UnVlLUEt
YWEtYWFhLXgtUkVTRVJWRUQnKSBpcyBbICdlbi1MYXRuLVVTLXZhcmlhbnQyLXZhcmlhbnQxLTFh
YmMtYS1hYS1hYWEtdS1rby10cnVlLXgtcmVzZXJ2ZWQnIF0KK1BBU1MgSW50bC5Db2xsYXRvci5z
dXBwb3J0ZWRMb2NhbGVzT2YoJ25vLWJvaycpIGlzIFsgJ25iJyBdCitQQVNTIEludGwuQ29sbGF0
b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCd4LXNvbWUtdGhpbmcnKSBpcyBbXQorUEFTUyBJbnRsLkNv
bGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVuZ3RoOiB7
IGdldCgpIHsgdGhyb3cgRXJyb3IoJ2EnKSB9IH0gfSkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjog
YS4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoT2JqZWN0LmNyZWF0ZShu
dWxsLCB7IGxlbmd0aDogeyB2YWx1ZTogMSB9LCAwOiB7IGdldCgpIHsgdGhyb3cgRXJyb3IoJ2In
KSB9IH0gfSkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogYi4KK1BBU1MgSW50bC5Db2xsYXRvci5z
dXBwb3J0ZWRMb2NhbGVzT2YoWyB7IHRvU3RyaW5nKCkgeyB0aHJvdyBFcnJvcignYycpIH0gfSBd
KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IGMuCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVk
TG9jYWxlc09mKFsgNSBdKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBsb2NhbGUgdmFsdWUg
bXVzdCBiZSBhIHN0cmluZyBvciBvYmplY3QuCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVk
TG9jYWxlc09mKCcnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFn
ZSB0YWc6IC4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2EnKSB0aHJl
dyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGEuCitQQVNTIElu
dGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdhYmNkZWZnaGlqJykgdGhyZXcgZXhjZXB0
aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBhYmNkZWZnaGlqLgorUEFTUyBJ
bnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignIyQnKSB0aHJldyBleGNlcHRpb24gUmFu
Z2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6ICMkLgorUEFTUyBJbnRsLkNvbGxhdG9yLnN1
cHBvcnRlZExvY2FsZXNPZignZW4tQC1hYmMnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjog
aW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLUAtYWJjLgorUEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBv
cnRlZExvY2FsZXNPZignZW4tdScpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlk
IGxhbmd1YWdlIHRhZzogZW4tdS4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVz
T2YoJ2VuLXUta24tdHJ1ZS11LWtvLXRydWUnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjog
aW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXUta24tdHJ1ZS11LWtvLXRydWUuCitQQVNTIEludGwu
Q29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi14JykgdGhyZXcgZXhjZXB0aW9uIFJhbmdl
RXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi14LgorUEFTUyBJbnRsLkNvbGxhdG9yLnN1
cHBvcnRlZExvY2FsZXNPZignZW4tKicpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZh
bGlkIGxhbmd1YWdlIHRhZzogZW4tKi4KIFBBU1MgSW50bC5Db2xsYXRvci5wcm90b3R5cGUuY29u
c3RydWN0b3IgaXMgSW50bC5Db2xsYXRvcgogUEFTUyBJbnRsLkNvbGxhdG9yLnByb3RvdHlwZS5j
b21wYXJlIGlzIGFuIGluc3RhbmNlIG9mIEZ1bmN0aW9uCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoSW50bC5Db2xsYXRvci5wcm90b3R5cGUsICdjb21wYXJlJykuZ2V0IGlz
IGFuIGluc3RhbmNlIG9mIEZ1bmN0aW9uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9pbnRs
LWRhdGV0aW1lZm9ybWF0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL2ludGwtZGF0ZXRp
bWVmb3JtYXQtZXhwZWN0ZWQudHh0CmluZGV4IDYwMTczZmUyNzIyZWY2NWIyMjBkZDliZTQ3YWYx
NDJiZmJmMzg0MzUuLmRhZGFhYzA3Mzg2NjlhNTUyYmU1NjRhZDZkODM2ZmI4MzczZjIwM2QgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2pzL2ludGwtZGF0ZXRpbWVmb3JtYXQtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL2pzL2ludGwtZGF0ZXRpbWVmb3JtYXQtZXhwZWN0ZWQudHh0CkBA
IC0xOCw2ICsxOCwyOSBAQCBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSW50
bC5EYXRlVGltZUZvcm1hdCwgJ3Byb3RvdHlwZScpLmVudW1lcmFibAogUEFTUyBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuRGF0ZVRpbWVGb3JtYXQsICdwcm90b3R5cGUnKS5j
b25maWd1cmFibGUgaXMgZmFsc2UKIFBBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRM
b2NhbGVzT2YubGVuZ3RoIGlzIDEKIFBBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRM
b2NhbGVzT2YoKSBpcyBhbiBpbnN0YW5jZSBvZiBBcnJheQorUEFTUyBJbnRsLkRhdGVUaW1lRm9y
bWF0LnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKG51bGwsICdlbicpIGlzIFsgJ2VuJyBdCitQQVNT
IEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoe30sICdlbicpIGlz
IFsgJ2VuJyBdCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNh
bGwoMSwgJ2VuJykgaXMgWyAnZW4nIF0KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0
ZWRMb2NhbGVzT2YoOSkgaXMgW10KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRM
b2NhbGVzT2YoJ2VuJykgaXMgWyAnZW4nIF0KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBw
b3J0ZWRMb2NhbGVzT2YoeyBsZW5ndGg6IDQsIDE6ICdlbicsIDA6ICdlcycsIDM6ICdkZScgfSkg
aXMgWyAnZXMnLCAnZW4nLCAnZGUnIF0KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0
ZWRMb2NhbGVzT2YoWyAnZW4nLCAncHQnLCAnZW4nLCAnZXMnIF0pIGlzIFsgJ2VuJywgJ3B0Jywg
J2VzJyBdCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdFbi1s
YVRuLXVzLXZhcmlhbnQyLXZhcmlhbnQxLTFhYmMtVS1rby10UnVlLUEtYWEtYWFhLXgtUkVTRVJW
RUQnKSBpcyBbICdlbi1MYXRuLVVTLXZhcmlhbnQyLXZhcmlhbnQxLTFhYmMtYS1hYS1hYWEtdS1r
by10cnVlLXgtcmVzZXJ2ZWQnIF0KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRM
b2NhbGVzT2YoJ25vLWJvaycpIGlzIFsgJ25iJyBdCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQu
c3VwcG9ydGVkTG9jYWxlc09mKCd4LXNvbWUtdGhpbmcnKSBpcyBbXQorUEFTUyBJbnRsLkRhdGVU
aW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVuZ3Ro
OiB7IGdldCgpIHsgdGhyb3cgRXJyb3IoJ2EnKSB9IH0gfSkpIHRocmV3IGV4Y2VwdGlvbiBFcnJv
cjogYS4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoT2JqZWN0
LmNyZWF0ZShudWxsLCB7IGxlbmd0aDogeyB2YWx1ZTogMSB9LCAwOiB7IGdldCgpIHsgdGhyb3cg
RXJyb3IoJ2InKSB9IH0gfSkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogYi4KK1BBU1MgSW50bC5E
YXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoWyB7IHRvU3RyaW5nKCkgeyB0aHJvdyBF
cnJvcignYycpIH0gfSBdKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IGMuCitQQVNTIEludGwuRGF0
ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsgNSBdKSB0aHJldyBleGNlcHRpb24gVHlw
ZUVycm9yOiBsb2NhbGUgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvciBvYmplY3QuCitQQVNTIElu
dGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCcnKSB0aHJldyBleGNlcHRpb24g
UmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IC4KK1BBU1MgSW50bC5EYXRlVGltZUZv
cm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2EnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjog
aW52YWxpZCBsYW5ndWFnZSB0YWc6IGEuCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9y
dGVkTG9jYWxlc09mKCdhYmNkZWZnaGlqJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGlu
dmFsaWQgbGFuZ3VhZ2UgdGFnOiBhYmNkZWZnaGlqLgorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0
LnN1cHBvcnRlZExvY2FsZXNPZignIyQnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52
YWxpZCBsYW5ndWFnZSB0YWc6ICMkLgorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRl
ZExvY2FsZXNPZignZW4tQC1hYmMnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxp
ZCBsYW5ndWFnZSB0YWc6IGVuLUAtYWJjLgorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBv
cnRlZExvY2FsZXNPZignZW4tdScpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlk
IGxhbmd1YWdlIHRhZzogZW4tdS4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRM
b2NhbGVzT2YoJ2VuLXUta24tdHJ1ZS11LWtvLXRydWUnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VF
cnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXUta24tdHJ1ZS11LWtvLXRydWUuCitQQVNT
IEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi14JykgdGhyZXcgZXhj
ZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi14LgorUEFTUyBJbnRs
LkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tKicpIHRocmV3IGV4Y2VwdGlv
biBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tKi4KIFBBU1MgSW50bC5EYXRl
VGltZUZvcm1hdC5wcm90b3R5cGUuY29uc3RydWN0b3IgaXMgSW50bC5EYXRlVGltZUZvcm1hdAog
UEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZS5mb3JtYXQgaXMgYW4gaW5zdGFuY2Ug
b2YgRnVuY3Rpb24KIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJbnRsLkRh
dGVUaW1lRm9ybWF0LnByb3RvdHlwZSwgJ2Zvcm1hdCcpLmdldCBpcyBhbiBpbnN0YW5jZSBvZiBG
dW5jdGlvbgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvaW50bC1udW1iZXJmb3JtYXQtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvaW50bC1udW1iZXJmb3JtYXQtZXhwZWN0ZWQudHh0
CmluZGV4IDUyMTg1MWVkNjY1ZDhlNzQ4ZDFiNjkyNDY1MzQ2YjFmN2JlY2Y0ZDAuLjY5MmI2M2Ux
NGI4ZTRmMjRkZjNiMWVmZWI4NDYxMjQ3NTM0NjJjMzAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2pzL2ludGwtbnVtYmVyZm9ybWF0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9qcy9p
bnRsLW51bWJlcmZvcm1hdC1leHBlY3RlZC50eHQKQEAgLTE4LDYgKzE4LDI5IEBAIFBBU1MgT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJbnRsLk51bWJlckZvcm1hdCwgJ3Byb3RvdHlw
ZScpLmVudW1lcmFibGUKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJbnRs
Lk51bWJlckZvcm1hdCwgJ3Byb3RvdHlwZScpLmNvbmZpZ3VyYWJsZSBpcyBmYWxzZQogUEFTUyBJ
bnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YubGVuZ3RoIGlzIDEKIFBBU1MgSW50
bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCkgaXMgYW4gaW5zdGFuY2Ugb2YgQXJy
YXkKK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwobnVsbCwg
J2VuJykgaXMgWyAnZW4nIF0KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mLmNhbGwoe30sICdlbicpIGlzIFsgJ2VuJyBdCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1
cHBvcnRlZExvY2FsZXNPZi5jYWxsKDEsICdlbicpIGlzIFsgJ2VuJyBdCitQQVNTIEludGwuTnVt
YmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZig5KSBpcyBbXQorUEFTUyBJbnRsLk51bWJlckZv
cm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuJykgaXMgWyAnZW4nIF0KK1BBU1MgSW50bC5OdW1i
ZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKHsgbGVuZ3RoOiA0LCAxOiAnZW4nLCAwOiAnZXMn
LCAzOiAnZGUnIH0pIGlzIFsgJ2VzJywgJ2VuJywgJ2RlJyBdCitQQVNTIEludGwuTnVtYmVyRm9y
bWF0LnN1cHBvcnRlZExvY2FsZXNPZihbICdlbicsICdwdCcsICdlbicsICdlcycgXSkgaXMgWyAn
ZW4nLCAncHQnLCAnZXMnIF0KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mKCdFbi1sYVRuLXVzLXZhcmlhbnQyLXZhcmlhbnQxLTFhYmMtVS1rby10UnVlLUEtYWEtYWFh
LXgtUkVTRVJWRUQnKSBpcyBbICdlbi1MYXRuLVVTLXZhcmlhbnQyLXZhcmlhbnQxLTFhYmMtYS1h
YS1hYWEtdS1rby10cnVlLXgtcmVzZXJ2ZWQnIF0KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3Vw
cG9ydGVkTG9jYWxlc09mKCduby1ib2snKSBpcyBbICduYicgXQorUEFTUyBJbnRsLk51bWJlckZv
cm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ3gtc29tZS10aGluZycpIGlzIFtdCitQQVNTIEludGwu
TnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVu
Z3RoOiB7IGdldCgpIHsgdGhyb3cgRXJyb3IoJ2EnKSB9IH0gfSkpIHRocmV3IGV4Y2VwdGlvbiBF
cnJvcjogYS4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKE9iamVj
dC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgdmFsdWU6IDEgfSwgMDogeyBnZXQoKSB7IHRocm93
IEVycm9yKCdiJykgfSB9IH0pKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IGIuCitQQVNTIEludGwu
TnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihbIHsgdG9TdHJpbmcoKSB7IHRocm93IEVy
cm9yKCdjJykgfSB9IF0pIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogYy4KK1BBU1MgSW50bC5OdW1i
ZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsgNSBdKSB0aHJldyBleGNlcHRpb24gVHlwZUVy
cm9yOiBsb2NhbGUgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvciBvYmplY3QuCitQQVNTIEludGwu
TnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdl
RXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiAuCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1
cHBvcnRlZExvY2FsZXNPZignYScpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlk
IGxhbmd1YWdlIHRhZzogYS4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mKCdhYmNkZWZnaGlqJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFu
Z3VhZ2UgdGFnOiBhYmNkZWZnaGlqLgorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRM
b2NhbGVzT2YoJyMkJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3Vh
Z2UgdGFnOiAjJC4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdl
bi1ALWFiYycpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRh
ZzogZW4tQC1hYmMuCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZign
ZW4tdScpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzog
ZW4tdS4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi11LWtu
LXRydWUtdS1rby10cnVlJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFu
Z3VhZ2UgdGFnOiBlbi11LWtuLXRydWUtdS1rby10cnVlLgorUEFTUyBJbnRsLk51bWJlckZvcm1h
dC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXgnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjog
aW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXguCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBv
cnRlZExvY2FsZXNPZignZW4tKicpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlk
IGxhbmd1YWdlIHRhZzogZW4tKi4KIFBBU1MgSW50bC5OdW1iZXJGb3JtYXQucHJvdG90eXBlLmNv
bnN0cnVjdG9yIGlzIEludGwuTnVtYmVyRm9ybWF0CiBQQVNTIEludGwuTnVtYmVyRm9ybWF0LnBy
b3RvdHlwZS5mb3JtYXQgaXMgYW4gaW5zdGFuY2Ugb2YgRnVuY3Rpb24KIFBBU1MgT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUsICdmb3Jt
YXQnKS5nZXQgaXMgYW4gaW5zdGFuY2Ugb2YgRnVuY3Rpb24KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2pzL3NjcmlwdC10ZXN0cy9pbnRsLWNvbGxhdG9yLmpzIGIvTGF5b3V0VGVzdHMvanMvc2Ny
aXB0LXRlc3RzL2ludGwtY29sbGF0b3IuanMKaW5kZXggNWRlMTkwZWMzMzBjOThkYjE2MmUyZWI2
MzRiMWYzYTY1ZGI4OTUwOC4uOTBjMWI4MWRmNjYyM2JiMzMzMzk4YjJmZjVhN2YzMmRkMjhjZjRl
ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2ludGwtY29sbGF0b3Iu
anMKKysrIGIvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2ludGwtY29sbGF0b3IuanMKQEAg
LTM1LDggKzM1LDQxIEBAIHNob3VsZEJlRmFsc2UoIk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSW50bC5Db2xsYXRvciwgJ3Byb3RvdHlwZScpLmNvbmZpCiAvLyBUaGUgdmFsdWUgb2Yg
dGhlIGxlbmd0aCBwcm9wZXJ0eSBvZiB0aGUgc3VwcG9ydGVkTG9jYWxlc09mIG1ldGhvZCBpcyAx
Lgogc2hvdWxkQmUoIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mLmxlbmd0aCIsICIx
Iik7CiAKLS8vIFJldHVybnMgU3VwcG9ydGVkTG9jYWxlcworLy8gUmV0dXJucyBTdXBwb3J0ZWRM
b2NhbGVzLgogc2hvdWxkQmVUeXBlKCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZigp
IiwgIkFycmF5Iik7CisvLyBEb2Vzbid0IGNhcmUgYWJvdXQgYHRoaXNgLgorc2hvdWxkQmUoIklu
dGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwobnVsbCwgJ2VuJykiLCAiWyAnZW4n
IF0iKTsKK3Nob3VsZEJlKCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKHt9
LCAnZW4nKSIsICJbICdlbicgXSIpOworc2hvdWxkQmUoIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVk
TG9jYWxlc09mLmNhbGwoMSwgJ2VuJykiLCAiWyAnZW4nIF0iKTsKKy8vIElnbm9yZXMgbm9uLW9i
amVjdCwgbm9uLXN0cmluZyBsaXN0Lgorc2hvdWxkQmUoIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVk
TG9jYWxlc09mKDkpIiwgIltdIik7CisvLyBNYWtlcyBhbiBhcnJheSBvZiB0YWdzLgorc2hvdWxk
QmUoIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdlbicpIiwgIlsgJ2VuJyBdIik7
CisvLyBIYW5kbGVzIGFycmF5LWxpa2Ugb2JqZWN0cyB3aXRoIGhvbGVzLgorc2hvdWxkQmUoIklu
dGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKHsgbGVuZ3RoOiA0LCAxOiAnZW4nLCAwOiAn
ZXMnLCAzOiAnZGUnIH0pIiwgIlsgJ2VzJywgJ2VuJywgJ2RlJyBdIik7CisvLyBEZWR1cGxpY2F0
ZXMgdGFncy4KK3Nob3VsZEJlKCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZihbICdl
bicsICdwdCcsICdlbicsICdlcycgXSkiLCAiWyAnZW4nLCAncHQnLCAnZXMnIF0iKTsKKy8vIENh
bm9uaWNhbGl6ZXMgdGFncy4KK3Nob3VsZEJlKCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2Fs
ZXNPZignRW4tbGFUbi11cy12YXJpYW50Mi12YXJpYW50MS0xYWJjLVUta28tdFJ1ZS1BLWFhLWFh
YS14LVJFU0VSVkVEJykiLCAiWyAnZW4tTGF0bi1VUy12YXJpYW50Mi12YXJpYW50MS0xYWJjLWEt
YWEtYWFhLXUta28tdHJ1ZS14LXJlc2VydmVkJyBdIik7CisvLyBSZXBsYWNlcyBvdXRkYXRlZCB0
YWdzLgorc2hvdWxkQmUoIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCduby1ib2sn
KSIsICJbICduYicgXSIpOworLy8gRG9lc24ndCB0aHJvdywgYnV0IGlnbm9yZXMgcHJpdmF0ZSB0
YWdzLgorc2hvdWxkQmUoIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCd4LXNvbWUt
dGhpbmcnKSIsICJbXSIpOworLy8gVGhyb3dzIG9uIHByb2JsZW1zIHdpdGggbGVuZ3RoLCBnZXQs
IG9yIHRvU3RyaW5nLgorc2hvdWxkVGhyb3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxl
c09mKE9iamVjdC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcign
YScpIH0gfSB9KSkiLCAiJ0Vycm9yOiBhJyIpOworc2hvdWxkVGhyb3coIkludGwuQ29sbGF0b3Iu
c3VwcG9ydGVkTG9jYWxlc09mKE9iamVjdC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgdmFsdWU6
IDEgfSwgMDogeyBnZXQoKSB7IHRocm93IEVycm9yKCdiJykgfSB9IH0pKSIsICInRXJyb3I6IGIn
Iik7CitzaG91bGRUaHJvdygiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoWyB7IHRv
U3RyaW5nKCkgeyB0aHJvdyBFcnJvcignYycpIH0gfSBdKSIsICInRXJyb3I6IGMnIik7CisvLyBU
aHJvd3Mgb24gYmFkIHRhZ3MuCitzaG91bGRUaHJvdygiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRM
b2NhbGVzT2YoWyA1IF0pIiwgIidUeXBlRXJyb3I6IGxvY2FsZSB2YWx1ZSBtdXN0IGJlIGEgc3Ry
aW5nIG9yIG9iamVjdCciKTsKK3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExv
Y2FsZXNPZignJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiAnIik7Citz
aG91bGRUaHJvdygiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2EnKSIsICInUmFu
Z2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGEnIik7CitzaG91bGRUaHJvdygiSW50bC5D
b2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2FiY2RlZmdoaWonKSIsICInUmFuZ2VFcnJvcjog
aW52YWxpZCBsYW5ndWFnZSB0YWc6IGFiY2RlZmdoaWonIik7CitzaG91bGRUaHJvdygiSW50bC5D
b2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJyMkJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQg
bGFuZ3VhZ2UgdGFnOiAjJCciKTsKK3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRl
ZExvY2FsZXNPZignZW4tQC1hYmMnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0
YWc6IGVuLUAtYWJjJyIpOworc2hvdWxkVGhyb3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9j
YWxlc09mKCdlbi11JykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi11
JyIpOworc2hvdWxkVGhyb3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi11
LWtuLXRydWUtdS1rby10cnVlJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFn
OiBlbi11LWtuLXRydWUtdS1rby10cnVlJyIpOworc2hvdWxkVGhyb3coIkludGwuQ29sbGF0b3Iu
c3VwcG9ydGVkTG9jYWxlc09mKCdlbi14JykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3Vh
Z2UgdGFnOiBlbi14JyIpOworc2hvdWxkVGhyb3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9j
YWxlc09mKCdlbi0qJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi0q
JyIpOwogCiAvLyAxMC4zIFByb3BlcnRpZXMgb2YgdGhlIEludGwuQ29sbGF0b3IgUHJvdG90eXBl
IE9iamVjdAogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1k
YXRldGltZWZvcm1hdC5qcyBiL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9pbnRsLWRhdGV0
aW1lZm9ybWF0LmpzCmluZGV4IGJjN2M5YTc3Y2UyMTE2MmRkMmI4MzdmNTVmZTRmMTcyM2NmNzg0
ZjguLmNlN2Q5MjlkOTU2ZDY0MjE4ZjdhNGFjOWM4MWFhMGU0ZjBlZWExNzMgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9pbnRsLWRhdGV0aW1lZm9ybWF0LmpzCisrKyBi
L0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9pbnRsLWRhdGV0aW1lZm9ybWF0LmpzCkBAIC0z
Nyw2ICszNywzOSBAQCBzaG91bGRCZSgiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2Nh
bGVzT2YubGVuZ3RoIiwgIjEiKTsKIAogLy8gUmV0dXJucyBTdXBwb3J0ZWRMb2NhbGVzCiBzaG91
bGRCZVR5cGUoIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCkiLCAiQXJy
YXkiKTsKKy8vIERvZXNuJ3QgY2FyZSBhYm91dCBgdGhpc2AuCitzaG91bGRCZSgiSW50bC5EYXRl
VGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbChudWxsLCAnZW4nKSIsICJbICdlbicg
XSIpOworc2hvdWxkQmUoIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNh
bGwoe30sICdlbicpIiwgIlsgJ2VuJyBdIik7CitzaG91bGRCZSgiSW50bC5EYXRlVGltZUZvcm1h
dC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbCgxLCAnZW4nKSIsICJbICdlbicgXSIpOworLy8gSWdu
b3JlcyBub24tb2JqZWN0LCBub24tc3RyaW5nIGxpc3QuCitzaG91bGRCZSgiSW50bC5EYXRlVGlt
ZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoOSkiLCAiW10iKTsKKy8vIE1ha2VzIGFuIGFycmF5
IG9mIHRhZ3MuCitzaG91bGRCZSgiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YoJ2VuJykiLCAiWyAnZW4nIF0iKTsKKy8vIEhhbmRsZXMgYXJyYXktbGlrZSBvYmplY3RzIHdp
dGggaG9sZXMuCitzaG91bGRCZSgiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YoeyBsZW5ndGg6IDQsIDE6ICdlbicsIDA6ICdlcycsIDM6ICdkZScgfSkiLCAiWyAnZXMnLCAn
ZW4nLCAnZGUnIF0iKTsKKy8vIERlZHVwbGljYXRlcyB0YWdzLgorc2hvdWxkQmUoIkludGwuRGF0
ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsgJ2VuJywgJ3B0JywgJ2VuJywgJ2VzJyBd
KSIsICJbICdlbicsICdwdCcsICdlcycgXSIpOworLy8gQ2Fub25pY2FsaXplcyB0YWdzLgorc2hv
dWxkQmUoIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdFbi1sYVRuLXVz
LXZhcmlhbnQyLXZhcmlhbnQxLTFhYmMtVS1rby10UnVlLUEtYWEtYWFhLXgtUkVTRVJWRUQnKSIs
ICJbICdlbi1MYXRuLVVTLXZhcmlhbnQyLXZhcmlhbnQxLTFhYmMtYS1hYS1hYWEtdS1rby10cnVl
LXgtcmVzZXJ2ZWQnIF0iKTsKKy8vIFJlcGxhY2VzIG91dGRhdGVkIHRhZ3MuCitzaG91bGRCZSgi
SW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ25vLWJvaycpIiwgIlsgJ25i
JyBdIik7CisvLyBEb2Vzbid0IHRocm93LCBidXQgaWdub3JlcyBwcml2YXRlIHRhZ3MuCitzaG91
bGRCZSgiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ3gtc29tZS10aGlu
ZycpIiwgIltdIik7CisvLyBUaHJvd3Mgb24gcHJvYmxlbXMgd2l0aCBsZW5ndGgsIGdldCwgb3Ig
dG9TdHJpbmcuCitzaG91bGRUaHJvdygiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2Nh
bGVzT2YoT2JqZWN0LmNyZWF0ZShudWxsLCB7IGxlbmd0aDogeyBnZXQoKSB7IHRocm93IEVycm9y
KCdhJykgfSB9IH0pKSIsICInRXJyb3I6IGEnIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRlVGlt
ZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoT2JqZWN0LmNyZWF0ZShudWxsLCB7IGxlbmd0aDog
eyB2YWx1ZTogMSB9LCAwOiB7IGdldCgpIHsgdGhyb3cgRXJyb3IoJ2InKSB9IH0gfSkpIiwgIidF
cnJvcjogYiciKTsKK3Nob3VsZFRocm93KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExv
Y2FsZXNPZihbIHsgdG9TdHJpbmcoKSB7IHRocm93IEVycm9yKCdjJykgfSB9IF0pIiwgIidFcnJv
cjogYyciKTsKKy8vIFRocm93cyBvbiBiYWQgdGFncy4KK3Nob3VsZFRocm93KCJJbnRsLkRhdGVU
aW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihbIDUgXSkiLCAiJ1R5cGVFcnJvcjogbG9jYWxl
IHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb3Igb2JqZWN0JyIpOworc2hvdWxkVGhyb3coIkludGwu
RGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCcnKSIsICInUmFuZ2VFcnJvcjogaW52
YWxpZCBsYW5ndWFnZSB0YWc6ICciKTsKK3Nob3VsZFRocm93KCJJbnRsLkRhdGVUaW1lRm9ybWF0
LnN1cHBvcnRlZExvY2FsZXNPZignYScpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdl
IHRhZzogYSciKTsKK3Nob3VsZFRocm93KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExv
Y2FsZXNPZignYWJjZGVmZ2hpaicpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRh
ZzogYWJjZGVmZ2hpaiciKTsKK3Nob3VsZFRocm93KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBv
cnRlZExvY2FsZXNPZignIyQnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6
ICMkJyIpOworc2hvdWxkVGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mKCdlbi1ALWFiYycpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4t
QC1hYmMnIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2Nh
bGVzT2YoJ2VuLXUnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXUn
Iik7CitzaG91bGRUaHJvdygiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2Yo
J2VuLXUta24tdHJ1ZS11LWtvLXRydWUnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFn
ZSB0YWc6IGVuLXUta24tdHJ1ZS11LWtvLXRydWUnIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRl
VGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXgnKSIsICInUmFuZ2VFcnJvcjogaW52
YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXgnIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRlVGltZUZv
cm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLSonKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBs
YW5ndWFnZSB0YWc6IGVuLSonIik7CiAKIC8vIDEyLjMgUHJvcGVydGllcyBvZiB0aGUgSW50bC5E
YXRlVGltZUZvcm1hdCBQcm90b3R5cGUgT2JqZWN0CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2pzL3NjcmlwdC10ZXN0cy9pbnRsLW51bWJlcmZvcm1hdC5qcyBiL0xheW91dFRlc3RzL2pzL3Nj
cmlwdC10ZXN0cy9pbnRsLW51bWJlcmZvcm1hdC5qcwppbmRleCAwNjVkOTIxNTY1NDM0MmRhN2U0
ZjIzM2U2M2NkNTdhZGZlNTlkNGViLi5iOGRhZGIwNjUwMjgyNjgwZWY5M2E5YjA5OWQwOGRlY2Fl
ZWFmMjA0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1udW1i
ZXJmb3JtYXQuanMKKysrIGIvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2ludGwtbnVtYmVy
Zm9ybWF0LmpzCkBAIC0zNyw2ICszNywzOSBAQCBzaG91bGRCZSgiSW50bC5OdW1iZXJGb3JtYXQu
c3VwcG9ydGVkTG9jYWxlc09mLmxlbmd0aCIsICIxIik7CiAKIC8vIFJldHVybnMgU3VwcG9ydGVk
TG9jYWxlcwogc2hvdWxkQmVUeXBlKCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YoKSIsICJBcnJheSIpOworLy8gRG9lc24ndCBjYXJlIGFib3V0IGB0aGlzYC4KK3Nob3VsZEJl
KCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbChudWxsLCAnZW4nKSIs
ICJbICdlbicgXSIpOworc2hvdWxkQmUoIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2Fs
ZXNPZi5jYWxsKHt9LCAnZW4nKSIsICJbICdlbicgXSIpOworc2hvdWxkQmUoIkludGwuTnVtYmVy
Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKDEsICdlbicpIiwgIlsgJ2VuJyBdIik7Cisv
LyBJZ25vcmVzIG5vbi1vYmplY3QsIG5vbi1zdHJpbmcgbGlzdC4KK3Nob3VsZEJlKCJJbnRsLk51
bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoOSkiLCAiW10iKTsKKy8vIE1ha2VzIGFuIGFy
cmF5IG9mIHRhZ3MuCitzaG91bGRCZSgiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mKCdlbicpIiwgIlsgJ2VuJyBdIik7CisvLyBIYW5kbGVzIGFycmF5LWxpa2Ugb2JqZWN0cyB3
aXRoIGhvbGVzLgorc2hvdWxkQmUoIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNP
Zih7IGxlbmd0aDogNCwgMTogJ2VuJywgMDogJ2VzJywgMzogJ2RlJyB9KSIsICJbICdlcycsICdl
bicsICdkZScgXSIpOworLy8gRGVkdXBsaWNhdGVzIHRhZ3MuCitzaG91bGRCZSgiSW50bC5OdW1i
ZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsgJ2VuJywgJ3B0JywgJ2VuJywgJ2VzJyBdKSIs
ICJbICdlbicsICdwdCcsICdlcycgXSIpOworLy8gQ2Fub25pY2FsaXplcyB0YWdzLgorc2hvdWxk
QmUoIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignRW4tbGFUbi11cy12YXJp
YW50Mi12YXJpYW50MS0xYWJjLVUta28tdFJ1ZS1BLWFhLWFhYS14LVJFU0VSVkVEJykiLCAiWyAn
ZW4tTGF0bi1VUy12YXJpYW50Mi12YXJpYW50MS0xYWJjLWEtYWEtYWFhLXUta28tdHJ1ZS14LXJl
c2VydmVkJyBdIik7CisvLyBSZXBsYWNlcyBvdXRkYXRlZCB0YWdzLgorc2hvdWxkQmUoIkludGwu
TnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignbm8tYm9rJykiLCAiWyAnbmInIF0iKTsK
Ky8vIERvZXNuJ3QgdGhyb3csIGJ1dCBpZ25vcmVzIHByaXZhdGUgdGFncy4KK3Nob3VsZEJlKCJJ
bnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ3gtc29tZS10aGluZycpIiwgIltd
Iik7CisvLyBUaHJvd3Mgb24gcHJvYmxlbXMgd2l0aCBsZW5ndGgsIGdldCwgb3IgdG9TdHJpbmcu
CitzaG91bGRUaHJvdygiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKE9iamVj
dC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcignYScpIH0gfSB9
KSkiLCAiJ0Vycm9yOiBhJyIpOworc2hvdWxkVGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBv
cnRlZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVuZ3RoOiB7IHZhbHVlOiAxIH0s
IDA6IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcignYicpIH0gfSB9KSkiLCAiJ0Vycm9yOiBiJyIpOwor
c2hvdWxkVGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihbIHsgdG9T
dHJpbmcoKSB7IHRocm93IEVycm9yKCdjJykgfSB9IF0pIiwgIidFcnJvcjogYyciKTsKKy8vIFRo
cm93cyBvbiBiYWQgdGFncy4KK3Nob3VsZFRocm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0
ZWRMb2NhbGVzT2YoWyA1IF0pIiwgIidUeXBlRXJyb3I6IGxvY2FsZSB2YWx1ZSBtdXN0IGJlIGEg
c3RyaW5nIG9yIG9iamVjdCciKTsKK3Nob3VsZFRocm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBw
b3J0ZWRMb2NhbGVzT2YoJycpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzog
JyIpOworc2hvdWxkVGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZign
YScpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogYSciKTsKK3Nob3VsZFRo
cm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2FiY2RlZmdoaWonKSIs
ICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGFiY2RlZmdoaWonIik7CitzaG91
bGRUaHJvdygiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCcjJCcpIiwgIidS
YW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogIyQnIik7CitzaG91bGRUaHJvdygiSW50
bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi1ALWFiYycpIiwgIidSYW5nZUVy
cm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tQC1hYmMnIik7CitzaG91bGRUaHJvdygiSW50
bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi11JykiLCAiJ1JhbmdlRXJyb3I6
IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi11JyIpOworc2hvdWxkVGhyb3coIkludGwuTnVtYmVy
Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tdS1rbi10cnVlLXUta28tdHJ1ZScpIiwgIidS
YW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tdS1rbi10cnVlLXUta28tdHJ1ZSci
KTsKK3Nob3VsZFRocm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2Vu
LXgnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXgnIik7CitzaG91
bGRUaHJvdygiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi0qJykiLCAi
J1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi0qJyIpOwogCiAvLyAxMS4zIFBy
b3BlcnRpZXMgb2YgdGhlIEludGwuTnVtYmVyRm9ybWF0IFByb3RvdHlwZSBPYmplY3QKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261056</attachid>
            <date>2015-09-12 10:12:59 -0700</date>
            <delta_ts>2015-09-15 07:59:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147599-20150912111249.patch</filename>
            <type>text/plain</type>
            <size>182259</size>
            <attacher name="Andy VanWagoner">andy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5NjQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
YWRiYTlkMTcxZTJhYjk4YTRhMjBlY2VkNTU0MTY4NzY0MjkzM2M3Li4xNzQyNzUwMjA4NGU5Njhk
MTBhMTgyZDk1Mzg1NWE5ZjY3YmM1ZGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0OCBAQAorMjAxNS0wOS0xMiAgQW5keSBWYW5XYWdvbmVyICA8dGhldGFsZWNyYWZ0ZXJA
Z21haWwuY29tPgorCisgICAgICAgIFtJTlRMXSBJbXBsZW1lbnQgc3VwcG9ydGVkTG9jYWxlc09m
IG9uIEludGwgQ29uc3RydWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDc1OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbXBsZW1lbnRzIGFsbCBvZiB0aGUgYWJzdHJhY3Qgb3BlcmF0aW9ucyB1
c2VkIGJ5IHN1cHBvcnRlZExvY2FsZXNPZiwKKyAgICAgICAgZXhjZXB0IGR1cmluZyBjYW5vbmlj
YWxpemF0aW9uIGl0IGRvZXMgbm90IHJlcGxhY2UgcmVkdW5kYW50IHRhZ3MsCisgICAgICAgIG9y
IHN1YnRhZ3Mgd2l0aCB0aGVpciBwcmVmZXJyZWQgdmFsdWVzLgorCisgICAgICAgICogaWN1L3Vu
aWNvZGUvdWNhbC5oOiBBZGRlZC4KKyAgICAgICAgKiBpY3UvdW5pY29kZS91ZGF0Lmg6IEFkZGVk
LgorICAgICAgICAqIGljdS91bmljb2RlL3VtaXNjLmg6IEFkZGVkLgorICAgICAgICAqIGljdS91
bmljb2RlL3VudW0uaDogQWRkZWQuCisgICAgICAgICogaWN1L3VuaWNvZGUvdXR5cGVzLmg6IENs
ZWFyIHRoZSBVX1NIT1dfQ1BMVVNQTFVTX0FQSSBmbGFnIHRvIHByZXZlbnQgQysrIGhlYWRlcnMg
ZnJvbSBiZWluZyBpbmNsdWRlZC4KKyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJz
Lmg6IEFkZGUgbG9jYWxlTWF0Y2hlci4KKyAgICAgICAgKiBydW50aW1lL0ludGxDb2xsYXRvckNv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yQ29uc3RydWN0b3JGdW5j
U3VwcG9ydGVkTG9jYWxlc09mKTogSW1wbGVtZW50ZWQuCisgICAgICAgICogcnVudGltZS9JbnRs
RGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkludGxEYXRlVGlt
ZUZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZik6IEltcGxlbWVudGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNP
Zik6IEltcGxlbWVudGVkLgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OmNhbm9uaWNhbGl6ZUxhbmd1YWdlVGFnKToKKyAgICAgICAgKEpTQzo6Z2V0Q2Fu
b25pY2FsTGFuZ1RhZyk6CisgICAgICAgIChKU0M6OmdldFByaXZhdGVVc2VMYW5nVGFnKToKKyAg
ICAgICAgKEpTQzo6Z2V0R3JhbmRmYXRoZXJlZExhbmdUYWcpOgorICAgICAgICAoSlNDOjpjYW5v
bmljYWxpemVMb2NhbGVMaXN0KToKKyAgICAgICAgKEpTQzo6YmVzdEF2YWlsYWJsZUxvY2FsZSk6
CisgICAgICAgIChKU0M6Omxvb2t1cFN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAoSlNDOjpi
ZXN0Rml0U3VwcG9ydGVkTG9jYWxlcyk6CisgICAgICAgIChKU0M6OnN1cHBvcnRlZExvY2FsZXMp
OgorICAgICAgICAoSlNDOjpnZXRJbnRsU3RyaW5nT3B0aW9uKToKKyAgICAgICAgKEpTQzo6Z2V0
SW50bEJvb2xlYW5PcHRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5oOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5oOiBBZGRlZCB0b0xlbmd0aC4KKyAgICAgICAgKiBy
dW50aW1lL0pTQ0pTVmFsdWUuY3BwOiBBZGRlZCB0b0xlbmd0aC4KKyAgICAgICAgKEpTQzo6SlNW
YWx1ZTo6dG9MZW5ndGgpOiBJbXBsZW1lbnQgVG9MZW5ndGggZnJvbSBFQ01BIDI2MiA2LjAgNy4x
LjE1CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjppbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKTogQWRkZWQgbGF6
eSBsb2NhbGUgbGlzdC4KKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmludGxEYXRlVGlt
ZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMpOiBBZGRlZCBsYXp5IGxvY2FsZSBsaXN0LgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMp
OiBBZGRlZCBsYXp5IGxvY2FsZSBsaXN0LgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaDoKKwogMjAxNS0wOS0xMSAgU3Vrb2xzYWsgU2Frc2h1d29uZyAgPHN1a29sc2FrQGdtYWls
LmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgdGhlIHJlbGF0aW9uYWwgaW5zdHJ1Y3Rpb25zIGZv
ciBmbG9hdHMgaW4gV2ViQXNzZW1ibHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pY3UvdW5pY29kZS91Y2FsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUv
dWNhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjk5N2FmMTUzZDQzOWI0YzEzMmQ0Y2YwYzFlNTE4MjI2OThiMzdi
MTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUv
dWNhbC5oCkBAIC0wLDAgKzEsMTI4NSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisg
KiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5l
cyBDb3Jwb3JhdGlvbiBhbmQKKyAqIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBVQ0FMX0gKKyNkZWZpbmUgVUNBTF9I
CisKKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWVudW0u
aCIKKyNpbmNsdWRlICJ1bmljb2RlL3Vsb2MuaCIKKyNpbmNsdWRlICJ1bmljb2RlL2xvY2FscG9p
bnRlci5oIgorCisjaWYgIVVDT05GSUdfTk9fRk9STUFUVElORworCisvKioKKyAqIFxmaWxlCisg
KiBcYnJpZWYgQyBBUEk6IENhbGVuZGFyCisgKgorICogPGgyPkNhbGVuZGFyIEMgQVBJPC9oMj4K
KyAqCisgKiBVQ2FsZW5kYXIgQyBBUEkgaXMgdXNlZCAgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBh
IDxjb2RlPlVEYXRlPC9jb2RlPiBvYmplY3QKKyAqIGFuZCBhIHNldCBvZiBpbnRlZ2VyIGZpZWxk
cyBzdWNoIGFzIDxjb2RlPlVDQUxfWUVBUjwvY29kZT4sIDxjb2RlPlVDQUxfTU9OVEg8L2NvZGU+
LAorICogPGNvZGU+VUNBTF9EQVk8L2NvZGU+LCA8Y29kZT5VQ0FMX0hPVVI8L2NvZGU+LCBhbmQg
c28gb24uCisgKiAoQSA8Y29kZT5VRGF0ZTwvY29kZT4gb2JqZWN0IHJlcHJlc2VudHMgYSBzcGVj
aWZpYyBpbnN0YW50IGluCisgKiB0aW1lIHdpdGggbWlsbGlzZWNvbmQgcHJlY2lzaW9uLiBTZWUg
VURhdGUKKyAqIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgPGNvZGU+VURhdGU8L2NvZGU+IC4p
CisgKgorICogPHA+CisgKiBUeXBlcyBvZiA8Y29kZT5VQ2FsZW5kYXI8L2NvZGU+IGludGVycHJl
dCBhIDxjb2RlPlVEYXRlPC9jb2RlPgorICogYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiBhIHNw
ZWNpZmljIGNhbGVuZGFyIHN5c3RlbS4gVGhlIFVfU1RBQkxFCisgKiBwcm92aWRlcyB0aGUgZW51
bSBVQ2FsZW5kYXJUeXBlIHdpdGggVUNBTF9UUkFESVRJT05BTCBhbmQKKyAqIFVDQUxfR1JFR09S
SUFOLgorICogPHA+CisgKiBMaWtlIG90aGVyIGxvY2FsZS1zZW5zaXRpdmUgQyBBUEksIGNhbGVu
ZGFyIEFQSSAgcHJvdmlkZXMgYQorICogZnVuY3Rpb24sIDxjb2RlPnVjYWxfb3BlbigpPC9jb2Rl
Piwgd2hpY2ggcmV0dXJucyBhIHBvaW50ZXIgdG8KKyAqIDxjb2RlPlVDYWxlbmRhcjwvY29kZT4g
d2hvc2UgdGltZSBmaWVsZHMgaGF2ZSBiZWVuIGluaXRpYWxpemVkCisgKiB3aXRoIHRoZSBjdXJy
ZW50IGRhdGUgYW5kIHRpbWUuIFdlIG5lZWQgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZgorICogY2Fs
ZW5kYXIgdG8gYmUgb3BlbmVkIGFuZCB0aGUgIHRpbWV6b25lSWQuCisgKiBcaHRtbG9ubHk8Ymxv
Y2txdW90ZT5cZW5kaHRtbG9ubHkKKyAqIDxwcmU+CisgKiBcY29kZQorICogVUNhbGVuZGFyICpj
YWxkZWY7CisgKiBVQ2hhciAqdHpJZDsKKyAqIFVFcnJvckNvZGUgc3RhdHVzOworICogdHpJZD0o
VUNoYXIqKW1hbGxvYyhzaXplb2YoVUNoYXIpICogKHN0cmxlbigiUFNUIikgKzEpICk7CisgKiB1
X3Vhc3RyY3B5KHR6SWQsICJQU1QiKTsKKyAqIGNhbGRlZj11Y2FsX29wZW4odHpJRCwgdV9zdHJs
ZW4odHpJRCksIE5VTEwsIFVDQUxfVFJBRElUSU9OQUwsICZzdGF0dXMpOworICogXGVuZGNvZGUK
KyAqIDwvcHJlPgorICogXGh0bWxvbmx5PC9ibG9ja3F1b3RlPlxlbmRodG1sb25seQorICoKKyAq
IDxwPgorICogQSA8Y29kZT5VQ2FsZW5kYXI8L2NvZGU+IG9iamVjdCBjYW4gcHJvZHVjZSBhbGwg
dGhlIHRpbWUgZmllbGQgdmFsdWVzCisgKiBuZWVkZWQgdG8gaW1wbGVtZW50IHRoZSBkYXRlLXRp
bWUgZm9ybWF0dGluZyBmb3IgYSBwYXJ0aWN1bGFyIGxhbmd1YWdlCisgKiBhbmQgY2FsZW5kYXIg
c3R5bGUgKGZvciBleGFtcGxlLCBKYXBhbmVzZS1HcmVnb3JpYW4sIEphcGFuZXNlLVRyYWRpdGlv
bmFsKS4KKyAqCisgKiA8cD4KKyAqIFdoZW4gY29tcHV0aW5nIGEgPGNvZGU+VURhdGU8L2NvZGU+
IGZyb20gdGltZSBmaWVsZHMsIHR3byBzcGVjaWFsIGNpcmN1bXN0YW5jZXMKKyAqIG1heSBhcmlz
ZTogdGhlcmUgbWF5IGJlIGluc3VmZmljaWVudCBpbmZvcm1hdGlvbiB0byBjb21wdXRlIHRoZQor
ICogPGNvZGU+VURhdGU8L2NvZGU+IChzdWNoIGFzIG9ubHkgeWVhciBhbmQgbW9udGggYnV0IG5v
IGRheSBpbiB0aGUgbW9udGgpLAorICogb3IgdGhlcmUgbWF5IGJlIGluY29uc2lzdGVudCBpbmZv
cm1hdGlvbiAoc3VjaCBhcyAiVHVlc2RheSwgSnVseSAxNSwgMTk5NiIKKyAqIC0tIEp1bHkgMTUs
IDE5OTYgaXMgYWN0dWFsbHkgYSBNb25kYXkpLgorICoKKyAqIDxwPgorICogPHN0cm9uZz5JbnN1
ZmZpY2llbnQgaW5mb3JtYXRpb24uPC9zdHJvbmc+IFRoZSBjYWxlbmRhciB3aWxsIHVzZSBkZWZh
dWx0CisgKiBpbmZvcm1hdGlvbiB0byBzcGVjaWZ5IHRoZSBtaXNzaW5nIGZpZWxkcy4gVGhpcyBt
YXkgdmFyeSBieSBjYWxlbmRhcjsgZm9yCisgKiB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyLCB0aGUg
ZGVmYXVsdCBmb3IgYSBmaWVsZCBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZQorICogc3RhcnQg
b2YgdGhlIGVwb2NoOiBpLmUuLCBVQ0FMX1lFQVIgPSAxOTcwLCBVQ0FMX01PTlRIID0gSkFOVUFS
WSwgVUNBTF9EQVRFID0gMSwgZXRjLgorICoKKyAqIDxwPgorICogPHN0cm9uZz5JbmNvbnNpc3Rl
bnQgaW5mb3JtYXRpb24uPC9zdHJvbmc+IElmIGZpZWxkcyBjb25mbGljdCwgdGhlIGNhbGVuZGFy
CisgKiB3aWxsIGdpdmUgcHJlZmVyZW5jZSB0byBmaWVsZHMgc2V0IG1vcmUgcmVjZW50bHkuIEZv
ciBleGFtcGxlLCB3aGVuCisgKiBkZXRlcm1pbmluZyB0aGUgZGF5LCB0aGUgY2FsZW5kYXIgd2ls
bCBsb29rIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZworICogY29tYmluYXRpb25zIG9mIGZpZWxk
cy4gIFRoZSBtb3N0IHJlY2VudCBjb21iaW5hdGlvbiwgYXMgZGV0ZXJtaW5lZCBieSB0aGUKKyAq
IG1vc3QgcmVjZW50bHkgc2V0IHNpbmdsZSBmaWVsZCwgd2lsbCBiZSB1c2VkLgorICoKKyAqIFxo
dG1sb25seTxibG9ja3F1b3RlPlxlbmRodG1sb25seQorICogPHByZT4KKyAqIFxjb2RlCisgKiBV
Q0FMX01PTlRIICsgVUNBTF9EQVlfT0ZfTU9OVEgKKyAqIFVDQUxfTU9OVEggKyBVQ0FMX1dFRUtf
T0ZfTU9OVEggKyBVQ0FMX0RBWV9PRl9XRUVLCisgKiBVQ0FMX01PTlRIICsgVUNBTF9EQVlfT0Zf
V0VFS19JTl9NT05USCArIFVDQUxfREFZX09GX1dFRUsKKyAqIFVDQUxfREFZX09GX1lFQVIKKyAq
IFVDQUxfREFZX09GX1dFRUsgKyBVQ0FMX1dFRUtfT0ZfWUVBUgorICogXGVuZGNvZGUKKyAqIDwv
cHJlPgorICogXGh0bWxvbmx5PC9ibG9ja3F1b3RlPlxlbmRodG1sb25seQorICoKKyAqIEZvciB0
aGUgdGltZSBvZiBkYXk6CisgKgorICogXGh0bWxvbmx5PGJsb2NrcXVvdGU+XGVuZGh0bWxvbmx5
CisgKiA8cHJlPgorICogXGNvZGUKKyAqIFVDQUxfSE9VUl9PRl9EQVkKKyAqIFVDQUxfQU1fUE0g
KyBVQ0FMX0hPVVIKKyAqIFxlbmRjb2RlCisgKiA8L3ByZT4KKyAqIFxodG1sb25seTwvYmxvY2tx
dW90ZT5cZW5kaHRtbG9ubHkKKyAqCisgKiA8cD4KKyAqIDxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4g
Zm9yIHNvbWUgbm9uLUdyZWdvcmlhbiBjYWxlbmRhcnMsIGRpZmZlcmVudAorICogZmllbGRzIG1h
eSBiZSBuZWNlc3NhcnkgZm9yIGNvbXBsZXRlIGRpc2FtYmlndWF0aW9uLiBGb3IgZXhhbXBsZSwg
YSBmdWxsCisgKiBzcGVjaWZpY2F0aW9uIG9mIHRoZSBoaXN0b3JpYWwgQXJhYmljIGFzdHJvbm9t
aWNhbCBjYWxlbmRhciByZXF1aXJlcyB5ZWFyLAorICogbW9udGgsIGRheS1vZi1tb250aCA8ZW0+
YW5kPC9lbT4gZGF5LW9mLXdlZWsgaW4gc29tZSBjYXNlcy4KKyAqCisgKiA8cD4KKyAqIDxzdHJv
bmc+Tm90ZTo8L3N0cm9uZz4gVGhlcmUgYXJlIGNlcnRhaW4gcG9zc2libGUgYW1iaWd1aXRpZXMg
aW4KKyAqIGludGVycHJldGF0aW9uIG9mIGNlcnRhaW4gc2luZ3VsYXIgdGltZXMsIHdoaWNoIGFy
ZSByZXNvbHZlZCBpbiB0aGUKKyAqIGZvbGxvd2luZyB3YXlzOgorICogPG9sPgorICogICAgIDxs
aT4gMjQ6MDA6MDAgImJlbG9uZ3MiIHRvIHRoZSBmb2xsb3dpbmcgZGF5LiBUaGF0IGlzLAorICog
ICAgICAgICAgMjM6NTkgb24gRGVjIDMxLCAxOTY5ICZsdDsgMjQ6MDAgb24gSmFuIDEsIDE5NzAg
Jmx0OyAyNDowMTowMCBvbiBKYW4gMSwgMTk3MAorICoKKyAqICAgICA8bGk+IEFsdGhvdWdoIGhp
c3RvcmljYWxseSBub3QgcHJlY2lzZSwgbWlkbmlnaHQgYWxzbyBiZWxvbmdzIHRvICJhbSIsCisg
KiAgICAgICAgICBhbmQgbm9vbiBiZWxvbmdzIHRvICJwbSIsIHNvIG9uIHRoZSBzYW1lIGRheSwK
KyAqICAgICAgICAgIDEyOjAwIGFtIChtaWRuaWdodCkgJmx0OyAxMjowMSBhbSwgYW5kIDEyOjAw
IHBtIChub29uKSAmbHQ7IDEyOjAxIHBtCisgKiA8L29sPgorICoKKyAqIDxwPgorICogVGhlIGRh
dGUgb3IgdGltZSBmb3JtYXQgc3RyaW5ncyBhcmUgbm90IHBhcnQgb2YgdGhlIGRlZmluaXRpb24g
b2YgYQorICogY2FsZW5kYXIsIGFzIHRob3NlIG11c3QgYmUgbW9kaWZpYWJsZSBvciBvdmVycmlk
YWJsZSBieSB0aGUgdXNlciBhdAorICogcnVudGltZS4gVXNlIHtAbGluayBEYXRlRm9ybWF0fQor
ICogdG8gZm9ybWF0IGRhdGVzLgorICoKKyAqIDxwPgorICogPGNvZGU+Q2FsZW5kYXI8L2NvZGU+
IHByb3ZpZGVzIGFuIEFQSSBmb3IgZmllbGQgInJvbGxpbmciLCB3aGVyZSBmaWVsZHMKKyAqIGNh
biBiZSBpbmNyZW1lbnRlZCBvciBkZWNyZW1lbnRlZCwgYnV0IHdyYXAgYXJvdW5kLiBGb3IgZXhh
bXBsZSwgcm9sbGluZyB0aGUKKyAqIG1vbnRoIHVwIGluIHRoZSBkYXRlIDxjb2RlPkRlY2VtYmVy
IDEyLCA8Yj4xOTk2PC9iPjwvY29kZT4gcmVzdWx0cyBpbgorICogPGNvZGU+SmFudWFyeSAxMiwg
PGI+MTk5NjwvYj48L2NvZGU+LgorICoKKyAqIDxwPgorICogPGNvZGU+Q2FsZW5kYXI8L2NvZGU+
IGFsc28gcHJvdmlkZXMgYSBkYXRlIGFyaXRobWV0aWMgZnVuY3Rpb24gZm9yCisgKiBhZGRpbmcg
dGhlIHNwZWNpZmllZCAoc2lnbmVkKSBhbW91bnQgb2YgdGltZSB0byBhIHBhcnRpY3VsYXIgdGlt
ZSBmaWVsZC4KKyAqIEZvciBleGFtcGxlLCBzdWJ0cmFjdGluZyA1IGRheXMgZnJvbSB0aGUgZGF0
ZSA8Y29kZT5TZXB0ZW1iZXIgMTIsIDE5OTY8L2NvZGU+CisgKiByZXN1bHRzIGluIDxjb2RlPlNl
cHRlbWJlciA3LCAxOTk2PC9jb2RlPi4KKyAqCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworCisv
KiogQSBjYWxlbmRhci4KKyAqICBGb3IgdXNhZ2UgaW4gQyBwcm9ncmFtcy4KKyAqIEBzdGFibGUg
SUNVIDIuMAorICovCit0eXBlZGVmIHZvaWQqIFVDYWxlbmRhcjsKKworLyoqIFBvc3NpYmxlIHR5
cGVzIG9mIFVDYWxlbmRhcnMgCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworZW51bSBVQ2FsZW5k
YXJUeXBlIHsKKyAgLyoqCisgICAqIERlc3BpdGUgdGhlIG5hbWUsIFVDQUxfVFJBRElUSU9OQUwg
ZGVzaWduYXRlcyB0aGUgbG9jYWxlJ3MgZGVmYXVsdCBjYWxlbmRhciwKKyAgICogd2hpY2ggbWF5
IGJlIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIgb3Igc29tZSBvdGhlciBjYWxlbmRhci4KKyAgICog
QHN0YWJsZSBJQ1UgMi4wCisgICAqLworICBVQ0FMX1RSQURJVElPTkFMLAorICAvKioKKyAgICog
QSBiZXR0ZXIgbmFtZSBmb3IgVUNBTF9UUkFESVRJT05BTC4KKyAgICogQHN0YWJsZSBJQ1UgNC4y
CisgICAqLworICBVQ0FMX0RFRkFVTFQgPSBVQ0FMX1RSQURJVElPTkFMLAorICAvKioKKyAgICog
VW5hbWJpZ3VvdXNseSBkZXNpZ25hdGVzIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIgZm9yIHRoZSBs
b2NhbGUuCisgICAqIEBzdGFibGUgSUNVIDIuMAorICAgKi8KKyAgVUNBTF9HUkVHT1JJQU4KK307
CisKKy8qKiBAc3RhYmxlIElDVSAyLjAgKi8KK3R5cGVkZWYgZW51bSBVQ2FsZW5kYXJUeXBlIFVD
YWxlbmRhclR5cGU7CisKKy8qKiBQb3NzaWJsZSBmaWVsZHMgaW4gYSBVQ2FsZW5kYXIgCisgKiBA
c3RhYmxlIElDVSAyLjAKKyAqLworZW51bSBVQ2FsZW5kYXJEYXRlRmllbGRzIHsKKyAgLyoqIAor
ICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUgZXJhLCBlLmcuLCBBRCBvciBCQyBpbiB0
aGUgR3JlZ29yaWFuIChKdWxpYW4pIGNhbGVuZGFyLiAKKyAgICogVGhpcyBpcyBhIGNhbGVuZGFy
LXNwZWNpZmljIHZhbHVlLgorICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAqLworICBVQ0FMX0VS
QSwKKworICAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlIHllYXIuIFRoaXMg
aXMgYSBjYWxlbmRhci1zcGVjaWZpYyB2YWx1ZS4KKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAg
Ki8KKyAgVUNBTF9ZRUFSLAorCisgIC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZyB0
aGUgbW9udGguIFRoaXMgaXMgYSBjYWxlbmRhci1zcGVjaWZpYyB2YWx1ZS4gCisgICAqIFRoZSBm
aXJzdCBtb250aCBvZiB0aGUgeWVhciBpcworICAgKiA8Y29kZT5KQU5VQVJZPC9jb2RlPjsgdGhl
IGxhc3QgZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mIG1vbnRocyBpbiBhIHllYXIuCisgICAqIEBz
ZWUgI1VDQUxfSkFOVUFSWQorICAgKiBAc2VlICNVQ0FMX0ZFQlJVQVJZCisgICAqIEBzZWUgI1VD
QUxfTUFSQ0gKKyAgICogQHNlZSAjVUNBTF9BUFJJTAorICAgKiBAc2VlICNVQ0FMX01BWQorICAg
KiBAc2VlICNVQ0FMX0pVTkUKKyAgICogQHNlZSAjVUNBTF9KVUxZCisgICAqIEBzZWUgI1VDQUxf
QVVHVVNUCisgICAqIEBzZWUgI1VDQUxfU0VQVEVNQkVSCisgICAqIEBzZWUgI1VDQUxfT0NUT0JF
UgorICAgKiBAc2VlICNVQ0FMX05PVkVNQkVSCisgICAqIEBzZWUgI1VDQUxfREVDRU1CRVIKKyAg
ICogQHNlZSAjVUNBTF9VTkRFQ0lNQkVSCisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisg
IFVDQUxfTU9OVEgsCisKKyAgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZQor
ICAgKiB3ZWVrIG51bWJlciB3aXRoaW4gdGhlIGN1cnJlbnQgeWVhci4gIFRoZSBmaXJzdCB3ZWVr
IG9mIHRoZSB5ZWFyLCBhcworICAgKiBkZWZpbmVkIGJ5IDxjb2RlPlVDQUxfRklSU1RfREFZX09G
X1dFRUs8L2NvZGU+IGFuZCA8Y29kZT5VQ0FMX01JTklNQUxfREFZU19JTl9GSVJTVF9XRUVLPC9j
b2RlPgorICAgKiBhdHRyaWJ1dGVzLCBoYXMgdmFsdWUgMS4gIFN1YmNsYXNzZXMgZGVmaW5lCisg
ICAqIHRoZSB2YWx1ZSBvZiA8Y29kZT5VQ0FMX1dFRUtfT0ZfWUVBUjwvY29kZT4gZm9yIGRheXMg
YmVmb3JlIHRoZSBmaXJzdCB3ZWVrIG9mCisgICAqIHRoZSB5ZWFyLgorICAgKiBAc2VlIHVjYWxf
Z2V0QXR0cmlidXRlCisgICAqIEBzZWUgdWNhbF9zZXRBdHRyaWJ1dGUKKyAgICogQHN0YWJsZSBJ
Q1UgMi42IAorICAgKi8KKyAgVUNBTF9XRUVLX09GX1lFQVIsCisKKyAvKioKKyAgICogRmllbGQg
bnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIHdlZWsgbnVtYmVyIHdpdGhpbiB0aGUgY3VycmVu
dCBtb250aC4gIFRoZSBmaXJzdCB3ZWVrIG9mIHRoZSBtb250aCwgYXMKKyAgICogZGVmaW5lZCBi
eSA8Y29kZT5VQ0FMX0ZJUlNUX0RBWV9PRl9XRUVLPC9jb2RlPiBhbmQgPGNvZGU+VUNBTF9NSU5J
TUFMX0RBWVNfSU5fRklSU1RfV0VFSzwvY29kZT4KKyAgICogYXR0cmlidXRlcywgaGFzIHZhbHVl
IDEuICBTdWJjbGFzc2VzIGRlZmluZQorICAgKiB0aGUgdmFsdWUgb2YgPGNvZGU+V0VFS19PRl9N
T05USDwvY29kZT4gZm9yIGRheXMgYmVmb3JlIHRoZSBmaXJzdCB3ZWVrIG9mCisgICAqIHRoZSBt
b250aC4KKyAgICogQHNlZSB1Y2FsX2dldEF0dHJpYnV0ZQorICAgKiBAc2VlIHVjYWxfc2V0QXR0
cmlidXRlCisgICAqIEBzZWUgI1VDQUxfRklSU1RfREFZX09GX1dFRUsKKyAgICogQHNlZSAjVUNB
TF9NSU5JTUFMX0RBWVNfSU5fRklSU1RfV0VFSworICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAq
LworICBVQ0FMX1dFRUtfT0ZfTU9OVEgsCisKKyAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGlj
YXRpbmcgdGhlCisgICAqIGRheSBvZiB0aGUgbW9udGguIFRoaXMgaXMgYSBzeW5vbnltIGZvciA8
Y29kZT5EQVlfT0ZfTU9OVEg8L2NvZGU+LgorICAgKiBUaGUgZmlyc3QgZGF5IG9mIHRoZSBtb250
aCBoYXMgdmFsdWUgMS4KKyAgICogQHNlZSAjVUNBTF9EQVlfT0ZfTU9OVEgKKyAgICogQHN0YWJs
ZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9EQVRFLAorCisgLyoqCisgICAqIEZpZWxkIG51bWJl
ciBpbmRpY2F0aW5nIHRoZSBkYXkKKyAgICogbnVtYmVyIHdpdGhpbiB0aGUgY3VycmVudCB5ZWFy
LiAgVGhlIGZpcnN0IGRheSBvZiB0aGUgeWVhciBoYXMgdmFsdWUgMS4KKyAgICogQHN0YWJsZSBJ
Q1UgMi42IAorICAgKi8KKyAgVUNBTF9EQVlfT0ZfWUVBUiwKKworIC8qKgorICAgKiBGaWVsZCBu
dW1iZXIgaW5kaWNhdGluZyB0aGUgZGF5CisgICAqIG9mIHRoZSB3ZWVrLiAgVGhpcyBmaWVsZCB0
YWtlcyB2YWx1ZXMgPGNvZGU+U1VOREFZPC9jb2RlPiwKKyAgICogPGNvZGU+TU9OREFZPC9jb2Rl
PiwgPGNvZGU+VFVFU0RBWTwvY29kZT4sIDxjb2RlPldFRE5FU0RBWTwvY29kZT4sCisgICAqIDxj
b2RlPlRIVVJTREFZPC9jb2RlPiwgPGNvZGU+RlJJREFZPC9jb2RlPiwgYW5kIDxjb2RlPlNBVFVS
REFZPC9jb2RlPi4KKyAgICogQHNlZSAjVUNBTF9TVU5EQVkKKyAgICogQHNlZSAjVUNBTF9NT05E
QVkKKyAgICogQHNlZSAjVUNBTF9UVUVTREFZCisgICAqIEBzZWUgI1VDQUxfV0VETkVTREFZCisg
ICAqIEBzZWUgI1VDQUxfVEhVUlNEQVkKKyAgICogQHNlZSAjVUNBTF9GUklEQVkKKyAgICogQHNl
ZSAjVUNBTF9TQVRVUkRBWQorICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAqLworICBVQ0FMX0RB
WV9PRl9XRUVLLAorCisgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZQorICAg
KiBvcmRpbmFsIG51bWJlciBvZiB0aGUgZGF5IG9mIHRoZSB3ZWVrIHdpdGhpbiB0aGUgY3VycmVu
dCBtb250aC4gVG9nZXRoZXIKKyAgICogd2l0aCB0aGUgPGNvZGU+REFZX09GX1dFRUs8L2NvZGU+
IGZpZWxkLCB0aGlzIHVuaXF1ZWx5IHNwZWNpZmllcyBhIGRheQorICAgKiB3aXRoaW4gYSBtb250
aC4gIFVubGlrZSA8Y29kZT5XRUVLX09GX01PTlRIPC9jb2RlPiBhbmQKKyAgICogPGNvZGU+V0VF
S19PRl9ZRUFSPC9jb2RlPiwgdGhpcyBmaWVsZCdzIHZhbHVlIGRvZXMgPGVtPm5vdDwvZW0+IGRl
cGVuZCBvbgorICAgKiA8Y29kZT5nZXRGaXJzdERheU9mV2VlaygpPC9jb2RlPiBvcgorICAgKiA8
Y29kZT5nZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrKCk8L2NvZGU+LiAgPGNvZGU+REFZX09GX01P
TlRIIDE8L2NvZGU+CisgICAqIHRocm91Z2ggPGNvZGU+NzwvY29kZT4gYWx3YXlzIGNvcnJlc3Bv
bmQgdG8gPGNvZGU+REFZX09GX1dFRUtfSU5fTU9OVEgKKyAgICogMTwvY29kZT47IDxjb2RlPjg8
L2NvZGU+IHRocm91Z2ggPGNvZGU+MTU8L2NvZGU+IGNvcnJlc3BvbmQgdG8KKyAgICogPGNvZGU+
REFZX09GX1dFRUtfSU5fTU9OVEggMjwvY29kZT4sIGFuZCBzbyBvbi4KKyAgICogPGNvZGU+REFZ
X09GX1dFRUtfSU5fTU9OVEggMDwvY29kZT4gaW5kaWNhdGVzIHRoZSB3ZWVrIGJlZm9yZQorICAg
KiA8Y29kZT5EQVlfT0ZfV0VFS19JTl9NT05USCAxPC9jb2RlPi4gIE5lZ2F0aXZlIHZhbHVlcyBj
b3VudCBiYWNrIGZyb20gdGhlCisgICAqIGVuZCBvZiB0aGUgbW9udGgsIHNvIHRoZSBsYXN0IFN1
bmRheSBvZiBhIG1vbnRoIGlzIHNwZWNpZmllZCBhcworICAgKiA8Y29kZT5EQVlfT0ZfV0VFSyA9
IFNVTkRBWSwgREFZX09GX1dFRUtfSU5fTU9OVEggPSAtMTwvY29kZT4uICBCZWNhdXNlCisgICAq
IG5lZ2F0aXZlIHZhbHVlcyBjb3VudCBiYWNrd2FyZCB0aGV5IHdpbGwgdXN1YWxseSBiZSBhbGln
bmVkIGRpZmZlcmVudGx5CisgICAqIHdpdGhpbiB0aGUgbW9udGggdGhhbiBwb3NpdGl2ZSB2YWx1
ZXMuICBGb3IgZXhhbXBsZSwgaWYgYSBtb250aCBoYXMgMzEKKyAgICogZGF5cywgPGNvZGU+REFZ
X09GX1dFRUtfSU5fTU9OVEggLTE8L2NvZGU+IHdpbGwgb3ZlcmxhcAorICAgKiA8Y29kZT5EQVlf
T0ZfV0VFS19JTl9NT05USCA1PC9jb2RlPiBhbmQgdGhlIGVuZCBvZiA8Y29kZT40PC9jb2RlPi4K
KyAgICogQHNlZSAjVUNBTF9EQVlfT0ZfV0VFSworICAgKiBAc2VlICNVQ0FMX1dFRUtfT0ZfTU9O
VEgKKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9EQVlfT0ZfV0VFS19JTl9N
T05USCwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZworICAgKiB3aGV0aGVy
IHRoZSA8Y29kZT5IT1VSPC9jb2RlPiBpcyBiZWZvcmUgb3IgYWZ0ZXIgbm9vbi4KKyAgICogRS5n
LiwgYXQgMTA6MDQ6MTUuMjUwIFBNIHRoZSA8Y29kZT5BTV9QTTwvY29kZT4gaXMgPGNvZGU+UE08
L2NvZGU+LgorICAgKiBAc2VlICNVQ0FMX0FNCisgICAqIEBzZWUgI1VDQUxfUE0KKyAgICogQHNl
ZSAjVUNBTF9IT1VSCisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfQU1fUE0s
CisKKyAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIGhvdXIgb2Yg
dGhlIG1vcm5pbmcgb3IgYWZ0ZXJub29uLiA8Y29kZT5IT1VSPC9jb2RlPiBpcyB1c2VkIGZvciB0
aGUgMTItaG91cgorICAgKiBjbG9jay4KKyAgICogRS5nLiwgYXQgMTA6MDQ6MTUuMjUwIFBNIHRo
ZSA8Y29kZT5IT1VSPC9jb2RlPiBpcyAxMC4KKyAgICogQHNlZSAjVUNBTF9BTV9QTQorICAgKiBA
c2VlICNVQ0FMX0hPVVJfT0ZfREFZCisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVD
QUxfSE9VUiwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUKKyAgICog
aG91ciBvZiB0aGUgZGF5LiA8Y29kZT5IT1VSX09GX0RBWTwvY29kZT4gaXMgdXNlZCBmb3IgdGhl
IDI0LWhvdXIgY2xvY2suCisgICAqIEUuZy4sIGF0IDEwOjA0OjE1LjI1MCBQTSB0aGUgPGNvZGU+
SE9VUl9PRl9EQVk8L2NvZGU+IGlzIDIyLgorICAgKiBAc2VlICNVQ0FMX0hPVVIKKyAgICogQHN0
YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9IT1VSX09GX0RBWSwKKworIC8qKgorICAgKiBG
aWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUKKyAgICogbWludXRlIHdpdGhpbiB0aGUgaG91ci4K
KyAgICogRS5nLiwgYXQgMTA6MDQ6MTUuMjUwIFBNIHRoZSA8Y29kZT5VQ0FMX01JTlVURTwvY29k
ZT4gaXMgNC4KKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9NSU5VVEUsCisK
KyAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIHNlY29uZCB3aXRo
aW4gdGhlIG1pbnV0ZS4KKyAgICogRS5nLiwgYXQgMTA6MDQ6MTUuMjUwIFBNIHRoZSA8Y29kZT5V
Q0FMX1NFQ09ORDwvY29kZT4gaXMgMTUuCisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisg
IFVDQUxfU0VDT05ELAorCisgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZQor
ICAgKiBtaWxsaXNlY29uZCB3aXRoaW4gdGhlIHNlY29uZC4KKyAgICogRS5nLiwgYXQgMTA6MDQ6
MTUuMjUwIFBNIHRoZSA8Y29kZT5VQ0FMX01JTExJU0VDT05EPC9jb2RlPiBpcyAyNTAuCisgICAq
IEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfTUlMTElTRUNPTkQsCisKKyAvKioKKyAg
ICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIHJhdyBvZmZzZXQgZnJvbSBHTVQg
aW4gbWlsbGlzZWNvbmRzLgorICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAqLworICBVQ0FMX1pP
TkVfT0ZGU0VULAorCisgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZQorICAg
KiBkYXlsaWdodCBzYXZpbmdzIG9mZnNldCBpbiBtaWxsaXNlY29uZHMuCisgICAqIEBzdGFibGUg
SUNVIDIuNiAKKyAgICovCisgIFVDQUxfRFNUX09GRlNFVCwKKyAgCisgLyoqCisgICAqIEZpZWxk
IG51bWJlciAKKyAgICogaW5kaWNhdGluZyB0aGUgZXh0ZW5kZWQgeWVhciBjb3JyZXNwb25kaW5n
IHRvIHRoZQorICAgKiA8Y29kZT5VQ0FMX1dFRUtfT0ZfWUVBUjwvY29kZT4gZmllbGQuICBUaGlz
IG1heSBiZSBvbmUgZ3JlYXRlciBvciBsZXNzCisgICAqIHRoYW4gdGhlIHZhbHVlIG9mIDxjb2Rl
PlVDQUxfRVhURU5ERURfWUVBUjwvY29kZT4uCisgICAqIEBzdGFibGUgSUNVIDIuNgorICAgKi8K
KyAgVUNBTF9ZRUFSX1dPWSwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgCisgICAqIGluZGlj
YXRpbmcgdGhlIGxvY2FsaXplZCBkYXkgb2Ygd2Vlay4gIFRoaXMgd2lsbCBiZSBhIHZhbHVlIGZy
b20gMQorICAgKiB0byA3IGluY2x1c2l2ZSwgd2l0aCAxIGJlaW5nIHRoZSBsb2NhbGl6ZWQgZmly
c3QgZGF5IG9mIHRoZSB3ZWVrLgorICAgKiBAc3RhYmxlIElDVSAyLjYKKyAgICovCisgIFVDQUxf
RE9XX0xPQ0FMLAorCisgIC8qKgorICAgKiBZZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLCBl
bmNvbXBhc3NpbmcgYWxsIHN1cHJhLXllYXIgZmllbGRzLiBGb3IgZXhhbXBsZSwgCisgICAqIGlu
IEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJzLCBwb3NpdGl2ZSBFeHRlbmRlZCBZZWFyIHZhbHVl
cyBpbmRpY2F0ZSB5ZWFycyBBRCwKKyAgICogIDEgQkMgPSAwIGV4dGVuZGVkLCAyIEJDID0gLTEg
ZXh0ZW5kZWQsIGFuZCBzbyBvbi4gCisgICAqIEBzdGFibGUgSUNVIDIuOCAKKyAgICovCisgIFVD
QUxfRVhURU5ERURfWUVBUiwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgCisgICAqIGluZGlj
YXRpbmcgdGhlIG1vZGlmaWVkIEp1bGlhbiBkYXkgbnVtYmVyLiAgVGhpcyBpcyBkaWZmZXJlbnQg
ZnJvbQorICAgKiB0aGUgY29udmVudGlvbmFsIEp1bGlhbiBkYXkgbnVtYmVyIGluIHR3byByZWdh
cmRzLiAgRmlyc3QsIGl0CisgICAqIGRlbWFyY2F0ZXMgZGF5cyBhdCBsb2NhbCB6b25lIG1pZG5p
Z2h0LCByYXRoZXIgdGhhbiBub29uIEdNVC4KKyAgICogU2Vjb25kLCBpdCBpcyBhIGxvY2FsIG51
bWJlcjsgdGhhdCBpcywgaXQgZGVwZW5kcyBvbiB0aGUgbG9jYWwgdGltZQorICAgKiB6b25lLiAg
SXQgY2FuIGJlIHRob3VnaHQgb2YgYXMgYSBzaW5nbGUgbnVtYmVyIHRoYXQgZW5jb21wYXNzZXMg
YWxsCisgICAqIHRoZSBkYXRlLXJlbGF0ZWQgZmllbGRzLgorICAgKiBAc3RhYmxlIElDVSAyLjgK
KyAgICovCisgIFVDQUxfSlVMSUFOX0RBWSwgCisKKyAgLyoqCisgICAqIFJhbmdlcyBmcm9tIDAg
dG8gMjM6NTk6NTkuOTk5IChyZWdhcmRsZXNzIG9mIERTVCkuICBUaGlzIGZpZWxkIGJlaGF2ZXMg
PGVtPmV4YWN0bHk8L2VtPiAKKyAgICogbGlrZSBhIGNvbXBvc2l0ZSBvZiBhbGwgdGltZS1yZWxh
dGVkIGZpZWxkcywgbm90IGluY2x1ZGluZyB0aGUgem9uZSBmaWVsZHMuICBBcyBzdWNoLCAKKyAg
ICogaXQgYWxzbyByZWZsZWN0cyBkaXNjb250aW51aXRpZXMgb2YgdGhvc2UgZmllbGRzIG9uIERT
VCB0cmFuc2l0aW9uIGRheXMuICBPbiBhIGRheQorICAgKiBvZiBEU1Qgb25zZXQsIGl0IHdpbGwg
anVtcCBmb3J3YXJkLiAgT24gYSBkYXkgb2YgRFNUIGNlc3NhdGlvbiwgaXQgd2lsbCBqdW1wIAor
ICAgKiBiYWNrd2FyZC4gIFRoaXMgcmVmbGVjdHMgdGhlIGZhY3QgdGhhdCBpdCBtdXN0IGJlIGNv
bWJpbmVkIHdpdGggdGhlIERTVF9PRkZTRVQgZmllbGQKKyAgICogdG8gb2J0YWluIGEgdW5pcXVl
IGxvY2FsIHRpbWUgdmFsdWUuCisgICAqIEBzdGFibGUgSUNVIDIuOAorICAgKi8KKyAgVUNBTF9N
SUxMSVNFQ09ORFNfSU5fREFZLAorCisgIC8qKgorICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgY3Vy
cmVudCBtb250aCBpcyBhIGxlYXAgbW9udGggKDAgb3IgMSkuIFNlZSB0aGUgQ2hpbmVzZSBjYWxl
bmRhciBmb3IKKyAgICogYW4gZXhhbXBsZSBvZiB0aGlzLgorICAgKi8KKyAgVUNBTF9JU19MRUFQ
X01PTlRILAorICAKKyAgLyoqCisgICAqIEZpZWxkIGNvdW50CisgICAqIEBzdGFibGUgSUNVIDIu
NgorICAgKi8KKyAgVUNBTF9GSUVMRF9DT1VOVCwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIg
aW5kaWNhdGluZyB0aGUKKyAgICogZGF5IG9mIHRoZSBtb250aC4gVGhpcyBpcyBhIHN5bm9ueW0g
Zm9yIDxjb2RlPlVDQUxfREFURTwvY29kZT4uCisgICAqIFRoZSBmaXJzdCBkYXkgb2YgdGhlIG1v
bnRoIGhhcyB2YWx1ZSAxLgorICAgKiBAc2VlICNVQ0FMX0RBVEUKKyAgICogU3lub255bSBmb3Ig
VUNBTF9EQVRFCisgICAqIEBzdGFibGUgSUNVIDIuOAorICAgKiovCisgIFVDQUxfREFZX09GX01P
TlRIPVVDQUxfREFURQorfTsKKworLyoqIEBzdGFibGUgSUNVIDIuMCAqLwordHlwZWRlZiBlbnVt
IFVDYWxlbmRhckRhdGVGaWVsZHMgVUNhbGVuZGFyRGF0ZUZpZWxkczsKKyAgICAvKioKKyAgICAg
KiBVc2VmdWwgY29uc3RhbnQgZm9yIGRheXMgb2Ygd2Vlay4gTm90ZTogQ2FsZW5kYXIgZGF5LW9m
LXdlZWsgaXMgMS1iYXNlZC4gQ2xpZW50cworICAgICAqIHdobyBjcmVhdGUgbG9jYWxlIHJlc291
cmNlcyBmb3IgdGhlIGZpZWxkIG9mIGZpcnN0LWRheS1vZi13ZWVrIHNob3VsZCBiZSBhd2FyZSBv
ZgorICAgICAqIHRoaXMuIEZvciBpbnN0YW5jZSwgaW4gVVMgbG9jYWxlLCBmaXJzdC1kYXktb2Yt
d2VlayBpcyBzZXQgdG8gMSwgaS5lLiwgVUNBTF9TVU5EQVkuCisgICAgICovCisvKiogUG9zc2li
bGUgZGF5cyBvZiB0aGUgd2VlayBpbiBhIFVDYWxlbmRhciAKKyAqIEBzdGFibGUgSUNVIDIuMAor
ICovCitlbnVtIFVDYWxlbmRhckRheXNPZldlZWsgeworICAvKiogU3VuZGF5ICovCisgIFVDQUxf
U1VOREFZID0gMSwKKyAgLyoqIE1vbmRheSAqLworICBVQ0FMX01PTkRBWSwKKyAgLyoqIFR1ZXNk
YXkgKi8KKyAgVUNBTF9UVUVTREFZLAorICAvKiogV2VkbmVzZGF5ICovCisgIFVDQUxfV0VETkVT
REFZLAorICAvKiogVGh1cnNkYXkgKi8KKyAgVUNBTF9USFVSU0RBWSwKKyAgLyoqIEZyaWRheSAq
LworICBVQ0FMX0ZSSURBWSwKKyAgLyoqIFNhdHVyZGF5ICovCisgIFVDQUxfU0FUVVJEQVkKK307
CisKKy8qKiBAc3RhYmxlIElDVSAyLjAgKi8KK3R5cGVkZWYgZW51bSBVQ2FsZW5kYXJEYXlzT2ZX
ZWVrIFVDYWxlbmRhckRheXNPZldlZWs7CisKKy8qKiBQb3NzaWJsZSBtb250aHMgaW4gYSBVQ2Fs
ZW5kYXIuIE5vdGU6IENhbGVuZGFyIG1vbnRoIGlzIDAtYmFzZWQuCisgKiBAc3RhYmxlIElDVSAy
LjAKKyAqLworZW51bSBVQ2FsZW5kYXJNb250aHMgeworICAvKiogSmFudWFyeSAqLworICBVQ0FM
X0pBTlVBUlksCisgIC8qKiBGZWJydWFyeSAqLworICBVQ0FMX0ZFQlJVQVJZLAorICAvKiogTWFy
Y2ggKi8KKyAgVUNBTF9NQVJDSCwKKyAgLyoqIEFwcmlsICovCisgIFVDQUxfQVBSSUwsCisgIC8q
KiBNYXkgKi8KKyAgVUNBTF9NQVksCisgIC8qKiBKdW5lICovCisgIFVDQUxfSlVORSwKKyAgLyoq
IEp1bHkgKi8KKyAgVUNBTF9KVUxZLAorICAvKiogQXVndXN0ICovCisgIFVDQUxfQVVHVVNULAor
ICAvKiogU2VwdGVtYmVyICovCisgIFVDQUxfU0VQVEVNQkVSLAorICAvKiogT2N0b2JlciAqLwor
ICBVQ0FMX09DVE9CRVIsCisgIC8qKiBOb3ZlbWJlciAqLworICBVQ0FMX05PVkVNQkVSLAorICAv
KiogRGVjZW1iZXIgKi8KKyAgVUNBTF9ERUNFTUJFUiwKKyAgLyoqIFZhbHVlIG9mIHRoZSA8Y29k
ZT5VQ0FMX01PTlRIPC9jb2RlPiBmaWVsZCBpbmRpY2F0aW5nIHRoZQorICAgICogdGhpcnRlZW50
aCBtb250aCBvZiB0aGUgeWVhci4gQWx0aG91Z2ggdGhlIEdyZWdvcmlhbiBjYWxlbmRhcgorICAg
ICogZG9lcyBub3QgdXNlIHRoaXMgdmFsdWUsIGx1bmFyIGNhbGVuZGFycyBkby4KKyAgICAqLwor
ICBVQ0FMX1VOREVDSU1CRVIKK307CisKKy8qKiBAc3RhYmxlIElDVSAyLjAgKi8KK3R5cGVkZWYg
ZW51bSBVQ2FsZW5kYXJNb250aHMgVUNhbGVuZGFyTW9udGhzOworCisvKiogUG9zc2libGUgQU0v
UE0gdmFsdWVzIGluIGEgVUNhbGVuZGFyIAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK2VudW0g
VUNhbGVuZGFyQU1QTXMgeworICAgIC8qKiBBTSAqLworICBVQ0FMX0FNLAorICAvKiogUE0gKi8K
KyAgVUNBTF9QTQorfTsKKworLyoqIEBzdGFibGUgSUNVIDIuMCAqLwordHlwZWRlZiBlbnVtIFVD
YWxlbmRhckFNUE1zIFVDYWxlbmRhckFNUE1zOworCisvKioKKyAqIENyZWF0ZSBhbiBlbnVtZXJh
dGlvbiBvdmVyIGFsbCB0aW1lIHpvbmVzLgorICoKKyAqIEBwYXJhbSBlYyBpbnB1dC9vdXRwdXQg
ZXJyb3IgY29kZQorICoKKyAqIEByZXR1cm4gYW4gZW51bWVyYXRpb24gb2JqZWN0IHRoYXQgdGhl
IGNhbGxlciBtdXN0IGRpc3Bvc2Ugb2YgdXNpbmcKKyAqIHVlbnVtX2Nsb3NlKCksIG9yIE5VTEwg
dXBvbiBmYWlsdXJlLiBJbiBjYXNlIG9mIGZhaWx1cmUgKmVjIHdpbGwKKyAqIGluZGljYXRlIHRo
ZSBlcnJvci4KKyAqCisgKiBAc3RhYmxlIElDVSAyLjYKKyAqLworVV9TVEFCTEUgVUVudW1lcmF0
aW9uKiBVX0VYUE9SVDIKK3VjYWxfb3BlblRpbWVab25lcyhVRXJyb3JDb2RlKiBlYyk7CisKKy8q
KgorICogQ3JlYXRlIGFuIGVudW1lcmF0aW9uIG92ZXIgYWxsIHRpbWUgem9uZXMgYXNzb2NpYXRl
ZCB3aXRoIHRoZSBnaXZlbgorICogY291bnRyeS4gU29tZSB6b25lcyBhcmUgYWZmaWxpYXRlZCB3
aXRoIG5vIGNvdW50cnkgKGUuZy4sICJVVEMiKTsKKyAqIHRoZXNlIG1heSBhbHNvIGJlIHJldHJp
ZXZlZCwgYXMgYSBncm91cC4KKyAqCisgKiBAcGFyYW0gY291bnRyeSB0aGUgSVNPIDMxNjYgdHdv
LWxldHRlciBjb3VudHJ5IGNvZGUsIG9yIE5VTEwgdG8KKyAqIHJldHJpZXZlIHpvbmVzIG5vdCBh
ZmZpbGlhdGVkIHdpdGggYW55IGNvdW50cnkKKyAqCisgKiBAcGFyYW0gZWMgaW5wdXQvb3V0cHV0
IGVycm9yIGNvZGUKKyAqCisgKiBAcmV0dXJuIGFuIGVudW1lcmF0aW9uIG9iamVjdCB0aGF0IHRo
ZSBjYWxsZXIgbXVzdCBkaXNwb3NlIG9mIHVzaW5nCisgKiB1ZW51bV9jbG9zZSgpLCBvciBOVUxM
IHVwb24gZmFpbHVyZS4gSW4gY2FzZSBvZiBmYWlsdXJlICplYyB3aWxsCisgKiBpbmRpY2F0ZSB0
aGUgZXJyb3IuCisgKgorICogQHN0YWJsZSBJQ1UgMi42CisgKi8KK1VfU1RBQkxFIFVFbnVtZXJh
dGlvbiogVV9FWFBPUlQyCit1Y2FsX29wZW5Db3VudHJ5VGltZVpvbmVzKGNvbnN0IGNoYXIqIGNv
dW50cnksIFVFcnJvckNvZGUqIGVjKTsKKworLyoqCisgKiBSZXR1cm4gdGhlIGRlZmF1bHQgdGlt
ZSB6b25lLiBUaGUgZGVmYXVsdCBpcyBkZXRlcm1pbmVkIGluaXRpYWxseQorICogYnkgcXVlcnlp
bmcgdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbS4gSXQgbWF5IGJlIGNoYW5nZWQgd2l0aAorICog
dWNhbF9zZXREZWZhdWx0VGltZVpvbmUoKSBvciB3aXRoIHRoZSBDKysgVGltZVpvbmUgQVBJLgor
ICoKKyAqIEBwYXJhbSByZXN1bHQgQSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgcmVzdWx0LCBvciBO
VUxMCisgKgorICogQHBhcmFtIHJlc3VsdENhcGFjaXR5IFRoZSBjYXBhY2l0eSBvZiB0aGUgcmVz
dWx0IGJ1ZmZlcgorICoKKyAqIEBwYXJhbSBlYyBpbnB1dC9vdXRwdXQgZXJyb3IgY29kZQorICoK
KyAqIEByZXR1cm4gVGhlIHJlc3VsdCBzdHJpbmcgbGVuZ3RoLCBub3QgaW5jbHVkaW5nIHRoZSB0
ZXJtaW5hdGluZworICogbnVsbAorICoKKyAqIEBzdGFibGUgSUNVIDIuNgorICovCitVX1NUQUJM
RSBpbnQzMl90IFVfRVhQT1JUMgordWNhbF9nZXREZWZhdWx0VGltZVpvbmUoVUNoYXIqIHJlc3Vs
dCwgaW50MzJfdCByZXN1bHRDYXBhY2l0eSwgVUVycm9yQ29kZSogZWMpOworCisvKioKKyAqIFNl
dCB0aGUgZGVmYXVsdCB0aW1lIHpvbmUuCisgKgorICogQHBhcmFtIHpvbmVJRCBudWxsLXRlcm1p
bmF0ZWQgdGltZSB6b25lIElECisgKgorICogQHBhcmFtIGVjIGlucHV0L291dHB1dCBlcnJvciBj
b2RlCisgKgorICogQHN0YWJsZSBJQ1UgMi42CisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQy
Cit1Y2FsX3NldERlZmF1bHRUaW1lWm9uZShjb25zdCBVQ2hhciogem9uZUlELCBVRXJyb3JDb2Rl
KiBlYyk7CisKKy8qKgorICogUmV0dXJuIHRoZSBhbW91bnQgb2YgdGltZSBpbiBtaWxsaXNlY29u
ZHMgdGhhdCB0aGUgY2xvY2sgaXMKKyAqIGFkdmFuY2VkIGR1cmluZyBkYXlsaWdodCBzYXZpbmdz
IHRpbWUgZm9yIHRoZSBnaXZlbiB0aW1lIHpvbmUsIG9yCisgKiB6ZXJvIGlmIHRoZSB0aW1lIHpv
bmUgZG9lcyBub3Qgb2JzZXJ2ZSBkYXlsaWdodCBzYXZpbmdzIHRpbWUuCisgKgorICogQHBhcmFt
IHpvbmVJRCBudWxsLXRlcm1pbmF0ZWQgdGltZSB6b25lIElECisgKgorICogQHBhcmFtIGVjIGlu
cHV0L291dHB1dCBlcnJvciBjb2RlCisgKgorICogQHJldHVybiB0aGUgbnVtYmVyIG9mIG1pbGxp
c2Vjb25kcyB0aGUgdGltZSBpcyBhZHZhbmNlZCB3aXRoCisgKiByZXNwZWN0IHRvIHN0YW5kYXJk
IHRpbWUgd2hlbiB0aGUgZGF5bGlnaHQgc2F2aW5ncyBydWxlcyBhcmUgaW4KKyAqIGVmZmVjdC4g
VGhpcyBpcyBhbHdheXMgYSBub24tbmVnYXRpdmUgbnVtYmVyLCBtb3N0IGNvbW1vbmx5IGVpdGhl
cgorICogMyw2MDAsMDAwIChvbmUgaG91cikgb3IgemVyby4KKyAqCisgKiBAc3RhYmxlIElDVSAy
LjYKKyAqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKK3VjYWxfZ2V0RFNUU2F2aW5ncyhj
b25zdCBVQ2hhciogem9uZUlELCBVRXJyb3JDb2RlKiBlYyk7CisKKy8qKgorICogR2V0IHRoZSBj
dXJyZW50IGRhdGUgYW5kIHRpbWUuCisgKiBUaGUgdmFsdWUgcmV0dXJuZWQgaXMgcmVwcmVzZW50
ZWQgYXMgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGVwb2NoLgorICogQHJldHVybiBUaGUgY3VycmVu
dCBkYXRlIGFuZCB0aW1lLgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIFVEYXRl
IFVfRVhQT1JUMiAKK3VjYWxfZ2V0Tm93KHZvaWQpOworCisvKioKKyAqIE9wZW4gYSBVQ2FsZW5k
YXIuCisgKiBBIFVDYWxlbmRhciBtYXkgYmUgdXNlZCB0byBjb252ZXJ0IGEgbWlsbGlzZWNvbmQg
dmFsdWUgdG8gYSB5ZWFyLAorICogbW9udGgsIGFuZCBkYXkuCisgKiA8cD4KKyAqIE5vdGU6IFdo
ZW4gdW5rbm93biBUaW1lWm9uZSBJRCBpcyBzcGVjaWZpZWQsIHRoZSBVQ2FsZW5kYXIgcmV0dXJu
ZWQKKyAqIGJ5IHRoZSBmdW5jdGlvbiBpcyBpbml0aWFsaXplZCB3aXRoIEdNVCAoIkV0Yy9HTVQi
KSB3aXRob3V0IGFueQorICogZXJyb3JzL3dhcm5pbmdzLiAgSWYgeW91IHdhbnQgdG8gY2hlY2sg
aWYgYSBUaW1lWm9uZSBJRCBpcyB2YWxpZCwKKyAqIHVzZSB1Y2FsX2dldENhbm9uaWNhbFRpbWVa
b25lSUQgcHJpb3IgdG8gdGhpcyBmdW5jdGlvbi4KKyAqIAorICogQHBhcmFtIHpvbmVJRCBUaGUg
ZGVzaXJlZCBUaW1lWm9uZSBJRC4gIElmIDAsIHVzZSB0aGUgZGVmYXVsdCB0aW1lIHpvbmUuCisg
KiBAcGFyYW0gbGVuIFRoZSBsZW5ndGggb2Ygem9uZUlELCBvciAtMSBpZiBudWxsLXRlcm1pbmF0
ZWQuCisgKiBAcGFyYW0gbG9jYWxlIFRoZSBkZXNpcmVkIGxvY2FsZQorICogQHBhcmFtIHR5cGUg
VGhlIHR5cGUgb2YgVUNhbGVuZGFyIHRvIG9wZW4uIFRoaXMgY2FuIGJlIFVDQUxfR1JFR09SSUFO
IHRvIG9wZW4gdGhlIEdyZWdvcmlhbgorICogY2FsZW5kYXIgZm9yIHRoZSBsb2NhbGUsIG9yIFVD
QUxfREVGQVVMVCB0byBvcGVuIHRoZSBkZWZhdWx0IGNhbGVuZGFyIGZvciB0aGUgbG9jYWxlICh0
aGUKKyAqIGRlZmF1bHQgY2FsZW5kYXIgbWF5IGFsc28gYmUgR3JlZ29yaWFuKS4gVG8gb3BlbiBh
IHNwZWNpZmljIG5vbi1HcmVnb3JpYW4gY2FsZW5kYXIgZm9yIHRoZQorICogbG9jYWxlLCB1c2Ug
dWxvY19zZXRLZXl3b3JkVmFsdWUgdG8gc2V0IHRoZSB2YWx1ZSBvZiB0aGUgY2FsZW5kYXIga2V5
d29yZCBmb3IgdGhlIGxvY2FsZQorICogYW5kIHRoZW4gcGFzcyB0aGUgbG9jYWxlIHRvIHVjYWxf
b3BlbiB3aXRoIFVDQUxfREVGQVVMVCBhcyB0aGUgdHlwZS4KKyAqIEBwYXJhbSBzdGF0dXMgQSBw
b2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisgKiBAcmV0dXJu
IEEgcG9pbnRlciB0byBhIFVDYWxlbmRhciwgb3IgMCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKyAq
IEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBVQ2FsZW5kYXIqIFVfRVhQT1JUMiAKK3Vj
YWxfb3Blbihjb25zdCBVQ2hhciogICB6b25lSUQsCisgICAgICAgICAgaW50MzJfdCAgICAgICAg
bGVuLAorICAgICAgICAgIGNvbnN0IGNoYXIqICAgIGxvY2FsZSwKKyAgICAgICAgICBVQ2FsZW5k
YXJUeXBlICB0eXBlLAorICAgICAgICAgIFVFcnJvckNvZGUqICAgIHN0YXR1cyk7CisKKy8qKgor
ICogQ2xvc2UgYSBVQ2FsZW5kYXIuCisgKiBPbmNlIGNsb3NlZCwgYSBVQ2FsZW5kYXIgbWF5IG5v
IGxvbmdlciBiZSB1c2VkLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIGNsb3NlLgor
ICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWNhbF9j
bG9zZShVQ2FsZW5kYXIgKmNhbCk7CisKKyNpZiBVX1NIT1dfQ1BMVVNQTFVTX0FQSQorCitVX05B
TUVTUEFDRV9CRUdJTgorCisvKioKKyAqIFxjbGFzcyBMb2NhbFVDYWxlbmRhclBvaW50ZXIKKyAq
ICJTbWFydCBwb2ludGVyIiBjbGFzcywgY2xvc2VzIGEgVUNhbGVuZGFyIHZpYSB1Y2FsX2Nsb3Nl
KCkuCisgKiBGb3IgbW9zdCBtZXRob2RzIHNlZSB0aGUgTG9jYWxQb2ludGVyQmFzZSBiYXNlIGNs
YXNzLgorICoKKyAqIEBzZWUgTG9jYWxQb2ludGVyQmFzZQorICogQHNlZSBMb2NhbFBvaW50ZXIK
KyAqIEBzdGFibGUgSUNVIDQuNAorICovCitVX0RFRklORV9MT0NBTF9PUEVOX1BPSU5URVIoTG9j
YWxVQ2FsZW5kYXJQb2ludGVyLCBVQ2FsZW5kYXIsIHVjYWxfY2xvc2UpOworCitVX05BTUVTUEFD
RV9FTkQKKworI2VuZGlmCisKKy8qKgorICogT3BlbiBhIGNvcHkgb2YgYSBVQ2FsZW5kYXIuCisg
KiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGEgZGVlcCBjb3B5LgorICogQHBhcmFtIGNhbCBUaGUg
Y2FsZW5kYXIgdG8gY29weQorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9y
Q29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMuCisgKiBAcmV0dXJuIEEgcG9pbnRlciB0byBhIFVD
YWxlbmRhciBpZGVudGljYWwgdG8gY2FsLgorICogQHN0YWJsZSBJQ1UgNC4wCisgKi8KK1VfU1RB
QkxFIFVDYWxlbmRhciogVV9FWFBPUlQyIAordWNhbF9jbG9uZShjb25zdCBVQ2FsZW5kYXIqIGNh
bCwKKyAgICAgICAgICAgVUVycm9yQ29kZSogICAgICBzdGF0dXMpOworCisvKioKKyAqIFNldCB0
aGUgVGltZVpvbmUgdXNlZCBieSBhIFVDYWxlbmRhci4KKyAqIEEgVUNhbGVuZGFyIHVzZXMgYSB0
aW1lem9uZSBmb3IgY29udmVydGluZyBmcm9tIEdyZWVud2ljaCB0aW1lIHRvIGxvY2FsIHRpbWUu
CisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gc2V0LgorICogQHBhcmFtIHpvbmVJRCBU
aGUgZGVzaXJlZCBUaW1lWm9uZSBJRC4gIElmIDAsIHVzZSB0aGUgZGVmYXVsdCB0aW1lIHpvbmUu
CisgKiBAcGFyYW0gbGVuIFRoZSBsZW5ndGggb2Ygem9uZUlELCBvciAtMSBpZiBudWxsLXRlcm1p
bmF0ZWQuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJl
Y2VpdmUgYW55IGVycm9ycy4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lk
IFVfRVhQT1JUMiAKK3VjYWxfc2V0VGltZVpvbmUoVUNhbGVuZGFyKiAgICBjYWwsCisgICAgICAg
ICAgICAgICAgIGNvbnN0IFVDaGFyKiAgem9uZUlELAorICAgICAgICAgICAgICAgICBpbnQzMl90
ICAgICAgIGxlbiwKKyAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSogICBzdGF0dXMpOworCisv
KioKKyAqIFBvc3NpYmxlIGZvcm1hdHMgZm9yIGEgVUNhbGVuZGFyJ3MgZGlzcGxheSBuYW1lIAor
ICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK2VudW0gVUNhbGVuZGFyRGlzcGxheU5hbWVUeXBlIHsK
KyAgLyoqIFN0YW5kYXJkIGRpc3BsYXkgbmFtZSAqLworICBVQ0FMX1NUQU5EQVJELAorICAvKiog
U2hvcnQgc3RhbmRhcmQgZGlzcGxheSBuYW1lICovCisgIFVDQUxfU0hPUlRfU1RBTkRBUkQsCisg
IC8qKiBEYXlsaWdodCBzYXZpbmdzIGRpc3BsYXkgbmFtZSAqLworICBVQ0FMX0RTVCwKKyAgLyoq
IFNob3J0IGRheWxpZ2h0IHNhdmluZ3MgZGlzcGxheSBuYW1lICovCisgIFVDQUxfU0hPUlRfRFNU
Cit9OworCisvKiogQHN0YWJsZSBJQ1UgMi4wICovCit0eXBlZGVmIGVudW0gVUNhbGVuZGFyRGlz
cGxheU5hbWVUeXBlIFVDYWxlbmRhckRpc3BsYXlOYW1lVHlwZTsKKworLyoqCisgKiBHZXQgdGhl
IGRpc3BsYXkgbmFtZSBmb3IgYSBVQ2FsZW5kYXIncyBUaW1lWm9uZS4KKyAqIEEgZGlzcGxheSBu
YW1lIGlzIHN1aXRhYmxlIGZvciBwcmVzZW50YXRpb24gdG8gYSB1c2VyLgorICogQHBhcmFtIGNh
bCAgICAgICAgICBUaGUgVUNhbGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIHR5cGUgICAgICAg
ICBUaGUgZGVzaXJlZCBkaXNwbGF5IG5hbWUgZm9ybWF0OyBvbmUgb2YgVUNBTF9TVEFOREFSRCwg
VUNBTF9TSE9SVF9TVEFOREFSRCwKKyAqICAgICAgICAgICAgICAgICAgICAgVUNBTF9EU1QsIFVD
QUxfU0hPUlRfRFNUCisgKiBAcGFyYW0gbG9jYWxlICAgICAgIFRoZSBkZXNpcmVkIGxvY2FsZSBm
b3IgdGhlIGRpc3BsYXkgbmFtZS4KKyAqIEBwYXJhbSByZXN1bHQgICAgICAgQSBwb2ludGVyIHRv
IGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIGZvcm1hdHRlZCBudW1iZXIuCisgKiBAcGFyYW0gcmVz
dWx0TGVuZ3RoIFRoZSBtYXhpbXVtIHNpemUgb2YgcmVzdWx0LgorICogQHBhcmFtIHN0YXR1cyAg
ICAgICBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyAq
IEByZXR1cm4gICAgICAgICAgICAgVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3Jl
YXRlciB0aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorICogQHN0
YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordWNhbF9nZXRU
aW1lWm9uZURpc3BsYXlOYW1lKGNvbnN0IFVDYWxlbmRhciogICAgICAgICAgY2FsLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFVDYWxlbmRhckRpc3BsYXlOYW1lVHlwZSAgdHlwZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgICAgICAgICAgICAgIGxvY2Fs
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhciogICAgICAgICAgICAgICAgICAg
IHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICAg
ICAgICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JD
b2RlKiAgICAgICAgICAgICAgIHN0YXR1cyk7CisKKy8qKgorICogRGV0ZXJtaW5lIGlmIGEgVUNh
bGVuZGFyIGlzIGN1cnJlbnRseSBpbiBkYXlsaWdodCBzYXZpbmdzIHRpbWUuCisgKiBEYXlsaWdo
dCBzYXZpbmdzIHRpbWUgaXMgbm90IHVzZWQgaW4gYWxsIHBhcnRzIG9mIHRoZSB3b3JsZC4KKyAq
IEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBxdWVyeS4KKyAqIEBwYXJhbSBzdGF0dXMgQSBw
b2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisgKiBAcmV0dXJu
IFRSVUUgaWYgY2FsIGlzIGN1cnJlbnRseSBpbiBkYXlsaWdodCBzYXZpbmdzIHRpbWUsIEZBTFNF
IG90aGVyd2lzZQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIFVCb29sIFVfRVhQ
T1JUMiAKK3VjYWxfaW5EYXlsaWdodFRpbWUoY29uc3QgVUNhbGVuZGFyKiAgY2FsLAorICAgICAg
ICAgICAgICAgICAgICBVRXJyb3JDb2RlKiAgICAgICBzdGF0dXMgKTsKKworLyoqCisgKiBTZXRz
IHRoZSBHcmVnb3JpYW5DYWxlbmRhciBjaGFuZ2UgZGF0ZS4gVGhpcyBpcyB0aGUgcG9pbnQgd2hl
biB0aGUgc3dpdGNoIGZyb20KKyAqIEp1bGlhbiBkYXRlcyB0byBHcmVnb3JpYW4gZGF0ZXMgb2Nj
dXJyZWQuIERlZmF1bHQgaXMgMDA6MDA6MDAgbG9jYWwgdGltZSwgT2N0b2JlcgorICogMTUsIDE1
ODIuIFByZXZpb3VzIHRvIHRoaXMgdGltZSBhbmQgZGF0ZSB3aWxsIGJlIEp1bGlhbiBkYXRlcy4K
KyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIG9ubHkgZm9yIEdyZWdvcmlhbiBjYWxlbmRhcnMu
IElmIHRoZSBVQ2FsZW5kYXIgaXMgbm90CisgKiBhbiBpbnN0YW5jZSBvZiBhIEdyZWdvcmlhbiBj
YWxlbmRhciwgdGhlbiBhIFVfVU5TVVBQT1JURURfRVJST1IKKyAqIGVycm9yIGNvZGUgaXMgc2V0
LgorICoKKyAqIEBwYXJhbSBjYWwgICAgICAgIFRoZSBjYWxlbmRhciBvYmplY3QuCisgKiBAcGFy
YW0gZGF0ZSAgICAgICBUaGUgZ2l2ZW4gR3JlZ29yaWFuIGN1dG92ZXIgZGF0ZS4KKyAqIEBwYXJh
bSBwRXJyb3JDb2RlIFBvaW50ZXIgdG8gYSBzdGFuZGFyZCBJQ1UgZXJyb3IgY29kZS4gSXRzIGlu
cHV0IHZhbHVlIG11c3QKKyAqICAgICAgICAgICAgICAgICAgIHBhc3MgdGhlIFVfU1VDQ0VTUygp
IHRlc3QsIG9yIGVsc2UgdGhlIGZ1bmN0aW9uIHJldHVybnMKKyAqICAgICAgICAgICAgICAgICAg
IGltbWVkaWF0ZWx5LiBDaGVjayBmb3IgVV9GQUlMVVJFKCkgb24gb3V0cHV0IG9yIHVzZSB3aXRo
CisgKiAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjaGFpbmluZy4gKFNlZSBVc2VyIEd1aWRl
IGZvciBkZXRhaWxzLikKKyAqCisgKiBAc2VlIEdyZWdvcmlhbkNhbGVuZGFyOjpzZXRHcmVnb3Jp
YW5DaGFuZ2UKKyAqIEBzZWUgdWNhbF9nZXRHcmVnb3JpYW5DaGFuZ2UKKyAqIEBzdGFibGUgSUNV
IDMuNgorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMgordWNhbF9zZXRHcmVnb3JpYW5DaGFu
Z2UoVUNhbGVuZGFyICpjYWwsIFVEYXRlIGRhdGUsIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOwor
CisvKioKKyAqIEdldHMgdGhlIEdyZWdvcmlhbiBDYWxlbmRhciBjaGFuZ2UgZGF0ZS4gVGhpcyBp
cyB0aGUgcG9pbnQgd2hlbiB0aGUgc3dpdGNoIGZyb20KKyAqIEp1bGlhbiBkYXRlcyB0byBHcmVn
b3JpYW4gZGF0ZXMgb2NjdXJyZWQuIERlZmF1bHQgaXMgMDA6MDA6MDAgbG9jYWwgdGltZSwgT2N0
b2JlcgorICogMTUsIDE1ODIuIFByZXZpb3VzIHRvIHRoaXMgdGltZSBhbmQgZGF0ZSB3aWxsIGJl
IEp1bGlhbiBkYXRlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIG9ubHkgZm9yIEdyZWdv
cmlhbiBjYWxlbmRhcnMuIElmIHRoZSBVQ2FsZW5kYXIgaXMgbm90CisgKiBhbiBpbnN0YW5jZSBv
ZiBhIEdyZWdvcmlhbiBjYWxlbmRhciwgdGhlbiBhIFVfVU5TVVBQT1JURURfRVJST1IKKyAqIGVy
cm9yIGNvZGUgaXMgc2V0LgorICoKKyAqIEBwYXJhbSBjYWwgICAgICAgIFRoZSBjYWxlbmRhciBv
YmplY3QuCisgKiBAcGFyYW0gcEVycm9yQ29kZSBQb2ludGVyIHRvIGEgc3RhbmRhcmQgSUNVIGVy
cm9yIGNvZGUuIEl0cyBpbnB1dCB2YWx1ZSBtdXN0CisgKiAgICAgICAgICAgICAgICAgICBwYXNz
IHRoZSBVX1NVQ0NFU1MoKSB0ZXN0LCBvciBlbHNlIHRoZSBmdW5jdGlvbiByZXR1cm5zCisgKiAg
ICAgICAgICAgICAgICAgICBpbW1lZGlhdGVseS4gQ2hlY2sgZm9yIFVfRkFJTFVSRSgpIG9uIG91
dHB1dCBvciB1c2Ugd2l0aAorICogICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY2hhaW5pbmcu
IChTZWUgVXNlciBHdWlkZSBmb3IgZGV0YWlscy4pCisgKiBAcmV0dXJuICAgVGhlIEdyZWdvcmlh
biBjdXRvdmVyIHRpbWUgZm9yIHRoaXMgY2FsZW5kYXIuCisgKgorICogQHNlZSBHcmVnb3JpYW5D
YWxlbmRhcjo6Z2V0R3JlZ29yaWFuQ2hhbmdlCisgKiBAc2VlIHVjYWxfc2V0R3JlZ29yaWFuQ2hh
bmdlCisgKiBAc3RhYmxlIElDVSAzLjYKKyAqLworVV9TVEFCTEUgVURhdGUgVV9FWFBPUlQyCit1
Y2FsX2dldEdyZWdvcmlhbkNoYW5nZShjb25zdCBVQ2FsZW5kYXIgKmNhbCwgVUVycm9yQ29kZSAq
cEVycm9yQ29kZSk7CisKKy8qKgorICogVHlwZXMgb2YgVUNhbGVuZGFyIGF0dHJpYnV0ZXMgCisg
KiBAc3RhYmxlIElDVSAyLjAKKyAqLworZW51bSBVQ2FsZW5kYXJBdHRyaWJ1dGUgeworICAgIC8q
KiBMZW5pZW50IHBhcnNpbmcgKi8KKyAgVUNBTF9MRU5JRU5ULAorICAvKiogRmlyc3QgZGF5IG9m
IHdlZWsgKi8KKyAgVUNBTF9GSVJTVF9EQVlfT0ZfV0VFSywKKyAgLyoqIE1pbmltdW0gbnVtYmVy
IG9mIGRheXMgaW4gZmlyc3Qgd2VlayAqLworICBVQ0FMX01JTklNQUxfREFZU19JTl9GSVJTVF9X
RUVLCit9OworCisvKiogQHN0YWJsZSBJQ1UgMi4wICovCit0eXBlZGVmIGVudW0gVUNhbGVuZGFy
QXR0cmlidXRlIFVDYWxlbmRhckF0dHJpYnV0ZTsKKworLyoqCisgKiBHZXQgYSBudW1lcmljIGF0
dHJpYnV0ZSBhc3NvY2lhdGVkIHdpdGggYSBVQ2FsZW5kYXIuCisgKiBOdW1lcmljIGF0dHJpYnV0
ZXMgaW5jbHVkZSB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLCBvciB0aGUgbWluaW1hbCBudW1i
ZXJzCisgKiBvZiBkYXlzIGluIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSBtb250aC4KKyAqIEBwYXJh
bSBjYWwgVGhlIFVDYWxlbmRhciB0byBxdWVyeS4KKyAqIEBwYXJhbSBhdHRyIFRoZSBkZXNpcmVk
IGF0dHJpYnV0ZTsgb25lIG9mIFVDQUxfTEVOSUVOVCwgVUNBTF9GSVJTVF9EQVlfT0ZfV0VFSywK
KyAqIG9yIFVDQUxfTUlOSU1BTF9EQVlTX0lOX0ZJUlNUX1dFRUsKKyAqIEByZXR1cm4gVGhlIHZh
bHVlIG9mIGF0dHIuCisgKiBAc2VlIHVjYWxfc2V0QXR0cmlidXRlCisgKiBAc3RhYmxlIElDVSAy
LjAKKyAqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1Y2FsX2dldEF0dHJpYnV0ZShj
b25zdCBVQ2FsZW5kYXIqICAgIGNhbCwKKyAgICAgICAgICAgICAgICAgIFVDYWxlbmRhckF0dHJp
YnV0ZSAgYXR0cik7CisKKy8qKgorICogU2V0IGEgbnVtZXJpYyBhdHRyaWJ1dGUgYXNzb2NpYXRl
ZCB3aXRoIGEgVUNhbGVuZGFyLgorICogTnVtZXJpYyBhdHRyaWJ1dGVzIGluY2x1ZGUgdGhlIGZp
cnN0IGRheSBvZiB0aGUgd2Vlaywgb3IgdGhlIG1pbmltYWwgbnVtYmVycworICogb2YgZGF5cyBp
biB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgbW9udGguCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5k
YXIgdG8gc2V0LgorICogQHBhcmFtIGF0dHIgVGhlIGRlc2lyZWQgYXR0cmlidXRlOyBvbmUgb2Yg
VUNBTF9MRU5JRU5ULCBVQ0FMX0ZJUlNUX0RBWV9PRl9XRUVLLAorICogb3IgVUNBTF9NSU5JTUFM
X0RBWVNfSU5fRklSU1RfV0VFSworICogQHBhcmFtIG5ld1ZhbHVlIFRoZSBuZXcgdmFsdWUgb2Yg
YXR0ci4KKyAqIEBzZWUgdWNhbF9nZXRBdHRyaWJ1dGUKKyAqIEBzdGFibGUgSUNVIDIuMAorICov
CitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfc2V0QXR0cmlidXRlKFVDYWxlbmRhciog
ICAgICAgICAgY2FsLAorICAgICAgICAgICAgICAgICAgVUNhbGVuZGFyQXR0cmlidXRlICBhdHRy
LAorICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgICBuZXdWYWx1ZSk7CisKKy8q
KgorICogR2V0IGEgbG9jYWxlIGZvciB3aGljaCBjYWxlbmRhcnMgYXJlIGF2YWlsYWJsZS4KKyAq
IEEgVUNhbGVuZGFyIGluIGEgbG9jYWxlIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gd2lsbCBj
b250YWluIHRoZSBjb3JyZWN0CisgKiBkYXkgYW5kIG1vbnRoIG5hbWVzIGZvciB0aGUgbG9jYWxl
LgorICogQHBhcmFtIGxvY2FsZUluZGV4IFRoZSBpbmRleCBvZiB0aGUgZGVzaXJlZCBsb2NhbGUu
CisgKiBAcmV0dXJuIEEgbG9jYWxlIGZvciB3aGljaCBjYWxlbmRhcnMgYXJlIGF2YWlsYWJsZSwg
b3IgMCBpZiBub25lLgorICogQHNlZSB1Y2FsX2NvdW50QXZhaWxhYmxlCisgKiBAc3RhYmxlIElD
VSAyLjAKKyAqLworVV9TVEFCTEUgY29uc3QgY2hhciogVV9FWFBPUlQyIAordWNhbF9nZXRBdmFp
bGFibGUoaW50MzJfdCBsb2NhbGVJbmRleCk7CisKKy8qKgorICogRGV0ZXJtaW5lIGhvdyBtYW55
IGxvY2FsZXMgaGF2ZSBjYWxlbmRhcnMgYXZhaWxhYmxlLgorICogVGhpcyBmdW5jdGlvbiBpcyBt
b3N0IHVzZWZ1bCBhcyBkZXRlcm1pbmluZyB0aGUgbG9vcCBlbmRpbmcgY29uZGl0aW9uIGZvcgor
ICogY2FsbHMgdG8gXHJlZiB1Y2FsX2dldEF2YWlsYWJsZS4KKyAqIEByZXR1cm4gVGhlIG51bWJl
ciBvZiBsb2NhbGVzIGZvciB3aGljaCBjYWxlbmRhcnMgYXJlIGF2YWlsYWJsZS4KKyAqIEBzZWUg
dWNhbF9nZXRBdmFpbGFibGUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBpbnQz
Ml90IFVfRVhQT1JUMiAKK3VjYWxfY291bnRBdmFpbGFibGUodm9pZCk7CisKKy8qKgorICogR2V0
IGEgVUNhbGVuZGFyJ3MgY3VycmVudCB0aW1lIGluIG1pbGxpcy4KKyAqIFRoZSB0aW1lIGlzIHJl
cHJlc2VudGVkIGFzIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBlcG9jaC4KKyAqIEBwYXJhbSBjYWwg
VGhlIFVDYWxlbmRhciB0byBxdWVyeS4KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFu
IFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisgKiBAcmV0dXJuIFRoZSBjYWxlbmRh
cidzIGN1cnJlbnQgdGltZSBpbiBtaWxsaXMuCisgKiBAc2VlIHVjYWxfc2V0TWlsbGlzCisgKiBA
c2VlIHVjYWxfc2V0RGF0ZQorICogQHNlZSB1Y2FsX3NldERhdGVUaW1lCisgKiBAc3RhYmxlIElD
VSAyLjAKKyAqLworVV9TVEFCTEUgVURhdGUgVV9FWFBPUlQyIAordWNhbF9nZXRNaWxsaXMoY29u
c3QgVUNhbGVuZGFyKiAgY2FsLAorICAgICAgICAgICAgICAgVUVycm9yQ29kZSogICAgICAgc3Rh
dHVzKTsKKworLyoqCisgKiBTZXQgYSBVQ2FsZW5kYXIncyBjdXJyZW50IHRpbWUgaW4gbWlsbGlz
LgorICogVGhlIHRpbWUgaXMgcmVwcmVzZW50ZWQgYXMgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGVw
b2NoLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHNldC4KKyAqIEBwYXJhbSBkYXRl
VGltZSBUaGUgZGVzaXJlZCBkYXRlIGFuZCB0aW1lLgorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50
ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyAqIEBzZWUgdWNhbF9n
ZXRNaWxsaXMKKyAqIEBzZWUgdWNhbF9zZXREYXRlCisgKiBAc2VlIHVjYWxfc2V0RGF0ZVRpbWUK
KyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxf
c2V0TWlsbGlzKFVDYWxlbmRhciogICBjYWwsCisgICAgICAgICAgICAgICBVRGF0ZSAgICAgICAg
ZGF0ZVRpbWUsCisgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiAgc3RhdHVzICk7CisKKy8qKgor
ICogU2V0IGEgVUNhbGVuZGFyJ3MgY3VycmVudCBkYXRlLgorICogVGhlIGRhdGUgaXMgcmVwcmVz
ZW50ZWQgYXMgYSBzZXJpZXMgb2YgMzItYml0IGludGVnZXJzLgorICogQHBhcmFtIGNhbCBUaGUg
VUNhbGVuZGFyIHRvIHNldC4KKyAqIEBwYXJhbSB5ZWFyIFRoZSBkZXNpcmVkIHllYXIuCisgKiBA
cGFyYW0gbW9udGggVGhlIGRlc2lyZWQgbW9udGg7IG9uZSBvZiBVQ0FMX0pBTlVBUlksIFVDQUxf
RkVCUlVBUlksIFVDQUxfTUFSQ0gsIFVDQUxfQVBSSUwsIFVDQUxfTUFZLAorICogVUNBTF9KVU5F
LCBVQ0FMX0pVTFksIFVDQUxfQVVHVVNULCBVQ0FMX1NFUFRFTUJFUiwgVUNBTF9PQ1RPQkVSLCBV
Q0FMX05PVkVNQkVSLCBVQ0FMX0RFQ0VNQkVSLCBVQ0FMX1VOREVDSU1CRVIKKyAqIEBwYXJhbSBk
YXRlIFRoZSBkZXNpcmVkIGRheSBvZiB0aGUgbW9udGguCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9p
bnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworICogQHNlZSB1Y2Fs
X2dldE1pbGxpcworICogQHNlZSB1Y2FsX3NldE1pbGxpcworICogQHNlZSB1Y2FsX3NldERhdGVU
aW1lCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1
Y2FsX3NldERhdGUoVUNhbGVuZGFyKiAgIGNhbCwKKyAgICAgICAgICAgICBpbnQzMl90ICAgICAg
eWVhciwKKyAgICAgICAgICAgICBpbnQzMl90ICAgICAgbW9udGgsCisgICAgICAgICAgICAgaW50
MzJfdCAgICAgIGRhdGUsCisgICAgICAgICAgICAgVUVycm9yQ29kZSogIHN0YXR1cyk7CisKKy8q
KgorICogU2V0IGEgVUNhbGVuZGFyJ3MgY3VycmVudCBkYXRlLgorICogVGhlIGRhdGUgaXMgcmVw
cmVzZW50ZWQgYXMgYSBzZXJpZXMgb2YgMzItYml0IGludGVnZXJzLgorICogQHBhcmFtIGNhbCBU
aGUgVUNhbGVuZGFyIHRvIHNldC4KKyAqIEBwYXJhbSB5ZWFyIFRoZSBkZXNpcmVkIHllYXIuCisg
KiBAcGFyYW0gbW9udGggVGhlIGRlc2lyZWQgbW9udGg7IG9uZSBvZiBVQ0FMX0pBTlVBUlksIFVD
QUxfRkVCUlVBUlksIFVDQUxfTUFSQ0gsIFVDQUxfQVBSSUwsIFVDQUxfTUFZLAorICogVUNBTF9K
VU5FLCBVQ0FMX0pVTFksIFVDQUxfQVVHVVNULCBVQ0FMX1NFUFRFTUJFUiwgVUNBTF9PQ1RPQkVS
LCBVQ0FMX05PVkVNQkVSLCBVQ0FMX0RFQ0VNQkVSLCBVQ0FMX1VOREVDSU1CRVIKKyAqIEBwYXJh
bSBkYXRlIFRoZSBkZXNpcmVkIGRheSBvZiB0aGUgbW9udGguCisgKiBAcGFyYW0gaG91ciBUaGUg
ZGVzaXJlZCBob3VyIG9mIGRheS4KKyAqIEBwYXJhbSBtaW51dGUgVGhlIGRlc2lyZWQgbWludXRl
LgorICogQHBhcmFtIHNlY29uZCBUaGUgZGVzaXJlYyBzZWNvbmQuCisgKiBAcGFyYW0gc3RhdHVz
IEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworICogQHNl
ZSB1Y2FsX2dldE1pbGxpcworICogQHNlZSB1Y2FsX3NldE1pbGxpcworICogQHNlZSB1Y2FsX3Nl
dERhdGUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAK
K3VjYWxfc2V0RGF0ZVRpbWUoVUNhbGVuZGFyKiAgIGNhbCwKKyAgICAgICAgICAgICAgICAgaW50
MzJfdCAgICAgIHllYXIsCisgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICBtb250aCwKKyAg
ICAgICAgICAgICAgICAgaW50MzJfdCAgICAgIGRhdGUsCisgICAgICAgICAgICAgICAgIGludDMy
X3QgICAgICBob3VyLAorICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgbWludXRlLAorICAg
ICAgICAgICAgICAgICBpbnQzMl90ICAgICAgc2Vjb25kLAorICAgICAgICAgICAgICAgICBVRXJy
b3JDb2RlKiAgc3RhdHVzKTsKKworLyoqCisgKiBSZXR1cm5zIFRSVUUgaWYgdHdvIFVDYWxlbmRh
cnMgYXJlIGVxdWl2YWxlbnQuICBFcXVpdmFsZW50CisgKiBVQ2FsZW5kYXJzIHdpbGwgYmVoYXZl
IGlkZW50aWNhbGx5LCBidXQgdGhleSBtYXkgYmUgc2V0IHRvCisgKiBkaWZmZXJlbnQgdGltZXMu
CisgKiBAcGFyYW0gY2FsMSBUaGUgZmlyc3Qgb2YgdGhlIFVDYWxlbmRhcnMgdG8gY29tcGFyZS4K
KyAqIEBwYXJhbSBjYWwyIFRoZSBzZWNvbmQgb2YgdGhlIFVDYWxlbmRhcnMgdG8gY29tcGFyZS4K
KyAqIEByZXR1cm4gVFJVRSBpZiBjYWwxIGFuZCBjYWwyIGFyZSBlcXVpdmFsZW50LCBGQUxTRSBv
dGhlcndpc2UuCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgVUJvb2wgVV9FWFBP
UlQyIAordWNhbF9lcXVpdmFsZW50VG8oY29uc3QgVUNhbGVuZGFyKiAgY2FsMSwKKyAgICAgICAg
ICAgICAgICAgIGNvbnN0IFVDYWxlbmRhciogIGNhbDIpOworCisvKioKKyAqIEFkZCBhIHNwZWNp
ZmllZCBzaWduZWQgYW1vdW50IHRvIGEgcGFydGljdWxhciBmaWVsZCBpbiBhIFVDYWxlbmRhci4K
KyAqIFRoaXMgY2FuIG1vZGlmeSBtb3JlIHNpZ25pZmljYW50IGZpZWxkcyBpbiB0aGUgY2FsZW5k
YXIuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gd2hpY2ggdG8gYWRkLgorICogQHBh
cmFtIGZpZWxkIFRoZSBmaWVsZCB0byB3aGljaCB0byBhZGQgdGhlIHNpZ25lZCB2YWx1ZTsgb25l
IG9mIFVDQUxfRVJBLCBVQ0FMX1lFQVIsIFVDQUxfTU9OVEgsCisgKiBVQ0FMX1dFRUtfT0ZfWUVB
UiwgVUNBTF9XRUVLX09GX01PTlRILCBVQ0FMX0RBVEUsIFVDQUxfREFZX09GX1lFQVIsIFVDQUxf
REFZX09GX1dFRUssCisgKiBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRILCBVQ0FMX0FNX1BNLCBV
Q0FMX0hPVVIsIFVDQUxfSE9VUl9PRl9EQVksIFVDQUxfTUlOVVRFLCBVQ0FMX1NFQ09ORCwKKyAq
IFVDQUxfTUlMTElTRUNPTkQsIFVDQUxfWk9ORV9PRkZTRVQsIFVDQUxfRFNUX09GRlNFVC4KKyAq
IEBwYXJhbSBhbW91bnQgVGhlIHNpZ25lZCBhbW91bnQgdG8gYWRkIHRvIGZpZWxkLiBJZiB0aGUg
YW1vdW50IGNhdXNlcyB0aGUgdmFsdWUKKyAqIHRvIGV4Y2VlZCB0byBtYXhpbXVtIG9yIG1pbmlt
dW0gdmFsdWVzIGZvciB0aGF0IGZpZWxkLCBvdGhlciBmaWVsZHMgYXJlIG1vZGlmaWVkCisgKiB0
byBwcmVzZXJ2ZSB0aGUgbWFnbml0dWRlIG9mIHRoZSBjaGFuZ2UuCisgKiBAcGFyYW0gc3RhdHVz
IEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworICogQHNl
ZSB1Y2FsX3JvbGwKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQ
T1JUMiAKK3VjYWxfYWRkKFVDYWxlbmRhciogICAgICAgICAgIGNhbCwKKyAgICAgICAgIFVDYWxl
bmRhckRhdGVGaWVsZHMgIGZpZWxkLAorICAgICAgICAgaW50MzJfdCAgICAgICAgICAgICAgYW1v
dW50LAorICAgICAgICAgVUVycm9yQ29kZSogICAgICAgICAgc3RhdHVzKTsKKworLyoqCisgKiBB
ZGQgYSBzcGVjaWZpZWQgc2lnbmVkIGFtb3VudCB0byBhIHBhcnRpY3VsYXIgZmllbGQgaW4gYSBV
Q2FsZW5kYXIuCisgKiBUaGlzIHdpbGwgbm90IG1vZGlmeSBtb3JlIHNpZ25pZmljYW50IGZpZWxk
cyBpbiB0aGUgY2FsZW5kYXIuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gd2hpY2gg
dG8gYWRkLgorICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZCB0byB3aGljaCB0byBhZGQgdGhlIHNp
Z25lZCB2YWx1ZTsgb25lIG9mIFVDQUxfRVJBLCBVQ0FMX1lFQVIsIFVDQUxfTU9OVEgsCisgKiBV
Q0FMX1dFRUtfT0ZfWUVBUiwgVUNBTF9XRUVLX09GX01PTlRILCBVQ0FMX0RBVEUsIFVDQUxfREFZ
X09GX1lFQVIsIFVDQUxfREFZX09GX1dFRUssCisgKiBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRI
LCBVQ0FMX0FNX1BNLCBVQ0FMX0hPVVIsIFVDQUxfSE9VUl9PRl9EQVksIFVDQUxfTUlOVVRFLCBV
Q0FMX1NFQ09ORCwKKyAqIFVDQUxfTUlMTElTRUNPTkQsIFVDQUxfWk9ORV9PRkZTRVQsIFVDQUxf
RFNUX09GRlNFVC4KKyAqIEBwYXJhbSBhbW91bnQgVGhlIHNpZ25lZCBhbW91bnQgdG8gYWRkIHRv
IGZpZWxkLiBJZiB0aGUgYW1vdW50IGNhdXNlcyB0aGUgdmFsdWUKKyAqIHRvIGV4Y2VlZCB0byBt
YXhpbXVtIG9yIG1pbmltdW0gdmFsdWVzIGZvciB0aGF0IGZpZWxkLCB0aGUgZmllbGQgaXMgcGlu
bmVkIHRvIGEgcGVybWlzc2libGUKKyAqIHZhbHVlLgorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50
ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyAqIEBzZWUgdWNhbF9h
ZGQKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3Vj
YWxfcm9sbChVQ2FsZW5kYXIqICAgICAgICAgICBjYWwsCisgICAgICAgICAgVUNhbGVuZGFyRGF0
ZUZpZWxkcyAgZmllbGQsCisgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgICAgYW1vdW50LAor
ICAgICAgICAgIFVFcnJvckNvZGUqICAgICAgICAgIHN0YXR1cyk7CisKKy8qKgorICogR2V0IHRo
ZSBjdXJyZW50IHZhbHVlIG9mIGEgZmllbGQgZnJvbSBhIFVDYWxlbmRhci4KKyAqIEFsbCBmaWVs
ZHMgYXJlIHJlcHJlc2VudGVkIGFzIDMyLWJpdCBpbnRlZ2Vycy4KKyAqIEBwYXJhbSBjYWwgVGhl
IFVDYWxlbmRhciB0byBxdWVyeS4KKyAqIEBwYXJhbSBmaWVsZCBUaGUgZGVzaXJlZCBmaWVsZDsg
b25lIG9mIFVDQUxfRVJBLCBVQ0FMX1lFQVIsIFVDQUxfTU9OVEgsCisgKiBVQ0FMX1dFRUtfT0Zf
WUVBUiwgVUNBTF9XRUVLX09GX01PTlRILCBVQ0FMX0RBVEUsIFVDQUxfREFZX09GX1lFQVIsIFVD
QUxfREFZX09GX1dFRUssCisgKiBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRILCBVQ0FMX0FNX1BN
LCBVQ0FMX0hPVVIsIFVDQUxfSE9VUl9PRl9EQVksIFVDQUxfTUlOVVRFLCBVQ0FMX1NFQ09ORCwK
KyAqIFVDQUxfTUlMTElTRUNPTkQsIFVDQUxfWk9ORV9PRkZTRVQsIFVDQUxfRFNUX09GRlNFVC4K
KyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBh
bnkgZXJyb3JzCisgKiBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgZGVzaXJlZCBmaWVsZC4KKyAq
IEBzZWUgdWNhbF9zZXQKKyAqIEBzZWUgdWNhbF9pc1NldAorICogQHNlZSB1Y2FsX2NsZWFyRmll
bGQKKyAqIEBzZWUgdWNhbF9jbGVhcgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxF
IGludDMyX3QgVV9FWFBPUlQyIAordWNhbF9nZXQoY29uc3QgVUNhbGVuZGFyKiAgICAgY2FsLAor
ICAgICAgICAgVUNhbGVuZGFyRGF0ZUZpZWxkcyAgZmllbGQsCisgICAgICAgICBVRXJyb3JDb2Rl
KiAgICAgICAgICBzdGF0dXMgKTsKKworLyoqCisgKiBTZXQgdGhlIHZhbHVlIG9mIGEgZmllbGQg
aW4gYSBVQ2FsZW5kYXIuCisgKiBBbGwgZmllbGRzIGFyZSByZXByZXNlbnRlZCBhcyAzMi1iaXQg
aW50ZWdlcnMuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gc2V0LgorICogQHBhcmFt
IGZpZWxkIFRoZSBmaWVsZCB0byBzZXQ7IG9uZSBvZiBVQ0FMX0VSQSwgVUNBTF9ZRUFSLCBVQ0FM
X01PTlRILAorICogVUNBTF9XRUVLX09GX1lFQVIsIFVDQUxfV0VFS19PRl9NT05USCwgVUNBTF9E
QVRFLCBVQ0FMX0RBWV9PRl9ZRUFSLCBVQ0FMX0RBWV9PRl9XRUVLLAorICogVUNBTF9EQVlfT0Zf
V0VFS19JTl9NT05USCwgVUNBTF9BTV9QTSwgVUNBTF9IT1VSLCBVQ0FMX0hPVVJfT0ZfREFZLCBV
Q0FMX01JTlVURSwgVUNBTF9TRUNPTkQsCisgKiBVQ0FMX01JTExJU0VDT05ELCBVQ0FMX1pPTkVf
T0ZGU0VULCBVQ0FMX0RTVF9PRkZTRVQuCisgKiBAcGFyYW0gdmFsdWUgVGhlIGRlc2lyZWQgdmFs
dWUgb2YgZmllbGQuCisgKiBAc2VlIHVjYWxfZ2V0CisgKiBAc2VlIHVjYWxfaXNTZXQKKyAqIEBz
ZWUgdWNhbF9jbGVhckZpZWxkCisgKiBAc2VlIHVjYWxfY2xlYXIKKyAqIEBzdGFibGUgSUNVIDIu
MAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfc2V0KFVDYWxlbmRhciogICAg
ICAgICAgIGNhbCwKKyAgICAgICAgIFVDYWxlbmRhckRhdGVGaWVsZHMgIGZpZWxkLAorICAgICAg
ICAgaW50MzJfdCAgICAgICAgICAgICAgdmFsdWUpOworCisvKioKKyAqIERldGVybWluZSBpZiBh
IGZpZWxkIGluIGEgVUNhbGVuZGFyIGlzIHNldC4KKyAqIEFsbCBmaWVsZHMgYXJlIHJlcHJlc2Vu
dGVkIGFzIDMyLWJpdCBpbnRlZ2Vycy4KKyAqIEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBx
dWVyeS4KKyAqIEBwYXJhbSBmaWVsZCBUaGUgZGVzaXJlZCBmaWVsZDsgb25lIG9mIFVDQUxfRVJB
LCBVQ0FMX1lFQVIsIFVDQUxfTU9OVEgsCisgKiBVQ0FMX1dFRUtfT0ZfWUVBUiwgVUNBTF9XRUVL
X09GX01PTlRILCBVQ0FMX0RBVEUsIFVDQUxfREFZX09GX1lFQVIsIFVDQUxfREFZX09GX1dFRUss
CisgKiBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRILCBVQ0FMX0FNX1BNLCBVQ0FMX0hPVVIsIFVD
QUxfSE9VUl9PRl9EQVksIFVDQUxfTUlOVVRFLCBVQ0FMX1NFQ09ORCwKKyAqIFVDQUxfTUlMTElT
RUNPTkQsIFVDQUxfWk9ORV9PRkZTRVQsIFVDQUxfRFNUX09GRlNFVC4KKyAqIEByZXR1cm4gVFJV
RSBpZiBmaWVsZCBpcyBzZXQsIEZBTFNFIG90aGVyd2lzZS4KKyAqIEBzZWUgdWNhbF9nZXQKKyAq
IEBzZWUgdWNhbF9zZXQKKyAqIEBzZWUgdWNhbF9jbGVhckZpZWxkCisgKiBAc2VlIHVjYWxfY2xl
YXIKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBVQm9vbCBVX0VYUE9SVDIgCit1
Y2FsX2lzU2V0KGNvbnN0IFVDYWxlbmRhciogICAgIGNhbCwKKyAgICAgICAgICAgVUNhbGVuZGFy
RGF0ZUZpZWxkcyAgZmllbGQpOworCisvKioKKyAqIENsZWFyIGEgZmllbGQgaW4gYSBVQ2FsZW5k
YXIuCisgKiBBbGwgZmllbGRzIGFyZSByZXByZXNlbnRlZCBhcyAzMi1iaXQgaW50ZWdlcnMuCisg
KiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgY29udGFpbmluZyB0aGUgZmllbGQgdG8gY2xlYXIu
CisgKiBAcGFyYW0gZmllbGQgVGhlIGZpZWxkIHRvIGNsZWFyOyBvbmUgb2YgVUNBTF9FUkEsIFVD
QUxfWUVBUiwgVUNBTF9NT05USCwKKyAqIFVDQUxfV0VFS19PRl9ZRUFSLCBVQ0FMX1dFRUtfT0Zf
TU9OVEgsIFVDQUxfREFURSwgVUNBTF9EQVlfT0ZfWUVBUiwgVUNBTF9EQVlfT0ZfV0VFSywKKyAq
IFVDQUxfREFZX09GX1dFRUtfSU5fTU9OVEgsIFVDQUxfQU1fUE0sIFVDQUxfSE9VUiwgVUNBTF9I
T1VSX09GX0RBWSwgVUNBTF9NSU5VVEUsIFVDQUxfU0VDT05ELAorICogVUNBTF9NSUxMSVNFQ09O
RCwgVUNBTF9aT05FX09GRlNFVCwgVUNBTF9EU1RfT0ZGU0VULgorICogQHNlZSB1Y2FsX2dldAor
ICogQHNlZSB1Y2FsX3NldAorICogQHNlZSB1Y2FsX2lzU2V0CisgKiBAc2VlIHVjYWxfY2xlYXIK
KyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxf
Y2xlYXJGaWVsZChVQ2FsZW5kYXIqICAgICAgICAgICBjYWwsCisgICAgICAgICAgICAgICAgVUNh
bGVuZGFyRGF0ZUZpZWxkcyAgZmllbGQpOworCisvKioKKyAqIENsZWFyIGFsbCBmaWVsZHMgaW4g
YSBVQ2FsZW5kYXIuCisgKiBBbGwgZmllbGRzIGFyZSByZXByZXNlbnRlZCBhcyAzMi1iaXQgaW50
ZWdlcnMuCisgKiBAcGFyYW0gY2FsZW5kYXIgVGhlIFVDYWxlbmRhciB0byBjbGVhci4KKyAqIEBz
ZWUgdWNhbF9nZXQKKyAqIEBzZWUgdWNhbF9zZXQKKyAqIEBzZWUgdWNhbF9pc1NldAorICogQHNl
ZSB1Y2FsX2NsZWFyRmllbGQKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lk
IFVfRVhQT1JUMiAKK3VjYWxfY2xlYXIoVUNhbGVuZGFyKiBjYWxlbmRhcik7CisKKy8qKgorICog
UG9zc2libGUgbGltaXQgdmFsdWVzIGZvciBhIFVDYWxlbmRhciAKKyAqIEBzdGFibGUgSUNVIDIu
MAorICovCitlbnVtIFVDYWxlbmRhckxpbWl0VHlwZSB7CisgIC8qKiBNaW5pbXVtIHZhbHVlICov
CisgIFVDQUxfTUlOSU1VTSwKKyAgLyoqIE1heGltdW0gdmFsdWUgKi8KKyAgVUNBTF9NQVhJTVVN
LAorICAvKiogR3JlYXRlc3QgbWluaW11bSB2YWx1ZSAqLworICBVQ0FMX0dSRUFURVNUX01JTklN
VU0sCisgIC8qKiBMZWFlc3QgbWF4aW11bSB2YWx1ZSAqLworICBVQ0FMX0xFQVNUX01BWElNVU0s
CisgIC8qKiBBY3R1YWwgbWluaW11bSB2YWx1ZSAqLworICBVQ0FMX0FDVFVBTF9NSU5JTVVNLAor
ICAvKiogQWN0dWFsIG1heGltdW0gdmFsdWUgKi8KKyAgVUNBTF9BQ1RVQUxfTUFYSU1VTQorfTsK
KworLyoqIEBzdGFibGUgSUNVIDIuMCAqLwordHlwZWRlZiBlbnVtIFVDYWxlbmRhckxpbWl0VHlw
ZSBVQ2FsZW5kYXJMaW1pdFR5cGU7CisKKy8qKgorICogRGV0ZXJtaW5lIGEgbGltaXQgZm9yIGEg
ZmllbGQgaW4gYSBVQ2FsZW5kYXIuCisgKiBBIGxpbWl0IGlzIGEgbWF4aW11bSBvciBtaW5pbXVt
IHZhbHVlIGZvciBhIGZpZWxkLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHF1ZXJ5
LgorICogQHBhcmFtIGZpZWxkIFRoZSBkZXNpcmVkIGZpZWxkOyBvbmUgb2YgVUNBTF9FUkEsIFVD
QUxfWUVBUiwgVUNBTF9NT05USCwKKyAqIFVDQUxfV0VFS19PRl9ZRUFSLCBVQ0FMX1dFRUtfT0Zf
TU9OVEgsIFVDQUxfREFURSwgVUNBTF9EQVlfT0ZfWUVBUiwgVUNBTF9EQVlfT0ZfV0VFSywKKyAq
IFVDQUxfREFZX09GX1dFRUtfSU5fTU9OVEgsIFVDQUxfQU1fUE0sIFVDQUxfSE9VUiwgVUNBTF9I
T1VSX09GX0RBWSwgVUNBTF9NSU5VVEUsIFVDQUxfU0VDT05ELAorICogVUNBTF9NSUxMSVNFQ09O
RCwgVUNBTF9aT05FX09GRlNFVCwgVUNBTF9EU1RfT0ZGU0VULgorICogQHBhcmFtIHR5cGUgVGhl
IGRlc2lyZWQgY3JpdGljYWwgcG9pbnQ7IG9uZSBvZiBVQ0FMX01JTklNVU0sIFVDQUxfTUFYSU1V
TSwgVUNBTF9HUkVBVEVTVF9NSU5JTVVNLAorICogVUNBTF9MRUFTVF9NQVhJTVVNLCBVQ0FMX0FD
VFVBTF9NSU5JTVVNLCBVQ0FMX0FDVFVBTF9NQVhJTVVNCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9p
bnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycy4KKyAqIEByZXR1cm4g
VGhlIHJlcXVlc3RlZCB2YWx1ZS4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBp
bnQzMl90IFVfRVhQT1JUMiAKK3VjYWxfZ2V0TGltaXQoY29uc3QgVUNhbGVuZGFyKiAgICAgY2Fs
LAorICAgICAgICAgICAgICBVQ2FsZW5kYXJEYXRlRmllbGRzICBmaWVsZCwKKyAgICAgICAgICAg
ICAgVUNhbGVuZGFyTGltaXRUeXBlICAgdHlwZSwKKyAgICAgICAgICAgICAgVUVycm9yQ29kZSog
ICAgICAgICAgc3RhdHVzKTsKKworLyoqIEdldCB0aGUgbG9jYWxlIGZvciB0aGlzIGNhbGVuZGFy
IG9iamVjdC4gWW91IGNhbiBjaG9vc2UgYmV0d2VlbiB2YWxpZCBhbmQgYWN0dWFsIGxvY2FsZS4K
KyAqICBAcGFyYW0gY2FsIFRoZSBjYWxlbmRhciBvYmplY3QKKyAqICBAcGFyYW0gdHlwZSB0eXBl
IG9mIHRoZSBsb2NhbGUgd2UncmUgbG9va2luZyBmb3IgKHZhbGlkIG9yIGFjdHVhbCkgCisgKiAg
QHBhcmFtIHN0YXR1cyBlcnJvciBjb2RlIGZvciB0aGUgb3BlcmF0aW9uCisgKiAgQHJldHVybiB0
aGUgbG9jYWxlIG5hbWUKKyAqICBAc3RhYmxlIElDVSAyLjgKKyAqLworVV9TVEFCTEUgY29uc3Qg
Y2hhciAqIFVfRVhQT1JUMgordWNhbF9nZXRMb2NhbGVCeVR5cGUoY29uc3QgVUNhbGVuZGFyICpj
YWwsIFVMb2NEYXRhTG9jYWxlVHlwZSB0eXBlLCBVRXJyb3JDb2RlKiBzdGF0dXMpOworCisvKioK
KyAqIFJldHVybnMgdGhlIHRpbWV6b25lIGRhdGEgdmVyc2lvbiBjdXJyZW50bHkgdXNlZCBieSBJ
Q1UuCisgKiBAcGFyYW0gc3RhdHVzIGVycm9yIGNvZGUgZm9yIHRoZSBvcGVyYXRpb24KKyAqIEBy
ZXR1cm4gdGhlIHZlcnNpb24gc3RyaW5nLCBzdWNoIGFzICIyMDA3ZiIKKyAqIEBzdGFibGUgSUNV
IDMuOAorICovCitVX1NUQUJMRSBjb25zdCBjaGFyICogVV9FWFBPUlQyCit1Y2FsX2dldFRaRGF0
YVZlcnNpb24oVUVycm9yQ29kZSogc3RhdHVzKTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBjYW5v
bmljYWwgc3lzdGVtIHRpbWV6b25lIElEIG9yIHRoZSBub3JtYWxpemVkCisgKiBjdXN0b20gdGlt
ZSB6b25lIElEIGZvciB0aGUgZ2l2ZW4gdGltZSB6b25lIElELgorICogQHBhcmFtIGlkICAgICAg
ICBUaGUgaW5wdXQgdGltZXpvbmUgSUQgdG8gYmUgY2Fub25pY2FsaXplZC4KKyAqIEBwYXJhbSBs
ZW4gICAgICAgVGhlIGxlbmd0aCBvZiBpZCwgb3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorICog
QHBhcmFtIHJlc3VsdCAgICBUaGUgYnVmZmVyIHJlY2VpdmVzIHRoZSBjYW5vbmljYWwgc3lzdGVt
IHRpbWV6b25lIElECisgKiAgICAgICAgICAgICAgICAgIG9yIHRoZSBjdXN0b20gdGltZXpvbmUg
SUQgaW4gbm9ybWFsaXplZCBmb3JtYXQuCisgKiBAcGFyYW0gcmVzdWx0Q2FwYWNpdHkgICAgVGhl
IGNhcGFjaXR5IG9mIHRoZSByZXN1bHQgYnVmZmVyLgorICogQHBhcmFtIGlzU3lzdGVtSUQgICAg
ICAgIFJlY2VpdmVzIGlmIHRoZSBnaXZlbiBJRCBpcyBhIGtub3duIHN5c3RlbQorICAgICAqICAg
ICAgICAgICAgICAgICAgICAgIHRpbWV6b25lIElELgorICogQHBhcmFtIHN0YXR1cyAgICBSZWNl
dmllcyB0aGUgc3RhdHVzLiAgV2hlbiB0aGUgZ2l2ZW4gdGltZXpvbmUgSUQKKyAqICAgICAgICAg
ICAgICAgICAgaXMgbmVpdGhlciBhIGtub3duIHN5c3RlbSB0aW1lIHpvbmUgSUQgbm9yIGEKKyAq
ICAgICAgICAgICAgICAgICAgdmFsaWQgY3VzdG9tIHRpbWV6b25lIElELCBVX0lMTEVHQUxfQVJH
VU1FTlRfRVJST1IKKyAqICAgICAgICAgICAgICAgICAgaXMgc2V0LgorICogQHJldHVybiAgICAg
ICAgICBUaGUgcmVzdWx0IHN0cmluZyBsZW5ndGgsIG5vdCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0
aW5nCisgKiAgICAgICAgICAgICAgICAgIG51bGwuCisgKiBAc3RhYmxlIElDVSA0LjAKKyAqLwor
VV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKK3VjYWxfZ2V0Q2Fub25pY2FsVGltZVpvbmVJRChj
b25zdCBVQ2hhciogaWQsIGludDMyX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVDaGFyKiByZXN1bHQsIGludDMyX3QgcmVzdWx0Q2FwYWNpdHksIFVCb29sICppc1N5c3RlbUlE
LCBVRXJyb3JDb2RlKiBzdGF0dXMpOworLyoqCisgKiBHZXQgdGhlIHJlc291cmNlIGtleXdvcmQg
dmFsdWUgc3RyaW5nIGRlc2lnbmF0aW5nIHRoZSBjYWxlbmRhciB0eXBlIGZvciB0aGUgVUNhbGVu
ZGFyLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIHN0
YXR1cyBUaGUgZXJyb3IgY29kZSBmb3IgdGhlIG9wZXJhdGlvbi4KKyAqIEByZXR1cm4gVGhlIHJl
c291cmNlIGtleXdvcmQgdmFsdWUgc3RyaW5nLgorICogQHN0YWJsZSBJQ1UgNC4yCisgKi8KK1Vf
U1RBQkxFIGNvbnN0IGNoYXIgKiBVX0VYUE9SVDIKK3VjYWxfZ2V0VHlwZShjb25zdCBVQ2FsZW5k
YXIgKmNhbCwgVUVycm9yQ29kZSogc3RhdHVzKTsKKworLyoqCisgKiBHaXZlbiBhIGtleSBhbmQg
YSBsb2NhbGUsIHJldHVybnMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcyBpbiBhIHByZWZlcnJl
ZAorICogb3JkZXIgdGhhdCB3b3VsZCBtYWtlIGEgZGlmZmVyZW5jZS4gVGhlc2UgYXJlIGFsbCBh
bmQgb25seSB0aG9zZSB2YWx1ZXMgd2hlcmUKKyAqIHRoZSBvcGVuIChjcmVhdGlvbikgb2YgdGhl
IHNlcnZpY2Ugd2l0aCB0aGUgbG9jYWxlIGZvcm1lZCBmcm9tIHRoZSBpbnB1dCBsb2NhbGUKKyAq
IHBsdXMgaW5wdXQga2V5d29yZCBhbmQgdGhhdCB2YWx1ZSBoYXMgZGlmZmVyZW50IGJlaGF2aW9y
IHRoYW4gY3JlYXRpb24gd2l0aCB0aGUKKyAqIGlucHV0IGxvY2FsZSBhbG9uZS4KKyAqIEBwYXJh
bSBrZXkgICAgICAgICAgIG9uZSBvZiB0aGUga2V5cyBzdXBwb3J0ZWQgYnkgdGhpcyBzZXJ2aWNl
LiAgRm9yIG5vdywgb25seQorICogICAgICAgICAgICAgICAgICAgICAgImNhbGVuZGFyIiBpcyBz
dXBwb3J0ZWQuCisgKiBAcGFyYW0gbG9jYWxlICAgICAgICB0aGUgbG9jYWxlCisgKiBAcGFyYW0g
Y29tbW9ubHlVc2VkICBpZiBzZXQgdG8gdHJ1ZSBpdCB3aWxsIHJldHVybiBvbmx5IGNvbW1vbmx5
IHVzZWQgdmFsdWVzCisgKiAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBnaXZlbiBsb2Nh
bGUgaW4gcHJlZmVycmVkIG9yZGVyLiAgT3RoZXJ3aXNlLAorICogICAgICAgICAgICAgICAgICAg
ICAgaXQgd2lsbCByZXR1cm4gYWxsIHRoZSBhdmFpbGFibGUgdmFsdWVzIGZvciB0aGUgbG9jYWxl
LgorICogQHBhcmFtIHN0YXR1cyBlcnJvciBzdGF0dXMKKyAqIEByZXR1cm4gYSBzdHJpbmcgZW51
bWVyYXRpb24gb3ZlciBrZXl3b3JkIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGtleSBhbmQgdGhlIGxv
Y2FsZS4KKyAqIEBzdGFibGUgSUNVIDQuMgorICovCitVX1NUQUJMRSBVRW51bWVyYXRpb24qIFVf
RVhQT1JUMgordWNhbF9nZXRLZXl3b3JkVmFsdWVzRm9yTG9jYWxlKGNvbnN0IGNoYXIqIGtleSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBsb2NhbGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVUJvb2wgY29tbW9ubHlVc2VkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUqIHN0YXR1cyk7CisKKworLyoqIFdlZWtk
YXkgdHlwZXMsIGFzIHJldHVybmVkIGJ5IHVjYWxfZ2V0RGF5T2ZXZWVrVHlwZSgpLgorICogQHN0
YWJsZSBJQ1UgNC40CisgKi8KK2VudW0gVUNhbGVuZGFyV2Vla2RheVR5cGUgeworICAvKioKKyAg
ICogRGVzaWduYXRlcyBhIGZ1bGwgd2Vla2RheSAobm8gcGFydCBvZiB0aGUgZGF5IGlzIGluY2x1
ZGVkIGluIHRoZSB3ZWVrZW5kKS4KKyAgICogQHN0YWJsZSBJQ1UgNC40IAorICAgKi8KKyAgVUNB
TF9XRUVLREFZLAorICAvKioKKyAgICogRGVzaWduYXRlcyBhIGZ1bGwgd2Vla2VuZCBkYXkgKHRo
ZSBlbnRpcmUgZGF5IGlzIGluY2x1ZGVkIGluIHRoZSB3ZWVrZW5kKS4KKyAgICogQHN0YWJsZSBJ
Q1UgNC40IAorICAgKi8KKyAgVUNBTF9XRUVLRU5ELAorICAvKioKKyAgICogRGVzaWduYXRlcyBh
IGRheSB0aGF0IHN0YXJ0cyBhcyBhIHdlZWtkYXkgYW5kIHRyYW5zaXRpb25zIHRvIHRoZSB3ZWVr
ZW5kLgorICAgKiBDYWxsIHVjYWxfZ2V0V2Vla2VuZFRyYW5zaXRpb24oKSB0byBnZXQgdGhlIHRp
bWUgb2YgdHJhbnNpdGlvbi4KKyAgICogQHN0YWJsZSBJQ1UgNC40IAorICAgKi8KKyAgVUNBTF9X
RUVLRU5EX09OU0VULAorICAvKioKKyAgICogRGVzaWduYXRlcyBhIGRheSB0aGF0IHN0YXJ0cyBh
cyB0aGUgd2Vla2VuZCBhbmQgdHJhbnNpdGlvbnMgdG8gYSB3ZWVrZGF5LgorICAgKiBDYWxsIHVj
YWxfZ2V0V2Vla2VuZFRyYW5zaXRpb24oKSB0byBnZXQgdGhlIHRpbWUgb2YgdHJhbnNpdGlvbi4K
KyAgICogQHN0YWJsZSBJQ1UgNC40IAorICAgKi8KKyAgVUNBTF9XRUVLRU5EX0NFQVNFCit9Owor
CisvKiogQHN0YWJsZSBJQ1UgNC40ICovCit0eXBlZGVmIGVudW0gVUNhbGVuZGFyV2Vla2RheVR5
cGUgVUNhbGVuZGFyV2Vla2RheVR5cGU7CisKKy8qKgorICogUmV0dXJucyB3aGV0aGVyIHRoZSBn
aXZlbiBkYXkgb2YgdGhlIHdlZWsgaXMgYSB3ZWVrZGF5LCBhCisgKiB3ZWVrZW5kIGRheSwgb3Ig
YSBkYXkgdGhhdCB0cmFuc2l0aW9ucyBmcm9tIG9uZSB0byB0aGUgb3RoZXIsCisgKiBpbiB0aGlz
IGNhbGVuZGFyIHN5c3RlbS4gSWYgYSB0cmFuc2l0aW9uIG9jY3VycyBhdCBtaWRuaWdodCwKKyAq
IHRoZW4gdGhlIGRheXMgYmVmb3JlIGFuZCBhZnRlciB0aGUgdHJhbnNpdGlvbiB3aWxsIGhhdmUg
dGhlCisgKiB0eXBlIFVDQUxfV0VFS0RBWSBvciBVQ0FMX1dFRUtFTkQuIElmIGEgdHJhbnNpdGlv
biBvY2N1cnMgYXQgYSB0aW1lCisgKiBvdGhlciB0aGFuIG1pZG5pZ2h0LCB0aGVuIHRoZSBkYXkg
b2YgdGhlIHRyYW5zaXRpb24gd2lsbCBoYXZlCisgKiB0aGUgdHlwZSBVQ0FMX1dFRUtFTkRfT05T
RVQgb3IgVUNBTF9XRUVLRU5EX0NFQVNFLiBJbiB0aGlzIGNhc2UsIHRoZQorICogbWV0aG9kIGdl
dFdlZWtlbmRUcmFuc2l0aW9uKCkgd2lsbCByZXR1cm4gdGhlIHBvaW50IG9mCisgKiB0cmFuc2l0
aW9uLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIGRh
eU9mV2VlayBUaGUgZGF5IG9mIHRoZSB3ZWVrIHdob3NlIHR5cGUgaXMgZGVzaXJlZCAoVUNBTF9T
VU5EQVkuLlVDQUxfU0FUVVJEQVkpLgorICogQHBhcmFtIHN0YXR1cyBUaGUgZXJyb3IgY29kZSBm
b3IgdGhlIG9wZXJhdGlvbi4KKyAqIEByZXR1cm4gVGhlIFVDYWxlbmRhcldlZWtkYXlUeXBlIGZv
ciB0aGUgZGF5IG9mIHRoZSB3ZWVrLgorICogQHN0YWJsZSBJQ1UgNC40CisgKi8KK1VfU1RBQkxF
IFVDYWxlbmRhcldlZWtkYXlUeXBlIFVfRVhQT1JUMgordWNhbF9nZXREYXlPZldlZWtUeXBlKGNv
bnN0IFVDYWxlbmRhciAqY2FsLCBVQ2FsZW5kYXJEYXlzT2ZXZWVrIGRheU9mV2VlaywgVUVycm9y
Q29kZSogc3RhdHVzKTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSB0aW1lIGR1cmluZyB0aGUgZGF5
IGF0IHdoaWNoIHRoZSB3ZWVrZW5kIGJlZ2lucyBvciBlbmRzIGluCisgKiB0aGlzIGNhbGVuZGFy
IHN5c3RlbS4gIElmIHVjYWxfZ2V0RGF5T2ZXZWVrVHlwZSgpIHJlcnR1cm5zIFVDQUxfV0VFS0VO
RF9PTlNFVAorICogZm9yIHRoZSBzcGVjaWZpZWQgZGF5T2ZXZWVrLCByZXR1cm4gdGhlIHRpbWUg
YXQgd2hpY2ggdGhlIHdlZWtlbmQgYmVnaW5zLgorICogSWYgdWNhbF9nZXREYXlPZldlZWtUeXBl
KCkgcmV0dXJucyBVQ0FMX1dFRUtFTkRfQ0VBU0UgZm9yIHRoZSBzcGVjaWZpZWQgZGF5T2ZXZWVr
LAorICogcmV0dXJuIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSB3ZWVrZW5kIGVuZHMuIElmIHVjYWxf
Z2V0RGF5T2ZXZWVrVHlwZSgpIHJldHVybnMKKyAqIHNvbWUgb3RoZXIgVUNhbGVuZGFyV2Vla2Rh
eVR5cGUgZm9yIHRoZSBzcGVjaWZpZWQgZGF5T2ZXZWVrLCBpcyBpdCBhbiBlcnJvciBjb25kaXRp
b24KKyAqIChVX0lMTEVHQUxfQVJHVU1FTlRfRVJST1IpLgorICogQHBhcmFtIGNhbCBUaGUgVUNh
bGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIGRheU9mV2VlayBUaGUgZGF5IG9mIHRoZSB3ZWVr
IGZvciB3aGljaCB0aGUgd2Vla2VuZCB0cmFuc2l0aW9uIHRpbWUgaXMKKyAqIGRlc2lyZWQgKFVD
QUxfU1VOREFZLi5VQ0FMX1NBVFVSREFZKS4KKyAqIEBwYXJhbSBzdGF0dXMgVGhlIGVycm9yIGNv
ZGUgZm9yIHRoZSBvcGVyYXRpb24uCisgKiBAcmV0dXJuIFRoZSBtaWxsaXNlY29uZHMgYWZ0ZXIg
bWlkbmlnaHQgYXQgd2hpY2ggdGhlIHdlZWtlbmQgYmVnaW5zIG9yIGVuZHMuCisgKiBAc3RhYmxl
IElDVSA0LjQKKyAqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKK3VjYWxfZ2V0V2Vla2Vu
ZFRyYW5zaXRpb24oY29uc3QgVUNhbGVuZGFyICpjYWwsIFVDYWxlbmRhckRheXNPZldlZWsgZGF5
T2ZXZWVrLCBVRXJyb3JDb2RlICpzdGF0dXMpOworCisvKioKKyAqIFJldHVybnMgVFJVRSBpZiB0
aGUgZ2l2ZW4gVURhdGUgaXMgaW4gdGhlIHdlZWtlbmQgaW4KKyAqIHRoaXMgY2FsZW5kYXIgc3lz
dGVtLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIGRh
dGUgVGhlIFVEYXRlIGluIHF1ZXN0aW9uLgorICogQHBhcmFtIHN0YXR1cyBUaGUgZXJyb3IgY29k
ZSBmb3IgdGhlIG9wZXJhdGlvbi4KKyAqIEByZXR1cm4gVFJVRSBpZiB0aGUgZ2l2ZW4gVURhdGUg
aXMgaW4gdGhlIHdlZWtlbmQgaW4KKyAqIHRoaXMgY2FsZW5kYXIgc3lzdGVtLCBGQUxTRSBvdGhl
cndpc2UuCisgKiBAc3RhYmxlIElDVSA0LjQKKyAqLworVV9TVEFCTEUgVUJvb2wgVV9FWFBPUlQy
Cit1Y2FsX2lzV2Vla2VuZChjb25zdCBVQ2FsZW5kYXIgKmNhbCwgVURhdGUgZGF0ZSwgVUVycm9y
Q29kZSAqc3RhdHVzKTsKKworCisjZW5kaWYgLyogI2lmICFVQ09ORklHX05PX0ZPUk1BVFRJTkcg
Ki8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNv
ZGUvdWRhdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3VkYXQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kNDgwYzdkYTUxNDc1YjM5M2NlMGQzYzliNzIyY2M2ZGM0ZDNkMGJiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3VkYXQuaApAQCAt
MCwwICsxLDk5NyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQg
KEMpIDE5OTYtMjAxMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworICogQ29ycG9y
YXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqCisqLworCisjaWZuZGVmIFVEQVRfSAorI2RlZmluZSBVREFUX0gKKworI2luY2x1ZGUg
InVuaWNvZGUvdXR5cGVzLmgiCisKKyNpZiAhVUNPTkZJR19OT19GT1JNQVRUSU5HCisKKyNpbmNs
dWRlICJ1bmljb2RlL2xvY2FscG9pbnRlci5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWNhbC5oIgor
I2luY2x1ZGUgInVuaWNvZGUvdW51bS5oIgorLyoqCisgKiBcZmlsZQorICogXGJyaWVmIEMgQVBJ
OiBEYXRlRm9ybWF0CisgKgorICogPGgyPiBEYXRlIEZvcm1hdCBDIEFQSTwvaDI+CisgKgorICog
RGF0ZSBGb3JtYXQgQyBBUEkgIGNvbnNpc3RzIG9mIGZ1bmN0aW9ucyB0aGF0IGNvbnZlcnQgZGF0
ZXMgYW5kCisgKiB0aW1lcyBmcm9tIHRoZWlyIGludGVybmFsIHJlcHJlc2VudGF0aW9ucyB0byB0
ZXh0dWFsIGZvcm0gYW5kIGJhY2sgYWdhaW4gaW4gYQorICogbGFuZ3VhZ2UtaW5kZXBlbmRlbnQg
bWFubmVyLiBDb252ZXJ0aW5nIGZyb20gdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIChtaWxs
aXNlY29uZHMKKyAqIHNpbmNlIG1pZG5pZ2h0LCBKYW51YXJ5IDEsIDE5NzApIHRvIHRleHQgaXMg
a25vd24gYXMgImZvcm1hdHRpbmcsIiBhbmQgY29udmVydGluZworICogZnJvbSB0ZXh0IHRvIG1p
bGxpcyBpcyBrbm93biBhcyAicGFyc2luZy4iICBXZSBjdXJyZW50bHkgZGVmaW5lIG9ubHkgb25l
IGNvbmNyZXRlCisgKiBzdHJ1Y3R1cmUgVURhdGVGb3JtYXQsIHdoaWNoIGNhbiBoYW5kbGUgcHJl
dHR5IG11Y2ggYWxsIG5vcm1hbAorICogZGF0ZSBmb3JtYXR0aW5nIGFuZCBwYXJzaW5nIGFjdGlv
bnMuCisgKiA8UD4KKyAqIERhdGUgRm9ybWF0IGhlbHBzIHlvdSB0byBmb3JtYXQgYW5kIHBhcnNl
IGRhdGVzIGZvciBhbnkgbG9jYWxlLiBZb3VyIGNvZGUgY2FuCisgKiBiZSBjb21wbGV0ZWx5IGlu
ZGVwZW5kZW50IG9mIHRoZSBsb2NhbGUgY29udmVudGlvbnMgZm9yIG1vbnRocywgZGF5cyBvZiB0
aGUKKyAqIHdlZWssIG9yIGV2ZW4gdGhlIGNhbGVuZGFyIGZvcm1hdDogbHVuYXIgdnMuIHNvbGFy
LgorICogPFA+CisgKiBUbyBmb3JtYXQgYSBkYXRlIGZvciB0aGUgY3VycmVudCBMb2NhbGUgd2l0
aCBkZWZhdWx0IHRpbWUgYW5kIGRhdGUgc3R5bGUsCisgKiB1c2Ugb25lIG9mIHRoZSBzdGF0aWMg
ZmFjdG9yeSBtZXRob2RzOgorICogPHByZT4KKyAqIFxjb2RlCisgKiAgVUVycm9yQ29kZSBzdGF0
dXMgPSBVX1pFUk9fRVJST1I7CisgKiAgVUNoYXIgKm15U3RyaW5nOworICogIGludDMyX3QgbXlT
dHJsZW4gPSAwOworICogIFVEYXRlRm9ybWF0KiBkZm10ID0gdWRhdF9vcGVuKFVEQVRfREVGQVVM
VCwgVURBVF9ERUZBVUxULCBOVUxMLCBOVUxMLCAtMSwgTlVMTCwgLTEsICZzdGF0dXMpOworICog
IG15U3RybGVuID0gdWRhdF9mb3JtYXQoZGZtdCwgbXlEYXRlLCBOVUxMLCBteVN0cmxlbiwgTlVM
TCwgJnN0YXR1cyk7CisgKiAgaWYgKHN0YXR1cz09VV9CVUZGRVJfT1ZFUkZMT1dfRVJST1Ipewor
ICogICAgICBzdGF0dXM9VV9aRVJPX0VSUk9SOworICogICAgICBteVN0cmluZz0oVUNoYXIqKW1h
bGxvYyhzaXplb2YoVUNoYXIpICogKG15U3RybGVuKzEpICk7CisgKiAgICAgIHVkYXRfZm9ybWF0
KGRmbXQsIG15RGF0ZSwgbXlTdHJpbmcsIG15U3RybGVuKzEsIE5VTEwsICZzdGF0dXMpOworICog
IH0KKyAqIFxlbmRjb2RlCisgKiA8L3ByZT4KKyAqIElmIHlvdSBhcmUgZm9ybWF0dGluZyBtdWx0
aXBsZSBudW1iZXJzLCBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBnZXQgdGhlCisgKiBmb3JtYXQg
YW5kIHVzZSBpdCBtdWx0aXBsZSB0aW1lcyBzbyB0aGF0IHRoZSBzeXN0ZW0gZG9lc24ndCBoYXZl
IHRvIGZldGNoIHRoZQorICogaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxvY2FsIGxhbmd1YWdlIGFu
ZCBjb3VudHJ5IGNvbnZlbnRpb25zIG11bHRpcGxlIHRpbWVzLgorICogPHByZT4KKyAqIFxjb2Rl
CisgKiAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgKiAgaW50MzJfdCBpLCBt
eVN0cmxlbiA9IDA7CisgKiAgVUNoYXIqIG15U3RyaW5nOworICogIGNoYXIgYnVmZmVyWzEwMjRd
OworICogIFVEYXRlIG15RGF0ZUFycltdID0geyAwLjAsIDEwMDAwMDAwMC4wLCAyMDAwMDAwMDAw
LjAgfTsgLy8gdGVzdCB2YWx1ZXMKKyAqICBVRGF0ZUZvcm1hdCogZGYgPSB1ZGF0X29wZW4oVURB
VF9ERUZBVUxULCBVREFUX0RFRkFVTFQsIE5VTEwsIE5VTEwsIC0xLCBOVUxMLCAwLCAmc3RhdHVz
KTsKKyAqICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgKiAgICAgIG15U3RybGVuID0gdWRh
dF9mb3JtYXQoZGYsIG15RGF0ZUFycltpXSwgTlVMTCwgbXlTdHJsZW4sIE5VTEwsICZzdGF0dXMp
OworICogICAgICBpZihzdGF0dXMgPT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpeworICogICAg
ICAgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICogICAgICAgICAgbXlTdHJpbmcgPSAoVUNo
YXIqKW1hbGxvYyhzaXplb2YoVUNoYXIpICogKG15U3RybGVuKzEpICk7CisgKiAgICAgICAgICB1
ZGF0X2Zvcm1hdChkZiwgbXlEYXRlQXJyW2ldLCBteVN0cmluZywgbXlTdHJsZW4rMSwgTlVMTCwg
JnN0YXR1cyk7CisgKiAgICAgICAgICBwcmludGYoIiVzXG4iLCB1X2F1c3RyY3B5KGJ1ZmZlciwg
bXlTdHJpbmcpICk7CisgKiAgICAgICAgICBmcmVlKG15U3RyaW5nKTsKKyAqICAgICAgfQorICog
IH0KKyAqIFxlbmRjb2RlCisgKiA8L3ByZT4KKyAqIFRvIGdldCBzcGVjaWZpYyBmaWVsZHMgb2Yg
YSBkYXRlLCB5b3UgY2FuIHVzZSBVRmllbGRQb3NpdGlvbiB0bworICogZ2V0IHNwZWNpZmljIGZp
ZWxkcy4KKyAqIDxwcmU+CisgKiBcY29kZQorICogIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJP
X0VSUk9SOworICogIFVGaWVsZFBvc2l0aW9uIHBvczsKKyAqICBVQ2hhciAqbXlTdHJpbmc7Cisg
KiAgaW50MzJfdCBteVN0cmxlbiA9IDA7CisgKiAgY2hhciBidWZmZXJbMTAyNF07CisgKgorICog
IHBvcy5maWVsZCA9IDE7ICAvLyBTYW1lIGFzIHRoZSBEYXRlRm9ybWF0OjpFRmllbGQgZW51bQor
ICogIFVEYXRlRm9ybWF0KiBkZm10ID0gdWRhdF9vcGVuKFVEQVRfREVGQVVMVCwgVURBVF9ERUZB
VUxULCBOVUxMLCAtMSwgTlVMTCwgMCwgJnN0YXR1cyk7CisgKiAgbXlTdHJsZW4gPSB1ZGF0X2Zv
cm1hdChkZm10LCBteURhdGUsIE5VTEwsIG15U3RybGVuLCAmcG9zLCAmc3RhdHVzKTsKKyAqICBp
ZiAoc3RhdHVzPT1VX0JVRkZFUl9PVkVSRkxPV19FUlJPUil7CisgKiAgICAgIHN0YXR1cz1VX1pF
Uk9fRVJST1I7CisgKiAgICAgIG15U3RyaW5nPShVQ2hhciopbWFsbG9jKHNpemVvZihVQ2hhcikg
KiAobXlTdHJsZW4rMSkgKTsKKyAqICAgICAgdWRhdF9mb3JtYXQoZGZtdCwgbXlEYXRlLCBteVN0
cmluZywgbXlTdHJsZW4rMSwgJnBvcywgJnN0YXR1cyk7CisgKiAgfQorICogIHByaW50ZigiZGF0
ZSBmb3JtYXQ6ICVzXG4iLCB1X2F1c3RyY3B5KGJ1ZmZlciwgbXlTdHJpbmcpKTsKKyAqICBidWZm
ZXJbcG9zLmVuZEluZGV4XSA9IDA7ICAgLy8gTlVMTCB0ZXJtaW5hdGUgdGhlIHN0cmluZy4KKyAq
ICBwcmludGYoIlVGaWVsZFBvc2l0aW9uIHBvc2l0aW9uIGVxdWFscyAlc1xuIiwgJmJ1ZmZlcltw
b3MuYmVnaW5JbmRleF0pOworICogXGVuZGNvZGUKKyAqIDwvcHJlPgorICogVG8gZm9ybWF0IGEg
ZGF0ZSBmb3IgYSBkaWZmZXJlbnQgTG9jYWxlLCBzcGVjaWZ5IGl0IGluIHRoZSBjYWxsIHRvCisg
KiB1ZGF0X29wZW4oKQorICogPHByZT4KKyAqIFxjb2RlCisgKiAgICAgICAgVURhdGVGb3JtYXQq
IGRmID0gdWRhdF9vcGVuKFVEQVRfU0hPUlQsIFVEQVRfU0hPUlQsICJmcl9GUiIsIE5VTEwsIC0x
LCBOVUxMLCAwLCAmc3RhdHVzKTsKKyAqIFxlbmRjb2RlCisgKiA8L3ByZT4KKyAqIFlvdSBjYW4g
dXNlIGEgRGF0ZUZvcm1hdCBBUEkgdWRhdF9wYXJzZSgpIHRvIHBhcnNlLgorICogPHByZT4KKyAq
IFxjb2RlCisgKiAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgKiAgaW50MzJf
dCBwYXJzZXBvcz0wOworICogIFVEYXRlIG15RGF0ZSA9IHVkYXRfcGFyc2UoZGYsIG15U3RyaW5n
LCB1X3N0cmxlbihteVN0cmluZyksICZwYXJzZXBvcywgJnN0YXR1cyk7CisgKiBcZW5kY29kZQor
ICogPC9wcmU+CisgKiAgWW91IGNhbiBwYXNzIGluIGRpZmZlcmVudCBvcHRpb25zIGZvciB0aGUg
YXJndW1lbnRzIGZvciBkYXRlIGFuZCB0aW1lIHN0eWxlCisgKiAgdG8gY29udHJvbCB0aGUgbGVu
Z3RoIG9mIHRoZSByZXN1bHQ7IGZyb20gU0hPUlQgdG8gTUVESVVNIHRvIExPTkcgdG8gRlVMTC4K
KyAqICBUaGUgZXhhY3QgcmVzdWx0IGRlcGVuZHMgb24gdGhlIGxvY2FsZSwgYnV0IGdlbmVyYWxs
eToKKyAqICBzZWUgVURhdGVGb3JtYXRTdHlsZSBmb3IgbW9yZSBkZXRhaWxzCisgKiA8dWwgdHlw
ZT1yb3VuZD4KKyAqICAgPGxpPiAgIFVEQVRfU0hPUlQgaXMgY29tcGxldGVseSBudW1lcmljLCBz
dWNoIGFzIDEyLzEzLzUyIG9yIDM6MzBwbQorICogICA8bGk+ICAgVURBVF9NRURJVU0gaXMgbG9u
Z2VyLCBzdWNoIGFzIEphbiAxMiwgMTk1MgorICogICA8bGk+ICAgVURBVF9MT05HIGlzIGxvbmdl
ciwgc3VjaCBhcyBKYW51YXJ5IDEyLCAxOTUyIG9yIDM6MzA6MzJwbQorICogICA8bGk+ICAgVURB
VF9GVUxMIGlzIHByZXR0eSBjb21wbGV0ZWx5IHNwZWNpZmllZCwgc3VjaCBhcworICogICAgICAg
ICAgVHVlc2RheSwgQXByaWwgMTIsIDE5NTIgQUQgb3IgMzozMDo0MnBtIFBTVC4KKyAqIDwvdWw+
CisgKiBZb3UgY2FuIGFsc28gc2V0IHRoZSB0aW1lIHpvbmUgb24gdGhlIGZvcm1hdCBpZiB5b3Ug
d2lzaC4KKyAqIDxQPgorICogWW91IGNhbiBhbHNvIHVzZSBmb3JtcyBvZiB0aGUgcGFyc2UgYW5k
IGZvcm1hdCBtZXRob2RzIHdpdGggUGFyc2UgUG9zaXRpb24gYW5kCisgKiBVRmllbGRQb3NpdGlv
biB0byBhbGxvdyB5b3UgdG8KKyAqIDx1bCB0eXBlPXJvdW5kPgorICogICA8bGk+ICAgUHJvZ3Jl
c3NpdmVseSBwYXJzZSB0aHJvdWdoIHBpZWNlcyBvZiBhIHN0cmluZy4KKyAqICAgPGxpPiAgIEFs
aWduIGFueSBwYXJ0aWN1bGFyIGZpZWxkLCBvciBmaW5kIG91dCB3aGVyZSBpdCBpcyBmb3Igc2Vs
ZWN0aW9uCisgKiAgICAgICAgICBvbiB0aGUgc2NyZWVuLgorICogPC91bD4KKyAqLworCisvKiog
QSBkYXRlIGZvcm1hdHRlci4KKyAqICBGb3IgdXNhZ2UgaW4gQyBwcm9ncmFtcy4KKyAqICBAc3Rh
YmxlIElDVSAyLjYKKyAqLwordHlwZWRlZiB2b2lkKiBVRGF0ZUZvcm1hdDsKKworLyoqIFRoZSBw
b3NzaWJsZSBkYXRlL3RpbWUgZm9ybWF0IHN0eWxlcyAKKyAqICBAc3RhYmxlIElDVSAyLjYKKyAq
LwordHlwZWRlZiBlbnVtIFVEYXRlRm9ybWF0U3R5bGUgeworICAgIC8qKiBGdWxsIHN0eWxlICov
CisgICAgVURBVF9GVUxMLAorICAgIC8qKiBMb25nIHN0eWxlICovCisgICAgVURBVF9MT05HLAor
ICAgIC8qKiBNZWRpdW0gc3R5bGUgKi8KKyAgICBVREFUX01FRElVTSwKKyAgICAvKiogU2hvcnQg
c3R5bGUgKi8KKyAgICBVREFUX1NIT1JULAorICAgIC8qKiBEZWZhdWx0IHN0eWxlICovCisgICAg
VURBVF9ERUZBVUxUID0gVURBVF9NRURJVU0sCisKKyAgICAvKiogQml0ZmllbGQgZm9yIHJlbGF0
aXZlIGRhdGUgKi8KKyAgICBVREFUX1JFTEFUSVZFID0gKDEgPDwgNyksCisgICAgCisgICAgVURB
VF9GVUxMX1JFTEFUSVZFID0gVURBVF9GVUxMIHwgVURBVF9SRUxBVElWRSwKKyAgICAgICAgCisg
ICAgVURBVF9MT05HX1JFTEFUSVZFID0gVURBVF9MT05HIHwgVURBVF9SRUxBVElWRSwKKyAgICAK
KyAgICBVREFUX01FRElVTV9SRUxBVElWRSA9IFVEQVRfTUVESVVNIHwgVURBVF9SRUxBVElWRSwK
KyAgICAKKyAgICBVREFUX1NIT1JUX1JFTEFUSVZFID0gVURBVF9TSE9SVCB8IFVEQVRfUkVMQVRJ
VkUsCisgICAgCisgICAgCisgICAgLyoqIE5vIHN0eWxlICovCisgICAgVURBVF9OT05FID0gLTEs
CisgICAgLyoqIGZvciBpbnRlcm5hbCBBUEkgdXNlIG9ubHkgKi8KKyAgICBVREFUX0lHTk9SRSA9
IC0yCisKK30gVURhdGVGb3JtYXRTdHlsZTsKKworCisvKioKKyAqIEB7CisgKiBCZWxvdyBhcmUg
YSBzZXQgb2YgcHJlLWRlZmluZWQgc2tlbGV0b25zLgorICoKKyAqIDxQPgorICogQSBza2VsZXRv
biAKKyAqIDxvbD4KKyAqIDxsaT4KKyAqICAgIG9ubHkga2VlcHMgdGhlIGZpZWxkIHBhdHRlcm4g
bGV0dGVyIGFuZCBpZ25vcmVzIGFsbCBvdGhlciBwYXJ0cyAKKyAqICAgIGluIGEgcGF0dGVybiwg
c3VjaCBhcyBzcGFjZSwgcHVuY3R1YXRpb25zLCBhbmQgc3RyaW5nIGxpdGVyYWxzLgorICogPC9s
aT4KKyAqIDxsaT4KKyAqICAgIGhpZGVzIHRoZSBvcmRlciBvZiBmaWVsZHMuIAorICogPC9saT4K
KyAqIDxsaT4KKyAqICAgIG1pZ2h0IGhpZGUgYSBmaWVsZCdzIHBhdHRlcm4gbGV0dGVyIGxlbmd0
aC4KKyAqCisgKiAgICBGb3IgdGhvc2Ugbm9uLWRpZ2l0IGNhbGVuZGFyIGZpZWxkcywgdGhlIHBh
dHRlcm4gbGV0dGVyIGxlbmd0aCBpcyAKKyAqICAgIGltcG9ydGFudCwgc3VjaCBhcyBNTU0sIE1N
TU0sIGFuZCBNTU1NTTsgRUVFIGFuZCBFRUVFLCAKKyAqICAgIGFuZCB0aGUgZmllbGQncyBwYXR0
ZXJuIGxldHRlciBsZW5ndGggaXMgaG9ub3JlZC4KKyAqICAgIAorICogICAgRm9yIHRoZSBkaWdp
dCBjYWxlbmRhciBmaWVsZHMsICBzdWNoIGFzIE0gb3IgTU0sIGQgb3IgZGQsIHl5IG9yIHl5eXks
IAorICogICAgdGhlIGZpZWxkIHBhdHRlcm4gbGVuZ3RoIGlzIGlnbm9yZWQgYW5kIHRoZSBiZXN0
IG1hdGNoLCB3aGljaCBpcyBkZWZpbmVkIAorICogICAgaW4gZGF0ZSB0aW1lIHBhdHRlcm5zLCB3
aWxsIGJlIHJldHVybmVkIHdpdGhvdXQgaG9ub3IgdGhlIGZpZWxkIHBhdHRlcm4KKyAqICAgIGxl
dHRlciBsZW5ndGggaW4gc2tlbGV0b24uCisgKiA8L2xpPgorICogPC9vbD4KKyAqCisgKiBAc3Rh
YmxlIElDVSA0LjAKKyAqLworCisjZGVmaW5lIFVEQVRfTUlOVVRFX1NFQ09ORCAgICAgICAgICAg
ICAgIm1zIgorI2RlZmluZSBVREFUX0hPVVIyNF9NSU5VVEUgICAgICAgICAgICAgICJIbSIKKyNk
ZWZpbmUgVURBVF9IT1VSMjRfTUlOVVRFX1NFQ09ORCAgICAgICAiSG1zIiAgICAgIAorI2RlZmlu
ZSBVREFUX0hPVVJfTUlOVVRFX1NFQ09ORCAgICAgICAgICJobXMiCisjZGVmaW5lIFVEQVRfU1RB
TkRBTE9ORV9NT05USCAgICAgICAgICAgIkxMTEwiCisjZGVmaW5lIFVEQVRfQUJCUl9TVEFOREFM
T05FX01PTlRIICAgICAgIkxMTCIKKyNkZWZpbmUgVURBVF9ZRUFSX1FVQVJURVIgICAgICAgICAg
ICAgICAieVFRUSIKKyNkZWZpbmUgVURBVF9ZRUFSX0FCQlJfUVVBUlRFUiAgICAgICAgICAieVEi
CisKKy8qKiBAfSAqLworCisvKioKKyAqIEB7CisgKiBCZWxvdyBhcmUgYSBzZXQgb2YgcHJlLWRl
ZmluZWQgc2tlbGV0b25zIHRoYXQgCisgKiBoYXZlIHByZS1kZWZpbmVkIGludGVydmFsIHBhdHRl
cm5zIGluIHJlc291cmNlIGZpbGVzLgorICogVXNlcnMgYXJlIGVuY291cmFnZWQgdG8gdXNlIHRo
ZW0gaW4gZGF0ZSBpbnRlcnZhbCBmb3JtYXQgZmFjdG9yeSBtZXRob2RzLgorICogCisgKiBAc3Rh
YmxlIElDVSA0LjAKKyAqLworI2RlZmluZSBVREFUX0hPVVJfTUlOVVRFICAgICAgICAgICAgICAg
ICJobSIKKyNkZWZpbmUgVURBVF9ZRUFSICAgICAgICAgICAgICAgICAgICAgICAieSIKKyNkZWZp
bmUgVURBVF9EQVkgICAgICAgICAgICAgICAgICAgICAgICAiZCIKKyNkZWZpbmUgVURBVF9OVU1f
TU9OVEhfV0VFS0RBWV9EQVkgICAgICAiTUVkIgorI2RlZmluZSBVREFUX1lFQVJfTlVNX01PTlRI
ICAgICAgICAgICAgICJ5TSIgICAgICAgICAgICAgIAorI2RlZmluZSBVREFUX05VTV9NT05USF9E
QVkgICAgICAgICAgICAgICJNZCIKKyNkZWZpbmUgVURBVF9ZRUFSX05VTV9NT05USF9XRUVLREFZ
X0RBWSAieU1FZCIKKyNkZWZpbmUgVURBVF9BQkJSX01PTlRIX1dFRUtEQVlfREFZICAgICAiTU1N
RWQiCisjZGVmaW5lIFVEQVRfWUVBUl9NT05USCAgICAgICAgICAgICAgICAgInlNTU1NIgorI2Rl
ZmluZSBVREFUX1lFQVJfQUJCUl9NT05USCAgICAgICAgICAgICJ5TU1NIgorI2RlZmluZSBVREFU
X01PTlRIX0RBWSAgICAgICAgICAgICAgICAgICJNTU1NZCIKKyNkZWZpbmUgVURBVF9BQkJSX01P
TlRIX0RBWSAgICAgICAgICAgICAiTU1NZCIgCisjZGVmaW5lIFVEQVRfTU9OVEhfV0VFS0RBWV9E
QVkgICAgICAgICAgIk1NTU1FRUVFZCIKKyNkZWZpbmUgVURBVF9ZRUFSX0FCQlJfTU9OVEhfV0VF
S0RBWV9EQVkgInlNTU1FZCIgCisjZGVmaW5lIFVEQVRfWUVBUl9NT05USF9XRUVLREFZX0RBWSAg
ICAgInlNTU1NRUVFRWQiCisjZGVmaW5lIFVEQVRfWUVBUl9NT05USF9EQVkgICAgICAgICAgICAg
InlNTU1NZCIKKyNkZWZpbmUgVURBVF9ZRUFSX0FCQlJfTU9OVEhfREFZICAgICAgICAieU1NTWQi
CisjZGVmaW5lIFVEQVRfWUVBUl9OVU1fTU9OVEhfREFZICAgICAgICAgInlNZCIKKyNkZWZpbmUg
VURBVF9OVU1fTU9OVEggICAgICAgICAgICAgICAgICAiTSIKKyNkZWZpbmUgVURBVF9BQkJSX01P
TlRIICAgICAgICAgICAgICAgICAiTU1NIgorI2RlZmluZSBVREFUX01PTlRIICAgICAgICAgICAg
ICAgICAgICAgICJNTU1NIgorI2RlZmluZSBVREFUX0hPVVJfTUlOVVRFX0dFTkVSSUNfVFogICAg
ICJobXYiCisjZGVmaW5lIFVEQVRfSE9VUl9NSU5VVEVfVFogICAgICAgICAgICAgImhteiIKKyNk
ZWZpbmUgVURBVF9IT1VSICAgICAgICAgICAgICAgICAgICAgICAiaCIKKyNkZWZpbmUgVURBVF9I
T1VSX0dFTkVSSUNfVFogICAgICAgICAgICAiaHYiCisjZGVmaW5lIFVEQVRfSE9VUl9UWiAgICAg
ICAgICAgICAgICAgICAgImh6IgorCisvKiogQH0gKi8KKworCisvKioKKyAqIEZpZWxkUG9zaXRp
b24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9ycyBmb3IgZm9ybWF0IGZpZWxkcworICogZGVm
aW5lZCBieSBEYXRlRm9ybWF0IGFuZCBVRGF0ZUZvcm1hdC4KKyAqIEBzdGFibGUgSUNVIDMuMAor
ICovCit0eXBlZGVmIGVudW0gVURhdGVGb3JtYXRGaWVsZCB7CisgICAgLyoqCisgICAgICogRmll
bGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdHJyBmaWVsZCBhbGln
bm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9FUkEgZmllbGQuCisgICAg
ICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9FUkFfRklFTEQgPSAwLAorCisg
ICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3Ig
Zm9yICd5JyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNB
TF9ZRUFSIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRf
WUVBUl9GSUVMRCA9IDEsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmll
bGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ00nIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3Jy
ZXNwb25kaW5nIHRvIHRoZSBVQ0FMX01PTlRIIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMu
MAorICAgICAqLworICAgIFVEQVRfTU9OVEhfRklFTEQgPSAyLAorCisgICAgLyoqCisgICAgICog
RmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdkJyBmaWVsZCBh
bGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9EQVRFIGZpZWxkLgor
ICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfREFURV9GSUVMRCA9IDMs
CisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxl
Y3RvciBmb3IgJ2snIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRo
ZSBVQ0FMX0hPVVJfT0ZfREFZIGZpZWxkLgorICAgICAqIFVEQVRfSE9VUl9PRl9EQVkxX0ZJRUxE
IGlzIHVzZWQgZm9yIHRoZSBvbmUtYmFzZWQgMjQtaG91ciBjbG9jay4KKyAgICAgKiBGb3IgZXhh
bXBsZSwgMjM6NTkgKyAwMTowMCByZXN1bHRzIGluIDI0OjU5LgorICAgICAqIEBzdGFibGUgSUNV
IDMuMAorICAgICAqLworICAgIFVEQVRfSE9VUl9PRl9EQVkxX0ZJRUxEID0gNCwKKworICAgIC8q
KgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAn
SCcgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfSE9V
Ul9PRl9EQVkgZmllbGQuCisgICAgICogVURBVF9IT1VSX09GX0RBWTBfRklFTEQgaXMgdXNlZCBm
b3IgdGhlIHplcm8tYmFzZWQgMjQtaG91ciBjbG9jay4KKyAgICAgKiBGb3IgZXhhbXBsZSwgMjM6
NTkgKyAwMTowMCByZXN1bHRzIGluIDAwOjU5LgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAg
ICAqLworICAgIFVEQVRfSE9VUl9PRl9EQVkwX0ZJRUxEID0gNSwKKworICAgIC8qKgorICAgICAq
IEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnbScgZmllbGQg
YWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfTUlOVVRFIGZpZWxk
LgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfTUlOVVRFX0ZJRUxE
ID0gNiwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9u
IHNlbGVjdG9yIGZvciAncycgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcg
dG8gdGhlIFVDQUxfU0VDT05EIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAq
LworICAgIFVEQVRfU0VDT05EX0ZJRUxEID0gNywKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9z
aXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnUycgZmllbGQgYWxpZ25tZW50
LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfTUlMTElTRUNPTkQgZmllbGQuCisg
ICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9GUkFDVElPTkFMX1NFQ09O
RF9GSUVMRCA9IDgsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQ
b3NpdGlvbiBzZWxlY3RvciBmb3IgJ0UnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNw
b25kaW5nIHRvIHRoZSBVQ0FMX0RBWV9PRl9XRUVLIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNV
IDMuMAorICAgICAqLworICAgIFVEQVRfREFZX09GX1dFRUtfRklFTEQgPSA5LAorCisgICAgLyoq
CisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdE
JyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9EQVlf
T0ZfWUVBUiBmaWVsZC4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFU
X0RBWV9PRl9ZRUFSX0ZJRUxEID0gMTAsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9u
IGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ0YnIGZpZWxkIGFsaWdubWVudCwKKyAg
ICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRIIGZpZWxk
LgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfREFZX09GX1dFRUtf
SU5fTU9OVEhfRklFTEQgPSAxMSwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5k
IFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAndycgZmllbGQgYWxpZ25tZW50LAorICAgICAq
IGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfV0VFS19PRl9ZRUFSIGZpZWxkLgorICAgICAqIEBz
dGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfV0VFS19PRl9ZRUFSX0ZJRUxEID0gMTIs
CisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxl
Y3RvciBmb3IgJ1cnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRo
ZSBVQ0FMX1dFRUtfT0ZfTU9OVEggZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAg
ICovCisgICAgVURBVF9XRUVLX09GX01PTlRIX0ZJRUxEID0gMTMsCisKKyAgICAvKioKKyAgICAg
KiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ2EnIGZpZWxk
IGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0FNX1BNIGZpZWxk
LgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfQU1fUE1fRklFTEQg
PSAxNCwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9u
IHNlbGVjdG9yIGZvciAnaCcgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcg
dG8gdGhlIFVDQUxfSE9VUiBmaWVsZC4KKyAgICAgKiBVREFUX0hPVVIxX0ZJRUxEIGlzIHVzZWQg
Zm9yIHRoZSBvbmUtYmFzZWQgMTItaG91ciBjbG9jay4KKyAgICAgKiBGb3IgZXhhbXBsZSwgMTE6
MzAgUE0gKyAxIGhvdXIgcmVzdWx0cyBpbiAxMjozMCBBTS4KKyAgICAgKiBAc3RhYmxlIElDVSAz
LjAKKyAgICAgKi8KKyAgICBVREFUX0hPVVIxX0ZJRUxEID0gMTUsCisKKyAgICAvKioKKyAgICAg
KiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ0snIGZpZWxk
IGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0hPVVIgZmllbGQu
CisgICAgICogVURBVF9IT1VSMF9GSUVMRCBpcyB1c2VkIGZvciB0aGUgemVyby1iYXNlZCAxMi1o
b3VyIGNsb2NrLgorICAgICAqIEZvciBleGFtcGxlLCAxMTozMCBQTSArIDEgaG91ciByZXN1bHRz
IGluIDAwOjMwIEFNLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRf
SE9VUjBfRklFTEQgPSAxNiwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVG
aWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAneicgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNv
cnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfWk9ORV9PRkZTRVQgYW5kCisgICAgICogVUNBTF9EU1Rf
T0ZGU0VUIGZpZWxkcy4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFU
X1RJTUVaT05FX0ZJRUxEID0gMTcsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFu
ZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ1knIGZpZWxkIGFsaWdubWVudCwKKyAgICAg
KiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX1lFQVJfV09ZIGZpZWxkLgorICAgICAqIEBzdGFi
bGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfWUVBUl9XT1lfRklFTEQgPSAxOCwKKworICAg
IC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZv
ciAnZScgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxf
RE9XX0xPQ0FMIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVE
QVRfRE9XX0xPQ0FMX0ZJRUxEID0gMTksCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9u
IGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ3UnIGZpZWxkIGFsaWdubWVudCwKKyAg
ICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0VYVEVOREVEX1lFQVIgZmllbGQuCisgICAg
ICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9FWFRFTkRFRF9ZRUFSX0ZJRUxE
ID0gMjAsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlv
biBzZWxlY3RvciBmb3IgJ2cnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5n
IHRvIHRoZSBVQ0FMX0pVTElBTl9EQVkgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisg
ICAgICovCisgICAgVURBVF9KVUxJQU5fREFZX0ZJRUxEID0gMjEsCisKKyAgICAvKioKKyAgICAg
KiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ0EnIGZpZWxk
IGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX01JTExJU0VDT05E
U19JTl9EQVkgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURB
VF9NSUxMSVNFQ09ORFNfSU5fREFZX0ZJRUxEID0gMjIsCisKKyAgICAvKioKKyAgICAgKiBGaWVs
ZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ1onIGZpZWxkIGFsaWdu
bWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX1pPTkVfT0ZGU0VUIGFuZAor
ICAgICAqIFVDQUxfRFNUX09GRlNFVCBmaWVsZHMuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisg
ICAgICovCisgICAgVURBVF9USU1FWk9ORV9SRkNfRklFTEQgPSAyMywKKworICAgIC8qKgorICAg
ICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAndicgZmll
bGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfWk9ORV9PRkZT
RVQgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy40CisgICAgICovCisgICAgVURBVF9USU1F
Wk9ORV9HRU5FUklDX0ZJRUxEID0gMjQsCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBz
ZWxlY3RvciBmb3IgJ2MnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRv
IHRoZSB7QGxpbmsgI1VDQUxfRE9XX0xPQ0FMfSBmaWVsZC4KKyAgICAgKiBUaGlzIGRpc3BsYXlz
IHRoZSBzdGFuZCBhbG9uZSBkYXkgbmFtZSwgaWYgYXZhaWxhYmxlLgorICAgICAqIEBzdGFibGUg
SUNVIDMuNAorICAgICAqLworICAgIFVEQVRfU1RBTkRBTE9ORV9EQVlfRklFTEQgPSAyNSwKKwor
ICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdMJyBmaWVsZCBhbGln
bm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byB0aGUge0BsaW5rICNVQ0FMX01PTlRIfSBm
aWVsZC4KKyAgICAgKiBUaGlzIGRpc3BsYXlzIHRoZSBzdGFuZCBhbG9uZSBtb250aCBuYW1lLCBp
ZiBhdmFpbGFibGUuCisgICAgICogQHN0YWJsZSBJQ1UgMy40CisgICAgICovCisgICAgVURBVF9T
VEFOREFMT05FX01PTlRIX0ZJRUxEID0gMjYsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0
aW9uIHNlbGVjdG9yIGZvciAiUSIgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRp
bmcgdG8gcXVhcnRlcnMuIFRoaXMgaXMgaW1wbGVtZW50ZWQKKyAgICAgKiB1c2luZyB0aGUge0Bs
aW5rICNVQ0FMX01PTlRIfSBmaWVsZC4gVGhpcworICAgICAqIGRpc3BsYXlzIHRoZSBxdWFydGVy
LgorICAgICAqIEBzdGFibGUgSUNVIDMuNgorICAgICAqLworICAgIFVEQVRfUVVBUlRFUl9GSUVM
RCA9IDI3LAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgdGhl
ICJxIiBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGluZyB0byBzdGFuZC1hbG9u
ZSBxdWFydGVycy4gVGhpcyBpcworICAgICAqIGltcGxlbWVudGVkIHVzaW5nIHRoZSB7QGxpbmsg
I1VDQUxfTU9OVEh9IGZpZWxkLgorICAgICAqIFRoaXMgZGlzcGxheXMgdGhlIHN0YW5kLWFsb25l
IHF1YXJ0ZXIuCisgICAgICogQHN0YWJsZSBJQ1UgMy42CisgICAgICovCisgICAgVURBVF9TVEFO
REFMT05FX1FVQVJURVJfRklFTEQgPSAyOCwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRp
b24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnVicgZmllbGQgYWxpZ25tZW50LAor
ICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfWk9ORV9PRkZTRVQgZmllbGQuCisgICAg
ICogQHN0YWJsZSBJQ1UgMy44CisgICAgICovCisgICAgVURBVF9USU1FWk9ORV9TUEVDSUFMX0ZJ
RUxEID0gMjksCisKKyAgIC8qKgorICAgICAqIE51bWJlciBvZiBGaWVsZFBvc2l0aW9uIGFuZCBV
RmllbGRQb3NpdGlvbiBzZWxlY3RvcnMgZm9yCisgICAgICogRGF0ZUZvcm1hdCBhbmQgVURhdGVG
b3JtYXQuCisgICAgICogVmFsaWQgc2VsZWN0b3JzIHJhbmdlIGZyb20gMCB0byBVREFUX0ZJRUxE
X0NPVU5ULTEuCisgICAgICogVGhpcyB2YWx1ZSBpcyBzdWJqZWN0IHRvIGNoYW5nZSBpZiBuZXcg
ZmllbGRzIGFyZSBkZWZpbmVkCisgICAgICogaW4gdGhlIGZ1dHVyZS4KKyAgICAgKiBAc3RhYmxl
IElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFUX0ZJRUxEX0NPVU5UID0gMzAKKworfSBVRGF0ZUZv
cm1hdEZpZWxkOworCisKKy8qKgorICogTWFwcyBmcm9tIGEgVURhdGVGb3JtYXRGaWVsZCB0byB0
aGUgY29ycmVzcG9uZGluZyBVQ2FsZW5kYXJEYXRlRmllbGRzLgorICogTm90ZTogc2luY2UgdGhl
IG1hcHBpbmcgaXMgbWFueS10by1vbmUsIHRoZXJlIGlzIG5vIGludmVyc2UgbWFwcGluZy4KKyAq
IEBwYXJhbSBmaWVsZCB0aGUgVURhdGVGb3JtYXRGaWVsZC4KKyAqIEByZXR1cm4gdGhlIFVDYWxl
bmRhckRhdGVGaWVsZC4gIFRoaXMgd2lsbCBiZSBVQ0FMX0ZJRUxEX0NPVU5UIGluIGNhc2UKKyAq
IG9mIGVycm9yIChlLmcuLCB0aGUgaW5wdXQgZmllbGQgaXMgVURBVF9GSUVMRF9DT1VOVCkuCisg
KiBAc3RhYmxlIElDVSA0LjQKKyAqLworVV9TVEFCTEUgVUNhbGVuZGFyRGF0ZUZpZWxkcyBVX0VY
UE9SVDIKK3VkYXRfdG9DYWxlbmRhckRhdGVGaWVsZChVRGF0ZUZvcm1hdEZpZWxkIGZpZWxkKTsK
KworCisvKioKKyAqIE9wZW4gYSBuZXcgVURhdGVGb3JtYXQgZm9yIGZvcm1hdHRpbmcgYW5kIHBh
cnNpbmcgZGF0ZXMgYW5kIHRpbWVzLgorICogQSBVRGF0ZUZvcm1hdCBtYXkgYmUgdXNlZCB0byBm
b3JtYXQgZGF0ZXMgaW4gY2FsbHMgdG8ge0BsaW5rICN1ZGF0X2Zvcm1hdCB9LAorICogYW5kIHRv
IHBhcnNlIGRhdGVzIGluIGNhbGxzIHRvIHtAbGluayAjdWRhdF9wYXJzZSB9LgorICogQHBhcmFt
IHRpbWVTdHlsZSBUaGUgc3R5bGUgdXNlZCB0byBmb3JtYXQgdGltZXM7IG9uZSBvZiBVREFUX0ZV
TEwsIFVEQVRfTE9ORywKKyAqIFVEQVRfTUVESVVNLCBVREFUX1NIT1JULCBVREFUX0RFRkFVTFQs
IG9yIFVEQVRfTk9ORSAocmVsYXRpdmUgdGltZSBzdHlsZXMKKyAqIGFyZSBub3QgY3VycmVudGx5
IHN1cHBvcnRlZCkKKyAqIEBwYXJhbSBkYXRlU3R5bGUgVGhlIHN0eWxlIHVzZWQgdG8gZm9ybWF0
IGRhdGVzOyBvbmUgb2YgVURBVF9GVUxMLCBVREFUX0xPTkcsCisgKiBVREFUX01FRElVTSwgVURB
VF9TSE9SVCwgVURBVF9ERUZBVUxULCBVREFUX0ZVTExfUkVMQVRJVkUsIFVEQVRfTE9OR19SRUxB
VElWRSwKKyAqIFVEQVRfTUVESVVNX1JFTEFUSVZFLCBVREFUX1NIT1JUX1JFTEFUSVZFLCBvciBV
REFUX05PTkUKKyAqIEBwYXJhbSBsb2NhbGUgVGhlIGxvY2FsZSBzcGVjaWZ5aW5nIHRoZSBmb3Jt
YXR0aW5nIGNvbnZlbnRpb25zCisgKiBAcGFyYW0gdHpJRCBBIHRpbWV6b25lIElEIHNwZWNpZnlp
bmcgdGhlIHRpbWV6b25lIHRvIHVzZS4gIElmIDAsIHVzZQorICogdGhlIGRlZmF1bHQgdGltZXpv
bmUuCisgKiBAcGFyYW0gdHpJRExlbmd0aCBUaGUgbGVuZ3RoIG9mIHR6SUQsIG9yIC0xIGlmIG51
bGwtdGVybWluYXRlZC4KKyAqIEBwYXJhbSBwYXR0ZXJuIEEgcGF0dGVybiBzcGVjaWZ5aW5nIHRo
ZSBmb3JtYXQgdG8gdXNlLgorICogQHBhcmFtIHBhdHRlcm5MZW5ndGggVGhlIG51bWJlciBvZiBj
aGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuLCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisgKiBA
cGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVy
cm9ycworICogQHJldHVybiBBIHBvaW50ZXIgdG8gYSBVRGF0ZUZvcm1hdCB0byB1c2UgZm9yIGZv
cm1hdHRpbmcgZGF0ZXMgYW5kIHRpbWVzLCBvciAwIGlmCisgKiBhbiBlcnJvciBvY2N1cnJlZC4K
KyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBVRGF0ZUZvcm1hdCogVV9FWFBPUlQy
IAordWRhdF9vcGVuKFVEYXRlRm9ybWF0U3R5bGUgIHRpbWVTdHlsZSwKKyAgICAgICAgICBVRGF0
ZUZvcm1hdFN0eWxlICBkYXRlU3R5bGUsCisgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgKmxv
Y2FsZSwKKyAgICAgICAgICBjb25zdCBVQ2hhciAgICAgICAqdHpJRCwKKyAgICAgICAgICBpbnQz
Ml90ICAgICAgICAgICB0eklETGVuZ3RoLAorICAgICAgICAgIGNvbnN0IFVDaGFyICAgICAgICpw
YXR0ZXJuLAorICAgICAgICAgIGludDMyX3QgICAgICAgICAgIHBhdHRlcm5MZW5ndGgsCisgICAg
ICAgICAgVUVycm9yQ29kZSAgICAgICAgKnN0YXR1cyk7CisKKworLyoqCisqIENsb3NlIGEgVURh
dGVGb3JtYXQuCisqIE9uY2UgY2xvc2VkLCBhIFVEYXRlRm9ybWF0IG1heSBubyBsb25nZXIgYmUg
dXNlZC4KKyogQHBhcmFtIGZvcm1hdCBUaGUgZm9ybWF0dGVyIHRvIGNsb3NlLgorKiBAc3RhYmxl
IElDVSAyLjAKKyovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VkYXRfY2xvc2UoVURhdGVG
b3JtYXQqIGZvcm1hdCk7CisKKyNpZiBVX1NIT1dfQ1BMVVNQTFVTX0FQSQorCitVX05BTUVTUEFD
RV9CRUdJTgorCisvKioKKyAqIFxjbGFzcyBMb2NhbFVEYXRlRm9ybWF0UG9pbnRlcgorICogIlNt
YXJ0IHBvaW50ZXIiIGNsYXNzLCBjbG9zZXMgYSBVRGF0ZUZvcm1hdCB2aWEgdWRhdF9jbG9zZSgp
LgorICogRm9yIG1vc3QgbWV0aG9kcyBzZWUgdGhlIExvY2FsUG9pbnRlckJhc2UgYmFzZSBjbGFz
cy4KKyAqCisgKiBAc2VlIExvY2FsUG9pbnRlckJhc2UKKyAqIEBzZWUgTG9jYWxQb2ludGVyCisg
KiBAc3RhYmxlIElDVSA0LjQKKyAqLworVV9ERUZJTkVfTE9DQUxfT1BFTl9QT0lOVEVSKExvY2Fs
VURhdGVGb3JtYXRQb2ludGVyLCBVRGF0ZUZvcm1hdCwgdWRhdF9jbG9zZSk7CisKK1VfTkFNRVNQ
QUNFX0VORAorCisjZW5kaWYKKworLyoqCisgKiBPcGVuIGEgY29weSBvZiBhIFVEYXRlRm9ybWF0
LgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhIGRlZXAgY29weS4KKyAqIEBwYXJhbSBmbXQg
VGhlIGZvcm1hdCB0byBjb3B5CisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJy
b3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycy4KKyAqIEByZXR1cm4gQSBwb2ludGVyIHRvIGEg
VURhdGVGb3JtYXQgaWRlbnRpY2FsIHRvIGZtdC4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitV
X1NUQUJMRSBVRGF0ZUZvcm1hdCogVV9FWFBPUlQyIAordWRhdF9jbG9uZShjb25zdCBVRGF0ZUZv
cm1hdCAqZm10LAorICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKy8qKgorKiBGb3JtYXQg
YSBkYXRlIHVzaW5nIGFuIFVEYXRlRm9ybWF0LgorKiBUaGUgZGF0ZSB3aWxsIGJlIGZvcm1hdHRl
ZCB1c2luZyB0aGUgY29udmVudGlvbnMgc3BlY2lmaWVkIGluIHtAbGluayAjdWRhdF9vcGVuIH0K
KyogQHBhcmFtIGZvcm1hdCBUaGUgZm9ybWF0dGVyIHRvIHVzZQorKiBAcGFyYW0gZGF0ZVRvRm9y
bWF0IFRoZSBkYXRlIHRvIGZvcm1hdAorKiBAcGFyYW0gcmVzdWx0IEEgcG9pbnRlciB0byBhIGJ1
ZmZlciB0byByZWNlaXZlIHRoZSBmb3JtYXR0ZWQgbnVtYmVyLgorKiBAcGFyYW0gcmVzdWx0TGVu
Z3RoIFRoZSBtYXhpbXVtIHNpemUgb2YgcmVzdWx0LgorKiBAcGFyYW0gcG9zaXRpb24gQSBwb2lu
dGVyIHRvIGEgVUZpZWxkUG9zaXRpb24uICBPbiBpbnB1dCwgcG9zaXRpb24tPmZpZWxkCisqIGlz
IHJlYWQuICBPbiBvdXRwdXQsIHBvc2l0aW9uLT5iZWdpbkluZGV4IGFuZCBwb3NpdGlvbi0+ZW5k
SW5kZXggaW5kaWNhdGUKKyogdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIGluZGljZXMgb2YgZmll
bGQgbnVtYmVyIHBvc2l0aW9uLT5maWVsZCwgaWYgc3VjaAorKiBhIGZpZWxkIGV4aXN0cy4gIFRo
aXMgcGFyYW1ldGVyIG1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIG5vIGZpZWxkCisqIHBvc2l0
aW9uIGRhdGEgaXMgcmV0dXJuZWQuCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVF
cnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZl
ciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3
YXMgdHJ1bmNhdGVkLgorKiBAc2VlIHVkYXRfcGFyc2UKKyogQHNlZSBVRmllbGRQb3NpdGlvbgor
KiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VkYXRf
Zm9ybWF0KCAgICBjb25zdCAgICBVRGF0ZUZvcm1hdCogICAgZm9ybWF0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgVURhdGUgICAgICAgICAgIGRhdGVUb0Zvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFVDaGFyKiAgICAgICAgICByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQzMl90ICAgICAgICAgcmVzdWx0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAg
VUZpZWxkUG9zaXRpb24qIHBvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9y
Q29kZSogICAgIHN0YXR1cyk7CisKKy8qKgorKiBQYXJzZSBhIHN0cmluZyBpbnRvIGFuIGRhdGUv
dGltZSB1c2luZyBhIFVEYXRlRm9ybWF0LgorKiBUaGUgZGF0ZSB3aWxsIGJlIHBhcnNlZCB1c2lu
ZyB0aGUgY29udmVudGlvbnMgc3BlY2lmaWVkIGluIHtAbGluayAjdWRhdF9vcGVuIH0KKyogQHBh
cmFtIGZvcm1hdCBUaGUgZm9ybWF0dGVyIHRvIHVzZS4KKyogQHBhcmFtIHRleHQgVGhlIHRleHQg
dG8gcGFyc2UuCisqIEBwYXJhbSB0ZXh0TGVuZ3RoIFRoZSBsZW5ndGggb2YgdGV4dCwgb3IgLTEg
aWYgbnVsbC10ZXJtaW5hdGVkLgorKiBAcGFyYW0gcGFyc2VQb3MgSWYgbm90IDAsIG9uIGlucHV0
IGEgcG9pbnRlciB0byBhbiBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlIG9mZnNldCBhdCB3aGljaAor
KiB0byBiZWdpbiBwYXJzaW5nLiAgSWYgbm90IDAsIG9uIG91dHB1dCB0aGUgb2Zmc2V0IGF0IHdo
aWNoIHBhcnNpbmcgZW5kZWQuCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJv
ckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHZhbHVlIG9mIHRoZSBw
YXJzZWQgZGF0ZS90aW1lCisqIEBzZWUgdWRhdF9mb3JtYXQKKyogQHN0YWJsZSBJQ1UgMi4wCisq
LworVV9TVEFCTEUgVURhdGUgVV9FWFBPUlQyIAordWRhdF9wYXJzZSggICAgY29uc3QgICAgVURh
dGVGb3JtYXQqICAgIGZvcm1hdCwKKyAgICAgICAgICAgIGNvbnN0ICAgIFVDaGFyKiAgICAgICAg
ICB0ZXh0LAorICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgdGV4dExlbmd0aCwK
KyAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICpwYXJzZVBvcywKKyAgICAgICAg
ICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICpzdGF0dXMpOworCisvKioKKyogUGFyc2UgYSBz
dHJpbmcgaW50byBhbiBkYXRlL3RpbWUgdXNpbmcgYSBVRGF0ZUZvcm1hdC4KKyogVGhlIGRhdGUg
d2lsbCBiZSBwYXJzZWQgdXNpbmcgdGhlIGNvbnZlbnRpb25zIHNwZWNpZmllZCBpbiB7QGxpbmsg
I3VkYXRfb3BlbiB9CisqIEBwYXJhbSBmb3JtYXQgVGhlIGZvcm1hdHRlciB0byB1c2UuCisqIEBw
YXJhbSBjYWxlbmRhciBUaGUgY2FsZW5kYXIgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHBhcnNlZCBk
YXRhLgorKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBwYXJzZS4KKyogQHBhcmFtIHRleHRMZW5n
dGggVGhlIGxlbmd0aCBvZiB0ZXh0LCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisqIEBwYXJh
bSBwYXJzZVBvcyBJZiBub3QgMCwgb24gaW5wdXQgYSBwb2ludGVyIHRvIGFuIGludGVnZXIgc3Bl
Y2lmeWluZyB0aGUgb2Zmc2V0IGF0IHdoaWNoCisqIHRvIGJlZ2luIHBhcnNpbmcuICBJZiBub3Qg
MCwgb24gb3V0cHV0IHRoZSBvZmZzZXQgYXQgd2hpY2ggcGFyc2luZyBlbmRlZC4KKyogQHBhcmFt
IHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMK
KyogQHNlZSB1ZGF0X2Zvcm1hdAorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2b2lk
IFVfRVhQT1JUMiAKK3VkYXRfcGFyc2VDYWxlbmRhcihjb25zdCAgICBVRGF0ZUZvcm1hdCogICAg
Zm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDYWxlbmRhciogICAgICBjYWxl
bmRhciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCAgICBVQ2hhciogICAgICAgICAgdGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgdGV4dExlbmd0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgKnBhcnNlUG9zLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgICAqc3RhdHVzKTsKKwor
LyoqCisqIERldGVybWluZSBpZiBhbiBVRGF0ZUZvcm1hdCB3aWxsIHBlcmZvcm0gbGVuaWVudCBw
YXJzaW5nLgorKiBXaXRoIGxlbmllbnQgcGFyc2luZywgdGhlIHBhcnNlciBtYXkgdXNlIGhldXJp
c3RpY3MgdG8gaW50ZXJwcmV0IGlucHV0cyB0aGF0IGRvIG5vdAorKiBwcmVjaXNlbHkgbWF0Y2gg
dGhlIHBhdHRlcm4uIFdpdGggc3RyaWN0IHBhcnNpbmcsIGlucHV0cyBtdXN0IG1hdGNoIHRoZSBw
YXR0ZXJuLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkKKyogQHJldHVybiBU
UlVFIGlmIGZtdCBpcyBzZXQgdG8gcGVyZm9ybSBsZW5pZW50IHBhcnNpbmcsIEZBTFNFIG90aGVy
d2lzZS4KKyogQHNlZSB1ZGF0X3NldExlbmllbnQKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9T
VEFCTEUgVUJvb2wgVV9FWFBPUlQyIAordWRhdF9pc0xlbmllbnQoY29uc3QgVURhdGVGb3JtYXQq
IGZtdCk7CisKKy8qKgorKiBTcGVjaWZ5IHdoZXRoZXIgYW4gVURhdGVGb3JtYXQgd2lsbCBwZXJm
b3JtIGxlbmllbnQgcGFyc2luZy4KKyogV2l0aCBsZW5pZW50IHBhcnNpbmcsIHRoZSBwYXJzZXIg
bWF5IHVzZSBoZXVyaXN0aWNzIHRvIGludGVycHJldCBpbnB1dHMgdGhhdCBkbyBub3QKKyogcHJl
Y2lzZWx5IG1hdGNoIHRoZSBwYXR0ZXJuLiBXaXRoIHN0cmljdCBwYXJzaW5nLCBpbnB1dHMgbXVz
dCBtYXRjaCB0aGUgcGF0dGVybi4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHNldAor
KiBAcGFyYW0gaXNMZW5pZW50IFRSVUUgaWYgZm10IHNob3VsZCBwZXJmb3JtIGxlbmllbnQgcGFy
c2luZywgRkFMU0Ugb3RoZXJ3aXNlLgorKiBAc2VlIGRhdF9pc0xlbmllbnQKKyogQHN0YWJsZSBJ
Q1UgMi4wCisqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1ZGF0X3NldExlbmllbnQoICAg
IFVEYXRlRm9ybWF0KiAgICBmbXQsCisgICAgICAgICAgICAgICAgICAgIFVCb29sICAgICAgICAg
IGlzTGVuaWVudCk7CisKKy8qKgorKiBHZXQgdGhlIFVDYWxlbmRhciBhc3NvY2lhdGVkIHdpdGgg
YW4gVURhdGVGb3JtYXQuCisqIEEgVURhdGVGb3JtYXQgdXNlcyBhIFVDYWxlbmRhciB0byBjb252
ZXJ0IGEgcmF3IHZhbHVlIHRvLCBmb3IgZXhhbXBsZSwKKyogdGhlIGRheSBvZiB0aGUgd2Vlay4K
KyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHF1ZXJ5LgorKiBAcmV0dXJuIEEgcG9pbnRl
ciB0byB0aGUgVUNhbGVuZGFyIHVzZWQgYnkgZm10LgorKiBAc2VlIHVkYXRfc2V0Q2FsZW5kYXIK
KyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgY29uc3QgVUNhbGVuZGFyKiBVX0VYUE9S
VDIgCit1ZGF0X2dldENhbGVuZGFyKGNvbnN0IFVEYXRlRm9ybWF0KiBmbXQpOworCisvKioKKyog
U2V0IHRoZSBVQ2FsZW5kYXIgYXNzb2NpYXRlZCB3aXRoIGFuIFVEYXRlRm9ybWF0LgorKiBBIFVE
YXRlRm9ybWF0IHVzZXMgYSBVQ2FsZW5kYXIgdG8gY29udmVydCBhIHJhdyB2YWx1ZSB0bywgZm9y
IGV4YW1wbGUsCisqIHRoZSBkYXkgb2YgdGhlIHdlZWsuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1h
dHRlciB0byBzZXQuCisqIEBwYXJhbSBjYWxlbmRhclRvU2V0IEEgcG9pbnRlciB0byBhbiBVQ2Fs
ZW5kYXIgdG8gYmUgdXNlZCBieSBmbXQuCisqIEBzZWUgdWRhdF9zZXRDYWxlbmRhcgorKiBAc3Rh
YmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VkYXRfc2V0Q2FsZW5k
YXIoICAgICAgICAgICAgVURhdGVGb3JtYXQqICAgIGZtdCwKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3QgICBVQ2FsZW5kYXIqICAgICAgY2FsZW5kYXJUb1NldCk7CisKKy8qKgorKiBHZXQgdGhl
IFVOdW1iZXJGb3JtYXQgYXNzb2NpYXRlZCB3aXRoIGFuIFVEYXRlRm9ybWF0LgorKiBBIFVEYXRl
Rm9ybWF0IHVzZXMgYSBVTnVtYmVyRm9ybWF0IHRvIGZvcm1hdCBudW1iZXJzIHdpdGhpbiBhIGRh
dGUsCisqIGZvciBleGFtcGxlIHRoZSBkYXkgbnVtYmVyLgorKiBAcGFyYW0gZm10IFRoZSBmb3Jt
YXR0ZXIgdG8gcXVlcnkuCisqIEByZXR1cm4gQSBwb2ludGVyIHRvIHRoZSBVTnVtYmVyRm9ybWF0
IHVzZWQgYnkgZm10IHRvIGZvcm1hdCBudW1iZXJzLgorKiBAc2VlIHVkYXRfc2V0TnVtYmVyRm9y
bWF0CisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGNvbnN0IFVOdW1iZXJGb3JtYXQq
IFVfRVhQT1JUMiAKK3VkYXRfZ2V0TnVtYmVyRm9ybWF0KGNvbnN0IFVEYXRlRm9ybWF0KiBmbXQp
OworCisvKioKKyogU2V0IHRoZSBVTnVtYmVyRm9ybWF0IGFzc29jaWF0ZWQgd2l0aCBhbiBVRGF0
ZUZvcm1hdC4KKyogQSBVRGF0ZUZvcm1hdCB1c2VzIGEgVU51bWJlckZvcm1hdCB0byBmb3JtYXQg
bnVtYmVycyB3aXRoaW4gYSBkYXRlLAorKiBmb3IgZXhhbXBsZSB0aGUgZGF5IG51bWJlci4KKyog
QHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHNldC4KKyogQHBhcmFtIG51bWJlckZvcm1hdFRv
U2V0IEEgcG9pbnRlciB0byB0aGUgVU51bWJlckZvcm1hdCB0byBiZSB1c2VkIGJ5IGZtdCB0byBm
b3JtYXQgbnVtYmVycy4KKyogQHNlZSB1ZGF0X2dldE51bWJlckZvcm1hdAorKiBAc3RhYmxlIElD
VSAyLjAKKyovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VkYXRfc2V0TnVtYmVyRm9ybWF0
KCAgICAgICAgICAgIFVEYXRlRm9ybWF0KiAgICBmbXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCAgIFVOdW1iZXJGb3JtYXQqICBudW1iZXJGb3JtYXRUb1NldCk7CisKKy8qKgorKiBH
ZXQgYSBsb2NhbGUgZm9yIHdoaWNoIGRhdGUvdGltZSBmb3JtYXR0aW5nIHBhdHRlcm5zIGFyZSBh
dmFpbGFibGUuCisqIEEgVURhdGVGb3JtYXQgaW4gYSBsb2NhbGUgcmV0dXJuZWQgYnkgdGhpcyBm
dW5jdGlvbiB3aWxsIHBlcmZvcm0gdGhlIGNvcnJlY3QKKyogZm9ybWF0dGluZyBhbmQgcGFyc2lu
ZyBmb3IgdGhlIGxvY2FsZS4KKyogQHBhcmFtIGxvY2FsZUluZGV4IFRoZSBpbmRleCBvZiB0aGUg
ZGVzaXJlZCBsb2NhbGUuCisqIEByZXR1cm4gQSBsb2NhbGUgZm9yIHdoaWNoIGRhdGUvdGltZSBm
b3JtYXR0aW5nIHBhdHRlcm5zIGFyZSBhdmFpbGFibGUsIG9yIDAgaWYgbm9uZS4KKyogQHNlZSB1
ZGF0X2NvdW50QXZhaWxhYmxlCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGNvbnN0
IGNoYXIqIFVfRVhQT1JUMiAKK3VkYXRfZ2V0QXZhaWxhYmxlKGludDMyX3QgbG9jYWxlSW5kZXgp
OworCisvKioKKyogRGV0ZXJtaW5lIGhvdyBtYW55IGxvY2FsZXMgaGF2ZSBkYXRlL3RpbWUgIGZv
cm1hdHRpbmcgcGF0dGVybnMgYXZhaWxhYmxlLgorKiBUaGlzIGZ1bmN0aW9uIGlzIG1vc3QgdXNl
ZnVsIGFzIGRldGVybWluaW5nIHRoZSBsb29wIGVuZGluZyBjb25kaXRpb24gZm9yCisqIGNhbGxz
IHRvIHtAbGluayAjdWRhdF9nZXRBdmFpbGFibGUgfS4KKyogQHJldHVybiBUaGUgbnVtYmVyIG9m
IGxvY2FsZXMgZm9yIHdoaWNoIGRhdGUvdGltZSBmb3JtYXR0aW5nIHBhdHRlcm5zIGFyZSBhdmFp
bGFibGUuCisqIEBzZWUgdWRhdF9nZXRBdmFpbGFibGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLwor
VV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1ZGF0X2NvdW50QXZhaWxhYmxlKHZvaWQpOwor
CisvKioKKyogR2V0IHRoZSB5ZWFyIHJlbGF0aXZlIHRvIHdoaWNoIGFsbCAyLWRpZ2l0IHllYXJz
IGFyZSBpbnRlcnByZXRlZC4KKyogRm9yIGV4YW1wbGUsIGlmIHRoZSAyLWRpZ2l0IHN0YXJ0IHll
YXIgaXMgMjEwMCwgdGhlIHllYXIgOTkgd2lsbCBiZQorKiBpbnRlcnByZXRlZCBhcyAyMTk5Lgor
KiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisqIEBwYXJhbSBzdGF0dXMgQSBw
b2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4g
VGhlIHllYXIgcmVsYXRpdmUgdG8gd2hpY2ggYWxsIDItZGlnaXQgeWVhcnMgYXJlIGludGVycHJl
dGVkLgorKiBAc2VlIHVkYXRfU2V0MkRpZ2l0WWVhclN0YXJ0CisqIEBzdGFibGUgSUNVIDIuMAor
Ki8KK1VfU1RBQkxFIFVEYXRlIFVfRVhQT1JUMiAKK3VkYXRfZ2V0MkRpZ2l0WWVhclN0YXJ0KCAg
ICBjb25zdCAgIFVEYXRlRm9ybWF0ICAgICAqZm10LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICpzdGF0dXMpOworCisvKioKKyogU2V0IHRoZSB5
ZWFyIHJlbGF0aXZlIHRvIHdoaWNoIGFsbCAyLWRpZ2l0IHllYXJzIHdpbGwgYmUgaW50ZXJwcmV0
ZWQuCisqIEZvciBleGFtcGxlLCBpZiB0aGUgMi1kaWdpdCBzdGFydCB5ZWFyIGlzIDIxMDAsIHRo
ZSB5ZWFyIDk5IHdpbGwgYmUKKyogaW50ZXJwcmV0ZWQgYXMgMjE5OS4KKyogQHBhcmFtIGZtdCBU
aGUgZm9ybWF0dGVyIHRvIHNldC4KKyogQHBhcmFtIGQgVGhlIHllYXIgcmVsYXRpdmUgdG8gd2hp
Y2ggYWxsIDItZGlnaXQgeWVhcnMgd2lsbCBiZSBpbnRlcnByZXRlZC4KKyogQHBhcmFtIHN0YXR1
cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHNl
ZSB1ZGF0X1NldDJEaWdpdFllYXJTdGFydAorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJM
RSB2b2lkIFVfRVhQT1JUMiAKK3VkYXRfc2V0MkRpZ2l0WWVhclN0YXJ0KCAgICBVRGF0ZUZvcm1h
dCAgICAgKmZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRGF0ZSAgICAgICAgICAg
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgKnN0YXR1cyk7
CisKKy8qKgorKiBFeHRyYWN0IHRoZSBwYXR0ZXJuIGZyb20gYSBVRGF0ZUZvcm1hdC4KKyogVGhl
IHBhdHRlcm4gd2lsbCBmb2xsb3cgdGhlIHBhdHRlcm4gc3ludGF4IHJ1bGVzLgorKiBAcGFyYW0g
Zm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisqIEBwYXJhbSBsb2NhbGl6ZWQgVFJVRSBpZiB0
aGUgcGF0dGVybiBzaG91bGQgYmUgbG9jYWxpemVkLCBGQUxTRSBvdGhlcndpc2UuCisqIEBwYXJh
bSByZXN1bHQgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIHBhdHRlcm4uCisq
IEBwYXJhbSByZXN1bHRMZW5ndGggVGhlIG1heGltdW0gc2l6ZSBvZiByZXN1bHQuCisqIEBwYXJh
bSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3Jz
CisqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFu
IHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorKiBAc2VlIHVkYXRfYXBw
bHlQYXR0ZXJuCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBP
UlQyIAordWRhdF90b1BhdHRlcm4oICAgIGNvbnN0ICAgVURhdGVGb3JtYXQgICAgICpmbXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCAgICAgICAgICBsb2NhbGl6ZWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICBVQ2hhciAgICAgICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGludDMyX3QgICAgICAgICByZXN1bHRMZW5ndGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICBVRXJyb3JDb2RlICAgICAgKnN0YXR1cyk7CisKKy8qKgorKiBTZXQgdGhlIHBhdHRl
cm4gdXNlZCBieSBhbiBVRGF0ZUZvcm1hdC4KKyogVGhlIHBhdHRlcm4gc2hvdWxkIGZvbGxvdyB0
aGUgcGF0dGVybiBzeW50YXggcnVsZXMuCisqIEBwYXJhbSBmb3JtYXQgVGhlIGZvcm1hdHRlciB0
byBzZXQuCisqIEBwYXJhbSBsb2NhbGl6ZWQgVFJVRSBpZiB0aGUgcGF0dGVybiBpcyBsb2NhbGl6
ZWQsIEZBTFNFIG90aGVyd2lzZS4KKyogQHBhcmFtIHBhdHRlcm4gVGhlIG5ldyBwYXR0ZXJuCisq
IEBwYXJhbSBwYXR0ZXJuTGVuZ3RoIFRoZSBsZW5ndGggb2YgcGF0dGVybiwgb3IgLTEgaWYgbnVs
bC10ZXJtaW5hdGVkLgorKiBAc2VlIHVkYXRfdG9QYXR0ZXJuCisqIEBzdGFibGUgSUNVIDIuMAor
Ki8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWRhdF9hcHBseVBhdHRlcm4oICAgICAgICAg
ICAgVURhdGVGb3JtYXQgICAgICpmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VUJvb2wgICAgICAgICAgbG9jYWxpemVkLAorICAgICAgICAgICAgICAgICAgICBjb25zdCAgIFVD
aGFyICAgICAgICAgICAqcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQz
Ml90ICAgICAgICAgcGF0dGVybkxlbmd0aCk7CisKKy8qKiAKKyAqIFRoZSBwb3NzaWJsZSB0eXBl
cyBvZiBkYXRlIGZvcm1hdCBzeW1ib2xzIAorICogQHN0YWJsZSBJQ1UgMi42CisgKi8KK3R5cGVk
ZWYgZW51bSBVRGF0ZUZvcm1hdFN5bWJvbFR5cGUgeworICAgIC8qKiBUaGUgZXJhIG5hbWVzLCBm
b3IgZXhhbXBsZSBBRCAqLworICAgIFVEQVRfRVJBUywKKyAgICAvKiogVGhlIG1vbnRoIG5hbWVz
LCBmb3IgZXhhbXBsZSBGZWJydWFyeSAqLworICAgIFVEQVRfTU9OVEhTLAorICAgIC8qKiBUaGUg
c2hvcnQgbW9udGggbmFtZXMsIGZvciBleGFtcGxlIEZlYi4gKi8KKyAgICBVREFUX1NIT1JUX01P
TlRIUywKKyAgICAvKiogVGhlIHdlZWtkYXkgbmFtZXMsIGZvciBleGFtcGxlIE1vbmRheSAqLwor
ICAgIFVEQVRfV0VFS0RBWVMsCisgICAgLyoqIFRoZSBzaG9ydCB3ZWVrZGF5IG5hbWVzLCBmb3Ig
ZXhhbXBsZSBNb24uICovCisgICAgVURBVF9TSE9SVF9XRUVLREFZUywKKyAgICAvKiogVGhlIEFN
L1BNIG5hbWVzLCBmb3IgZXhhbXBsZSBBTSAqLworICAgIFVEQVRfQU1fUE1TLAorICAgIC8qKiBU
aGUgbG9jYWxpemVkIGNoYXJhY3RlcnMgKi8KKyAgICBVREFUX0xPQ0FMSVpFRF9DSEFSUywKKyAg
ICAvKiogVGhlIGxvbmcgZXJhIG5hbWVzLCBmb3IgZXhhbXBsZSBBbm5vIERvbWluaSAqLworICAg
IFVEQVRfRVJBX05BTUVTLAorICAgIC8qKiBUaGUgbmFycm93IG1vbnRoIG5hbWVzLCBmb3IgZXhh
bXBsZSBGICovCisgICAgVURBVF9OQVJST1dfTU9OVEhTLAorICAgIC8qKiBUaGUgbmFycm93IHdl
ZWtkYXkgbmFtZXMsIGZvciBleGFtcGxlIE4gKi8KKyAgICBVREFUX05BUlJPV19XRUVLREFZUywK
KyAgICAvKiogU3RhbmRhbG9uZSBjb250ZXh0IHZlcnNpb25zIG9mIG1vbnRocyAqLworICAgIFVE
QVRfU1RBTkRBTE9ORV9NT05USFMsCisgICAgVURBVF9TVEFOREFMT05FX1NIT1JUX01PTlRIUywK
KyAgICBVREFUX1NUQU5EQUxPTkVfTkFSUk9XX01PTlRIUywKKyAgICAvKiogU3RhbmRhbG9uZSBj
b250ZXh0IHZlcnNpb25zIG9mIHdlZWtkYXlzICovCisgICAgVURBVF9TVEFOREFMT05FX1dFRUtE
QVlTLAorICAgIFVEQVRfU1RBTkRBTE9ORV9TSE9SVF9XRUVLREFZUywKKyAgICBVREFUX1NUQU5E
QUxPTkVfTkFSUk9XX1dFRUtEQVlTLAorICAgIC8qKiBUaGUgcXVhcnRlcnMsIGZvciBleGFtcGxl
IDFzdCBRdWFydGVyICovCisgICAgVURBVF9RVUFSVEVSUywKKyAgICAvKiogVGhlIHNob3J0IHF1
YXJ0ZXIgbmFtZXMsIGZvciBleGFtcGxlIFExICovCisgICAgVURBVF9TSE9SVF9RVUFSVEVSUywK
KyAgICAvKiogU3RhbmRhbG9uZSBjb250ZXh0IHZlcnNpb25zIG9mIHF1YXJ0ZXJzICovCisgICAg
VURBVF9TVEFOREFMT05FX1FVQVJURVJTLAorICAgIFVEQVRfU1RBTkRBTE9ORV9TSE9SVF9RVUFS
VEVSUworCit9IFVEYXRlRm9ybWF0U3ltYm9sVHlwZTsKKworc3RydWN0IFVEYXRlRm9ybWF0U3lt
Ym9sczsKKy8qKiBEYXRlIGZvcm1hdCBzeW1ib2xzLgorICogIEZvciB1c2FnZSBpbiBDIHByb2dy
YW1zLgorICogIEBzdGFibGUgSUNVIDIuNgorICovCit0eXBlZGVmIHN0cnVjdCBVRGF0ZUZvcm1h
dFN5bWJvbHMgVURhdGVGb3JtYXRTeW1ib2xzOworCisvKioKKyogR2V0IHRoZSBzeW1ib2xzIGFz
c29jaWF0ZWQgd2l0aCBhbiBVRGF0ZUZvcm1hdC4KKyogVGhlIHN5bWJvbHMgYXJlIHdoYXQgYSBV
RGF0ZUZvcm1hdCB1c2VzIHRvIHJlcHJlc2VudCBsb2NhbGUtc3BlY2lmaWMgZGF0YSwKKyogZm9y
IGV4YW1wbGUgbW9udGggb3IgZGF5IG5hbWVzLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIg
dG8gcXVlcnkuCisqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHN5bWJvbHMgdG8gZ2V0LiAgT25l
IG9mIFVEQVRfRVJBUywgVURBVF9NT05USFMsIFVEQVRfU0hPUlRfTU9OVEhTLAorKiBVREFUX1dF
RUtEQVlTLCBVREFUX1NIT1JUX1dFRUtEQVlTLCBVREFUX0FNX1BNUywgb3IgVURBVF9MT0NBTEla
RURfQ0hBUlMKKyogQHBhcmFtIHN5bWJvbEluZGV4IFRoZSBkZXNpcmVkIHN5bWJvbCBvZiB0eXBl
IHR5cGUuCisqIEBwYXJhbSByZXN1bHQgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUg
dGhlIHBhdHRlcm4uCisqIEBwYXJhbSByZXN1bHRMZW5ndGggVGhlIG1heGltdW0gc2l6ZSBvZiBy
ZXN1bHQuCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVj
ZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsg
aWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgor
KiBAc2VlIHVkYXRfY291bnRTeW1ib2xzCisqIEBzZWUgdWRhdF9zZXRTeW1ib2xzCisqIEBzdGFi
bGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordWRhdF9nZXRTeW1i
b2xzKGNvbnN0ICAgVURhdGVGb3JtYXQgICAgICAgICAgICAgKmZtdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFVEYXRlRm9ybWF0U3ltYm9sVHlwZSAgIHR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBzeW1ib2xJbmRleCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFVDaGFyICAgICAgICAgICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICByZXN1bHRMZW5ndGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgICAgICAgICAqc3RhdHVzKTsKKwor
LyoqCisqIENvdW50IHRoZSBudW1iZXIgb2YgcGFydGljdWxhciBzeW1ib2xzIGZvciBhbiBVRGF0
ZUZvcm1hdC4KKyogVGhpcyBmdW5jdGlvbiBpcyBtb3N0IHVzZWZ1bCBhcyBmb3IgZGV0ZW1pbmlu
ZyB0aGUgbG9vcCB0ZXJtaW5hdGlvbiBjb25kaXRpb24KKyogZm9yIGNhbGxzIHRvIHtAbGluayAj
dWRhdF9nZXRTeW1ib2xzIH0uCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBxdWVyeS4K
KyogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2Ygc3ltYm9scyB0byBjb3VudC4gIE9uZSBvZiBVREFU
X0VSQVMsIFVEQVRfTU9OVEhTLCBVREFUX1NIT1JUX01PTlRIUywKKyogVURBVF9XRUVLREFZUywg
VURBVF9TSE9SVF9XRUVLREFZUywgVURBVF9BTV9QTVMsIG9yIFVEQVRfTE9DQUxJWkVEX0NIQVJT
CisqIEByZXR1cm4gVGhlIG51bWJlciBvZiBzeW1ib2xzIG9mIHR5cGUgdHlwZS4KKyogQHNlZSB1
ZGF0X2dldFN5bWJvbHMKKyogQHNlZSB1ZGF0X3NldFN5bWJvbHMKKyogQHN0YWJsZSBJQ1UgMi4w
CisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1ZGF0X2NvdW50U3ltYm9scyggICAg
Y29uc3QgICAgVURhdGVGb3JtYXQgICAgICAgICAgICAgICAgKmZtdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVRGF0ZUZvcm1hdFN5bWJvbFR5cGUgICAgdHlwZSk7CisKKy8qKgorKiBT
ZXQgdGhlIHN5bWJvbHMgYXNzb2NpYXRlZCB3aXRoIGFuIFVEYXRlRm9ybWF0LgorKiBUaGUgc3lt
Ym9scyBhcmUgd2hhdCBhIFVEYXRlRm9ybWF0IHVzZXMgdG8gcmVwcmVzZW50IGxvY2FsZS1zcGVj
aWZpYyBkYXRhLAorKiBmb3IgZXhhbXBsZSBtb250aCBvciBkYXkgbmFtZXMuCisqIEBwYXJhbSBm
b3JtYXQgVGhlIGZvcm1hdHRlciB0byBzZXQKKyogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2Ygc3lt
Ym9scyB0byBzZXQuICBPbmUgb2YgVURBVF9FUkFTLCBVREFUX01PTlRIUywgVURBVF9TSE9SVF9N
T05USFMsCisqIFVEQVRfV0VFS0RBWVMsIFVEQVRfU0hPUlRfV0VFS0RBWVMsIFVEQVRfQU1fUE1T
LCBvciBVREFUX0xPQ0FMSVpFRF9DSEFSUworKiBAcGFyYW0gc3ltYm9sSW5kZXggVGhlIGluZGV4
IG9mIHRoZSBzeW1ib2wgdG8gc2V0IG9mIHR5cGUgdHlwZS4KKyogQHBhcmFtIHZhbHVlIFRoZSBu
ZXcgdmFsdWUKKyogQHBhcmFtIHZhbHVlTGVuZ3RoIFRoZSBsZW5ndGggb2YgdmFsdWUsIG9yIC0x
IGlmIG51bGwtdGVybWluYXRlZAorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJy
b3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAc2VlIHVkYXRfZ2V0U3ltYm9scworKiBA
c2VlIHVkYXRfY291bnRTeW1ib2xzCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIHZv
aWQgVV9FWFBPUlQyIAordWRhdF9zZXRTeW1ib2xzKCAgICBVRGF0ZUZvcm1hdCAgICAgICAgICAg
ICAqZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICBVRGF0ZUZvcm1hdFN5bWJvbFR5cGUgICB0
eXBlLAorICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBzeW1ib2xJ
bmRleCwKKyAgICAgICAgICAgICAgICAgICAgVUNoYXIgICAgICAgICAgICAgICAgICAgKnZhbHVl
LAorICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICB2YWx1ZUxlbmd0
aCwKKyAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICAgICAgICAgKnN0YXR1cyk7
CisKKy8qKgorICogR2V0IHRoZSBsb2NhbGUgZm9yIHRoaXMgZGF0ZSBmb3JtYXQgb2JqZWN0Lgor
ICogWW91IGNhbiBjaG9vc2UgYmV0d2VlbiB2YWxpZCBhbmQgYWN0dWFsIGxvY2FsZS4KKyAqIEBw
YXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBnZXQgdGhlIGxvY2FsZSBmcm9tCisgKiBAcGFyYW0g
dHlwZSB0eXBlIG9mIHRoZSBsb2NhbGUgd2UncmUgbG9va2luZyBmb3IgKHZhbGlkIG9yIGFjdHVh
bCkgCisgKiBAcGFyYW0gc3RhdHVzIGVycm9yIGNvZGUgZm9yIHRoZSBvcGVyYXRpb24KKyAqIEBy
ZXR1cm4gdGhlIGxvY2FsZSBuYW1lCisgKiBAc3RhYmxlIElDVSAyLjgKKyAqLworVV9TVEFCTEUg
Y29uc3QgY2hhciogVV9FWFBPUlQyCit1ZGF0X2dldExvY2FsZUJ5VHlwZShjb25zdCBVRGF0ZUZv
cm1hdCAqZm10LAorICAgICAgICAgICAgICAgICAgICAgVUxvY0RhdGFMb2NhbGVUeXBlIHR5cGUs
CisgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiBzdGF0dXMpOyAKKworLyoqCisqIEV4
dHJhY3QgdGhlIGRhdGUgcGF0dGVybiBmcm9tIGEgVURhdGVGb3JtYXQgc2V0IGZvciByZWxhdGl2
ZSBkYXRlIGZvcm1hdHRpbmcuCisqIFRoZSBwYXR0ZXJuIHdpbGwgZm9sbG93IHRoZSBwYXR0ZXJu
IHN5bnRheCBydWxlcy4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHF1ZXJ5LgorKiBA
cGFyYW0gcmVzdWx0IEEgcG9pbnRlciB0byBhIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBwYXR0ZXJu
LgorKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIFRoZSBtYXhpbXVtIHNpemUgb2YgcmVzdWx0LgorKiBA
cGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJy
b3JzCisqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0
aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorKiBAc2VlIHVkYXRf
YXBwbHlQYXR0ZXJuUmVsYXRpdmUKKyogQGludGVybmFsIElDVSA0LjIgdGVjaG5vbG9neSBwcmV2
aWV3CisqLworVV9JTlRFUk5BTCBpbnQzMl90IFVfRVhQT1JUMiAKK3VkYXRfdG9QYXR0ZXJuUmVs
YXRpdmVEYXRlKGNvbnN0IFVEYXRlRm9ybWF0ICpmbXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBVQ2hhciAgICAgICAgICAgICAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50MzJfdCAgICAgICAgICAgcmVzdWx0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVUVycm9yQ29kZSAgICAgICAgKnN0YXR1cyk7CisKKy8qKgorKiBFeHRyYWN0IHRoZSB0
aW1lIHBhdHRlcm4gZnJvbSBhIFVEYXRlRm9ybWF0IHNldCBmb3IgcmVsYXRpdmUgZGF0ZSBmb3Jt
YXR0aW5nLgorKiBUaGUgcGF0dGVybiB3aWxsIGZvbGxvdyB0aGUgcGF0dGVybiBzeW50YXggcnVs
ZXMuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBxdWVyeS4KKyogQHBhcmFtIHJlc3Vs
dCBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgcGF0dGVybi4KKyogQHBhcmFt
IHJlc3VsdExlbmd0aCBUaGUgbWF4aW11bSBzaXplIG9mIHJlc3VsdC4KKyogQHBhcmFtIHN0YXR1
cyBBIHBvaW50ZXIgdG8gYSBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAcmV0
dXJuIFRoZSB0b3RhbCBidWZmZXIgc2l6ZSBuZWVkZWQ7IGlmIGdyZWF0ZXIgdGhhbiByZXN1bHRM
ZW5ndGgsIHRoZSBvdXRwdXQgd2FzIHRydW5jYXRlZC4KKyogQHNlZSB1ZGF0X2FwcGx5UGF0dGVy
blJlbGF0aXZlCisqIEBpbnRlcm5hbCBJQ1UgNC4yIHRlY2hub2xvZ3kgcHJldmlldworKi8KK1Vf
SU5URVJOQUwgaW50MzJfdCBVX0VYUE9SVDIgCit1ZGF0X3RvUGF0dGVyblJlbGF0aXZlVGltZShj
b25zdCBVRGF0ZUZvcm1hdCAqZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIg
ICAgICAgICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qg
ICAgICAgICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJv
ckNvZGUgICAgICAgICpzdGF0dXMpOworCisvKioKKyogU2V0IHRoZSBkYXRlICYgdGltZSBwYXR0
ZXJucyB1c2VkIGJ5IGEgVURhdGVGb3JtYXQgc2V0IGZvciByZWxhdGl2ZSBkYXRlIGZvcm1hdHRp
bmcuCisqIFRoZSBwYXR0ZXJucyBzaG91bGQgZm9sbG93IHRoZSBwYXR0ZXJuIHN5bnRheCBydWxl
cy4KKyogQHBhcmFtIGZvcm1hdCBUaGUgZm9ybWF0dGVyIHRvIHNldC4KKyogQHBhcmFtIGRhdGVQ
YXR0ZXJuIFRoZSBuZXcgZGF0ZSBwYXR0ZXJuCisqIEBwYXJhbSBkYXRlUGF0dGVybkxlbmd0aCBU
aGUgbGVuZ3RoIG9mIGRhdGVQYXR0ZXJuLCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisqIEBw
YXJhbSB0aW1lUGF0dGVybiBUaGUgbmV3IHRpbWUgcGF0dGVybgorKiBAcGFyYW0gdGltZVBhdHRl
cm5MZW5ndGggVGhlIGxlbmd0aCBvZiB0aW1lUGF0dGVybiwgb3IgLTEgaWYgbnVsbC10ZXJtaW5h
dGVkLgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhIFVFcnJvckNvZGUgdG8gcmVjZWl2
ZSBhbnkgZXJyb3JzCisqIEBzZWUgdWRhdF90b1BhdHRlcm5SZWxhdGl2ZURhdGUsIHVkYXRfdG9Q
YXR0ZXJuUmVsYXRpdmVUaW1lCisqIEBpbnRlcm5hbCBJQ1UgNC4yIHRlY2hub2xvZ3kgcHJldmll
dworKi8KK1VfSU5URVJOQUwgdm9pZCBVX0VYUE9SVDIgCit1ZGF0X2FwcGx5UGF0dGVyblJlbGF0
aXZlKFVEYXRlRm9ybWF0ICpmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFVDaGFyICpkYXRlUGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAg
ICAgZGF0ZVBhdHRlcm5MZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVD
aGFyICp0aW1lUGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAg
dGltZVBhdHRlcm5MZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUg
ICpzdGF0dXMpOworCisKKyNlbmRpZiAvKiAjaWYgIVVDT05GSUdfTk9fRk9STUFUVElORyAqLwor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29kZS91
bWlzYy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3VtaXNjLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDg1NDUxZmM3NjdjMDU4MzVmNmMxNWY1NjZmMzU2MmUyZDRhZjgzNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29kZS91bWlzYy5oCkBAIC0w
LDAgKzEsNjAgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgQ29weXJpZ2h0IChDKSAxOTk5LTIw
MDYsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQg
b3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBmaWxlIG5h
bWU6ICB1bWlzYy5oCisqICAgZW5jb2Rpbmc6ICAgVVMtQVNDSUkKKyogICB0YWIgc2l6ZTogICA4
IChub3QgdXNlZCkKKyogICBpbmRlbnRhdGlvbjo0CisqCisqICAgY3JlYXRlZCBvbjogMTk5OW9j
dDE1CisqICAgY3JlYXRlZCBieTogTWFya3VzIFcuIFNjaGVyZXIKKyovCisKKyNpZm5kZWYgVU1J
U0NfSAorI2RlZmluZSBVTUlTQ19ICisKKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorCisv
KioKKyAqIFxmaWxlCisgKiBcYnJpZWYgIEMgQVBJOm1pc2MgZGVmaW5pdGlvbnMgCisgKgorICog
IFRoaXMgZmlsZSBjb250YWlucyBtaXNjZWxsYW5lb3VzIGRlZmluaXRpb25zIGZvciB0aGUgQyBB
UElzLiAKKyAqLworCitVX0NERUNMX0JFR0lOCisKKy8qKiBBIHN0cnVjdCByZXByZXNlbnRpbmcg
YSByYW5nZSBvZiB0ZXh0IGNvbnRhaW5pbmcgYSBzcGVjaWZpYyBmaWVsZCAKKyAqICBAc3RhYmxl
IElDVSAyLjAKKyAqLwordHlwZWRlZiBzdHJ1Y3QgVUZpZWxkUG9zaXRpb24geworICAvKioKKyAg
ICogVGhlIGZpZWxkIAorICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICovCisgIGludDMyX3QgZmll
bGQ7CisgIC8qKgorICAgKiBUaGUgc3RhcnQgb2YgdGhlIHRleHQgcmFuZ2UgY29udGFpbmluZyBm
aWVsZCAKKyAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAqLworICBpbnQzMl90IGJlZ2luSW5kZXg7
CisgIC8qKiAKKyAgICogVGhlIGxpbWl0IG9mIHRoZSB0ZXh0IHJhbmdlIGNvbnRhaW5pbmcgZmll
bGQgCisgICAqIEBzdGFibGUgSUNVIDIuMAorICAgKi8KKyAgaW50MzJfdCBlbmRJbmRleDsKK30g
VUZpZWxkUG9zaXRpb247CisKKyNpZiAhVUNPTkZJR19OT19TRVJWSUNFCisvKioKKyAqIE9wYXF1
ZSB0eXBlIHJldHVybmVkIGJ5IHJlZ2lzdGVySW5zdGFuY2UsIHJlZ2lzdGVyRmFjdG9yeSBhbmQg
dW5yZWdpc3RlciBmb3Igc2VydmljZSByZWdpc3RyYXRpb24uCisgKiBAc3RhYmxlIElDVSAyLjYK
KyAqLwordHlwZWRlZiBjb25zdCB2b2lkKiBVUmVnaXN0cnlLZXk7CisjZW5kaWYKKworVV9DREVD
TF9FTkQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3Vu
aWNvZGUvdW51bS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3VudW0uaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xMTAyYmFiNThiM2QxYmIyZTJiMjA4MmNiNTU4OWM1ZGRlZmU4Y2MwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3VudW0uaApA
QCAtMCwwICsxLDk5OSBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0
IChDKSAxOTk3LTIwMTAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRp
b24gYW5kIG90aGVycy4KKyogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyogTW9kaWZpY2F0aW9uIEhp
c3Rvcnk6CisqCisqICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3JpcHRpb24KKyogICAw
Ni8yNC85OSAgICBoZWxlbmEgICAgICBJbnRlZ3JhdGVkIEFsYW4ncyBORiBlbmhhbmNlbWVudHMg
YW5kIEphdmEyIGJ1ZyBmaXhlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2lmbmRl
ZiBfVU5VTQorI2RlZmluZSBfVU5VTQorCisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKwor
I2lmICFVQ09ORklHX05PX0ZPUk1BVFRJTkcKKworI2luY2x1ZGUgInVuaWNvZGUvbG9jYWxwb2lu
dGVyLmgiCisjaW5jbHVkZSAidW5pY29kZS91bG9jLmgiCisjaW5jbHVkZSAidW5pY29kZS91bWlz
Yy5oIgorI2luY2x1ZGUgInVuaWNvZGUvcGFyc2VlcnIuaCIKKy8qKgorICogXGZpbGUKKyAqIFxi
cmllZiBDIEFQSTogTnVtYmVyRm9ybWF0CisgKgorICogPGgyPiBOdW1iZXIgRm9ybWF0IEMgQVBJ
IDwvaDI+CisgKgorICogTnVtYmVyIEZvcm1hdCBDIEFQSSAgUHJvdmlkZXMgZnVuY3Rpb25zIGZv
cgorICogZm9ybWF0dGluZyBhbmQgcGFyc2luZyBhIG51bWJlci4gIEFsc28gcHJvdmlkZXMgbWV0
aG9kcyBmb3IKKyAqIGRldGVybWluaW5nIHdoaWNoIGxvY2FsZXMgaGF2ZSBudW1iZXIgZm9ybWF0
cywgYW5kIHdoYXQgdGhlaXIgbmFtZXMKKyAqIGFyZS4KKyAqIDxQPgorICogVU51bWJlckZvcm1h
dCBoZWxwcyB5b3UgdG8gZm9ybWF0IGFuZCBwYXJzZSBudW1iZXJzIGZvciBhbnkgbG9jYWxlLgor
ICogWW91ciBjb2RlIGNhbiBiZSBjb21wbGV0ZWx5IGluZGVwZW5kZW50IG9mIHRoZSBsb2NhbGUg
Y29udmVudGlvbnMKKyAqIGZvciBkZWNpbWFsIHBvaW50cywgdGhvdXNhbmRzLXNlcGFyYXRvcnMs
IG9yIGV2ZW4gdGhlIHBhcnRpY3VsYXIKKyAqIGRlY2ltYWwgZGlnaXRzIHVzZWQsIG9yIHdoZXRo
ZXIgdGhlIG51bWJlciBmb3JtYXQgaXMgZXZlbiBkZWNpbWFsLgorICogVGhlcmUgYXJlIGRpZmZl
cmVudCBudW1iZXIgZm9ybWF0IHN0eWxlcyBsaWtlIGRlY2ltYWwsIGN1cnJlbmN5LAorICogcGVy
Y2VudCBhbmQgc3BlbGxvdXQuCisgKiA8UD4KKyAqIFRvIGZvcm1hdCBhIG51bWJlciBmb3IgdGhl
IGN1cnJlbnQgTG9jYWxlLCB1c2Ugb25lIG9mIHRoZSBzdGF0aWMKKyAqIGZhY3RvcnkgbWV0aG9k
czoKKyAqIDxwcmU+CisgKiBcY29kZQorICogICAgVUNoYXIgbXlTdHJpbmdbMjBdOworICogICAg
ZG91YmxlIG15TnVtYmVyID0gNy4wOworICogICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9f
RVJST1I7CisgKiAgICBVTnVtYmVyRm9ybWF0KiBuZiA9IHVudW1fb3BlbihVTlVNX0RFRkFVTFQs
IE5VTEwsIC0xLCBOVUxMLCBOVUxMLCAmc3RhdHVzKTsKKyAqICAgIHVudW1fZm9ybWF0RG91Ymxl
KG5mLCBteU51bWJlciwgbXlTdHJpbmcsIDIwLCBOVUxMLCAmc3RhdHVzKTsKKyAqICAgIHByaW50
ZigiIEV4YW1wbGUgMTogJXNcbiIsIGF1c3RyZHVwKG15U3RyaW5nKSApOyAvL2F1c3RyZHVwKCBh
IGZ1bmN0aW9uIHVzZWQgdG8gY29udmVydCBVQ2hhciogdG8gY2hhciopCisgKiBcZW5kY29kZQor
ICogPC9wcmU+CisgKiBJZiB5b3UgYXJlIGZvcm1hdHRpbmcgbXVsdGlwbGUgbnVtYmVycywgaXQg
aXMgbW9yZSBlZmZpY2llbnQgdG8gZ2V0CisgKiB0aGUgZm9ybWF0IGFuZCB1c2UgaXQgbXVsdGlw
bGUgdGltZXMgc28gdGhhdCB0aGUgc3lzdGVtIGRvZXNuJ3QKKyAqIGhhdmUgdG8gZmV0Y2ggdGhl
IGluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2NhbCBsYW5ndWFnZSBhbmQgY291bnRyeQorICogY29u
dmVudGlvbnMgbXVsdGlwbGUgdGltZXMuCisgKiA8cHJlPgorICogXGNvZGUKKyAqIHVpbnQzMl90
IGksIHJlc3VsdGxlbmd0aCwgcmVzbGVubmVlZGVkOworICogVUVycm9yQ29kZSBzdGF0dXMgPSBV
X1pFUk9fRVJST1I7CisgKiBVRmllbGRQb3NpdGlvbiBwb3M7CisgKiB1aW50MzJfdCBhW10gPSB7
IDEyMywgMzMzMywgLTEyMzQ1NjcgfTsKKyAqIGNvbnN0IHVpbnQzMl90IGFfbGVuID0gc2l6ZW9m
KGEpIC8gc2l6ZW9mKGFbMF0pOworICogVU51bWJlckZvcm1hdCogbmY7CisgKiBVQ2hhciogcmVz
dWx0ID0gTlVMTDsKKyAqCisgKiBuZiA9IHVudW1fb3BlbihVTlVNX0RFRkFVTFQsIE5VTEwsIC0x
LCBOVUxMLCBOVUxMLCAmc3RhdHVzKTsKKyAqIGZvciAoaSA9IDA7IGkgPCBhX2xlbjsgaSsrKSB7
CisgKiAgICByZXN1bHRsZW5ndGg9MDsKKyAqICAgIHJlc2xlbm5lZWRlZD11bnVtX2Zvcm1hdChu
ZiwgYVtpXSwgTlVMTCwgcmVzdWx0bGVuZ3RoLCAmcG9zLCAmc3RhdHVzKTsKKyAqICAgIHJlc3Vs
dCA9IE5VTEw7CisgKiAgICBpZihzdGF0dXM9PVVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKXsKKyAq
ICAgICAgIHN0YXR1cz1VX1pFUk9fRVJST1I7CisgKiAgICAgICByZXN1bHRsZW5ndGg9cmVzbGVu
bmVlZGVkKzE7CisgKiAgICAgICByZXN1bHQ9KFVDaGFyKiltYWxsb2Moc2l6ZW9mKFVDaGFyKSAq
IHJlc3VsdGxlbmd0aCk7CisgKiAgICAgICB1bnVtX2Zvcm1hdChuZiwgYVtpXSwgcmVzdWx0LCBy
ZXN1bHRsZW5ndGgsICZwb3MsICZzdGF0dXMpOworICogICAgfQorICogICAgcHJpbnRmKCAiIEV4
YW1wbGUgMjogJXNcbiIsIGF1c3RyZHVwKHJlc3VsdCkpOworICogICAgZnJlZShyZXN1bHQpOwor
ICogfQorICogXGVuZGNvZGUKKyAqIDwvcHJlPgorICogVG8gZm9ybWF0IGEgbnVtYmVyIGZvciBh
IGRpZmZlcmVudCBMb2NhbGUsIHNwZWNpZnkgaXQgaW4gdGhlCisgKiBjYWxsIHRvIHVudW1fb3Bl
bigpLgorICogPHByZT4KKyAqIFxjb2RlCisgKiAgICAgVU51bWJlckZvcm1hdCogbmYgPSB1bnVt
X29wZW4oVU5VTV9ERUZBVUxULCBOVUxMLCAtMSwgImZyX0ZSIiwgTlVMTCwgJnN1Y2Nlc3MpCisg
KiBcZW5kY29kZQorICogPC9wcmU+CisgKiBZb3UgY2FuIHVzZSBhIE51bWJlckZvcm1hdCBBUEkg
dW51bV9wYXJzZSgpIHRvIHBhcnNlLgorICogPHByZT4KKyAqIFxjb2RlCisgKiAgICBVRXJyb3JD
b2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAqICAgIGludDMyX3QgcG9zPTA7CisgKiAgICBp
bnQzMl90IG51bTsKKyAqICAgIG51bSA9IHVudW1fcGFyc2UobmYsIHN0ciwgdV9zdHJsZW4oc3Ry
KSwgJnBvcywgJnN0YXR1cyk7CisgKiBcZW5kY29kZQorICogPC9wcmU+CisgKiBVc2UgVU5VTV9E
RUNJTUFMIHRvIGdldCB0aGUgbm9ybWFsIG51bWJlciBmb3JtYXQgZm9yIHRoYXQgY291bnRyeS4K
KyAqIFRoZXJlIGFyZSBvdGhlciBzdGF0aWMgb3B0aW9ucyBhdmFpbGFibGUuICBVc2UgVU5VTV9D
VVJSRU5DWQorICogdG8gZ2V0IHRoZSBjdXJyZW5jeSBudW1iZXIgZm9ybWF0IGZvciB0aGF0IGNv
dW50cnkuICBVc2UgVU5VTV9QRVJDRU5UCisgKiB0byBnZXQgYSBmb3JtYXQgZm9yIGRpc3BsYXlp
bmcgcGVyY2VudGFnZXMuIFdpdGggdGhpcyBmb3JtYXQsIGEKKyAqIGZyYWN0aW9uIGZyb20gMC41
MyBpcyBkaXNwbGF5ZWQgYXMgNTMlLgorICogPFA+CisgKiBVc2UgYSBwYXR0ZXJuIHRvIGNyZWF0
ZSBlaXRoZXIgYSBEZWNpbWFsRm9ybWF0IG9yIGEgUnVsZUJhc2VkTnVtYmVyRm9ybWF0CisgKiBm
b3JtYXR0ZXIuICBUaGUgcGF0dGVybiBtdXN0IGNvbmZvcm0gdG8gdGhlIHN5bnRheCBkZWZpbmVk
IGZvciB0aG9zZQorICogZm9ybWF0dGVycy4KKyAqIDxQPgorICogWW91IGNhbiBhbHNvIGNvbnRy
b2wgdGhlIGRpc3BsYXkgb2YgbnVtYmVycyB3aXRoIHN1Y2ggZnVuY3Rpb24gYXMKKyAqIHVudW1f
Z2V0QXR0cmlidWVzKCkgYW5kIHVudW1fc2V0QXRyaWJ1dGVzKCksIHdoaWNoIGxldCB5b3Ugc2V0
IHRoZQorICogbWltaW51bSBmcmFjdGlvbiBkaWdpdHMsIGdyb3VwaW5nLCBldGMuCisgKiBAc2Vl
IFVOdW1iZXJGb3JtYXRBdHRyaWJ1dGVzIGZvciBtb3JlIGRldGFpbHMKKyAqIDxQPgorICogWW91
IGNhbiBhbHNvIHVzZSBmb3JtcyBvZiB0aGUgcGFyc2UgYW5kIGZvcm1hdCBtZXRob2RzIHdpdGgK
KyAqIFBhcnNlUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHRvIGFsbG93IHlvdSB0bzoKKyAq
IDx1bCB0eXBlPXJvdW5kPgorICogICA8bGk+KGEpIHByb2dyZXNzaXZlbHkgcGFyc2UgdGhyb3Vn
aCBwaWVjZXMgb2YgYSBzdHJpbmcuCisgKiAgIDxsaT4oYikgYWxpZ24gdGhlIGRlY2ltYWwgcG9p
bnQgYW5kIG90aGVyIGFyZWFzLgorICogPC91bD4KKyAqIDxwPgorICogSXQgaXMgYWxzbyBwb3Nz
aWJsZSB0byBjaGFuZ2Ugb3Igc2V0IHRoZSBzeW1ib2xzIHVzZWQgZm9yIGEgcGFydGljdWxhcgor
ICogbG9jYWxlIGxpa2UgdGhlIGN1cnJlbmN5IHN5bWJvbCwgdGhlIGdyb3VwaW5nIHNlcGVyYXRv
ciAsIG1vbmV0YXJ5IHNlcGVyYXRvcgorICogZXRjIGJ5IG1ha2luZyB1c2Ugb2YgZnVuY3Rpb25z
IHVudW1fc2V0U3ltYm9scygpIGFuZCB1bnVtX2dldFN5bWJvbHMoKS4KKyAqLworCisvKiogQSBu
dW1iZXIgZm9ybWF0dGVyLgorICogIEZvciB1c2FnZSBpbiBDIHByb2dyYW1zLgorICogIEBzdGFi
bGUgSUNVIDIuMAorICovCit0eXBlZGVmIHZvaWQqIFVOdW1iZXJGb3JtYXQ7CisKKy8qKiBUaGUg
cG9zc2libGUgbnVtYmVyIGZvcm1hdCBzdHlsZXMuIAorICogIEBzdGFibGUgSUNVIDIuMAorICov
Cit0eXBlZGVmIGVudW0gVU51bWJlckZvcm1hdFN0eWxlIHsKKyAgICAvKioKKyAgICAgKiBEZWNp
bWFsIGZvcm1hdCBkZWZpbmVkIGJ5IHBhdHRlcm4gCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisg
ICAgICovCisgICAgVU5VTV9QQVRURVJOX0RFQ0lNQUw9MCwKKyAgICAvKiogRGVjaW1hbCBmb3Jt
YXQgKi8KKyAgICBVTlVNX0RFQ0lNQUw9MSwKKyAgICAvKiogQ3VycmVuY3kgZm9ybWF0ICovCisg
ICAgVU5VTV9DVVJSRU5DWSwKKyAgICAvKiogUGVyY2VudCBmb3JtYXQgKi8KKyAgICBVTlVNX1BF
UkNFTlQsCisgICAgLyoqIFNjaWVudGlmaWMgZm9ybWF0ICovCisgICAgVU5VTV9TQ0lFTlRJRklD
LAorICAgIC8qKiBTcGVsbG91dCBydWxlLWJhc2VkIGZvcm1hdCAqLworICAgIFVOVU1fU1BFTExP
VVQsCisgICAgLyoqIAorICAgICAqIE9yZGluYWwgcnVsZS1iYXNlZCBmb3JtYXQgCisgICAgICog
QHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVU5VTV9PUkRJTkFMLAorICAgIC8qKiAKKyAg
ICAgKiBEdXJhdGlvbiBydWxlLWJhc2VkIGZvcm1hdCAKKyAgICAgKiBAc3RhYmxlIElDVSAzLjAK
KyAgICAgKi8KKyAgICBVTlVNX0RVUkFUSU9OLAorICAgIC8qKiAKKyAgICAgKiBOdW1iZXJpbmcg
c3lzdGVtIHJ1bGUtYmFzZWQgZm9ybWF0IAorICAgICAqIEBzdGFibGUgSUNVIDQuMgorICAgICAq
LworICAgIFVOVU1fTlVNQkVSSU5HX1NZU1RFTSwKKyAgICAvKiogCisgICAgICogUnVsZS1iYXNl
ZCBmb3JtYXQgZGVmaW5lZCBieSBwYXR0ZXJuIAorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAg
ICAqLworICAgIFVOVU1fUEFUVEVSTl9SVUxFQkFTRUQsCisgICAgLyoqIERlZmF1bHQgZm9ybWF0
ICovCisgICAgVU5VTV9ERUZBVUxUID0gVU5VTV9ERUNJTUFMLAorICAgIC8qKiAoQWxpYXMgZm9y
IFVOVU1fUEFUVEVSTl9ERUNJTUFMKSAqLworICAgIFVOVU1fSUdOT1JFID0gVU5VTV9QQVRURVJO
X0RFQ0lNQUwKK30gVU51bWJlckZvcm1hdFN0eWxlOworCisvKiogVGhlIHBvc3NpYmxlIG51bWJl
ciBmb3JtYXQgcm91bmRpbmcgbW9kZXMuIAorICogIEBzdGFibGUgSUNVIDIuMAorICovCit0eXBl
ZGVmIGVudW0gVU51bWJlckZvcm1hdFJvdW5kaW5nTW9kZSB7CisgICAgVU5VTV9ST1VORF9DRUlM
SU5HLAorICAgIFVOVU1fUk9VTkRfRkxPT1IsCisgICAgVU5VTV9ST1VORF9ET1dOLAorICAgIFVO
VU1fUk9VTkRfVVAsCisgICAgLyoqCisgICAgICogSGFsZi1ldmVuIHJvdW5kaW5nLCBtaXNzcGVs
bGVkIG5hbWUKKyAgICAgKiBAZGVwcmVjYXRlZCwgSUNVIDMuOAorICAgICAqLworICAgIFVOVU1f
Rk9VTkRfSEFMRkVWRU4sCisgICAgVU5VTV9ST1VORF9IQUxGRE9XTiwKKyAgICBVTlVNX1JPVU5E
X0hBTEZVUCwKKyAgICAvKioKKyAgICAgKiBIYWxmLWV2ZW4gcm91bmRpbmcKKyAgICAgKiBAc3Rh
YmxlLCBJQ1UgMy44CisgICAgICovCisgICAgVU5VTV9ST1VORF9IQUxGRVZFTiA9IFVOVU1fRk9V
TkRfSEFMRkVWRU4KK30gVU51bWJlckZvcm1hdFJvdW5kaW5nTW9kZTsKKworLyoqIFRoZSBwb3Nz
aWJsZSBudW1iZXIgZm9ybWF0IHBhZCBwb3NpdGlvbnMuIAorICogIEBzdGFibGUgSUNVIDIuMAor
ICovCit0eXBlZGVmIGVudW0gVU51bWJlckZvcm1hdFBhZFBvc2l0aW9uIHsKKyAgICBVTlVNX1BB
RF9CRUZPUkVfUFJFRklYLAorICAgIFVOVU1fUEFEX0FGVEVSX1BSRUZJWCwKKyAgICBVTlVNX1BB
RF9CRUZPUkVfU1VGRklYLAorICAgIFVOVU1fUEFEX0FGVEVSX1NVRkZJWAorfSBVTnVtYmVyRm9y
bWF0UGFkUG9zaXRpb247CisKKy8qKgorICogQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgVU51bWJl
ckZvcm1hdCBmb3IgZm9ybWF0dGluZyBhbmQgcGFyc2luZworICogbnVtYmVycy4gIEEgVU51bWJl
ckZvcm1hdCBtYXkgYmUgdXNlZCB0byBmb3JtYXQgbnVtYmVycyBieSBjYWxsaW5nCisgKiB7QGxp
bmsgI3VudW1fZm9ybWF0IH0sIGFuZCB0byBwYXJzZSBudW1iZXJzIGJ5IGNhbGxpbmcge0BsaW5r
ICN1bnVtX3BhcnNlIH0uCisgKiBUaGUgY2FsbGVyIG11c3QgY2FsbCB7QGxpbmsgI3VudW1fY2xv
c2UgfSB3aGVuIGRvbmUgdG8gcmVsZWFzZSByZXNvdXJjZXMKKyAqIHVzZWQgYnkgdGhpcyBvYmpl
Y3QuCisgKiBAcGFyYW0gc3R5bGUgVGhlIHR5cGUgb2YgbnVtYmVyIGZvcm1hdCB0byBvcGVuOiBv
bmUgb2YKKyAqIFVOVU1fREVDSU1BTCwgVU5VTV9DVVJSRU5DWSwgVU5VTV9QRVJDRU5ULCBVTlVN
X1NDSUVOVElGSUMsIFVOVU1fU1BFTExPVVQsCisgKiBVTlVNX1BBVFRFUk5fREVDSU1BTCwgVU5V
TV9QQVRURVJOX1JVTEVCQVNFRCwgb3IgVU5VTV9ERUZBVUxULgorICogSWYgVU5VTV9QQVRURVJO
X0RFQ0lNQUwgb3IgVU5VTV9QQVRURVJOX1JVTEVCQVNFRCBpcyBwYXNzZWQgdGhlbiB0aGUKKyAq
IG51bWJlciBmb3JtYXQgaXMgb3BlbmVkIHVzaW5nIHRoZSBnaXZlbiBwYXR0ZXJuLCB3aGljaCBt
dXN0IGNvbmZvcm0KKyAqIHRvIHRoZSBzeW50YXggZGVzY3JpYmVkIGluIERlY2ltYWxGb3JtYXQg
b3IgUnVsZUJhc2VkTnVtYmVyRm9ybWF0LAorICogcmVzcGVjdGl2ZWx5LgorICogQHBhcmFtIHBh
dHRlcm4gQSBwYXR0ZXJuIHNwZWNpZnlpbmcgdGhlIGZvcm1hdCB0byB1c2UuIAorICogVGhpcyBw
YXJhbWV0ZXIgaXMgaWdub3JlZCB1bmxlc3MgdGhlIHN0eWxlIGlzCisgKiBVTlVNX1BBVFRFUk5f
REVDSU1BTCBvciBVTlVNX1BBVFRFUk5fUlVMRUJBU0VELgorICogQHBhcmFtIHBhdHRlcm5MZW5n
dGggVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuLCBvciAtMQorICogaWYg
bnVsbC10ZXJtaW5hdGVkLiBUaGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIHVubGVzcyB0aGUgc3R5
bGUgaXMKKyAqIFVOVU1fUEFUVEVSTi4KKyAqIEBwYXJhbSBsb2NhbGUgQSBsb2NhbGUgaWRlbnRp
ZmllciB0byB1c2UgdG8gZGV0ZXJtaW5lIGZvcm1hdHRpbmcKKyAqIGFuZCBwYXJzaW5nIGNvbnZl
bnRpb25zLCBvciBOVUxMIHRvIHVzZSB0aGUgZGVmYXVsdCBsb2NhbGUuCisgKiBAcGFyYW0gcGFy
c2VFcnIgQSBwb2ludGVyIHRvIGEgVVBhcnNlRXJyb3Igc3RydWN0IHRvIHJlY2VpdmUgdGhlCisg
KiBkZXRhaWxzIG9mIGFueSBwYXJzaW5nIGVycm9ycywgb3IgTlVMTCBpZiBubyBwYXJzaW5nIGVy
cm9yIGRldGFpbHMKKyAqIGFyZSBkZXNpcmVkLgorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIg
dG8gYW4gaW5wdXQtb3V0cHV0IFVFcnJvckNvZGUuCisgKiBAcmV0dXJuIEEgcG9pbnRlciB0byBh
IG5ld2x5IGNyZWF0ZWQgVU51bWJlckZvcm1hdCwgb3IgTlVMTCBpZiBhbgorICogZXJyb3Igb2Nj
dXJyZWQuCisgKiBAc2VlIHVudW1fY2xvc2UKKyAqIEBzZWUgRGVjaW1hbEZvcm1hdAorICogQHN0
YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIFVOdW1iZXJGb3JtYXQqIFVfRVhQT1JUMiAKK3Vu
dW1fb3BlbiggIFVOdW1iZXJGb3JtYXRTdHlsZSAgICBzdHlsZSwKKyAgICAgICAgICAgIGNvbnN0
ICAgIFVDaGFyKiAgICBwYXR0ZXJuLAorICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgIHBh
dHRlcm5MZW5ndGgsCisgICAgICAgICAgICBjb25zdCAgICBjaGFyKiAgICAgbG9jYWxlLAorICAg
ICAgICAgICAgVVBhcnNlRXJyb3IqICAgICAgIHBhcnNlRXJyLAorICAgICAgICAgICAgVUVycm9y
Q29kZSogICAgICAgIHN0YXR1cyk7CisKKworLyoqCisqIENsb3NlIGEgVU51bWJlckZvcm1hdC4K
KyogT25jZSBjbG9zZWQsIGEgVU51bWJlckZvcm1hdCBtYXkgbm8gbG9uZ2VyIGJlIHVzZWQuCisq
IEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBjbG9zZS4KKyogQHN0YWJsZSBJQ1UgMi4wCisq
LworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1bnVtX2Nsb3NlKFVOdW1iZXJGb3JtYXQqIGZt
dCk7CisKKyNpZiBVX1NIT1dfQ1BMVVNQTFVTX0FQSQorCitVX05BTUVTUEFDRV9CRUdJTgorCisv
KioKKyAqIFxjbGFzcyBMb2NhbFVOdW1iZXJGb3JtYXRQb2ludGVyCisgKiAiU21hcnQgcG9pbnRl
ciIgY2xhc3MsIGNsb3NlcyBhIFVOdW1iZXJGb3JtYXQgdmlhIHVudW1fY2xvc2UoKS4KKyAqIEZv
ciBtb3N0IG1ldGhvZHMgc2VlIHRoZSBMb2NhbFBvaW50ZXJCYXNlIGJhc2UgY2xhc3MuCisgKgor
ICogQHNlZSBMb2NhbFBvaW50ZXJCYXNlCisgKiBAc2VlIExvY2FsUG9pbnRlcgorICogQHN0YWJs
ZSBJQ1UgNC40CisgKi8KK1VfREVGSU5FX0xPQ0FMX09QRU5fUE9JTlRFUihMb2NhbFVOdW1iZXJG
b3JtYXRQb2ludGVyLCBVTnVtYmVyRm9ybWF0LCB1bnVtX2Nsb3NlKTsKKworVV9OQU1FU1BBQ0Vf
RU5ECisKKyNlbmRpZgorCisvKioKKyAqIE9wZW4gYSBjb3B5IG9mIGEgVU51bWJlckZvcm1hdC4K
KyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSBkZWVwIGNvcHkuCisgKiBAcGFyYW0gZm10IFRo
ZSBmb3JtYXQgdG8gY29weQorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9y
Q29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMuCisgKiBAcmV0dXJuIEEgcG9pbnRlciB0byBhIFVO
dW1iZXJGb3JtYXQgaWRlbnRpY2FsIHRvIGZtdC4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitV
X1NUQUJMRSBVTnVtYmVyRm9ybWF0KiBVX0VYUE9SVDIgCit1bnVtX2Nsb25lKGNvbnN0IFVOdW1i
ZXJGb3JtYXQgKmZtdCwKKyAgICAgICBVRXJyb3JDb2RlICpzdGF0dXMpOworCisvKioKKyogRm9y
bWF0IGFuIGludGVnZXIgdXNpbmcgYSBVTnVtYmVyRm9ybWF0LgorKiBUaGUgaW50ZWdlciB3aWxs
IGJlIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIFVOdW1iZXJGb3JtYXQncyBsb2NhbGUuCisq
IEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byB1c2UuCisqIEBwYXJhbSBudW1iZXIgVGhlIG51
bWJlciB0byBmb3JtYXQuCisqIEBwYXJhbSByZXN1bHQgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHRv
IHJlY2VpdmUgdGhlIGZvcm1hdHRlZCBudW1iZXIuCisqIEBwYXJhbSByZXN1bHRMZW5ndGggVGhl
IG1heGltdW0gc2l6ZSBvZiByZXN1bHQuCisqIEBwYXJhbSBwb3MgICAgQSBwb2ludGVyIHRvIGEg
VUZpZWxkUG9zaXRpb24uICBPbiBpbnB1dCwgcG9zaXRpb24tPmZpZWxkCisqIGlzIHJlYWQuICBP
biBvdXRwdXQsIHBvc2l0aW9uLT5iZWdpbkluZGV4IGFuZCBwb3NpdGlvbi0+ZW5kSW5kZXggaW5k
aWNhdGUKKyogdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIGluZGljZXMgb2YgZmllbGQgbnVtYmVy
IHBvc2l0aW9uLT5maWVsZCwgaWYgc3VjaAorKiBhIGZpZWxkIGV4aXN0cy4gIFRoaXMgcGFyYW1l
dGVyIG1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIG5vIGZpZWxkCisqIEBwYXJhbSBzdGF0dXMg
QSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1
cm4gVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3VsdExl
bmd0aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorKiBAc2VlIHVudW1fZm9ybWF0SW50NjQK
KyogQHNlZSB1bnVtX2Zvcm1hdERvdWJsZQorKiBAc2VlIHVudW1fcGFyc2UKKyogQHNlZSB1bnVt
X3BhcnNlSW50NjQKKyogQHNlZSB1bnVtX3BhcnNlRG91YmxlCisqIEBzZWUgVUZpZWxkUG9zaXRp
b24KKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1
bnVtX2Zvcm1hdCggICAgY29uc3QgICAgVU51bWJlckZvcm1hdCogICAgZm10LAorICAgICAgICBp
bnQzMl90ICAgICAgICAgICAgbnVtYmVyLAorICAgICAgICBVQ2hhciogICAgICAgICAgICByZXN1
bHQsCisgICAgICAgIGludDMyX3QgICAgICAgICAgICByZXN1bHRMZW5ndGgsCisgICAgICAgIFVG
aWVsZFBvc2l0aW9uICAgICpwb3MsCisgICAgICAgIFVFcnJvckNvZGUqICAgICAgICBzdGF0dXMp
OworCisvKioKKyogRm9ybWF0IGFuIGludDY0IHVzaW5nIGEgVU51bWJlckZvcm1hdC4KKyogVGhl
IGludDY0IHdpbGwgYmUgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgVU51bWJlckZvcm1hdCdz
IGxvY2FsZS4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHVzZS4KKyogQHBhcmFtIG51
bWJlciBUaGUgbnVtYmVyIHRvIGZvcm1hdC4KKyogQHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8g
YSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgZm9ybWF0dGVkIG51bWJlci4KKyogQHBhcmFtIHJlc3Vs
dExlbmd0aCBUaGUgbWF4aW11bSBzaXplIG9mIHJlc3VsdC4KKyogQHBhcmFtIHBvcyAgICBBIHBv
aW50ZXIgdG8gYSBVRmllbGRQb3NpdGlvbi4gIE9uIGlucHV0LCBwb3NpdGlvbi0+ZmllbGQKKyog
aXMgcmVhZC4gIE9uIG91dHB1dCwgcG9zaXRpb24tPmJlZ2luSW5kZXggYW5kIHBvc2l0aW9uLT5l
bmRJbmRleCBpbmRpY2F0ZQorKiB0aGUgYmVnaW5uaW5nIGFuZCBlbmRpbmcgaW5kaWNlcyBvZiBm
aWVsZCBudW1iZXIgcG9zaXRpb24tPmZpZWxkLCBpZiBzdWNoCisqIGEgZmllbGQgZXhpc3RzLiAg
VGhpcyBwYXJhbWV0ZXIgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2Ugbm8gZmllbGQKKyogQHBh
cmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJv
cnMKKyogQHJldHVybiBUaGUgdG90YWwgYnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVyIHRo
YW4gcmVzdWx0TGVuZ3RoLCB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisqIEBzZWUgdW51bV9m
b3JtYXQKKyogQHNlZSB1bnVtX2Zvcm1hdERvdWJsZQorKiBAc2VlIHVudW1fcGFyc2UKKyogQHNl
ZSB1bnVtX3BhcnNlSW50NjQKKyogQHNlZSB1bnVtX3BhcnNlRG91YmxlCisqIEBzZWUgVUZpZWxk
UG9zaXRpb24KKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9S
VDIgCit1bnVtX2Zvcm1hdEludDY0KGNvbnN0IFVOdW1iZXJGb3JtYXQgKmZtdCwKKyAgICAgICAg
aW50NjRfdCAgICAgICAgIG51bWJlciwKKyAgICAgICAgVUNoYXIqICAgICAgICAgIHJlc3VsdCwK
KyAgICAgICAgaW50MzJfdCAgICAgICAgIHJlc3VsdExlbmd0aCwKKyAgICAgICAgVUZpZWxkUG9z
aXRpb24gKnBvcywKKyAgICAgICAgVUVycm9yQ29kZSogICAgIHN0YXR1cyk7CisKKy8qKgorKiBG
b3JtYXQgYSBkb3VibGUgdXNpbmcgYSBVTnVtYmVyRm9ybWF0LgorKiBUaGUgZG91YmxlIHdpbGwg
YmUgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgVU51bWJlckZvcm1hdCdzIGxvY2FsZS4KKyog
QHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHVzZS4KKyogQHBhcmFtIG51bWJlciBUaGUgbnVt
YmVyIHRvIGZvcm1hdC4KKyogQHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8g
cmVjZWl2ZSB0aGUgZm9ybWF0dGVkIG51bWJlci4KKyogQHBhcmFtIHJlc3VsdExlbmd0aCBUaGUg
bWF4aW11bSBzaXplIG9mIHJlc3VsdC4KKyogQHBhcmFtIHBvcyAgICBBIHBvaW50ZXIgdG8gYSBV
RmllbGRQb3NpdGlvbi4gIE9uIGlucHV0LCBwb3NpdGlvbi0+ZmllbGQKKyogaXMgcmVhZC4gIE9u
IG91dHB1dCwgcG9zaXRpb24tPmJlZ2luSW5kZXggYW5kIHBvc2l0aW9uLT5lbmRJbmRleCBpbmRp
Y2F0ZQorKiB0aGUgYmVnaW5uaW5nIGFuZCBlbmRpbmcgaW5kaWNlcyBvZiBmaWVsZCBudW1iZXIg
cG9zaXRpb24tPmZpZWxkLCBpZiBzdWNoCisqIGEgZmllbGQgZXhpc3RzLiAgVGhpcyBwYXJhbWV0
ZXIgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2Ugbm8gZmllbGQKKyogQHBhcmFtIHN0YXR1cyBB
IHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVy
biBUaGUgdG90YWwgYnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVyIHRoYW4gcmVzdWx0TGVu
Z3RoLCB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisqIEBzZWUgdW51bV9mb3JtYXQKKyogQHNl
ZSB1bnVtX2Zvcm1hdEludDY0CisqIEBzZWUgdW51bV9wYXJzZQorKiBAc2VlIHVudW1fcGFyc2VJ
bnQ2NAorKiBAc2VlIHVudW1fcGFyc2VEb3VibGUKKyogQHNlZSBVRmllbGRQb3NpdGlvbgorKiBA
c3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VudW1fZm9y
bWF0RG91YmxlKCAgICBjb25zdCAgICBVTnVtYmVyRm9ybWF0KiAgZm10LAorICAgICAgICAgICAg
ZG91YmxlICAgICAgICAgIG51bWJlciwKKyAgICAgICAgICAgIFVDaGFyKiAgICAgICAgICByZXN1
bHQsCisgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgcmVzdWx0TGVuZ3RoLAorICAgICAgICAg
ICAgVUZpZWxkUG9zaXRpb24gICpwb3MsIC8qIDAgaWYgaWdub3JlICovCisgICAgICAgICAgICBV
RXJyb3JDb2RlKiAgICAgc3RhdHVzKTsKKworLyoqCisqIEZvcm1hdCBhIGRlY2ltYWwgbnVtYmVy
IHVzaW5nIGEgVU51bWJlckZvcm1hdC4KKyogVGhlIG51bWJlciB3aWxsIGJlIGZvcm1hdHRlZCBh
Y2NvcmRpbmcgdG8gdGhlIFVOdW1iZXJGb3JtYXQncyBsb2NhbGUuCisqIFRoZSBzeW50YXggb2Yg
dGhlIGlucHV0IG51bWJlciBpcyBhICJudW1lcmljIHN0cmluZyIKKyogYXMgZGVmaW5lZCBpbiB0
aGUgRGVjaW1hbCBBcml0aG1ldGljIFNwZWNpZmljYXRpb24sIGF2YWlsYWJsZSBhdAorKiBodHRw
Oi8vc3BlbGVvdHJvdmUuY29tL2RlY2ltYWwKKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRv
IHVzZS4KKyogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIHRvIGZvcm1hdC4KKyogQHBhcmFtIGxl
bmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBudW1iZXIsIG9yIC0xIGlmIHRoZSBpbnB1dCBp
cyBudWwtdGVybWluYXRlZC4KKyogQHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8gYSBidWZmZXIg
dG8gcmVjZWl2ZSB0aGUgZm9ybWF0dGVkIG51bWJlci4KKyogQHBhcmFtIHJlc3VsdExlbmd0aCBU
aGUgbWF4aW11bSBzaXplIG9mIHJlc3VsdC4KKyogQHBhcmFtIHBvcyAgICBBIHBvaW50ZXIgdG8g
YSBVRmllbGRQb3NpdGlvbi4gIE9uIGlucHV0LCBwb3NpdGlvbi0+ZmllbGQKKyogICAgICAgICAg
ICAgICBpcyByZWFkLiAgT24gb3V0cHV0LCBwb3NpdGlvbi0+YmVnaW5JbmRleCBhbmQgcG9zaXRp
b24tPmVuZEluZGV4IGluZGljYXRlCisqICAgICAgICAgICAgICAgdGhlIGJlZ2lubmluZyBhbmQg
ZW5kaW5nIGluZGljZXMgb2YgZmllbGQgbnVtYmVyIHBvc2l0aW9uLT5maWVsZCwgaWYgc3VjaAor
KiAgICAgICAgICAgICAgIGEgZmllbGQgZXhpc3RzLiAgVGhpcyBwYXJhbWV0ZXIgbWF5IGJlIE5V
TEwsIGluIHdoaWNoIGNhc2UgaXQgaXMgaWdub3JlZC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50
ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUg
dG90YWwgYnVmZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVyIHRoYW4gcmVzdWx0TGVuZ3RoLCB0
aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisqIEBzZWUgdW51bV9mb3JtYXQKKyogQHNlZSB1bnVt
X2Zvcm1hdEludDY0CisqIEBzZWUgdW51bV9wYXJzZQorKiBAc2VlIHVudW1fcGFyc2VJbnQ2NAor
KiBAc2VlIHVudW1fcGFyc2VEb3VibGUKKyogQHNlZSBVRmllbGRQb3NpdGlvbgorKiBAc3RhYmxl
IElDVSA0LjQgCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1bnVtX2Zvcm1hdERl
Y2ltYWwoICAgIGNvbnN0ICAgIFVOdW1iZXJGb3JtYXQqICBmbXQsCisgICAgICAgICAgICBjb25z
dCBjaGFyICogICAgbnVtYmVyLAorICAgICAgICAgICAgaW50MzJfdCAgICAgICAgIGxlbmd0aCwK
KyAgICAgICAgICAgIFVDaGFyKiAgICAgICAgICByZXN1bHQsCisgICAgICAgICAgICBpbnQzMl90
ICAgICAgICAgcmVzdWx0TGVuZ3RoLAorICAgICAgICAgICAgVUZpZWxkUG9zaXRpb24gICpwb3Ms
IC8qIDAgaWYgaWdub3JlICovCisgICAgICAgICAgICBVRXJyb3JDb2RlKiAgICAgc3RhdHVzKTsK
KworLyoqCisgKiBGb3JtYXQgYSBkb3VibGUgY3VycmVuY3kgYW1vdW50IHVzaW5nIGEgVU51bWJl
ckZvcm1hdC4KKyAqIFRoZSBkb3VibGUgd2lsbCBiZSBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRo
ZSBVTnVtYmVyRm9ybWF0J3MgbG9jYWxlLgorICogQHBhcmFtIGZtdCB0aGUgZm9ybWF0dGVyIHRv
IHVzZQorICogQHBhcmFtIG51bWJlciB0aGUgbnVtYmVyIHRvIGZvcm1hdAorICogQHBhcmFtIGN1
cnJlbmN5IHRoZSAzLWxldHRlciBudWxsLXRlcm1pbmF0ZWQgSVNPIDQyMTcgY3VycmVuY3kgY29k
ZQorICogQHBhcmFtIHJlc3VsdCBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byByZWNlaXZlIHRo
ZSBmb3JtYXR0ZWQgbnVtYmVyCisgKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIHRoZSBtYXhpbXVtIG51
bWJlciBvZiBVQ2hhcnMgdG8gd3JpdGUgdG8gcmVzdWx0CisgKiBAcGFyYW0gcG9zIGEgcG9pbnRl
ciB0byBhIFVGaWVsZFBvc2l0aW9uLiAgT24gaW5wdXQsCisgKiBwb3NpdGlvbi0+ZmllbGQgaXMg
cmVhZC4gIE9uIG91dHB1dCwgcG9zaXRpb24tPmJlZ2luSW5kZXggYW5kCisgKiBwb3NpdGlvbi0+
ZW5kSW5kZXggaW5kaWNhdGUgdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIGluZGljZXMgb2YKKyAq
IGZpZWxkIG51bWJlciBwb3NpdGlvbi0+ZmllbGQsIGlmIHN1Y2ggYSBmaWVsZCBleGlzdHMuICBU
aGlzCisgKiBwYXJhbWV0ZXIgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2UgaXQgaXMgaWdub3Jl
ZC4KKyAqIEBwYXJhbSBzdGF0dXMgYSBwb2ludGVyIHRvIGFuIGlucHV0LW91dHB1dCBVRXJyb3JD
b2RlCisgKiBAcmV0dXJuIHRoZSB0b3RhbCBidWZmZXIgc2l6ZSBuZWVkZWQ7IGlmIGdyZWF0ZXIg
dGhhbiByZXN1bHRMZW5ndGgsCisgKiB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisgKiBAc2Vl
IHVudW1fZm9ybWF0RG91YmxlCisgKiBAc2VlIHVudW1fcGFyc2VEb3VibGVDdXJyZW5jeQorICog
QHNlZSBVRmllbGRQb3NpdGlvbgorICogQHN0YWJsZSBJQ1UgMy4wCisgKi8KK1VfU1RBQkxFIGlu
dDMyX3QgVV9FWFBPUlQyIAordW51bV9mb3JtYXREb3VibGVDdXJyZW5jeShjb25zdCBVTnVtYmVy
Rm9ybWF0KiBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBudW1iZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyKiBjdXJyZW5jeSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgVUNoYXIqIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
MzJfdCByZXN1bHRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVGaWVsZFBvc2l0
aW9uKiBwb3MsIC8qIGlnbm9yZWQgaWYgMCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBV
RXJyb3JDb2RlKiBzdGF0dXMpOworCisvKioKKyogUGFyc2UgYSBzdHJpbmcgaW50byBhbiBpbnRl
Z2VyIHVzaW5nIGEgVU51bWJlckZvcm1hdC4KKyogVGhlIHN0cmluZyB3aWxsIGJlIHBhcnNlZCBh
Y2NvcmRpbmcgdG8gdGhlIFVOdW1iZXJGb3JtYXQncyBsb2NhbGUuCisqIEBwYXJhbSBmbXQgVGhl
IGZvcm1hdHRlciB0byB1c2UuCisqIEBwYXJhbSB0ZXh0IFRoZSB0ZXh0IHRvIHBhcnNlLgorKiBA
cGFyYW0gdGV4dExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRleHQsIG9yIC0xIGlmIG51bGwtdGVybWlu
YXRlZC4KKyogQHBhcmFtIHBhcnNlUG9zIElmIG5vdCAwLCBvbiBpbnB1dCBhIHBvaW50ZXIgdG8g
YW4gaW50ZWdlciBzcGVjaWZ5aW5nIHRoZSBvZmZzZXQgYXQgd2hpY2gKKyogdG8gYmVnaW4gcGFy
c2luZy4gIElmIG5vdCAwLCBvbiBvdXRwdXQgdGhlIG9mZnNldCBhdCB3aGljaCBwYXJzaW5nIGVu
ZGVkLgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2Vp
dmUgYW55IGVycm9ycworKiBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgcGFyc2VkIGludGVnZXIK
KyogQHNlZSB1bnVtX3BhcnNlSW50NjQKKyogQHNlZSB1bnVtX3BhcnNlRG91YmxlCisqIEBzZWUg
dW51bV9mb3JtYXQKKyogQHNlZSB1bnVtX2Zvcm1hdEludDY0CisqIEBzZWUgdW51bV9mb3JtYXRE
b3VibGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIg
Cit1bnVtX3BhcnNlKCAgICBjb25zdCAgIFVOdW1iZXJGb3JtYXQqICBmbXQsCisgICAgICAgIGNv
bnN0ICAgVUNoYXIqICAgICAgICAgIHRleHQsCisgICAgICAgIGludDMyX3QgICAgICAgICB0ZXh0
TGVuZ3RoLAorICAgICAgICBpbnQzMl90ICAgICAgICAgKnBhcnNlUG9zIC8qIDAgPSBzdGFydCAq
LywKKyAgICAgICAgVUVycm9yQ29kZSAgICAgICpzdGF0dXMpOworCisvKioKKyogUGFyc2UgYSBz
dHJpbmcgaW50byBhbiBpbnQ2NCB1c2luZyBhIFVOdW1iZXJGb3JtYXQuCisqIFRoZSBzdHJpbmcg
d2lsbCBiZSBwYXJzZWQgYWNjb3JkaW5nIHRvIHRoZSBVTnVtYmVyRm9ybWF0J3MgbG9jYWxlLgor
KiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gdXNlLgorKiBAcGFyYW0gdGV4dCBUaGUgdGV4
dCB0byBwYXJzZS4KKyogQHBhcmFtIHRleHRMZW5ndGggVGhlIGxlbmd0aCBvZiB0ZXh0LCBvciAt
MSBpZiBudWxsLXRlcm1pbmF0ZWQuCisqIEBwYXJhbSBwYXJzZVBvcyBJZiBub3QgMCwgb24gaW5w
dXQgYSBwb2ludGVyIHRvIGFuIGludGVnZXIgc3BlY2lmeWluZyB0aGUgb2Zmc2V0IGF0IHdoaWNo
CisqIHRvIGJlZ2luIHBhcnNpbmcuICBJZiBub3QgMCwgb24gb3V0cHV0IHRoZSBvZmZzZXQgYXQg
d2hpY2ggcGFyc2luZyBlbmRlZC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVy
cm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUgdmFsdWUgb2YgdGhl
IHBhcnNlZCBpbnRlZ2VyCisqIEBzZWUgdW51bV9wYXJzZQorKiBAc2VlIHVudW1fcGFyc2VEb3Vi
bGUKKyogQHNlZSB1bnVtX2Zvcm1hdAorKiBAc2VlIHVudW1fZm9ybWF0SW50NjQKKyogQHNlZSB1
bnVtX2Zvcm1hdERvdWJsZQorKiBAc3RhYmxlIElDVSAyLjgKKyovCitVX1NUQUJMRSBpbnQ2NF90
IFVfRVhQT1JUMiAKK3VudW1fcGFyc2VJbnQ2NChjb25zdCBVTnVtYmVyRm9ybWF0KiAgZm10LAor
ICAgICAgICBjb25zdCBVQ2hhciogIHRleHQsCisgICAgICAgIGludDMyX3QgICAgICAgdGV4dExl
bmd0aCwKKyAgICAgICAgaW50MzJfdCAgICAgICAqcGFyc2VQb3MgLyogMCA9IHN0YXJ0ICovLAor
ICAgICAgICBVRXJyb3JDb2RlICAgICpzdGF0dXMpOworCisvKioKKyogUGFyc2UgYSBzdHJpbmcg
aW50byBhIGRvdWJsZSB1c2luZyBhIFVOdW1iZXJGb3JtYXQuCisqIFRoZSBzdHJpbmcgd2lsbCBi
ZSBwYXJzZWQgYWNjb3JkaW5nIHRvIHRoZSBVTnVtYmVyRm9ybWF0J3MgbG9jYWxlLgorKiBAcGFy
YW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gdXNlLgorKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBw
YXJzZS4KKyogQHBhcmFtIHRleHRMZW5ndGggVGhlIGxlbmd0aCBvZiB0ZXh0LCBvciAtMSBpZiBu
dWxsLXRlcm1pbmF0ZWQuCisqIEBwYXJhbSBwYXJzZVBvcyBJZiBub3QgMCwgb24gaW5wdXQgYSBw
b2ludGVyIHRvIGFuIGludGVnZXIgc3BlY2lmeWluZyB0aGUgb2Zmc2V0IGF0IHdoaWNoCisqIHRv
IGJlZ2luIHBhcnNpbmcuICBJZiBub3QgMCwgb24gb3V0cHV0IHRoZSBvZmZzZXQgYXQgd2hpY2gg
cGFyc2luZyBlbmRlZC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29k
ZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUgdmFsdWUgb2YgdGhlIHBhcnNl
ZCBkb3VibGUKKyogQHNlZSB1bnVtX3BhcnNlCisqIEBzZWUgdW51bV9wYXJzZUludDY0CisqIEBz
ZWUgdW51bV9mb3JtYXQKKyogQHNlZSB1bnVtX2Zvcm1hdEludDY0CisqIEBzZWUgdW51bV9mb3Jt
YXREb3VibGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgZG91YmxlIFVfRVhQT1JU
MiAKK3VudW1fcGFyc2VEb3VibGUoICAgIGNvbnN0ICAgVU51bWJlckZvcm1hdCogIGZtdCwKKyAg
ICAgICAgICAgIGNvbnN0ICAgVUNoYXIqICAgICAgICAgIHRleHQsCisgICAgICAgICAgICBpbnQz
Ml90ICAgICAgICAgdGV4dExlbmd0aCwKKyAgICAgICAgICAgIGludDMyX3QgICAgICAgICAqcGFy
c2VQb3MgLyogMCA9IHN0YXJ0ICovLAorICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICpzdGF0
dXMpOworCisKKy8qKgorKiBQYXJzZSBhIG51bWJlciBmcm9tIGEgc3RyaW5nIGludG8gYW4gdW5m
b3JtYXR0ZWQgbnVtZXJpYyBzdHJpbmcgdXNpbmcgYSBVTnVtYmVyRm9ybWF0LgorKiBUaGUgaW5w
dXQgc3RyaW5nIHdpbGwgYmUgcGFyc2VkIGFjY29yZGluZyB0byB0aGUgVU51bWJlckZvcm1hdCdz
IGxvY2FsZS4KKyogVGhlIHN5bnRheCBvZiB0aGUgb3V0cHV0IGlzIGEgIm51bWVyaWMgc3RyaW5n
IgorKiBhcyBkZWZpbmVkIGluIHRoZSBEZWNpbWFsIEFyaXRobWV0aWMgU3BlY2lmaWNhdGlvbiwg
YXZhaWxhYmxlIGF0CisqIGh0dHA6Ly9zcGVsZW90cm92ZS5jb20vZGVjaW1hbAorKiBAcGFyYW0g
Zm10IFRoZSBmb3JtYXR0ZXIgdG8gdXNlLgorKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBwYXJz
ZS4KKyogQHBhcmFtIHRleHRMZW5ndGggVGhlIGxlbmd0aCBvZiB0ZXh0LCBvciAtMSBpZiBudWxs
LXRlcm1pbmF0ZWQuCisqIEBwYXJhbSBwYXJzZVBvcyBJZiBub3QgMCwgb24gaW5wdXQgYSBwb2lu
dGVyIHRvIGFuIGludGVnZXIgc3BlY2lmeWluZyB0aGUgb2Zmc2V0IGF0IHdoaWNoCisqICAgICAg
ICAgICAgICAgICB0byBiZWdpbiBwYXJzaW5nLiAgSWYgbm90IDAsIG9uIG91dHB1dCB0aGUgb2Zm
c2V0IGF0IHdoaWNoIHBhcnNpbmcgZW5kZWQuCisqIEBwYXJhbSBvdXRCdWYgQSAoY2hhciAqKSBi
dWZmZXIgdG8gcmVjZWl2ZSB0aGUgcGFyc2VkIG51bWJlciBhcyBhIHN0cmluZy4gIFRoZSBvdXRw
dXQgc3RyaW5nCisqICAgICAgICAgICAgICAgd2lsbCBiZSBudWwtdGVybWluYXRlZCBpZiB0aGVy
ZSBpcyBzdWZmaWNpZW50IHNwYWNlLgorKiBAcGFyYW0gb3V0QnVmTGVuZ3RoIFRoZSBzaXplIG9m
IHRoZSBvdXRwdXQgYnVmZmVyLiAgTWF5IGJlIHplcm8sIGluIHdoaWNoIGNhc2UKKyogICAgICAg
ICAgICAgICB0aGUgb3V0QnVmIHBvaW50ZXIgbWF5IGJlIE5VTEwsIGFuZCB0aGUgZnVuY3Rpb24g
d2lsbCByZXR1cm4gdGhlCisqICAgICAgICAgICAgICAgc2l6ZSBvZiB0aGUgb3V0cHV0IHN0cmlu
Zy4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZl
IGFueSBlcnJvcnMKKyogQHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBvdXRwdXQgc3RyaW5nLCBu
b3QgaW5jbHVkaW5nIGFueSB0ZXJtaW5hdGluZyBudWwuCisqIEBzZWUgdW51bV9wYXJzZQorKiBA
c2VlIHVudW1fcGFyc2VJbnQ2NAorKiBAc2VlIHVudW1fZm9ybWF0CisqIEBzZWUgdW51bV9mb3Jt
YXRJbnQ2NAorKiBAc2VlIHVudW1fZm9ybWF0RG91YmxlCisqIEBzdGFibGUgSUNVIDQuNAorKi8K
K1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordW51bV9wYXJzZURlY2ltYWwoY29uc3QgICBV
TnVtYmVyRm9ybWF0KiAgZm10LAorICAgICAgICAgICAgICAgICBjb25zdCAgIFVDaGFyKiAgICAg
ICAgICB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICB0ZXh0
TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAqcGFyc2VQ
b3MgLyogMCA9IHN0YXJ0ICovLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAg
ICAgICAqb3V0QnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICBv
dXRCdWZMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICpz
dGF0dXMpOworCisvKioKKyAqIFBhcnNlIGEgc3RyaW5nIGludG8gYSBkb3VibGUgYW5kIGEgY3Vy
cmVuY3kgdXNpbmcgYSBVTnVtYmVyRm9ybWF0LgorICogVGhlIHN0cmluZyB3aWxsIGJlIHBhcnNl
ZCBhY2NvcmRpbmcgdG8gdGhlIFVOdW1iZXJGb3JtYXQncyBsb2NhbGUuCisgKiBAcGFyYW0gZm10
IHRoZSBmb3JtYXR0ZXIgdG8gdXNlCisgKiBAcGFyYW0gdGV4dCB0aGUgdGV4dCB0byBwYXJzZQor
ICogQHBhcmFtIHRleHRMZW5ndGggdGhlIGxlbmd0aCBvZiB0ZXh0LCBvciAtMSBpZiBudWxsLXRl
cm1pbmF0ZWQKKyAqIEBwYXJhbSBwYXJzZVBvcyBhIHBvaW50ZXIgdG8gYW4gb2Zmc2V0IGluZGV4
IGludG8gdGV4dCBhdCB3aGljaCB0bworICogYmVnaW4gcGFyc2luZy4gT24gb3V0cHV0LCAqcGFy
c2VQb3Mgd2lsbCBwb2ludCBhZnRlciB0aGUgbGFzdAorICogcGFyc2VkIGNoYXJhY3Rlci4gIFRo
aXMgcGFyYW1ldGVyIG1heSBiZSAwLCBpbiB3aGljaCBjYXNlIHBhcnNpbmcKKyAqIGJlZ2lucyBh
dCBvZmZzZXQgMC4KKyAqIEBwYXJhbSBjdXJyZW5jeSBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0
byByZWNlaXZlIHRoZSBwYXJzZWQgbnVsbC0KKyAqIHRlcm1pbmF0ZWQgY3VycmVuY3kuICBUaGlz
IGJ1ZmZlciBtdXN0IGhhdmUgYSBjYXBhY2l0eSBvZiBhdCBsZWFzdAorICogNCBVQ2hhcnMuCisg
KiBAcGFyYW0gc3RhdHVzIGEgcG9pbnRlciB0byBhbiBpbnB1dC1vdXRwdXQgVUVycm9yQ29kZQor
ICogQHJldHVybiB0aGUgcGFyc2VkIGRvdWJsZQorICogQHNlZSB1bnVtX3BhcnNlRG91YmxlCisg
KiBAc2VlIHVudW1fZm9ybWF0RG91YmxlQ3VycmVuY3kKKyAqIEBzdGFibGUgSUNVIDMuMAorICov
CitVX1NUQUJMRSBkb3VibGUgVV9FWFBPUlQyCit1bnVtX3BhcnNlRG91YmxlQ3VycmVuY3koY29u
c3QgVU51bWJlckZvcm1hdCogZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVD
aGFyKiB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgdGV4dExlbmd0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90KiBwYXJzZVBvcywgLyogMCA9IHN0YXJ0
ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIqIGN1cnJlbmN5LAorICAgICAgICAg
ICAgICAgICAgICAgICAgIFVFcnJvckNvZGUqIHN0YXR1cyk7CisKKy8qKgorICogU2V0IHRoZSBw
YXR0ZXJuIHVzZWQgYnkgYSBVTnVtYmVyRm9ybWF0LiAgVGhpcyBjYW4gb25seSBiZSB1c2VkCisg
KiBvbiBhIERlY2ltYWxGb3JtYXQsIG90aGVyIGZvcm1hdHMgcmV0dXJuIFVfSUxMRUdBTF9BUkdV
TUVOVF9FUlJPUgorICogaW4gdGhlIHN0YXR1cy4KKyAqIEBwYXJhbSBmb3JtYXQgVGhlIGZvcm1h
dHRlciB0byBzZXQuCisgKiBAcGFyYW0gbG9jYWxpemVkIFRSVUUgaWYgdGhlIHBhdHRlcm4gaXMg
bG9jYWxpemVkLCBGQUxTRSBvdGhlcndpc2UuCisgKiBAcGFyYW0gcGF0dGVybiBUaGUgbmV3IHBh
dHRlcm4KKyAqIEBwYXJhbSBwYXR0ZXJuTGVuZ3RoIFRoZSBsZW5ndGggb2YgcGF0dGVybiwgb3Ig
LTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorICogQHBhcmFtIHBhcnNlRXJyb3IgQSBwb2ludGVyIHRv
IFVQYXJzZUVycm9yIHRvIHJlY2lldmUgaW5mb3JtYXRpb24KKyAqIGFib3V0IGVycm9ycyBvY2N1
cnJlZCBkdXJpbmcgcGFyc2luZywgb3IgTlVMTCBpZiBubyBwYXJzZSBlcnJvcgorICogaW5mb3Jt
YXRpb24gaXMgZGVzaXJlZC4KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIGlucHV0
LW91dHB1dCBVRXJyb3JDb2RlLgorICogQHNlZSB1bnVtX3RvUGF0dGVybgorICogQHNlZSBEZWNp
bWFsRm9ybWF0CisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9S
VDIgCit1bnVtX2FwcGx5UGF0dGVybiggICAgICAgICAgVU51bWJlckZvcm1hdCAgKmZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCAgICAgICAgICBsb2NhbGl6ZWQsCisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0ICAgVUNoYXIgICAgICAgICAgKnBhdHRlcm4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgIHBhdHRlcm5MZW5ndGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBhcnNlRXJyb3IgICAgKnBhcnNlRXJyb3IsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgKnN0YXR1cworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKworLyoqCisqIEdldCBhIGxvY2FsZSBm
b3Igd2hpY2ggZGVjaW1hbCBmb3JtYXR0aW5nIHBhdHRlcm5zIGFyZSBhdmFpbGFibGUuCisqIEEg
VU51bWJlckZvcm1hdCBpbiBhIGxvY2FsZSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIHdpbGwg
cGVyZm9ybSB0aGUgY29ycmVjdAorKiBmb3JtYXR0aW5nIGFuZCBwYXJzaW5nIGZvciB0aGUgbG9j
YWxlLiAgVGhlIHJlc3VsdHMgb2YgdGhpcyBjYWxsIGFyZSBub3QKKyogdmFsaWQgZm9yIHJ1bGUt
YmFzZWQgbnVtYmVyIGZvcm1hdHMuCisqIEBwYXJhbSBsb2NhbGVJbmRleCBUaGUgaW5kZXggb2Yg
dGhlIGRlc2lyZWQgbG9jYWxlLgorKiBAcmV0dXJuIEEgbG9jYWxlIGZvciB3aGljaCBudW1iZXIg
Zm9ybWF0dGluZyBwYXR0ZXJucyBhcmUgYXZhaWxhYmxlLCBvciAwIGlmIG5vbmUuCisqIEBzZWUg
dW51bV9jb3VudEF2YWlsYWJsZQorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBjb25z
dCBjaGFyKiBVX0VYUE9SVDIgCit1bnVtX2dldEF2YWlsYWJsZShpbnQzMl90IGxvY2FsZUluZGV4
KTsKKworLyoqCisqIERldGVybWluZSBob3cgbWFueSBsb2NhbGVzIGhhdmUgZGVjaW1hbCBmb3Jt
YXR0aW5nIHBhdHRlcm5zIGF2YWlsYWJsZS4gIFRoZQorKiByZXN1bHRzIG9mIHRoaXMgY2FsbCBh
cmUgbm90IHZhbGlkIGZvciBydWxlLWJhc2VkIG51bWJlciBmb3JtYXRzLgorKiBUaGlzIGZ1bmN0
aW9uIGlzIHVzZWZ1bCBmb3IgZGV0ZXJtaW5pbmcgdGhlIGxvb3AgZW5kaW5nIGNvbmRpdGlvbiBm
b3IKKyogY2FsbHMgdG8ge0BsaW5rICN1bnVtX2dldEF2YWlsYWJsZSB9LgorKiBAcmV0dXJuIFRo
ZSBudW1iZXIgb2YgbG9jYWxlcyBmb3Igd2hpY2ggZGVjaW1hbCBmb3JtYXR0aW5nIHBhdHRlcm5z
IGFyZSBhdmFpbGFibGUuCisqIEBzZWUgdW51bV9nZXRBdmFpbGFibGUKKyogQHN0YWJsZSBJQ1Ug
Mi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1bnVtX2NvdW50QXZhaWxhYmxl
KHZvaWQpOworCisvKiogVGhlIHBvc3NpYmxlIFVOdW1iZXJGb3JtYXQgbnVtZXJpYyBhdHRyaWJ1
dGVzIEBzdGFibGUgSUNVIDIuMCAqLwordHlwZWRlZiBlbnVtIFVOdW1iZXJGb3JtYXRBdHRyaWJ1
dGUgeworICAvKiogUGFyc2UgaW50ZWdlcnMgb25seSAqLworICBVTlVNX1BBUlNFX0lOVF9PTkxZ
LAorICAvKiogVXNlIGdyb3VwaW5nIHNlcGFyYXRvciAqLworICBVTlVNX0dST1VQSU5HX1VTRUQs
CisgIC8qKiBBbHdheXMgc2hvdyBkZWNpbWFsIHBvaW50ICovCisgIFVOVU1fREVDSU1BTF9BTFdB
WVNfU0hPV04sCisgIC8qKiBNYXhpbXVtIGludGVnZXIgZGlnaXRzICovCisgIFVOVU1fTUFYX0lO
VEVHRVJfRElHSVRTLAorICAvKiogTWluaW11bSBpbnRlZ2VyIGRpZ2l0cyAqLworICBVTlVNX01J
Tl9JTlRFR0VSX0RJR0lUUywKKyAgLyoqIEludGVnZXIgZGlnaXRzICovCisgIFVOVU1fSU5URUdF
Ul9ESUdJVFMsCisgIC8qKiBNYXhpbXVtIGZyYWN0aW9uIGRpZ2l0cyAqLworICBVTlVNX01BWF9G
UkFDVElPTl9ESUdJVFMsCisgIC8qKiBNaW5pbXVtIGZyYWN0aW9uIGRpZ2l0cyAqLworICBVTlVN
X01JTl9GUkFDVElPTl9ESUdJVFMsCisgIC8qKiBGcmFjdGlvbiBkaWdpdHMgKi8KKyAgVU5VTV9G
UkFDVElPTl9ESUdJVFMsCisgIC8qKiBNdWx0aXBsaWVyICovCisgIFVOVU1fTVVMVElQTElFUiwK
KyAgLyoqIEdyb3VwaW5nIHNpemUgKi8KKyAgVU5VTV9HUk9VUElOR19TSVpFLAorICAvKiogUm91
bmRpbmcgTW9kZSAqLworICBVTlVNX1JPVU5ESU5HX01PREUsCisgIC8qKiBSb3VuZGluZyBpbmNy
ZW1lbnQgKi8KKyAgVU5VTV9ST1VORElOR19JTkNSRU1FTlQsCisgIC8qKiBUaGUgd2lkdGggdG8g
d2hpY2ggdGhlIG91dHB1dCBvZiA8Y29kZT5mb3JtYXQoKTwvY29kZT4gaXMgcGFkZGVkLiAqLwor
ICBVTlVNX0ZPUk1BVF9XSURUSCwKKyAgLyoqIFRoZSBwb3NpdGlvbiBhdCB3aGljaCBwYWRkaW5n
IHdpbGwgdGFrZSBwbGFjZS4gKi8KKyAgVU5VTV9QQURESU5HX1BPU0lUSU9OLAorICAvKiogU2Vj
b25kYXJ5IGdyb3VwaW5nIHNpemUgKi8KKyAgVU5VTV9TRUNPTkRBUllfR1JPVVBJTkdfU0laRSwK
KyAgLyoqIFVzZSBzaWduaWZpY2FudCBkaWdpdHMKKyAgICogQHN0YWJsZSBJQ1UgMy4wICovCisg
IFVOVU1fU0lHTklGSUNBTlRfRElHSVRTX1VTRUQsCisgIC8qKiBNaW5pbXVtIHNpZ25pZmljYW50
IGRpZ2l0cworICAgKiBAc3RhYmxlIElDVSAzLjAgKi8KKyAgVU5VTV9NSU5fU0lHTklGSUNBTlRf
RElHSVRTLAorICAvKiogTWF4aW11bSBzaWduaWZpY2FudCBkaWdpdHMKKyAgICogQHN0YWJsZSBJ
Q1UgMy4wICovCisgIFVOVU1fTUFYX1NJR05JRklDQU5UX0RJR0lUUywKKyAgLyoqIExlbmllbnQg
cGFyc2UgbW9kZSB1c2VkIGJ5IHJ1bGUtYmFzZWQgZm9ybWF0cy4KKyAgICogQHN0YWJsZSBJQ1Ug
My4wCisgICAqLworICBVTlVNX0xFTklFTlRfUEFSU0UKK30gVU51bWJlckZvcm1hdEF0dHJpYnV0
ZTsKKworLyoqCisqIEdldCBhIG51bWVyaWMgYXR0cmlidXRlIGFzc29jaWF0ZWQgd2l0aCBhIFVO
dW1iZXJGb3JtYXQuCisqIEFuIGV4YW1wbGUgb2YgYSBudW1lcmljIGF0dHJpYnV0ZSBpcyB0aGUg
bnVtYmVyIG9mIGludGVnZXIgZGlnaXRzIGEgZm9ybWF0dGVyIHdpbGwgcHJvZHVjZS4KKyogQHBh
cmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHF1ZXJ5LgorKiBAcGFyYW0gYXR0ciBUaGUgYXR0cmli
dXRlIHRvIHF1ZXJ5OyBvbmUgb2YgVU5VTV9QQVJTRV9JTlRfT05MWSwgVU5VTV9HUk9VUElOR19V
U0VELAorKiBVTlVNX0RFQ0lNQUxfQUxXQVlTX1NIT1dOLCBVTlVNX01BWF9JTlRFR0VSX0RJR0lU
UywgVU5VTV9NSU5fSU5URUdFUl9ESUdJVFMsIFVOVU1fSU5URUdFUl9ESUdJVFMsCisqIFVOVU1f
TUFYX0ZSQUNUSU9OX0RJR0lUUywgVU5VTV9NSU5fRlJBQ1RJT05fRElHSVRTLCBVTlVNX0ZSQUNU
SU9OX0RJR0lUUywgVU5VTV9NVUxUSVBMSUVSLAorKiBVTlVNX0dST1VQSU5HX1NJWkUsIFVOVU1f
Uk9VTkRJTkdfTU9ERSwgVU5VTV9GT1JNQVRfV0lEVEgsIFVOVU1fUEFERElOR19QT1NJVElPTiwg
VU5VTV9TRUNPTkRBUllfR1JPVVBJTkdfU0laRS4KKyogQHJldHVybiBUaGUgdmFsdWUgb2YgYXR0
ci4KKyogQHNlZSB1bnVtX3NldEF0dHJpYnV0ZQorKiBAc2VlIHVudW1fZ2V0RG91YmxlQXR0cmli
dXRlCisqIEBzZWUgdW51bV9zZXREb3VibGVBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX2dldFRleHRB
dHRyaWJ1dGUKKyogQHNlZSB1bnVtX3NldFRleHRBdHRyaWJ1dGUKKyogQHN0YWJsZSBJQ1UgMi4w
CisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1bnVtX2dldEF0dHJpYnV0ZShjb25z
dCBVTnVtYmVyRm9ybWF0KiAgICAgICAgICBmbXQsCisgICAgICAgICAgVU51bWJlckZvcm1hdEF0
dHJpYnV0ZSAgYXR0cik7CisKKy8qKgorKiBTZXQgYSBudW1lcmljIGF0dHJpYnV0ZSBhc3NvY2lh
dGVkIHdpdGggYSBVTnVtYmVyRm9ybWF0LgorKiBBbiBleGFtcGxlIG9mIGEgbnVtZXJpYyBhdHRy
aWJ1dGUgaXMgdGhlIG51bWJlciBvZiBpbnRlZ2VyIGRpZ2l0cyBhIGZvcm1hdHRlciB3aWxsIHBy
b2R1Y2UuICBJZiB0aGUKKyogZm9ybWF0dGVyIGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlIGF0dHJp
YnV0ZSwgdGhlIGNhbGwgaXMgaWdub3JlZC4gIFJ1bGUtYmFzZWQgZm9ybWF0dGVycyBvbmx5IHVu
ZGVyc3RhbmQKKyogdGhlIGxlbmllbnQtcGFyc2UgYXR0cmlidXRlLgorKiBAcGFyYW0gZm10IFRo
ZSBmb3JtYXR0ZXIgdG8gc2V0LgorKiBAcGFyYW0gYXR0ciBUaGUgYXR0cmlidXRlIHRvIHNldDsg
b25lIG9mIFVOVU1fUEFSU0VfSU5UX09OTFksIFVOVU1fR1JPVVBJTkdfVVNFRCwKKyogVU5VTV9E
RUNJTUFMX0FMV0FZU19TSE9XTiwgVU5VTV9NQVhfSU5URUdFUl9ESUdJVFMsIFVOVU1fTUlOX0lO
VEVHRVJfRElHSVRTLCBVTlVNX0lOVEVHRVJfRElHSVRTLAorKiBVTlVNX01BWF9GUkFDVElPTl9E
SUdJVFMsIFVOVU1fTUlOX0ZSQUNUSU9OX0RJR0lUUywgVU5VTV9GUkFDVElPTl9ESUdJVFMsIFVO
VU1fTVVMVElQTElFUiwKKyogVU5VTV9HUk9VUElOR19TSVpFLCBVTlVNX1JPVU5ESU5HX01PREUs
IFVOVU1fRk9STUFUX1dJRFRILCBVTlVNX1BBRERJTkdfUE9TSVRJT04sIFVOVU1fU0VDT05EQVJZ
X0dST1VQSU5HX1NJWkUsCisqIG9yIFVOVU1fTEVOSUVOVF9QQVJTRS4KKyogQHBhcmFtIG5ld1Zh
bHVlIFRoZSBuZXcgdmFsdWUgb2YgYXR0ci4KKyogQHNlZSB1bnVtX2dldEF0dHJpYnV0ZQorKiBA
c2VlIHVudW1fZ2V0RG91YmxlQXR0cmlidXRlCisqIEBzZWUgdW51bV9zZXREb3VibGVBdHRyaWJ1
dGUKKyogQHNlZSB1bnVtX2dldFRleHRBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX3NldFRleHRBdHRy
aWJ1dGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1
bnVtX3NldEF0dHJpYnV0ZSggICAgVU51bWJlckZvcm1hdCogICAgICAgICAgZm10LAorICAgICAg
ICAgICAgVU51bWJlckZvcm1hdEF0dHJpYnV0ZSAgYXR0ciwKKyAgICAgICAgICAgIGludDMyX3Qg
ICAgICAgICAgICAgICAgIG5ld1ZhbHVlKTsKKworCisvKioKKyogR2V0IGEgbnVtZXJpYyBhdHRy
aWJ1dGUgYXNzb2NpYXRlZCB3aXRoIGEgVU51bWJlckZvcm1hdC4KKyogQW4gZXhhbXBsZSBvZiBh
IG51bWVyaWMgYXR0cmlidXRlIGlzIHRoZSBudW1iZXIgb2YgaW50ZWdlciBkaWdpdHMgYSBmb3Jt
YXR0ZXIgd2lsbCBwcm9kdWNlLgorKiBJZiB0aGUgZm9ybWF0dGVyIGRvZXMgbm90IHVuZGVyc3Rh
bmQgdGhlIGF0dHJpYnV0ZSwgLTEgaXMgcmV0dXJuZWQuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1h
dHRlciB0byBxdWVyeS4KKyogQHBhcmFtIGF0dHIgVGhlIGF0dHJpYnV0ZSB0byBxdWVyeTsgZS5n
LiBVTlVNX1JPVU5ESU5HX0lOQ1JFTUVOVC4KKyogQHJldHVybiBUaGUgdmFsdWUgb2YgYXR0ci4K
KyogQHNlZSB1bnVtX2dldEF0dHJpYnV0ZQorKiBAc2VlIHVudW1fc2V0QXR0cmlidXRlCisqIEBz
ZWUgdW51bV9zZXREb3VibGVBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX2dldFRleHRBdHRyaWJ1dGUK
KyogQHNlZSB1bnVtX3NldFRleHRBdHRyaWJ1dGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9T
VEFCTEUgZG91YmxlIFVfRVhQT1JUMiAKK3VudW1fZ2V0RG91YmxlQXR0cmlidXRlKGNvbnN0IFVO
dW1iZXJGb3JtYXQqICAgICAgICAgIGZtdCwKKyAgICAgICAgICBVTnVtYmVyRm9ybWF0QXR0cmli
dXRlICBhdHRyKTsKKworLyoqCisqIFNldCBhIG51bWVyaWMgYXR0cmlidXRlIGFzc29jaWF0ZWQg
d2l0aCBhIFVOdW1iZXJGb3JtYXQuCisqIEFuIGV4YW1wbGUgb2YgYSBudW1lcmljIGF0dHJpYnV0
ZSBpcyB0aGUgbnVtYmVyIG9mIGludGVnZXIgZGlnaXRzIGEgZm9ybWF0dGVyIHdpbGwgcHJvZHVj
ZS4KKyogSWYgdGhlIGZvcm1hdHRlciBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoZSBhdHRyaWJ1dGUs
IHRoaXMgY2FsbCBpcyBpZ25vcmVkLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gc2V0
LgorKiBAcGFyYW0gYXR0ciBUaGUgYXR0cmlidXRlIHRvIHNldDsgZS5nLiBVTlVNX1JPVU5ESU5H
X0lOQ1JFTUVOVC4KKyogQHBhcmFtIG5ld1ZhbHVlIFRoZSBuZXcgdmFsdWUgb2YgYXR0ci4KKyog
QHNlZSB1bnVtX2dldEF0dHJpYnV0ZQorKiBAc2VlIHVudW1fc2V0QXR0cmlidXRlCisqIEBzZWUg
dW51bV9nZXREb3VibGVBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX2dldFRleHRBdHRyaWJ1dGUKKyog
QHNlZSB1bnVtX3NldFRleHRBdHRyaWJ1dGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFC
TEUgdm9pZCBVX0VYUE9SVDIgCit1bnVtX3NldERvdWJsZUF0dHJpYnV0ZSggICAgVU51bWJlckZv
cm1hdCogICAgICAgICAgZm10LAorICAgICAgICAgICAgVU51bWJlckZvcm1hdEF0dHJpYnV0ZSAg
YXR0ciwKKyAgICAgICAgICAgIGRvdWJsZSAgICAgICAgICAgICAgICAgbmV3VmFsdWUpOworCisv
KiogVGhlIHBvc3NpYmxlIFVOdW1iZXJGb3JtYXQgdGV4dCBhdHRyaWJ1dGVzIEBzdGFibGUgSUNV
IDIuMCovCit0eXBlZGVmIGVudW0gVU51bWJlckZvcm1hdFRleHRBdHRyaWJ1dGUgeworICAvKiog
UG9zaXRpdmUgcHJlZml4ICovCisgIFVOVU1fUE9TSVRJVkVfUFJFRklYLAorICAvKiogUG9zaXRp
dmUgc3VmZml4ICovCisgIFVOVU1fUE9TSVRJVkVfU1VGRklYLAorICAvKiogTmVnYXRpdmUgcHJl
Zml4ICovCisgIFVOVU1fTkVHQVRJVkVfUFJFRklYLAorICAvKiogTmVnYXRpdmUgc3VmZml4ICov
CisgIFVOVU1fTkVHQVRJVkVfU1VGRklYLAorICAvKiogVGhlIGNoYXJhY3RlciB1c2VkIHRvIHBh
ZCB0byB0aGUgZm9ybWF0IHdpZHRoLiAqLworICBVTlVNX1BBRERJTkdfQ0hBUkFDVEVSLAorICAv
KiogVGhlIElTTyBjdXJyZW5jeSBjb2RlICovCisgIFVOVU1fQ1VSUkVOQ1lfQ09ERSwKKyAgLyoq
CisgICAqIFRoZSBkZWZhdWx0IHJ1bGUgc2V0LiAgVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSB3aXRo
IHJ1bGUtYmFzZWQgZm9ybWF0dGVycy4KKyAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAqLworICBV
TlVNX0RFRkFVTFRfUlVMRVNFVCwKKyAgLyoqCisgICAqIFRoZSBwdWJsaWMgcnVsZSBzZXRzLiAg
VGhpcyBpcyBvbmx5IGF2YWlsYWJsZSB3aXRoIHJ1bGUtYmFzZWQgZm9ybWF0dGVycy4KKyAgICog
VGhpcyBpcyBhIHJlYWQtb25seSBhdHRyaWJ1dGUuICBUaGUgcHVibGljIHJ1bGVzZXRzIGFyZSBy
ZXR1cm5lZCBhcyBhCisgICAqIHNpbmdsZSBzdHJpbmcsIHdpdGggZWFjaCBydWxlc2V0IG5hbWUg
ZGVsaW1pdGVkIGJ5ICc7JyAoc2VtaWNvbG9uKS4KKyAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAq
LworICBVTlVNX1BVQkxJQ19SVUxFU0VUUworfSBVTnVtYmVyRm9ybWF0VGV4dEF0dHJpYnV0ZTsK
KworLyoqCisqIEdldCBhIHRleHQgYXR0cmlidXRlIGFzc29jaWF0ZWQgd2l0aCBhIFVOdW1iZXJG
b3JtYXQuCisqIEFuIGV4YW1wbGUgb2YgYSB0ZXh0IGF0dHJpYnV0ZSBpcyB0aGUgc3VmZml4IGZv
ciBwb3NpdGl2ZSBudW1iZXJzLiAgSWYgdGhlIGZvcm1hdHRlcgorKiBkb2VzIG5vdCB1bmRlcnN0
YW5kIHRoZSBhdHRyaWJ1dHJlLCBVX1VOU1VQUE9SVEVEX0VSUk9SIGlzIHJldHVybmVkIGFzIHRo
ZSBzdGF0dXMuCisqIFJ1bGUtYmFzZWQgZm9ybWF0dGVycyBvbmx5IHVuZGVyc3RhbmQgVU5VTV9E
RUZBVUxUX1JVTEVTRVQgYW5kIFVOVU1fUFVCTElDX1JVTEVTRVRTLgorKiBAcGFyYW0gZm10IFRo
ZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisqIEBwYXJhbSB0YWcgVGhlIGF0dHJpYnV0ZSB0byBxdWVy
eTsgb25lIG9mIFVOVU1fUE9TSVRJVkVfUFJFRklYLCBVTlVNX1BPU0lUSVZFX1NVRkZJWCwKKyog
VU5VTV9ORUdBVElWRV9QUkVGSVgsIFVOVU1fTkVHQVRJVkVfU1VGRklYLCBVTlVNX1BBRERJTkdf
Q0hBUkFDVEVSLCBVTlVNX0NVUlJFTkNZX0NPREUsCisqIFVOVU1fREVGQVVMVF9SVUxFU0VULCBv
ciBVTlVNX1BVQkxJQ19SVUxFU0VUUy4KKyogQHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8gYSBi
dWZmZXIgdG8gcmVjZWl2ZSB0aGUgYXR0cmlidXRlLgorKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIFRo
ZSBtYXhpbXVtIHNpemUgb2YgcmVzdWx0LgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBh
biBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAcmV0dXJuIFRoZSB0b3RhbCBi
dWZmZXIgc2l6ZSBuZWVkZWQ7IGlmIGdyZWF0ZXIgdGhhbiByZXN1bHRMZW5ndGgsIHRoZSBvdXRw
dXQgd2FzIHRydW5jYXRlZC4KKyogQHNlZSB1bnVtX3NldFRleHRBdHRyaWJ1dGUKKyogQHNlZSB1
bnVtX2dldEF0dHJpYnV0ZQorKiBAc2VlIHVudW1fc2V0QXR0cmlidXRlCisqIEBzdGFibGUgSUNV
IDIuMAorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordW51bV9nZXRUZXh0QXR0cmli
dXRlKCAgICBjb25zdCAgICBVTnVtYmVyRm9ybWF0KiAgICAgICAgICAgICAgICAgICAgZm10LAor
ICAgICAgICAgICAgVU51bWJlckZvcm1hdFRleHRBdHRyaWJ1dGUgICAgICB0YWcsCisgICAgICAg
ICAgICBVQ2hhciogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LAorICAgICAgICAg
ICAgaW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRMZW5ndGgsCisgICAg
ICAgICAgICBVRXJyb3JDb2RlKiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyk7CisKKy8q
KgorKiBTZXQgYSB0ZXh0IGF0dHJpYnV0ZSBhc3NvY2lhdGVkIHdpdGggYSBVTnVtYmVyRm9ybWF0
LgorKiBBbiBleGFtcGxlIG9mIGEgdGV4dCBhdHRyaWJ1dGUgaXMgdGhlIHN1ZmZpeCBmb3IgcG9z
aXRpdmUgbnVtYmVycy4gIFJ1bGUtYmFzZWQgZm9ybWF0dGVycworKiBvbmx5IHVuZGVyc3RhbmQg
VU5VTV9ERUZBVUxUX1JVTEVTRVQuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBzZXQu
CisqIEBwYXJhbSB0YWcgVGhlIGF0dHJpYnV0ZSB0byBzZXQ7IG9uZSBvZiBVTlVNX1BPU0lUSVZF
X1BSRUZJWCwgVU5VTV9QT1NJVElWRV9TVUZGSVgsCisqIFVOVU1fTkVHQVRJVkVfUFJFRklYLCBV
TlVNX05FR0FUSVZFX1NVRkZJWCwgVU5VTV9QQURESU5HX0NIQVJBQ1RFUiwgVU5VTV9DVVJSRU5D
WV9DT0RFLAorKiBvciBVTlVNX0RFRkFVTFRfUlVMRVNFVC4KKyogQHBhcmFtIG5ld1ZhbHVlIFRo
ZSBuZXcgdmFsdWUgb2YgYXR0ci4KKyogQHBhcmFtIG5ld1ZhbHVlTGVuZ3RoIFRoZSBsZW5ndGgg
b2YgbmV3VmFsdWUsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyogQHBhcmFtIHN0YXR1cyBB
IHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHNlZSB1
bnVtX2dldFRleHRBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX2dldEF0dHJpYnV0ZQorKiBAc2VlIHVu
dW1fc2V0QXR0cmlidXRlCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIHZvaWQgVV9F
WFBPUlQyIAordW51bV9zZXRUZXh0QXR0cmlidXRlKCAgICBVTnVtYmVyRm9ybWF0KiAgICAgICAg
ICAgICAgICAgICAgZm10LAorICAgICAgICAgICAgVU51bWJlckZvcm1hdFRleHRBdHRyaWJ1dGUg
ICAgICB0YWcsCisgICAgICAgICAgICBjb25zdCAgICBVQ2hhciogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3VmFsdWUsCisgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5ld1ZhbHVlTGVuZ3RoLAorICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICAg
ICAgICAgICAgICAgICAgICpzdGF0dXMpOworCisvKioKKyAqIEV4dHJhY3QgdGhlIHBhdHRlcm4g
ZnJvbSBhIFVOdW1iZXJGb3JtYXQuICBUaGUgcGF0dGVybiB3aWxsIGZvbGxvdworICogdGhlIERl
Y2ltYWxGb3JtYXQgcGF0dGVybiBzeW50YXguCisgKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIg
dG8gcXVlcnkuCisgKiBAcGFyYW0gaXNQYXR0ZXJuTG9jYWxpemVkIFRSVUUgaWYgdGhlIHBhdHRl
cm4gc2hvdWxkIGJlIGxvY2FsaXplZCwKKyAqIEZBTFNFIG90aGVyd2lzZS4gIFRoaXMgaXMgaWdu
b3JlZCBpZiB0aGUgZm9ybWF0dGVyIGlzIGEgcnVsZS1iYXNlZAorICogZm9ybWF0dGVyLgorICog
QHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgcGF0dGVy
bi4KKyAqIEBwYXJhbSByZXN1bHRMZW5ndGggVGhlIG1heGltdW0gc2l6ZSBvZiByZXN1bHQuCisg
KiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBpbnB1dC1vdXRwdXQgVUVycm9yQ29kZS4K
KyAqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFu
IHJlc3VsdExlbmd0aCwKKyAqIHRoZSBvdXRwdXQgd2FzIHRydW5jYXRlZC4KKyAqIEBzZWUgdW51
bV9hcHBseVBhdHRlcm4KKyAqIEBzZWUgRGVjaW1hbEZvcm1hdAorICogQHN0YWJsZSBJQ1UgMi4w
CisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordW51bV90b1BhdHRlcm4oICAgIGNv
bnN0ICAgIFVOdW1iZXJGb3JtYXQqICAgICAgICAgIGZtdCwKKyAgICAgICAgVUJvb2wgICAgICAg
ICAgICAgICAgICBpc1BhdHRlcm5Mb2NhbGl6ZWQsCisgICAgICAgIFVDaGFyKiAgICAgICAgICAg
ICAgICAgIHJlc3VsdCwKKyAgICAgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgcmVzdWx0TGVu
Z3RoLAorICAgICAgICBVRXJyb3JDb2RlKiAgICAgICAgICAgICBzdGF0dXMpOworCisKKy8qKgor
ICogQ29uc3RhbnRzIGZvciBzcGVjaWZ5aW5nIGEgbnVtYmVyIGZvcm1hdCBzeW1ib2wuCisgKiBA
c3RhYmxlIElDVSAyLjAKKyAqLwordHlwZWRlZiBlbnVtIFVOdW1iZXJGb3JtYXRTeW1ib2wgewor
ICAvKiogVGhlIGRlY2ltYWwgc2VwYXJhdG9yICovCisgIFVOVU1fREVDSU1BTF9TRVBBUkFUT1Jf
U1lNQk9MID0gMCwKKyAgLyoqIFRoZSBncm91cGluZyBzZXBhcmF0b3IgKi8KKyAgVU5VTV9HUk9V
UElOR19TRVBBUkFUT1JfU1lNQk9MID0gMSwKKyAgLyoqIFRoZSBwYXR0ZXJuIHNlcGFyYXRvciAq
LworICBVTlVNX1BBVFRFUk5fU0VQQVJBVE9SX1NZTUJPTCA9IDIsCisgIC8qKiBUaGUgcGVyY2Vu
dCBzaWduICovCisgIFVOVU1fUEVSQ0VOVF9TWU1CT0wgPSAzLAorICAvKiogWmVybyovCisgIFVO
VU1fWkVST19ESUdJVF9TWU1CT0wgPSA0LAorICAvKiogQ2hhcmFjdGVyIHJlcHJlc2VudGluZyBh
IGRpZ2l0IGluIHRoZSBwYXR0ZXJuICovCisgIFVOVU1fRElHSVRfU1lNQk9MID0gNSwKKyAgLyoq
IFRoZSBtaW51cyBzaWduICovCisgIFVOVU1fTUlOVVNfU0lHTl9TWU1CT0wgPSA2LAorICAvKiog
VGhlIHBsdXMgc2lnbiAqLworICBVTlVNX1BMVVNfU0lHTl9TWU1CT0wgPSA3LAorICAvKiogVGhl
IGN1cnJlbmN5IHN5bWJvbCAqLworICBVTlVNX0NVUlJFTkNZX1NZTUJPTCA9IDgsCisgIC8qKiBU
aGUgaW50ZXJuYXRpb25hbCBjdXJyZW5jeSBzeW1ib2wgKi8KKyAgVU5VTV9JTlRMX0NVUlJFTkNZ
X1NZTUJPTCA9IDksCisgIC8qKiBUaGUgbW9uZXRhcnkgc2VwYXJhdG9yICovCisgIFVOVU1fTU9O
RVRBUllfU0VQQVJBVE9SX1NZTUJPTCA9IDEwLAorICAvKiogVGhlIGV4cG9uZW50aWFsIHN5bWJv
bCAqLworICBVTlVNX0VYUE9ORU5USUFMX1NZTUJPTCA9IDExLAorICAvKiogUGVyIG1pbGwgc3lt
Ym9sICovCisgIFVOVU1fUEVSTUlMTF9TWU1CT0wgPSAxMiwKKyAgLyoqIEVzY2FwZSBwYWRkaW5n
IGNoYXJhY3RlciAqLworICBVTlVNX1BBRF9FU0NBUEVfU1lNQk9MID0gMTMsCisgIC8qKiBJbmZp
bml0eSBzeW1ib2wgKi8KKyAgVU5VTV9JTkZJTklUWV9TWU1CT0wgPSAxNCwKKyAgLyoqIE5hbiBz
eW1ib2wgKi8KKyAgVU5VTV9OQU5fU1lNQk9MID0gMTUsCisgIC8qKiBTaWduaWZpY2FudCBkaWdp
dCBzeW1ib2wKKyAgICogQHN0YWJsZSBJQ1UgMy4wICovCisgIFVOVU1fU0lHTklGSUNBTlRfRElH
SVRfU1lNQk9MID0gMTYsCisgIC8qKiBUaGUgbW9uZXRhcnkgZ3JvdXBpbmcgc2VwYXJhdG9yIAor
ICAgKiBAc3RhYmxlIElDVSAzLjYKKyAgICovCisgIFVOVU1fTU9ORVRBUllfR1JPVVBJTkdfU0VQ
QVJBVE9SX1NZTUJPTCA9IDE3LCAgCisgIC8qKiBPbmUKKyAgICogQGRyYWZ0IElDVSA0LjYKKyAg
ICovCisgIFVOVU1fT05FX0RJR0lUX1NZTUJPTCA9IDE4LAorICAvKiogVHdvCisgICAqIEBkcmFm
dCBJQ1UgNC42CisgICAqLworICBVTlVNX1RXT19ESUdJVF9TWU1CT0wgPSAxOSwKKyAgLyoqIFRo
cmVlCisgICAqIEBkcmFmdCBJQ1UgNC42CisgICAqLworICBVTlVNX1RIUkVFX0RJR0lUX1NZTUJP
TCA9IDIwLAorICAvKiogRm91cgorICAgKiBAZHJhZnQgSUNVIDQuNgorICAgKi8KKyAgVU5VTV9G
T1VSX0RJR0lUX1NZTUJPTCA9IDIxLAorICAvKiogRml2ZQorICAgKiBAZHJhZnQgSUNVIDQuNgor
ICAgKi8KKyAgVU5VTV9GSVZFX0RJR0lUX1NZTUJPTCA9IDIyLAorICAvKiogU2l4CisgICAqIEBk
cmFmdCBJQ1UgNC42CisgICAqLworICBVTlVNX1NJWF9ESUdJVF9TWU1CT0wgPSAyMywKKyAgLyoq
IFNldmVuCisgICAgKiBAZHJhZnQgSUNVIDQuNgorICAgKi8KKyAgVU5VTV9TRVZFTl9ESUdJVF9T
WU1CT0wgPSAyNCwKKyAgLyoqIEVpZ2h0CisgICAqIEBkcmFmdCBJQ1UgNC42CisgICAqLworICBV
TlVNX0VJR0hUX0RJR0lUX1NZTUJPTCA9IDI1LAorICAvKiogTmluZQorICAgKiBAZHJhZnQgSUNV
IDQuNgorICAgKi8KKyAgVU5VTV9OSU5FX0RJR0lUX1NZTUJPTCA9IDI2LAorICAvKiogY291bnQg
c3ltYm9sIGNvbnN0YW50cyAqLworICBVTlVNX0ZPUk1BVF9TWU1CT0xfQ09VTlQgPSAyNworfSBV
TnVtYmVyRm9ybWF0U3ltYm9sOworCisvKioKKyogR2V0IGEgc3ltYm9sIGFzc29jaWF0ZWQgd2l0
aCBhIFVOdW1iZXJGb3JtYXQuCisqIEEgVU51bWJlckZvcm1hdCB1c2VzIHN5bWJvbHMgdG8gcmVw
cmVzZW50IHRoZSBzcGVjaWFsIGxvY2FsZS1kZXBlbmRlbnQKKyogY2hhcmFjdGVycyBpbiBhIG51
bWJlciwgZm9yIGV4YW1wbGUgdGhlIHBlcmNlbnQgc2lnbi4gVGhpcyBBUEkgaXMgbm90CisqIHN1
cHBvcnRlZCBmb3IgcnVsZS1iYXNlZCBmb3JtYXR0ZXJzLgorKiBAcGFyYW0gZm10IFRoZSBmb3Jt
YXR0ZXIgdG8gcXVlcnkuCisqIEBwYXJhbSBzeW1ib2wgVGhlIFVOdW1iZXJGb3JtYXRTeW1ib2wg
Y29uc3RhbnQgZm9yIHRoZSBzeW1ib2wgdG8gZ2V0CisqIEBwYXJhbSBidWZmZXIgVGhlIHN0cmlu
ZyBidWZmZXIgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIHN5bWJvbCBzdHJpbmc7CisqICAgICAgICAg
ICAgICAgaWYgaXQgaXMgTlVMTCwgdGhlbiBvbmx5IHRoZSBsZW5ndGggb2YgdGhlIHN5bWJvbCBp
cyByZXR1cm5lZAorKiBAcGFyYW0gc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgc3RyaW5nIGJ1ZmZlcgor
KiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55
IGVycm9ycworKiBAcmV0dXJuIFRoZSBsZW5ndGggb2YgdGhlIHN5bWJvbDsgdGhlIGJ1ZmZlciBp
cyBub3QgbW9kaWZpZWQgaWYKKyogICAgICAgICA8Y29kZT5sZW5ndGgmZ3Q7PXNpemU8L2NvZGU+
CisqIEBzZWUgdW51bV9zZXRTeW1ib2wKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUg
aW50MzJfdCBVX0VYUE9SVDIKK3VudW1fZ2V0U3ltYm9sKGNvbnN0IFVOdW1iZXJGb3JtYXQgKmZt
dCwKKyAgICAgICAgICAgICAgIFVOdW1iZXJGb3JtYXRTeW1ib2wgc3ltYm9sLAorICAgICAgICAg
ICAgICAgVUNoYXIgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgIGludDMyX3Qgc2l6ZSwKKyAgICAg
ICAgICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKy8qKgorKiBTZXQgYSBzeW1ib2wgYXNz
b2NpYXRlZCB3aXRoIGEgVU51bWJlckZvcm1hdC4KKyogQSBVTnVtYmVyRm9ybWF0IHVzZXMgc3lt
Ym9scyB0byByZXByZXNlbnQgdGhlIHNwZWNpYWwgbG9jYWxlLWRlcGVuZGVudAorKiBjaGFyYWN0
ZXJzIGluIGEgbnVtYmVyLCBmb3IgZXhhbXBsZSB0aGUgcGVyY2VudCBzaWduLiAgVGhpcyBBUEkg
aXMgbm90CisqIHN1cHBvcnRlZCBmb3IgcnVsZS1iYXNlZCBmb3JtYXR0ZXJzLgorKiBAcGFyYW0g
Zm10IFRoZSBmb3JtYXR0ZXIgdG8gc2V0LgorKiBAcGFyYW0gc3ltYm9sIFRoZSBVTnVtYmVyRm9y
bWF0U3ltYm9sIGNvbnN0YW50IGZvciB0aGUgc3ltYm9sIHRvIHNldAorKiBAcGFyYW0gdmFsdWUg
VGhlIHN0cmluZyB0byBzZXQgdGhlIHN5bWJvbCB0bworKiBAcGFyYW0gbGVuZ3RoIFRoZSBsZW5n
dGggb2YgdGhlIHN0cmluZywgb3IgLTEgZm9yIGEgemVyby10ZXJtaW5hdGVkIHN0cmluZworKiBA
cGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVy
cm9ycy4KKyogQHNlZSB1bnVtX2dldFN5bWJvbAorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NU
QUJMRSB2b2lkIFVfRVhQT1JUMgordW51bV9zZXRTeW1ib2woVU51bWJlckZvcm1hdCAqZm10LAor
ICAgICAgICAgICAgICAgVU51bWJlckZvcm1hdFN5bWJvbCBzeW1ib2wsCisgICAgICAgICAgICAg
ICBjb25zdCBVQ2hhciAqdmFsdWUsCisgICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCwKKyAg
ICAgICAgICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cyk7CisKKworLyoqCisgKiBHZXQgdGhlIGxv
Y2FsZSBmb3IgdGhpcyBudW1iZXIgZm9ybWF0IG9iamVjdC4KKyAqIFlvdSBjYW4gY2hvb3NlIGJl
dHdlZW4gdmFsaWQgYW5kIGFjdHVhbCBsb2NhbGUuCisgKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0
ZXIgdG8gZ2V0IHRoZSBsb2NhbGUgZnJvbQorICogQHBhcmFtIHR5cGUgdHlwZSBvZiB0aGUgbG9j
YWxlIHdlJ3JlIGxvb2tpbmcgZm9yICh2YWxpZCBvciBhY3R1YWwpIAorICogQHBhcmFtIHN0YXR1
cyBlcnJvciBjb2RlIGZvciB0aGUgb3BlcmF0aW9uCisgKiBAcmV0dXJuIHRoZSBsb2NhbGUgbmFt
ZQorICogQHN0YWJsZSBJQ1UgMi44CisgKi8KK1VfU1RBQkxFIGNvbnN0IGNoYXIqIFVfRVhQT1JU
MgordW51bV9nZXRMb2NhbGVCeVR5cGUoY29uc3QgVU51bWJlckZvcm1hdCAqZm10LAorICAgICAg
ICAgICAgICAgICAgICAgVUxvY0RhdGFMb2NhbGVUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICBVRXJyb3JDb2RlKiBzdGF0dXMpOyAKKworI2VuZGlmIC8qICNpZiAhVUNPTkZJR19OT19G
T1JNQVRUSU5HICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ljdS91bmljb2RlL3V0eXBlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2Rl
L3V0eXBlcy5oCmluZGV4IDAwYmYxNGNlOGU2ZTVkNmVjOGVkODdkOGU5NTYxNzBjYTU3Nzg3YjIu
LjFiY2Y3ZjVkMzkwOWZmNjZiNjU4ZWE5NWJhNGEyY2RlYjU0OWM5YzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29kZS91dHlwZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdXR5cGVzLmgKQEAgLTU1LDcgKzU1LDcgQEAKICAqLwog
I2lmZGVmIFhQX0NQTFVTUExVUwogIyAgIGlmbmRlZiBVX1NIT1dfQ1BMVVNQTFVTX0FQSQotIyAg
ICAgICBkZWZpbmUgVV9TSE9XX0NQTFVTUExVU19BUEkgMQorIyAgICAgICBkZWZpbmUgVV9TSE9X
X0NQTFVTUExVU19BUEkgMAogIyAgIGVuZGlmCiAjZWxzZQogIyAgIHVuZGVmIFVfU0hPV19DUExV
U1BMVVNfQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25JZGVudGlmaWVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRl
bnRpZmllcnMuaAppbmRleCAxNjNiMTE2MTA0MWNjZGIzNWFkNTI5NzZjYWZlNmJkMTFkZmM4Yjc3
Li5jNTFiNDZkNzE2YTI1OTk3YTE3MzE2ODNiZmY3OGNhMzQxYzQxZmM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKQEAgLTE0Miw2
ICsxNDIsNyBAQAogICAgIG1hY3JvKGxhc3RJbmRleCkgXAogICAgIG1hY3JvKGxlbmd0aCkgXAog
ICAgIG1hY3JvKGxpbmUpIFwKKyAgICBtYWNybyhsb2NhbGVNYXRjaGVyKSBcCiAgICAgbWFjcm8o
bWVzc2FnZSkgXAogICAgIG1hY3JvKG11bHRpbGluZSkgXAogICAgIG1hY3JvKG5hbWUpIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvckNvbnN0
cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvckNv
bnN0cnVjdG9yLmNwcAppbmRleCBkNDFkZDE3Y2Q4ZWIxMTJhMjFlZmI2YzIxYTE0NDk0ZmIyZWQ2
ZDY1Li4zMTA3YjNmNWU5NGRjOGFkZWIxYjk2ODVjZmIzNTBmNDczMWRmZGI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yQ29uc3Ry
dWN0b3IuY3BwCkBAIC0xNTAsMjUgKzE1MCwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIEludGxDb2xsYXRvckNvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZihFeGVjUwog
ICAgIC8vIDEwLjIuMiBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVzIFss
IG9wdGlvbnNdKSAoRUNNQS00MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IHJlcXVlc3RlZExvY2Fs
ZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KLSAgICAvLyBGSVhNRTogcmVx
dWVzdGVkID0gQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKTsKKyAgICBKU0FycmF5KiBy
ZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChleGVjLCBleGVjLT5hcmd1
bWVudCgwKSk7CiAKICAgICAvLyAyLiBSZXR1cm5JZkFicnVwdChyZXF1ZXN0ZWRMb2NhbGVzKS4K
LSAgICAvLyBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgLy8gICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
Ly8gMy4gUmV0dXJuIFN1cHBvcnRlZExvY2FsZXMoJUNvbGxhdG9yJS5bW2F2YWlsYWJsZUxvY2Fs
ZXNdXSwgcmVxdWVzdGVkTG9jYWxlcywgb3B0aW9ucykuCi0gICAgLy8gRklYTUU6IHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoU3VwcG9ydGVkTG9jYWxlcyhhdmFpbGFibGUsIHJlcXVlc3RlZCwgb3B0
aW9ucykpOwotCi0gICAgLy8gUmV0dXJuIGVtcHR5IGFycmF5IHVudGlsIHByb3Blcmx5IGltcGxl
bWVudGVkLgotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKTsKLSAgICBKU0FycmF5
KiBzdXBwb3J0ZWRMb2NhbGVzID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwg
Z2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRp
b24oQXJyYXlXaXRoVW5kZWNpZGVkKSwgMCk7Ci0gICAgaWYgKCFzdXBwb3J0ZWRMb2NhbGVzKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVj
KSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN1cHBvcnRlZExvY2FsZXMpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3VwcG9ydGVkTG9jYWxlcyhleGVjLCBnbG9iYWxPYmpl
Y3QtPmludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMoKSwgcmVxdWVzdGVkTG9jYWxlcywgZXhl
Yy0+YXJndW1lbnQoMSkpKTsKIH0KLSAgICAKKwogdm9pZCBJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rv
cjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEludGxDb2xsYXRvckNvbnN0cnVjdG9yKiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxDb2xs
YXRvckNvbnN0cnVjdG9yKj4oY2VsbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKaW5k
ZXggMGI4ZDQ2MGQyNjc0MWE0YjkzMzZiOGNiMGY4YjY0ZmI3OGQwNjg3ZC4uOThkM2JiZTNkNDBl
MmFjZmViNzI4ZjhhMzYwNTQzNDU1MjYwMzcyMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9y
LmNwcApAQCAtMTUwLDIyICsxNTAsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJ
bnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YKICAgICAv
LyAxMi4yLjIgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YobG9jYWxlcyBb
LCBvcHRpb25zXSkgKEVDTUEtNDAyIDIuMCkKIAogICAgIC8vIDEuIExldCBhdmFpbGFibGVMb2Nh
bGVzIGJlICVEYXRlVGltZUZvcm1hdCUuW1thdmFpbGFibGVMb2NhbGVzXV0uCi0gICAgLy8gRklY
TUU6IGF2YWlsYWJsZSA9IEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yOjpnZXRBdmFpbGFi
bGVMb2NhbGVzKCkKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2Fs
bGVlKCktPmdsb2JhbE9iamVjdCgpOworICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiBhdmFpbGFi
bGVMb2NhbGVzID0gZ2xvYmFsT2JqZWN0LT5pbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2Nh
bGVzKCk7CiAKICAgICAvLyAyLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVM
b2NhbGVMaXN0KGxvY2FsZXMpLgotICAgIC8vIEZJWE1FOiByZXF1ZXN0ZWQgPSBDYW5vbmljYWxp
emVMb2NhbGVMaXN0KGxvY2FsZXMpCisgICAgSlNBcnJheSogcmVxdWVzdGVkTG9jYWxlcyA9IGNh
bm9uaWNhbGl6ZUxvY2FsZUxpc3QoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIAogICAgIC8vIDMuIFJldHVybiBTdXBwb3J0ZWRMb2NhbGVzKGF2YWlsYWJs
ZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9wdGlvbnMpLgotICAgIC8vIEZJWE1FOiByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKFN1cHBvcnRlZExvY2FsZXMoYXZhaWxhYmxlLCByZXF1ZXN0ZWQs
IG9wdGlvbnMpKTsKLQotICAgIC8vIFJldHVybiBlbXB0eSBhcnJheSB1bnRpbCBwcm9wZXJseSBp
bXBsZW1lbnRlZC4KLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgSlNB
cnJheSogc3VwcG9ydGVkTG9jYWxlcyA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQo
dm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxv
Y2F0aW9uKEFycmF5V2l0aFVuZGVjaWRlZCksIDApOwotICAgIGlmICghc3VwcG9ydGVkTG9jYWxl
cykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd091dE9mTWVtb3J5RXJyb3Io
ZXhlYykpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdXBwb3J0ZWRMb2NhbGVzKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN1cHBvcnRlZExvY2FsZXMoZXhlYywgYXZhaWxh
YmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgZXhlYy0+YXJndW1lbnQoMSkpKTsKIH0KICAg
ICAKIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3I6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3Bw
CmluZGV4IGI4NjM5ZDZiMTRjNzAwN2E4NzEwMjU1NzdhYWUyZWQyOWZiY2QyZTEuLmQwNjZlZTgw
NGJmNzg2MmQwNGNlMWNhZDk3ZmZiZWIxYzFmY2M2MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9y
LmNwcApAQCAtMTUwLDIyICsxNTAsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJ
bnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKEUKICAgICAv
LyAxMS4yLjIgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKGxvY2FsZXMgWywg
b3B0aW9uc10pIChFQ01BLTQwMiAyLjApCiAKICAgICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxl
cyBiZSAlTnVtYmVyRm9ybWF0JS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4KLSAgICAvLyBGSVhNRTog
YXZhaWxhYmxlID0gSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yOjpnZXRBdmFpbGFibGVMb2Nh
bGVzKCkKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2FsbGVlKCkt
Pmdsb2JhbE9iamVjdCgpOworICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiBhdmFpbGFibGVMb2Nh
bGVzID0gZ2xvYmFsT2JqZWN0LT5pbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwog
CiAgICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlz
dChsb2NhbGVzKS4KLSAgICAvLyBGSVhNRTogcmVxdWVzdGVkID0gQ2Fub25pY2FsaXplTG9jYWxl
TGlzdChsb2NhbGVzKQorICAgIEpTQXJyYXkqIHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxp
emVMb2NhbGVMaXN0KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICAvLyAzLiBSZXR1cm4gU3VwcG9ydGVkTG9jYWxlcyhhdmFpbGFibGVMb2NhbGVz
LCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKS4KLSAgICAvLyBGSVhNRTogcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShTdXBwb3J0ZWRMb2NhbGVzKGF2YWlsYWJsZSwgcmVxdWVzdGVkLCBvcHRpb25z
KSk7Ci0KLSAgICAvLyBSZXR1cm4gZW1wdHkgYXJyYXkgdW50aWwgcHJvcGVybHkgaW1wbGVtZW50
ZWQuCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpOwotICAgIEpTQXJyYXkqIHN1
cHBvcnRlZExvY2FsZXMgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBnbG9i
YWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihB
cnJheVdpdGhVbmRlY2lkZWQpLCAwKTsKLSAgICBpZiAoIXN1cHBvcnRlZExvY2FsZXMpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsK
LQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3VwcG9ydGVkTG9jYWxlcyk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShzdXBwb3J0ZWRMb2NhbGVzKGV4ZWMsIGF2YWlsYWJsZUxvY2Fs
ZXMsIHJlcXVlc3RlZExvY2FsZXMsIGV4ZWMtPmFyZ3VtZW50KDEpKSk7CiB9CiAKIHZvaWQgSW50
bE51bWJlckZvcm1hdENvbnN0cnVjdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxP
YmplY3QuY3BwCmluZGV4IGJhNDU3ZTcyNTYwOTEwNzg5MTIyZjUxMzc1ZWU5ZmRjMTAyNGQzMmYu
LjcyMDFjZTBlYmY0ZjM3NjM2Y2Y1N2E0NzlkMmIyYmQ3ZDBhY2Y3YjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAK
ICNpZiBFTkFCTEUoSU5UTCkKIAorI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRnVuY3Rp
b25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJJbnRsQ29sbGF0b3IuaCIKICNpbmNsdWRlICJJbnRs
Q29sbGF0b3JDb25zdHJ1Y3Rvci5oIgpAQCAtMzksOCArNDAsMTAgQEAKICNpbmNsdWRlICJJbnRs
TnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJJbnRsTnVtYmVyRm9ybWF0UHJv
dG90eXBlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWVJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBl
LmgiCisjaW5jbHVkZSA8dW5pY29kZS91bG9jLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xMDIsNiArMTA1LDU5OCBAQCBTdHJ1Y3R1cmUqIElu
dGxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVgogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKIH0KIAorc3RhdGljIFN0cmluZyBnZXRJbnRsU3RyaW5nT3B0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBvcHRpb25zLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHksIGNvbnN0IEhhc2hTZXQ8
U3RyaW5nPiYgdmFsdWVzLCBjb25zdCBjaGFyKiBub3RGb3VuZCwgU3RyaW5nIGZhbGxiYWNrKQor
eworICAgIC8vIDkuMi45IEdldE9wdGlvbiAob3B0aW9ucywgcHJvcGVydHksIHR5cGUsIHZhbHVl
cywgZmFsbGJhY2spCisgICAgLy8gRm9yIHR5cGU9InN0cmluZyIuCisKKyAgICAvLyAxLiBMZXQg
b3B0cyBiZSBUb09iamVjdChvcHRpb25zKS4KKyAgICBKU09iamVjdCogb3B0cyA9IG9wdGlvbnMu
dG9PYmplY3QoZXhlYyk7CisKKyAgICAvLyAyLiBSZXR1cm5JZkFicnVwdChvcHRzKS4KKyAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAg
IC8vIDMuIExldCB2YWx1ZSBiZSBHZXQob3B0cywgcHJvcGVydHkpLgorICAgIEpTVmFsdWUgdmFs
dWUgPSBvcHRzLT5nZXQoZXhlYywgcHJvcGVydHkpOworCisgICAgLy8gNC4gUmV0dXJuSWZBYnJ1
cHQodmFsdWUpLgorICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworCisgICAgLy8gNS4gSWYgdmFsdWUgaXMgbm90IHVuZGVmaW5lZCwgdGhlbgor
ICAgIGlmICghdmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICAvLyBhLiBBc3NlcnQ6IHR5
cGUgaXMgImJvb2xlYW4iIG9yICJzdHJpbmciLgorICAgICAgICAvLyBGdW5jdGlvbiBkZWRpY2F0
ZWQgdG8gInN0cmluZyIuCisKKyAgICAgICAgLy8gYy4gSWYgdHlwZSBpcyAic3RyaW5nIiwgdGhl
bgorICAgICAgICAvLyBpLiBMZXQgdmFsdWUgYmUgVG9TdHJpbmcodmFsdWUpLgorICAgICAgICBK
U1N0cmluZyogc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKworICAgICAgICAv
LyBpaS4gUmV0dXJuSWZBYnJ1cHQodmFsdWUpLgorICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAgICAgLy8gZC4gSWYg
dmFsdWVzIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KKyAgICAgICAgLy8gaS4gSWYgdmFsdWVzIGRv
ZXMgbm90IGNvbnRhaW4gYW4gZWxlbWVudCBlcXVhbCB0byB2YWx1ZSwgdGhyb3cgYSBSYW5nZUVy
cm9yIGV4Y2VwdGlvbi4KKyAgICAgICAgaWYgKCF2YWx1ZXMuaXNFbXB0eSgpICYmICF2YWx1ZXMu
Y29udGFpbnMoc3RyaW5nVmFsdWUtPnZhbHVlKGV4ZWMpKSkgeworICAgICAgICAgICAgZXhlYy0+
dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIFN0cmluZyhu
b3RGb3VuZCkpKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIGUuIFJldHVybiB2YWx1ZS4KKyAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlLT52
YWx1ZShleGVjKTsKKyAgICB9CisKKyAgICAvLyA2LiBFbHNlIHJldHVybiBmYWxsYmFjay4KKyAg
ICByZXR1cm4gZmFsbGJhY2s7Cit9CisKK3N0YXRpYyBTdHJpbmcgZ2V0UHJpdmF0ZVVzZUxhbmdU
YWcoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcnRzLCBzaXplX3Qgc3RhcnRJbmRleCkKK3sKKyAg
ICBzaXplX3QgbnVtUGFydHMgPSBwYXJ0cy5zaXplKCk7CisgICAgc2l6ZV90IGN1cnJlbnRJbmRl
eCA9IHN0YXJ0SW5kZXg7CisKKyAgICAvLyBDaGVjayBmb3IgcHJpdmF0ZXVzZS4KKyAgICAvLyBw
cml2YXRldXNlID0gIngiIDEqKCItIiAoMio4YWxwaGFudW0pKQorICAgIFN0cmluZ0J1aWxkZXIg
cHJpdmF0ZXVzZTsKKyAgICB3aGlsZSAoY3VycmVudEluZGV4IDwgbnVtUGFydHMpIHsKKyAgICAg
ICAgY29uc3QgU3RyaW5nJiBzaW5nbGV0b24gPSBwYXJ0c1tjdXJyZW50SW5kZXhdOworICAgICAg
ICB1bnNpZ25lZCBzaW5nbGV0b25MZW5ndGggPSBzaW5nbGV0b24ubGVuZ3RoKCk7CisgICAgICAg
IGJvb2wgaXNWYWxpZCA9IChzaW5nbGV0b25MZW5ndGggPT0gMSAmJiAoc2luZ2xldG9uID09ICJ4
IiB8fCBzaW5nbGV0b24gPT0gIlgiKSk7CisgICAgICAgIGlmICghaXNWYWxpZCkKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGlmIChjdXJyZW50SW5kZXggIT0gc3RhcnRJbmRleCkKKyAg
ICAgICAgICAgIHByaXZhdGV1c2UuYXBwZW5kKCctJyk7CisKKyAgICAgICAgKytjdXJyZW50SW5k
ZXg7CisgICAgICAgIHVuc2lnbmVkIG51bUV4dFBhcnRzID0gMDsKKyAgICAgICAgcHJpdmF0ZXVz
ZS5hcHBlbmQoJ3gnKTsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnRJbmRleCA8IG51bVBhcnRzKSB7
CisgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGV4dFBhcnQgPSBwYXJ0c1tjdXJyZW50SW5kZXhd
OworICAgICAgICAgICAgdW5zaWduZWQgZXh0UGFydExlbmd0aCA9IGV4dFBhcnQubGVuZ3RoKCk7
CisKKyAgICAgICAgICAgIGJvb2wgaXNWYWxpZCA9IChleHRQYXJ0TGVuZ3RoID49IDIgJiYgZXh0
UGFydExlbmd0aCA8PSA4ICYmIGV4dFBhcnQuaXNBbGxTcGVjaWFsQ2hhcmFjdGVyczxpc0FTQ0lJ
QWxwaGFudW1lcmljPigpKTsKKyAgICAgICAgICAgIGlmICghaXNWYWxpZCkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgKytjdXJyZW50SW5kZXg7CisgICAgICAgICAgICAr
K251bUV4dFBhcnRzOworICAgICAgICAgICAgcHJpdmF0ZXVzZS5hcHBlbmQoJy0nKTsKKyAgICAg
ICAgICAgIHByaXZhdGV1c2UuYXBwZW5kKGV4dFBhcnQuY29udmVydFRvQVNDSUlMb3dlcmNhc2Uo
KSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXF1aXJlcyBhdCBsZWFzdCBvbmUgcHJvZHVj
dGlvbi4KKyAgICAgICAgaWYgKCFudW1FeHRQYXJ0cykKKyAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICB9CisKKyAgICAvLyBMZWZ0b3ZlcnMgbWFrZXMgaXQgaW52YWxpZC4KKyAgICBp
ZiAoY3VycmVudEluZGV4IDwgbnVtUGFydHMpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwor
ICAgIHJldHVybiBwcml2YXRldXNlLnRvU3RyaW5nKCk7Cit9CisKK3N0YXRpYyBTdHJpbmcgZ2V0
Q2Fub25pY2FsTGFuZ1RhZyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFydHMpCit7CisgICAgQVNT
RVJUKCFwYXJ0cy5pc0VtcHR5KCkpOworCisgICAgLy8gRm9sbG93cyB0aGUgZ3JhbW1hciBhdCBo
dHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvYmNwL2JjcDQ3LnR4dAorICAgIC8vIGxhbmd0
YWcgPSBsYW5ndWFnZSBbIi0iIHNjcmlwdF0gWyItIiByZWdpb25dICooIi0iIHZhcmlhbnQpICoo
Ii0iIGV4dGVuc2lvbikgWyItIiBwcml2YXRldXNlXQorCisgICAgc2l6ZV90IG51bVBhcnRzID0g
cGFydHMuc2l6ZSgpOworICAgIC8vIENoZWNrIGZvciBsYW5ndWFnZS4KKyAgICAvLyBsYW5ndWFn
ZSA9IDIqM0FMUEhBIFsiLSIgZXh0bGFuZ10gLyA0QUxQSEEgLyA1KjhBTFBIQQorICAgIHNpemVf
dCBjdXJyZW50SW5kZXggPSAwOworICAgIGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UgPSBwYXJ0c1tj
dXJyZW50SW5kZXhdOworICAgIHVuc2lnbmVkIGxhbmd1YWdlTGVuZ3RoID0gbGFuZ3VhZ2UubGVu
Z3RoKCk7CisgICAgYm9vbCBjYW5IYXZlRXh0bGFuZyA9IGxhbmd1YWdlTGVuZ3RoID49IDIgJiYg
bGFuZ3VhZ2VMZW5ndGggPD0gMzsKKyAgICBib29sIGlzVmFsaWRMYW5ndWFnZSA9IGxhbmd1YWdl
TGVuZ3RoID49IDIgJiYgbGFuZ3VhZ2VMZW5ndGggPD0gOCAmJiBsYW5ndWFnZS5pc0FsbFNwZWNp
YWxDaGFyYWN0ZXJzPGlzQVNDSUlBbHBoYT4oKTsKKyAgICBpZiAoIWlzVmFsaWRMYW5ndWFnZSkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgKytjdXJyZW50SW5kZXg7CisgICAgU3Ry
aW5nQnVpbGRlciBjYW5vbmljYWw7CisgICAgY2Fub25pY2FsLmFwcGVuZChsYW5ndWFnZS5jb252
ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKTsKKworICAgIC8vIENoZWNrIGZvciBleHRsYW5nLgorICAg
IC8vIGV4dGxhbmcgPSAzQUxQSEEgKjIoIi0iIDNBTFBIQSkKKyAgICBpZiAoY2FuSGF2ZUV4dGxh
bmcpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB0aW1lcyA9IDA7IHRpbWVzIDwgMyAmJiBjdXJy
ZW50SW5kZXggPCBudW1QYXJ0czsgKyt0aW1lcykgeworICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiBleHRsYW5nID0gcGFydHNbY3VycmVudEluZGV4XTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGV4
dGxhbmdMZW5ndGggPSBleHRsYW5nLmxlbmd0aCgpOworICAgICAgICAgICAgaWYgKGV4dGxhbmdM
ZW5ndGggPT0gMyAmJiBleHRsYW5nLmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNBU0NJSUFscGhh
PigpKSB7CisgICAgICAgICAgICAgICAgKytjdXJyZW50SW5kZXg7CisgICAgICAgICAgICAgICAg
Y2Fub25pY2FsLmFwcGVuZCgnLScpOworICAgICAgICAgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQo
ZXh0bGFuZy5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKTsKKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2hlY2sg
Zm9yIHNjcmlwdC4KKyAgICAvLyBzY3JpcHQgPSA0QUxQSEEKKyAgICBpZiAoY3VycmVudEluZGV4
IDwgbnVtUGFydHMpIHsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBzY3JpcHQgPSBwYXJ0c1tjdXJy
ZW50SW5kZXhdOworICAgICAgICB1bnNpZ25lZCBzY3JpcHRMZW5ndGggPSBzY3JpcHQubGVuZ3Ro
KCk7CisgICAgICAgIGlmIChzY3JpcHRMZW5ndGggPT0gNCAmJiBzY3JpcHQuaXNBbGxTcGVjaWFs
Q2hhcmFjdGVyczxpc0FTQ0lJQWxwaGE+KCkpIHsKKyAgICAgICAgICAgICsrY3VycmVudEluZGV4
OworICAgICAgICAgICAgY2Fub25pY2FsLmFwcGVuZCgnLScpOworICAgICAgICAgICAgY2Fub25p
Y2FsLmFwcGVuZCh0b0FTQ0lJVXBwZXIoc2NyaXB0WzBdKSk7CisgICAgICAgICAgICBjYW5vbmlj
YWwuYXBwZW5kKHNjcmlwdC5zdWJzdHJpbmcoMSwgMykuY29udmVydFRvQVNDSUlMb3dlcmNhc2Uo
KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDaGVjayBmb3IgcmVnaW9uLgorICAgIC8v
IHJlZ2lvbiA9IDJBTFBIQSAvIDNESUdJVAorICAgIGlmIChjdXJyZW50SW5kZXggPCBudW1QYXJ0
cykgeworICAgICAgICBjb25zdCBTdHJpbmcmIHJlZ2lvbiA9IHBhcnRzW2N1cnJlbnRJbmRleF07
CisgICAgICAgIHVuc2lnbmVkIHJlZ2lvbkxlbmd0aCA9IHJlZ2lvbi5sZW5ndGgoKTsKKyAgICAg
ICAgYm9vbCBpc1ZhbGlkUmVnaW9uID0gKAorICAgICAgICAgICAgKHJlZ2lvbkxlbmd0aCA9PSAy
ICYmIHJlZ2lvbi5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzQVNDSUlBbHBoYT4oKSkKKyAgICAg
ICAgICAgIHx8IChyZWdpb25MZW5ndGggPT0gMyAmJiByZWdpb24uaXNBbGxTcGVjaWFsQ2hhcmFj
dGVyczxpc0FTQ0lJRGlnaXQ+KCkpCisgICAgICAgICk7CisgICAgICAgIGlmIChpc1ZhbGlkUmVn
aW9uKSB7CisgICAgICAgICAgICArK2N1cnJlbnRJbmRleDsKKyAgICAgICAgICAgIGNhbm9uaWNh
bC5hcHBlbmQoJy0nKTsKKyAgICAgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQocmVnaW9uLnVwcGVy
KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIHZhcmlhbnQuCisgICAg
Ly8gdmFyaWFudCA9IDUqOGFscGhhbnVtIC8gKERJR0lUIDNhbHBoYW51bSkKKyAgICBIYXNoU2V0
PFN0cmluZz4gc3VidGFnczsKKyAgICB3aGlsZSAoY3VycmVudEluZGV4IDwgbnVtUGFydHMpIHsK
KyAgICAgICAgY29uc3QgU3RyaW5nJiB2YXJpYW50ID0gcGFydHNbY3VycmVudEluZGV4XTsKKyAg
ICAgICAgdW5zaWduZWQgdmFyaWFudExlbmd0aCA9IHZhcmlhbnQubGVuZ3RoKCk7CisgICAgICAg
IGJvb2wgaXNWYWxpZFZhcmlhbnQgPSAoCisgICAgICAgICAgICAodmFyaWFudExlbmd0aCA+PSA1
ICYmIHZhcmlhbnRMZW5ndGggPD0gOCAmJiB2YXJpYW50LmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8
aXNBU0NJSUFscGhhbnVtZXJpYz4oKSkKKyAgICAgICAgICAgIHx8ICh2YXJpYW50TGVuZ3RoID09
IDQgJiYgaXNBU0NJSURpZ2l0KHZhcmlhbnRbMF0pICYmIHZhcmlhbnQuc3Vic3RyaW5nKDEsIDMp
LmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNBU0NJSUFscGhhbnVtZXJpYz4oKSkKKyAgICAgICAg
KTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkVmFyaWFudCkKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIC8vIENhbm5vdCBpbmNsdWRlIGR1cGxpY2F0ZSBzdWJ0YWdzIChjYXNlIGluc2Vuc2l0
aXZlKS4KKyAgICAgICAgY29uc3QgU3RyaW5nJiBsb3dlclZhcmlhbnQgPSB2YXJpYW50LmNvbnZl
cnRUb0FTQ0lJTG93ZXJjYXNlKCk7CisgICAgICAgIGlmIChzdWJ0YWdzLmNvbnRhaW5zKGxvd2Vy
VmFyaWFudCkpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIHN1YnRhZ3Mu
YWRkKGxvd2VyVmFyaWFudCk7CisKKyAgICAgICAgKytjdXJyZW50SW5kZXg7CisKKyAgICAgICAg
Ly8gUmVvcmRlcmluZyB2YXJpYW50IHN1YnRhZ3MgaXMgbm90IHJlcXVpcmVkIGluIHRoZSBzcGVj
LgorICAgICAgICBjYW5vbmljYWwuYXBwZW5kKCctJyk7CisgICAgICAgIGNhbm9uaWNhbC5hcHBl
bmQobG93ZXJWYXJpYW50KTsKKyAgICB9CisKKyAgICAvLyBDaGVjayBmb3IgZXh0ZW5zaW9uLgor
ICAgIC8vIGV4dGVuc2lvbiA9IHNpbmdsZXRvbiAxKigiLSIgKDIqOGFscGhhbnVtKSkKKyAgICAv
LyBzaW5nbGV0b24gPSBhbHBoYW51bSBleGNlcHQgeCBvciBYCisgICAgc3VidGFncy5jbGVhcigp
OworICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnM7CisgICAgd2hpbGUgKGN1cnJlbnRJbmRl
eCA8IG51bVBhcnRzKSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYgcG9zc2libGVTaW5nbGV0b24g
PSBwYXJ0c1tjdXJyZW50SW5kZXhdOworICAgICAgICB1bnNpZ25lZCBzaW5nbGV0b25MZW5ndGgg
PSBwb3NzaWJsZVNpbmdsZXRvbi5sZW5ndGgoKTsKKyAgICAgICAgYm9vbCBpc1ZhbGlkU2luZ2xl
dG9uID0gKHNpbmdsZXRvbkxlbmd0aCA9PSAxICYmIHBvc3NpYmxlU2luZ2xldG9uICE9ICJ4IiAm
JiBwb3NzaWJsZVNpbmdsZXRvbiAhPSAiWCIgJiYgaXNBU0NJSUFscGhhbnVtZXJpYyhwb3NzaWJs
ZVNpbmdsZXRvblswXSkpOworICAgICAgICBpZiAoIWlzVmFsaWRTaW5nbGV0b24pCisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAvLyBDYW5ub3QgaW5jbHVkZSBkdXBsaWNhdGUgc2luZ2xl
dG9uIChjYXNlIGluc2Vuc2l0aXZlKS4KKyAgICAgICAgY29uc3QgU3RyaW5nJiBzaW5nbGV0b24g
PSBwb3NzaWJsZVNpbmdsZXRvbi5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOworICAgICAgICBp
ZiAoc3VidGFncy5jb250YWlucyhzaW5nbGV0b24pKQorICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgICAgICBzdWJ0YWdzLmFkZChzaW5nbGV0b24pOworCisgICAgICAgICsrY3VycmVu
dEluZGV4OworICAgICAgICBpbnQgbnVtRXh0UGFydHMgPSAwOworICAgICAgICBTdHJpbmdCdWls
ZGVyIGV4dGVuc2lvbjsKKyAgICAgICAgZXh0ZW5zaW9uLmFwcGVuZChzaW5nbGV0b24pOworICAg
ICAgICB3aGlsZSAoY3VycmVudEluZGV4IDwgbnVtUGFydHMpIHsKKyAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgZXh0UGFydCA9IHBhcnRzW2N1cnJlbnRJbmRleF07CisgICAgICAgICAgICB1bnNp
Z25lZCBleHRQYXJ0TGVuZ3RoID0gZXh0UGFydC5sZW5ndGgoKTsKKworICAgICAgICAgICAgYm9v
bCBpc1ZhbGlkID0gKGV4dFBhcnRMZW5ndGggPj0gMiAmJiBleHRQYXJ0TGVuZ3RoIDw9IDggJiYg
ZXh0UGFydC5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzQVNDSUlBbHBoYW51bWVyaWM+KCkpOwor
ICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICArK2N1cnJlbnRJbmRleDsKKyAgICAgICAgICAgICsrbnVtRXh0UGFydHM7CisgICAg
ICAgICAgICBleHRlbnNpb24uYXBwZW5kKCctJyk7CisgICAgICAgICAgICBleHRlbnNpb24uYXBw
ZW5kKGV4dFBhcnQuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBSZXF1aXJlcyBhdCBsZWFzdCBvbmUgcHJvZHVjdGlvbi4KKyAgICAgICAgaWYgKCFu
dW1FeHRQYXJ0cykKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgICAgICBleHRl
bnNpb25zLmFwcGVuZChleHRlbnNpb24udG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgLy8gQWRk
IGV4dGVuc2lvbnMgdG8gY2Fub25pY2FsIHNvcnRlZCBieSBzaW5nbGV0b24uCisgICAgc3RkOjpz
b3J0KAorICAgICAgICBleHRlbnNpb25zLmJlZ2luKCksCisgICAgICAgIGV4dGVuc2lvbnMuZW5k
KCksCisgICAgICAgIFtdIChjb25zdCBTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikgLT4gYm9v
bCB7CisgICAgICAgICAgICByZXR1cm4gYVswXSA8IGJbMF07CisgICAgICAgIH0KKyAgICApOwor
ICAgIHNpemVfdCBudW1FeHRlbnN0aW9ucyA9IGV4dGVuc2lvbnMuc2l6ZSgpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtRXh0ZW5zdGlvbnM7ICsraSkgeworICAgICAgICBjYW5vbmlj
YWwuYXBwZW5kKCctJyk7CisgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQoZXh0ZW5zaW9uc1tpXSk7
CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIHByaXZhdGV1c2UuCisgICAgaWYgKGN1cnJlbnRJ
bmRleCA8IG51bVBhcnRzKSB7CisgICAgICAgIFN0cmluZyBwcml2YXRldXNlID0gZ2V0UHJpdmF0
ZVVzZUxhbmdUYWcocGFydHMsIGN1cnJlbnRJbmRleCk7CisgICAgICAgIGlmIChwcml2YXRldXNl
LmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICBjYW5vbmlj
YWwuYXBwZW5kKCctJyk7CisgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQocHJpdmF0ZXVzZSk7Cisg
ICAgfQorCisgICAgLy8gRklYTUU6IFJlcGxhY2Ugc3VidGFncyB3aXRoIHRoZWlyIHByZWZlcnJl
ZCB2YWx1ZXMuCisKKyAgICByZXR1cm4gY2Fub25pY2FsLnRvU3RyaW5nKCk7Cit9CisKK3N0YXRp
YyBTdHJpbmcgZ2V0R3JhbmRmYXRoZXJlZExhbmdUYWcoY29uc3QgU3RyaW5nJiBsb2NhbGUpCit7
CisgICAgLy8gZ3JhbmRmYXRoZXJlZCA9IGlycmVndWxhciAvIHJlZ3VsYXIKKyAgICAvLyBGSVhN
RTogY29udmVydCB0byBhIGNvbXBpbGUgdGltZSBoYXNoIHRhYmxlIGlmIHRoaXMgaXMgY2F1c2lu
ZyBwZXJmb3JtYW5jZSBpc3N1ZXMuCisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gdGFnTWFw
ID0geworICAgICAgICAvLyBJcnJlZ3VsYXIuCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJlbi1n
Yi1vZWQiKSwgQVNDSUlMaXRlcmFsKCJlbi1HQi1vZWQiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0
ZXJhbCgiaS1hbWkiKSwgQVNDSUlMaXRlcmFsKCJhbWkiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0
ZXJhbCgiaS1ibm4iKSwgQVNDSUlMaXRlcmFsKCJibm4iKSB9LAorICAgICAgICB7IEFTQ0lJTGl0
ZXJhbCgiaS1kZWZhdWx0IiksIEFTQ0lJTGl0ZXJhbCgiaS1kZWZhdWx0IikgfSwKKyAgICAgICAg
eyBBU0NJSUxpdGVyYWwoImktZW5vY2hpYW4iKSwgQVNDSUlMaXRlcmFsKCJpLWVub2NoaWFuIikg
fSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImktaGFrIiksIEFTQ0lJTGl0ZXJhbCgiaGFrIikg
fSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImkta2xpbmdvbiIpLCBBU0NJSUxpdGVyYWwoInRs
aCIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJpLWx1eCIpLCBBU0NJSUxpdGVyYWwoImxi
IikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImktbWluZ28iKSwgQVNDSUlMaXRlcmFsKCJp
LW1pbmdvIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImktbmF2YWpvIiksIEFTQ0lJTGl0
ZXJhbCgibnYiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiaS1wd24iKSwgQVNDSUlMaXRl
cmFsKCJwd24iKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiaS10YW8iKSwgQVNDSUlMaXRl
cmFsKCJ0YW8iKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiaS10YXkiKSwgQVNDSUlMaXRl
cmFsKCJ0YXkiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiaS10c3UiKSwgQVNDSUlMaXRl
cmFsKCJ0c3UiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgic2duLWJlLWZyIiksIEFTQ0lJ
TGl0ZXJhbCgic2ZiIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoInNnbi1iZS1ubCIpLCBB
U0NJSUxpdGVyYWwoInZndCIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJzZ24tY2gtZGUi
KSwgQVNDSUlMaXRlcmFsKCJzZ2ciKSB9LAorICAgICAgICAvLyBSZWd1bGFyLgorICAgICAgICB7
IEFTQ0lJTGl0ZXJhbCgiYXJ0LWxvamJhbiIpLCBBU0NJSUxpdGVyYWwoImpibyIpIH0sCisgICAg
ICAgIHsgQVNDSUlMaXRlcmFsKCJjZWwtZ2F1bGlzaCIpLCBBU0NJSUxpdGVyYWwoImNlbC1nYXVs
aXNoIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoIm5vLWJvayIpLCBBU0NJSUxpdGVyYWwo
Im5iIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoIm5vLW55biIpLCBBU0NJSUxpdGVyYWwo
Im5uIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoInpoLWd1b3l1IiksIEFTQ0lJTGl0ZXJh
bCgiY21uIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoInpoLWhha2thIiksIEFTQ0lJTGl0
ZXJhbCgiaGFrIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoInpoLW1pbiIpLCBBU0NJSUxp
dGVyYWwoInpoLW1pbiIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJ6aC1taW4tbmFuIiks
IEFTQ0lJTGl0ZXJhbCgibmFuIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoInpoLXhpYW5n
IiksIEFTQ0lJTGl0ZXJhbCgiaHNuIikgfQorICAgIH07CisKKyAgICByZXR1cm4gdGFnTWFwLmdl
dChsb2NhbGUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7Cit9CisKK3N0YXRpYyBTdHJpbmcg
Y2Fub25pY2FsaXplTGFuZ3VhZ2VUYWcoY29uc3QgU3RyaW5nJiBsb2NhbGUpCit7CisgICAgLy8g
Ni4yLjIgSXNTdHJ1Y3R1cmFsbHlWYWxpZExhbmd1YWdlVGFnIChsb2NhbGUpCisgICAgLy8gNi4y
LjMgQ2Fub25pY2FsaXplTGFuZ3VhZ2VUYWcgKGxvY2FsZSkKKyAgICAvLyBUaGVzZSBhcmUgZG9u
ZSBvbmUgYWZ0ZXIgYW5vdGhlciBpbiBDYW5vbmljYWxpemVMb2NhbGVMaXN0LCBzbyB0aGV5IGFy
ZSBjb21iaW5lZCBoZXJlIHRvIHJlZHVjZSBkdXBsaWNhdGlvbi4KKyAgICAvLyBodHRwczovL3d3
dy5yZmMtZWRpdG9yLm9yZy9yZmMvYmNwL2JjcDQ3LnR4dAorCisgICAgLy8gTGFuZ3VhZ2UtVGFn
ID0gbGFuZ3RhZyAvIHByaXZhdGV1c2UgLyBncmFuZGZhdGhlcmVkCisgICAgU3RyaW5nIGdyYW5k
ZmF0aGVyID0gZ2V0R3JhbmRmYXRoZXJlZExhbmdUYWcobG9jYWxlKTsKKyAgICBpZiAoIWdyYW5k
ZmF0aGVyLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZ3JhbmRmYXRoZXI7CisKKyAgICAvLyBG
SVhNRTogUmVwbGFjZSByZWR1bmRhbnQgdGFncyBbUkZDNDY0N10uCisKKyAgICBWZWN0b3I8U3Ry
aW5nPiBwYXJ0czsKKyAgICBsb2NhbGUuc3BsaXQoJy0nLCB0cnVlLCBwYXJ0cyk7CisgICAgaWYg
KCFwYXJ0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU3RyaW5nIGxhbmd0YWcgPSBnZXRDYW5vbmlj
YWxMYW5nVGFnKHBhcnRzKTsKKyAgICAgICAgaWYgKCFsYW5ndGFnLmlzTnVsbCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGxhbmd0YWc7CisKKyAgICAgICAgU3RyaW5nIHByaXZhdGV1c2UgPSBnZXRQ
cml2YXRlVXNlTGFuZ1RhZyhwYXJ0cywgMCk7CisgICAgICAgIGlmICghcHJpdmF0ZXVzZS5pc051
bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBwcml2YXRldXNlOworICAgIH0KKworICAgIHJldHVy
biBTdHJpbmcoKTsKK30KKworSlNBcnJheSogY2Fub25pY2FsaXplTG9jYWxlTGlzdChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgbG9jYWxlcykKK3sKKyAgICAvLyA5LjIuMSBDYW5vbmljYWxpemVM
b2NhbGVMaXN0IChsb2NhbGVzKQorICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKTsK
KyAgICBKU0FycmF5KiBzZWVuID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwg
Z2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRp
b24oQXJyYXlXaXRoQ29udGlndW91cyksIDApOworICAgIGlmICghc2VlbikgeworICAgICAgICB0
aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIC8vIDEuIElmIGxvY2FsZXMgaXMgdW5kZWZpbmVkLCB0aGVuIGEuIFJldHVybiBh
IG5ldyBlbXB0eSBMaXN0LgorICAgIGlmIChsb2NhbGVzLmlzVW5kZWZpbmVkKCkpCisgICAgICAg
IHJldHVybiBzZWVuOworCisgICAgLy8gMi4gTGV0IHNlZW4gYmUgYW4gZW1wdHkgTGlzdC4KKyAg
ICAvLyBEb25lIGJlZm9yZSB0byBhbHNvIHJldHVybiBpbiBzdGVwIDEsIGlmIG5lZWRlZC4KKwor
ICAgIC8vIDMuIElmIFR5cGUobG9jYWxlcykgaXMgU3RyaW5nLCB0aGVuCisgICAgSlNPYmplY3Qq
IGxvY2FsZXNPYmplY3Q7CisgICAgaWYgKGxvY2FsZXMuaXNTdHJpbmcoKSkgeworICAgICAgICAv
LyAgYS4gTGV0IGFMb2NhbGVzIGJlIENyZWF0ZUFycmF5RnJvbUxpc3Qowqtsb2NhbGVzwrspLgor
ICAgICAgICBKU0FycmF5KiBsb2NhbGVzQXJyYXkgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRp
YWxpemVkKHZtLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVy
aW5nQWxsb2NhdGlvbihBcnJheVdpdGhDb250aWd1b3VzKSwgMSk7CisgICAgICAgIGxvY2FsZXNB
cnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCAwLCBsb2NhbGVzKTsKKyAgICAgICAgLy8gNC4gTGV0
IE8gYmUgVG9PYmplY3QoYUxvY2FsZXMpLgorICAgICAgICBsb2NhbGVzT2JqZWN0ID0gbG9jYWxl
c0FycmF5OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIDQuIExldCBPIGJlIFRvT2JqZWN0KGFM
b2NhbGVzKS4KKyAgICAgICAgbG9jYWxlc09iamVjdCA9IGxvY2FsZXMudG9PYmplY3QoZXhlYyk7
CisgICAgfQorCisgICAgLy8gNS4gUmV0dXJuSWZBYnJ1cHQoTykuCisgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIDYuIExldCBs
ZW4gYmUgVG9MZW5ndGgoR2V0KE8sICJsZW5ndGgiKSkuCisgICAgSlNWYWx1ZSBsZW5ndGhQcm9w
ZXJ0eSA9IGxvY2FsZXNPYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgp
OworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBkb3VibGUgbGVuZ3RoID0gbGVuZ3RoUHJvcGVydHkudG9MZW5ndGgoZXhlYyk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIC8vIEtlZXAgdHJhY2sgb2YgbG9jYWxlcyB0aGF0IGhhdmUgYmVlbiBhZGRlZCB0byB0aGUg
bGlzdC4KKyAgICBIYXNoU2V0PFN0cmluZz4gc2VlblNldDsKKworICAgIC8vIDcuIExldCBrIGJl
IDAuCisgICAgLy8gOC4gUmVwZWF0LCB3aGlsZSBrIDwgbGVuCisgICAgZm9yIChkb3VibGUgayA9
IDA7IGsgPCBsZW5ndGg7ICsraykgeworICAgICAgICAvLyBhLiBMZXQgUGsgYmUgVG9TdHJpbmco
aykuCisgICAgICAgIC8vIE5vdCBuZWVkZWQgYmVjYXVzZSBoYXNQcm9wZXJ0eSBhbmQgZ2V0IHRh
a2UgYW4gaW50IGZvciBudW1lcmljIGtleS4KKworICAgICAgICAvLyBiLiBMZXQga1ByZXNlbnQg
YmUgSGFzUHJvcGVydHkoTywgUGspLgorICAgICAgICBib29sIGtQcmVzZW50ID0gbG9jYWxlc09i
amVjdC0+aGFzUHJvcGVydHkoZXhlYywgayk7CisKKyAgICAgICAgLy8gYy4gUmV0dXJuSWZBYnJ1
cHQoa1ByZXNlbnQpLgorICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAvLyBkLiBJZiBrUHJlc2VudCBpcyB0cnVl
LCB0aGVuCisgICAgICAgIGlmIChrUHJlc2VudCkgeworICAgICAgICAgICAgLy8gaS4gTGV0IGtW
YWx1ZSBiZSBHZXQoTywgUGspLgorICAgICAgICAgICAgSlNWYWx1ZSBrVmFsdWUgPSBsb2NhbGVz
T2JqZWN0LT5nZXQoZXhlYywgayk7CisKKyAgICAgICAgICAgIC8vIGlpLiBSZXR1cm5JZkFicnVw
dChrVmFsdWUpLgorICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgICAgICAvLyBpaWkuIElmIFR5cGUo
a1ZhbHVlKSBpcyBub3QgU3RyaW5nIG9yIE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0
aW9uLgorICAgICAgICAgICAgaWYgKCFrVmFsdWUuaXNTdHJpbmcoKSAmJiAha1ZhbHVlLmlzT2Jq
ZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVy
YWwoImxvY2FsZSB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG9iamVjdCIpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
aXYuIExldCB0YWcgYmUgVG9TdHJpbmcoa1ZhbHVlKS4KKyAgICAgICAgICAgIEpTU3RyaW5nKiB0
YWcgPSBrVmFsdWUudG9TdHJpbmcoZXhlYyk7CisKKyAgICAgICAgICAgIC8vIHYuIFJldHVybklm
QWJydXB0KHRhZykuCisgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgICAgIC8vIHZpLiBJZiBJc1N0
cnVjdHVyYWxseVZhbGlkTGFuZ3VhZ2VUYWcodGFnKSBpcyBmYWxzZSwgdGhyb3cgYSBSYW5nZUVy
cm9yIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIC8vIHZpaS4gTGV0IGNhbm9uaWNhbGl6ZWRUYWcg
YmUgQ2Fub25pY2FsaXplTGFuZ3VhZ2VUYWcodGFnKS4KKyAgICAgICAgICAgIFN0cmluZyBjYW5v
bmljYWxpemVkVGFnID0gY2Fub25pY2FsaXplTGFuZ3VhZ2VUYWcodGFnLT52YWx1ZShleGVjKSk7
CisgICAgICAgICAgICBpZiAoY2Fub25pY2FsaXplZFRhZy5pc051bGwoKSkgeworICAgICAgICAg
ICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihl
eGVjLCBTdHJpbmc6OmZvcm1hdCgiaW52YWxpZCBsYW5ndWFnZSB0YWc6ICVzIiwgdGFnLT52YWx1
ZShleGVjKS51dGY4KCkuZGF0YSgpKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB2aWlpLiBJZiBjYW5vbmljYWxpemVk
VGFnIGlzIG5vdCBhbiBlbGVtZW50IG9mIHNlZW4sIGFwcGVuZCBjYW5vbmljYWxpemVkVGFnIGFz
IHRoZSBsYXN0IGVsZW1lbnQgb2Ygc2Vlbi4KKyAgICAgICAgICAgIGlmIChzZWVuU2V0LmFkZChj
YW5vbmljYWxpemVkVGFnKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgIHNlZW4tPnB1c2go
ZXhlYywganNTdHJpbmcoZXhlYywgY2Fub25pY2FsaXplZFRhZykpOworICAgICAgICB9CisgICAg
ICAgIC8vIGUuIEluY3JlYXNlIGsgYnkgMS4KKyAgICB9CisKKyAgICByZXR1cm4gc2VlbjsKK30K
Kworc3RhdGljIFN0cmluZyBiZXN0QXZhaWxhYmxlTG9jYWxlKGNvbnN0IEhhc2hTZXQ8U3RyaW5n
PiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgU3RyaW5nJiBsb2NhbGUpCit7CisgICAgLy8gOS4y
LjIgQmVzdEF2YWlsYWJsZUxvY2FsZSAoYXZhaWxhYmxlTG9jYWxlcywgbG9jYWxlKQorICAgIC8v
IDEuIExldCBjYW5kaWRhdGUgYmUgbG9jYWxlLgorICAgIFN0cmluZyBjYW5kaWRhdGUgPSBsb2Nh
bGU7CisKKyAgICAvLyAyLiBSZXBlYXQKKyAgICB3aGlsZSAoIWNhbmRpZGF0ZS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgLy8gYS4gSWYgYXZhaWxhYmxlTG9jYWxlcyBjb250YWlucyBhbiBlbGVtZW50
IGVxdWFsIHRvIGNhbmRpZGF0ZSwgdGhlbiByZXR1cm4gY2FuZGlkYXRlLgorICAgICAgICBpZiAo
YXZhaWxhYmxlTG9jYWxlcy5jb250YWlucyhjYW5kaWRhdGUpKQorICAgICAgICAgICAgcmV0dXJu
IGNhbmRpZGF0ZTsKKworICAgICAgICAvLyBiLiBMZXQgcG9zIGJlIHRoZSBjaGFyYWN0ZXIgaW5k
ZXggb2YgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiAiLSIgKFUrMDAyRCkgd2l0aGluIGNhbmRpZGF0
ZS4gSWYgdGhhdCBjaGFyYWN0ZXIgZG9lcyBub3Qgb2NjdXIsIHJldHVybiB1bmRlZmluZWQuCisg
ICAgICAgIHNpemVfdCBwb3MgPSBjYW5kaWRhdGUucmV2ZXJzZUZpbmQoJy0nKTsKKyAgICAgICAg
aWYgKHBvcyA9PSBub3RGb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAg
ICAgICAvLyBjLiBJZiBwb3Mg4omlIDIgYW5kIHRoZSBjaGFyYWN0ZXIgIi0iIG9jY3VycyBhdCBp
bmRleCBwb3MtMiBvZiBjYW5kaWRhdGUsIHRoZW4gZGVjcmVhc2UgcG9zIGJ5IDIuCisgICAgICAg
IGlmIChwb3MgPj0gMiAmJiBjYW5kaWRhdGVbcG9zIC0gMl0gPT0gJy0nKQorICAgICAgICAgICAg
cG9zIC09IDI7CisKKyAgICAgICAgLy8gZC4gTGV0IGNhbmRpZGF0ZSBiZSB0aGUgc3Vic3RyaW5n
IG9mIGNhbmRpZGF0ZSBmcm9tIHBvc2l0aW9uIDAsIGluY2x1c2l2ZSwgdG8gcG9zaXRpb24gcG9z
LCBleGNsdXNpdmUuCisgICAgICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZS5zdWJzdHJpbmcoMCwg
cG9zKTsKKyAgICB9CisKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3N0YXRpYyBKU0FycmF5
KiBsb29rdXBTdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSGFzaFNldDxT
dHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBKU0FycmF5KiByZXF1ZXN0ZWRMb2NhbGVzKQorewor
ICAgIC8vIDkuMi42IExvb2t1cFN1cHBvcnRlZExvY2FsZXMgKGF2YWlsYWJsZUxvY2FsZXMsIHJl
cXVlc3RlZExvY2FsZXMpCisKKyAgICAvLyAxLiBMZXQgckxvY2FsZXMgYmUgQ3JlYXRlQXJyYXlG
cm9tTGlzdChyZXF1ZXN0ZWRMb2NhbGVzKS4KKyAgICAvLyBBbHJlYWR5IGFuIGFycmF5LgorCisg
ICAgLy8gMi4gTGV0IGxlbiBiZSBUb0xlbmd0aChHZXQockxvY2FsZXMsICJsZW5ndGgiKSkuCisg
ICAgdW5zaWduZWQgbGVuID0gcmVxdWVzdGVkTG9jYWxlcy0+bGVuZ3RoKCk7CisKKyAgICAvLyAz
LiBMZXQgc3Vic2V0IGJlIGFuIGVtcHR5IExpc3QuCisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2FsbGVlKCktPmdsb2Jh
bE9iamVjdCgpOworICAgIEpTQXJyYXkqIHN1YnNldCA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5p
dGlhbGl6ZWQodm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVE
dXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aFVuZGVjaWRlZCksIDApOworICAgIGlmICghc3Vic2V0
KSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorCisgICAgLy8gNC4gTGV0IGsgYmUgMC4KKyAgICAvLyA1LiBSZXBl
YXQgd2hpbGUgayA8IGxlbgorICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBsZW47ICsraykg
eworICAgICAgICAvLyBhLiBMZXQgUGsgYmUgVG9TdHJpbmcoaykuCisgICAgICAgIC8vIGIuIExl
dCBsb2NhbGUgYmUgR2V0KHJMb2NhbGVzLCBQaykuCisgICAgICAgIEpTVmFsdWUgbG9jYWxlID0g
cmVxdWVzdGVkTG9jYWxlcy0+Z2V0KGV4ZWMsIGspOworCisgICAgICAgIC8vIGMuIFJldHVybklm
QWJydXB0KGxvY2FsZSkuCisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIC8vIGQuIExldCBub0V4dGVuc2lvbnNM
b2NhbGUgYmUgdGhlIFN0cmluZyB2YWx1ZSB0aGF0IGlzIGxvY2FsZSB3aXRoIGFsbCBVbmljb2Rl
IGxvY2FsZSBleHRlbnNpb24gc2VxdWVuY2VzIHJlbW92ZWQuCisgICAgICAgIEpTU3RyaW5nKiBq
c0xvY2FsZSA9IGxvY2FsZS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgU3RyaW5n
IHNMb2NhbGUgPSBqc0xvY2FsZS0+dmFsdWUoZXhlYyk7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+
IHBhcnRzOworICAgICAgICBzTG9jYWxlLnNwbGl0KCctJywgcGFydHMpOworICAgICAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIHNpemVfdCBwYXJ0c1NpemUgPSBwYXJ0cy5zaXpl
KCk7CisgICAgICAgIGlmIChwYXJ0c1NpemUgPiAwKQorICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQocGFydHNbMF0pOworICAgICAgICBmb3IgKHNpemVfdCBwID0gMTsgcCA8IHBhcnRzU2l6ZTsg
KytwKSB7CisgICAgICAgICAgICBpZiAocGFydHNbcF0gPT0gInUiKSB7CisgICAgICAgICAgICAg
ICAgLy8gU2tpcCB0aGUgdS0gYW5kIGFueXRoaW5nIHRoYXQgZm9sbG93cyB1bnRpbCBhbm90aGVy
IHNpbmdsZXRvbi4KKyAgICAgICAgICAgICAgICAvLyBXaGlsZSB0aGUgbmV4dCBwYXJ0IGlzIHBh
cnQgb2YgdGhlIHVuaWNvZGUgZXh0ZW5zaW9uLCBza2lwIGl0LgorICAgICAgICAgICAgICAgIHdo
aWxlIChwICsgMSA8IHBhcnRzU2l6ZSAmJiBwYXJ0c1twICsgMV0ubGVuZ3RoKCkgPiAxKQorICAg
ICAgICAgICAgICAgICAgICArK3A7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCctJyk7CisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
cGFydHNbcF0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFN0cmluZyBub0V4
dGVuc2lvbnNMb2NhbGUgPSBidWlsZGVyLnRvU3RyaW5nKCk7CisKKyAgICAgICAgLy8gZS4gTGV0
IGF2YWlsYWJsZUxvY2FsZSBiZSBCZXN0QXZhaWxhYmxlTG9jYWxlKGF2YWlsYWJsZUxvY2FsZXMs
IG5vRXh0ZW5zaW9uc0xvY2FsZSkuCisgICAgICAgIFN0cmluZyBhdmFpbGFibGVMb2NhbGUgPSBi
ZXN0QXZhaWxhYmxlTG9jYWxlKGF2YWlsYWJsZUxvY2FsZXMsIG5vRXh0ZW5zaW9uc0xvY2FsZSk7
CisKKyAgICAgICAgLy8gZi4gSWYgYXZhaWxhYmxlTG9jYWxlIGlzIG5vdCB1bmRlZmluZWQsIHRo
ZW4gYXBwZW5kIGxvY2FsZSB0byB0aGUgZW5kIG9mIHN1YnNldC4KKyAgICAgICAgaWYgKCFhdmFp
bGFibGVMb2NhbGUuaXNOdWxsKCkpCisgICAgICAgICAgICBzdWJzZXQtPnB1c2goZXhlYywgbG9j
YWxlKTsKKworICAgICAgICAvLyBnLiBJbmNyZW1lbnQgayBieSAxLgorICAgIH0KKworICAgIC8v
IDYuIFJldHVybiBzdWJzZXQuCisgICAgcmV0dXJuIHN1YnNldDsKK30KKworc3RhdGljIEpTQXJy
YXkqIGJlc3RGaXRTdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSGFzaFNl
dDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBKU0FycmF5KiByZXF1ZXN0ZWRMb2NhbGVzKQor
eworICAgIC8vIDkuMi43IEJlc3RGaXRTdXBwb3J0ZWRMb2NhbGVzIChhdmFpbGFibGVMb2NhbGVz
LCByZXF1ZXN0ZWRMb2NhbGVzKQorICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgc29tZXRoaW5nIGJl
dHRlciB0aGFuIGxvb2t1cC4KKyAgICByZXR1cm4gbG9va3VwU3VwcG9ydGVkTG9jYWxlcyhleGVj
LCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTsKK30KKworSlNWYWx1ZSBzdXBw
b3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFp
bGFibGVMb2NhbGVzLCBKU0FycmF5KiByZXF1ZXN0ZWRMb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnMp
Cit7CisgICAgLy8gOS4yLjggU3VwcG9ydGVkTG9jYWxlcyAoYXZhaWxhYmxlTG9jYWxlcywgcmVx
dWVzdGVkTG9jYWxlcywgb3B0aW9ucykKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFN0
cmluZyBtYXRjaGVyOworCisgICAgLy8gMS4gSWYgb3B0aW9ucyBpcyBub3QgdW5kZWZpbmVkLCB0
aGVuCisgICAgaWYgKCFvcHRpb25zLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgLy8gYS4gTGV0
IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJsb2NhbGVNYXRjaGVyIiwgInN0cmluZyIs
IMKrICJsb29rdXAiLCAiYmVzdCBmaXQiIMK7LCAiYmVzdCBmaXQiKS4KKyAgICAgICAgY29uc3Qg
SGFzaFNldDxTdHJpbmc+IG1hdGNoZXJzKHsgQVNDSUlMaXRlcmFsKCJsb29rdXAiKSwgQVNDSUlM
aXRlcmFsKCJiZXN0IGZpdCIpIH0pOworICAgICAgICBtYXRjaGVyID0gZ2V0SW50bFN0cmluZ09w
dGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCBtYXRj
aGVycywgImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBvciBcImJlc3Qg
Zml0XCIiLCBBU0NJSUxpdGVyYWwoImJlc3QgZml0IikpOworICAgICAgICAvLyBiLiBSZXR1cm5J
ZkFicnVwdChtYXRjaGVyKS4KKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
Mi4gRWxzZSwgbGV0IG1hdGNoZXIgYmUgImJlc3QgZml0Ii4KKyAgICAgICAgbWF0Y2hlciA9IEFT
Q0lJTGl0ZXJhbCgiYmVzdCBmaXQiKTsKKyAgICB9CisKKyAgICBKU0FycmF5KiBzdXBwb3J0ZWRM
b2NhbGVzOworICAgIC8vIDMuIElmIG1hdGNoZXIgaXMgImJlc3QgZml0IiwKKyAgICBpZiAobWF0
Y2hlciA9PSAiYmVzdCBmaXQiKSB7CisgICAgICAgIC8vIGEuIExldCBNYXRjaGVyT3BlcmF0aW9u
IGJlIHRoZSBhYnN0cmFjdCBvcGVyYXRpb24gQmVzdEZpdFN1cHBvcnRlZExvY2FsZXMuCisgICAg
ICAgIC8vIDUuIExldCBzdXBwb3J0ZWRMb2NhbGVzIGJlIE1hdGNoZXJPcGVyYXRpb24oYXZhaWxh
YmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcykuCisgICAgICAgIHN1cHBvcnRlZExvY2FsZXMg
PSBiZXN0Rml0U3VwcG9ydGVkTG9jYWxlcyhleGVjLCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0
ZWRMb2NhbGVzKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyA0LiBFbHNlCisgICAgICAgIC8v
IGEuIExldCBNYXRjaGVyT3BlcmF0aW9uIGJlIHRoZSBhYnN0cmFjdCBvcGVyYXRpb24gTG9va3Vw
U3VwcG9ydGVkTG9jYWxlcy4KKyAgICAgICAgLy8gNS4gTGV0IHN1cHBvcnRlZExvY2FsZXMgYmUg
TWF0Y2hlck9wZXJhdGlvbihhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKS4KKyAg
ICAgICAgc3VwcG9ydGVkTG9jYWxlcyA9IGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoZXhlYywgYXZh
aWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcyk7CisgICAgfQorCisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIC8v
IDYuIExldCBzdWJzZXQgYmUgQ3JlYXRlQXJyYXlGcm9tTGlzdChzdXBwb3J0ZWRMb2NhbGVzKS4K
KyAgICAvLyBBbHJlYWR5IGFuIGFycmF5LgorCisgICAgLy8gNy4gTGV0IGtleXMgYmUgc3Vic2V0
LltbT3duUHJvcGVydHlLZXlzXV0oKS4KKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKGV4ZWMs
IFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOworICAgIHN1cHBvcnRlZExvY2FsZXMtPmdldE93
blByb3BlcnR5TmFtZXMoc3VwcG9ydGVkTG9jYWxlcywgZXhlYywga2V5cywgRW51bWVyYXRpb25N
b2RlKCkpOworCisgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2M7CisgICAgZGVzYy5zZXRDb25m
aWd1cmFibGUoZmFsc2UpOworICAgIGRlc2Muc2V0V3JpdGFibGUoZmFsc2UpOworCisgICAgLy8g
OC4gUmVwZWF0IGZvciBlYWNoIGVsZW1lbnQgUCBvZiBrZXlzIGluIExpc3Qgb3JkZXIsCisgICAg
c2l6ZV90IGxlbiA9IGtleXMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVu
OyArK2kpIHsKKyAgICAgICAgLy8gYS4gTGV0IGRlc2MgYmUgUHJvcGVydHlEZXNjcmlwdG9yIHsg
W1tDb25maWd1cmFibGVdXTogZmFsc2UsIFtbV3JpdGFibGVdXTogZmFsc2UgfS4KKyAgICAgICAg
Ly8gQ3JlYXRlZCBhYm92ZSBmb3IgcmV1c2UuCisKKyAgICAgICAgLy8gYi4gTGV0IHN0YXR1cyBi
ZSBEZWZpbmVQcm9wZXJ0eU9yVGhyb3coc3Vic2V0LCBQLCBkZXNjKS4KKyAgICAgICAgc3VwcG9y
dGVkTG9jYWxlcy0+ZGVmaW5lT3duUHJvcGVydHkoc3VwcG9ydGVkTG9jYWxlcywgZXhlYywga2V5
c1tpXSwgZGVzYywgdHJ1ZSk7CisKKyAgICAgICAgLy8gYy4gQXNzZXJ0OiBzdGF0dXMgaXMgbm90
IGFicnVwdCBjb21wbGV0aW9uLgorICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICAvLyA5LiBSZXR1
cm4gc3Vic2V0LgorICAgIHJldHVybiBzdXBwb3J0ZWRMb2NhbGVzOworfQorCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShJTlRMKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bE9iamVjdC5oCmluZGV4IDgzNDI4NTQyYjJkMGZiYzdlNWIxNDRhMzZiY2Ji
ODZlZGZjYmJlODIuLmZkZTYyYjUzYTY2MDU3MmRkYzk5NDIwMzc1MmI3ZWQ3ZWQwMmE2OGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmgKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2lmIEVOQUJMRShJTlRMKQogCisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMu
aCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTU2LDYgKzU3
LDkgQEAgcHJpdmF0ZToKICAgICBJbnRsT2JqZWN0KFZNJiwgU3RydWN0dXJlKik7CiB9OwogCitK
U0FycmF5KiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUgbG9jYWxl
cyk7CitKU1ZhbHVlIHN1cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlKiwgY29uc3QgSGFzaFNldDxT
dHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBKU0FycmF5KiByZXF1ZXN0ZWRMb2NhbGVzLCBKU1Zh
bHVlIG9wdGlvbnMpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShJ
TlRMKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAppbmRl
eCA5ZTBhYWIxNzc0ZGUxN2EwM2NhNmRlMTJjOWU5OGY5ZDcyMzYzNjBiLi5hMGNmNzc3ZGQ2OThh
NDY2ODRlNDcwY2M1MjBiZWMxY2U0MThhODdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NKU1ZhbHVlLmNwcApAQCAtNTYsNiArNTYsMTggQEAgZG91YmxlIEpTVmFsdWU6
OnRvSW50ZWdlclByZXNlcnZlTmFOKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICByZXR1cm4g
dHJ1bmModG9OdW1iZXIoZXhlYykpOwogfQogCitkb3VibGUgSlNWYWx1ZTo6dG9MZW5ndGgoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIC8vIEVDTUEgNy4xLjE1CisgICAgLy8gaHR0cDov
L3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbGVuZ3RoCisg
ICAgZG91YmxlIGQgPSB0b0ludGVnZXIoZXhlYyk7CisgICAgaWYgKGQgPD0gMCkKKyAgICAgICAg
cmV0dXJuIDAuMDsKKyAgICBpZiAoc3RkOjppc2luZihkKSkKKyAgICAgICAgcmV0dXJuIDkwMDcx
OTkyNTQ3NDA5OTEuMDsgLy8gMiAqKiA1MyAtIDEKKyAgICByZXR1cm4gc3RkOjptaW4oZCwgOTAw
NzE5OTI1NDc0MDk5MS4wKTsKK30KKwogZG91YmxlIEpTVmFsdWU6OnRvTnVtYmVyU2xvd0Nhc2Uo
RXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIEFTU0VSVCghaXNJbnQzMigpICYmICFpc0Rv
dWJsZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pT
VmFsdWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAppbmRl
eCBiN2VhYWQyZGEwYTJkNTMzNjZhOTFlNjRhNGMyOTNlYjBjYjk4Y2E3Li5jODAzYjY0OWE1MDcy
MjU0NGE5M2MwZjYxYzIwMTI1Y2ExMmI1ZGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDSlNWYWx1ZS5oCkBAIC0yNjIsNiArMjYyLDcgQEAgcHVibGljOgogICAgIEpTX0VY
UE9SVF9QUklWQVRFIGRvdWJsZSB0b0ludGVnZXJQcmVzZXJ2ZU5hTihFeGVjU3RhdGUqKSBjb25z
dDsKICAgICBpbnQzMl90IHRvSW50MzIoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgdWludDMyX3Qg
dG9VSW50MzIoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgZG91YmxlIHRvTGVuZ3RoKEV4ZWNTdGF0
ZSopIGNvbnN0OwogCiAgICAgLy8gRmxvYXRpbmcgcG9pbnQgY29udmVyc2lvbnMgKHRoaXMgaXMg
YSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgV2ViQ29yZTsKICAgICAvLyBzaW5nbGUgcHJlY2lz
aW9uIGZsb2F0IGlzIG5vdCBhIHJlcHJlc2VudGF0aW9uIHVzZWQgaW4gSlMgb3IgSlNDKS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRl
eCAyOTkxMDY0OTgyODdkZjI4OTA2NTE4ZDNkYTI3MTIyZmI4YzdjMWNjLi41NDVhMTM0NzFkM2Rm
ZTkxOGQ5OTZmMGIwNTllYTU3ODY2NDhlZmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC0xNDcsNiArMTQ3LDkgQEAKIAogI2lm
IEVOQUJMRShJTlRMKQogI2luY2x1ZGUgIkludGxPYmplY3QuaCIKKyNpbmNsdWRlIDx1bmljb2Rl
L3Vjb2wuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3VkYXQuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3Vu
dW0uaD4KICNlbmRpZiAvLyBFTkFCTEUoSU5UTCkKIAogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVD
VE9SKQpAQCAtMTAwNyw2ICsxMDEwLDUwIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnNldE5hbWUo
Y29uc3QgU3RyaW5nJiBuYW1lKQogI2VuZGlmCiB9CiAKKyMgaWYgRU5BQkxFKElOVEwpCitjb25z
dCBIYXNoU2V0PFN0cmluZz4mIEpTR2xvYmFsT2JqZWN0OjppbnRsQ29sbGF0b3JBdmFpbGFibGVM
b2NhbGVzKCkKK3sKKyAgICBpZiAobV9pbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzLmlzRW1w
dHkoKSkgeworICAgICAgICBpbnQzMl90IGNvdW50ID0gdWNvbF9jb3VudEF2YWlsYWJsZSgpOwor
ICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAg
ICBTdHJpbmcgbG9jYWxlKHVjb2xfZ2V0QXZhaWxhYmxlKGkpKTsKKyAgICAgICAgICAgIC8vIENo
YW5nZSBmcm9tIElDVSBmb3JtYXQgdG8gQkNQNDcuCisgICAgICAgICAgICBsb2NhbGUucmVwbGFj
ZSgnXycsICctJyk7CisgICAgICAgICAgICBtX2ludGxDb2xsYXRvckF2YWlsYWJsZUxvY2FsZXMu
YWRkKGxvY2FsZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG1faW50bENvbGxhdG9y
QXZhaWxhYmxlTG9jYWxlczsKK30KKworY29uc3QgSGFzaFNldDxTdHJpbmc+JiBKU0dsb2JhbE9i
amVjdDo6aW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpCit7CisgICAgaWYgKG1f
aW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
aW50MzJfdCBjb3VudCA9IHVkYXRfY291bnRBdmFpbGFibGUoKTsKKyAgICAgICAgZm9yIChpbnQz
Ml90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nIGxvY2FsZSh1
ZGF0X2dldEF2YWlsYWJsZShpKSk7CisgICAgICAgICAgICAvLyBDaGFuZ2UgZnJvbSBJQ1UgZm9y
bWF0IHRvIEJDUDQ3LgorICAgICAgICAgICAgbG9jYWxlLnJlcGxhY2UoJ18nLCAnLScpOworICAg
ICAgICAgICAgbV9pbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzLmFkZChsb2NhbGUp
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBtX2ludGxEYXRlVGltZUZvcm1hdEF2YWls
YWJsZUxvY2FsZXM7Cit9CisKK2NvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgSlNHbG9iYWxPYmplY3Q6
OmludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkKK3sKKyAgICBpZiAobV9pbnRsTnVt
YmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaW50MzJfdCBj
b3VudCA9IHVudW1fY291bnRBdmFpbGFibGUoKTsKKyAgICAgICAgZm9yIChpbnQzMl90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nIGxvY2FsZSh1bnVtX2dldEF2
YWlsYWJsZShpKSk7CisgICAgICAgICAgICAvLyBDaGFuZ2UgZnJvbSBJQ1UgZm9ybWF0IHRvIEJD
UDQ3LgorICAgICAgICAgICAgbG9jYWxlLnJlcGxhY2UoJ18nLCAnLScpOworICAgICAgICAgICAg
bV9pbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcy5hZGQobG9jYWxlKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gbV9pbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlczsK
K30KKyNlbmRpZiAvLyBFTkFCTEUoSU5UTCkKKwogdm9pZCBKU0dsb2JhbE9iamVjdDo6cXVldWVN
aWNyb3Rhc2soUGFzc1JlZlB0cjxNaWNyb3Rhc2s+IHRhc2spCiB7CiAgICAgaWYgKGdsb2JhbE9i
amVjdE1ldGhvZFRhYmxlKCktPnF1ZXVlVGFza1RvRXZlbnRMb29wKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCBkY2IzYTA4N2Y3OTli
ZjZiZDJjNGE2NjM2ODYwODQzMWYxYmI0ZGVkLi4xZGY2ZGEyNDIwM2ZmN2QxNGI2YzQ2MWEzNWU1
ZDA2OThmNGM3MWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmgKQEAgLTMwNyw2ICszMDcsMTIgQEAgcHJvdGVjdGVkOgogICAgIHN0ZDo6dW5p
cXVlX3B0cjxKU0dsb2JhbE9iamVjdERlYnVnZ2FibGU+IG1faW5zcGVjdG9yRGVidWdnYWJsZTsK
ICNlbmRpZgogCisjaWYgRU5BQkxFKElOVEwpCisgICAgSGFzaFNldDxTdHJpbmc+IG1faW50bENv
bGxhdG9yQXZhaWxhYmxlTG9jYWxlczsKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9pbnRsRGF0ZVRp
bWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2ludGxOdW1i
ZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzOworI2VuZGlmIC8vIEVOQUJMRShJTlRMKQorCiAgICAg
UmVmUHRyPFdhdGNocG9pbnRTZXQ+IG1fbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQ7
CiAgICAgUmVmUHRyPFdhdGNocG9pbnRTZXQ+IG1faGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50Owog
ICAgIFJlZlB0cjxXYXRjaHBvaW50U2V0PiBtX3ZhckluamVjdGlvbldhdGNocG9pbnQ7CkBAIC01
MjUsNiArNTMxLDEyIEBAIHB1YmxpYzoKICAgICBKU0dsb2JhbE9iamVjdERlYnVnZ2FibGUmIGlu
c3BlY3RvckRlYnVnZ2FibGUoKSB7IHJldHVybiAqbV9pbnNwZWN0b3JEZWJ1Z2dhYmxlLmdldCgp
OyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShJTlRMKQorICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5n
PiYgaW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IEhhc2hTZXQ8U3Ry
aW5nPiYgaW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOworICAgIGNvbnN0IEhh
c2hTZXQ8U3RyaW5nPiYgaW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMoKTsKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5UTCkKKwogICAgIHZvaWQgc2V0Q29uc29sZUNsaWVudChDb25zb2xlQ2xp
ZW50KiBjb25zb2xlQ2xpZW50KSB7IG1fY29uc29sZUNsaWVudCA9IGNvbnNvbGVDbGllbnQ7IH0K
ICAgICBDb25zb2xlQ2xpZW50KiBjb25zb2xlQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jb25z
b2xlQ2xpZW50OyB9CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3MTZhYzk4M2QyZGY0N2M1Y2UxMzBmMGE3OWEzMzk2Yjdi
YWUzYWQzLi44YzRkYzk3MTQwMDNmNmZjYjVlOTgwODVlMTVjNzk4YWVlYWQ3NzgxIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTUtMDktMTIgIEFuZHkgVmFuV2Fnb25lciAgPHRoZXRhbGVjcmFm
dGVyQGdtYWlsLmNvbT4KKworICAgICAgICBbSU5UTF0gSW1wbGVtZW50IHN1cHBvcnRlZExvY2Fs
ZXNPZiBvbiBJbnRsIENvbnN0cnVjdG9ycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBqcy9pbnRsLWNvbGxhdG9yLWV4cGVjdGVkLnR4dDogQWRkZWQg
dGVzdHMgZm9yIHN1cHBvcnRlZExvY2FsZXNPZgorICAgICAgICAqIGpzL2ludGwtZGF0ZXRpbWVm
b3JtYXQtZXhwZWN0ZWQudHh0OiBBZGRlZCB0ZXN0cyBmb3Igc3VwcG9ydGVkTG9jYWxlc09mCisg
ICAgICAgICoganMvaW50bC1udW1iZXJmb3JtYXQtZXhwZWN0ZWQudHh0OiBBZGRlZCB0ZXN0cyBm
b3Igc3VwcG9ydGVkTG9jYWxlc09mCisgICAgICAgICoganMvc2NyaXB0LXRlc3RzL2ludGwtY29s
bGF0b3IuanM6IEFkZGVkIHRlc3RzIGZvciBzdXBwb3J0ZWRMb2NhbGVzT2YKKyAgICAgICAgKiBq
cy9zY3JpcHQtdGVzdHMvaW50bC1kYXRldGltZWZvcm1hdC5qczogQWRkZWQgdGVzdHMgZm9yIHN1
cHBvcnRlZExvY2FsZXNPZgorICAgICAgICAqIGpzL3NjcmlwdC10ZXN0cy9pbnRsLW51bWJlcmZv
cm1hdC5qczogQWRkZWQgdGVzdHMgZm9yIHN1cHBvcnRlZExvY2FsZXNPZgorCiAyMDE1LTA5LTEx
ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAg
U1ZHQ29sb3IgY3VzdG9tIHRleHQgZm9ybWF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBDU1MgY29s
b3IgY3VzdG9tIHRleHQgZm9ybWF0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9pbnRsLWNv
bGxhdG9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL2ludGwtY29sbGF0b3ItZXhwZWN0
ZWQudHh0CmluZGV4IDRkNWZkZGY3NTZmYzhmZjAwMGZlZTMwYTU3ZGZhYTA2MjZlNDM1OTguLmVm
M2FiZTAyMGQ0MzU5ZDY0MzliOGJmYjZmOTdlYWY2YjJkMTg5ZjAgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2pzL2ludGwtY29sbGF0b3ItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2pz
L2ludGwtY29sbGF0b3ItZXhwZWN0ZWQudHh0CkBAIC0xOCw2ICsxOCwzMSBAQCBQQVNTIE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSW50bC5Db2xsYXRvciwgJ3Byb3RvdHlwZScpLmVu
dW1lcmFibGUgaXMgZgogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwu
Q29sbGF0b3IsICdwcm90b3R5cGUnKS5jb25maWd1cmFibGUgaXMgZmFsc2UKIFBBU1MgSW50bC5D
b2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YubGVuZ3RoIGlzIDEKIFBBU1MgSW50bC5Db2xsYXRv
ci5zdXBwb3J0ZWRMb2NhbGVzT2YoKSBpcyBhbiBpbnN0YW5jZSBvZiBBcnJheQorUEFTUyBJbnRs
LkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKG51bGwsICdlbicpIGlzIFsgJ2VuJyBd
CitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoe30sICdlbicpIGlz
IFsgJ2VuJyBdCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoMSwg
J2VuJykgaXMgWyAnZW4nIF0KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2Yo
OSkgaXMgW10KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuJykgaXMg
WyAnZW4nIF0KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoeyBsZW5ndGg6
IDQsIDE6ICdlbicsIDA6ICdlcycsIDM6ICdkZScgfSkgaXMgWyAnZXMnLCAnZW4nLCAnZGUnIF0K
K1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoWyAnZW4nLCAncHQnLCAnZW4n
LCAnZXMnIF0pIGlzIFsgJ2VuJywgJ3B0JywgJ2VzJyBdCitQQVNTIEludGwuQ29sbGF0b3Iuc3Vw
cG9ydGVkTG9jYWxlc09mKCdFbi1sYVRuLXVzLXZhcmlhbnQyLXZhcmlhbnQxLTFhYmMtVS1rby10
UnVlLUEtYWEtYWFhLXgtUkVTRVJWRUQnKSBpcyBbICdlbi1MYXRuLVVTLXZhcmlhbnQyLXZhcmlh
bnQxLTFhYmMtYS1hYS1hYWEtdS1rby10cnVlLXgtcmVzZXJ2ZWQnIF0KK1BBU1MgSW50bC5Db2xs
YXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ25vLWJvaycpIGlzIFsgJ25iJyBdCitQQVNTIEludGwu
Q29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCd4LXNvbWUtdGhpbmcnKSBpcyBbXQorUEFTUyBJ
bnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVu
Z3RoOiB7IGdldCgpIHsgdGhyb3cgRXJyb3IoJ2EnKSB9IH0gfSkpIHRocmV3IGV4Y2VwdGlvbiBF
cnJvcjogYS4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoT2JqZWN0LmNy
ZWF0ZShudWxsLCB7IGxlbmd0aDogeyB2YWx1ZTogMSB9LCAwOiB7IGdldCgpIHsgdGhyb3cgRXJy
b3IoJ2InKSB9IH0gfSkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogYi4KK1BBU1MgSW50bC5Db2xs
YXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoWyB7IHRvU3RyaW5nKCkgeyB0aHJvdyBFcnJvcignYycp
IH0gfSBdKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IGMuCitQQVNTIEludGwuQ29sbGF0b3Iuc3Vw
cG9ydGVkTG9jYWxlc09mKFsgNSBdKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBsb2NhbGUg
dmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvciBvYmplY3QuCitQQVNTIEludGwuQ29sbGF0b3Iuc3Vw
cG9ydGVkTG9jYWxlc09mKCcnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBs
YW5ndWFnZSB0YWc6IC4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2En
KSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGEuCitQ
QVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdhYmNkZWZnaGlqJykgdGhyZXcg
ZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBhYmNkZWZnaGlqLgor
UEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignIyQnKSB0aHJldyBleGNlcHRp
b24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6ICMkLgorUEFTUyBJbnRsLkNvbGxh
dG9yLnN1cHBvcnRlZExvY2FsZXNPZignZW4tQC1hYmMnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VF
cnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLUAtYWJjLgorUEFTUyBJbnRsLkNvbGxhdG9y
LnN1cHBvcnRlZExvY2FsZXNPZignZW4tdScpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBp
bnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tdS4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRM
b2NhbGVzT2YoJ2VuLXUta24tdHJ1ZS11LWtvLXRydWUnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VF
cnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXUta24tdHJ1ZS11LWtvLXRydWUuCitQQVNT
IEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi14JykgdGhyZXcgZXhjZXB0aW9u
IFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi14LgorUEFTUyBJbnRsLkNvbGxh
dG9yLnN1cHBvcnRlZExvY2FsZXNPZignZW4tKicpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9y
OiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tKi4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0
ZWRMb2NhbGVzT2YoJ2VuLScpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxh
bmd1YWdlIHRhZzogZW4tLgorUEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZign
ZW4tLVVTJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFn
OiBlbi0tVVMuCiBQQVNTIEludGwuQ29sbGF0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yIGlzIElu
dGwuQ29sbGF0b3IKIFBBU1MgSW50bC5Db2xsYXRvci5wcm90b3R5cGUuY29tcGFyZSBpcyBhbiBp
bnN0YW5jZSBvZiBGdW5jdGlvbgogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEludGwuQ29sbGF0b3IucHJvdG90eXBlLCAnY29tcGFyZScpLmdldCBpcyBhbiBpbnN0YW5jZSBv
ZiBGdW5jdGlvbgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvaW50bC1kYXRldGltZWZvcm1h
dC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9pbnRsLWRhdGV0aW1lZm9ybWF0LWV4cGVj
dGVkLnR4dAppbmRleCA2MDE3M2ZlMjcyMmVmNjViMjIwZGQ5YmU0N2FmMTQyYmZiZjM4NDM1Li5k
MDE2YzgwMDQ3ZDY0ZDAyMzhiNWM5NmQ3YjkwYjZjNGFlMWM5ZWE0IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9qcy9pbnRsLWRhdGV0aW1lZm9ybWF0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9qcy9pbnRsLWRhdGV0aW1lZm9ybWF0LWV4cGVjdGVkLnR4dApAQCAtMTgsNiArMTgsMzEg
QEAgUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuRGF0ZVRpbWVGb3Jt
YXQsICdwcm90b3R5cGUnKS5lbnVtZXJhYmwKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihJbnRsLkRhdGVUaW1lRm9ybWF0LCAncHJvdG90eXBlJykuY29uZmlndXJhYmxlIGlz
IGZhbHNlCiBQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmxlbmd0
aCBpcyAxCiBQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCkgaXMg
YW4gaW5zdGFuY2Ugb2YgQXJyYXkKK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRM
b2NhbGVzT2YuY2FsbChudWxsLCAnZW4nKSBpcyBbICdlbicgXQorUEFTUyBJbnRsLkRhdGVUaW1l
Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKHt9LCAnZW4nKSBpcyBbICdlbicgXQorUEFT
UyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKDEsICdlbicpIGlz
IFsgJ2VuJyBdCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKDkp
IGlzIFtdCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbicp
IGlzIFsgJ2VuJyBdCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09m
KHsgbGVuZ3RoOiA0LCAxOiAnZW4nLCAwOiAnZXMnLCAzOiAnZGUnIH0pIGlzIFsgJ2VzJywgJ2Vu
JywgJ2RlJyBdCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsg
J2VuJywgJ3B0JywgJ2VuJywgJ2VzJyBdKSBpcyBbICdlbicsICdwdCcsICdlcycgXQorUEFTUyBJ
bnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignRW4tbGFUbi11cy12YXJpYW50
Mi12YXJpYW50MS0xYWJjLVUta28tdFJ1ZS1BLWFhLWFhYS14LVJFU0VSVkVEJykgaXMgWyAnZW4t
TGF0bi1VUy12YXJpYW50Mi12YXJpYW50MS0xYWJjLWEtYWEtYWFhLXUta28tdHJ1ZS14LXJlc2Vy
dmVkJyBdCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCduby1i
b2snKSBpcyBbICduYicgXQorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2Fs
ZXNPZigneC1zb21lLXRoaW5nJykgaXMgW10KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBw
b3J0ZWRMb2NhbGVzT2YoT2JqZWN0LmNyZWF0ZShudWxsLCB7IGxlbmd0aDogeyBnZXQoKSB7IHRo
cm93IEVycm9yKCdhJykgfSB9IH0pKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IGEuCitQQVNTIElu
dGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKE9iamVjdC5jcmVhdGUobnVsbCwg
eyBsZW5ndGg6IHsgdmFsdWU6IDEgfSwgMDogeyBnZXQoKSB7IHRocm93IEVycm9yKCdiJykgfSB9
IH0pKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IGIuCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQu
c3VwcG9ydGVkTG9jYWxlc09mKFsgeyB0b1N0cmluZygpIHsgdGhyb3cgRXJyb3IoJ2MnKSB9IH0g
XSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBjLgorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1
cHBvcnRlZExvY2FsZXNPZihbIDUgXSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogbG9jYWxl
IHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb3Igb2JqZWN0LgorUEFTUyBJbnRsLkRhdGVUaW1lRm9y
bWF0LnN1cHBvcnRlZExvY2FsZXNPZignJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGlu
dmFsaWQgbGFuZ3VhZ2UgdGFnOiAuCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVk
TG9jYWxlc09mKCdhJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3Vh
Z2UgdGFnOiBhLgorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZign
YWJjZGVmZ2hpaicpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdl
IHRhZzogYWJjZGVmZ2hpai4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2Nh
bGVzT2YoJyMkJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2Ug
dGFnOiAjJC4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2Vu
LUAtYWJjJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFn
OiBlbi1ALWFiYy4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2Yo
J2VuLXUnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6
IGVuLXUuCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi11
LWtuLXRydWUtdS1rby10cnVlJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQg
bGFuZ3VhZ2UgdGFnOiBlbi11LWtuLXRydWUtdS1rby10cnVlLgorUEFTUyBJbnRsLkRhdGVUaW1l
Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4teCcpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVy
cm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4teC4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1h
dC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLSonKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjog
aW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLSouCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3Vw
cG9ydGVkTG9jYWxlc09mKCdlbi0nKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxp
ZCBsYW5ndWFnZSB0YWc6IGVuLS4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRM
b2NhbGVzT2YoJ2VuLS1VUycpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxh
bmd1YWdlIHRhZzogZW4tLVVTLgogUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZS5j
b25zdHJ1Y3RvciBpcyBJbnRsLkRhdGVUaW1lRm9ybWF0CiBQQVNTIEludGwuRGF0ZVRpbWVGb3Jt
YXQucHJvdG90eXBlLmZvcm1hdCBpcyBhbiBpbnN0YW5jZSBvZiBGdW5jdGlvbgogUEFTUyBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90eXBl
LCAnZm9ybWF0JykuZ2V0IGlzIGFuIGluc3RhbmNlIG9mIEZ1bmN0aW9uCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9qcy9pbnRsLW51bWJlcmZvcm1hdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9qcy9pbnRsLW51bWJlcmZvcm1hdC1leHBlY3RlZC50eHQKaW5kZXggNTIxODUxZWQ2NjVkOGU3
NDhkMWI2OTI0NjUzNDZiMWY3YmVjZjRkMC4uYmZjM2U3NzVkZDA5YzczOTk3YmU0ODAyYmJiYjI3
ZTc0NTA5Yjc3MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvanMvaW50bC1udW1iZXJmb3JtYXQt
ZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2pzL2ludGwtbnVtYmVyZm9ybWF0LWV4cGVj
dGVkLnR4dApAQCAtMTgsNiArMTgsMzEgQEAgUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEludGwuTnVtYmVyRm9ybWF0LCAncHJvdG90eXBlJykuZW51bWVyYWJsZQogUEFTUyBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuTnVtYmVyRm9ybWF0LCAncHJvdG90
eXBlJykuY29uZmlndXJhYmxlIGlzIGZhbHNlCiBQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBv
cnRlZExvY2FsZXNPZi5sZW5ndGggaXMgMQogUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0
ZWRMb2NhbGVzT2YoKSBpcyBhbiBpbnN0YW5jZSBvZiBBcnJheQorUEFTUyBJbnRsLk51bWJlckZv
cm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbChudWxsLCAnZW4nKSBpcyBbICdlbicgXQorUEFT
UyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbCh7fSwgJ2VuJykgaXMg
WyAnZW4nIF0KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwo
MSwgJ2VuJykgaXMgWyAnZW4nIF0KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9j
YWxlc09mKDkpIGlzIFtdCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNP
ZignZW4nKSBpcyBbICdlbicgXQorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2Nh
bGVzT2YoeyBsZW5ndGg6IDQsIDE6ICdlbicsIDA6ICdlcycsIDM6ICdkZScgfSkgaXMgWyAnZXMn
LCAnZW4nLCAnZGUnIF0KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09m
KFsgJ2VuJywgJ3B0JywgJ2VuJywgJ2VzJyBdKSBpcyBbICdlbicsICdwdCcsICdlcycgXQorUEFT
UyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ0VuLWxhVG4tdXMtdmFyaWFu
dDItdmFyaWFudDEtMWFiYy1VLWtvLXRSdWUtQS1hYS1hYWEteC1SRVNFUlZFRCcpIGlzIFsgJ2Vu
LUxhdG4tVVMtdmFyaWFudDItdmFyaWFudDEtMWFiYy1hLWFhLWFhYS11LWtvLXRydWUteC1yZXNl
cnZlZCcgXQorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ25vLWJv
aycpIGlzIFsgJ25iJyBdCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNP
ZigneC1zb21lLXRoaW5nJykgaXMgW10KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVk
TG9jYWxlc09mKE9iamVjdC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgZ2V0KCkgeyB0aHJvdyBF
cnJvcignYScpIH0gfSB9KSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBhLgorUEFTUyBJbnRsLk51
bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoT2JqZWN0LmNyZWF0ZShudWxsLCB7IGxlbmd0
aDogeyB2YWx1ZTogMSB9LCAwOiB7IGdldCgpIHsgdGhyb3cgRXJyb3IoJ2InKSB9IH0gfSkpIHRo
cmV3IGV4Y2VwdGlvbiBFcnJvcjogYi4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVk
TG9jYWxlc09mKFsgeyB0b1N0cmluZygpIHsgdGhyb3cgRXJyb3IoJ2MnKSB9IH0gXSkgdGhyZXcg
ZXhjZXB0aW9uIEVycm9yOiBjLgorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2Nh
bGVzT2YoWyA1IF0pIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IGxvY2FsZSB2YWx1ZSBtdXN0
IGJlIGEgc3RyaW5nIG9yIG9iamVjdC4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVk
TG9jYWxlc09mKCcnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFn
ZSB0YWc6IC4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdhJykg
dGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBhLgorUEFT
UyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2FiY2RlZmdoaWonKSB0aHJl
dyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGFiY2RlZmdoaWou
CitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignIyQnKSB0aHJldyBl
eGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6ICMkLgorUEFTUyBJbnRs
Lk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLUAtYWJjJykgdGhyZXcgZXhjZXB0
aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi1ALWFiYy4KK1BBU1MgSW50
bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi11JykgdGhyZXcgZXhjZXB0aW9u
IFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi11LgorUEFTUyBJbnRsLk51bWJl
ckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXUta24tdHJ1ZS11LWtvLXRydWUnKSB0aHJl
dyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXUta24tdHJ1
ZS11LWtvLXRydWUuCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZign
ZW4teCcpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzog
ZW4teC4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi0qJykg
dGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi0qLgor
UEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLScpIHRocmV3IGV4
Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tLgorUEFTUyBJbnRs
Lk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLS1VUycpIHRocmV3IGV4Y2VwdGlv
biBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tLVVTLgogUEFTUyBJbnRsLk51
bWJlckZvcm1hdC5wcm90b3R5cGUuY29uc3RydWN0b3IgaXMgSW50bC5OdW1iZXJGb3JtYXQKIFBB
U1MgSW50bC5OdW1iZXJGb3JtYXQucHJvdG90eXBlLmZvcm1hdCBpcyBhbiBpbnN0YW5jZSBvZiBG
dW5jdGlvbgogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuTnVtYmVy
Rm9ybWF0LnByb3RvdHlwZSwgJ2Zvcm1hdCcpLmdldCBpcyBhbiBpbnN0YW5jZSBvZiBGdW5jdGlv
bgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2ludGwtY29sbGF0b3Iu
anMgYi9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1jb2xsYXRvci5qcwppbmRleCA1
ZGUxOTBlYzMzMGM5OGRiMTYyZTJlYjYzNGIxZjNhNjVkYjg5NTA4Li40ZmY5MjAzNDU2NTcyNDhi
NTU1ZTdjNTQyN2IwMTU3YTZmOWI2NTdjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9qcy9zY3Jp
cHQtdGVzdHMvaW50bC1jb2xsYXRvci5qcworKysgYi9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVz
dHMvaW50bC1jb2xsYXRvci5qcwpAQCAtMzUsOCArMzUsNDMgQEAgc2hvdWxkQmVGYWxzZSgiT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJbnRsLkNvbGxhdG9yLCAncHJvdG90eXBlJyku
Y29uZmkKIC8vIFRoZSB2YWx1ZSBvZiB0aGUgbGVuZ3RoIHByb3BlcnR5IG9mIHRoZSBzdXBwb3J0
ZWRMb2NhbGVzT2YgbWV0aG9kIGlzIDEuCiBzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0
ZWRMb2NhbGVzT2YubGVuZ3RoIiwgIjEiKTsKIAotLy8gUmV0dXJucyBTdXBwb3J0ZWRMb2NhbGVz
CisvLyBSZXR1cm5zIFN1cHBvcnRlZExvY2FsZXMuCiBzaG91bGRCZVR5cGUoIkludGwuQ29sbGF0
b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCkiLCAiQXJyYXkiKTsKKy8vIERvZXNuJ3QgY2FyZSBhYm91
dCBgdGhpc2AuCitzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YuY2Fs
bChudWxsLCAnZW4nKSIsICJbICdlbicgXSIpOworc2hvdWxkQmUoIkludGwuQ29sbGF0b3Iuc3Vw
cG9ydGVkTG9jYWxlc09mLmNhbGwoe30sICdlbicpIiwgIlsgJ2VuJyBdIik7CitzaG91bGRCZSgi
SW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbCgxLCAnZW4nKSIsICJbICdlbicg
XSIpOworLy8gSWdub3JlcyBub24tb2JqZWN0LCBub24tc3RyaW5nIGxpc3QuCitzaG91bGRCZSgi
SW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoOSkiLCAiW10iKTsKKy8vIE1ha2VzIGFu
IGFycmF5IG9mIHRhZ3MuCitzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVz
T2YoJ2VuJykiLCAiWyAnZW4nIF0iKTsKKy8vIEhhbmRsZXMgYXJyYXktbGlrZSBvYmplY3RzIHdp
dGggaG9sZXMuCitzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoeyBs
ZW5ndGg6IDQsIDE6ICdlbicsIDA6ICdlcycsIDM6ICdkZScgfSkiLCAiWyAnZXMnLCAnZW4nLCAn
ZGUnIF0iKTsKKy8vIERlZHVwbGljYXRlcyB0YWdzLgorc2hvdWxkQmUoIkludGwuQ29sbGF0b3Iu
c3VwcG9ydGVkTG9jYWxlc09mKFsgJ2VuJywgJ3B0JywgJ2VuJywgJ2VzJyBdKSIsICJbICdlbics
ICdwdCcsICdlcycgXSIpOworLy8gQ2Fub25pY2FsaXplcyB0YWdzLgorc2hvdWxkQmUoIkludGwu
Q29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdFbi1sYVRuLXVzLXZhcmlhbnQyLXZhcmlhbnQx
LTFhYmMtVS1rby10UnVlLUEtYWEtYWFhLXgtUkVTRVJWRUQnKSIsICJbICdlbi1MYXRuLVVTLXZh
cmlhbnQyLXZhcmlhbnQxLTFhYmMtYS1hYS1hYWEtdS1rby10cnVlLXgtcmVzZXJ2ZWQnIF0iKTsK
Ky8vIFJlcGxhY2VzIG91dGRhdGVkIHRhZ3MuCitzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBw
b3J0ZWRMb2NhbGVzT2YoJ25vLWJvaycpIiwgIlsgJ25iJyBdIik7CisvLyBEb2Vzbid0IHRocm93
LCBidXQgaWdub3JlcyBwcml2YXRlIHRhZ3MuCitzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBw
b3J0ZWRMb2NhbGVzT2YoJ3gtc29tZS10aGluZycpIiwgIltdIik7CisvLyBUaHJvd3Mgb24gcHJv
YmxlbXMgd2l0aCBsZW5ndGgsIGdldCwgb3IgdG9TdHJpbmcuCitzaG91bGRUaHJvdygiSW50bC5D
b2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoT2JqZWN0LmNyZWF0ZShudWxsLCB7IGxlbmd0aDog
eyBnZXQoKSB7IHRocm93IEVycm9yKCdhJykgfSB9IH0pKSIsICInRXJyb3I6IGEnIik7CitzaG91
bGRUaHJvdygiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoT2JqZWN0LmNyZWF0ZShu
dWxsLCB7IGxlbmd0aDogeyB2YWx1ZTogMSB9LCAwOiB7IGdldCgpIHsgdGhyb3cgRXJyb3IoJ2In
KSB9IH0gfSkpIiwgIidFcnJvcjogYiciKTsKK3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1
cHBvcnRlZExvY2FsZXNPZihbIHsgdG9TdHJpbmcoKSB7IHRocm93IEVycm9yKCdjJykgfSB9IF0p
IiwgIidFcnJvcjogYyciKTsKKy8vIFRocm93cyBvbiBiYWQgdGFncy4KK3Nob3VsZFRocm93KCJJ
bnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZihbIDUgXSkiLCAiJ1R5cGVFcnJvcjogbG9j
YWxlIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb3Igb2JqZWN0JyIpOworc2hvdWxkVGhyb3coIklu
dGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCcnKSIsICInUmFuZ2VFcnJvcjogaW52YWxp
ZCBsYW5ndWFnZSB0YWc6ICciKTsKK3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRl
ZExvY2FsZXNPZignYScpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogYSci
KTsKK3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignYWJjZGVm
Z2hpaicpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogYWJjZGVmZ2hpaici
KTsKK3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignIyQnKSIs
ICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6ICMkJyIpOworc2hvdWxkVGhyb3co
IkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi1ALWFiYycpIiwgIidSYW5nZUVy
cm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tQC1hYmMnIik7CitzaG91bGRUaHJvdygiSW50
bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXUnKSIsICInUmFuZ2VFcnJvcjogaW52
YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXUnIik7CitzaG91bGRUaHJvdygiSW50bC5Db2xsYXRvci5z
dXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXUta24tdHJ1ZS11LWtvLXRydWUnKSIsICInUmFuZ2VFcnJv
cjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXUta24tdHJ1ZS11LWtvLXRydWUnIik7CitzaG91
bGRUaHJvdygiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXgnKSIsICInUmFu
Z2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXgnIik7CitzaG91bGRUaHJvdygiSW50
bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLSonKSIsICInUmFuZ2VFcnJvcjogaW52
YWxpZCBsYW5ndWFnZSB0YWc6IGVuLSonIik7CitzaG91bGRUaHJvdygiSW50bC5Db2xsYXRvci5z
dXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLScpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdl
IHRhZzogZW4tJyIpOworc2hvdWxkVGhyb3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxl
c09mKCdlbi0tVVMnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLS1V
UyciKTsKIAogLy8gMTAuMyBQcm9wZXJ0aWVzIG9mIHRoZSBJbnRsLkNvbGxhdG9yIFByb3RvdHlw
ZSBPYmplY3QKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2ludGwt
ZGF0ZXRpbWVmb3JtYXQuanMgYi9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1kYXRl
dGltZWZvcm1hdC5qcwppbmRleCBiYzdjOWE3N2NlMjExNjJkZDJiODM3ZjU1ZmU0ZjE3MjNjZjc4
NGY4Li5lZGUxYjVjZTM0NmZkMjkwNTMwYjM3Mzc3ZjAwY2FlNTAzN2U2MDdmIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1kYXRldGltZWZvcm1hdC5qcworKysg
Yi9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1kYXRldGltZWZvcm1hdC5qcwpAQCAt
MzcsNiArMzcsNDEgQEAgc2hvdWxkQmUoIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9j
YWxlc09mLmxlbmd0aCIsICIxIik7CiAKIC8vIFJldHVybnMgU3VwcG9ydGVkTG9jYWxlcwogc2hv
dWxkQmVUeXBlKCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZigpIiwgIkFy
cmF5Iik7CisvLyBEb2Vzbid0IGNhcmUgYWJvdXQgYHRoaXNgLgorc2hvdWxkQmUoIkludGwuRGF0
ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwobnVsbCwgJ2VuJykiLCAiWyAnZW4n
IF0iKTsKK3Nob3VsZEJlKCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5j
YWxsKHt9LCAnZW4nKSIsICJbICdlbicgXSIpOworc2hvdWxkQmUoIkludGwuRGF0ZVRpbWVGb3Jt
YXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoMSwgJ2VuJykiLCAiWyAnZW4nIF0iKTsKKy8vIEln
bm9yZXMgbm9uLW9iamVjdCwgbm9uLXN0cmluZyBsaXN0Lgorc2hvdWxkQmUoIkludGwuRGF0ZVRp
bWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKDkpIiwgIltdIik7CisvLyBNYWtlcyBhbiBhcnJh
eSBvZiB0YWdzLgorc2hvdWxkQmUoIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mKCdlbicpIiwgIlsgJ2VuJyBdIik7CisvLyBIYW5kbGVzIGFycmF5LWxpa2Ugb2JqZWN0cyB3
aXRoIGhvbGVzLgorc2hvdWxkQmUoIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mKHsgbGVuZ3RoOiA0LCAxOiAnZW4nLCAwOiAnZXMnLCAzOiAnZGUnIH0pIiwgIlsgJ2VzJywg
J2VuJywgJ2RlJyBdIik7CisvLyBEZWR1cGxpY2F0ZXMgdGFncy4KK3Nob3VsZEJlKCJJbnRsLkRh
dGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihbICdlbicsICdwdCcsICdlbicsICdlcycg
XSkiLCAiWyAnZW4nLCAncHQnLCAnZXMnIF0iKTsKKy8vIENhbm9uaWNhbGl6ZXMgdGFncy4KK3No
b3VsZEJlKCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignRW4tbGFUbi11
cy12YXJpYW50Mi12YXJpYW50MS0xYWJjLVUta28tdFJ1ZS1BLWFhLWFhYS14LVJFU0VSVkVEJyki
LCAiWyAnZW4tTGF0bi1VUy12YXJpYW50Mi12YXJpYW50MS0xYWJjLWEtYWEtYWFhLXUta28tdHJ1
ZS14LXJlc2VydmVkJyBdIik7CisvLyBSZXBsYWNlcyBvdXRkYXRlZCB0YWdzLgorc2hvdWxkQmUo
IkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCduby1ib2snKSIsICJbICdu
YicgXSIpOworLy8gRG9lc24ndCB0aHJvdywgYnV0IGlnbm9yZXMgcHJpdmF0ZSB0YWdzLgorc2hv
dWxkQmUoIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCd4LXNvbWUtdGhp
bmcnKSIsICJbXSIpOworLy8gVGhyb3dzIG9uIHByb2JsZW1zIHdpdGggbGVuZ3RoLCBnZXQsIG9y
IHRvU3RyaW5nLgorc2hvdWxkVGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9j
YWxlc09mKE9iamVjdC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgZ2V0KCkgeyB0aHJvdyBFcnJv
cignYScpIH0gfSB9KSkiLCAiJ0Vycm9yOiBhJyIpOworc2hvdWxkVGhyb3coIkludGwuRGF0ZVRp
bWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKE9iamVjdC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6
IHsgdmFsdWU6IDEgfSwgMDogeyBnZXQoKSB7IHRocm93IEVycm9yKCdiJykgfSB9IH0pKSIsICIn
RXJyb3I6IGInIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRM
b2NhbGVzT2YoWyB7IHRvU3RyaW5nKCkgeyB0aHJvdyBFcnJvcignYycpIH0gfSBdKSIsICInRXJy
b3I6IGMnIik7CisvLyBUaHJvd3Mgb24gYmFkIHRhZ3MuCitzaG91bGRUaHJvdygiSW50bC5EYXRl
VGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoWyA1IF0pIiwgIidUeXBlRXJyb3I6IGxvY2Fs
ZSB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG9iamVjdCciKTsKK3Nob3VsZFRocm93KCJJbnRs
LkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignJykiLCAiJ1JhbmdlRXJyb3I6IGlu
dmFsaWQgbGFuZ3VhZ2UgdGFnOiAnIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRlVGltZUZvcm1h
dC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2EnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFn
ZSB0YWc6IGEnIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRM
b2NhbGVzT2YoJ2FiY2RlZmdoaWonKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0
YWc6IGFiY2RlZmdoaWonIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBw
b3J0ZWRMb2NhbGVzT2YoJyMkJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFn
OiAjJCciKTsKK3Nob3VsZFRocm93KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2Fs
ZXNPZignZW4tQC1hYmMnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVu
LUAtYWJjJyIpOworc2hvdWxkVGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9j
YWxlc09mKCdlbi11JykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi11
JyIpOworc2hvdWxkVGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09m
KCdlbi11LWtuLXRydWUtdS1rby10cnVlJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3Vh
Z2UgdGFnOiBlbi11LWtuLXRydWUtdS1rby10cnVlJyIpOworc2hvdWxkVGhyb3coIkludGwuRGF0
ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi14JykiLCAiJ1JhbmdlRXJyb3I6IGlu
dmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi14JyIpOworc2hvdWxkVGhyb3coIkludGwuRGF0ZVRpbWVG
b3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi0qJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQg
bGFuZ3VhZ2UgdGFnOiBlbi0qJyIpOworc2hvdWxkVGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQu
c3VwcG9ydGVkTG9jYWxlc09mKCdlbi0nKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFn
ZSB0YWc6IGVuLSciKTsKK3Nob3VsZFRocm93KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRl
ZExvY2FsZXNPZignZW4tLVVTJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFn
OiBlbi0tVVMnIik7CiAKIC8vIDEyLjMgUHJvcGVydGllcyBvZiB0aGUgSW50bC5EYXRlVGltZUZv
cm1hdCBQcm90b3R5cGUgT2JqZWN0CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3Njcmlw
dC10ZXN0cy9pbnRsLW51bWJlcmZvcm1hdC5qcyBiL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0
cy9pbnRsLW51bWJlcmZvcm1hdC5qcwppbmRleCAwNjVkOTIxNTY1NDM0MmRhN2U0ZjIzM2U2M2Nk
NTdhZGZlNTlkNGViLi4wN2RmOGM4ODUzOGFmNjk3YTZiYTk5M2NkMGM0NDc0YTY2ZTQ4MmQwIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1udW1iZXJmb3JtYXQu
anMKKysrIGIvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2ludGwtbnVtYmVyZm9ybWF0Lmpz
CkBAIC0zNyw2ICszNyw0MSBAQCBzaG91bGRCZSgiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVk
TG9jYWxlc09mLmxlbmd0aCIsICIxIik7CiAKIC8vIFJldHVybnMgU3VwcG9ydGVkTG9jYWxlcwog
c2hvdWxkQmVUeXBlKCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoKSIsICJB
cnJheSIpOworLy8gRG9lc24ndCBjYXJlIGFib3V0IGB0aGlzYC4KK3Nob3VsZEJlKCJJbnRsLk51
bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbChudWxsLCAnZW4nKSIsICJbICdlbicg
XSIpOworc2hvdWxkQmUoIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5jYWxs
KHt9LCAnZW4nKSIsICJbICdlbicgXSIpOworc2hvdWxkQmUoIkludGwuTnVtYmVyRm9ybWF0LnN1
cHBvcnRlZExvY2FsZXNPZi5jYWxsKDEsICdlbicpIiwgIlsgJ2VuJyBdIik7CisvLyBJZ25vcmVz
IG5vbi1vYmplY3QsIG5vbi1zdHJpbmcgbGlzdC4KK3Nob3VsZEJlKCJJbnRsLk51bWJlckZvcm1h
dC5zdXBwb3J0ZWRMb2NhbGVzT2YoOSkiLCAiW10iKTsKKy8vIE1ha2VzIGFuIGFycmF5IG9mIHRh
Z3MuCitzaG91bGRCZSgiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbicp
IiwgIlsgJ2VuJyBdIik7CisvLyBIYW5kbGVzIGFycmF5LWxpa2Ugb2JqZWN0cyB3aXRoIGhvbGVz
Lgorc2hvdWxkQmUoIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZih7IGxlbmd0
aDogNCwgMTogJ2VuJywgMDogJ2VzJywgMzogJ2RlJyB9KSIsICJbICdlcycsICdlbicsICdkZScg
XSIpOworLy8gRGVkdXBsaWNhdGVzIHRhZ3MuCitzaG91bGRCZSgiSW50bC5OdW1iZXJGb3JtYXQu
c3VwcG9ydGVkTG9jYWxlc09mKFsgJ2VuJywgJ3B0JywgJ2VuJywgJ2VzJyBdKSIsICJbICdlbics
ICdwdCcsICdlcycgXSIpOworLy8gQ2Fub25pY2FsaXplcyB0YWdzLgorc2hvdWxkQmUoIkludGwu
TnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignRW4tbGFUbi11cy12YXJpYW50Mi12YXJp
YW50MS0xYWJjLVUta28tdFJ1ZS1BLWFhLWFhYS14LVJFU0VSVkVEJykiLCAiWyAnZW4tTGF0bi1V
Uy12YXJpYW50Mi12YXJpYW50MS0xYWJjLWEtYWEtYWFhLXUta28tdHJ1ZS14LXJlc2VydmVkJyBd
Iik7CisvLyBSZXBsYWNlcyBvdXRkYXRlZCB0YWdzLgorc2hvdWxkQmUoIkludGwuTnVtYmVyRm9y
bWF0LnN1cHBvcnRlZExvY2FsZXNPZignbm8tYm9rJykiLCAiWyAnbmInIF0iKTsKKy8vIERvZXNu
J3QgdGhyb3csIGJ1dCBpZ25vcmVzIHByaXZhdGUgdGFncy4KK3Nob3VsZEJlKCJJbnRsLk51bWJl
ckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ3gtc29tZS10aGluZycpIiwgIltdIik7CisvLyBU
aHJvd3Mgb24gcHJvYmxlbXMgd2l0aCBsZW5ndGgsIGdldCwgb3IgdG9TdHJpbmcuCitzaG91bGRU
aHJvdygiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKE9iamVjdC5jcmVhdGUo
bnVsbCwgeyBsZW5ndGg6IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcignYScpIH0gfSB9KSkiLCAiJ0Vy
cm9yOiBhJyIpOworc2hvdWxkVGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2Fs
ZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVuZ3RoOiB7IHZhbHVlOiAxIH0sIDA6IHsgZ2V0
KCkgeyB0aHJvdyBFcnJvcignYicpIH0gfSB9KSkiLCAiJ0Vycm9yOiBiJyIpOworc2hvdWxkVGhy
b3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihbIHsgdG9TdHJpbmcoKSB7
IHRocm93IEVycm9yKCdjJykgfSB9IF0pIiwgIidFcnJvcjogYyciKTsKKy8vIFRocm93cyBvbiBi
YWQgdGFncy4KK3Nob3VsZFRocm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YoWyA1IF0pIiwgIidUeXBlRXJyb3I6IGxvY2FsZSB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9y
IG9iamVjdCciKTsKK3Nob3VsZFRocm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2Nh
bGVzT2YoJycpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogJyIpOworc2hv
dWxkVGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignYScpIiwgIidS
YW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogYSciKTsKK3Nob3VsZFRocm93KCJJbnRs
Lk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2FiY2RlZmdoaWonKSIsICInUmFuZ2VF
cnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGFiY2RlZmdoaWonIik7CitzaG91bGRUaHJvdygi
SW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCcjJCcpIiwgIidSYW5nZUVycm9y
OiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogIyQnIik7CitzaG91bGRUaHJvdygiSW50bC5OdW1iZXJG
b3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi1ALWFiYycpIiwgIidSYW5nZUVycm9yOiBpbnZh
bGlkIGxhbmd1YWdlIHRhZzogZW4tQC1hYmMnIik7CitzaG91bGRUaHJvdygiSW50bC5OdW1iZXJG
b3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi11JykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQg
bGFuZ3VhZ2UgdGFnOiBlbi11JyIpOworc2hvdWxkVGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1
cHBvcnRlZExvY2FsZXNPZignZW4tdS1rbi10cnVlLXUta28tdHJ1ZScpIiwgIidSYW5nZUVycm9y
OiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tdS1rbi10cnVlLXUta28tdHJ1ZSciKTsKK3Nob3Vs
ZFRocm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXgnKSIsICIn
UmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXgnIik7CitzaG91bGRUaHJvdygi
SW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi0qJykiLCAiJ1JhbmdlRXJy
b3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi0qJyIpOworc2hvdWxkVGhyb3coIkludGwuTnVt
YmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tJykiLCAiJ1JhbmdlRXJyb3I6IGludmFs
aWQgbGFuZ3VhZ2UgdGFnOiBlbi0nIik7CitzaG91bGRUaHJvdygiSW50bC5OdW1iZXJGb3JtYXQu
c3VwcG9ydGVkTG9jYWxlc09mKCdlbi0tVVMnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5n
dWFnZSB0YWc6IGVuLS1VUyciKTsKIAogLy8gMTEuMyBQcm9wZXJ0aWVzIG9mIHRoZSBJbnRsLk51
bWJlckZvcm1hdCBQcm90b3R5cGUgT2JqZWN0CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261192</attachid>
            <date>2015-09-15 07:59:21 -0700</date>
            <delta_ts>2015-09-15 10:43:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147599-20150915085908.patch</filename>
            <type>text/plain</type>
            <size>182142</size>
            <attacher name="Andy VanWagoner">andy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5ODA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZDQ5YTdmNWM2NDYzZmEwZDUyMTZkYjQ1ZWY3NzI1NmQ3MGM1MDIwLi45YmNlNjU2NDk2YzFlY2Rm
ZWU1Njc5M2ZkMDk4M2Y4ZWQwYjljOTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0OCBAQAorMjAxNS0wOS0xNSAgQW5keSBWYW5XYWdvbmVyICA8dGhldGFsZWNyYWZ0ZXJA
Z21haWwuY29tPgorCisgICAgICAgIFtJTlRMXSBJbXBsZW1lbnQgc3VwcG9ydGVkTG9jYWxlc09m
IG9uIEludGwgQ29uc3RydWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDc1OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbXBsZW1lbnRzIGFsbCBvZiB0aGUgYWJzdHJhY3Qgb3BlcmF0aW9ucyB1
c2VkIGJ5IHN1cHBvcnRlZExvY2FsZXNPZiwKKyAgICAgICAgZXhjZXB0IGR1cmluZyBjYW5vbmlj
YWxpemF0aW9uIGl0IGRvZXMgbm90IHJlcGxhY2UgcmVkdW5kYW50IHRhZ3MsCisgICAgICAgIG9y
IHN1YnRhZ3Mgd2l0aCB0aGVpciBwcmVmZXJyZWQgdmFsdWVzLgorCisgICAgICAgICogaWN1L3Vu
aWNvZGUvdWNhbC5oOiBBZGRlZC4KKyAgICAgICAgKiBpY3UvdW5pY29kZS91ZGF0Lmg6IEFkZGVk
LgorICAgICAgICAqIGljdS91bmljb2RlL3VtaXNjLmg6IEFkZGVkLgorICAgICAgICAqIGljdS91
bmljb2RlL3VudW0uaDogQWRkZWQuCisgICAgICAgICogaWN1L3VuaWNvZGUvdXR5cGVzLmg6IENs
ZWFyIHRoZSBVX1NIT1dfQ1BMVVNQTFVTX0FQSSBmbGFnIHRvIHByZXZlbnQgQysrIGhlYWRlcnMg
ZnJvbSBiZWluZyBpbmNsdWRlZC4KKyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJz
Lmg6IEFkZGUgbG9jYWxlTWF0Y2hlci4KKyAgICAgICAgKiBydW50aW1lL0ludGxDb2xsYXRvckNv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yQ29uc3RydWN0b3JGdW5j
U3VwcG9ydGVkTG9jYWxlc09mKTogSW1wbGVtZW50ZWQuCisgICAgICAgICogcnVudGltZS9JbnRs
RGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkludGxEYXRlVGlt
ZUZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZik6IEltcGxlbWVudGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNP
Zik6IEltcGxlbWVudGVkLgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OmNhbm9uaWNhbGl6ZUxhbmd1YWdlVGFnKToKKyAgICAgICAgKEpTQzo6Z2V0Q2Fu
b25pY2FsTGFuZ1RhZyk6CisgICAgICAgIChKU0M6OmdldFByaXZhdGVVc2VMYW5nVGFnKToKKyAg
ICAgICAgKEpTQzo6Z2V0R3JhbmRmYXRoZXJlZExhbmdUYWcpOgorICAgICAgICAoSlNDOjpjYW5v
bmljYWxpemVMb2NhbGVMaXN0KToKKyAgICAgICAgKEpTQzo6YmVzdEF2YWlsYWJsZUxvY2FsZSk6
CisgICAgICAgIChKU0M6Omxvb2t1cFN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAoSlNDOjpi
ZXN0Rml0U3VwcG9ydGVkTG9jYWxlcyk6CisgICAgICAgIChKU0M6OnN1cHBvcnRlZExvY2FsZXMp
OgorICAgICAgICAoSlNDOjpnZXRJbnRsU3RyaW5nT3B0aW9uKToKKyAgICAgICAgKEpTQzo6Z2V0
SW50bEJvb2xlYW5PcHRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5oOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5oOiBBZGRlZCB0b0xlbmd0aC4KKyAgICAgICAgKiBy
dW50aW1lL0pTQ0pTVmFsdWUuY3BwOiBBZGRlZCB0b0xlbmd0aC4KKyAgICAgICAgKEpTQzo6SlNW
YWx1ZTo6dG9MZW5ndGgpOiBJbXBsZW1lbnQgVG9MZW5ndGggZnJvbSBFQ01BIDI2MiA2LjAgNy4x
LjE1CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjppbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKTogQWRkZWQgbGF6
eSBsb2NhbGUgbGlzdC4KKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmludGxEYXRlVGlt
ZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXMpOiBBZGRlZCBsYXp5IGxvY2FsZSBsaXN0LgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW50bE51bWJlckZvcm1hdEF2YWlsYWJsZUxvY2FsZXMp
OiBBZGRlZCBsYXp5IGxvY2FsZSBsaXN0LgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaDoKKwogMjAxNS0wOS0xNCAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAog
ICAgICAgICByZW5hbWUgY2FsbEZyYW1lRm9yVGhyb3cgdG8gY2FsbEZyYW1lRm9yQ2F0Y2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29kZS91Y2FsLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdWNhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5N2FmMTUz
ZDQzOWI0YzEzMmQ0Y2YwYzFlNTE4MjI2OThiMzdiMTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdWNhbC5oCkBAIC0wLDAgKzEsMTI4NSBAQAor
LyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMCwg
SW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQKKyAqIG90aGVy
cy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKwor
I2lmbmRlZiBVQ0FMX0gKKyNkZWZpbmUgVUNBTF9ICisKKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBl
cy5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWVudW0uaCIKKyNpbmNsdWRlICJ1bmljb2RlL3Vsb2Mu
aCIKKyNpbmNsdWRlICJ1bmljb2RlL2xvY2FscG9pbnRlci5oIgorCisjaWYgIVVDT05GSUdfTk9f
Rk9STUFUVElORworCisvKioKKyAqIFxmaWxlCisgKiBcYnJpZWYgQyBBUEk6IENhbGVuZGFyCisg
KgorICogPGgyPkNhbGVuZGFyIEMgQVBJPC9oMj4KKyAqCisgKiBVQ2FsZW5kYXIgQyBBUEkgaXMg
dXNlZCAgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBhIDxjb2RlPlVEYXRlPC9jb2RlPiBvYmplY3QK
KyAqIGFuZCBhIHNldCBvZiBpbnRlZ2VyIGZpZWxkcyBzdWNoIGFzIDxjb2RlPlVDQUxfWUVBUjwv
Y29kZT4sIDxjb2RlPlVDQUxfTU9OVEg8L2NvZGU+LAorICogPGNvZGU+VUNBTF9EQVk8L2NvZGU+
LCA8Y29kZT5VQ0FMX0hPVVI8L2NvZGU+LCBhbmQgc28gb24uCisgKiAoQSA8Y29kZT5VRGF0ZTwv
Y29kZT4gb2JqZWN0IHJlcHJlc2VudHMgYSBzcGVjaWZpYyBpbnN0YW50IGluCisgKiB0aW1lIHdp
dGggbWlsbGlzZWNvbmQgcHJlY2lzaW9uLiBTZWUgVURhdGUKKyAqIGZvciBpbmZvcm1hdGlvbiBh
Ym91dCB0aGUgPGNvZGU+VURhdGU8L2NvZGU+IC4pCisgKgorICogPHA+CisgKiBUeXBlcyBvZiA8
Y29kZT5VQ2FsZW5kYXI8L2NvZGU+IGludGVycHJldCBhIDxjb2RlPlVEYXRlPC9jb2RlPgorICog
YWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiBhIHNwZWNpZmljIGNhbGVuZGFyIHN5c3RlbS4gVGhl
IFVfU1RBQkxFCisgKiBwcm92aWRlcyB0aGUgZW51bSBVQ2FsZW5kYXJUeXBlIHdpdGggVUNBTF9U
UkFESVRJT05BTCBhbmQKKyAqIFVDQUxfR1JFR09SSUFOLgorICogPHA+CisgKiBMaWtlIG90aGVy
IGxvY2FsZS1zZW5zaXRpdmUgQyBBUEksIGNhbGVuZGFyIEFQSSAgcHJvdmlkZXMgYQorICogZnVu
Y3Rpb24sIDxjb2RlPnVjYWxfb3BlbigpPC9jb2RlPiwgd2hpY2ggcmV0dXJucyBhIHBvaW50ZXIg
dG8KKyAqIDxjb2RlPlVDYWxlbmRhcjwvY29kZT4gd2hvc2UgdGltZSBmaWVsZHMgaGF2ZSBiZWVu
IGluaXRpYWxpemVkCisgKiB3aXRoIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUuIFdlIG5lZWQg
dG8gc3BlY2lmeSB0aGUgdHlwZSBvZgorICogY2FsZW5kYXIgdG8gYmUgb3BlbmVkIGFuZCB0aGUg
IHRpbWV6b25lSWQuCisgKiBcaHRtbG9ubHk8YmxvY2txdW90ZT5cZW5kaHRtbG9ubHkKKyAqIDxw
cmU+CisgKiBcY29kZQorICogVUNhbGVuZGFyICpjYWxkZWY7CisgKiBVQ2hhciAqdHpJZDsKKyAq
IFVFcnJvckNvZGUgc3RhdHVzOworICogdHpJZD0oVUNoYXIqKW1hbGxvYyhzaXplb2YoVUNoYXIp
ICogKHN0cmxlbigiUFNUIikgKzEpICk7CisgKiB1X3Vhc3RyY3B5KHR6SWQsICJQU1QiKTsKKyAq
IGNhbGRlZj11Y2FsX29wZW4odHpJRCwgdV9zdHJsZW4odHpJRCksIE5VTEwsIFVDQUxfVFJBRElU
SU9OQUwsICZzdGF0dXMpOworICogXGVuZGNvZGUKKyAqIDwvcHJlPgorICogXGh0bWxvbmx5PC9i
bG9ja3F1b3RlPlxlbmRodG1sb25seQorICoKKyAqIDxwPgorICogQSA8Y29kZT5VQ2FsZW5kYXI8
L2NvZGU+IG9iamVjdCBjYW4gcHJvZHVjZSBhbGwgdGhlIHRpbWUgZmllbGQgdmFsdWVzCisgKiBu
ZWVkZWQgdG8gaW1wbGVtZW50IHRoZSBkYXRlLXRpbWUgZm9ybWF0dGluZyBmb3IgYSBwYXJ0aWN1
bGFyIGxhbmd1YWdlCisgKiBhbmQgY2FsZW5kYXIgc3R5bGUgKGZvciBleGFtcGxlLCBKYXBhbmVz
ZS1HcmVnb3JpYW4sIEphcGFuZXNlLVRyYWRpdGlvbmFsKS4KKyAqCisgKiA8cD4KKyAqIFdoZW4g
Y29tcHV0aW5nIGEgPGNvZGU+VURhdGU8L2NvZGU+IGZyb20gdGltZSBmaWVsZHMsIHR3byBzcGVj
aWFsIGNpcmN1bXN0YW5jZXMKKyAqIG1heSBhcmlzZTogdGhlcmUgbWF5IGJlIGluc3VmZmljaWVu
dCBpbmZvcm1hdGlvbiB0byBjb21wdXRlIHRoZQorICogPGNvZGU+VURhdGU8L2NvZGU+IChzdWNo
IGFzIG9ubHkgeWVhciBhbmQgbW9udGggYnV0IG5vIGRheSBpbiB0aGUgbW9udGgpLAorICogb3Ig
dGhlcmUgbWF5IGJlIGluY29uc2lzdGVudCBpbmZvcm1hdGlvbiAoc3VjaCBhcyAiVHVlc2RheSwg
SnVseSAxNSwgMTk5NiIKKyAqIC0tIEp1bHkgMTUsIDE5OTYgaXMgYWN0dWFsbHkgYSBNb25kYXkp
LgorICoKKyAqIDxwPgorICogPHN0cm9uZz5JbnN1ZmZpY2llbnQgaW5mb3JtYXRpb24uPC9zdHJv
bmc+IFRoZSBjYWxlbmRhciB3aWxsIHVzZSBkZWZhdWx0CisgKiBpbmZvcm1hdGlvbiB0byBzcGVj
aWZ5IHRoZSBtaXNzaW5nIGZpZWxkcy4gVGhpcyBtYXkgdmFyeSBieSBjYWxlbmRhcjsgZm9yCisg
KiB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyLCB0aGUgZGVmYXVsdCBmb3IgYSBmaWVsZCBpcyB0aGUg
c2FtZSBhcyB0aGF0IG9mIHRoZQorICogc3RhcnQgb2YgdGhlIGVwb2NoOiBpLmUuLCBVQ0FMX1lF
QVIgPSAxOTcwLCBVQ0FMX01PTlRIID0gSkFOVUFSWSwgVUNBTF9EQVRFID0gMSwgZXRjLgorICoK
KyAqIDxwPgorICogPHN0cm9uZz5JbmNvbnNpc3RlbnQgaW5mb3JtYXRpb24uPC9zdHJvbmc+IElm
IGZpZWxkcyBjb25mbGljdCwgdGhlIGNhbGVuZGFyCisgKiB3aWxsIGdpdmUgcHJlZmVyZW5jZSB0
byBmaWVsZHMgc2V0IG1vcmUgcmVjZW50bHkuIEZvciBleGFtcGxlLCB3aGVuCisgKiBkZXRlcm1p
bmluZyB0aGUgZGF5LCB0aGUgY2FsZW5kYXIgd2lsbCBsb29rIGZvciBvbmUgb2YgdGhlIGZvbGxv
d2luZworICogY29tYmluYXRpb25zIG9mIGZpZWxkcy4gIFRoZSBtb3N0IHJlY2VudCBjb21iaW5h
dGlvbiwgYXMgZGV0ZXJtaW5lZCBieSB0aGUKKyAqIG1vc3QgcmVjZW50bHkgc2V0IHNpbmdsZSBm
aWVsZCwgd2lsbCBiZSB1c2VkLgorICoKKyAqIFxodG1sb25seTxibG9ja3F1b3RlPlxlbmRodG1s
b25seQorICogPHByZT4KKyAqIFxjb2RlCisgKiBVQ0FMX01PTlRIICsgVUNBTF9EQVlfT0ZfTU9O
VEgKKyAqIFVDQUxfTU9OVEggKyBVQ0FMX1dFRUtfT0ZfTU9OVEggKyBVQ0FMX0RBWV9PRl9XRUVL
CisgKiBVQ0FMX01PTlRIICsgVUNBTF9EQVlfT0ZfV0VFS19JTl9NT05USCArIFVDQUxfREFZX09G
X1dFRUsKKyAqIFVDQUxfREFZX09GX1lFQVIKKyAqIFVDQUxfREFZX09GX1dFRUsgKyBVQ0FMX1dF
RUtfT0ZfWUVBUgorICogXGVuZGNvZGUKKyAqIDwvcHJlPgorICogXGh0bWxvbmx5PC9ibG9ja3F1
b3RlPlxlbmRodG1sb25seQorICoKKyAqIEZvciB0aGUgdGltZSBvZiBkYXk6CisgKgorICogXGh0
bWxvbmx5PGJsb2NrcXVvdGU+XGVuZGh0bWxvbmx5CisgKiA8cHJlPgorICogXGNvZGUKKyAqIFVD
QUxfSE9VUl9PRl9EQVkKKyAqIFVDQUxfQU1fUE0gKyBVQ0FMX0hPVVIKKyAqIFxlbmRjb2RlCisg
KiA8L3ByZT4KKyAqIFxodG1sb25seTwvYmxvY2txdW90ZT5cZW5kaHRtbG9ubHkKKyAqCisgKiA8
cD4KKyAqIDxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gZm9yIHNvbWUgbm9uLUdyZWdvcmlhbiBjYWxl
bmRhcnMsIGRpZmZlcmVudAorICogZmllbGRzIG1heSBiZSBuZWNlc3NhcnkgZm9yIGNvbXBsZXRl
IGRpc2FtYmlndWF0aW9uLiBGb3IgZXhhbXBsZSwgYSBmdWxsCisgKiBzcGVjaWZpY2F0aW9uIG9m
IHRoZSBoaXN0b3JpYWwgQXJhYmljIGFzdHJvbm9taWNhbCBjYWxlbmRhciByZXF1aXJlcyB5ZWFy
LAorICogbW9udGgsIGRheS1vZi1tb250aCA8ZW0+YW5kPC9lbT4gZGF5LW9mLXdlZWsgaW4gc29t
ZSBjYXNlcy4KKyAqCisgKiA8cD4KKyAqIDxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhlcmUgYXJl
IGNlcnRhaW4gcG9zc2libGUgYW1iaWd1aXRpZXMgaW4KKyAqIGludGVycHJldGF0aW9uIG9mIGNl
cnRhaW4gc2luZ3VsYXIgdGltZXMsIHdoaWNoIGFyZSByZXNvbHZlZCBpbiB0aGUKKyAqIGZvbGxv
d2luZyB3YXlzOgorICogPG9sPgorICogICAgIDxsaT4gMjQ6MDA6MDAgImJlbG9uZ3MiIHRvIHRo
ZSBmb2xsb3dpbmcgZGF5LiBUaGF0IGlzLAorICogICAgICAgICAgMjM6NTkgb24gRGVjIDMxLCAx
OTY5ICZsdDsgMjQ6MDAgb24gSmFuIDEsIDE5NzAgJmx0OyAyNDowMTowMCBvbiBKYW4gMSwgMTk3
MAorICoKKyAqICAgICA8bGk+IEFsdGhvdWdoIGhpc3RvcmljYWxseSBub3QgcHJlY2lzZSwgbWlk
bmlnaHQgYWxzbyBiZWxvbmdzIHRvICJhbSIsCisgKiAgICAgICAgICBhbmQgbm9vbiBiZWxvbmdz
IHRvICJwbSIsIHNvIG9uIHRoZSBzYW1lIGRheSwKKyAqICAgICAgICAgIDEyOjAwIGFtIChtaWRu
aWdodCkgJmx0OyAxMjowMSBhbSwgYW5kIDEyOjAwIHBtIChub29uKSAmbHQ7IDEyOjAxIHBtCisg
KiA8L29sPgorICoKKyAqIDxwPgorICogVGhlIGRhdGUgb3IgdGltZSBmb3JtYXQgc3RyaW5ncyBh
cmUgbm90IHBhcnQgb2YgdGhlIGRlZmluaXRpb24gb2YgYQorICogY2FsZW5kYXIsIGFzIHRob3Nl
IG11c3QgYmUgbW9kaWZpYWJsZSBvciBvdmVycmlkYWJsZSBieSB0aGUgdXNlciBhdAorICogcnVu
dGltZS4gVXNlIHtAbGluayBEYXRlRm9ybWF0fQorICogdG8gZm9ybWF0IGRhdGVzLgorICoKKyAq
IDxwPgorICogPGNvZGU+Q2FsZW5kYXI8L2NvZGU+IHByb3ZpZGVzIGFuIEFQSSBmb3IgZmllbGQg
InJvbGxpbmciLCB3aGVyZSBmaWVsZHMKKyAqIGNhbiBiZSBpbmNyZW1lbnRlZCBvciBkZWNyZW1l
bnRlZCwgYnV0IHdyYXAgYXJvdW5kLiBGb3IgZXhhbXBsZSwgcm9sbGluZyB0aGUKKyAqIG1vbnRo
IHVwIGluIHRoZSBkYXRlIDxjb2RlPkRlY2VtYmVyIDEyLCA8Yj4xOTk2PC9iPjwvY29kZT4gcmVz
dWx0cyBpbgorICogPGNvZGU+SmFudWFyeSAxMiwgPGI+MTk5NjwvYj48L2NvZGU+LgorICoKKyAq
IDxwPgorICogPGNvZGU+Q2FsZW5kYXI8L2NvZGU+IGFsc28gcHJvdmlkZXMgYSBkYXRlIGFyaXRo
bWV0aWMgZnVuY3Rpb24gZm9yCisgKiBhZGRpbmcgdGhlIHNwZWNpZmllZCAoc2lnbmVkKSBhbW91
bnQgb2YgdGltZSB0byBhIHBhcnRpY3VsYXIgdGltZSBmaWVsZC4KKyAqIEZvciBleGFtcGxlLCBz
dWJ0cmFjdGluZyA1IGRheXMgZnJvbSB0aGUgZGF0ZSA8Y29kZT5TZXB0ZW1iZXIgMTIsIDE5OTY8
L2NvZGU+CisgKiByZXN1bHRzIGluIDxjb2RlPlNlcHRlbWJlciA3LCAxOTk2PC9jb2RlPi4KKyAq
CisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworCisvKiogQSBjYWxlbmRhci4KKyAqICBGb3IgdXNh
Z2UgaW4gQyBwcm9ncmFtcy4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCit0eXBlZGVmIHZvaWQq
IFVDYWxlbmRhcjsKKworLyoqIFBvc3NpYmxlIHR5cGVzIG9mIFVDYWxlbmRhcnMgCisgKiBAc3Rh
YmxlIElDVSAyLjAKKyAqLworZW51bSBVQ2FsZW5kYXJUeXBlIHsKKyAgLyoqCisgICAqIERlc3Bp
dGUgdGhlIG5hbWUsIFVDQUxfVFJBRElUSU9OQUwgZGVzaWduYXRlcyB0aGUgbG9jYWxlJ3MgZGVm
YXVsdCBjYWxlbmRhciwKKyAgICogd2hpY2ggbWF5IGJlIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIg
b3Igc29tZSBvdGhlciBjYWxlbmRhci4KKyAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAqLworICBV
Q0FMX1RSQURJVElPTkFMLAorICAvKioKKyAgICogQSBiZXR0ZXIgbmFtZSBmb3IgVUNBTF9UUkFE
SVRJT05BTC4KKyAgICogQHN0YWJsZSBJQ1UgNC4yCisgICAqLworICBVQ0FMX0RFRkFVTFQgPSBV
Q0FMX1RSQURJVElPTkFMLAorICAvKioKKyAgICogVW5hbWJpZ3VvdXNseSBkZXNpZ25hdGVzIHRo
ZSBHcmVnb3JpYW4gY2FsZW5kYXIgZm9yIHRoZSBsb2NhbGUuCisgICAqIEBzdGFibGUgSUNVIDIu
MAorICAgKi8KKyAgVUNBTF9HUkVHT1JJQU4KK307CisKKy8qKiBAc3RhYmxlIElDVSAyLjAgKi8K
K3R5cGVkZWYgZW51bSBVQ2FsZW5kYXJUeXBlIFVDYWxlbmRhclR5cGU7CisKKy8qKiBQb3NzaWJs
ZSBmaWVsZHMgaW4gYSBVQ2FsZW5kYXIgCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworZW51bSBV
Q2FsZW5kYXJEYXRlRmllbGRzIHsKKyAgLyoqIAorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGlu
ZyB0aGUgZXJhLCBlLmcuLCBBRCBvciBCQyBpbiB0aGUgR3JlZ29yaWFuIChKdWxpYW4pIGNhbGVu
ZGFyLiAKKyAgICogVGhpcyBpcyBhIGNhbGVuZGFyLXNwZWNpZmljIHZhbHVlLgorICAgKiBAc3Rh
YmxlIElDVSAyLjYgCisgICAqLworICBVQ0FMX0VSQSwKKworICAvKioKKyAgICogRmllbGQgbnVt
YmVyIGluZGljYXRpbmcgdGhlIHllYXIuIFRoaXMgaXMgYSBjYWxlbmRhci1zcGVjaWZpYyB2YWx1
ZS4KKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9ZRUFSLAorCisgIC8qKgor
ICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUgbW9udGguIFRoaXMgaXMgYSBjYWxlbmRh
ci1zcGVjaWZpYyB2YWx1ZS4gCisgICAqIFRoZSBmaXJzdCBtb250aCBvZiB0aGUgeWVhciBpcwor
ICAgKiA8Y29kZT5KQU5VQVJZPC9jb2RlPjsgdGhlIGxhc3QgZGVwZW5kcyBvbiB0aGUgbnVtYmVy
IG9mIG1vbnRocyBpbiBhIHllYXIuCisgICAqIEBzZWUgI1VDQUxfSkFOVUFSWQorICAgKiBAc2Vl
ICNVQ0FMX0ZFQlJVQVJZCisgICAqIEBzZWUgI1VDQUxfTUFSQ0gKKyAgICogQHNlZSAjVUNBTF9B
UFJJTAorICAgKiBAc2VlICNVQ0FMX01BWQorICAgKiBAc2VlICNVQ0FMX0pVTkUKKyAgICogQHNl
ZSAjVUNBTF9KVUxZCisgICAqIEBzZWUgI1VDQUxfQVVHVVNUCisgICAqIEBzZWUgI1VDQUxfU0VQ
VEVNQkVSCisgICAqIEBzZWUgI1VDQUxfT0NUT0JFUgorICAgKiBAc2VlICNVQ0FMX05PVkVNQkVS
CisgICAqIEBzZWUgI1VDQUxfREVDRU1CRVIKKyAgICogQHNlZSAjVUNBTF9VTkRFQ0lNQkVSCisg
ICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfTU9OVEgsCisKKyAgLyoqCisgICAq
IEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZQorICAgKiB3ZWVrIG51bWJlciB3aXRoaW4gdGhl
IGN1cnJlbnQgeWVhci4gIFRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLCBhcworICAgKiBkZWZp
bmVkIGJ5IDxjb2RlPlVDQUxfRklSU1RfREFZX09GX1dFRUs8L2NvZGU+IGFuZCA8Y29kZT5VQ0FM
X01JTklNQUxfREFZU19JTl9GSVJTVF9XRUVLPC9jb2RlPgorICAgKiBhdHRyaWJ1dGVzLCBoYXMg
dmFsdWUgMS4gIFN1YmNsYXNzZXMgZGVmaW5lCisgICAqIHRoZSB2YWx1ZSBvZiA8Y29kZT5VQ0FM
X1dFRUtfT0ZfWUVBUjwvY29kZT4gZm9yIGRheXMgYmVmb3JlIHRoZSBmaXJzdCB3ZWVrIG9mCisg
ICAqIHRoZSB5ZWFyLgorICAgKiBAc2VlIHVjYWxfZ2V0QXR0cmlidXRlCisgICAqIEBzZWUgdWNh
bF9zZXRBdHRyaWJ1dGUKKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9XRUVL
X09GX1lFQVIsCisKKyAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAq
IHdlZWsgbnVtYmVyIHdpdGhpbiB0aGUgY3VycmVudCBtb250aC4gIFRoZSBmaXJzdCB3ZWVrIG9m
IHRoZSBtb250aCwgYXMKKyAgICogZGVmaW5lZCBieSA8Y29kZT5VQ0FMX0ZJUlNUX0RBWV9PRl9X
RUVLPC9jb2RlPiBhbmQgPGNvZGU+VUNBTF9NSU5JTUFMX0RBWVNfSU5fRklSU1RfV0VFSzwvY29k
ZT4KKyAgICogYXR0cmlidXRlcywgaGFzIHZhbHVlIDEuICBTdWJjbGFzc2VzIGRlZmluZQorICAg
KiB0aGUgdmFsdWUgb2YgPGNvZGU+V0VFS19PRl9NT05USDwvY29kZT4gZm9yIGRheXMgYmVmb3Jl
IHRoZSBmaXJzdCB3ZWVrIG9mCisgICAqIHRoZSBtb250aC4KKyAgICogQHNlZSB1Y2FsX2dldEF0
dHJpYnV0ZQorICAgKiBAc2VlIHVjYWxfc2V0QXR0cmlidXRlCisgICAqIEBzZWUgI1VDQUxfRklS
U1RfREFZX09GX1dFRUsKKyAgICogQHNlZSAjVUNBTF9NSU5JTUFMX0RBWVNfSU5fRklSU1RfV0VF
SworICAgKiBAc3RhYmxlIElDVSAyLjYgCisgICAqLworICBVQ0FMX1dFRUtfT0ZfTU9OVEgsCisK
KyAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcgdGhlCisgICAqIGRheSBvZiB0aGUg
bW9udGguIFRoaXMgaXMgYSBzeW5vbnltIGZvciA8Y29kZT5EQVlfT0ZfTU9OVEg8L2NvZGU+Lgor
ICAgKiBUaGUgZmlyc3QgZGF5IG9mIHRoZSBtb250aCBoYXMgdmFsdWUgMS4KKyAgICogQHNlZSAj
VUNBTF9EQVlfT0ZfTU9OVEgKKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9E
QVRFLAorCisgLyoqCisgICAqIEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZSBkYXkKKyAgICog
bnVtYmVyIHdpdGhpbiB0aGUgY3VycmVudCB5ZWFyLiAgVGhlIGZpcnN0IGRheSBvZiB0aGUgeWVh
ciBoYXMgdmFsdWUgMS4KKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNBTF9EQVlf
T0ZfWUVBUiwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUgZGF5Cisg
ICAqIG9mIHRoZSB3ZWVrLiAgVGhpcyBmaWVsZCB0YWtlcyB2YWx1ZXMgPGNvZGU+U1VOREFZPC9j
b2RlPiwKKyAgICogPGNvZGU+TU9OREFZPC9jb2RlPiwgPGNvZGU+VFVFU0RBWTwvY29kZT4sIDxj
b2RlPldFRE5FU0RBWTwvY29kZT4sCisgICAqIDxjb2RlPlRIVVJTREFZPC9jb2RlPiwgPGNvZGU+
RlJJREFZPC9jb2RlPiwgYW5kIDxjb2RlPlNBVFVSREFZPC9jb2RlPi4KKyAgICogQHNlZSAjVUNB
TF9TVU5EQVkKKyAgICogQHNlZSAjVUNBTF9NT05EQVkKKyAgICogQHNlZSAjVUNBTF9UVUVTREFZ
CisgICAqIEBzZWUgI1VDQUxfV0VETkVTREFZCisgICAqIEBzZWUgI1VDQUxfVEhVUlNEQVkKKyAg
ICogQHNlZSAjVUNBTF9GUklEQVkKKyAgICogQHNlZSAjVUNBTF9TQVRVUkRBWQorICAgKiBAc3Rh
YmxlIElDVSAyLjYgCisgICAqLworICBVQ0FMX0RBWV9PRl9XRUVLLAorCisgLyoqCisgICAqIEZp
ZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZQorICAgKiBvcmRpbmFsIG51bWJlciBvZiB0aGUgZGF5
IG9mIHRoZSB3ZWVrIHdpdGhpbiB0aGUgY3VycmVudCBtb250aC4gVG9nZXRoZXIKKyAgICogd2l0
aCB0aGUgPGNvZGU+REFZX09GX1dFRUs8L2NvZGU+IGZpZWxkLCB0aGlzIHVuaXF1ZWx5IHNwZWNp
ZmllcyBhIGRheQorICAgKiB3aXRoaW4gYSBtb250aC4gIFVubGlrZSA8Y29kZT5XRUVLX09GX01P
TlRIPC9jb2RlPiBhbmQKKyAgICogPGNvZGU+V0VFS19PRl9ZRUFSPC9jb2RlPiwgdGhpcyBmaWVs
ZCdzIHZhbHVlIGRvZXMgPGVtPm5vdDwvZW0+IGRlcGVuZCBvbgorICAgKiA8Y29kZT5nZXRGaXJz
dERheU9mV2VlaygpPC9jb2RlPiBvcgorICAgKiA8Y29kZT5nZXRNaW5pbWFsRGF5c0luRmlyc3RX
ZWVrKCk8L2NvZGU+LiAgPGNvZGU+REFZX09GX01PTlRIIDE8L2NvZGU+CisgICAqIHRocm91Z2gg
PGNvZGU+NzwvY29kZT4gYWx3YXlzIGNvcnJlc3BvbmQgdG8gPGNvZGU+REFZX09GX1dFRUtfSU5f
TU9OVEgKKyAgICogMTwvY29kZT47IDxjb2RlPjg8L2NvZGU+IHRocm91Z2ggPGNvZGU+MTU8L2Nv
ZGU+IGNvcnJlc3BvbmQgdG8KKyAgICogPGNvZGU+REFZX09GX1dFRUtfSU5fTU9OVEggMjwvY29k
ZT4sIGFuZCBzbyBvbi4KKyAgICogPGNvZGU+REFZX09GX1dFRUtfSU5fTU9OVEggMDwvY29kZT4g
aW5kaWNhdGVzIHRoZSB3ZWVrIGJlZm9yZQorICAgKiA8Y29kZT5EQVlfT0ZfV0VFS19JTl9NT05U
SCAxPC9jb2RlPi4gIE5lZ2F0aXZlIHZhbHVlcyBjb3VudCBiYWNrIGZyb20gdGhlCisgICAqIGVu
ZCBvZiB0aGUgbW9udGgsIHNvIHRoZSBsYXN0IFN1bmRheSBvZiBhIG1vbnRoIGlzIHNwZWNpZmll
ZCBhcworICAgKiA8Y29kZT5EQVlfT0ZfV0VFSyA9IFNVTkRBWSwgREFZX09GX1dFRUtfSU5fTU9O
VEggPSAtMTwvY29kZT4uICBCZWNhdXNlCisgICAqIG5lZ2F0aXZlIHZhbHVlcyBjb3VudCBiYWNr
d2FyZCB0aGV5IHdpbGwgdXN1YWxseSBiZSBhbGlnbmVkIGRpZmZlcmVudGx5CisgICAqIHdpdGhp
biB0aGUgbW9udGggdGhhbiBwb3NpdGl2ZSB2YWx1ZXMuICBGb3IgZXhhbXBsZSwgaWYgYSBtb250
aCBoYXMgMzEKKyAgICogZGF5cywgPGNvZGU+REFZX09GX1dFRUtfSU5fTU9OVEggLTE8L2NvZGU+
IHdpbGwgb3ZlcmxhcAorICAgKiA8Y29kZT5EQVlfT0ZfV0VFS19JTl9NT05USCA1PC9jb2RlPiBh
bmQgdGhlIGVuZCBvZiA8Y29kZT40PC9jb2RlPi4KKyAgICogQHNlZSAjVUNBTF9EQVlfT0ZfV0VF
SworICAgKiBAc2VlICNVQ0FMX1dFRUtfT0ZfTU9OVEgKKyAgICogQHN0YWJsZSBJQ1UgMi42IAor
ICAgKi8KKyAgVUNBTF9EQVlfT0ZfV0VFS19JTl9NT05USCwKKworIC8qKgorICAgKiBGaWVsZCBu
dW1iZXIgaW5kaWNhdGluZworICAgKiB3aGV0aGVyIHRoZSA8Y29kZT5IT1VSPC9jb2RlPiBpcyBi
ZWZvcmUgb3IgYWZ0ZXIgbm9vbi4KKyAgICogRS5nLiwgYXQgMTA6MDQ6MTUuMjUwIFBNIHRoZSA8
Y29kZT5BTV9QTTwvY29kZT4gaXMgPGNvZGU+UE08L2NvZGU+LgorICAgKiBAc2VlICNVQ0FMX0FN
CisgICAqIEBzZWUgI1VDQUxfUE0KKyAgICogQHNlZSAjVUNBTF9IT1VSCisgICAqIEBzdGFibGUg
SUNVIDIuNiAKKyAgICovCisgIFVDQUxfQU1fUE0sCisKKyAvKioKKyAgICogRmllbGQgbnVtYmVy
IGluZGljYXRpbmcgdGhlCisgICAqIGhvdXIgb2YgdGhlIG1vcm5pbmcgb3IgYWZ0ZXJub29uLiA8
Y29kZT5IT1VSPC9jb2RlPiBpcyB1c2VkIGZvciB0aGUgMTItaG91cgorICAgKiBjbG9jay4KKyAg
ICogRS5nLiwgYXQgMTA6MDQ6MTUuMjUwIFBNIHRoZSA8Y29kZT5IT1VSPC9jb2RlPiBpcyAxMC4K
KyAgICogQHNlZSAjVUNBTF9BTV9QTQorICAgKiBAc2VlICNVQ0FMX0hPVVJfT0ZfREFZCisgICAq
IEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfSE9VUiwKKworIC8qKgorICAgKiBGaWVs
ZCBudW1iZXIgaW5kaWNhdGluZyB0aGUKKyAgICogaG91ciBvZiB0aGUgZGF5LiA8Y29kZT5IT1VS
X09GX0RBWTwvY29kZT4gaXMgdXNlZCBmb3IgdGhlIDI0LWhvdXIgY2xvY2suCisgICAqIEUuZy4s
IGF0IDEwOjA0OjE1LjI1MCBQTSB0aGUgPGNvZGU+SE9VUl9PRl9EQVk8L2NvZGU+IGlzIDIyLgor
ICAgKiBAc2VlICNVQ0FMX0hPVVIKKyAgICogQHN0YWJsZSBJQ1UgMi42IAorICAgKi8KKyAgVUNB
TF9IT1VSX09GX0RBWSwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUK
KyAgICogbWludXRlIHdpdGhpbiB0aGUgaG91ci4KKyAgICogRS5nLiwgYXQgMTA6MDQ6MTUuMjUw
IFBNIHRoZSA8Y29kZT5VQ0FMX01JTlVURTwvY29kZT4gaXMgNC4KKyAgICogQHN0YWJsZSBJQ1Ug
Mi42IAorICAgKi8KKyAgVUNBTF9NSU5VVEUsCisKKyAvKioKKyAgICogRmllbGQgbnVtYmVyIGlu
ZGljYXRpbmcgdGhlCisgICAqIHNlY29uZCB3aXRoaW4gdGhlIG1pbnV0ZS4KKyAgICogRS5nLiwg
YXQgMTA6MDQ6MTUuMjUwIFBNIHRoZSA8Y29kZT5VQ0FMX1NFQ09ORDwvY29kZT4gaXMgMTUuCisg
ICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfU0VDT05ELAorCisgLyoqCisgICAq
IEZpZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZQorICAgKiBtaWxsaXNlY29uZCB3aXRoaW4gdGhl
IHNlY29uZC4KKyAgICogRS5nLiwgYXQgMTA6MDQ6MTUuMjUwIFBNIHRoZSA8Y29kZT5VQ0FMX01J
TExJU0VDT05EPC9jb2RlPiBpcyAyNTAuCisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisg
IFVDQUxfTUlMTElTRUNPTkQsCisKKyAvKioKKyAgICogRmllbGQgbnVtYmVyIGluZGljYXRpbmcg
dGhlCisgICAqIHJhdyBvZmZzZXQgZnJvbSBHTVQgaW4gbWlsbGlzZWNvbmRzLgorICAgKiBAc3Rh
YmxlIElDVSAyLjYgCisgICAqLworICBVQ0FMX1pPTkVfT0ZGU0VULAorCisgLyoqCisgICAqIEZp
ZWxkIG51bWJlciBpbmRpY2F0aW5nIHRoZQorICAgKiBkYXlsaWdodCBzYXZpbmdzIG9mZnNldCBp
biBtaWxsaXNlY29uZHMuCisgICAqIEBzdGFibGUgSUNVIDIuNiAKKyAgICovCisgIFVDQUxfRFNU
X09GRlNFVCwKKyAgCisgLyoqCisgICAqIEZpZWxkIG51bWJlciAKKyAgICogaW5kaWNhdGluZyB0
aGUgZXh0ZW5kZWQgeWVhciBjb3JyZXNwb25kaW5nIHRvIHRoZQorICAgKiA8Y29kZT5VQ0FMX1dF
RUtfT0ZfWUVBUjwvY29kZT4gZmllbGQuICBUaGlzIG1heSBiZSBvbmUgZ3JlYXRlciBvciBsZXNz
CisgICAqIHRoYW4gdGhlIHZhbHVlIG9mIDxjb2RlPlVDQUxfRVhURU5ERURfWUVBUjwvY29kZT4u
CisgICAqIEBzdGFibGUgSUNVIDIuNgorICAgKi8KKyAgVUNBTF9ZRUFSX1dPWSwKKworIC8qKgor
ICAgKiBGaWVsZCBudW1iZXIgCisgICAqIGluZGljYXRpbmcgdGhlIGxvY2FsaXplZCBkYXkgb2Yg
d2Vlay4gIFRoaXMgd2lsbCBiZSBhIHZhbHVlIGZyb20gMQorICAgKiB0byA3IGluY2x1c2l2ZSwg
d2l0aCAxIGJlaW5nIHRoZSBsb2NhbGl6ZWQgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLgorICAgKiBA
c3RhYmxlIElDVSAyLjYKKyAgICovCisgIFVDQUxfRE9XX0xPQ0FMLAorCisgIC8qKgorICAgKiBZ
ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLCBlbmNvbXBhc3NpbmcgYWxsIHN1cHJhLXllYXIg
ZmllbGRzLiBGb3IgZXhhbXBsZSwgCisgICAqIGluIEdyZWdvcmlhbi9KdWxpYW4gY2FsZW5kYXJz
LCBwb3NpdGl2ZSBFeHRlbmRlZCBZZWFyIHZhbHVlcyBpbmRpY2F0ZSB5ZWFycyBBRCwKKyAgICog
IDEgQkMgPSAwIGV4dGVuZGVkLCAyIEJDID0gLTEgZXh0ZW5kZWQsIGFuZCBzbyBvbi4gCisgICAq
IEBzdGFibGUgSUNVIDIuOCAKKyAgICovCisgIFVDQUxfRVhURU5ERURfWUVBUiwKKworIC8qKgor
ICAgKiBGaWVsZCBudW1iZXIgCisgICAqIGluZGljYXRpbmcgdGhlIG1vZGlmaWVkIEp1bGlhbiBk
YXkgbnVtYmVyLiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbQorICAgKiB0aGUgY29udmVudGlvbmFs
IEp1bGlhbiBkYXkgbnVtYmVyIGluIHR3byByZWdhcmRzLiAgRmlyc3QsIGl0CisgICAqIGRlbWFy
Y2F0ZXMgZGF5cyBhdCBsb2NhbCB6b25lIG1pZG5pZ2h0LCByYXRoZXIgdGhhbiBub29uIEdNVC4K
KyAgICogU2Vjb25kLCBpdCBpcyBhIGxvY2FsIG51bWJlcjsgdGhhdCBpcywgaXQgZGVwZW5kcyBv
biB0aGUgbG9jYWwgdGltZQorICAgKiB6b25lLiAgSXQgY2FuIGJlIHRob3VnaHQgb2YgYXMgYSBz
aW5nbGUgbnVtYmVyIHRoYXQgZW5jb21wYXNzZXMgYWxsCisgICAqIHRoZSBkYXRlLXJlbGF0ZWQg
ZmllbGRzLgorICAgKiBAc3RhYmxlIElDVSAyLjgKKyAgICovCisgIFVDQUxfSlVMSUFOX0RBWSwg
CisKKyAgLyoqCisgICAqIFJhbmdlcyBmcm9tIDAgdG8gMjM6NTk6NTkuOTk5IChyZWdhcmRsZXNz
IG9mIERTVCkuICBUaGlzIGZpZWxkIGJlaGF2ZXMgPGVtPmV4YWN0bHk8L2VtPiAKKyAgICogbGlr
ZSBhIGNvbXBvc2l0ZSBvZiBhbGwgdGltZS1yZWxhdGVkIGZpZWxkcywgbm90IGluY2x1ZGluZyB0
aGUgem9uZSBmaWVsZHMuICBBcyBzdWNoLCAKKyAgICogaXQgYWxzbyByZWZsZWN0cyBkaXNjb250
aW51aXRpZXMgb2YgdGhvc2UgZmllbGRzIG9uIERTVCB0cmFuc2l0aW9uIGRheXMuICBPbiBhIGRh
eQorICAgKiBvZiBEU1Qgb25zZXQsIGl0IHdpbGwganVtcCBmb3J3YXJkLiAgT24gYSBkYXkgb2Yg
RFNUIGNlc3NhdGlvbiwgaXQgd2lsbCBqdW1wIAorICAgKiBiYWNrd2FyZC4gIFRoaXMgcmVmbGVj
dHMgdGhlIGZhY3QgdGhhdCBpdCBtdXN0IGJlIGNvbWJpbmVkIHdpdGggdGhlIERTVF9PRkZTRVQg
ZmllbGQKKyAgICogdG8gb2J0YWluIGEgdW5pcXVlIGxvY2FsIHRpbWUgdmFsdWUuCisgICAqIEBz
dGFibGUgSUNVIDIuOAorICAgKi8KKyAgVUNBTF9NSUxMSVNFQ09ORFNfSU5fREFZLAorCisgIC8q
KgorICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgY3VycmVudCBtb250aCBpcyBhIGxlYXAgbW9udGgg
KDAgb3IgMSkuIFNlZSB0aGUgQ2hpbmVzZSBjYWxlbmRhciBmb3IKKyAgICogYW4gZXhhbXBsZSBv
ZiB0aGlzLgorICAgKi8KKyAgVUNBTF9JU19MRUFQX01PTlRILAorICAKKyAgLyoqCisgICAqIEZp
ZWxkIGNvdW50CisgICAqIEBzdGFibGUgSUNVIDIuNgorICAgKi8KKyAgVUNBTF9GSUVMRF9DT1VO
VCwKKworIC8qKgorICAgKiBGaWVsZCBudW1iZXIgaW5kaWNhdGluZyB0aGUKKyAgICogZGF5IG9m
IHRoZSBtb250aC4gVGhpcyBpcyBhIHN5bm9ueW0gZm9yIDxjb2RlPlVDQUxfREFURTwvY29kZT4u
CisgICAqIFRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoIGhhcyB2YWx1ZSAxLgorICAgKiBAc2Vl
ICNVQ0FMX0RBVEUKKyAgICogU3lub255bSBmb3IgVUNBTF9EQVRFCisgICAqIEBzdGFibGUgSUNV
IDIuOAorICAgKiovCisgIFVDQUxfREFZX09GX01PTlRIPVVDQUxfREFURQorfTsKKworLyoqIEBz
dGFibGUgSUNVIDIuMCAqLwordHlwZWRlZiBlbnVtIFVDYWxlbmRhckRhdGVGaWVsZHMgVUNhbGVu
ZGFyRGF0ZUZpZWxkczsKKyAgICAvKioKKyAgICAgKiBVc2VmdWwgY29uc3RhbnQgZm9yIGRheXMg
b2Ygd2Vlay4gTm90ZTogQ2FsZW5kYXIgZGF5LW9mLXdlZWsgaXMgMS1iYXNlZC4gQ2xpZW50cwor
ICAgICAqIHdobyBjcmVhdGUgbG9jYWxlIHJlc291cmNlcyBmb3IgdGhlIGZpZWxkIG9mIGZpcnN0
LWRheS1vZi13ZWVrIHNob3VsZCBiZSBhd2FyZSBvZgorICAgICAqIHRoaXMuIEZvciBpbnN0YW5j
ZSwgaW4gVVMgbG9jYWxlLCBmaXJzdC1kYXktb2Ytd2VlayBpcyBzZXQgdG8gMSwgaS5lLiwgVUNB
TF9TVU5EQVkuCisgICAgICovCisvKiogUG9zc2libGUgZGF5cyBvZiB0aGUgd2VlayBpbiBhIFVD
YWxlbmRhciAKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitlbnVtIFVDYWxlbmRhckRheXNPZldl
ZWsgeworICAvKiogU3VuZGF5ICovCisgIFVDQUxfU1VOREFZID0gMSwKKyAgLyoqIE1vbmRheSAq
LworICBVQ0FMX01PTkRBWSwKKyAgLyoqIFR1ZXNkYXkgKi8KKyAgVUNBTF9UVUVTREFZLAorICAv
KiogV2VkbmVzZGF5ICovCisgIFVDQUxfV0VETkVTREFZLAorICAvKiogVGh1cnNkYXkgKi8KKyAg
VUNBTF9USFVSU0RBWSwKKyAgLyoqIEZyaWRheSAqLworICBVQ0FMX0ZSSURBWSwKKyAgLyoqIFNh
dHVyZGF5ICovCisgIFVDQUxfU0FUVVJEQVkKK307CisKKy8qKiBAc3RhYmxlIElDVSAyLjAgKi8K
K3R5cGVkZWYgZW51bSBVQ2FsZW5kYXJEYXlzT2ZXZWVrIFVDYWxlbmRhckRheXNPZldlZWs7CisK
Ky8qKiBQb3NzaWJsZSBtb250aHMgaW4gYSBVQ2FsZW5kYXIuIE5vdGU6IENhbGVuZGFyIG1vbnRo
IGlzIDAtYmFzZWQuCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworZW51bSBVQ2FsZW5kYXJNb250
aHMgeworICAvKiogSmFudWFyeSAqLworICBVQ0FMX0pBTlVBUlksCisgIC8qKiBGZWJydWFyeSAq
LworICBVQ0FMX0ZFQlJVQVJZLAorICAvKiogTWFyY2ggKi8KKyAgVUNBTF9NQVJDSCwKKyAgLyoq
IEFwcmlsICovCisgIFVDQUxfQVBSSUwsCisgIC8qKiBNYXkgKi8KKyAgVUNBTF9NQVksCisgIC8q
KiBKdW5lICovCisgIFVDQUxfSlVORSwKKyAgLyoqIEp1bHkgKi8KKyAgVUNBTF9KVUxZLAorICAv
KiogQXVndXN0ICovCisgIFVDQUxfQVVHVVNULAorICAvKiogU2VwdGVtYmVyICovCisgIFVDQUxf
U0VQVEVNQkVSLAorICAvKiogT2N0b2JlciAqLworICBVQ0FMX09DVE9CRVIsCisgIC8qKiBOb3Zl
bWJlciAqLworICBVQ0FMX05PVkVNQkVSLAorICAvKiogRGVjZW1iZXIgKi8KKyAgVUNBTF9ERUNF
TUJFUiwKKyAgLyoqIFZhbHVlIG9mIHRoZSA8Y29kZT5VQ0FMX01PTlRIPC9jb2RlPiBmaWVsZCBp
bmRpY2F0aW5nIHRoZQorICAgICogdGhpcnRlZW50aCBtb250aCBvZiB0aGUgeWVhci4gQWx0aG91
Z2ggdGhlIEdyZWdvcmlhbiBjYWxlbmRhcgorICAgICogZG9lcyBub3QgdXNlIHRoaXMgdmFsdWUs
IGx1bmFyIGNhbGVuZGFycyBkby4KKyAgICAqLworICBVQ0FMX1VOREVDSU1CRVIKK307CisKKy8q
KiBAc3RhYmxlIElDVSAyLjAgKi8KK3R5cGVkZWYgZW51bSBVQ2FsZW5kYXJNb250aHMgVUNhbGVu
ZGFyTW9udGhzOworCisvKiogUG9zc2libGUgQU0vUE0gdmFsdWVzIGluIGEgVUNhbGVuZGFyIAor
ICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK2VudW0gVUNhbGVuZGFyQU1QTXMgeworICAgIC8qKiBB
TSAqLworICBVQ0FMX0FNLAorICAvKiogUE0gKi8KKyAgVUNBTF9QTQorfTsKKworLyoqIEBzdGFi
bGUgSUNVIDIuMCAqLwordHlwZWRlZiBlbnVtIFVDYWxlbmRhckFNUE1zIFVDYWxlbmRhckFNUE1z
OworCisvKioKKyAqIENyZWF0ZSBhbiBlbnVtZXJhdGlvbiBvdmVyIGFsbCB0aW1lIHpvbmVzLgor
ICoKKyAqIEBwYXJhbSBlYyBpbnB1dC9vdXRwdXQgZXJyb3IgY29kZQorICoKKyAqIEByZXR1cm4g
YW4gZW51bWVyYXRpb24gb2JqZWN0IHRoYXQgdGhlIGNhbGxlciBtdXN0IGRpc3Bvc2Ugb2YgdXNp
bmcKKyAqIHVlbnVtX2Nsb3NlKCksIG9yIE5VTEwgdXBvbiBmYWlsdXJlLiBJbiBjYXNlIG9mIGZh
aWx1cmUgKmVjIHdpbGwKKyAqIGluZGljYXRlIHRoZSBlcnJvci4KKyAqCisgKiBAc3RhYmxlIElD
VSAyLjYKKyAqLworVV9TVEFCTEUgVUVudW1lcmF0aW9uKiBVX0VYUE9SVDIKK3VjYWxfb3BlblRp
bWVab25lcyhVRXJyb3JDb2RlKiBlYyk7CisKKy8qKgorICogQ3JlYXRlIGFuIGVudW1lcmF0aW9u
IG92ZXIgYWxsIHRpbWUgem9uZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbgorICogY291bnRy
eS4gU29tZSB6b25lcyBhcmUgYWZmaWxpYXRlZCB3aXRoIG5vIGNvdW50cnkgKGUuZy4sICJVVEMi
KTsKKyAqIHRoZXNlIG1heSBhbHNvIGJlIHJldHJpZXZlZCwgYXMgYSBncm91cC4KKyAqCisgKiBA
cGFyYW0gY291bnRyeSB0aGUgSVNPIDMxNjYgdHdvLWxldHRlciBjb3VudHJ5IGNvZGUsIG9yIE5V
TEwgdG8KKyAqIHJldHJpZXZlIHpvbmVzIG5vdCBhZmZpbGlhdGVkIHdpdGggYW55IGNvdW50cnkK
KyAqCisgKiBAcGFyYW0gZWMgaW5wdXQvb3V0cHV0IGVycm9yIGNvZGUKKyAqCisgKiBAcmV0dXJu
IGFuIGVudW1lcmF0aW9uIG9iamVjdCB0aGF0IHRoZSBjYWxsZXIgbXVzdCBkaXNwb3NlIG9mIHVz
aW5nCisgKiB1ZW51bV9jbG9zZSgpLCBvciBOVUxMIHVwb24gZmFpbHVyZS4gSW4gY2FzZSBvZiBm
YWlsdXJlICplYyB3aWxsCisgKiBpbmRpY2F0ZSB0aGUgZXJyb3IuCisgKgorICogQHN0YWJsZSBJ
Q1UgMi42CisgKi8KK1VfU1RBQkxFIFVFbnVtZXJhdGlvbiogVV9FWFBPUlQyCit1Y2FsX29wZW5D
b3VudHJ5VGltZVpvbmVzKGNvbnN0IGNoYXIqIGNvdW50cnksIFVFcnJvckNvZGUqIGVjKTsKKwor
LyoqCisgKiBSZXR1cm4gdGhlIGRlZmF1bHQgdGltZSB6b25lLiBUaGUgZGVmYXVsdCBpcyBkZXRl
cm1pbmVkIGluaXRpYWxseQorICogYnkgcXVlcnlpbmcgdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3Rl
bS4gSXQgbWF5IGJlIGNoYW5nZWQgd2l0aAorICogdWNhbF9zZXREZWZhdWx0VGltZVpvbmUoKSBv
ciB3aXRoIHRoZSBDKysgVGltZVpvbmUgQVBJLgorICoKKyAqIEBwYXJhbSByZXN1bHQgQSBidWZm
ZXIgdG8gcmVjZWl2ZSB0aGUgcmVzdWx0LCBvciBOVUxMCisgKgorICogQHBhcmFtIHJlc3VsdENh
cGFjaXR5IFRoZSBjYXBhY2l0eSBvZiB0aGUgcmVzdWx0IGJ1ZmZlcgorICoKKyAqIEBwYXJhbSBl
YyBpbnB1dC9vdXRwdXQgZXJyb3IgY29kZQorICoKKyAqIEByZXR1cm4gVGhlIHJlc3VsdCBzdHJp
bmcgbGVuZ3RoLCBub3QgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZworICogbnVsbAorICoKKyAq
IEBzdGFibGUgSUNVIDIuNgorICovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgordWNhbF9n
ZXREZWZhdWx0VGltZVpvbmUoVUNoYXIqIHJlc3VsdCwgaW50MzJfdCByZXN1bHRDYXBhY2l0eSwg
VUVycm9yQ29kZSogZWMpOworCisvKioKKyAqIFNldCB0aGUgZGVmYXVsdCB0aW1lIHpvbmUuCisg
KgorICogQHBhcmFtIHpvbmVJRCBudWxsLXRlcm1pbmF0ZWQgdGltZSB6b25lIElECisgKgorICog
QHBhcmFtIGVjIGlucHV0L291dHB1dCBlcnJvciBjb2RlCisgKgorICogQHN0YWJsZSBJQ1UgMi42
CisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyCit1Y2FsX3NldERlZmF1bHRUaW1lWm9uZShj
b25zdCBVQ2hhciogem9uZUlELCBVRXJyb3JDb2RlKiBlYyk7CisKKy8qKgorICogUmV0dXJuIHRo
ZSBhbW91bnQgb2YgdGltZSBpbiBtaWxsaXNlY29uZHMgdGhhdCB0aGUgY2xvY2sgaXMKKyAqIGFk
dmFuY2VkIGR1cmluZyBkYXlsaWdodCBzYXZpbmdzIHRpbWUgZm9yIHRoZSBnaXZlbiB0aW1lIHpv
bmUsIG9yCisgKiB6ZXJvIGlmIHRoZSB0aW1lIHpvbmUgZG9lcyBub3Qgb2JzZXJ2ZSBkYXlsaWdo
dCBzYXZpbmdzIHRpbWUuCisgKgorICogQHBhcmFtIHpvbmVJRCBudWxsLXRlcm1pbmF0ZWQgdGlt
ZSB6b25lIElECisgKgorICogQHBhcmFtIGVjIGlucHV0L291dHB1dCBlcnJvciBjb2RlCisgKgor
ICogQHJldHVybiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGUgdGltZSBpcyBhZHZhbmNl
ZCB3aXRoCisgKiByZXNwZWN0IHRvIHN0YW5kYXJkIHRpbWUgd2hlbiB0aGUgZGF5bGlnaHQgc2F2
aW5ncyBydWxlcyBhcmUgaW4KKyAqIGVmZmVjdC4gVGhpcyBpcyBhbHdheXMgYSBub24tbmVnYXRp
dmUgbnVtYmVyLCBtb3N0IGNvbW1vbmx5IGVpdGhlcgorICogMyw2MDAsMDAwIChvbmUgaG91cikg
b3IgemVyby4KKyAqCisgKiBAc3RhYmxlIElDVSAyLjYKKyAqLworVV9TVEFCTEUgaW50MzJfdCBV
X0VYUE9SVDIKK3VjYWxfZ2V0RFNUU2F2aW5ncyhjb25zdCBVQ2hhciogem9uZUlELCBVRXJyb3JD
b2RlKiBlYyk7CisKKy8qKgorICogR2V0IHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUuCisgKiBU
aGUgdmFsdWUgcmV0dXJuZWQgaXMgcmVwcmVzZW50ZWQgYXMgbWlsbGlzZWNvbmRzIGZyb20gdGhl
IGVwb2NoLgorICogQHJldHVybiBUaGUgY3VycmVudCBkYXRlIGFuZCB0aW1lLgorICogQHN0YWJs
ZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIFVEYXRlIFVfRVhQT1JUMiAKK3VjYWxfZ2V0Tm93KHZv
aWQpOworCisvKioKKyAqIE9wZW4gYSBVQ2FsZW5kYXIuCisgKiBBIFVDYWxlbmRhciBtYXkgYmUg
dXNlZCB0byBjb252ZXJ0IGEgbWlsbGlzZWNvbmQgdmFsdWUgdG8gYSB5ZWFyLAorICogbW9udGgs
IGFuZCBkYXkuCisgKiA8cD4KKyAqIE5vdGU6IFdoZW4gdW5rbm93biBUaW1lWm9uZSBJRCBpcyBz
cGVjaWZpZWQsIHRoZSBVQ2FsZW5kYXIgcmV0dXJuZWQKKyAqIGJ5IHRoZSBmdW5jdGlvbiBpcyBp
bml0aWFsaXplZCB3aXRoIEdNVCAoIkV0Yy9HTVQiKSB3aXRob3V0IGFueQorICogZXJyb3JzL3dh
cm5pbmdzLiAgSWYgeW91IHdhbnQgdG8gY2hlY2sgaWYgYSBUaW1lWm9uZSBJRCBpcyB2YWxpZCwK
KyAqIHVzZSB1Y2FsX2dldENhbm9uaWNhbFRpbWVab25lSUQgcHJpb3IgdG8gdGhpcyBmdW5jdGlv
bi4KKyAqIAorICogQHBhcmFtIHpvbmVJRCBUaGUgZGVzaXJlZCBUaW1lWm9uZSBJRC4gIElmIDAs
IHVzZSB0aGUgZGVmYXVsdCB0aW1lIHpvbmUuCisgKiBAcGFyYW0gbGVuIFRoZSBsZW5ndGggb2Yg
em9uZUlELCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisgKiBAcGFyYW0gbG9jYWxlIFRoZSBk
ZXNpcmVkIGxvY2FsZQorICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgVUNhbGVuZGFyIHRvIG9w
ZW4uIFRoaXMgY2FuIGJlIFVDQUxfR1JFR09SSUFOIHRvIG9wZW4gdGhlIEdyZWdvcmlhbgorICog
Y2FsZW5kYXIgZm9yIHRoZSBsb2NhbGUsIG9yIFVDQUxfREVGQVVMVCB0byBvcGVuIHRoZSBkZWZh
dWx0IGNhbGVuZGFyIGZvciB0aGUgbG9jYWxlICh0aGUKKyAqIGRlZmF1bHQgY2FsZW5kYXIgbWF5
IGFsc28gYmUgR3JlZ29yaWFuKS4gVG8gb3BlbiBhIHNwZWNpZmljIG5vbi1HcmVnb3JpYW4gY2Fs
ZW5kYXIgZm9yIHRoZQorICogbG9jYWxlLCB1c2UgdWxvY19zZXRLZXl3b3JkVmFsdWUgdG8gc2V0
IHRoZSB2YWx1ZSBvZiB0aGUgY2FsZW5kYXIga2V5d29yZCBmb3IgdGhlIGxvY2FsZQorICogYW5k
IHRoZW4gcGFzcyB0aGUgbG9jYWxlIHRvIHVjYWxfb3BlbiB3aXRoIFVDQUxfREVGQVVMVCBhcyB0
aGUgdHlwZS4KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8g
cmVjZWl2ZSBhbnkgZXJyb3JzCisgKiBAcmV0dXJuIEEgcG9pbnRlciB0byBhIFVDYWxlbmRhciwg
b3IgMCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NU
QUJMRSBVQ2FsZW5kYXIqIFVfRVhQT1JUMiAKK3VjYWxfb3Blbihjb25zdCBVQ2hhciogICB6b25l
SUQsCisgICAgICAgICAgaW50MzJfdCAgICAgICAgbGVuLAorICAgICAgICAgIGNvbnN0IGNoYXIq
ICAgIGxvY2FsZSwKKyAgICAgICAgICBVQ2FsZW5kYXJUeXBlICB0eXBlLAorICAgICAgICAgIFVF
cnJvckNvZGUqICAgIHN0YXR1cyk7CisKKy8qKgorICogQ2xvc2UgYSBVQ2FsZW5kYXIuCisgKiBP
bmNlIGNsb3NlZCwgYSBVQ2FsZW5kYXIgbWF5IG5vIGxvbmdlciBiZSB1c2VkLgorICogQHBhcmFt
IGNhbCBUaGUgVUNhbGVuZGFyIHRvIGNsb3NlLgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1Vf
U1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWNhbF9jbG9zZShVQ2FsZW5kYXIgKmNhbCk7CisKKyNp
ZiBVX1NIT1dfQ1BMVVNQTFVTX0FQSQorCitVX05BTUVTUEFDRV9CRUdJTgorCisvKioKKyAqIFxj
bGFzcyBMb2NhbFVDYWxlbmRhclBvaW50ZXIKKyAqICJTbWFydCBwb2ludGVyIiBjbGFzcywgY2xv
c2VzIGEgVUNhbGVuZGFyIHZpYSB1Y2FsX2Nsb3NlKCkuCisgKiBGb3IgbW9zdCBtZXRob2RzIHNl
ZSB0aGUgTG9jYWxQb2ludGVyQmFzZSBiYXNlIGNsYXNzLgorICoKKyAqIEBzZWUgTG9jYWxQb2lu
dGVyQmFzZQorICogQHNlZSBMb2NhbFBvaW50ZXIKKyAqIEBzdGFibGUgSUNVIDQuNAorICovCitV
X0RFRklORV9MT0NBTF9PUEVOX1BPSU5URVIoTG9jYWxVQ2FsZW5kYXJQb2ludGVyLCBVQ2FsZW5k
YXIsIHVjYWxfY2xvc2UpOworCitVX05BTUVTUEFDRV9FTkQKKworI2VuZGlmCisKKy8qKgorICog
T3BlbiBhIGNvcHkgb2YgYSBVQ2FsZW5kYXIuCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGEg
ZGVlcCBjb3B5LgorICogQHBhcmFtIGNhbCBUaGUgY2FsZW5kYXIgdG8gY29weQorICogQHBhcmFt
IHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMu
CisgKiBAcmV0dXJuIEEgcG9pbnRlciB0byBhIFVDYWxlbmRhciBpZGVudGljYWwgdG8gY2FsLgor
ICogQHN0YWJsZSBJQ1UgNC4wCisgKi8KK1VfU1RBQkxFIFVDYWxlbmRhciogVV9FWFBPUlQyIAor
dWNhbF9jbG9uZShjb25zdCBVQ2FsZW5kYXIqIGNhbCwKKyAgICAgICAgICAgVUVycm9yQ29kZSog
ICAgICBzdGF0dXMpOworCisvKioKKyAqIFNldCB0aGUgVGltZVpvbmUgdXNlZCBieSBhIFVDYWxl
bmRhci4KKyAqIEEgVUNhbGVuZGFyIHVzZXMgYSB0aW1lem9uZSBmb3IgY29udmVydGluZyBmcm9t
IEdyZWVud2ljaCB0aW1lIHRvIGxvY2FsIHRpbWUuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5k
YXIgdG8gc2V0LgorICogQHBhcmFtIHpvbmVJRCBUaGUgZGVzaXJlZCBUaW1lWm9uZSBJRC4gIElm
IDAsIHVzZSB0aGUgZGVmYXVsdCB0aW1lIHpvbmUuCisgKiBAcGFyYW0gbGVuIFRoZSBsZW5ndGgg
b2Ygem9uZUlELCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisgKiBAcGFyYW0gc3RhdHVzIEEg
cG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycy4KKyAqIEBzdGFi
bGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfc2V0VGltZVpv
bmUoVUNhbGVuZGFyKiAgICBjYWwsCisgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiAgem9u
ZUlELAorICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgIGxlbiwKKyAgICAgICAgICAgICAg
ICAgVUVycm9yQ29kZSogICBzdGF0dXMpOworCisvKioKKyAqIFBvc3NpYmxlIGZvcm1hdHMgZm9y
IGEgVUNhbGVuZGFyJ3MgZGlzcGxheSBuYW1lIAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK2Vu
dW0gVUNhbGVuZGFyRGlzcGxheU5hbWVUeXBlIHsKKyAgLyoqIFN0YW5kYXJkIGRpc3BsYXkgbmFt
ZSAqLworICBVQ0FMX1NUQU5EQVJELAorICAvKiogU2hvcnQgc3RhbmRhcmQgZGlzcGxheSBuYW1l
ICovCisgIFVDQUxfU0hPUlRfU1RBTkRBUkQsCisgIC8qKiBEYXlsaWdodCBzYXZpbmdzIGRpc3Bs
YXkgbmFtZSAqLworICBVQ0FMX0RTVCwKKyAgLyoqIFNob3J0IGRheWxpZ2h0IHNhdmluZ3MgZGlz
cGxheSBuYW1lICovCisgIFVDQUxfU0hPUlRfRFNUCit9OworCisvKiogQHN0YWJsZSBJQ1UgMi4w
ICovCit0eXBlZGVmIGVudW0gVUNhbGVuZGFyRGlzcGxheU5hbWVUeXBlIFVDYWxlbmRhckRpc3Bs
YXlOYW1lVHlwZTsKKworLyoqCisgKiBHZXQgdGhlIGRpc3BsYXkgbmFtZSBmb3IgYSBVQ2FsZW5k
YXIncyBUaW1lWm9uZS4KKyAqIEEgZGlzcGxheSBuYW1lIGlzIHN1aXRhYmxlIGZvciBwcmVzZW50
YXRpb24gdG8gYSB1c2VyLgorICogQHBhcmFtIGNhbCAgICAgICAgICBUaGUgVUNhbGVuZGFyIHRv
IHF1ZXJ5LgorICogQHBhcmFtIHR5cGUgICAgICAgICBUaGUgZGVzaXJlZCBkaXNwbGF5IG5hbWUg
Zm9ybWF0OyBvbmUgb2YgVUNBTF9TVEFOREFSRCwgVUNBTF9TSE9SVF9TVEFOREFSRCwKKyAqICAg
ICAgICAgICAgICAgICAgICAgVUNBTF9EU1QsIFVDQUxfU0hPUlRfRFNUCisgKiBAcGFyYW0gbG9j
YWxlICAgICAgIFRoZSBkZXNpcmVkIGxvY2FsZSBmb3IgdGhlIGRpc3BsYXkgbmFtZS4KKyAqIEBw
YXJhbSByZXN1bHQgICAgICAgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIGZv
cm1hdHRlZCBudW1iZXIuCisgKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIFRoZSBtYXhpbXVtIHNpemUg
b2YgcmVzdWx0LgorICogQHBhcmFtIHN0YXR1cyAgICAgICBBIHBvaW50ZXIgdG8gYW4gVUVycm9y
Q29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyAqIEByZXR1cm4gICAgICAgICAgICAgVGhlIHRv
dGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwgdGhl
IG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxF
IGludDMyX3QgVV9FWFBPUlQyIAordWNhbF9nZXRUaW1lWm9uZURpc3BsYXlOYW1lKGNvbnN0IFVD
YWxlbmRhciogICAgICAgICAgY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDYWxl
bmRhckRpc3BsYXlOYW1lVHlwZSAgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiAgICAgICAgICAgICAgIGxvY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBVQ2hhciogICAgICAgICAgICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICAgIHJlc3VsdExlbmd0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiAgICAgICAgICAgICAgIHN0YXR1cyk7
CisKKy8qKgorICogRGV0ZXJtaW5lIGlmIGEgVUNhbGVuZGFyIGlzIGN1cnJlbnRseSBpbiBkYXls
aWdodCBzYXZpbmdzIHRpbWUuCisgKiBEYXlsaWdodCBzYXZpbmdzIHRpbWUgaXMgbm90IHVzZWQg
aW4gYWxsIHBhcnRzIG9mIHRoZSB3b3JsZC4KKyAqIEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0
byBxdWVyeS4KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8g
cmVjZWl2ZSBhbnkgZXJyb3JzCisgKiBAcmV0dXJuIFRSVUUgaWYgY2FsIGlzIGN1cnJlbnRseSBp
biBkYXlsaWdodCBzYXZpbmdzIHRpbWUsIEZBTFNFIG90aGVyd2lzZQorICogQHN0YWJsZSBJQ1Ug
Mi4wCisgKi8KK1VfU1RBQkxFIFVCb29sIFVfRVhQT1JUMiAKK3VjYWxfaW5EYXlsaWdodFRpbWUo
Y29uc3QgVUNhbGVuZGFyKiAgY2FsLAorICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiAg
ICAgICBzdGF0dXMgKTsKKworLyoqCisgKiBTZXRzIHRoZSBHcmVnb3JpYW5DYWxlbmRhciBjaGFu
Z2UgZGF0ZS4gVGhpcyBpcyB0aGUgcG9pbnQgd2hlbiB0aGUgc3dpdGNoIGZyb20KKyAqIEp1bGlh
biBkYXRlcyB0byBHcmVnb3JpYW4gZGF0ZXMgb2NjdXJyZWQuIERlZmF1bHQgaXMgMDA6MDA6MDAg
bG9jYWwgdGltZSwgT2N0b2JlcgorICogMTUsIDE1ODIuIFByZXZpb3VzIHRvIHRoaXMgdGltZSBh
bmQgZGF0ZSB3aWxsIGJlIEp1bGlhbiBkYXRlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdvcmtz
IG9ubHkgZm9yIEdyZWdvcmlhbiBjYWxlbmRhcnMuIElmIHRoZSBVQ2FsZW5kYXIgaXMgbm90Cisg
KiBhbiBpbnN0YW5jZSBvZiBhIEdyZWdvcmlhbiBjYWxlbmRhciwgdGhlbiBhIFVfVU5TVVBQT1JU
RURfRVJST1IKKyAqIGVycm9yIGNvZGUgaXMgc2V0LgorICoKKyAqIEBwYXJhbSBjYWwgICAgICAg
IFRoZSBjYWxlbmRhciBvYmplY3QuCisgKiBAcGFyYW0gZGF0ZSAgICAgICBUaGUgZ2l2ZW4gR3Jl
Z29yaWFuIGN1dG92ZXIgZGF0ZS4KKyAqIEBwYXJhbSBwRXJyb3JDb2RlIFBvaW50ZXIgdG8gYSBz
dGFuZGFyZCBJQ1UgZXJyb3IgY29kZS4gSXRzIGlucHV0IHZhbHVlIG11c3QKKyAqICAgICAgICAg
ICAgICAgICAgIHBhc3MgdGhlIFVfU1VDQ0VTUygpIHRlc3QsIG9yIGVsc2UgdGhlIGZ1bmN0aW9u
IHJldHVybnMKKyAqICAgICAgICAgICAgICAgICAgIGltbWVkaWF0ZWx5LiBDaGVjayBmb3IgVV9G
QUlMVVJFKCkgb24gb3V0cHV0IG9yIHVzZSB3aXRoCisgKiAgICAgICAgICAgICAgICAgICBmdW5j
dGlvbiBjaGFpbmluZy4gKFNlZSBVc2VyIEd1aWRlIGZvciBkZXRhaWxzLikKKyAqCisgKiBAc2Vl
IEdyZWdvcmlhbkNhbGVuZGFyOjpzZXRHcmVnb3JpYW5DaGFuZ2UKKyAqIEBzZWUgdWNhbF9nZXRH
cmVnb3JpYW5DaGFuZ2UKKyAqIEBzdGFibGUgSUNVIDMuNgorICovCitVX1NUQUJMRSB2b2lkIFVf
RVhQT1JUMgordWNhbF9zZXRHcmVnb3JpYW5DaGFuZ2UoVUNhbGVuZGFyICpjYWwsIFVEYXRlIGRh
dGUsIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOworCisvKioKKyAqIEdldHMgdGhlIEdyZWdvcmlh
biBDYWxlbmRhciBjaGFuZ2UgZGF0ZS4gVGhpcyBpcyB0aGUgcG9pbnQgd2hlbiB0aGUgc3dpdGNo
IGZyb20KKyAqIEp1bGlhbiBkYXRlcyB0byBHcmVnb3JpYW4gZGF0ZXMgb2NjdXJyZWQuIERlZmF1
bHQgaXMgMDA6MDA6MDAgbG9jYWwgdGltZSwgT2N0b2JlcgorICogMTUsIDE1ODIuIFByZXZpb3Vz
IHRvIHRoaXMgdGltZSBhbmQgZGF0ZSB3aWxsIGJlIEp1bGlhbiBkYXRlcy4KKyAqCisgKiBUaGlz
IGZ1bmN0aW9uIHdvcmtzIG9ubHkgZm9yIEdyZWdvcmlhbiBjYWxlbmRhcnMuIElmIHRoZSBVQ2Fs
ZW5kYXIgaXMgbm90CisgKiBhbiBpbnN0YW5jZSBvZiBhIEdyZWdvcmlhbiBjYWxlbmRhciwgdGhl
biBhIFVfVU5TVVBQT1JURURfRVJST1IKKyAqIGVycm9yIGNvZGUgaXMgc2V0LgorICoKKyAqIEBw
YXJhbSBjYWwgICAgICAgIFRoZSBjYWxlbmRhciBvYmplY3QuCisgKiBAcGFyYW0gcEVycm9yQ29k
ZSBQb2ludGVyIHRvIGEgc3RhbmRhcmQgSUNVIGVycm9yIGNvZGUuIEl0cyBpbnB1dCB2YWx1ZSBt
dXN0CisgKiAgICAgICAgICAgICAgICAgICBwYXNzIHRoZSBVX1NVQ0NFU1MoKSB0ZXN0LCBvciBl
bHNlIHRoZSBmdW5jdGlvbiByZXR1cm5zCisgKiAgICAgICAgICAgICAgICAgICBpbW1lZGlhdGVs
eS4gQ2hlY2sgZm9yIFVfRkFJTFVSRSgpIG9uIG91dHB1dCBvciB1c2Ugd2l0aAorICogICAgICAg
ICAgICAgICAgICAgZnVuY3Rpb24gY2hhaW5pbmcuIChTZWUgVXNlciBHdWlkZSBmb3IgZGV0YWls
cy4pCisgKiBAcmV0dXJuICAgVGhlIEdyZWdvcmlhbiBjdXRvdmVyIHRpbWUgZm9yIHRoaXMgY2Fs
ZW5kYXIuCisgKgorICogQHNlZSBHcmVnb3JpYW5DYWxlbmRhcjo6Z2V0R3JlZ29yaWFuQ2hhbmdl
CisgKiBAc2VlIHVjYWxfc2V0R3JlZ29yaWFuQ2hhbmdlCisgKiBAc3RhYmxlIElDVSAzLjYKKyAq
LworVV9TVEFCTEUgVURhdGUgVV9FWFBPUlQyCit1Y2FsX2dldEdyZWdvcmlhbkNoYW5nZShjb25z
dCBVQ2FsZW5kYXIgKmNhbCwgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7CisKKy8qKgorICogVHlw
ZXMgb2YgVUNhbGVuZGFyIGF0dHJpYnV0ZXMgCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworZW51
bSBVQ2FsZW5kYXJBdHRyaWJ1dGUgeworICAgIC8qKiBMZW5pZW50IHBhcnNpbmcgKi8KKyAgVUNB
TF9MRU5JRU5ULAorICAvKiogRmlyc3QgZGF5IG9mIHdlZWsgKi8KKyAgVUNBTF9GSVJTVF9EQVlf
T0ZfV0VFSywKKyAgLyoqIE1pbmltdW0gbnVtYmVyIG9mIGRheXMgaW4gZmlyc3Qgd2VlayAqLwor
ICBVQ0FMX01JTklNQUxfREFZU19JTl9GSVJTVF9XRUVLCit9OworCisvKiogQHN0YWJsZSBJQ1Ug
Mi4wICovCit0eXBlZGVmIGVudW0gVUNhbGVuZGFyQXR0cmlidXRlIFVDYWxlbmRhckF0dHJpYnV0
ZTsKKworLyoqCisgKiBHZXQgYSBudW1lcmljIGF0dHJpYnV0ZSBhc3NvY2lhdGVkIHdpdGggYSBV
Q2FsZW5kYXIuCisgKiBOdW1lcmljIGF0dHJpYnV0ZXMgaW5jbHVkZSB0aGUgZmlyc3QgZGF5IG9m
IHRoZSB3ZWVrLCBvciB0aGUgbWluaW1hbCBudW1iZXJzCisgKiBvZiBkYXlzIGluIHRoZSBmaXJz
dCB3ZWVrIG9mIHRoZSBtb250aC4KKyAqIEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBxdWVy
eS4KKyAqIEBwYXJhbSBhdHRyIFRoZSBkZXNpcmVkIGF0dHJpYnV0ZTsgb25lIG9mIFVDQUxfTEVO
SUVOVCwgVUNBTF9GSVJTVF9EQVlfT0ZfV0VFSywKKyAqIG9yIFVDQUxfTUlOSU1BTF9EQVlTX0lO
X0ZJUlNUX1dFRUsKKyAqIEByZXR1cm4gVGhlIHZhbHVlIG9mIGF0dHIuCisgKiBAc2VlIHVjYWxf
c2V0QXR0cmlidXRlCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgaW50MzJfdCBV
X0VYUE9SVDIgCit1Y2FsX2dldEF0dHJpYnV0ZShjb25zdCBVQ2FsZW5kYXIqICAgIGNhbCwKKyAg
ICAgICAgICAgICAgICAgIFVDYWxlbmRhckF0dHJpYnV0ZSAgYXR0cik7CisKKy8qKgorICogU2V0
IGEgbnVtZXJpYyBhdHRyaWJ1dGUgYXNzb2NpYXRlZCB3aXRoIGEgVUNhbGVuZGFyLgorICogTnVt
ZXJpYyBhdHRyaWJ1dGVzIGluY2x1ZGUgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlaywgb3IgdGhl
IG1pbmltYWwgbnVtYmVycworICogb2YgZGF5cyBpbiB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgbW9u
dGguCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gc2V0LgorICogQHBhcmFtIGF0dHIg
VGhlIGRlc2lyZWQgYXR0cmlidXRlOyBvbmUgb2YgVUNBTF9MRU5JRU5ULCBVQ0FMX0ZJUlNUX0RB
WV9PRl9XRUVLLAorICogb3IgVUNBTF9NSU5JTUFMX0RBWVNfSU5fRklSU1RfV0VFSworICogQHBh
cmFtIG5ld1ZhbHVlIFRoZSBuZXcgdmFsdWUgb2YgYXR0ci4KKyAqIEBzZWUgdWNhbF9nZXRBdHRy
aWJ1dGUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAK
K3VjYWxfc2V0QXR0cmlidXRlKFVDYWxlbmRhciogICAgICAgICAgY2FsLAorICAgICAgICAgICAg
ICAgICAgVUNhbGVuZGFyQXR0cmlidXRlICBhdHRyLAorICAgICAgICAgICAgICAgICAgaW50MzJf
dCAgICAgICAgICAgICBuZXdWYWx1ZSk7CisKKy8qKgorICogR2V0IGEgbG9jYWxlIGZvciB3aGlj
aCBjYWxlbmRhcnMgYXJlIGF2YWlsYWJsZS4KKyAqIEEgVUNhbGVuZGFyIGluIGEgbG9jYWxlIHJl
dHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gd2lsbCBjb250YWluIHRoZSBjb3JyZWN0CisgKiBkYXkg
YW5kIG1vbnRoIG5hbWVzIGZvciB0aGUgbG9jYWxlLgorICogQHBhcmFtIGxvY2FsZUluZGV4IFRo
ZSBpbmRleCBvZiB0aGUgZGVzaXJlZCBsb2NhbGUuCisgKiBAcmV0dXJuIEEgbG9jYWxlIGZvciB3
aGljaCBjYWxlbmRhcnMgYXJlIGF2YWlsYWJsZSwgb3IgMCBpZiBub25lLgorICogQHNlZSB1Y2Fs
X2NvdW50QXZhaWxhYmxlCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgY29uc3Qg
Y2hhciogVV9FWFBPUlQyIAordWNhbF9nZXRBdmFpbGFibGUoaW50MzJfdCBsb2NhbGVJbmRleCk7
CisKKy8qKgorICogRGV0ZXJtaW5lIGhvdyBtYW55IGxvY2FsZXMgaGF2ZSBjYWxlbmRhcnMgYXZh
aWxhYmxlLgorICogVGhpcyBmdW5jdGlvbiBpcyBtb3N0IHVzZWZ1bCBhcyBkZXRlcm1pbmluZyB0
aGUgbG9vcCBlbmRpbmcgY29uZGl0aW9uIGZvcgorICogY2FsbHMgdG8gXHJlZiB1Y2FsX2dldEF2
YWlsYWJsZS4KKyAqIEByZXR1cm4gVGhlIG51bWJlciBvZiBsb2NhbGVzIGZvciB3aGljaCBjYWxl
bmRhcnMgYXJlIGF2YWlsYWJsZS4KKyAqIEBzZWUgdWNhbF9nZXRBdmFpbGFibGUKKyAqIEBzdGFi
bGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VjYWxfY291bnRB
dmFpbGFibGUodm9pZCk7CisKKy8qKgorICogR2V0IGEgVUNhbGVuZGFyJ3MgY3VycmVudCB0aW1l
IGluIG1pbGxpcy4KKyAqIFRoZSB0aW1lIGlzIHJlcHJlc2VudGVkIGFzIG1pbGxpc2Vjb25kcyBm
cm9tIHRoZSBlcG9jaC4KKyAqIEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBxdWVyeS4KKyAq
IEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkg
ZXJyb3JzCisgKiBAcmV0dXJuIFRoZSBjYWxlbmRhcidzIGN1cnJlbnQgdGltZSBpbiBtaWxsaXMu
CisgKiBAc2VlIHVjYWxfc2V0TWlsbGlzCisgKiBAc2VlIHVjYWxfc2V0RGF0ZQorICogQHNlZSB1
Y2FsX3NldERhdGVUaW1lCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgVURhdGUg
VV9FWFBPUlQyIAordWNhbF9nZXRNaWxsaXMoY29uc3QgVUNhbGVuZGFyKiAgY2FsLAorICAgICAg
ICAgICAgICAgVUVycm9yQ29kZSogICAgICAgc3RhdHVzKTsKKworLyoqCisgKiBTZXQgYSBVQ2Fs
ZW5kYXIncyBjdXJyZW50IHRpbWUgaW4gbWlsbGlzLgorICogVGhlIHRpbWUgaXMgcmVwcmVzZW50
ZWQgYXMgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGVwb2NoLgorICogQHBhcmFtIGNhbCBUaGUgVUNh
bGVuZGFyIHRvIHNldC4KKyAqIEBwYXJhbSBkYXRlVGltZSBUaGUgZGVzaXJlZCBkYXRlIGFuZCB0
aW1lLgorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNl
aXZlIGFueSBlcnJvcnMKKyAqIEBzZWUgdWNhbF9nZXRNaWxsaXMKKyAqIEBzZWUgdWNhbF9zZXRE
YXRlCisgKiBAc2VlIHVjYWxfc2V0RGF0ZVRpbWUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitV
X1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfc2V0TWlsbGlzKFVDYWxlbmRhciogICBjYWws
CisgICAgICAgICAgICAgICBVRGF0ZSAgICAgICAgZGF0ZVRpbWUsCisgICAgICAgICAgICAgICBV
RXJyb3JDb2RlKiAgc3RhdHVzICk7CisKKy8qKgorICogU2V0IGEgVUNhbGVuZGFyJ3MgY3VycmVu
dCBkYXRlLgorICogVGhlIGRhdGUgaXMgcmVwcmVzZW50ZWQgYXMgYSBzZXJpZXMgb2YgMzItYml0
IGludGVnZXJzLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHNldC4KKyAqIEBwYXJh
bSB5ZWFyIFRoZSBkZXNpcmVkIHllYXIuCisgKiBAcGFyYW0gbW9udGggVGhlIGRlc2lyZWQgbW9u
dGg7IG9uZSBvZiBVQ0FMX0pBTlVBUlksIFVDQUxfRkVCUlVBUlksIFVDQUxfTUFSQ0gsIFVDQUxf
QVBSSUwsIFVDQUxfTUFZLAorICogVUNBTF9KVU5FLCBVQ0FMX0pVTFksIFVDQUxfQVVHVVNULCBV
Q0FMX1NFUFRFTUJFUiwgVUNBTF9PQ1RPQkVSLCBVQ0FMX05PVkVNQkVSLCBVQ0FMX0RFQ0VNQkVS
LCBVQ0FMX1VOREVDSU1CRVIKKyAqIEBwYXJhbSBkYXRlIFRoZSBkZXNpcmVkIGRheSBvZiB0aGUg
bW9udGguCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJl
Y2VpdmUgYW55IGVycm9ycworICogQHNlZSB1Y2FsX2dldE1pbGxpcworICogQHNlZSB1Y2FsX3Nl
dE1pbGxpcworICogQHNlZSB1Y2FsX3NldERhdGVUaW1lCisgKiBAc3RhYmxlIElDVSAyLjAKKyAq
LworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1Y2FsX3NldERhdGUoVUNhbGVuZGFyKiAgIGNh
bCwKKyAgICAgICAgICAgICBpbnQzMl90ICAgICAgeWVhciwKKyAgICAgICAgICAgICBpbnQzMl90
ICAgICAgbW9udGgsCisgICAgICAgICAgICAgaW50MzJfdCAgICAgIGRhdGUsCisgICAgICAgICAg
ICAgVUVycm9yQ29kZSogIHN0YXR1cyk7CisKKy8qKgorICogU2V0IGEgVUNhbGVuZGFyJ3MgY3Vy
cmVudCBkYXRlLgorICogVGhlIGRhdGUgaXMgcmVwcmVzZW50ZWQgYXMgYSBzZXJpZXMgb2YgMzIt
Yml0IGludGVnZXJzLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHNldC4KKyAqIEBw
YXJhbSB5ZWFyIFRoZSBkZXNpcmVkIHllYXIuCisgKiBAcGFyYW0gbW9udGggVGhlIGRlc2lyZWQg
bW9udGg7IG9uZSBvZiBVQ0FMX0pBTlVBUlksIFVDQUxfRkVCUlVBUlksIFVDQUxfTUFSQ0gsIFVD
QUxfQVBSSUwsIFVDQUxfTUFZLAorICogVUNBTF9KVU5FLCBVQ0FMX0pVTFksIFVDQUxfQVVHVVNU
LCBVQ0FMX1NFUFRFTUJFUiwgVUNBTF9PQ1RPQkVSLCBVQ0FMX05PVkVNQkVSLCBVQ0FMX0RFQ0VN
QkVSLCBVQ0FMX1VOREVDSU1CRVIKKyAqIEBwYXJhbSBkYXRlIFRoZSBkZXNpcmVkIGRheSBvZiB0
aGUgbW9udGguCisgKiBAcGFyYW0gaG91ciBUaGUgZGVzaXJlZCBob3VyIG9mIGRheS4KKyAqIEBw
YXJhbSBtaW51dGUgVGhlIGRlc2lyZWQgbWludXRlLgorICogQHBhcmFtIHNlY29uZCBUaGUgZGVz
aXJlYyBzZWNvbmQuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2Rl
IHRvIHJlY2VpdmUgYW55IGVycm9ycworICogQHNlZSB1Y2FsX2dldE1pbGxpcworICogQHNlZSB1
Y2FsX3NldE1pbGxpcworICogQHNlZSB1Y2FsX3NldERhdGUKKyAqIEBzdGFibGUgSUNVIDIuMAor
ICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfc2V0RGF0ZVRpbWUoVUNhbGVuZGFy
KiAgIGNhbCwKKyAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgIHllYXIsCisgICAgICAgICAg
ICAgICAgIGludDMyX3QgICAgICBtb250aCwKKyAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAg
IGRhdGUsCisgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICBob3VyLAorICAgICAgICAgICAg
ICAgICBpbnQzMl90ICAgICAgbWludXRlLAorICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAg
c2Vjb25kLAorICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiAgc3RhdHVzKTsKKworLyoqCisg
KiBSZXR1cm5zIFRSVUUgaWYgdHdvIFVDYWxlbmRhcnMgYXJlIGVxdWl2YWxlbnQuICBFcXVpdmFs
ZW50CisgKiBVQ2FsZW5kYXJzIHdpbGwgYmVoYXZlIGlkZW50aWNhbGx5LCBidXQgdGhleSBtYXkg
YmUgc2V0IHRvCisgKiBkaWZmZXJlbnQgdGltZXMuCisgKiBAcGFyYW0gY2FsMSBUaGUgZmlyc3Qg
b2YgdGhlIFVDYWxlbmRhcnMgdG8gY29tcGFyZS4KKyAqIEBwYXJhbSBjYWwyIFRoZSBzZWNvbmQg
b2YgdGhlIFVDYWxlbmRhcnMgdG8gY29tcGFyZS4KKyAqIEByZXR1cm4gVFJVRSBpZiBjYWwxIGFu
ZCBjYWwyIGFyZSBlcXVpdmFsZW50LCBGQUxTRSBvdGhlcndpc2UuCisgKiBAc3RhYmxlIElDVSAy
LjAKKyAqLworVV9TVEFCTEUgVUJvb2wgVV9FWFBPUlQyIAordWNhbF9lcXVpdmFsZW50VG8oY29u
c3QgVUNhbGVuZGFyKiAgY2FsMSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IFVDYWxlbmRhciog
IGNhbDIpOworCisvKioKKyAqIEFkZCBhIHNwZWNpZmllZCBzaWduZWQgYW1vdW50IHRvIGEgcGFy
dGljdWxhciBmaWVsZCBpbiBhIFVDYWxlbmRhci4KKyAqIFRoaXMgY2FuIG1vZGlmeSBtb3JlIHNp
Z25pZmljYW50IGZpZWxkcyBpbiB0aGUgY2FsZW5kYXIuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2Fs
ZW5kYXIgdG8gd2hpY2ggdG8gYWRkLgorICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZCB0byB3aGlj
aCB0byBhZGQgdGhlIHNpZ25lZCB2YWx1ZTsgb25lIG9mIFVDQUxfRVJBLCBVQ0FMX1lFQVIsIFVD
QUxfTU9OVEgsCisgKiBVQ0FMX1dFRUtfT0ZfWUVBUiwgVUNBTF9XRUVLX09GX01PTlRILCBVQ0FM
X0RBVEUsIFVDQUxfREFZX09GX1lFQVIsIFVDQUxfREFZX09GX1dFRUssCisgKiBVQ0FMX0RBWV9P
Rl9XRUVLX0lOX01PTlRILCBVQ0FMX0FNX1BNLCBVQ0FMX0hPVVIsIFVDQUxfSE9VUl9PRl9EQVks
IFVDQUxfTUlOVVRFLCBVQ0FMX1NFQ09ORCwKKyAqIFVDQUxfTUlMTElTRUNPTkQsIFVDQUxfWk9O
RV9PRkZTRVQsIFVDQUxfRFNUX09GRlNFVC4KKyAqIEBwYXJhbSBhbW91bnQgVGhlIHNpZ25lZCBh
bW91bnQgdG8gYWRkIHRvIGZpZWxkLiBJZiB0aGUgYW1vdW50IGNhdXNlcyB0aGUgdmFsdWUKKyAq
IHRvIGV4Y2VlZCB0byBtYXhpbXVtIG9yIG1pbmltdW0gdmFsdWVzIGZvciB0aGF0IGZpZWxkLCBv
dGhlciBmaWVsZHMgYXJlIG1vZGlmaWVkCisgKiB0byBwcmVzZXJ2ZSB0aGUgbWFnbml0dWRlIG9m
IHRoZSBjaGFuZ2UuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2Rl
IHRvIHJlY2VpdmUgYW55IGVycm9ycworICogQHNlZSB1Y2FsX3JvbGwKKyAqIEBzdGFibGUgSUNV
IDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfYWRkKFVDYWxlbmRhciog
ICAgICAgICAgIGNhbCwKKyAgICAgICAgIFVDYWxlbmRhckRhdGVGaWVsZHMgIGZpZWxkLAorICAg
ICAgICAgaW50MzJfdCAgICAgICAgICAgICAgYW1vdW50LAorICAgICAgICAgVUVycm9yQ29kZSog
ICAgICAgICAgc3RhdHVzKTsKKworLyoqCisgKiBBZGQgYSBzcGVjaWZpZWQgc2lnbmVkIGFtb3Vu
dCB0byBhIHBhcnRpY3VsYXIgZmllbGQgaW4gYSBVQ2FsZW5kYXIuCisgKiBUaGlzIHdpbGwgbm90
IG1vZGlmeSBtb3JlIHNpZ25pZmljYW50IGZpZWxkcyBpbiB0aGUgY2FsZW5kYXIuCisgKiBAcGFy
YW0gY2FsIFRoZSBVQ2FsZW5kYXIgdG8gd2hpY2ggdG8gYWRkLgorICogQHBhcmFtIGZpZWxkIFRo
ZSBmaWVsZCB0byB3aGljaCB0byBhZGQgdGhlIHNpZ25lZCB2YWx1ZTsgb25lIG9mIFVDQUxfRVJB
LCBVQ0FMX1lFQVIsIFVDQUxfTU9OVEgsCisgKiBVQ0FMX1dFRUtfT0ZfWUVBUiwgVUNBTF9XRUVL
X09GX01PTlRILCBVQ0FMX0RBVEUsIFVDQUxfREFZX09GX1lFQVIsIFVDQUxfREFZX09GX1dFRUss
CisgKiBVQ0FMX0RBWV9PRl9XRUVLX0lOX01PTlRILCBVQ0FMX0FNX1BNLCBVQ0FMX0hPVVIsIFVD
QUxfSE9VUl9PRl9EQVksIFVDQUxfTUlOVVRFLCBVQ0FMX1NFQ09ORCwKKyAqIFVDQUxfTUlMTElT
RUNPTkQsIFVDQUxfWk9ORV9PRkZTRVQsIFVDQUxfRFNUX09GRlNFVC4KKyAqIEBwYXJhbSBhbW91
bnQgVGhlIHNpZ25lZCBhbW91bnQgdG8gYWRkIHRvIGZpZWxkLiBJZiB0aGUgYW1vdW50IGNhdXNl
cyB0aGUgdmFsdWUKKyAqIHRvIGV4Y2VlZCB0byBtYXhpbXVtIG9yIG1pbmltdW0gdmFsdWVzIGZv
ciB0aGF0IGZpZWxkLCB0aGUgZmllbGQgaXMgcGlubmVkIHRvIGEgcGVybWlzc2libGUKKyAqIHZh
bHVlLgorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNl
aXZlIGFueSBlcnJvcnMKKyAqIEBzZWUgdWNhbF9hZGQKKyAqIEBzdGFibGUgSUNVIDIuMAorICov
CitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfcm9sbChVQ2FsZW5kYXIqICAgICAgICAg
ICBjYWwsCisgICAgICAgICAgVUNhbGVuZGFyRGF0ZUZpZWxkcyAgZmllbGQsCisgICAgICAgICAg
aW50MzJfdCAgICAgICAgICAgICAgYW1vdW50LAorICAgICAgICAgIFVFcnJvckNvZGUqICAgICAg
ICAgIHN0YXR1cyk7CisKKy8qKgorICogR2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgZmllbGQg
ZnJvbSBhIFVDYWxlbmRhci4KKyAqIEFsbCBmaWVsZHMgYXJlIHJlcHJlc2VudGVkIGFzIDMyLWJp
dCBpbnRlZ2Vycy4KKyAqIEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBxdWVyeS4KKyAqIEBw
YXJhbSBmaWVsZCBUaGUgZGVzaXJlZCBmaWVsZDsgb25lIG9mIFVDQUxfRVJBLCBVQ0FMX1lFQVIs
IFVDQUxfTU9OVEgsCisgKiBVQ0FMX1dFRUtfT0ZfWUVBUiwgVUNBTF9XRUVLX09GX01PTlRILCBV
Q0FMX0RBVEUsIFVDQUxfREFZX09GX1lFQVIsIFVDQUxfREFZX09GX1dFRUssCisgKiBVQ0FMX0RB
WV9PRl9XRUVLX0lOX01PTlRILCBVQ0FMX0FNX1BNLCBVQ0FMX0hPVVIsIFVDQUxfSE9VUl9PRl9E
QVksIFVDQUxfTUlOVVRFLCBVQ0FMX1NFQ09ORCwKKyAqIFVDQUxfTUlMTElTRUNPTkQsIFVDQUxf
Wk9ORV9PRkZTRVQsIFVDQUxfRFNUX09GRlNFVC4KKyAqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVy
IHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisgKiBAcmV0dXJuIFRoZSB2
YWx1ZSBvZiB0aGUgZGVzaXJlZCBmaWVsZC4KKyAqIEBzZWUgdWNhbF9zZXQKKyAqIEBzZWUgdWNh
bF9pc1NldAorICogQHNlZSB1Y2FsX2NsZWFyRmllbGQKKyAqIEBzZWUgdWNhbF9jbGVhcgorICog
QHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordWNhbF9n
ZXQoY29uc3QgVUNhbGVuZGFyKiAgICAgY2FsLAorICAgICAgICAgVUNhbGVuZGFyRGF0ZUZpZWxk
cyAgZmllbGQsCisgICAgICAgICBVRXJyb3JDb2RlKiAgICAgICAgICBzdGF0dXMgKTsKKworLyoq
CisgKiBTZXQgdGhlIHZhbHVlIG9mIGEgZmllbGQgaW4gYSBVQ2FsZW5kYXIuCisgKiBBbGwgZmll
bGRzIGFyZSByZXByZXNlbnRlZCBhcyAzMi1iaXQgaW50ZWdlcnMuCisgKiBAcGFyYW0gY2FsIFRo
ZSBVQ2FsZW5kYXIgdG8gc2V0LgorICogQHBhcmFtIGZpZWxkIFRoZSBmaWVsZCB0byBzZXQ7IG9u
ZSBvZiBVQ0FMX0VSQSwgVUNBTF9ZRUFSLCBVQ0FMX01PTlRILAorICogVUNBTF9XRUVLX09GX1lF
QVIsIFVDQUxfV0VFS19PRl9NT05USCwgVUNBTF9EQVRFLCBVQ0FMX0RBWV9PRl9ZRUFSLCBVQ0FM
X0RBWV9PRl9XRUVLLAorICogVUNBTF9EQVlfT0ZfV0VFS19JTl9NT05USCwgVUNBTF9BTV9QTSwg
VUNBTF9IT1VSLCBVQ0FMX0hPVVJfT0ZfREFZLCBVQ0FMX01JTlVURSwgVUNBTF9TRUNPTkQsCisg
KiBVQ0FMX01JTExJU0VDT05ELCBVQ0FMX1pPTkVfT0ZGU0VULCBVQ0FMX0RTVF9PRkZTRVQuCisg
KiBAcGFyYW0gdmFsdWUgVGhlIGRlc2lyZWQgdmFsdWUgb2YgZmllbGQuCisgKiBAc2VlIHVjYWxf
Z2V0CisgKiBAc2VlIHVjYWxfaXNTZXQKKyAqIEBzZWUgdWNhbF9jbGVhckZpZWxkCisgKiBAc2Vl
IHVjYWxfY2xlYXIKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQ
T1JUMiAKK3VjYWxfc2V0KFVDYWxlbmRhciogICAgICAgICAgIGNhbCwKKyAgICAgICAgIFVDYWxl
bmRhckRhdGVGaWVsZHMgIGZpZWxkLAorICAgICAgICAgaW50MzJfdCAgICAgICAgICAgICAgdmFs
dWUpOworCisvKioKKyAqIERldGVybWluZSBpZiBhIGZpZWxkIGluIGEgVUNhbGVuZGFyIGlzIHNl
dC4KKyAqIEFsbCBmaWVsZHMgYXJlIHJlcHJlc2VudGVkIGFzIDMyLWJpdCBpbnRlZ2Vycy4KKyAq
IEBwYXJhbSBjYWwgVGhlIFVDYWxlbmRhciB0byBxdWVyeS4KKyAqIEBwYXJhbSBmaWVsZCBUaGUg
ZGVzaXJlZCBmaWVsZDsgb25lIG9mIFVDQUxfRVJBLCBVQ0FMX1lFQVIsIFVDQUxfTU9OVEgsCisg
KiBVQ0FMX1dFRUtfT0ZfWUVBUiwgVUNBTF9XRUVLX09GX01PTlRILCBVQ0FMX0RBVEUsIFVDQUxf
REFZX09GX1lFQVIsIFVDQUxfREFZX09GX1dFRUssCisgKiBVQ0FMX0RBWV9PRl9XRUVLX0lOX01P
TlRILCBVQ0FMX0FNX1BNLCBVQ0FMX0hPVVIsIFVDQUxfSE9VUl9PRl9EQVksIFVDQUxfTUlOVVRF
LCBVQ0FMX1NFQ09ORCwKKyAqIFVDQUxfTUlMTElTRUNPTkQsIFVDQUxfWk9ORV9PRkZTRVQsIFVD
QUxfRFNUX09GRlNFVC4KKyAqIEByZXR1cm4gVFJVRSBpZiBmaWVsZCBpcyBzZXQsIEZBTFNFIG90
aGVyd2lzZS4KKyAqIEBzZWUgdWNhbF9nZXQKKyAqIEBzZWUgdWNhbF9zZXQKKyAqIEBzZWUgdWNh
bF9jbGVhckZpZWxkCisgKiBAc2VlIHVjYWxfY2xlYXIKKyAqIEBzdGFibGUgSUNVIDIuMAorICov
CitVX1NUQUJMRSBVQm9vbCBVX0VYUE9SVDIgCit1Y2FsX2lzU2V0KGNvbnN0IFVDYWxlbmRhciog
ICAgIGNhbCwKKyAgICAgICAgICAgVUNhbGVuZGFyRGF0ZUZpZWxkcyAgZmllbGQpOworCisvKioK
KyAqIENsZWFyIGEgZmllbGQgaW4gYSBVQ2FsZW5kYXIuCisgKiBBbGwgZmllbGRzIGFyZSByZXBy
ZXNlbnRlZCBhcyAzMi1iaXQgaW50ZWdlcnMuCisgKiBAcGFyYW0gY2FsIFRoZSBVQ2FsZW5kYXIg
Y29udGFpbmluZyB0aGUgZmllbGQgdG8gY2xlYXIuCisgKiBAcGFyYW0gZmllbGQgVGhlIGZpZWxk
IHRvIGNsZWFyOyBvbmUgb2YgVUNBTF9FUkEsIFVDQUxfWUVBUiwgVUNBTF9NT05USCwKKyAqIFVD
QUxfV0VFS19PRl9ZRUFSLCBVQ0FMX1dFRUtfT0ZfTU9OVEgsIFVDQUxfREFURSwgVUNBTF9EQVlf
T0ZfWUVBUiwgVUNBTF9EQVlfT0ZfV0VFSywKKyAqIFVDQUxfREFZX09GX1dFRUtfSU5fTU9OVEgs
IFVDQUxfQU1fUE0sIFVDQUxfSE9VUiwgVUNBTF9IT1VSX09GX0RBWSwgVUNBTF9NSU5VVEUsIFVD
QUxfU0VDT05ELAorICogVUNBTF9NSUxMSVNFQ09ORCwgVUNBTF9aT05FX09GRlNFVCwgVUNBTF9E
U1RfT0ZGU0VULgorICogQHNlZSB1Y2FsX2dldAorICogQHNlZSB1Y2FsX3NldAorICogQHNlZSB1
Y2FsX2lzU2V0CisgKiBAc2VlIHVjYWxfY2xlYXIKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitV
X1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfY2xlYXJGaWVsZChVQ2FsZW5kYXIqICAgICAg
ICAgICBjYWwsCisgICAgICAgICAgICAgICAgVUNhbGVuZGFyRGF0ZUZpZWxkcyAgZmllbGQpOwor
CisvKioKKyAqIENsZWFyIGFsbCBmaWVsZHMgaW4gYSBVQ2FsZW5kYXIuCisgKiBBbGwgZmllbGRz
IGFyZSByZXByZXNlbnRlZCBhcyAzMi1iaXQgaW50ZWdlcnMuCisgKiBAcGFyYW0gY2FsZW5kYXIg
VGhlIFVDYWxlbmRhciB0byBjbGVhci4KKyAqIEBzZWUgdWNhbF9nZXQKKyAqIEBzZWUgdWNhbF9z
ZXQKKyAqIEBzZWUgdWNhbF9pc1NldAorICogQHNlZSB1Y2FsX2NsZWFyRmllbGQKKyAqIEBzdGFi
bGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjYWxfY2xlYXIoVUNh
bGVuZGFyKiBjYWxlbmRhcik7CisKKy8qKgorICogUG9zc2libGUgbGltaXQgdmFsdWVzIGZvciBh
IFVDYWxlbmRhciAKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitlbnVtIFVDYWxlbmRhckxpbWl0
VHlwZSB7CisgIC8qKiBNaW5pbXVtIHZhbHVlICovCisgIFVDQUxfTUlOSU1VTSwKKyAgLyoqIE1h
eGltdW0gdmFsdWUgKi8KKyAgVUNBTF9NQVhJTVVNLAorICAvKiogR3JlYXRlc3QgbWluaW11bSB2
YWx1ZSAqLworICBVQ0FMX0dSRUFURVNUX01JTklNVU0sCisgIC8qKiBMZWFlc3QgbWF4aW11bSB2
YWx1ZSAqLworICBVQ0FMX0xFQVNUX01BWElNVU0sCisgIC8qKiBBY3R1YWwgbWluaW11bSB2YWx1
ZSAqLworICBVQ0FMX0FDVFVBTF9NSU5JTVVNLAorICAvKiogQWN0dWFsIG1heGltdW0gdmFsdWUg
Ki8KKyAgVUNBTF9BQ1RVQUxfTUFYSU1VTQorfTsKKworLyoqIEBzdGFibGUgSUNVIDIuMCAqLwor
dHlwZWRlZiBlbnVtIFVDYWxlbmRhckxpbWl0VHlwZSBVQ2FsZW5kYXJMaW1pdFR5cGU7CisKKy8q
KgorICogRGV0ZXJtaW5lIGEgbGltaXQgZm9yIGEgZmllbGQgaW4gYSBVQ2FsZW5kYXIuCisgKiBB
IGxpbWl0IGlzIGEgbWF4aW11bSBvciBtaW5pbXVtIHZhbHVlIGZvciBhIGZpZWxkLgorICogQHBh
cmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIGZpZWxkIFRoZSBkZXNp
cmVkIGZpZWxkOyBvbmUgb2YgVUNBTF9FUkEsIFVDQUxfWUVBUiwgVUNBTF9NT05USCwKKyAqIFVD
QUxfV0VFS19PRl9ZRUFSLCBVQ0FMX1dFRUtfT0ZfTU9OVEgsIFVDQUxfREFURSwgVUNBTF9EQVlf
T0ZfWUVBUiwgVUNBTF9EQVlfT0ZfV0VFSywKKyAqIFVDQUxfREFZX09GX1dFRUtfSU5fTU9OVEgs
IFVDQUxfQU1fUE0sIFVDQUxfSE9VUiwgVUNBTF9IT1VSX09GX0RBWSwgVUNBTF9NSU5VVEUsIFVD
QUxfU0VDT05ELAorICogVUNBTF9NSUxMSVNFQ09ORCwgVUNBTF9aT05FX09GRlNFVCwgVUNBTF9E
U1RfT0ZGU0VULgorICogQHBhcmFtIHR5cGUgVGhlIGRlc2lyZWQgY3JpdGljYWwgcG9pbnQ7IG9u
ZSBvZiBVQ0FMX01JTklNVU0sIFVDQUxfTUFYSU1VTSwgVUNBTF9HUkVBVEVTVF9NSU5JTVVNLAor
ICogVUNBTF9MRUFTVF9NQVhJTVVNLCBVQ0FMX0FDVFVBTF9NSU5JTVVNLCBVQ0FMX0FDVFVBTF9N
QVhJTVVNCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJl
Y2VpdmUgYW55IGVycm9ycy4KKyAqIEByZXR1cm4gVGhlIHJlcXVlc3RlZCB2YWx1ZS4KKyAqIEBz
dGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VjYWxfZ2V0
TGltaXQoY29uc3QgVUNhbGVuZGFyKiAgICAgY2FsLAorICAgICAgICAgICAgICBVQ2FsZW5kYXJE
YXRlRmllbGRzICBmaWVsZCwKKyAgICAgICAgICAgICAgVUNhbGVuZGFyTGltaXRUeXBlICAgdHlw
ZSwKKyAgICAgICAgICAgICAgVUVycm9yQ29kZSogICAgICAgICAgc3RhdHVzKTsKKworLyoqIEdl
dCB0aGUgbG9jYWxlIGZvciB0aGlzIGNhbGVuZGFyIG9iamVjdC4gWW91IGNhbiBjaG9vc2UgYmV0
d2VlbiB2YWxpZCBhbmQgYWN0dWFsIGxvY2FsZS4KKyAqICBAcGFyYW0gY2FsIFRoZSBjYWxlbmRh
ciBvYmplY3QKKyAqICBAcGFyYW0gdHlwZSB0eXBlIG9mIHRoZSBsb2NhbGUgd2UncmUgbG9va2lu
ZyBmb3IgKHZhbGlkIG9yIGFjdHVhbCkgCisgKiAgQHBhcmFtIHN0YXR1cyBlcnJvciBjb2RlIGZv
ciB0aGUgb3BlcmF0aW9uCisgKiAgQHJldHVybiB0aGUgbG9jYWxlIG5hbWUKKyAqICBAc3RhYmxl
IElDVSAyLjgKKyAqLworVV9TVEFCTEUgY29uc3QgY2hhciAqIFVfRVhQT1JUMgordWNhbF9nZXRM
b2NhbGVCeVR5cGUoY29uc3QgVUNhbGVuZGFyICpjYWwsIFVMb2NEYXRhTG9jYWxlVHlwZSB0eXBl
LCBVRXJyb3JDb2RlKiBzdGF0dXMpOworCisvKioKKyAqIFJldHVybnMgdGhlIHRpbWV6b25lIGRh
dGEgdmVyc2lvbiBjdXJyZW50bHkgdXNlZCBieSBJQ1UuCisgKiBAcGFyYW0gc3RhdHVzIGVycm9y
IGNvZGUgZm9yIHRoZSBvcGVyYXRpb24KKyAqIEByZXR1cm4gdGhlIHZlcnNpb24gc3RyaW5nLCBz
dWNoIGFzICIyMDA3ZiIKKyAqIEBzdGFibGUgSUNVIDMuOAorICovCitVX1NUQUJMRSBjb25zdCBj
aGFyICogVV9FWFBPUlQyCit1Y2FsX2dldFRaRGF0YVZlcnNpb24oVUVycm9yQ29kZSogc3RhdHVz
KTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBjYW5vbmljYWwgc3lzdGVtIHRpbWV6b25lIElEIG9y
IHRoZSBub3JtYWxpemVkCisgKiBjdXN0b20gdGltZSB6b25lIElEIGZvciB0aGUgZ2l2ZW4gdGlt
ZSB6b25lIElELgorICogQHBhcmFtIGlkICAgICAgICBUaGUgaW5wdXQgdGltZXpvbmUgSUQgdG8g
YmUgY2Fub25pY2FsaXplZC4KKyAqIEBwYXJhbSBsZW4gICAgICAgVGhlIGxlbmd0aCBvZiBpZCwg
b3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorICogQHBhcmFtIHJlc3VsdCAgICBUaGUgYnVmZmVy
IHJlY2VpdmVzIHRoZSBjYW5vbmljYWwgc3lzdGVtIHRpbWV6b25lIElECisgKiAgICAgICAgICAg
ICAgICAgIG9yIHRoZSBjdXN0b20gdGltZXpvbmUgSUQgaW4gbm9ybWFsaXplZCBmb3JtYXQuCisg
KiBAcGFyYW0gcmVzdWx0Q2FwYWNpdHkgICAgVGhlIGNhcGFjaXR5IG9mIHRoZSByZXN1bHQgYnVm
ZmVyLgorICogQHBhcmFtIGlzU3lzdGVtSUQgICAgICAgIFJlY2VpdmVzIGlmIHRoZSBnaXZlbiBJ
RCBpcyBhIGtub3duIHN5c3RlbQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIHRpbWV6b25l
IElELgorICogQHBhcmFtIHN0YXR1cyAgICBSZWNldmllcyB0aGUgc3RhdHVzLiAgV2hlbiB0aGUg
Z2l2ZW4gdGltZXpvbmUgSUQKKyAqICAgICAgICAgICAgICAgICAgaXMgbmVpdGhlciBhIGtub3du
IHN5c3RlbSB0aW1lIHpvbmUgSUQgbm9yIGEKKyAqICAgICAgICAgICAgICAgICAgdmFsaWQgY3Vz
dG9tIHRpbWV6b25lIElELCBVX0lMTEVHQUxfQVJHVU1FTlRfRVJST1IKKyAqICAgICAgICAgICAg
ICAgICAgaXMgc2V0LgorICogQHJldHVybiAgICAgICAgICBUaGUgcmVzdWx0IHN0cmluZyBsZW5n
dGgsIG5vdCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nCisgKiAgICAgICAgICAgICAgICAgIG51
bGwuCisgKiBAc3RhYmxlIElDVSA0LjAKKyAqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIK
K3VjYWxfZ2V0Q2Fub25pY2FsVGltZVpvbmVJRChjb25zdCBVQ2hhciogaWQsIGludDMyX3QgbGVu
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyKiByZXN1bHQsIGludDMyX3QgcmVz
dWx0Q2FwYWNpdHksIFVCb29sICppc1N5c3RlbUlELCBVRXJyb3JDb2RlKiBzdGF0dXMpOworLyoq
CisgKiBHZXQgdGhlIHJlc291cmNlIGtleXdvcmQgdmFsdWUgc3RyaW5nIGRlc2lnbmF0aW5nIHRo
ZSBjYWxlbmRhciB0eXBlIGZvciB0aGUgVUNhbGVuZGFyLgorICogQHBhcmFtIGNhbCBUaGUgVUNh
bGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIHN0YXR1cyBUaGUgZXJyb3IgY29kZSBmb3IgdGhl
IG9wZXJhdGlvbi4KKyAqIEByZXR1cm4gVGhlIHJlc291cmNlIGtleXdvcmQgdmFsdWUgc3RyaW5n
LgorICogQHN0YWJsZSBJQ1UgNC4yCisgKi8KK1VfU1RBQkxFIGNvbnN0IGNoYXIgKiBVX0VYUE9S
VDIKK3VjYWxfZ2V0VHlwZShjb25zdCBVQ2FsZW5kYXIgKmNhbCwgVUVycm9yQ29kZSogc3RhdHVz
KTsKKworLyoqCisgKiBHaXZlbiBhIGtleSBhbmQgYSBsb2NhbGUsIHJldHVybnMgYW4gYXJyYXkg
b2Ygc3RyaW5nIHZhbHVlcyBpbiBhIHByZWZlcnJlZAorICogb3JkZXIgdGhhdCB3b3VsZCBtYWtl
IGEgZGlmZmVyZW5jZS4gVGhlc2UgYXJlIGFsbCBhbmQgb25seSB0aG9zZSB2YWx1ZXMgd2hlcmUK
KyAqIHRoZSBvcGVuIChjcmVhdGlvbikgb2YgdGhlIHNlcnZpY2Ugd2l0aCB0aGUgbG9jYWxlIGZv
cm1lZCBmcm9tIHRoZSBpbnB1dCBsb2NhbGUKKyAqIHBsdXMgaW5wdXQga2V5d29yZCBhbmQgdGhh
dCB2YWx1ZSBoYXMgZGlmZmVyZW50IGJlaGF2aW9yIHRoYW4gY3JlYXRpb24gd2l0aCB0aGUKKyAq
IGlucHV0IGxvY2FsZSBhbG9uZS4KKyAqIEBwYXJhbSBrZXkgICAgICAgICAgIG9uZSBvZiB0aGUg
a2V5cyBzdXBwb3J0ZWQgYnkgdGhpcyBzZXJ2aWNlLiAgRm9yIG5vdywgb25seQorICogICAgICAg
ICAgICAgICAgICAgICAgImNhbGVuZGFyIiBpcyBzdXBwb3J0ZWQuCisgKiBAcGFyYW0gbG9jYWxl
ICAgICAgICB0aGUgbG9jYWxlCisgKiBAcGFyYW0gY29tbW9ubHlVc2VkICBpZiBzZXQgdG8gdHJ1
ZSBpdCB3aWxsIHJldHVybiBvbmx5IGNvbW1vbmx5IHVzZWQgdmFsdWVzCisgKiAgICAgICAgICAg
ICAgICAgICAgICB3aXRoIHRoZSBnaXZlbiBsb2NhbGUgaW4gcHJlZmVycmVkIG9yZGVyLiAgT3Ro
ZXJ3aXNlLAorICogICAgICAgICAgICAgICAgICAgICAgaXQgd2lsbCByZXR1cm4gYWxsIHRoZSBh
dmFpbGFibGUgdmFsdWVzIGZvciB0aGUgbG9jYWxlLgorICogQHBhcmFtIHN0YXR1cyBlcnJvciBz
dGF0dXMKKyAqIEByZXR1cm4gYSBzdHJpbmcgZW51bWVyYXRpb24gb3ZlciBrZXl3b3JkIHZhbHVl
cyBmb3IgdGhlIGdpdmVuIGtleSBhbmQgdGhlIGxvY2FsZS4KKyAqIEBzdGFibGUgSUNVIDQuMgor
ICovCitVX1NUQUJMRSBVRW51bWVyYXRpb24qIFVfRVhQT1JUMgordWNhbF9nZXRLZXl3b3JkVmFs
dWVzRm9yTG9jYWxlKGNvbnN0IGNoYXIqIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiBsb2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VUJvb2wgY29tbW9ubHlVc2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJv
ckNvZGUqIHN0YXR1cyk7CisKKworLyoqIFdlZWtkYXkgdHlwZXMsIGFzIHJldHVybmVkIGJ5IHVj
YWxfZ2V0RGF5T2ZXZWVrVHlwZSgpLgorICogQHN0YWJsZSBJQ1UgNC40CisgKi8KK2VudW0gVUNh
bGVuZGFyV2Vla2RheVR5cGUgeworICAvKioKKyAgICogRGVzaWduYXRlcyBhIGZ1bGwgd2Vla2Rh
eSAobm8gcGFydCBvZiB0aGUgZGF5IGlzIGluY2x1ZGVkIGluIHRoZSB3ZWVrZW5kKS4KKyAgICog
QHN0YWJsZSBJQ1UgNC40IAorICAgKi8KKyAgVUNBTF9XRUVLREFZLAorICAvKioKKyAgICogRGVz
aWduYXRlcyBhIGZ1bGwgd2Vla2VuZCBkYXkgKHRoZSBlbnRpcmUgZGF5IGlzIGluY2x1ZGVkIGlu
IHRoZSB3ZWVrZW5kKS4KKyAgICogQHN0YWJsZSBJQ1UgNC40IAorICAgKi8KKyAgVUNBTF9XRUVL
RU5ELAorICAvKioKKyAgICogRGVzaWduYXRlcyBhIGRheSB0aGF0IHN0YXJ0cyBhcyBhIHdlZWtk
YXkgYW5kIHRyYW5zaXRpb25zIHRvIHRoZSB3ZWVrZW5kLgorICAgKiBDYWxsIHVjYWxfZ2V0V2Vl
a2VuZFRyYW5zaXRpb24oKSB0byBnZXQgdGhlIHRpbWUgb2YgdHJhbnNpdGlvbi4KKyAgICogQHN0
YWJsZSBJQ1UgNC40IAorICAgKi8KKyAgVUNBTF9XRUVLRU5EX09OU0VULAorICAvKioKKyAgICog
RGVzaWduYXRlcyBhIGRheSB0aGF0IHN0YXJ0cyBhcyB0aGUgd2Vla2VuZCBhbmQgdHJhbnNpdGlv
bnMgdG8gYSB3ZWVrZGF5LgorICAgKiBDYWxsIHVjYWxfZ2V0V2Vla2VuZFRyYW5zaXRpb24oKSB0
byBnZXQgdGhlIHRpbWUgb2YgdHJhbnNpdGlvbi4KKyAgICogQHN0YWJsZSBJQ1UgNC40IAorICAg
Ki8KKyAgVUNBTF9XRUVLRU5EX0NFQVNFCit9OworCisvKiogQHN0YWJsZSBJQ1UgNC40ICovCit0
eXBlZGVmIGVudW0gVUNhbGVuZGFyV2Vla2RheVR5cGUgVUNhbGVuZGFyV2Vla2RheVR5cGU7CisK
Ky8qKgorICogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBkYXkgb2YgdGhlIHdlZWsgaXMgYSB3
ZWVrZGF5LCBhCisgKiB3ZWVrZW5kIGRheSwgb3IgYSBkYXkgdGhhdCB0cmFuc2l0aW9ucyBmcm9t
IG9uZSB0byB0aGUgb3RoZXIsCisgKiBpbiB0aGlzIGNhbGVuZGFyIHN5c3RlbS4gSWYgYSB0cmFu
c2l0aW9uIG9jY3VycyBhdCBtaWRuaWdodCwKKyAqIHRoZW4gdGhlIGRheXMgYmVmb3JlIGFuZCBh
ZnRlciB0aGUgdHJhbnNpdGlvbiB3aWxsIGhhdmUgdGhlCisgKiB0eXBlIFVDQUxfV0VFS0RBWSBv
ciBVQ0FMX1dFRUtFTkQuIElmIGEgdHJhbnNpdGlvbiBvY2N1cnMgYXQgYSB0aW1lCisgKiBvdGhl
ciB0aGFuIG1pZG5pZ2h0LCB0aGVuIHRoZSBkYXkgb2YgdGhlIHRyYW5zaXRpb24gd2lsbCBoYXZl
CisgKiB0aGUgdHlwZSBVQ0FMX1dFRUtFTkRfT05TRVQgb3IgVUNBTF9XRUVLRU5EX0NFQVNFLiBJ
biB0aGlzIGNhc2UsIHRoZQorICogbWV0aG9kIGdldFdlZWtlbmRUcmFuc2l0aW9uKCkgd2lsbCBy
ZXR1cm4gdGhlIHBvaW50IG9mCisgKiB0cmFuc2l0aW9uLgorICogQHBhcmFtIGNhbCBUaGUgVUNh
bGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIGRheU9mV2VlayBUaGUgZGF5IG9mIHRoZSB3ZWVr
IHdob3NlIHR5cGUgaXMgZGVzaXJlZCAoVUNBTF9TVU5EQVkuLlVDQUxfU0FUVVJEQVkpLgorICog
QHBhcmFtIHN0YXR1cyBUaGUgZXJyb3IgY29kZSBmb3IgdGhlIG9wZXJhdGlvbi4KKyAqIEByZXR1
cm4gVGhlIFVDYWxlbmRhcldlZWtkYXlUeXBlIGZvciB0aGUgZGF5IG9mIHRoZSB3ZWVrLgorICog
QHN0YWJsZSBJQ1UgNC40CisgKi8KK1VfU1RBQkxFIFVDYWxlbmRhcldlZWtkYXlUeXBlIFVfRVhQ
T1JUMgordWNhbF9nZXREYXlPZldlZWtUeXBlKGNvbnN0IFVDYWxlbmRhciAqY2FsLCBVQ2FsZW5k
YXJEYXlzT2ZXZWVrIGRheU9mV2VlaywgVUVycm9yQ29kZSogc3RhdHVzKTsKKworLyoqCisgKiBS
ZXR1cm5zIHRoZSB0aW1lIGR1cmluZyB0aGUgZGF5IGF0IHdoaWNoIHRoZSB3ZWVrZW5kIGJlZ2lu
cyBvciBlbmRzIGluCisgKiB0aGlzIGNhbGVuZGFyIHN5c3RlbS4gIElmIHVjYWxfZ2V0RGF5T2ZX
ZWVrVHlwZSgpIHJlcnR1cm5zIFVDQUxfV0VFS0VORF9PTlNFVAorICogZm9yIHRoZSBzcGVjaWZp
ZWQgZGF5T2ZXZWVrLCByZXR1cm4gdGhlIHRpbWUgYXQgd2hpY2ggdGhlIHdlZWtlbmQgYmVnaW5z
LgorICogSWYgdWNhbF9nZXREYXlPZldlZWtUeXBlKCkgcmV0dXJucyBVQ0FMX1dFRUtFTkRfQ0VB
U0UgZm9yIHRoZSBzcGVjaWZpZWQgZGF5T2ZXZWVrLAorICogcmV0dXJuIHRoZSB0aW1lIGF0IHdo
aWNoIHRoZSB3ZWVrZW5kIGVuZHMuIElmIHVjYWxfZ2V0RGF5T2ZXZWVrVHlwZSgpIHJldHVybnMK
KyAqIHNvbWUgb3RoZXIgVUNhbGVuZGFyV2Vla2RheVR5cGUgZm9yIHRoZSBzcGVjaWZpZWQgZGF5
T2ZXZWVrLCBpcyBpdCBhbiBlcnJvciBjb25kaXRpb24KKyAqIChVX0lMTEVHQUxfQVJHVU1FTlRf
RVJST1IpLgorICogQHBhcmFtIGNhbCBUaGUgVUNhbGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFt
IGRheU9mV2VlayBUaGUgZGF5IG9mIHRoZSB3ZWVrIGZvciB3aGljaCB0aGUgd2Vla2VuZCB0cmFu
c2l0aW9uIHRpbWUgaXMKKyAqIGRlc2lyZWQgKFVDQUxfU1VOREFZLi5VQ0FMX1NBVFVSREFZKS4K
KyAqIEBwYXJhbSBzdGF0dXMgVGhlIGVycm9yIGNvZGUgZm9yIHRoZSBvcGVyYXRpb24uCisgKiBA
cmV0dXJuIFRoZSBtaWxsaXNlY29uZHMgYWZ0ZXIgbWlkbmlnaHQgYXQgd2hpY2ggdGhlIHdlZWtl
bmQgYmVnaW5zIG9yIGVuZHMuCisgKiBAc3RhYmxlIElDVSA0LjQKKyAqLworVV9TVEFCTEUgaW50
MzJfdCBVX0VYUE9SVDIKK3VjYWxfZ2V0V2Vla2VuZFRyYW5zaXRpb24oY29uc3QgVUNhbGVuZGFy
ICpjYWwsIFVDYWxlbmRhckRheXNPZldlZWsgZGF5T2ZXZWVrLCBVRXJyb3JDb2RlICpzdGF0dXMp
OworCisvKioKKyAqIFJldHVybnMgVFJVRSBpZiB0aGUgZ2l2ZW4gVURhdGUgaXMgaW4gdGhlIHdl
ZWtlbmQgaW4KKyAqIHRoaXMgY2FsZW5kYXIgc3lzdGVtLgorICogQHBhcmFtIGNhbCBUaGUgVUNh
bGVuZGFyIHRvIHF1ZXJ5LgorICogQHBhcmFtIGRhdGUgVGhlIFVEYXRlIGluIHF1ZXN0aW9uLgor
ICogQHBhcmFtIHN0YXR1cyBUaGUgZXJyb3IgY29kZSBmb3IgdGhlIG9wZXJhdGlvbi4KKyAqIEBy
ZXR1cm4gVFJVRSBpZiB0aGUgZ2l2ZW4gVURhdGUgaXMgaW4gdGhlIHdlZWtlbmQgaW4KKyAqIHRo
aXMgY2FsZW5kYXIgc3lzdGVtLCBGQUxTRSBvdGhlcndpc2UuCisgKiBAc3RhYmxlIElDVSA0LjQK
KyAqLworVV9TVEFCTEUgVUJvb2wgVV9FWFBPUlQyCit1Y2FsX2lzV2Vla2VuZChjb25zdCBVQ2Fs
ZW5kYXIgKmNhbCwgVURhdGUgZGF0ZSwgVUVycm9yQ29kZSAqc3RhdHVzKTsKKworCisjZW5kaWYg
LyogI2lmICFVQ09ORklHX05PX0ZPUk1BVFRJTkcgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdWRhdC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ljdS91bmljb2RlL3VkYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDgwYzdkYTUxNDc1YjM5M2Nl
MGQzYzliNzIyY2M2ZGM0ZDNkMGJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ljdS91bmljb2RlL3VkYXQuaApAQCAtMCwwICsxLDk5NyBAQAorLyoKKyAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMCwgSW50ZXJuYXRpb25h
bCBCdXNpbmVzcyBNYWNoaW5lcworICogQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaWZuZGVmIFVEQVRf
SAorI2RlZmluZSBVREFUX0gKKworI2luY2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCisKKyNpZiAh
VUNPTkZJR19OT19GT1JNQVRUSU5HCisKKyNpbmNsdWRlICJ1bmljb2RlL2xvY2FscG9pbnRlci5o
IgorI2luY2x1ZGUgInVuaWNvZGUvdWNhbC5oIgorI2luY2x1ZGUgInVuaWNvZGUvdW51bS5oIgor
LyoqCisgKiBcZmlsZQorICogXGJyaWVmIEMgQVBJOiBEYXRlRm9ybWF0CisgKgorICogPGgyPiBE
YXRlIEZvcm1hdCBDIEFQSTwvaDI+CisgKgorICogRGF0ZSBGb3JtYXQgQyBBUEkgIGNvbnNpc3Rz
IG9mIGZ1bmN0aW9ucyB0aGF0IGNvbnZlcnQgZGF0ZXMgYW5kCisgKiB0aW1lcyBmcm9tIHRoZWly
IGludGVybmFsIHJlcHJlc2VudGF0aW9ucyB0byB0ZXh0dWFsIGZvcm0gYW5kIGJhY2sgYWdhaW4g
aW4gYQorICogbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgbWFubmVyLiBDb252ZXJ0aW5nIGZyb20gdGhl
IGludGVybmFsIHJlcHJlc2VudGF0aW9uIChtaWxsaXNlY29uZHMKKyAqIHNpbmNlIG1pZG5pZ2h0
LCBKYW51YXJ5IDEsIDE5NzApIHRvIHRleHQgaXMga25vd24gYXMgImZvcm1hdHRpbmcsIiBhbmQg
Y29udmVydGluZworICogZnJvbSB0ZXh0IHRvIG1pbGxpcyBpcyBrbm93biBhcyAicGFyc2luZy4i
ICBXZSBjdXJyZW50bHkgZGVmaW5lIG9ubHkgb25lIGNvbmNyZXRlCisgKiBzdHJ1Y3R1cmUgVURh
dGVGb3JtYXQsIHdoaWNoIGNhbiBoYW5kbGUgcHJldHR5IG11Y2ggYWxsIG5vcm1hbAorICogZGF0
ZSBmb3JtYXR0aW5nIGFuZCBwYXJzaW5nIGFjdGlvbnMuCisgKiA8UD4KKyAqIERhdGUgRm9ybWF0
IGhlbHBzIHlvdSB0byBmb3JtYXQgYW5kIHBhcnNlIGRhdGVzIGZvciBhbnkgbG9jYWxlLiBZb3Vy
IGNvZGUgY2FuCisgKiBiZSBjb21wbGV0ZWx5IGluZGVwZW5kZW50IG9mIHRoZSBsb2NhbGUgY29u
dmVudGlvbnMgZm9yIG1vbnRocywgZGF5cyBvZiB0aGUKKyAqIHdlZWssIG9yIGV2ZW4gdGhlIGNh
bGVuZGFyIGZvcm1hdDogbHVuYXIgdnMuIHNvbGFyLgorICogPFA+CisgKiBUbyBmb3JtYXQgYSBk
YXRlIGZvciB0aGUgY3VycmVudCBMb2NhbGUgd2l0aCBkZWZhdWx0IHRpbWUgYW5kIGRhdGUgc3R5
bGUsCisgKiB1c2Ugb25lIG9mIHRoZSBzdGF0aWMgZmFjdG9yeSBtZXRob2RzOgorICogPHByZT4K
KyAqIFxjb2RlCisgKiAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgKiAgVUNo
YXIgKm15U3RyaW5nOworICogIGludDMyX3QgbXlTdHJsZW4gPSAwOworICogIFVEYXRlRm9ybWF0
KiBkZm10ID0gdWRhdF9vcGVuKFVEQVRfREVGQVVMVCwgVURBVF9ERUZBVUxULCBOVUxMLCBOVUxM
LCAtMSwgTlVMTCwgLTEsICZzdGF0dXMpOworICogIG15U3RybGVuID0gdWRhdF9mb3JtYXQoZGZt
dCwgbXlEYXRlLCBOVUxMLCBteVN0cmxlbiwgTlVMTCwgJnN0YXR1cyk7CisgKiAgaWYgKHN0YXR1
cz09VV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpeworICogICAgICBzdGF0dXM9VV9aRVJPX0VSUk9S
OworICogICAgICBteVN0cmluZz0oVUNoYXIqKW1hbGxvYyhzaXplb2YoVUNoYXIpICogKG15U3Ry
bGVuKzEpICk7CisgKiAgICAgIHVkYXRfZm9ybWF0KGRmbXQsIG15RGF0ZSwgbXlTdHJpbmcsIG15
U3RybGVuKzEsIE5VTEwsICZzdGF0dXMpOworICogIH0KKyAqIFxlbmRjb2RlCisgKiA8L3ByZT4K
KyAqIElmIHlvdSBhcmUgZm9ybWF0dGluZyBtdWx0aXBsZSBudW1iZXJzLCBpdCBpcyBtb3JlIGVm
ZmljaWVudCB0byBnZXQgdGhlCisgKiBmb3JtYXQgYW5kIHVzZSBpdCBtdWx0aXBsZSB0aW1lcyBz
byB0aGF0IHRoZSBzeXN0ZW0gZG9lc24ndCBoYXZlIHRvIGZldGNoIHRoZQorICogaW5mb3JtYXRp
b24gYWJvdXQgdGhlIGxvY2FsIGxhbmd1YWdlIGFuZCBjb3VudHJ5IGNvbnZlbnRpb25zIG11bHRp
cGxlIHRpbWVzLgorICogPHByZT4KKyAqIFxjb2RlCisgKiAgVUVycm9yQ29kZSBzdGF0dXMgPSBV
X1pFUk9fRVJST1I7CisgKiAgaW50MzJfdCBpLCBteVN0cmxlbiA9IDA7CisgKiAgVUNoYXIqIG15
U3RyaW5nOworICogIGNoYXIgYnVmZmVyWzEwMjRdOworICogIFVEYXRlIG15RGF0ZUFycltdID0g
eyAwLjAsIDEwMDAwMDAwMC4wLCAyMDAwMDAwMDAwLjAgfTsgLy8gdGVzdCB2YWx1ZXMKKyAqICBV
RGF0ZUZvcm1hdCogZGYgPSB1ZGF0X29wZW4oVURBVF9ERUZBVUxULCBVREFUX0RFRkFVTFQsIE5V
TEwsIE5VTEwsIC0xLCBOVUxMLCAwLCAmc3RhdHVzKTsKKyAqICBmb3IgKGkgPSAwOyBpIDwgMzsg
aSsrKSB7CisgKiAgICAgIG15U3RybGVuID0gdWRhdF9mb3JtYXQoZGYsIG15RGF0ZUFycltpXSwg
TlVMTCwgbXlTdHJsZW4sIE5VTEwsICZzdGF0dXMpOworICogICAgICBpZihzdGF0dXMgPT0gVV9C
VUZGRVJfT1ZFUkZMT1dfRVJST1IpeworICogICAgICAgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9S
OworICogICAgICAgICAgbXlTdHJpbmcgPSAoVUNoYXIqKW1hbGxvYyhzaXplb2YoVUNoYXIpICog
KG15U3RybGVuKzEpICk7CisgKiAgICAgICAgICB1ZGF0X2Zvcm1hdChkZiwgbXlEYXRlQXJyW2ld
LCBteVN0cmluZywgbXlTdHJsZW4rMSwgTlVMTCwgJnN0YXR1cyk7CisgKiAgICAgICAgICBwcmlu
dGYoIiVzXG4iLCB1X2F1c3RyY3B5KGJ1ZmZlciwgbXlTdHJpbmcpICk7CisgKiAgICAgICAgICBm
cmVlKG15U3RyaW5nKTsKKyAqICAgICAgfQorICogIH0KKyAqIFxlbmRjb2RlCisgKiA8L3ByZT4K
KyAqIFRvIGdldCBzcGVjaWZpYyBmaWVsZHMgb2YgYSBkYXRlLCB5b3UgY2FuIHVzZSBVRmllbGRQ
b3NpdGlvbiB0bworICogZ2V0IHNwZWNpZmljIGZpZWxkcy4KKyAqIDxwcmU+CisgKiBcY29kZQor
ICogIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICogIFVGaWVsZFBvc2l0aW9u
IHBvczsKKyAqICBVQ2hhciAqbXlTdHJpbmc7CisgKiAgaW50MzJfdCBteVN0cmxlbiA9IDA7Cisg
KiAgY2hhciBidWZmZXJbMTAyNF07CisgKgorICogIHBvcy5maWVsZCA9IDE7ICAvLyBTYW1lIGFz
IHRoZSBEYXRlRm9ybWF0OjpFRmllbGQgZW51bQorICogIFVEYXRlRm9ybWF0KiBkZm10ID0gdWRh
dF9vcGVuKFVEQVRfREVGQVVMVCwgVURBVF9ERUZBVUxULCBOVUxMLCAtMSwgTlVMTCwgMCwgJnN0
YXR1cyk7CisgKiAgbXlTdHJsZW4gPSB1ZGF0X2Zvcm1hdChkZm10LCBteURhdGUsIE5VTEwsIG15
U3RybGVuLCAmcG9zLCAmc3RhdHVzKTsKKyAqICBpZiAoc3RhdHVzPT1VX0JVRkZFUl9PVkVSRkxP
V19FUlJPUil7CisgKiAgICAgIHN0YXR1cz1VX1pFUk9fRVJST1I7CisgKiAgICAgIG15U3RyaW5n
PShVQ2hhciopbWFsbG9jKHNpemVvZihVQ2hhcikgKiAobXlTdHJsZW4rMSkgKTsKKyAqICAgICAg
dWRhdF9mb3JtYXQoZGZtdCwgbXlEYXRlLCBteVN0cmluZywgbXlTdHJsZW4rMSwgJnBvcywgJnN0
YXR1cyk7CisgKiAgfQorICogIHByaW50ZigiZGF0ZSBmb3JtYXQ6ICVzXG4iLCB1X2F1c3RyY3B5
KGJ1ZmZlciwgbXlTdHJpbmcpKTsKKyAqICBidWZmZXJbcG9zLmVuZEluZGV4XSA9IDA7ICAgLy8g
TlVMTCB0ZXJtaW5hdGUgdGhlIHN0cmluZy4KKyAqICBwcmludGYoIlVGaWVsZFBvc2l0aW9uIHBv
c2l0aW9uIGVxdWFscyAlc1xuIiwgJmJ1ZmZlcltwb3MuYmVnaW5JbmRleF0pOworICogXGVuZGNv
ZGUKKyAqIDwvcHJlPgorICogVG8gZm9ybWF0IGEgZGF0ZSBmb3IgYSBkaWZmZXJlbnQgTG9jYWxl
LCBzcGVjaWZ5IGl0IGluIHRoZSBjYWxsIHRvCisgKiB1ZGF0X29wZW4oKQorICogPHByZT4KKyAq
IFxjb2RlCisgKiAgICAgICAgVURhdGVGb3JtYXQqIGRmID0gdWRhdF9vcGVuKFVEQVRfU0hPUlQs
IFVEQVRfU0hPUlQsICJmcl9GUiIsIE5VTEwsIC0xLCBOVUxMLCAwLCAmc3RhdHVzKTsKKyAqIFxl
bmRjb2RlCisgKiA8L3ByZT4KKyAqIFlvdSBjYW4gdXNlIGEgRGF0ZUZvcm1hdCBBUEkgdWRhdF9w
YXJzZSgpIHRvIHBhcnNlLgorICogPHByZT4KKyAqIFxjb2RlCisgKiAgVUVycm9yQ29kZSBzdGF0
dXMgPSBVX1pFUk9fRVJST1I7CisgKiAgaW50MzJfdCBwYXJzZXBvcz0wOworICogIFVEYXRlIG15
RGF0ZSA9IHVkYXRfcGFyc2UoZGYsIG15U3RyaW5nLCB1X3N0cmxlbihteVN0cmluZyksICZwYXJz
ZXBvcywgJnN0YXR1cyk7CisgKiBcZW5kY29kZQorICogPC9wcmU+CisgKiAgWW91IGNhbiBwYXNz
IGluIGRpZmZlcmVudCBvcHRpb25zIGZvciB0aGUgYXJndW1lbnRzIGZvciBkYXRlIGFuZCB0aW1l
IHN0eWxlCisgKiAgdG8gY29udHJvbCB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQ7IGZyb20gU0hP
UlQgdG8gTUVESVVNIHRvIExPTkcgdG8gRlVMTC4KKyAqICBUaGUgZXhhY3QgcmVzdWx0IGRlcGVu
ZHMgb24gdGhlIGxvY2FsZSwgYnV0IGdlbmVyYWxseToKKyAqICBzZWUgVURhdGVGb3JtYXRTdHls
ZSBmb3IgbW9yZSBkZXRhaWxzCisgKiA8dWwgdHlwZT1yb3VuZD4KKyAqICAgPGxpPiAgIFVEQVRf
U0hPUlQgaXMgY29tcGxldGVseSBudW1lcmljLCBzdWNoIGFzIDEyLzEzLzUyIG9yIDM6MzBwbQor
ICogICA8bGk+ICAgVURBVF9NRURJVU0gaXMgbG9uZ2VyLCBzdWNoIGFzIEphbiAxMiwgMTk1Mgor
ICogICA8bGk+ICAgVURBVF9MT05HIGlzIGxvbmdlciwgc3VjaCBhcyBKYW51YXJ5IDEyLCAxOTUy
IG9yIDM6MzA6MzJwbQorICogICA8bGk+ICAgVURBVF9GVUxMIGlzIHByZXR0eSBjb21wbGV0ZWx5
IHNwZWNpZmllZCwgc3VjaCBhcworICogICAgICAgICAgVHVlc2RheSwgQXByaWwgMTIsIDE5NTIg
QUQgb3IgMzozMDo0MnBtIFBTVC4KKyAqIDwvdWw+CisgKiBZb3UgY2FuIGFsc28gc2V0IHRoZSB0
aW1lIHpvbmUgb24gdGhlIGZvcm1hdCBpZiB5b3Ugd2lzaC4KKyAqIDxQPgorICogWW91IGNhbiBh
bHNvIHVzZSBmb3JtcyBvZiB0aGUgcGFyc2UgYW5kIGZvcm1hdCBtZXRob2RzIHdpdGggUGFyc2Ug
UG9zaXRpb24gYW5kCisgKiBVRmllbGRQb3NpdGlvbiB0byBhbGxvdyB5b3UgdG8KKyAqIDx1bCB0
eXBlPXJvdW5kPgorICogICA8bGk+ICAgUHJvZ3Jlc3NpdmVseSBwYXJzZSB0aHJvdWdoIHBpZWNl
cyBvZiBhIHN0cmluZy4KKyAqICAgPGxpPiAgIEFsaWduIGFueSBwYXJ0aWN1bGFyIGZpZWxkLCBv
ciBmaW5kIG91dCB3aGVyZSBpdCBpcyBmb3Igc2VsZWN0aW9uCisgKiAgICAgICAgICBvbiB0aGUg
c2NyZWVuLgorICogPC91bD4KKyAqLworCisvKiogQSBkYXRlIGZvcm1hdHRlci4KKyAqICBGb3Ig
dXNhZ2UgaW4gQyBwcm9ncmFtcy4KKyAqICBAc3RhYmxlIElDVSAyLjYKKyAqLwordHlwZWRlZiB2
b2lkKiBVRGF0ZUZvcm1hdDsKKworLyoqIFRoZSBwb3NzaWJsZSBkYXRlL3RpbWUgZm9ybWF0IHN0
eWxlcyAKKyAqICBAc3RhYmxlIElDVSAyLjYKKyAqLwordHlwZWRlZiBlbnVtIFVEYXRlRm9ybWF0
U3R5bGUgeworICAgIC8qKiBGdWxsIHN0eWxlICovCisgICAgVURBVF9GVUxMLAorICAgIC8qKiBM
b25nIHN0eWxlICovCisgICAgVURBVF9MT05HLAorICAgIC8qKiBNZWRpdW0gc3R5bGUgKi8KKyAg
ICBVREFUX01FRElVTSwKKyAgICAvKiogU2hvcnQgc3R5bGUgKi8KKyAgICBVREFUX1NIT1JULAor
ICAgIC8qKiBEZWZhdWx0IHN0eWxlICovCisgICAgVURBVF9ERUZBVUxUID0gVURBVF9NRURJVU0s
CisKKyAgICAvKiogQml0ZmllbGQgZm9yIHJlbGF0aXZlIGRhdGUgKi8KKyAgICBVREFUX1JFTEFU
SVZFID0gKDEgPDwgNyksCisgICAgCisgICAgVURBVF9GVUxMX1JFTEFUSVZFID0gVURBVF9GVUxM
IHwgVURBVF9SRUxBVElWRSwKKyAgICAgICAgCisgICAgVURBVF9MT05HX1JFTEFUSVZFID0gVURB
VF9MT05HIHwgVURBVF9SRUxBVElWRSwKKyAgICAKKyAgICBVREFUX01FRElVTV9SRUxBVElWRSA9
IFVEQVRfTUVESVVNIHwgVURBVF9SRUxBVElWRSwKKyAgICAKKyAgICBVREFUX1NIT1JUX1JFTEFU
SVZFID0gVURBVF9TSE9SVCB8IFVEQVRfUkVMQVRJVkUsCisgICAgCisgICAgCisgICAgLyoqIE5v
IHN0eWxlICovCisgICAgVURBVF9OT05FID0gLTEsCisgICAgLyoqIGZvciBpbnRlcm5hbCBBUEkg
dXNlIG9ubHkgKi8KKyAgICBVREFUX0lHTk9SRSA9IC0yCisKK30gVURhdGVGb3JtYXRTdHlsZTsK
KworCisvKioKKyAqIEB7CisgKiBCZWxvdyBhcmUgYSBzZXQgb2YgcHJlLWRlZmluZWQgc2tlbGV0
b25zLgorICoKKyAqIDxQPgorICogQSBza2VsZXRvbiAKKyAqIDxvbD4KKyAqIDxsaT4KKyAqICAg
IG9ubHkga2VlcHMgdGhlIGZpZWxkIHBhdHRlcm4gbGV0dGVyIGFuZCBpZ25vcmVzIGFsbCBvdGhl
ciBwYXJ0cyAKKyAqICAgIGluIGEgcGF0dGVybiwgc3VjaCBhcyBzcGFjZSwgcHVuY3R1YXRpb25z
LCBhbmQgc3RyaW5nIGxpdGVyYWxzLgorICogPC9saT4KKyAqIDxsaT4KKyAqICAgIGhpZGVzIHRo
ZSBvcmRlciBvZiBmaWVsZHMuIAorICogPC9saT4KKyAqIDxsaT4KKyAqICAgIG1pZ2h0IGhpZGUg
YSBmaWVsZCdzIHBhdHRlcm4gbGV0dGVyIGxlbmd0aC4KKyAqCisgKiAgICBGb3IgdGhvc2Ugbm9u
LWRpZ2l0IGNhbGVuZGFyIGZpZWxkcywgdGhlIHBhdHRlcm4gbGV0dGVyIGxlbmd0aCBpcyAKKyAq
ICAgIGltcG9ydGFudCwgc3VjaCBhcyBNTU0sIE1NTU0sIGFuZCBNTU1NTTsgRUVFIGFuZCBFRUVF
LCAKKyAqICAgIGFuZCB0aGUgZmllbGQncyBwYXR0ZXJuIGxldHRlciBsZW5ndGggaXMgaG9ub3Jl
ZC4KKyAqICAgIAorICogICAgRm9yIHRoZSBkaWdpdCBjYWxlbmRhciBmaWVsZHMsICBzdWNoIGFz
IE0gb3IgTU0sIGQgb3IgZGQsIHl5IG9yIHl5eXksIAorICogICAgdGhlIGZpZWxkIHBhdHRlcm4g
bGVuZ3RoIGlzIGlnbm9yZWQgYW5kIHRoZSBiZXN0IG1hdGNoLCB3aGljaCBpcyBkZWZpbmVkIAor
ICogICAgaW4gZGF0ZSB0aW1lIHBhdHRlcm5zLCB3aWxsIGJlIHJldHVybmVkIHdpdGhvdXQgaG9u
b3IgdGhlIGZpZWxkIHBhdHRlcm4KKyAqICAgIGxldHRlciBsZW5ndGggaW4gc2tlbGV0b24uCisg
KiA8L2xpPgorICogPC9vbD4KKyAqCisgKiBAc3RhYmxlIElDVSA0LjAKKyAqLworCisjZGVmaW5l
IFVEQVRfTUlOVVRFX1NFQ09ORCAgICAgICAgICAgICAgIm1zIgorI2RlZmluZSBVREFUX0hPVVIy
NF9NSU5VVEUgICAgICAgICAgICAgICJIbSIKKyNkZWZpbmUgVURBVF9IT1VSMjRfTUlOVVRFX1NF
Q09ORCAgICAgICAiSG1zIiAgICAgIAorI2RlZmluZSBVREFUX0hPVVJfTUlOVVRFX1NFQ09ORCAg
ICAgICAgICJobXMiCisjZGVmaW5lIFVEQVRfU1RBTkRBTE9ORV9NT05USCAgICAgICAgICAgIkxM
TEwiCisjZGVmaW5lIFVEQVRfQUJCUl9TVEFOREFMT05FX01PTlRIICAgICAgIkxMTCIKKyNkZWZp
bmUgVURBVF9ZRUFSX1FVQVJURVIgICAgICAgICAgICAgICAieVFRUSIKKyNkZWZpbmUgVURBVF9Z
RUFSX0FCQlJfUVVBUlRFUiAgICAgICAgICAieVEiCisKKy8qKiBAfSAqLworCisvKioKKyAqIEB7
CisgKiBCZWxvdyBhcmUgYSBzZXQgb2YgcHJlLWRlZmluZWQgc2tlbGV0b25zIHRoYXQgCisgKiBo
YXZlIHByZS1kZWZpbmVkIGludGVydmFsIHBhdHRlcm5zIGluIHJlc291cmNlIGZpbGVzLgorICog
VXNlcnMgYXJlIGVuY291cmFnZWQgdG8gdXNlIHRoZW0gaW4gZGF0ZSBpbnRlcnZhbCBmb3JtYXQg
ZmFjdG9yeSBtZXRob2RzLgorICogCisgKiBAc3RhYmxlIElDVSA0LjAKKyAqLworI2RlZmluZSBV
REFUX0hPVVJfTUlOVVRFICAgICAgICAgICAgICAgICJobSIKKyNkZWZpbmUgVURBVF9ZRUFSICAg
ICAgICAgICAgICAgICAgICAgICAieSIKKyNkZWZpbmUgVURBVF9EQVkgICAgICAgICAgICAgICAg
ICAgICAgICAiZCIKKyNkZWZpbmUgVURBVF9OVU1fTU9OVEhfV0VFS0RBWV9EQVkgICAgICAiTUVk
IgorI2RlZmluZSBVREFUX1lFQVJfTlVNX01PTlRIICAgICAgICAgICAgICJ5TSIgICAgICAgICAg
ICAgIAorI2RlZmluZSBVREFUX05VTV9NT05USF9EQVkgICAgICAgICAgICAgICJNZCIKKyNkZWZp
bmUgVURBVF9ZRUFSX05VTV9NT05USF9XRUVLREFZX0RBWSAieU1FZCIKKyNkZWZpbmUgVURBVF9B
QkJSX01PTlRIX1dFRUtEQVlfREFZICAgICAiTU1NRWQiCisjZGVmaW5lIFVEQVRfWUVBUl9NT05U
SCAgICAgICAgICAgICAgICAgInlNTU1NIgorI2RlZmluZSBVREFUX1lFQVJfQUJCUl9NT05USCAg
ICAgICAgICAgICJ5TU1NIgorI2RlZmluZSBVREFUX01PTlRIX0RBWSAgICAgICAgICAgICAgICAg
ICJNTU1NZCIKKyNkZWZpbmUgVURBVF9BQkJSX01PTlRIX0RBWSAgICAgICAgICAgICAiTU1NZCIg
CisjZGVmaW5lIFVEQVRfTU9OVEhfV0VFS0RBWV9EQVkgICAgICAgICAgIk1NTU1FRUVFZCIKKyNk
ZWZpbmUgVURBVF9ZRUFSX0FCQlJfTU9OVEhfV0VFS0RBWV9EQVkgInlNTU1FZCIgCisjZGVmaW5l
IFVEQVRfWUVBUl9NT05USF9XRUVLREFZX0RBWSAgICAgInlNTU1NRUVFRWQiCisjZGVmaW5lIFVE
QVRfWUVBUl9NT05USF9EQVkgICAgICAgICAgICAgInlNTU1NZCIKKyNkZWZpbmUgVURBVF9ZRUFS
X0FCQlJfTU9OVEhfREFZICAgICAgICAieU1NTWQiCisjZGVmaW5lIFVEQVRfWUVBUl9OVU1fTU9O
VEhfREFZICAgICAgICAgInlNZCIKKyNkZWZpbmUgVURBVF9OVU1fTU9OVEggICAgICAgICAgICAg
ICAgICAiTSIKKyNkZWZpbmUgVURBVF9BQkJSX01PTlRIICAgICAgICAgICAgICAgICAiTU1NIgor
I2RlZmluZSBVREFUX01PTlRIICAgICAgICAgICAgICAgICAgICAgICJNTU1NIgorI2RlZmluZSBV
REFUX0hPVVJfTUlOVVRFX0dFTkVSSUNfVFogICAgICJobXYiCisjZGVmaW5lIFVEQVRfSE9VUl9N
SU5VVEVfVFogICAgICAgICAgICAgImhteiIKKyNkZWZpbmUgVURBVF9IT1VSICAgICAgICAgICAg
ICAgICAgICAgICAiaCIKKyNkZWZpbmUgVURBVF9IT1VSX0dFTkVSSUNfVFogICAgICAgICAgICAi
aHYiCisjZGVmaW5lIFVEQVRfSE9VUl9UWiAgICAgICAgICAgICAgICAgICAgImh6IgorCisvKiog
QH0gKi8KKworCisvKioKKyAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVj
dG9ycyBmb3IgZm9ybWF0IGZpZWxkcworICogZGVmaW5lZCBieSBEYXRlRm9ybWF0IGFuZCBVRGF0
ZUZvcm1hdC4KKyAqIEBzdGFibGUgSUNVIDMuMAorICovCit0eXBlZGVmIGVudW0gVURhdGVGb3Jt
YXRGaWVsZCB7CisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9zaXRp
b24gc2VsZWN0b3IgZm9yICdHJyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGlu
ZyB0byB0aGUgVUNBTF9FUkEgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICov
CisgICAgVURBVF9FUkFfRklFTEQgPSAwLAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlv
biBhbmQgVUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICd5JyBmaWVsZCBhbGlnbm1lbnQsCisg
ICAgICogY29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9ZRUFSIGZpZWxkLgorICAgICAqIEBzdGFi
bGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfWUVBUl9GSUVMRCA9IDEsCisKKyAgICAvKioK
KyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ00n
IGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX01PTlRI
IGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfTU9OVEhf
RklFTEQgPSAyLAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQgVUZpZWxkUG9z
aXRpb24gc2VsZWN0b3IgZm9yICdkJyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9u
ZGluZyB0byB0aGUgVUNBTF9EQVRFIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAg
ICAqLworICAgIFVEQVRfREFURV9GSUVMRCA9IDMsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBv
c2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ2snIGZpZWxkIGFsaWdubWVu
dCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0hPVVJfT0ZfREFZIGZpZWxkLgor
ICAgICAqIFVEQVRfSE9VUl9PRl9EQVkxX0ZJRUxEIGlzIHVzZWQgZm9yIHRoZSBvbmUtYmFzZWQg
MjQtaG91ciBjbG9jay4KKyAgICAgKiBGb3IgZXhhbXBsZSwgMjM6NTkgKyAwMTowMCByZXN1bHRz
IGluIDI0OjU5LgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfSE9V
Ul9PRl9EQVkxX0ZJRUxEID0gNCwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5k
IFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnSCcgZmllbGQgYWxpZ25tZW50LAorICAgICAq
IGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfSE9VUl9PRl9EQVkgZmllbGQuCisgICAgICogVURB
VF9IT1VSX09GX0RBWTBfRklFTEQgaXMgdXNlZCBmb3IgdGhlIHplcm8tYmFzZWQgMjQtaG91ciBj
bG9jay4KKyAgICAgKiBGb3IgZXhhbXBsZSwgMjM6NTkgKyAwMTowMCByZXN1bHRzIGluIDAwOjU5
LgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfSE9VUl9PRl9EQVkw
X0ZJRUxEID0gNSwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBv
c2l0aW9uIHNlbGVjdG9yIGZvciAnbScgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3Bv
bmRpbmcgdG8gdGhlIFVDQUxfTUlOVVRFIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAor
ICAgICAqLworICAgIFVEQVRfTUlOVVRFX0ZJRUxEID0gNiwKKworICAgIC8qKgorICAgICAqIEZp
ZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAncycgZmllbGQgYWxp
Z25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfU0VDT05EIGZpZWxkLgor
ICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfU0VDT05EX0ZJRUxEID0g
NywKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNl
bGVjdG9yIGZvciAnUycgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8g
dGhlIFVDQUxfTUlMTElTRUNPTkQgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAg
ICovCisgICAgVURBVF9GUkFDVElPTkFMX1NFQ09ORF9GSUVMRCA9IDgsCisKKyAgICAvKioKKyAg
ICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ0UnIGZp
ZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0RBWV9PRl9X
RUVLIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfREFZ
X09GX1dFRUtfRklFTEQgPSA5LAorCisgICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBhbmQg
VUZpZWxkUG9zaXRpb24gc2VsZWN0b3IgZm9yICdEJyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICog
Y29ycmVzcG9uZGluZyB0byB0aGUgVUNBTF9EQVlfT0ZfWUVBUiBmaWVsZC4KKyAgICAgKiBAc3Rh
YmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFUX0RBWV9PRl9ZRUFSX0ZJRUxEID0gMTAsCisK
KyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3Rv
ciBmb3IgJ0YnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBV
Q0FMX0RBWV9PRl9XRUVLX0lOX01PTlRIIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAor
ICAgICAqLworICAgIFVEQVRfREFZX09GX1dFRUtfSU5fTU9OVEhfRklFTEQgPSAxMSwKKworICAg
IC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZv
ciAndycgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxf
V0VFS19PRl9ZRUFSIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAg
IFVEQVRfV0VFS19PRl9ZRUFSX0ZJRUxEID0gMTIsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBv
c2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ1cnIGZpZWxkIGFsaWdubWVu
dCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX1dFRUtfT0ZfTU9OVEggZmllbGQu
CisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9XRUVLX09GX01PTlRI
X0ZJRUxEID0gMTMsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQ
b3NpdGlvbiBzZWxlY3RvciBmb3IgJ2EnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNw
b25kaW5nIHRvIHRoZSBVQ0FMX0FNX1BNIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAor
ICAgICAqLworICAgIFVEQVRfQU1fUE1fRklFTEQgPSAxNCwKKworICAgIC8qKgorICAgICAqIEZp
ZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnaCcgZmllbGQgYWxp
Z25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfSE9VUiBmaWVsZC4KKyAg
ICAgKiBVREFUX0hPVVIxX0ZJRUxEIGlzIHVzZWQgZm9yIHRoZSBvbmUtYmFzZWQgMTItaG91ciBj
bG9jay4KKyAgICAgKiBGb3IgZXhhbXBsZSwgMTE6MzAgUE0gKyAxIGhvdXIgcmVzdWx0cyBpbiAx
MjozMCBBTS4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFUX0hPVVIx
X0ZJRUxEID0gMTUsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQ
b3NpdGlvbiBzZWxlY3RvciBmb3IgJ0snIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNw
b25kaW5nIHRvIHRoZSBVQ0FMX0hPVVIgZmllbGQuCisgICAgICogVURBVF9IT1VSMF9GSUVMRCBp
cyB1c2VkIGZvciB0aGUgemVyby1iYXNlZCAxMi1ob3VyIGNsb2NrLgorICAgICAqIEZvciBleGFt
cGxlLCAxMTozMCBQTSArIDEgaG91ciByZXN1bHRzIGluIDAwOjMwIEFNLgorICAgICAqIEBzdGFi
bGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfSE9VUjBfRklFTEQgPSAxNiwKKworICAgIC8q
KgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAn
eicgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfWk9O
RV9PRkZTRVQgYW5kCisgICAgICogVUNBTF9EU1RfT0ZGU0VUIGZpZWxkcy4KKyAgICAgKiBAc3Rh
YmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFUX1RJTUVaT05FX0ZJRUxEID0gMTcsCisKKyAg
ICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBm
b3IgJ1knIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FM
X1lFQVJfV09ZIGZpZWxkLgorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVE
QVRfWUVBUl9XT1lfRklFTEQgPSAxOCwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24g
YW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAnZScgZmllbGQgYWxpZ25tZW50LAorICAg
ICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVDQUxfRE9XX0xPQ0FMIGZpZWxkLgorICAgICAqIEBz
dGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVEQVRfRE9XX0xPQ0FMX0ZJRUxEID0gMTksCisK
KyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3Rv
ciBmb3IgJ3UnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBV
Q0FMX0VYVEVOREVEX1lFQVIgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICov
CisgICAgVURBVF9FWFRFTkRFRF9ZRUFSX0ZJRUxEID0gMjAsCisKKyAgICAvKioKKyAgICAgKiBG
aWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ2cnIGZpZWxkIGFs
aWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBVQ0FMX0pVTElBTl9EQVkgZmll
bGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9KVUxJQU5fREFZ
X0ZJRUxEID0gMjEsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQ
b3NpdGlvbiBzZWxlY3RvciBmb3IgJ0EnIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNw
b25kaW5nIHRvIHRoZSBVQ0FMX01JTExJU0VDT05EU19JTl9EQVkgZmllbGQuCisgICAgICogQHN0
YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9NSUxMSVNFQ09ORFNfSU5fREFZX0ZJRUxE
ID0gMjIsCisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlv
biBzZWxlY3RvciBmb3IgJ1onIGZpZWxkIGFsaWdubWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5n
IHRvIHRoZSBVQ0FMX1pPTkVfT0ZGU0VUIGFuZAorICAgICAqIFVDQUxfRFNUX09GRlNFVCBmaWVs
ZHMuCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVURBVF9USU1FWk9ORV9S
RkNfRklFTEQgPSAyMywKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVs
ZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAndicgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJl
c3BvbmRpbmcgdG8gdGhlIFVDQUxfWk9ORV9PRkZTRVQgZmllbGQuCisgICAgICogQHN0YWJsZSBJ
Q1UgMy40CisgICAgICovCisgICAgVURBVF9USU1FWk9ORV9HRU5FUklDX0ZJRUxEID0gMjQsCisg
ICAgLyoqCisgICAgICogRmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgJ2MnIGZpZWxkIGFsaWdu
bWVudCwKKyAgICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSB7QGxpbmsgI1VDQUxfRE9XX0xPQ0FM
fSBmaWVsZC4KKyAgICAgKiBUaGlzIGRpc3BsYXlzIHRoZSBzdGFuZCBhbG9uZSBkYXkgbmFtZSwg
aWYgYXZhaWxhYmxlLgorICAgICAqIEBzdGFibGUgSUNVIDMuNAorICAgICAqLworICAgIFVEQVRf
U1RBTkRBTE9ORV9EQVlfRklFTEQgPSAyNSwKKworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRp
b24gc2VsZWN0b3IgZm9yICdMJyBmaWVsZCBhbGlnbm1lbnQsCisgICAgICogY29ycmVzcG9uZGlu
ZyB0byB0aGUge0BsaW5rICNVQ0FMX01PTlRIfSBmaWVsZC4KKyAgICAgKiBUaGlzIGRpc3BsYXlz
IHRoZSBzdGFuZCBhbG9uZSBtb250aCBuYW1lLCBpZiBhdmFpbGFibGUuCisgICAgICogQHN0YWJs
ZSBJQ1UgMy40CisgICAgICovCisgICAgVURBVF9TVEFOREFMT05FX01PTlRIX0ZJRUxEID0gMjYs
CisKKyAgICAvKioKKyAgICAgKiBGaWVsZFBvc2l0aW9uIHNlbGVjdG9yIGZvciAiUSIgZmllbGQg
YWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gcXVhcnRlcnMuIFRoaXMgaXMgaW1w
bGVtZW50ZWQKKyAgICAgKiB1c2luZyB0aGUge0BsaW5rICNVQ0FMX01PTlRIfSBmaWVsZC4gVGhp
cworICAgICAqIGRpc3BsYXlzIHRoZSBxdWFydGVyLgorICAgICAqIEBzdGFibGUgSUNVIDMuNgor
ICAgICAqLworICAgIFVEQVRfUVVBUlRFUl9GSUVMRCA9IDI3LAorCisgICAgLyoqCisgICAgICog
RmllbGRQb3NpdGlvbiBzZWxlY3RvciBmb3IgdGhlICJxIiBmaWVsZCBhbGlnbm1lbnQsCisgICAg
ICogY29ycmVzcG9uZGluZyB0byBzdGFuZC1hbG9uZSBxdWFydGVycy4gVGhpcyBpcworICAgICAq
IGltcGxlbWVudGVkIHVzaW5nIHRoZSB7QGxpbmsgI1VDQUxfTU9OVEh9IGZpZWxkLgorICAgICAq
IFRoaXMgZGlzcGxheXMgdGhlIHN0YW5kLWFsb25lIHF1YXJ0ZXIuCisgICAgICogQHN0YWJsZSBJ
Q1UgMy42CisgICAgICovCisgICAgVURBVF9TVEFOREFMT05FX1FVQVJURVJfRklFTEQgPSAyOCwK
KworICAgIC8qKgorICAgICAqIEZpZWxkUG9zaXRpb24gYW5kIFVGaWVsZFBvc2l0aW9uIHNlbGVj
dG9yIGZvciAnVicgZmllbGQgYWxpZ25tZW50LAorICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhl
IFVDQUxfWk9ORV9PRkZTRVQgZmllbGQuCisgICAgICogQHN0YWJsZSBJQ1UgMy44CisgICAgICov
CisgICAgVURBVF9USU1FWk9ORV9TUEVDSUFMX0ZJRUxEID0gMjksCisKKyAgIC8qKgorICAgICAq
IE51bWJlciBvZiBGaWVsZFBvc2l0aW9uIGFuZCBVRmllbGRQb3NpdGlvbiBzZWxlY3RvcnMgZm9y
CisgICAgICogRGF0ZUZvcm1hdCBhbmQgVURhdGVGb3JtYXQuCisgICAgICogVmFsaWQgc2VsZWN0
b3JzIHJhbmdlIGZyb20gMCB0byBVREFUX0ZJRUxEX0NPVU5ULTEuCisgICAgICogVGhpcyB2YWx1
ZSBpcyBzdWJqZWN0IHRvIGNoYW5nZSBpZiBuZXcgZmllbGRzIGFyZSBkZWZpbmVkCisgICAgICog
aW4gdGhlIGZ1dHVyZS4KKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVREFU
X0ZJRUxEX0NPVU5UID0gMzAKKworfSBVRGF0ZUZvcm1hdEZpZWxkOworCisKKy8qKgorICogTWFw
cyBmcm9tIGEgVURhdGVGb3JtYXRGaWVsZCB0byB0aGUgY29ycmVzcG9uZGluZyBVQ2FsZW5kYXJE
YXRlRmllbGRzLgorICogTm90ZTogc2luY2UgdGhlIG1hcHBpbmcgaXMgbWFueS10by1vbmUsIHRo
ZXJlIGlzIG5vIGludmVyc2UgbWFwcGluZy4KKyAqIEBwYXJhbSBmaWVsZCB0aGUgVURhdGVGb3Jt
YXRGaWVsZC4KKyAqIEByZXR1cm4gdGhlIFVDYWxlbmRhckRhdGVGaWVsZC4gIFRoaXMgd2lsbCBi
ZSBVQ0FMX0ZJRUxEX0NPVU5UIGluIGNhc2UKKyAqIG9mIGVycm9yIChlLmcuLCB0aGUgaW5wdXQg
ZmllbGQgaXMgVURBVF9GSUVMRF9DT1VOVCkuCisgKiBAc3RhYmxlIElDVSA0LjQKKyAqLworVV9T
VEFCTEUgVUNhbGVuZGFyRGF0ZUZpZWxkcyBVX0VYUE9SVDIKK3VkYXRfdG9DYWxlbmRhckRhdGVG
aWVsZChVRGF0ZUZvcm1hdEZpZWxkIGZpZWxkKTsKKworCisvKioKKyAqIE9wZW4gYSBuZXcgVURh
dGVGb3JtYXQgZm9yIGZvcm1hdHRpbmcgYW5kIHBhcnNpbmcgZGF0ZXMgYW5kIHRpbWVzLgorICog
QSBVRGF0ZUZvcm1hdCBtYXkgYmUgdXNlZCB0byBmb3JtYXQgZGF0ZXMgaW4gY2FsbHMgdG8ge0Bs
aW5rICN1ZGF0X2Zvcm1hdCB9LAorICogYW5kIHRvIHBhcnNlIGRhdGVzIGluIGNhbGxzIHRvIHtA
bGluayAjdWRhdF9wYXJzZSB9LgorICogQHBhcmFtIHRpbWVTdHlsZSBUaGUgc3R5bGUgdXNlZCB0
byBmb3JtYXQgdGltZXM7IG9uZSBvZiBVREFUX0ZVTEwsIFVEQVRfTE9ORywKKyAqIFVEQVRfTUVE
SVVNLCBVREFUX1NIT1JULCBVREFUX0RFRkFVTFQsIG9yIFVEQVRfTk9ORSAocmVsYXRpdmUgdGlt
ZSBzdHlsZXMKKyAqIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCkKKyAqIEBwYXJhbSBkYXRl
U3R5bGUgVGhlIHN0eWxlIHVzZWQgdG8gZm9ybWF0IGRhdGVzOyBvbmUgb2YgVURBVF9GVUxMLCBV
REFUX0xPTkcsCisgKiBVREFUX01FRElVTSwgVURBVF9TSE9SVCwgVURBVF9ERUZBVUxULCBVREFU
X0ZVTExfUkVMQVRJVkUsIFVEQVRfTE9OR19SRUxBVElWRSwKKyAqIFVEQVRfTUVESVVNX1JFTEFU
SVZFLCBVREFUX1NIT1JUX1JFTEFUSVZFLCBvciBVREFUX05PTkUKKyAqIEBwYXJhbSBsb2NhbGUg
VGhlIGxvY2FsZSBzcGVjaWZ5aW5nIHRoZSBmb3JtYXR0aW5nIGNvbnZlbnRpb25zCisgKiBAcGFy
YW0gdHpJRCBBIHRpbWV6b25lIElEIHNwZWNpZnlpbmcgdGhlIHRpbWV6b25lIHRvIHVzZS4gIElm
IDAsIHVzZQorICogdGhlIGRlZmF1bHQgdGltZXpvbmUuCisgKiBAcGFyYW0gdHpJRExlbmd0aCBU
aGUgbGVuZ3RoIG9mIHR6SUQsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyAqIEBwYXJhbSBw
YXR0ZXJuIEEgcGF0dGVybiBzcGVjaWZ5aW5nIHRoZSBmb3JtYXQgdG8gdXNlLgorICogQHBhcmFt
IHBhdHRlcm5MZW5ndGggVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuLCBv
ciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBh
biBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworICogQHJldHVybiBBIHBvaW50ZXIg
dG8gYSBVRGF0ZUZvcm1hdCB0byB1c2UgZm9yIGZvcm1hdHRpbmcgZGF0ZXMgYW5kIHRpbWVzLCBv
ciAwIGlmCisgKiBhbiBlcnJvciBvY2N1cnJlZC4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitV
X1NUQUJMRSBVRGF0ZUZvcm1hdCogVV9FWFBPUlQyIAordWRhdF9vcGVuKFVEYXRlRm9ybWF0U3R5
bGUgIHRpbWVTdHlsZSwKKyAgICAgICAgICBVRGF0ZUZvcm1hdFN0eWxlICBkYXRlU3R5bGUsCisg
ICAgICAgICAgY29uc3QgY2hhciAgICAgICAgKmxvY2FsZSwKKyAgICAgICAgICBjb25zdCBVQ2hh
ciAgICAgICAqdHpJRCwKKyAgICAgICAgICBpbnQzMl90ICAgICAgICAgICB0eklETGVuZ3RoLAor
ICAgICAgICAgIGNvbnN0IFVDaGFyICAgICAgICpwYXR0ZXJuLAorICAgICAgICAgIGludDMyX3Qg
ICAgICAgICAgIHBhdHRlcm5MZW5ndGgsCisgICAgICAgICAgVUVycm9yQ29kZSAgICAgICAgKnN0
YXR1cyk7CisKKworLyoqCisqIENsb3NlIGEgVURhdGVGb3JtYXQuCisqIE9uY2UgY2xvc2VkLCBh
IFVEYXRlRm9ybWF0IG1heSBubyBsb25nZXIgYmUgdXNlZC4KKyogQHBhcmFtIGZvcm1hdCBUaGUg
Zm9ybWF0dGVyIHRvIGNsb3NlLgorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2b2lk
IFVfRVhQT1JUMiAKK3VkYXRfY2xvc2UoVURhdGVGb3JtYXQqIGZvcm1hdCk7CisKKyNpZiBVX1NI
T1dfQ1BMVVNQTFVTX0FQSQorCitVX05BTUVTUEFDRV9CRUdJTgorCisvKioKKyAqIFxjbGFzcyBM
b2NhbFVEYXRlRm9ybWF0UG9pbnRlcgorICogIlNtYXJ0IHBvaW50ZXIiIGNsYXNzLCBjbG9zZXMg
YSBVRGF0ZUZvcm1hdCB2aWEgdWRhdF9jbG9zZSgpLgorICogRm9yIG1vc3QgbWV0aG9kcyBzZWUg
dGhlIExvY2FsUG9pbnRlckJhc2UgYmFzZSBjbGFzcy4KKyAqCisgKiBAc2VlIExvY2FsUG9pbnRl
ckJhc2UKKyAqIEBzZWUgTG9jYWxQb2ludGVyCisgKiBAc3RhYmxlIElDVSA0LjQKKyAqLworVV9E
RUZJTkVfTE9DQUxfT1BFTl9QT0lOVEVSKExvY2FsVURhdGVGb3JtYXRQb2ludGVyLCBVRGF0ZUZv
cm1hdCwgdWRhdF9jbG9zZSk7CisKK1VfTkFNRVNQQUNFX0VORAorCisjZW5kaWYKKworLyoqCisg
KiBPcGVuIGEgY29weSBvZiBhIFVEYXRlRm9ybWF0LgorICogVGhpcyBmdW5jdGlvbiBwZXJmb3Jt
cyBhIGRlZXAgY29weS4KKyAqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdCB0byBjb3B5CisgKiBAcGFy
YW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9y
cy4KKyAqIEByZXR1cm4gQSBwb2ludGVyIHRvIGEgVURhdGVGb3JtYXQgaWRlbnRpY2FsIHRvIGZt
dC4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBVRGF0ZUZvcm1hdCogVV9FWFBP
UlQyIAordWRhdF9jbG9uZShjb25zdCBVRGF0ZUZvcm1hdCAqZm10LAorICAgICAgIFVFcnJvckNv
ZGUgKnN0YXR1cyk7CisKKy8qKgorKiBGb3JtYXQgYSBkYXRlIHVzaW5nIGFuIFVEYXRlRm9ybWF0
LgorKiBUaGUgZGF0ZSB3aWxsIGJlIGZvcm1hdHRlZCB1c2luZyB0aGUgY29udmVudGlvbnMgc3Bl
Y2lmaWVkIGluIHtAbGluayAjdWRhdF9vcGVuIH0KKyogQHBhcmFtIGZvcm1hdCBUaGUgZm9ybWF0
dGVyIHRvIHVzZQorKiBAcGFyYW0gZGF0ZVRvRm9ybWF0IFRoZSBkYXRlIHRvIGZvcm1hdAorKiBA
cGFyYW0gcmVzdWx0IEEgcG9pbnRlciB0byBhIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBmb3JtYXR0
ZWQgbnVtYmVyLgorKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIFRoZSBtYXhpbXVtIHNpemUgb2YgcmVz
dWx0LgorKiBAcGFyYW0gcG9zaXRpb24gQSBwb2ludGVyIHRvIGEgVUZpZWxkUG9zaXRpb24uICBP
biBpbnB1dCwgcG9zaXRpb24tPmZpZWxkCisqIGlzIHJlYWQuICBPbiBvdXRwdXQsIHBvc2l0aW9u
LT5iZWdpbkluZGV4IGFuZCBwb3NpdGlvbi0+ZW5kSW5kZXggaW5kaWNhdGUKKyogdGhlIGJlZ2lu
bmluZyBhbmQgZW5kaW5nIGluZGljZXMgb2YgZmllbGQgbnVtYmVyIHBvc2l0aW9uLT5maWVsZCwg
aWYgc3VjaAorKiBhIGZpZWxkIGV4aXN0cy4gIFRoaXMgcGFyYW1ldGVyIG1heSBiZSBOVUxMLCBp
biB3aGljaCBjYXNlIG5vIGZpZWxkCisqIHBvc2l0aW9uIGRhdGEgaXMgcmV0dXJuZWQuCisqIEBw
YXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJy
b3JzCisqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0
aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorKiBAc2VlIHVkYXRf
cGFyc2UKKyogQHNlZSBVRmllbGRQb3NpdGlvbgorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NU
QUJMRSBpbnQzMl90IFVfRVhQT1JUMiAKK3VkYXRfZm9ybWF0KCAgICBjb25zdCAgICBVRGF0ZUZv
cm1hdCogICAgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgVURhdGUgICAgICAgICAg
IGRhdGVUb0Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyKiAgICAgICAgICBy
ZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgcmVzdWx0TGVu
Z3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgVUZpZWxkUG9zaXRpb24qIHBvc2l0aW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSogICAgIHN0YXR1cyk7CisKKy8qKgor
KiBQYXJzZSBhIHN0cmluZyBpbnRvIGFuIGRhdGUvdGltZSB1c2luZyBhIFVEYXRlRm9ybWF0Lgor
KiBUaGUgZGF0ZSB3aWxsIGJlIHBhcnNlZCB1c2luZyB0aGUgY29udmVudGlvbnMgc3BlY2lmaWVk
IGluIHtAbGluayAjdWRhdF9vcGVuIH0KKyogQHBhcmFtIGZvcm1hdCBUaGUgZm9ybWF0dGVyIHRv
IHVzZS4KKyogQHBhcmFtIHRleHQgVGhlIHRleHQgdG8gcGFyc2UuCisqIEBwYXJhbSB0ZXh0TGVu
Z3RoIFRoZSBsZW5ndGggb2YgdGV4dCwgb3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorKiBAcGFy
YW0gcGFyc2VQb3MgSWYgbm90IDAsIG9uIGlucHV0IGEgcG9pbnRlciB0byBhbiBpbnRlZ2VyIHNw
ZWNpZnlpbmcgdGhlIG9mZnNldCBhdCB3aGljaAorKiB0byBiZWdpbiBwYXJzaW5nLiAgSWYgbm90
IDAsIG9uIG91dHB1dCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHBhcnNpbmcgZW5kZWQuCisqIEBwYXJh
bSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3Jz
CisqIEByZXR1cm4gVGhlIHZhbHVlIG9mIHRoZSBwYXJzZWQgZGF0ZS90aW1lCisqIEBzZWUgdWRh
dF9mb3JtYXQKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgVURhdGUgVV9FWFBPUlQy
IAordWRhdF9wYXJzZSggICAgY29uc3QgICAgVURhdGVGb3JtYXQqICAgIGZvcm1hdCwKKyAgICAg
ICAgICAgIGNvbnN0ICAgIFVDaGFyKiAgICAgICAgICB0ZXh0LAorICAgICAgICAgICAgICAgICAg
ICBpbnQzMl90ICAgICAgICAgdGV4dExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgaW50MzJf
dCAgICAgICAgICpwYXJzZVBvcywKKyAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAg
ICpzdGF0dXMpOworCisvKioKKyogUGFyc2UgYSBzdHJpbmcgaW50byBhbiBkYXRlL3RpbWUgdXNp
bmcgYSBVRGF0ZUZvcm1hdC4KKyogVGhlIGRhdGUgd2lsbCBiZSBwYXJzZWQgdXNpbmcgdGhlIGNv
bnZlbnRpb25zIHNwZWNpZmllZCBpbiB7QGxpbmsgI3VkYXRfb3BlbiB9CisqIEBwYXJhbSBmb3Jt
YXQgVGhlIGZvcm1hdHRlciB0byB1c2UuCisqIEBwYXJhbSBjYWxlbmRhciBUaGUgY2FsZW5kYXIg
aW4gd2hpY2ggdG8gc3RvcmUgdGhlIHBhcnNlZCBkYXRhLgorKiBAcGFyYW0gdGV4dCBUaGUgdGV4
dCB0byBwYXJzZS4KKyogQHBhcmFtIHRleHRMZW5ndGggVGhlIGxlbmd0aCBvZiB0ZXh0LCBvciAt
MSBpZiBudWxsLXRlcm1pbmF0ZWQuCisqIEBwYXJhbSBwYXJzZVBvcyBJZiBub3QgMCwgb24gaW5w
dXQgYSBwb2ludGVyIHRvIGFuIGludGVnZXIgc3BlY2lmeWluZyB0aGUgb2Zmc2V0IGF0IHdoaWNo
CisqIHRvIGJlZ2luIHBhcnNpbmcuICBJZiBub3QgMCwgb24gb3V0cHV0IHRoZSBvZmZzZXQgYXQg
d2hpY2ggcGFyc2luZyBlbmRlZC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVy
cm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHNlZSB1ZGF0X2Zvcm1hdAorKiBAc3Rh
YmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VkYXRfcGFyc2VDYWxl
bmRhcihjb25zdCAgICBVRGF0ZUZvcm1hdCogICAgZm9ybWF0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVDYWxlbmRhciogICAgICBjYWxlbmRhciwKKyAgICAgICAgICAgICAgICAgICBj
b25zdCAgICBVQ2hhciogICAgICAgICAgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQzMl90ICAgICAgICAgdGV4dExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQzMl90ICAgICAgICAgKnBhcnNlUG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVFcnJvckNvZGUgICAgICAqc3RhdHVzKTsKKworLyoqCisqIERldGVybWluZSBpZiBhbiBVRGF0
ZUZvcm1hdCB3aWxsIHBlcmZvcm0gbGVuaWVudCBwYXJzaW5nLgorKiBXaXRoIGxlbmllbnQgcGFy
c2luZywgdGhlIHBhcnNlciBtYXkgdXNlIGhldXJpc3RpY3MgdG8gaW50ZXJwcmV0IGlucHV0cyB0
aGF0IGRvIG5vdAorKiBwcmVjaXNlbHkgbWF0Y2ggdGhlIHBhdHRlcm4uIFdpdGggc3RyaWN0IHBh
cnNpbmcsIGlucHV0cyBtdXN0IG1hdGNoIHRoZSBwYXR0ZXJuLgorKiBAcGFyYW0gZm10IFRoZSBm
b3JtYXR0ZXIgdG8gcXVlcnkKKyogQHJldHVybiBUUlVFIGlmIGZtdCBpcyBzZXQgdG8gcGVyZm9y
bSBsZW5pZW50IHBhcnNpbmcsIEZBTFNFIG90aGVyd2lzZS4KKyogQHNlZSB1ZGF0X3NldExlbmll
bnQKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgVUJvb2wgVV9FWFBPUlQyIAordWRh
dF9pc0xlbmllbnQoY29uc3QgVURhdGVGb3JtYXQqIGZtdCk7CisKKy8qKgorKiBTcGVjaWZ5IHdo
ZXRoZXIgYW4gVURhdGVGb3JtYXQgd2lsbCBwZXJmb3JtIGxlbmllbnQgcGFyc2luZy4KKyogV2l0
aCBsZW5pZW50IHBhcnNpbmcsIHRoZSBwYXJzZXIgbWF5IHVzZSBoZXVyaXN0aWNzIHRvIGludGVy
cHJldCBpbnB1dHMgdGhhdCBkbyBub3QKKyogcHJlY2lzZWx5IG1hdGNoIHRoZSBwYXR0ZXJuLiBX
aXRoIHN0cmljdCBwYXJzaW5nLCBpbnB1dHMgbXVzdCBtYXRjaCB0aGUgcGF0dGVybi4KKyogQHBh
cmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHNldAorKiBAcGFyYW0gaXNMZW5pZW50IFRSVUUgaWYg
Zm10IHNob3VsZCBwZXJmb3JtIGxlbmllbnQgcGFyc2luZywgRkFMU0Ugb3RoZXJ3aXNlLgorKiBA
c2VlIGRhdF9pc0xlbmllbnQKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgdm9pZCBV
X0VYUE9SVDIgCit1ZGF0X3NldExlbmllbnQoICAgIFVEYXRlRm9ybWF0KiAgICBmbXQsCisgICAg
ICAgICAgICAgICAgICAgIFVCb29sICAgICAgICAgIGlzTGVuaWVudCk7CisKKy8qKgorKiBHZXQg
dGhlIFVDYWxlbmRhciBhc3NvY2lhdGVkIHdpdGggYW4gVURhdGVGb3JtYXQuCisqIEEgVURhdGVG
b3JtYXQgdXNlcyBhIFVDYWxlbmRhciB0byBjb252ZXJ0IGEgcmF3IHZhbHVlIHRvLCBmb3IgZXhh
bXBsZSwKKyogdGhlIGRheSBvZiB0aGUgd2Vlay4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVy
IHRvIHF1ZXJ5LgorKiBAcmV0dXJuIEEgcG9pbnRlciB0byB0aGUgVUNhbGVuZGFyIHVzZWQgYnkg
Zm10LgorKiBAc2VlIHVkYXRfc2V0Q2FsZW5kYXIKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9T
VEFCTEUgY29uc3QgVUNhbGVuZGFyKiBVX0VYUE9SVDIgCit1ZGF0X2dldENhbGVuZGFyKGNvbnN0
IFVEYXRlRm9ybWF0KiBmbXQpOworCisvKioKKyogU2V0IHRoZSBVQ2FsZW5kYXIgYXNzb2NpYXRl
ZCB3aXRoIGFuIFVEYXRlRm9ybWF0LgorKiBBIFVEYXRlRm9ybWF0IHVzZXMgYSBVQ2FsZW5kYXIg
dG8gY29udmVydCBhIHJhdyB2YWx1ZSB0bywgZm9yIGV4YW1wbGUsCisqIHRoZSBkYXkgb2YgdGhl
IHdlZWsuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBzZXQuCisqIEBwYXJhbSBjYWxl
bmRhclRvU2V0IEEgcG9pbnRlciB0byBhbiBVQ2FsZW5kYXIgdG8gYmUgdXNlZCBieSBmbXQuCisq
IEBzZWUgdWRhdF9zZXRDYWxlbmRhcgorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2
b2lkIFVfRVhQT1JUMiAKK3VkYXRfc2V0Q2FsZW5kYXIoICAgICAgICAgICAgVURhdGVGb3JtYXQq
ICAgIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgICBVQ2FsZW5kYXIqICAgICAgY2Fs
ZW5kYXJUb1NldCk7CisKKy8qKgorKiBHZXQgdGhlIFVOdW1iZXJGb3JtYXQgYXNzb2NpYXRlZCB3
aXRoIGFuIFVEYXRlRm9ybWF0LgorKiBBIFVEYXRlRm9ybWF0IHVzZXMgYSBVTnVtYmVyRm9ybWF0
IHRvIGZvcm1hdCBudW1iZXJzIHdpdGhpbiBhIGRhdGUsCisqIGZvciBleGFtcGxlIHRoZSBkYXkg
bnVtYmVyLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisqIEByZXR1cm4g
QSBwb2ludGVyIHRvIHRoZSBVTnVtYmVyRm9ybWF0IHVzZWQgYnkgZm10IHRvIGZvcm1hdCBudW1i
ZXJzLgorKiBAc2VlIHVkYXRfc2V0TnVtYmVyRm9ybWF0CisqIEBzdGFibGUgSUNVIDIuMAorKi8K
K1VfU1RBQkxFIGNvbnN0IFVOdW1iZXJGb3JtYXQqIFVfRVhQT1JUMiAKK3VkYXRfZ2V0TnVtYmVy
Rm9ybWF0KGNvbnN0IFVEYXRlRm9ybWF0KiBmbXQpOworCisvKioKKyogU2V0IHRoZSBVTnVtYmVy
Rm9ybWF0IGFzc29jaWF0ZWQgd2l0aCBhbiBVRGF0ZUZvcm1hdC4KKyogQSBVRGF0ZUZvcm1hdCB1
c2VzIGEgVU51bWJlckZvcm1hdCB0byBmb3JtYXQgbnVtYmVycyB3aXRoaW4gYSBkYXRlLAorKiBm
b3IgZXhhbXBsZSB0aGUgZGF5IG51bWJlci4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRv
IHNldC4KKyogQHBhcmFtIG51bWJlckZvcm1hdFRvU2V0IEEgcG9pbnRlciB0byB0aGUgVU51bWJl
ckZvcm1hdCB0byBiZSB1c2VkIGJ5IGZtdCB0byBmb3JtYXQgbnVtYmVycy4KKyogQHNlZSB1ZGF0
X2dldE51bWJlckZvcm1hdAorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2b2lkIFVf
RVhQT1JUMiAKK3VkYXRfc2V0TnVtYmVyRm9ybWF0KCAgICAgICAgICAgIFVEYXRlRm9ybWF0KiAg
ICBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCAgIFVOdW1iZXJGb3JtYXQqICBu
dW1iZXJGb3JtYXRUb1NldCk7CisKKy8qKgorKiBHZXQgYSBsb2NhbGUgZm9yIHdoaWNoIGRhdGUv
dGltZSBmb3JtYXR0aW5nIHBhdHRlcm5zIGFyZSBhdmFpbGFibGUuCisqIEEgVURhdGVGb3JtYXQg
aW4gYSBsb2NhbGUgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiB3aWxsIHBlcmZvcm0gdGhlIGNv
cnJlY3QKKyogZm9ybWF0dGluZyBhbmQgcGFyc2luZyBmb3IgdGhlIGxvY2FsZS4KKyogQHBhcmFt
IGxvY2FsZUluZGV4IFRoZSBpbmRleCBvZiB0aGUgZGVzaXJlZCBsb2NhbGUuCisqIEByZXR1cm4g
QSBsb2NhbGUgZm9yIHdoaWNoIGRhdGUvdGltZSBmb3JtYXR0aW5nIHBhdHRlcm5zIGFyZSBhdmFp
bGFibGUsIG9yIDAgaWYgbm9uZS4KKyogQHNlZSB1ZGF0X2NvdW50QXZhaWxhYmxlCisqIEBzdGFi
bGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGNvbnN0IGNoYXIqIFVfRVhQT1JUMiAKK3VkYXRfZ2V0
QXZhaWxhYmxlKGludDMyX3QgbG9jYWxlSW5kZXgpOworCisvKioKKyogRGV0ZXJtaW5lIGhvdyBt
YW55IGxvY2FsZXMgaGF2ZSBkYXRlL3RpbWUgIGZvcm1hdHRpbmcgcGF0dGVybnMgYXZhaWxhYmxl
LgorKiBUaGlzIGZ1bmN0aW9uIGlzIG1vc3QgdXNlZnVsIGFzIGRldGVybWluaW5nIHRoZSBsb29w
IGVuZGluZyBjb25kaXRpb24gZm9yCisqIGNhbGxzIHRvIHtAbGluayAjdWRhdF9nZXRBdmFpbGFi
bGUgfS4KKyogQHJldHVybiBUaGUgbnVtYmVyIG9mIGxvY2FsZXMgZm9yIHdoaWNoIGRhdGUvdGlt
ZSBmb3JtYXR0aW5nIHBhdHRlcm5zIGFyZSBhdmFpbGFibGUuCisqIEBzZWUgdWRhdF9nZXRBdmFp
bGFibGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIg
Cit1ZGF0X2NvdW50QXZhaWxhYmxlKHZvaWQpOworCisvKioKKyogR2V0IHRoZSB5ZWFyIHJlbGF0
aXZlIHRvIHdoaWNoIGFsbCAyLWRpZ2l0IHllYXJzIGFyZSBpbnRlcnByZXRlZC4KKyogRm9yIGV4
YW1wbGUsIGlmIHRoZSAyLWRpZ2l0IHN0YXJ0IHllYXIgaXMgMjEwMCwgdGhlIHllYXIgOTkgd2ls
bCBiZQorKiBpbnRlcnByZXRlZCBhcyAyMTk5LgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIg
dG8gcXVlcnkuCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8g
cmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHllYXIgcmVsYXRpdmUgdG8gd2hpY2gg
YWxsIDItZGlnaXQgeWVhcnMgYXJlIGludGVycHJldGVkLgorKiBAc2VlIHVkYXRfU2V0MkRpZ2l0
WWVhclN0YXJ0CisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIFVEYXRlIFVfRVhQT1JU
MiAKK3VkYXRfZ2V0MkRpZ2l0WWVhclN0YXJ0KCAgICBjb25zdCAgIFVEYXRlRm9ybWF0ICAgICAq
Zm10LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAg
ICpzdGF0dXMpOworCisvKioKKyogU2V0IHRoZSB5ZWFyIHJlbGF0aXZlIHRvIHdoaWNoIGFsbCAy
LWRpZ2l0IHllYXJzIHdpbGwgYmUgaW50ZXJwcmV0ZWQuCisqIEZvciBleGFtcGxlLCBpZiB0aGUg
Mi1kaWdpdCBzdGFydCB5ZWFyIGlzIDIxMDAsIHRoZSB5ZWFyIDk5IHdpbGwgYmUKKyogaW50ZXJw
cmV0ZWQgYXMgMjE5OS4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHNldC4KKyogQHBh
cmFtIGQgVGhlIHllYXIgcmVsYXRpdmUgdG8gd2hpY2ggYWxsIDItZGlnaXQgeWVhcnMgd2lsbCBi
ZSBpbnRlcnByZXRlZC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29k
ZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHNlZSB1ZGF0X1NldDJEaWdpdFllYXJTdGFydAor
KiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VkYXRfc2V0
MkRpZ2l0WWVhclN0YXJ0KCAgICBVRGF0ZUZvcm1hdCAgICAgKmZtdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVRGF0ZSAgICAgICAgICAgZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBVRXJyb3JDb2RlICAgICAgKnN0YXR1cyk7CisKKy8qKgorKiBFeHRyYWN0IHRoZSBwYXR0
ZXJuIGZyb20gYSBVRGF0ZUZvcm1hdC4KKyogVGhlIHBhdHRlcm4gd2lsbCBmb2xsb3cgdGhlIHBh
dHRlcm4gc3ludGF4IHJ1bGVzLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnku
CisqIEBwYXJhbSBsb2NhbGl6ZWQgVFJVRSBpZiB0aGUgcGF0dGVybiBzaG91bGQgYmUgbG9jYWxp
emVkLCBGQUxTRSBvdGhlcndpc2UuCisqIEBwYXJhbSByZXN1bHQgQSBwb2ludGVyIHRvIGEgYnVm
ZmVyIHRvIHJlY2VpdmUgdGhlIHBhdHRlcm4uCisqIEBwYXJhbSByZXN1bHRMZW5ndGggVGhlIG1h
eGltdW0gc2l6ZSBvZiByZXN1bHQuCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVF
cnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZl
ciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3
YXMgdHJ1bmNhdGVkLgorKiBAc2VlIHVkYXRfYXBwbHlQYXR0ZXJuCisqIEBzdGFibGUgSUNVIDIu
MAorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordWRhdF90b1BhdHRlcm4oICAgIGNv
bnN0ICAgVURhdGVGb3JtYXQgICAgICpmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICBVQm9v
bCAgICAgICAgICBsb2NhbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhciAgICAg
ICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICBy
ZXN1bHRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgKnN0
YXR1cyk7CisKKy8qKgorKiBTZXQgdGhlIHBhdHRlcm4gdXNlZCBieSBhbiBVRGF0ZUZvcm1hdC4K
KyogVGhlIHBhdHRlcm4gc2hvdWxkIGZvbGxvdyB0aGUgcGF0dGVybiBzeW50YXggcnVsZXMuCisq
IEBwYXJhbSBmb3JtYXQgVGhlIGZvcm1hdHRlciB0byBzZXQuCisqIEBwYXJhbSBsb2NhbGl6ZWQg
VFJVRSBpZiB0aGUgcGF0dGVybiBpcyBsb2NhbGl6ZWQsIEZBTFNFIG90aGVyd2lzZS4KKyogQHBh
cmFtIHBhdHRlcm4gVGhlIG5ldyBwYXR0ZXJuCisqIEBwYXJhbSBwYXR0ZXJuTGVuZ3RoIFRoZSBs
ZW5ndGggb2YgcGF0dGVybiwgb3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorKiBAc2VlIHVkYXRf
dG9QYXR0ZXJuCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQy
IAordWRhdF9hcHBseVBhdHRlcm4oICAgICAgICAgICAgVURhdGVGb3JtYXQgICAgICpmb3JtYXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUJvb2wgICAgICAgICAgbG9jYWxpemVkLAor
ICAgICAgICAgICAgICAgICAgICBjb25zdCAgIFVDaGFyICAgICAgICAgICAqcGF0dGVybiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgcGF0dGVybkxlbmd0aCk7
CisKKy8qKiAKKyAqIFRoZSBwb3NzaWJsZSB0eXBlcyBvZiBkYXRlIGZvcm1hdCBzeW1ib2xzIAor
ICogQHN0YWJsZSBJQ1UgMi42CisgKi8KK3R5cGVkZWYgZW51bSBVRGF0ZUZvcm1hdFN5bWJvbFR5
cGUgeworICAgIC8qKiBUaGUgZXJhIG5hbWVzLCBmb3IgZXhhbXBsZSBBRCAqLworICAgIFVEQVRf
RVJBUywKKyAgICAvKiogVGhlIG1vbnRoIG5hbWVzLCBmb3IgZXhhbXBsZSBGZWJydWFyeSAqLwor
ICAgIFVEQVRfTU9OVEhTLAorICAgIC8qKiBUaGUgc2hvcnQgbW9udGggbmFtZXMsIGZvciBleGFt
cGxlIEZlYi4gKi8KKyAgICBVREFUX1NIT1JUX01PTlRIUywKKyAgICAvKiogVGhlIHdlZWtkYXkg
bmFtZXMsIGZvciBleGFtcGxlIE1vbmRheSAqLworICAgIFVEQVRfV0VFS0RBWVMsCisgICAgLyoq
IFRoZSBzaG9ydCB3ZWVrZGF5IG5hbWVzLCBmb3IgZXhhbXBsZSBNb24uICovCisgICAgVURBVF9T
SE9SVF9XRUVLREFZUywKKyAgICAvKiogVGhlIEFNL1BNIG5hbWVzLCBmb3IgZXhhbXBsZSBBTSAq
LworICAgIFVEQVRfQU1fUE1TLAorICAgIC8qKiBUaGUgbG9jYWxpemVkIGNoYXJhY3RlcnMgKi8K
KyAgICBVREFUX0xPQ0FMSVpFRF9DSEFSUywKKyAgICAvKiogVGhlIGxvbmcgZXJhIG5hbWVzLCBm
b3IgZXhhbXBsZSBBbm5vIERvbWluaSAqLworICAgIFVEQVRfRVJBX05BTUVTLAorICAgIC8qKiBU
aGUgbmFycm93IG1vbnRoIG5hbWVzLCBmb3IgZXhhbXBsZSBGICovCisgICAgVURBVF9OQVJST1df
TU9OVEhTLAorICAgIC8qKiBUaGUgbmFycm93IHdlZWtkYXkgbmFtZXMsIGZvciBleGFtcGxlIE4g
Ki8KKyAgICBVREFUX05BUlJPV19XRUVLREFZUywKKyAgICAvKiogU3RhbmRhbG9uZSBjb250ZXh0
IHZlcnNpb25zIG9mIG1vbnRocyAqLworICAgIFVEQVRfU1RBTkRBTE9ORV9NT05USFMsCisgICAg
VURBVF9TVEFOREFMT05FX1NIT1JUX01PTlRIUywKKyAgICBVREFUX1NUQU5EQUxPTkVfTkFSUk9X
X01PTlRIUywKKyAgICAvKiogU3RhbmRhbG9uZSBjb250ZXh0IHZlcnNpb25zIG9mIHdlZWtkYXlz
ICovCisgICAgVURBVF9TVEFOREFMT05FX1dFRUtEQVlTLAorICAgIFVEQVRfU1RBTkRBTE9ORV9T
SE9SVF9XRUVLREFZUywKKyAgICBVREFUX1NUQU5EQUxPTkVfTkFSUk9XX1dFRUtEQVlTLAorICAg
IC8qKiBUaGUgcXVhcnRlcnMsIGZvciBleGFtcGxlIDFzdCBRdWFydGVyICovCisgICAgVURBVF9R
VUFSVEVSUywKKyAgICAvKiogVGhlIHNob3J0IHF1YXJ0ZXIgbmFtZXMsIGZvciBleGFtcGxlIFEx
ICovCisgICAgVURBVF9TSE9SVF9RVUFSVEVSUywKKyAgICAvKiogU3RhbmRhbG9uZSBjb250ZXh0
IHZlcnNpb25zIG9mIHF1YXJ0ZXJzICovCisgICAgVURBVF9TVEFOREFMT05FX1FVQVJURVJTLAor
ICAgIFVEQVRfU1RBTkRBTE9ORV9TSE9SVF9RVUFSVEVSUworCit9IFVEYXRlRm9ybWF0U3ltYm9s
VHlwZTsKKworc3RydWN0IFVEYXRlRm9ybWF0U3ltYm9sczsKKy8qKiBEYXRlIGZvcm1hdCBzeW1i
b2xzLgorICogIEZvciB1c2FnZSBpbiBDIHByb2dyYW1zLgorICogIEBzdGFibGUgSUNVIDIuNgor
ICovCit0eXBlZGVmIHN0cnVjdCBVRGF0ZUZvcm1hdFN5bWJvbHMgVURhdGVGb3JtYXRTeW1ib2xz
OworCisvKioKKyogR2V0IHRoZSBzeW1ib2xzIGFzc29jaWF0ZWQgd2l0aCBhbiBVRGF0ZUZvcm1h
dC4KKyogVGhlIHN5bWJvbHMgYXJlIHdoYXQgYSBVRGF0ZUZvcm1hdCB1c2VzIHRvIHJlcHJlc2Vu
dCBsb2NhbGUtc3BlY2lmaWMgZGF0YSwKKyogZm9yIGV4YW1wbGUgbW9udGggb3IgZGF5IG5hbWVz
LgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisqIEBwYXJhbSB0eXBlIFRo
ZSB0eXBlIG9mIHN5bWJvbHMgdG8gZ2V0LiAgT25lIG9mIFVEQVRfRVJBUywgVURBVF9NT05USFMs
IFVEQVRfU0hPUlRfTU9OVEhTLAorKiBVREFUX1dFRUtEQVlTLCBVREFUX1NIT1JUX1dFRUtEQVlT
LCBVREFUX0FNX1BNUywgb3IgVURBVF9MT0NBTElaRURfQ0hBUlMKKyogQHBhcmFtIHN5bWJvbElu
ZGV4IFRoZSBkZXNpcmVkIHN5bWJvbCBvZiB0eXBlIHR5cGUuCisqIEBwYXJhbSByZXN1bHQgQSBw
b2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIHBhdHRlcm4uCisqIEBwYXJhbSByZXN1
bHRMZW5ndGggVGhlIG1heGltdW0gc2l6ZSBvZiByZXN1bHQuCisqIEBwYXJhbSBzdGF0dXMgQSBw
b2ludGVyIHRvIGFuIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4g
VGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0
aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNhdGVkLgorKiBAc2VlIHVkYXRfY291bnRTeW1ib2xzCisq
IEBzZWUgdWRhdF9zZXRTeW1ib2xzCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGlu
dDMyX3QgVV9FWFBPUlQyIAordWRhdF9nZXRTeW1ib2xzKGNvbnN0ICAgVURhdGVGb3JtYXQgICAg
ICAgICAgICAgKmZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFVEYXRlRm9ybWF0U3ltYm9s
VHlwZSAgIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICAg
ICAgICBzeW1ib2xJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyICAgICAgICAg
ICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICAgICAg
ICAgICAgICAgICByZXN1bHRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JD
b2RlICAgICAgICAgICAgICAqc3RhdHVzKTsKKworLyoqCisqIENvdW50IHRoZSBudW1iZXIgb2Yg
cGFydGljdWxhciBzeW1ib2xzIGZvciBhbiBVRGF0ZUZvcm1hdC4KKyogVGhpcyBmdW5jdGlvbiBp
cyBtb3N0IHVzZWZ1bCBhcyBmb3IgZGV0ZW1pbmluZyB0aGUgbG9vcCB0ZXJtaW5hdGlvbiBjb25k
aXRpb24KKyogZm9yIGNhbGxzIHRvIHtAbGluayAjdWRhdF9nZXRTeW1ib2xzIH0uCisqIEBwYXJh
bSBmbXQgVGhlIGZvcm1hdHRlciB0byBxdWVyeS4KKyogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2Yg
c3ltYm9scyB0byBjb3VudC4gIE9uZSBvZiBVREFUX0VSQVMsIFVEQVRfTU9OVEhTLCBVREFUX1NI
T1JUX01PTlRIUywKKyogVURBVF9XRUVLREFZUywgVURBVF9TSE9SVF9XRUVLREFZUywgVURBVF9B
TV9QTVMsIG9yIFVEQVRfTE9DQUxJWkVEX0NIQVJTCisqIEByZXR1cm4gVGhlIG51bWJlciBvZiBz
eW1ib2xzIG9mIHR5cGUgdHlwZS4KKyogQHNlZSB1ZGF0X2dldFN5bWJvbHMKKyogQHNlZSB1ZGF0
X3NldFN5bWJvbHMKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VY
UE9SVDIgCit1ZGF0X2NvdW50U3ltYm9scyggICAgY29uc3QgICAgVURhdGVGb3JtYXQgICAgICAg
ICAgICAgICAgKmZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRGF0ZUZvcm1hdFN5
bWJvbFR5cGUgICAgdHlwZSk7CisKKy8qKgorKiBTZXQgdGhlIHN5bWJvbHMgYXNzb2NpYXRlZCB3
aXRoIGFuIFVEYXRlRm9ybWF0LgorKiBUaGUgc3ltYm9scyBhcmUgd2hhdCBhIFVEYXRlRm9ybWF0
IHVzZXMgdG8gcmVwcmVzZW50IGxvY2FsZS1zcGVjaWZpYyBkYXRhLAorKiBmb3IgZXhhbXBsZSBt
b250aCBvciBkYXkgbmFtZXMuCisqIEBwYXJhbSBmb3JtYXQgVGhlIGZvcm1hdHRlciB0byBzZXQK
KyogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2Ygc3ltYm9scyB0byBzZXQuICBPbmUgb2YgVURBVF9F
UkFTLCBVREFUX01PTlRIUywgVURBVF9TSE9SVF9NT05USFMsCisqIFVEQVRfV0VFS0RBWVMsIFVE
QVRfU0hPUlRfV0VFS0RBWVMsIFVEQVRfQU1fUE1TLCBvciBVREFUX0xPQ0FMSVpFRF9DSEFSUwor
KiBAcGFyYW0gc3ltYm9sSW5kZXggVGhlIGluZGV4IG9mIHRoZSBzeW1ib2wgdG8gc2V0IG9mIHR5
cGUgdHlwZS4KKyogQHBhcmFtIHZhbHVlIFRoZSBuZXcgdmFsdWUKKyogQHBhcmFtIHZhbHVlTGVu
Z3RoIFRoZSBsZW5ndGggb2YgdmFsdWUsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZAorKiBAcGFy
YW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9y
cworKiBAc2VlIHVkYXRfZ2V0U3ltYm9scworKiBAc2VlIHVkYXRfY291bnRTeW1ib2xzCisqIEBz
dGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWRhdF9zZXRTeW1i
b2xzKCAgICBVRGF0ZUZvcm1hdCAgICAgICAgICAgICAqZm9ybWF0LAorICAgICAgICAgICAgICAg
ICAgICBVRGF0ZUZvcm1hdFN5bWJvbFR5cGUgICB0eXBlLAorICAgICAgICAgICAgICAgICAgICBp
bnQzMl90ICAgICAgICAgICAgICAgICBzeW1ib2xJbmRleCwKKyAgICAgICAgICAgICAgICAgICAg
VUNoYXIgICAgICAgICAgICAgICAgICAgKnZhbHVlLAorICAgICAgICAgICAgICAgICAgICBpbnQz
Ml90ICAgICAgICAgICAgICAgICB2YWx1ZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgVUVy
cm9yQ29kZSAgICAgICAgICAgICAgKnN0YXR1cyk7CisKKy8qKgorICogR2V0IHRoZSBsb2NhbGUg
Zm9yIHRoaXMgZGF0ZSBmb3JtYXQgb2JqZWN0LgorICogWW91IGNhbiBjaG9vc2UgYmV0d2VlbiB2
YWxpZCBhbmQgYWN0dWFsIGxvY2FsZS4KKyAqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBn
ZXQgdGhlIGxvY2FsZSBmcm9tCisgKiBAcGFyYW0gdHlwZSB0eXBlIG9mIHRoZSBsb2NhbGUgd2Un
cmUgbG9va2luZyBmb3IgKHZhbGlkIG9yIGFjdHVhbCkgCisgKiBAcGFyYW0gc3RhdHVzIGVycm9y
IGNvZGUgZm9yIHRoZSBvcGVyYXRpb24KKyAqIEByZXR1cm4gdGhlIGxvY2FsZSBuYW1lCisgKiBA
c3RhYmxlIElDVSAyLjgKKyAqLworVV9TVEFCTEUgY29uc3QgY2hhciogVV9FWFBPUlQyCit1ZGF0
X2dldExvY2FsZUJ5VHlwZShjb25zdCBVRGF0ZUZvcm1hdCAqZm10LAorICAgICAgICAgICAgICAg
ICAgICAgVUxvY0RhdGFMb2NhbGVUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICBVRXJy
b3JDb2RlKiBzdGF0dXMpOyAKKworLyoqCisqIEV4dHJhY3QgdGhlIGRhdGUgcGF0dGVybiBmcm9t
IGEgVURhdGVGb3JtYXQgc2V0IGZvciByZWxhdGl2ZSBkYXRlIGZvcm1hdHRpbmcuCisqIFRoZSBw
YXR0ZXJuIHdpbGwgZm9sbG93IHRoZSBwYXR0ZXJuIHN5bnRheCBydWxlcy4KKyogQHBhcmFtIGZt
dCBUaGUgZm9ybWF0dGVyIHRvIHF1ZXJ5LgorKiBAcGFyYW0gcmVzdWx0IEEgcG9pbnRlciB0byBh
IGJ1ZmZlciB0byByZWNlaXZlIHRoZSBwYXR0ZXJuLgorKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIFRo
ZSBtYXhpbXVtIHNpemUgb2YgcmVzdWx0LgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBh
IFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHRvdGFsIGJ1
ZmZlciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1
dCB3YXMgdHJ1bmNhdGVkLgorKiBAc2VlIHVkYXRfYXBwbHlQYXR0ZXJuUmVsYXRpdmUKKyogQGlu
dGVybmFsIElDVSA0LjIgdGVjaG5vbG9neSBwcmV2aWV3CisqLworVV9JTlRFUk5BTCBpbnQzMl90
IFVfRVhQT1JUMiAKK3VkYXRfdG9QYXR0ZXJuUmVsYXRpdmVEYXRlKGNvbnN0IFVEYXRlRm9ybWF0
ICpmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhciAgICAgICAgICAgICAqcmVz
dWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgcmVzdWx0
TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICAgKnN0
YXR1cyk7CisKKy8qKgorKiBFeHRyYWN0IHRoZSB0aW1lIHBhdHRlcm4gZnJvbSBhIFVEYXRlRm9y
bWF0IHNldCBmb3IgcmVsYXRpdmUgZGF0ZSBmb3JtYXR0aW5nLgorKiBUaGUgcGF0dGVybiB3aWxs
IGZvbGxvdyB0aGUgcGF0dGVybiBzeW50YXggcnVsZXMuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1h
dHRlciB0byBxdWVyeS4KKyogQHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8g
cmVjZWl2ZSB0aGUgcGF0dGVybi4KKyogQHBhcmFtIHJlc3VsdExlbmd0aCBUaGUgbWF4aW11bSBz
aXplIG9mIHJlc3VsdC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYSBVRXJyb3JDb2Rl
IHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAcmV0dXJuIFRoZSB0b3RhbCBidWZmZXIgc2l6ZSBu
ZWVkZWQ7IGlmIGdyZWF0ZXIgdGhhbiByZXN1bHRMZW5ndGgsIHRoZSBvdXRwdXQgd2FzIHRydW5j
YXRlZC4KKyogQHNlZSB1ZGF0X2FwcGx5UGF0dGVyblJlbGF0aXZlCisqIEBpbnRlcm5hbCBJQ1Ug
NC4yIHRlY2hub2xvZ3kgcHJldmlldworKi8KK1VfSU5URVJOQUwgaW50MzJfdCBVX0VYUE9SVDIg
Cit1ZGF0X3RvUGF0dGVyblJlbGF0aXZlVGltZShjb25zdCBVRGF0ZUZvcm1hdCAqZm10LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIgICAgICAgICAgICAgKnJlc3VsdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgIHJlc3VsdExlbmd0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgICAgICpzdGF0dXMpOworCisv
KioKKyogU2V0IHRoZSBkYXRlICYgdGltZSBwYXR0ZXJucyB1c2VkIGJ5IGEgVURhdGVGb3JtYXQg
c2V0IGZvciByZWxhdGl2ZSBkYXRlIGZvcm1hdHRpbmcuCisqIFRoZSBwYXR0ZXJucyBzaG91bGQg
Zm9sbG93IHRoZSBwYXR0ZXJuIHN5bnRheCBydWxlcy4KKyogQHBhcmFtIGZvcm1hdCBUaGUgZm9y
bWF0dGVyIHRvIHNldC4KKyogQHBhcmFtIGRhdGVQYXR0ZXJuIFRoZSBuZXcgZGF0ZSBwYXR0ZXJu
CisqIEBwYXJhbSBkYXRlUGF0dGVybkxlbmd0aCBUaGUgbGVuZ3RoIG9mIGRhdGVQYXR0ZXJuLCBv
ciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisqIEBwYXJhbSB0aW1lUGF0dGVybiBUaGUgbmV3IHRp
bWUgcGF0dGVybgorKiBAcGFyYW0gdGltZVBhdHRlcm5MZW5ndGggVGhlIGxlbmd0aCBvZiB0aW1l
UGF0dGVybiwgb3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorKiBAcGFyYW0gc3RhdHVzIEEgcG9p
bnRlciB0byBhIFVFcnJvckNvZGUgdG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEBzZWUgdWRhdF90
b1BhdHRlcm5SZWxhdGl2ZURhdGUsIHVkYXRfdG9QYXR0ZXJuUmVsYXRpdmVUaW1lCisqIEBpbnRl
cm5hbCBJQ1UgNC4yIHRlY2hub2xvZ3kgcHJldmlldworKi8KK1VfSU5URVJOQUwgdm9pZCBVX0VY
UE9SVDIgCit1ZGF0X2FwcGx5UGF0dGVyblJlbGF0aXZlKFVEYXRlRm9ybWF0ICpmb3JtYXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICpkYXRlUGF0dGVybiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgZGF0ZVBhdHRlcm5MZW5ndGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICp0aW1lUGF0dGVybiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50MzJfdCAgICAgdGltZVBhdHRlcm5MZW5ndGgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICpzdGF0dXMpOworCisKKyNlbmRpZiAvKiAj
aWYgIVVDT05GSUdfTk9fRk9STUFUVElORyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5pY29kZS91bWlzYy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ljdS91bmljb2RlL3VtaXNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDg1NDUxZmM3NjdjMDU4MzVmNmMx
NWY1NjZmMzU2MmUyZDRhZjgzNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pY3UvdW5pY29kZS91bWlzYy5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqCisqICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIEludGVybmF0aW9uYWwgQnVzaW5lc3Mg
TWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioKKyogICBmaWxlIG5hbWU6ICB1bWlzYy5oCisqICAgZW5jb2Rpbmc6
ICAgVVMtQVNDSUkKKyogICB0YWIgc2l6ZTogICA4IChub3QgdXNlZCkKKyogICBpbmRlbnRhdGlv
bjo0CisqCisqICAgY3JlYXRlZCBvbjogMTk5OW9jdDE1CisqICAgY3JlYXRlZCBieTogTWFya3Vz
IFcuIFNjaGVyZXIKKyovCisKKyNpZm5kZWYgVU1JU0NfSAorI2RlZmluZSBVTUlTQ19ICisKKyNp
bmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorCisvKioKKyAqIFxmaWxlCisgKiBcYnJpZWYgIEMg
QVBJOm1pc2MgZGVmaW5pdGlvbnMgCisgKgorICogIFRoaXMgZmlsZSBjb250YWlucyBtaXNjZWxs
YW5lb3VzIGRlZmluaXRpb25zIGZvciB0aGUgQyBBUElzLiAKKyAqLworCitVX0NERUNMX0JFR0lO
CisKKy8qKiBBIHN0cnVjdCByZXByZXNlbnRpbmcgYSByYW5nZSBvZiB0ZXh0IGNvbnRhaW5pbmcg
YSBzcGVjaWZpYyBmaWVsZCAKKyAqICBAc3RhYmxlIElDVSAyLjAKKyAqLwordHlwZWRlZiBzdHJ1
Y3QgVUZpZWxkUG9zaXRpb24geworICAvKioKKyAgICogVGhlIGZpZWxkIAorICAgKiBAc3RhYmxl
IElDVSAyLjAKKyAgICovCisgIGludDMyX3QgZmllbGQ7CisgIC8qKgorICAgKiBUaGUgc3RhcnQg
b2YgdGhlIHRleHQgcmFuZ2UgY29udGFpbmluZyBmaWVsZCAKKyAgICogQHN0YWJsZSBJQ1UgMi4w
CisgICAqLworICBpbnQzMl90IGJlZ2luSW5kZXg7CisgIC8qKiAKKyAgICogVGhlIGxpbWl0IG9m
IHRoZSB0ZXh0IHJhbmdlIGNvbnRhaW5pbmcgZmllbGQgCisgICAqIEBzdGFibGUgSUNVIDIuMAor
ICAgKi8KKyAgaW50MzJfdCBlbmRJbmRleDsKK30gVUZpZWxkUG9zaXRpb247CisKKyNpZiAhVUNP
TkZJR19OT19TRVJWSUNFCisvKioKKyAqIE9wYXF1ZSB0eXBlIHJldHVybmVkIGJ5IHJlZ2lzdGVy
SW5zdGFuY2UsIHJlZ2lzdGVyRmFjdG9yeSBhbmQgdW5yZWdpc3RlciBmb3Igc2VydmljZSByZWdp
c3RyYXRpb24uCisgKiBAc3RhYmxlIElDVSAyLjYKKyAqLwordHlwZWRlZiBjb25zdCB2b2lkKiBV
UmVnaXN0cnlLZXk7CisjZW5kaWYKKworVV9DREVDTF9FTkQKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdW51bS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ljdS91bmljb2RlL3VudW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMTAyYmFiNThiM2QxYmIy
ZTJiMjA4MmNiNTU4OWM1ZGRlZmU4Y2MwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ljdS91bmljb2RlL3VudW0uaApAQCAtMCwwICsxLDk5OSBAQAorLyoKKyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IChDKSAxOTk3LTIwMTAsIEludGVybmF0aW9u
YWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyogQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyogTW9kaWZpY2F0aW9uIEhpc3Rvcnk6CisqCisqICAgRGF0ZSAgICAgICAg
TmFtZSAgICAgICAgRGVzY3JpcHRpb24KKyogICAwNi8yNC85OSAgICBoZWxlbmEgICAgICBJbnRl
Z3JhdGVkIEFsYW4ncyBORiBlbmhhbmNlbWVudHMgYW5kIEphdmEyIGJ1ZyBmaXhlcworKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgorKi8KKworI2lmbmRlZiBfVU5VTQorI2RlZmluZSBfVU5VTQorCisj
aW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKworI2lmICFVQ09ORklHX05PX0ZPUk1BVFRJTkcK
KworI2luY2x1ZGUgInVuaWNvZGUvbG9jYWxwb2ludGVyLmgiCisjaW5jbHVkZSAidW5pY29kZS91
bG9jLmgiCisjaW5jbHVkZSAidW5pY29kZS91bWlzYy5oIgorI2luY2x1ZGUgInVuaWNvZGUvcGFy
c2VlcnIuaCIKKy8qKgorICogXGZpbGUKKyAqIFxicmllZiBDIEFQSTogTnVtYmVyRm9ybWF0Cisg
KgorICogPGgyPiBOdW1iZXIgRm9ybWF0IEMgQVBJIDwvaDI+CisgKgorICogTnVtYmVyIEZvcm1h
dCBDIEFQSSAgUHJvdmlkZXMgZnVuY3Rpb25zIGZvcgorICogZm9ybWF0dGluZyBhbmQgcGFyc2lu
ZyBhIG51bWJlci4gIEFsc28gcHJvdmlkZXMgbWV0aG9kcyBmb3IKKyAqIGRldGVybWluaW5nIHdo
aWNoIGxvY2FsZXMgaGF2ZSBudW1iZXIgZm9ybWF0cywgYW5kIHdoYXQgdGhlaXIgbmFtZXMKKyAq
IGFyZS4KKyAqIDxQPgorICogVU51bWJlckZvcm1hdCBoZWxwcyB5b3UgdG8gZm9ybWF0IGFuZCBw
YXJzZSBudW1iZXJzIGZvciBhbnkgbG9jYWxlLgorICogWW91ciBjb2RlIGNhbiBiZSBjb21wbGV0
ZWx5IGluZGVwZW5kZW50IG9mIHRoZSBsb2NhbGUgY29udmVudGlvbnMKKyAqIGZvciBkZWNpbWFs
IHBvaW50cywgdGhvdXNhbmRzLXNlcGFyYXRvcnMsIG9yIGV2ZW4gdGhlIHBhcnRpY3VsYXIKKyAq
IGRlY2ltYWwgZGlnaXRzIHVzZWQsIG9yIHdoZXRoZXIgdGhlIG51bWJlciBmb3JtYXQgaXMgZXZl
biBkZWNpbWFsLgorICogVGhlcmUgYXJlIGRpZmZlcmVudCBudW1iZXIgZm9ybWF0IHN0eWxlcyBs
aWtlIGRlY2ltYWwsIGN1cnJlbmN5LAorICogcGVyY2VudCBhbmQgc3BlbGxvdXQuCisgKiA8UD4K
KyAqIFRvIGZvcm1hdCBhIG51bWJlciBmb3IgdGhlIGN1cnJlbnQgTG9jYWxlLCB1c2Ugb25lIG9m
IHRoZSBzdGF0aWMKKyAqIGZhY3RvcnkgbWV0aG9kczoKKyAqIDxwcmU+CisgKiBcY29kZQorICog
ICAgVUNoYXIgbXlTdHJpbmdbMjBdOworICogICAgZG91YmxlIG15TnVtYmVyID0gNy4wOworICog
ICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgKiAgICBVTnVtYmVyRm9ybWF0
KiBuZiA9IHVudW1fb3BlbihVTlVNX0RFRkFVTFQsIE5VTEwsIC0xLCBOVUxMLCBOVUxMLCAmc3Rh
dHVzKTsKKyAqICAgIHVudW1fZm9ybWF0RG91YmxlKG5mLCBteU51bWJlciwgbXlTdHJpbmcsIDIw
LCBOVUxMLCAmc3RhdHVzKTsKKyAqICAgIHByaW50ZigiIEV4YW1wbGUgMTogJXNcbiIsIGF1c3Ry
ZHVwKG15U3RyaW5nKSApOyAvL2F1c3RyZHVwKCBhIGZ1bmN0aW9uIHVzZWQgdG8gY29udmVydCBV
Q2hhciogdG8gY2hhciopCisgKiBcZW5kY29kZQorICogPC9wcmU+CisgKiBJZiB5b3UgYXJlIGZv
cm1hdHRpbmcgbXVsdGlwbGUgbnVtYmVycywgaXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gZ2V0Cisg
KiB0aGUgZm9ybWF0IGFuZCB1c2UgaXQgbXVsdGlwbGUgdGltZXMgc28gdGhhdCB0aGUgc3lzdGVt
IGRvZXNuJ3QKKyAqIGhhdmUgdG8gZmV0Y2ggdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2Nh
bCBsYW5ndWFnZSBhbmQgY291bnRyeQorICogY29udmVudGlvbnMgbXVsdGlwbGUgdGltZXMuCisg
KiA8cHJlPgorICogXGNvZGUKKyAqIHVpbnQzMl90IGksIHJlc3VsdGxlbmd0aCwgcmVzbGVubmVl
ZGVkOworICogVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgKiBVRmllbGRQb3Np
dGlvbiBwb3M7CisgKiB1aW50MzJfdCBhW10gPSB7IDEyMywgMzMzMywgLTEyMzQ1NjcgfTsKKyAq
IGNvbnN0IHVpbnQzMl90IGFfbGVuID0gc2l6ZW9mKGEpIC8gc2l6ZW9mKGFbMF0pOworICogVU51
bWJlckZvcm1hdCogbmY7CisgKiBVQ2hhciogcmVzdWx0ID0gTlVMTDsKKyAqCisgKiBuZiA9IHVu
dW1fb3BlbihVTlVNX0RFRkFVTFQsIE5VTEwsIC0xLCBOVUxMLCBOVUxMLCAmc3RhdHVzKTsKKyAq
IGZvciAoaSA9IDA7IGkgPCBhX2xlbjsgaSsrKSB7CisgKiAgICByZXN1bHRsZW5ndGg9MDsKKyAq
ICAgIHJlc2xlbm5lZWRlZD11bnVtX2Zvcm1hdChuZiwgYVtpXSwgTlVMTCwgcmVzdWx0bGVuZ3Ro
LCAmcG9zLCAmc3RhdHVzKTsKKyAqICAgIHJlc3VsdCA9IE5VTEw7CisgKiAgICBpZihzdGF0dXM9
PVVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKXsKKyAqICAgICAgIHN0YXR1cz1VX1pFUk9fRVJST1I7
CisgKiAgICAgICByZXN1bHRsZW5ndGg9cmVzbGVubmVlZGVkKzE7CisgKiAgICAgICByZXN1bHQ9
KFVDaGFyKiltYWxsb2Moc2l6ZW9mKFVDaGFyKSAqIHJlc3VsdGxlbmd0aCk7CisgKiAgICAgICB1
bnVtX2Zvcm1hdChuZiwgYVtpXSwgcmVzdWx0LCByZXN1bHRsZW5ndGgsICZwb3MsICZzdGF0dXMp
OworICogICAgfQorICogICAgcHJpbnRmKCAiIEV4YW1wbGUgMjogJXNcbiIsIGF1c3RyZHVwKHJl
c3VsdCkpOworICogICAgZnJlZShyZXN1bHQpOworICogfQorICogXGVuZGNvZGUKKyAqIDwvcHJl
PgorICogVG8gZm9ybWF0IGEgbnVtYmVyIGZvciBhIGRpZmZlcmVudCBMb2NhbGUsIHNwZWNpZnkg
aXQgaW4gdGhlCisgKiBjYWxsIHRvIHVudW1fb3BlbigpLgorICogPHByZT4KKyAqIFxjb2RlCisg
KiAgICAgVU51bWJlckZvcm1hdCogbmYgPSB1bnVtX29wZW4oVU5VTV9ERUZBVUxULCBOVUxMLCAt
MSwgImZyX0ZSIiwgTlVMTCwgJnN1Y2Nlc3MpCisgKiBcZW5kY29kZQorICogPC9wcmU+CisgKiBZ
b3UgY2FuIHVzZSBhIE51bWJlckZvcm1hdCBBUEkgdW51bV9wYXJzZSgpIHRvIHBhcnNlLgorICog
PHByZT4KKyAqIFxjb2RlCisgKiAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsK
KyAqICAgIGludDMyX3QgcG9zPTA7CisgKiAgICBpbnQzMl90IG51bTsKKyAqICAgIG51bSA9IHVu
dW1fcGFyc2UobmYsIHN0ciwgdV9zdHJsZW4oc3RyKSwgJnBvcywgJnN0YXR1cyk7CisgKiBcZW5k
Y29kZQorICogPC9wcmU+CisgKiBVc2UgVU5VTV9ERUNJTUFMIHRvIGdldCB0aGUgbm9ybWFsIG51
bWJlciBmb3JtYXQgZm9yIHRoYXQgY291bnRyeS4KKyAqIFRoZXJlIGFyZSBvdGhlciBzdGF0aWMg
b3B0aW9ucyBhdmFpbGFibGUuICBVc2UgVU5VTV9DVVJSRU5DWQorICogdG8gZ2V0IHRoZSBjdXJy
ZW5jeSBudW1iZXIgZm9ybWF0IGZvciB0aGF0IGNvdW50cnkuICBVc2UgVU5VTV9QRVJDRU5UCisg
KiB0byBnZXQgYSBmb3JtYXQgZm9yIGRpc3BsYXlpbmcgcGVyY2VudGFnZXMuIFdpdGggdGhpcyBm
b3JtYXQsIGEKKyAqIGZyYWN0aW9uIGZyb20gMC41MyBpcyBkaXNwbGF5ZWQgYXMgNTMlLgorICog
PFA+CisgKiBVc2UgYSBwYXR0ZXJuIHRvIGNyZWF0ZSBlaXRoZXIgYSBEZWNpbWFsRm9ybWF0IG9y
IGEgUnVsZUJhc2VkTnVtYmVyRm9ybWF0CisgKiBmb3JtYXR0ZXIuICBUaGUgcGF0dGVybiBtdXN0
IGNvbmZvcm0gdG8gdGhlIHN5bnRheCBkZWZpbmVkIGZvciB0aG9zZQorICogZm9ybWF0dGVycy4K
KyAqIDxQPgorICogWW91IGNhbiBhbHNvIGNvbnRyb2wgdGhlIGRpc3BsYXkgb2YgbnVtYmVycyB3
aXRoIHN1Y2ggZnVuY3Rpb24gYXMKKyAqIHVudW1fZ2V0QXR0cmlidWVzKCkgYW5kIHVudW1fc2V0
QXRyaWJ1dGVzKCksIHdoaWNoIGxldCB5b3Ugc2V0IHRoZQorICogbWltaW51bSBmcmFjdGlvbiBk
aWdpdHMsIGdyb3VwaW5nLCBldGMuCisgKiBAc2VlIFVOdW1iZXJGb3JtYXRBdHRyaWJ1dGVzIGZv
ciBtb3JlIGRldGFpbHMKKyAqIDxQPgorICogWW91IGNhbiBhbHNvIHVzZSBmb3JtcyBvZiB0aGUg
cGFyc2UgYW5kIGZvcm1hdCBtZXRob2RzIHdpdGgKKyAqIFBhcnNlUG9zaXRpb24gYW5kIFVGaWVs
ZFBvc2l0aW9uIHRvIGFsbG93IHlvdSB0bzoKKyAqIDx1bCB0eXBlPXJvdW5kPgorICogICA8bGk+
KGEpIHByb2dyZXNzaXZlbHkgcGFyc2UgdGhyb3VnaCBwaWVjZXMgb2YgYSBzdHJpbmcuCisgKiAg
IDxsaT4oYikgYWxpZ24gdGhlIGRlY2ltYWwgcG9pbnQgYW5kIG90aGVyIGFyZWFzLgorICogPC91
bD4KKyAqIDxwPgorICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjaGFuZ2Ugb3Igc2V0IHRoZSBz
eW1ib2xzIHVzZWQgZm9yIGEgcGFydGljdWxhcgorICogbG9jYWxlIGxpa2UgdGhlIGN1cnJlbmN5
IHN5bWJvbCwgdGhlIGdyb3VwaW5nIHNlcGVyYXRvciAsIG1vbmV0YXJ5IHNlcGVyYXRvcgorICog
ZXRjIGJ5IG1ha2luZyB1c2Ugb2YgZnVuY3Rpb25zIHVudW1fc2V0U3ltYm9scygpIGFuZCB1bnVt
X2dldFN5bWJvbHMoKS4KKyAqLworCisvKiogQSBudW1iZXIgZm9ybWF0dGVyLgorICogIEZvciB1
c2FnZSBpbiBDIHByb2dyYW1zLgorICogIEBzdGFibGUgSUNVIDIuMAorICovCit0eXBlZGVmIHZv
aWQqIFVOdW1iZXJGb3JtYXQ7CisKKy8qKiBUaGUgcG9zc2libGUgbnVtYmVyIGZvcm1hdCBzdHls
ZXMuIAorICogIEBzdGFibGUgSUNVIDIuMAorICovCit0eXBlZGVmIGVudW0gVU51bWJlckZvcm1h
dFN0eWxlIHsKKyAgICAvKioKKyAgICAgKiBEZWNpbWFsIGZvcm1hdCBkZWZpbmVkIGJ5IHBhdHRl
cm4gCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisgICAgVU5VTV9QQVRURVJOX0RF
Q0lNQUw9MCwKKyAgICAvKiogRGVjaW1hbCBmb3JtYXQgKi8KKyAgICBVTlVNX0RFQ0lNQUw9MSwK
KyAgICAvKiogQ3VycmVuY3kgZm9ybWF0ICovCisgICAgVU5VTV9DVVJSRU5DWSwKKyAgICAvKiog
UGVyY2VudCBmb3JtYXQgKi8KKyAgICBVTlVNX1BFUkNFTlQsCisgICAgLyoqIFNjaWVudGlmaWMg
Zm9ybWF0ICovCisgICAgVU5VTV9TQ0lFTlRJRklDLAorICAgIC8qKiBTcGVsbG91dCBydWxlLWJh
c2VkIGZvcm1hdCAqLworICAgIFVOVU1fU1BFTExPVVQsCisgICAgLyoqIAorICAgICAqIE9yZGlu
YWwgcnVsZS1iYXNlZCBmb3JtYXQgCisgICAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAgICovCisg
ICAgVU5VTV9PUkRJTkFMLAorICAgIC8qKiAKKyAgICAgKiBEdXJhdGlvbiBydWxlLWJhc2VkIGZv
cm1hdCAKKyAgICAgKiBAc3RhYmxlIElDVSAzLjAKKyAgICAgKi8KKyAgICBVTlVNX0RVUkFUSU9O
LAorICAgIC8qKiAKKyAgICAgKiBOdW1iZXJpbmcgc3lzdGVtIHJ1bGUtYmFzZWQgZm9ybWF0IAor
ICAgICAqIEBzdGFibGUgSUNVIDQuMgorICAgICAqLworICAgIFVOVU1fTlVNQkVSSU5HX1NZU1RF
TSwKKyAgICAvKiogCisgICAgICogUnVsZS1iYXNlZCBmb3JtYXQgZGVmaW5lZCBieSBwYXR0ZXJu
IAorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqLworICAgIFVOVU1fUEFUVEVSTl9SVUxF
QkFTRUQsCisgICAgLyoqIERlZmF1bHQgZm9ybWF0ICovCisgICAgVU5VTV9ERUZBVUxUID0gVU5V
TV9ERUNJTUFMLAorICAgIC8qKiAoQWxpYXMgZm9yIFVOVU1fUEFUVEVSTl9ERUNJTUFMKSAqLwor
ICAgIFVOVU1fSUdOT1JFID0gVU5VTV9QQVRURVJOX0RFQ0lNQUwKK30gVU51bWJlckZvcm1hdFN0
eWxlOworCisvKiogVGhlIHBvc3NpYmxlIG51bWJlciBmb3JtYXQgcm91bmRpbmcgbW9kZXMuIAor
ICogIEBzdGFibGUgSUNVIDIuMAorICovCit0eXBlZGVmIGVudW0gVU51bWJlckZvcm1hdFJvdW5k
aW5nTW9kZSB7CisgICAgVU5VTV9ST1VORF9DRUlMSU5HLAorICAgIFVOVU1fUk9VTkRfRkxPT1Is
CisgICAgVU5VTV9ST1VORF9ET1dOLAorICAgIFVOVU1fUk9VTkRfVVAsCisgICAgLyoqCisgICAg
ICogSGFsZi1ldmVuIHJvdW5kaW5nLCBtaXNzcGVsbGVkIG5hbWUKKyAgICAgKiBAZGVwcmVjYXRl
ZCwgSUNVIDMuOAorICAgICAqLworICAgIFVOVU1fRk9VTkRfSEFMRkVWRU4sCisgICAgVU5VTV9S
T1VORF9IQUxGRE9XTiwKKyAgICBVTlVNX1JPVU5EX0hBTEZVUCwKKyAgICAvKioKKyAgICAgKiBI
YWxmLWV2ZW4gcm91bmRpbmcKKyAgICAgKiBAc3RhYmxlLCBJQ1UgMy44CisgICAgICovCisgICAg
VU5VTV9ST1VORF9IQUxGRVZFTiA9IFVOVU1fRk9VTkRfSEFMRkVWRU4KK30gVU51bWJlckZvcm1h
dFJvdW5kaW5nTW9kZTsKKworLyoqIFRoZSBwb3NzaWJsZSBudW1iZXIgZm9ybWF0IHBhZCBwb3Np
dGlvbnMuIAorICogIEBzdGFibGUgSUNVIDIuMAorICovCit0eXBlZGVmIGVudW0gVU51bWJlckZv
cm1hdFBhZFBvc2l0aW9uIHsKKyAgICBVTlVNX1BBRF9CRUZPUkVfUFJFRklYLAorICAgIFVOVU1f
UEFEX0FGVEVSX1BSRUZJWCwKKyAgICBVTlVNX1BBRF9CRUZPUkVfU1VGRklYLAorICAgIFVOVU1f
UEFEX0FGVEVSX1NVRkZJWAorfSBVTnVtYmVyRm9ybWF0UGFkUG9zaXRpb247CisKKy8qKgorICog
Q3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgVU51bWJlckZvcm1hdCBmb3IgZm9ybWF0dGluZyBhbmQg
cGFyc2luZworICogbnVtYmVycy4gIEEgVU51bWJlckZvcm1hdCBtYXkgYmUgdXNlZCB0byBmb3Jt
YXQgbnVtYmVycyBieSBjYWxsaW5nCisgKiB7QGxpbmsgI3VudW1fZm9ybWF0IH0sIGFuZCB0byBw
YXJzZSBudW1iZXJzIGJ5IGNhbGxpbmcge0BsaW5rICN1bnVtX3BhcnNlIH0uCisgKiBUaGUgY2Fs
bGVyIG11c3QgY2FsbCB7QGxpbmsgI3VudW1fY2xvc2UgfSB3aGVuIGRvbmUgdG8gcmVsZWFzZSBy
ZXNvdXJjZXMKKyAqIHVzZWQgYnkgdGhpcyBvYmplY3QuCisgKiBAcGFyYW0gc3R5bGUgVGhlIHR5
cGUgb2YgbnVtYmVyIGZvcm1hdCB0byBvcGVuOiBvbmUgb2YKKyAqIFVOVU1fREVDSU1BTCwgVU5V
TV9DVVJSRU5DWSwgVU5VTV9QRVJDRU5ULCBVTlVNX1NDSUVOVElGSUMsIFVOVU1fU1BFTExPVVQs
CisgKiBVTlVNX1BBVFRFUk5fREVDSU1BTCwgVU5VTV9QQVRURVJOX1JVTEVCQVNFRCwgb3IgVU5V
TV9ERUZBVUxULgorICogSWYgVU5VTV9QQVRURVJOX0RFQ0lNQUwgb3IgVU5VTV9QQVRURVJOX1JV
TEVCQVNFRCBpcyBwYXNzZWQgdGhlbiB0aGUKKyAqIG51bWJlciBmb3JtYXQgaXMgb3BlbmVkIHVz
aW5nIHRoZSBnaXZlbiBwYXR0ZXJuLCB3aGljaCBtdXN0IGNvbmZvcm0KKyAqIHRvIHRoZSBzeW50
YXggZGVzY3JpYmVkIGluIERlY2ltYWxGb3JtYXQgb3IgUnVsZUJhc2VkTnVtYmVyRm9ybWF0LAor
ICogcmVzcGVjdGl2ZWx5LgorICogQHBhcmFtIHBhdHRlcm4gQSBwYXR0ZXJuIHNwZWNpZnlpbmcg
dGhlIGZvcm1hdCB0byB1c2UuIAorICogVGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCB1bmxlc3Mg
dGhlIHN0eWxlIGlzCisgKiBVTlVNX1BBVFRFUk5fREVDSU1BTCBvciBVTlVNX1BBVFRFUk5fUlVM
RUJBU0VELgorICogQHBhcmFtIHBhdHRlcm5MZW5ndGggVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJz
IGluIHRoZSBwYXR0ZXJuLCBvciAtMQorICogaWYgbnVsbC10ZXJtaW5hdGVkLiBUaGlzIHBhcmFt
ZXRlciBpcyBpZ25vcmVkIHVubGVzcyB0aGUgc3R5bGUgaXMKKyAqIFVOVU1fUEFUVEVSTi4KKyAq
IEBwYXJhbSBsb2NhbGUgQSBsb2NhbGUgaWRlbnRpZmllciB0byB1c2UgdG8gZGV0ZXJtaW5lIGZv
cm1hdHRpbmcKKyAqIGFuZCBwYXJzaW5nIGNvbnZlbnRpb25zLCBvciBOVUxMIHRvIHVzZSB0aGUg
ZGVmYXVsdCBsb2NhbGUuCisgKiBAcGFyYW0gcGFyc2VFcnIgQSBwb2ludGVyIHRvIGEgVVBhcnNl
RXJyb3Igc3RydWN0IHRvIHJlY2VpdmUgdGhlCisgKiBkZXRhaWxzIG9mIGFueSBwYXJzaW5nIGVy
cm9ycywgb3IgTlVMTCBpZiBubyBwYXJzaW5nIGVycm9yIGRldGFpbHMKKyAqIGFyZSBkZXNpcmVk
LgorICogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gaW5wdXQtb3V0cHV0IFVFcnJvckNv
ZGUuCisgKiBAcmV0dXJuIEEgcG9pbnRlciB0byBhIG5ld2x5IGNyZWF0ZWQgVU51bWJlckZvcm1h
dCwgb3IgTlVMTCBpZiBhbgorICogZXJyb3Igb2NjdXJyZWQuCisgKiBAc2VlIHVudW1fY2xvc2UK
KyAqIEBzZWUgRGVjaW1hbEZvcm1hdAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxF
IFVOdW1iZXJGb3JtYXQqIFVfRVhQT1JUMiAKK3VudW1fb3BlbiggIFVOdW1iZXJGb3JtYXRTdHls
ZSAgICBzdHlsZSwKKyAgICAgICAgICAgIGNvbnN0ICAgIFVDaGFyKiAgICBwYXR0ZXJuLAorICAg
ICAgICAgICAgaW50MzJfdCAgICAgICAgICAgIHBhdHRlcm5MZW5ndGgsCisgICAgICAgICAgICBj
b25zdCAgICBjaGFyKiAgICAgbG9jYWxlLAorICAgICAgICAgICAgVVBhcnNlRXJyb3IqICAgICAg
IHBhcnNlRXJyLAorICAgICAgICAgICAgVUVycm9yQ29kZSogICAgICAgIHN0YXR1cyk7CisKKwor
LyoqCisqIENsb3NlIGEgVU51bWJlckZvcm1hdC4KKyogT25jZSBjbG9zZWQsIGEgVU51bWJlckZv
cm1hdCBtYXkgbm8gbG9uZ2VyIGJlIHVzZWQuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0
byBjbG9zZS4KKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIg
Cit1bnVtX2Nsb3NlKFVOdW1iZXJGb3JtYXQqIGZtdCk7CisKKyNpZiBVX1NIT1dfQ1BMVVNQTFVT
X0FQSQorCitVX05BTUVTUEFDRV9CRUdJTgorCisvKioKKyAqIFxjbGFzcyBMb2NhbFVOdW1iZXJG
b3JtYXRQb2ludGVyCisgKiAiU21hcnQgcG9pbnRlciIgY2xhc3MsIGNsb3NlcyBhIFVOdW1iZXJG
b3JtYXQgdmlhIHVudW1fY2xvc2UoKS4KKyAqIEZvciBtb3N0IG1ldGhvZHMgc2VlIHRoZSBMb2Nh
bFBvaW50ZXJCYXNlIGJhc2UgY2xhc3MuCisgKgorICogQHNlZSBMb2NhbFBvaW50ZXJCYXNlCisg
KiBAc2VlIExvY2FsUG9pbnRlcgorICogQHN0YWJsZSBJQ1UgNC40CisgKi8KK1VfREVGSU5FX0xP
Q0FMX09QRU5fUE9JTlRFUihMb2NhbFVOdW1iZXJGb3JtYXRQb2ludGVyLCBVTnVtYmVyRm9ybWF0
LCB1bnVtX2Nsb3NlKTsKKworVV9OQU1FU1BBQ0VfRU5ECisKKyNlbmRpZgorCisvKioKKyAqIE9w
ZW4gYSBjb3B5IG9mIGEgVU51bWJlckZvcm1hdC4KKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMg
YSBkZWVwIGNvcHkuCisgKiBAcGFyYW0gZm10IFRoZSBmb3JtYXQgdG8gY29weQorICogQHBhcmFt
IHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMu
CisgKiBAcmV0dXJuIEEgcG9pbnRlciB0byBhIFVOdW1iZXJGb3JtYXQgaWRlbnRpY2FsIHRvIGZt
dC4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBVTnVtYmVyRm9ybWF0KiBVX0VY
UE9SVDIgCit1bnVtX2Nsb25lKGNvbnN0IFVOdW1iZXJGb3JtYXQgKmZtdCwKKyAgICAgICBVRXJy
b3JDb2RlICpzdGF0dXMpOworCisvKioKKyogRm9ybWF0IGFuIGludGVnZXIgdXNpbmcgYSBVTnVt
YmVyRm9ybWF0LgorKiBUaGUgaW50ZWdlciB3aWxsIGJlIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8g
dGhlIFVOdW1iZXJGb3JtYXQncyBsb2NhbGUuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0
byB1c2UuCisqIEBwYXJhbSBudW1iZXIgVGhlIG51bWJlciB0byBmb3JtYXQuCisqIEBwYXJhbSBy
ZXN1bHQgQSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIGZvcm1hdHRlZCBudW1i
ZXIuCisqIEBwYXJhbSByZXN1bHRMZW5ndGggVGhlIG1heGltdW0gc2l6ZSBvZiByZXN1bHQuCisq
IEBwYXJhbSBwb3MgICAgQSBwb2ludGVyIHRvIGEgVUZpZWxkUG9zaXRpb24uICBPbiBpbnB1dCwg
cG9zaXRpb24tPmZpZWxkCisqIGlzIHJlYWQuICBPbiBvdXRwdXQsIHBvc2l0aW9uLT5iZWdpbklu
ZGV4IGFuZCBwb3NpdGlvbi0+ZW5kSW5kZXggaW5kaWNhdGUKKyogdGhlIGJlZ2lubmluZyBhbmQg
ZW5kaW5nIGluZGljZXMgb2YgZmllbGQgbnVtYmVyIHBvc2l0aW9uLT5maWVsZCwgaWYgc3VjaAor
KiBhIGZpZWxkIGV4aXN0cy4gIFRoaXMgcGFyYW1ldGVyIG1heSBiZSBOVUxMLCBpbiB3aGljaCBj
YXNlIG5vIGZpZWxkCisqIEBwYXJhbSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIFVFcnJvckNvZGUg
dG8gcmVjZWl2ZSBhbnkgZXJyb3JzCisqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5l
ZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwgdGhlIG91dHB1dCB3YXMgdHJ1bmNh
dGVkLgorKiBAc2VlIHVudW1fZm9ybWF0SW50NjQKKyogQHNlZSB1bnVtX2Zvcm1hdERvdWJsZQor
KiBAc2VlIHVudW1fcGFyc2UKKyogQHNlZSB1bnVtX3BhcnNlSW50NjQKKyogQHNlZSB1bnVtX3Bh
cnNlRG91YmxlCisqIEBzZWUgVUZpZWxkUG9zaXRpb24KKyogQHN0YWJsZSBJQ1UgMi4wCisqLwor
VV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1bnVtX2Zvcm1hdCggICAgY29uc3QgICAgVU51
bWJlckZvcm1hdCogICAgZm10LAorICAgICAgICBpbnQzMl90ICAgICAgICAgICAgbnVtYmVyLAor
ICAgICAgICBVQ2hhciogICAgICAgICAgICByZXN1bHQsCisgICAgICAgIGludDMyX3QgICAgICAg
ICAgICByZXN1bHRMZW5ndGgsCisgICAgICAgIFVGaWVsZFBvc2l0aW9uICAgICpwb3MsCisgICAg
ICAgIFVFcnJvckNvZGUqICAgICAgICBzdGF0dXMpOworCisvKioKKyogRm9ybWF0IGFuIGludDY0
IHVzaW5nIGEgVU51bWJlckZvcm1hdC4KKyogVGhlIGludDY0IHdpbGwgYmUgZm9ybWF0dGVkIGFj
Y29yZGluZyB0byB0aGUgVU51bWJlckZvcm1hdCdzIGxvY2FsZS4KKyogQHBhcmFtIGZtdCBUaGUg
Zm9ybWF0dGVyIHRvIHVzZS4KKyogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIHRvIGZvcm1hdC4K
KyogQHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgZm9y
bWF0dGVkIG51bWJlci4KKyogQHBhcmFtIHJlc3VsdExlbmd0aCBUaGUgbWF4aW11bSBzaXplIG9m
IHJlc3VsdC4KKyogQHBhcmFtIHBvcyAgICBBIHBvaW50ZXIgdG8gYSBVRmllbGRQb3NpdGlvbi4g
IE9uIGlucHV0LCBwb3NpdGlvbi0+ZmllbGQKKyogaXMgcmVhZC4gIE9uIG91dHB1dCwgcG9zaXRp
b24tPmJlZ2luSW5kZXggYW5kIHBvc2l0aW9uLT5lbmRJbmRleCBpbmRpY2F0ZQorKiB0aGUgYmVn
aW5uaW5nIGFuZCBlbmRpbmcgaW5kaWNlcyBvZiBmaWVsZCBudW1iZXIgcG9zaXRpb24tPmZpZWxk
LCBpZiBzdWNoCisqIGEgZmllbGQgZXhpc3RzLiAgVGhpcyBwYXJhbWV0ZXIgbWF5IGJlIE5VTEws
IGluIHdoaWNoIGNhc2Ugbm8gZmllbGQKKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4g
VUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUgdG90YWwgYnVm
ZmVyIHNpemUgbmVlZGVkOyBpZiBncmVhdGVyIHRoYW4gcmVzdWx0TGVuZ3RoLCB0aGUgb3V0cHV0
IHdhcyB0cnVuY2F0ZWQuCisqIEBzZWUgdW51bV9mb3JtYXQKKyogQHNlZSB1bnVtX2Zvcm1hdERv
dWJsZQorKiBAc2VlIHVudW1fcGFyc2UKKyogQHNlZSB1bnVtX3BhcnNlSW50NjQKKyogQHNlZSB1
bnVtX3BhcnNlRG91YmxlCisqIEBzZWUgVUZpZWxkUG9zaXRpb24KKyogQHN0YWJsZSBJQ1UgMi4w
CisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1bnVtX2Zvcm1hdEludDY0KGNvbnN0
IFVOdW1iZXJGb3JtYXQgKmZtdCwKKyAgICAgICAgaW50NjRfdCAgICAgICAgIG51bWJlciwKKyAg
ICAgICAgVUNoYXIqICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgaW50MzJfdCAgICAgICAgIHJl
c3VsdExlbmd0aCwKKyAgICAgICAgVUZpZWxkUG9zaXRpb24gKnBvcywKKyAgICAgICAgVUVycm9y
Q29kZSogICAgIHN0YXR1cyk7CisKKy8qKgorKiBGb3JtYXQgYSBkb3VibGUgdXNpbmcgYSBVTnVt
YmVyRm9ybWF0LgorKiBUaGUgZG91YmxlIHdpbGwgYmUgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0
aGUgVU51bWJlckZvcm1hdCdzIGxvY2FsZS4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRv
IHVzZS4KKyogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIHRvIGZvcm1hdC4KKyogQHBhcmFtIHJl
c3VsdCBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgZm9ybWF0dGVkIG51bWJl
ci4KKyogQHBhcmFtIHJlc3VsdExlbmd0aCBUaGUgbWF4aW11bSBzaXplIG9mIHJlc3VsdC4KKyog
QHBhcmFtIHBvcyAgICBBIHBvaW50ZXIgdG8gYSBVRmllbGRQb3NpdGlvbi4gIE9uIGlucHV0LCBw
b3NpdGlvbi0+ZmllbGQKKyogaXMgcmVhZC4gIE9uIG91dHB1dCwgcG9zaXRpb24tPmJlZ2luSW5k
ZXggYW5kIHBvc2l0aW9uLT5lbmRJbmRleCBpbmRpY2F0ZQorKiB0aGUgYmVnaW5uaW5nIGFuZCBl
bmRpbmcgaW5kaWNlcyBvZiBmaWVsZCBudW1iZXIgcG9zaXRpb24tPmZpZWxkLCBpZiBzdWNoCisq
IGEgZmllbGQgZXhpc3RzLiAgVGhpcyBwYXJhbWV0ZXIgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNh
c2Ugbm8gZmllbGQKKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0
byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUgdG90YWwgYnVmZmVyIHNpemUgbmVl
ZGVkOyBpZiBncmVhdGVyIHRoYW4gcmVzdWx0TGVuZ3RoLCB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0
ZWQuCisqIEBzZWUgdW51bV9mb3JtYXQKKyogQHNlZSB1bnVtX2Zvcm1hdEludDY0CisqIEBzZWUg
dW51bV9wYXJzZQorKiBAc2VlIHVudW1fcGFyc2VJbnQ2NAorKiBAc2VlIHVudW1fcGFyc2VEb3Vi
bGUKKyogQHNlZSBVRmllbGRQb3NpdGlvbgorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJM
RSBpbnQzMl90IFVfRVhQT1JUMiAKK3VudW1fZm9ybWF0RG91YmxlKCAgICBjb25zdCAgICBVTnVt
YmVyRm9ybWF0KiAgZm10LAorICAgICAgICAgICAgZG91YmxlICAgICAgICAgIG51bWJlciwKKyAg
ICAgICAgICAgIFVDaGFyKiAgICAgICAgICByZXN1bHQsCisgICAgICAgICAgICBpbnQzMl90ICAg
ICAgICAgcmVzdWx0TGVuZ3RoLAorICAgICAgICAgICAgVUZpZWxkUG9zaXRpb24gICpwb3MsIC8q
IDAgaWYgaWdub3JlICovCisgICAgICAgICAgICBVRXJyb3JDb2RlKiAgICAgc3RhdHVzKTsKKwor
LyoqCisqIEZvcm1hdCBhIGRlY2ltYWwgbnVtYmVyIHVzaW5nIGEgVU51bWJlckZvcm1hdC4KKyog
VGhlIG51bWJlciB3aWxsIGJlIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIFVOdW1iZXJGb3Jt
YXQncyBsb2NhbGUuCisqIFRoZSBzeW50YXggb2YgdGhlIGlucHV0IG51bWJlciBpcyBhICJudW1l
cmljIHN0cmluZyIKKyogYXMgZGVmaW5lZCBpbiB0aGUgRGVjaW1hbCBBcml0aG1ldGljIFNwZWNp
ZmljYXRpb24sIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vc3BlbGVvdHJvdmUuY29tL2RlY2ltYWwK
KyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHVzZS4KKyogQHBhcmFtIG51bWJlciBUaGUg
bnVtYmVyIHRvIGZvcm1hdC4KKyogQHBhcmFtIGxlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBpbnB1
dCBudW1iZXIsIG9yIC0xIGlmIHRoZSBpbnB1dCBpcyBudWwtdGVybWluYXRlZC4KKyogQHBhcmFt
IHJlc3VsdCBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgZm9ybWF0dGVkIG51
bWJlci4KKyogQHBhcmFtIHJlc3VsdExlbmd0aCBUaGUgbWF4aW11bSBzaXplIG9mIHJlc3VsdC4K
KyogQHBhcmFtIHBvcyAgICBBIHBvaW50ZXIgdG8gYSBVRmllbGRQb3NpdGlvbi4gIE9uIGlucHV0
LCBwb3NpdGlvbi0+ZmllbGQKKyogICAgICAgICAgICAgICBpcyByZWFkLiAgT24gb3V0cHV0LCBw
b3NpdGlvbi0+YmVnaW5JbmRleCBhbmQgcG9zaXRpb24tPmVuZEluZGV4IGluZGljYXRlCisqICAg
ICAgICAgICAgICAgdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIGluZGljZXMgb2YgZmllbGQgbnVt
YmVyIHBvc2l0aW9uLT5maWVsZCwgaWYgc3VjaAorKiAgICAgICAgICAgICAgIGEgZmllbGQgZXhp
c3RzLiAgVGhpcyBwYXJhbWV0ZXIgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2UgaXQgaXMgaWdu
b3JlZC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNl
aXZlIGFueSBlcnJvcnMKKyogQHJldHVybiBUaGUgdG90YWwgYnVmZmVyIHNpemUgbmVlZGVkOyBp
ZiBncmVhdGVyIHRoYW4gcmVzdWx0TGVuZ3RoLCB0aGUgb3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisq
IEBzZWUgdW51bV9mb3JtYXQKKyogQHNlZSB1bnVtX2Zvcm1hdEludDY0CisqIEBzZWUgdW51bV9w
YXJzZQorKiBAc2VlIHVudW1fcGFyc2VJbnQ2NAorKiBAc2VlIHVudW1fcGFyc2VEb3VibGUKKyog
QHNlZSBVRmllbGRQb3NpdGlvbgorKiBAc3RhYmxlIElDVSA0LjQgCisqLworVV9TVEFCTEUgaW50
MzJfdCBVX0VYUE9SVDIgCit1bnVtX2Zvcm1hdERlY2ltYWwoICAgIGNvbnN0ICAgIFVOdW1iZXJG
b3JtYXQqICBmbXQsCisgICAgICAgICAgICBjb25zdCBjaGFyICogICAgbnVtYmVyLAorICAgICAg
ICAgICAgaW50MzJfdCAgICAgICAgIGxlbmd0aCwKKyAgICAgICAgICAgIFVDaGFyKiAgICAgICAg
ICByZXN1bHQsCisgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgcmVzdWx0TGVuZ3RoLAorICAg
ICAgICAgICAgVUZpZWxkUG9zaXRpb24gICpwb3MsIC8qIDAgaWYgaWdub3JlICovCisgICAgICAg
ICAgICBVRXJyb3JDb2RlKiAgICAgc3RhdHVzKTsKKworLyoqCisgKiBGb3JtYXQgYSBkb3VibGUg
Y3VycmVuY3kgYW1vdW50IHVzaW5nIGEgVU51bWJlckZvcm1hdC4KKyAqIFRoZSBkb3VibGUgd2ls
bCBiZSBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBVTnVtYmVyRm9ybWF0J3MgbG9jYWxlLgor
ICogQHBhcmFtIGZtdCB0aGUgZm9ybWF0dGVyIHRvIHVzZQorICogQHBhcmFtIG51bWJlciB0aGUg
bnVtYmVyIHRvIGZvcm1hdAorICogQHBhcmFtIGN1cnJlbmN5IHRoZSAzLWxldHRlciBudWxsLXRl
cm1pbmF0ZWQgSVNPIDQyMTcgY3VycmVuY3kgY29kZQorICogQHBhcmFtIHJlc3VsdCBhIHBvaW50
ZXIgdG8gdGhlIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBmb3JtYXR0ZWQgbnVtYmVyCisgKiBAcGFy
YW0gcmVzdWx0TGVuZ3RoIHRoZSBtYXhpbXVtIG51bWJlciBvZiBVQ2hhcnMgdG8gd3JpdGUgdG8g
cmVzdWx0CisgKiBAcGFyYW0gcG9zIGEgcG9pbnRlciB0byBhIFVGaWVsZFBvc2l0aW9uLiAgT24g
aW5wdXQsCisgKiBwb3NpdGlvbi0+ZmllbGQgaXMgcmVhZC4gIE9uIG91dHB1dCwgcG9zaXRpb24t
PmJlZ2luSW5kZXggYW5kCisgKiBwb3NpdGlvbi0+ZW5kSW5kZXggaW5kaWNhdGUgdGhlIGJlZ2lu
bmluZyBhbmQgZW5kaW5nIGluZGljZXMgb2YKKyAqIGZpZWxkIG51bWJlciBwb3NpdGlvbi0+Zmll
bGQsIGlmIHN1Y2ggYSBmaWVsZCBleGlzdHMuICBUaGlzCisgKiBwYXJhbWV0ZXIgbWF5IGJlIE5V
TEwsIGluIHdoaWNoIGNhc2UgaXQgaXMgaWdub3JlZC4KKyAqIEBwYXJhbSBzdGF0dXMgYSBwb2lu
dGVyIHRvIGFuIGlucHV0LW91dHB1dCBVRXJyb3JDb2RlCisgKiBAcmV0dXJuIHRoZSB0b3RhbCBi
dWZmZXIgc2l6ZSBuZWVkZWQ7IGlmIGdyZWF0ZXIgdGhhbiByZXN1bHRMZW5ndGgsCisgKiB0aGUg
b3V0cHV0IHdhcyB0cnVuY2F0ZWQuCisgKiBAc2VlIHVudW1fZm9ybWF0RG91YmxlCisgKiBAc2Vl
IHVudW1fcGFyc2VEb3VibGVDdXJyZW5jeQorICogQHNlZSBVRmllbGRQb3NpdGlvbgorICogQHN0
YWJsZSBJQ1UgMy4wCisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyIAordW51bV9mb3Jt
YXREb3VibGVDdXJyZW5jeShjb25zdCBVTnVtYmVyRm9ybWF0KiBmbXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSBudW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVD
aGFyKiBjdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIqIHJlc3VsdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCByZXN1bHRMZW5ndGgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIFVGaWVsZFBvc2l0aW9uKiBwb3MsIC8qIGlnbm9yZWQgaWYgMCAq
LworICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiBzdGF0dXMpOworCisvKioK
KyogUGFyc2UgYSBzdHJpbmcgaW50byBhbiBpbnRlZ2VyIHVzaW5nIGEgVU51bWJlckZvcm1hdC4K
KyogVGhlIHN0cmluZyB3aWxsIGJlIHBhcnNlZCBhY2NvcmRpbmcgdG8gdGhlIFVOdW1iZXJGb3Jt
YXQncyBsb2NhbGUuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byB1c2UuCisqIEBwYXJh
bSB0ZXh0IFRoZSB0ZXh0IHRvIHBhcnNlLgorKiBAcGFyYW0gdGV4dExlbmd0aCBUaGUgbGVuZ3Ro
IG9mIHRleHQsIG9yIC0xIGlmIG51bGwtdGVybWluYXRlZC4KKyogQHBhcmFtIHBhcnNlUG9zIElm
IG5vdCAwLCBvbiBpbnB1dCBhIHBvaW50ZXIgdG8gYW4gaW50ZWdlciBzcGVjaWZ5aW5nIHRoZSBv
ZmZzZXQgYXQgd2hpY2gKKyogdG8gYmVnaW4gcGFyc2luZy4gIElmIG5vdCAwLCBvbiBvdXRwdXQg
dGhlIG9mZnNldCBhdCB3aGljaCBwYXJzaW5nIGVuZGVkLgorKiBAcGFyYW0gc3RhdHVzIEEgcG9p
bnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAcmV0dXJuIFRo
ZSB2YWx1ZSBvZiB0aGUgcGFyc2VkIGludGVnZXIKKyogQHNlZSB1bnVtX3BhcnNlSW50NjQKKyog
QHNlZSB1bnVtX3BhcnNlRG91YmxlCisqIEBzZWUgdW51bV9mb3JtYXQKKyogQHNlZSB1bnVtX2Zv
cm1hdEludDY0CisqIEBzZWUgdW51bV9mb3JtYXREb3VibGUKKyogQHN0YWJsZSBJQ1UgMi4wCisq
LworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIgCit1bnVtX3BhcnNlKCAgICBjb25zdCAgIFVO
dW1iZXJGb3JtYXQqICBmbXQsCisgICAgICAgIGNvbnN0ICAgVUNoYXIqICAgICAgICAgIHRleHQs
CisgICAgICAgIGludDMyX3QgICAgICAgICB0ZXh0TGVuZ3RoLAorICAgICAgICBpbnQzMl90ICAg
ICAgICAgKnBhcnNlUG9zIC8qIDAgPSBzdGFydCAqLywKKyAgICAgICAgVUVycm9yQ29kZSAgICAg
ICpzdGF0dXMpOworCisvKioKKyogUGFyc2UgYSBzdHJpbmcgaW50byBhbiBpbnQ2NCB1c2luZyBh
IFVOdW1iZXJGb3JtYXQuCisqIFRoZSBzdHJpbmcgd2lsbCBiZSBwYXJzZWQgYWNjb3JkaW5nIHRv
IHRoZSBVTnVtYmVyRm9ybWF0J3MgbG9jYWxlLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIg
dG8gdXNlLgorKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBwYXJzZS4KKyogQHBhcmFtIHRleHRM
ZW5ndGggVGhlIGxlbmd0aCBvZiB0ZXh0LCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisqIEBw
YXJhbSBwYXJzZVBvcyBJZiBub3QgMCwgb24gaW5wdXQgYSBwb2ludGVyIHRvIGFuIGludGVnZXIg
c3BlY2lmeWluZyB0aGUgb2Zmc2V0IGF0IHdoaWNoCisqIHRvIGJlZ2luIHBhcnNpbmcuICBJZiBu
b3QgMCwgb24gb3V0cHV0IHRoZSBvZmZzZXQgYXQgd2hpY2ggcGFyc2luZyBlbmRlZC4KKyogQHBh
cmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJv
cnMKKyogQHJldHVybiBUaGUgdmFsdWUgb2YgdGhlIHBhcnNlZCBpbnRlZ2VyCisqIEBzZWUgdW51
bV9wYXJzZQorKiBAc2VlIHVudW1fcGFyc2VEb3VibGUKKyogQHNlZSB1bnVtX2Zvcm1hdAorKiBA
c2VlIHVudW1fZm9ybWF0SW50NjQKKyogQHNlZSB1bnVtX2Zvcm1hdERvdWJsZQorKiBAc3RhYmxl
IElDVSAyLjgKKyovCitVX1NUQUJMRSBpbnQ2NF90IFVfRVhQT1JUMiAKK3VudW1fcGFyc2VJbnQ2
NChjb25zdCBVTnVtYmVyRm9ybWF0KiAgZm10LAorICAgICAgICBjb25zdCBVQ2hhciogIHRleHQs
CisgICAgICAgIGludDMyX3QgICAgICAgdGV4dExlbmd0aCwKKyAgICAgICAgaW50MzJfdCAgICAg
ICAqcGFyc2VQb3MgLyogMCA9IHN0YXJ0ICovLAorICAgICAgICBVRXJyb3JDb2RlICAgICpzdGF0
dXMpOworCisvKioKKyogUGFyc2UgYSBzdHJpbmcgaW50byBhIGRvdWJsZSB1c2luZyBhIFVOdW1i
ZXJGb3JtYXQuCisqIFRoZSBzdHJpbmcgd2lsbCBiZSBwYXJzZWQgYWNjb3JkaW5nIHRvIHRoZSBV
TnVtYmVyRm9ybWF0J3MgbG9jYWxlLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gdXNl
LgorKiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBwYXJzZS4KKyogQHBhcmFtIHRleHRMZW5ndGgg
VGhlIGxlbmd0aCBvZiB0ZXh0LCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisqIEBwYXJhbSBw
YXJzZVBvcyBJZiBub3QgMCwgb24gaW5wdXQgYSBwb2ludGVyIHRvIGFuIGludGVnZXIgc3BlY2lm
eWluZyB0aGUgb2Zmc2V0IGF0IHdoaWNoCisqIHRvIGJlZ2luIHBhcnNpbmcuICBJZiBub3QgMCwg
b24gb3V0cHV0IHRoZSBvZmZzZXQgYXQgd2hpY2ggcGFyc2luZyBlbmRlZC4KKyogQHBhcmFtIHN0
YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyog
QHJldHVybiBUaGUgdmFsdWUgb2YgdGhlIHBhcnNlZCBkb3VibGUKKyogQHNlZSB1bnVtX3BhcnNl
CisqIEBzZWUgdW51bV9wYXJzZUludDY0CisqIEBzZWUgdW51bV9mb3JtYXQKKyogQHNlZSB1bnVt
X2Zvcm1hdEludDY0CisqIEBzZWUgdW51bV9mb3JtYXREb3VibGUKKyogQHN0YWJsZSBJQ1UgMi4w
CisqLworVV9TVEFCTEUgZG91YmxlIFVfRVhQT1JUMiAKK3VudW1fcGFyc2VEb3VibGUoICAgIGNv
bnN0ICAgVU51bWJlckZvcm1hdCogIGZtdCwKKyAgICAgICAgICAgIGNvbnN0ICAgVUNoYXIqICAg
ICAgICAgIHRleHQsCisgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgdGV4dExlbmd0aCwKKyAg
ICAgICAgICAgIGludDMyX3QgICAgICAgICAqcGFyc2VQb3MgLyogMCA9IHN0YXJ0ICovLAorICAg
ICAgICAgICAgVUVycm9yQ29kZSAgICAgICpzdGF0dXMpOworCisKKy8qKgorKiBQYXJzZSBhIG51
bWJlciBmcm9tIGEgc3RyaW5nIGludG8gYW4gdW5mb3JtYXR0ZWQgbnVtZXJpYyBzdHJpbmcgdXNp
bmcgYSBVTnVtYmVyRm9ybWF0LgorKiBUaGUgaW5wdXQgc3RyaW5nIHdpbGwgYmUgcGFyc2VkIGFj
Y29yZGluZyB0byB0aGUgVU51bWJlckZvcm1hdCdzIGxvY2FsZS4KKyogVGhlIHN5bnRheCBvZiB0
aGUgb3V0cHV0IGlzIGEgIm51bWVyaWMgc3RyaW5nIgorKiBhcyBkZWZpbmVkIGluIHRoZSBEZWNp
bWFsIEFyaXRobWV0aWMgU3BlY2lmaWNhdGlvbiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly9zcGVs
ZW90cm92ZS5jb20vZGVjaW1hbAorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gdXNlLgor
KiBAcGFyYW0gdGV4dCBUaGUgdGV4dCB0byBwYXJzZS4KKyogQHBhcmFtIHRleHRMZW5ndGggVGhl
IGxlbmd0aCBvZiB0ZXh0LCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQuCisqIEBwYXJhbSBwYXJz
ZVBvcyBJZiBub3QgMCwgb24gaW5wdXQgYSBwb2ludGVyIHRvIGFuIGludGVnZXIgc3BlY2lmeWlu
ZyB0aGUgb2Zmc2V0IGF0IHdoaWNoCisqICAgICAgICAgICAgICAgICB0byBiZWdpbiBwYXJzaW5n
LiAgSWYgbm90IDAsIG9uIG91dHB1dCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHBhcnNpbmcgZW5kZWQu
CisqIEBwYXJhbSBvdXRCdWYgQSAoY2hhciAqKSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgcGFyc2Vk
IG51bWJlciBhcyBhIHN0cmluZy4gIFRoZSBvdXRwdXQgc3RyaW5nCisqICAgICAgICAgICAgICAg
d2lsbCBiZSBudWwtdGVybWluYXRlZCBpZiB0aGVyZSBpcyBzdWZmaWNpZW50IHNwYWNlLgorKiBA
cGFyYW0gb3V0QnVmTGVuZ3RoIFRoZSBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyLiAgTWF5IGJl
IHplcm8sIGluIHdoaWNoIGNhc2UKKyogICAgICAgICAgICAgICB0aGUgb3V0QnVmIHBvaW50ZXIg
bWF5IGJlIE5VTEwsIGFuZCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlCisqICAgICAgICAg
ICAgICAgc2l6ZSBvZiB0aGUgb3V0cHV0IHN0cmluZy4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50
ZXIgdG8gYW4gVUVycm9yQ29kZSB0byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHJldHVybiB0aGUg
bGVuZ3RoIG9mIHRoZSBvdXRwdXQgc3RyaW5nLCBub3QgaW5jbHVkaW5nIGFueSB0ZXJtaW5hdGlu
ZyBudWwuCisqIEBzZWUgdW51bV9wYXJzZQorKiBAc2VlIHVudW1fcGFyc2VJbnQ2NAorKiBAc2Vl
IHVudW1fZm9ybWF0CisqIEBzZWUgdW51bV9mb3JtYXRJbnQ2NAorKiBAc2VlIHVudW1fZm9ybWF0
RG91YmxlCisqIEBzdGFibGUgSUNVIDQuNAorKi8KK1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQy
IAordW51bV9wYXJzZURlY2ltYWwoY29uc3QgICBVTnVtYmVyRm9ybWF0KiAgZm10LAorICAgICAg
ICAgICAgICAgICBjb25zdCAgIFVDaGFyKiAgICAgICAgICB0ZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGludDMyX3QgICAgICAgICB0ZXh0TGVuZ3RoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGludDMyX3QgICAgICAgICAqcGFyc2VQb3MgLyogMCA9IHN0YXJ0ICovLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICAgICAqb3V0QnVmLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIGludDMyX3QgICAgICAgICBvdXRCdWZMZW5ndGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICpzdGF0dXMpOworCisvKioKKyAqIFBhcnNlIGEg
c3RyaW5nIGludG8gYSBkb3VibGUgYW5kIGEgY3VycmVuY3kgdXNpbmcgYSBVTnVtYmVyRm9ybWF0
LgorICogVGhlIHN0cmluZyB3aWxsIGJlIHBhcnNlZCBhY2NvcmRpbmcgdG8gdGhlIFVOdW1iZXJG
b3JtYXQncyBsb2NhbGUuCisgKiBAcGFyYW0gZm10IHRoZSBmb3JtYXR0ZXIgdG8gdXNlCisgKiBA
cGFyYW0gdGV4dCB0aGUgdGV4dCB0byBwYXJzZQorICogQHBhcmFtIHRleHRMZW5ndGggdGhlIGxl
bmd0aCBvZiB0ZXh0LCBvciAtMSBpZiBudWxsLXRlcm1pbmF0ZWQKKyAqIEBwYXJhbSBwYXJzZVBv
cyBhIHBvaW50ZXIgdG8gYW4gb2Zmc2V0IGluZGV4IGludG8gdGV4dCBhdCB3aGljaCB0bworICog
YmVnaW4gcGFyc2luZy4gT24gb3V0cHV0LCAqcGFyc2VQb3Mgd2lsbCBwb2ludCBhZnRlciB0aGUg
bGFzdAorICogcGFyc2VkIGNoYXJhY3Rlci4gIFRoaXMgcGFyYW1ldGVyIG1heSBiZSAwLCBpbiB3
aGljaCBjYXNlIHBhcnNpbmcKKyAqIGJlZ2lucyBhdCBvZmZzZXQgMC4KKyAqIEBwYXJhbSBjdXJy
ZW5jeSBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBwYXJzZWQgbnVsbC0K
KyAqIHRlcm1pbmF0ZWQgY3VycmVuY3kuICBUaGlzIGJ1ZmZlciBtdXN0IGhhdmUgYSBjYXBhY2l0
eSBvZiBhdCBsZWFzdAorICogNCBVQ2hhcnMuCisgKiBAcGFyYW0gc3RhdHVzIGEgcG9pbnRlciB0
byBhbiBpbnB1dC1vdXRwdXQgVUVycm9yQ29kZQorICogQHJldHVybiB0aGUgcGFyc2VkIGRvdWJs
ZQorICogQHNlZSB1bnVtX3BhcnNlRG91YmxlCisgKiBAc2VlIHVudW1fZm9ybWF0RG91YmxlQ3Vy
cmVuY3kKKyAqIEBzdGFibGUgSUNVIDMuMAorICovCitVX1NUQUJMRSBkb3VibGUgVV9FWFBPUlQy
Cit1bnVtX3BhcnNlRG91YmxlQ3VycmVuY3koY29uc3QgVU51bWJlckZvcm1hdCogZm10LAorICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiB0ZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGludDMyX3QgdGV4dExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQzMl90KiBwYXJzZVBvcywgLyogMCA9IHN0YXJ0ICovCisgICAgICAgICAgICAgICAgICAgICAg
ICAgVUNoYXIqIGN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUq
IHN0YXR1cyk7CisKKy8qKgorICogU2V0IHRoZSBwYXR0ZXJuIHVzZWQgYnkgYSBVTnVtYmVyRm9y
bWF0LiAgVGhpcyBjYW4gb25seSBiZSB1c2VkCisgKiBvbiBhIERlY2ltYWxGb3JtYXQsIG90aGVy
IGZvcm1hdHMgcmV0dXJuIFVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUgorICogaW4gdGhlIHN0YXR1
cy4KKyAqIEBwYXJhbSBmb3JtYXQgVGhlIGZvcm1hdHRlciB0byBzZXQuCisgKiBAcGFyYW0gbG9j
YWxpemVkIFRSVUUgaWYgdGhlIHBhdHRlcm4gaXMgbG9jYWxpemVkLCBGQUxTRSBvdGhlcndpc2Uu
CisgKiBAcGFyYW0gcGF0dGVybiBUaGUgbmV3IHBhdHRlcm4KKyAqIEBwYXJhbSBwYXR0ZXJuTGVu
Z3RoIFRoZSBsZW5ndGggb2YgcGF0dGVybiwgb3IgLTEgaWYgbnVsbC10ZXJtaW5hdGVkLgorICog
QHBhcmFtIHBhcnNlRXJyb3IgQSBwb2ludGVyIHRvIFVQYXJzZUVycm9yIHRvIHJlY2lldmUgaW5m
b3JtYXRpb24KKyAqIGFib3V0IGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZywgb3IgTlVM
TCBpZiBubyBwYXJzZSBlcnJvcgorICogaW5mb3JtYXRpb24gaXMgZGVzaXJlZC4KKyAqIEBwYXJh
bSBzdGF0dXMgQSBwb2ludGVyIHRvIGFuIGlucHV0LW91dHB1dCBVRXJyb3JDb2RlLgorICogQHNl
ZSB1bnVtX3RvUGF0dGVybgorICogQHNlZSBEZWNpbWFsRm9ybWF0CisgKiBAc3RhYmxlIElDVSAy
LjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1bnVtX2FwcGx5UGF0dGVybiggICAg
ICAgICAgVU51bWJlckZvcm1hdCAgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBVQm9vbCAgICAgICAgICBsb2NhbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ICAg
VUNoYXIgICAgICAgICAgKnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
MzJfdCAgICAgICAgIHBhdHRlcm5MZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VVBhcnNlRXJyb3IgICAgKnBhcnNlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VUVycm9yQ29kZSAgICAgKnN0YXR1cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKTsKKworLyoqCisqIEdldCBhIGxvY2FsZSBmb3Igd2hpY2ggZGVjaW1hbCBmb3JtYXR0aW5n
IHBhdHRlcm5zIGFyZSBhdmFpbGFibGUuCisqIEEgVU51bWJlckZvcm1hdCBpbiBhIGxvY2FsZSBy
ZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIHdpbGwgcGVyZm9ybSB0aGUgY29ycmVjdAorKiBmb3Jt
YXR0aW5nIGFuZCBwYXJzaW5nIGZvciB0aGUgbG9jYWxlLiAgVGhlIHJlc3VsdHMgb2YgdGhpcyBj
YWxsIGFyZSBub3QKKyogdmFsaWQgZm9yIHJ1bGUtYmFzZWQgbnVtYmVyIGZvcm1hdHMuCisqIEBw
YXJhbSBsb2NhbGVJbmRleCBUaGUgaW5kZXggb2YgdGhlIGRlc2lyZWQgbG9jYWxlLgorKiBAcmV0
dXJuIEEgbG9jYWxlIGZvciB3aGljaCBudW1iZXIgZm9ybWF0dGluZyBwYXR0ZXJucyBhcmUgYXZh
aWxhYmxlLCBvciAwIGlmIG5vbmUuCisqIEBzZWUgdW51bV9jb3VudEF2YWlsYWJsZQorKiBAc3Rh
YmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSBjb25zdCBjaGFyKiBVX0VYUE9SVDIgCit1bnVtX2dl
dEF2YWlsYWJsZShpbnQzMl90IGxvY2FsZUluZGV4KTsKKworLyoqCisqIERldGVybWluZSBob3cg
bWFueSBsb2NhbGVzIGhhdmUgZGVjaW1hbCBmb3JtYXR0aW5nIHBhdHRlcm5zIGF2YWlsYWJsZS4g
IFRoZQorKiByZXN1bHRzIG9mIHRoaXMgY2FsbCBhcmUgbm90IHZhbGlkIGZvciBydWxlLWJhc2Vk
IG51bWJlciBmb3JtYXRzLgorKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCBmb3IgZGV0ZXJtaW5p
bmcgdGhlIGxvb3AgZW5kaW5nIGNvbmRpdGlvbiBmb3IKKyogY2FsbHMgdG8ge0BsaW5rICN1bnVt
X2dldEF2YWlsYWJsZSB9LgorKiBAcmV0dXJuIFRoZSBudW1iZXIgb2YgbG9jYWxlcyBmb3Igd2hp
Y2ggZGVjaW1hbCBmb3JtYXR0aW5nIHBhdHRlcm5zIGFyZSBhdmFpbGFibGUuCisqIEBzZWUgdW51
bV9nZXRBdmFpbGFibGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBV
X0VYUE9SVDIgCit1bnVtX2NvdW50QXZhaWxhYmxlKHZvaWQpOworCisvKiogVGhlIHBvc3NpYmxl
IFVOdW1iZXJGb3JtYXQgbnVtZXJpYyBhdHRyaWJ1dGVzIEBzdGFibGUgSUNVIDIuMCAqLwordHlw
ZWRlZiBlbnVtIFVOdW1iZXJGb3JtYXRBdHRyaWJ1dGUgeworICAvKiogUGFyc2UgaW50ZWdlcnMg
b25seSAqLworICBVTlVNX1BBUlNFX0lOVF9PTkxZLAorICAvKiogVXNlIGdyb3VwaW5nIHNlcGFy
YXRvciAqLworICBVTlVNX0dST1VQSU5HX1VTRUQsCisgIC8qKiBBbHdheXMgc2hvdyBkZWNpbWFs
IHBvaW50ICovCisgIFVOVU1fREVDSU1BTF9BTFdBWVNfU0hPV04sCisgIC8qKiBNYXhpbXVtIGlu
dGVnZXIgZGlnaXRzICovCisgIFVOVU1fTUFYX0lOVEVHRVJfRElHSVRTLAorICAvKiogTWluaW11
bSBpbnRlZ2VyIGRpZ2l0cyAqLworICBVTlVNX01JTl9JTlRFR0VSX0RJR0lUUywKKyAgLyoqIElu
dGVnZXIgZGlnaXRzICovCisgIFVOVU1fSU5URUdFUl9ESUdJVFMsCisgIC8qKiBNYXhpbXVtIGZy
YWN0aW9uIGRpZ2l0cyAqLworICBVTlVNX01BWF9GUkFDVElPTl9ESUdJVFMsCisgIC8qKiBNaW5p
bXVtIGZyYWN0aW9uIGRpZ2l0cyAqLworICBVTlVNX01JTl9GUkFDVElPTl9ESUdJVFMsCisgIC8q
KiBGcmFjdGlvbiBkaWdpdHMgKi8KKyAgVU5VTV9GUkFDVElPTl9ESUdJVFMsCisgIC8qKiBNdWx0
aXBsaWVyICovCisgIFVOVU1fTVVMVElQTElFUiwKKyAgLyoqIEdyb3VwaW5nIHNpemUgKi8KKyAg
VU5VTV9HUk9VUElOR19TSVpFLAorICAvKiogUm91bmRpbmcgTW9kZSAqLworICBVTlVNX1JPVU5E
SU5HX01PREUsCisgIC8qKiBSb3VuZGluZyBpbmNyZW1lbnQgKi8KKyAgVU5VTV9ST1VORElOR19J
TkNSRU1FTlQsCisgIC8qKiBUaGUgd2lkdGggdG8gd2hpY2ggdGhlIG91dHB1dCBvZiA8Y29kZT5m
b3JtYXQoKTwvY29kZT4gaXMgcGFkZGVkLiAqLworICBVTlVNX0ZPUk1BVF9XSURUSCwKKyAgLyoq
IFRoZSBwb3NpdGlvbiBhdCB3aGljaCBwYWRkaW5nIHdpbGwgdGFrZSBwbGFjZS4gKi8KKyAgVU5V
TV9QQURESU5HX1BPU0lUSU9OLAorICAvKiogU2Vjb25kYXJ5IGdyb3VwaW5nIHNpemUgKi8KKyAg
VU5VTV9TRUNPTkRBUllfR1JPVVBJTkdfU0laRSwKKyAgLyoqIFVzZSBzaWduaWZpY2FudCBkaWdp
dHMKKyAgICogQHN0YWJsZSBJQ1UgMy4wICovCisgIFVOVU1fU0lHTklGSUNBTlRfRElHSVRTX1VT
RUQsCisgIC8qKiBNaW5pbXVtIHNpZ25pZmljYW50IGRpZ2l0cworICAgKiBAc3RhYmxlIElDVSAz
LjAgKi8KKyAgVU5VTV9NSU5fU0lHTklGSUNBTlRfRElHSVRTLAorICAvKiogTWF4aW11bSBzaWdu
aWZpY2FudCBkaWdpdHMKKyAgICogQHN0YWJsZSBJQ1UgMy4wICovCisgIFVOVU1fTUFYX1NJR05J
RklDQU5UX0RJR0lUUywKKyAgLyoqIExlbmllbnQgcGFyc2UgbW9kZSB1c2VkIGJ5IHJ1bGUtYmFz
ZWQgZm9ybWF0cy4KKyAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAqLworICBVTlVNX0xFTklFTlRf
UEFSU0UKK30gVU51bWJlckZvcm1hdEF0dHJpYnV0ZTsKKworLyoqCisqIEdldCBhIG51bWVyaWMg
YXR0cmlidXRlIGFzc29jaWF0ZWQgd2l0aCBhIFVOdW1iZXJGb3JtYXQuCisqIEFuIGV4YW1wbGUg
b2YgYSBudW1lcmljIGF0dHJpYnV0ZSBpcyB0aGUgbnVtYmVyIG9mIGludGVnZXIgZGlnaXRzIGEg
Zm9ybWF0dGVyIHdpbGwgcHJvZHVjZS4KKyogQHBhcmFtIGZtdCBUaGUgZm9ybWF0dGVyIHRvIHF1
ZXJ5LgorKiBAcGFyYW0gYXR0ciBUaGUgYXR0cmlidXRlIHRvIHF1ZXJ5OyBvbmUgb2YgVU5VTV9Q
QVJTRV9JTlRfT05MWSwgVU5VTV9HUk9VUElOR19VU0VELAorKiBVTlVNX0RFQ0lNQUxfQUxXQVlT
X1NIT1dOLCBVTlVNX01BWF9JTlRFR0VSX0RJR0lUUywgVU5VTV9NSU5fSU5URUdFUl9ESUdJVFMs
IFVOVU1fSU5URUdFUl9ESUdJVFMsCisqIFVOVU1fTUFYX0ZSQUNUSU9OX0RJR0lUUywgVU5VTV9N
SU5fRlJBQ1RJT05fRElHSVRTLCBVTlVNX0ZSQUNUSU9OX0RJR0lUUywgVU5VTV9NVUxUSVBMSUVS
LAorKiBVTlVNX0dST1VQSU5HX1NJWkUsIFVOVU1fUk9VTkRJTkdfTU9ERSwgVU5VTV9GT1JNQVRf
V0lEVEgsIFVOVU1fUEFERElOR19QT1NJVElPTiwgVU5VTV9TRUNPTkRBUllfR1JPVVBJTkdfU0la
RS4KKyogQHJldHVybiBUaGUgdmFsdWUgb2YgYXR0ci4KKyogQHNlZSB1bnVtX3NldEF0dHJpYnV0
ZQorKiBAc2VlIHVudW1fZ2V0RG91YmxlQXR0cmlidXRlCisqIEBzZWUgdW51bV9zZXREb3VibGVB
dHRyaWJ1dGUKKyogQHNlZSB1bnVtX2dldFRleHRBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX3NldFRl
eHRBdHRyaWJ1dGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VY
UE9SVDIgCit1bnVtX2dldEF0dHJpYnV0ZShjb25zdCBVTnVtYmVyRm9ybWF0KiAgICAgICAgICBm
bXQsCisgICAgICAgICAgVU51bWJlckZvcm1hdEF0dHJpYnV0ZSAgYXR0cik7CisKKy8qKgorKiBT
ZXQgYSBudW1lcmljIGF0dHJpYnV0ZSBhc3NvY2lhdGVkIHdpdGggYSBVTnVtYmVyRm9ybWF0Lgor
KiBBbiBleGFtcGxlIG9mIGEgbnVtZXJpYyBhdHRyaWJ1dGUgaXMgdGhlIG51bWJlciBvZiBpbnRl
Z2VyIGRpZ2l0cyBhIGZvcm1hdHRlciB3aWxsIHByb2R1Y2UuICBJZiB0aGUKKyogZm9ybWF0dGVy
IGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlIGF0dHJpYnV0ZSwgdGhlIGNhbGwgaXMgaWdub3JlZC4g
IFJ1bGUtYmFzZWQgZm9ybWF0dGVycyBvbmx5IHVuZGVyc3RhbmQKKyogdGhlIGxlbmllbnQtcGFy
c2UgYXR0cmlidXRlLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gc2V0LgorKiBAcGFy
YW0gYXR0ciBUaGUgYXR0cmlidXRlIHRvIHNldDsgb25lIG9mIFVOVU1fUEFSU0VfSU5UX09OTFks
IFVOVU1fR1JPVVBJTkdfVVNFRCwKKyogVU5VTV9ERUNJTUFMX0FMV0FZU19TSE9XTiwgVU5VTV9N
QVhfSU5URUdFUl9ESUdJVFMsIFVOVU1fTUlOX0lOVEVHRVJfRElHSVRTLCBVTlVNX0lOVEVHRVJf
RElHSVRTLAorKiBVTlVNX01BWF9GUkFDVElPTl9ESUdJVFMsIFVOVU1fTUlOX0ZSQUNUSU9OX0RJ
R0lUUywgVU5VTV9GUkFDVElPTl9ESUdJVFMsIFVOVU1fTVVMVElQTElFUiwKKyogVU5VTV9HUk9V
UElOR19TSVpFLCBVTlVNX1JPVU5ESU5HX01PREUsIFVOVU1fRk9STUFUX1dJRFRILCBVTlVNX1BB
RERJTkdfUE9TSVRJT04sIFVOVU1fU0VDT05EQVJZX0dST1VQSU5HX1NJWkUsCisqIG9yIFVOVU1f
TEVOSUVOVF9QQVJTRS4KKyogQHBhcmFtIG5ld1ZhbHVlIFRoZSBuZXcgdmFsdWUgb2YgYXR0ci4K
KyogQHNlZSB1bnVtX2dldEF0dHJpYnV0ZQorKiBAc2VlIHVudW1fZ2V0RG91YmxlQXR0cmlidXRl
CisqIEBzZWUgdW51bV9zZXREb3VibGVBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX2dldFRleHRBdHRy
aWJ1dGUKKyogQHNlZSB1bnVtX3NldFRleHRBdHRyaWJ1dGUKKyogQHN0YWJsZSBJQ1UgMi4wCisq
LworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1bnVtX3NldEF0dHJpYnV0ZSggICAgVU51bWJl
ckZvcm1hdCogICAgICAgICAgZm10LAorICAgICAgICAgICAgVU51bWJlckZvcm1hdEF0dHJpYnV0
ZSAgYXR0ciwKKyAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgICAgICAgIG5ld1ZhbHVlKTsK
KworCisvKioKKyogR2V0IGEgbnVtZXJpYyBhdHRyaWJ1dGUgYXNzb2NpYXRlZCB3aXRoIGEgVU51
bWJlckZvcm1hdC4KKyogQW4gZXhhbXBsZSBvZiBhIG51bWVyaWMgYXR0cmlidXRlIGlzIHRoZSBu
dW1iZXIgb2YgaW50ZWdlciBkaWdpdHMgYSBmb3JtYXR0ZXIgd2lsbCBwcm9kdWNlLgorKiBJZiB0
aGUgZm9ybWF0dGVyIGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlIGF0dHJpYnV0ZSwgLTEgaXMgcmV0
dXJuZWQuCisqIEBwYXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBxdWVyeS4KKyogQHBhcmFtIGF0
dHIgVGhlIGF0dHJpYnV0ZSB0byBxdWVyeTsgZS5nLiBVTlVNX1JPVU5ESU5HX0lOQ1JFTUVOVC4K
KyogQHJldHVybiBUaGUgdmFsdWUgb2YgYXR0ci4KKyogQHNlZSB1bnVtX2dldEF0dHJpYnV0ZQor
KiBAc2VlIHVudW1fc2V0QXR0cmlidXRlCisqIEBzZWUgdW51bV9zZXREb3VibGVBdHRyaWJ1dGUK
KyogQHNlZSB1bnVtX2dldFRleHRBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX3NldFRleHRBdHRyaWJ1
dGUKKyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgZG91YmxlIFVfRVhQT1JUMiAKK3Vu
dW1fZ2V0RG91YmxlQXR0cmlidXRlKGNvbnN0IFVOdW1iZXJGb3JtYXQqICAgICAgICAgIGZtdCwK
KyAgICAgICAgICBVTnVtYmVyRm9ybWF0QXR0cmlidXRlICBhdHRyKTsKKworLyoqCisqIFNldCBh
IG51bWVyaWMgYXR0cmlidXRlIGFzc29jaWF0ZWQgd2l0aCBhIFVOdW1iZXJGb3JtYXQuCisqIEFu
IGV4YW1wbGUgb2YgYSBudW1lcmljIGF0dHJpYnV0ZSBpcyB0aGUgbnVtYmVyIG9mIGludGVnZXIg
ZGlnaXRzIGEgZm9ybWF0dGVyIHdpbGwgcHJvZHVjZS4KKyogSWYgdGhlIGZvcm1hdHRlciBkb2Vz
IG5vdCB1bmRlcnN0YW5kIHRoZSBhdHRyaWJ1dGUsIHRoaXMgY2FsbCBpcyBpZ25vcmVkLgorKiBA
cGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gc2V0LgorKiBAcGFyYW0gYXR0ciBUaGUgYXR0cmli
dXRlIHRvIHNldDsgZS5nLiBVTlVNX1JPVU5ESU5HX0lOQ1JFTUVOVC4KKyogQHBhcmFtIG5ld1Zh
bHVlIFRoZSBuZXcgdmFsdWUgb2YgYXR0ci4KKyogQHNlZSB1bnVtX2dldEF0dHJpYnV0ZQorKiBA
c2VlIHVudW1fc2V0QXR0cmlidXRlCisqIEBzZWUgdW51bV9nZXREb3VibGVBdHRyaWJ1dGUKKyog
QHNlZSB1bnVtX2dldFRleHRBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX3NldFRleHRBdHRyaWJ1dGUK
KyogQHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1bnVtX3Nl
dERvdWJsZUF0dHJpYnV0ZSggICAgVU51bWJlckZvcm1hdCogICAgICAgICAgZm10LAorICAgICAg
ICAgICAgVU51bWJlckZvcm1hdEF0dHJpYnV0ZSAgYXR0ciwKKyAgICAgICAgICAgIGRvdWJsZSAg
ICAgICAgICAgICAgICAgbmV3VmFsdWUpOworCisvKiogVGhlIHBvc3NpYmxlIFVOdW1iZXJGb3Jt
YXQgdGV4dCBhdHRyaWJ1dGVzIEBzdGFibGUgSUNVIDIuMCovCit0eXBlZGVmIGVudW0gVU51bWJl
ckZvcm1hdFRleHRBdHRyaWJ1dGUgeworICAvKiogUG9zaXRpdmUgcHJlZml4ICovCisgIFVOVU1f
UE9TSVRJVkVfUFJFRklYLAorICAvKiogUG9zaXRpdmUgc3VmZml4ICovCisgIFVOVU1fUE9TSVRJ
VkVfU1VGRklYLAorICAvKiogTmVnYXRpdmUgcHJlZml4ICovCisgIFVOVU1fTkVHQVRJVkVfUFJF
RklYLAorICAvKiogTmVnYXRpdmUgc3VmZml4ICovCisgIFVOVU1fTkVHQVRJVkVfU1VGRklYLAor
ICAvKiogVGhlIGNoYXJhY3RlciB1c2VkIHRvIHBhZCB0byB0aGUgZm9ybWF0IHdpZHRoLiAqLwor
ICBVTlVNX1BBRERJTkdfQ0hBUkFDVEVSLAorICAvKiogVGhlIElTTyBjdXJyZW5jeSBjb2RlICov
CisgIFVOVU1fQ1VSUkVOQ1lfQ09ERSwKKyAgLyoqCisgICAqIFRoZSBkZWZhdWx0IHJ1bGUgc2V0
LiAgVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSB3aXRoIHJ1bGUtYmFzZWQgZm9ybWF0dGVycy4KKyAg
ICogQHN0YWJsZSBJQ1UgMy4wCisgICAqLworICBVTlVNX0RFRkFVTFRfUlVMRVNFVCwKKyAgLyoq
CisgICAqIFRoZSBwdWJsaWMgcnVsZSBzZXRzLiAgVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSB3aXRo
IHJ1bGUtYmFzZWQgZm9ybWF0dGVycy4KKyAgICogVGhpcyBpcyBhIHJlYWQtb25seSBhdHRyaWJ1
dGUuICBUaGUgcHVibGljIHJ1bGVzZXRzIGFyZSByZXR1cm5lZCBhcyBhCisgICAqIHNpbmdsZSBz
dHJpbmcsIHdpdGggZWFjaCBydWxlc2V0IG5hbWUgZGVsaW1pdGVkIGJ5ICc7JyAoc2VtaWNvbG9u
KS4KKyAgICogQHN0YWJsZSBJQ1UgMy4wCisgICAqLworICBVTlVNX1BVQkxJQ19SVUxFU0VUUwor
fSBVTnVtYmVyRm9ybWF0VGV4dEF0dHJpYnV0ZTsKKworLyoqCisqIEdldCBhIHRleHQgYXR0cmli
dXRlIGFzc29jaWF0ZWQgd2l0aCBhIFVOdW1iZXJGb3JtYXQuCisqIEFuIGV4YW1wbGUgb2YgYSB0
ZXh0IGF0dHJpYnV0ZSBpcyB0aGUgc3VmZml4IGZvciBwb3NpdGl2ZSBudW1iZXJzLiAgSWYgdGhl
IGZvcm1hdHRlcgorKiBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoZSBhdHRyaWJ1dHJlLCBVX1VOU1VQ
UE9SVEVEX0VSUk9SIGlzIHJldHVybmVkIGFzIHRoZSBzdGF0dXMuCisqIFJ1bGUtYmFzZWQgZm9y
bWF0dGVycyBvbmx5IHVuZGVyc3RhbmQgVU5VTV9ERUZBVUxUX1JVTEVTRVQgYW5kIFVOVU1fUFVC
TElDX1JVTEVTRVRTLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisqIEBw
YXJhbSB0YWcgVGhlIGF0dHJpYnV0ZSB0byBxdWVyeTsgb25lIG9mIFVOVU1fUE9TSVRJVkVfUFJF
RklYLCBVTlVNX1BPU0lUSVZFX1NVRkZJWCwKKyogVU5VTV9ORUdBVElWRV9QUkVGSVgsIFVOVU1f
TkVHQVRJVkVfU1VGRklYLCBVTlVNX1BBRERJTkdfQ0hBUkFDVEVSLCBVTlVNX0NVUlJFTkNZX0NP
REUsCisqIFVOVU1fREVGQVVMVF9SVUxFU0VULCBvciBVTlVNX1BVQkxJQ19SVUxFU0VUUy4KKyog
QHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgYXR0cmli
dXRlLgorKiBAcGFyYW0gcmVzdWx0TGVuZ3RoIFRoZSBtYXhpbXVtIHNpemUgb2YgcmVzdWx0Lgor
KiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55
IGVycm9ycworKiBAcmV0dXJuIFRoZSB0b3RhbCBidWZmZXIgc2l6ZSBuZWVkZWQ7IGlmIGdyZWF0
ZXIgdGhhbiByZXN1bHRMZW5ndGgsIHRoZSBvdXRwdXQgd2FzIHRydW5jYXRlZC4KKyogQHNlZSB1
bnVtX3NldFRleHRBdHRyaWJ1dGUKKyogQHNlZSB1bnVtX2dldEF0dHJpYnV0ZQorKiBAc2VlIHVu
dW1fc2V0QXR0cmlidXRlCisqIEBzdGFibGUgSUNVIDIuMAorKi8KK1VfU1RBQkxFIGludDMyX3Qg
VV9FWFBPUlQyIAordW51bV9nZXRUZXh0QXR0cmlidXRlKCAgICBjb25zdCAgICBVTnVtYmVyRm9y
bWF0KiAgICAgICAgICAgICAgICAgICAgZm10LAorICAgICAgICAgICAgVU51bWJlckZvcm1hdFRl
eHRBdHRyaWJ1dGUgICAgICB0YWcsCisgICAgICAgICAgICBVQ2hhciogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LAorICAgICAgICAgICAgaW50MzJfdCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHRMZW5ndGgsCisgICAgICAgICAgICBVRXJyb3JDb2RlKiAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXR1cyk7CisKKy8qKgorKiBTZXQgYSB0ZXh0IGF0dHJpYnV0ZSBh
c3NvY2lhdGVkIHdpdGggYSBVTnVtYmVyRm9ybWF0LgorKiBBbiBleGFtcGxlIG9mIGEgdGV4dCBh
dHRyaWJ1dGUgaXMgdGhlIHN1ZmZpeCBmb3IgcG9zaXRpdmUgbnVtYmVycy4gIFJ1bGUtYmFzZWQg
Zm9ybWF0dGVycworKiBvbmx5IHVuZGVyc3RhbmQgVU5VTV9ERUZBVUxUX1JVTEVTRVQuCisqIEBw
YXJhbSBmbXQgVGhlIGZvcm1hdHRlciB0byBzZXQuCisqIEBwYXJhbSB0YWcgVGhlIGF0dHJpYnV0
ZSB0byBzZXQ7IG9uZSBvZiBVTlVNX1BPU0lUSVZFX1BSRUZJWCwgVU5VTV9QT1NJVElWRV9TVUZG
SVgsCisqIFVOVU1fTkVHQVRJVkVfUFJFRklYLCBVTlVNX05FR0FUSVZFX1NVRkZJWCwgVU5VTV9Q
QURESU5HX0NIQVJBQ1RFUiwgVU5VTV9DVVJSRU5DWV9DT0RFLAorKiBvciBVTlVNX0RFRkFVTFRf
UlVMRVNFVC4KKyogQHBhcmFtIG5ld1ZhbHVlIFRoZSBuZXcgdmFsdWUgb2YgYXR0ci4KKyogQHBh
cmFtIG5ld1ZhbHVlTGVuZ3RoIFRoZSBsZW5ndGggb2YgbmV3VmFsdWUsIG9yIC0xIGlmIG51bGwt
dGVybWluYXRlZC4KKyogQHBhcmFtIHN0YXR1cyBBIHBvaW50ZXIgdG8gYW4gVUVycm9yQ29kZSB0
byByZWNlaXZlIGFueSBlcnJvcnMKKyogQHNlZSB1bnVtX2dldFRleHRBdHRyaWJ1dGUKKyogQHNl
ZSB1bnVtX2dldEF0dHJpYnV0ZQorKiBAc2VlIHVudW1fc2V0QXR0cmlidXRlCisqIEBzdGFibGUg
SUNVIDIuMAorKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordW51bV9zZXRUZXh0QXR0cmli
dXRlKCAgICBVTnVtYmVyRm9ybWF0KiAgICAgICAgICAgICAgICAgICAgZm10LAorICAgICAgICAg
ICAgVU51bWJlckZvcm1hdFRleHRBdHRyaWJ1dGUgICAgICB0YWcsCisgICAgICAgICAgICBjb25z
dCAgICBVQ2hhciogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUsCisgICAgICAg
ICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlTGVuZ3RoLAor
ICAgICAgICAgICAgVUVycm9yQ29kZSAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0dXMpOwor
CisvKioKKyAqIEV4dHJhY3QgdGhlIHBhdHRlcm4gZnJvbSBhIFVOdW1iZXJGb3JtYXQuICBUaGUg
cGF0dGVybiB3aWxsIGZvbGxvdworICogdGhlIERlY2ltYWxGb3JtYXQgcGF0dGVybiBzeW50YXgu
CisgKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisgKiBAcGFyYW0gaXNQYXR0
ZXJuTG9jYWxpemVkIFRSVUUgaWYgdGhlIHBhdHRlcm4gc2hvdWxkIGJlIGxvY2FsaXplZCwKKyAq
IEZBTFNFIG90aGVyd2lzZS4gIFRoaXMgaXMgaWdub3JlZCBpZiB0aGUgZm9ybWF0dGVyIGlzIGEg
cnVsZS1iYXNlZAorICogZm9ybWF0dGVyLgorICogQHBhcmFtIHJlc3VsdCBBIHBvaW50ZXIgdG8g
YSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgcGF0dGVybi4KKyAqIEBwYXJhbSByZXN1bHRMZW5ndGgg
VGhlIG1heGltdW0gc2l6ZSBvZiByZXN1bHQuCisgKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0
byBhbiBpbnB1dC1vdXRwdXQgVUVycm9yQ29kZS4KKyAqIEByZXR1cm4gVGhlIHRvdGFsIGJ1ZmZl
ciBzaXplIG5lZWRlZDsgaWYgZ3JlYXRlciB0aGFuIHJlc3VsdExlbmd0aCwKKyAqIHRoZSBvdXRw
dXQgd2FzIHRydW5jYXRlZC4KKyAqIEBzZWUgdW51bV9hcHBseVBhdHRlcm4KKyAqIEBzZWUgRGVj
aW1hbEZvcm1hdAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIGludDMyX3QgVV9F
WFBPUlQyIAordW51bV90b1BhdHRlcm4oICAgIGNvbnN0ICAgIFVOdW1iZXJGb3JtYXQqICAgICAg
ICAgIGZtdCwKKyAgICAgICAgVUJvb2wgICAgICAgICAgICAgICAgICBpc1BhdHRlcm5Mb2NhbGl6
ZWQsCisgICAgICAgIFVDaGFyKiAgICAgICAgICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgaW50
MzJfdCAgICAgICAgICAgICAgICAgcmVzdWx0TGVuZ3RoLAorICAgICAgICBVRXJyb3JDb2RlKiAg
ICAgICAgICAgICBzdGF0dXMpOworCisKKy8qKgorICogQ29uc3RhbnRzIGZvciBzcGVjaWZ5aW5n
IGEgbnVtYmVyIGZvcm1hdCBzeW1ib2wuCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLwordHlwZWRl
ZiBlbnVtIFVOdW1iZXJGb3JtYXRTeW1ib2wgeworICAvKiogVGhlIGRlY2ltYWwgc2VwYXJhdG9y
ICovCisgIFVOVU1fREVDSU1BTF9TRVBBUkFUT1JfU1lNQk9MID0gMCwKKyAgLyoqIFRoZSBncm91
cGluZyBzZXBhcmF0b3IgKi8KKyAgVU5VTV9HUk9VUElOR19TRVBBUkFUT1JfU1lNQk9MID0gMSwK
KyAgLyoqIFRoZSBwYXR0ZXJuIHNlcGFyYXRvciAqLworICBVTlVNX1BBVFRFUk5fU0VQQVJBVE9S
X1NZTUJPTCA9IDIsCisgIC8qKiBUaGUgcGVyY2VudCBzaWduICovCisgIFVOVU1fUEVSQ0VOVF9T
WU1CT0wgPSAzLAorICAvKiogWmVybyovCisgIFVOVU1fWkVST19ESUdJVF9TWU1CT0wgPSA0LAor
ICAvKiogQ2hhcmFjdGVyIHJlcHJlc2VudGluZyBhIGRpZ2l0IGluIHRoZSBwYXR0ZXJuICovCisg
IFVOVU1fRElHSVRfU1lNQk9MID0gNSwKKyAgLyoqIFRoZSBtaW51cyBzaWduICovCisgIFVOVU1f
TUlOVVNfU0lHTl9TWU1CT0wgPSA2LAorICAvKiogVGhlIHBsdXMgc2lnbiAqLworICBVTlVNX1BM
VVNfU0lHTl9TWU1CT0wgPSA3LAorICAvKiogVGhlIGN1cnJlbmN5IHN5bWJvbCAqLworICBVTlVN
X0NVUlJFTkNZX1NZTUJPTCA9IDgsCisgIC8qKiBUaGUgaW50ZXJuYXRpb25hbCBjdXJyZW5jeSBz
eW1ib2wgKi8KKyAgVU5VTV9JTlRMX0NVUlJFTkNZX1NZTUJPTCA9IDksCisgIC8qKiBUaGUgbW9u
ZXRhcnkgc2VwYXJhdG9yICovCisgIFVOVU1fTU9ORVRBUllfU0VQQVJBVE9SX1NZTUJPTCA9IDEw
LAorICAvKiogVGhlIGV4cG9uZW50aWFsIHN5bWJvbCAqLworICBVTlVNX0VYUE9ORU5USUFMX1NZ
TUJPTCA9IDExLAorICAvKiogUGVyIG1pbGwgc3ltYm9sICovCisgIFVOVU1fUEVSTUlMTF9TWU1C
T0wgPSAxMiwKKyAgLyoqIEVzY2FwZSBwYWRkaW5nIGNoYXJhY3RlciAqLworICBVTlVNX1BBRF9F
U0NBUEVfU1lNQk9MID0gMTMsCisgIC8qKiBJbmZpbml0eSBzeW1ib2wgKi8KKyAgVU5VTV9JTkZJ
TklUWV9TWU1CT0wgPSAxNCwKKyAgLyoqIE5hbiBzeW1ib2wgKi8KKyAgVU5VTV9OQU5fU1lNQk9M
ID0gMTUsCisgIC8qKiBTaWduaWZpY2FudCBkaWdpdCBzeW1ib2wKKyAgICogQHN0YWJsZSBJQ1Ug
My4wICovCisgIFVOVU1fU0lHTklGSUNBTlRfRElHSVRfU1lNQk9MID0gMTYsCisgIC8qKiBUaGUg
bW9uZXRhcnkgZ3JvdXBpbmcgc2VwYXJhdG9yIAorICAgKiBAc3RhYmxlIElDVSAzLjYKKyAgICov
CisgIFVOVU1fTU9ORVRBUllfR1JPVVBJTkdfU0VQQVJBVE9SX1NZTUJPTCA9IDE3LCAgCisgIC8q
KiBPbmUKKyAgICogQGRyYWZ0IElDVSA0LjYKKyAgICovCisgIFVOVU1fT05FX0RJR0lUX1NZTUJP
TCA9IDE4LAorICAvKiogVHdvCisgICAqIEBkcmFmdCBJQ1UgNC42CisgICAqLworICBVTlVNX1RX
T19ESUdJVF9TWU1CT0wgPSAxOSwKKyAgLyoqIFRocmVlCisgICAqIEBkcmFmdCBJQ1UgNC42Cisg
ICAqLworICBVTlVNX1RIUkVFX0RJR0lUX1NZTUJPTCA9IDIwLAorICAvKiogRm91cgorICAgKiBA
ZHJhZnQgSUNVIDQuNgorICAgKi8KKyAgVU5VTV9GT1VSX0RJR0lUX1NZTUJPTCA9IDIxLAorICAv
KiogRml2ZQorICAgKiBAZHJhZnQgSUNVIDQuNgorICAgKi8KKyAgVU5VTV9GSVZFX0RJR0lUX1NZ
TUJPTCA9IDIyLAorICAvKiogU2l4CisgICAqIEBkcmFmdCBJQ1UgNC42CisgICAqLworICBVTlVN
X1NJWF9ESUdJVF9TWU1CT0wgPSAyMywKKyAgLyoqIFNldmVuCisgICAgKiBAZHJhZnQgSUNVIDQu
NgorICAgKi8KKyAgVU5VTV9TRVZFTl9ESUdJVF9TWU1CT0wgPSAyNCwKKyAgLyoqIEVpZ2h0Cisg
ICAqIEBkcmFmdCBJQ1UgNC42CisgICAqLworICBVTlVNX0VJR0hUX0RJR0lUX1NZTUJPTCA9IDI1
LAorICAvKiogTmluZQorICAgKiBAZHJhZnQgSUNVIDQuNgorICAgKi8KKyAgVU5VTV9OSU5FX0RJ
R0lUX1NZTUJPTCA9IDI2LAorICAvKiogY291bnQgc3ltYm9sIGNvbnN0YW50cyAqLworICBVTlVN
X0ZPUk1BVF9TWU1CT0xfQ09VTlQgPSAyNworfSBVTnVtYmVyRm9ybWF0U3ltYm9sOworCisvKioK
KyogR2V0IGEgc3ltYm9sIGFzc29jaWF0ZWQgd2l0aCBhIFVOdW1iZXJGb3JtYXQuCisqIEEgVU51
bWJlckZvcm1hdCB1c2VzIHN5bWJvbHMgdG8gcmVwcmVzZW50IHRoZSBzcGVjaWFsIGxvY2FsZS1k
ZXBlbmRlbnQKKyogY2hhcmFjdGVycyBpbiBhIG51bWJlciwgZm9yIGV4YW1wbGUgdGhlIHBlcmNl
bnQgc2lnbi4gVGhpcyBBUEkgaXMgbm90CisqIHN1cHBvcnRlZCBmb3IgcnVsZS1iYXNlZCBmb3Jt
YXR0ZXJzLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gcXVlcnkuCisqIEBwYXJhbSBz
eW1ib2wgVGhlIFVOdW1iZXJGb3JtYXRTeW1ib2wgY29uc3RhbnQgZm9yIHRoZSBzeW1ib2wgdG8g
Z2V0CisqIEBwYXJhbSBidWZmZXIgVGhlIHN0cmluZyBidWZmZXIgdGhhdCB3aWxsIHJlY2VpdmUg
dGhlIHN5bWJvbCBzdHJpbmc7CisqICAgICAgICAgICAgICAgaWYgaXQgaXMgTlVMTCwgdGhlbiBv
bmx5IHRoZSBsZW5ndGggb2YgdGhlIHN5bWJvbCBpcyByZXR1cm5lZAorKiBAcGFyYW0gc2l6ZSBU
aGUgc2l6ZSBvZiB0aGUgc3RyaW5nIGJ1ZmZlcgorKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0
byBhbiBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycworKiBAcmV0dXJuIFRoZSBsZW5n
dGggb2YgdGhlIHN5bWJvbDsgdGhlIGJ1ZmZlciBpcyBub3QgbW9kaWZpZWQgaWYKKyogICAgICAg
ICA8Y29kZT5sZW5ndGgmZ3Q7PXNpemU8L2NvZGU+CisqIEBzZWUgdW51bV9zZXRTeW1ib2wKKyog
QHN0YWJsZSBJQ1UgMi4wCisqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKK3VudW1fZ2V0
U3ltYm9sKGNvbnN0IFVOdW1iZXJGb3JtYXQgKmZtdCwKKyAgICAgICAgICAgICAgIFVOdW1iZXJG
b3JtYXRTeW1ib2wgc3ltYm9sLAorICAgICAgICAgICAgICAgVUNoYXIgKmJ1ZmZlciwKKyAgICAg
ICAgICAgICAgIGludDMyX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKnN0YXR1
cyk7CisKKy8qKgorKiBTZXQgYSBzeW1ib2wgYXNzb2NpYXRlZCB3aXRoIGEgVU51bWJlckZvcm1h
dC4KKyogQSBVTnVtYmVyRm9ybWF0IHVzZXMgc3ltYm9scyB0byByZXByZXNlbnQgdGhlIHNwZWNp
YWwgbG9jYWxlLWRlcGVuZGVudAorKiBjaGFyYWN0ZXJzIGluIGEgbnVtYmVyLCBmb3IgZXhhbXBs
ZSB0aGUgcGVyY2VudCBzaWduLiAgVGhpcyBBUEkgaXMgbm90CisqIHN1cHBvcnRlZCBmb3IgcnVs
ZS1iYXNlZCBmb3JtYXR0ZXJzLgorKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gc2V0Lgor
KiBAcGFyYW0gc3ltYm9sIFRoZSBVTnVtYmVyRm9ybWF0U3ltYm9sIGNvbnN0YW50IGZvciB0aGUg
c3ltYm9sIHRvIHNldAorKiBAcGFyYW0gdmFsdWUgVGhlIHN0cmluZyB0byBzZXQgdGhlIHN5bWJv
bCB0bworKiBAcGFyYW0gbGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZywgb3IgLTEgZm9y
IGEgemVyby10ZXJtaW5hdGVkIHN0cmluZworKiBAcGFyYW0gc3RhdHVzIEEgcG9pbnRlciB0byBh
biBVRXJyb3JDb2RlIHRvIHJlY2VpdmUgYW55IGVycm9ycy4KKyogQHNlZSB1bnVtX2dldFN5bWJv
bAorKiBAc3RhYmxlIElDVSAyLjAKKyovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMgordW51bV9z
ZXRTeW1ib2woVU51bWJlckZvcm1hdCAqZm10LAorICAgICAgICAgICAgICAgVU51bWJlckZvcm1h
dFN5bWJvbCBzeW1ib2wsCisgICAgICAgICAgICAgICBjb25zdCBVQ2hhciAqdmFsdWUsCisgICAg
ICAgICAgICAgICBpbnQzMl90IGxlbmd0aCwKKyAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKnN0
YXR1cyk7CisKKworLyoqCisgKiBHZXQgdGhlIGxvY2FsZSBmb3IgdGhpcyBudW1iZXIgZm9ybWF0
IG9iamVjdC4KKyAqIFlvdSBjYW4gY2hvb3NlIGJldHdlZW4gdmFsaWQgYW5kIGFjdHVhbCBsb2Nh
bGUuCisgKiBAcGFyYW0gZm10IFRoZSBmb3JtYXR0ZXIgdG8gZ2V0IHRoZSBsb2NhbGUgZnJvbQor
ICogQHBhcmFtIHR5cGUgdHlwZSBvZiB0aGUgbG9jYWxlIHdlJ3JlIGxvb2tpbmcgZm9yICh2YWxp
ZCBvciBhY3R1YWwpIAorICogQHBhcmFtIHN0YXR1cyBlcnJvciBjb2RlIGZvciB0aGUgb3BlcmF0
aW9uCisgKiBAcmV0dXJuIHRoZSBsb2NhbGUgbmFtZQorICogQHN0YWJsZSBJQ1UgMi44CisgKi8K
K1VfU1RBQkxFIGNvbnN0IGNoYXIqIFVfRVhQT1JUMgordW51bV9nZXRMb2NhbGVCeVR5cGUoY29u
c3QgVU51bWJlckZvcm1hdCAqZm10LAorICAgICAgICAgICAgICAgICAgICAgVUxvY0RhdGFMb2Nh
bGVUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiBzdGF0dXMpOyAK
KworI2VuZGlmIC8qICNpZiAhVUNPTkZJR19OT19GT1JNQVRUSU5HICovCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3V0eXBlcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ljdS91bmljb2RlL3V0eXBlcy5oCmluZGV4IDAwYmYxNGNlOGU2
ZTVkNmVjOGVkODdkOGU5NTYxNzBjYTU3Nzg3YjIuLjFiY2Y3ZjVkMzkwOWZmNjZiNjU4ZWE5NWJh
NGEyY2RlYjU0OWM5YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UvdW5p
Y29kZS91dHlwZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1L3VuaWNvZGUvdXR5
cGVzLmgKQEAgLTU1LDcgKzU1LDcgQEAKICAqLwogI2lmZGVmIFhQX0NQTFVTUExVUwogIyAgIGlm
bmRlZiBVX1NIT1dfQ1BMVVNQTFVTX0FQSQotIyAgICAgICBkZWZpbmUgVV9TSE9XX0NQTFVTUExV
U19BUEkgMQorIyAgICAgICBkZWZpbmUgVV9TSE9XX0NQTFVTUExVU19BUEkgMAogIyAgIGVuZGlm
CiAjZWxzZQogIyAgIHVuZGVmIFVfU0hPV19DUExVU1BMVVNfQVBJCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAppbmRleCAxNjNiMTE2MTA0
MWNjZGIzNWFkNTI5NzZjYWZlNmJkMTFkZmM4Yjc3Li5jNTFiNDZkNzE2YTI1OTk3YTE3MzE2ODNi
ZmY3OGNhMzQxYzQxZmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25JZGVudGlmaWVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vbklkZW50aWZpZXJzLmgKQEAgLTE0Miw2ICsxNDIsNyBAQAogICAgIG1hY3JvKGxhc3RJ
bmRleCkgXAogICAgIG1hY3JvKGxlbmd0aCkgXAogICAgIG1hY3JvKGxpbmUpIFwKKyAgICBtYWNy
byhsb2NhbGVNYXRjaGVyKSBcCiAgICAgbWFjcm8obWVzc2FnZSkgXAogICAgIG1hY3JvKG11bHRp
bGluZSkgXAogICAgIG1hY3JvKG5hbWUpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcAppbmRleCBkNDFkZDE3
Y2Q4ZWIxMTJhMjFlZmI2YzIxYTE0NDk0ZmIyZWQ2ZDY1Li4zMTA3YjNmNWU5NGRjOGFkZWIxYjk2
ODVjZmIzNTBmNDczMWRmZGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bENvbGxhdG9yQ29uc3RydWN0b3IuY3BwCkBAIC0xNTAsMjUgKzE1MCwx
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxDb2xsYXRvckNvbnN0cnVjdG9y
RnVuY1N1cHBvcnRlZExvY2FsZXNPZihFeGVjUwogICAgIC8vIDEwLjIuMiBJbnRsLkNvbGxhdG9y
LnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVzIFssIG9wdGlvbnNdKSAoRUNNQS00MDIgMi4wKQog
CiAgICAgLy8gMS4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlz
dChsb2NhbGVzKS4KLSAgICAvLyBGSVhNRTogcmVxdWVzdGVkID0gQ2Fub25pY2FsaXplTG9jYWxl
TGlzdChsb2NhbGVzKTsKKyAgICBKU0FycmF5KiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2Fs
aXplTG9jYWxlTGlzdChleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAKICAgICAvLyAyLiBSZXR1
cm5JZkFicnVwdChyZXF1ZXN0ZWRMb2NhbGVzKS4KLSAgICAvLyBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCi0gICAgLy8gICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gMy4gUmV0dXJuIFN1cHBvcnRlZExvY2Fs
ZXMoJUNvbGxhdG9yJS5bW2F2YWlsYWJsZUxvY2FsZXNdXSwgcmVxdWVzdGVkTG9jYWxlcywgb3B0
aW9ucykuCi0gICAgLy8gRklYTUU6IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3VwcG9ydGVkTG9j
YWxlcyhhdmFpbGFibGUsIHJlcXVlc3RlZCwgb3B0aW9ucykpOwotCi0gICAgLy8gUmV0dXJuIGVt
cHR5IGFycmF5IHVudGlsIHByb3Blcmx5IGltcGxlbWVudGVkLgotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmNhbGxlZSgp
LT5nbG9iYWxPYmplY3QoKTsKLSAgICBKU0FycmF5KiBzdXBwb3J0ZWRMb2NhbGVzID0gSlNBcnJh
eTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVy
ZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoVW5kZWNpZGVkKSwgMCk7
Ci0gICAgaWYgKCFzdXBwb3J0ZWRMb2NhbGVzKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHN1cHBvcnRlZExvY2FsZXMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3Vw
cG9ydGVkTG9jYWxlcyhleGVjLCBnbG9iYWxPYmplY3QtPmludGxDb2xsYXRvckF2YWlsYWJsZUxv
Y2FsZXMoKSwgcmVxdWVzdGVkTG9jYWxlcywgZXhlYy0+YXJndW1lbnQoMSkpKTsKIH0KLSAgICAK
Kwogdm9pZCBJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEludGxDb2xsYXRvckNvbnN0cnVjdG9y
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEludGxDb2xsYXRvckNvbnN0cnVjdG9yKj4oY2VsbCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3Jt
YXRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0
ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMGI4ZDQ2MGQyNjc0MWE0YjkzMzZiOGNi
MGY4YjY0ZmI3OGQwNjg3ZC4uOThkM2JiZTNkNDBlMmFjZmViNzI4ZjhhMzYwNTQzNDU1MjYwMzcy
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1l
Rm9ybWF0Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcApAQCAtMTUwLDIyICsxNTAsMTYgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rv
ckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YKICAgICAvLyAxMi4yLjIgSW50bC5EYXRlVGltZUZvcm1h
dC5zdXBwb3J0ZWRMb2NhbGVzT2YobG9jYWxlcyBbLCBvcHRpb25zXSkgKEVDTUEtNDAyIDIuMCkK
IAogICAgIC8vIDEuIExldCBhdmFpbGFibGVMb2NhbGVzIGJlICVEYXRlVGltZUZvcm1hdCUuW1th
dmFpbGFibGVMb2NhbGVzXV0uCi0gICAgLy8gRklYTUU6IGF2YWlsYWJsZSA9IEludGxEYXRlVGlt
ZUZvcm1hdENvbnN0cnVjdG9yOjpnZXRBdmFpbGFibGVMb2NhbGVzKCkKKyAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpOworICAg
IGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiBhdmFpbGFibGVMb2NhbGVzID0gZ2xvYmFsT2JqZWN0LT5p
bnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CiAKICAgICAvLyAyLiBMZXQgcmVx
dWVzdGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgotICAgIC8v
IEZJWE1FOiByZXF1ZXN0ZWQgPSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpCisgICAg
SlNBcnJheSogcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZXhlYywg
ZXhlYy0+YXJndW1lbnQoMCkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDMuIFJl
dHVybiBTdXBwb3J0ZWRMb2NhbGVzKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMs
IG9wdGlvbnMpLgotICAgIC8vIEZJWE1FOiByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN1cHBvcnRl
ZExvY2FsZXMoYXZhaWxhYmxlLCByZXF1ZXN0ZWQsIG9wdGlvbnMpKTsKLQotICAgIC8vIFJldHVy
biBlbXB0eSBhcnJheSB1bnRpbCBwcm9wZXJseSBpbXBsZW1lbnRlZC4KLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5jYWxs
ZWUoKS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgSlNBcnJheSogc3VwcG9ydGVkTG9jYWxlcyA9IEpT
QXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1
Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aFVuZGVjaWRlZCks
IDApOwotICAgIGlmICghc3VwcG9ydGVkTG9jYWxlcykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYykpOwotCi0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShzdXBwb3J0ZWRMb2NhbGVzKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHN1cHBvcnRlZExvY2FsZXMoZXhlYywgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxl
cywgZXhlYy0+YXJndW1lbnQoMSkpKTsKIH0KICAgICAKIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0
Q29uc3RydWN0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1i
ZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwCmluZGV4IGI4NjM5ZDZiMTRjNzAwN2E4NzEw
MjU1NzdhYWUyZWQyOWZiY2QyZTEuLmQwNjZlZTgwNGJmNzg2MmQwNGNlMWNhZDk3ZmZiZWIxYzFm
Y2M2MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1i
ZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcApAQCAtMTUwLDIyICsxNTAsMTYgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3JG
dW5jU3VwcG9ydGVkTG9jYWxlc09mKEUKICAgICAvLyAxMS4yLjIgSW50bC5OdW1iZXJGb3JtYXQu
c3VwcG9ydGVkTG9jYWxlc09mKGxvY2FsZXMgWywgb3B0aW9uc10pIChFQ01BLTQwMiAyLjApCiAK
ICAgICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlTnVtYmVyRm9ybWF0JS5bW2F2YWls
YWJsZUxvY2FsZXNdXS4KLSAgICAvLyBGSVhNRTogYXZhaWxhYmxlID0gSW50bE51bWJlckZvcm1h
dENvbnN0cnVjdG9yOjpnZXRBdmFpbGFibGVMb2NhbGVzKCkKKyAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpOworICAgIGNvbnN0
IEhhc2hTZXQ8U3RyaW5nPiBhdmFpbGFibGVMb2NhbGVzID0gZ2xvYmFsT2JqZWN0LT5pbnRsTnVt
YmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcygpOwogCiAgICAgLy8gMi4gTGV0IHJlcXVlc3RlZExv
Y2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KLSAgICAvLyBGSVhNRTog
cmVxdWVzdGVkID0gQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKQorICAgIEpTQXJyYXkq
IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGV4ZWMsIGV4ZWMtPmFy
Z3VtZW50KDApKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyAzLiBSZXR1cm4gU3Vw
cG9ydGVkTG9jYWxlcyhhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25z
KS4KLSAgICAvLyBGSVhNRTogcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTdXBwb3J0ZWRMb2NhbGVz
KGF2YWlsYWJsZSwgcmVxdWVzdGVkLCBvcHRpb25zKSk7Ci0KLSAgICAvLyBSZXR1cm4gZW1wdHkg
YXJyYXkgdW50aWwgcHJvcGVybHkgaW1wbGVtZW50ZWQuCi0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2FsbGVlKCktPmds
b2JhbE9iamVjdCgpOwotICAgIEpTQXJyYXkqIHN1cHBvcnRlZExvY2FsZXMgPSBKU0FycmF5Ojp0
cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9y
SW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhVbmRlY2lkZWQpLCAwKTsKLSAg
ICBpZiAoIXN1cHBvcnRlZExvY2FsZXMpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKLQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoc3VwcG9ydGVkTG9jYWxlcyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdXBwb3J0
ZWRMb2NhbGVzKGV4ZWMsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGV4ZWMt
PmFyZ3VtZW50KDEpKSk7CiB9CiAKIHZvaWQgSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCmluZGV4IGJhNDU3ZTcyNTYw
OTEwNzg5MTIyZjUxMzc1ZWU5ZmRjMTAyNGQzMmYuLjY3OTliODhkY2E2ZGI2MDJjZGYwZGZkNTU4
ZTZjN2EyOWNiNzE0YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxP
YmplY3QuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoSU5UTCkKIAorI2luY2x1
ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJJ
bnRsQ29sbGF0b3IuaCIKICNpbmNsdWRlICJJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5oIgpAQCAt
MzksOCArNDAsMTAgQEAKICNpbmNsdWRlICJJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTG9va3Vw
LmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCisjaW5jbHVkZSA8dW5pY29kZS91bG9j
Lmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0x
MDIsNiArMTA1LDU5NiBAQCBTdHJ1Y3R1cmUqIEludGxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVgogICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAorc3RhdGljIFN0cmluZyBnZXRJ
bnRsU3RyaW5nT3B0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBvcHRpb25zLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHksIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgdmFsdWVzLCBjb25zdCBjaGFy
KiBub3RGb3VuZCwgU3RyaW5nIGZhbGxiYWNrKQoreworICAgIC8vIDkuMi45IEdldE9wdGlvbiAo
b3B0aW9ucywgcHJvcGVydHksIHR5cGUsIHZhbHVlcywgZmFsbGJhY2spCisgICAgLy8gRm9yIHR5
cGU9InN0cmluZyIuCisKKyAgICAvLyAxLiBMZXQgb3B0cyBiZSBUb09iamVjdChvcHRpb25zKS4K
KyAgICBKU09iamVjdCogb3B0cyA9IG9wdGlvbnMudG9PYmplY3QoZXhlYyk7CisKKyAgICAvLyAy
LiBSZXR1cm5JZkFicnVwdChvcHRzKS4KKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIC8vIDMuIExldCB2YWx1ZSBiZSBHZXQob3B0
cywgcHJvcGVydHkpLgorICAgIEpTVmFsdWUgdmFsdWUgPSBvcHRzLT5nZXQoZXhlYywgcHJvcGVy
dHkpOworCisgICAgLy8gNC4gUmV0dXJuSWZBYnJ1cHQodmFsdWUpLgorICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gNS4gSWYg
dmFsdWUgaXMgbm90IHVuZGVmaW5lZCwgdGhlbgorICAgIGlmICghdmFsdWUuaXNVbmRlZmluZWQo
KSkgeworICAgICAgICAvLyBhLiBBc3NlcnQ6IHR5cGUgaXMgImJvb2xlYW4iIG9yICJzdHJpbmci
LgorICAgICAgICAvLyBGdW5jdGlvbiBkZWRpY2F0ZWQgdG8gInN0cmluZyIuCisKKyAgICAgICAg
Ly8gYy4gSWYgdHlwZSBpcyAic3RyaW5nIiwgdGhlbgorICAgICAgICAvLyBpLiBMZXQgdmFsdWUg
YmUgVG9TdHJpbmcodmFsdWUpLgorICAgICAgICBKU1N0cmluZyogc3RyaW5nVmFsdWUgPSB2YWx1
ZS50b1N0cmluZyhleGVjKTsKKworICAgICAgICAvLyBpaS4gUmV0dXJuSWZBYnJ1cHQodmFsdWUp
LgorICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisKKyAgICAgICAgLy8gZC4gSWYgdmFsdWVzIGlzIG5vdCB1bmRlZmluZWQsIHRo
ZW4KKyAgICAgICAgLy8gaS4gSWYgdmFsdWVzIGRvZXMgbm90IGNvbnRhaW4gYW4gZWxlbWVudCBl
cXVhbCB0byB2YWx1ZSwgdGhyb3cgYSBSYW5nZUVycm9yIGV4Y2VwdGlvbi4KKyAgICAgICAgaWYg
KCF2YWx1ZXMuaXNFbXB0eSgpICYmICF2YWx1ZXMuY29udGFpbnMoc3RyaW5nVmFsdWUtPnZhbHVl
KGV4ZWMpKSkgeworICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBj
cmVhdGVSYW5nZUVycm9yKGV4ZWMsIFN0cmluZyhub3RGb3VuZCkpKTsKKyAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGUuIFJldHVybiB2YWx1ZS4K
KyAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlLT52YWx1ZShleGVjKTsKKyAgICB9CisKKyAgICAv
LyA2LiBFbHNlIHJldHVybiBmYWxsYmFjay4KKyAgICByZXR1cm4gZmFsbGJhY2s7Cit9CisKK3N0
YXRpYyBTdHJpbmcgZ2V0UHJpdmF0ZVVzZUxhbmdUYWcoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cnRzLCBzaXplX3Qgc3RhcnRJbmRleCkKK3sKKyAgICBzaXplX3QgbnVtUGFydHMgPSBwYXJ0cy5z
aXplKCk7CisgICAgc2l6ZV90IGN1cnJlbnRJbmRleCA9IHN0YXJ0SW5kZXg7CisKKyAgICAvLyBD
aGVjayBmb3IgcHJpdmF0ZXVzZS4KKyAgICAvLyBwcml2YXRldXNlID0gIngiIDEqKCItIiAoMio4
YWxwaGFudW0pKQorICAgIFN0cmluZ0J1aWxkZXIgcHJpdmF0ZXVzZTsKKyAgICB3aGlsZSAoY3Vy
cmVudEluZGV4IDwgbnVtUGFydHMpIHsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBzaW5nbGV0b24g
PSBwYXJ0c1tjdXJyZW50SW5kZXhdOworICAgICAgICB1bnNpZ25lZCBzaW5nbGV0b25MZW5ndGgg
PSBzaW5nbGV0b24ubGVuZ3RoKCk7CisgICAgICAgIGJvb2wgaXNWYWxpZCA9IChzaW5nbGV0b25M
ZW5ndGggPT0gMSAmJiAoc2luZ2xldG9uID09ICJ4IiB8fCBzaW5nbGV0b24gPT0gIlgiKSk7Cisg
ICAgICAgIGlmICghaXNWYWxpZCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChj
dXJyZW50SW5kZXggIT0gc3RhcnRJbmRleCkKKyAgICAgICAgICAgIHByaXZhdGV1c2UuYXBwZW5k
KCctJyk7CisKKyAgICAgICAgKytjdXJyZW50SW5kZXg7CisgICAgICAgIHVuc2lnbmVkIG51bUV4
dFBhcnRzID0gMDsKKyAgICAgICAgcHJpdmF0ZXVzZS5hcHBlbmQoJ3gnKTsKKyAgICAgICAgd2hp
bGUgKGN1cnJlbnRJbmRleCA8IG51bVBhcnRzKSB7CisgICAgICAgICAgICBjb25zdCBTdHJpbmcm
IGV4dFBhcnQgPSBwYXJ0c1tjdXJyZW50SW5kZXhdOworICAgICAgICAgICAgdW5zaWduZWQgZXh0
UGFydExlbmd0aCA9IGV4dFBhcnQubGVuZ3RoKCk7CisKKyAgICAgICAgICAgIGJvb2wgaXNWYWxp
ZCA9IChleHRQYXJ0TGVuZ3RoID49IDIgJiYgZXh0UGFydExlbmd0aCA8PSA4ICYmIGV4dFBhcnQu
aXNBbGxTcGVjaWFsQ2hhcmFjdGVyczxpc0FTQ0lJQWxwaGFudW1lcmljPigpKTsKKyAgICAgICAg
ICAgIGlmICghaXNWYWxpZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
KytjdXJyZW50SW5kZXg7CisgICAgICAgICAgICArK251bUV4dFBhcnRzOworICAgICAgICAgICAg
cHJpdmF0ZXVzZS5hcHBlbmQoJy0nKTsKKyAgICAgICAgICAgIHByaXZhdGV1c2UuYXBwZW5kKGV4
dFBhcnQuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBSZXF1aXJlcyBhdCBsZWFzdCBvbmUgcHJvZHVjdGlvbi4KKyAgICAgICAgaWYgKCFudW1FeHRQ
YXJ0cykKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisKKyAgICAvLyBMZWZ0
b3ZlcnMgbWFrZXMgaXQgaW52YWxpZC4KKyAgICBpZiAoY3VycmVudEluZGV4IDwgbnVtUGFydHMp
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIHJldHVybiBwcml2YXRldXNlLnRvU3Ry
aW5nKCk7Cit9CisKK3N0YXRpYyBTdHJpbmcgZ2V0Q2Fub25pY2FsTGFuZ1RhZyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFydHMpCit7CisgICAgQVNTRVJUKCFwYXJ0cy5pc0VtcHR5KCkpOworCisg
ICAgLy8gRm9sbG93cyB0aGUgZ3JhbW1hciBhdCBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9y
ZmMvYmNwL2JjcDQ3LnR4dAorICAgIC8vIGxhbmd0YWcgPSBsYW5ndWFnZSBbIi0iIHNjcmlwdF0g
WyItIiByZWdpb25dICooIi0iIHZhcmlhbnQpICooIi0iIGV4dGVuc2lvbikgWyItIiBwcml2YXRl
dXNlXQorCisgICAgc2l6ZV90IG51bVBhcnRzID0gcGFydHMuc2l6ZSgpOworICAgIC8vIENoZWNr
IGZvciBsYW5ndWFnZS4KKyAgICAvLyBsYW5ndWFnZSA9IDIqM0FMUEhBIFsiLSIgZXh0bGFuZ10g
LyA0QUxQSEEgLyA1KjhBTFBIQQorICAgIHNpemVfdCBjdXJyZW50SW5kZXggPSAwOworICAgIGNv
bnN0IFN0cmluZyYgbGFuZ3VhZ2UgPSBwYXJ0c1tjdXJyZW50SW5kZXhdOworICAgIHVuc2lnbmVk
IGxhbmd1YWdlTGVuZ3RoID0gbGFuZ3VhZ2UubGVuZ3RoKCk7CisgICAgYm9vbCBjYW5IYXZlRXh0
bGFuZyA9IGxhbmd1YWdlTGVuZ3RoID49IDIgJiYgbGFuZ3VhZ2VMZW5ndGggPD0gMzsKKyAgICBi
b29sIGlzVmFsaWRMYW5ndWFnZSA9IGxhbmd1YWdlTGVuZ3RoID49IDIgJiYgbGFuZ3VhZ2VMZW5n
dGggPD0gOCAmJiBsYW5ndWFnZS5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzQVNDSUlBbHBoYT4o
KTsKKyAgICBpZiAoIWlzVmFsaWRMYW5ndWFnZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
CisgICAgKytjdXJyZW50SW5kZXg7CisgICAgU3RyaW5nQnVpbGRlciBjYW5vbmljYWw7CisgICAg
Y2Fub25pY2FsLmFwcGVuZChsYW5ndWFnZS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKTsKKwor
ICAgIC8vIENoZWNrIGZvciBleHRsYW5nLgorICAgIC8vIGV4dGxhbmcgPSAzQUxQSEEgKjIoIi0i
IDNBTFBIQSkKKyAgICBpZiAoY2FuSGF2ZUV4dGxhbmcpIHsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCB0aW1lcyA9IDA7IHRpbWVzIDwgMyAmJiBjdXJyZW50SW5kZXggPCBudW1QYXJ0czsgKyt0aW1l
cykgeworICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBleHRsYW5nID0gcGFydHNbY3VycmVudElu
ZGV4XTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGV4dGxhbmdMZW5ndGggPSBleHRsYW5nLmxlbmd0
aCgpOworICAgICAgICAgICAgaWYgKGV4dGxhbmdMZW5ndGggPT0gMyAmJiBleHRsYW5nLmlzQWxs
U3BlY2lhbENoYXJhY3RlcnM8aXNBU0NJSUFscGhhPigpKSB7CisgICAgICAgICAgICAgICAgKytj
dXJyZW50SW5kZXg7CisgICAgICAgICAgICAgICAgY2Fub25pY2FsLmFwcGVuZCgnLScpOworICAg
ICAgICAgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQoZXh0bGFuZy5jb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZSgpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIHNjcmlwdC4KKyAgICAvLyBzY3JpcHQg
PSA0QUxQSEEKKyAgICBpZiAoY3VycmVudEluZGV4IDwgbnVtUGFydHMpIHsKKyAgICAgICAgY29u
c3QgU3RyaW5nJiBzY3JpcHQgPSBwYXJ0c1tjdXJyZW50SW5kZXhdOworICAgICAgICB1bnNpZ25l
ZCBzY3JpcHRMZW5ndGggPSBzY3JpcHQubGVuZ3RoKCk7CisgICAgICAgIGlmIChzY3JpcHRMZW5n
dGggPT0gNCAmJiBzY3JpcHQuaXNBbGxTcGVjaWFsQ2hhcmFjdGVyczxpc0FTQ0lJQWxwaGE+KCkp
IHsKKyAgICAgICAgICAgICsrY3VycmVudEluZGV4OworICAgICAgICAgICAgY2Fub25pY2FsLmFw
cGVuZCgnLScpOworICAgICAgICAgICAgY2Fub25pY2FsLmFwcGVuZCh0b0FTQ0lJVXBwZXIoc2Ny
aXB0WzBdKSk7CisgICAgICAgICAgICBjYW5vbmljYWwuYXBwZW5kKHNjcmlwdC5zdWJzdHJpbmco
MSwgMykuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBDaGVjayBmb3IgcmVnaW9uLgorICAgIC8vIHJlZ2lvbiA9IDJBTFBIQSAvIDNESUdJVAor
ICAgIGlmIChjdXJyZW50SW5kZXggPCBudW1QYXJ0cykgeworICAgICAgICBjb25zdCBTdHJpbmcm
IHJlZ2lvbiA9IHBhcnRzW2N1cnJlbnRJbmRleF07CisgICAgICAgIHVuc2lnbmVkIHJlZ2lvbkxl
bmd0aCA9IHJlZ2lvbi5sZW5ndGgoKTsKKyAgICAgICAgYm9vbCBpc1ZhbGlkUmVnaW9uID0gKAor
ICAgICAgICAgICAgKHJlZ2lvbkxlbmd0aCA9PSAyICYmIHJlZ2lvbi5pc0FsbFNwZWNpYWxDaGFy
YWN0ZXJzPGlzQVNDSUlBbHBoYT4oKSkKKyAgICAgICAgICAgIHx8IChyZWdpb25MZW5ndGggPT0g
MyAmJiByZWdpb24uaXNBbGxTcGVjaWFsQ2hhcmFjdGVyczxpc0FTQ0lJRGlnaXQ+KCkpCisgICAg
ICAgICk7CisgICAgICAgIGlmIChpc1ZhbGlkUmVnaW9uKSB7CisgICAgICAgICAgICArK2N1cnJl
bnRJbmRleDsKKyAgICAgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQoJy0nKTsKKyAgICAgICAgICAg
IGNhbm9uaWNhbC5hcHBlbmQocmVnaW9uLnVwcGVyKCkpOworICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gQ2hlY2sgZm9yIHZhcmlhbnQuCisgICAgLy8gdmFyaWFudCA9IDUqOGFscGhhbnVtIC8g
KERJR0lUIDNhbHBoYW51bSkKKyAgICBIYXNoU2V0PFN0cmluZz4gc3VidGFnczsKKyAgICB3aGls
ZSAoY3VycmVudEluZGV4IDwgbnVtUGFydHMpIHsKKyAgICAgICAgY29uc3QgU3RyaW5nJiB2YXJp
YW50ID0gcGFydHNbY3VycmVudEluZGV4XTsKKyAgICAgICAgdW5zaWduZWQgdmFyaWFudExlbmd0
aCA9IHZhcmlhbnQubGVuZ3RoKCk7CisgICAgICAgIGJvb2wgaXNWYWxpZFZhcmlhbnQgPSAoCisg
ICAgICAgICAgICAodmFyaWFudExlbmd0aCA+PSA1ICYmIHZhcmlhbnRMZW5ndGggPD0gOCAmJiB2
YXJpYW50LmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNBU0NJSUFscGhhbnVtZXJpYz4oKSkKKyAg
ICAgICAgICAgIHx8ICh2YXJpYW50TGVuZ3RoID09IDQgJiYgaXNBU0NJSURpZ2l0KHZhcmlhbnRb
MF0pICYmIHZhcmlhbnQuc3Vic3RyaW5nKDEsIDMpLmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNB
U0NJSUFscGhhbnVtZXJpYz4oKSkKKyAgICAgICAgKTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkVmFy
aWFudCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIENhbm5vdCBpbmNsdWRlIGR1
cGxpY2F0ZSBzdWJ0YWdzIChjYXNlIGluc2Vuc2l0aXZlKS4KKyAgICAgICAgU3RyaW5nIGxvd2Vy
VmFyaWFudCA9IHZhcmlhbnQuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKKyAgICAgICAgaWYg
KCFzdWJ0YWdzLmFkZChsb3dlclZhcmlhbnQpLmlzTmV3RW50cnkpCisgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisKKyAgICAgICAgKytjdXJyZW50SW5kZXg7CisKKyAgICAgICAgLy8gUmVv
cmRlcmluZyB2YXJpYW50IHN1YnRhZ3MgaXMgbm90IHJlcXVpcmVkIGluIHRoZSBzcGVjLgorICAg
ICAgICBjYW5vbmljYWwuYXBwZW5kKCctJyk7CisgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQobG93
ZXJWYXJpYW50KTsKKyAgICB9CisKKyAgICAvLyBDaGVjayBmb3IgZXh0ZW5zaW9uLgorICAgIC8v
IGV4dGVuc2lvbiA9IHNpbmdsZXRvbiAxKigiLSIgKDIqOGFscGhhbnVtKSkKKyAgICAvLyBzaW5n
bGV0b24gPSBhbHBoYW51bSBleGNlcHQgeCBvciBYCisgICAgc3VidGFncy5jbGVhcigpOworICAg
IFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnM7CisgICAgd2hpbGUgKGN1cnJlbnRJbmRleCA8IG51
bVBhcnRzKSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYgcG9zc2libGVTaW5nbGV0b24gPSBwYXJ0
c1tjdXJyZW50SW5kZXhdOworICAgICAgICB1bnNpZ25lZCBzaW5nbGV0b25MZW5ndGggPSBwb3Nz
aWJsZVNpbmdsZXRvbi5sZW5ndGgoKTsKKyAgICAgICAgYm9vbCBpc1ZhbGlkU2luZ2xldG9uID0g
KHNpbmdsZXRvbkxlbmd0aCA9PSAxICYmIHBvc3NpYmxlU2luZ2xldG9uICE9ICJ4IiAmJiBwb3Nz
aWJsZVNpbmdsZXRvbiAhPSAiWCIgJiYgaXNBU0NJSUFscGhhbnVtZXJpYyhwb3NzaWJsZVNpbmds
ZXRvblswXSkpOworICAgICAgICBpZiAoIWlzVmFsaWRTaW5nbGV0b24pCisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAvLyBDYW5ub3QgaW5jbHVkZSBkdXBsaWNhdGUgc2luZ2xldG9uIChj
YXNlIGluc2Vuc2l0aXZlKS4KKyAgICAgICAgU3RyaW5nIHNpbmdsZXRvbiA9IHBvc3NpYmxlU2lu
Z2xldG9uLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7CisgICAgICAgIGlmICghc3VidGFncy5h
ZGQoc2luZ2xldG9uKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
CisgICAgICAgICsrY3VycmVudEluZGV4OworICAgICAgICBpbnQgbnVtRXh0UGFydHMgPSAwOwor
ICAgICAgICBTdHJpbmdCdWlsZGVyIGV4dGVuc2lvbjsKKyAgICAgICAgZXh0ZW5zaW9uLmFwcGVu
ZChzaW5nbGV0b24pOworICAgICAgICB3aGlsZSAoY3VycmVudEluZGV4IDwgbnVtUGFydHMpIHsK
KyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZXh0UGFydCA9IHBhcnRzW2N1cnJlbnRJbmRleF07
CisgICAgICAgICAgICB1bnNpZ25lZCBleHRQYXJ0TGVuZ3RoID0gZXh0UGFydC5sZW5ndGgoKTsK
KworICAgICAgICAgICAgYm9vbCBpc1ZhbGlkID0gKGV4dFBhcnRMZW5ndGggPj0gMiAmJiBleHRQ
YXJ0TGVuZ3RoIDw9IDggJiYgZXh0UGFydC5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzQVNDSUlB
bHBoYW51bWVyaWM+KCkpOworICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICArK2N1cnJlbnRJbmRleDsKKyAgICAgICAgICAgICsr
bnVtRXh0UGFydHM7CisgICAgICAgICAgICBleHRlbnNpb24uYXBwZW5kKCctJyk7CisgICAgICAg
ICAgICBleHRlbnNpb24uYXBwZW5kKGV4dFBhcnQuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXF1aXJlcyBhdCBsZWFzdCBvbmUgcHJvZHVjdGlv
bi4KKyAgICAgICAgaWYgKCFudW1FeHRQYXJ0cykKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKworICAgICAgICBleHRlbnNpb25zLmFwcGVuZChleHRlbnNpb24udG9TdHJpbmcoKSk7Cisg
ICAgfQorCisgICAgLy8gQWRkIGV4dGVuc2lvbnMgdG8gY2Fub25pY2FsIHNvcnRlZCBieSBzaW5n
bGV0b24uCisgICAgc3RkOjpzb3J0KAorICAgICAgICBleHRlbnNpb25zLmJlZ2luKCksCisgICAg
ICAgIGV4dGVuc2lvbnMuZW5kKCksCisgICAgICAgIFtdIChjb25zdCBTdHJpbmcmIGEsIGNvbnN0
IFN0cmluZyYgYikgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gYVswXSA8IGJbMF07Cisg
ICAgICAgIH0KKyAgICApOworICAgIHNpemVfdCBudW1FeHRlbnN0aW9ucyA9IGV4dGVuc2lvbnMu
c2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtRXh0ZW5zdGlvbnM7ICsraSkg
eworICAgICAgICBjYW5vbmljYWwuYXBwZW5kKCctJyk7CisgICAgICAgIGNhbm9uaWNhbC5hcHBl
bmQoZXh0ZW5zaW9uc1tpXSk7CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIHByaXZhdGV1c2Uu
CisgICAgaWYgKGN1cnJlbnRJbmRleCA8IG51bVBhcnRzKSB7CisgICAgICAgIFN0cmluZyBwcml2
YXRldXNlID0gZ2V0UHJpdmF0ZVVzZUxhbmdUYWcocGFydHMsIGN1cnJlbnRJbmRleCk7CisgICAg
ICAgIGlmIChwcml2YXRldXNlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygp
OworICAgICAgICBjYW5vbmljYWwuYXBwZW5kKCctJyk7CisgICAgICAgIGNhbm9uaWNhbC5hcHBl
bmQocHJpdmF0ZXVzZSk7CisgICAgfQorCisgICAgLy8gRklYTUU6IFJlcGxhY2Ugc3VidGFncyB3
aXRoIHRoZWlyIHByZWZlcnJlZCB2YWx1ZXMuCisKKyAgICByZXR1cm4gY2Fub25pY2FsLnRvU3Ry
aW5nKCk7Cit9CisKK3N0YXRpYyBTdHJpbmcgZ2V0R3JhbmRmYXRoZXJlZExhbmdUYWcoY29uc3Qg
U3RyaW5nJiBsb2NhbGUpCit7CisgICAgLy8gZ3JhbmRmYXRoZXJlZCA9IGlycmVndWxhciAvIHJl
Z3VsYXIKKyAgICAvLyBGSVhNRTogY29udmVydCB0byBhIGNvbXBpbGUgdGltZSBoYXNoIHRhYmxl
IGlmIHRoaXMgaXMgY2F1c2luZyBwZXJmb3JtYW5jZSBpc3N1ZXMuCisgICAgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gdGFnTWFwID0geworICAgICAgICAvLyBJcnJlZ3VsYXIuCisgICAgICAgIHsg
QVNDSUlMaXRlcmFsKCJlbi1nYi1vZWQiKSwgQVNDSUlMaXRlcmFsKCJlbi1HQi1vZWQiKSB9LAor
ICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiaS1hbWkiKSwgQVNDSUlMaXRlcmFsKCJhbWkiKSB9LAor
ICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiaS1ibm4iKSwgQVNDSUlMaXRlcmFsKCJibm4iKSB9LAor
ICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiaS1kZWZhdWx0IiksIEFTQ0lJTGl0ZXJhbCgiaS1kZWZh
dWx0IikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImktZW5vY2hpYW4iKSwgQVNDSUlMaXRl
cmFsKCJpLWVub2NoaWFuIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImktaGFrIiksIEFT
Q0lJTGl0ZXJhbCgiaGFrIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImkta2xpbmdvbiIp
LCBBU0NJSUxpdGVyYWwoInRsaCIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJpLWx1eCIp
LCBBU0NJSUxpdGVyYWwoImxiIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImktbWluZ28i
KSwgQVNDSUlMaXRlcmFsKCJpLW1pbmdvIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoImkt
bmF2YWpvIiksIEFTQ0lJTGl0ZXJhbCgibnYiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgi
aS1wd24iKSwgQVNDSUlMaXRlcmFsKCJwd24iKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgi
aS10YW8iKSwgQVNDSUlMaXRlcmFsKCJ0YW8iKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgi
aS10YXkiKSwgQVNDSUlMaXRlcmFsKCJ0YXkiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgi
aS10c3UiKSwgQVNDSUlMaXRlcmFsKCJ0c3UiKSB9LAorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgi
c2duLWJlLWZyIiksIEFTQ0lJTGl0ZXJhbCgic2ZiIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVy
YWwoInNnbi1iZS1ubCIpLCBBU0NJSUxpdGVyYWwoInZndCIpIH0sCisgICAgICAgIHsgQVNDSUlM
aXRlcmFsKCJzZ24tY2gtZGUiKSwgQVNDSUlMaXRlcmFsKCJzZ2ciKSB9LAorICAgICAgICAvLyBS
ZWd1bGFyLgorICAgICAgICB7IEFTQ0lJTGl0ZXJhbCgiYXJ0LWxvamJhbiIpLCBBU0NJSUxpdGVy
YWwoImpibyIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRlcmFsKCJjZWwtZ2F1bGlzaCIpLCBBU0NJ
SUxpdGVyYWwoImNlbC1nYXVsaXNoIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoIm5vLWJv
ayIpLCBBU0NJSUxpdGVyYWwoIm5iIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoIm5vLW55
biIpLCBBU0NJSUxpdGVyYWwoIm5uIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoInpoLWd1
b3l1IiksIEFTQ0lJTGl0ZXJhbCgiY21uIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwoInpo
LWhha2thIiksIEFTQ0lJTGl0ZXJhbCgiaGFrIikgfSwKKyAgICAgICAgeyBBU0NJSUxpdGVyYWwo
InpoLW1pbiIpLCBBU0NJSUxpdGVyYWwoInpoLW1pbiIpIH0sCisgICAgICAgIHsgQVNDSUlMaXRl
cmFsKCJ6aC1taW4tbmFuIiksIEFTQ0lJTGl0ZXJhbCgibmFuIikgfSwKKyAgICAgICAgeyBBU0NJ
SUxpdGVyYWwoInpoLXhpYW5nIiksIEFTQ0lJTGl0ZXJhbCgiaHNuIikgfQorICAgIH07CisKKyAg
ICByZXR1cm4gdGFnTWFwLmdldChsb2NhbGUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7Cit9
CisKK3N0YXRpYyBTdHJpbmcgY2Fub25pY2FsaXplTGFuZ3VhZ2VUYWcoY29uc3QgU3RyaW5nJiBs
b2NhbGUpCit7CisgICAgLy8gNi4yLjIgSXNTdHJ1Y3R1cmFsbHlWYWxpZExhbmd1YWdlVGFnIChs
b2NhbGUpCisgICAgLy8gNi4yLjMgQ2Fub25pY2FsaXplTGFuZ3VhZ2VUYWcgKGxvY2FsZSkKKyAg
ICAvLyBUaGVzZSBhcmUgZG9uZSBvbmUgYWZ0ZXIgYW5vdGhlciBpbiBDYW5vbmljYWxpemVMb2Nh
bGVMaXN0LCBzbyB0aGV5IGFyZSBjb21iaW5lZCBoZXJlIHRvIHJlZHVjZSBkdXBsaWNhdGlvbi4K
KyAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvYmNwL2JjcDQ3LnR4dAorCisg
ICAgLy8gTGFuZ3VhZ2UtVGFnID0gbGFuZ3RhZyAvIHByaXZhdGV1c2UgLyBncmFuZGZhdGhlcmVk
CisgICAgU3RyaW5nIGdyYW5kZmF0aGVyID0gZ2V0R3JhbmRmYXRoZXJlZExhbmdUYWcobG9jYWxl
KTsKKyAgICBpZiAoIWdyYW5kZmF0aGVyLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZ3JhbmRm
YXRoZXI7CisKKyAgICAvLyBGSVhNRTogUmVwbGFjZSByZWR1bmRhbnQgdGFncyBbUkZDNDY0N10u
CisKKyAgICBWZWN0b3I8U3RyaW5nPiBwYXJ0czsKKyAgICBsb2NhbGUuc3BsaXQoJy0nLCB0cnVl
LCBwYXJ0cyk7CisgICAgaWYgKCFwYXJ0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgU3RyaW5nIGxh
bmd0YWcgPSBnZXRDYW5vbmljYWxMYW5nVGFnKHBhcnRzKTsKKyAgICAgICAgaWYgKCFsYW5ndGFn
LmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGxhbmd0YWc7CisKKyAgICAgICAgU3RyaW5n
IHByaXZhdGV1c2UgPSBnZXRQcml2YXRlVXNlTGFuZ1RhZyhwYXJ0cywgMCk7CisgICAgICAgIGlm
ICghcHJpdmF0ZXVzZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBwcml2YXRldXNlOwor
ICAgIH0KKworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworSlNBcnJheSogY2Fub25pY2FsaXpl
TG9jYWxlTGlzdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgbG9jYWxlcykKK3sKKyAgICAvLyA5
LjIuMSBDYW5vbmljYWxpemVMb2NhbGVMaXN0IChsb2NhbGVzKQorICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmNhbGxlZSgp
LT5nbG9iYWxPYmplY3QoKTsKKyAgICBKU0FycmF5KiBzZWVuID0gSlNBcnJheTo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZCh2bSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5n
VHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQ29udGlndW91cyksIDApOworICAgIGlmICgh
c2VlbikgeworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIC8vIDEuIElmIGxvY2FsZXMgaXMgdW5kZWZpbmVk
LCB0aGVuIGEuIFJldHVybiBhIG5ldyBlbXB0eSBMaXN0LgorICAgIGlmIChsb2NhbGVzLmlzVW5k
ZWZpbmVkKCkpCisgICAgICAgIHJldHVybiBzZWVuOworCisgICAgLy8gMi4gTGV0IHNlZW4gYmUg
YW4gZW1wdHkgTGlzdC4KKyAgICAvLyBEb25lIGJlZm9yZSB0byBhbHNvIHJldHVybiBpbiBzdGVw
IDEsIGlmIG5lZWRlZC4KKworICAgIC8vIDMuIElmIFR5cGUobG9jYWxlcykgaXMgU3RyaW5nLCB0
aGVuCisgICAgSlNPYmplY3QqIGxvY2FsZXNPYmplY3Q7CisgICAgaWYgKGxvY2FsZXMuaXNTdHJp
bmcoKSkgeworICAgICAgICAvLyAgYS4gTGV0IGFMb2NhbGVzIGJlIENyZWF0ZUFycmF5RnJvbUxp
c3Qowqtsb2NhbGVzwrspLgorICAgICAgICBKU0FycmF5KiBsb2NhbGVzQXJyYXkgPSBKU0FycmF5
Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHZtLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJl
Rm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhDb250aWd1b3VzKSwgMSk7
CisgICAgICAgIGxvY2FsZXNBcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCAwLCBsb2NhbGVzKTsK
KyAgICAgICAgLy8gNC4gTGV0IE8gYmUgVG9PYmplY3QoYUxvY2FsZXMpLgorICAgICAgICBsb2Nh
bGVzT2JqZWN0ID0gbG9jYWxlc0FycmF5OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIDQuIExl
dCBPIGJlIFRvT2JqZWN0KGFMb2NhbGVzKS4KKyAgICAgICAgbG9jYWxlc09iamVjdCA9IGxvY2Fs
ZXMudG9PYmplY3QoZXhlYyk7CisgICAgfQorCisgICAgLy8gNS4gUmV0dXJuSWZBYnJ1cHQoTyku
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIC8vIDYuIExldCBsZW4gYmUgVG9MZW5ndGgoR2V0KE8sICJsZW5ndGgiKSkuCisgICAg
SlNWYWx1ZSBsZW5ndGhQcm9wZXJ0eSA9IGxvY2FsZXNPYmplY3QtPmdldChleGVjLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGgpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBkb3VibGUgbGVuZ3RoID0gbGVuZ3RoUHJvcGVydHku
dG9MZW5ndGgoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIEtlZXAgdHJhY2sgb2YgbG9jYWxlcyB0aGF0IGhhdmUg
YmVlbiBhZGRlZCB0byB0aGUgbGlzdC4KKyAgICBIYXNoU2V0PFN0cmluZz4gc2VlblNldDsKKwor
ICAgIC8vIDcuIExldCBrIGJlIDAuCisgICAgLy8gOC4gUmVwZWF0LCB3aGlsZSBrIDwgbGVuCisg
ICAgZm9yIChkb3VibGUgayA9IDA7IGsgPCBsZW5ndGg7ICsraykgeworICAgICAgICAvLyBhLiBM
ZXQgUGsgYmUgVG9TdHJpbmcoaykuCisgICAgICAgIC8vIE5vdCBuZWVkZWQgYmVjYXVzZSBoYXNQ
cm9wZXJ0eSBhbmQgZ2V0IHRha2UgYW4gaW50IGZvciBudW1lcmljIGtleS4KKworICAgICAgICAv
LyBiLiBMZXQga1ByZXNlbnQgYmUgSGFzUHJvcGVydHkoTywgUGspLgorICAgICAgICBib29sIGtQ
cmVzZW50ID0gbG9jYWxlc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgayk7CisKKyAgICAgICAg
Ly8gYy4gUmV0dXJuSWZBYnJ1cHQoa1ByZXNlbnQpLgorICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAvLyBkLiBJ
ZiBrUHJlc2VudCBpcyB0cnVlLCB0aGVuCisgICAgICAgIGlmIChrUHJlc2VudCkgeworICAgICAg
ICAgICAgLy8gaS4gTGV0IGtWYWx1ZSBiZSBHZXQoTywgUGspLgorICAgICAgICAgICAgSlNWYWx1
ZSBrVmFsdWUgPSBsb2NhbGVzT2JqZWN0LT5nZXQoZXhlYywgayk7CisKKyAgICAgICAgICAgIC8v
IGlpLiBSZXR1cm5JZkFicnVwdChrVmFsdWUpLgorICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgICAg
ICAvLyBpaWkuIElmIFR5cGUoa1ZhbHVlKSBpcyBub3QgU3RyaW5nIG9yIE9iamVjdCwgdGhyb3cg
YSBUeXBlRXJyb3IgZXhjZXB0aW9uLgorICAgICAgICAgICAgaWYgKCFrVmFsdWUuaXNTdHJpbmco
KSAmJiAha1ZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoImxvY2FsZSB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG9i
amVjdCIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gaXYuIExldCB0YWcgYmUgVG9TdHJpbmcoa1ZhbHVlKS4KKyAgICAg
ICAgICAgIEpTU3RyaW5nKiB0YWcgPSBrVmFsdWUudG9TdHJpbmcoZXhlYyk7CisKKyAgICAgICAg
ICAgIC8vIHYuIFJldHVybklmQWJydXB0KHRhZykuCisgICAgICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAg
ICAgIC8vIHZpLiBJZiBJc1N0cnVjdHVyYWxseVZhbGlkTGFuZ3VhZ2VUYWcodGFnKSBpcyBmYWxz
ZSwgdGhyb3cgYSBSYW5nZUVycm9yIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIC8vIHZpaS4gTGV0
IGNhbm9uaWNhbGl6ZWRUYWcgYmUgQ2Fub25pY2FsaXplTGFuZ3VhZ2VUYWcodGFnKS4KKyAgICAg
ICAgICAgIFN0cmluZyBjYW5vbmljYWxpemVkVGFnID0gY2Fub25pY2FsaXplTGFuZ3VhZ2VUYWco
dGFnLT52YWx1ZShleGVjKSk7CisgICAgICAgICAgICBpZiAoY2Fub25pY2FsaXplZFRhZy5pc051
bGwoKSkgeworICAgICAgICAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywg
Y3JlYXRlUmFuZ2VFcnJvcihleGVjLCBTdHJpbmc6OmZvcm1hdCgiaW52YWxpZCBsYW5ndWFnZSB0
YWc6ICVzIiwgdGFnLT52YWx1ZShleGVjKS51dGY4KCkuZGF0YSgpKSkpOworICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB2aWlp
LiBJZiBjYW5vbmljYWxpemVkVGFnIGlzIG5vdCBhbiBlbGVtZW50IG9mIHNlZW4sIGFwcGVuZCBj
YW5vbmljYWxpemVkVGFnIGFzIHRoZSBsYXN0IGVsZW1lbnQgb2Ygc2Vlbi4KKyAgICAgICAgICAg
IGlmIChzZWVuU2V0LmFkZChjYW5vbmljYWxpemVkVGFnKS5pc05ld0VudHJ5KQorICAgICAgICAg
ICAgICAgIHNlZW4tPnB1c2goZXhlYywganNTdHJpbmcoZXhlYywgY2Fub25pY2FsaXplZFRhZykp
OworICAgICAgICB9CisgICAgICAgIC8vIGUuIEluY3JlYXNlIGsgYnkgMS4KKyAgICB9CisKKyAg
ICByZXR1cm4gc2VlbjsKK30KKworc3RhdGljIFN0cmluZyBiZXN0QXZhaWxhYmxlTG9jYWxlKGNv
bnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29uc3QgU3RyaW5nJiBsb2Nh
bGUpCit7CisgICAgLy8gOS4yLjIgQmVzdEF2YWlsYWJsZUxvY2FsZSAoYXZhaWxhYmxlTG9jYWxl
cywgbG9jYWxlKQorICAgIC8vIDEuIExldCBjYW5kaWRhdGUgYmUgbG9jYWxlLgorICAgIFN0cmlu
ZyBjYW5kaWRhdGUgPSBsb2NhbGU7CisKKyAgICAvLyAyLiBSZXBlYXQKKyAgICB3aGlsZSAoIWNh
bmRpZGF0ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gYS4gSWYgYXZhaWxhYmxlTG9jYWxlcyBj
b250YWlucyBhbiBlbGVtZW50IGVxdWFsIHRvIGNhbmRpZGF0ZSwgdGhlbiByZXR1cm4gY2FuZGlk
YXRlLgorICAgICAgICBpZiAoYXZhaWxhYmxlTG9jYWxlcy5jb250YWlucyhjYW5kaWRhdGUpKQor
ICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKKworICAgICAgICAvLyBiLiBMZXQgcG9zIGJl
IHRoZSBjaGFyYWN0ZXIgaW5kZXggb2YgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiAiLSIgKFUrMDAy
RCkgd2l0aGluIGNhbmRpZGF0ZS4gSWYgdGhhdCBjaGFyYWN0ZXIgZG9lcyBub3Qgb2NjdXIsIHJl
dHVybiB1bmRlZmluZWQuCisgICAgICAgIHNpemVfdCBwb3MgPSBjYW5kaWRhdGUucmV2ZXJzZUZp
bmQoJy0nKTsKKyAgICAgICAgaWYgKHBvcyA9PSBub3RGb3VuZCkKKyAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKworICAgICAgICAvLyBjLiBJZiBwb3Mg4omlIDIgYW5kIHRoZSBjaGFyYWN0
ZXIgIi0iIG9jY3VycyBhdCBpbmRleCBwb3MtMiBvZiBjYW5kaWRhdGUsIHRoZW4gZGVjcmVhc2Ug
cG9zIGJ5IDIuCisgICAgICAgIGlmIChwb3MgPj0gMiAmJiBjYW5kaWRhdGVbcG9zIC0gMl0gPT0g
Jy0nKQorICAgICAgICAgICAgcG9zIC09IDI7CisKKyAgICAgICAgLy8gZC4gTGV0IGNhbmRpZGF0
ZSBiZSB0aGUgc3Vic3RyaW5nIG9mIGNhbmRpZGF0ZSBmcm9tIHBvc2l0aW9uIDAsIGluY2x1c2l2
ZSwgdG8gcG9zaXRpb24gcG9zLCBleGNsdXNpdmUuCisgICAgICAgIGNhbmRpZGF0ZSA9IGNhbmRp
ZGF0ZS5zdWJzdHJpbmcoMCwgcG9zKTsKKyAgICB9CisKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9
CisKK3N0YXRpYyBKU0FycmF5KiBsb29rdXBTdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBKU0FycmF5KiByZXF1
ZXN0ZWRMb2NhbGVzKQoreworICAgIC8vIDkuMi42IExvb2t1cFN1cHBvcnRlZExvY2FsZXMgKGF2
YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpCisKKyAgICAvLyAxLiBMZXQgckxvY2Fs
ZXMgYmUgQ3JlYXRlQXJyYXlGcm9tTGlzdChyZXF1ZXN0ZWRMb2NhbGVzKS4KKyAgICAvLyBBbHJl
YWR5IGFuIGFycmF5LgorCisgICAgLy8gMi4gTGV0IGxlbiBiZSBUb0xlbmd0aChHZXQockxvY2Fs
ZXMsICJsZW5ndGgiKSkuCisgICAgdW5zaWduZWQgbGVuID0gcmVxdWVzdGVkTG9jYWxlcy0+bGVu
Z3RoKCk7CisKKyAgICAvLyAzLiBMZXQgc3Vic2V0IGJlIGFuIGVtcHR5IExpc3QuCisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhl
Yy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpOworICAgIEpTQXJyYXkqIHN1YnNldCA9IEpTQXJy
YXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1
cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aFVuZGVjaWRlZCksIDAp
OworICAgIGlmICghc3Vic2V0KSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVj
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgLy8gNC4gTGV0IGsgYmUg
MC4KKyAgICAvLyA1LiBSZXBlYXQgd2hpbGUgayA8IGxlbgorICAgIGZvciAodW5zaWduZWQgayA9
IDA7IGsgPCBsZW47ICsraykgeworICAgICAgICAvLyBhLiBMZXQgUGsgYmUgVG9TdHJpbmcoayku
CisgICAgICAgIC8vIGIuIExldCBsb2NhbGUgYmUgR2V0KHJMb2NhbGVzLCBQaykuCisgICAgICAg
IEpTVmFsdWUgbG9jYWxlID0gcmVxdWVzdGVkTG9jYWxlcy0+Z2V0KGV4ZWMsIGspOworCisgICAg
ICAgIC8vIGMuIFJldHVybklmQWJydXB0KGxvY2FsZSkuCisgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIC8vIGQu
IExldCBub0V4dGVuc2lvbnNMb2NhbGUgYmUgdGhlIFN0cmluZyB2YWx1ZSB0aGF0IGlzIGxvY2Fs
ZSB3aXRoIGFsbCBVbmljb2RlIGxvY2FsZSBleHRlbnNpb24gc2VxdWVuY2VzIHJlbW92ZWQuCisg
ICAgICAgIEpTU3RyaW5nKiBqc0xvY2FsZSA9IGxvY2FsZS50b1N0cmluZyhleGVjKTsKKyAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICAgICAgU3RyaW5nIHNMb2NhbGUgPSBqc0xvY2FsZS0+dmFsdWUoZXhlYyk7CisgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IHBhcnRzOworICAgICAgICBzTG9jYWxlLnNwbGl0KCctJywgcGFy
dHMpOworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIHNpemVfdCBwYXJ0
c1NpemUgPSBwYXJ0cy5zaXplKCk7CisgICAgICAgIGlmIChwYXJ0c1NpemUgPiAwKQorICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQocGFydHNbMF0pOworICAgICAgICBmb3IgKHNpemVfdCBwID0g
MTsgcCA8IHBhcnRzU2l6ZTsgKytwKSB7CisgICAgICAgICAgICBpZiAocGFydHNbcF0gPT0gInUi
KSB7CisgICAgICAgICAgICAgICAgLy8gU2tpcCB0aGUgdS0gYW5kIGFueXRoaW5nIHRoYXQgZm9s
bG93cyB1bnRpbCBhbm90aGVyIHNpbmdsZXRvbi4KKyAgICAgICAgICAgICAgICAvLyBXaGlsZSB0
aGUgbmV4dCBwYXJ0IGlzIHBhcnQgb2YgdGhlIHVuaWNvZGUgZXh0ZW5zaW9uLCBza2lwIGl0Lgor
ICAgICAgICAgICAgICAgIHdoaWxlIChwICsgMSA8IHBhcnRzU2l6ZSAmJiBwYXJ0c1twICsgMV0u
bGVuZ3RoKCkgPiAxKQorICAgICAgICAgICAgICAgICAgICArK3A7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCctJyk7CisgICAgICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQocGFydHNbcF0pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIFN0cmluZyBub0V4dGVuc2lvbnNMb2NhbGUgPSBidWlsZGVyLnRvU3RyaW5nKCk7CisK
KyAgICAgICAgLy8gZS4gTGV0IGF2YWlsYWJsZUxvY2FsZSBiZSBCZXN0QXZhaWxhYmxlTG9jYWxl
KGF2YWlsYWJsZUxvY2FsZXMsIG5vRXh0ZW5zaW9uc0xvY2FsZSkuCisgICAgICAgIFN0cmluZyBh
dmFpbGFibGVMb2NhbGUgPSBiZXN0QXZhaWxhYmxlTG9jYWxlKGF2YWlsYWJsZUxvY2FsZXMsIG5v
RXh0ZW5zaW9uc0xvY2FsZSk7CisKKyAgICAgICAgLy8gZi4gSWYgYXZhaWxhYmxlTG9jYWxlIGlz
IG5vdCB1bmRlZmluZWQsIHRoZW4gYXBwZW5kIGxvY2FsZSB0byB0aGUgZW5kIG9mIHN1YnNldC4K
KyAgICAgICAgaWYgKCFhdmFpbGFibGVMb2NhbGUuaXNOdWxsKCkpCisgICAgICAgICAgICBzdWJz
ZXQtPnB1c2goZXhlYywgbG9jYWxlKTsKKworICAgICAgICAvLyBnLiBJbmNyZW1lbnQgayBieSAx
LgorICAgIH0KKworICAgIC8vIDYuIFJldHVybiBzdWJzZXQuCisgICAgcmV0dXJuIHN1YnNldDsK
K30KKworc3RhdGljIEpTQXJyYXkqIGJlc3RGaXRTdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBKU0FycmF5KiBy
ZXF1ZXN0ZWRMb2NhbGVzKQoreworICAgIC8vIDkuMi43IEJlc3RGaXRTdXBwb3J0ZWRMb2NhbGVz
IChhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKQorICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgc29tZXRoaW5nIGJldHRlciB0aGFuIGxvb2t1cC4KKyAgICByZXR1cm4gbG9va3VwU3Vw
cG9ydGVkTG9jYWxlcyhleGVjLCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTsK
K30KKworSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSGFz
aFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBKU0FycmF5KiByZXF1ZXN0ZWRMb2NhbGVz
LCBKU1ZhbHVlIG9wdGlvbnMpCit7CisgICAgLy8gOS4yLjggU3VwcG9ydGVkTG9jYWxlcyAoYXZh
aWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgb3B0aW9ucykKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIFN0cmluZyBtYXRjaGVyOworCisgICAgLy8gMS4gSWYgb3B0aW9ucyBp
cyBub3QgdW5kZWZpbmVkLCB0aGVuCisgICAgaWYgKCFvcHRpb25zLmlzVW5kZWZpbmVkKCkpIHsK
KyAgICAgICAgLy8gYS4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJsb2NhbGVN
YXRjaGVyIiwgInN0cmluZyIsIMKrICJsb29rdXAiLCAiYmVzdCBmaXQiIMK7LCAiYmVzdCBmaXQi
KS4KKyAgICAgICAgY29uc3QgSGFzaFNldDxTdHJpbmc+IG1hdGNoZXJzKHsgQVNDSUlMaXRlcmFs
KCJsb29rdXAiKSwgQVNDSUlMaXRlcmFsKCJiZXN0IGZpdCIpIH0pOworICAgICAgICBtYXRjaGVy
ID0gZ2V0SW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5s
b2NhbGVNYXRjaGVyLCBtYXRjaGVycywgImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJs
b29rdXBcIiBvciBcImJlc3QgZml0XCIiLCBBU0NJSUxpdGVyYWwoImJlc3QgZml0IikpOworICAg
ICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdChtYXRjaGVyKS4KKyAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gMi4gRWxzZSwgbGV0IG1hdGNoZXIgYmUgImJlc3QgZml0Ii4KKyAg
ICAgICAgbWF0Y2hlciA9IEFTQ0lJTGl0ZXJhbCgiYmVzdCBmaXQiKTsKKyAgICB9CisKKyAgICBK
U0FycmF5KiBzdXBwb3J0ZWRMb2NhbGVzOworICAgIC8vIDMuIElmIG1hdGNoZXIgaXMgImJlc3Qg
Zml0IiwKKyAgICBpZiAobWF0Y2hlciA9PSAiYmVzdCBmaXQiKSB7CisgICAgICAgIC8vIGEuIExl
dCBNYXRjaGVyT3BlcmF0aW9uIGJlIHRoZSBhYnN0cmFjdCBvcGVyYXRpb24gQmVzdEZpdFN1cHBv
cnRlZExvY2FsZXMuCisgICAgICAgIC8vIDUuIExldCBzdXBwb3J0ZWRMb2NhbGVzIGJlIE1hdGNo
ZXJPcGVyYXRpb24oYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcykuCisgICAgICAg
IHN1cHBvcnRlZExvY2FsZXMgPSBiZXN0Rml0U3VwcG9ydGVkTG9jYWxlcyhleGVjLCBhdmFpbGFi
bGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyA0
LiBFbHNlCisgICAgICAgIC8vIGEuIExldCBNYXRjaGVyT3BlcmF0aW9uIGJlIHRoZSBhYnN0cmFj
dCBvcGVyYXRpb24gTG9va3VwU3VwcG9ydGVkTG9jYWxlcy4KKyAgICAgICAgLy8gNS4gTGV0IHN1
cHBvcnRlZExvY2FsZXMgYmUgTWF0Y2hlck9wZXJhdGlvbihhdmFpbGFibGVMb2NhbGVzLCByZXF1
ZXN0ZWRMb2NhbGVzKS4KKyAgICAgICAgc3VwcG9ydGVkTG9jYWxlcyA9IGxvb2t1cFN1cHBvcnRl
ZExvY2FsZXMoZXhlYywgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcyk7CisgICAg
fQorCisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKworICAgIC8vIDYuIExldCBzdWJzZXQgYmUgQ3JlYXRlQXJyYXlGcm9tTGlzdChz
dXBwb3J0ZWRMb2NhbGVzKS4KKyAgICAvLyBBbHJlYWR5IGFuIGFycmF5LgorCisgICAgLy8gNy4g
TGV0IGtleXMgYmUgc3Vic2V0LltbT3duUHJvcGVydHlLZXlzXV0oKS4KKyAgICBQcm9wZXJ0eU5h
bWVBcnJheSBrZXlzKGV4ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOworICAgIHN1cHBv
cnRlZExvY2FsZXMtPmdldE93blByb3BlcnR5TmFtZXMoc3VwcG9ydGVkTG9jYWxlcywgZXhlYywg
a2V5cywgRW51bWVyYXRpb25Nb2RlKCkpOworCisgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2M7
CisgICAgZGVzYy5zZXRDb25maWd1cmFibGUoZmFsc2UpOworICAgIGRlc2Muc2V0V3JpdGFibGUo
ZmFsc2UpOworCisgICAgLy8gOC4gUmVwZWF0IGZvciBlYWNoIGVsZW1lbnQgUCBvZiBrZXlzIGlu
IExpc3Qgb3JkZXIsCisgICAgc2l6ZV90IGxlbiA9IGtleXMuc2l6ZSgpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgLy8gYS4gTGV0IGRlc2MgYmUgUHJv
cGVydHlEZXNjcmlwdG9yIHsgW1tDb25maWd1cmFibGVdXTogZmFsc2UsIFtbV3JpdGFibGVdXTog
ZmFsc2UgfS4KKyAgICAgICAgLy8gQ3JlYXRlZCBhYm92ZSBmb3IgcmV1c2UuCisKKyAgICAgICAg
Ly8gYi4gTGV0IHN0YXR1cyBiZSBEZWZpbmVQcm9wZXJ0eU9yVGhyb3coc3Vic2V0LCBQLCBkZXNj
KS4KKyAgICAgICAgc3VwcG9ydGVkTG9jYWxlcy0+ZGVmaW5lT3duUHJvcGVydHkoc3VwcG9ydGVk
TG9jYWxlcywgZXhlYywga2V5c1tpXSwgZGVzYywgdHJ1ZSk7CisKKyAgICAgICAgLy8gYy4gQXNz
ZXJ0OiBzdGF0dXMgaXMgbm90IGFicnVwdCBjb21wbGV0aW9uLgorICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9
CisKKyAgICAvLyA5LiBSZXR1cm4gc3Vic2V0LgorICAgIHJldHVybiBzdXBwb3J0ZWRMb2NhbGVz
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShJTlRMKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5oCmluZGV4IDgzNDI4NTQyYjJk
MGZiYzdlNWIxNDRhMzZiY2JiODZlZGZjYmJlODIuLmZkZTYyYjUzYTY2MDU3MmRkYzk5NDIwMzc1
MmI3ZWQ3ZWQwMmE2OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2Jq
ZWN0LmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShJTlRMKQogCisjaW5jbHVkZSAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKQEAgLTU2LDYgKzU3LDkgQEAgcHJpdmF0ZToKICAgICBJbnRsT2JqZWN0KFZNJiwgU3Ry
dWN0dXJlKik7CiB9OwogCitKU0FycmF5KiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEV4ZWNTdGF0
ZSosIEpTVmFsdWUgbG9jYWxlcyk7CitKU1ZhbHVlIHN1cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRl
KiwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBKU0FycmF5KiByZXF1
ZXN0ZWRMb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnMpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmIC8vIEVOQUJMRShJTlRMKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NKU1ZhbHVlLmNwcAppbmRleCA5ZTBhYWIxNzc0ZGUxN2EwM2NhNmRlMTJjOWU5OGY5ZDcyMzYz
NjBiLi5hMGNmNzc3ZGQ2OThhNDY2ODRlNDcwY2M1MjBiZWMxY2U0MThhODdhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcApAQCAtNTYsNiArNTYsMTgg
QEAgZG91YmxlIEpTVmFsdWU6OnRvSW50ZWdlclByZXNlcnZlTmFOKEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QKICAgICByZXR1cm4gdHJ1bmModG9OdW1iZXIoZXhlYykpOwogfQogCitkb3VibGUgSlNW
YWx1ZTo6dG9MZW5ndGgoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIC8vIEVDTUEgNy4x
LjE1CisgICAgLy8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYu
MC8jc2VjLXRvbGVuZ3RoCisgICAgZG91YmxlIGQgPSB0b0ludGVnZXIoZXhlYyk7CisgICAgaWYg
KGQgPD0gMCkKKyAgICAgICAgcmV0dXJuIDAuMDsKKyAgICBpZiAoc3RkOjppc2luZihkKSkKKyAg
ICAgICAgcmV0dXJuIDkwMDcxOTkyNTQ3NDA5OTEuMDsgLy8gMiAqKiA1MyAtIDEKKyAgICByZXR1
cm4gc3RkOjptaW4oZCwgOTAwNzE5OTI1NDc0MDk5MS4wKTsKK30KKwogZG91YmxlIEpTVmFsdWU6
OnRvTnVtYmVyU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIEFTU0VSVCgh
aXNJbnQzMigpICYmICFpc0RvdWJsZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ0pTVmFsdWUuaAppbmRleCBiN2VhYWQyZGEwYTJkNTMzNjZhOTFlNjRhNGMyOTNlYjBjYjk4
Y2E3Li5jODAzYjY0OWE1MDcyMjU0NGE5M2MwZjYxYzIwMTI1Y2ExMmI1ZGMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCkBAIC0yNjIsNiArMjYyLDcgQEAg
cHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIGRvdWJsZSB0b0ludGVnZXJQcmVzZXJ2ZU5h
TihFeGVjU3RhdGUqKSBjb25zdDsKICAgICBpbnQzMl90IHRvSW50MzIoRXhlY1N0YXRlKikgY29u
c3Q7CiAgICAgdWludDMyX3QgdG9VSW50MzIoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgZG91Ymxl
IHRvTGVuZ3RoKEV4ZWNTdGF0ZSopIGNvbnN0OwogCiAgICAgLy8gRmxvYXRpbmcgcG9pbnQgY29u
dmVyc2lvbnMgKHRoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgV2ViQ29yZTsKICAg
ICAvLyBzaW5nbGUgcHJlY2lzaW9uIGZsb2F0IGlzIG5vdCBhIHJlcHJlc2VudGF0aW9uIHVzZWQg
aW4gSlMgb3IgSlNDKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAppbmRleCAyOTkxMDY0OTgyODdkZjI4OTA2NTE4ZDNkYTI3MTIyZmI4Yzdj
MWNjLi41NDVhMTM0NzFkM2RmZTkxOGQ5OTZmMGIwNTllYTU3ODY2NDhlZmIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC0xNDcs
NiArMTQ3LDkgQEAKIAogI2lmIEVOQUJMRShJTlRMKQogI2luY2x1ZGUgIkludGxPYmplY3QuaCIK
KyNpbmNsdWRlIDx1bmljb2RlL3Vjb2wuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3VkYXQuaD4KKyNp
bmNsdWRlIDx1bmljb2RlL3VudW0uaD4KICNlbmRpZiAvLyBFTkFCTEUoSU5UTCkKIAogI2lmIEVO
QUJMRShSRU1PVEVfSU5TUEVDVE9SKQpAQCAtMTAwNyw2ICsxMDEwLDUwIEBAIHZvaWQgSlNHbG9i
YWxPYmplY3Q6OnNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQogI2VuZGlmCiB9CiAKKyMgaWYg
RU5BQkxFKElOVEwpCitjb25zdCBIYXNoU2V0PFN0cmluZz4mIEpTR2xvYmFsT2JqZWN0OjppbnRs
Q29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCkKK3sKKyAgICBpZiAobV9pbnRsQ29sbGF0b3JBdmFp
bGFibGVMb2NhbGVzLmlzRW1wdHkoKSkgeworICAgICAgICBpbnQzMl90IGNvdW50ID0gdWNvbF9j
b3VudEF2YWlsYWJsZSgpOworICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7CisgICAgICAgICAgICBTdHJpbmcgbG9jYWxlKHVjb2xfZ2V0QXZhaWxhYmxlKGkpKTsK
KyAgICAgICAgICAgIC8vIENoYW5nZSBmcm9tIElDVSBmb3JtYXQgdG8gQkNQNDcuCisgICAgICAg
ICAgICBsb2NhbGUucmVwbGFjZSgnXycsICctJyk7CisgICAgICAgICAgICBtX2ludGxDb2xsYXRv
ckF2YWlsYWJsZUxvY2FsZXMuYWRkKGxvY2FsZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIG1faW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlczsKK30KKworY29uc3QgSGFzaFNldDxT
dHJpbmc+JiBKU0dsb2JhbE9iamVjdDo6aW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxl
cygpCit7CisgICAgaWYgKG1faW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxlcy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgaW50MzJfdCBjb3VudCA9IHVkYXRfY291bnRBdmFpbGFibGUoKTsK
KyAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAg
ICAgU3RyaW5nIGxvY2FsZSh1ZGF0X2dldEF2YWlsYWJsZShpKSk7CisgICAgICAgICAgICAvLyBD
aGFuZ2UgZnJvbSBJQ1UgZm9ybWF0IHRvIEJDUDQ3LgorICAgICAgICAgICAgbG9jYWxlLnJlcGxh
Y2UoJ18nLCAnLScpOworICAgICAgICAgICAgbV9pbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVM
b2NhbGVzLmFkZChsb2NhbGUpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBtX2ludGxE
YXRlVGltZUZvcm1hdEF2YWlsYWJsZUxvY2FsZXM7Cit9CisKK2NvbnN0IEhhc2hTZXQ8U3RyaW5n
PiYgSlNHbG9iYWxPYmplY3Q6OmludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCkKK3sK
KyAgICBpZiAobV9pbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgaW50MzJfdCBjb3VudCA9IHVudW1fY291bnRBdmFpbGFibGUoKTsKKyAgICAgICAg
Zm9yIChpbnQzMl90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgU3RyaW5n
IGxvY2FsZSh1bnVtX2dldEF2YWlsYWJsZShpKSk7CisgICAgICAgICAgICAvLyBDaGFuZ2UgZnJv
bSBJQ1UgZm9ybWF0IHRvIEJDUDQ3LgorICAgICAgICAgICAgbG9jYWxlLnJlcGxhY2UoJ18nLCAn
LScpOworICAgICAgICAgICAgbV9pbnRsTnVtYmVyRm9ybWF0QXZhaWxhYmxlTG9jYWxlcy5hZGQo
bG9jYWxlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbV9pbnRsTnVtYmVyRm9ybWF0
QXZhaWxhYmxlTG9jYWxlczsKK30KKyNlbmRpZiAvLyBFTkFCTEUoSU5UTCkKKwogdm9pZCBKU0ds
b2JhbE9iamVjdDo6cXVldWVNaWNyb3Rhc2soUGFzc1JlZlB0cjxNaWNyb3Rhc2s+IHRhc2spCiB7
CiAgICAgaWYgKGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnF1ZXVlVGFza1RvRXZlbnRMb29w
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApp
bmRleCBkY2IzYTA4N2Y3OTliZjZiZDJjNGE2NjM2ODYwODQzMWYxYmI0ZGVkLi4xZGY2ZGEyNDIw
M2ZmN2QxNGI2YzQ2MWEzNWU1ZDA2OThmNGM3MWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAgLTMwNyw2ICszMDcsMTIgQEAgcHJvdGVj
dGVkOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxKU0dsb2JhbE9iamVjdERlYnVnZ2FibGU+IG1faW5z
cGVjdG9yRGVidWdnYWJsZTsKICNlbmRpZgogCisjaWYgRU5BQkxFKElOVEwpCisgICAgSGFzaFNl
dDxTdHJpbmc+IG1faW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlczsKKyAgICBIYXNoU2V0PFN0
cmluZz4gbV9pbnRsRGF0ZVRpbWVGb3JtYXRBdmFpbGFibGVMb2NhbGVzOworICAgIEhhc2hTZXQ8
U3RyaW5nPiBtX2ludGxOdW1iZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzOworI2VuZGlmIC8vIEVO
QUJMRShJTlRMKQorCiAgICAgUmVmUHRyPFdhdGNocG9pbnRTZXQ+IG1fbWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZFdhdGNocG9pbnQ7CiAgICAgUmVmUHRyPFdhdGNocG9pbnRTZXQ+IG1faGF2aW5nQUJh
ZFRpbWVXYXRjaHBvaW50OwogICAgIFJlZlB0cjxXYXRjaHBvaW50U2V0PiBtX3ZhckluamVjdGlv
bldhdGNocG9pbnQ7CkBAIC01MjUsNiArNTMxLDEyIEBAIHB1YmxpYzoKICAgICBKU0dsb2JhbE9i
amVjdERlYnVnZ2FibGUmIGluc3BlY3RvckRlYnVnZ2FibGUoKSB7IHJldHVybiAqbV9pbnNwZWN0
b3JEZWJ1Z2dhYmxlLmdldCgpOyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShJTlRMKQorICAgIGNv
bnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bENvbGxhdG9yQXZhaWxhYmxlTG9jYWxlcygpOworICAg
IGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bERhdGVUaW1lRm9ybWF0QXZhaWxhYmxlTG9jYWxl
cygpOworICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgaW50bE51bWJlckZvcm1hdEF2YWlsYWJs
ZUxvY2FsZXMoKTsKKyNlbmRpZiAvLyBFTkFCTEUoSU5UTCkKKwogICAgIHZvaWQgc2V0Q29uc29s
ZUNsaWVudChDb25zb2xlQ2xpZW50KiBjb25zb2xlQ2xpZW50KSB7IG1fY29uc29sZUNsaWVudCA9
IGNvbnNvbGVDbGllbnQ7IH0KICAgICBDb25zb2xlQ2xpZW50KiBjb25zb2xlQ2xpZW50KCkgY29u
c3QgeyByZXR1cm4gbV9jb25zb2xlQ2xpZW50OyB9CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBjNmFiNDYyZjIxNTdiMzY2
MDVlODFjMWEzNDdjYjY5NzE3NGM4YzExLi41YTBlMjdkM2ZjZDc5OThlNzljMWY2OWVlOTQwNWE3
MDFhMmNlZDk2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTUtMDktMTUgIEFuZHkgVmFuV2Fn
b25lciAgPHRoZXRhbGVjcmFmdGVyQGdtYWlsLmNvbT4KKworICAgICAgICBbSU5UTF0gSW1wbGVt
ZW50IHN1cHBvcnRlZExvY2FsZXNPZiBvbiBJbnRsIENvbnN0cnVjdG9ycworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTk5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBqcy9pbnRsLWNvbGxhdG9yLWV4
cGVjdGVkLnR4dDogQWRkZWQgdGVzdHMgZm9yIHN1cHBvcnRlZExvY2FsZXNPZgorICAgICAgICAq
IGpzL2ludGwtZGF0ZXRpbWVmb3JtYXQtZXhwZWN0ZWQudHh0OiBBZGRlZCB0ZXN0cyBmb3Igc3Vw
cG9ydGVkTG9jYWxlc09mCisgICAgICAgICoganMvaW50bC1udW1iZXJmb3JtYXQtZXhwZWN0ZWQu
dHh0OiBBZGRlZCB0ZXN0cyBmb3Igc3VwcG9ydGVkTG9jYWxlc09mCisgICAgICAgICoganMvc2Ny
aXB0LXRlc3RzL2ludGwtY29sbGF0b3IuanM6IEFkZGVkIHRlc3RzIGZvciBzdXBwb3J0ZWRMb2Nh
bGVzT2YKKyAgICAgICAgKiBqcy9zY3JpcHQtdGVzdHMvaW50bC1kYXRldGltZWZvcm1hdC5qczog
QWRkZWQgdGVzdHMgZm9yIHN1cHBvcnRlZExvY2FsZXNPZgorICAgICAgICAqIGpzL3NjcmlwdC10
ZXN0cy9pbnRsLW51bWJlcmZvcm1hdC5qczogQWRkZWQgdGVzdHMgZm9yIHN1cHBvcnRlZExvY2Fs
ZXNPZgorCiAyMDE1LTA5LTE0ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgog
CiAgICAgICAgIExheW91dCBUZXN0IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtZG9jdW1lbnQtcmVm
ZXJlci5odG1sIGlzIGZsYWt5CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9pbnRsLWNvbGxh
dG9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL2ludGwtY29sbGF0b3ItZXhwZWN0ZWQu
dHh0CmluZGV4IDRkNWZkZGY3NTZmYzhmZjAwMGZlZTMwYTU3ZGZhYTA2MjZlNDM1OTguLmVmM2Fi
ZTAyMGQ0MzU5ZDY0MzliOGJmYjZmOTdlYWY2YjJkMTg5ZjAgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2pzL2ludGwtY29sbGF0b3ItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2pzL2lu
dGwtY29sbGF0b3ItZXhwZWN0ZWQudHh0CkBAIC0xOCw2ICsxOCwzMSBAQCBQQVNTIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSW50bC5Db2xsYXRvciwgJ3Byb3RvdHlwZScpLmVudW1l
cmFibGUgaXMgZgogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuQ29s
bGF0b3IsICdwcm90b3R5cGUnKS5jb25maWd1cmFibGUgaXMgZmFsc2UKIFBBU1MgSW50bC5Db2xs
YXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YubGVuZ3RoIGlzIDEKIFBBU1MgSW50bC5Db2xsYXRvci5z
dXBwb3J0ZWRMb2NhbGVzT2YoKSBpcyBhbiBpbnN0YW5jZSBvZiBBcnJheQorUEFTUyBJbnRsLkNv
bGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKG51bGwsICdlbicpIGlzIFsgJ2VuJyBdCitQ
QVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoe30sICdlbicpIGlzIFsg
J2VuJyBdCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoMSwgJ2Vu
JykgaXMgWyAnZW4nIF0KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoOSkg
aXMgW10KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuJykgaXMgWyAn
ZW4nIF0KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoeyBsZW5ndGg6IDQs
IDE6ICdlbicsIDA6ICdlcycsIDM6ICdkZScgfSkgaXMgWyAnZXMnLCAnZW4nLCAnZGUnIF0KK1BB
U1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoWyAnZW4nLCAncHQnLCAnZW4nLCAn
ZXMnIF0pIGlzIFsgJ2VuJywgJ3B0JywgJ2VzJyBdCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9y
dGVkTG9jYWxlc09mKCdFbi1sYVRuLXVzLXZhcmlhbnQyLXZhcmlhbnQxLTFhYmMtVS1rby10UnVl
LUEtYWEtYWFhLXgtUkVTRVJWRUQnKSBpcyBbICdlbi1MYXRuLVVTLXZhcmlhbnQyLXZhcmlhbnQx
LTFhYmMtYS1hYS1hYWEtdS1rby10cnVlLXgtcmVzZXJ2ZWQnIF0KK1BBU1MgSW50bC5Db2xsYXRv
ci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ25vLWJvaycpIGlzIFsgJ25iJyBdCitQQVNTIEludGwuQ29s
bGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCd4LXNvbWUtdGhpbmcnKSBpcyBbXQorUEFTUyBJbnRs
LkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVuZ3Ro
OiB7IGdldCgpIHsgdGhyb3cgRXJyb3IoJ2EnKSB9IH0gfSkpIHRocmV3IGV4Y2VwdGlvbiBFcnJv
cjogYS4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoT2JqZWN0LmNyZWF0
ZShudWxsLCB7IGxlbmd0aDogeyB2YWx1ZTogMSB9LCAwOiB7IGdldCgpIHsgdGhyb3cgRXJyb3Io
J2InKSB9IH0gfSkpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogYi4KK1BBU1MgSW50bC5Db2xsYXRv
ci5zdXBwb3J0ZWRMb2NhbGVzT2YoWyB7IHRvU3RyaW5nKCkgeyB0aHJvdyBFcnJvcignYycpIH0g
fSBdKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IGMuCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9y
dGVkTG9jYWxlc09mKFsgNSBdKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBsb2NhbGUgdmFs
dWUgbXVzdCBiZSBhIHN0cmluZyBvciBvYmplY3QuCitQQVNTIEludGwuQ29sbGF0b3Iuc3VwcG9y
dGVkTG9jYWxlc09mKCcnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5n
dWFnZSB0YWc6IC4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2EnKSB0
aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGEuCitQQVNT
IEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdhYmNkZWZnaGlqJykgdGhyZXcgZXhj
ZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBhYmNkZWZnaGlqLgorUEFT
UyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignIyQnKSB0aHJldyBleGNlcHRpb24g
UmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6ICMkLgorUEFTUyBJbnRsLkNvbGxhdG9y
LnN1cHBvcnRlZExvY2FsZXNPZignZW4tQC1hYmMnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJv
cjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLUAtYWJjLgorUEFTUyBJbnRsLkNvbGxhdG9yLnN1
cHBvcnRlZExvY2FsZXNPZignZW4tdScpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZh
bGlkIGxhbmd1YWdlIHRhZzogZW4tdS4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2Nh
bGVzT2YoJ2VuLXUta24tdHJ1ZS11LWtvLXRydWUnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJv
cjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXUta24tdHJ1ZS11LWtvLXRydWUuCitQQVNTIElu
dGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi14JykgdGhyZXcgZXhjZXB0aW9uIFJh
bmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi14LgorUEFTUyBJbnRsLkNvbGxhdG9y
LnN1cHBvcnRlZExvY2FsZXNPZignZW4tKicpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBp
bnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tKi4KK1BBU1MgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRM
b2NhbGVzT2YoJ2VuLScpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1
YWdlIHRhZzogZW4tLgorUEFTUyBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignZW4t
LVVTJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBl
bi0tVVMuCiBQQVNTIEludGwuQ29sbGF0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yIGlzIEludGwu
Q29sbGF0b3IKIFBBU1MgSW50bC5Db2xsYXRvci5wcm90b3R5cGUuY29tcGFyZSBpcyBhbiBpbnN0
YW5jZSBvZiBGdW5jdGlvbgogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKElu
dGwuQ29sbGF0b3IucHJvdG90eXBlLCAnY29tcGFyZScpLmdldCBpcyBhbiBpbnN0YW5jZSBvZiBG
dW5jdGlvbgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvaW50bC1kYXRldGltZWZvcm1hdC1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9pbnRsLWRhdGV0aW1lZm9ybWF0LWV4cGVjdGVk
LnR4dAppbmRleCA2MDE3M2ZlMjcyMmVmNjViMjIwZGQ5YmU0N2FmMTQyYmZiZjM4NDM1Li5kMDE2
YzgwMDQ3ZDY0ZDAyMzhiNWM5NmQ3YjkwYjZjNGFlMWM5ZWE0IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9qcy9pbnRsLWRhdGV0aW1lZm9ybWF0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9qcy9pbnRsLWRhdGV0aW1lZm9ybWF0LWV4cGVjdGVkLnR4dApAQCAtMTgsNiArMTgsMzEgQEAg
UEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuRGF0ZVRpbWVGb3JtYXQs
ICdwcm90b3R5cGUnKS5lbnVtZXJhYmwKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihJbnRsLkRhdGVUaW1lRm9ybWF0LCAncHJvdG90eXBlJykuY29uZmlndXJhYmxlIGlzIGZh
bHNlCiBQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmxlbmd0aCBp
cyAxCiBQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCkgaXMgYW4g
aW5zdGFuY2Ugb2YgQXJyYXkKK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2Nh
bGVzT2YuY2FsbChudWxsLCAnZW4nKSBpcyBbICdlbicgXQorUEFTUyBJbnRsLkRhdGVUaW1lRm9y
bWF0LnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKHt9LCAnZW4nKSBpcyBbICdlbicgXQorUEFTUyBJ
bnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKDEsICdlbicpIGlzIFsg
J2VuJyBdCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKDkpIGlz
IFtdCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbicpIGlz
IFsgJ2VuJyBdCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKHsg
bGVuZ3RoOiA0LCAxOiAnZW4nLCAwOiAnZXMnLCAzOiAnZGUnIH0pIGlzIFsgJ2VzJywgJ2VuJywg
J2RlJyBdCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsgJ2Vu
JywgJ3B0JywgJ2VuJywgJ2VzJyBdKSBpcyBbICdlbicsICdwdCcsICdlcycgXQorUEFTUyBJbnRs
LkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignRW4tbGFUbi11cy12YXJpYW50Mi12
YXJpYW50MS0xYWJjLVUta28tdFJ1ZS1BLWFhLWFhYS14LVJFU0VSVkVEJykgaXMgWyAnZW4tTGF0
bi1VUy12YXJpYW50Mi12YXJpYW50MS0xYWJjLWEtYWEtYWFhLXUta28tdHJ1ZS14LXJlc2VydmVk
JyBdCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCduby1ib2sn
KSBpcyBbICduYicgXQorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNP
ZigneC1zb21lLXRoaW5nJykgaXMgW10KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0
ZWRMb2NhbGVzT2YoT2JqZWN0LmNyZWF0ZShudWxsLCB7IGxlbmd0aDogeyBnZXQoKSB7IHRocm93
IEVycm9yKCdhJykgfSB9IH0pKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IGEuCitQQVNTIEludGwu
RGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKE9iamVjdC5jcmVhdGUobnVsbCwgeyBs
ZW5ndGg6IHsgdmFsdWU6IDEgfSwgMDogeyBnZXQoKSB7IHRocm93IEVycm9yKCdiJykgfSB9IH0p
KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IGIuCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3Vw
cG9ydGVkTG9jYWxlc09mKFsgeyB0b1N0cmluZygpIHsgdGhyb3cgRXJyb3IoJ2MnKSB9IH0gXSkg
dGhyZXcgZXhjZXB0aW9uIEVycm9yOiBjLgorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBv
cnRlZExvY2FsZXNPZihbIDUgXSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogbG9jYWxlIHZh
bHVlIG11c3QgYmUgYSBzdHJpbmcgb3Igb2JqZWN0LgorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0
LnN1cHBvcnRlZExvY2FsZXNPZignJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFs
aWQgbGFuZ3VhZ2UgdGFnOiAuCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9j
YWxlc09mKCdhJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2Ug
dGFnOiBhLgorUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignYWJj
ZGVmZ2hpaicpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRh
ZzogYWJjZGVmZ2hpai4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YoJyMkJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFn
OiAjJC4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLUAt
YWJjJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBl
bi1ALWFiYy4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2Vu
LXUnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVu
LXUuCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi11LWtu
LXRydWUtdS1rby10cnVlJykgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFu
Z3VhZ2UgdGFnOiBlbi11LWtuLXRydWUtdS1rby10cnVlLgorUEFTUyBJbnRsLkRhdGVUaW1lRm9y
bWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4teCcpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9y
OiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4teC4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5z
dXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLSonKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52
YWxpZCBsYW5ndWFnZSB0YWc6IGVuLSouCitQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9y
dGVkTG9jYWxlc09mKCdlbi0nKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBs
YW5ndWFnZSB0YWc6IGVuLS4KK1BBU1MgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2Nh
bGVzT2YoJ2VuLS1VUycpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1
YWdlIHRhZzogZW4tLVVTLgogUEFTUyBJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZS5jb25z
dHJ1Y3RvciBpcyBJbnRsLkRhdGVUaW1lRm9ybWF0CiBQQVNTIEludGwuRGF0ZVRpbWVGb3JtYXQu
cHJvdG90eXBlLmZvcm1hdCBpcyBhbiBpbnN0YW5jZSBvZiBGdW5jdGlvbgogUEFTUyBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90eXBlLCAn
Zm9ybWF0JykuZ2V0IGlzIGFuIGluc3RhbmNlIG9mIEZ1bmN0aW9uCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9qcy9pbnRsLW51bWJlcmZvcm1hdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9q
cy9pbnRsLW51bWJlcmZvcm1hdC1leHBlY3RlZC50eHQKaW5kZXggNTIxODUxZWQ2NjVkOGU3NDhk
MWI2OTI0NjUzNDZiMWY3YmVjZjRkMC4uYmZjM2U3NzVkZDA5YzczOTk3YmU0ODAyYmJiYjI3ZTc0
NTA5Yjc3MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvanMvaW50bC1udW1iZXJmb3JtYXQtZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2pzL2ludGwtbnVtYmVyZm9ybWF0LWV4cGVjdGVk
LnR4dApAQCAtMTgsNiArMTgsMzEgQEAgUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEludGwuTnVtYmVyRm9ybWF0LCAncHJvdG90eXBlJykuZW51bWVyYWJsZQogUEFTUyBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuTnVtYmVyRm9ybWF0LCAncHJvdG90eXBl
JykuY29uZmlndXJhYmxlIGlzIGZhbHNlCiBQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRl
ZExvY2FsZXNPZi5sZW5ndGggaXMgMQogUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRM
b2NhbGVzT2YoKSBpcyBhbiBpbnN0YW5jZSBvZiBBcnJheQorUEFTUyBJbnRsLk51bWJlckZvcm1h
dC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbChudWxsLCAnZW4nKSBpcyBbICdlbicgXQorUEFTUyBJ
bnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbCh7fSwgJ2VuJykgaXMgWyAn
ZW4nIF0KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoMSwg
J2VuJykgaXMgWyAnZW4nIF0KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mKDkpIGlzIFtdCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZign
ZW4nKSBpcyBbICdlbicgXQorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YoeyBsZW5ndGg6IDQsIDE6ICdlbicsIDA6ICdlcycsIDM6ICdkZScgfSkgaXMgWyAnZXMnLCAn
ZW4nLCAnZGUnIF0KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKFsg
J2VuJywgJ3B0JywgJ2VuJywgJ2VzJyBdKSBpcyBbICdlbicsICdwdCcsICdlcycgXQorUEFTUyBJ
bnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ0VuLWxhVG4tdXMtdmFyaWFudDIt
dmFyaWFudDEtMWFiYy1VLWtvLXRSdWUtQS1hYS1hYWEteC1SRVNFUlZFRCcpIGlzIFsgJ2VuLUxh
dG4tVVMtdmFyaWFudDItdmFyaWFudDEtMWFiYy1hLWFhLWFhYS11LWtvLXRydWUteC1yZXNlcnZl
ZCcgXQorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ25vLWJvaycp
IGlzIFsgJ25iJyBdCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZign
eC1zb21lLXRoaW5nJykgaXMgW10KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9j
YWxlc09mKE9iamVjdC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgZ2V0KCkgeyB0aHJvdyBFcnJv
cignYScpIH0gfSB9KSkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBhLgorUEFTUyBJbnRsLk51bWJl
ckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoT2JqZWN0LmNyZWF0ZShudWxsLCB7IGxlbmd0aDog
eyB2YWx1ZTogMSB9LCAwOiB7IGdldCgpIHsgdGhyb3cgRXJyb3IoJ2InKSB9IH0gfSkpIHRocmV3
IGV4Y2VwdGlvbiBFcnJvcjogYi4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9j
YWxlc09mKFsgeyB0b1N0cmluZygpIHsgdGhyb3cgRXJyb3IoJ2MnKSB9IH0gXSkgdGhyZXcgZXhj
ZXB0aW9uIEVycm9yOiBjLgorUEFTUyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YoWyA1IF0pIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IGxvY2FsZSB2YWx1ZSBtdXN0IGJl
IGEgc3RyaW5nIG9yIG9iamVjdC4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9j
YWxlc09mKCcnKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0
YWc6IC4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdhJykgdGhy
ZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBhLgorUEFTUyBJ
bnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2FiY2RlZmdoaWonKSB0aHJldyBl
eGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGFiY2RlZmdoaWouCitQ
QVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignIyQnKSB0aHJldyBleGNl
cHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6ICMkLgorUEFTUyBJbnRsLk51
bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLUAtYWJjJykgdGhyZXcgZXhjZXB0aW9u
IFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi1ALWFiYy4KK1BBU1MgSW50bC5O
dW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi11JykgdGhyZXcgZXhjZXB0aW9uIFJh
bmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi11LgorUEFTUyBJbnRsLk51bWJlckZv
cm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXUta24tdHJ1ZS11LWtvLXRydWUnKSB0aHJldyBl
eGNlcHRpb24gUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXUta24tdHJ1ZS11
LWtvLXRydWUuCitQQVNTIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4t
eCcpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4t
eC4KK1BBU1MgSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi0qJykgdGhy
ZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi0qLgorUEFT
UyBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLScpIHRocmV3IGV4Y2Vw
dGlvbiBSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tLgorUEFTUyBJbnRsLk51
bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLS1VUycpIHRocmV3IGV4Y2VwdGlvbiBS
YW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tLVVTLgogUEFTUyBJbnRsLk51bWJl
ckZvcm1hdC5wcm90b3R5cGUuY29uc3RydWN0b3IgaXMgSW50bC5OdW1iZXJGb3JtYXQKIFBBU1Mg
SW50bC5OdW1iZXJGb3JtYXQucHJvdG90eXBlLmZvcm1hdCBpcyBhbiBpbnN0YW5jZSBvZiBGdW5j
dGlvbgogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuTnVtYmVyRm9y
bWF0LnByb3RvdHlwZSwgJ2Zvcm1hdCcpLmdldCBpcyBhbiBpbnN0YW5jZSBvZiBGdW5jdGlvbgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2ludGwtY29sbGF0b3IuanMg
Yi9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1jb2xsYXRvci5qcwppbmRleCA1ZGUx
OTBlYzMzMGM5OGRiMTYyZTJlYjYzNGIxZjNhNjVkYjg5NTA4Li40ZmY5MjAzNDU2NTcyNDhiNTU1
ZTdjNTQyN2IwMTU3YTZmOWI2NTdjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9qcy9zY3JpcHQt
dGVzdHMvaW50bC1jb2xsYXRvci5qcworKysgYi9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMv
aW50bC1jb2xsYXRvci5qcwpAQCAtMzUsOCArMzUsNDMgQEAgc2hvdWxkQmVGYWxzZSgiT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJbnRsLkNvbGxhdG9yLCAncHJvdG90eXBlJykuY29u
ZmkKIC8vIFRoZSB2YWx1ZSBvZiB0aGUgbGVuZ3RoIHByb3BlcnR5IG9mIHRoZSBzdXBwb3J0ZWRM
b2NhbGVzT2YgbWV0aG9kIGlzIDEuCiBzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRM
b2NhbGVzT2YubGVuZ3RoIiwgIjEiKTsKIAotLy8gUmV0dXJucyBTdXBwb3J0ZWRMb2NhbGVzCisv
LyBSZXR1cm5zIFN1cHBvcnRlZExvY2FsZXMuCiBzaG91bGRCZVR5cGUoIkludGwuQ29sbGF0b3Iu
c3VwcG9ydGVkTG9jYWxlc09mKCkiLCAiQXJyYXkiKTsKKy8vIERvZXNuJ3QgY2FyZSBhYm91dCBg
dGhpc2AuCitzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbChu
dWxsLCAnZW4nKSIsICJbICdlbicgXSIpOworc2hvdWxkQmUoIkludGwuQ29sbGF0b3Iuc3VwcG9y
dGVkTG9jYWxlc09mLmNhbGwoe30sICdlbicpIiwgIlsgJ2VuJyBdIik7CitzaG91bGRCZSgiSW50
bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbCgxLCAnZW4nKSIsICJbICdlbicgXSIp
OworLy8gSWdub3JlcyBub24tb2JqZWN0LCBub24tc3RyaW5nIGxpc3QuCitzaG91bGRCZSgiSW50
bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoOSkiLCAiW10iKTsKKy8vIE1ha2VzIGFuIGFy
cmF5IG9mIHRhZ3MuCitzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2Yo
J2VuJykiLCAiWyAnZW4nIF0iKTsKKy8vIEhhbmRsZXMgYXJyYXktbGlrZSBvYmplY3RzIHdpdGgg
aG9sZXMuCitzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoeyBsZW5n
dGg6IDQsIDE6ICdlbicsIDA6ICdlcycsIDM6ICdkZScgfSkiLCAiWyAnZXMnLCAnZW4nLCAnZGUn
IF0iKTsKKy8vIERlZHVwbGljYXRlcyB0YWdzLgorc2hvdWxkQmUoIkludGwuQ29sbGF0b3Iuc3Vw
cG9ydGVkTG9jYWxlc09mKFsgJ2VuJywgJ3B0JywgJ2VuJywgJ2VzJyBdKSIsICJbICdlbicsICdw
dCcsICdlcycgXSIpOworLy8gQ2Fub25pY2FsaXplcyB0YWdzLgorc2hvdWxkQmUoIkludGwuQ29s
bGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdFbi1sYVRuLXVzLXZhcmlhbnQyLXZhcmlhbnQxLTFh
YmMtVS1rby10UnVlLUEtYWEtYWFhLXgtUkVTRVJWRUQnKSIsICJbICdlbi1MYXRuLVVTLXZhcmlh
bnQyLXZhcmlhbnQxLTFhYmMtYS1hYS1hYWEtdS1rby10cnVlLXgtcmVzZXJ2ZWQnIF0iKTsKKy8v
IFJlcGxhY2VzIG91dGRhdGVkIHRhZ3MuCitzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0
ZWRMb2NhbGVzT2YoJ25vLWJvaycpIiwgIlsgJ25iJyBdIik7CisvLyBEb2Vzbid0IHRocm93LCBi
dXQgaWdub3JlcyBwcml2YXRlIHRhZ3MuCitzaG91bGRCZSgiSW50bC5Db2xsYXRvci5zdXBwb3J0
ZWRMb2NhbGVzT2YoJ3gtc29tZS10aGluZycpIiwgIltdIik7CisvLyBUaHJvd3Mgb24gcHJvYmxl
bXMgd2l0aCBsZW5ndGgsIGdldCwgb3IgdG9TdHJpbmcuCitzaG91bGRUaHJvdygiSW50bC5Db2xs
YXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoT2JqZWN0LmNyZWF0ZShudWxsLCB7IGxlbmd0aDogeyBn
ZXQoKSB7IHRocm93IEVycm9yKCdhJykgfSB9IH0pKSIsICInRXJyb3I6IGEnIik7CitzaG91bGRU
aHJvdygiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoT2JqZWN0LmNyZWF0ZShudWxs
LCB7IGxlbmd0aDogeyB2YWx1ZTogMSB9LCAwOiB7IGdldCgpIHsgdGhyb3cgRXJyb3IoJ2InKSB9
IH0gfSkpIiwgIidFcnJvcjogYiciKTsKK3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1cHBv
cnRlZExvY2FsZXNPZihbIHsgdG9TdHJpbmcoKSB7IHRocm93IEVycm9yKCdjJykgfSB9IF0pIiwg
IidFcnJvcjogYyciKTsKKy8vIFRocm93cyBvbiBiYWQgdGFncy4KK3Nob3VsZFRocm93KCJJbnRs
LkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZihbIDUgXSkiLCAiJ1R5cGVFcnJvcjogbG9jYWxl
IHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb3Igb2JqZWN0JyIpOworc2hvdWxkVGhyb3coIkludGwu
Q29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCcnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBs
YW5ndWFnZSB0YWc6ICciKTsKK3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExv
Y2FsZXNPZignYScpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogYSciKTsK
K3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignYWJjZGVmZ2hp
aicpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogYWJjZGVmZ2hpaiciKTsK
K3Nob3VsZFRocm93KCJJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZignIyQnKSIsICIn
UmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6ICMkJyIpOworc2hvdWxkVGhyb3coIklu
dGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi1ALWFiYycpIiwgIidSYW5nZUVycm9y
OiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tQC1hYmMnIik7CitzaG91bGRUaHJvdygiSW50bC5D
b2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXUnKSIsICInUmFuZ2VFcnJvcjogaW52YWxp
ZCBsYW5ndWFnZSB0YWc6IGVuLXUnIik7CitzaG91bGRUaHJvdygiSW50bC5Db2xsYXRvci5zdXBw
b3J0ZWRMb2NhbGVzT2YoJ2VuLXUta24tdHJ1ZS11LWtvLXRydWUnKSIsICInUmFuZ2VFcnJvcjog
aW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXUta24tdHJ1ZS11LWtvLXRydWUnIik7CitzaG91bGRU
aHJvdygiSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXgnKSIsICInUmFuZ2VF
cnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXgnIik7CitzaG91bGRUaHJvdygiSW50bC5D
b2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLSonKSIsICInUmFuZ2VFcnJvcjogaW52YWxp
ZCBsYW5ndWFnZSB0YWc6IGVuLSonIik7CitzaG91bGRUaHJvdygiSW50bC5Db2xsYXRvci5zdXBw
b3J0ZWRMb2NhbGVzT2YoJ2VuLScpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRh
ZzogZW4tJyIpOworc2hvdWxkVGhyb3coIkludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09m
KCdlbi0tVVMnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLS1VUyci
KTsKIAogLy8gMTAuMyBQcm9wZXJ0aWVzIG9mIHRoZSBJbnRsLkNvbGxhdG9yIFByb3RvdHlwZSBP
YmplY3QKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2ludGwtZGF0
ZXRpbWVmb3JtYXQuanMgYi9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1kYXRldGlt
ZWZvcm1hdC5qcwppbmRleCBiYzdjOWE3N2NlMjExNjJkZDJiODM3ZjU1ZmU0ZjE3MjNjZjc4NGY4
Li5lZGUxYjVjZTM0NmZkMjkwNTMwYjM3Mzc3ZjAwY2FlNTAzN2U2MDdmIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1kYXRldGltZWZvcm1hdC5qcworKysgYi9M
YXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1kYXRldGltZWZvcm1hdC5qcwpAQCAtMzcs
NiArMzcsNDEgQEAgc2hvdWxkQmUoIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mLmxlbmd0aCIsICIxIik7CiAKIC8vIFJldHVybnMgU3VwcG9ydGVkTG9jYWxlcwogc2hvdWxk
QmVUeXBlKCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZigpIiwgIkFycmF5
Iik7CisvLyBEb2Vzbid0IGNhcmUgYWJvdXQgYHRoaXNgLgorc2hvdWxkQmUoIkludGwuRGF0ZVRp
bWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLmNhbGwobnVsbCwgJ2VuJykiLCAiWyAnZW4nIF0i
KTsKK3Nob3VsZEJlKCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5jYWxs
KHt9LCAnZW4nKSIsICJbICdlbicgXSIpOworc2hvdWxkQmUoIkludGwuRGF0ZVRpbWVGb3JtYXQu
c3VwcG9ydGVkTG9jYWxlc09mLmNhbGwoMSwgJ2VuJykiLCAiWyAnZW4nIF0iKTsKKy8vIElnbm9y
ZXMgbm9uLW9iamVjdCwgbm9uLXN0cmluZyBsaXN0Lgorc2hvdWxkQmUoIkludGwuRGF0ZVRpbWVG
b3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKDkpIiwgIltdIik7CisvLyBNYWtlcyBhbiBhcnJheSBv
ZiB0YWdzLgorc2hvdWxkQmUoIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09m
KCdlbicpIiwgIlsgJ2VuJyBdIik7CisvLyBIYW5kbGVzIGFycmF5LWxpa2Ugb2JqZWN0cyB3aXRo
IGhvbGVzLgorc2hvdWxkQmUoIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09m
KHsgbGVuZ3RoOiA0LCAxOiAnZW4nLCAwOiAnZXMnLCAzOiAnZGUnIH0pIiwgIlsgJ2VzJywgJ2Vu
JywgJ2RlJyBdIik7CisvLyBEZWR1cGxpY2F0ZXMgdGFncy4KK3Nob3VsZEJlKCJJbnRsLkRhdGVU
aW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihbICdlbicsICdwdCcsICdlbicsICdlcycgXSki
LCAiWyAnZW4nLCAncHQnLCAnZXMnIF0iKTsKKy8vIENhbm9uaWNhbGl6ZXMgdGFncy4KK3Nob3Vs
ZEJlKCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignRW4tbGFUbi11cy12
YXJpYW50Mi12YXJpYW50MS0xYWJjLVUta28tdFJ1ZS1BLWFhLWFhYS14LVJFU0VSVkVEJykiLCAi
WyAnZW4tTGF0bi1VUy12YXJpYW50Mi12YXJpYW50MS0xYWJjLWEtYWEtYWFhLXUta28tdHJ1ZS14
LXJlc2VydmVkJyBdIik7CisvLyBSZXBsYWNlcyBvdXRkYXRlZCB0YWdzLgorc2hvdWxkQmUoIklu
dGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCduby1ib2snKSIsICJbICduYicg
XSIpOworLy8gRG9lc24ndCB0aHJvdywgYnV0IGlnbm9yZXMgcHJpdmF0ZSB0YWdzLgorc2hvdWxk
QmUoIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCd4LXNvbWUtdGhpbmcn
KSIsICJbXSIpOworLy8gVGhyb3dzIG9uIHByb2JsZW1zIHdpdGggbGVuZ3RoLCBnZXQsIG9yIHRv
U3RyaW5nLgorc2hvdWxkVGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mKE9iamVjdC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcign
YScpIH0gfSB9KSkiLCAiJ0Vycm9yOiBhJyIpOworc2hvdWxkVGhyb3coIkludGwuRGF0ZVRpbWVG
b3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKE9iamVjdC5jcmVhdGUobnVsbCwgeyBsZW5ndGg6IHsg
dmFsdWU6IDEgfSwgMDogeyBnZXQoKSB7IHRocm93IEVycm9yKCdiJykgfSB9IH0pKSIsICInRXJy
b3I6IGInIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2Nh
bGVzT2YoWyB7IHRvU3RyaW5nKCkgeyB0aHJvdyBFcnJvcignYycpIH0gfSBdKSIsICInRXJyb3I6
IGMnIik7CisvLyBUaHJvd3Mgb24gYmFkIHRhZ3MuCitzaG91bGRUaHJvdygiSW50bC5EYXRlVGlt
ZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoWyA1IF0pIiwgIidUeXBlRXJyb3I6IGxvY2FsZSB2
YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG9iamVjdCciKTsKK3Nob3VsZFRocm93KCJJbnRsLkRh
dGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignJykiLCAiJ1JhbmdlRXJyb3I6IGludmFs
aWQgbGFuZ3VhZ2UgdGFnOiAnIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRlVGltZUZvcm1hdC5z
dXBwb3J0ZWRMb2NhbGVzT2YoJ2EnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0
YWc6IGEnIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2Nh
bGVzT2YoJ2FiY2RlZmdoaWonKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6
IGFiY2RlZmdoaWonIik7CitzaG91bGRUaHJvdygiSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0
ZWRMb2NhbGVzT2YoJyMkJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiAj
JCciKTsKK3Nob3VsZFRocm93KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNP
ZignZW4tQC1hYmMnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLUAt
YWJjJyIpOworc2hvdWxkVGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxl
c09mKCdlbi11JykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi11JyIp
Oworc2hvdWxkVGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdl
bi11LWtuLXRydWUtdS1rby10cnVlJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2Ug
dGFnOiBlbi11LWtuLXRydWUtdS1rby10cnVlJyIpOworc2hvdWxkVGhyb3coIkludGwuRGF0ZVRp
bWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi14JykiLCAiJ1JhbmdlRXJyb3I6IGludmFs
aWQgbGFuZ3VhZ2UgdGFnOiBlbi14JyIpOworc2hvdWxkVGhyb3coIkludGwuRGF0ZVRpbWVGb3Jt
YXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi0qJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFu
Z3VhZ2UgdGFnOiBlbi0qJyIpOworc2hvdWxkVGhyb3coIkludGwuRGF0ZVRpbWVGb3JtYXQuc3Vw
cG9ydGVkTG9jYWxlc09mKCdlbi0nKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0
YWc6IGVuLSciKTsKK3Nob3VsZFRocm93KCJJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExv
Y2FsZXNPZignZW4tLVVTJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBl
bi0tVVMnIik7CiAKIC8vIDEyLjMgUHJvcGVydGllcyBvZiB0aGUgSW50bC5EYXRlVGltZUZvcm1h
dCBQcm90b3R5cGUgT2JqZWN0CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3NjcmlwdC10
ZXN0cy9pbnRsLW51bWJlcmZvcm1hdC5qcyBiL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9p
bnRsLW51bWJlcmZvcm1hdC5qcwppbmRleCAwNjVkOTIxNTY1NDM0MmRhN2U0ZjIzM2U2M2NkNTdh
ZGZlNTlkNGViLi4wN2RmOGM4ODUzOGFmNjk3YTZiYTk5M2NkMGM0NDc0YTY2ZTQ4MmQwIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaW50bC1udW1iZXJmb3JtYXQuanMK
KysrIGIvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2ludGwtbnVtYmVyZm9ybWF0LmpzCkBA
IC0zNyw2ICszNyw0MSBAQCBzaG91bGRCZSgiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9j
YWxlc09mLmxlbmd0aCIsICIxIik7CiAKIC8vIFJldHVybnMgU3VwcG9ydGVkTG9jYWxlcwogc2hv
dWxkQmVUeXBlKCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoKSIsICJBcnJh
eSIpOworLy8gRG9lc24ndCBjYXJlIGFib3V0IGB0aGlzYC4KK3Nob3VsZEJlKCJJbnRsLk51bWJl
ckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YuY2FsbChudWxsLCAnZW4nKSIsICJbICdlbicgXSIp
Oworc2hvdWxkQmUoIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZi5jYWxsKHt9
LCAnZW4nKSIsICJbICdlbicgXSIpOworc2hvdWxkQmUoIkludGwuTnVtYmVyRm9ybWF0LnN1cHBv
cnRlZExvY2FsZXNPZi5jYWxsKDEsICdlbicpIiwgIlsgJ2VuJyBdIik7CisvLyBJZ25vcmVzIG5v
bi1vYmplY3QsIG5vbi1zdHJpbmcgbGlzdC4KK3Nob3VsZEJlKCJJbnRsLk51bWJlckZvcm1hdC5z
dXBwb3J0ZWRMb2NhbGVzT2YoOSkiLCAiW10iKTsKKy8vIE1ha2VzIGFuIGFycmF5IG9mIHRhZ3Mu
CitzaG91bGRCZSgiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbicpIiwg
IlsgJ2VuJyBdIik7CisvLyBIYW5kbGVzIGFycmF5LWxpa2Ugb2JqZWN0cyB3aXRoIGhvbGVzLgor
c2hvdWxkQmUoIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZih7IGxlbmd0aDog
NCwgMTogJ2VuJywgMDogJ2VzJywgMzogJ2RlJyB9KSIsICJbICdlcycsICdlbicsICdkZScgXSIp
OworLy8gRGVkdXBsaWNhdGVzIHRhZ3MuCitzaG91bGRCZSgiSW50bC5OdW1iZXJGb3JtYXQuc3Vw
cG9ydGVkTG9jYWxlc09mKFsgJ2VuJywgJ3B0JywgJ2VuJywgJ2VzJyBdKSIsICJbICdlbicsICdw
dCcsICdlcycgXSIpOworLy8gQ2Fub25pY2FsaXplcyB0YWdzLgorc2hvdWxkQmUoIkludGwuTnVt
YmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignRW4tbGFUbi11cy12YXJpYW50Mi12YXJpYW50
MS0xYWJjLVUta28tdFJ1ZS1BLWFhLWFhYS14LVJFU0VSVkVEJykiLCAiWyAnZW4tTGF0bi1VUy12
YXJpYW50Mi12YXJpYW50MS0xYWJjLWEtYWEtYWFhLXUta28tdHJ1ZS14LXJlc2VydmVkJyBdIik7
CisvLyBSZXBsYWNlcyBvdXRkYXRlZCB0YWdzLgorc2hvdWxkQmUoIkludGwuTnVtYmVyRm9ybWF0
LnN1cHBvcnRlZExvY2FsZXNPZignbm8tYm9rJykiLCAiWyAnbmInIF0iKTsKKy8vIERvZXNuJ3Qg
dGhyb3csIGJ1dCBpZ25vcmVzIHByaXZhdGUgdGFncy4KK3Nob3VsZEJlKCJJbnRsLk51bWJlckZv
cm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ3gtc29tZS10aGluZycpIiwgIltdIik7CisvLyBUaHJv
d3Mgb24gcHJvYmxlbXMgd2l0aCBsZW5ndGgsIGdldCwgb3IgdG9TdHJpbmcuCitzaG91bGRUaHJv
dygiSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKE9iamVjdC5jcmVhdGUobnVs
bCwgeyBsZW5ndGg6IHsgZ2V0KCkgeyB0aHJvdyBFcnJvcignYScpIH0gfSB9KSkiLCAiJ0Vycm9y
OiBhJyIpOworc2hvdWxkVGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNP
ZihPYmplY3QuY3JlYXRlKG51bGwsIHsgbGVuZ3RoOiB7IHZhbHVlOiAxIH0sIDA6IHsgZ2V0KCkg
eyB0aHJvdyBFcnJvcignYicpIH0gfSB9KSkiLCAiJ0Vycm9yOiBiJyIpOworc2hvdWxkVGhyb3co
IkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihbIHsgdG9TdHJpbmcoKSB7IHRo
cm93IEVycm9yKCdjJykgfSB9IF0pIiwgIidFcnJvcjogYyciKTsKKy8vIFRocm93cyBvbiBiYWQg
dGFncy4KK3Nob3VsZFRocm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2Yo
WyA1IF0pIiwgIidUeXBlRXJyb3I6IGxvY2FsZSB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG9i
amVjdCciKTsKK3Nob3VsZFRocm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YoJycpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogJyIpOworc2hvdWxk
VGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignYScpIiwgIidSYW5n
ZUVycm9yOiBpbnZhbGlkIGxhbmd1YWdlIHRhZzogYSciKTsKK3Nob3VsZFRocm93KCJJbnRsLk51
bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2FiY2RlZmdoaWonKSIsICInUmFuZ2VFcnJv
cjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGFiY2RlZmdoaWonIik7CitzaG91bGRUaHJvdygiSW50
bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCcjJCcpIiwgIidSYW5nZUVycm9yOiBp
bnZhbGlkIGxhbmd1YWdlIHRhZzogIyQnIik7CitzaG91bGRUaHJvdygiSW50bC5OdW1iZXJGb3Jt
YXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi1ALWFiYycpIiwgIidSYW5nZUVycm9yOiBpbnZhbGlk
IGxhbmd1YWdlIHRhZzogZW4tQC1hYmMnIik7CitzaG91bGRUaHJvdygiSW50bC5OdW1iZXJGb3Jt
YXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi11JykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQgbGFu
Z3VhZ2UgdGFnOiBlbi11JyIpOworc2hvdWxkVGhyb3coIkludGwuTnVtYmVyRm9ybWF0LnN1cHBv
cnRlZExvY2FsZXNPZignZW4tdS1rbi10cnVlLXUta28tdHJ1ZScpIiwgIidSYW5nZUVycm9yOiBp
bnZhbGlkIGxhbmd1YWdlIHRhZzogZW4tdS1rbi10cnVlLXUta28tdHJ1ZSciKTsKK3Nob3VsZFRo
cm93KCJJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoJ2VuLXgnKSIsICInUmFu
Z2VFcnJvcjogaW52YWxpZCBsYW5ndWFnZSB0YWc6IGVuLXgnIik7CitzaG91bGRUaHJvdygiSW50
bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKCdlbi0qJykiLCAiJ1JhbmdlRXJyb3I6
IGludmFsaWQgbGFuZ3VhZ2UgdGFnOiBlbi0qJyIpOworc2hvdWxkVGhyb3coIkludGwuTnVtYmVy
Rm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZignZW4tJykiLCAiJ1JhbmdlRXJyb3I6IGludmFsaWQg
bGFuZ3VhZ2UgdGFnOiBlbi0nIik7CitzaG91bGRUaHJvdygiSW50bC5OdW1iZXJGb3JtYXQuc3Vw
cG9ydGVkTG9jYWxlc09mKCdlbi0tVVMnKSIsICInUmFuZ2VFcnJvcjogaW52YWxpZCBsYW5ndWFn
ZSB0YWc6IGVuLS1VUyciKTsKIAogLy8gMTEuMyBQcm9wZXJ0aWVzIG9mIHRoZSBJbnRsLk51bWJl
ckZvcm1hdCBQcm90b3R5cGUgT2JqZWN0CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>